From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30971 invoked by alias); 12 Feb 2002 14:56:06 -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 30898 invoked by uid 71); 12 Feb 2002 14:56:03 -0000 Resent-Date: 12 Feb 2002 14:56:03 -0000 Resent-Message-ID: <20020212145603.30897.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-To: nobody@gcc.gnu.org Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, cheng@pcigeomatics.com Received:(qmail 23038 invoked by uid 61); 12 Feb 2002 14:46:08 -0000 Message-Id:<20020212144607.23033.qmail@sources.redhat.com> Date: Tue, 12 Feb 2002 06:56:00 -0000 From: cheng@pcigeomatics.com Reply-To: cheng@pcigeomatics.com To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version:gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c++/5667: Internal compiler error X-SW-Source: 2002-02/txt/msg00275.txt.bz2 List-Id: >Number: 5667 >Category: c++ >Synopsis: Internal compiler error >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Tue Feb 12 06:56:02 PST 2002 >Closed-Date: >Last-Modified: >Originator: Philip Cheng >Release: gcc 3.0.3 >Organization: >Environment: Sun Solaris 2.7 >Description: vecclean.cpp:6442: warning: unused variable `CVCLShape*poDangleShape' /usr/local/include/g++-v3/bits/stl_algo.h: In function `_RandomAccessIter std::__unguarded_partition(_RandomAccessIter, _RandomAccessIter, _Tp, _Compare) [with _RandomAccessIter = std::__normal_iterator*, std::vector, std::allocator > > >, _Tp = std::pair, _Compare = TBool (*)(const std::pair&, const std::pair&)]': /usr/local/include/g++-v3/bits/stl_algo.h:1656: instantiated from `void std::__introsort_loop(_RandomAccessIter, _RandomAccessIter, _Tp*, _Size, _Compare) [with _RandomAccessIter = std::__normal_iterator*, std::vector, std::allocator > > >, _Tp = std::pair, _Size = long int, _Compare = TBool (*)(const std::pair&, const std::pair&)]' /usr/local/include/g++-v3/bits/stl_algo.h:1691: instantiated from `void std::sort(_RandomAccessIter, _RandomAccessIter, _Compare) [with _RandomAccessIter = std::__normal_iterator*, std::vector, std::allocator > > >, _Compare = TBool (*)(const std::pair&, const std::pair&)]' vecclean.cpp:3025: instantiated from here /usr/local/include/g++-v3/bits/stl_algo.h:1467: Internal compiler error in expand_function_start, at function.c:6424 Please submit a full bug report, with preprocessed source if appropriate. See for instructions. make[1]: *** [vecclean.o] Error 1 make[1]: Leaving directory `/home/pci/vcur/src/base/algo' make: *** [subdirs] Error 2 >How-To-Repeat: compile using gcc >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="vecclean.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="vecclean.ii" IyA4MiAidmVjY2xlYW4uY3BwIgojIDEgIi91c3IvaW5jbHVkZS9mbG9hdC5oIiAxIDMgNAojIDE2 ICIvdXNyL2luY2x1ZGUvZmxvYXQuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIylmbG9hdC5oCTEu MTUJOTcvMTEvMjIgU01JIgoKCmV4dGVybiAiQyIgewoKCgoKCmV4dGVybiBpbnQgX19mbHRfcm91 bmRzKHZvaWQpOwojIDk3ICIvdXNyL2luY2x1ZGUvZmxvYXQuaCIgMyA0Cn0KIyA4MyAidmVjY2xl YW4uY3BwIiAyCiMgMSAiLi4vLi4vLi4vbGliL2dkYi5oIiAxCiMgMzQ1ICIuLi8uLi8uLi9saWIv Z2RiLmgiCiMgMSAiLi4vLi4vLi4vbGliL2NjbGNvbnYuaCIgMQojIDc1ICIuLi8uLi8uLi9saWIv Y2NsY29udi5oIgojIDEgIi4uLy4uLy4uL2xpYi9jY2xiYXNlLmgiIDEKIyAzOSAiLi4vLi4vLi4v bGliL2NjbGJhc2UuaCIKZXh0ZXJuICJDIiB7CgojIDEgIi4uLy4uLy4uL2xpYi9wY2lzeXMuaCIg MQojIDQyICIuLi8uLi8uLi9saWIvY2NsYmFzZS5oIiAyCiMgMSAiLi4vLi4vLi4vbGliL2NjbGNv bmYuaCIgMQojIDQzICIuLi8uLi8uLi9saWIvY2NsYmFzZS5oIiAyCiMgMSAiLi4vLi4vLi4vbGli L2NjbHBvcnQuaCIgMQojIDY1ICIuLi8uLi8uLi9saWIvY2NscG9ydC5oIgojIDEgIi4uLy4uLy4u L2xpYi9wY2lzeXMuaCIgMQojIDY2ICIuLi8uLi8uLi9saWIvY2NscG9ydC5oIiAyCiMgMTI5ICIu Li8uLi8uLi9saWIvY2NscG9ydC5oIgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2 OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3N0ZGlvLmgiIDEgMyA0CiMgMTQgIi91c3Iv bG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3N0 ZGlvLmgiIDMgNAojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJp czIuNy8zLjAuMy9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMgNAojIDQzICIvdXNyL2xvY2FsL2xpYi9n Y2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zdGRhcmcuaCIgMyA0 CnR5cGVkZWYgX19idWlsdGluX3ZhX2xpc3QgX19nbnVjX3ZhX2xpc3Q7CiMgMTUgIi91c3IvbG9j YWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3N0ZGlv LmgiIDIgMyA0CiMgMzQgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJp czIuNy8zLjAuMy9pbmNsdWRlL3N0ZGlvLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpc3RkaW8u aAkxLjY5CTk4LzA3LzEzIFNNSSIKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3Rz LmgiIDEgMyA0CiMgMTMgIi91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAzIDQKI3By YWdtYSBpZGVudCAiQCgjKWZlYXR1cmVfdGVzdHMuaAkxLjE3CTk3LzEyLzA0IFNNSSIKCiMgMSAi L3Vzci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAxIDMgNAojIDkgIi91c3IvaW5jbHVkZS9zeXMv aXNhX2RlZnMuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIylpc2FfZGVmcy5oCTEuMTYJOTkvMDUv MjUgU01JIgojIDE0OCAiL3Vzci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAzIDQKZXh0ZXJuICJD IiB7CiMgMzMwICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDMgNAp9CiMgMTYgIi91c3Iv aW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAyIDMgNAoKCmV4dGVybiAiQyIgewojIDE3NSAi L3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDMgNAp9CiMgMzcgIi91c3IvbG9jYWwv bGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3N0ZGlvLmgi IDIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy92YV9saXN0LmgiIDEgMyA0CiMgOSAiL3Vzci9p bmNsdWRlL3N5cy92YV9saXN0LmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpdmFfbGlzdC5oCTEu MTEJOTcvMTEvMjIgU01JIgojIDIyICIvdXNyL2luY2x1ZGUvc3lzL3ZhX2xpc3QuaCIgMyA0CmV4 dGVybiAiQyIgewoKCgp0eXBlZGVmIHZvaWQgKl9fdmFfbGlzdDsKCgoKCgp9CiMgMzggIi91c3Iv bG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3N0 ZGlvLmgiIDIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGlvX3RhZy5oIiAxIDMgNAojIDkgIi91 c3IvaW5jbHVkZS9zdGRpb190YWcuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIylzdGRpb190YWcu aAkxLjMJOTgvMDQvMjAgU01JIgoKCmV4dGVybiAiQyIgewojIDIxICIvdXNyL2luY2x1ZGUvc3Rk aW9fdGFnLmgiIDMgNAp0eXBlZGVmIHN0cnVjdCBGSUxFIF9fRklMRTsKCgoKfQojIDM5ICIvdXNy L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9z dGRpby5oIiAyIDMgNAojIDEgIi91c3IvaW5jbHVkZS9zdGRpb19pbXBsLmgiIDEgMyA0CiMgOSAi L3Vzci9pbmNsdWRlL3N0ZGlvX2ltcGwuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIylzdGRpb19p bXBsLmgJMS44CTk5LzA2LzMwIFNNSSIKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5o IiAxIDMgNAojIDEyICIvdXNyL2luY2x1ZGUvc3RkaW9faW1wbC5oIiAyIDMgNAoKCmV4dGVybiAi QyIgewoKCgoKCnR5cGVkZWYgbG9uZyBzc2l6ZV90OwojIDMwICIvdXNyL2luY2x1ZGUvc3RkaW9f aW1wbC5oIiAzIDQKc3RydWN0IEZJTEUgewogICAgICAgIGxvbmcgX19wYWRbMTZdOwp9OwojIDU4 ICIvdXNyL2luY2x1ZGUvc3RkaW9faW1wbC5oIiAzIDQKfQojIDQwICIvdXNyL2xvY2FsL2xpYi9n Y2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zdGRpby5oIiAyIDMg NAojIDUwICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4w LjMvaW5jbHVkZS9zdGRpby5oIiAzIDQKZXh0ZXJuICJDIiB7CgoKCgp0eXBlZGVmIF9fRklMRSBG SUxFOwoKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBzaXplX3Q7CiMgODggIi91c3IvbG9jYWwv bGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3N0ZGlvLmgi IDMgNAp0eXBlZGVmIGxvbmcgb2ZmX3Q7CgoKCgoKdHlwZWRlZiBvZmZfdCBvZmY2NF90OwojIDEw MyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2lu Y2x1ZGUvc3RkaW8uaCIgMyA0CnR5cGVkZWYgbG9uZyBmcG9zX3Q7CgoKCgoKdHlwZWRlZiBmcG9z X3QgZnBvczY0X3Q7CiMgMTMyICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNv bGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zdGRpby5oIiAzIDQKdHlwZWRlZiBfX3ZhX2xpc3QgX19u b3RfdmFfbGlzdF9fOwojIDIwMyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1z b2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiBGSUxFIF9faW9iWzIw XTsKIyAyMTUgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8z LjAuMy9pbmNsdWRlL3N0ZGlvLmgiIDMgNApleHRlcm4gdW5zaWduZWQgY2hhciBfc2lidWZbXSwg X3NvYnVmW107CiMgMjc1ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFy aXMyLjcvMy4wLjMvaW5jbHVkZS9zdGRpby5oIiAzIDQKZXh0ZXJuIGludCByZW1vdmUoY29uc3Qg Y2hhciAqKTsKZXh0ZXJuIGludCByZW5hbWUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpl eHRlcm4gRklMRSAqdG1wZmlsZSh2b2lkKTsKZXh0ZXJuIGNoYXIgKnRtcG5hbShjaGFyICopOwoK ZXh0ZXJuIGNoYXIgKnRtcG5hbV9yKGNoYXIgKik7CgpleHRlcm4gaW50IGZjbG9zZShGSUxFICop OwpleHRlcm4gaW50IGZmbHVzaChGSUxFICopOwpleHRlcm4gRklMRSAqZm9wZW4oY29uc3QgY2hh ciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gRklMRSAqZnJlb3Blbihjb25zdCBjaGFyICosIGNv bnN0IGNoYXIgKiwgRklMRSAqKTsKZXh0ZXJuIHZvaWQgc2V0YnVmKEZJTEUgKiwgY2hhciAqKTsK CgpleHRlcm4gdm9pZCBzZXRidWZmZXIoRklMRSAqLCBjaGFyICosIHNpemVfdCk7CmV4dGVybiBp bnQgc2V0bGluZWJ1ZihGSUxFICopOwoKZXh0ZXJuIGludCBzZXR2YnVmKEZJTEUgKiwgY2hhciAq LCBpbnQsIHNpemVfdCk7CgpleHRlcm4gaW50IGZwcmludGYoRklMRSAqLCBjb25zdCBjaGFyICos IC4uLik7CgpleHRlcm4gaW50IGZzY2FuZihGSUxFICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKCmV4 dGVybiBpbnQgcHJpbnRmKGNvbnN0IGNoYXIgKiwgLi4uKTsKCmV4dGVybiBpbnQgc2NhbmYoY29u c3QgY2hhciAqLCAuLi4pOwoKCgoKZXh0ZXJuIGludCBzbnByaW50ZihjaGFyICosIHNpemVfdCwg Y29uc3QgY2hhciAqLCAuLi4pOwoKCmV4dGVybiBpbnQgc3ByaW50ZihjaGFyICosIGNvbnN0IGNo YXIgKiwgLi4uKTsKCmV4dGVybiBpbnQgc3NjYW5mKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq LCAuLi4pOwpleHRlcm4gaW50IHZmcHJpbnRmKEZJTEUgKiwgY29uc3QgY2hhciAqLCBfX2dudWNf dmFfbGlzdCk7CmV4dGVybiBpbnQgdnByaW50Zihjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0 KTsKCgoKZXh0ZXJuIGludCB2c25wcmludGYoY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwg X19nbnVjX3ZhX2xpc3QpOwoKZXh0ZXJuIGludCB2c3ByaW50ZihjaGFyICosIGNvbnN0IGNoYXIg KiwgX19nbnVjX3ZhX2xpc3QpOwpleHRlcm4gaW50IGZnZXRjKEZJTEUgKik7CmV4dGVybiBjaGFy ICpmZ2V0cyhjaGFyICosIGludCwgRklMRSAqKTsKZXh0ZXJuIGludCBmcHV0YyhpbnQsIEZJTEUg Kik7CmV4dGVybiBpbnQgZnB1dHMoY29uc3QgY2hhciAqLCBGSUxFICopOwpleHRlcm4gaW50IGdl dGMoRklMRSAqKTsKZXh0ZXJuIGludCBnZXRjaGFyKHZvaWQpOwpleHRlcm4gY2hhciAqZ2V0cyhj aGFyICopOwpleHRlcm4gaW50IHB1dGMoaW50LCBGSUxFICopOwpleHRlcm4gaW50IHB1dGNoYXIo aW50KTsKZXh0ZXJuIGludCBwdXRzKGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgdW5nZXRjKGlu dCwgRklMRSAqKTsKZXh0ZXJuIHNpemVfdCBmcmVhZCh2b2lkICosIHNpemVfdCwgc2l6ZV90LCBG SUxFICopOwpleHRlcm4gc2l6ZV90IGZ3cml0ZShjb25zdCB2b2lkICosIHNpemVfdCwgc2l6ZV90 LCBGSUxFICopOwpleHRlcm4gaW50IGZnZXRwb3MoRklMRSAqLCBmcG9zX3QgKik7CmV4dGVybiBp bnQgZnNlZWsoRklMRSAqLCBsb25nLCBpbnQpOwpleHRlcm4gaW50IGZzZXRwb3MoRklMRSAqLCBj b25zdCBmcG9zX3QgKik7CmV4dGVybiBsb25nIGZ0ZWxsKEZJTEUgKik7CmV4dGVybiB2b2lkIHJl d2luZChGSUxFICopOwpleHRlcm4gdm9pZCBjbGVhcmVycihGSUxFICopOwpleHRlcm4gaW50IGZl b2YoRklMRSAqKTsKZXh0ZXJuIGludCBmZXJyb3IoRklMRSAqKTsKZXh0ZXJuIHZvaWQgcGVycm9y KGNvbnN0IGNoYXIgKik7CiMgMzUzICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3Vu LXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zdGRpby5oIiAzIDQKZXh0ZXJuIEZJTEUgKmZkb3Bl bihpbnQsIGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICpjdGVybWlkKGNoYXIgKik7CmV4dGVy biBpbnQgZmlsZW5vKEZJTEUgKik7CiMgMzY0ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJj djktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zdGRpby5oIiAzIDQKZXh0ZXJuIHZvaWQg ZmxvY2tmaWxlKEZJTEUgKik7CmV4dGVybiBpbnQgZnRyeWxvY2tmaWxlKEZJTEUgKik7CmV4dGVy biB2b2lkIGZ1bmxvY2tmaWxlKEZJTEUgKik7CmV4dGVybiBpbnQgZ2V0Y191bmxvY2tlZChGSUxF ICopOwpleHRlcm4gaW50IGdldGNoYXJfdW5sb2NrZWQodm9pZCk7CmV4dGVybiBpbnQgcHV0Y191 bmxvY2tlZChpbnQsIEZJTEUgKik7CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxvY2tlZChpbnQpOwoj IDM3OSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4z L2luY2x1ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiBGSUxFICpwb3Blbihjb25zdCBjaGFyICosIGNv bnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICpjdXNlcmlkKGNoYXIgKik7CmV4dGVybiBjaGFyICp0 ZW1wbmFtKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCBnZXRvcHQoaW50 LCBjaGFyICpjb25zdCAqLCBjb25zdCBjaGFyICopOwoKCgpleHRlcm4gY2hhciAqb3B0YXJnOwpl eHRlcm4gaW50IG9wdGluZCwgb3B0ZXJyLCBvcHRvcHQ7CmV4dGVybiBpbnQgZ2V0dyhGSUxFICop OwpleHRlcm4gaW50IHB1dHcoaW50LCBGSUxFICopOwpleHRlcm4gaW50IHBjbG9zZShGSUxFICop OwoKCgoKCgoKZXh0ZXJuIGludCBmc2Vla28oRklMRSAqLCBvZmZfdCwgaW50KTsKZXh0ZXJuIG9m Zl90IGZ0ZWxsbyhGSUxFICopOwojIDU4NiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5 LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvc3RkaW8uaCIgMyA0Cn0KIyAxMzAgIi4uLy4u Ly4uL2xpYi9jY2xwb3J0LmgiIDIKIyAxNjIgIi4uLy4uLy4uL2xpYi9jY2xwb3J0LmgiCiMgMSAi L3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1 ZGUvbWF0aC5oIiAxIDMgNAojIDI0ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3Vu LXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9tYXRoLmgiIDMgNApleHRlcm4gIkMiIHsKCgojcHJh Z21hIGlkZW50ICJAKCMpbWF0aC5oCTIuNwk5OC8wMS8yNyIKIyA0NiAiL3Vzci9sb2NhbC9saWIv Z2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvbWF0aC5oIiAzIDQK dHlwZWRlZiB1bmlvbiBfaF92YWwgewogICAgICAgIHVuc2lnbmVkIGxvbmcgX2lbc2l6ZW9mKGRv dWJsZSkgLyBzaXplb2YodW5zaWduZWQgbG9uZyldOwogICAgICAgIGRvdWJsZSBfZDsKfSBfaF92 YWw7CgoKZXh0ZXJuIGNvbnN0IF9oX3ZhbCBfX2h1Z2VfdmFsOwojIDgwICIvdXNyL2xvY2FsL2xp Yi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9tYXRoLmgiIDMg NApleHRlcm4gaW50IHNpZ25nYW07CgoKCgoKCgplbnVtIHZlcnNpb24ge2xpYm1faWVlZSA9IC0x LCBjX2lzc3VlXzQsIGFuc2lfMSwgc3RyaWN0X2Fuc2l9OwoKCmV4dGVybiBjb25zdCBlbnVtIHZl cnNpb24gX2xpYl92ZXJzaW9uOwoKCgoKc3RydWN0IF9fbWF0aF9leGNlcHRpb24gewogICAgICAg IGludCB0eXBlOwogICAgICAgIGNoYXIgKm5hbWU7CiAgICAgICAgZG91YmxlIGFyZzE7CiAgICAg ICAgZG91YmxlIGFyZzI7CiAgICAgICAgZG91YmxlIHJldHZhbDsKfTsKIyAxMzQgIi91c3IvbG9j YWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL21hdGgu aCIgMyA0CmV4dGVybiBkb3VibGUgYWNvcyAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBhc2luIChk b3VibGUpOwpleHRlcm4gZG91YmxlIGF0YW4gKGRvdWJsZSk7CmV4dGVybiBkb3VibGUgYXRhbjIg KGRvdWJsZSwgZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBjb3MgKGRvdWJsZSk7CmV4dGVybiBkb3Vi bGUgc2luIChkb3VibGUpOwpleHRlcm4gZG91YmxlIHRhbiAoZG91YmxlKTsKCmV4dGVybiBkb3Vi bGUgY29zaCAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBzaW5oIChkb3VibGUpOwpleHRlcm4gZG91 YmxlIHRhbmggKGRvdWJsZSk7CgpleHRlcm4gZG91YmxlIGV4cCAoZG91YmxlKTsKZXh0ZXJuIGRv dWJsZSBmcmV4cCAoZG91YmxlLCBpbnQgKik7CmV4dGVybiBkb3VibGUgbGRleHAgKGRvdWJsZSwg aW50KTsKZXh0ZXJuIGRvdWJsZSBsb2cgKGRvdWJsZSk7CmV4dGVybiBkb3VibGUgbG9nMTAgKGRv dWJsZSk7CmV4dGVybiBkb3VibGUgbW9kZiAoZG91YmxlLCBkb3VibGUgKik7CgpleHRlcm4gZG91 YmxlIHBvdyAoZG91YmxlLCBkb3VibGUpOwpleHRlcm4gZG91YmxlIHNxcnQgKGRvdWJsZSk7Cgpl eHRlcm4gZG91YmxlIGNlaWwgKGRvdWJsZSk7CmV4dGVybiBkb3VibGUgZmFicyAoZG91YmxlKTsK ZXh0ZXJuIGRvdWJsZSBmbG9vciAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBmbW9kIChkb3VibGUs IGRvdWJsZSk7CgoKCgoKCmV4dGVybiBkb3VibGUgZXJmIChkb3VibGUpOwpleHRlcm4gZG91Ymxl IGVyZmMgKGRvdWJsZSk7CmV4dGVybiBkb3VibGUgZ2FtbWEgKGRvdWJsZSk7CmV4dGVybiBkb3Vi bGUgaHlwb3QgKGRvdWJsZSwgZG91YmxlKTsKZXh0ZXJuIGludCBpc25hbiAoZG91YmxlKTsKZXh0 ZXJuIGRvdWJsZSBqMCAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBqMSAoZG91YmxlKTsKZXh0ZXJu IGRvdWJsZSBqbiAoaW50LCBkb3VibGUpOwpleHRlcm4gZG91YmxlIGxnYW1tYSAoZG91YmxlKTsK ZXh0ZXJuIGRvdWJsZSB5MCAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSB5MSAoZG91YmxlKTsKZXh0 ZXJuIGRvdWJsZSB5biAoaW50LCBkb3VibGUpOwoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBhY29zaCAo ZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBhc2luaCAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBhdGFu aCAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBjYnJ0IChkb3VibGUpOwpleHRlcm4gZG91YmxlIGxv Z2IgKGRvdWJsZSk7CmV4dGVybiBkb3VibGUgbmV4dGFmdGVyIChkb3VibGUsIGRvdWJsZSk7CmV4 dGVybiBkb3VibGUgcmVtYWluZGVyIChkb3VibGUsIGRvdWJsZSk7CmV4dGVybiBkb3VibGUgc2Nh bGIgKGRvdWJsZSwgZG91YmxlKTsKCgoKCmV4dGVybiBkb3VibGUgZXhwbTEgKGRvdWJsZSk7CmV4 dGVybiBpbnQgaWxvZ2IgKGRvdWJsZSk7CmV4dGVybiBkb3VibGUgbG9nMXAgKGRvdWJsZSk7CmV4 dGVybiBkb3VibGUgcmludCAoZG91YmxlKTsKCgoKCgoKZXh0ZXJuIGludCBtYXRoZXJyIChzdHJ1 Y3QgX19tYXRoX2V4Y2VwdGlvbiAqKTsKCgoKCmV4dGVybiBkb3VibGUgc2lnbmlmaWNhbmQgKGRv dWJsZSk7CgoKCgpleHRlcm4gZG91YmxlIGNvcHlzaWduIChkb3VibGUsIGRvdWJsZSk7CmV4dGVy biBkb3VibGUgc2NhbGJuIChkb3VibGUsIGludCk7CiMgMjMyICIvdXNyL2xvY2FsL2xpYi9nY2Mt bGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9tYXRoLmgiIDMgNApleHRl cm4gZmxvYXQgbW9kZmYgKGZsb2F0LCBmbG9hdCAqKTsKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2Nj LWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvZmxvYXRpbmdwb2ludC5o IiAxIDMgNAojIDIxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMy LjcvMy4wLjMvaW5jbHVkZS9mbG9hdGluZ3BvaW50LmgiIDMgNApleHRlcm4gIkMiIHsKCgojcHJh Z21hIGlkZW50ICJAKCMpZmxvYXRpbmdwb2ludC5oCTIuNCA5NC8wNi8wOSIKIyA0MiAiL3Vzci9s b2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvZmxv YXRpbmdwb2ludC5oIiAzIDQKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3Vu LXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zdGRpby5oIiAxIDMgNAojIDQzICIvdXNyL2xvY2Fs L2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9mbG9hdGlu Z3BvaW50LmgiIDIgMyA0CgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4t c29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3N5cy9pZWVlZnAuaCIgMSAzIDQKIyAxNyAiL3Vzci9s b2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvc3lz L2llZWVmcC5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKWllZWVmcC5oCTIuNyA5NC8xMS8wOSIK CgpleHRlcm4gIkMiIHsKCgoKCgoKZW51bSBmcF9kaXJlY3Rpb25fdHlwZSB7CiAgICAgICAgZnBf bmVhcmVzdCA9IDAsCiAgICAgICAgZnBfdG96ZXJvID0gMSwKICAgICAgICBmcF9wb3NpdGl2ZSA9 IDIsCiAgICAgICAgZnBfbmVnYXRpdmUgPSAzCn07CgplbnVtIGZwX3ByZWNpc2lvbl90eXBlIHsK ICAgICAgICBmcF9leHRlbmRlZCA9IDAsCiAgICAgICAgZnBfc2luZ2xlID0gMSwKICAgICAgICBm cF9kb3VibGUgPSAyLAogICAgICAgIGZwX3ByZWNpc2lvbl8zID0gMwp9OwoKZW51bSBmcF9leGNl cHRpb25fdHlwZSB7CiAgICAgICAgZnBfaW5leGFjdCA9IDAsCiAgICAgICAgZnBfZGl2aXNpb24g PSAxLAogICAgICAgIGZwX3VuZGVyZmxvdyA9IDIsCiAgICAgICAgZnBfb3ZlcmZsb3cgPSAzLAog ICAgICAgIGZwX2ludmFsaWQgPSA0Cn07CgplbnVtIGZwX3RyYXBfZW5hYmxlX3R5cGUgewogICAg ICAgIGZwX3RyYXBfaW5leGFjdCA9IDAsCiAgICAgICAgZnBfdHJhcF9kaXZpc2lvbiA9IDEsCiAg ICAgICAgZnBfdHJhcF91bmRlcmZsb3cgPSAyLAogICAgICAgIGZwX3RyYXBfb3ZlcmZsb3cgPSAz LAogICAgICAgIGZwX3RyYXBfaW52YWxpZCA9IDQKfTsKIyAxMzMgIi91c3IvbG9jYWwvbGliL2dj Yy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3N5cy9pZWVlZnAuaCIg MyA0CmVudW0gZnBfY2xhc3NfdHlwZSB7CiAgICAgICAgZnBfemVybyA9IDAsCiAgICAgICAgZnBf c3Vibm9ybWFsID0gMSwKICAgICAgICBmcF9ub3JtYWwgPSAyLAogICAgICAgIGZwX2luZmluaXR5 ID0gMywKICAgICAgICBmcF9xdWlldCA9IDQsCiAgICAgICAgZnBfc2lnbmFsaW5nID0gNQp9OwoK Cn0KIyA0NSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMu MC4zL2luY2x1ZGUvZmxvYXRpbmdwb2ludC5oIiAyIDMgNAojIDU4ICIvdXNyL2xvY2FsL2xpYi9n Y2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9mbG9hdGluZ3BvaW50 LmgiIDMgNAp0eXBlZGVmIGludCBzaWdmcGVfY29kZV90eXBlOwoKdHlwZWRlZiB2b2lkICgqc2ln ZnBlX2hhbmRsZXJfdHlwZSkoKTsKCgoKCgpleHRlcm4gc2lnZnBlX2hhbmRsZXJfdHlwZSBzaWdm cGUgKHNpZ2ZwZV9jb2RlX3R5cGUsIHNpZ2ZwZV9oYW5kbGVyX3R5cGUpOwoKCgoKdHlwZWRlZiBm bG9hdCBzaW5nbGU7CgoKCnR5cGVkZWYgdW5zaWduZWQgZXh0ZW5kZWRbM107CgoKdHlwZWRlZiBs b25nIGRvdWJsZSBxdWFkcnVwbGU7Cgp0eXBlZGVmIHVuc2lnbmVkIGZwX2V4Y2VwdGlvbl9maWVs ZF90eXBlOwojIDkwICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMy LjcvMy4wLjMvaW5jbHVkZS9mbG9hdGluZ3BvaW50LmgiIDMgNAp0eXBlZGVmIGNoYXIgZGVjaW1h bF9zdHJpbmdbNTEyXTsKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgZW51bSBmcF9jbGFzc190 eXBlIGZwY2xhc3M7CiAgICAgICAgaW50IHNpZ247CiAgICAgICAgaW50IGV4cG9uZW50OwogICAg ICAgIGRlY2ltYWxfc3RyaW5nIGRzOwoKCiAgICAgICAgaW50IG1vcmU7CgoKICAgICAgICBpbnQg bmRpZ2l0czsKCgp9IGRlY2ltYWxfcmVjb3JkOwoKZW51bSBkZWNpbWFsX2Zvcm0gewogICAgICAg IGZpeGVkX2Zvcm0sCgoKICAgICAgICBmbG9hdGluZ19mb3JtCgp9OwoKdHlwZWRlZiBzdHJ1Y3Qg ewogICAgICAgIGVudW0gZnBfZGlyZWN0aW9uX3R5cGUgcmQ7CgogICAgICAgIGVudW0gZGVjaW1h bF9mb3JtIGRmOwoKICAgICAgICBpbnQgbmRpZ2l0czsKfSBkZWNpbWFsX21vZGU7CgplbnVtIGRl Y2ltYWxfc3RyaW5nX2Zvcm0gewogICAgICAgIGludmFsaWRfZm9ybSwKICAgICAgICB3aGl0ZXNw YWNlX2Zvcm0sCiAgICAgICAgZml4ZWRfaW50X2Zvcm0sCiAgICAgICAgZml4ZWRfaW50ZG90X2Zv cm0sCiAgICAgICAgZml4ZWRfZG90ZnJhY19mb3JtLAogICAgICAgIGZpeGVkX2ludGRvdGZyYWNf Zm9ybSwKICAgICAgICBmbG9hdGluZ19pbnRfZm9ybSwKICAgICAgICBmbG9hdGluZ19pbnRkb3Rf Zm9ybSwKICAgICAgICBmbG9hdGluZ19kb3RmcmFjX2Zvcm0sCiAgICAgICAgZmxvYXRpbmdfaW50 ZG90ZnJhY19mb3JtLAogICAgICAgIGluZl9mb3JtLAogICAgICAgIGluZmluaXR5X2Zvcm0sCiAg ICAgICAgbmFuX2Zvcm0sCiAgICAgICAgbmFuc3RyaW5nX2Zvcm0KfTsKCmV4dGVybiB2b2lkIHNp bmdsZV90b19kZWNpbWFsIChzaW5nbGUgKiwgZGVjaW1hbF9tb2RlICosIGRlY2ltYWxfcmVjb3Jk ICosIGZwX2V4Y2VwdGlvbl9maWVsZF90eXBlICopOwoKZXh0ZXJuIHZvaWQgZG91YmxlX3RvX2Rl Y2ltYWwgKGRvdWJsZSAqLCBkZWNpbWFsX21vZGUgKiwgZGVjaW1hbF9yZWNvcmQgKiwgZnBfZXhj ZXB0aW9uX2ZpZWxkX3R5cGUgKik7CgpleHRlcm4gdm9pZCBleHRlbmRlZF90b19kZWNpbWFsIChl eHRlbmRlZCAqLCBkZWNpbWFsX21vZGUgKiwgZGVjaW1hbF9yZWNvcmQgKiwgZnBfZXhjZXB0aW9u X2ZpZWxkX3R5cGUgKik7CgpleHRlcm4gdm9pZCBxdWFkcnVwbGVfdG9fZGVjaW1hbCAocXVhZHJ1 cGxlICosIGRlY2ltYWxfbW9kZSAqLCBkZWNpbWFsX3JlY29yZCAqLCBmcF9leGNlcHRpb25fZmll bGRfdHlwZSAqKTsKCgpleHRlcm4gdm9pZCBkZWNpbWFsX3RvX3NpbmdsZSAoc2luZ2xlICosIGRl Y2ltYWxfbW9kZSAqLCBkZWNpbWFsX3JlY29yZCAqLCBmcF9leGNlcHRpb25fZmllbGRfdHlwZSAq KTsKCmV4dGVybiB2b2lkIGRlY2ltYWxfdG9fZG91YmxlIChkb3VibGUgKiwgZGVjaW1hbF9tb2Rl ICosIGRlY2ltYWxfcmVjb3JkICosIGZwX2V4Y2VwdGlvbl9maWVsZF90eXBlICopOwoKZXh0ZXJu IHZvaWQgZGVjaW1hbF90b19leHRlbmRlZCAoZXh0ZW5kZWQgKiwgZGVjaW1hbF9tb2RlICosIGRl Y2ltYWxfcmVjb3JkICosIGZwX2V4Y2VwdGlvbl9maWVsZF90eXBlICopOwoKZXh0ZXJuIHZvaWQg ZGVjaW1hbF90b19xdWFkcnVwbGUgKHF1YWRydXBsZSAqLCBkZWNpbWFsX21vZGUgKiwgZGVjaW1h bF9yZWNvcmQgKiwgZnBfZXhjZXB0aW9uX2ZpZWxkX3R5cGUgKik7CgoKZXh0ZXJuIHZvaWQgc3Ry aW5nX3RvX2RlY2ltYWwgKGNoYXIgKiosIGludCwgaW50LCBkZWNpbWFsX3JlY29yZCAqLCBlbnVt IGRlY2ltYWxfc3RyaW5nX2Zvcm0gKiwgY2hhciAqKik7CgpleHRlcm4gdm9pZCBmdW5jX3RvX2Rl Y2ltYWwgKGNoYXIgKiosIGludCwgaW50LCBkZWNpbWFsX3JlY29yZCAqLCBlbnVtIGRlY2ltYWxf c3RyaW5nX2Zvcm0gKiwgY2hhciAqKiwgaW50ICgqKSh2b2lkKSwgaW50ICosIGludCAoKikoaW50 KSk7CgoKZXh0ZXJuIHZvaWQgZmlsZV90b19kZWNpbWFsIChjaGFyICoqLCBpbnQsIGludCwgZGVj aW1hbF9yZWNvcmQgKiwgZW51bSBkZWNpbWFsX3N0cmluZ19mb3JtICosIGNoYXIgKiosIEZJTEUg KiwgaW50ICopOwoKCgpleHRlcm4gY2hhciAqc2Vjb252ZXJ0IChzaW5nbGUgKiwgaW50LCBpbnQg KiwgaW50ICosIGNoYXIgKik7CmV4dGVybiBjaGFyICpzZmNvbnZlcnQgKHNpbmdsZSAqLCBpbnQs IGludCAqLCBpbnQgKiwgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKnNnY29udmVydCAoc2luZ2xlICos IGludCwgaW50LCBjaGFyICopOwpleHRlcm4gY2hhciAqZWNvbnZlcnQgKGRvdWJsZSwgaW50LCBp bnQgKiwgaW50ICosIGNoYXIgKik7CmV4dGVybiBjaGFyICpmY29udmVydCAoZG91YmxlLCBpbnQs IGludCAqLCBpbnQgKiwgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKmdjb252ZXJ0IChkb3VibGUsIGlu dCwgaW50LCBjaGFyICopOwpleHRlcm4gY2hhciAqcWVjb252ZXJ0IChxdWFkcnVwbGUgKiwgaW50 LCBpbnQgKiwgaW50ICosIGNoYXIgKik7CmV4dGVybiBjaGFyICpxZmNvbnZlcnQgKHF1YWRydXBs ZSAqLCBpbnQsIGludCAqLCBpbnQgKiwgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKnFnY29udmVydCAo cXVhZHJ1cGxlICosIGludCwgaW50LCBjaGFyICopOwoKZXh0ZXJuIGNoYXIgKmVjdnQgKGRvdWJs ZSwgaW50LCBpbnQgKiwgaW50ICopOwpleHRlcm4gY2hhciAqZmN2dCAoZG91YmxlLCBpbnQsIGlu dCAqLCBpbnQgKik7CmV4dGVybiBjaGFyICpnY3Z0IChkb3VibGUsIGludCwgY2hhciAqKTsKCgoK CgpleHRlcm4gZG91YmxlIGF0b2YgKGNvbnN0IGNoYXIgKik7CmV4dGVybiBkb3VibGUgc3RydG9k IChjb25zdCBjaGFyICosIGNoYXIgKiopOwoKCn0KIyAyMzUgIi91c3IvbG9jYWwvbGliL2djYy1s aWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL21hdGguaCIgMiAzIDQKCgoK Cn0KIyAxNjMgIi4uLy4uLy4uL2xpYi9jY2xwb3J0LmgiIDIKCgojIDEgIi91c3IvaW5jbHVkZS9j dHlwZS5oIiAxIDMgNAojIDE2ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMyA0CiNwcmFnbWEgaWRl bnQgIkAoIyljdHlwZS5oCTEuMzAJOTgvMDEvMTYgU01JIgoKIyAxICIvdXNyL2luY2x1ZGUvc3lz L2ZlYXR1cmVfdGVzdHMuaCIgMSAzIDQKIyAxOSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDIgMyA0 CgoKZXh0ZXJuICJDIiB7CiMgNDggIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzIDQKZXh0ZXJuIGlu dCBpc2FsbnVtKGludCk7CmV4dGVybiBpbnQgaXNhbHBoYShpbnQpOwpleHRlcm4gaW50IGlzY250 cmwoaW50KTsKZXh0ZXJuIGludCBpc2RpZ2l0KGludCk7CmV4dGVybiBpbnQgaXNncmFwaChpbnQp OwpleHRlcm4gaW50IGlzbG93ZXIoaW50KTsKZXh0ZXJuIGludCBpc3ByaW50KGludCk7CmV4dGVy biBpbnQgaXNwdW5jdChpbnQpOwpleHRlcm4gaW50IGlzc3BhY2UoaW50KTsKZXh0ZXJuIGludCBp c3VwcGVyKGludCk7CmV4dGVybiBpbnQgaXN4ZGlnaXQoaW50KTsKZXh0ZXJuIGludCB0b2xvd2Vy KGludCk7CmV4dGVybiBpbnQgdG91cHBlcihpbnQpOwoKCgoKZXh0ZXJuIGludCBpc2FzY2lpKGlu dCk7CmV4dGVybiBpbnQgdG9hc2NpaShpbnQpOwpleHRlcm4gaW50IF90b2xvd2VyKGludCk7CmV4 dGVybiBpbnQgX3RvdXBwZXIoaW50KTsKCgoKZXh0ZXJuIHVuc2lnbmVkIGNoYXIgX19jdHlwZVtd OwpleHRlcm4gdW5zaWduZWQgaW50ICpfX2N0eXBlX21hc2s7CmV4dGVybiBpbnQgKl9fdHJhbnNf dXBwZXI7CmV4dGVybiBpbnQgKl9fdHJhbnNfbG93ZXI7CiMgMTYzICIvdXNyL2luY2x1ZGUvY3R5 cGUuaCIgMyA0Cn0KIyAxNjYgIi4uLy4uLy4uL2xpYi9jY2xwb3J0LmgiIDIKIyAxICIvdXNyL2lu Y2x1ZGUvZXJybm8uaCIgMSAzIDQKIyAxMSAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDMgNAojcHJh Z21hIGlkZW50ICJAKCMpZXJybm8uaAkxLjE1CTk4LzAzLzAyIFNNSSIKCgoKCgojIDEgIi91c3Iv aW5jbHVkZS9zeXMvZXJybm8uaCIgMSAzIDQKIyAxMSAiL3Vzci9pbmNsdWRlL3N5cy9lcnJuby5o IiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKWVycm5vLmgJMS4xOQk5OC8wMS8xNCBTTUkiCiMgMzUg Ii91c3IvaW5jbHVkZS9zeXMvZXJybm8uaCIgMyA0CmV4dGVybiAiQyIgewojIDE5MSAiL3Vzci9p bmNsdWRlL3N5cy9lcnJuby5oIiAzIDQKfQojIDE4ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMiAz IDQKCgpleHRlcm4gIkMiIHsKIyAzMiAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDMgNApleHRlcm4g aW50ICpfX19lcnJubygpOwoKCgoKCgp9CiMgMTY3ICIuLi8uLi8uLi9saWIvY2NscG9ydC5oIiAy CgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4w LjMvaW5jbHVkZS9zdGRsaWIuaCIgMSAzIDQKIyAyNSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9z cGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvc3RkbGliLmgiIDMgNAojcHJhZ21h IGlkZW50ICJAKCMpc3RkbGliLmgJMS40NAk5OC8wMS8yMiBTTUkiCgojIDEgIi91c3IvaW5jbHVk ZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNAojIDI4ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGli L3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zdGRsaWIuaCIgMiAzIDQKCgoK IyAxICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMSAzIDQKIyAxNiAiL3Vzci9pbmNsdWRlL3N5 cy93YWl0LmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpd2FpdC5oCTEuMjEJOTcvMDQvMDggU01J IgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIgMSAzIDQKIyAxOSAiL3Vz ci9pbmNsdWRlL3N5cy93YWl0LmgiIDIgMyA0CgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIv c3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMgNAoj IDI1ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMv aW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIyl0eXBlcy5oCTEuNjMJ OTgvMDQvMjggU01JIgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDEgMyA0CiMg MjggIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9p bmNsdWRlL3N5cy90eXBlcy5oIiAyIDMgNAojIDEgIi91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90 ZXN0cy5oIiAxIDMgNAojIDI5ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNv bGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzIDQKCgoKCiMgMSAiL3Vzci9p bmNsdWRlL3N5cy9tYWNodHlwZXMuaCIgMSAzIDQKIyAxNiAiL3Vzci9pbmNsdWRlL3N5cy9tYWNo dHlwZXMuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIyltYWNodHlwZXMuaAkxLjEyCTk2LzA4LzAx IFNNSSIKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEgMyA0CiMgMTkg Ii91c3IvaW5jbHVkZS9zeXMvbWFjaHR5cGVzLmgiIDIgMyA0CgoKZXh0ZXJuICJDIiB7CiMgMzMg Ii91c3IvaW5jbHVkZS9zeXMvbWFjaHR5cGVzLmgiIDMgNAp0eXBlZGVmIHN0cnVjdCBfcGh5c2Fk cl90IHsgaW50IHJbMV07IH0gKnBoeXNhZHJfdDsKCnR5cGVkZWYgc3RydWN0IF9sYWJlbF90IHsg bG9uZyB2YWxbMl07IH0gbGFiZWxfdDsKCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIGxvY2tfdDsK Cgp9CiMgMzQgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8z LjAuMy9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMgNAojIDQ1ICIvdXNyL2xvY2FsL2xpYi9nY2Mt bGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0 CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9pbnRfdHlwZXMuaCIgMSAzIDQKIyA5ICIvdXNyL2luY2x1 ZGUvc3lzL2ludF90eXBlcy5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKWludF90eXBlcy5oCTEu Ngk5Ny8wOC8yMCBTTUkiCiMgNDIgIi91c3IvaW5jbHVkZS9zeXMvaW50X3R5cGVzLmgiIDMgNAoj IDEgIi91c3IvaW5jbHVkZS9zeXMvaXNhX2RlZnMuaCIgMSAzIDQKIyA0MyAiL3Vzci9pbmNsdWRl L3N5cy9pbnRfdHlwZXMuaCIgMiAzIDQKCgpleHRlcm4gIkMiIHsKIyA2MiAiL3Vzci9pbmNsdWRl L3N5cy9pbnRfdHlwZXMuaCIgMyA0CnR5cGVkZWYgY2hhciBpbnQ4X3Q7CgoKCgoKdHlwZWRlZiBz aG9ydCBpbnQxNl90Owp0eXBlZGVmIGludCBpbnQzMl90OwoKdHlwZWRlZiBsb25nIGludDY0X3Q7 CgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1aW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIHNo b3J0IHVpbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50MzJfdDsKCnR5cGVkZWYgdW5z aWduZWQgbG9uZyB1aW50NjRfdDsKIyA5NCAiL3Vzci9pbmNsdWRlL3N5cy9pbnRfdHlwZXMuaCIg MyA0CnR5cGVkZWYgaW50NjRfdCBpbnRtYXhfdDsKdHlwZWRlZiB1aW50NjRfdCB1aW50bWF4X3Q7 CiMgMTA3ICIvdXNyL2luY2x1ZGUvc3lzL2ludF90eXBlcy5oIiAzIDQKdHlwZWRlZiBsb25nIGlu dHB0cl90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWludHB0cl90OwojIDExOSAiL3Vzci9pbmNs dWRlL3N5cy9pbnRfdHlwZXMuaCIgMyA0CnR5cGVkZWYgY2hhciBpbnRfbGVhc3Q4X3Q7CgoKCgoK dHlwZWRlZiBzaG9ydCBpbnRfbGVhc3QxNl90Owp0eXBlZGVmIGludCBpbnRfbGVhc3QzMl90OwoK dHlwZWRlZiBsb25nIGludF9sZWFzdDY0X3Q7CgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1 aW50X2xlYXN0OF90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVpbnRfbGVhc3QxNl90Owp0eXBl ZGVmIHVuc2lnbmVkIGludCB1aW50X2xlYXN0MzJfdDsKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyB1 aW50X2xlYXN0NjRfdDsKCgoKCgoKCn0KIyA0NiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFy Y3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0CgoKCgoK CgpleHRlcm4gIkMiIHsKIyA2MiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1z b2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIGxvbmcgbG9u ZyBsb25nbG9uZ190Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1X2xvbmdsb25nX3Q7CiMg ODIgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9p bmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKdHlwZWRlZiBpbnQzMl90IHRfc2NhbGFyX3Q7CnR5cGVk ZWYgdWludDMyX3QgdF91c2NhbGFyX3Q7CiMgOTIgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3Bh cmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKdHlwZWRl ZiB1bnNpZ25lZCBjaGFyIHVjaGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdXNob3J0X3Q7 CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnRfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIHVsb25n X3Q7Cgp0eXBlZGVmIGNoYXIgKmNhZGRyX3Q7CnR5cGVkZWYgbG9uZyBkYWRkcl90Owp0eXBlZGVm IHNob3J0IGNudF90OwojIDExMCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1z b2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIGxvbmcgaW50 IHB0cmRpZmZfdDsKIyAxMjUgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29s YXJpczIuNy8zLjAuMy9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKdHlwZWRlZiB1bG9uZ190IHBm bl90Owp0eXBlZGVmIHVsb25nX3QgcGdjbnRfdDsKdHlwZWRlZiBsb25nIHNwZ2NudF90OwoKdHlw ZWRlZiB1Y2hhcl90IHVzZV90Owp0eXBlZGVmIHNob3J0IHN5c2lkX3Q7CnR5cGVkZWYgc2hvcnQg aW5kZXhfdDsKdHlwZWRlZiB2b2lkICp0aW1lb3V0X2lkX3Q7CnR5cGVkZWYgdm9pZCAqYnVmY2Fs bF9pZF90OwojIDE2MyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlz Mi43LzMuMC4zL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIHVsb25nX3QgaW5vX3Q7 CnR5cGVkZWYgbG9uZyBibGtjbnRfdDsKdHlwZWRlZiB1bG9uZ190IGZzYmxrY250X3Q7CnR5cGVk ZWYgdWxvbmdfdCBmc2ZpbGNudF90OwojIDE3NiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFy Y3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVm IGlub190IGlubzY0X3Q7CnR5cGVkZWYgYmxrY250X3QgYmxrY250NjRfdDsKdHlwZWRlZiBmc2Js a2NudF90IGZzYmxrY250NjRfdDsKdHlwZWRlZiBmc2ZpbGNudF90IGZzZmlsY250NjRfdDsKIyAx ODkgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9p bmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKdHlwZWRlZiBpbnQgYmxrc2l6ZV90OwoKCgoKCnR5cGVk ZWYgZW51bSB7IF9CX0ZBTFNFLCBfQl9UUlVFIH0gYm9vbGVhbl90OwojIDIwOCAiL3Vzci9sb2Nh bC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvc3lzL3R5 cGVzLmgiIDMgNAp0eXBlZGVmIGludDY0X3QgcGFkNjRfdDsKdHlwZWRlZiB1aW50NjRfdCB1cGFk NjRfdDsKIyAyMjEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIu Ny8zLjAuMy9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKdHlwZWRlZiBsb25nbG9uZ190IG9mZnNl dF90Owp0eXBlZGVmIHVfbG9uZ2xvbmdfdCB1X29mZnNldF90Owp0eXBlZGVmIHVfbG9uZ2xvbmdf dCBsZW5fdDsKdHlwZWRlZiBsb25nbG9uZ190IGRpc2thZGRyX3Q7CiMgMjQyICIvdXNyL2xvY2Fs L2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zeXMvdHlw ZXMuaCIgMyA0CnR5cGVkZWYgdW5pb24gewogICAgICAgIG9mZnNldF90IF9mOwogICAgICAgIHN0 cnVjdCB7CiAgICAgICAgICAgICAgICBpbnQzMl90IF91OwogICAgICAgICAgICAgICAgaW50MzJf dCBfbDsKICAgICAgICB9IF9wOwp9IGxsb2ZmX3Q7CiMgMjYyICIvdXNyL2xvY2FsL2xpYi9nY2Mt bGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0 CnR5cGVkZWYgdW5pb24gewogICAgICAgIGRpc2thZGRyX3QgX2Y7CiAgICAgICAgc3RydWN0IHsK ICAgICAgICAgICAgICAgIGludDMyX3QgX3U7CiAgICAgICAgICAgICAgICBpbnQzMl90IF9sOwog ICAgICAgIH0gX3A7Cn0gbGxkYWRkcl90OwoKCnR5cGVkZWYgdWludF90IGtfZmx0c2V0X3Q7CiMg MjgxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMv aW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgaW50IGlkX3Q7CiMgMjk0ICIvdXNyL2xv Y2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zeXMv dHlwZXMuaCIgMyA0CnR5cGVkZWYgdWludF90IHVzZWNvbmRzX3Q7CgoKCnR5cGVkZWYgbG9uZyBz dXNlY29uZHNfdDsKCgoKCgoKdHlwZWRlZiB1aW50X3QgbWFqb3JfdDsKdHlwZWRlZiB1aW50X3Qg bWlub3JfdDsKIyAzMTUgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJp czIuNy8zLjAuMy9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKdHlwZWRlZiBzaG9ydCBwcmlfdDsK IyAzMjggIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAu My9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKdHlwZWRlZiB1c2hvcnRfdCBvX21vZGVfdDsKdHlw ZWRlZiBzaG9ydCBvX2Rldl90Owp0eXBlZGVmIHVzaG9ydF90IG9fdWlkX3Q7CnR5cGVkZWYgb191 aWRfdCBvX2dpZF90Owp0eXBlZGVmIHNob3J0IG9fbmxpbmtfdDsKdHlwZWRlZiBzaG9ydCBvX3Bp ZF90Owp0eXBlZGVmIHVzaG9ydF90IG9faW5vX3Q7CgoKCgoKdHlwZWRlZiBpbnQga2V5X3Q7Cgp0 eXBlZGVmIHVpbnRfdCBtb2RlX3Q7CgoKCgoKCgp0eXBlZGVmIGludCB1aWRfdDsKCgoKCgp0eXBl ZGVmIHVpZF90IGdpZF90OwoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBwdGhyZWFkX3Q7CnR5 cGVkZWYgdW5zaWduZWQgaW50IHB0aHJlYWRfa2V5X3Q7Cgp0eXBlZGVmIHN0cnVjdCBfcHRocmVh ZF9tdXRleCB7CiAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgIHVpbnQ4X3QgX19wdGhy ZWFkX211dGV4X2ZsYWdbNF07CiAgICAgICAgICAgICAgICB1aW50MzJfdCBfX3B0aHJlYWRfbXV0 ZXhfdHlwZTsKICAgICAgICB9IF9fcHRocmVhZF9tdXRleF9mbGFnczsKICAgICAgICB1bmlvbiB7 CiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90 IF9fcHRocmVhZF9tdXRleF9wYWRbOF07CiAgICAgICAgICAgICAgICB9IF9fcHRocmVhZF9tdXRl eF9sb2NrNjQ7CiAgICAgICAgICAgICAgICB1cGFkNjRfdCBfX3B0aHJlYWRfbXV0ZXhfb3duZXI2 NDsKICAgICAgICB9IF9fcHRocmVhZF9tdXRleF9sb2NrOwogICAgICAgIHVwYWQ2NF90IF9fcHRo cmVhZF9tdXRleF9kYXRhOwp9IHB0aHJlYWRfbXV0ZXhfdDsKCnR5cGVkZWYgc3RydWN0IF9wdGhy ZWFkX2NvbmQgewogICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICB1aW50OF90IF9fcHRo cmVhZF9jb25kX2ZsYWdbNF07CiAgICAgICAgICAgICAgICB1aW50MzJfdCBfX3B0aHJlYWRfY29u ZF90eXBlOwogICAgICAgIH0gX19wdGhyZWFkX2NvbmRfZmxhZ3M7CiAgICAgICAgdXBhZDY0X3Qg X19wdGhyZWFkX2NvbmRfZGF0YTsKfSBwdGhyZWFkX2NvbmRfdDsKCgoKCnR5cGVkZWYgc3RydWN0 IF9wdGhyZWFkX3J3bG9jayB7CiAgICAgICAgaW50MzJfdCBfX3B0aHJlYWRfcndsb2NrX3JlYWRl cnM7CiAgICAgICAgdWludDE2X3QgX19wdGhyZWFkX3J3bG9ja190eXBlOwogICAgICAgIHVpbnQx Nl90IF9fcHRocmVhZF9yd2xvY2tfbWFnaWM7CiAgICAgICAgdXBhZDY0X3QgX19wdGhyZWFkX3J3 bG9ja19wYWQxWzNdOwogICAgICAgIHVwYWQ2NF90IF9fcHRocmVhZF9yd2xvY2tfcGFkMlsyXTsK ICAgICAgICB1cGFkNjRfdCBfX3B0aHJlYWRfcndsb2NrX3BhZDNbMl07Cn0gcHRocmVhZF9yd2xv Y2tfdDsKCgoKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX2F0dHIgewogICAgICAgIHZvaWQgKl9f cHRocmVhZF9hdHRycDsKfSBwdGhyZWFkX2F0dHJfdDsKCgoKCgp0eXBlZGVmIHN0cnVjdCBfcHRo cmVhZF9tdXRleGF0dHIgewogICAgICAgIHZvaWQgKl9fcHRocmVhZF9tdXRleGF0dHJwOwp9IHB0 aHJlYWRfbXV0ZXhhdHRyX3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfY29uZGF0dHIg ewogICAgICAgIHZvaWQgKl9fcHRocmVhZF9jb25kYXR0cnA7Cn0gcHRocmVhZF9jb25kYXR0cl90 OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgX29uY2UgewogICAgICAgIHVwYWQ2NF90IF9fcHRocmVhZF9v bmNlX3BhZFs0XTsKfSBwdGhyZWFkX29uY2VfdDsKCgoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVh ZF9yd2xvY2thdHRyIHsKICAgICAgICB2b2lkICpfX3B0aHJlYWRfcndsb2NrYXR0cnA7Cn0gcHRo cmVhZF9yd2xvY2thdHRyX3Q7Cgp0eXBlZGVmIHVsb25nX3QgZGV2X3Q7CgoKdHlwZWRlZiB1aW50 X3QgbmxpbmtfdDsKdHlwZWRlZiBpbnQgcGlkX3Q7CiMgNDc2ICIvdXNyL2xvY2FsL2xpYi9nY2Mt bGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0 CnR5cGVkZWYgbG9uZyB0aW1lX3Q7CgoKCgp0eXBlZGVmIGxvbmcgY2xvY2tfdDsKCgoKCnR5cGVk ZWYgaW50IGNsb2NraWRfdDsKCgoKCnR5cGVkZWYgaW50IHRpbWVyX3Q7CgoKCgoKCnR5cGVkZWYg dW5zaWduZWQgY2hhciB1bmNoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdXNob3J0Owp0eXBl ZGVmIHVuc2lnbmVkIGludCB1aW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWxvbmc7CiMgNTUy ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5j bHVkZS9zeXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgdW5zaWduZWQgY2hhciB1X2NoYXI7CnR5cGVk ZWYgdW5zaWduZWQgc2hvcnQgdV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ7CnR5 cGVkZWYgdW5zaWduZWQgbG9uZyB1X2xvbmc7CnR5cGVkZWYgc3RydWN0IF9xdWFkIHsgaW50IHZh bFsyXTsgfSBxdWFkX3Q7CnR5cGVkZWYgcXVhZF90IHF1YWQ7CgoKCgoKCiMgMSAiL3Vzci9pbmNs dWRlL3N5cy9zZWxlY3QuaCIgMSAzIDQKIyAxMiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIg MyA0CiNwcmFnbWEgaWRlbnQgIkAoIylzZWxlY3QuaAkxLjE2CTk4LzA0LzI3IFNNSSIKCiMgMSAi L3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEgMyA0CiMgMTUgIi91c3IvaW5jbHVk ZS9zeXMvc2VsZWN0LmgiIDIgMyA0CgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMSAz IDQKIyAyMiAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMp dGltZS5oCTIuNjIJOTgvMDIvMDQgU01JIgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2ZlYXR1cmVf dGVzdHMuaCIgMSAzIDQKIyAyNSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDIgMyA0CgoKCgoK CgpleHRlcm4gIkMiIHsKIyA0OSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMgNApzdHJ1Y3Qg dGltZXZhbCB7CiAgICAgICAgdGltZV90IHR2X3NlYzsKICAgICAgICBzdXNlY29uZHNfdCB0dl91 c2VjOwp9OwojIDgyICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0CnN0cnVjdCB0aW1lem9u ZSB7CiAgICAgICAgaW50IHR6X21pbnV0ZXN3ZXN0OwogICAgICAgIGludCB0el9kc3R0aW1lOwp9 OwoKCgoKCn0KIyAxMDAgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQKIyAxICIvdXNyL2xv Y2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zeXMv dHlwZXMuaCIgMSAzIDQKIyAxMDEgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAyIDMgNAoKCgpl eHRlcm4gIkMiIHsKIyAxNTUgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQKc3RydWN0IGl0 aW1lcnZhbCB7CiAgICAgICAgc3RydWN0IHRpbWV2YWwgaXRfaW50ZXJ2YWw7CiAgICAgICAgc3Ry dWN0IHRpbWV2YWwgaXRfdmFsdWU7Cn07CiMgMjAzICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIg MyA0CnR5cGVkZWYgbG9uZ2xvbmdfdCBocnRpbWVfdDsKIyAzMTUgIi91c3IvaW5jbHVkZS9zeXMv dGltZS5oIiAzIDQKaW50IGFkanRpbWUoc3RydWN0IHRpbWV2YWwgKiwgc3RydWN0IHRpbWV2YWwg Kik7CiMgMzI2ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0CmludCBnZXRpdGltZXIoaW50 LCBzdHJ1Y3QgaXRpbWVydmFsICopOwppbnQgdXRpbWVzKGNvbnN0IGNoYXIgKiwgY29uc3Qgc3Ry dWN0IHRpbWV2YWwgKik7CgppbnQgc2V0aXRpbWVyKGludCwgY29uc3Qgc3RydWN0IGl0aW1lcnZh bCAqLCBzdHJ1Y3QgaXRpbWVydmFsICopOwojIDM2NCAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgi IDMgNAppbnQgc2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICosIHZvaWQgKik7CgpocnRpbWVf dCBnZXRocnRpbWUodm9pZCk7CmhydGltZV90IGdldGhydnRpbWUodm9pZCk7CiMgMzg0ICIvdXNy L2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0CmludCBnZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwg Kiwgdm9pZCAqKTsKIyA0MDUgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQKIyAxICIvdXNy L2luY2x1ZGUvdGltZS5oIiAxIDMgNAojIDE2ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKI3By YWdtYSBpZGVudCAiQCgjKXRpbWUuaAkxLjM2CTk4LzAzLzI3IFNNSSIKCiMgMSAiL3Vzci9pbmNs dWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEgMyA0CiMgMTkgIi91c3IvaW5jbHVkZS90aW1lLmgi IDIgMyA0CiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43 LzMuMC4zL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMyA0CiMgMjAgIi91c3IvaW5jbHVkZS90aW1l LmgiIDIgMyA0CgoKZXh0ZXJuICJDIiB7CiMgNjQgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNApz dHJ1Y3QgdG0gewogICAgICAgIGludCB0bV9zZWM7CiAgICAgICAgaW50IHRtX21pbjsKICAgICAg ICBpbnQgdG1faG91cjsKICAgICAgICBpbnQgdG1fbWRheTsKICAgICAgICBpbnQgdG1fbW9uOwog ICAgICAgIGludCB0bV95ZWFyOwogICAgICAgIGludCB0bV93ZGF5OwogICAgICAgIGludCB0bV95 ZGF5OwogICAgICAgIGludCB0bV9pc2RzdDsKfTsKCgoKZXh0ZXJuIGNsb2NrX3QgY2xvY2sodm9p ZCk7CmV4dGVybiBkb3VibGUgZGlmZnRpbWUodGltZV90LCB0aW1lX3QpOwpleHRlcm4gdGltZV90 IG1rdGltZShzdHJ1Y3QgdG0gKik7CmV4dGVybiB0aW1lX3QgdGltZSh0aW1lX3QgKik7CmV4dGVy biBjaGFyICphc2N0aW1lKGNvbnN0IHN0cnVjdCB0bSAqKTsKZXh0ZXJuIGNoYXIgKmN0aW1lKGNv bnN0IHRpbWVfdCAqKTsKZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lKGNvbnN0IHRpbWVfdCAqKTsK ZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lKGNvbnN0IHRpbWVfdCAqKTsKZXh0ZXJuIHNpemVf dCBzdHJmdGltZShjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3QgdG0g Kik7CgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGltZV9yKGNvbnN0IHRpbWVfdCAqLCBzdHJ1Y3Qg dG0gKik7CmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2FsdGltZV9yKGNvbnN0IHRpbWVfdCAqLCBzdHJ1 Y3QgdG0gKik7CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cnB0aW1lKGNvbnN0IGNoYXIgKiwgY29uc3Qg Y2hhciAqLCBzdHJ1Y3QgdG0gKik7CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3RpbWVfaW1w bC5oIiAxIDMgNAojIDE1ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWVfaW1wbC5oIiAzIDQKI3ByYWdt YSBpZGVudCAiQCgjKXRpbWVfaW1wbC5oCTEuMwk5OC8wMi8xMyBTTUkiCgojIDEgIi91c3IvaW5j bHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNAojIDE4ICIvdXNyL2luY2x1ZGUvc3lzL3Rp bWVfaW1wbC5oIiAyIDMgNAoKCmV4dGVybiAiQyIgewojIDM2ICIvdXNyL2luY2x1ZGUvc3lzL3Rp bWVfaW1wbC5oIiAzIDQKdHlwZWRlZiBzdHJ1Y3QgdGltZXNwZWMgewogICAgICAgIHRpbWVfdCB0 dl9zZWM7CiAgICAgICAgbG9uZyB0dl9uc2VjOwp9IHRpbWVzcGVjX3Q7CiMgNjAgIi91c3IvaW5j bHVkZS9zeXMvdGltZV9pbXBsLmgiIDMgNAp0eXBlZGVmIHN0cnVjdCB0aW1lc3BlYyB0aW1lc3Ry dWNfdDsKIyA3OSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lX2ltcGwuaCIgMyA0CnR5cGVkZWYgc3Ry dWN0IGl0aW1lcnNwZWMgewogICAgICAgIHN0cnVjdCB0aW1lc3BlYyBpdF9pbnRlcnZhbDsKICAg ICAgICBzdHJ1Y3QgdGltZXNwZWMgaXRfdmFsdWU7Cn0gaXRpbWVyc3BlY190OwojIDEzMCAiL3Vz ci9pbmNsdWRlL3N5cy90aW1lX2ltcGwuaCIgMyA0Cn0KIyAxMDQgIi91c3IvaW5jbHVkZS90aW1l LmgiIDIgMyA0CiMgMTE4ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKdW5pb24gc2lndmFsIHsK ICAgICAgICBpbnQgc2l2YWxfaW50OwogICAgICAgIHZvaWQgKnNpdmFsX3B0cjsKfTsKCgoKCnN0 cnVjdCBzaWdldmVudCB7CiAgICAgICAgaW50IHNpZ2V2X25vdGlmeTsKICAgICAgICBpbnQgc2ln ZXZfc2lnbm87CiAgICAgICAgdW5pb24gc2lndmFsIHNpZ2V2X3ZhbHVlOwogICAgICAgIHZvaWQg KCpzaWdldl9ub3RpZnlfZnVuY3Rpb24pKHVuaW9uIHNpZ3ZhbCk7CiAgICAgICAgcHRocmVhZF9h dHRyX3QgKnNpZ2V2X25vdGlmeV9hdHRyaWJ1dGVzOwogICAgICAgIGludCBfX3NpZ2V2X3BhZDI7 Cn07CgoKZXh0ZXJuIGludCBjbG9ja19nZXRyZXMoY2xvY2tpZF90LCBzdHJ1Y3QgdGltZXNwZWMg Kik7CmV4dGVybiBpbnQgY2xvY2tfZ2V0dGltZShjbG9ja2lkX3QsIHN0cnVjdCB0aW1lc3BlYyAq KTsKZXh0ZXJuIGludCBjbG9ja19zZXR0aW1lKGNsb2NraWRfdCwgY29uc3Qgc3RydWN0IHRpbWVz cGVjICopOwpleHRlcm4gaW50IHRpbWVyX2NyZWF0ZShjbG9ja2lkX3QsIHN0cnVjdCBzaWdldmVu dCAqLCB0aW1lcl90ICopOwpleHRlcm4gaW50IHRpbWVyX2RlbGV0ZSh0aW1lcl90KTsKZXh0ZXJu IGludCB0aW1lcl9nZXRvdmVycnVuKHRpbWVyX3QpOwpleHRlcm4gaW50IHRpbWVyX2dldHRpbWUo dGltZXJfdCwgc3RydWN0IGl0aW1lcnNwZWMgKik7CmV4dGVybiBpbnQgdGltZXJfc2V0dGltZSh0 aW1lcl90LCBpbnQsIGNvbnN0IHN0cnVjdCBpdGltZXJzcGVjICosCiAgICAgICAgICAgICAgICBz dHJ1Y3QgaXRpbWVyc3BlYyAqKTsKZXh0ZXJuIGludCBuYW5vc2xlZXAoY29uc3Qgc3RydWN0IHRp bWVzcGVjICosIHN0cnVjdCB0aW1lc3BlYyAqKTsKCgoKCmV4dGVybiB2b2lkIHR6c2V0KHZvaWQp OwoKZXh0ZXJuIGNoYXIgKnR6bmFtZVsyXTsKCgpleHRlcm4gbG9uZyBfc3lzY29uZihpbnQpOwoK CgoKCgpleHRlcm4gbG9uZyB0aW1lem9uZTsKZXh0ZXJuIGludCBkYXlsaWdodDsKIyAxNzYgIi91 c3IvaW5jbHVkZS90aW1lLmgiIDMgNApleHRlcm4gc3RydWN0IHRtICpnZXRkYXRlKGNvbnN0IGNo YXIgKik7CgoKCgoKCmV4dGVybiBpbnQgZ2V0ZGF0ZV9lcnI7CiMgMjcyICIvdXNyL2luY2x1ZGUv dGltZS5oIiAzIDQKc3RhdGljIGNoYXIgKgphc2N0aW1lX3IoY29uc3Qgc3RydWN0IHRtICpfX3Rt LCBjaGFyICpfX2J1ZikKewogICAgICAgIGV4dGVybiBjaGFyICpfX3Bvc2l4X2FzY3RpbWVfcihj b25zdCBzdHJ1Y3QgdG0gKiwgY2hhciAqKTsKICAgICAgICByZXR1cm4gKF9fcG9zaXhfYXNjdGlt ZV9yKF9fdG0sIF9fYnVmKSk7Cn0Kc3RhdGljIGNoYXIgKgpjdGltZV9yKGNvbnN0IHRpbWVfdCAq X190aW1lLCBjaGFyICpfX2J1ZikKewogICAgICAgIGV4dGVybiBjaGFyICpfX3Bvc2l4X2N0aW1l X3IoY29uc3QgdGltZV90ICosIGNoYXIgKik7CiAgICAgICAgcmV0dXJuIChfX3Bvc2l4X2N0aW1l X3IoX190aW1lLCBfX2J1ZikpOwp9CiMgMzM0ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKfQoj IDQwNiAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDIgMyA0CiMgNDE4ICIvdXNyL2luY2x1ZGUv c3lzL3RpbWUuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMSAzIDQKIyA0 MTkgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAyIDMgNAoKCgoKCn0KIyAxOCAiL3Vzci9pbmNs dWRlL3N5cy9zZWxlY3QuaCIgMiAzIDQKCgoKZXh0ZXJuICJDIiB7CiMgNDUgIi91c3IvaW5jbHVk ZS9zeXMvc2VsZWN0LmgiIDMgNAp0eXBlZGVmIGxvbmcgZmRfbWFzazsKCnR5cGVkZWYgbG9uZyBm ZHNfbWFzazsKIyA3MyAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMyA0CnR5cGVkZWYgc3Ry dWN0IGZkX3NldCB7CgoKCiAgICAgICAgbG9uZyBmZHNfYml0c1soKCg2NTUzNikrKCgoc2l6ZW9m IChmZHNfbWFzaykgKiA4KSktMSkpLygoc2l6ZW9mIChmZHNfbWFzaykgKiA4KSkpXTsKfSBmZF9z ZXQ7CiMgOTcgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMgNApleHRlcm4gaW50IHNlbGVj dChpbnQsIGZkX3NldCAqLCBmZF9zZXQgKiwgZmRfc2V0ICosIHN0cnVjdCB0aW1ldmFsICopOwoK CgoKCgp9CiMgNTY1ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMy LjcvMy4wLjMvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzIDQKIyA1ODEgIi91c3IvbG9jYWwvbGli L2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3N5cy90eXBlcy5o IiAzIDQKfQojIDIxICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMiAzIDQKCgoKIyAxICIvdXNy L2luY2x1ZGUvc3lzL3Jlc291cmNlLmgiIDEgMyA0CiMgMTYgIi91c3IvaW5jbHVkZS9zeXMvcmVz b3VyY2UuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIylyZXNvdXJjZS5oCTEuMjUJOTgvMDYvMzAg U01JIgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIgMSAzIDQKIyAxOSAi L3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIiAyIDMgNAoKIyAxICIvdXNyL2xvY2FsL2xpYi9n Y2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zeXMvdHlwZXMuaCIg MSAzIDQKIyAyMSAiL3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIiAyIDMgNAojIDEgIi91c3Iv aW5jbHVkZS9zeXMvdGltZS5oIiAxIDMgNAojIDIyICIvdXNyL2luY2x1ZGUvc3lzL3Jlc291cmNl LmgiIDIgMyA0CgoKZXh0ZXJuICJDIiB7CiMgNTMgIi91c3IvaW5jbHVkZS9zeXMvcmVzb3VyY2Uu aCIgMyA0CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBybGltX3Q7CiMgMTAyICIvdXNyL2luY2x1ZGUv c3lzL3Jlc291cmNlLmgiIDMgNApzdHJ1Y3QgcmxpbWl0IHsKICAgICAgICBybGltX3QgcmxpbV9j dXI7CiAgICAgICAgcmxpbV90IHJsaW1fbWF4Owp9OwoKCgoKdHlwZWRlZiB1X2xvbmdsb25nX3Qg cmxpbTY0X3Q7CgoKCgoKc3RydWN0IHJsaW1pdDY0IHsKICAgICAgICBybGltNjRfdCBybGltX2N1 cjsKICAgICAgICBybGltNjRfdCBybGltX21heDsKfTsKIyAxNDMgIi91c3IvaW5jbHVkZS9zeXMv cmVzb3VyY2UuaCIgMyA0CnN0cnVjdCBydXNhZ2UgewogICAgICAgIHN0cnVjdCB0aW1ldmFsIHJ1 X3V0aW1lOwogICAgICAgIHN0cnVjdCB0aW1ldmFsIHJ1X3N0aW1lOwogICAgICAgIGxvbmcgcnVf bWF4cnNzOwogICAgICAgIGxvbmcgcnVfaXhyc3M7CiAgICAgICAgbG9uZyBydV9pZHJzczsKICAg ICAgICBsb25nIHJ1X2lzcnNzOwogICAgICAgIGxvbmcgcnVfbWluZmx0OwogICAgICAgIGxvbmcg cnVfbWFqZmx0OwogICAgICAgIGxvbmcgcnVfbnN3YXA7CiAgICAgICAgbG9uZyBydV9pbmJsb2Nr OwogICAgICAgIGxvbmcgcnVfb3VibG9jazsKICAgICAgICBsb25nIHJ1X21zZ3NuZDsKICAgICAg ICBsb25nIHJ1X21zZ3JjdjsKICAgICAgICBsb25nIHJ1X25zaWduYWxzOwogICAgICAgIGxvbmcg cnVfbnZjc3c7CiAgICAgICAgbG9uZyBydV9uaXZjc3c7Cn07CiMgMTkzICIvdXNyL2luY2x1ZGUv c3lzL3Jlc291cmNlLmgiIDMgNApleHRlcm4gaW50IHNldHJsaW1pdChpbnQsIGNvbnN0IHN0cnVj dCBybGltaXQgKik7CmV4dGVybiBpbnQgZ2V0cmxpbWl0KGludCwgc3RydWN0IHJsaW1pdCAqKTsK IyAyMDMgIi91c3IvaW5jbHVkZS9zeXMvcmVzb3VyY2UuaCIgMyA0CmV4dGVybiBpbnQgZ2V0cHJp b3JpdHkoaW50LCBpZF90KTsKZXh0ZXJuIGludCBzZXRwcmlvcml0eShpbnQsIGlkX3QsIGludCk7 CmV4dGVybiBpbnQgZ2V0cnVzYWdlKGludCwgc3RydWN0IHJ1c2FnZSAqKTsKIyAyMjggIi91c3Iv aW5jbHVkZS9zeXMvcmVzb3VyY2UuaCIgMyA0Cn0KIyAyNSAiL3Vzci9pbmNsdWRlL3N5cy93YWl0 LmgiIDIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zaWdpbmZvLmgiIDEgMyA0CiMgMTYgIi91 c3IvaW5jbHVkZS9zeXMvc2lnaW5mby5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKXNpZ2luZm8u aAkxLjU0CTk4LzAzLzI3IFNNSSIKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3Rz LmgiIDEgMyA0CiMgMTkgIi91c3IvaW5jbHVkZS9zeXMvc2lnaW5mby5oIiAyIDMgNAojIDEgIi91 c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRl L3N5cy90eXBlcy5oIiAxIDMgNAojIDIwICIvdXNyL2luY2x1ZGUvc3lzL3NpZ2luZm8uaCIgMiAz IDQKCgpleHRlcm4gIkMiIHsKIyAxMjYgIi91c3IvaW5jbHVkZS9zeXMvc2lnaW5mby5oIiAzIDQK IyAxICIvdXNyL2luY2x1ZGUvc3lzL21hY2hzaWcuaCIgMSAzIDQKIyAxNiAiL3Vzci9pbmNsdWRl L3N5cy9tYWNoc2lnLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpbWFjaHNpZy5oCTEuMTQJOTgv MDIvMDUgU01JIgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEgMyA0 CiMgMjAgIi91c3IvaW5jbHVkZS9zeXMvbWFjaHNpZy5oIiAyIDMgNAoKCmV4dGVybiAiQyIgewoj IDExMCAiL3Vzci9pbmNsdWRlL3N5cy9tYWNoc2lnLmgiIDMgNAp9CiMgMTI3ICIvdXNyL2luY2x1 ZGUvc3lzL3NpZ2luZm8uaCIgMiAzIDQKIyAyMDYgIi91c3IvaW5jbHVkZS9zeXMvc2lnaW5mby5o IiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3RpbWVfaW1wbC5oIiAxIDMgNAojIDIwNyAiL3Vz ci9pbmNsdWRlL3N5cy9zaWdpbmZvLmgiIDIgMyA0CiMgMjE3ICIvdXNyL2luY2x1ZGUvc3lzL3Np Z2luZm8uaCIgMyA0CiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xh cmlzMi43LzMuMC4zL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMyA0CiMgMjE4ICIvdXNyL2luY2x1 ZGUvc3lzL3NpZ2luZm8uaCIgMiAzIDQKCgoKdHlwZWRlZiBzdHJ1Y3Qgc2lnaW5mbyB7CgoKCiAg ICAgICAgaW50IHNpX3NpZ25vOwogICAgICAgIGludCBzaV9jb2RlOwogICAgICAgIGludCBzaV9l cnJubzsKCiAgICAgICAgaW50IHNpX3BhZDsKCiAgICAgICAgdW5pb24gewoKICAgICAgICAgICAg ICAgIGludCBfX3BhZFsoKDI1NiAvIHNpemVvZiAoaW50KSkgLSA0KV07CgogICAgICAgICAgICAg ICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgcGlkX3QgX19waWQ7CiAgICAgICAg ICAgICAgICAgICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlkX3QgX191 aWQ7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIHNpZ3Zh bCBfX3ZhbHVlOwoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gX19raWxsOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjbG9ja190IF9fdXRpbWU7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19zdGF0dXM7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjbG9ja190IF9fc3RpbWU7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfSBfX2NsZDsKICAgICAgICAgICAgICAgICAgICAgICAgfSBfX3BkYXRhOwog ICAgICAgICAgICAgICAgfSBfX3Byb2M7CgogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAg ICAgICAgICAgICAgICAgICAgdm9pZCAqX19hZGRyOwogICAgICAgICAgICAgICAgICAgICAgICBp bnQgX190cmFwbm87CiAgICAgICAgICAgICAgICAgICAgICAgIGNhZGRyX3QgX19wYzsKICAgICAg ICAgICAgICAgIH0gX19mYXVsdDsKCiAgICAgICAgICAgICAgICBzdHJ1Y3QgewoKICAgICAgICAg ICAgICAgICAgICAgICAgaW50IF9fZmQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgX19i YW5kOwogICAgICAgICAgICAgICAgfSBfX2ZpbGU7CgogICAgICAgICAgICAgICAgc3RydWN0IHsK ICAgICAgICAgICAgICAgICAgICAgICAgY2FkZHJfdCBfX2ZhZGRyOwoKCiAgICAgICAgICAgICAg ICAgICAgICAgIHRpbWVzdHJ1Y190IF9fdHN0YW1wOwoKCgogICAgICAgICAgICAgICAgICAgICAg ICBzaG9ydCBfX3N5c2NhbGw7CiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19uc3lzYXJn OwogICAgICAgICAgICAgICAgICAgICAgICBjaGFyIF9fZmF1bHQ7CiAgICAgICAgICAgICAgICAg ICAgICAgIGxvbmcgX19zeXNhcmdbOF07CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX21z dGF0ZVsxMF07CiAgICAgICAgICAgICAgICB9IF9fcHJvZjsKCiAgICAgICAgfSBfX2RhdGE7Cgp9 IHNpZ2luZm9fdDsKIyAzNTQgIi91c3IvaW5jbHVkZS9zeXMvc2lnaW5mby5oIiAzIDQKdHlwZWRl ZiBzdHJ1Y3Qga19zaWdpbmZvIHsKICAgICAgICBpbnQgc2lfc2lnbm87CiAgICAgICAgaW50IHNp X2NvZGU7CiAgICAgICAgaW50IHNpX2Vycm5vOwoKICAgICAgICBpbnQgc2lfcGFkOwoKICAgICAg ICB1bmlvbiB7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAg ICBwaWRfdCBfX3BpZDsKICAgICAgICAgICAgICAgICAgICAgICAgdW5pb24gewogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1aWRfdCBfX3VpZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVuaW9uIHNpZ3ZhbCBfX3ZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIH0gX19raWxsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9ja190IF9fdXRpbWU7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19zdGF0dXM7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9ja190IF9fc3RpbWU7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBfX2NsZDsKICAgICAgICAgICAgICAgICAg ICAgICAgfSBfX3BkYXRhOwogICAgICAgICAgICAgICAgfSBfX3Byb2M7CgogICAgICAgICAgICAg ICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19hZGRyOwogICAgICAg ICAgICAgICAgICAgICAgICBpbnQgX190cmFwbm87CiAgICAgICAgICAgICAgICAgICAgICAgIGNh ZGRyX3QgX19wYzsKICAgICAgICAgICAgICAgIH0gX19mYXVsdDsKCiAgICAgICAgICAgICAgICBz dHJ1Y3QgewoKICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZmQ7CiAgICAgICAgICAgICAg ICAgICAgICAgIGxvbmcgX19iYW5kOwogICAgICAgICAgICAgICAgfSBfX2ZpbGU7CgogICAgICAg ICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgY2FkZHJfdCBfX2ZhZGRy OwoKCgogICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RydWNfdCBfX3RzdGFtcDsKCgoKICAg ICAgICAgICAgICAgICAgICAgICAgc2hvcnQgX19zeXNjYWxsOwogICAgICAgICAgICAgICAgICAg ICAgICBjaGFyIF9fbnN5c2FyZzsKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBfX2ZhdWx0 OwoKCgogICAgICAgICAgICAgICAgfSBfX3Byb2Y7CgogICAgICAgIH0gX19kYXRhOwoKfSBrX3Np Z2luZm9fdDsKCnR5cGVkZWYgc3RydWN0IHNpZ3F1ZXVlIHsKICAgICAgICBzdHJ1Y3Qgc2lncXVl dWUgKnNxX25leHQ7CiAgICAgICAga19zaWdpbmZvX3Qgc3FfaW5mbzsKICAgICAgICB2b2lkICgq c3FfZnVuYykoc3RydWN0IHNpZ3F1ZXVlICopOwogICAgICAgIHZvaWQgKnNxX2JhY2twdHI7Cgp9 IHNpZ3F1ZXVlX3Q7CiMgNDU0ICIvdXNyL2luY2x1ZGUvc3lzL3NpZ2luZm8uaCIgMyA0Cn0KIyAy NiAiL3Vzci9pbmNsdWRlL3N5cy93YWl0LmgiIDIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9w cm9jc2V0LmgiIDEgMyA0CiMgMTYgIi91c3IvaW5jbHVkZS9zeXMvcHJvY3NldC5oIiAzIDQKI3By YWdtYSBpZGVudCAiQCgjKXByb2NzZXQuaAkxLjE4CTk4LzA2LzMwIFNNSSIKCgpleHRlcm4gIkMi IHsKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNAojIDIzICIv dXNyL2luY2x1ZGUvc3lzL3Byb2NzZXQuaCIgMiAzIDQKIyA0MCAiL3Vzci9pbmNsdWRlL3N5cy9w cm9jc2V0LmgiIDMgNAp0eXBlZGVmIGVudW0KCiAgICAgICAgaWR0eXBlCgogICAgICAgICAgICAg ICAgewogICAgICAgIFBfUElELAogICAgICAgIFBfUFBJRCwKICAgICAgICBQX1BHSUQsCgogICAg ICAgIFBfU0lELAogICAgICAgIFBfQ0lELAogICAgICAgIFBfVUlELAogICAgICAgIFBfR0lELAog ICAgICAgIFBfQUxMLAogICAgICAgIFBfTFdQSUQKfSBpZHR5cGVfdDsKIyA2NCAiL3Vzci9pbmNs dWRlL3N5cy9wcm9jc2V0LmgiIDMgNAp0eXBlZGVmIGVudW0gaWRvcCB7CiAgICAgICAgUE9QX0RJ RkYsCgoKICAgICAgICBQT1BfQU5ELAoKCiAgICAgICAgUE9QX09SLAoKCiAgICAgICAgUE9QX1hP UgoKCn0gaWRvcF90OwoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgcHJvY3NldCB7CiAgICAgICAgaWRv cF90IHBfb3A7CgoKCgogICAgICAgIGlkdHlwZV90IHBfbGlkdHlwZTsKCgogICAgICAgIGlkX3Qg cF9saWQ7CgogICAgICAgIGlkdHlwZV90IHBfcmlkdHlwZTsKCgogICAgICAgIGlkX3QgcF9yaWQ7 Cn0gcHJvY3NldF90OwojIDEyOSAiL3Vzci9pbmNsdWRlL3N5cy9wcm9jc2V0LmgiIDMgNAp9CiMg MjcgIi91c3IvaW5jbHVkZS9zeXMvd2FpdC5oIiAyIDMgNAoKCgpleHRlcm4gIkMiIHsKIyA4NiAi L3Vzci9pbmNsdWRlL3N5cy93YWl0LmgiIDMgNApleHRlcm4gcGlkX3Qgd2FpdChpbnQgKik7CmV4 dGVybiBwaWRfdCB3YWl0cGlkKHBpZF90LCBpbnQgKiwgaW50KTsKCgpleHRlcm4gaW50IHdhaXRp ZChpZHR5cGVfdCwgaWRfdCwgc2lnaW5mb190ICosIGludCk7CmV4dGVybiBwaWRfdCB3YWl0Myhp bnQgKiwgaW50LCBzdHJ1Y3QgcnVzYWdlICopOwoKCgoKZXh0ZXJuIHBpZF90IHdhaXQ0KHBpZF90 LCBpbnQgKiwgaW50LCBzdHJ1Y3QgcnVzYWdlICopOwojIDExOCAiL3Vzci9pbmNsdWRlL3N5cy93 YWl0LmgiIDMgNAp9CiMgMzIgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29s YXJpczIuNy8zLjAuMy9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMgNAoKCgpleHRlcm4gIkMiIHsKCgp0 eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHF1b3Q7CiAgICAgICAgaW50IHJlbTsKfSBkaXZf dDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBsb25nIHF1b3Q7CiAgICAgICAgbG9uZyByZW07 Cn0gbGRpdl90OwoKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBsb25nIGxvbmcgcXVvdDsKICAg ICAgICBsb25nIGxvbmcgcmVtOwp9IGxsZGl2X3Q7CiMgMTQ4ICIvdXNyL2xvY2FsL2xpYi9nY2Mt bGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CmV4 dGVybiB1bnNpZ25lZCBjaGFyIF9fY3R5cGVbXTsKCgoKZXh0ZXJuIGRvdWJsZSBhdG9mKGNvbnN0 IGNoYXIgKik7CmV4dGVybiBpbnQgYXRvaShjb25zdCBjaGFyICopOwpleHRlcm4gbG9uZyBpbnQg YXRvbChjb25zdCBjaGFyICopOwpleHRlcm4gZG91YmxlIHN0cnRvZChjb25zdCBjaGFyICosIGNo YXIgKiopOwpleHRlcm4gbG9uZyBpbnQgc3RydG9sKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50 KTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwoY29uc3QgY2hhciAqLCBjaGFyICoq LCBpbnQpOwoKZXh0ZXJuIGludCByYW5kKHZvaWQpOwpleHRlcm4gdm9pZCBzcmFuZCh1bnNpZ25l ZCBpbnQpOwoKCmV4dGVybiBpbnQgcmFuZF9yKHVuc2lnbmVkIGludCAqKTsKCgpleHRlcm4gdm9p ZCAqY2FsbG9jKHNpemVfdCwgc2l6ZV90KTsKZXh0ZXJuIHZvaWQgZnJlZSh2b2lkICopOwpleHRl cm4gdm9pZCAqbWFsbG9jKHNpemVfdCk7CmV4dGVybiB2b2lkICpyZWFsbG9jKHZvaWQgKiwgc2l6 ZV90KTsKCmV4dGVybiB2b2lkIGFib3J0KHZvaWQpOwpleHRlcm4gaW50IGF0ZXhpdCh2b2lkICgq KSh2b2lkKSk7CmV4dGVybiB2b2lkIGV4aXQoaW50KTsKZXh0ZXJuIHZvaWQgX2V4aXRoYW5kbGUo dm9pZCk7CmV4dGVybiBjaGFyICpnZXRlbnYoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCBzeXN0 ZW0oY29uc3QgY2hhciAqKTsKCmV4dGVybiB2b2lkICpic2VhcmNoKGNvbnN0IHZvaWQgKiwgY29u c3Qgdm9pZCAqLCBzaXplX3QsIHNpemVfdCwKICAgICAgICBpbnQgKCopKGNvbnN0IHZvaWQgKiwg Y29uc3Qgdm9pZCAqKSk7CmV4dGVybiB2b2lkIHFzb3J0KHZvaWQgKiwgc2l6ZV90LCBzaXplX3Qs CiAgICAgICAgaW50ICgqKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpOwoKZXh0ZXJuIGlu dCBhYnMoaW50KTsKZXh0ZXJuIGRpdl90IGRpdihpbnQsIGludCk7CmV4dGVybiBsb25nIGludCBs YWJzKGxvbmcpOwpleHRlcm4gbGRpdl90IGxkaXYobG9uZywgbG9uZyk7CgpleHRlcm4gaW50IG1i dG93Yyh3Y2hhcl90ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJuIGludCBtYmxlbihj b25zdCBjaGFyICosIHNpemVfdCk7CmV4dGVybiBpbnQgd2N0b21iKGNoYXIgKiwgd2NoYXJfdCk7 CgpleHRlcm4gc2l6ZV90IG1ic3Rvd2NzKHdjaGFyX3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3Qp OwpleHRlcm4gc2l6ZV90IHdjc3RvbWJzKGNoYXIgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3Qp OwoKCgoKZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4KHZvaWQpOwpleHRlcm4gZG91YmxlIGVyYW5kNDgo dW5zaWduZWQgc2hvcnQgKik7CmV4dGVybiBsb25nIGpyYW5kNDgodW5zaWduZWQgc2hvcnQgKik7 CmV4dGVybiB2b2lkIGxjb25nNDgodW5zaWduZWQgc2hvcnQgKik7CmV4dGVybiBsb25nIGxyYW5k NDgodm9pZCk7CmV4dGVybiBsb25nIG1yYW5kNDgodm9pZCk7CmV4dGVybiBsb25nIG5yYW5kNDgo dW5zaWduZWQgc2hvcnQgKik7CmV4dGVybiB1bnNpZ25lZCBzaG9ydCAqc2VlZDQ4KHVuc2lnbmVk IHNob3J0ICopOwpleHRlcm4gdm9pZCBzcmFuZDQ4KGxvbmcpOwpleHRlcm4gaW50IHB1dGVudihj aGFyICopOwpleHRlcm4gdm9pZCBzZXRrZXkoY29uc3QgY2hhciAqKTsKIyAyMTkgIi91c3IvbG9j YWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3N0ZGxp Yi5oIiAzIDQKZXh0ZXJuIGludCBta3N0ZW1wKGNoYXIgKik7CiMgMjI5ICIvdXNyL2xvY2FsL2xp Yi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zdGRsaWIuaCIg MyA0CmV4dGVybiBsb25nIGE2NGwoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKmVjdnQoZG91 YmxlLCBpbnQsIGludCAqLCBpbnQgKik7CmV4dGVybiBjaGFyICpmY3Z0KGRvdWJsZSwgaW50LCBp bnQgKiwgaW50ICopOwpleHRlcm4gY2hhciAqZ2N2dChkb3VibGUsIGludCwgY2hhciAqKTsKZXh0 ZXJuIGludCBnZXRzdWJvcHQoY2hhciAqKiwgY2hhciAqY29uc3QgKiwgY2hhciAqKik7CmV4dGVy biBpbnQgZ3JhbnRwdChpbnQpOwpleHRlcm4gY2hhciAqaW5pdHN0YXRlKHVuc2lnbmVkLCBjaGFy ICosIHNpemVfdCk7CmV4dGVybiBjaGFyICpsNjRhKGxvbmcpOwpleHRlcm4gY2hhciAqbWt0ZW1w KGNoYXIgKik7CmV4dGVybiBjaGFyICpwdHNuYW1lKGludCk7CmV4dGVybiBsb25nIHJhbmRvbSh2 b2lkKTsKZXh0ZXJuIGNoYXIgKnJlYWxwYXRoKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKZXh0ZXJu IGNoYXIgKnNldHN0YXRlKGNvbnN0IGNoYXIgKik7CmV4dGVybiB2b2lkIHNyYW5kb20odW5zaWdu ZWQpOwpleHRlcm4gaW50IHR0eXNsb3Qodm9pZCk7CmV4dGVybiBpbnQgdW5sb2NrcHQoaW50KTsK ZXh0ZXJuIHZvaWQgKnZhbGxvYyhzaXplX3QpOwoKCgoKZXh0ZXJuIGludCBkdXAyKGludCwgaW50 KTsKZXh0ZXJuIGNoYXIgKnFlY3Z0KGxvbmcgZG91YmxlLCBpbnQsIGludCAqLCBpbnQgKik7CmV4 dGVybiBjaGFyICpxZmN2dChsb25nIGRvdWJsZSwgaW50LCBpbnQgKiwgaW50ICopOwpleHRlcm4g Y2hhciAqcWdjdnQobG9uZyBkb3VibGUsIGludCwgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKmdldGN3 ZChjaGFyICosIHNpemVfdCk7CmV4dGVybiBjb25zdCBjaGFyICpnZXRleGVjbmFtZSh2b2lkKTsK ZXh0ZXJuIGNoYXIgKmdldGxvZ2luKHZvaWQpOwpleHRlcm4gaW50IGdldG9wdChpbnQsIGNoYXIg KmNvbnN0ICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICpvcHRhcmc7CmV4dGVybiBpbnQg b3B0aW5kLCBvcHRlcnIsIG9wdG9wdDsKZXh0ZXJuIGNoYXIgKmdldHBhc3MoY29uc3QgY2hhciAq KTsKZXh0ZXJuIGNoYXIgKmdldHBhc3NwaHJhc2UoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCBn ZXRwdyh1aWRfdCwgY2hhciAqKTsKZXh0ZXJuIGludCBpc2F0dHkoaW50KTsKZXh0ZXJuIHZvaWQg Km1lbWFsaWduKHNpemVfdCwgc2l6ZV90KTsKZXh0ZXJuIGNoYXIgKnR0eW5hbWUoaW50KTsKCgpl eHRlcm4gbG9uZyBsb25nIGF0b2xsKGNvbnN0IGNoYXIgKik7CmV4dGVybiBsb25nIGxvbmcgbGxh YnMobG9uZyBsb25nKTsKZXh0ZXJuIGxsZGl2X3QgbGxkaXYobG9uZyBsb25nLCBsb25nIGxvbmcp OwpleHRlcm4gY2hhciAqbGx0b3N0cihsb25nIGxvbmcsIGNoYXIgKik7CmV4dGVybiBsb25nIGxv bmcgc3RydG9sbChjb25zdCBjaGFyICosIGNoYXIgKiosIGludCk7CmV4dGVybiB1bnNpZ25lZCBs b25nIGxvbmcgc3RydG91bGwoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOwpleHRlcm4gY2hh ciAqdWxsdG9zdHIodW5zaWduZWQgbG9uZyBsb25nLCBjaGFyICopOwojIDQxMiAiL3Vzci9sb2Nh bC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvc3RkbGli LmgiIDMgNAp9CiMgMTcwICIuLi8uLi8uLi9saWIvY2NscG9ydC5oIiAyCgoKCgoKCgojIDEgIi91 c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRl L3N5cy90eXBlcy5oIiAxIDMgNAojIDE3OCAiLi4vLi4vLi4vbGliL2NjbHBvcnQuaCIgMgoKCgoK IyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMv aW5jbHVkZS91bmlzdGQuaCIgMSAzIDQKIyAyNSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFy Y3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvdW5pc3RkLmgiIDMgNAojcHJhZ21hIGlk ZW50ICJAKCMpdW5pc3RkLmgJMS41NQk5OC8wNC8xNCBTTUkiCgojIDEgIi91c3IvaW5jbHVkZS9z eXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNAojIDI4ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3Nw YXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS91bmlzdGQuaCIgMiAzIDQKCiMgMSAi L3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1 ZGUvc3lzL3R5cGVzLmgiIDEgMyA0CiMgMzAgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2 OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMgNAojIDEgIi91c3Iv aW5jbHVkZS9zeXMvdW5pc3RkLmgiIDEgMyA0CiMgMjUgIi91c3IvaW5jbHVkZS9zeXMvdW5pc3Rk LmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpdW5pc3RkLmgJMS4zNgk5OC8wNy8xNiBTTUkiCgoj IDEgIi91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNAojIDI4ICIvdXNyL2lu Y2x1ZGUvc3lzL3VuaXN0ZC5oIiAyIDMgNAoKCmV4dGVybiAiQyIgewojIDI2NCAiL3Vzci9pbmNs dWRlL3N5cy91bmlzdGQuaCIgMyA0Cn0KIyAzMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFy Y3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvdW5pc3RkLmgiIDIgMyA0CgoKZXh0ZXJu ICJDIiB7CiMgMjA5ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMy LjcvMy4wLjMvaW5jbHVkZS91bmlzdGQuaCIgMyA0CmV4dGVybiBpbnQgYWNjZXNzKGNvbnN0IGNo YXIgKiwgaW50KTsKCgpleHRlcm4gaW50IGFjY3QoY29uc3QgY2hhciAqKTsKCmV4dGVybiB1bnNp Z25lZCBhbGFybSh1bnNpZ25lZCk7CgoKZXh0ZXJuIGludCBicmsodm9pZCAqKTsKCmV4dGVybiBp bnQgY2hkaXIoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCBjaG93bihjb25zdCBjaGFyICosIHVp ZF90LCBnaWRfdCk7CgoKZXh0ZXJuIGludCBjaHJvb3QoY29uc3QgY2hhciAqKTsKCmV4dGVybiBp bnQgY2xvc2UoaW50KTsKCgpleHRlcm4gc2l6ZV90IGNvbmZzdHIoaW50LCBjaGFyICosIHNpemVf dCk7CmV4dGVybiBjaGFyICpjcnlwdChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CgoKCmV4 dGVybiBjaGFyICpjdGVybWlkKGNoYXIgKik7CgoKCgpleHRlcm4gY2hhciAqY3VzZXJpZChjaGFy ICopOwpleHRlcm4gaW50IGR1cChpbnQpOwpleHRlcm4gaW50IGR1cDIoaW50LCBpbnQpOwoKCmV4 dGVybiB2b2lkIGVuY3J5cHQoY2hhciAqLCBpbnQpOwoKZXh0ZXJuIGludCBleGVjbChjb25zdCBj aGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKZXh0ZXJuIGludCBleGVjbGUoY29uc3QgY2hhciAq LCBjb25zdCBjaGFyICosIC4uLik7CmV4dGVybiBpbnQgZXhlY2xwKGNvbnN0IGNoYXIgKiwgY29u c3QgY2hhciAqLCAuLi4pOwpleHRlcm4gaW50IGV4ZWN2KGNvbnN0IGNoYXIgKiwgY2hhciAqY29u c3QgKik7CmV4dGVybiBpbnQgZXhlY3ZlKGNvbnN0IGNoYXIgKiwgY2hhciAqY29uc3QgKiwgY2hh ciAqY29uc3QgKik7CmV4dGVybiBpbnQgZXhlY3ZwKGNvbnN0IGNoYXIgKiwgY2hhciAqY29uc3Qg Kik7CmV4dGVybiB2b2lkIF9leGl0KGludCk7CgoKCgoKCgpleHRlcm4gaW50IGZhdHRhY2goaW50 LCBjb25zdCBjaGFyICopOwoKCgpleHRlcm4gaW50IGZjaGRpcihpbnQpOwpleHRlcm4gaW50IGZj aG93bihpbnQsIHVpZF90LCBnaWRfdCk7CgoKCmV4dGVybiBpbnQgZmNocm9vdChpbnQpOwoKCgpl eHRlcm4gaW50IGZkYXRhc3luYyhpbnQpOwojIDI4MSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9z cGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvdW5pc3RkLmgiIDMgNApleHRlcm4g aW50IGZkZXRhY2goY29uc3QgY2hhciAqKTsKCmV4dGVybiBwaWRfdCBmb3JrKHZvaWQpOwoKCmV4 dGVybiBwaWRfdCBmb3JrMSh2b2lkKTsKCmV4dGVybiBsb25nIGZwYXRoY29uZihpbnQsIGludCk7 CgoKZXh0ZXJuIGludCBmc3luYyhpbnQpOwoKCgpleHRlcm4gaW50IGZ0cnVuY2F0ZShpbnQsIG9m Zl90KTsKCmV4dGVybiBjaGFyICpnZXRjd2QoY2hhciAqLCBzaXplX3QpOwoKCmV4dGVybiBpbnQg Z2V0ZHRhYmxlc2l6ZSh2b2lkKTsKCmV4dGVybiBnaWRfdCBnZXRlZ2lkKHZvaWQpOwpleHRlcm4g dWlkX3QgZ2V0ZXVpZCh2b2lkKTsKZXh0ZXJuIGdpZF90IGdldGdpZCh2b2lkKTsKZXh0ZXJuIGlu dCBnZXRncm91cHMoaW50LCBnaWRfdCAqKTsKCgpleHRlcm4gbG9uZyBnZXRob3N0aWQodm9pZCk7 CgoKZXh0ZXJuIGludCBnZXRob3N0bmFtZShjaGFyICosIHNpemVfdCk7CgoKCgpleHRlcm4gY2hh ciAqZ2V0bG9naW4odm9pZCk7CgoKZXh0ZXJuIGludCBnZXRvcHQoaW50LCBjaGFyICpjb25zdCAq LCBjb25zdCBjaGFyICopOwpleHRlcm4gY2hhciAqb3B0YXJnOwpleHRlcm4gaW50IG9wdGVyciwg b3B0aW5kLCBvcHRvcHQ7CmV4dGVybiBjaGFyICpnZXRwYXNzKGNvbnN0IGNoYXIgKik7CgoKCmV4 dGVybiBpbnQgZ2V0cGFnZXNpemUodm9pZCk7CmV4dGVybiBwaWRfdCBnZXRwZ2lkKHBpZF90KTsK CmV4dGVybiBwaWRfdCBnZXRwaWQodm9pZCk7CmV4dGVybiBwaWRfdCBnZXRwcGlkKHZvaWQpOwpl eHRlcm4gcGlkX3QgZ2V0cGdycCh2b2lkKTsKCgpjaGFyICpnZXR0eHQoY29uc3QgY2hhciAqLCBj b25zdCBjaGFyICopOwoKCgpleHRlcm4gcGlkX3QgZ2V0c2lkKHBpZF90KTsKCmV4dGVybiB1aWRf dCBnZXR1aWQodm9pZCk7CgoKZXh0ZXJuIGNoYXIgKmdldHdkKGNoYXIgKik7CiMgMzUyICIvdXNy L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS91 bmlzdGQuaCIgMyA0CmV4dGVybiBpbnQgaW9jdGwoaW50LCBpbnQsIC4uLik7CgoKCmV4dGVybiBp bnQgaXNhZXhlYyhjb25zdCBjaGFyICosIGNoYXIgKmNvbnN0ICosIGNoYXIgKmNvbnN0ICopOwoK ZXh0ZXJuIGludCBpc2F0dHkoaW50KTsKZXh0ZXJuIGludCBsaW5rKGNvbnN0IGNoYXIgKiwgY29u c3QgY2hhciAqKTsKCgpleHRlcm4gaW50IGxjaG93bihjb25zdCBjaGFyICosIHVpZF90LCBnaWRf dCk7CmV4dGVybiBpbnQgbG9ja2YoaW50LCBpbnQsIG9mZl90KTsKZXh0ZXJuIGludCByZWFkbGlu ayhjb25zdCBjaGFyICosIGNoYXIgKiwgc2l6ZV90KTsKCmV4dGVybiBvZmZfdCBsc2VlayhpbnQs IG9mZl90LCBpbnQpOwoKCmV4dGVybiBpbnQgbmljZShpbnQpOwoKZXh0ZXJuIGxvbmcgcGF0aGNv bmYoY29uc3QgY2hhciAqLCBpbnQpOwpleHRlcm4gaW50IHBhdXNlKHZvaWQpOwpleHRlcm4gaW50 IHBpcGUoaW50ICopOwoKCmV4dGVybiBvZmZzZXRfdCBsbHNlZWsoaW50LCBvZmZzZXRfdCwgaW50 KTsKZXh0ZXJuIG9mZl90IHRlbGwoaW50KTsKZXh0ZXJuIGludCBtaW5jb3JlKGNhZGRyX3QsIHNp emVfdCwgY2hhciAqKTsKCgoKZXh0ZXJuIHNzaXplX3QgcHJlYWQoaW50LCB2b2lkICosIHNpemVf dCwgb2ZmX3QpOwoKCgpleHRlcm4gdm9pZCBwcm9maWwodW5zaWduZWQgc2hvcnQgKiwgc2l6ZV90 LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBpbnQpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXRm b3JrKHZvaWQgKCopICh2b2lkKSwgdm9pZCAoKikgKHZvaWQpLCB2b2lkICgqKSAodm9pZCkpOwoK CgpleHRlcm4gbG9uZyBwdHJhY2UoaW50LCBwaWRfdCwgbG9uZywgbG9uZyk7CgoKCmV4dGVybiBz c2l6ZV90IHB3cml0ZShpbnQsIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBvZmZfdCk7CgpleHRlcm4g c3NpemVfdCByZWFkKGludCwgdm9pZCAqLCBzaXplX3QpOwoKCmV4dGVybiBpbnQgcmVuYW1lKGNv bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKCgoKZXh0ZXJuIGludCByZXNvbHZlcGF0aChjb25z dCBjaGFyICosIGNoYXIgKiwgc2l6ZV90KTsKCmV4dGVybiBpbnQgcm1kaXIoY29uc3QgY2hhciAq KTsKCgpleHRlcm4gdm9pZCAqc2JyayhpbnRwdHJfdCk7CgpleHRlcm4gaW50IHNldGdpZChnaWRf dCk7CgoKZXh0ZXJuIGludCBzZXRlZ2lkKGdpZF90KTsKCgoKZXh0ZXJuIGludCBzZXRncm91cHMo aW50LCBjb25zdCBnaWRfdCAqKTsKCmV4dGVybiBpbnQgc2V0cGdpZChwaWRfdCwgcGlkX3QpOwoK CmV4dGVybiBwaWRfdCBzZXRwZ3JwKHZvaWQpOwpleHRlcm4gaW50IHNldHJlZ2lkKGdpZF90LCBn aWRfdCk7CmV4dGVybiBpbnQgc2V0cmV1aWQodWlkX3QsIHVpZF90KTsKCmV4dGVybiBwaWRfdCBz ZXRzaWQodm9pZCk7CmV4dGVybiBpbnQgc2V0dWlkKHVpZF90KTsKCgpleHRlcm4gaW50IHNldGV1 aWQodWlkX3QpOwoKZXh0ZXJuIHVuc2lnbmVkIHNsZWVwKHVuc2lnbmVkKTsKCgpleHRlcm4gaW50 IHN0aW1lKGNvbnN0IHRpbWVfdCAqKTsKCgoKZXh0ZXJuIHZvaWQgc3dhYihjb25zdCB2b2lkICos IHZvaWQgKiwgc3NpemVfdCk7CgoKCmV4dGVybiBpbnQgc3ltbGluayhjb25zdCBjaGFyICosIGNv bnN0IGNoYXIgKik7CmV4dGVybiB2b2lkIHN5bmModm9pZCk7CgpleHRlcm4gbG9uZyBzeXNjb25m KGludCk7CgoKCgpleHRlcm4gbG9uZyBfX3N5c2NvbmZfeHBnNShpbnQpOwoKCgpleHRlcm4gcGlk X3QgdGNnZXRwZ3JwKGludCk7CmV4dGVybiBpbnQgdGNzZXRwZ3JwKGludCwgcGlkX3QpOwoKCmV4 dGVybiBvZmZfdCB0ZWxsKGludCk7CgoKCmV4dGVybiBpbnQgdHJ1bmNhdGUoY29uc3QgY2hhciAq LCBvZmZfdCk7CgpleHRlcm4gY2hhciAqdHR5bmFtZShpbnQpOwoKCmV4dGVybiB1c2Vjb25kc190 IHVhbGFybSh1c2Vjb25kc190LCB1c2Vjb25kc190KTsKCmV4dGVybiBpbnQgdW5saW5rKGNvbnN0 IGNoYXIgKik7CgoKZXh0ZXJuIGludCB1c2xlZXAodXNlY29uZHNfdCk7CgoKCmV4dGVybiBwaWRf dCB2Zm9yayh2b2lkKTsKCgoKZXh0ZXJuIHZvaWQgdmhhbmd1cCh2b2lkKTsKCmV4dGVybiBzc2l6 ZV90IHdyaXRlKGludCwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwoKCmV4dGVybiB2b2lkIHlpZWxk KHZvaWQpOwojIDgwOCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlz Mi43LzMuMC4zL2luY2x1ZGUvdW5pc3RkLmgiIDMgNAojcHJhZ21hIHVua25vd25fY29udHJvbF9m bG93KHZmb3JrKQojIDg2MCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xh cmlzMi43LzMuMC4zL2luY2x1ZGUvdW5pc3RkLmgiIDMgNApzdGF0aWMgaW50CmdldGxvZ2luX3Io Y2hhciAqX19uYW1lLCBpbnQgX19sZW4pCnsKICAgICAgICBleHRlcm4gaW50IF9fcG9zaXhfZ2V0 bG9naW5fcihjaGFyICosIGludCk7CiAgICAgICAgcmV0dXJuIChfX3Bvc2l4X2dldGxvZ2luX3Io X19uYW1lLCBfX2xlbikpOwp9CnN0YXRpYyBpbnQKdHR5bmFtZV9yKGludCBfX2ZpbGRlcywgY2hh ciAqX19idWYsIHNpemVfdCBfX3NpemUpCnsKICAgICAgICBleHRlcm4gaW50IF9fcG9zaXhfdHR5 bmFtZV9yKGludCwgY2hhciAqLCBzaXplX3QpOwogICAgICAgIHJldHVybiAoX19wb3NpeF90dHlu YW1lX3IoX19maWxkZXMsIF9fYnVmLCBfX3NpemUpKTsKfQojIDkyMyAiL3Vzci9sb2NhbC9saWIv Z2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvdW5pc3RkLmgiIDMg NAp9CiMgMTgzICIuLi8uLi8uLi9saWIvY2NscG9ydC5oIiAyCiMgMTk4ICIuLi8uLi8uLi9saWIv Y2NscG9ydC5oIgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJp czIuNy8zLjAuMy9pbmNsdWRlL3NldGptcC5oIiAxIDMgNAojIDI2ICIvdXNyL2xvY2FsL2xpYi9n Y2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zZXRqbXAuaCIgMyA0 CiNwcmFnbWEgaWRlbnQgIkAoIylzZXRqbXAuaAkxLjMyCTk4LzAxLzMwIFNNSSIKCiMgMSAiL3Vz ci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEgMyA0CiMgMjkgIi91c3IvbG9jYWwvbGli L2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3NldGptcC5oIiAy IDMgNAoKCmV4dGVybiAiQyIgewojIDU2ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjkt c3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zZXRqbXAuaCIgMyA0CnR5cGVkZWYgbG9uZyBq bXBfYnVmWzEyXTsKIyA2NSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xh cmlzMi43LzMuMC4zL2luY2x1ZGUvc2V0am1wLmgiIDMgNApleHRlcm4gaW50IHNldGptcChqbXBf YnVmKTsKI3ByYWdtYSB1bmtub3duX2NvbnRyb2xfZmxvdyhzZXRqbXApCmV4dGVybiBpbnQgX3Nl dGptcChqbXBfYnVmKTsKI3ByYWdtYSB1bmtub3duX2NvbnRyb2xfZmxvdyhfc2V0am1wKQpleHRl cm4gdm9pZCBsb25nam1wKGptcF9idWYsIGludCk7CmV4dGVybiB2b2lkIF9sb25nam1wKGptcF9i dWYsIGludCk7CgoKCgoKCnR5cGVkZWYgbG9uZyBzaWdqbXBfYnVmWzE5XTsKCgoKCmV4dGVybiBp bnQgc2lnc2V0am1wKHNpZ2ptcF9idWYsIGludCk7CiNwcmFnbWEgdW5rbm93bl9jb250cm9sX2Zs b3coc2lnc2V0am1wKQpleHRlcm4gdm9pZCBzaWdsb25nam1wKHNpZ2ptcF9idWYsIGludCk7CiMg MTE0ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMv aW5jbHVkZS9zZXRqbXAuaCIgMyA0Cn0KIyAxOTkgIi4uLy4uLy4uL2xpYi9jY2xwb3J0LmgiIDIK IyAyNTEgIi4uLy4uLy4uL2xpYi9jY2xwb3J0LmgiCiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5o IiAxIDMgNAojIDE2ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMgNAojcHJhZ21hIGlkZW50ICJA KCMpc3RyaW5nLmgJMS4yMgk5Ny8xMi8yMiBTTUkiCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvZmVh dHVyZV90ZXN0cy5oIiAxIDMgNAojIDE5ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIgMyA0CgoK ZXh0ZXJuICJDIiB7CiMgNDMgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMyA0CmV4dGVybiB2b2lk ICptZW1jcHkodm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CmV4dGVybiB2b2lkICptZW1t b3ZlKHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwpleHRlcm4gY2hhciAqc3RyY3B5KGNo YXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKnN0cm5jcHkoY2hhciAqLCBjb25zdCBj aGFyICosIHNpemVfdCk7CgpleHRlcm4gY2hhciAqc3RyY2F0KGNoYXIgKiwgY29uc3QgY2hhciAq KTsKZXh0ZXJuIGNoYXIgKnN0cm5jYXQoY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7Cgpl eHRlcm4gaW50IG1lbWNtcChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKZXh0 ZXJuIGludCBzdHJjbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50IHN0 cmNvbGwoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50IHN0cm5jbXAoY29u c3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CmV4dGVybiBzaXplX3Qgc3RyeGZybShj aGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKCmV4dGVybiB2b2lkICptZW1jaHIoY29uc3Qg dm9pZCAqLCBpbnQsIHNpemVfdCk7CmV4dGVybiBjaGFyICpzdHJjaHIoY29uc3QgY2hhciAqLCBp bnQpOwpleHRlcm4gc2l6ZV90IHN0cmNzcG4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpl eHRlcm4gY2hhciAqc3RycGJyayhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBj aGFyICpzdHJyY2hyKGNvbnN0IGNoYXIgKiwgaW50KTsKZXh0ZXJuIHNpemVfdCBzdHJzcG4oY29u c3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gY2hhciAqc3Ryc3RyKGNvbnN0IGNoYXIg KiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKnN0cnRvayhjaGFyICosIGNvbnN0IGNoYXIg Kik7CgoKZXh0ZXJuIGNoYXIgKnN0cnRva19yKGNoYXIgKiwgY29uc3QgY2hhciAqLCBjaGFyICoq KTsKCmV4dGVybiB2b2lkICptZW1zZXQodm9pZCAqLCBpbnQsIHNpemVfdCk7CmV4dGVybiBjaGFy ICpzdHJlcnJvcihpbnQpOwpleHRlcm4gc2l6ZV90IHN0cmxlbihjb25zdCBjaGFyICopOwoKCgpl eHRlcm4gdm9pZCAqbWVtY2NweSh2b2lkICosIGNvbnN0IHZvaWQgKiwgaW50LCBzaXplX3QpOwoK CgoKZXh0ZXJuIGNoYXIgKnN0cnNpZ25hbChpbnQpOwpleHRlcm4gaW50IGZmcyhpbnQpOwpleHRl cm4gaW50IHN0cmNhc2VjbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50 IHN0cm5jYXNlY21wKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwoKCgoKCmV4 dGVybiBjaGFyICpzdHJkdXAoY29uc3QgY2hhciAqKTsKIyAxNDYgIi91c3IvaW5jbHVkZS9zdHJp bmcuaCIgMyA0Cn0KIyAyNTIgIi4uLy4uLy4uL2xpYi9jY2xwb3J0LmgiIDIKIyAzMzUgIi4uLy4u Ly4uL2xpYi9jY2xwb3J0LmgiCiAgdHlwZWRlZiBjaGFyIEZTdHJpbmc7CiMgMzQ1ICIuLi8uLi8u Li9saWIvY2NscG9ydC5oIgpjaGFyICogR2V0Rk9SVFJBTlN0cmluZyggRlN0cmluZyAqLCBpbnQs IGNvbnN0IGNoYXIgKiApOwpjaGFyICogR2V0Rk9SVFJBTlN0cmluZ0V4KCBGU3RyaW5nICosIGlu dCwgY29uc3QgY2hhciAqLCBpbnQgKTsKY2hhciAqIEdldEZPUlRSQU5QYXRoU3RyaW5nKCBGU3Ry aW5nICosIGludCwgY29uc3QgY2hhciAqICk7CiMgMzk1ICIuLi8uLi8uLi9saWIvY2NscG9ydC5o IgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAu My9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMgNAojIDkwICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3Nw YXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zdGRhcmcuaCIgMyA0CnR5cGVkZWYg X19nbnVjX3ZhX2xpc3QgdmFfbGlzdDsKIyAzOTYgIi4uLy4uLy4uL2xpYi9jY2xwb3J0LmgiIDIK IyA0MzkgIi4uLy4uLy4uL2xpYi9jY2xwb3J0LmgiCmludCBQQ0lHZXRPU1ZlcnNpb24oY2hhciAq KiBwcHN6T1NOYW1lLGNoYXIgKiogcHBzek9TVmVyc2lvbik7CnZvaWQgUENJX3Fzb3J0KHZvaWQg KmJhc2UsIHNpemVfdCBuLCBzaXplX3Qgc2l6ZSwKICAgICAgICAgICBpbnQgKCpjb21wYXIpKGNv bnN0IHZvaWQqLGNvbnN0IHZvaWQqKSk7Cgpkb3VibGUgUENJX21vZGYoZG91YmxlIHZhbHVlLCBk b3VibGUgKiBpcHRyKTsKIyA0NzQgIi4uLy4uLy4uL2xpYi9jY2xwb3J0LmgiCiAgICAgIHR5cGVk ZWYgaW50ICgqUVNDTVApKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsKIyA0NCAiLi4vLi4v Li4vbGliL2NjbGJhc2UuaCIgMgojIDEgIi4uLy4uLy4uL2xpYi9jY2x0eXBlcy5oIiAxCiMgNDMg Ii4uLy4uLy4uL2xpYi9jY2x0eXBlcy5oIgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgVEJ5dGU7CnR5 cGVkZWYgaW50IFRCb29sOwojIDEwOSAiLi4vLi4vLi4vbGliL2NjbHR5cGVzLmgiCnR5cGVkZWYg bG9uZyBsb25nIGludDY0Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1aW50NjQ7CgoKdHlw ZWRlZiBpbnQgaW50MzI7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQzMjsKCgp0eXBlZGVmIHNo b3J0IGludDE2Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVpbnQxNjsKCgoKCgoKdHlwZWRlZiB2 b2lkICgqUENJQ291bnRlcikoZG91YmxlKTsKCnR5cGVkZWYgc3RydWN0IHsKICBkb3VibGUgeDsK ICBkb3VibGUgeTsKfSBWZWN0b3JfdDsKIyAyMTkgIi4uLy4uLy4uL2xpYi9jY2x0eXBlcy5oIgp0 eXBlZGVmIHZvaWQgKCpUcmFuc2Zvcm1GdW5jKSh2b2lkICosIGRvdWJsZSwgZG91YmxlLCBkb3Vi bGUgKiwgZG91YmxlICopOwoKdHlwZWRlZiBzdHJ1Y3QKewogICAgZG91YmxlIHg7CiAgICBkb3Vi bGUgeTsKICAgIGRvdWJsZSB6Owp9IEdEQlZlcnRleDsKIyA0NSAiLi4vLi4vLi4vbGliL2NjbGJh c2UuaCIgMgojIDEgIi4uLy4uLy4uL2xpYi9jY2x0YXNrLmgiIDEKIyAyMTIgIi4uLy4uLy4uL2xp Yi9jY2x0YXNrLmgiCnR5cGVkZWYgdm9pZCAoKklNUEV4aXRQcm9jKSh2b2lkKTsKCnR5cGVkZWYg c3RydWN0IHsKICBjaGFyIHByb2dyYW1fbmFtZVsxNl07CiAgY2hhciBUYXNrRGVzY1s0OF07CiAg aW50IE1vbml0b3I7CiAgaW50IHR0eXR5cGU7CiAgY2hhciBTeXNMYWJlbFsxOV07CiAgY2hhciBN aXNzaW5nWzQ1XTsKICBpbnQgZmF0YWxfZXJyb3I7CiAgaW50IHBybV9yZXF1aXJlZDsKICBpbnQg cHJtX3ByZXNlbnQ7CgoKICBsb25nIEpCbERpcjsKICBsb25nIEpCbERhdDsKICBsb25nIFBybU9w bjsKICBGSUxFICpQcm1GUDsKICB1aW50MzIgKkpEYXQ7CiAgdW5zaWduZWQgY2hhciBDRGF0WzE1 MzZdOwoKICBjaGFyIFBDSUhvbWVbNjRdOwogIGludCBpbXBfZmxhZ3M7CgogIGludCBtYWluX2Fy Z2M7CiAgY2hhciAqKm1haW5fYXJndjsKCiAgaW50IG5FeGl0UHJvYzsKICBJTVBFeGl0UHJvYyAq cGFwZm5FeGl0UHJvYzsKfSBJTVBJbmZvX3Q7CgoKZXh0ZXJuIElNUEluZm9fdCBJTVBJbmZvOwpl eHRlcm4gaW50IElNUEluaXRpYWxpemVkOwoKCgoKCgpleHRlcm4gaW50IGltcF9lcnJubzsKZXh0 ZXJuIGludCBpbXBfZXJydHlwZTsKZXh0ZXJuIGludCBpbXBfc3lzX2Vycm5vOwpleHRlcm4gY2hh ciAqaW1wX2VycnN0cmluZzsKIyAyNjkgIi4uLy4uLy4uL2xpYi9jY2x0YXNrLmgiCmV4dGVybiBG SUxFICpSZXBvcnQ7CmV4dGVybiBpbnQgRGVidWdNb2RlOwoKCgoKCnZvaWQgRGVidWcoY29uc3Qg Y2hhciAqLCAuLi4gKTsKdm9pZCBEZWJ1Z092ZXIoaW50LCBjb25zdCBjaGFyICosIC4uLiApOwoK dm9pZCBEZWJ1Z09OKCB2b2lkICk7CnZvaWQgRGVidWdPRkYoIHZvaWQgKTsKdm9pZCBEZWJ1Z1JF U1RPUkUoIHZvaWQgKTsKdm9pZCBJbnN0YWxsRGVidWdIYW5kbGVyKCB2b2lkICgqKShjb25zdCBj aGFyICopICk7CmludCBHZXREZWJ1Z01vZGUoIHZvaWQgKTsKCgoKCgp2b2lkIElNUFN0YXR1cygg Y2hhciAqLCBjaGFyICosIGNoYXIgKiwgY2hhciAqLCBjaGFyICosCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKiwgaW50ICosIHZvaWQgKiosIGludCwgY2hhciAqKiApOwp2b2lkIElN UEluaXQoIGNoYXIgKiwgaW50LCBpbnQsIGNoYXIgKiogKTsKCgoKCmludCBJTVBTZWVQYXJtKCBj aGFyICosIGludCwgaW50LCBpbnQgKTsKdm9pZCBJTVBSZWFsRW5jb2RlKCBkb3VibGUsIGludCwg Y2hhciAqICk7CmNoYXIgKiBJTVBUaW1lKCBjaGFyICosIGludCApOwppbnQgSU1QVGVybWluYWwo IGNoYXIgKiApOwppbnQgSU1QQXV0b21hdGljVGVybSggdm9pZCApOwp2b2lkIElNUEF0RXhpdCgg SU1QRXhpdFByb2MgKTsKVEJvb2wgSU1QUmVnaXN0ZXJlZEZvckV4aXQoSU1QRXhpdFByb2MpOwp2 b2lkIElNUEluc3RhbGxFeGl0RnVuYyggdm9pZCAoKikoaW50KSApOwppbnQgSU1QRmF0YWwoIGlu dCApOwppbnQgSU1QUnVuVGFzayggY2hhciAqLCBjaGFyICosIGludCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHZvaWQgKCopKCBpbnQsIGludCApLCBpbnQgKiApOwppbnQgSU1QS2lsbFRh c2soIGludCApOwppbnQgSU1QS2lsbFRhc2tCeU5hbWUoIGNvbnN0IGNoYXIgKiApOwppbnQgSU1Q R2V0UElEKCB2b2lkICk7ClRCb29sIElNUEdldFBJREJ5TmFtZSggY29uc3QgY2hhciAqLCBpbnQg KiApOwoKVEJvb2wgSU1QU2V0Q1dEKCBjb25zdCBjaGFyICogKTsKVEJvb2wgSU1QU2V0Q1dERnJv bUZpbGUoIGNvbnN0IGNoYXIqIHBzekZpbGUgKTsKCmNvbnN0IGNoYXIgKklNUEdldENXRCggdm9p ZCApOwpjb25zdCBjaGFyICpJTVBHZXRVc2VySG9tZSggdm9pZCApOwppbnQgSU1QTWtEaXJlY3Rv cnkoIGNvbnN0IGNoYXIgKiApOwoKVEJvb2wgSU1QSW52b2tlRnVuY3Rpb24oIHZvaWQgKiwgY29u c3QgY2hhciAqLCB2b2lkICoqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50LCB2b2lkICogKTsKdm9pZCAqSU1QR2V0U3ltYm9sKCBjb25zdCBjaGFyICosIGNv bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqICk7CgpjaGFyICoqIElNUEdldEFyZ3MoIGludCAqICk7 CklNUEluZm9fdCAqIElNUEdldEluZm8oIHZvaWQgKTsKaW50IElNUFNjclBhZ2UoIEZJTEUgKiwg aW50ICk7CgppbnQgSU1QSGxwU2VhcmNoKCBjaGFyICosIGNoYXIgKiApOwppbnQgSU1QRXhlU2Vh cmNoKCBjaGFyICosIGNoYXIgKiApOwppbnQgSU1QRWFzU2VhcmNoKCBjaGFyICosIGNoYXIgKiAp Owp2b2lkIElNUEdldFN5c05hbWUoIGNoYXIgKiosIGNoYXIgKiogKTsKY2hhciAqIElNUEdldE15 RXhlUGF0aCggdm9pZCApOwppbnQgSU1QR2V0TWVtb3J5KCBUQm9vbCAqICk7CmNoYXIgKiBJTVBG aW5kRmlsZSggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogKTsKdm9pZCBJTVBPdmVycmlkZUZp bmRGaWxlRnVuYyhjaGFyICooKikoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKSk7CmNoYXIgKiBJ TVBGaW5kQ29uZmlnKCBjb25zdCBjaGFyICpwc3pGaWxlbmFtZSwgVEJvb2wgYlJlYWRNb2RlICk7 Cgp2b2lkIEluc3RhbGxVU2xlZXBIb29rKCB2b2lkICgqKShpbnQpICk7CnZvaWQgVVNsZWVwKCBp bnQgKTsKZG91YmxlIEdldE1pY3JvU2Vjb25kcygpOwpzaG9ydCBBUGFyc2UoY2hhciAqKTsKCnZv aWQgSU1QQ291bnRlciggZG91YmxlICk7CnZvaWQgSU1QU2V0Q3VtdWxhdGl2ZVBhcm1zKCBkb3Vi bGUsIGRvdWJsZSwgdm9pZCAoKikoIGRvdWJsZSApICk7CnZvaWQgSU1QQ3VtdWxhdGl2ZUNvdW50 ZXIoIGRvdWJsZSApOwoKdHlwZWRlZiBUQm9vbCAoKklNUFByb2dyZXNzRnVuYykoIGRvdWJsZSwg Y29uc3QgY2hhciAqLCB2b2lkICogKTsKClRCb29sIElNUFRlcm1Qcm9ncmVzc0NvdW50ZXIoIGRv dWJsZSwgY29uc3QgY2hhciAqLCB2b2lkICopOwpUQm9vbCBJTVBEdW1teVByb2dyZXNzKCBkb3Vi bGUsIGNvbnN0IGNoYXIgKiwgdm9pZCAqICk7ClBDSUNvdW50ZXIgSU1QUHJvZ3Jlc3NDb3VudGVy R2F0ZSggSU1QUHJvZ3Jlc3NGdW5jLCBjb25zdCBjaGFyICosdm9pZCAqICk7Cgp2b2lkICpJTVBD cmVhdGVDdW11bGF0aXZlUHJvZ3Jlc3MoIGRvdWJsZSwgZG91YmxlLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1QUHJvZ3Jlc3NGdW5jLCB2b2lkICogKTsK VEJvb2wgSU1QQ3VtdWxhdGl2ZVByb2dyZXNzKCBkb3VibGUsIGNvbnN0IGNoYXIgKiwgdm9pZCAq ICk7CgoKVEJvb2wgTkNDRXN0YWJsaXNoTGlua1BSTSggdm9pZCApOwp2b2lkIE5DQ0VzdGFibGlz aExpbmsoIEZJTEUgKiApOwpUQm9vbCBOQ0NQcm9ncmVzcyggZG91YmxlLCBjb25zdCBjaGFyICos IHZvaWQgKiApOwoKdm9pZCBOQ1NTZXR1cE1vbml0b3IoIHZvaWQgKTsKVEJvb2wgTkNTUG9sbCgg ZG91YmxlICosIGNoYXIgKiogKTsKdm9pZCBOQ1NJbnN0YWxsUG9sbGVyKCBJTVBQcm9ncmVzc0Z1 bmMsIHZvaWQgKiApOwpUQm9vbCBOQ1NHZXRUYXNrSW5mbyggaW50ICosIGNoYXIgKiApOwoKVEJv b2wgSXNXaW4zMnMoIHZvaWQgKTsKCmludCBEZXN0cm95Q29uc29sZSggdm9pZCApOwp2b2lkIFNo b3dDb25zb2xlKCBUQm9vbCApOwppbnQgQ3JlYXRlQ29uc29sZSggdm9pZCApOwojIDM4MSAiLi4v Li4vLi4vbGliL2NjbHRhc2suaCIKdm9pZCBJTVBSZXR1cm4odm9pZCk7CnZvaWQgSU1QRXhpdCgg aW50ICk7CgoKCgoKaW50IEROUENoZWNrKGNvbnN0IGNoYXIqKTsKaW50IEROUFBlZWsoY29uc3Qg Y2hhciopOwpjaGFyICpETlBFcnJvck1zZyh2b2lkKTsKIyA0NTYgIi4uLy4uLy4uL2xpYi9jY2x0 YXNrLmgiCmludCBJTVBfUHJvdGVjdCggdm9pZCApOwp2b2lkICogSU1QUHJvdGVjdEJ1ZmZlcigg dm9pZCApOwp2b2lkIElNUFVucHJvdGVjdCggdm9pZCApOwp2b2lkIElNUFZpb2xhdGlvbiggaW50 LCBpbnQsIGNvbnN0IGNoYXIgKiApOwppbnQgSU1QR2V0UHJvdGVjdFJpbmdDb3VudCggdm9pZCAp OwoKCgoKCmludCBfSU1QQXNzZXJ0KCBjaGFyICosIGNoYXIgKiwgaW50ICk7CnZvaWQgSU1QQ2hl Y2tFeHByKGNoYXIgKiwgY2hhciAqLCBpbnQpOwojIDQ3NiAiLi4vLi4vLi4vbGliL2NjbHRhc2su aCIKdm9pZCBJTVBFcnJDaGFyKCBpbnQsIGludCwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICog KTsKdm9pZCBJTVBFcnJSZWFsKCBpbnQsIGludCwgY29uc3QgY2hhciAqLCBkb3VibGUsIGludCAp Owp2b2lkIElNUEVyckludCggaW50LCBpbnQsIGNvbnN0IGNoYXIgKiwgaW50LCBpbnQgKTsKdm9p ZCBJTVBFcnJMb25nKCBpbnQsIGludCwgY29uc3QgY2hhciAqLCBsb25nLCBpbnQgKTsKdm9pZCBJ TVBFcnJNc2coIGludCwgaW50ICk7CnZvaWQgSU1QUmVwb3J0RXJyb3IoIGludCwgaW50LCBjb25z dCBjaGFyICosIFRCb29sICk7CmludCBJTVBFcnJubyggdm9pZCApOwp2b2lkIElNUFNldEVycm5v KCBpbnQgKTsKY29uc3QgY2hhciAqIElNUEVyclN0cmluZyggdm9pZCApOwp2b2lkIEluc3RhbGxJ TVBXYXJuaW5nSGFuZGxlciggdm9pZCAoKikoY29uc3QgY2hhciAqKSApOwp2b2lkIFBvcElNUFdh cm5pbmdIYW5kbGVyKHZvaWQpOwoKdm9pZCBJTVBFcnJvciggaW50LCBpbnQsIGNvbnN0IGNoYXIg KiwgLi4uICk7Cgp2b2lkIElNUFB1dENoYXIoIGNoYXIgKiwgY2hhciAqICk7CnZvaWQgSU1QUHV0 UmVhbCggY2hhciAqLCBmbG9hdCAqLCBpbnQgKTsKaW50IElNUEdldERlZmF1bHQoIGNoYXIgKiwg Y2hhciAqLCBjaGFyICosZmxvYXQgKiwgZmxvYXQgKiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZmxvYXQgKiApOwppbnQgSU1QT3BlbiggaW50ICk7CmNvbnN0IGNoYXIgKklNUEdldFBS TUZpbGVuYW1lKCB2b2lkICk7ClRCb29sIElNUEFjcXVpcmVQUk1GaWxlKGNvbnN0IGNoYXIqIFBS TUZpbGVuYW1lLCBUQm9vbCBiT3ZlcndyaXRlKTsKaW50IElNUENyZWF0ZSggdm9pZCApOwppbnQg SU1QR2V0TnVtZXJpYyggY2hhciAqLCBjaGFyICosIHZvaWQgKiwgaW50ICk7CmludCBJTVBHZXRD aGFyKCBjaGFyICosIGNoYXIgKiwgaW50ICk7CmludCBJTVBEZWZQYXJtKCBjaGFyICosIGNoYXIg KiwgaW50LCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLAogICAgICAgICAgICAgICAgICAgICAgICAg ICBjaGFyICogKTsKVEJvb2wgSU1QVW5kZWZpbmVQYXJtKCBjb25zdCBjaGFyICogKTsKCmNvbnN0 IGNoYXIgKklNUEdldE1ham9yUmV2KCB2b2lkICk7CnZvaWQgSU1QUGF0aEV4cGFuZCggY2hhciAq ICk7CnZvaWQgSU1QU2V0UENJSG9tZSggY29uc3QgY2hhciAqICk7CmNvbnN0IGNoYXIgKiBJTVBN dW5nZSggY29uc3QgY2hhciAqLCAuLi4gKTsKaW50IENEUGF0aEV4cGFuZCggY2hhciAqLCBpbnQg KTsKVEJvb2wgSW5pdENEUGF0aEV4cGFuZChjb25zdCBjaGFyICopOwp2b2lkIGltcG1zZ2MoIGlu dCwgY2hhciAqLCBjaGFyICogKTsKaW50IGltcGtleWMoIGNoYXIgKiwgY2hhciAqICk7CnZvaWQg aW1wZXhyYyggaW50LCBpbnQsIGludCApOwppbnQgaW1wc3JoYyggY2hhciAqLCBsb25nICosIGxv bmcgKiApOwoKCnZvaWQgSU1QUGFnZVRpdGxlKCBGSUxFICosIGNoYXIgKiwgY2hhciAqICk7CnZv aWQgSU1QUGFnZSggRklMRSAqLCBpbnQgKTsKCnZvaWQgSU1QQXN5bmNEaXNhYmxlKCB2b2lkICk7 CmludCBJTVBBc3luY0dldENoYXIoIGludCApOwppbnQ2NCBJTVBHZXRGcmVlU3BhY2UoIGNvbnN0 IGNoYXIgKiApOwoKVEJvb2wgSU1QTG9ja0ZpbGUoIEZJTEUgKiwgVEJvb2wgKTsKVEJvb2wgSU1Q VW5sb2NrRmlsZSggRklMRSAqICk7CmNvbnN0IGNoYXIgKiBJTVBHZXRFbnYoIGNvbnN0IGNoYXIg KiApOwp2b2lkIElNUFNldEVudiggY29uc3QgY2hhciAqcHN6TmFtZSwgY29uc3QgY2hhciAqcHN6 VmFsdWUgKTsKVEJvb2wgSU1QUmVhZEVudkZpbGUoY29uc3QgY2hhciAqcHN6RmlsZSk7CmNvbnN0 IGNoYXIgKiBJTVBHZXRQQ0lIb21lRGlyKGNvbnN0IGNoYXIqIHBzelZhcmlhYmxlKTsKCmNoYXIg KklNUFJlZGlyZWN0U3Rkb3V0KCB2b2lkICk7CnZvaWQgSU1QUmVzdG9yZVN0ZG91dCggdm9pZCAp OwpjaGFyICpJTVBSZWRpcmVjdFN0ZG91dE9ubHkoIHZvaWQgKTsKdm9pZCBJTVBSZXN0b3JlU3Rk b3V0T25seSggdm9pZCApOwpjaGFyICpJTVBSZWRpcmVjdFN0ZGVyciggdm9pZCApOwp2b2lkIElN UFJlc3RvcmVTdGRlcnIoIHZvaWQgKTsKClRCb29sIElNUEFkZEdyb3VwSWNvbihjb25zdCBjaGFy ICosIGNvbnN0IGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKVEJvb2wgSU1QQ3JlYXRlR3JvdXAgKGNvbnN0IGNoYXIg Kik7ClRCb29sIElNUFNldFJlZ2lzdHJ5UENJKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsK VEJvb2wgSU1QU2V0UmVnaXN0cnkoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpjb25zdCBj aGFyICogSU1QR2V0UmVnaXN0cnlQQ0koY29uc3QgY2hhciAqKTsKY29uc3QgY2hhciAqIElNUEdl dFJlZ2lzdHJ5UENJVmVyKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKY29uc3QgY2hhciAq IElNUEdldFJlZ2lzdHJ5KGNvbnN0IGNoYXIgKik7CmNoYXIgKipJTVBHZXRSZWdpc3RyeUNoaWxk cmVuKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiApOwp2b2lkIElNUFNldFJlZ2lzdHJ5UENJ SGFuZGxlcnMoY29uc3QgY2hhciAqKCpwZm5HZXRSZWcpKGNvbnN0IGNoYXIgKiksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEJvb2wgKCpwZm5TZXRSZWdpc3RyeSko Y29uc3QgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKikpOwpUQm9vbCBJTVBHZXREYXRhYmFz ZVBhcm1zKGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy ICoqLCBjaGFyICoqLCBjaGFyKiosIGNoYXIgKiosIGNoYXIgKiosIGNoYXIgKiopOwojIDczMCAi Li4vLi4vLi4vbGliL2NjbHRhc2suaCIKaW50IGZwVmFsaWRhdGUoIEZJTEUgKiApOwppbnQgZnAy dHlwZSggRklMRSAqICk7CmludCBmcDJpbmRleCggRklMRSAqICk7CnZvaWQgZnBTRVRpbmRleCgg RklMRSAqLCBpbnQgKTsKaW50IGZwMmZkKCBGSUxFICogKTsKdm9pZCBmcFNFVGZkKCBGSUxFICos IGludCApOwpGSUxFICogZnBBbGxvYyggY29uc3QgY2hhciAqLCBpbnQsIEZJTEUgKiApOwp2b2lk IGZwUmVhbGxvYyhGSUxFICpmcCwgY29uc3QgY2hhciAqIGZpbGVuYW1lLCBpbnQgZGt0eXBlKTsK dm9pZCBmcERlYWxsb2MoIEZJTEUgKiApOwpjaGFyICogZnAyZmlsZW5hbWUoIEZJTEUgKiApOwp2 b2lkIGZwU0VUZmxhZyggRklMRSAqLCBpbnQgKTsKdm9pZCBmcENMRUFSZmxhZyggRklMRSAqLCBp bnQgKTsKaW50IGZwVGVzdEZsYWcoIEZJTEUgKiwgaW50ICk7CmludCBmcFJlZmVyZW5jZSggRklM RSAqICk7CmludCBmcERlcmVmZXJlbmNlKCBGSUxFICogKTsKaW50IGZwR2V0UmVmQ291bnQoIEZJ TEUgKiApOwppbnQgZnBEdW1wRmlsZXMoIHZvaWQgKTsKRklMRSAqKiBmcEZpbGVMaXN0KCB2b2lk ICk7ClRCb29sIERLRmlsZXNMb3coIHZvaWQgKTsKCmludCBQcm9tb3RlKCBGSUxFICosIHZvaWQg KiApOwoKCgoKaW50IERLQ2hlY2soIGNvbnN0IGNoYXIgKiApOwp2b2lkIERLR2V0KCBGSUxFICos IGxvbmcsIGxvbmcsIHZvaWQgKiApOwp2b2lkIERLUHV0KCBGSUxFICosIGxvbmcsIGxvbmcsIHZv aWQgKiApOwpGSUxFICogREtPcGVuKCBjb25zdCBjaGFyICosIGludCwgY29uc3QgY2hhciAqICk7 CnZvaWQgREtDbG9zZSggRklMRSAqICk7CmNoYXIgKiBES05hbWUoIEZJTEUgKiApOwp2b2lkIERL RXJyb3IoIEZJTEUgKiApOwppbnQgREtSZWFkKCBGSUxFICosIHZvaWQgKiwgaW50NjQsIGxvbmcg KTsKY2hhciAqIERLUmVhZExpbmUoIEZJTEUgKiApOwppbnQgREtXcml0ZSggRklMRSAqLCB2b2lk ICosIGludDY0LCBsb25nICk7CnVuc2lnbmVkIGNoYXIgKiBES01NYXBJbmZvKCBGSUxFICosIGlu dCAqICk7CmludCBES0FsbG9jKCBGSUxFICogKTsKbG9uZyBES1NpemUoIGNvbnN0IGNoYXIgKiAp Owp2b2lkIERLU3luYyggRklMRSAqICk7CnZvaWQgREtEZWxldGUoIGNvbnN0IGNoYXIgKiApOwp2 b2lkIERLUmVuYW1lKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiApOwp2b2lkIERLVHJ1bmNh dGUoIGNvbnN0IGNoYXIgKiwgaW50ICk7CgppbnQgREtGUmVhZCggdm9pZCAqLCBsb25nLCBsb25n LCBGSUxFICogKTsKaW50IERLRldyaXRlKCB2b2lkICosIGxvbmcsIGxvbmcsIEZJTEUgKiApOwpp bnQgREtGU2VlayggRklMRSAqLCBpbnQ2NCwgaW50ICk7CmludCBES0ZTZWVrNjQoIEZJTEUgKiwg aW50NjQsIGludCApOwppbnQ2NCBES0ZUZWxsKCBGSUxFICogKTsKCgoKCmludCBES1ByaW50Zigg Y29uc3QgY2hhciAqLCAuLi4gKTsKaW50IERLRlByaW50ZiggRklMRSAqLCBjb25zdCBjaGFyICos IC4uLiApOwp2b2lkIEluc3RhbGxQcmludGZIYW5kbGVyKCB2b2lkICgqSGFuZGxlckZ1bmN0aW9u KShjb25zdCBjaGFyICopKTsKCgoKCmludCBES0NvcHkoY29uc3QgY2hhciAqLCBjb25zdCBjaGFy ICopOwppbnQgREtDaG1vZChjb25zdCBjaGFyICosIGludCk7CiMgODA2ICIuLi8uLi8uLi9saWIv Y2NsdGFzay5oIgpGSUxFICpGSGFuZGxlMmZwKCBpbnQgKTsKaW50IGZwMkZIYW5kbGUoIEZJTEUg KiApOwppbnQgQXNzaWduRkhhbmRsZUZvcmZwKCBGSUxFICosIGludCApOwp2b2lkIFJlbW92ZUZI YW5kbGUoIGludCApOwojIDg2NiAiLi4vLi4vLi4vbGliL2NjbHRhc2suaCIKdm9pZCBTZXRITWFs bG9jRGVidWcoaW50IG5MZXZlbCk7CnZvaWQgKiBfSE1hbGxvYyhzaXplX3QgblNpemUsIGNoYXIg KnBzekZpbGUsIGludCBuTGluZSk7CnZvaWQgKiBfSENhbGxvYyhzaXplX3QgbkVsZW0sIHNpemVf dCBuU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqcHN6RmlsZSwgaW50IG5M aW5lKTsKY2hhciAqIF9IU3RyaW5nKGNvbnN0IGNoYXIgKnBzelN0cmluZywgY2hhciAqcHN6Rmls ZSwgaW50IG5MaW5lKTsKdm9pZCBfSEZyZWUoIHZvaWQgKnBCbG9jaywgY2hhciAqcHN6RmlsZSwg aW50IG5MaW5lKTsKdm9pZCAqIF9IUmVhbGxvYyh2b2lkICpwQmxvY2ssIHNpemVfdCBuU2l6ZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnBzekZpbGUsIGludCBuTGluZSk7CnZv aWQgX0hNZW1vcnlUZXN0KGNoYXIgKnBzekZpbGUsIGludCBuTGluZSk7CnZvaWQgX0hSZXBvcnQo Y2hhciAqcHN6RmlsZSwgaW50IG5MaW5lKTsKaW50IEhNSGFuZGxlcihpbnQpOwp2b2lkIEhNRGVi dWdMZXZlbChpbnQgbkxldmVsKTsKdm9pZCBfSE1hcmsoY2hhciAqcHN6RmlsZSwgaW50IG5MaW5l KTsKaW50IF9IQ2hlY2tNYXJrKGNoYXIgKnBzekZpbGUsIGludCBuTGluZSk7ClRCb29sIF9IVGVz dEJsb2NrKHZvaWQgKnBCbG9jaywgY2hhciAqcHN6RmlsZSwgaW50IG5MaW5lKTsKY2hhciAqIEhT UHJpbnRmKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKdm9pZCBfSFJlcG9ydEJ5RmlsZXMoY2hh ciAqcHN6RmlsZSwgaW50IG5MaW5lKTsKdm9pZCBIUHJpbnRCbG9jayh2b2lkICpwQmxvY2spOwp2 b2lkIF9ITWVtSW5mbyh2b2lkICosIGNoYXIgKiwgaW50KTsKY2hhciAqIEhTdHJpbmdFeHBhbmQo Y29uc3QgY2hhciAqcHN6SW5wdXQpOwpUQm9vbCBDQ0xIU3RyaW5nRXhwYW5kVGVzdCggdm9pZCAp OwojIDkzNCAiLi4vLi4vLi4vbGliL2NjbHRhc2suaCIKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3N0 YXQuaCIgMSAzIDQKIyAxNiAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDMgNAojcHJhZ21hIGlk ZW50ICJAKCMpc3RhdC5oCTEuNDUJOTgvMDMvMjQgU01JIgoKIyAxICIvdXNyL2luY2x1ZGUvc3lz L2ZlYXR1cmVfdGVzdHMuaCIgMSAzIDQKIyAxOSAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDIg MyA0CiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMu MC4zL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMyA0CiMgMjAgIi91c3IvaW5jbHVkZS9zeXMvc3Rh dC5oIiAyIDMgNAoKCmV4dGVybiAiQyIgewojIDQwICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIg MyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lX2ltcGwuaCIgMSAzIDQKIyA0MSAiL3Vzci9p bmNsdWRlL3N5cy9zdGF0LmgiIDIgMyA0CiMgMjAzICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIg MyA0CnN0cnVjdCBzdGF0IHsKICAgICAgICBkZXZfdCBzdF9kZXY7CiAgICAgICAgaW5vX3Qgc3Rf aW5vOwogICAgICAgIG1vZGVfdCBzdF9tb2RlOwogICAgICAgIG5saW5rX3Qgc3Rfbmxpbms7CiAg ICAgICAgdWlkX3Qgc3RfdWlkOwogICAgICAgIGdpZF90IHN0X2dpZDsKICAgICAgICBkZXZfdCBz dF9yZGV2OwogICAgICAgIG9mZl90IHN0X3NpemU7CgoKICAgICAgICB0aW1lc3RydWNfdCBzdF9h dGltOwogICAgICAgIHRpbWVzdHJ1Y190IHN0X210aW07CiAgICAgICAgdGltZXN0cnVjX3Qgc3Rf Y3RpbTsKCgoKCgogICAgICAgIGJsa3NpemVfdCBzdF9ibGtzaXplOwogICAgICAgIGJsa2NudF90 IHN0X2Jsb2NrczsKICAgICAgICBjaGFyIHN0X2ZzdHlwZVsxNl07Cn07CiMgNDQzICIvdXNyL2lu Y2x1ZGUvc3lzL3N0YXQuaCIgMyA0CmV4dGVybiBpbnQgZnN0YXQoaW50LCBzdHJ1Y3Qgc3RhdCAq KTsKZXh0ZXJuIGludCBzdGF0KGNvbnN0IGNoYXIgKiwgc3RydWN0IHN0YXQgKik7CgoKCmV4dGVy biBpbnQgbHN0YXQoY29uc3QgY2hhciAqLCBzdHJ1Y3Qgc3RhdCAqKTsKZXh0ZXJuIGludCBta25v ZChjb25zdCBjaGFyICosIG1vZGVfdCwgZGV2X3QpOwoKCgoKCmV4dGVybiBpbnQgZmNobW9kKGlu dCwgbW9kZV90KTsKCgpleHRlcm4gaW50IGNobW9kKGNvbnN0IGNoYXIgKiwgbW9kZV90KTsKZXh0 ZXJuIGludCBta2Rpcihjb25zdCBjaGFyICosIG1vZGVfdCk7CmV4dGVybiBpbnQgbWtmaWZvKGNv bnN0IGNoYXIgKiwgbW9kZV90KTsKZXh0ZXJuIG1vZGVfdCB1bWFzayhtb2RlX3QpOwojIDUwMiAi L3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDMgNAp9CiMgOTM1ICIuLi8uLi8uLi9saWIvY2NsdGFz ay5oIiAyCgoKCgoKdHlwZWRlZiBzdHJ1Y3Qgc3RhdCBES1N0YXRfdDsKIyA5NjUgIi4uLy4uLy4u L2xpYi9jY2x0YXNrLmgiCmludCBES1N0YXQoIGNvbnN0IGNoYXIgKiwgREtTdGF0X3QgKiApOwoK CgoKY2hhciAqKiBJTVBEaXJlY3RvcnkoIGNvbnN0IGNoYXIgKiApOwppbnQgSU1QUmVnZXgoIGNv bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBUQm9vbCApOwpUQm9vbCBJTVBGaWxlbmFtZUNvbXBh cmUoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqICk7CmNvbnN0IGNoYXIgKiBJTVBUZW1wTmFt ZSh2b2lkKTsKY29uc3QgY2hhciAqIElNUFJlbFRlbXBOYW1lKCBjb25zdCBjaGFyICpwc3pMb2Nh dGlvbiApOwpjb25zdCBjaGFyICogSU1QUmVsVGVtcE5hbWVFeHQoIGNvbnN0IGNoYXIgKnBzekxv Y2F0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyICpwc3pFeHQpOwoKVEJvb2wgSU1QSXNEaXJlY3RvcnkoIGNvbnN0IGNoYXIqIHBzekRpcmVj dG9yeSApOwpUQm9vbCBJTVBJc0RpcmVjdG9yeVdyaXRhYmxlKCBjb25zdCBjaGFyKiBwc3pEaXJl Y3RvcnkgKTsKY29uc3QgY2hhciAqIElNUEdldFRlbXBEaXIoIHZvaWQgKTsKCgoKCmludCBJTVBT aWduYWwoIGludCwgdm9pZCAoKikodm9pZCkgKTsKdm9pZCBJTVBTaWduYWxJZ25vcmUoIHZvaWQg KTsKIyAxMDA4ICIuLi8uLi8uLi9saWIvY2NsdGFzay5oIgpUQm9vbCBORVRJbml0KCB2b2lkICk7 CnZvaWQgTkVUQ2xvc2UoIEZJTEUgKiApOwppbnQgTkVUU2VuZCggRklMRSAqLCB2b2lkICosIGlu dCApOwppbnQgTkVUQWNjZXB0KCBGSUxFICosIHZvaWQgKiwgaW50ICk7CkZJTEUgKk5FVE9wZW4o IGNvbnN0IGNoYXIgKiwgaW50MzIsIGludDMyICk7CkZJTEUgKk5FVEFkdmVydGlzZSggY29uc3Qg Y2hhciAqLCBpbnQzMiAqLCBpbnQzMiAqICk7CkZJTEUgKk5FVFNlbGVjdCggRklMRSAqLCBpbnQg KTsKbG9uZyBORVRGbGFncyggRklMRSAqICk7CnZvaWQgTkVUU2V0RmxhZ3MoIEZJTEUgKiwgbG9u ZyApOwp2b2lkIE5FVEZsdXNoKCBGSUxFICogKTsKY29uc3QgY2hhciAqTkVUSG9zdG5hbWUoIHZv aWQgKTsKVEJvb2wgTkVUUGVuZGluZ1JlYWQgKEZJTEUqIGZwLCBpbnQgbXNlY3MpOwojIDEwMzAg Ii4uLy4uLy4uL2xpYi9jY2x0YXNrLmgiCnR5cGVkZWYgZW51bSB4ZHJfdHlwZSB7CiAgWERSVm9p ZCA9IDAsCiAgWERSSW50MzIgPSAxLAogIFhEUkZsb2F0ID0gMiwKICBYRFJEb3VibGUgPSAzLAog IFhEUlN0cmluZyA9IDQsCiAgWERSQnl0ZSA9IDUsCiAgWERSSW50MzJDb3VudGVkID0gNiwKICBY RFJGbG9hdENvdW50ZWQgPSA3LAogIFhEUkRvdWJsZUNvdW50ZWQgPSA4LAogIFhEUkJ5dGVDb3Vu dGVkID0gOQp9IFhEUlR5cGU7CgppbnQgWERSU2VuZCggRklMRSAqLCBYRFJUeXBlLCBpbnQsIHZv aWQgKiApOwppbnQgWERSQWNjZXB0KCBGSUxFICosIFhEUlR5cGUsIGludCwgdm9pZCAqICk7CiMg MTA1NCAiLi4vLi4vLi4vbGliL2NjbHRhc2suaCIKaW50IFJQQ0FjY2VwdCggRklMRSAqLCBpbnQg KiApOwppbnQgUlBDU2VuZCggRklMRSAqLCBpbnQsIGludCApOwoKCgoKCgoKdHlwZWRlZiBUQm9v bCAoKklNUERkZUNCKSggdm9pZCAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3Qg Y2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqLCBpbnQg KiApOwp2b2lkICpJTVBEZGVDb25uZWN0KCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiApOwp2 b2lkIElNUERkZURpc2Nvbm5lY3QoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqICk7ClRCb29s IElNUERkZUV4ZWN1dGUoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICog KTsKVEJvb2wgSU1QRGRlUmVxdWVzdCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0 IGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKios IGludCAqICk7CnZvaWQgSU1QRGRlUmVnaXN0ZXJTZXJ2aWNlKCBjb25zdCBjaGFyICosIGNvbnN0 IGNoYXIgKiwgSU1QRGRlQ0IgKTsKCgoKVEJvb2wgSU1QU3RhcnQoaW50LCBjaGFyICosIGNoYXIg KiwgY2hhciopOwpUQm9vbCBJTVBQcmludChpbnQsIGNoYXIgKiwgY2hhciAqKTsKIyA0NiAiLi4v Li4vLi4vbGliL2NjbGJhc2UuaCIgMgoKfQojIDc2ICIuLi8uLi8uLi9saWIvY2NsY29udi5oIiAy CgpleHRlcm4gIkMiIHsKIyA5MSAiLi4vLi4vLi4vbGliL2NjbGNvbnYuaCIKY2hhciAqIFN0cmlw V2hpdGVTcGFjZSggY2hhciAqICk7CmludCBOZXh0TXVsdCggaW50LCBpbnQgKTsKdm9pZCBTdHJU b0FyZyggY2hhciAqLCBjaGFyICosIGNoYXIgKiosIGludCAqKTsKY2hhciAqIE1rTmFtZSggY29u c3QgY2hhciAqLCAuLi4gKTsKCmNoYXIgKiBNa1N0cmluZyggY2hhciAqICk7CnZvaWQgUHJpbnRG bG9hdCggY2hhciAqLCBjaGFyICosIGRvdWJsZSApOwp2b2lkIFByaW50RG91YmxlKCBjaGFyICos IGNoYXIgKiwgZG91YmxlICk7CmNvbnN0IGNoYXIgKiBGb3JtYXREb3VibGUoIGRvdWJsZSwgY2hh ciAqICk7Cgp2b2lkIFByaW50SW50KCBjaGFyICosIGNoYXIgKiwgbG9uZyApOwp2b2lkIFRleHRG aWVsZEZpbGwoIGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQgKTsKCgoKCnZvaWQgVUNhc2VTdHJp bmcoIGNoYXIgKiApOwp2b2lkIExDYXNlU3RyaW5nKCBjaGFyICogKTsKZG91YmxlIFNjYW5Eb3Vi bGUoIGNoYXIgKiwgaW50ICk7CmxvbmcgU2NhbkludCggY2hhciAqLCBpbnQgKTsKdm9pZCBGaWxl TmFtZSggY2hhciAqLCBjaGFyICogKTsKdm9pZCBCaXRDb3VudCh1bnNpZ25lZCBjaGFyICosIGlu dCwgaW50ICopOwoKZG91YmxlIElNUFJhbmRvbSh2b2lkKTsKaW50IElNUEluaXRSYW5kb20oaW50 KTsKaW50IElNUFJhbmRJbnQodm9pZCk7CmRvdWJsZSBJTVBSYW5kTm9ybShkb3VibGUpOwoKY2hh ciAqKiBHZXROaWNlR3JhcGhMYWJlbHMoIGRvdWJsZSwgZG91YmxlLCBpbnQsIGludCAqKTsKCgoK CnZvaWQgTWF0cml4SW52KCBkb3VibGUgKiwgaW50LCBkb3VibGUgKiApOwp2b2lkIFRyaWFuZ3Vs YXJEZWNvbXBvc2UoaW50LCBkb3VibGUgKik7CnZvaWQgUHJpbnRNYXRyaXgoY2hhciAqbmFtZSwg aW50IG4sIGludCBtLCBkb3VibGUgKm1hdCk7CmRvdWJsZSBQb3dJbnQgKGRvdWJsZSwgaW50KTsK CgoKCgp2b2lkIE1NM19NdWx0KGRvdWJsZSAqbWF0MSwgZG91YmxlICptYXQyLCBkb3VibGUgKm1h dDMpOwp2b2lkIE1WM19NdWx0KGRvdWJsZSAqbWF0LCBkb3VibGUgKnZlYzEsIGRvdWJsZSAqdmVj Mik7CnZvaWQgTXRWM19NdWx0KGRvdWJsZSAqbWF0LCBkb3VibGUgKnZlYzEsIGRvdWJsZSAqdmVj Mik7CmRvdWJsZSBWZWNMZW5ndGgoZG91YmxlICp2ZWMpOwp2b2lkIFZlY05vcm1hbGl6ZShkb3Vi bGUgKnZlYyk7CnZvaWQgVmVjRGlmZihkb3VibGUgKnZlYzEsIGRvdWJsZSAqdmVjMiwgZG91Ymxl ICp2ZWMzKTsKdm9pZCBWZWNTY2FsZShkb3VibGUgc2NhbGUsIGRvdWJsZSAqdmVjMSwgZG91Ymxl ICp2ZWMyKTsKZG91YmxlIFZlY0Rpc3RhbmNlKGRvdWJsZSAqdmVjMSwgZG91YmxlICp2ZWMyKTsK ZG91YmxlIERvdFByb2R1Y3QoZG91YmxlICp2ZWMxLCBkb3VibGUgKnZlYzIpOwp2b2lkIENyb3Nz UHJvZHVjdChkb3VibGUgKnZlYzEsIGRvdWJsZSAqdmVjMiwgZG91YmxlICp2ZWMzKTsKZG91Ymxl IHBvbHl2YWwoZG91YmxlICpjb2VmLCBpbnQgbk9yZGVyLCBkb3VibGUgeCk7CgoKCgoKY2hhciAq KiBSZWFkQXV4RmlsZSggY29uc3QgY2hhciAqICk7CmNoYXIgKiBGZXRjaEF1eEVudHJ5KCBjaGFy ICoqLCBjb25zdCBjaGFyICogKTsKY29uc3QgY2hhciAqIEZldGNoTmV4dEF1eEVudHJ5KCBjaGFy ICoqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiApOwpjaGFyICoqIFNldEF1eEVudHJ5KCBj aGFyICoqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiApOwpjaGFyICoqIEFkZEF1eEVudHJ5 KCBjaGFyICoqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiApOwpjaGFyICoqIERlbGV0ZUF1 eEVudHJpZXMoIGNoYXIgKiosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqICwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEJvb2wpOwp2b2lkIFdyaXRlQXV4RmlsZSgg Y29uc3QgY2hhciAqLCBjaGFyICoqICk7CmludCBGZXRjaEF1eEZpZWxkTmFtZUxlbmd0aCggY29u c3QgY2hhciAqICk7ClRCb29sIFBhcnNlQXV4RW50cnkoY29uc3QgY2hhciAqLCBjb25zdCBjaGFy ICoqLCBjb25zdCBjaGFyICoqKTsKY2hhciAqIEJ1aWxkQXV4RW50cnkoIGNvbnN0IGNoYXIgKiwg Y29uc3QgY2hhciAqICk7CgpjaGFyICoqIERlbGV0ZVN0cmluZ0xpc3RFbnRyeSggY2hhciAqKiwg aW50ICk7ClRCb29sIFN0cmluZ0xpc3RzRXF1YWwoIGNoYXIgKiosIGNoYXIgKiogKTsKY2hhciAq KiBEdXBsaWNhdGVTdHJpbmdMaXN0KCBjaGFyICoqICk7CmludCBDb3VudFN0cmluZ0xpc3QoIGNo YXIgKiogKTsKdm9pZCBEZXN0cm95U3RyaW5nTGlzdCggY2hhciAqKiApOwpjaGFyICoqIEFkZFN0 cmluZ0xpc3QoIGNoYXIgKiosIGNoYXIgKiogKTsKY2hhciAqKiBBZGRTdHJpbmdUb0xpc3QoIGNo YXIgKiosIGNvbnN0IGNoYXIgKiApOwppbnQgRmluZEVudHJ5SW5TdHJpbmdMaXN0KCBjaGFyICoq LCBjb25zdCBjaGFyICogKTsKaW50IEZpbmRSZWdleEluU3RyaW5nTGlzdCggY2hhciAqKiwgY29u c3QgY2hhciAqICk7CmludCBSZXBsYWNlU3RyaW5nSW5MaXN0KCBjaGFyICoqLCBjb25zdCBjaGFy ICosIGludCApOwpjaGFyICoqIFRleHRGaWxlVG9TdHJpbmdMaXN0KCBjb25zdCBjaGFyICogKTsK VEJvb2wgU3RyaW5nTGlzdFRvRmlsZSggY2hhciAqKiwgY29uc3QgY2hhciAqICk7CmNoYXIgKlN0 cmluZ0xpc3RUb0J1ZmZlciggY2hhciAqKiBwYXBzelN0cmluZ0xpc3QgKTsKY2hhciAqKkJ1ZmZl clRvU3RyaW5nTGlzdCggY29uc3QgY2hhciogcHN6QnVmZmVyICk7CmNoYXIgKiogVG9rZW5pemUo IGNvbnN0IGNoYXIgKiApOwpjaGFyICoqIFRva2VuaXplRGVsaW0oIGNvbnN0IGNoYXIgKiwgY29u c3QgY2hhciAqICk7CmNoYXIgKiogVG9rZW5pemVEZWxpbTIoIGNvbnN0IGNoYXIgKiwgY29uc3Qg Y2hhciAqICk7CmNoYXIgKiBHZXRMYXN0VG9rZW4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICop OwpjaGFyICoqIEluc2VydFN0cmluZ0luTGlzdChjaGFyICoqLCBjb25zdCBjaGFyICosIGludCAs IFRCb29sKTsKIyAxOTEgIi4uLy4uLy4uL2xpYi9jY2xjb252LmgiCnZvaWQgU3dhcFdvcmQoIGlu dCwgdm9pZCAqICk7CiMgMjA2ICIuLi8uLi8uLi9saWIvY2NsY29udi5oIgp2b2lkIENDTExvZ0Vy cm9yKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uICk7CnZvaWQgQ0NMTG9nU3VjY2Vz cyggY29uc3QgY2hhciAqICk7CnZvaWQgQ0NMU3RhcnRUZXN0KCBjb25zdCBjaGFyICogKTsKVEJv b2wgQ0NMRW5kVGVzdCggdm9pZCApOwojIDIxOCAiLi4vLi4vLi4vbGliL2NjbGNvbnYuaCIKdHlw ZWRlZiBzdHJ1Y3QgewogICAgY2hhciAqYmFzZW5hbWU7CiAgICBjaGFyICpleHRlbnNpb247CiAg ICBjaGFyICpkcml2ZTsKICAgIGludCByZWxhdGl2ZTsKICAgIGludCBwYXRoX2VsZW1lbnRzOwog ICAgY2hhciAqcGF0aFsyNF07Cn0gR2xvYl90OwojIDI1MCAiLi4vLi4vLi4vbGliL2NjbGNvbnYu aCIKdm9pZCBJTVBEZXN0cm95R2xvYiggR2xvYl90ICogKTsKR2xvYl90ICogSU1QRmlsZTJHbG9i KCBjb25zdCBjaGFyICosIGludCApOwpjaGFyICogSU1QR2xvYjJGaWxlKCBjb25zdCBHbG9iX3Qg KiwgaW50ICk7CmNoYXIgKiBJTVBHbG9iYmVyKCBjb25zdCBjaGFyICosIGludCwgaW50ICk7CmNo YXIgKiBJTVBHZXRQYXRoKCBjb25zdCBHbG9iX3QgKiwgaW50ICk7CmNoYXIgKiBJTVBHZXRGaWxl bmFtZSggY29uc3QgR2xvYl90ICosIGludCApOwpjb25zdCBjaGFyICogSU1QR2V0RmlsZW5hbWVS ZWYoIGNvbnN0IEdsb2JfdCAqLCBpbnQgKTsKY29uc3QgY2hhciAqIElNUEV4dHJhY3RGaWxlbmFt ZVJlZiggY29uc3QgY2hhciAqLCBpbnQgKTsKCgp2b2lkIElNUFNldEZpbGVuYW1lKCBHbG9iX3Qg KiwgY29uc3QgY2hhciAqICk7CmNoYXIgKiBJTVBTZXRFeHRlbnNpb24oIGNvbnN0IGNoYXIqIHBz ekZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh ciogcHN6RXh0ICk7CmNoYXIgKiBJTVBBYmJyZXZpYXRlUGF0aCggR2xvYl90ICosIGludCwgaW50 ICk7CmNvbnN0IGNoYXIgKiBJTVBTZWFyY2hGaWxlKCBjb25zdCBjaGFyICogKTsKCmNoYXIgKiBJ TVBNYWtlUmVsYXRpdmVQYXRoKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiApOwpjaGFyICog SU1QTWVyZ2VSZWxhdGl2ZVBhdGgoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqICk7ClRCb29s IENDTFJlbGF0aXZlVGVzdCggdm9pZCApOwoKCgoKdHlwZWRlZiBzdHJ1Y3QgbGlua190IHsKICBz dHJ1Y3QgbGlua190ICpuZXh0OwogIHZvaWQgKm9iamVjdDsKfSBMaW5rX3Q7CgpMaW5rX3QgKiBJ bnNlcnRMaW5rKCBMaW5rX3QgKiwgTGlua190ICogKTsKTGlua190ICogQWRkTGluayggTGlua190 ICosIExpbmtfdCAqICk7CkxpbmtfdCAqIENyZWF0ZUxpbmsoIHZvaWQgKiApOwpMaW5rX3QgKiBG aW5kTGluayggTGlua190ICosIHZvaWQgKiApOwpMaW5rX3QgKiBEZWxldGVMaW5rKCBMaW5rX3Qg KiwgTGlua190ICogKTsKTGlua190ICogUmVtb3ZlTGluayggTGlua190ICosIExpbmtfdCAqICk7 CkxpbmtfdCAqIExpbmtOKCBMaW5rX3QgKiwgaW50ICk7CnZvaWQgRGVzdHJveUxpc3QoIExpbmtf dCAqICk7CkxpbmtfdCAqIER1cGxpY2F0ZUxpc3QoIExpbmtfdCAqKTsKIyAzMTIgIi4uLy4uLy4u L2xpYi9jY2xjb252LmgiCnR5cGVkZWYgc3RydWN0IENDSEVudHJ5X3QKewogICAgdm9pZCAqaEtl eTsKICAgIHZvaWQgKnBEYXRhOwp9IENDSEVudHJ5OwoKc3RydWN0IENDSENhY2hlX3Q7Cgp0eXBl ZGVmIGxvbmcgKCpDQ0hIYXNoRnVuYykodm9pZCAqKTsKdHlwZWRlZiBpbnQgKCpDQ0hDb21wRnVu Yykodm9pZCAqLCB2b2lkICopOwp0eXBlZGVmIHZvaWQgKCpDQ0hGbHVzaEZ1bmMpKHN0cnVjdCBD Q0hDYWNoZV90ICosIENDSEVudHJ5ICosIHZvaWQgKik7Cgp0eXBlZGVmIHN0cnVjdCBDQ0hDYWNo ZV90CnsKICAgIGludDMyIG5PcHRpb25zOwogICAgaW50IG5TaXplOwogICAgaW50IG5FbnRyaWVz OwogICAgdW5zaWduZWQgaW50IG5TbG90czsKICAgIGludCAqcGFuRW50cmllc0luU2xvdDsKICAg IENDSEVudHJ5ICoqcGFwYXNFbnRyaWVzOwogICAgQ0NISGFzaEZ1bmMgcGZuSGFzaDsKICAgIEND SENvbXBGdW5jIHBmbkNvbXA7CiAgICBDQ0hGbHVzaEZ1bmMgcGZuRmx1c2g7CiAgICB2b2lkICpw Rmx1c2hDQkRhdGE7Cn0gQ0NIQ2FjaGUsICpDQ0hIYW5kbGU7CgpDQ0hFbnRyeSAqIENDSEZpbmRF bnRyeShDQ0hIYW5kbGUgcHNDYWNoZSwgdm9pZCAqaEtleSk7CnZvaWQgKiBDQ0hEZWxldGUoQ0NI SGFuZGxlIHBzQ2FjaGUsIHZvaWQgKmhLZXkpOwpDQ0hIYW5kbGUgQ0NIQ3JlYXRlQ2FjaGUoc2l6 ZV90IG5TaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzIgbk9wdGlvbnMs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0hGbHVzaEZ1bmMgcGZjRmx1c2hGdW5j LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcEZsdXNoQ0JEYXRhKTsKdm9p ZCAqIENDSFVwZGF0ZShDQ0hIYW5kbGUgcHNDYWNoZSwgdm9pZCAqaEtleSwgdm9pZCAqcERhdGEp OwpDQ0hFbnRyeSAqIENDSEZpbmRFbnRyeShDQ0hIYW5kbGUgcHNDYWNoZSwgdm9pZCAqaEtleSk7 CnZvaWQgKiBDQ0hEZWxldGUoQ0NISGFuZGxlIHBzQ2FjaGUsIHZvaWQgKmhLZXkpOwp2b2lkIEND SEZsdXNoQ2FjaGUoQ0NISGFuZGxlIHBzQ2FjaGUpOwp2b2lkICoqIENDSEdldEFsbChDQ0hIYW5k bGUgcHNDYWNoZSk7CmludCBDQ0hHZXROdW1FbnRyaWVzKENDSEhhbmRsZSBwc0NhY2hlKTsKdm9p ZCAqIENDSEZpbmQoQ0NISGFuZGxlIHBzQ2FjaGUsIHZvaWQgKmhLZXkpOwp2b2lkIENDSERlbGV0 ZUNhY2hlKENDSEhhbmRsZSBwc0NhY2hlKTsKQ0NIRW50cnkgKiogQ0NIR2V0QWxsRW50cmllcyhD Q0hIYW5kbGUgcHNDYWNoZSk7CgoKCgpjaGFyICogTkxTVGFnTG9va3VwIChjb25zdCBjaGFyKiBw c3pUYWcgKTsKY2hhciAqIE5MU0xvb2t1cCAoY29uc3QgY2hhciogcHN6U3RyaW5nICk7CmNoYXIg KiogTkxTTG9va3VwU3RyaW5nTGlzdCAoY2hhciAqKiBwYXN6U3RyaW5nTGlzdCApOwpUQm9vbCBO TFNUb0RvdWJsZUJ5dGUgKGNvbnN0IGNoYXIgKiwgY2hhciAqLCBpbnQpOwpjaGFyICogTkxTRG91 YmxlVG9Db21wb3VuZChjb25zdCBjaGFyICpwc3pEb3VibGVCeXRlLCBpbnQgbkNoYXJDb3VudCk7 CgpUQm9vbCBOTFNIYXNEb3VibGUgKGNvbnN0IGNoYXIgKik7ClRCb29sIE5MU0RvdWJsZUNoYXJJ c05VTEwgKGNvbnN0IGNoYXIgKik7CnZvaWQgTkxTU2V0TG9jYWxlIChjb25zdCBjaGFyICogKTsK dm9pZCBOTFNDbGVhckRhdGFiYXNlICh2b2lkKTsKCgp2b2lkIE5MU1NldFRlc3RNb2RlKFRCb29s KTsKdm9pZCBOTFNTZXRMb2dNb2RlKFRCb29sKTsKdm9pZCBOTFNJbml0KCk7ClRCb29sIE5MU0lz TGVhZEJ5dGUodW5zaWduZWQgY2hhcik7CmNoYXIgKiBOTFNOZXh0Q2hhcihjaGFyICopOwpjaGFy ICogTkxTUHJldkNoYXIoY2hhciAqLCBjaGFyICopOwppbnQgTkxTU3RyaW5nTGVuZ3RoKGNoYXIg Kik7CmludCBOTFNNYXhDaGFyV2lkdGgoKTsKCgoKCnZvaWQgUE1Jbml0aWFsaXplKCBUQm9vbCAp Owp2b2lkIFBNU3RhcnRUaW1pbmcoIGNvbnN0IGNoYXIgKiApOwp2b2lkIFBNRW5kVGltaW5nKCBj b25zdCBjaGFyICogKTsKdm9pZCBQTVN0YXJ0UHJvY2Vzcyh2b2lkKTsKdm9pZCBQTUVuZFByb2Nl c3Modm9pZCk7CmNoYXIgKipQTUdldEFjdGlvbnModm9pZCk7CmRvdWJsZSBQTUdldEF2ZXJhZ2VB Y3Rpb25UaW1lKCBjb25zdCBjaGFyICogKTsKdm9pZCBQTURlYnVnUmVwb3J0KHZvaWQpOwppbnQg UE1HZXRFcnJvcnMoY29uc3QgY2hhciAqKTsKCgoKCnR5cGVkZWYgY2hhciAqKElNUFByb21wdEVu Y3J5cHRLZXkpKCB1bnNpZ25lZCBjaGFyICpwYWJ5RmluZ2VycHJpbnRFbmNyeXB0ZWQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwc3pGaW5nZXJwcmlu dENsZWFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq cHN6UXVlc3Rpb24gKTsKCnZvaWQgSU1QWG9yV2l0aFN0cmluZyggY29uc3QgY2hhciAqLCB1bnNp Z25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiwgaW50ICk7CnZvaWQgSU1QRW5jcnlwdEJ1ZmZl ciggY29uc3QgY2hhciAqLCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiwgaW50ICk7 CnZvaWQgSU1QRGVjcnlwdEJ1ZmZlciggY29uc3QgY2hhciAqLCB1bnNpZ25lZCBjaGFyICosIHVu c2lnbmVkIGNoYXIgKiwgaW50ICk7CmNoYXIgKklNUEdlbmVyYXRlRW5jcnlwdGlvbktleSggaW50 ICk7Cgp2b2lkIElNUFJlbWVtYmVyRW5jcnlwdEtleSggY29uc3QgY2hhciAqICk7CmNoYXIgKipJ TVBSZWNhbGxFbmNyeXB0S2V5cyggdm9pZCApOwpjaGFyICpJTVBHZXRNYXRjaGluZ0tleSggdW5z aWduZWQgY2hhciAqcGFieUZpbmdlcnByaW50RW5jcnlwdGVkLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBzekZpbmdlcnByaW50Q2xlYXIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHN6UXVlc3Rpb24gKTsKdm9p ZCBJTVBTZXRFbmNyeXB0S2V5UHJvbXB0ZXIoIElNUFByb21wdEVuY3J5cHRLZXkgcGZuUHJvbXB0 ZXIgKTsKY2hhciAqSU1QUHJvbXB0VGVybUVuY3J5cHRLZXkoIHVuc2lnbmVkIGNoYXIgKiwgY29u c3QgY2hhciAqLCBjb25zdCBjaGFyICogKTsKCgoKCgp2b2lkIFByaW50SGlzRGF0YShGSUxFICpm cCwgY29uc3QgaW50ICphbkhpc0RhdGEsIGludCBuSGlzRGF0YVNpemUsCiAgICAgICAgICAgICAg ICAgIGRvdWJsZSBkZkZpcnN0QmluVmFsdWUsIGRvdWJsZSBkZkJpblNpemUpOwoKdm9pZCBQcmlu dEhpc0FTQ0lJKEZJTEUgKmZwLCBjb25zdCBpbnQgKmFuSGlzRGF0YSwgaW50IG5IaXNEYXRhU2l6 ZSwKICAgICAgICAgICAgICAgICAgIGRvdWJsZSBkZkZpcnN0QmluVmFsdWUsIGRvdWJsZSBkZkJp blNpemUsIGludCBuSGlzQ291bnQsCiAgICAgICAgICAgICAgICAgICBkb3VibGUgZGZIaXNNaW4s IGRvdWJsZSBkZkhpc01heCwgZG91YmxlIGRmSGlzTWVhbiwKICAgICAgICAgICAgICAgICAgIGRv dWJsZSBkZkhpc1N0ZERldiwgZG91YmxlIGRmSGlzTWVkaWFuLCBkb3VibGUgZGZDb3VudE1pbiwK ICAgICAgICAgICAgICAgICAgIGRvdWJsZSBkZkNvdW50TWF4LCBkb3VibGUgZGZHcmV5TGV2ZWxN aW4sCiAgICAgICAgICAgICAgICAgICBkb3VibGUgZGZHcmV5TGV2ZWxNYXgsIGNvbnN0IGNoYXIg KnBzelRpdGxlLAogICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHN6TGFiZWxYLCBjb25z dCBjaGFyICpwc3pMYWJlbFksCiAgICAgICAgICAgICAgICAgICBUQm9vbCBiUHJpbnRTdGF0cyk7 Cgp2b2lkIFByaW50SGlzUFMoRklMRSAqZnAsIGNvbnN0IGludCAqYW5IaXNEYXRhLCBpbnQgbkhp c0RhdGFTaXplLAogICAgICAgICAgICAgICAgZG91YmxlIGRmRmlyc3RCaW5WYWx1ZSwgZG91Ymxl IGRmQmluU2l6ZSwgaW50IG5IaXNDb3VudCwKICAgICAgICAgICAgICAgIGRvdWJsZSBkZkhpc01p biwgZG91YmxlIGRmSGlzTWF4LCBkb3VibGUgZGZIaXNNZWFuLAogICAgICAgICAgICAgICAgZG91 YmxlIGRmSGlzU3RkRGV2LCBkb3VibGUgZGZIaXNNZWRpYW4sIGRvdWJsZSBkZkNvdW50TWluLAog ICAgICAgICAgICAgICAgZG91YmxlIGRmQ291bnRNYXgsIGRvdWJsZSBkZkdyZXlMZXZlbE1pbiwg ZG91YmxlIGRmR3JleUxldmVsTWF4LAogICAgICAgICAgICAgICAgZG91YmxlIGRmUGFnZVdpZHRo LCBkb3VibGUgZGZQYWdlSGVpZ2h0LCBkb3VibGUgZGZXaW5kb3dXaWR0aCwKICAgICAgICAgICAg ICAgIGRvdWJsZSBkZldpbmRvd0hlaWdodCwgaW50IGJMYW5kU2NhcGUsIGNvbnN0IGNoYXIgKnBz elRpdGxlLAogICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHN6TGFiZWxYLCBjb25zdCBjaGFy ICpwc3pMYWJlbFksCiAgICAgICAgICAgICAgICBUQm9vbCBiUHJpbnRTdGF0cywgaW50IG5OdW1D b3BpZXMpOwoKfQojIDM0NiAiLi4vLi4vLi4vbGliL2dkYi5oIiAyCiMgMSAiLi4vLi4vLi4vbGli L2NjbHByb2ouaCIgMQojIDIxICIuLi8uLi8uLi9saWIvY2NscHJvai5oIgpleHRlcm4gIkMiIHsK CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogIGNoYXIgVW5pdHNbMjBdOwogIGRvdWJsZSBEZWFydGhb Ml07CiAgZG91YmxlIFJlZkxvbmc7CiAgZG91YmxlIFJlZkxhdDsKICBkb3VibGUgU3RkUGFyYWxs ZWwxOwogIGRvdWJsZSBTdGRQYXJhbGxlbDI7CiAgZG91YmxlIEZhbHNlRWFzdGluZzsKICBkb3Vi bGUgRmFsc2VOb3J0aGluZzsKICBkb3VibGUgU2NhbGU7CiAgZG91YmxlIEhlaWdodDsKICBkb3Vi bGUgTG9uZzE7CiAgZG91YmxlIExhdDE7CiAgZG91YmxlIExvbmcyOwogIGRvdWJsZSBMYXQyOwog IGRvdWJsZSBBemltdXRoOwogIGludCBMYW5kc2F0TnVtOwoKICBpbnQgTGFuZHNhdFBhdGg7Cgog IGRvdWJsZSBYT2ZmOwogIGRvdWJsZSBZT2ZmOwogIGRvdWJsZSBYU2l6ZTsKICBkb3VibGUgWVNp emU7CgogIGludCBQcm9qZWN0aW9uQ29kZTsKICBpbnQgUHJvamVjdGlvblpvbmU7CiAgZG91Ymxl IFVTR1NQYXJtc1sxNV07CiAgaW50IFVuaXRzQ29kZTsKICBpbnQgU3BoZXJvaWQ7CiAgaW50IElG aWVsZHM7CgogIGRvdWJsZSBYUm90OwogIGRvdWJsZSBZUm90OwoKfSBQcm9qSW5mb190OwojIDcz ICIuLi8uLi8uLi9saWIvY2NscHJvai5oIgp0eXBlZGVmIHN0cnVjdCB7CiAgY2hhciBzekRhdHVt Q29kZVs1XTsKICBjaGFyICogcHN6RGF0dW1OYW1lOwogIGNoYXIgKiBwc3pEYXR1bVdoZXJlOwoK CgoKICBjaGFyIHN6RWxsaXBzQ29kZVs1XTsKICBjaGFyICogcHN6RWxsaXBzTmFtZTsKICBkb3Vi bGUgZEE7CiAgZG91YmxlIGRCOwoKICBjaGFyICogcHN6U2hpZnRGaWxlMTsKICBjaGFyICogcHN6 U2hpZnRGaWxlMjsKCgogIGRvdWJsZSBkWE9mZnNldDsKICBkb3VibGUgZFlPZmZzZXQ7CiAgZG91 YmxlIGRaT2Zmc2V0OwoKCiAgZG91YmxlIGRYUm90YXRlOwogIGRvdWJsZSBkWVJvdGF0ZTsKICBk b3VibGUgZFpSb3RhdGU7CgogIGRvdWJsZSBkU2NhbGU7CgogIGRvdWJsZSBkWFNpZ21hOwogIGRv dWJsZSBkWVNpZ21hOwogIGRvdWJsZSBkWlNpZ21hOwoKICBpbnQgbkRvcHBsZXI7CgoKICBkb3Vi bGUgZEZsYXR0ZW5pbmc7CiMgMTE4ICIuLi8uLi8uLi9saWIvY2NscHJvai5oIgogIGNoYXIgKipw YXN6R3JpZEZpbGU7CgogIHZvaWQgKiBwc0dGOwoKCgp9IERhdHVtSW5mb190OwoKCgoKdHlwZWRl ZiBzdHJ1Y3QKewogIGNoYXIgc3pVc2VyTmFtZVsxMl07CiAgY2hhciBzelByb2pEZXNjWzgwXTsK ICBjaGFyIHN6UHJvakNvdW50cnlbODBdOwogIFRCb29sIGJDb21tb247CgogIGludCBuUmVhbFR5 cGU7CgogIFByb2pJbmZvX3Qgc1JlYWxQcm9qOwp9IFVzZXJQcm9qSW5mb190OwojIDE5NiAiLi4v Li4vLi4vbGliL2NjbHByb2ouaCIKVEJvb2wgQ0NMUHJvalRlc3QoIHZvaWQgKTsKVEJvb2wgQ0NM VXNlclByb2pUZXN0KCB2b2lkICk7CgppbnQgR0NUUFNpbXBsZVRyYW5zZm9ybSAoIGNoYXIgKiwg ZG91YmxlLCBkb3VibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg KiwgZG91YmxlICosIGRvdWJsZSAqICk7CgppbnQgUENJMkdDVFAgKCBQcm9qSW5mb190ICogKTsK dm9pZCBHQ1RQMlBDSSAoIFByb2pJbmZvX3QgKiApOwoKaW50IEdlb3N5czJQcm9qSW5mbyAoIFBy b2pJbmZvX3QgKiwgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJs ZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSApOwppbnQgR2Vvc3lzMlByb2pJbmZvMiAoIFByb2pJ bmZvX3QgKiwgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSwg ZG91YmxlLCBkb3VibGUsIGRvdWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk b3VibGUsIGRvdWJsZSApOwoKaW50IEdDVFBUcmFuc2Zvcm0gKCBQcm9qSW5mb190ICosIGRvdWJs ZSwgZG91YmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9qSW5mb190ICosIGRv dWJsZSAqLCBkb3VibGUgKiApOwoKdm9pZCBJbml0UHJvakluZm8gKCBQcm9qSW5mb190ICosIGlu dCApOwpjaGFyICogUHJvakluZm8yUGFybXMgKCBQcm9qSW5mb190ICogKTsKaW50IFByb2pQYXJt czJJbmZvICggY2hhciAqLCBQcm9qSW5mb190ICogKTsKaW50IFByb2pJbmZvMlBSTUZpbGUgKCBQ cm9qSW5mb190ICogKTsKaW50IFByb2pQUk1GaWxlMkluZm8gKCBjaGFyICosIFByb2pJbmZvX3Qg KiApOwppbnQgR2Vvc3lzQ29tcGF0aWJsZSggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogKTsK aW50IFByb2pDb21wYXRpYmxlKCBjb25zdCBQcm9qSW5mb190ICosIGNvbnN0IFByb2pJbmZvX3Qg KiApOwppbnQgRGVjb2RlR2Vvc3lzKCBjb25zdCBjaGFyICosIGNoYXIgKiApOwppbnQgR2V0RWxs aXBzb2lkKCBjb25zdCBjaGFyICogKTsKaW50IGdldF9lbGwoIGNoYXIgKiwgZG91YmxlICosIGRv dWJsZSAqICk7CmNoYXIgZ2V0X3Byb2ooIGludCwgY2hhciAqLCBjaGFyICosIFByb2pJbmZvX3Qg KiwgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlLCBkb3VibGUsIGRv dWJsZSwgZG91YmxlICk7ClRCb29sIEdldEVhcnRoTW9kZWwoIGNvbnN0IGNoYXIgKiwgY2hhciAq ICk7ClRCb29sIEdldEVsbGlwc29pZERhdGEoIGNvbnN0IGNoYXIgKiwgaW50ICosIGRvdWJsZSAq LCBkb3VibGUgKiApOwpUQm9vbCBHZXRFbGxpcHNvaWRJbmZvKCBjb25zdCBjaGFyICosCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICosIGRvdWJsZSAqLCBkb3VibGUgKiwgY2hh ciAqKiApOwpjaGFyICogR2V0RWxsaXBzb2lkQ29kZSggZG91YmxlLCBkb3VibGUgKTsKVEJvb2wg R2V0RGF0dW1JbmZvICggY29uc3QgY2hhciAqLCBEYXR1bUluZm9fdCAqICk7ClRCb29sIEdldERh dHVtSW5mbzIgKCBjb25zdCBjaGFyICosIERhdHVtSW5mb190ICoqICk7ClRCb29sIExvbmdMYXRQ cm9qSW5mbyggY29uc3QgY2hhciAqLCBQcm9qSW5mb190ICosIFByb2pJbmZvX3QgKiApOwppbnQg R2Vvc3lzRGVzY3JpcHRpb24oIGludCwgY29uc3QgY2hhciAqLCBjaGFyICosIGNoYXIgKiosIGNo YXIgKiogKTsKVEJvb2wgSXNQcm9qZWN0YWJsZSggY29uc3QgY2hhciAqLCBjb25zdCBQcm9qSW5m b190ICogKTsKVEJvb2wgUmVxdWlyZXNQcm9qSW5mbyggaW50ICk7ClRCb29sIElzQ29uZm9ybWFs KCBjb25zdCBjaGFyICogKTsKaW50IFByb2pEZWZhdWx0cyggUHJvakluZm9fdCAqLCBpbnQgKiwg aW50ICosIGNoYXIgKiwgUHJvakluZm9fdCAqICk7CmNoYXIgKiogUHJvalJlcG9ydCggUHJvaklu Zm9fdCAqICk7ClRCb29sIFByb2pOb3JtYWxpemUoIFByb2pJbmZvX3QgKiApOwpVc2VyUHJvaklu Zm9fdCAqRmluZFVzZXJQcm9qZWN0aW9uKCBjb25zdCBjaGFyICogKTsKVEJvb2wgR2V0VXNlclBy b2plY3Rpb25OYW1lKCBQcm9qSW5mb190ICosIGNoYXIgKiApOwp2b2lkIERlZmluZVVzZXJQcm9q ZWN0aW9uKCBVc2VyUHJvakluZm9fdCAqICk7ClVzZXJQcm9qSW5mb190ICoqR2V0VXNlclByb2pl Y3Rpb25zKHZvaWQpOwoKdm9pZCBVVE1ab25lIChkb3VibGUsIGRvdWJsZSwgaW50ICosIGNoYXIg Kik7Cgp2b2lkIERlY1RvRE1TIChkb3VibGUsIGludCwgY2hhciAqKTsKaW50IERNU1RvRGVjIChj b25zdCBjaGFyICosIGRvdWJsZSAqKTsKdm9pZCBEZWNpbWFsVG9EZWdyZWVzKCBkb3VibGUsIGNo YXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICosIGludCAqLCBp bnQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICosIGludCwgY2hh ciAqICk7CgpUQm9vbCBSZWFkQXJjSW5mb1Byb2plY3Rpb25GaWxlKCBjaGFyICoqLCBQcm9qSW5m b190ICogKTsKY2hhciAqKiBXcml0ZUFyY0luZm9Qcm9qZWN0aW9uRmlsZSggUHJvakluZm9fdCAq ICk7CmludCBVU0dTX0FyY0luZm9fU1BDU1pvbmUoIFRCb29sLCBpbnQgKTsKCgoKCgpUQm9vbCBJ bnZlcnNlQWZmaW5lKCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91 YmxlLAogICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqLCBkb3VibGUgKiwgZG91YmxlICosIGRv dWJsZSAqLCBkb3VibGUgKiwgZG91YmxlICopOwp2b2lkIEFwcGx5QWZmaW5lKCBkb3VibGUsIGRv dWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50LCBkb3VibGUgKiwgZG91YmxlICosIGludCApOwpkb3VibGUgQWZmaW5l WFNpemUoIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUgKTsK ZG91YmxlIEFmZmluZVlTaXplKCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJs ZSwgZG91YmxlICk7CmRvdWJsZSBBZmZpbmVSb3RhdGlvbiggZG91YmxlLGRvdWJsZSxkb3VibGUs ZG91YmxlLGRvdWJsZSxkb3VibGUgKTsKCgoKCgppbnQgRGF0dW1TaGlmdCAoIGNoYXIgKiwgZG91 YmxlLCBkb3VibGUsIGRvdWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg KiwgZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUgKiApOwoKaW50IEdvb2RlVHJhbnNmb3JtKCBQ cm9qSW5mb190ICosIGludCwgZG91YmxlLCBkb3VibGUsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQcm9qSW5mb190ICosIGRvdWJsZSAqLCBkb3VibGUgKiApOwoKaW50IENhc3Np bmlUcmFuc2Zvcm0oIFByb2pJbmZvX3QgKiwgaW50LCBkb3VibGUsIGRvdWJsZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvakluZm9fdCAqLCBkb3VibGUgKiwgZG91Ymxl ICogKTsKCmludCBSU09UcmFuc2Zvcm0oIFByb2pJbmZvX3QgKiwgaW50LCBkb3VibGUsIGRvdWJs ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9qSW5mb190ICosIGRvdWJsZSAq LCBkb3VibGUgKiApOwoKaW50IEtyb3Zha1RyYW5zZm9ybSggUHJvakluZm9fdCAqLCBpbnQsIGRv dWJsZSwgZG91YmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2pJbmZv X3QgKiwgZG91YmxlICosIGRvdWJsZSAqICk7CgppbnQgU0dET1RyYW5zZm9ybSggUHJvakluZm9f dCAqLCBpbnQsIGRvdWJsZSwgZG91YmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQcm9qSW5mb190ICosIGRvdWJsZSAqLCBkb3VibGUgKiApOwoKaW50IExCU0dUcmFuc2Zvcm0o IFByb2pJbmZvX3QgKiwgaW50LCBkb3VibGUsIGRvdWJsZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHJvakluZm9fdCAqLCBkb3VibGUgKiwgZG91YmxlICogKTsKCmludCBJU0lO VHJhbnNmb3JtKCBQcm9qSW5mb190ICosIGludCwgZG91YmxlLCBkb3VibGUsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFByb2pJbmZvX3QgKiwgZG91YmxlICosIGRvdWJsZSAqICk7 CgpUQm9vbCBHZW9jb2RlZFRvTUdSUyggUHJvakluZm9fdCAqLCBkb3VibGUsIGRvdWJsZSwgaW50 LCBjaGFyICogKTsKVEJvb2wgTUdSU1RvR2VvY29kZWQoIGNvbnN0IGNoYXIgKiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFByb2pJbmZvX3QgKiwgZG91YmxlICosIGRvdWJsZSAq ICk7CnZvaWQgRVBTR3RvUHJvakluZm8oIGNoYXIgKiwgUHJvakluZm9fdCAqKTsKIyAzMTAgIi4u Ly4uLy4uL2xpYi9jY2xwcm9qLmgiCnZvaWQgcHJqX3NpbmNvcyAoIGRvdWJsZSwgZG91YmxlICos IGRvdWJsZSAqICk7CmRvdWJsZSBhc2lueiAoIGRvdWJsZSApOwpkb3VibGUgbXNmbnogKCBkb3Vi bGUsIGRvdWJsZSwgZG91YmxlICk7CmRvdWJsZSBxc2ZueiAoIGRvdWJsZSwgZG91YmxlLCBkb3Vi bGUgKTsKZG91YmxlIHBoaTF6ICggZG91YmxlLCBkb3VibGUsIGxvbmcgKiApOwpkb3VibGUgcGhp MnogKCBkb3VibGUsIGRvdWJsZSwgbG9uZyAqICk7CmRvdWJsZSBwaGkzeiAoIGRvdWJsZSwgZG91 YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBsb25nICogKTsKZG91YmxlIHBoaTR6ICggZG91 YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgZG91YmxlLCBkb3VibGUsIGRvdWJsZSAqLCBkb3VibGUgKiApOwpkb3VibGUgcGFrY3og KCBkb3VibGUgKTsKZG91YmxlIHBha3IyZG0gKCBkb3VibGUgKTsKZG91YmxlIHRzZm56ICggZG91 YmxlLCBkb3VibGUsIGRvdWJsZSApOwppbnQgcHJqX3NpZ24gKCBkb3VibGUgKTsKZG91YmxlIGFk anVzdF9sb24gKCBkb3VibGUgKTsKZG91YmxlIGUwZm4gKCBkb3VibGUgKTsKZG91YmxlIGUxZm4g KCBkb3VibGUgKTsKZG91YmxlIGUyZm4gKCBkb3VibGUgKTsKZG91YmxlIGUzZm4gKCBkb3VibGUg KTsKZG91YmxlIGU0Zm4gKCBkb3VibGUgKTsKZG91YmxlIG1sZm4gKCBkb3VibGUsIGRvdWJsZSwg ZG91YmxlLCBkb3VibGUsIGRvdWJsZSApOwppbnQgY2FsY191dG1fem9uZSAoIGRvdWJsZSApOwoj IDM1NiAiLi4vLi4vLi4vbGliL2NjbHByb2ouaCIKVEJvb2wgQ0NMVHJhbnNmb3JtVGVzdCggdm9p ZCApOwojIDM2NiAiLi4vLi4vLi4vbGliL2NjbHByb2ouaCIKdHlwZWRlZiBzdHJ1Y3QgewogICAg aW50IHBieDsKICAgIGludCBwYnk7CiAgICBkb3VibGUgcmJ4WzIxXTsKICAgIGRvdWJsZSByYnlb MjFdOwogICAgZG91YmxlIHJhYnhbM107CiAgICBkb3VibGUgcmFieVszXTsKfSBHRU9JbmZvX3Q7 CgoKCgp2b2lkIEdDUExpc3QgKGludCwgaW50ICosIGludCAqLCBkb3VibGUgKiwgZG91YmxlICos IGRvdWJsZSAqLAogICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqLCBpbnQs IGRvdWJsZSAqLCBkb3VibGUgKiwgZG91YmxlICogKTsKdm9pZCBHQ1BSb290TWVhblNxICggR0VP SW5mb190ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqLCBkb3VibGUg KiwgZG91YmxlICosIGRvdWJsZSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQs IGRvdWJsZSAqLCBkb3VibGUgKik7CnZvaWQgR0NQVHJhbnNmb3JtICggR0VPSW5mb190ICosIGRv dWJsZSwgZG91YmxlLCBkb3VibGUgKiwgZG91YmxlICopOwp2b2lkIEdDUFJlZ3Jlc3Npb24gKCBH RU9JbmZvX3QgKiwgZG91YmxlICosIGRvdWJsZSAqLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkb3VibGUgKiwgZG91YmxlICosIGludCwgaW50ICosCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRvdWJsZSAqLCBkb3VibGUgKik7CnZvaWQgR0NQUmVncmVzc2lvbjIgKCBHRU9J bmZvX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqLCBkb3VibGUgKiwg ZG91YmxlICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwgZG91YmxlICos IGRvdWJsZSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQsIGludCAqLCBpbnQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqLCBkb3VibGUgKik7CnZvaWQg R0NQUmVncmVzc2lvbjJXaXRoV29yc3RQb2ludCAoIEdFT0luZm9fdCAqLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjaGFyICosIGRvdWJsZSAqLCBkb3VibGUgKiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2hhciAqLCBkb3VibGUgKiwgZG91YmxlICosCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCwgaW50ICosIGludCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZG91YmxlICosIGRvdWJsZSAqLCBpbnQgKiwgZG91YmxlICosIGRvdWJsZSAqKTsK CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgaW50IFJhZGlhbFRlcm1Db3VudDsKICAgIGRvdWJs ZSBDUElYWzQqMjU2XTsKICAgIGRvdWJsZSBDUElZWzQqMjU2XTsKICAgIGRvdWJsZSBDb2VmZlhb NCoyNTYgKzNdOwogICAgZG91YmxlIENvZWZmWVs0KjI1NiArM107CiAgICBkb3VibGUgQWZmaW5l WFszXTsKICAgIGRvdWJsZSBBZmZpbmVZWzNdOwogICAgaW50IFJhbmtPZkE7CiAgICBkb3VibGUg Q29uZE51bU9mQTsKfSBUUFNJbmZvX3Q7Cgp2b2lkIFRQU0NhbGN1bGF0ZSAoVFBTSW5mb190ICp0 cHMsIGludCBuY3AsIGRvdWJsZSAqcml4LCBkb3VibGUgKnJpeSwKICAgICAgICAgICAgICAgICAg IGRvdWJsZSAqcm91LCBkb3VibGUgKnJvdik7Cgp2b2lkIFRQU1RyYW5zZm9ybSAoVFBTSW5mb190 ICp0cHMsIGRvdWJsZSByaXgsIGRvdWJsZSByaXksCiAgICAgICAgICAgICAgICAgICBkb3VibGUg KnJvdSwgZG91YmxlICpyb3YpOwoKdm9pZCBUUFNSTVNFcnJvciAoVFBTSW5mb190ICp0cHMsIGlu dCBuY2hrcCwKICAgICAgICAgICAgICAgICAgZG91YmxlICpjaGtwaXgsIGRvdWJsZSAqY2hrcGl5 LAogICAgICAgICAgICAgICAgICBkb3VibGUgKmNoa3BvdSwgZG91YmxlICpjaGtwb3YsCiAgICAg ICAgICAgICAgICAgIGRvdWJsZSAqYXZ4LCBkb3VibGUgKmF2eSwgZG91YmxlICpybXN4LCBkb3Vi bGUgKnJtc3kpOwoKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIGRvdWJsZSBkZlhPZmYsIGRmWU9m ZiwgZGZYU2l6ZSwgZGZZU2l6ZTsKICAgIFRCb29sIGJSZXByb2plY3Q7CiAgICBQcm9qSW5mb190 IHNWZWNQcm9qOwogICAgUHJvakluZm9fdCBzSW1nUHJvajsKfSBWVHJhbkluZm87CgpUQm9vbCBW VHJhblNldHVwKCBQcm9qSW5mb190ICogcHNJbWdQcm9qLCBQcm9qSW5mb190ICogcHNWZWNQcm9q LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVlRyYW5JbmZvICogcHNWVHJhbiApOwoKdm9p ZCBWVHJhblRvUGl4ZWwoIHZvaWQgKiwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSAqLCBkb3VibGUg KiApOwp2b2lkIFZUcmFuRnJvbVBpeGVsKCB2b2lkICosIGRvdWJsZSwgZG91YmxlLCBkb3VibGUg KiwgZG91YmxlICogKTsKCgoKCnZvaWQgZGRjb21wYyhpbnQsIGRvdWJsZSAqLCBpbnQgKiwgaW50 ICopOwp2b2lkIGRzb2x2YyhpbnQsIGRvdWJsZSAqLCBpbnQgKiwgZG91YmxlICopOwp2b2lkIGRx cmxzYyhkb3VibGUgKiwgaW50LCBpbnQsIGRvdWJsZSwgaW50ICosIGRvdWJsZSAqLCBkb3VibGUg KiwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqLCBpbnQgKiwgZG91YmxlICosIGRvdWJs ZSAqLCBpbnQsIGludCAqKTsKIyA0NjEgIi4uLy4uLy4uL2xpYi9jY2xwcm9qLmgiCnR5cGVkZWYg c3RydWN0IHsKICBpbnQgblR5cGU7CiAgVEJvb2wgYlZhbGlkOwoKICB1bmlvbiB7CiAgICBHRU9J bmZvX3QgKnBzR0VPOwogICAgVFBTSW5mb190ICpwc1RQUzsKCiAgICB2b2lkICpwc1JUQ1M7CiAg ICB2b2lkICpwc1NSSVQ7CgogIH0gdTsKfSBUUk5JbmZvX3Q7CgoKVFJOSW5mb190ICogVFJOQWxs b2NhdGUoIGludCApOwp2b2lkIFRSTkRlYWxsb2NhdGUoIFRSTkluZm9fdCAqICk7CnZvaWQgVFJO Q2FsY3VsYXRlKCBUUk5JbmZvX3QgKiwgaW50LCBkb3VibGUgKiwgZG91YmxlICosCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqLCBkb3VibGUgKiwgdm9pZCAqICk7CnZvaWQg VFJOQ2FsY3VsYXRlM0QoIFRSTkluZm9fdCAqLCBpbnQsIGRvdWJsZSAqLCBkb3VibGUgKiwgZG91 YmxlICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlICosIGRvdWJsZSAq LCBkb3VibGUgKiwgdm9pZCAqICk7ClRCb29sIFRSTlRyYW5zZm9ybSggVFJOSW5mb190ICosCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSwgZG91YmxlLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICopOwpUQm9vbCBUUk5UcmFuc2Zvcm0z RCggVFJOSW5mb190ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlLCBk b3VibGUsIGRvdWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwg ZG91YmxlICosIGRvdWJsZSAqKTsKdm9pZCBUUk5STVNFcnJvciggVFJOSW5mb190ICosIGludCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAq LCBkb3VibGUgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91Ymxl ICogKTsKCnZvaWQgVFJOUk1TRXJyb3IzRCggVFJOSW5mb190ICosIGludCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqLCBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAq LCBkb3VibGUgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqLCBkb3Vi bGUgKiApOwoKZG91YmxlIFBBSzJQQ0koIGRvdWJsZSBkZWcsIGludCBmdW5jdGlvbiApOwoKfQoj IDM0NyAiLi4vLi4vLi4vbGliL2dkYi5oIiAyCgoKZXh0ZXJuICJDIiB7CiMgMzg1ICIuLi8uLi8u Li9saWIvZ2RiLmgiCnR5cGVkZWYgaW50MzIgR0RCU2hhcGVJZDsKIyAzOTQgIi4uLy4uLy4uL2xp Yi9nZGIuaCIKdHlwZWRlZiBlbnVtIEdEQkxheWVyVHlwZV9lCnsKICAgIEdEQkxVbmtub3duPTAs CiAgICBHREJMVG9wb0FyYywKICAgIEdEQkxUb3BvQXJlYSwKICAgIEdEQkxUb3BvTm9kZSwKICAg IEdEQkxXaG9sZVBvbHlnb24sCiAgICBHREJMUG9pbnQsCiAgICBHREJMTGluZSwKICAgIEdEQkxU YWJsZQp9IEdEQkxheWVyVHlwZTsKCgoKCgpzdHJ1Y3QgR0RCTGF5ZXJfdDsKCgp0eXBlZGVmIHN0 cnVjdCB7CgogIGNoYXIgVW5pdHNbMjBdOwoKCiAgaW50IE5TdHJ1Y3R1cmU7CiAgaW50IE5WZXJ0 ZXg7CiAgZG91YmxlIFhTdGFydDsKICBkb3VibGUgWVN0YXJ0OwogIGRvdWJsZSBYRW5kOwogIGRv dWJsZSBZRW5kOwogIGRvdWJsZSBzY2FsZTsKCgogIEZJTEUgKmZwOwogIGludCBzZWc7CiAgaW50 IGxhc3Rfc3RydWN0LAogICAgICAgICAgICBuZXh0X3N0cnVjdCwKCiAgICAgICAgICAgIGJ1ZmZl clsxMjhdOwogIGxvbmcgbGFzdF9ibG9jazsKCiAgICBzdHJ1Y3QgR0RCTGF5ZXJfdCAqaExheWVy Owp9IFZJbmZvX3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogIGludCBhY2Nlc3M7CiAgRklMRSAq ZnA7CiAgaW50IHNlZ251bTsKICBGSUxFICp0ZXh0X2ZwOwoKCiAgY2hhciAqY2JfYnVmZmVyOwog IGludCBjaGFyX29mZnNldDsKICBpbnQgc2VnX29mZnNldDsKfSBUSW5mb190OwojIDQ2NiAiLi4v Li4vLi4vbGliL2dkYi5oIgp0eXBlZGVmIHN0cnVjdCB7CiAgICBpbnQgU2xhbnRSYW5nZUZzdFBp eGVsOwogICAgaW50IFNsYW50UmFuZ2VMYXN0UGl4ZWw7CiAgICBmbG9hdCBGc3RQaXhlbExhdDsK ICAgIGZsb2F0IE1pZFBpeGVsTGF0OwogICAgZmxvYXQgTHN0UGl4ZWxMYXQ7CiAgICBmbG9hdCBG c3RQaXhlbExvbmc7CiAgICBmbG9hdCBNaWRQaXhlbExvbmc7CiAgICBmbG9hdCBMc3RQaXhlbExv bmc7Cn0gQW5jaWxsYXJ5RGF0YV90OwoKdHlwZWRlZiBzdHJ1Y3QKewogICAgY2hhciBJZGVudGlm aWVyWzE3XTsKICAgIGNoYXIgRmFjaWxpdHlbMTddOwogICAgY2hhciBFbGxpcHNvaWRbMTddOwog ICAgZG91YmxlIEVxdWF0b3JpYWxSYWRpdXM7CiAgICBkb3VibGUgUG9sYXJSYWRpdXM7CiAgICBk b3VibGUgSW5jaWRlbmNlQW5nbGU7CiAgICBkb3VibGUgUGl4ZWxTcGFjaW5nOwogICAgZG91Ymxl IExpbmVTcGFjaW5nOwogICAgZG91YmxlIENsb2NrQW5nbGU7CgogICAgaW50IE51bWJlckJsb2Nr RGF0YTsKICAgIGludDMyIE51bWJlckRhdGE7CgogICAgQW5jaWxsYXJ5RGF0YV90ICpMaW5lOwp9 IFJhZGFyU2VnX3Q7CiMgNTAyICIuLi8uLi8uLi9saWIvZ2RiLmgiCnR5cGVkZWYgc3RydWN0CnsK ICAgIGRvdWJsZSBDaGFuZ2VJbkF0dGl0dWRlOwogICAgZG91YmxlIENoYW5nZUVhcnRoU2F0ZWxs aXRlRGlzdDsKCn0gQXR0aXR1ZGVMaW5lX3Q7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgICBkb3VibGUg Um9sbDsKICAgIGRvdWJsZSBQaXRjaDsKICAgIGRvdWJsZSBZYXc7CiAgICBpbnQzMiBOdW1iZXJP ZkxpbmU7CgogICAgaW50IE51bWJlckJsb2NrRGF0YTsKICAgIEF0dGl0dWRlTGluZV90ICpMaW5l OwoKfSBBdHRpdHVkZVNlZ190OwoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewoKICAgIGludCBuU2Nh bkxpbmVOdW07CiAgICBpbnQgblN0YXJ0U2NhblRpbWVHTVRNc2VjOwogICAgdW5zaWduZWQgY2hh ciBhYnlTY2FuTGluZVF1YWxpdHlbMTBdOwogICAgdW5zaWduZWQgY2hhciBhYWJ5QmFkQmFuZElu ZGljYXRvcnNbNV1bMl07CiAgICB1bnNpZ25lZCBjaGFyIGFieVNhdGVsbGl0ZVRpbWVDb2RlWzhd OwoKCiAgICBpbnQgYW5UYXJnZXRUZW1wRGF0YVszXTsKICAgIGludCBhblRhcmdldFNjYW5EYXRh WzNdOwogICAgaW50IGFuU3BhY2VTY2FuRGF0YVs1XTsKCn0gQXZocnJMaW5lX3Q7Cgp0eXBlZGVm IHN0cnVjdAp7CgogICAgY2hhciBzekltYWdlRm9ybWF0WzUwXTsKICAgIGludCBuSW1hZ2VYU2l6 ZTsKICAgIGludCBuSW1hZ2VZU2l6ZTsKICAgIFRCb29sIGJJc0FzY2VuZGluZzsKICAgIFRCb29s IGJJc0ltYWdlUm90YXRlZDsKCgogICAgY2hhciBzek9yYml0TnVtYmVyWzE3XTsKICAgIGNoYXIg c3pBc2NlbmREZXNjZW5kTm9kZUZsYWdbMTddOwogICAgY2hhciBzekVwb2NoWWVhckFuZERheVsx N107CiAgICBjaGFyIHN6RXBvY2hUaW1lV2l0aGluRGF5WzE3XTsKICAgIGNoYXIgc3pUaW1lRGlm ZlN0YXRpb25TYXRlbGxpdGVNc2VjWzE3XTsKICAgIGNoYXIgc3pBY3R1YWxTZW5zb3JTY2FuUmF0 ZVsxN107CiAgICBjaGFyIHN6SWRlbnRPZk9yYml0SW5mb1NvdXJjZVsxN107CiAgICBjaGFyIHN6 SW50ZXJuYXRpb25hbERlc2lnbmF0b3JbMTddOwogICAgY2hhciBzek9yYml0TnVtQXRFcG9jaFsx N107CiAgICBjaGFyIHN6SnVsaWFuRGF5QXNjZW5kTm9kZVsxN107CiAgICBjaGFyIHN6RXBvY2hZ ZWFyWzE3XTsKICAgIGNoYXIgc3pFcG9jaE1vbnRoWzE3XTsKICAgIGNoYXIgc3pFcG9jaERheVsx N107CiAgICBjaGFyIHN6RXBvY2hIb3VyWzE3XTsKICAgIGNoYXIgc3pFcG9jaE1pbnV0ZVsxN107 CiAgICBjaGFyIHN6RXBvY2hTZWNvbmRbMTddOwogICAgY2hhciBzelBvaW50T2ZBcmllc0RlZ3Jl ZXNbMTddOwogICAgY2hhciBzekFub21hbGlzdGljUGVyaW9kWzE3XTsKICAgIGNoYXIgc3pOb2Rh bFBlcmlvZFsxN107CiAgICBjaGFyIHN6RWNjZW50cmljaXR5WzE3XTsKICAgIGNoYXIgc3pBcmd1 bWVudE9mUGVyaWdlZVsxN107CiAgICBjaGFyIHN6UkFBTlsxN107CiAgICBjaGFyIHN6SW5jbGlu YXRpb25bMTddOwogICAgY2hhciBzek1lYW5Bbm9tYWx5WzE3XTsKICAgIGNoYXIgc3pTZW1pTWFq b3JBeGlzWzE3XTsKCgoKCiAgICBpbnQgblJlY29yZFNpemU7CiAgICBpbnQgbkJsb2NrU2l6ZTsK ICAgIGludCBuTnVtUmVjb3Jkc1BlckJsb2NrOwogICAgaW50IG5OdW1CbG9ja3M7CiAgICBpbnQg bk51bVNjYW5saW5lUmVjb3JkczsKCgogICAgQXZocnJMaW5lX3QgKkxpbmU7Cgp9IEF2aHJyU2Vn X3Q7CgoKCgoKdHlwZWRlZiB1bmlvbgp7CiAgIEF0dGl0dWRlU2VnX3QgKkF0dGl0dWRlU2VnOwog ICBSYWRhclNlZ190ICpSYWRhclNlZzsKICAgQXZocnJTZWdfdCAqQXZocnJTZWc7Cgp9IE9yYml0 RGF0YV90OwoKdHlwZWRlZiBlbnVtIHsgT3JiTm9uZSwgT3JiQXR0aXR1ZGUsIE9yYkxhdExvbmcs IE9yYkF2aHJyIH0gT3JiaXRUeXBlOwp0eXBlZGVmIHN0cnVjdAp7CiAgICBjaGFyIFNhdGVsbGl0 ZURlc2NbMzNdOwogICAgY2hhciBTY2VuZUlEWzMzXTsKCiAgICBjaGFyIFNhdGVsbGl0ZVNlbnNv clsxN107CiAgICBjaGFyIFNlbnNvck5vWzNdOwogICAgY2hhciBEYXRlSW1hZ2VUYWtlblsyM107 CiAgICBUQm9vbCBTdXBTZWdFeGlzdDsKICAgIGRvdWJsZSBGaWVsZE9mVmlldzsKICAgIGRvdWJs ZSBWaWV3QW5nbGU7CiAgICBkb3VibGUgTnVtQ29sQ2VudHJlOwogICAgZG91YmxlIFJhZGlhbFNw ZWVkOwogICAgZG91YmxlIEVjY2VudHJpY2l0eTsKICAgIGRvdWJsZSBIZWlnaHQ7CiAgICBkb3Vi bGUgSW5jbGluYXRpb247CiAgICBkb3VibGUgVGltZUludGVydmFsOwogICAgZG91YmxlIE51bUxp bmVDZW50cmU7CiAgICBkb3VibGUgTG9uZ0NlbnRyZTsKICAgIGRvdWJsZSBBbmd1bGFyU3BkOwog ICAgZG91YmxlIEFzY05vZGVMb25nOwogICAgZG91YmxlIEFyZ1BlcmlnZWU7CiAgICBkb3VibGUg TGF0Q2VudHJlOwogICAgZG91YmxlIEVhcnRoU2F0ZWxsaXRlRGlzdDsKICAgIGRvdWJsZSBOb21p bmFsUGl0Y2g7CiAgICBkb3VibGUgVGltZUF0Q2VudHJlOwogICAgZG91YmxlIFNhdGVsbGl0ZUFy ZzsKCiAgICBkb3VibGUgWENlbnRyZTsKICAgIGRvdWJsZSBZQ2VudHJlOwogICAgZG91YmxlIFV0 bVlDZW50cmU7CiAgICBkb3VibGUgVXRtWENlbnRyZTsKICAgIGRvdWJsZSBQaXhlbFJlczsKICAg IGRvdWJsZSBMaW5lUmVzOwogICAgVEJvb2wgQ29ybmVyQXZhaWw7CiAgICBjaGFyIE1hcFVuaXRb MTddOwogICAgZG91YmxlIFhVTDsKICAgIGRvdWJsZSBZVUw7CiAgICBkb3VibGUgWFVSOwogICAg ZG91YmxlIFlVUjsKICAgIGRvdWJsZSBYTFI7CiAgICBkb3VibGUgWUxSOwogICAgZG91YmxlIFhM TDsKICAgIGRvdWJsZSBZTEw7CiAgICBkb3VibGUgVXRtWVVMOwogICAgZG91YmxlIFV0bVhVTDsK ICAgIGRvdWJsZSBVdG1ZVVI7CiAgICBkb3VibGUgVXRtWFVSOwogICAgZG91YmxlIFV0bVlMUjsK ICAgIGRvdWJsZSBVdG1YTFI7CiAgICBkb3VibGUgVXRtWUxMOwogICAgZG91YmxlIFV0bVhMTDsK CiAgICBkb3VibGUgTGF0Q2VudHJlRGVnOwogICAgZG91YmxlIExvbmdDZW50cmVEZWc7CiAgICBk b3VibGUgTGF0VUw7CiAgICBkb3VibGUgTG9uZ1VMOwogICAgZG91YmxlIExhdFVSOwogICAgZG91 YmxlIExvbmdVUjsKICAgIGRvdWJsZSBMYXRMUjsKICAgIGRvdWJsZSBMb25nTFI7CiAgICBkb3Vi bGUgTGF0TEw7CiAgICBkb3VibGUgTG9uZ0xMOwoKICAgIGRvdWJsZSBTUENvZWZmMUJbMzldOwog ICAgaW50IFNQQ29lZmZTZ1s0XTsKCiAgICBpbnQgSW1hZ2VSZWNvcmRMZW5ndGg7CiAgICBpbnQg TnVtYmVySW1hZ2VMaW5lOwogICAgaW50IE51bWJlckJ5dGVQZXJQaXhlbDsKICAgIGludCBOdW1i ZXJTYW1wbGVQZXJMaW5lOwogICAgaW50IE51bWJlclByZWZpeEJ5dGVzOwogICAgaW50IE51bWJl clN1ZmZpeEJ5dGVzOwogICAgaW50IFNQTkNvZWZmOwoKICAgIE9yYml0VHlwZSBUeXBlOwogICAg T3JiaXREYXRhX3QgKk9yYml0TGluZTsKCn0gRXBoZW1lcmlzU2VnX3Q7CiMgNjk4ICIuLi8uLi8u Li9saWIvZ2RiLmgiCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBkb3VibGUgTjB4MjsKICAgICAg ICBkb3VibGUgYWE7CiAgICAgICAgZG91YmxlIFNtQUxQSEE7CiAgICAgICAgZG91YmxlIGJiOwog ICAgICAgIGRvdWJsZSBDMDsKICAgICAgICBkb3VibGUgY2M7CiAgICAgICAgZG91YmxlIENPU19L SEk7CiAgICAgICAgZG91YmxlIERFTFRBX0dBTU1BOwogICAgICAgIGRvdWJsZSBHQU1NQTsKICAg ICAgICBkb3VibGUgS18xOwogICAgICAgIGRvdWJsZSBMMDsKICAgICAgICBkb3VibGUgUDsKICAg ICAgICBkb3VibGUgUTsKICAgICAgICBkb3VibGUgVEFVOwogICAgICAgIGRvdWJsZSBUSEVUQTsK ICAgICAgICBkb3VibGUgVEhFVEFfU0VDOwogICAgICAgIGRvdWJsZSBYMDsKICAgICAgICBkb3Vi bGUgWTA7CiAgICAgICAgZG91YmxlIGRlbGg7CiAgICAgICAgZG91YmxlIENPRUZfWTI7CiAgICAg ICAgaW50IG5HQ1BDb3VudDsKICAgICAgICBpbnQgbkVwaGVtZXJpc1NlZ05vOwogICAgICAgIGlu dCBuQXR0aXR1ZGVGbGFnOwogICAgICAgIGNoYXIgR0NQVW5pdFsxN107CiAgICAgICAgY2hhciBH Q1BNZWFuSHRGbGFnOwogICAgICAgIGRvdWJsZSBkZkdDUE1lYW5IdDsKICAgICAgICBkb3VibGUg ZGZHQ1BNaW5IdDsKICAgICAgICBkb3VibGUgZGZHQ1BNYXhIdDsKICAgICAgICBpbnQgbkdDUElk c1syNTZdOwogICAgICAgIGludCBuUGl4ZWxbMjU2XSxuTGluZVsyNTZdOwogICAgICAgIGRvdWJs ZSBkZkVsZXZbMjU2XTsKICAgICAgICBkb3VibGUgKlFkZWx0YXI7CiAgICAgICAgZG91YmxlICpI ZGVsdGF0OwogICAgICAgIGNoYXIgU2Vuc29yWzE2XTsKICAgICAgICBpbnQgblNlbnNvcjsKICAg ICAgICBFcGhlbWVyaXNTZWdfdCAqT3JiaXRQdHI7CiAgICAgICAgUHJvakluZm9fdCAqc0dlb1Ry YW5zZm9ybTsKICAgICAgICBUQm9vbCBSYXdUb0dlbzsKfSBTUklUSW5mb190OwoKCgoKdHlwZWRl ZiBzdHJ1Y3QgewogICAgVEJvb2wgYk5JVEZSUEM7CiAgICBpbnQgbkNvZWZmOwogICAgaW50IG5Q aXhlbHMsIG5MaW5lczsKICAgIGRvdWJsZSAqcGFkZlBpeGVsTnVtOwogICAgZG91YmxlICpwYWRm UGl4ZWxEZW47CiAgICBkb3VibGUgKnBhZGZMaW5lTnVtOwogICAgZG91YmxlICpwYWRmTGluZURl bjsKICAgIGRvdWJsZSBkZlhPZmYsIGRmWFNjYWxlOwogICAgZG91YmxlIGRmWU9mZiwgZGZZU2Nh bGU7CiAgICBkb3VibGUgZGZaT2ZmLCBkZlpTY2FsZTsKICAgIGRvdWJsZSBkZlBPZmYsIGRmUFNj YWxlOwogICAgZG91YmxlIGRmTE9mZiwgZGZMU2NhbGU7CiAgICBkb3VibGUgZGZYQWRqdXN0WzNd OwogICAgZG91YmxlIGRmWUFkanVzdFszXTsKICAgIGNoYXIgKm1hcHVuaXQ7CiAgICBQcm9qSW5m b190ICpzUHJvamVjdGlvbjsKfSBSRkluZm9fdDsKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIGlu dCBuUGl4ZWxzOwogICAgaW50IG5MaW5lczsKICAgIGRvdWJsZSBkZmZvY2FsOwogICAgZG91Ymxl IGFkZlhZWlszXTsKICAgIGRvdWJsZSBhZGZPUEtbM107CiAgICBkb3VibGUgYWRmeDNkWzNdOwog ICAgZG91YmxlIGFkZnkzZFszXTsKICAgIGRvdWJsZSBhZGZ6M2RbM107CiAgICBkb3VibGUgYWRm cGl4Mm1tWzRdOwogICAgZG91YmxlIGFkZmxpbjJtbVs0XTsKICAgIGRvdWJsZSBhZGZtbTJwaXhb NF07CiAgICBkb3VibGUgYWRmbW0ybGluWzRdOwogICAgZG91YmxlIGFkZlByb2ZmWzJdOwogICAg ZG91YmxlIGFkZlJhZGlzdFs4XTsKICAgIGRvdWJsZSBhZGZEZWNlbnRbNF07CiAgICBkb3VibGUg ZGZSYWRpdXM7CiAgICBkb3VibGUgZGZyZmY7CiAgICBkb3VibGUgZGZHQ1BNaW5IdDsKICAgIGRv dWJsZSBkZkdDUE1heEh0OwogICAgVEJvb2wgYlByaW5PZmY7CiAgICBUQm9vbCBiRGlzdG9ydDsK ICAgIFRCb29sIGJEZWNlbnRlcjsKICAgIFRCb29sIGJSYWRpdXM7CiAgICBjaGFyICp1dG11bml0 OwogICAgY2hhciAqbWFwdW5pdDsKICAgIFByb2pJbmZvX3QgKnNQcm9qZWN0aW9uOwp9IEFQSW5m b190OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgRklMRSAqZnBfaW47CiAgICBGSUxFICpmcF9v dXQ7CgogICAgY2hhciAqcHN6RmlsZU9wdGlvbnM7CgogICAgY2hhciBzekZpbGVUeXBlWzE2XTsK CiAgICBpbnQgKnBhbklXOwoKICAgIGludCAqYXBhbklDWzRdOwogICAgaW50IHBhbkNvdW50SUNb NF07CgogICAgaW50ICpwYW5HRU87CiAgICBpbnQgbkNvdW50R0VPOwoKICAgIGludCAqcGFuTFVU OwogICAgaW50IG5Db3VudExVVDsKCiAgICBpbnQgKnBhbkJJVDsKICAgIGludCBuQ291bnRCSVQ7 CgogICAgaW50ICpwYW5WRUM7CiAgICBpbnQgbkNvdW50VkVDOwoKICAgIGludCAqcGFuT1JCOwog ICAgaW50IG5Db3VudE9SQjsKCiAgICBpbnQgKnBhblNJRzsKICAgIGludCBuQ291bnRTSUc7Cgog ICAgaW50ICpwYW5URVg7CiAgICBpbnQgbkNvdW50VEVYOwoKICAgIGludCAqcGFuUENUOwogICAg aW50IG5Db3VudFBDVDsKCiAgICBpbnQgKnBhbkJJTjsKICAgIGludCBuQ291bnRCSU47CgogICAg aW50ICpwYW5HQ1A7CiAgICBpbnQgbkNvdW50R0NQOwogICAgaW50IG5PdXRwdXRGb3JtYXRUeXBl OwogICAgVEJvb2wgYkNsaXBWZWN0b3JzOwogICAgVEJvb2wgYkNsaXBHQ1BzOwoKfSBGaWxlVHJh bnNmZXJfdDsKCgoKCgp2b2lkIENsZWFyRmlsZVRyYW5zZmVyU3RydWN0KEZpbGVUcmFuc2Zlcl90 ICpwc0ZUKTsKCnZvaWQgQWxsb2NhdGVDaGFubmVsTGlzdChpbnQgKnBhbkNvdW50SUMsaW50ICph cGFuSUNbNF0sCiAgICAgICAgICAgICAgICAgICAgICBpbnQgKm5OdW1DaGFuLGludCAqKnBhbkRC SUMsaW50ICoqcGFuREJPQyk7Cgp2b2lkIERlYWxsb2NhdGVDaGFubmVsTGlzdChpbnQgKipwYW5E QklDLGludCAqKnBhbkRCT0MpOwoKCnZvaWQgVHJhbnNmZXJJbWFnZXJ5KEZJTEUgKmZwX2luLEZJ TEUgKmZwX291dCxpbnQgbk91dHB1dEZvcm1hdFR5cGUsCiAgICAgICAgICAgICAgICAgICAgIGlu dCBuQ291bnRJQyxpbnQgKnBhbklDLGludCAqcGFuSVcsaW50ICpwYW5EQk9DLAogICAgICAgICAg ICAgICAgICAgICBjaGFyICpwc3pEZXNjcmlwdGlvbiwKICAgICAgICAgICAgICAgICAgICAgUENJ Q291bnRlciBwZm5Db3VudGVyICk7Cgp2b2lkIFRyYW5zZmVyQml0TWFwcyhGSUxFKiBmcF9pbixG SUxFKiBmcF9vdXQsCiAgICAgICAgICAgICAgICAgICAgIGludCBuT3V0cHV0Rm9ybWF0VHlwZSxp bnQgbkNvdW50QklULAogICAgICAgICAgICAgICAgICAgICBpbnQgKnBhbkJJVCxpbnQgKnBhbklX LAogICAgICAgICAgICAgICAgICAgICBjaGFyICpwc3pEZXNjcmlwdGlvbixQQ0lDb3VudGVyIHBm bkNvdW50ZXIpOwoKdm9pZCBUcmFuc2ZlclZlY3RvcnMoRklMRSAqZnBfaW4sRklMRSAqZnBfb3V0 LGludCBuT3V0cHV0Rm9ybWF0VHlwZSwKICAgICAgICAgICAgICAgICAgICAgaW50IG5Db3VudFZF QyxpbnQgKnBhblZFQyxpbnQgKnBhbklXLFRCb29sIGJDbGlwLAogICAgICAgICAgICAgICAgICAg ICBjaGFyICpwc3pEZXNjcmlwdGlvbiwKICAgICAgICAgICAgICAgICAgICAgUENJQ291bnRlciBw Zm5Db3VudGVyKTsKCnZvaWQgVHJhbnNmZXJHQ1BzKEZJTEUgKmZwX2luLEZJTEUgKmZwX291dCxp bnQgbk91dHB1dEZvcm1hdFR5cGUsCiAgICAgICAgICAgICAgICAgIGludCBuQ291bnRHQ1AsaW50 ICpwYW5HQ1AsaW50ICpwYW5JVywKICAgICAgICAgICAgICAgICAgY2hhciAqcHN6RGVzY3JpcHRp b24pOwoKdm9pZCBUcmFuc2ZlclRFWHMoRklMRSAqZnBfaW4sRklMRSAqZnBfb3V0LGludCBuT3V0 cHV0Rm9ybWF0VHlwZSwKICAgICAgICAgICAgICAgICAgaW50IG5Db3VudFRFWCxpbnQgKnBhblRF WCxpbnQgKnBhbklXLAogICAgICAgICAgICAgICAgICBjaGFyICpwc3pEZXNjcmlwdGlvbik7Cgp2 b2lkIFRyYW5zZmVyQklOcyhGSUxFICpmcF9pbixGSUxFICpmcF9vdXQsaW50IG5PdXRwdXRGb3Jt YXRUeXBlLAogICAgICAgICAgICAgICAgICBpbnQgbkNvdW50QklOLGludCAqcGFuQklOLGludCAq cGFuSVcsCiAgICAgICAgICAgICAgICAgIGNoYXIgKnBzekRlc2NyaXB0aW9uKTsKCnZvaWQgVHJh bnNmZXJQQ1RzKEZJTEUgKmZwX2luLEZJTEUgKmZwX291dCxpbnQgbk91dHB1dEZvcm1hdFR5cGUs CiAgICAgICAgICAgICAgICAgIGludCBuQ291bnRQQ1QsaW50ICpwYW5QQ1QsCiAgICAgICAgICAg ICAgICAgIGNoYXIgKnBzekRlc2NyaXB0aW9uKTsKCnZvaWQgVHJhbnNmZXJMVVRzKEZJTEUgKmZw X2luLEZJTEUgKmZwX291dCxpbnQgbk91dHB1dEZvcm1hdFR5cGUsCiAgICAgICAgICAgICAgICAg IGludCBuQ291bnRMVVQsaW50ICpwYW5MVVQsCiAgICAgICAgICAgICAgICAgIGNoYXIgKnBzekRl c2NyaXB0aW9uKTsKCnZvaWQgVHJhbnNmZXJTSUdzKEZJTEUgKmZwX2luLEZJTEUgKmZwX291dCxp bnQgbk91dHB1dEZvcm1hdFR5cGUsCiAgICAgICAgICAgICAgICAgIGludCBuQ291bnRTSUcsaW50 ICpwYW5TSUcsaW50ICpwYW5JVywKICAgICAgICAgICAgICAgICAgY2hhciAqcHN6RGVzY3JpcHRp b24pOwoKdm9pZCBUcmFuc2Zlck9SQnMoRklMRSAqZnBfaW4sRklMRSAqZnBfb3V0LGludCBuT3V0 cHV0Rm9ybWF0VHlwZSwKICAgICAgICAgICAgICAgICAgaW50IG5Db3VudE9SQixpbnQgKnBhbk9S QixpbnQgKnBhbklXLAogICAgICAgICAgICAgICAgICBjaGFyICpwc3pEZXNjcmlwdGlvbik7Cgp2 b2lkIFVwZGF0ZUNoYW5uZWxIaXN0b3J5KEZJTEUgKmZwX2luLEZJTEUgKmZwX291dCxpbnQgbkNv dW50SUMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpwYW5JQyxpbnQgKnBhbkRCT0Ms Y2hhciAqcHN6RGVzY3JpcHRpb24pOwoKdm9pZCBVcGRhdGVTZWdtZW50SGlzdG9yeShGSUxFICpm cF9pbixGSUxFICpmcF9vdXQsaW50IG5Db3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgKnBhbkluU2VnLGludCAqcGFuT3V0U2VnLGNoYXIgKnBzekRlc2NyaXB0aW9uKTsKCgoKCgp0 eXBlZGVmIHN0cnVjdAp7CiAgaW50IFR5cGU7CiAgY2hhciAqTmFtZTsKICB1bnNpZ25lZCBjaGFy ICpEYXRhQ2FjaGU7CiAgaW50IENhY2hlU2l6ZTsKICBjaGFyICoqRGlyRW50cnk7CiAgaW50IERp ckVudHJpZXM7CiAgRklMRSAqZnA7CiAgaW50IGZwUHJpdmF0ZTsKfSBHREJUZXN0SW5mb190OwoK dHlwZWRlZiBHREJUZXN0SW5mb190IEdEQlRlc3RJbmZvOwoKdHlwZWRlZiBzdHJ1Y3QKewogICAg ZG91YmxlIHg7CiAgICBkb3VibGUgeTsKfSBHREJWZXJ0ZXgyRDsKCgpleHRlcm4gR0RCVmVydGV4 IGdzR0RCVmVydGV4TWluOwpleHRlcm4gR0RCVmVydGV4IGdzR0RCVmVydGV4TWF4OwpleHRlcm4g R0RCVmVydGV4IGdzR0RCVmVydGV4WmVybzsKCgp0eXBlZGVmIHVpbnQzMiBHREJGbGFnczsKdHlw ZWRlZiB1aW50MzIgR0RCSGludHM7CgoKCgoKCnR5cGVkZWYgdW5pb24KewogIGZsb2F0IGZGbG9h dDsKICBkb3VibGUgZERvdWJsZTsKICBjaGFyICpwc3pTdHJpbmc7CiAgaW50MzIgbkludGVnZXI7 CiAgaW50MzIgKnBhbkludHM7Cn0gR0RCRmllbGQsICpHREJSZWNvcmQ7Cgp0eXBlZGVmIGludCBH REJGaWVsZFR5cGU7CiMgOTY1ICIuLi8uLi8uLi9saWIvZ2RiLmgiCnR5cGVkZWYgc3RydWN0CnsK ICAgIGNoYXIgKnBzek5hbWU7CiAgICBjaGFyICpwc3pEZXNjOwogICAgR0RCRmllbGRUeXBlIGVU eXBlOwogICAgR0RCRmllbGQgdURlZmF1bHQ7CiAgICBjaGFyICpwc3pGb3JtYXQ7Cn0gR0RCRGVm bjsKCgoKCgp0eXBlZGVmIGludCBHREJBbmdsZVVuaXQ7CiMgOTkwICIuLi8uLi8uLi9saWIvZ2Ri LmgiCnN0cnVjdCBHREJHcm91cEluZGV4X3Q7CnN0cnVjdCBHREJJbmZvX3M7CnN0cnVjdCBHREJR VDsKc3RydWN0IEdEQlRvcG9JbmZvX3Q7CgpzdHJ1Y3QgR0RCTGF5ZXJfdAp7CiAgICBzdHJ1Y3Qg R0RCSW5mb19zICpwc01ldGhvZHM7CiAgICB2b2lkICpwTmF0aXZlSW5mbzsKICAgIEZJTEUgKmZw OwogICAgaW50IG5TZWdtZW50OwogICAgY2hhciAqcHN6TmFtZTsKICAgIGNoYXIgKnBzekRlc2M7 CgoKCiAgICBHREJGbGFncyBmRmxhZ3M7CgoKCiAgICBpbnQgbkZpZWxkczsKICAgIEdEQkRlZm4g KnBhc0RlZm47CgoKCiAgICBDQ0hIYW5kbGUgaE1vZENhY2hlOwogICAgQ0NISGFuZGxlIGhSZWFk Q2FjaGU7CiAgICBDQ0hIYW5kbGUgaERlbGV0ZWRDYWNoZTsKICAgIGludCBuTW9kQ2FjaGVPcHRp b25zOwogICAgaW50IG5SZWFkQ2FjaGVPcHRpb25zOwogICAgaW50IG5SZWFkQ2FjaGVTaXplOwog ICAgaW50IG5Nb2RDYWNoZVNpemU7CgoKCiAgICBUQm9vbCBiTm9DYWNoZTsKICAgIFRCb29sIGIy RDsKCgoKICAgIFRCb29sIGJFeHRlbnRzRGlydHk7CiAgICBHREJWZXJ0ZXggc01pbjsKICAgIEdE QlZlcnRleCBzTWF4OwoKCgogICAgaW50IGlSZXBDb2RlRmllbGQ7CiAgICBpbnQgaUdyb3VwSWRG aWVsZDsKICAgIGludCBpQ2hpbGRMaXN0RmllbGQ7CiAgICBpbnQgaVRleHRGaWVsZDsKICAgIGlu dCBpQW5nbGVGaWVsZDsKICAgIGludCBpSGVpZ2h0RmllbGQ7CgoKCgogICAgR0RCQW5nbGVVbml0 IGVBbmdsZVVuaXQ7CgoKCgogICAgc3RydWN0IEdEQkdyb3VwSW5kZXhfdCAqaEdyb3VwSW5kZXg7 CgoKCiAgICBzdHJ1Y3QgR0RCUVQgKnBzUXVhZFRyZWU7CgoKCgogICAgaW50IG5TaGFwZUNvdW50 OwogICAgaW50IGJTaGFwZUNvdW50VmFsaWQ7CgogICAgaW50IG5Qb2ludHNDb3VudDsKICAgIGlu dCBuTGluZXNDb3VudDsKICAgIGludCBuQXJlYXNDb3VudDsKICAgIFRCb29sIGJTaGFwZXNDb3Vu dFR5cGVWYWxpZDsKCgoKCiAgICBzdHJ1Y3QgR0RCVG9wb0luZm9fdCAqcHNUb3BvOwoKICAgIGlu dCBpWENvb3JkRmllbGQ7CiAgICBpbnQgaVlDb29yZEZpZWxkOwoKCgoKICAgIEdEQlNoYXBlSWQg KnBhaFNlbGVjdGVkSWRzOwogICAgaW50IG5TZWxlY3RlZENvdW50OwogICAgaW50IG5Mb2NrZWRT ZWxlY3Rpb25Db3VudDsKCiAgICBUQm9vbCBiU3luY2luZzsKCiAgICBzdHJ1Y3QgR0RCVmVjVW5k b0xldmVsX3QgKnBzVlVMOwogICAgdm9pZCAqcEpPTFRWZWN0b3JMYXllcjsKCgoKCiAgICBpbnQg aVJpbmdTdGFydEZpZWxkOwp9OwoKdHlwZWRlZiBzdHJ1Y3QgR0RCTGF5ZXJfdCAqIEdEQkxheWVy OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgdm9pZCAqbm90aGluZzsKfSBHREJSc3Q7Cgp0eXBlZGVm IHN0cnVjdCB7CiAgICBkb3VibGUgZGZCb3VuZGFyeTsKICAgIGRvdWJsZSBkZlZhbHVlOwp9IEdE QkJyZWFrUG9pbnRMVVRfdDsKCnR5cGVkZWYgc3RydWN0IHsKICAgIGRvdWJsZSBkZkJvdW5kYXJ5 OwogICAgdW5zaWduZWQgY2hhciBuUmVkOwogICAgdW5zaWduZWQgY2hhciBuR3JlZW47CiAgICB1 bnNpZ25lZCBjaGFyIG5CbHVlOwp9IEdEQkJyZWFrUG9pbnRQQ1RfdDsKCnR5cGVkZWYgc3RydWN0 CnsKICAgIEdEQlZlcnRleCAqcGFzVmVydGljZXM7CiAgICBpbnQgbkNvdW50OwogICAgR0RCRmll bGQgKnBhc0ZpZWxkczsKfSBHREJTaGFwZTsKCnR5cGVkZWYgc3RydWN0CnsKICAgIEdEQlZlcnRl eCAqcGFzVmVydGljZXM7CiAgICBpbnQgbkNvdW50OwogICAgR0RCRmllbGQgKiBwYXNGaWVsZHM7 CiAgICBHREJEZWZuICpwYXNEZWZuOwogICAgaW50IG5GaWVsZHM7Cn0gR0RCRmF0U2hhcGU7CgoK CgoKdHlwZWRlZiBzdHJ1Y3QgR0RCQ2Fwc190CnsKCgoKICAgIFRCb29sIGJIYXNWZXJ0aWNlczsK ICAgIFRCb29sIGJWZXJ0aWNlc09ubHk7CgoKCiAgICBUQm9vbCBiSGFzQXR0cmlidXRlczsKICAg IFRCb29sIGJBdHRyaWJ1dGVzT25seTsKCgoKCgoKICAgIFRCb29sIGJBZGRGaWVsZDsKCgoKCgoK ICAgIFRCb29sIGJBZGRSYW5kRmllbGQ7CgoKCgogICAgVEJvb2wgYkNhbkNyZWF0ZTsKCgoKCiAg ICBUQm9vbCBiQ2FuTW9kaWZ5OwoKCgoKCgogICAgVEJvb2wgYlJhbmRvbVVwZGF0ZTsKCgoKCgoK ICAgIFRCb29sIGJDcmVhdGVMYXllcnM7CgoKCgoKICAgIGludCBuTWF4TGF5ZXJzOwoKCgoKICAg IFRCb29sIGJEZWxldGVMYXllcnM7CgoKCgoKCiAgICBUQm9vbCBiQ2FuQ3JlYXRlTGF5ZXJzQXRB bnlUaW1lOwoKCgoKICAgIFRCb29sIGJIYXNGbG9hdHM7CiAgICBUQm9vbCBiSGFzSW50czsKICAg IFRCb29sIGJIYXNEb3VibGVzOwogICAgVEJvb2wgYkhhc0NoYXI7CiAgICBUQm9vbCBiSGFzSW50 TGlzdDsKCgoKCgogICAgVEJvb2wgYk5lZWRzRXh0ZW50czsKCgoKCgogICAgVEJvb2wgYk5lZWRz TnVtYmVyRW50aXRpZXNQZXJMYXllcjsKCgoKCgogICAgVEJvb2wgYk5hdGl2ZUxheWVyUmV0dXJu c0NvcHk7CgoKCgoKCiAgICBHREJEZWZuICoqcGFwYXNEZWZuOwoKCgoKICAgIFRCb29sIGJDYW5S ZWFkUmVwVGFibGU7CiAgICBUQm9vbCBiQ2FuV3JpdGVSZXBUYWJsZTsKICAgIFRCb29sIGJDYW5X cml0ZVJlcFRhYmxlTG9zc2xlc3NseTsKIyAxMjUxICIuLi8uLi8uLi9saWIvZ2RiLmgiCiAgICBU Qm9vbCBiSGlkZUZyb21Vc2VyOwogICAgVEJvb2wgYkhpZGVGcm9tVXNlckluRmlsZVNlbGVjdG9y OwoKCgoKCiAgICBUQm9vbCBiU3BhdGlhbFF1ZXJ5OwogICAgVEJvb2wgYkF0dHJpYnV0ZVF1ZXJ5 OwoKCgoKICAgIFRCb29sIGJVc2Vyc1Bhc3N3b3JkOwoKCgoKICAgIFRCb29sIGJDYW5ub3RDcmVh dGVSc3Q7Cgp9IEdEQkNhcGFiaWxpdGllczsKCgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgRklMRSAq ZnBTcmM7CiAgaW50IG5EQklDOwoKICBpbnQgblRhcmdldENoYW47CgogIFRCb29sIGJDbGVhbjsK ICBUQm9vbCBiVXNlRm9ySGlzdG9ncmFtOwoKICBkb3VibGUgZGZSZXNGYWN0b3I7Cn0gR0RCT3Zl cnZpZXdJbmZvX3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgRklMRSAqZnBTcmM7CiAgICBp bnQgbkxheWVyVHlwZTsKICAgIGludCBuU3JjTGF5ZXI7CiAgICBpbnQgKnBhbkRCSVc7CgogICAg aW50IG5Ec3RMYXllcjsKCiAgICBpbnQgbk9wdGlvbnM7CgogICAgVEJvb2wgYkNsaXBHZW87CiAg ICBkb3VibGUgZGZDbGlwWE9mZjsKICAgIGRvdWJsZSBkZkNsaXBZT2ZmOwogICAgZG91YmxlIGRm Q2xpcFhTaXplOwogICAgZG91YmxlIGRmQ2xpcFlTaXplOwoKICAgIHVuaW9uCiAgICB7CiAgICAg ICAgc3RydWN0CiAgICAgICAgewogICAgICAgICAgICBUQm9vbCAoKnBmblByb2NXaXRoSWQpKHN0 cnVjdCBHREJMYXllcl90KiwgR0RCU2hhcGVJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBHREJTaGFwZSosCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgR0RCTGF5ZXIsIEdEQlNoYXBlICosIFRCb29sLCBUQm9vbCAqKTsKICAg ICAgICAgICAgdm9pZCAoKnBmbk1hcHBpbmdGdW5jKShHREJMYXllciwgR0RCTGF5ZXIsIGludCAq KTsKICAgICAgICAgICAgdm9pZCAoKnBmbkNvcHlMYXllclN0cnVjdCkoR0RCTGF5ZXIsIEdEQkxh eWVyKTsKICAgICAgICB9IHNWT3B0OwoKICAgICAgICBzdHJ1Y3QKICAgICAgICB7CiAgICAgICAg ICAgIHZvaWQgKCpwZm5Qcm9jZXNzVGlsZSkoIGludCwgaW50LCBpbnQsIGludCwgdm9pZCAqICk7 CiAgICAgICAgfSBzSU9wdDsKICAgIH0gdTsKfSBHREJUcmFuc2ZlckxheWVySW5mbzsKCnR5cGVk ZWYgc3RydWN0IHsKICAgIEZJTEUgKmZwRHN0OwogICAgaW50IG5Ec3RDcmVhdGVUeXBlOwogICAg Y2hhciAqcHN6RHN0Q3JlYXRlT3B0aW9uczsKICAgIGNoYXIgKnBzekRzdENyZWF0ZUZpbGVuYW1l OwoKICAgIGNoYXIgKnBzelByb2Nlc3NJbmc7CiAgICBjaGFyICpwc3pQcm9jZXNzRWQ7CgogICAg aW50IG5PcHRpb25zOwoKICAgIGludCAqcGFuREJPVzsKCiAgICBJTVBQcm9ncmVzc0Z1bmMgcGZu UHJvZ3Jlc3M7CiAgICB2b2lkICpwUHJvZ3Jlc3NBcmc7CgogICAgaW50IG5MYXllcnM7CiAgICBH REJUcmFuc2ZlckxheWVySW5mbyAqKnBhcHNMYXllcnM7Cgp9IEdEQlRyYW5zZmVySW5mbzsKCkdE QlRyYW5zZmVySW5mbyAqIEdEQkNyZWF0ZVRyYW5zZmVyKCB2b2lkICk7CnZvaWQgR0RCRGVzdHJv eVRyYW5zZmVyKCBHREJUcmFuc2ZlckluZm8gKiApOwpHREJUcmFuc2ZlckxheWVySW5mbyAqCiAg ICAgICAgR0RCQWRkVHJhbnNmZXJMYXllciggR0RCVHJhbnNmZXJJbmZvICosIEZJTEUgKiwgaW50 LCBpbnQsIGludCAqLCBpbnQgKTsKClRCb29sIEdEQlRyYW5zZmVyTGF5ZXJzKCBHREJUcmFuc2Zl ckluZm8gKiApOwojIDEzNzAgIi4uLy4uLy4uL2xpYi9nZGIuaCIKdHlwZWRlZiBlbnVtIHsKICBH REJTQWxsLAogIEdEQlNOZWFyZXN0LAogIEdEQlNOZWFyZXN0V2l0aERpc3RhbmNlLAogIEdEQlNQ b2x5Z29uc0luc2lkZSwKICBHREJTUmFkaXVzLAogIEdEQlNSZWN0LAogIEdEQlNJbnNpZGVQb2x5 LAogIEdEQlNDdXRQb2x5LAogIEdEQlNPdXRzaWRlUG9seSwKICBHREJTQXR0cmlidXRlLAogIEdE QlNJbmNsdXNpdmUsCiAgR0RCU05lYXJlc3ROb3RJbkxpc3QsCiAgR0RCU05lYXJlc3QzRCwKICBH REJTTmVhcmVzdE5vdEluTGlzdDNELAogIEdEQlNSZXByb2plY3RSZWN0LAogIEdEQlNSZXByb2pl Y3ROZWFyZXN0LAogIEdEQlNSYWRpdXNOZWFyZXN0LAogIEdEQlNSYWRpdXNOb3RJbkxpc3QsCiAg R0RCU1Byb3Blcmx5SW5zaWRlUG9seQoKCn0gR0RCU2VhcmNoVHlwZTsKCgoKCnR5cGVkZWYgc3Ry dWN0IEdEQkluZm9fcwp7CiAgICB2b2lkICgqU2l6ZUluZm8pICggRklMRSAqLCBpbnQgKiwgaW50 ICosIGludCAqICk7CiAgICBpbnQgKCpDaGFuWFNpemUpICggRklMRSAqICk7CiAgICBpbnQgKCpD aGFuWVNpemUpICggRklMRSAqICk7CiAgICBpbnQgKCpDaGFuTnVtKSAoIEZJTEUgKiApOwogICAg aW50ICgqQ2hhblR5cGUpICggRklMRSAqLCBpbnQgKTsKICAgIHZvaWQgKCpCeXRlQ2hhbklPKSAo IEZJTEUgKiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICosIGludCwgaW50LCBpbnQsIGludCAqICk7 CiAgICB2b2lkICgqSW50Q2hhbklPKSAoIEZJTEUgKiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMiAqLCBpbnQsIGlu dCwgaW50LCBpbnQgKiApOwogICAgdm9pZCAoKlJlYWxDaGFuSU8pICggRklMRSAqLCBpbnQsIGlu dCwgaW50LCBpbnQsIGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGZsb2F0ICosIGludCwgaW50LCBpbnQsIGludCAqICk7CiAgICBGSUxFICooKkNyZWF0ZSkgKCBj aGFyICosIGludCwgaW50LCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQsIGNoYXIgKiApOwogICAgaW50ICgqR2VvcmVmSU8pICggRklMRSAqLCBpbnQsIGNo YXIgKiwgZG91YmxlICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk b3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqICk7CiAgICBpbnQgKCpHZW9yZWZJTzIpICggRklM RSAqLCBpbnQsIGNoYXIgKiwgZG91YmxlICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqICwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqLCBkb3VibGUgKik7CiAgICBpbnQgKCpI aW50KSAoIEZJTEUgKiApOwogICAgaW50ICgqQ2hhbkRlc2NJTykgKCBGSUxFICosIGludCwgaW50 LCBjaGFyICogKTsKICAgIHZvaWQgKCpDbG9zZSkgKCBGSUxFICogKTsKICAgIEZJTEUgKigqT3Bl bikgKCBjaGFyICosIGNoYXIgKiApOwogICAgRklMRSAqKCpSZW9wZW4pICggRklMRSAqICk7CiAg ICBsb25nICgqRmlsZUF0dHJpYnV0ZSkgKCB2b2lkICk7CiAgICBsb25nIERlZmF1bHRBdHRyaWJ1 dGU7CiAgICB2b2lkICgqRmlsZURlc2MpICggRklMRSAqICk7CiAgICB2b2lkICgqU2VnRGVzY0lP KSAoIEZJTEUgKiwgaW50LCBpbnQsIGludCwgY2hhciAqICk7CiAgICB2b2lkICgqVmVjdG9ySW5m bykgKCBGSUxFICosIGludCwgaW50LCBWSW5mb190ICogKTsKICAgIGludCAoKlZlY3RvcklPKSAo IFZJbmZvX3QgKiwgaW50LCBpbnQsIGludCwgaW50ICosIGludCAqLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50MzIgKiwgaW50MzIgKiwgZG91YmxlICoqLCBkb3Vi bGUgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCApOwogICAg aW50ICgqU2VnTmV4dCkgKCBGSUxFICosIGludCwgaW50ICk7CiAgICBpbnQgKCpHZXRDaGFuSW5m bykgKCBGSUxFICosIGludCwgY2hhciAqLCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBsb25nICosIGxvbmcgKiwgbG9uZyAqLCBpbnQgKiApOwogICAgdm9pZCAo KlBjdElPKSAoIEZJTEUgKiwgaW50LCBpbnQsIHVuc2lnbmVkIGNoYXIgKiApOwogICAgdm9pZCAo KkJyZWFrUG9pbnRQY3RJTykgKCBGSUxFICosIGludCwgaW50LAogICAgICAgICAgICAgICAgICAg IGludCAqLCBpbnQgKiwgR0RCQnJlYWtQb2ludFBDVF90ICoqKTsKICAgIHZvaWQgKCpMdXRJTykg KCBGSUxFICosIGludCwgaW50LCB1bnNpZ25lZCBjaGFyICogKTsKICAgIHZvaWQgKCpCcmVha1Bv aW50THV0SU8pICggRklMRSAqLCBpbnQsIGludCwKICAgICAgICAgICAgICAgICAgICBpbnQgKiwg aW50ICosIEdEQkJyZWFrUG9pbnRMVVRfdCAqKiApOwogICAgdm9pZCAoKkJpdG1hcElPKSAoIEZJ TEUgKiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiwgaW50LCBpbnQgKTsKICAgIGludCAoKlRlc3RP cGVuKSAoIEdEQlRlc3RJbmZvX3QgKiApOwogICAgdm9pZCAoKlRleHRBY2Nlc3MpICggRklMRSAq LCBUSW5mb190ICosIGNoYXIgKiwgaW50ICk7CiAgICBpbnQgKCpUZXh0UmVhZCkgKCBUSW5mb190 ICosIGNoYXIgKiwgaW50ICk7CiAgICB2b2lkICgqVGV4dFdyaXRlKSAoIFRJbmZvX3QgKiwgY2hh ciAqICk7CiAgICB2b2lkICgqU3luYykgKCBGSUxFICogKTsKICAgIHZvaWQgKCpGaWxlRGVzY0lP KSAoIEZJTEUgKiwgaW50LCBpbnQsIGNoYXIgKiApOwogICAgaW50ICgqUHJvamVjdGlvbklPKSAo IEZJTEUgKiwgaW50LCBQcm9qSW5mb190ICogKTsKICAgIGNoYXIgU2hvcnROYW1lWzVdOwogICAg Y2hhciBFeHRlbnNpb25bNF07CiAgICBjaGFyICpMb25nTmFtZTsKICAgIGludCBwYWRkaW5nWzhd OwogICAgaW50ICgqTWVtQ2hhbkluZm8pICggRklMRSAqLCBpbnQsIHVuc2lnbmVkIGNoYXIgKios IGxvbmcgKiwgbG9uZyAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICog KTsKICAgIHZvaWQgKCpHY3BJTykgKCBGSUxFICosIGludCwgaW50LCBpbnQgKiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwgY2hhciAqLCBjaGFyICosIGNoYXIgKiwg aW50ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91Ymxl ICosIGRvdWJsZSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlICos IGRvdWJsZSAqLCBkb3VibGUgKiApOwoKCiAgICBHREJMYXllciAoKkdldExheWVyKSAoRklMRSAq LCBpbnQpOwogICAgR0RCTGF5ZXIgKCpDcmVhdGVMYXllcikgKEZJTEUgKiwgY29uc3QgY2hhciAq LCBjb25zdCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo YXIgKik7CiAgICB2b2lkICgqRGVsZXRlTGF5ZXIpIChGSUxFICosIGludCk7CgogICAgaW50ICgq R2V0UHJvamVjdGlvbkluZm8pIChHREJMYXllciAsIFByb2pJbmZvX3QgKik7CiAgICB2b2lkICgq U2V0UHJvamVjdGlvbkluZm8pIChHREJMYXllciAsIFByb2pJbmZvX3QgKik7CgogICAgR0RCU2hh cGVJZCAoKkdldE5leHRTaGFwZUlkKShHREJMYXllciAsIEdEQlNoYXBlSWQpOwogICAgdm9pZCAo KkRlbGV0ZVNoYXBlKSAoR0RCTGF5ZXIgLCBHREJTaGFwZUlkKTsKICAgIEdEQlNoYXBlSWQgKCpD cmVhdGVTaGFwZSkgKEdEQkxheWVyICwgR0RCU2hhcGVJZCk7CgogICAgR0RCVmVydGV4ICooKkdl dFZlcnRpY2VzKSAoR0RCTGF5ZXIgLEdEQlNoYXBlSWQsIGludCAqKTsKICAgIHZvaWQgKCpTZXRW ZXJ0aWNlcykgKEdEQkxheWVyICxHREJTaGFwZUlkLCBpbnQsR0RCVmVydGV4ICopOwoKICAgIEdE QkZpZWxkICogKCpHZXRSZWNvcmQpIChHREJMYXllciwgR0RCU2hhcGVJZCk7CiAgICB2b2lkICgq U2V0UmVjb3JkKSAoR0RCTGF5ZXIsIEdEQlNoYXBlSWQsIEdEQkZpZWxkICopOwoKICAgIEdEQlNo YXBlICooKkdldFNoYXBlKSAoR0RCTGF5ZXIgLCBHREJTaGFwZUlkKTsKICAgIHZvaWQgKCpTZXRT aGFwZSkgKEdEQkxheWVyICwgR0RCU2hhcGVJZCwgR0RCU2hhcGUgKik7CgogICAgVEJvb2wgKCpB ZGRGaWVsZCkgKEdEQkxheWVyLCBjaGFyICosIEdEQkZpZWxkVHlwZSwgR0RCRmllbGQgKik7CiAg ICBUQm9vbCAoKkRlbGV0ZUZpZWxkKSAoR0RCTGF5ZXIgLCBjaGFyICopOwoKICAgIHZvaWQgKigq R2V0UnN0KSAoR0RCTGF5ZXIpOwogICAgdm9pZCAoKlNldFJzdCkgKEdEQkxheWVyLCB2b2lkICop OwogICAgVEJvb2wgKCpDbGVhckxheWVyKSAoR0RCTGF5ZXIpOwogICAgVEJvb2wgKCpTZXRVcGRh dGVNb2RlKSAoR0RCTGF5ZXIsIFRCb29sKTsKCiAgICBHREJDYXBhYmlsaXRpZXMgc0NhcGFiaWxp dGllczsKCiAgICBjaGFyICoqKCpNZXRhRGF0YUlPKSAoRklMRSAqLCBpbnQsIGludCwgaW50LCBj aGFyICoqKTsKCiAgICBUQm9vbCAoKkNvcHlUb3BvTGF5ZXJzKShGSUxFICosIEdEQkxheWVyLCBH REJMYXllciosIGNvbnN0IGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEdEQkxheWVyLCBHREJMYXllciosIGNvbnN0IGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEdEQkxheWVyLCBHREJMYXllciosIGNvbnN0IGNoYXIgKiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFBDSUNvdW50ZXIpOwoKICAgIHZvaWQgKCpXcml0ZUhp c3RvcnkpIChGSUxFICosIGludCwgaW50LCBjb25zdCBjaGFyICopOwogICAgY29uc3QgY2hhciAq KCpSZWFkSGlzdG9yeSkgKEZJTEUgKiwgaW50LCBpbnQsIGludCk7CgogICAgdm9pZCAoKkNvbXBy ZXNzKSAoRklMRSAqKTsKICAgIHZvaWQgKCpDaGFuQWRkKSAoRklMRSAqLCBpbnQsIGludCwgUENJ Q291bnRlcik7CiAgICB2b2lkICgqQ2hhbkRlbGV0ZSkgKEZJTEUgKiwgaW50LCBpbnQgKiwgUENJ Q291bnRlcik7CiAgICB2b2lkICgqQnVpbGRPdmVydmlld3MpKEZJTEUgKiwgaW50LCBpbnQgKiwg aW50LCBUQm9vbCwgY29uc3QgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgSU1QUHJvZ3Jlc3NGdW5jLCB2b2lkICogKTsKICAgIFRCb29sICgqR2V0VGlsZUluZm8pIChG SUxFICosIGludCwgaW50ICosIGludCAqKTsKCiAgICBHREJPdmVydmlld0luZm9fdCAqKCpHZXRP dmVydmlld3MpKEZJTEUgKiwgaW50ICogKTsKCiAgICB2b2lkICgqRGVsZXRlKSAoIGNoYXIgKiAp OwogICAgdm9pZCAoKlNhdEVwaGVtZXJpc0lPKSAoRklMRSAqLCBpbnQsIGludCwgRXBoZW1lcmlz U2VnX3QgKik7CiAgICB2b2lkICgqQmluYXJ5SU8pIChGSUxFICosIGludCwgaW50LCBpbnQsIGlu dCwgdW5zaWduZWQgY2hhciAqKTsKICAgIGludCAoKkdldEJpbmFyeUxlbmd0aCkgKEZJTEUgKiwg aW50KTsKICAgIGludCAoKlNlZ0NyZWF0ZSkgKEZJTEUgKiwgY29uc3QgY2hhciAqLCBjb25zdCBj aGFyICosIGludCApOwogICAgdm9pZCAoKkFycmF5SU8pIChGSUxFICosIGludCwgaW50LCBpbnQg KiwgaW50ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlICoqLGNo YXIqKTsKCiAgICBHREJTaGFwZUlkICooKlNwYXRpYWxRdWVyeSkgKEdEQkxheWVyLCBpbnQgKiwg R0RCU2hhcGVJZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50LCBH REJTZWFyY2hUeXBlLCB2YV9saXN0KTsKICAgIGNoYXIgKiooKkxheWVyTGlzdCkgKEZJTEUgKiwg VEJvb2wpOwogICAgR0RCU2hhcGVJZCAqKCpBdHRyaWJ1dGVRdWVyeSkgKEdEQkxheWVyLCBpbnQg KiwgR0RCU2hhcGVJZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 LCBjb25zdCBjaGFyICopOwogICAgY2hhciAqKigqTGlzdE5hbWVzKSAoY29uc3QgY2hhciAqLCBp bnQpOwogICAgY2hhciAqKigqTGlzdEZpZWxkTmFtZXMpIChjb25zdCBjaGFyICopOwoKICAgIFRC b29sICgqQXV0b1NldENoYW5QSUQpKCBGSUxFKiBmcCwgaW50LCB1aW50MzIgKiApOwogICAgVEJv b2wgKCpHZXRDaGFuUElEKSggRklMRSogZnAsIGludCwgdWludDMyICogKTsKICAgIGludCAoKkZp bmRDaGFuRnJvbVBJRCkoIEZJTEUqIGZwLCB1aW50MzIgKTsKCiAgICBjaGFyICoqKCAqR2V0VmFs aWRGaWVsZFZhbHVlcykgKCBHREJMYXllcixpbnQgKTsKCn0gR0RCSW5mb190OwoKCgoKc3RydWN0 IEdEQkdyb3VwX3QKewogICAgaW50IGlHcm91cElkOwogICAgaW50IG5FbnRpdGllczsKICAgIEdE QlNoYXBlSWQgKnBhaEVudGl0aWVzOwp9OwoKdHlwZWRlZiBzdHJ1Y3QgR0RCR3JvdXBfdCAqR0RC R3JvdXA7CgpzdHJ1Y3QgR0RCR3JvdXBJbmRleF90CnsKICAgIEdEQkxheWVyIGhMYXllcjsKICAg IGludCBuR3JvdXBzOwogICAgaW50IG5BbGxvY2F0ZWRHcm91cHM7CiAgICBHREJHcm91cCBwYXNH cm91cHM7CiAgICBpbnQgbk5leHRVbnVzZWRHcm91cElkOwp9OwoKdHlwZWRlZiBzdHJ1Y3QgR0RC R3JvdXBJbmRleF90ICpHREJHcm91cEluZGV4OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgR1FOCnsKICAg IHN0cnVjdCBHUU4gKnBzUGFyZW50OwogICAgc3RydWN0IEdRTiAqYXBzTm9kZXNbNF07CiAgICBH REJWZXJ0ZXggc01pbjsKICAgIEdEQlZlcnRleCBzTWF4OwogICAgaW50IG5TaGFwZXM7CiAgICBp bnQgbkNhcGFjaXR5OwogICAgR0RCU2hhcGVJZCAqcGFoU2hhcGVJZHM7CiAgICBpbnQgaUluZGV4 Owp9IEdEQlF1YWROb2RlOwoKdHlwZWRlZiBzdHJ1Y3QgR0RCUVQKewogICAgR0RCUXVhZE5vZGUg KnJvb3Q7CiAgICBHREJMYXllciBoTGF5ZXI7CiAgICBDQ0hIYW5kbGUgaEVudGl0eUxvb2tVcDsK ICAgIGludCBuRGVwdGg7CiAgICBUQm9vbCBiSXRlbU91dHNpZGVSb290Owp9IEdEQlF1YWRUcmVl OwoKdHlwZWRlZiBzdHJ1Y3QgR0RCUVRJCnsKICAgIEdEQlF1YWROb2RlICpwc0N1cnJlbnROb2Rl OwogICAgaW50IG5DdXJyZW50SW5kZXg7CiAgICBHREJWZXJ0ZXggc01pbjsKICAgIEdEQlZlcnRl eCBzTWF4OwogICAgVEJvb2wgYkV4dGVudHNDaGFuZ2VkOwp9IEdEQlFUSXRlcmF0b3I7CgoKCgoK CnR5cGVkZWYgc3RydWN0IEdEQlNlYXJjaF90CnsKICAgIFRCb29sICgqU2VhcmNoRnVuYykoc3Ry dWN0IEdEQlNlYXJjaF90ICosIEdEQlNoYXBlICosIGludDMyICopOwogICAgR0RCTGF5ZXIgcHNM YXllcjsKICAgIEdEQkxheWVyVHlwZSBlTGF5ZXJUeXBlOwogICAgR0RCTGF5ZXIgcHNBcmVhTGF5 ZXI7CiAgICBjaGFyICpwc3pTZWFyY2hFeHByOwogICAgR0RCVmVydGV4IHNQb2ludDsKICAgIEdE QlZlcnRleCBzTWluOwogICAgR0RCVmVydGV4IHNNYXg7CiAgICBHREJTaGFwZUlkIGhDbG9zZXN0 U2hhcGVJZDsKICAgIGRvdWJsZSBkRGlzdGFuY2U7CiAgICBkb3VibGUgKnBkRGlzdGFuY2U7CiAg ICBpbnQgaUNsb3Nlc3RTZWdtZW50OwogICAgR0RCU2hhcGVJZCBoTGFzdFNoYXBlSWQ7CiAgICBp bnQgbkxhc3RJbmRleDsKICAgIFRCb29sIGJJc0ZpbmRGaXJzdDsKCgoKCiAgICBUQm9vbCBiSXNB dE5vZGU7CiAgICBHREJWZXJ0ZXggc05vZGU7CiAgICBkb3VibGUgZEFuZ2xlOwoKCgogICAgc3Ry dWN0IEdEQlFUSSBzUXVhZEl0ZXJhdG9yOwogICAgR0RCU2hhcGVJZCAqcGFoRXhjbHVzaW9uSWRM aXN0OwogICAgaW50IG5FeGNsdXNpb25JZENvdW50OwoKCgogICAgaW50IG5Db3VudDsKICAgIEdE QlZlcnRleCAqcGFzVmVydGljZXM7CgoKCiAgICBpbnQgbk5lYXJlc3RJbmRleDsKICAgIGludCBu TmVhcmVzdFNpemU7CiAgICBHREJTaGFwZUlkICpwYWhOZWFyZXN0OwogICAgZG91YmxlICpwYWRE aXN0YW5jZXM7CiAgICBUQm9vbCBiVXNlSW5zaWRlOwp9IEdEQlNlYXJjaDsKCgoKCgp0eXBlZGVm IHN0cnVjdCBHREJDcEZ1bmNzX3QKewogICAgVEJvb2wgKCpQcm9jZXNzaW5nX0Z1bmMpIChHREJM YXllciwgY29uc3QgR0RCU2hhcGUgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBHREJMYXllciAsIEdEQlNoYXBlICopOwogICAgdm9pZCAoKk1hcHBpbmdfRnVuYykg KEdEQkxheWVyLCBHREJMYXllciwgaW50ICopOwogICAgdm9pZCAoKkNvdW50ZXJfRnVuYykgKGRv dWJsZSk7CiAgICB2b2lkICgqQ29weUxheWVyU3RydWN0X0Z1bmMpIChHREJMYXllciwgR0RCTGF5 ZXIpOwogICAgVEJvb2wgKCpQcm9jV2l0aElkX0Z1bmMpIChHREJMYXllciwgR0RCU2hhcGVJZCwg Y29uc3QgR0RCU2hhcGUqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEdEQkxheWVyLCBHREJTaGFwZSAqLCBUQm9vbCwgVEJvb2wgKik7CgogICAgSU1QUHJvZ3Jlc3NG dW5jIHBmblByb2dyZXNzOwogICAgdm9pZCAqcFByb2dyZXNzQXJnOwp9IEdEQkNwRnVuY3M7CiMg MTY3OCAiLi4vLi4vLi4vbGliL2dkYi5oIgpHREJJbmZvX3QgKiBHREJSZWdpc3RlciAoIGludCAp OwpHREJJbmZvX3QgKiBHREJHZXRGb3JtYXRJbmZvICggaW50ICk7CnZvaWQgR0RCQnl0ZUNoYW5J TyAoIEZJTEUgKiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqLCBpbnQsIGludCwgaW50LCBpbnQgKiAp Owp2b2lkIEdEQkJ5dGVDaGFuSU9Mb3cgKCBGSUxFICosIGludCwgaW50LCBpbnQsIGludCwgaW50 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiwg aW50LCBpbnQsIGludCwgaW50ICogKTsKdm9pZCBHREJJbnRDaGFuSU8gKCBGSUxFICosIGludCwg aW50LCBpbnQsIGludCwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludDMyICosIGludCwgaW50LCBpbnQsIGludCAqICk7CnZvaWQgR0RCSW50Q2hhbklPTG93ICgg RklMRSAqLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQzMiAqLCBpbnQsIGludCwgaW50LCBpbnQgKiApOwp2b2lkIEdEQlJl YWxDaGFuSU8gKCBGSUxFICosIGludCwgaW50LCBpbnQsIGludCwgaW50LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0ICosIGludCwgaW50LCBpbnQsIGludCAqICk7 CnZvaWQgR0RCUmVhbENoYW5JT0xvdyAoIEZJTEUgKiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgKiwgaW50LCBpbnQs IGludCwgaW50ICogKTsKdm9pZCBHREJCaXRDaGFuSU8gKCBGSUxFICosIGludCwgaW50LCBpbnQs IGludCwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IGNoYXIgKiwgaW50LCBpbnQsIGludCwgaW50ICogKTsKCnZvaWQgR0RCQml0bWFwSU9Mb3coRklM RSAqLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCB1bnNpZ25lZCBjaGFyICosIGludCwg aW50KTsKCmludCBHREJDaGFuVHlwZSAoIEZJTEUgKiwgaW50ICk7CmNvbnN0IGNoYXIgKiBHREJD aGFuVHlwZURlc2NyaXB0aW9uUmVmICggaW50ICk7CmludCBHREJDaGFuWFNpemUgKCBGSUxFICog KTsKaW50IEdEQkNoYW5ZU2l6ZSAoIEZJTEUgKiApOwppbnQgR0RCQ2hhbk51bSAoIEZJTEUgKiAp Owp2b2lkIEdEQlNpemVJbmZvICggRklMRSAqLCBpbnQgKiwgaW50ICosIGludCAqICk7CmludCBH REJIaW50ICggRklMRSAqICk7ClRCb29sIEdEQlRlc3REZXNjcmlwdGlvbiggY29uc3QgY2hhciAq ICk7CmludCBHREJDaGFuRGVzY0lPICggRklMRSAqLCBpbnQsIGludCwgY2hhciAqICk7CkZJTEUg KiBHREJDcmVhdGUgKCBpbnQsIGNvbnN0IGNoYXIgKiwgaW50LCBpbnQsIGludCwgaW50LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqKTsKCnZvaWQgR0RCQ2hhbkZs dXNoKEZJTEUgKiwgaW50KTsKRklMRSAqIEdEQk9wZW4gKCBjb25zdCBjaGFyICosIGNvbnN0IGNo YXIgKiApOwpGSUxFICogR0RCUmVvcGVuICggRklMRSAqICk7CnZvaWQgR0RCQ2xvc2UgKCBGSUxF ICogKTsKdm9pZCBHREJDbG9zZUpPTFRGaWxlICggRklMRSAqICk7CnZvaWQgR0RCRGVsZXRlICgg aW50LCBjb25zdCBjaGFyICogKTsKVEJvb2wgR0RCRGVsZXRlRmllbGQgKCBHREJMYXllciwgY2hh ciAqICk7CmxvbmcgR0RCRmlsZUF0dHJpYnV0ZSAoIEZJTEUgKiApOwpjaGFyICoqIEdEQk1ldGFE YXRhSU8gKCBGSUxFICosIGludCwgaW50LCBpbnQsIGNoYXIgKiogKTsKbG9uZyBHREJBdHRyaWJ1 dGUgKCBpbnQgKTsKdm9pZCBHREJGaWxlRGVzYyAoIEZJTEUgKiApOwp2b2lkIEdEQlNlZ0Rlc2NJ TyAoIEZJTEUgKiwgaW50LCBpbnQsIGludCwgY2hhciAqICk7Cgp2b2lkIEdEQlZlY3RvckluZm8g KCBGSUxFICosIGludCwgaW50LCBWSW5mb190ICogKTsKaW50IEdEQlZlY3RvcklPICggVkluZm9f dCAqLCBpbnQsIGludCwgaW50LCBpbnQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgKiwgaW50MzIgKiwgaW50MzIgKiwgZG91YmxlICoqLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqLCBpbnQgKTsKCmludCBHREJDb21wYXRW ZWN0b3JJTyhWSW5mb190ICosIGludCAsIGludCAsIGludCAsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50ICosIGludCAqLCBpbnQzMiAqLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyICosIGRvdWJsZSAqKiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgaW50ICk7Cgp2b2lkIEdE Qk5ld1ZlY3RvckluZm8oIEZJTEUgKiwgaW50LCBpbnQsIFZJbmZvX3QgKiApOwppbnQgR0RCTmV3 VmVjdG9ySU8oIFZJbmZvX3QgKiwgaW50LCBpbnQsIGludCwgaW50ICosCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqLCBpbnQzMiAqLCBpbnQzMiAqLCBkb3VibGUg KiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqLCBpbnQg KTsKCnZvaWQgR0RCQml0bWFwSU8oIEZJTEUgKiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGlu dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqLCBp bnQsIGludCApOwppbnQgR0RCR2VvcmVmSU8oIEZJTEUgKiwgaW50LCBjaGFyICosIGRvdWJsZSAq LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICos IGRvdWJsZSAqICk7CmludCBHREJHZW9yZWZJTzIoIEZJTEUgKiwgaW50LCBjaGFyICosIGRvdWJs ZSAqLCBkb3VibGUgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91Ymxl ICosIGRvdWJsZSAqLCBkb3VibGUgKiwgZG91YmxlICogKTsKaW50IEdEQlByb2plY3Rpb25JTygg RklMRSAqLCBpbnQsIFByb2pJbmZvX3QgKiApOwp2b2lkIEdEQlBjdElPKCBGSUxFICosIGludCwg aW50LCB1bnNpZ25lZCBjaGFyICogKTsKdm9pZCBHREJMdXRJTyggRklMRSAqLCBpbnQsIGludCwg dW5zaWduZWQgY2hhciAqICk7CnZvaWQgR0RCQnJlYWtQb2ludFBjdElPKCBGSUxFICosIGludCwg aW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKiwgaW50 ICosIEdEQkJyZWFrUG9pbnRQQ1RfdCAqKiApOwp2b2lkIEdEQkJyZWFrUG9pbnRMdXRJTyggRklM RSAqLCBpbnQsIGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50ICosIGludCAqLCBHREJCcmVha1BvaW50TFVUX3QgKiogKTsKCnZvaWQgR0RCR2NwSU8oIEZJ TEUgKiwgaW50LCBpbnQgLCBpbnQsIGludCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjaGFyICosIGNoYXIgKiwgY2hhciAqLCBjaGFyICosIGludCAqLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqICk7 Cgp2b2lkIEdEQlNhdEVwaGVtZXJpc0lPKCBGSUxFICosIGludCwgaW50LCBFcGhlbWVyaXNTZWdf dCAqKTsKdm9pZCBHREJTYXRFcGhlbWVyaXNGcmVlKCBFcGhlbWVyaXNTZWdfdCAqICk7CkVwaGVt ZXJpc1NlZ190ICpHREJTYXRFcGhlbWVyaXNEdXBsaWNhdGUoIEVwaGVtZXJpc1NlZ190ICogKTsK RXBoZW1lcmlzU2VnX3QgKkdEQkJpbmFyeVRvRXBoZW1lcmlzKCBpbnQsIHVuc2lnbmVkIGNoYXIg KiApOwp1bnNpZ25lZCBjaGFyICpHREJFcGhlbWVyaXNUb0JpbmFyeSggRXBoZW1lcmlzU2VnX3Qg KiwgaW50ICogKTsKClNSSVRJbmZvX3QgKkdEQlNhdE1vZGVsSU8oIEZJTEUgKiwgaW50LCBpbnQs IFNSSVRJbmZvX3QgKiApOwp2b2lkIEdEQkZyZWVTUklUSW5mbyggU1JJVEluZm9fdCAqICk7ClNS SVRJbmZvX3QgKkdEQkJpbmFyeVRvU1JJVEluZm8oIGludCwgdW5zaWduZWQgY2hhciAqICk7CnVu c2lnbmVkIGNoYXIgKkdEQlNSSVRJbmZvVG9CaW5hcnkoIFNSSVRJbmZvX3QgKiwgaW50ICogKTsK ClJGSW5mb190ICpSRkFsbG9jYXRlIChSRkluZm9fdCAqLCBpbnQpOwp2b2lkIFJGRGVhbGxvY2F0 ZSAoUkZJbmZvX3QgKik7ClJGSW5mb190ICpHREJSRk1vZGVsSU8oIEZJTEUgKiwgaW50LCBpbnQs IFJGSW5mb190ICogKTsKdm9pZCBHREJGcmVlUkZJbmZvKCBSRkluZm9fdCAqICk7ClJGSW5mb190 ICpHREJCaW5hcnlUb1JGSW5mbyggaW50LCB1bnNpZ25lZCBjaGFyICogKTsKdW5zaWduZWQgY2hh ciAqR0RCUkZJbmZvVG9CaW5hcnkoIFJGSW5mb190ICosIGludCAqICk7CgpBUEluZm9fdCAqQVBB bGxvY2F0ZSAoQVBJbmZvX3QgKik7CnZvaWQgQVBEZWFsbG9jYXRlIChBUEluZm9fdCAqKTsKQVBJ bmZvX3QgKkdEQkFQTW9kZWxJTyggRklMRSAqLCBpbnQsIGludCwgQVBJbmZvX3QgKiApOwp2b2lk IEdEQkZyZWVBUEluZm8oIEFQSW5mb190ICogKTsKQVBJbmZvX3QgKkdEQkJpbmFyeVRvQVBJbmZv KCBpbnQsIHVuc2lnbmVkIGNoYXIgKiApOwp1bnNpZ25lZCBjaGFyICpHREJBUEluZm9Ub0JpbmFy eSggQVBJbmZvX3QgKiwgaW50ICogKTsKCnZvaWQgR0RCQXJyYXlJTyggRklMRSAqLCBpbnQsIGlu dCwgaW50ICosIGludCAqLCBkb3VibGUgKiosIGNoYXIqKTsKCmludCBHREJTZWdDcmVhdGUoIEZJ TEUgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7CgppbnQgR0RCU2VnTmV4dCgg RklMRSAqLCBpbnQsIGludCApOwp2b2lkIEdEQlNlZ0NoZWNrKCBGSUxFICosIGludCAqLCBpbnQs IGludCwgY2hhciAqICk7ClRCb29sIEdEQlNlZ0V4aXN0KCBGSUxFICosIGludCwgaW50KTsKaW50 IEdEQlNlZ0NvdW50KCBGSUxFICosIGludCApOwppbnQgR0RCTGF5ZXJOYW1lVG9TZWcoIEZJTEUg KiwgY29uc3QgY2hhciAqICk7CmNvbnN0IGNoYXIgKiBHREJMYXllclR5cGVUb1Nob3J0TmFtZSgg aW50ICk7CmNvbnN0IGNoYXIgKiBHREJMYXllclR5cGVUb0xvbmdOYW1lKCBpbnQgKTsKaW50IEdE QlNob3J0TmFtZVRvTGF5ZXJUeXBlKCBjb25zdCBjaGFyICogKTsKaW50IEdEQkdldENoYW5JbmZv KCBGSUxFICosIGludCwgY2hhciAqLCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGxvbmcgKiwgbG9uZyAqLCBsb25nICosIGludCAqICk7CgppbnQgR0RCTWVtQ2hh bkluZm8oIEZJTEUgKiwgaW50LCB1bnNpZ25lZCBjaGFyICoqLCBsb25nICosCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGxvbmcgKiwgaW50ICogKTsKVEJvb2wgR0RCR2V0VGlsZUluZm8o IEZJTEUgKiwgaW50LCBpbnQgKiwgaW50ICogKTsKCmludCBHREJUZXN0T3BlbiAoIGNvbnN0IGNo YXIgKiApOwppbnQgR0RCVGV4dEFjY2VzcyAoIEZJTEUgKiwgVEluZm9fdCAqLCBjaGFyICosIGlu dCwgY2hhciAqICk7CmludCBHREJUZXh0UmVhZCAoIFRJbmZvX3QgKiwgY2hhciAqLCBpbnQgKTsK dm9pZCBHREJUZXh0V3JpdGUgKCBUSW5mb190ICosIGNoYXIgKiApOwp2b2lkIEdEQlN5bmMgKCBG SUxFICogKTsKdm9pZCBHREJDb21wcmVzcyAoIEZJTEUgKiApOwp2b2lkIEdEQkNoYW5BZGQgKCBG SUxFICosIGludCwgaW50LCBQQ0lDb3VudGVyICk7CnZvaWQgR0RCQ2hhbkRlbGV0ZSAoIEZJTEUg KiwgaW50LCBpbnQgKiwgUENJQ291bnRlciApOwp2b2lkIEdEQlVuaXRUZXN0aW5nICh2b2lkKTsK ClRCb29sIEdEQkJ1aWxkT3ZlcnZpZXdzKCBGSUxFICosIGludCwgaW50ICosIGludCwgVEJvb2ws CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBJTVBQcm9n cmVzc0Z1bmMsIHZvaWQgKiApOwpHREJPdmVydmlld0luZm9fdCAqCiAgICAgICAgICAgICAgIEdE QkdldE92ZXJ2aWV3cyAoIEZJTEUgKiwgaW50ICopOwp2b2lkIEdEQkNoYW5Db3B5ICggRklMRSAq LCBpbnQgKiwgaW50LCBGSUxFICosIGludCAqLCBpbnQsIGludCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZvaWQgKCopKCBpbnQsIGludCwgaW50LCB2b2lkICopLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKikoIGRvdWJsZSApICk7ClRCb29sIEdE Qk11bHRpQ2hhbkNvcHkoIEZJTEUgKiwgaW50ICosIGludCAqLCBGSUxFICosIGludCAqLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICosIGludCwgaW50LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKikoIGludCwgaW50LCBpbnQsaW50LHZvaWQg KiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTVBQcm9ncmVzc0Z1bmMsIHZv aWQgKiApOwp2b2lkIEdEQkJpdG1hcENvcHkgKCBGSUxFICosIGludCAqLCBpbnQsIEZJTEUgKiwg aW50ICosIGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCopKGlu dCxpbnQsaW50LGludCx2b2lkKiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ Q0lDb3VudGVyICk7CgppbnQgR0RCVmVjdG9yQ29weShGSUxFICpmcF9pbiwgaW50IG5TZWdJbiwg RklMRSAqZnBfb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5TZWdPdXQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBUQm9vbCAoKlRyYW5zZm9ybV9GdW5jKShHREJMYXll ciAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBHREJTaGFwZSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgR0RCTGF5ZXIgLCBHREJTaGFwZSAqKSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZvaWQgKCpNYXBwaW5nX0Z1bmMpKEdEQkxheWVyLEdEQkxheWVyLGludCAqKSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpDb3VudGVyX0Z1bmMpKGRvdWJsZSkpOwoK aW50IEdEQlZlY3RvckNwKEZJTEUgKmZwX2luLCBpbnQgblNlZ0luLCBGSUxFICpmcF9vdXQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5TZWdPdXQsIEdEQkNwRnVuY3MgKnBzRnVuY3Mp OwoKR0RCTGF5ZXIKICAgICAgICBHREJWZWN0b3JUcmFuc2ZlcihHREJMYXllciBoU3JjTGF5ZXIs IEdEQlNoYXBlSWQgKnBhaFNoYXBlSWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCBu Q291bnQsIEdEQkxheWVyIGhEc3RMYXllciwgaW50IG5PcHRpb25zKTsKCgpHREJTaGFwZUlkICpH REJHZXRMYXllclNlbGVjdGlvblJlZihHREJMYXllcik7CnZvaWQgR0RCU2V0TGF5ZXJTZWxlY3Rp b24oR0RCTGF5ZXIsIEdEQlNoYXBlSWQgKiwgaW50KTsKdm9pZCBHREJBZGRUb0xheWVyU2VsZWN0 aW9uKEdEQkxheWVyLCBHREJTaGFwZUlkKTsKdm9pZCBHREJBZGRUb011bHRpcGxlTGF5ZXJTZWxl Y3Rpb24oR0RCTGF5ZXIsIEdEQlNoYXBlSWQqLCBpbnQpOwp2b2lkIEdEQlJlbW92ZUxheWVyU2Vs ZWN0aW9uKEdEQkxheWVyLCBHREJTaGFwZUlkICosIGludCk7CmludCBHREJHZXRMYXllclNlbGVj dGlvbkNvdW50KEdEQkxheWVyKTsKVEJvb2wgR0RCSXNTaGFwZVNlbGVjdGVkKEdEQkxheWVyLCBH REJTaGFwZUlkKTsKVEJvb2wgR0RCU2V0TG9ja0xheWVyU2VsZWN0aW9uU3RhdHVzKCBHREJMYXll ciwgVEJvb2wgKTsKVEJvb2wgR0RCR2V0TG9ja0xheWVyU2VsZWN0aW9uU3RhdHVzKCBHREJMYXll ciApOwoKdm9pZCBHREJSZXNldFJlYWRDYWNoZVNpemUodm9pZCk7CnZvaWQgR0RCU2V0UmVhZENh Y2hlU2l6ZShpbnQgblNpemUpOwppbnQgR0RCR2V0UmVhZENhY2hlU2l6ZSh2b2lkKTsKdm9pZCBH REJDcmVhdGVMYXllckNhY2hlcyhHREJMYXllciBwc0xheWVyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuTW9kT3B0aW9ucyAsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5Nb2RTaXplICwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgblJlYWRPcHRpb25z ICwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgblJl YWRTaXplICk7CgpUQm9vbCBHREJMYXllckNhbkhvbGRUaWxsQ29tbWl0KEdEQkxheWVyKTsKdm9p ZCBHREJEaXNjYXJkTGF5ZXJDaGFuZ2VzKEdEQkxheWVyKTsKdm9pZCBHREJTeW5jTGF5ZXIoR0RC TGF5ZXIpOwoKdm9pZCBHREJSZW1hcFJlY29yZChHREJMYXllciwgR0RCTGF5ZXIsIGludCAqLCBH REJTaGFwZSAqKTsKaW50ICogR0RCR2V0TGF5ZXJTdHJ1Y3R1cmVNYXBwaW5nKEdEQkxheWVyIGhT cmMsIEdEQkxheWVyIGhEZXN0KTsKaW50ICogR0RCR2V0RGVmblN0cnVjdHVyZU1hcHBpbmcoR0RC RGVmbiAqLGludCxHREJEZWZuICosaW50KTsKCgppbnQgSGFzaEdEQkltYWdlKCBGSUxFICosIGlu dCwgaW50LCBpbnQsIGludCwgaW50ICk7CnZvaWQgR0RCQXZnUmVhZCggRklMRSAqLCBpbnQsIGlu dCwgaW50LCBpbnQsIGZsb2F0ICosIGludCwgaW50LCBpbnQpOwp2b2lkIEdEQk1vZGVSZWFkKCBG SUxFICosIGludCwgaW50LCBpbnQsIGludCwgZmxvYXQgKiwgaW50LCBpbnQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCApOwoKdm9pZCBHREJSZXNhbXBsZUJ5dGVJbWFnZSAoRklMRSAq ZnAsIGRvdWJsZSBkZkdlb1hPZmYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBk Zkdlb1lPZmYsIGRvdWJsZSBkZkdlb1hTaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICBk b3VibGUgZGZHZW9ZU2l6ZSwgdW5zaWduZWQgY2hhciAqcGFieUltYWdlQnVmZmVyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgbkJ1ZlhTaXplLCBpbnQgbkJ1ZllTaXplLCBpbnQgbkJ1 ZkNoYW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqYW5DaGFuTWFwLCBpbnQgblJl c2FtcGxlVHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgVEJvb2wgYkJhY2tVc2VkLCBk b3VibGUgZGZCYWNrVmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSUNvdW50ZXIg cGZuQ291bnRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGRmRmlyc3RDb3Vu dCwgZG91YmxlIGRmTGFzdENvdW50KTsKCnZvaWQgR0RCUmVzYW1wbGVJbnRJbWFnZSAoRklMRSAq ZnAsIGRvdWJsZSBkZkdlb1hPZmYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBk Zkdlb1lPZmYsIGRvdWJsZSBkZkdlb1hTaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICBk b3VibGUgZGZHZW9ZU2l6ZSwgaW50MzIgKnBhbjMySW1hZ2VCdWZmZXIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBuQnVmWFNpemUsIGludCBuQnVmWVNpemUsIGludCBuQnVmQ2hhbiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICphbkNoYW5NYXAsIGludCBuUmVzYW1wbGVU eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBUQm9vbCBiQmFja1VzZWQsIGRvdWJsZSBk ZkJhY2tWYWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUENJQ291bnRlciBwZm5Db3Vu dGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZGZGaXJzdENvdW50LCBkb3Vi bGUgZGZMYXN0Q291bnQpOwoKdm9pZCBHREJSZXNhbXBsZVJlYWxJbWFnZSAoRklMRSAqZnAsIGRv dWJsZSBkZkdlb1hPZmYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBkZkdlb1lP ZmYsIGRvdWJsZSBkZkdlb1hTaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUg ZGZHZW9ZU2l6ZSwgZmxvYXQgKnBhZkltYWdlQnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgbkJ1ZlhTaXplLCBpbnQgbkJ1ZllTaXplLCBpbnQgbkJ1ZkNoYW4sCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCAqYW5DaGFuTWFwLCBpbnQgblJlc2FtcGxlVHlwZSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgVEJvb2wgYkJhY2tVc2VkLCBkb3VibGUgZGZCYWNrVmFs dWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSUNvdW50ZXIgcGZuQ291bnRlciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGRmRmlyc3RDb3VudCwgZG91YmxlIGRmTGFz dENvdW50KTsKCmNvbnN0IGNoYXIgKiBHREJGZXRjaE1ldGFEYXRhRW50cnkoRklMRSAqLCBpbnQs IGludCxjb25zdCBjaGFyICopOwp2b2lkIEdEQlNldE1ldGFEYXRhRW50cnkoRklMRSAqLCBpbnQs IGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyICosIGNvbnN0IGNoYXIgKik7CnZvaWQgR0RCRGVsZXRlTWV0YURhdGFFbnRyaWVzKEZJTEUg KiwgaW50LCBpbnQsY29uc3QgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBUQm9vbCk7Cgp2b2lkIEdEQldyaXRlSGlz dG9yeShGSUxFICosIGludCwgaW50LCBjb25zdCBjaGFyICopOwpjb25zdCBjaGFyICogR0RCUmVh ZEhpc3RvcnkoRklMRSAqLCBpbnQsIGludCwgaW50ICk7Cgp2b2lkIEdEQkJpbmFyeUlPKCBGSUxF ICosIGludCwgaW50LCBpbnQsIGludCwgdW5zaWduZWQgY2hhciAqICk7CmludCBHREJHZXRCaW5h cnlMZW5ndGgoIEZJTEUgKiwgaW50ICk7Cgp2b2lkIEdEQkpPTFRIYXJkU3luYyggRklMRSAqLCBU Qm9vbCBiRGVzdHJveUltYWdlTGF5ZXJzICk7Cgp2b2lkIEdEQkpPTFRGaWxsQ2hhbm5lbHNBZGRl ZExpc3QoIEZJTEUqIGZwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQqIHBhbkNoYW5NYXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBuTmV3Q2hhbm5lbENvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgbk9sZENoYW5uZWxDb3VudCApOwojIDE5MjggIi4uLy4u Ly4uL2xpYi9nZGIuaCIKVEJvb2wgR0RCQXNzaWduQWxsUElEcyggRklMRSogZnAgKTsKClRCb29s IEdEQkF1dG9TZXRDaGFuUElEKCBGSUxFKiBmcCwgaW50IG5DaGFuTnVtYmVyLCB1aW50MzIgKnB1 UElEICk7ClRCb29sIEdEQkdldENoYW5QSUQoIEZJTEUqIGZwLCBpbnQgbkNoYW5OdW1iZXIsIHVp bnQzMiAqcHVQSUQgKTsKaW50IEdEQkZpbmRDaGFuRnJvbVBJRCggRklMRSogZnAsIHVpbnQzMiBu UElEICk7CgpUQm9vbCBTZXRDaGFuQ1JDKEZJTEUgKmZwLCBpbnQgbkNoYW5OdW1iZXIsIHVpbnQz MiAqcHVQSUQgKTsKVEJvb2wgR2V0Q2hhbkNSQyggRklMRSogZnAsIGludCBuQ2hhbk51bWJlciwg dWludDMyICpwdVBJRCApOwppbnQgRmluZENoYW5Gcm9tQ1JDKCBGSUxFKiBmcCwgdWludDMyIG5Q SUQgKTsKClRCb29sIEdlbmVyYXRlQ1JDKEZJTEUgKmZwLCBpbnQgbkNoYW5uZWwsIHVpbnQzMiAq bkNSQyk7CgoKdm9pZCBHREJKT0xUUmVtYXBBbmRDb21taXRDaGFubmVsRGVsZXRpb25zKCBGSUxF KiBmcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50KiBwYW5DaGFuTWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgbk5ld0NoYW5uZWxDb3VudCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5PbGRDaGFubmVsQ291bnQg KTsKCnZvaWQgR0RCSk9MVFJlbWFwQW5kQ29tbWl0Q2hhbm5lbEFkZGl0aW9ucyhGSUxFKiBmcCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogcGFuQ2hhbk1h cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuTmV3Q2hh bm5lbENvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IG5PbGRDaGFubmVsQ291bnQpOwoKCgoKClRCb29sIEdEQlRlc3RDYXBhYmlsaXR5KCBHREJMYXll ciAsIEdEQkZsYWdzICk7CiMgMTk2NCAiLi4vLi4vLi4vbGliL2dkYi5oIgppbnQgR0RCR2V0UHJv amVjdGlvbkluZm8oIEdEQkxheWVyICwgUHJvakluZm9fdCAqICk7CnZvaWQgR0RCU2V0UHJvamVj dGlvbkluZm8oIEdEQkxheWVyICwgUHJvakluZm9fdCAqICk7CgpHREJMYXllciBHREJHZXRMYXll ciggRklMRSAqLCBpbnQgKTsKR0RCTGF5ZXJUeXBlIEdEQkdldExheWVyVHlwZSggR0RCTGF5ZXIg aExheWVyLCBUQm9vbCBiRG9TY2FuSWZVbmtub3duICk7CkdEQkxheWVyIEdEQkNyZWF0ZUxheWVy KCBGSUxFICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIgKiBwc3pOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBjaGFyICogcHN6RGVzYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgY2hhciAqIHBzek9wdGlvbnMgKTsKCmludCBHREJMYXllcjJTZWdtZW50 KCBHREJMYXllciBoTGF5ZXIgKTsKaW50IEdEQkxheWVyMlR5cGUoIEdEQkxheWVyICk7CkZJTEUg KiBHREJMYXllcjJmcCggR0RCTGF5ZXIgKTsKCnZvaWQgR0RCRGVsZXRlTGF5ZXIoIEZJTEUgKmZw LCBpbnQgblNlZ21lbnQgKTsKCkdEQlNoYXBlSWQgR0RCR2V0Rmlyc3QoR0RCTGF5ZXIgKTsKR0RC U2hhcGVJZCBHREJHZXROZXh0KEdEQkxheWVyICwgR0RCU2hhcGVJZCk7CgoKCgpHREJTaGFwZUlk ICogR0RCUXVlcnkoIEdEQkxheWVyIGhMYXllciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCAqcG5PdXRTaGFwZUNvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgR0RCU2hhcGVJZCAqcGFoU2hhcGVJZHMsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgbkluU2hhcGVDb3VudCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBzekV4cHJlc3Npb24gKTsKCkdEQlNoYXBlSWQg KiBHREJRdWVyeUxheWVyKCBHREJMYXllciAsIGludCAqcG5Db3VudCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RCU2hhcGVJZCAqLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbkNvdW50LCBHREJTZWFyY2hUeXBlLCAuLi4g KTsKCnZvaWQgR0RCRmluZEV4dGVudHMoR0RCVmVydGV4ICpwYXNWZXJ0aWNlcywgaW50IG5Db3Vu dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEQlZlcnRleCAqcHNNaW4sIEdEQlZl cnRleCAqcHNNYXgpOwpUQm9vbCBHREJGaW5kU2hhcGVFeHRlbnRzKEdEQkxheWVyLCBHREJTaGFw ZUlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RCVmVy dGV4ICosIEdEQlZlcnRleCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVEJvb2wgYkRpc3BsYXlFcnJvcik7CnZvaWQgR0RCRmluZEV4dGVudHMyKEdEQlZl cnRleCAqcGFzVmVydGljZXMsIGludCBuQ291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgR0RCVmVydGV4ICpwc01pbiwgR0RCVmVydGV4ICpwc01heCk7CnZvaWQgR0RCTWFrZU1p bk1heChHREJWZXJ0ZXggKnBzTWluLCBHREJWZXJ0ZXggKnBzTWF4KTsKaW50IEdEQkZpbmROZWFy ZXN0VmVydGV4KEdEQkxheWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEdEQlNoYXBlSWQsIEdEQlZlcnRleCAqKTsKCkdEQlNlYXJjaCAqIEdEQlNldFNl YXJjaENyaXRlcmlhKEdEQkxheWVyICwgR0RCU2VhcmNoVHlwZSwgLi4uKTsKR0RCU2hhcGVJZCBH REJGaW5kRmlyc3QoR0RCU2VhcmNoICosIEdEQlNoYXBlSWQgKiwgaW50KTsKR0RCU2hhcGVJZCBH REJGaW5kTmV4dChHREJTZWFyY2ggKixHREJTaGFwZUlkICosIGludCk7CnZvaWQgR0RCUmVsZWFz ZUNyaXRlcmlhKEdEQlNlYXJjaCAqKTsKCkdEQlNoYXBlSWQgR0RCQ3JlYXRlU2hhcGUoIEdEQkxh eWVyICwgR0RCU2hhcGVJZCk7CnZvaWQgR0RCRGVsZXRlU2hhcGUoIEdEQkxheWVyICwgR0RCU2hh cGVJZCApOwpHREJTaGFwZUlkIEdEQlVuRGVsZXRlU2hhcGUoIEdEQkxheWVyICwgR0RCU2hhcGVJ ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHREJTaGFwZSAq cHNTaGFwZSApOwoKR0RCVmVydGV4ICogR0RCR2V0VmVydGljZXMoR0RCTGF5ZXIgLCBHREJTaGFw ZUlkLCBpbnQgKnBuQ291bnQgKTsKR0RCVmVydGV4ICogR0RCR2V0VmVydGljZXNSZWYoR0RCTGF5 ZXIsIEdEQlNoYXBlSWQsIGludCAqcG5Db3VudCk7CnZvaWQgR0RCU2V0VmVydGljZXMoR0RCTGF5 ZXIgLCBHREJTaGFwZUlkLCBpbnQgbkNvdW50LCBHREJWZXJ0ZXggKik7CkdEQlZlcnRleCAqIEdE QlZlcnRleENvcHkoR0RCVmVydGV4ICosIGludCBuQ291bnQpOwoKaW50IEdEQkdldE51bUZpZWxk cyhHREJMYXllcik7CmludCBHREJHZXRGaWVsZEluZGV4KEdEQkxheWVyLCBjb25zdCBjaGFyICop OwppbnQgR0RCR2V0RmllbGRJbmRleFJlZ2V4KEdEQkxheWVyLCBjb25zdCBjaGFyICosCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQsIFRCb29sKTsKY29uc3Qg Y2hhciAqIEdEQkdldEZpZWxkTmFtZShHREJMYXllciwgaW50KTsKCmNvbnN0IGNoYXIgKiBHREJH ZXRGaWVsZERlc2MoR0RCTGF5ZXIgaExheWVyLCBpbnQgaUZpZWxkKTsKdm9pZCBHREJTZXREZWZh dWx0KEdEQkxheWVyIGhMYXllciwgaW50IGlGaWVsZCwgR0RCRmllbGQgKnB1VmFsdWUpOwp2b2lk IEdEQlNldEZpZWxkRGVzYyhHREJMYXllciBoTGF5ZXIsIGludCBpRmllbGQsIGNoYXIgKnBzekRl c2MpOwp2b2lkIEdEQlNldEZpZWxkTmFtZShHREJMYXllciBoTGF5ZXIsIGludCBpRmllbGQsIGNo YXIgKnBzek5hbWUpOwp2b2lkIEdEQlNldEZpZWxkRm9ybWF0KEdEQkxheWVyIGhMYXllciwgaW50 IGlGaWVsZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBz ekZvcm1hdCk7CgoKY29uc3QgY2hhciAqIEdEQkdldEZpZWxkRm9ybWF0KEdEQkxheWVyLCBpbnQp OwppbnQgR0RCR2V0RmllbGRXaWR0aChHREJMYXllciwgaW50LCBpbnQgKiwgVEJvb2wgKik7CmNv bnN0IGNoYXIgKiBHREJHZW5GaWVsZEZvcm1hdChHREJGaWVsZFR5cGUsIGludCwgaW50LCBUQm9v bCApOwp2b2lkIEdEQkluaXRpYWxpemVGaWVsZEZvcm1hdHMoR0RCTGF5ZXIgcHNMYXllcik7CgpH REJGaWVsZFR5cGUgR0RCR2V0RmllbGRUeXBlIChHREJMYXllciwgaW50KTsKVEJvb2wgR0RCSXNT eXNGaWVsZCAoY2hhciAqLCBHREJMYXllciwgaW50KTsKR0RCRmllbGQgKiBHREJHZXRGaWVsZERl ZmF1bHQgKEdEQkxheWVyLCBpbnQpOwp2b2lkIEdEQlNldEZpZWxkVmFsdWUgKEdEQkxheWVyLCBH REJTaGFwZUlkLCBpbnQsIEdEQkZpZWxkKik7CmRvdWJsZSBHREJTZXRWYWx1ZSAoR0RCTGF5ZXIs IEdEQlNoYXBlSWQsIGludCwgZG91YmxlICk7CkdEQkZpZWxkICogR0RCR2V0RmllbGRWYWx1ZSAo R0RCTGF5ZXIsIEdEQlNoYXBlSWQsIGludCk7CkdEQkZpZWxkICogR0RCR2V0RmllbGRWYWx1ZVF1 aWNrbHkoR0RCTGF5ZXIgLCBHREJTaGFwZSAqLCBpbnQpOwpkb3VibGUgR0RCR2V0VmFsdWUgKEdE QkxheWVyLCBHREJTaGFwZUlkLCBpbnQpOwpjaGFyICogR0RCR2V0VmFsdWVTdHJpbmcgKEdEQkxh eWVyLCBHREJTaGFwZUlkLCBpbnQpOwp2b2lkIEdEQlNldFZhbHVlU3RyaW5nIChHREJMYXllciwg R0RCU2hhcGVJZCwgaW50LCBjaGFyICopOwp2b2lkIEdEQlNldEZpZWxkVmFsdWVTdHJpbmcoR0RC RmllbGQgKnB1RmllbGQsIEdEQkZpZWxkVHlwZSBlVHlwZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnBzelZhbHVlKTsKCgoKCnZvaWQgR0RC U2V0RmllbGRNaXNzaW5nVmFsdWUoR0RCTGF5ZXIsIGludCwgY2hhciAqKTsKY2hhciAqR0RCR2V0 RmllbGRNaXNzaW5nVmFsdWUoR0RCTGF5ZXIsIGludCk7CnZvaWQgR0RCU2V0RmllbGRSZWFkT25s eShHREJMYXllciwgaW50LCBUQm9vbCk7ClRCb29sIEdEQklzRmllbGRSZWFkT25seShHREJMYXll ciwgaW50KTsKdm9pZCBHREJTZXRGaWVsZEhpZGRlbihHREJMYXllciwgaW50LCBUQm9vbCk7ClRC b29sIEdEQklzRmllbGRIaWRkZW4oR0RCTGF5ZXIsIGludCk7CnZvaWQgR0RCU2V0RmllbGRBbGlh cyhHREJMYXllciwgaW50LCBjaGFyICopOwpjaGFyICpHREJHZXRGaWVsZEFsaWFzKEdEQkxheWVy LCBpbnQpOwp2b2lkIEdEQlNldEZpZWxkVmFsaWRhdGlvblJ1bGUoR0RCTGF5ZXIsIGludCwgY2hh ciAqKTsKY2hhciAqR0RCR2V0RmllbGRWYWxpZGF0aW9uUnVsZShHREJMYXllciwgaW50KTsKdm9p ZCBHREJTZXRGaWVsZFVuaXF1ZVZhbHVlcyhHREJMYXllciwgaW50LCBUQm9vbCk7ClRCb29sIEdE Qkhhc0ZpZWxkVW5pcXVlVmFsdWVzKEdEQkxheWVyLCBpbnQpOwoKR0RCRmllbGQgKiBHREJHZXRS ZWNvcmQgKEdEQkxheWVyLCBHREJTaGFwZUlkKTsKdm9pZCBHREJTZXRSZWNvcmQgKEdEQkxheWVy LCBHREJTaGFwZUlkLCBHREJGaWVsZCAqKTsKR0RCRmllbGQgKiBHREJHZXRSZWNvcmRSZWYgKEdE QkxheWVyLCBHREJTaGFwZUlkKTsKaW50IEdEQkFkZEZpZWxkIChHREJMYXllciwgY2hhciAqcHN6 TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHREJGaWVsZFR5 cGUgZVR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RCRmll bGQgKnBzRGVmYXVsdCk7CgoKR0RCRmllbGQgKiBHREJSZWNvcmRDb3B5IChHREJMYXllciwgR0RC RmllbGQgKik7CkdEQkZpZWxkICogR0RCUmVjb3JkQWxsb2MgKEdEQkxheWVyKTsKdm9pZCBHREJS ZWNvcmRGcmVlIChHREJMYXllciwgR0RCRmllbGQgKik7CgoKdm9pZCBHREJGaWVsZEZyZWUgKEdE QkZpZWxkVHlwZSwgR0RCRmllbGQgKik7CkdEQkZpZWxkIEdEQkZpZWxkQ29weSAoR0RCRmllbGRU eXBlLCBHREJGaWVsZCAqKTsKVEJvb2wgR0RCRmllbGRWYWx1ZUlkZW50aWNhbChHREJGaWVsZFR5 cGUgZVR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBHREJGaWVsZCogcHNGaWVsZDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBHREJGaWVsZCogcHNGaWVsZDIpOwoKdm9pZCBHREJGbHVzaENhY2hlIChH REJMYXllciBwc0xheWVyKTsKCkdEQlNoYXBlICogR0RCU2hhcGVBbGxvYyhHREJMYXllcik7CnZv aWQgR0RCU2hhcGVGcmVlKEdEQkxheWVyLCBHREJTaGFwZSAqKTsKR0RCU2hhcGUgKiBHREJHZXRT aGFwZShHREJMYXllciwgR0RCU2hhcGVJZCk7CgpHREJTaGFwZSAqIEdEQkdldFNoYXBlUmVmKEdE QkxheWVyLCBHREJTaGFwZUlkKTsKdm9pZCBHREJTZXRTaGFwZShHREJMYXllciwgR0RCU2hhcGVJ ZCwgR0RCU2hhcGUqKTsKR0RCU2hhcGUgKiBHREJTaGFwZUNvcHkoR0RCTGF5ZXIsIEdEQlNoYXBl ICopOwpHREJWZXJ0ZXggKiBHREJGaW5kQ2xvc2VzdFBvaW50KCBHREJMYXllciwgR0RCU2hhcGVJ ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEQlZlcnRleCwgaW50 ICosIGRvdWJsZSAqLCBpbnQgKiApOwpHREJWZXJ0ZXggKkdEQkZpbmRDbG9zZXN0RnJvbUFycmF5 KEdEQlZlcnRleCAqcHNQb2ludCwKICAgICAgICAgICAgICAgICAgICAgICAgR0RCVmVydGV4ICpw YXNWZXJ0aWNlcywgaW50IG5Db3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpuTGVm dEluZGV4LCBkb3VibGUgKmRmTWluRGlzdCwgaW50ICpuVmVydGV4SW5kZXgpOwoKdm9pZCBfR0RC U2V0Q29vcmRGcm9tQXR0cmliKCBHREJMYXllciwgR0RCU2hhcGUgKiApOwp2b2lkIF9HREJTZXRB dHRyaWJGcm9tQ29vcmQoIEdEQkxheWVyLCBHREJTaGFwZSAqICk7Cgp2b2lkIEdEQk1vZENhY2hl Rmx1c2hGdW5jKENDSEhhbmRsZSBwc0NhY2hlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIENDSEVudHJ5ICpwc0VudHJ5LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBEYXRhKTsKCnZvaWQgR0RCUmVhZENh Y2hlRmx1c2hGdW5jKENDSEhhbmRsZSBwc0NhY2hlLCBDQ0hFbnRyeSAqcHNFbnRyeSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcERhdGEpOwoKaW50IEdEQkdl dE51bVNoYXBlcyhHREJMYXllcik7CnZvaWQgX0dEQlNldE51bVNoYXBlcyhHREJMYXllciwgaW50 KTsKdm9pZCBHREJTZXROdW1PZlNoYXBlc0J5VHlwZShHREJMYXllciBoTGF5ZXIsIGludCBuUG9p bnRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBuTGluZXMsIGludCBuQXJlYXMpOwp2b2lkIEdEQkdldE51bU9mU2hhcGVzQnlUeXBlKEdEQkxh eWVyIGhMYXllciwgaW50KiBwblBvaW50cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQqIHBuTGluZXMsIGludCogcG5BcmVhcyk7CkdEQkxheWVy VHlwZSBHREJHZXRTaGFwZVR5cGUoR0RCTGF5ZXIgaExheWVyLCBHREJTaGFwZUlkIGhFbnRpdHkp Owp2b2lkIEdEQlVwZGF0ZVNoYXBlQnlUeXBlKEdEQkxheWVyIGhMYXllciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHREJTaGFwZUlkIGhFbnRpdHksIGlu dCBuT3BlcmF0aW9uKTsKCkdEQkZhdFNoYXBlICogR0RCR2V0RmF0U2hhcGUoR0RCTGF5ZXIsIEdE QlNoYXBlSWQpOwp2b2lkIEdEQlNldEZhdFNoYXBlKEdEQkxheWVyLCBHREJTaGFwZUlkLCBHREJG YXRTaGFwZSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg Kik7CnZvaWQgR0RCRmF0U2hhcGVGcmVlKEdEQkZhdFNoYXBlICpwc0ZhdFNoYXBlKTsKR0RCRmF0 U2hhcGUgKiBHREJGYXRTaGFwZUFsbG9jKEdEQkxheWVyKTsKCgp2b2lkICogR0RCR2V0UmVwVGFi bGUoR0RCTGF5ZXIpOwp2b2lkIEdEQlNldFJlcFRhYmxlKEdEQkxheWVyLCB2b2lkICopOwoKR0RC TGF5ZXIgR0RCQ29weUxheWVyU3RydWN0dXJlKEdEQkxheWVyIFNyYywgR0RCTGF5ZXIgRGVzdCk7 ClRCb29sIEdEQkxheWVySGFzTm9HZW9ncmFwaHkoR0RCTGF5ZXIgaExheWVyKTsKClRCb29sIEdE QkdldEV4dGVudHMoR0RCTGF5ZXIgcHNMYXllciwgR0RCVmVydGV4ICpwc01pbiAsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RCVmVydGV4ICpwc01heCk7Cgp2b2lk IF9HREJTZXRFeHRlbnRzKEdEQkxheWVyIHBzTGF5ZXIsIEdEQlZlcnRleCAqcHNNaW4sCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEdEQlZlcnRleCAqcHNNYXgpOwpUQm9vbCBHREJDYWxj RXh0ZW50cyhHREJMYXllciBwc0xheWVyLCBHREJWZXJ0ZXggKnBzTWluLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHREJWZXJ0ZXggKnBzTWF4KTsKVEJvb2wgR0RC R2V0T3ZlcmFsbEV4dGVudHMoIEZJTEUgKiwgUHJvakluZm9fdCAqICk7Cgp2b2lkIEdEQlNldEN1 cnJlbnRBcmVhRXh0ZW50cyhHREJWZXJ0ZXggKnBzTWluLCBHREJWZXJ0ZXggKnBzTWF4KTsKdm9p ZCBHREJHZXRDdXJyZW50QXJlYUV4dGVudHMoR0RCVmVydGV4ICpwc01pbiwgR0RCVmVydGV4ICpw c01heCk7CnZvaWQgR0RCU2V0Q3VycmVudEFyZWFIYXNGaXhlZEV4dGVudHMoVEJvb2wgYkZpeGVk KTsKVEJvb2wgR0RCQ3VycmVudEFyZWFIYXNGaXhlZEV4dGVudHModm9pZCk7CgpUQm9vbCBHREJH ZXRWZWNBZGp1c3RlZFhZU2l6ZSggRklMRSAqLCBpbnQgKiwgaW50ICogKTsKCnZvaWQgR0RCQWRk QXR0SW5mbyggR0RCTGF5ZXIsIGNvbnN0IGNoYXIgKiwgR0RCRmllbGRUeXBlLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgR0RCRmllbGQgKik7CkdEQkRlZm4gKiBHREJEZWZpbmVOZXdG aWVsZChHREJMYXllciBwc0xheWVyLCBjb25zdCBjaGFyICpwc3pGaWVsZE5hbWUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBzekZpZWxkRGVzYywgR0RCRmllbGRUeXBl IGVGaWVsZFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEQkZpZWxkICpwdUZpZWxk LCBjb25zdCBjaGFyICpwc3pGb3JtYXQsIC4uLik7CgpHREJEZWZuICogR0RCR2V0RmllbGREZWZu KEdEQkxheWVyLCBpbnQpOwpHREJEZWZuICogR0RCQWRkRmllbGREZWZuKEdEQkxheWVyICk7CnZv aWQgR0RCRGVmbkZyZWUoIEdEQkRlZm4gKiBwc0RlZm4gKTsKCnZvaWQgR0RCRnJlZUF0dEluZm8o R0RCTGF5ZXIpOwp2b2lkIEdEQkZyZWVMYXllclN0cnVjdChHREJMYXllcik7CgpGSUxFICogR0RC Q3JlYXRlTWVtQ29weShHREJMYXllciBwc0xheWVyKTsKRklMRSAqIEdEQkNyZWF0ZUNvbXBNZW1D b3B5KEdEQkxheWVyLCBjb25zdCBjaGFyICopOwoKaW50ICogR0RCQ291bnRlZEludExpc3RDb3B5 KGludCAqKTsKaW50IEdEQkdldFNlZ21lbnROdW0oR0RCTGF5ZXIpOwoKR0RCTGF5ZXIgKiBHREJB cHBlbmRMYXllckFycmF5KEdEQkxheWVyICwgR0RCTGF5ZXIgKiAsIGludCAqKSA7CkdEQkxheWVy IEdEQkluY3JlYXNlTGF5ZXJBcnJheShGSUxFICosIEdEQkxheWVyICoqLCBpbnQgKik7CkdEQkxh eWVyIEdEQkxheWVyQWxsb2MoRklMRSAqZnApOwp2b2lkIEdEQkxheWVyRnJlZSggR0RCTGF5ZXIg KTsKCkdEQlNoYXBlICogR2V0R0RCU2hhcGUoVkluZm9fdCAqLCBHREJTaGFwZUlkKTsKdm9pZCBT ZXRHREJTaGFwZShWSW5mb190ICosIEdEQlNoYXBlKik7ClRCb29sIEdEQlNldFVwZGF0ZU1vZGUo R0RCTGF5ZXIsVEJvb2wpOwoKCgoKR0RCU2hhcGUgKiBHREJHZXRSaW5nUmVmKCBHREJMYXllciwg R0RCU2hhcGUgKiwgaW50LCBpbnQzMiAqICk7CkdEQlNoYXBlICogR0RCR2V0UmluZyggR0RCTGF5 ZXIsIEdEQlNoYXBlICosIGludCwgaW50MzIgKiApOwppbnQgR0RCQWRkUmluZ1RvU2hhcGUoIEdE QkxheWVyLCBHREJTaGFwZSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgR0RCVmVydGV4ICosIGludCApOwpUQm9vbCBHREJHZXRSaW5nSW5mbyggR0RCTGF5ZXIs IEdEQlNoYXBlICosIGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCAqLCBpbnQgKiwgaW50MzIgKiApOwp2b2lkIEdEQkRlbGV0ZVJpbmcoIEdEQkxheWVyLCBH REJTaGFwZSAqLCBpbnQgKTsKaW50IEdEQkdldFJpbmdDb3VudCggR0RCTGF5ZXIsIEdEQlNoYXBl ICosIGludDMyICogKTsKdm9pZCBHREJTZXRSaW5nVmVydGljZXMoR0RCTGF5ZXIgaExheWVyLCBH REJTaGFwZSogcHNTaGFwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCBpUmluZywgR0RCVmVydGV4ICpwYXNWZXJ0aWNlcywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuQ291bnQpOwp2b2lkIENDTFJpbmdUZXN0KCB2 b2lkICk7CkdEQlZlcnRleCAqR0RCQ29tYmluZVZlcnRpY2VzKEdEQkxheWVyIHBzTGF5ZXIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RCU2hhcGVJZCogcGFuU2hhcGVJZHMsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5OdW1TaGFwZXMsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50KiBwbkNvdW50KTsKCgoKCnZvaWQgSURCQ2xlYXJTaGFw ZXMoR0RCTGF5ZXIgKTsKVEJvb2wgSURCQ29udmVydFRvTmV3KEdEQkxheWVyICk7ClRCb29sIElE QkNsZWFyTGF5ZXIoR0RCTGF5ZXIpOwoKVEJvb2wgR0RCQ2xlYXJMYXllcihHREJMYXllcik7Cgp2 b2lkIElEQkJ1ZmZBbGxvYygpOwp2b2lkIElEQkJ1ZmZSZWFsbG9jKGxvbmcpOwoKCgoKCgp2b2lk IE1SWUNsZWFyRWRpdExpc3QoR0RCTGF5ZXIpOwpHREJTaGFwZUlkICogTVJZR2V0RWRpdExpc3Qo R0RCTGF5ZXIsIGludCAqKTsKdm9pZCBNUllJbml0RWRpdExpc3QoR0RCTGF5ZXIpOwp2b2lkIE1S WURlc3Ryb3lFZGl0TGlzdChHREJMYXllcik7CkdEQlNoYXBlICogTVJZR2V0U2hhcGUoR0RCTGF5 ZXIsIEdEQlNoYXBlSWQpOwoKCgoKCkdEQlF1YWRUcmVlICogR0RCUXVhZFRyZWVBbGxvYyhHREJM YXllciBoTGF5ZXIsIEdEQlZlcnRleCAqcHNNaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEdEQlZlcnRleCAqcHNNYXgsIGludCBuRGVwdGgpOwp2b2lkIEdEQlF1YWRUcmVlRnJlZShH REJRdWFkVHJlZSAqcHNRVCk7ClRCb29sIEdEQlF1YWRUcmVlVXBkYXRlKEdEQlF1YWRUcmVlICpw c1FULCBHREJTaGFwZUlkIGhTaGFwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdE QlZlcnRleCAqcHNNaW4sIEdEQlZlcnRleCAqcHNNYXgpOwoKdm9pZCBHREJRdWFkVHJlZURlbGV0 ZShHREJRdWFkVHJlZSAqcHNRVCwgR0RCU2hhcGVJZCBoU2hhcGUpOwoKR0RCUXVhZE5vZGUgKiBH REJVcFF1YWRUcmVlKEdEQlF1YWROb2RlICpwc0N1cnJlbnQsIEdEQlF1YWROb2RlICpwc1N0YXJ0 KTsKR0RCU2hhcGVJZCBHREJJbmNsdXNpdmVTZWFyY2goR0RCUVRJdGVyYXRvciAqcHNJdGVyKTsK dm9pZCBHREJFbnF1YWRMYXllcihHREJMYXllcik7CnZvaWQgR0RCRGVxdWFkTGF5ZXIoR0RCTGF5 ZXIpOwpHREJRdWFkTm9kZSAqKiBHREJHZXRJbmNsdXNpdmVOb2RlTGlzdChHREJRdWFkVHJlZSAq LCBHREJWZXJ0ZXggKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHREJW ZXJ0ZXggKik7CgoKCgpUQm9vbCBHREJTZXRSZXBDb2RlRmllbGQoR0RCTGF5ZXIsIGNoYXIgKik7 CmludCBHREJHZXRSZXBDb2RlKEdEQkxheWVyLCBHREJTaGFwZUlkKTsKdm9pZCBHREJTZXRSZXBD b2RlKEdEQkxheWVyLCBHREJTaGFwZUlkLCBpbnQpOwoKVEJvb2wgR0RCU2V0R3JvdXBJZEZpZWxk KEdEQkxheWVyLCBjaGFyICopOwppbnQgR0RCR2V0R3JvdXBJZChHREJMYXllciwgR0RCU2hhcGVJ ZCk7CnZvaWQgR0RCU2V0R3JvdXBJZChHREJMYXllciwgR0RCU2hhcGVJZCwgaW50KTsKClRCb29s IEdEQlNldENoaWxkTGlzdEZpZWxkKEdEQkxheWVyLCBjaGFyICopOwppbnQgKiBHREJHZXRDaGls ZExpc3QoR0RCTGF5ZXIsIEdEQlNoYXBlSWQpOwp2b2lkIEdEQlNldENoaWxkTGlzdChHREJMYXll ciwgR0RCU2hhcGVJZCwgaW50ICopOwoKVEJvb2wgR0RCU2V0VGV4dEZpZWxkKEdEQkxheWVyLCBj aGFyICopOwpjaGFyICogR0RCR2V0VGV4dChHREJMYXllciwgR0RCU2hhcGVJZCk7CmNoYXIgKiBH REJHZXRUZXh0UXVpY2tseShHREJMYXllciAsIEdEQlNoYXBlICopOwp2b2lkIEdEQlNldFRleHQo R0RCTGF5ZXIsIEdEQlNoYXBlSWQsIGNoYXIgKik7CgpUQm9vbCBHREJTZXRBbmdsZUZpZWxkKEdE QkxheWVyLCBjaGFyICopOwpUQm9vbCBHREJHZXRBbmdsZShHREJMYXllciwgR0RCU2hhcGVJZCwg ZG91YmxlICopOwpUQm9vbCBHREJHZXRBbmdsZVF1aWNrbHkoR0RCTGF5ZXIsIEdEQlNoYXBlICos IGRvdWJsZSAqKTsKdm9pZCBHREJTZXRBbmdsZShHREJMYXllciwgR0RCU2hhcGVJZCwgZG91Ymxl KTsKdm9pZCBHREJTZXRBbmdsZVVuaXQoR0RCTGF5ZXIsIEdEQkFuZ2xlVW5pdCk7CnZvaWQgR0RC U2V0QW5nbGVVbml0U3RyKEdEQkxheWVyLCBjaGFyKik7CkdEQkFuZ2xlVW5pdCBHREJHZXRBbmds ZVVuaXQoR0RCTGF5ZXIpOwpjaGFyICpHREJHZXRBbmdsZVVuaXRTdHIoR0RCTGF5ZXIpOwp2b2lk IEdEQkNvbnZlcnRBbmdsZShHREJBbmdsZVVuaXQsIEdEQkFuZ2xlVW5pdCwgZG91YmxlKik7CmNo YXIgKipHREJHZXRBbmdsZVVuaXRzTGlzdCgpOwoKVEJvb2wgR0RCU2V0SGVpZ2h0RmllbGQoR0RC TGF5ZXIsIGNoYXIgKik7CmRvdWJsZSBHREJHZXRIZWlnaHQoR0RCTGF5ZXIsIEdEQlNoYXBlSWQp OwpUQm9vbCBHREJHZXRIZWlnaHRRdWlja2x5KEdEQkxheWVyLCBHREJTaGFwZSAqLCBkb3VibGUg Kik7CnZvaWQgR0RCU2V0SGVpZ2h0KEdEQkxheWVyLCBHREJTaGFwZUlkLCBkb3VibGUpOwoKdm9p ZCBHREJJbml0U3BlY2lhbEZpZWxkcyhHREJMYXllcik7CnZvaWQgR0RCUmVJbml0U3BlY2lhbEZp ZWxkcyhHREJMYXllcik7CnZvaWQgR0RCU2V0U3lzdGVtRmllbGQoIEdEQkxheWVyLCBjb25zdCBj aGFyICosIGludCApOwppbnQgR0RCR2V0U3lzdGVtRmllbGQoIEdEQkxheWVyLCBjb25zdCBjaGFy ICogKTsKCgoKCgp2b2lkIEdEQkJ1aWxkR3JvdXBJbmRleChHREJMYXllciBoTGF5ZXIpOwp2b2lk IEdEQkRlc3Ryb3lHcm91cEluZGV4KEdEQkxheWVyIGhMYXllcik7ClRCb29sIEdEQkFkZFRvR3Jv dXAoR0RCTGF5ZXIgaExheWVyLCBHREJTaGFwZUlkIGhTaGFwZUlkKTsKR0RCR3JvdXAgR0RCR2V0 R3JvdXAoR0RCTGF5ZXIgaExheWVyLCBpbnQgaUdyb3VwSWQpOwpUQm9vbCBHREJEZWxldGVGcm9t R3JvdXAoR0RCTGF5ZXIgaExheWVyLCBHREJTaGFwZUlkIGhTaGFwZUlkKTsKVEJvb2wgR0RCVW5H cm91cChHREJMYXllciBoTGF5ZXIsIGludCBpR3JvdXBJZCk7CmludCBHREJGaW5kRnJlZUdyb3Vw SWQoR0RCTGF5ZXIgaExheWVyLCBpbnQgaUFkdmlzb3J5R3JvdXBJZCk7ClRCb29sIEdEQlBhY2tH cm91cHMoR0RCTGF5ZXIgaExheWVyKTsKaW50IEdEQkdyb3VwRW50aXRpZXMoIEdEQkxheWVyIGhM YXllciwgR0RCU2hhcGVJZCAqcGFoRW50aXRpZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgbkVudGl0aWVzICk7CgoKCgpHREJTaGFwZUlkICogR0RCR2V0Q2hpbGRMaXN0 Q29weShHREJMYXllciBoTGF5ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgR0RCU2hhcGVJZCBoRW50aXR5KTsKdm9pZCBHREJBdHRhY2hFbnRpdGllcyhHREJM YXllciBoTGF5ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg R0RCU2hhcGVJZCAqcGFoRW50aXRpZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IG5FbnRpdGllcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBHREJTaGFwZUlkIGhQYXJlbnRTaGFwZUlkKTsKR0RCU2hhcGVJZCBHREJG aW5kQ2hpbGRMaXN0UGFyZW50KEdEQkxheWVyIGhMYXllciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEQlNoYXBlSWQgaFNoYXBlSWQpOwpHREJTaGFw ZUlkICogR0RCR2V0QXR0YWNoZWRFbnRpdGllcyhHREJMYXllciBoTGF5ZXIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RCU2hhcGVJZCBoU2hhcGVJ ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg KnBuRW50aXRpZXMpOwpHREJTaGFwZUlkICogR0RCRGV0YWNoRW50aXRpZXMoR0RCTGF5ZXIgaExh eWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHREJTaGFw ZUlkIGhFbnRpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCAqcG5FbnRpdGllcyk7CnZvaWQgR0RCRGV0YWNoQ2hpbGRMaXN0RW50aXRpZXMoR0RCTGF5 ZXIgaExheWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBHREJTaGFwZUlkIGhFbnRpdHkpOwoKCgoKdm9pZCAqIExvYWRHREJEeW5Gb3JtYXQo Y29uc3QgY2hhciAqcHN6Rm9ybWF0TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIgKnBzekJhc2VOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgY2hhciAqcHN6UmVnaXN0ZXJGdW5jLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IG5WZXJzaW9uICwgY29uc3QgY2hhciAqIHBzekZpbGVOYW1lKTsKCnZv aWQgQUxMUmVnaXN0ZXIoIHZvaWQgKTsKdm9pZCBWZWN0b3JSZWdpc3Rlciggdm9pZCApOwp2b2lk IEltYWdlUmVnaXN0ZXIoIHZvaWQgKTsKdm9pZCBDaGVhcFJlZ2lzdGVyKCB2b2lkICk7Cgp2b2lk IEdEQlJlZ2lzdGVyV2l0aEpPTFRSZWdpc3RyeSh2b2lkKTsKCkdEQlRlc3RJbmZvX3QgKiBHREJU ZXN0SW5mb01hcnNoYWwoIGNvbnN0IGNoYXIgKiwgRklMRSAqICk7CnZvaWQgR0RCVGVzdEluZm9E ZXN0cm95KCBHREJUZXN0SW5mb190ICogKTsKCmludCBHREJGaWxlbmFtZTJGb3JtYXQoIGNoYXIg KnBzekZpbGVOYW1lICk7CgoKCgp0eXBlZGVmIHN0cnVjdCBzZWd0eXBlIHsKICBpbnQgbkNvZGU7 CiAgY2hhciAqcHN6U2hvcnROYW1lOwogIGNoYXIgKnBzekxvbmdOYW1lOwp9IFNFR1R5cGU7CgoK ZXh0ZXJuIFNFR1R5cGUgZ2FzVHlwZVRhYmxlW107CgpleHRlcm4gR0RCSW5mb190ICpHREJJbmZv WzIwMF07CiMgMjM3OSAiLi4vLi4vLi4vbGliL2dkYi5oIgp0eXBlZGVmIGVudW0KewogICAgUGFy c2VyVHlwZUZpbGUsCiAgICBQYXJzZXJUeXBlU3RyaW5nCn0gUGFyc2VyVHlwZTsKCgp0eXBlZGVm IHN0cnVjdAp7CiAgICBQYXJzZXJUeXBlIFR5cGU7CiAgICB2b2lkICpTb3VyY2U7CgogICAgY2hh ciAqKlN0cmluZzsKICAgIGludCAqSUQ7CiAgICBpbnQgU2l6ZTsKCiAgICBpbnQgSW5kZXg7CgoK fSBQQVJTRVI7CiMgMjQxMSAiLi4vLi4vLi4vbGliL2dkYi5oIgpQQVJTRVIgKlBhcnNlckluaXQg KFBhcnNlclR5cGUpOwp2b2lkIFBhcnNlclRlcm0gKFBBUlNFUiAqKTsKdm9pZCBQYXJzZXJSZXNl dCAoUEFSU0VSICosIHZvaWQgKik7CnZvaWQgUGFyc2VyVG9rZW5SZWdpc3RlciAoUEFSU0VSICos IGNoYXIgKiosIGludCAqLCBpbnQpOwppbnQgUGFyc2VyVG9rZW5HZXQgKFBBUlNFUiAqLCBjaGFy ICopOwojIDI0NDEgIi4uLy4uLy4uL2xpYi9nZGIuaCIKdHlwZWRlZiBlbnVtCnsKICAgIEV4cHJU eXBlUHJpbWFyeSwKICAgIEV4cHJUeXBlQm9vbGVhbkFORCwKICAgIEV4cHJUeXBlQm9vbGVhbk9S LAogICAgRXhwclR5cGVCb29sZWFuTk9UCn0gRXhwclR5cGU7CgoKCgoKdHlwZWRlZiBlbnVtCnsK ICAgIFByaW1hcnlPcEVxdWFsLAogICAgUHJpbWFyeU9wTGVzcywKICAgIFByaW1hcnlPcEdyZWF0 ZXIsCiAgICBQcmltYXJ5T3BMZXNzRXF1YWwsCiAgICBQcmltYXJ5T3BHcmVhdGVyRXF1YWwsCiAg ICBQcmltYXJ5T3BOb3RFcXVhbAp9IFByaW1hcnlPcDsKCgoKCgoKCnR5cGVkZWYgc3RydWN0IEV4 cHIKewogICAgRXhwclR5cGUgVHlwZTsKICAgIHVuaW9uCiAgICB7CiAgICAgICAgc3RydWN0CiAg ICAgICAgewogICAgICAgICAgICBjaGFyICpOYW1lOwogICAgICAgICAgICBpbnQgTnVtOwogICAg ICAgICAgICBQcmltYXJ5T3AgT3A7CiAgICAgICAgICAgIGludCBJc0NoYXJWYWx1ZTsKICAgICAg ICAgICAgdW5pb24KICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY2hhciAqQ1ZhbHVlOwog ICAgICAgICAgICAgICAgc3RydWN0CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg ICAgY2hhciAqTmFtZTsKICAgICAgICAgICAgICAgICAgICBpbnQgTnVtOwogICAgICAgICAgICAg ICAgfSBGVmFsdWU7CiAgICAgICAgICAgIH0gVmFsdWU7CiAgICAgICAgfSBQcmltYXJ5OwoKICAg ICAgICBzdHJ1Y3QKICAgICAgICB7CiAgICAgICAgICAgIHN0cnVjdCBFeHByICpMZWZ0OwogICAg ICAgICAgICBzdHJ1Y3QgRXhwciAqUmlnaHQ7CiAgICAgICAgfSBCb29sZWFuOwogICAgfSBEYXRh Owp9IEVYUFI7CiMgMjUwNiAiLi4vLi4vLi4vbGliL2dkYi5oIgpFWFBSICpFeHBySW5pdFByaW1h cnkgKGNoYXIgKiwgUHJpbWFyeU9wLCBjaGFyICosIGludCk7CkVYUFIgKkV4cHJJbml0Qm9vbGVh biAoRXhwclR5cGUsIEVYUFIgKiwgRVhQUiAqKTsKdm9pZCBFeHByVGVybSAoRVhQUiAqKTsKdm9p ZCBFeHByU2V0TnVtIChFWFBSICosIGludCk7CnZvaWQgRXhwclNldEZWYWx1ZSAoRVhQUiAqLCBj aGFyICosIGludCk7CmludCBFeHBySXNGVmFsdWUgKEVYUFIgKik7CmludCBFeHBySXNTdHJpbmdD b25zdGFudCAoRVhQUiAqKTsKaW50IEV4cHJHZXRGTnVtIChFWFBSICopOwp2b2lkIEV4cHJHZXRQ cmltYXJ5IChFWFBSICosIGNoYXIgKiosIGludCAqLCBQcmltYXJ5T3AgKiwgY2hhciAqKik7Cmlu dCBFeHByRXZhbHVhdGUgKEVYUFIgKiwgaW50ICgqKShFWFBSICosIHZvaWQgKiksIHZvaWQgKik7 CmludCBFeHByVHJhdmVyc2UgKEVYUFIgKiwgaW50ICgqKShFWFBSICosIHZvaWQgKiksIHZvaWQg Kik7CgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgY2hhciAqTmFtZTsKICBjaGFyICpEZXNjcmlwdGlv bjsKCiAgaW50IE5TYW1wbGVzOwogIGludCBOQ2hhbm5lbHM7CgogIGludCAqQ2hhbm5lbDsKICBk b3VibGUgKk1lYW47CiAgZG91YmxlICpTdGREZXZpYXRpb247CiAgZG91YmxlICpMb3dlclBQQm91 bmQ7CiAgZG91YmxlICpVcHBlclBQQm91bmQ7CgogIGRvdWJsZSBEZXRlcm1pbmFudDsKICBkb3Vi bGUgVGhyZXNob2xkOwogIGRvdWJsZSBCaWFzOwoKICBkb3VibGUgKklDb3ZhcmlhbmNlOwoKICBk b3VibGUgKkNvdmFyaWFuY2U7CgogIGludCBFbmNvZGluZzsKfSBTaWduYXR1cmVfdDsKCgoKCgp2 b2lkIENoZWNrQ2hhbiggRklMRSAqLCBjaGFyICosIGludCAqLCBpbnQgKTsKdm9pZCBDaGVja1dp biggRklMRSAqLCBjaGFyICosIGludCAqICk7CiMgMjY0NCAiLi4vLi4vLi4vbGliL2dkYi5oIgp0 eXBlZGVmIGludCAoKlRpbGVSV0Z1bmMpKCBGSUxFICosIHZvaWQgKiwgaW50LCBpbnQsIHVuc2ln bmVkIGNoYXIgKiApOwp0eXBlZGVmIHZvaWQgKCpDaGFuUldGdW5jKSggRklMRSAqLCB2b2lkICos IGludCwgaW50LCB1bnNpZ25lZCBjaGFyICopOwoKdHlwZWRlZiBzdHJ1Y3QgewogIGludCBuTGFz dEFjY2VzczsKICBpbnQgblhTaXplOwogIGludCBuWVNpemU7CgogIGludCBuVGlsZXM7CiAgaW50 ICpwYW5UaWxlQWNjZXNzOwogIGludCAqcGFuVGlsZUlEOwogIHVuc2lnbmVkIGNoYXIgKipwYXBh YnlUaWxlOwoKICBUaWxlUldGdW5jIHBmbldyaXRlVGlsZTsKICBUaWxlUldGdW5jIHBmblJlYWRU aWxlOwogIHZvaWQgKnBGdW5jVG9rZW47Cn0gUmF3Q2hhblRpbGVJbmZvX3Q7Cgp0eXBlZGVmIEdE Qk92ZXJ2aWV3SW5mb190IFJhd092ZXJ2aWV3SW5mb190OwoKdHlwZWRlZiBzdHJ1Y3QgcmluZm8K ewogIHN0cnVjdCByaW5mbyAqbmV4dDsKICBGSUxFICpmcFJhdzsKICBpbnQgWFNpemU7CiAgaW50 IFlTaXplOwogIGludCBDaGFubmVsczsKICBpbnQgSW50ZXJsZWF2aW5nOwoKCiAgbG9uZyAqQ2hP ZmY7CiAgbG9uZyAqUGl4ZWxPZmZzZXQ7CiAgbG9uZyAqTGluZU9mZnNldDsKICBpbnQgKkRhdGFU eXBlOwogIGludCAqRGF0YVNpemU7CiAgY2hhciAqQnl0ZVN3YXBwZWQ7CgoKICBDaGFuUldGdW5j ICpXcml0ZUZ1bmM7CiAgQ2hhblJXRnVuYyAqUmVhZEZ1bmM7CiAgdm9pZCAqKkZ1bmNUb2tlbjsK CgogIGludCBOQml0bWFwczsKICBsb25nICpCaXRPZmZzZXQ7CiAgbG9uZyAqQml0TGluZU9mZnNl dDsKICBpbnQgKkJpdFNlZ21lbnQ7CiAgaW50ICpCaXRDb21wOwoKCiAgdW5zaWduZWQgY2hhciAq KlJhd0JpdEJ1ZjsKICBsb25nICpSYXdCaXRCdWZTaXplOwoKICBjaGFyICoqQXV4aWxhcnlJbmZv OwogIFRCb29sIGJBdXhpbGFyeU1vZGlmaWVkOwoKICB1bnNpZ25lZCBjaGFyICoqTU1hcFB0cjsK CiAgaW50IFJhd09wZW5lZDsKCgogIFJhd0NoYW5UaWxlSW5mb190ICoqcGFwc1RpbGVJbmZvOwoK CiAgaW50IG5PdmVydmlld3M7CiAgaW50IG5NYXhPdmVydmlld3M7CiAgUmF3T3ZlcnZpZXdJbmZv X3QgKnBhc092ZXJ2aWV3czsKICBUQm9vbCBiUmF3TWFuYWdlZE92ZXJ2aWV3czsKCn0gUmF3SW5m b190OwoKRklMRSAqIFJhd0NyZWF0ZSggY2hhciAqLCBpbnQsIGludCwgaW50LCBpbnQsIGNoYXIg KiApOwpGSUxFICogUmF3T3BlbiggY2hhciAqLCBjaGFyICosIGludCwgaW50LCBpbnQsIGludCwg aW50LCBsb25nICk7CkZJTEUgKiBSYXdSZW9wZW4oIEZJTEUgKiApOwp2b2lkIFJhd0RlZmluZSgg RklMRSAqLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgbG9uZyApOwppbnQgUmF3UHJvbW90ZSgg RklMRSAqICk7CmludCBSYXdDaGFuVHlwZSggRklMRSAqLCBpbnQgKTsKdm9pZCBSYXdTaXplSW5m byggRklMRSAqLCBpbnQgKiwgaW50ICosIGludCAqICk7CmludCBSYXdHZW9yZWZJTyggRklMRSAq LCBpbnQsIGNoYXIgKiwgZG91YmxlICosIGRvdWJsZSAqLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZG91YmxlICosIGRvdWJsZSAqICk7CmludCBSYXdQcm9qZWN0aW9uSU8oIEZJTEUg KiwgaW50LCBQcm9qSW5mb190ICogKTsKdm9pZCBSYXdTZXRQcm9qZWN0aW9uSW5mbyggR0RCTGF5 ZXIsIFByb2pJbmZvX3QgKiApOwppbnQgUmF3R2V0UHJvamVjdGlvbkluZm8oIEdEQkxheWVyLCBQ cm9qSW5mb190ICogKTsKdm9pZCBSYXdCeXRlQ2hhbklPKCBGSUxFICosIGludCwgaW50LCBpbnQs IGludCwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFy ICosIGludCwgaW50LCBpbnQsIGludCAqICk7CnZvaWQgUmF3SW50Q2hhbklPKCBGSUxFICosIGlu dCwgaW50LCBpbnQsIGludCwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dDMyICosIGludCwgaW50LCBpbnQsIGludCAqICk7CnZvaWQgUmF3UmVhbENoYW5JTyggRklMRSAq LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZmxvYXQgKiwgaW50LCBpbnQsIGludCwgaW50ICogKTsKdm9pZCBSYXdDaGFuSU9fMSggRklM RSAqLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgY2hhciAqLCBpbnQsIGludCwgaW50LCBpbnQgKTsKaW50IFJhd0No YW5JT19OKCBGSUxFICosIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICosIGludCwgaW50LCBpbnQgKiwgaW50 ICk7CnZvaWQgUmF3Q2hhbklPX01hcHBlZCggRklMRSAqLCBpbnQsIGludCwgaW50LCBpbnQsIGlu dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50LCB1bnNpZ25lZCBjaGFy ICosIGludCwgaW50LCBpbnQsIGludCApOwpUQm9vbCBSYXdDaGFuSU9fT3ZlcnZpZXcoIEZJTEUg KiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgY2hhciAqLCBpbnQsIGludCwgaW50LCBpbnQgKTsKdm9pZCBSYXdS ZWdpc3RlcigpOwp2b2lkIEZDTkNoYW5JT18xKCBGSUxFICosIGludCwgaW50LCBpbnQsIGludCwg aW50LCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICos IGludCwgaW50LCBpbnQsIGludCApOwp2b2lkIEZDTkNoYW5JT19UaWxlZCggRklMRSAqLCBpbnQs IGludCwgaW50LCBpbnQsIGludCwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGNoYXIgKiwgaW50LCBpbnQsIGludCwgaW50ICk7ClRCb29sIEZDTkNoYW5J T19OKCBGSUxFICosIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIHVuc2lnbmVkIGNoYXIg KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCwgaW50LCBpbnQgKiwgaW50ICk7 CnZvaWQgRkNOU2V0Q2hhbkluZm8oIEZJTEUgKiwgaW50LCBpbnQsIGludCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIENoYW5SV0Z1bmMsIENoYW5SV0Z1bmMsIHZvaWQgKiApOwp2 b2lkIEZDTlNldFRpbGVJbmZvKCBGSUxFICosIGludCwgaW50LCBpbnQsIGludCwgaW50LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlsZVJXRnVuYywgVGlsZVJXRnVuYywgdm9p ZCAqICk7CnZvaWQgUmF3U2V0Q2hhbkluZm8oIEZJTEUgKiwgaW50LCBsb25nLCBsb25nLCBsb25n LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50LCBpbnQgKTsKdm9pZCBSYXdT ZXRDaGFuQnl0ZVN3YXAoIEZJTEUgKiwgaW50LCBpbnQgKTsKaW50IFJhd0dldENoYW5JbmZvKCBG SUxFICosIGludCwgY2hhciAqLCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBsb25nICosIGxvbmcgKiwgbG9uZyAqLCBpbnQgKiApOwpUQm9vbCBSYXdHZXRUaWxlSW5mbygg RklMRSAqLCBpbnQsIGludCAqLCBpbnQgKiApOwoKdm9pZCBSYXdCaXRtYXBJTyggRklMRSAqLCBp bnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgY2hhciAqLCBpbnQsIGludCApOwp2b2lkIFJhd1NldEJpdG1hcEluZm8oIEZJ TEUgKiwgaW50LCBsb25nLCBsb25nLCBpbnQgKTsKCnZvaWQgUmF3TWVtQml0bWFwSU8oIEZJTEUg KiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiwgaW50LCBpbnQgKTsKdm9pZCBSYXdTZXRNZW1CaXRt YXBJbmZvKCBGSUxFICosIHVuc2lnbmVkIGNoYXIgKiwgbG9uZywgaW50LCBsb25nLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nLCBpbnQgKTsKCmludCBSYXdIaW50 KCBGSUxFICogKTsKdm9pZCBSYXdDbG9zZSggRklMRSAqICk7CnZvaWQgUmF3Q2xvc2VPdmVydmll d3MoIEZJTEUgKiApOwp2b2lkIFJhd1N5bmMoIEZJTEUgKiApOwpUQm9vbCBSYXdXcml0ZUF1eEZp bGUoIEZJTEUgKiApOwp2b2lkIFJhd1N3YXBCdWZmZXIoIHVuc2lnbmVkIGNoYXIgKiwgaW50LCBp bnQsIGludCApOwp2b2lkIFJhd1NlZ0Rlc2NJTyggRklMRSAqLCBpbnQsIGludCwgaW50LCBjaGFy ICogKTsKaW50IFJhd0NoYW5EZXNjSU8oIEZJTEUgKiwgaW50LCBpbnQsIGNoYXIgKiApOwp2b2lk IFJhd1NldEF1eERlZkluZm8oIEZJTEUgKiApOwpjaGFyICoqIFJhd01ldGFEYXRhSU8oIEZJTEUg KiwgaW50LCBpbnQsIGludCwgY2hhciAqKiApOwpjaGFyICoqIFJhd01ldGFEYXRhSU9XaXRoUENU KCBGSUxFICosIGludCwgaW50LCBpbnQsIGNoYXIgKiogKTsKCnVuc2lnbmVkIGNoYXIgKlJhd0dl dFRpbGUoIEZJTEUgKiBmcCwgaW50LCBpbnQsIGludCApOwp1bnNpZ25lZCBjaGFyICpSYXdVcGRh dGVUaWxlKCBGSUxFICogZnAsIGludCwgaW50LCBpbnQgKTsKdm9pZCBSYXdTeW5jVGlsZXMoIEZJ TEUgKiBmcCwgaW50ICk7CnZvaWQgUmF3V3JpdGVTeW5jVGlsZXMoIEZJTEUgKiBmcCwgaW50ICk7 Cgp2b2lkIFJhd1NldENoYW5PdmVydmlldyggRklMRSAqLCBpbnQsIEZJTEUgKiwgaW50LCBUQm9v bCwgVEJvb2wgKTsKdm9pZCBSYXdCdWlsZE92ZXJ2aWV3cyggRklMRSAqLCBpbnQsIGludCAqLCBp bnQsIFRCb29sLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTVBQcm9ncmVzc0Z1bmMsIHZv aWQgKiApOwpHREJPdmVydmlld0luZm9fdCAqCiAgICAgICAgICAgICAgICBSYXdHZXRPdmVydmll d3MoIEZJTEUgKiwgaW50ICogKTsKCgoKCgojIDEgIi4uLy4uLy4uL2xpYi9scmVmLmgiIDEKIyAy MCAiLi4vLi4vLi4vbGliL2xyZWYuaCIKZXh0ZXJuICJDIiB7Cgp0eXBlZGVmIHN0cnVjdAp7CiAg ICBGSUxFICpmcDsKICAgIGNoYXIgKnBzekZpbGVuYW1lOwogICAgaW50IG5SZWZUeXBlOwogICAg aW50IG5MYXllclR5cGU7CiAgICBpbnQgbkxheWVySW5kZXg7CiAgICBUQm9vbCBiUmVmZXJlbmNl ZDsKfSBHREJMUmVmOwoKdHlwZWRlZiBzdHJ1Y3QKewogICAgaW50IG5SZWZzOwogICAgR0RCTFJl ZiAqKnBhcHNTcmNMUmVmczsKICAgIEdEQkxSZWYgKipwYXBzRHN0TFJlZnM7Cn0gR0RCTFJlZk1h cDsKIyA1MCAiLi4vLi4vLi4vbGliL2xyZWYuaCIKR0RCTFJlZiAqR0RCUGFyc2VSRUYoRklMRSAq ZnAsIGNvbnN0IGNoYXIgKiBwc3pSZWZTdHJpbmcgKTsKY2hhciAqR0RCQnVpbGRSRUYoaW50IG5S ZWZUeXBlLCBjb25zdCBjaGFyICpwc3pCYXNlRmlsZSwKICAgICAgICAgICAgICAgICAgICAgY29u c3QgY2hhciAqcHN6TGF5ZXJGaWxlLCBpbnQgbkxheWVyVHlwZSxpbnQgbkxheWVySW5kZXgpOwpH REJMUmVmICpHREJCdWlsZExSZWYoaW50IG5SZWZUeXBlLCBGSUxFICpmcExheWVyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBzekZpbGVuYW1lLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuTGF5ZXJUeXBlLCBpbnQgbkxheWVySW5kZXgg KTsKdm9pZCBHREJEZXN0cm95TFJlZihHREJMUmVmICpwc0xSZWYpOwpHREJMUmVmICpHREJEdXBs aWNhdGVMUmVmKCBHREJMUmVmICpwc0xSZWYgKTsKdm9pZCBHREJBY2Nlc3NMUmVmKCBHREJMUmVm ICpwc0xSZWYgKTsKdm9pZCBHREJEZWFjY2Vzc0xSZWYoIEdEQkxSZWYgKnBzTFJlZiApOwpUQm9v bCBHREJMUmVmQ29tcGFyZSggY29uc3QgR0RCTFJlZiAqcHNMUmVmMSwgY29uc3QgR0RCTFJlZiAq cHNMUmVmMiApOwoKR0RCTFJlZk1hcCAqR0RCQWRkVG9MUmVmTWFwKEdEQkxSZWZNYXAgKnBzTFJl Zk1hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEQkxSZWYgKnBzU3JjTFJlZiwgR0RC TFJlZiAqcHNEc3RMUmVmKTsKR0RCTFJlZk1hcCAqR0RCQWRkTGF5ZXJUb0xSZWZNYXAoR0RCTFJl Zk1hcCAqcHNMUmVmTWFwLCBpbnQgblJlZlR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBuTGF5ZXJUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBjaGFyICpwc3pTcmNGaWxlLCBpbnQgblNyY0xheWVySW5kZXgsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBzekRzdEZpbGUsIGludCBuRHN0TGF5ZXJJ bmRleCApOwp2b2lkIEdEQkRlc3Ryb3lMUmVmTWFwKEdEQkxSZWZNYXAgKnBzTFJlZk1hcCk7CmNo YXIgKkdEQkFwcGx5TFJlZk1hcFRvUkVGKEZJTEUgKmZwLCBjb25zdCBjaGFyICpwc3pSRUYsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEQkxSZWZNYXAgKnBzTFJlZk1hcCk7CnZvaWQg R0RCQXBwbHlMUmVmTWFwVG9MYXllcihGSUxFICpmcCwgaW50IG5MVHlwZSwgaW50IG5MSW5kZXgs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHREJMUmVmTWFwICogcHNMUmVmTWFwKTsK dm9pZCBHREJBcHBseUxSZWZNYXBUb0ZpbGUoRklMRSAqZnAsIEdEQkxSZWZNYXAgKnBzTFJlZk1h cCk7CgpjaGFyICpHREJNb3ZlUkVGKEZJTEUgKmZwT2xkQmFzZSwgY29uc3QgY2hhciAqcHN6UkVG LAogICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpmcE5ld0Jhc2UpOwpUQm9vbCBHREJN ZXRhRGF0YU1vdmVSRUYoY2hhciAqKnBhcHN6TWV0YURhdGEsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRklMRSAqZnBPbGRCYXNlLCBGSUxFICpmcE5ld0Jhc2UpOwp2b2lkIEdE QlNldFZlY3RvckxheWVyUkVGKEdEQkxheWVyIHBzQmFzZUxheWVyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwc3pSRUZOYW1lLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBHREJMYXllciBwc1JlZkxheWVyICk7CkdEQkxheWVyIEdE QkdldExheWVyRnJvbVJFRiggRklMRSAqZnAsIGNvbnN0IGNoYXIgKnBzelJFRiApOwpUQm9vbCBH REJMYXllckFuZFJFRkNvbXBhcmUoR0RCTGF5ZXIgcHNMYXllciwgRklMRSAqZnAsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHN6UkVGKTsKCn0KIyAy Nzk3ICIuLi8uLi8uLi9saWIvZ2RiLmgiIDIKCkdEQkxSZWYgKiBHREJEZWZhdWx0UENUKCBGSUxF ICosIGludCApOwpHREJMUmVmICogR0RCRGVmYXVsdExVVCggRklMRSAqLCBpbnQgKTsKCgoKCgp2 b2lkIENNTFJlZ2lzdGVyICh2b2lkKTsKRklMRSAqQ01MQ3JlYXRlIChjaGFyICosIGludCwgaW50 LCBpbnQsIGludCwgY2hhciAqKTsKdm9pZCBDTUxTZXRDaGFuSW5mbyAoRklMRSAqLCBpbnQsIGlu dCwgdW5zaWduZWQgY2hhciAqLCBsb25nLCBsb25nLCBUQm9vbCk7CgoKCgp2b2lkIE1vdjhVKCBp bnQsIGludCwgaW50LCBpbnQsIHVuc2lnbmVkIGNoYXIgKiwgaW50LCBpbnQsIGludCwgdW5zaWdu ZWQgY2hhciAqKTsKdm9pZCBNb3YxNlMoIGludCwgaW50LCBpbnQsIGludCwgdW5zaWduZWQgY2hh ciAqLCBpbnQsIGludCwgaW50LCB1bnNpZ25lZCBjaGFyICopOwp2b2lkIE1vdjE2VSggaW50LCBp bnQsIGludCwgaW50LCB1bnNpZ25lZCBjaGFyICosIGludCwgaW50LCBpbnQsIHVuc2lnbmVkIGNo YXIgKik7CnZvaWQgTW92MzJSKCBpbnQsIGludCwgaW50LCBpbnQsIHVuc2lnbmVkIGNoYXIgKiwg aW50LCBpbnQsIGludCwgdW5zaWduZWQgY2hhciAqKTsKCmNvbnN0IGNoYXIgKkdEQkNoYW5EYXRh VHlwZTJTdHJpbmcoIGludCBuRGF0YVR5cGUgKTsKClNpZ25hdHVyZV90ICpTaWdDcmVhdGUoIHZv aWQgKTsKdm9pZCBTaWdGcmVlKCBTaWduYXR1cmVfdCAqICk7CgoKCgoKdm9pZCBDaGVja0NoUmFu Z2UoIGNoYXIgKiwgaW50ICosIGludCwgaW50LCBpbnQgKiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50ICosIGludCwgaW50ICk7CnZvaWQgQ2hlY2tEdkNoYW4oIGNoYXIgKiwgaW50 ICosIGludCwgaW50ICk7CnZvaWQgQ2hlY2tEdldpbiggY2hhciAqLCBpbnQgKiwgaW50LCBpbnQg KTsKaW50IENsaXBWZWN0b3IoIGRvdWJsZSAqLCBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAq LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91 YmxlICk7CnZvaWQgQml0V2lzZVNhbXBsZSggdW5zaWduZWQgY2hhciAqLCBsb25nLCBsb25nLCB1 bnNpZ25lZCBjaGFyICosIGxvbmcsIGxvbmcgKTsKClRCb29sIENsaXAzRFZlY3RvciggZG91Ymxl ICosIGRvdWJsZSAqLCBkb3VibGUgKiwgZG91YmxlICosCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSApOwoKCgoKZXh0ZXJuIGludCBDaGFu MlNpemVUYWJsZVtdOwoKCgoKCnR5cGVkZWYgc3RydWN0IHsKICBpbnQgTkVudHJpZXM7CiAgZG91 YmxlICpSYW5nZVN0YXJ0OwogIGRvdWJsZSAqUmFuZ2VFbmQ7CiAgY2hhciAqKkRlc2NyaXB0aW9u OwoKICBpbnQgTkZpZWxkczsKICB2b2lkICoqRmllbGRBcnJheTsKICBpbnQgKkZpZWxkVHlwZTsK CiAgZG91YmxlICpEb3VibGVCdWZmZXI7CiAgY2hhciAqU3RyaW5nQnVmZmVyOwp9IEF0dHJpYnV0 ZV90OwoKCgoKQXR0cmlidXRlX3QgKiBJbmdlc3RBdHRyaWJ1dGVzKCBUSW5mb190ICogKTsKaW50 IEZpbmRBdHRyaWJ1dGVFbnRyeSggQXR0cmlidXRlX3QgKiwgZG91YmxlICk7CnZvaWQgRGVzdHJv eUF0dHJpYnV0ZXMoIEF0dHJpYnV0ZV90ICogKTsKCgoKCnZvaWQgSU1QVXBkYXRlRmxvYXRIYXNo KCBkb3VibGUgKiwgZG91YmxlICk7CmludCBJTVBTdHJpbmdIYXNoKCBjb25zdCBjaGFyICogKTsK ZG91YmxlIEdEQlNoYXBlSGFzaCggR0RCTGF5ZXIsIEdEQlNoYXBlICosIGludCApOwpkb3VibGUg R0RCTGF5ZXJIYXNoKCBHREJMYXllciwgaW50ICk7ClRCb29sIEdEQlJlcG9ydFdyb25nSGFzaCgg Y29uc3QgY2hhciAqLCBHREJMYXllciwgR0RCU2hhcGUgKiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50LCBkb3VibGUgKTsKIyAyODkwICIuLi8uLi8uLi9saWIvZ2RiLmgi CnZvaWQgVERCUmVnaXN0ZXIoIHZvaWQgKTsKdm9pZCBHREFSZWdpc3Rlciggdm9pZCApOwp2b2lk IFF1YWR0cmVlUmVnaXN0ZXIoIHZvaWQgKTsKCgoKCgpjaGFyICogX0dEQkNoYW5nZUZpbGVFeHQo IGNvbnN0IGNoYXIgKnBzek5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyICpwc3pOZXdFeHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBUQm9vbCBiTWF0Y2hDYXNlICk7Cgp2b2lkIF9HREJVcGRhdGUyREJvdW5kcyhH REJWZXJ0ZXggKnBzQm91bmRzTWluLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBHREJWZXJ0ZXggKnBzQm91bmRzTWF4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBHREJTaGFwZSAqcHNTaGFwZSk7CgpjaGFyICoqIF9HREJUb2tlbml6ZShjaGFy ICpwc3pTdHIxLCBjaGFyICpwc3pEZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICBpbnQgbk1h eFRvaywgY2hhciAqKnBwc3pOZXh0KTsKCkdEQlZlcnRleCAqIF9HREJFbGxpcHNlKGRvdWJsZSBk ZlhDZW50ZXIsIGRvdWJsZSBkZllDZW50ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgZG91Ymxl IGRmWFJhZGl1cywgZG91YmxlIGRmWVJhZGl1cywKICAgICAgICAgICAgICAgICAgICAgICBkb3Vi bGUgZGZTdGFydEFuZ2xlLCBkb3VibGUgZGZFbmRBbmdsZSwKICAgICAgICAgICAgICAgICAgICAg ICBpbnQgbk1heFNlZ21lbnRzLCBpbnQgKnBuVmVydGljZXMpOwoKCgoKdHlwZWRlZiBzdHJ1Y3QK ewogICAgaW50IG5QaXhlbHM7CiAgICBpbnQgbkxpbmVzOwogICAgaW50IG5CeXRlczsKICAgIGlu dCBuQnVmTGluZXM7CiAgICBpbnQgbkxpbmVGaXJzdDsKICAgIGludCBuTGluZUxhc3Q7CiAgICB2 b2lkICoqcHBJbWFnZTsKICAgIHZvaWQgKnBNZW1CbG9jazsKICAgIGludCBuQWNjZXNzTW9kZTsK ICAgIFRCb29sIGJJbk1lbW9yeTsKICAgIEZJTEUgKmZwQnVmOwogICAgY2hhciAqcHN6RmlsZU5h bWU7Cn0KRkJJbmZvVHlwZTsKCgoKCgp2b2lkICoqIEZCQWxsb2NJbWFnZShpbnQgblBpeGVscywg aW50IG5MaW5lcywgaW50IG5CeXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBuQnVmTGluZXMsIEZCSW5mb1R5cGUgKnBzRkJJbmZvKTsKCnZvaWQgRkJGcmVlSW1hZ2UoRkJJ bmZvVHlwZSAqcHNGQkluZm8pOwoKdm9pZCBGQkFjY2Vzc0xpbmUoaW50IGlMaW5lLCBpbnQgbkxu c0Fib3ZlLCBpbnQgbkxuc0JlbG93LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5B Y2Nlc3NNb2RlLCBGQkluZm9UeXBlICpwc0ZCSW5mbyk7CgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBB SUlGaWxlSW5mb190CnsKICAgIEZJTEUgKmZwOwogICAgY2hhciAqcHN6QnVmOwogICAgaW50IGlQ dHI7Cn1BSUlGaWxlSW5mbzsKCnZvaWQgQUlJUmV3aW5kKEFJSUZpbGVJbmZvICpwc0ZpbGVJbmZv KTsKY2hhciAqQUlJUmVhZENvbXByZXNzZWRMaW5lKEFJSUZpbGVJbmZvICpwc0ZpbGVJbmZvKTsK CnZvaWQgX01JRlByb2Nlc3NDT09SRFNZUyhGSUxFICpmcE1JRiwgUHJvakluZm9fdCAqc1Byb2os CiAgICBkb3VibGUgZGZNSUYyR0RCVW5pdHMsIGNoYXIgKipwcHN6TGluZSApOwoKdm9pZCBfTUlG V3JpdGVDT09SRFNZUyhGSUxFICpmcE1JRiwgUHJvakluZm9fdCAqc1Byb2osCiAgICBUQm9vbCBi V3JpdGVFT0wgKTsKCgoKCgoKR0RCTGF5ZXIgR0RCT2xkR2V0TGF5ZXIoRklMRSAqZnAsIGludCBu U2VnbWVudCk7CkdEQlNoYXBlSWQgR0RCT2xkR2V0TmV4dFNoYXBlSWQoR0RCTGF5ZXIgcHNMYXll ciwgR0RCU2hhcGVJZCBoU2hhcGVJZCk7CkdEQlNoYXBlSWQgR0RCT2xkQ3JlYXRlU2hhcGUoR0RC TGF5ZXIgcHNMYXllciwgR0RCU2hhcGVJZCBoSGludElkKTsKR0RCU2hhcGUgKkdEQk9sZEdldFNo YXBlKEdEQkxheWVyIHBzTGF5ZXIsIEdEQlNoYXBlSWQgaFNoYXBlSWQpOwp2b2lkIEdEQk9sZFNl dFNoYXBlKEdEQkxheWVyIHBzTGF5ZXIsIEdEQlNoYXBlSWQgaFNoYXBlSWQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgR0RCU2hhcGUgKnBzU2hhcGUpOwppbnQgR0RCT2xkR2V0UHJvamVjdGlv bkluZm8oR0RCTGF5ZXIgcHNMYXllciwgUHJvakluZm9fdCAqcHNQcm9qKTsKdm9pZCBDcmVhdGVE eW5hbWljQ2FjaGVzKEdEQkxheWVyIHBzTGF5ZXIpOwp2b2lkIF9HREJEZXJlZ2lzdGVyTGF5ZXJG b3JDbG9zZShGSUxFICpmcCwgR0RCTGF5ZXIgaExheWVyKTsKdm9pZCBfR0RCRmx1c2hMYXllckNh Y2hlKEZJTEUgKmZwKTsKdm9pZCBfR0RCQ2xlYXJMYXllckNvbXBhdExpc3QoRklMRSAqZnApOwp2 b2lkIF9HREJSZWxlYXNlQ2FjaGUoRklMRSAqZnApOwp2b2lkIEdEQlJlZ2lzdGVyTGF5ZXJGb3JD bG9zZShGSUxFICpmcCwgR0RCTGF5ZXIgaExheWVyKTsKCgoKCgoKbG9uZyBJbWFnZVN0YXRzKCBG SUxFICosIGludCwgaW50ICosIGludCwgaW50ICosIGZsb2F0ICosCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIGZsb2F0ICosIGZsb2F0ICosIGZsb2F0ICogKTsKaW50IEltYWdlSGlzdG9ncmFt KCBGSUxFICogZnAsIGludCwgaW50ICosIGludCwgaW50ICosCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgKiwgaW50LCBkb3VibGUgKiwgZG91YmxlICosIFRCb29sLCBUQm9vbCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNUFByb2dyZXNzRnVuYywgdm9pZCAqICk7 CmludCBJbWFnZVNhbXBsZWRIaXN0b2dyYW0oIEZJTEUgKiBmcCwgaW50LCBpbnQgKiwgaW50LCBp bnQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqLCBpbnQsIGRvdWJsZSAq LCBkb3VibGUgKiwgVEJvb2wsIFRCb29sLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg SU1QUHJvZ3Jlc3NGdW5jLCB2b2lkICogKTsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgICBpbnQg aUpvaW5OdW1iZXI7CiAgICBpbnQgaVByaW1hcnlLZXlGaWVsZDsKICAgIGNoYXIgKnBzelNlY29u ZEZpbGVOYW1lOwogICAgVEJvb2wgYkluUHJpbWFyeUZpbGU7CiAgICBpbnQgblNlY29uZFNlZ21l bnROdW07CiAgICBHREJMYXllciBwc1NlY29uZGFyeVRhYmxlOwogICAgaW50IGlGb3JlaWduS2V5 RmllbGQ7CiAgICBpbnQgbkFjdGl2ZTsKfSBHREJKb2luSW5mbzsKCkdEQkpvaW5JbmZvICpHREJS ZWFkSm9pbnMoR0RCTGF5ZXIgcHNMYXllcik7CnZvaWQgR0RCUmVtb3ZlSm9pbihHREJMYXllciBw c0xheWVyLGludCBpSm9pbk51bSk7CnZvaWQgR0RCQWRkSm9pbihHREJMYXllciBwc0xheWVyLGlu dCBpUHJpbWFyeUtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RCTGF5ZXIg cHNTZWNvbmRhcnlUYWJsZSwgaW50IGlGb3JlaWduS2V5KTsKdm9pZCBHREJBY3RpdmF0ZUpvaW4o R0RCTGF5ZXIgcHNMYXllcixpbnQgaUpvaW5OdW0pOwp2b2lkIEdEQkRlYWN0aXZhdGVKb2luKEdE QkxheWVyIHBzTGF5ZXIsIGludCBpSm9pbk51bSk7CnZvaWQgR0RCSm9pblJla2V5KEdEQkxheWVy IHBzTGF5ZXIsaW50IGlKb2luTnVtLGludCBpTmV3UHJpbWFyeUtleSk7CnZvaWQgR0RCRGVzdHJv eUpvaW5JbmZvKEdEQkpvaW5JbmZvICpwYXNKb2lucyk7CmludCBHREJHZXROdW1iZXJKb2lucygg RklMRSAqZnAsIGludCBuVHlwZSwgaW50IG5JbmRleCApOwpGSUxFICpHREJBY2Nlc3NMYXllcldp dGhKb2lucyhHREJMYXllciBwc1ByaW1hcnlMYXllcik7ClRCb29sIEdEQkNsb3NlSm9pbmVkTGF5 ZXJzKEZJTEUgKmZwLCBjaGFyICoqKnBwYXBzekNsb3NlZEZpbGVzKTsKdm9pZCBHREJDbG9zZUpv aW5GaWxlcyhjaGFyICoqcGFwc3pDbG9zYWJsZUZpbGVzKTsKVEJvb2wgR0RCSXNKb2luZWRGaWVs ZChHREJMYXllciBwc0pvaW5lZExheWVyLCBpbnQgaUZpZWxkKTsKCgoKCgppbnQgR0RCR2V0TnVt Q21iKCBGSUxFICpmZHBCYXNlRmlsZSwgaW50IG5CU2VnbWVudCk7ClRCb29sIEdEQkFkZENvbWJp bmVkTGF5ZXIgKEZJTEUgKmZkcEJhc2VGaWxlLCBpbnQgbkJTZWdtZW50LAogICAgICAgICAgICAg ICAgICAgIGNoYXIgKnBzekNGaWxlbmFtZSwgaW50IGlDU2VnbWVudCwgY2hhciAqcHN6T3B0aW9u KTsKdm9pZCBHREJSZW1vdmVDb21iaW5lZExheWVyKEZJTEUgKmZkcEJhc2VGaWxlLCBpbnQgbkJT ZWdtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnBzekNG aWxlbmFtZSxpbnQgaUNTZWdtZW50KTsKCgoKCnZvaWQgR0RCUmFzdGVyQWRkSm9pbiggRklMRSAq ZnAsIGludCBpQ2hhbk51bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgR0RCTGF5ZXIgcHNTZWNvbmRhcnlUYWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IGlGb3JlaWduS2V5ICk7CnZvaWQgR0RCUmFzdGVyUmVtb3ZlSm9p biggRklMRSAqZnAsIGludCBpQ2hhbk51bSwgaW50IGlKb2luTnVtICk7CkdEQkpvaW5JbmZvICog R0RCUmFzdGVyUmVhZEpvaW5zKCBGSUxFICpmcCwgaW50IGlDaGFuTnVtICk7CnZvaWQgR0RCUmFz dGVyQWN0aXZhdGVKb2luKCBGSUxFICpmcCwgaW50IGlDaGFuTnVtLCBpbnQgaUpvaW5OdW0gKTsK dm9pZCBHREJSYXN0ZXJEZWFjdGl2YXRlSm9pbiggRklMRSAqZnAsIGludCBpQ2hhbk51bSwgaW50 IGlKb2luTnVtICk7CkdEQkxheWVyIEdEQlJhc3RlckdldEpvaW5MYXllciggRklMRSAqZnAsIGlu dCBpQ2hhbk51bSwgaW50ICpwbktleUZpZWxkICk7CkdEQkxheWVyIEdEQlJhc3RlckNyZWF0ZUpv aW4oIEZJTEUgKmZwLCBpbnQgaUNoYW5OdW0sIGNoYXIgKnBzektleUZpZWxkTmFtZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqcHN6TmFtZSwgY2hh ciAqcHN6RGVzYyApOwoKR0RCRmllbGQgKiBHREJSYXN0ZXJHZXRSZWNvcmRSZWYoIEZJTEUgKmZw LCBpbnQgaUNoYW5OdW0sIGRvdWJsZSBkZlBpeGVsVmFsdWUgKTsKR0RCRmllbGQgKiBHREJSYXN0 ZXJHZXRSZWNvcmQoIEZJTEUgKmZwLCBpbnQgaUNoYW5OdW0sIGRvdWJsZSBkZlBpeGVsVmFsdWUg KTsKdm9pZCBHREJSYXN0ZXJTZXRSZWNvcmQoIEZJTEUgKmZwLCBpbnQgaUNoYW5OdW0sIEdEQkZp ZWxkICogcGFzRmllbGRzICk7CgpHREJTaGFwZSAqIEdEQlJhc3RlckdldFNoYXBlUmVmKCBGSUxF ICpmcCwgaW50IGlDaGFuTnVtLCBkb3VibGUgZGZQaXhlbFZhbHVlICk7CkdEQlNoYXBlICogR0RC UmFzdGVyR2V0U2hhcGUoIEZJTEUgKmZwLCBpbnQgaUNoYW5OdW0sIGRvdWJsZSBkZlBpeGVsVmFs dWUgKTsKdm9pZCBHREJSYXN0ZXJTZXRTaGFwZSggRklMRSAqZnAsIGludCBpQ2hhbk51bSwgR0RC U2hhcGUgKiBwc1NoYXBlICk7CgpUQm9vbCBHREJJc1BvaW50SW5zaWRlVmVydGljZXMoR0RCVmVy dGV4ICpwc1ZlcnRleCwgaW50IG5Db3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBHREJWZXJ0ZXggKnBhc1ZlcnRpY2VzLCBpbnQgKm5SaW5nU3RhcnQpOwpUQm9v bCBHREJJc1BvaW50SW5zaWRlT3JPblZlcnRpY2VzKEdEQlZlcnRleCAqcHNWZXJ0ZXgsIGludCBu Q291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEQlZl cnRleCAqcGFzVmVydGljZXMsIGludCAqblJpbmdTdGFydCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgVEJvb2wgYkFsbG93T24pOwoKZG91YmxlIEdEQkdldERp c3RhbmNlKGNvbnN0IEdEQlZlcnRleCAqcHNGaXJzdFBvaW50LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IEdEQlZlcnRleCAqcHNTZWNvbmRQb2ludCk7Cgpkb3VibGUgR0RC Q29tcHV0ZVNoYXBlQXJlYShHREJMYXllciBoTGF5ZXIsIEdEQlNoYXBlSWQgaFNoYXBlSWQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEJvb2wgYkRpc3BsYXlFcnJvciwg VEJvb2wgKmJUb3BvRXJyb3IpOwpkb3VibGUgR0RCQ29tcHV0ZVNoYXBlUGVyaW1ldGVyKEdEQkxh eWVyIGhMYXllciwgR0RCU2hhcGVJZCBoU2hhcGVJZCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFRCb29sIGJEaXNwbGF5RXJyb3IsIFRCb29sICpiVG9wb0Vycm9y KTsKVEJvb2wgR0RCSXNTaGFwZUNsb3NlZChHREJMYXllciBoTGF5ZXIsIEdEQlNoYXBlICpwc1No YXBlKTsKCmNoYXIgKiogR0RCQ29weUF0dHJpYnV0ZXMoIEdEQkxheWVyIGhOZXdMYXllciwgaW50 IG5OdW1iZXJMYXllcnMsIEdEQkxheWVyICpwYWhMYXllciwgVEJvb2wgYlJldHVybkxpc3QgKTsK CmNoYXIgKiogR0RCTGlzdE5hbWVzKGNvbnN0IGNoYXIgKnBzekZpbGVOYW1lLCBpbnQgbkxheWVy TGlzdEZsYWcpOwpjaGFyICoqIEdEQkxpc3RGaWVsZE5hbWVzKGNvbnN0IGNoYXIgKnBzekZpbGVO YW1lKTsKY2hhciAqIEdEQkxpc3RGaWxlTWFzayggaW50IG5TZWdtZW50LCBpbnQgbk1vZGUsIFRC b29sIGJBZGRBbGxGaWxlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBjaGFyICpwc3pBZGRpdGlvbmFsVHlwZXMgKTsKY2hhciAqKiBHREJHZXRWYWxpZEZpZWxkVmFs dWVzKEdEQkxheWVyIGhMYXllciwgaW50IGlGaWVsZEluZGV4KTsKfQojIDg0ICJ2ZWNjbGVhbi5j cHAiIDIKIyAxICIuLi8uLi8uLi9saWIvcGNsLmhoIiAxCiMgNjAgIi4uLy4uLy4uL2xpYi9wY2wu aGgiCiNwcmFnbWEgaW50ZXJmYWNlCgoKCgoKCgojIDEgIi4uLy4uLy4uL2xpYi9wY2kuaCIgMQoj IDE4OSAiLi4vLi4vLi4vbGliL3BjaS5oIgojIDEgIi4uLy4uLy4uL2xpYi9jY2xwcml2LmgiIDEK IyAyOCAiLi4vLi4vLi4vbGliL2NjbHByaXYuaCIKIyAxICIuLi8uLi8uLi9saWIvY2NsYmFzZS5o IiAxCiMgMjkgIi4uLy4uLy4uL2xpYi9jY2xwcml2LmgiIDIKIyAxICIuLi8uLi8uLi9saWIvY2Ns Y29udi5oIiAxCiMgMzAgIi4uLy4uLy4uL2xpYi9jY2xwcml2LmgiIDIKCmV4dGVybiAiQyIgewoK CgoKdHlwZWRlZiBzdHJ1Y3QgZnBfbGluayB7CiAgc3RydWN0IGZwX2xpbmsgKm5leHQ7CiAgRklM RSAqZnA7CiAgY2hhciAqZmlsZW5hbWU7CiAgaW50IHR5cGU7CiAgaW50IGluZGV4OwogIGludCBm bGFnczsKICBpbnQgcmVmX2NvdW50Owp9IGZwTGlua190OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgZGtp bmZvCnsKICAgIHN0cnVjdCBka2luZm8gKm5leHQ7CiAgICBGSUxFICpmcDsKICAgIGludCBmZDsK ICAgIHVuc2lnbmVkIGNoYXIgKm1lbV9wdHI7CgogICAgaW50NjQgbGVuZ3RoOwogICAgaW50NjQg b2Zmc2V0OwogICAgbG9uZyBtZW1fbGVuZ3RoOwoKCgoKfSBES0luZm9fdDsKIyA4NCAiLi4vLi4v Li4vbGliL2NjbHByaXYuaCIKaW50IGltcGRpcmMoIHZvaWQgKTsKaW50IGltcHNyaGNfZGlyX2J1 ZmZlciggY2hhciAqICk7CgoKZXh0ZXJuIGNoYXIgcGNpYnVmW107CgoKfQojIDE5MCAiLi4vLi4v Li4vbGliL3BjaS5oIiAyCgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciBQaXhWYWw7Cgp0eXBl ZGVmIHVuaW9uIHsKICAgIGludDMyIHdvcmQ7CiAgICBmbG9hdCBmd29yZDsKICAgIFBpeFZhbCBi eXRlWzRdOwogICAgc3RydWN0IHsKCgoKCgoKICAgICAgICBQaXhWYWwgYjM7CiAgICAgICAgUGl4 VmFsIGIyOwogICAgICAgIFBpeFZhbCBiMTsKICAgICAgICBQaXhWYWwgYjA7CgogICAgfSBsOwp9 IFBpeHdvcmQ7CiMgMjM2ICIuLi8uLi8uLi9saWIvcGNpLmgiCiMgMSAiLi4vLi4vLi4vbGliL2dk Yi5oIiAxCiMgMjM3ICIuLi8uLi8uLi9saWIvcGNpLmgiIDIKIyAxICIuLi8uLi8uLi9saWIvZ2Ri ZnJtdHMuaCIgMQojIDE5NCAiLi4vLi4vLi4vbGliL2dkYmZybXRzLmgiCiMgMSAiLi4vLi4vLi4v bGliL2dkYi5oIiAxCiMgMTk1ICIuLi8uLi8uLi9saWIvZ2RiZnJtdHMuaCIgMgoKZXh0ZXJuICJD IiB7CgoKCgppbnQgVmF4MklFRUVEb3VibGUgKHZvaWQgKik7CmludCBJRUVFMlZheERvdWJsZSAo dm9pZCAqKTsKdm9pZCBJRUVFMlZheEZsb2F0ICh2b2lkICopOwp2b2lkIFZheDJJRUVFRmxvYXQg KHZvaWQgKik7CiMgMjE2ICIuLi8uLi8uLi9saWIvZ2RiZnJtdHMuaCIKdm9pZCBBRFJHREJSZWdp c3RlciAodm9pZCk7CgoKCgoKCgpGSUxFICogQUdFQ3JlYXRlIChjaGFyICosIGludCwgaW50LCBp bnQsIGludCwgY2hhciAqKTsKRklMRSAqIEFHRU9wZW4gKGNoYXIgKiwgY2hhciAqKTsKdm9pZCBB R0VDbG9zZSAoRklMRSAqKTsKdm9pZCBBR0VSZWdpc3RlciAodm9pZCk7CnZvaWQgQUdFVmVjdG9y SW5mbyAoRklMRSAqLCBpbnQsIGludCwgVkluZm9fdCAqKTsKaW50IEFHRVZlY3RvcklPIChWSW5m b190ICosIGludCwgaW50LCBpbnQsIGludCAqLCBpbnQgKiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50MzIgKiwgaW50MzIgKiwgZG91YmxlICoqLCBkb3VibGUgKiwgaW50KTsKaW50 IEFHRVNlZ05leHQgKEZJTEUgKiwgaW50LCBpbnQpOwp2b2lkIEFHRVNlZ0Rlc2NJTyAoRklMRSAq LCBpbnQsIGludCwgaW50LCBjaGFyICopOwoKCgoKCgp2b2lkIEFJQlJlZ2lzdGVyKHZvaWQpOwoK CgoKCgp2b2lkIEFJQ1JlZ2lzdGVyKHZvaWQpOwoKCgoKCgp2b2lkIEFJSVJlZ2lzdGVyKHZvaWQp OwoKCgoKCgoKdm9pZCBBUlNSZWdpc3RlciAodm9pZCk7CgoKCgoKCgp2b2lkIEFWSFJlZ2lzdGVy ICh2b2lkKTsKCgoKCgoKCnZvaWQgQk1QREJSZWdpc3Rlcih2b2lkKTsKCgoKCgoKCnZvaWQgQ0NH UmVnaXN0ZXIgKHZvaWQpOwoKCgoKCgoKdm9pZCBDREJHREJSZWdpc3RlciAodm9pZCk7CgoKCgoK CnZvaWQgQ0lNUmVnaXN0ZXIgKHZvaWQpOwoKCgoKCgp2b2lkIERCRlJlZ2lzdGVyICh2b2lkKTsK CgoKCgoKCnZvaWQgREVNUmVnaXN0ZXIgKHZvaWQpOwpGSUxFICogREVNT3BlbiAoY2hhciAqLCBj aGFyICopOwppbnQgREVNVGVzdE9wZW4gKEdEQlRlc3RJbmZvX3QgKik7CnZvaWQgREVNQ2xvc2Ug KEZJTEUgKik7CkZJTEUgKiBERU1DcmVhdGUgKGNoYXIgKiwgaW50LCBkb3VibGUsIGRvdWJsZSwg aW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKik7 CnZvaWQgREVNV3JpdGVGaWxlIChGSUxFICopOwppbnQgREVNR2VvcmVmSU8gKEZJTEUgKiwgaW50 LCBjaGFyICosIGRvdWJsZSAqLCBkb3VibGUgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGRvdWJsZSAqLCBkb3VibGUgKik7CnZvaWQgREVNSW50Q2hhbklPIChGSUxFICosIGludCwg aW50LCBpbnQsIGludCwgaW50LCBpbnQzMiAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50LCBpbnQsIGludCwgaW50ICopOwppbnQgREVNQ2hhbkRlc2NJTyAoRklMRSAqLCBpbnQs IGludCwgY2hhciAqKTsKdm9pZCBERU1TeW5jIChGSUxFICopOwppbnQgREVNTWVtQ2hhbkluZm8g KEZJTEUgKiwgaW50LCB1bnNpZ25lZCBjaGFyICoqLCBsb25nICosIGxvbmcgKiwgaW50ICopOwoK CgoKCgoKRklMRSAqIERHTk9wZW4gKGNoYXIgKiAsIGNoYXIgKik7CkZJTEUgKiBER05DcmVhdGUg KGNoYXIgKik7CnZvaWQgREdOQ2xvc2UgKEZJTEUgKik7CnZvaWQgREdOVmVjdG9ySW5mbyAoRklM RSAqLCBpbnQsIGludCwgVkluZm9fdCAqKTsKaW50IERHTlZlY3RvcklPIChWSW5mb190ICosIGlu dCwgaW50LCBpbnQsIGludCAqLCBpbnQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50MzIgKiwgaW50MzIgKiwgZG91YmxlICoqLCBkb3VibGUgKiwgaW50KTsKdm9pZCBER05SZWdp c3RlciAodm9pZCk7CmludCBER05TZWdOZXh0IChGSUxFICosIGludCwgaW50KTsKdm9pZCBER05T ZWdEZXNjSU8gKEZJTEUgKiwgaW50LCBpbnQsIGludCwgY2hhciAqKTsKIyAzNTQgIi4uLy4uLy4u L2xpYi9nZGJmcm10cy5oIgpGSUxFICogRExHT3BlbiAoY2hhciAqICwgY2hhciAqKTsKRklMRSAq IERMR0NyZWF0ZSAoY2hhciAqLCBpbnQsIGludCwgaW50LCBpbnQsIGNoYXIgKiApOwp2b2lkIERM R1JlZ2lzdGVyICh2b2lkKTsKCgoKCgoKCkZJTEUgKiBET1FPcGVuIChjaGFyICogLCBjaGFyICop Owp2b2lkIERPUUNsb3NlIChGSUxFICopOwppbnQgRE9RR2VvcmVmSU8gKEZJTEUgKiwgaW50LCBj aGFyICosIGRvdWJsZSAqLCBkb3VibGUgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZG91YmxlICosIGRvdWJsZSAqICk7CnZvaWQgRE9RUmVnaXN0ZXIgKHZvaWQpOwppbnQgRE9RVGVz dE9wZW4gKEdEQlRlc3RJbmZvX3QgKik7Cgp2b2lkIERPMlJlZ2lzdGVyKCB2b2lkICk7CgoKCgoK Cgp2b2lkIERSSVJlZ2lzdGVyKCB2b2lkICk7CiMgMzg4ICIuLi8uLi8uLi9saWIvZ2RiZnJtdHMu aCIKdm9pZCBEVEVEUmVnaXN0ZXIgKHZvaWQpOwpGSUxFICogRFRFRE9wZW4gKGNoYXIgKiwgY2hh ciAqKTsKaW50IERURURUZXN0T3BlbiAoR0RCVGVzdEluZm9fdCAqKTsKdm9pZCBEVEVEQ2xvc2Ug KEZJTEUgKik7CmludCBEVEVER2VvcmVmSU8gKEZJTEUgKiwgaW50LCBjaGFyICosIGRvdWJsZSAq LCBkb3VibGUgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91 YmxlICopOwp2b2lkIERURURJbnRDaGFuSU8gKEZJTEUgKiwgaW50LCBpbnQsIGludCwgaW50LCBp bnQsIGludDMyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50LCBpbnQsIGlu dCwgaW50ICopOwp2b2lkIERURURTeW5jIChGSUxFICopOwppbnQgRFRFRE1lbUNoYW5JbmZvIChG SUxFICosIGludCwgdW5zaWduZWQgY2hhciAqKiwgbG9uZyAqLCBsb25nICosIGludCAqKTsKaW50 IERURURDaGFuRGVzY0lPIChGSUxFICosIGludCwgaW50LCBjaGFyICopOwoKCgoKCgp2b2lkIERU RVJlZ2lzdGVyKCB2b2lkICk7CgoKCgoKdm9pZCBEVkNSZWdpc3Rlcih2b2lkKTsKCgoKCnZvaWQg RkRCUmVnaXN0ZXIodm9pZCk7CgoKCgp2b2lkIEdEQkRYRlJlZ2lzdGVyKCk7CgoKCgoKCgpGSUxF ICogRUZGT3BlbiAoY2hhciAqLCBjaGFyICopOwppbnQgRUZGVGVzdE9wZW4gKEdEQlRlc3RJbmZv X3QgKik7CnZvaWQgRUZGQ2xvc2UgKEZJTEUgKik7CnZvaWQgRUZGUmVnaXN0ZXIgKHZvaWQpOwpp bnQgRUZGR2VvcmVmSU8gKEZJTEUgKiwgaW50LCBjaGFyICosIGRvdWJsZSAqLCBkb3VibGUgKiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlICosIGRvdWJsZSAqKTsKaW50IEVG RkNoYW5EZXNjSU8gKEZJTEUgKiwgaW50LCBpbnQsIGNoYXIgKik7CnZvaWQgRUZGQnl0ZUNoYW5J TyAoRklMRSAqLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgdW5zaWduZWQgY2hhciAqLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQsIGludCwgaW50LCBpbnQgKik7CgoKCgoKCgp2 b2lkIEVJSVJlZ2lzdGVyICh2b2lkKTsKIyA0NjIgIi4uLy4uLy4uL2xpYi9nZGJmcm10cy5oIgp2 b2lkIEVPU1JlZ2lzdGVyKCB2b2lkICk7CgoKCgoKCgp2b2lkIEVQSFJlZ2lzdGVyICh2b2lkKTsK CgoKCgoKCkZJTEUgKiBFUkRPcGVuIChjaGFyICosIGNoYXIgKik7CnZvaWQgRVJEQ2xvc2UgKEZJ TEUgKik7CmludCBFUkRHZW9yZWZJTyAoRklMRSAqLCBpbnQsIGNoYXIgKiwgZG91YmxlICosIGRv dWJsZSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICop Owp2b2lkIEVSRFJlZ2lzdGVyICh2b2lkKTsKRklMRSAqIEVSREdEQkNyZWF0ZSAoY2hhciAqLCBp bnQsIGludCwgaW50LCBpbnQsIGNoYXIgKik7CkZJTEUgKiBFUkRDcmVhdGUgKGNoYXIgKiwgaW50 LCBpbnQsIGludCwgaW50KTsKaW50IEVSRFRlc3RPcGVuIChHREJUZXN0SW5mb190ICopOwoKCgoK Cgp2b2lkIEdBVlJlZ2lzdGVyKCB2b2lkICk7CgoKCgoKCnZvaWQgR0RCUlNUUmVnaXN0ZXIoKTsK CgoKCgoKCnZvaWQgR0dGUmVnaXN0ZXIodm9pZCk7CgoKCgoKCgp2b2lkIEdSRFJlZ2lzdGVyKHZv aWQpOwoKCgoKCgoKdm9pZCBHUkZSZWdpc3Rlcih2b2lkKTsKCgoKCgoKdm9pZCBHUlNSZWdpc3Rl ciggdm9pZCApOwpGSUxFICogR1JTQ3JlYXRlQ2VsbCggY2hhciAqLCBpbnQsIGludCwgaW50LCBp bnQsIGludCwgZG91YmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSwg ZG91YmxlLCBkb3VibGUgKTsKRklMRSAqIEdSU0NyZWF0ZVZlY0ZpbGUoIGNoYXIgKiApOwoKCgoK dm9pZCBHSUFSZWdpc3Rlciggdm9pZCApOwoKCgoKCnZvaWQgR0lGUmVnaXN0ZXIoIHZvaWQgKTsK dm9pZCBJbnN0YWxsR0lGV3JpdGVIYW5kbGVyKAogICAgc2l6ZV90ICgqSGFuZGxlcikoRklMRSAq ZnAsIHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemVvZmJ1ZikgKTsKaW50IFdyaXRlR0lGKEZJTEUgKmZw LCB1bnNpZ25lZCBjaGFyICpwaWMsIGludCBwdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICBp bnQgdywgaW50IGgsCiAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqcm1hcCwg dW5zaWduZWQgY2hhciAqZ21hcCwgdW5zaWduZWQgY2hhciAqYm1hcCwKICAgICAgICAgICAgICAg ICAgICAgICBpbnQgbnVtY29scyxpbnQgY29sb3JzdHlsZSwKICAgICAgICAgICAgICAgICAgICAg ICBjaGFyICpjb21tZW50KTsKCgoKCgp2b2lkIEdURVJlZ2lzdGVyKCB2b2lkICk7CgoKCgoKCnZv aWQgR1hGUmVnaXN0ZXIoIHZvaWQgKTsKCgoKCgoKCnZvaWQgSERGUmVnaXN0ZXIgKHZvaWQpOwoK CgoKCgoKdm9pZCBIREY0UmVnaXN0ZXIgKHZvaWQpOwoKCgoKCgp2b2lkIEhFR1JlZ2lzdGVyKCB2 b2lkICk7CgoKCgoKdm9pZCBIRVBSZWdpc3Rlciggdm9pZCApOwoKCgoKCgp2b2lkIEhFU1JlZ2lz dGVyKCB2b2lkICk7CkZJTEUgKkhFU0NyZWF0ZSggY2hhciAqLCBpbnQsIGludCwgaW50LCBpbnQs IGNoYXIgKiwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQsIGludCwgaW50LCBk b3VibGUgKiwgZG91YmxlICogKTsKaW50IEhFU1dyaXRlTWV0YURhdGEoIEZJTEUgKiwgaW50LCBj aGFyICosIGNoYXIgKiApOwoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBuUGl4ZWxzOwogIGlu dCBuTGluZXM7CgogIGludCBuVlFDb3VudDsKICBpbnQgKnBhblZRQ2hhbk51bTsKICBGSUxFICoq cGFmcFZRQ2hhbjsKCiAgaW50IG5Ob25WUUNvdW50OwoKICBpbnQgKnBhbk5vblZRQ2hhbk51bTsK ICBGSUxFICoqcGFmcE5vblZRQ2hhbjsKCiAgaW50IG5Db2RlVmVjdG9yczsKICBpbnQgbkRhdGFU eXBlOwogIHZvaWQgKnBzT3RoZXJJbmZvOwogIGludCBuQml0c1BlckluZGV4Owp9IFZRdWJlSW5m b190OwoKVEJvb2wgR2V0VlF1YmVJbmZvKCBGSUxFICosIFZRdWJlSW5mb190ICogKTsKVEJvb2wg R2V0VlF1YmVDb2RlQm9vayggRklMRSAqLCB2b2lkICogKTsKVEJvb2wgR2V0VlF1YmVJbmRleE1h cCggRklMRSAqLCBpbnQgKiwgdWludDE2ICogKTsKdm9pZCBWUXViZUNsZWFuVXAoIFZRdWJlSW5m b190ICogKTsKVEJvb2wgVlF1YmVDcmVhdGUoIGNoYXIgKiwgaW50LCBpbnQsIGludCwgaW50LCBp bnQgKTsKVEJvb2wgUHV0VlF1YmVDb2RlQm9vayggY2hhciAqLCBpbnQsIGludCwgaW50LCBpbnQs IGludCAqLCB2b2lkICogKTsKVEJvb2wgUHV0VlF1YmVJbmRleE1hcCggY2hhciAqLCBpbnQgKiwg aW50LCBpbnQsIHVpbnQxNiAqICk7CgoKCgoKCnZvaWQgSElSZWdpc3Rlciggdm9pZCApOwoKCgoK aW50IElEQlRlc3RPcGVuKCBHREJUZXN0SW5mb190ICogKTsKdm9pZCBJREJSZWdpc3RlcigpOwoK CgoKdm9pZCBJRkZUUmVnaXN0ZXIoKTsKCgoKCnZvaWQgSUlTUmVnaXN0ZXIoKTsKCgoKCgoKdm9p ZCBJTkZSZWdpc3RlcigpOwoKCgoKCgoKdm9pZCBKREJSZWdpc3RlciAodm9pZCk7CkZJTEUgKiBK REJDcmVhdGUgKGNoYXIgKiwgaW50LCBpbnQsIGludCwgaW50LCBjaGFyICogKTsKCgoKCnZvaWQg SnBlZ0R1bXBNb3ZpZUZyYW1lKEZJTEUgKiwgdW5zaWduZWQgY2hhciAqLCBpbnQsIGludCwgaW50 LAogICAgICAgICAgICAgICAgICAgICAgICBpbnQsIGludCk7CgoKCgp2b2lkIExBU1JlZ2lzdGVy KHZvaWQpOwoKCgoKCgoKdm9pZCBMSU1SZWdpc3RlciAodm9pZCk7CgoKCgoKCnZvaWQgTElQUmVn aXN0ZXIoIHZvaWQgKTsKCgoKCgoKCkZJTEUgKiBMU0NPcGVuIChjaGFyICogLCBjaGFyICopOwp2 b2lkIExTQ0Nsb3NlIChGSUxFICopOwp2b2lkIExTQ1JlZ2lzdGVyICh2b2lkKTsKaW50IExTQ1Rl c3RPcGVuIChHREJUZXN0SW5mb190ICopOwpGSUxFICogTFNDQ3JlYXRlIChjaGFyICosIGludCwg aW50LCBpbnQpOwoKCgoKCnZvaWQgTUlGUmVnaXN0ZXIoIHZvaWQgKTsKCmludCBNYXBJbmZvUmVh ZFByb2pJbmZvKGNoYXIgKnBzelRBQkZpbGUsUHJvakluZm9fdCAqcHJval9pbmZvKTsKCgoKCgoK dm9pZCBNRU1SZWdpc3RlciAodm9pZCk7CgoKCgoKCnZvaWQgTUZGUmVnaXN0ZXIgKHZvaWQpOwoK CgoKCgp2b2lkIE1QQVJlZ2lzdGVyKHZvaWQpOwoKCgoKCgp2b2lkIE1QUFJlZ2lzdGVyKHZvaWQp OwoKCgoKCgp2b2lkIE1QUlJlZ2lzdGVyKHZvaWQpOwp2b2lkIFJlYWRDU1lGaWxlKCBjaGFyICog cHN6TVBSRmlsZW5hbWUsIGNoYXIgKiBwc3pDU1lCYXNlLAogICAgICAgICAgICAgICAgICAgICAg ICAgUHJvakluZm9fdCAqIHBzUHJvaiApOwoKCgoKCgp2b2lkIE1QU1JlZ2lzdGVyKHZvaWQpOwoK aW50IElMV0lTUmVhZFZlcnRpY2VzKEZJTEUgKmZwU0csIEZJTEUgKmZwQ0QsIGxvbmcgbERhdGFT dGFydFBvc2l0aW9uLAogICAgZG91YmxlIGRmQWxwaGEsIGRvdWJsZSBkZkJldGExLCBkb3VibGUg ZGZCZXRhMiwgaW50ICpuQ291bnQsCiAgICBHREJWZXJ0ZXggKipwYXNTZWdtZW50VmVydGljZXMp OwoKCgoKCgp2b2lkIFRCVFJlZ2lzdGVyKHZvaWQpOwoKCnR5cGVkZWYgc3RydWN0IERvbWFpbklu Zm8gewogICAgaW50IG5Eb21haW5XaWR0aDsKICAgIGludCBuTnVtYmVyUmVjb3JkczsKICAgIGlu dCBuTnVtYmVyQ29sdW1uczsKICAgIGNoYXIgKnBzekRvbWFpbkRhdGE7Cn0gRG9tYWluSW5mbzsK CnZvaWQgSUxXSVNSZWFkRE9NRmlsZSggY2hhciAqIHBzekZpbGVuYW1lLCBjaGFyICogcHN6RE9N QmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgIERvbWFpbkluZm8gKnBzRG9tYWluSW5mbyk7 ClRCb29sIElMV0lTR2V0RE9NbWFpbk5hbWUoRG9tYWluSW5mbyAqcHNEb21haW5JbmZvLAogICAg aW50IG5WYWx1ZVR5cGUsIGludCBuVmFsdWUsIGNoYXIgKipwcHN6RG9tYWluTmFtZSwgY2hhciAq KnBwc3pEb21haW5Db2RlKTsKCgoKCgoKdm9pZCBNUllSZWdpc3RlciAodm9pZCk7CkZJTEUgKiBN UllDcmVhdGUgKGNoYXIgKiwgaW50LCBpbnQsIGludCwgaW50LCBjaGFyICopOwojIDgwNCAiLi4v Li4vLi4vbGliL2dkYmZybXRzLmgiCnZvaWQgTkRCUmVnaXN0ZXIgKHZvaWQpOwoKCgoKCgp2b2lk IE5EQlJHQlJlZ2lzdGVyICh2b2lkKTsKCgoKCgoKCnZvaWQgTkRGUmVnaXN0ZXIgKHZvaWQpOwoK CgoKCgp2b2lkIE5JVEZSZWdpc3Rlciggdm9pZCApOwoKdHlwZWRlZiBzdHJ1Y3QgTklURkluZm9f cwp7CiAgc3RydWN0IE5JVEZJbmZvX3MgKm5leHQgOwogIEZJTEUgKmZwIDsKCiAgaW50NjQgbklt YWdlSGVhZGVyT2Zmc2V0OwogIGRvdWJsZSBkZlZlcnNpb247CiAgVEJvb2wgYkNyZWF0aW5nTmV3 RmlsZTsKICBUQm9vbCBiSGVhZGVyV3JpdHRlbjsKICBjaGFyICoqcGFwc3pNZXRhRGF0YTsKICBU Qm9vbCBiVGlsZTsKICBpbnQgbmJpdHM7CgogIGNoYXIgKnBzekRlc2NyaXB0aW9uOwogIGNoYXIg c3pJbWFnZURhdGVbMjJdOwogIGludCBpbWFnZSA7CiAgaW50IHBpeGVsczsKICBpbnQgbGluZXMg OwogIGxvbmcgb2Zmc2V0OwogIGxvbmcgcmVjc2l6OwoKICBpbnQgZW5jcnlwIDsKICBjaGFyIGlj WzNdIDsKICBjaGFyIGNvbXJhdFs1XTsKICBpbnQgbmJhbmRzIDsKICBjaGFyIGltb2RlWzJdIDsK ICBsb25nIG5icHAgOwoKICBpbnQgbkxvY1RhYmxlTG9jOwogIGludCBuSW1hZ2VEaXNwbGF5UGFy YW1ldGVyTG9jOwogIGludCBuQ29tcHJlc3Npb25TZWN0aW9uTG9jOwogIGludCBuQ29tcHJlc3Np b25Mb29rdXBTdWJzZWN0aW9uTG9jOwogIGludCBuU3BhdGlhbERhdGFTdWJzZWN0aW9uTG9jOwog IGludCBuQ292ZXJhZ2VTZWN0aW9uTG9jOwogIGludCBuTWFza1NlY3Rpb25Mb2M7CiAgaW50IG5D b2xvcm1hcFN1YnNlY3Rpb25Mb2M7CgogIHVpbnQzMiAqYXBhblZRQ29tcExVVFs0XTsKICB1aW50 MzIgKnBhblRpbGVPZmZzZXQ7CiAgdW5zaWduZWQgY2hhciAqcGFieUxVVDsKCiAgVEJvb2wgYkdp dmVuR2VvcmVmV2FybmluZzsKCiAgaW50IG5icHIgOwogIGludCBuYnBjIDsKICBpbnQgbnBwYmg7 CiAgaW50IG5wcGJ2OwoKICBUQm9vbCBiUlBDT087CiAgaW50IGxpbmVfb2ZmOwogIGludCBzYW1w X29mZjsKICBkb3VibGUgbGF0X29mZjsKICBkb3VibGUgbG9uZ19vZmY7CiAgaW50IGhlaWdodF9v ZmY7CiAgaW50IGxpbmVfc2NhbGU7CiAgaW50IHNhbXBfc2NhbGU7CiAgZG91YmxlIGxhdF9zY2Fs ZTsKICBkb3VibGUgbG9uZ19zY2FsZTsKICBpbnQgaGVpZ2h0X3NjYWxlOwogIGRvdWJsZSBsaW5l X251bV9jb2VmZlsyMF07CiAgZG91YmxlIGxpbmVfZGVuX2NvZWZmWzIwXTsKICBkb3VibGUgc2Ft cF9udW1fY29lZmZbMjBdOwogIGRvdWJsZSBzYW1wX2Rlbl9jb2VmZlsyMF07CgoKICBpbnQgbkNv bUZhYzsKICB1bmlvbgogIHsKICAgICBzdHJ1Y3QganBlZ19jb21wcmVzc19zdHJ1Y3QgKmM7CiAg ICAgc3RydWN0IGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QgKmQ7CiAgfSBpbmZvOwoKICBzdHJ1Y3Qg anBlZ19lcnJvcl9tZ3IgKmplcnI7CgogIHVuc2lnbmVkIGNoYXIgKmJ1ZjsKCiAgUHJvakluZm9f dCBvUHJvajsKfSBOSVRGSW5mb190OwoKdm9pZCBOSVRGRGF0YSAoRklMRSAqLCBOSVRGSW5mb190 ICoqKTsKdm9pZCBOSVRGR2VvMkltZyAoTklURkluZm9fdCAqLCBkb3VibGUsIGRvdWJsZSwgZG91 YmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqLCBkb3VibGUgKik7Cmlu dCBOSVRGSW1nMkdlbyAoTklURkluZm9fdCAqLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlICosCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlICosIGRvdWJsZSAqLCBGSUxFICosIGRv dWJsZSwgaW50KTsKCgoKCgoKdm9pZCBOVEZSZWdpc3Rlciggdm9pZCApOwoKCgoKdm9pZCBOVEZM TFJlZ2lzdGVyKHZvaWQpOwoKCgoKdm9pZCBOVEZDVFJlZ2lzdGVyKHZvaWQpOwoKCgoKdm9pZCBO VEZTVFJlZ2lzdGVyKHZvaWQpOwoKCgoKdm9pZCBOVEZPU1JlZ2lzdGVyKHZvaWQpOwoKCgoKdm9p ZCBOVEZCRFJlZ2lzdGVyKHZvaWQpOwoKCgoKdm9pZCBOVEZCTFJlZ2lzdGVyKHZvaWQpOwoKCgoK dm9pZCBOVEZBUFJlZ2lzdGVyKHZvaWQpOwoKCgoKdm9pZCBOVEZNRFJlZ2lzdGVyKHZvaWQpOwoK Cgp2b2lkIE5UWFJlZ2lzdGVyKCk7CgoKCgp2b2lkIE5WSVJlZ2lzdGVyKCB2b2lkICk7CgoKCgoK Cgp2b2lkIE9CSlJlZ2lzdGVyKCB2b2lkICk7CgoKCgoKCgp2b2lkIE9HRElSZWdpc3Rlciggdm9p ZCApOwoKCgoKCnZvaWQgT1JBUmVnaXN0ZXIoIHZvaWQgKTsKCgoKCgoKdm9pZCBPUkJSZWdpc3Rl ciggdm9pZCApOwoKCgoKCgoKdm9pZCBQTFRSZWdpc3Rlcih2b2lkKTsKCgoKCgp2b2lkIFBQTURC UmVnaXN0ZXIodm9pZCk7CgoKCgoKCnZvaWQgUk5IUmVnaXN0ZXIodm9pZCk7CgoKCgoKCnZvaWQg U0RFUmVnaXN0ZXIodm9pZCk7CgoKCgoKCnZvaWQgREZBRFJlZ2lzdGVyKHZvaWQpOwoKCgoKCgp2 b2lkIERBRklGUmVnaXN0ZXIodm9pZCk7CgoKCgoKCnZvaWQgRFZEUmVnaXN0ZXIodm9pZCk7CgoK CgoKCgp2b2lkIERWT0ZSZWdpc3Rlcih2b2lkKTsKCgoKCgoKdm9pZCBCSUdJREVBUmVnaXN0ZXIo dm9pZCk7CgoKCgoKCnZvaWQgQURPUmVnaXN0ZXIodm9pZCk7CgoKdm9pZCBEQkFET1JlZ2lzdGVy KHZvaWQpOwoKCgoKCnZvaWQgWExTREFPUmVnaXN0ZXIodm9pZCk7CnZvaWQgTURCREFPUmVnaXN0 ZXIodm9pZCk7CgoKCgoKdm9pZCBTSFBSZWdpc3Rlcih2b2lkKTsKIyAxMDkyICIuLi8uLi8uLi9s aWIvZ2RiZnJtdHMuaCIKdm9pZCBTUENSZWdpc3RlciAodm9pZCk7CgoKCgoKCgp2b2lkIFNQQ0JS ZWdpc3RlciAodm9pZCk7CgoKCgoKCgp2b2lkIFNQVlJlZ2lzdGVyICh2b2lkKTsKCgoKCgoKCnZv aWQgU1VOUmVnaXN0ZXIodm9pZCk7CkZJTEUgKiBTVU5DcmVhdGUoY2hhciAqLCBpbnQsIGludCwg aW50KTsKCgoKCgoKdm9pZCBTUFNSZWdpc3Rlciggdm9pZCApOwoKCgoKCgp2b2lkIFNRRFJlZ2lz dGVyKCB2b2lkICk7CgoKCgoKCnZvaWQgU1NJUmVnaXN0ZXIoIHZvaWQgKTsKCgoKCgp2b2lkIFRC QVJlZ2lzdGVyKHZvaWQpOwoKCgoKCgp2b2lkIFNXRlJlZ2lzdGVyKHZvaWQpOwojIDExNjAgIi4u Ly4uLy4uL2xpYi9nZGJmcm10cy5oIgp2b2lkIFREQlJlZ2lzdGVyICh2b2lkKTsKCgoKCgoKCnZv aWQgVEdBUmVnaXN0ZXIodm9pZCk7CgoKCgoKdm9pZCBUSU5SZWdpc3Rlciggdm9pZCApOwoKCgoK CgoKdm9pZCBVTklSZWdpc3RlciAodm9pZCk7CgoKCgoKCnZvaWQgVkVIUmVnaXN0ZXIodm9pZCk7 CgoKCgp2b2lkIFZJQ0FSUmVnaXN0ZXIodm9pZCk7CgoKCgoKdm9pZCBWRFJlZ2lzdGVyKCB2b2lk ICk7CgoKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CgoKCgoKICAgIGludCB2b2lkX3BhcmFtZXRlcjsK fSBWUEZIZWFkZXI7Cgp0eXBlZGVmIHN0cnVjdCB2cGYKewogIHN0cnVjdCB2cGYgKm5leHQ7CiAg RklMRSAqZnBWUEY7CiAgVlBGSGVhZGVyICpIZWFkZXI7CiAgZG91YmxlIFhNaW47CiAgZG91Ymxl IFlNaW47CiAgZG91YmxlIFhNYXg7CiAgZG91YmxlIFlNYXg7CiAgZG91YmxlIFhTdGFydDsKICBk b3VibGUgWEVuZDsKICBkb3VibGUgWVN0YXJ0OwogIGRvdWJsZSBZRW5kOwogIGludCBNZWRpYVR5 cGU7CiAgY2hhciAqRGF0YWJhc2VQYXRoOwogIGNoYXIgKkxpYnJhcnk7CiAgY2hhciAqKkNvdmVy YWdlOwogIGludCBOQ292ZXJhZ2U7CiAgY2hhciAqQWNjZXNzUGF0aDsKICBpbnQgTlRpbGU7CiAg aW50IExhc3RUaWxlOwogIGludCAqVGlsZUZpcnN0U3RydWN0OwogIGludCAqVGlsZUxhc3RTdHJ1 Y3Q7CiAgY2hhciAqKlRpbGVSZWZTdHI7CiAgY2hhciAqKlNlZ21lbnREZXNjcmlwdG9yOwogIGlu dCBOU2VnbWVudDsKfSBWUEZJbmZvX3Q7CgoKCkZJTEUgKiBWUEZPcGVuIChjaGFyICosIGNoYXIg Kik7CnZvaWQgVlBGQ2xvc2UgKEZJTEUgKik7CnZvaWQgVlBGUmVnaXN0ZXIgKHZvaWQpOwp2b2lk IFZQRlZlY3RvckluZm8gKEZJTEUgKiwgaW50LCBpbnQsIFZJbmZvX3QgKik7CmludCBWUEZWZWN0 b3JJTyAoVkluZm9fdCAqLCBpbnQsIGludCwgaW50LCBpbnQgKiwgaW50ICosIGludCAqLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKiwgZG91YmxlICoqLCBkb3VibGUgKiwgaW50 KTsKaW50IFZQRkFjY2Vzc0luZm8gKEZJTEUgKiwgVlBGSW5mb190ICopOwppbnQgVlBGU2VnTmV4 dCggRklMRSAqLCBpbnQsIGludCApOwp2b2lkIFZQRlNlZ0Rlc2NJTyggRklMRSAqLCBpbnQsIGlu dCwgaW50LCBjaGFyICogKTsKCgoKCgoKdm9pZCBWVFhSZWdpc3Rlcih2b2lkKTsKCgoKCgoKCnZv aWQgV01QUmVnaXN0ZXIgKHZvaWQpOwoKCgoKCgoKdm9pZCBYQk1SZWdpc3RlciAodm9pZCk7CgoK CgoKCgpGSUxFICogWFdEQ3JlYXRlIChjaGFyICosIGludCwgaW50LCBpbnQsIGludCk7CnZvaWQg WFdEUmVnaXN0ZXIgKHZvaWQpOwojIDEzMTAgIi4uLy4uLy4uL2xpYi9nZGJmcm10cy5oIgp2b2lk IFNSVlJlZ2lzdGVyKCB2b2lkICk7CgoKCgoKdm9pZCBDRU9TUmVnaXN0ZXIgKHZvaWQpOwoKCgoK CgoKdm9pZCBQQ1hSZWdpc3Rlcih2b2lkKTsKCgoKCgp2b2lkIEdHSlJlZ2lzdGVyKHZvaWQpOwpH REJMYXllciBHR0pHZXRQcmltYXJ5TGF5ZXIoR0RCTGF5ZXIgcHNKb2luZWRMYXllcik7CkZJTEUg KkdHSkdldFByaW1hcnlGaWxlKEZJTEUgKmZwKTsKR0RCSm9pbkluZm8gKkdHSkdldEpvaW5JbmZv UmVmKEdEQkxheWVyIHBzSm9pbmVkTGF5ZXIpOwoKCgoKCnZvaWQgR1RPUE8zMFJlZ2lzdGVyKHZv aWQpOwoKCgoKCnZvaWQgRUxBU1JlZ2lzdGVyKHZvaWQpOwoKCgoKCnZvaWQgVEJCUmVnaXN0ZXIo dm9pZCk7CgoKCgoKdm9pZCBDTUJSZWdpc3Rlcih2b2lkKTsKCgoKCgp2b2lkIElEUlJlZ2lzdGVy KHZvaWQpOwoKCgoKCnZvaWQgU0RUU1JlZ2lzdGVyKHZvaWQpOwoKCgoKCnZvaWQgTUlUQUJSZWdp c3Rlcih2b2lkKTsKCgoKCkZJTEUgKlRJTE9wZW4oY2hhciAqcHN6RmlsZW5hbWUsIGNoYXIgKik7 CnZvaWQgVElMQ2xvc2UoRklMRSAqZnApOwp2b2lkIFRJTFJlZ2lzdGVyKHZvaWQpOwpUQm9vbCBU SUxUZXN0T3BlbihHREJUZXN0SW5mbyAqcHNUZXN0SW5mbyk7CnZvaWQgVElMU2l6ZUluZm8oRklM RSAqZnAsIGludCAqblBpeGVscywgaW50ICpuTGluZXMsIGludCAqbkNoYW5uZWxzKTsKaW50IFRJ TENoYW5UeXBlKEZJTEUgKmZwLCBpbnQgbkNoYW5uZWwpOwppbnQgVElMUHJvamVjdGlvbklPKEZJ TEUgKmZwLCBpbnQgbkZ1bmMsIFByb2pJbmZvX3QgKnBzUHJvakluZm8pOwp2b2lkIFRJTEJ5dGVD aGFuSU8oRklMRSAqZnAsIGludCBuRnVuYywKICAgICAgICAgICAgICAgICAgIGludCBuWE9mZiwg aW50IG5ZT2ZmLCBpbnQgblhTaXplLCBpbnQgbllTaXplLAogICAgICAgICAgICAgICAgICAgdW5z aWduZWQgY2hhciAqcGFieUltZ0J1ZiwgaW50IG5CdWZYU2l6ZSwgaW50IG5CdWZZU2l6ZSwKICAg ICAgICAgICAgICAgICAgIGludCBuQnVmQ2hhbkNvdW50LCBpbnQgKnBhbkNoYW5NYXApOwojIDE0 NTQgIi4uLy4uLy4uL2xpYi9nZGJmcm10cy5oIgp9CiMgMjM4ICIuLi8uLi8uLi9saWIvcGNpLmgi IDIKIyAxICIuLi8uLi8uLi9saWIvaWRiLmgiIDEKIyAzNyAiLi4vLi4vLi4vbGliL2lkYi5oIgoj IDEgIi4uLy4uLy4uL2xpYi9nZGIuaCIgMQojIDM4ICIuLi8uLi8uLi9saWIvaWRiLmgiIDIKCmV4 dGVybiAiQyIgewoKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgICBpbnQgblNlZ21lbnQ7CiAgICBp bnQgblN0YXJ0QmxvY2s7CiAgICBpbnQgbk93bmluZ0xheWVyOwogICAgaW50IG5OZXh0QmxvY2s7 Cn0gSURCU3lzQmxvY2tJbmZvOwoKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgICBpbnQgblN0YXJ0 U3lzQmxvY2s7CiAgICBpbnQgbkxheWVyVHlwZTsKICAgIGludCBuTGVuZ3RoSW5CeXRlczsKCiAg ICBpbnQgbkxheWVyQmxvY2tzOwogICAgaW50ICpwYW5MYXllckJsb2NrTWFwOwp9IElEQlN5c0xh eWVySW5mbzsKCnR5cGVkZWYgc3RydWN0CnsKICAgIGNoYXIgY2hGbGFnOwogICAgY2hhciBzek5h bWVbOV07CiAgICBpbnQgblR5cGU7CiAgICBsb25nIG5TdGFydDsKICAgIGxvbmcgblNpemU7Cn0g SURCU2VnUHRJbmZvOwoKCgoKCnR5cGVkZWYgc3RydWN0IHsKICBsb25nIGZzdGltYTsKICBsb25n IGZzdGhkcjsKICBpbnQgY2hhbm5lbHM7CiAgaW50IHBpeGVsczsKICBpbnQgbGluZXM7CiAgaW50 IGR1bW15OwogIGxvbmcgZnN0YmtzOwogIGxvbmcgYmxrcHRyOwogIGxvbmcgdG90c2l6OwogIGlu dCBzdGF0dXM7CiAgbG9uZyBJbWdCbG9ja3M7CgoKICBpbnQgTGFzdFNlZzsKICBsb25nIExhc3RT dGFydDsKICBsb25nIExhc3RTaXplOwogIGNoYXIgTGFzdEZsYWc7CiAgaW50IExhc3RUeXBlOwoK CiAgaW50IGNobjh1OwogIGludCBjaG4xNnM7CiAgaW50IGNobjE2dTsKICBpbnQgY2huMzJyOwog IGludCBJbnRlcmxlYXZlOwoKCiAgRklMRSAqKlJhd0ZpbGU7CiAgaW50ICpSYXdDaGFubmVsOwog IGludCAqUmF3Q2hhbkRCSVc7CgogIGNoYXIgKkxvY2s7CiAgdW5zaWduZWQgY2hhciAqSW5pdE92 ZXJ2aWV3czsKCgogIGludCBNYXhCaXRtYXBzOwogIGNoYXIgKkRlc2NCaXRtYXBzOwoKICBsb25n IExhc3RSZWFkVGltZTsKCgoKCiAgaW50IG5WZWN0b3JMYXllcnM7CiAgc3RydWN0IEdEQkxheWVy X3QgKipwYXBzTGF5ZXJzOwoKCgoKICBUQm9vbCBiTWV0YURhdGFDaGFuZ2VkOwogIGNoYXIgKipw YXBzek1ldGFEYXRhOwoKCgoKCgogIGludCBuU3lzRGlyU2VnOwogIFRCb29sIGJCbG9ja0luZm9E aXJ0eTsKICBpbnQgbkdyb3dpbmdTZWc7CiAgaW50IG5GaXJzdEZyZWVCbG9jazsKCiAgaW50IG5T eXNCbG9ja3M7CiAgSURCU3lzQmxvY2tJbmZvICpwYXNTeXNCbG9ja0luZm87CgogIGludCBuQmxv Y2tDYWNoZUlEOwogIGludCBuQmxvY2tDYWNoZUxheWVyOwogIFRCb29sIGJCbG9ja0NhY2hlRGly dHk7CiAgdW5zaWduZWQgY2hhciAqcGFieUJsb2NrQ2FjaGU7CgogIGludCBuU3lzTGF5ZXJzOwog IElEQlN5c0xheWVySW5mbyAqcGFzU3lzTGF5ZXJJbmZvOwoKCgoKICBpbnQgbk1heFNlZ21lbnRz OwogIElEQlNlZ1B0SW5mbyAqcGFzU2VnUHRJbmZvOwoKCgoKCgogIFRCb29sIGJUcnlpbmdUb0Ns b3NlOwoKICBjaGFyICpwc3pFbmNyeXB0S2V5Owp9IElEQkluZm9fdDsKCgoKCnR5cGVkZWYgc3Ry dWN0IHsKICBjaGFyIEZpbGVUeXBlWzhdOwogIGNoYXIgVmVyc2lvbls4XTsKICBjaGFyIEZpbGVT aXplWzE2XTsKICBjaGFyIFJlc2VydmVkWzE2XTsKICBjaGFyIERlc2NyaXB0aW9uWzY0XTsKICBj aGFyIEZhY2lsaXR5WzMyXTsKICBjaGFyIFRleHQxWzY0XTsKICBjaGFyIFRleHQyWzY0XTsKICBj aGFyIENyZWF0aW9uRGF0ZVsxNl07CiAgY2hhciBVcGRhdGVEYXRlWzE2XTsKCiAgY2hhciBJbWFn ZVN0YXJ0WzE2XTsKICBjaGFyIEltYWdlU2l6ZVsxNl07CiAgY2hhciBJbWFnZUhlYWRTdGFydFsx Nl07CiAgY2hhciBJbWFnZUhlYWRTaXplWzhdOwogIGNoYXIgSW50ZXJsZWF2ZVs4XTsKICBjaGFy IFJlc2VydmVkMls4XTsKICBjaGFyIENoYW5uZWxzWzhdOwogIGNoYXIgUGl4ZWxzWzhdOwogIGNo YXIgTGluZXNbOF07CiAgY2hhciBQaXhlbFVuaXRbOF07CiAgY2hhciBYUGl4ZWxTaXplWzE2XTsK ICBjaGFyIFlQaXhlbFNpemVbMTZdOwoKICBjaGFyIFNlZ21lbnRIZWFkU3RhcnRbMTZdOwogIGNo YXIgU2VnbWVudEhlYWRTaXplWzhdOwoKICBjaGFyIE51bThVWzRdOwogIGNoYXIgTnVtMTZTWzRd OwogIGNoYXIgTnVtMTZVWzRdOwogIGNoYXIgTnVtMzJSWzRdOwogIGNoYXIgUmVzZXJ2ZWQzWzMy XTsKfSBGaWxlSGVhZGVyX3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgY2hhciBEZXNjcmlwdGlvbls2 NF07CiAgY2hhciBGaWxlbmFtZVs2NF07CiAgY2hhciBDcmVhdGlvbkRhdGVbMTZdOwogIGNoYXIg VXBkYXRlRGF0ZVsxNl07CiAgY2hhciBEYXRhVHlwZVs4XTsKICBjaGFyIEltYWdlT2Zmc2V0WzE2 XTsKICBjaGFyIFBpeGVsT2Zmc2V0WzhdOwogIGNoYXIgTGluZU9mZnNldFs4XTsKICBjaGFyIENo YW5uZWxMb2NrOwogIGNoYXIgQnl0ZVN3YXBwZWQ7CiAgY2hhciBEYXRhVW5pdHNbMTZdOwogIGNo YXIgQWRkQ29lZmZbMTZdOwogIGNoYXIgTXVsdENvZWZmWzE2XTsKICBjaGFyIEZpbGVYT2ZmWzhd OwogIGNoYXIgRmlsZVlPZmZbOF07CiAgY2hhciBGaWxlWFNpemVbOF07CiAgY2hhciBGaWxlWVNp emVbOF07CiAgY2hhciBHREJDaGFubmVsWzhdOwogIGNoYXIgUmVzZXJ2ZWRbOTRdOwogIGNoYXIg SGlzdG9yeVs4MCo4XTsKfSBJbWFnZUhlYWRlcl90OwoKdHlwZWRlZiBzdHJ1Y3QgewogIGNoYXIg VHJhbnNmb3JtWzE2XTsKICBjaGFyIElucHV0U3lzWzE2XTsKICBjaGFyIE91dHB1dFN5c1sxNl07 CiAgY2hhciBOWENvZWZbOF07CiAgY2hhciBOWUNvZWZbOF07CiAgY2hhciBSZXNlcnZlZFsxNDhd OwogIGNoYXIgWENvZWZbMjYqNTVdOwogIGNoYXIgWUNvZWZbMjYqNTVdOwp9IElEQkdlb3JlZkRh dGFfdDsKCmludCBJREJJbWFnZUhlYWRlcklPKCBGSUxFICosIGludCwgaW50LCBJbWFnZUhlYWRl cl90ICogKTsKCgoKCgpGSUxFICogSURCT3BlbiggY2hhciAqLCBjaGFyICogKTsKRklMRSAqIElE QlJlb3BlbihGSUxFICopOwpGSUxFICogSURCQ3JlYXRlKCBjaGFyICosIGludCwgaW50LCBpbnQg KiwgY2hhciAqICk7CkZJTEUgKiBJREJHREJDcmVhdGUoIGNoYXIgKiwgaW50LCBpbnQsIGludCwg aW50LCBjaGFyICogKTsKY29uc3QgY2hhciAqIElEQkV4cGFuZEZpbGVuYW1lKCBjb25zdCBjaGFy ICogcHN6T3JpZ2luYWwgKTsKCnZvaWQgSURCU2VnRHNjKCBGSUxFICosIGludCApOwppbnQgSURC VGVzdE9wZW4oIEdEQlRlc3RJbmZvX3QgKiApOwp2b2lkIElEQkJ1ZmZSZWFsbG9jKCBsb25nICk7 CnZvaWQgSURCQnVmZkFsbG9jKCB2b2lkICk7CnZvaWQgSURCU3luYyggRklMRSAqICk7CnZvaWQg SURCUmVnaXN0ZXIoIHZvaWQgKTsKdm9pZCBJREJCaXRDb3VudCggRklMRSAqLCBpbnQsIGludCAq KTsKdm9pZCBJREJGaWxlRGVzYyggRklMRSAqICk7CnZvaWQgSURCUGl4ZWxTaXplKCBGSUxFICos IGludCwgZmxvYXQgKiwgZmxvYXQgKiwgY2hhciAqICk7CnZvaWQgSURCU2VnQWJvcnRIaXMoIEZJ TEUgKiwgaW50ICk7CnZvaWQgSURCU2VnQ2hlY2soIEZJTEUgKiwgaW50ICosIGludCwgaW50LCBj aGFyICogKTsKaW50IElEQlNlZ0NyZWF0ZSggRklMRSAqLCBjaGFyICosIGNoYXIgKiwgaW50LCBs b25nICk7CmludCBJREJHREJTZWdDcmVhdGUoIEZJTEUgKiwgY29uc3QgY2hhciAqLCBjb25zdCBj aGFyICosIGludCApOwp2b2lkIElEQlNlZ0RlbGV0ZSggRklMRSAqLCBpbnQgKTsKdm9pZCBJREJT ZWdEZXAoIEZJTEUgKiwgaW50LCBjaGFyICosIGludCApOwp2b2lkIElEQlNlZ0lPKCBGSUxFICos IGludCwgbG9uZywgbG9uZywgdm9pZCAqLCBpbnQgKTsKdm9pZCBJREJCaW5hcnlJTyggRklMRSAq LCBpbnQsIGludCwgaW50LCBpbnQsIHVuc2lnbmVkIGNoYXIgKiApOwppbnQgSURCR2V0QmluYXJ5 TGVuZ3RoKCBGSUxFICosIGludCApOwp2b2lkIElEQlNlZ0luZm8oIEZJTEUgKiwgaW50LCBjaGFy ICosIGludCAqLCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgKiwgbG9u ZyAqICk7CnZvaWQgSURCU2VnSW5mb0lPKCBGSUxFICosIGludCwgaW50LCBjaGFyICosIGludCAq LCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgKiwgbG9uZyAqICk7CnZv aWQgSURCU2VnUmVhZEhpcyggRklMRSAqLCBpbnQsIGludCwgY2hhciAqICk7CnZvaWQgaWRiU2Vn VXBkYXRlKCBGSUxFICosIGludCApOwp2b2lkIElEQkJ1aWxkU2VnUHRNYXAoIEZJTEUgKiBmcCAp Owp2b2lkIElEQlNlZ1dyaXRlSGlzKCBGSUxFICosIGludCwgY2hhciAqICk7CnZvaWQgSURCU2Vn V3JpdGVDb250ZW50cyggRklMRSAqLCBpbnQsIGNoYXIgKiApOwp2b2lkIElEQlNpemVJbmZvKCBG SUxFICosIGludCAqLCBpbnQgKiwgaW50ICogKTsKdm9pZCBJREJMdXRJTyggRklMRSAqLCBpbnQs IGludCwgdW5zaWduZWQgY2hhciAqICk7CnZvaWQgSURCQnJlYWtQb2ludEx1dElPKCBGSUxFICos IGludCwgaW50LCBpbnQgKiwgaW50ICosCiAgICAgICAgICAgIEdEQkJyZWFrUG9pbnRMVVRfdCAq Kik7CnZvaWQgSURCUGN0SU8oIEZJTEUgKiwgaW50LCBpbnQsIHVuc2lnbmVkIGNoYXIgKiApOwp2 b2lkIElEQkJyZWFrUG9pbnRQY3RJTyggRklMRSAqLCBpbnQsIGludCwgaW50ICosIGludCAqLAog ICAgICAgICAgICBHREJCcmVha1BvaW50UENUX3QgKiopOwp2b2lkIElEQkdjcElPKCBGSUxFICos IGludCwgaW50LCBpbnQsIGludCAqLCBjaGFyICosIGNoYXIgKiwgY2hhciAqLAogICAgICAgICAg ICAgICAgY2hhciAqLCBpbnQgKiwgZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUgKiwgZG91Ymxl ICosCiAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICogKTsKdm9pZCBJREJHREJHY3BJ TyggRklMRSAqLCBpbnQsIGludCwgaW50ICosCiAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwg Y2hhciAqLCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwgaW50ICosIGRvdWJs ZSAqLCBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqLAogICAgICAgICAgICAgICAgICAgICBk b3VibGUgKiwgZG91YmxlICogKTsKaW50IElEQkdlb3JlZklPKCBGSUxFICosIGludCwgY2hhciAq LCBkb3VibGUgKiwgZG91YmxlICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICogKTsKaW50IElEQkdlb3JlZklPMiggRklM RSAqLCBpbnQsIGNoYXIgKiwgZG91YmxlICosIGRvdWJsZSAqLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRvdWJsZSAqLCBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqICk7Cmlu dCBJREJQcm9qZWN0aW9uSU8oIEZJTEUgKiwgaW50LCBpbnQsIFByb2pJbmZvX3QgKiApOwppbnQg SURCR0RCUHJvamVjdGlvbklPKCBGSUxFICosIGludCwgUHJvakluZm9fdCAqICk7CnZvaWQgSURC Qml0bWFwSU8oIEZJTEUgKiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiwgaW50LCBpbnQgKTsKdm9pZCBJREJB cnJheUlPKCBGSUxFICosIGludCwgaW50LCBpbnQgKiwgaW50ICosIGRvdWJsZSAqKixjaGFyKik7 CmludCBJREJIaW50KCBGSUxFICogKTsKaW50IElEQkNoYW5UeXBlKCBGSUxFICosIGludCApOwp2 b2lkIElEQkNoYW5BYm9ydEhpcyggRklMRSAqLCBpbnQgKTsKdm9pZCBJREJDaGFuRGVzYyggRklM RSAqLCBpbnQsIGludCAqICk7CnZvaWQgSURCQ2hhblJlYWRIaXMoIEZJTEUgKiwgaW50LCBpbnQs IGNoYXIgKiApOwp2b2lkIElEQkNoYW5Xcml0ZUhpcyggRklMRSAqLCBpbnQsIGNoYXIgKiApOwpp bnQgSURCQ2hhbkRlc2NJTyggRklMRSAqLCBpbnQsIGludCwgY2hhciAqICk7CnZvaWQgSURCQ2hh bkRlbGV0ZSggRklMRSAqLCBpbnQgLCBpbnQgKiwgUENJQ291bnRlcik7CmNvbnN0IGNoYXIgKiBJ REJSZWFkSGlzdG9yeSggRklMRSAqLCBpbnQsIGludCwgaW50ICk7CnZvaWQgSURCV3JpdGVIaXN0 b3J5KCBGSUxFICosIGludCwgaW50LCBjb25zdCBjaGFyICogKTsKCnZvaWQgSURCQnl0ZUNoYW5J TyggRklMRSAqLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgdW5zaWduZWQgY2hhciAqLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQsIGludCwgaW50LCBpbnQgKiApOwp2b2lkIElE QkludENoYW5JTyAoIEZJTEUgKiwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludDMyICosCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCwgaW50LCBpbnQsIGludCAqICk7CnZvaWQg SURCUmVhbENoYW5JTyggRklMRSAqLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgZmxvYXQgKiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50LCBpbnQsIGludCwgaW50ICogKTsKdm9p ZCBJREJCeXRlRmlsZUlPKCBGSUxFICosIGludCwgaW50LCBpbnQsIGludCwgaW50LCB1bnNpZ25l ZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCwgaW50LCBpbnQsIGlu dCAqICk7CnZvaWQgSURCSW50RmlsZUlPICggRklMRSAqLCBpbnQsIGludCwgaW50LCBpbnQsIGlu dCwgaW50MzIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50LCBpbnQsIGludCwg aW50ICopOwp2b2lkIElEQlJlYWxGaWxlSU8oIEZJTEUgKiwgaW50LCBpbnQsIGludCwgaW50LCBp bnQsIGZsb2F0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCwgaW50LCBpbnQs IGludCAqKTsKClRCb29sIElEQkZpbGVPcGVuKCBGSUxFICosIGludCwgaW50ICk7CnZvaWQgSURC RmlsZUNsb3NlKCBGSUxFICosIGludCApOwp2b2lkIElEQkluaXRPdmVydmlldyggRklMRSAqLCBp bnQgKTsKdm9pZCBJREJTZXRDaGFuRmlsZSggRklMRSAqLCBpbnQsIGNoYXIgKiwgaW50LCBsb25n LCBsb25nLCBsb25nLCBpbnQgKTsKdm9pZCBJREJTZXRHREJDaGFuRmlsZSggRklMRSAqLCBpbnQs IGNoYXIgKiwgaW50LCBpbnQgKiwgaW50ICk7Cgp2b2lkIElEQlZlY3RvckluZm8oIEZJTEUgKiwg aW50LCBpbnQsIFZJbmZvX3QgKiApOwppbnQgSURCVmVjdG9ySU8oIFZJbmZvX3QgKiwgaW50LCBp bnQsIGludCwgaW50ICosIGludCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMy ICosIGludDMyICosIGRvdWJsZSAqKiwgZG91YmxlICosIGludCApOwppbnQgSURCU2VnTmV4dCgg RklMRSAqLCBpbnQsIGludCApOwp2b2lkIElEQlNlZ0Rlc2NJTyggRklMRSAqLCBpbnQsIGludCwg aW50LCBjaGFyICogKTsKCnZvaWQgSURCQ2xvc2UoIEZJTEUgKiApOwp2b2lkIElEQkNsb3NlVmVj dG9ycyggRklMRSAqICk7CmludCBJREJMb2NrQ2hlY2soIEZJTEUgKiwgaW50LCBpbnQgKiwgY2hh ciAqICk7CmludCBJREJHZXRDaGFuSW5mbyggRklMRSAqLCBpbnQsIGNoYXIgKiwgaW50LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyAqLCBsb25nICosIGxvbmcgKiwgaW50ICog KTsKVEJvb2wgSURCR2V0VGlsZUluZm8oIEZJTEUgKiwgaW50LCBpbnQgKiwgaW50ICogKTsKCnZv aWQgSURCVGV4dEFjY2VzcyggRklMRSAqLCBUSW5mb190ICosIGNoYXIgKiwgaW50ICk7CmludCBJ REJUZXh0UmVhZCggVEluZm9fdCAqLCBjaGFyICosIGludCApOwp2b2lkIElEQlRleHRXcml0ZShU SW5mb190ICosIGNoYXIgKiApOwoKY2hhciAqKiBJREJNZXRhRGF0YUlPKCBGSUxFICosIGludCwg aW50LCBpbnQsIGNoYXIgKiogKTsKCnZvaWQgSURCU2lnbmF0dXJlSU8oIEZJTEUgKmZwLCBpbnQg ZnVuYywgaW50IHNlZ21lbnQsIFNpZ25hdHVyZV90ICpzaWcgKTsKCnZvaWQgSURCU2F0RXBoZW1l cmlzSU8oRklMRSAqZnAsIGludCBmdW5jLCBpbnQgc2Vnbm8sCiAgICAgICAgICAgICAgICAgICAg ICAgICAgRXBoZW1lcmlzU2VnX3QgKnNlZ21lbnQpOwppbnQgRmluZDFzdEVwU2VnbWVudChGSUxF ICpmcCk7CnZvaWQgSURCU2F0RXBoZW1lcmlzRnJlZShFcGhlbWVyaXNTZWdfdCAqc2VnbWVudCk7 CnZvaWQgSURCU2F0QXR0aXR1ZGVJTyhGSUxFICpmcCwgaW50IGZ1bmMsIGludCBzZWdubywKICAg ICAgICAgICAgICAgICAgICAgICAgIEF0dGl0dWRlU2VnX3QgKnNlZ21lbnQpOwp2b2lkIFRleHRU b09yYml0KEZJTEUgKmZwLCBpbnQgc2Vnbm8sIEVwaGVtZXJpc1NlZ190ICpzZWdtZW50LAogICAg ICAgICAgICAgICAgICAgIGNoYXIgKipzdHJpbmdMaXN0LCBjaGFyICpkYnNuLCBjaGFyICpkYnNk KTsKY2hhciAqKiBPcmJpdFRvVGV4dChGSUxFICpmcCwgaW50IHNlZ25vLCBFcGhlbWVyaXNTZWdf dCAqc2VnbWVudCwKICAgICAgICAgICAgICAgICAgICAgaW50IG9wdGlvbik7CnZvaWQgSURCU2F0 TW9kZWxFcGhlbWVyaXNJTyhGSUxFICpmcCwgaW50IGZ1bmMsIGludCBzZWdubywKICAgICAgICAg ICAgICAgICAgICAgICAgIEVwaGVtZXJpc1NlZ190ICpzZWdtZW50KTsKClRCb29sIElEQk1vdmUo IEZJTEUgKiwgaW50NjQsIGludDY0LCBpbnQsIFBDSUNvdW50ZXIsIGRvdWJsZSwgZG91YmxlICk7 ClRCb29sIElEQk1vdmVTZWdtZW50KCBGSUxFICosIGludCwgaW50ICk7CnZvaWQgSURCQ29tcHJl c3MoIEZJTEUgKiApOwpUQm9vbCBJREJOZWVkc0NvbXByZXNzKCBGSUxFICogKTsKdm9pZCBJREJD aGFuQWRkKCBGSUxFICosIGludCAqLCBQQ0lDb3VudGVyICk7CnZvaWQgSURCR0RCQ2hhbkFkZCgg RklMRSAqLCBpbnQsIGludCwgUENJQ291bnRlciApOwp2b2lkIElEQkNoYW5EZWxldGUoIEZJTEUg KiwgaW50LCBpbnQgKiwgUENJQ291bnRlciApOwp2b2lkIElEQk1ha2VGaWxlSW50ZXJsZWF2ZWQo IEZJTEUgKiApOwp2b2lkIElEQkNoYW5IZWFkZXJBZGQoIEZJTEUgKiwgaW50LCBQQ0lDb3VudGVy ICk7CklEQkluZm9fdCAqSURCR2V0SW5mbyggRklMRSAqICk7CgpHREJMYXllciBJREJHZXRMYXll cihGSUxFICpmcCwgaW50IG5TZWdtZW50KTsKCkdEQkxheWVyIElEQkNyZWF0ZUxheWVyKEZJTEUg KmZwLCBjb25zdCBjaGFyICpwc3pOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGNoYXIgKnBzekRlc2MsIGNvbnN0IGNoYXIgKnBzek9wdGlvbnMpOwp2b2lkIElEQkRl bGV0ZUxheWVyKEZJTEUgKmZwLCBpbnQgblNlZ21lbnRUb0RlbGV0ZSk7CmludCBJREJHZXRQcm9q ZWN0aW9uSW5mbyhHREJMYXllciBwc0xheWVyLCBQcm9qSW5mb190ICpwc1Byb2opOwp2b2lkIElE QlNldFByb2plY3Rpb25JbmZvKEdEQkxheWVyIHBzTGF5ZXIsIFByb2pJbmZvX3QgKnBzUHJvaik7 CkdEQlNoYXBlSWQgSURCR2V0TmV4dFNoYXBlSWQoR0RCTGF5ZXIgcHNMYXllciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEdEQlNoYXBlSWQgaFNoYXBlSWQpOwpHREJTaGFwZUlk IElEQkNyZWF0ZVNoYXBlKEdEQkxheWVyIHBzTGF5ZXIsIEdEQlNoYXBlSWQgaEFkdmlzb3J5U2hh cGVJZCk7CnZvaWQgSURCRGVsZXRlU2hhcGUoR0RCTGF5ZXIgcHNMYXllciwgR0RCU2hhcGVJZCBo U2hhcGVJZCk7CkdEQlZlcnRleCAqIElEQkdldFZlcnRpY2VzKEdEQkxheWVyIHBzTGF5ZXIsIEdE QlNoYXBlSWQgaFNoYXBlSWQsIGludCAqcG4pOwp2b2lkIElEQlNldFZlcnRpY2VzKEdEQkxheWVy IHBzTGF5ZXIsIEdEQlNoYXBlSWQgaFNoYXBlSWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgbkNvdW50LCBHREJWZXJ0ZXggKnBhc1ZlcnRpY2VzKTsKR0RCRmllbGQgKiBJREJH ZXRSZWNvcmQoR0RCTGF5ZXIgcHNMYXllciwgR0RCU2hhcGVJZCBoU2hhcGVJZCk7CnZvaWQgSURC U2V0UmVjb3JkKEdEQkxheWVyIHBzTGF5ZXIsIEdEQlNoYXBlSWQgaFNoYXBlSWQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHREJGaWVsZCAqcGFzRmllbGRzKTsKR0RCU2hh cGUgKiBJREJHZXRTaGFwZShHREJMYXllciBwc0xheWVyLCBHREJTaGFwZUlkIGhTaGFwZUlkKTsK dm9pZCBJREJTZXRTaGFwZShHREJMYXllciBwc0xheWVyLCBHREJTaGFwZUlkIGhTaGFwZUlkLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHREJTaGFwZSAqcHNTaGFwZSk7ClRC b29sIElEQkFkZEZpZWxkKEdEQkxheWVyIHBzTGF5ZXIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjaGFyICpwc3pOYW1lLCBHREJGaWVsZFR5cGUgZVR5cGUsIEdEQkZpZWxkICpwc0RlZmF1 bHQpOwpUQm9vbCBJREJEZWxldGVGaWVsZChHREJMYXllciBwc0xheWVyLCBjaGFyICpwc3pOYW1l KTsKdm9pZCAqIElEQkdldFJzdChHREJMYXllciBwc0xheWVyKTsKdm9pZCBJREJTZXRSc3QoR0RC TGF5ZXIgcHNMYXllciwgdm9pZCAqIHBzUlNUKTsKdm9pZCBJREJTeW5jVmVjdG9ycyhJREJJbmZv X3QgKik7ClRCb29sIElEQlNldFVwZGF0ZU1vZGUoR0RCTGF5ZXIsIFRCb29sKTsKVEJvb2wgSURC TmV3VmVjdG9yVHlwZShHREJMYXllciBwc0xheWVyKTsKCnZvaWQgSURCQnVpbGRPdmVydmlld3Mo IEZJTEUgKiwgaW50LCBpbnQgKiwgaW50LCBUQm9vbCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyICosIElNUFByb2dyZXNzRnVuYywgdm9pZCAqICk7CnZvaWQg SURCQnVpbGRFeHRlcm5hbE92ZXJ2aWV3cyggRklMRSAqLCBpbnQsIGludCAqLCBpbnQsIFRCb29s LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq LCBJTVBQcm9ncmVzc0Z1bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB2b2lkICogKTsKR0RCT3ZlcnZpZXdJbmZvX3QgKiBJREJHZXRPdmVydmlld3MoIEZJTEUg KiwgaW50ICogKTsKCkZJTEUgKiBJREJMaW5rKCBGSUxFICosIGNvbnN0IGNoYXIgKiwgaW50ICos IGludDMyLCBJTVBQcm9ncmVzc0Z1bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiAp OwpGSUxFICpJREJJbXBvcnQoIEZJTEUgKiwgaW50ICosIGludCwgaW50ICosIGludCAqLAogICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3Qg Y2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICBJTVBQcm9ncmVzc0Z1bmMsIHZvaWQg KiApOwoKdHlwZWRlZiBzdHJ1Y3QKewogICAgY29uc3QgY2hhciAqIHBzelBPcHRpb247CiAgICBp bnQgblRyYW5zT3B0aW9uczsKfSBJREJJbXBvcnRPcHRpb25zOwoKRklMRSAqSURCSW1wb3J0RXgo IEZJTEUgKiwgaW50ICosIGludCwgaW50ICosIGludCAqLAogICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgSURCSW1wb3J0T3B0aW9ucyAqLAogICAg ICAgICAgICAgICAgICAgICAgICAgICBJTVBQcm9ncmVzc0Z1bmMsIHZvaWQgKiApOwoKCgoKCnZv aWQgSURCU3lzQmxvY2tJbmZvUmVhZCggRklMRSAqICk7CnZvaWQgSURCU3lzQmxvY2tJbmZvV3Jp dGUoIEZJTEUgKiApOwp2b2lkIElEQlN5c1NldExheWVyTGVuZ3RoKCBGSUxFICosIGludCwgaW50 ICk7CmludCBJREJTeXNHZXRMYXllckxlbmd0aCggRklMRSAqLCBpbnQgKTsKaW50IElEQlN5c0Ny ZWF0ZUxheWVyKCBGSUxFICosIGludCApOwp2b2lkIElEQlN5c0RlbGV0ZUxheWVyKCBGSUxFICos IGludCApOwp2b2lkIElEQlN5c0J5dGVJTyggRklMRSAqLCBpbnQsIGludCwgaW50LCBpbnQsIHVu c2lnbmVkIGNoYXIgKiApOwp2b2lkIElEQlN5c0Jsb2NrSW5mb0RlYWxsb2MoIEZJTEUgKiBmcCAp OwoKdm9pZCBTSVNSZWdpc3Rlciggdm9pZCApOwoKCmV4dGVybiBJREJJbmZvX3QgKklEQkluZm9b XTsKCgp2b2lkIElEQlJlYWRIZWFkZXJzKCBGSUxFICpmcCApOwoKCn0KIyAyMzkgIi4uLy4uLy4u L2xpYi9wY2kuaCIgMgoKCiMgMSAiLi4vLi4vLi4vbGliL3BjaWRldi5oIiAxCiMgMjUgIi4uLy4u Ly4uL2xpYi9wY2lkZXYuaCIKZXh0ZXJuICJDIiB7CiMgMzggIi4uLy4uLy4uL2xpYi9wY2lkZXYu aCIKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGludDMyIFR5cGU7CiAgICAgICAgaW50MzIgUGl4 ZWxzOwogICAgICAgIGludDMyIExpbmVzOwogICAgICAgIGludDMyIEltYWdlczsKICAgICAgICBp bnQzMiBHcmFwaGljczsKICAgICAgICBpbnQzMiBCaXRBZGRyZXNzOwogICAgICAgIGludDMyIEZs YWdzWzldOwogICAgICAgIGludDMyIFZMYXllcnM7CiAgICAgICAgaW50MzIgVlBpeGVsczsKICAg ICAgICBpbnQzMiBWTGluZXM7Cn0gVkRJbmZvX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgaW50 MzIgTW9kZTsKICBpbnQzMiBSZWRHdW47CiAgaW50MzIgR3JlZW5HdW47CiAgaW50MzIgQmx1ZUd1 bjsKICBpbnQzMiBDdXJzb3JFbmFibGU7CiAgaW50MzIgQ3Vyc29yQ29sb3I7CiAgaW50MzIgR3Jh cGhpY0VuYWJsZVszMl07CiAgaW50MzIgR3JhcGhpY0NvbG9yWzMyXTsKICBpbnQzMiBDb2xvckN1 YmVbNF07CiAgaW50MzIgVmlld2FibGVQaXhlbHM7CiAgaW50MzIgVmlld2FibGVMaW5lczsKICBp bnQzMiBSZXNlcnZlZFs2XTsKfSBWRFN0YXRlX3Q7CgoKCgoKCnR5cGVkZWYgc3RydWN0IHZpIHsK ICBzdHJ1Y3QgdmkgKm5leHQ7CiAgVkRJbmZvX3QgVkRJbmZvOwogIEZJTEUgKmZwVkQ7CiAgbG9u ZyBGbGFnczsKfSBWaWRlb0luZm9fdDsKIyAxMDUgIi4uLy4uLy4uL2xpYi9wY2lkZXYuaCIKc3Ry dWN0IExpbmtNb3ZlSW5mbyB7CiAgY2hhciBHZW9zeXNbMjBdOwogIGNoYXIgUHJvalBhcm1zWzI1 Nl07CiAgZG91YmxlIEN1cnNvclg7CiAgZG91YmxlIEN1cnNvclk7CiAgZG91YmxlIFRvcExlZnRY OwogIGRvdWJsZSBUb3BMZWZ0WTsKICBkb3VibGUgQm90dG9tUmlnaHRYOwogIGRvdWJsZSBCb3R0 b21SaWdodFk7Cn07CgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgaW50MzIgRXZlbnRPY2N1cmVkOwog IGludDMyIFRyYXZlcnNhbDsKICBpbnQzMiBNb3VzZUJ1dHRvbjsKICBpbnQzMiBNb2RpZmllcktl eXM7CiAgaW50MzIgRXZlbnREZWxheTsKICBpbnQzMiBEYXRhWDsKICBpbnQzMiBEYXRhWTsKICBp bnQzMiBVbnVzZWRbOV07Cn0gVkRNb3VzZUV2ZW50X3Q7CiMgMTQ0ICIuLi8uLi8uLi9saWIvcGNp ZGV2LmgiCkZJTEUgKlZET3BlbiAoY2hhciAqICk7CmxvbmcgVkRGbGFncyAoIEZJTEUgKiApOwpp bnQgVkRBcml0aG1ldGljIChGSUxFICosIGludCwgaW50LCBpbnQsIGludCwgZG91YmxlICk7CnZv aWQgVkRDbGVhciAoRklMRSAqLCBpbnQsIGludCApOwp2b2lkIFZEQ3Vyc29yUG9zIChGSUxFICos IGludCwgaW50ICosIGludCAqICk7CnZvaWQgVkRDdXJzb3JTaGFwZSAoRklMRSAqLCB1bnNpZ25l ZCBjaGFyICopOwppbnQgVkRIaXN0b2dyYW0gKEZJTEUgKiwgaW50LCBpbnQsIGludDMyICogKTsK dm9pZCBWREltYWdlSU8oRklMRSAqLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCB1bnNp Z25lZCBjaGFyICogKTsKdm9pZCBWRENsb3NlIChGSUxFICopOwp2b2lkIFZEQml0bWFwSU8oRklM RSAqLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCB1bnNpZ25lZCBjaGFyICogKTsKdm9p ZCBWREdEQkJpdG1hcElPKCBGSUxFICosIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIHVu c2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50LCBpbnQgKTsK dm9pZCBWRFNpemVJbmZvIChGSUxFICosIGludCAqLCBpbnQgKiwgaW50ICosIGludCAqICk7CnZv aWQgVkRMdXRJTyAoRklMRSAqLCBpbnQsIGludCwgdW5zaWduZWQgY2hhciAqICk7CnZvaWQgVkRQ Y3RJTyAoRklMRSAqLCBpbnQsIHVuc2lnbmVkIGNoYXIgKiApOwp2b2lkIFZER0RCUGN0SU8gKEZJ TEUgKiwgaW50LCBpbnQsIHVuc2lnbmVkIGNoYXIgKiApOwp2b2lkIFZEUHNldWRvSU8gKEZJTEUg KiwgaW50LCB1bnNpZ25lZCBjaGFyICopOwp2b2lkIFZEUmVzZXQgKEZJTEUgKik7CnZvaWQgVkRT dGF0dXNJTyAoRklMRSAqLCBpbnQsIGludDMyICogKTsKdm9pZCBWRFZlY3RvciAoRklMRSAqLCBp bnQsIGludCwgaW50MzIgKiApOwp2b2lkIFZEVmlldyAoRklMRSAqLCBpbnQsIGZsb2F0ICosIGZs b2F0ICosIGludCAqLCBpbnQgKiApOwp2b2lkIFZEWm9vbSAoRklMRSAqLCBkb3VibGUsIGRvdWJs ZSApOwp2b2lkIFZEUmVnaXN0ZXIgKCB2b2lkICk7CnZvaWQgVkRCeXRlQ2hhbklPICggRklMRSAq LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgdW5zaWduZWQgY2hhciAqLCBpbnQsIGludCwgaW50 LCBpbnQgKiApOwoKaW50IFZEUHJvbW90ZSAoIEZJTEUgKiApOwppbnQgVkRDaGFuRGVzY0lPICgg RklMRSAqLCBpbnQsIGludCwgY2hhciAqICk7CnZvaWQgVkRTZWdEZXNjSU8gKCBGSUxFICosIGlu dCwgaW50LCBpbnQsIGNoYXIgKiApOwppbnQgVkRHZW9yZWZMYXllciAoIEZJTEUgKiwgaW50LCBp bnQsIGludCwgY2hhciAqLCBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUgKiAp OwoKaW50IFZER2VvcmVmSU8gKCBGSUxFICosIGludCwgY2hhciAqLCBkb3VibGUgKiwgZG91Ymxl ICosIGRvdWJsZSAqLCBkb3VibGUgKiApOwoKaW50IFZEUHJvamVjdGlvbklPKCBGSUxFICosIGlu dCwgaW50LCBpbnQsIFByb2pJbmZvX3QgKiApOwppbnQgVkRHREJQcm9qZWN0aW9uSU8oIEZJTEUg KiwgaW50LCBQcm9qSW5mb190ICogKTsKaW50IFZEU2VnTmV4dCAoIEZJTEUgKiwgaW50LCBpbnQg KTsKdm9pZCBWRFZlY3RvckluZm8gKCBGSUxFICosIGludCwgaW50LCBWSW5mb190ICogKTsKaW50 IFZEVmVjdG9ySU8gKCBWSW5mb190ICosIGludCwgaW50LCBpbnQsIGludCAqLCBpbnQgKiwgaW50 MzIgKiwgaW50MzIgKiwgZG91YmxlICoqLCBkb3VibGUgKiwgaW50ICk7CgoKaW50IFZETW91c2VF dmVudFJlYWQoIEZJTEUgKiwgVkRNb3VzZUV2ZW50X3QgKiApOwppbnQgVkRQbGF5RXZlbnQoIEZJ TEUgKiwgY2hhciAqICk7CmNoYXIgKlZERXhlY3V0ZVNjcmlwdCggRklMRSAqLCBjb25zdCBjaGFy ICosIFRCb29sICk7CnZvaWQgVkRTZWdEZXNjSU8oIEZJTEUgKiwgaW50LCBpbnQsIGludCwgY2hh ciAqICk7CnZvaWQgVkRTb3VyY2VJTyggRklMRSAqLCBpbnQsIGludCwgaW50LCBpbnQgKiwgY2hh ciAqLCBpbnQgKiwgaW50ICopOwojIDI3NCAiLi4vLi4vLi4vbGliL3BjaWRldi5oIgpGSUxFICpW MTlPcGVuICggY2hhciAqLCBpbnQzMiwgaW50MzIgKTsKdm9pZCBWMTlDbG9zZSAoIEZJTEUgKiAp OwppbnQgVjE5U2VuZCAoIEZJTEUgKiwgdm9pZCAqLCBpbnQzMiApOwppbnQgVjE5QWNjZXB0ICgg RklMRSAqLCB2b2lkICosIGludDMyICk7CkZJTEUgKlYxOUFkdmVydGlzZSAoIGNoYXIgKiwgaW50 MzIgKiwgaW50MzIgKiApOwpGSUxFICpWMTlTZWxlY3QgKCBGSUxFICosIGludCApOwoKaW50IFYx OUFyaXRobWV0aWMgKCBGSUxFICosIGludCwgaW50LCBpbnQsIGludCwgaW50ICk7CnZvaWQgVjE5 Q2xlYXIgKCBGSUxFICosIGludCwgaW50ICk7CnZvaWQgVjE5Q3Vyc29yUG9zICggRklMRSAqLCBp bnQsIGludCAqLCBpbnQgKiApOwp2b2lkIFYxOUZpbGwgKCBGSUxFICosIGludCwgaW50LCBpbnQs IGludCApOwp2b2lkIFYxOUJpdG1hcElPICggRklMRSAqLCBpbnQsIGludCwgaW50LCBpbnQsIGlu dCwgaW50LCB1bnNpZ25lZCBjaGFyICogKTsKdm9pZCBWMTlIaXN0b2dyYW0gKCBGSUxFICosIGlu dCwgaW50LCBpbnQzMiAqICk7CnZvaWQgVjE5SW1hZ2VJTyAoIEZJTEUgKiwgaW50LCBpbnQsIGlu dCwgaW50LCBpbnQsIGludCwgdW5zaWduZWQgY2hhciAqICk7CnZvaWQgVjE5THV0SU8gKCBGSUxF ICosIGludCwgaW50LCBpbnQzMiAqICk7CnZvaWQgVjE5UGN0SU8gKCBGSUxFICosIGludCwgaW50 MzIgKiApOwp2b2lkIFYxOVJlc2V0ICggRklMRSAqICk7CnZvaWQgVjE5U3RhdHVzSU8gKCBGSUxF ICosIGludCwgaW50MzIgKiApOwp2b2lkIFYxOVZlY3RvciAoIEZJTEUgKiwgaW50LCBpbnQsIGlu dDMyICogKTsKdm9pZCBWMTlWaWV3ICggRklMRSAqLCBpbnQsIGZsb2F0ICosIGZsb2F0ICosIGlu dCAqLCBpbnQgKiApOwp2b2lkIFYxOVpvb20gKCBGSUxFICosIGRvdWJsZSwgZG91YmxlICk7CnZv aWQgVjE5Wm9vbVNjcm9sbCAoIEZJTEUgKiwgaW50LCBmbG9hdCAqLCBmbG9hdCAqLCBpbnQgKiwg aW50ICosIGludCAqLCBpbnQgKiApOwoKbG9uZyBWMTlGbGFncyAoIEZJTEUgKiApOwp2b2lkIFYx OUNvbmZpZ0lPICggRklMRSAqLCBpbnQsIFZESW5mb190ICogKTsKdm9pZCBWMTlDaGFuRGVzY0lP ICggRklMRSAqLCBpbnQsIGludCwgY2hhciAqICk7CnZvaWQgVjE5R2VvcmVmTGF5ZXIgKCBGSUxF ICosIGludCwgaW50LCBpbnQsIGNoYXIgKiwgZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUgKiwg ZG91YmxlICogKTsKCnZvaWQgVjE5QW5ub3VuY2VMaW5rICggRklMRSAqICk7CnZvaWQgVjE5TGlu a01vdmUgKCBGSUxFICosIHN0cnVjdCBMaW5rTW92ZUluZm8gKiApOwppbnQgVjE5VmVjdG9ySW5m byAoIEZJTEUgKiwgaW50LCBpbnQsIFZJbmZvX3QgKiApOwppbnQgVjE5VmVjdG9ySU8oIFZJbmZv X3QgKiwgaW50LCBpbnQsIGludCwKICAgICAgICAgICAgICAgICAgICAgaW50ICosIGludCAqLCBp bnQzMiAqLCBpbnQzMiAqLAogICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiosIGRvdWJsZSAq LCBpbnQgKTsKdm9pZCBWMTlNb3VzZUV2ZW50UmVhZCggRklMRSAqLCBWRE1vdXNlRXZlbnRfdCAq ICk7CmludCBWMTlQbGF5RXZlbnQoIEZJTEUgKiwgY2hhciAqICk7CnZvaWQgVjE5U2VnRGVzY0lP KCBGSUxFICosIGludCwgaW50LCBpbnQsIGNoYXIgKiApOwp2b2lkIFYxOVNvdXJjZUlPKCBGSUxF ICosIGludCwgaW50LCBpbnQsIGludCAqLCBjaGFyICosIGludCAqLCBpbnQgKiApOwp2b2lkIFYx OVByb2plY3Rpb25JTyggRklMRSAqLCBpbnQsIGludCwgaW50LCBQcm9qSW5mb190ICogKTsKIyAz NTQgIi4uLy4uLy4uL2xpYi9wY2lkZXYuaCIKdHlwZWRlZiBlbnVtIHRhcGVvcHAKewogICAgdGFw ZU9GU0YsCiAgICB0YXBlT0JTRiwKICAgIHRhcGVPRlNSLAogICAgdGFwZU9CU1IsCiAgICB0YXBl T1JFVywKICAgIHRhcGVPT0ZGTCwKICAgIHRhcGVPRU9GLAogICAgdGFwZU9OT1AsCiAgICB0YXBl T1BBQ0sKfSBUYXBlT3BwOwoKCgoKCgp0eXBlZGVmIGVudW0gbGFzdG9wcAp7CiAgICB0YXBlTE9w ZW4sCiAgICB0YXBlTENsb3NlLAogICAgdGFwZUxTZWVrLAogICAgdGFwZUxPZmZsLAogICAgdGFw ZUxSZWFkLAogICAgdGFwZUxXcml0ZSwKICAgIHRhcGVMRXJyb3IsCiAgICB0YXBlTFVua25vd24K fSBMYXN0T3BwOwoKCgoKCgp0eXBlZGVmIGVudW0gdGFwZWRpciB7IHRhcGVEUmVhZCwgdGFwZURX cml0ZSwgdGFwZURSVyB9IFRhcGVEaXI7CgoKCgoKCgp0eXBlZGVmIGVudW0gdGFwZXR5cGUKewog ICAgdGFwZURldmljZSwgdGFwZVBjaUZpbGUsIHRhcGVGaWxlLAogICAgdGFwZVJlbW90ZVBjaSwg dGFwZVJlbW90ZVJtdAp9IFRhcGVUeXBlOwojIDQzNSAiLi4vLi4vLi4vbGliL3BjaWRldi5oIgp0 eXBlZGVmIHN0cnVjdCB0YXBlc3RhdAp7CiAgICBlbnVtIHsgdGFwZVNwRU9GLCB0YXBlU3BFT1Qs IHRhcGVTcEJPVCwgdGFwZVNwVW5rIH0gcGxhY2U7CiAgICBlbnVtIHsgdGFwZVNhUiwgdGFwZVNh VywgdGFwZVNhUlcsIHRhcGVTYVVuayB9IGFjY2VzczsKICAgIGVudW0geyB0YXBlU3NPTkwsIHRh cGVTc09GRkwsIHRhcGVTc1VuayB9IHN0YXR1czsKICAgIGVudW0geyB0YXBlU2VPSywgdGFwZVNl RXJyb3IsIHRhcGVTZVVuayB9IGVycm9yOwogICAgZW51bSB7IHRhcGVTYlRvb1NtYWxsLCB0YXBl U2JPSyB9IGJ1ZmZTaXplOwogICAgaW50IGVycm9yTnVtOwogICAgVGFwZVR5cGUgdHlwZTsKICAg IGludCBCeXRlc1JlYWQ7Cn0gVGFwZVN0YXQ7Cgp0eXBlZGVmIHN0cnVjdCB0YXBlCnsKICAgIHN0 cnVjdCB0YXBlICpuZXh0OwogICAgRklMRSAqRmlsZTsKICAgIGludCBGaWxlSUQ7CiAgICBUYXBl RGlyIG1vZGU7CiAgICBUYXBlVHlwZSB0eXBlOwogICAgY2hhciAqZmlsZU5hbWU7CiAgICBjaGFy ICpidWY7CgogICAgaW50IGJ1ZlNpemU7CiAgICBpbnQgYnVmUG9zOwogICAgbG9uZyBmaWxlUG9z OwoKICAgIFRhcGVTdGF0IHN0YXR1czsKCiAgICBMYXN0T3BwIGxhc3RPcHA7CiAgICBpbnQgbGFz dFdyaXRlOwoKfSAqVGFwZTsKCgoKRklMRSAqVGFwZU9wZW4gKGNoYXIgKiwgY2hhciAqKTsKdm9p ZCBUYXBlQ2xvc2UgKEZJTEUgKik7CmludCBUYXBlUmVhZCAoRklMRSAqLCB2b2lkICosIGludCwg VGFwZVN0YXQgKik7CmludCBUYXBlV3JpdGUgKEZJTEUgKiwgdm9pZCAqLCBpbnQpOwpUYXBlU3Rh dCBUYXBlQ29udHJvbCAoRklMRSAqLCBUYXBlT3BwLCBpbnQpOwpUYXBlU3RhdCBUYXBlU3RhdHVz IChUYXBlKTsKVGFwZSBSZW1vdGVUYXBlT3BlbiAoVGFwZSk7CnZvaWQgUmVtb3RlVGFwZUNsb3Nl IChUYXBlKTsKaW50IFJlbW90ZVRhcGVSZWFkIChUYXBlLCBjaGFyICosIGludCk7CmludCBSZW1v dGVUYXBlV3JpdGUgKFRhcGUsIGNoYXIqLCBpbnQpOwpUYXBlU3RhdCBSZW1vdGVUYXBlQ29udHJv bCAoVGFwZSwgVGFwZU9wcCwgaW50KTsKdm9pZCBUYXBlUmVwb3J0IChGSUxFICopOwoKfQojIDI0 MiAiLi4vLi4vLi4vbGliL3BjaS5oIiAyCiMgMSAiLi4vLi4vLi4vbGliL2NjbHNlci5oIiAxCiMg MjAgIi4uLy4uLy4uL2xpYi9jY2xzZXIuaCIKIyAxICIuLi8uLi8uLi9saWIvY2NsY29udi5oIiAx CiMgMjEgIi4uLy4uLy4uL2xpYi9jY2xzZXIuaCIgMgoKCgoKCgoKZXh0ZXJuICJDIiB7CgpGSUxF ICpTSU9PcGVuKGNvbnN0IGNoYXIgKnBzekRldmljZU5hbWUsIGNvbnN0IGNoYXIgKm1vZGUsIGNv bnN0IGludCBuQmF1ZCwKICAgICAgICAgICAgICBjb25zdCBpbnQgblBhcml0eSwgY29uc3QgaW50 IG5EYXRhQml0cywgY29uc3QgaW50IG5TdG9wQml0cyk7CgpUQm9vbCBTSU9DbG9zZShGSUxFICpm cEZpZCk7CgpUQm9vbCBTSU9HZXRDaGFyKEZJTEUgKmZwRmlkLCBjaGFyICpwQ2hhcik7ClRCb29s IFNJT1B1dENoYXIoRklMRSAqZnBGaWQsIGNoYXIgY2hPdXRwdXQpOwojIDY3ICIuLi8uLi8uLi9s aWIvY2Nsc2VyLmgiCnR5cGVkZWYgc3RydWN0CnsKCgogICAgaW50IG5UYWJsZXQ7CiAgICBjaGFy ICpwc3pOYW1lOwogICAgY2hhciAqcHN6SW5pdENvbW1hbmQ7CiAgICBjaGFyICpwc3pGb3JtYXRT dHJpbmc7CiAgICBjaGFyICpwc3pTdHJlYW1Db21tYW5kOwogICAgY2hhciAqcHN6UG9pbnRDb21t YW5kOwogICAgY2hhciAqcHN6U3dpdGNoQ29tbWFuZDsKICAgIGludCBuQmF1ZDsKICAgIGludCBu UGFyaXR5OwogICAgaW50IG5EYXRhQml0czsKICAgIGludCBuU3RvcEJpdHM7CgoKICAgIEZJTEUg KmZwVGFibGV0OwogICAgY2hhciAqcHN6QnVmZmVyOwoKCiAgICBpbnQgblhTdGFydCwgbllTdGFy dDsKICAgIGludCBuWENoYXJzLCBuWUNoYXJzOwogICAgVEJvb2wgYlhTaWduZWQ7CiAgICBUQm9v bCBiWVNpZ25lZDsKICAgIGludCBuQnV0dG9uU3RhcnQ7CiAgICBpbnQgbkJ1dHRvbkNoYXJzOwog ICAgVEJvb2wgYlN0YXJ0c0F0WmVybzsKICAgIFRCb29sIGJIZXhCdXR0b247Cn0gVGFibGV0Owoj IDExMCAiLi4vLi4vLi4vbGliL2NjbHNlci5oIgp0eXBlZGVmIHN0cnVjdAp7CiAgICBUQm9vbCBi U3VjY2VzczsKICAgIGludCBuWCwgblk7CiAgICBpbnQgbkJ1dHRvbjsKIyAxMjYgIi4uLy4uLy4u L2xpYi9jY2xzZXIuaCIKICAgIGludCBuQ2hhcnNSZWFkOwogICAgaW50IG5SZWFkU3RhcnRQb3M7 Cn0gVGFibGV0UG9pbnQ7CiMgMTM4ICIuLi8uLi8uLi9saWIvY2Nsc2VyLmgiClRCb29sIFRhYldy aXRlQ29tbWFuZChUYWJsZXQgKnBzVGFibGV0LCBjaGFyICpwc3pDb21tYW5kU3RyaW5nKTsKVGFi bGV0ICpUYWJSZWFkQ29uZmlnKGludCAqblRhYmxldHMpOwoKdm9pZCBQcmludFRhYmxldHMoVGFi bGV0ICpwc1RhYmxldHMsIGludCBudW1UYWJsZXRzKTsKCnZvaWQgVGFiRnJlZVRhYmxldHMoVGFi bGV0ICpwc1RhYmxldHMsIGludCBudW1UYWJsZXRzKTsKClRhYmxldCAqVGFiTmV3VGFibGV0KFRh YmxldCAqKnBwc1RhYmxldEFycmF5LCBpbnQgKm5UYWJsZXRzLAogICAgICAgICAgICAgICAgICAg ICBjaGFyICpwc3pOYW1lLAogICAgICAgICAgICAgICAgICAgICBjaGFyICpwc3pJbml0Q29tbWFu ZCwKICAgICAgICAgICAgICAgICAgICAgY2hhciAqcHN6Rm9ybWF0U3RyaW5nLAogICAgICAgICAg ICAgICAgICAgICBjaGFyICpwc3pTdHJlYW1Db21tYW5kLAogICAgICAgICAgICAgICAgICAgICBj aGFyICpwc3pQb2ludENvbW1hbmQsCiAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnBzelN3aXRj aENvbW1hbmQsCiAgICAgICAgICAgICAgICAgICAgIGludCBuQmF1ZCwgaW50IG5QYXJpdHksIGlu dCBuRGF0YUJpdHMsCiAgICAgICAgICAgICAgICAgICAgIGludCBuU3RvcEJpdHMpOwoKVEJvb2wg VGFiVXBkYXRlVGFibGV0KFRhYmxldCAqcHNUYWJsZXQsCiAgICAgICAgICAgICAgICAgICAgICBj aGFyICpwc3pOYW1lLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqcHN6SW5pdENvbW1hbmQs CiAgICAgICAgICAgICAgICAgICAgICBjaGFyICpwc3pGb3JtYXRTdHJpbmcsCiAgICAgICAgICAg ICAgICAgICAgICBjaGFyICpwc3pTdHJlYW1Db21tYW5kLAogICAgICAgICAgICAgICAgICAgICAg Y2hhciAqcHN6UG9pbnRDb21tYW5kLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqcHN6U3dp dGNoQ29tbWFuZCwKICAgICAgICAgICAgICAgICAgICAgIGludCBuQmF1ZCwgaW50IG5QYXJpdHks IGludCBuRGF0YUJpdHMsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgblN0b3BCaXRzKTsKClRC b29sIFRhYldyaXRlQ29uZmlnKFRhYmxldCAqcHNUYWJsZXRBcnJheSwgY29uc3QgaW50IG5UYWJs ZXRzKTsKClRhYmxldCAqVGFiT3BlbihjaGFyICpwc3pEZXZpY2UsIFRhYmxldCAqcHNUYWJsZXQp OwpUYWJsZXQgKlRhYk9wZW5QUk0oY2hhciAqcHN6RGV2aWNlKTsKVEJvb2wgVGFiQ2xvc2UoVGFi bGV0ICpwc1RhYmxldCk7CgpUYWJsZXRQb2ludCBUYWJSZWFkKFRhYmxldCAqcHNUYWJsZXQsIFRC b29sIGJTeW5jKTsKVGFibGV0UG9pbnQgVGFiUG9pbnQoVGFibGV0ICpwc1RhYmxldCk7Cgp2b2lk IFRhYkZsdXNoKFRhYmxldCAqcHNUYWJsZXQpOwpjaGFyICpUYWJTdHJpbmcyQ29tbWFuZChjaGFy ICpwc3pDb252ZXJ0KTsKClRhYmxldCAqVGFiQ29weShUYWJsZXQgKnBzRGVzdCwgVGFibGV0ICpw c1NvdXJjZSk7CgoKCgpUQm9vbCBJc0JsYW5rKGNvbnN0IGNoYXIgKnBzekxpbmUpOwpUQm9vbCBQ YXJzZUZvcm1hdFN0cmluZyhUYWJsZXQgKnBzVGFibGV0LCBjaGFyICpwc3pGb3JtYXRTdHJpbmcp Owp2b2lkIFRhYkluaXRTdHJ1Y3R1cmUoVGFibGV0ICpwc1RhYmxldCk7CiMgMTk2ICIuLi8uLi8u Li9saWIvY2Nsc2VyLmgiCnR5cGVkZWYgZW51bQp7CiAgICBNYWdlbGxhbk5hdjUwMDBQcm8sCiAg ICBOTUVBCn0KR1BTVHlwZTsKCgoKCnR5cGVkZWYgZW51bQp7CgoKCiAgICBSZWFkSGVhZGVyLAog ICAgUmVhZFRpbWUsCiAgICBSZWFkTGF0LAogICAgUmVhZExvbiwKICAgIFJlYWRBbHQsCgoKCiAg ICBHWEdYUAp9CkxpbmVTdGF0ZTsKCgoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICAgIGRvdWJsZSBk Zlg7CiAgICBkb3VibGUgZGZZOwogICAgZG91YmxlIGRmWjsKICAgIGNoYXIgc3pHZW9zeXMgWzE3 XTsKfSBHUFNQb2ludDsKCgoKCnR5cGVkZWYgc3RydWN0CnsKICAgIEdQU1R5cGUgZUdQU1VuaXRU eXBlOwoKICAgIGNoYXIgc3pMYXQgWzMyXTsKICAgIGNoYXIgc3pMb24gWzMyXTsKICAgIGNoYXIg c3pBbHQgWzMyXTsKCiAgICBjaGFyIHBzekJ1ZmZlciBbMzIgKyAxXTsKICAgIEZJTEUgKmZwR1BT OwogICAgTGluZVN0YXRlIGVDdXJyZW50U3RhdGU7CiAgICBHUFNQb2ludCBzUG9pbnQ7Cgp9IEdQ U0RhdGE7Cgp0eXBlZGVmIEdQU0RhdGEqIEdQU0hhbmRsZTsKIyAyNjQgIi4uLy4uLy4uL2xpYi9j Y2xzZXIuaCIKR1BTSGFuZGxlIEdQU09wZW4gKEZJTEUgKmZwT3BlbkdQUywgR1BTVHlwZSBlR1BT VHlwZUNob2ljZSk7CkdQU1BvaW50ICpHUFNSZWFkIChHUFNIYW5kbGUgaEdQUyk7ClRCb29sIEdQ U0Nsb3NlIChHUFNIYW5kbGUgaEdQUyk7Cgp9CiMgMjQzICIuLi8uLi8uLi9saWIvcGNpLmgiIDIK IyAxICIuLi8uLi8uLi9saWIvZ2VvLmgiIDEKIyAxNzYgIi4uLy4uLy4uL2xpYi9nZW8uaCIKIyAx ICIuLi8uLi8uLi9saWIvcG1oLmgiIDEKIyAzMyAiLi4vLi4vLi4vbGliL3BtaC5oIgpleHRlcm4g IkMiIHsKCgoKCnR5cGVkZWYgc3RydWN0CnsKICAgIGludCBuQnl0ZXNQZXJQaXhlbDsKICAgIGlu dCBuRGVwdGg7CiAgICBpbnQgblNjYW5saW5lUGFkOwoKICAgIGludCBuUmVkU2hpZnQ7CiAgICBp bnQgbkdyZWVuU2hpZnQ7CiAgICBpbnQgbkJsdWVTaGlmdDsKCiAgICB1bnNpZ25lZCBjaGFyIGFi eVJlZENvbXBbMjU2XTsKICAgIHVuc2lnbmVkIGNoYXIgYWJ5R3JlZW5Db21wWzI1Nl07CiAgICB1 bnNpZ25lZCBjaGFyIGFieUJsdWVDb21wWzI1Nl07CiAgICB1bnNpZ25lZCBjaGFyIGFieUdyZXlD b21wWzI1Nl07CiAgICB1bnNpZ25lZCBjaGFyIGFieU1hcDhJbmRleFsyNTZdOwoKICAgIFRCb29s IGJUb3BUb0JvdHRvbTsKICAgIFRCb29sIGJVc2VDb21wcmVzczsKICAgIHVuc2lnbmVkIGNoYXIq IHBhYnk4dG8yNDsKfSBQTUhQcmVmZXJQaXhtYXA7Cgp1bnNpZ25lZCBjaGFyICpQTUhQYWNrUGl4 bWFwKCBQTUhQcmVmZXJQaXhtYXAgKiwgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICos IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgIGludCwgaW50LCBpbnQsIGlu dCwgaW50LCBpbnQgKTsKdm9pZCBQTUhVbnBhY2tQaXhtYXAoIFBNSFByZWZlclBpeG1hcCAqLCB1 bnNpZ25lZCBjaGFyICosIGludCwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgY2hhciAqKiwgdW5zaWduZWQgY2hhciAqKiwgdW5zaWduZWQgY2hhciAqKiApOwp2b2lkIFBN SFVzZVBDVCggUE1IUHJlZmVyUGl4bWFwICosIGludCwgdW5zaWduZWQgY2hhciAqLCBpbnQsIGlu dCwgaW50LCBpbnQsIFRCb29sKTsKCn0KIyAxNzcgIi4uLy4uLy4uL2xpYi9nZW8uaCIgMgoKIyAx ICIuLi8uLi8uLi9saWIvY2NsY2xhc3MuaCIgMQojIDU2ICIuLi8uLi8uLi9saWIvY2NsY2xhc3Mu aCIKIyAxICIuLi8uLi8uLi9saWIvZ2RiLmgiIDEKIyA1NyAiLi4vLi4vLi4vbGliL2NjbGNsYXNz LmgiIDIKCmV4dGVybiAiQyIgewoKCgoKCnR5cGVkZWYgZW51bSB7CiAgQ0FOb25lLAogIENBTWlu aW11bURpc3RhbmNlLAogIENBUGFyYWxsZWxwaXBlZCwKICBDQUZ1bGwsCiAgQ0FGdWxsTm9OdWxs LAogIENBVGllcwp9IENsYXNzQWxnOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQ2xhc3NBbGcgQWxn b3JpdGhtOwoKICAgIEZJTEUgKmZwU3JjOwogICAgaW50IE5DaGFubmVsczsKICAgIGludCAqREJJ QzsKICAgIGludCAqREJJVzsKCiAgICBpbnQgTkNsYXNzZXM7CiAgICBTaWduYXR1cmVfdCAqKlNp Z25hdHVyZXM7CgogICAgRklMRSAqZnBEc3Q7CiAgICBpbnQgREJPQzsKICAgIGludCAqREJPVzsK CiAgICBpbnQgTk1sY0NoYW5uZWxzOwogICAgaW50ICpEQk1sY09DOwoKICAgIGludCBOUHJvYkNo YW5uZWxzOwogICAgaW50ICpEQlByb2JPQzsKCiAgICBQQ0lDb3VudGVyIENvdW50ZXI7CgogICAg SU1QUHJvZ3Jlc3NGdW5jIHBmblByb2dyZXNzOwogICAgdm9pZCAqcFByb2dyZXNzQXJnOwoKICAg IGludCAoKkluc2lkZVByb2MpKCBpbnQgcGl4ZWwsIGludCBsaW5lLCB2b2lkICphcmcgKTsKICAg IHZvaWQgKkluc2lkZUFyZzsKCiAgICBmbG9hdCAqcGZCYWNrZ3JvdW5kVmFsdWU7CgogICAgaW50 IENsYXNzQ291bnRbMjU2XTsKICAgIGludCBQaXhlbENvdW50OwoKfSBTaWdDbGFzc2lmeU9wdGlv bnM7Cgp2b2lkIEluaXRTaWdDbGFzc2lmeU9wdGlvbnMoIFNpZ0NsYXNzaWZ5T3B0aW9ucyAqICk7 ClRCb29sIFNpZ0NsYXNzaWZ5KCBTaWdDbGFzc2lmeU9wdGlvbnMgKiApOwpjaGFyICpTaWdDbGFz c2lmeVJlcG9ydCggU2lnQ2xhc3NpZnlPcHRpb25zICosIGludCApOwoKVEJvb2wgQ0FNaW5EaXND bGFzc2lmaWNhdGlvbiggU2lnQ2xhc3NpZnlPcHRpb25zICogKTsKVEJvb2wgQ0FGdWxsQ2xhc3Np ZmljYXRpb24oIFNpZ0NsYXNzaWZ5T3B0aW9ucyAqICk7ClRCb29sIENBUFBDbGFzc2lmaWNhdGlv biggU2lnQ2xhc3NpZnlPcHRpb25zICogKTsKVEJvb2wgQ0FUaWVzQ2xhc3NpZmljYXRpb24oIFNp Z0NsYXNzaWZ5T3B0aW9ucyAqICk7ClRCb29sIENBRnVsbE5vTnVDbGFzc2lmaWNhdGlvbiAoIFNp Z0NsYXNzaWZ5T3B0aW9ucyAqICk7CgpUQm9vbCBTaWdHZW5lcmF0ZShGSUxFICosIEZJTEUgKixp bnQsIFNpZ25hdHVyZV90ICoqLCBpbnQsIGludCAqLCBpbnQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQsIGludCwgaW50LCBpbnQsIElNUFByb2dyZXNzRnVuYywgdm9pZCogKTsKZG91 YmxlICpTaWdHZW5Jbml0aWFsaXplKCBpbnQsIFNpZ25hdHVyZV90ICoqLCBpbnQgKTsKdm9pZCBT aWdHZW5BY2N1bXVsYXRlKCBpbnQsIFNpZ25hdHVyZV90ICoqLCBpbnQsIGRvdWJsZSAqLAogICAg ICAgICAgICAgICAgICAgICAgICAgIGZsb2F0ICosIHVuc2lnbmVkIGNoYXIgKiwgaW50ICk7CnZv aWQgU2lnR2VuUG9zdFByb2Nlc3MoIGludCwgU2lnbmF0dXJlX3QgKiosIGludCwgZG91YmxlICog KTsKCgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBpbnQgbk1pbkNsdXN0ZXJzOwogICAgaW50IG5N YXhDbHVzdGVyczsKICAgIGludCBuRGVzaXJlZENsdXN0ZXJzOwoKICAgIGludCBuTWF4SXRlcmF0 aW9uczsKICAgIGRvdWJsZSBkZk1vdmVUaHJlc2hvbGQ7CiAgICBpbnQgbk1pblNhbXBsZVRocmVz aG9sZDsKICAgIGRvdWJsZSBkZlN0ZERldjsKCiAgICBkb3VibGUgZGZMdW1waW5nVGhyZXNob2xk OwogICAgaW50IG5NYXhMdW1wUGFpcnM7CiAgICBUQm9vbCBiVXNlU2lnc0FzU2VlZHM7CiAgICBp bnQgbk1heFNhbXBsZVNpemU7CgogICAgdm9pZCAoKnBmblJlcG9ydFByb2MpKFNpZ25hdHVyZV90 ICoqU2lnbmF0dXJlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtQ2xh c3NlcywgaW50IG51bUNoYW5zLCB2b2lkKiBhcmcpOwogICAgdm9pZCogcFJlcG9ydEFyZzsKCiAg ICB2b2lkICgqcGZuRGlzY2FyZFByb2MpKGludCBuV2hpY2hDbHVzdGVyLCB2b2lkKiBhcmcpOwog ICAgdm9pZCogcERpc2NhcmRBcmc7CgogICAgdm9pZCAoKnBmblNwbGl0UHJvYykoaW50IG5XaGlj aENsdXN0ZXIsIHZvaWQqIGFyZyk7CiAgICB2b2lkKiBwU3BsaXRBcmc7CgogICAgdm9pZCAoKnBm bkx1bXBQcm9jKShpbnQgbkZpcnN0Q2x1c3RlciwgaW50IG5TZWNvbmRDbHVzdGVyLCB2b2lkKiBh cmcpOwogICAgdm9pZCogcEx1bXBBcmc7Cn0gSXNvRGF0YVBhcm1zOwoKdHlwZWRlZiBzdHJ1Y3Qg ewogICAgaW50IG5EZXNpcmVkQ2x1c3RlcnM7CiAgICBpbnQgbk1heEl0ZXJhdGlvbnM7CiAgICBk b3VibGUgZGZNb3ZlVGhyZXNob2xkOwogICAgVEJvb2wgYlVzZVNpZ3NBc1NlZWRzOwogICAgaW50 IG5NYXhTYW1wbGVTaXplOwoKICAgIHZvaWQgKCpwZm5SZXBvcnRQcm9jKShTaWduYXR1cmVfdCAq KlNpZ25hdHVyZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1DbGFz c2VzLCBpbnQgbnVtQ2hhbnMsIHZvaWQqIGFyZyk7CiAgICB2b2lkICpwUmVwb3J0QXJnOwoKfSBL TWVhbnNQYXJtczsKCnZvaWQgSW5pdEtNZWFuc1Bhcm1zKCBLTWVhbnNQYXJtcyAqICk7ClRCb29s IEtNZWFuc1NpZ0dlbmVyYXRlKCBTaWdDbGFzc2lmeU9wdGlvbnMgKiwgS01lYW5zUGFybXMgKiAp OwoKVEJvb2wgRnV6enlLTWVhbnNTaWdHZW5lcmF0ZShTaWdDbGFzc2lmeU9wdGlvbnMgKiwgS01l YW5zUGFybXMgKik7Cgp2b2lkIEluaXRJc29EYXRhUGFybXMoIElzb0RhdGFQYXJtcyAqICk7ClRC b29sIElzb0RhdGFTaWdHZW5lcmF0ZSggU2lnQ2xhc3NpZnlPcHRpb25zICosIElzb0RhdGFQYXJt cyAqICk7Cgp2b2lkIENvbXB1dGVTaWduYXR1cmVJbmZvKFNpZ0NsYXNzaWZ5T3B0aW9ucyAqcHNT Q08sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuU2FtcGxlQ291bnQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0ICoqcGFwYWZTYW1wbGVC dWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDE2ICpwYW5DbGFz c0J1ZmZlcik7Cgp2b2lkIENoYXJDb21wdXRlU2lnbmF0dXJlSW5mbyhTaWdDbGFzc2lmeU9wdGlv bnMgKnBzU0NPLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5T YW1wbGVDb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGNoYXIgKipwYXBhZlNhbXBsZUJ1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludDE2ICpwYW5DbGFzc0J1ZmZlcik7Cgp9CiMgMTc5ICIuLi8uLi8uLi9s aWIvZ2VvLmgiIDIKIyAxICIuLi8uLi8uLi9saWIvY2NsaW1hZ2UuaCIgMQojIDM5ICIuLi8uLi8u Li9saWIvY2NsaW1hZ2UuaCIKIyAxICIuLi8uLi8uLi9saWIvZ2RiLmgiIDEKIyA0MCAiLi4vLi4v Li4vbGliL2NjbGltYWdlLmgiIDIKCmV4dGVybiAiQyIgewojIDk2ICIuLi8uLi8uLi9saWIvY2Ns aW1hZ2UuaCIKdHlwZWRlZiBzdHJ1Y3QKewogICAgR0RCTGF5ZXIgaExheWVyOwogICAgaW50IG5M YXllclR5cGU7CiAgICBpbnQgblpDb29yZDsKfSBER1JMYXllcl90OwoKCgoKdHlwZWRlZiBzdHJ1 Y3QKewogICAgaW50IG5HcmlkZGluZ01ldGhvZDsKCiAgICBpbnQgbkxheWVyczsKICAgIERHUkxh eWVyX3QgYXNMYXllcnNbNjRdOwoKICAgIEZJTEUgKmZwT3V0R3JpZDsKICAgIGludCBuT3V0Q2hh bjsKICAgIGludCBkYm93WzRdOwoKICAgIGludCBuTWF4SXRlcjsKCiAgICBkb3VibGUgZGZQY3RS YW5nZTsKICAgIGRvdWJsZSBkZkFic0RpZmY7CgogICAgZmxvYXQgZk1pc3NWYWw7CgogICAgVEJv b2wgYkNuRWxldkZpeGVkOwogICAgVEJvb2wgYlB0RWxldkZpeGVkOwoKICAgIGRvdWJsZSBkZlhQ aXhTaXplOwogICAgZG91YmxlIGRmWVBpeFNpemU7CgogICAgUHJvakluZm9fdCBzUmFzdGVyUHJv ajsKICAgIFByb2pJbmZvX3QgYXNWZWN0b3JQcm9qWzY0XTsKCiAgICBkb3VibGUgZGZPdXRYTWlu OwogICAgZG91YmxlIGRmT3V0WE1heDsKICAgIGRvdWJsZSBkZk91dFlNaW47CiAgICBkb3VibGUg ZGZPdXRZTWF4Owp9IERHUlBhcmFtc190OwoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogICAgaW50IG5G bGFnOwogICAgZmxvYXQgZkVsZXY7Cn0gREdSUGl4ZWxfdDsKCgoKCnR5cGVkZWYgdW5pb24Kewog ICAgaW50MzIgd29yZDsKICAgIHN0cnVjdAogICAgewogICAgICAgIHVuc2lnbmVkIGNoYXIgZmxh Z3M7CiAgICAgICAgdW5zaWduZWQgY2hhciBkaXI7CiAgICAgICAgaW50MTYgZGlzdDsKICAgIH0g YjsKfSBER1JGbGFnczsKCgoKCgp2b2lkIERFTUdSRCAoREdSUGFyYW1zX3QgKik7CnZvaWQgREdS UGFyYW1zSW5pdCggREdSUGFyYW1zX3QgKiApOwp2b2lkIERHUkFkZExheWVyKCBER1JQYXJhbXNf dCAqLCBHREJMYXllciwgaW50LCBpbnQgKTsKCnZvaWQgREdSRkRNIChER1JQYXJhbXNfdCAqREdS UGFyYW1zKTsKCnZvaWQgREdSRkRNSW5pdCAoREdSUGFyYW1zX3QgKkRHUlBhcmFtcyk7Cgp2b2lk IERHUkZETVNjYW5JbkRhdGEgKERHUlBhcmFtc190ICpER1JQYXJhbXMpOwoKdm9pZCBER1JGRE1D YWxjT2Zmc2V0IChpbnQgKmFuUGl4Q2VudHJlLCBpbnQgblJlbVgsIGludCBuUmVtWSwKICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgKm5EaXN0LCBpbnQgKm5EaXIpOwoKdm9pZCBER1JGRE1T ZXRQaXhlbCAoaW50IG5QbnRQaXgsIGludCBuUG50TGluLCBkb3VibGUgZGZaLAogICAgICAgICAg ICAgICAgICAgICAgICBpbnQgbkRpc3QsIGludCBuRGlyLCBUQm9vbCBiVHJlbmQsIGludCBuQnJl YWtUeXBlKTsKCnZvaWQgREdSRkRNU2V0UGl4QnVmIChpbnQgbkJ1ZkluZGV4LCBkb3VibGUgZGZa LAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgbkRpc3QsIGludCBuRGlyLCBpbnQgbkZsYWcs IFRCb29sIGJGbGFnVmFsKTsKClRCb29sIERHUkZETVBpeEVtcHR5IChpbnQgbkJ1ZkluZGV4KTsK CmludCBER1JGRE1HZXREaXIgKGludCBuQnVmSW5kZXgpOwoKdm9pZCBER1JGRE1TZXREaXIgKGlu dCBuQnVmSW5kZXgsIGludCBuRGlyKTsKCmludCBER1JGRE1HZXREaXN0IChpbnQgbkJ1ZkluZGV4 KTsKCnZvaWQgREdSRkRNU2V0RGlzdCAoaW50IG5CdWZJbmRleCwgaW50IG5EaXN0KTsKClRCb29s IERHUkZETUdldEZsYWcgKGludCBuQnVmSW5kZXgsIGludCBuRmxhZyk7Cgp2b2lkIERHUkZETVNl dEZsYWcgKGludCBuQnVmSW5kZXgsIGludCBuRmxhZywgVEJvb2wgYkZsYWdWYWwpOwoKdm9pZCBE R1JGRE1Eb0VyYXNlIChpbnQgblBudFBpeCwgaW50IG5QbnRMaW4sIGRvdWJsZSBkZlopOwoKdm9p ZCBER1JGRE1Db252ZXJ0TGluZSAoZG91YmxlIGRmUHJldlgsIGRvdWJsZSBkZlByZXZZLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGRmUHJldlosCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZGZYLCBkb3VibGUgZGZZLCBkb3VibGUgZGZa LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5CcmVha1R5cGUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQm9vbCBiVHJlbmQsIGludCBuU3RyaXBMaW5l cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuRmlyc3RTdHJpcExpbmUp OwoKdm9pZCBER1JGRE1HcmlkSW5pdCAoREdSUGFyYW1zX3QgKkRHUlBhcmFtcyk7Cgp2b2lkIERH UkZETUludGVycG9sYXRlIChER1JQYXJhbXNfdCAqREdSUGFyYW1zLAogICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgbkludGVycERpciwgVEJvb2wgYkFsbERlZiwgVEJvb2wgYkZpbGxBbGwp OwoKdm9pZCBER1JGRE1EYXRhU2V0SU8gKGNvbnN0IGludCBuRnVuYywgaW50IG5Qcm9jRGlyLCBp bnQgbkRTSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKm5CdWZJbmRleCwgaW50 ICpuSW5kZXhJbmNyKTsKCnZvaWQgREdSRkRNU2V0RWxldiAoaW50IG5CdWZJbmRleCwgZG91Ymxl IGRmTmV3RWxldiwKICAgICAgICAgICAgICAgICAgICAgICBUQm9vbCBiRmlsbCwgVEJvb2wgYklu dGVycCwgaW50IG5EaXN0KTsKCnZvaWQgREdSRkRNRG9JbnRlcnAgKGludCAqYW5CdWZJbmRpY2Vz LCBpbnQgbkluZGV4SW5jciwKICAgICAgICAgICAgICAgICAgICAgICBUQm9vbCAqYWJDbGlmZiwg VEJvb2wgYkZpbGwpOwoKdm9pZCBER1JGRE1JdGVyYXRlIChER1JQYXJhbXNfdCAqREdSUGFyYW1z KTsKCnZvaWQgREdSRkRNT3V0cHV0REVNIChER1JQYXJhbXNfdCAqREdSUGFyYW1zKTsKCnZvaWQg REdSRkRNQ2xlYW51cCAodm9pZCk7CgoKCgoKZXh0ZXJuIFRCb29sIGdhYkRHUlByb2pDb252WzY0 XTsKZXh0ZXJuIGNoYXIgKnBhcHN6REdSTGF5ZXJOYW1lWzggKzFdOwojIDI2MCAiLi4vLi4vLi4v bGliL2NjbGltYWdlLmgiCmV4dGVybiBkb3VibGUgZ2RmREdSQ29udlVzZXJUb1VPUjsKCmV4dGVy biBpbnQgZ25ER1JYQ29kZWRQaXhTaXplOwpleHRlcm4gaW50IGduREdSWUNvZGVkUGl4U2l6ZTsK CmV4dGVybiBGSUxFICpnZnBGRE1UZW1wRmlsZTsKZXh0ZXJuIGNoYXIgKmdwc3pGRE1UZW1wTmFt ZTsKZXh0ZXJuIGludCBnbmFGRE1DaG5NYXBbXTsKCmV4dGVybiBpbnQgZ25GRE1QaXhlbHNQZXJM aW5lOwpleHRlcm4gaW50IGduRkRNTnVtYmVyT2ZMaW5lczsKZXh0ZXJuIGludCBnbkZETUxpbmVz UGVyU3RyaXA7CgpleHRlcm4gaW50IGduRkRNRGF0YVNldExlbmd0aDsKZXh0ZXJuIGludCBnbkZE TU51bU9mRGF0YXNldHM7CgpleHRlcm4gREdSUGl4ZWxfdCAqZ3Bhc0ZETUJ1ZjsKZXh0ZXJuIGlu dCBnbkZETUJ1ZkxlbjsKCmV4dGVybiBpbnQgZ2FuRkRNRXJhc2VYWzIwMF07CmV4dGVybiBpbnQg Z2FuRkRNRXJhc2VZWzIwMF07CmV4dGVybiBpbnQgZ25GRE1OdW1FcmFzZTsKZXh0ZXJuIGludCBn bkZETUVyYXNlUG9zOwpleHRlcm4gVEJvb2wgZ2JGRE1XcmFwOwoKZXh0ZXJuIGRvdWJsZSBnZGZG RE1TdHJpcFhNaW47CmV4dGVybiBkb3VibGUgZ2RmRkRNU3RyaXBYTWF4OwpleHRlcm4gZG91Ymxl IGdkZkZETVN0cmlwWU1pbjsKZXh0ZXJuIGRvdWJsZSBnZGZGRE1TdHJpcFlNYXg7CgpleHRlcm4g ZG91YmxlIGdkZkZETU1heEVsZXY7CmV4dGVybiBkb3VibGUgZ2RmRkRNTWluRWxldjsKCmV4dGVy biBmbG9hdCBnZkZETVVuZGVmRWxldjsKCmV4dGVybiBpbnQgZ25GRE1BdmVyYWdlTm9kZVNwYWNp bmc7CgpleHRlcm4gZG91YmxlIGdkZkZETVhUb1BpeEExLCBnZGZGRE1YVG9QaXhBMjsKZXh0ZXJu IGRvdWJsZSBnZGZGRE1ZVG9MaW5CMSwgZ2RmRkRNWVRvTGluQjM7CgpleHRlcm4gaW50IGduRkRN U2F2ZVg7CmV4dGVybiBpbnQgZ25GRE1TYXZlWTsKIyAzMTAgIi4uLy4uLy4uL2xpYi9jY2xpbWFn ZS5oIgp0eXBlZGVmIHN0cnVjdAp7CiAgIEZJTEUqIGZwX21lbTsKICAgR0RCTGF5ZXIgaFNhbXBs ZVBvaW50c0xheWVyOwogICBkb3VibGUgZGZSYWRpdXNJbmNyRmFjdG9yOwogICBkb3VibGUgZGZT dGFydFJhZGl1czsKICAgZG91YmxlIGRmTWF4UmFkaXVzOwogICBkb3VibGUgZEVtcHR5VmFsdWU7 CiAgIGRvdWJsZSBkZlhSZXNvbHV0aW9uOwogICBkb3VibGUgZGZZUmVzb2x1dGlvbjsKICAgaW50 IG5NaW5OdW1Qb2ludHM7CiAgIGludCBuRXhwb25lbjsKICAgaW50IG5TYW1wbGU7CiAgIFRCb29s IGJTaW1wbGVJbnZEaXM7Cn1JbnZkSW5mbzsKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogICBGSUxF KiBmcF9tZW07CiAgIEdEQkxheWVyIGhTYW1wbGVQb2ludHNMYXllcjsKICAgaW50IG5NaW5OdW1Q b2ludHM7CiAgIGludCBuRXhwb25lbjsKICAgaW50IG5TYW1wbGU7CiAgIFRCb29sIGJTaW1wbGVJ bnZEaXM7CiAgIGRvdWJsZSBkZlJhZGl1c0luY3JGYWN0b3I7CiAgIGRvdWJsZSBkZlN0YXJ0UmFk aXVzOwogICBkb3VibGUgZGZNYXhSYWRpdXM7CiAgIGRvdWJsZSBkRW1wdHlWYWx1ZTsKICAgZG91 YmxlIGRmWFJlc29sdXRpb247CiAgIGRvdWJsZSBkZllSZXNvbHV0aW9uOwogICBkb3VibGUgZGZZ T2Zmc2V0OwogICBkb3VibGUgZGZYT2Zmc2V0Owp9SW52RGlzSW5mb190OwoKCgp0eXBlZGVmIHN0 cnVjdAp7CiAgICBGSUxFICogZnBJbjsKICAgIGludCAqIHBuU2VnbWVudHM7CiAgICBpbnQgblNl Z21lbnRzOwogICAgY2hhciAqIHN6RmllbGROYW1lOwoKICAgIEZJTEUgKiBmcE91dDsKICAgIGlu dCAqIGFuREJPVzsKICAgIGludCBuT3V0cHV0Q2hhbm5lbDsKCiAgICBpbnQgbkludGVycFR5cGU7 CiAgICBkb3VibGUgZGZNaW5TZWFyY2hSYWRpdXM7CiAgICBkb3VibGUgZGZNYXhTZWFyY2hSYWRp dXM7CiAgICBpbnQgbk1pbkRhdGFOdW07CiAgICBUQm9vbCBiQmFja2dyb3VuZDsKICAgIGZsb2F0 IGZCYWNrZ3JvdW5kOwogICAgaW50IG5FeHA7CgogICAgSU1QUHJvZ3Jlc3NGdW5jIHBmbkNvdW50 ZXI7CiAgICB2b2lkICpwQ291bnRBcmc7Cgp9IEludkRpc3RQYXJhbV90OwoKCnR5cGVkZWYgc3Ry dWN0IHsKICAgIGRvdWJsZSBkZlhTaXplOwogICAgZG91YmxlIGRmWVNpemU7CiAgICBkb3VibGUg ZGZYT2Zmc2V0OwogICAgZG91YmxlIGRmWU9mZnNldDsKICAgIGRvdWJsZSogcGRmWDsKICAgIGRv dWJsZSogcGRmWTsKICAgIGRvdWJsZSogcGRmWjsKICAgIGludCBuVGVybXM7CiAgICBUQm9vbCBC YWNrRWxldkZsYWc7Cn0gU2FtcGxlUG9pbnRzSW5mb190OwoKClRCb29sIE5OSW50ZXJwb2xhdGUg KEZJTEUgKmdkYl9mcCwgU2FtcGxlUG9pbnRzSW5mb190ICpwc1NhbXBsZUluZm8sCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGJvYywgaW50ICp3aW5kb3csIFRCb29sIGJFeHRy YXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTVBQcm9ncmVzc0Z1bmMgcGZuQ291 bnRlcix2b2lkKiBwQ291bnRBcmcpOwoKCnZvaWQgSW52RGlzdGFuY2UoRklMRSAqZ2RiX2ZwLElu dkRpc0luZm9fdCAqcHNJbnZEaXMsaW50IGRib2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQqIGRib3csUENJQ291bnRlciBwZm5Db3VudGVyKTsKClRC b29sIEludGVycG9sYXRlQXRFYWNoUG9pbnQoSW52RGlzSW5mb190ICpwc0ludkRpcywgZG91Ymxl IGRYZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGRZZiwg ZmxvYXQqIHBkZkVzdGltYXRlKTsKCgpUQm9vbCBJbnZEaXN0SW50ZXJwKEludkRpc3RQYXJhbV90 ICogcHNQYXJhbSApOwoKCnZvaWQgUmVhZFhZWihGSUxFICpmcF9yYXN0ZXIsIFNhbXBsZVBvaW50 c0luZm9fdCAqcHNTYW1wbGVJbmZvLAogICAgICAgICAgICAgRklMRSAqZnBfdmVjdG9yLCBpbnQg bkRidnMsIGNoYXIgKnBzekZsZG5tZSwKICAgICAgICAgICAgIFRCb29sIGJDb252ZXJ0UGl4ZWwp OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgZG91YmxlIGRNaW5YOwogICAgZG91YmxlIGRNaW5Z OwogICAgZG91YmxlIGRYWVNjYWxlRmFjOwoKICAgIGRvdWJsZSBkTWluWjsKICAgIGRvdWJsZSBk U2NhbGVkRGVsdGE7CiAgICBkb3VibGUgZERlbHRhOwogICAgZG91YmxlIGRBbHBoYTA7CiAgICBk b3VibGUqIHBkQWxwaGFzOwp9IE11bHRpUXVhZENvZWZmX3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CiAg ICBkb3VibGUgZE1pblg7CiAgICBkb3VibGUgZE1pblk7CiAgICBkb3VibGUgZFhZU2NhbGVGYWM7 CiAgICBkb3VibGUgZEEwOwogICAgZG91YmxlIGRBMTsKICAgIGRvdWJsZSBkQTI7CiAgICBkb3Vi bGUqIHBkQjsKfSBUaGluUGxhdGVDb2VmZl90OwoKc3RydWN0IFByb2JsZW1JbmZvOwoKdHlwZWRl ZiBUQm9vbCAoKmZUeXBlKShzdHJ1Y3QgUHJvYmxlbUluZm8qKTsKCgp0eXBlZGVmIHN0cnVjdCBQ cm9ibGVtSW5mbyB7CiAgICBGSUxFKiBnZGJfZnA7CiAgICBkb3VibGUgZGZYU2l6ZTsKICAgIGRv dWJsZSBkZllTaXplOwogICAgZG91YmxlIGRmWE9mZnNldDsKICAgIGRvdWJsZSBkZllPZmZzZXQ7 CiAgICBkb3VibGUgZGZYOwogICAgZG91YmxlIGRmWTsKICAgIGRvdWJsZSBkZkVzdGltYXRlOwog ICAgZG91YmxlKiBwZGZYOwogICAgZG91YmxlKiBwZGZZOwogICAgZG91YmxlKiBwZGZaOwogICAg aW50IG5UZXJtczsKICAgIGludCBkYm9jOwogICAgaW50KiBkYm93OwogICAgSU1QUHJvZ3Jlc3NG dW5jIHBmbkNvdW50ZXI7CiAgICB2b2lkICpwQ291bnRBcmc7CiAgICB2b2lkKiBwc0NvZWZmczsK ICAgIGZUeXBlIHBmblRyYW5zZm9ybVhZWjsKICAgIGZUeXBlIHBmbkNyZWF0ZUNvZWZmczsKICAg IGZUeXBlIHBmbkRlc3Ryb3lDb2VmZnM7CiAgICBmVHlwZSBwZm5JbnRlcnBvbGF0aW9uOwogICAg ZlR5cGUgcGZuSW50ZXJwb2xhdGVBdFBvaW50OwogICAgZG91YmxlIGRmUmVzVmFsdWU7Cn0gUHJv YmxlbUluZm9fdDsKCgpUQm9vbCBSQkZJbnRlcnBvbGF0aW9uKFByb2JsZW1JbmZvX3QqIHBzSW5m byk7CgpUQm9vbCBNUVRyYW5zZm9ybVhZWihQcm9ibGVtSW5mb190KiBwc0luZm8pOwpUQm9vbCBU UFNUcmFuc2Zvcm1YWVooUHJvYmxlbUluZm9fdCogcHNJbmZvKTsKVEJvb2wgTVFDcmVhdGVDb2Vm ZnMoUHJvYmxlbUluZm9fdCogcHNJbmZvKTsKVEJvb2wgTVFEZXN0cm95Q29lZmZzKFByb2JsZW1J bmZvX3QqIHBzSW5mbyk7ClRCb29sIE1RSW50ZXJwb2xhdGVBdFBvaW50KFByb2JsZW1JbmZvX3Qq IHBzSW5mbyk7ClRCb29sIFRQU0NyZWF0ZUNvZWZmcyhQcm9ibGVtSW5mb190KiBwc0luZm8pOwpU Qm9vbCBUUFNEZXN0cm95Q29lZmZzKFByb2JsZW1JbmZvX3QqIHBzSW5mbyk7ClRCb29sIFRQU0lu dGVycG9sYXRlQXRQb2ludChQcm9ibGVtSW5mb190KiBwc0luZm8pOwojIDUwMSAiLi4vLi4vLi4v bGliL2NjbGltYWdlLmgiCnR5cGVkZWYgc3RydWN0CnsKICAgIEdEQkxheWVyIGhMYXllcjsKICAg IGludCBuSW5wdXRGaWVsZDsKfSBLUkdMYXllcl90OwoKCgoKdHlwZWRlZiBzdHJ1Y3QKewoKICAg IGludCBuTGF5ZXJzOwogICAgS1JHTGF5ZXJfdCBhc0xheWVyc1s2NF07CgogICAgRklMRSAqZnBP dXQ7CiAgICBpbnQgbkRCT0M7CiAgICBpbnQgbkRCT0NWYXI7CiAgICBpbnQgKnBhbkRCT1c7Cgog ICAgSU1QUHJvZ3Jlc3NGdW5jIHBmblByb2dyZXNzOwogICAgdm9pZCAqcFByb2dyZXNzQXJnOwoK ICAgIFRCb29sIGJVc2VCYWNrZ3JvdW5kVmFsdWU7CiAgICBkb3VibGUgZGZCYWNrZ3JvdW5kVmFs dWU7CgogICAgaW50IG5Nb2RlOwogICAgZG91YmxlIGRmTnVnZ2V0OwogICAgZG91YmxlIGRmU2ls bDsKICAgIGRvdWJsZSBkZlJhbmdlOwogICAgaW50IG5NYXhQb2ludHNQZXJNYXRyaXg7CiAgICBp bnQgbk1pblBvaW50c1Blck9jdGFudDsKCiAgICBpbnQgbkJsb2NrTW9kZTsKICAgIGludCBuTWF4 UG9pbnRzUGVyQmxvY2s7CiAgICBkb3VibGUgZGZYQmxvY2s7CiAgICBkb3VibGUgZGZZQmxvY2s7 Cgp9IEtyaWdpbmdPcHRpb25zOwoKCgoKVEJvb2wgUG9pbnRLcmlnaW5nICggS3JpZ2luZ09wdGlv bnMgKik7Cgp2b2lkIEluaXRLcmlnaW5nT3B0aW9ucyggS3JpZ2luZ09wdGlvbnMgKiApOwoKdm9p ZCBLUkdBZGRMYXllciggS3JpZ2luZ09wdGlvbnMgKiwgR0RCTGF5ZXIsIGludCApOwoKCgoKCgp2 b2lkIEN1bXVDb3VudGVySW5pdCggSU1QUHJvZ3Jlc3NGdW5jLCB2b2lkICogKTsKdm9pZCBDdW11 Q291bnRlck5ld0xldmVsKCB2b2lkICk7CnZvaWQgQ3VtdUNvdW50ZXJFeGl0TGV2ZWwoIHZvaWQg KTsKdm9pZCBDdW11Q291bnRlclNldFJhbmdlKCBkb3VibGUsIGRvdWJsZSApOwp2b2lkIEN1bXVD b3VudGVyU2V0TWVzc2FnZSggY2hhciAqICk7CnZvaWQgQ3VtdUNvdW50ZXJQcm9ncmVzcyggZG91 YmxlICk7CgoKCgp0eXBlZGVmIGVudW0KewogICAgVkRFTV9QT0lOVFMsCiAgICBWREVNX0NPTlRP VVJTLAogICAgVkRFTV8zRExJTkVTLAogICAgVkRFTV9WQUxMRVlTLAogICAgVkRFTV9SSURHRVMs CiAgICBWREVNX0NMSUZGUwp9ClZERU1MYXllclR5cGU7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgICBp bnQgbk51bUxheWVyczsKICAgIEdEQkxheWVyICpwYWhMYXllcnM7CiAgICBpbnQgKnBhbkZpZWxk czsKICAgIFZERU1MYXllclR5cGUgKnBhZUxUeXBlczsKICAgIEZJTEUgKmZwT3V0OwogICAgaW50 IG5EQk9DOwogICAgaW50IGFuREJPV1s0XTsKICAgIGludCBuTWF4SXRlcjsKICAgIGZsb2F0IGZN YXhFcnI7CiAgICBUQm9vbCBiV3JpdGVIaXM7CiAgICBpbnQgbk1lbUluQnl0ZXM7CiAgICBJTVBQ cm9ncmVzc0Z1bmMgcGZuUHJvZ3Jlc3M7CiAgICB2b2lkICpwUHJvZ3Jlc3NBcmc7Cn0KVkRFTVBh cmFtVHlwZTsKCnZvaWQgVkRFTShWREVNUGFyYW1UeXBlICpwc1BhcmFtcyk7Cgp2b2lkIFZERU1Q YXJhbUluaXQoVkRFTVBhcmFtVHlwZSAqcHNQYXJhbXMpOwoKCgoKCgp0eXBlZGVmIHN0cnVjdAp7 CgoKICAgIGludCAqREJPVzsKCiAgICBGSUxFICpmcFVuY29yOwogICAgRklMRSAqZnBHZW87Cgog ICAgaW50IEJ1ZkNoYW47CiAgICBpbnQgKkRCSUM7CiAgICBpbnQgKkRCT0M7CgogICAgdW5zaWdu ZWQgY2hhciAqKkxVVHM7CiAgICBkb3VibGUgKipMVVRDb2VmZnM7CgogICAgaW50IENhY2hlU2l6 ZTsKICAgIHVuc2lnbmVkIGNoYXIgKkNhY2hlOwogICAgaW50IE91dHB1dENhY2hlU2l6ZTsKCiAg ICBkb3VibGUgKk1vc2FpYzsKICAgIGludCBNb3NhaWNTaXplOwoKICAgIHZvaWQgKCpDb3VudCko ZG91YmxlKTsKCiAgICBkb3VibGUgRXhjbHVzaW9uVmFsdWU7CiAgICBpbnQgRXhjbHVzaW9uRmxh ZzsKCiAgICBkb3VibGUgQmxlbmRXaWR0aDsKCiAgICBpbnQgU3JjQml0bWFwOwogICAgaW50IERz dEJpdG1hcDsKCiAgICBUcmFuc2Zvcm1GdW5jIFRyYW5zZm9ybTsKICAgIHZvaWQgKlRyYW5zZm9y bUFyZzsKCiAgICBpbnQgUmVzYW1wbGVUeXBlOwogICAgaW50IFNhbXBsaW5nSW50ZXJ2YWw7Cgog ICAgVEJvb2wgYk1ldGFkYXRhOwogICAgVEJvb2wgYldhcm5UaHJhc2hpbmc7CgoKfSBXYXJwT3B0 aW9uczsKIyA2NTkgIi4uLy4uLy4uL2xpYi9jY2xpbWFnZS5oIgp2b2lkIEluaXRXYXJwT3B0aW9u cyAoIFdhcnBPcHRpb25zICogKTsKaW50IFdhcnBJbWFnZSAoIFdhcnBPcHRpb25zICogKTsKdm9p ZCBXYXJwQm91bmRzICggV2FycE9wdGlvbnMgKiwgaW50ICosIGludCAqICk7Cgp2b2lkIFdhcnBO ZWFyZXN0ICggV2FycE9wdGlvbnMgKiwgaW50ICosIGludCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVuc2lnbmVkIGNoYXIgKiosIGludCAqLCBpbnQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgKiwgaW50ICosIGludCwgaW50ICk7CnZvaWQgV2FycENhY2hlTmVhcmVzdCAo IFdhcnBPcHRpb25zICosIGludCAqLCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBjaGFyICoqLCBpbnQgKiwgaW50LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50ICosIGludCAqLCBpbnQgKTsKdm9pZCBXYXJwTmVhcmVzdFNh bXBsaW5nICggV2FycE9wdGlvbnMgKiwgaW50ICosIGludCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiosIGludCAqLCBpbnQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKiwgaW50ICosIGludCwgaW50LCBp bnQgKTsKdm9pZCBXYXJwQmlsaW5lYXIgKCBXYXJwT3B0aW9ucyAqLCBpbnQgKiwgaW50LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiosIGludCAqLCBpbnQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICosIGludCAqLCBpbnQsIGludCApOwp2b2lk IFdhcnBCaWxpbmVhclNhbXBsaW5nICggV2FycE9wdGlvbnMgKiwgaW50ICosIGludCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqLCBpbnQg KiwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqLCBp bnQgKiwgaW50LCBpbnQsIGludCApOwp2b2lkIFdhcnBDdWJpYyAoIFdhcnBPcHRpb25zICosIGlu dCAqLCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKiwgaW50 ICosIGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKiwgaW50ICosIGludCwgaW50 ICk7CnZvaWQgV2FycEN1YmljU2FtcGxpbmcgKCBXYXJwT3B0aW9ucyAqLCBpbnQgKiwgaW50LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiosIGlu dCAqLCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICosIGlu dCAqLCBpbnQsIGludCwgaW50ICk7CnZvaWQgV2FycFNpblggKCBXYXJwT3B0aW9ucyAqLCBpbnQg KiwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiosIGludCAq LCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICosIGludCAqLCBpbnQsIGludCAp Owp2b2lkIFdhcnBTaW5YU2FtcGxpbmcgKCBXYXJwT3B0aW9ucyAqLCBpbnQgKiwgaW50LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKiwgaW50ICos IGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqLCBpbnQgKiwg aW50LCBpbnQsIGludCApOwoKaW50IFJlcHJvamVjdEltYWdlKCBXYXJwT3B0aW9ucyAqICk7Cmlu dCBHQ1BSZXByb2plY3RJbWFnZSggV2FycE9wdGlvbnMgKiwgaW50ICk7CmludCBNb3NhaWNJbWFn ZSggV2FycE9wdGlvbnMgKiApOwoKdm9pZCBQb2ludEluUG9seSggZG91YmxlLCBkb3VibGUsIGRv dWJsZSAqLCBpbnQsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUgKiwKICAgICAgICAgICAgICAgICAg aW50ICogKTsKdm9pZCBQcm94aW1pdHkoIGRvdWJsZSwgZG91YmxlLCBkb3VibGUgKiwgaW50LCBk b3VibGUgKiApOwoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogICAgRklMRSAqZnBJbjsKICAgIEZJTEUg KmZwT3V0OwogICAgaW50IG5OdW1MYXllcnM7CiAgICBpbnQgKnBhbkxheWVyczsKICAgIGludCAq cGFuQXR0RmllbGRzOwogICAgZmxvYXQgKnBhZlZhbHVlczsKICAgIGludCAqZGJvYzsKICAgIGZs b2F0IGZMaW5lV2lkdGg7CiAgICBUQm9vbCBiNENvbm5lY3Q7CiAgICBUQm9vbCBiQml0bWFwOwog ICAgaW50IG5NZW1TaXplOwogICAgSU1QUHJvZ3Jlc3NGdW5jIHBmblByb2dyZXNzOwogICAgdm9p ZCAqcFByb2dyZXNzQXJnOwogICAgaW50IG5PdmVybGF5RmxhZ3M7Cn0gR3JkcG9sUGFyYW1UeXBl OwoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogICAgaW50IG5YU2l6ZTsKICAgIGludCBuWVNpemU7CiAg ICBpbnQgblRvcDsKICAgIGludCBuQnVmTGluZXM7CiAgICBmbG9hdCAqcGFmSW1hZ2U7CiAgICB1 bnNpZ25lZCBjaGFyICpwYWJ5UGxhbmU7CiAgICBmbG9hdCBmTGluZVdpZHRoOwogICAgaW50IG5P dmVybGF5RmxhZ3M7Cn0gR3JpZERlc3RuVHlwZTsKCnZvaWQgR3JkcG9sUGFyYW1Jbml0KEdyZHBv bFBhcmFtVHlwZSAqcHNQYXJhbXMpOwoKdm9pZCBHcmlkUG9seWdvbnMoR3JkcG9sUGFyYW1UeXBl ICpwc1BhcmFtcyk7Cgp2b2lkIEdyaWRBcmNzKEdyZHBvbFBhcmFtVHlwZSAqcHNQYXJhbXMpOwoK dm9pZCBHcmlkRWRnZUFuZEZpbGwoR3JkcG9sUGFyYW1UeXBlICpwc1BhcmFtcyk7Cgp2b2lkIEJ1 cm5Qb2x5Z29uc0luSW1hZ2UoaW50IG5Qb2x5Z29ucywgaW50ICpwbk51bVZlcnRpY2VzLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0ICoqcHBmVmVydGljZXMsIGZsb2F0 IGZWYWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmlkRGVzdG5UeXBl ICpwc0RDKTsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgICBGSUxFICpmcEluOwogICAgRklMRSAq ZnBPdXQ7CiAgICBpbnQgblZTZWc7CiAgICBpbnQgKmFuREJWUzsKICAgIGludCBuREJPQzsKICAg IGNoYXIgKmZsZG5tZTsKICAgIGludCBuTWF4SXRlcjsKICAgIGZsb2F0IGZUZW5zaW9uOwogICAg ZmxvYXQgZlJlbGF4Owp9CkdyZENudFBhcmFtVHlwZTsKCnZvaWQgR3JpZENvbnRvdXIoR3JkQ250 UGFyYW1UeXBlICpwc1BhcmFtcywgUENJQ291bnRlciBwZm5Db3VudGVyKTsKIyA3NzcgIi4uLy4u Ly4uL2xpYi9jY2xpbWFnZS5oIgp2b2lkIFZTYW1wbGVQb2x5KCBGSUxFICosIEdEQkxheWVyLCBp bnQsIGludCwgZG91YmxlLCBjb25zdCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBUcmFuc2Zvcm1GdW5jLCB2b2lkICosIElNUFByb2dyZXNzRnVuYywgdm9pZCAqICk7CgoKCgoK dm9pZCBJSFN0b1JHQiAoaW50IGksIGludCBoLCBpbnQgcywgaW50KiByLCBpbnQqIGcsIGludCog Yik7CnZvaWQgUkdCdG9JSFMgKGludCByLCBpbnQgZywgaW50IGIsIGludCogaSwgaW50KiBoLCBp bnQqIHMpOwoKdm9pZCBSR0JUb0lIU1RyYW5zZm9ybShmbG9hdCAqYWZSR0JCdWZmZXIsIGZsb2F0 ICphZklIU0J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5Db3Vu dCwgVEJvb2wgYlNjYWxlLCBjaGFyICpzeklIU01vZGVsKTsKCnZvaWQgSUhTVG9SR0JUcmFuc2Zv cm0oZmxvYXQgKmFmSUhTQnVmZmVyLCBmbG9hdCAqYWZSR0JCdWZmZXIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBuQ291bnQsIFRCb29sIGJTY2FsZSwgY2hhciAqc3pJSFNN b2RlbCk7CiMgODAzICIuLi8uLi8uLi9saWIvY2NsaW1hZ2UuaCIKdHlwZWRlZiBzdHJ1Y3QKewoK CiAgICBGSUxFICpmcFNvdXJjZTsKCiAgICBGSUxFICpmcERlc3Q7CiAgICBjaGFyICpwc3pEZXN0 TmFtZTsKCiAgICBpbnQgblByb2Nlc3M7CgogICAgaW50IG5PdXRwdXRBczsKCiAgICBpbnQgYW5E QklDWzJdOwogICAgaW50IG5JbkxheWVyczsKICAgIGludCBhbkRCSVdbNF07CiAgICBpbnQgbkRC T0M7CgogICAgVEJvb2wgYkhpc3Rvcnk7CgoKICAgIElNUFByb2dyZXNzRnVuYyBwZm5Qcm9ncmVz czsKICAgIHZvaWQgKnBQcm9ncmVzc0FyZzsKCiAgICBkb3VibGUgKnBhZGZBMERhdGE7CiAgICBk b3VibGUgKnBhZGZTY2FsZTsKICAgIGRvdWJsZSAqcGFkZkluY2lkOwoKfSBTQVJTaWdtYV90OwoK U0FSU2lnbWFfdCAqQ3JlYXRlU0FSU2lnbWEoKTsKdm9pZCBGcmVlU0FSU2lnbWEoIFNBUlNpZ21h X3QgKiApOwpUQm9vbCBTQVJTaWdtYSggU0FSU2lnbWFfdCAqICk7Cgp9CiMgMTgwICIuLi8uLi8u Li9saWIvZ2VvLmgiIDIKCmV4dGVybiAiQyIgewoKCgoKCnR5cGVkZWYgc3RydWN0IHsKICBkb3Vi bGUgKnNyX2ZpcnN0OwogIGRvdWJsZSAqc3JfbGFzdDsKICBkb3VibGUgKmxvbmdfZmlyc3Q7CiAg ZG91YmxlICpsb25nX21pZDsKICBkb3VibGUgKmxvbmdfbGFzdDsKICBkb3VibGUgKmxhdF9maXJz dDsKICBkb3VibGUgKmxhdF9taWQ7CiAgZG91YmxlICpsYXRfbGFzdDsKfSBMaW5lUG9zaXRpb247 Cgp0eXBlZGVmIHN0cnVjdCB7CiAgUHJvakluZm9fdCBzR2VvVHJhbnNmb3JtOwoKICBMaW5lUG9z aXRpb24gc0xpbmVQb3M7CgogIGludCBuT3JiUGl4ZWxzOwogIGludCBuT3JiTGluZXM7Cn0gUlRD U0NhbGNPcHRpb25zX3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgR0VPSW5mb190IHNHZW8ySW1nOwog IEdFT0luZm9fdCBzSW1nMkdlbzsKCiAgTGluZVBvc2l0aW9uICpwc0xpbmVQb3M7CgogIGludCBu T3JiUGl4ZWxzOwogIGludCBuSW5jcmVtZW50OwoKICBkb3VibGUgZGZYUmVzOwogIGRvdWJsZSBk ZllSZXM7CiAgZG91YmxlIGRmZGlzdF8xOwogIGRvdWJsZSBkZmRpc3RfbjsKICBkb3VibGUgKnBk ZlNsYW50OwogIGRvdWJsZSAqcGRmSW5jOwogIGRvdWJsZSAqcGRmU2FtcGxlX3NpemU7CiAgZG91 YmxlIGRmR0NQTWluSHQ7CiAgZG91YmxlIGRmR0NQTWF4SHQ7CgogIFJUQ1NDYWxjT3B0aW9uc190 ICpwc0NPcHQ7Cn0gUlRDU0luZm9fdDsKCgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBpbnQgbkdD UDsKICAgIGNoYXIgKnBzekdjcGlkczsKICAgIGNoYXIgKm1hcHVuaXQ7CiAgICBjaGFyICpwc3pT dGF0dXM7CiAgICBkb3VibGUgKnBhZGZQaXhlbDsKICAgIGRvdWJsZSAqcGFkZkxpbmU7CiAgICBk b3VibGUgKnBhZGZYOwogICAgZG91YmxlICpwYWRmWTsKICAgIGRvdWJsZSAqcGFkZlo7CiAgICBQ cm9qSW5mb190ICpzUHJvamVjdGlvbjsKfSBHQ1BJbmZvX3Q7CgpHQ1BJbmZvX3QgKklEQkdjcElP MiAoIEZJTEUgKiwgaW50LCBpbnQsIGludCAqLCBHQ1BJbmZvX3QgKik7CnZvaWQgSURCR2NwMkZy ZWUgKCBHQ1BJbmZvX3QgKnNHQ1AgKTsKR0NQSW5mb190ICpJREJHY3BUb0dDUEluZm8gKCBGSUxF ICosIGludCk7CgoKCgp2b2lkIFJGR2VvMkltZyAoUkZJbmZvX3QgKiwgZG91YmxlLCBkb3VibGUs IGRvdWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlICosIGRvdWJsZSAqKTsK aW50IFJGSW1nMkdlbyAoUkZJbmZvX3QgKiwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSAqLAogICAg ICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICosIEZJTEUgKiwgZG91Ymxl LCBpbnQpOwpUQm9vbCBSRkRldEdlbyAoUkZJbmZvX3QgKipSRk1vZGVsLAogICAgICAgICAgICAg ICAgICAgICAgICAgIGRvdWJsZSBkZkxQaXhlbCwgZG91YmxlIGRmTExpbmUsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgZG91YmxlIGRmUlBpeGVsLCBkb3VibGUgZGZSTGluZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICBkb3VibGUgKnBkZlgsIGRvdWJsZSAqcGRmWSwgZG91YmxlICpwZGZa KTsKCgoKCnZvaWQgQVBHZW8ySW1nIChBUEluZm9fdCAqLCBkb3VibGUsIGRvdWJsZSwgZG91Ymxl LAogICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICopOwp2b2lkIEFQ SW1nMkdlbyAoQVBJbmZvX3QgKiwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgZG91YmxlICosIGRvdWJsZSAqKTsKdm9pZCBBUEltZzJQaG90byAoQVBJ bmZvX3QgKiwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSAqLCBkb3VibGUgKik7CnZvaWQgQVBQaG90 bzJHZW8gKEFQSW5mb190ICosIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSAqLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqKTsKVEJvb2wgQVBEZXRHZW8gKEFQSW5m b190ICoqQVBNb2RlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZGZMUGl4ZWws IGRvdWJsZSBkZkxMaW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBkZlJQaXhl bCwgZG91YmxlIGRmUkxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpwZGZY LCBkb3VibGUgKnBkZlksIGRvdWJsZSAqcGRmWik7CgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgUHJv akluZm9fdCBzR2VvVHJhbnNmb3JtOwogIEVwaGVtZXJpc1NlZ190ICpwc09yYml0RGF0YTsKICBU Qm9vbCBSYXdUb0dlbzsKfSBTUklUQ2FsY09wdGlvbnNfdDsKClRCb29sIFNSSVRDYWxjdWxhdGUo IFNSSVRJbmZvX3QgKiAsIEVwaGVtZXJpc1NlZ190ICosIGludCAsIFByb2pJbmZvX3QgKiAsCiAg ICAgICAgICAgICAgICAgICAgICAgZG91YmxlICogLCBkb3VibGUgKiAsIGRvdWJsZSAqICwgZG91 YmxlICogLCBkb3VibGUgKik7CgpUQm9vbCBTUklUQ2FsY3VsYXRlTiggaW50ICwgY2hhciAqLCBT UklUSW5mb190ICoqICwgRXBoZW1lcmlzU2VnX3QgKiosCiAgICAgICAgICAgICAgICAgICAgICBQ cm9qSW5mb190ICosIGludCAsIGNoYXIgKiwgY2hhciAqLCBjaGFyICosCiAgICAgICAgICAgICAg ICAgICAgICBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqLAogICAgICAgICAgICAgICAgICAg ICAgZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUgKiwKICAgICAgICAgICAgICAgICAgICAgIGRv dWJsZSAqLCBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqLAogICAgICAgICAgICAgICAgICAg ICAgaW50ICwgY2hhciAqLCBjaGFyICosIGRvdWJsZSAqLCBkb3VibGUgKiwgZG91YmxlICosCiAg ICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUg KiwgZG91YmxlICosCiAgICAgICAgICAgICAgICAgICAgICBpbnQgKiwgY2hhciAqLCBpbnQgKiwK ICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqLCBkb3VibGUgKiwgZG91YmxlICosCiAgICAg ICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqLAogICAgICAgICAg ICAgICAgICAgICAgZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUgKik7Cgp2b2lkIFNSSVRJbml0 IChGSUxFICosIGludCAsIEVwaGVtZXJpc1NlZ190ICoqKTsKCnZvaWQgU1JJVFRyYW5zZm9ybSgg U1JJVEluZm9fdCAqLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLAogICAgICAgICAgICAgICAgICAg IGRvdWJsZSAqLCBkb3VibGUgKik7Cgp2b2lkIFNSSVRSTVNFcnJvciAoU1JJVEluZm9fdCAqLCBp bnQgLAogICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqLAogICAg ICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUgKik7Cgp2 b2lkIFNSSVRXTW9kZWwgKEZJTEUgKiwgaW50ICosIFNSSVRJbmZvX3QgKik7Cgp2b2lkIFNSSVRS TW9kZWwgKEZJTEUgKiwgaW50ICwgU1JJVEluZm9fdCAqKTsKClRCb29sIFNSSVREZXRHZW8gKFNS SVRJbmZvX3QgKipTUklUTW9kZWwsIGRvdWJsZSBkZnBpeGVsMSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRvdWJsZSBkZmxpbmUxLCBkb3VibGUgZGZwaXhlbDIsIGRvdWJsZSBkZmxpbmUy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpwZGZYLCBkb3VibGUgKnBkZlks IGRvdWJsZSAqcGRmWik7CgpUQm9vbCBHZW5TYXRFcGlwb2xhciAoY2hhciAqLCBjaGFyICosIGNo YXIgKiwgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCwgaW50LCBp bnQsIHZvaWQgKiwgdm9pZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDUElu Zm9fdCAqLCBHQ1BJbmZvX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQs IElNUFByb2dyZXNzRnVuYywgdm9pZCAqKTsKClRCb29sIEdlbkFQRXBpcG9sYXIgKGNoYXIgKiwg Y2hhciAqLCBjaGFyICosIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCwgaW50LCBBUEluZm9fdCAqLCBBUEluZm9fdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgR0NQSW5mb190ICosIEdDUEluZm9fdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50LCBJTVBQcm9ncmVzc0Z1bmMsIHZvaWQgKik7CgpUQm9vbCBHZW9TYXRERU0gKGNo YXIgKiwgaW50LCBpbnQgKiwgY2hhciAqLCBpbnQsIGRvdWJsZSwgZG91YmxlLAogICAgICAgICAg ICAgICAgICAgICAgICAgIGRvdWJsZSwgY2hhciAqICwgaW50LCBJTVBQcm9ncmVzc0Z1bmMsIHZv aWQgKik7CgoKdm9pZCB0b3V0aW5fMSAoU1JJVEluZm9fdCAqLCBkb3VibGUsIGRvdWJsZSwgZG91 YmxlLCBkb3VibGUqLAogICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKik7Cgp2b2lk IHRvdXRpbiAoU1JJVEluZm9fdCAqLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUgKiwK ICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqKTsKdm9pZCBTUE9UMUJUbzFBKCBTUklU SW5mb190ICosIGRvdWJsZSAqLCBkb3VibGUgKik7Cgp2b2lkIFNQT1QxQVRvMUIoIFNSSVRJbmZv X3QgKiwgZG91YmxlICosIGRvdWJsZSAqKTsKCnZvaWQgRGV0RGVtIChGSUxFICosIGRvdWJsZSwg ZG91YmxlLCBkb3VibGUgKiwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwKICAgICAgICAgICAgICAg ICAgICAgZG91YmxlLCBpbnQsIGludCwgaW50LCBUQm9vbCAqLCBmbG9hdCAqLCBpbnQsIGRvdWJs ZSwgaW50ICopOwoKZG91YmxlIEdldEdlb2lkSHQgKGRvdWJsZSwgZG91YmxlKTsKCnZvaWQgSW1h Z2VIaXMgKEZJTEUqLCBpbnQsIGludCAqLCBpbnQgKiwgZG91YmxlKTsKCnZvaWQgTDdIREZSZWFk IChjaGFyICosIGNoYXIgKiwgaW50ICosIGludCAsIGNoYXIgKiwgY2hhciAqLAogICAgICAgICAg ICAgICAgICAgICAgICAgIFRCb29sLCBJTVBQcm9ncmVzc0Z1bmMpOwoKdm9pZCBMN1RpZmZSZWFk IChjaGFyICosIGNoYXIgKiwgaW50ICosIGludCAsIGNoYXIgKiwgY2hhciAqLAogICAgICAgICAg ICAgICAgICAgICAgICAgICBUQm9vbCwgSU1QUHJvZ3Jlc3NGdW5jKTsKCnZvaWQgTDdGYXN0UmVh ZCAoY2hhciAqLCBjaGFyICosIGludCAqLCBpbnQgLCBjaGFyICosIGNoYXIgKiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgVEJvb2wsIElNUFByb2dyZXNzRnVuYyk7Cgp2b2lkIEw3TmxhcHNS ZWFkIChjaGFyICosIGNoYXIgKiwgaW50ICosIGludCAsIGNoYXIgKiwgY2hhciAqLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgVEJvb2wsIElNUFByb2dyZXNzRnVuYyk7Cgp2b2lkIEFTVEVS UmVhZCAoY2hhciAqLCBjaGFyICosIGludCAqLCBpbnQgLCBjaGFyICosIGNoYXIgKiwKICAgICAg ICAgICAgICAgICAgICAgICAgICBUQm9vbCwgSU1QUHJvZ3Jlc3NGdW5jKTsKCnZvaWQgU2F0RXAx VG9JbWcgKGludCwgdm9pZCAqLCB2b2lkICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRvdWJsZSwgZG91YmxlLCBkb3VibGUgKiwgZG91YmxlICosCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRvdWJsZSwgZG91YmxlICosIGludCwgaW50LCBUQm9vbCAqLCBUQm9vbCk7Cgp2 b2lkIFNhdEVwMlRvSW1nIChkb3VibGUsIGRvdWJsZSwgZG91YmxlICosIGRvdWJsZSAqLCBkb3Vi bGUgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEJvb2wpOwoKdm9pZCBTYXRJbWdU b0VwMiAoZG91YmxlLCBkb3VibGUsIGRvdWJsZSAqLCBkb3VibGUgKiwgaW50LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlLCBUQm9vbCAqLCBUQm9vbCk7Cgp2 b2lkIFNhdEltZ1RvRXAxIChpbnQgLCB2b2lkICosIHZvaWQgKiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZG91YmxlLCBkb3VibGUsIGRvdWJsZSAqLCBkb3VibGUgKiwgaW50LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlLCBUQm9vbCAqLCBUQm9v bCk7CgpUQm9vbCBNZXJnZUlrb25vcyAoaW50LCBGSUxFICoqLCBjaGFyICosIElNUFByb2dyZXNz RnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqLCBjaGFyICopOwoKVEJv b2wgTWVyZ2VTcG90IChpbnQsIEZJTEUgKiosIGNoYXIgKiwgSU1QUHJvZ3Jlc3NGdW5jLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICosIGNoYXIgKik7ClRCb29sIE1lcmdlQXN0 ZXIgKGludCwgRklMRSAqKiwgY2hhciAqLCBJTVBQcm9ncmVzc0Z1bmMsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZvaWQgKiwgY2hhciAqKTsKIyAzOTMgIi4uLy4uLy4uL2xpYi9nZW8u aCIKdHlwZWRlZiBzdHJ1Y3QgewogICAgaW50IG5UeXBlOwoKICAgIFByb2pJbmZvX3Qgc1Byb2pl Y3Rpb247CgogICAgaW50IG5UUk5UeXBlOwogICAgR0VPSW5mb190ICpwc0dFT0Zyb21QaXhlbDsK ICAgIEdFT0luZm9fdCAqcHNHRU9Ub1BpeGVsOwoKICAgIEVwaGVtZXJpc1NlZ190ICpwc09yYml0 Owp9IEltZ0dlbzsKCkltZ0dlbyAqIEltZ0dlb0FsbG9jYXRlKCk7CnZvaWQgSW1nR2VvRGVhbGxv Y2F0ZSggSW1nR2VvICogKTsKSW1nR2VvICogSW1nR2VvRnJvbUdDUHMoIEZJTEUgKiBmcCwgaW50 IG5TZWdtZW50LCBpbnQgblRSTlR5cGUgKTsKSW1nR2VvICogSW1nR2VvRnJvbU9yYml0KCBGSUxF ICogZnAsIGludCBuU2VnbWVudCApOwpJbWdHZW8gKiBJbWdHZW9Gcm9tUHJvamVjdGlvbiggUHJv akluZm9fdCAqICk7CnZvaWQgSW1nR2VvR2V0UHJvamVjdGlvbiggSW1nR2VvICosIFByb2pJbmZv X3QgKiApOwpUQm9vbCBJbWdHZW9Ub1BpeGVsKCBJbWdHZW8gKiwKICAgICAgICAgICAgICAgICAg ICAgICBkb3VibGUsIGRvdWJsZSwgZG91YmxlLAogICAgICAgICAgICAgICAgICAgICAgIGRvdWJs ZSAqLCBkb3VibGUgKiwgZG91YmxlICogKTsKVEJvb2wgSW1nR2VvRnJvbVBpeGVsKCBJbWdHZW8g KiwKICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsCiAgICAg ICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqICk7CgoKCgp2 b2lkIERpc3RDb2VmZihkb3VibGUgKiwgZG91YmxlICosIGludCwgY2hhciAqLAogICAgICAgICAg ICAgICAgICAgICAgICAgZG91YmxlLCBkb3VibGUgKiwgaW50KTsKClRCb29sIEdldEVsZXYoIEZJ TEUgKiwgaW50LCBkb3VibGUsIGRvdWJsZSwgZG91YmxlICosIFRCb29sLCBkb3VibGUpOwoKVEJv b2wgSXNPdmVybGFwIChkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSk7CgppbnQgR2Vu V1JhdGlvbmFsIChkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUgKiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqLCBkb3VibGUgKiwgZG91YmxlICosIGRvdWJs ZSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlICosIGRvdWJsZSAqLCBpbnQg LCBpbnQgKiwgZG91YmxlICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwg ZG91YmxlICosIGRvdWJsZSAqLCBpbnQgLCBkb3VibGUpOwoKVEJvb2wgR2VuQXV0b0RlbSAoY2hh ciAqZmlsZXAxLCBjaGFyICpmaWxlcDIsIGNoYXIgKmZpbGVkZW0sCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgbk1vZGVsLCBpbnQgblNlZ21lbnQxLCBpbnQgblNlZ21lbnQyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpkYml3LCBkb3VibGUgKmRmTWluTWF4RWxldiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuZmFpbHZhbHUsIGludCBuYmFja2VsZXYs IGludCBuRXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqRGVtRGV0LCBjaGFy ICpEZW1FZGl0LCBjaGFyICpTY29yQ2hhbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo YXIgKnJlcG9ydCwgSU1QUHJvZ3Jlc3NGdW5jIHBmblByb2dyZXNzLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgdm9pZCAqcFByb2dyZXNzQXJnLCBjaGFyKiBFcnJNc2cpOwoKVEJvb2wgR2Vu SW1nMkdlbyAoaW50IG5Nb2RlbCwgdm9pZCAqcE1vZGVsLCBkb3VibGUgZGZwaXhlbCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGRmbGluZSwgZG91YmxlIGR6LCBkb3VibGUgKnBk Zmdlb3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqcGRmZ2VveSk7CgpUQm9v bCBHZW5HZW8ySW1nIChpbnQgbk1vZGVsLCB2b2lkICpwTW9kZWwyLCBkb3VibGUgZGZnZW94LAog ICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZGZnZW95LCBkb3VibGUgZHosIGRvdWJs ZSAqcGRmZG94LAogICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKnBkZmRveSk7Cgpk b3VibGUgQ2hlY2tJbWdSZXMgKGNoYXIgKnBzekZpbGVuYW1lLCBpbnQgbk1vZGVsLCBpbnQgblNl Z21lbnQxKTsKClRCb29sIENhbEVsZXYgKGludCBuTW9kZWwsIHZvaWQgKnBNb2RlbCwgZG91Ymxl IGRmTFBpeGVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZGZMTGluZSwgdm9p ZCAqcE1vZGVsMiwgZG91YmxlIGRmUlBpeGVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICBk b3VibGUgZGZSTGluZSwgZG91YmxlIGRmVG9sLCBkb3VibGUgKnBkZlgsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRvdWJsZSAqcGRmWSwgZG91YmxlICpwZGZaKTsKCnZvaWQgTWVhbk1hdGNo IChkb3VibGUqIHBkZlRlbXBsYXRlLCBpbnQgblRTaXplLCBkb3VibGUqIHBkZlNlYXJjaCwKICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgblNTaXplLCBkb3VibGUgKnBkZkNvclNjb3JlLCBp bnQgbkNTU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUqIE1heFNjb3JlLCBp bnQqIE1heFgsIGludCogTWF4WSk7Cgp2b2lkIERpZmZNYXRjaCAoZG91YmxlKiBwZGZUZW1wbGF0 ZSwgaW50IG5UU2l6ZSwgZG91YmxlKiBwZGZTZWFyY2gsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IG5TU2l6ZSwgZG91YmxlICpwZGZDb3JTY29yZSwgaW50IG5DU1NpemUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgZG91YmxlKiBNaW5TY29yZSwgZG91YmxlICpNYXhTY29yZSwKICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQqIE1pblgsIGludCogTWluWSk7Cgp2b2lkIFN1YlBp eGVsKGRvdWJsZSBmMTEsIGRvdWJsZSBmMTIsIGRvdWJsZSBmMTMsCiAgICAgICAgICAgICAgICAg ICAgICAgIGRvdWJsZSBmMjEsIGRvdWJsZSBmMjIsIGRvdWJsZSBmMjMsCiAgICAgICAgICAgICAg ICAgICAgICAgIGRvdWJsZSBmMzEsIGRvdWJsZSBmMzIsIGRvdWJsZSBmMzMsCiAgICAgICAgICAg ICAgICAgICAgICAgIGRvdWJsZSAqZGZYLCBkb3VibGUgKmRmWSk7CgoKCgoKCnR5cGVkZWYgc3Ry dWN0CnsKCgogICAgaW50ICpEQklXOwogICAgaW50ICpEQk9XOwoKICAgIEZJTEUgKmZwVW5jb3I7 CiAgICBGSUxFICpmcEdlbzsKICAgIEZJTEUgKmZwREVNOwogICAgRklMRSAqZnBGaWx0ZXI7Cgog ICAgaW50IEJ1ZkNoYW47CiAgICBpbnQgKkRCSUM7CiAgICBpbnQgKkRCT0M7CiAgICBpbnQgREJF QzsKICAgIGRvdWJsZSBkZkVsZXZPcHRpb25bMl07CiAgICBkb3VibGUgZGZCYWNrRWxldjsKCiAg ICBpbnQgQ2FjaGVTaXplOwoKICAgIElNUFByb2dyZXNzRnVuYyBwZm5Qcm9ncmVzczsKICAgIGlu dCBSZXNhbXBsZVR5cGU7CiAgICBpbnQgU2FtcGxpbmdJbnRlcnZhbDsKICAgIGludCBGaWx0ZXJU eXBlOwogICAgaW50IG5GaWx0ZXJTaXplWzJdOwoKICAgIGludCBNYXRoTW9kZWw7CiAgICBTUklU SW5mb190ICpTUklUTW9kZWw7CiAgICBBUEluZm9fdCAqQVBNb2RlbDsKICAgIFJGSW5mb190ICpS Rk1vZGVsOwogICAgUlRDU0luZm9fdCAqUlRDU01vZGVsOwoKICAgIGNoYXIgVVRNVW5pdFsxN107 Cgp9IE9ydGhvT3B0aW9uczsKIyA1MzcgIi4uLy4uLy4uL2xpYi9nZW8uaCIKdm9pZCBJbml0T3J0 aG9PcHRpb25zICggT3J0aG9PcHRpb25zICogKTsKdm9pZCBHZW5PcnRobyAoIE9ydGhvT3B0aW9u cyAqICk7CgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgICBGSUxFICpmcENvbG91cjsKICAgIGludCBh bkNvbG91ckNoYW5zWzNdOwogICAgaW50IGFuQ29sb3VyRGJpd1s0XTsKICAgIFRCb29sIGJQc2V1 ZG9Db2xvdXI7CiAgICB1bnNpZ25lZCBjaGFyIGF1Y0NvbG91ckx1dFs3NjhdOwogICAgZmxvYXQg YWZDb2xvdXJNaW5bM107CiAgICBmbG9hdCBhZkNvbG91ck1heFszXTsKICAgIGludCBuQ29sb3Vy UmVzYW1wbGU7CgogICAgRklMRSAqZnBJbnRlbnNpdHk7CiAgICBpbnQgbkludGVuc2l0eUNoYW47 CiAgICBpbnQgYW5JbnRlbnNpdHlEYml3WzRdOwogICAgdW5zaWduZWQgY2hhciBhdWNJbnRlbnNp dHlMdXRbMjU2XTsKICAgIGZsb2F0IGZJbnRlbnNpdHlNaW47CiAgICBmbG9hdCBmSW50ZW5zaXR5 TWF4OwogICAgaW50IG5JbnRlbnNpdHlSZXNhbXBsZTsKCiAgICBGSUxFICpmcE91dHB1dDsKICAg IGludCBhbk91dHB1dENoYW5zWzNdOwogICAgZmxvYXQgZk91dHB1dEJhY2tncm91bmQ7CgogICAg aW50IG5GdXNpb25Nb2RlbDsKICAgIGludCBiVG9JSFM7CgogICAgdm9pZCAoKnBmbkNvdW50ZXIp KGRvdWJsZSk7Cgp9IEZ1c2lvbk9wdGlvbnM7CiMgNTg5ICIuLi8uLi8uLi9saWIvZ2VvLmgiCnZv aWQgSW5pdEZ1c2lvbk9wdGlvbnMgKEZ1c2lvbk9wdGlvbnMgKnBzRnVzaW9uT3B0aW9ucyk7CnZv aWQgRGF0YUZ1c2lvbiAoRnVzaW9uT3B0aW9ucyAqcHNGdXNpb25PcHRpb25zKTsKCnZvaWQgR2V0 SGlzdG9ncmFtIChGSUxFICpmcCwgaW50IG5DaG5OdW0sIGludCBhbkRiaXdbNF0sCiAgICAgICAg ICAgICAgICAgIGludCBhbkhpc3RvZ3JhbVtdLCBkb3VibGUgKnBkZkRhdGFNaW4sIGRvdWJsZSAq cGRmRGF0YU1heCwKICAgICAgICAgICAgICAgICAgaW50IG5GdW5jKTsKCnZvaWQgR2V0RGVmYXVs dEx1dCAoaW50IGFuSGlzdG9ncmFtW10sIGludCBlVHlwZSwgdW5zaWduZWQgY2hhciBhbkx1dFtd KTsKClRCb29sIEdlbmVyYXRlQ29udG91cnMgKEZJTEUgKmdkYl9mcCwgaW50IGRiZWMsIGludCAq ZGJpdywKICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKmFkZkNvbnRvdXJMaXN0LCBpbnQg bkNvbnRvdXJzLCBkb3VibGUgYmFja3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICBHREJMYXll ciBoTmV3TGF5ZXIsIGludCBpRmllbGQsCiAgICAgICAgICAgICAgICAgICAgICAgSU1QUHJvZ3Jl c3NGdW5jIHBmblByb2dyZXNzLCB2b2lkICpwUHJvZ3Jlc3NBcmcpOwoKCgoKCnR5cGVkZWYgc3Ry dWN0CnsKICAgIGRvdWJsZSB4OwogICAgZG91YmxlIHk7Cn0gVk9SUG9pbnQ7CgoKdHlwZWRlZiBz dHJ1Y3QKewogICAgZG91YmxlIGRMZWZ0OwogICAgZG91YmxlIGRUb3A7CiAgICBkb3VibGUgZFJp Z2h0OwogICAgZG91YmxlIGRCb3R0b207Cn0gVk9SUmVjdDsKCgp0eXBlZGVmIHN0cnVjdAp7CiAg ICBpbnQgblZlcnRpY2VzOwogICAgVk9SUG9pbnQgKnBhc1ZlcnRpY2VzOwp9IFZPUlBvbHlnb247 CgoKdHlwZWRlZiBzdHJ1Y3QKewogICAgVk9SUG9pbnQgc1BvaW50OwogICAgVk9SUG9seWdvbiBz UG9seWdvbjsKfSBWT1JEaWFncmFtOwoKCnZvaWQgVk9SVm9yb25vaURpYWdyYW0oVk9SRGlhZ3Jh bSAqcGFzVk9SRGlhZ3JhbSwgaW50IG4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFZPUlJlY3QgKnBzUmVjdCk7CnZvaWQgVk9SRnJlZVBvbHlnb25zKFZPUkRpYWdyYW0gKnBhc1ZP UkRpYWdyYW0sIGludCBuKTsKCgoKCnZvaWQgRmluZERlbVJhbmdlIChGSUxFICosIGludCwgaW50 LCBpbnQsIGRvdWJsZSAqLCBkb3VibGUgKik7CnZvaWQgUlRDU0dldEltYWdlSW5mbyAoRklMRSAq LCBpbnQsIGludCAqLCBpbnQgKiwgaW50ICosIGludCAqLCBpbnQgKiwKICAgICAgICAgICAgICAg ICAgICAgICBpbnQgKiwgZG91YmxlICosIGRvdWJsZSAqLCBUQm9vbCAqKTsKdm9pZCBSVENTRGV0 UG9pbnQgKGludCwgZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUgKiwgZG91YmxlLCBkb3VibGUg KiwgZG91YmxlICosCiAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICopOwp2b2lk IFJUQ1NQYXJhbGxheENhbCAoZG91YmxlLCBkb3VibGUsIGRvdWJsZSAqLCBkb3VibGUgKiwgZG91 YmxlLCBkb3VibGUsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUsIGludCAqLCBpbnQgKik7 CnZvaWQgUlRDU0dldExpbmVEYXRhIChGSUxFICosIGludCwgTGluZVBvc2l0aW9uICosIGludCk7 CnZvaWQgUlRDU0dldFBvc2l0aW9uSW5mbyAoTGluZVBvc2l0aW9uICosIGludCwgZG91YmxlLCBk b3VibGUgKiwgZG91YmxlICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlICosIGRv dWJsZSAqLCBUQm9vbCAqKTsKdm9pZCBSVENTQ2FsUGFyYW1ldGVycyAoZG91YmxlLCBkb3VibGUs IGRvdWJsZSAqLCBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqLAogICAgICAgICAgICAgICAg ICAgICAgICBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUgKiwgZG91YmxlICos CiAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqLCBpbnQsIFRCb29sICopOwp2b2lkIFJU Q1NEZW1MaW5lIChGSUxFICosIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgY2hhciAq LCBkb3VibGUsIGRvdWJsZSwKICAgICAgICAgICAgICAgICAgZG91YmxlLCBkb3VibGUsIGludCwg aW50LCBpbnQsIGZsb2F0ICosIGRvdWJsZSwgY2hhciAqLCBpbnQsCiAgICAgICAgICAgICAgICAg IGludCAqLCBpbnQsIGRvdWJsZSAqLCBpbnQgKiwgaW50ICopOwp2b2lkIFJUQ1NDRGVtTGluZSAo RklMRSAqLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGNoYXIgKiwgZG91YmxlLAog ICAgICAgICAgICAgICAgICBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBpbnQsIGludCwgZmxvYXQg KiwgZG91YmxlLAogICAgICAgICAgICAgICAgICBjaGFyICosIGludCwgaW50ICosIGludCwgZG91 YmxlICosIGludCwKICAgICAgICAgICAgICAgICAgaW50LCBpbnQsIHVuc2lnbmVkIGNoYXIgKiwg aW50ICosIGludCAqLCBpbnQsIGludCAqKTsKdm9pZCBSVENTQ2FsRWxldiAoRklMRSAqLCBkb3Vi bGUsIGRvdWJsZSwgZG91YmxlICosIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsCiAgICAgICAgICAg ICAgICAgICBkb3VibGUsIGludCwgaW50LCBpbnQsIFRCb29sICosIGZsb2F0ICosIGludCwKICAg ICAgICAgICAgICAgICAgIGRvdWJsZSwgaW50ICosIGludCAqLCBpbnQgKik7CnZvaWQgUlRDU0ND YWxFbGV2IChGSUxFICosIGRvdWJsZSwgZG91YmxlLCBkb3VibGUgKiwgZG91YmxlLCBkb3VibGUs IGRvdWJsZSwKICAgICAgICAgICAgICAgICAgIGRvdWJsZSwgaW50LCBpbnQsIGludCwgVEJvb2wg KiwgZmxvYXQgKiwgZG91YmxlLAogICAgICAgICAgICAgICAgICAgaW50ICosIGludCwgaW50LCBp bnQsIHVuc2lnbmVkIGNoYXIgKiwgaW50ICosIGludCAqLCBpbnQsIGludCAqKTsKdm9pZCBSVENT RG90UHJvZHVjdCAoZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUgKik7CnZvaWQgUlRDU0VhcnRo UmFkaXVzIChkb3VibGUgKiwgZG91YmxlICopOwp2b2lkIFJUQ1NOb3JtYWxpemUgKGRvdWJsZSAq LCBkb3VibGUgKiwgZG91YmxlICopOwp2b2lkIFJUQ1NYWVpQb2xhciAoZG91YmxlICosIGRvdWJs ZSAqLCBkb3VibGUgKiwgZG91YmxlICopOwp2b2lkIFJUQ1NQb2x5Q29lZiAoZG91YmxlICosIGRv dWJsZSAqLCBkb3VibGUgKiwgaW50ICosIFRCb29sICopOwp2b2lkIFJUQ1NTb2x2ZUVxbiAoZG91 YmxlICosIGRvdWJsZSAqLCBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqLCBUQm9vbCAqKTsK dm9pZCBSVENTUG9sYXJYWVogKGRvdWJsZSAqLCBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAq KTsKdm9pZCBSVENTSW5pU2ltIChGSUxFICosIEZJTEUgKiwgaW50LCBpbnQsIGRvdWJsZSwgTGlu ZVBvc2l0aW9uICosCiAgICAgICAgICAgICAgICAgIGZsb2F0ICoqLCBkb3VibGUgKiosIHVuc2ln bmVkIGNoYXIgKiosIGludCAqKiwgaW50ICoqLAogICAgICAgICAgICAgICAgICBpbnQgKiwgaW50 ICosIGludCAqLCBpbnQgKiwgZG91YmxlICosIGRvdWJsZSAqLCBUQm9vbCAqKTsKdm9pZCBSVENT U2ltQ2hpcCAoRklMRSAqLCBGSUxFICosIGZsb2F0ICosIGludCAsIGludCAqLCBpbnQsIGRvdWJs ZSwKICAgICAgICAgICAgICAgICAgTGluZVBvc2l0aW9uICosIGZsb2F0ICosIGRvdWJsZSAqLCB1 bnNpZ25lZCBjaGFyICosIGludCAqLCBpbnQgKiwKICAgICAgICAgICAgICAgICAgaW50ICwgaW50 LCBpbnQsIGludCwgZG91YmxlICwgZG91YmxlICwgUENJQ291bnRlciApOwp2b2lkIFJUQ1NDYWxT aGlmdFBhcmFsbGF4IChpbnQsIGludCwgZG91YmxlLCBkb3VibGUgKiwgZG91YmxlICosIGRvdWJs ZSwgZG91YmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKik7CnZvaWQgUlRD U0luaU1hcCAoRklMRSAqLCBpbnQsIExpbmVQb3NpdGlvbiAqLCBkb3VibGUgKiwgZG91YmxlICos IGludCAqLCBpbnQgKik7CnZvaWQgUlRDU0NhbGN1bGF0ZSAoR0VPSW5mb190ICosIEdFT0luZm9f dCAqLCBMaW5lUG9zaXRpb24gKiwgaW50LAogICAgICAgICAgICAgICAgICAgIFByb2pJbmZvX3Qg KiwKICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqLCBkb3Vi bGUgKiwgZG91YmxlICosCiAgICAgICAgICAgICAgICAgICAgaW50LCBpbnQpOwp2b2lkIFJUQ1NS TVNFcnJvciAoR0VPSW5mb190ICosIEdFT0luZm9fdCAqLCBMaW5lUG9zaXRpb24gKiwgaW50LCBp bnQsCiAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqLCBkb3Vi bGUgKiwgZG91YmxlICosCiAgICAgICAgICAgICAgICAgICBkb3VibGUgKiwgZG91YmxlICopOwp2 b2lkIFJUQ1NUcmFuc2Zvcm0gKEdFT0luZm9fdCAqLCBHRU9JbmZvX3QgKiwgTGluZVBvc2l0aW9u ICosIGludCwgZG91YmxlLAogICAgICAgICAgICAgICAgICAgIGRvdWJsZSwgZG91YmxlLCBkb3Vi bGUgKiwgZG91YmxlICopOwp2b2lkIFJUQ1NHZW9Ub0ltZyAoTGluZVBvc2l0aW9uICosIGludCwg ZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUgKiwgZG91YmxlICosCiAgICAgICAgICAgICAgICAg ICBkb3VibGUgKiwgaW50LCBpbnQsIGRvdWJsZSwgZG91YmxlLCBHRU9JbmZvX3QgKiwgR0VPSW5m b190ICopOwp2b2lkIFJUQ1NTaW1Ub0dlbyAoRklMRSAqLCBGSUxFICosIGludCwgaW50LCBMaW5l UG9zaXRpb24gKiwgaW50LCBkb3VibGUgKiwKICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqLCBk b3VibGUgKiwgZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUgKiwgZG91YmxlICosCiAgICAgICAg ICAgICAgICAgICBmbG9hdCAqLCBkb3VibGUgKiwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSk7ClRC b29sIFJUQ1NDYWxHZW9kZXRpY1Bvc2l0aW9uIChSVENTSW5mb190ICosIFRCb29sLCBkb3VibGUs IGRvdWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUs IGRvdWJsZSAqLCBkb3VibGUgKik7ClRCb29sIFJUQ1NDYWxHZW9kZXRpYyAoUlRDU0luZm9fdCAq LCBUQm9vbCwgZG91YmxlLCBkb3VibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRvdWJsZSwgZG91YmxlICosIGRvdWJsZSAqKTsKVEJvb2wgUlRDU0dlbzJJbWcgKFJUQ1NJbmZv X3QgKiwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkb3VibGUgKiwgZG91YmxlICopOwpSVENTSW5mb190ICpSVENTR2VuTW9kZWwgKEZJTEUgKiwg aW50LCBHQ1BJbmZvX3QgKik7CnZvaWQgUlRDU0ZyZWVNb2RlbCAoUlRDU0luZm9fdCAqKTsKY2hh ciAqIEN1dFN0cmluZyAoY2hhciAqLCBpbnQpOwpUQm9vbCBSVENTRGV0R2VvIChSVENTSW5mb190 ICosIFJUQ1NJbmZvX3QgKiwgZG91YmxlLCBkb3VibGUsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkb3VibGUsIGRvdWJsZSwgZG91YmxlICosIGRvdWJsZSAqLCBkb3VibGUgKik7CgoKCgoK CmludCBTcGVjUmVhZCAoRklMRSAqLCBpbnQsIGZsb2F0ICosaW50ICosaW50ICosaW50ICosZmxv YXQgKixpbnQpOwp2b2lkIFNwZWNXcml0ZSAoRklMRSAqLCBpbnQsZmxvYXQgKixpbnQsaW50LGlu dCxkb3VibGUsY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKixpbnQsdW5z aWduZWQgY2hhciAqKTsKIyA3MzAgIi4uLy4uLy4uL2xpYi9nZW8uaCIKdHlwZWRlZiBzdHJ1Y3QK ewogICAgaW50IG5EYXRhOwoKICAgIGRvdWJsZSAqcGRYRGF0YTsKICAgIGRvdWJsZSAqcGRZRGF0 YTsKICAgIGRvdWJsZSAqcGRaRGF0YTsKCiAgICBmbG9hdCAqcGZXZWlnaHRpbmc7CgogICAgZG91 YmxlICpwZEZEYXRhOwoKfURhdGFUdXBsZXQ7CgpUQm9vbCBTdXJmaXQoRGF0YVR1cGxldCAqcHNE YXRhLGludCBuRGVncmVlLFRCb29sIGJSb2J1c3QsZmxvYXQgZlN0ZHMsCiAgICAgICAgICAgICBk b3VibGUgKipwYXBkQ09FRiwgZG91YmxlICpwZEZpdCwKICAgICAgICAgICAgIGRvdWJsZSAqcGRS Uk1TLCBkb3VibGUgKnBkWlJNUyxUQm9vbCAqcGJGbGFncywKICAgICAgICAgICAgIGRvdWJsZSAq cGRYLCBkb3VibGUgKnBkWSxkb3VibGUgKnBkWixpbnQgbk51bSk7Cgp2b2lkIE1hcFRvU2ltcGxl T3JkZXIoaW50IG5PcmRlcixkb3VibGUgKipwYXBkQ09FRixkb3VibGUgKnBhZENPRUYpOwoKVEJv b2wgTWFwVG9SZWdyZXNzaW9uT3JkZXIoaW50IG5PcmRlcixkb3VibGUgKnBhcGRDT0VGLGRvdWJs ZSAqcGFkQ09FRik7CgpUQm9vbCBTdXJmaXRNYW5hZ2VyKCBEYXRhVHVwbGV0ICpwc0RhdGEsIFRC b29sIGJSb2J1c3QsZmxvYXQgZlN0ZHMsCiAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGZUb2xl cmFuY2UsIGludCBuU3RhcnREZWdyZWUsIGludCBuRW5kRGVncmVlLAogICAgICAgICAgICAgICAg ICAgICBkb3VibGUgKipwYXBkQ09FRiwgZG91YmxlICpwZEZpdCwKICAgICAgICAgICAgICAgICAg ICAgZG91YmxlICpwZFJSTVMsIGRvdWJsZSAqcGRaUk1TLFRCb29sICpwYkZsYWdzLAogICAgICAg ICAgICAgICAgICAgICBkb3VibGUgKnBkWCwgZG91YmxlICpwZFksZG91YmxlICpwZFosaW50IG5O dW0sCiAgICAgICAgICAgICAgICAgICAgIGludCAqcG5MYXN0RGVncmVlKTsKCgoKCnR5cGVkZWYg ZG91YmxlICgqVmVjQnVmZmVyUXVhbGlmeUZ1bmMpKCB2b2lkICosIEZJTEUgKiwgaW50LCBHREJT aGFwZSAqICk7Cgp0eXBlZGVmIHN0cnVjdCBWQkZPX3QKewogICAgRklMRSAqZnBWZWM7CiAgICBp bnQgbkRCVlNDb3VudDsKICAgIGludCAqcGFuREJWUzsKCiAgICBGSUxFICpmcFJhc3RlcjsKICAg IGludCBuREJPQjsKICAgIGludCBhbkRCT1dbNF07CgogICAgaW50IG5EQk9DOwoKICAgIFZlY0J1 ZmZlclF1YWxpZnlGdW5jIHBmblF1YWxpZnlGdW5jOwoKICAgIGRvdWJsZSBkRGVmYXVsdEJ1ZmZl clNpemU7CiAgICBkb3VibGUgZERlZmF1bHRCdXJuVmFsdWU7CgogICAgUENJQ291bnRlciBwZm5D b3VudGVyOwoKfSBWZWNCdWZmZXJPcHRpb25zX3Q7CgpUQm9vbCBWZWN0b3JCdWZmZXJUb1Jhc3Rl ciggVmVjQnVmZmVyT3B0aW9uc190ICogKTsKZG91YmxlIERlZmF1bHRWZWNCdWZmZXJRdWFsaWZ5 RnVuYyggdm9pZCAqLCBGSUxFICosIGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEdEQlNoYXBlICogKTsKdm9pZCBJbml0VmVjQnVmZmVyT3B0aW9ucyggVmVjQnVmZmVy T3B0aW9uc190ICogKTsKCgoKCnZvaWQgTWF0cml4TXVsdGlwbHkoIGRvdWJsZSAqLCBpbnQsIGlu dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqLCBpbnQsIGludCwg ZG91YmxlICopOwojIDgwNCAiLi4vLi4vLi4vbGliL2dlby5oIgplbnVtCnsKICAgIFRfRklSLAog ICAgVF9GTVAsCiAgICBUX0NPUywKICAgIFRfV0FMLAogICAgVF9IQUQsCiAgICBUX0hBUgp9OwoK CgoKZW51bQp7CiAgICBGX0NPTlQsCiAgICBGX1JEMlAsCiAgICBGX1ZESUYsCiAgICBGX0dTTFAs CiAgICBGX0dTSFAsCiAgICBGX0JXTFAsCiAgICBGX0JXSFAKfTsKCgoKCmVudW0KewogICAgUkFE X0ZfTk9ORSwKICAgIFJBRF9GX0JILAogICAgUkFEX0ZfQkwsCiAgICBSQURfRl9HSCwKICAgIFJB RF9GX0dMCn07CiMgODUzICIuLi8uLi8uLi9saWIvZ2VvLmgiCnR5cGVkZWYgc3RydWN0CnsKICAg IGludCBuRmlsdFR5cGU7CiAgICBmbG9hdCBmUGl4ZWxTaXplWDsKICAgIGZsb2F0IGZQaXhlbFNp emVZOwogICAgZmxvYXQgZkN1dE9mZjsKICAgIGludCBuRE9yZGVyOwogICAgZmxvYXQgZlpMZXZl bDsKICAgIGZsb2F0IHBmUmVnRmxkVmVjWzNdOwogICAgZmxvYXQgcGZTcmNGbGRWZWNbM107Cn0K RmlsdGVyUGFyYW1UeXBlOwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICAgIEZJTEUgKmZwSW47CiAg ICBGSUxFICpmcE91dDsKICAgIGludCBuQ2hhbm5lbHM7CiAgICBpbnQgKmFuREJJQzsKICAgIGlu dCAqYW5EQk9DOwogICAgaW50IG5OdW1CaXRtYXBzOwogICAgaW50ICphbkJOR0Y7CiAgICBpbnQg KmFuREJJVzsKICAgIGludCAqYW5EQk9XOwogICAgZmxvYXQgZkN1dE9mZjsKICAgIGludCBuQm9y ZGVyV2lkdGg7CiAgICBpbnQgbkZpbHRlclR5cGU7CiAgICBpbnQgblRmb3JtOwp9CkJNUEZpbHRQ YXJhbXNfdDsKCgoKCgoKVEJvb2wgQml0bWFwRmlsdGVyKEJNUEZpbHRQYXJhbXNfdCAqcHNQYXJh bXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1QUHJvZ3Jlc3NGdW5jIHBmbkNvdW50 ZXIsIHZvaWQqIHBDb3VudEFyZyk7Cgp2b2lkIEZGVDFEIChpbnQgblNpemUsIGRvdWJsZSAqcGRB cnJheSwgaW50IG5EaXIsIGRvdWJsZSAqcGRTaW5lLAogICAgICAgICAgICBkb3VibGUgKnBkQ29z bik7Cgp2b2lkIFdhbHNoMUQgKGludCBuU2l6ZSwgZG91YmxlICpwZEFycmF5LCBUQm9vbCBiQml0 UmV2KTsKCnZvaWQgQ29zaW5lMURGd2QgKGludCBuU2l6ZSwgZG91YmxlICpwZEFycmF5LCBkb3Vi bGUgKnBkU2luZSwKICAgICAgICAgICAgICAgICAgZG91YmxlICpwZENvc24sIGRvdWJsZSAqcGRT Y2FsKTsKCnZvaWQgQ29zaW5lMURJbnYgKGludCBuU2l6ZSwgZG91YmxlICpwZEFycmF5LCBkb3Vi bGUgKnBkU2luZSwKICAgICAgICAgICAgICAgICAgZG91YmxlICpwZENvc24sIGRvdWJsZSAqcGRT Y2FsKTsKCnZvaWQgVHJpZ1RhYmxlcyAoaW50IG5TaXplLCBkb3VibGUgKnBkU2luZSwgZG91Ymxl ICpwZENvc24pOwoKdm9pZCBDb3NTY2FsZVRhYmxlIChpbnQgblNpemUsIGRvdWJsZSAqcGRTY2Fs KTsKCmludCBOZXh0UG93ZXJPZlR3byAoaW50IG4pOwoKZG91YmxlIFBvd2VyTihkb3VibGUgZEJh c2UsIGludCBuT3JkZXIpOwoKRklMRSAqIEZGVERpc2tCdWZmZXIoY2hhciAqc3pCdWZGaWxlLCBp bnQgblNpemVYLCBpbnQgblNpemVZLCBpbnQgbkNoYW4pOwoKVEJvb2wgVHJhbnNmb3JtMkRGb3J3 YXJkKGludCBuVGZvcm0sIEZJTEUgKmZwSW4sIGludCAqZGJpYywgaW50ICpkYml3LAogICAgICAg ICAgICAgICAgICAgICAgICBGSUxFICpmcE91dCwgaW50ICpkYm9jLCBpbnQgKmRib3csCiAgICAg ICAgICAgICAgICAgICAgICAgIFRCb29sIGJaZXJvSW5DZW50ZXIsCiAgICAgICAgICAgICAgICAg ICAgICAgIElNUFByb2dyZXNzRnVuYyBwZm5Db3VudGVyLCB2b2lkKiBwQ291bnRBcmcpOwoKVEJv b2wgVHJhbnNmb3JtMkRJbnZlcnNlKGludCBuVGZvcm0sIEZJTEUgKmZwSW4sIGludCAqZGJpYywg aW50ICpkYml3LAogICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpmcE91dCwgaW50ICpkYm9j LCBpbnQgKmRib3csIGNoYXIgKmZpbGIsCiAgICAgICAgICAgICAgICAgICAgICAgIFRCb29sIGJa ZXJvSW5DZW50ZXIsIElNUFByb2dyZXNzRnVuYyBwZm5Db3VudGVyLAogICAgICAgICAgICAgICAg ICAgICAgICB2b2lkKiBwQ291bnRBcmcpOwoKVEJvb2wgRkZUMkRGb3J3YXJkKGludCBuVGZvcm0s IEZJTEUgKmZwSW4sIGludCAqZGJpYywgaW50ICpkYml3LAogICAgICAgICAgICAgICAgICBGSUxF ICpmcE91dCwgaW50ICpkYm9jLCBpbnQgKmRib3csIFRCb29sIGJaZXJvSW5DZW50ZXIsCiAgICAg ICAgICAgICAgICAgIElNUFByb2dyZXNzRnVuYyBwZm5Db3VudGVyLCB2b2lkKiBwQ291bnRBcmcp OwoKVEJvb2wgRkZUMkRJbnZlcnNlKGludCBuVGZvcm0sIEZJTEUgKmZwSW4sIGludCAqZGJpYywg aW50ICpkYml3LAogICAgICAgICAgICAgICAgICBGSUxFICpmcE91dCwgaW50ICpkYm9jLCBpbnQg KmRib3csIGNoYXIgKmZpbGIsCiAgICAgICAgICAgICAgICAgIFRCb29sIGJaZXJvSW5DZW50ZXIs IElNUFByb2dyZXNzRnVuYyBwZm5Db3VudGVyLAogICAgICAgICAgICAgICAgICB2b2lkKiBwQ291 bnRBcmcpOwoKVEJvb2wgRkZUQW5kRmlsdGVyKEZJTEUgKmZwSW4sIGludCAqZGJpYywgaW50ICpk Yml3LAogICAgICAgICAgICAgICAgICBGSUxFICpmcE91dCwgaW50ICpkYm9jLCBpbnQgKmRib3cs IGNoYXIgKmZpbGIsCiAgICAgICAgICAgICAgICAgIEZpbHRlclBhcmFtVHlwZSAqcHNQYXJhbSwg SU1QUHJvZ3Jlc3NGdW5jIHBmbkNvdW50ZXIsCiAgICAgICAgICAgICAgICAgIHZvaWQqIHBDb3Vu dEFyZyApOwoKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgICBUQm9vbCBiTG9hZGVkOwogICAgaW50 IG5YU2l6ZSwgbllTaXplOwogICAgdW5zaWduZWQgc2hvcnQgKnBuVW5pY29uSW1hZ2U7CiAgICBp bnQgbkltYWdlU2l6ZTsKICAgIGludCBuTWFza1NpemU7CiAgICBpbnQgbk9jY1NpemU7CiAgICBp bnQgbkxheWVyczsKICAgIGludCAqcG5DbGFzc1NpemU7CiAgICBpbnQgKnBuQ2xhc3NNYXNrOwog ICAgaW50ICpwbkNsYXNzT2NjOwogICAgaW50IG5Vbmljb247CiAgICBpbnQgKnBuVW5pY29uU2l6 ZTsKICAgIGludCAqcG5Vbmljb25NYXNrOwogICAgaW50ICpwblVuaWNvbk9jYzsKICAgIHVuc2ln bmVkIGNoYXIgKnBieUZpZWxkczsKICAgIGZsb2F0ICpwZkVzdDsKICAgIHNob3J0ICpwbk1hcDsK ICAgIGZsb2F0ICpwZk1ldHJpYzsKfQpTRElJbmZvVHlwZTsKCnR5cGVkZWYgc3RydWN0CnsKICAg IEZJTEUgKmZwR0RCOwogICAgRklMRSAqZnBCaXRtYXA7CiAgICBpbnQgbkNvdW50REJJQzsKICAg IGludCAqcG5EQklDOwogICAgaW50IG5YT2ZmLCBuWU9mZiwgblhTaXplLCBuWVNpemU7CiAgICBp bnQgbkNvdW50S09TTjsKICAgIGludCAqcG5LT1NOOwogICAgaW50IG5Db3VudFNBU047CiAgICBp bnQgKnBuU0FTTjsKfQpEaWdycFBhcmFtVHlwZTsKCnR5cGVkZWYgc3RydWN0CnsKICAgIEZJTEUg KmZwR0RCOwogICAgaW50IG5YT2ZmLCBuWU9mZiwgblhTaXplLCBuWVNpemU7CiAgICBpbnQgbkRC T0M7CiAgICBpbnQgbkFsZ29yaXRobTsKICAgIGZsb2F0IGZHYW1tYTsKfQpEaWVzdFBhcmFtVHlw ZTsKIyAxMDAyICIuLi8uLi8uLi9saWIvZ2VvLmgiCmVudW0KewogICAgU0RJX0NGLAogICAgU0RJ X1BfRElSLAogICAgU0RJX1BfQkFZLAogICAgU0RJX1BfUkVHLAogICAgU0RJX0ZfR0FNLAogICAg U0RJX0ZfU1VNLAogICAgU0RJX0ZfQVZFLAogICAgU0RJX0ZfTUFYLAogICAgU0RJX0ZfTUlOCn07 CiMgMTAyMyAiLi4vLi4vLi4vbGliL2dlby5oIgppbnQgU0RJR3JvdXBMYXllcnMoRGlncnBQYXJh bVR5cGUgKnBzRGlncnAsIFNESUluZm9UeXBlICpwc1NESUluZm8pOwp2b2lkIEZyZWVTRElJbmZv KFNESUluZm9UeXBlICpwc1NESUluZm8pOwp2b2lkIEluaXRTRElJbmZvKFNESUluZm9UeXBlICpw c1NESUluZm8pOwp2b2lkIFNESUVzdEFsZ28oU0RJSW5mb1R5cGUgKnBzU0RJSW5mbywgaW50IG5B bGdvLCBmbG9hdCBmR2FtbWEpOwp2b2lkIFNESUVzdGltYXRpb24oRGllc3RQYXJhbVR5cGUgKnBz RGllc3QsIFNESUluZm9UeXBlICpwc1NESUluZm8pOwoKCgoKdm9pZCBMYWJlbFJlZ2lvbihpbnQg blhTaXplLCBpbnQgbllTaXplLCB1bnNpZ25lZCBjaGFyICpwYnlJbWFnZSwgaW50IG5DbGFzcywK ICAgICAgICAgICAgICAgICBUQm9vbCBiUmFuZG9tKTsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAg ICBpbnQgbkdyYWRpZW50OwogICAgaW50IG5DdXJ2ZUxlbjE7CiAgICBpbnQgbkN1cnZlTGVuMjsK ICAgIGludCBuRml0dGluZzsKICAgIGZsb2F0IGZDb3NCZW5kQW5nbGU7CiAgICBpbnQgblJhbmdl Owp9IEVDUGFyYW1UeXBlOwoKdm9pZCBTa2VsZXRvbihpbnQgblhTaXplLCBpbnQgbllTaXplLCB1 bnNpZ25lZCBjaGFyICpwYnlQaXgpOwp2b2lkIEN1dEJyYW5jaChpbnQgblhTaXplLCBpbnQgbllT aXplLCB1bnNpZ25lZCBjaGFyICpwYnlQaXgpOwp2b2lkIEZpbmRQaXhlbEN1cnZlcyhpbnQgblhT aXplLCBpbnQgbllTaXplLCB1bnNpZ25lZCBjaGFyICpwYnlQaXgsCiAgICAgICAgICAgICAgICAg ICB2b2lkICgqcGZuUHJvY0N1cnZlKShpbnQsaW50KixpbnQqKSk7CgpUQm9vbCBFeHRyYWN0Q3Vy dmVzKGludCBuUGl4ZWxzLCBpbnQgbkxpbmVzLCB1bnNpZ25lZCBjaGFyICpwYnlQaXgsCiAgICAg ICAgICAgICAgICAgICBFQ1BhcmFtVHlwZSAqcHNQYXJhbXMsCiAgICAgICAgICAgICAgICAgICB2 b2lkICgqcGZuU2F2ZVZlY3RvcikoaW50LGludCosaW50KiksCiAgICAgICAgICAgICAgICAgICBJ TVBQcm9ncmVzc0Z1bmMgcGZuQ291bnRlciwgdm9pZCogcENvdW50QXJnKTsKClRCb29sIENhbm55 RWRnZShpbnQgblhTaXplLCBpbnQgbllTaXplLCB1bnNpZ25lZCBjaGFyICpwYnlJbWFnZSwgaW50 IG5SYWRpdXMsCiAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwYnlHcmFk RGlyLCBJTVBQcm9ncmVzc0Z1bmMgcGZuQ291bnRlciwKICAgICAgICAgICAgICAgICAgICAgICAg IHZvaWQqIHBDb3VudEFyZyk7CgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgICBGSUxFICpmcEluOwog ICAgRklMRSAqZnBPdXQ7CiAgICBpbnQgKmRiaWM7CiAgICBpbnQgKmRib2M7CiAgICBpbnQgKnRl eHR1cmU7CiAgICBpbnQgbk1lYXM7CiAgICBpbnQgblhJbk9mZiwgbllJbk9mZiwgblhPdXRPZmYs IG5ZT3V0T2ZmLCBuWFNpemUsIG5ZU2l6ZTsKICAgIGludCBuRmxzelgsIG5GbHN6WTsKICAgIGlu dCBuU3BhdFgsIG5TcGF0WTsKICAgIFRCb29sIGJEaXJJbnY7Cn0KVGV4dHVyZVBhcmFtVHlwZTsK CgoKVEJvb2wgVGV4dHVyZU1lYXN1cmVzKFRleHR1cmVQYXJhbVR5cGUgKnBzUGFyYW1zLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNUFByb2dyZXNzRnVuYyBwZm5Db3VudGVyLHZv aWQqIHBDb3VudEFyZyk7CgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgICBpbnQgblR5cGU7CiAgICBG SUxFICpmcEluOwogICAgRklMRSAqZnBPdXQ7CiAgICBGSUxFICpmcE1hc2s7CiAgICBpbnQgZGJp YzsKICAgIGludCBkYm9jOwogICAgaW50IG1hc2s7CiAgICBpbnQgblhTaXplLCBuWVNpemU7CiAg ICBpbnQgblhJbk9mZiwgbllJbk9mZjsKICAgIGludCBuWE91dE9mZiwgbllPdXRPZmY7CiAgICBp bnQgblhXaW4sIG5ZV2luOwogICAgaW50IG5Gb3JtYXQ7CiAgICBmbG9hdCBmTkxvb2tzOwogICAg ZmxvYXQgZkRhbXA7CiAgICBmbG9hdCBmQ29udG91cjsKICAgIGZsb2F0IGZHcmFkaWVudDsKCgp9 ClNwY0ZsdFBhcmFtVHlwZTsKCmVudW0KewogICAgU0FSX0xFRSwKICAgIFNBUl9LVUFOLAogICAg U0FSX0ZST1NULAogICAgU0FSX0VMRUUsCiAgICBTQVJfRUZST1NULAogICAgU0FSX0dBTU1BLAog ICAgU0FSX0xBUExBQ0lBTiwKICAgIFNBUl9UT1VaSSwKICAgIFNBUl9TVERERVYsCiAgICBTQVJf QVZFUkFHRQp9OwoKVEJvb2wgU0FSU3BlY2tsZUZpbHRlcihTcGNGbHRQYXJhbVR5cGUgKnBzUGFy YW1zLCBJTVBQcm9ncmVzc0Z1bmMgcGZuQ291bnRlciwgdm9pZCAqcENvdW50QXJnKTsKCgoKCnZv aWQgU2FtcGxlSGlzdG9ncmFtKEZJTEUgKmZwR0RCLCBpbnQgbkRCSUMsIGludCAqZGJpdywgaW50 IG5IaXNTYW1wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgKnBmUGVyY2Vu dGlsZSk7Cgp2b2lkIFNjYWxpbmdUYWJsZShGSUxFICpmcEdEQiwgaW50IG5EQklDLCBpbnQgKmRi aXcsIGludCBuUmFuZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbk1ldGhvZCwg ZmxvYXQgKnBmTGV2ZWwpOwoKaW50IFNjYWxpbmdMb29rdXAoaW50IG5SYW5nZSwgZmxvYXQgKnBm TGV2ZWwsIGZsb2F0IGZQaXgpOwoKCnR5cGVkZWYgc3RydWN0CnsKICBGSUxFICogZnBfaW47CiAg RklMRSAqIGZwX291dDsKICBpbnQgbkluQ2hhbm5lbDsKICBpbnQgbk91dENoYW5uZWw7CgogIGRv dWJsZSBkZkxYOwogIGRvdWJsZSBkZkxZOwogIGRvdWJsZSBkZkxaOwoKICBmbG9hdCBmQWFuZzsK ICBmbG9hdCBmRWFuZzsKCiAgZG91YmxlIGRmRUxTWjsKICBkb3VibGUgZGZDb3NaUzsKICBkb3Vi bGUgZGZEWDsKICBkb3VibGUgZGZEWTsKCiAgZmxvYXQgKiBwZk9uZTsKICBmbG9hdCAqIHBmVHdv OwogIGZsb2F0ICogcGZUaHJlZTsKICBmbG9hdCAqIHBmTGVmdDsKICBmbG9hdCAqIHBmUmlnaHQ7 CiAgZmxvYXQgKiBwZlRvcDsKICBmbG9hdCAqIHBmQm90dG9tOwogIGZsb2F0ICogcGZDZW50ZXI7 CiAgZmxvYXQgKiBwZlJldHVybjsKICBpbnQgbkxpbmVzOwogIGludCBuUGl4ZWxzOwogIGludCBu SW5YT2ZmOwogIGludCBuSW5ZT2ZmOwogIGludCBuT3V0WE9mZjsKICBpbnQgbk91dFlPZmY7Cgp9 IFNoYWRvd190OwoKVEJvb2wgU2hhZG93Q2FzdCggU2hhZG93X3QgKiBwc1NoYWRvdywgSU1QUHJv Z3Jlc3NGdW5jIHBmbkNvdW50ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBw Q291bnRBcmcpOwoKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgICAgICAgRklMRSAqZnBJbjsKICAg ICAgICBGSUxFICpmcE91dDsKICAgICAgICBpbnQgbkRiaWM7CiAgICAgICAgaW50IG5EYml2Owog ICAgICAgIGludCBuU2hhcGU7CiAgICAgICAgaW50IG5PdXRWZXJ0ZXhDb3VudDsKICAgICAgICBp bnQgbk1heFZlcnRpY2VzOwoKICAgICAgICBHREJWZXJ0ZXggKiBwYXNPdXRWZXJ0aWNlczsKCgoK CiAgICAgICAgR0RCTGF5ZXIgc2VJbnBMYXllcjsKICAgICAgICBHREJTaGFwZUlkIHNlSW5wU2hh cGVJZDsKICAgICAgICBHREJWZXJ0ZXggc2VJbnBWZXJ0ZXg7CiAgICAgICAgaW50IG5NYXhWZXJ0 OwoKCgoKICAgICAgICBkb3VibGUgYWRmRGlwWzJdOwoKICAgICAgICBHREJMYXllciBzZU91dExh eWVyOwoKICAgICAgICBmbG9hdCBmQmFja1ZhbDsKICAgICAgICBmbG9hdCBmUmFkaXVzOwogICAg ICAgIGludCBhbkRiaXdbNF07CiAgICAgICAgZG91YmxlIGRmQTEsIGRmQTIsIGRmQjEsIGRmQjM7 CiAgICAgICAgVEJvb2wgYlJhZGl1czsKICAgICAgICBUQm9vbCBiRGlwOwp9CkNvbnRFeHRQYXJh bVR5cGU7CgpUQm9vbCBDb250YWN0RXh0ZW5zaW9uKENvbnRFeHRQYXJhbVR5cGUgKnBzUGFyYW1z LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSUNvdW50ZXIgcGZuQ291bnRlcik7 ClRCb29sIENoZWNrRm9yU2hhcGUoQ29udEV4dFBhcmFtVHlwZSAqcHNQYXJhbXMpOwoKdm9pZCBV bml0MlBpeGVsIChDb250RXh0UGFyYW1UeXBlICpwc1BhcmFtcywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgZG91YmxlICpwZGZYVW5pdCwgZG91YmxlICpwZGZZVW5pdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgZG91YmxlICpwZGZYUGl4ZWwsIGRvdWJsZSAqcGRmWVBpeGVsLAogICAg ICAgICAgICAgICAgICAgICAgICAgICBUQm9vbCBiVG9QaXhlbCk7Cgp9CiMgMjQ0ICIuLi8uLi8u Li9saWIvcGNpLmgiIDIKIyA2OSAiLi4vLi4vLi4vbGliL3BjbC5oaCIgMgojIDEwMCAiLi4vLi4v Li4vbGliL3BjbC5oaCIKdm9pZCAqIG9wZXJhdG9yIG5ldyhzaXplX3QsIGNoYXIgKiwgaW50KTsK dm9pZCBEZWxldGVTZXR1cChjaGFyICosaW50KTsKCmNoYXIgKiBHZXREZWxldGVGaWxlKHZvaWQp OwppbnQgR2V0RGVsZXRlTGluZSh2b2lkKTsKIyAxMzYgIi4uLy4uLy4uL2xpYi9wY2wuaGgiCnR5 cGVkZWYgZW51bSB7IGtleVN0cmluZywga2V5SW50LCBrZXlJbnZhbGlkIH0gS2V5VHlwZTsKCmNs YXNzIFBDTEtleQp7CnByaXZhdGU6CiAgICBLZXlUeXBlIHR5cGU7CiAgICB1bmlvbgogICAgewog ICAgICAgIGNvbnN0IGNoYXIgKnM7CiAgICAgICAgaW50IGk7CiAgICB9IHU7CgpwdWJsaWM6CiAg ICBQQ0xLZXkoKTsKICAgIFBDTEtleShjb25zdCBQQ0xLZXkgJik7CiAgICBQQ0xLZXkoY29uc3Qg Y2hhciAqKTsKICAgIFBDTEtleShpbnQpOwogICAgflBDTEtleSgpOwoKCiAgICBpbnQgY29tcGFy ZShjb25zdCBjaGFyICopIGNvbnN0OwogICAgaW50IGNvbXBhcmUoaW50KSBjb25zdDsKICAgIGlu dCBjb21wYXJlKGNvbnN0IFBDTEtleSAmKSBjb25zdDsKfTsKIyAxNjggIi4uLy4uLy4uL2xpYi9w Y2wuaGgiCmNsYXNzIFBDTE9iamVjdAp7CiAgcHVibGljOgogICAgaW5saW5lIFBDTE9iamVjdCgg UENMT2JqZWN0IGNvbnN0ICYpIHt9CgogICAgICAgICAgICAgICAgICAgICAgICBQQ0xPYmplY3Qo KSB7fTsKICAgIHZpcnR1YWwgflBDTE9iamVjdCgpIHt9OwoKICAgIHZpcnR1YWwgVEJvb2wgVmFs aWRhdGUoIHZvaWQgKSBjb25zdCB7IHJldHVybiAxOyB9CgogICAgdmlydHVhbCB2b2lkIER1bXAo IEZJTEUgKiApIGNvbnN0OwogICAgdmlydHVhbCBjb25zdCBjaGFyICpHZXRDbGFzc05hbWUoKSBj b25zdCA9IDA7CiAgICB2aXJ0dWFsIGludCBDb21wYXJlKGNvbnN0IFBDTEtleSAmKSBjb25zdCB7 IHJldHVybiggMCApOyB9CiAgICB2aXJ0dWFsIGludCBDb21wYXJlKGNoYXIgKikgY29uc3QgeyBy ZXR1cm4oIDAgKTsgfQogICAgdmlydHVhbCBpbnQgQ29tcGFyZShpbnQgKikgY29uc3QgeyByZXR1 cm4oIDAgKTsgfQogICAgdmlydHVhbCBjb25zdCBQQ0xLZXkgS2V5KCkgY29uc3QgeyBQQ0xLZXkg YTsgcmV0dXJuKGEpOyB9Cn07Cgp0eXBlZGVmIFBDTE9iamVjdCAqIFBDTE9iamVjdFB0cjsKIyAy MDAgIi4uLy4uLy4uL2xpYi9wY2wuaGgiCmNsYXNzIFBDTEl0ZXI7CgpjbGFzcyBQQ0xDb250YWlu ZXIgOiBwdWJsaWMgUENMT2JqZWN0CnsKCiAgICBmcmllbmQgY2xhc3MgUENMSXRlcjsKCiAgICB2 aXJ0dWFsIFBDTE9iamVjdCAqIFN0YXJ0KCBQQ0xJdGVyICogKSBjb25zdCA9IDA7CiAgICB2aXJ0 dWFsIFBDTE9iamVjdCAqIE5leHQoIFBDTEl0ZXIgKiApIGNvbnN0ID0gMDsKICAgIHZpcnR1YWwg dm9pZCBEZXN0cm95SXRlcmF0b3IoIFBDTEl0ZXIgKiApIGNvbnN0IHt9Cgpwcm90ZWN0ZWQ6CiAg ICBpbnQgbkNvdW50OwoKcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICBQQ0xDb250YWlu ZXIoKSB7IG5Db3VudCA9IDA7IH0KCiAgICAgICAgICAgIFRCb29sIElzRW1wdHkoIHZvaWQgKSBj b25zdCB7IHJldHVybiggbkNvdW50ID09IDAgKTsgfQogICAgICAgICAgICBpbnQgR2V0Q291bnQo IHZvaWQgKSBjb25zdCB7IHJldHVybiggbkNvdW50ICk7IH0KCiAgICB2aXJ0dWFsIFRCb29sIElz TWVtYmVyKCBjb25zdCBQQ0xPYmplY3QgKiApID0gMDsKICAgIHZpcnR1YWwgdm9pZCBBZGQoIFBD TE9iamVjdCAqICkgPSAwOwogICAgdmlydHVhbCBUQm9vbCBSZW1vdmUoIGNvbnN0IFBDTE9iamVj dCAqICkgPSAwOwoKICAgIHZvaWQgQWRkQ29udGFpbmVyKCBjb25zdCBQQ0xDb250YWluZXIgKiAp OwogICAgdm9pZCBEZXN0cm95Q29udGVudHMoKTsKCiAgICB2aXJ0dWFsIHZvaWQgRHVtcCggRklM RSAqZnAgKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBFbXB0eSggdm9pZCApOwogICAgdmlydHVh bCBUQm9vbCBWYWxpZGF0ZSggdm9pZCApIGNvbnN0Owp9OwojIDIzOSAiLi4vLi4vLi4vbGliL3Bj bC5oaCIKY2xhc3MgUENMSXRlciA6IHB1YmxpYyBQQ0xPYmplY3QKewogICAgZnJpZW5kIGNsYXNz IFBDTENvbnRhaW5lcjsKCiAgICBjb25zdCBQQ0xDb250YWluZXIgKnBvQ29udGFpbmVyOwogICAg UENMT2JqZWN0ICogcG9DdXJyZW50T2JqZWN0OwoKcHVibGljOgogICAgdm9pZCAqIHBTdGF0ZTsK CiAgICAgICAgICAgICAgICAgICAgICAgIFBDTEl0ZXIoIGNvbnN0IFBDTENvbnRhaW5lciAqICk7 CiAgICAgICAgICAgICAgICAgICAgICAgIFBDTEl0ZXIoKTsKCiAgICB2aXJ0dWFsIH5QQ0xJdGVy KCk7CiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIgKiBHZXRDbGFzc05hbWUoIHZvaWQgKSBjb25zdDsK CiAgICB2b2lkIFNldFRhcmdldCggY29uc3QgUENMQ29udGFpbmVyICogKTsKCiAgICBQQ0xPYmpl Y3QgKiBTdGFydCggY29uc3QgUENMQ29udGFpbmVyICogPSAwICk7CiAgICBQQ0xPYmplY3QgKiBO ZXh0KCk7CiAgICBQQ0xPYmplY3QgKiBDdXJyZW50KCkgY29uc3Q7Cn07CiMgMjcxICIuLi8uLi8u Li9saWIvcGNsLmhoIgpjbGFzcyBQQ0xUcmVlIDogcHVibGljIFBDTENvbnRhaW5lcgp7CiAgICBj bGFzcyBQQ0xUcmVlTm9kZQogICAgewoKCiAgICBwdWJsaWM6CiAgICAgICAgUENMVHJlZU5vZGUg KiBwb0xlZnQ7CiAgICAgICAgUENMVHJlZU5vZGUgKiBwb1JpZ2h0OwogICAgICAgIFBDTFRyZWVO b2RlICogcG9QYXJlbnQ7CiAgICAgICAgUENMT2JqZWN0ICogcG9EYXRhOwoKICAgICAgICAgICAg ICAgICAgICAgICAgUENMVHJlZU5vZGUoIFBDTE9iamVjdCAqcG9EYXRhICk7CiAgICAgICAgICAg ICAgICAgICAgICAgIH5QQ0xUcmVlTm9kZSggdm9pZCApOwoKICAgICAgICB2b2lkIER1bXAoIEZJ TEUgKmZwICkgY29uc3Q7CgogICAgICAgIFBDTFRyZWVOb2RlICogRmluZCggY29uc3QgUENMT2Jq ZWN0ICogKTsKICAgIH07CgogICAgUENMVHJlZU5vZGUgKnBvUm9vdDsKCiAgICB2aXJ0dWFsIFBD TE9iamVjdCAqIFN0YXJ0KCBQQ0xJdGVyICogKSBjb25zdDsKICAgIHZpcnR1YWwgUENMT2JqZWN0 ICogTmV4dCggUENMSXRlciAqICkgY29uc3Q7CgpwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg ICAgIFBDTFRyZWUgKHZvaWQpOwogICAgdmlydHVhbCB+UENMVHJlZSAodm9pZCk7CgogICAgdmly dHVhbCBjb25zdCBjaGFyICogR2V0Q2xhc3NOYW1lKCB2b2lkICkgY29uc3QgeyByZXR1cm4oICJQ Q0xUcmVlIiApOyB9CgogICAgdmlydHVhbCBUQm9vbCBJc01lbWJlciggY29uc3QgUENMT2JqZWN0 ICogKTsKICAgIHZpcnR1YWwgdm9pZCBBZGQoIFBDTE9iamVjdCAqICk7CiAgICB2aXJ0dWFsIFRC b29sIFJlbW92ZSggY29uc3QgUENMT2JqZWN0ICogKTsKCiAgICB2aXJ0dWFsIHZvaWQgRHVtcCgg RklMRSAqZnAgKSBjb25zdDsKfTsKIyAzMTYgIi4uLy4uLy4uL2xpYi9wY2wuaGgiCmNsYXNzIFBD TEFycmF5IDogcHVibGljIFBDTENvbnRhaW5lcgp7CiAgcHJvdGVjdGVkOgogICAgaW50IG5BcnJh eVNpemU7CiAgICBpbnQgbkFycmF5VXNlZDsKICAgIFBDTE9iamVjdCAqKiBwYXBvT2JqZWN0QXJy YXk7CgogICAgdmlydHVhbCBQQ0xPYmplY3QgKiBTdGFydCggUENMSXRlciAqICkgY29uc3Q7CiAg ICB2aXJ0dWFsIFBDTE9iamVjdCAqIE5leHQoIFBDTEl0ZXIgKiApIGNvbnN0OwoKICAgIHZvaWQg RXhwYW5kVG9Ib2xkKCBpbnQgbk1heCApOwoKcHVibGljOgogICAgICAgICAgICAgICAgICAgICAg ICBQQ0xBcnJheSAodm9pZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIFBDTEFycmF5KCBQQ0xD b250YWluZXIgKiApOwogICAgUENMQXJyYXkgJiBvcGVyYXRvciA9IChjb25zdCBQQ0xBcnJheSAm KTsKCiAgICB2aXJ0dWFsIH5QQ0xBcnJheSAodm9pZCk7CiAgICBQQ0xPYmplY3QgKiBvcGVyYXRv cltdIChpbnQgbkluZGV4KSBjb25zdDsKICAgIHZvaWQgU2V0QXQoIGludCBuSW5kZXgsIFBDTE9i amVjdCAqIHBvT2JqZWN0ICk7CiAgICBpbnQgR2V0TWF4SW5kZXgoKSBjb25zdDsKICAgIHZvaWQg UGFjaygpOwogICAgdm9pZCBTb3J0KFFTQ01QKTsKICAgIHZvaWQgU3RhbmRhcnRTb3J0KFFTQ01Q KTsKICAgIHZvaWQgSW5zZXJ0QXQoIGludCBuSW5kZXgsIFBDTE9iamVjdCAqIHBvT2JqZWN0ICk7 CiAgICBpbnQgR2V0SW5kZXgoIFBDTE9iamVjdCAqIHBvT2JqZWN0ICk7CgogICAgdm9pZCBSZXZl cnNlKCB2b2lkICk7CgoKICAgIHZpcnR1YWwgVEJvb2wgSXNNZW1iZXIoIGNvbnN0IFBDTE9iamVj dCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgQWRkKCBQQ0xPYmplY3QgKiApOwogICAgdmlydHVhbCBU Qm9vbCBSZW1vdmUoIGNvbnN0IFBDTE9iamVjdCAqICk7CgoKICAgIHZpcnR1YWwgdm9pZCBEdW1w KCBGSUxFICogKSBjb25zdDsKICAgIHZpcnR1YWwgY29uc3QgY2hhciAqR2V0Q2xhc3NOYW1lKCB2 b2lkICkgY29uc3Q7CgogICAgdmlydHVhbCB2b2lkIEVtcHR5KCB2b2lkICk7CiAgICB2aXJ0dWFs IHZvaWQgRGVzdHJveUNvbnRlbnRzKCk7Cn07CgpjbGFzcyBQQ0xQYWNrZWRBcnJheSA6IHB1Ymxp YyBQQ0xBcnJheQp7CiAgcHVibGljOgogIFBDTFBhY2tlZEFycmF5ICh2b2lkKTpQQ0xBcnJheSgp IHsgfQogIFBDTFBhY2tlZEFycmF5KCBQQ0xDb250YWluZXIgKiBwb0NvbnRhaW5lcik6UENMQXJy YXkocG9Db250YWluZXIpIHsgfQoKICB2aXJ0dWFsIFRCb29sIFJlbW92ZSggY29uc3QgUENMT2Jq ZWN0ICogKTsKCiAgdmlydHVhbCBjb25zdCBjaGFyICpHZXRDbGFzc05hbWUoIHZvaWQgKSBjb25z dCB7IHJldHVybiAiUENMUGFja2VkQXJyYXkiOyB9Cn07CgoKCgoKCgpjbGFzcyBQQ0xCYWcgOiBw dWJsaWMgUENMQ29udGFpbmVyCnsKICAgIGludCBuT2JqZWN0Q291bnQ7CiAgICBpbnQgbk9iamVj dE1heDsKICAgIFBDTE9iamVjdCAqKiBwYXBvT2JqZWN0QXJyYXk7CgogICAgdmlydHVhbCBQQ0xP YmplY3QgKiBTdGFydCggUENMSXRlciAqICkgY29uc3Q7CiAgICB2aXJ0dWFsIFBDTE9iamVjdCAq IE5leHQoIFBDTEl0ZXIgKiApIGNvbnN0OwoKcHVibGljOgogICAgICAgICAgICAgICAgICAgICAg ICBQQ0xCYWcgKHZvaWQpOwogICAgICAgICAgICAgICAgICAgICAgICBQQ0xCYWcoIFBDTENvbnRh aW5lciAqICk7CiAgICB2aXJ0dWFsIH5QQ0xCYWcgKHZvaWQpOwoKICAgIHZpcnR1YWwgVEJvb2wg SXNNZW1iZXIoIGNvbnN0IFBDTE9iamVjdCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgQWRkKCBQQ0xP YmplY3QgKiApOwogICAgdmlydHVhbCBUQm9vbCBSZW1vdmUoIGNvbnN0IFBDTE9iamVjdCAqICk7 CiAgICB2aXJ0dWFsIHZvaWQgRW1wdHkoIHZvaWQgKTsKCiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIg KkdldENsYXNzTmFtZSggdm9pZCApIGNvbnN0Owp9OwoKCgoKCgoKY2xhc3MgUENMTGlzdE5vZGUK ewpwdWJsaWM6CgogICAgUENMT2JqZWN0KiBwb09iamVjdDsKICAgIFBDTExpc3ROb2RlKiBwb05l eHQ7CiAgICBQQ0xMaXN0Tm9kZSogcG9QcmV2Owp9OwojIDQxOSAiLi4vLi4vLi4vbGliL3BjbC5o aCIKY2xhc3MgUENMTGlua2VkTGlzdCA6IHB1YmxpYyBQQ0xDb250YWluZXIKewoKcHVibGljOgoK ICAgIFBDTExpbmtlZExpc3QgKHZvaWQpOwogICAgdmlydHVhbCB+UENMTGlua2VkTGlzdCAodm9p ZCk7CgogICAgUENMTGlzdE5vZGUqIEZpbmQoY29uc3QgUENMT2JqZWN0KiBwb09iamVjdCk7CiAg ICB2b2lkIEluc2VydChQQ0xPYmplY3QqIHBvT2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQQ0xMaXN0Tm9kZSogcG9Ob2RlKTsKICAgIHZvaWQgUmVtb3ZlKFBD TExpc3ROb2RlKiBwb05vZGUpOwogICAgdm9pZCBEZXN0cm95Q29udGVudHModm9pZCk7CgogICAg dm9pZCBBcHBlbmQoUENMT2JqZWN0KiBwb09iamVjdCkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB7IEluc2VydChwb09iamVjdCwgRW5kTm9kZSgpKTsgfQoKICAgIHZvaWQgUHJlcGVu ZChQQ0xPYmplY3QqIHBvT2JqZWN0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsg SW5zZXJ0KHBvT2JqZWN0LCBTdGFydE5vZGUoKSk7IH0KCiAgICBQQ0xMaXN0Tm9kZSogU3RhcnRO b2RlKHZvaWQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gcG9IZWFk LT5wb05leHQ7IH0KCiAgICBQQ0xMaXN0Tm9kZSogRW5kTm9kZSh2b2lkKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIHBvSGVhZDsgfQoKCiAgICB2aXJ0dWFsIFRCb29s IElzTWVtYmVyKGNvbnN0IFBDTE9iamVjdCogcG9PYmplY3QpOwogICAgdmlydHVhbCB2b2lkIEFk ZChQQ0xPYmplY3QqIHBvT2JqZWN0KTsKICAgIHZpcnR1YWwgVEJvb2wgUmVtb3ZlKGNvbnN0IFBD TE9iamVjdCogcG9PYmplY3QpOwogICAgdmlydHVhbCB2b2lkIEVtcHR5KHZvaWQpOwoKCiAgICB2 aXJ0dWFsIHZvaWQgRHVtcChGSUxFKiBmcCkgY29uc3Q7CgogICAgdmlydHVhbCBjb25zdCBjaGFy KiBHZXRDbGFzc05hbWUoIHZvaWQgKSBjb25zdAogICAgewogICAgICAgIHJldHVybiggIlBDTExp bmtlZExpc3QiICk7CiAgICB9Cgpwcml2YXRlOgoKICAgIHZpcnR1YWwgUENMT2JqZWN0ICogU3Rh cnQoIFBDTEl0ZXIgKiApIGNvbnN0OwogICAgdmlydHVhbCBQQ0xPYmplY3QgKiBOZXh0KCBQQ0xJ dGVyICogKSBjb25zdDsKCiAgICBQQ0xMaXN0Tm9kZSogcG9IZWFkOwp9OwojIDQ4MCAiLi4vLi4v Li4vbGliL3BjbC5oaCIKY2xhc3MgUENMU3RyaW5nCnsKCnB1YmxpYzoKCgoKCiAgICBQQ0xTdHJp bmcgKHZvaWQpOwogICAgUENMU3RyaW5nIChjb25zdCBQQ0xTdHJpbmcmIG9TcmNTdHJpbmcpOwog ICAgUENMU3RyaW5nIChjaGFyIGNoU3JjRGF0YSwgaW50IG5SZXBlYXQgPSAxKTsKICAgIFBDTFN0 cmluZyAoY29uc3QgY2hhciogcHN6U3JjRGF0YSk7CiAgICBQQ0xTdHJpbmcgKGNvbnN0IGNoYXIq IHBhY2hTcmNEYXRhLCBpbnQgbkxlbmd0aCk7CgogICAgflBDTFN0cmluZyAodm9pZCk7CgogICAg Y2hhciAqR2V0QnVmZmVyUmVmKCkge3JldHVybihwc3pEYXRhKTt9CgoKCgogICAgaW50IEdldExl bmd0aCAodm9pZCkgY29uc3Q7CiAgICB2b2lkIFNldExlbmd0aCAoaW50IG5MZW5ndGgpOwogICAg aW50IElzRW1wdHkgKHZvaWQpIGNvbnN0OwogICAgdm9pZCBFbXB0eSAodm9pZCk7CiAgICBjaGFy IEdldEF0IChpbnQgbkluZGV4KSBjb25zdDsKICAgIHZvaWQgU2V0QXQgKGludCBuSW5kZXgsIGNo YXIgY2hTcmNEYXRhKTsKICAgIGNoYXImIG9wZXJhdG9yW10gKGludCBuSW5kZXgpOwoKICAgIGNo YXIgb3BlcmF0b3JbXSAoaW50IG5JbmRleCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgY2hh ciogKHZvaWQpIGNvbnN0OwoKCgoKICAgIGNvbnN0IFBDTFN0cmluZyYgb3BlcmF0b3I9IChjb25z dCBQQ0xTdHJpbmcmIG9FcXVTdHJpbmcpOwogICAgY29uc3QgUENMU3RyaW5nJiBvcGVyYXRvcj0g KGNvbnN0IGNoYXIqIHBzekVxdURhdGEpOwogICAgY29uc3QgUENMU3RyaW5nJiBvcGVyYXRvcj0g KGNoYXIgY2hFcXVEYXRhKTsKCiAgICB2b2lkIEZvcm1hdCAoY29uc3QgY2hhciogcHN6Rm9ybWF0 LCAuLi4gKTsKCgoKCiAgICBmcmllbmQgUENMU3RyaW5nCiAgICAgICAgb3BlcmF0b3IrIChjb25z dCBQQ0xTdHJpbmcmIG9TcmNTdHJpbmcxLAogICAgICAgICAgICAgICAgICAgY29uc3QgUENMU3Ry aW5nJiBvU3JjU3RyaW5nMik7CiAgICBmcmllbmQgUENMU3RyaW5nCiAgICAgICAgb3BlcmF0b3Ir IChjb25zdCBQQ0xTdHJpbmcmIG9TcmNTdHJpbmcsIGNoYXIgY2hTcmNEYXRhKTsKICAgIGZyaWVu ZCBQQ0xTdHJpbmcKICAgICAgICBvcGVyYXRvcisgKGNoYXIgY2hTcmNEYXRhLCBjb25zdCBQQ0xT dHJpbmcmIG9TcmNTdHJpbmcpOwogICAgZnJpZW5kIFBDTFN0cmluZwogICAgICAgIG9wZXJhdG9y KyAoY29uc3QgUENMU3RyaW5nJiBvU3JjU3RyaW5nLAogICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhciogcHN6U3JjRGF0YSk7CiAgICBmcmllbmQgUENMU3RyaW5nCiAgICAgICAgb3BlcmF0b3Ir IChjb25zdCBjaGFyKiBwc3pTcmNEYXRhLAogICAgICAgICAgICAgICAgICAgY29uc3QgUENMU3Ry aW5nJiBvU3JjU3RyaW5nKTsKCiAgICBjb25zdCBQQ0xTdHJpbmcmIG9wZXJhdG9yKz0gKGNvbnN0 IFBDTFN0cmluZyYgb0FkZFN0cmluZyk7CiAgICBjb25zdCBQQ0xTdHJpbmcmIG9wZXJhdG9yKz0g KGNvbnN0IGNoYXIqIHBzekFkZERhdGEpOwogICAgY29uc3QgUENMU3RyaW5nJiBvcGVyYXRvcis9 IChjaGFyIGNoQWRkRGF0YSk7CgoKCgogICAgaW50IENvbXBhcmUgKGNvbnN0IGNoYXIqIHBzekNt cERhdGEpIGNvbnN0OwogICAgaW50IENvbXBhcmVOb0Nhc2UgKGNvbnN0IGNoYXIqIHBzekNtcERh dGEpIGNvbnN0OwogICAgaW50IENvbGxhdGUgKGNvbnN0IGNoYXIqIHBzekNtcERhdGEpIGNvbnN0 OwoKICAgIGludCBvcGVyYXRvciEgKHZvaWQpIGNvbnN0OwoKICAgIGZyaWVuZCBpbnQgb3BlcmF0 b3I9PSAoY29uc3QgUENMU3RyaW5nJiBvU3RyaW5nMSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgUENMU3RyaW5nJiBvU3RyaW5nMik7CiAgICBmcmllbmQgaW50IG9wZXJhdG9yPT0g KGNvbnN0IFBDTFN0cmluZyYgb1N0cmluZywgY29uc3QgY2hhciogcHN6RGF0YSk7CiAgICBmcmll bmQgaW50IG9wZXJhdG9yPT0gKGNvbnN0IGNoYXIqIHBzekRhdGEsIGNvbnN0IFBDTFN0cmluZyYg b1N0cmluZyk7CgogICAgZnJpZW5kIGludCBvcGVyYXRvciE9IChjb25zdCBQQ0xTdHJpbmcmIG9T dHJpbmcxLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQQ0xTdHJpbmcmIG9TdHJp bmcyKTsKICAgIGZyaWVuZCBpbnQgb3BlcmF0b3IhPSAoY29uc3QgUENMU3RyaW5nJiBvU3RyaW5n LCBjb25zdCBjaGFyKiBwc3pEYXRhKTsKICAgIGZyaWVuZCBpbnQgb3BlcmF0b3IhPSAoY29uc3Qg Y2hhciogcHN6RGF0YSwgY29uc3QgUENMU3RyaW5nJiBvU3RyaW5nKTsKCiAgICBmcmllbmQgaW50 IG9wZXJhdG9yPCAoY29uc3QgUENMU3RyaW5nJiBvU3RyaW5nMSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgUENMU3RyaW5nJiBvU3RyaW5nMik7CiAgICBmcmllbmQgaW50IG9wZXJh dG9yPCAoY29uc3QgUENMU3RyaW5nJiBvU3RyaW5nLCBjb25zdCBjaGFyKiBwc3pEYXRhKTsKICAg IGZyaWVuZCBpbnQgb3BlcmF0b3I8IChjb25zdCBjaGFyKiBwc3pEYXRhLCBjb25zdCBQQ0xTdHJp bmcmIG9TdHJpbmcpOwoKICAgIGZyaWVuZCBpbnQgb3BlcmF0b3I8PSAoY29uc3QgUENMU3RyaW5n JiBvU3RyaW5nMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUENMU3RyaW5nJiBv U3RyaW5nMik7CiAgICBmcmllbmQgaW50IG9wZXJhdG9yPD0gKGNvbnN0IFBDTFN0cmluZyYgb1N0 cmluZywgY29uc3QgY2hhciogcHN6RGF0YSk7CiAgICBmcmllbmQgaW50IG9wZXJhdG9yPD0gKGNv bnN0IGNoYXIqIHBzekRhdGEsIGNvbnN0IFBDTFN0cmluZyYgb1N0cmluZyk7CgogICAgZnJpZW5k IGludCBvcGVyYXRvcj4gKGNvbnN0IFBDTFN0cmluZyYgb1N0cmluZzEsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IFBDTFN0cmluZyYgb1N0cmluZzIpOwogICAgZnJpZW5kIGludCBv cGVyYXRvcj4gKGNvbnN0IFBDTFN0cmluZyYgb1N0cmluZywgY29uc3QgY2hhciogcHN6RGF0YSk7 CiAgICBmcmllbmQgaW50IG9wZXJhdG9yPiAoY29uc3QgY2hhciogcHN6RGF0YSwgY29uc3QgUENM U3RyaW5nJiBvU3RyaW5nKTsKCiAgICBmcmllbmQgaW50IG9wZXJhdG9yPj0gKGNvbnN0IFBDTFN0 cmluZyYgb1N0cmluZzEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBDTFN0cmlu ZyYgb1N0cmluZzIpOwogICAgZnJpZW5kIGludCBvcGVyYXRvcj49IChjb25zdCBQQ0xTdHJpbmcm IG9TdHJpbmcsIGNvbnN0IGNoYXIqIHBzekRhdGEpOwogICAgZnJpZW5kIGludCBvcGVyYXRvcj49 IChjb25zdCBjaGFyKiBwc3pEYXRhLCBjb25zdCBQQ0xTdHJpbmcmIG9TdHJpbmcpOwoKCgoKICAg IFBDTFN0cmluZyBNaWQgKGludCBuSW5kZXgsIGludCBuQ291bnQgPSAtMSkgY29uc3Q7CiAgICBQ Q0xTdHJpbmcgTGVmdCAoaW50IG5Db3VudCkgY29uc3Q7CiAgICBQQ0xTdHJpbmcgUmlnaHQgKGlu dCBuQ291bnQpIGNvbnN0OwoKCgoKICAgIFBDTFN0cmluZyYgTWFrZVVwcGVyICh2b2lkKTsKICAg IFBDTFN0cmluZyYgTWFrZUxvd2VyICh2b2lkKTsKICAgIGludCBUb0ludCAodm9pZCkgY29uc3Q7 CiAgICBkb3VibGUgVG9Eb3VibGUgKHZvaWQpIGNvbnN0OwoKCgoKICAgIGludCBGaW5kIChjaGFy IGNoU2VhcmNoRGF0YSkgY29uc3Q7CiAgICBpbnQgRmluZCAoY29uc3QgY2hhciogcHN6U2VhcmNo RGF0YSkgY29uc3Q7CiAgICBpbnQgUmV2ZXJzZUZpbmQgKGNoYXIgY2hTZWFyY2hEYXRhKSBjb25z dDsKIyA2MTIgIi4uLy4uLy4uL2xpYi9wY2wuaGgiCnByaXZhdGU6CgoKCgoKICAgIHN0YXRpYyBj b25zdCBjaGFyIGNoTmlsOwoKCgoKICAgIGNoYXIqIHBzekRhdGE7CiAgICBpbnQgbkRhdGFMZW5n dGg7CiAgICBpbnQgbkFsbG9jTGVuZ3RoOwoKCgoKICAgIHZvaWQgSW5pdCAodm9pZCk7CiAgICB2 b2lkIEFsbG9jIChpbnQgblNpemUpOwogICAgdm9pZCBFbnN1cmUgKGludCBuU2l6ZSwgaW50IGJG b3JjZUNvcHkpOwogICAgdm9pZCBBcHBlbmQgKGNvbnN0IGNoYXIqIHBjaERhdGEsIGludCBuTGVu Z3RoKTsKICAgIHZvaWQgQWRkIChjb25zdCBjaGFyKiBwY2hTcmMxRGF0YSwgaW50IG5TcmMxTGVu Z3RoLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHBjaFNyYzJEYXRhLCBpbnQgblNy YzJMZW5ndGgpOwogICAgdm9pZCBBc3NpZ24gKGNvbnN0IGNoYXIqIHBhY2hTcmNEYXRhLCBpbnQg blNyY0xlbmd0aCk7Cn07CgpQQ0xTdHJpbmcgUENMRm9ybWF0KCBjb25zdCBjaGFyICosIC4uLiAp OwoKCgoKCmlubGluZSBpbnQgUENMU3RyaW5nOjpHZXRMZW5ndGggKHZvaWQpIGNvbnN0CnsKICAg IHJldHVybihuRGF0YUxlbmd0aCk7Cn0KCmlubGluZSBpbnQgUENMU3RyaW5nOjpJc0VtcHR5ICh2 b2lkKSBjb25zdAp7CiAgICByZXR1cm4obkRhdGFMZW5ndGg9PTApOwp9CgppbmxpbmUgY2hhciBQ Q0xTdHJpbmc6OkdldEF0IChpbnQgbkluZGV4KSBjb25zdAp7CiAgICAoSU1QQ2hlY2tFeHByKCJu SW5kZXggPj0gMCIsICIuLi8uLi8uLi9saWIvcGNsLmhoIiwgNjU3KSwgKG5JbmRleCA+PSAwKSA/ ICgwKSA6IF9JTVBBc3NlcnQoIm5JbmRleCA+PSAwIiwiLi4vLi4vLi4vbGliL3BjbC5oaCIsNjU3 KSk7CiAgICAoSU1QQ2hlY2tFeHByKCJuSW5kZXggPCBuRGF0YUxlbmd0aCIsICIuLi8uLi8uLi9s aWIvcGNsLmhoIiwgNjU4KSwgKG5JbmRleCA8IG5EYXRhTGVuZ3RoKSA/ICgwKSA6IF9JTVBBc3Nl cnQoIm5JbmRleCA8IG5EYXRhTGVuZ3RoIiwiLi4vLi4vLi4vbGliL3BjbC5oaCIsNjU4KSk7CiAg ICByZXR1cm4ocHN6RGF0YVtuSW5kZXhdKTsKfQoKaW5saW5lIGNoYXImIFBDTFN0cmluZzo6b3Bl cmF0b3JbXSAoaW50IG5JbmRleCkKewogICAgKElNUENoZWNrRXhwcigibkluZGV4ID49IDAiLCAi Li4vLi4vLi4vbGliL3BjbC5oaCIsIDY2NCksIChuSW5kZXggPj0gMCkgPyAoMCkgOiBfSU1QQXNz ZXJ0KCJuSW5kZXggPj0gMCIsIi4uLy4uLy4uL2xpYi9wY2wuaGgiLDY2NCkpOwogICAgKElNUENo ZWNrRXhwcigibkluZGV4IDwgbkRhdGFMZW5ndGgiLCAiLi4vLi4vLi4vbGliL3BjbC5oaCIsIDY2 NSksIChuSW5kZXggPCBuRGF0YUxlbmd0aCkgPyAoMCkgOiBfSU1QQXNzZXJ0KCJuSW5kZXggPCBu RGF0YUxlbmd0aCIsIi4uLy4uLy4uL2xpYi9wY2wuaGgiLDY2NSkpOwogICAgcmV0dXJuKHBzekRh dGFbbkluZGV4XSk7Cn0KCmlubGluZSBjaGFyIFBDTFN0cmluZzo6b3BlcmF0b3JbXSAoaW50IG5J bmRleCkgY29uc3QKewogICAgKElNUENoZWNrRXhwcigibkluZGV4ID49IDAiLCAiLi4vLi4vLi4v bGliL3BjbC5oaCIsIDY3MSksIChuSW5kZXggPj0gMCkgPyAoMCkgOiBfSU1QQXNzZXJ0KCJuSW5k ZXggPj0gMCIsIi4uLy4uLy4uL2xpYi9wY2wuaGgiLDY3MSkpOwogICAgKElNUENoZWNrRXhwcigi bkluZGV4IDwgbkRhdGFMZW5ndGgiLCAiLi4vLi4vLi4vbGliL3BjbC5oaCIsIDY3MiksIChuSW5k ZXggPCBuRGF0YUxlbmd0aCkgPyAoMCkgOiBfSU1QQXNzZXJ0KCJuSW5kZXggPCBuRGF0YUxlbmd0 aCIsIi4uLy4uLy4uL2xpYi9wY2wuaGgiLDY3MikpOwogICAgcmV0dXJuKHBzekRhdGFbbkluZGV4 XSk7Cn0KCmlubGluZSBQQ0xTdHJpbmc6Om9wZXJhdG9yIGNvbnN0IGNoYXIqICh2b2lkKSBjb25z dAp7CiAgICByZXR1cm4oKGNvbnN0IGNoYXIgKikgcHN6RGF0YSk7Cn0KCgoKCgppbmxpbmUgaW50 IFBDTFN0cmluZzo6Q29tcGFyZSAoY29uc3QgY2hhciogcHN6Q21wRGF0YSkgY29uc3QKewogICAg cmV0dXJuKHN0cmNtcChwc3pEYXRhLCBwc3pDbXBEYXRhKSk7Cn0KCmlubGluZSBpbnQgUENMU3Ry aW5nOjpDb21wYXJlTm9DYXNlIChjb25zdCBjaGFyKiBwc3pDbXBEYXRhKSBjb25zdAp7CiAgICBy ZXR1cm4oc3RyY2FzZWNtcChwc3pEYXRhLCBwc3pDbXBEYXRhKSk7Cn0KCmlubGluZSBpbnQgUENM U3RyaW5nOjpDb2xsYXRlIChjb25zdCBjaGFyKiBwc3pDbXBEYXRhKSBjb25zdAp7CiAgICByZXR1 cm4oQ29tcGFyZU5vQ2FzZShwc3pDbXBEYXRhKSk7Cn0KCmlubGluZSBpbnQgUENMU3RyaW5nOjpv cGVyYXRvciEgKHZvaWQpIGNvbnN0CnsKICAgIHJldHVybihJc0VtcHR5KCkpOwp9CiMgNzE0ICIu Li8uLi8uLi9saWIvcGNsLmhoIgppbmxpbmUgaW50IG9wZXJhdG9yPT0gKGNvbnN0IFBDTFN0cmlu ZyYgb1N0cmluZzEsIGNvbnN0IFBDTFN0cmluZyYgb1N0cmluZzIpCnsKICAgIHJldHVybiAob1N0 cmluZzEuQ29tcGFyZU5vQ2FzZShvU3RyaW5nMikgPT0gMCk7Cn0KCmlubGluZSBpbnQgb3BlcmF0 b3I9PSAoY29uc3QgUENMU3RyaW5nJiBvU3RyaW5nLCBjb25zdCBjaGFyKiBwc3pEYXRhKQp7CiAg ICByZXR1cm4gKG9TdHJpbmcuQ29tcGFyZU5vQ2FzZShwc3pEYXRhKSA9PSAwKTsKfQoKaW5saW5l IGludCBvcGVyYXRvcj09IChjb25zdCBjaGFyKiBwc3pEYXRhLCBjb25zdCBQQ0xTdHJpbmcmIG9T dHJpbmcpCnsKICAgIHJldHVybiAob1N0cmluZy5Db21wYXJlTm9DYXNlKHBzekRhdGEpID09IDAp Owp9CgppbmxpbmUgaW50IG9wZXJhdG9yIT0gKGNvbnN0IFBDTFN0cmluZyYgb1N0cmluZzEsIGNv bnN0IFBDTFN0cmluZyYgb1N0cmluZzIpCnsKICAgIHJldHVybiAob1N0cmluZzEuQ29tcGFyZU5v Q2FzZShvU3RyaW5nMikgIT0gMCk7Cn0KCmlubGluZSBpbnQgb3BlcmF0b3IhPSAoY29uc3QgUENM U3RyaW5nJiBvU3RyaW5nLCBjb25zdCBjaGFyKiBwc3pEYXRhKQp7CiAgICByZXR1cm4gKG9TdHJp bmcuQ29tcGFyZU5vQ2FzZShwc3pEYXRhKSAhPSAwKTsKfQoKaW5saW5lIGludCBvcGVyYXRvciE9 IChjb25zdCBjaGFyKiBwc3pEYXRhLCBjb25zdCBQQ0xTdHJpbmcmIG9TdHJpbmcpCnsKICAgIHJl dHVybiAob1N0cmluZy5Db21wYXJlTm9DYXNlKHBzekRhdGEpICE9IDApOwp9CgppbmxpbmUgaW50 IG9wZXJhdG9yPCAoY29uc3QgUENMU3RyaW5nJiBvU3RyaW5nMSwgY29uc3QgUENMU3RyaW5nJiBv U3RyaW5nMikKewogICAgcmV0dXJuIChvU3RyaW5nMS5Db21wYXJlTm9DYXNlKG9TdHJpbmcyKSA8 IDApOwp9CgppbmxpbmUgaW50IG9wZXJhdG9yPCAoY29uc3QgUENMU3RyaW5nJiBvU3RyaW5nLCBj b25zdCBjaGFyKiBwc3pEYXRhKQp7CiAgICByZXR1cm4gKG9TdHJpbmcuQ29tcGFyZU5vQ2FzZShw c3pEYXRhKSA8IDApOwp9CgppbmxpbmUgaW50IG9wZXJhdG9yPCAoY29uc3QgY2hhciogcHN6RGF0 YSwgY29uc3QgUENMU3RyaW5nJiBvU3RyaW5nKQp7CiAgICByZXR1cm4gKG9TdHJpbmcuQ29tcGFy ZU5vQ2FzZShwc3pEYXRhKSA+IDApOwp9CgppbmxpbmUgaW50IG9wZXJhdG9yPD0gKGNvbnN0IFBD TFN0cmluZyYgb1N0cmluZzEsIGNvbnN0IFBDTFN0cmluZyYgb1N0cmluZzIpCnsKICAgIHJldHVy biAob1N0cmluZzEuQ29tcGFyZU5vQ2FzZShvU3RyaW5nMikgPD0gMCk7Cn0KCmlubGluZSBpbnQg b3BlcmF0b3I8PSAoY29uc3QgUENMU3RyaW5nJiBvU3RyaW5nLCBjb25zdCBjaGFyKiBwc3pEYXRh KQp7CiAgICByZXR1cm4gKG9TdHJpbmcuQ29tcGFyZU5vQ2FzZShwc3pEYXRhKSA8PSAwKTsKfQoK aW5saW5lIGludCBvcGVyYXRvcjw9IChjb25zdCBjaGFyKiBwc3pEYXRhLCBjb25zdCBQQ0xTdHJp bmcmIG9TdHJpbmcpCnsKICAgIHJldHVybiAob1N0cmluZy5Db21wYXJlTm9DYXNlKHBzekRhdGEp ID49IDApOwp9CgppbmxpbmUgaW50IG9wZXJhdG9yPiAoY29uc3QgUENMU3RyaW5nJiBvU3RyaW5n MSwgY29uc3QgUENMU3RyaW5nJiBvU3RyaW5nMikKewogICAgcmV0dXJuIChvU3RyaW5nMS5Db21w YXJlTm9DYXNlKG9TdHJpbmcyKSA+IDApOwp9CgppbmxpbmUgaW50IG9wZXJhdG9yPiAoY29uc3Qg UENMU3RyaW5nJiBvU3RyaW5nLCBjb25zdCBjaGFyKiBwc3pEYXRhKQp7CiAgICByZXR1cm4gKG9T dHJpbmcuQ29tcGFyZU5vQ2FzZShwc3pEYXRhKSA+IDApOwp9CgppbmxpbmUgaW50IG9wZXJhdG9y PiAoY29uc3QgY2hhciogcHN6RGF0YSwgY29uc3QgUENMU3RyaW5nJiBvU3RyaW5nKQp7CiAgICBy ZXR1cm4gKG9TdHJpbmcuQ29tcGFyZU5vQ2FzZShwc3pEYXRhKSA8IDApOwp9CgppbmxpbmUgaW50 IG9wZXJhdG9yPj0gKGNvbnN0IFBDTFN0cmluZyYgb1N0cmluZzEsIGNvbnN0IFBDTFN0cmluZyYg b1N0cmluZzIpCnsKICAgIHJldHVybiAob1N0cmluZzEuQ29tcGFyZU5vQ2FzZShvU3RyaW5nMikg Pj0gMCk7Cn0KCmlubGluZSBpbnQgb3BlcmF0b3I+PSAoY29uc3QgUENMU3RyaW5nJiBvU3RyaW5n LCBjb25zdCBjaGFyKiBwc3pEYXRhKQp7CiAgICByZXR1cm4gKG9TdHJpbmcuQ29tcGFyZU5vQ2Fz ZShwc3pEYXRhKSA+PSAwKTsKfQoKaW5saW5lIGludCBvcGVyYXRvcj49IChjb25zdCBjaGFyKiBw c3pEYXRhLCBjb25zdCBQQ0xTdHJpbmcmIG9TdHJpbmcpCnsKICAgIHJldHVybiAob1N0cmluZy5D b21wYXJlTm9DYXNlKHBzekRhdGEpIDw9IDApOwp9CgoKCgoKCgppbmxpbmUgUENMU3RyaW5nJiBQ Q0xTdHJpbmc6Ok1ha2VVcHBlciAodm9pZCkKewogICAgVUNhc2VTdHJpbmcocHN6RGF0YSk7CiAg ICByZXR1cm4oKnRoaXMpOwp9CgppbmxpbmUgUENMU3RyaW5nJiBQQ0xTdHJpbmc6Ok1ha2VMb3dl ciAodm9pZCkKewogICAgTENhc2VTdHJpbmcocHN6RGF0YSk7CiAgICByZXR1cm4oKnRoaXMpOwp9 CgppbmxpbmUgaW50IFBDTFN0cmluZzo6VG9JbnQgKHZvaWQpIGNvbnN0CnsKICAgIHJldHVybihh dG9pKHBzekRhdGEpKTsKfQoKaW5saW5lIGRvdWJsZSBQQ0xTdHJpbmc6OlRvRG91YmxlICh2b2lk KSBjb25zdAp7CiAgICByZXR1cm4oU2NhbkRvdWJsZShwc3pEYXRhLCBuRGF0YUxlbmd0aCkpOwp9 CiMgODU0ICIuLi8uLi8uLi9saWIvcGNsLmhoIgpjbGFzcyBQQ0xEYXRlCnsKcHVibGljOgogICAg UENMRGF0ZSAoKTsKICAgIFBDTERhdGUgKGludCBtbiwgaW50IGR5LCBpbnQgeXIpOwogICAgflBD TERhdGUoKTsKCiAgICBpbnQgR2V0TW9udGggKCkgY29uc3Qge3JldHVybiBtb250aDt9CiAgICBp bnQgR2V0RGF5ICgpIGNvbnN0IHtyZXR1cm4gZGF5O30KICAgIGludCBHZXRZZWFyICgpIGNvbnN0 IHtyZXR1cm4geWVhcjt9CiAgICBpbnQgR2V0RGF5T2ZZZWFyICgpIGNvbnN0OwogICAgY2hhciAq R2V0U3RyaW5nIChjaGFyICpzdHJpbmcpIGNvbnN0OwogICAgaW50IEdldERpZmZlcmVuY2UgKFBD TERhdGUgb3RoZXIpIGNvbnN0OwoKICAgIHZvaWQgU2V0TW9udGggKGludCBtbik7CiAgICB2b2lk IFNldERheSAoaW50IGR5KTsKICAgIHZvaWQgU2V0WWVhciAoaW50IHlyKTsKICAgIHZvaWQgU2V0 RGF0ZSAoaW50IG1uLCBpbnQgZHksIGludCB5cik7CiAgICB2b2lkIFNldFRvZGF5ICgpOwogICAg dm9pZCBTZXREYXlPZlllYXIgKGludCBkb3kpOwogICAgdm9pZCBhZGREYXkgKGludCBkYXlzKTsK CiAgICBQQ0xEYXRlICZvcGVyYXRvcisrICgpOwogICAgUENMRGF0ZSAmb3BlcmF0b3ItLSAoKTsK CiAgICBpbnQgb3BlcmF0b3I8IChjb25zdCBQQ0xEYXRlICZvdGhlcikgY29uc3Q7CiAgICBpbnQg b3BlcmF0b3I+IChjb25zdCBQQ0xEYXRlICZvdGhlcikgY29uc3Q7CiAgICBpbnQgb3BlcmF0b3I8 PSAoY29uc3QgUENMRGF0ZSAmb3RoZXIpIGNvbnN0OwogICAgaW50IG9wZXJhdG9yPj0gKGNvbnN0 IFBDTERhdGUgJm90aGVyKSBjb25zdDsKICAgIGludCBvcGVyYXRvcj09IChjb25zdCBQQ0xEYXRl ICZvdGhlcikgY29uc3Q7CiAgICBpbnQgb3BlcmF0b3IhPSAoY29uc3QgUENMRGF0ZSAmb3RoZXIp IGNvbnN0OwoKCgoKCgogICAgc3RhdGljIGludCBHZXREYXlzSW5Nb250aCAoaW50IG1uLCBpbnQg eXIpOwogICAgc3RhdGljIGludCBMZWFwWWVhciAoaW50IHlyKTsKCnByaXZhdGU6CiAgICBpbnQg bW9udGgsIGRheSwgeWVhcjsKfTsKCgoKCgoKCmNsYXNzIFBDTEluZGV4ZWREYXRhIDogcHVibGlj IFBDTE9iamVjdAp7CnB1YmxpYzoKICAgIGludCBpSW5kZXg7CiAgICB2b2lkICpwRGF0YTsKCiAg ICAgICAgICAgICAgICAgICAgICAgIFBDTEluZGV4ZWREYXRhKCBpbnQgaUluZGV4Miwgdm9pZCAq cERhdGEyICkKICAgICAgICAgICAgICAgICAgICAgICAgeyBpSW5kZXggPSBpSW5kZXgyOyB0aGlz LT5wRGF0YSA9IHBEYXRhMjsgfQogICAgdmlydHVhbCBjb25zdCBQQ0xLZXkgS2V5KCkgY29uc3Qg eyByZXR1cm4oIFBDTEtleSggaUluZGV4ICkgKTsgfQogICAgdmlydHVhbCBjb25zdCBjaGFyICpH ZXRDbGFzc05hbWUoKSBjb25zdCB7IHJldHVybiggIlBDTEluZGV4ZWREYXRhIiApOyB9CiAgICB2 aXJ0dWFsIHZvaWQgRHVtcCggRklMRSAqZnAgKSBjb25zdAogICAgICAgICAgICAgICAgICAgICAg ICB7IGZwcmludGYoZnAsIlBDTEluZGV4ZWREYXRhOiVkOiVwXG4iLGlJbmRleCxwRGF0YSk7IH0K fTsKIyA5MjkgIi4uLy4uLy4uL2xpYi9wY2wuaGgiCmNsYXNzIFBDTENvbG9yIDogcHVibGljIFBD TE9iamVjdCB7CgogIHB1YmxpYzoKICAgIHVuc2lnbmVkIGNoYXIgYnlSZWQ7CiAgICB1bnNpZ25l ZCBjaGFyIGJ5R3JlZW47CiAgICB1bnNpZ25lZCBjaGFyIGJ5Qmx1ZTsKCiAgICAgICAgICAgICAg ICBQQ0xDb2xvcigpOwogICAgICAgICAgICAgICAgUENMQ29sb3IoIGludCBuUmVkLCBpbnQgbkdy ZWVuLCBpbnQgbkJsdWUgKTsKICAgICAgICAgICAgICAgIFBDTENvbG9yKCBjb25zdCBQQ0xDb2xv ciAmIG9TcmNDb2xvciApOwogICAgdmlydHVhbCB+UENMQ29sb3IoKSB7fTsKCiAgICB2b2lkIFNl dFJHQiggaW50IG5SZWQsIGludCBuR3JlZW4sIGludCBuQmx1ZSApOwogICAgVEJvb2wgU2V0QnlO YW1lKCBjb25zdCBjaGFyICogcHN6Q29sb3JOYW1lICk7CiAgICBpbnQgR2V0UmVkKCkgY29uc3Q7 CiAgICBpbnQgR2V0R3JlZW4oKSBjb25zdDsKICAgIGludCBHZXRCbHVlKCkgY29uc3Q7CiAgICBQ Q0xTdHJpbmcgR2V0TmFtZSggdm9pZCApIGNvbnN0OwogICAgUENMU3RyaW5nIEdldFJHQk5hbWUo IHZvaWQgKSBjb25zdDsKICAgIGNvbnN0IFBDTENvbG9yJiBvcGVyYXRvcj0gKGNvbnN0IFBDTENv bG9yJiBvU3JjQ29sb3IpOwogICAgZnJpZW5kIGludAogICAgICAgICAgICAgICAgb3BlcmF0b3I9 PSAoY29uc3QgUENMQ29sb3ImIG9Db2xvcjEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBQQ0xDb2xvciYgb0NvbG9yMik7CgoKCgoKCiAgICBpbmxpbmUgZnJpZW5kIGludCBvcGVy YXRvciE9IChjb25zdCBQQ0xDb2xvciYgb0NvbG9yMSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgUENMQ29sb3ImIG9Db2xvcjIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHty ZXR1cm4oICEob0NvbG9yMT09b0NvbG9yMikgKTt9CgoKCgogICAgdmlydHVhbCB2b2lkIER1bXAo IEZJTEUgKiApIGNvbnN0OwogICAgdmlydHVhbCBjb25zdCBjaGFyICpHZXRDbGFzc05hbWUoIHZv aWQgKSBjb25zdDsKfTsKCmNoYXIgKipHZXROYW1lZENvbG9ycyggdm9pZCApOwp2b2lkIEFkZE5h bWVkQ29sb3IoIGNvbnN0IGNoYXIgKiwgUENMQ29sb3IgKTsKCgoKCgoKY2xhc3MgUENMQ21kTGlu ZU9wdGlvbiA6IHB1YmxpYyBQQ0xPYmplY3QKewpwdWJsaWM6CiAgICBQQ0xDbWRMaW5lT3B0aW9u IChjaGFyKiBwc3pPcHRpb24pOwogICAgflBDTENtZExpbmVPcHRpb24gKHZvaWQpOwoKCiAgICBj b25zdCBjaGFyKiBHZXRDbGFzc05hbWUgKHZvaWQpIGNvbnN0OwoKICAgIGNoYXIqIHBzek9wdGlv bjsKICAgIGNoYXIqKiBwYXN6QXJnOwogICAgaW50IG5Db3VudDsKfTsKCmNsYXNzIFBDTENtZExp bmUgOiBwdWJsaWMgUENMT2JqZWN0CnsKcHVibGljOgoKICAgICAgICAgICAgICAgIFBDTENtZExp bmUgKGludCBuQXJnYywgY2hhciogcGFzekFyZ3ZbXSk7CiAgICAgICAgICAgICAgICBQQ0xDbWRM aW5lIChjaGFyKiBwc3pDb21tYW5kTGluZSk7CiAgICAgICAgICAgICAgICB+UENMQ21kTGluZSAo dm9pZCk7CgoKICAgIGNvbnN0IGNoYXIqIEdldENsYXNzTmFtZSAodm9pZCkgY29uc3Q7CgogICAg VEJvb2wgRXhpc3QgKGNoYXIqIHBzek9wdGlvbik7CiAgICBpbnQgQ291bnQgKGNoYXIqIHBzek9w dGlvbik7CiAgICBpbnQgR2V0SW50IChjaGFyKiBwc3pPcHRpb24sIGludCBuRGVmYXVsdCA9IDAs IGludCBuQXJnID0gMCk7CiAgICBmbG9hdCBHZXRGbG9hdCAoY2hhciogcHN6T3B0aW9uLCBmbG9h dCBmRGVmYXVsdCA9IDAuMCwgaW50IG5BcmcgPSAwKTsKICAgIGNoYXIqIEdldFN0cmluZyAoY2hh ciogcHN6T3B0aW9uLCBjaGFyKiBwc3pEZWZhdWx0ID0gIiIsIGludCBuQXJnID0gMCk7Cgpwcml2 YXRlOgoKCiAgICBQQ0xBcnJheSBvT3B0aW9uOwoKICAgIHZvaWQgR2VuZXJhdGUgKGludCBuQXJn YywgY2hhciogcGFzekFyZ3ZbXSk7CiAgICBQQ0xDbWRMaW5lT3B0aW9uKiBGaW5kT3B0aW9uIChj aGFyKiBwc3pPcHRpb24pOwp9OwoKCgoKCgpjbGFzcyBQQ0xUcmFuc2xhdGUgewogIHB1YmxpYzoK ICAgIFBDTFRyYW5zbGF0ZSh2b2lkKTsKICAgIHZvaWQgU2V0U3JjUmVjdChkb3VibGUgZExvd2Vy TGVmdFgsIGRvdWJsZSBkTG93ZXJMZWZ0WSwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBk VXBwZXJSaWdodFgsIGRvdWJsZSBkVXBwZXJSaWdodFkpOwoKICAgIHZvaWQgU2V0RGVzdFJlY3Qo ZG91YmxlIGRMb3dlckxlZnRYLCBkb3VibGUgZExvd2VyTGVmdFksCiAgICAgICAgICAgICAgICAg ICAgIGRvdWJsZSBkVXBwZXJSaWdodFgsIGRvdWJsZSBkVXBwZXJSaWdodFkpOwoKICAgIHZvaWQg U3JjMkRlc3QoZG91YmxlICpwZFgsIGRvdWJsZSAqcGRZKTsKICAgIHZvaWQgRGVzdDJTcmMoZG91 YmxlICpwZFgsIGRvdWJsZSAqcGR5KTsKCiAgICBkb3VibGUgU3JjMkRlc3RYKGRvdWJsZSBkWCkg e3JldHVybiBkWCAqIGRYU2NhbGUgKyBkWE9mZnNldDt9OwogICAgZG91YmxlIFNyYzJEZXN0WShk b3VibGUgZFkpIHtyZXR1cm4gZFkgKiBkWVNjYWxlICsgZFlPZmZzZXQ7fTsKCiAgICBkb3VibGUg RGVzdDJTcmNYKGRvdWJsZSBkWCkKICAgICAgICB7IHJldHVybiBkWFNjYWxlID8gKGRYLWRYT2Zm c2V0KS9kWFNjYWxlIDogMDsgfTsKICAgIGRvdWJsZSBEZXN0MlNyY1koZG91YmxlIGRZKQogICAg ICAgIHsgcmV0dXJuIGRZU2NhbGUgPyAoZFktZFlPZmZzZXQpL2RZU2NhbGUgOiAwOyB9OwoKICAg IHZvaWQgR2V0U3JjUmVjdChkb3VibGUgKnBkWDEsIGRvdWJsZSAqcGRZMSwgZG91YmxlICpwZFgy LCBkb3VibGUgKnBkWTIpOwogICAgdm9pZCBHZXREZXN0UmVjdChkb3VibGUgKnBkWDEsIGRvdWJs ZSAqcGRZMSwgZG91YmxlICpwZFgyLGRvdWJsZSAqcGRZMik7CgogIHByaXZhdGU6CgogICAgdm9p ZCBDYWxjdWxhdGVUcmFuc2Zvcm0odm9pZCk7CgogICAgZG91YmxlIGRYU2NhbGU7CiAgICBkb3Vi bGUgZFhPZmZzZXQ7CgogICAgZG91YmxlIGRZU2NhbGU7CiAgICBkb3VibGUgZFlPZmZzZXQ7Cgog ICAgZG91YmxlIGRTcmNYMSxkU3JjWTE7CiAgICBkb3VibGUgZFNyY1gyLGRTcmNZMjsKCiAgICBk b3VibGUgZERlc3RYMSxkRGVzdFkxOwogICAgZG91YmxlIGREZXN0WDIsZERlc3RZMjsKfTsKCgoK Cgp2b2lkIEJ1ZmZlckxpbmUodW5zaWduZWQgY2hhciAqcGJ5QnVmZmVyLCBpbnQgbkJ1ZmZlclhT aXplLCBpbnQKbkJ1ZmZlcllTaXplLAogICAgICAgICAgICAgICAgaW50IG5YMSwgaW50IG5ZMSwg aW50IG5YMiwgaW50IG5ZMiwgdW5zaWduZWQgY2hhciBieUxpbmVDb2xvciwKICAgICAgICAgICAg ICAgIGludCBuV2lkdGgpOwojIDg1ICJ2ZWNjbGVhbi5jcHAiIDIKCiMgMSAic3RsaW5jbC5oIiAx CiMgNDMgInN0bGluY2wuaCIKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2xpc3QiIDEg MwojIDMxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2xpc3QiIDMKIyAxICIvdXNyL2xvY2Fs L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xpc3QuaCIgMSAzCiMgNjAgIi91c3IvbG9jYWwvaW5j bHVkZS9nKystdjMvYml0cy9zdGRfbGlzdC5oIiAzCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n KystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMSAzCiMgNjQgIi91c3IvbG9jYWwvaW5jbHVkZS9n KystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst djMvc3BhcmN2OS1zdW4tc29sYXJpczIuNy9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAzNCAiL3Vz ci9sb2NhbC9pbmNsdWRlL2crKy12My9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43L2JpdHMvYysrY29u ZmlnLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL3NwYXJjdjktc3VuLXNvbGFy aXMyLjcvYml0cy9vc19kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr LXYzL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvYml0cy9jKytjb25maWcuaCIgMiAzCgojIDEgIi91 c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvc3BhcmN2OS1zdW4tc29sYXJpczIuNy9iaXRzL2xpbWl0 cy5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9zcGFyY3Y5LXN1bi1zb2xh cmlzMi43L2JpdHMvYysrY29uZmlnLmgiIDIgMwojIDY1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RsX3BhaXIuaCIgMSAzCiMgNjQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv Yml0cy9zdGxfcGFpci5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCnRlbXBsYXRlIDxjbGFzcyBfVDEs IGNsYXNzIF9UMj4Kc3RydWN0IHBhaXIgewogIHR5cGVkZWYgX1QxIGZpcnN0X3R5cGU7CiAgdHlw ZWRlZiBfVDIgc2Vjb25kX3R5cGU7CgogIF9UMSBmaXJzdDsKICBfVDIgc2Vjb25kOwoKCgoKICBw YWlyKCkgOiBmaXJzdCgpLCBzZWNvbmQoKSB7fQoKCgoKICBwYWlyKGNvbnN0IF9UMSYgX19hLCBj b25zdCBfVDImIF9fYikgOiBmaXJzdChfX2EpLCBzZWNvbmQoX19iKSB7fQoKCiAgdGVtcGxhdGUg PGNsYXNzIF9VMSwgY2xhc3MgX1UyPgogIHBhaXIoY29uc3QgcGFpcjxfVTEsIF9VMj4mIF9fcCkg OiBmaXJzdChfX3AuZmlyc3QpLCBzZWNvbmQoX19wLnNlY29uZCkge30KfTsKCgp0ZW1wbGF0ZSA8 Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgcGFpcjxf VDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkKewogIHJldHVybiBfX3gu Zmlyc3QgPT0gX195LmZpcnN0ICYmIF9feC5zZWNvbmQgPT0gX195LnNlY29uZDsKfQoKCnRlbXBs YXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHBh aXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpCnsKICByZXR1cm4g X194LmZpcnN0IDwgX195LmZpcnN0IHx8CiAgICAgICAgICghKF9feS5maXJzdCA8IF9feC5maXJz dCkgJiYgX194LnNlY29uZCA8IF9feS5zZWNvbmQpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwg Y2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBf X3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsK fQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I+ KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsK ICByZXR1cm4gX195IDwgX194Owp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgpp bmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBh aXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9CgoKdGVtcGxhdGUg PGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IHBhaXI8 X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1cm4gIShf X3ggPCBfX3kpOwp9CiMgMTM5ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3Bh aXIuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CgoKaW5saW5lIHBhaXI8X1Qx LCBfVDI+IG1ha2VfcGFpcihfVDEgX194LCBfVDIgX195KQoKCgp7CiAgcmV0dXJuIHBhaXI8X1Qx LCBfVDI+KF9feCwgX195KTsKfQoKfQojIDY3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i aXRzL3R5cGVfdHJhaXRzLmgiIDEgMwojIDQ4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp dHMvdHlwZV90cmFpdHMuaCIgMwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL3NwYXJj djktc3VuLXNvbGFyaXMyLjcvYml0cy9jKytjb25maWcuaCIgMSAzCiMgNTAgIi91c3IvbG9jYWwv aW5jbHVkZS9nKystdjMvYml0cy90eXBlX3RyYWl0cy5oIiAyIDMKIyA4NiAiL3Vzci9sb2NhbC9p bmNsdWRlL2crKy12My9iaXRzL3R5cGVfdHJhaXRzLmgiIDMKdGVtcGxhdGUgPGJvb2wgX1RydXRo PiBzdHJ1Y3QgX0Jvb2wge307CnR5cGVkZWYgX0Jvb2w8dHJ1ZT4gX190cnVlX3R5cGU7CnR5cGVk ZWYgX0Jvb2w8ZmFsc2U+IF9fZmFsc2VfdHlwZTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVj dCBfX3R5cGVfdHJhaXRzIHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSB0aGlzX2R1bW15X21lbWJl cl9tdXN0X2JlX2ZpcnN0OwojIDExMCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3R5 cGVfdHJhaXRzLmgiIDMKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVs dF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9j b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVu dF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3Rv cjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgp0ZW1wbGF0ZTw+ IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGJvb2w+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf dHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190 cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp YWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh bF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVt cGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh c190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz X3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsK fTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8c2lnbmVkIGNoYXI+IHsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25l ZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25z dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVj dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlw ZV90cmFpdHM8d2NoYXJfdD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl ZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29w eV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25t ZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0 cnVjdCBfX3R5cGVfdHJhaXRzPHNob3J0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp dmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs X2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf ZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBs YXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgc2hvcnQ+IHsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl X3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BP RF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxpbnQ+IHsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25l ZCBpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0 cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRv cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBl X3RyYWl0czxsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVs dF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2Nv bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRf b3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0 IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh c190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz X3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp dmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2 aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0 ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgbG9uZz4gewogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9E X3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGxvbmcg bG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3Ry dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3Rv cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9y OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVf dHJhaXRzPGZsb2F0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVs dF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2Nv bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRf b3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0 IF9fdHlwZV90cmFpdHM8ZG91YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp YWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh bF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fz c2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVz dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRl PD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBkb3VibGU+IHsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo YXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBl Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90cmFpdHM8X1RwKj4gewog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl X3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4gc3RydWN0IF9J c19pbnRlZ2VyIHsKICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0 ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxib29sPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50 ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxjaGFyPiB7CiAgdHlwZWRl ZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdl cjxzaWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVt cGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190 cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8d2No YXJfdD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBz dHJ1Y3QgX0lzX2ludGVnZXI8c2hvcnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3Jh bDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIHNob3J0PiB7CiAg dHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNf aW50ZWdlcjxpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBs YXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGludD4gewogIHR5cGVkZWYgX190cnVl X3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZz4g ewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3Qg X0lzX2ludGVnZXI8dW5zaWduZWQgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVn cmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZyBsb25nPiB7CiAgdHlw ZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50 ZWdlcjx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3Jh bDsKfTsKCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gc3RydWN0IF9Jc19ub3JtYWxfaXRlcmF0b3Ig ewogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfTm9ybWFsOwp9OwoKCm5hbWVzcGFjZSBzdGQgewog ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+IGNsYXNz IF9fbm9ybWFsX2l0ZXJhdG9yOwp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBl bmFtZSBfQ29udGFpbmVyPgpzdHJ1Y3QgX0lzX25vcm1hbF9pdGVyYXRvcjwgc3RkOjpfX25vcm1h bF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+ID4gewogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIF9Ob3JtYWw7Cn07CiMgNzAgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf YWxnb2Jhc2UuaCIgMiAzCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf Y3N0cmluZy5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9j c3RyaW5nLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRk ZWYuaCIgMSAzCiMgMzggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRl Zi5oIiAzCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43 LzMuMC4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzkgIi91c3IvbG9jYWwvaW5jbHVkZS9n KystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6 cHRyZGlmZl90OwogIHVzaW5nIDo6c2l6ZV90Owp9CiMgMzggIi91c3IvbG9jYWwvaW5jbHVkZS9n KystdjMvYml0cy9zdGRfY3N0cmluZy5oIiAyIDMKIyA0MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr Ky12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEg MyA0CiMgNDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0cmluZy5oIiAy IDMKIyA2NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDMK bmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjptZW1jcHk7CiAgdXNpbmcgOjptZW1tb3ZlOwogIHVz aW5nIDo6c3RyY3B5OwogIHVzaW5nIDo6c3RybmNweTsKICB1c2luZyA6OnN0cmNhdDsKICB1c2lu ZyA6OnN0cm5jYXQ7CiAgdXNpbmcgOjptZW1jbXA7CiAgdXNpbmcgOjpzdHJjbXA7CiAgdXNpbmcg OjpzdHJjb2xsOwogIHVzaW5nIDo6c3RybmNtcDsKICB1c2luZyA6OnN0cnhmcm07CiAgdXNpbmcg OjpzdHJjc3BuOwogIHVzaW5nIDo6c3Ryc3BuOwogIHVzaW5nIDo6c3RydG9rOwogIHVzaW5nIDo6 bWVtc2V0OwogIHVzaW5nIDo6c3RyZXJyb3I7CiAgdXNpbmcgOjpzdHJsZW47CgogIHVzaW5nIDo6 bWVtY2hyOwoKICBpbmxpbmUgdm9pZCoKICBtZW1jaHIodm9pZCogX19wLCBpbnQgX19jLCBzaXpl X3QgX19uKQogIHsgcmV0dXJuIG1lbWNocihjb25zdF9jYXN0PGNvbnN0IHZvaWQqPihfX3ApLCBf X2MsIF9fbik7IH0KCiAgdXNpbmcgOjpzdHJjaHI7CgogIGlubGluZSBjaGFyKgogIHN0cmNocihj aGFyKiBfX3MxLCBpbnQgX19uKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJjaHIoY29uc3RfY2Fz dDxjb25zdCBjaGFyKj4oX19zMSksIF9fbik7IH0KCiAgdXNpbmcgOjpzdHJwYnJrOwoKICBpbmxp bmUgY2hhcioKICBzdHJwYnJrKGNoYXIqIF9fczEsIGNvbnN0IGNoYXIqIF9fczIpCiAgeyByZXR1 cm4gX19idWlsdGluX3N0cnBicmsoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fczIp OyB9CgogIHVzaW5nIDo6c3RycmNocjsKCiAgaW5saW5lIGNoYXIqCiAgc3RycmNocihjaGFyKiBf X3MxLCBpbnQgX19uKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJyY2hyKGNvbnN0X2Nhc3Q8Y29u c3QgY2hhcio+KF9fczEpLCBfX24pOyB9CgogIHVzaW5nIDo6c3Ryc3RyOwoKICBpbmxpbmUgY2hh cioKICBzdHJzdHIoY2hhciogX19zMSwgY29uc3QgY2hhciogX19zMikKICB7IHJldHVybiBfX2J1 aWx0aW5fc3Ryc3RyKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX3MyKTsgfQp9CiMg NzIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMg MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jbGltaXRzLmgiIDEgMwojIDM4 ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NsaW1pdHMuaCIgMwojIDEgIi91 c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRl L2xpbWl0cy5oIiAxIDMgNAojIDExICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3Vu LXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9saW1pdHMuaCIgMyA0CiMgMSAiL3Vzci9sb2NhbC9s aWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvc3lzbGltaXRz LmgiIDEgMyA0CiMgMjUgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJp czIuNy8zLjAuMy9pbmNsdWRlL3N5c2xpbWl0cy5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKWxp bWl0cy5oCTEuNDgJOTgvMDcvMjAgU01JIgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2ZlYXR1cmVf dGVzdHMuaCIgMSAzIDQKIyAyOCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1z b2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvc3lzbGltaXRzLmgiIDIgMyA0CiMgMSAiL3Vzci9pbmNs dWRlL3N5cy9pc2FfZGVmcy5oIiAxIDMgNAojIDI5ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3Nw YXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMiAzIDQKIyA0 MCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2lu Y2x1ZGUvc3lzbGltaXRzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9zeXMvaW50X2xpbWl0cy5o IiAxIDMgNAojIDkgIi91c3IvaW5jbHVkZS9zeXMvaW50X2xpbWl0cy5oIiAzIDQKI3ByYWdtYSBp ZGVudCAiQCgjKWludF9saW1pdHMuaAkxLjUJOTgvMDEvMDYgU01JIgojIDQ0ICIvdXNyL2luY2x1 ZGUvc3lzL2ludF9saW1pdHMuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5o IiAxIDMgNAojIDQ1ICIvdXNyL2luY2x1ZGUvc3lzL2ludF9saW1pdHMuaCIgMiAzIDQKCgpleHRl cm4gIkMiIHsKIyAxNjIgIi91c3IvaW5jbHVkZS9zeXMvaW50X2xpbWl0cy5oIiAzIDQKfQojIDQx ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5j bHVkZS9zeXNsaW1pdHMuaCIgMiAzIDQKCgoKZXh0ZXJuICJDIiB7CiMgMzA3ICIvdXNyL2xvY2Fs L2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9zeXNsaW1p dHMuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy91bmlzdGQuaCIgMSAzIDQKIyAzMDggIi91 c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRl L3N5c2xpbWl0cy5oIiAyIDMgNAojIDMxOCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5 LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvc3lzbGltaXRzLmgiIDMgNApleHRlcm4gbG9u ZyBfc3lzY29uZihpbnQpOwojIDMyOCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1 bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvc3lzbGltaXRzLmgiIDMgNAp9CiMgMTIgIi91c3Iv bG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL2xp bWl0cy5oIiAyIDMgNAojIDM5ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Ns aW1pdHMuaCIgMiAzCiMgNzMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxn b2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3Rk bGliLmgiIDEgMwojIDM3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRs aWIuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvc3BhcmN2OS1zdW4tc29sYXJp czIuNy9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12 My9iaXRzL3N0ZF9jc3RkbGliLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv Yml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyAzOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i aXRzL3N0ZF9jc3RkbGliLmgiIDIgMwojIDQxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RkX2NzdGRsaWIuaCIgMwojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1z dW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3N0ZGxpYi5oIiAxIDMgNAojIDQyICIvdXNyL2xv Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMiAzCiMgNzMgIi91c3IvbG9j YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAzCm5hbWVzcGFjZSBzdGQKewog IHVzaW5nIDo6ZGl2X3Q7CiAgdXNpbmcgOjpsZGl2X3Q7CgogIHVzaW5nIDo6YWJvcnQ7CiAgdXNp bmcgOjphYnM7CiAgdXNpbmcgOjphdGV4aXQ7CiAgdXNpbmcgOjphdG9mOwogIHVzaW5nIDo6YXRv aTsKICB1c2luZyA6OmF0b2w7CiAgdXNpbmcgOjpic2VhcmNoOwogIHVzaW5nIDo6Y2FsbG9jOwog IHVzaW5nIDo6ZGl2OwogIHVzaW5nIDo6ZXhpdDsKICB1c2luZyA6OmZyZWU7CiAgdXNpbmcgOjpn ZXRlbnY7CiAgdXNpbmcgOjpsYWJzOwogIHVzaW5nIDo6bGRpdjsKICB1c2luZyA6Om1hbGxvYzsK ICB1c2luZyA6Om1ibGVuOwogIHVzaW5nIDo6bWJzdG93Y3M7CiAgdXNpbmcgOjptYnRvd2M7CiAg dXNpbmcgOjpxc29ydDsKICB1c2luZyA6OnJhbmQ7CiAgdXNpbmcgOjpyZWFsbG9jOwogIHVzaW5n IDo6c3JhbmQ7CiAgdXNpbmcgOjpzdHJ0b2Q7CiAgdXNpbmcgOjpzdHJ0b2w7CiAgdXNpbmcgOjpz dHJ0b3VsOwogIHVzaW5nIDo6c3lzdGVtOwogIHVzaW5nIDo6d2NzdG9tYnM7CiAgdXNpbmcgOjp3 Y3RvbWI7CgogIGlubGluZSBsb25nCiAgYWJzKGxvbmcgX19pKSB7IHJldHVybiBsYWJzKF9faSk7 IH0KCiAgaW5saW5lIGxkaXZfdAogIGRpdihsb25nIF9faSwgbG9uZyBfX2opIHsgcmV0dXJuIGxk aXYoX19pLCBfX2opOyB9Cn0KIyA3NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0 bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk X2NzdGRkZWYuaCIgMSAzCiMgNzUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf YWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9uZXciIDEgMwoj IDQwICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL25ldyIgMwojIDEgIi91c3IvbG9jYWwvaW5j bHVkZS9nKystdjMvY3N0ZGRlZiIgMSAzCiMgNDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv bmV3IiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbiIgMSAzCiMg MzkgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uIiAzCmV4dGVybiAiQysrIiB7 CgpuYW1lc3BhY2Ugc3RkCnsKCgoKCgoKICBjbGFzcyBleGNlcHRpb24KICB7CiAgcHVibGljOgog ICAgZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KICAgIHZpcnR1YWwgfmV4Y2VwdGlvbigpIHRocm93 KCk7CgoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCgpIGNvbnN0IHRocm93KCk7CiAgfTsK CgoKICBjbGFzcyBiYWRfZXhjZXB0aW9uIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6 CiAgICBiYWRfZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KICAgIHZpcnR1YWwgfmJhZF9leGNlcHRp b24oKSB0aHJvdygpOwogIH07CgoKICB0eXBlZGVmIHZvaWQgKCp0ZXJtaW5hdGVfaGFuZGxlcikg KCk7CgogIHR5cGVkZWYgdm9pZCAoKnVuZXhwZWN0ZWRfaGFuZGxlcikgKCk7CgoKICB0ZXJtaW5h dGVfaGFuZGxlciBzZXRfdGVybWluYXRlKHRlcm1pbmF0ZV9oYW5kbGVyKSB0aHJvdygpOwoKCiAg dm9pZCB0ZXJtaW5hdGUoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKICB1bmV4 cGVjdGVkX2hhbmRsZXIgc2V0X3VuZXhwZWN0ZWQodW5leHBlY3RlZF9oYW5kbGVyKSB0aHJvdygp OwoKCiAgdm9pZCB1bmV4cGVjdGVkKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoj IDk1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbiIgMwogIGJvb2wgdW5jYXVn aHRfZXhjZXB0aW9uKCkgdGhyb3coKTsKfQoKfQojIDQyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr LXYzL25ldyIgMiAzCgpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZAp7CgoKICBjbGFzcyBi YWRfYWxsb2MgOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF9hbGxvYygp IHRocm93KCkgeyB9CiAgICB2aXJ0dWFsIH5iYWRfYWxsb2MoKSB0aHJvdygpOwogIH07CgogIHN0 cnVjdCBub3Rocm93X3QgeyB9OwogIGV4dGVybiBjb25zdCBub3Rocm93X3Qgbm90aHJvdzsKCgog IHR5cGVkZWYgdm9pZCAoKm5ld19oYW5kbGVyKSgpOwoKICBuZXdfaGFuZGxlciBzZXRfbmV3X2hh bmRsZXIobmV3X2hhbmRsZXIpOwp9CiMgNzYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvbmV3 IiAzCnZvaWQgKm9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9j KTsKdm9pZCAqb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QpIHRocm93IChzdGQ6OmJhZF9hbGxv Yyk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQgKikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBk ZWxldGVbXSh2b2lkICopIHRocm93KCk7CnZvaWQgKm9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCwg Y29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkICpvcGVyYXRvciBuZXdbXShzdGQ6 OnNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRl bGV0ZSh2b2lkICosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRv ciBkZWxldGVbXSh2b2lkICosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKCgppbmxp bmUgdm9pZCAqb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90LCB2b2lkICpwbGFjZSkgdGhyb3coKSB7 IHJldHVybiBwbGFjZTsgfQppbmxpbmUgdm9pZCAqb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3Qs IHZvaWQgKnBsYWNlKSB0aHJvdygpIHsgcmV0dXJuIHBsYWNlOyB9Cgp9CiMgNzYgIi91c3IvbG9j YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgojIDEgIi91c3IvbG9j YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zZndkLmgiIDEgMwojIDM4ICIvdXNyL2xvY2Fs L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAzCgojIDEgIi91c3IvbG9jYWwvaW5j bHVkZS9nKystdjMvc3BhcmN2OS1zdW4tc29sYXJpczIuNy9iaXRzL2MrK2NvbmZpZy5oIiAxIDMK IyA0MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMiAzCiMg MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0cmluZ2Z3ZC5oIiAxIDMKIyAzOCAi L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0cmluZ2Z3ZC5oIiAzCgojIDEgIi91c3Iv bG9jYWwvaW5jbHVkZS9nKystdjMvc3BhcmN2OS1zdW4tc29sYXJpczIuNy9iaXRzL2MrK2NvbmZp Zy5oIiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0cmluZ2Z3ZC5o IiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4KICAgIHN0cnVj dCBjaGFyX3RyYWl0czsKCiAgdGVtcGxhdGU8PiBzdHJ1Y3QgY2hhcl90cmFpdHM8Y2hhcj47CgoK CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGFsbG9jYXRvcjsKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0No YXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAg ICBjbGFzcyBiYXNpY19zdHJpbmc7CgogIHR5cGVkZWYgYmFzaWNfc3RyaW5nPGNoYXI+IHN0cmlu ZzsKCgoKfQojIDQxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5o IiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvZnBvcy5oIiAxIDMKIyAz OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Zwb3MuaCIgMwoKIyAxICIvdXNyL2xv Y2FsL2luY2x1ZGUvZysrLXYzL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvYml0cy9jKytpby5oIiAx IDMKIyAzNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43 L2JpdHMvYysraW8uaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvY3N0ZGlvIiAx IDMKIyAzMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9jc3RkaW8iIDMKIyAxICIvdXNyL2xv Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAxIDMKIyAzNyAiL3Vzci9sb2Nh bC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkaW8uaCIgMwojIDEgIi91c3IvbG9jYWwvaW5j bHVkZS9nKystdjMvc3BhcmN2OS1zdW4tc29sYXJpczIuNy9iaXRzL2MrK2NvbmZpZy5oIiAxIDMK IyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkaW8uaCIgMiAzCiMg MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwojIDM5 ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAyIDMKIyA0MSAi L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkaW8uaCIgMwojIDEgIi91c3Iv bG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3N0 ZGlvLmgiIDEgMyA0CiMgNDIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0 ZGlvLmgiIDIgMwojIDg2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRp by5oIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6RklMRTsKICB1c2luZyA6OmZwb3NfdDsK CiAgdXNpbmcgOjpjbGVhcmVycjsKICB1c2luZyA6OmZjbG9zZTsKICB1c2luZyA6OmZlb2Y7CiAg dXNpbmcgOjpmZXJyb3I7CiAgdXNpbmcgOjpmZmx1c2g7CiAgdXNpbmcgOjpmZ2V0YzsKICB1c2lu ZyA6OmZnZXRwb3M7CiAgdXNpbmcgOjpmZ2V0czsKICB1c2luZyA6OmZvcGVuOwogIHVzaW5nIDo6 ZnByaW50ZjsKICB1c2luZyA6OmZwdXRjOwogIHVzaW5nIDo6ZnB1dHM7CiAgdXNpbmcgOjpmcmVh ZDsKICB1c2luZyA6OmZyZW9wZW47CiAgdXNpbmcgOjpmc2NhbmY7CiAgdXNpbmcgOjpmc2VlazsK ICB1c2luZyA6OmZzZXRwb3M7CiAgdXNpbmcgOjpmdGVsbDsKICB1c2luZyA6OmZ3cml0ZTsKICB1 c2luZyA6OmdldGM7CiAgdXNpbmcgOjpnZXRjaGFyOwogIHVzaW5nIDo6Z2V0czsKICB1c2luZyA6 OnBlcnJvcjsKICB1c2luZyA6OnByaW50ZjsKICB1c2luZyA6OnB1dGM7CiAgdXNpbmcgOjpwdXRj aGFyOwogIHVzaW5nIDo6cHV0czsKICB1c2luZyA6OnJlbW92ZTsKICB1c2luZyA6OnJlbmFtZTsK ICB1c2luZyA6OnJld2luZDsKICB1c2luZyA6OnNjYW5mOwogIHVzaW5nIDo6c2V0YnVmOwogIHVz aW5nIDo6c2V0dmJ1ZjsKICB1c2luZyA6OnNwcmludGY7CiAgdXNpbmcgOjpzc2NhbmY7CiAgdXNp bmcgOjp0bXBmaWxlOwogIHVzaW5nIDo6dG1wbmFtOwogIHVzaW5nIDo6dW5nZXRjOwogIHVzaW5n IDo6dmZwcmludGY7CiAgdXNpbmcgOjp2cHJpbnRmOwogIHVzaW5nIDo6dnNwcmludGY7Cn0KIyAz MiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9jc3RkaW8iIDIgMwojIDM2ICIvdXNyL2xvY2Fs L2luY2x1ZGUvZysrLXYzL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvYml0cy9jKytpby5oIiAyIDMK IyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2NzdGRkZWYiIDEgMwojIDM3ICIvdXNyL2xv Y2FsL2luY2x1ZGUvZysrLXYzL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvYml0cy9jKytpby5oIiAy IDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcv Yml0cy9ndGhyLmgiIDEgMwojIDk4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL3NwYXJjdjkt c3VuLXNvbGFyaXMyLjcvYml0cy9ndGhyLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr LXYzL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvYml0cy9ndGhyLWRlZmF1bHQuaCIgMSAzCiMgMzcg Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvc3BhcmN2OS1zdW4tc29sYXJpczIuNy9iaXRzL2d0 aHItZGVmYXVsdC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1z b2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvcHRocmVhZC5oIiAxIDMgNAojIDE4ICIvdXNyL2xvY2Fs L2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9wdGhyZWFk LmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpcHRocmVhZC5oCTEuMjYJOTgvMDQvMTIgU01JIgoK CiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4z L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMyA0CiMgMjIgIi91c3IvbG9jYWwvbGliL2djYy1saWIv c3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzIDQKIyAx ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMgNAojIDIzICIvdXNyL2xvY2FsL2xpYi9nY2MtbGli L3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMyA0CiMg MSAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDEgMyA0CiMgMTEgIi91c3IvaW5jbHVkZS9zY2hlZC5o IiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKXNjaGVkLmgJMS45CTk4LzAxLzE2IFNNSSIKCiMgMSAi L3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1 ZGUvc3lzL3R5cGVzLmgiIDEgMyA0CiMgMTQgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAyIDMgNAoj IDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMyA0CiMgMTUgIi91c3IvaW5jbHVkZS9zY2hlZC5o IiAyIDMgNAoKCmV4dGVybiAiQyIgewoKCnN0cnVjdCBzY2hlZF9wYXJhbSB7CiAgICAgICAgaW50 IHNjaGVkX3ByaW9yaXR5OwogICAgICAgIGludCBzY2hlZF9uaWNlbGltOwogICAgICAgIGludCBz Y2hlZF9uaWNlOwogICAgICAgIGludCBzY2hlZF9wYWRbNl07CgoKCn07CiMgNDQgIi91c3IvaW5j bHVkZS9zY2hlZC5oIiAzIDQKaW50IHNjaGVkX2dldHBhcmFtKHBpZF90IHBpZCwgc3RydWN0IHNj aGVkX3BhcmFtICpwYXJhbSk7CmludCBzY2hlZF9zZXRwYXJhbShwaWRfdCBwaWQsIGNvbnN0IHN0 cnVjdCBzY2hlZF9wYXJhbSAqcGFyYW0pOwppbnQgc2NoZWRfZ2V0c2NoZWR1bGVyKHBpZF90IHBp ZCk7CmludCBzY2hlZF9zZXRzY2hlZHVsZXIocGlkX3QgcGlkLCBpbnQgcG9saWN5LAogICAgICAg ICAgICAgICAgY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpwYXJhbSk7CmludCBzY2hlZF95aWVs ZCh2b2lkKTsKaW50IHNjaGVkX2dldF9wcmlvcml0eV9tYXgoaW50IHBvbGljeSk7CmludCBzY2hl ZF9nZXRfcHJpb3JpdHlfbWluKGludCBwb2xpY3kpOwppbnQgc2NoZWRfcnJfZ2V0X2ludGVydmFs KHBpZF90IHBpZCwgc3RydWN0IHRpbWVzcGVjICppbnRlcnZhbCk7CiMgNjUgIi91c3IvaW5jbHVk ZS9zY2hlZC5oIiAzIDQKfQojIDI0ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3Vu LXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMyA0CgoKCmV4dGVybiAiQyIg ewojIDEwMyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMu MC4zL2luY2x1ZGUvcHRocmVhZC5oIiAzIDQKdHlwZWRlZiBzdHJ1Y3QgX2NsZWFudXAgewogICAg ICAgIHVpbnRwdHJfdCBwdGhyZWFkX2NsZWFudXBfcGFkWzRdOwp9IF9jbGVhbnVwX3Q7CgoKCnZv aWQgX19wdGhyZWFkX2NsZWFudXBfcHVzaCh2b2lkICgqcm91dGluZSkodm9pZCAqKSwgdm9pZCAq YXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhZGRyX3QgZnAs IF9jbGVhbnVwX3QgKmluZm8pOwp2b2lkIF9fcHRocmVhZF9jbGVhbnVwX3BvcChpbnQgZXgsIF9j bGVhbnVwX3QgKmluZm8pOwpjYWRkcl90IF9nZXRmcCh2b2lkKTsKIyAxMzcgIi91c3IvbG9jYWwv bGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3B0aHJlYWQu aCIgMyA0CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2luaXQocHRocmVhZF9hdHRyX3QgKik7CmV4 dGVybiBpbnQgcHRocmVhZF9hdHRyX2Rlc3Ryb3kocHRocmVhZF9hdHRyX3QgKik7CmV4dGVybiBp bnQgcHRocmVhZF9hdHRyX3NldHN0YWNrc2l6ZShwdGhyZWFkX2F0dHJfdCAqLCBzaXplX3QpOwpl eHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja3NpemUoY29uc3QgcHRocmVhZF9hdHRyX3Qg Kiwgc2l6ZV90ICopOwpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzdGFja2FkZHIocHRocmVh ZF9hdHRyX3QgKiwgdm9pZCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2thZGRy KGNvbnN0IHB0aHJlYWRfYXR0cl90ICosIHZvaWQgKiopOwpleHRlcm4gaW50IHB0aHJlYWRfYXR0 cl9zZXRkZXRhY2hzdGF0ZShwdGhyZWFkX2F0dHJfdCAqLCBpbnQpOwpleHRlcm4gaW50IHB0aHJl YWRfYXR0cl9nZXRkZXRhY2hzdGF0ZShjb25zdCBwdGhyZWFkX2F0dHJfdCAqLCBpbnQgKik7CmV4 dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjb3BlKHB0aHJlYWRfYXR0cl90ICosIGludCk7CmV4 dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjb3BlKGNvbnN0IHB0aHJlYWRfYXR0cl90ICosIGlu dCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0aW5oZXJpdHNjaGVkKHB0aHJlYWRfYXR0 cl90ICosIGludCk7CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGluaGVyaXRzY2hlZChjb25z dCBwdGhyZWFkX2F0dHJfdCAqLCBpbnQgKik7CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNj aGVkcG9saWN5KHB0aHJlYWRfYXR0cl90ICosIGludCk7CmV4dGVybiBpbnQgcHRocmVhZF9hdHRy X2dldHNjaGVkcG9saWN5KGNvbnN0IHB0aHJlYWRfYXR0cl90ICosIGludCAqKTsKZXh0ZXJuIGlu dCBwdGhyZWFkX2F0dHJfc2V0c2NoZWRwYXJhbShwdGhyZWFkX2F0dHJfdCAqLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICop OwpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBhcmFtKGNvbnN0IHB0aHJlYWRfYXR0 cl90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2No ZWRfcGFyYW0gKik7CmV4dGVybiBpbnQgcHRocmVhZF9jcmVhdGUocHRocmVhZF90ICosIGNvbnN0 IHB0aHJlYWRfYXR0cl90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAq ICgqKSh2b2lkICopLCB2b2lkICopOwpleHRlcm4gaW50IHB0aHJlYWRfb25jZShwdGhyZWFkX29u Y2VfdCAqLCB2b2lkICgqKSh2b2lkKSk7CmV4dGVybiBpbnQgcHRocmVhZF9qb2luKHB0aHJlYWRf dCwgdm9pZCAqKik7CmV4dGVybiBpbnQgcHRocmVhZF9kZXRhY2gocHRocmVhZF90KTsKZXh0ZXJu IHZvaWQgcHRocmVhZF9leGl0KHZvaWQgKik7CmV4dGVybiBpbnQgcHRocmVhZF9jYW5jZWwocHRo cmVhZF90KTsKZXh0ZXJuIGludCBwdGhyZWFkX3NldHNjaGVkcGFyYW0ocHRocmVhZF90LCBpbnQs IGNvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX2dldHNjaGVk cGFyYW0ocHRocmVhZF90LCBpbnQgKiwgc3RydWN0IHNjaGVkX3BhcmFtICopOwpleHRlcm4gaW50 IHB0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUoaW50LCBpbnQgKik7CmV4dGVybiBpbnQgcHRocmVhZF9z ZXRjYW5jZWx0eXBlKGludCwgaW50ICopOwpleHRlcm4gdm9pZCBwdGhyZWFkX3Rlc3RjYW5jZWwo dm9pZCk7CmV4dGVybiBpbnQgcHRocmVhZF9lcXVhbChwdGhyZWFkX3QsIHB0aHJlYWRfdCk7CmV4 dGVybiBpbnQgcHRocmVhZF9rZXlfY3JlYXRlKHB0aHJlYWRfa2V5X3QgKiwgdm9pZCAoKikodm9p ZCAqKSk7CmV4dGVybiBpbnQgcHRocmVhZF9rZXlfZGVsZXRlKHB0aHJlYWRfa2V5X3QpOwpleHRl cm4gaW50IHB0aHJlYWRfc2V0c3BlY2lmaWMocHRocmVhZF9rZXlfdCwgY29uc3Qgdm9pZCAqKTsK ZXh0ZXJuIHZvaWQgKnB0aHJlYWRfZ2V0c3BlY2lmaWMocHRocmVhZF9rZXlfdCk7CmV4dGVybiBw dGhyZWFkX3QgcHRocmVhZF9zZWxmKHZvaWQpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4 YXR0cl9pbml0KHB0aHJlYWRfbXV0ZXhhdHRyX3QgKik7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRl eGF0dHJfZGVzdHJveShwdGhyZWFkX211dGV4YXR0cl90ICopOwpleHRlcm4gaW50IHB0aHJlYWRf bXV0ZXhhdHRyX3NldHBzaGFyZWQocHRocmVhZF9tdXRleGF0dHJfdCAqLCBpbnQpOwpleHRlcm4g aW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHBzaGFyZWQoY29uc3QgcHRocmVhZF9tdXRleGF0dHJf dCAqLCBpbnQgKik7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0cHJvdG9jb2wocHRo cmVhZF9tdXRleGF0dHJfdCAqLCBpbnQpOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dl dHByb3RvY29sKGNvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKiwgaW50ICopOwpleHRlcm4gaW50 IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHByaW9jZWlsaW5nKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKiwg aW50KTsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9nZXRwcmlvY2VpbGluZyhjb25zdCBw dGhyZWFkX211dGV4YXR0cl90ICosIGludCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2lu aXQocHRocmVhZF9tdXRleF90ICosIGNvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKik7CmV4dGVy biBpbnQgcHRocmVhZF9tdXRleF9kZXN0cm95KHB0aHJlYWRfbXV0ZXhfdCAqKTsKZXh0ZXJuIGlu dCBwdGhyZWFkX211dGV4X2xvY2socHRocmVhZF9tdXRleF90ICopOwpleHRlcm4gaW50IHB0aHJl YWRfbXV0ZXhfdW5sb2NrKHB0aHJlYWRfbXV0ZXhfdCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX211 dGV4X3RyeWxvY2socHRocmVhZF9tdXRleF90ICopOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhf c2V0cHJpb2NlaWxpbmcocHRocmVhZF9tdXRleF90ICosIGludCwgaW50ICopOwpleHRlcm4gaW50 IHB0aHJlYWRfbXV0ZXhfZ2V0cHJpb2NlaWxpbmcocHRocmVhZF9tdXRleF90ICosIGludCAqKTsK ZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2luaXQocHRocmVhZF9jb25kYXR0cl90ICopOwpl eHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJfZGVzdHJveShwdGhyZWFkX2NvbmRhdHRyX3QgKik7 CmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9zZXRwc2hhcmVkKHB0aHJlYWRfY29uZGF0dHJf dCAqLCBpbnQpOwpleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJfZ2V0cHNoYXJlZChjb25zdCBw dGhyZWFkX2NvbmRhdHRyX3QgKiwgaW50ICopOwpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9pbml0 KHB0aHJlYWRfY29uZF90ICosIGNvbnN0IHB0aHJlYWRfY29uZGF0dHJfdCAqKTsKZXh0ZXJuIGlu dCBwdGhyZWFkX2NvbmRfZGVzdHJveShwdGhyZWFkX2NvbmRfdCAqKTsKZXh0ZXJuIGludCBwdGhy ZWFkX2NvbmRfYnJvYWRjYXN0KHB0aHJlYWRfY29uZF90ICopOwpleHRlcm4gaW50IHB0aHJlYWRf Y29uZF9zaWduYWwocHRocmVhZF9jb25kX3QgKik7CmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3dh aXQocHRocmVhZF9jb25kX3QgKiwgcHRocmVhZF9tdXRleF90ICopOwpleHRlcm4gaW50IHB0aHJl YWRfY29uZF90aW1lZHdhaXQocHRocmVhZF9jb25kX3QgKiwgcHRocmVhZF9tdXRleF90ICosCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNw ZWMgKik7CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGd1YXJkc2l6ZShjb25zdCBwdGhyZWFk X2F0dHJfdCAqLCBzaXplX3QgKik7CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGd1YXJkc2l6 ZShwdGhyZWFkX2F0dHJfdCAqLCBzaXplX3QpOwpleHRlcm4gaW50IHB0aHJlYWRfZ2V0Y29uY3Vy cmVuY3kodm9pZCk7CmV4dGVybiBpbnQgcHRocmVhZF9zZXRjb25jdXJyZW5jeShpbnQgbmV3dmFs KTsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlKHB0aHJlYWRfbXV0ZXhhdHRy X3QgKiwgaW50KTsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9nZXR0eXBlKGNvbnN0IHB0 aHJlYWRfbXV0ZXhhdHRyX3QgKiwgaW50ICopOwpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX2lu aXQocHRocmVhZF9yd2xvY2tfdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IHB0aHJlYWRfcndsb2NrYXR0cl90ICopOwpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX2Rl c3Ryb3kocHRocmVhZF9yd2xvY2tfdCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19yZGxv Y2socHRocmVhZF9yd2xvY2tfdCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190cnlyZGxv Y2socHRocmVhZF9yd2xvY2tfdCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja193cmxvY2so cHRocmVhZF9yd2xvY2tfdCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190cnl3cmxvY2so cHRocmVhZF9yd2xvY2tfdCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja191bmxvY2socHRo cmVhZF9yd2xvY2tfdCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfaW5pdChwdGhy ZWFkX3J3bG9ja2F0dHJfdCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfZGVzdHJv eShwdGhyZWFkX3J3bG9ja2F0dHJfdCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJf Z2V0cHNoYXJlZChjb25zdCBwdGhyZWFkX3J3bG9ja2F0dHJfdCAqLCBpbnQgKik7CmV4dGVybiBp bnQgcHRocmVhZF9yd2xvY2thdHRyX3NldHBzaGFyZWQocHRocmVhZF9yd2xvY2thdHRyX3QgKiwg aW50KTsKIyAzMTIgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIu Ny8zLjAuMy9pbmNsdWRlL3B0aHJlYWQuaCIgMyA0Cn0KIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRl L2crKy12My9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDIgMwoK dHlwZWRlZiBwdGhyZWFkX2tleV90IF9fZ3RocmVhZF9rZXlfdDsKdHlwZWRlZiBwdGhyZWFkX29u Y2VfdCBfX2d0aHJlYWRfb25jZV90Owp0eXBlZGVmIHB0aHJlYWRfbXV0ZXhfdCBfX2d0aHJlYWRf bXV0ZXhfdDsKCgoKCgoKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfb25jZQojcHJhZ21hIHdlYWsgcHRo cmVhZF9rZXlfY3JlYXRlCiNwcmFnbWEgd2VhayBwdGhyZWFkX2tleV9kZWxldGUKI3ByYWdtYSB3 ZWFrIHB0aHJlYWRfZ2V0c3BlY2lmaWMKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfc2V0c3BlY2lmaWMK I3ByYWdtYSB3ZWFrIHB0aHJlYWRfY3JlYXRlCgojcHJhZ21hIHdlYWsgcHRocmVhZF9tdXRleF9s b2NrCiNwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4X3RyeWxvY2sKI3ByYWdtYSB3ZWFrIHB0aHJl YWRfbXV0ZXhfdW5sb2NrCiMgODAgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvc3BhcmN2OS1z dW4tc29sYXJpczIuNy9iaXRzL2d0aHItZGVmYXVsdC5oIiAzCnN0YXRpYyB2b2lkICpfX2d0aHJl YWRfYWN0aXZlX3B0ciA9ICh2b2lkICopICZwdGhyZWFkX2NyZWF0ZTsKCnN0YXRpYyBpbmxpbmUg aW50Cl9fZ3RocmVhZF9hY3RpdmVfcCAodm9pZCkKewogIHJldHVybiBfX2d0aHJlYWRfYWN0aXZl X3B0ciAhPSAwOwp9CiMgNDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL3NwYXJjdjktc3Vu LXNvbGFyaXMyLjcvYml0cy9ndGhyLWRlZmF1bHQuaCIgMwpzdGF0aWMgaW5saW5lIGludApfX2d0 aHJlYWRfb25jZSAoX19ndGhyZWFkX29uY2VfdCAqb25jZSwgdm9pZCAoKmZ1bmMpICh2b2lkKSkK ewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1cm4gcHRocmVhZF9vbmNlIChv bmNlLCBmdW5jKTsKICBlbHNlCiAgICByZXR1cm4gLTE7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9f Z3RocmVhZF9rZXlfY3JlYXRlIChfX2d0aHJlYWRfa2V5X3QgKmtleSwgdm9pZCAoKmR0b3IpICh2 b2lkICopKQp7CiAgcmV0dXJuIHB0aHJlYWRfa2V5X2NyZWF0ZSAoa2V5LCBkdG9yKTsKfQoKc3Rh dGljIGlubGluZSBpbnQKX19ndGhyZWFkX2tleV9kdG9yIChfX2d0aHJlYWRfa2V5X3Qga2V5LCB2 b2lkICpwdHIpCnsKCiAgaWYgKHB0cikKICAgIHJldHVybiBwdGhyZWFkX3NldHNwZWNpZmljIChr ZXksIDApOwogIGVsc2UKICAgIHJldHVybiAwOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJl YWRfa2V5X2RlbGV0ZSAoX19ndGhyZWFkX2tleV90IGtleSkKewogIHJldHVybiBwdGhyZWFkX2tl eV9kZWxldGUgKGtleSk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCAqCl9fZ3RocmVhZF9nZXRzcGVj aWZpYyAoX19ndGhyZWFkX2tleV90IGtleSkKewogIHJldHVybiBwdGhyZWFkX2dldHNwZWNpZmlj IChrZXkpOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfc2V0c3BlY2lmaWMgKF9fZ3Ro cmVhZF9rZXlfdCBrZXksIGNvbnN0IHZvaWQgKnB0cikKewogIHJldHVybiBwdGhyZWFkX3NldHNw ZWNpZmljIChrZXksIHB0cik7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9tdXRleF9s b2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpCnsKICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9w ICgpKQogICAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhfbG9jayAobXV0ZXgpOwogIGVsc2UKICAgIHJl dHVybiAwOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfbXV0ZXhfdHJ5bG9jayAoX19n dGhyZWFkX211dGV4X3QgKm11dGV4KQp7CiAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKICAg IHJldHVybiBwdGhyZWFkX211dGV4X3RyeWxvY2sgKG11dGV4KTsKICBlbHNlCiAgICByZXR1cm4g MDsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX211dGV4X3VubG9jayAoX19ndGhyZWFk X211dGV4X3QgKm11dGV4KQp7CiAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKICAgIHJldHVy biBwdGhyZWFkX211dGV4X3VubG9jayAobXV0ZXgpOwogIGVsc2UKICAgIHJldHVybiAwOwp9CiMg OTkgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvc3BhcmN2OS1zdW4tc29sYXJpczIuNy9iaXRz L2d0aHIuaCIgMiAzCiMgMzggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvc3BhcmN2OS1zdW4t c29sYXJpczIuNy9iaXRzL2MrK2lvLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHR5cGVkZWYg bG9uZyBzdHJlYW1vZmY7CiAgdHlwZWRlZiBwdHJkaWZmX3Qgc3RyZWFtc2l6ZTsKCgoKICB0eXBl ZGVmIGZwb3NfdCBfX2Nfc3RyZWFtcG9zOwoKICB0eXBlZGVmIF9fZ3RocmVhZF9tdXRleF90IF9f Y19sb2NrOwoKCgogIHR5cGVkZWYgRklMRSBfX2NfZmlsZV90eXBlOwoKCiAgc3RydWN0IF9faW9z X2ZsYWdzCiAgewogICAgdHlwZWRlZiBzaG9ydCBfX2ludF90eXBlOwoKICAgIHN0YXRpYyBjb25z dCBfX2ludF90eXBlIF9TX2Jvb2xhbHBoYSA9IDB4MDAwMTsKICAgIHN0YXRpYyBjb25zdCBfX2lu dF90eXBlIF9TX2RlYyA9IDB4MDAwMjsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Zp eGVkID0gMHgwMDA0OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaGV4ID0gMHgwMDA4 OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaW50ZXJuYWwgPSAweDAwMTA7CiAgICBz dGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19sZWZ0ID0gMHgwMDIwOwogICAgc3RhdGljIGNvbnN0 IF9faW50X3R5cGUgX1Nfb2N0ID0gMHgwMDQwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUg X1NfcmlnaHQgPSAweDAwODA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zY2llbnRp ZmljID0gMHgwMTAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd2Jhc2UgPSAw eDAyMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93cG9pbnQgPSAweDA0MDA7 CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93cG9zID0gMHgwODAwOwogICAgc3Rh dGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2tpcHdzID0gMHgxMDAwOwogICAgc3RhdGljIGNvbnN0 IF9faW50X3R5cGUgX1NfdW5pdGJ1ZiA9IDB4MjAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90 eXBlIF9TX3VwcGVyY2FzZSA9IDB4NDAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T X2FkanVzdGZpZWxkID0gMHgwMDIwIHwgMHgwMDgwIHwgMHgwMDEwOwogICAgc3RhdGljIGNvbnN0 IF9faW50X3R5cGUgX1NfYmFzZWZpZWxkID0gMHgwMDAyIHwgMHgwMDQwIHwgMHgwMDA4OwogICAg c3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZmxvYXRmaWVsZCA9IDB4MDEwMCB8IDB4MDAwNDsK CgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYmFkYml0ID0gMHgwMTsKICAgIHN0YXRp YyBjb25zdCBfX2ludF90eXBlIF9TX2VvZmJpdCA9IDB4MDI7CiAgICBzdGF0aWMgY29uc3QgX19p bnRfdHlwZSBfU19mYWlsYml0ID0gMHgwNDsKCgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUg X1NfYXBwID0gMHgwMTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2F0ZSA9IDB4MDI7 CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19iaW4gPSAweDA0OwogICAgc3RhdGljIGNv bnN0IF9faW50X3R5cGUgX1NfaW4gPSAweDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUg X1Nfb3V0ID0gMHgxMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3RydW5jID0gMHgy MDsKICB9Owp9CiMgNDAgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9mcG9zLmgiIDIg MwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djaGFyLmgiIDEgMwoj IDM3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y2hhci5oIiAzCiMgMSAi L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43L2JpdHMvYysr Y29uZmlnLmgiIDEgMwojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3 Y2hhci5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRk ZWYuaCIgMSAzCiMgMzkgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djaGFy LmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3RpbWUuaCIg MSAzCiMgMzcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3RpbWUuaCIgMwoj IDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyAz OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jdGltZS5oIiAyIDMKIyA0MCAi L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jdGltZS5oIiAzCiMgMSAiL3Vzci9p bmNsdWRlL3RpbWUuaCIgMSAzIDQKIyA0MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz L3N0ZF9jdGltZS5oIiAyIDMKIyA1MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0 ZF9jdGltZS5oIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6Y2xvY2tfdDsKICB1c2luZyA6 OnRpbWVfdDsKICB1c2luZyA6OnRtOwoKICB1c2luZyA6OmNsb2NrOwogIHVzaW5nIDo6ZGlmZnRp bWU7CiAgdXNpbmcgOjpta3RpbWU7CiAgdXNpbmcgOjp0aW1lOwogIHVzaW5nIDo6YXNjdGltZTsK ICB1c2luZyA6OmN0aW1lOwogIHVzaW5nIDo6Z210aW1lOwogIHVzaW5nIDo6bG9jYWx0aW1lOwog IHVzaW5nIDo6c3RyZnRpbWU7Cn0KIyA0MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz L3N0ZF9jd2NoYXIuaCIgMiAzCiMgNDMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z dGRfY3djaGFyLmgiIDMKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNv bGFyaXMyLjcvMy4wLjMvaW5jbHVkZS93Y2hhci5oIiAxIDMgNAojIDE4ICIvdXNyL2xvY2FsL2xp Yi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS93Y2hhci5oIiAz IDQKI3ByYWdtYSBpZGVudCAiQCgjKXdjaGFyLmgJMS4zMQk5OC8wNS8wNCBTTUkiCgojIDEgIi91 c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNAojIDIxICIvdXNyL2xvY2FsL2xp Yi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS93Y2hhci5oIiAy IDMgNAojIDEgIi91c3IvaW5jbHVkZS9zeXMvaXNhX2RlZnMuaCIgMSAzIDQKIyAyMiAiL3Vzci9s b2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvd2No YXIuaCIgMiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvc3RkaW9fdGFnLmgiIDEgMyA0CiMgMjMgIi91 c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRl L3djaGFyLmgiIDIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3djaGFyX2ltcGwuaCIgMSAzIDQKIyA5 ICIvdXNyL2luY2x1ZGUvd2NoYXJfaW1wbC5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKXdjaGFy X2ltcGwuaAkxLjIJOTgvMDIvMjcgU01JIgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZz LmgiIDEgMyA0CiMgMTIgIi91c3IvaW5jbHVkZS93Y2hhcl9pbXBsLmgiIDIgMyA0CgoKZXh0ZXJu ICJDIiB7CgoKCnR5cGVkZWYgc3RydWN0IHsKCiAgICAgICAgbG9uZyBfX2ZpbGxlcls0XTsKCgoK fSBfX21ic3RhdGVfdDsKCgoKfQojIDI0ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjdjkt c3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS93Y2hhci5oIiAyIDMgNAojIDEgIi91c3IvaW5j bHVkZS90aW1lLmgiIDEgMyA0CiMgMjUgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1z dW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3djaGFyLmgiIDIgMyA0CgoKCgojIDEgIi91c3Iv bG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3N0 ZGlvLmgiIDEgMyA0CiMgMzAgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29s YXJpczIuNy8zLjAuMy9pbmNsdWRlL3djaGFyLmgiIDIgMyA0CgoKCiMgMSAiL3Vzci9pbmNsdWRl L2N0eXBlLmgiIDEgMyA0CiMgMzQgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4t c29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3djaGFyLmgiIDIgMyA0CiMgMSAiL3Vzci9sb2NhbC9s aWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvc3RkZGVmLmgi IDEgMyA0CiMgMzUgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4tc29sYXJpczIu Ny8zLjAuMy9pbmNsdWRlL3djaGFyLmgiIDIgMyA0CgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3Zh X2xpc3QuaCIgMSAzIDQKIyAzOCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1z b2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvd2NoYXIuaCIgMiAzIDQKCgpleHRlcm4gIkMiIHsKIyA1 OSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2lu Y2x1ZGUvd2NoYXIuaCIgMyA0CnR5cGVkZWYgaW50IHdpbnRfdDsKCgoKCgoKCnR5cGVkZWYgaW50 IHdjdHlwZV90OwojIDEwMyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xh cmlzMi43LzMuMC4zL2luY2x1ZGUvd2NoYXIuaCIgMyA0CnR5cGVkZWYgX19tYnN0YXRlX3QgbWJz dGF0ZV90OwojIDExMyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlz Mi43LzMuMC4zL2luY2x1ZGUvd2NoYXIuaCIgMyA0CmV4dGVybiBpbnQgaXN3YWxwaGEod2ludF90 KTsKZXh0ZXJuIGludCBpc3d1cHBlcih3aW50X3QpOwpleHRlcm4gaW50IGlzd2xvd2VyKHdpbnRf dCk7CmV4dGVybiBpbnQgaXN3ZGlnaXQod2ludF90KTsKZXh0ZXJuIGludCBpc3d4ZGlnaXQod2lu dF90KTsKZXh0ZXJuIGludCBpc3dhbG51bSh3aW50X3QpOwpleHRlcm4gaW50IGlzd3NwYWNlKHdp bnRfdCk7CmV4dGVybiBpbnQgaXN3cHVuY3Qod2ludF90KTsKZXh0ZXJuIGludCBpc3dwcmludCh3 aW50X3QpOwpleHRlcm4gaW50IGlzd2dyYXBoKHdpbnRfdCk7CmV4dGVybiBpbnQgaXN3Y250cmwo d2ludF90KTsKZXh0ZXJuIGludCBpc3djdHlwZSh3aW50X3QsIHdjdHlwZV90KTsKZXh0ZXJuIHdp bnRfdCB0b3dsb3dlcih3aW50X3QpOwpleHRlcm4gd2ludF90IHRvd3VwcGVyKHdpbnRfdCk7CmV4 dGVybiB3aW50X3QgZmdldHdjKF9fRklMRSAqKTsKZXh0ZXJuIHdjaGFyX3QgKmZnZXR3cyh3Y2hh cl90ICosIGludCwgX19GSUxFICopOwpleHRlcm4gd2ludF90IGZwdXR3Yyh3aW50X3QsIF9fRklM RSAqKTsKZXh0ZXJuIGludCBmcHV0d3MoY29uc3Qgd2NoYXJfdCAqLCBfX0ZJTEUgKik7CmV4dGVy biB3aW50X3QgdW5nZXR3Yyh3aW50X3QsIF9fRklMRSAqKTsKZXh0ZXJuIHdpbnRfdCBnZXR3Yyhf X0ZJTEUgKik7CmV4dGVybiB3aW50X3QgZ2V0d2NoYXIodm9pZCk7CmV4dGVybiB3aW50X3QgcHV0 d2Mod2ludF90LCBfX0ZJTEUgKik7CmV4dGVybiB3aW50X3QgcHV0d2NoYXIod2ludF90KTsKZXh0 ZXJuIGRvdWJsZSB3Y3N0b2QoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90ICoqKTsKZXh0ZXJuIGxv bmcgd2NzdG9sKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCAqKiwgaW50KTsKZXh0ZXJuIHVuc2ln bmVkIGxvbmcgd2NzdG91bChjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QgKiosIGludCk7CmV4dGVy biB3Y2hhcl90ICp3Y3NjYXQod2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOwpleHRlcm4gd2No YXJfdCAqd2NzY2hyKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCk7CmV4dGVybiBpbnQgd2NzY21w KGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKZXh0ZXJuIGludCB3Y3Njb2xsKGNv bnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKZXh0ZXJuIHdjaGFyX3QgKndjc2NweSh3 Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CmV4dGVybiBzaXplX3Qgd2NzY3Nwbihjb25zdCB3 Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CmV4dGVybiBzaXplX3Qgd2NzbGVuKGNvbnN0IHdj aGFyX3QgKik7CmV4dGVybiB3Y2hhcl90ICp3Y3NuY2F0KHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJf dCAqLCBzaXplX3QpOwpleHRlcm4gaW50IHdjc25jbXAoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3 Y2hhcl90ICosIHNpemVfdCk7CmV4dGVybiB3Y2hhcl90ICp3Y3NuY3B5KHdjaGFyX3QgKiwgY29u c3Qgd2NoYXJfdCAqLCBzaXplX3QpOwpleHRlcm4gd2NoYXJfdCAqd2NzcGJyayhjb25zdCB3Y2hh cl90ICosIGNvbnN0IHdjaGFyX3QgKik7CmV4dGVybiB3Y2hhcl90ICp3Y3NyY2hyKGNvbnN0IHdj aGFyX3QgKiwgd2NoYXJfdCk7CmV4dGVybiBzaXplX3Qgd2Nzc3BuKGNvbnN0IHdjaGFyX3QgKiwg Y29uc3Qgd2NoYXJfdCAqKTsKZXh0ZXJuIHdjaGFyX3QgKndjc3djcyhjb25zdCB3Y2hhcl90ICos IGNvbnN0IHdjaGFyX3QgKik7CmV4dGVybiBpbnQgd2Nzd2lkdGgoY29uc3Qgd2NoYXJfdCAqLCBz aXplX3QpOwpleHRlcm4gc2l6ZV90IHdjc3hmcm0od2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICos IHNpemVfdCk7CmV4dGVybiBpbnQgd2N3aWR0aChjb25zdCB3Y2hhcl90KTsKZXh0ZXJuIHdjdHlw ZV90IHdjdHlwZShjb25zdCBjaGFyICopOwojIDE2OSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9z cGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvd2NoYXIuaCIgMyA0CmV4dGVybiB3 Y2hhcl90ICpfX3djc3Rva194cGc1KHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90 ICoqKTsKZXh0ZXJuIHNpemVfdCBfX3djc2Z0aW1lX3hwZzUod2NoYXJfdCAqLCBzaXplX3QsIGNv bnN0IHdjaGFyX3QgKiwKICAgICAgICBjb25zdCBzdHJ1Y3QgdG0gKik7CiMgMTgwICIvdXNyL2xv Y2FsL2xpYi9nY2MtbGliL3NwYXJjdjktc3VuLXNvbGFyaXMyLjcvMy4wLjMvaW5jbHVkZS93Y2hh ci5oIiAzIDQKZXh0ZXJuIHdpbnRfdCBidG93YyhpbnQpOwpleHRlcm4gaW50IGZ3cHJpbnRmKF9f RklMRSAqLCBjb25zdCB3Y2hhcl90ICosIC4uLik7CmV4dGVybiBpbnQgZndzY2FuZihfX0ZJTEUg KiwgY29uc3Qgd2NoYXJfdCAqLCAuLi4pOwpleHRlcm4gaW50IGZ3aWRlKF9fRklMRSAqLCBpbnQp OwpleHRlcm4gaW50IG1ic2luaXQoY29uc3QgbWJzdGF0ZV90ICopOwpleHRlcm4gc2l6ZV90IG1i cmxlbihjb25zdCBjaGFyICosIHNpemVfdCwgbWJzdGF0ZV90ICopOwpleHRlcm4gc2l6ZV90IG1i cnRvd2Mod2NoYXJfdCAqLCBjb25zdCBjaGFyICosIHNpemVfdCwgbWJzdGF0ZV90ICopOwpleHRl cm4gc2l6ZV90IG1ic3J0b3djcyh3Y2hhcl90ICosIGNvbnN0IGNoYXIgKiosIHNpemVfdCwgbWJz dGF0ZV90ICopOwpleHRlcm4gaW50IHN3cHJpbnRmKHdjaGFyX3QgKiwgc2l6ZV90LCBjb25zdCB3 Y2hhcl90ICosIC4uLik7CmV4dGVybiBpbnQgc3dzY2FuZihjb25zdCB3Y2hhcl90ICosIGNvbnN0 IHdjaGFyX3QgKiwgLi4uKTsKZXh0ZXJuIGludCB2ZndwcmludGYoX19GSUxFICosIGNvbnN0IHdj aGFyX3QgKiwgX192YV9saXN0KTsKZXh0ZXJuIGludCB2d3ByaW50Zihjb25zdCB3Y2hhcl90ICos IF9fdmFfbGlzdCk7CmV4dGVybiBpbnQgdnN3cHJpbnRmKHdjaGFyX3QgKiwgc2l6ZV90LCBjb25z dCB3Y2hhcl90ICosIF9fdmFfbGlzdCk7CmV4dGVybiBzaXplX3Qgd2NydG9tYihjaGFyICosIHdj aGFyX3QsIG1ic3RhdGVfdCAqKTsKZXh0ZXJuIHNpemVfdCB3Y3NydG9tYnMoY2hhciAqLCBjb25z dCB3Y2hhcl90ICoqLCBzaXplX3QsIG1ic3RhdGVfdCAqKTsKZXh0ZXJuIHdjaGFyX3QgKndjc3N0 cihjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CmV4dGVybiBpbnQgd2N0b2Iod2lu dF90KTsKZXh0ZXJuIHdjaGFyX3QgKndtZW1jaHIoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90LCBz aXplX3QpOwpleHRlcm4gaW50IHdtZW1jbXAoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90 ICosIHNpemVfdCk7CmV4dGVybiB3Y2hhcl90ICp3bWVtY3B5KHdjaGFyX3QgKiwgY29uc3Qgd2No YXJfdCAqLCBzaXplX3QpOwpleHRlcm4gd2NoYXJfdCAqd21lbW1vdmUod2NoYXJfdCAqLCBjb25z dCB3Y2hhcl90ICosIHNpemVfdCk7CmV4dGVybiB3Y2hhcl90ICp3bWVtc2V0KHdjaGFyX3QgKiwg d2NoYXJfdCwgc2l6ZV90KTsKZXh0ZXJuIGludCB3cHJpbnRmKGNvbnN0IHdjaGFyX3QgKiwgLi4u KTsKZXh0ZXJuIGludCB3c2NhbmYoY29uc3Qgd2NoYXJfdCAqLCAuLi4pOwojIDMxOCAiL3Vzci9s b2NhbC9saWIvZ2NjLWxpYi9zcGFyY3Y5LXN1bi1zb2xhcmlzMi43LzMuMC4zL2luY2x1ZGUvd2No YXIuaCIgMyA0CmV4dGVybiB3aW50X3QgX19mZ2V0d2NfeHBnNShfX0ZJTEUgKik7CmV4dGVybiB3 aW50X3QgX19nZXR3Y194cGc1KF9fRklMRSAqKTsKZXh0ZXJuIHdpbnRfdCBfX2dldHdjaGFyX3hw ZzUodm9pZCk7CmV4dGVybiB3aW50X3QgX19mcHV0d2NfeHBnNSh3aW50X3QsIF9fRklMRSAqKTsK ZXh0ZXJuIHdpbnRfdCBfX3B1dHdjX3hwZzUod2ludF90LCBfX0ZJTEUgKik7CmV4dGVybiB3aW50 X3QgX19wdXR3Y2hhcl94cGc1KHdpbnRfdCk7CmV4dGVybiB3Y2hhcl90ICpfX2ZnZXR3c194cGc1 KHdjaGFyX3QgKiwgaW50LCBfX0ZJTEUgKik7CmV4dGVybiBpbnQgX19mcHV0d3NfeHBnNShjb25z dCB3Y2hhcl90ICosIF9fRklMRSAqKTsKZXh0ZXJuIHdpbnRfdCBfX3VuZ2V0d2NfeHBnNSh3aW50 X3QsIF9fRklMRSAqKTsKIyAzNTIgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmN2OS1zdW4t c29sYXJpczIuNy8zLjAuMy9pbmNsdWRlL3djaGFyLmgiIDMgNAp9CiMgNDQgIi91c3IvbG9jYWwv aW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djaGFyLmgiIDIgMwojIDU4ICIvdXNyL2xvY2FsL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y2hhci5oIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5n IDo6bWJzdGF0ZV90Owp9CiMgNDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9mcG9z LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1N0YXRlVD4K ICAgIGNsYXNzIGZwb3MKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX1N0YXRlVCBf X3N0YXRlX3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgc3RyZWFtb2ZmIF9NX29mZjsKICAgICAg X19zdGF0ZV90eXBlIF9NX3N0OwoKICAgIHB1YmxpYzoKICAgICAgX19zdGF0ZV90eXBlCiAgICAg IHN0YXRlKCkgY29uc3QgeyByZXR1cm4gX01fc3Q7IH0KCiAgICAgIHZvaWQKICAgICAgc3RhdGUo X19zdGF0ZV90eXBlIF9fc3QpIHsgX01fc3QgPSBfX3N0OyB9CgoKCiAgICAgIGZwb3MoKTogX01f b2ZmKHN0cmVhbW9mZigpKSwgX01fc3QoX19zdGF0ZV90eXBlKCkpIHsgfQoKICAgICAgZnBvcyhz dHJlYW1vZmYgX19vZmYsIF9fc3RhdGVfdHlwZSBfX3N0ID0gX19zdGF0ZV90eXBlKCkpCiAgICAg IDogX01fb2ZmKF9fb2ZmKSwgX01fc3QoX19zdCkgeyB9CgogICAgICBvcGVyYXRvciBzdHJlYW1v ZmYoKSBjb25zdCB7IHJldHVybiBfTV9vZmY7IH0KCiAgICAgIGZwb3MmCiAgICAgIG9wZXJhdG9y Kz0oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiArPSBfX29mZjsgcmV0dXJuICp0aGlzOyB9Cgog ICAgICBmcG9zJgogICAgICBvcGVyYXRvci09KHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYgLT0g X19vZmY7IHJldHVybiAqdGhpczsgfQoKICAgICAgZnBvcwogICAgICBvcGVyYXRvcisoc3RyZWFt b2ZmIF9fb2ZmKQogICAgICB7CiAgICAgICAgZnBvcyBfX3QoKnRoaXMpOwogICAgICAgIF9fdCAr PSBfX29mZjsKICAgICAgICByZXR1cm4gX190OwogICAgICB9CgogICAgICBmcG9zCiAgICAgIG9w ZXJhdG9yLShzdHJlYW1vZmYgX19vZmYpCiAgICAgIHsKICAgICAgICBmcG9zIF9fdCgqdGhpcyk7 CiAgICAgICAgX190IC09IF9fb2ZmOwogICAgICAgIHJldHVybiBfX3Q7CiAgICAgIH0KCiAgICAg IGJvb2wKICAgICAgb3BlcmF0b3I9PShjb25zdCBmcG9zJiBfX3BvcykgY29uc3QKICAgICAgeyBy ZXR1cm4gX01fb2ZmID09IF9fcG9zLl9NX29mZjsgfQoKICAgICAgYm9vbAogICAgICBvcGVyYXRv ciE9KGNvbnN0IGZwb3MmIF9fcG9zKSBjb25zdAogICAgICB7IHJldHVybiBfTV9vZmYgIT0gX19w b3MuX01fb2ZmOyB9CgogICAgICBzdHJlYW1vZmYKICAgICAgX01fcG9zaXRpb24oKSBjb25zdCB7 IHJldHVybiBfTV9vZmY7IH0KCiAgICAgIHZvaWQKICAgICAgX01fcG9zaXRpb24oc3RyZWFtb2Zm IF9fb2ZmKSB7IF9NX29mZiA9IF9fb2ZmOyB9CiAgICB9OwoKCiAgdHlwZWRlZiBmcG9zPG1ic3Rh dGVfdD4gc3RyZWFtcG9zOwoKCgp9CiMgNDIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0 cy9zdGRfaW9zZndkLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9m dW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Z1 bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbl9k ZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3Rl eGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2Vw dGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQK ICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZv aWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAg dm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBf X3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy b3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9v Zl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9y KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNo YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9f cyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoK CiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDQzICIv dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAyIDMKCm5hbWVzcGFj ZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNo YXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaW9zOwoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAg IGNsYXNzIGJhc2ljX3N0cmVhbWJ1ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pc3Ry ZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFy X3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX29zdHJlYW07CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgog ICAgY2xhc3MgYmFzaWNfaW9zdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgIHR5cGVuYW1l IF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmluZ2J1ZjsK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFp dHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJU PiA+CiAgICBjbGFzcyBiYXNpY19pc3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAg IHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX29z dHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxs b2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ ID4KICAgIGNsYXNzIGJhc2ljX2ZpbGVidWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNf aWZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9 IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfb2ZzdHJlYW07CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFy VD4gPgogICAgY2xhc3MgYmFzaWNfZnN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBpc3Ry ZWFtYnVmX2l0ZXJhdG9yOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0 b3I7CgoKCiAgY2xhc3MgaW9zX2Jhc2U7CgoKICB0eXBlZGVmIGJhc2ljX2lvczxjaGFyPiBpb3M7 CiAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hhcj4gc3RyZWFtYnVmOwogIHR5cGVkZWYgYmFz aWNfaXN0cmVhbTxjaGFyPiBpc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFyPiBv c3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08Y2hhcj4gaW9zdHJlYW07CiAgdHlwZWRl ZiBiYXNpY19zdHJpbmdidWY8Y2hhcj4gc3RyaW5nYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmlu Z3N0cmVhbTxjaGFyPiBpc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0cmluZ3N0cmVh bTxjaGFyPiBvc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nc3RyZWFtPGNoYXI+ IHN0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZpbGVidWY8Y2hhcj4gZmlsZWJ1ZjsKICB0 eXBlZGVmIGJhc2ljX2lmc3RyZWFtPGNoYXI+IGlmc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb2Zz dHJlYW08Y2hhcj4gb2ZzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19mc3RyZWFtPGNoYXI+IGZzdHJl YW07CiMgMTI5ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAz Cn0KIyA3OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAy IDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2Vf dHlwZXMuaCIgMSAzCiMgNjkgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRl cmF0b3JfYmFzZV90eXBlcy5oIiAzCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0 cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyA3MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz L3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDIgMwoKCm5hbWVzcGFjZSBzdGQKewoKc3RydWN0 IGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IG91dHB1dF9pdGVyYXRvcl90YWcge307CnN0 cnVjdCBmb3J3YXJkX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBpbnB1dF9pdGVyYXRvcl90YWcge307 CnN0cnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBmb3J3YXJkX2l0ZXJh dG9yX3RhZyB7fTsKc3RydWN0IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIDogcHVibGljIGJp ZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIHt9OwoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj bGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBpbnB1dF9pdGVyYXRvciB7CiAgdHlwZWRlZiBpbnB1dF9p dGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsK ICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50 ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKfTsKCnN0cnVjdCBvdXRwdXRfaXRlcmF0b3Ig ewogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBl ZGVmIHZvaWQgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgZGlmZmVyZW5jZV90eXBlOwogIHR5 cGVkZWYgdm9pZCBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBmb3J3YXJkX2l0ZXJhdG9yIHsK ICB0eXBlZGVmIGZvcndhcmRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVk ZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwog IHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7Cn07CgoKdGVt cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgYmlkaXJlY3Rpb25hbF9p dGVyYXRvciB7CiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9j YXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlIGRp ZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgcmVm ZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3Qg cmFuZG9tX2FjY2Vzc19pdGVyYXRvciB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9y X3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVk ZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0 eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9DYXRlZ29yeSwgY2xh c3MgX1RwLCBjbGFzcyBfRGlzdGFuY2UgPSBwdHJkaWZmX3QsCiAgICAgICAgICBjbGFzcyBfUG9p bnRlciA9IF9UcCosIGNsYXNzIF9SZWZlcmVuY2UgPSBfVHAmPgpzdHJ1Y3QgaXRlcmF0b3Igewog IHR5cGVkZWYgX0NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVl X3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1Bv aW50ZXIgcG9pbnRlcjsKICB0eXBlZGVmIF9SZWZlcmVuY2UgcmVmZXJlbmNlOwp9OwoKdGVtcGxh dGUgPGNsYXNzIF9JdGVyYXRvcj4Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0cyB7CiAgdHlwZWRlZiB0 eXBlbmFtZSBfSXRlcmF0b3I6Oml0ZXJhdG9yX2NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5Owog IHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CiAgdHlw ZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7 CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnBvaW50ZXIgcG9pbnRlcjsKICB0eXBlZGVm IHR5cGVuYW1lIF9JdGVyYXRvcjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxj bGFzcyBfVHA+CnN0cnVjdCBpdGVyYXRvcl90cmFpdHM8X1RwKj4gewogIHR5cGVkZWYgcmFuZG9t X2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFs dWVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBf VHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFz cyBfVHA+CnN0cnVjdCBpdGVyYXRvcl90cmFpdHM8Y29uc3QgX1RwKj4gewogIHR5cGVkZWYgcmFu ZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAg dmFsdWVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRl ZiBjb25zdCBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAmIHJlZmVyZW5jZTsKfTsK IyAxNzIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90 eXBlcy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9y X3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5Cl9faXRlcmF0b3JfY2F0ZWdvcnkoY29u c3QgX0l0ZXImKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojpp dGVyYXRvcl9jYXRlZ29yeSBfQ2F0ZWdvcnk7CiAgcmV0dXJuIF9DYXRlZ29yeSgpOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+ OjpkaWZmZXJlbmNlX3R5cGUqCl9fZGlzdGFuY2VfdHlwZShjb25zdCBfSXRlciYpCnsKICByZXR1 cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6ZGlmZmVyZW5j ZV90eXBlKj4oMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGUqCl9fdmFsdWVfdHlwZShjb25zdCBfSXRl ciYpCnsKICByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVy Pjo6dmFsdWVfdHlwZSo+KDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeQppdGVyYXRvcl9j YXRlZ29yeShjb25zdCBfSXRlciYgX19pKSB7IHJldHVybiBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9f aSk7IH0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUqCmRpc3RhbmNlX3R5cGUoY29uc3QgX0l0ZXIm IF9faSkgeyByZXR1cm4gX19kaXN0YW5jZV90eXBlKF9faSk7IH0KCnRlbXBsYXRlIDxjbGFzcyBf SXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGUq CnZhbHVlX3R5cGUoY29uc3QgX0l0ZXImIF9faSkgeyByZXR1cm4gX192YWx1ZV90eXBlKF9faSk7 IH0KCn0KIyA3OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5o IiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jh c2VfZnVuY3MuaCIgMSAzCiMgNjkgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf aXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i aXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv Yml0cy9jb25jZXB0X2NoZWNrLmgiIDMKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9z cGFyY3Y5LXN1bi1zb2xhcmlzMi43L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDM2ICIvdXNyL2xv Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvY29uY2VwdF9jaGVjay5oIiAyIDMKIyA3MCAiL3Vzci9s b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDIgMwoK bmFtZXNwYWNlIHN0ZAp7CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFz cyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJz dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5j ZSYgX19uLCBpbnB1dF9pdGVyYXRvcl90YWcpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHdoaWxlIChfX2Zp cnN0ICE9IF9fbGFzdCkgeyArK19fZmlyc3Q7ICsrX19uOyB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBf UmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19kaXN0 YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAg ICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9E aXN0YW5jZSYgX19uLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKICBfX24gKz0gX19sYXN0IC0gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNs YXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIGRpc3RhbmNl KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJh dG9yIF9fbGFzdCwgX0Rpc3RhbmNlJiBfX24pCnsKCiAgX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xh c3QsIF9fbiwgaXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X0lucHV0SXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRl cmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKX19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0 LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5j ZV90eXBlIF9fbiA9IDA7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICArK19fZmly c3Q7ICsrX19uOwogIH0KICByZXR1cm4gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nl c3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpfX2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVy YXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgIHJh bmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog IHJldHVybiBfX2xhc3QgLSBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0 b3I+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZm ZXJlbmNlX3R5cGUKZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0 b3IgX19sYXN0KQp7CgogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0 ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkKICAgIF9DYXRlZ29yeTsKICByZXR1cm4gX19kaXN0 YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9DYXRlZ29yeSgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9J bnB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9JbnB1dEl0 ZXImIF9faSwgX0Rpc3RhbmNlIF9fbiwgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog IHdoaWxlIChfX24tLSkgKytfX2k7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0 ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fYWR2YW5jZShfQmlkaXJlY3Rp b25hbEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICBi aWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK ICBpZiAoX19uID4gMCkKICAgIHdoaWxlIChfX24tLSkgKytfX2k7CiAgZWxzZQogICAgd2hpbGUg KF9fbisrKSAtLV9faTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwg Y2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJh dG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNj ZXNzX2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBfX2kgKz0g X19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4K aW5saW5lIHZvaWQgYWR2YW5jZShfSW5wdXRJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uKQp7 CgogIF9fYWR2YW5jZShfX2ksIF9fbiwgaXRlcmF0b3JfY2F0ZWdvcnkoX19pKSk7Cn0KCn0KIyA4 MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAx ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDEgMwojIDYz ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKbmFtZXNw YWNlIHN0ZAp7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KY2xhc3MgYmFja19pbnNlcnRf aXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29udGFpbmVyOwpwdWJsaWM6CiAg dHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwogIHR5cGVkZWYgb3V0cHV0X2l0ZXJh dG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsKICB0 eXBlZGVmIHZvaWQgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCBwb2ludGVyOwogIHR5 cGVkZWYgdm9pZCByZWZlcmVuY2U7CgogIGV4cGxpY2l0IGJhY2tfaW5zZXJ0X2l0ZXJhdG9yKF9D b250YWluZXImIF9feCkgOiBjb250YWluZXIoJl9feCkge30KICBiYWNrX2luc2VydF9pdGVyYXRv cjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFs dWVfdHlwZSYgX192YWx1ZSkgewogICAgY29udGFpbmVyLT5wdXNoX2JhY2soX192YWx1ZSk7CiAg ICByZXR1cm4gKnRoaXM7CiAgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBv cGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250 YWluZXI+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBiYWNrX2luc2VydF9pdGVy YXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9Cn07Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KaW5saW5lIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9D b250YWluZXI+IGJhY2tfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KSB7CiAgcmV0dXJuIGJhY2tf aW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ29u dGFpbmVyPgpjbGFzcyBmcm9udF9pbnNlcnRfaXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0NvbnRh aW5lciogY29udGFpbmVyOwpwdWJsaWM6CiAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90 eXBlOwogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0 eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgZGlmZmVyZW5jZV90eXBlOwog IHR5cGVkZWYgdm9pZCBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7CgogIGV4cGxp Y2l0IGZyb250X2luc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVyKCZf X3gpIHt9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgogIG9wZXJhdG9yPShj b25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKSB7CiAgICBjb250 YWluZXItPnB1c2hfZnJvbnQoX192YWx1ZSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGZyb250 X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7 IH0KICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJl dHVybiAqdGhpczsgfQogIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0 b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5l cj4KaW5saW5lIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBmcm9udF9pbnNlcnRl cihfQ29udGFpbmVyJiBfX3gpIHsKICByZXR1cm4gZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250 YWluZXI+KF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpjbGFzcyBpbnNlcnRf aXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29udGFpbmVyOwogIHR5cGVuYW1l IF9Db250YWluZXI6Oml0ZXJhdG9yIGl0ZXI7CnB1YmxpYzoKICB0eXBlZGVmIF9Db250YWluZXIg Y29udGFpbmVyX3R5cGU7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2Nh dGVnb3J5OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJl bmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5j ZTsKCiAgaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCwgdHlwZW5hbWUgX0NvbnRhaW5l cjo6aXRlcmF0b3IgX19pKQogICAgOiBjb250YWluZXIoJl9feCksIGl0ZXIoX19pKSB7fQogIGlu c2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0Nv bnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgewogICAgaXRlciA9IGNvbnRhaW5lci0+aW5z ZXJ0KGl0ZXIsIF9fdmFsdWUpOwogICAgKytpdGVyOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBp bnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9 CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRo aXM7IH0KICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoaW50KSB7IHJl dHVybiAqdGhpczsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXIsIGNsYXNzIF9JdGVy YXRvcj4KaW5saW5lCmluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBpbnNlcnRlcihfQ29udGFp bmVyJiBfX3gsIF9JdGVyYXRvciBfX2kpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9Db250YWluZXI6 Oml0ZXJhdG9yIF9faXRlcjsKICByZXR1cm4gaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9f eCwgX19pdGVyKF9faSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyYXRv ciwgY2xhc3MgX1RwLCBjbGFzcyBfUmVmZXJlbmNlID0gX1RwJiwKICAgICAgICAgIGNsYXNzIF9E aXN0YW5jZSA9IHB0cmRpZmZfdD4KY2xhc3MgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9y IHsKICB0eXBlZGVmIHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlkaXJlY3Rpb25h bEl0ZXJhdG9yLCBfVHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X1JlZmVyZW5jZSwgX0Rpc3RhbmNlPiBfU2VsZjsKcHJvdGVjdGVkOgogIF9CaWRpcmVjdGlvbmFs SXRlcmF0b3IgY3VycmVudDsKcHVibGljOgogIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRv cl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBl ZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAg dHlwZWRlZiBfUmVmZXJlbmNlIHJlZmVyZW5jZTsKCiAgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0 ZXJhdG9yKCkge30KICBleHBsaWNpdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IoX0Jp ZGlyZWN0aW9uYWxJdGVyYXRvciBfX3gpCiAgICA6IGN1cnJlbnQoX194KSB7fQogIF9CaWRpcmVj dGlvbmFsSXRlcmF0b3IgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnQ7IH0KICBfUmVmZXJl bmNlIG9wZXJhdG9yKigpIGNvbnN0IHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX190bXAg PSBjdXJyZW50OwogICAgcmV0dXJuICotLV9fdG1wOwogIH0KICBwb2ludGVyIG9wZXJhdG9yLT4o KSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQogIF9TZWxmJiBvcGVyYXRvcisrKCkg ewogICAgLS1jdXJyZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvcisr KGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIC0tY3VycmVudDsKICAgIHJldHVy biBfX3RtcDsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7CiAgICArK2N1cnJlbnQ7CiAgICBy ZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yLS0oaW50KSB7CiAgICBfU2VsZiBfX3Rt cCA9ICp0aGlzOwogICAgKytjdXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0KfTsKCnRlbXBs YXRlIDxjbGFzcyBfQmlJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWYsIGNsYXNzIF9EaXN0YW5j ZT4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PSgKICAgIGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25h bF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feCwKICAgIGNvbnN0 IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0 YW5jZT4mIF9feSkKewogIHJldHVybiBfX3guYmFzZSgpID09IF9feS5iYXNlKCk7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfQmlJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWYsIGNsYXNzIF9EaXN0YW5j ZT4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPSgKICAgIGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25h bF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feCwKICAgIGNvbnN0 IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0 YW5jZT4mIF9feSkKewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9CiMgMjIyICIvdXNyL2xvY2Fs L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9J dGVyYXRvcj4KY2xhc3MgcmV2ZXJzZV9pdGVyYXRvcgp7CnByb3RlY3RlZDoKICBfSXRlcmF0b3Ig Y3VycmVudDsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVy YXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5CiAgICAgICAgICBpdGVyYXRvcl9jYXRlZ29yeTsKICB0 eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAg ICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J dGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5 cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIKICAgICAg ICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9y Pjo6cmVmZXJlbmNlCiAgICAgICAgICByZWZlcmVuY2U7CgogIHR5cGVkZWYgX0l0ZXJhdG9yIGl0 ZXJhdG9yX3R5cGU7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4gX1NlbGY7 CgpwdWJsaWM6CiAgcmV2ZXJzZV9pdGVyYXRvcigpIHt9CiAgZXhwbGljaXQgcmV2ZXJzZV9pdGVy YXRvcihpdGVyYXRvcl90eXBlIF9feCkgOiBjdXJyZW50KF9feCkge30KCiAgcmV2ZXJzZV9pdGVy YXRvcihjb25zdCBfU2VsZiYgX194KSA6IGN1cnJlbnQoX194LmN1cnJlbnQpIHt9CiAgdGVtcGxh dGUgPGNsYXNzIF9JdGVyPgogIHJldmVyc2VfaXRlcmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVyYXRv cjxfSXRlcj4mIF9feCkKICAgIDogY3VycmVudChfX3guYmFzZSgpKSB7fQoKICBpdGVyYXRvcl90 eXBlIGJhc2UoKSBjb25zdCB7IHJldHVybiBjdXJyZW50OyB9CiAgcmVmZXJlbmNlIG9wZXJhdG9y KigpIGNvbnN0IHsKICAgIF9JdGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7CiAgICByZXR1cm4gKi0t X190bXA7CiAgfQogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0 b3IqKCkpOyB9CgogIF9TZWxmJiBvcGVyYXRvcisrKCkgewogICAgLS1jdXJyZW50OwogICAgcmV0 dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvcisrKGludCkgewogICAgX1NlbGYgX190bXAg PSAqdGhpczsKICAgIC0tY3VycmVudDsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgX1NlbGYmIG9w ZXJhdG9yLS0oKSB7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxm IG9wZXJhdG9yLS0oaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgKytjdXJyZW50 OwogICAgcmV0dXJuIF9fdG1wOwogIH0KCiAgX1NlbGYgb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlw ZSBfX24pIGNvbnN0IHsKICAgIHJldHVybiBfU2VsZihjdXJyZW50IC0gX19uKTsKICB9CiAgX1Nl bGYmIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9fbikgewogICAgY3VycmVudCAtPSBfX247 CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUg X19uKSBjb25zdCB7CiAgICByZXR1cm4gX1NlbGYoY3VycmVudCArIF9fbik7CiAgfQogIF9TZWxm JiBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX24pIHsKICAgIGN1cnJlbnQgKz0gX19uOwog ICAgcmV0dXJuICp0aGlzOwogIH0KICByZWZlcmVuY2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5 cGUgX19uKSBjb25zdCB7IHJldHVybiAqKCp0aGlzICsgX19uKTsgfQp9OwoKdGVtcGxhdGUgPGNs YXNzIF9JdGVyYXRvcj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCByZXZlcnNlX2l0ZXJh dG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNl X2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVybiBfX3guYmFzZSgpID09IF9feS5i YXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSBib29sIG9wZXJhdG9y PChjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJu IF9feS5iYXNlKCkgPCBfX3guYmFzZSgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgpp bmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYg X194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJh dG9yPiYgX195KSB7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf SXRlcmF0b3I+CmlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9J dGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0 b3I8X0l0ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKdGVtcGxhdGUgPGNs YXNzIF9JdGVyYXRvcj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCByZXZlcnNlX2l0ZXJh dG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNl X2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRl bXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgcmV2 ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25z dCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVybiAhKF9feCA8IF9f eSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSByZXZlcnNl X2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpvcGVyYXRvci0oY29uc3QgcmV2 ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICBjb25zdCByZXZlcnNlX2l0 ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVybiBfX3kuYmFzZSgpIC0gX194LmJhc2Uo KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIHJldmVyc2VfaXRlcmF0b3I8 X0l0ZXJhdG9yPgpvcGVyYXRvcisodHlwZW5hbWUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+ OjpkaWZmZXJlbmNlX3R5cGUgX19uLAogICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxf SXRlcmF0b3I+JiBfX3gpIHsKICByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+KF9f eC5iYXNlKCkgLSBfX24pOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwKICAgICAgICAgIGNsYXNz IF9DaGFyVCA9IGNoYXIsIGNsYXNzIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAg ICAgICAgY2xhc3MgX0Rpc3QgPSBwdHJkaWZmX3Q+CmNsYXNzIGlzdHJlYW1faXRlcmF0b3Igewpw dWJsaWM6CiAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogIHR5cGVkZWYgX1RyYWl0cyB0cmFp dHNfdHlwZTsKICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBpc3RyZWFt X3R5cGU7CgogIHR5cGVkZWYgaW5wdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Owog IHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdCBkaWZmZXJlbmNlX3R5cGU7 CiAgdHlwZWRlZiBjb25zdCBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAmIHJlZmVy ZW5jZTsKCiAgaXN0cmVhbV9pdGVyYXRvcigpIDogX01fc3RyZWFtKDApLCBfTV9vayhmYWxzZSkg e30KICBpc3RyZWFtX2l0ZXJhdG9yKGlzdHJlYW1fdHlwZSYgX19zKSA6IF9NX3N0cmVhbSgmX19z KSB7IF9NX3JlYWQoKTsgfQoKICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4g X01fdmFsdWU7IH0KICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJh dG9yKigpKTsgfQoKICBpc3RyZWFtX2l0ZXJhdG9yJiBvcGVyYXRvcisrKCkgewogICAgX01fcmVh ZCgpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpc3RyZWFtX2l0ZXJhdG9yIG9wZXJhdG9yKyso aW50KSB7CiAgICBpc3RyZWFtX2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICBfTV9yZWFkKCk7 CiAgICByZXR1cm4gX190bXA7CiAgfQoKICBib29sIF9NX2VxdWFsKGNvbnN0IGlzdHJlYW1faXRl cmF0b3ImIF9feCkgY29uc3QKICAgIHsgcmV0dXJuIChfTV9vayA9PSBfX3guX01fb2spICYmICgh X01fb2sgfHwgX01fc3RyZWFtID09IF9feC5fTV9zdHJlYW0pOyB9Cgpwcml2YXRlOgogIGlzdHJl YW1fdHlwZSogX01fc3RyZWFtOwogIF9UcCBfTV92YWx1ZTsKICBib29sIF9NX29rOwoKICB2b2lk IF9NX3JlYWQoKSB7CiAgICBfTV9vayA9IChfTV9zdHJlYW0gJiYgKl9NX3N0cmVhbSkgPyB0cnVl IDogZmFsc2U7CiAgICBpZiAoX01fb2spIHsKICAgICAgKl9NX3N0cmVhbSA+PiBfTV92YWx1ZTsK ICAgICAgX01fb2sgPSAqX01fc3RyZWFtID8gdHJ1ZSA6IGZhbHNlOwogICAgfQogIH0KfTsKCnRl bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0Rp c3Q+CmlubGluZSBib29sCm9wZXJhdG9yPT0oY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9D aGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBfX3gsCiAgICAgICAgICAgY29uc3QgaXN0cmVhbV9pdGVy YXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBfX3kpIHsKICByZXR1cm4gX194Ll9N X2VxdWFsKF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9DaGFyVCwgY2xhc3Mg X1RyYWl0cywgY2xhc3MgX0Rpc3Q+CmlubGluZSBib29sCm9wZXJhdG9yIT0oY29uc3QgaXN0cmVh bV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBfX3gsCiAgICAgICAgICAg Y29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBfX3kp IHsKICByZXR1cm4gIV9feC5fTV9lcXVhbChfX3kpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwK ICAgICAgICAgIGNsYXNzIF9DaGFyVCA9IGNoYXIsIGNsYXNzIF9UcmFpdHMgPSBjaGFyX3RyYWl0 czxfQ2hhclQ+ID4KY2xhc3Mgb3N0cmVhbV9pdGVyYXRvciB7CnB1YmxpYzoKICB0eXBlZGVmIF9D aGFyVCBjaGFyX3R5cGU7CiAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogIHR5cGVkZWYg YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IG9zdHJlYW1fdHlwZTsKCiAgdHlwZWRlZiBv dXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCB2YWx1 ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIHBv aW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsKCiAgb3N0cmVhbV9pdGVyYXRvcihvc3Ry ZWFtX3R5cGUmIF9fcykgOiBfTV9zdHJlYW0oJl9fcyksIF9NX3N0cmluZygwKSB7fQogIG9zdHJl YW1faXRlcmF0b3Iob3N0cmVhbV90eXBlJiBfX3MsIGNvbnN0IF9DaGFyVCogX19jKQogICAgOiBf TV9zdHJlYW0oJl9fcyksIF9NX3N0cmluZyhfX2MpIHt9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+ JiBvcGVyYXRvcj0oY29uc3QgX1RwJiBfX3ZhbHVlKSB7CiAgICAqX01fc3RyZWFtIDw8IF9fdmFs dWU7CiAgICBpZiAoX01fc3RyaW5nKSAqX01fc3RyZWFtIDw8IF9NX3N0cmluZzsKICAgIHJldHVy biAqdGhpczsKICB9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvciooKSB7IHJldHVy biAqdGhpczsgfQogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJu ICp0aGlzOyB9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcisrKGludCkgeyByZXR1 cm4gKnRoaXM7IH0KcHJpdmF0ZToKICBvc3RyZWFtX3R5cGUqIF9NX3N0cmVhbTsKICBjb25zdCBf Q2hhclQqIF9NX3N0cmluZzsKfTsKIyA0NDYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0 cy9zdGxfaXRlcmF0b3IuaCIgMwp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1l IF9Db250YWluZXI+CmNsYXNzIF9fbm9ybWFsX2l0ZXJhdG9yCiAgOiBwdWJsaWMgaXRlcmF0b3I8 aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5LAogICAgICAgICAg ICAgICAgICAgIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAogICAgICAg ICAgICAgICAgICAgIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUs CiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIs CiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5j ZT4KewoKcHJvdGVjdGVkOgogIF9JdGVyYXRvciBfTV9jdXJyZW50OwoKcHVibGljOgogIHR5cGVk ZWYgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiBub3JtYWxfaXRlcmF0 b3JfdHlwZTsKICB0eXBlZGVmIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+IF9fdHJhaXRzX3R5 cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjppdGVyYXRvcl9jYXRlZ29yeSBp dGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6OnZhbHVl X3R5cGUgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6OmRpZmZl cmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190 eXBlOjpwb2ludGVyIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjpy ZWZlcmVuY2UgcmVmZXJlbmNlOwoKICBfX25vcm1hbF9pdGVyYXRvcigpIDogX01fY3VycmVudChf SXRlcmF0b3IoKSkgeyB9CgogIGV4cGxpY2l0IF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9JdGVy YXRvciYgX19pKSA6IF9NX2N1cnJlbnQoX19pKSB7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9J dGVyPgogIGlubGluZSBfX25vcm1hbF9pdGVyYXRvcihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxf SXRlciwgX0NvbnRhaW5lcj4mIF9faSkKICAgIDogX01fY3VycmVudChfX2kuYmFzZSgpKSB7IH0K CgogIHJlZmVyZW5jZQogIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpfTV9jdXJyZW50OyB9 CgogIHBvaW50ZXIKICBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gX01fY3VycmVudDsgfQoK ICBub3JtYWxfaXRlcmF0b3JfdHlwZSYKICBvcGVyYXRvcisrKCkgeyArK19NX2N1cnJlbnQ7IHJl dHVybiAqdGhpczsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZQogIG9wZXJhdG9yKysoaW50KSB7 IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50KyspOyB9CgoKICBub3JtYWxfaXRl cmF0b3JfdHlwZSYKICBvcGVyYXRvci0tKCkgeyAtLV9NX2N1cnJlbnQ7IHJldHVybiAqdGhpczsg fQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZQogIG9wZXJhdG9yLS0oaW50KSB7IHJldHVybiBfX25v cm1hbF9pdGVyYXRvcihfTV9jdXJyZW50LS0pOyB9CgoKICByZWZlcmVuY2UKICBvcGVyYXRvcltd KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogIHsgcmV0dXJuIF9NX2N1cnJlbnRb X19uXTsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZSYKICBvcGVyYXRvcis9KGNvbnN0IGRpZmZl cmVuY2VfdHlwZSYgX19uKQogIHsgX01fY3VycmVudCArPSBfX247IHJldHVybiAqdGhpczsgfQoK ICBub3JtYWxfaXRlcmF0b3JfdHlwZQogIG9wZXJhdG9yKyhjb25zdCBkaWZmZXJlbmNlX3R5cGUm IF9fbikgY29uc3QKICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50ICsgX19u KTsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZSYKICBvcGVyYXRvci09KGNvbnN0IGRpZmZlcmVu Y2VfdHlwZSYgX19uKQogIHsgX01fY3VycmVudCAtPSBfX247IHJldHVybiAqdGhpczsgfQoKICBu b3JtYWxfaXRlcmF0b3JfdHlwZQogIG9wZXJhdG9yLShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9f bikgY29uc3QKICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50IC0gX19uKTsg fQoKICBkaWZmZXJlbmNlX3R5cGUKICBvcGVyYXRvci0oY29uc3Qgbm9ybWFsX2l0ZXJhdG9yX3R5 cGUmIF9faSkgY29uc3QKICB7IHJldHVybiBfTV9jdXJyZW50IC0gX19pLl9NX2N1cnJlbnQ7IH0K CiAgY29uc3QgX0l0ZXJhdG9yJgogIGJhc2UoKSBjb25zdCB7IHJldHVybiBfTV9jdXJyZW50OyB9 Cn07CgoKCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIs IHR5cGVuYW1lIF9Db250YWluZXI+CmlubGluZSBib29sCm9wZXJhdG9yPT0oY29uc3QgX19ub3Jt YWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgIGNv bnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKeyBy ZXR1cm4gX19saHMuYmFzZSgpID09IF9fcmhzLmJhc2UoKTsgfQoKdGVtcGxhdGU8dHlwZW5hbWUg X0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KaW5s aW5lIGJvb2wKb3BlcmF0b3IhPShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBf Q29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0 ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQp7IHJldHVybiAhKF9fbGhzID09IF9fcmhzKTsg fQoKCgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0 eXBlbmFtZSBfQ29udGFpbmVyPgppbmxpbmUgYm9vbApvcGVyYXRvcjwoY29uc3QgX19ub3JtYWxf aXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgY29uc3Qg X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQp7IHJldHVy biBfX2xocy5iYXNlKCkgPCBfX3Jocy5iYXNlKCk7IH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVy YXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CmlubGluZSBi b29sCm9wZXJhdG9yPihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFp bmVyPiYgX19saHMsCiAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JS LCBfQ29udGFpbmVyPiYgX19yaHMpCnsgcmV0dXJuIF9fcmhzIDwgX19saHM7IH0KCnRlbXBsYXRl PHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250 YWluZXI+CmlubGluZSBib29sCm9wZXJhdG9yPD0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0 ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0 ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKeyByZXR1cm4gIShfX3JocyA8 IF9fbGhzKTsgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJh dG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+PShjb25zdCBf X25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAg ICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhz KQp7IHJldHVybiAhKF9fbGhzIDwgX19yaHMpOyB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0 b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CmlubGluZSBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0 b3IsIF9Db250YWluZXI+Cm9wZXJhdG9yKyh0eXBlbmFtZSBfX25vcm1hbF9pdGVyYXRvcjxfSXRl cmF0b3IsIF9Db250YWluZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uLAogICAgICAgICAgY29uc3Qg X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19pKQp7IHJldHVybiBf X25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+KF9faS5iYXNlKCkgKyBfX24p OyB9Cgp9CiMgODEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2Uu aCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2NvbmNlcHRfY2hlY2su aCIgMSAzCiMgODIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2Uu aCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEs IGNsYXNzIF9Gb3J3YXJkSXRlcjIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgX19pdGVyX3N3YXAo X0ZvcndhcmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIgX19iLCBfVHAqKQp7CiAgX1RwIF9fdG1w ID0gKl9fYTsKICAqX19hID0gKl9fYjsKICAqX19iID0gX190bXA7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgppbmxpbmUgdm9pZCBpdGVyX3N3 YXAoX0ZvcndhcmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIgX19iKQp7CgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBfX2l0ZXJf c3dhcChfX2EsIF9fYiwgX192YWx1ZV90eXBlKF9fYSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw PgppbmxpbmUgdm9pZCBzd2FwKF9UcCYgX19hLCBfVHAmIF9fYikKewoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBfVHAgX190bXAg PSBfX2E7CiAgX19hID0gX19iOwogIF9fYiA9IF9fdG1wOwp9CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xh c3MgX1RwPgppbmxpbmUgY29uc3QgX1RwJiBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYg X19iKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKCiAgaWYgKF9fYiA8IF9fYSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0IF9UcCYgbWF4KGNvbnN0IF9UcCYg X19hLCBjb25zdCBfVHAmIF9fYikgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIGlmIChfX2EgPCBfX2IpIHJldHVybiBf X2I7IHJldHVybiBfX2E7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgpp bmxpbmUgY29uc3QgX1RwJiBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29t cGFyZSBfX2NvbXApIHsKCiAgaWYgKF9fY29tcChfX2IsIF9fYSkpIHJldHVybiBfX2I7IHJldHVy biBfX2E7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgY29u c3QgX1RwJiBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2Nv bXApIHsKCiAgaWYgKF9fY29tcChfX2EsIF9fYikpIHJldHVybiBfX2I7IHJldHVybiBfX2E7Cn0K IyAxNjYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwp0 ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9EaXN0 YW5jZT4KaW5saW5lIF9PdXRwdXRJdGVyIF9fY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1 dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVz dWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZywgX0Rpc3Rh bmNlKikKewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19yZXN1bHQsICsrX19maXJz dCkKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxh dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rp c3RhbmNlPgppbmxpbmUgX091dHB1dEl0ZXIKX19jb3B5KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0 LCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywgX0Rpc3RhbmNlKikKewogIGZvciAoX0Rpc3Rh bmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKSB7CiAgICAqX19yZXN1 bHQgPSAqX19maXJzdDsKICAgICsrX19maXJzdDsKICAgICsrX19yZXN1bHQ7CiAgfQogIHJldHVy biBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIF9UcCoKX19jb3B5X3Ry aXZpYWwoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3Vs dCkKewogIG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZihfVHApICogKF9fbGFzdCAt IF9fZmlyc3QpKTsKICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7Cn0KCgp0 ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0 cHV0SXRlciBfX2NvcHlfYXV4MihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9f ZmFsc2VfdHlwZSkKewogIHJldHVybiBfX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwK ICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCksCiAgICAgICAgICAg ICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0 SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHlfYXV4Mihf SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJu IF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgX19pdGVy YXRvcl9jYXRlZ29yeShfX2ZpcnN0KSwKICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShf X2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBfVHAqIF9fY29weV9hdXgy KF9UcCogX19maXJzdCwgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQsCiAgICAgICAgICAgICAg ICAgICAgICAgIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3Qs IF9fbGFzdCwgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgX1RwKiBf X2NvcHlfYXV4Mihjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9f cmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkKewogIHJldHVybiBf X2NvcHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoKCnRlbXBsYXRlIDxj bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1RwPgppbmxpbmUgX091 dHB1dEl0ZXIgX19jb3B5X2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1Rw KikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+OjpoYXNfdHJpdmlhbF9h c3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAgICBfVHJpdmlhbDsKICByZXR1cm4gX19jb3B5X2F1 eDIoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX1RyaXZpYWwoKSk7Cn0KCnRlbXBsYXRlPHR5 cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0 ZXIgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90 eXBlKQp7CiAgcmV0dXJuIF9PdXRwdXRJdGVyKF9fY29weV9hdXgoX19maXJzdCwgX19sYXN0LCBf X3Jlc3VsdC5iYXNlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90 eXBlKF9fZmlyc3QpKSk7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1l IF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X25pMihfSW5wdXRJdGVyIF9f Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf T3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQp7CiAgcmV0dXJuIF9fY29weV9hdXgo X19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVt cGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CmlubGluZSBf T3V0cHV0SXRlciBfX2NvcHlfbmkxKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwg X190cnVlX3R5cGUpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X091 dHB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFsOwogIHJldHVybiBfX2NvcHlfbmkyKF9fZmlyc3Qu YmFzZSgpLCBfX2xhc3QuYmFzZSgpLCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7Cn0KCnRlbXBsYXRl PHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1 dEl0ZXIgX19jb3B5X25pMShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFs c2VfdHlwZSkKewogIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfT3V0cHV0 SXRlcj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgcmV0dXJuIF9fY29weV9uaTIoX19maXJzdCwgX19s YXN0LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy LCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIF9PdXRwdXRJdGVyIGNvcHkoX0lucHV0SXRlciBf X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1 dEl0ZXIgX19yZXN1bHQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNf bm9ybWFsX2l0ZXJhdG9yPF9JbnB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICByZXR1cm4g X19jb3B5X25pMShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKfQoKCgoK dGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFs SXRlcjIsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfQmlkaXJlY3Rpb25hbEl0 ZXIyIF9fY29weV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj dGlvbmFsSXRlcjIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSopCnsKICB3aGlsZSAoX19maXJzdCAhPSBf X2xhc3QpCiAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJ dGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIgX19jb3B5X2Jh Y2t3YXJkKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fcmVzdWx0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNz X2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X0Rpc3RhbmNlKikKewogIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9f biA+IDA7IC0tX19uKQogICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgcmV0dXJuIF9fcmVz dWx0Owp9CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3Mg X0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgIGNsYXNzIF9Cb29sVHlwZT4Kc3RydWN0IF9f Y29weV9iYWNrd2FyZF9kaXNwYXRjaAp7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X0JpZGlyZWN0aW9uYWxJdGVyMT46Oml0ZXJhdG9yX2NhdGVnb3J5CiAgICAgICAgICBfQ2F0 OwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcjE+ OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZTsKCiAgc3RhdGljIF9CaWRpcmVj dGlvbmFsSXRlcjIgY29weShfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQp IHsKICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmQoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwg X0NhdCgpLCAoX0Rpc3RhbmNlKikgMCk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3Ry dWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4Kewog IHN0YXRpYyBfVHAqIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwg X1RwKiBfX3Jlc3VsdCkgewogICAgY29uc3QgcHRyZGlmZl90IF9OdW0gPSBfX2xhc3QgLSBfX2Zp cnN0OwogICAgbWVtbW92ZShfX3Jlc3VsdCAtIF9OdW0sIF9fZmlyc3QsIHNpemVvZihfVHApICog X051bSk7CiAgICByZXR1cm4gX19yZXN1bHQgLSBfTnVtOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFz cyBfVHA+CnN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8Y29uc3QgX1RwKiwgX1RwKiwg X190cnVlX3R5cGU+CnsKICBzdGF0aWMgX1RwKiBjb3B5KGNvbnN0IF9UcCogX19maXJzdCwgY29u c3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpIHsKICAgIHJldHVybiBfX2NvcHlfYmFja3dh cmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CiAgICAgIDo6Y29weShfX2ZpcnN0 LCBfX2xhc3QsIF9fcmVzdWx0KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JJMSwgY2xhc3Mg X0JJMj4KaW5saW5lIF9CSTIgX19jb3B5X2JhY2t3YXJkX2F1eChfQkkxIF9fZmlyc3QsIF9CSTEg X19sYXN0LCBfQkkyIF9fcmVzdWx0KSB7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRz PHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQkkyPjo6dmFsdWVfdHlwZT4KICAgICAgICAgICAg ICAgICAgICAgICAgOjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAgICBf VHJpdmlhbDsKICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9CSTEsIF9CSTIsIF9U cml2aWFsPgogICAgICAgICAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsK fQoKdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CmlubGluZSBfQkkyIF9f Y29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBf X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9CSTIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKSB7CiAgcmV0dXJuIF9CSTIoX19jb3B5X2JhY2t3 YXJkX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LmJhc2UoKSkpOwp9Cgp0ZW1wbGF0ZSA8 dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KaW5saW5lIF9CSTIgX19jb3B5X2JhY2t3YXJk X291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3Vs dCwgX19mYWxzZV90eXBlKXsKICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2F1eChfX2ZpcnN0LCBf X2xhc3QsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9C STI+CmlubGluZSBfQkkyIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJ MSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkgewogIHR5cGVkZWYg dHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfQkkyPjo6X05vcm1hbCBfX05vcm1hbDsKICBy ZXR1cm4gX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdC5iYXNl KCksIF9fbGFzdC5iYXNlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIF9C STEsIHR5cGVuYW1lIF9CSTI+CmlubGluZSBfQkkyIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3Jt YWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5 cGUpIHsKICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9Ob3Jt YWwgX19Ob3JtYWw7CiAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJh dG9yKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fTm9ybWFsKCkpOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUg X0JJMSwgdHlwZW5hbWUgX0JJMj4KaW5saW5lIF9CSTIgY29weV9iYWNrd2FyZChfQkkxIF9fZmly c3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwoKCgogIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfQkkxPjo6X05v cm1hbCBfX05vcm1hbDsKICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVy YXRvcihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fTm9ybWFsKCkpOwp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg X0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJdGVyPgpwYWlyPF9JbnB1dEl0 ZXIsIF9PdXRwdXRJdGVyPiBfX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291 bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9f cmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVy YXRvcl90YWcpIHsKICBmb3IgKCA7IF9fY291bnQgPiAwOyAtLV9fY291bnQpIHsKICAgICpfX3Jl c3VsdCA9ICpfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0 dXJuIHBhaXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+KF9fZmlyc3QsIF9fcmVzdWx0KTsKfQoK dGVtcGxhdGUgPGNsYXNzIF9SQUl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4K aW5saW5lIHBhaXI8X1JBSXRlciwgX091dHB1dEl0ZXI+Cl9fY29weV9uKF9SQUl0ZXIgX19maXJz dCwgX1NpemUgX19jb3VudCwKICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAg IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7CiAgX1JBSXRlciBfX2xhc3QgPSBfX2ZpcnN0 ICsgX19jb3VudDsKICByZXR1cm4gcGFpcjxfUkFJdGVyLCBfT3V0cHV0SXRlcj4oX19sYXN0LCBj b3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1 dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIHBhaXI8X0lucHV0 SXRlciwgX091dHB1dEl0ZXI+Cl9fY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19j b3VudCwgX091dHB1dEl0ZXIgX19yZXN1bHQpIHsKICByZXR1cm4gX19jb3B5X24oX19maXJzdCwg X19jb3VudCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnko X19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNs YXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgcGFpcjxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4KY29w eV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwgX091dHB1dEl0ZXIgX19yZXN1 bHQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CgoKICByZXR1cm4gX19jb3B5X24oX19maXJzdCwgX19jb3VudCwg X19yZXN1bHQpOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1Rw Pgp2b2lkIGZpbGwoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNv bnN0IF9UcCYgX192YWx1ZSkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgZm9yICggOyBfX2Zp cnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+Cl9PdXRwdXRJ dGVyIGZpbGxfbihfT3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192 YWx1ZSkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKCiAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2Zp cnN0KQogICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwogIHJldHVybiBfX2ZpcnN0Owp9CgoKCmlubGlu ZSB2b2lkIGZpbGwodW5zaWduZWQgY2hhciogX19maXJzdCwgdW5zaWduZWQgY2hhciogX19sYXN0 LAogICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXImIF9fYykKewogIHVuc2lnbmVk IGNoYXIgX190bXAgPSBfX2M7CiAgbWVtc2V0KF9fZmlyc3QsIF9fdG1wLCBfX2xhc3QgLSBfX2Zp cnN0KTsKfQoKaW5saW5lIHZvaWQgZmlsbChzaWduZWQgY2hhciogX19maXJzdCwgc2lnbmVkIGNo YXIqIF9fbGFzdCwKICAgICAgICAgICAgICAgICBjb25zdCBzaWduZWQgY2hhciYgX19jKQp7CiAg c2lnbmVkIGNoYXIgX190bXAgPSBfX2M7CiAgbWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVu c2lnbmVkIGNoYXI+KF9fdG1wKSwgX19sYXN0IC0gX19maXJzdCk7Cn0KCmlubGluZSB2b2lkIGZp bGwoY2hhciogX19maXJzdCwgY2hhciogX19sYXN0LCBjb25zdCBjaGFyJiBfX2MpCnsKICBjaGFy IF9fdG1wID0gX19jOwogIG1lbXNldChfX2ZpcnN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy PihfX3RtcCksIF9fbGFzdCAtIF9fZmlyc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1NpemU+Cmlu bGluZSB1bnNpZ25lZCBjaGFyKiBmaWxsX24odW5zaWduZWQgY2hhciogX19maXJzdCwgX1NpemUg X19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXImIF9f YykKewogIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsKICByZXR1cm4gX19maXJz dCArIF9fbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9TaXplPgppbmxpbmUgc2lnbmVkIGNoYXIqIGZp bGxfbihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHNpZ25lZCBjaGFyJiBfX2MpCnsKICBmaWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24s IF9fYyk7CiAgcmV0dXJuIF9fZmlyc3QgKyBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfU2l6ZT4K aW5saW5lIGNoYXIqIGZpbGxfbihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IGNoYXIm IF9fYykKewogIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsKICByZXR1cm4gX19m aXJzdCArIF9fbjsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lu cHV0SXRlcjI+CnBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPiBtaXNtYXRjaChfSW5wdXRJ dGVyMSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9J bnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgKl9fZmlyc3QxID09ICpfX2ZpcnN0Mikg ewogICAgKytfX2ZpcnN0MTsKICAgICsrX19maXJzdDI7CiAgfQogIHJldHVybiBwYWlyPF9JbnB1 dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmlyc3QyKTsKfQoKdGVtcGxhdGUgPGNs YXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0JpbmFyeVByZWRpY2F0 ZT4KcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+IG1pc21hdGNoKF9JbnB1dEl0ZXIxIF9f Zmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRl cjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1 dEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog IHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAq X19maXJzdDIpKSB7CiAgICArK19fZmlyc3QxOwogICAgKytfX2ZpcnN0MjsKICB9CiAgcmV0dXJu IHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2ZpcnN0MSwgX19maXJzdDIpOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgppbmxpbmUgYm9v bCBlcXVhbChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAg ICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIpCnsKCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CgoKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmly c3QyKQogICAgaWYgKCEoKl9fZmlyc3QxID09ICpfX2ZpcnN0MikpCiAgICAgIHJldHVybiBmYWxz ZTsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBf SW5wdXRJdGVyMiwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KaW5saW5lIGJvb2wgZXF1YWwoX0lu cHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAg IF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCnsK CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19f Zmlyc3QxLCArK19fZmlyc3QyKQogICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9f Zmlyc3QyKSkKICAgICAgcmV0dXJuIGZhbHNlOwogIHJldHVybiB0cnVlOwp9CgoKCgoKdGVtcGxh dGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KYm9vbCBsZXhpY29ncmFw aGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0 SXRlcjIgX19sYXN0MikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgZm9yICgg OyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIKICAgICAgICA7ICsr X19maXJzdDEsICsrX19maXJzdDIpIHsKICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpCiAg ICAgIHJldHVybiB0cnVlOwogICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgcmV0 dXJuIGZhbHNlOwogIH0KICByZXR1cm4gX19maXJzdDEgPT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAh PSBfX2xhc3QyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0 ZXIyLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJ dGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFz dDIKICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsKICAgIGlmIChfX2NvbXAoKl9f Zmlyc3QxLCAqX19maXJzdDIpKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmIChfX2NvbXAoKl9f Zmlyc3QyLCAqX19maXJzdDEpKQogICAgICByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiBfX2Zp cnN0MSA9PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7Cn0KCmlubGluZSBib29sCmxl eGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QxLAogICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QxLAogICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MiwKICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MikKewogIGNvbnN0IHNp emVfdCBfX2xlbjEgPSBfX2xhc3QxIC0gX19maXJzdDE7CiAgY29uc3Qgc2l6ZV90IF9fbGVuMiA9 IF9fbGFzdDIgLSBfX2ZpcnN0MjsKICBjb25zdCBpbnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJz dDEsIF9fZmlyc3QyLCBtaW4oX19sZW4xLCBfX2xlbjIpKTsKICByZXR1cm4gX19yZXN1bHQgIT0g MCA/IF9fcmVzdWx0IDwgMCA6IF9fbGVuMSA8IF9fbGVuMjsKfQoKaW5saW5lIGJvb2wgbGV4aWNv Z3JhcGhpY2FsX2NvbXBhcmUoY29uc3QgY2hhciogX19maXJzdDEsIGNvbnN0IGNoYXIqIF9fbGFz dDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmly c3QyLCBjb25zdCBjaGFyKiBfX2xhc3QyKQp7CgogIHJldHVybiBsZXhpY29ncmFwaGljYWxfY29t cGFyZSgoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0MSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDIpOwoK CgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgpp bnQgX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBf SW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9J bnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQp7CiAgd2hpbGUgKF9fZmly c3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgaWYgKCpfX2ZpcnN0 MSA8ICpfX2ZpcnN0MikKICAgICAgcmV0dXJuIC0xOwogICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2Zp cnN0MSkKICAgICAgcmV0dXJuIDE7CiAgICArK19fZmlyc3QxOwogICAgKytfX2ZpcnN0MjsKICB9 CiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpIHsKICAgIHJldHVybiAhKF9fZmlyc3QxID09IF9f bGFzdDEpOwogIH0KICBlbHNlIHsKICAgIHJldHVybiAtMTsKICB9Cn0KCmlubGluZSBpbnQKX19s ZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3Qx LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19s YXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIq IF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQg Y2hhciogX19sYXN0MikKewogIGNvbnN0IHB0cmRpZmZfdCBfX2xlbjEgPSBfX2xhc3QxIC0gX19m aXJzdDE7CiAgY29uc3QgcHRyZGlmZl90IF9fbGVuMiA9IF9fbGFzdDIgLSBfX2ZpcnN0MjsKICBj b25zdCBpbnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEsIF9fZmlyc3QyLCBtaW4oX19sZW4x LCBfX2xlbjIpKTsKICByZXR1cm4gX19yZXN1bHQgIT0gMCA/IF9fcmVzdWx0CiAgICAgICAgICAg ICAgICAgICAgICAgOiAoX19sZW4xID09IF9fbGVuMiA/IDAgOiAoX19sZW4xIDwgX19sZW4yID8g LTEgOiAxKSk7Cn0KCmlubGluZSBpbnQKX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KGNv bnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19maXJzdDIsIGNvbnN0IGNoYXIqIF9fbGFzdDIp CnsKCiAgcmV0dXJuIF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheSgKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QxLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fZmly c3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciop IF9fbGFzdDIpOwoKCgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9J bnB1dEl0ZXIyPgppbnQgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfSW5wdXRJdGVyMSBf X2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpCnsKCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHJldHVybiBfX2xleGljb2dyYXBoaWNhbF9jb21w YXJlXzN3YXkoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKfQoKfQojIDYy ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xpc3QuaCIgMiAzCiMgMSAiL3Vz ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAxIDMKIyA1NyAiL3Vzci9s b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzCiMgMSAiL3Vzci9sb2NhbC9p bmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2lu Y2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVk ZS9nKystdjMvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvaW5jbHVk ZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB2b2lk CiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Fs bG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7CgogIHZvaWQKICBf X3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19sb2dpY19lcnJvcihj b25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21haW5fZXJyb3IoY29uc3QgY2hh ciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFyKiBf X3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAg dm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBf X3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3df cmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3ZlcmZsb3df ZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfdW5kZXJmbG93X2Vycm9y KGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19pb3NfZmFpbHVyZShjb25zdCBj aGFyKiBfX3MpOwp9CiMgNTggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxs b2MuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVm LmgiIDEgMwojIDU5ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgi IDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAx IDMKIyA2MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAyIDMK IyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIgMSAzCiMg NjEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgMSAi L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jYXNzZXJ0LmgiIDEgMwojIDM3ICIv dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nhc3NlcnQuaCIgMwojIDEgIi91c3Iv aW5jbHVkZS9hc3NlcnQuaCIgMSAzIDQKIyAxMSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAzIDQK I3ByYWdtYSBpZGVudCAiQCgjKWFzc2VydC5oCTEuOQk5Mi8wNy8xNCBTTUkiCgoKZXh0ZXJuICJD IiB7CgoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBp bnQpOwoKCgoKCn0KIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jYXNz ZXJ0LmgiIDIgMwojIDYyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9j LmgiIDIgMwoKCgoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJl YWRzLmgiIDEgMwojIDYyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVh ZHMuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvc3BhcmN2OS1zdW4tc29sYXJp czIuNy9iaXRzL2d0aHIuaCIgMSAzCiMgNjMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0 cy9zdGxfdGhyZWFkcy5oIiAyIDMKIyA4MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz L3N0bF90aHJlYWRzLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiMgOTUgIi91c3IvbG9jYWwvaW5jbHVk ZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAzCnN0cnVjdCBfUmVmY291bnRfQmFzZQp7CgoK CgogIHR5cGVkZWYgc2l6ZV90IF9SQ190OwoKCgogICB2b2xhdGlsZSBfUkNfdCBfTV9yZWZfY291 bnQ7CgoKCgogIF9fZ3RocmVhZF9tdXRleF90IF9NX3JlZl9jb3VudF9sb2NrOwogIF9SZWZjb3Vu dF9CYXNlKF9SQ190IF9fbikgOiBfTV9yZWZfY291bnQoX19uKQogICAgewoKICAgICAgX19ndGhy ZWFkX211dGV4X3QgX190bXAgPSB7e3swfSwgMH0sIHt7ezB9fX0sIDB9OwogICAgICBfTV9yZWZf Y291bnRfbG9jayA9IF9fdG1wOwoKCgoKCiAgICB9CiMgMTQxICIvdXNyL2xvY2FsL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogIHZvaWQgX01faW5jcigpIHsKICAgIF9fZ3Ro cmVhZF9tdXRleF9sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICArK19NX3JlZl9jb3VudDsK ICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsKICB9CiAgX1JD X3QgX01fZGVjcigpIHsKICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfTV9yZWZfY291bnRfbG9j ayk7CiAgICB2b2xhdGlsZSBfUkNfdCBfX3RtcCA9IC0tX01fcmVmX2NvdW50OwogICAgX19ndGhy ZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogICAgcmV0dXJuIF9fdG1wOwog IH0KIyAxOTIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAz Cn07CiMgMzEzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIg Mwp0ZW1wbGF0ZSA8aW50IF9faW5zdD4Kc3RydWN0IF9TVExfbXV0ZXhfc3BpbiB7CiAgZW51bSB7 IF9fbG93X21heCA9IDMwLCBfX2hpZ2hfbWF4ID0gMTAwMCB9OwoKCiAgc3RhdGljIHVuc2lnbmVk IF9fbWF4OwogIHN0YXRpYyB1bnNpZ25lZCBfX2xhc3Q7Cn07Cgp0ZW1wbGF0ZSA8aW50IF9faW5z dD4KdW5zaWduZWQgX1NUTF9tdXRleF9zcGluPF9faW5zdD46Ol9fbWF4ID0gX1NUTF9tdXRleF9z cGluPF9faW5zdD46Ol9fbG93X21heDsKCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp1bnNpZ25lZCBf U1RMX211dGV4X3NwaW48X19pbnN0Pjo6X19sYXN0ID0gMDsKIyAzNDAgIi91c3IvbG9jYWwvaW5j bHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAzCnN0cnVjdCBfU1RMX211dGV4X2xvY2sK ewoKCgoKCgoKICBfX2d0aHJlYWRfbXV0ZXhfdCBfTV9sb2NrOwogIHZvaWQgX01faW5pdGlhbGl6 ZSgpIHsKIyAzNzEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5o IiAzCiAgfQogIHZvaWQgX01fYWNxdWlyZV9sb2NrKCkgewoKCgogICAgX19ndGhyZWFkX211dGV4 X2xvY2soJl9NX2xvY2spOwogIH0KICB2b2lkIF9NX3JlbGVhc2VfbG9jaygpIHsKCgoKICAgIF9f Z3RocmVhZF9tdXRleF91bmxvY2soJl9NX2xvY2spOwogIH0KIyA0ODIgIi91c3IvbG9jYWwvaW5j bHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAzCn07CiMgNTIxICIvdXNyL2xvY2FsL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMwpzdHJ1Y3QgX1NUTF9hdXRvX2xvY2sK ewogIF9TVExfbXV0ZXhfbG9jayYgX01fbG9jazsKCiAgX1NUTF9hdXRvX2xvY2soX1NUTF9tdXRl eF9sb2NrJiBfX2xvY2spIDogX01fbG9jayhfX2xvY2spCiAgICB7IF9NX2xvY2suX01fYWNxdWly ZV9sb2NrKCk7IH0KICB+X1NUTF9hdXRvX2xvY2soKSB7IF9NX2xvY2suX01fcmVsZWFzZV9sb2Nr KCk7IH0KCnByaXZhdGU6CiAgdm9pZCBvcGVyYXRvcj0oY29uc3QgX1NUTF9hdXRvX2xvY2smKTsK ICBfU1RMX2F1dG9fbG9jayhjb25zdCBfU1RMX2F1dG9fbG9jayYpOwp9OwoKfQojIDY4ICIvdXNy L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDIgMwojIDk3ICIvdXNyL2xv Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoK CnRlbXBsYXRlIDxpbnQgX19pbnN0PgpjbGFzcyBfX21hbGxvY19hbGxvY190ZW1wbGF0ZSB7Cgpw cml2YXRlOgoKICBzdGF0aWMgdm9pZCogX1Nfb29tX21hbGxvYyhzaXplX3QpOwogIHN0YXRpYyB2 b2lkKiBfU19vb21fcmVhbGxvYyh2b2lkKiwgc2l6ZV90KTsKICBzdGF0aWMgdm9pZCAoKiBfX21h bGxvY19hbGxvY19vb21faGFuZGxlcikoKTsKCnB1YmxpYzoKCiAgc3RhdGljIHZvaWQqIGFsbG9j YXRlKHNpemVfdCBfX24pCiAgewogICAgdm9pZCogX19yZXN1bHQgPSBtYWxsb2MoX19uKTsKICAg IGlmICgwID09IF9fcmVzdWx0KSBfX3Jlc3VsdCA9IF9TX29vbV9tYWxsb2MoX19uKTsKICAgIHJl dHVybiBfX3Jlc3VsdDsKICB9CgogIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCogX19wLCBz aXplX3QgKQogIHsKICAgIGZyZWUoX19wKTsKICB9CgogIHN0YXRpYyB2b2lkKiByZWFsbG9jYXRl KHZvaWQqIF9fcCwgc2l6ZV90ICwgc2l6ZV90IF9fbmV3X3N6KQogIHsKICAgIHZvaWQqIF9fcmVz dWx0ID0gcmVhbGxvYyhfX3AsIF9fbmV3X3N6KTsKICAgIGlmICgwID09IF9fcmVzdWx0KSBfX3Jl c3VsdCA9IF9TX29vbV9yZWFsbG9jKF9fcCwgX19uZXdfc3opOwogICAgcmV0dXJuIF9fcmVzdWx0 OwogIH0KCiAgc3RhdGljIHZvaWQgKCogX19zZXRfbWFsbG9jX2hhbmRsZXIodm9pZCAoKl9fZiko KSkpKCkKICB7CiAgICB2b2lkICgqIF9fb2xkKSgpID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRs ZXI7CiAgICBfX21hbGxvY19hbGxvY19vb21faGFuZGxlciA9IF9fZjsKICAgIHJldHVybihfX29s ZCk7CiAgfQoKfTsKCgoKdGVtcGxhdGUgPGludCBfX2luc3Q+CnZvaWQgKCogX19tYWxsb2NfYWxs b2NfdGVtcGxhdGU8X19pbnN0Pjo6X19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIpKCkgPSAwOwoK dGVtcGxhdGUgPGludCBfX2luc3Q+CnZvaWQqCl9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5z dD46Ol9TX29vbV9tYWxsb2Moc2l6ZV90IF9fbikKewogICAgdm9pZCAoKiBfX215X21hbGxvY19o YW5kbGVyKSgpOwogICAgdm9pZCogX19yZXN1bHQ7CgogICAgZm9yICg7OykgewogICAgICAgIF9f bXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICBp ZiAoMCA9PSBfX215X21hbGxvY19oYW5kbGVyKSB7IHN0ZDo6X190aHJvd19iYWRfYWxsb2MoKTsg fQogICAgICAgICgqX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgICBfX3Jlc3VsdCA9IG1h bGxvYyhfX24pOwogICAgICAgIGlmIChfX3Jlc3VsdCkgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0K fQoKdGVtcGxhdGUgPGludCBfX2luc3Q+CnZvaWQqIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9f aW5zdD46Ol9TX29vbV9yZWFsbG9jKHZvaWQqIF9fcCwgc2l6ZV90IF9fbikKewogICAgdm9pZCAo KiBfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgdm9pZCogX19yZXN1bHQ7CgogICAgZm9yICg7 OykgewogICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFu ZGxlcjsKICAgICAgICBpZiAoMCA9PSBfX215X21hbGxvY19oYW5kbGVyKSB7IHN0ZDo6X190aHJv d19iYWRfYWxsb2MoKTsgfQogICAgICAgICgqX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAg ICBfX3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBfX24pOwogICAgICAgIGlmIChfX3Jlc3VsdCkgcmV0 dXJuKF9fcmVzdWx0KTsKICAgIH0KfQoKdHlwZWRlZiBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTww PiBtYWxsb2NfYWxsb2M7Cgp0ZW1wbGF0ZTxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KY2xhc3Mg c2ltcGxlX2FsbG9jIHsKCnB1YmxpYzoKICAgIHN0YXRpYyBfVHAqIGFsbG9jYXRlKHNpemVfdCBf X24pCiAgICAgIHsgcmV0dXJuIDAgPT0gX19uID8gMCA6IChfVHAqKSBfQWxsb2M6OmFsbG9jYXRl KF9fbiAqIHNpemVvZiAoX1RwKSk7IH0KICAgIHN0YXRpYyBfVHAqIGFsbG9jYXRlKHZvaWQpCiAg ICAgIHsgcmV0dXJuIChfVHAqKSBfQWxsb2M6OmFsbG9jYXRlKHNpemVvZiAoX1RwKSk7IH0KICAg IHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUoX1RwKiBfX3AsIHNpemVfdCBfX24pCiAgICAgIHsgaWYg KDAgIT0gX19uKSBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YgKF9UcCkpOyB9 CiAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKF9UcCogX19wKQogICAgICB7IF9BbGxvYzo6ZGVh bGxvY2F0ZShfX3AsIHNpemVvZiAoX1RwKSk7IH0KfTsKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9B bGxvYz4KY2xhc3MgZGVidWdfYWxsb2MgewoKcHJpdmF0ZToKCiAgZW51bSB7X1NfZXh0cmEgPSA4 fTsKCgoKcHVibGljOgoKICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICB7CiAg ICBjaGFyKiBfX3Jlc3VsdCA9IChjaGFyKilfQWxsb2M6OmFsbG9jYXRlKF9fbiArIChpbnQpIF9T X2V4dHJhKTsKICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbjsKICAgIHJldHVybiBfX3Jlc3Vs dCArIChpbnQpIF9TX2V4dHJhOwogIH0KCiAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBf X3AsIHNpemVfdCBfX24pCiAgewogICAgY2hhciogX19yZWFsX3AgPSAoY2hhciopX19wIC0gKGlu dCkgX1NfZXh0cmE7CiAgICAodm9pZCkoKCooc2l6ZV90KilfX3JlYWxfcCA9PSBfX24pIHx8IChf X2Fzc2VydCgiKihzaXplX3QqKV9fcmVhbF9wID09IF9fbiIsICIvdXNyL2xvY2FsL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiLCAyMTkpLCAwKSk7CiAgICBfQWxsb2M6OmRlYWxsb2Nh dGUoX19yZWFsX3AsIF9fbiArIChpbnQpIF9TX2V4dHJhKTsKICB9CgogIHN0YXRpYyB2b2lkKiBy ZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdfc3opCiAg ewogICAgY2hhciogX19yZWFsX3AgPSAoY2hhciopX19wIC0gKGludCkgX1NfZXh0cmE7CiAgICAo dm9pZCkoKCooc2l6ZV90KilfX3JlYWxfcCA9PSBfX29sZF9zeikgfHwgKF9fYXNzZXJ0KCIqKHNp emVfdCopX19yZWFsX3AgPT0gX19vbGRfc3oiLCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i aXRzL3N0bF9hbGxvYy5oIiwgMjI2KSwgMCkpOwogICAgY2hhciogX19yZXN1bHQgPSAoY2hhciop CiAgICAgIF9BbGxvYzo6cmVhbGxvY2F0ZShfX3JlYWxfcCwgX19vbGRfc3ogKyAoaW50KSBfU19l eHRyYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19zeiArIChpbnQp IF9TX2V4dHJhKTsKICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbmV3X3N6OwogICAgcmV0dXJu IF9fcmVzdWx0ICsgKGludCkgX1NfZXh0cmE7CiAgfQoKfTsKIyAyNzAgIi91c3IvbG9jYWwvaW5j bHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMwp0ZW1wbGF0ZSA8Ym9vbCB0aHJlYWRzLCBp bnQgaW5zdD4KY2xhc3MgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlIHsKCnByaXZhdGU6CgoKICBl bnVtIHtfQUxJR04gPSA4fTsKICBlbnVtIHtfTUFYX0JZVEVTID0gMTI4fTsKICBlbnVtIHtfTkZS RUVMSVNUUyA9IDE2fTsKICBzdGF0aWMgc2l6ZV90CiAgX1Nfcm91bmRfdXAoc2l6ZV90IF9fYnl0 ZXMpCiAgICB7IHJldHVybiAoKChfX2J5dGVzKSArIChzaXplX3QpIF9BTElHTi0xKSAmIH4oKHNp emVfdCkgX0FMSUdOIC0gMSkpOyB9CgogIHVuaW9uIF9PYmogewogICAgICAgIHVuaW9uIF9PYmoq IF9NX2ZyZWVfbGlzdF9saW5rOwogICAgICAgIGNoYXIgX01fY2xpZW50X2RhdGFbMV07CiAgfTsK CiAgc3RhdGljIF9PYmoqIHZvbGF0aWxlIF9TX2ZyZWVfbGlzdFtdOwoKICBzdGF0aWMgc2l6ZV90 IF9TX2ZyZWVsaXN0X2luZGV4KHNpemVfdCBfX2J5dGVzKSB7CiAgICAgICAgcmV0dXJuICgoKF9f Ynl0ZXMpICsgKHNpemVfdClfQUxJR04tMSkvKHNpemVfdClfQUxJR04gLSAxKTsKICB9CgoKICBz dGF0aWMgdm9pZCogX1NfcmVmaWxsKHNpemVfdCBfX24pOwoKCiAgc3RhdGljIGNoYXIqIF9TX2No dW5rX2FsbG9jKHNpemVfdCBfX3NpemUsIGludCYgX19ub2Jqcyk7CgoKICBzdGF0aWMgY2hhciog X1Nfc3RhcnRfZnJlZTsKICBzdGF0aWMgY2hhciogX1NfZW5kX2ZyZWU7CiAgc3RhdGljIHNpemVf dCBfU19oZWFwX3NpemU7CgoKICAgIHN0YXRpYyBfU1RMX211dGV4X2xvY2sgX1Nfbm9kZV9hbGxv Y2F0b3JfbG9jazsKCgoKCgogICAgY2xhc3MgX0xvY2s7CiAgICBmcmllbmQgY2xhc3MgX0xvY2s7 CiAgICBjbGFzcyBfTG9jayB7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICBfTG9jaygpIHsg eyBpZiAodGhyZWFkcykgX1Nfbm9kZV9hbGxvY2F0b3JfbG9jay5fTV9hY3F1aXJlX2xvY2soKTsg fTsgfQogICAgICAgICAgICB+X0xvY2soKSB7IHsgaWYgKHRocmVhZHMpIF9TX25vZGVfYWxsb2Nh dG9yX2xvY2suX01fcmVsZWFzZV9sb2NrKCk7IH07IH0KICAgIH07CgpwdWJsaWM6CgoKICBzdGF0 aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICB7CiAgICB2b2lkKiBfX3JldCA9IDA7Cgog ICAgaWYgKF9fbiA+IChzaXplX3QpIF9NQVhfQllURVMpIHsKICAgICAgX19yZXQgPSBtYWxsb2Nf YWxsb2M6OmFsbG9jYXRlKF9fbik7CiAgICB9CiAgICBlbHNlIHsKICAgICAgX09iaiogdm9sYXRp bGUqIF9fbXlfZnJlZV9saXN0CiAgICAgICAgICA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0 X2luZGV4KF9fbik7CgoKCgoKICAgICAgX0xvY2sgX19sb2NrX2luc3RhbmNlOwoKICAgICAgX09i aiogX19yZXN1bHQgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgIGlmIChfX3Jlc3VsdCA9PSAwKQog ICAgICAgIF9fcmV0ID0gX1NfcmVmaWxsKF9TX3JvdW5kX3VwKF9fbikpOwogICAgICBlbHNlIHsK ICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3Jlc3VsdCAtPiBfTV9mcmVlX2xpc3RfbGluazsK ICAgICAgICBfX3JldCA9IF9fcmVzdWx0OwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIF9fcmV0 OwogIH07CgoKICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fbikK ICB7CiAgICBpZiAoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykKICAgICAgbWFsbG9jX2FsbG9j OjpkZWFsbG9jYXRlKF9fcCwgX19uKTsKICAgIGVsc2UgewogICAgICBfT2JqKiB2b2xhdGlsZSog X19teV9mcmVlX2xpc3QKICAgICAgICAgID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5k ZXgoX19uKTsKICAgICAgX09iaiogX19xID0gKF9PYmoqKV9fcDsKCgoKCiAgICAgIF9Mb2NrIF9f bG9ja19pbnN0YW5jZTsKCiAgICAgIF9fcSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2Zy ZWVfbGlzdDsKICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19xOwoKICAgIH0KICB9CgogIHN0YXRp YyB2b2lkKiByZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19u ZXdfc3opOwoKfSA7Cgp0eXBlZGVmIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0cnVlLCAwPiBh bGxvYzsKdHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8ZmFsc2UsIDA+IHNpbmdsZV9j bGllbnRfYWxsb2M7Cgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmlubGlu ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFk cywgX19pbnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0X2FsbG9j X3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYpCnsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxh dGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNv bnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mLAogICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMs IF9faW5zdD4mKQp7CiAgcmV0dXJuIGZhbHNlOwp9CgoKCgoKCgp0ZW1wbGF0ZSA8Ym9vbCBfX3Ro cmVhZHMsIGludCBfX2luc3Q+CmNoYXIqCl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVh ZHMsIF9faW5zdD46Ol9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgX19ub2Jq cykKewogICAgY2hhciogX19yZXN1bHQ7CiAgICBzaXplX3QgX190b3RhbF9ieXRlcyA9IF9fc2l6 ZSAqIF9fbm9ianM7CiAgICBzaXplX3QgX19ieXRlc19sZWZ0ID0gX1NfZW5kX2ZyZWUgLSBfU19z dGFydF9mcmVlOwoKICAgIGlmIChfX2J5dGVzX2xlZnQgPj0gX190b3RhbF9ieXRlcykgewogICAg ICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsKICAgICAgICBfU19zdGFydF9mcmVlICs9IF9f dG90YWxfYnl0ZXM7CiAgICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0gZWxzZSBpZiAoX19i eXRlc19sZWZ0ID49IF9fc2l6ZSkgewogICAgICAgIF9fbm9ianMgPSAoaW50KShfX2J5dGVzX2xl ZnQvX19zaXplKTsKICAgICAgICBfX3RvdGFsX2J5dGVzID0gX19zaXplICogX19ub2JqczsKICAg ICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgX1Nfc3RhcnRfZnJlZSArPSBf X3RvdGFsX2J5dGVzOwogICAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICB9IGVsc2UgewogICAg ICAgIHNpemVfdCBfX2J5dGVzX3RvX2dldCA9CiAgICAgICAgICAyICogX190b3RhbF9ieXRlcyAr IF9TX3JvdW5kX3VwKF9TX2hlYXBfc2l6ZSA+PiA0KTsKCiAgICAgICAgaWYgKF9fYnl0ZXNfbGVm dCA+IDApIHsKICAgICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0ID0KICAg ICAgICAgICAgICAgICAgICAgICAgX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19i eXRlc19sZWZ0KTsKCiAgICAgICAgICAgICgoX09iaiopX1Nfc3RhcnRfZnJlZSkgLT4gX01fZnJl ZV9saXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICpfX215X2ZyZWVfbGlz dCA9IChfT2JqKilfU19zdGFydF9mcmVlOwogICAgICAgIH0KICAgICAgICBfU19zdGFydF9mcmVl ID0gKGNoYXIqKW1hbGxvYyhfX2J5dGVzX3RvX2dldCk7CiAgICAgICAgaWYgKDAgPT0gX1Nfc3Rh cnRfZnJlZSkgewogICAgICAgICAgICBzaXplX3QgX19pOwogICAgICAgICAgICBfT2JqKiB2b2xh dGlsZSogX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgIF9PYmoqIF9fcDsKCgoKICAgICAgICAg ICAgZm9yIChfX2kgPSBfX3NpemU7CiAgICAgICAgICAgICAgICAgX19pIDw9IChzaXplX3QpIF9N QVhfQllURVM7CiAgICAgICAgICAgICAgICAgX19pICs9IChzaXplX3QpIF9BTElHTikgewogICAg ICAgICAgICAgICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9p bmRleChfX2kpOwogICAgICAgICAgICAgICAgX19wID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAg ICAgICAgICAgaWYgKDAgIT0gX19wKSB7CiAgICAgICAgICAgICAgICAgICAgKl9fbXlfZnJlZV9s aXN0ID0gX19wIC0+IF9NX2ZyZWVfbGlzdF9saW5rOwogICAgICAgICAgICAgICAgICAgIF9TX3N0 YXJ0X2ZyZWUgPSAoY2hhciopX19wOwogICAgICAgICAgICAgICAgICAgIF9TX2VuZF9mcmVlID0g X1Nfc3RhcnRfZnJlZSArIF9faTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4oX1NfY2h1bmtf YWxsb2MoX19zaXplLCBfX25vYmpzKSk7CgoKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg fQogICAgICAgICAgICBfU19lbmRfZnJlZSA9IDA7CiAgICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUg PSAoY2hhciopbWFsbG9jX2FsbG9jOjphbGxvY2F0ZShfX2J5dGVzX3RvX2dldCk7CgoKCiAgICAg ICAgfQogICAgICAgIF9TX2hlYXBfc2l6ZSArPSBfX2J5dGVzX3RvX2dldDsKICAgICAgICBfU19l bmRfZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2J5dGVzX3RvX2dldDsKICAgICAgICByZXR1cm4o X1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKSk7CiAgICB9Cn0KCgoKCgp0ZW1wbGF0ZSA8 Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CnZvaWQqCl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0 ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX3JlZmlsbChzaXplX3QgX19uKQp7CiAgICBpbnQgX19u b2JqcyA9IDIwOwogICAgY2hhciogX19jaHVuayA9IF9TX2NodW5rX2FsbG9jKF9fbiwgX19ub2Jq cyk7CiAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3Q7CiAgICBfT2JqKiBfX3Jlc3Vs dDsKICAgIF9PYmoqIF9fY3VycmVudF9vYmo7CiAgICBfT2JqKiBfX25leHRfb2JqOwogICAgaW50 IF9faTsKCiAgICBpZiAoMSA9PSBfX25vYmpzKSByZXR1cm4oX19jaHVuayk7CiAgICBfX215X2Zy ZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CgoKICAgICAg X19yZXN1bHQgPSAoX09iaiopX19jaHVuazsKICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19uZXh0 X29iaiA9IChfT2JqKikoX19jaHVuayArIF9fbik7CiAgICAgIGZvciAoX19pID0gMTsgOyBfX2kr KykgewogICAgICAgIF9fY3VycmVudF9vYmogPSBfX25leHRfb2JqOwogICAgICAgIF9fbmV4dF9v YmogPSAoX09iaiopKChjaGFyKilfX25leHRfb2JqICsgX19uKTsKICAgICAgICBpZiAoX19ub2Jq cyAtIDEgPT0gX19pKSB7CiAgICAgICAgICAgIF9fY3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0 X2xpbmsgPSAwOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9IGVsc2UgewogICAgICAgICAg ICBfX2N1cnJlbnRfb2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gX19uZXh0X29iajsKICAgICAg ICB9CiAgICAgIH0KICAgIHJldHVybihfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxib29sIHRocmVh ZHMsIGludCBpbnN0Pgp2b2lkKgpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dGhyZWFkcywgaW5z dD46OnJlYWxsb2NhdGUodm9pZCogX19wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fb2xkX3N6LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbmV3X3N6KQp7CiAgICB2 b2lkKiBfX3Jlc3VsdDsKICAgIHNpemVfdCBfX2NvcHlfc3o7CgogICAgaWYgKF9fb2xkX3N6ID4g KHNpemVfdCkgX01BWF9CWVRFUyAmJiBfX25ld19zeiA+IChzaXplX3QpIF9NQVhfQllURVMpIHsK ICAgICAgICByZXR1cm4ocmVhbGxvYyhfX3AsIF9fbmV3X3N6KSk7CiAgICB9CiAgICBpZiAoX1Nf cm91bmRfdXAoX19vbGRfc3opID09IF9TX3JvdW5kX3VwKF9fbmV3X3N6KSkgcmV0dXJuKF9fcCk7 CiAgICBfX3Jlc3VsdCA9IGFsbG9jYXRlKF9fbmV3X3N6KTsKICAgIF9fY29weV9zeiA9IF9fbmV3 X3N6ID4gX19vbGRfc3o/IF9fb2xkX3N6IDogX19uZXdfc3o7CiAgICBtZW1jcHkoX19yZXN1bHQs IF9fcCwgX19jb3B5X3N6KTsKICAgIGRlYWxsb2NhdGUoX19wLCBfX29sZF9zeik7CiAgICByZXR1 cm4oX19yZXN1bHQpOwp9CgoKICAgIHRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5z dD4KICAgIF9TVExfbXV0ZXhfbG9jawogICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy ZWFkcywgX19pbnN0Pjo6X1Nfbm9kZV9hbGxvY2F0b3JfbG9jawogICAgICAgID0geyB7e3swfSwg MH0sIHt7ezB9fX0sIDB9IH07CgoKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5z dD4KY2hhciogX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1Nf c3RhcnRfZnJlZSA9IDA7Cgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmNo YXIqIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2VuZF9m cmVlID0gMDsKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4Kc2l6ZV90IF9f ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2hlYXBfc2l6ZSA9 IDA7Cgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CnR5cGVuYW1lIF9fZGVm YXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9PYmoqIHZvbGF0aWxlCl9f ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gOjpfU19mcmVlX2xpc3Rb CiAgICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfTkZSRUVM SVNUUwpdID0gezAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs IH07CiMgNTU1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDMK dGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgYWxsb2NhdG9yIHsKICB0eXBlZGVmIGFsbG9jIF9B bGxvYzsKcHVibGljOgogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRp ZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBj b25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKICB0eXBl ZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7 CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgYWxs b2NhdG9yPF9UcDE+IG90aGVyOwogIH07CgogIGFsbG9jYXRvcigpIHt9CiAgYWxsb2NhdG9yKGNv bnN0IGFsbG9jYXRvciYpIHt9CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IGFsbG9jYXRvcihjb25z dCBhbGxvY2F0b3I8X1RwMT4mKSB7fQogIH5hbGxvY2F0b3IoKSB7fQoKICBwb2ludGVyIGFkZHJl c3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQogIGNvbnN0X3BvaW50ZXIg YWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CgoKCiAg X1RwKiBhbGxvY2F0ZShzaXplX3R5cGUgX19uLCBjb25zdCB2b2lkKiA9IDApIHsKICAgIHJldHVy biBfX24gIT0gMCA/IHN0YXRpY19jYXN0PF9UcCo+KF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6 ZW9mKF9UcCkpKQogICAgICAgICAgICAgICAgICAgIDogMDsKICB9CgoKICB2b2lkIGRlYWxsb2Nh dGUocG9pbnRlciBfX3AsIHNpemVfdHlwZSBfX24pCiAgICB7IF9BbGxvYzo6ZGVhbGxvY2F0ZShf X3AsIF9fbiAqIHNpemVvZihfVHApKTsgfQoKICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdAog ICAgeyByZXR1cm4gc2l6ZV90KC0xKSAvIHNpemVvZihfVHApOyB9CgogIHZvaWQgY29uc3RydWN0 KHBvaW50ZXIgX19wLCBjb25zdCBfVHAmIF9fdmFsKSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0K ICB2b2lkIGRlc3Ryb3kocG9pbnRlciBfX3ApIHsgX19wLT5+X1RwKCk7IH0KfTsKCnRlbXBsYXRl PD4KY2xhc3MgYWxsb2NhdG9yPHZvaWQ+IHsKcHVibGljOgogIHR5cGVkZWYgc2l6ZV90IHNpemVf dHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lk KiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVm IHZvaWQgdmFsdWVfdHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQg ewogICAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7CiAgfTsKfTsKCgp0ZW1wbGF0ZSA8 Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgYWxsb2Nh dG9yPF9UMT4mLCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpCnsKICByZXR1cm4gdHJ1ZTsKfQoKdGVt cGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0 IGFsbG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4mKQp7CiAgcmV0dXJuIGZhbHNl Owp9CiMgNjMxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDMK dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX19hbGxvY2F0b3Igewog IF9BbGxvYyBfX3VuZGVybHlpbmdfYWxsb2M7CgogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsK ICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50 ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJl ZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYg X1RwIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsK ICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsKICB9OwoKICBfX2Fs bG9jYXRvcigpIHt9CiAgX19hbGxvY2F0b3IoY29uc3QgX19hbGxvY2F0b3ImIF9fYSkKICAgIDog X191bmRlcmx5aW5nX2FsbG9jKF9fYS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9CiAgdGVtcGxhdGUg PGNsYXNzIF9UcDE+CiAgX19hbGxvY2F0b3IoY29uc3QgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9j PiYgX19hKQogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5kZXJseWluZ19hbGxvYykg e30KICB+X19hbGxvY2F0b3IoKSB7fQoKICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkg Y29uc3QgeyByZXR1cm4gJl9feDsgfQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZl cmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CgoKICBfVHAqIGFsbG9jYXRlKHNpemVf dHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAwCiAgICAgICAg PyBzdGF0aWNfY2FzdDxfVHAqPihfX3VuZGVybHlpbmdfYWxsb2MuYWxsb2NhdGUoX19uICogc2l6 ZW9mKF9UcCkpKQogICAgICAgIDogMDsKICB9CgoKICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciBf X3AsIHNpemVfdHlwZSBfX24pCiAgICB7IF9fdW5kZXJseWluZ19hbGxvYy5kZWFsbG9jYXRlKF9f cCwgX19uICogc2l6ZW9mKF9UcCkpOyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0CiAg ICB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KCiAgdm9pZCBjb25zdHJ1Y3Qo cG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsgfQog IHZvaWQgZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQp9OwoKdGVtcGxhdGUg PGNsYXNzIF9BbGxvYz4KY2xhc3MgX19hbGxvY2F0b3I8dm9pZCwgX0FsbG9jPiB7CiAgdHlwZWRl ZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsK ICB0eXBlZGVmIHZvaWQqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2b2lkKiBjb25zdF9wb2lu dGVyOwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4g c3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3Ro ZXI7CiAgfTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJv b2wgb3BlcmF0b3I9PShjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEsCiAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2EyKQp7 CiAgcmV0dXJuIF9fYTEuX191bmRlcmx5aW5nX2FsbG9jID09IF9fYTIuX191bmRlcmx5aW5nX2Fs bG9jOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9w ZXJhdG9yIT0oY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2ExLAogICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMikKewogIHJl dHVybiBfX2ExLl9fdW5kZXJseWluZ19hbGxvYyAhPSBfX2EyLl9fdW5kZXJseWluZ19hbGxvYzsK fQoKCgoKCnRlbXBsYXRlIDxpbnQgaW5zdD4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBf X21hbGxvY19hbGxvY190ZW1wbGF0ZTxpbnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8aW5zdD4mKQp7CiAgcmV0dXJuIHRydWU7Cn0KCnRl bXBsYXRlIDxpbnQgX19pbnN0PgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9fbWFsbG9j X2FsbG9jX3RlbXBsYXRlPF9faW5zdD4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9f bWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4mKQp7CiAgcmV0dXJuIGZhbHNlOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGRlYnVnX2Fs bG9jPF9BbGxvYz4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlYnVnX2FsbG9jPF9B bGxvYz4mKSB7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmlubGlu ZSBib29sIG9wZXJhdG9yIT0oY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsKICByZXR1cm4gZmFsc2U7 Cn0KIyA3NjEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMwp0 ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0 cwp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gZmFsc2U7CiAgdHlwZWRl ZiB0eXBlbmFtZSBfQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8X1RwPjo6b3RoZXIgYWxsb2Nh dG9yX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpjb25z dCBib29sIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6X1NfaW5zdGFuY2VsZXNzOwoK Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxf VHAsIGFsbG9jYXRvcjxfVHAxPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxl c3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgYWxsb2M+IF9BbGxvY190eXBl OwogIHR5cGVkZWYgYWxsb2NhdG9yPF9UcD4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKCnRlbXBsYXRl IDxjbGFzcyBfVHAsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19tYWxs b2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0 YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxs b2NfdGVtcGxhdGU8X19pbnN0PiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8 X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7Cn07 CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgYm9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CnN0cnVj dCBfQWxsb2NfdHJhaXRzPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywg X19pbnN0PiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwog IHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy ZWFkcywgX19pbnN0PiA+CiAgICAgICAgICBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2Nh dG9yPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA+CiAg ICAgICAgICBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf QWxsb2M+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+CnsK ICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2lt cGxlX2FsbG9jPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9BbGxvY190eXBlOwogIHR5cGVk ZWYgX19hbGxvY2F0b3I8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7 Cn07CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBpbnQgX19pbnN0PgpzdHJ1 Y3QgX0FsbG9jX3RyYWl0czxfVHAsCiAgICAgICAgICAgICAgICAgICAgIF9fYWxsb2NhdG9yPF9U cDEsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiA+CnsKICBzdGF0aWMgY29uc3Qg Ym9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwg X19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYg X19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2Nh dG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwgYm9vbCBfX3Ro ciwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLAogICAgICAgICAgICAgICAg ICAgICAgX19hbGxvY2F0b3I8X1RwMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RociwgX19pbnN0PiA+ID4KewogIHN0YXRpYyBj b25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8 X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+CiAgICAgICAgICBf QWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWZhdWx0X2FsbG9jX3Rl bXBsYXRlPF9fdGhyLF9faW5zdD4gPgogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVt cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX0FsbG9j X3RyYWl0czxfVHAsIF9fYWxsb2NhdG9yPF9UcDEsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPiA+CnsK ICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2lt cGxlX2FsbG9jPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9BbGxvY190eXBlOwogIHR5cGVk ZWYgX19hbGxvY2F0b3I8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7 Cn07Cgp9CiMgNjMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbGlzdC5oIiAy IDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAx IDMKIyA2MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIg MwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvbmV3IiAxIDMKIyA2NCAiL3Vzci9sb2Nh bC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMiAzCgpuYW1lc3BhY2Ugc3Rk CnsKIyA3NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIg Mwp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSB2b2lkIF9Db25zdHJ1Y3Qo X1QxKiBfX3AsIGNvbnN0IF9UMiYgX192YWx1ZSkgewpuZXcgKCh2b2lkKikgX19wKSBfVDEoX192 YWx1ZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDE+CmlubGluZSB2b2lkIF9Db25zdHJ1Y3QoX1Qx KiBfX3ApIHsKICBuZXcgKCh2b2lkKikgX19wKSBfVDEoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9U cD4KaW5saW5lIHZvaWQgX0Rlc3Ryb3koX1RwKiBfX3BvaW50ZXIpIHsKICBfX3BvaW50ZXItPn5f VHAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CnZvaWQKX19kZXN0cm95 X2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBf X2ZhbHNlX3R5cGUpCnsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAg ICBkZXN0cm95KCYqX19maXJzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9y PgppbmxpbmUgdm9pZCBfX2Rlc3Ryb3lfYXV4KF9Gb3J3YXJkSXRlcmF0b3IsIF9Gb3J3YXJkSXRl cmF0b3IsIF9fdHJ1ZV90eXBlKSB7fQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3Is IGNsYXNzIF9UcD4KaW5saW5lIHZvaWQKX19kZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJz dCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIF9UcCopCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9f dHlwZV90cmFpdHM8X1RwPjo6aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcgogICAgICAgICAgX1RyaXZp YWxfZGVzdHJ1Y3RvcjsKICBfX2Rlc3Ryb3lfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX1RyaXZpYWxf ZGVzdHJ1Y3RvcigpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CmlubGlu ZSB2b2lkIF9EZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRv ciBfX2xhc3QpIHsKICBfX2Rlc3Ryb3koX19maXJzdCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19m aXJzdCkpOwp9CgppbmxpbmUgdm9pZCBfRGVzdHJveShjaGFyKiwgY2hhciopIHt9CmlubGluZSB2 b2lkIF9EZXN0cm95KGludCosIGludCopIHt9CmlubGluZSB2b2lkIF9EZXN0cm95KGxvbmcqLCBs b25nKikge30KaW5saW5lIHZvaWQgX0Rlc3Ryb3koZmxvYXQqLCBmbG9hdCopIHt9CmlubGluZSB2 b2lkIF9EZXN0cm95KGRvdWJsZSosIGRvdWJsZSopIHt9CmlubGluZSB2b2lkIF9EZXN0cm95KHdj aGFyX3QqLCB3Y2hhcl90Kikge30KCgoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4K aW5saW5lIHZvaWQgY29uc3RydWN0KF9UMSogX19wLCBjb25zdCBfVDImIF9fdmFsdWUpIHsKICBf Q29uc3RydWN0KF9fcCwgX192YWx1ZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDE+CmlubGluZSB2 b2lkIGNvbnN0cnVjdChfVDEqIF9fcCkgewogIF9Db25zdHJ1Y3QoX19wKTsKfQoKdGVtcGxhdGUg PGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgZGVzdHJveShfVHAqIF9fcG9pbnRlcikgewogIF9EZXN0 cm95KF9fcG9pbnRlcik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgppbmxp bmUgdm9pZCBkZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRv ciBfX2xhc3QpIHsKICBfRGVzdHJveShfX2ZpcnN0LCBfX2xhc3QpOwp9Cgp9CiMgNjQgIi91c3Iv bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbGlzdC5oIiAyIDMKIyAxICIvdXNyL2xvY2Fs L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMSAzCiMgNjMgIi91c3Iv bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiMgMSAiL3Vz ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDEgMwojIDY0ICIvdXNy L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMiAzCgpuYW1l c3BhY2Ugc3RkCnsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0Zvcndh cmRJdGVyPgppbmxpbmUgX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfSW5w dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgX190cnVl X3R5cGUpCnsKICByZXR1cm4gY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoKdGVt cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KX0ZvcndhcmRJdGVy Cl9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAog ICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKQp7CiAgX0ZvcndhcmRJdGVyIF9f Y3VyID0gX19yZXN1bHQ7CiAgICAgICAgICAgIHsKICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xh c3Q7ICsrX19maXJzdCwgKytfX2N1cikKICAgICAgX0NvbnN0cnVjdCgmKl9fY3VyLCAqX19maXJz dCk7CiAgICByZXR1cm4gX19jdXI7CiAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2Fy ZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfY29w eShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg ICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsIF9UcCopCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9f dHlwZV90cmFpdHM8X1RwPjo6aXNfUE9EX3R5cGUgX0lzX1BPRDsKICByZXR1cm4gX191bmluaXRp YWxpemVkX2NvcHlfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9Jc19QT0QoKSk7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBf Rm9yd2FyZEl0ZXIKICB1bmluaXRpYWxpemVkX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w dXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0 KQp7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1 bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX3Jlc3VsdCkp Owp9CgppbmxpbmUgY2hhciogdW5pbml0aWFsaXplZF9jb3B5KGNvbnN0IGNoYXIqIF9fZmlyc3Qs IGNvbnN0IGNoYXIqIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy KiBfX3Jlc3VsdCkgewogIG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIF9fbGFzdCAtIF9fZmly c3QpOwogIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKaW5saW5lIHdj aGFyX3QqCnVuaW5pdGlhbGl6ZWRfY29weShjb25zdCB3Y2hhcl90KiBfX2ZpcnN0LCBjb25zdCB3 Y2hhcl90KiBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICB3Y2hhcl90KiBfX3Jlc3VsdCkKewog IG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZih3Y2hhcl90KSAqIChfX2xhc3QgLSBf X2ZpcnN0KSk7CiAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwp9CgoKCnRl bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0ZvcndhcmRJdGVy PgpwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4KX191bmluaXRpYWxpemVkX2NvcHlfbihf SW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAg X0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJh dG9yX3RhZykKewogIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fcmVzdWx0OwogICAgICAgICAgICB7 CiAgICBmb3IgKCA7IF9fY291bnQgPiAwIDsgLS1fX2NvdW50LCArK19fZmlyc3QsICsrX19jdXIp CiAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgKl9fZmlyc3QpOwogICAgcmV0dXJuIHBhaXI8X0lu cHV0SXRlciwgX0ZvcndhcmRJdGVyPihfX2ZpcnN0LCBfX2N1cik7CiAgfQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B Y2Nlc3NJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgcGFpcjxf UmFuZG9tQWNjZXNzSXRlciwgX0ZvcndhcmRJdGVyPgpfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9S YW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgICAgICAgICAg ICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgIHJhbmRv bV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0ID0gX19m aXJzdCArIF9fY291bnQ7CiAgcmV0dXJuIHBhaXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9Gb3J3YXJk SXRlcj4oCiAgICAgICAgICAgICAgICAgX19sYXN0LAogICAgICAgICAgICAgICAgIHVuaW5pdGlh bGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgcGFp cjxfSW5wdXRJdGVyLCBfRm9yd2FyZEl0ZXI+Cl9fdW5pbml0aWFsaXplZF9jb3B5X24oX0lucHV0 SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICBfRm9yd2Fy ZEl0ZXIgX19yZXN1bHQpIHsKICByZXR1cm4gX191bmluaXRpYWxpemVkX2NvcHlfbihfX2ZpcnN0 LCBfX2NvdW50LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2l0 ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIs IGNsYXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBwYWlyPF9JbnB1dEl0ZXIs IF9Gb3J3YXJkSXRlcj4KdW5pbml0aWFsaXplZF9jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBf U2l6ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQp IHsKICByZXR1cm4gX191bmluaXRpYWxpemVkX2NvcHlfbihfX2ZpcnN0LCBfX2NvdW50LCBfX3Jl c3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5 KF9fZmlyc3QpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+ CmlubGluZSB2b2lkCl9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19maXJz dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9U cCYgX194LCBfX3RydWVfdHlwZSkKewogIGZpbGwoX19maXJzdCwgX19sYXN0LCBfX3gpOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CnZvaWQKX191bmluaXRpYWxp emVkX2ZpbGxfYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fZmFsc2VfdHlwZSkKewog IF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fZmlyc3Q7CiAgICAgICAgICAgIHsKICAgIGZvciAoIDsg X19jdXIgIT0gX19sYXN0OyArK19fY3VyKQogICAgICBfQ29uc3RydWN0KCYqX19jdXIsIF9feCk7 CiAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9UcDE+CmlubGluZSB2b2lk IF9fdW5pbml0aWFsaXplZF9maWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9feCwg X1RwMSopCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwMT46OmlzX1BPRF90 eXBlIF9Jc19QT0Q7CiAgX191bmluaXRpYWxpemVkX2ZpbGxfYXV4KF9fZmlyc3QsIF9fbGFzdCwg X194LCBfSXNfUE9EKCkpOwoKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3Mg X1RwPgppbmxpbmUgdm9pZCB1bmluaXRpYWxpemVkX2ZpbGwoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gpCnsKICBfX3VuaW5pdGlh bGl6ZWRfZmlsbChfX2ZpcnN0LCBfX2xhc3QsIF9feCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsK fQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1Rw PgppbmxpbmUgX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9Gb3J3YXJk SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IF9UcCYgX194LCBfX3RydWVfdHlwZSkKewogIHJldHVybiBmaWxsX24oX19maXJzdCwgX19uLCBf X3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3Mg X1RwPgpfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVy IF9fZmlyc3QsIF9TaXplIF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1Rw JiBfX3gsIF9fZmFsc2VfdHlwZSkKewogIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fZmlyc3Q7CiAg ICAgICAgICAgIHsKICAgIGZvciAoIDsgX19uID4gMDsgLS1fX24sICsrX19jdXIpCiAgICAgIF9D b25zdHJ1Y3QoJipfX2N1ciwgX194KTsKICAgIHJldHVybiBfX2N1cjsKICB9CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy ZEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHAsIGNsYXNzIF9UcDE+CmlubGluZSBfRm9yd2Fy ZEl0ZXIKX191bmluaXRpYWxpemVkX2ZpbGxfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUg X19uLCBjb25zdCBfVHAmIF9feCwgX1RwMSopCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90 cmFpdHM8X1RwMT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXpl ZF9maWxsX25fYXV4KF9fZmlyc3QsIF9fbiwgX194LCBfSXNfUE9EKCkpOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwPgppbmxpbmUgX0Zvcndh cmRJdGVyCnVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBf X24sIGNvbnN0IF9UcCYgX194KQp7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9maWxsX24oX19m aXJzdCwgX19uLCBfX3gsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KIyAyNjAgIi91c3IvbG9j YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCnRlbXBsYXRlIDxj bGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4K aW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfY29weV9jb3B5KF9JbnB1dEl0ZXIx IF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAg IF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAg ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKewogIF9Gb3J3YXJkSXRlciBfX21p ZCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAg ICAgICAgICB7CiAgICByZXR1cm4gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QyLCBfX2xhc3Qy LCBfX21pZCk7CiAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK fQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfSW5w dXRJdGVyPgppbmxpbmUgX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9maWxsX2NvcHkoX0Zv cndhcmRJdGVyIF9fcmVzdWx0LCBfRm9yd2FyZEl0ZXIgX19taWQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgX1RwJiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0 SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCkKewogIHVuaW5pdGlhbGl6ZWRfZmlsbChf X3Jlc3VsdCwgX19taWQsIF9feCk7CiAgICAgICAgICAgIHsKICAgIHJldHVybiB1bmluaXRpYWxp emVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX21pZCk7CiAgfQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKfQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIs IGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZApfX3VuaW5pdGlhbGl6 ZWRfY29weV9maWxsKF9JbnB1dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwKICAg ICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRl ciBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194KQp7CiAg X0ZvcndhcmRJdGVyIF9fbWlkMiA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MSwgX19sYXN0 MSwgX19maXJzdDIpOwogICAgICAgICAgICB7CiAgICB1bmluaXRpYWxpemVkX2ZpbGwoX19taWQy LCBfX2xhc3QyLCBfX3gpOwogIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwp9Cgp9CiMgNjUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbGlz dC5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2xpc3QuaCIg MSAzCiMgNjMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfbGlzdC5oIiAzCiMg MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzCiMg NjQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfbGlzdC5oIiAyIDMKCm5hbWVz cGFjZSBzdGQKewoKc3RydWN0IF9MaXN0X25vZGVfYmFzZSB7CiAgX0xpc3Rfbm9kZV9iYXNlKiBf TV9uZXh0OwogIF9MaXN0X25vZGVfYmFzZSogX01fcHJldjsKfTsKCnRlbXBsYXRlIDxjbGFzcyBf VHA+CnN0cnVjdCBfTGlzdF9ub2RlIDogcHVibGljIF9MaXN0X25vZGVfYmFzZSB7CiAgX1RwIF9N X2RhdGE7Cn07CgpzdHJ1Y3QgX0xpc3RfaXRlcmF0b3JfYmFzZSB7CiAgdHlwZWRlZiBzaXplX3Qg c2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVm IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwoKICBfTGlzdF9u b2RlX2Jhc2UqIF9NX25vZGU7CgogIF9MaXN0X2l0ZXJhdG9yX2Jhc2UoX0xpc3Rfbm9kZV9iYXNl KiBfX3gpIDogX01fbm9kZShfX3gpIHt9CiAgX0xpc3RfaXRlcmF0b3JfYmFzZSgpIHt9CgogIHZv aWQgX01faW5jcigpIHsgX01fbm9kZSA9IF9NX25vZGUtPl9NX25leHQ7IH0KICB2b2lkIF9NX2Rl Y3IoKSB7IF9NX25vZGUgPSBfTV9ub2RlLT5fTV9wcmV2OyB9CgogIGJvb2wgb3BlcmF0b3I9PShj b25zdCBfTGlzdF9pdGVyYXRvcl9iYXNlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV9ub2Rl ID09IF9feC5fTV9ub2RlOwogIH0KICBib29sIG9wZXJhdG9yIT0oY29uc3QgX0xpc3RfaXRlcmF0 b3JfYmFzZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fbm9kZSAhPSBfX3guX01fbm9kZTsK ICB9Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBfVHAsIGNsYXNzIF9SZWYsIGNsYXNzIF9QdHI+CnN0cnVj dCBfTGlzdF9pdGVyYXRvciA6IHB1YmxpYyBfTGlzdF9pdGVyYXRvcl9iYXNlIHsKICB0eXBlZGVm IF9MaXN0X2l0ZXJhdG9yPF9UcCxfVHAmLF9UcCo+IGl0ZXJhdG9yOwogIHR5cGVkZWYgX0xpc3Rf aXRlcmF0b3I8X1RwLGNvbnN0IF9UcCYsY29uc3QgX1RwKj4gY29uc3RfaXRlcmF0b3I7CiAgdHlw ZWRlZiBfTGlzdF9pdGVyYXRvcjxfVHAsX1JlZixfUHRyPiBfU2VsZjsKCiAgdHlwZWRlZiBfVHAg dmFsdWVfdHlwZTsKICB0eXBlZGVmIF9QdHIgcG9pbnRlcjsKICB0eXBlZGVmIF9SZWYgcmVmZXJl bmNlOwogIHR5cGVkZWYgX0xpc3Rfbm9kZTxfVHA+IF9Ob2RlOwoKICBfTGlzdF9pdGVyYXRvcihf Tm9kZSogX194KSA6IF9MaXN0X2l0ZXJhdG9yX2Jhc2UoX194KSB7fQogIF9MaXN0X2l0ZXJhdG9y KCkge30KICBfTGlzdF9pdGVyYXRvcihjb25zdCBpdGVyYXRvciYgX194KSA6IF9MaXN0X2l0ZXJh dG9yX2Jhc2UoX194Ll9NX25vZGUpIHt9CgogIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7 IHJldHVybiAoKF9Ob2RlKikgX01fbm9kZSktPl9NX2RhdGE7IH0KICBwb2ludGVyIG9wZXJhdG9y LT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKICBfU2VsZiYgb3BlcmF0b3Ir KygpIHsKICAgIHRoaXMtPl9NX2luY3IoKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYg b3BlcmF0b3IrKyhpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICB0aGlzLT5fTV9p bmNyKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIF9TZWxmJiBvcGVyYXRvci0tKCkgewogICAg dGhpcy0+X01fZGVjcigpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvci0t KGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIHRoaXMtPl9NX2RlY3IoKTsKICAg IHJldHVybiBfX3RtcDsKICB9Cn07CiMgMTQ3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RsX2xpc3QuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yLCBi b29sIF9Jc1N0YXRpYz4KY2xhc3MgX0xpc3RfYWxsb2NfYmFzZSB7CnB1YmxpYzoKICB0eXBlZGVm IHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUK ICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3Io KSBjb25zdCB7IHJldHVybiBfTm9kZV9hbGxvY2F0b3I7IH0KCiAgX0xpc3RfYWxsb2NfYmFzZShj b25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9Ob2RlX2FsbG9jYXRvcihfX2EpIHt9Cgpwcm90 ZWN0ZWQ6CiAgX0xpc3Rfbm9kZTxfVHA+KiBfTV9nZXRfbm9kZSgpCiAgIHsgcmV0dXJuIF9Ob2Rl X2FsbG9jYXRvci5hbGxvY2F0ZSgxKTsgfQogIHZvaWQgX01fcHV0X25vZGUoX0xpc3Rfbm9kZTxf VHA+KiBfX3ApCiAgICB7IF9Ob2RlX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9fcCwgMSk7IH0KCnBy b3RlY3RlZDoKICB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9MaXN0X25vZGU8X1RwPiwgX0FsbG9j YXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICAgX05vZGVfYWxsb2NhdG9yOwogIF9MaXN0 X25vZGU8X1RwPiogX01fbm9kZTsKfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Fs bG9jYXRvcj4KY2xhc3MgX0xpc3RfYWxsb2NfYmFzZTxfVHAsIF9BbGxvY2F0b3IsIHRydWU+IHsK cHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+ OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5 cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0KCiAg X0xpc3RfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYpIHt9Cgpwcm90ZWN0ZWQ6CiAg dHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9MaXN0X25vZGU8X1RwPiwgX0FsbG9jYXRv cj46Ol9BbGxvY190eXBlCiAgICAgICAgICBfQWxsb2NfdHlwZTsKICBfTGlzdF9ub2RlPF9UcD4q IF9NX2dldF9ub2RlKCkgeyByZXR1cm4gX0FsbG9jX3R5cGU6OmFsbG9jYXRlKDEpOyB9CiAgdm9p ZCBfTV9wdXRfbm9kZShfTGlzdF9ub2RlPF9UcD4qIF9fcCkgeyBfQWxsb2NfdHlwZTo6ZGVhbGxv Y2F0ZShfX3AsIDEpOyB9Cgpwcm90ZWN0ZWQ6CiAgX0xpc3Rfbm9kZTxfVHA+KiBfTV9ub2RlOwp9 OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpjbGFzcyBfTGlzdF9iYXNlCiAg OiBwdWJsaWMgX0xpc3RfYWxsb2NfYmFzZTxfVHAsIF9BbGxvYywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CnsK cHVibGljOgogIHR5cGVkZWYgX0xpc3RfYWxsb2NfYmFzZTxfVHAsIF9BbGxvYywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNl bGVzcz4KICAgICAgICAgIF9CYXNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRv cl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICBfTGlzdF9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBl JiBfX2EpIDogX0Jhc2UoX19hKSB7CiAgICBfTV9ub2RlID0gX01fZ2V0X25vZGUoKTsKICAgIF9N X25vZGUtPl9NX25leHQgPSBfTV9ub2RlOwogICAgX01fbm9kZS0+X01fcHJldiA9IF9NX25vZGU7 CiAgfQogIH5fTGlzdF9iYXNlKCkgewogICAgY2xlYXIoKTsKICAgIF9NX3B1dF9ub2RlKF9NX25v ZGUpOwogIH0KCiAgdm9pZCBjbGVhcigpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz IF9BbGxvYz4Kdm9pZApfTGlzdF9iYXNlPF9UcCxfQWxsb2M+OjpjbGVhcigpCnsKICBfTGlzdF9u b2RlPF9UcD4qIF9fY3VyID0gKF9MaXN0X25vZGU8X1RwPiopIF9NX25vZGUtPl9NX25leHQ7CiAg d2hpbGUgKF9fY3VyICE9IF9NX25vZGUpIHsKICAgIF9MaXN0X25vZGU8X1RwPiogX190bXAgPSBf X2N1cjsKICAgIF9fY3VyID0gKF9MaXN0X25vZGU8X1RwPiopIF9fY3VyLT5fTV9uZXh0OwogICAg X0Rlc3Ryb3koJl9fdG1wLT5fTV9kYXRhKTsKICAgIF9NX3B1dF9ub2RlKF9fdG1wKTsKICB9CiAg X01fbm9kZS0+X01fbmV4dCA9IF9NX25vZGU7CiAgX01fbm9kZS0+X01fcHJldiA9IF9NX25vZGU7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjxfVHA+ID4K Y2xhc3MgbGlzdCA6IHByb3RlY3RlZCBfTGlzdF9iYXNlPF9UcCwgX0FsbG9jPgp7CgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIHR5cGVk ZWYgX0xpc3RfYmFzZTxfVHAsIF9BbGxvYz4gX0Jhc2U7CnByb3RlY3RlZDoKICB0eXBlZGVmIHZv aWQqIF9Wb2lkX3BvaW50ZXI7CgpwdWJsaWM6CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0 eXBlZGVmIHZhbHVlX3R5cGUqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiBj b25zdF9wb2ludGVyOwogIHR5cGVkZWYgdmFsdWVfdHlwZSYgcmVmZXJlbmNlOwogIHR5cGVkZWYg Y29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgX0xpc3Rfbm9kZTxf VHA+IF9Ob2RlOwogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZf dCBkaWZmZXJlbmNlX3R5cGU7CgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90 eXBlIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25z dCB7IHJldHVybiBfQmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9CgpwdWJsaWM6CiAgdHlwZWRlZiBf TGlzdF9pdGVyYXRvcjxfVHAsX1RwJixfVHAqPiBpdGVyYXRvcjsKICB0eXBlZGVmIF9MaXN0X2l0 ZXJhdG9yPF9UcCxjb25zdCBfVHAmLGNvbnN0IF9UcCo+IGNvbnN0X2l0ZXJhdG9yOwoKICB0eXBl ZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0 b3I7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9y OwoKcHJvdGVjdGVkOgogIHVzaW5nIF9CYXNlOjpfTV9ub2RlOwogIHVzaW5nIF9CYXNlOjpfTV9w dXRfbm9kZTsKICB1c2luZyBfQmFzZTo6X01fZ2V0X25vZGU7Cgpwcm90ZWN0ZWQ6CiAgX05vZGUq IF9NX2NyZWF0ZV9ub2RlKGNvbnN0IF9UcCYgX194KQogIHsKICAgIF9Ob2RlKiBfX3AgPSBfTV9n ZXRfbm9kZSgpOwogICAgICAgICAgICAgIHsKICAgICAgX0NvbnN0cnVjdCgmX19wLT5fTV9kYXRh LCBfX3gpOwogICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgcmV0 dXJuIF9fcDsKICB9CgogIF9Ob2RlKiBfTV9jcmVhdGVfbm9kZSgpCiAgewogICAgX05vZGUqIF9f cCA9IF9NX2dldF9ub2RlKCk7CiAgICAgICAgICAgICAgewogICAgICBfQ29uc3RydWN0KCZfX3At Pl9NX2RhdGEpOwogICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAg cmV0dXJuIF9fcDsKICB9CgpwdWJsaWM6CiAgZXhwbGljaXQgbGlzdChjb25zdCBhbGxvY2F0b3Jf dHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkgOiBfQmFzZShfX2EpIHt9CgogIGl0ZXJhdG9y IGJlZ2luKCkgeyByZXR1cm4gKF9Ob2RlKikoX01fbm9kZS0+X01fbmV4dCk7IH0KICBjb25zdF9p dGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIChfTm9kZSopKF9NX25vZGUtPl9NX25leHQp OyB9CgogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX25vZGU7IH0KICBjb25zdF9pdGVyYXRv ciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV9ub2RlOyB9CgogIHJldmVyc2VfaXRlcmF0b3IgcmJl Z2luKCkKICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CiAgY29uc3RfcmV2 ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9p dGVyYXRvcihlbmQoKSk7IH0KCiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkKICAgIHsgcmV0dXJu IHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJl bmQoKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsg fQoKICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gX01fbm9kZS0+X01fbmV4dCA9PSBfTV9u b2RlOyB9CiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7CiAgICBzaXplX3R5cGUgX19yZXN1bHQg PSAwOwogICAgZGlzdGFuY2UoYmVnaW4oKSwgZW5kKCksIF9fcmVzdWx0KTsKICAgIHJldHVybiBf X3Jlc3VsdDsKICB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZV90 eXBlKC0xKTsgfQoKICByZWZlcmVuY2UgZnJvbnQoKSB7IHJldHVybiAqYmVnaW4oKTsgfQogIGNv bnN0X3JlZmVyZW5jZSBmcm9udCgpIGNvbnN0IHsgcmV0dXJuICpiZWdpbigpOyB9CiAgcmVmZXJl bmNlIGJhY2soKSB7IHJldHVybiAqKC0tZW5kKCkpOyB9CiAgY29uc3RfcmVmZXJlbmNlIGJhY2so KSBjb25zdCB7IHJldHVybiAqKC0tZW5kKCkpOyB9CgogIHZvaWQgc3dhcChsaXN0PF9UcCwgX0Fs bG9jPiYgX194KSB7IHN0ZDo6c3dhcChfTV9ub2RlLCBfX3guX01fbm9kZSk7IH0KCiAgaXRlcmF0 b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYgX194KSB7CiAgICBfTm9k ZSogX190bXAgPSBfTV9jcmVhdGVfbm9kZShfX3gpOwogICAgX190bXAtPl9NX25leHQgPSBfX3Bv c2l0aW9uLl9NX25vZGU7CiAgICBfX3RtcC0+X01fcHJldiA9IF9fcG9zaXRpb24uX01fbm9kZS0+ X01fcHJldjsKICAgIF9fcG9zaXRpb24uX01fbm9kZS0+X01fcHJldi0+X01fbmV4dCA9IF9fdG1w OwogICAgX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2ID0gX190bXA7CiAgICByZXR1cm4gX190 bXA7CiAgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uKSB7IHJldHVybiBp bnNlcnQoX19wb3NpdGlvbiwgX1RwKCkpOyB9CgoKICB0ZW1wbGF0ZTxjbGFzcyBfSW50ZWdlcj4K ICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywgX0ludGVnZXIgX19uLCBf SW50ZWdlciBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpIHsKICAg IF9NX2ZpbGxfaW5zZXJ0KF9fcG9zLCAoc2l6ZV90eXBlKSBfX24sIChfVHApIF9feCk7CiAgfQoK ICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0 Y2goaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0 b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgIF9fZmFsc2VfdHlwZSk7CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2 b2lkIGluc2VydChpdGVyYXRvciBfX3BvcywgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0 SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1 dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgIF9NX2luc2VydF9kaXNwYXRjaChf X3BvcywgX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgfQoKICB2b2lkIGluc2VydChp dGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3gpCiAgICB7IF9NX2Zp bGxfaW5zZXJ0KF9fcG9zLCBfX24sIF9feCk7IH0KICB2b2lkIF9NX2ZpbGxfaW5zZXJ0KGl0ZXJh dG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCk7CgogIHZvaWQgcHVzaF9m cm9udChjb25zdCBfVHAmIF9feCkgeyBpbnNlcnQoYmVnaW4oKSwgX194KTsgfQogIHZvaWQgcHVz aF9mcm9udCgpIHtpbnNlcnQoYmVnaW4oKSk7fQogIHZvaWQgcHVzaF9iYWNrKGNvbnN0IF9UcCYg X194KSB7IGluc2VydChlbmQoKSwgX194KTsgfQogIHZvaWQgcHVzaF9iYWNrKCkge2luc2VydChl bmQoKSk7fQoKICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7CiAgICBfTGlz dF9ub2RlX2Jhc2UqIF9fbmV4dF9ub2RlID0gX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9uZXh0Owog ICAgX0xpc3Rfbm9kZV9iYXNlKiBfX3ByZXZfbm9kZSA9IF9fcG9zaXRpb24uX01fbm9kZS0+X01f cHJldjsKICAgIF9Ob2RlKiBfX24gPSAoX05vZGUqKSBfX3Bvc2l0aW9uLl9NX25vZGU7CiAgICBf X3ByZXZfbm9kZS0+X01fbmV4dCA9IF9fbmV4dF9ub2RlOwogICAgX19uZXh0X25vZGUtPl9NX3By ZXYgPSBfX3ByZXZfbm9kZTsKICAgIF9EZXN0cm95KCZfX24tPl9NX2RhdGEpOwogICAgX01fcHV0 X25vZGUoX19uKTsKICAgIHJldHVybiBpdGVyYXRvcigoX05vZGUqKSBfX25leHRfbm9kZSk7CiAg fQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCk7CiAg dm9pZCBjbGVhcigpIHsgX0Jhc2U6OmNsZWFyKCk7IH0KCiAgdm9pZCByZXNpemUoc2l6ZV90eXBl IF9fbmV3X3NpemUsIGNvbnN0IF9UcCYgX194KTsKICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19u ZXdfc2l6ZSkgeyB0aGlzLT5yZXNpemUoX19uZXdfc2l6ZSwgX1RwKCkpOyB9CgogIHZvaWQgcG9w X2Zyb250KCkgeyBlcmFzZShiZWdpbigpKTsgfQogIHZvaWQgcG9wX2JhY2soKSB7CiAgICBpdGVy YXRvciBfX3RtcCA9IGVuZCgpOwogICAgZXJhc2UoLS1fX3RtcCk7CiAgfQogIGxpc3Qoc2l6ZV90 eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlLAogICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUm IF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9CYXNlKF9fYSkKICAgIHsgaW5zZXJ0KGJl Z2luKCksIF9fbiwgX192YWx1ZSk7IH0KICBleHBsaWNpdCBsaXN0KHNpemVfdHlwZSBfX24pCiAg ICA6IF9CYXNlKGFsbG9jYXRvcl90eXBlKCkpCiAgICB7IGluc2VydChiZWdpbigpLCBfX24sIF9U cCgpKTsgfQoKCgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICBsaXN0KF9JbnB1 dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgIGNvbnN0IGFs bG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfQmFzZShfX2EpCiAg ICB7IGluc2VydChiZWdpbigpLCBfX2ZpcnN0LCBfX2xhc3QpOyB9CgogIGxpc3QoY29uc3QgbGlz dDxfVHAsIF9BbGxvYz4mIF9feCkgOiBfQmFzZShfX3guZ2V0X2FsbG9jYXRvcigpKQogICAgeyBp bnNlcnQoYmVnaW4oKSwgX194LmJlZ2luKCksIF9feC5lbmQoKSk7IH0KCiAgfmxpc3QoKSB7IH0K CiAgbGlzdDxfVHAsIF9BbGxvYz4mIG9wZXJhdG9yPShjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYg X194KTsKCnB1YmxpYzoKCgoKCgogIHZvaWQgYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IF9U cCYgX192YWwpIHsgX01fZmlsbF9hc3NpZ24oX19uLCBfX3ZhbCk7IH0KCiAgdm9pZCBfTV9maWxs X2Fzc2lnbihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsKTsKCiAgdGVtcGxhdGUgPGNs YXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3Qs IF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdl cjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICBfTV9hc3NpZ25fZGlz cGF0Y2goX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xh c3MgX0ludGVnZXI+CiAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50 ZWdlciBfX3ZhbCwgX190cnVlX3R5cGUpCiAgICB7IF9NX2ZpbGxfYXNzaWduKChzaXplX3R5cGUp IF9fbiwgKF9UcCkgX192YWwpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4K ICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJ dGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKTsK CnByb3RlY3RlZDoKICB2b2lkIHRyYW5zZmVyKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGl0ZXJhdG9y IF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkgewogICAgaWYgKF9fcG9zaXRpb24gIT0gX19sYXN0 KSB7CgogICAgICBfX2xhc3QuX01fbm9kZS0+X01fcHJldi0+X01fbmV4dCA9IF9fcG9zaXRpb24u X01fbm9kZTsKICAgICAgX19maXJzdC5fTV9ub2RlLT5fTV9wcmV2LT5fTV9uZXh0ID0gX19sYXN0 Ll9NX25vZGU7CiAgICAgIF9fcG9zaXRpb24uX01fbm9kZS0+X01fcHJldi0+X01fbmV4dCA9IF9f Zmlyc3QuX01fbm9kZTsKCgogICAgICBfTGlzdF9ub2RlX2Jhc2UqIF9fdG1wID0gX19wb3NpdGlv bi5fTV9ub2RlLT5fTV9wcmV2OwogICAgICBfX3Bvc2l0aW9uLl9NX25vZGUtPl9NX3ByZXYgPSBf X2xhc3QuX01fbm9kZS0+X01fcHJldjsKICAgICAgX19sYXN0Ll9NX25vZGUtPl9NX3ByZXYgPSBf X2ZpcnN0Ll9NX25vZGUtPl9NX3ByZXY7CiAgICAgIF9fZmlyc3QuX01fbm9kZS0+X01fcHJldiA9 IF9fdG1wOwogICAgfQogIH0KCnB1YmxpYzoKICB2b2lkIHNwbGljZShpdGVyYXRvciBfX3Bvc2l0 aW9uLCBsaXN0JiBfX3gpIHsKICAgIGlmICghX194LmVtcHR5KCkpCiAgICAgIHRoaXMtPnRyYW5z ZmVyKF9fcG9zaXRpb24sIF9feC5iZWdpbigpLCBfX3guZW5kKCkpOwogIH0KICB2b2lkIHNwbGlj ZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0JiwgaXRlcmF0b3IgX19pKSB7CiAgICBpdGVyYXRv ciBfX2ogPSBfX2k7CiAgICArK19fajsKICAgIGlmIChfX3Bvc2l0aW9uID09IF9faSB8fCBfX3Bv c2l0aW9uID09IF9faikgcmV0dXJuOwogICAgdGhpcy0+dHJhbnNmZXIoX19wb3NpdGlvbiwgX19p LCBfX2opOwogIH0KICB2b2lkIHNwbGljZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0JiwgaXRl cmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KSB7CiAgICBpZiAoX19maXJzdCAhPSBfX2xh c3QpCiAgICAgIHRoaXMtPnRyYW5zZmVyKF9fcG9zaXRpb24sIF9fZmlyc3QsIF9fbGFzdCk7CiAg fQogIHZvaWQgcmVtb3ZlKGNvbnN0IF9UcCYgX192YWx1ZSk7CiAgdm9pZCB1bmlxdWUoKTsKICB2 b2lkIG1lcmdlKGxpc3QmIF9feCk7CiAgdm9pZCByZXZlcnNlKCk7CiAgdm9pZCBzb3J0KCk7Cgog IHRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPiB2b2lkIHJlbW92ZV9pZihfUHJlZGljYXRlKTsK ICB0ZW1wbGF0ZSA8Y2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4gdm9pZCB1bmlxdWUoX0JpbmFyeVBy ZWRpY2F0ZSk7CiAgdGVtcGxhdGUgPGNsYXNzIF9TdHJpY3RXZWFrT3JkZXJpbmc+IHZvaWQgbWVy Z2UobGlzdCYsIF9TdHJpY3RXZWFrT3JkZXJpbmcpOwogIHRlbXBsYXRlIDxjbGFzcyBfU3RyaWN0 V2Vha09yZGVyaW5nPiB2b2lkIHNvcnQoX1N0cmljdFdlYWtPcmRlcmluZyk7Cn07Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPT0oY29uc3Qg bGlzdDxfVHAsX0FsbG9jPiYgX194LCBjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3kpCnsKICB0 eXBlZGVmIHR5cGVuYW1lIGxpc3Q8X1RwLF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0 ZXJhdG9yOwogIGNvbnN0X2l0ZXJhdG9yIF9fZW5kMSA9IF9feC5lbmQoKTsKICBjb25zdF9pdGVy YXRvciBfX2VuZDIgPSBfX3kuZW5kKCk7CgogIGNvbnN0X2l0ZXJhdG9yIF9faTEgPSBfX3guYmVn aW4oKTsKICBjb25zdF9pdGVyYXRvciBfX2kyID0gX195LmJlZ2luKCk7CiAgd2hpbGUgKF9faTEg IT0gX19lbmQxICYmIF9faTIgIT0gX19lbmQyICYmICpfX2kxID09ICpfX2kyKSB7CiAgICArK19f aTE7CiAgICArK19faTI7CiAgfQogIHJldHVybiBfX2kxID09IF9fZW5kMSAmJiBfX2kyID09IF9f ZW5kMjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBv cGVyYXRvcjwoY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAg ICAgY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX195KQp7CiAgcmV0dXJuIGxleGljb2dyYXBoaWNh bF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9feS5iZWdpbigpLCBfX3kuZW5kKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw LCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgbGlzdDxfVHAsX0Fs bG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4m IF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj bGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBsaXN0PF9UcCxfQWxsb2M+ JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3kp IHsKICByZXR1cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxs b2M+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX194LAog ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feSkgewogIHJl dHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4K aW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3gsCiAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJu ICEoX194IDwgX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxp bmUgdm9pZApzd2FwKGxpc3Q8X1RwLCBfQWxsb2M+JiBfX3gsIGxpc3Q8X1RwLCBfQWxsb2M+JiBf X3kpCnsKICBfX3guc3dhcChfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxs b2M+IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPgp2b2lkCmxpc3Q8X1RwLCBfQWxsb2M+Ojpf TV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkKewog IGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGluc2VydChfX3Bvc2l0 aW9uLCAqX19maXJzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9p ZApsaXN0PF9UcCwgX0FsbG9jPjo6X01fZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24sIGNvbnN0IF9U cCYgX194KQp7CiAgZm9yICggOyBfX24gPiAwOyAtLV9fbikKICAgIGluc2VydChfX3Bvc2l0aW9u LCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIGxp c3Q8X1RwLF9BbGxvYz46Oml0ZXJhdG9yIGxpc3Q8X1RwLCBfQWxsb2M+OjplcmFzZShpdGVyYXRv ciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaXRlcmF0b3IgX19sYXN0KQp7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19s YXN0KQogICAgZXJhc2UoX19maXJzdCsrKTsKICByZXR1cm4gX19sYXN0Owp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OnJlc2l6ZShz aXplX3R5cGUgX19uZXdfc2l6ZSwgY29uc3QgX1RwJiBfX3gpCnsKICBpdGVyYXRvciBfX2kgPSBi ZWdpbigpOwogIHNpemVfdHlwZSBfX2xlbiA9IDA7CiAgZm9yICggOyBfX2kgIT0gZW5kKCkgJiYg X19sZW4gPCBfX25ld19zaXplOyArK19faSwgKytfX2xlbikKICAgIDsKICBpZiAoX19sZW4gPT0g X19uZXdfc2l6ZSkKICAgIGVyYXNlKF9faSwgZW5kKCkpOwogIGVsc2UKICAgIGluc2VydChlbmQo KSwgX19uZXdfc2l6ZSAtIF9fbGVuLCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz cyBfQWxsb2M+Cmxpc3Q8X1RwLCBfQWxsb2M+JiBsaXN0PF9UcCwgX0FsbG9jPjo6b3BlcmF0b3I9 KGNvbnN0IGxpc3Q8X1RwLCBfQWxsb2M+JiBfX3gpCnsKICBpZiAodGhpcyAhPSAmX194KSB7CiAg ICBpdGVyYXRvciBfX2ZpcnN0MSA9IGJlZ2luKCk7CiAgICBpdGVyYXRvciBfX2xhc3QxID0gZW5k KCk7CiAgICBjb25zdF9pdGVyYXRvciBfX2ZpcnN0MiA9IF9feC5iZWdpbigpOwogICAgY29uc3Rf aXRlcmF0b3IgX19sYXN0MiA9IF9feC5lbmQoKTsKICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh c3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICpfX2ZpcnN0MSsrID0gKl9fZmlyc3Qy Kys7CiAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgZXJhc2UoX19maXJzdDEsIF9f bGFzdDEpOwogICAgZWxzZQogICAgICBpbnNlcnQoX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIp OwogIH0KICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxv Yz4Kdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6X01fZmlsbF9hc3NpZ24oc2l6ZV90eXBlIF9fbiwg Y29uc3QgX1RwJiBfX3ZhbCkgewogIGl0ZXJhdG9yIF9faSA9IGJlZ2luKCk7CiAgZm9yICggOyBf X2kgIT0gZW5kKCkgJiYgX19uID4gMDsgKytfX2ksIC0tX19uKQogICAgKl9faSA9IF9fdmFsOwog IGlmIChfX24gPiAwKQogICAgaW5zZXJ0KGVuZCgpLCBfX24sIF9fdmFsKTsKICBlbHNlCiAgICBl cmFzZShfX2ksIGVuZCgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0 ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4Kdm9pZApsaXN0PF9UcCwgX0FsbG9jPjo6X01fYXNz aWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXIgX19maXJzdDIsIF9JbnB1dEl0ZXIgX19sYXN0MiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpCnsKICBpdGVy YXRvciBfX2ZpcnN0MSA9IGJlZ2luKCk7CiAgaXRlcmF0b3IgX19sYXN0MSA9IGVuZCgpOwogIGZv ciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOyArK19fZmly c3QxLCArK19fZmlyc3QyKQogICAgKl9fZmlyc3QxID0gKl9fZmlyc3QyOwogIGlmIChfX2ZpcnN0 MiA9PSBfX2xhc3QyKQogICAgZXJhc2UoX19maXJzdDEsIF9fbGFzdDEpOwogIGVsc2UKICAgIGlu c2VydChfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAs IGNsYXNzIF9BbGxvYz4Kdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6cmVtb3ZlKGNvbnN0IF9UcCYg X192YWx1ZSkKewogIGl0ZXJhdG9yIF9fZmlyc3QgPSBiZWdpbigpOwogIGl0ZXJhdG9yIF9fbGFz dCA9IGVuZCgpOwogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgaXRlcmF0b3IgX19u ZXh0ID0gX19maXJzdDsKICAgICsrX19uZXh0OwogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsdWUp IGVyYXNlKF9fZmlyc3QpOwogICAgX19maXJzdCA9IF9fbmV4dDsKICB9Cn0KCnRlbXBsYXRlIDxj bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6dW5pcXVlKCkK ewogIGl0ZXJhdG9yIF9fZmlyc3QgPSBiZWdpbigpOwogIGl0ZXJhdG9yIF9fbGFzdCA9IGVuZCgp OwogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwogIGl0ZXJhdG9yIF9fbmV4dCA9IF9f Zmlyc3Q7CiAgd2hpbGUgKCsrX19uZXh0ICE9IF9fbGFzdCkgewogICAgaWYgKCpfX2ZpcnN0ID09 ICpfX25leHQpCiAgICAgIGVyYXNlKF9fbmV4dCk7CiAgICBlbHNlCiAgICAgIF9fZmlyc3QgPSBf X25leHQ7CiAgICBfX25leHQgPSBfX2ZpcnN0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg Y2xhc3MgX0FsbG9jPgp2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+OjptZXJnZShsaXN0PF9UcCwgX0Fs bG9jPiYgX194KQp7CiAgaXRlcmF0b3IgX19maXJzdDEgPSBiZWdpbigpOwogIGl0ZXJhdG9yIF9f bGFzdDEgPSBlbmQoKTsKICBpdGVyYXRvciBfX2ZpcnN0MiA9IF9feC5iZWdpbigpOwogIGl0ZXJh dG9yIF9fbGFzdDIgPSBfX3guZW5kKCk7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYg X19maXJzdDIgIT0gX19sYXN0MikKICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpIHsKICAg ICAgaXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDI7CiAgICAgIHRyYW5zZmVyKF9fZmlyc3QxLCBf X2ZpcnN0MiwgKytfX25leHQpOwogICAgICBfX2ZpcnN0MiA9IF9fbmV4dDsKICAgIH0KICAgIGVs c2UKICAgICAgKytfX2ZpcnN0MTsKICBpZiAoX19maXJzdDIgIT0gX19sYXN0MikgdHJhbnNmZXIo X19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOwp9CgppbmxpbmUgdm9pZCBfX0xpc3RfYmFzZV9y ZXZlcnNlKF9MaXN0X25vZGVfYmFzZSogX19wKQp7CiAgX0xpc3Rfbm9kZV9iYXNlKiBfX3RtcCA9 IF9fcDsKICBkbyB7CiAgICBzdGQ6OnN3YXAoX190bXAtPl9NX25leHQsIF9fdG1wLT5fTV9wcmV2 KTsKICAgIF9fdG1wID0gX190bXAtPl9NX3ByZXY7CiAgfSB3aGlsZSAoX190bXAgIT0gX19wKTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZCBsaXN0PF9U cCwgX0FsbG9jPjo6cmV2ZXJzZSgpCnsKICBfX0xpc3RfYmFzZV9yZXZlcnNlKHRoaXMtPl9NX25v ZGUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgbGlzdDxfVHAs IF9BbGxvYz46OnNvcnQoKQp7CgogIGlmIChfTV9ub2RlLT5fTV9uZXh0ICE9IF9NX25vZGUgJiYg X01fbm9kZS0+X01fbmV4dC0+X01fbmV4dCAhPSBfTV9ub2RlKSB7CiAgICBsaXN0PF9UcCwgX0Fs bG9jPiBfX2NhcnJ5OwogICAgbGlzdDxfVHAsIF9BbGxvYz4gX19jb3VudGVyWzY0XTsKICAgIGlu dCBfX2ZpbGwgPSAwOwogICAgd2hpbGUgKCFlbXB0eSgpKSB7CiAgICAgIF9fY2Fycnkuc3BsaWNl KF9fY2FycnkuYmVnaW4oKSwgKnRoaXMsIGJlZ2luKCkpOwogICAgICBpbnQgX19pID0gMDsKICAg ICAgd2hpbGUoX19pIDwgX19maWxsICYmICFfX2NvdW50ZXJbX19pXS5lbXB0eSgpKSB7CiAgICAg ICAgX19jb3VudGVyW19faV0ubWVyZ2UoX19jYXJyeSk7CiAgICAgICAgX19jYXJyeS5zd2FwKF9f Y291bnRlcltfX2krK10pOwogICAgICB9CiAgICAgIF9fY2Fycnkuc3dhcChfX2NvdW50ZXJbX19p XSk7CiAgICAgIGlmIChfX2kgPT0gX19maWxsKSArK19fZmlsbDsKICAgIH0KCiAgICBmb3IgKGlu dCBfX2kgPSAxOyBfX2kgPCBfX2ZpbGw7ICsrX19pKQogICAgICBfX2NvdW50ZXJbX19pXS5tZXJn ZShfX2NvdW50ZXJbX19pLTFdKTsKICAgIHN3YXAoX19jb3VudGVyW19fZmlsbC0xXSk7CiAgfQp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfUHJl ZGljYXRlPgp2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+OjpyZW1vdmVfaWYoX1ByZWRpY2F0ZSBfX3By ZWQpCnsKICBpdGVyYXRvciBfX2ZpcnN0ID0gYmVnaW4oKTsKICBpdGVyYXRvciBfX2xhc3QgPSBl bmQoKTsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIGl0ZXJhdG9yIF9fbmV4dCA9 IF9fZmlyc3Q7CiAgICArK19fbmV4dDsKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSBlcmFzZShf X2ZpcnN0KTsKICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw LCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgp2b2lkIGxp c3Q8X1RwLCBfQWxsb2M+Ojp1bmlxdWUoX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQp7 CiAgaXRlcmF0b3IgX19maXJzdCA9IGJlZ2luKCk7CiAgaXRlcmF0b3IgX19sYXN0ID0gZW5kKCk7 CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgaXRlcmF0b3IgX19uZXh0ID0gX19m aXJzdDsKICB3aGlsZSAoKytfX25leHQgIT0gX19sYXN0KSB7CiAgICBpZiAoX19iaW5hcnlfcHJl ZCgqX19maXJzdCwgKl9fbmV4dCkpCiAgICAgIGVyYXNlKF9fbmV4dCk7CiAgICBlbHNlCiAgICAg IF9fZmlyc3QgPSBfX25leHQ7CiAgICBfX25leHQgPSBfX2ZpcnN0OwogIH0KfQoKdGVtcGxhdGUg PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX1N0cmljdFdlYWtPcmRl cmluZz4Kdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6bWVyZ2UobGlzdDxfVHAsIF9BbGxvYz4mIF9f eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1N0cmljdFdlYWtPcmRlcmluZyBfX2Nv bXApCnsKICBpdGVyYXRvciBfX2ZpcnN0MSA9IGJlZ2luKCk7CiAgaXRlcmF0b3IgX19sYXN0MSA9 IGVuZCgpOwogIGl0ZXJhdG9yIF9fZmlyc3QyID0gX194LmJlZ2luKCk7CiAgaXRlcmF0b3IgX19s YXN0MiA9IF9feC5lbmQoKTsKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0 MiAhPSBfX2xhc3QyKQogICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpIHsKICAg ICAgaXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDI7CiAgICAgIHRyYW5zZmVyKF9fZmlyc3QxLCBf X2ZpcnN0MiwgKytfX25leHQpOwogICAgICBfX2ZpcnN0MiA9IF9fbmV4dDsKICAgIH0KICAgIGVs c2UKICAgICAgKytfX2ZpcnN0MTsKICBpZiAoX19maXJzdDIgIT0gX19sYXN0MikgdHJhbnNmZXIo X19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz cyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfU3RyaWN0V2Vha09yZGVyaW5nPgp2b2lkIGxpc3Q8 X1RwLCBfQWxsb2M+Ojpzb3J0KF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQp7CgogIGlmIChf TV9ub2RlLT5fTV9uZXh0ICE9IF9NX25vZGUgJiYgX01fbm9kZS0+X01fbmV4dC0+X01fbmV4dCAh PSBfTV9ub2RlKSB7CiAgICBsaXN0PF9UcCwgX0FsbG9jPiBfX2NhcnJ5OwogICAgbGlzdDxfVHAs IF9BbGxvYz4gX19jb3VudGVyWzY0XTsKICAgIGludCBfX2ZpbGwgPSAwOwogICAgd2hpbGUgKCFl bXB0eSgpKSB7CiAgICAgIF9fY2Fycnkuc3BsaWNlKF9fY2FycnkuYmVnaW4oKSwgKnRoaXMsIGJl Z2luKCkpOwogICAgICBpbnQgX19pID0gMDsKICAgICAgd2hpbGUoX19pIDwgX19maWxsICYmICFf X2NvdW50ZXJbX19pXS5lbXB0eSgpKSB7CiAgICAgICAgX19jb3VudGVyW19faV0ubWVyZ2UoX19j YXJyeSwgX19jb21wKTsKICAgICAgICBfX2NhcnJ5LnN3YXAoX19jb3VudGVyW19faSsrXSk7CiAg ICAgIH0KICAgICAgX19jYXJyeS5zd2FwKF9fY291bnRlcltfX2ldKTsKICAgICAgaWYgKF9faSA9 PSBfX2ZpbGwpICsrX19maWxsOwogICAgfQoKICAgIGZvciAoaW50IF9faSA9IDE7IF9faSA8IF9f ZmlsbDsgKytfX2kpCiAgICAgIF9fY291bnRlcltfX2ldLm1lcmdlKF9fY291bnRlcltfX2ktMV0s IF9fY29tcCk7CiAgICBzd2FwKF9fY291bnRlcltfX2ZpbGwtMV0pOwogIH0KfQoKfQojIDY2ICIv dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xpc3QuaCIgMiAzCiMgMzIgIi91c3Iv bG9jYWwvaW5jbHVkZS9nKystdjMvbGlzdCIgMiAzCiMgNDQgInN0bGluY2wuaCIgMgojIDEgIi91 c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvbWFwIiAxIDMKIyAzMSAiL3Vzci9sb2NhbC9pbmNsdWRl L2crKy12My9tYXAiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX21h cC5oIiAxIDMKIyA2MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9tYXAuaCIg MwoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90cmVlLmgiIDEgMwoj IDg1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RyZWUuaCIgMwojIDEgIi91 c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMSAzCiMgODYgIi91 c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdHJlZS5oIiAyIDMKIyAxICIvdXNyL2xv Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDEgMwojIDg3ICIvdXNyL2xvY2Fs L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RyZWUuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNs dWRlL2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMSAzCiMgODggIi91c3IvbG9jYWwvaW5j bHVkZS9nKystdjMvYml0cy9zdGxfdHJlZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDEgMwojIDYzICIvdXNyL2xvY2FsL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKbmFtZXNwYWNlIHN0ZAp7Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4Kc3RydWN0IHVuYXJ5X2Z1bmN0aW9uIHsKICB0eXBl ZGVmIF9BcmcgYXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7Cn07 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0PgpzdHJ1 Y3QgYmluYXJ5X2Z1bmN0aW9uIHsKICB0eXBlZGVmIF9BcmcxIGZpcnN0X2FyZ3VtZW50X3R5cGU7 CiAgdHlwZWRlZiBfQXJnMiBzZWNvbmRfYXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9SZXN1bHQg cmVzdWx0X3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgcGx1cyA6IHB1Ymxp YyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBf VHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCArIF9feTsgfQp9OwoK dGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG1pbnVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlv bjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBf VHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IC0gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwPgpzdHJ1Y3QgbXVsdGlwbGllcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxf VHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNv bnN0IHsgcmV0dXJuIF9feCAqIF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0 IGRpdmlkZXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9w ZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBf X3ggLyBfX3k7IH0KfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4gaW5saW5lIF9UcCBpZGVudGl0 eV9lbGVtZW50KHBsdXM8X1RwPikgewogIHJldHVybiBfVHAoMCk7Cn0KdGVtcGxhdGUgPGNsYXNz IF9UcD4gaW5saW5lIF9UcCBpZGVudGl0eV9lbGVtZW50KG11bHRpcGxpZXM8X1RwPikgewogIHJl dHVybiBfVHAoMSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtb2R1bHVzIDogcHVi bGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4KewogIF9UcCBvcGVyYXRvcigpKGNvbnN0 IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICUgX195OyB9Cn07 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbmVnYXRlIDogcHVibGljIHVuYXJ5X2Z1bmN0 aW9uPF9UcCxfVHA+CnsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QgeyBy ZXR1cm4gLV9feDsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGVxdWFsX3RvIDog cHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCko Y29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPT0gX195 OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3Qgbm90X2VxdWFsX3RvIDogcHVibGlj IGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3Qg X1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggIT0gX195OyB9Cn07 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZ3JlYXRlciA6IHB1YmxpYyBiaW5hcnlfZnVu Y3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBj b25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ID4gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwPgpzdHJ1Y3QgbGVzcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxi b29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkg Y29uc3QgeyByZXR1cm4gX194IDwgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1 Y3QgZ3JlYXRlcl9lcXVhbCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7 CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3Qg eyByZXR1cm4gX194ID49IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxl c3NfZXF1YWwgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wg b3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJu IF9feCA8PSBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX2Fu ZCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRv cigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICYm IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfb3IgOiBwdWJs aWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25z dCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCB8fCBfX3k7IH0K fTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX25vdCA6IHB1YmxpYyB1bmFy eV9mdW5jdGlvbjxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkg Y29uc3QgeyByZXR1cm4gIV9feDsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNs YXNzIHVuYXJ5X25lZ2F0ZQogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9QcmVk aWNhdGU6OmFyZ3VtZW50X3R5cGUsIGJvb2w+IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01f cHJlZDsKcHVibGljOgogIGV4cGxpY2l0IHVuYXJ5X25lZ2F0ZShjb25zdCBfUHJlZGljYXRlJiBf X3gpIDogX01fcHJlZChfX3gpIHt9CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9Q cmVkaWNhdGU6OmFyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuICFfTV9wcmVk KF9feCk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSB1bmFyeV9u ZWdhdGU8X1ByZWRpY2F0ZT4Kbm90MShjb25zdCBfUHJlZGljYXRlJiBfX3ByZWQpCnsKICByZXR1 cm4gdW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+KF9fcHJlZCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf UHJlZGljYXRlPgpjbGFzcyBiaW5hcnlfbmVnYXRlCiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9u PHR5cGVuYW1lIF9QcmVkaWNhdGU6OmZpcnN0X2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIHR5cGVuYW1lIF9QcmVkaWNhdGU6OnNlY29uZF9hcmd1bWVudF90eXBlLAog ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sPiB7CnByb3RlY3RlZDoKICBfUHJlZGljYXRl IF9NX3ByZWQ7CnB1YmxpYzoKICBleHBsaWNpdCBiaW5hcnlfbmVnYXRlKGNvbnN0IF9QcmVkaWNh dGUmIF9feCkgOiBfTV9wcmVkKF9feCkge30KICBib29sIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5h bWUgX1ByZWRpY2F0ZTo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX194LAogICAgICAgICAgICAgICAg ICBjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRlOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX195KSBj b25zdAogIHsKICAgIHJldHVybiAhX01fcHJlZChfX3gsIF9feSk7CiAgfQp9OwoKdGVtcGxhdGUg PGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSBiaW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+Cm5vdDIo Y29uc3QgX1ByZWRpY2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJuIGJpbmFyeV9uZWdhdGU8X1ByZWRp Y2F0ZT4oX19wcmVkKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24+CmNsYXNzIGJpbmRl cjFzdAogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29u ZF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9PcGVy YXRpb246OnJlc3VsdF90eXBlPiB7CnByb3RlY3RlZDoKICBfT3BlcmF0aW9uIG9wOwogIHR5cGVu YW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUgdmFsdWU7CnB1YmxpYzoKICBiaW5k ZXIxc3QoY29uc3QgX09wZXJhdGlvbiYgX194LAogICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBf T3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3kpCiAgICAgIDogb3AoX194KSwgdmFs dWUoX195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3Io KShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX194KSBj b25zdCB7CiAgICByZXR1cm4gb3AodmFsdWUsIF9feCk7CiAgfQoKCiAgdHlwZW5hbWUgX09wZXJh dGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29u ZF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcCh2YWx1ZSwgX194KTsK ICB9Cgp9OwoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24sIGNsYXNzIF9UcD4KaW5saW5lIGJp bmRlcjFzdDxfT3BlcmF0aW9uPgpiaW5kMXN0KGNvbnN0IF9PcGVyYXRpb24mIF9fZm4sIGNvbnN0 IF9UcCYgX194KQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVu dF90eXBlIF9BcmcxX3R5cGU7CiAgcmV0dXJuIGJpbmRlcjFzdDxfT3BlcmF0aW9uPihfX2ZuLCBf QXJnMV90eXBlKF9feCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbj4KY2xhc3MgYmlu ZGVyMm5kCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX09wZXJhdGlvbjo6Zmly c3RfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfT3Bl cmF0aW9uOjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6CiAgX09wZXJhdGlvbiBvcDsKICB0eXBl bmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSB2YWx1ZTsKcHVibGljOgogIGJp bmRlcjJuZChjb25zdCBfT3BlcmF0aW9uJiBfX3gsCiAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1l IF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3kpCiAgICAgIDogb3AoX194KSwg dmFsdWUoX195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0 b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gp IGNvbnN0IHsKICAgIHJldHVybiBvcChfX3gsIHZhbHVlKTsKICB9CgoKICB0eXBlbmFtZSBfT3Bl cmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkodHlwZW5hbWUgX09wZXJhdGlvbjo6Zmly c3RfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3AoX194LCB2YWx1ZSk7 CiAgfQoKfTsKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uLCBjbGFzcyBfVHA+CmlubGluZSBi aW5kZXIybmQ8X09wZXJhdGlvbj4KYmluZDJuZChjb25zdCBfT3BlcmF0aW9uJiBfX2ZuLCBjb25z dCBfVHAmIF9feCkKewogIHR5cGVkZWYgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3Vt ZW50X3R5cGUgX0FyZzJfdHlwZTsKICByZXR1cm4gYmluZGVyMm5kPF9PcGVyYXRpb24+KF9fZm4s IF9BcmcyX3R5cGUoX194KSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24xLCBjbGFz cyBfT3BlcmF0aW9uMj4KY2xhc3MgdW5hcnlfY29tcG9zZQogIDogcHVibGljIHVuYXJ5X2Z1bmN0 aW9uPHR5cGVuYW1lIF9PcGVyYXRpb24yOjphcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAg ICAgICAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb24xOjpyZXN1bHRfdHlwZT4Kewpwcm90ZWN0ZWQ6 CiAgX09wZXJhdGlvbjEgX01fZm4xOwogIF9PcGVyYXRpb24yIF9NX2ZuMjsKcHVibGljOgogIHVu YXJ5X2NvbXBvc2UoY29uc3QgX09wZXJhdGlvbjEmIF9feCwgY29uc3QgX09wZXJhdGlvbjImIF9f eSkKICAgIDogX01fZm4xKF9feCksIF9NX2ZuMihfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJhdGlv bjE6OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uMjo6 YXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fZm4xKF9NX2ZuMihfX3gp KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbjEsIGNsYXNzIF9PcGVyYXRpb24y PgppbmxpbmUgdW5hcnlfY29tcG9zZTxfT3BlcmF0aW9uMSxfT3BlcmF0aW9uMj4KY29tcG9zZTEo Y29uc3QgX09wZXJhdGlvbjEmIF9fZm4xLCBjb25zdCBfT3BlcmF0aW9uMiYgX19mbjIpCnsKICBy ZXR1cm4gdW5hcnlfY29tcG9zZTxfT3BlcmF0aW9uMSxfT3BlcmF0aW9uMj4oX19mbjEsIF9fZm4y KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24xLCBjbGFzcyBfT3BlcmF0aW9uMiwgY2xh c3MgX09wZXJhdGlvbjM+CmNsYXNzIGJpbmFyeV9jb21wb3NlCiAgOiBwdWJsaWMgdW5hcnlfZnVu Y3Rpb248dHlwZW5hbWUgX09wZXJhdGlvbjI6OmFyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjE6OnJlc3VsdF90eXBlPiB7CnByb3RlY3Rl ZDoKICBfT3BlcmF0aW9uMSBfTV9mbjE7CiAgX09wZXJhdGlvbjIgX01fZm4yOwogIF9PcGVyYXRp b24zIF9NX2ZuMzsKcHVibGljOgogIGJpbmFyeV9jb21wb3NlKGNvbnN0IF9PcGVyYXRpb24xJiBf X3gsIGNvbnN0IF9PcGVyYXRpb24yJiBfX3ksCiAgICAgICAgICAgICAgICAgY29uc3QgX09wZXJh dGlvbjMmIF9feikKICAgIDogX01fZm4xKF9feCksIF9NX2ZuMihfX3kpLCBfTV9mbjMoX196KSB7 IH0KICB0eXBlbmFtZSBfT3BlcmF0aW9uMTo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0 IHR5cGVuYW1lIF9PcGVyYXRpb24yOjphcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJl dHVybiBfTV9mbjEoX01fZm4yKF9feCksIF9NX2ZuMyhfX3gpKTsKICB9Cn07Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX09wZXJhdGlvbjEsIGNsYXNzIF9PcGVyYXRpb24yLCBjbGFzcyBfT3BlcmF0aW9uMz4K aW5saW5lIGJpbmFyeV9jb21wb3NlPF9PcGVyYXRpb24xLCBfT3BlcmF0aW9uMiwgX09wZXJhdGlv bjM+CmNvbXBvc2UyKGNvbnN0IF9PcGVyYXRpb24xJiBfX2ZuMSwgY29uc3QgX09wZXJhdGlvbjIm IF9fZm4yLAogICAgICAgICBjb25zdCBfT3BlcmF0aW9uMyYgX19mbjMpCnsKICByZXR1cm4gYmlu YXJ5X2NvbXBvc2U8X09wZXJhdGlvbjEsX09wZXJhdGlvbjIsX09wZXJhdGlvbjM+CiAgICAoX19m bjEsIF9fZm4yLCBfX2ZuMyk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0 PgpjbGFzcyBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u PF9BcmcsIF9SZXN1bHQ+IHsKcHJvdGVjdGVkOgogIF9SZXN1bHQgKCpfTV9wdHIpKF9BcmcpOwpw dWJsaWM6CiAgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbigpIHt9CiAgZXhwbGljaXQgcG9pbnRl cl90b191bmFyeV9mdW5jdGlvbihfUmVzdWx0ICgqX194KShfQXJnKSkgOiBfTV9wdHIoX194KSB7 fQogIF9SZXN1bHQgb3BlcmF0b3IoKShfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gX01fcHRyKF9f eCk7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0PgppbmxpbmUgcG9p bnRlcl90b191bmFyeV9mdW5jdGlvbjxfQXJnLCBfUmVzdWx0PiBwdHJfZnVuKF9SZXN1bHQgKCpf X3gpKF9BcmcpKQp7CiAgcmV0dXJuIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jl c3VsdD4oX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xhc3Mg X1Jlc3VsdD4KY2xhc3MgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24gOgogIHB1YmxpYyBiaW5h cnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3VsdD4gewpwcm90ZWN0ZWQ6CiAgICBfUmVzdWx0 ICgqX01fcHRyKShfQXJnMSwgX0FyZzIpOwpwdWJsaWM6CiAgICBwb2ludGVyX3RvX2JpbmFyeV9m dW5jdGlvbigpIHt9CiAgICBleHBsaWNpdCBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbihfUmVz dWx0ICgqX194KShfQXJnMSwgX0FyZzIpKQogICAgICA6IF9NX3B0cihfX3gpIHt9CiAgICBfUmVz dWx0IG9wZXJhdG9yKCkoX0FyZzEgX194LCBfQXJnMiBfX3kpIGNvbnN0IHsKICAgICAgcmV0dXJu IF9NX3B0cihfX3gsIF9feSk7CiAgICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNz IF9BcmcyLCBjbGFzcyBfUmVzdWx0PgppbmxpbmUgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb248 X0FyZzEsX0FyZzIsX1Jlc3VsdD4KcHRyX2Z1bihfUmVzdWx0ICgqX194KShfQXJnMSwgX0FyZzIp KSB7CiAgcmV0dXJuIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1 bHQ+KF9feCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX0lkZW50aXR5IDogcHVi bGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfVHA+IHsKICBfVHAmIG9wZXJhdG9yKCkoX1RwJiBfX3gp IGNvbnN0IHsgcmV0dXJuIF9feDsgfQogIGNvbnN0IF9UcCYgb3BlcmF0b3IoKShjb25zdCBfVHAm IF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBzdHJ1 Y3QgaWRlbnRpdHkgOiBwdWJsaWMgX0lkZW50aXR5PF9UcD4ge307CgoKdGVtcGxhdGUgPGNsYXNz IF9QYWlyPgpzdHJ1Y3QgX1NlbGVjdDFzdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfUGFpciwg dHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGU+IHsKICB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlw ZSYgb3BlcmF0b3IoKShfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LmZpcnN0Owog IH0KICBjb25zdCB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlwZSYgb3BlcmF0b3IoKShjb25zdCBf UGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LmZpcnN0OwogIH0KfTsKCnRlbXBsYXRl IDxjbGFzcyBfUGFpcj4Kc3RydWN0IF9TZWxlY3QybmQgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248 X1BhaXIsIHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZT4KewogIHR5cGVuYW1lIF9QYWlyOjpz ZWNvbmRfdHlwZSYgb3BlcmF0b3IoKShfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194 LnNlY29uZDsKICB9CiAgY29uc3QgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlJiBvcGVyYXRv cigpKGNvbnN0IF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guc2Vjb25kOwogIH0K fTsKCnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4gc3RydWN0IHNlbGVjdDFzdCA6IHB1YmxpYyBfU2Vs ZWN0MXN0PF9QYWlyPiB7fTsKdGVtcGxhdGUgPGNsYXNzIF9QYWlyPiBzdHJ1Y3Qgc2VsZWN0Mm5k IDogcHVibGljIF9TZWxlY3QybmQ8X1BhaXI+IHt9OwoKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwg Y2xhc3MgX0FyZzI+CnN0cnVjdCBfUHJvamVjdDFzdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248 X0FyZzEsIF9BcmcyLCBfQXJnMT4gewogIF9BcmcxIG9wZXJhdG9yKCkoY29uc3QgX0FyZzEmIF9f eCwgY29uc3QgX0FyZzImKSBjb25zdCB7IHJldHVybiBfX3g7IH0KfTsKCnRlbXBsYXRlIDxjbGFz cyBfQXJnMSwgY2xhc3MgX0FyZzI+CnN0cnVjdCBfUHJvamVjdDJuZCA6IHB1YmxpYyBiaW5hcnlf ZnVuY3Rpb248X0FyZzEsIF9BcmcyLCBfQXJnMj4gewogIF9BcmcyIG9wZXJhdG9yKCkoY29uc3Qg X0FyZzEmLCBjb25zdCBfQXJnMiYgX195KSBjb25zdCB7IHJldHVybiBfX3k7IH0KfTsKCnRlbXBs YXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzI+CnN0cnVjdCBwcm9qZWN0MXN0IDogcHVibGlj IF9Qcm9qZWN0MXN0PF9BcmcxLCBfQXJnMj4ge307Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNs YXNzIF9BcmcyPgpzdHJ1Y3QgcHJvamVjdDJuZCA6IHB1YmxpYyBfUHJvamVjdDJuZDxfQXJnMSwg X0FyZzI+IHt9OwoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgX0NvbnN0YW50 X3ZvaWRfZnVuIHsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7CiAgcmVzdWx0X3R5cGUg X01fdmFsOwoKICBfQ29uc3RhbnRfdm9pZF9mdW4oY29uc3QgcmVzdWx0X3R5cGUmIF9fdikgOiBf TV92YWwoX192KSB7fQogIGNvbnN0IHJlc3VsdF90eXBlJiBvcGVyYXRvcigpKCkgY29uc3QgeyBy ZXR1cm4gX01fdmFsOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdCwgY2xhc3MgX0FyZ3Vt ZW50PgpzdHJ1Y3QgX0NvbnN0YW50X3VuYXJ5X2Z1biB7CiAgdHlwZWRlZiBfQXJndW1lbnQgYXJn dW1lbnRfdHlwZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7CiAgcmVzdWx0X3R5cGUg X01fdmFsOwoKICBfQ29uc3RhbnRfdW5hcnlfZnVuKGNvbnN0IHJlc3VsdF90eXBlJiBfX3YpIDog X01fdmFsKF9fdikge30KICBjb25zdCByZXN1bHRfdHlwZSYgb3BlcmF0b3IoKShjb25zdCBfQXJn dW1lbnQmKSBjb25zdCB7IHJldHVybiBfTV92YWw7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmVz dWx0LCBjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzI+CnN0cnVjdCBfQ29uc3RhbnRfYmluYXJ5X2Z1 biB7CiAgdHlwZWRlZiBfQXJnMSBmaXJzdF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX0FyZzIg c2Vjb25kX2FyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOwogIF9S ZXN1bHQgX01fdmFsOwoKICBfQ29uc3RhbnRfYmluYXJ5X2Z1bihjb25zdCBfUmVzdWx0JiBfX3Yp IDogX01fdmFsKF9fdikge30KICBjb25zdCByZXN1bHRfdHlwZSYgb3BlcmF0b3IoKShjb25zdCBf QXJnMSYsIGNvbnN0IF9BcmcyJikgY29uc3QgewogICAgcmV0dXJuIF9NX3ZhbDsKICB9Cn07Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdD4Kc3RydWN0IGNvbnN0YW50X3ZvaWRfZnVuIDogcHVibGlj IF9Db25zdGFudF92b2lkX2Z1bjxfUmVzdWx0PiB7CiAgY29uc3RhbnRfdm9pZF9mdW4oY29uc3Qg X1Jlc3VsdCYgX192KSA6IF9Db25zdGFudF92b2lkX2Z1bjxfUmVzdWx0PihfX3YpIHt9Cn07CgoK dGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQsCiAgICAgICAgICBjbGFzcyBfQXJndW1lbnQgPSBfUmVz dWx0PgpzdHJ1Y3QgY29uc3RhbnRfdW5hcnlfZnVuIDogcHVibGljIF9Db25zdGFudF91bmFyeV9m dW48X1Jlc3VsdCwgX0FyZ3VtZW50Pgp7CiAgY29uc3RhbnRfdW5hcnlfZnVuKGNvbnN0IF9SZXN1 bHQmIF9fdikKICAgIDogX0NvbnN0YW50X3VuYXJ5X2Z1bjxfUmVzdWx0LCBfQXJndW1lbnQ+KF9f dikge30KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdCwKICAgICAgICAgIGNsYXNzIF9Bcmcx ID0gX1Jlc3VsdCwKICAgICAgICAgIGNsYXNzIF9BcmcyID0gX0FyZzE+CnN0cnVjdCBjb25zdGFu dF9iaW5hcnlfZnVuCiAgOiBwdWJsaWMgX0NvbnN0YW50X2JpbmFyeV9mdW48X1Jlc3VsdCwgX0Fy ZzEsIF9BcmcyPgp7CiAgY29uc3RhbnRfYmluYXJ5X2Z1bihjb25zdCBfUmVzdWx0JiBfX3YpCiAg ICA6IF9Db25zdGFudF9iaW5hcnlfZnVuPF9SZXN1bHQsIF9BcmcxLCBfQXJnMj4oX192KSB7fQp9 OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQ+CmlubGluZSBjb25zdGFudF92b2lkX2Z1bjxfUmVz dWx0PiBjb25zdGFudDAoY29uc3QgX1Jlc3VsdCYgX192YWwpCnsKICByZXR1cm4gY29uc3RhbnRf dm9pZF9mdW48X1Jlc3VsdD4oX192YWwpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdD4KaW5s aW5lIGNvbnN0YW50X3VuYXJ5X2Z1bjxfUmVzdWx0LF9SZXN1bHQ+IGNvbnN0YW50MShjb25zdCBf UmVzdWx0JiBfX3ZhbCkKewogIHJldHVybiBjb25zdGFudF91bmFyeV9mdW48X1Jlc3VsdCxfUmVz dWx0PihfX3ZhbCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0PgppbmxpbmUgY29uc3RhbnRf YmluYXJ5X2Z1bjxfUmVzdWx0LF9SZXN1bHQsX1Jlc3VsdD4KY29uc3RhbnQyKGNvbnN0IF9SZXN1 bHQmIF9fdmFsKQp7CiAgcmV0dXJuIGNvbnN0YW50X2JpbmFyeV9mdW48X1Jlc3VsdCxfUmVzdWx0 LF9SZXN1bHQ+KF9fdmFsKTsKfQoKCgpjbGFzcyBzdWJ0cmFjdGl2ZV9ybmcgOiBwdWJsaWMgdW5h cnlfZnVuY3Rpb248dW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQ+IHsKcHJpdmF0ZToKICB1bnNp Z25lZCBpbnQgX01fdGFibGVbNTVdOwogIHNpemVfdCBfTV9pbmRleDE7CiAgc2l6ZV90IF9NX2lu ZGV4MjsKcHVibGljOgogIHVuc2lnbmVkIGludCBvcGVyYXRvcigpKHVuc2lnbmVkIGludCBfX2xp bWl0KSB7CiAgICBfTV9pbmRleDEgPSAoX01faW5kZXgxICsgMSkgJSA1NTsKICAgIF9NX2luZGV4 MiA9IChfTV9pbmRleDIgKyAxKSAlIDU1OwogICAgX01fdGFibGVbX01faW5kZXgxXSA9IF9NX3Rh YmxlW19NX2luZGV4MV0gLSBfTV90YWJsZVtfTV9pbmRleDJdOwogICAgcmV0dXJuIF9NX3RhYmxl W19NX2luZGV4MV0gJSBfX2xpbWl0OwogIH0KCiAgdm9pZCBfTV9pbml0aWFsaXplKHVuc2lnbmVk IGludCBfX3NlZWQpCiAgewogICAgdW5zaWduZWQgaW50IF9fayA9IDE7CiAgICBfTV90YWJsZVs1 NF0gPSBfX3NlZWQ7CiAgICBzaXplX3QgX19pOwogICAgZm9yIChfX2kgPSAwOyBfX2kgPCA1NDsg X19pKyspIHsKICAgICAgICBzaXplX3QgX19paSA9ICgyMSAqIChfX2kgKyAxKSAlIDU1KSAtIDE7 CiAgICAgICAgX01fdGFibGVbX19paV0gPSBfX2s7CiAgICAgICAgX19rID0gX19zZWVkIC0gX19r OwogICAgICAgIF9fc2VlZCA9IF9NX3RhYmxlW19faWldOwogICAgfQogICAgZm9yIChpbnQgX19s b29wID0gMDsgX19sb29wIDwgNDsgX19sb29wKyspIHsKICAgICAgICBmb3IgKF9faSA9IDA7IF9f aSA8IDU1OyBfX2krKykKICAgICAgICAgICAgX01fdGFibGVbX19pXSA9IF9NX3RhYmxlW19faV0g LSBfTV90YWJsZVsoMSArIF9faSArIDMwKSAlIDU1XTsKICAgIH0KICAgIF9NX2luZGV4MSA9IDA7 CiAgICBfTV9pbmRleDIgPSAzMTsKICB9CgogIHN1YnRyYWN0aXZlX3JuZyh1bnNpZ25lZCBpbnQg X19zZWVkKSB7IF9NX2luaXRpYWxpemUoX19zZWVkKTsgfQogIHN1YnRyYWN0aXZlX3JuZygpIHsg X01faW5pdGlhbGl6ZSgxNjE4MDMzOTh1KTsgfQp9OwojIDU2MiAiL3Vzci9sb2NhbC9pbmNsdWRl L2crKy12My9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFz cyBfVHA+CmNsYXNzIG1lbV9mdW5fdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAqLF9SZXQ+ IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fdChfUmV0IChfVHA6OipfX3BmKSgpKSA6IF9N X2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1RwKiBfX3ApIGNvbnN0IHsgcmV0dXJuIChf X3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKTsKfTsKCnRlbXBs YXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fdCA6IHB1Ymxp YyB1bmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNv bnN0X21lbV9mdW5fdChfUmV0IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30K ICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3ApIGNvbnN0IHsgcmV0dXJuIChfX3AtPipf TV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCgp0ZW1w bGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3JlZl90IDogcHVibGlj IHVuYXJ5X2Z1bmN0aW9uPF9UcCxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3Jl Zl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3Io KShfVHAmIF9fcikgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIF9S ZXQgKF9UcDo6Kl9NX2YpKCk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpj bGFzcyBjb25zdF9tZW1fZnVuX3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfUmV0 PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3JlZl90KF9SZXQgKF9UcDo6Kl9f cGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAm IF9fcikgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9U cDo6Kl9NX2YpKCkgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBj bGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAq LF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfdChfUmV0IChfVHA6Oipf X3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCogX19wLCBf QXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBf UmV0IChfVHA6OipfTV9mKShfQXJnKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBf VHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1 bmN0aW9uPGNvbnN0IF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9t ZW1fZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30K ICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdAogICAgeyBy ZXR1cm4gKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShf QXJnKSBjb25zdDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9B cmc+CmNsYXNzIG1lbV9mdW4xX3JlZl90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0Fy ZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV9yZWZfdChfUmV0IChfVHA6Oipf X3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCYgX19yLCBf QXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9S ZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9U cCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfcmVmX3QgOiBwdWJsaWMgYmluYXJ5 X2Z1bmN0aW9uPF9UcCxfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9m dW4xX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30K ICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IHJldHVy biAoX19yLipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZykg Y29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3Q8dm9pZCwgX1Rw PiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAqLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0 IG1lbV9mdW5fdCh2b2lkIChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9w ZXJhdG9yKCkoX1RwKiBfX3ApIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2 b2lkIChfVHA6OipfTV9mKSgpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgY29uc3Rf bWVtX2Z1bl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKix2 b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3Qodm9pZCAoX1RwOjoqX19w ZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCog X19wKSBjb25zdCB7IChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01f ZikoKSBjb25zdDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fcmVmX3Q8 dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsdm9pZD4gewpwdWJsaWM6CiAg ZXhwbGljaXQgbWVtX2Z1bl9yZWZfdCh2b2lkIChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikg e30KICB2b2lkIG9wZXJhdG9yKCkoX1RwJiBfX3IpIGNvbnN0IHsgKF9fci4qX01fZikoKTsgfQpw cml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpj bGFzcyBjb25zdF9tZW1fZnVuX3JlZl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rp b248X1RwLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fcmVmX3Qodm9p ZCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigp KGNvbnN0IF9UcCYgX19yKSBjb25zdCB7IChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lk IChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Fy Zz4KY2xhc3MgbWVtX2Z1bjFfdDx2b2lkLCBfVHAsIF9Bcmc+IDogcHVibGljIGJpbmFyeV9mdW5j dGlvbjxfVHAqLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfdCh2b2lk IChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9U cCogX19wLCBfQXJnIF9feCkgY29uc3QgeyAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgog IHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg X0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMg YmluYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNp dCBjb25zdF9tZW1fZnVuMV90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2Yo X19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3AsIF9BcmcgX194KSBjb25z dCB7IChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoX0Fy ZykgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1f ZnVuMV9yZWZfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9U cCxfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3JlZl90KHZvaWQgKF9U cDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwJiBf X3IsIF9BcmcgX194KSBjb25zdCB7IChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lk IChfVHA6OipfTV9mKShfQXJnKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+ CmNsYXNzIGNvbnN0X21lbV9mdW4xX3JlZl90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBi aW5hcnlfZnVuY3Rpb248X1RwLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3Rf bWVtX2Z1bjFfcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3Bm KSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsg KF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNv bnN0Owp9OwoKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIG1l bV9mdW5fdDxfUmV0LF9UcD4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKCkpCiAgeyByZXR1cm4g bWVtX2Z1bl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3Mg X1RwPgppbmxpbmUgY29uc3RfbWVtX2Z1bl90PF9SZXQsX1RwPiBtZW1fZnVuKF9SZXQgKF9UcDo6 Kl9fZikoKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuX3Q8X1JldCxfVHA+KF9fZik7 IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBtZW1fZnVuX3JlZl90 PF9SZXQsX1RwPiBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKCkpCiAgeyByZXR1cm4gbWVt X2Z1bl9yZWZfdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNz IF9UcD4KaW5saW5lIGNvbnN0X21lbV9mdW5fcmVmX3Q8X1JldCxfVHA+IG1lbV9mdW5fcmVmKF9S ZXQgKF9UcDo6Kl9fZikoKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuX3JlZl90PF9S ZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBf QXJnPgppbmxpbmUgbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuKF9SZXQgKF9UcDo6 Kl9fZikoX0FyZykpCiAgeyByZXR1cm4gbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgY29u c3RfbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoX0Fy ZykgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihfX2Yp OyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUg bWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19m KShfQXJnKSkKICB7IHJldHVybiBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgY29u c3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4KbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoq X19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9U cCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBf QXJnPgppbmxpbmUgbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuMShfUmV0IChfVHA6 OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsg fQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIGNv bnN0X21lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bjEoX1JldCAoX1RwOjoqX19mKShf QXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9f Zik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGlu ZSBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuMV9yZWYoX1JldCAoX1RwOjoq X19mKShfQXJnKSkKICB7IHJldHVybiBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2Yp OyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUg Y29uc3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4KbWVtX2Z1bjFfcmVmKF9SZXQgKF9U cDo6Kl9fZikoX0FyZykgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfcmVmX3Q8X1Jl dCxfVHAsX0FyZz4oX19mKTsgfQoKfQojIDg5ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RsX3RyZWUuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCnR5cGVkZWYgYm9vbCBfUmJfdHJl ZV9Db2xvcl90eXBlOwpjb25zdCBfUmJfdHJlZV9Db2xvcl90eXBlIF9TX3JiX3RyZWVfcmVkID0g ZmFsc2U7CmNvbnN0IF9SYl90cmVlX0NvbG9yX3R5cGUgX1NfcmJfdHJlZV9ibGFjayA9IHRydWU7 CgpzdHJ1Y3QgX1JiX3RyZWVfbm9kZV9iYXNlCnsKICB0eXBlZGVmIF9SYl90cmVlX0NvbG9yX3R5 cGUgX0NvbG9yX3R5cGU7CiAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9CYXNlX3B0cjsK CiAgX0NvbG9yX3R5cGUgX01fY29sb3I7CiAgX0Jhc2VfcHRyIF9NX3BhcmVudDsKICBfQmFzZV9w dHIgX01fbGVmdDsKICBfQmFzZV9wdHIgX01fcmlnaHQ7CgogIHN0YXRpYyBfQmFzZV9wdHIgX1Nf bWluaW11bShfQmFzZV9wdHIgX194KQogIHsKICAgIHdoaWxlIChfX3gtPl9NX2xlZnQgIT0gMCkg X194ID0gX194LT5fTV9sZWZ0OwogICAgcmV0dXJuIF9feDsKICB9CgogIHN0YXRpYyBfQmFzZV9w dHIgX1NfbWF4aW11bShfQmFzZV9wdHIgX194KQogIHsKICAgIHdoaWxlIChfX3gtPl9NX3JpZ2h0 ICE9IDApIF9feCA9IF9feC0+X01fcmlnaHQ7CiAgICByZXR1cm4gX194OwogIH0KfTsKCnRlbXBs YXRlIDxjbGFzcyBfVmFsdWU+CnN0cnVjdCBfUmJfdHJlZV9ub2RlIDogcHVibGljIF9SYl90cmVl X25vZGVfYmFzZQp7CiAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlPF9WYWx1ZT4qIF9MaW5rX3R5cGU7 CiAgX1ZhbHVlIF9NX3ZhbHVlX2ZpZWxkOwp9OwoKCnN0cnVjdCBfUmJfdHJlZV9iYXNlX2l0ZXJh dG9yCnsKICB0eXBlZGVmIF9SYl90cmVlX25vZGVfYmFzZTo6X0Jhc2VfcHRyIF9CYXNlX3B0cjsK ICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Owog IHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICBfQmFzZV9wdHIgX01fbm9kZTsK CiAgdm9pZCBfTV9pbmNyZW1lbnQoKQogIHsKICAgIGlmIChfTV9ub2RlLT5fTV9yaWdodCAhPSAw KSB7CiAgICAgIF9NX25vZGUgPSBfTV9ub2RlLT5fTV9yaWdodDsKICAgICAgd2hpbGUgKF9NX25v ZGUtPl9NX2xlZnQgIT0gMCkKICAgICAgICBfTV9ub2RlID0gX01fbm9kZS0+X01fbGVmdDsKICAg IH0KICAgIGVsc2UgewogICAgICBfQmFzZV9wdHIgX195ID0gX01fbm9kZS0+X01fcGFyZW50Owog ICAgICB3aGlsZSAoX01fbm9kZSA9PSBfX3ktPl9NX3JpZ2h0KSB7CiAgICAgICAgX01fbm9kZSA9 IF9feTsKICAgICAgICBfX3kgPSBfX3ktPl9NX3BhcmVudDsKICAgICAgfQogICAgICBpZiAoX01f bm9kZS0+X01fcmlnaHQgIT0gX195KQogICAgICAgIF9NX25vZGUgPSBfX3k7CiAgICB9CiAgfQoK ICB2b2lkIF9NX2RlY3JlbWVudCgpCiAgewogICAgaWYgKF9NX25vZGUtPl9NX2NvbG9yID09IF9T X3JiX3RyZWVfcmVkICYmCiAgICAgICAgX01fbm9kZS0+X01fcGFyZW50LT5fTV9wYXJlbnQgPT0g X01fbm9kZSkKICAgICAgX01fbm9kZSA9IF9NX25vZGUtPl9NX3JpZ2h0OwogICAgZWxzZSBpZiAo X01fbm9kZS0+X01fbGVmdCAhPSAwKSB7CiAgICAgIF9CYXNlX3B0ciBfX3kgPSBfTV9ub2RlLT5f TV9sZWZ0OwogICAgICB3aGlsZSAoX195LT5fTV9yaWdodCAhPSAwKQogICAgICAgIF9feSA9IF9f eS0+X01fcmlnaHQ7CiAgICAgIF9NX25vZGUgPSBfX3k7CiAgICB9CiAgICBlbHNlIHsKICAgICAg X0Jhc2VfcHRyIF9feSA9IF9NX25vZGUtPl9NX3BhcmVudDsKICAgICAgd2hpbGUgKF9NX25vZGUg PT0gX195LT5fTV9sZWZ0KSB7CiAgICAgICAgX01fbm9kZSA9IF9feTsKICAgICAgICBfX3kgPSBf X3ktPl9NX3BhcmVudDsKICAgICAgfQogICAgICBfTV9ub2RlID0gX195OwogICAgfQogIH0KfTsK CnRlbXBsYXRlIDxjbGFzcyBfVmFsdWUsIGNsYXNzIF9SZWYsIGNsYXNzIF9QdHI+CnN0cnVjdCBf UmJfdHJlZV9pdGVyYXRvciA6IHB1YmxpYyBfUmJfdHJlZV9iYXNlX2l0ZXJhdG9yCnsKICB0eXBl ZGVmIF9WYWx1ZSB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX1JlZiByZWZlcmVuY2U7CiAgdHlwZWRl ZiBfUHRyIHBvaW50ZXI7CiAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsdWUsIF9WYWx1 ZSYsIF9WYWx1ZSo+CiAgICBpdGVyYXRvcjsKICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPF9W YWx1ZSwgY29uc3QgX1ZhbHVlJiwgY29uc3QgX1ZhbHVlKj4KICAgIGNvbnN0X2l0ZXJhdG9yOwog IHR5cGVkZWYgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbHVlLCBfUmVmLCBfUHRyPgogICAgX1NlbGY7 CiAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlPF9WYWx1ZT4qIF9MaW5rX3R5cGU7CgogIF9SYl90cmVl X2l0ZXJhdG9yKCkge30KICBfUmJfdHJlZV9pdGVyYXRvcihfTGlua190eXBlIF9feCkgeyBfTV9u b2RlID0gX194OyB9CiAgX1JiX3RyZWVfaXRlcmF0b3IoY29uc3QgaXRlcmF0b3ImIF9faXQpIHsg X01fbm9kZSA9IF9faXQuX01fbm9kZTsgfQoKICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3Qg eyByZXR1cm4gX0xpbmtfdHlwZShfTV9ub2RlKS0+X01fdmFsdWVfZmllbGQ7IH0KICBwb2ludGVy IG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKICBfU2VsZiYg b3BlcmF0b3IrKygpIHsgX01faW5jcmVtZW50KCk7IHJldHVybiAqdGhpczsgfQogIF9TZWxmIG9w ZXJhdG9yKysoaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgX01faW5jcmVtZW50 KCk7CiAgICByZXR1cm4gX190bXA7CiAgfQoKICBfU2VsZiYgb3BlcmF0b3ItLSgpIHsgX01fZGVj cmVtZW50KCk7IHJldHVybiAqdGhpczsgfQogIF9TZWxmIG9wZXJhdG9yLS0oaW50KSB7CiAgICBf U2VsZiBfX3RtcCA9ICp0aGlzOwogICAgX01fZGVjcmVtZW50KCk7CiAgICByZXR1cm4gX190bXA7 CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9WYWx1ZSwgY2xhc3MgX1JlZiwgY2xhc3MgX1B0cj4K aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsdWUsIF9S ZWYsIF9QdHI+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWVfaXRl cmF0b3I8X1ZhbHVlLCBfUmVmLCBfUHRyPiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV9ub2RlID09 IF9feS5fTV9ub2RlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ZhbHVlPgppbmxpbmUgYm9vbCBvcGVy YXRvcj09KGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWx1ZSwgY29uc3QgX1ZhbHVlJiwgY29u c3QgX1ZhbHVlKj4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9p dGVyYXRvcjxfVmFsdWUsIF9WYWx1ZSYsIF9WYWx1ZSo+JiBfX3kpIHsKICByZXR1cm4gX194Ll9N X25vZGUgPT0gX195Ll9NX25vZGU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVmFsdWU+CmlubGluZSBi b29sIG9wZXJhdG9yPT0oY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbHVlLCBfVmFsdWUmLCBf VmFsdWUqPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2l0ZXJh dG9yPF9WYWx1ZSwgY29uc3QgX1ZhbHVlJiwgY29uc3QgX1ZhbHVlKj4mIF9feSkgewogIHJldHVy biBfX3guX01fbm9kZSA9PSBfX3kuX01fbm9kZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9WYWx1ZSwg Y2xhc3MgX1JlZiwgY2xhc3MgX1B0cj4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfUmJf dHJlZV9pdGVyYXRvcjxfVmFsdWUsIF9SZWYsIF9QdHI+JiBfX3gsCiAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbHVlLCBfUmVmLCBfUHRyPiYgX195KSB7 CiAgcmV0dXJuIF9feC5fTV9ub2RlICE9IF9feS5fTV9ub2RlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1ZhbHVlPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9W YWx1ZSwgY29uc3QgX1ZhbHVlJiwgY29uc3QgX1ZhbHVlKj4mIF9feCwKICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsdWUsIF9WYWx1ZSYsIF9WYWx1ZSo+ JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX25vZGUgIT0gX195Ll9NX25vZGU7Cn0KCnRlbXBsYXRl IDxjbGFzcyBfVmFsdWU+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX1JiX3RyZWVfaXRl cmF0b3I8X1ZhbHVlLCBfVmFsdWUmLCBfVmFsdWUqPiYgX194LAogICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWx1ZSwgY29uc3QgX1ZhbHVlJiwgY29uc3Qg X1ZhbHVlKj4mIF9feSkgewogIHJldHVybiBfX3guX01fbm9kZSAhPSBfX3kuX01fbm9kZTsKfQoK aW5saW5lIHZvaWQKX1JiX3RyZWVfcm90YXRlX2xlZnQoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3gs IF9SYl90cmVlX25vZGVfYmFzZSomIF9fcm9vdCkKewogIF9SYl90cmVlX25vZGVfYmFzZSogX195 ID0gX194LT5fTV9yaWdodDsKICBfX3gtPl9NX3JpZ2h0ID0gX195LT5fTV9sZWZ0OwogIGlmIChf X3ktPl9NX2xlZnQgIT0wKQogICAgX195LT5fTV9sZWZ0LT5fTV9wYXJlbnQgPSBfX3g7CiAgX195 LT5fTV9wYXJlbnQgPSBfX3gtPl9NX3BhcmVudDsKCiAgaWYgKF9feCA9PSBfX3Jvb3QpCiAgICBf X3Jvb3QgPSBfX3k7CiAgZWxzZSBpZiAoX194ID09IF9feC0+X01fcGFyZW50LT5fTV9sZWZ0KQog ICAgX194LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3k7CiAgZWxzZQogICAgX194LT5fTV9wYXJl bnQtPl9NX3JpZ2h0ID0gX195OwogIF9feS0+X01fbGVmdCA9IF9feDsKICBfX3gtPl9NX3BhcmVu dCA9IF9feTsKfQoKaW5saW5lIHZvaWQKX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9SYl90cmVlX25v ZGVfYmFzZSogX194LCBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3Jvb3QpCnsKICBfUmJfdHJlZV9u b2RlX2Jhc2UqIF9feSA9IF9feC0+X01fbGVmdDsKICBfX3gtPl9NX2xlZnQgPSBfX3ktPl9NX3Jp Z2h0OwogIGlmIChfX3ktPl9NX3JpZ2h0ICE9IDApCiAgICBfX3ktPl9NX3JpZ2h0LT5fTV9wYXJl bnQgPSBfX3g7CiAgX195LT5fTV9wYXJlbnQgPSBfX3gtPl9NX3BhcmVudDsKCiAgaWYgKF9feCA9 PSBfX3Jvb3QpCiAgICBfX3Jvb3QgPSBfX3k7CiAgZWxzZSBpZiAoX194ID09IF9feC0+X01fcGFy ZW50LT5fTV9yaWdodCkKICAgIF9feC0+X01fcGFyZW50LT5fTV9yaWdodCA9IF9feTsKICBlbHNl CiAgICBfX3gtPl9NX3BhcmVudC0+X01fbGVmdCA9IF9feTsKICBfX3ktPl9NX3JpZ2h0ID0gX194 OwogIF9feC0+X01fcGFyZW50ID0gX195Owp9CgppbmxpbmUgdm9pZApfUmJfdHJlZV9yZWJhbGFu Y2UoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3gsIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcm9vdCkK ewogIF9feC0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICB3aGlsZSAoX194ICE9IF9fcm9v dCAmJiBfX3gtPl9NX3BhcmVudC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpIHsKICAgIGlm IChfX3gtPl9NX3BhcmVudCA9PSBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9sZWZ0KSB7 CiAgICAgIF9SYl90cmVlX25vZGVfYmFzZSogX195ID0gX194LT5fTV9wYXJlbnQtPl9NX3BhcmVu dC0+X01fcmlnaHQ7CiAgICAgIGlmIChfX3kgJiYgX195LT5fTV9jb2xvciA9PSBfU19yYl90cmVl X3JlZCkgewogICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxh Y2s7CiAgICAgICAgX195LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgX194 LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICAgICAg ICBfX3ggPSBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50OwogICAgICB9CiAgICAgIGVsc2Ugewog ICAgICAgIGlmIChfX3ggPT0gX194LT5fTV9wYXJlbnQtPl9NX3JpZ2h0KSB7CiAgICAgICAgICBf X3ggPSBfX3gtPl9NX3BhcmVudDsKICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9feCwg X19yb290KTsKICAgICAgICB9CiAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX1Nf cmJfdHJlZV9ibGFjazsKICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9jb2xv ciA9IF9TX3JiX3RyZWVfcmVkOwogICAgICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdodChfX3gtPl9N X3BhcmVudC0+X01fcGFyZW50LCBfX3Jvb3QpOwogICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAg ICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5f TV9sZWZ0OwogICAgICBpZiAoX195ICYmIF9feS0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQp IHsKICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwog ICAgICAgIF9feS0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgIF9feC0+X01f cGFyZW50LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgX194 ID0gX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudDsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAg ICBpZiAoX194ID09IF9feC0+X01fcGFyZW50LT5fTV9sZWZ0KSB7CiAgICAgICAgICBfX3ggPSBf X3gtPl9NX3BhcmVudDsKICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdodChfX3gsIF9fcm9v dCk7CiAgICAgICAgfQogICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3Ry ZWVfYmxhY2s7CiAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fY29sb3IgPSBf U19yYl90cmVlX3JlZDsKICAgICAgICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3gtPl9NX3BhcmVu dC0+X01fcGFyZW50LCBfX3Jvb3QpOwogICAgICB9CiAgICB9CiAgfQogIF9fcm9vdC0+X01fY29s b3IgPSBfU19yYl90cmVlX2JsYWNrOwp9CgppbmxpbmUgX1JiX3RyZWVfbm9kZV9iYXNlKgpfUmJf dHJlZV9yZWJhbGFuY2VfZm9yX2VyYXNlKF9SYl90cmVlX25vZGVfYmFzZSogX196LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcm9vdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX2xlZnRtb3N0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcmlnaHRt b3N0KQp7CiAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3o7CiAgX1JiX3RyZWVfbm9kZV9i YXNlKiBfX3ggPSAwOwogIF9SYl90cmVlX25vZGVfYmFzZSogX194X3BhcmVudCA9IDA7CiAgaWYg KF9feS0+X01fbGVmdCA9PSAwKQogICAgX194ID0gX195LT5fTV9yaWdodDsKICBlbHNlCiAgICBp ZiAoX195LT5fTV9yaWdodCA9PSAwKQogICAgICBfX3ggPSBfX3ktPl9NX2xlZnQ7CiAgICBlbHNl IHsKICAgICAgX195ID0gX195LT5fTV9yaWdodDsKICAgICAgd2hpbGUgKF9feS0+X01fbGVmdCAh PSAwKQogICAgICAgIF9feSA9IF9feS0+X01fbGVmdDsKICAgICAgX194ID0gX195LT5fTV9yaWdo dDsKICAgIH0KICBpZiAoX195ICE9IF9feikgewogICAgX196LT5fTV9sZWZ0LT5fTV9wYXJlbnQg PSBfX3k7CiAgICBfX3ktPl9NX2xlZnQgPSBfX3otPl9NX2xlZnQ7CiAgICBpZiAoX195ICE9IF9f ei0+X01fcmlnaHQpIHsKICAgICAgX194X3BhcmVudCA9IF9feS0+X01fcGFyZW50OwogICAgICBp ZiAoX194KSBfX3gtPl9NX3BhcmVudCA9IF9feS0+X01fcGFyZW50OwogICAgICBfX3ktPl9NX3Bh cmVudC0+X01fbGVmdCA9IF9feDsKICAgICAgX195LT5fTV9yaWdodCA9IF9fei0+X01fcmlnaHQ7 CiAgICAgIF9fei0+X01fcmlnaHQtPl9NX3BhcmVudCA9IF9feTsKICAgIH0KICAgIGVsc2UKICAg ICAgX194X3BhcmVudCA9IF9feTsKICAgIGlmIChfX3Jvb3QgPT0gX196KQogICAgICBfX3Jvb3Qg PSBfX3k7CiAgICBlbHNlIGlmIChfX3otPl9NX3BhcmVudC0+X01fbGVmdCA9PSBfX3opCiAgICAg IF9fei0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX195OwogICAgZWxzZQogICAgICBfX3otPl9NX3Bh cmVudC0+X01fcmlnaHQgPSBfX3k7CiAgICBfX3ktPl9NX3BhcmVudCA9IF9fei0+X01fcGFyZW50 OwogICAgc3RkOjpzd2FwKF9feS0+X01fY29sb3IsIF9fei0+X01fY29sb3IpOwogICAgX195ID0g X196OwoKICB9CiAgZWxzZSB7CiAgICBfX3hfcGFyZW50ID0gX195LT5fTV9wYXJlbnQ7CiAgICBp ZiAoX194KSBfX3gtPl9NX3BhcmVudCA9IF9feS0+X01fcGFyZW50OwogICAgaWYgKF9fcm9vdCA9 PSBfX3opCiAgICAgIF9fcm9vdCA9IF9feDsKICAgIGVsc2UKICAgICAgaWYgKF9fei0+X01fcGFy ZW50LT5fTV9sZWZ0ID09IF9feikKICAgICAgICBfX3otPl9NX3BhcmVudC0+X01fbGVmdCA9IF9f eDsKICAgICAgZWxzZQogICAgICAgIF9fei0+X01fcGFyZW50LT5fTV9yaWdodCA9IF9feDsKICAg IGlmIChfX2xlZnRtb3N0ID09IF9feikKICAgICAgaWYgKF9fei0+X01fcmlnaHQgPT0gMCkKICAg ICAgICBfX2xlZnRtb3N0ID0gX196LT5fTV9wYXJlbnQ7CgogICAgICBlbHNlCiAgICAgICAgX19s ZWZ0bW9zdCA9IF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWluaW11bShfX3gpOwogICAgaWYgKF9f cmlnaHRtb3N0ID09IF9feikKICAgICAgaWYgKF9fei0+X01fbGVmdCA9PSAwKQogICAgICAgIF9f cmlnaHRtb3N0ID0gX196LT5fTV9wYXJlbnQ7CgogICAgICBlbHNlCiAgICAgICAgX19yaWdodG1v c3QgPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21heGltdW0oX194KTsKICB9CiAgaWYgKF9feS0+ X01fY29sb3IgIT0gX1NfcmJfdHJlZV9yZWQpIHsKICAgIHdoaWxlIChfX3ggIT0gX19yb290ICYm IChfX3ggPT0gMCB8fCBfX3gtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfYmxhY2spKQogICAgICBp ZiAoX194ID09IF9feF9wYXJlbnQtPl9NX2xlZnQpIHsKICAgICAgICBfUmJfdHJlZV9ub2RlX2Jh c2UqIF9fdyA9IF9feF9wYXJlbnQtPl9NX3JpZ2h0OwogICAgICAgIGlmIChfX3ctPl9NX2NvbG9y ID09IF9TX3JiX3RyZWVfcmVkKSB7CiAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX1NfcmJfdHJl ZV9ibGFjazsKICAgICAgICAgIF9feF9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7 CiAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3hfcGFyZW50LCBfX3Jvb3QpOwogICAg ICAgICAgX193ID0gX194X3BhcmVudC0+X01fcmlnaHQ7CiAgICAgICAgfQogICAgICAgIGlmICgo X193LT5fTV9sZWZ0ID09IDAgfHwKICAgICAgICAgICAgIF9fdy0+X01fbGVmdC0+X01fY29sb3Ig PT0gX1NfcmJfdHJlZV9ibGFjaykgJiYKICAgICAgICAgICAgKF9fdy0+X01fcmlnaHQgPT0gMCB8 fAogICAgICAgICAgICAgX193LT5fTV9yaWdodC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9ibGFj aykpIHsKICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICAgICAgICAg IF9feCA9IF9feF9wYXJlbnQ7CiAgICAgICAgICBfX3hfcGFyZW50ID0gX194X3BhcmVudC0+X01f cGFyZW50OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoX193LT5fTV9yaWdodCA9PSAw IHx8CiAgICAgICAgICAgICAgX193LT5fTV9yaWdodC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9i bGFjaykgewogICAgICAgICAgICBpZiAoX193LT5fTV9sZWZ0KSBfX3ctPl9NX2xlZnQtPl9NX2Nv bG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAgICAgICAgICAgX193LT5fTV9jb2xvciA9IF9TX3Ji X3RyZWVfcmVkOwogICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX193LCBfX3Jvb3Qp OwogICAgICAgICAgICBfX3cgPSBfX3hfcGFyZW50LT5fTV9yaWdodDsKICAgICAgICAgIH0KICAg ICAgICAgIF9fdy0+X01fY29sb3IgPSBfX3hfcGFyZW50LT5fTV9jb2xvcjsKICAgICAgICAgIF9f eF9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAgICAgICAgIGlmIChfX3ct Pl9NX3JpZ2h0KSBfX3ctPl9NX3JpZ2h0LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAg ICAgICAgICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3hfcGFyZW50LCBfX3Jvb3QpOwogICAgICAg ICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIF9SYl90cmVlX25vZGVf YmFzZSogX193ID0gX194X3BhcmVudC0+X01fbGVmdDsKICAgICAgICBpZiAoX193LT5fTV9jb2xv ciA9PSBfU19yYl90cmVlX3JlZCkgewogICAgICAgICAgX193LT5fTV9jb2xvciA9IF9TX3JiX3Ry ZWVfYmxhY2s7CiAgICAgICAgICBfX3hfcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfcmVk OwogICAgICAgICAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9feF9wYXJlbnQsIF9fcm9vdCk7CiAg ICAgICAgICBfX3cgPSBfX3hfcGFyZW50LT5fTV9sZWZ0OwogICAgICAgIH0KICAgICAgICBpZiAo KF9fdy0+X01fcmlnaHQgPT0gMCB8fAogICAgICAgICAgICAgX193LT5fTV9yaWdodC0+X01fY29s b3IgPT0gX1NfcmJfdHJlZV9ibGFjaykgJiYKICAgICAgICAgICAgKF9fdy0+X01fbGVmdCA9PSAw IHx8CiAgICAgICAgICAgICBfX3ctPl9NX2xlZnQtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfYmxh Y2spKSB7CiAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAg ICBfX3ggPSBfX3hfcGFyZW50OwogICAgICAgICAgX194X3BhcmVudCA9IF9feF9wYXJlbnQtPl9N X3BhcmVudDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKF9fdy0+X01fbGVmdCA9PSAw IHx8CiAgICAgICAgICAgICAgX193LT5fTV9sZWZ0LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX2Js YWNrKSB7CiAgICAgICAgICAgIGlmIChfX3ctPl9NX3JpZ2h0KSBfX3ctPl9NX3JpZ2h0LT5fTV9j b2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfU19y Yl90cmVlX3JlZDsKICAgICAgICAgICAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX193LCBfX3Jvb3Qp OwogICAgICAgICAgICBfX3cgPSBfX3hfcGFyZW50LT5fTV9sZWZ0OwogICAgICAgICAgfQogICAg ICAgICAgX193LT5fTV9jb2xvciA9IF9feF9wYXJlbnQtPl9NX2NvbG9yOwogICAgICAgICAgX194 X3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgICAgaWYgKF9fdy0+ X01fbGVmdCkgX193LT5fTV9sZWZ0LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAg ICAgICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX194X3BhcmVudCwgX19yb290KTsKICAgICAgICAg IGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgaWYgKF9feCkgX194LT5fTV9jb2xvciA9IF9T X3JiX3RyZWVfYmxhY2s7CiAgfQogIHJldHVybiBfX3k7Cn0KCgoKCgoKCnRlbXBsYXRlIDxjbGFz cyBfVHAsIGNsYXNzIF9BbGxvYywgYm9vbCBfU19pbnN0YW5jZWxlc3M+CmNsYXNzIF9SYl90cmVl X2FsbG9jX2Jhc2UgewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9U cCwgX0FsbG9jPjo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5 cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX25vZGVfYWxsb2NhdG9yOyB9Cgog IF9SYl90cmVlX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgIDogX01f bm9kZV9hbGxvY2F0b3IoX19hKSwgX01faGVhZGVyKDApIHt9Cgpwcm90ZWN0ZWQ6CiAgdHlwZW5h bWUgX0FsbG9jX3RyYWl0czxfUmJfdHJlZV9ub2RlPF9UcD4sIF9BbGxvYz46OmFsbG9jYXRvcl90 eXBlCiAgICAgICAgICAgX01fbm9kZV9hbGxvY2F0b3I7CiAgX1JiX3RyZWVfbm9kZTxfVHA+KiBf TV9oZWFkZXI7CgogIF9SYl90cmVlX25vZGU8X1RwPiogX01fZ2V0X25vZGUoKQogICAgeyByZXR1 cm4gX01fbm9kZV9hbGxvY2F0b3IuYWxsb2NhdGUoMSk7IH0KICB2b2lkIF9NX3B1dF9ub2RlKF9S Yl90cmVlX25vZGU8X1RwPiogX19wKQogICAgeyBfTV9ub2RlX2FsbG9jYXRvci5kZWFsbG9jYXRl KF9fcCwgMSk7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmNsYXNz IF9SYl90cmVlX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsIHRydWU+IHsKcHVibGljOgogIHR5cGVk ZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46OmFsbG9jYXRvcl90eXBlIGFs bG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJl dHVybiBhbGxvY2F0b3JfdHlwZSgpOyB9CgogIF9SYl90cmVlX2FsbG9jX2Jhc2UoY29uc3QgYWxs b2NhdG9yX3R5cGUmKSA6IF9NX2hlYWRlcigwKSB7fQoKcHJvdGVjdGVkOgogIF9SYl90cmVlX25v ZGU8X1RwPiogX01faGVhZGVyOwoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1Ji X3RyZWVfbm9kZTxfVHA+LCBfQWxsb2M+OjpfQWxsb2NfdHlwZQogICAgICAgICAgX0FsbG9jX3R5 cGU7CgogIF9SYl90cmVlX25vZGU8X1RwPiogX01fZ2V0X25vZGUoKQogICAgeyByZXR1cm4gX0Fs bG9jX3R5cGU6OmFsbG9jYXRlKDEpOyB9CiAgdm9pZCBfTV9wdXRfbm9kZShfUmJfdHJlZV9ub2Rl PF9UcD4qIF9fcCkKICAgIHsgX0FsbG9jX3R5cGU6OmRlYWxsb2NhdGUoX19wLCAxKTsgfQp9OwoK dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX1JiX3RyZWVfYmFzZQog IDogcHVibGljIF9SYl90cmVlX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2Vs ZXNzPgp7CiAgdHlwZWRlZiBfUmJfdHJlZV9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5z dGFuY2VsZXNzPgogICAgICAgICAgX0Jhc2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxs b2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgogIF9SYl90cmVlX2Jhc2UoY29uc3QgYWxsb2Nh dG9yX3R5cGUmIF9fYSkKICAgIDogX0Jhc2UoX19hKSB7IF9NX2hlYWRlciA9IF9NX2dldF9ub2Rl KCk7IH0KICB+X1JiX3RyZWVfYmFzZSgpIHsgX01fcHV0X25vZGUoX01faGVhZGVyKTsgfQoKfTsK Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwg Y2xhc3MgX0NvbXBhcmUsCiAgICAgICAgICBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8X1ZhbHVl PiA+CmNsYXNzIF9SYl90cmVlIDogcHJvdGVjdGVkIF9SYl90cmVlX2Jhc2U8X1ZhbHVlLCBfQWxs b2M+IHsKICB0eXBlZGVmIF9SYl90cmVlX2Jhc2U8X1ZhbHVlLCBfQWxsb2M+IF9CYXNlOwpwcm90 ZWN0ZWQ6CiAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9CYXNlX3B0cjsKICB0eXBlZGVm IF9SYl90cmVlX25vZGU8X1ZhbHVlPiBfUmJfdHJlZV9ub2RlOwogIHR5cGVkZWYgX1JiX3RyZWVf Q29sb3JfdHlwZSBfQ29sb3JfdHlwZTsKcHVibGljOgogIHR5cGVkZWYgX0tleSBrZXlfdHlwZTsK ICB0eXBlZGVmIF9WYWx1ZSB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRl cjsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2 YWx1ZV90eXBlJiByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlJiBjb25zdF9y ZWZlcmVuY2U7CiAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlKiBfTGlua190eXBlOwogIHR5cGVkZWYg c2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7Cgog IHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwog IGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfQmFzZTo6Z2V0 X2FsbG9jYXRvcigpOyB9Cgpwcm90ZWN0ZWQ6CiAgdXNpbmcgX0Jhc2U6Ol9NX2dldF9ub2RlOwog IHVzaW5nIF9CYXNlOjpfTV9wdXRfbm9kZTsKICB1c2luZyBfQmFzZTo6X01faGVhZGVyOwoKcHJv dGVjdGVkOgoKICBfTGlua190eXBlIF9NX2NyZWF0ZV9ub2RlKGNvbnN0IHZhbHVlX3R5cGUmIF9f eCkKICB7CiAgICBfTGlua190eXBlIF9fdG1wID0gX01fZ2V0X25vZGUoKTsKICAgICAgICAgICAg ICB7CiAgICAgIGNvbnN0cnVjdCgmX190bXAtPl9NX3ZhbHVlX2ZpZWxkLCBfX3gpOwogICAgfQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICByZXR1cm4gX190bXA7CiAg fQoKICBfTGlua190eXBlIF9NX2Nsb25lX25vZGUoX0xpbmtfdHlwZSBfX3gpCiAgewogICAgX0xp bmtfdHlwZSBfX3RtcCA9IF9NX2NyZWF0ZV9ub2RlKF9feC0+X01fdmFsdWVfZmllbGQpOwogICAg X190bXAtPl9NX2NvbG9yID0gX194LT5fTV9jb2xvcjsKICAgIF9fdG1wLT5fTV9sZWZ0ID0gMDsK ICAgIF9fdG1wLT5fTV9yaWdodCA9IDA7CiAgICByZXR1cm4gX190bXA7CiAgfQoKICB2b2lkIGRl c3Ryb3lfbm9kZShfTGlua190eXBlIF9fcCkKICB7CiAgICBkZXN0cm95KCZfX3AtPl9NX3ZhbHVl X2ZpZWxkKTsKICAgIF9NX3B1dF9ub2RlKF9fcCk7CiAgfQoKcHJvdGVjdGVkOgogIHNpemVfdHlw ZSBfTV9ub2RlX2NvdW50OwogIF9Db21wYXJlIF9NX2tleV9jb21wYXJlOwoKICBfTGlua190eXBl JiBfTV9yb290KCkgY29uc3QKICAgIHsgcmV0dXJuIChfTGlua190eXBlJikgX01faGVhZGVyLT5f TV9wYXJlbnQ7IH0KICBfTGlua190eXBlJiBfTV9sZWZ0bW9zdCgpIGNvbnN0CiAgICB7IHJldHVy biAoX0xpbmtfdHlwZSYpIF9NX2hlYWRlci0+X01fbGVmdDsgfQogIF9MaW5rX3R5cGUmIF9NX3Jp Z2h0bW9zdCgpIGNvbnN0CiAgICB7IHJldHVybiAoX0xpbmtfdHlwZSYpIF9NX2hlYWRlci0+X01f cmlnaHQ7IH0KCiAgc3RhdGljIF9MaW5rX3R5cGUmIF9TX2xlZnQoX0xpbmtfdHlwZSBfX3gpCiAg ICB7IHJldHVybiAoX0xpbmtfdHlwZSYpKF9feC0+X01fbGVmdCk7IH0KICBzdGF0aWMgX0xpbmtf dHlwZSYgX1NfcmlnaHQoX0xpbmtfdHlwZSBfX3gpCiAgICB7IHJldHVybiAoX0xpbmtfdHlwZSYp KF9feC0+X01fcmlnaHQpOyB9CiAgc3RhdGljIF9MaW5rX3R5cGUmIF9TX3BhcmVudChfTGlua190 eXBlIF9feCkKICAgIHsgcmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9wYXJlbnQpOyB9CiAg c3RhdGljIHJlZmVyZW5jZSBfU192YWx1ZShfTGlua190eXBlIF9feCkKICAgIHsgcmV0dXJuIF9f eC0+X01fdmFsdWVfZmllbGQ7IH0KICBzdGF0aWMgY29uc3QgX0tleSYgX1Nfa2V5KF9MaW5rX3R5 cGUgX194KQogICAgeyByZXR1cm4gX0tleU9mVmFsdWUoKShfU192YWx1ZShfX3gpKTsgfQogIHN0 YXRpYyBfQ29sb3JfdHlwZSYgX1NfY29sb3IoX0xpbmtfdHlwZSBfX3gpCiAgICB7IHJldHVybiAo X0NvbG9yX3R5cGUmKShfX3gtPl9NX2NvbG9yKTsgfQoKICBzdGF0aWMgX0xpbmtfdHlwZSYgX1Nf bGVmdChfQmFzZV9wdHIgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX2xl ZnQpOyB9CiAgc3RhdGljIF9MaW5rX3R5cGUmIF9TX3JpZ2h0KF9CYXNlX3B0ciBfX3gpCiAgICB7 IHJldHVybiAoX0xpbmtfdHlwZSYpKF9feC0+X01fcmlnaHQpOyB9CiAgc3RhdGljIF9MaW5rX3R5 cGUmIF9TX3BhcmVudChfQmFzZV9wdHIgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShf X3gtPl9NX3BhcmVudCk7IH0KICBzdGF0aWMgcmVmZXJlbmNlIF9TX3ZhbHVlKF9CYXNlX3B0ciBf X3gpCiAgICB7IHJldHVybiAoKF9MaW5rX3R5cGUpX194KS0+X01fdmFsdWVfZmllbGQ7IH0KICBz dGF0aWMgY29uc3QgX0tleSYgX1Nfa2V5KF9CYXNlX3B0ciBfX3gpCiAgICB7IHJldHVybiBfS2V5 T2ZWYWx1ZSgpKF9TX3ZhbHVlKF9MaW5rX3R5cGUoX194KSkpO30KICBzdGF0aWMgX0NvbG9yX3R5 cGUmIF9TX2NvbG9yKF9CYXNlX3B0ciBfX3gpCiAgICB7IHJldHVybiAoX0NvbG9yX3R5cGUmKShf TGlua190eXBlKF9feCktPl9NX2NvbG9yKTsgfQoKICBzdGF0aWMgX0xpbmtfdHlwZSBfU19taW5p bXVtKF9MaW5rX3R5cGUgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUpIF9SYl90cmVlX25v ZGVfYmFzZTo6X1NfbWluaW11bShfX3gpOyB9CgogIHN0YXRpYyBfTGlua190eXBlIF9TX21heGlt dW0oX0xpbmtfdHlwZSBfX3gpCiAgICB7IHJldHVybiAoX0xpbmtfdHlwZSkgX1JiX3RyZWVfbm9k ZV9iYXNlOjpfU19tYXhpbXVtKF9feCk7IH0KCnB1YmxpYzoKICB0eXBlZGVmIF9SYl90cmVlX2l0 ZXJhdG9yPHZhbHVlX3R5cGUsIHJlZmVyZW5jZSwgcG9pbnRlcj4gaXRlcmF0b3I7CiAgdHlwZWRl ZiBfUmJfdHJlZV9pdGVyYXRvcjx2YWx1ZV90eXBlLCBjb25zdF9yZWZlcmVuY2UsIGNvbnN0X3Bv aW50ZXI+CiAgICAgICAgICBjb25zdF9pdGVyYXRvcjsKCiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJh dG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgcmV2 ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCnByaXZhdGU6CiAgaXRl cmF0b3IgX01faW5zZXJ0KF9CYXNlX3B0ciBfX3gsIF9CYXNlX3B0ciBfX3ksIGNvbnN0IHZhbHVl X3R5cGUmIF9fdik7CiAgX0xpbmtfdHlwZSBfTV9jb3B5KF9MaW5rX3R5cGUgX194LCBfTGlua190 eXBlIF9fcCk7CiAgdm9pZCBfTV9lcmFzZShfTGlua190eXBlIF9feCk7CgpwdWJsaWM6CgogIF9S Yl90cmVlKCkKICAgIDogX0Jhc2UoYWxsb2NhdG9yX3R5cGUoKSksIF9NX25vZGVfY291bnQoMCks IF9NX2tleV9jb21wYXJlKCkKICAgIHsgX01fZW1wdHlfaW5pdGlhbGl6ZSgpOyB9CgogIF9SYl90 cmVlKGNvbnN0IF9Db21wYXJlJiBfX2NvbXApCiAgICA6IF9CYXNlKGFsbG9jYXRvcl90eXBlKCkp LCBfTV9ub2RlX2NvdW50KDApLCBfTV9rZXlfY29tcGFyZShfX2NvbXApCiAgICB7IF9NX2VtcHR5 X2luaXRpYWxpemUoKTsgfQoKICBfUmJfdHJlZShjb25zdCBfQ29tcGFyZSYgX19jb21wLCBjb25z dCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgOiBfQmFzZShfX2EpLCBfTV9ub2RlX2NvdW50KDAp LCBfTV9rZXlfY29tcGFyZShfX2NvbXApCiAgICB7IF9NX2VtcHR5X2luaXRpYWxpemUoKTsgfQoK ICBfUmJfdHJlZShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFy ZSxfQWxsb2M+JiBfX3gpCiAgICA6IF9CYXNlKF9feC5nZXRfYWxsb2NhdG9yKCkpLAogICAgICBf TV9ub2RlX2NvdW50KDApLCBfTV9rZXlfY29tcGFyZShfX3guX01fa2V5X2NvbXBhcmUpCiAgewog ICAgaWYgKF9feC5fTV9yb290KCkgPT0gMCkKICAgICAgX01fZW1wdHlfaW5pdGlhbGl6ZSgpOwog ICAgZWxzZSB7CiAgICAgIF9TX2NvbG9yKF9NX2hlYWRlcikgPSBfU19yYl90cmVlX3JlZDsKICAg ICAgX01fcm9vdCgpID0gX01fY29weShfX3guX01fcm9vdCgpLCBfTV9oZWFkZXIpOwogICAgICBf TV9sZWZ0bW9zdCgpID0gX1NfbWluaW11bShfTV9yb290KCkpOwogICAgICBfTV9yaWdodG1vc3Qo KSA9IF9TX21heGltdW0oX01fcm9vdCgpKTsKICAgIH0KICAgIF9NX25vZGVfY291bnQgPSBfX3gu X01fbm9kZV9jb3VudDsKICB9CiAgfl9SYl90cmVlKCkgeyBjbGVhcigpOyB9CiAgX1JiX3RyZWU8 X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYKICBvcGVyYXRvcj0oY29u c3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194 KTsKCnByaXZhdGU6CiAgdm9pZCBfTV9lbXB0eV9pbml0aWFsaXplKCkgewogICAgX1NfY29sb3Io X01faGVhZGVyKSA9IF9TX3JiX3RyZWVfcmVkOwoKICAgIF9NX3Jvb3QoKSA9IDA7CiAgICBfTV9s ZWZ0bW9zdCgpID0gX01faGVhZGVyOwogICAgX01fcmlnaHRtb3N0KCkgPSBfTV9oZWFkZXI7CiAg fQoKcHVibGljOgoKICBfQ29tcGFyZSBrZXlfY29tcCgpIGNvbnN0IHsgcmV0dXJuIF9NX2tleV9j b21wYXJlOyB9CiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBfTV9sZWZ0bW9zdCgpOyB9CiAg Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV9sZWZ0bW9zdCgpOyB9CiAg aXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gX01faGVhZGVyOyB9CiAgY29uc3RfaXRlcmF0b3IgZW5k KCkgY29uc3QgeyByZXR1cm4gX01faGVhZGVyOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4o KSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQogIGNvbnN0X3JldmVyc2VfaXRl cmF0b3IgcmJlZ2luKCkgY29uc3QgewogICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3Io ZW5kKCkpOwogIH0KICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0 ZXJhdG9yKGJlZ2luKCkpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3Qg ewogICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7CiAgfQogIGJvb2wg ZW1wdHkoKSBjb25zdCB7IHJldHVybiBfTV9ub2RlX2NvdW50ID09IDA7IH0KICBzaXplX3R5cGUg c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX25vZGVfY291bnQ7IH0KICBzaXplX3R5cGUgbWF4X3Np emUoKSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoLTEpOyB9CgogIHZvaWQgc3dhcChfUmJfdHJl ZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3QpIHsKICAgIHN0 ZDo6c3dhcChfTV9oZWFkZXIsIF9fdC5fTV9oZWFkZXIpOwogICAgc3RkOjpzd2FwKF9NX25vZGVf Y291bnQsIF9fdC5fTV9ub2RlX2NvdW50KTsKICAgIHN0ZDo6c3dhcChfTV9rZXlfY29tcGFyZSwg X190Ll9NX2tleV9jb21wYXJlKTsKICB9CgpwdWJsaWM6CgogIHBhaXI8aXRlcmF0b3IsYm9vbD4g aW5zZXJ0X3VuaXF1ZShjb25zdCB2YWx1ZV90eXBlJiBfX3gpOwogIGl0ZXJhdG9yIGluc2VydF9l cXVhbChjb25zdCB2YWx1ZV90eXBlJiBfX3gpOwoKICBpdGVyYXRvciBpbnNlcnRfdW5pcXVlKGl0 ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CiAgaXRlcmF0b3IgaW5z ZXJ0X2VxdWFsKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7Cgog IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2VydF91bmlxdWUoX0lu cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KTsKICB0ZW1wbGF0ZSA8 Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBpbnNlcnRfZXF1YWwoX0lucHV0SXRlcmF0b3Ig X19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KTsKCiAgdm9pZCBlcmFzZShpdGVyYXRvciBf X3Bvc2l0aW9uKTsKICBzaXplX3R5cGUgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9feCk7CiAgdm9p ZCBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpOwogIHZvaWQgZXJhc2Uo Y29uc3Qga2V5X3R5cGUqIF9fZmlyc3QsIGNvbnN0IGtleV90eXBlKiBfX2xhc3QpOwogIHZvaWQg Y2xlYXIoKSB7CiAgICBpZiAoX01fbm9kZV9jb3VudCAhPSAwKSB7CiAgICAgIF9NX2VyYXNlKF9N X3Jvb3QoKSk7CiAgICAgIF9NX2xlZnRtb3N0KCkgPSBfTV9oZWFkZXI7CiAgICAgIF9NX3Jvb3Qo KSA9IDA7CiAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX01faGVhZGVyOwogICAgICBfTV9ub2RlX2Nv dW50ID0gMDsKICAgIH0KICB9CgpwdWJsaWM6CgogIGl0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5 cGUmIF9feCk7CiAgY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25z dDsKICBzaXplX3R5cGUgY291bnQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7CiAgaXRlcmF0 b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCk7CiAgY29uc3RfaXRlcmF0b3IgbG93 ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7CiAgaXRlcmF0b3IgdXBwZXJfYm91 bmQoY29uc3Qga2V5X3R5cGUmIF9feCk7CiAgY29uc3RfaXRlcmF0b3IgdXBwZXJfYm91bmQoY29u c3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7CiAgcGFpcjxpdGVyYXRvcixpdGVyYXRvcj4gZXF1YWxf cmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCk7CiAgcGFpcjxjb25zdF9pdGVyYXRvciwgY29uc3Rf aXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0OwoKcHVibGlj OgoKICBib29sIF9fcmJfdmVyaWZ5KCkgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwg Y2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJl LCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPT0oY29uc3QgX1JiX3RyZWU8X0tl eSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgIGNv bnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9f eSkKewogIHJldHVybiBfX3guc2l6ZSgpID09IF9feS5zaXplKCkgJiYKICAgICAgICAgZXF1YWwo X194LmJlZ2luKCksIF9feC5lbmQoKSwgX195LmJlZ2luKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9D b21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPChjb25zdCBfUmJfdHJl ZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAg ICBjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+ JiBfX3kpCnsKICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX194LmJlZ2luKCksIF9f eC5lbmQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX195LmJlZ2luKCksIF9f eS5lbmQoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9L ZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5l IGJvb2wKb3BlcmF0b3IhPShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxf Q29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgY29uc3QgX1JiX3RyZWU8X0tleSxfVmFs dWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194ID09 IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlP ZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJv b2wKb3BlcmF0b3I+KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21w YXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9L ZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAog ICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0 b3I8PShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs b2M+JiBfX3gsCiAgICAgICAgICAgY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFs dWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoKdGVt cGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAg ICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcj49 KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4m IF9feCwKICAgICAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxf Q29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9CgoKdGVtcGxh dGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAg ICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZApzd2FwKF9SYl90cmVl PF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICBfUmJf dHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCnsKICBf X3guc3dhcChfX3kpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xh c3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgpf UmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JgpfUmJfdHJl ZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjpvcGVyYXRvcj0o Y29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYg X194KQp7CiAgaWYgKHRoaXMgIT0gJl9feCkgewoKICAgIGNsZWFyKCk7CiAgICBfTV9ub2RlX2Nv dW50ID0gMDsKICAgIF9NX2tleV9jb21wYXJlID0gX194Ll9NX2tleV9jb21wYXJlOwogICAgaWYg KF9feC5fTV9yb290KCkgPT0gMCkgewogICAgICBfTV9yb290KCkgPSAwOwogICAgICBfTV9sZWZ0 bW9zdCgpID0gX01faGVhZGVyOwogICAgICBfTV9yaWdodG1vc3QoKSA9IF9NX2hlYWRlcjsKICAg IH0KICAgIGVsc2UgewogICAgICBfTV9yb290KCkgPSBfTV9jb3B5KF9feC5fTV9yb290KCksIF9N X2hlYWRlcik7CiAgICAgIF9NX2xlZnRtb3N0KCkgPSBfU19taW5pbXVtKF9NX3Jvb3QoKSk7CiAg ICAgIF9NX3JpZ2h0bW9zdCgpID0gX1NfbWF4aW11bShfTV9yb290KCkpOwogICAgICBfTV9ub2Rl X2NvdW50ID0gX194Ll9NX25vZGVfY291bnQ7CiAgICB9CiAgfQogIHJldHVybiAqdGhpczsKfQoK dGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAg ICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxf S2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgpfUmJfdHJl ZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjpfTV9pbnNlcnQo X0Jhc2VfcHRyIF9feF8sIF9CYXNlX3B0ciBfX3lfLCBjb25zdCBfVmFsdWUmIF9fdikKewogIF9M aW5rX3R5cGUgX194ID0gKF9MaW5rX3R5cGUpIF9feF87CiAgX0xpbmtfdHlwZSBfX3kgPSAoX0xp bmtfdHlwZSkgX195XzsKICBfTGlua190eXBlIF9fejsKCiAgaWYgKF9feSA9PSBfTV9oZWFkZXIg fHwgX194ICE9IDAgfHwKICAgICAgX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBf U19rZXkoX195KSkpIHsKICAgIF9feiA9IF9NX2NyZWF0ZV9ub2RlKF9fdik7CiAgICBfU19sZWZ0 KF9feSkgPSBfX3o7CgogICAgaWYgKF9feSA9PSBfTV9oZWFkZXIpIHsKICAgICAgX01fcm9vdCgp ID0gX196OwogICAgICBfTV9yaWdodG1vc3QoKSA9IF9fejsKICAgIH0KICAgIGVsc2UgaWYgKF9f eSA9PSBfTV9sZWZ0bW9zdCgpKQogICAgICBfTV9sZWZ0bW9zdCgpID0gX196OwogIH0KICBlbHNl IHsKICAgIF9feiA9IF9NX2NyZWF0ZV9ub2RlKF9fdik7CiAgICBfU19yaWdodChfX3kpID0gX196 OwogICAgaWYgKF9feSA9PSBfTV9yaWdodG1vc3QoKSkKICAgICAgX01fcmlnaHRtb3N0KCkgPSBf X3o7CiAgfQogIF9TX3BhcmVudChfX3opID0gX195OwogIF9TX2xlZnQoX196KSA9IDA7CiAgX1Nf cmlnaHQoX196KSA9IDA7CiAgX1JiX3RyZWVfcmViYWxhbmNlKF9feiwgX01faGVhZGVyLT5fTV9w YXJlbnQpOwogICsrX01fbm9kZV9jb3VudDsKICByZXR1cm4gaXRlcmF0b3IoX196KTsKfQoKdGVt cGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAg ICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5 LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgpfUmJfdHJlZTxf S2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjppbnNlcnRfZXF1YWwo Y29uc3QgX1ZhbHVlJiBfX3YpCnsKICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICBfTGlu a190eXBlIF9feCA9IF9NX3Jvb3QoKTsKICB3aGlsZSAoX194ICE9IDApIHsKICAgIF9feSA9IF9f eDsKICAgIF9feCA9IF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9f eCkpID8KICAgICAgICAgICAgX1NfbGVmdChfX3gpIDogX1NfcmlnaHQoX194KTsKICB9CiAgcmV0 dXJuIF9NX2luc2VydChfX3gsIF9feSwgX192KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBj bGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUs IGNsYXNzIF9BbGxvYz4KcGFpcjx0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZW YWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvciwKICAgICBib29sPgpfUmJfdHJlZTxfS2V5 LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjppbnNlcnRfdW5pcXVlKGNv bnN0IF9WYWx1ZSYgX192KQp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgX0xpbmtf dHlwZSBfX3ggPSBfTV9yb290KCk7CiAgYm9vbCBfX2NvbXAgPSB0cnVlOwogIHdoaWxlIChfX3gg IT0gMCkgewogICAgX195ID0gX194OwogICAgX19jb21wID0gX01fa2V5X2NvbXBhcmUoX0tleU9m VmFsdWUoKShfX3YpLCBfU19rZXkoX194KSk7CiAgICBfX3ggPSBfX2NvbXAgPyBfU19sZWZ0KF9f eCkgOiBfU19yaWdodChfX3gpOwogIH0KICBpdGVyYXRvciBfX2ogPSBpdGVyYXRvcihfX3kpOwog IGlmIChfX2NvbXApCiAgICBpZiAoX19qID09IGJlZ2luKCkpCiAgICAgIHJldHVybiBwYWlyPGl0 ZXJhdG9yLGJvb2w+KF9NX2luc2VydChfX3gsIF9feSwgX192KSwgdHJ1ZSk7CiAgICBlbHNlCiAg ICAgIC0tX19qOwogIGlmIChfTV9rZXlfY29tcGFyZShfU19rZXkoX19qLl9NX25vZGUpLCBfS2V5 T2ZWYWx1ZSgpKF9fdikpKQogICAgcmV0dXJuIHBhaXI8aXRlcmF0b3IsYm9vbD4oX01faW5zZXJ0 KF9feCwgX195LCBfX3YpLCB0cnVlKTsKICByZXR1cm4gcGFpcjxpdGVyYXRvcixib29sPihfX2os IGZhbHNlKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsLCBjbGFzcyBfS2V5 T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1l IF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6aXRl cmF0b3IKX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+ CiAgOjppbnNlcnRfdW5pcXVlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9WYWwmIF9fdikK ewogIGlmIChfX3Bvc2l0aW9uLl9NX25vZGUgPT0gX01faGVhZGVyLT5fTV9sZWZ0KSB7CiAgICBp ZiAoc2l6ZSgpID4gMCAmJgogICAgICAgX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3Yp LCBfU19rZXkoX19wb3NpdGlvbi5fTV9ub2RlKSkpCiAgICAgIHJldHVybiBfTV9pbnNlcnQoX19w b3NpdGlvbi5fTV9ub2RlLCBfX3Bvc2l0aW9uLl9NX25vZGUsIF9fdik7CgogICAgZWxzZQogICAg ICByZXR1cm4gaW5zZXJ0X3VuaXF1ZShfX3YpLmZpcnN0OwogIH0gZWxzZSBpZiAoX19wb3NpdGlv bi5fTV9ub2RlID09IF9NX2hlYWRlcikgewogICAgaWYgKF9NX2tleV9jb21wYXJlKF9TX2tleShf TV9yaWdodG1vc3QoKSksIF9LZXlPZlZhbHVlKCkoX192KSkpCiAgICAgIHJldHVybiBfTV9pbnNl cnQoMCwgX01fcmlnaHRtb3N0KCksIF9fdik7CiAgICBlbHNlCiAgICAgIHJldHVybiBpbnNlcnRf dW5pcXVlKF9fdikuZmlyc3Q7CiAgfSBlbHNlIHsKICAgIGl0ZXJhdG9yIF9fYmVmb3JlID0gX19w b3NpdGlvbjsKICAgIC0tX19iZWZvcmU7CiAgICBpZiAoX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9f YmVmb3JlLl9NX25vZGUpLCBfS2V5T2ZWYWx1ZSgpKF9fdikpCiAgICAgICAgJiYgX01fa2V5X2Nv bXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX19wb3NpdGlvbi5fTV9ub2RlKSkpIHsK ICAgICAgaWYgKF9TX3JpZ2h0KF9fYmVmb3JlLl9NX25vZGUpID09IDApCiAgICAgICAgcmV0dXJu IF9NX2luc2VydCgwLCBfX2JlZm9yZS5fTV9ub2RlLCBfX3YpOwogICAgICBlbHNlCiAgICAgICAg cmV0dXJuIF9NX2luc2VydChfX3Bvc2l0aW9uLl9NX25vZGUsIF9fcG9zaXRpb24uX01fbm9kZSwg X192KTsKCiAgICB9IGVsc2UKICAgICAgcmV0dXJuIGluc2VydF91bmlxdWUoX192KS5maXJzdDsK ICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsLCBjbGFzcyBfS2V5T2ZWYWx1 ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90 cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgpfUmJf dHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6aW5zZXJ0X2Vx dWFsKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9WYWwmIF9fdikKewogIGlmIChfX3Bvc2l0 aW9uLl9NX25vZGUgPT0gX01faGVhZGVyLT5fTV9sZWZ0KSB7CiAgICBpZiAoc2l6ZSgpID4gMCAm JgogICAgICAgICFfTV9rZXlfY29tcGFyZShfU19rZXkoX19wb3NpdGlvbi5fTV9ub2RlKSwgX0tl eU9mVmFsdWUoKShfX3YpKSkKICAgICAgcmV0dXJuIF9NX2luc2VydChfX3Bvc2l0aW9uLl9NX25v ZGUsIF9fcG9zaXRpb24uX01fbm9kZSwgX192KTsKCiAgICBlbHNlCiAgICAgIHJldHVybiBpbnNl cnRfZXF1YWwoX192KTsKICB9IGVsc2UgaWYgKF9fcG9zaXRpb24uX01fbm9kZSA9PSBfTV9oZWFk ZXIpIHsKICAgIGlmICghX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXko X01fcmlnaHRtb3N0KCkpKSkKICAgICAgcmV0dXJuIF9NX2luc2VydCgwLCBfTV9yaWdodG1vc3Qo KSwgX192KTsKICAgIGVsc2UKICAgICAgcmV0dXJuIGluc2VydF9lcXVhbChfX3YpOwogIH0gZWxz ZSB7CiAgICBpdGVyYXRvciBfX2JlZm9yZSA9IF9fcG9zaXRpb247CiAgICAtLV9fYmVmb3JlOwog ICAgaWYgKCFfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX2JlZm9y ZS5fTV9ub2RlKSkKICAgICAgICAmJiAhX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fcG9zaXRpb24u X01fbm9kZSksIF9LZXlPZlZhbHVlKCkoX192KSkpIHsKICAgICAgaWYgKF9TX3JpZ2h0KF9fYmVm b3JlLl9NX25vZGUpID09IDApCiAgICAgICAgcmV0dXJuIF9NX2luc2VydCgwLCBfX2JlZm9yZS5f TV9ub2RlLCBfX3YpOwogICAgICBlbHNlCiAgICAgICAgcmV0dXJuIF9NX2luc2VydChfX3Bvc2l0 aW9uLl9NX25vZGUsIF9fcG9zaXRpb24uX01fbm9kZSwgX192KTsKCiAgICB9IGVsc2UKICAgICAg cmV0dXJuIGluc2VydF9lcXVhbChfX3YpOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNs YXNzIF9WYWwsIGNsYXNzIF9Lb1YsIGNsYXNzIF9DbXAsIGNsYXNzIF9BbGxvYz4KICB0ZW1wbGF0 ZTxjbGFzcyBfSUk+CnZvaWQgX1JiX3RyZWU8X0tleSxfVmFsLF9Lb1YsX0NtcCxfQWxsb2M+CiAg OjppbnNlcnRfZXF1YWwoX0lJIF9fZmlyc3QsIF9JSSBfX2xhc3QpCnsKICBmb3IgKCA7IF9fZmly c3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpbnNlcnRfZXF1YWwoKl9fZmlyc3QpOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbCwgY2xhc3MgX0tvViwgY2xhc3MgX0NtcCwg Y2xhc3MgX0FsbG9jPgogIHRlbXBsYXRlPGNsYXNzIF9JST4Kdm9pZCBfUmJfdHJlZTxfS2V5LF9W YWwsX0tvVixfQ21wLF9BbGxvYz4KICA6Omluc2VydF91bmlxdWUoX0lJIF9fZmlyc3QsIF9JSSBf X2xhc3QpIHsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpbnNl cnRfdW5pcXVlKCpfX2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1 ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0Fs bG9jPgppbmxpbmUgdm9pZCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFy ZSxfQWxsb2M+CiAgOjplcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQp7CiAgX0xpbmtfdHlwZSBf X3kgPQogICAgKF9MaW5rX3R5cGUpIF9SYl90cmVlX3JlYmFsYW5jZV9mb3JfZXJhc2UoX19wb3Np dGlvbi5fTV9ub2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX01faGVhZGVyLT5fTV9wYXJlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfTV9oZWFkZXItPl9NX2xlZnQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfTV9oZWFkZXItPl9NX3JpZ2h0KTsKICBkZXN0cm95X25v ZGUoX195KTsKICAtLV9NX25vZGVfY291bnQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFz cyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNs YXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0Nv bXBhcmUsX0FsbG9jPjo6c2l6ZV90eXBlCl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVl LF9Db21wYXJlLF9BbGxvYz46OmVyYXNlKGNvbnN0IF9LZXkmIF9feCkKewogIHBhaXI8aXRlcmF0 b3IsaXRlcmF0b3I+IF9fcCA9IGVxdWFsX3JhbmdlKF9feCk7CiAgc2l6ZV90eXBlIF9fbiA9IDA7 CiAgZGlzdGFuY2UoX19wLmZpcnN0LCBfX3Auc2Vjb25kLCBfX24pOwogIGVyYXNlKF9fcC5maXJz dCwgX19wLnNlY29uZCk7CiAgcmV0dXJuIF9fbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNs YXNzIF9WYWwsIGNsYXNzIF9Lb1YsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVu YW1lIF9SYl90cmVlPF9LZXksIF9WYWwsIF9Lb1YsIF9Db21wYXJlLCBfQWxsb2M+OjpfTGlua190 eXBlCl9SYl90cmVlPF9LZXksX1ZhbCxfS29WLF9Db21wYXJlLF9BbGxvYz4KICA6Ol9NX2NvcHko X0xpbmtfdHlwZSBfX3gsIF9MaW5rX3R5cGUgX19wKQp7CgogIF9MaW5rX3R5cGUgX190b3AgPSBf TV9jbG9uZV9ub2RlKF9feCk7CiAgX190b3AtPl9NX3BhcmVudCA9IF9fcDsKCiAgICAgICAgICAg IHsKICAgIGlmIChfX3gtPl9NX3JpZ2h0KQogICAgICBfX3RvcC0+X01fcmlnaHQgPSBfTV9jb3B5 KF9TX3JpZ2h0KF9feCksIF9fdG9wKTsKICAgIF9fcCA9IF9fdG9wOwogICAgX194ID0gX1NfbGVm dChfX3gpOwoKICAgIHdoaWxlIChfX3ggIT0gMCkgewogICAgICBfTGlua190eXBlIF9feSA9IF9N X2Nsb25lX25vZGUoX194KTsKICAgICAgX19wLT5fTV9sZWZ0ID0gX195OwogICAgICBfX3ktPl9N X3BhcmVudCA9IF9fcDsKICAgICAgaWYgKF9feC0+X01fcmlnaHQpCiAgICAgICAgX195LT5fTV9y aWdodCA9IF9NX2NvcHkoX1NfcmlnaHQoX194KSwgX195KTsKICAgICAgX19wID0gX195OwogICAg ICBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICB9CiAgfQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwoKICByZXR1cm4gX190b3A7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBf VmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNz IF9BbGxvYz4Kdm9pZCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxf QWxsb2M+CiAgOjpfTV9lcmFzZShfTGlua190eXBlIF9feCkKewoKICB3aGlsZSAoX194ICE9IDAp IHsKICAgIF9NX2VyYXNlKF9TX3JpZ2h0KF9feCkpOwogICAgX0xpbmtfdHlwZSBfX3kgPSBfU19s ZWZ0KF9feCk7CiAgICBkZXN0cm95X25vZGUoX194KTsKICAgIF9feCA9IF9feTsKICB9Cn0KCnRl bXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAg ICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4Kdm9pZCBfUmJfdHJlZTxfS2V5LF9W YWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjplcmFzZShpdGVyYXRvciBfX2Zp cnN0LCBpdGVyYXRvciBfX2xhc3QpCnsKICBpZiAoX19maXJzdCA9PSBiZWdpbigpICYmIF9fbGFz dCA9PSBlbmQoKSkKICAgIGNsZWFyKCk7CiAgZWxzZQogICAgd2hpbGUgKF9fZmlyc3QgIT0gX19s YXN0KSBlcmFzZShfX2ZpcnN0KyspOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1Zh bHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBf QWxsb2M+CnZvaWQgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0Fs bG9jPgogIDo6ZXJhc2UoY29uc3QgX0tleSogX19maXJzdCwgY29uc3QgX0tleSogX19sYXN0KQp7 CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSBlcmFzZSgqX19maXJzdCsrKTsKfQoKdGVtcGxh dGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAg ICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9W YWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgpfUmJfdHJlZTxfS2V5 LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjpmaW5kKGNvbnN0IF9LZXkmIF9f aykKewogIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwogIF9MaW5rX3R5cGUgX194ID0gX01f cm9vdCgpOwoKICB3aGlsZSAoX194ICE9IDApCiAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9TX2tl eShfX3gpLCBfX2spKQogICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgIGVs c2UKICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKCiAgaXRlcmF0b3IgX19qID0gaXRlcmF0b3Io X195KTsKICByZXR1cm4gKF9faiA9PSBlbmQoKSB8fCBfTV9rZXlfY29tcGFyZShfX2ssIF9TX2tl eShfX2ouX01fbm9kZSkpKSA/CiAgICAgZW5kKCkgOiBfX2o7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf S2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0Nv bXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9m VmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IKX1JiX3RyZWU8X0tleSxfVmFs dWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6ZmluZChjb25zdCBfS2V5JiBfX2spIGNv bnN0CnsKICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICBfTGlua190eXBlIF9feCA9IF9N X3Jvb3QoKTsKCiAgd2hpbGUgKF9feCAhPSAwKSB7CiAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9T X2tleShfX3gpLCBfX2spKQogICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAg IGVsc2UKICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKICB9CiAgY29uc3RfaXRlcmF0b3IgX19q ID0gY29uc3RfaXRlcmF0b3IoX195KTsKICByZXR1cm4gKF9faiA9PSBlbmQoKSB8fCBfTV9rZXlf Y29tcGFyZShfX2ssIF9TX2tleShfX2ouX01fbm9kZSkpKSA/CiAgICBlbmQoKSA6IF9fajsKfQoK dGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAg ICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxf S2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjpzaXplX3R5cGUKX1JiX3Ry ZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6Y291bnQoY29u c3QgX0tleSYgX19rKSBjb25zdAp7CiAgcGFpcjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0 b3I+IF9fcCA9IGVxdWFsX3JhbmdlKF9fayk7CiAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgZGlzdGFu Y2UoX19wLmZpcnN0LCBfX3Auc2Vjb25kLCBfX24pOwogIHJldHVybiBfX247Cn0KCnRlbXBsYXRl IDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAg Y2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFs dWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKX1JiX3RyZWU8X0tleSxf VmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6bG93ZXJfYm91bmQoY29uc3Qg X0tleSYgX19rKQp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgX0xpbmtfdHlwZSBf X3ggPSBfTV9yb290KCk7CgogIHdoaWxlIChfX3ggIT0gMCkKICAgIGlmICghX01fa2V5X2NvbXBh cmUoX1Nfa2V5KF9feCksIF9faykpCiAgICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gp OwogICAgZWxzZQogICAgICBfX3ggPSBfU19yaWdodChfX3gpOwoKICByZXR1cm4gaXRlcmF0b3Io X195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9m VmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBf UmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+Ojpjb25zdF9p dGVyYXRvcgpfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+ CiAgOjpsb3dlcl9ib3VuZChjb25zdCBfS2V5JiBfX2spIGNvbnN0CnsKICBfTGlua190eXBlIF9f eSA9IF9NX2hlYWRlcjsKICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAgd2hpbGUgKF9f eCAhPSAwKQogICAgaWYgKCFfTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwgX19rKSkKICAgICAg X195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICBlbHNlCiAgICAgIF9feCA9IF9TX3Jp Z2h0KF9feCk7CgogIHJldHVybiBjb25zdF9pdGVyYXRvcihfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNz IF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9L ZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yCl9SYl90cmVlPF9LZXksX1ZhbHVl LF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6OnVwcGVyX2JvdW5kKGNvbnN0IF9LZXkm IF9faykKewogIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwogIF9MaW5rX3R5cGUgX194ID0g X01fcm9vdCgpOwoKICAgd2hpbGUgKF9feCAhPSAwKQogICAgIGlmIChfTV9rZXlfY29tcGFyZShf X2ssIF9TX2tleShfX3gpKSkKICAgICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gpOwog ICAgIGVsc2UKICAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7CgogICByZXR1cm4gaXRlcmF0b3Io X195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9m VmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBf UmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+Ojpjb25zdF9p dGVyYXRvcgpfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+ CiAgOjp1cHBlcl9ib3VuZChjb25zdCBfS2V5JiBfX2spIGNvbnN0CnsKICBfTGlua190eXBlIF9f eSA9IF9NX2hlYWRlcjsKICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAgIHdoaWxlIChf X3ggIT0gMCkKICAgICBpZiAoX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX194KSkpCiAgICAg ICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgICBlbHNlCiAgICAgICBfX3ggPSBf U19yaWdodChfX3gpOwoKICAgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9feSk7Cn0KCnRlbXBsYXRl IDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAg Y2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lCnBhaXI8dHlwZW5hbWUgX1JiX3Ry ZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IsCiAg ICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0Fs bG9jPjo6aXRlcmF0b3I+Cl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJl LF9BbGxvYz4KICA6OmVxdWFsX3JhbmdlKGNvbnN0IF9LZXkmIF9faykKewogIHJldHVybiBwYWly PGl0ZXJhdG9yLCBpdGVyYXRvcj4obG93ZXJfYm91bmQoX19rKSwgdXBwZXJfYm91bmQoX19rKSk7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9Lb1YsIGNsYXNz IF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZQpwYWlyPHR5cGVuYW1lIF9SYl90cmVlPF9L ZXksIF9WYWx1ZSwgX0tvViwgX0NvbXBhcmUsIF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yLAogICAg IHR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWx1ZSwgX0tvViwgX0NvbXBhcmUsIF9BbGxvYz46 OmNvbnN0X2l0ZXJhdG9yPgpfUmJfdHJlZTxfS2V5LCBfVmFsdWUsIF9Lb1YsIF9Db21wYXJlLCBf QWxsb2M+CiAgOjplcXVhbF9yYW5nZShjb25zdCBfS2V5JiBfX2spIGNvbnN0CnsKICByZXR1cm4g cGFpcjxjb25zdF9pdGVyYXRvcixjb25zdF9pdGVyYXRvcj4obG93ZXJfYm91bmQoX19rKSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXJfYm91bmQoX19r KSk7Cn0KCmlubGluZSBpbnQKX19ibGFja19jb3VudChfUmJfdHJlZV9ub2RlX2Jhc2UqIF9fbm9k ZSwgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3Jvb3QpCnsKICBpZiAoX19ub2RlID09IDApCiAgICBy ZXR1cm4gMDsKICBpbnQgX19zdW0gPSAwOwogIGRvIHsKICAgIGlmIChfX25vZGUtPl9NX2NvbG9y ID09IF9TX3JiX3RyZWVfYmxhY2spCiAgICAgICsrX19zdW07CiAgICBpZiAoX19ub2RlID09IF9f cm9vdCkKICAgICAgYnJlYWs7CiAgICBfX25vZGUgPSBfX25vZGUtPl9NX3BhcmVudDsKICB9IHdo aWxlICgxKTsKICByZXR1cm4gX19zdW07Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBf VmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNz IF9BbGxvYz4KYm9vbCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxf QWxsb2M+OjpfX3JiX3ZlcmlmeSgpIGNvbnN0CnsKICBpZiAoX01fbm9kZV9jb3VudCA9PSAwIHx8 IGJlZ2luKCkgPT0gZW5kKCkpCiAgICByZXR1cm4gX01fbm9kZV9jb3VudCA9PSAwICYmIGJlZ2lu KCkgPT0gZW5kKCkgJiYKICAgICAgX01faGVhZGVyLT5fTV9sZWZ0ID09IF9NX2hlYWRlciAmJiBf TV9oZWFkZXItPl9NX3JpZ2h0ID09IF9NX2hlYWRlcjsKCiAgaW50IF9fbGVuID0gX19ibGFja19j b3VudChfTV9sZWZ0bW9zdCgpLCBfTV9yb290KCkpOwogIGZvciAoY29uc3RfaXRlcmF0b3IgX19p dCA9IGJlZ2luKCk7IF9faXQgIT0gZW5kKCk7ICsrX19pdCkgewogICAgX0xpbmtfdHlwZSBfX3gg PSAoX0xpbmtfdHlwZSkgX19pdC5fTV9ub2RlOwogICAgX0xpbmtfdHlwZSBfX0wgPSBfU19sZWZ0 KF9feCk7CiAgICBfTGlua190eXBlIF9fUiA9IF9TX3JpZ2h0KF9feCk7CgogICAgaWYgKF9feC0+ X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpCiAgICAgIGlmICgoX19MICYmIF9fTC0+X01fY29s b3IgPT0gX1NfcmJfdHJlZV9yZWQpIHx8CiAgICAgICAgICAoX19SICYmIF9fUi0+X01fY29sb3Ig PT0gX1NfcmJfdHJlZV9yZWQpKQogICAgICAgIHJldHVybiBmYWxzZTsKCiAgICBpZiAoX19MICYm IF9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfU19rZXkoX19MKSkpCiAgICAgIHJldHVybiBm YWxzZTsKICAgIGlmIChfX1IgJiYgX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fUiksIF9TX2tleShf X3gpKSkKICAgICAgcmV0dXJuIGZhbHNlOwoKICAgIGlmICghX19MICYmICFfX1IgJiYgX19ibGFj a19jb3VudChfX3gsIF9NX3Jvb3QoKSkgIT0gX19sZW4pCiAgICAgIHJldHVybiBmYWxzZTsKICB9 CgogIGlmIChfTV9sZWZ0bW9zdCgpICE9IF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWluaW11bShf TV9yb290KCkpKQogICAgcmV0dXJuIGZhbHNlOwogIGlmIChfTV9yaWdodG1vc3QoKSAhPSBfUmJf dHJlZV9ub2RlX2Jhc2U6Ol9TX21heGltdW0oX01fcm9vdCgpKSkKICAgIHJldHVybiBmYWxzZTsK CiAgcmV0dXJuIHRydWU7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUs IGNsYXNzIF9LZXlPZlZhbHVlLCBjbGFzcyBfQ29tcGFyZSwKICAgICAgICAgIGNsYXNzIF9BbGxv YyA9IGFsbG9jYXRvcjxfVmFsdWU+ID4Kc3RydWN0IHJiX3RyZWUgOiBwdWJsaWMgX1JiX3RyZWU8 X0tleSwgX1ZhbHVlLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz4KewogIHR5cGVkZWYg X1JiX3RyZWU8X0tleSwgX1ZhbHVlLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz4gX0Jh c2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5 cGU7CgogIHJiX3RyZWUoY29uc3QgX0NvbXBhcmUmIF9fY29tcCA9IF9Db21wYXJlKCksCiAgICAg ICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDog X0Jhc2UoX19jb21wLCBfX2EpIHt9CgogIH5yYl90cmVlKCkge30KfTsKCn0KIyA2MyAiL3Vzci9s b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9tYXAuaCIgMiAzCgojIDEgIi91c3IvbG9jYWwv aW5jbHVkZS9nKystdjMvYml0cy9zdGxfbWFwLmgiIDEgMwojIDYzICIvdXNyL2xvY2FsL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RsX21hcC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12 My9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzCiMgNjQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst djMvYml0cy9zdGxfbWFwLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSA9IGxlc3M8X0tleT4sCiAgICAgICAgICBj bGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8cGFpcjxjb25zdCBfS2V5LCBfVHA+ID4gPgpjbGFzcyBt YXAKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKcHVibGljOgoKICB0eXBlZGVmIF9LZXkga2V5 X3R5cGU7CiAgdHlwZWRlZiBfVHAgZGF0YV90eXBlOwogIHR5cGVkZWYgX1RwIG1hcHBlZF90eXBl OwogIHR5cGVkZWYgcGFpcjxjb25zdCBfS2V5LCBfVHA+IHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBf Q29tcGFyZSBrZXlfY29tcGFyZTsKCiAgY2xhc3MgdmFsdWVfY29tcGFyZQogICAgOiBwdWJsaWMg YmluYXJ5X2Z1bmN0aW9uPHZhbHVlX3R5cGUsIHZhbHVlX3R5cGUsIGJvb2w+IHsKICBmcmllbmQg Y2xhc3MgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz47CiAgcHJvdGVjdGVkIDoKICAgIF9D b21wYXJlIGNvbXA7CiAgICB2YWx1ZV9jb21wYXJlKF9Db21wYXJlIF9fYykgOiBjb21wKF9fYykg e30KICBwdWJsaWM6CiAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgdmFsdWVfdHlwZSYgX194LCBj b25zdCB2YWx1ZV90eXBlJiBfX3kpIGNvbnN0IHsKICAgICAgcmV0dXJuIGNvbXAoX194LmZpcnN0 LCBfX3kuZmlyc3QpOwogICAgfQogIH07Cgpwcml2YXRlOgogIHR5cGVkZWYgX1JiX3RyZWU8a2V5 X3R5cGUsIHZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgICBfU2VsZWN0MXN0PHZhbHVlX3R5 cGU+LCBrZXlfY29tcGFyZSwgX0FsbG9jPiBfUmVwX3R5cGU7CiAgX1JlcF90eXBlIF9NX3Q7CnB1 YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6cG9pbnRlciBwb2ludGVyOwogIHR5 cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CiAg dHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgdHlwZWRl ZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CiAg dHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6Oml0ZXJhdG9yIGl0ZXJhdG9yOwogIHR5cGVkZWYg dHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKICB0eXBl ZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6cmV2ZXJzZV9pdGVyYXRvciByZXZlcnNlX2l0ZXJhdG9y OwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNv bnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnNpemVf dHlwZSBzaXplX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmRpZmZlcmVuY2Vf dHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmFsbG9j YXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKCgogIG1hcCgpIDogX01fdChfQ29tcGFyZSgpLCBh bGxvY2F0b3JfdHlwZSgpKSB7fQogIGV4cGxpY2l0IG1hcChjb25zdCBfQ29tcGFyZSYgX19jb21w LAogICAgICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5 cGUoKSkKICAgIDogX01fdChfX2NvbXAsIF9fYSkge30KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1 dEl0ZXJhdG9yPgogIG1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf X2xhc3QpCiAgICA6IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsgX01f dC5pbnNlcnRfdW5pcXVlKF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9J bnB1dEl0ZXJhdG9yPgogIG1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRv ciBfX2xhc3QsIGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsCiAgICAgIGNvbnN0IGFsbG9jYXRvcl90 eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfTV90KF9fY29tcCwgX19hKSB7IF9N X3QuaW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QpOyB9CiAgbWFwKGNvbnN0IG1hcDxfS2V5 LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIDogX01fdChfX3guX01fdCkge30KCiAgbWFwPF9L ZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mCiAgb3BlcmF0b3I9KGNvbnN0IG1hcDxfS2V5LCBfVHAs IF9Db21wYXJlLCBfQWxsb2M+JiBfX3gpCiAgewogICAgX01fdCA9IF9feC5fTV90OwogICAgcmV0 dXJuICp0aGlzOwogIH0KCgoKICBrZXlfY29tcGFyZSBrZXlfY29tcCgpIGNvbnN0IHsgcmV0dXJu IF9NX3Qua2V5X2NvbXAoKTsgfQogIHZhbHVlX2NvbXBhcmUgdmFsdWVfY29tcCgpIGNvbnN0IHsg cmV0dXJuIHZhbHVlX2NvbXBhcmUoX01fdC5rZXlfY29tcCgpKTsgfQogIGFsbG9jYXRvcl90eXBl IGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfTV90LmdldF9hbGxvY2F0b3IoKTsgfQoK ICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQogIGNvbnN0X2l0ZXJh dG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5iZWdpbigpOyB9CiAgaXRlcmF0b3IgZW5k KCkgeyByZXR1cm4gX01fdC5lbmQoKTsgfQogIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsg cmV0dXJuIF9NX3QuZW5kKCk7IH0KICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIHsgcmV0dXJu IF9NX3QucmJlZ2luKCk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0 IHsgcmV0dXJuIF9NX3QucmJlZ2luKCk7IH0KICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSB7IHJl dHVybiBfTV90LnJlbmQoKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0 IHsgcmV0dXJuIF9NX3QucmVuZCgpOyB9CiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIF9N X3QuZW1wdHkoKTsgfQogIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fdC5zaXpl KCk7IH0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBfTV90Lm1heF9zaXpl KCk7IH0KICBfVHAmIG9wZXJhdG9yW10oY29uc3Qga2V5X3R5cGUmIF9faykgewogICAgaXRlcmF0 b3IgX19pID0gbG93ZXJfYm91bmQoX19rKTsKCiAgICBpZiAoX19pID09IGVuZCgpIHx8IGtleV9j b21wKCkoX19rLCAoKl9faSkuZmlyc3QpKQogICAgICBfX2kgPSBpbnNlcnQoX19pLCB2YWx1ZV90 eXBlKF9faywgX1RwKCkpKTsKICAgIHJldHVybiAoKl9faSkuc2Vjb25kOwogIH0KICB2b2lkIHN3 YXAobWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCkgeyBfTV90LnN3YXAoX194Ll9N X3QpOyB9CgoKCiAgcGFpcjxpdGVyYXRvcixib29sPiBpbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYg X194KQogICAgeyByZXR1cm4gX01fdC5pbnNlcnRfdW5pcXVlKF9feCk7IH0KICBpdGVyYXRvciBp bnNlcnQoaXRlcmF0b3IgcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKICAgIHsgcmV0 dXJuIF9NX3QuaW5zZXJ0X3VuaXF1ZShwb3NpdGlvbiwgX194KTsgfQogIHRlbXBsYXRlIDxjbGFz cyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2VydChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf SW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgIF9NX3QuaW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBf X2xhc3QpOwogIH0KCiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7IF9NX3QuZXJh c2UoX19wb3NpdGlvbik7IH0KICBzaXplX3R5cGUgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9feCkg eyByZXR1cm4gX01fdC5lcmFzZShfX3gpOyB9CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX2ZpcnN0 LCBpdGVyYXRvciBfX2xhc3QpCiAgICB7IF9NX3QuZXJhc2UoX19maXJzdCwgX19sYXN0KTsgfQog IHZvaWQgY2xlYXIoKSB7IF9NX3QuY2xlYXIoKTsgfQoKCgogIGl0ZXJhdG9yIGZpbmQoY29uc3Qg a2V5X3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5maW5kKF9feCk7IH0KICBjb25zdF9pdGVyYXRv ciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZmluZChfX3gp OyB9CiAgc2l6ZV90eXBlIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJl dHVybiBfTV90LmZpbmQoX194KSA9PSBfTV90LmVuZCgpID8gMCA6IDE7CiAgfQogIGl0ZXJhdG9y IGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHtyZXR1cm4gX01fdC5sb3dlcl9ib3Vu ZChfX3gpOyB9CiAgY29uc3RfaXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9f eCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsKICB9CiAgaXRlcmF0 b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkge3JldHVybiBfTV90LnVwcGVyX2Jv dW5kKF9feCk7IH0KICBjb25zdF9pdGVyYXRvciB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYg X194KSBjb25zdCB7CiAgICByZXR1cm4gX01fdC51cHBlcl9ib3VuZChfX3gpOwogIH0KCiAgcGFp cjxpdGVyYXRvcixpdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgewog ICAgcmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CiAgcGFpcjxjb25zdF9pdGVyYXRv cixjb25zdF9pdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Qg ewogICAgcmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CgogIHRlbXBsYXRlIDxjbGFz cyBfSzEsIGNsYXNzIF9UMSwgY2xhc3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5kIGJvb2wgb3Bl cmF0b3I9PSAoY29uc3QgbWFwPF9LMSwgX1QxLCBfQzEsIF9BMT4mLAogICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IG1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+Jik7CiAgdGVtcGxhdGUgPGNs YXNzIF9LMSwgY2xhc3MgX1QxLCBjbGFzcyBfQzEsIGNsYXNzIF9BMT4KICBmcmllbmQgYm9vbCBv cGVyYXRvcjwgKGNvbnN0IG1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+JiwKICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IG1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+Jik7Cn07Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxp bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBf X3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9B bGxvYz4mIF9feSkgewogIHJldHVybiBfX3guX01fdCA9PSBfX3kuX01fdDsKfQoKdGVtcGxhdGUg PGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5s aW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBf X3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0Fs bG9jPiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV90IDwgX195Ll9NX3Q7Cn0KCnRlbXBsYXRlIDxj bGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGlu ZSBib29sIG9wZXJhdG9yIT0oY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9f eCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0Fs bG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf S2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29s IG9wZXJhdG9yPihjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAg ICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9f eSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBf VHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPD0o Y29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0 dXJuICEoX195IDwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xh c3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBt YXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShf X3ggPCBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29t cGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZCBzd2FwKG1hcDxfS2V5LF9UcCxfQ29tcGFy ZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9B bGxvYz4mIF9feSkgewogIF9feC5zd2FwKF9feSk7Cn0KCn0KIyA2NSAiL3Vzci9sb2NhbC9pbmNs dWRlL2crKy12My9iaXRzL3N0ZF9tYXAuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr Ky12My9iaXRzL3N0bF9tdWx0aW1hcC5oIiAxIDMKIyA2MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr Ky12My9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12 My9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzCiMgNjQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst djMvYml0cy9zdGxfbXVsdGltYXAuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKdGVtcGxhdGUg PGNsYXNzIF9LZXksIGNsYXNzIF9UcCwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlID0gbGVzczxf S2V5PiwKICAgICAgICAgIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjxwYWlyPGNvbnN0IF9LZXks IF9UcD4gPiA+CmNsYXNzIG11bHRpbWFwOwoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9U cCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj b25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195 KTsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFz cyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxf Q29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aW1h cDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpOwoKdGVtcGxhdGUgPGNsYXNzIF9LZXks IGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KY2xhc3MgbXVsdGltYXAK ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwoKcHVibGljOgoKCgogIHR5cGVkZWYgX0tleSBrZXlf dHlwZTsKICB0eXBlZGVmIF9UcCBkYXRhX3R5cGU7CiAgdHlwZWRlZiBfVHAgbWFwcGVkX3R5cGU7 CiAgdHlwZWRlZiBwYWlyPGNvbnN0IF9LZXksIF9UcD4gdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9D b21wYXJlIGtleV9jb21wYXJlOwoKICBjbGFzcyB2YWx1ZV9jb21wYXJlIDogcHVibGljIGJpbmFy eV9mdW5jdGlvbjx2YWx1ZV90eXBlLCB2YWx1ZV90eXBlLCBib29sPiB7CiAgZnJpZW5kIGNsYXNz IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz47CiAgcHJvdGVjdGVkOgogICAgX0Nv bXBhcmUgY29tcDsKICAgIHZhbHVlX2NvbXBhcmUoX0NvbXBhcmUgX19jKSA6IGNvbXAoX19jKSB7 fQogIHB1YmxpYzoKICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCB2YWx1ZV90eXBlJiBfX3gsIGNv bnN0IHZhbHVlX3R5cGUmIF9feSkgY29uc3QgewogICAgICByZXR1cm4gY29tcChfX3guZmlyc3Qs IF9feS5maXJzdCk7CiAgICB9CiAgfTsKCnByaXZhdGU6CiAgdHlwZWRlZiBfUmJfdHJlZTxrZXlf dHlwZSwgdmFsdWVfdHlwZSwKICAgICAgICAgICAgICAgICAgX1NlbGVjdDFzdDx2YWx1ZV90eXBl Piwga2V5X2NvbXBhcmUsIF9BbGxvYz4gX1JlcF90eXBlOwogIF9SZXBfdHlwZSBfTV90OwpwdWJs aWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnBvaW50ZXIgcG9pbnRlcjsKICB0eXBl ZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOwogIHR5 cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5cGVkZWYg dHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwogIHR5 cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjppdGVyYXRvciBpdGVyYXRvcjsKICB0eXBlZGVmIHR5 cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRl ZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnJldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVyYXRvcjsK ICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBjb25z dF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpzaXplX3R5 cGUgc2l6ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpkaWZmZXJlbmNlX3R5 cGUgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjphbGxvY2F0 b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCgoKICBtdWx0aW1hcCgpIDogX01fdChfQ29tcGFyZSgp LCBhbGxvY2F0b3JfdHlwZSgpKSB7IH0KICBleHBsaWNpdCBtdWx0aW1hcChjb25zdCBfQ29tcGFy ZSYgX19jb21wLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2Eg PSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfTV90KF9fY29tcCwgX19hKSB7IH0KCiAgdGVtcGxh dGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIG11bHRpbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZmly c3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgIDogX01fdChfQ29tcGFyZSgpLCBhbGxvY2F0 b3JfdHlwZSgpKQogICAgeyBfTV90Lmluc2VydF9lcXVhbChfX2ZpcnN0LCBfX2xhc3QpOyB9Cgog IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICBtdWx0aW1hcChfSW5wdXRJdGVyYXRv ciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgY29uc3QgX0NvbXBh cmUmIF9fY29tcCwKICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2Nh dG9yX3R5cGUoKSkKICAgIDogX01fdChfX2NvbXAsIF9fYSkgeyBfTV90Lmluc2VydF9lcXVhbChf X2ZpcnN0LCBfX2xhc3QpOyB9CiAgbXVsdGltYXAoY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0Nv bXBhcmUsX0FsbG9jPiYgX194KSA6IF9NX3QoX194Ll9NX3QpIHsgfQoKICBtdWx0aW1hcDxfS2V5 LF9UcCxfQ29tcGFyZSxfQWxsb2M+JgogIG9wZXJhdG9yPShjb25zdCBtdWx0aW1hcDxfS2V5LF9U cCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIHsKICAgIF9NX3QgPSBfX3guX01fdDsKICAgIHJldHVy biAqdGhpczsKICB9CgoKCiAga2V5X2NvbXBhcmUga2V5X2NvbXAoKSBjb25zdCB7IHJldHVybiBf TV90LmtleV9jb21wKCk7IH0KICB2YWx1ZV9jb21wYXJlIHZhbHVlX2NvbXAoKSBjb25zdCB7IHJl dHVybiB2YWx1ZV9jb21wYXJlKF9NX3Qua2V5X2NvbXAoKSk7IH0KICBhbGxvY2F0b3JfdHlwZSBn ZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fdC5nZXRfYWxsb2NhdG9yKCk7IH0KCiAg aXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBfTV90LmJlZ2luKCk7IH0KICBjb25zdF9pdGVyYXRv ciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQogIGl0ZXJhdG9yIGVuZCgp IHsgcmV0dXJuIF9NX3QuZW5kKCk7IH0KICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJl dHVybiBfTV90LmVuZCgpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiBf TV90LnJiZWdpbigpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCB7 IHJldHVybiBfTV90LnJiZWdpbigpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1 cm4gX01fdC5yZW5kKCk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7 IHJldHVybiBfTV90LnJlbmQoKTsgfQogIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiBfTV90 LmVtcHR5KCk7IH0KICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3Quc2l6ZSgp OyB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gX01fdC5tYXhfc2l6ZSgp OyB9CiAgdm9pZCBzd2FwKG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCkg eyBfTV90LnN3YXAoX194Ll9NX3QpOyB9CgoKCiAgaXRlcmF0b3IgaW5zZXJ0KGNvbnN0IHZhbHVl X3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5pbnNlcnRfZXF1YWwoX194KTsgfQogIGl0ZXJhdG9y IGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpIHsKICAg IHJldHVybiBfTV90Lmluc2VydF9lcXVhbChfX3Bvc2l0aW9uLCBfX3gpOwogIH0KICB0ZW1wbGF0 ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBpbnNlcnQoX0lucHV0SXRlcmF0b3IgX19m aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICBfTV90Lmluc2VydF9lcXVhbChfX2Zp cnN0LCBfX2xhc3QpOwogIH0KICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsgX01f dC5lcmFzZShfX3Bvc2l0aW9uKTsgfQogIHNpemVfdHlwZSBlcmFzZShjb25zdCBrZXlfdHlwZSYg X194KSB7IHJldHVybiBfTV90LmVyYXNlKF9feCk7IH0KICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9f Zmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKICAgIHsgX01fdC5lcmFzZShfX2ZpcnN0LCBfX2xhc3Qp OyB9CiAgdm9pZCBjbGVhcigpIHsgX01fdC5jbGVhcigpOyB9CgoKCiAgaXRlcmF0b3IgZmluZChj b25zdCBrZXlfdHlwZSYgX194KSB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQogIGNvbnN0X2l0 ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgeyByZXR1cm4gX01fdC5maW5k KF9feCk7IH0KICBzaXplX3R5cGUgY291bnQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgeyBy ZXR1cm4gX01fdC5jb3VudChfX3gpOyB9CiAgaXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5 X3R5cGUmIF9feCkge3JldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9feCk7IH0KICBjb25zdF9pdGVy YXRvciBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4g X01fdC5sb3dlcl9ib3VuZChfX3gpOwogIH0KICBpdGVyYXRvciB1cHBlcl9ib3VuZChjb25zdCBr ZXlfdHlwZSYgX194KSB7cmV0dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsgfQogIGNvbnN0X2l0 ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVy biBfTV90LnVwcGVyX2JvdW5kKF9feCk7CiAgfQogICBwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPiBl cXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSB7CiAgICByZXR1cm4gX01fdC5lcXVhbF9y YW5nZShfX3gpOwogIH0KICBwYWlyPGNvbnN0X2l0ZXJhdG9yLGNvbnN0X2l0ZXJhdG9yPiBlcXVh bF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fdC5lcXVh bF9yYW5nZShfX3gpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9LMSwgY2xhc3MgX1QxLCBjbGFz cyBfQzEsIGNsYXNzIF9BMT4KICBmcmllbmQgYm9vbCBvcGVyYXRvcj09IChjb25zdCBtdWx0aW1h cDxfSzEsIF9UMSwgX0MxLCBfQTE+JiwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBt dWx0aW1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+Jik7CiAgdGVtcGxhdGUgPGNsYXNzIF9LMSwgY2xh c3MgX1QxLCBjbGFzcyBfQzEsIGNsYXNzIF9BMT4KICBmcmllbmQgYm9vbCBvcGVyYXRvcjwgKGNv bnN0IG11bHRpbWFwPF9LMSwgX1QxLCBfQzEsIF9BMT4mLAogICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgbXVsdGltYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYpOwp9OwoKdGVtcGxhdGUgPGNs YXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5l IGJvb2wgb3BlcmF0b3I9PShjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+ JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0Nv bXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV90ID09IF9feS5fTV90Owp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0Fs bG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBh cmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8X0tl eSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV90IDwgX195Ll9N X3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBj bGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgbXVsdGltYXA8X0tleSxf VHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11 bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA9 PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFy ZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgbXVsdGltYXA8X0tl eSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3Qg bXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9feSA8 IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUs IGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBtdWx0aW1hcDxfS2V5 LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg bXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX195 IDwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBh cmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBtdWx0aW1hcDxf S2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEo X194IDwgX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0Nv bXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgc3dhcChtdWx0aW1hcDxfS2V5LF9UcCxf Q29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgbXVsdGltYXA8X0tleSxfVHAs X0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgX194LnN3YXAoX195KTsKfQoKfQojIDY2ICIvdXNy L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX21hcC5oIiAyIDMKIyAzMiAiL3Vzci9sb2Nh bC9pbmNsdWRlL2crKy12My9tYXAiIDIgMwojIDQ1ICJzdGxpbmNsLmgiIDIKIyAxICIvdXNyL2xv Y2FsL2luY2x1ZGUvZysrLXYzL3NldCIgMSAzCiMgMzEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst djMvc2V0IiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zZXQuaCIg MSAzCiMgNjAgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc2V0LmgiIDMKCgoj IDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdHJlZS5oIiAxIDMKIyA2MyAi L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zZXQuaCIgMiAzCgojIDEgIi91c3Iv bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfc2V0LmgiIDEgMwojIDYzICIvdXNyL2xvY2Fs L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3NldC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl L2crKy12My9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzCiMgNjQgIi91c3IvbG9jYWwvaW5jbHVk ZS9nKystdjMvYml0cy9zdGxfc2V0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoKCnRlbXBsYXRl IDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSA9IGxlc3M8X0tleT4sCiAgICAgICAgICBjbGFz cyBfQWxsb2MgPSBhbGxvY2F0b3I8X0tleT4gPgpjbGFzcyBzZXQ7Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9 PShjb25zdCBzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAg ICAgICAgY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KTsKCnRlbXBsYXRlIDxj bGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVy YXRvcjwoY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAg ICAgICAgICAgY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KTsKCgp0ZW1wbGF0 ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KY2xhc3Mgc2V0CnsK CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CgpwdWJsaWM6CgogIHR5cGVkZWYgX0tleSBrZXlfdHlw ZTsKICB0eXBlZGVmIF9LZXkgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9Db21wYXJlIGtleV9jb21w YXJlOwogIHR5cGVkZWYgX0NvbXBhcmUgdmFsdWVfY29tcGFyZTsKcHJpdmF0ZToKICB0eXBlZGVm IF9SYl90cmVlPGtleV90eXBlLCB2YWx1ZV90eXBlLAogICAgICAgICAgICAgICAgICBfSWRlbnRp dHk8dmFsdWVfdHlwZT4sIGtleV9jb21wYXJlLCBfQWxsb2M+IF9SZXBfdHlwZTsKICBfUmVwX3R5 cGUgX01fdDsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9wb2lu dGVyIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3BvaW50ZXIg Y29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmVmZXJl bmNlIHJlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmVmZXJl bmNlIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3Rf aXRlcmF0b3IgaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X2l0 ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25z dF9yZXZlcnNlX2l0ZXJhdG9yIHJldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBf UmVwX3R5cGU6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsK ICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICB0eXBl ZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsK ICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5 cGU7CgoKCiAgc2V0KCkgOiBfTV90KF9Db21wYXJlKCksIGFsbG9jYXRvcl90eXBlKCkpIHt9CiAg ZXhwbGljaXQgc2V0KGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsCiAgICAgICAgICAgICAgIGNvbnN0 IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfTV90KF9fY29t cCwgX19hKSB7fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgc2V0KF9JbnB1 dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgIDogX01fdChfQ29t cGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKQogICAgeyBfTV90Lmluc2VydF91bmlxdWUoX19maXJz dCwgX19sYXN0KTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgc2V0KF9J bnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgY29uc3QgX0NvbXBh cmUmIF9fY29tcCwKICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90 eXBlKCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHsgX01fdC5pbnNlcnRfdW5pcXVlKF9fZmly c3QsIF9fbGFzdCk7IH0KCiAgc2V0KGNvbnN0IHNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9f eCkgOiBfTV90KF9feC5fTV90KSB7fQogIHNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIG9wZXJh dG9yPShjb25zdCBzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feCkKICB7CiAgICBfTV90 ID0gX194Ll9NX3Q7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCgogIGtleV9jb21wYXJlIGtleV9j b21wKCkgY29uc3QgeyByZXR1cm4gX01fdC5rZXlfY29tcCgpOyB9CiAgdmFsdWVfY29tcGFyZSB2 YWx1ZV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01fdC5rZXlfY29tcCgpOyB9CiAgYWxsb2NhdG9y X3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZ2V0X2FsbG9jYXRvcigp OyB9CgogIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5iZWdpbigpOyB9CiAg aXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5lbmQoKTsgfQogIHJldmVyc2VfaXRl cmF0b3IgcmJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQogIHJldmVyc2Vf aXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX3QucmVuZCgpOyB9CiAgYm9vbCBlbXB0 eSgpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZW1wdHkoKTsgfQogIHNpemVfdHlwZSBzaXplKCkgY29u c3QgeyByZXR1cm4gX01fdC5zaXplKCk7IH0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7 IHJldHVybiBfTV90Lm1heF9zaXplKCk7IH0KICB2b2lkIHN3YXAoc2V0PF9LZXksX0NvbXBhcmUs X0FsbG9jPiYgX194KSB7IF9NX3Quc3dhcChfX3guX01fdCk7IH0KCgogIHBhaXI8aXRlcmF0b3Is Ym9vbD4gaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgewogICAgcGFpcjx0eXBlbmFtZSBf UmVwX3R5cGU6Oml0ZXJhdG9yLCBib29sPiBfX3AgPSBfTV90Lmluc2VydF91bmlxdWUoX194KTsK ICAgIHJldHVybiBwYWlyPGl0ZXJhdG9yLCBib29sPihfX3AuZmlyc3QsIF9fcC5zZWNvbmQpOwog IH0KICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlw ZSYgX194KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6aXRlcmF0b3IgX1JlcF9p dGVyYXRvcjsKICAgIHJldHVybiBfTV90Lmluc2VydF91bmlxdWUoKF9SZXBfaXRlcmF0b3ImKV9f cG9zaXRpb24sIF9feCk7CiAgfQogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2 b2lkIGluc2VydChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3Qp IHsKICAgIF9NX3QuaW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QpOwogIH0KICB2b2lkIGVy YXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBl OjppdGVyYXRvciBfUmVwX2l0ZXJhdG9yOwogICAgX01fdC5lcmFzZSgoX1JlcF9pdGVyYXRvciYp X19wb3NpdGlvbik7CiAgfQogIHNpemVfdHlwZSBlcmFzZShjb25zdCBrZXlfdHlwZSYgX194KSB7 CiAgICByZXR1cm4gX01fdC5lcmFzZShfX3gpOwogIH0KICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9f Zmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6 Oml0ZXJhdG9yIF9SZXBfaXRlcmF0b3I7CiAgICBfTV90LmVyYXNlKChfUmVwX2l0ZXJhdG9yJilf X2ZpcnN0LCAoX1JlcF9pdGVyYXRvciYpX19sYXN0KTsKICB9CiAgdm9pZCBjbGVhcigpIHsgX01f dC5jbGVhcigpOyB9CgoKCiAgc2l6ZV90eXBlIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX3gpIGNv bnN0IHsKICAgIHJldHVybiBfTV90LmZpbmQoX194KSA9PSBfTV90LmVuZCgpID8gMCA6IDE7CiAg fQoKCgogIGl0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5m aW5kKF9feCk7IH0KICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNv bnN0IHsgcmV0dXJuIF9NX3QuZmluZChfX3gpOyB9CiAgaXRlcmF0b3IgbG93ZXJfYm91bmQoY29u c3Qga2V5X3R5cGUmIF9feCkgewogICAgcmV0dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsKICB9 CiAgY29uc3RfaXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Qg ewogICAgcmV0dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsKICB9CiAgaXRlcmF0b3IgdXBwZXJf Ym91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgewogICAgcmV0dXJuIF9NX3QudXBwZXJfYm91bmQo X194KTsKICB9CiAgY29uc3RfaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9f eCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsKICB9CiAgcGFpcjxp dGVyYXRvcixpdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgewogICAg cmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CiAgcGFpcjxjb25zdF9pdGVyYXRvcixj b25zdF9pdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Qgewog ICAgcmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CiMgMjE5ICIvdXNyL2xvY2FsL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX3NldC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9LMSwgY2xh c3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PSAoY29uc3Qgc2V0PF9L MSxfQzEsX0ExPiYsIGNvbnN0IHNldDxfSzEsX0MxLF9BMT4mKTsKICB0ZW1wbGF0ZSA8Y2xhc3Mg X0sxLCBjbGFzcyBfQzEsIGNsYXNzIF9BMT4KICBmcmllbmQgYm9vbCBvcGVyYXRvcjwgKGNvbnN0 IHNldDxfSzEsX0MxLF9BMT4mLCBjb25zdCBzZXQ8X0sxLF9DMSxfQTE+Jik7Cn07Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wg b3BlcmF0b3I9PShjb25zdCBzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAg ICAgICAgICAgICAgICAgY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAg cmV0dXJuIF9feC5fTV90ID09IF9feS5fTV90Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xh c3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHNl dDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3guX01fdCA8IF9f eS5fTV90Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9B bGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBzZXQ8X0tleSxfQ29tcGFyZSxfQWxs b2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUs X0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRv cj4oY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAg ICAgICAgY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9f eSA8IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBf QWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0Fs bG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNldDxfS2V5LF9Db21wYXJl LF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRv cj49KGNvbnN0IHNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4g IShfX3ggPCBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNs YXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgc3dhcChzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBf X3gsCiAgICAgICAgICAgICAgICAgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAg X194LnN3YXAoX195KTsKfQoKfQojIDY1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RkX3NldC5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX211 bHRpc2V0LmgiIDEgMwojIDYzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX211 bHRpc2V0LmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvY29uY2VwdF9j aGVjay5oIiAxIDMKIyA2NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9tdWx0 aXNldC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xh c3MgX0NvbXBhcmUgPSBsZXNzPF9LZXk+LAogICAgICAgICAgY2xhc3MgX0FsbG9jID0gYWxsb2Nh dG9yPF9LZXk+ID4KY2xhc3MgbXVsdGlzZXQ7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3Mg X0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBtdWx0 aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feSk7Cgp0ZW1wbGF0ZSA8Y2xh c3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0 b3I8KGNvbnN0IG11bHRpc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAg ICAgICAgICAgICAgY29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpOwoK dGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmNsYXNz IG11bHRpc2V0CnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgpwdWJsaWM6CgoKCiAgdHlwZWRl ZiBfS2V5IGtleV90eXBlOwogIHR5cGVkZWYgX0tleSB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Nv bXBhcmUga2V5X2NvbXBhcmU7CiAgdHlwZWRlZiBfQ29tcGFyZSB2YWx1ZV9jb21wYXJlOwpwcml2 YXRlOgogIHR5cGVkZWYgX1JiX3RyZWU8a2V5X3R5cGUsIHZhbHVlX3R5cGUsCiAgICAgICAgICAg ICAgICAgIF9JZGVudGl0eTx2YWx1ZV90eXBlPiwga2V5X2NvbXBhcmUsIF9BbGxvYz4gX1JlcF90 eXBlOwogIF9SZXBfdHlwZSBfTV90OwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5 cGU6OmNvbnN0X3BvaW50ZXIgcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6 Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBl Ojpjb25zdF9yZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBl Ojpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1Jl cF90eXBlOjpjb25zdF9pdGVyYXRvciBpdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBf dHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBf UmVwX3R5cGU6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBl ZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBjb25zdF9yZXZl cnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpzaXplX3R5cGUgc2l6 ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpkaWZmZXJlbmNlX3R5cGUgZGlm ZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjphbGxvY2F0b3JfdHlw ZSBhbGxvY2F0b3JfdHlwZTsKCgoKICBtdWx0aXNldCgpIDogX01fdChfQ29tcGFyZSgpLCBhbGxv Y2F0b3JfdHlwZSgpKSB7fQogIGV4cGxpY2l0IG11bHRpc2V0KGNvbnN0IF9Db21wYXJlJiBfX2Nv bXAsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9j YXRvcl90eXBlKCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHt9CgogIHRlbXBsYXRlIDxjbGFz cyBfSW5wdXRJdGVyYXRvcj4KICBtdWx0aXNldChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5w dXRJdGVyYXRvciBfX2xhc3QpCiAgICA6IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUo KSkKICAgIHsgX01fdC5pbnNlcnRfZXF1YWwoX19maXJzdCwgX19sYXN0KTsgfQoKICB0ZW1wbGF0 ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgbXVsdGlzZXQoX0lucHV0SXRlcmF0b3IgX19maXJz dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgIGNvbnN0IF9Db21wYXJlJiBfX2Nv bXAsCiAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBl KCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHsgX01fdC5pbnNlcnRfZXF1YWwoX19maXJzdCwg X19sYXN0KTsgfQoKICBtdWx0aXNldChjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxv Yz4mIF9feCkgOiBfTV90KF9feC5fTV90KSB7fQoKICBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9B bGxvYz4mCiAgb3BlcmF0b3I9KGNvbnN0IG11bHRpc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYg X194KSB7CiAgICBfTV90ID0gX194Ll9NX3Q7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCgogIGtl eV9jb21wYXJlIGtleV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01fdC5rZXlfY29tcCgpOyB9CiAg dmFsdWVfY29tcGFyZSB2YWx1ZV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01fdC5rZXlfY29tcCgp OyB9CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX3Qu Z2V0X2FsbG9jYXRvcigpOyB9CgogIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01f dC5iZWdpbigpOyB9CiAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5lbmQoKTsg fQogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5yYmVnaW4o KTsgfQogIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX3QucmVuZCgp OyB9CiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZW1wdHkoKTsgfQogIHNpemVf dHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fdC5zaXplKCk7IH0KICBzaXplX3R5cGUgbWF4 X3NpemUoKSBjb25zdCB7IHJldHVybiBfTV90Lm1heF9zaXplKCk7IH0KICB2b2lkIHN3YXAobXVs dGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIHsgX01fdC5zd2FwKF9feC5fTV90KTsg fQoKCiAgaXRlcmF0b3IgaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgewogICAgcmV0dXJu IF9NX3QuaW5zZXJ0X2VxdWFsKF9feCk7CiAgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBf X3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUg X1JlcF90eXBlOjppdGVyYXRvciBfUmVwX2l0ZXJhdG9yOwogICAgcmV0dXJuIF9NX3QuaW5zZXJ0 X2VxdWFsKChfUmVwX2l0ZXJhdG9yJilfX3Bvc2l0aW9uLCBfX3gpOwogIH0KCiAgdGVtcGxhdGUg PGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmly c3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgX01fdC5pbnNlcnRfZXF1YWwoX19maXJz dCwgX19sYXN0KTsKICB9CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7CiAgICB0 eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6aXRlcmF0b3IgX1JlcF9pdGVyYXRvcjsKICAgIF9N X3QuZXJhc2UoKF9SZXBfaXRlcmF0b3ImKV9fcG9zaXRpb24pOwogIH0KICBzaXplX3R5cGUgZXJh c2UoY29uc3Qga2V5X3R5cGUmIF9feCkgewogICAgcmV0dXJuIF9NX3QuZXJhc2UoX194KTsKICB9 CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpIHsKICAgIHR5 cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjppdGVyYXRvciBfUmVwX2l0ZXJhdG9yOwogICAgX01f dC5lcmFzZSgoX1JlcF9pdGVyYXRvciYpX19maXJzdCwgKF9SZXBfaXRlcmF0b3ImKV9fbGFzdCk7 CiAgfQogIHZvaWQgY2xlYXIoKSB7IF9NX3QuY2xlYXIoKTsgfQoKCgogIHNpemVfdHlwZSBjb3Vu dChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmNvdW50KF9feCk7IH0K CgoKICBpdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QuZmlu ZChfX3gpOyB9CiAgY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25z dCB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQogIGl0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0 IGtleV90eXBlJiBfX3gpIHsKICAgIHJldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9feCk7CiAgfQog IGNvbnN0X2l0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsK ICAgIHJldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9feCk7CiAgfQogIGl0ZXJhdG9yIHVwcGVyX2Jv dW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHsKICAgIHJldHVybiBfTV90LnVwcGVyX2JvdW5kKF9f eCk7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gp IGNvbnN0IHsKICAgIHJldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7CiAgfQogIHBhaXI8aXRl cmF0b3IsaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIHsKICAgIHJl dHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7CiAgfQogIHBhaXI8Y29uc3RfaXRlcmF0b3IsY29u c3RfaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAg IHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7CiAgfQojIDIyMCAiL3Vzci9sb2NhbC9pbmNs dWRlL2crKy12My9iaXRzL3N0bF9tdWx0aXNldC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9LMSwg Y2xhc3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PSAoY29uc3QgbXVs dGlzZXQ8X0sxLF9DMSxfQTE+JiwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0 aXNldDxfSzEsX0MxLF9BMT4mKTsKICB0ZW1wbGF0ZSA8Y2xhc3MgX0sxLCBjbGFzcyBfQzEsIGNs YXNzIF9BMT4KICBmcmllbmQgYm9vbCBvcGVyYXRvcjwgKGNvbnN0IG11bHRpc2V0PF9LMSxfQzEs X0ExPiYsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aXNldDxfSzEsX0MxLF9B MT4mKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0Fs bG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IG11bHRpc2V0PF9LZXksX0NvbXBhcmUs X0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpc2V0PF9LZXks X0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV90ID09IF9feS5fTV90Owp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5s aW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG11bHRpc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYg X194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxf QWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX3QgPCBfX3kuX01fdDsKfQoKdGVtcGxhdGUg PGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9w ZXJhdG9yIT0oY29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBf X3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNs YXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBt dWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IG11bHRpc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9f eSA8IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBf QWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFy ZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGlzZXQ8X0tl eSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJv b2wgb3BlcmF0b3I+PShjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCwK ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxv Yz4mIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5 LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZCBzd2FwKG11bHRpc2V0 PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgIG11bHRpc2V0PF9L ZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgX194LnN3YXAoX195KTsKfQoKfQojIDY2ICIv dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3NldC5oIiAyIDMKIyAzMiAiL3Vzci9s b2NhbC9pbmNsdWRlL2crKy12My9zZXQiIDIgMwojIDQ2ICJzdGxpbmNsLmgiIDIKIyAxICIvdXNy L2xvY2FsL2luY2x1ZGUvZysrLXYzL3ZlY3RvciIgMSAzCiMgMzEgIi91c3IvbG9jYWwvaW5jbHVk ZS9nKystdjMvdmVjdG9yIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0 ZF92ZWN0b3IuaCIgMSAzCiMgNjAgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf dmVjdG9yLmgiIDMKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhj ZXB0LmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNl cHQuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uX2RlZmluZXMu aCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5o IiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZv aWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhy b3dfYmFkX2Nhc3Qodm9pZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoK ICB2b2lkCiAgX190aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAg X190aHJvd19kb21haW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3df aW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5n dGhfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3Jhbmdl KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3Qg Y2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19z KTsKCiAgdm9pZAogIF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAg dm9pZAogIF9fdGhyb3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lk CiAgX190aHJvd19pb3NfZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgNjIgIi91c3IvbG9j YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmVjdG9yLmgiIDIgMwojIDEgIi91c3IvbG9jYWwv aW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMSAzCiMgNjMgIi91c3IvbG9jYWwv aW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmVjdG9yLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5j bHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMSAzCiMgNjQgIi91c3IvbG9jYWwvaW5jbHVk ZS9nKystdjMvYml0cy9zdGRfdmVjdG9yLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n KystdjMvYml0cy9zdGxfY29uc3RydWN0LmgiIDEgMwojIDY1ICIvdXNyL2xvY2FsL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMSAzCiMgNjYgIi91c3IvbG9jYWwvaW5jbHVk ZS9nKystdjMvYml0cy9zdGRfdmVjdG9yLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n KystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDEgMwojIDYzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i aXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDEgMwojIDY0ICIvdXNyL2xvY2FsL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUv ZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9n KystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12 My9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12 My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Ro cm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9p ZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3df YmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNo YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3Mp OwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7Cgog IHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAg X190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3df cnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9l cnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihj b25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3Qg Y2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9f cyk7Cn0KIyA2NSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIg MiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2NvbmNlcHRfY2hlY2suaCIg MSAzCiMgNjYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDIg MwoKbmFtZXNwYWNlIHN0ZAp7CiMgNzcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z dGxfdmVjdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvciwgYm9v bCBfSXNTdGF0aWM+CmNsYXNzIF9WZWN0b3JfYWxsb2NfYmFzZSB7CnB1YmxpYzoKICB0eXBlZGVm IHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUK ICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3Io KSBjb25zdCB7IHJldHVybiBfTV9kYXRhX2FsbG9jYXRvcjsgfQoKICBfVmVjdG9yX2FsbG9jX2Jh c2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgIDogX01fZGF0YV9hbGxvY2F0b3IoX19h KSwgX01fc3RhcnQoMCksIF9NX2ZpbmlzaCgwKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkKICB7fQoK cHJvdGVjdGVkOgogIGFsbG9jYXRvcl90eXBlIF9NX2RhdGFfYWxsb2NhdG9yOwogIF9UcCogX01f c3RhcnQ7CiAgX1RwKiBfTV9maW5pc2g7CiAgX1RwKiBfTV9lbmRfb2Zfc3RvcmFnZTsKCiAgX1Rw KiBfTV9hbGxvY2F0ZShzaXplX3QgX19uKQogICAgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3Iu YWxsb2NhdGUoX19uKTsgfQogIHZvaWQgX01fZGVhbGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9f bikKICAgIHsgaWYgKF9fcCkgX01fZGF0YV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfX3AsIF9fbik7 IH0KfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvcj4KY2xhc3MgX1Zl Y3Rvcl9hbGxvY19iYXNlPF9UcCwgX0FsbG9jYXRvciwgdHJ1ZT4gewpwdWJsaWM6CiAgdHlwZWRl ZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBl CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9y KCkgY29uc3QgeyByZXR1cm4gYWxsb2NhdG9yX3R5cGUoKTsgfQoKICBfVmVjdG9yX2FsbG9jX2Jh c2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmKQogICAgOiBfTV9zdGFydCgwKSwgX01fZmluaXNoKDAp LCBfTV9lbmRfb2Zfc3RvcmFnZSgwKQogIHt9Cgpwcm90ZWN0ZWQ6CiAgX1RwKiBfTV9zdGFydDsK ICBfVHAqIF9NX2ZpbmlzaDsKICBfVHAqIF9NX2VuZF9vZl9zdG9yYWdlOwoKICB0eXBlZGVmIHR5 cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6X0FsbG9jX3R5cGUgX0FsbG9j X3R5cGU7CiAgX1RwKiBfTV9hbGxvY2F0ZShzaXplX3QgX19uKQogICAgeyByZXR1cm4gX0FsbG9j X3R5cGU6OmFsbG9jYXRlKF9fbik7IH0KICB2b2lkIF9NX2RlYWxsb2NhdGUoX1RwKiBfX3AsIHNp emVfdCBfX24pCiAgICB7IF9BbGxvY190eXBlOjpkZWFsbG9jYXRlKF9fcCwgX19uKTt9Cn07Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfVmVjdG9yX2Jhc2UKICA6 IHB1YmxpYyBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+ CnsKICB0eXBlZGVmIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxvYywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2Vs ZXNzPgogICAgICAgICAgX0Jhc2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9y X3R5cGUgYWxsb2NhdG9yX3R5cGU7CgogIF9WZWN0b3JfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlw ZSYgX19hKSA6IF9CYXNlKF9fYSkge30KICBfVmVjdG9yX2Jhc2Uoc2l6ZV90IF9fbiwgY29uc3Qg YWxsb2NhdG9yX3R5cGUmIF9fYSkgOiBfQmFzZShfX2EpIHsKICAgIF9NX3N0YXJ0ID0gX01fYWxs b2NhdGUoX19uKTsKICAgIF9NX2ZpbmlzaCA9IF9NX3N0YXJ0OwogICAgX01fZW5kX29mX3N0b3Jh Z2UgPSBfTV9zdGFydCArIF9fbjsKICB9CgogIH5fVmVjdG9yX2Jhc2UoKSB7IF9NX2RlYWxsb2Nh dGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOyB9Cn07CgoKdGVtcGxh dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9yPF9UcD4gPgpjbGFzcyB2ZWN0 b3IgOiBwcm90ZWN0ZWQgX1ZlY3Rvcl9iYXNlPF9UcCwgX0FsbG9jPgp7CgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgpwcml2YXRlOgogIHR5 cGVkZWYgX1ZlY3Rvcl9iYXNlPF9UcCwgX0FsbG9jPiBfQmFzZTsKICB0eXBlZGVmIHZlY3Rvcjxf VHAsIF9BbGxvYz4gdmVjdG9yX3R5cGU7CnB1YmxpYzoKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBl OwogIHR5cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5 cGUqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBfX25vcm1hbF9pdGVyYXRvcjxwb2ludGVyLCB2 ZWN0b3JfdHlwZT4gaXRlcmF0b3I7CiAgdHlwZWRlZiBfX25vcm1hbF9pdGVyYXRvcjxjb25zdF9w b2ludGVyLCB2ZWN0b3JfdHlwZT4gY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRlZiB2YWx1ZV90eXBl JiByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlJiBjb25zdF9yZWZlcmVuY2U7 CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVu Y2VfdHlwZTsKCiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2Nh dG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJu IF9CYXNlOjpnZXRfYWxsb2NhdG9yKCk7IH0KCiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNv bnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgcmV2ZXJzZV9p dGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCnByb3RlY3RlZDoKICB1c2luZyBf QmFzZTo6X01fYWxsb2NhdGU7CiAgdXNpbmcgX0Jhc2U6Ol9NX2RlYWxsb2NhdGU7CiAgdXNpbmcg X0Jhc2U6Ol9NX3N0YXJ0OwogIHVzaW5nIF9CYXNlOjpfTV9maW5pc2g7CiAgdXNpbmcgX0Jhc2U6 Ol9NX2VuZF9vZl9zdG9yYWdlOwoKcHJvdGVjdGVkOgogIHZvaWQgX01faW5zZXJ0X2F1eChpdGVy YXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCk7CiAgdm9pZCBfTV9pbnNlcnRfYXV4KGl0 ZXJhdG9yIF9fcG9zaXRpb24pOwoKcHVibGljOgogIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4g aXRlcmF0b3IgKF9NX3N0YXJ0KTsgfQogIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QKICAg IHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yIChfTV9zdGFydCk7IH0KICBpdGVyYXRvciBlbmQoKSB7 IHJldHVybiBpdGVyYXRvciAoX01fZmluaXNoKTsgfQogIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNv bnN0IHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yIChfTV9maW5pc2gpOyB9CgogIHJldmVyc2VfaXRl cmF0b3IgcmJlZ2luKCkKICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CiAg Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdAogICAgeyByZXR1cm4gY29uc3Rf cmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKQogICAg eyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQogIGNvbnN0X3JldmVyc2VfaXRl cmF0b3IgcmVuZCgpIGNvbnN0CiAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJl Z2luKCkpOyB9CgogIHNpemVfdHlwZSBzaXplKCkgY29uc3QKICAgIHsgcmV0dXJuIHNpemVfdHlw ZShlbmQoKSAtIGJlZ2luKCkpOyB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QKICAgIHsg cmV0dXJuIHNpemVfdHlwZSgtMSkgLyBzaXplb2YoX1RwKTsgfQogIHNpemVfdHlwZSBjYXBhY2l0 eSgpIGNvbnN0CiAgICB7IHJldHVybiBzaXplX3R5cGUoY29uc3RfaXRlcmF0b3IoX01fZW5kX29m X3N0b3JhZ2UpIC0gYmVnaW4oKSk7IH0KICBib29sIGVtcHR5KCkgY29uc3QKICAgIHsgcmV0dXJu IGJlZ2luKCkgPT0gZW5kKCk7IH0KCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9f bikgeyByZXR1cm4gKihiZWdpbigpICsgX19uKTsgfQogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRv cltdKHNpemVfdHlwZSBfX24pIGNvbnN0IHsgcmV0dXJuICooYmVnaW4oKSArIF9fbik7IH0KCiAg dm9pZCBfTV9yYW5nZV9jaGVjayhzaXplX3R5cGUgX19uKSBjb25zdCB7CiAgICBpZiAoX19uID49 IHRoaXMtPnNpemUoKSkKICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoInZlY3RvciIpOwogIH0K CiAgcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pCiAgICB7IF9NX3JhbmdlX2NoZWNrKF9fbik7 IHJldHVybiAoKnRoaXMpW19fbl07IH0KICBjb25zdF9yZWZlcmVuY2UgYXQoc2l6ZV90eXBlIF9f bikgY29uc3QKICAgIHsgX01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsg fQoKICBleHBsaWNpdCB2ZWN0b3IoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRv cl90eXBlKCkpCiAgICA6IF9CYXNlKF9fYSkge30KCiAgdmVjdG9yKHNpemVfdHlwZSBfX24sIGNv bnN0IF9UcCYgX192YWx1ZSwKICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFs bG9jYXRvcl90eXBlKCkpCiAgICA6IF9CYXNlKF9fbiwgX19hKQogICAgeyBfTV9maW5pc2ggPSB1 bmluaXRpYWxpemVkX2ZpbGxfbihfTV9zdGFydCwgX19uLCBfX3ZhbHVlKTsgfQoKICBleHBsaWNp dCB2ZWN0b3Ioc2l6ZV90eXBlIF9fbikKICAgIDogX0Jhc2UoX19uLCBhbGxvY2F0b3JfdHlwZSgp KQogICAgeyBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9zdGFydCwgX19uLCBf VHAoKSk7IH0KCiAgdmVjdG9yKGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCkKICAgIDog X0Jhc2UoX194LnNpemUoKSwgX194LmdldF9hbGxvY2F0b3IoKSkKICAgIHsgX01fZmluaXNoID0g dW5pbml0aWFsaXplZF9jb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCksIF9NX3N0YXJ0KTsgfQoK CiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZlY3RvcihfSW5wdXRJdGVyYXRv ciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgIGNvbnN0IGFsbG9jYXRv cl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKSA6IF9CYXNlKF9fYSkgewogICAgdHlwZWRl ZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdy YWw7CiAgICBfTV9pbml0aWFsaXplX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsK ICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICB2b2lkIF9NX2luaXRpYWxpemVfYXV4 KF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWx1ZSwgX190cnVlX3R5cGUpIHsKICAgIF9NX3N0 YXJ0ID0gX01fYWxsb2NhdGUoX19uKTsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQg KyBfX247CiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9zdGFydCwgX19u LCBfX3ZhbHVlKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lk IF9NX2luaXRpYWxpemVfYXV4KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9y IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogICAgX01f cmFuZ2VfaW5pdGlhbGl6ZShfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19m aXJzdCkpOwogIH0KCiAgfnZlY3RvcigpIHsgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsg fQoKICB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBvcGVyYXRvcj0oY29uc3QgdmVjdG9yPF9UcCwgX0Fs bG9jPiYgX194KTsKICB2b2lkIHJlc2VydmUoc2l6ZV90eXBlIF9fbikgewogICAgaWYgKGNhcGFj aXR5KCkgPCBfX24pIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7 CiAgICAgIHBvaW50ZXIgX190bXAgPSBfTV9hbGxvY2F0ZV9hbmRfY29weShfX24sIF9NX3N0YXJ0 LCBfTV9maW5pc2gpOwogICAgICBkZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAgICBf TV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAg ICAgX01fc3RhcnQgPSBfX3RtcDsKICAgICAgX01fZmluaXNoID0gX190bXAgKyBfX29sZF9zaXpl OwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwogICAgfQogIH0KCgoK CgoKICB2b2lkIGFzc2lnbihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsKSB7IF9NX2Zp bGxfYXNzaWduKF9fbiwgX192YWwpOyB9CiAgdm9pZCBfTV9maWxsX2Fzc2lnbihzaXplX3R5cGUg X19uLCBjb25zdCBfVHAmIF9fdmFsKTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y PgogIHZvaWQgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f bGFzdCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46 Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX19maXJzdCwgX19s YXN0LCBfSW50ZWdyYWwoKSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9p ZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVl X3R5cGUpCiAgICB7IF9NX2ZpbGxfYXNzaWduKChzaXplX3R5cGUpIF9fbiwgKF9UcCkgX192YWwp OyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPgogIHZvaWQgX01fYXNzaWduX2Rpc3Bh dGNoKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkK ICAgIHsgX01fYXNzaWduX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnko X19maXJzdCkpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9N X2Fzc2lnbl9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOwoKICB0ZW1wbGF0ZSA8 Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0ZvcndhcmRJdGVy YXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg ICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpOwoKICByZWZlcmVuY2UgZnJvbnQoKSB7IHJldHVybiAq YmVnaW4oKTsgfQogIGNvbnN0X3JlZmVyZW5jZSBmcm9udCgpIGNvbnN0IHsgcmV0dXJuICpiZWdp bigpOyB9CiAgcmVmZXJlbmNlIGJhY2soKSB7IHJldHVybiAqKGVuZCgpIC0gMSk7IH0KICBjb25z dF9yZWZlcmVuY2UgYmFjaygpIGNvbnN0IHsgcmV0dXJuICooZW5kKCkgLSAxKTsgfQoKICB2b2lk IHB1c2hfYmFjayhjb25zdCBfVHAmIF9feCkgewogICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRf b2Zfc3RvcmFnZSkgewogICAgICBjb25zdHJ1Y3QoX01fZmluaXNoLCBfX3gpOwogICAgICArK19N X2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChlbmQoKSwgX194KTsK ICB9CiAgdm9pZCBwdXNoX2JhY2soKSB7CiAgICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9z dG9yYWdlKSB7CiAgICAgIGNvbnN0cnVjdChfTV9maW5pc2gpOwogICAgICArK19NX2ZpbmlzaDsK ICAgIH0KICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChlbmQoKSk7CiAgfQogIHZvaWQgc3dh cCh2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpIHsKICAgIHN0ZDo6c3dhcChfTV9zdGFydCwgX194 Ll9NX3N0YXJ0KTsKICAgIHN0ZDo6c3dhcChfTV9maW5pc2gsIF9feC5fTV9maW5pc2gpOwogICAg c3RkOjpzd2FwKF9NX2VuZF9vZl9zdG9yYWdlLCBfX3guX01fZW5kX29mX3N0b3JhZ2UpOwogIH0K CiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYgX194KSB7 CiAgICBzaXplX3R5cGUgX19uID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7CiAgICBpZiAoX01fZmlu aXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRpb24gPT0gZW5kKCkpIHsKICAgICAg Y29uc3RydWN0KF9NX2ZpbmlzaCwgX194KTsKICAgICAgKytfTV9maW5pc2g7CiAgICB9CiAgICBl bHNlCiAgICAgIF9NX2luc2VydF9hdXgoaXRlcmF0b3IoX19wb3NpdGlvbiksIF9feCk7CiAgICBy ZXR1cm4gYmVnaW4oKSArIF9fbjsKICB9CiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9z aXRpb24pIHsKICAgIHNpemVfdHlwZSBfX24gPSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsKICAgIGlm IChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UgJiYgX19wb3NpdGlvbiA9PSBlbmQoKSkg ewogICAgICBjb25zdHJ1Y3QoX01fZmluaXNoKTsKICAgICAgKytfTV9maW5pc2g7CiAgICB9CiAg ICBlbHNlCiAgICAgIF9NX2luc2VydF9hdXgoaXRlcmF0b3IoX19wb3NpdGlvbikpOwogICAgcmV0 dXJuIGJlZ2luKCkgKyBfX247CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+ CiAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wb3MsIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J bnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxf SW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICBfTV9pbnNlcnRfZGlzcGF0 Y2goX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogIH0KCiAgdGVtcGxhdGUg PGNsYXNzIF9JbnRlZ2VyPgogIHZvaWQgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9z LCBfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsLAogICAgICAgICAgICAgICAgICAgICAgICAg IF9fdHJ1ZV90eXBlKQogICAgeyBfTV9maWxsX2luc2VydChfX3BvcywgKHNpemVfdHlwZSkgX19u LCAoX1RwKSBfX3ZhbCk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZv aWQgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAg ICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsKICAgIF9NX3JhbmdlX2luc2Vy dChfX3BvcywgX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsK ICB9CgogIHZvaWQgaW5zZXJ0IChpdGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3Qg X1RwJiBfX3gpCiAgICB7IF9NX2ZpbGxfaW5zZXJ0KF9fcG9zLCBfX24sIF9feCk7IH0KCiAgdm9p ZCBfTV9maWxsX2luc2VydCAoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IF9U cCYgX194KTsKCiAgdm9pZCBwb3BfYmFjaygpIHsKICAgIC0tX01fZmluaXNoOwogICAgZGVzdHJv eShfTV9maW5pc2gpOwogIH0KICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7 CiAgICBpZiAoX19wb3NpdGlvbiArIDEgIT0gZW5kKCkpCiAgICAgIGNvcHkoX19wb3NpdGlvbiAr IDEsIGVuZCgpLCBfX3Bvc2l0aW9uKTsKICAgIC0tX01fZmluaXNoOwogICAgZGVzdHJveShfTV9m aW5pc2gpOwogICAgcmV0dXJuIF9fcG9zaXRpb247CiAgfQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJh dG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkgewogICAgaXRlcmF0b3IgX19pKGNvcHkoX19s YXN0LCBlbmQoKSwgX19maXJzdCkpOwogICAgZGVzdHJveShfX2ksIGVuZCgpKTsKICAgIF9NX2Zp bmlzaCA9IF9NX2ZpbmlzaCAtIChfX2xhc3QgLSBfX2ZpcnN0KTsKICAgIHJldHVybiBfX2ZpcnN0 OwogIH0KCiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUsIGNvbnN0IF9UcCYgX194 KSB7CiAgICBpZiAoX19uZXdfc2l6ZSA8IHNpemUoKSkKICAgICAgZXJhc2UoYmVnaW4oKSArIF9f bmV3X3NpemUsIGVuZCgpKTsKICAgIGVsc2UKICAgICAgaW5zZXJ0KGVuZCgpLCBfX25ld19zaXpl IC0gc2l6ZSgpLCBfX3gpOwogIH0KICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSkg eyByZXNpemUoX19uZXdfc2l6ZSwgX1RwKCkpOyB9CiAgdm9pZCBjbGVhcigpIHsgZXJhc2UoYmVn aW4oKSwgZW5kKCkpOyB9Cgpwcm90ZWN0ZWQ6CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0 ZXJhdG9yPgogIHBvaW50ZXIgX01fYWxsb2NhdGVfYW5kX2NvcHkoc2l6ZV90eXBlIF9fbiwgX0Zv cndhcmRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KQogIHsKICAgIHBvaW50ZXIgX19y ZXN1bHQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgICAgICAgICAgIHsKICAgICAgdW5pbml0aWFs aXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwogICAgICByZXR1cm4gX19yZXN1 bHQ7CiAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9p bml0aWFsaXplKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgaW5wdXRfaXRlcmF0b3JfdGFnKQogIHsKICAgIGZv ciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgcHVzaF9iYWNrKCpfX2Zp cnN0KTsKICB9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICB2b2lkIF9N X3JhbmdlX2luaXRpYWxpemUoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgZm9yd2FyZF9pdGVyYXRvcl90 YWcpCiAgewogICAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xh c3QsIF9fbik7CiAgICBfTV9zdGFydCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICBfTV9lbmRfb2Zf c3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9j b3B5KF9fZmlyc3QsIF9fbGFzdCwgX01fc3RhcnQpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9J bnB1dEl0ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLAogICAg ICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9y IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOwoKICB0 ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luc2VydChp dGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9f Zmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGZv cndhcmRfaXRlcmF0b3JfdGFnKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxv Yz4KaW5saW5lIGJvb2wKb3BlcmF0b3I9PShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gs IGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkKewogIHJldHVybiBfX3guc2l6ZSgpID09 IF9feS5zaXplKCkgJiYKICAgICAgICAgZXF1YWwoX194LmJlZ2luKCksIF9feC5lbmQoKSwgX195 LmJlZ2luKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBi b29sCm9wZXJhdG9yPChjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3Rv cjxfVHAsIF9BbGxvYz4mIF9feSkKewogIHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZShf X3guYmVnaW4oKSwgX194LmVuZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X3kuYmVnaW4oKSwgX195LmVuZCgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Fs bG9jPgppbmxpbmUgdm9pZCBzd2FwKHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgdmVjdG9yPF9U cCwgX0FsbG9jPiYgX195KQp7CiAgX194LnN3YXAoX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9U cCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvciE9KGNvbnN0IHZlY3RvcjxfVHAs IF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KSB7CiAgcmV0dXJu ICEoX194ID09IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5s aW5lIGJvb2wKb3BlcmF0b3I+KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3Qg dmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKdGVtcGxh dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcjw9KGNvbnN0 IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195 KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg X0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcj49KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4m IF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194IDwg X195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2ZWN0b3I8X1RwLF9B bGxvYz4mCnZlY3RvcjxfVHAsX0FsbG9jPjo6b3BlcmF0b3I9KGNvbnN0IHZlY3RvcjxfVHAsIF9B bGxvYz4mIF9feCkKewogIGlmICgmX194ICE9IHRoaXMpIHsKICAgIGNvbnN0IHNpemVfdHlwZSBf X3hsZW4gPSBfX3guc2l6ZSgpOwogICAgaWYgKF9feGxlbiA+IGNhcGFjaXR5KCkpIHsKICAgICAg cG9pbnRlciBfX3RtcCA9IF9NX2FsbG9jYXRlX2FuZF9jb3B5KF9feGxlbiwgX194LmJlZ2luKCks IF9feC5lbmQoKSk7CiAgICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9N X2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAg ICBfTV9zdGFydCA9IF9fdG1wOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsg X194bGVuOwogICAgfQogICAgZWxzZSBpZiAoc2l6ZSgpID49IF9feGxlbikgewogICAgICBpdGVy YXRvciBfX2koY29weShfX3guYmVnaW4oKSwgX194LmVuZCgpLCBiZWdpbigpKSk7CiAgICAgIGRl c3Ryb3koX19pLCBlbmQoKSk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgY29weShfX3guYmVnaW4o KSwgX194LmJlZ2luKCkgKyBzaXplKCksIF9NX3N0YXJ0KTsKICAgICAgdW5pbml0aWFsaXplZF9j b3B5KF9feC5iZWdpbigpICsgc2l6ZSgpLCBfX3guZW5kKCksIF9NX2ZpbmlzaCk7CiAgICB9CiAg ICBfTV9maW5pc2ggPSBfTV9zdGFydCArIF9feGxlbjsKICB9CiAgcmV0dXJuICp0aGlzOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgdmVjdG9yPF9UcCwgX0FsbG9j Pjo6X01fZmlsbF9hc3NpZ24oc2l6ZV90IF9fbiwgY29uc3QgdmFsdWVfdHlwZSYgX192YWwpCnsK ICBpZiAoX19uID4gY2FwYWNpdHkoKSkgewogICAgdmVjdG9yPF9UcCwgX0FsbG9jPiBfX3RtcChf X24sIF9fdmFsLCBnZXRfYWxsb2NhdG9yKCkpOwogICAgX190bXAuc3dhcCgqdGhpcyk7CiAgfQog IGVsc2UgaWYgKF9fbiA+IHNpemUoKSkgewogICAgZmlsbChiZWdpbigpLCBlbmQoKSwgX192YWwp OwogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fZmluaXNoLCBfX24gLSBz aXplKCksIF9fdmFsKTsKICB9CiAgZWxzZQogICAgZXJhc2UoZmlsbF9uKGJlZ2luKCksIF9fbiwg X192YWwpLCBlbmQoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVt cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CnZvaWQgdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fYXNz aWduX2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgaXRl cmF0b3IgX19jdXIoYmVnaW4oKSk7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX2N1 ciAhPSBlbmQoKTsgKytfX2N1ciwgKytfX2ZpcnN0KQogICAgKl9fY3VyID0gKl9fZmlyc3Q7CiAg aWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgZXJhc2UoX19jdXIsIGVuZCgpKTsKICBlbHNlCiAg ICBpbnNlcnQoZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAs IGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4Kdm9pZAp2ZWN0b3I8 X1RwLCBfQWxsb2M+OjpfTV9hc3NpZ25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy ZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRf aXRlcmF0b3JfdGFnKSB7CiAgc2l6ZV90eXBlIF9fbGVuID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0 LCBfX2xhc3QsIF9fbGVuKTsKCiAgaWYgKF9fbGVuID4gY2FwYWNpdHkoKSkgewogICAgcG9pbnRl ciBfX3RtcChfTV9hbGxvY2F0ZV9hbmRfY29weShfX2xlbiwgX19maXJzdCwgX19sYXN0KSk7CiAg ICBkZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAgX01fZGVhbGxvY2F0ZShfTV9zdGFy dCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICBfTV9zdGFydCA9IF9fdG1wOwog ICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9maW5pc2ggPSBfTV9zdGFydCArIF9fbGVuOwogIH0K ICBlbHNlIGlmIChzaXplKCkgPj0gX19sZW4pIHsKICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChj b3B5KF9fZmlyc3QsIF9fbGFzdCwgX01fc3RhcnQpKTsKICAgIGRlc3Ryb3koX19uZXdfZmluaXNo LCBlbmQoKSk7CiAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2guYmFzZSgpOwogIH0KICBlbHNl IHsKICAgIF9Gb3J3YXJkSXRlciBfX21pZCA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkLCBz aXplKCkpOwogICAgY29weShfX2ZpcnN0LCBfX21pZCwgX01fc3RhcnQpOwogICAgX01fZmluaXNo ID0gdW5pbml0aWFsaXplZF9jb3B5KF9fbWlkLCBfX2xhc3QsIF9NX2ZpbmlzaCk7CiAgfQp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9j Pjo6X01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkKewog IGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsKICAgIGNvbnN0cnVjdChfTV9m aW5pc2gsICooX01fZmluaXNoIC0gMSkpOwogICAgKytfTV9maW5pc2g7CiAgICBfVHAgX194X2Nv cHkgPSBfX3g7CiAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9NX2Zpbmlz aCAtIDIpLCBpdGVyYXRvcihfTV9maW5pc2gtIDEpKTsKICAgICpfX3Bvc2l0aW9uID0gX194X2Nv cHk7CiAgfQogIGVsc2UgewogICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7 CiAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICE9IDAgPyAyICogX19vbGRf c2l6ZSA6IDE7CiAgICBpdGVyYXRvciBfX25ld19zdGFydChfTV9hbGxvY2F0ZShfX2xlbikpOwog ICAgaXRlcmF0b3IgX19uZXdfZmluaXNoKF9fbmV3X3N0YXJ0KTsKICAgICAgICAgICAgICB7CiAg ICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShpdGVyYXRvcihfTV9zdGFydCks IF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25l d19zdGFydCk7CiAgICAgIGNvbnN0cnVjdChfX25ld19maW5pc2guYmFzZSgpLCBfX3gpOwogICAg ICArK19fbmV3X2ZpbmlzaDsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5 KF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9NX2ZpbmlzaCksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX25ld19maW5pc2gpOwogICAgfQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICBkZXN0cm95KGJl Z2luKCksIGVuZCgpKTsKICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9y YWdlIC0gX01fc3RhcnQpOwogICAgX01fc3RhcnQgPSBfX25ld19zdGFydC5iYXNlKCk7CiAgICBf TV9maW5pc2ggPSBfX25ld19maW5pc2guYmFzZSgpOwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBf X25ld19zdGFydC5iYXNlKCkgKyBfX2xlbjsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs YXNzIF9BbGxvYz4Kdm9pZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJh dG9yIF9fcG9zaXRpb24pCnsKICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7 CiAgICBjb25zdHJ1Y3QoX01fZmluaXNoLCAqKF9NX2ZpbmlzaCAtIDEpKTsKICAgICsrX01fZmlu aXNoOwogICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBpdGVyYXRvcihfTV9maW5pc2ggLSAy KSwKICAgICAgICAgICAgICAgICAgaXRlcmF0b3IoX01fZmluaXNoIC0gMSkpOwogICAgKl9fcG9z aXRpb24gPSBfVHAoKTsKICB9CiAgZWxzZSB7CiAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6 ZSA9IHNpemUoKTsKICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgIT0gMCA/ IDIgKiBfX29sZF9zaXplIDogMTsKICAgIHBvaW50ZXIgX19uZXdfc3RhcnQgPSBfTV9hbGxvY2F0 ZShfX2xlbik7CiAgICBwb2ludGVyIF9fbmV3X2ZpbmlzaCA9IF9fbmV3X3N0YXJ0OwogICAgICAg ICAgICAgIHsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGl0ZXJhdG9y KF9NX3N0YXJ0KSwgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fbmV3X3N0YXJ0KTsKICAgICAgY29uc3RydWN0KF9fbmV3X2ZpbmlzaCk7CiAgICAg ICsrX19uZXdfZmluaXNoOwogICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHko X19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoKSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fbmV3X2ZpbmlzaCk7CiAgICB9CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgZGVzdHJveShiZWdpbigpLCBl bmQoKSk7CiAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9N X3N0YXJ0KTsKICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQ7CiAgICBfTV9maW5pc2ggPSBfX25l d19maW5pc2g7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0ICsgX19sZW47CiAg fQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgdmVjdG9yPF9UcCwg X0FsbG9jPjo6X01fZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9f biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9f eCkKewogIGlmIChfX24gIT0gMCkgewogICAgaWYgKHNpemVfdHlwZShfTV9lbmRfb2Zfc3RvcmFn ZSAtIF9NX2ZpbmlzaCkgPj0gX19uKSB7CiAgICAgIF9UcCBfX3hfY29weSA9IF9feDsKICAgICAg Y29uc3Qgc2l6ZV90eXBlIF9fZWxlbXNfYWZ0ZXIgPSBlbmQoKSAtIF9fcG9zaXRpb247CiAgICAg IGl0ZXJhdG9yIF9fb2xkX2ZpbmlzaChfTV9maW5pc2gpOwogICAgICBpZiAoX19lbGVtc19hZnRl ciA+IF9fbikgewogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfTV9maW5pc2ggLSBfX24sIF9N X2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uOwogICAgICAgIGNv cHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5pc2gp OwogICAgICAgIGZpbGwoX19wb3NpdGlvbiwgX19wb3NpdGlvbiArIF9fbiwgX194X2NvcHkpOwog ICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2Zpbmlz aCwgX19uIC0gX19lbGVtc19hZnRlciwgX194X2NvcHkpOwogICAgICAgIF9NX2ZpbmlzaCArPSBf X24gLSBfX2VsZW1zX2FmdGVyOwogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9u LCBfX29sZF9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fZWxlbXNf YWZ0ZXI7CiAgICAgICAgZmlsbChfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9feF9jb3B5KTsK ICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXpl ID0gc2l6ZSgpOwogICAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICsgbWF4 KF9fb2xkX3NpemUsIF9fbik7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0KF9NX2FsbG9jYXRl KF9fbGVuKSk7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7CiAgICAg ICAgICAgICAgICB7CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGJl Z2luKCksIF9fcG9zaXRpb24sIF9fbmV3X3N0YXJ0KTsKICAgICAgICBfX25ld19maW5pc2ggPSB1 bmluaXRpYWxpemVkX2ZpbGxfbihfX25ld19maW5pc2gsIF9fbiwgX194KTsKICAgICAgICBfX25l d19maW5pc2gKICAgICAgICAgID0gdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIGVuZCgp LCBfX25ld19maW5pc2gpOwogICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICBkZXN0cm95KF9NX3N0YXJ0LCBf TV9maW5pc2gpOwogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFn ZSAtIF9NX3N0YXJ0KTsKICAgICAgX01fc3RhcnQgPSBfX25ld19zdGFydC5iYXNlKCk7CiAgICAg IF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaC5iYXNlKCk7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdl ID0gX19uZXdfc3RhcnQuYmFzZSgpICsgX19sZW47CiAgICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4Kdm9p ZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3MsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3Jf dGFnKQp7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KSB7CiAgICBfX3Bv cyA9IGluc2VydChfX3BvcywgKl9fZmlyc3QpOwogICAgKytfX3BvczsKICB9Cn0KCnRlbXBsYXRl IDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0 b3I+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9f cG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0 ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9y d2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGZvcndhcmRfaXRlcmF0b3JfdGFnKQp7CiAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICBz aXplX3R5cGUgX19uID0gMDsKICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uKTsKICAg IGlmIChzaXplX3R5cGUoX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9maW5pc2gpID49IF9fbikgewog ICAgICBjb25zdCBzaXplX3R5cGUgX19lbGVtc19hZnRlciA9IGVuZCgpIC0gX19wb3NpdGlvbjsK ICAgICAgaXRlcmF0b3IgX19vbGRfZmluaXNoKF9NX2ZpbmlzaCk7CiAgICAgIGlmIChfX2VsZW1z X2FmdGVyID4gX19uKSB7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9NX2ZpbmlzaCAtIF9f biwgX01fZmluaXNoLCBfTV9maW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX247CiAgICAg ICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2ggLSBfX24sIF9fb2xkX2Zp bmlzaCk7CiAgICAgICAgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcG9zaXRpb24pOwogICAgICB9 CiAgICAgIGVsc2UgewogICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2ZpcnN0Owog ICAgICAgIGFkdmFuY2UoX19taWQsIF9fZWxlbXNfYWZ0ZXIpOwogICAgICAgIHVuaW5pdGlhbGl6 ZWRfY29weShfX21pZCwgX19sYXN0LCBfTV9maW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBf X24gLSBfX2VsZW1zX2FmdGVyOwogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9u LCBfX29sZF9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fZWxlbXNf YWZ0ZXI7CiAgICAgICAgY29weShfX2ZpcnN0LCBfX21pZCwgX19wb3NpdGlvbik7CiAgICAgIH0K ICAgIH0KICAgIGVsc2UgewogICAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUo KTsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19vbGRfc2l6ZSArIG1heChfX29sZF9z aXplLCBfX24pOwogICAgICBpdGVyYXRvciBfX25ld19zdGFydChfTV9hbGxvY2F0ZShfX2xlbikp OwogICAgICBpdGVyYXRvciBfX25ld19maW5pc2goX19uZXdfc3RhcnQpOwogICAgICAgICAgICAg ICAgewogICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShpdGVyYXRvcihf TV9zdGFydCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcG9z aXRpb24sIF9fbmV3X3N0YXJ0KTsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVk X2NvcHkoX19maXJzdCwgX19sYXN0LCBfX25ld19maW5pc2gpOwogICAgICAgIF9fbmV3X2Zpbmlz aAogICAgICAgICAgPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01f ZmluaXNoKSwgX19uZXdfZmluaXNoKTsKICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgZGVzdHJveShfTV9z dGFydCwgX01fZmluaXNoKTsKICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29m X3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQuYmFzZSgp OwogICAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2guYmFzZSgpOwogICAgICBfTV9lbmRfb2Zf c3RvcmFnZSA9IF9fbmV3X3N0YXJ0LmJhc2UoKSArIF9fbGVuOwogICAgfQogIH0KfQoKfQojIDY3 ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMKIyAxICIv dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2J2ZWN0b3IuaCIgMSAzCiMgNjMgIi91 c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYnZlY3Rvci5oIiAzCm5hbWVzcGFjZSBz dGQKewoKc3RhdGljIGNvbnN0IGludCBfX1dPUkRfQklUID0gaW50KDgqc2l6ZW9mKHVuc2lnbmVk IGludCkpOwoKc3RydWN0IF9CaXRfcmVmZXJlbmNlIHsKICB1bnNpZ25lZCBpbnQqIF9NX3A7CiAg dW5zaWduZWQgaW50IF9NX21hc2s7CiAgX0JpdF9yZWZlcmVuY2UodW5zaWduZWQgaW50KiBfX3gs IHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9NX3AoX194KSwgX01fbWFzayhfX3kpIHt9CgpwdWJs aWM6CiAgX0JpdF9yZWZlcmVuY2UoKSA6IF9NX3AoMCksIF9NX21hc2soMCkge30KICBvcGVyYXRv ciBib29sKCkgY29uc3QgeyByZXR1cm4gISghKCpfTV9wICYgX01fbWFzaykpOyB9CiAgX0JpdF9y ZWZlcmVuY2UmIG9wZXJhdG9yPShib29sIF9feCkKICB7CiAgICBpZiAoX194KSAqX01fcCB8PSBf TV9tYXNrOwogICAgZWxzZSAqX01fcCAmPSB+X01fbWFzazsKICAgIHJldHVybiAqdGhpczsKICB9 CiAgX0JpdF9yZWZlcmVuY2UmIG9wZXJhdG9yPShjb25zdCBfQml0X3JlZmVyZW5jZSYgX194KQog ICAgeyByZXR1cm4gKnRoaXMgPSBib29sKF9feCk7IH0KICBib29sIG9wZXJhdG9yPT0oY29uc3Qg X0JpdF9yZWZlcmVuY2UmIF9feCkgY29uc3QKICAgIHsgcmV0dXJuIGJvb2woKnRoaXMpID09IGJv b2woX194KTsgfQogIGJvb2wgb3BlcmF0b3I8KGNvbnN0IF9CaXRfcmVmZXJlbmNlJiBfX3gpIGNv bnN0IHsKICAgIHJldHVybiAhYm9vbCgqdGhpcykgJiYgYm9vbChfX3gpOwogIH0KICB2b2lkIGZs aXAoKSB7ICpfTV9wIF49IF9NX21hc2s7IH0KfTsKCmlubGluZSB2b2lkIHN3YXAoX0JpdF9yZWZl cmVuY2UgX194LCBfQml0X3JlZmVyZW5jZSBfX3kpCnsKICBib29sIF9fdG1wID0gX194OwogIF9f eCA9IF9feTsKICBfX3kgPSBfX3RtcDsKfQoKc3RydWN0IF9CaXRfaXRlcmF0b3JfYmFzZSA6IHB1 YmxpYyByYW5kb21fYWNjZXNzX2l0ZXJhdG9yPGJvb2wsIHB0cmRpZmZfdD4KewogIHVuc2lnbmVk IGludCogX01fcDsKICB1bnNpZ25lZCBpbnQgX01fb2Zmc2V0OwoKICBfQml0X2l0ZXJhdG9yX2Jh c2UodW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9NX3AoX194KSwg X01fb2Zmc2V0KF9feSkge30KCiAgdm9pZCBfTV9idW1wX3VwKCkgewogICAgaWYgKF9NX29mZnNl dCsrID09IF9fV09SRF9CSVQgLSAxKSB7CiAgICAgIF9NX29mZnNldCA9IDA7CiAgICAgICsrX01f cDsKICAgIH0KICB9CiAgdm9pZCBfTV9idW1wX2Rvd24oKSB7CiAgICBpZiAoX01fb2Zmc2V0LS0g PT0gMCkgewogICAgICBfTV9vZmZzZXQgPSBfX1dPUkRfQklUIC0gMTsKICAgICAgLS1fTV9wOwog ICAgfQogIH0KCiAgdm9pZCBfTV9pbmNyKHB0cmRpZmZfdCBfX2kpIHsKICAgIGRpZmZlcmVuY2Vf dHlwZSBfX24gPSBfX2kgKyBfTV9vZmZzZXQ7CiAgICBfTV9wICs9IF9fbiAvIF9fV09SRF9CSVQ7 CiAgICBfX24gPSBfX24gJSBfX1dPUkRfQklUOwogICAgaWYgKF9fbiA8IDApIHsKICAgICAgX01f b2Zmc2V0ID0gKHVuc2lnbmVkIGludCkgX19uICsgX19XT1JEX0JJVDsKICAgICAgLS1fTV9wOwog ICAgfSBlbHNlCiAgICAgIF9NX29mZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9fbjsKICB9CgogIGJv b2wgb3BlcmF0b3I9PShjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAg cmV0dXJuIF9NX3AgPT0gX19pLl9NX3AgJiYgX01fb2Zmc2V0ID09IF9faS5fTV9vZmZzZXQ7CiAg fQogIGJvb2wgb3BlcmF0b3I8KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7 CiAgICByZXR1cm4gX01fcCA8IF9faS5fTV9wIHx8IChfTV9wID09IF9faS5fTV9wICYmIF9NX29m ZnNldCA8IF9faS5fTV9vZmZzZXQpOwogIH0KICBib29sIG9wZXJhdG9yIT0oY29uc3QgX0JpdF9p dGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiAhKCp0aGlzID09IF9faSk7CiAg fQogIGJvb2wgb3BlcmF0b3I+KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7 CiAgICByZXR1cm4gX19pIDwgKnRoaXM7CiAgfQogIGJvb2wgb3BlcmF0b3I8PShjb25zdCBfQml0 X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuICEoX19pIDwgKnRoaXMpOwog IH0KICBib29sIG9wZXJhdG9yPj0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0 IHsKICAgIHJldHVybiAhKCp0aGlzIDwgX19pKTsKICB9Cn07CgppbmxpbmUgcHRyZGlmZl90Cm9w ZXJhdG9yLShjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9feCwgY29uc3QgX0JpdF9pdGVyYXRv cl9iYXNlJiBfX3kpIHsKICByZXR1cm4gX19XT1JEX0JJVCAqIChfX3guX01fcCAtIF9feS5fTV9w KSArIF9feC5fTV9vZmZzZXQgLSBfX3kuX01fb2Zmc2V0Owp9CgoKc3RydWN0IF9CaXRfaXRlcmF0 b3IgOiBwdWJsaWMgX0JpdF9pdGVyYXRvcl9iYXNlCnsKICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNl IHJlZmVyZW5jZTsKICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlKiBwb2ludGVyOwogIHR5cGVkZWYg X0JpdF9pdGVyYXRvciBpdGVyYXRvcjsKCiAgX0JpdF9pdGVyYXRvcigpIDogX0JpdF9pdGVyYXRv cl9iYXNlKDAsIDApIHt9CiAgX0JpdF9pdGVyYXRvcih1bnNpZ25lZCBpbnQqIF9feCwgdW5zaWdu ZWQgaW50IF9feSkKICAgIDogX0JpdF9pdGVyYXRvcl9iYXNlKF9feCwgX195KSB7fQoKICByZWZl cmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gcmVmZXJlbmNlKF9NX3AsIDFVIDw8IF9N X29mZnNldCk7IH0KICBpdGVyYXRvciYgb3BlcmF0b3IrKygpIHsKICAgIF9NX2J1bXBfdXAoKTsK ICAgIHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpIHsKICAgIGl0 ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICBfTV9idW1wX3VwKCk7CiAgICByZXR1cm4gX190bXA7 CiAgfQogIGl0ZXJhdG9yJiBvcGVyYXRvci0tKCkgewogICAgX01fYnVtcF9kb3duKCk7CiAgICBy ZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yLS0oaW50KSB7CiAgICBpdGVyYXRv ciBfX3RtcCA9ICp0aGlzOwogICAgX01fYnVtcF9kb3duKCk7CiAgICByZXR1cm4gX190bXA7CiAg fQogIGl0ZXJhdG9yJiBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgIF9NX2lu Y3IoX19pKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yLT0oZGlm ZmVyZW5jZV90eXBlIF9faSkgewogICAgKnRoaXMgKz0gLV9faTsKICAgIHJldHVybiAqdGhpczsK ICB9CiAgaXRlcmF0b3Igb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsKICAg IGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgKz0gX19pOwogIH0KICBp dGVyYXRvciBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9faSkgY29uc3QgewogICAgaXRlcmF0 b3IgX190bXAgPSAqdGhpczsKICAgIHJldHVybiBfX3RtcCAtPSBfX2k7CiAgfQoKICByZWZlcmVu Y2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19pKSB7IHJldHVybiAqKCp0aGlzICsgX19p KTsgfQp9OwoKaW5saW5lIF9CaXRfaXRlcmF0b3IKb3BlcmF0b3IrKHB0cmRpZmZfdCBfX24sIGNv bnN0IF9CaXRfaXRlcmF0b3ImIF9feCkgeyByZXR1cm4gX194ICsgX19uOyB9CgoKc3RydWN0IF9C aXRfY29uc3RfaXRlcmF0b3IgOiBwdWJsaWMgX0JpdF9pdGVyYXRvcl9iYXNlCnsKICB0eXBlZGVm IGJvb2wgcmVmZXJlbmNlOwogIHR5cGVkZWYgYm9vbCBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRl ZiBjb25zdCBib29sKiBwb2ludGVyOwogIHR5cGVkZWYgX0JpdF9jb25zdF9pdGVyYXRvciBjb25z dF9pdGVyYXRvcjsKCiAgX0JpdF9jb25zdF9pdGVyYXRvcigpIDogX0JpdF9pdGVyYXRvcl9iYXNl KDAsIDApIHt9CiAgX0JpdF9jb25zdF9pdGVyYXRvcih1bnNpZ25lZCBpbnQqIF9feCwgdW5zaWdu ZWQgaW50IF9feSkKICAgIDogX0JpdF9pdGVyYXRvcl9iYXNlKF9feCwgX195KSB7fQogIF9CaXRf Y29uc3RfaXRlcmF0b3IoY29uc3QgX0JpdF9pdGVyYXRvciYgX194KQogICAgOiBfQml0X2l0ZXJh dG9yX2Jhc2UoX194Ll9NX3AsIF9feC5fTV9vZmZzZXQpIHt9CgogIGNvbnN0X3JlZmVyZW5jZSBv cGVyYXRvciooKSBjb25zdCB7CiAgICByZXR1cm4gX0JpdF9yZWZlcmVuY2UoX01fcCwgMVUgPDwg X01fb2Zmc2V0KTsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7CiAgICBfTV9i dW1wX3VwKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9y KysoaW50KSB7CiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgX01fYnVtcF91 cCgpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0b3ItLSgp IHsKICAgIF9NX2J1bXBfZG93bigpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVy YXRvciBvcGVyYXRvci0tKGludCkgewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsK ICAgIF9NX2J1bXBfZG93bigpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBjb25zdF9pdGVyYXRv ciYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICBfTV9pbmNyKF9faSk7CiAg ICByZXR1cm4gKnRoaXM7CiAgfQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvci09KGRpZmZlcmVu Y2VfdHlwZSBfX2kpIHsKICAgICp0aGlzICs9IC1fX2k7CiAgICByZXR1cm4gKnRoaXM7CiAgfQog IGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7CiAg ICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wICs9IF9faTsK ICB9CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0 IHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgLT0g X19pOwogIH0KICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19p KSB7CiAgICByZXR1cm4gKigqdGhpcyArIF9faSk7CiAgfQp9OwoKaW5saW5lIF9CaXRfY29uc3Rf aXRlcmF0b3IKb3BlcmF0b3IrKHB0cmRpZmZfdCBfX24sIGNvbnN0IF9CaXRfY29uc3RfaXRlcmF0 b3ImIF9feCkgeyByZXR1cm4gX194ICsgX19uOyB9CgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfQWxs b2NhdG9yLCBib29sIF9faXNfc3RhdGljPgpjbGFzcyBfQnZlY3Rvcl9hbGxvY19iYXNlIHsKcHVi bGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2NhdG9yPjo6 YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBl IGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfTV9kYXRhX2FsbG9jYXRvcjsgfQoKICBf QnZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9NX2Rh dGFfYWxsb2NhdG9yKF9fYSksIF9NX3N0YXJ0KCksIF9NX2ZpbmlzaCgpLCBfTV9lbmRfb2Zfc3Rv cmFnZSgwKSB7fQoKcHJvdGVjdGVkOgogIHVuc2lnbmVkIGludCogX01fYml0X2FsbG9jKHNpemVf dCBfX24pCiAgICB7IHJldHVybiBfTV9kYXRhX2FsbG9jYXRvci5hbGxvY2F0ZSgoX19uICsgX19X T1JEX0JJVCAtIDEpL19fV09SRF9CSVQpOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlKCkgewogICAg aWYgKF9NX3N0YXJ0Ll9NX3ApCiAgICAgIF9NX2RhdGFfYWxsb2NhdG9yLmRlYWxsb2NhdGUoX01f c3RhcnQuX01fcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9lbmRfb2Zf c3RvcmFnZSAtIF9NX3N0YXJ0Ll9NX3ApOwogIH0KCiAgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czx1 bnNpZ25lZCBpbnQsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgX01fZGF0 YV9hbGxvY2F0b3I7CiAgX0JpdF9pdGVyYXRvciBfTV9zdGFydDsKICBfQml0X2l0ZXJhdG9yIF9N X2ZpbmlzaDsKICB1bnNpZ25lZCBpbnQqIF9NX2VuZF9vZl9zdG9yYWdlOwp9OwoKCnRlbXBsYXRl IDxjbGFzcyBfQWxsb2NhdG9yPgpjbGFzcyBfQnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxvY2F0b3Is IHRydWU+IHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxib29sLCBf QWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFs bG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0b3JfdHlw ZSgpOyB9CgogIF9CdmVjdG9yX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmKQogICAg OiBfTV9zdGFydCgpLCBfTV9maW5pc2goKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkge30KCnByb3Rl Y3RlZDoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8dW5zaWduZWQgaW50LCBfQWxs b2NhdG9yPjo6X0FsbG9jX3R5cGUKICAgICAgICAgIF9BbGxvY190eXBlOwoKICB1bnNpZ25lZCBp bnQqIF9NX2JpdF9hbGxvYyhzaXplX3QgX19uKQogICAgeyByZXR1cm4gX0FsbG9jX3R5cGU6OmFs bG9jYXRlKChfX24gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVCk7IH0KICB2b2lkIF9NX2Rl YWxsb2NhdGUoKSB7CiAgICBpZiAoX01fc3RhcnQuX01fcCkKICAgICAgX0FsbG9jX3R5cGU6OmRl YWxsb2NhdGUoX01fc3RhcnQuX01fcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01f ZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydC5fTV9wKTsKICB9CgogIF9CaXRfaXRlcmF0b3IgX01f c3RhcnQ7CiAgX0JpdF9pdGVyYXRvciBfTV9maW5pc2g7CiAgdW5zaWduZWQgaW50KiBfTV9lbmRf b2Zfc3RvcmFnZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmNsYXNzIF9CdmVjdG9yX2Jh c2UKICA6IHB1YmxpYyBfQnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxvYywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jPjo6X1NfaW5zdGFuY2Vs ZXNzPgp7CiAgdHlwZWRlZiBfQnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxvYywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2M+OjpfU19pbnN0YW5j ZWxlc3M+CiAgICAgICAgICBfQmFzZTsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6 OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICBfQnZlY3Rvcl9iYXNlKGNvbnN0IGFs bG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7fQogIH5fQnZlY3Rvcl9iYXNlKCkgeyBf QmFzZTo6X01fZGVhbGxvY2F0ZSgpOyB9Cn07Cgp9CgoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAxIDMKIyAzNDcgIi91c3IvbG9jYWwvaW5jbHVkZS9n KystdjMvYml0cy9zdGxfYnZlY3Rvci5oIiAyIDMKbmFtZXNwYWNlIHN0ZAp7Cgp0ZW1wbGF0ZSA8 dHlwZW5hbWUgX0FsbG9jPgogIGNsYXNzIHZlY3Rvcjxib29sLCBfQWxsb2M+IDogcHVibGljIF9C dmVjdG9yX2Jhc2U8X0FsbG9jPgogIHsKICBwdWJsaWM6CiAgICB0eXBlZGVmIGJvb2wgdmFsdWVf dHlwZTsKICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICAgIHR5cGVkZWYgcHRyZGlmZl90 IGRpZmZlcmVuY2VfdHlwZTsKICAgIHR5cGVkZWYgX0JpdF9yZWZlcmVuY2UgcmVmZXJlbmNlOwog ICAgdHlwZWRlZiBib29sIGNvbnN0X3JlZmVyZW5jZTsKICAgIHR5cGVkZWYgX0JpdF9yZWZlcmVu Y2UqIHBvaW50ZXI7CiAgICB0eXBlZGVmIGNvbnN0IGJvb2wqIGNvbnN0X3BvaW50ZXI7CgogICAg dHlwZWRlZiBfQml0X2l0ZXJhdG9yIGl0ZXJhdG9yOwogICAgdHlwZWRlZiBfQml0X2NvbnN0X2l0 ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwoKICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25z dF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICAgIHR5cGVkZWYgcmV2ZXJzZV9p dGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCiAgICB0eXBlZGVmIHR5cGVuYW1l IF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAg ICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgewogICAgICByZXR1cm4gX0J2 ZWN0b3JfYmFzZTxfQWxsb2M+OjpnZXRfYWxsb2NhdG9yKCk7CiAgICB9CgogIHByb3RlY3RlZDoK ICAgIHVzaW5nIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6X01fYml0X2FsbG9jOwogICAgdXNpbmcg X0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9kZWFsbG9jYXRlOwogICAgdXNpbmcgX0J2ZWN0b3Jf YmFzZTxfQWxsb2M+OjpfTV9zdGFydDsKICAgIHVzaW5nIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6 X01fZmluaXNoOwogICAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9lbmRfb2Zfc3Rv cmFnZTsKCiAgcHJvdGVjdGVkOgogICAgdm9pZCBfTV9pbml0aWFsaXplKHNpemVfdHlwZSBfX24p IHsKICAgICAgdW5zaWduZWQgaW50KiBfX3EgPSBfTV9iaXRfYWxsb2MoX19uKTsKICAgICAgX01f ZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19uICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7 CiAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgICAgX01fZmluaXNoID0gX01f c3RhcnQgKyBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICAgIH0KICAgIHZvaWQgX01faW5zZXJ0X2F1 eChpdGVyYXRvciBfX3Bvc2l0aW9uLCBib29sIF9feCkgewogICAgICBpZiAoX01fZmluaXNoLl9N X3AgIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRp b24sIF9NX2ZpbmlzaCwgX01fZmluaXNoICsgMSk7CiAgICAgICAgKl9fcG9zaXRpb24gPSBfX3g7 CiAgICAgICAgKytfTV9maW5pc2g7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgc2l6ZV90 eXBlIF9fbGVuID0gc2l6ZSgpID8gMiAqIHNpemUoKSA6IF9fV09SRF9CSVQ7CiAgICAgICAgdW5z aWduZWQgaW50KiBfX3EgPSBfTV9iaXRfYWxsb2MoX19sZW4pOwogICAgICAgIGl0ZXJhdG9yIF9f aSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgICAg Kl9faSsrID0gX194OwogICAgICAgIF9NX2ZpbmlzaCA9IGNvcHkoX19wb3NpdGlvbiwgZW5kKCks IF9faSk7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIF9NX2VuZF9vZl9zdG9yYWdl ID0gX19xICsgKF9fbGVuICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7CiAgICAgICAgX01f c3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAgICB9CiAgICB9CgogICAgdGVtcGxhdGUgPGNs YXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbml0aWFsaXplX3JhbmdlKF9JbnB1dEl0 ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICAgICAgX01fc3RhcnQgPSBpdGVyYXRv cigpOwogICAgICBfTV9maW5pc2ggPSBpdGVyYXRvcigpOwogICAgICBfTV9lbmRfb2Zfc3RvcmFn ZSA9IDA7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAg ICBwdXNoX2JhY2soKl9fZmlyc3QpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy ZEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbml0aWFsaXplX3JhbmdlKF9Gb3J3YXJkSXRlcmF0b3Ig X19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICAgICAgc2l6ZV90eXBlIF9fbiA9IDA7CiAg ICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uKTsKICAgICAgX01faW5pdGlhbGl6ZShf X24pOwogICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01fc3RhcnQpOwogICAgfQoKICAgIHRl bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5zZXJ0X3JhbmdlKGl0 ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19m aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgaW5w dXRfaXRlcmF0b3JfdGFnKSB7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19m aXJzdCkgewogICAgICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9zLCAqX19maXJzdCk7CiAgICAgICAg KytfX3BvczsKICAgICAgfQogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJh dG9yPgogICAgdm9pZCBfTV9pbnNlcnRfcmFuZ2UoaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAg ICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVy YXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3Rh ZykgewogICAgICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBzaXplX3R5cGUgX19u ID0gMDsKICAgICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbik7CiAgICAgICAgaWYg KGNhcGFjaXR5KCkgLSBzaXplKCkgPj0gX19uKSB7CiAgICAgICAgICBjb3B5X2JhY2t3YXJkKF9f cG9zaXRpb24sIGVuZCgpLCBfTV9maW5pc2ggKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgICAg ICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3NpdGlvbik7CiAgICAgICAgICBfTV9maW5p c2ggKz0gZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAg ICAgICAgc2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgpICsgbWF4KHNpemUoKSwgX19uKTsKICAgICAg ICAgIHVuc2lnbmVkIGludCogX19xID0gX01fYml0X2FsbG9jKF9fbGVuKTsKICAgICAgICAgIGl0 ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7 CiAgICAgICAgICBfX2kgPSBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19pKTsKICAgICAgICAgIF9N X2ZpbmlzaCA9IGNvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9faSk7CiAgICAgICAgICBfTV9kZWFs bG9jYXRlKCk7CiAgICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9f V09SRF9CSVQgLSAxKS9fX1dPUkRfQklUOwogICAgICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcihf X3EsIDApOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICBwdWJsaWM6CiAgICBpdGVyYXRvciBi ZWdpbigpIHsgcmV0dXJuIF9NX3N0YXJ0OyB9CiAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNv bnN0IHsgcmV0dXJuIF9NX3N0YXJ0OyB9CiAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBfTV9m aW5pc2g7IH0KICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX2Zpbmlz aDsgfQoKICAgIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVy YXRvcihlbmQoKSk7IH0KICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3Qg ewogICAgICByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7CiAgICB9CiAgICBy ZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkp OyB9CiAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7CiAgICAgIHJldHVy biBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOwogICAgfQoKICAgIHNpemVfdHlwZSBz aXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKGVuZCgpIC0gYmVnaW4oKSk7IH0KICAgIHNp emVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfdHlwZSgtMSk7IH0KICAgIHNp emVfdHlwZSBjYXBhY2l0eSgpIGNvbnN0IHsKICAgICAgcmV0dXJuIHNpemVfdHlwZShjb25zdF9p dGVyYXRvcihfTV9lbmRfb2Zfc3RvcmFnZSwgMCkgLSBiZWdpbigpKTsKICAgIH0KICAgIGJvb2wg ZW1wdHkoKSBjb25zdCB7IHJldHVybiBiZWdpbigpID09IGVuZCgpOyB9CgogICAgcmVmZXJlbmNl IG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikKICAgICAgeyByZXR1cm4gKihiZWdpbigpICsgZGlm ZmVyZW5jZV90eXBlKF9fbikpOyB9CiAgICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXpl X3R5cGUgX19uKSBjb25zdAogICAgICB7IHJldHVybiAqKGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5 cGUoX19uKSk7IH0KCiAgICB2b2lkIF9NX3JhbmdlX2NoZWNrKHNpemVfdHlwZSBfX24pIGNvbnN0 IHsKICAgICAgaWYgKF9fbiA+PSB0aGlzLT5zaXplKCkpCiAgICAgICAgX190aHJvd19yYW5nZV9l cnJvcigidmVjdG9yPGJvb2w+Iik7CiAgICB9CgogICAgcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBf X24pCiAgICAgIHsgX01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQog ICAgY29uc3RfcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsgX01fcmFu Z2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQoKICAgIGV4cGxpY2l0IHZlY3Rv cihjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgOiBf QnZlY3Rvcl9iYXNlPF9BbGxvYz4oX19hKSB7fQoKICAgIHZlY3RvcihzaXplX3R5cGUgX19uLCBi b29sIF9fdmFsdWUsCiAgICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFs bG9jYXRvcl90eXBlKCkpCiAgICAgIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9fYSkKICAgIHsK ICAgICAgX01faW5pdGlhbGl6ZShfX24pOwogICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2Vu ZF9vZl9zdG9yYWdlLCBfX3ZhbHVlID8gfjAgOiAwKTsKICAgIH0KCiAgICBleHBsaWNpdCB2ZWN0 b3Ioc2l6ZV90eXBlIF9fbikKICAgICAgOiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oYWxsb2NhdG9y X3R5cGUoKSkKICAgIHsKICAgICAgX01faW5pdGlhbGl6ZShfX24pOwogICAgICBmaWxsKF9NX3N0 YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCAwKTsKICAgIH0KCiAgICB2ZWN0b3IoY29uc3Qg dmVjdG9yJiBfX3gpIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9feC5nZXRfYWxsb2NhdG9yKCkp IHsKICAgICAgX01faW5pdGlhbGl6ZShfX3guc2l6ZSgpKTsKICAgICAgY29weShfX3guYmVnaW4o KSwgX194LmVuZCgpLCBfTV9zdGFydCk7CiAgICB9CgoKCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lu dGVnZXI+CiAgICB2b2lkIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50 ZWdlciBfX3gsIF9fdHJ1ZV90eXBlKSB7CiAgICAgIF9NX2luaXRpYWxpemUoX19uKTsKICAgICAg ZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgX194ID8gfjAgOiAwKTsKICAg IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2luaXRp YWxpemVfZGlzcGF0Y2goX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogICAg ICBfTV9pbml0aWFsaXplX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29y eShfX2ZpcnN0KSk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgog ICAgdmVjdG9yKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwK ICAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgp KQogICAgICA6IF9CdmVjdG9yX2Jhc2U8X0FsbG9jPihfX2EpCiAgICB7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFs OwogICAgICBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFs KCkpOwogICAgfQoKICAgIH52ZWN0b3IoKSB7IH0KCiAgICB2ZWN0b3ImIG9wZXJhdG9yPShjb25z dCB2ZWN0b3ImIF9feCkgewogICAgICBpZiAoJl9feCA9PSB0aGlzKSByZXR1cm4gKnRoaXM7CiAg ICAgIGlmIChfX3guc2l6ZSgpID4gY2FwYWNpdHkoKSkgewogICAgICAgIF9NX2RlYWxsb2NhdGUo KTsKICAgICAgICBfTV9pbml0aWFsaXplKF9feC5zaXplKCkpOwogICAgICB9CiAgICAgIGNvcHko X194LmJlZ2luKCksIF9feC5lbmQoKSwgYmVnaW4oKSk7CiAgICAgIF9NX2ZpbmlzaCA9IGJlZ2lu KCkgKyBkaWZmZXJlbmNlX3R5cGUoX194LnNpemUoKSk7CiAgICAgIHJldHVybiAqdGhpczsKICAg IH0KCgoKCgoKICAgIHZvaWQgX01fZmlsbF9hc3NpZ24oc2l6ZV90IF9fbiwgYm9vbCBfX3gpIHsK ICAgICAgaWYgKF9fbiA+IHNpemUoKSkgewogICAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01f ZW5kX29mX3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7CiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX24g LSBzaXplKCksIF9feCk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgZXJhc2UoYmVnaW4o KSArIF9fbiwgZW5kKCkpOwogICAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0 b3JhZ2UsIF9feCA/IH4wIDogMCk7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIGFzc2lnbihzaXpl X3QgX19uLCBib29sIF9feCkgeyBfTV9maWxsX2Fzc2lnbihfX24sIF9feCk7IH0KCiAgICB0ZW1w bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIGFzc2lnbihfSW5wdXRJdGVyYXRv ciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAg IF9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0K CiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRj aChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsLCBfX3RydWVfdHlwZSkKICAgICAgeyBfTV9m aWxsX2Fzc2lnbigoc2l6ZV90KSBfX24sIChib29sKSBfX3ZhbCk7IH0KCiAgICB0ZW1wbGF0ZSA8 Y2xhc3MgX0lucHV0SXRlcj4KICAgIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXIg X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAgICAgeyBfTV9hc3Np Z25fYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0K CiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2Fzc2lnbl9h dXgoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAg ICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewogICAgICBpdGVyYXRvciBfX2N1 ciA9IGJlZ2luKCk7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0g ZW5kKCk7ICsrX19jdXIsICsrX19maXJzdCkKICAgICAgICAqX19jdXIgPSAqX19maXJzdDsKICAg ICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7CiAg ICAgIGVsc2UKICAgICAgICBpbnNlcnQoZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9Cgog ICAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICB2b2lkIF9NX2Fzc2lnbl9h dXgoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgICBzaXplX3R5 cGUgX19sZW4gPSAwOwogICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsKICAg ICAgaWYgKF9fbGVuIDwgc2l6ZSgpKQogICAgICAgIGVyYXNlKGNvcHkoX19maXJzdCwgX19sYXN0 LCBiZWdpbigpKSwgZW5kKCkpOwogICAgICBlbHNlIHsKICAgICAgICBfRm9yd2FyZEl0ZXJhdG9y IF9fbWlkID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkLCBzaXplKCkpOwogICAgICAg IGNvcHkoX19maXJzdCwgX19taWQsIGJlZ2luKCkpOwogICAgICAgIGluc2VydChlbmQoKSwgX19t aWQsIF9fbGFzdCk7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIHJlc2VydmUoc2l6ZV90eXBlIF9f bikgewogICAgICBpZiAoY2FwYWNpdHkoKSA8IF9fbikgewogICAgICAgIHVuc2lnbmVkIGludCog X19xID0gX01fYml0X2FsbG9jKF9fbik7CiAgICAgICAgX01fZmluaXNoID0gY29weShiZWdpbigp LCBlbmQoKSwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAg ICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgICAgICBfTV9lbmRfb2Zfc3RvcmFn ZSA9IF9fcSArIChfX24gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVDsKICAgICAgfQogICAg fQoKICAgIHJlZmVyZW5jZSBmcm9udCgpIHsgcmV0dXJuICpiZWdpbigpOyB9CiAgICBjb25zdF9y ZWZlcmVuY2UgZnJvbnQoKSBjb25zdCB7IHJldHVybiAqYmVnaW4oKTsgfQogICAgcmVmZXJlbmNl IGJhY2soKSB7IHJldHVybiAqKGVuZCgpIC0gMSk7IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBiYWNr KCkgY29uc3QgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CiAgICB2b2lkIHB1c2hfYmFjayhib29s IF9feCkgewogICAgICBpZiAoX01fZmluaXNoLl9NX3AgIT0gX01fZW5kX29mX3N0b3JhZ2UpCiAg ICAgICAgKl9NX2ZpbmlzaCsrID0gX194OwogICAgICBlbHNlCiAgICAgICAgX01faW5zZXJ0X2F1 eChlbmQoKSwgX194KTsKICAgIH0KICAgIHZvaWQgc3dhcCh2ZWN0b3I8Ym9vbCwgX0FsbG9jPiYg X194KSB7CiAgICAgIHN0ZDo6c3dhcChfTV9zdGFydCwgX194Ll9NX3N0YXJ0KTsKICAgICAgc3Rk Ojpzd2FwKF9NX2ZpbmlzaCwgX194Ll9NX2ZpbmlzaCk7CiAgICAgIHN0ZDo6c3dhcChfTV9lbmRf b2Zfc3RvcmFnZSwgX194Ll9NX2VuZF9vZl9zdG9yYWdlKTsKICAgIH0KICAgIGl0ZXJhdG9yIGlu c2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBib29sIF9feCA9IGJvb2woKSkgewogICAgICBkaWZm ZXJlbmNlX3R5cGUgX19uID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7CiAgICAgIGlmIChfTV9maW5p c2guX01fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSAmJiBfX3Bvc2l0aW9uID09IGVuZCgpKQogICAg ICAgICpfTV9maW5pc2grKyA9IF9feDsKICAgICAgZWxzZQogICAgICAgIF9NX2luc2VydF9hdXgo X19wb3NpdGlvbiwgX194KTsKICAgICAgcmV0dXJuIGJlZ2luKCkgKyBfX247CiAgICB9CgoKCiAg ICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChp dGVyYXRvciBfX3BvcywgX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX3RydWVfdHlwZSkgewogICAgICBfTV9maWxsX2luc2VydChfX3Bvcywg X19uLCBfX3gpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAg IHZvaWQgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAgICAgIF9NX2lu c2VydF9yYW5nZShfX3BvcywgX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9f Zmlyc3QpKTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2 b2lkIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgX0lucHV0SXRl cmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwog ICAgICBfTV9pbnNlcnRfZGlzcGF0Y2goX19wb3NpdGlvbiwgX19maXJzdCwgX19sYXN0LCBfSW50 ZWdyYWwoKSk7CiAgICB9CgogICAgdm9pZCBfTV9maWxsX2luc2VydChpdGVyYXRvciBfX3Bvc2l0 aW9uLCBzaXplX3R5cGUgX19uLCBib29sIF9feCkgewogICAgICBpZiAoX19uID09IDApIHJldHVy bjsKICAgICAgaWYgKGNhcGFjaXR5KCkgLSBzaXplKCkgPj0gX19uKSB7CiAgICAgICAgY29weV9i YWNrd2FyZChfX3Bvc2l0aW9uLCBlbmQoKSwgX01fZmluaXNoICsgZGlmZmVyZW5jZV90eXBlKF9f bikpOwogICAgICAgIGZpbGwoX19wb3NpdGlvbiwgX19wb3NpdGlvbiArIGRpZmZlcmVuY2VfdHlw ZShfX24pLCBfX3gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBkaWZmZXJlbmNlX3R5cGUoX19uKTsK ICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBzaXplKCkgKyBt YXgoc2l6ZSgpLCBfX24pOwogICAgICAgIHVuc2lnbmVkIGludCogX19xID0gX01fYml0X2FsbG9j KF9fbGVuKTsKICAgICAgICBpdGVyYXRvciBfX2kgPSBjb3B5KGJlZ2luKCksIF9fcG9zaXRpb24s IGl0ZXJhdG9yKF9fcSwgMCkpOwogICAgICAgIGZpbGxfbihfX2ksIF9fbiwgX194KTsKICAgICAg ICBfTV9maW5pc2ggPSBjb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX2kgKyBkaWZmZXJlbmNlX3R5 cGUoX19uKSk7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIF9NX2VuZF9vZl9zdG9y YWdlID0gX19xICsgKF9fbGVuICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7CiAgICAgICAg X01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAgICB9CiAgICB9CgogICAgdm9pZCBpbnNl cnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwgYm9vbCBfX3gpIHsKICAgICAg X01fZmlsbF9pbnNlcnQoX19wb3NpdGlvbiwgX19uLCBfX3gpOwogICAgfQoKICAgIHZvaWQgcG9w X2JhY2soKSB7IC0tX01fZmluaXNoOyB9CiAgICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX3Bv c2l0aW9uKSB7CiAgICAgIGlmIChfX3Bvc2l0aW9uICsgMSAhPSBlbmQoKSkKICAgICAgICBjb3B5 KF9fcG9zaXRpb24gKyAxLCBlbmQoKSwgX19wb3NpdGlvbik7CiAgICAgICAgLS1fTV9maW5pc2g7 CiAgICAgIHJldHVybiBfX3Bvc2l0aW9uOwogICAgfQogICAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0 b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KSB7CiAgICAgIF9NX2ZpbmlzaCA9IGNvcHkoX19s YXN0LCBlbmQoKSwgX19maXJzdCk7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQogICAgdm9p ZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUsIGJvb2wgX194ID0gYm9vbCgpKSB7CiAgICAg IGlmIChfX25ld19zaXplIDwgc2l6ZSgpKQogICAgICAgIGVyYXNlKGJlZ2luKCkgKyBkaWZmZXJl bmNlX3R5cGUoX19uZXdfc2l6ZSksIGVuZCgpKTsKICAgICAgZWxzZQogICAgICAgIGluc2VydChl bmQoKSwgX19uZXdfc2l6ZSAtIHNpemUoKSwgX194KTsKICAgIH0KICAgIHZvaWQgZmxpcCgpIHsK ICAgICAgZm9yICh1bnNpZ25lZCBpbnQqIF9fcCA9IF9NX3N0YXJ0Ll9NX3A7IF9fcCAhPSBfTV9l bmRfb2Zfc3RvcmFnZTsgKytfX3ApCiAgICAgICAgKl9fcCA9IH4qX19wOwogICAgfQoKICAgIHZv aWQgY2xlYXIoKSB7IGVyYXNlKGJlZ2luKCksIGVuZCgpKTsgfQogIH07CgoKdHlwZWRlZiB2ZWN0 b3I8Ym9vbCwgYWxsb2M+IGJpdF92ZWN0b3I7Cgp9CiMgNjggIi91c3IvbG9jYWwvaW5jbHVkZS9n KystdjMvYml0cy9zdGRfdmVjdG9yLmgiIDIgMwojIDMyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr LXYzL3ZlY3RvciIgMiAzCiMgNDcgInN0bGluY2wuaCIgMgojIDEgIi91c3IvbG9jYWwvaW5jbHVk ZS9nKystdjMvc3RhY2siIDEgMwojIDMxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL3N0YWNr IiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdGFjay5oIiAxIDMK IyA2MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdGFjay5oIiAzCgojIDEg Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMSAzCiMgNjIg Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RhY2suaCIgMiAzCiMgMSAiL3Vz ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAxIDMKIyA2MyAiL3Vzci9s b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdGFjay5oIiAyIDMKIyAxICIvdXNyL2xvY2Fs L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAxIDMKIyA2NCAiL3Vzci9sb2Nh bC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdGFjay5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMSAzCiMgNjUgIi91c3IvbG9j YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RhY2suaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9p bmNsdWRlL2crKy12My9iaXRzL3N0bF9kZXF1ZS5oIiAxIDMKIyA2MCAiL3Vzci9sb2NhbC9pbmNs dWRlL2crKy12My9iaXRzL3N0bF9kZXF1ZS5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr Ky12My9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzCiMgNjEgIi91c3IvbG9jYWwvaW5jbHVkZS9n KystdjMvYml0cy9zdGxfZGVxdWUuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12 My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDEgMwojIDYyICIvdXNyL2xvY2FsL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2RlcXVlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVk ZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAxIDMKIyA2MyAiL3Vzci9s b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9kZXF1ZS5oIiAyIDMKIyAxMDEgIi91c3IvbG9j YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfZGVxdWUuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoK aW5saW5lIHNpemVfdCBfX2RlcXVlX2J1Zl9zaXplKHNpemVfdCBfX3NpemUpIHsKICByZXR1cm4g X19zaXplIDwgNTEyID8gc2l6ZV90KDUxMiAvIF9fc2l6ZSkgOiBzaXplX3QoMSk7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9SZWYsIGNsYXNzIF9QdHI+CnN0cnVjdCBfRGVxdWVfaXRl cmF0b3IgewogIHR5cGVkZWYgX0RlcXVlX2l0ZXJhdG9yPF9UcCwgX1RwJiwgX1RwKj4gaXRlcmF0 b3I7CiAgdHlwZWRlZiBfRGVxdWVfaXRlcmF0b3I8X1RwLCBjb25zdCBfVHAmLCBjb25zdCBfVHAq PiBjb25zdF9pdGVyYXRvcjsKICBzdGF0aWMgc2l6ZV90IF9TX2J1ZmZlcl9zaXplKCkgeyByZXR1 cm4gX19kZXF1ZV9idWZfc2l6ZShzaXplb2YoX1RwKSk7IH0KCiAgdHlwZWRlZiByYW5kb21fYWNj ZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90 eXBlOwogIHR5cGVkZWYgX1B0ciBwb2ludGVyOwogIHR5cGVkZWYgX1JlZiByZWZlcmVuY2U7CiAg dHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2Vf dHlwZTsKICB0eXBlZGVmIF9UcCoqIF9NYXBfcG9pbnRlcjsKCiAgdHlwZWRlZiBfRGVxdWVfaXRl cmF0b3IgX1NlbGY7CgogIF9UcCogX01fY3VyOwogIF9UcCogX01fZmlyc3Q7CiAgX1RwKiBfTV9s YXN0OwogIF9NYXBfcG9pbnRlciBfTV9ub2RlOwoKICBfRGVxdWVfaXRlcmF0b3IoX1RwKiBfX3gs IF9NYXBfcG9pbnRlciBfX3kpCiAgICA6IF9NX2N1cihfX3gpLCBfTV9maXJzdCgqX195KSwKICAg ICAgX01fbGFzdCgqX195ICsgX1NfYnVmZmVyX3NpemUoKSksIF9NX25vZGUoX195KSB7fQogIF9E ZXF1ZV9pdGVyYXRvcigpIDogX01fY3VyKDApLCBfTV9maXJzdCgwKSwgX01fbGFzdCgwKSwgX01f bm9kZSgwKSB7fQogIF9EZXF1ZV9pdGVyYXRvcihjb25zdCBpdGVyYXRvciYgX194KQogICAgOiBf TV9jdXIoX194Ll9NX2N1ciksIF9NX2ZpcnN0KF9feC5fTV9maXJzdCksCiAgICAgIF9NX2xhc3Qo X194Ll9NX2xhc3QpLCBfTV9ub2RlKF9feC5fTV9ub2RlKSB7fQoKICByZWZlcmVuY2Ugb3BlcmF0 b3IqKCkgY29uc3QgeyByZXR1cm4gKl9NX2N1cjsgfQogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNv bnN0IHsgcmV0dXJuIF9NX2N1cjsgfQoKICBkaWZmZXJlbmNlX3R5cGUgb3BlcmF0b3ItKGNvbnN0 IF9TZWxmJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBkaWZmZXJlbmNlX3R5cGUoX1NfYnVmZmVy X3NpemUoKSkgKiAoX01fbm9kZSAtIF9feC5fTV9ub2RlIC0gMSkgKwogICAgICAoX01fY3VyIC0g X01fZmlyc3QpICsgKF9feC5fTV9sYXN0IC0gX194Ll9NX2N1cik7CiAgfQoKICBfU2VsZiYgb3Bl cmF0b3IrKygpIHsKICAgICsrX01fY3VyOwogICAgaWYgKF9NX2N1ciA9PSBfTV9sYXN0KSB7CiAg ICAgIF9NX3NldF9ub2RlKF9NX25vZGUgKyAxKTsKICAgICAgX01fY3VyID0gX01fZmlyc3Q7CiAg ICB9CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yKysoaW50KSB7CiAgICBf U2VsZiBfX3RtcCA9ICp0aGlzOwogICAgKysqdGhpczsKICAgIHJldHVybiBfX3RtcDsKICB9Cgog IF9TZWxmJiBvcGVyYXRvci0tKCkgewogICAgaWYgKF9NX2N1ciA9PSBfTV9maXJzdCkgewogICAg ICBfTV9zZXRfbm9kZShfTV9ub2RlIC0gMSk7CiAgICAgIF9NX2N1ciA9IF9NX2xhc3Q7CiAgICB9 CiAgICAtLV9NX2N1cjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3ItLShp bnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICAtLSp0aGlzOwogICAgcmV0dXJuIF9f dG1wOwogIH0KCiAgX1NlbGYmIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9fbikKICB7CiAg ICBkaWZmZXJlbmNlX3R5cGUgX19vZmZzZXQgPSBfX24gKyAoX01fY3VyIC0gX01fZmlyc3QpOwog ICAgaWYgKF9fb2Zmc2V0ID49IDAgJiYgX19vZmZzZXQgPCBkaWZmZXJlbmNlX3R5cGUoX1NfYnVm ZmVyX3NpemUoKSkpCiAgICAgIF9NX2N1ciArPSBfX247CiAgICBlbHNlIHsKICAgICAgZGlmZmVy ZW5jZV90eXBlIF9fbm9kZV9vZmZzZXQgPQogICAgICAgIF9fb2Zmc2V0ID4gMCA/IF9fb2Zmc2V0 IC8gZGlmZmVyZW5jZV90eXBlKF9TX2J1ZmZlcl9zaXplKCkpCiAgICAgICAgICAgICAgICAgICA6 IC1kaWZmZXJlbmNlX3R5cGUoKC1fX29mZnNldCAtIDEpIC8gX1NfYnVmZmVyX3NpemUoKSkgLSAx OwogICAgICBfTV9zZXRfbm9kZShfTV9ub2RlICsgX19ub2RlX29mZnNldCk7CiAgICAgIF9NX2N1 ciA9IF9NX2ZpcnN0ICsKICAgICAgICAoX19vZmZzZXQgLSBfX25vZGVfb2Zmc2V0ICogZGlmZmVy ZW5jZV90eXBlKF9TX2J1ZmZlcl9zaXplKCkpKTsKICAgIH0KICAgIHJldHVybiAqdGhpczsKICB9 CgogIF9TZWxmIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdAogIHsKICAgIF9T ZWxmIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgKz0gX19uOwogIH0KCiAgX1NlbGYm IG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIF9fbikgeyByZXR1cm4gKnRoaXMgKz0gLV9fbjsg fQoKICBfU2VsZiBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgewogICAgX1Nl bGYgX190bXAgPSAqdGhpczsKICAgIHJldHVybiBfX3RtcCAtPSBfX247CiAgfQoKICByZWZlcmVu Y2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7IHJldHVybiAqKCp0aGlz ICsgX19uKTsgfQoKICBib29sIG9wZXJhdG9yPT0oY29uc3QgX1NlbGYmIF9feCkgY29uc3QgeyBy ZXR1cm4gX01fY3VyID09IF9feC5fTV9jdXI7IH0KICBib29sIG9wZXJhdG9yIT0oY29uc3QgX1Nl bGYmIF9feCkgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBfX3gpOyB9CiAgYm9vbCBvcGVyYXRv cjwoY29uc3QgX1NlbGYmIF9feCkgY29uc3QgewogICAgcmV0dXJuIChfTV9ub2RlID09IF9feC5f TV9ub2RlKSA/CiAgICAgIChfTV9jdXIgPCBfX3guX01fY3VyKSA6IChfTV9ub2RlIDwgX194Ll9N X25vZGUpOwogIH0KICBib29sIG9wZXJhdG9yPihjb25zdCBfU2VsZiYgX194KSBjb25zdCB7IHJl dHVybiBfX3ggPCAqdGhpczsgfQogIGJvb2wgb3BlcmF0b3I8PShjb25zdCBfU2VsZiYgX194KSBj b25zdCB7IHJldHVybiAhKF9feCA8ICp0aGlzKTsgfQogIGJvb2wgb3BlcmF0b3I+PShjb25zdCBf U2VsZiYgX194KSBjb25zdCB7IHJldHVybiAhKCp0aGlzIDwgX194KTsgfQoKICB2b2lkIF9NX3Nl dF9ub2RlKF9NYXBfcG9pbnRlciBfX25ld19ub2RlKSB7CiAgICBfTV9ub2RlID0gX19uZXdfbm9k ZTsKICAgIF9NX2ZpcnN0ID0gKl9fbmV3X25vZGU7CiAgICBfTV9sYXN0ID0gX01fZmlyc3QgKyBk aWZmZXJlbmNlX3R5cGUoX1NfYnVmZmVyX3NpemUoKSk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNz IF9UcCwgY2xhc3MgX1JlZiwgY2xhc3MgX1B0cj4KaW5saW5lIF9EZXF1ZV9pdGVyYXRvcjxfVHAs IF9SZWYsIF9QdHI+Cm9wZXJhdG9yKyhwdHJkaWZmX3QgX19uLCBjb25zdCBfRGVxdWVfaXRlcmF0 b3I8X1RwLCBfUmVmLCBfUHRyPiYgX194KQp7CiAgcmV0dXJuIF9feCArIF9fbjsKfQojIDIzOCAi L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9kZXF1ZS5oIiAzCnRlbXBsYXRlIDxj bGFzcyBfVHAsIGNsYXNzIF9BbGxvYywgYm9vbCBfX2lzX3N0YXRpYz4KY2xhc3MgX0RlcXVlX2Fs bG9jX2Jhc2UgewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCxf QWxsb2M+OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBn ZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fbm9kZV9hbGxvY2F0b3I7IH0KCiAgX0Rl cXVlX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgIDogX01fbm9kZV9h bGxvY2F0b3IoX19hKSwgX01fbWFwX2FsbG9jYXRvcihfX2EpLAogICAgICBfTV9tYXAoMCksIF9N X21hcF9zaXplKDApCiAge30KCnByb3RlY3RlZDoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190 cmFpdHM8X1RwKiwgX0FsbG9jPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIF9NYXBfYWxsb2Nh dG9yX3R5cGU7CgogIGFsbG9jYXRvcl90eXBlIF9NX25vZGVfYWxsb2NhdG9yOwogIF9NYXBfYWxs b2NhdG9yX3R5cGUgX01fbWFwX2FsbG9jYXRvcjsKCiAgX1RwKiBfTV9hbGxvY2F0ZV9ub2RlKCkg ewogICAgcmV0dXJuIF9NX25vZGVfYWxsb2NhdG9yLmFsbG9jYXRlKF9fZGVxdWVfYnVmX3NpemUo c2l6ZW9mKF9UcCkpKTsKICB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlX25vZGUoX1RwKiBfX3ApIHsK ICAgIF9NX25vZGVfYWxsb2NhdG9yLmRlYWxsb2NhdGUoX19wLCBfX2RlcXVlX2J1Zl9zaXplKHNp emVvZihfVHApKSk7CiAgfQogIF9UcCoqIF9NX2FsbG9jYXRlX21hcChzaXplX3QgX19uKQogICAg eyByZXR1cm4gX01fbWFwX2FsbG9jYXRvci5hbGxvY2F0ZShfX24pOyB9CiAgdm9pZCBfTV9kZWFs bG9jYXRlX21hcChfVHAqKiBfX3AsIHNpemVfdCBfX24pCiAgICB7IF9NX21hcF9hbGxvY2F0b3Iu ZGVhbGxvY2F0ZShfX3AsIF9fbik7IH0KCiAgX1RwKiogX01fbWFwOwogIHNpemVfdCBfTV9tYXBf c2l6ZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmNsYXNzIF9EZXF1 ZV9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLCB0cnVlPgp7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVu YW1lIF9BbGxvY190cmFpdHM8X1RwLF9BbGxvYz46OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90 eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxv Y2F0b3JfdHlwZSgpOyB9CgogIF9EZXF1ZV9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBl JikgOiBfTV9tYXAoMCksIF9NX21hcF9zaXplKDApIHt9Cgpwcm90ZWN0ZWQ6CiAgdHlwZWRlZiB0 eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X0FsbG9jX3R5cGUgX05vZGVfYWxs b2NfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwKiwgX0FsbG9jPjo6 X0FsbG9jX3R5cGUgX01hcF9hbGxvY190eXBlOwoKICBfVHAqIF9NX2FsbG9jYXRlX25vZGUoKSB7 CiAgICByZXR1cm4gX05vZGVfYWxsb2NfdHlwZTo6YWxsb2NhdGUoX19kZXF1ZV9idWZfc2l6ZShz aXplb2YoX1RwKSkpOwogIH0KICB2b2lkIF9NX2RlYWxsb2NhdGVfbm9kZShfVHAqIF9fcCkgewog ICAgX05vZGVfYWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfX3AsIF9fZGVxdWVfYnVmX3NpemUoc2l6 ZW9mKF9UcCkpKTsKICB9CiAgX1RwKiogX01fYWxsb2NhdGVfbWFwKHNpemVfdCBfX24pCiAgICB7 IHJldHVybiBfTWFwX2FsbG9jX3R5cGU6OmFsbG9jYXRlKF9fbik7IH0KICB2b2lkIF9NX2RlYWxs b2NhdGVfbWFwKF9UcCoqIF9fcCwgc2l6ZV90IF9fbikKICAgIHsgX01hcF9hbGxvY190eXBlOjpk ZWFsbG9jYXRlKF9fcCwgX19uKTsgfQoKICBfVHAqKiBfTV9tYXA7CiAgc2l6ZV90IF9NX21hcF9z aXplOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpjbGFzcyBfRGVxdWVf YmFzZQogIDogcHVibGljIF9EZXF1ZV9hbGxvY19iYXNlPF9UcCxfQWxsb2MsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjpfU19pbnN0YW5j ZWxlc3M+CnsKcHVibGljOgogIHR5cGVkZWYgX0RlcXVlX2FsbG9jX2Jhc2U8X1RwLF9BbGxvYywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6 X1NfaW5zdGFuY2VsZXNzPgogICAgICAgICAgX0Jhc2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFz ZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgdHlwZWRlZiBfRGVxdWVfaXRlcmF0 b3I8X1RwLF9UcCYsX1RwKj4gaXRlcmF0b3I7CiAgdHlwZWRlZiBfRGVxdWVfaXRlcmF0b3I8X1Rw LGNvbnN0IF9UcCYsY29uc3QgX1RwKj4gY29uc3RfaXRlcmF0b3I7CgogIF9EZXF1ZV9iYXNlKGNv bnN0IGFsbG9jYXRvcl90eXBlJiBfX2EsIHNpemVfdCBfX251bV9lbGVtZW50cykKICAgIDogX0Jh c2UoX19hKSwgX01fc3RhcnQoKSwgX01fZmluaXNoKCkKICAgIHsgX01faW5pdGlhbGl6ZV9tYXAo X19udW1fZWxlbWVudHMpOyB9CiAgX0RlcXVlX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9f YSkKICAgIDogX0Jhc2UoX19hKSwgX01fc3RhcnQoKSwgX01fZmluaXNoKCkge30KICB+X0RlcXVl X2Jhc2UoKTsKCnByb3RlY3RlZDoKICB2b2lkIF9NX2luaXRpYWxpemVfbWFwKHNpemVfdCk7CiAg dm9pZCBfTV9jcmVhdGVfbm9kZXMoX1RwKiogX19uc3RhcnQsIF9UcCoqIF9fbmZpbmlzaCk7CiAg dm9pZCBfTV9kZXN0cm95X25vZGVzKF9UcCoqIF9fbnN0YXJ0LCBfVHAqKiBfX25maW5pc2gpOwog IGVudW0geyBfU19pbml0aWFsX21hcF9zaXplID0gOCB9OwoKcHJvdGVjdGVkOgogIGl0ZXJhdG9y IF9NX3N0YXJ0OwogIGl0ZXJhdG9yIF9NX2ZpbmlzaDsKfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9U cCwgY2xhc3MgX0FsbG9jPgpfRGVxdWVfYmFzZTxfVHAsX0FsbG9jPjo6fl9EZXF1ZV9iYXNlKCkg ewogIGlmIChfTV9tYXApIHsKICAgIF9NX2Rlc3Ryb3lfbm9kZXMoX01fc3RhcnQuX01fbm9kZSwg X01fZmluaXNoLl9NX25vZGUgKyAxKTsKICAgIF9NX2RlYWxsb2NhdGVfbWFwKF9NX21hcCwgX01f bWFwX3NpemUpOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lk Cl9EZXF1ZV9iYXNlPF9UcCxfQWxsb2M+OjpfTV9pbml0aWFsaXplX21hcChzaXplX3QgX19udW1f ZWxlbWVudHMpCnsKICBzaXplX3QgX19udW1fbm9kZXMgPQogICAgX19udW1fZWxlbWVudHMgLyBf X2RlcXVlX2J1Zl9zaXplKHNpemVvZihfVHApKSArIDE7CgogIF9NX21hcF9zaXplID0gbWF4KChz aXplX3QpIF9TX2luaXRpYWxfbWFwX3NpemUsIF9fbnVtX25vZGVzICsgMik7CiAgX01fbWFwID0g X01fYWxsb2NhdGVfbWFwKF9NX21hcF9zaXplKTsKCiAgX1RwKiogX19uc3RhcnQgPSBfTV9tYXAg KyAoX01fbWFwX3NpemUgLSBfX251bV9ub2RlcykgLyAyOwogIF9UcCoqIF9fbmZpbmlzaCA9IF9f bnN0YXJ0ICsgX19udW1fbm9kZXM7CgogICAgICAgICAgICB7CiAgICBfTV9jcmVhdGVfbm9kZXMo X19uc3RhcnQsIF9fbmZpbmlzaCk7CiAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CgogIF9NX3N0YXJ0Ll9NX3NldF9ub2RlKF9fbnN0YXJ0KTsKICBfTV9m aW5pc2guX01fc2V0X25vZGUoX19uZmluaXNoIC0gMSk7CiAgX01fc3RhcnQuX01fY3VyID0gX01f c3RhcnQuX01fZmlyc3Q7CiAgX01fZmluaXNoLl9NX2N1ciA9IF9NX2ZpbmlzaC5fTV9maXJzdCAr CiAgICAgICAgICAgICAgIF9fbnVtX2VsZW1lbnRzICUgX19kZXF1ZV9idWZfc2l6ZShzaXplb2Yo X1RwKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBfRGVxdWVf YmFzZTxfVHAsX0FsbG9jPjo6X01fY3JlYXRlX25vZGVzKF9UcCoqIF9fbnN0YXJ0LCBfVHAqKiBf X25maW5pc2gpCnsKICBfVHAqKiBfX2N1cjsKICAgICAgICAgICAgewogICAgZm9yIChfX2N1ciA9 IF9fbnN0YXJ0OyBfX2N1ciA8IF9fbmZpbmlzaDsgKytfX2N1cikKICAgICAgKl9fY3VyID0gX01f YWxsb2NhdGVfbm9kZSgpOwogIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lk Cl9EZXF1ZV9iYXNlPF9UcCxfQWxsb2M+OjpfTV9kZXN0cm95X25vZGVzKF9UcCoqIF9fbnN0YXJ0 LCBfVHAqKiBfX25maW5pc2gpCnsKICBmb3IgKF9UcCoqIF9fbiA9IF9fbnN0YXJ0OyBfX24gPCBf X25maW5pc2g7ICsrX19uKQogICAgX01fZGVhbGxvY2F0ZV9ub2RlKCpfX24pOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8X1RwPiA+CmNsYXNzIGRlcXVl IDogcHJvdGVjdGVkIF9EZXF1ZV9iYXNlPF9UcCwgX0FsbG9jPiB7CgoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICB0eXBlZGVmIF9EZXF1 ZV9iYXNlPF9UcCwgX0FsbG9jPiBfQmFzZTsKcHVibGljOgogIHR5cGVkZWYgX1RwIHZhbHVlX3R5 cGU7CiAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgdmFsdWVf dHlwZSogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHZhbHVlX3R5cGUmIHJlZmVyZW5jZTsKICB0 eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIHNpemVf dCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICB0eXBl ZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICBhbGxv Y2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX0Jhc2U6OmdldF9hbGxv Y2F0b3IoKTsgfQoKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6Oml0ZXJhdG9yIGl0 ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0 ZXJhdG9yOwoKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0 X3JldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiBy ZXZlcnNlX2l0ZXJhdG9yOwoKcHJvdGVjdGVkOgogIHR5cGVkZWYgcG9pbnRlciogX01hcF9wb2lu dGVyOwogIHN0YXRpYyBzaXplX3QgX1NfYnVmZmVyX3NpemUoKSB7IHJldHVybiBfX2RlcXVlX2J1 Zl9zaXplKHNpemVvZihfVHApKTsgfQoKcHJvdGVjdGVkOgogIHVzaW5nIF9CYXNlOjpfTV9pbml0 aWFsaXplX21hcDsKICB1c2luZyBfQmFzZTo6X01fY3JlYXRlX25vZGVzOwogIHVzaW5nIF9CYXNl OjpfTV9kZXN0cm95X25vZGVzOwogIHVzaW5nIF9CYXNlOjpfTV9hbGxvY2F0ZV9ub2RlOwogIHVz aW5nIF9CYXNlOjpfTV9kZWFsbG9jYXRlX25vZGU7CiAgdXNpbmcgX0Jhc2U6Ol9NX2FsbG9jYXRl X21hcDsKICB1c2luZyBfQmFzZTo6X01fZGVhbGxvY2F0ZV9tYXA7CgogIHVzaW5nIF9CYXNlOjpf TV9tYXA7CiAgdXNpbmcgX0Jhc2U6Ol9NX21hcF9zaXplOwogIHVzaW5nIF9CYXNlOjpfTV9zdGFy dDsKICB1c2luZyBfQmFzZTo6X01fZmluaXNoOwoKcHVibGljOgogIGl0ZXJhdG9yIGJlZ2luKCkg eyByZXR1cm4gX01fc3RhcnQ7IH0KICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBfTV9maW5pc2g7 IH0KICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3N0YXJ0OyB9CiAg Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fZmluaXNoOyB9CgogIHJldmVy c2VfaXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihfTV9maW5pc2gp OyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihf TV9zdGFydCk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0CiAgICB7 IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKF9NX2ZpbmlzaCk7IH0KICBjb25zdF9yZXZl cnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVy YXRvcihfTV9zdGFydCk7IH0KCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikK ICAgIHsgcmV0dXJuIF9NX3N0YXJ0W2RpZmZlcmVuY2VfdHlwZShfX24pXTsgfQogIGNvbnN0X3Jl ZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7IHJldHVybiBfTV9z dGFydFtkaWZmZXJlbmNlX3R5cGUoX19uKV07IH0KCiAgdm9pZCBfTV9yYW5nZV9jaGVjayhzaXpl X3R5cGUgX19uKSBjb25zdCB7CiAgICBpZiAoX19uID49IHRoaXMtPnNpemUoKSkKICAgICAgX190 aHJvd19yYW5nZV9lcnJvcigiZGVxdWUiKTsKICB9CgogIHJlZmVyZW5jZSBhdChzaXplX3R5cGUg X19uKQogICAgeyBfTV9yYW5nZV9jaGVjayhfX24pOyByZXR1cm4gKCp0aGlzKVtfX25dOyB9CiAg Y29uc3RfcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7IF9NX3JhbmdlX2No ZWNrKF9fbik7IHJldHVybiAoKnRoaXMpW19fbl07IH0KCiAgcmVmZXJlbmNlIGZyb250KCkgeyBy ZXR1cm4gKl9NX3N0YXJ0OyB9CiAgcmVmZXJlbmNlIGJhY2soKSB7CiAgICBpdGVyYXRvciBfX3Rt cCA9IF9NX2ZpbmlzaDsKICAgIC0tX190bXA7CiAgICByZXR1cm4gKl9fdG1wOwogIH0KICBjb25z dF9yZWZlcmVuY2UgZnJvbnQoKSBjb25zdCB7IHJldHVybiAqX01fc3RhcnQ7IH0KICBjb25zdF9y ZWZlcmVuY2UgYmFjaygpIGNvbnN0IHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gX01fZmlu aXNoOwogICAgLS1fX3RtcDsKICAgIHJldHVybiAqX190bXA7CiAgfQoKICBzaXplX3R5cGUgc2l6 ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2ZpbmlzaCAtIF9NX3N0YXJ0OyB9CiAgc2l6ZV90eXBlIG1h eF9zaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKC0xKTsgfQogIGJvb2wgZW1wdHkoKSBj b25zdCB7IHJldHVybiBfTV9maW5pc2ggPT0gX01fc3RhcnQ7IH0KCnB1YmxpYzoKICBleHBsaWNp dCBkZXF1ZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAg IDogX0Jhc2UoX19hLCAwKSB7fQogIGRlcXVlKGNvbnN0IGRlcXVlJiBfX3gpIDogX0Jhc2UoX194 LmdldF9hbGxvY2F0b3IoKSwgX194LnNpemUoKSkKICAgIHsgdW5pbml0aWFsaXplZF9jb3B5KF9f eC5iZWdpbigpLCBfX3guZW5kKCksIF9NX3N0YXJ0KTsgfQogIGRlcXVlKHNpemVfdHlwZSBfX24s IGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsdWUsCiAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUm IF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpIDogX0Jhc2UoX19hLCBfX24pCiAgICB7IF9NX2ZpbGxf aW5pdGlhbGl6ZShfX3ZhbHVlKTsgfQogIGV4cGxpY2l0IGRlcXVlKHNpemVfdHlwZSBfX24pIDog X0Jhc2UoYWxsb2NhdG9yX3R5cGUoKSwgX19uKQogICAgeyBfTV9maWxsX2luaXRpYWxpemUodmFs dWVfdHlwZSgpKTsgfQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIGRlcXVl KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICBj b25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkgOiBfQmFzZShfX2Ep IHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50 ZWdyYWwgX0ludGVncmFsOwogICAgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfX2ZpcnN0LCBfX2xh c3QsIF9JbnRlZ3JhbCgpKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICB2b2lk IF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsIF9fdHJ1 ZV90eXBlKSB7CiAgICBfTV9pbml0aWFsaXplX21hcChfX24pOwogICAgX01fZmlsbF9pbml0aWFs aXplKF9feCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4KICB2b2lkIF9NX2lu aXRpYWxpemVfZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAgICBfTV9yYW5n ZV9pbml0aWFsaXplKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0 KSk7CiAgfQoKICB+ZGVxdWUoKSB7IGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7IH0KCiAg ZGVxdWUmIG9wZXJhdG9yPSAoY29uc3QgZGVxdWUmIF9feCkgewogICAgY29uc3Qgc2l6ZV90eXBl IF9fbGVuID0gc2l6ZSgpOwogICAgaWYgKCZfX3ggIT0gdGhpcykgewogICAgICBpZiAoX19sZW4g Pj0gX194LnNpemUoKSkKICAgICAgICBlcmFzZShjb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCks IF9NX3N0YXJ0KSwgX01fZmluaXNoKTsKICAgICAgZWxzZSB7CiAgICAgICAgY29uc3RfaXRlcmF0 b3IgX19taWQgPSBfX3guYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX2xlbik7CiAgICAgICAg Y29weShfX3guYmVnaW4oKSwgX19taWQsIF9NX3N0YXJ0KTsKICAgICAgICBpbnNlcnQoX01fZmlu aXNoLCBfX21pZCwgX194LmVuZCgpKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuICp0aGlzOwog IH0KCiAgdm9pZCBzd2FwKGRlcXVlJiBfX3gpIHsKICAgIHN0ZDo6c3dhcChfTV9zdGFydCwgX194 Ll9NX3N0YXJ0KTsKICAgIHN0ZDo6c3dhcChfTV9maW5pc2gsIF9feC5fTV9maW5pc2gpOwogICAg c3RkOjpzd2FwKF9NX21hcCwgX194Ll9NX21hcCk7CiAgICBzdGQ6OnN3YXAoX01fbWFwX3NpemUs IF9feC5fTV9tYXBfc2l6ZSk7CiAgfQoKcHVibGljOgoKCgoKCiAgdm9pZCBfTV9maWxsX2Fzc2ln bihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsKSB7CiAgICBpZiAoX19uID4gc2l6ZSgp KSB7CiAgICAgIGZpbGwoYmVnaW4oKSwgZW5kKCksIF9fdmFsKTsKICAgICAgaW5zZXJ0KGVuZCgp LCBfX24gLSBzaXplKCksIF9fdmFsKTsKICAgIH0KICAgIGVsc2UgewogICAgICBlcmFzZShiZWdp bigpICsgX19uLCBlbmQoKSk7CiAgICAgIGZpbGwoYmVnaW4oKSwgZW5kKCksIF9fdmFsKTsKICAg IH0KICB9CgogIHZvaWQgYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWwpIHsK ICAgIF9NX2ZpbGxfYXNzaWduKF9fbiwgX192YWwpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9J bnB1dEl0ZXJhdG9yPgogIHZvaWQgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1 dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5w dXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICBfTV9hc3NpZ25fZGlzcGF0Y2go X19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgfQoKcHJpdmF0ZToKCiAgdGVtcGxhdGUg PGNsYXNzIF9JbnRlZ2VyPgogIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwg X0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQogICAgeyBfTV9maWxsX2Fzc2lnbigoc2l6ZV90 eXBlKSBfX24sIChfVHApIF9fdmFsKTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0 b3I+CiAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lu cHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlw ZSkgewogICAgX01fYXNzaWduX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdv cnkoX19maXJzdCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZv aWQgX01fYXNzaWduX2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgogIHRlbXBs YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fYXNzaWduX2F1eChfRm9yd2Fy ZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgc2l6ZV90eXBlIF9fbGVuID0gMDsK ICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwogICAgaWYgKF9fbGVuID4gc2l6 ZSgpKSB7CiAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2ZpcnN0OwogICAgICBhZHZh bmNlKF9fbWlkLCBzaXplKCkpOwogICAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBiZWdpbigpKTsK ICAgICAgaW5zZXJ0KGVuZCgpLCBfX21pZCwgX19sYXN0KTsKICAgIH0KICAgIGVsc2UKICAgICAg ZXJhc2UoY29weShfX2ZpcnN0LCBfX2xhc3QsIGJlZ2luKCkpLCBlbmQoKSk7CiAgfQoKcHVibGlj OgoKICB2b2lkIHB1c2hfYmFjayhjb25zdCB2YWx1ZV90eXBlJiBfX3QpIHsKICAgIGlmIChfTV9m aW5pc2guX01fY3VyICE9IF9NX2ZpbmlzaC5fTV9sYXN0IC0gMSkgewogICAgICBjb25zdHJ1Y3Qo X01fZmluaXNoLl9NX2N1ciwgX190KTsKICAgICAgKytfTV9maW5pc2guX01fY3VyOwogICAgfQog ICAgZWxzZQogICAgICBfTV9wdXNoX2JhY2tfYXV4KF9fdCk7CiAgfQoKICB2b2lkIHB1c2hfYmFj aygpIHsKICAgIGlmIChfTV9maW5pc2guX01fY3VyICE9IF9NX2ZpbmlzaC5fTV9sYXN0IC0gMSkg ewogICAgICBjb25zdHJ1Y3QoX01fZmluaXNoLl9NX2N1cik7CiAgICAgICsrX01fZmluaXNoLl9N X2N1cjsKICAgIH0KICAgIGVsc2UKICAgICAgX01fcHVzaF9iYWNrX2F1eCgpOwogIH0KCiAgdm9p ZCBwdXNoX2Zyb250KGNvbnN0IHZhbHVlX3R5cGUmIF9fdCkgewogICAgaWYgKF9NX3N0YXJ0Ll9N X2N1ciAhPSBfTV9zdGFydC5fTV9maXJzdCkgewogICAgICBjb25zdHJ1Y3QoX01fc3RhcnQuX01f Y3VyIC0gMSwgX190KTsKICAgICAgLS1fTV9zdGFydC5fTV9jdXI7CiAgICB9CiAgICBlbHNlCiAg ICAgIF9NX3B1c2hfZnJvbnRfYXV4KF9fdCk7CiAgfQoKICB2b2lkIHB1c2hfZnJvbnQoKSB7CiAg ICBpZiAoX01fc3RhcnQuX01fY3VyICE9IF9NX3N0YXJ0Ll9NX2ZpcnN0KSB7CiAgICAgIGNvbnN0 cnVjdChfTV9zdGFydC5fTV9jdXIgLSAxKTsKICAgICAgLS1fTV9zdGFydC5fTV9jdXI7CiAgICB9 CiAgICBlbHNlCiAgICAgIF9NX3B1c2hfZnJvbnRfYXV4KCk7CiAgfQoKCiAgdm9pZCBwb3BfYmFj aygpIHsKICAgIGlmIChfTV9maW5pc2guX01fY3VyICE9IF9NX2ZpbmlzaC5fTV9maXJzdCkgewog ICAgICAtLV9NX2ZpbmlzaC5fTV9jdXI7CiAgICAgIGRlc3Ryb3koX01fZmluaXNoLl9NX2N1cik7 CiAgICB9CiAgICBlbHNlCiAgICAgIF9NX3BvcF9iYWNrX2F1eCgpOwogIH0KCiAgdm9pZCBwb3Bf ZnJvbnQoKSB7CiAgICBpZiAoX01fc3RhcnQuX01fY3VyICE9IF9NX3N0YXJ0Ll9NX2xhc3QgLSAx KSB7CiAgICAgIGRlc3Ryb3koX01fc3RhcnQuX01fY3VyKTsKICAgICAgKytfTV9zdGFydC5fTV9j dXI7CiAgICB9CiAgICBlbHNlCiAgICAgIF9NX3BvcF9mcm9udF9hdXgoKTsKICB9CgpwdWJsaWM6 CgogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBwb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYg X194KSB7CiAgICBpZiAocG9zaXRpb24uX01fY3VyID09IF9NX3N0YXJ0Ll9NX2N1cikgewogICAg ICBwdXNoX2Zyb250KF9feCk7CiAgICAgIHJldHVybiBfTV9zdGFydDsKICAgIH0KICAgIGVsc2Ug aWYgKHBvc2l0aW9uLl9NX2N1ciA9PSBfTV9maW5pc2guX01fY3VyKSB7CiAgICAgIHB1c2hfYmFj ayhfX3gpOwogICAgICBpdGVyYXRvciBfX3RtcCA9IF9NX2ZpbmlzaDsKICAgICAgLS1fX3RtcDsK ICAgICAgcmV0dXJuIF9fdG1wOwogICAgfQogICAgZWxzZSB7CiAgICAgIHJldHVybiBfTV9pbnNl cnRfYXV4KHBvc2l0aW9uLCBfX3gpOwogICAgfQogIH0KCiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJh dG9yIF9fcG9zaXRpb24pCiAgICB7IHJldHVybiBpbnNlcnQoX19wb3NpdGlvbiwgdmFsdWVfdHlw ZSgpKTsgfQoKICB2b2lkIGluc2VydChpdGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29u c3QgdmFsdWVfdHlwZSYgX194KQogICAgeyBfTV9maWxsX2luc2VydChfX3BvcywgX19uLCBfX3gp OyB9CgogIHZvaWQgX01fZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24s IGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0 b3I+CiAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wb3MsIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3Qs IF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdl cjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICBfTV9pbnNlcnRfZGlz cGF0Y2goX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogIH0KCiAgdGVtcGxh dGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZvaWQgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9f cG9zLCBfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAg ICBfX3RydWVfdHlwZSkgewogICAgX01fZmlsbF9pbnNlcnQoX19wb3MsIChzaXplX3R5cGUpIF9f biwgKHZhbHVlX3R5cGUpIF9feCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0 b3I+CiAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogICAgaW5zZXJ0 KF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwog IH0KCiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUsIGNvbnN0IHZhbHVlX3R5cGUm IF9feCkgewogICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgpOwogICAgaWYgKF9fbmV3 X3NpemUgPCBfX2xlbikKICAgICAgZXJhc2UoX01fc3RhcnQgKyBfX25ld19zaXplLCBfTV9maW5p c2gpOwogICAgZWxzZQogICAgICBpbnNlcnQoX01fZmluaXNoLCBfX25ld19zaXplIC0gX19sZW4s IF9feCk7CiAgfQoKICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgbmV3X3NpemUpIHsgcmVzaXplKG5l d19zaXplLCB2YWx1ZV90eXBlKCkpOyB9CgpwdWJsaWM6CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0 b3IgX19wb3MpIHsKICAgIGl0ZXJhdG9yIF9fbmV4dCA9IF9fcG9zOwogICAgKytfX25leHQ7CiAg ICBzaXplX3R5cGUgX19pbmRleCA9IF9fcG9zIC0gX01fc3RhcnQ7CiAgICBpZiAoX19pbmRleCA8 IChzaXplKCkgPj4gMSkpIHsKICAgICAgY29weV9iYWNrd2FyZChfTV9zdGFydCwgX19wb3MsIF9f bmV4dCk7CiAgICAgIHBvcF9mcm9udCgpOwogICAgfQogICAgZWxzZSB7CiAgICAgIGNvcHkoX19u ZXh0LCBfTV9maW5pc2gsIF9fcG9zKTsKICAgICAgcG9wX2JhY2soKTsKICAgIH0KICAgIHJldHVy biBfTV9zdGFydCArIF9faW5kZXg7CiAgfQoKICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX2Zp cnN0LCBpdGVyYXRvciBfX2xhc3QpOwogIHZvaWQgY2xlYXIoKTsKCnByb3RlY3RlZDoKCiAgdm9p ZCBfTV9maWxsX2luaXRpYWxpemUoY29uc3QgdmFsdWVfdHlwZSYgX192YWx1ZSk7CgogIHRlbXBs YXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luaXRpYWxpemUoX0lu cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh cmRJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luaXRpYWxpemUoX0ZvcndhcmRJdGVyYXRvciBf X2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg Zm9yd2FyZF9pdGVyYXRvcl90YWcpOwoKcHJvdGVjdGVkOgoKICB2b2lkIF9NX3B1c2hfYmFja19h dXgoY29uc3QgdmFsdWVfdHlwZSYpOwogIHZvaWQgX01fcHVzaF9iYWNrX2F1eCgpOwogIHZvaWQg X01fcHVzaF9mcm9udF9hdXgoY29uc3QgdmFsdWVfdHlwZSYpOwogIHZvaWQgX01fcHVzaF9mcm9u dF9hdXgoKTsKICB2b2lkIF9NX3BvcF9iYWNrX2F1eCgpOwogIHZvaWQgX01fcG9wX2Zyb250X2F1 eCgpOwoKcHJvdGVjdGVkOgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9p ZCBpbnNlcnQoaXRlcmF0b3IgX19wb3MsIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0 ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOwoKICB0ZW1w bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICB2b2lkIGluc2VydChpdGVyYXRvciBfX3Bv cywKICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0 b3IgX19sYXN0LAogICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKTsKCiAgaXRlcmF0 b3IgX01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3BvcywgY29uc3QgdmFsdWVfdHlwZSYgX194KTsK ICBpdGVyYXRvciBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zKTsKICB2b2lkIF9NX2luc2Vy dF9hdXgoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9f eCk7CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01faW5zZXJ0 X2F1eChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRv ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg c2l6ZV90eXBlIF9fbik7CgogIGl0ZXJhdG9yIF9NX3Jlc2VydmVfZWxlbWVudHNfYXRfZnJvbnQo c2l6ZV90eXBlIF9fbikgewogICAgc2l6ZV90eXBlIF9fdmFjYW5jaWVzID0gX01fc3RhcnQuX01f Y3VyIC0gX01fc3RhcnQuX01fZmlyc3Q7CiAgICBpZiAoX19uID4gX192YWNhbmNpZXMpCiAgICAg IF9NX25ld19lbGVtZW50c19hdF9mcm9udChfX24gLSBfX3ZhY2FuY2llcyk7CiAgICByZXR1cm4g X01fc3RhcnQgLSBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICB9CgogIGl0ZXJhdG9yIF9NX3Jlc2Vy dmVfZWxlbWVudHNfYXRfYmFjayhzaXplX3R5cGUgX19uKSB7CiAgICBzaXplX3R5cGUgX192YWNh bmNpZXMgPSAoX01fZmluaXNoLl9NX2xhc3QgLSBfTV9maW5pc2guX01fY3VyKSAtIDE7CiAgICBp ZiAoX19uID4gX192YWNhbmNpZXMpCiAgICAgIF9NX25ld19lbGVtZW50c19hdF9iYWNrKF9fbiAt IF9fdmFjYW5jaWVzKTsKICAgIHJldHVybiBfTV9maW5pc2ggKyBkaWZmZXJlbmNlX3R5cGUoX19u KTsKICB9CgogIHZvaWQgX01fbmV3X2VsZW1lbnRzX2F0X2Zyb250KHNpemVfdHlwZSBfX25ld19l bGVtZW50cyk7CiAgdm9pZCBfTV9uZXdfZWxlbWVudHNfYXRfYmFjayhzaXplX3R5cGUgX19uZXdf ZWxlbWVudHMpOwoKcHJvdGVjdGVkOgoKCgoKCiAgdm9pZCBfTV9yZXNlcnZlX21hcF9hdF9iYWNr IChzaXplX3R5cGUgX19ub2Rlc190b19hZGQgPSAxKSB7CiAgICBpZiAoX19ub2Rlc190b19hZGQg KyAxID4gX01fbWFwX3NpemUgLSAoX01fZmluaXNoLl9NX25vZGUgLSBfTV9tYXApKQogICAgICBf TV9yZWFsbG9jYXRlX21hcChfX25vZGVzX3RvX2FkZCwgZmFsc2UpOwogIH0KCiAgdm9pZCBfTV9y ZXNlcnZlX21hcF9hdF9mcm9udCAoc2l6ZV90eXBlIF9fbm9kZXNfdG9fYWRkID0gMSkgewogICAg aWYgKF9fbm9kZXNfdG9fYWRkID4gc2l6ZV90eXBlKF9NX3N0YXJ0Ll9NX25vZGUgLSBfTV9tYXAp KQogICAgICBfTV9yZWFsbG9jYXRlX21hcChfX25vZGVzX3RvX2FkZCwgdHJ1ZSk7CiAgfQoKICB2 b2lkIF9NX3JlYWxsb2NhdGVfbWFwKHNpemVfdHlwZSBfX25vZGVzX3RvX2FkZCwgYm9vbCBfX2Fk ZF9hdF9mcm9udCk7Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KdGVt cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CnZvaWQgZGVxdWU8X1RwLCBfQWxsb2M+CiAgOjpfTV9h c3NpZ25fYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIGlucHV0X2l0 ZXJhdG9yX3RhZykKewogIGl0ZXJhdG9yIF9fY3VyID0gYmVnaW4oKTsKICBmb3IgKCA7IF9fZmly c3QgIT0gX19sYXN0ICYmIF9fY3VyICE9IGVuZCgpOyArK19fY3VyLCArK19fZmlyc3QpCiAgICAq X19jdXIgPSAqX19maXJzdDsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICBlcmFzZShfX2N1 ciwgZW5kKCkpOwogIGVsc2UKICAgIGluc2VydChlbmQoKSwgX19maXJzdCwgX19sYXN0KTsKfQoK dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGRlcXVlPF9UcCwgX0FsbG9j Pjo6X01fZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCnsK ICBpZiAoX19wb3MuX01fY3VyID09IF9NX3N0YXJ0Ll9NX2N1cikgewogICAgaXRlcmF0b3IgX19u ZXdfc3RhcnQgPSBfTV9yZXNlcnZlX2VsZW1lbnRzX2F0X2Zyb250KF9fbik7CiAgICAgICAgICAg ICAgewogICAgICB1bmluaXRpYWxpemVkX2ZpbGwoX19uZXdfc3RhcnQsIF9NX3N0YXJ0LCBfX3gp OwogICAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0OwogICAgfQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog IH0KICBlbHNlIGlmIChfX3Bvcy5fTV9jdXIgPT0gX01fZmluaXNoLl9NX2N1cikgewogICAgaXRl cmF0b3IgX19uZXdfZmluaXNoID0gX01fcmVzZXJ2ZV9lbGVtZW50c19hdF9iYWNrKF9fbik7CiAg ICAgICAgICAgICAgewogICAgICB1bmluaXRpYWxpemVkX2ZpbGwoX01fZmluaXNoLCBfX25ld19m aW5pc2gsIF9feCk7CiAgICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgIH0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK ICB9CiAgZWxzZQogICAgX01faW5zZXJ0X2F1eChfX3BvcywgX19uLCBfX3gpOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIGRlcXVlPF9UcCxfQWxsb2M+Ojpp dGVyYXRvcgpkZXF1ZTxfVHAsX0FsbG9jPjo6ZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0 b3IgX19sYXN0KQp7CiAgaWYgKF9fZmlyc3QgPT0gX01fc3RhcnQgJiYgX19sYXN0ID09IF9NX2Zp bmlzaCkgewogICAgY2xlYXIoKTsKICAgIHJldHVybiBfTV9maW5pc2g7CiAgfQogIGVsc2Ugewog ICAgZGlmZmVyZW5jZV90eXBlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICBkaWZmZXJlbmNl X3R5cGUgX19lbGVtc19iZWZvcmUgPSBfX2ZpcnN0IC0gX01fc3RhcnQ7CiAgICBpZiAoc3RhdGlj X2Nhc3Q8c2l6ZV90eXBlPihfX2VsZW1zX2JlZm9yZSkgPCAoc2l6ZSgpIC0gX19uKSAvIDIpIHsK ICAgICAgY29weV9iYWNrd2FyZChfTV9zdGFydCwgX19maXJzdCwgX19sYXN0KTsKICAgICAgaXRl cmF0b3IgX19uZXdfc3RhcnQgPSBfTV9zdGFydCArIF9fbjsKICAgICAgZGVzdHJveShfTV9zdGFy dCwgX19uZXdfc3RhcnQpOwogICAgICBfTV9kZXN0cm95X25vZGVzKF9NX3N0YXJ0Ll9NX25vZGUs IF9fbmV3X3N0YXJ0Ll9NX25vZGUpOwogICAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0OwogICAg fQogICAgZWxzZSB7CiAgICAgIGNvcHkoX19sYXN0LCBfTV9maW5pc2gsIF9fZmlyc3QpOwogICAg ICBpdGVyYXRvciBfX25ld19maW5pc2ggPSBfTV9maW5pc2ggLSBfX247CiAgICAgIGRlc3Ryb3ko X19uZXdfZmluaXNoLCBfTV9maW5pc2gpOwogICAgICBfTV9kZXN0cm95X25vZGVzKF9fbmV3X2Zp bmlzaC5fTV9ub2RlICsgMSwgX01fZmluaXNoLl9NX25vZGUgKyAxKTsKICAgICAgX01fZmluaXNo ID0gX19uZXdfZmluaXNoOwogICAgfQogICAgcmV0dXJuIF9NX3N0YXJ0ICsgX19lbGVtc19iZWZv cmU7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgZGVxdWU8 X1RwLF9BbGxvYz46OmNsZWFyKCkKewogIGZvciAoX01hcF9wb2ludGVyIF9fbm9kZSA9IF9NX3N0 YXJ0Ll9NX25vZGUgKyAxOwogICAgICAgX19ub2RlIDwgX01fZmluaXNoLl9NX25vZGU7CiAgICAg ICArK19fbm9kZSkgewogICAgZGVzdHJveSgqX19ub2RlLCAqX19ub2RlICsgX1NfYnVmZmVyX3Np emUoKSk7CiAgICBfTV9kZWFsbG9jYXRlX25vZGUoKl9fbm9kZSk7CiAgfQoKICBpZiAoX01fc3Rh cnQuX01fbm9kZSAhPSBfTV9maW5pc2guX01fbm9kZSkgewogICAgZGVzdHJveShfTV9zdGFydC5f TV9jdXIsIF9NX3N0YXJ0Ll9NX2xhc3QpOwogICAgZGVzdHJveShfTV9maW5pc2guX01fZmlyc3Qs IF9NX2ZpbmlzaC5fTV9jdXIpOwogICAgX01fZGVhbGxvY2F0ZV9ub2RlKF9NX2ZpbmlzaC5fTV9m aXJzdCk7CiAgfQogIGVsc2UKICAgIGRlc3Ryb3koX01fc3RhcnQuX01fY3VyLCBfTV9maW5pc2gu X01fY3VyKTsKCiAgX01fZmluaXNoID0gX01fc3RhcnQ7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9U cCwgY2xhc3MgX0FsbG9jPgp2b2lkIGRlcXVlPF9UcCxfQWxsb2M+OjpfTV9maWxsX2luaXRpYWxp emUoY29uc3QgdmFsdWVfdHlwZSYgX192YWx1ZSkgewogIF9NYXBfcG9pbnRlciBfX2N1cjsKICAg ICAgICAgICAgewogICAgZm9yIChfX2N1ciA9IF9NX3N0YXJ0Ll9NX25vZGU7IF9fY3VyIDwgX01f ZmluaXNoLl9NX25vZGU7ICsrX19jdXIpCiAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbCgqX19jdXIs ICpfX2N1ciArIF9TX2J1ZmZlcl9zaXplKCksIF9fdmFsdWUpOwogICAgdW5pbml0aWFsaXplZF9m aWxsKF9NX2ZpbmlzaC5fTV9maXJzdCwgX01fZmluaXNoLl9NX2N1ciwgX192YWx1ZSk7CiAgfQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBf SW5wdXRJdGVyYXRvcj4Kdm9pZCBkZXF1ZTxfVHAsX0FsbG9jPjo6X01fcmFuZ2VfaW5pdGlhbGl6 ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICBfTV9pbml0aWFs aXplX21hcCgwKTsKICAgICAgICAgICAgewogICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsg KytfX2ZpcnN0KQogICAgICBwdXNoX2JhY2soKl9fZmlyc3QpOwogIH0KICAgICAgICAgICAgICAg ICAgICAgICA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUg PGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CnZvaWQgZGVxdWU8X1RwLF9BbGxvYz46Ol9NX3Jhbmdl X2luaXRpYWxpemUoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFn KQp7CiAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX24p OwogIF9NX2luaXRpYWxpemVfbWFwKF9fbik7CgogIF9NYXBfcG9pbnRlciBfX2N1cl9ub2RlOwog ICAgICAgICAgICB7CiAgICBmb3IgKF9fY3VyX25vZGUgPSBfTV9zdGFydC5fTV9ub2RlOwogICAg ICAgICBfX2N1cl9ub2RlIDwgX01fZmluaXNoLl9NX25vZGU7CiAgICAgICAgICsrX19jdXJfbm9k ZSkgewogICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkID0gX19maXJzdDsKICAgICAgYWR2YW5j ZShfX21pZCwgX1NfYnVmZmVyX3NpemUoKSk7CiAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX2Zp cnN0LCBfX21pZCwgKl9fY3VyX25vZGUpOwogICAgICBfX2ZpcnN0ID0gX19taWQ7CiAgICB9CiAg ICB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfTV9maW5pc2guX01fZmlyc3Qp OwogIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+ CnZvaWQgZGVxdWU8X1RwLF9BbGxvYz46Ol9NX3B1c2hfYmFja19hdXgoY29uc3QgdmFsdWVfdHlw ZSYgX190KQp7CiAgdmFsdWVfdHlwZSBfX3RfY29weSA9IF9fdDsKICBfTV9yZXNlcnZlX21hcF9h dF9iYWNrKCk7CiAgKihfTV9maW5pc2guX01fbm9kZSArIDEpID0gX01fYWxsb2NhdGVfbm9kZSgp OwogICAgICAgICAgICB7CiAgICBjb25zdHJ1Y3QoX01fZmluaXNoLl9NX2N1ciwgX190X2NvcHkp OwogICAgX01fZmluaXNoLl9NX3NldF9ub2RlKF9NX2ZpbmlzaC5fTV9ub2RlICsgMSk7CiAgICBf TV9maW5pc2guX01fY3VyID0gX01fZmluaXNoLl9NX2ZpcnN0OwogIH0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwp9CgoKdGVtcGxh dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGRlcXVlPF9UcCxfQWxsb2M+OjpfTV9w dXNoX2JhY2tfYXV4KCkKewogIF9NX3Jlc2VydmVfbWFwX2F0X2JhY2soKTsKICAqKF9NX2Zpbmlz aC5fTV9ub2RlICsgMSkgPSBfTV9hbGxvY2F0ZV9ub2RlKCk7CiAgICAgICAgICAgIHsKICAgIGNv bnN0cnVjdChfTV9maW5pc2guX01fY3VyKTsKICAgIF9NX2ZpbmlzaC5fTV9zZXRfbm9kZShfTV9m aW5pc2guX01fbm9kZSArIDEpOwogICAgX01fZmluaXNoLl9NX2N1ciA9IF9NX2ZpbmlzaC5fTV9m aXJzdDsKICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9p ZCBkZXF1ZTxfVHAsX0FsbG9jPjo6X01fcHVzaF9mcm9udF9hdXgoY29uc3QgdmFsdWVfdHlwZSYg X190KQp7CiAgdmFsdWVfdHlwZSBfX3RfY29weSA9IF9fdDsKICBfTV9yZXNlcnZlX21hcF9hdF9m cm9udCgpOwogICooX01fc3RhcnQuX01fbm9kZSAtIDEpID0gX01fYWxsb2NhdGVfbm9kZSgpOwog ICAgICAgICAgICB7CiAgICBfTV9zdGFydC5fTV9zZXRfbm9kZShfTV9zdGFydC5fTV9ub2RlIC0g MSk7CiAgICBfTV9zdGFydC5fTV9jdXIgPSBfTV9zdGFydC5fTV9sYXN0IC0gMTsKICAgIGNvbnN0 cnVjdChfTV9zdGFydC5fTV9jdXIsIF9fdF9jb3B5KTsKICB9CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cn0K Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgZGVxdWU8X1RwLF9BbGxv Yz46Ol9NX3B1c2hfZnJvbnRfYXV4KCkKewogIF9NX3Jlc2VydmVfbWFwX2F0X2Zyb250KCk7CiAg KihfTV9zdGFydC5fTV9ub2RlIC0gMSkgPSBfTV9hbGxvY2F0ZV9ub2RlKCk7CiAgICAgICAgICAg IHsKICAgIF9NX3N0YXJ0Ll9NX3NldF9ub2RlKF9NX3N0YXJ0Ll9NX25vZGUgLSAxKTsKICAgIF9N X3N0YXJ0Ll9NX2N1ciA9IF9NX3N0YXJ0Ll9NX2xhc3QgLSAxOwogICAgY29uc3RydWN0KF9NX3N0 YXJ0Ll9NX2N1cik7CiAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9U cCwgY2xhc3MgX0FsbG9jPgp2b2lkIGRlcXVlPF9UcCxfQWxsb2M+OjpfTV9wb3BfYmFja19hdXgo KQp7CiAgX01fZGVhbGxvY2F0ZV9ub2RlKF9NX2ZpbmlzaC5fTV9maXJzdCk7CiAgX01fZmluaXNo Ll9NX3NldF9ub2RlKF9NX2ZpbmlzaC5fTV9ub2RlIC0gMSk7CiAgX01fZmluaXNoLl9NX2N1ciA9 IF9NX2ZpbmlzaC5fTV9sYXN0IC0gMTsKICBkZXN0cm95KF9NX2ZpbmlzaC5fTV9jdXIpOwp9CgoK CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGRlcXVlPF9UcCxfQWxs b2M+OjpfTV9wb3BfZnJvbnRfYXV4KCkKewogIGRlc3Ryb3koX01fc3RhcnQuX01fY3VyKTsKICBf TV9kZWFsbG9jYXRlX25vZGUoX01fc3RhcnQuX01fZmlyc3QpOwogIF9NX3N0YXJ0Ll9NX3NldF9u b2RlKF9NX3N0YXJ0Ll9NX25vZGUgKyAxKTsKICBfTV9zdGFydC5fTV9jdXIgPSBfTV9zdGFydC5f TV9maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8 Y2xhc3MgX0lucHV0SXRlcmF0b3I+CnZvaWQgZGVxdWU8X1RwLF9BbGxvYz46Omluc2VydChpdGVy YXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9y IF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKewogIGNvcHkoX19maXJzdCwgX19sYXN0LCBpbnNl cnRlcigqdGhpcywgX19wb3MpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j PiB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4Kdm9pZApkZXF1ZTxfVHAsX0FsbG9j Pjo6aW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3 YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICBzaXplX3R5cGUgX19uID0g MDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbik7CiAgaWYgKF9fcG9zLl9NX2N1ciA9 PSBfTV9zdGFydC5fTV9jdXIpIHsKICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fcmVzZXJ2 ZV9lbGVtZW50c19hdF9mcm9udChfX24pOwogICAgICAgICAgICAgIHsKICAgICAgdW5pbml0aWFs aXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19uZXdfc3RhcnQpOwogICAgICBfTV9zdGFydCA9 IF9fbmV3X3N0YXJ0OwogICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIH0KICBlbHNlIGlmIChfX3Bv cy5fTV9jdXIgPT0gX01fZmluaXNoLl9NX2N1cikgewogICAgaXRlcmF0b3IgX19uZXdfZmluaXNo ID0gX01fcmVzZXJ2ZV9lbGVtZW50c19hdF9iYWNrKF9fbik7CiAgICAgICAgICAgICAgewogICAg ICB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfTV9maW5pc2gpOwogICAgICBf TV9maW5pc2ggPSBfX25ld19maW5pc2g7CiAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgfQogIGVsc2UKICAgIF9NX2lu c2VydF9hdXgoX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX19uKTsKfQoKdGVtcGxhdGUgPGNsYXNz IF9UcCwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBkZXF1ZTxfVHAsIF9BbGxvYz46Oml0ZXJhdG9y CmRlcXVlPF9UcCxfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zLCBjb25zdCB2 YWx1ZV90eXBlJiBfX3gpCnsKICBkaWZmZXJlbmNlX3R5cGUgX19pbmRleCA9IF9fcG9zIC0gX01f c3RhcnQ7CiAgdmFsdWVfdHlwZSBfX3hfY29weSA9IF9feDsKICBpZiAoc3RhdGljX2Nhc3Q8c2l6 ZV90eXBlPihfX2luZGV4KSA8IHNpemUoKSAvIDIpIHsKICAgIHB1c2hfZnJvbnQoZnJvbnQoKSk7 CiAgICBpdGVyYXRvciBfX2Zyb250MSA9IF9NX3N0YXJ0OwogICAgKytfX2Zyb250MTsKICAgIGl0 ZXJhdG9yIF9fZnJvbnQyID0gX19mcm9udDE7CiAgICArK19fZnJvbnQyOwogICAgX19wb3MgPSBf TV9zdGFydCArIF9faW5kZXg7CiAgICBpdGVyYXRvciBfX3BvczEgPSBfX3BvczsKICAgICsrX19w b3MxOwogICAgY29weShfX2Zyb250MiwgX19wb3MxLCBfX2Zyb250MSk7CiAgfQogIGVsc2Ugewog ICAgcHVzaF9iYWNrKGJhY2soKSk7CiAgICBpdGVyYXRvciBfX2JhY2sxID0gX01fZmluaXNoOwog ICAgLS1fX2JhY2sxOwogICAgaXRlcmF0b3IgX19iYWNrMiA9IF9fYmFjazE7CiAgICAtLV9fYmFj azI7CiAgICBfX3BvcyA9IF9NX3N0YXJ0ICsgX19pbmRleDsKICAgIGNvcHlfYmFja3dhcmQoX19w b3MsIF9fYmFjazIsIF9fYmFjazEpOwogIH0KICAqX19wb3MgPSBfX3hfY29weTsKICByZXR1cm4g X19wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgZGVx dWU8X1RwLF9BbGxvYz46Oml0ZXJhdG9yCmRlcXVlPF9UcCxfQWxsb2M+OjpfTV9pbnNlcnRfYXV4 KGl0ZXJhdG9yIF9fcG9zKQp7CiAgZGlmZmVyZW5jZV90eXBlIF9faW5kZXggPSBfX3BvcyAtIF9N X3N0YXJ0OwogIGlmIChzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9faW5kZXgpIDwgc2l6ZSgpIC8g MikgewogICAgcHVzaF9mcm9udChmcm9udCgpKTsKICAgIGl0ZXJhdG9yIF9fZnJvbnQxID0gX01f c3RhcnQ7CiAgICArK19fZnJvbnQxOwogICAgaXRlcmF0b3IgX19mcm9udDIgPSBfX2Zyb250MTsK ICAgICsrX19mcm9udDI7CiAgICBfX3BvcyA9IF9NX3N0YXJ0ICsgX19pbmRleDsKICAgIGl0ZXJh dG9yIF9fcG9zMSA9IF9fcG9zOwogICAgKytfX3BvczE7CiAgICBjb3B5KF9fZnJvbnQyLCBfX3Bv czEsIF9fZnJvbnQxKTsKICB9CiAgZWxzZSB7CiAgICBwdXNoX2JhY2soYmFjaygpKTsKICAgIGl0 ZXJhdG9yIF9fYmFjazEgPSBfTV9maW5pc2g7CiAgICAtLV9fYmFjazE7CiAgICBpdGVyYXRvciBf X2JhY2syID0gX19iYWNrMTsKICAgIC0tX19iYWNrMjsKICAgIF9fcG9zID0gX01fc3RhcnQgKyBf X2luZGV4OwogICAgY29weV9iYWNrd2FyZChfX3BvcywgX19iYWNrMiwgX19iYWNrMSk7CiAgfQog ICpfX3BvcyA9IHZhbHVlX3R5cGUoKTsKICByZXR1cm4gX19wb3M7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBkZXF1ZTxfVHAsX0FsbG9jPjo6X01faW5zZXJ0X2F1 eChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz aXplX3R5cGUgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHZhbHVlX3R5cGUmIF9feCkKewogIGNvbnN0IGRpZmZlcmVuY2VfdHlwZSBfX2VsZW1zX2JlZm9y ZSA9IF9fcG9zIC0gX01fc3RhcnQ7CiAgc2l6ZV90eXBlIF9fbGVuZ3RoID0gdGhpcy0+c2l6ZSgp OwogIHZhbHVlX3R5cGUgX194X2NvcHkgPSBfX3g7CiAgaWYgKF9fZWxlbXNfYmVmb3JlIDwgZGlm ZmVyZW5jZV90eXBlKF9fbGVuZ3RoIC8gMikpIHsKICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0g X01fcmVzZXJ2ZV9lbGVtZW50c19hdF9mcm9udChfX24pOwogICAgaXRlcmF0b3IgX19vbGRfc3Rh cnQgPSBfTV9zdGFydDsKICAgIF9fcG9zID0gX01fc3RhcnQgKyBfX2VsZW1zX2JlZm9yZTsKICAg ICAgICAgICAgICB7CiAgICAgIGlmIChfX2VsZW1zX2JlZm9yZSA+PSBkaWZmZXJlbmNlX3R5cGUo X19uKSkgewogICAgICAgIGl0ZXJhdG9yIF9fc3RhcnRfbiA9IF9NX3N0YXJ0ICsgZGlmZmVyZW5j ZV90eXBlKF9fbik7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9NX3N0YXJ0LCBfX3N0YXJ0 X24sIF9fbmV3X3N0YXJ0KTsKICAgICAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0OwogICAgICAg IGNvcHkoX19zdGFydF9uLCBfX3BvcywgX19vbGRfc3RhcnQpOwogICAgICAgIGZpbGwoX19wb3Mg LSBkaWZmZXJlbmNlX3R5cGUoX19uKSwgX19wb3MsIF9feF9jb3B5KTsKICAgICAgfQogICAgICBl bHNlIHsKICAgICAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9maWxsKF9NX3N0YXJ0LCBfX3Bvcywg X19uZXdfc3RhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9zdGFydCwg X194X2NvcHkpOwogICAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQ7CiAgICAgICAgZmlsbChf X29sZF9zdGFydCwgX19wb3MsIF9feF9jb3B5KTsKICAgICAgfQogICAgfQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwogIH0KICBlbHNlIHsKICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaCA9IF9NX3Jlc2VydmVf ZWxlbWVudHNfYXRfYmFjayhfX24pOwogICAgaXRlcmF0b3IgX19vbGRfZmluaXNoID0gX01fZmlu aXNoOwogICAgY29uc3QgZGlmZmVyZW5jZV90eXBlIF9fZWxlbXNfYWZ0ZXIgPQogICAgICBkaWZm ZXJlbmNlX3R5cGUoX19sZW5ndGgpIC0gX19lbGVtc19iZWZvcmU7CiAgICBfX3BvcyA9IF9NX2Zp bmlzaCAtIF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgICAgICAgewogICAgICBpZiAoX19lbGVtc19h ZnRlciA+IGRpZmZlcmVuY2VfdHlwZShfX24pKSB7CiAgICAgICAgaXRlcmF0b3IgX19maW5pc2hf biA9IF9NX2ZpbmlzaCAtIGRpZmZlcmVuY2VfdHlwZShfX24pOwogICAgICAgIHVuaW5pdGlhbGl6 ZWRfY29weShfX2ZpbmlzaF9uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmlu aXNoID0gX19uZXdfZmluaXNoOwogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3MsIF9fZmluaXNo X24sIF9fb2xkX2ZpbmlzaCk7CiAgICAgICAgZmlsbChfX3BvcywgX19wb3MgKyBkaWZmZXJlbmNl X3R5cGUoX19uKSwgX194X2NvcHkpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9fdW5p bml0aWFsaXplZF9maWxsX2NvcHkoX01fZmluaXNoLCBfX3BvcyArIGRpZmZlcmVuY2VfdHlwZShf X24pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX194X2NvcHksIF9fcG9zLCBf TV9maW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgICAgICBmaWxs KF9fcG9zLCBfX29sZF9maW5pc2gsIF9feF9jb3B5KTsKICAgICAgfQogICAgfQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIH0K fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0Zv cndhcmRJdGVyYXRvcj4Kdm9pZCBkZXF1ZTxfVHAsX0FsbG9jPjo6X01faW5zZXJ0X2F1eChpdGVy YXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2Fy ZEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZV90eXBlIF9fbikKewogIGNvbnN0IGRpZmZlcmVuY2VfdHlwZSBfX2VsZW1zYmVm b3JlID0gX19wb3MgLSBfTV9zdGFydDsKICBzaXplX3R5cGUgX19sZW5ndGggPSBzaXplKCk7CiAg aWYgKHN0YXRpY19jYXN0PHNpemVfdHlwZT4oX19lbGVtc2JlZm9yZSkgPCBfX2xlbmd0aCAvIDIp IHsKICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fcmVzZXJ2ZV9lbGVtZW50c19hdF9mcm9u dChfX24pOwogICAgaXRlcmF0b3IgX19vbGRfc3RhcnQgPSBfTV9zdGFydDsKICAgIF9fcG9zID0g X01fc3RhcnQgKyBfX2VsZW1zYmVmb3JlOwogICAgICAgICAgICAgIHsKICAgICAgaWYgKF9fZWxl bXNiZWZvcmUgPj0gZGlmZmVyZW5jZV90eXBlKF9fbikpIHsKICAgICAgICBpdGVyYXRvciBfX3N0 YXJ0X24gPSBfTV9zdGFydCArIGRpZmZlcmVuY2VfdHlwZShfX24pOwogICAgICAgIHVuaW5pdGlh bGl6ZWRfY29weShfTV9zdGFydCwgX19zdGFydF9uLCBfX25ld19zdGFydCk7CiAgICAgICAgX01f c3RhcnQgPSBfX25ld19zdGFydDsKICAgICAgICBjb3B5KF9fc3RhcnRfbiwgX19wb3MsIF9fb2xk X3N0YXJ0KTsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3MgLSBkaWZmZXJlbmNl X3R5cGUoX19uKSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJdGVyYXRv ciBfX21pZCA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZCwgZGlmZmVyZW5jZV90eXBl KF9fbikgLSBfX2VsZW1zYmVmb3JlKTsKICAgICAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9jb3B5 KF9NX3N0YXJ0LCBfX3BvcywgX19maXJzdCwgX19taWQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX25ld19zdGFydCk7CiAgICAgICAgX01fc3RhcnQgPSBfX25ld19zdGFydDsK ICAgICAgICBjb3B5KF9fbWlkLCBfX2xhc3QsIF9fb2xkX3N0YXJ0KTsKICAgICAgfQogICAgfQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwogIH0KICBlbHNlIHsKICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaCA9 IF9NX3Jlc2VydmVfZWxlbWVudHNfYXRfYmFjayhfX24pOwogICAgaXRlcmF0b3IgX19vbGRfZmlu aXNoID0gX01fZmluaXNoOwogICAgY29uc3QgZGlmZmVyZW5jZV90eXBlIF9fZWxlbXNhZnRlciA9 CiAgICAgIGRpZmZlcmVuY2VfdHlwZShfX2xlbmd0aCkgLSBfX2VsZW1zYmVmb3JlOwogICAgX19w b3MgPSBfTV9maW5pc2ggLSBfX2VsZW1zYWZ0ZXI7CiAgICAgICAgICAgICAgewogICAgICBpZiAo X19lbGVtc2FmdGVyID4gZGlmZmVyZW5jZV90eXBlKF9fbikpIHsKICAgICAgICBpdGVyYXRvciBf X2ZpbmlzaF9uID0gX01fZmluaXNoIC0gZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgICAgICAgdW5p bml0aWFsaXplZF9jb3B5KF9fZmluaXNoX24sIF9NX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAg ICBfTV9maW5pc2ggPSBfX25ld19maW5pc2g7CiAgICAgICAgY29weV9iYWNrd2FyZChfX3Bvcywg X19maW5pc2hfbiwgX19vbGRfZmluaXNoKTsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwg X19wb3MpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19t aWQgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWQsIF9fZWxlbXNhZnRlcik7CiAgICAg ICAgX191bmluaXRpYWxpemVkX2NvcHlfY29weShfX21pZCwgX19sYXN0LCBfX3BvcywgX01fZmlu aXNoLCBfTV9maW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgICAg ICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBfX3Bvcyk7CiAgICAgIH0KICAgIH0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICB9Cn0K CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBkZXF1ZTxfVHAsX0FsbG9j Pjo6X01fbmV3X2VsZW1lbnRzX2F0X2Zyb250KHNpemVfdHlwZSBfX25ld19lbGVtcykKewogIHNp emVfdHlwZSBfX25ld19ub2RlcwogICAgICA9IChfX25ld19lbGVtcyArIF9TX2J1ZmZlcl9zaXpl KCkgLSAxKSAvIF9TX2J1ZmZlcl9zaXplKCk7CiAgX01fcmVzZXJ2ZV9tYXBfYXRfZnJvbnQoX19u ZXdfbm9kZXMpOwogIHNpemVfdHlwZSBfX2k7CiAgICAgICAgICAgIHsKICAgIGZvciAoX19pID0g MTsgX19pIDw9IF9fbmV3X25vZGVzOyArK19faSkKICAgICAgKihfTV9zdGFydC5fTV9ub2RlIC0g X19pKSA9IF9NX2FsbG9jYXRlX25vZGUoKTsKICB9CgoKCgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgZGVxdWU8X1RwLF9BbGxvYz46Ol9NX25ld19lbGVtZW50 c19hdF9iYWNrKHNpemVfdHlwZSBfX25ld19lbGVtcykKewogIHNpemVfdHlwZSBfX25ld19ub2Rl cwogICAgICA9IChfX25ld19lbGVtcyArIF9TX2J1ZmZlcl9zaXplKCkgLSAxKSAvIF9TX2J1ZmZl cl9zaXplKCk7CiAgX01fcmVzZXJ2ZV9tYXBfYXRfYmFjayhfX25ld19ub2Rlcyk7CiAgc2l6ZV90 eXBlIF9faTsKICAgICAgICAgICAgewogICAgZm9yIChfX2kgPSAxOyBfX2kgPD0gX19uZXdfbm9k ZXM7ICsrX19pKQogICAgICAqKF9NX2ZpbmlzaC5fTV9ub2RlICsgX19pKSA9IF9NX2FsbG9jYXRl X25vZGUoKTsKICB9CgoKCgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+ CnZvaWQgZGVxdWU8X1RwLF9BbGxvYz46Ol9NX3JlYWxsb2NhdGVfbWFwKHNpemVfdHlwZSBfX25v ZGVzX3RvX2FkZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v bCBfX2FkZF9hdF9mcm9udCkKewogIHNpemVfdHlwZSBfX29sZF9udW1fbm9kZXMgPSBfTV9maW5p c2guX01fbm9kZSAtIF9NX3N0YXJ0Ll9NX25vZGUgKyAxOwogIHNpemVfdHlwZSBfX25ld19udW1f bm9kZXMgPSBfX29sZF9udW1fbm9kZXMgKyBfX25vZGVzX3RvX2FkZDsKCiAgX01hcF9wb2ludGVy IF9fbmV3X25zdGFydDsKICBpZiAoX01fbWFwX3NpemUgPiAyICogX19uZXdfbnVtX25vZGVzKSB7 CiAgICBfX25ld19uc3RhcnQgPSBfTV9tYXAgKyAoX01fbWFwX3NpemUgLSBfX25ld19udW1fbm9k ZXMpIC8gMgogICAgICAgICAgICAgICAgICAgICArIChfX2FkZF9hdF9mcm9udCA/IF9fbm9kZXNf dG9fYWRkIDogMCk7CiAgICBpZiAoX19uZXdfbnN0YXJ0IDwgX01fc3RhcnQuX01fbm9kZSkKICAg ICAgY29weShfTV9zdGFydC5fTV9ub2RlLCBfTV9maW5pc2guX01fbm9kZSArIDEsIF9fbmV3X25z dGFydCk7CiAgICBlbHNlCiAgICAgIGNvcHlfYmFja3dhcmQoX01fc3RhcnQuX01fbm9kZSwgX01f ZmluaXNoLl9NX25vZGUgKyAxLAogICAgICAgICAgICAgICAgICAgIF9fbmV3X25zdGFydCArIF9f b2xkX251bV9ub2Rlcyk7CiAgfQogIGVsc2UgewogICAgc2l6ZV90eXBlIF9fbmV3X21hcF9zaXpl ID0KICAgICAgX01fbWFwX3NpemUgKyBtYXgoX01fbWFwX3NpemUsIF9fbm9kZXNfdG9fYWRkKSAr IDI7CgogICAgX01hcF9wb2ludGVyIF9fbmV3X21hcCA9IF9NX2FsbG9jYXRlX21hcChfX25ld19t YXBfc2l6ZSk7CiAgICBfX25ld19uc3RhcnQgPSBfX25ld19tYXAgKyAoX19uZXdfbWFwX3NpemUg LSBfX25ld19udW1fbm9kZXMpIC8gMgogICAgICAgICAgICAgICAgICAgICAgICAgKyAoX19hZGRf YXRfZnJvbnQgPyBfX25vZGVzX3RvX2FkZCA6IDApOwogICAgY29weShfTV9zdGFydC5fTV9ub2Rl LCBfTV9maW5pc2guX01fbm9kZSArIDEsIF9fbmV3X25zdGFydCk7CiAgICBfTV9kZWFsbG9jYXRl X21hcChfTV9tYXAsIF9NX21hcF9zaXplKTsKCiAgICBfTV9tYXAgPSBfX25ld19tYXA7CiAgICBf TV9tYXBfc2l6ZSA9IF9fbmV3X21hcF9zaXplOwogIH0KCiAgX01fc3RhcnQuX01fc2V0X25vZGUo X19uZXdfbnN0YXJ0KTsKICBfTV9maW5pc2guX01fc2V0X25vZGUoX19uZXdfbnN0YXJ0ICsgX19v bGRfbnVtX25vZGVzIC0gMSk7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxv Yz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feCwK ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feSkgewog IHJldHVybiBfX3guc2l6ZSgpID09IF9feS5zaXplKCkgJiYKICAgICAgICAgZXF1YWwoX194LmJl Z2luKCksIF9feC5lbmQoKSwgX195LmJlZ2luKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj bGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBkZXF1ZTxfVHAsIF9BbGxv Yz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYg X195KSB7CiAgcmV0dXJuIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3gu ZW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9feS5iZWdpbigpLCBfX3ku ZW5kKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29s IG9wZXJhdG9yIT0oY29uc3QgZGVxdWU8X1RwLCBfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgZGVxdWU8X1RwLCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3gg PT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9v bCBvcGVyYXRvcj4oY29uc3QgZGVxdWU8X1RwLCBfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3kgPCBf X3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3Bl cmF0b3I8PShjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBkZXF1ZTxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feSA8IF9f eCk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVy YXRvcj49KGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGRlcXVlPF9UcCwgX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194IDwgX195 KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZCBzd2Fw KGRlcXVlPF9UcCxfQWxsb2M+JiBfX3gsIGRlcXVlPF9UcCxfQWxsb2M+JiBfX3kpIHsKICBfX3gu c3dhcChfX3kpOwp9Cgp9CiMgNjYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf c3RhY2suaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9zdGFj ay5oIiAxIDMKIyA2MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9zdGFjay5o IiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2NvbmNlcHRfY2hlY2suaCIg MSAzCiMgNjQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfc3RhY2suaCIgMiAz CgpuYW1lc3BhY2Ugc3RkCnsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwKICAgICAgICAgIGNsYXNz IF9TZXF1ZW5jZSA9IGRlcXVlPF9UcD4gPgpjbGFzcyBzdGFjazsKCnRlbXBsYXRlIDxjbGFzcyBf VHAsIGNsYXNzIF9TZXE+CmJvb2wgb3BlcmF0b3I9PShjb25zdCBzdGFjazxfVHAsX1NlcT4mIF9f eCwgY29uc3Qgc3RhY2s8X1RwLF9TZXE+JiBfX3kpOwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh c3MgX1NlcT4KYm9vbCBvcGVyYXRvcjwoY29uc3Qgc3RhY2s8X1RwLF9TZXE+JiBfX3gsIGNvbnN0 IHN0YWNrPF9UcCxfU2VxPiYgX195KTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfU2Vx dWVuY2U+CmNsYXNzIHN0YWNrCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgdHlwZWRlZiB0eXBlbmFtZSBfU2Vx dWVuY2U6OnZhbHVlX3R5cGUgX1NlcXVlbmNlX3ZhbHVlX3R5cGU7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDEsIGNsYXNzIF9TZXExPgogIGZyaWVuZCBib29sIG9wZXJh dG9yPT0gKGNvbnN0IHN0YWNrPF9UcDEsIF9TZXExPiYsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3Qgc3RhY2s8X1RwMSwgX1NlcTE+Jik7CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDEsIGNs YXNzIF9TZXExPgogIGZyaWVuZCBib29sIG9wZXJhdG9yPCAoY29uc3Qgc3RhY2s8X1RwMSwgX1Nl cTE+JiwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YWNrPF9UcDEsIF9TZXExPiYp OwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfU2VxdWVuY2U6OnZhbHVlX3R5cGUgdmFsdWVf dHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9TZXF1ZW5jZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsK ICB0eXBlZGVmIF9TZXF1ZW5jZSBjb250YWluZXJfdHlwZTsKCiAgdHlwZWRlZiB0eXBlbmFtZSBf U2VxdWVuY2U6OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfU2VxdWVu Y2U6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CnByb3RlY3RlZDoKICBfU2VxdWVu Y2UgYzsKcHVibGljOgogIHN0YWNrKCkgOiBjKCkge30KICBleHBsaWNpdCBzdGFjayhjb25zdCBf U2VxdWVuY2UmIF9fcykgOiBjKF9fcykge30KCiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJu IGMuZW1wdHkoKTsgfQogIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gYy5zaXplKCk7 IH0KICByZWZlcmVuY2UgdG9wKCkgeyByZXR1cm4gYy5iYWNrKCk7IH0KICBjb25zdF9yZWZlcmVu Y2UgdG9wKCkgY29uc3QgeyByZXR1cm4gYy5iYWNrKCk7IH0KICB2b2lkIHB1c2goY29uc3QgdmFs dWVfdHlwZSYgX194KSB7IGMucHVzaF9iYWNrKF9feCk7IH0KICB2b2lkIHBvcCgpIHsgYy5wb3Bf YmFjaygpOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfU2VxPgpib29sIG9wZXJh dG9yPT0oY29uc3Qgc3RhY2s8X1RwLF9TZXE+JiBfX3gsIGNvbnN0IHN0YWNrPF9UcCxfU2VxPiYg X195KQp7CiAgcmV0dXJuIF9feC5jID09IF9feS5jOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj bGFzcyBfU2VxPgpib29sIG9wZXJhdG9yPChjb25zdCBzdGFjazxfVHAsX1NlcT4mIF9feCwgY29u c3Qgc3RhY2s8X1RwLF9TZXE+JiBfX3kpCnsKICByZXR1cm4gX194LmMgPCBfX3kuYzsKfQoKdGVt cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1NlcT4KYm9vbCBvcGVyYXRvciE9KGNvbnN0IHN0YWNr PF9UcCxfU2VxPiYgX194LCBjb25zdCBzdGFjazxfVHAsX1NlcT4mIF9feSkKewogIHJldHVybiAh KF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfU2VxPgpib29sIG9w ZXJhdG9yPihjb25zdCBzdGFjazxfVHAsX1NlcT4mIF9feCwgY29uc3Qgc3RhY2s8X1RwLF9TZXE+ JiBfX3kpCnsKICByZXR1cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz cyBfU2VxPgpib29sIG9wZXJhdG9yPD0oY29uc3Qgc3RhY2s8X1RwLF9TZXE+JiBfX3gsIGNvbnN0 IHN0YWNrPF9UcCxfU2VxPiYgX195KQp7CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoKdGVtcGxh dGUgPGNsYXNzIF9UcCwgY2xhc3MgX1NlcT4KYm9vbCBvcGVyYXRvcj49KGNvbnN0IHN0YWNrPF9U cCxfU2VxPiYgX194LCBjb25zdCBzdGFjazxfVHAsX1NlcT4mIF9feSkKewogIHJldHVybiAhKF9f eCA8IF9feSk7Cn0KCn0KIyA2NyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9z dGFjay5oIiAyIDMKIyAzMiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9zdGFjayIgMiAzCiMg NDggInN0bGluY2wuaCIgMgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYWxnb3JpdGht IiAxIDMKIyAzMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9hbGdvcml0aG0iIDMKIyAxICIv dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2FsZ29yaXRobS5oIiAxIDMKIyA2MCAi L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9hbGdvcml0aG0uaCIgMwoKIyAxICIv dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDEgMwojIDYyICIv dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2FsZ29yaXRobS5oIiAyIDMKIyAxICIv dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAxIDMKIyA2MyAi L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9hbGdvcml0aG0uaCIgMiAzCiMgMSAi L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDEgMwoj IDY0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2FsZ29yaXRobS5oIiAyIDMK IyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RlbXBidWYuaCIgMSAzCiMg NjMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGVtcGJ1Zi5oIiAzCm5hbWVz cGFjZSBzdGQKewoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KcGFpcjxfVHAqLCBwdHJkaWZmX3Q+Cl9f Z2V0X3RlbXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVuLCBfVHAqKQp7CiAgaWYgKF9fbGVu ID4gcHRyZGlmZl90KDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKSkpCiAgICBfX2xlbiA9IDIxNDc0 ODM2NDcgLyBzaXplb2YoX1RwKTsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgX1RwKiBfX3Rt cCA9IChfVHAqKSBtYWxsb2MoKHNpemVfdClfX2xlbiAqIHNpemVvZihfVHApKTsKICAgIGlmIChf X3RtcCAhPSAwKQogICAgICByZXR1cm4gcGFpcjxfVHAqLCBwdHJkaWZmX3Q+KF9fdG1wLCBfX2xl bik7CiAgICBfX2xlbiAvPSAyOwogIH0KCiAgcmV0dXJuIHBhaXI8X1RwKiwgcHRyZGlmZl90Pigo X1RwKikwLCAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIHBhaXI8X1RwKiwgcHRy ZGlmZl90PiBnZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4pIHsKICByZXR1cm4g X19nZXRfdGVtcG9yYXJ5X2J1ZmZlcihfX2xlbiwgKF9UcCopIDApOwp9CgoKCgoKCnRlbXBsYXRl IDxjbGFzcyBfVHA+CmlubGluZSBwYWlyPF9UcCosIHB0cmRpZmZfdD4gZ2V0X3RlbXBvcmFyeV9i dWZmZXIocHRyZGlmZl90IF9fbGVuLCBfVHAqKSB7CiAgcmV0dXJuIF9fZ2V0X3RlbXBvcmFyeV9i dWZmZXIoX19sZW4sIChfVHAqKSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kdm9pZCByZXR1 cm5fdGVtcG9yYXJ5X2J1ZmZlcihfVHAqIF9fcCkgewogIGZyZWUoX19wKTsKfQoKdGVtcGxhdGUg PGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNsYXNzIF9UcD4KY2xhc3MgX1RlbXBvcmFyeV9idWZm ZXIgewpwcml2YXRlOgogIHB0cmRpZmZfdCBfTV9vcmlnaW5hbF9sZW47CiAgcHRyZGlmZl90IF9N X2xlbjsKICBfVHAqIF9NX2J1ZmZlcjsKCiAgdm9pZCBfTV9hbGxvY2F0ZV9idWZmZXIoKSB7CiAg ICBfTV9vcmlnaW5hbF9sZW4gPSBfTV9sZW47CiAgICBfTV9idWZmZXIgPSAwOwoKICAgIGlmIChf TV9sZW4gPiAocHRyZGlmZl90KSgyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCkpKQogICAgICBfTV9s ZW4gPSAyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCk7CgogICAgd2hpbGUgKF9NX2xlbiA+IDApIHsK ICAgICAgX01fYnVmZmVyID0gKF9UcCopIG1hbGxvYyhfTV9sZW4gKiBzaXplb2YoX1RwKSk7CiAg ICAgIGlmIChfTV9idWZmZXIpCiAgICAgICAgYnJlYWs7CiAgICAgIF9NX2xlbiAvPSAyOwogICAg fQogIH0KCiAgdm9pZCBfTV9pbml0aWFsaXplX2J1ZmZlcihjb25zdCBfVHAmLCBfX3RydWVfdHlw ZSkge30KICB2b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0IF9UcCYgdmFsLCBfX2ZhbHNl X3R5cGUpIHsKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2J1ZmZlciwgX01fbGVuLCB2YWwp OwogIH0KCnB1YmxpYzoKICBwdHJkaWZmX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2xlbjsg fQogIHB0cmRpZmZfdCByZXF1ZXN0ZWRfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX29yaWdpbmFs X2xlbjsgfQogIF9UcCogYmVnaW4oKSB7IHJldHVybiBfTV9idWZmZXI7IH0KICBfVHAqIGVuZCgp IHsgcmV0dXJuIF9NX2J1ZmZlciArIF9NX2xlbjsgfQoKICBfVGVtcG9yYXJ5X2J1ZmZlcihfRm9y d2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KSB7CgogICAgdHlw ZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46Omhhc190cml2aWFsX2RlZmF1bHRfY29u c3RydWN0b3IKICAgICAgICAgICAgX1RyaXZpYWw7CgogICAgICAgICAgICAgIHsKICAgICAgX01f bGVuID0gMDsKICAgICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfTV9sZW4pOwogICAgICBf TV9hbGxvY2F0ZV9idWZmZXIoKTsKICAgICAgaWYgKF9NX2xlbiA+IDApCiAgICAgICAgX01faW5p dGlhbGl6ZV9idWZmZXIoKl9fZmlyc3QsIF9Ucml2aWFsKCkpOwogICAgfQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgfQoKICB+ X1RlbXBvcmFyeV9idWZmZXIoKSB7CiAgICBkZXN0cm95KF9NX2J1ZmZlciwgX01fYnVmZmVyICsg X01fbGVuKTsKICAgIGZyZWUoX01fYnVmZmVyKTsKICB9Cgpwcml2YXRlOgoKICBfVGVtcG9yYXJ5 X2J1ZmZlcihjb25zdCBfVGVtcG9yYXJ5X2J1ZmZlciYpIHt9CiAgdm9pZCBvcGVyYXRvcj0oY29u c3QgX1RlbXBvcmFyeV9idWZmZXImKSB7fQp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ dGVyYXRvciwKICAgICAgICAgIGNsYXNzIF9UcAogICAgICAgICAgICAgICAgICAgID0gdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAg ID4Kc3RydWN0IHRlbXBvcmFyeV9idWZmZXIgOiBwdWJsaWMgX1RlbXBvcmFyeV9idWZmZXI8X0Zv cndhcmRJdGVyYXRvciwgX1RwPgp7CiAgdGVtcG9yYXJ5X2J1ZmZlcihfRm9yd2FyZEl0ZXJhdG9y IF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KQogICAgOiBfVGVtcG9yYXJ5X2J1ZmZl cjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+KF9fZmlyc3QsIF9fbGFzdCkge30KICB+dGVtcG9yYXJ5 X2J1ZmZlcigpIHt9Cn07Cgp9CiMgNjUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z dGRfYWxnb3JpdGhtLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z dGxfYWxnby5oIiAxIDMKIyA2MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9h bGdvLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2hlYXAuaCIg MSAzCiMgNjIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaGVhcC5oIiAzCm5h bWVzcGFjZSBzdGQKewoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBj bGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4Kdm9pZApfX3B1c2hfaGVhcChfUmFuZG9tQWNjZXNz SXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgX0Rpc3RhbmNlIF9faG9sZUluZGV4LCBfRGlz dGFuY2UgX190b3BJbmRleCwgX1RwIF9fdmFsdWUpCnsKICBfRGlzdGFuY2UgX19wYXJlbnQgPSAo X19ob2xlSW5kZXggLSAxKSAvIDI7CiAgd2hpbGUgKF9faG9sZUluZGV4ID4gX190b3BJbmRleCAm JiAqKF9fZmlyc3QgKyBfX3BhcmVudCkgPCBfX3ZhbHVlKSB7CiAgICAqKF9fZmlyc3QgKyBfX2hv bGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3BhcmVudCk7CiAgICBfX2hvbGVJbmRleCA9IF9fcGFy ZW50OwogICAgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgfQogICooX19maXJz dCArIF9faG9sZUluZGV4KSA9IF9fdmFsdWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj ZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZApfX3B1 c2hfaGVhcF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAg ICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfRGlzdGFuY2UqLCBfVHAqKQp7CiAgX19w dXNoX2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKChfX2xhc3QgLSBfX2ZpcnN0KSAtIDEpLCBfRGlz dGFuY2UoMCksCiAgICAgICAgICAgICAgX1RwKCooX19sYXN0IC0gMSkpKTsKfQoKdGVtcGxhdGUg PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KaW5saW5lIHZvaWQKcHVzaF9oZWFwKF9SYW5k b21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQp7 CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX19w dXNoX2hlYXBfYXV4KF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX19kaXN0YW5j ZV90eXBlKF9fZmlyc3QpLCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcCwKICAg ICAgICAgIGNsYXNzIF9Db21wYXJlPgp2b2lkCl9fcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVy YXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICAgICAgICAgIF9EaXN0YW5j ZSBfX3RvcEluZGV4LCBfVHAgX192YWx1ZSwgX0NvbXBhcmUgX19jb21wKQp7CiAgX0Rpc3RhbmNl IF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogIHdoaWxlIChfX2hvbGVJbmRleCA+ IF9fdG9wSW5kZXggJiYgX19jb21wKCooX19maXJzdCArIF9fcGFyZW50KSwgX192YWx1ZSkpIHsK ICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fcGFyZW50KTsKICAg IF9faG9sZUluZGV4ID0gX19wYXJlbnQ7CiAgICBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEp IC8gMjsKICB9CiAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX192YWx1ZTsKfQoKdGVtcGxh dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBhcmUsCiAgICAgICAg ICBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQKX19wdXNoX2hlYXBfYXV4 KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgX1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wLAogICAgICAgICAgICAgICAgX0Rp c3RhbmNlKiwgX1RwKikKewogIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZSgoX19sYXN0 IC0gX19maXJzdCkgLSAxKSwgX0Rpc3RhbmNlKDApLAogICAgICAgICAgICAgIF9UcCgqKF9fbGFz dCAtIDEpKSwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRv ciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkCnB1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRl cmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgIF9D b21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIF9f cHVzaF9oZWFwX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCwKICAgICAgICAgICAgICAgICAg X19kaXN0YW5jZV90eXBlKF9fZmlyc3QpLCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNz IF9UcD4Kdm9pZApfX2FkanVzdF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBf RGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuLCBfVHAg X192YWx1ZSkKewogIF9EaXN0YW5jZSBfX3RvcEluZGV4ID0gX19ob2xlSW5kZXg7CiAgX0Rpc3Rh bmNlIF9fc2Vjb25kQ2hpbGQgPSAyICogX19ob2xlSW5kZXggKyAyOwogIHdoaWxlIChfX3NlY29u ZENoaWxkIDwgX19sZW4pIHsKICAgIGlmICgqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKSA8ICoo X19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpKQogICAgICBfX3NlY29uZENoaWxkLS07CiAg ICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKTsK ICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZDsKICAgIF9fc2Vjb25kQ2hpbGQgPSAyICog KF9fc2Vjb25kQ2hpbGQgKyAxKTsKICB9CiAgaWYgKF9fc2Vjb25kQ2hpbGQgPT0gX19sZW4pIHsK ICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIChfX3NlY29uZENoaWxk IC0gMSkpOwogICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkIC0gMTsKICB9CiAgX19wdXNo X2hlYXAoX19maXJzdCwgX19ob2xlSW5kZXgsIF9fdG9wSW5kZXgsIF9fdmFsdWUpOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0 YW5jZT4KaW5saW5lIHZvaWQKX19wb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJz dCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICBfUmFuZG9tQWNjZXNz SXRlcmF0b3IgX19yZXN1bHQsIF9UcCBfX3ZhbHVlLCBfRGlzdGFuY2UqKQp7CiAgKl9fcmVzdWx0 ID0gKl9fZmlyc3Q7CiAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoMCksIF9EaXN0 YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX192YWx1ZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu ZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQKX19wb3BfaGVhcF9hdXgo X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xh c3QsCiAgICAgICAgICAgICAgIF9UcCopCnsKICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdCAt IDEsIF9fbGFzdCAtIDEsCiAgICAgICAgICAgICBfVHAoKihfX2xhc3QgLSAxKSksIF9fZGlzdGFu Y2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0 b3I+CmlubGluZSB2b2lkIHBvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAog ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQp7CgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX19wb3BfaGVh cF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2UsCiAgICAgICAg ICBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgp2b2lkCl9fYWRqdXN0X2hlYXAoX1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwKICAgICAgICAgICAg ICBfRGlzdGFuY2UgX19sZW4sIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXApCnsKICBfRGlz dGFuY2UgX190b3BJbmRleCA9IF9faG9sZUluZGV4OwogIF9EaXN0YW5jZSBfX3NlY29uZENoaWxk ID0gMiAqIF9faG9sZUluZGV4ICsgMjsKICB3aGlsZSAoX19zZWNvbmRDaGlsZCA8IF9fbGVuKSB7 CiAgICBpZiAoX19jb21wKCooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpLCAqKF9fZmlyc3QgKyAo X19zZWNvbmRDaGlsZCAtIDEpKSkpCiAgICAgIF9fc2Vjb25kQ2hpbGQtLTsKICAgICooX19maXJz dCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpOwogICAgX19ob2xl SW5kZXggPSBfX3NlY29uZENoaWxkOwogICAgX19zZWNvbmRDaGlsZCA9IDIgKiAoX19zZWNvbmRD aGlsZCArIDEpOwogIH0KICBpZiAoX19zZWNvbmRDaGlsZCA9PSBfX2xlbikgewogICAgKihfX2Zp cnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7CiAg ICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAxOwogIH0KICBfX3B1c2hfaGVhcChfX2Zp cnN0LCBfX2hvbGVJbmRleCwgX190b3BJbmRleCwgX192YWx1ZSwgX19jb21wKTsKfQoKdGVtcGxh dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFy ZSwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQKX19wb3BfaGVhcChfUmFu ZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwK ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19yZXN1bHQsIF9UcCBfX3ZhbHVlLCBf Q29tcGFyZSBfX2NvbXAsCiAgICAgICAgICAgX0Rpc3RhbmNlKikKewogICpfX3Jlc3VsdCA9ICpf X2ZpcnN0OwogIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKDApLCBfRGlzdGFuY2Uo X19sYXN0IC0gX19maXJzdCksCiAgICAgICAgICAgICAgICBfX3ZhbHVlLCBfX2NvbXApOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9D b21wYXJlPgppbmxpbmUgdm9pZApfX3BvcF9oZWFwX2F1eChfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig X19maXJzdCwKICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX1Rw KiwgX0NvbXBhcmUgX19jb21wKQp7CiAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QgLSAxLCBf X2xhc3QgLSAxLCBfVHAoKihfX2xhc3QgLSAxKSksIF9fY29tcCwKICAgICAgICAgICAgIF9fZGlz dGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl cmF0b3IsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZApwb3BfaGVhcChfUmFuZG9tQWNjZXNz SXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwg X0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAg X19wb3BfaGVhcF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCksIF9f Y29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9U cCwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkCl9fbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRv ciBfX2ZpcnN0LAogICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfVHAq LCBfRGlzdGFuY2UqKQp7CiAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAyKSByZXR1cm47CiAgX0Rp c3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICBfRGlzdGFuY2UgX19wYXJlbnQgPSAo X19sZW4gLSAyKS8yOwoKICB3aGlsZSAodHJ1ZSkgewogICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0 LCBfX3BhcmVudCwgX19sZW4sIF9UcCgqKF9fZmlyc3QgKyBfX3BhcmVudCkpKTsKICAgIGlmIChf X3BhcmVudCA9PSAwKSByZXR1cm47CiAgICBfX3BhcmVudC0tOwogIH0KfQoKdGVtcGxhdGUgPGNs YXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KaW5saW5lIHZvaWQKbWFrZV9oZWFwKF9SYW5kb21B Y2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQp7Cgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX19tYWtl X2hlYXAoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0 KSwgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B Y2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBhcmUsCiAgICAgICAgICBjbGFzcyBfVHAsIGNsYXNz IF9EaXN0YW5jZT4Kdm9pZApfX21ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJz dCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgX0NvbXBhcmUgX19j b21wLCBfVHAqLCBfRGlzdGFuY2UqKQp7CiAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAyKSByZXR1 cm47CiAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICBfRGlzdGFuY2UgX19w YXJlbnQgPSAoX19sZW4gLSAyKS8yOwoKICB3aGlsZSAodHJ1ZSkgewogICAgX19hZGp1c3RfaGVh cChfX2ZpcnN0LCBfX3BhcmVudCwgX19sZW4sIF9UcCgqKF9fZmlyc3QgKyBfX3BhcmVudCkpLAog ICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgaWYgKF9fcGFyZW50ID09IDApIHJldHVybjsK ICAgIF9fcGFyZW50LS07CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJh dG9yLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQKbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJ dGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwg X0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAg X19tYWtlX2hlYXAoX19maXJzdCwgX19sYXN0LCBfX2NvbXAsCiAgICAgICAgICAgICAgX192YWx1 ZV90eXBlKF9fZmlyc3QpLCBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgp2b2lkIHNvcnRfaGVhcChfUmFuZG9tQWNjZXNz SXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKewoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHdoaWxlIChfX2xh c3QgLSBfX2ZpcnN0ID4gMSkKICAgIHBvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdC0tKTsKfQoKdGVt cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBhcmU+CnZvaWQK c29ydF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgX1JhbmRv bUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwoKCiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAxKQogICAg cG9wX2hlYXAoX19maXJzdCwgX19sYXN0LS0sIF9fY29tcCk7Cn0KCn0KIyA2NCAiL3Vzci9sb2Nh bC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDIgMwoKCgpuYW1lc3BhY2Ugc3RkCnsK CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0IF9UcCYgX19tZWRpYW4oY29uc3Qg X1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBjb25zdCBfVHAmIF9fYykKewoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgaWYg KF9fYSA8IF9fYikKICAgIGlmIChfX2IgPCBfX2MpCiAgICAgIHJldHVybiBfX2I7CiAgICBlbHNl IGlmIChfX2EgPCBfX2MpCiAgICAgIHJldHVybiBfX2M7CiAgICBlbHNlCiAgICAgIHJldHVybiBf X2E7CiAgZWxzZSBpZiAoX19hIDwgX19jKQogICAgcmV0dXJuIF9fYTsKICBlbHNlIGlmIChfX2Ig PCBfX2MpCiAgICByZXR1cm4gX19jOwogIGVsc2UKICAgIHJldHVybiBfX2I7Cn0KCnRlbXBsYXRl IDxjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgY29uc3QgX1RwJgpfX21lZGlhbihj b25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIGNvbnN0IF9UcCYgX19jLCBfQ29tcGFyZSBf X2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgaWYgKF9fY29tcChfX2EsIF9fYikp CiAgICBpZiAoX19jb21wKF9fYiwgX19jKSkKICAgICAgcmV0dXJuIF9fYjsKICAgIGVsc2UgaWYg KF9fY29tcChfX2EsIF9fYykpCiAgICAgIHJldHVybiBfX2M7CiAgICBlbHNlCiAgICAgIHJldHVy biBfX2E7CiAgZWxzZSBpZiAoX19jb21wKF9fYSwgX19jKSkKICAgIHJldHVybiBfX2E7CiAgZWxz ZSBpZiAoX19jb21wKF9fYiwgX19jKSkKICAgIHJldHVybiBfX2M7CiAgZWxzZQogICAgcmV0dXJu IF9fYjsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRnVuY3Rpb24+Cl9G dW5jdGlvbiBmb3JfZWFjaChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBf RnVuY3Rpb24gX19mKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsr X19maXJzdCkKICAgIF9fZigqX19maXJzdCk7CiAgcmV0dXJuIF9fZjsKfQoKCgp0ZW1wbGF0ZSA8 Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1RwPgppbmxpbmUgX0lucHV0SXRlciBmaW5kKF9JbnB1 dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90 YWcpCnsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QgJiYgISgqX19maXJzdCA9PSBfX3ZhbCkp CiAgICArK19fZmlyc3Q7CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5w dXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgX0lucHV0SXRlciBmaW5kX2lmKF9JbnB1 dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRl cmF0b3JfdGFnKQp7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmICFfX3ByZWQoKl9fZmly c3QpKQogICAgKytfX2ZpcnN0OwogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcD4KX1JhbmRvbUFjY2Vzc0l0ZXIgZmluZChfUmFu ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICBy YW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKewogIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf UmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX3RyaXBfY291bnQKICAgID0gKF9f bGFzdCAtIF9fZmlyc3QpID4+IDI7CgogIGZvciAoIDsgX190cmlwX2NvdW50ID4gMCA7IC0tX190 cmlwX2NvdW50KSB7CiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0Owog ICAgKytfX2ZpcnN0OwoKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7 CiAgICArK19fZmlyc3Q7CgogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJz dDsKICAgICsrX19maXJzdDsKCiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2Zp cnN0OwogICAgKytfX2ZpcnN0OwogIH0KCiAgc3dpdGNoKF9fbGFzdCAtIF9fZmlyc3QpIHsKICBj YXNlIDM6CiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgKytf X2ZpcnN0OwogIGNhc2UgMjoKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmly c3Q7CiAgICArK19fZmlyc3Q7CiAgY2FzZSAxOgogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSBy ZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKICBjYXNlIDA6CiAgZGVmYXVsdDoKICAgIHJl dHVybiBfX2xhc3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNs YXNzIF9QcmVkaWNhdGU+Cl9SYW5kb21BY2Nlc3NJdGVyIGZpbmRfaWYoX1JhbmRvbUFjY2Vzc0l0 ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRv bV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQp7CiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5k b21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fdHJpcF9jb3VudAogICAgPSAoX19sYXN0 IC0gX19maXJzdCkgPj4gMjsKCiAgZm9yICggOyBfX3RyaXBfY291bnQgPiAwIDsgLS1fX3RyaXBf Y291bnQpIHsKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICsr X19maXJzdDsKCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAr K19fZmlyc3Q7CgogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAg KytfX2ZpcnN0OwoKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAg ICsrX19maXJzdDsKICB9CgogIHN3aXRjaChfX2xhc3QgLSBfX2ZpcnN0KSB7CiAgY2FzZSAzOgog ICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0Owog IGNhc2UgMjoKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICsr X19maXJzdDsKICBjYXNlIDE6CiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmly c3Q7CiAgICArK19fZmlyc3Q7CiAgY2FzZSAwOgogIGRlZmF1bHQ6CiAgICByZXR1cm4gX19sYXN0 OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIF9J bnB1dEl0ZXIgZmluZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpCnsKCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CgogIHJldHVybiBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9faXRlcmF0b3JfY2F0 ZWdvcnkoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1By ZWRpY2F0ZT4KaW5saW5lIF9JbnB1dEl0ZXIgZmluZF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9J bnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19w cmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CgogIHJldHVybiBmaW5kX2lmKF9fZmlyc3QsIF9fbGFzdCwg X19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xh c3MgX0ZvcndhcmRJdGVyPgpfRm9yd2FyZEl0ZXIgYWRqYWNlbnRfZmluZChfRm9yd2FyZEl0ZXIg X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgaWYg KF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIF9fbGFzdDsKICBfRm9yd2FyZEl0ZXIgX19u ZXh0ID0gX19maXJzdDsKICB3aGlsZSgrK19fbmV4dCAhPSBfX2xhc3QpIHsKICAgIGlmICgqX19m aXJzdCA9PSAqX19uZXh0KQogICAgICByZXR1cm4gX19maXJzdDsKICAgIF9fZmlyc3QgPSBfX25l eHQ7CiAgfQogIHJldHVybiBfX2xhc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs IGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlciBhZGphY2VudF9maW5kKF9Gb3J3 YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCnsKCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4gX19sYXN0OwogIF9Gb3J3 YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogIHdoaWxlKCsrX19uZXh0ICE9IF9fbGFzdCkgewog ICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsICpfX25leHQpKQogICAgICByZXR1cm4gX19m aXJzdDsKICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgfQogIHJldHVybiBfX2xhc3Q7Cn0KCgoKCgoK CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9TaXplPgp2b2lk IGNvdW50KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIGNvbnN0IF9UcCYg X192YWx1ZSwKICAgICAgICAgICBfU2l6ZSYgX19uKQp7CgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog IGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGlmICgqX19maXJzdCA9 PSBfX3ZhbHVlKQogICAgICArK19fbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs YXNzIF9QcmVkaWNhdGUsIGNsYXNzIF9TaXplPgp2b2lkIGNvdW50X2lmKF9JbnB1dEl0ZXIgX19m aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICAg IF9TaXplJiBfX24pCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7 ICsrX19maXJzdCkKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICArK19fbjsKfQoKdGVt cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9UcD4KdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKY291bnQoX0lucHV0SXRlciBfX2ZpcnN0 LCBfSW5wdXRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbHVlKQp7CgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwogIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5j ZV90eXBlIF9fbiA9IDA7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQog ICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsdWUpCiAgICAgICsrX19uOwogIHJldHVybiBfX247Cn0K CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgp0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZQpjb3VudF9pZihfSW5w dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfUHJlZGljYXRlIF9fcHJlZCkKewoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKCiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZm ZXJlbmNlX3R5cGUgX19uID0gMDsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmly c3QpCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgKytfX247CiAgcmV0dXJuIF9fbjsK fQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+ Cl9Gb3J3YXJkSXRlcjEgc2VhcmNoKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRl cjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0Miwg X0ZvcndhcmRJdGVyMiBfX2xhc3QyKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKCgoKCiAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEgfHwgX19maXJzdDIgPT0gX19sYXN0MikK ICAgIHJldHVybiBfX2ZpcnN0MTsKCgogIF9Gb3J3YXJkSXRlcjIgX190bXAoX19maXJzdDIpOwog ICsrX190bXA7CiAgaWYgKF9fdG1wID09IF9fbGFzdDIpCiAgICByZXR1cm4gZmluZChfX2ZpcnN0 MSwgX19sYXN0MSwgKl9fZmlyc3QyKTsKCgoKICBfRm9yd2FyZEl0ZXIyIF9fcDEsIF9fcDsKCiAg X19wMSA9IF9fZmlyc3QyOyArK19fcDE7CgogIF9Gb3J3YXJkSXRlcjEgX19jdXJyZW50ID0gX19m aXJzdDE7CgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7CiAgICBfX2ZpcnN0MSA9IGZp bmQoX19maXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0Mik7CiAgICBpZiAoX19maXJzdDEgPT0gX19s YXN0MSkKICAgICAgcmV0dXJuIF9fbGFzdDE7CgogICAgX19wID0gX19wMTsKICAgIF9fY3VycmVu dCA9IF9fZmlyc3QxOwogICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgIHJldHVy biBfX2xhc3QxOwoKICAgIHdoaWxlICgqX19jdXJyZW50ID09ICpfX3ApIHsKICAgICAgaWYgKCsr X19wID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICBpZiAoKytfX2N1 cnJlbnQgPT0gX19sYXN0MSkKICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgIH0KCiAgICArK19f Zmlyc3QxOwogIH0KICByZXR1cm4gX19maXJzdDE7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy ZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyLCBjbGFzcyBfQmluYXJ5UHJlZD4KX0ZvcndhcmRJ dGVyMSBzZWFyY2goX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3Qx LAogICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0 ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkIF9fcHJlZGljYXRl KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKCiAgaWYgKF9fZmlyc3Qx ID09IF9fbGFzdDEgfHwgX19maXJzdDIgPT0gX19sYXN0MikKICAgIHJldHVybiBfX2ZpcnN0MTsK CgogIF9Gb3J3YXJkSXRlcjIgX190bXAoX19maXJzdDIpOwogICsrX190bXA7CiAgaWYgKF9fdG1w ID09IF9fbGFzdDIpIHsKICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICFfX3ByZWRp Y2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICsrX19maXJzdDE7CiAgICByZXR1cm4g X19maXJzdDE7CiAgfQoKCgogIF9Gb3J3YXJkSXRlcjIgX19wMSwgX19wOwoKICBfX3AxID0gX19m aXJzdDI7ICsrX19wMTsKCiAgX0ZvcndhcmRJdGVyMSBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKCiAg d2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsKICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh c3QxKSB7CiAgICAgIGlmIChfX3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAg ICAgYnJlYWs7CiAgICAgICsrX19maXJzdDE7CiAgICB9CiAgICB3aGlsZSAoX19maXJzdDEgIT0g X19sYXN0MSAmJiAhX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICArK19f Zmlyc3QxOwogICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgIHJldHVybiBfX2xhc3Qx OwoKICAgIF9fcCA9IF9fcDE7CiAgICBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKICAgIGlmICgrK19f Y3VycmVudCA9PSBfX2xhc3QxKSByZXR1cm4gX19sYXN0MTsKCiAgICB3aGlsZSAoX19wcmVkaWNh dGUoKl9fY3VycmVudCwgKl9fcCkpIHsKICAgICAgaWYgKCsrX19wID09IF9fbGFzdDIpCiAgICAg ICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkKICAg ICAgICByZXR1cm4gX19sYXN0MTsKICAgIH0KCiAgICArK19fZmlyc3QxOwogIH0KICByZXR1cm4g X19maXJzdDE7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0ludGVn ZXIsIGNsYXNzIF9UcD4KX0ZvcndhcmRJdGVyIHNlYXJjaF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0 LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0ludGVnZXIgX19j b3VudCwgY29uc3QgX1RwJiBfX3ZhbCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBp ZiAoX19jb3VudCA8PSAwKQogICAgcmV0dXJuIF9fZmlyc3Q7CiAgZWxzZSB7CiAgICBfX2ZpcnN0 ID0gZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsKTsKICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9f bGFzdCkgewogICAgICBfSW50ZWdlciBfX24gPSBfX2NvdW50IC0gMTsKICAgICAgX0ZvcndhcmRJ dGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICB3aGlsZSAoX19pICE9IF9fbGFz dCAmJiBfX24gIT0gMCAmJiAqX19pID09IF9fdmFsKSB7CiAgICAgICAgKytfX2k7CiAgICAgICAg LS1fX247CiAgICAgIH0KICAgICAgaWYgKF9fbiA9PSAwKQogICAgICAgIHJldHVybiBfX2ZpcnN0 OwogICAgICBlbHNlCiAgICAgICAgX19maXJzdCA9IGZpbmQoX19pLCBfX2xhc3QsIF9fdmFsKTsK ICAgIH0KICAgIHJldHVybiBfX2xhc3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ dGVyLCBjbGFzcyBfSW50ZWdlciwgY2xhc3MgX1RwLCBjbGFzcyBfQmluYXJ5UHJlZD4KX0Zvcndh cmRJdGVyIHNlYXJjaF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICAgX0ludGVnZXIgX19jb3VudCwgY29uc3QgX1RwJiBfX3Zh bCwKICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkIF9fYmluYXJ5X3ByZWQpCnsKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2NvdW50IDw9IDApCiAgICByZXR1cm4gX19m aXJzdDsKICBlbHNlIHsKICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICBpZiAo X19iaW5hcnlfcHJlZCgqX19maXJzdCwgX192YWwpKQogICAgICAgIGJyZWFrOwogICAgICArK19f Zmlyc3Q7CiAgICB9CiAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgX0ludGVn ZXIgX19uID0gX19jb3VudCAtIDE7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0Owog ICAgICArK19faTsKICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QgJiYgX19uICE9IDAgJiYgX19i aW5hcnlfcHJlZCgqX19pLCBfX3ZhbCkpIHsKICAgICAgICArK19faTsKICAgICAgICAtLV9fbjsK ICAgICAgfQogICAgICBpZiAoX19uID09IDApCiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAg IGVsc2UgewogICAgICAgIHdoaWxlIChfX2kgIT0gX19sYXN0KSB7CiAgICAgICAgICBpZiAoX19i aW5hcnlfcHJlZCgqX19pLCBfX3ZhbCkpCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgKytf X2k7CiAgICAgICAgfQogICAgICAgIF9fZmlyc3QgPSBfX2k7CiAgICAgIH0KICAgIH0KICAgIHJl dHVybiBfX2xhc3Q7CiAgfQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFz cyBfRm9yd2FyZEl0ZXIyPgpfRm9yd2FyZEl0ZXIyIHN3YXBfcmFuZ2VzKF9Gb3J3YXJkSXRlcjEg X19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAg ICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9f bGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpCiAgICBpdGVyX3N3YXAoX19maXJzdDEsIF9f Zmlyc3QyKTsKICByZXR1cm4gX19maXJzdDI7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0 ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfVW5hcnlPcGVyYXRpb24+Cl9PdXRwdXRJdGVy IHRyYW5zZm9ybShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAg ICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9VbmFyeU9wZXJhdGlvbiBfX3Vu YXJ5X29wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwoKCgoKCgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsr X19maXJzdCwgKytfX3Jlc3VsdCkKICAgICpfX3Jlc3VsdCA9IF9fdW5hcnlfb3AoKl9fZmlyc3Qp OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFz cyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsCiAgICAgICAgICBjbGFzcyBfQmluYXJ5 T3BlcmF0aW9uPgpfT3V0cHV0SXRlciB0cmFuc2Zvcm0oX0lucHV0SXRlcjEgX19maXJzdDEsIF9J bnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp cnN0MiwgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5 T3BlcmF0aW9uIF9fYmluYXJ5X29wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgoKCiAgZm9y ICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyLCArK19fcmVz dWx0KQogICAgKl9fcmVzdWx0ID0gX19iaW5hcnlfb3AoKl9fZmlyc3QxLCAqX19maXJzdDIpOwog IHJldHVybiBfX3Jlc3VsdDsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFz cyBfVHA+CnZvaWQgcmVwbGFjZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f bGFzdCwKICAgICAgICAgICAgIGNvbnN0IF9UcCYgX19vbGRfdmFsdWUsIGNvbnN0IF9UcCYgX19u ZXdfdmFsdWUpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgZm9y ICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKCpfX2ZpcnN0ID09IF9f b2xkX3ZhbHVlKQogICAgICAqX19maXJzdCA9IF9fbmV3X3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGljYXRlLCBjbGFzcyBfVHA+CnZvaWQgcmVwbGFj ZV9pZihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAg ICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQp7CgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0 OyArK19fZmlyc3QpCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgKl9fZmlyc3QgPSBf X25ld192YWx1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJ dGVyLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIHJlcGxhY2VfY29weShfSW5wdXRJdGVyIF9fZmly c3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0 ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fb2xkX3Zh bHVlLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAg Zm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQogICAgKl9f cmVzdWx0ID0gKl9fZmlyc3QgPT0gX19vbGRfdmFsdWUgPyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0 OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz IF9PdXRwdXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIHJl cGxhY2VfY29weV9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1 ZSkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CgoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19f Zmlyc3QsICsrX19yZXN1bHQpCiAgICAqX19yZXN1bHQgPSBfX3ByZWQoKl9fZmlyc3QpID8gX19u ZXdfdmFsdWUgOiAqX19maXJzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCgoKdGVtcGxhdGUgPGNs YXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0dlbmVyYXRvcj4Kdm9pZCBnZW5lcmF0ZShfRm9yd2Fy ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgX0dlbmVyYXRvciBfX2dlbikKewoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKCgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJz dCkKICAgICpfX2ZpcnN0ID0gX19nZW4oKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9PdXRwdXRJdGVy LCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0dlbmVyYXRvcj4KX091dHB1dEl0ZXIgZ2VuZXJhdGVfbihf T3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIF9HZW5lcmF0b3IgX19nZW4pCnsKCgoKCgoK ICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAqX19maXJzdCA9IF9fZ2Vu KCk7CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs YXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIHJlbW92ZV9jb3B5KF9JbnB1 dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg IF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBjb25zdCBfVHAmIF9fdmFsdWUpCnsKCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CgoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBp ZiAoISgqX19maXJzdCA9PSBfX3ZhbHVlKSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsK ICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxj bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KX091 dHB1dEl0ZXIgcmVtb3ZlX2NvcHlfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Q cmVkaWNhdGUgX19wcmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGZvciAoIDsgX19maXJzdCAh PSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGlmICghX19wcmVkKCpfX2ZpcnN0KSkgewogICAgICAq X19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICByZXR1cm4gX19y ZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KX0Zvcndh cmRJdGVyIHJlbW92ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsdWUpCnsKCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX19maXJzdCA9IGZpbmQoX19maXJzdCwgX19sYXN0 LCBfX3ZhbHVlKTsKICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICByZXR1cm4gX19maXJz dCA9PSBfX2xhc3QgPyBfX2ZpcnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVtb3Zl X2NvcHkoKytfX2ksIF9fbGFzdCwgX19maXJzdCwgX192YWx1ZSk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlciByZW1vdmVfaWYo X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK CgogIF9fZmlyc3QgPSBmaW5kX2lmKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkKTsKICBfRm9yd2Fy ZEl0ZXIgX19pID0gX19maXJzdDsKICByZXR1cm4gX19maXJzdCA9PSBfX2xhc3QgPyBfX2ZpcnN0 CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVtb3ZlX2NvcHlfaWYoKytfX2ksIF9fbGFz dCwgX19maXJzdCwgX19wcmVkKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xh c3MgX091dHB1dEl0ZXIsIGNsYXNzIF9UcD4KX091dHB1dEl0ZXIgX191bmlxdWVfY29weShfSW5w dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfVHAqKQp7CgogIF9UcCBfX3ZhbHVlID0gKl9fZmly c3Q7CiAgKl9fcmVzdWx0ID0gX192YWx1ZTsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkK ICAgIGlmICghKF9fdmFsdWUgPT0gKl9fZmlyc3QpKSB7CiAgICAgIF9fdmFsdWUgPSAqX19maXJz dDsKICAgICAgKisrX19yZXN1bHQgPSBfX3ZhbHVlOwogICAgfQogIHJldHVybiArK19fcmVzdWx0 Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGlu ZSBfT3V0cHV0SXRlciBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9f cmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfaXRlcmF0b3Jf dGFnKQp7CgogIHJldHVybiBfX3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQs IF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj bGFzcyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlciBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIg X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9G b3J3YXJkSXRlciBfX3Jlc3VsdCwgZm9yd2FyZF9pdGVyYXRvcl90YWcpCnsKCiAgKl9fcmVzdWx0 ID0gKl9fZmlyc3Q7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICBpZiAoISgqX19y ZXN1bHQgPT0gKl9fZmlyc3QpKQogICAgICAqKytfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHJldHVy biArK19fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1 dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciB1bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3Qs IF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1 dEl0ZXIgX19yZXN1bHQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19s YXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgcmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19s YXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5 KF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0 SXRlciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZSwKICAgICAgICAgIGNsYXNzIF9UcD4KX091dHB1 dEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAg ICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCwgX1RwKikK ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgX1RwIF9fdmFsdWUgPSAqX19maXJzdDsK ICAqX19yZXN1bHQgPSBfX3ZhbHVlOwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAg aWYgKCFfX2JpbmFyeV9wcmVkKF9fdmFsdWUsICpfX2ZpcnN0KSkgewogICAgICBfX3ZhbHVlID0g Kl9fZmlyc3Q7CiAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsKICAgIH0KICByZXR1cm4gKytf X3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVy LCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgppbmxpbmUgX091dHB1dEl0ZXIgX191bmlxdWVfY29w eShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfaXRlcmF0b3JfdGFnKQp7CgogIHJldHVybiBf X3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fYmluYXJ5X3ByZWQsCiAg ICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUg PGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0JpbmFyeVByZWRp Y2F0ZT4KX0ZvcndhcmRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w dXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9f cmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmlu YXJ5X3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFn KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwoKCgogICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0g X19sYXN0KQogICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpfX3Jlc3VsdCwgKl9fZmlyc3QpKSAqKytf X3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHJldHVybiArK19fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+ CmlubGluZSBfT3V0cHV0SXRlciB1bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1 dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIg X19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRl IF9fYmluYXJ5X3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3Qp IHJldHVybiBfX3Jlc3VsdDsKICByZXR1cm4gX191bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3Qs IF9fcmVzdWx0LCBfX2JpbmFyeV9wcmVkLAogICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0 b3JfY2F0ZWdvcnkoX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4K X0ZvcndhcmRJdGVyIHVuaXF1ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f bGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX19maXJzdCA9IGFkamFjZW50 X2ZpbmQoX19maXJzdCwgX19sYXN0KTsKICByZXR1cm4gdW5pcXVlX2NvcHkoX19maXJzdCwgX19s YXN0LCBfX2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0Jp bmFyeVByZWRpY2F0ZT4KX0ZvcndhcmRJdGVyIHVuaXF1ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwg X0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRl IF9fYmluYXJ5X3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBfX2ZpcnN0 ID0gYWRqYWNlbnRfZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fYmluYXJ5X3ByZWQpOwogIHJldHVy biB1bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fZmlyc3QsIF9fYmluYXJ5X3ByZWQpOwp9 CgoKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXI+CnZvaWQgX19yZXZlcnNlKF9C aWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAg ICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykgewogIHdoaWxlICh0cnVlKQog ICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0IHx8IF9fZmlyc3QgPT0gLS1fX2xhc3QpCiAgICAgIHJl dHVybjsKICAgIGVsc2UKICAgICAgaXRlcl9zd2FwKF9fZmlyc3QrKywgX19sYXN0KTsKfQoKdGVt cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgp2b2lkIF9fcmV2ZXJzZShfUmFuZG9tQWNj ZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7CiAgd2hpbGUgKF9fZmlyc3QgPCBfX2xhc3Qp CiAgICBpdGVyX3N3YXAoX19maXJzdCsrLCAtLV9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf QmlkaXJlY3Rpb25hbEl0ZXI+CmlubGluZSB2b2lkIHJldmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVy IF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CgogIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0 ZWdvcnkoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBj bGFzcyBfT3V0cHV0SXRlcj4KX091dHB1dEl0ZXIgcmV2ZXJzZV9jb3B5KF9CaWRpcmVjdGlvbmFs SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7 CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgd2hpbGUgKF9fZmlyc3Qg IT0gX19sYXN0KSB7CiAgICAtLV9fbGFzdDsKICAgICpfX3Jlc3VsdCA9ICpfX2xhc3Q7CiAgICAr K19fcmVzdWx0OwogIH0KICByZXR1cm4gX19yZXN1bHQ7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9F dWNsaWRlYW5SaW5nRWxlbWVudD4KX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fZ2NkKF9FdWNsaWRl YW5SaW5nRWxlbWVudCBfX20sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRXVjbGlkZWFu UmluZ0VsZW1lbnQgX19uKQp7CiAgd2hpbGUgKF9fbiAhPSAwKSB7CiAgICBfRXVjbGlkZWFuUmlu Z0VsZW1lbnQgX190ID0gX19tICUgX19uOwogICAgX19tID0gX19uOwogICAgX19uID0gX190Owog IH0KICByZXR1cm4gX19tOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBf RGlzdGFuY2U+Cl9Gb3J3YXJkSXRlciBfX3JvdGF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAg ICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAg ICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFu Y2UqLAogICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCnsKICBpZiAo X19maXJzdCA9PSBfX21pZGRsZSkKICAgIHJldHVybiBfX2xhc3Q7CiAgaWYgKF9fbGFzdCA9PSBf X21pZGRsZSkKICAgIHJldHVybiBfX2ZpcnN0OwoKICBfRm9yd2FyZEl0ZXIgX19maXJzdDIgPSBf X21pZGRsZTsKICBkbyB7CiAgICBzd2FwKCpfX2ZpcnN0KyssICpfX2ZpcnN0MisrKTsKICAgIGlm IChfX2ZpcnN0ID09IF9fbWlkZGxlKQogICAgICBfX21pZGRsZSA9IF9fZmlyc3QyOwogIH0gd2hp bGUgKF9fZmlyc3QyICE9IF9fbGFzdCk7CgogIF9Gb3J3YXJkSXRlciBfX25ld19taWRkbGUgPSBf X2ZpcnN0OwoKICBfX2ZpcnN0MiA9IF9fbWlkZGxlOwoKICB3aGlsZSAoX19maXJzdDIgIT0gX19s YXN0KSB7CiAgICBzd2FwICgqX19maXJzdCsrLCAqX19maXJzdDIrKyk7CiAgICBpZiAoX19maXJz dCA9PSBfX21pZGRsZSkKICAgICAgX19taWRkbGUgPSBfX2ZpcnN0MjsKICAgIGVsc2UgaWYgKF9f Zmlyc3QyID09IF9fbGFzdCkKICAgICAgX19maXJzdDIgPSBfX21pZGRsZTsKICB9CgogIHJldHVy biBfX25ld19taWRkbGU7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBj bGFzcyBfRGlzdGFuY2U+Cl9CaWRpcmVjdGlvbmFsSXRlciBfX3JvdGF0ZShfQmlkaXJlY3Rpb25h bEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs SXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UqLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCnsKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkK ICAgIHJldHVybiBfX2xhc3Q7CiAgaWYgKF9fbGFzdCA9PSBfX21pZGRsZSkKICAgIHJldHVybiBf X2ZpcnN0OwoKICBfX3JldmVyc2UoX19maXJzdCwgX19taWRkbGUsIGJpZGlyZWN0aW9uYWxfaXRl cmF0b3JfdGFnKCkpOwogIF9fcmV2ZXJzZShfX21pZGRsZSwgX19sYXN0LCBiaWRpcmVjdGlvbmFs X2l0ZXJhdG9yX3RhZygpKTsKCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19taWRkbGUgJiYgX19taWRk bGUgIT0gX19sYXN0KQogICAgc3dhcCAoKl9fZmlyc3QrKywgKi0tX19sYXN0KTsKCiAgaWYgKF9f Zmlyc3QgPT0gX19taWRkbGUpIHsKICAgIF9fcmV2ZXJzZShfX21pZGRsZSwgX19sYXN0LCBiaWRp cmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKICAgIHJldHVybiBfX2xhc3Q7CiAgfQogIGVsc2Ug ewogICAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbWlkZGxlLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y X3RhZygpKTsKICAgIHJldHVybiBfX2ZpcnN0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5k b21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4KX1JhbmRvbUFjY2Vzc0l0 ZXIgX19yb3RhdGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0Rpc3RhbmNlICosIF9UcCAqKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK ICBfRGlzdGFuY2UgX19uID0gX19sYXN0IC0gX19maXJzdDsKICBfRGlzdGFuY2UgX19rID0gX19t aWRkbGUgLSBfX2ZpcnN0OwogIF9EaXN0YW5jZSBfX2wgPSBfX24gLSBfX2s7CiAgX1JhbmRvbUFj Y2Vzc0l0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fbWlkZGxlKTsKCiAgaWYg KF9fayA9PSAwKQogICAgcmV0dXJuIF9fbGFzdDsKCiAgZWxzZSBpZiAoX19rID09IF9fbCkgewog ICAgc3dhcF9yYW5nZXMoX19maXJzdCwgX19taWRkbGUsIF9fbWlkZGxlKTsKICAgIHJldHVybiBf X3Jlc3VsdDsKICB9CgogIF9EaXN0YW5jZSBfX2QgPSBfX2djZChfX24sIF9fayk7CgogIGZvciAo X0Rpc3RhbmNlIF9faSA9IDA7IF9faSA8IF9fZDsgX19pKyspIHsKICAgIF9UcCBfX3RtcCA9ICpf X2ZpcnN0OwogICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19wID0gX19maXJzdDsKCiAgICBpZiAoX19r IDwgX19sKSB7CiAgICAgIGZvciAoX0Rpc3RhbmNlIF9faiA9IDA7IF9faiA8IF9fbC9fX2Q7IF9f aisrKSB7CiAgICAgICAgaWYgKF9fcCA+IF9fZmlyc3QgKyBfX2wpIHsKICAgICAgICAgICpfX3Ag PSAqKF9fcCAtIF9fbCk7CiAgICAgICAgICBfX3AgLT0gX19sOwogICAgICAgIH0KCiAgICAgICAg Kl9fcCA9ICooX19wICsgX19rKTsKICAgICAgICBfX3AgKz0gX19rOwogICAgICB9CiAgICB9Cgog ICAgZWxzZSB7CiAgICAgIGZvciAoX0Rpc3RhbmNlIF9faiA9IDA7IF9faiA8IF9fay9fX2QgLSAx OyBfX2ogKyspIHsKICAgICAgICBpZiAoX19wIDwgX19sYXN0IC0gX19rKSB7CiAgICAgICAgICAq X19wID0gKihfX3AgKyBfX2spOwogICAgICAgICAgX19wICs9IF9fazsKICAgICAgICB9CgogICAg ICAgICpfX3AgPSAqIChfX3AgLSBfX2wpOwogICAgICAgIF9fcCAtPSBfX2w7CiAgICAgIH0KICAg IH0KCiAgICAqX19wID0gX190bXA7CiAgICArK19fZmlyc3Q7CiAgfQoKICByZXR1cm4gX19yZXN1 bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBfRm9yd2FyZEl0ZXIg cm90YXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19taWRkbGUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CgogIHJldHVybiBfX3JvdGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAog ICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCksCiAgICAgICAgICAgICAg ICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zv cndhcmRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4KX091dHB1dEl0ZXIgcm90YXRlX2NvcHkoX0Zv cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAg ICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwgX091dHB1dEl0ZXIgX19yZXN1bHQpCnsKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CgoKICByZXR1cm4gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgY29weShf X21pZGRsZSwgX19sYXN0LCBfX3Jlc3VsdCkpOwp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0Rpc3Rh bmNlPgppbmxpbmUgX0Rpc3RhbmNlIF9fcmFuZG9tX251bWJlcihfRGlzdGFuY2UgX19uKSB7Cgog IHJldHVybiBscmFuZDQ4KCkgJSBfX247CgoKCn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B Y2Nlc3NJdGVyPgppbmxpbmUgdm9pZCByYW5kb21fc2h1ZmZsZShfUmFuZG9tQWNjZXNzSXRlciBf X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xh c3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9f bGFzdCkgcmV0dXJuOwogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7 IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgaXRlcl9zd2FwKF9faSwgX19maXJzdCArIF9fcmFu ZG9tX251bWJlcigoX19pIC0gX19maXJzdCkgKyAxKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu ZG9tQWNjZXNzSXRlciwgY2xhc3MgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4Kdm9pZCByYW5kb21f c2h1ZmZsZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xh c3QsCiAgICAgICAgICAgICAgICAgICAgX1JhbmRvbU51bWJlckdlbmVyYXRvciYgX19yYW5kKQp7 CgogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3Qp IHJldHVybjsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kg IT0gX19sYXN0OyArK19faSkKICAgIGl0ZXJfc3dhcChfX2ksIF9fZmlyc3QgKyBfX3JhbmQoKF9f aSAtIF9fZmlyc3QpICsgMSkpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNs YXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+Cl9PdXRwdXRJdGVyIHJhbmRvbV9zYW1w bGVfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fb3V0LCBjb25zdCBfRGlzdGFuY2UgX19u KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX0Rpc3RhbmNlIF9fcmVtYWluaW5nID0gMDsKICBk aXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVtYWluaW5nKTsKICBfRGlzdGFuY2UgX19tID0g bWluKF9fbiwgX19yZW1haW5pbmcpOwoKICB3aGlsZSAoX19tID4gMCkgewogICAgaWYgKF9fcmFu ZG9tX251bWJlcihfX3JlbWFpbmluZykgPCBfX20pIHsKICAgICAgKl9fb3V0ID0gKl9fZmlyc3Q7 CiAgICAgICsrX19vdXQ7CiAgICAgIC0tX19tOwogICAgfQoKICAgIC0tX19yZW1haW5pbmc7CiAg ICArK19fZmlyc3Q7CiAgfQogIHJldHVybiBfX291dDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3 YXJkSXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZSwKICAgICAgICAgIGNs YXNzIF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+Cl9PdXRwdXRJdGVyIHJhbmRvbV9zYW1wbGVfbihf Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fb3V0LCBjb25zdCBfRGlzdGFuY2UgX19uLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbU51bWJlckdlbmVyYXRvciYgX19yYW5kKQp7 CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwoKCiAgX0Rpc3RhbmNlIF9fcmVtYWluaW5nID0gMDsKICBkaXN0 YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVtYWluaW5nKTsKICBfRGlzdGFuY2UgX19tID0gbWlu KF9fbiwgX19yZW1haW5pbmcpOwoKICB3aGlsZSAoX19tID4gMCkgewogICAgaWYgKF9fcmFuZChf X3JlbWFpbmluZykgPCBfX20pIHsKICAgICAgKl9fb3V0ID0gKl9fZmlyc3Q7CiAgICAgICsrX19v dXQ7CiAgICAgIC0tX19tOwogICAgfQoKICAgIC0tX19yZW1haW5pbmc7CiAgICArK19fZmlyc3Q7 CiAgfQogIHJldHVybiBfX291dDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2U+Cl9SYW5kb21BY2Nlc3NJdGVyIF9f cmFuZG9tX3NhbXBsZShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfRGlzdGFuY2UgX19uKQp7CiAg X0Rpc3RhbmNlIF9fbSA9IDA7CiAgX0Rpc3RhbmNlIF9fdCA9IF9fbjsKICBmb3IgKCA7IF9fZmly c3QgIT0gX19sYXN0ICYmIF9fbSA8IF9fbjsgKytfX20sICsrX19maXJzdCkKICAgIF9fb3V0W19f bV0gPSAqX19maXJzdDsKCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICArK19fdDsK ICAgIF9EaXN0YW5jZSBfX00gPSBfX3JhbmRvbV9udW1iZXIoX190KTsKICAgIGlmIChfX00gPCBf X24pCiAgICAgIF9fb3V0W19fTV0gPSAqX19maXJzdDsKICAgICsrX19maXJzdDsKICB9CgogIHJl dHVybiBfX291dCArIF9fbTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9S YW5kb21BY2Nlc3NJdGVyLAogICAgICAgICAgY2xhc3MgX1JhbmRvbU51bWJlckdlbmVyYXRvciwg Y2xhc3MgX0Rpc3RhbmNlPgpfUmFuZG9tQWNjZXNzSXRlciBfX3JhbmRvbV9zYW1wbGUoX0lucHV0 SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX1JhbmRvbU51bWJlckdlbmVyYXRvciYgX19yYW5kLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0Rpc3RhbmNlIF9fbikKewoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX0Rpc3RhbmNl IF9fbSA9IDA7CiAgX0Rpc3RhbmNlIF9fdCA9IF9fbjsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s YXN0ICYmIF9fbSA8IF9fbjsgKytfX20sICsrX19maXJzdCkKICAgIF9fb3V0W19fbV0gPSAqX19m aXJzdDsKCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICArK19fdDsKICAgIF9EaXN0 YW5jZSBfX00gPSBfX3JhbmQoX190KTsKICAgIGlmIChfX00gPCBfX24pCiAgICAgIF9fb3V0W19f TV0gPSAqX19maXJzdDsKICAgICsrX19maXJzdDsKICB9CgogIHJldHVybiBfX291dCArIF9fbTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgpp bmxpbmUgX1JhbmRvbUFjY2Vzc0l0ZXIKcmFuZG9tX3NhbXBsZShfSW5wdXRJdGVyIF9fZmlyc3Qs IF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0 X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX291dF9sYXN0KQp7CgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg ICAgICAgICAgICAgICAgICAgICA7CgoKICByZXR1cm4gX19yYW5kb21fc2FtcGxlKF9fZmlyc3Qs IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X2ZpcnN0LCBfX291dF9sYXN0 IC0gX19vdXRfZmlyc3QpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9S YW5kb21BY2Nlc3NJdGVyLAogICAgICAgICAgY2xhc3MgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4K aW5saW5lIF9SYW5kb21BY2Nlc3NJdGVyCnJhbmRvbV9zYW1wbGUoX0lucHV0SXRlciBfX2ZpcnN0 LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX291 dF9maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXRfbGFzdCwKICAgICAgICAgICAgICBfUmFu ZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3JhbmQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKCgogIHJldHVybiBfX3JhbmRvbV9zYW1wbGUoX19maXJzdCwgX19sYXN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgX19vdXRfZmlyc3QsIF9fcmFuZCwKICAgICAgICAgICAg ICAgICAgICAgICAgIF9fb3V0X2xhc3QgLSBfX291dF9maXJzdCk7Cn0KCgoKdGVtcGxhdGUgPGNs YXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KX0ZvcndhcmRJdGVyIF9fcGFydGl0 aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX0Zvcndh cmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVk LAogICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCnsKICBpZiAo X19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwoKICB3aGlsZSAoX19wcmVkKCpfX2Zp cnN0KSkKICAgIGlmICgrK19fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKCiAgX0Zv cndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CgogIHdoaWxlICgrK19fbmV4dCAhPSBfX2xhc3Qp CiAgICBpZiAoX19wcmVkKCpfX25leHQpKSB7CiAgICAgIHN3YXAoKl9fZmlyc3QsICpfX25leHQp OwogICAgICArK19fZmlyc3Q7CiAgICB9CgogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgpfQmlkaXJlY3Rpb25h bEl0ZXIgX19wYXJ0aXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKewogIHdoaWxlICh0cnVl KSB7CiAgICB3aGlsZSAodHJ1ZSkKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAg IHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICAg ICsrX19maXJzdDsKICAgICAgZWxzZQogICAgICAgIGJyZWFrOwogICAgLS1fX2xhc3Q7CiAgICB3 aGlsZSAodHJ1ZSkKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBf X2ZpcnN0OwogICAgICBlbHNlIGlmICghX19wcmVkKCpfX2xhc3QpKQogICAgICAgIC0tX19sYXN0 OwogICAgICBlbHNlCiAgICAgICAgYnJlYWs7CiAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0 KTsKICAgICsrX19maXJzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNs YXNzIF9QcmVkaWNhdGU+CmlubGluZSBfRm9yd2FyZEl0ZXIgcGFydGl0aW9uKF9Gb3J3YXJkSXRl ciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKewoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgcmV0dXJuIF9fcGFydGl0aW9uKF9fZmlyc3Qs IF9fbGFzdCwgX19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKfQoKCnRlbXBs YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGUsIGNsYXNzIF9EaXN0YW5j ZT4KX0ZvcndhcmRJdGVyIF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBf X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVk aWNhdGUgX19wcmVkLCBfRGlzdGFuY2UgX19sZW4pCnsKICBpZiAoX19sZW4gPT0gMSkKICAgIHJl dHVybiBfX3ByZWQoKl9fZmlyc3QpID8gX19sYXN0IDogX19maXJzdDsKICBfRm9yd2FyZEl0ZXIg X19taWRkbGUgPSBfX2ZpcnN0OwogIGFkdmFuY2UoX19taWRkbGUsIF9fbGVuIC8gMik7CiAgcmV0 dXJuIHJvdGF0ZShfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX2ZpcnN0LCBfX21pZGRsZSwg X19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4g LyAyKSwKICAgICAgICAgICAgICAgIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgX19pbnBsYWNl X3N0YWJsZV9wYXJ0aXRpb24oX19taWRkbGUsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLSBfX2xlbiAvIDIpKTsKfQoKdGVt cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1BvaW50ZXIsIGNsYXNzIF9QcmVkaWNh dGUsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+Cl9Gb3J3YXJkSXRlciBfX3N0YWJsZV9wYXJ0 aXRpb25fYWRhcHRpdmUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX0Rpc3RhbmNlIF9f bGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9f YnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5j ZSBfX2J1ZmZlcl9zaXplKQp7CiAgaWYgKF9fbGVuIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgIF9G b3J3YXJkSXRlciBfX3Jlc3VsdDEgPSBfX2ZpcnN0OwogICAgX1BvaW50ZXIgX19yZXN1bHQyID0g X19idWZmZXI7CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0IDsgKytfX2ZpcnN0KQogICAg ICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgewogICAgICAgICpfX3Jlc3VsdDEgPSAqX19maXJzdDsK ICAgICAgICArK19fcmVzdWx0MTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICAqX19yZXN1 bHQyID0gKl9fZmlyc3Q7CiAgICAgICAgKytfX3Jlc3VsdDI7CiAgICAgIH0KICAgIGNvcHkoX19i dWZmZXIsIF9fcmVzdWx0MiwgX19yZXN1bHQxKTsKICAgIHJldHVybiBfX3Jlc3VsdDE7CiAgfQog IGVsc2UgewogICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlID0gX19maXJzdDsKICAgIGFkdmFuY2Uo X19taWRkbGUsIF9fbGVuIC8gMik7CiAgICByZXR1cm4gcm90YXRlKF9fc3RhYmxlX3BhcnRpdGlv bl9hZGFwdGl2ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZpcnN0LCBfX21pZGRsZSwg X19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC8gMiwgX19idWZmZXIsIF9f YnVmZmVyX3NpemUpLAogICAgICAgICAgICAgICAgICAgIF9fbWlkZGxlLAogICAgICAgICAgICAg ICAgICAgIF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZSgKICAgICAgICAgICAgICAgICAgICAg ICAgICBfX21pZGRsZSwgX19sYXN0LCBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg X19sZW4gLSBfX2xlbiAvIDIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKSk7CiAgfQp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGljYXRlLCBjbGFzcyBfVHAsIGNs YXNzIF9EaXN0YW5jZT4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3N0YWJsZV9wYXJ0aXRpb25fYXV4 KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBfVHAqLCBfRGlzdGFuY2UqKQp7CiAgX1RlbXBv cmFyeV9idWZmZXI8X0ZvcndhcmRJdGVyLCBfVHA+IF9fYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAg aWYgKF9fYnVmLnNpemUoKSA+IDApCiAgICByZXR1cm4gX19zdGFibGVfcGFydGl0aW9uX2FkYXB0 aXZlKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfRGlzdGFuY2UoX19idWYucmVxdWVzdGVkX3NpemUoKSksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9fYnVmLnNpemUoKSk7 CiAgZWxzZQogICAgcmV0dXJuIF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9fZmlyc3QsIF9f bGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0 YW5jZShfX2J1Zi5yZXF1ZXN0ZWRfc2l6ZSgpKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy ZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSBfRm9yd2FyZEl0ZXIgc3RhYmxlX3BhcnRp dGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIF9fZmlyc3Q7CiAgZWxzZQogICAg cmV0dXJuIF9fc3RhYmxlX3BhcnRpdGlvbl9hdXgoX19maXJzdCwgX19sYXN0LCBfX3ByZWQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkp Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcD4KX1JhbmRv bUFjY2Vzc0l0ZXIgX191bmd1YXJkZWRfcGFydGl0aW9uKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAg X19waXZvdCkKewogIHdoaWxlICh0cnVlKSB7CiAgICB3aGlsZSAoKl9fZmlyc3QgPCBfX3Bpdm90 KQogICAgICArK19fZmlyc3Q7CiAgICAtLV9fbGFzdDsKICAgIHdoaWxlIChfX3Bpdm90IDwgKl9f bGFzdCkKICAgICAgLS1fX2xhc3Q7CiAgICBpZiAoIShfX2ZpcnN0IDwgX19sYXN0KSkKICAgICAg cmV0dXJuIF9fZmlyc3Q7CiAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsKICAgICsrX19m aXJzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1Rw LCBjbGFzcyBfQ29tcGFyZT4KX1JhbmRvbUFjY2Vzc0l0ZXIgX191bmd1YXJkZWRfcGFydGl0aW9u KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfVHAgX19waXZvdCwgX0NvbXBhcmUgX19jb21wKQp7CiAgd2hp bGUgKHRydWUpIHsKICAgIHdoaWxlIChfX2NvbXAoKl9fZmlyc3QsIF9fcGl2b3QpKQogICAgICAr K19fZmlyc3Q7CiAgICAtLV9fbGFzdDsKICAgIHdoaWxlIChfX2NvbXAoX19waXZvdCwgKl9fbGFz dCkpCiAgICAgIC0tX19sYXN0OwogICAgaWYgKCEoX19maXJzdCA8IF9fbGFzdCkpCiAgICAgIHJl dHVybiBfX2ZpcnN0OwogICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICArK19fZmly c3Q7CiAgfQp9Cgpjb25zdCBpbnQgX19zdGxfdGhyZXNob2xkID0gMTY7CgoKCnRlbXBsYXRlIDxj bGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgp2b2lkIF9fdW5ndWFyZGVkX2xpbmVh cl9pbnNlcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAgX192YWwpCnsKICBfUmFuZG9t QWNjZXNzSXRlciBfX25leHQgPSBfX2xhc3Q7CiAgLS1fX25leHQ7CiAgd2hpbGUgKF9fdmFsIDwg Kl9fbmV4dCkgewogICAgKl9fbGFzdCA9ICpfX25leHQ7CiAgICBfX2xhc3QgPSBfX25leHQ7CiAg ICAtLV9fbmV4dDsKICB9CiAgKl9fbGFzdCA9IF9fdmFsOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jh bmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX191bmd1YXJk ZWRfbGluZWFyX2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCBfX3ZhbCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewogIF9SYW5kb21B Y2Nlc3NJdGVyIF9fbmV4dCA9IF9fbGFzdDsKICAtLV9fbmV4dDsKICB3aGlsZSAoX19jb21wKF9f dmFsLCAqX19uZXh0KSkgewogICAgKl9fbGFzdCA9ICpfX25leHQ7CiAgICBfX2xhc3QgPSBfX25l eHQ7CiAgICAtLV9fbmV4dDsKICB9CiAgKl9fbGFzdCA9IF9fdmFsOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgX19saW5lYXJfaW5z ZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCopCnsKICBfVHAgX192YWwgPSAqX19sYXN0 OwogIGlmIChfX3ZhbCA8ICpfX2ZpcnN0KSB7CiAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9f bGFzdCwgX19sYXN0ICsgMSk7CiAgICAqX19maXJzdCA9IF9fdmFsOwogIH0KICBlbHNlCiAgICBf X3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9fbGFzdCwgX192YWwpOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2 b2lkIF9fbGluZWFyX2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLCBfQ29tcGFy ZSBfX2NvbXApCnsKICBfVHAgX192YWwgPSAqX19sYXN0OwogIGlmIChfX2NvbXAoX192YWwsICpf X2ZpcnN0KSkgewogICAgY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCArIDEp OwogICAgKl9fZmlyc3QgPSBfX3ZhbDsKICB9CiAgZWxzZQogICAgX191bmd1YXJkZWRfbGluZWFy X2luc2VydChfX2xhc3QsIF9fdmFsLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRv bUFjY2Vzc0l0ZXI+CnZvaWQgX19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2Zp cnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCnsKICBpZiAoX19maXJzdCA9PSBfX2xhc3Qp IHJldHVybjsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kg IT0gX19sYXN0OyArK19faSkKICAgIF9fbGluZWFyX2luc2VydChfX2ZpcnN0LCBfX2ksIF9fdmFs dWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwg Y2xhc3MgX0NvbXBhcmU+CnZvaWQgX19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBf X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBf Q29tcGFyZSBfX2NvbXApCnsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKICBmb3Ig KF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19f aSkKICAgIF9fbGluZWFyX2luc2VydChfX2ZpcnN0LCBfX2ksIF9fdmFsdWVfdHlwZShfX2ZpcnN0 KSwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBf VHA+CnZvaWQgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnRfYXV4KF9SYW5kb21BY2Nlc3NJdGVy IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl c3NJdGVyIF9fbGFzdCwgX1RwKikKewogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19m aXJzdDsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0 KF9faSwgX1RwKCpfX2kpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgpp bmxpbmUgdm9pZCBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBf X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy IF9fbGFzdCkgewogIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0X2F1eChfX2ZpcnN0LCBfX2xh c3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj ZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX3VuZ3VhcmRlZF9pbnNl cnRpb25fc29ydF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAqLCBfQ29tcGFyZSBfX2NvbXApCnsKICBmb3Ig KF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQog ICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9UcCgqX19pKSwgX19jb21wKTsKfQoK dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5l IHZvaWQgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0 ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFy ZSBfX2NvbXApCnsKICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydF9hdXgoX19maXJzdCwgX19s YXN0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4Kdm9pZCBf X2ZpbmFsX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCnsKICBpZiAoX19s YXN0IC0gX19maXJzdCA+IF9fc3RsX3RocmVzaG9sZCkgewogICAgX19pbnNlcnRpb25fc29ydChf X2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGxfdGhyZXNob2xkKTsKICAgIF9fdW5ndWFyZGVkX2luc2Vy dGlvbl9zb3J0KF9fZmlyc3QgKyBfX3N0bF90aHJlc2hvbGQsIF9fbGFzdCk7CiAgfQogIGVsc2UK ICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNz IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX2ZpbmFsX2luc2VydGlv bl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewogIGlmIChf X2xhc3QgLSBfX2ZpcnN0ID4gX19zdGxfdGhyZXNob2xkKSB7CiAgICBfX2luc2VydGlvbl9zb3J0 KF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0bF90aHJlc2hvbGQsIF9fY29tcCk7CiAgICBfX3VuZ3Vh cmRlZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0ICsgX19zdGxfdGhyZXNob2xkLCBfX2xhc3QsIF9f Y29tcCk7CiAgfQogIGVsc2UKICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBf X2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1NpemU+CmlubGluZSBfU2l6ZSBfX2xnKF9TaXpl IF9fbikKewogIF9TaXplIF9fazsKICBmb3IgKF9fayA9IDA7IF9fbiAhPSAxOyBfX24gPj49IDEp ICsrX19rOwogIHJldHVybiBfX2s7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl ciwgY2xhc3MgX1RwLCBjbGFzcyBfU2l6ZT4Kdm9pZCBfX2ludHJvc29ydF9sb29wKF9SYW5kb21B Y2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl ciBfX2xhc3QsIF9UcCosCiAgICAgICAgICAgICAgICAgICAgICBfU2l6ZSBfX2RlcHRoX2xpbWl0 KQp7CiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiBfX3N0bF90aHJlc2hvbGQpIHsKICAgIGlm IChfX2RlcHRoX2xpbWl0ID09IDApIHsKICAgICAgcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFz dCwgX19sYXN0KTsKICAgICAgcmV0dXJuOwogICAgfQogICAgLS1fX2RlcHRoX2xpbWl0OwogICAg X1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQogICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19m aXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwKF9fbWVkaWFuKCpf X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJz dCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqKF9fbGFzdCAtIDEpKSkpOwogICAgX19pbnRyb3NvcnRfbG9vcChfX2N1dCwg X19sYXN0LCAoX1RwKikgMCwgX19kZXB0aF9saW1pdCk7CiAgICBfX2xhc3QgPSBfX2N1dDsKICB9 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBf U2l6ZSwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19pbnRyb3NvcnRfbG9vcChfUmFuZG9tQWNjZXNz SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s YXN0LCBfVHAqLAogICAgICAgICAgICAgICAgICAgICAgX1NpemUgX19kZXB0aF9saW1pdCwgX0Nv bXBhcmUgX19jb21wKQp7CiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiBfX3N0bF90aHJlc2hv bGQpIHsKICAgIGlmIChfX2RlcHRoX2xpbWl0ID09IDApIHsKICAgICAgcGFydGlhbF9zb3J0KF9f Zmlyc3QsIF9fbGFzdCwgX19sYXN0LCBfX2NvbXApOwogICAgICByZXR1cm47CiAgICB9CiAgICAt LV9fZGVwdGhfbGltaXQ7CiAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgIF9fdW5n dWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfVHAoX19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSksIF9fY29tcCkpLAog ICAgICAgX19jb21wKTsKICAgIF9faW50cm9zb3J0X2xvb3AoX19jdXQsIF9fbGFzdCwgKF9UcCop IDAsIF9fZGVwdGhfbGltaXQsIF9fY29tcCk7CiAgICBfX2xhc3QgPSBfX2N1dDsKICB9Cn0KCnRl bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQgc29ydChfUmFuZG9t QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCnsKCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgIT0gX19sYXN0 KSB7CiAgICBfX2ludHJvc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICBfX2xnKF9f bGFzdCAtIF9fZmlyc3QpICogMik7CiAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9fZmlyc3Qs IF9fbGFzdCk7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNz IF9Db21wYXJlPgppbmxpbmUgdm9pZCBzb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9S YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXAp CnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIGlmIChfX2Zp cnN0ICE9IF9fbGFzdCkgewogICAgX19pbnRyb3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwKICAgICAgICAgICAgICAg ICAgICAgX19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIsCiAgICAgICAgICAgICAgICAgICAgIF9f Y29tcCk7CiAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21w KTsKICB9Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgp2b2lkIF9faW5w bGFjZV9zdGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCnsKICBpZiAoX19sYXN0IC0g X19maXJzdCA8IDE1KSB7CiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAg ICByZXR1cm47CiAgfQogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIChf X2xhc3QgLSBfX2ZpcnN0KSAvIDI7CiAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9f bWlkZGxlKTsKICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19taWRkbGUsIF9fbGFzdCk7CiAgX19t ZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgX19taWRkbGUgLSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgX19sYXN0IC0gX19taWRkbGUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0 ZXIsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9faW5wbGFjZV9zdGFibGVfc29ydChfUmFuZG9tQWNj ZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz SXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewogIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwg MTUpIHsKICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAg cmV0dXJuOwogIH0KICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyAoX19s YXN0IC0gX19maXJzdCkgLyAyOwogIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX21p ZGRsZSwgX19jb21wKTsKICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19taWRkbGUsIF9fbGFzdCwg X19jb21wKTsKICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xh c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX21pZGRsZSAtIF9fZmlyc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICBfX2xhc3QgLSBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcjEsIGNsYXNz IF9SYW5kb21BY2Nlc3NJdGVyMiwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4Kdm9pZCBfX21l cmdlX3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlcjEgX19maXJzdCwKICAgICAgICAgICAgICAg ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg IF9SYW5kb21BY2Nlc3NJdGVyMiBfX3Jlc3VsdCwgX0Rpc3RhbmNlIF9fc3RlcF9zaXplKQp7CiAg X0Rpc3RhbmNlIF9fdHdvX3N0ZXAgPSAyICogX19zdGVwX3NpemU7CgogIHdoaWxlIChfX2xhc3Qg LSBfX2ZpcnN0ID49IF9fdHdvX3N0ZXApIHsKICAgIF9fcmVzdWx0ID0gbWVyZ2UoX19maXJzdCwg X19maXJzdCArIF9fc3RlcF9zaXplLAogICAgICAgICAgICAgICAgICAgICBfX2ZpcnN0ICsgX19z dGVwX3NpemUsIF9fZmlyc3QgKyBfX3R3b19zdGVwLAogICAgICAgICAgICAgICAgICAgICBfX3Jl c3VsdCk7CiAgICBfX2ZpcnN0ICs9IF9fdHdvX3N0ZXA7CiAgfQoKICBfX3N0ZXBfc2l6ZSA9IG1p bihfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fc3RlcF9zaXplKTsKICBtZXJnZShfX2Zp cnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19sYXN0 LAogICAgICAgIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy MSwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIyLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlLCBj bGFzcyBfQ29tcGFyZT4Kdm9pZCBfX21lcmdlX3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlcjEg X19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcjEgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMiBfX3Jlc3VsdCwgX0Rp c3RhbmNlIF9fc3RlcF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29t cCkKewogIF9EaXN0YW5jZSBfX3R3b19zdGVwID0gMiAqIF9fc3RlcF9zaXplOwoKICB3aGlsZSAo X19sYXN0IC0gX19maXJzdCA+PSBfX3R3b19zdGVwKSB7CiAgICBfX3Jlc3VsdCA9IG1lcmdlKF9f Zmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgX19maXJz dCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX190d29fc3RlcCwKICAgICAgICAgICAgICAgICAg ICAgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICBfX2ZpcnN0ICs9 IF9fdHdvX3N0ZXA7CiAgfQogIF9fc3RlcF9zaXplID0gbWluKF9EaXN0YW5jZShfX2xhc3QgLSBf X2ZpcnN0KSwgX19zdGVwX3NpemUpOwoKICBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVw X3NpemUsCiAgICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2xhc3QsCiAgICAgICAgX19y ZXN1bHQsCiAgICAgICAgX19jb21wKTsKfQoKY29uc3QgaW50IF9fc3RsX2NodW5rX3NpemUgPSA3 OwoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CnZv aWQgX19jaHVua19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfRGlzdGFu Y2UgX19jaHVua19zaXplKQp7CiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX19jaHVua19z aXplKSB7CiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfX2NodW5rX3Np emUpOwogICAgX19maXJzdCArPSBfX2NodW5rX3NpemU7CiAgfQogIF9faW5zZXJ0aW9uX3NvcnQo X19maXJzdCwgX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBj bGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fY2h1bmtfaW5zZXJ0aW9uX3Nv cnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9E aXN0YW5jZSBfX2NodW5rX3NpemUsIF9Db21wYXJlIF9fY29tcCkKewogIHdoaWxlIChfX2xhc3Qg LSBfX2ZpcnN0ID49IF9fY2h1bmtfc2l6ZSkgewogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0 LCBfX2ZpcnN0ICsgX19jaHVua19zaXplLCBfX2NvbXApOwogICAgX19maXJzdCArPSBfX2NodW5r X3NpemU7CiAgfQogIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFz cyBfRGlzdGFuY2U+CnZvaWQgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9SYW5kb21BY2Nlc3NJ dGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZm ZXIsIF9EaXN0YW5jZSopCnsKICBfRGlzdGFuY2UgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0Owog IF9Qb2ludGVyIF9fYnVmZmVyX2xhc3QgPSBfX2J1ZmZlciArIF9fbGVuOwoKICBfRGlzdGFuY2Ug X19zdGVwX3NpemUgPSBfX3N0bF9jaHVua19zaXplOwogIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQo X19maXJzdCwgX19sYXN0LCBfX3N0ZXBfc2l6ZSk7CgogIHdoaWxlIChfX3N0ZXBfc2l6ZSA8IF9f bGVuKSB7CiAgICBfX21lcmdlX3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fYnVmZmVyLCBf X3N0ZXBfc2l6ZSk7CiAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgX19tZXJnZV9zb3J0X2xvb3Ao X19idWZmZXIsIF9fYnVmZmVyX2xhc3QsIF9fZmlyc3QsIF9fc3RlcF9zaXplKTsKICAgIF9fc3Rl cF9zaXplICo9IDI7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNs YXNzIF9Qb2ludGVyLCBjbGFzcyBfRGlzdGFuY2UsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4K dm9pZCBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBf UG9pbnRlciBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNl KiwgX0NvbXBhcmUgX19jb21wKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJz dDsKICBfUG9pbnRlciBfX2J1ZmZlcl9sYXN0ID0gX19idWZmZXIgKyBfX2xlbjsKCiAgX0Rpc3Rh bmNlIF9fc3RlcF9zaXplID0gX19zdGxfY2h1bmtfc2l6ZTsKICBfX2NodW5rX2luc2VydGlvbl9z b3J0KF9fZmlyc3QsIF9fbGFzdCwgX19zdGVwX3NpemUsIF9fY29tcCk7CgogIHdoaWxlIChfX3N0 ZXBfc2l6ZSA8IF9fbGVuKSB7CiAgICBfX21lcmdlX3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3Qs IF9fYnVmZmVyLCBfX3N0ZXBfc2l6ZSwgX19jb21wKTsKICAgIF9fc3RlcF9zaXplICo9IDI7CiAg ICBfX21lcmdlX3NvcnRfbG9vcChfX2J1ZmZlciwgX19idWZmZXJfbGFzdCwgX19maXJzdCwgX19z dGVwX3NpemUsIF9fY29tcCk7CiAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogIH0KfQoKdGVtcGxhdGUg PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfUG9pbnRlciwgY2xhc3MgX0Rpc3RhbmNl Pgp2b2lkIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1Bv aW50ZXIgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19i dWZmZXJfc2l6ZSkKewogIF9EaXN0YW5jZSBfX2xlbiA9IChfX2xhc3QgLSBfX2ZpcnN0ICsgMSkg LyAyOwogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIF9fbGVuOwogIGlm IChfX2xlbiA+IF9fYnVmZmVyX3NpemUpIHsKICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19m aXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgIF9fc3RhYmxlX3Nv cnRfYWRhcHRpdmUoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwog IH0KICBlbHNlIHsKICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRs ZSwgX19idWZmZXIsIChfRGlzdGFuY2UqKTApOwogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVy KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCAoX0Rpc3RhbmNlKikwKTsKICB9CiAgX19tZXJn ZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfRGlzdGFuY2UoX19taWRkbGUg LSBfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX2xhc3QgLSBfX21pZGRs ZSksIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B Y2Nlc3NJdGVyLCBjbGFzcyBfUG9pbnRlciwgY2xhc3MgX0Rpc3RhbmNlLAogICAgICAgICAgY2xh c3MgX0NvbXBhcmU+CnZvaWQgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfUmFuZG9tQWNjZXNzSXRl ciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg X19sYXN0LCBfUG9pbnRlciBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9E aXN0YW5jZSBfX2J1ZmZlcl9zaXplLCBfQ29tcGFyZSBfX2NvbXApCnsKICBfRGlzdGFuY2UgX19s ZW4gPSAoX19sYXN0IC0gX19maXJzdCArIDEpIC8gMjsKICBfUmFuZG9tQWNjZXNzSXRlciBfX21p ZGRsZSA9IF9fZmlyc3QgKyBfX2xlbjsKICBpZiAoX19sZW4gPiBfX2J1ZmZlcl9zaXplKSB7CiAg ICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19i dWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIF9fc3Rh YmxlX3NvcnRfYWRhcHRpdmUoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIF9fYnVmZmVyX3Np emUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgfQogIGVsc2UgewogICAg X19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgKF9E aXN0YW5jZSopMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICBf X21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIChfRGlz dGFuY2UqKTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogIH0KICBf X21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9EaXN0YW5jZShfX21p ZGRsZSAtIF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fbGFzdCAtIF9f bWlkZGxlKSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICBfX2Nv bXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xh c3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX3N0YWJsZV9zb3J0X2F1eChfUmFuZG9tQWNjZXNz SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz SXRlciBfX2xhc3QsIF9UcCosIF9EaXN0YW5jZSopCnsKICBfVGVtcG9yYXJ5X2J1ZmZlcjxfUmFu ZG9tQWNjZXNzSXRlciwgX1RwPiBidWYoX19maXJzdCwgX19sYXN0KTsKICBpZiAoYnVmLmJlZ2lu KCkgPT0gMCkKICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogIGVs c2UKICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBidWYuYmVnaW4o KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKGJ1Zi5zaXplKCkpKTsKfQoK dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0 YW5jZSwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIF9fc3RhYmxlX3NvcnRfYXV4KF9SYW5k b21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5k b21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwgX0Rpc3RhbmNlKiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CiAgX1RlbXBvcmFyeV9idWZmZXI8X1JhbmRv bUFjY2Vzc0l0ZXIsIF9UcD4gYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgaWYgKGJ1Zi5iZWdpbigp ID09IDApCiAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXAp OwogIGVsc2UKICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBidWYu YmVnaW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKGJ1Zi5zaXplKCkp LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1JhbmRvbUFjY2Vzc0l0ZXI+CmlubGluZSB2b2lkIHN0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJ dGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f bGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBfX3N0 YWJsZV9zb3J0X2F1eChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgX192YWx1 ZV90eXBlKF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2Zp cnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBh cmU+CmlubGluZSB2b2lkIHN0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUg X19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBf X3N0YWJsZV9zb3J0X2F1eChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgX192 YWx1ZV90eXBlKF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShf X2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9CgoKCnRlbXBsYXRlIDxjbGFz cyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgp2b2lkIF9fcGFydGlhbF9zb3J0KF9SYW5k b21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAg ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKikKewogIG1ha2VfaGVh cChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX21p ZGRsZTsgX19pIDwgX19sYXN0OyArK19faSkKICAgIGlmICgqX19pIDwgKl9fZmlyc3QpCiAgICAg IF9fcG9wX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9faSwgX1RwKCpfX2kpLAogICAgICAgICAg ICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7CiAgc29ydF9oZWFwKF9fZmlyc3QsIF9f bWlkZGxlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgdm9p ZCBwYXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAg ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAg ICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKCgogIF9fcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbWlkZGxlLCBf X2xhc3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t QWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX3BhcnRpYWxfc29y dChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwK ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCosIF9Db21w YXJlIF9fY29tcCkKewogIG1ha2VfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19jb21wKTsKICBm b3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fbWlkZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19p KQogICAgaWYgKF9fY29tcCgqX19pLCAqX19maXJzdCkpCiAgICAgIF9fcG9wX2hlYXAoX19maXJz dCwgX19taWRkbGUsIF9faSwgX1RwKCpfX2kpLCBfX2NvbXAsCiAgICAgICAgICAgICAgICAgX19k aXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKICBzb3J0X2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9f Y29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBh cmU+CmlubGluZSB2b2lkIHBhcnRpYWxfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAg ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9f Y29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgX19w YXJ0aWFsX3NvcnQoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmly c3QpLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRv bUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZSwKICAgICAgICAgIGNsYXNzIF9UcD4KX1JhbmRv bUFjY2Vzc0l0ZXIgX19wYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1 bHRfZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj Y2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfRGlzdGFuY2UqLCBfVHAqKQp7CiAgaWYgKF9fcmVzdWx0X2ZpcnN0ID09IF9fcmVzdWx0 X2xhc3QpIHJldHVybiBfX3Jlc3VsdF9sYXN0OwogIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0 X3JlYWxfbGFzdCA9IF9fcmVzdWx0X2ZpcnN0OwogIHdoaWxlKF9fZmlyc3QgIT0gX19sYXN0ICYm IF9fcmVzdWx0X3JlYWxfbGFzdCAhPSBfX3Jlc3VsdF9sYXN0KSB7CiAgICAqX19yZXN1bHRfcmVh bF9sYXN0ID0gKl9fZmlyc3Q7CiAgICArK19fcmVzdWx0X3JlYWxfbGFzdDsKICAgICsrX19maXJz dDsKICB9CiAgbWFrZV9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QpOwog IHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgaWYgKCpfX2ZpcnN0IDwgKl9fcmVzdWx0 X2ZpcnN0KQogICAgICBfX2FkanVzdF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfRGlzdGFuY2UoMCks CiAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fcmVzdWx0X3JlYWxfbGFzdCAtIF9fcmVz dWx0X2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICBfVHAoKl9fZmlyc3QpKTsKICAgICsrX19m aXJzdDsKICB9CiAgc29ydF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3Qp OwogIHJldHVybiBfX3Jlc3VsdF9yZWFsX2xhc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ dGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIF9SYW5kb21BY2Nlc3NJdGVyCnBh cnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2ZpcnN0LAogICAgICAg ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0KQp7CgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CgoKICByZXR1cm4gX19wYXJ0aWFsX3NvcnRfY29weShf X2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9sYXN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX3Jlc3VsdF9maXJzdCksCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxh dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29t cGFyZSwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwPgpfUmFuZG9tQWNjZXNz SXRlciBfX3BhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3Vs dF9maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9t QWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9Db21wYXJlIF9fY29tcCwgX0Rpc3RhbmNlKiwgX1RwKikKewogIGlmIChfX3Jl c3VsdF9maXJzdCA9PSBfX3Jlc3VsdF9sYXN0KSByZXR1cm4gX19yZXN1bHRfbGFzdDsKICBfUmFu ZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9yZWFsX2xhc3QgPSBfX3Jlc3VsdF9maXJzdDsKICB3aGls ZShfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX3Jlc3VsdF9yZWFsX2xhc3QgIT0gX19yZXN1bHRfbGFz dCkgewogICAgKl9fcmVzdWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0OwogICAgKytfX3Jlc3VsdF9y ZWFsX2xhc3Q7CiAgICArK19fZmlyc3Q7CiAgfQogIG1ha2VfaGVhcChfX3Jlc3VsdF9maXJzdCwg X19yZXN1bHRfcmVhbF9sYXN0LCBfX2NvbXApOwogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkg ewogICAgaWYgKF9fY29tcCgqX19maXJzdCwgKl9fcmVzdWx0X2ZpcnN0KSkKICAgICAgX19hZGp1 c3RfaGVhcChfX3Jlc3VsdF9maXJzdCwgX0Rpc3RhbmNlKDApLAogICAgICAgICAgICAgICAgICAg IF9EaXN0YW5jZShfX3Jlc3VsdF9yZWFsX2xhc3QgLSBfX3Jlc3VsdF9maXJzdCksCiAgICAgICAg ICAgICAgICAgICAgX1RwKCpfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwog ICAgKytfX2ZpcnN0OwogIH0KICBzb3J0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3Jl YWxfbGFzdCwgX19jb21wKTsKICByZXR1cm4gX19yZXN1bHRfcmVhbF9sYXN0Owp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21w YXJlPgppbmxpbmUgX1JhbmRvbUFjY2Vzc0l0ZXIKcGFydGlhbF9zb3J0X2NvcHkoX0lucHV0SXRl ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj Y2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3QsCiAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ dGVyIF9fcmVzdWx0X2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgcmV0dXJuIF9f cGFydGlhbF9zb3J0X2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdF9maXJzdCwgX19yZXN1 bHRfbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXAsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fcmVzdWx0X2ZpcnN0KSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9CgoKCnRlbXBs YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgp2b2lkIF9fbnRoX2VsZW1l bnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAg ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCopCnsKICB3aGls ZSAoX19sYXN0IC0gX19maXJzdCA+IDMpIHsKICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0K ICAgICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9UcChfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiks CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSkp KTsKICAgIGlmIChfX2N1dCA8PSBfX250aCkKICAgICAgX19maXJzdCA9IF9fY3V0OwogICAgZWxz ZQogICAgICBfX2xhc3QgPSBfX2N1dDsKICB9CiAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBf X2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CmlubGluZSB2b2lk IG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy IF9fbnRoLAogICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qp CnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX19udGhfZWxl bWVudChfX2ZpcnN0LCBfX250aCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBh cmU+CnZvaWQgX19udGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9t QWNjZXNzSXRlciBfX250aCwKICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f bGFzdCwgX1RwKiwgX0NvbXBhcmUgX19jb21wKQp7CiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3Qg PiAzKSB7CiAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgIF9fdW5ndWFyZGVkX3Bh cnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAo X19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSksCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19jb21wKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2NvbXApOwogICAgaWYgKF9fY3V0IDw9IF9fbnRoKQogICAgICBfX2ZpcnN0ID0gX19jdXQ7 CiAgICBlbHNlCiAgICAgIF9fbGFzdCA9IF9fY3V0OwogIH0KICBfX2luc2VydGlvbl9zb3J0KF9f Zmlyc3QsIF9fbGFzdCwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ dGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgbnRoX2VsZW1lbnQoX1JhbmRvbUFjY2Vz c0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAgICAgICAgICAgICAgICAg ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CgogICAg ICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBfX250aF9lbGVtZW50KF9f Zmlyc3QsIF9fbnRoLCBfX2xhc3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwgX19jb21wKTsKfQoK CgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFu Y2U+Cl9Gb3J3YXJkSXRlciBfX2xvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y d2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9f dmFsLCBfRGlzdGFuY2UqKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gMDsKICBkaXN0YW5jZShfX2Zp cnN0LCBfX2xhc3QsIF9fbGVuKTsKICBfRGlzdGFuY2UgX19oYWxmOwogIF9Gb3J3YXJkSXRlciBf X21pZGRsZTsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgX19oYWxmID0gX19sZW4gPj4gMTsK ICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAg ICBpZiAoKl9fbWlkZGxlIDwgX192YWwpIHsKICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAg ICArK19fZmlyc3Q7CiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgfQogICAg ZWxzZQogICAgICBfX2xlbiA9IF9faGFsZjsKICB9CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRlciBs b3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsKQp7CgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CgogIHJldHVybiBfX2xvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFz dCwgX192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3Qp KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29t cGFyZSwgY2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX19sb3dlcl9ib3VuZChfRm9yd2Fy ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wLCBfRGlzdGFuY2UqKQp7 CiAgX0Rpc3RhbmNlIF9fbGVuID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVu KTsKICBfRGlzdGFuY2UgX19oYWxmOwogIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAgd2hpbGUg KF9fbGVuID4gMCkgewogICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgIF9fbWlkZGxlID0gX19m aXJzdDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICBpZiAoX19jb21wKCpfX21p ZGRsZSwgX192YWwpKSB7CiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgKytfX2ZpcnN0 OwogICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgIH0KICAgIGVsc2UKICAgICAg X19sZW4gPSBfX2hhbGY7CiAgfQogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgX0ZvcndhcmRJ dGVyIGxvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21w YXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBy ZXR1cm4gX19sb3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2NvbXAsCiAgICAg ICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUg PGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+Cl9Gb3J3YXJk SXRlciBfX3VwcGVyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfRGlzdGFu Y2UqKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3Qs IF9fbGVuKTsKICBfRGlzdGFuY2UgX19oYWxmOwogIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAg d2hpbGUgKF9fbGVuID4gMCkgewogICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgIF9fbWlkZGxl ID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICBpZiAoX192YWwg PCAqX19taWRkbGUpCiAgICAgIF9fbGVuID0gX19oYWxmOwogICAgZWxzZSB7CiAgICAgIF9fZmly c3QgPSBfX21pZGRsZTsKICAgICAgKytfX2ZpcnN0OwogICAgICBfX2xlbiA9IF9fbGVuIC0gX19o YWxmIC0gMTsKICAgIH0KICB9CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf Rm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRlciB1cHBlcl9ib3VuZChf Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsKQp7CgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CgogIHJldHVybiBfX3VwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsCiAg ICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxh dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3Mg X0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX191cHBlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJz dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg X1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wLCBfRGlzdGFuY2UqKQp7CiAgX0Rpc3RhbmNlIF9f bGVuID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsKICBfRGlzdGFuY2Ug X19oYWxmOwogIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewog ICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgIGFkdmFu Y2UoX19taWRkbGUsIF9faGFsZik7CiAgICBpZiAoX19jb21wKF9fdmFsLCAqX19taWRkbGUpKQog ICAgICBfX2xlbiA9IF9faGFsZjsKICAgIGVsc2UgewogICAgICBfX2ZpcnN0ID0gX19taWRkbGU7 CiAgICAgICsrX19maXJzdDsKICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICB9 CiAgfQogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBj bGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgX0ZvcndhcmRJdGVyIHVwcGVyX2JvdW5k KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCkKewoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICByZXR1cm4gX191cHBlcl9i b3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2NvbXAsCiAgICAgICAgICAgICAgICAgICAg ICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk SXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CnBhaXI8X0ZvcndhcmRJdGVyLCBfRm9y d2FyZEl0ZXI+Cl9fZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl ciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgX0Rpc3RhbmNlKikKewog IF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7 CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGUsIF9fbGVmdCwgX19y aWdodDsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAg IF9fbWlkZGxlID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICBp ZiAoKl9fbWlkZGxlIDwgX192YWwpIHsKICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAr K19fZmlyc3Q7CiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgfQogICAgZWxz ZSBpZiAoX192YWwgPCAqX19taWRkbGUpCiAgICAgIF9fbGVuID0gX19oYWxmOwogICAgZWxzZSB7 CiAgICAgIF9fbGVmdCA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCBfX3ZhbCk7CiAg ICAgIGFkdmFuY2UoX19maXJzdCwgX19sZW4pOwogICAgICBfX3JpZ2h0ID0gdXBwZXJfYm91bmQo KytfX21pZGRsZSwgX19maXJzdCwgX192YWwpOwogICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0 ZXIsIF9Gb3J3YXJkSXRlcj4oX19sZWZ0LCBfX3JpZ2h0KTsKICAgIH0KICB9CiAgcmV0dXJuIHBh aXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmlyc3QpOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBwYWlyPF9Gb3J3YXJk SXRlciwgX0ZvcndhcmRJdGVyPgplcXVhbF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv cndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCkKewoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwoKICByZXR1cm4gX19lcXVhbF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLAog ICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNz IF9EaXN0YW5jZT4KcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4KX19lcXVhbF9yYW5n ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBf X3ZhbCwKICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXAsIF9EaXN0YW5jZSopCnsKICBfRGlz dGFuY2UgX19sZW4gPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwogIF9E aXN0YW5jZSBfX2hhbGY7CiAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfX2xlZnQsIF9fcmlnaHQ7 CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICBfX21p ZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgaWYgKF9f Y29tcCgqX19taWRkbGUsIF9fdmFsKSkgewogICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAg ICsrX19maXJzdDsKICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICB9CiAgICBl bHNlIGlmIChfX2NvbXAoX192YWwsICpfX21pZGRsZSkpCiAgICAgIF9fbGVuID0gX19oYWxmOwog ICAgZWxzZSB7CiAgICAgIF9fbGVmdCA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCBf X3ZhbCwgX19jb21wKTsKICAgICAgYWR2YW5jZShfX2ZpcnN0LCBfX2xlbik7CiAgICAgIF9fcmln aHQgPSB1cHBlcl9ib3VuZCgrK19fbWlkZGxlLCBfX2ZpcnN0LCBfX3ZhbCwgX19jb21wKTsKICAg ICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fbGVmdCwgX19yaWdo dCk7CiAgICB9CiAgfQogIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihf X2ZpcnN0LCBfX2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3Mg X1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0 ZXI+CmVxdWFsX3JhbmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0 LCBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIF9fZXF1YWxfcmFuZ2Uo X19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21wLAogICAgICAgICAgICAgICAgICAgICAgIF9f ZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs IGNsYXNzIF9UcD4KYm9vbCBiaW5hcnlfc2VhcmNoKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y d2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkKewoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBfRm9yd2FyZEl0ZXIgX19pID0gbG93ZXJfYm91 bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CiAgcmV0dXJuIF9faSAhPSBfX2xhc3QgJiYgIShf X3ZhbCA8ICpfX2kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAs IGNsYXNzIF9Db21wYXJlPgpib29sIGJpbmFyeV9zZWFyY2goX0ZvcndhcmRJdGVyIF9fZmlyc3Qs IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFs LAogICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CgogIF9Gb3J3YXJkSXRlciBfX2kgPSBsb3dlcl9ib3VuZChf X2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2NvbXApOwogIHJldHVybiBfX2kgIT0gX19sYXN0ICYm ICFfX2NvbXAoX192YWwsICpfX2kpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwg Y2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciBtZXJnZShf SW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAg ICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAg ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBf X2xhc3QyKSB7CiAgICBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgICpfX3Jlc3Vs dCA9ICpfX2ZpcnN0MjsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICAgIGVsc2UgewogICAgICAq X19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICB9CiAgICArK19fcmVz dWx0OwogIH0KICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwg X19sYXN0MSwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFz cyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsCiAgICAgICAgICBjbGFzcyBfQ29tcGFy ZT4KX091dHB1dEl0ZXIgbWVyZ2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9f bGFzdDEsCiAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVy MiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBh cmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgd2hp bGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgaWYg KF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmly c3QyOwogICAgICArK19fZmlyc3QyOwogICAgfQogICAgZWxzZSB7CiAgICAgICpfX3Jlc3VsdCA9 ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgIH0KICAgICsrX19yZXN1bHQ7CiAgfQog IHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBf X3Jlc3VsdCkpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNz IF9EaXN0YW5jZT4Kdm9pZCBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9CaWRpcmVjdGlvbmFsSXRl ciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy IF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9E aXN0YW5jZSBfX2xlbjIpCnsKICBpZiAoX19sZW4xID09IDAgfHwgX19sZW4yID09IDApCiAgICBy ZXR1cm47CiAgaWYgKF9fbGVuMSArIF9fbGVuMiA9PSAyKSB7CiAgICBpZiAoKl9fbWlkZGxlIDwg Kl9fZmlyc3QpCiAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICByZXR1cm47 CiAgfQogIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgX0JpZGly ZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogIF9EaXN0YW5jZSBfX2xlbjEx ID0gMDsKICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewog ICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjEx KTsKICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2Zp cnN0X2N1dCk7CiAgICBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsK ICB9CiAgZWxzZSB7CiAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgIGFkdmFuY2UoX19zZWNv bmRfY3V0LCBfX2xlbjIyKTsKICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwg X19taWRkbGUsICpfX3NlY29uZF9jdXQpOwogICAgZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9j dXQsIF9fbGVuMTEpOwogIH0KICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlCiAgICA9 IHJvdGF0ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgX19tZXJnZV93 aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLAogICAgICAg ICAgICAgICAgICAgICAgICAgX19sZW4xMSwgX19sZW4yMik7CiAgX19tZXJnZV93aXRob3V0X2J1 ZmZlcihfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LCBfX2xlbjEgLSBfX2xlbjEx LAogICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMik7Cn0KCnRlbXBsYXRl IDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX0NvbXBh cmU+CnZvaWQgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJz dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRs ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2Ug X19sZW4yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CiAg aWYgKF9fbGVuMSA9PSAwIHx8IF9fbGVuMiA9PSAwKQogICAgcmV0dXJuOwogIGlmIChfX2xlbjEg KyBfX2xlbjIgPT0gMikgewogICAgaWYgKF9fY29tcCgqX19taWRkbGUsICpfX2ZpcnN0KSkKICAg ICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgIHJldHVybjsKICB9CiAgX0JpZGly ZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICBfQmlkaXJlY3Rpb25hbEl0ZXIg X19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOwogIF9EaXN0 YW5jZSBfX2xlbjIyID0gMDsKICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICBfX2xlbjExID0g X19sZW4xIC8gMjsKICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgX19zZWNv bmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0LCBfX2Nv bXApOwogICAgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgfQog IGVsc2UgewogICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICBhZHZhbmNlKF9fc2Vjb25kX2N1 dCwgX19sZW4yMik7CiAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlk ZGxlLCAqX19zZWNvbmRfY3V0LCBfX2NvbXApOwogICAgZGlzdGFuY2UoX19maXJzdCwgX19maXJz dF9jdXQsIF9fbGVuMTEpOwogIH0KICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlCiAg ICA9IHJvdGF0ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgX19tZXJn ZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xl bjExLCBfX2xlbjIyLAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICBfX21lcmdl X3dpdGhvdXRfYnVmZmVyKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVu MSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIgLSBfX2xlbjIyLCBf X2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0Jp ZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4KX0JpZGlyZWN0aW9u YWxJdGVyMSBfX3JvdGF0ZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBf X21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rp b25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf RGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19idWZmZXIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpCnsKICBf QmlkaXJlY3Rpb25hbEl0ZXIyIF9fYnVmZmVyX2VuZDsKICBpZiAoX19sZW4xID4gX19sZW4yICYm IF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fbWlk ZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19taWRk bGUsIF9fbGFzdCk7CiAgICByZXR1cm4gY29weShfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2Zp cnN0KTsKICB9CiAgZWxzZSBpZiAoX19sZW4xIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgIF9fYnVm ZmVyX2VuZCA9IGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKICAgIGNvcHkoX19t aWRkbGUsIF9fbGFzdCwgX19maXJzdCk7CiAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2J1ZmZl ciwgX19idWZmZXJfZW5kLCBfX2xhc3QpOwogIH0KICBlbHNlCiAgICByZXR1cm4gcm90YXRlKF9f Zmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9u YWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgIGNsYXNzIF9CaWRp cmVjdGlvbmFsSXRlcjM+Cl9CaWRpcmVjdGlvbmFsSXRlcjMgX19tZXJnZV9iYWNrd2FyZChfQmlk aXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMgX19y ZXN1bHQpCnsKICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgIHJldHVybiBjb3B5X2JhY2t3 YXJkKF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgaWYgKF9fZmlyc3QyID09IF9fbGFz dDIpCiAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQp OwogIC0tX19sYXN0MTsKICAtLV9fbGFzdDI7CiAgd2hpbGUgKHRydWUpIHsKICAgIGlmICgqX19s YXN0MiA8ICpfX2xhc3QxKSB7CiAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDE7CiAgICAgIGlm IChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmly c3QyLCArK19fbGFzdDIsIF9fcmVzdWx0KTsKICAgICAgLS1fX2xhc3QxOwogICAgfQogICAgZWxz ZSB7CiAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDI7CiAgICAgIGlmIChfX2ZpcnN0MiA9PSBf X2xhc3QyKQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCArK19fbGFzdDEs IF9fcmVzdWx0KTsKICAgICAgLS1fX2xhc3QyOwogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNz IF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAg ICBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIzLCBjbGFzcyBfQ29tcGFyZT4KX0JpZGlyZWN0aW9u YWxJdGVyMyBfX21lcmdlX2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9f bGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h bEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Jp ZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMyBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewogIGlmIChfX2ZpcnN0MSA9PSBfX2xh c3QxKQogICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDIsIF9fbGFzdDIsIF9fcmVzdWx0 KTsKICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9f Zmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgLS1fX2xhc3QxOwogIC0tX19sYXN0MjsKICB3 aGlsZSAodHJ1ZSkgewogICAgaWYgKF9fY29tcCgqX19sYXN0MiwgKl9fbGFzdDEpKSB7CiAgICAg ICotLV9fcmVzdWx0ID0gKl9fbGFzdDE7CiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQog ICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCArK19fbGFzdDIsIF9fcmVzdWx0 KTsKICAgICAgLS1fX2xhc3QxOwogICAgfQogICAgZWxzZSB7CiAgICAgICotLV9fcmVzdWx0ID0g Kl9fbGFzdDI7CiAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBj b3B5X2JhY2t3YXJkKF9fZmlyc3QxLCArK19fbGFzdDEsIF9fcmVzdWx0KTsKICAgICAgLS1fX2xh c3QyOwogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xh c3MgX0Rpc3RhbmNlLCBjbGFzcyBfUG9pbnRlcj4Kdm9pZCBfX21lcmdlX2FkYXB0aXZlKF9CaWRp cmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9u YWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5j ZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3Rh bmNlIF9fYnVmZmVyX3NpemUpCnsKICBpZiAoX19sZW4xIDw9IF9fbGVuMiAmJiBfX2xlbjEgPD0g X19idWZmZXJfc2l6ZSkgewogICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0 LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgbWVyZ2UoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwg X19taWRkbGUsIF9fbGFzdCwgX19maXJzdCk7CiAgfQogIGVsc2UgaWYgKF9fbGVuMiA8PSBfX2J1 ZmZlcl9zaXplKSB7CiAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxlLCBf X2xhc3QsIF9fYnVmZmVyKTsKICAgIF9fbWVyZ2VfYmFja3dhcmQoX19maXJzdCwgX19taWRkbGUs IF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbGFzdCk7CiAgfQogIGVsc2UgewogICAgX0JpZGly ZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICAgIF9CaWRpcmVjdGlvbmFsSXRl ciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAg IF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAg X19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEp OwogICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19m aXJzdF9jdXQpOwogICAgICBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjIy KTsKICAgIH0KICAgIGVsc2UgewogICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAgYWR2 YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2Jv dW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0KTsKICAgICAgZGlzdGFuY2UoX19m aXJzdCwgX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgfQogICAgX0JpZGlyZWN0aW9uYWxJdGVy IF9fbmV3X21pZGRsZSA9CiAgICAgIF9fcm90YXRlX2FkYXB0aXZlKF9fZmlyc3RfY3V0LCBfX21p ZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjEgLSBfX2xlbjExLAogICAgICAgICAgICAgICAgICAg ICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICBfX21lcmdlX2FkYXB0 aXZlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsIF9fbGVuMTEsCiAgICAgICAg ICAgICAgICAgICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgIF9fbWVy Z2VfYWRhcHRpdmUoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0g X19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMiwgX19idWZmZXIs IF9fYnVmZmVyX3NpemUpOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRl ciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfUG9pbnRlciwKICAgICAgICAgIGNsYXNzIF9Db21w YXJlPgp2b2lkIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAg ICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAg ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg ICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAg ICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwKICAgICAg ICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewogIGlmIChfX2xlbjEgPD0gX19sZW4y ICYmIF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQg PSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAgICBtZXJnZShfX2J1ZmZlciwg X19idWZmZXJfZW5kLCBfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0LCBfX2NvbXApOwogIH0KICBl bHNlIGlmIChfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgX1BvaW50ZXIgX19idWZmZXJf ZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICBfX21lcmdlX2JhY2t3 YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgfQogIGVsc2UgewogICAgX0JpZGlyZWN0aW9u YWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3Nl Y29uZF9jdXQgPSBfX21pZGRsZTsKICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgIF9EaXN0 YW5jZSBfX2xlbjIyID0gMDsKICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAgX19sZW4x MSA9IF9fbGVuMSAvIDI7CiAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAg ICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9j dXQsIF9fY29tcCk7CiAgICAgIGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVu MjIpOwogICAgfQogICAgZWxzZSB7CiAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICBh ZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJf Ym91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQsIF9fY29tcCk7CiAgICAgIGRp c3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgIH0KICAgIF9CaWRpcmVj dGlvbmFsSXRlciBfX25ld19taWRkbGUgPQogICAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0 X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAg ICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgX19t ZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjEx LAogICAgICAgICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwg X19jb21wKTsKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQs IF9fbGFzdCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0g X19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsIF9fY29tcCk7CiAgfQp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4K aW5saW5lIHZvaWQgX19pbnBsYWNlX21lcmdlX2F1eChfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJz dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19t aWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy IF9fbGFzdCwgX1RwKiwgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbjEgPSAwOwogIGRp c3RhbmNlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xlbjEpOwogIF9EaXN0YW5jZSBfX2xlbjIgPSAw OwogIGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMik7CgogIF9UZW1wb3JhcnlfYnVm ZmVyPF9CaWRpcmVjdGlvbmFsSXRlciwgX1RwPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwogIGlm IChfX2J1Zi5iZWdpbigpID09IDApCiAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3Qs IF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yKTsKICBlbHNlCiAgICBfX21lcmdlX2Fk YXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLAogICAgICAg ICAgICAgICAgICAgICBfX2J1Zi5iZWdpbigpLCBfRGlzdGFuY2UoX19idWYuc2l6ZSgpKSk7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9UcCwKICAgICAgICAg IGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIF9faW5wbGFjZV9t ZXJnZV9hdXgoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsIF9UcCosIF9EaXN0YW5j ZSosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CiAg X0Rpc3RhbmNlIF9fbGVuMSA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19taWRkbGUsIF9fbGVu MSk7CiAgX0Rpc3RhbmNlIF9fbGVuMiA9IDA7CiAgZGlzdGFuY2UoX19taWRkbGUsIF9fbGFzdCwg X19sZW4yKTsKCiAgX1RlbXBvcmFyeV9idWZmZXI8X0JpZGlyZWN0aW9uYWxJdGVyLCBfVHA+IF9f YnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgaWYgKF9fYnVmLmJlZ2luKCkgPT0gMCkKICAgIF9fbWVy Z2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xl bjIsIF9fY29tcCk7CiAgZWxzZQogICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRs ZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgX19idWYuYmVn aW4oKSwgX0Rpc3RhbmNlKF9fYnVmLnNpemUoKSksCiAgICAgICAgICAgICAgICAgICAgIF9fY29t cCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXI+CmlubGluZSB2b2lkIGlu cGxhY2VfbWVyZ2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAg ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSB8fCBfX21p ZGRsZSA9PSBfX2xhc3QpCiAgICByZXR1cm47CiAgX19pbnBsYWNlX21lcmdlX2F1eChfX2ZpcnN0 LCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9f Zmlyc3QpLCBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Jp ZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgaW5wbGFjZV9tZXJn ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBf QmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0Jp ZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxl IHx8IF9fbWlkZGxlID09IF9fbGFzdCkKICAgIHJldHVybjsKICBfX2lucGxhY2VfbWVyZ2VfYXV4 KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVl X3R5cGUoX19maXJzdCksIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSwKICAgICAgICAgICAgICAg ICAgICAgIF9fY29tcCk7Cn0KCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFz cyBfSW5wdXRJdGVyMj4KYm9vbCBpbmNsdWRlcyhfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0 SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0 SXRlcjIgX19sYXN0MikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHdoaWxl IChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoKl9f Zmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBlbHNlIGlmKCpfX2Zp cnN0MSA8ICpfX2ZpcnN0MikKICAgICAgKytfX2ZpcnN0MTsKICAgIGVsc2UKICAgICAgKytfX2Zp cnN0MSwgKytfX2ZpcnN0MjsKCiAgcmV0dXJuIF9fZmlyc3QyID09IF9fbGFzdDI7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9Db21wYXJl Pgpib29sIGluY2x1ZGVzKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3Qx LAogICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3Qy LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAg d2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlm IChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBl bHNlIGlmKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICsrX19maXJzdDE7CiAg ICBlbHNlCiAgICAgICsrX19maXJzdDEsICsrX19maXJzdDI7CgogIHJldHVybiBfX2ZpcnN0MiA9 PSBfX2xhc3QyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0 ZXIyLCBjbGFzcyBfT3V0cHV0SXRlcj4KX091dHB1dEl0ZXIgc2V0X3VuaW9uKF9JbnB1dEl0ZXIx IF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgX0lu cHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAg ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwoKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19s YXN0MikgewogICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAqX19yZXN1bHQg PSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICB9CiAgICBlbHNlIGlmICgqX19maXJz dDIgPCAqX19maXJzdDEpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICArK19f Zmlyc3QyOwogICAgfQogICAgZWxzZSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAg ICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICAgICsrX19yZXN1bHQ7CiAg fQogIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3Qx LCBfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1 dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgpfT3V0 cHV0SXRlciBzZXRfdW5pb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFz dDEsCiAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRl cjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBf Q29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoK ICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiAg ICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAqX19yZXN1bHQgPSAq X19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICB9CiAgICBlbHNlIGlmIChfX2NvbXAoKl9f Zmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAg KytfX2ZpcnN0MjsKICAgIH0KICAgIGVsc2UgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7 CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgICArK19fcmVzdWx0 OwogIH0KICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19s YXN0MSwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBf SW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyIHNldF9pbnRlcnNlY3Rp b24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFz dDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCnsK CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHdoaWxlIChfX2ZpcnN0MSAh PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoKl9fZmlyc3QxIDwgKl9f Zmlyc3QyKQogICAgICArK19fZmlyc3QxOwogICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmly c3QxKQogICAgICArK19fZmlyc3QyOwogICAgZWxzZSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2Zp cnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgICAgKytfX3Jlc3Vs dDsKICAgIH0KICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy MSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyLAogICAgICAgICAgY2xhc3Mg X0NvbXBhcmU+Cl9PdXRwdXRJdGVyIHNldF9pbnRlcnNlY3Rpb24oX0lucHV0SXRlcjEgX19maXJz dDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lu cHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKewoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBf X2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwg Kl9fZmlyc3QyKSkKICAgICAgKytfX2ZpcnN0MTsKICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJz dDIsICpfX2ZpcnN0MSkpCiAgICAgICsrX19maXJzdDI7CiAgICBlbHNlIHsKICAgICAgKl9fcmVz dWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAg ICArK19fcmVzdWx0OwogICAgfQogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNz IF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRw dXRJdGVyIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBf X2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0Miwg X0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0 ZXIgX19yZXN1bHQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHdo aWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAo Kl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAg ICAgKytfX2ZpcnN0MTsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICAgIGVsc2UgaWYgKCpfX2Zp cnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgKytfX2ZpcnN0MjsKICAgIGVsc2UgewogICAgICArK19f Zmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAgfQogIHJldHVybiBjb3B5KF9fZmlyc3QxLCBf X2xhc3QxLCBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3Mg X0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+ Cl9PdXRwdXRJdGVyIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ dGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp cnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX091 dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwoKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmly c3QyICE9IF9fbGFzdDIpCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewog ICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19y ZXN1bHQ7CiAgICB9CiAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQog ICAgICArK19fZmlyc3QyOwogICAgZWxzZSB7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19m aXJzdDI7CiAgICB9CiAgcmV0dXJuIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3Mg X091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyCnNldF9zeW1tZXRyaWNfZGlmZmVyZW5jZShfSW5wdXRJ dGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg ICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAg ICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCnsKCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmly c3QyICE9IF9fbGFzdDIpCiAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAgICAgICpf X3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX3Jlc3VsdDsK ICAgIH0KICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAqX19yZXN1 bHQgPSAqX19maXJzdDI7CiAgICAgICsrX19maXJzdDI7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9 CiAgICBlbHNlIHsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICBy ZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19y ZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVy MiwgY2xhc3MgX091dHB1dEl0ZXIsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4KX091dHB1dEl0 ZXIKc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ dGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJz dDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0 SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkK ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIHdoaWxlIChfX2ZpcnN0 MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoX19jb21wKCpfX2Zp cnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsr X19maXJzdDE7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgICBlbHNlIGlmIChfX2NvbXAoKl9f Zmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAg KytfX2ZpcnN0MjsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICAgIGVsc2UgewogICAgICArK19f Zmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAgfQogIHJldHVybiBjb3B5KF9fZmlyc3QyLCBf X2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwp9CgoKCgp0ZW1wbGF0 ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPgpfRm9yd2FyZEl0ZXIgbWF4X2VsZW1lbnQoX0ZvcndhcmRJ dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK ICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogIF9Gb3J3YXJkSXRlciBf X3Jlc3VsdCA9IF9fZmlyc3Q7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICBpZiAo Kl9fcmVzdWx0IDwgKl9fZmlyc3QpCiAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsKICByZXR1cm4g X19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9Db21wYXJl PgpfRm9yd2FyZEl0ZXIgbWF4X2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsK CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CgoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19m aXJzdDsKICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0OwogIHdoaWxlICgrK19fZmly c3QgIT0gX19sYXN0KQogICAgaWYgKF9fY29tcCgqX19yZXN1bHQsICpfX2ZpcnN0KSkgX19yZXN1 bHQgPSBfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3 YXJkSXRlcj4KX0ZvcndhcmRJdGVyIG1pbl9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf Rm9yd2FyZEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3Qg PT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2Zp cnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgaWYgKCpfX2ZpcnN0IDwgKl9f cmVzdWx0KQogICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfQ29tcGFyZT4KX0ZvcndhcmRJdGVy IG1pbl9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwoKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgX0Zvcndh cmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkK ICAgIGlmIChfX2NvbXAoKl9fZmlyc3QsICpfX3Jlc3VsdCkpCiAgICAgIF9fcmVzdWx0ID0gX19m aXJzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rp b25hbEl0ZXI+CmJvb2wgbmV4dF9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJz dCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsK ICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICArK19faTsKICBpZiAoX19pID09 IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBfX2kgPSBfX2xhc3Q7CiAgLS1fX2k7CgogIGZv cig7OykgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAgICAtLV9faTsKICAg IGlmICgqX19pIDwgKl9faWkpIHsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFz dDsKICAgICAgd2hpbGUgKCEoKl9faSA8ICotLV9faikpCiAgICAgICAge30KICAgICAgaXRlcl9z d2FwKF9faSwgX19qKTsKICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICByZXR1cm4g dHJ1ZTsKICAgIH0KICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICByZXZlcnNlKF9fZmly c3QsIF9fbGFzdCk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxj bGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9Db21wYXJlPgpib29sIG5leHRfcGVybXV0 YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xh c3QsCiAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAg cmV0dXJuIGZhbHNlOwogIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICsrX19p OwogIGlmIChfX2kgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9faSA9IF9fbGFzdDsK ICAtLV9faTsKCiAgZm9yKDs7KSB7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsK ICAgIC0tX19pOwogICAgaWYgKF9fY29tcCgqX19pLCAqX19paSkpIHsKICAgICAgX0JpZGlyZWN0 aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgd2hpbGUgKCFfX2NvbXAoKl9faSwgKi0tX19q KSkKICAgICAgICB7fQogICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwogICAgICByZXZlcnNlKF9f aWksIF9fbGFzdCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKF9faSA9PSBfX2Zp cnN0KSB7CiAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgcmV0dXJuIGZhbHNl OwogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcj4KYm9vbCBw cmV2X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25h bEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAg aWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9CaWRpcmVjdGlvbmFs SXRlciBfX2kgPSBfX2ZpcnN0OwogICsrX19pOwogIGlmIChfX2kgPT0gX19sYXN0KQogICAgcmV0 dXJuIGZhbHNlOwogIF9faSA9IF9fbGFzdDsKICAtLV9faTsKCiAgZm9yKDs7KSB7CiAgICBfQmlk aXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsKICAgIC0tX19pOwogICAgaWYgKCpfX2lpIDwgKl9f aSkgewogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICB3aGlsZSAo ISgqLS1fX2ogPCAqX19pKSkKICAgICAgICB7fQogICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwog ICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAg aWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAg ICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlv bmFsSXRlciwgY2xhc3MgX0NvbXBhcmU+CmJvb2wgcHJldl9wZXJtdXRhdGlvbihfQmlkaXJlY3Rp b25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKCgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAg X0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgKytfX2k7CiAgaWYgKF9faSA9PSBf X2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAgX19pID0gX19sYXN0OwogIC0tX19pOwoKICBmb3Io OzspIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwogICAgLS1fX2k7CiAgICBp ZiAoX19jb21wKCpfX2lpLCAqX19pKSkgewogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0g X19sYXN0OwogICAgICB3aGlsZSAoIV9fY29tcCgqLS1fX2osICpfX2kpKQogICAgICAgIHt9CiAg ICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAg ICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAgICAgcmV2 ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQp9CgoK CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9JbnB1dEl0 ZXIgZmluZF9maXJzdF9vZihfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEs CiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJk SXRlciBfX2xhc3QyKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIGZvciAoIDsg X19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSkKICAgIGZvciAoX0ZvcndhcmRJdGVyIF9f aXRlciA9IF9fZmlyc3QyOyBfX2l0ZXIgIT0gX19sYXN0MjsgKytfX2l0ZXIpCiAgICAgIGlmICgq X19maXJzdDEgPT0gKl9faXRlcikKICAgICAgICByZXR1cm4gX19maXJzdDE7CiAgcmV0dXJuIF9f bGFzdDE7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXIs IGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9JbnB1dEl0ZXIgZmluZF9maXJzdF9vZihfSW5wdXRJ dGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAg ICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3QyLAogICAgICAgICAg ICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwoKCgogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytf X2ZpcnN0MSkKICAgIGZvciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9fZmlyc3QyOyBfX2l0ZXIg IT0gX19sYXN0MjsgKytfX2l0ZXIpCiAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19pdGVy KSkKICAgICAgICByZXR1cm4gX19maXJzdDE7CiAgcmV0dXJuIF9fbGFzdDE7Cn0KIyAzNDE5ICIv dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwp0ZW1wbGF0ZSA8Y2xh c3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMj4KX0ZvcndhcmRJdGVyMSBfX2Zp bmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAg ICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRl cjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFn LCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKewogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAg cmV0dXJuIF9fbGFzdDE7CiAgZWxzZSB7CiAgICBfRm9yd2FyZEl0ZXIxIF9fcmVzdWx0ID0gX19s YXN0MTsKICAgIHdoaWxlICgxKSB7CiAgICAgIF9Gb3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAg ICAgICAgPSBzZWFyY2goX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKICAg ICAgaWYgKF9fbmV3X3Jlc3VsdCA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBfX3Jlc3VsdDsK ICAgICAgZWxzZSB7CiAgICAgICAgX19yZXN1bHQgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgX19m aXJzdDEgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgfQogICAgfQog IH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjIs CiAgICAgICAgICBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgpfRm9yd2FyZEl0ZXIxIF9fZmluZF9l bmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAg ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBf X2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcsIGZv cndhcmRfaXRlcmF0b3JfdGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRp Y2F0ZSBfX2NvbXApCnsKICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgIHJldHVybiBfX2xh c3QxOwogIGVsc2UgewogICAgX0ZvcndhcmRJdGVyMSBfX3Jlc3VsdCA9IF9fbGFzdDE7CiAgICB3 aGlsZSAoMSkgewogICAgICBfRm9yd2FyZEl0ZXIxIF9fbmV3X3Jlc3VsdAogICAgICAgID0gc2Vh cmNoKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwgX19jb21wKTsKICAgICAg aWYgKF9fbmV3X3Jlc3VsdCA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAg ICAgZWxzZSB7CiAgICAgICAgX19yZXN1bHQgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgX19maXJz dDEgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgfQogICAgfQogIH0K fQoKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rp b25hbEl0ZXIyPgpfQmlkaXJlY3Rpb25hbEl0ZXIxCl9fZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJ dGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgIF9C aWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwK ICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywgYmlkaXJlY3Rpb25hbF9pdGVy YXRvcl90YWcpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwoKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyMT4g X1Jldkl0ZXIxOwogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIy PiBfUmV2SXRlcjI7CgogIF9SZXZJdGVyMSBfX3JsYXN0MShfX2ZpcnN0MSk7CiAgX1Jldkl0ZXIy IF9fcmxhc3QyKF9fZmlyc3QyKTsKICBfUmV2SXRlcjEgX19ycmVzdWx0ID0gc2VhcmNoKF9SZXZJ dGVyMShfX2xhc3QxKSwgX19ybGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf UmV2SXRlcjIoX19sYXN0MiksIF9fcmxhc3QyKTsKCiAgaWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0 MSkKICAgIHJldHVybiBfX2xhc3QxOwogIGVsc2UgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBf X3Jlc3VsdCA9IF9fcnJlc3VsdC5iYXNlKCk7CiAgICBhZHZhbmNlKF9fcmVzdWx0LCAtZGlzdGFu Y2UoX19maXJzdDIsIF9fbGFzdDIpKTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9Cn0KCnRlbXBs YXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIy LAogICAgICAgICAgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KX0JpZGlyZWN0aW9uYWxJdGVyMQpf X2ZpbmRfZW5kKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRl cjEgX19sYXN0MSwKICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlk aXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRv cl90YWcsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLAogICAgICAgICAgIF9CaW5hcnlQcmVk aWNhdGUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKCiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRl cjE+IF9SZXZJdGVyMTsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJ dGVyMj4gX1Jldkl0ZXIyOwoKICBfUmV2SXRlcjEgX19ybGFzdDEoX19maXJzdDEpOwogIF9SZXZJ dGVyMiBfX3JsYXN0MihfX2ZpcnN0Mik7CiAgX1Jldkl0ZXIxIF9fcnJlc3VsdCA9IHNlYXJjaChf UmV2SXRlcjEoX19sYXN0MSksIF9fcmxhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX1Jldkl0ZXIyKF9fbGFzdDIpLCBfX3JsYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fY29tcCk7CgogIGlmIChfX3JyZXN1bHQgPT0gX19ybGFzdDEpCiAgICByZXR1cm4g X19sYXN0MTsKICBlbHNlIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19yZXN1bHQgPSBfX3Jy ZXN1bHQuYmFzZSgpOwogICAgYWR2YW5jZShfX3Jlc3VsdCwgLWRpc3RhbmNlKF9fZmlyc3QyLCBf X2xhc3QyKSk7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBf Rm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgppbmxpbmUgX0ZvcndhcmRJdGVyMQpm aW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAg ICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikKewoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgcmV0dXJuIF9fZmluZF9lbmQo X19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAg IF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDEpLAogICAgICAgICAgICAgICAgICAgIF9faXRl cmF0b3JfY2F0ZWdvcnkoX19maXJzdDIpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl cjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjIsCiAgICAgICAgICBjbGFzcyBfQmluYXJ5UHJlZGljYXRl PgppbmxpbmUgX0ZvcndhcmRJdGVyMQpmaW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBf Rm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9G b3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCnsK CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIHJldHVybiBfX2ZpbmRfZW5k KF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwKICAgICAgICAgICAgICAgICAg ICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QxKSwKICAgICAgICAgICAgICAgICAgICBfX2l0 ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QyKSwKICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9 CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2U+ CmJvb2wgX19pc19oZWFwKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9EaXN0YW5jZSBfX24p CnsKICBfRGlzdGFuY2UgX19wYXJlbnQgPSAwOwogIGZvciAoX0Rpc3RhbmNlIF9fY2hpbGQgPSAx OyBfX2NoaWxkIDwgX19uOyArK19fY2hpbGQpIHsKICAgIGlmIChfX2ZpcnN0W19fcGFyZW50XSA8 IF9fZmlyc3RbX19jaGlsZF0pCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmICgoX19jaGlsZCAm IDEpID09IDApCiAgICAgICsrX19wYXJlbnQ7CiAgfQogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1N0cmlj dFdlYWtPcmRlcmluZz4KYm9vbCBfX2lzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwg X1N0cmljdFdlYWtPcmRlcmluZyBfX2NvbXAsCiAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX24p CnsKICBfRGlzdGFuY2UgX19wYXJlbnQgPSAwOwogIGZvciAoX0Rpc3RhbmNlIF9fY2hpbGQgPSAx OyBfX2NoaWxkIDwgX19uOyArK19fY2hpbGQpIHsKICAgIGlmIChfX2NvbXAoX19maXJzdFtfX3Bh cmVudF0sIF9fZmlyc3RbX19jaGlsZF0pKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAoKF9f Y2hpbGQgJiAxKSA9PSAwKQogICAgICArK19fcGFyZW50OwogIH0KICByZXR1cm4gdHJ1ZTsKfQoK dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgYm9vbCBpc19oZWFwKF9S YW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKewoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHJldHVybiBfX2lzX2hlYXAoX19maXJz dCwgX19sYXN0IC0gX19maXJzdCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0 ZXIsIGNsYXNzIF9TdHJpY3RXZWFrT3JkZXJpbmc+CmlubGluZSBib29sIGlzX2hlYXAoX1JhbmRv bUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgIF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQp7CgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwoKCgogIHJldHVybiBfX2lzX2hlYXAoX19maXJzdCwgX19jb21wLCBf X2xhc3QgLSBfX2ZpcnN0KTsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+CmJv b2wgaXNfc29ydGVkKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQp7 CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJu IHRydWU7CgogIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogIGZvciAoKytfX25leHQ7 IF9fbmV4dCAhPSBfX2xhc3Q7IF9fZmlyc3QgPSBfX25leHQsICsrX19uZXh0KSB7CiAgICBpZiAo Kl9fbmV4dCA8ICpfX2ZpcnN0KQogICAgICByZXR1cm4gZmFsc2U7CiAgfQoKICByZXR1cm4gdHJ1 ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1N0cmljdFdlYWtPcmRl cmluZz4KYm9vbCBpc19zb3J0ZWQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf X2xhc3QsCiAgICAgICAgICAgICAgIF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQp7CgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOwoKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiB0cnVl OwoKICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKICBmb3IgKCsrX19uZXh0OyBfX25l eHQgIT0gX19sYXN0OyBfX2ZpcnN0ID0gX19uZXh0LCArK19fbmV4dCkgewogICAgaWYgKF9fY29t cCgqX19uZXh0LCAqX19maXJzdCkpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CgogIHJldHVybiB0 cnVlOwp9Cgp9CiMgNjYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfYWxnb3Jp dGhtLmgiIDIgMwojIDMyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2FsZ29yaXRobSIgMiAz CiMgNDkgInN0bGluY2wuaCIgMgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIyA4NyAidmVjY2xlYW4u Y3BwIiAyCiMgMSAidmVjY2xlYW4uaCIgMQojIDU4ICJ2ZWNjbGVhbi5oIgojIDEgIi4uLy4uLy4u L3BjaXN5cy5oIiAxCiMgNTkgInZlY2NsZWFuLmgiIDIKIyAxICJzdGxpbmNsLmgiIDEKIyA2MCAi dmVjY2xlYW4uaCIgMgoKCgoKCmlubGluZSBpbnQgVkNMREJMQ29tcCggZG91YmxlIGRmMSwgZG91 YmxlIGRmMiwgaW50IG5TaWdGaWdzID0gMTMgKQp7CiAgICAgICAgZG91YmxlIGRmMzsKCiAgICAg ICAgZGYzID0gZmFicyggZGYxICk7CiAgICAgICAgaW50IG5EaWdpdHMgPSAwOwogICAgICAgIHdo aWxlIChkZjMgPj0gMS4wKQogICAgICAgIHsKICAgICAgICAgICAgbkRpZ2l0cysrOwogICAgICAg ICAgICBkZjMgPSBkZjMgLyAxMC4wOwogICAgICAgIH0KCiAgICAgICAgZG91YmxlIGRmTXVsdCA9 IHBvdygoIGludCApIDEwLCBuU2lnRmlncyAtIG5EaWdpdHMgKTsKICAgICAgICBkZjMgPSAoIGRm MSAtIGRmMiApICogZGZNdWx0OwoKICAgICAgICBpZiAoZmFicyggZGYzICkgPCAxLjApCiAgICAg ICAgewogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CgogICAgICAgIGVsc2UgaWYgKGRm MyA8IDAuMCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CgogICAg ICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIH0KfQoKaW5s aW5lIGludCBWQ0xGTFRDb21wKCBmbG9hdCBkZjEsIGZsb2F0IGRmMiwgaW50IG5TaWdGaWdzID0g NSApCnsKICAgICAgICBmbG9hdCBkZjM7CgogICAgICAgIGRmMyA9IGZhYnMoIGRmMSApOwogICAg ICAgIGludCBuRGlnaXRzID0gMDsKICAgICAgICB3aGlsZSAoZGYzID49IDEuMCkKICAgICAgICB7 CiAgICAgICAgICAgIG5EaWdpdHMrKzsKICAgICAgICAgICAgZGYzID0gZGYzIC8gMTAuMDsKICAg ICAgICB9CgogICAgICAgIGZsb2F0IGRmTXVsdCA9IHBvdygoIGludCApIDEwLCBuU2lnRmlncyAt IG5EaWdpdHMgKTsKICAgICAgICBkZjMgPSAoIGRmMSAtIGRmMiApICogZGZNdWx0OwoKICAgICAg ICBpZiAoZmFicyggZGYzICkgPCAxLjApCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gMDsK ICAgICAgICB9CgogICAgICAgIGVsc2UgaWYgKGRmMyA8IDAuMCkKICAgICAgICB7CiAgICAgICAg ICAgIHJldHVybiAtMTsKICAgICAgICB9CgogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAg ICAgIHJldHVybiAxOwogICAgICAgIH0KfQojIDE0MCAidmVjY2xlYW4uaCIKY2xhc3MgQ1ZDTFBv aW50CnsKIHB1YmxpYzoKICAgIENWQ0xQb2ludCgpOwogICAgQ1ZDTFBvaW50KCBkb3VibGUgeCwg ZG91YmxlIHksIGRvdWJsZSB6ID0gMC4wICk7CiAgICBDVkNMUG9pbnQoIGNvbnN0IEdEQlZlcnRl eCAmIG9WZXJ0ZXggKTsKICAgIENWQ0xQb2ludCggY29uc3QgQ1ZDTFBvaW50ICYgb1BvaW50ICk7 CgogICAgdmlydHVhbCB+Q1ZDTFBvaW50KCk7CgogICAgVEJvb2wgb3BlcmF0b3IgPT0gKCBjb25z dCBDVkNMUG9pbnQgJiBvUG9pbnQgKSBjb25zdDsKICAgIFRCb29sIG9wZXJhdG9yICE9ICggY29u c3QgQ1ZDTFBvaW50ICYgb1BvaW50ICkgY29uc3Q7CiAgICBUQm9vbCBvcGVyYXRvcjwgKCBjb25z dCBDVkNMUG9pbnQgJiBvUG9pbnQgKSBjb25zdDsKICAgIFRCb29sIG9wZXJhdG9yIDw9ICggY29u c3QgQ1ZDTFBvaW50ICYgb1BvaW50ICkgY29uc3Q7CiAgICBUQm9vbCBvcGVyYXRvcj4gKCBjb25z dCBDVkNMUG9pbnQgJiBvUG9pbnQgKSBjb25zdDsKICAgIFRCb29sIG9wZXJhdG9yID49ICggY29u c3QgQ1ZDTFBvaW50ICYgb1BvaW50ICkgY29uc3Q7CgogICAgZG91YmxlIHg7CiAgICBkb3VibGUg eTsKICAgIGRvdWJsZSB6OwoKICAgIHR5cGVkZWYgdmVjdG9yPENWQ0xQb2ludD4gVkNMUG9pbnRW ZWN0b3JfdHA7CiAgICB0eXBlZGVmIHZlY3RvcjxWQ0xQb2ludFZlY3Rvcl90cD4gVkNMUG9pbnRW ZWN0b3JMaXN0X3RwOwoKfTsKCgpjbGFzcyBWQ0xQb2ludExlc3MKewogcHVibGljOgogICAgVEJv b2wgb3BlcmF0b3IoKSAoIGNvbnN0IENWQ0xQb2ludCAmIG9Qb2ludDEsIGNvbnN0IENWQ0xQb2lu dCAmIG9Qb2ludDIgKSBjb25zdAogICAgewogICAgICAgIGludCByZXMgPSBWQ0xEQkxDb21wKCBv UG9pbnQxLnksIG9Qb2ludDIueSApOwogICAgICAgIGlmIChyZXMgPT0gMCkKICAgICAgICB7CiAg ICAgICAgICAgIHJlcyA9IFZDTERCTENvbXAoIG9Qb2ludDEueCwgb1BvaW50Mi54ICk7CiAgICAg ICAgfQogICAgICAgIHJldHVybiByZXMgPCAwOwogICAgfQp9OwoKY2xhc3MgVkNMUG9pbnRFcXVh bAp7CiBwdWJsaWM6CiAgICBUQm9vbCBvcGVyYXRvcigpICggY29uc3QgQ1ZDTFBvaW50ICYgb1Bv aW50MSwgY29uc3QgQ1ZDTFBvaW50ICYgb1BvaW50MiApIGNvbnN0CiAgICB7CiAgICAgICAgcmV0 dXJuICFWQ0xQb2ludExlc3MoKSAoIG9Qb2ludDEsIG9Qb2ludDIgKSAmJiAhVkNMUG9pbnRMZXNz KCkgKCBvUG9pbnQyLCBvUG9pbnQxICk7CiAgICB9Cn07CgoKY2xhc3MgQ1ZDTFJlY3QKewogcHVi bGljOgogICAgQ1ZDTFJlY3QoIGRvdWJsZSBkZlhNaW4sIGRvdWJsZSBkZllNaW4sIGRvdWJsZSBk ZlhNYXgsIGRvdWJsZSBkZllNYXggKTsKICAgIENWQ0xSZWN0KCBjb25zdCBHREJWZXJ0ZXggJiBz TWluLCBjb25zdCBHREJWZXJ0ZXggJiBzTWF4ICk7CiAgICBDVkNMUmVjdCgpOwoKICAgIENWQ0xS ZWN0IENvbXB1dGVJbnRlcnNlY3Rpb24oIGNvbnN0IENWQ0xSZWN0ICYgb1JlY3QgKTsKICAgIENW Q0xQb2ludCBDb21wdXRlQ2VudGVyKCk7CgogICAgVEJvb2wgSW50ZXJzZWN0cyggY29uc3QgQ1ZD TFJlY3QgJiBvUmVjdCApIGNvbnN0OwogICAgVEJvb2wgUG9pbnRJblJlY3QoIGNvbnN0IENWQ0xQ b2ludCAmIG9Qb2ludCApIGNvbnN0OwogICAgVEJvb2wgUG9pbnRJblJlY3QoIGRvdWJsZSBkZlgs IGRvdWJsZSBkZlkgKSBjb25zdDsKCiAgICBDVkNMUG9pbnQgR2V0TG93ZXJMZWZ0KCkgY29uc3Q7 CiAgICBDVkNMUG9pbnQgR2V0VXBwZXJSaWdodCgpIGNvbnN0OwoKICAgIGlubGluZSB2b2lkIFNl dFhNaW4oIGRvdWJsZSBkZlhNaW4gKQp7CiAgICAgICAgbV9kZlhNaW4gPSBkZlhNaW47CiAgICB9 CiAgICBpbmxpbmUgdm9pZCBTZXRYTWF4KCBkb3VibGUgZGZYTWF4ICkKewogICAgICAgIG1fZGZY TWF4ID0gZGZYTWF4OwogICAgfQogICAgaW5saW5lIHZvaWQgU2V0WU1pbiggZG91YmxlIGRmWU1p biApCnsKICAgICAgICBtX2RmWU1pbiA9IGRmWU1pbjsKICAgIH0KICAgIGlubGluZSB2b2lkIFNl dFlNYXgoIGRvdWJsZSBkZllNYXggKQp7CiAgICAgICAgbV9kZllNYXggPSBkZllNYXg7CiAgICB9 CgogICAgaW5saW5lIGRvdWJsZSBHZXRYTWluKCkgY29uc3QKewogICAgICAgIHJldHVybiBtX2Rm WE1pbjsKICAgIH0KICAgIGlubGluZSBkb3VibGUgR2V0WE1heCgpIGNvbnN0CnsKICAgICAgICBy ZXR1cm4gbV9kZlhNYXg7CiAgICB9CiAgICBpbmxpbmUgZG91YmxlIEdldFlNaW4oKSBjb25zdAp7 CiAgICAgICAgcmV0dXJuIG1fZGZZTWluOwogICAgfQogICAgaW5saW5lIGRvdWJsZSBHZXRZTWF4 KCkgY29uc3QKewogICAgICAgIHJldHVybiBtX2RmWU1heDsKICAgIH0KCiAgICBmcmllbmQgVEJv b2wgb3BlcmF0b3IgPT0gKCBjb25zdCBDVkNMUmVjdCAmIG9SZWN0MSwgY29uc3QgQ1ZDTFJlY3Qg JiBvUmVjdDIgKTsKCiBwcml2YXRlOgogICAgZG91YmxlIG1fZGZYTWluOwogICAgZG91YmxlIG1f ZGZYTWF4OwogICAgZG91YmxlIG1fZGZZTWluOwogICAgZG91YmxlIG1fZGZZTWF4Owp9OwoKCmNs YXNzIENWQ0xTaGFwZVByb3BzCnsKIHB1YmxpYzoKICAgIENWQ0xTaGFwZVByb3BzKCk7CiAgICB+ Q1ZDTFNoYXBlUHJvcHMoKTsKCiAgICBkb3VibGUgbV9kZk1lcmdlVG9sOwogICAgZG91YmxlIG1f ZGZEYW5nbGVUb2w7CiAgICBkb3VibGUgbV9kZkNsaXBUb2w7CiAgICBUQm9vbCBtX2JSZXZlcnNl ZDsKICAgIFRCb29sIG1fYlJlZmVyZW5jZTsKICAgIGludCAqcF9hdHRyaWI7CiAgICBHREJMYXll ciBtX2hHREJMYXllckluOwogICAgR0RCU2hhcGVJZCBtX2hHREJTaGFwZUlkOwogICAgR0RCTGF5 ZXIgbV9oR0RCTGF5ZXJPdXQ7CgoKfTsKCmNsYXNzIENWQ0xTaGFwZUZhY3Rvcnk7CgoKY2xhc3Mg Q1ZDTFNoYXBlCnsKIHB1YmxpYzoKCgogICAgdHlwZWRlZiBsb25nIFZDTFNoYXBlSWRfdHA7CgoK ICAgIHR5cGVkZWYgdmVjdG9yPFZDTFNoYXBlSWRfdHA+IFZDTFNoYXBlSWRWZWN0b3JfdHA7CgoK ICAgIHR5cGVkZWYgdmVjdG9yPENWQ0xTaGFwZSAqID4gVkNMU2hhcGVWZWN0b3I7CgogcHVibGlj OgogICAgQ1ZDTFNoYXBlKCk7CiAgICBDVkNMU2hhcGUgKGNvbnN0IENWQ0xTaGFwZSAmb1NoYXBl KTsKICAgIHZpcnR1YWwgfkNWQ0xTaGFwZSgpOwoKICAgIFRCb29sIElzTGVmdE9mKCBjb25zdCBD VkNMUG9pbnQgJiBvUG9pbnQgKTsKICAgIFRCb29sIElzTGVmdE9uKCBjb25zdCBDVkNMUG9pbnQg JiBvUG9pbnQgKTsKICAgIFRCb29sIElzT24oIGNvbnN0IENWQ0xQb2ludCAmIG9Qb2ludCApOwog ICAgVEJvb2wgSXNSaWdodE9mKCBjb25zdCBDVkNMUG9pbnQgJiBvUG9pbnQgKTsKICAgIFRCb29s IElzTW9ub3RvbmljKCk7CgogICAgZG91YmxlIENvbXB1dGVYKCBkb3VibGUgZGZZICk7CgogICAg VkNMU2hhcGVJZF90cCBHZXRJZCgpIGNvbnN0OwogICAgQ1ZDTFNoYXBlUHJvcHMgR2V0U2hhcGVQ cm9wcygpIGNvbnN0OwoKICAgIENWQ0xQb2ludCBHZXRGaXJzdCgpIGNvbnN0OwogICAgQ1ZDTFBv aW50IEdldFNlY29uZCgpIGNvbnN0OwogICAgQ1ZDTFBvaW50IEdldFNlY29uZFRvTGFzdCgpIGNv bnN0OwogICAgQ1ZDTFBvaW50IEdldExhc3QoKSBjb25zdDsKCiAgICBkb3VibGUgR2V0RGlzdGFu Y2VGcm9tKCBDVkNMUG9pbnQgJiBvQ2xvc2VzdCwgY29uc3QgQ1ZDTFBvaW50ICYgb0Zyb21XaGVy ZSApIGNvbnN0OwogICAgZG91YmxlIEdldFNoYXBlTGVuZ3RoKCkgY29uc3Q7CiAgICBkb3VibGUg R2V0VXBBbmdsZSgpIHsgcmV0dXJuIG1fZGZVcEFuZ2xlOwogICAgfQogICAgQ1ZDTFJlY3QgR2V0 UmFuZ2VSZWN0KCkgY29uc3Q7CgogICAgVEJvb2wgSW50ZXJzZWN0cyggQ1ZDTFBvaW50ICYgb1do ZXJlLCBjb25zdCBDVkNMU2hhcGUgJm9TaGFwZSApOwoKICAgIHZvaWQgSW5zZXJ0UG9pbnQoIGNv bnN0IENWQ0xQb2ludCAmIG9Qb2ludCApOwogICAgdm9pZCBSZXBsYWNlUG9pbnRzKCBjb25zdCBD VkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yX3RwICZvVG8sIGNvbnN0IENWQ0xQb2ludDo6VkNMUG9p bnRWZWN0b3JfdHAgJm9Gcm9tICk7CiAgICB2b2lkIE1vdmVFbmRQb2ludCggY29uc3QgQ1ZDTFBv aW50ICYgb0Rlc3QsIGNvbnN0IENWQ0xQb2ludCAmIG9Tb3VyY2UgKTsKCiAgICBWQ0xTaGFwZUlk VmVjdG9yX3RwIEJyZWFrQXRQb2ludCggY29uc3QgQ1ZDTFBvaW50ICYgb1BvaW50ICk7CiAgICBW Q0xTaGFwZUlkVmVjdG9yX3RwIEJyZWFrQXRQb2ludHMoIGNvbnN0IENWQ0xQb2ludDo6VkNMUG9p bnRWZWN0b3JfdHAgJm9Qb2ludHMgKTsKICAgIFZDTFNoYXBlSWRWZWN0b3JfdHAgRXh0ZW5kVG8o IGNvbnN0IENWQ0xQb2ludCBvTmV3UG9pbnQsIGNvbnN0IENWQ0xQb2ludCAmIG9FbmRQb2ludCAp OwoKICAgIHZvaWQgV3JpdGUoIGNvbnN0IEdEQkxheWVyICYgb0Rlc3RpbmF0aW9uICkgY29uc3Q7 CiAgICB2b2lkIFdyaXRlKCkgY29uc3Q7CgogICAgVEJvb2wgb3BlcmF0b3IgPT0gKCBjb25zdCBD VkNMU2hhcGUgJm9TaGFwZSApOwoKCgoKCgogcHJpdmF0ZToKICAgIENWQ0xTaGFwZSAoY29uc3Qg Q1ZDTFBvaW50OjpWQ0xQb2ludFZlY3Rvcl90cCAmb1BvaW50cywgQ1ZDTFNoYXBlUHJvcHMgb1By b3BlcnRpZXMsIGludCBuSWQpOwoKICAgIGZyaWVuZCBjbGFzcyBDVkNMU2hhcGVGYWN0b3J5OwoK ICAgIFZDTFNoYXBlSWRfdHAgbV9zaGFwZUlkOwogICAgQ1ZDTFBvaW50OjpWQ0xQb2ludFZlY3Rv cl90cCBtX29Qb2ludHM7CiAgICBkb3VibGUgbV9kZlVwQW5nbGU7CiAgICBDVkNMU2hhcGVQcm9w cyBtX29Qcm9wZXJ0aWVzOwp9OwoKCmNsYXNzIENWQ0xTaGFwZUZhY3RvcnkKewogcHVibGljOgog ICAgQ1ZDTFNoYXBlRmFjdG9yeSgpOwogICAgdmlydHVhbCB+Q1ZDTFNoYXBlRmFjdG9yeSgpOwoK ICAgIHN0YXRpYyBDVkNMU2hhcGU6OlZDTFNoYXBlSWRWZWN0b3JfdHAgTWFrZVNoYXBlKCBjb25z dCBDVkNMU2hhcGU6OlZDTFNoYXBlSWRWZWN0b3JfdHAgJm9JbnB1dFNoYXBlcywgY29uc3QgQ1ZD TFNoYXBlUHJvcHMgJiBvUHJvcGVydGllcywgQ1ZDTFBvaW50OjpWQ0xQb2ludFZlY3Rvcl90cCAm YnJlYWtQb2ludHMgKTsKICAgIHN0YXRpYyBDVkNMU2hhcGU6OlZDTFNoYXBlSWRfdHAgTWFrZU1v bm90b25pY1NoYXBlKCBjb25zdCBDVkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yX3RwICZvUG9pbnRz LCBjb25zdCBDVkNMU2hhcGVQcm9wcyAmIG9Qcm9wZXJ0aWVzICk7CiAgICBzdGF0aWMgQ1ZDTFNo YXBlOjpWQ0xTaGFwZUlkVmVjdG9yX3RwIE1ha2VNb25vdG9uaWNTaGFwZXMoIEdEQlNoYXBlSWQg aEdEQlNoYXBlSWQsIEdEQkxheWVyIGhHREJMYXllciwgY29uc3QgQ1ZDTFNoYXBlUHJvcHMgJiBv UHJvcGVydGllcyApOwogICAgc3RhdGljIHZvaWQgR2V0QVNoYXBlKCBDVkNMU2hhcGUgKiZzaGFw ZSwgQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkX3RwIG5TaGFwZSApOwogICAgc3RhdGljIHZvaWQgUk1B KCBDVkNMU2hhcGU6OlZDTFNoYXBlSWRfdHAgblNoYXBlICk7CgogICAgc3RhdGljIHZvaWQgUG93 ZXJEb3duKCk7CiBwcml2YXRlOgogICAgc3RhdGljIENWQ0xTaGFwZTo6VkNMU2hhcGVJZF90cCBH ZXRBU2hpZCgpOwogICAgc3RhdGljIENWQ0xTaGFwZTo6VkNMU2hhcGVJZF90cCBtX25TaGFwZXM7 CiAgICBzdGF0aWMgdmVjdG9yPENWQ0xTaGFwZSAqID4gKm1fc2hhcGVUYWJsZTsKICAgIHN0YXRp YyBzZXQ8Q1ZDTFNoYXBlOjpWQ0xTaGFwZUlkX3RwLCBsZXNzPENWQ0xTaGFwZTo6VkNMU2hhcGVJ ZF90cD4gPiAqbV9hdmFpbFNoYXBlSWRzOwoKfTsKCgpjbGFzcyBDVkNMTm9kZVRhYmxlOwoKY2xh c3MgQ1ZDTE5vZGUKewoKIHB1YmxpYzoKICAgIHR5cGVkZWYgaW50IFZDTE5vZGVJZF90cDsKICAg IHR5cGVkZWYgc2V0PFZDTE5vZGVJZF90cCwgbGVzczxWQ0xOb2RlSWRfdHA+ID4gVkNMTm9kZVNl dF90cDsKCiBwdWJsaWM6CiAgICBDVkNMTm9kZSggY29uc3QgQ1ZDTE5vZGUgJiBvTm9kZSApOwog ICAgQ1ZDTE5vZGUoKTsKICAgIHZpcnR1YWwgfkNWQ0xOb2RlKCk7CgogICAgVkNMTm9kZUlkX3Rw IEdldElkKCkgY29uc3Q7CiAgICBDVkNMUG9pbnQgR2V0UG9pbnQoKSBjb25zdDsKCiAgICBDVkNM U2hhcGU6OlZDTFNoYXBlSWRWZWN0b3JfdHAgR2V0U2hpZHMoKSBjb25zdDsKICAgIENWQ0xTaGFw ZTo6VkNMU2hhcGVJZFZlY3Rvcl90cCBHZXRVcFNoaWRzKCkgY29uc3Q7CiAgICBDVkNMU2hhcGU6 OlZDTFNoYXBlSWRWZWN0b3JfdHAgR2V0RG93blNoaWRzKCkgY29uc3Q7CgogICAgVEJvb2wgSXNE YW5nbGUoKSBjb25zdDsKCiAgICBUQm9vbCBBZGQoIENWQ0xTaGFwZTo6VkNMU2hhcGVJZF90cCBu U2hhcGVJZCApOwogICAgdm9pZCBSZW1vdmUoIENWQ0xTaGFwZTo6VkNMU2hhcGVJZF90cCBuSWQg KTsKICAgIGludCBTaGFwZUNvdW50KCkgY29uc3Q7CgogICAgdm9pZCBNb3ZlTm9kZSggY29uc3Qg Q1ZDTFBvaW50ICYgb0Rlc3QgKTsKCiAgICBDVkNMTm9kZSAmb3BlcmF0b3IgPSAoIGNvbnN0IENW Q0xOb2RlICYgb05vZGUgKTsKICAgIFRCb29sIG9wZXJhdG9yID09ICggY29uc3QgQ1ZDTE5vZGUg JiBvTm9kZSApOwoKICAgIHN0YXRpYyB2b2lkIFBvd2VyRG93bigpOwoKCgoKCgogcHJpdmF0ZToK ICAgIENWQ0xOb2RlKCBjb25zdCBDVkNMUG9pbnQgJiBvUG9pbnQgKTsKCiAgICBmcmllbmQgY2xh c3MgQ1ZDTE5vZGVUYWJsZTsKCgogICAgQ1ZDTFBvaW50IG1fb1BvaW50OwoKCiAgICBpbnQgbV9u b2RlSWQ7CgoKICAgIENWQ0xTaGFwZTo6VkNMU2hhcGVJZFZlY3Rvcl90cCBtX29TaGFwZXM7Cn07 CgoKY2xhc3MgQ1ZDTE5vZGVUYWJsZQp7CiBwdWJsaWM6CiAgICBDVkNMTm9kZVRhYmxlKCk7CiAg ICB+Q1ZDTE5vZGVUYWJsZSgpOwoKICAgIFRCb29sIEFkZCggQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlk X3RwICk7CiAgICB2b2lkIFJlbW92ZSggQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkX3RwICk7CgogICAg Q1ZDTE5vZGUgKkZpcnN0KCkgY29uc3Q7CiAgICBDVkNMTm9kZSAqTmV4dCggY29uc3QgQ1ZDTE5v ZGUgJiBvQ3VycmVudCApIGNvbnN0OwogICAgQ1ZDTE5vZGUgKlByZXYoIGNvbnN0IENWQ0xOb2Rl ICYgb0N1cnJlbnQgKSBjb25zdDsKICAgIENWQ0xOb2RlICpGaW5kKCBjb25zdCBDVkNMUG9pbnQg JiBvUG9pbnQgKSBjb25zdDsKCiAgICBpbnQgR2V0TnVtTm9kZXMoKSB7IHJldHVybiBtX25Db3Vu dDsKICAgIH0KCiAgICB2b2lkIE1lcmdlTm9kZXMoIGNvbnN0IENWQ0xQb2ludCAmIG9EZXN0LCBD VkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yX3RwIG9TcmMgKTsKICAgIHZvaWQgU3RyZWFtSW4oIEdE QkxheWVyIGhMYXllciwgY29uc3QgQ1ZDTFNoYXBlUHJvcHMgJiBvUHJvcHMsIElNUFByb2dyZXNz RnVuYyBwZm5Qcm9ncmVzcywgdm9pZCAqcFByb2dyZXNzQXJnICk7CiAgICB2b2lkIFN0cmVhbU91 dCgpOwoKICAgIHR5cGVkZWYgcGFpcjxDVkNMUG9pbnQsIENWQ0xOb2RlICogPiBOb2RlVGFibGVF bnRyeV90cDsKCgoKCgoKCiBwcml2YXRlOgogICAgdHlwZWRlZiBtYXA8Q1ZDTFBvaW50LCBDVkNM Tm9kZSAqLCBWQ0xQb2ludExlc3M+IE5vZGVUYWJsZV90cDsKICAgIE5vZGVUYWJsZV90cCBtX25v ZGVUYWJsZTsKICAgIHVuc2lnbmVkIGludCBtX25Db3VudDsKfTsKClRCb29sIFZDTE5vZGVUYWJs ZVBvaW50TGVzcyggY29uc3QgQ1ZDTE5vZGVUYWJsZTo6Tm9kZVRhYmxlRW50cnlfdHAgJm9GaXJz dE5vZGUsIGNvbnN0IENWQ0xOb2RlVGFibGU6Ok5vZGVUYWJsZUVudHJ5X3RwICZvU2Vjb25kTm9k ZSApOwoKY2xhc3MgQ1ZDTFN3ZWVwCnsKIHB1YmxpYzoKICAgIENWQ0xTd2VlcCgpOwogICAgdmly dHVhbCB+Q1ZDTFN3ZWVwKCk7CgogICAgdm9pZCBBZGQoIENWQ0xTaGFwZTo6VkNMU2hhcGVJZFZl Y3Rvcl90cCBvU2hhcGVJZHMgKTsKICAgIHZvaWQgUmVtb3ZlKCBDVkNMU2hhcGU6OlZDTFNoYXBl SWRfdHAgblNoYXBlSWQgKTsKCiAgICB2b2lkIEZpbmROZWlnaGJvdXJzKCBDVkNMU2hhcGU6OlZD TFNoYXBlSWRfdHAgJm9MZWZ0LCBDVkNMU2hhcGU6OlZDTFNoYXBlSWRfdHAgJm9SaWdodCwgY29u c3QgQ1ZDTFBvaW50ICYgb1BvaW50ICk7CiAgICB2b2lkIEZpbmRBbGwoIENWQ0xTaGFwZTo6VkNM U2hhcGVJZFZlY3Rvcl90cCAmb1NoYXBlcyApIGNvbnN0OwoKCgoKCgogcHJpdmF0ZToKICAgIENW Q0xTaGFwZTo6VkNMU2hhcGVJZFZlY3Rvcl90cCBtX3N3ZWVwOwp9OwoKCnR5cGVkZWYgZW51bSBf T3JpZW50YXRpb25fdHAgeyBlSW5jLCBlRGVjLCBlSG9yaXpJbmMsIGVIb3JpekRlYyB9IE9yaWVu dGF0aW9uX3RwOwoKCgpPcmllbnRhdGlvbl90cCBWQ0xHZXRPcmllbnRhdGlvbiggY29uc3QgQ1ZD TFBvaW50ICZ2MSwgY29uc3QgQ1ZDTFBvaW50ICZ2MiApOwpkb3VibGUgVkNMQXJlYTIoIGNvbnN0 IENWQ0xQb2ludCAmc0EsIGNvbnN0IENWQ0xQb2ludCAmc0IsIGNvbnN0IENWQ0xQb2ludCAmc0Mg KTsKVEJvb2wgVkNMSXNMZWZ0KCBjb25zdCBDVkNMUG9pbnQgJnNBLCBjb25zdCBDVkNMUG9pbnQg JnNCLCBjb25zdCBDVkNMUG9pbnQgJnNDICk7ClRCb29sIFZDTElzTGVmdE9uKCBjb25zdCBDVkNM UG9pbnQgJnNBLCBjb25zdCBDVkNMUG9pbnQgJnNCLCBjb25zdCBDVkNMUG9pbnQgJnNDLCBkb3Vi bGUgZGZUb2wgPSAwLjAgKTsKVEJvb2wgVkNMSW50ZXJzZWN0UHJvcCggY29uc3QgQ1ZDTFBvaW50 ICZzQSwgY29uc3QgQ1ZDTFBvaW50ICZzQiwgY29uc3QgQ1ZDTFBvaW50ICZzQywgY29uc3QgQ1ZD TFBvaW50ICZzRCwgZG91YmxlIGRmVG9sICk7ClRCb29sIFZDTElzQ29sbGluZWFyKCBjb25zdCBD VkNMUG9pbnQgJnNBLCBjb25zdCBDVkNMUG9pbnQgJnNCLCBjb25zdCBDVkNMUG9pbnQgJnNDLCBk b3VibGUgZGZUb2wgKTsKVEJvb2wgVkNMSW50ZXJzZWN0aW9uKCBjb25zdCBDVkNMUG9pbnQgJnNB LCBjb25zdCBDVkNMUG9pbnQgJnNCLCBjb25zdCBDVkNMUG9pbnQgJnNDLCBjb25zdCBDVkNMUG9p bnQgJnNELCBDVkNMUG9pbnQgJnNQLCBkb3VibGUgZGZUb2wgKTsKVEJvb2wgVkNMRXVjbGlkaWFu RGlzdGFuY2UoIGNvbnN0IENWQ0xQb2ludCAmb0EsIGNvbnN0IENWQ0xQb2ludCAmb0IsIGNvbnN0 IENWQ0xQb2ludCAmb1AsIGRvdWJsZSAmZGZEaXN0LCBDVkNMUG9pbnQgJm9JICk7CkNWQ0xSZWN0 IFZDTENvbXB1dGVSYW5nZVJlY3QoIGNvbnN0IENWQ0xQb2ludDo6VkNMUG9pbnRWZWN0b3JfdHAg Jm9TaGFwZSApOwpkb3VibGUgVkNMQ29tcHV0ZUFuZ2xlKCBjb25zdCBDVkNMUG9pbnQgJnNBLCBj b25zdCBDVkNMUG9pbnQgJnNCLCBjb25zdCBDVkNMUG9pbnQgJnNDICk7CmRvdWJsZSBWQ0xDb21w dXRlTGVuZ3RoKCBjb25zdCBDVkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yX3RwICZvU2hhcGUgKTsK ZG91YmxlIFZDTERpc3RhbmNlRnJvbSggQ1ZDTFBvaW50ICZvQ2xvc2VzdCwgY29uc3QgQ1ZDTFBv aW50OjpWQ0xQb2ludFZlY3Rvcl90cCAmb1NoYXBlLCBjb25zdCBDVkNMUG9pbnQgJmZyb21XaGVy ZSApOwpUQm9vbCBWQ0xJbnRlcnNlY3RTaGFwZSggQ1ZDTFBvaW50ICZvV2hlcmUsIGNvbnN0IENW Q0xQb2ludDo6VkNMUG9pbnRWZWN0b3JfdHAgJm9TaGFwZTEsIGNvbnN0IENWQ0xQb2ludDo6VkNM UG9pbnRWZWN0b3JfdHAgJm9TaGFwZTIgKTsKQ1ZDTFBvaW50IFZDTEludGVycG9sYXRlUG9pbnQo IENWQ0xQb2ludCB2MSwgQ1ZDTFBvaW50IHYyLCBkb3VibGUgZGZSYW5nZSwgZG91YmxlIGRmRGlz dCApOwpUQm9vbCBWQ0xJc0xlZnRPZlNoYXBlKCBjb25zdCBDVkNMUG9pbnQgJnYsIGNvbnN0IENW Q0xQb2ludDo6VkNMUG9pbnRWZWN0b3JfdHAgJm9TaGFwZSApOwpUQm9vbCBWQ0xJc0xlZnRPblNo YXBlKCBjb25zdCBDVkNMUG9pbnQgJnYsIGNvbnN0IENWQ0xQb2ludDo6VkNMUG9pbnRWZWN0b3Jf dHAgJm9TaGFwZSApOwpUQm9vbCBWQ0xJc1JpZ2h0T2ZTaGFwZSggY29uc3QgQ1ZDTFBvaW50ICZ2 LCBjb25zdCBDVkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yX3RwICZvU2hhcGUgKTsKVEJvb2wgVkNM SXNNb25vdG9uaWMoIGNvbnN0IENWQ0xQb2ludDo6VkNMUG9pbnRWZWN0b3JfdHAgJm9TaGFwZSAp OwpUQm9vbCBWQ0xJc0hvcml6b250YWwoIGNvbnN0IENWQ0xQb2ludDo6VkNMUG9pbnRWZWN0b3Jf dHAgJm9TaGFwZSApOwp2b2lkIFZDTEJyZWFrTW9ub3RvbmljKCBDVkNMUG9pbnQ6OlZDTFBvaW50 VmVjdG9yTGlzdF90cCAmb1NoYXBlcywgY29uc3QgQ1ZDTFBvaW50OjpWQ0xQb2ludFZlY3Rvcl90 cCAmb1NoYXBlSW4gKTsKdm9pZCBWQ0xCcmVha01vbm90b25pYyggQ1ZDTFBvaW50OjpWQ0xQb2lu dFZlY3Rvckxpc3RfdHAgJm9TaGFwZXMsIEdEQlZlcnRleCAqcGFzVmVydGV4LCBpbnQgblZlcnRl eCApOwpDVkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yTGlzdF90cCBWQ0xDb25jYXRDaGFpbnMoIENW Q0xQb2ludDo6VkNMUG9pbnRWZWN0b3JMaXN0X3RwICZvU2hhcGVzLCBDVkNMUG9pbnQ6OlZDTFBv aW50VmVjdG9yX3RwICZpbnRlcnNlY3Rpb25zICk7ClRCb29sIFZDTEluc2VydENoYWluSW50b0No YWluTGlzdCggQ1ZDTFBvaW50OjpWQ0xQb2ludFZlY3Rvcl90cCAmc3RsQ2hhaW5Ub0luc2VydCwg Q1ZDTFBvaW50OjpWQ0xQb2ludFZlY3Rvckxpc3RfdHAgJnN0bFRhcmdldENoYWlucyApOwpUQm9v bCBWQ0xJbnNlcnRDaGFpbkludG9DaGFpbkxpc3QoIENWQ0xQb2ludDo6VkNMUG9pbnRWZWN0b3Jf dHAgJnN0bENoYWluVG9JbnNlcnQsIENWQ0xQb2ludDo6VkNMUG9pbnRWZWN0b3JMaXN0X3RwOjpp dGVyYXRvciBpU3RhcnRWZWN0b3IsIENWQ0xQb2ludDo6VkNMUG9pbnRWZWN0b3JMaXN0X3RwOjpp dGVyYXRvciBpRW5kVmVjdG9yICk7ClRCb29sIFZDTENvbXBhY3RDaGFpbnMoIENWQ0xQb2ludDo6 VkNMUG9pbnRWZWN0b3JMaXN0X3RwICZzdGxWZWN0b3JPZkNoYWlucyApOwp2b2lkIFZDTFByaW50 ZiggY2hhciAqZm10LCAuLi4gKTsKdm9pZCBWQ0xVbmlxdWVWZXJ0ZXgoIENWQ0xQb2ludDo6VkNM UG9pbnRWZWN0b3JfdHAgJm9TaGFwZSApOwp2b2lkIFZDTFVuaXF1ZVZlcnRleCggR0RCVmVydGV4 ICosIGludCAmblZlcnRleCApOwp2b2lkIFZDTEJyZWFrQXRQb2ludHMoIENWQ0xQb2ludDo6VkNM UG9pbnRWZWN0b3JMaXN0X3RwICZvU2hhcGVzLCBjb25zdCBDVkNMUG9pbnQ6OlZDTFBvaW50VmVj dG9yX3RwICZvU2hhcGUsIENWQ0xQb2ludDo6VkNMUG9pbnRWZWN0b3JfdHAgb0JyZWFrUG9pbnRz ICk7CnZvaWQgVkNMQ2xpcCggQ1ZDTE5vZGVUYWJsZSAmb05vZGVUYWJsZSwgSU1QUHJvZ3Jlc3NG dW5jIHBmblByb2dyZXNzLCB2b2lkICpwUHJvZ3Jlc3NBcmcgKTsKdm9pZCBWQ0xEYW5nbGUoIENW Q0xOb2RlVGFibGUgJm9Ob2RlVGFibGUsIElNUFByb2dyZXNzRnVuYyBwZm5Qcm9ncmVzcywgdm9p ZCAqcFByb2dyZXNzQXJnICk7CnZvaWQgVkNMSW50ZXJzZWN0KCBDVkNMTm9kZVRhYmxlICZvTm9k ZVRhYmxlLCBJTVBQcm9ncmVzc0Z1bmMgcGZuUHJvZ3Jlc3MsIHZvaWQgKnBQcm9ncmVzc0FyZyAp OwpUQm9vbCBWQ0xDb21wYXJlTGF5ZXJBbmRJRCggQ1ZDTE5vZGUgKmZpcnN0LCBDVkNMTm9kZSAq c2Vjb25kICk7ClRCb29sIFZDTENvbXBhcmVTaGFwZUlEKCBHREJMYXllciBobGF5ZXIsIEdEQlNo YXBlSWQgZmlyc3QsIEdEQlNoYXBlSWQgc2Vjb25kLCBpbnQgRmllbGRJbmRleCApOwpUQm9vbCBW Q0xDb21wYXJlU2hhcGVBbHdheXMoIEdEQkxheWVyIGhsYXllciwgR0RCU2hhcGVJZCBmaXJzdCwg R0RCU2hhcGVJZCBzZWNvbmQsIGludCBGaWVsZEluZGV4ICk7ClRCb29sIFZDTENvbXBhcmVTaGFw ZU5ldmVyKCBHREJMYXllciBobGF5ZXIsIEdEQlNoYXBlSWQgZmlyc3QsIEdEQlNoYXBlSWQgc2Vj b25kLCBpbnQgRmllbGRJbmRleCApOwp2b2lkIFZDTEltcG9ydCggQ1ZDTE5vZGVUYWJsZSAmb05v ZGVUYWJsZSwgR0RCTGF5ZXIgJnBMYXllciwgQ1ZDTFNoYXBlUHJvcHMgJm9TaGFwZVByb3BzLCBJ TVBQcm9ncmVzc0Z1bmMgcGZuUHJvZ3Jlc3MsIHZvaWQgKnBQcm9ncmVzc0FyZyApOwp2b2lkIFZD TE91dHB1dCggQ1ZDTE5vZGVUYWJsZSAmb05vZGVUYWJsZSwgSU1QUHJvZ3Jlc3NGdW5jIHBmblBy b2dyZXNzLCB2b2lkICpwUHJvZ3Jlc3NBcmcsIFRCb29sKCAqY29tcGFyZSApICggQ1ZDTE5vZGUg KiwgQ1ZDTE5vZGUgKiApLCBUQm9vbCggKnNoYXBlY29tcGFyZSApICggR0RCTGF5ZXIsIEdEQlNo YXBlSWQsIEdEQlNoYXBlSWQsIGludCApKTsKY2hhciBWQ0xTZWdTZWdJbnQoIGNvbnN0IEdEQlZl cnRleCAmYSwgY29uc3QgR0RCVmVydGV4ICZiLCBjb25zdCBHREJWZXJ0ZXggJmMsIGNvbnN0IEdE QlZlcnRleCAmZCwgR0RCVmVydGV4ICZwICk7ClRCb29sIFZDTEJldHdlZW4oIGNvbnN0IEdEQlZl cnRleCAmYSwgY29uc3QgR0RCVmVydGV4ICZiLCBjb25zdCBHREJWZXJ0ZXggJmMgKTsKaW50IFZD TENvbGxpbmVhciggY29uc3QgR0RCVmVydGV4ICZhLCBjb25zdCBHREJWZXJ0ZXggJmIsIGNvbnN0 IEdEQlZlcnRleCAmYyApOwojIDg4ICJ2ZWNjbGVhbi5jcHAiIDIKIyAxNDMgInZlY2NsZWFuLmNw cCIKQ1ZDTFBvaW50OjpDVkNMUG9pbnQoKQp7CiAgICAgICAgdGhpcy0+eCA9IDAuMDsKICAgICAg ICB0aGlzLT55ID0gMC4wOwogICAgICAgIHRoaXMtPnogPSAwLjA7Cn0KIyAxNjYgInZlY2NsZWFu LmNwcCIKQ1ZDTFBvaW50Ojp+Q1ZDTFBvaW50KCkKewp9CiMgMTkxICJ2ZWNjbGVhbi5jcHAiCkNW Q0xQb2ludDo6Q1ZDTFBvaW50KCBkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB6ICkKewogICAg ICAgIHRoaXMtPnggPSB4OwogICAgICAgIHRoaXMtPnkgPSB5OwogICAgICAgIHRoaXMtPnogPSB6 Owp9CiMgMjE2ICJ2ZWNjbGVhbi5jcHAiCkNWQ0xQb2ludDo6Q1ZDTFBvaW50KCBjb25zdCBHREJW ZXJ0ZXggJm9WZXJ0ZXggKQp7CiAgICAgICAgdGhpcy0+eCA9IG9WZXJ0ZXgueDsKICAgICAgICB0 aGlzLT55ID0gb1ZlcnRleC55OwogICAgICAgIHRoaXMtPnogPSBvVmVydGV4Lno7Cn0KIyAyNDEg InZlY2NsZWFuLmNwcCIKQ1ZDTFBvaW50OjpDVkNMUG9pbnQoIGNvbnN0IENWQ0xQb2ludCAmb1Bv aW50ICkKewogICAgICAgIHRoaXMtPnggPSBvUG9pbnQueDsKICAgICAgICB0aGlzLT55ID0gb1Bv aW50Lnk7CiAgICAgICAgdGhpcy0+eiA9IG9Qb2ludC56Owp9CiMgMjY2ICJ2ZWNjbGVhbi5jcHAi ClRCb29sIENWQ0xQb2ludDo6b3BlcmF0b3IgPT0gKCBjb25zdCBDVkNMUG9pbnQgJm9Qb2ludCAp IGNvbnN0CnsKICAgICAgICByZXR1cm4gKFZDTERCTENvbXAoIHRoaXMtPngsIG9Qb2ludC54ICkg PT0gMCkgJiYKICAgICAgICAgICAgKCBWQ0xEQkxDb21wKCB0aGlzLT55LCBvUG9pbnQueSApID09 IDAgKTsKfQojIDI5MCAidmVjY2xlYW4uY3BwIgpUQm9vbCBDVkNMUG9pbnQ6Om9wZXJhdG9yICE9 ICggY29uc3QgQ1ZDTFBvaW50ICZvUG9pbnQgKSBjb25zdAp7CiAgICAgICAgcmV0dXJuICEoICp0 aGlzID09IG9Qb2ludCApOwp9CiMgMzEyICJ2ZWNjbGVhbi5jcHAiClRCb29sIENWQ0xQb2ludDo6 b3BlcmF0b3I8ICggY29uc3QgQ1ZDTFBvaW50ICZvUG9pbnQgKSBjb25zdAp7CiAgICAgICAgaW50 IHJlcyA9IFZDTERCTENvbXAoIHRoaXMtPnksIG9Qb2ludC55ICk7CgogICAgICAgIGlmIChyZXMg PT0gMCkKICAgICAgICB7CiAgICAgICAgICAgIHJlcyA9IFZDTERCTENvbXAoIHRoaXMtPngsIG9Q b2ludC54ICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gcmVzIDwgMDsKfQojIDM0MSAidmVj Y2xlYW4uY3BwIgpUQm9vbCBDVkNMUG9pbnQ6Om9wZXJhdG9yPiAoIGNvbnN0IENWQ0xQb2ludCAm b1BvaW50ICkgY29uc3QKewogICAgICAgIHJldHVybiAhKCggKnRoaXMgPT0gb1BvaW50ICkgfHwg KCAqdGhpcyA8IG9Qb2ludCApKTsKfQojIDM2MyAidmVjY2xlYW4uY3BwIgpUQm9vbCBDVkNMUG9p bnQ6Om9wZXJhdG9yID49ICggY29uc3QgQ1ZDTFBvaW50ICZvUG9pbnQgKSBjb25zdAp7CiAgICAg ICAgcmV0dXJuICgoICp0aGlzID4gb1BvaW50ICkgfHwgKCAqdGhpcyA9PSBvUG9pbnQgKSk7Cn0K IyAzODUgInZlY2NsZWFuLmNwcCIKVEJvb2wgQ1ZDTFBvaW50OjpvcGVyYXRvciA8PSAoIGNvbnN0 IENWQ0xQb2ludCAmb1BvaW50ICkgY29uc3QKewogICAgICAgIHJldHVybiAoKCAqdGhpcyA8IG9Q b2ludCApIHx8ICggKnRoaXMgPT0gb1BvaW50ICkpOwp9CiMgNDIwICJ2ZWNjbGVhbi5jcHAiCkNW Q0xSZWN0OjpDVkNMUmVjdCggZG91YmxlIGRmWDEsIGRvdWJsZSBkZlkxLCBkb3VibGUgZGZYMiwg ZG91YmxlIGRmWTIgKQp7CiAgICAgICAgbV9kZlhNaW4gPSAoKGRmWDEpIDwgKGRmWDIpID8gKGRm WDEpIDogKGRmWDIpKTsKICAgICAgICBtX2RmWU1pbiA9ICgoZGZZMSkgPCAoZGZZMikgPyAoZGZZ MSkgOiAoZGZZMikpOwogICAgICAgIG1fZGZYTWF4ID0gKChkZlgxKSA+IChkZlgyKSA/IChkZlgx KSA6IChkZlgyKSk7CiAgICAgICAgbV9kZllNYXggPSAoKGRmWTEpID4gKGRmWTIpID8gKGRmWTEp IDogKGRmWTIpKTsKfQojIDQ0NyAidmVjY2xlYW4uY3BwIgpDVkNMUmVjdDo6Q1ZDTFJlY3QoIGNv bnN0IEdEQlZlcnRleCAmdjEsIGNvbnN0IEdEQlZlcnRleCAmdjIgKQp7CiAgICAgICAgbV9kZlhN aW4gPSAoKHYxLngpIDwgKHYyLngpID8gKHYxLngpIDogKHYyLngpKTsKICAgICAgICBtX2RmWU1p biA9ICgodjEueSkgPCAodjIueSkgPyAodjEueSkgOiAodjIueSkpOwogICAgICAgIG1fZGZYTWF4 ID0gKCh2MS54KSA+ICh2Mi54KSA/ICh2MS54KSA6ICh2Mi54KSk7CiAgICAgICAgbV9kZllNYXgg PSAoKHYxLnkpID4gKHYyLnkpID8gKHYxLnkpIDogKHYyLnkpKTsKfQojIDQ3MSAidmVjY2xlYW4u Y3BwIgpDVkNMUmVjdDo6Q1ZDTFJlY3QoKQp7CiAgICAgICAgbV9kZlhNaW4gPSAwLjA7CiAgICAg ICAgbV9kZllNaW4gPSAwLjA7CiAgICAgICAgbV9kZlhNYXggPSAwLjA7CiAgICAgICAgbV9kZllN YXggPSAwLjA7Cn0KIyA0OTggInZlY2NsZWFuLmNwcCIKVEJvb2wgQ1ZDTFJlY3Q6OlBvaW50SW5S ZWN0KCBkb3VibGUgZGZYLCBkb3VibGUgZGZZICkgY29uc3QKewogICAgICAgIHJldHVybiBkZlgg Pj0gbV9kZlhNaW4gJiYgZGZYIDw9IG1fZGZYTWF4ICYmCiAgICAgICAgICAgIGRmWSA+PSBtX2Rm WU1pbiAmJiBkZlkgPD0gbV9kZllNYXg7Cn0KIyA1MjIgInZlY2NsZWFuLmNwcCIKVEJvb2wgQ1ZD TFJlY3Q6OlBvaW50SW5SZWN0KCBjb25zdCBDVkNMUG9pbnQgJm9Qb2ludCApIGNvbnN0CnsKICAg ICAgICByZXR1cm4gUG9pbnRJblJlY3QoIG9Qb2ludC54LCBvUG9pbnQueSApOwp9CiMgNTQ1ICJ2 ZWNjbGVhbi5jcHAiClRCb29sIENWQ0xSZWN0OjpJbnRlcnNlY3RzKCBjb25zdCBDVkNMUmVjdCAm b1JlY3QgKSBjb25zdAp7CiAgICAgICAgcmV0dXJuICEoIG1fZGZYTWF4IDwgb1JlY3QubV9kZlhN aW4gKSAmJgogICAgICAgICAgICAhKCBtX2RmWE1pbiA+IG9SZWN0Lm1fZGZYTWF4ICkgJiYKICAg ICAgICAgICAgISggbV9kZllNYXggPCBvUmVjdC5tX2RmWU1pbiApICYmCiAgICAgICAgICAgICEo IG1fZGZZTWluID4gb1JlY3QubV9kZllNYXggKTsKfQojIDU2OSAidmVjY2xlYW4uY3BwIgpDVkNM UG9pbnQgQ1ZDTFJlY3Q6OkdldExvd2VyTGVmdCgpIGNvbnN0CnsKICAgICAgICByZXR1cm4gQ1ZD TFBvaW50KCBtX2RmWE1pbiwgbV9kZllNaW4sIDAuMCApOwp9CiMgNTkxICJ2ZWNjbGVhbi5jcHAi CkNWQ0xQb2ludCBDVkNMUmVjdDo6R2V0VXBwZXJSaWdodCgpIGNvbnN0CnsKICAgICAgICByZXR1 cm4gQ1ZDTFBvaW50KCBtX2RmWE1heCwgbV9kZllNYXgsIDAuMCApOwp9CiMgNjE1ICJ2ZWNjbGVh bi5jcHAiCkNWQ0xSZWN0IENWQ0xSZWN0OjpDb21wdXRlSW50ZXJzZWN0aW9uKCBjb25zdCBDVkNM UmVjdCAmb1JlY3QgKQp7CiAgICAgICAgcmV0dXJuIENWQ0xSZWN0KCAoKG1fZGZYTWluKSA+IChv UmVjdC5tX2RmWE1pbikgPyAobV9kZlhNaW4pIDogKG9SZWN0Lm1fZGZYTWluKSksCiAgICAgICAg ICAgICgobV9kZllNaW4pID4gKG9SZWN0Lm1fZGZZTWluKSA/IChtX2RmWU1pbikgOiAob1JlY3Qu bV9kZllNaW4pKSwKICAgICAgICAgICAgKChtX2RmWE1heCkgPCAob1JlY3QubV9kZlhNYXgpID8g KG1fZGZYTWF4KSA6IChvUmVjdC5tX2RmWE1heCkpLAogICAgICAgICAgICAoKG1fZGZZTWF4KSA8 IChvUmVjdC5tX2RmWU1heCkgPyAobV9kZllNYXgpIDogKG9SZWN0Lm1fZGZZTWF4KSkpOwp9CiMg NjQyICJ2ZWNjbGVhbi5jcHAiClRCb29sIG9wZXJhdG9yID09ICggY29uc3QgQ1ZDTFJlY3QgJm9S ZWN0MSwgY29uc3QgQ1ZDTFJlY3QgJm9SZWN0MiApCnsKICAgICAgICByZXR1cm4gKG9SZWN0MS5H ZXRMb3dlckxlZnQoKSA9PSBvUmVjdDIuR2V0TG93ZXJMZWZ0KCkpICYmCiAgICAgICAgICAgICgg b1JlY3QxLkdldFVwcGVyUmlnaHQoKSA9PSBvUmVjdDIuR2V0VXBwZXJSaWdodCgpKTsKfQojIDY2 MyAidmVjY2xlYW4uY3BwIgpDVkNMUG9pbnQgQ1ZDTFJlY3Q6OkNvbXB1dGVDZW50ZXIoKQp7CiAg ICAgICAgcmV0dXJuIENWQ0xQb2ludCgoIG1fZGZYTWluICsgbV9kZlhNYXggKSAvIDIuMCwKICAg ICAgICAgICAgKCBtX2RmWU1pbiArIG1fZGZZTWF4ICkgLyAyLjAgKTsKfQojIDY5NCAidmVjY2xl YW4uY3BwIgpjb25zdCBDVkNMU2hhcGU6OlZDTFNoYXBlSWRfdHAgVkNMTlVMTFNoYXBlSWQgPSAy MTQ3NDgzNjQ3OwoKCkNWQ0xTaGFwZTo6Q1ZDTFNoYXBlKCkKewogICAgICAgIG1fc2hhcGVJZCA9 IC0xOwogICAgICAgIG1fZGZVcEFuZ2xlID0gMC4wOwp9CiMgNzIxICJ2ZWNjbGVhbi5jcHAiCkNW Q0xTaGFwZTo6Q1ZDTFNoYXBlKCBjb25zdCBDVkNMU2hhcGUgJm9TaGFwZSApCnsKICAgICAgICBt X3NoYXBlSWQgPSBvU2hhcGUubV9zaGFwZUlkOwogICAgICAgIG1fb1BvaW50cyA9IG9TaGFwZS5t X29Qb2ludHM7CiAgICAgICAgbV9vUHJvcGVydGllcyA9IG9TaGFwZS5tX29Qcm9wZXJ0aWVzOwog ICAgICAgIG1fZGZVcEFuZ2xlID0gZm1vZCggYXRhbjIoIG1fb1BvaW50c1sgMSBdLnkgLSBtX29Q b2ludHNbIDAgXS55LCBtX29Qb2ludHNbIDEgXS54IC0gbV9vUG9pbnRzWyAwIF0ueCApICsgMi4w ICogMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjI2NDNFMCwgMi4wICogMy4xNDE1OTI2NTM1ODk3OTMy Mzg0NjI2NDNFMCApOwoKICAgICAgICBpZiAoVkNMREJMQ29tcCggbV9kZlVwQW5nbGUsIDIuMCAq IDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzRTAsIDggKSA9PSAwKSBtX2RmVXBBbmdsZSA9IDA7 Cn0KIyA3NDggInZlY2NsZWFuLmNwcCIKQ1ZDTFNoYXBlOjp+Q1ZDTFNoYXBlKCkKewoKfQojIDc3 MyAidmVjY2xlYW4uY3BwIgpDVkNMU2hhcGU6OkNWQ0xTaGFwZSggY29uc3QgQ1ZDTFBvaW50OjpW Q0xQb2ludFZlY3Rvcl90cCAmb1BvaW50cywgQ1ZDTFNoYXBlUHJvcHMgb1Byb3BlcnRpZXMsIGlu dCBuSWQgKQp7CiAgICAgICAgbV9vUG9pbnRzID0gb1BvaW50czsKICAgICAgICBtX29Qcm9wZXJ0 aWVzID0gb1Byb3BlcnRpZXM7CiAgICAgICAgbV9zaGFwZUlkID0gbklkOwogICAgICAgIG1fZGZV cEFuZ2xlID0gZm1vZCggYXRhbjIoIG1fb1BvaW50c1sgMSBdLnkgLSBtX29Qb2ludHNbIDAgXS55 LCBtX29Qb2ludHNbIDEgXS54IC0gbV9vUG9pbnRzWyAwIF0ueCApICsgMi4wICogMy4xNDE1OTI2 NTM1ODk3OTMyMzg0NjI2NDNFMCwgMi4wICogMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjI2NDNFMCAp OwoKICAgICAgICBpZiAoVkNMREJMQ29tcCggbV9kZlVwQW5nbGUsIDIuMCAqIDMuMTQxNTkyNjUz NTg5NzkzMjM4NDYyNjQzRTAsIDggKSA9PSAwKSBtX2RmVXBBbmdsZSA9IDA7Cn0KIyA3OTkgInZl Y2NsZWFuLmNwcCIKVEJvb2wgQ1ZDTFNoYXBlOjpJc01vbm90b25pYygpCnsKICAgICAgICByZXR1 cm46OlZDTElzTW9ub3RvbmljKCBtX29Qb2ludHMgKTsKfQojIDgyNCAidmVjY2xlYW4uY3BwIgpU Qm9vbCBDVkNMU2hhcGU6OklzTGVmdE9mKCBjb25zdCBDVkNMUG9pbnQgJm9Qb2ludCApCnsKICAg ICAgICByZXR1cm46OlZDTElzTGVmdE9mU2hhcGUoIG9Qb2ludCwgbV9vUG9pbnRzICk7Cn0KIyA4 NDcgInZlY2NsZWFuLmNwcCIKVEJvb2wgQ1ZDTFNoYXBlOjpJc0xlZnRPbiggY29uc3QgQ1ZDTFBv aW50ICZvUG9pbnQgKQp7CiAgICAgICAgcmV0dXJuOjpWQ0xJc0xlZnRPblNoYXBlKCBvUG9pbnQs IG1fb1BvaW50cyApOwp9CiMgODY4ICJ2ZWNjbGVhbi5jcHAiClRCb29sIENWQ0xTaGFwZTo6SXNS aWdodE9mKCBjb25zdCBDVkNMUG9pbnQgJm9Qb2ludCApCnsKICAgICAgICByZXR1cm46OlZDTElz UmlnaHRPZlNoYXBlKCBvUG9pbnQsIG1fb1BvaW50cyApOwp9CiMgODkwICJ2ZWNjbGVhbi5jcHAi ClRCb29sIENWQ0xTaGFwZTo6SXNPbiggY29uc3QgQ1ZDTFBvaW50ICZvUG9pbnQgKQp7CiAgICAg ICAgcmV0dXJuICghSXNMZWZ0T2YoIG9Qb2ludCApKSAmJiAoICFJc1JpZ2h0T2YoIG9Qb2ludCAp KTsKfQojIDkwOSAidmVjY2xlYW4uY3BwIgpDVkNMU2hhcGU6OlZDTFNoYXBlSWRfdHAgQ1ZDTFNo YXBlOjpHZXRJZCgpIGNvbnN0CnsKICAgICAgICByZXR1cm4gbV9zaGFwZUlkOwp9CiMgOTI5ICJ2 ZWNjbGVhbi5jcHAiCkNWQ0xTaGFwZVByb3BzIENWQ0xTaGFwZTo6R2V0U2hhcGVQcm9wcygpIGNv bnN0CnsKICAgICAgICByZXR1cm4gbV9vUHJvcGVydGllczsKfQojIDk0OCAidmVjY2xlYW4uY3Bw IgpDVkNMUmVjdCBDVkNMU2hhcGU6OkdldFJhbmdlUmVjdCgpIGNvbnN0CnsKICAgICAgICByZXR1 cm46OlZDTENvbXB1dGVSYW5nZVJlY3QoIG1fb1BvaW50cyApOwp9CiMgOTY3ICJ2ZWNjbGVhbi5j cHAiCmRvdWJsZSBDVkNMU2hhcGU6OkdldFNoYXBlTGVuZ3RoKCkgY29uc3QKewogICAgICAgIHJl dHVybjo6VkNMQ29tcHV0ZUxlbmd0aCggbV9vUG9pbnRzICk7Cn0KIyA5OTIgInZlY2NsZWFuLmNw cCIKZG91YmxlIENWQ0xTaGFwZTo6R2V0RGlzdGFuY2VGcm9tKCBDVkNMUG9pbnQgJm9DbG9zZXN0 LCBjb25zdCBDVkNMUG9pbnQgJm9Gcm9tV2hlcmUgKSBjb25zdAp7CiAgICAgICAgcmV0dXJuOjpW Q0xEaXN0YW5jZUZyb20oIG9DbG9zZXN0LCBtX29Qb2ludHMsIG9Gcm9tV2hlcmUgKTsKfQojIDEw MTEgInZlY2NsZWFuLmNwcCIKQ1ZDTFBvaW50IENWQ0xTaGFwZTo6R2V0Rmlyc3QoKSBjb25zdAp7 CiAgICAgICAgcmV0dXJuIG1fb1BvaW50c1sgMCBdOwp9CiMgMTAzMSAidmVjY2xlYW4uY3BwIgpD VkNMUG9pbnQgQ1ZDTFNoYXBlOjpHZXRTZWNvbmQoKSBjb25zdAp7CiAgICAgICAgcmV0dXJuIG1f b1BvaW50c1sgMSBdOwp9CiMgMTA1MiAidmVjY2xlYW4uY3BwIgpDVkNMUG9pbnQgQ1ZDTFNoYXBl OjpHZXRTZWNvbmRUb0xhc3QoKSBjb25zdAp7CiAgICAgICAgcmV0dXJuICogKCBtX29Qb2ludHMu cmJlZ2luKCkgKyAxICk7Cn0KIyAxMDcwICJ2ZWNjbGVhbi5jcHAiCkNWQ0xQb2ludCBDVkNMU2hh cGU6OkdldExhc3QoKSBjb25zdAp7CiAgICAgICAgcmV0dXJuICptX29Qb2ludHMucmJlZ2luKCk7 Cn0KIyAxMTA4ICJ2ZWNjbGVhbi5jcHAiCnZvaWQgQ1ZDTFNoYXBlOjpJbnNlcnRQb2ludCggY29u c3QgQ1ZDTFBvaW50ICZvUG9pbnQgKQp7CiAgICAgICAgKElNUENoZWNrRXhwcigiZmFsc2UiLCAi dmVjY2xlYW4uY3BwIiwgMTExMCksIChmYWxzZSkgPyAoMCkgOiBfSU1QQXNzZXJ0KCJmYWxzZSIs InZlY2NsZWFuLmNwcCIsMTExMCkpOwp9CiMgMTEzMCAidmVjY2xlYW4uY3BwIgpDVkNMU2hhcGU6 OlZDTFNoYXBlSWRWZWN0b3JfdHAgQ1ZDTFNoYXBlOjpCcmVha0F0UG9pbnQoIGNvbnN0IENWQ0xQ b2ludCAmb1doZXJlICkKewogICAgICAgIENWQ0xQb2ludDo6VkNMUG9pbnRWZWN0b3JfdHAgb0Jy ZWFrUG9pbnQ7CiAgICAgICAgb0JyZWFrUG9pbnQucHVzaF9iYWNrKCBvV2hlcmUgKTsKICAgICAg ICByZXR1cm4gQnJlYWtBdFBvaW50cyggb0JyZWFrUG9pbnQgKTsKfQojIDExNTUgInZlY2NsZWFu LmNwcCIKQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkVmVjdG9yX3RwIENWQ0xTaGFwZTo6QnJlYWtBdFBv aW50cyggY29uc3QgQ1ZDTFBvaW50OjpWQ0xQb2ludFZlY3Rvcl90cCAmb0JyZWFrUG9pbnRzICkK ewoKCgogICAgICAgIENWQ0xTaGFwZTo6VkNMU2hhcGVJZFZlY3Rvcl90cCBvU2hpZHM7CiAgICAg ICAgb1NoaWRzLnB1c2hfYmFjayggdGhpcy0+R2V0SWQoKSk7CgogICAgICAgIENWQ0xQb2ludDo6 VkNMUG9pbnRWZWN0b3JMaXN0X3RwIG9QaWVjZXM7CiAgICAgICAgOjpWQ0xCcmVha0F0UG9pbnRz KCBvUGllY2VzLCBtX29Qb2ludHMsIG9CcmVha1BvaW50cyApOwoKICAgICAgICBDVkNMUG9pbnQ6 OlZDTFBvaW50VmVjdG9yTGlzdF90cCBvTW9ub1BpZWNlczsKICAgICAgICBWQ0xCcmVha01vbm90 b25pYyggb01vbm9QaWVjZXMsIG9QaWVjZXNbIDAgXSApOwoKICAgICAgICBpbnQgbk1vbm9TaXpl ID0gb01vbm9QaWVjZXMuc2l6ZSgpOwogICAgICAgIGZvciAoaW50IGogPSAxOyBqIDwgbk1vbm9T aXplOyBqKyspCiAgICAgICAgewoKCgogICAgICAgICAgICBWQ0xTaGFwZUlkX3RwIG5OZXdTaGFw ZUlkID0gQ1ZDTFNoYXBlRmFjdG9yeTo6TWFrZU1vbm90b25pY1NoYXBlKCBvTW9ub1BpZWNlc1sg aiBdLCBtX29Qcm9wZXJ0aWVzICk7CiAgICAgICAgICAgIENWQ0xTaGFwZSAqcG9TaGFwZTsKICAg ICAgICAgICAgQ1ZDTFNoYXBlRmFjdG9yeTo6R2V0QVNoYXBlKCBwb1NoYXBlLCBuTmV3U2hhcGVJ ZCApOwoKCgoKICAgICAgICAgICAgcG9TaGFwZS0+bV9vUHJvcGVydGllcy5tX2JSZXZlcnNlZCA9 IG1fb1Byb3BlcnRpZXMubV9iUmV2ZXJzZWQ7CiAgICAgICAgICAgIG9TaGlkcy5wdXNoX2JhY2so IG5OZXdTaGFwZUlkICk7CiAgICAgICAgfQoKCgoKICAgICAgICBtX29Qb2ludHMgPSBvTW9ub1Bp ZWNlc1sgMCBdOwoKCgoKICAgICAgICB1bnNpZ25lZCBpbnQgblNpemUgPSBvUGllY2VzLnNpemUo KTsKICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8IG5TaXplOyBpKyspCiAgICAg ICAgewoKICAgICAgICAgICAgQ1ZDTFBvaW50OjpWQ0xQb2ludFZlY3Rvckxpc3RfdHAgb1BvaW50 c0xpc3Q7CiAgICAgICAgICAgIFZDTEJyZWFrTW9ub3RvbmljKCBvUG9pbnRzTGlzdCwgb1BpZWNl c1sgaSBdICk7CgogICAgICAgICAgICBpbnQgbk1vbm9TaXplID0gb1BvaW50c0xpc3Quc2l6ZSgp OwogICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG5Nb25vU2l6ZTsgaisrKQogICAgICAg ICAgICB7CgoKCiAgICAgICAgICAgICAgICBWQ0xTaGFwZUlkX3RwIG5OZXdTaGFwZUlkID0gQ1ZD TFNoYXBlRmFjdG9yeTo6TWFrZU1vbm90b25pY1NoYXBlKCBvUG9pbnRzTGlzdFsgaiBdLCBtX29Q cm9wZXJ0aWVzICk7CiAgICAgICAgICAgICAgICBDVkNMU2hhcGUgKnBvU2hhcGU7CiAgICAgICAg ICAgICAgICBDVkNMU2hhcGVGYWN0b3J5OjpHZXRBU2hhcGUoIHBvU2hhcGUsIG5OZXdTaGFwZUlk ICk7CgoKCgogICAgICAgICAgICAgICAgcG9TaGFwZS0+bV9vUHJvcGVydGllcy5tX2JSZXZlcnNl ZCA9IG1fb1Byb3BlcnRpZXMubV9iUmV2ZXJzZWQ7CiAgICAgICAgICAgICAgICBvU2hpZHMucHVz aF9iYWNrKCBuTmV3U2hhcGVJZCApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBy ZXR1cm4gb1NoaWRzOwp9CiMgMTI0MiAidmVjY2xlYW4uY3BwIgpDVkNMU2hhcGU6OlZDTFNoYXBl SWRWZWN0b3JfdHAgQ1ZDTFNoYXBlOjpFeHRlbmRUbyggY29uc3QgQ1ZDTFBvaW50IG9OZXdQb2lu dCwgY29uc3QgQ1ZDTFBvaW50ICZvRW5kUG9pbnQgKQp7CgoKCiAgICAgICAgKElNUENoZWNrRXhw cigiKCBvRW5kUG9pbnQgPT0gbV9vUG9pbnRzWyAwIF0gKSB8fCAoIG9FbmRQb2ludCA9PSBtX29Q b2ludHNbIG1fb1BvaW50cy5zaXplKCkgLSAxIF0gKSIsICJ2ZWNjbGVhbi5jcHAiLCAxMjQ3KSwg KCggb0VuZFBvaW50ID09IG1fb1BvaW50c1sgMCBdICkgfHwgKCBvRW5kUG9pbnQgPT0gbV9vUG9p bnRzWyBtX29Qb2ludHMuc2l6ZSgpIC0gMSBdICkpID8gKDApIDogX0lNUEFzc2VydCgiKCBvRW5k UG9pbnQgPT0gbV9vUG9pbnRzWyAwIF0gKSB8fCAoIG9FbmRQb2ludCA9PSBtX29Qb2ludHNbIG1f b1BvaW50cy5zaXplKCkgLSAxIF0gKSIsInZlY2NsZWFuLmNwcCIsMTI0NykpOwoKICAgICAgICBD VkNMU2hhcGU6OlZDTFNoYXBlSWRWZWN0b3JfdHAgb1NoaWRzOwoKCgoKICAgICAgICBvU2hpZHMu cHVzaF9iYWNrKCBtX3NoYXBlSWQgKTsKCgoKCiAgICAgICAgQ1ZDTFBvaW50OjpWQ0xQb2ludFZl Y3Rvcl90cCBvUG9pbnRzID0gbV9vUG9pbnRzOwoKCgoKCiAgICAgICAgVEJvb2wgYkluc2VydCA9 IGZhbHNlOwoKCgoKICAgICAgICBpZiAobV9vUHJvcGVydGllcy5tX2JSZXZlcnNlZCkKICAgICAg ICB7CiAgICAgICAgICAgIHJldmVyc2UoIG9Qb2ludHMuYmVnaW4oKSwgb1BvaW50cy5lbmQoKSk7 CiAgICAgICAgfQoKCgoKICAgICAgICBpZiAob0VuZFBvaW50ID09IG9Qb2ludHNbIDAgXSkKICAg ICAgICB7CiAgICAgICAgICAgIG9Qb2ludHMuaW5zZXJ0KCBvUG9pbnRzLmJlZ2luKCksIG9OZXdQ b2ludCApOwogICAgICAgICAgICBiSW5zZXJ0ID0gdHJ1ZTsKICAgICAgICB9CgoKCgogICAgICAg IGVsc2UgaWYgKG9FbmRQb2ludCA9PSBvUG9pbnRzWyBvUG9pbnRzLnNpemUoKSAtIDEgXSkKICAg ICAgICB7CiAgICAgICAgICAgIG9Qb2ludHMucHVzaF9iYWNrKCBvTmV3UG9pbnQgKTsKICAgICAg ICB9CgoKCgoKICAgICAgICBWQ0xVbmlxdWVWZXJ0ZXgoIG9Qb2ludHMgKTsKCgoKCiAgICAgICAg Q1ZDTFBvaW50OjpWQ0xQb2ludFZlY3Rvckxpc3RfdHAgb1BvaW50c0xpc3Q7CiAgICAgICAgVkNM QnJlYWtNb25vdG9uaWMoIG9Qb2ludHNMaXN0LCBvUG9pbnRzICk7CgoKCgogICAgICAgIGlmIChv UG9pbnRzTGlzdC5zaXplKCkgPT0gMSkKICAgICAgICB7CiAgICAgICAgICAgIG1fb1BvaW50cyA9 IG9Qb2ludHNMaXN0WyAwIF07CiAgICAgICAgfQoKCgoKICAgICAgICBlbHNlIGlmIChvUG9pbnRz TGlzdC5zaXplKCkgPT0gMikKICAgICAgICB7CgoKCgoKICAgICAgICAgICAgaWYgKGJJbnNlcnQp CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG1fb1BvaW50cyA9IG9Qb2ludHNMaXN0WyAx IF07CgoKCgogICAgICAgICAgICAgICAgb1NoaWRzLnB1c2hfYmFjayggQ1ZDTFNoYXBlRmFjdG9y eTo6TWFrZU1vbm90b25pY1NoYXBlKCBvUG9pbnRzTGlzdFsgMCBdLCBtX29Qcm9wZXJ0aWVzICkp OwogICAgICAgICAgICB9CgoKCgoKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICBtX29Qb2ludHMgPSBvUG9pbnRzTGlzdFsgMCBdOwoKCgoKICAgICAgICAgICAg ICAgIG9TaGlkcy5wdXNoX2JhY2soIENWQ0xTaGFwZUZhY3Rvcnk6Ok1ha2VNb25vdG9uaWNTaGFw ZSggb1BvaW50c0xpc3RbIDEgXSwgbV9vUHJvcGVydGllcyApKTsKICAgICAgICAgICAgfQogICAg ICAgIH0KCgoKCgogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIChJTVBDaGVja0V4 cHIoImZhbHNlIiwgInZlY2NsZWFuLmNwcCIsIDEzNTMpLCAoZmFsc2UpID8gKDApIDogX0lNUEFz c2VydCgiZmFsc2UiLCJ2ZWNjbGVhbi5jcHAiLDEzNTMpKTsKICAgICAgICB9CgoKCgogICAgICAg IGlmIChtX29Qcm9wZXJ0aWVzLm1fYlJldmVyc2VkKQogICAgICAgIHsKICAgICAgICAgICAgcmV2 ZXJzZSggbV9vUG9pbnRzLmJlZ2luKCksIG1fb1BvaW50cy5lbmQoKSk7CiAgICAgICAgfQoKCgoK ICAgICAgICByZXR1cm4gb1NoaWRzOwp9CiMgMTM4NyAidmVjY2xlYW4uY3BwIgp2b2lkIENWQ0xT aGFwZTo6UmVwbGFjZVBvaW50cyggY29uc3QgQ1ZDTFBvaW50OjpWQ0xQb2ludFZlY3Rvcl90cCAm b1RvLCBjb25zdCBDVkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yX3RwICZvRnJvbSApCnsKCgoKICAg ICAgICAoSU1QQ2hlY2tFeHByKCJmYWxzZSIsICJ2ZWNjbGVhbi5jcHAiLCAxMzkyKSwgKGZhbHNl KSA/ICgwKSA6IF9JTVBBc3NlcnQoImZhbHNlIiwidmVjY2xlYW4uY3BwIiwxMzkyKSk7Cn0KIyAx NDEzICJ2ZWNjbGVhbi5jcHAiCnZvaWQgQ1ZDTFNoYXBlOjpNb3ZlRW5kUG9pbnQoIGNvbnN0IENW Q0xQb2ludCAmb0Rlc3QsIGNvbnN0IENWQ0xQb2ludCAmb1NvdXJjZSApCnsKCgoKICAgICAgICAo SU1QQ2hlY2tFeHByKCJmYWxzZSIsICJ2ZWNjbGVhbi5jcHAiLCAxNDE4KSwgKGZhbHNlKSA/ICgw KSA6IF9JTVBBc3NlcnQoImZhbHNlIiwidmVjY2xlYW4uY3BwIiwxNDE4KSk7Cn0KIyAxNDM2ICJ2 ZWNjbGVhbi5jcHAiCnZvaWQgQ1ZDTFNoYXBlOjpXcml0ZSggY29uc3QgR0RCTGF5ZXIgJm9EZXN0 aW5hdGlvbiApIGNvbnN0CnsKICAgICAgICBpZiAobV9vUG9pbnRzLnNpemUoKSA8PSAxKQogICAg ICAgIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCgoKCiAgICAgICAgR0RCVmVydGV4 ICpwYXNWZXJ0ZXg7CiAgICAgICAgcGFzVmVydGV4ID0gKCBHREJWZXJ0ZXggKiApIF9ITWFsbG9j KChzaXplX3QpKG1fb1BvaW50cy5zaXplKCkgKiBzaXplb2YoIEdEQlZlcnRleCApKSwidmVjY2xl YW4uY3BwIiwxNDQ3KTsKICAgICAgICBpZiAocGFzVmVydGV4ID09IF9fbnVsbCkKICAgICAgICB7 CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgoKCgogICAgICAgIGlmIChtX29Qcm9wZXJ0 aWVzLm1fYlJldmVyc2VkKQogICAgICAgIHsKICAgICAgICAgICAgaW50IGogPSAwOwogICAgICAg ICAgICBmb3IgKENWQ0xQb2ludDo6VkNMUG9pbnRWZWN0b3JfdHA6OmNvbnN0X3JldmVyc2VfaXRl cmF0b3IgaSA9IG1fb1BvaW50cy5yYmVnaW4oKTsgaSAhPSBtX29Qb2ludHMucmVuZCgpOyBpKysp CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHBhc1ZlcnRleFsgaiBdLnggPSAoICppICku eDsKICAgICAgICAgICAgICAgIHBhc1ZlcnRleFsgaiBdLnkgPSAoICppICkueTsKICAgICAgICAg ICAgICAgIHBhc1ZlcnRleFsgaiBdLnogPSAoICppICkuejsKICAgICAgICAgICAgICAgIGorKzsK CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAg ICAgIGludCBqID0gMDsKICAgICAgICAgICAgZm9yIChDVkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9y X3RwOjpjb25zdF9pdGVyYXRvciBpID0gbV9vUG9pbnRzLmJlZ2luKCk7IGkgIT0gbV9vUG9pbnRz LmVuZCgpOyBpKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHBhc1ZlcnRleFsgaiBd LnggPSAoICppICkueDsKICAgICAgICAgICAgICAgIHBhc1ZlcnRleFsgaiBdLnkgPSAoICppICku eTsKICAgICAgICAgICAgICAgIHBhc1ZlcnRleFsgaiBdLnogPSAoICppICkuejsKICAgICAgICAg ICAgICAgIGorKzsKICAgICAgICAgICAgfQogICAgICAgIH0KIyAxNDg4ICJ2ZWNjbGVhbi5jcHAi CiAgICAgICAgcGFzVmVydGV4WyAwIF0ueCA9IGZsb29yKCggcGFzVmVydGV4WyAwIF0ueCAqIDFl NyApICsgMC41ICkgLyAxZTc7CiAgICAgICAgcGFzVmVydGV4WyAwIF0ueSA9IGZsb29yKCggcGFz VmVydGV4WyAwIF0ueSAqIDFlNyApICsgMC41ICkgLyAxZTc7CiAgICAgICAgcGFzVmVydGV4WyAw IF0ueiA9IGZsb29yKCggcGFzVmVydGV4WyAwIF0ueiAqIDFlNyApICsgMC41ICkgLyAxZTc7Cgog ICAgICAgIGludCBuRW5kUG9zID0gbV9vUG9pbnRzLnNpemUoKSAtIDE7CiAgICAgICAgcGFzVmVy dGV4WyBuRW5kUG9zIF0ueCA9IGZsb29yKCggcGFzVmVydGV4WyBuRW5kUG9zIF0ueCAqIDFlNyAp ICsgMC41ICkgLyAxZTc7CiAgICAgICAgcGFzVmVydGV4WyBuRW5kUG9zIF0ueSA9IGZsb29yKCgg cGFzVmVydGV4WyBuRW5kUG9zIF0ueSAqIDFlNyApICsgMC41ICkgLyAxZTc7CiAgICAgICAgcGFz VmVydGV4WyBuRW5kUG9zIF0ueiA9IGZsb29yKCggcGFzVmVydGV4WyBuRW5kUG9zIF0ueiAqIDFl NyApICsgMC41ICkgLyAxZTc7CgoKCgogICAgICAgIEdEQlNoYXBlSWQgaFNoYXBlSWQgPSBHREJD cmVhdGVTaGFwZSggb0Rlc3RpbmF0aW9uLCAtMSApOwogICAgICAgIEdEQlNldFZlcnRpY2VzKCBv RGVzdGluYXRpb24sIGhTaGFwZUlkLCBtX29Qb2ludHMuc2l6ZSgpLCBwYXNWZXJ0ZXggKTsKCiAg ICAgICAgX0hGcmVlKChwYXNWZXJ0ZXgpLCJ2ZWNjbGVhbi5jcHAiLDE1MDMpOwoKCgoKICAgICAg ICBmb3IgKGludCBpID0gMDsgaSA8IEdEQkdldE51bUZpZWxkcyggb0Rlc3RpbmF0aW9uICk7IGkr KykKICAgICAgICB7CgoKCiAgICAgICAgICAgIGludCBpRmllbGQgPSBHREJHZXRGaWVsZEluZGV4 KCBtX29Qcm9wZXJ0aWVzLm1faEdEQkxheWVySW4sIEdEQkdldEZpZWxkTmFtZSggb0Rlc3RpbmF0 aW9uLCBpICkpOwogICAgICAgICAgICBpZiAoaUZpZWxkICE9IC0xKQogICAgICAgICAgICB7CgoK CgogICAgICAgICAgICAgICAgaWYgKEdEQkdldEZpZWxkVHlwZSggbV9vUHJvcGVydGllcy5tX2hH REJMYXllckluLCBpRmllbGQgKSA9PSBHREJHZXRGaWVsZFR5cGUoIG9EZXN0aW5hdGlvbiwgaSAp KQogICAgICAgICAgICAgICAgewoKCgogICAgICAgICAgICAgICAgICAgIEdEQkZpZWxkICpwdUZp ZWxkID0gR0RCR2V0RmllbGRWYWx1ZSggbV9vUHJvcGVydGllcy5tX2hHREJMYXllckluLCBtX29Q cm9wZXJ0aWVzLm1faEdEQlNoYXBlSWQsIGlGaWVsZCApOwogICAgICAgICAgICAgICAgICAgIChJ TVBDaGVja0V4cHIoInB1RmllbGQgIT0gTlVMTCIsICJ2ZWNjbGVhbi5jcHAiLCAxNTI2KSwgKHB1 RmllbGQgIT0gX19udWxsKSA/ICgwKSA6IF9JTVBBc3NlcnQoInB1RmllbGQgIT0gTlVMTCIsInZl Y2NsZWFuLmNwcCIsMTUyNikpOwogICAgICAgICAgICAgICAgICAgIEdEQlNldEZpZWxkVmFsdWUo IG9EZXN0aW5hdGlvbiwgaFNoYXBlSWQsIGksIHB1RmllbGQgKTsKICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgfQogICAgICAgIH0KfQojIDE1NDkgInZlY2NsZWFuLmNwcCIKdm9pZCBDVkNM U2hhcGU6OldyaXRlKCkgY29uc3QKewogICAgICAgIGlmIChtX29Qcm9wZXJ0aWVzLm1faEdEQkxh eWVyT3V0ICE9IF9fbnVsbCkKICAgICAgICB7CiAgICAgICAgICAgIENWQ0xTaGFwZTo6V3JpdGUo IG1fb1Byb3BlcnRpZXMubV9oR0RCTGF5ZXJPdXQgKTsKICAgICAgICB9Cn0KIyAxNTc0ICJ2ZWNj bGVhbi5jcHAiClRCb29sIENWQ0xTaGFwZTo6b3BlcmF0b3IgPT0gKCBjb25zdCBDVkNMU2hhcGUg Jm9TaGFwZSApCnsKICAgICAgICByZXR1cm4gbV9vUG9pbnRzID09IG9TaGFwZS5tX29Qb2ludHM7 Cn0KIyAxNjAyICJ2ZWNjbGVhbi5jcHAiClRCb29sIENWQ0xTaGFwZTo6SW50ZXJzZWN0cyggQ1ZD TFBvaW50ICZvV2hlcmUsIGNvbnN0IENWQ0xTaGFwZSAmb1NoYXBlICkKewogICAgICAgIHJldHVy bjo6VkNMSW50ZXJzZWN0U2hhcGUoIG9XaGVyZSwgbV9vUG9pbnRzLCBvU2hhcGUubV9vUG9pbnRz ICk7Cn0KIyAxNjI0ICJ2ZWNjbGVhbi5jcHAiCmRvdWJsZSBDVkNMU2hhcGU6OkNvbXB1dGVYKCBk b3VibGUgZGZZICkKewogICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDwgbV9vUG9p bnRzLnNpemUoKTsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKCgoVkNMREJMQ29tcCgo bV9vUG9pbnRzWyBpIC0gMSBdLnkpLCBkZlkpIDw9IDApICYmIChWQ0xEQkxDb21wKGRmWSwgKG1f b1BvaW50c1sgaSBdLnkpKSA8PSAwKSkpCiAgICAgICAgICAgIHsKCgoKCiAgICAgICAgICAgICAg ICBpZiAoVkNMREJMQ29tcCggZGZZLCBtX29Qb2ludHNbIGkgLSAxIF0ueSApID09IDApCiAgICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1fb1BvaW50c1sgaSAtIDEg XS54OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGVsc2UgaWYgKFZDTERCTENv bXAoIGRmWSwgbV9vUG9pbnRzWyBpIF0ueSApID09IDApCiAgICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIG1fb1BvaW50c1sgaSBdLng7CiAgICAgICAgICAgICAgICB9 CgoKCgoKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgICAgICBkb3VibGUgZGZNID0gKCBtX29Qb2ludHNbIGkgXS55IC0gbV9vUG9pbnRzWyBpIC0g MSBdLnkgKSAvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIG1fb1Bv aW50c1sgaSBdLnggLSBtX29Qb2ludHNbIGkgLSAxIF0ueCApOwoKICAgICAgICAgICAgICAgICAg ICByZXR1cm4gKGRmWSAtIG1fb1BvaW50c1sgaSAtIDEgXS55KSAvIGRmTSArIG1fb1BvaW50c1sg aSAtIDEgXS54OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKCiAg ICAgICAgKElNUENoZWNrRXhwcigiZmFsc2UiLCAidmVjY2xlYW4uY3BwIiwgMTY1OSksIChmYWxz ZSkgPyAoMCkgOiBfSU1QQXNzZXJ0KCJmYWxzZSIsInZlY2NsZWFuLmNwcCIsMTY1OSkpOwogICAg ICAgIHJldHVybiAtMS43OTc2OTMxMzQ4NjIzMTU3RSszMDg7Cn0KIyAxNzAyICJ2ZWNjbGVhbi5j cHAiCkNWQ0xTaGFwZVByb3BzOjpDVkNMU2hhcGVQcm9wcygpCnsKICAgICAgICBtX2RmTWVyZ2VU b2wgPSAwLjA7CiAgICAgICAgbV9kZkRhbmdsZVRvbCA9IDAuMDsKICAgICAgICBtX2RmQ2xpcFRv bCA9IDAuMDsKICAgICAgICBtX2JSZXZlcnNlZCA9IGZhbHNlOwogICAgICAgIG1fYlJlZmVyZW5j ZSA9IGZhbHNlOwogICAgICAgIG1faEdEQkxheWVySW4gPSBfX251bGw7CiAgICAgICAgbV9oR0RC TGF5ZXJPdXQgPSBfX251bGw7CiAgICAgICAgbV9oR0RCU2hhcGVJZCA9IC0xOwp9CgpDVkNMU2hh cGVQcm9wczo6fkNWQ0xTaGFwZVByb3BzKCkKewogICAgICAgIG1faEdEQkxheWVySW4gPSBfX251 bGw7CiAgICAgICAgbV9oR0RCTGF5ZXJPdXQgPSBfX251bGw7Cn0KCgpDVkNMU2hhcGU6OlZDTFNo YXBlSWRfdHAgQ1ZDTFNoYXBlRmFjdG9yeTo6bV9uU2hhcGVzID0gLTE7CgoKCgp2ZWN0b3I8Q1ZD TFNoYXBlICogPiAqQ1ZDTFNoYXBlRmFjdG9yeTo6bV9zaGFwZVRhYmxlID0gX19udWxsOwoKCgoK c2V0PENWQ0xTaGFwZTo6VkNMU2hhcGVJZF90cCwgbGVzczxDVkNMU2hhcGU6OlZDTFNoYXBlSWRf dHA+ID4gKkNWQ0xTaGFwZUZhY3Rvcnk6Om1fYXZhaWxTaGFwZUlkcyA9IF9fbnVsbDsKIyAxNzU5 ICJ2ZWNjbGVhbi5jcHAiCkNWQ0xTaGFwZUZhY3Rvcnk6OkNWQ0xTaGFwZUZhY3RvcnkoKQp7CiAg ICAgICAgaWYgKG1fYXZhaWxTaGFwZUlkcyA9PSBfX251bGwpIG1fYXZhaWxTaGFwZUlkcyA9IG5l dygidmVjY2xlYW4uY3BwIiwxNzYxKSBzZXQgPCBDVkNMU2hhcGU6OlZDTFNoYXBlSWRfdHAsIGxl c3M8Q1ZDTFNoYXBlOjpWQ0xTaGFwZUlkX3RwPiA+OwogICAgICAgIGlmIChtX3NoYXBlVGFibGUg PT0gX19udWxsKSBtX3NoYXBlVGFibGUgPSBuZXcoInZlY2NsZWFuLmNwcCIsMTc2MikgdmVjdG9y IDwgQ1ZDTFNoYXBlICogPjsKfQojIDE3ODEgInZlY2NsZWFuLmNwcCIKQ1ZDTFNoYXBlRmFjdG9y eTo6fkNWQ0xTaGFwZUZhY3RvcnkoKQp7CiAgICAgICAgUG93ZXJEb3duKCk7Cn0KIyAxODA0ICJ2 ZWNjbGVhbi5jcHAiCkNWQ0xTaGFwZTo6VkNMU2hhcGVJZFZlY3Rvcl90cCBDVkNMU2hhcGVGYWN0 b3J5OjpNYWtlU2hhcGUoIGNvbnN0IENWQ0xTaGFwZTo6VkNMU2hhcGVJZFZlY3Rvcl90cCAmb0lu cHV0U2hhcGVzLCBjb25zdCBDVkNMU2hhcGVQcm9wcyAmb1Byb3BlcnRpZXMsIENWQ0xQb2ludDo6 VkNMUG9pbnRWZWN0b3JfdHAgJmJyZWFrUG9pbnRzICkKewogICAgICAgIENWQ0xQb2ludDo6VkNM UG9pbnRWZWN0b3JMaXN0X3RwIG9TaGFwZVBvaW50c0xpc3Q7CgogICAgICAgIHsKICAgICAgICAg ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBvSW5wdXRTaGFwZXMuc2l6ZSgpOyBpKysp CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENWQ0xTaGFwZSAqb01vbm9TaGFwZTsKICAg ICAgICAgICAgICAgIEdldEFTaGFwZSggb01vbm9TaGFwZSwgb0lucHV0U2hhcGVzWyBpIF0gKTsK ICAgICAgICAgICAgICAgIG9TaGFwZVBvaW50c0xpc3QucHVzaF9iYWNrKCBvTW9ub1NoYXBlLT5t X29Qb2ludHMgKTsKCiAgICAgICAgICAgICAgICBpZiAob01vbm9TaGFwZS0+bV9vUHJvcGVydGll cy5tX2JSZXZlcnNlZCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICByZXZl cnNlKCBvU2hhcGVQb2ludHNMaXN0WyBpIF0uYmVnaW4oKSwgb1NoYXBlUG9pbnRzTGlzdFsgaSBd LmVuZCgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCgoKCgog ICAgICAgIENWQ0xTaGFwZVByb3BzIG9Qcm9wID0gb1Byb3BlcnRpZXM7CiAgICAgICAgb1Byb3Au bV9iUmV2ZXJzZWQgPSBmYWxzZTsKCiAgICAgICAgQ1ZDTFBvaW50OjpWQ0xQb2ludFZlY3Rvckxp c3RfdHAgb05ld1NoYXBlUG9pbnRzTGlzdDsKCiAgICAgICAgb05ld1NoYXBlUG9pbnRzTGlzdCA9 IFZDTENvbmNhdENoYWlucyggb1NoYXBlUG9pbnRzTGlzdCwgYnJlYWtQb2ludHMgKTsKCiAgICAg ICAgQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkVmVjdG9yX3RwIG9TaGFwZUlkTGlzdCggb05ld1NoYXBl UG9pbnRzTGlzdC5zaXplKCkpOwoKCiAgICAgICAgQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkX3RwIHNo YXBlSWQ7CgogICAgICAgIHsKICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg PCBvTmV3U2hhcGVQb2ludHNMaXN0LnNpemUoKTsgaSsrKQogICAgICAgICAgICB7CiAgICAgICAg ICAgICAgICBzaGFwZUlkID0gR2V0QVNoaWQoKTsKICAgICAgICAgICAgICAgICggKm1fc2hhcGVU YWJsZSApWyBzaGFwZUlkIF0gPSBuZXcoInZlY2NsZWFuLmNwcCIsMTg0MikgQ1ZDTFNoYXBlKCBv TmV3U2hhcGVQb2ludHNMaXN0WyBpIF0sIG9Qcm9wLCBzaGFwZUlkICk7CiAgICAgICAgICAgICAg ICBvU2hhcGVJZExpc3RbIGkgXSA9IHNoYXBlSWQ7CiAgICAgICAgICAgIH0KICAgICAgICB9Cgog ICAgICAgIHJldHVybiBvU2hhcGVJZExpc3Q7Cgp9CiMgMTg3MSAidmVjY2xlYW4uY3BwIgpDVkNM U2hhcGU6OlZDTFNoYXBlSWRfdHAgQ1ZDTFNoYXBlRmFjdG9yeTo6TWFrZU1vbm90b25pY1NoYXBl KCBjb25zdCBDVkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yX3RwICZvUG9pbnRzLCBjb25zdCBDVkNM U2hhcGVQcm9wcyAmb1Byb3BlcnRpZXMgKQp7CgogICAgICAgIChJTVBDaGVja0V4cHIoIjo6VkNM SXNNb25vdG9uaWMoIG9Qb2ludHMgKSIsICJ2ZWNjbGVhbi5jcHAiLCAxODc0KSwgKDo6VkNMSXNN b25vdG9uaWMoIG9Qb2ludHMgKSkgPyAoMCkgOiBfSU1QQXNzZXJ0KCI6OlZDTElzTW9ub3Rvbmlj KCBvUG9pbnRzICkiLCJ2ZWNjbGVhbi5jcHAiLDE4NzQpKTsKCiAgICAgICAgT3JpZW50YXRpb25f dHAgb3JpZW50YXRpb24gPSBWQ0xHZXRPcmllbnRhdGlvbiggb1BvaW50c1sgMCBdLCBvUG9pbnRz WyAxIF0gKTsKCiAgICAgICAgQ1ZDTFNoYXBlUHJvcHMgb05ld1Byb3BlcnRpZXMgPSBvUHJvcGVy dGllczsKCiAgICAgICAgQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkX3RwIHNoYXBlSWQgPSBHZXRBU2hp ZCgpOwoKICAgICAgICBzd2l0Y2ggKG9yaWVudGF0aW9uKQogICAgICAgIHsKICAgICAgICAgICAg Y2FzZSBlSW5jOgogICAgICAgICAgICBjYXNlIGVIb3JpekluYzoKICAgICAgICAgICAgICAgIHsK ICAgICAgICAgICAgICAgICAgICBvTmV3UHJvcGVydGllcy5tX2JSZXZlcnNlZCA9IGZhbHNlOwog ICAgICAgICAgICAgICAgICAgICggKm1fc2hhcGVUYWJsZSApWyBzaGFwZUlkIF0gPSBuZXcoInZl Y2NsZWFuLmNwcCIsMTg4OCkgQ1ZDTFNoYXBlKCBvUG9pbnRzLCBvTmV3UHJvcGVydGllcywgc2hh cGVJZCApOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAg ICAgICAgICBjYXNlIGVEZWM6CiAgICAgICAgICAgIGNhc2UgZUhvcml6RGVjOgogICAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgICAgIG9OZXdQcm9wZXJ0aWVzLm1fYlJldmVyc2VkID0g dHJ1ZTsKICAgICAgICAgICAgICAgICAgICBDVkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yX3RwIG9S ZXZlcnNlZFBvaW50cyA9IG9Qb2ludHM7CiAgICAgICAgICAgICAgICAgICAgcmV2ZXJzZSggb1Jl dmVyc2VkUG9pbnRzLmJlZ2luKCksIG9SZXZlcnNlZFBvaW50cy5lbmQoKSk7CiAgICAgICAgICAg ICAgICAgICAgKCAqbV9zaGFwZVRhYmxlIClbIHNoYXBlSWQgXSA9IG5ldygidmVjY2xlYW4uY3Bw IiwxODk3KSBDVkNMU2hhcGUoIG9SZXZlcnNlZFBvaW50cywgb05ld1Byb3BlcnRpZXMsIHNoYXBl SWQgKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KCiAgICAg ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAoSU1QQ2hlY2tFeHByKCJmYWxzZSIsICJ2 ZWNjbGVhbi5jcHAiLCAxOTAyKSwgKGZhbHNlKSA/ICgwKSA6IF9JTVBBc3NlcnQoImZhbHNlIiwi dmVjY2xlYW4uY3BwIiwxOTAyKSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9Cgog ICAgICAgIHJldHVybiBzaGFwZUlkOwp9CiMgMTkzMSAidmVjY2xlYW4uY3BwIgpDVkNMU2hhcGU6 OlZDTFNoYXBlSWRWZWN0b3JfdHAgQ1ZDTFNoYXBlRmFjdG9yeTo6TWFrZU1vbm90b25pY1NoYXBl cyggR0RCU2hhcGVJZCBoR0RCU2hhcGVJZCwgR0RCTGF5ZXIgaEdEQkxheWVyLCBjb25zdCBDVkNM U2hhcGVQcm9wcyAmb1Byb3BlcnRpZXMgKQp7CgogICAgICAgIHZlY3RvcjxHREJTaGFwZSAqID4g b0dEQlNoYXBlczsKCiAgICAgICAgaWYgKEdEQkdldEZpZWxkSW5kZXgoIGhHREJMYXllciwgIlJp bmdTdGFydCIgKSAhPSAtMSkKICAgICAgICB7CiAgICAgICAgICAgIEdEQlNoYXBlICpwc1NyY1No YXBlID0gR0RCR2V0U2hhcGUoIGhHREJMYXllciwgaEdEQlNoYXBlSWQgKTsKICAgICAgICAgICAg aW50IG5SaW5ncyA9IEdEQkdldFJpbmdDb3VudCggaEdEQkxheWVyLCBwc1NyY1NoYXBlLCBfX251 bGwgKTsKICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBuUmluZ3M7IGkr KykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgb0dEQlNoYXBlcy5wdXNoX2JhY2soIEdE QkdldFJpbmcoIGhHREJMYXllciwgcHNTcmNTaGFwZSwgaSwgX19udWxsICkpOwogICAgICAgICAg ICB9CgogICAgICAgICAgICBHREJTaGFwZUZyZWUoIGhHREJMYXllciwgcHNTcmNTaGFwZSApOwog ICAgICAgIH0KCiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgb0dEQlNoYXBlcy5w dXNoX2JhY2soIEdEQkdldFNoYXBlKCBoR0RCTGF5ZXIsIGhHREJTaGFwZUlkICkpOwogICAgICAg IH0KCgogICAgICAgIENWQ0xTaGFwZVByb3BzIG9UZW1wUHJvcHMgPSBvUHJvcGVydGllczsKICAg ICAgICBvVGVtcFByb3BzLm1faEdEQkxheWVySW4gPSBoR0RCTGF5ZXI7CiAgICAgICAgb1RlbXBQ cm9wcy5tX2hHREJTaGFwZUlkID0gaEdEQlNoYXBlSWQ7CgoKICAgICAgICBDVkNMU2hhcGU6OlZD TFNoYXBlSWRWZWN0b3JfdHAgc2hhcGVJZHM7CgogICAgICAgIGZvciAodW5zaWduZWQgaW50IGkg PSAwOyBpIDwgb0dEQlNoYXBlcy5zaXplKCk7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIChJ TVBDaGVja0V4cHIoIm9HREJTaGFwZXNbIGkgXSAhPSBOVUxMIiwgInZlY2NsZWFuLmNwcCIsIDE5 NjMpLCAob0dEQlNoYXBlc1sgaSBdICE9IF9fbnVsbCkgPyAoMCkgOiBfSU1QQXNzZXJ0KCJvR0RC U2hhcGVzWyBpIF0gIT0gTlVMTCIsInZlY2NsZWFuLmNwcCIsMTk2MykpOwoKICAgICAgICAgICAg VkNMVW5pcXVlVmVydGV4KCBvR0RCU2hhcGVzWyBpIF0tPnBhc1ZlcnRpY2VzLCBvR0RCU2hhcGVz WyBpIF0tPm5Db3VudCApOwoKICAgICAgICAgICAgaWYgKG9HREJTaGFwZXNbIGkgXS0+bkNvdW50 ID4gMSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ1ZDTFBvaW50OjpWQ0xQb2ludFZl Y3Rvckxpc3RfdHAgb1NoYXBlczsKICAgICAgICAgICAgICAgIFZDTEJyZWFrTW9ub3RvbmljKCBv U2hhcGVzLCBvR0RCU2hhcGVzWyBpIF0tPnBhc1ZlcnRpY2VzLCBvR0RCU2hhcGVzWyBpIF0tPm5D b3VudCApOwoKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBuU2l6ZSA9IG9TaGFwZXMuc2l6 ZSgpOwogICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5TaXplOyBpKysp CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgc2hhcGVJZHMucHVzaF9iYWNr KCBNYWtlTW9ub3RvbmljU2hhcGUoIG9TaGFwZXNbIGkgXSwgb1RlbXBQcm9wcyApKTsKICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgR0RCU2hhcGVGcmVlKCBoR0RC TGF5ZXIsIG9HREJTaGFwZXNbIGkgXSApOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHNoYXBl SWRzOwp9CiMgMjAwNCAidmVjY2xlYW4uY3BwIgp2b2lkIENWQ0xTaGFwZUZhY3Rvcnk6OkdldEFT aGFwZSggQ1ZDTFNoYXBlICogJnNoYXBlLCBDVkNMU2hhcGU6OlZDTFNoYXBlSWRfdHAgblNoYXBl ICkKewogICAgICAgIChJTVBDaGVja0V4cHIoIiggblNoYXBlID49IDAgKSAmJiAoIG5TaGFwZSA8 ICggKm1fc2hhcGVUYWJsZSApLnNpemUoKSkiLCAidmVjY2xlYW4uY3BwIiwgMjAwNiksICgoIG5T aGFwZSA+PSAwICkgJiYgKCBuU2hhcGUgPCAoICptX3NoYXBlVGFibGUgKS5zaXplKCkpKSA/ICgw KSA6IF9JTVBBc3NlcnQoIiggblNoYXBlID49IDAgKSAmJiAoIG5TaGFwZSA8ICggKm1fc2hhcGVU YWJsZSApLnNpemUoKSkiLCJ2ZWNjbGVhbi5jcHAiLDIwMDYpKTsKCiAgICAgICAgc2hhcGUgPSAo ICptX3NoYXBlVGFibGUgKVsgblNoYXBlIF07Cn0KIyAyMDMxICJ2ZWNjbGVhbi5jcHAiCnZvaWQg Q1ZDTFNoYXBlRmFjdG9yeTo6Uk1BKCBDVkNMU2hhcGU6OlZDTFNoYXBlSWRfdHAgblNoYXBlICkK ewogICAgICAgIChJTVBDaGVja0V4cHIoIiggblNoYXBlID49IDAgKSAmJiAoIG5TaGFwZSA8ICgg Km1fc2hhcGVUYWJsZSApLnNpemUoKSkiLCAidmVjY2xlYW4uY3BwIiwgMjAzMyksICgoIG5TaGFw ZSA+PSAwICkgJiYgKCBuU2hhcGUgPCAoICptX3NoYXBlVGFibGUgKS5zaXplKCkpKSA/ICgwKSA6 IF9JTVBBc3NlcnQoIiggblNoYXBlID49IDAgKSAmJiAoIG5TaGFwZSA8ICggKm1fc2hhcGVUYWJs ZSApLnNpemUoKSkiLCJ2ZWNjbGVhbi5jcHAiLDIwMzMpKTsKICAgICAgICAoSU1QQ2hlY2tFeHBy KCIoICptX2F2YWlsU2hhcGVJZHMgKS5maW5kKCBuU2hhcGUgKSA9PSAoICptX2F2YWlsU2hhcGVJ ZHMgKS5lbmQoKSIsICJ2ZWNjbGVhbi5jcHAiLCAyMDM0KSwgKCggKm1fYXZhaWxTaGFwZUlkcyAp LmZpbmQoIG5TaGFwZSApID09ICggKm1fYXZhaWxTaGFwZUlkcyApLmVuZCgpKSA/ICgwKSA6IF9J TVBBc3NlcnQoIiggKm1fYXZhaWxTaGFwZUlkcyApLmZpbmQoIG5TaGFwZSApID09ICggKm1fYXZh aWxTaGFwZUlkcyApLmVuZCgpIiwidmVjY2xlYW4uY3BwIiwyMDM0KSk7CgoKCgogICAgICAgIERl bGV0ZVNldHVwKCJ2ZWNjbGVhbi5jcHAiLDIwMzkpLGRlbGV0ZSggKm1fc2hhcGVUYWJsZSApWyBu U2hhcGUgXTsKCgoKCiAgICAgICAgKCAqbV9zaGFwZVRhYmxlIClbIG5TaGFwZSBdID0gX19udWxs OwoKCgoKICAgICAgICAoICptX2F2YWlsU2hhcGVJZHMgKS5pbnNlcnQoIG5TaGFwZSApOwp9CiMg MjA2OSAidmVjY2xlYW4uY3BwIgp2b2lkIENWQ0xTaGFwZUZhY3Rvcnk6OlBvd2VyRG93bigpCnsK CgoKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8ICggKm1fc2hhcGVUYWJsZSApLnNpemUoKTsg aSsrKQogICAgICAgIHsKICAgICAgICAgICAgRGVsZXRlU2V0dXAoInZlY2NsZWFuLmNwcCIsMjA3 NiksZGVsZXRlKCAqbV9zaGFwZVRhYmxlIClbIGkgXTsKICAgICAgICB9CgogICAgICAgICggKm1f c2hhcGVUYWJsZSApLnJlc2l6ZSggMCApOwogICAgICAgICggKm1fYXZhaWxTaGFwZUlkcyApLmNs ZWFyKCk7CiAgICAgICAgbV9uU2hhcGVzID0gLTE7Cn0KCgoKQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlk X3RwIENWQ0xTaGFwZUZhY3Rvcnk6OkdldEFTaGlkKCkKewogICAgICAgIENWQ0xTaGFwZTo6VkNM U2hhcGVJZF90cCBzaGFwZUlkOwoKCgoKICAgICAgICBpZiAoKCAqbV9hdmFpbFNoYXBlSWRzICku YmVnaW4oKSA9PSAoICptX2F2YWlsU2hhcGVJZHMgKS5lbmQoKSkKICAgICAgICB7CiAgICAgICAg ICAgIHNoYXBlSWQgPSAoICptX3NoYXBlVGFibGUgKS5zaXplKCk7CiAgICAgICAgICAgICggKm1f c2hhcGVUYWJsZSApLnB1c2hfYmFjayggX19udWxsICk7CiAgICAgICAgICAgIG1fblNoYXBlcyA9 IHNoYXBlSWQ7CiAgICAgICAgfQoKCgoKCiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAg ICAgc2hhcGVJZCA9ICooKCAqbV9hdmFpbFNoYXBlSWRzICkuYmVnaW4oKSk7CiAgICAgICAgICAg ICggKm1fYXZhaWxTaGFwZUlkcyApLmVyYXNlKCggKm1fYXZhaWxTaGFwZUlkcyApLmJlZ2luKCkp OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHNoYXBlSWQ7Cn0KIyAyMTM3ICJ2ZWNjbGVhbi5j cHAiCkNWQ0xTd2VlcDo6Q1ZDTFN3ZWVwKCkKewoKfQoKQ1ZDTFN3ZWVwOjp+Q1ZDTFN3ZWVwKCkK ewoKfQojIDIxNjUgInZlY2NsZWFuLmNwcCIKdm9pZCBDVkNMU3dlZXA6OkFkZCggQ1ZDTFNoYXBl OjpWQ0xTaGFwZUlkVmVjdG9yX3RwIG9TaGFwZUlkcyApCnsKICAgICAgICBpZiAob1NoYXBlSWRz LnNpemUoKSA8PSAwKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAg ICAgICAgaW50IEwgPSAwOwogICAgICAgIGludCBVID0gbV9zd2VlcC5zaXplKCkgLTE7CiAgICAg ICAgaW50IE07CgogICAgICAgIENWQ0xTaGFwZSAqcG9TaGFwZTsKICAgICAgICBDVkNMU2hhcGVG YWN0b3J5OjpHZXRBU2hhcGUoIHBvU2hhcGUsIG9TaGFwZUlkc1sgMCBdICk7CiAgICAgICAgQ1ZD TFBvaW50IG9Qb2ludCA9IHBvU2hhcGUtPkdldEZpcnN0KCk7CgogICAgICAgIENWQ0xTaGFwZTo6 VkNMU2hhcGVJZFZlY3Rvcl90cDo6aXRlcmF0b3IgaXRlciA9IG1fc3dlZXAuYmVnaW4oKTsKCiAg ICAgICAgZm9yICg7OykKICAgICAgICB7CiAgICAgICAgICAgIGlmIChMID4gVSkKICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgaWYgKEwgPj0gbV9zd2VlcC5zaXplKCkpCiAgICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAgICAgY29weSggb1NoYXBlSWRzLmJlZ2luKCksIG9TaGFw ZUlkcy5lbmQoKSwgYmFja19pbnNlcnRlciggbV9zd2VlcCApKTsKICAgICAgICAgICAgICAgIH0K CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CgoKCgoKCgogICAgICAgICAg ICAgICAgICAgIG1fc3dlZXAuaW5zZXJ0KCBpdGVyK0wsIG9TaGFwZUlkcy5iZWdpbigpLCBvU2hh cGVJZHMuZW5kKCkpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGJyZWFrOwog ICAgICAgICAgICB9CgogICAgICAgICAgICBNID0gKCBMICsgVSApIC8gMjsKCiAgICAgICAgICAg IENWQ0xTaGFwZSAqcG9TaGFwZTsKICAgICAgICAgICAgQ1ZDTFNoYXBlRmFjdG9yeTo6R2V0QVNo YXBlKCBwb1NoYXBlLCBtX3N3ZWVwWyBNIF0gKTsKICAgICAgICAgICAgZG91YmxlIGRmWCA9IHBv U2hhcGUtPkNvbXB1dGVYKCBvUG9pbnQueSApOwoKICAgICAgICAgICAgaWYgKGRmWCA9PSBvUG9p bnQueCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgKElNUENoZWNrRXhwcigiZmFsc2Ui LCAidmVjY2xlYW4uY3BwIiwgMjIxNCksIChmYWxzZSkgPyAoMCkgOiBfSU1QQXNzZXJ0KCJmYWxz ZSIsInZlY2NsZWFuLmNwcCIsMjIxNCkpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBlbHNl IGlmIChkZlggPCBvUG9pbnQueCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTCA9IE0g KyAxOwogICAgICAgICAgICB9CgogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgIFUgPSBNIC0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KfQojIDIyNDYgInZl Y2NsZWFuLmNwcCIKdm9pZCBDVkNMU3dlZXA6OlJlbW92ZSggQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlk X3RwIG5TaGFwZUlkICkKewoKICAgICAgICBDVkNMU2hhcGU6OlZDTFNoYXBlSWRWZWN0b3JfdHA6 Oml0ZXJhdG9yIGl0OwoKICAgICAgICBpdCA9IHJlbW92ZSggbV9zd2VlcC5iZWdpbigpLCBtX3N3 ZWVwLmVuZCgpLCBuU2hhcGVJZCApOwogICAgICAgIG1fc3dlZXAucmVzaXplKCBpdCAtIG1fc3dl ZXAuYmVnaW4oKSk7Cn0KIyAyMjc1ICJ2ZWNjbGVhbi5jcHAiCnZvaWQgQ1ZDTFN3ZWVwOjpGaW5k TmVpZ2hib3VycyggQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkX3RwICZvTGVmdCwgQ1ZDTFNoYXBlOjpW Q0xTaGFwZUlkX3RwICZvUmlnaHQsIGNvbnN0IENWQ0xQb2ludCAmb1BvaW50ICkKewogICAgICAg IG9MZWZ0ID0gVkNMTlVMTFNoYXBlSWQ7CiAgICAgICAgb1JpZ2h0ID0gVkNMTlVMTFNoYXBlSWQ7 CgogICAgICAgIGludCBMID0gMDsKICAgICAgICBpbnQgVSA9IG1fc3dlZXAuc2l6ZSgpIC0gMTsK ICAgICAgICBpbnQgTTsKCiAgICAgICAgZm9yICg7OykKICAgICAgICB7CiAgICAgICAgICAgIGlm IChMID4gVSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKFUgPj0gMCkKICAgICAg ICAgICAgICAgICAgICBvTGVmdCA9IG1fc3dlZXBbIFUgXTsKCiAgICAgICAgICAgICAgICBpZiAo TCA8IG1fc3dlZXAuc2l6ZSgpKQogICAgICAgICAgICAgICAgICAgIG9SaWdodCA9IG1fc3dlZXBb IEwgXTsKCiAgICAgICAgICAgICAgICAoSU1QQ2hlY2tFeHByKCJMID09ICggVSArIDEgKSIsICJ2 ZWNjbGVhbi5jcHAiLCAyMjk0KSwgKEwgPT0gKCBVICsgMSApKSA/ICgwKSA6IF9JTVBBc3NlcnQo IkwgPT0gKCBVICsgMSApIiwidmVjY2xlYW4uY3BwIiwyMjk0KSk7CgogICAgICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIE0gPSAoIEwgKyBVICkgLyAyOwoKICAg ICAgICAgICAgQ1ZDTFNoYXBlICpwb1NoYXBlOwogICAgICAgICAgICBDVkNMU2hhcGVGYWN0b3J5 OjpHZXRBU2hhcGUoIHBvU2hhcGUsIG1fc3dlZXBbIE0gXSApOwogICAgICAgICAgICBkb3VibGUg ZGZYID0gcG9TaGFwZS0+Q29tcHV0ZVgoIG9Qb2ludC55ICk7CgogICAgICAgICAgICBpZiAoZGZY ID09IG9Qb2ludC54KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBMID0gVSA9IE07CiAg ICAgICAgICAgICAgICB3aGlsZSAoKCBVID49IDAgKSAmJiAoIGRmWCA9PSBvUG9pbnQueCApKQog ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFUtLTsKICAgICAgICAgICAgICAg ICAgICBpZiAoVSA+PSAwKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg ICAgICAgQ1ZDTFNoYXBlRmFjdG9yeTo6R2V0QVNoYXBlKCBwb1NoYXBlLCBtX3N3ZWVwWyBVIF0g KTsKICAgICAgICAgICAgICAgICAgICAgICAgZGZYID0gcG9TaGFwZS0+Q29tcHV0ZVgoIG9Qb2lu dC55ICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAg ICAgICAgIFUrKzsKICAgICAgICAgICAgICAgIEwgPSBVIC0gMTsKCiAgICAgICAgICAgICAgICBp ZiAoTCA+PSAwKQogICAgICAgICAgICAgICAgICAgIG9MZWZ0ID0gbV9zd2VlcFsgTCBdOwoKICAg ICAgICAgICAgICAgIGlmIChVIDwgbV9zd2VlcC5zaXplKCkpCiAgICAgICAgICAgICAgICAgICAg b1JpZ2h0ID0gbV9zd2VlcFsgVSBdOwoKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg ICB9CgogICAgICAgICAgICBlbHNlIGlmIChkZlggPCBvUG9pbnQueCkKICAgICAgICAgICAgewog ICAgICAgICAgICAgICAgTCA9IE0gKyAxOwogICAgICAgICAgICB9CgogICAgICAgICAgICBlbHNl CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFUgPSBNIC0gMTsKICAgICAgICAgICAgfQoK CiAgICAgICAgfQp9CiMgMjM2MSAidmVjY2xlYW4uY3BwIgp2b2lkIENWQ0xTd2VlcDo6RmluZEFs bCggQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkVmVjdG9yX3RwICZvU2hhcGVzICkgY29uc3QKewogICAg ICAgIG9TaGFwZXMgPSBtX3N3ZWVwOwp9CiMgMjQ2NCAidmVjY2xlYW4uY3BwIgpzdGF0aWMgaW50 IG5leHROb2RlSWQgPSAwOwojIDI0NzggInZlY2NsZWFuLmNwcCIKQ1ZDTE5vZGU6OkNWQ0xOb2Rl KCkKewogICAgICAgIG1fbm9kZUlkID0gbmV4dE5vZGVJZCsrOwp9CiMgMjQ5OSAidmVjY2xlYW4u Y3BwIgpDVkNMTm9kZTo6Q1ZDTE5vZGUoIGNvbnN0IENWQ0xQb2ludCAmb1BvaW50ICkKewogICAg ICAgIG1fbm9kZUlkID0gbmV4dE5vZGVJZCsrOwogICAgICAgIG1fb1BvaW50ID0gb1BvaW50Owp9 CiMgMjUyMCAidmVjY2xlYW4uY3BwIgpDVkNMTm9kZTo6Q1ZDTE5vZGUoIGNvbnN0IENWQ0xOb2Rl ICZvTm9kZSApCnsKICAgICAgICBtX25vZGVJZCA9IG9Ob2RlLm1fbm9kZUlkOwogICAgICAgIG1f b1BvaW50ID0gb05vZGUubV9vUG9pbnQ7CiAgICAgICAgbV9vU2hhcGVzID0gb05vZGUubV9vU2hh cGVzOwp9CiMgMjU0MyAidmVjY2xlYW4uY3BwIgpDVkNMTm9kZSAmQ1ZDTE5vZGU6Om9wZXJhdG9y PSAoIGNvbnN0IENWQ0xOb2RlICZvTm9kZSApCnsKICAgICAgICBpZiAoJm9Ob2RlICE9IHRoaXMp CiAgICAgICAgewogICAgICAgICAgICBtX25vZGVJZCA9IG9Ob2RlLm1fbm9kZUlkOwogICAgICAg ICAgICBtX29Qb2ludCA9IG9Ob2RlLm1fb1BvaW50OwogICAgICAgICAgICBtX29TaGFwZXMgPSBv Tm9kZS5tX29TaGFwZXM7CiAgICAgICAgfQogICAgICAgIHJldHVybiAqdGhpczsKfQojIDI1Njcg InZlY2NsZWFuLmNwcCIKQ1ZDTE5vZGU6On5DVkNMTm9kZSgpCnsKfQojIDI1ODcgInZlY2NsZWFu LmNwcCIKVEJvb2wgQ1ZDTE5vZGU6OkFkZCggQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkX3RwIG5TaGFw ZUlkICkKewoKCgogICAgICAgIENWQ0xTaGFwZSAqcG9UYXJnZXQ7CiAgICAgICAgQ1ZDTFNoYXBl RmFjdG9yeTo6R2V0QVNoYXBlKCBwb1RhcmdldCwgblNoYXBlSWQgKTsKCiAgICAgICAgdW5zaWdu ZWQgaW50IG5TaXplID0gbV9vU2hhcGVzLnNpemUoKTsKICAgICAgICBmb3IgKHVuc2lnbmVkIGlu dCBpID0gMDsgaSA8IG5TaXplOyBpKyspCiAgICAgICAgewogICAgICAgICAgICBDVkNMU2hhcGUg KnBvU291cmNlOwogICAgICAgICAgICBDVkNMU2hhcGVGYWN0b3J5OjpHZXRBU2hhcGUoIHBvU291 cmNlLCBtX29TaGFwZXNbIGkgXSApOwogICAgICAgICAgICBpZiAoKnBvU291cmNlID09ICpwb1Rh cmdldCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg ICAgICB9CiAgICAgICAgfQoKCgoKICAgICAgICBtX29TaGFwZXMucHVzaF9iYWNrKCBuU2hhcGVJ ZCApOwoKICAgICAgICByZXR1cm4gdHJ1ZTsKfQojIDI2MzAgInZlY2NsZWFuLmNwcCIKdm9pZCBD VkNMTm9kZTo6UmVtb3ZlKCBDVkNMU2hhcGU6OlZDTFNoYXBlSWRfdHAgbklkICkKewogICAgICAg IENWQ0xTaGFwZTo6VkNMU2hhcGVJZFZlY3Rvcl90cDo6aXRlcmF0b3IgaXQgPSByZW1vdmUoIG1f b1NoYXBlcy5iZWdpbigpLCBtX29TaGFwZXMuZW5kKCksIG5JZCApOwogICAgICAgIG1fb1NoYXBl cy5yZXNpemUoIGl0IC0gbV9vU2hhcGVzLmJlZ2luKCkpOwp9CiMgMjY1MSAidmVjY2xlYW4uY3Bw IgpUQm9vbCBDVkNMTm9kZTo6SXNEYW5nbGUoKSBjb25zdAp7CiAgICAgICAgcmV0dXJuIFNoYXBl Q291bnQoKSA9PSAxOwp9CiMgMjY3MCAidmVjY2xlYW4uY3BwIgpDVkNMU2hhcGU6OlZDTFNoYXBl SWRWZWN0b3JfdHAgQ1ZDTE5vZGU6OkdldFNoaWRzKCkgY29uc3QKewogICAgICAgIHJldHVybiBt X29TaGFwZXM7Cn0KIyAyNjg5ICJ2ZWNjbGVhbi5jcHAiCkNWQ0xTaGFwZTo6VkNMU2hhcGVJZFZl Y3Rvcl90cCBDVkNMTm9kZTo6R2V0RG93blNoaWRzKCkgY29uc3QKewogICAgICAgIENWQ0xTaGFw ZTo6VkNMU2hhcGVJZFZlY3Rvcl90cCBzaGFwZUlkczsKCiAgICAgICAgdW5zaWduZWQgaW50IG5T aXplID0gbV9vU2hhcGVzLnNpemUoKTsKICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg aSA8IG5TaXplOyBpKyspCiAgICAgICAgewogICAgICAgICAgICBDVkNMU2hhcGUgKnBvU2hhcGU7 CiAgICAgICAgICAgIENWQ0xTaGFwZUZhY3Rvcnk6OkdldEFTaGFwZSggcG9TaGFwZSwgbV9vU2hh cGVzWyBpIF0gKTsKICAgICAgICAgICAgaWYgKFZDTFBvaW50RXF1YWwoKSAoIHBvU2hhcGUtPkdl dExhc3QoKSwgbV9vUG9pbnQgKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc2hhcGVJ ZHMucHVzaF9iYWNrKCBtX29TaGFwZXNbIGkgXSApOwogICAgICAgICAgICB9CiAgICAgICAgfQoK ICAgICAgICByZXR1cm4gc2hhcGVJZHM7Cn0KIyAyNzIzICJ2ZWNjbGVhbi5jcHAiCkNWQ0xTaGFw ZTo6VkNMU2hhcGVJZFZlY3Rvcl90cCBDVkNMTm9kZTo6R2V0VXBTaGlkcygpIGNvbnN0CnsKICAg ICAgICBDVkNMU2hhcGU6OlZDTFNoYXBlSWRWZWN0b3JfdHAgc2hhcGVJZHM7CgogICAgICAgIHVu c2lnbmVkIGludCBuU2l6ZSA9IG1fb1NoYXBlcy5zaXplKCk7CiAgICAgICAgZm9yICh1bnNpZ25l ZCBpbnQgaSA9IDA7IGkgPCBuU2l6ZTsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgQ1ZDTFNo YXBlICpwb1NoYXBlOwogICAgICAgICAgICBDVkNMU2hhcGVGYWN0b3J5OjpHZXRBU2hhcGUoIHBv U2hhcGUsIG1fb1NoYXBlc1sgaSBdICk7CiAgICAgICAgICAgIGlmIChWQ0xQb2ludEVxdWFsKCkg KCBwb1NoYXBlLT5HZXRGaXJzdCgpLCBtX29Qb2ludCApKQogICAgICAgICAgICB7CiAgICAgICAg ICAgICAgICBzaGFwZUlkcy5wdXNoX2JhY2soIG1fb1NoYXBlc1sgaSBdICk7CiAgICAgICAgICAg IH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBzaGFwZUlkczsKfQojIDI3NTUgInZlY2NsZWFu LmNwcCIKaW50IENWQ0xOb2RlOjpTaGFwZUNvdW50KCkgY29uc3QKewogICAgICAgIHJldHVybiBt X29TaGFwZXMuc2l6ZSgpOwp9CiMgMjc3NiAidmVjY2xlYW4uY3BwIgp2b2lkIENWQ0xOb2RlOjpN b3ZlTm9kZSggY29uc3QgQ1ZDTFBvaW50ICZvRGVzdCApCnsKICAgICAgICAoSU1QQ2hlY2tFeHBy KCJmYWxzZSIsICJ2ZWNjbGVhbi5jcHAiLCAyNzc4KSwgKGZhbHNlKSA/ICgwKSA6IF9JTVBBc3Nl cnQoImZhbHNlIiwidmVjY2xlYW4uY3BwIiwyNzc4KSk7Cn0KIyAyNzk4ICJ2ZWNjbGVhbi5jcHAi ClRCb29sIENWQ0xOb2RlOjpvcGVyYXRvciA9PSAoIGNvbnN0IENWQ0xOb2RlICZvTm9kZSApCnsK ICAgICAgICByZXR1cm4gbV9ub2RlSWQgPT0gb05vZGUubV9ub2RlSWQ7Cn0KIyAyODE3ICJ2ZWNj bGVhbi5jcHAiCkNWQ0xOb2RlOjpWQ0xOb2RlSWRfdHAgQ1ZDTE5vZGU6OkdldElkKCkgY29uc3QK ewogICAgICAgIHJldHVybiBtX25vZGVJZDsKfQojIDI4MzcgInZlY2NsZWFuLmNwcCIKdm9pZCBD VkNMTm9kZTo6UG93ZXJEb3duKCkKewogICAgICAgIG5leHROb2RlSWQgPSAwOwp9CgoKQ1ZDTFBv aW50IENWQ0xOb2RlOjpHZXRQb2ludCgpIGNvbnN0CnsKICAgICAgICByZXR1cm4gbV9vUG9pbnQ7 Cn0KIyAyODk3ICJ2ZWNjbGVhbi5jcHAiCkNWQ0xOb2RlVGFibGU6OkNWQ0xOb2RlVGFibGUoKQp7 CiAgICAgICAgbV9uQ291bnQgPSAwOwp9CiMgMjkxNSAidmVjY2xlYW4uY3BwIgpDVkNMTm9kZVRh YmxlOjp+Q1ZDTE5vZGVUYWJsZSgpCnsKICAgICAgICBmb3IgKE5vZGVUYWJsZV90cDo6aXRlcmF0 b3IgaSA9IG1fbm9kZVRhYmxlLmJlZ2luKCk7IGkgIT0gbV9ub2RlVGFibGUuZW5kKCk7IGkrKykK ICAgICAgICB7CiAgICAgICAgICAgIERlbGV0ZVNldHVwKCJ2ZWNjbGVhbi5jcHAiLDI5MTkpLGRl bGV0ZSggKmkgKS5zZWNvbmQ7CiAgICAgICAgfQp9CiMgMjkzOSAidmVjY2xlYW4uY3BwIgp2b2lk IENWQ0xOb2RlVGFibGU6OlN0cmVhbUluKCBHREJMYXllciBoTGF5ZXIsIGNvbnN0IENWQ0xTaGFw ZVByb3BzICZvUHJvcHMsIElNUFByb2dyZXNzRnVuYyBwZm5Qcm9ncmVzcywgdm9pZCAqcFByb2dy ZXNzQXJnICkKewogICAgICAgIEdEQlNoYXBlSWQgaFNoYXBlSWQ7CiAgICAgICAgZG91YmxlIG5T aGFwZXMgPSBHREJHZXROdW1TaGFwZXMoIGhMYXllciApOwogICAgICAgIGRvdWJsZSBuID0gMC4w OwoKICAgICAgICBpZiAocGZuUHJvZ3Jlc3MgPT0gX19udWxsKQogICAgICAgICAgICBwZm5Qcm9n cmVzcyA9IElNUER1bW15UHJvZ3Jlc3M7CgogICAgICAgIGZvciAoaFNoYXBlSWQgPSBHREJHZXRG aXJzdCggaExheWVyICk7CiAgICAgICAgIGhTaGFwZUlkICE9IC0xOwogICAgICAgICBoU2hhcGVJ ZCA9IEdEQkdldE5leHQoIGhMYXllciwgaFNoYXBlSWQgKSkKICAgICAgICB7CiAgICAgICAgICAg IGlmICghKCAqcGZuUHJvZ3Jlc3MgKSAoICsrbiAvIG5TaGFwZXMsICJSZWFkaW5nIHNoYXBlcyIs IHBQcm9ncmVzc0FyZyApKQogICAgICAgICAgICAgICAgSU1QRXJyb3IoIDMsIDEsICJVc2VyIGNh bmNlbGxlZCIgKTsKCiAgICAgICAgICAgIENWQ0xTaGFwZTo6VkNMU2hhcGVJZFZlY3Rvcl90cCBv U2hhcGVzID0gQ1ZDTFNoYXBlRmFjdG9yeTo6TWFrZU1vbm90b25pY1NoYXBlcyggaFNoYXBlSWQs IGhMYXllciwgb1Byb3BzICk7CiAgICAgICAgICAgIHVuc2lnbmVkIGludCBuU2l6ZSA9IG9TaGFw ZXMuc2l6ZSgpOwogICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG5TaXpl OyBpKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPkFkZCggb1NoYXBlc1sg aSBdICk7CiAgICAgICAgICAgIH0KICAgICAgICB9Cn0KIyAyOTc3ICJ2ZWNjbGVhbi5jcHAiCkNW Q0xOb2RlICpDVkNMTm9kZVRhYmxlOjpGaXJzdCgpIGNvbnN0CnsKICAgICAgICByZXR1cm4gKCpt X25vZGVUYWJsZS5iZWdpbigpKS5zZWNvbmQ7Cn0KCgpUQm9vbCBWQ0xOb2RlVGFibGVQb2ludExl c3MoIGNvbnN0IENWQ0xOb2RlVGFibGU6Ok5vZGVUYWJsZUVudHJ5X3RwICZvRmlyc3ROb2RlLCBj b25zdCBDVkNMTm9kZVRhYmxlOjpOb2RlVGFibGVFbnRyeV90cCAmb1NlY29uZE5vZGUgKQp7CiAg ICAgICAgaW50IHJlcyA9IFZDTERCTENvbXAoIG9GaXJzdE5vZGUuZmlyc3QueSwgb1NlY29uZE5v ZGUuZmlyc3QueSwgMTMgLSAxICk7CiAgICAgICAgaWYgKHJlcyA9PSAwKQogICAgICAgIHsKICAg ICAgICAgICAgcmVzID0gVkNMREJMQ29tcCggb0ZpcnN0Tm9kZS5maXJzdC54LCBvU2Vjb25kTm9k ZS5maXJzdC54LCAxMyAtIDEgKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlcyA8IDA7Cn07 CiMgMzAwOSAidmVjY2xlYW4uY3BwIgpDVkNMTm9kZSAqQ1ZDTE5vZGVUYWJsZTo6TmV4dCggY29u c3QgQ1ZDTE5vZGUgJm9DdXJyZW50ICkgY29uc3QKewogICAgICAgIENWQ0xQb2ludCBvUG9pbnQg PSBvQ3VycmVudC5tX29Qb2ludDsKICAgICAgICBOb2RlVGFibGVfdHA6OmNvbnN0X2l0ZXJhdG9y IE5vZGVpdDsKCiAgICAgICAgTm9kZWl0ID0gbV9ub2RlVGFibGUubG93ZXJfYm91bmQoIG9DdXJy ZW50Lm1fb1BvaW50ICk7CiAgICAgICAgKElNUENoZWNrRXhwcigiTm9kZWl0ICE9IG1fbm9kZVRh YmxlLmVuZCgpIiwgInZlY2NsZWFuLmNwcCIsIDMwMTUpLCAoTm9kZWl0ICE9IG1fbm9kZVRhYmxl LmVuZCgpKSA/ICgwKSA6IF9JTVBBc3NlcnQoIk5vZGVpdCAhPSBtX25vZGVUYWJsZS5lbmQoKSIs InZlY2NsZWFuLmNwcCIsMzAxNSkpOwogICAgICAgIHZlY3RvcjxOb2RlVGFibGVFbnRyeV90cD4g RXF1YWxOb2RlTGlzdDsKCiAgICAgICAgZG8KICAgICAgICB7CiAgICAgICAgICAgIG9Qb2ludCA9 IE5vZGVpdC0+Zmlyc3Q7CiAgICAgICAgICAgIEVxdWFsTm9kZUxpc3QucHVzaF9iYWNrKCggKk5v ZGVpdCApKTsKICAgICAgICAgICAgTm9kZWl0Kys7CiAgICAgICAgfSB3aGlsZSAoKCBOb2RlaXQg IT0gbV9ub2RlVGFibGUuZW5kKCkpICYmICggb1BvaW50ID09IE5vZGVpdC0+Zmlyc3QgKSk7Cgog ICAgICAgIHNvcnQoIEVxdWFsTm9kZUxpc3QuYmVnaW4oKSwgRXF1YWxOb2RlTGlzdC5lbmQoKSwg VkNMTm9kZVRhYmxlUG9pbnRMZXNzICk7CgogICAgICAgIHZlY3RvcjxOb2RlVGFibGVFbnRyeV90 cD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gRXF1YWxOb2RlTGlzdC5iZWdpbigpOwoKICAgICAgICB3 aGlsZSAoKCAqaXQgKS5zZWNvbmQtPkdldElkKCkgIT0gb0N1cnJlbnQuR2V0SWQoKSkKICAgICAg ICB7CiAgICAgICAgICAgIGl0Kys7CiAgICAgICAgfQoKICAgICAgICBpdCsrOwoKICAgICAgICB3 aGlsZSAoKCBpdCAhPSBFcXVhbE5vZGVMaXN0LmVuZCgpKSAmJiAoKCAqaXQgKS5zZWNvbmQtPlNo YXBlQ291bnQoKSA8PSAwICkpCiAgICAgICAgewogICAgICAgICAgICBpdCsrOwogICAgICAgIH0K CgogICAgICAgIGlmIChpdCA9PSBFcXVhbE5vZGVMaXN0LmVuZCgpKQogICAgICAgIHsKICAgICAg ICAgICAgaWYgKE5vZGVpdCA9PSBtX25vZGVUYWJsZS5lbmQoKSkKICAgICAgICAgICAgewogICAg ICAgICAgICAgICAgcmV0dXJuIF9fbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICBFcXVh bE5vZGVMaXN0LmNsZWFyKCk7CiAgICAgICAgICAgIE5vZGVpdCA9IG1fbm9kZVRhYmxlLmxvd2Vy X2JvdW5kKCBOb2RlaXQtPmZpcnN0ICk7CiAgICAgICAgICAgIChJTVBDaGVja0V4cHIoIk5vZGVp dCAhPSBtX25vZGVUYWJsZS5lbmQoKSIsICJ2ZWNjbGVhbi5jcHAiLCAzMDUwKSwgKE5vZGVpdCAh PSBtX25vZGVUYWJsZS5lbmQoKSkgPyAoMCkgOiBfSU1QQXNzZXJ0KCJOb2RlaXQgIT0gbV9ub2Rl VGFibGUuZW5kKCkiLCJ2ZWNjbGVhbi5jcHAiLDMwNTApKTsKCiAgICAgICAgICAgIGRvCiAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgIG9Qb2ludCA9IE5vZGVpdC0+Zmlyc3Q7CiAgICAgICAg ICAgICAgICBFcXVhbE5vZGVMaXN0LnB1c2hfYmFjaygoICpOb2RlaXQgKSk7CiAgICAgICAgICAg ICAgICBOb2RlaXQrKzsKICAgICAgICAgICAgfSB3aGlsZSAoKCBOb2RlaXQgIT0gbV9ub2RlVGFi bGUuZW5kKCkpICYmICggb1BvaW50ID09IE5vZGVpdC0+Zmlyc3QgKSk7CgogICAgICAgICAgICBz b3J0KCBFcXVhbE5vZGVMaXN0LmJlZ2luKCksIEVxdWFsTm9kZUxpc3QuZW5kKCksIFZDTE5vZGVU YWJsZVBvaW50TGVzcyApOwoKICAgICAgICAgICAgaXQgPSBFcXVhbE5vZGVMaXN0LmJlZ2luKCk7 CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gKCppdCkuc2Vjb25kOwp9CiMgMzA4MyAidmVjY2xl YW4uY3BwIgpDVkNMTm9kZSAqQ1ZDTE5vZGVUYWJsZTo6UHJldiggY29uc3QgQ1ZDTE5vZGUgJm9D dXJyZW50ICkgY29uc3QKewogICAgICAgIE5vZGVUYWJsZV90cDo6Y29uc3RfaXRlcmF0b3IgaXQ7 CgogICAgICAgIGl0ID0gbV9ub2RlVGFibGUuZmluZCggb0N1cnJlbnQubV9vUG9pbnQgKTsKCiAg ICAgICAgaWYgKGl0ID09IG1fbm9kZVRhYmxlLmJlZ2luKCkpCiAgICAgICAgICAgIHJldHVybiBf X251bGw7CgogICAgICAgIGl0LS07CgogICAgICAgIHdoaWxlICgoIGl0ICE9IG1fbm9kZVRhYmxl LmJlZ2luKCkpICYmICgoICppdCApLnNlY29uZC0+U2hhcGVDb3VudCgpIDw9IDAgKSkKICAgICAg ICB7CiAgICAgICAgICAgIGl0LS07CiAgICAgICAgfQoKICAgICAgICBpZiAoKCAqaXQgKS5zZWNv bmQtPlNoYXBlQ291bnQoKSA+IDApCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKCppdCku c2Vjb25kOwogICAgICAgIH0KCiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgcmV0 dXJuIF9fbnVsbDsKICAgICAgICB9Cn0KIyAzMTI2ICJ2ZWNjbGVhbi5jcHAiClRCb29sIENWQ0xO b2RlVGFibGU6OkFkZCggQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkX3RwIG5TaGFwZUlkICkKewogICAg ICAgIENWQ0xTaGFwZSAqcG9TaGFwZTsKICAgICAgICBDVkNMU2hhcGVGYWN0b3J5OjpHZXRBU2hh cGUoIHBvU2hhcGUsIG5TaGFwZUlkICk7CgogICAgICAgIChJTVBDaGVja0V4cHIoInBvU2hhcGUt PklzTW9ub3RvbmljKCkiLCAidmVjY2xlYW4uY3BwIiwgMzEzMSksIChwb1NoYXBlLT5Jc01vbm90 b25pYygpKSA/ICgwKSA6IF9JTVBBc3NlcnQoInBvU2hhcGUtPklzTW9ub3RvbmljKCkiLCJ2ZWNj bGVhbi5jcHAiLDMxMzEpKTsKCiAgICAgICAgQ1ZDTFBvaW50IG9GaXJzdFBvaW50ID0gcG9TaGFw ZS0+R2V0Rmlyc3QoKTsKICAgICAgICBDVkNMTm9kZSAqcG9GaXJzdE5vZGUgPSBGaW5kKCBvRmly c3RQb2ludCApOwoKICAgICAgICBDVkNMUG9pbnQgb0xhc3RQb2ludCA9IHBvU2hhcGUtPkdldExh c3QoKTsKICAgICAgICBDVkNMTm9kZSAqcG9MYXN0Tm9kZSA9IEZpbmQoIG9MYXN0UG9pbnQgKTsK CgogICAgICAgIGlmIChwb0ZpcnN0Tm9kZSA9PSBfX251bGwpCiAgICAgICAgewogICAgICAgICAg ICBwYWlyPE5vZGVUYWJsZV90cDo6aXRlcmF0b3IsIFRCb29sPiBwID0gbV9ub2RlVGFibGUuaW5z ZXJ0KCBOb2RlVGFibGVfdHA6OnZhbHVlX3R5cGUoIG9GaXJzdFBvaW50LCBuZXcoInZlY2NsZWFu LmNwcCIsMzE0MikgQ1ZDTE5vZGUoIG9GaXJzdFBvaW50ICkpKTsKICAgICAgICAgICAgcG9GaXJz dE5vZGUgPSAoICooIHAuZmlyc3QgKSkuc2Vjb25kOwogICAgICAgICAgICBtX25Db3VudCsrOwog ICAgICAgIH0KCiAgICAgICAgVEJvb2wgYkFkZGVkID0gcG9GaXJzdE5vZGUtPkFkZCggblNoYXBl SWQgKTsKCiAgICAgICAgaWYgKGJBZGRlZCkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChwb0xh c3ROb2RlID09IF9fbnVsbCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcGFpcjxOb2Rl VGFibGVfdHA6Oml0ZXJhdG9yLCBUQm9vbD4gcCA9IG1fbm9kZVRhYmxlLmluc2VydCggTm9kZVRh YmxlX3RwOjp2YWx1ZV90eXBlKCBvTGFzdFBvaW50LCBuZXcoInZlY2NsZWFuLmNwcCIsMzE1Mykg Q1ZDTE5vZGUoIG9MYXN0UG9pbnQgKSkpOwogICAgICAgICAgICAgICAgcG9MYXN0Tm9kZSA9ICgg KiggcC5maXJzdCApKS5zZWNvbmQ7CiAgICAgICAgICAgICAgICBtX25Db3VudCsrOwogICAgICAg ICAgICB9CiAgICAgICAgICAgIGJBZGRlZCA9IHBvTGFzdE5vZGUtPkFkZCggblNoYXBlSWQgKTsK ICAgICAgICAgICAgKElNUENoZWNrRXhwcigiYkFkZGVkIiwgInZlY2NsZWFuLmNwcCIsIDMxNTgp LCAoYkFkZGVkKSA/ICgwKSA6IF9JTVBBc3NlcnQoImJBZGRlZCIsInZlY2NsZWFuLmNwcCIsMzE1 OCkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYkFkZGVkOwp9CiMgMzE4MCAidmVjY2xlYW4u Y3BwIgp2b2lkIENWQ0xOb2RlVGFibGU6OlJlbW92ZSggQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkX3Rw IG5TaGFwZUlkICkKewogICAgICAgIENWQ0xTaGFwZSAqcG9TaGFwZTsKICAgICAgICBDVkNMU2hh cGVGYWN0b3J5OjpHZXRBU2hhcGUoIHBvU2hhcGUsIG5TaGFwZUlkICk7CgogICAgICAgIENWQ0xQ b2ludCBvRmlyc3RQb2ludCA9IHBvU2hhcGUtPkdldEZpcnN0KCk7CiAgICAgICAgQ1ZDTE5vZGUg KnBvRmlyc3ROb2RlID0gRmluZCggb0ZpcnN0UG9pbnQgKTsKICAgICAgICAoSU1QQ2hlY2tFeHBy KCJwb0ZpcnN0Tm9kZSAhPSBOVUxMIiwgInZlY2NsZWFuLmNwcCIsIDMxODcpLCAocG9GaXJzdE5v ZGUgIT0gX19udWxsKSA/ICgwKSA6IF9JTVBBc3NlcnQoInBvRmlyc3ROb2RlICE9IE5VTEwiLCJ2 ZWNjbGVhbi5jcHAiLDMxODcpKTsKICAgICAgICBwb0ZpcnN0Tm9kZS0+UmVtb3ZlKCBuU2hhcGVJ ZCApOwoKICAgICAgICBDVkNMUG9pbnQgb0xhc3RQb2ludCA9IHBvU2hhcGUtPkdldExhc3QoKTsK ICAgICAgICBDVkNMTm9kZSAqcG9TZWNvbmROb2RlID0gRmluZCggb0xhc3RQb2ludCApOwogICAg ICAgIChJTVBDaGVja0V4cHIoInBvU2Vjb25kTm9kZSAhPSBOVUxMIiwgInZlY2NsZWFuLmNwcCIs IDMxOTIpLCAocG9TZWNvbmROb2RlICE9IF9fbnVsbCkgPyAoMCkgOiBfSU1QQXNzZXJ0KCJwb1Nl Y29uZE5vZGUgIT0gTlVMTCIsInZlY2NsZWFuLmNwcCIsMzE5MikpOwogICAgICAgIHBvU2Vjb25k Tm9kZS0+UmVtb3ZlKCBuU2hhcGVJZCApOwp9CiMgMzIxMyAidmVjY2xlYW4uY3BwIgpDVkNMTm9k ZSAqQ1ZDTE5vZGVUYWJsZTo6RmluZCggY29uc3QgQ1ZDTFBvaW50ICZvUG9pbnQgKSBjb25zdAp7 CiAgICAgICAgTm9kZVRhYmxlX3RwOjpjb25zdF9pdGVyYXRvciBpdDsKCiAgICAgICAgaXQgPSBt X25vZGVUYWJsZS5maW5kKCBvUG9pbnQgKTsKCiAgICAgICAgaWYgKGl0ID09IG1fbm9kZVRhYmxl LmVuZCgpKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIF9fbnVsbDsKICAgICAgICB9Cgog ICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAoKml0KS5zZWNvbmQ7CiAg ICAgICAgfQp9CgoKdm9pZCBDVkNMTm9kZVRhYmxlOjpNZXJnZU5vZGVzKCBjb25zdCBDVkNMUG9p bnQgJm9EZXN0LCBDVkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yX3RwIG9TcmMgKQp7CgoKCiAgICAg ICAgKElNUENoZWNrRXhwcigiZmFsc2UiLCAidmVjY2xlYW4uY3BwIiwgMzIzNiksIChmYWxzZSkg PyAoMCkgOiBfSU1QQXNzZXJ0KCJmYWxzZSIsInZlY2NsZWFuLmNwcCIsMzIzNikpOwp9CiMgMzI1 NSAidmVjY2xlYW4uY3BwIgp2b2lkIENWQ0xOb2RlVGFibGU6OlN0cmVhbU91dCgpCnsKICAgICAg ICBmb3IgKENWQ0xOb2RlICogcG9Ob2RlID0gdGhpcy0+Rmlyc3QoKTsgcG9Ob2RlICE9IF9fbnVs bDsgcG9Ob2RlID0gdGhpcy0+TmV4dCggKnBvTm9kZSApKQogICAgICAgIHsKICAgICAgICAgICAg Q1ZDTFNoYXBlOjpWQ0xTaGFwZUlkVmVjdG9yX3RwIG9TaGFwZXNJZHMgPSBwb05vZGUtPkdldFVw U2hpZHMoKTsKCiAgICAgICAgICAgIHVuc2lnbmVkIGludCBuU2l6ZSA9IG9TaGFwZXNJZHMuc2l6 ZSgpOwogICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG5TaXplOyBpKysp CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENWQ0xTaGFwZSAqcG9TaGFwZTsKICAgICAg ICAgICAgICAgIENWQ0xTaGFwZUZhY3Rvcnk6OkdldEFTaGFwZSggcG9TaGFwZSwgb1NoYXBlc0lk c1sgaSBdICk7CiAgICAgICAgICAgICAgICBwb1NoYXBlLT5Xcml0ZSgpOwogICAgICAgICAgICB9 CiAgICAgICAgfQp9CiMgMzQxMCAidmVjY2xlYW4uY3BwIgpPcmllbnRhdGlvbl90cCBWQ0xHZXRP cmllbnRhdGlvbiggY29uc3QgQ1ZDTFBvaW50ICZ2MSwgY29uc3QgQ1ZDTFBvaW50ICZ2MiApCnsK ICAgICAgICBpZiAoVkNMREJMQ29tcCggdjEueSwgdjIueSApID09IC0xKQogICAgICAgIHsKICAg ICAgICAgICAgcmV0dXJuIGVJbmM7CiAgICAgICAgfQoKICAgICAgICBlbHNlIGlmIChWQ0xEQkxD b21wKCB2MS55LCB2Mi55ICkgPT0gMSkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBlRGVj OwogICAgICAgIH0KCiAgICAgICAgZWxzZQogICAgICAgIHsKCiAgICAgICAgICAgIGlmIChWQ0xE QkxDb21wKCB2MS54LCB2Mi54ICkgPT0gLTEpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg IHJldHVybiBlSG9yaXpJbmM7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGVsc2UKICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIGVIb3JpekRlYzsKICAgICAgICAgICAgfQog ICAgICAgIH0KfQojIDM0NTcgInZlY2NsZWFuLmNwcCIKdm9pZCBWQ0xCcmVha01vbm90b25pYygg Q1ZDTFBvaW50OjpWQ0xQb2ludFZlY3Rvckxpc3RfdHAgJm9TaGFwZXMsIGNvbnN0IENWQ0xQb2lu dDo6VkNMUG9pbnRWZWN0b3JfdHAgJm9TaGFwZUluICkKewogICAgICAgIENWQ0xQb2ludDo6VkNM UG9pbnRWZWN0b3JfdHAgb1NoYXBlOwogICAgICAgIE9yaWVudGF0aW9uX3RwIG9PcmllbnQ7CiAg ICAgICAgZG91YmxlIGRmRmlyc3RZOwoKICAgICAgICBvU2hhcGVzLmNsZWFyKCk7CgogICAgICAg IHVuc2lnbmVkIGludCBuU2l6ZSA9IG9TaGFwZUluLnNpemUoKTsKICAgICAgICBpZiAoblNpemUg Pj0gMikKICAgICAgICB7CiAgICAgICAgICAgIG9TaGFwZS5wdXNoX2JhY2soIG9TaGFwZUluWyAw IF0gKTsKICAgICAgICAgICAgb1NoYXBlLnB1c2hfYmFjayggb1NoYXBlSW5bIDEgXSApOwogICAg ICAgICAgICBvT3JpZW50ID0gVkNMR2V0T3JpZW50YXRpb24oIG9TaGFwZUluWyAwIF0sIG9TaGFw ZUluWyAxIF0gKTsKICAgICAgICAgICAgZGZGaXJzdFkgPSBvU2hhcGVJblsgMCBdLnk7CgogICAg ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMjsgaSA8IG5TaXplOyBpKyspCiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgIGlmICgoKCBvT3JpZW50ICE9IFZDTEdldE9yaWVudGF0aW9u KCBvU2hhcGVJblsgaSAtIDEgXSwgb1NoYXBlSW5bIGkgXSApKSB8fAogICAgICAgICAgICAgICAg ICAgICgoKCBvT3JpZW50ID09IGVIb3JpekluYyApIHx8ICggb09yaWVudCA9PSBlSG9yaXpEZWMg KSkgJiYgKCBWQ0xEQkxDb21wKCBkZkZpcnN0WSwgb1NoYXBlSW5bIGkgXS55ICkgIT0gMCApKSkp CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgb1NoYXBlcy5wdXNoX2JhY2so IG9TaGFwZSApOwogICAgICAgICAgICAgICAgICAgIG9TaGFwZS5jbGVhcigpOwogICAgICAgICAg ICAgICAgICAgIG9TaGFwZS5wdXNoX2JhY2soIG9TaGFwZUluWyBpIC0gMSBdICk7CiAgICAgICAg ICAgICAgICAgICAgZGZGaXJzdFkgPSBvU2hhcGVJblsgaSAtIDEgXS55OwogICAgICAgICAgICAg ICAgICAgIG9PcmllbnQgPSBWQ0xHZXRPcmllbnRhdGlvbiggb1NoYXBlSW5bIGkgLSAxIF0sIG9T aGFwZUluWyBpIF0gKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBvU2hhcGUu cHVzaF9iYWNrKCBvU2hhcGVJblsgaSBdICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG9T aGFwZXMucHVzaF9iYWNrKCBvU2hhcGUgKTsKICAgICAgICB9Cn0KIyAzNTE0ICJ2ZWNjbGVhbi5j cHAiCnZvaWQgVkNMQnJlYWtNb25vdG9uaWMoIENWQ0xQb2ludDo6VkNMUG9pbnRWZWN0b3JMaXN0 X3RwICZvU2hhcGVzLCBHREJWZXJ0ZXggKnBhc1ZlcnRleCwgaW50IG5WZXJ0ZXggKQp7CiAgICAg ICAgQ1ZDTFBvaW50OjpWQ0xQb2ludFZlY3Rvcl90cCBvU2hhcGU7CiAgICAgICAgZm9yIChpbnQg aSA9IDA7IGkgPCBuVmVydGV4OyBpKyspCiAgICAgICAgewogICAgICAgICAgICBvU2hhcGUucHVz aF9iYWNrKCBwYXNWZXJ0ZXhbIGkgXSApOwogICAgICAgIH0KCiAgICAgICAgVkNMQnJlYWtNb25v dG9uaWMoIG9TaGFwZXMsIG9TaGFwZSApOwp9CgoKCgoKCnN0YXRpYyBUQm9vbCBYb3IoIFRCb29s IHgsIFRCb29sIHkgKQp7CiAgICAgICAgcmV0dXJuIFRCb29sKCAheCBeICF5ICk7Cn0KIyAzNTUy ICJ2ZWNjbGVhbi5jcHAiCmRvdWJsZSBWQ0xBcmVhMiggY29uc3QgQ1ZDTFBvaW50ICZzQSwgY29u c3QgQ1ZDTFBvaW50ICZzQiwgY29uc3QgQ1ZDTFBvaW50ICZzQyApCnsKICAgICAgICByZXR1cm4g c0EueCAqIHNCLnkgLSBzQS55ICogc0IueCArCiAgICAgICAgICAgIHNBLnkgKiBzQy54IC0gc0Eu eCAqIHNDLnkgKwogICAgICAgICAgICBzQi54ICogc0MueSAtIHNDLnggKiBzQi55Owp9Cgpkb3Vi bGUgVkNMQXJlYTIoIGNvbnN0IEdEQlZlcnRleCAmc0EsIGNvbnN0IEdEQlZlcnRleCAmc0IsIGNv bnN0IEdEQlZlcnRleCAmc0MgKQp7CiAgICAgICAgcmV0dXJuIHNBLnggKiBzQi55IC0gc0EueSAq IHNCLnggKwogICAgICAgICAgICBzQS55ICogc0MueCAtIHNBLnggKiBzQy55ICsKICAgICAgICAg ICAgc0IueCAqIHNDLnkgLSBzQy54ICogc0IueTsKfQojIDM1ODMgInZlY2NsZWFuLmNwcCIKVEJv b2wgVkNMSXNMZWZ0KCBjb25zdCBDVkNMUG9pbnQgJnNBLCBjb25zdCBDVkNMUG9pbnQgJnNCLCBj b25zdCBDVkNMUG9pbnQgJnNDICkKewoKICAgICAgICByZXR1cm4gVkNMQXJlYTIoIHNBLCBzQiwg c0MgKSA+IDAuMDsKfQoKVEJvb2wgVkNMSXNMZWZ0KCBjb25zdCBHREJWZXJ0ZXggJnNBLCBjb25z dCBHREJWZXJ0ZXggJnNCLCBjb25zdCBHREJWZXJ0ZXggJnNDICkKewoKICAgICAgICByZXR1cm4g VkNMQXJlYTIoIHNBLCBzQiwgc0MgKSA+IDAuMDsKfQojIDM2MTIgInZlY2NsZWFuLmNwcCIKVEJv b2wgVkNMSXNMZWZ0T24oIGNvbnN0IENWQ0xQb2ludCAmc0EsIGNvbnN0IENWQ0xQb2ludCAmc0Is IGNvbnN0IENWQ0xQb2ludCAmc0MsIGRvdWJsZSBkZlRvbCApCnsKICAgICAgICByZXR1cm4gVkNM SXNMZWZ0KCBzQSwgc0IsIHNDICkgfHwgVkNMSXNDb2xsaW5lYXIoIHNBLCBzQiwgc0MsIGRmVG9s ICk7Cn0KIyAzNjM1ICJ2ZWNjbGVhbi5jcHAiClRCb29sIFZDTElzQ29sbGluZWFyKCBjb25zdCBD VkNMUG9pbnQgJnNBLCBjb25zdCBDVkNMUG9pbnQgJnNCLCBjb25zdCBDVkNMUG9pbnQgJnNDLCBk b3VibGUgZGZUb2wgKQp7CiAgICAgICAgcmV0dXJuIChzQSA9PSBzQykgfHwgKCBzQiA9PSBzQyAp IHx8IGZhYnMoIFZDTEFyZWEyKCBzQSwgc0IsIHNDICkpIDw9IGZhYnMoIGRmVG9sICk7Cn0KIyAz NjY1ICJ2ZWNjbGVhbi5jcHAiClRCb29sIFZDTEludGVyc2VjdFByb3AoIGNvbnN0IENWQ0xQb2lu dCAmc0EsIGNvbnN0IENWQ0xQb2ludCAmc0IsCiAgICAgICAgICAgICBjb25zdCBDVkNMUG9pbnQg JnNDLCBjb25zdCBDVkNMUG9pbnQgJnNELCBkb3VibGUgZGZUb2wgKQp7CiAgICAgICAgaWYgKFZD TElzQ29sbGluZWFyKCBzQSwgc0IsIHNDLCBkZlRvbCApIHx8CiAgICAgICAgVkNMSXNDb2xsaW5l YXIoIHNBLCBzQiwgc0QsIGRmVG9sICkgfHwKICAgICAgICBWQ0xJc0NvbGxpbmVhciggc0MsIHNE LCBzQSwgZGZUb2wgKSB8fAogICAgICAgIFZDTElzQ29sbGluZWFyKCBzQywgc0QsIHNCLCBkZlRv bCApKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIHJldHVybiBYb3IoIFZDTElz TGVmdCggc0EsIHNCLCBzQyApLCBWQ0xJc0xlZnQoIHNBLCBzQiwgc0QgKSkgJiYKICAgICAgICAg ICAgWG9yKCBWQ0xJc0xlZnQoIHNDLCBzRCwgc0EgKSwgVkNMSXNMZWZ0KCBzQywgc0QsIHNCICkp Owp9CiMgMzY5NyAidmVjY2xlYW4uY3BwIgpUQm9vbCBWQ0xJbnRlcnNlY3Rpb24oIGNvbnN0IENW Q0xQb2ludCAmc0EsIGNvbnN0IENWQ0xQb2ludCAmc0IsIGNvbnN0IENWQ0xQb2ludCAmc0MsIGNv bnN0IENWQ0xQb2ludCAmc0QsIENWQ0xQb2ludCAmc1AsIGRvdWJsZSBkZlRvbCApCnsKICAgICAg ICBkb3VibGUgZGZTLCBkZlQ7CiAgICAgICAgZG91YmxlIGRmRGVub207CgogICAgICAgIGRmRGVu b20gPSBzQS54ICogKCBzRC55IC0gc0MueSApICsKICAgICAgICAgICAgc0IueCAqICggc0MueSAt IHNELnkgKSArCiAgICAgICAgICAgIHNELnggKiAoIHNCLnkgLSBzQS55ICkgKwogICAgICAgICAg ICBzQy54ICogKCBzQS55IC0gc0IueSApOwoKICAgICAgICAoSU1QQ2hlY2tFeHByKCJkZlRvbCA+ PSAwLjAiLCAidmVjY2xlYW4uY3BwIiwgMzcwNyksIChkZlRvbCA+PSAwLjApID8gKDApIDogX0lN UEFzc2VydCgiZGZUb2wgPj0gMC4wIiwidmVjY2xlYW4uY3BwIiwzNzA3KSk7CgoKCgogICAgICAg IGlmIChmYWJzKCBkZkRlbm9tICkgPD0gZGZUb2wpCiAgICAgICAgewogICAgICAgICAgICByZXR1 cm4gZmFsc2U7CiAgICAgICAgfQoKCgoKICAgICAgICBkZlMgPSAoIHNBLnggKiAoIHNELnkgLSBz Qy55ICkgKwogICAgICAgICAgICBzQy54ICogKCBzQS55IC0gc0QueSApICsKICAgICAgICAgICAg c0QueCAqICggc0MueSAtIHNBLnkgKSkgLyBkZkRlbm9tOwoKICAgICAgICBkZlQgPSAtKCBzQS54 ICogKCBzQy55IC0gc0IueSApICsKICAgICAgICAgICAgIHNCLnggKiAoIHNBLnkgLSBzQy55ICkg KwogICAgICAgICAgICAgc0MueCAqICggc0IueSAtIHNBLnkgKSkgLyBkZkRlbm9tOwoKICAgICAg ICBzUC54ID0gc0EueCArIGRmUyAqICggc0IueCAtIHNBLnggKTsKICAgICAgICBzUC55ID0gc0Eu eSArIGRmUyAqICggc0IueSAtIHNBLnkgKTsKICAgICAgICBzUC56ID0gMC4wOwoKICAgICAgICBp ZiAoKCAwLjAgPD0gZGZTICkgJiYgKCBkZlMgPD0gMS4wICkgJiYKICAgICAgICAoIDAuMCA8PSBk ZlQgKSAmJiAoIGRmVCA8PSAxLjAgKSkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiB0cnVl OwogICAgICAgIH0KCiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIGZh bHNlOwogICAgICAgIH0KfQojIDM3NjQgInZlY2NsZWFuLmNwcCIKVEJvb2wgVkNMRXVjbGlkaWFu RGlzdGFuY2UoIGNvbnN0IENWQ0xQb2ludCAmb0EsIGNvbnN0IENWQ0xQb2ludCAmb0IsIGNvbnN0 IENWQ0xQb2ludCAmb1AsIGRvdWJsZSAmZGZEaXN0LCBDVkNMUG9pbnQgJm9JICkKewoKCgogICAg ICAgIGRvdWJsZSBkZkEyLCBkZlMsIGRmVDsKICAgICAgICBDVkNMUG9pbnQgc0EsIHNCLCBzUCwg c0ksIHNROwoKICAgICAgICBzQSA9ICgob0EpIDwgKG9CKSA/IChvQSkgOiAob0IpKTsKICAgICAg ICBzQiA9ICgob0EpID4gKG9CKSA/IChvQSkgOiAob0IpKTsKICAgICAgICBzUCA9IG9QOwoKCgoK ICAgICAgICBkZlQgPSAoIHNQLnggLSBzQS54ICkgKiAoIHNCLnggLSBzQS54ICkgKwogICAgICAg ICAgICAoIHNQLnkgLSBzQS55ICkgKiAoIHNCLnkgLSBzQS55ICk7CgogICAgICAgIGlmIChkZlQg PCAwLjApCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCgoKCiAgICAgICAgZGZUID0gKCBzQi54 IC0gc1AueCApICogKCBzQi54IC0gc0EueCApICsKICAgICAgICAgICAgKCBzQi55IC0gc1AueSAp ICogKCBzQi55IC0gc0EueSApOwoKICAgICAgICBpZiAoZGZUIDwgMC4wKQogICAgICAgICAgICBy ZXR1cm4gZmFsc2U7CgoKCgogICAgICAgIGRmQTIgPSAoIHNQLnkgLSBzQS55ICkgKiAoIHNCLngg LSBzQS54ICkgLQogICAgICAgICAgICAoIHNQLnggLSBzQS54ICkgKiAoIHNCLnkgLSBzQS55ICk7 CgogICAgICAgIGRmRGlzdCA9IHNxcnQoKCBkZkEyICogZGZBMiApIC8gKCggc0IueCAtIHNBLngg KSAqICggc0IueCAtIHNBLnggKSArICggc0IueSAtIHNBLnkgKSAqICggc0IueSAtIHNBLnkgKSkp OwoKCgoKCiAgICAgICAgZGZTID0gc0IueCAtIHNBLng7CiAgICAgICAgZGZUID0gc0IueSAtIHNB Lnk7CgoKCgoKICAgICAgICBzUS54ID0gc1AueCAtIGRmVCAqIDEuMDsKICAgICAgICBzUS55ID0g c1AueSArIGRmUyAqIDEuMDsKIyAzODIzICJ2ZWNjbGVhbi5jcHAiCiAgICAgICAgVkNMSW50ZXJz ZWN0aW9uKCBzQSwgc0IsIG9QLCBzUSwgc0ksIDAuMCApOwogICAgICAgIG9JID0gc0k7CgogICAg ICAgIHJldHVybiB0cnVlOwp9CiMgMzg0OSAidmVjY2xlYW4uY3BwIgpDVkNMUG9pbnQgVkNMSW50 ZXJwb2xhdGVQb2ludCggQ1ZDTFBvaW50IHYxLCBDVkNMUG9pbnQgdjIsIGRvdWJsZSBkZlJhbmdl LCBkb3VibGUgZGZEaXN0ICkKewogICAgICAgIGlmIChkZlJhbmdlID09IDAuMCkKICAgICAgICB7 CiAgICAgICAgICAgIGRmUmFuZ2UgPSAyLjA7CiAgICAgICAgICAgIGRmRGlzdCA9IDEuMDsKICAg ICAgICB9CgogICAgICAgIHJldHVybiBDVkNMUG9pbnQoIHYxLnggKyAoIHYyLnggLSB2MS54ICkg KiBkZkRpc3QgLyBkZlJhbmdlLAogICAgICAgICAgICAgICAgICB2MS55ICsgKCB2Mi55IC0gdjEu eSApICogZGZEaXN0IC8gZGZSYW5nZSApOwp9CiMgMzg3OCAidmVjY2xlYW4uY3BwIgpDVkNMUmVj dCBWQ0xDb21wdXRlUmFuZ2VSZWN0KCBjb25zdCBDVkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yX3Rw ICZvU2hhcGUgKQp7CiAgICAgICAgZG91YmxlIGRmWE1pbiwgZGZYTWF4LCBkZllNaW4sIGRmWU1h eDsKCiAgICAgICAgZGZYTWluID0gMS43OTc2OTMxMzQ4NjIzMTU3RSszMDg7CiAgICAgICAgZGZZ TWluID0gMS43OTc2OTMxMzQ4NjIzMTU3RSszMDg7CiAgICAgICAgZGZYTWF4ID0gLTEuNzk3Njkz MTM0ODYyMzE1N0UrMzA4OwogICAgICAgIGRmWU1heCA9IC0xLjc5NzY5MzEzNDg2MjMxNTdFKzMw ODsKCiAgICAgICAgdW5zaWduZWQgaW50IG5TaXplID0gb1NoYXBlLnNpemUoKTsKICAgICAgICBm b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG5TaXplOyBpKyspCiAgICAgICAgewogICAgICAg ICAgICBkZlhNaW4gPSAoKG9TaGFwZVsgaSBdLngpIDwgKGRmWE1pbikgPyAob1NoYXBlWyBpIF0u eCkgOiAoZGZYTWluKSk7CiAgICAgICAgICAgIGRmWU1pbiA9ICgob1NoYXBlWyBpIF0ueSkgPCAo ZGZZTWluKSA/IChvU2hhcGVbIGkgXS55KSA6IChkZllNaW4pKTsKICAgICAgICAgICAgZGZYTWF4 ID0gKChvU2hhcGVbIGkgXS54KSA+IChkZlhNYXgpID8gKG9TaGFwZVsgaSBdLngpIDogKGRmWE1h eCkpOwogICAgICAgICAgICBkZllNYXggPSAoKG9TaGFwZVsgaSBdLnkpID4gKGRmWU1heCkgPyAo b1NoYXBlWyBpIF0ueSkgOiAoZGZZTWF4KSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gQ1ZD TFJlY3QoIGRmWE1pbiwgZGZZTWluLCBkZlhNYXgsIGRmWU1heCApOwp9CiMgMzkxOCAidmVjY2xl YW4uY3BwIgpkb3VibGUgVkNMQ29tcHV0ZUxlbmd0aCggY29uc3QgQ1ZDTFBvaW50OjpWQ0xQb2lu dFZlY3Rvcl90cCAmb1NoYXBlICkKewogICAgICAgIGRvdWJsZSBkZkxlbmd0aCA9IDAuMDsKCiAg ICAgICAgdW5zaWduZWQgaW50IG5TaXplID0gb1NoYXBlLnNpemUoKTsKICAgICAgICBmb3IgKHVu c2lnbmVkIGludCBpID0gMTsgaSA8IG5TaXplOyBpKyspCiAgICAgICAgewogICAgICAgICAgICBk Zkxlbmd0aCArPSAoc3FydCgoKG9TaGFwZVsgaSBdKS54IC0gKG9TaGFwZVsgaSAtIDEgXSkueCkg KiAoKG9TaGFwZVsgaSBdKS54IC0gKG9TaGFwZVsgaSAtIDEgXSkueCkgKyAoKG9TaGFwZVsgaSBd KS55IC0gKG9TaGFwZVsgaSAtIDEgXSkueSkgKiAoKG9TaGFwZVsgaSBdKS55IC0gKG9TaGFwZVsg aSAtIDEgXSkueSkpKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBkZkxlbmd0aDsKfQojIDM5 NDggInZlY2NsZWFuLmNwcCIKVEJvb2wgVkNMSXNNb25vdG9uaWMoIGNvbnN0IENWQ0xQb2ludDo6 VkNMUG9pbnRWZWN0b3JfdHAgJm9TaGFwZSApCnsKICAgICAgICB1bnNpZ25lZCBpbnQgblNpemUg PSBvU2hhcGUuc2l6ZSgpOwogICAgICAgIChJTVBDaGVja0V4cHIoIm5TaXplID49IDIiLCAidmVj Y2xlYW4uY3BwIiwgMzk1MSksIChuU2l6ZSA+PSAyKSA/ICgwKSA6IF9JTVBBc3NlcnQoIm5TaXpl ID49IDIiLCJ2ZWNjbGVhbi5jcHAiLDM5NTEpKTsKCiAgICAgICAgT3JpZW50YXRpb25fdHAgZU9y aWVudCA9IFZDTEdldE9yaWVudGF0aW9uKCBvU2hhcGVbIDAgXSwgb1NoYXBlWyAxIF0gKTsKCiAg ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDI7IGkgPCBuU2l6ZTsgaSsrKQogICAgICAgIHsK ICAgICAgICAgICAgaWYgKGVPcmllbnQgIT0gVkNMR2V0T3JpZW50YXRpb24oIG9TaGFwZVsgaSAt IDEgXSwgb1NoYXBlWyBpIF0gKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJu IGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKfQoj IDM5ODUgInZlY2NsZWFuLmNwcCIKVEJvb2wgVkNMSXNMZWZ0T2ZTaGFwZSggY29uc3QgQ1ZDTFBv aW50ICZ2LCBjb25zdCBDVkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yX3RwICZvU2hhcGUgKQp7CiAg ICAgICAgdW5zaWduZWQgaW50IG5TaXplID0gb1NoYXBlLnNpemUoKTsKICAgICAgICAoSU1QQ2hl Y2tFeHByKCJuU2l6ZSA+PSAyIiwgInZlY2NsZWFuLmNwcCIsIDM5ODgpLCAoblNpemUgPj0gMikg PyAoMCkgOiBfSU1QQXNzZXJ0KCJuU2l6ZSA+PSAyIiwidmVjY2xlYW4uY3BwIiwzOTg4KSk7Cgog ICAgICAgIChJTVBDaGVja0V4cHIoIklOX1JBTkdFKCB2LnksIG9TaGFwZVsgMCBdLnksIG9TaGFw ZVsgblNpemUgLSAxIF0ueSApIiwgInZlY2NsZWFuLmNwcCIsIDM5OTApLCAoKChWQ0xEQkxDb21w KChvU2hhcGVbIDAgXS55KSwgdi55KSA8PSAwKSAmJiAoVkNMREJMQ29tcCh2LnksIChvU2hhcGVb IG5TaXplIC0gMSBdLnkpKSA8PSAwKSkpID8gKDApIDogX0lNUEFzc2VydCgiSU5fUkFOR0UoIHYu eSwgb1NoYXBlWyAwIF0ueSwgb1NoYXBlWyBuU2l6ZSAtIDEgXS55ICkiLCJ2ZWNjbGVhbi5jcHAi LDM5OTApKTsKCiAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPCBuU2l6ZTsgaSsr KQogICAgICAgIHsKICAgICAgICAgICAgaWYgKCgoVkNMREJMQ29tcCgob1NoYXBlWyBpIC0gMSBd LnkpLCB2LnkpIDw9IDApICYmIChWQ0xEQkxDb21wKHYueSwgKG9TaGFwZVsgaSBdLnkpKSA8PSAw KSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBWQ0xJc0xlZnQoIG9TaGFw ZVsgaSAtIDEgXSwgb1NoYXBlWyBpIF0sIHYgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAg ICAgICAgKElNUENoZWNrRXhwcigiZmFsc2UiLCAidmVjY2xlYW4uY3BwIiwgNDAwMCksIChmYWxz ZSkgPyAoMCkgOiBfSU1QQXNzZXJ0KCJmYWxzZSIsInZlY2NsZWFuLmNwcCIsNDAwMCkpOwogICAg ICAgIHJldHVybiBmYWxzZTsKfQojIDQwMjEgInZlY2NsZWFuLmNwcCIKVEJvb2wgVkNMSXNMZWZ0 T25TaGFwZSggY29uc3QgQ1ZDTFBvaW50ICZ2LCBjb25zdCBDVkNMUG9pbnQ6OlZDTFBvaW50VmVj dG9yX3RwICZvU2hhcGUgKQp7CiAgICAgICAgdW5zaWduZWQgaW50IG5TaXplID0gb1NoYXBlLnNp emUoKTsKICAgICAgICAoSU1QQ2hlY2tFeHByKCJuU2l6ZSA+PSAyIiwgInZlY2NsZWFuLmNwcCIs IDQwMjQpLCAoblNpemUgPj0gMikgPyAoMCkgOiBfSU1QQXNzZXJ0KCJuU2l6ZSA+PSAyIiwidmVj Y2xlYW4uY3BwIiw0MDI0KSk7CgogICAgICAgIGRvdWJsZSBsb3cgPSBvU2hhcGVbIDAgXS55Owog ICAgICAgIGRvdWJsZSBoaWdoID0gb1NoYXBlWyBuU2l6ZSAtIDEgXS55OwoKICAgICAgICAoSU1Q Q2hlY2tFeHByKCJJTl9SQU5HRSggdi55LCBvU2hhcGVbIDAgXS55LCBvU2hhcGVbIG5TaXplIC0g MSBdLnkgKSIsICJ2ZWNjbGVhbi5jcHAiLCA0MDI5KSwgKCgoVkNMREJMQ29tcCgob1NoYXBlWyAw IF0ueSksIHYueSkgPD0gMCkgJiYgKFZDTERCTENvbXAodi55LCAob1NoYXBlWyBuU2l6ZSAtIDEg XS55KSkgPD0gMCkpKSA/ICgwKSA6IF9JTVBBc3NlcnQoIklOX1JBTkdFKCB2LnksIG9TaGFwZVsg MCBdLnksIG9TaGFwZVsgblNpemUgLSAxIF0ueSApIiwidmVjY2xlYW4uY3BwIiw0MDI5KSk7Cgog ICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDwgblNpemU7IGkrKykKICAgICAgICB7 CiAgICAgICAgICAgIGlmICgoKFZDTERCTENvbXAoKG9TaGFwZVsgaSAtIDEgXS55KSwgdi55KSA8 PSAwKSAmJiAoVkNMREJMQ29tcCh2LnksIChvU2hhcGVbIGkgXS55KSkgPD0gMCkpKQogICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gVkNMSXNMZWZ0T24oIG9TaGFwZVsgaSAtIDEg XSwgb1NoYXBlWyBpIF0sIHYgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgKElN UENoZWNrRXhwcigiZmFsc2UiLCAidmVjY2xlYW4uY3BwIiwgNDAzOSksIChmYWxzZSkgPyAoMCkg OiBfSU1QQXNzZXJ0KCJmYWxzZSIsInZlY2NsZWFuLmNwcCIsNDAzOSkpOwogICAgICAgIHJldHVy biBmYWxzZTsKfQojIDQwNjAgInZlY2NsZWFuLmNwcCIKVEJvb2wgVkNMSXNSaWdodE9mU2hhcGUo IGNvbnN0IENWQ0xQb2ludCAmdiwgY29uc3QgQ1ZDTFBvaW50OjpWQ0xQb2ludFZlY3Rvcl90cCAm b1NoYXBlICkKewogICAgICAgIHJldHVybiAhVkNMSXNMZWZ0T25TaGFwZSggdiwgb1NoYXBlICk7 Cn0KIyA0MDgyICJ2ZWNjbGVhbi5jcHAiCnZvaWQgVkNMVW5pcXVlVmVydGV4KCBDVkNMUG9pbnQ6 OlZDTFBvaW50VmVjdG9yX3RwICZvU2hhcGUgKQp7CiAgICAgICAgQ1ZDTFBvaW50OjpWQ0xQb2lu dFZlY3Rvcl90cDo6aXRlcmF0b3IgaXQgPSB1bmlxdWUoIG9TaGFwZS5iZWdpbigpLCBvU2hhcGUu ZW5kKCksIFZDTFBvaW50RXF1YWwoKSk7CiAgICAgICAgb1NoYXBlLnJlc2l6ZSggaXQgLSBvU2hh cGUuYmVnaW4oKSk7Cn0KCgp2b2lkIFZDTFVuaXF1ZVZlcnRleCggR0RCVmVydGV4ICpwYXNWZXJ0 ZXgsIGludCAmblZlcnRleCApCnsKICAgICAgICBpbnQgbjsKCiAgICAgICAgbiA9IDA7CiAgICAg ICAgZm9yIChpbnQgaSA9IDE7IGkgPCBuVmVydGV4OyBpKyspCiAgICAgICAgewogICAgICAgICAg ICBpZiAoKCBwYXNWZXJ0ZXhbIG4gXS54ICE9IHBhc1ZlcnRleFsgaSBdLnggKSB8fCAoIHBhc1Zl cnRleFsgbiBdLnkgIT0gcGFzVmVydGV4WyBpIF0ueSApKQogICAgICAgICAgICB7CiAgICAgICAg ICAgICAgICBuKys7CiAgICAgICAgICAgICAgICBwYXNWZXJ0ZXhbIG4gXSA9IHBhc1ZlcnRleFsg aSBdOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBuVmVydGV4ID0gbiArIDE7Cn0K IyA0MTQ3ICJ2ZWNjbGVhbi5jcHAiClRCb29sIFZDTE1lcmdlU2hhcGVzKCBjb25zdCBDVkNMUG9p bnQ6OlZDTFBvaW50VmVjdG9yX3RwICZvU2hhcGUxLCBkb3VibGUgZGZUb2wxLCBjb25zdCBDVkNM UG9pbnQ6OlZDTFBvaW50VmVjdG9yX3RwICZvU2hhcGUyLCBkb3VibGUgZGZUb2wyLAogICAgICAg ICAgICAgICBDVkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yTGlzdF90cCAmc2hhcGUxTGlzdE91dCwg Q1ZDTFBvaW50OjpWQ0xQb2ludFZlY3Rvckxpc3RfdHAgJnNoYXBlMkxpc3RPdXQsIENWQ0xQb2lu dDo6VkNMUG9pbnRWZWN0b3JMaXN0X3RwICZkZXJpdmVkU2hhcGVMaXN0T3V0ICkKewoKCgoKICAg ICAgICBDVkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yX3RwIGRlcml2ZWRTaGFwZTsKCgoKCiAgICAg ICAgQ1ZDTFBvaW50OjpWQ0xQb2ludFZlY3Rvcl90cCBvTmV3U2hhcGUxOwoKCgoKICAgICAgICBD VkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yX3RwIG9OZXdTaGFwZTI7CgoKCgoKICAgICAgICBDVkNM UG9pbnQ6OlZDTFBvaW50VmVjdG9yX3RwOjppdGVyYXRvciBzaGFwZTFpdDsKCgoKICAgICAgICBD VkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yX3RwOjppdGVyYXRvciBzaGFwZTJpdDsKCgoKCgoKICAg ICAgICBDVkNMUG9pbnQgb0Nsb3NlOwogICAgICAgIENWQ0xQb2ludCBvTWluQ2xvc2U7CgoKCiAg ICAgICAgQ1ZDTFBvaW50IG9JbnRlcnNlY3Q7CgoKCiAgICAgICAgZG91YmxlIGRmRGlzdCA9IC0x OwoKCgogICAgICAgIGRvdWJsZSBkZlRvdGFsVG9sID0gZGZUb2wxICsgZGZUb2wyOwoKCgoKCiAg ICAgICAgc2hhcGUxTGlzdE91dC5jbGVhcigpOwogICAgICAgIHNoYXBlMkxpc3RPdXQuY2xlYXIo KTsKICAgICAgICBkZXJpdmVkU2hhcGVMaXN0T3V0LmNsZWFyKCk7CgoKCgogICAgICAgIENWQ0xQ b2ludDo6VkNMUG9pbnRWZWN0b3JfdHAgb1NoYXBlMUNvcHkgPSBvU2hhcGUxOwoKICAgICAgICBD VkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yX3RwIG9TaGFwZTJDb3B5ID0gb1NoYXBlMjsKCgoKICAg ICAgICBzaGFwZTFpdCA9IG9TaGFwZTFDb3B5LmJlZ2luKCk7CiAgICAgICAgc2hhcGUyaXQgPSBv U2hhcGUyQ29weS5iZWdpbigpOwoKICAgICAgICBvTWluQ2xvc2UgPSAoKG9TaGFwZTFDb3B5WyAw IF0pID4gKG9TaGFwZTJDb3B5WyAwIF0pID8gKG9TaGFwZTFDb3B5WyAwIF0pIDogKG9TaGFwZTJD b3B5WyAwIF0pKTsKCgoKCiAgICAgICAgaWYgKCpzaGFwZTFpdCA8ICpzaGFwZTJpdCkKICAgICAg ICB7CiAgICAgICAgICAgIG9OZXdTaGFwZTEucHVzaF9iYWNrKCAqc2hhcGUxaXQgKTsKICAgICAg ICAgICAgc2hhcGUxaXQrKzsKICAgICAgICB9CgogICAgICAgIGVsc2UgaWYgKCpzaGFwZTFpdCA+ ICpzaGFwZTJpdCkKICAgICAgICB7CiAgICAgICAgICAgIG9OZXdTaGFwZTIucHVzaF9iYWNrKCAq c2hhcGUyaXQgKTsKICAgICAgICAgICAgc2hhcGUyaXQrKzsKICAgICAgICB9CgoKCgogICAgICAg IGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGRlcml2ZWRTaGFwZS5wdXNoX2JhY2soICpzaGFw ZTFpdCApOwogICAgICAgICAgICBzaGFwZTFpdCsrOwogICAgICAgICAgICBzaGFwZTJpdCsrOwog ICAgICAgIH0KCgoKCgoKICAgICAgICBmb3IgKDs7KQogICAgICAgIHsKICAgICAgICAgICAgVEJv b2wgYkludGVyc2VjdCA9IGZhbHNlOwoKCgoKICAgICAgICAgICAgaWYgKCggc2hhcGUxaXQgPT0g b1NoYXBlMUNvcHkuZW5kKCkpIHx8CiAgICAgICAgICAgICAgICAoIHNoYXBlMml0ID09IG9TaGFw ZTJDb3B5LmVuZCgpKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgICAgIH0KCgoKCiAgICAgICAgICAgIGVsc2UgaWYgKCpzaGFwZTFpdCA9PSAqc2hhcGUyaXQp CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGJJbnRlcnNlY3QgPSB0cnVlOwogICAgICAg ICAgICAgICAgb0ludGVyc2VjdCA9ICpzaGFwZTFpdDsKICAgICAgICAgICAgfQoKCgoKCiAgICAg ICAgICAgIGVsc2UgaWYgKCggc2hhcGUxaXQgIT0gb1NoYXBlMUNvcHkuYmVnaW4oKSkgJiYKICAg ICAgICAgICAgICAgICAgKCBzaGFwZTJpdCAhPSBvU2hhcGUyQ29weS5iZWdpbigpKSAmJgogICAg ICAgICAgICAgICAgICAoIFZDTEludGVyc2VjdFByb3AoICooIHNoYXBlMWl0IC0gMSApLCAqc2hh cGUxaXQsICooIHNoYXBlMml0IC0gMSApLCAqc2hhcGUyaXQsIDAuMDAwMDAwMDAwMDEgKSkpCiAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGJJbnRlcnNlY3QgPSB0cnVlOwogICAgICAgICAg ICAgICAgQ1ZDTFBvaW50IHNJbnRlcnNlY3Q7CiAgICAgICAgICAgICAgICBiSW50ZXJzZWN0ID0g VkNMSW50ZXJzZWN0aW9uKCAqKCBzaGFwZTFpdCAtIDEgKSwgKnNoYXBlMWl0LCAqKCBzaGFwZTJp dCAtIDEgKSwgKnNoYXBlMml0LCBzSW50ZXJzZWN0LCAwLjAwMDAwMDAwMDAxICk7CiAgICAgICAg ICAgICAgICBvSW50ZXJzZWN0ID0gc0ludGVyc2VjdDsKICAgICAgICAgICAgICAgIChJTVBDaGVj a0V4cHIoImJJbnRlcnNlY3QiLCAidmVjY2xlYW4uY3BwIiwgNDI4MiksIChiSW50ZXJzZWN0KSA/ ICgwKSA6IF9JTVBBc3NlcnQoImJJbnRlcnNlY3QiLCJ2ZWNjbGVhbi5jcHAiLDQyODIpKTsKICAg ICAgICAgICAgfQoKCgoKICAgICAgICAgICAgZWxzZSBpZiAoKCBzaGFwZTFpdCAhPSBvU2hhcGUx Q29weS5iZWdpbigpKSAmJgogICAgICAgICAgICAgICAgICggVkNMRXVjbGlkaWFuRGlzdGFuY2Uo ICooIHNoYXBlMWl0IC0gMSApLCAqc2hhcGUxaXQsICpzaGFwZTJpdCwgZGZEaXN0LCBvQ2xvc2Ug KSkgJiYKICAgICAgICAgICAgICAgICAoIGRmRGlzdCA8PSBkZlRvdGFsVG9sICkpCiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgIG9JbnRlcnNlY3QgPSBWQ0xJbnRlcnBvbGF0ZVBvaW50KCBv Q2xvc2UsICpzaGFwZTJpdCwgZGZUb3RhbFRvbCwgZGZUb2wxICk7CiAgICAgICAgICAgICAgICBp ZiAob0ludGVyc2VjdCA+PSBvTWluQ2xvc2UpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAgICAgYkludGVyc2VjdCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgKnNoYXBlMml0 ID0gb0ludGVyc2VjdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKCgoKICAgICAg ICAgICAgZWxzZSBpZiAoKCBzaGFwZTJpdCAhPSBvU2hhcGUyQ29weS5iZWdpbigpKSAmJgogICAg ICAgICAgICAgICAgICggVkNMRXVjbGlkaWFuRGlzdGFuY2UoICooIHNoYXBlMml0IC0gMSApLCAq c2hhcGUyaXQsICpzaGFwZTFpdCwgZGZEaXN0LCBvQ2xvc2UgKSkgJiYKICAgICAgICAgICAgICAg ICAoIGRmRGlzdCA8PSBkZlRvdGFsVG9sICkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg IG9JbnRlcnNlY3QgPSBWQ0xJbnRlcnBvbGF0ZVBvaW50KCBvQ2xvc2UsICpzaGFwZTFpdCwgZGZU b3RhbFRvbCwgZGZUb2wyICk7CiAgICAgICAgICAgICAgICBpZiAob0ludGVyc2VjdCA+PSBvTWlu Q2xvc2UpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgYkludGVyc2VjdCA9 IHRydWU7CiAgICAgICAgICAgICAgICAgICAgKnNoYXBlMWl0ID0gb0ludGVyc2VjdDsKICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgfQoKCgoKICAgICAgICAgICAgaWYgKGJJbnRlcnNlY3Qp CiAgICAgICAgICAgIHsKCgoKCiAgICAgICAgICAgICAgICBpZiAoZGVyaXZlZFNoYXBlLnNpemUo KSA9PSAwKQogICAgICAgICAgICAgICAgewoKCgoKICAgICAgICAgICAgICAgICAgICBvTmV3U2hh cGUxLnB1c2hfYmFjayggb0ludGVyc2VjdCApOwogICAgICAgICAgICAgICAgICAgIFZDTFVuaXF1 ZVZlcnRleCggb05ld1NoYXBlMSApOwogICAgICAgICAgICAgICAgICAgIGlmIChvTmV3U2hhcGUx LnNpemUoKSA+IDEpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg ICBzaGFwZTFMaXN0T3V0LnB1c2hfYmFjayggb05ld1NoYXBlMSApOwogICAgICAgICAgICAgICAg ICAgIH0KCgoKCiAgICAgICAgICAgICAgICAgICAgb05ld1NoYXBlMi5wdXNoX2JhY2soIG9JbnRl cnNlY3QgKTsKICAgICAgICAgICAgICAgICAgICBWQ0xVbmlxdWVWZXJ0ZXgoIG9OZXdTaGFwZTIg KTsKICAgICAgICAgICAgICAgICAgICBpZiAob05ld1NoYXBlMi5zaXplKCkgPiAxKQogICAgICAg ICAgICAgICAgICAgICAgICBzaGFwZTJMaXN0T3V0LnB1c2hfYmFjayggb05ld1NoYXBlMiApOwog ICAgICAgICAgICAgICAgfQoKCgoKICAgICAgICAgICAgICAgIGRlcml2ZWRTaGFwZS5wdXNoX2Jh Y2soIG9JbnRlcnNlY3QgKTsKCgoKCgogICAgICAgICAgICAgICAgb05ld1NoYXBlMS5jbGVhcigp OwogICAgICAgICAgICAgICAgb05ld1NoYXBlMS5wdXNoX2JhY2soIG9JbnRlcnNlY3QgKTsKCiAg ICAgICAgICAgICAgICBvTmV3U2hhcGUyLmNsZWFyKCk7CiAgICAgICAgICAgICAgICBvTmV3U2hh cGUyLnB1c2hfYmFjayggb0ludGVyc2VjdCApOwogICAgICAgICAgICB9CgoKCgogICAgICAgICAg ICBlbHNlCiAgICAgICAgICAgIHsKCgoKCiAgICAgICAgICAgICAgICBWQ0xVbmlxdWVWZXJ0ZXgo IGRlcml2ZWRTaGFwZSApOwogICAgICAgICAgICAgICAgaWYgKGRlcml2ZWRTaGFwZS5zaXplKCkg PiAxKQogICAgICAgICAgICAgICAgewoKCgogICAgICAgICAgICAgICAgICAgIGRlcml2ZWRTaGFw ZUxpc3RPdXQucHVzaF9iYWNrKCBkZXJpdmVkU2hhcGUgKTsKICAgICAgICAgICAgICAgIH0KCgoK CiAgICAgICAgICAgICAgICBkZXJpdmVkU2hhcGUuY2xlYXIoKTsKICAgICAgICAgICAgfQoKCgoK CiAgICAgICAgICAgIGlmICgqc2hhcGUxaXQgPCAqc2hhcGUyaXQpCiAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgIG9OZXdTaGFwZTEucHVzaF9iYWNrKCAqc2hhcGUxaXQgKTsKICAgICAgICAg ICAgICAgIHNoYXBlMWl0Kys7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGVsc2UgaWYgKCpz aGFwZTFpdCA+ICpzaGFwZTJpdCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgb05ld1No YXBlMi5wdXNoX2JhY2soICpzaGFwZTJpdCApOwogICAgICAgICAgICAgICAgc2hhcGUyaXQrKzsK ICAgICAgICAgICAgfQoKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICBvTmV3U2hhcGUxLnB1c2hfYmFjayggKnNoYXBlMWl0ICk7CiAgICAgICAgICAgICAgICBv TmV3U2hhcGUyLnB1c2hfYmFjayggKnNoYXBlMml0ICk7CiAgICAgICAgICAgICAgICBzaGFwZTFp dCsrOwogICAgICAgICAgICAgICAgc2hhcGUyaXQrKzsKICAgICAgICAgICAgfQogICAgICAgIH0K CgoKCiAgICAgICAgY29weSggc2hhcGUxaXQsIG9TaGFwZTFDb3B5LmVuZCgpLCBiYWNrX2luc2Vy dGVyKCBvTmV3U2hhcGUxICkpOwoKCgoKICAgICAgICBWQ0xVbmlxdWVWZXJ0ZXgoIG9OZXdTaGFw ZTEgKTsKCgoKCiAgICAgICAgaWYgKG9OZXdTaGFwZTEuc2l6ZSgpID4gMSkKICAgICAgICB7CiAg ICAgICAgICAgIHNoYXBlMUxpc3RPdXQucHVzaF9iYWNrKCBvTmV3U2hhcGUxICk7CiAgICAgICAg fQoKCgoKICAgICAgICBjb3B5KCBzaGFwZTJpdCwgb1NoYXBlMkNvcHkuZW5kKCksIGJhY2tfaW5z ZXJ0ZXIoIG9OZXdTaGFwZTIgKSk7CgoKCgogICAgICAgIFZDTFVuaXF1ZVZlcnRleCggb05ld1No YXBlMiApOwoKCgoKICAgICAgICBpZiAob05ld1NoYXBlMi5zaXplKCkgPiAxKQogICAgICAgIHsK ICAgICAgICAgICAgc2hhcGUyTGlzdE91dC5wdXNoX2JhY2soIG9OZXdTaGFwZTIgKTsKICAgICAg ICB9CgoKCgogICAgICAgIHJldHVybiAoKCBzaGFwZTFMaXN0T3V0LnNpemUoKSA+IDEgKSB8fCAo IHNoYXBlMkxpc3RPdXQuc2l6ZSgpID4gMSApIHx8ICggZGVyaXZlZFNoYXBlTGlzdE91dC5zaXpl KCkgPiAwICkpOwp9CiMgNDQ3MiAidmVjY2xlYW4uY3BwIgpkb3VibGUgVkNMRGlzdGFuY2VGcm9t KCBDVkNMUG9pbnQgJm9DbG9zZXN0LCBjb25zdCBDVkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yX3Rw ICZvU2hhcGUsIGNvbnN0IENWQ0xQb2ludCAmZnJvbVdoZXJlICkKewoKICAgICAgICB1bnNpZ25l ZCBpbnQgblNpemUgPSBvU2hhcGUuc2l6ZSgpOwogICAgICAgIChJTVBDaGVja0V4cHIoIm5TaXpl ID4gMCIsICJ2ZWNjbGVhbi5jcHAiLCA0NDc2KSwgKG5TaXplID4gMCkgPyAoMCkgOiBfSU1QQXNz ZXJ0KCJuU2l6ZSA+IDAiLCJ2ZWNjbGVhbi5jcHAiLDQ0NzYpKTsKCiAgICAgICAgZG91YmxlIGRm RGlzdCA9IChzcXJ0KCgoZnJvbVdoZXJlKS54IC0gKG9TaGFwZVsgMCBdKS54KSAqICgoZnJvbVdo ZXJlKS54IC0gKG9TaGFwZVsgMCBdKS54KSArICgoZnJvbVdoZXJlKS55IC0gKG9TaGFwZVsgMCBd KS55KSAqICgoZnJvbVdoZXJlKS55IC0gKG9TaGFwZVsgMCBdKS55KSkpOwogICAgICAgIG9DbG9z ZXN0ID0gb1NoYXBlWyAwIF07CgogICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDwg blNpemU7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIGRvdWJsZSBkZk5ld0Rpc3QgPSAoc3Fy dCgoKGZyb21XaGVyZSkueCAtIChvU2hhcGVbIGkgXSkueCkgKiAoKGZyb21XaGVyZSkueCAtIChv U2hhcGVbIGkgXSkueCkgKyAoKGZyb21XaGVyZSkueSAtIChvU2hhcGVbIGkgXSkueSkgKiAoKGZy b21XaGVyZSkueSAtIChvU2hhcGVbIGkgXSkueSkpKTsKCgoKCiAgICAgICAgICAgIGlmIChkZk5l d0Rpc3QgPCBkZkRpc3QpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGRmRGlzdCA9IGRm TmV3RGlzdDsKICAgICAgICAgICAgICAgIG9DbG9zZXN0ID0gb1NoYXBlWyBpIF07CiAgICAgICAg ICAgIH0KCiAgICAgICAgICAgIENWQ0xQb2ludCBvTmV3UG9pbnQ7CiAgICAgICAgICAgIGlmIChW Q0xFdWNsaWRpYW5EaXN0YW5jZSggb1NoYXBlWyBpIC0gMSBdLCBvU2hhcGVbIGkgXSwgZnJvbVdo ZXJlLCBkZk5ld0Rpc3QsIG9OZXdQb2ludCApKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICBpZiAoZGZOZXdEaXN0IDwgZGZEaXN0KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAg ICAgICAgIGRmRGlzdCA9IGRmTmV3RGlzdDsKICAgICAgICAgICAgICAgICAgICBvQ2xvc2VzdCA9 IG9OZXdQb2ludDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAg ICAgICAgcmV0dXJuIGRmRGlzdDsKfQojIDQ1MzAgInZlY2NsZWFuLmNwcCIKVEJvb2wgVkNMSW50 ZXJzZWN0U2hhcGUoIENWQ0xQb2ludCAmb1doZXJlLAogICAgICAgICAgICAgIGNvbnN0IENWQ0xQ b2ludDo6VkNMUG9pbnRWZWN0b3JfdHAgJm9TaGFwZTEsCiAgICAgICAgICAgICAgY29uc3QgQ1ZD TFBvaW50OjpWQ0xQb2ludFZlY3Rvcl90cCAmb1NoYXBlMiApCnsKICAgICAgICB1bnNpZ25lZCBp bnQgaTEgPSAxOwogICAgICAgIHVuc2lnbmVkIGludCBpMiA9IDE7CiAgICAgICAgZG91YmxlIGRm RGlzdCA9IDAuMDsKCiAgICAgICAgdW5zaWduZWQgaW50IG5TaXplMSA9IG9TaGFwZTEuc2l6ZSgp OwogICAgICAgIHVuc2lnbmVkIGludCBuU2l6ZTIgPSBvU2hhcGUyLnNpemUoKTsKCgoKCiAgICAg ICAgZm9yICg7OykKICAgICAgICB7CgoKCgogICAgICAgICAgICBpZiAoaTEgPT0gblNpemUxKQog ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gVkNMRXVjbGlkaWFuRGlzdGFuY2Uo IG9TaGFwZTJbIGkyIC0gMSBdLCBvU2hhcGUyWyBpMiBdLCBvU2hhcGUxWyBpMSAtIDEgXSwgZGZE aXN0LCBvV2hlcmUgKSAmJgogICAgICAgICAgICAgICAgICAgICggZGZEaXN0IDw9IDAuMDAwMDAw MDAwMDEgKSAmJgogICAgICAgICAgICAgICAgICAgICggIVZDTFBvaW50RXF1YWwoKSAoIG9XaGVy ZSwgb1NoYXBlMlsgMCBdICkpICYmCiAgICAgICAgICAgICAgICAgICAgKCAhVkNMUG9pbnRFcXVh bCgpICggb1doZXJlLCBvU2hhcGUyWyBuU2l6ZTIgLSAxIF0gKSk7CiAgICAgICAgICAgIH0KCiAg ICAgICAgICAgIGVsc2UgaWYgKGkyID09IG5TaXplMikKICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgcmV0dXJuIFZDTEV1Y2xpZGlhbkRpc3RhbmNlKCBvU2hhcGUxWyBpMSAtIDEgXSwgb1No YXBlMVsgaTEgXSwgb1NoYXBlMlsgaTIgLSAxIF0sIGRmRGlzdCwgb1doZXJlICkgJiYKICAgICAg ICAgICAgICAgICAgICAoIGRmRGlzdCA8PSAwLjAwMDAwMDAwMDAxICkgJiYKICAgICAgICAgICAg ICAgICAgICAoICFWQ0xQb2ludEVxdWFsKCkgKCBvV2hlcmUsIG9TaGFwZTFbIDAgXSApKSAmJgog ICAgICAgICAgICAgICAgICAgICggIVZDTFBvaW50RXF1YWwoKSAoIG9XaGVyZSwgb1NoYXBlMVsg blNpemUxIC0gMSBdICkpOwogICAgICAgICAgICB9CgoKCgoKICAgICAgICAgICAgZWxzZSBpZiAo VkNMSW50ZXJzZWN0UHJvcCggb1NoYXBlMVsgaTEgLSAxIF0sIG9TaGFwZTFbIGkxIF0sIG9TaGFw ZTJbIGkyIC0gMSBdLCBvU2hhcGUyWyBpMiBdLCAwLjAwMDAwMDAwMDAxICkgJiYKICAgICAgICAg ICAgICAgICBWQ0xJbnRlcnNlY3Rpb24oIG9TaGFwZTFbIGkxIC0gMSBdLCBvU2hhcGUxWyBpMSBd LCBvU2hhcGUyWyBpMiAtIDEgXSwgb1NoYXBlMlsgaTIgXSwgb1doZXJlLCAwLjAwMDAwMDAwMDAx ICkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAg ICB9CgoKCgogICAgICAgICAgICBlbHNlIGlmIChWQ0xFdWNsaWRpYW5EaXN0YW5jZSggb1NoYXBl MVsgaTEgLSAxIF0sIG9TaGFwZTFbIGkxIF0sIG9TaGFwZTJbIGkyIC0gMSBdLCBkZkRpc3QsIG9X aGVyZSApICYmCiAgICAgICAgICAgICAgICAgKCBkZkRpc3QgPD0gMC4wMDAwMDAwMDAwMSApICYm CiAgICAgICAgICAgICAgICAgKCAhVkNMUG9pbnRFcXVhbCgpICggb1doZXJlLCBvU2hhcGUxWyAw IF0gKSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg ICAgICB9CgoKCgogICAgICAgICAgICBlbHNlIGlmIChWQ0xFdWNsaWRpYW5EaXN0YW5jZSggb1No YXBlMlsgaTIgLSAxIF0sIG9TaGFwZTJbIGkyIF0sIG9TaGFwZTFbIGkxIC0gMSBdLCBkZkRpc3Qs IG9XaGVyZSApICYmCiAgICAgICAgICAgICAgICAgKCBkZkRpc3QgPD0gMC4wMDAwMDAwMDAwMSAp ICYmCiAgICAgICAgICAgICAgICAgKCAhVkNMUG9pbnRFcXVhbCgpICggb1doZXJlLCBvU2hhcGUy WyAwIF0gKSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg ICAgICAgICB9CgoKCgogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgIGlmIChvU2hhcGUxWyBpMSBdIDwgb1NoYXBlMlsgaTIgXSkKICAgICAgICAgICAgICAgIHsK ICAgICAgICAgICAgICAgICAgICBpMSsrOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg ICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpMisrOwogICAg ICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQp9CiMgNDY1MCAidmVjY2xlYW4u Y3BwIgpkb3VibGUgVkNMQ29tcHV0ZUFuZ2xlKCBjb25zdCBDVkNMUG9pbnQgJnNBLCBjb25zdCBD VkNMUG9pbnQgJnNCLCBjb25zdCBDVkNMUG9pbnQgJnNDICkKewogICAgICAgIGRvdWJsZSBhdDEg PSBhdGFuMiggc0EueSAtIHNCLnksIHNBLnggLSBzQi54ICk7CiAgICAgICAgZG91YmxlIGF0MiA9 IGF0YW4yKCBzQy55IC0gc0IueSwgc0MueCAtIHNCLnggKTsKCiAgICAgICAgZG91YmxlIGRmUmV0 dXJuVmFsdWUgPSBmbW9kKCggYXQyIC0gYXQxICkgKyAyICogMy4xNDE1OTI2NTM1ODk3OTMyMzg0 NjI2NDNFMCwgMiAqIDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzRTAgKTsKCgoKCgoKICAgICAg ICBpZiAoVkNMREJMQ29tcCggZGZSZXR1cm5WYWx1ZSwgMi4wICogMy4xNDE1OTI2NTM1ODk3OTMy Mzg0NjI2NDNFMCwgOCApID09IDApIGRmUmV0dXJuVmFsdWUgPSAwLjA7CiAgICAgICAgZWxzZSBp ZiAoVkNMREJMQ29tcCggZGZSZXR1cm5WYWx1ZSwgLTIuMCAqIDMuMTQxNTkyNjUzNTg5NzkzMjM4 NDYyNjQzRTAsIDggKSA9PSAwKSBkZlJldHVyblZhbHVlID0gMC4wOwoKICAgICAgICByZXR1cm4g ZGZSZXR1cm5WYWx1ZTsKfQojIDQ2OTAgInZlY2NsZWFuLmNwcCIKdm9pZCBWQ0xCcmVha0F0UG9p bnRzKCBDVkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yTGlzdF90cCAmb1NoYXBlcywgY29uc3QgQ1ZD TFBvaW50OjpWQ0xQb2ludFZlY3Rvcl90cCAmb1NoYXBlLCBDVkNMUG9pbnQ6OlZDTFBvaW50VmVj dG9yX3RwIG9CcmVha1BvaW50cyApCnsKICAgICAgICBvU2hhcGVzLmNsZWFyKCk7CgogICAgICAg IENWQ0xQb2ludDo6VkNMUG9pbnRWZWN0b3JfdHAgb01lcmdlU2hhcGUsIG9OZXdTaGFwZTsKCgoK CgogICAgICAgIG9NZXJnZVNoYXBlID0gb1NoYXBlOwogICAgICAgIGNvcHkoIG9CcmVha1BvaW50 cy5iZWdpbigpLCBvQnJlYWtQb2ludHMuZW5kKCksIGJhY2tfaW5zZXJ0ZXIoIG9NZXJnZVNoYXBl ICkpOwoKCgoKCiAgICAgICAgc29ydCggb01lcmdlU2hhcGUuYmVnaW4oKSwgb01lcmdlU2hhcGUu ZW5kKCkpOwogICAgICAgIFZDTFVuaXF1ZVZlcnRleCggb01lcmdlU2hhcGUgKTsKCgoKCgogICAg ICAgIHNvcnQoIG9CcmVha1BvaW50cy5iZWdpbigpLCBvQnJlYWtQb2ludHMuZW5kKCkpOwogICAg ICAgIFZDTFVuaXF1ZVZlcnRleCggb0JyZWFrUG9pbnRzICk7CgoKCgoKICAgICAgICBvQnJlYWtQ b2ludHMucHVzaF9iYWNrKCBDVkNMUG9pbnQoIDEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4LCAxLjc5 NzY5MzEzNDg2MjMxNTdFKzMwOCApKTsKCiAgICAgICAgdW5zaWduZWQgaW50IG5TaXplID0gb01l cmdlU2hhcGUuc2l6ZSgpOwogICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwLCBqID0gMDsg aSA8IG5TaXplOyBpKyspCiAgICAgICAgewoKICAgICAgICAgICAgaWYgKFZDTFBvaW50RXF1YWwo KSAoIG9NZXJnZVNoYXBlWyBpIF0sIG9CcmVha1BvaW50c1sgaiBdICkpCiAgICAgICAgICAgIHsK CgoKCiAgICAgICAgICAgICAgICBvTmV3U2hhcGUucHVzaF9iYWNrKCBvQnJlYWtQb2ludHNbIGog XSApOwoKICAgICAgICAgICAgICAgIGlmIChvTmV3U2hhcGUuc2l6ZSgpID4gMSkKICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBvU2hhcGVzLnB1c2hfYmFjayggb05ld1NoYXBl ICk7CiAgICAgICAgICAgICAgICB9CgoKCgogICAgICAgICAgICAgICAgb05ld1NoYXBlLmNsZWFy KCk7CgoKCgogICAgICAgICAgICAgICAgb05ld1NoYXBlLnB1c2hfYmFjayggb0JyZWFrUG9pbnRz WyBqIF0gKTsKCgoKCgogICAgICAgICAgICAgICAgaisrOwogICAgICAgICAgICB9CgogICAgICAg ICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG9OZXdTaGFwZS5wdXNoX2Jh Y2soIG9NZXJnZVNoYXBlWyBpIF0gKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAg aWYgKG9OZXdTaGFwZS5zaXplKCkgPiAxKQogICAgICAgIHsKICAgICAgICAgICAgb1NoYXBlcy5w dXNoX2JhY2soIG9OZXdTaGFwZSApOwogICAgICAgIH0KfQojIDQ4MDQgInZlY2NsZWFuLmNwcCIK dHlwZWRlZiBwYWlyPENWQ0xQb2ludCwgQ1ZDTFBvaW50OjpWQ0xQb2ludFZlY3Rvckxpc3RfdHA6 Oml0ZXJhdG9yPiBQb2ludEhhbmRsZVBhaXI7CnR5cGVkZWYgbXVsdGltYXA8Q1ZDTFBvaW50LCBD VkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yTGlzdF90cDo6aXRlcmF0b3IsIGxlc3M8Q1ZDTFBvaW50 PiA+IFBvaW50TXVsdGltYXA7CnR5cGVkZWYgbXVsdGltYXA8Q1ZDTFBvaW50LCBDVkNMUG9pbnQ6 OlZDTFBvaW50VmVjdG9yTGlzdF90cDo6aXRlcmF0b3IsIGxlc3M8Q1ZDTFBvaW50PiA+OjppdGVy YXRvciBQb2ludE11bHRpbWFwSXRlcjsKc3RhdGljIHZvaWQgR3Jvd1BvaW50VmVjdG9yKCBQb2lu dE11bHRpbWFwSXRlciAmUE1NSXRlciwgUG9pbnRNdWx0aW1hcCAmb1BvaW50c01hcCwgQ1ZDTFBv aW50OjpWQ0xQb2ludFZlY3Rvcl90cCAmb05ld1BvaW50VmVjdG9yLCBDVkNMUG9pbnQ6OlZDTFBv aW50VmVjdG9yX3RwICZpbnRlcnNlY3Rpb25zLCBUQm9vbCBBZGRUb0Zyb250ICk7CiMgNDg1NSAi dmVjY2xlYW4uY3BwIgpDVkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yTGlzdF90cCBWQ0xDb25jYXRD aGFpbnMoIENWQ0xQb2ludDo6VkNMUG9pbnRWZWN0b3JMaXN0X3RwICZvU2hhcGVzLCBDVkNMUG9p bnQ6OlZDTFBvaW50VmVjdG9yX3RwICZpbnRlcnNlY3Rpb25zICkKewoKICAgICAgICBQb2ludE11 bHRpbWFwIG9Qb2ludHNNYXA7CiAgICAgICAgUG9pbnRIYW5kbGVQYWlyIG9UZW1wUGFpcjsKICAg ICAgICBDVkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yTGlzdF90cCBvT3V0cHV0UFZzOwogICAgICAg IENWQ0xQb2ludDo6VkNMUG9pbnRWZWN0b3JMaXN0X3RwOjppdGVyYXRvciBvQ3VycmVudFBvaW50 VmVjdG9yOwogICAgICAgIENWQ0xQb2ludCBvQ3VycmVudFBvaW50OwojIDQ4NzEgInZlY2NsZWFu LmNwcCIKICAgICAgICBmb3IgKG9DdXJyZW50UG9pbnRWZWN0b3IgPSBvU2hhcGVzLmJlZ2luKCk7 IG9DdXJyZW50UG9pbnRWZWN0b3IgIT0gb1NoYXBlcy5lbmQoKTsgb0N1cnJlbnRQb2ludFZlY3Rv cisrKQogICAgICAgIHsKICAgICAgICAgICAgb1RlbXBQYWlyLmZpcnN0ID0gKCAqKCAqb0N1cnJl bnRQb2ludFZlY3RvciApLmJlZ2luKCkpOwogICAgICAgICAgICBvVGVtcFBhaXIuc2Vjb25kID0g b0N1cnJlbnRQb2ludFZlY3RvcjsKICAgICAgICAgICAgb1BvaW50c01hcC5pbnNlcnQoIG9UZW1w UGFpciApOwogICAgICAgICAgICBvVGVtcFBhaXIuZmlyc3QgPSAoICooICpvQ3VycmVudFBvaW50 VmVjdG9yICkucmJlZ2luKCkpOwogICAgICAgICAgICBvUG9pbnRzTWFwLmluc2VydCggb1RlbXBQ YWlyICk7CiAgICAgICAgfQoKCgoKCgogICAgICAgIHdoaWxlICghb1BvaW50c01hcC5lbXB0eSgp KQogICAgICAgIHsKIyA0ODk2ICJ2ZWNjbGVhbi5jcHAiCiAgICAgICAgICAgIFRCb29sIGJBZGRU b0Zyb250ID0gZmFsc2U7CiAgICAgICAgICAgIFRCb29sIGJNaWRkbGVPZkxpbmUgPSBmYWxzZTsK CgoKCiAgICAgICAgICAgIENWQ0xQb2ludDo6VkNMUG9pbnRWZWN0b3JfdHAgb05ld1BvaW50VmVj dG9yOwoKCgoKCiAgICAgICAgICAgIFBvaW50TXVsdGltYXBJdGVyIFBNTUl0ZXIgPSBvUG9pbnRz TWFwLmJlZ2luKCk7CiAgICAgICAgICAgIG9DdXJyZW50UG9pbnQgPSAoICpQTU1JdGVyICkuZmly c3Q7CgoKCgoKICAgICAgICAgICAgaWYgKG9Qb2ludHNNYXAuc2l6ZSgpID4gMSkKICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgUG9pbnRNdWx0aW1hcEl0ZXIgUE1NSXRlclNlY29uZCA9IFBN TUl0ZXI7CgoKCiAgICAgICAgICAgICAgICBQTU1JdGVyU2Vjb25kKys7CiAgICAgICAgICAgICAg ICAoSU1QQ2hlY2tFeHByKCJQTU1JdGVyICE9IFBNTUl0ZXJTZWNvbmQiLCAidmVjY2xlYW4uY3Bw IiwgNDkyMiksIChQTU1JdGVyICE9IFBNTUl0ZXJTZWNvbmQpID8gKDApIDogX0lNUEFzc2VydCgi UE1NSXRlciAhPSBQTU1JdGVyU2Vjb25kIiwidmVjY2xlYW4uY3BwIiw0OTIyKSk7CiMgNDkzMiAi dmVjY2xlYW4uY3BwIgogICAgICAgICAgICAgICAgaWYgKCggKlBNTUl0ZXJTZWNvbmQgKS5maXJz dCA9PSBvQ3VycmVudFBvaW50KQogICAgICAgICAgICAgICAgICAgIGJNaWRkbGVPZkxpbmUgPSB0 cnVlOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIGJNaWRkbGVPZkxp bmUgPSBmYWxzZTsKCgoKCgogICAgICAgICAgICAgICAgaWYgKG9Qb2ludHNNYXAuc2l6ZSgpID4g MikKICAgICAgICAgICAgICAgIHsKCgoKICAgICAgICAgICAgICAgICAgICBQTU1JdGVyU2Vjb25k Kys7CiMgNDk1NiAidmVjY2xlYW4uY3BwIgogICAgICAgICAgICAgICAgICAgIGlmICgoICpQTU1J dGVyU2Vjb25kICkuZmlyc3QgPT0gb0N1cnJlbnRQb2ludCkKICAgICAgICAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICAgICAgICAgIGludGVyc2VjdGlvbnMucHVzaF9iYWNrKCBvQ3VycmVu dFBvaW50ICk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJNaWRkbGVPZkxpbmUgPSBmYWxzZTsK ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCgoK CgogICAgICAgICAgICBpZiAoKCAqKCggKlBNTUl0ZXIgKS5zZWNvbmQgKSlbIDAgXSA9PSBvQ3Vy cmVudFBvaW50KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBiQWRkVG9Gcm9udCA9IGZh bHNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAg ICAgICAgICAgYkFkZFRvRnJvbnQgPSB0cnVlOwogICAgICAgICAgICB9CgoKCgoKICAgICAgICAg ICAgR3Jvd1BvaW50VmVjdG9yKCBQTU1JdGVyLCBvUG9pbnRzTWFwLCBvTmV3UG9pbnRWZWN0b3Is IGludGVyc2VjdGlvbnMsIGJBZGRUb0Zyb250ICk7CgoKCgoKCgogICAgICAgICAgICBpZiAoKCBi TWlkZGxlT2ZMaW5lICkgJiYgKCAhb1BvaW50c01hcC5lbXB0eSgpKSkKICAgICAgICAgICAgewoj IDQ5OTkgInZlY2NsZWFuLmNwcCIKICAgICAgICAgICAgICAgIFBvaW50TXVsdGltYXBJdGVyIFBN TUl0ZXIgPSBvUG9pbnRzTWFwLmJlZ2luKCk7CiAgICAgICAgICAgICAgICBpZiAob0N1cnJlbnRQ b2ludCA9PSAoICpQTU1JdGVyICkuZmlyc3QpCiAgICAgICAgICAgICAgICB7CgoKCgoKCgogICAg ICAgICAgICAgICAgICAgIEdyb3dQb2ludFZlY3RvciggUE1NSXRlciwgb1BvaW50c01hcCwgb05l d1BvaW50VmVjdG9yLCBpbnRlcnNlY3Rpb25zLCAhYkFkZFRvRnJvbnQgKTsKICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgfQoKCgoKICAgICAgICAgICAgVkNMVW5pcXVlVmVydGV4KCBvTmV3 UG9pbnRWZWN0b3IgKTsKICAgICAgICAgICAgb091dHB1dFBWcy5wdXNoX2JhY2soIG9OZXdQb2lu dFZlY3RvciApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gb091dHB1dFBWczsKfQojIDUwNTIg InZlY2NsZWFuLmNwcCIKc3RhdGljIHZvaWQgR3Jvd1BvaW50VmVjdG9yKCBQb2ludE11bHRpbWFw SXRlciAmUE1NSXRlciwgUG9pbnRNdWx0aW1hcCAmb1BvaW50c01hcCwgQ1ZDTFBvaW50OjpWQ0xQ b2ludFZlY3Rvcl90cCAmb05ld1BvaW50VmVjdG9yLCBDVkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9y X3RwICZpbnRlcnNlY3Rpb25zLCBUQm9vbCBBZGRUb0Zyb250ICkKewogICAgICAgIFBvaW50TXVs dGltYXBJdGVyIG9DdXJyZW50UGFpcjsKICAgICAgICBQb2ludE11bHRpbWFwSXRlciBvTmV4dFBh aXI7CiAgICAgICAgVEJvb2wgYkRvbmUgPSBmYWxzZTsKCgoKCgogICAgICAgIENWQ0xQb2ludDo6 VkNMUG9pbnRWZWN0b3JMaXN0X3RwOjppdGVyYXRvciBvQ3VycmVudFBvaW50VmVjdG9yID0gKCAq UE1NSXRlciApLnNlY29uZDsKICAgICAgICBDVkNMUG9pbnQgb0N1cnJlbnRQb2ludCA9ICggKlBN TUl0ZXIgKS5maXJzdDsKICAgICAgICBvUG9pbnRzTWFwLmVyYXNlKCBQTU1JdGVyICk7CgogICAg ICAgIGRvCiAgICAgICAgewoKCgoKICAgICAgICAgICAgQ1ZDTFBvaW50IG9PdGhlckVuZFBvaW50 ID0gKCgob0N1cnJlbnRQb2ludCkgPT0gKCggKm9DdXJyZW50UG9pbnRWZWN0b3IgKVsgMCBdKSkg PyAoKCAqb0N1cnJlbnRQb2ludFZlY3RvciApWyAoICpvQ3VycmVudFBvaW50VmVjdG9yICkuc2l6 ZSgpIC0gMSBdKSA6ICgoICpvQ3VycmVudFBvaW50VmVjdG9yIClbIDAgXSkpOwoKCgoKCiAgICAg ICAgICAgIGlmIChBZGRUb0Zyb250KQogICAgICAgICAgICAgICAgb05ld1BvaW50VmVjdG9yLmlu c2VydCggb05ld1BvaW50VmVjdG9yLmJlZ2luKCksICggKm9DdXJyZW50UG9pbnRWZWN0b3IgKS5i ZWdpbigpLCAoICpvQ3VycmVudFBvaW50VmVjdG9yICkuZW5kKCkpOwogICAgICAgICAgICBlbHNl CiAgICAgICAgICAgICAgICBvTmV3UG9pbnRWZWN0b3IuaW5zZXJ0KCBvTmV3UG9pbnRWZWN0b3Iu ZW5kKCksICggKm9DdXJyZW50UG9pbnRWZWN0b3IgKS5iZWdpbigpLCAoICpvQ3VycmVudFBvaW50 VmVjdG9yICkuZW5kKCkpOwoKCgoKCgoKICAgICAgICAgICAgcGFpcjxQb2ludE11bHRpbWFwSXRl ciwgUG9pbnRNdWx0aW1hcEl0ZXI+IHJhbmdlID0gb1BvaW50c01hcC5lcXVhbF9yYW5nZSggb090 aGVyRW5kUG9pbnQgKTsKICAgICAgICAgICAgKElNUENoZWNrRXhwcigicmFuZ2UuZmlyc3QgIT0g b1BvaW50c01hcC5lbmQoKSIsICJ2ZWNjbGVhbi5jcHAiLCA1MDkwKSwgKHJhbmdlLmZpcnN0ICE9 IG9Qb2ludHNNYXAuZW5kKCkpID8gKDApIDogX0lNUEFzc2VydCgicmFuZ2UuZmlyc3QgIT0gb1Bv aW50c01hcC5lbmQoKSIsInZlY2NsZWFuLmNwcCIsNTA5MCkpOwoKICAgICAgICAgICAgaW50IG5O dW1iZXJPZk9jY3VyYW5jZXMgPSAwOwogICAgICAgICAgICBvTmV4dFBhaXIgPSBvUG9pbnRzTWFw LmVuZCgpOwogICAgICAgICAgICB3aGlsZSAoKCByYW5nZS5maXJzdCAhPSBvUG9pbnRzTWFwLmVu ZCgpKSAmJiAoIHJhbmdlLmZpcnN0ICE9IHJhbmdlLnNlY29uZCApKQogICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICBuTnVtYmVyT2ZPY2N1cmFuY2VzKys7CgoKCgoKCiAgICAgICAgICAgICAg ICBpZiAoKCAqcmFuZ2UuZmlyc3QgKS5zZWNvbmQgPT0gb0N1cnJlbnRQb2ludFZlY3RvcikKICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBvQ3VycmVudFBhaXIgPSByYW5nZS5m aXJzdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgICBvTmV4dFBhaXIgPSByYW5nZS5maXJzdDsKICAgICAg ICAgICAgICAgIH0KCgoKCiAgICAgICAgICAgICAgICByYW5nZS5maXJzdCsrOwogICAgICAgICAg ICB9CgoKCgoKICAgICAgICAgICAgaWYgKGZpbmQoIGludGVyc2VjdGlvbnMuYmVnaW4oKSwgaW50 ZXJzZWN0aW9ucy5lbmQoKSwgb090aGVyRW5kUG9pbnQgKSAhPSBpbnRlcnNlY3Rpb25zLmVuZCgp KQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgb05leHRQYWlyID0gb1BvaW50c01hcC5l bmQoKTsKICAgICAgICAgICAgfQoKCgoKICAgICAgICAgICAgZWxzZSBpZiAobk51bWJlck9mT2Nj dXJhbmNlcyA+IDIpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGludGVyc2VjdGlvbnMu cHVzaF9iYWNrKCBvT3RoZXJFbmRQb2ludCApOwoKICAgICAgICAgICAgICAgIG9OZXh0UGFpciA9 IG9Qb2ludHNNYXAuZW5kKCk7CiAgICAgICAgICAgIH0KCgoKCgogICAgICAgICAgICBpZiAoKCBv TmV4dFBhaXIgIT0gb1BvaW50c01hcC5lbmQoKSkgJiYgKCggKm9OZXh0UGFpciApLmZpcnN0ID09 IG9PdGhlckVuZFBvaW50ICkpCiAgICAgICAgICAgICAgICBiRG9uZSA9IGZhbHNlOwogICAgICAg ICAgICBlbHNlCiAgICAgICAgICAgICAgICBiRG9uZSA9IHRydWU7CgoKCgoKCiAgICAgICAgICAg IG9Qb2ludHNNYXAuZXJhc2UoIG9DdXJyZW50UGFpciApOwoKICAgICAgICAgICAgaWYgKCFiRG9u ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgKElNUENoZWNrRXhwcigiIW9Qb2ludHNN YXAuZW1wdHkoKSIsICJ2ZWNjbGVhbi5jcHAiLCA1MTU2KSwgKCFvUG9pbnRzTWFwLmVtcHR5KCkp ID8gKDApIDogX0lNUEFzc2VydCgiIW9Qb2ludHNNYXAuZW1wdHkoKSIsInZlY2NsZWFuLmNwcCIs NTE1NikpOwoKCgoKCgoKICAgICAgICAgICAgICAgIG9OZXh0UGFpciA9IG9Qb2ludHNNYXAubG93 ZXJfYm91bmQoIG9PdGhlckVuZFBvaW50ICk7CgoKCgoKCiAgICAgICAgICAgICAgICBvQ3VycmVu dFBvaW50ID0gKCAqb05leHRQYWlyICkuZmlyc3Q7CiAgICAgICAgICAgICAgICBvQ3VycmVudFBv aW50VmVjdG9yID0gKCAqb05leHRQYWlyICkuc2Vjb25kOwogICAgICAgICAgICAgICAgb1BvaW50 c01hcC5lcmFzZSggb05leHRQYWlyICk7CgogICAgICAgICAgICAgICAgKElNUENoZWNrRXhwcigi IW9Qb2ludHNNYXAuZW1wdHkoKSIsICJ2ZWNjbGVhbi5jcHAiLCA1MTc1KSwgKCFvUG9pbnRzTWFw LmVtcHR5KCkpID8gKDApIDogX0lNUEFzc2VydCgiIW9Qb2ludHNNYXAuZW1wdHkoKSIsInZlY2Ns ZWFuLmNwcCIsNTE3NSkpOwoKICAgICAgICAgICAgICAgIGlmIChvUG9pbnRzTWFwLnNpemUoKSA9 PSAwKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGJEb25lID0gdHJ1ZTsK ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICB9IHdoaWxlICghYkRvbmUp Owp9CiMgNTIwMSAidmVjY2xlYW4uY3BwIgpUQm9vbCBWQ0xJbnNlcnRDaGFpbkludG9DaGFpbkxp c3QoIENWQ0xQb2ludDo6VkNMUG9pbnRWZWN0b3JfdHAgJnN0bENoYWluVG9JbnNlcnQsIENWQ0xQ b2ludDo6VkNMUG9pbnRWZWN0b3JMaXN0X3RwOjppdGVyYXRvciBpU3RhcnRWZWN0b3IsIENWQ0xQ b2ludDo6VkNMUG9pbnRWZWN0b3JMaXN0X3RwOjppdGVyYXRvciBpRW5kVmVjdG9yICkKewogICAg ICAgIGlmIChpU3RhcnRWZWN0b3IgPT0gaUVuZFZlY3RvcikgcmV0dXJuIDA7CgoKCgoKICAgICAg ICAoSU1QQ2hlY2tFeHByKCJzdGxDaGFpblRvSW5zZXJ0LnNpemUoKSA+IDEiLCAidmVjY2xlYW4u Y3BwIiwgNTIwOSksIChzdGxDaGFpblRvSW5zZXJ0LnNpemUoKSA+IDEpID8gKDApIDogX0lNUEFz c2VydCgic3RsQ2hhaW5Ub0luc2VydC5zaXplKCkgPiAxIiwidmVjY2xlYW4uY3BwIiw1MjA5KSk7 CiAgICAgICAgQ1ZDTFBvaW50OjpWQ0xQb2ludFZlY3Rvckxpc3RfdHA6Oml0ZXJhdG9yIFNoYXBl SXRlcjsKICAgICAgICBmb3IgKFNoYXBlSXRlciA9IGlTdGFydFZlY3RvcjsKICAgICAgICAgU2hh cGVJdGVyICE9IGlFbmRWZWN0b3I7CiAgICAgICAgIFNoYXBlSXRlcisrKQogICAgICAgIHsKCgoK CgogICAgICAgICAgICBpZiAoKiggU2hhcGVJdGVyLT5lbmQoKSAtIDEgKSA9PSAqc3RsQ2hhaW5U b0luc2VydC5iZWdpbigpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDVkNMUG9pbnQ6 OlZDTFBvaW50VmVjdG9yX3RwOjppdGVyYXRvciBWZXJ0ZXhJdGVyID0gc3RsQ2hhaW5Ub0luc2Vy dC5iZWdpbigpOwogICAgICAgICAgICAgICAgZG8KICAgICAgICAgICAgICAgIHsKCgoKCiAgICAg ICAgICAgICAgICAgICAgVmVydGV4SXRlcisrOwogICAgICAgICAgICAgICAgICAgIFNoYXBlSXRl ci0+cHVzaF9iYWNrKCAqVmVydGV4SXRlciApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgICAgd2hpbGUgKFZlcnRleEl0ZXIgIT0gc3RsQ2hhaW5Ub0luc2VydC5lbmQoKSAtIDEpOwog ICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgIH0KCgoKCgogICAgICAgICAgICBl bHNlIGlmICgqKCBTaGFwZUl0ZXItPmVuZCgpIC0gMSApID09ICooIHN0bENoYWluVG9JbnNlcnQu ZW5kKCkgLSAxICkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENWQ0xQb2ludDo6VkNM UG9pbnRWZWN0b3JfdHA6Oml0ZXJhdG9yIFZlcnRleEl0ZXI7CiAgICAgICAgICAgICAgICBWZXJ0 ZXhJdGVyID0gc3RsQ2hhaW5Ub0luc2VydC5lbmQoKSAtMTsKICAgICAgICAgICAgICAgIGRvCiAg ICAgICAgICAgICAgICB7CgoKCgogICAgICAgICAgICAgICAgICAgIFZlcnRleEl0ZXItLTsKICAg ICAgICAgICAgICAgICAgICBTaGFwZUl0ZXItPnB1c2hfYmFjayggKlZlcnRleEl0ZXIgKTsKICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHdoaWxlIChWZXJ0ZXhJdGVyICE9IHN0bENo YWluVG9JbnNlcnQuYmVnaW4oKSk7CiAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAg ICAgfQoKCgoKCiAgICAgICAgICAgIGVsc2UgaWYgKCpTaGFwZUl0ZXItPmJlZ2luKCkgPT0gKigg c3RsQ2hhaW5Ub0luc2VydC5lbmQoKSAtIDEgKSkKICAgICAgICAgICAgewogICAgICAgICAgICAg ICAgQ1ZDTFBvaW50OjpWQ0xQb2ludFZlY3Rvcl90cDo6aXRlcmF0b3IgVmVydGV4SXRlciA9IHN0 bENoYWluVG9JbnNlcnQuZW5kKCk7CgoKCgogICAgICAgICAgICAgICAgVmVydGV4SXRlciA9IFZl cnRleEl0ZXIgLSAxOwoKCgoKICAgICAgICAgICAgICAgIFNoYXBlSXRlci0+aW5zZXJ0KCBTaGFw ZUl0ZXItPmJlZ2luKCksIHN0bENoYWluVG9JbnNlcnQuYmVnaW4oKSwgVmVydGV4SXRlciApOwog ICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgIH0KCgoKCgoKICAgICAgICAgICAg ZWxzZSBpZiAoKlNoYXBlSXRlci0+YmVnaW4oKSA9PSAqc3RsQ2hhaW5Ub0luc2VydC5iZWdpbigp KQogICAgICAgICAgICB7CgoKCiAgICAgICAgICAgICAgICBDVkNMUG9pbnQgb0ludmFsaWRQb2lu dCggLTEuMCwgLTEuMCwgLTEuMCApOwoKICAgICAgICAgICAgICAgIGludDMyIG4zMk51bWJlck9m UG9pbnRzVG9JbnNlcnQgPSBzdGxDaGFpblRvSW5zZXJ0LnNpemUoKSAtIDE7CgoKCgoKCiAgICAg ICAgICAgICAgICBTaGFwZUl0ZXItPmluc2VydCggU2hhcGVJdGVyLT5iZWdpbigpLCBuMzJOdW1i ZXJPZlBvaW50c1RvSW5zZXJ0LCBvSW52YWxpZFBvaW50ICk7CgoKCiAgICAgICAgICAgICAgICBD VkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yX3RwOjppdGVyYXRvciBTb3VyY2VWZXJ0ZXhJdGVyID0g c3RsQ2hhaW5Ub0luc2VydC5lbmQoKSAtIDE7CgoKCiAgICAgICAgICAgICAgICBDVkNMUG9pbnQ6 OlZDTFBvaW50VmVjdG9yX3RwOjppdGVyYXRvciBUYXJnZXRWZXJ0ZXhJdGVyID0gU2hhcGVJdGVy LT5iZWdpbigpOwoKICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjMyTnVtYmVy T2ZQb2ludHNUb0luc2VydDsgaSsrKQogICAgICAgICAgICAgICAgewoKCgogICAgICAgICAgICAg ICAgICAgICpUYXJnZXRWZXJ0ZXhJdGVyID0gKlNvdXJjZVZlcnRleEl0ZXI7CgoKCiAgICAgICAg ICAgICAgICAgICAgU291cmNlVmVydGV4SXRlci0tOwoKCgogICAgICAgICAgICAgICAgICAgIFRh cmdldFZlcnRleEl0ZXIrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVy biAxOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAwOwp9CgoKCgoKCgpU Qm9vbCBWQ0xJbnNlcnRDaGFpbkludG9DaGFpbkxpc3QoIENWQ0xQb2ludDo6VkNMUG9pbnRWZWN0 b3JfdHAgJnN0bENoYWluVG9JbnNlcnQsIENWQ0xQb2ludDo6VkNMUG9pbnRWZWN0b3JMaXN0X3Rw ICZzdGxUYXJnZXRDaGFpbnMgKQp7CiAgICAgICAgaWYgKCFWQ0xJbnNlcnRDaGFpbkludG9DaGFp bkxpc3QoIHN0bENoYWluVG9JbnNlcnQsIHN0bFRhcmdldENoYWlucy5iZWdpbigpLCBzdGxUYXJn ZXRDaGFpbnMuZW5kKCkpKQogICAgICAgIHsKCgoKICAgICAgICAgICAgc3RsVGFyZ2V0Q2hhaW5z LnB1c2hfYmFjayggc3RsQ2hhaW5Ub0luc2VydCApOwogICAgICAgICAgICByZXR1cm4gMDsKICAg ICAgICB9CiAgICAgICAgZWxzZSByZXR1cm4gMTsKfQojIDUzNjIgInZlY2NsZWFuLmNwcCIKVEJv b2wgVkNMQ29tcGFjdENoYWlucyggQ1ZDTFBvaW50OjpWQ0xQb2ludFZlY3Rvckxpc3RfdHAgJnN0 bFZlY3Rvck9mQ2hhaW5zICkKewogICAgICAgIGlmIChzdGxWZWN0b3JPZkNoYWlucy5zaXplKCkg PCAyKSByZXR1cm4gMDsKICAgICAgICBUQm9vbCBiUmV0dXJuVmFsdWUgPSAwOwoKICAgICAgICBD VkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yTGlzdF90cDo6aXRlcmF0b3IgU2hhcGVJdGVyOwogICAg ICAgIFNoYXBlSXRlciA9IHN0bFZlY3Rvck9mQ2hhaW5zLmVuZCgpIC0xOwoKICAgICAgICBkbwog ICAgICAgIHsKICAgICAgICAgICAgaWYgKFZDTEluc2VydENoYWluSW50b0NoYWluTGlzdCggKlNo YXBlSXRlciwgc3RsVmVjdG9yT2ZDaGFpbnMuYmVnaW4oKSwgU2hhcGVJdGVyICkpCiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgIHN0bFZlY3Rvck9mQ2hhaW5zLmVyYXNlKCBTaGFwZUl0ZXIg KTsKICAgICAgICAgICAgICAgIGJSZXR1cm5WYWx1ZSA9IDE7CiAgICAgICAgICAgIH0KCiAgICAg ICAgICAgIFNoYXBlSXRlci0tOwoKICAgICAgICB9IHdoaWxlIChTaGFwZUl0ZXIgIT0gc3RsVmVj dG9yT2ZDaGFpbnMuYmVnaW4oKSk7CiAgICAgICAgcmV0dXJuIGJSZXR1cm5WYWx1ZTsKfQoKCnN0 YXRpYyBUQm9vbCBDb21wYXJlVXBBbmdsZSggQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkX3RwIG5TaGFw ZTEsIENWQ0xTaGFwZTo6VkNMU2hhcGVJZF90cCBuU2hhcGUyICkKewogICAgICAgIENWQ0xTaGFw ZSAqb1NoYXBlMTsKICAgICAgICBDVkNMU2hhcGVGYWN0b3J5OjpHZXRBU2hhcGUoIG9TaGFwZTEs IG5TaGFwZTEgKTsKICAgICAgICBDVkNMU2hhcGUgKm9TaGFwZTI7CiAgICAgICAgQ1ZDTFNoYXBl RmFjdG9yeTo6R2V0QVNoYXBlKCBvU2hhcGUyLCBuU2hhcGUyICk7CgogICAgICAgIHJldHVybiAo VkNMREJMQ29tcCggb1NoYXBlMS0+R2V0VXBBbmdsZSgpLCBvU2hhcGUyLT5HZXRVcEFuZ2xlKCkp ID09IDEpOwp9CiMgNTQ2MiAidmVjY2xlYW4uY3BwIgp2b2lkIFZDTEludGVyc2VjdCggQ1ZDTE5v ZGVUYWJsZSAmb05vZGVUYWJsZSwgSU1QUHJvZ3Jlc3NGdW5jIHBmblByb2dyZXNzLCB2b2lkICpw UHJvZ3Jlc3NBcmcgKQp7CgoKCgogICAgICAgIENWQ0xTd2VlcCBvU3dlZXA7CgoKCgogICAgICAg IGlmIChwZm5Qcm9ncmVzcyA9PSBfX251bGwpCiAgICAgICAgICAgIHBmblByb2dyZXNzID0gSU1Q RHVtbXlQcm9ncmVzczsKCiAgICAgICAgaW50IG4gPSAwOwoKCgoKCgoKICAgICAgICBmb3IgKENW Q0xOb2RlICogcG9Ob2RlID0gb05vZGVUYWJsZS5GaXJzdCgpOwogICAgICAgICBwb05vZGUgIT0g X19udWxsOwogICAgICAgICBwb05vZGUgPSBvTm9kZVRhYmxlLk5leHQoICpwb05vZGUgKSkKICAg ICAgICB7CiMgNTUwMSAidmVjY2xlYW4uY3BwIgogICAgICAgICAgICBpZiAoKytuICUgMjAgPT0g MCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKCEoICpwZm5Qcm9ncmVzcyApICgg KytuIC8gZG91YmxlIChvTm9kZVRhYmxlLkdldE51bU5vZGVzKCkpLCAiSW50ZXJzZWN0aW5nIiwg cFByb2dyZXNzQXJnICkpCiAgICAgICAgICAgICAgICAgICAgSU1QRXJyb3IoIDMsIDEsICJVc2Vy IGNhbmNlbGxlZCIgKTsKICAgICAgICAgICAgfQoKCgoKICAgICAgICAgICAgVEJvb2wgYkludGVy c2VjdCA9IGZhbHNlOwogICAgICAgICAgICBDVkNMU2hhcGU6OlZDTFNoYXBlSWRfdHAgbkxlZnQs IG5SaWdodDsKCiAgICAgICAgICAgIGRvCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGJJ bnRlcnNlY3QgPSBmYWxzZTsKCgoKCiAgICAgICAgICAgICAgICBDVkNMU2hhcGU6OlZDTFNoYXBl SWRWZWN0b3JfdHAgb0Rvd25TaGlkcyA9IHBvTm9kZS0+R2V0RG93blNoaWRzKCk7CiAgICAgICAg ICAgICAgICB1bnNpZ25lZCBpbnQgblNpemUgPSBvRG93blNoaWRzLnNpemUoKTsKICAgICAgICAg ICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgblNpemU7IGorKykKICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBvU3dlZXAuUmVtb3ZlKCBvRG93blNoaWRzWyBq IF0gKTsKICAgICAgICAgICAgICAgIH0KCgoKCgoKICAgICAgICAgICAgICAgIG9Td2VlcC5GaW5k TmVpZ2hib3VycyggbkxlZnQsIG5SaWdodCwgcG9Ob2RlLT5HZXRQb2ludCgpKTsKCgoKCiAgICAg ICAgICAgICAgICBDVkNMU2hhcGU6OlZDTFNoYXBlSWRWZWN0b3JfdHAgb1VwU2hpZHM7CiAgICAg ICAgICAgICAgICBvVXBTaGlkcyA9IHBvTm9kZS0+R2V0VXBTaGlkcygpOwoKCgoKCiAgICAgICAg ICAgICAgICBzb3J0KCBvVXBTaGlkcy5iZWdpbigpLCBvVXBTaGlkcy5lbmQoKSwgQ29tcGFyZVVw QW5nbGUgKTsKCgoKCgogICAgICAgICAgICAgICAgQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkVmVjdG9y X3RwIEw7CiAgICAgICAgICAgICAgICBpZiAobkxlZnQgIT0gVkNMTlVMTFNoYXBlSWQpCiAgICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTC5wdXNoX2JhY2soIG5MZWZ0ICk7CiAg ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgY29weSggb1VwU2hpZHMuYmVnaW4oKSwg b1VwU2hpZHMuZW5kKCksIGJhY2tfaW5zZXJ0ZXIoIEwgKSk7CgogICAgICAgICAgICAgICAgaWYg KG5SaWdodCAhPSBWQ0xOVUxMU2hhcGVJZCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgICAgICBMLnB1c2hfYmFjayggblJpZ2h0ICk7CiAgICAgICAgICAgICAgICB9CgoKCgoKICAg ICAgICAgICAgICAgIG5TaXplID0gTC5zaXplKCk7CiAgICAgICAgICAgICAgICBmb3IgKHVuc2ln bmVkIGludCBpID0gMTsgaSA8IG5TaXplOyBpKyspCiAgICAgICAgICAgICAgICB7CgoKCgogICAg ICAgICAgICAgICAgICAgIENWQ0xTaGFwZSAqcG9MZWZ0OwogICAgICAgICAgICAgICAgICAgIENW Q0xTaGFwZUZhY3Rvcnk6OkdldEFTaGFwZSggcG9MZWZ0LCBMWyBpIC0gMSBdICk7CiAgICAgICAg ICAgICAgICAgICAgQ1ZDTFNoYXBlICpwb0N1cnI7CiAgICAgICAgICAgICAgICAgICAgQ1ZDTFNo YXBlRmFjdG9yeTo6R2V0QVNoYXBlKCBwb0N1cnIsIExbIGkgXSApOwoKCgoKICAgICAgICAgICAg ICAgICAgICBDVkNMUG9pbnQgb1doZXJlOwogICAgICAgICAgICAgICAgICAgIGlmIChwb0xlZnQt PkludGVyc2VjdHMoIG9XaGVyZSwgKnBvQ3VyciApKQogICAgICAgICAgICAgICAgICAgIHsKCgoK CgogICAgICAgICAgICAgICAgICAgICAgICBvTm9kZVRhYmxlLlJlbW92ZSggcG9MZWZ0LT5HZXRJ ZCgpKTsKCgoKCiAgICAgICAgICAgICAgICAgICAgICAgIENWQ0xTaGFwZTo6VkNMU2hhcGVJZFZl Y3Rvcl90cCBvQnJva2VuU2hhcGUgPSBwb0xlZnQtPkJyZWFrQXRQb2ludCggb1doZXJlICk7CgoK CgogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgblNpemUgPSBvQnJva2VuU2hh cGUuc2l6ZSgpOwogICAgICAgICAgICAgICAgICAgICAgICBiSW50ZXJzZWN0ID0gblNpemUgPiAx OwogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBm b3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8IG5TaXplOyBqKyspCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvTm9kZVRh YmxlLkFkZCggb0Jyb2tlblNoYXBlWyBqIF0gKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9Td2VlcC5SZW1vdmUo IG9Ccm9rZW5TaGFwZVsgaiBdICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CgoK CgoKICAgICAgICAgICAgICAgICAgICAgICAgb05vZGVUYWJsZS5SZW1vdmUoIHBvQ3Vyci0+R2V0 SWQoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICBvQnJva2VuU2hhcGUgPSBwb0N1cnItPkJy ZWFrQXRQb2ludCggb1doZXJlICk7CiAgICAgICAgICAgICAgICAgICAgICAgIG5TaXplID0gb0Jy b2tlblNoYXBlLnNpemUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgYkludGVyc2VjdCA9IGJJ bnRlcnNlY3QgfHwgblNpemUgPiAxOwogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8IG5TaXplOyBq KyspCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKCFvTm9kZVRhYmxlLkFkZCggb0Jyb2tlblNoYXBlWyBqIF0gKSkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG9Td2VlcC5SZW1vdmUoIG9Ccm9rZW5TaGFwZVsgaiBdICk7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg fQoKICAgICAgICAgICAgfSB3aGlsZSAoYkludGVyc2VjdCk7CgoKICAgICAgICAgICAgQ1ZDTFNo YXBlOjpWQ0xTaGFwZUlkVmVjdG9yX3RwIG9VcFNoaWRzOwoKCgoKCiAgICAgICAgICAgIG9VcFNo aWRzID0gcG9Ob2RlLT5HZXRVcFNoaWRzKCk7CgogICAgICAgICAgICBpZiAoKCBvVXBTaGlkcy5z aXplKCkgPT0gMCApICYmICggbkxlZnQgIT0gVkNMTlVMTFNoYXBlSWQgKSkKICAgICAgICAgICAg ewogICAgICAgICAgICAgICAgQ1ZDTFNoYXBlICpwb1NoYXBlOwogICAgICAgICAgICAgICAgQ1ZD TFNoYXBlRmFjdG9yeTo6R2V0QVNoYXBlKCBwb1NoYXBlLCBuTGVmdCApOwogICAgICAgICAgICAg ICAgaWYgKHBvU2hhcGUtPklzT24oIHBvTm9kZS0+R2V0UG9pbnQoKSkgJiYKICAgICAgICAgICAg ICAgICggcG9Ob2RlLT5HZXRQb2ludCgpICE9IHBvU2hhcGUtPkdldEZpcnN0KCkpICYmCiAgICAg ICAgICAgICAgICAoIHBvTm9kZS0+R2V0UG9pbnQoKSAhPSBwb1NoYXBlLT5HZXRMYXN0KCkpKQog ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG9Ob2RlVGFibGUuUmVtb3ZlKCBu TGVmdCApOwogICAgICAgICAgICAgICAgICAgIENWQ0xTaGFwZTo6VkNMU2hhcGVJZFZlY3Rvcl90 cCBvQnJva2VuU2hhcGUgPSBwb1NoYXBlLT5CcmVha0F0UG9pbnQoIHBvTm9kZS0+R2V0UG9pbnQo KSk7CiAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG5TaXplID0gb0Jyb2tlblNoYXBl LnNpemUoKTsKICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8 IG5TaXplOyBqKyspCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg ICBpZiAoIW9Ob2RlVGFibGUuQWRkKCBvQnJva2VuU2hhcGVbIGogXSApKQogICAgICAgICAgICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvU3dlZXAuUmVtb3ZlKCBv QnJva2VuU2hhcGVbIGogXSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgoKCgogICAgICAgICAg ICBDVkNMU2hhcGU6OlZDTFNoYXBlSWRWZWN0b3JfdHAgb0Rvd25TaGlkcyA9IHBvTm9kZS0+R2V0 RG93blNoaWRzKCk7CgogICAgICAgICAgICB1bnNpZ25lZCBpbnQgblNpemUgPSBvRG93blNoaWRz LnNpemUoKTsKICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCBuU2l6ZTsg aisrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBvU3dlZXAuUmVtb3ZlKCBvRG93blNo aWRzWyBqIF0gKTsKICAgICAgICAgICAgfQoKCgoKICAgICAgICAgICAgb1VwU2hpZHMgPSBwb05v ZGUtPkdldFVwU2hpZHMoKTsKICAgICAgICAgICAgc29ydCggb1VwU2hpZHMuYmVnaW4oKSwgb1Vw U2hpZHMuZW5kKCksIENvbXBhcmVVcEFuZ2xlICk7CiAgICAgICAgICAgIG9Td2VlcC5BZGQoIG9V cFNoaWRzICk7CiAgICAgICAgfQojIDU2OTEgInZlY2NsZWFuLmNwcCIKfQojIDU3NTQgInZlY2Ns ZWFuLmNwcCIKY2xhc3MgQ0RhbmdsZUZpeAp7CiAgcHVibGljOgoKCgoKICAgIENEYW5nbGVGaXgg KENWQ0xOb2RlICpwb05vZGUsIENWQ0xTaGFwZTo6VkNMU2hhcGVJZF90cCBuSWQsIGNvbnN0IENW Q0xQb2ludCAmb0Nsb3NlKTsKCgoKCiAgICBDRGFuZ2xlRml4IChjb25zdCBDRGFuZ2xlRml4ICZv Rml4KTsKCgoKCiAgICBDRGFuZ2xlRml4KCk7CgoKCgogICAgQ1ZDTE5vZGUgKm1fcG9EYW5nbGVO b2RlOwoKCgoKICAgIENWQ0xTaGFwZTo6VkNMU2hhcGVJZF90cCBtX3RhcmdldFNoaWQ7CgoKCgog ICAgQ1ZDTFBvaW50IG1fdGFyZ2V0UG9pbnQ7CgoKCgoKICAgIGZyaWVuZCBUQm9vbCBvcGVyYXRv cjwgKCBjb25zdCBDRGFuZ2xlRml4ICZvRGFuZ2xlMSwgY29uc3QgQ0RhbmdsZUZpeCAmb0Rhbmds ZTIgKTsKICAgIGZyaWVuZCBUQm9vbCBvcGVyYXRvciA9PSAoIGNvbnN0IENEYW5nbGVGaXggJm9E YW5nbGUxLCBjb25zdCBDRGFuZ2xlRml4ICZvRGFuZ2xlMiApOwoKICAgIHR5cGVkZWYgdmVjdG9y PENEYW5nbGVGaXg+IERhbmdsZUZpeFZlY3Rvcl90cDsKfTsKCgpDRGFuZ2xlRml4OjpDRGFuZ2xl Rml4IChDVkNMTm9kZSAqcG9Ob2RlLCBDVkNMU2hhcGU6OlZDTFNoYXBlSWRfdHAgbklkLCBjb25z dCBDVkNMUG9pbnQgJm9DbG9zZSkKewogICAgICAgIG1fcG9EYW5nbGVOb2RlID0gcG9Ob2RlOwog ICAgICAgIG1fdGFyZ2V0U2hpZCA9IG5JZDsKICAgICAgICBtX3RhcmdldFBvaW50ID0gb0Nsb3Nl Owp9CgoKQ0RhbmdsZUZpeDo6Q0RhbmdsZUZpeCAoY29uc3QgQ0RhbmdsZUZpeCAmb0ZpeCkKewog ICAgICAgIG1fcG9EYW5nbGVOb2RlID0gb0ZpeC5tX3BvRGFuZ2xlTm9kZTsKICAgICAgICBtX3Rh cmdldFNoaWQgPSBvRml4Lm1fdGFyZ2V0U2hpZDsKICAgICAgICBtX3RhcmdldFBvaW50ID0gb0Zp eC5tX3RhcmdldFBvaW50Owp9CgoKQ0RhbmdsZUZpeDo6Q0RhbmdsZUZpeCgpCnsKICAgICAgICBt X3BvRGFuZ2xlTm9kZSA9IF9fbnVsbDsKICAgICAgICBtX3RhcmdldFNoaWQgPSAtMTsKICAgICAg ICBtX3RhcmdldFBvaW50ID0gQ1ZDTFBvaW50ICgxLjc5NzY5MzEzNDg2MjMxNTdFKzMwOCwgMS43 OTc2OTMxMzQ4NjIzMTU3RSszMDgpOwp9CgoKVEJvb2wgb3BlcmF0b3I8ICggY29uc3QgQ0Rhbmds ZUZpeCAmb0RhbmdsZTEsIGNvbnN0IENEYW5nbGVGaXggJm9EYW5nbGUyICkKewogICAgICAgIHJl dHVybiBvRGFuZ2xlMS5tX3BvRGFuZ2xlTm9kZS0+R2V0UG9pbnQoKSA8IG9EYW5nbGUyLm1fcG9E YW5nbGVOb2RlLT5HZXRQb2ludCgpOwp9CgoKVEJvb2wgb3BlcmF0b3IgPT0gKCBjb25zdCBDRGFu Z2xlRml4ICZvRGFuZ2xlMSwgY29uc3QgQ0RhbmdsZUZpeCAmb0RhbmdsZTIgKQp7CiAgICAgICAg cmV0dXJuIG9EYW5nbGUxLm1fcG9EYW5nbGVOb2RlLT5HZXRQb2ludCgpID09IG9EYW5nbGUyLm1f cG9EYW5nbGVOb2RlLT5HZXRQb2ludCgpOwp9CiMgNTg1NiAidmVjY2xlYW4uY3BwIgpzdGF0aWMg Q1ZDTFNoYXBlOjpWQ0xTaGFwZUlkVmVjdG9yX3RwIEZpbmRDbG9zZVNoYXBlcyggY29uc3QgQ1ZD TE5vZGUgKnBvTm9kZSwgY29uc3QgQ1ZDTFN3ZWVwICZvU3dlZXAsIENWQ0xOb2RlVGFibGUgJm9O b2RlVGFibGUgKQp7CgoKCiAgICAgICAgQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkVmVjdG9yX3RwIG9D bG9zZVNoYXBlczsKCgoKCiAgICAgICAgKElNUENoZWNrRXhwcigicG9Ob2RlLT5TaGFwZUNvdW50 KCkgPT0gMSIsICJ2ZWNjbGVhbi5jcHAiLCA1ODY2KSwgKHBvTm9kZS0+U2hhcGVDb3VudCgpID09 IDEpID8gKDApIDogX0lNUEFzc2VydCgicG9Ob2RlLT5TaGFwZUNvdW50KCkgPT0gMSIsInZlY2Ns ZWFuLmNwcCIsNTg2NikpOwogICAgICAgIENWQ0xTaGFwZTo6VkNMU2hhcGVJZFZlY3Rvcl90cCBv U2hpZHMgPSBwb05vZGUtPkdldFNoaWRzKCk7CiAgICAgICAgQ1ZDTFNoYXBlICpwb0RhbmdsZTsK ICAgICAgICBDVkNMU2hhcGVGYWN0b3J5OjpHZXRBU2hhcGUoIHBvRGFuZ2xlLCBvU2hpZHNbIDAg XSApOwogICAgICAgIGRvdWJsZSBkZkRhbmdsZVRvbCA9IHBvRGFuZ2xlLT5HZXRTaGFwZVByb3Bz KCkubV9kZkRhbmdsZVRvbDsKCgoKCgogICAgICAgIENWQ0xSZWN0IG9EYW5nbGVSZWN0KCBwb05v ZGUtPkdldFBvaW50KCkueCAtIGRmRGFuZ2xlVG9sLAogICAgICAgICAgICAgICAgICBwb05vZGUt PkdldFBvaW50KCkueSAtIGRmRGFuZ2xlVG9sLAogICAgICAgICAgICAgICAgICBwb05vZGUtPkdl dFBvaW50KCkueCArIGRmRGFuZ2xlVG9sLAogICAgICAgICAgICAgICAgICBwb05vZGUtPkdldFBv aW50KCkueSArIGRmRGFuZ2xlVG9sICk7CgoKCgoKICAgICAgICBvU3dlZXAuRmluZEFsbCggb1No aWRzICk7CgogICAgICAgIHVuc2lnbmVkIGludCBuU2l6ZSA9IG9TaGlkcy5zaXplKCk7CiAgICAg ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBuU2l6ZTsgaSsrKQogICAgICAgIHsKCgoK CiAgICAgICAgICAgIENWQ0xTaGFwZSAqcG9TaGFwZTsKICAgICAgICAgICAgQ1ZDTFNoYXBlRmFj dG9yeTo6R2V0QVNoYXBlKCBwb1NoYXBlLCBvU2hpZHNbIGkgXSApOwogICAgICAgICAgICBpZiAo KCBwb1NoYXBlLT5HZXRJZCgpICE9IHBvRGFuZ2xlLT5HZXRJZCgpKSAmJiBwb1NoYXBlLT5HZXRS YW5nZVJlY3QoKS5JbnRlcnNlY3RzKCBvRGFuZ2xlUmVjdCApKQogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICBvQ2xvc2VTaGFwZXMucHVzaF9iYWNrKCBvU2hpZHNbIGkgXSApOwogICAgICAg ICAgICB9CiAgICAgICAgfQoKCgoKCgoKICAgICAgICBDVkNMTm9kZSAqcG9DdXJyZW50Tm9kZSA9 ICggQ1ZDTE5vZGUgKiApIHBvTm9kZTsKICAgICAgICB3aGlsZSAoKCBwb0N1cnJlbnROb2RlLT5H ZXRQb2ludCgpLnkgPiBwb05vZGUtPkdldFBvaW50KCkueSAtIGRmRGFuZ2xlVG9sICkgJiYKICAg ICAgICAgICAgKCBwb0N1cnJlbnROb2RlICE9IG9Ob2RlVGFibGUuRmlyc3QoKSkpCiAgICAgICAg ewogICAgICAgICAgICBwb0N1cnJlbnROb2RlID0gb05vZGVUYWJsZS5QcmV2KCAqcG9DdXJyZW50 Tm9kZSApOwogICAgICAgIH0KCiAgICAgICAgd2hpbGUgKCggcG9DdXJyZW50Tm9kZSAhPSBfX251 bGwgKSAmJgogICAgICAgICAgICAoIHBvQ3VycmVudE5vZGUtPkdldFBvaW50KCkueSA8IHBvTm9k ZS0+R2V0UG9pbnQoKS55ICsgZGZEYW5nbGVUb2wgKSkKICAgICAgICB7CgoKCiAgICAgICAgICAg IG9TaGlkcyA9IHBvQ3VycmVudE5vZGUtPkdldFNoaWRzKCk7CiAgICAgICAgICAgIHVuc2lnbmVk IGludCBuU2l6ZSA9IG9TaGlkcy5zaXplKCk7CiAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50 IGkgPSAwOyBpIDwgblNpemU7IGkrKykKICAgICAgICAgICAgewoKCgoKICAgICAgICAgICAgICAg IENWQ0xTaGFwZSAqcG9TaGFwZTsKICAgICAgICAgICAgICAgIENWQ0xTaGFwZUZhY3Rvcnk6Okdl dEFTaGFwZSggcG9TaGFwZSwgb1NoaWRzWyBpIF0gKTsKICAgICAgICAgICAgICAgIGlmICgoIHBv U2hhcGUtPkdldElkKCkgIT0gcG9EYW5nbGUtPkdldElkKCkpICYmIHBvU2hhcGUtPkdldFJhbmdl UmVjdCgpLkludGVyc2VjdHMoIG9EYW5nbGVSZWN0ICkpCiAgICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICAgICAgb0Nsb3NlU2hhcGVzLnB1c2hfYmFjayggb1NoaWRzWyBpIF0gKTsKICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgcG9DdXJyZW50Tm9kZSA9 IG9Ob2RlVGFibGUuTmV4dCggKnBvQ3VycmVudE5vZGUgKTsKICAgICAgICB9CgoKCgogICAgICAg IHNvcnQoIG9DbG9zZVNoYXBlcy5iZWdpbigpLCBvQ2xvc2VTaGFwZXMuZW5kKCkpOwogICAgICAg IENWQ0xTaGFwZTo6VkNMU2hhcGVJZFZlY3Rvcl90cDo6aXRlcmF0b3IgaXQgPSB1bmlxdWUoIG9D bG9zZVNoYXBlcy5iZWdpbigpLCBvQ2xvc2VTaGFwZXMuZW5kKCkpOwogICAgICAgIG9DbG9zZVNo YXBlcy5yZXNpemUoIGl0IC0gb0Nsb3NlU2hhcGVzLmJlZ2luKCkpOwogICAgICAgIHJldHVybiBv Q2xvc2VTaGFwZXM7Cn0KIyA1OTcwICJ2ZWNjbGVhbi5jcHAiCnN0YXRpYyBUQm9vbCBTaW1wbGVQ YXRoVG9Ob2RlKCBjb25zdCBDVkNMTm9kZVRhYmxlICZvTm9kZVRhYmxlLAogICAgICAgICAgICAg ICAgICAgY29uc3QgQ1ZDTE5vZGUgKnBvU3RhcnROb2RlLAogICAgICAgICAgICAgICAgICAgY29u c3QgQ1ZDTE5vZGUgKnBvVGFyZ2V0Tm9kZSApCnsKICAgICAgICAoSU1QQ2hlY2tFeHByKCJwb1N0 YXJ0Tm9kZS0+SXNEYW5nbGUoKSIsICJ2ZWNjbGVhbi5jcHAiLCA1OTc0KSwgKHBvU3RhcnROb2Rl LT5Jc0RhbmdsZSgpKSA/ICgwKSA6IF9JTVBBc3NlcnQoInBvU3RhcnROb2RlLT5Jc0RhbmdsZSgp IiwidmVjY2xlYW4uY3BwIiw1OTc0KSk7CiAgICAgICAgQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkVmVj dG9yX3RwIG9TaGlkcyA9IHBvU3RhcnROb2RlLT5HZXRTaGlkcygpOwogICAgICAgIChJTVBDaGVj a0V4cHIoIm9TaGlkcy5zaXplKCkgPT0gMSIsICJ2ZWNjbGVhbi5jcHAiLCA1OTc2KSwgKG9TaGlk cy5zaXplKCkgPT0gMSkgPyAoMCkgOiBfSU1QQXNzZXJ0KCJvU2hpZHMuc2l6ZSgpID09IDEiLCJ2 ZWNjbGVhbi5jcHAiLDU5NzYpKTsKCiAgICAgICAgQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkX3RwIG9T aGlkID0gb1NoaWRzWyAwIF07CiAgICAgICAgQ1ZDTFNoYXBlICpwb1NoYXBlOwogICAgICAgIENW Q0xTaGFwZUZhY3Rvcnk6OkdldEFTaGFwZSggcG9TaGFwZSwgb1NoaWQgKTsKCgoKCgogICAgICAg IENWQ0xOb2RlICpwb05vZGUgPSAoKChwb1N0YXJ0Tm9kZSkgPT0gKG9Ob2RlVGFibGUuRmluZCgg cG9TaGFwZS0+R2V0Rmlyc3QoKSkpKSA/IChvTm9kZVRhYmxlLkZpbmQoIHBvU2hhcGUtPkdldExh c3QoKSkpIDogKG9Ob2RlVGFibGUuRmluZCggcG9TaGFwZS0+R2V0Rmlyc3QoKSkpKTsKCgoKCgog ICAgICAgIHdoaWxlICgoIHBvTm9kZS0+U2hhcGVDb3VudCgpID09IDIgKSAmJgogICAgICAgICAg ICAhKCAqcG9Ob2RlID09ICpwb1N0YXJ0Tm9kZSApICYmCiAgICAgICAgICAgICEoICpwb05vZGUg PT0gKnBvVGFyZ2V0Tm9kZSApKQogICAgICAgIHsKICAgICAgICAgICAgb1NoaWQgPSAoKChvU2hp ZCkgPT0gKHBvTm9kZS0+R2V0U2hpZHMoKVsgMCBdKSkgPyAocG9Ob2RlLT5HZXRTaGlkcygpWyAx IF0pIDogKHBvTm9kZS0+R2V0U2hpZHMoKVsgMCBdKSk7CiAgICAgICAgICAgIENWQ0xTaGFwZUZh Y3Rvcnk6OkdldEFTaGFwZSggcG9TaGFwZSwgb1NoaWQgKTsKICAgICAgICAgICAgcG9Ob2RlID0g KCgocG9Ob2RlKSA9PSAob05vZGVUYWJsZS5GaW5kKCBwb1NoYXBlLT5HZXRGaXJzdCgpKSkpID8g KG9Ob2RlVGFibGUuRmluZCggcG9TaGFwZS0+R2V0TGFzdCgpKSkgOiAob05vZGVUYWJsZS5GaW5k KCBwb1NoYXBlLT5HZXRGaXJzdCgpKSkpOwogICAgICAgIH0KCgoKCiAgICAgICAgaWYgKCpwb05v ZGUgPT0gKnBvVGFyZ2V0Tm9kZSkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwog ICAgICAgIH0KCgoKCiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIGZh bHNlOwogICAgICAgIH0KfQojIDYwMjUgInZlY2NsZWFuLmNwcCIKc3RhdGljIHZvaWQgRmluZENs b3Nlc3RTaGFwZSggQ1ZDTFBvaW50ICZvQ2xvc2VzdFBvaW50LCBkb3VibGUgJmRmQ2xvc2VzdERp c3QsIENWQ0xTaGFwZTo6VkNMU2hhcGVJZF90cCAmbkNsb3Nlc3RTaGFwZSwKICAgICAgICAgICAg ICAgICAgQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkVmVjdG9yX3RwIG9DbG9zZVNoYXBlcywgY29uc3Qg Q1ZDTFBvaW50ICZvRnJvbVdoZXJlLCBjb25zdCBDVkNMTm9kZVRhYmxlICZvTm9kZVRhYmxlICkK ewoKCgogICAgICAgIG5DbG9zZXN0U2hhcGUgPSBWQ0xOVUxMU2hhcGVJZDsKICAgICAgICBvQ2xv c2VzdFBvaW50ID0gQ1ZDTFBvaW50ICgxLjc5NzY5MzEzNDg2MjMxNTdFKzMwOCwgMS43OTc2OTMx MzQ4NjIzMTU3RSszMDgpOwogICAgICAgIGRmQ2xvc2VzdERpc3QgPSAxLjc5NzY5MzEzNDg2MjMx NTdFKzMwODsKCgoKCgogICAgICAgIHVuc2lnbmVkIGludCBuU2l6ZSA9IG9DbG9zZVNoYXBlcy5z aXplKCk7CiAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBuU2l6ZTsgaSsrKQog ICAgICAgIHsKICAgICAgICAgICAgQ1ZDTFBvaW50IG9DbG9zZVBvaW50OwogICAgICAgICAgICBD VkNMU2hhcGUgKnBvU2hhcGU7CiAgICAgICAgICAgIENWQ0xTaGFwZUZhY3Rvcnk6OkdldEFTaGFw ZSggcG9TaGFwZSwgb0Nsb3NlU2hhcGVzWyBpIF0gKTsKICAgICAgICAgICAgZG91YmxlIGRmRGlz dCA9IHBvU2hhcGUtPkdldERpc3RhbmNlRnJvbSggb0Nsb3NlUG9pbnQsIG9Gcm9tV2hlcmUgKTsK CgoKCiAgICAgICAgICAgIGlmIChkZkRpc3QgPCBkZkNsb3Nlc3REaXN0KQogICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICBDVkNMTm9kZSAqcG9DbG9zZU5vZGUgPSBvTm9kZVRhYmxlLkZpbmQo IG9DbG9zZVBvaW50ICk7CiAgICAgICAgICAgICAgICBDVkNMTm9kZSAqcG9EYW5nbGVOb2RlID0g b05vZGVUYWJsZS5GaW5kKCBvRnJvbVdoZXJlICk7CgoKCgoKICAgICAgICAgICAgICAgIGlmICgo IHBvQ2xvc2VOb2RlID09IF9fbnVsbCApIHx8ICggIVNpbXBsZVBhdGhUb05vZGUoIG9Ob2RlVGFi bGUsIHBvRGFuZ2xlTm9kZSwgcG9DbG9zZU5vZGUgKSkpCiAgICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICAgICAgb0Nsb3Nlc3RQb2ludCA9IG9DbG9zZVBvaW50OwogICAgICAgICAgICAg ICAgICAgIG5DbG9zZXN0U2hhcGUgPSBwb1NoYXBlLT5HZXRJZCgpOwogICAgICAgICAgICAgICAg ICAgIGRmQ2xvc2VzdERpc3QgPSBkZkRpc3Q7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg IH0KICAgICAgICB9Cn0KIyA2MDc3ICJ2ZWNjbGVhbi5jcHAiCnN0YXRpYyBUQm9vbCBTaG91bGRT bmFwRGFuZ2xlKCBjb25zdCBDVkNMU2hhcGUgKnBvRGFuZ2xlLCBDVkNMUG9pbnQgb0VuZFBvaW50 LCBDVkNMUG9pbnQgb1NuYXBQb2ludCApCnsKICAgICAgICBDVkNMUG9pbnQgb1N0YXJ0UG9pbnQ7 CgoKCgoKICAgICAgICBpZiAob0VuZFBvaW50ID09IHBvRGFuZ2xlLT5HZXRGaXJzdCgpKQogICAg ICAgIHsKICAgICAgICAgICAgb1N0YXJ0UG9pbnQgPSBwb0RhbmdsZS0+R2V0U2Vjb25kKCk7CiAg ICAgICAgfQoKICAgICAgICBlbHNlIGlmIChvRW5kUG9pbnQgPT0gcG9EYW5nbGUtPkdldExhc3Qo KSkKICAgICAgICB7CiAgICAgICAgICAgIG9TdGFydFBvaW50ID0gcG9EYW5nbGUtPkdldFNlY29u ZFRvTGFzdCgpOwogICAgICAgIH0KCgoKCgogICAgICAgIGRvdWJsZSBkZkFuZ2xlID0gVkNMQ29t cHV0ZUFuZ2xlKCBvU3RhcnRQb2ludCwgb0VuZFBvaW50LCBvU25hcFBvaW50ICk7CgogICAgICAg IHJldHVybiAoKFZDTERCTENvbXAoKDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzRTAgLyAyLjAp LCBkZkFuZ2xlKSA8PSAwKSAmJiAoVkNMREJMQ29tcChkZkFuZ2xlLCAoMy4xNDE1OTI2NTM1ODk3 OTMyMzg0NjI2NDNFMCAqIDMuMCAvIDIuMCkpIDw9IDApKTsKfQoKCgoKCgpzdGF0aWMgVEJvb2wg Q29tcGFyZVNoaWRzKCBjb25zdCBDRGFuZ2xlRml4ICZvRml4MSwgY29uc3QgQ0RhbmdsZUZpeCAm b0ZpeDIgKQp7CiAgICAgICAgcmV0dXJuIG9GaXgxLm1fdGFyZ2V0U2hpZCA8IG9GaXgyLm1fdGFy Z2V0U2hpZDsKfQojIDYxMzYgInZlY2NsZWFuLmNwcCIKdm9pZCBWQ0xEYW5nbGUoIENWQ0xOb2Rl VGFibGUgJm9Ob2RlVGFibGUsIElNUFByb2dyZXNzRnVuYyBwZm5Qcm9ncmVzcywgdm9pZCAqcFBy b2dyZXNzQXJnICkKewoKICAgICAgICBDVkNMU3dlZXAgb1N3ZWVwOwoKICAgICAgICBDVkNMTm9k ZTo6VkNMTm9kZVNldF90cCBvUHJvY2Vzc2VkTm9kZXM7CiAgICAgICAgQ0RhbmdsZUZpeDo6RGFu Z2xlRml4VmVjdG9yX3RwIG9GaXhlczsKCiAgICAgICAgaWYgKHBmblByb2dyZXNzID09IF9fbnVs bCkKICAgICAgICAgICAgcGZuUHJvZ3Jlc3MgPSBJTVBEdW1teVByb2dyZXNzOwoKICAgICAgICBk b3VibGUgbk5vZGVzID0gb05vZGVUYWJsZS5HZXROdW1Ob2RlcygpOwogICAgICAgIGRvdWJsZSBu ID0gMC4wOwoKCgoKCgogICAgICAgIGZvciAoQ1ZDTE5vZGUgKiBwb05vZGUgPSBvTm9kZVRhYmxl LkZpcnN0KCk7CiAgICAgICAgIHBvTm9kZSAhPSBfX251bGw7CiAgICAgICAgIHBvTm9kZSA9IG9O b2RlVGFibGUuTmV4dCggKnBvTm9kZSApKQogICAgICAgIHsKCiAgICAgICAgICAgIGlmICghKCAq cGZuUHJvZ3Jlc3MgKSAoICsrbiAvIG5Ob2RlcywgIkZpeGluZyBkYW5nbGVzIiwgcFByb2dyZXNz QXJnICkpCiAgICAgICAgICAgICAgICBJTVBFcnJvciggMywgMSwgIlVzZXIgY2FuY2VsbGVkIiAp OwoKCgoKCgogICAgICAgICAgICBpZiAocG9Ob2RlLT5Jc0RhbmdsZSgpICYmICggb1Byb2Nlc3Nl ZE5vZGVzLmZpbmQoIHBvTm9kZS0+R2V0SWQoKSkgPT0gb1Byb2Nlc3NlZE5vZGVzLmVuZCgpKSkK ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkX3RwIGlE YW5nbGUgPSBwb05vZGUtPkdldFNoaWRzKClbIDAgXTsKICAgICAgICAgICAgICAgIENWQ0xTaGFw ZSAqcG9EYW5nbGU7CiAgICAgICAgICAgICAgICBDVkNMU2hhcGVGYWN0b3J5OjpHZXRBU2hhcGUo IHBvRGFuZ2xlLCBpRGFuZ2xlICk7CiAgICAgICAgICAgICAgICBDVkNMU2hhcGVQcm9wcyBvRGFu Z2xlUHJvcHMgPSBwb0RhbmdsZS0+R2V0U2hhcGVQcm9wcygpOwoKCgoKCgoKICAgICAgICAgICAg ICAgIENWQ0xTaGFwZTo6VkNMU2hhcGVJZFZlY3Rvcl90cCBvQ2xvc2VTaGFwZXMgPSBGaW5kQ2xv c2VTaGFwZXMoIHBvTm9kZSwgb1N3ZWVwLCBvTm9kZVRhYmxlICk7CgoKCgogICAgICAgICAgICAg ICAgQ1ZDTFBvaW50IG9DbG9zZXN0UG9pbnQ7CiAgICAgICAgICAgICAgICBkb3VibGUgZGZDbG9z ZXN0RGlzdDsKICAgICAgICAgICAgICAgIENWQ0xTaGFwZTo6VkNMU2hhcGVJZF90cCBpQ2xvc2Vz dFNoYXBlOwogICAgICAgICAgICAgICAgRmluZENsb3Nlc3RTaGFwZSggb0Nsb3Nlc3RQb2ludCwg ZGZDbG9zZXN0RGlzdCwgaUNsb3Nlc3RTaGFwZSwgb0Nsb3NlU2hhcGVzLCBwb05vZGUtPkdldFBv aW50KCksIG9Ob2RlVGFibGUgKTsKCgoKCgogICAgICAgICAgICAgICAgaWYgKCggZGZDbG9zZXN0 RGlzdCA8PSBvRGFuZ2xlUHJvcHMubV9kZkRhbmdsZVRvbCApICYmCiAgICAgICAgICAgICAgICBT aG91bGRTbmFwRGFuZ2xlKCBwb0RhbmdsZSwgcG9Ob2RlLT5HZXRQb2ludCgpLCBvQ2xvc2VzdFBv aW50ICkpCiAgICAgICAgICAgICAgICB7CgoKCiAgICAgICAgICAgICAgICAgICAgb0ZpeGVzLnB1 c2hfYmFjayggQ0RhbmdsZUZpeCAocG9Ob2RlLCBpQ2xvc2VzdFNoYXBlLCBvQ2xvc2VzdFBvaW50 KSk7CgoKCgogICAgICAgICAgICAgICAgICAgIENWQ0xOb2RlICpwb0Nsb3NlTm9kZSA9IG9Ob2Rl VGFibGUuRmluZCggb0Nsb3Nlc3RQb2ludCApOwoKICAgICAgICAgICAgICAgICAgICBpZiAocG9D bG9zZU5vZGUgIT0gX19udWxsKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg ICAgICAgICAgb1Byb2Nlc3NlZE5vZGVzLmluc2VydCggcG9DbG9zZU5vZGUtPkdldElkKCkpOwog ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKCgoK ICAgICAgICAgICAgQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkVmVjdG9yX3RwIG9TaGlkczsKICAgICAg ICAgICAgb1NoaWRzID0gcG9Ob2RlLT5HZXREb3duU2hpZHMoKTsKCiAgICAgICAgICAgIHVuc2ln bmVkIGludCBuU2l6ZSA9IG9TaGlkcy5zaXplKCk7CiAgICAgICAgICAgIGZvciAodW5zaWduZWQg aW50IGogPSAwOyBqIDwgblNpemU7IGorKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAg b1N3ZWVwLlJlbW92ZSggb1NoaWRzWyBqIF0gKTsKICAgICAgICAgICAgfQoKCgoKICAgICAgICAg ICAgb1NoaWRzID0gcG9Ob2RlLT5HZXRVcFNoaWRzKCk7CiAgICAgICAgICAgIHNvcnQoIG9TaGlk cy5iZWdpbigpLCBvU2hpZHMuZW5kKCksIENvbXBhcmVVcEFuZ2xlICk7CiAgICAgICAgICAgIG5T aXplID0gb1NoaWRzLnNpemUoKTsKICAgICAgICAgICAgb1N3ZWVwLkFkZCggb1NoaWRzICk7CgoK CgoKCiAgICAgICAgfQoKCgoKCiAgICAgICAgdW5zaWduZWQgaW50IG5TaXplID0gb0ZpeGVzLnNp emUoKTsKICAgICAgICB7CiAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg blNpemU7IGkrKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ1ZDTFNoYXBlOjpWQ0xT aGFwZUlkX3RwIGlEYW5nbGUgPSBvRml4ZXNbIGkgXS5tX3BvRGFuZ2xlTm9kZS0+R2V0U2hpZHMo KVsgMCBdOwogICAgICAgICAgICAgICAgQ1ZDTFNoYXBlICpwb0RhbmdsZTsKICAgICAgICAgICAg ICAgIENWQ0xTaGFwZUZhY3Rvcnk6OkdldEFTaGFwZSggcG9EYW5nbGUsIGlEYW5nbGUgKTsKICAg ICAgICAgICAgICAgIENWQ0xTaGFwZVByb3BzIG9EYW5nbGVQcm9wcyA9IHBvRGFuZ2xlLT5HZXRT aGFwZVByb3BzKCk7CgoKCgoKICAgICAgICAgICAgICAgIG9Ob2RlVGFibGUuUmVtb3ZlKCBpRGFu Z2xlICk7CgogICAgICAgICAgICAgICAgQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkVmVjdG9yX3RwIG9O ZXdTaGlkcyA9IHBvRGFuZ2xlLT5FeHRlbmRUbyggb0ZpeGVzWyBpIF0ubV90YXJnZXRQb2ludCwg b0ZpeGVzWyBpIF0ubV9wb0RhbmdsZU5vZGUtPkdldFBvaW50KCkpOwoKCgoKICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGludCBvTmV3U2l6ZSA9IG9OZXdTaGlkcy5zaXplKCk7CiAgICAgICAgICAg ICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8IG9OZXdTaXplOyBqKyspCiAgICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFvTm9kZVRhYmxlLkFkZCggb05ld1No aWRzWyBqIF0gKSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAg IENWQ0xTaGFwZUZhY3Rvcnk6OlJNQSggb05ld1NoaWRzWyBqIF0gKTsKICAgICAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgoKCgogICAg ICAgIHNvcnQoIG9GaXhlcy5iZWdpbigpLCBvRml4ZXMuZW5kKCksIENvbXBhcmVTaGlkcyApOwog ICAgICAgIENWQ0xQb2ludDo6VkNMUG9pbnRWZWN0b3JfdHAgb0JyZWFrUG9pbnRzOwogICAgICAg IENWQ0xTaGFwZTo6VkNMU2hhcGVJZF90cCBpU2hpZCA9ICggb0ZpeGVzLnNpemUoKSA+IDAgKSA/ IG9GaXhlc1sgMCBdLm1fdGFyZ2V0U2hpZCA6IC0xOwoKCgoKICAgICAgICBuU2l6ZSA9IG9GaXhl cy5zaXplKCk7CiAgICAgICAgewogICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg aSA8IG5TaXplOyBpKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChvRml4ZXNb IGkgXS5tX3RhcmdldFNoaWQgIT0gaVNoaWQpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAgICAgaWYgKG9CcmVha1BvaW50cy5zaXplKCkgPiAwKQogICAgICAgICAgICAgICAgICAg IHsKCgoKICAgICAgICAgICAgICAgICAgICAgICAgb05vZGVUYWJsZS5SZW1vdmUoIGlTaGlkICk7 CgoKCgoKICAgICAgICAgICAgICAgICAgICAgICAgQ1ZDTFNoYXBlICpwb1NoYXBlOwogICAgICAg ICAgICAgICAgICAgICAgICBDVkNMU2hhcGVGYWN0b3J5OjpHZXRBU2hhcGUoIHBvU2hhcGUsIGlT aGlkICk7CiAgICAgICAgICAgICAgICAgICAgICAgIENWQ0xTaGFwZTo6VkNMU2hhcGVJZFZlY3Rv cl90cCBvTmV3U2hpZHMgPSBwb1NoYXBlLT5CcmVha0F0UG9pbnRzKCBvQnJlYWtQb2ludHMgKTsK CgoKCgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8 IG9OZXdTaGlkcy5zaXplKCk7IGorKykKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKCFvTm9kZVRhYmxlLkFkZCggb05ld1NoaWRzWyBqIF0g KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBDVkNMU2hhcGVGYWN0b3J5OjpSTUEoIG9OZXdTaGlkc1sgaiBdICk7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAg ICAgICAgICAgICAgICAgIG9CcmVha1BvaW50cy5jbGVhcigpOwogICAgICAgICAgICAgICAgICAg ICAgICBpU2hpZCA9IG9GaXhlc1sgaSBdLm1fdGFyZ2V0U2hpZDsKICAgICAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgb0JyZWFrUG9pbnRzLnB1c2hf YmFjayggb0ZpeGVzWyBpIF0ubV90YXJnZXRQb2ludCApOwogICAgICAgICAgICB9CiAgICAgICAg fQoKICAgICAgICBpZiAob0JyZWFrUG9pbnRzLnNpemUoKSA+IDApCiAgICAgICAgewogICAgICAg ICAgICBvTm9kZVRhYmxlLlJlbW92ZSggaVNoaWQgKTsKCgoKCgogICAgICAgICAgICBDVkNMU2hh cGUgKnBvU2hhcGU7CiAgICAgICAgICAgIENWQ0xTaGFwZUZhY3Rvcnk6OkdldEFTaGFwZSggcG9T aGFwZSwgaVNoaWQgKTsKICAgICAgICAgICAgQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkVmVjdG9yX3Rw IG9OZXdTaGlkcyA9IHBvU2hhcGUtPkJyZWFrQXRQb2ludHMoIG9CcmVha1BvaW50cyApOwoKCgoK CiAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgb05ld1NoaWRzLnNpemUo KTsgaSsrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoIW9Ob2RlVGFibGUuQWRk KCBvTmV3U2hpZHNbIGkgXSApKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg IENWQ0xTaGFwZUZhY3Rvcnk6OlJNQSggb05ld1NoaWRzWyBpIF0gKTsKICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgfQogICAgICAgIH0KCgoKCgp9CiMgNjQwNyAidmVjY2xlYW4uY3BwIgp0 eXBlZGVmIHBhaXI8Q1ZDTFNoYXBlOjpWQ0xTaGFwZUlkVmVjdG9yX3RwLCBkb3VibGU+IENsaXBT aGFwZXM7CnR5cGVkZWYgdmVjdG9yPENsaXBTaGFwZXM+IENsaXBMaXN0OwoKdm9pZCBWQ0xDbGlw KCBDVkNMTm9kZVRhYmxlICZvTm9kZVRhYmxlLCBJTVBQcm9ncmVzc0Z1bmMgcGZuUHJvZ3Jlc3Ms IHZvaWQgKnBQcm9ncmVzc0FyZyApCnsKCiAgICAgICAgZG91YmxlIG5Ob2RlcyA9IG9Ob2RlVGFi bGUuR2V0TnVtTm9kZXMoKTsKICAgICAgICBkb3VibGUgbiA9IDAuMDsKCiAgICAgICAgaWYgKHBm blByb2dyZXNzID09IF9fbnVsbCkKICAgICAgICAgICAgcGZuUHJvZ3Jlc3MgPSBJTVBEdW1teVBy b2dyZXNzOwoKICAgICAgICBDbGlwTGlzdCBvQ2xpcExpc3Q7CgoKCgoKICAgICAgICBmb3IgKENW Q0xOb2RlICogcG9Ob2RlID0gb05vZGVUYWJsZS5GaXJzdCgpOyBwb05vZGUgIT0gX19udWxsOyBw b05vZGUgPSBvTm9kZVRhYmxlLk5leHQoICpwb05vZGUgKSkKICAgICAgICB7CgogICAgICAgICAg ICBpZiAoISggKnBmblByb2dyZXNzICkgKCArK24gLyBuTm9kZXMsICJDbGlwcGluZyIsIHBQcm9n cmVzc0FyZyApKQogICAgICAgICAgICAgICAgSU1QRXJyb3IoIDMsIDEsICJVc2VyIGNhbmNlbGxl ZCIgKTsKCgoKCgogICAgICAgICAgICBpZiAocG9Ob2RlLT5Jc0RhbmdsZSgpKQogICAgICAgICAg ICB7CgogICAgICAgICAgICAgICAgZG91YmxlIGRmQWNjdW11bGF0ZWRMZW5ndGggPSAwLjA7CiAg ICAgICAgICAgICAgICBkb3VibGUgZGZNaW5pbXVtVG9sbGVyYW5jZSA9IDEuNzk3NjkzMTM0ODYy MzE1N0UrMzA4OwogICAgICAgICAgICAgICAgQ1ZDTE5vZGUgKnBvQ3VycmVudE5vZGUgPSBwb05v ZGU7CiAgICAgICAgICAgICAgICBDVkNMU2hhcGU6OlZDTFNoYXBlSWRfdHAgRGFuZ2xlU2hhcGVJ ZCA9IFZDTE5VTExTaGFwZUlkOwogICAgICAgICAgICAgICAgQ1ZDTFNoYXBlICpwb0RhbmdsZVNo YXBlID0gX19udWxsOwogICAgICAgICAgICAgICAgQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkVmVjdG9y X3RwIFNoYXBlc0luRGFuZ2xlOwoKCgoKICAgICAgICAgICAgICAgIGRvCiAgICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgICAgQ1ZDTFNoYXBlOjpWQ0xTaGFwZUlkVmVjdG9yX3RwIFNo YXBlSWRzID0gcG9DdXJyZW50Tm9kZS0+R2V0U2hpZHMoKTsKICAgICAgICAgICAgICAgICAgICAo SU1QQ2hlY2tFeHByKCJTaGFwZUlkcy5zaXplKCkgPj0gMSIsICJ2ZWNjbGVhbi5jcHAiLCA2NDUx KSwgKFNoYXBlSWRzLnNpemUoKSA+PSAxKSA/ICgwKSA6IF9JTVBBc3NlcnQoIlNoYXBlSWRzLnNp emUoKSA+PSAxIiwidmVjY2xlYW4uY3BwIiw2NDUxKSk7CgoKCiAgICAgICAgICAgICAgICAgICAg U2hhcGVJZHMucHVzaF9iYWNrKCBWQ0xOVUxMU2hhcGVJZCApOwoKICAgICAgICAgICAgICAgICAg ICBEYW5nbGVTaGFwZUlkID0gKCgoRGFuZ2xlU2hhcGVJZCkgPT0gKFNoYXBlSWRzWyAwIF0pKSA/ IChTaGFwZUlkc1sgMSBdKSA6IChTaGFwZUlkc1sgMCBdKSk7CiAgICAgICAgICAgICAgICAgICAg Q1ZDTFNoYXBlICpwU2hhcGU7CiAgICAgICAgICAgICAgICAgICAgQ1ZDTFNoYXBlRmFjdG9yeTo6 R2V0QVNoYXBlKCBwU2hhcGUsIERhbmdsZVNoYXBlSWQgKTsKICAgICAgICAgICAgICAgICAgICAo SU1QQ2hlY2tFeHByKCJwU2hhcGUiLCAidmVjY2xlYW4uY3BwIiwgNjQ2MCksIChwU2hhcGUpID8g KDApIDogX0lNUEFzc2VydCgicFNoYXBlIiwidmVjY2xlYW4uY3BwIiw2NDYwKSk7CgoKCgoKICAg ICAgICAgICAgICAgICAgICBTaGFwZXNJbkRhbmdsZS5wdXNoX2JhY2soIERhbmdsZVNoYXBlSWQg KTsKCgoKCgogICAgICAgICAgICAgICAgICAgIGRmQWNjdW11bGF0ZWRMZW5ndGggKz0gcFNoYXBl LT5HZXRTaGFwZUxlbmd0aCgpOwoKICAgICAgICAgICAgICAgICAgICBDVkNMU2hhcGVQcm9wcyBv U2hhcGVQcm9wZXJ0aWVzID0gcFNoYXBlLT5HZXRTaGFwZVByb3BzKCk7CiAgICAgICAgICAgICAg ICAgICAgaWYgKG9TaGFwZVByb3BlcnRpZXMubV9kZkNsaXBUb2wgPCBkZk1pbmltdW1Ub2xsZXJh bmNlKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGZNaW5p bXVtVG9sbGVyYW5jZSA9IG9TaGFwZVByb3BlcnRpZXMubV9kZkNsaXBUb2w7CiAgICAgICAgICAg ICAgICAgICAgfQoKCgoKCgogICAgICAgICAgICAgICAgICAgIHBvQ3VycmVudE5vZGUgPSBvTm9k ZVRhYmxlLkZpbmQoICgoKHBvQ3VycmVudE5vZGUtPkdldFBvaW50KCkpID09IChwU2hhcGUtPkdl dEZpcnN0KCkpKSA/IChwU2hhcGUtPkdldExhc3QoKSkgOiAocFNoYXBlLT5HZXRGaXJzdCgpKSkp OwogICAgICAgICAgICAgICAgfSB3aGlsZSAocG9DdXJyZW50Tm9kZS0+U2hhcGVDb3VudCgpID09 IDIpOwoKICAgICAgICAgICAgICAgIChJTVBDaGVja0V4cHIoImRmQWNjdW11bGF0ZWRMZW5ndGgg Pj0gMC4wIiwgInZlY2NsZWFuLmNwcCIsIDY0ODgpLCAoZGZBY2N1bXVsYXRlZExlbmd0aCA+PSAw LjApID8gKDApIDogX0lNUEFzc2VydCgiZGZBY2N1bXVsYXRlZExlbmd0aCA+PSAwLjAiLCJ2ZWNj bGVhbi5jcHAiLDY0ODgpKTsKICAgICAgICAgICAgICAgIENsaXBTaGFwZXMgb0NsaXBTaGFwZXMo IFNoYXBlc0luRGFuZ2xlLCBkZkFjY3VtdWxhdGVkTGVuZ3RoIC0gZGZNaW5pbXVtVG9sbGVyYW5j ZSApOwogICAgICAgICAgICAgICAgb0NsaXBMaXN0LnB1c2hfYmFjayggb0NsaXBTaGFwZXMgKTsK ICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZm9yIChDbGlwTGlzdDo6aXRlcmF0b3Ig aSA9IG9DbGlwTGlzdC5iZWdpbigpOyBpICE9IG9DbGlwTGlzdC5lbmQoKTsgaSsrKQogICAgICAg IHsKCgoKCgogICAgICAgICAgICBpZiAoKCAqaSApLnNlY29uZCA8PSAwLjApCiAgICAgICAgICAg IHsKCgoKCiAgICAgICAgICAgICAgICBDVkNMU2hhcGU6OlZDTFNoYXBlSWRWZWN0b3JfdHAgU2hh cGVzSW5EYW5nbGUoKCAqaSApLmZpcnN0ICk7CiAgICAgICAgICAgICAgICBmb3IgKENWQ0xTaGFw ZTo6VkNMU2hhcGVJZFZlY3Rvcl90cDo6aXRlcmF0b3IgaXQgPSBTaGFwZXNJbkRhbmdsZS5iZWdp bigpOyBpdCAhPSBTaGFwZXNJbkRhbmdsZS5lbmQoKTsgaXQrKykKICAgICAgICAgICAgICAgIHsK ICAgICAgICAgICAgICAgICAgICBvTm9kZVRhYmxlLlJlbW92ZSggKml0ICk7CiAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgoKCgp9CiMgNjU0OSAidmVjY2xlYW4uY3Bw Igp2b2lkIFZDTEltcG9ydCggQ1ZDTE5vZGVUYWJsZSAmb05vZGVUYWJsZSwgR0RCTGF5ZXIgJnBM YXllciwgQ1ZDTFNoYXBlUHJvcHMgJm9TaGFwZVByb3BzLCBJTVBQcm9ncmVzc0Z1bmMgcGZuUHJv Z3Jlc3MsIHZvaWQgKnBQcm9ncmVzc0FyZyApCnsKICAgICAgICBvTm9kZVRhYmxlLlN0cmVhbUlu KCBwTGF5ZXIsIG9TaGFwZVByb3BzLCBwZm5Qcm9ncmVzcywgcFByb2dyZXNzQXJnICk7Cn0KIyA2 NjI3ICJ2ZWNjbGVhbi5jcHAiClRCb29sIFZDTENvbXBhcmVMYXllckFuZElEKCBDVkNMTm9kZSAq Zmlyc3QsIENWQ0xOb2RlICpzZWNvbmQgKQp7CgogICAgICAgIENWQ0xTaGFwZTo6VkNMU2hhcGVJ ZFZlY3Rvcl90cCBvU2hhcGVJZHMgPSBmaXJzdC0+R2V0U2hpZHMoKTsKICAgICAgICBDVkNMU2hh cGU6OlZDTFNoYXBlVmVjdG9yIG9TaGFwZXMoIDIgKTsKICAgICAgICBDVkNMU2hhcGVGYWN0b3J5 OjpHZXRBU2hhcGUoIG9TaGFwZXNbIDAgXSwgb1NoYXBlSWRzWyAwIF0gKTsKCiAgICAgICAgb1No YXBlSWRzID0gc2Vjb25kLT5HZXRTaGlkcygpOwogICAgICAgIENWQ0xTaGFwZUZhY3Rvcnk6Okdl dEFTaGFwZSggb1NoYXBlc1sgMSBdLCBvU2hhcGVJZHNbIDAgXSApOwoKICAgICAgICBDVkNMU2hh cGVQcm9wcyBTaGFwZVByb3BzWyAyIF07CiAgICAgICAgU2hhcGVQcm9wc1sgMCBdID0gb1NoYXBl c1sgMCBdLT5HZXRTaGFwZVByb3BzKCk7CiAgICAgICAgU2hhcGVQcm9wc1sgMSBdID0gb1NoYXBl c1sgMSBdLT5HZXRTaGFwZVByb3BzKCk7CgogICAgICAgIGlmIChTaGFwZVByb3BzWyAwIF0ubV9o R0RCTGF5ZXJJbiA8IFNoYXBlUHJvcHNbIDEgXS5tX2hHREJMYXllckluKQogICAgICAgIHsKICAg ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKFNoYXBlUHJv cHNbIDAgXS5tX2hHREJMYXllckluID09IFNoYXBlUHJvcHNbIDEgXS5tX2hHREJMYXllckluKQog ICAgICAgIHsKICAgICAgICAgICAgaWYgKFNoYXBlUHJvcHNbIDAgXS5tX2hHREJTaGFwZUlkIDwg U2hhcGVQcm9wc1sgMSBdLm1faEdEQlNoYXBlSWQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBm YWxzZTsKfQojIDY2NzggInZlY2NsZWFuLmNwcCIKVEJvb2wgVkNMQ29tcGFyZVNoYXBlSUQoIEdE QkxheWVyIGhsYXllciwgR0RCU2hhcGVJZCBmaXJzdCwgR0RCU2hhcGVJZCBzZWNvbmQsIGludCBG aWVsZEluZGV4ICkKewoKICAgICAgICByZXR1cm4gZmlyc3QgPT0gc2Vjb25kOwoKfQojIDY3MTAg InZlY2NsZWFuLmNwcCIKVEJvb2wgVkNMQ29tcGFyZVNoYXBlQWx3YXlzKCBHREJMYXllciBobGF5 ZXIsIEdEQlNoYXBlSWQgZmlyc3QsIEdEQlNoYXBlSWQgc2Vjb25kLCBpbnQgRmllbGRJbmRleCAp CnsKICAgICAgICByZXR1cm4gdHJ1ZTsKfQojIDY3NDAgInZlY2NsZWFuLmNwcCIKVEJvb2wgVkNM Q29tcGFyZVNoYXBlTmV2ZXIoIEdEQkxheWVyIGhsYXllciwgR0RCU2hhcGVJZCBmaXJzdCwgR0RC U2hhcGVJZCBzZWNvbmQsIGludCBGaWVsZEluZGV4ICkKewogICAgICAgIHJldHVybiBmYWxzZTsK fQoKdHlwZWRlZiB2ZWN0b3I8Q1ZDTE5vZGUgKiA+IE5vZGVMaXN0Owp0eXBlZGVmIHBhaXI8Tm9k ZUxpc3Q6Oml0ZXJhdG9yLCBOb2RlTGlzdDo6aXRlcmF0b3I+IE5vZGVSYW5nZTsKdHlwZWRlZiBz ZXQ8Q1ZDTFNoYXBlOjpWQ0xTaGFwZUlkX3RwLCBsZXNzPENWQ0xTaGFwZTo6VkNMU2hhcGVJZF90 cD4gPiBTaElkU2V0OwojIDY3ODQgInZlY2NsZWFuLmNwcCIKdm9pZCBWQ0xPdXRwdXQoIENWQ0xO b2RlVGFibGUgJm9Ob2RlVGFibGUsIElNUFByb2dyZXNzRnVuYyBwZm5Qcm9ncmVzcywgdm9pZCAq cFByb2dyZXNzQXJnLCBUQm9vbCggKmNvbXBhcmUgKSAoIENWQ0xOb2RlICosIENWQ0xOb2RlICog KSwgVEJvb2woICpzaGFwZWNvbXBhcmUgKSAoIEdEQkxheWVyLCBHREJTaGFwZUlkLCBHREJTaGFw ZUlkLCBpbnQgKSkKewogICAgICAgIE5vZGVMaXN0IENvbWJpbmVTaGFwZXM7CiAgICAgICAgU2hJ ZFNldCBXcml0dGVuU2hhcGVzOwoKICAgICAgICBpZiAocGZuUHJvZ3Jlc3MgPT0gX19udWxsKQog ICAgICAgICAgICBwZm5Qcm9ncmVzcyA9IElNUER1bW15UHJvZ3Jlc3M7CgogICAgICAgIGRvdWJs ZSBuTm9kZXMgPSBvTm9kZVRhYmxlLkdldE51bU5vZGVzKCk7CiAgICAgICAgZG91YmxlIG4gPSAw LjA7CiMgNjgwMiAidmVjY2xlYW4uY3BwIgogICAgICAgIENWQ0xOb2RlICpwb05vZGU7CiAgICAg ICAgZm9yIChwb05vZGUgPSBvTm9kZVRhYmxlLkZpcnN0KCk7IHBvTm9kZSAhPSBfX251bGw7IHBv Tm9kZSA9IG9Ob2RlVGFibGUuTmV4dCggKnBvTm9kZSApKQogICAgICAgIHsKCiAgICAgICAgICAg IGlmICghKCAqcGZuUHJvZ3Jlc3MgKSAoICsrbiAvIG5Ob2RlcywgIlNjYW5uaW5nIHNoYXBlcyIs IHBQcm9ncmVzc0FyZyApKQogICAgICAgICAgICAgICAgSU1QRXJyb3IoIDMsIDEsICJVc2VyIGNh bmNlbGxlZCIgKTsKCgoKCgoKICAgICAgICAgICAgaWYgKHBvTm9kZS0+U2hhcGVDb3VudCgpID09 IDIpCiAgICAgICAgICAgIHsKCgoKCiAgICAgICAgICAgICAgICBDVkNMU2hhcGU6OlZDTFNoYXBl SWRWZWN0b3JfdHAgb1NoYXBlSWRzID0gcG9Ob2RlLT5HZXRTaGlkcygpOwoKCgoKCiAgICAgICAg ICAgICAgICBDVkNMU2hhcGU6OlZDTFNoYXBlVmVjdG9yIG9TaGFwZXMoIDIgKTsKICAgICAgICAg ICAgICAgIENWQ0xTaGFwZUZhY3Rvcnk6OkdldEFTaGFwZSggb1NoYXBlc1sgMCBdLCBvU2hhcGVJ ZHNbIDAgXSApOwogICAgICAgICAgICAgICAgQ1ZDTFNoYXBlRmFjdG9yeTo6R2V0QVNoYXBlKCBv U2hhcGVzWyAxIF0sIG9TaGFwZUlkc1sgMSBdICk7CiAgICAgICAgICAgICAgICAoSU1QQ2hlY2tF eHByKCJvU2hhcGVzWyAwIF0iLCAidmVjY2xlYW4uY3BwIiwgNjgyOSksIChvU2hhcGVzWyAwIF0p ID8gKDApIDogX0lNUEFzc2VydCgib1NoYXBlc1sgMCBdIiwidmVjY2xlYW4uY3BwIiw2ODI5KSk7 CiAgICAgICAgICAgICAgICAoSU1QQ2hlY2tFeHByKCJvU2hhcGVzWyAxIF0iLCAidmVjY2xlYW4u Y3BwIiwgNjgzMCksIChvU2hhcGVzWyAxIF0pID8gKDApIDogX0lNUEFzc2VydCgib1NoYXBlc1sg MSBdIiwidmVjY2xlYW4uY3BwIiw2ODMwKSk7CgoKCgogICAgICAgICAgICAgICAgQ1ZDTFNoYXBl UHJvcHMgU2hhcGVQcm9wc1sgMiBdOwogICAgICAgICAgICAgICAgU2hhcGVQcm9wc1sgMCBdID0g b1NoYXBlc1sgMCBdLT5HZXRTaGFwZVByb3BzKCk7CiAgICAgICAgICAgICAgICBTaGFwZVByb3Bz WyAxIF0gPSBvU2hhcGVzWyAxIF0tPkdldFNoYXBlUHJvcHMoKTsKCgoKCgogICAgICAgICAgICAg ICAgaWYgKCggU2hhcGVQcm9wc1sgMCBdLm1faEdEQkxheWVySW4gPT0gU2hhcGVQcm9wc1sgMSBd Lm1faEdEQkxheWVySW4gKSAmJgogICAgICAgICAgICAgICAgKCBzaGFwZWNvbXBhcmUoIFNoYXBl UHJvcHNbIDAgXS5tX2hHREJMYXllckluLCBTaGFwZVByb3BzWyAwIF0ubV9oR0RCU2hhcGVJZCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hhcGVQcm9wc1sgMSBdLm1faEdEQlNoYXBlSWQs IDAgKSkpCiAgICAgICAgICAgICAgICB7CgoKCgoKICAgICAgICAgICAgICAgICAgICBDb21iaW5l U2hhcGVzLnB1c2hfYmFjayggcG9Ob2RlICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg IH0KICAgICAgICB9CgogICAgICAgIGlmIChDb21iaW5lU2hhcGVzLnNpemUoKSA+IDApCiAgICAg ICAgewoKCgoKICAgICAgICAgICAgc29ydCggQ29tYmluZVNoYXBlcy5iZWdpbigpLCBDb21iaW5l U2hhcGVzLmVuZCgpLCBjb21wYXJlICk7CgogICAgICAgICAgICBOb2RlUmFuZ2Ugb1VuaXF1ZU5v ZGVSYW5nZTsKICAgICAgICAgICAgb1VuaXF1ZU5vZGVSYW5nZS5maXJzdCA9IENvbWJpbmVTaGFw ZXMuYmVnaW4oKTsKICAgICAgICAgICAgb1VuaXF1ZU5vZGVSYW5nZS5zZWNvbmQgPSBDb21iaW5l U2hhcGVzLmJlZ2luKCk7CgogICAgICAgICAgICB3aGlsZSAob1VuaXF1ZU5vZGVSYW5nZS5zZWNv bmQgIT0gQ29tYmluZVNoYXBlcy5lbmQoKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAg Q1ZDTFNoYXBlOjpWQ0xTaGFwZUlkVmVjdG9yX3RwIG9VbmlxdWVTaGlkczsKCgoKCiAgICAgICAg ICAgICAgICBvVW5pcXVlTm9kZVJhbmdlID0gZXF1YWxfcmFuZ2UoIG9VbmlxdWVOb2RlUmFuZ2Uu Zmlyc3QsIENvbWJpbmVTaGFwZXMuZW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKiggb1VuaXF1ZU5vZGVSYW5nZS5zZWNvbmQgKSwgY29tcGFyZSApOwoKCiAgICAgICAgICAg ICAgICBDVkNMUG9pbnQ6OlZDTFBvaW50VmVjdG9yX3RwIGJyZWFrUG9pbnRzOwoKCgoKCiAgICAg ICAgICAgICAgICBOb2RlTGlzdDo6aXRlcmF0b3Igb0N1cnJlbnROb2RlID0gb1VuaXF1ZU5vZGVS YW5nZS5maXJzdDsKICAgICAgICAgICAgICAgIHdoaWxlIChvQ3VycmVudE5vZGUgIT0gb1VuaXF1 ZU5vZGVSYW5nZS5zZWNvbmQpCiAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAg IENWQ0xTaGFwZTo6VkNMU2hhcGVJZFZlY3Rvcl90cCBvU2hhcGVJZHMgPSAoICoqb0N1cnJlbnRO b2RlICkuR2V0U2hpZHMoKTsKCgoKCiAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCAyOyBpKyspCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg ICBvVW5pcXVlU2hpZHMucHVzaF9iYWNrKCBvU2hhcGVJZHNbIGkgXSApOwoKICAgICAgICAgICAg ICAgICAgICAgICAgQ1ZDTFNoYXBlICpzaDsKICAgICAgICAgICAgICAgICAgICAgICAgQ1ZDTFNo YXBlRmFjdG9yeTo6R2V0QVNoYXBlKCBzaCwgb1NoYXBlSWRzWyBpIF0gKTsKICAgICAgICAgICAg ICAgICAgICAgICAgKElNUENoZWNrRXhwcigic2giLCAidmVjY2xlYW4uY3BwIiwgNjkwMSksIChz aCkgPyAoMCkgOiBfSU1QQXNzZXJ0KCJzaCIsInZlY2NsZWFuLmNwcCIsNjkwMSkpOwoKICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKCggb05vZGVUYWJsZS5GaW5kKCBzaC0+R2V0Rmlyc3QoKSkp LT5TaGFwZUNvdW50KCkgPiAyKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBicmVha1BvaW50cy5wdXNoX2JhY2soIHNoLT5HZXRGaXJzdCgpKTsK ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlm ICgoIG9Ob2RlVGFibGUuRmluZCggc2gtPkdldExhc3QoKSkpLT5TaGFwZUNvdW50KCkgPiAyKQog ICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh a1BvaW50cy5wdXNoX2JhY2soIHNoLT5HZXRMYXN0KCkpOwogICAgICAgICAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIG9DdXJyZW50Tm9k ZSsrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc29ydCggb1VuaXF1ZVNoaWRz LmJlZ2luKCksIG9VbmlxdWVTaGlkcy5lbmQoKSk7CiAgICAgICAgICAgICAgICBDVkNMU2hhcGU6 OlZDTFNoYXBlSWRWZWN0b3JfdHA6Oml0ZXJhdG9yIGl0ID0gdW5pcXVlKCBvVW5pcXVlU2hpZHMu YmVnaW4oKSwgb1VuaXF1ZVNoaWRzLmVuZCgpKTsKICAgICAgICAgICAgICAgIG9VbmlxdWVTaGlk cy5yZXNpemUoIGl0IC0gb1VuaXF1ZVNoaWRzLmJlZ2luKCkpOwoKCgoKCiAgICAgICAgICAgICAg ICBXcml0dGVuU2hhcGVzLmluc2VydCggb1VuaXF1ZVNoaWRzLmJlZ2luKCksIG9VbmlxdWVTaGlk cy5lbmQoKSk7CgoKCgoKCgogICAgICAgICAgICAgICAgQ1ZDTFNoYXBlICpzaGFwZTsKICAgICAg ICAgICAgICAgIENWQ0xTaGFwZUZhY3Rvcnk6OkdldEFTaGFwZSggc2hhcGUsIG9VbmlxdWVTaGlk c1sgMCBdICk7CiAgICAgICAgICAgICAgICBDVkNMU2hhcGVQcm9wcyBvUHJvcHMgPSBzaGFwZS0+ R2V0U2hhcGVQcm9wcygpOwoKICAgICAgICAgICAgICAgIENWQ0xTaGFwZTo6VkNMU2hhcGVJZFZl Y3Rvcl90cCBvTmV3U2hpZHMgPSBDVkNMU2hhcGVGYWN0b3J5OjpNYWtlU2hhcGUoIG9VbmlxdWVT aGlkcywgb1Byb3BzLCBicmVha1BvaW50cyApOwoKCgoKCiAgICAgICAgICAgICAgICBmb3IgKENW Q0xTaGFwZTo6VkNMU2hhcGVJZFZlY3Rvcl90cDo6aXRlcmF0b3IgSXQgPSBvTmV3U2hpZHMuYmVn aW4oKTsgSXQgIT0gb05ld1NoaWRzLmVuZCgpOyBJdCsrKQogICAgICAgICAgICAgICAgewoKCgoK CiAgICAgICAgICAgICAgICAgICAgQ1ZDTFNoYXBlRmFjdG9yeTo6R2V0QVNoYXBlKCBzaGFwZSwg Kkl0ICk7CiAgICAgICAgICAgICAgICAgICAgc2hhcGUtPldyaXRlKCk7CiAgICAgICAgICAgICAg ICAgICAgQ1ZDTFNoYXBlRmFjdG9yeTo6Uk1BKCAqSXQgKTsKICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgfQogICAgICAgIH0KCgoKCgoKCiAgICAgICAgbiA9IDAuODsKCiAgICAgICAgZm9y IChwb05vZGUgPSBvTm9kZVRhYmxlLkZpcnN0KCk7IHBvTm9kZSAhPSBfX251bGw7IHBvTm9kZSA9 IG9Ob2RlVGFibGUuTmV4dCggKnBvTm9kZSApKQogICAgICAgIHsKCiAgICAgICAgICAgIGlmICgh KCAqcGZuUHJvZ3Jlc3MgKSAoICsrbiAvIG5Ob2RlcywgIldyaXRpbmcgc2hhcGVzIiwgcFByb2dy ZXNzQXJnICkpCiAgICAgICAgICAgICAgICBJTVBFcnJvciggMywgMSwgIlVzZXIgY2FuY2VsbGVk IiApOwoKCgoKICAgICAgICAgICAgaWYgKGZpbmQoIENvbWJpbmVTaGFwZXMuYmVnaW4oKSwgQ29t YmluZVNoYXBlcy5lbmQoKSwgcG9Ob2RlICkgPT0gQ29tYmluZVNoYXBlcy5lbmQoKSkKICAgICAg ICAgICAgewoKCgoKICAgICAgICAgICAgICAgIENWQ0xTaGFwZTo6VkNMU2hhcGVJZFZlY3Rvcl90 cCBvU2hpZHMgPSBwb05vZGUtPkdldFVwU2hpZHMoKTsKCiAgICAgICAgICAgICAgICBmb3IgKENW Q0xTaGFwZTo6VkNMU2hhcGVJZFZlY3Rvcl90cDo6aXRlcmF0b3IgSXQgPSBvU2hpZHMuYmVnaW4o KTsgSXQgIT0gb1NoaWRzLmVuZCgpOyBJdCsrKQogICAgICAgICAgICAgICAgewoKCgoKICAgICAg ICAgICAgICAgICAgICBpZiAoV3JpdHRlblNoYXBlcy5maW5kKCAqSXQgKSA9PSBXcml0dGVuU2hh cGVzLmVuZCgpKQogICAgICAgICAgICAgICAgICAgIHsKCgoKCgogICAgICAgICAgICAgICAgICAg ICAgICBDVkNMU2hhcGUgKnNoYXBlOwogICAgICAgICAgICAgICAgICAgICAgICBDVkNMU2hhcGVG YWN0b3J5OjpHZXRBU2hhcGUoIHNoYXBlLCAqSXQgKTsKICAgICAgICAgICAgICAgICAgICAgICAg c2hhcGUtPldyaXRlKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQog ICAgICAgICAgICB9CiAgICAgICAgfQp9CiMgNzAxOSAidmVjY2xlYW4uY3BwIgpzdGF0aWMgY2hh ciBQYXJhbGxlbEludCggY29uc3QgR0RCVmVydGV4ICZhLCBjb25zdCBHREJWZXJ0ZXggJmIsIGNv bnN0CkdEQlZlcnRleCAmYywgY29uc3QgR0RCVmVydGV4ICZkLCBHREJWZXJ0ZXggJnAgKTsKCnN0 YXRpYyBpbnQgQXJlYVNpZ24oIGNvbnN0IEdEQlZlcnRleCAmYSwgY29uc3QgR0RCVmVydGV4ICZi LCBjb25zdCBHREJWZXJ0ZXggJmMgKQp7CiAgICAgICAgZG91YmxlIGFyZWEyOwoKICAgICAgICBh cmVhMiA9ICggYi54IC0gYS54ICkgKiAoIGRvdWJsZSApICggYy55IC0gYS55ICkgLQogICAgICAg ICAgICAoIGMueCAtIGEueCApICogKCBkb3VibGUgKSAoIGIueSAtIGEueSApOwoKCgoKICAgICAg ICBpZiAoYXJlYTIgPiAwLjUpIHJldHVybiAxOwogICAgICAgIGVsc2UgaWYgKGFyZWEyIDwgLTAu NSkgcmV0dXJuIC0xOwogICAgICAgIGVsc2UgcmV0dXJuIDA7Cn0KCgpjaGFyIFBhcmFsbGVsSW50 KCBjb25zdCBHREJWZXJ0ZXggJmEsIGNvbnN0IEdEQlZlcnRleCAmYiwgY29uc3QgR0RCVmVydGV4 ICZjLCBjb25zdCBHREJWZXJ0ZXggJmQsIEdEQlZlcnRleCAmcCApCnsKICAgICAgICBpZiAoIVZD TENvbGxpbmVhciggYSwgYiwgYyApKQogICAgICAgICAgICByZXR1cm4gJzAnOwoKICAgICAgICBp ZiAoVkNMQmV0d2VlbiggYSwgYiwgYyApKQogICAgICAgIHsKICAgICAgICAgICAgcCA9IGM7CiAg ICAgICAgICAgIHJldHVybiAnZSc7CiAgICAgICAgfQogICAgICAgIGlmIChWQ0xCZXR3ZWVuKCBh LCBiLCBkICkpCiAgICAgICAgewogICAgICAgICAgICBwID0gZDsKICAgICAgICAgICAgcmV0dXJu ICdlJzsKICAgICAgICB9CiAgICAgICAgaWYgKFZDTEJldHdlZW4oIGMsIGQsIGEgKSkKICAgICAg ICB7CiAgICAgICAgICAgIHAgPSBhOwogICAgICAgICAgICByZXR1cm4gJ2UnOwogICAgICAgIH0K ICAgICAgICBpZiAoVkNMQmV0d2VlbiggYywgZCwgYiApKQogICAgICAgIHsKICAgICAgICAgICAg cCA9IGI7CiAgICAgICAgICAgIHJldHVybiAnZSc7CiAgICAgICAgfQogICAgICAgIHJldHVybiAn MCc7Cn0KIyA3MDc5ICJ2ZWNjbGVhbi5jcHAiCmNoYXIgVkNMU2VnU2VnSW50KCBjb25zdCBHREJW ZXJ0ZXggJmEsIGNvbnN0IEdEQlZlcnRleCAmYiwgY29uc3QgR0RCVmVydGV4ICZjLCBjb25zdCBH REJWZXJ0ZXggJmQsIEdEQlZlcnRleCAmcCApCnsKICAgICAgICBkb3VibGUgcywgdDsKICAgICAg ICBkb3VibGUgbnVtLCBkZW5vbTsKICAgICAgICBjaGFyIGNvZGUgPSAnPyc7CgogICAgICAgIGRl bm9tID0gYS54ICogKCBkb3VibGUgKSAoIGQueSAtIGMueSApICsKICAgICAgICAgICAgYi54ICog KCBkb3VibGUgKSAoIGMueSAtIGQueSApICsKICAgICAgICAgICAgZC54ICogKCBkb3VibGUgKSAo IGIueSAtIGEueSApICsKICAgICAgICAgICAgYy54ICogKCBkb3VibGUgKSAoIGEueSAtIGIueSAp OwoKCgoKCiAgICAgICAgaWYgKGRlbm9tID09IDAuMCkKICAgICAgICAgICAgcmV0dXJuIFBhcmFs bGVsSW50KCBhLCBiLCBjLCBkLCBwICk7CgogICAgICAgIGVsc2UgaWYgKFZDTENvbGxpbmVhcigg YywgZCwgYSApICkKICAgICAgICB7CiAgICAgICAgICAgIHAgPSBhOwogICAgICAgICAgICByZXR1 cm4gJ3YnOwogICAgICAgIH0KCiAgICAgICAgZWxzZSBpZiAoVkNMQ29sbGluZWFyKCBjLCBkLCBi ICkgKQogICAgICAgIHsKICAgICAgICAgICAgcCA9IGI7CiAgICAgICAgICAgIHJldHVybiAndic7 CiAgICAgICAgfQoKICAgICAgICBlbHNlIGlmIChWQ0xDb2xsaW5lYXIoIGEsIGIsIGMgKSApCiAg ICAgICAgewogICAgICAgICAgICBwID0gYzsKICAgICAgICAgICAgcmV0dXJuICd2JzsKICAgICAg ICB9CgogICAgICAgIGVsc2UgaWYgKFZDTENvbGxpbmVhciggYSwgYiwgZCApICkKICAgICAgICB7 CiAgICAgICAgICAgIHAgPSBkOwogICAgICAgICAgICByZXR1cm4gJ3YnOwogICAgICAgIH0KCiAg ICAgICAgbnVtID0gYS54ICogKCBkb3VibGUgKSAoIGQueSAtIGMueSApICsKICAgICAgICAgICAg Yy54ICogKCBkb3VibGUgKSAoIGEueSAtIGQueSApICsKICAgICAgICAgICAgZC54ICogKCBkb3Vi bGUgKSAoIGMueSAtIGEueSApOwogICAgICAgIGlmICgoIG51bSA9PSAwLjAgKSB8fCAoIG51bSA9 PSBkZW5vbSApKSBjb2RlID0gJ3YnOwogICAgICAgIHMgPSBudW0gLyBkZW5vbTsKCiAgICAgICAg bnVtID0gLSggYS54ICogKCBkb3VibGUgKSAoIGMueSAtIGIueSApICsKICAgICAgICAgICAgIGIu eCAqICggZG91YmxlICkgKCBhLnkgLSBjLnkgKSArCiAgICAgICAgICAgICBjLnggKiAoIGRvdWJs ZSApICggYi55IC0gYS55ICkpOwogICAgICAgIGlmICgoIG51bSA9PSAwLjAgKSB8fCAoIG51bSA9 PSBkZW5vbSApKSBjb2RlID0gJ3YnOwogICAgICAgIHQgPSBudW0gLyBkZW5vbTsKCiAgICAgICAg aWYgKCggMC4wIDwgcyApICYmICggcyA8IDEuMCApICYmCiAgICAgICAgICggMC4wIDwgdCApICYm ICggdCA8IDEuMCApKQogICAgICAgICAgICBjb2RlID0gJzEnOwogICAgICAgIGVsc2UgaWYgKCgg MC4wID4gcyApIHx8ICggcyA+IDEuMCApIHx8CiAgICAgICAgICAgICAgKCAwLjAgPiB0ICkgfHwg KCB0ID4gMS4wICkpCiAgICAgICAgICAgIGNvZGUgPSAnMCc7CgogICAgICAgIGlmIChjb2RlID09 ICcxJykKICAgICAgICB7CiAgICAgICAgICAgIHAueCA9IGEueCArIHMgKiAoIGIueCAtIGEueCAp OwogICAgICAgICAgICBwLnkgPSBhLnkgKyBzICogKCBiLnkgLSBhLnkgKTsKICAgICAgICB9CgoK ICAgICAgICByZXR1cm4gY29kZTsKfQoKCgoKCgoKVEJvb2wgVkNMQmV0d2VlbiggY29uc3QgR0RC VmVydGV4ICZhLCBjb25zdCBHREJWZXJ0ZXggJmIsIGNvbnN0IEdEQlZlcnRleCAmYyApCnsKCgoK ICAgICAgICBpZiAoYS54ICE9IGIueCkKICAgICAgICAgICAgcmV0dXJuICgoIGEueCA8PSBjLngg KSAmJiAoIGMueCA8PSBiLnggKSkgfHwKICAgICAgICAgICAgKCggYS54ID49IGMueCApICYmICgg Yy54ID49IGIueCApKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiAoKCBhLnkgPD0g Yy55ICkgJiYgKCBjLnkgPD0gYi55ICkpIHx8CiAgICAgICAgICAgICgoIGEueSA+PSBjLnkgKSAm JiAoIGMueSA+PSBiLnkgKSk7Cn0KCgoKCmludCBWQ0xDb2xsaW5lYXIoIGNvbnN0IEdEQlZlcnRl eCAmYSwgY29uc3QgR0RCVmVydGV4ICZiLCBjb25zdCBHREJWZXJ0ZXggJmMgKQp7CiAgICAgICAg cmV0dXJuIEFyZWFTaWduKCBhLCBiLCBjICkgPT0gMDsKfQo=