public inbox for gcc-prs@sourceware.org help / color / mirror / Atom feed
From: ofv@wanadoo.es To: gcc-gnats@gcc.gnu.org Subject: c++/6670: ICE when compiling code that uses __attribute__((dllimport)) Date: Wed, 15 May 2002 20:16:00 -0000 [thread overview] Message-ID: <20020516031429.15515.qmail@sources.redhat.com> (raw) >Number: 6670 >Category: c++ >Synopsis: ICE when compiling code that uses __attribute__((dllimport)) >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: ice-on-legal-code >Submitter-Id: net >Arrival-Date: Wed May 15 20:16:00 PDT 2002 >Closed-Date: >Last-Modified: >Originator: Oscar Fuentes >Release: gcc version 3.1 20020510 (prerelease) >Organization: >Environment: Reading specs from t:\msys\1.0\mingw\bin\..\lib\gcc-lib\i686-pc-mingw32\3.1\specs Configured with: ../gcc-3.1-20020510/configure --enable-languages=c,c++ --enable-threads=win32 --enable-sjlj-exceptions --prefix=t:/msys/1.0/mingw Thread model: win32 and Reading specs from /usr/local/lib/gcc-lib/i686-pc-cygwin/3.1/specs Configured with: ../gcc-3.1-20020510/configure --enable-languages=c,c++ --enable -threads=win32 Thread model: win32 >Description: The attached source compiles fine without __attribute__((dllimport)). If not, it reports $ g++ -c dll.ii ../../include/wx/dialog.h: In function `void __static_initialization_and_destruction_0(int, int)': ../../include/wx/dialog.h:23: Internal compiler error in convert_move, at gcc-3.1-20020510/gcc/expr.c:1243 Please submit a full bug report, removing the attribute from the offending line (40716) causes $ g++ -c dll.ii ../../include/wx/statusbr.h: In function `void __static_initialization_and_destruction_0(int, int)': ../../include/wx/statusbr.h:67: Internal compiler error in convert_move, at gcc-3.1-20020510/gcc/expr.c:1243 Please submit a full bug report, with preprocessed source if appropriate. Again, removing the attribute from the offending line (43766) gives $ g++ -c dll.ii c:\Temp/ccoraaaa.s: Assembler messages: c:\Temp/ccoraaaa.s:5: Error: length of .comm "_D" is already 496; not changing to 480 >How-To-Repeat: >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name=""dll.ii""; name="dll.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="dll.ii" IyAxICJtaW5pbWFsMi5jcHAiDQojIDEgIjxidWlsdC1pbj4iDQojIDEgIjxjb21tYW5kIGxpbmU+ Ig0KIyAxICJtaW5pbWFsMi5jcHAiDQoNCiNwcmFnbWEgaW1wbGVtZW50YXRpb24gIm1pbmltYWwu Y3BwIg0KI3ByYWdtYSBpbnRlcmZhY2UgIm1pbmltYWwuY3BwIg0KDQoNCg0KIyAxICIuLi8uLi9p bmNsdWRlL3d4L3d4cHJlYy5oIiAxDQojIDEzICIuLi8uLi9pbmNsdWRlL3d4L3d4cHJlYy5oIg0K IyAxICIuLi8uLi9pbmNsdWRlL3d4L2RlZnMuaCIgMQ0KIyAxNiAiLi4vLi4vaW5jbHVkZS93eC9k ZWZzLmgiDQojcHJhZ21hIGludGVyZmFjZSAiZGVmcy5oIg0KIyAyMjIgIi4uLy4uL2luY2x1ZGUv d3gvZGVmcy5oIg0KIyAxICJ0Oi9tc3lzLzEuMC9taW5ndy9saWIvZ2NjLWxpYi9pNjg2LXBjLW1p bmd3MzIvMy4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMw0KIyAxNDcgInQ6L21zeXMvMS4wL21pbmd3 L2xpYi9nY2MtbGliL2k2ODYtcGMtbWluZ3czMi8zLjEvaW5jbHVkZS9zdGRkZWYuaCIgMw0KdHlw ZWRlZiBpbnQgcHRyZGlmZl90Ow0KIyAyMDEgInQ6L21zeXMvMS4wL21pbmd3L2xpYi9nY2MtbGli L2k2ODYtcGMtbWluZ3czMi8zLjEvaW5jbHVkZS9zdGRkZWYuaCIgMw0KdHlwZWRlZiB1bnNpZ25l ZCBpbnQgc2l6ZV90Ow0KIyAyMjMgIi4uLy4uL2luY2x1ZGUvd3gvZGVmcy5oIiAyDQoNCiMgMSAi Li4vLi4vaW5jbHVkZS93eC9zZXR1cC5oIiAxDQojIDIyNSAiLi4vLi4vaW5jbHVkZS93eC9kZWZz LmgiIDINCiMgMjQ4ICIuLi8uLi9pbmNsdWRlL3d4L2RlZnMuaCINCiMgMSAiLi4vLi4vaW5jbHVk ZS93eC92ZXJzaW9uLmgiIDENCiMgMjQ5ICIuLi8uLi9pbmNsdWRlL3d4L2RlZnMuaCIgMg0KIyAz MjQgIi4uLy4uL2luY2x1ZGUvd3gvZGVmcy5oIg0KdHlwZWRlZiBzaG9ydCBpbnQgV1hUWVBFOw0K DQoNCg0KDQoNCg0KdHlwZWRlZiBpbnQgd3hXaW5kb3dJRDsNCiMgNDU2ICIuLi8uLi9pbmNsdWRl L3d4L2RlZnMuaCINCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4T2JqZWN0Ow0K Y2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hFdmVudDsNCiMgNDY4ICIuLi8uLi9p bmNsdWRlL3d4L2RlZnMuaCINCiMgMSAiLi4vLi4vaW5jbHVkZS93eC9kZWJ1Zy5oIiAxDQojIDE1 ICIuLi8uLi9pbmNsdWRlL3d4L2RlYnVnLmgiDQojIDEgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1 ZGUvYXNzZXJ0LmgiIDEgMw0KIyAzMSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9hc3NlcnQu aCIgMw0KIyAxICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL19taW5ndy5oIiAxIDMNCiMgMzIg InQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvYXNzZXJ0LmgiIDIgMw0KDQoNCg0KDQpleHRlcm4g IkMiIHsNCiMgNTIgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvYXNzZXJ0LmgiIDMNCnZvaWQg X2Fzc2VydCAoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBpbnQpDQoNCiAgICAgICAgX19hdHRy aWJ1dGVfXyAoKG5vcmV0dXJuKSkNCg0KICAgICAgICA7DQojIDY1ICJ0Oi9tc3lzLzEuMC9taW5n dy9pbmNsdWRlL2Fzc2VydC5oIiAzDQp9DQojIDE2ICIuLi8uLi9pbmNsdWRlL3d4L2RlYnVnLmgi IDINCg0KIyAxICIuLi8uLi9pbmNsdWRlL3d4L3d4Y2hhci5oIiAxDQojIDE2ICIuLi8uLi9pbmNs dWRlL3d4L3d4Y2hhci5oIg0KI3ByYWdtYSBpbnRlcmZhY2UgInd4Y2hhci5oIg0KIyAyODAgIi4u Ly4uL2luY2x1ZGUvd3gvd3hjaGFyLmgiDQojIDEgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUv d2NoYXIuaCIgMSAzDQojIDMzICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL3djaGFyLmgiIDMN CiMgMSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9jdHlwZS5oIiAxIDMNCiMgMzYgInQ6L21z eXMvMS4wL21pbmd3L2luY2x1ZGUvY3R5cGUuaCIgMw0KIyAxICJ0Oi9tc3lzLzEuMC9taW5ndy9s aWIvZ2NjLWxpYi9pNjg2LXBjLW1pbmd3MzIvMy4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMw0KIyAz MjEgInQ6L21zeXMvMS4wL21pbmd3L2xpYi9nY2MtbGliL2k2ODYtcGMtbWluZ3czMi8zLjEvaW5j bHVkZS9zdGRkZWYuaCIgMw0KdHlwZWRlZiB1bnNpZ25lZCBpbnQgd2ludF90Ow0KIyAzNyAidDov bXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9jdHlwZS5oIiAyIDMNCiMgNTkgInQ6L21zeXMvMS4wL21p bmd3L2luY2x1ZGUvY3R5cGUuaCIgMw0KZXh0ZXJuICJDIiB7DQoNCg0KaW50IGlzYWxudW0oaW50 KTsNCmludCBpc2FscGhhKGludCk7DQppbnQgaXNjbnRybChpbnQpOw0KaW50IGlzZGlnaXQoaW50 KTsNCmludCBpc2dyYXBoKGludCk7DQppbnQgaXNsb3dlcihpbnQpOw0KaW50IGlzcHJpbnQoaW50 KTsNCmludCBpc3B1bmN0KGludCk7DQppbnQgaXNzcGFjZShpbnQpOw0KaW50IGlzdXBwZXIoaW50 KTsNCmludCBpc3hkaWdpdChpbnQpOw0KDQoNCmludCBfaXNjdHlwZSAoaW50LCBpbnQpOw0KDQoN CmludCB0b2xvd2VyKGludCk7DQppbnQgdG91cHBlcihpbnQpOw0KDQoNCg0KDQoNCg0KaW50IF90 b2xvd2VyKGludCk7DQppbnQgX3RvdXBwZXIoaW50KTsNCiMgOTggInQ6L21zeXMvMS4wL21pbmd3 L2luY2x1ZGUvY3R5cGUuaCIgMw0KICAgZXh0ZXJuIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkp IGludCBfX21iX2N1cl9tYXg7DQoNCg0KDQoNCg0KDQoNCnR5cGVkZWYgd2NoYXJfdCB3Y3R5cGVf dDsNCg0KDQoNCg0KaW50IGlzd2FsbnVtKHdpbnRfdCk7DQppbnQgaXN3YWxwaGEod2ludF90KTsN CmludCBpc3dhc2NpaSh3aW50X3QpOw0KaW50IGlzd2NudHJsKHdpbnRfdCk7DQppbnQgaXN3Y3R5 cGUod2ludF90LCB3Y3R5cGVfdCk7DQppbnQgaXNfd2N0eXBlKHdpbnRfdCwgd2N0eXBlX3QpOw0K aW50IGlzd2RpZ2l0KHdpbnRfdCk7DQppbnQgaXN3Z3JhcGgod2ludF90KTsNCmludCBpc3dsb3dl cih3aW50X3QpOw0KaW50IGlzd3ByaW50KHdpbnRfdCk7DQppbnQgaXN3cHVuY3Qod2ludF90KTsN CmludCBpc3dzcGFjZSh3aW50X3QpOw0KaW50IGlzd3VwcGVyKHdpbnRfdCk7DQppbnQgaXN3eGRp Z2l0KHdpbnRfdCk7DQoNCndjaGFyX3QgdG93bG93ZXIod2NoYXJfdCk7DQp3Y2hhcl90IHRvd3Vw cGVyKHdjaGFyX3QpOw0KDQppbnQgaXNsZWFkYnl0ZSAoaW50KTsNCg0KDQppbnQgX19pc2FzY2lp IChpbnQpOw0KaW50IF9fdG9hc2NpaSAoaW50KTsNCmludCBfX2lzY3N5bWYgKGludCk7DQppbnQg X19pc2NzeW0gKGludCk7DQoNCg0KaW50IGlzYXNjaWkgKGludCk7DQppbnQgdG9hc2NpaSAoaW50 KTsNCmludCBpc2NzeW1mIChpbnQpOw0KaW50IGlzY3N5bSAoaW50KTsNCg0KDQoNCg0KDQp9DQoj IDM0ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL3djaGFyLmgiIDIgMw0KIyAxICJ0Oi9tc3lz LzEuMC9taW5ndy9pbmNsdWRlL3N0ZGlvLmgiIDEgMw0KIyA0MiAidDovbXN5cy8xLjAvbWluZ3cv aW5jbHVkZS9zdGRpby5oIiAzDQojIDEgInQ6L21zeXMvMS4wL21pbmd3L2xpYi9nY2MtbGliL2k2 ODYtcGMtbWluZ3czMi8zLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzDQojIDQzICJ0Oi9tc3lzLzEu MC9taW5ndy9pbmNsdWRlL3N0ZGlvLmgiIDIgMw0KIyAxMzMgInQ6L21zeXMvMS4wL21pbmd3L2lu Y2x1ZGUvc3RkaW8uaCIgMw0KdHlwZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCB2YV9saXN0Ow0KIyAx NDcgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvc3RkaW8uaCIgMw0KdHlwZWRlZiBzdHJ1Y3Qg X2lvYnVmDQp7DQogICAgICAgIGNoYXIqIF9wdHI7DQogICAgICAgIGludCBfY250Ow0KICAgICAg ICBjaGFyKiBfYmFzZTsNCiAgICAgICAgaW50IF9mbGFnOw0KICAgICAgICBpbnQgX2ZpbGU7DQog ICAgICAgIGludCBfY2hhcmJ1ZjsNCiAgICAgICAgaW50IF9idWZzaXo7DQogICAgICAgIGNoYXIq IF90bXBmbmFtZTsNCn0gRklMRTsNCiMgMTcyICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL3N0 ZGlvLmgiIDMNCmV4dGVybiBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBGSUxFIF9pb2JbXTsN CiMgMTgxICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL3N0ZGlvLmgiIDMNCmV4dGVybiAiQyIg ew0KDQoNCg0KDQoNCkZJTEUqIGZvcGVuIChjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOw0KRklM RSogZnJlb3BlbiAoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBGSUxFKik7DQppbnQgZmZsdXNo IChGSUxFKik7DQppbnQgZmNsb3NlIChGSUxFKik7DQoNCmludCByZW1vdmUgKGNvbnN0IGNoYXIq KTsNCmludCByZW5hbWUgKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7DQpGSUxFKiB0bXBmaWxl ICh2b2lkKTsNCmNoYXIqIHRtcG5hbSAoY2hhciopOw0KY2hhciogX3RlbXBuYW0gKGNvbnN0IGNo YXIqLCBjb25zdCBjaGFyKik7DQoNCg0KY2hhciogdGVtcG5hbSAoY29uc3QgY2hhciosIGNvbnN0 IGNoYXIqKTsNCg0KDQppbnQgc2V0dmJ1ZiAoRklMRSosIGNoYXIqLCBpbnQsIHNpemVfdCk7DQoN CnZvaWQgc2V0YnVmIChGSUxFKiwgY2hhciopOw0KDQoNCg0KDQoNCmludCBmcHJpbnRmIChGSUxF KiwgY29uc3QgY2hhciosIC4uLik7DQppbnQgcHJpbnRmIChjb25zdCBjaGFyKiwgLi4uKTsNCmlu dCBzcHJpbnRmIChjaGFyKiwgY29uc3QgY2hhciosIC4uLik7DQppbnQgX3NucHJpbnRmIChjaGFy Kiwgc2l6ZV90LCBjb25zdCBjaGFyKiwgLi4uKTsNCmludCB2ZnByaW50ZiAoRklMRSosIGNvbnN0 IGNoYXIqLCB2YV9saXN0KTsNCmludCB2cHJpbnRmIChjb25zdCBjaGFyKiwgdmFfbGlzdCk7DQpp bnQgdnNwcmludGYgKGNoYXIqLCBjb25zdCBjaGFyKiwgdmFfbGlzdCk7DQppbnQgX3ZzbnByaW50 ZiAoY2hhciosIHNpemVfdCwgY29uc3QgY2hhciosIHZhX2xpc3QpOw0KDQoNCg0KDQoNCg0KaW50 IGZzY2FuZiAoRklMRSosIGNvbnN0IGNoYXIqLCAuLi4pOw0KaW50IHNjYW5mIChjb25zdCBjaGFy KiwgLi4uKTsNCmludCBzc2NhbmYgKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgLi4uKTsNCg0K DQoNCg0KaW50IGZnZXRjIChGSUxFKik7DQpjaGFyKiBmZ2V0cyAoY2hhciosIGludCwgRklMRSop Ow0KaW50IGZwdXRjIChpbnQsIEZJTEUqKTsNCmludCBmcHV0cyAoY29uc3QgY2hhciosIEZJTEUq KTsNCmludCBnZXRjIChGSUxFKik7DQppbnQgZ2V0Y2hhciAodm9pZCk7DQpjaGFyKiBnZXRzIChj aGFyKik7DQppbnQgcHV0YyAoaW50LCBGSUxFKik7DQppbnQgcHV0Y2hhciAoaW50KTsNCmludCBw dXRzIChjb25zdCBjaGFyKik7DQppbnQgdW5nZXRjIChpbnQsIEZJTEUqKTsNCg0KDQoNCg0KDQpz aXplX3QgZnJlYWQgKHZvaWQqLCBzaXplX3QsIHNpemVfdCwgRklMRSopOw0Kc2l6ZV90IGZ3cml0 ZSAoY29uc3Qgdm9pZCosIHNpemVfdCwgc2l6ZV90LCBGSUxFKik7DQoNCg0KDQoNCg0KaW50IGZz ZWVrIChGSUxFKiwgbG9uZywgaW50KTsNCmxvbmcgZnRlbGwgKEZJTEUqKTsNCnZvaWQgcmV3aW5k IChGSUxFKik7DQojIDI2OCAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9zdGRpby5oIiAzDQp0 eXBlZGVmIGxvbmcgbG9uZyBmcG9zX3Q7DQoNCg0KDQoNCmludCBmZ2V0cG9zIChGSUxFKiwgZnBv c190Kik7DQppbnQgZnNldHBvcyAoRklMRSosIGNvbnN0IGZwb3NfdCopOw0KDQoNCg0KDQoNCnZv aWQgY2xlYXJlcnIgKEZJTEUqKTsNCmludCBmZW9mIChGSUxFKik7DQppbnQgZmVycm9yIChGSUxF Kik7DQp2b2lkIHBlcnJvciAoY29uc3QgY2hhciopOw0KDQoNCg0KDQoNCg0KRklMRSogX3BvcGVu IChjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOw0KaW50IF9wY2xvc2UgKEZJTEUqKTsNCg0KDQpG SUxFKiBwb3BlbiAoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKTsNCmludCBwY2xvc2UgKEZJTEUq KTsNCg0KDQoNCg0KDQppbnQgX2ZsdXNoYWxsKHZvaWQpOw0KaW50IF9mZ2V0Y2hhciAodm9pZCk7 DQppbnQgX2ZwdXRjaGFyIChpbnQpOw0KRklMRSogX2Zkb3BlbiAoaW50LCBjb25zdCBjaGFyKik7 DQppbnQgX2ZpbGVubyAoRklMRSopOw0KDQoNCmludCBmZ2V0Y2hhciAodm9pZCk7DQppbnQgZnB1 dGNoYXIgKGludCk7DQpGSUxFKiBmZG9wZW4gKGludCwgY29uc3QgY2hhciopOw0KaW50IGZpbGVu byAoRklMRSopOw0KIyAzMjAgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvc3RkaW8uaCIgMw0K aW50IGZ3cHJpbnRmIChGSUxFKiwgY29uc3Qgd2NoYXJfdCosIC4uLik7DQppbnQgd3ByaW50ZiAo Y29uc3Qgd2NoYXJfdCosIC4uLik7DQppbnQgc3dwcmludGYgKHdjaGFyX3QqLCBjb25zdCB3Y2hh cl90KiwgLi4uKTsNCmludCB2ZndwcmludGYgKEZJTEUqLCBjb25zdCB3Y2hhcl90KiwgdmFfbGlz dCk7DQppbnQgdndwcmludGYgKGNvbnN0IHdjaGFyX3QqLCB2YV9saXN0KTsNCmludCB2c3dwcmlu dGYgKHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90KiwgdmFfbGlzdCk7DQppbnQgZndzY2FuZiAoRklM RSosIGNvbnN0IHdjaGFyX3QqLCAuLi4pOw0KaW50IHdzY2FuZiAoY29uc3Qgd2NoYXJfdCosIC4u Lik7DQppbnQgc3dzY2FuZiAoY29uc3Qgd2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqLCAuLi4pOw0K d2ludF90IGZnZXR3YyAoRklMRSopOw0Kd2ludF90IGZwdXR3YyAod2NoYXJfdCwgRklMRSopOw0K d2ludF90IHVuZ2V0d2MgKHdjaGFyX3QsIEZJTEUqKTsNCg0Kd2NoYXJfdCogZmdldHdzICh3Y2hh cl90KiwgaW50LCBGSUxFKik7DQppbnQgZnB1dHdzIChjb25zdCB3Y2hhcl90KiwgRklMRSopOw0K d2ludF90IGdldHdjIChGSUxFKik7DQp3aW50X3QgZ2V0d2NoYXIgKHZvaWQpOw0Kd2NoYXJfdCog X2dldHdzICh3Y2hhcl90Kik7DQp3aW50X3QgcHV0d2MgKHdpbnRfdCwgRklMRSopOw0KaW50IF9w dXR3cyAoY29uc3Qgd2NoYXJfdCopOw0Kd2ludF90IHB1dHdjaGFyICh3aW50X3QpOw0KRklMRSog X3dmb3BlbiAoY29uc3Qgd2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqKTsNCkZJTEUqIF93ZnJlb3Bl biAoY29uc3Qgd2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqLCBGSUxFKik7DQpGSUxFKiBfd2Zzb3Bl bihjb25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCosIGludCk7DQp3Y2hhcl90KiBfd3RtcG5h bSAod2NoYXJfdCopOw0Kd2NoYXJfdCogX3d0ZW1wbmFtIChjb25zdCB3Y2hhcl90KiwgY29uc3Qg d2NoYXJfdCopOw0KaW50IF93cmVuYW1lKGNvbnN0IHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90Kik7 DQppbnQgX3dyZW1vdmUgKGNvbnN0IHdjaGFyX3QqKTsNCnZvaWQgX3dwZXJyb3IoY29uc3Qgd2No YXJfdCopOw0KRklMRSogX3dwb3Blbihjb25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCopOw0K IyAzNzQgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvc3RkaW8uaCIgMw0Kd2ludF90IF9mZ2V0 d2NoYXIodm9pZCk7DQp3aW50X3QgX2ZwdXR3Y2hhcih3aW50X3QpOw0KaW50IF9nZXR3IChGSUxF Kik7DQppbnQgX3B1dHcgKGludCwgRklMRSopOw0KDQoNCndpbnRfdCBmZ2V0d2NoYXIodm9pZCk7 DQp3aW50X3QgZnB1dHdjaGFyKHdpbnRfdCk7DQppbnQgZ2V0dyAoRklMRSopOw0KaW50IHB1dHcg KGludCwgRklMRSopOw0KDQoNCg0KDQoNCn0NCiMgMzUgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1 ZGUvd2NoYXIuaCIgMiAzDQojIDEgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvc3RkbGliLmgi IDEgMw0KIyAzOCAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9zdGRsaWIuaCIgMw0KIyAxICJ0 Oi9tc3lzLzEuMC9taW5ndy9saWIvZ2NjLWxpYi9pNjg2LXBjLW1pbmd3MzIvMy4xL2luY2x1ZGUv c3RkZGVmLmgiIDEgMw0KIyAzOSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9zdGRsaWIuaCIg MiAzDQojIDc3ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL3N0ZGxpYi5oIiAzDQpleHRlcm4g IkMiIHsNCiMgODYgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvc3RkbGliLmgiIDMNCmV4dGVy biBpbnQgX2FyZ2M7DQpleHRlcm4gY2hhcioqIF9hcmd2Ow0KDQoNCg0KDQpleHRlcm4gaW50KiBf X3BfX19hcmdjKHZvaWQpOw0KZXh0ZXJuIGNoYXIqKiogX19wX19fYXJndih2b2lkKTsNCmV4dGVy biB3Y2hhcl90KioqIF9fcF9fX3dhcmd2KHZvaWQpOw0KIyAxNDIgInQ6L21zeXMvMS4wL21pbmd3 L2luY2x1ZGUvc3RkbGliLmgiIDMNCmludCogX2Vycm5vKHZvaWQpOw0KDQoNCmludCogX19kb3Nl cnJubyh2b2lkKTsNCg0KDQoNCg0KDQoNCg0KICBleHRlcm4gY2hhciAqKiogX19wX19lbnZpcm9u KCk7DQogIGV4dGVybiB3Y2hhcl90ICoqKiBfX3BfX3dlbnZpcm9uKCk7DQojIDE3NiAidDovbXN5 cy8xLjAvbWluZ3cvaW5jbHVkZS9zdGRsaWIuaCIgMw0KICBleHRlcm4gX19hdHRyaWJ1dGVfXygo ZGxsaW1wb3J0KSkgaW50IF9zeXNfbmVycjsNCiMgMjAwICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNs dWRlL3N0ZGxpYi5oIiAzDQpleHRlcm4gX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgY2hhciog X3N5c19lcnJsaXN0W107DQojIDIxNCAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9zdGRsaWIu aCIgMw0KZXh0ZXJuIHVuc2lnbmVkIGludCogX19wX19vc3Zlcih2b2lkKTsNCmV4dGVybiB1bnNp Z25lZCBpbnQqIF9fcF9fd2ludmVyKHZvaWQpOw0KZXh0ZXJuIHVuc2lnbmVkIGludCogX19wX193 aW5tYWpvcih2b2lkKTsNCmV4dGVybiB1bnNpZ25lZCBpbnQqIF9fcF9fd2lubWlub3Iodm9pZCk7 DQojIDI1OCAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9zdGRsaWIuaCIgMw0KY2hhcioqIF9f cF9fcGdtcHRyKHZvaWQpOw0KDQp3Y2hhcl90KiogX19wX193cGdtcHRyKHZvaWQpOw0KIyAyODEg InQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvc3RkbGliLmgiIDMNCmRvdWJsZSBhdG9mIChjb25z dCBjaGFyKik7DQppbnQgYXRvaSAoY29uc3QgY2hhciopOw0KbG9uZyBhdG9sIChjb25zdCBjaGFy Kik7DQppbnQgX3d0b2kgKGNvbnN0IHdjaGFyX3QgKik7DQpsb25nIF93dG9sIChjb25zdCB3Y2hh cl90ICopOw0KDQpkb3VibGUgc3RydG9kIChjb25zdCBjaGFyKiwgY2hhcioqKTsNCmRvdWJsZSB3 Y3N0b2QgKGNvbnN0IHdjaGFyX3QqLCB3Y2hhcl90KiopOw0KbG9uZyBzdHJ0b2wgKGNvbnN0IGNo YXIqLCBjaGFyKiosIGludCk7DQpsb25nIHdjc3RvbCAoY29uc3Qgd2NoYXJfdCosIHdjaGFyX3Qq KiwgaW50KTsNCg0KdW5zaWduZWQgbG9uZyBzdHJ0b3VsIChjb25zdCBjaGFyKiwgY2hhcioqLCBp bnQpOw0KdW5zaWduZWQgbG9uZyB3Y3N0b3VsIChjb25zdCB3Y2hhcl90Kiwgd2NoYXJfdCoqLCBp bnQpOw0KDQpzaXplX3Qgd2NzdG9tYnMgKGNoYXIqLCBjb25zdCB3Y2hhcl90Kiwgc2l6ZV90KTsN CmludCB3Y3RvbWIgKGNoYXIqLCB3Y2hhcl90KTsNCg0KaW50IG1ibGVuIChjb25zdCBjaGFyKiwg c2l6ZV90KTsNCnNpemVfdCBtYnN0b3djcyAod2NoYXJfdCosIGNvbnN0IGNoYXIqLCBzaXplX3Qp Ow0KaW50IG1idG93YyAod2NoYXJfdCosIGNvbnN0IGNoYXIqLCBzaXplX3QpOw0KDQppbnQgcmFu ZCAodm9pZCk7DQp2b2lkIHNyYW5kICh1bnNpZ25lZCBpbnQpOw0KDQp2b2lkKiBjYWxsb2MgKHNp emVfdCwgc2l6ZV90KTsNCnZvaWQqIG1hbGxvYyAoc2l6ZV90KTsNCnZvaWQqIHJlYWxsb2MgKHZv aWQqLCBzaXplX3QpOw0Kdm9pZCBmcmVlICh2b2lkKik7DQoNCnZvaWQgYWJvcnQgKHZvaWQpIF9f YXR0cmlidXRlX18gKChub3JldHVybikpOw0Kdm9pZCBleGl0IChpbnQpIF9fYXR0cmlidXRlX18g KChub3JldHVybikpOw0KaW50IGF0ZXhpdCAodm9pZCAoKikodm9pZCkpOw0KDQppbnQgc3lzdGVt IChjb25zdCBjaGFyKik7DQpjaGFyKiBnZXRlbnYgKGNvbnN0IGNoYXIqKTsNCg0Kdm9pZCogYnNl YXJjaCAoY29uc3Qgdm9pZCosIGNvbnN0IHZvaWQqLCBzaXplX3QsIHNpemVfdCwNCiAgICAgICAg ICAgICAgICAgaW50ICgqKShjb25zdCB2b2lkKiwgY29uc3Qgdm9pZCopKTsNCnZvaWQgcXNvcnQg KGNvbnN0IHZvaWQqLCBzaXplX3QsIHNpemVfdCwNCiAgICAgICAgICAgICAgICAgaW50ICgqKShj b25zdCB2b2lkKiwgY29uc3Qgdm9pZCopKTsNCg0KaW50IGFicyAoaW50KTsNCmxvbmcgbGFicyAo bG9uZyk7DQojIDMzMyAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9zdGRsaWIuaCIgMw0KdHlw ZWRlZiBzdHJ1Y3QgeyBpbnQgcXVvdCwgcmVtOyB9IGRpdl90Ow0KdHlwZWRlZiBzdHJ1Y3QgeyBs b25nIHF1b3QsIHJlbTsgfSBsZGl2X3Q7DQoNCmRpdl90IGRpdiAoaW50LCBpbnQpOw0KbGRpdl90 IGxkaXYgKGxvbmcsIGxvbmcpOw0KIyAzNDYgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvc3Rk bGliLmgiIDMNCnZvaWQgX2JlZXAgKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsNCnZvaWQg X3NldGVycm9ybW9kZSAoaW50KTsNCnZvaWQgX3NsZWVwICh1bnNpZ25lZCBsb25nKTsNCg0Kdm9p ZCBfZXhpdCAoaW50KSBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKTsNCg0KaW50IF9wdXRlbnYg KGNvbnN0IGNoYXIqKTsNCnZvaWQgX3NlYXJjaGVudiAoY29uc3QgY2hhciosIGNvbnN0IGNoYXIq LCBjaGFyKik7DQoNCg0KY2hhciogX2VjdnQgKGRvdWJsZSwgaW50LCBpbnQqLCBpbnQqKTsNCmNo YXIqIF9mY3Z0IChkb3VibGUsIGludCwgaW50KiwgaW50Kik7DQpjaGFyKiBfZ2N2dCAoZG91Ymxl LCBpbnQsIGNoYXIqKTsNCg0Kdm9pZCBfbWFrZXBhdGggKGNoYXIqLCBjb25zdCBjaGFyKiwgY29u c3QgY2hhciosIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7DQp2b2lkIF9zcGxpdHBhdGggKGNv bnN0IGNoYXIqLCBjaGFyKiwgY2hhciosIGNoYXIqLCBjaGFyKik7DQpjaGFyKiBfZnVsbHBhdGgg KGNoYXIqLCBjb25zdCBjaGFyKiwgc2l6ZV90KTsNCg0KDQpjaGFyKiBfaXRvYSAoaW50LCBjaGFy KiwgaW50KTsNCmNoYXIqIF9sdG9hIChsb25nLCBjaGFyKiwgaW50KTsNCmNoYXIqIF91bHRvYSh1 bnNpZ25lZCBsb25nLCBjaGFyKiwgaW50KTsNCndjaGFyX3QqIF9pdG93IChpbnQsIHdjaGFyX3Qq LCBpbnQpOw0Kd2NoYXJfdCogX2x0b3cgKGxvbmcsIHdjaGFyX3QqLCBpbnQpOw0Kd2NoYXJfdCog X3VsdG93ICh1bnNpZ25lZCBsb25nLCB3Y2hhcl90KiwgaW50KTsNCg0KDQpsb25nIGxvbmcgX2F0 b2k2NChjb25zdCBjaGFyICopOw0KY2hhciogX2k2NHRvYShsb25nIGxvbmcsIGNoYXIgKiwgaW50 KTsNCmNoYXIqIF91aTY0dG9hKHVuc2lnbmVkIGxvbmcgbG9uZywgY2hhciAqLCBpbnQpOw0KbG9u ZyBsb25nIF93dG9pNjQoY29uc3Qgd2NoYXJfdCAqKTsNCndjaGFyX3QqIF9pNjR0b3cobG9uZyBs b25nLCB3Y2hhcl90ICosIGludCk7DQp3Y2hhcl90KiBfdWk2NHRvdyh1bnNpZ25lZCBsb25nIGxv bmcsIHdjaGFyX3QgKiwgaW50KTsNCg0Kd2NoYXJfdCogX3dnZXRlbnYoY29uc3Qgd2NoYXJfdCop Ow0KaW50IF93cHV0ZW52KGNvbnN0IHdjaGFyX3QqKTsNCnZvaWQgX3dzZWFyY2hlbnYoY29uc3Qg d2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqLCB3Y2hhcl90Kik7DQp2b2lkIF93bWFrZXBhdGgod2No YXJfdCosIGNvbnN0IHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCosIGNv bnN0IHdjaGFyX3QqKTsNCnZvaWQgX3dzcGxpdHBhdGggKGNvbnN0IHdjaGFyX3QqLCB3Y2hhcl90 Kiwgd2NoYXJfdCosIHdjaGFyX3QqLCB3Y2hhcl90Kik7DQp3Y2hhcl90KiBfd2Z1bGxwYXRoICh3 Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCosIHNpemVfdCk7DQoNCg0KDQoNCmludCBwdXRlbnYgKGNv bnN0IGNoYXIqKTsNCnZvaWQgc2VhcmNoZW52IChjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIGNo YXIqKTsNCg0KY2hhciogaXRvYSAoaW50LCBjaGFyKiwgaW50KTsNCmNoYXIqIGx0b2EgKGxvbmcs IGNoYXIqLCBpbnQpOw0KDQoNCmNoYXIqIGVjdnQgKGRvdWJsZSwgaW50LCBpbnQqLCBpbnQqKTsN CmNoYXIqIGZjdnQgKGRvdWJsZSwgaW50LCBpbnQqLCBpbnQqKTsNCmNoYXIqIGdjdnQgKGRvdWJs ZSwgaW50LCBjaGFyKik7DQojIDQxMSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9zdGRsaWIu aCIgMw0KfQ0KIyAzNiAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS93Y2hhci5oIiAyIDMNCiMg MSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9zdHJpbmcuaCIgMSAzDQojIDQwICJ0Oi9tc3lz LzEuMC9taW5ndy9pbmNsdWRlL3N0cmluZy5oIiAzDQojIDEgInQ6L21zeXMvMS4wL21pbmd3L2xp Yi9nY2MtbGliL2k2ODYtcGMtbWluZ3czMi8zLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzDQojIDQx ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL3N0cmluZy5oIiAyIDMNCg0KDQoNCg0KDQpleHRl cm4gIkMiIHsNCg0KDQoNCg0KDQp2b2lkKiBtZW1jaHIgKGNvbnN0IHZvaWQqLCBpbnQsIHNpemVf dCk7DQppbnQgbWVtY21wIChjb25zdCB2b2lkKiwgY29uc3Qgdm9pZCosIHNpemVfdCk7DQp2b2lk KiBtZW1jcHkgKHZvaWQqLCBjb25zdCB2b2lkKiwgc2l6ZV90KTsNCnZvaWQqIG1lbW1vdmUgKHZv aWQqLCBjb25zdCB2b2lkKiwgc2l6ZV90KTsNCnZvaWQqIG1lbXNldCAodm9pZCosIGludCwgc2l6 ZV90KTsNCmNoYXIqIHN0cmNhdCAoY2hhciosIGNvbnN0IGNoYXIqKTsNCmNoYXIqIHN0cmNociAo Y29uc3QgY2hhciosIGludCk7DQppbnQgc3RyY21wIChjb25zdCBjaGFyKiwgY29uc3QgY2hhciop Ow0KaW50IHN0cmNvbGwgKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7DQpjaGFyKiBzdHJjcHkg KGNoYXIqLCBjb25zdCBjaGFyKik7DQpzaXplX3Qgc3RyY3NwbiAoY29uc3QgY2hhciosIGNvbnN0 IGNoYXIqKTsNCmNoYXIqIHN0cmVycm9yIChpbnQpOw0KY2hhciogX3N0cmVycm9yIChjb25zdCBj aGFyICopOw0Kc2l6ZV90IHN0cmxlbiAoY29uc3QgY2hhciopOw0KY2hhciogc3RybmNhdCAoY2hh ciosIGNvbnN0IGNoYXIqLCBzaXplX3QpOw0KaW50IHN0cm5jbXAgKGNvbnN0IGNoYXIqLCBjb25z dCBjaGFyKiwgc2l6ZV90KTsNCmNoYXIqIHN0cm5jcHkgKGNoYXIqLCBjb25zdCBjaGFyKiwgc2l6 ZV90KTsNCmNoYXIqIHN0cnBicmsgKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7DQpjaGFyKiBz dHJyY2hyIChjb25zdCBjaGFyKiwgaW50KTsNCnNpemVfdCBzdHJzcG4gKGNvbnN0IGNoYXIqLCBj b25zdCBjaGFyKik7DQpjaGFyKiBzdHJzdHIgKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7DQpj aGFyKiBzdHJ0b2sgKGNoYXIqLCBjb25zdCBjaGFyKik7DQpzaXplX3Qgc3RyeGZybSAoY2hhcios IGNvbnN0IGNoYXIqLCBzaXplX3QpOw0KDQoNCg0KDQoNCnZvaWQqIF9tZW1jY3B5ICh2b2lkKiwg Y29uc3Qgdm9pZCosIGludCwgc2l6ZV90KTsNCmludCBfbWVtaWNtcCAoY29uc3Qgdm9pZCosIGNv bnN0IHZvaWQqLCBzaXplX3QpOw0KY2hhciogX3N0cmR1cCAoY29uc3QgY2hhciopOw0KaW50IF9z dHJjbXBpIChjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOw0KaW50IF9zdHJpY21wIChjb25zdCBj aGFyKiwgY29uc3QgY2hhciopOw0KaW50IF9zdHJpY29sbCAoY29uc3QgY2hhciosIGNvbnN0IGNo YXIqKTsNCmNoYXIqIF9zdHJsd3IgKGNoYXIqKTsNCmludCBfc3RybmljbXAgKGNvbnN0IGNoYXIq LCBjb25zdCBjaGFyKiwgc2l6ZV90KTsNCmNoYXIqIF9zdHJuc2V0IChjaGFyKiwgaW50LCBzaXpl X3QpOw0KY2hhciogX3N0cnJldiAoY2hhciopOw0KY2hhciogX3N0cnNldCAoY2hhciosIGludCk7 DQpjaGFyKiBfc3RydXByIChjaGFyKik7DQp2b2lkIF9zd2FiIChjb25zdCBjaGFyKiwgY2hhcios IHNpemVfdCk7DQoNCg0KDQoNCnVuc2lnbmVkIGNoYXIqIF9tYnNjaHIgKHVuc2lnbmVkIGNoYXIq LCB1bnNpZ25lZCBjaGFyKik7DQp1bnNpZ25lZCBjaGFyKiBfbWJzbmNhdCAodW5zaWduZWQgY2hh ciosIGNvbnN0IHVuc2lnbmVkIGNoYXIqLCBzaXplX3QpOw0KdW5zaWduZWQgY2hhciogX21ic3Rv ayAodW5zaWduZWQgY2hhciosIHVuc2lnbmVkIGNoYXIqKTsNCg0KDQppbnQgX3N0cm5jb2xsKGNv bnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgc2l6ZV90KTsNCmludCBfc3Rybmljb2xsKGNvbnN0IGNo YXIqLCBjb25zdCBjaGFyKiwgc2l6ZV90KTsNCg0KDQoNCg0KDQoNCg0Kd2NoYXJfdCogd2NzY2F0 ICh3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCopOw0Kd2NoYXJfdCogd2NzY2hyIChjb25zdCB3Y2hh cl90Kiwgd2NoYXJfdCk7DQppbnQgd2NzY21wIChjb25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJf dCopOw0KaW50IHdjc2NvbGwgKGNvbnN0IHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90Kik7DQp3Y2hh cl90KiB3Y3NjcHkgKHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90Kik7DQpzaXplX3Qgd2NzY3NwbiAo Y29uc3Qgd2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqKTsNCg0Kc2l6ZV90IHdjc2xlbiAoY29uc3Qg d2NoYXJfdCopOw0Kd2NoYXJfdCogd2NzbmNhdCAod2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqLCBz aXplX3QpOw0KaW50IHdjc25jbXAoY29uc3Qgd2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqLCBzaXpl X3QpOw0Kd2NoYXJfdCogd2NzbmNweSh3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCosIHNpemVfdCk7 DQp3Y2hhcl90KiB3Y3NwYnJrKGNvbnN0IHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90Kik7DQp3Y2hh cl90KiB3Y3NyY2hyKGNvbnN0IHdjaGFyX3QqLCB3Y2hhcl90KTsNCnNpemVfdCB3Y3NzcG4oY29u c3Qgd2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqKTsNCndjaGFyX3QqIHdjc3N0cihjb25zdCB3Y2hh cl90KiwgY29uc3Qgd2NoYXJfdCopOw0Kd2NoYXJfdCogd2NzdG9rKHdjaGFyX3QqLCBjb25zdCB3 Y2hhcl90Kik7DQpzaXplX3Qgd2NzeGZybSh3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCosIHNpemVf dCk7DQojIDEzNyAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9zdHJpbmcuaCIgMw0Kd2NoYXJf dCogX3djc2R1cCAod2NoYXJfdCopOw0KaW50IF93Y3NpY21wIChjb25zdCB3Y2hhcl90KiwgY29u c3Qgd2NoYXJfdCopOw0KaW50IF93Y3NpY29sbCAoY29uc3Qgd2NoYXJfdCosIGNvbnN0IHdjaGFy X3QqKTsNCndjaGFyX3QqIF93Y3Nsd3IgKHdjaGFyX3QqKTsNCmludCBfd2NzbmljbXAgKGNvbnN0 IHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90Kiwgc2l6ZV90KTsNCndjaGFyX3QqIF93Y3Nuc2V0ICh3 Y2hhcl90Kiwgd2NoYXJfdCwgc2l6ZV90KTsNCndjaGFyX3QqIF93Y3NyZXYgKHdjaGFyX3QqKTsN CndjaGFyX3QqIF93Y3NzZXQgKHdjaGFyX3QqLCB3Y2hhcl90KTsNCndjaGFyX3QqIF93Y3N1cHIg KHdjaGFyX3QqKTsNCg0KDQppbnQgX3djc25jb2xsKGNvbnN0IHdjaGFyX3QqLCBjb25zdCB3Y2hh cl90Kiwgc2l6ZV90KTsNCmludCBfd2Nzbmljb2xsKGNvbnN0IHdjaGFyX3QqLCBjb25zdCB3Y2hh cl90Kiwgc2l6ZV90KTsNCiMgMTY1ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL3N0cmluZy5o IiAzDQp2b2lkKiBtZW1jY3B5ICh2b2lkKiwgY29uc3Qgdm9pZCosIGludCwgc2l6ZV90KTsNCmlu dCBtZW1pY21wIChjb25zdCB2b2lkKiwgY29uc3Qgdm9pZCosIHNpemVfdCk7DQpjaGFyKiBzdHJk dXAgKGNvbnN0IGNoYXIqKTsNCmludCBzdHJjbXBpIChjb25zdCBjaGFyKiwgY29uc3QgY2hhciop Ow0KaW50IHN0cmljbXAgKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7DQppbnQgc3RyY2FzZWNt cCAoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKTsNCmludCBzdHJpY29sbCAoY29uc3QgY2hhcios IGNvbnN0IGNoYXIqKTsNCmNoYXIqIHN0cmx3ciAoY2hhciopOw0KaW50IHN0cm5pY21wIChjb25z dCBjaGFyKiwgY29uc3QgY2hhciosIHNpemVfdCk7DQppbnQgc3RybmNhc2VjbXAgKGNvbnN0IGNo YXIqLCBjb25zdCBjaGFyKiwgc2l6ZV90KTsNCmNoYXIqIHN0cm5zZXQgKGNoYXIqLCBpbnQsIHNp emVfdCk7DQpjaGFyKiBzdHJyZXYgKGNoYXIqKTsNCmNoYXIqIHN0cnNldCAoY2hhciosIGludCk7 DQpjaGFyKiBzdHJ1cHIgKGNoYXIqKTsNCg0Kdm9pZCBzd2FiIChjb25zdCBjaGFyKiwgY2hhcios IHNpemVfdCk7DQoNCg0KDQppbnQgd2NzY21waSAoY29uc3Qgd2NoYXJfdCosIGNvbnN0IHdjaGFy X3QqKTsNCndjaGFyX3QqIHdjc2R1cCAod2NoYXJfdCopOw0KaW50IHdjc2ljbXAgKGNvbnN0IHdj aGFyX3QqLCBjb25zdCB3Y2hhcl90Kik7DQppbnQgd2NzaWNvbGwgKGNvbnN0IHdjaGFyX3QqLCBj b25zdCB3Y2hhcl90Kik7DQp3Y2hhcl90KiB3Y3Nsd3IgKHdjaGFyX3QqKTsNCmludCB3Y3NuaWNt cCAoY29uc3Qgd2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqLCBzaXplX3QpOw0Kd2NoYXJfdCogd2Nz bnNldCAod2NoYXJfdCosIHdjaGFyX3QsIHNpemVfdCk7DQp3Y2hhcl90KiB3Y3NyZXYgKHdjaGFy X3QqKTsNCndjaGFyX3QqIHdjc3NldCAod2NoYXJfdCosIHdjaGFyX3QpOw0Kd2NoYXJfdCogd2Nz dXByICh3Y2hhcl90Kik7DQoNCg0KDQoNCg0KDQp9DQojIDM3ICJ0Oi9tc3lzLzEuMC9taW5ndy9p bmNsdWRlL3djaGFyLmgiIDIgMw0KIyAxICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL3RpbWUu aCIgMSAzDQojIDM2ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL3RpbWUuaCIgMw0KIyAxICJ0 Oi9tc3lzLzEuMC9taW5ndy9saWIvZ2NjLWxpYi9pNjg2LXBjLW1pbmd3MzIvMy4xL2luY2x1ZGUv c3RkZGVmLmgiIDEgMw0KIyAzNyAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS90aW1lLmgiIDIg Mw0KDQoNCg0KDQoNCiMgMSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9zeXMvdHlwZXMuaCIg MSAzDQojIDM4ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL3N5cy90eXBlcy5oIiAzDQojIDEg InQ6L21zeXMvMS4wL21pbmd3L2xpYi9nY2MtbGliL2k2ODYtcGMtbWluZ3czMi8zLjEvaW5jbHVk ZS9zdGRkZWYuaCIgMSAzDQojIDM5ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL3N5cy90eXBl cy5oIiAyIDMNCg0KDQoNCg0KDQp0eXBlZGVmIGxvbmcgdGltZV90Ow0KIyA1MyAidDovbXN5cy8x LjAvbWluZ3cvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMw0KdHlwZWRlZiBsb25nIF9vZmZfdDsNCg0K DQp0eXBlZGVmIF9vZmZfdCBvZmZfdDsNCg0KDQoNCg0KDQoNCg0KdHlwZWRlZiB1bnNpZ25lZCBp bnQgX2Rldl90Ow0KDQoNCg0KDQoNCnR5cGVkZWYgX2Rldl90IGRldl90Ow0KDQoNCg0KDQoNCg0K dHlwZWRlZiBzaG9ydCBfaW5vX3Q7DQoNCg0KdHlwZWRlZiBfaW5vX3QgaW5vX3Q7DQoNCg0KDQoN Cg0KDQp0eXBlZGVmIGludCBfcGlkX3Q7DQoNCg0KdHlwZWRlZiBfcGlkX3QgcGlkX3Q7DQoNCg0K DQoNCg0KDQp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9tb2RlX3Q7DQoNCg0KdHlwZWRlZiBfbW9k ZV90IG1vZGVfdDsNCg0KDQoNCg0KDQoNCnR5cGVkZWYgaW50IF9zaWdzZXRfdDsNCg0KDQp0eXBl ZGVmIF9zaWdzZXRfdCBzaWdzZXRfdDsNCiMgNDMgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUv dGltZS5oIiAyIDMNCiMgNjggInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvdGltZS5oIiAzDQp0 eXBlZGVmIGxvbmcgY2xvY2tfdDsNCiMgNzcgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvdGlt ZS5oIiAzDQpzdHJ1Y3QgdG0NCnsNCiAgICAgICAgaW50IHRtX3NlYzsNCiAgICAgICAgaW50IHRt X21pbjsNCiAgICAgICAgaW50IHRtX2hvdXI7DQogICAgICAgIGludCB0bV9tZGF5Ow0KICAgICAg ICBpbnQgdG1fbW9uOw0KICAgICAgICBpbnQgdG1feWVhcjsNCiAgICAgICAgaW50IHRtX3dkYXk7 DQogICAgICAgIGludCB0bV95ZGF5Ow0KICAgICAgICBpbnQgdG1faXNkc3Q7DQoNCn07DQoNCg0K ZXh0ZXJuICJDIiB7DQoNCg0KY2xvY2tfdCBjbG9jayAodm9pZCk7DQp0aW1lX3QgdGltZSAodGlt ZV90Kik7DQpkb3VibGUgZGlmZnRpbWUgKHRpbWVfdCwgdGltZV90KTsNCnRpbWVfdCBta3RpbWUg KHN0cnVjdCB0bSopOw0KIyAxMTAgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvdGltZS5oIiAz DQpjaGFyKiBhc2N0aW1lIChjb25zdCBzdHJ1Y3QgdG0qKTsNCmNoYXIqIGN0aW1lIChjb25zdCB0 aW1lX3QqKTsNCnN0cnVjdCB0bSogZ210aW1lIChjb25zdCB0aW1lX3QqKTsNCnN0cnVjdCB0bSog bG9jYWx0aW1lIChjb25zdCB0aW1lX3QqKTsNCg0KDQpzaXplX3Qgc3RyZnRpbWUgKGNoYXIqLCBz aXplX3QsIGNvbnN0IGNoYXIqLCBjb25zdCBzdHJ1Y3QgdG0qKTsNCg0Kc2l6ZV90IHdjc2Z0aW1l ICh3Y2hhcl90Kiwgc2l6ZV90LCBjb25zdCB3Y2hhcl90KiwgY29uc3Qgc3RydWN0IHRtKik7DQoN Cg0KZXh0ZXJuIHZvaWQgX3R6c2V0ICh2b2lkKTsNCg0KDQpleHRlcm4gdm9pZCB0enNldCAodm9p ZCk7DQoNCg0Kc2l6ZV90IHN0cmZ0aW1lKGNoYXIqLCBzaXplX3QsIGNvbnN0IGNoYXIqLCBjb25z dCBzdHJ1Y3QgdG0qKTsNCmNoYXIqIF9zdHJkYXRlKGNoYXIqKTsNCmNoYXIqIF9zdHJ0aW1lKGNo YXIqKTsNCiMgMTQyICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL3RpbWUuaCIgMw0KZXh0ZXJu IGludCogX19wX19kYXlsaWdodCAodm9pZCk7DQpleHRlcm4gbG9uZyogX19wX190aW1lem9uZSAo dm9pZCk7DQpleHRlcm4gY2hhcioqIF9fcF9fdHpuYW1lICh2b2lkKTsNCg0KZXh0ZXJuIF9fYXR0 cmlidXRlX18oKGRsbGltcG9ydCkpIGludCBfZGF5bGlnaHQ7DQpleHRlcm4gX19hdHRyaWJ1dGVf XygoZGxsaW1wb3J0KSkgbG9uZyBfdGltZXpvbmU7DQpleHRlcm4gX19hdHRyaWJ1dGVfXygoZGxs aW1wb3J0KSkgY2hhciAqX3R6bmFtZVsyXTsNCiMgMTgwICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNs dWRlL3RpbWUuaCIgMw0KZXh0ZXJuIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGludCBkYXls aWdodDsNCmV4dGVybiBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBsb25nIHRpbWV6b25lOw0K ZXh0ZXJuIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGNoYXIgKnR6bmFtZVsyXTsNCg0KDQoN Cg0KDQp3Y2hhcl90ICogX3dhc2N0aW1lKGNvbnN0IHN0cnVjdCB0bSopOw0Kd2NoYXJfdCAqIF93 Y3RpbWUoY29uc3QgdGltZV90Kik7DQp3Y2hhcl90KiBfd3N0cmRhdGUod2NoYXJfdCopOw0Kd2No YXJfdCogX3dzdHJ0aW1lKHdjaGFyX3QqKTsNCiMgMjEzICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNs dWRlL3RpbWUuaCIgMw0KfQ0KIyAzOCAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS93Y2hhci5o IiAyIDMNCg0KDQoNCg0KDQoNCiMgMSAidDovbXN5cy8xLjAvbWluZ3cvbGliL2djYy1saWIvaTY4 Ni1wYy1taW5ndzMyLzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMNCiMgNDUgInQ6L21zeXMvMS4w L21pbmd3L2luY2x1ZGUvd2NoYXIuaCIgMiAzDQojIDUzICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNs dWRlL3djaGFyLmgiIDMNCmV4dGVybiAiQyIgew0KDQoNCg0KDQoNCnR5cGVkZWYgdW5zaWduZWQg bG9uZyBfZnNpemVfdDsNCg0KDQoNCg0Kc3RydWN0IF93ZmluZGRhdGFfdCB7DQogICAgICAgIHVu c2lnbmVkIGF0dHJpYjsNCiAgICAgICAgdGltZV90IHRpbWVfY3JlYXRlOw0KICAgICAgICB0aW1l X3QgdGltZV9hY2Nlc3M7DQogICAgICAgIHRpbWVfdCB0aW1lX3dyaXRlOw0KICAgICAgICBfZnNp emVfdCBzaXplOw0KICAgICAgICB3Y2hhcl90IG5hbWVbKDI2MCldOw0KfTsNCnN0cnVjdCBfd2Zp bmRkYXRhaTY0X3Qgew0KICAgIHVuc2lnbmVkIGF0dHJpYjsNCiAgICB0aW1lX3QgdGltZV9jcmVh dGU7DQogICAgdGltZV90IHRpbWVfYWNjZXNzOw0KICAgIHRpbWVfdCB0aW1lX3dyaXRlOw0KICAg IGxvbmcgbG9uZyBzaXplOw0KICAgIHdjaGFyX3QgbmFtZVsoMjYwKV07DQp9Ow0KIyA4OCAidDov bXN5cy8xLjAvbWluZ3cvaW5jbHVkZS93Y2hhci5oIiAzDQppbnQgX3dhY2Nlc3MoY29uc3Qgd2No YXJfdCosIGludCk7DQppbnQgX3djaG1vZChjb25zdCB3Y2hhcl90KiwgaW50KTsNCmludCBfd2Ny ZWF0KGNvbnN0IHdjaGFyX3QqLCBpbnQpOw0KbG9uZyBfd2ZpbmRmaXJzdCh3Y2hhcl90Kiwgc3Ry dWN0IF93ZmluZGRhdGFfdCAqKTsNCmludCBfd2ZpbmRuZXh0KGxvbmcsIHN0cnVjdCBfd2ZpbmRk YXRhX3QgKik7DQppbnQgX3d1bmxpbmsoY29uc3Qgd2NoYXJfdCopOw0KaW50IF93b3Blbihjb25z dCB3Y2hhcl90KiwgaW50LCAuLi4pOw0KaW50IF93c29wZW4oY29uc3Qgd2NoYXJfdCosIGludCwg aW50LCAuLi4pOw0Kd2NoYXJfdCAqIF93bWt0ZW1wKHdjaGFyX3QqKTsNCmxvbmcgX3dmaW5kZmly c3RpNjQoY29uc3Qgd2NoYXJfdCosIHN0cnVjdCBfd2ZpbmRkYXRhaTY0X3QqKTsNCmludCBfd2Zp bmRuZXh0aTY0KGxvbmcsIHN0cnVjdCBfd2ZpbmRkYXRhaTY0X3QqKTsNCiMgMTQ1ICJ0Oi9tc3lz LzEuMC9taW5ndy9pbmNsdWRlL3djaGFyLmgiIDMNCmludCBfd2NoZGlyKGNvbnN0IHdjaGFyX3Qq KTsNCndjaGFyX3QqIF93Z2V0Y3dkKHdjaGFyX3QqLCBpbnQpOw0Kd2NoYXJfdCogX3dnZXRkY3dk KGludCwgd2NoYXJfdCosIGludCk7DQppbnQgX3dta2Rpcihjb25zdCB3Y2hhcl90Kik7DQppbnQg X3dybWRpcihjb25zdCB3Y2hhcl90Kik7DQojIDE2MiAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVk ZS93Y2hhci5oIiAzDQpzdHJ1Y3QgX3N0YXQNCnsNCiAgICAgICAgX2Rldl90IHN0X2RldjsNCiAg ICAgICAgX2lub190IHN0X2lubzsNCiAgICAgICAgX21vZGVfdCBzdF9tb2RlOw0KICAgICAgICBz aG9ydCBzdF9ubGluazsNCiAgICAgICAgc2hvcnQgc3RfdWlkOw0KICAgICAgICBzaG9ydCBzdF9n aWQ7DQogICAgICAgIF9kZXZfdCBzdF9yZGV2Ow0KICAgICAgICBfb2ZmX3Qgc3Rfc2l6ZTsNCiAg ICAgICAgdGltZV90IHN0X2F0aW1lOw0KDQogICAgICAgIHRpbWVfdCBzdF9tdGltZTsNCiAgICAg ICAgdGltZV90IHN0X2N0aW1lOw0KfTsNCg0Kc3RydWN0IHN0YXQNCnsNCiAgICAgICAgX2Rldl90 IHN0X2RldjsNCiAgICAgICAgX2lub190IHN0X2lubzsNCiAgICAgICAgX21vZGVfdCBzdF9tb2Rl Ow0KICAgICAgICBzaG9ydCBzdF9ubGluazsNCiAgICAgICAgc2hvcnQgc3RfdWlkOw0KICAgICAg ICBzaG9ydCBzdF9naWQ7DQogICAgICAgIF9kZXZfdCBzdF9yZGV2Ow0KICAgICAgICBfb2ZmX3Qg c3Rfc2l6ZTsNCiAgICAgICAgdGltZV90IHN0X2F0aW1lOw0KDQogICAgICAgIHRpbWVfdCBzdF9t dGltZTsNCiAgICAgICAgdGltZV90IHN0X2N0aW1lOw0KfTsNCg0Kc3RydWN0IF9zdGF0aTY0IHsN CiAgICBfZGV2X3Qgc3RfZGV2Ow0KICAgIF9pbm9fdCBzdF9pbm87DQogICAgdW5zaWduZWQgc2hv cnQgc3RfbW9kZTsNCiAgICBzaG9ydCBzdF9ubGluazsNCiAgICBzaG9ydCBzdF91aWQ7DQogICAg c2hvcnQgc3RfZ2lkOw0KICAgIF9kZXZfdCBzdF9yZGV2Ow0KICAgIGxvbmcgbG9uZyBzdF9zaXpl Ow0KICAgIHRpbWVfdCBzdF9hdGltZTsNCiAgICB0aW1lX3Qgc3RfbXRpbWU7DQogICAgdGltZV90 IHN0X2N0aW1lOw0KICAgIH07DQoNCg0KDQoNCg0KDQoNCmludCBfd3N0YXQoY29uc3Qgd2NoYXJf dCosIHN0cnVjdCBfc3RhdCopOw0KaW50IF93c3RhdGk2NCAoY29uc3Qgd2NoYXJfdCosIHN0cnVj dCBfc3RhdGk2NCopOw0KIyAyMzMgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvd2NoYXIuaCIg Mw0Kd2NoYXJfdCogX3dzZXRsb2NhbGUoaW50LCBjb25zdCB3Y2hhcl90Kik7DQojIDI2MiAidDov bXN5cy8xLjAvbWluZ3cvaW5jbHVkZS93Y2hhci5oIiAzDQp0eXBlZGVmIGludCBtYnN0YXRlX3Q7 DQp0eXBlZGVmIHdjaGFyX3QgX1dpbnRfdDsNCg0Kd2ludF90IGJ0b3djKGludCk7DQpzaXplX3Qg bWJybGVuKGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBtYnN0YXRlX3QgKik7DQpzaXplX3QgbWJydG93 Yyh3Y2hhcl90ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBtYnN0YXRlX3QgKik7DQpzaXplX3Qg bWJzcnRvd2NzKHdjaGFyX3QgKiwgY29uc3QgY2hhciAqKiwgc2l6ZV90LCBtYnN0YXRlX3QgKik7 DQoNCnNpemVfdCB3Y3J0b21iKGNoYXIgKiwgd2NoYXJfdCwgbWJzdGF0ZV90ICopOw0Kc2l6ZV90 IHdjc3J0b21icyhjaGFyICosIGNvbnN0IHdjaGFyX3QgKiosIHNpemVfdCwgbWJzdGF0ZV90ICop Ow0KaW50IHdjdG9iKHdpbnRfdCk7DQoNCg0KfQ0KIyAyODEgIi4uLy4uL2luY2x1ZGUvd3gvd3hj aGFyLmgiIDINCiMgNTE0ICIuLi8uLi9pbmNsdWRlL3d4L3d4Y2hhci5oIg0KX19hdHRyaWJ1dGVf XygoZGxsaW1wb3J0KSkgaW5saW5lIGJvb2wgd3hJc0VtcHR5KGNvbnN0IGNoYXIgKnApIHsgcmV0 dXJuICFwIHx8ICEqcDsgfQ0KDQoNCg0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgaW5saW5l IHNpemVfdCB3eFN0cmxlbihjb25zdCBjaGFyICpwc3opDQogICB7IHJldHVybiBwc3ogPyBzdHJs ZW4ocHN6KSA6IDA7IH0NCg0KDQoNCg0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgc2l6ZV90 IHd4TUIyV0Mod2NoYXJfdCAqYnVmLCBjb25zdCBjaGFyICpwc3osIHNpemVfdCBuKTsNCl9fYXR0 cmlidXRlX18oKGRsbGltcG9ydCkpIHNpemVfdCB3eFdDMk1CKGNoYXIgKmJ1ZiwgY29uc3Qgd2No YXJfdCAqcHN6LCBzaXplX3Qgbik7DQojIDU0NyAiLi4vLi4vaW5jbHVkZS93eC93eGNoYXIuaCIN Cl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGJvb2wgd3hPS2xpYmMoKTsNCiMgMTggIi4uLy4u L2luY2x1ZGUvd3gvZGVidWcuaCIgMg0KIyA0NyAiLi4vLi4vaW5jbHVkZS93eC9kZWJ1Zy5oIg0K X19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgZXh0ZXJuIGNvbnN0IGJvb2wgd3hUcnVlOw0KX19h dHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgZXh0ZXJuIGNvbnN0IGJvb2wgd3hGYWxzZTsNCiMgNjAg Ii4uLy4uL2luY2x1ZGUvd3gvZGVidWcuaCINCiAgdm9pZCBfX2F0dHJpYnV0ZV9fKChkbGxpbXBv cnQpKSB3eE9uQXNzZXJ0KGNvbnN0IGNoYXIgKnN6RmlsZSwgaW50IG5MaW5lLCBjb25zdCBjaGFy ICpzek1zZyA9IChjb25zdCBjaGFyICopIF9fbnVsbCk7DQojIDQ2OSAiLi4vLi4vaW5jbHVkZS93 eC9kZWZzLmgiIDINCiMgNTM3ICIuLi8uLi9pbmNsdWRlL3d4L2RlZnMuaCINCnR5cGVkZWYgdm9p ZCAoKnd4RnVuY3Rpb24pICh3eE9iamVjdCYsIHd4RXZlbnQmKTsNCg0KDQoNCg0KDQoNCmVudW0N CnsNCiAgICB3eFVOS05PV05fUExBVEZPUk0sDQogICAgd3hDVVJTRVMsDQogICAgd3hYVklFV19Y LA0KICAgIHd4TU9USUZfWCwNCiAgICB3eENPU0VfWCwNCiAgICB3eE5FWFRTVEVQLA0KICAgIHd4 TUFDSU5UT1NILA0KICAgIHd4QkVPUywNCiAgICB3eEdUSywNCiAgICB3eEdUS19XSU4zMiwNCiAg ICB3eEdUS19PUzIsDQogICAgd3hHVEtfQkVPUywNCiAgICB3eFFULA0KICAgIHd4R0VPUywNCiAg ICB3eE9TMl9QTSwNCiAgICB3eFdJTkRPV1MsDQogICAgd3hQRU5XSU5ET1dTLA0KICAgIHd4V0lO RE9XU19OVCwNCiAgICB3eFdJTjMyUywNCiAgICB3eFdJTjk1LA0KICAgIHd4V0lOMzg2LA0KICAg IHd4TUdMX1VOSVgsDQogICAgd3hNR0xfWCwNCiAgICB3eE1HTF9XSU4zMiwNCiAgICB3eE1HTF9P UzIsDQogICAgd3hXSU5ET1dTX09TMiwNCiAgICB3eFVOSVgNCn07DQojIDU5MSAiLi4vLi4vaW5j bHVkZS93eC9kZWZzLmgiDQogICAgICAgIHR5cGVkZWYgaW50IHd4Q29vcmQ7DQojIDY1MiAiLi4v Li4vaW5jbHVkZS93eC9kZWZzLmgiDQp0eXBlZGVmIGZsb2F0IHd4RmxvYXQzMiA7DQoNCg0KDQog ICAgdHlwZWRlZiBkb3VibGUgd3hGbG9hdDY0Ow0KDQoNCg0KDQoNCiAgICB0eXBlZGVmIGRvdWJs ZSB3eERvdWJsZSA7DQojIDc2MyAiLi4vLi4vaW5jbHVkZS93eC9kZWZzLmgiDQplbnVtIHd4R2Vv bWV0cnlDZW50cmUNCnsNCiAgICB3eENFTlRSRSA9IDB4MDAwMSwNCiAgICB3eENFTlRFUiA9IHd4 Q0VOVFJFDQp9Ow0KDQoNCg0KDQoNCg0KDQplbnVtIHd4T3JpZW50YXRpb24NCnsNCiAgICB3eEhP UklaT05UQUwgPSAweDAwMDQsDQogICAgd3hWRVJUSUNBTCA9IDB4MDAwOCwNCg0KICAgIHd4Qk9U SCA9ICh3eFZFUlRJQ0FMIHwgd3hIT1JJWk9OVEFMKQ0KfTsNCg0KZW51bSB3eERpcmVjdGlvbg0K ew0KICAgIHd4TEVGVCA9IDB4MDAxMCwNCiAgICB3eFJJR0hUID0gMHgwMDIwLA0KICAgIHd4VVAg PSAweDAwNDAsDQogICAgd3hET1dOID0gMHgwMDgwLA0KDQogICAgd3hUT1AgPSB3eFVQLA0KICAg IHd4Qk9UVE9NID0gd3hET1dOLA0KDQogICAgd3hOT1JUSCA9IHd4VVAsDQogICAgd3hTT1VUSCA9 IHd4RE9XTiwNCiAgICB3eFdFU1QgPSB3eExFRlQsDQogICAgd3hFQVNUID0gd3hSSUdIVCwNCg0K ICAgIHd4QUxMID0gKHd4VVAgfCB3eERPV04gfCB3eFJJR0hUIHwgd3hMRUZUKQ0KfTsNCg0KZW51 bSB3eEFsaWdubWVudA0Kew0KICAgIHd4QUxJR05fTk9UID0gMHgwMDAwLA0KICAgIHd4QUxJR05f Q0VOVEVSX0hPUklaT05UQUwgPSAweDAxMDAsDQogICAgd3hBTElHTl9DRU5UUkVfSE9SSVpPTlRB TCA9IHd4QUxJR05fQ0VOVEVSX0hPUklaT05UQUwsDQogICAgd3hBTElHTl9MRUZUID0gd3hBTElH Tl9OT1QsDQogICAgd3hBTElHTl9UT1AgPSB3eEFMSUdOX05PVCwNCiAgICB3eEFMSUdOX1JJR0hU ID0gMHgwMjAwLA0KICAgIHd4QUxJR05fQk9UVE9NID0gMHgwNDAwLA0KICAgIHd4QUxJR05fQ0VO VEVSX1ZFUlRJQ0FMID0gMHgwODAwLA0KICAgIHd4QUxJR05fQ0VOVFJFX1ZFUlRJQ0FMID0gd3hB TElHTl9DRU5URVJfVkVSVElDQUwsDQoNCiAgICB3eEFMSUdOX0NFTlRFUiA9ICh3eEFMSUdOX0NF TlRFUl9IT1JJWk9OVEFMIHwgd3hBTElHTl9DRU5URVJfVkVSVElDQUwpLA0KICAgIHd4QUxJR05f Q0VOVFJFID0gd3hBTElHTl9DRU5URVINCn07DQoNCmVudW0gd3hTdHJldGNoDQp7DQogICAgd3hT VFJFVENIX05PVCA9IDB4MDAwMCwNCiAgICB3eFNIUklOSyA9IDB4MTAwMCwNCiAgICB3eEdST1cg PSAweDIwMDAsDQogICAgd3hFWFBBTkQgPSB3eEdST1csDQogICAgd3hTSEFQRUQgPSAweDQwMDAN Cn07DQojIDEzMzcgIi4uLy4uL2luY2x1ZGUvd3gvZGVmcy5oIg0KZW51bSB7DQoNCiAgd3hERUZB VUxUID0gNzAsDQogIHd4REVDT1JBVElWRSwNCiAgd3hST01BTiwNCiAgd3hTQ1JJUFQsDQogIHd4 U1dJU1MsDQogIHd4TU9ERVJOLA0KICB3eFRFTEVUWVBFLA0KDQoNCiAgd3hWQVJJQUJMRSA9IDgw LA0KICB3eEZJWEVELA0KDQogIHd4Tk9STUFMID0gOTAsDQogIHd4TElHSFQsDQogIHd4Qk9MRCwN Cg0KICB3eElUQUxJQywNCiAgd3hTTEFOVCwNCg0KDQogIHd4U09MSUQgPSAxMDAsDQogIHd4RE9U LA0KICB3eExPTkdfREFTSCwNCiAgd3hTSE9SVF9EQVNILA0KICB3eERPVF9EQVNILA0KICB3eFVT RVJfREFTSCwNCg0KICB3eFRSQU5TUEFSRU5ULA0KDQoNCg0KICB3eFNUSVBQTEVfTUFTS19PUEFR VUUsDQogIHd4U1RJUFBMRV9NQVNLLA0KDQogIHd4U1RJUFBMRSA9IDExMCwNCiAgd3hCRElBR09O QUxfSEFUQ0gsDQogIHd4Q1JPU1NESUFHX0hBVENILA0KICB3eEZESUFHT05BTF9IQVRDSCwNCiAg d3hDUk9TU19IQVRDSCwNCiAgd3hIT1JJWk9OVEFMX0hBVENILA0KICB3eFZFUlRJQ0FMX0hBVENI LA0KDQoNCiAgd3hKT0lOX0JFVkVMID0gMTIwLA0KICB3eEpPSU5fTUlURVIsDQogIHd4Sk9JTl9S T1VORCwNCg0KICB3eENBUF9ST1VORCA9IDEzMCwNCiAgd3hDQVBfUFJPSkVDVElORywNCiAgd3hD QVBfQlVUVA0KfTsNCg0KDQoNCnR5cGVkZWYgZW51bQ0Kew0KICB3eENMRUFSLCB3eFJPUF9CTEFD SyA9IHd4Q0xFQVIsIHd4QkxJVF9CTEFDS05FU1MgPSB3eENMRUFSLA0KICB3eFhPUiwgd3hST1Bf WE9SUEVOID0gd3hYT1IsIHd4QkxJVF9TUkNJTlZFUlQgPSB3eFhPUiwNCiAgd3hJTlZFUlQsIHd4 Uk9QX05PVCA9IHd4SU5WRVJULCB3eEJMSVRfRFNUSU5WRVJUID0gd3hJTlZFUlQsDQogIHd4T1Jf UkVWRVJTRSwgd3hST1BfTUVSR0VQRU5OT1QgPSB3eE9SX1JFVkVSU0UsIHd4QkxJVF8wMEREMDIy OCA9IHd4T1JfUkVWRVJTRSwNCiAgd3hBTkRfUkVWRVJTRSwgd3hST1BfTUFTS1BFTk5PVCA9IHd4 QU5EX1JFVkVSU0UsIHd4QkxJVF9TUkNFUkFTRSA9IHd4QU5EX1JFVkVSU0UsDQogIHd4Q09QWSwg d3hST1BfQ09QWVBFTiA9IHd4Q09QWSwgd3hCTElUX1NSQ0NPUFkgPSB3eENPUFksDQogIHd4QU5E LCB3eFJPUF9NQVNLUEVOID0gd3hBTkQsIHd4QkxJVF9TUkNBTkQgPSB3eEFORCwNCiAgd3hBTkRf SU5WRVJULCB3eFJPUF9NQVNLTk9UUEVOID0gd3hBTkRfSU5WRVJULCB3eEJMSVRfMDAyMjAzMjYg PSB3eEFORF9JTlZFUlQsDQogIHd4Tk9fT1AsIHd4Uk9QX05PUCA9IHd4Tk9fT1AsIHd4QkxJVF8w MEFBMDAyOSA9IHd4Tk9fT1AsDQogIHd4Tk9SLCB3eFJPUF9OT1RNRVJHRVBFTiA9IHd4Tk9SLCB3 eEJMSVRfTk9UU1JDRVJBU0UgPSB3eE5PUiwNCiAgd3hFUVVJViwgd3hST1BfTk9UWE9SUEVOID0g d3hFUVVJViwgd3hCTElUXzAwOTkwMDY2ID0gd3hFUVVJViwNCiAgd3hTUkNfSU5WRVJULCB3eFJP UF9OT1RDT1BZUEVOID0gd3hTUkNfSU5WRVJULCB3eEJMSVRfTk9UU0NSQ09QWSA9IHd4U1JDX0lO VkVSVCwNCiAgd3hPUl9JTlZFUlQsIHd4Uk9QX01FUkdFTk9UUEVOID0gd3hPUl9JTlZFUlQsIHd4 QkxJVF9NRVJHRVBBSU5UID0gd3hPUl9JTlZFUlQsDQogIHd4TkFORCwgd3hST1BfTk9UTUFTS1BF TiA9IHd4TkFORCwgd3hCTElUXzAwNzcwMEU2ID0gd3hOQU5ELA0KICB3eE9SLCB3eFJPUF9NRVJH RVBFTiA9IHd4T1IsIHd4QkxJVF9TUkNQQUlOVCA9IHd4T1IsDQogIHd4U0VULCB3eFJPUF9XSElU RSA9IHd4U0VULCB3eEJMSVRfV0hJVEVORVNTID0gd3hTRVQNCn0gZm9ybV9vcHNfdDsNCiMgMTQy OSAiLi4vLi4vaW5jbHVkZS93eC9kZWZzLmgiDQplbnVtIHd4RGF0YUZvcm1hdElkDQp7DQogICAg d3hERl9JTlZBTElEID0gMCwNCiAgICB3eERGX1RFWFQgPSAxLA0KICAgIHd4REZfQklUTUFQID0g MiwNCiAgICB3eERGX01FVEFGSUxFID0gMywNCiAgICB3eERGX1NZTEsgPSA0LA0KICAgIHd4REZf RElGID0gNSwNCiAgICB3eERGX1RJRkYgPSA2LA0KICAgIHd4REZfT0VNVEVYVCA9IDcsDQogICAg d3hERl9ESUIgPSA4LA0KICAgIHd4REZfUEFMRVRURSA9IDksDQogICAgd3hERl9QRU5EQVRBID0g MTAsDQogICAgd3hERl9SSUZGID0gMTEsDQogICAgd3hERl9XQVZFID0gMTIsDQogICAgd3hERl9V TklDT0RFVEVYVCA9IDEzLA0KICAgIHd4REZfRU5ITUVUQUZJTEUgPSAxNCwNCiAgICB3eERGX0ZJ TEVOQU1FID0gMTUsDQogICAgd3hERl9MT0NBTEUgPSAxNiwNCiAgICB3eERGX1BSSVZBVEUgPSAy MCwNCiAgICB3eERGX01BWA0KfTsNCg0KDQoNCmVudW0gd3hLZXlDb2RlDQp7DQogIFdYS19CQUNL ID0gOCwNCiAgV1hLX1RBQiA9IDksDQogIFdYS19SRVRVUk4gPSAxMywNCiAgV1hLX0VTQ0FQRSA9 IDI3LA0KICBXWEtfU1BBQ0UgPSAzMiwNCiAgV1hLX0RFTEVURSA9IDEyNywNCg0KICBXWEtfU1RB UlQgPSAzMDAsDQogIFdYS19MQlVUVE9OLA0KICBXWEtfUkJVVFRPTiwNCiAgV1hLX0NBTkNFTCwN CiAgV1hLX01CVVRUT04sDQogIFdYS19DTEVBUiwNCiAgV1hLX1NISUZULA0KICBXWEtfQUxULA0K ICBXWEtfQ09OVFJPTCwNCiAgV1hLX01FTlUsDQogIFdYS19QQVVTRSwNCiAgV1hLX0NBUElUQUws DQogIFdYS19QUklPUiwNCiAgV1hLX05FWFQsDQogIFdYS19FTkQsDQogIFdYS19IT01FLA0KICBX WEtfTEVGVCwNCiAgV1hLX1VQLA0KICBXWEtfUklHSFQsDQogIFdYS19ET1dOLA0KICBXWEtfU0VM RUNULA0KICBXWEtfUFJJTlQsDQogIFdYS19FWEVDVVRFLA0KICBXWEtfU05BUFNIT1QsDQogIFdY S19JTlNFUlQsDQogIFdYS19IRUxQLA0KICBXWEtfTlVNUEFEMCwNCiAgV1hLX05VTVBBRDEsDQog IFdYS19OVU1QQUQyLA0KICBXWEtfTlVNUEFEMywNCiAgV1hLX05VTVBBRDQsDQogIFdYS19OVU1Q QUQ1LA0KICBXWEtfTlVNUEFENiwNCiAgV1hLX05VTVBBRDcsDQogIFdYS19OVU1QQUQ4LA0KICBX WEtfTlVNUEFEOSwNCiAgV1hLX01VTFRJUExZLA0KICBXWEtfQURELA0KICBXWEtfU0VQQVJBVE9S LA0KICBXWEtfU1VCVFJBQ1QsDQogIFdYS19ERUNJTUFMLA0KICBXWEtfRElWSURFLA0KICBXWEtf RjEsDQogIFdYS19GMiwNCiAgV1hLX0YzLA0KICBXWEtfRjQsDQogIFdYS19GNSwNCiAgV1hLX0Y2 LA0KICBXWEtfRjcsDQogIFdYS19GOCwNCiAgV1hLX0Y5LA0KICBXWEtfRjEwLA0KICBXWEtfRjEx LA0KICBXWEtfRjEyLA0KICBXWEtfRjEzLA0KICBXWEtfRjE0LA0KICBXWEtfRjE1LA0KICBXWEtf RjE2LA0KICBXWEtfRjE3LA0KICBXWEtfRjE4LA0KICBXWEtfRjE5LA0KICBXWEtfRjIwLA0KICBX WEtfRjIxLA0KICBXWEtfRjIyLA0KICBXWEtfRjIzLA0KICBXWEtfRjI0LA0KICBXWEtfTlVNTE9D SywNCiAgV1hLX1NDUk9MTCwNCiAgV1hLX1BBR0VVUCwNCiAgV1hLX1BBR0VET1dOLA0KDQogIFdY S19OVU1QQURfU1BBQ0UsDQogIFdYS19OVU1QQURfVEFCLA0KICBXWEtfTlVNUEFEX0VOVEVSLA0K ICBXWEtfTlVNUEFEX0YxLA0KICBXWEtfTlVNUEFEX0YyLA0KICBXWEtfTlVNUEFEX0YzLA0KICBX WEtfTlVNUEFEX0Y0LA0KICBXWEtfTlVNUEFEX0hPTUUsDQogIFdYS19OVU1QQURfTEVGVCwNCiAg V1hLX05VTVBBRF9VUCwNCiAgV1hLX05VTVBBRF9SSUdIVCwNCiAgV1hLX05VTVBBRF9ET1dOLA0K ICBXWEtfTlVNUEFEX1BSSU9SLA0KICBXWEtfTlVNUEFEX1BBR0VVUCwNCiAgV1hLX05VTVBBRF9O RVhULA0KICBXWEtfTlVNUEFEX1BBR0VET1dOLA0KICBXWEtfTlVNUEFEX0VORCwNCiAgV1hLX05V TVBBRF9CRUdJTiwNCiAgV1hLX05VTVBBRF9JTlNFUlQsDQogIFdYS19OVU1QQURfREVMRVRFLA0K ICBXWEtfTlVNUEFEX0VRVUFMLA0KICBXWEtfTlVNUEFEX01VTFRJUExZLA0KICBXWEtfTlVNUEFE X0FERCwNCiAgV1hLX05VTVBBRF9TRVBBUkFUT1IsDQogIFdYS19OVU1QQURfU1VCVFJBQ1QsDQog IFdYS19OVU1QQURfREVDSU1BTCwNCiAgV1hLX05VTVBBRF9ESVZJREUNCn07DQojIDE1ODAgIi4u Ly4uL2luY2x1ZGUvd3gvZGVmcy5oIg0KdHlwZWRlZiBlbnVtIHsNCiAgICB3eFBBUEVSX05PTkUs DQogICAgd3hQQVBFUl9MRVRURVIsDQogICAgd3hQQVBFUl9MRUdBTCwNCiAgICB3eFBBUEVSX0E0 LA0KICAgIHd4UEFQRVJfQ1NIRUVULA0KICAgIHd4UEFQRVJfRFNIRUVULA0KICAgIHd4UEFQRVJf RVNIRUVULA0KICAgIHd4UEFQRVJfTEVUVEVSU01BTEwsDQogICAgd3hQQVBFUl9UQUJMT0lELA0K ICAgIHd4UEFQRVJfTEVER0VSLA0KICAgIHd4UEFQRVJfU1RBVEVNRU5ULA0KICAgIHd4UEFQRVJf RVhFQ1VUSVZFLA0KICAgIHd4UEFQRVJfQTMsDQogICAgd3hQQVBFUl9BNFNNQUxMLA0KICAgIHd4 UEFQRVJfQTUsDQogICAgd3hQQVBFUl9CNCwNCiAgICB3eFBBUEVSX0I1LA0KICAgIHd4UEFQRVJf Rk9MSU8sDQogICAgd3hQQVBFUl9RVUFSVE8sDQogICAgd3hQQVBFUl8xMFgxNCwNCiAgICB3eFBB UEVSXzExWDE3LA0KICAgIHd4UEFQRVJfTk9URSwNCiAgICB3eFBBUEVSX0VOVl85LA0KICAgIHd4 UEFQRVJfRU5WXzEwLA0KICAgIHd4UEFQRVJfRU5WXzExLA0KICAgIHd4UEFQRVJfRU5WXzEyLA0K ICAgIHd4UEFQRVJfRU5WXzE0LA0KICAgIHd4UEFQRVJfRU5WX0RMLA0KICAgIHd4UEFQRVJfRU5W X0M1LA0KICAgIHd4UEFQRVJfRU5WX0MzLA0KICAgIHd4UEFQRVJfRU5WX0M0LA0KICAgIHd4UEFQ RVJfRU5WX0M2LA0KICAgIHd4UEFQRVJfRU5WX0M2NSwNCiAgICB3eFBBUEVSX0VOVl9CNCwNCiAg ICB3eFBBUEVSX0VOVl9CNSwNCiAgICB3eFBBUEVSX0VOVl9CNiwNCiAgICB3eFBBUEVSX0VOVl9J VEFMWSwNCiAgICB3eFBBUEVSX0VOVl9NT05BUkNILA0KICAgIHd4UEFQRVJfRU5WX1BFUlNPTkFM LA0KICAgIHd4UEFQRVJfRkFORk9MRF9VUywNCiAgICB3eFBBUEVSX0ZBTkZPTERfU1REX0dFUk1B TiwNCiAgICB3eFBBUEVSX0ZBTkZPTERfTEdMX0dFUk1BTiwNCg0KICAgIHd4UEFQRVJfSVNPX0I0 LA0KICAgIHd4UEFQRVJfSkFQQU5FU0VfUE9TVENBUkQsDQogICAgd3hQQVBFUl85WDExLA0KICAg IHd4UEFQRVJfMTBYMTEsDQogICAgd3hQQVBFUl8xNVgxMSwNCiAgICB3eFBBUEVSX0VOVl9JTlZJ VEUsDQogICAgd3hQQVBFUl9MRVRURVJfRVhUUkEsDQogICAgd3hQQVBFUl9MRUdBTF9FWFRSQSwN CiAgICB3eFBBUEVSX1RBQkxPSURfRVhUUkEsDQogICAgd3hQQVBFUl9BNF9FWFRSQSwNCiAgICB3 eFBBUEVSX0xFVFRFUl9UUkFOU1ZFUlNFLA0KICAgIHd4UEFQRVJfQTRfVFJBTlNWRVJTRSwNCiAg ICB3eFBBUEVSX0xFVFRFUl9FWFRSQV9UUkFOU1ZFUlNFLA0KICAgIHd4UEFQRVJfQV9QTFVTLA0K ICAgIHd4UEFQRVJfQl9QTFVTLA0KICAgIHd4UEFQRVJfTEVUVEVSX1BMVVMsDQogICAgd3hQQVBF Ul9BNF9QTFVTLA0KICAgIHd4UEFQRVJfQTVfVFJBTlNWRVJTRSwNCiAgICB3eFBBUEVSX0I1X1RS QU5TVkVSU0UsDQogICAgd3hQQVBFUl9BM19FWFRSQSwNCiAgICB3eFBBUEVSX0E1X0VYVFJBLA0K ICAgIHd4UEFQRVJfQjVfRVhUUkEsDQogICAgd3hQQVBFUl9BMiwNCiAgICB3eFBBUEVSX0EzX1RS QU5TVkVSU0UsDQogICAgd3hQQVBFUl9BM19FWFRSQV9UUkFOU1ZFUlNFDQoNCn0gd3hQYXBlclNp emUgOw0KIyAxNjYxICIuLi8uLi9pbmNsdWRlL3d4L2RlZnMuaCINCnR5cGVkZWYgZW51bSB7DQog ICAgd3hEVVBMRVhfU0lNUExFWCwNCiAgICB3eERVUExFWF9IT1JJWk9OVEFMLA0KICAgIHd4RFVQ TEVYX1ZFUlRJQ0FMDQp9IHd4RHVwbGV4TW9kZTsNCiMgMTY3NSAiLi4vLi4vaW5jbHVkZS93eC9k ZWZzLmgiDQp0eXBlZGVmIGludCB3eFByaW50UXVhbGl0eTsNCg0KDQoNCg0KdHlwZWRlZiBlbnVt IHsNCiAgICB3eFBSSU5UX01PREVfTk9ORSA9IDAsDQogICAgd3hQUklOVF9NT0RFX1BSRVZJRVcg PSAxLA0KICAgIHd4UFJJTlRfTU9ERV9GSUxFID0gMiwNCiAgICB3eFBSSU5UX01PREVfUFJJTlRF UiA9IDMNCn0gd3hQcmludE1vZGU7DQojIDE3NTcgIi4uLy4uL2luY2x1ZGUvd3gvZGVmcy5oIg0K dHlwZWRlZiB1bnNpZ25lZCBsb25nIFdYSFdORDsNCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBXWEhB TkRMRTsNCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBXWEhJQ09OOw0KdHlwZWRlZiB1bnNpZ25lZCBs b25nIFdYSEZPTlQ7DQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgV1hITUVOVTsNCnR5cGVkZWYgdW5z aWduZWQgbG9uZyBXWEhQRU47DQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgV1hIQlJVU0g7DQp0eXBl ZGVmIHVuc2lnbmVkIGxvbmcgV1hIUEFMRVRURTsNCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBXWEhD VVJTT1I7DQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgV1hIUkdOOw0KdHlwZWRlZiB1bnNpZ25lZCBs b25nIFdYSEFDQ0VMOw0KdHlwZWRlZiB2b2lkICogV1hISU5TVEFOQ0U7DQp0eXBlZGVmIHVuc2ln bmVkIGxvbmcgV1hIQklUTUFQOw0KdHlwZWRlZiB1bnNpZ25lZCBsb25nIFdYSElNQUdFTElTVDsN CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBXWEhHTE9CQUw7DQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcg V1hIREM7DQp0eXBlZGVmIHVuc2lnbmVkIGludCBXWFVJTlQ7DQp0eXBlZGVmIHVuc2lnbmVkIGxv bmcgV1hEV09SRDsNCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgV1hXT1JEOw0KIyAxNzg0ICIuLi8u Li9pbmNsdWRlL3d4L2RlZnMuaCINCnR5cGVkZWYgdW5zaWduZWQgaW50IFdYV1BBUkFNOw0KdHlw ZWRlZiBsb25nIFdYTFBBUkFNOw0KDQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgV1hDT0xPUlJFRjsN CnR5cGVkZWYgdm9pZCAqIFdYUkdOREFUQTsNCnR5cGVkZWYgdm9pZCAqIFdYTVNHOw0KdHlwZWRl ZiB1bnNpZ25lZCBsb25nIFdYSENPTlY7DQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgV1hIS0VZOw0K dHlwZWRlZiB1bnNpZ25lZCBsb25nIFdYSFRSRUVJVEVNOw0KDQp0eXBlZGVmIHZvaWQgKiBXWERS QVdJVEVNU1RSVUNUOw0KdHlwZWRlZiB2b2lkICogV1hNRUFTVVJFSVRFTVNUUlVDVDsNCnR5cGVk ZWYgdm9pZCAqIFdYTFBDUkVBVEVTVFJVQ1Q7DQojIDE4NDYgIi4uLy4uL2luY2x1ZGUvd3gvZGVm cy5oIg0KICAgIHR5cGVkZWYgaW50ICgqV1hGQVJQUk9DKSgpOw0KIyAxODYwICIuLi8uLi9pbmNs dWRlL3d4L2RlZnMuaCINCnR5cGVkZWYgV1hIV05EIFdYV2lkZ2V0Ow0KIyAxNCAiLi4vLi4vaW5j bHVkZS93eC93eHByZWMuaCIgMg0KIyA4ICJtaW5pbWFsMi5jcHAiIDINCiMgMTYgIm1pbmltYWwy LmNwcCINCiMgMSAiLi4vLi4vaW5jbHVkZS93eC93eC5oIiAxDQojIDE2ICIuLi8uLi9pbmNsdWRl L3d4L3d4LmgiDQojIDEgIi4uLy4uL2luY2x1ZGUvd3gvb2JqZWN0LmgiIDENCiMgMTYgIi4uLy4u L2luY2x1ZGUvd3gvb2JqZWN0LmgiDQojcHJhZ21hIGludGVyZmFjZSAib2JqZWN0LmgiDQoNCg0K DQojIDEgIi4uLy4uL2luY2x1ZGUvd3gvbWVtb3J5LmgiIDENCiMgMTYgIi4uLy4uL2luY2x1ZGUv d3gvbWVtb3J5LmgiDQojcHJhZ21hIGludGVyZmFjZSAibWVtb3J5LmgiDQoNCg0KDQojIDEgIi4u Ly4uL2luY2x1ZGUvd3gvc3RyaW5nLmgiIDENCiMgMjIgIi4uLy4uL2luY2x1ZGUvd3gvc3RyaW5n LmgiDQojcHJhZ21hIGludGVyZmFjZSAic3RyaW5nLmgiDQojIDU5ICIuLi8uLi9pbmNsdWRlL3d4 L3N0cmluZy5oIg0KIyAxICJ0Oi9tc3lzLzEuMC9taW5ndy9saWIvZ2NjLWxpYi9pNjg2LXBjLW1p bmd3MzIvMy4xL2luY2x1ZGUvc3RkYXJnLmgiIDEgMw0KIyA0MyAidDovbXN5cy8xLjAvbWluZ3cv bGliL2djYy1saWIvaTY4Ni1wYy1taW5ndzMyLzMuMS9pbmNsdWRlL3N0ZGFyZy5oIiAzDQp0eXBl ZGVmIF9fYnVpbHRpbl92YV9saXN0IF9fZ251Y192YV9saXN0Ow0KIyA2MCAiLi4vLi4vaW5jbHVk ZS93eC9zdHJpbmcuaCIgMg0KIyAxICJ0Oi9tc3lzLzEuMC9taW5ndy9saWIvZ2NjLWxpYi9pNjg2 LXBjLW1pbmd3MzIvMy4xL2luY2x1ZGUvbGltaXRzLmgiIDEgMw0KIyAxMSAidDovbXN5cy8xLjAv bWluZ3cvbGliL2djYy1saWIvaTY4Ni1wYy1taW5ndzMyLzMuMS9pbmNsdWRlL2xpbWl0cy5oIiAz DQojIDEgInQ6L21zeXMvMS4wL21pbmd3L2xpYi9nY2MtbGliL2k2ODYtcGMtbWluZ3czMi8zLjEv aW5jbHVkZS9zeXNsaW1pdHMuaCIgMSAzDQoNCg0KDQoNCg0KDQojIDEgInQ6L21zeXMvMS4wL21p bmd3L2xpYi9nY2MtbGliL2k2ODYtcGMtbWluZ3czMi8zLjEvaW5jbHVkZS9saW1pdHMuaCIgMSAz DQojIDEzMiAidDovbXN5cy8xLjAvbWluZ3cvbGliL2djYy1saWIvaTY4Ni1wYy1taW5ndzMyLzMu MS9pbmNsdWRlL2xpbWl0cy5oIiAzDQojIDEgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvbGlt aXRzLmgiIDEgMw0KIyAxMzMgInQ6L21zeXMvMS4wL21pbmd3L2xpYi9nY2MtbGliL2k2ODYtcGMt bWluZ3czMi8zLjEvaW5jbHVkZS9saW1pdHMuaCIgMiAzDQojIDggInQ6L21zeXMvMS4wL21pbmd3 L2xpYi9nY2MtbGliL2k2ODYtcGMtbWluZ3czMi8zLjEvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMiAz DQojIDEyICJ0Oi9tc3lzLzEuMC9taW5ndy9saWIvZ2NjLWxpYi9pNjg2LXBjLW1pbmd3MzIvMy4x L2luY2x1ZGUvbGltaXRzLmgiIDIgMw0KIyA2MSAiLi4vLi4vaW5jbHVkZS93eC9zdHJpbmcuaCIg Mg0KIyA3MCAiLi4vLi4vaW5jbHVkZS93eC9zdHJpbmcuaCINCiMgMSAiLi4vLi4vaW5jbHVkZS93 eC9idWZmZXIuaCIgMQ0KIyAyNiAiLi4vLi4vaW5jbHVkZS93eC9idWZmZXIuaCINCmNsYXNzIHd4 Q2hhckJ1ZmZlcg0Kew0KcHVibGljOg0KICAgIHd4Q2hhckJ1ZmZlcihjb25zdCBjaGFyICpzdHIp DQogICAgew0KICAgICAgICBpZiAoICEoc3RyKSApIHd4T25Bc3NlcnQoIi4uLy4uL2luY2x1ZGUv d3gvYnVmZmVyLmgiLCAzMSwgIk5VTEwgc3RyaW5nIGluIHd4Q2hhckJ1ZmZlciIpOw0KDQogICAg ICAgIG1fc3RyID0gc3RyID8gc3RyZHVwKHN0cikgOiAoY2hhciAqKV9fbnVsbDsNCiAgICB9DQog ICAgd3hDaGFyQnVmZmVyKHNpemVfdCBsZW4pDQogICAgew0KICAgICAgICBtX3N0ciA9IChjaGFy ICopbWFsbG9jKGxlbisxKTsNCiAgICAgICAgbV9zdHJbbGVuXSA9ICdcMCc7DQogICAgfQ0KDQog ICB+d3hDaGFyQnVmZmVyKCkgeyBmcmVlKG1fc3RyKTsgfQ0KDQogICB3eENoYXJCdWZmZXIoY29u c3Qgd3hDaGFyQnVmZmVyJiBzcmMpDQogICB7DQogICAgIG1fc3RyID0gc3JjLm1fc3RyOw0KDQog ICAgICgod3hDaGFyQnVmZmVyKikmc3JjKS0+bV9zdHIgPSAoY2hhciAqKV9fbnVsbDsNCiAgIH0N CiAgIHd4Q2hhckJ1ZmZlciYgb3BlcmF0b3I9KGNvbnN0IHd4Q2hhckJ1ZmZlciYgc3JjKQ0KICAg ew0KICAgICBtX3N0ciA9IHNyYy5tX3N0cjsNCg0KICAgICAoKHd4Q2hhckJ1ZmZlciopJnNyYykt Pm1fc3RyID0gKGNoYXIgKilfX251bGw7DQogICAgIHJldHVybiAqdGhpczsNCiAgIH0NCg0KICAg Y29uc3QgY2hhciAqZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyOyB9DQogICBvcGVyYXRvciBj b25zdCBjaGFyICooKSBjb25zdCB7IHJldHVybiBtX3N0cjsgfQ0KICAgY2hhciBvcGVyYXRvcltd KHNpemVfdCBuKSBjb25zdCB7IHJldHVybiBtX3N0cltuXTsgfQ0KDQpwcml2YXRlOg0KICAgY2hh ciAqbV9zdHI7DQp9Ow0KDQoNCmNsYXNzIHd4V0NoYXJCdWZmZXINCnsNCnB1YmxpYzoNCiAgICB3 eFdDaGFyQnVmZmVyKGNvbnN0IHdjaGFyX3QgKndjcykNCiAgICB7DQogICAgICAgIGlmICggISh3 Y3MpICkgd3hPbkFzc2VydCgiLi4vLi4vaW5jbHVkZS93eC9idWZmZXIuaCIsIDcxLCAiTlVMTCBz dHJpbmcgaW4gd3hXQ2hhckJ1ZmZlciIpOw0KDQogICAgICAgIGlmICh3Y3MpIHsNCg0KDQoNCiAg ICAgICAgICBzaXplX3Qgc2l6ID0gKDo6d2NzbGVuKHdjcykrMSkqc2l6ZW9mKHdjaGFyX3QpOw0K DQogICAgICAgICAgbV93Y3MgPSAod2NoYXJfdCAqKW1hbGxvYyhzaXopOw0KICAgICAgICAgIG1l bWNweShtX3djcywgd2NzLCBzaXopOw0KICAgICAgICB9DQogICAgICAgIGVsc2UgbV93Y3MgPSAo d2NoYXJfdCAqKV9fbnVsbDsNCiAgICB9DQogICAgd3hXQ2hhckJ1ZmZlcihzaXplX3QgbGVuKQ0K ICAgIHsNCiAgICAgICAgbV93Y3MgPSAod2NoYXJfdCAqKW1hbGxvYygobGVuKzEpKnNpemVvZih3 Y2hhcl90KSk7DQogICAgICAgIG1fd2NzW2xlbl0gPSBMJ1wwJzsNCiAgICB9DQoNCg0KICAgfnd4 V0NoYXJCdWZmZXIoKSB7IGZyZWUobV93Y3MpOyB9DQoNCiAgIHd4V0NoYXJCdWZmZXIoY29uc3Qg d3hXQ2hhckJ1ZmZlciYgc3JjKQ0KICAgew0KICAgICBtX3djcyA9IHNyYy5tX3djczsNCg0KICAg ICAoKHd4V0NoYXJCdWZmZXIqKSZzcmMpLT5tX3djcyA9ICh3Y2hhcl90ICopX19udWxsOw0KICAg fQ0KICAgd3hXQ2hhckJ1ZmZlciYgb3BlcmF0b3I9KGNvbnN0IHd4V0NoYXJCdWZmZXImIHNyYykN CiAgIHsNCiAgICAgbV93Y3MgPSBzcmMubV93Y3M7DQoNCiAgICAgKCh3eFdDaGFyQnVmZmVyKikm c3JjKS0+bV93Y3MgPSAod2NoYXJfdCAqKV9fbnVsbDsNCiAgICAgcmV0dXJuICp0aGlzOw0KICAg fQ0KDQogICBjb25zdCB3Y2hhcl90ICpkYXRhKCkgY29uc3QgeyByZXR1cm4gbV93Y3M7IH0NCiAg IG9wZXJhdG9yIGNvbnN0IHdjaGFyX3QgKigpIGNvbnN0IHsgcmV0dXJuIG1fd2NzOyB9DQogICB3 Y2hhcl90IG9wZXJhdG9yW10oc2l6ZV90IG4pIGNvbnN0IHsgcmV0dXJuIG1fd2NzW25dOyB9DQoN CnByaXZhdGU6DQogICB3Y2hhcl90ICptX3djczsNCn07DQojIDcxICIuLi8uLi9pbmNsdWRlL3d4 L3N0cmluZy5oIiAyDQojIDEgIi4uLy4uL2luY2x1ZGUvd3gvc3RyY29udi5oIiAxDQojIDE2ICIu Li8uLi9pbmNsdWRlL3d4L3N0cmNvbnYuaCINCiNwcmFnbWEgaW50ZXJmYWNlICJzdHJjb252Lmgi DQojIDM0ICIuLi8uLi9pbmNsdWRlL3d4L3N0cmNvbnYuaCINCmNsYXNzIF9fYXR0cmlidXRlX18o KGRsbGltcG9ydCkpIHd4TUJDb252DQp7DQpwdWJsaWM6DQoNCiAgICB2aXJ0dWFsIHNpemVfdCBN QjJXQyh3Y2hhcl90ICpidWYsIGNvbnN0IGNoYXIgKnBzeiwgc2l6ZV90IG4pIGNvbnN0Ow0KICAg IHZpcnR1YWwgc2l6ZV90IFdDMk1CKGNoYXIgKmJ1ZiwgY29uc3Qgd2NoYXJfdCAqcHN6LCBzaXpl X3QgbikgY29uc3Q7DQoNCg0KICAgIGNvbnN0IHd4V0NoYXJCdWZmZXIgY01CMldDKGNvbnN0IGNo YXIgKnBzeikgY29uc3Q7DQogICAgY29uc3Qgd3hDaGFyQnVmZmVyIGNXQzJNQihjb25zdCB3Y2hh cl90ICpwc3opIGNvbnN0Ow0KDQoNCg0KDQoNCg0KDQogICAgY29uc3QgY2hhciogY01CMldYKGNv bnN0IGNoYXIgKnBzeikgY29uc3QgeyByZXR1cm4gcHN6OyB9DQogICAgY29uc3QgY2hhciogY1dY Mk1CKGNvbnN0IGNoYXIgKnBzeikgY29uc3QgeyByZXR1cm4gcHN6OyB9DQogICAgY29uc3Qgd3hD aGFyQnVmZmVyIGNXQzJXWChjb25zdCB3Y2hhcl90ICpwc3opIGNvbnN0IHsgcmV0dXJuIGNXQzJN Qihwc3opOyB9DQogICAgY29uc3Qgd3hXQ2hhckJ1ZmZlciBjV1gyV0MoY29uc3QgY2hhciAqcHN6 KSBjb25zdCB7IHJldHVybiBjTUIyV0MocHN6KTsgfQ0KDQp9Ow0KDQpfX2F0dHJpYnV0ZV9fKChk bGxpbXBvcnQpKSBleHRlcm4gd3hNQkNvbnYgd3hDb252TGliYzsNCg0KDQoNCg0KDQpjbGFzcyBf X2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eE1CQ29udkZpbGUgOiBwdWJsaWMgd3hNQkNvbnYN CnsNCnB1YmxpYzoNCiAgICB2aXJ0dWFsIHNpemVfdCBNQjJXQyh3Y2hhcl90ICpidWYsIGNvbnN0 IGNoYXIgKnBzeiwgc2l6ZV90IG4pIGNvbnN0Ow0KICAgIHZpcnR1YWwgc2l6ZV90IFdDMk1CKGNo YXIgKmJ1ZiwgY29uc3Qgd2NoYXJfdCAqcHN6LCBzaXplX3QgbikgY29uc3Q7DQp9Ow0KDQpfX2F0 dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBleHRlcm4gd3hNQkNvbnZGaWxlIHd4Q29udkZpbGU7DQoN Cg0KDQoNCg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hNQkNvbnZVVEY3IDog cHVibGljIHd4TUJDb252DQp7DQpwdWJsaWM6DQogICAgdmlydHVhbCBzaXplX3QgTUIyV0Mod2No YXJfdCAqYnVmLCBjb25zdCBjaGFyICpwc3osIHNpemVfdCBuKSBjb25zdDsNCiAgICB2aXJ0dWFs IHNpemVfdCBXQzJNQihjaGFyICpidWYsIGNvbnN0IHdjaGFyX3QgKnBzeiwgc2l6ZV90IG4pIGNv bnN0Ow0KfTsNCg0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgZXh0ZXJuIHd4TUJDb252VVRG NyB3eENvbnZVVEY3Ow0KDQoNCg0KDQoNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkp IHd4TUJDb252VVRGOCA6IHB1YmxpYyB3eE1CQ29udg0Kew0KcHVibGljOg0KICAgIHZpcnR1YWwg c2l6ZV90IE1CMldDKHdjaGFyX3QgKmJ1ZiwgY29uc3QgY2hhciAqcHN6LCBzaXplX3QgbikgY29u c3Q7DQogICAgdmlydHVhbCBzaXplX3QgV0MyTUIoY2hhciAqYnVmLCBjb25zdCB3Y2hhcl90ICpw c3osIHNpemVfdCBuKSBjb25zdDsNCn07DQoNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGV4 dGVybiB3eE1CQ29udlVURjggd3hDb252VVRGODsNCiMgMTIwICIuLi8uLi9pbmNsdWRlL3d4L3N0 cmNvbnYuaCINCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4Q2hhcmFjdGVyU2V0 Ow0KDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eENTQ29udiA6IHB1YmxpYyB3 eE1CQ29udg0Kew0KcHVibGljOg0KICAgIHd4Q1NDb252KGNvbnN0IGNoYXIgKmNoYXJzZXQpOw0K ICAgIHZpcnR1YWwgfnd4Q1NDb252KCk7DQoNCiAgICB2b2lkIExvYWROb3coKTsNCg0KICAgIHZp cnR1YWwgc2l6ZV90IE1CMldDKHdjaGFyX3QgKmJ1ZiwgY29uc3QgY2hhciAqcHN6LCBzaXplX3Qg bikgY29uc3Q7DQogICAgdmlydHVhbCBzaXplX3QgV0MyTUIoY2hhciAqYnVmLCBjb25zdCB3Y2hh cl90ICpwc3osIHNpemVfdCBuKSBjb25zdDsNCg0KcHJpdmF0ZToNCiAgICB2b2lkIFNldE5hbWUo Y29uc3QgY2hhciAqY2hhcnNldCk7DQoNCiAgICBjaGFyICptX25hbWU7DQogICAgd3hDaGFyYWN0 ZXJTZXQgKm1fY3NldDsNCiAgICBib29sIG1fZGVmZXJyZWQ7DQp9Ow0KDQpfX2F0dHJpYnV0ZV9f KChkbGxpbXBvcnQpKSBleHRlcm4gd3hDU0NvbnYgd3hDb252TG9jYWw7DQpfX2F0dHJpYnV0ZV9f KChkbGxpbXBvcnQpKSBleHRlcm4gd3hNQkNvbnYgKiB3eENvbnZDdXJyZW50Ow0KIyA3MiAiLi4v Li4vaW5jbHVkZS93eC9zdHJpbmcuaCIgMg0KIyAxMDMgIi4uLy4uL2luY2x1ZGUvd3gvc3RyaW5n LmgiDQpjb25zdCB1bnNpZ25lZCBpbnQgd3hTVFJJTkdfTUFYTEVOID0gKDIxNDc0ODM2NDcgKiAy VSArIDEpIC0gMTAwOw0KIyAxMTIgIi4uLy4uL2luY2x1ZGUvd3gvc3RyaW5nLmgiDQpfX2F0dHJp YnV0ZV9fKChkbGxpbXBvcnQpKSBleHRlcm4gY29uc3QgY2hhciogd3hFbXB0eVN0cmluZzsNCiMg MTIzICIuLi8uLi9pbmNsdWRlL3d4L3N0cmluZy5oIg0KaW5saW5lIGJvb2wgX19hdHRyaWJ1dGVf XygoZGxsaW1wb3J0KSkgSXNFbXB0eShjb25zdCBjaGFyICpwKSB7IHJldHVybiAoIXAgfHwgISpw KTsgfQ0KDQoNCmlubGluZSBzaXplX3QgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgU3RybGVu KGNvbnN0IGNoYXIgKnBzeikNCiAgeyByZXR1cm4gcHN6ID8gc3RybGVuKHBzeikgOiAwOyB9DQoN Cg0KaW5saW5lIGludCBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBTdHJpY21wKGNvbnN0IGNo YXIgKnBzejEsIGNvbnN0IGNoYXIgKnBzejIpDQp7DQojIDE0NyAiLi4vLi4vaW5jbHVkZS93eC9z dHJpbmcuaCINCiAgcmV0dXJuIHN0cmNhc2VjbXAocHN6MSwgcHN6Mik7DQojIDE3MiAiLi4vLi4v aW5jbHVkZS93eC9zdHJpbmcuaCINCn0NCg0KDQoNCmV4dGVybiBpbnQgX19hdHRyaWJ1dGVfXygo ZGxsaW1wb3J0KSkgd3hTbnByaW50ZihjaGFyICpidWYsIHNpemVfdCBsZW4sDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOw0KDQoNCmV4 dGVybiBpbnQgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hWc25wcmludGYoY2hhciAqYnVm LCBzaXplX3QgbGVuLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncHRyKTsNCg0KDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChk bGxpbXBvcnQpKSB3eFN0cmluZzsNCmlubGluZSBjb25zdCB3eFN0cmluZyYgd3hHZXRFbXB0eVN0 cmluZygpIHsgcmV0dXJuICood3hTdHJpbmcgKikmd3hFbXB0eVN0cmluZzsgfQ0KDQoNCg0KDQoN Cg0Kc3RydWN0IF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4U3RyaW5nRGF0YQ0Kew0KICBp bnQgblJlZnM7DQogIHNpemVfdCBuRGF0YUxlbmd0aCwNCiAgICAgICAgICBuQWxsb2NMZW5ndGg7 DQoNCg0KICBjaGFyKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gKGNoYXIqKSh0aGlzICsgMSk7IH0N Cg0KDQogIGJvb2wgSXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIChuUmVmcyA9PSAtMSk7IH0NCiAg Ym9vbCBJc1NoYXJlZCgpIGNvbnN0IHsgcmV0dXJuIChuUmVmcyA+IDEpOyB9DQoNCg0KICB2b2lk IExvY2soKSB7IGlmICggIUlzRW1wdHkoKSApIG5SZWZzKys7IH0NCg0KDQoNCg0KDQoNCiAgdm9p ZCBVbmxvY2soKSB7IGlmICggIUlzRW1wdHkoKSAmJiAtLW5SZWZzID09IDApIGZyZWUodGhpcyk7 IH0NCg0KDQoNCiAgdm9pZCBWYWxpZGF0ZShib29sIGIpIHsgblJlZnMgPSAoYiA/IDEgOiAwKTsg fQ0KICBib29sIElzVmFsaWQoKSBjb25zdCB7IHJldHVybiAoblJlZnMgIT0gMCk7IH0NCn07DQoj IDI0OSAiLi4vLi4vaW5jbHVkZS93eC9zdHJpbmcuaCINCmNsYXNzIF9fYXR0cmlidXRlX18oKGRs bGltcG9ydCkpIHd4U3RyaW5nDQp7DQoNCg0KZnJpZW5kIGNsYXNzIF9fYXR0cmlidXRlX18oKGRs bGltcG9ydCkpIHd4QXJyYXlTdHJpbmc7DQoNCg0KDQoNCnByaXZhdGU6DQoNCiAgY2hhciAqbV9w Y2hEYXRhOw0KDQoNCiAgd3hTdHJpbmdEYXRhKiBHZXRTdHJpbmdEYXRhKCkgY29uc3QgeyByZXR1 cm4gKHd4U3RyaW5nRGF0YSopbV9wY2hEYXRhIC0gMTsgfQ0KDQoNCg0KDQogIHZvaWQgSW5pdCgp IHsgbV9wY2hEYXRhID0gKGNoYXIgKil3eEVtcHR5U3RyaW5nOyB9DQoNCiAgdm9pZCBJbml0V2l0 aChjb25zdCBjaGFyICpwc3osIHNpemVfdCBuUG9zID0gMCwgc2l6ZV90IG5MZW4gPSB3eFNUUklO R19NQVhMRU4pOw0KDQogIHZvaWQgUmVpbml0KCkgeyBHZXRTdHJpbmdEYXRhKCktPlVubG9jaygp OyBJbml0KCk7IH0NCg0KDQoNCiAgdm9pZCBBbGxvY0J1ZmZlcihzaXplX3Qgbkxlbik7DQoNCiAg dm9pZCBBbGxvY0NvcHkod3hTdHJpbmcmLCBpbnQsIGludCkgY29uc3Q7DQoNCiAgdm9pZCBBc3Np Z25Db3B5KHNpemVfdCwgY29uc3QgY2hhciAqKTsNCg0KDQogIHZvaWQgQ29uY2F0U2VsZihpbnQg bkxlbiwgY29uc3QgY2hhciAqc3JjKTsNCg0KDQoNCiAgdm9pZCBDb3B5QmVmb3JlV3JpdGUoKTsN CiAgdm9pZCBBbGxvY0JlZm9yZVdyaXRlKHNpemVfdCk7DQoNCg0KDQoNCg0KICB3eFN0cmluZyhp bnQpOw0KICB3eFN0cmluZyh1bnNpZ25lZCBpbnQpOw0KICB3eFN0cmluZyhsb25nKTsNCiAgd3hT dHJpbmcodW5zaWduZWQgbG9uZyk7DQoNCnB1YmxpYzoNCg0KDQogIHd4U3RyaW5nKCkgeyBJbml0 KCk7IH0NCg0KICB3eFN0cmluZyhjb25zdCB3eFN0cmluZyYgc3RyaW5nU3JjKQ0KICB7DQogICAg aWYgKCAhKHN0cmluZ1NyYy5HZXRTdHJpbmdEYXRhKCktPklzVmFsaWQoKSkgKSB3eE9uQXNzZXJ0 KCIuLi8uLi9pbmNsdWRlL3d4L3N0cmluZy5oIiwgMzA2KTsNCg0KICAgIGlmICggc3RyaW5nU3Jj LklzRW1wdHkoKSApIHsNCg0KICAgICAgSW5pdCgpOw0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAg IG1fcGNoRGF0YSA9IHN0cmluZ1NyYy5tX3BjaERhdGE7DQogICAgICBHZXRTdHJpbmdEYXRhKCkt PkxvY2soKTsNCiAgICB9DQogIH0NCg0KICB3eFN0cmluZyhjaGFyIGNoLCBzaXplX3QgblJlcGVh dCA9IDEpOw0KDQoNCiAgd3hTdHJpbmcoY29uc3QgY2hhciAqcHN6LCBzaXplX3Qgbkxlbmd0aCA9 IHd4U1RSSU5HX01BWExFTikNCiAgICB7IEluaXRXaXRoKHBzeiwgMCwgbkxlbmd0aCk7IH0NCiAg d3hTdHJpbmcoY29uc3QgY2hhciAqcHN6LCB3eE1CQ29udiYgLCBzaXplX3Qgbkxlbmd0aCA9IHd4 U1RSSU5HX01BWExFTikNCiAgICB7IEluaXRXaXRoKHBzeiwgMCwgbkxlbmd0aCk7IH0NCiMgMzM2 ICIuLi8uLi9pbmNsdWRlL3d4L3N0cmluZy5oIg0KICB3eFN0cmluZyhjb25zdCB1bnNpZ25lZCBj aGFyKiBwc3osIHNpemVfdCBuTGVuZ3RoID0gd3hTVFJJTkdfTUFYTEVOKQ0KICAgIHsgSW5pdFdp dGgoKGNvbnN0IGNoYXIqKXBzeiwgMCwgbkxlbmd0aCk7IH0NCg0KDQoNCiAgd3hTdHJpbmcoY29u c3Qgd2NoYXJfdCAqcHd6LCB3eE1CQ29udiYgY29udiA9IHd4Q29udkxpYmMpOw0KDQoNCg0KICB3 eFN0cmluZyhjb25zdCB3eENoYXJCdWZmZXImIHBzeikNCiAgICB7IEluaXRXaXRoKHBzeiwgMCwg d3hTVFJJTkdfTUFYTEVOKTsgfQ0KDQoNCg0KIH53eFN0cmluZygpIHsgR2V0U3RyaW5nRGF0YSgp LT5VbmxvY2soKTsgfQ0KDQoNCg0KICBzaXplX3QgTGVuKCkgY29uc3QgeyByZXR1cm4gR2V0U3Ry aW5nRGF0YSgpLT5uRGF0YUxlbmd0aDsgfQ0KDQogIGJvb2wgSXNFbXB0eSgpIGNvbnN0IHsgcmV0 dXJuIExlbigpID09IDA7IH0NCg0KICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIElz RW1wdHkoKTsgfQ0KDQogIHZvaWQgRW1wdHkoKQ0KICB7DQogICAgaWYgKCAhSXNFbXB0eSgpICkN CiAgICAgIFJlaW5pdCgpOw0KDQoNCiAgICBpZiAoICEoR2V0U3RyaW5nRGF0YSgpLT5uRGF0YUxl bmd0aCA9PSAwKSApIHd4T25Bc3NlcnQoIi4uLy4uL2luY2x1ZGUvd3gvc3RyaW5nLmgiLCAzNjYp Ow0KICB9DQoNCiAgdm9pZCBDbGVhcigpDQogIHsNCiAgICBpZiAoICFHZXRTdHJpbmdEYXRhKCkt PklzRW1wdHkoKSApDQogICAgICBSZWluaXQoKTsNCg0KICAgIGlmICggIShHZXRTdHJpbmdEYXRh KCktPm5EYXRhTGVuZ3RoID09IDApICkgd3hPbkFzc2VydCgiLi4vLi4vaW5jbHVkZS93eC9zdHJp bmcuaCIsIDM3NCk7DQogICAgaWYgKCAhKEdldFN0cmluZ0RhdGEoKS0+bkFsbG9jTGVuZ3RoID09 IDApICkgd3hPbkFzc2VydCgiLi4vLi4vaW5jbHVkZS93eC9zdHJpbmcuaCIsIDM3NSk7DQogIH0N Cg0KDQoNCiAgYm9vbCBJc0FzY2lpKCkgY29uc3Q7DQoNCiAgYm9vbCBJc051bWJlcigpIGNvbnN0 Ow0KDQogIGJvb2wgSXNXb3JkKCkgY29uc3Q7DQoNCg0KDQogICAgY2hhciBHZXRDaGFyKHNpemVf dCBuKSBjb25zdA0KICAgICAgeyBpZiAoICEoKHVuc2lnbmVkKShuKSA8PSBMZW4oKSkgKSB3eE9u QXNzZXJ0KCIuLi8uLi9pbmNsdWRlL3d4L3N0cmluZy5oIiwgMzg5KTsgcmV0dXJuIG1fcGNoRGF0 YVtuXTsgfQ0KDQogICAgY2hhciYgR2V0V3JpdGFibGVDaGFyKHNpemVfdCBuKQ0KICAgICAgeyBp ZiAoICEoKHVuc2lnbmVkKShuKSA8PSBMZW4oKSkgKSB3eE9uQXNzZXJ0KCIuLi8uLi9pbmNsdWRl L3d4L3N0cmluZy5oIiwgMzkyKTsgQ29weUJlZm9yZVdyaXRlKCk7IHJldHVybiBtX3BjaERhdGFb bl07IH0NCg0KICAgIHZvaWQgU2V0Q2hhcihzaXplX3QgbiwgY2hhciBjaCkNCiAgICAgIHsgaWYg KCAhKCh1bnNpZ25lZCkobikgPD0gTGVuKCkpICkgd3hPbkFzc2VydCgiLi4vLi4vaW5jbHVkZS93 eC9zdHJpbmcuaCIsIDM5NSk7IENvcHlCZWZvcmVXcml0ZSgpOyBtX3BjaERhdGFbbl0gPSBjaDsg fQ0KDQoNCiAgICBjaGFyIExhc3QoKSBjb25zdA0KICAgICAgeyBpZiAoICEoIUlzRW1wdHkoKSkg KSB3eE9uQXNzZXJ0KCIuLi8uLi9pbmNsdWRlL3d4L3N0cmluZy5oIiwgMzk5KTsgcmV0dXJuIG1f cGNoRGF0YVtMZW4oKSAtIDFdOyB9DQoNCiAgICBjaGFyJiBMYXN0KCkNCiAgICAgIHsgaWYgKCAh KCFJc0VtcHR5KCkpICkgd3hPbkFzc2VydCgiLi4vLi4vaW5jbHVkZS93eC9zdHJpbmcuaCIsIDQw Mik7IENvcHlCZWZvcmVXcml0ZSgpOyByZXR1cm4gbV9wY2hEYXRhW0xlbigpLTFdOyB9DQoNCg0K ICAgIGNoYXIgb3BlcmF0b3JbXShzaXplX3QgbikgY29uc3QNCiAgICAgIHsgaWYgKCAhKCh1bnNp Z25lZCkobikgPD0gTGVuKCkpICkgd3hPbkFzc2VydCgiLi4vLi4vaW5jbHVkZS93eC9zdHJpbmcu aCIsIDQwNik7IHJldHVybiBtX3BjaERhdGFbbl07IH0NCg0KDQogICAgY2hhciBvcGVyYXRvcltd KGludCBuKSBjb25zdA0KICAgICAgeyBpZiAoICEoKHVuc2lnbmVkKShuKSA8PSBMZW4oKSkgKSB3 eE9uQXNzZXJ0KCIuLi8uLi9pbmNsdWRlL3d4L3N0cmluZy5oIiwgNDEwKTsgcmV0dXJuIG1fcGNo RGF0YVtuXTsgfQ0KDQoNCiAgICBjaGFyJiBvcGVyYXRvcltdKHNpemVfdCBuKQ0KICAgICAgeyBp ZiAoICEoKHVuc2lnbmVkKShuKSA8PSBMZW4oKSkgKSB3eE9uQXNzZXJ0KCIuLi8uLi9pbmNsdWRl L3d4L3N0cmluZy5oIiwgNDE0KTsgQ29weUJlZm9yZVdyaXRlKCk7IHJldHVybiBtX3BjaERhdGFb bl07IH0NCiMgNDI3ICIuLi8uLi9pbmNsdWRlL3d4L3N0cmluZy5oIg0KICAgIG9wZXJhdG9yIGNv bnN0IGNoYXIqKCkgY29uc3QgeyByZXR1cm4gbV9wY2hEYXRhOyB9DQoNCiAgICBjb25zdCBjaGFy KiBjX3N0cigpIGNvbnN0IHsgcmV0dXJuIG1fcGNoRGF0YTsgfQ0KDQogICAgY29uc3QgY2hhciog d3hfc3RyKCkgY29uc3QgeyByZXR1cm4gbV9wY2hEYXRhOyB9DQoNCiAgICBjb25zdCBjaGFyKiBH ZXREYXRhKCkgY29uc3QgeyByZXR1cm4gbV9wY2hEYXRhOyB9DQojIDQ2MSAiLi4vLi4vaW5jbHVk ZS93eC9zdHJpbmcuaCINCiAgICBjb25zdCBjaGFyKiBtYl9zdHIoKSBjb25zdCB7IHJldHVybiBt X3BjaERhdGE7IH0NCg0KDQogICAgY29uc3QgY2hhciogbWJfc3RyKHd4TUJDb252JiApIGNvbnN0 IHsgcmV0dXJuIG1fcGNoRGF0YTsgfQ0KDQogICAgY29uc3QgY2hhciogbWJjX3N0cigpIGNvbnN0 IHsgcmV0dXJuIG1iX3N0cigpOyB9DQoNCg0KICAgIGNvbnN0IHd4V0NoYXJCdWZmZXIgd2Nfc3Ry KHd4TUJDb252JiBjb252KSBjb25zdA0KICAgICAgICB7IHJldHVybiBjb252LmNNQjJXQyhtX3Bj aERhdGEpOyB9DQoNCg0KICAgIGNvbnN0IGNoYXIqIGZuX3N0cigpIGNvbnN0IHsgcmV0dXJuIG1f cGNoRGF0YTsgfQ0KDQoNCg0KDQogIHd4U3RyaW5nJiBvcGVyYXRvcj0oY29uc3Qgd3hTdHJpbmcm IHN0cmluZ1NyYyk7DQoNCiAgd3hTdHJpbmcmIG9wZXJhdG9yPShjaGFyIGNoKTsNCg0KICB3eFN0 cmluZyYgb3BlcmF0b3I9KGNvbnN0IGNoYXIgKnBzeik7DQoNCg0KDQoNCg0KICB3eFN0cmluZyYg b3BlcmF0b3I9KGNvbnN0IHVuc2lnbmVkIGNoYXIqIHBzeik7DQoNCg0KICB3eFN0cmluZyYgb3Bl cmF0b3I9KGNvbnN0IHdjaGFyX3QgKnB3eik7DQoNCg0KICB3eFN0cmluZyYgb3BlcmF0b3I9KGNv bnN0IHd4Q2hhckJ1ZmZlciYgcHN6KSB7IHJldHVybiBvcGVyYXRvcj0oKGNvbnN0IGNoYXIgKilw c3opOyB9DQojIDUwNSAiLi4vLi4vaW5jbHVkZS93eC9zdHJpbmcuaCINCiAgd3hTdHJpbmcmIG9w ZXJhdG9yPDwoY29uc3Qgd3hTdHJpbmcmIHMpDQogIHsNCiAgICBpZiAoICEocy5HZXRTdHJpbmdE YXRhKCktPklzVmFsaWQoKSkgKSB3eE9uQXNzZXJ0KCIuLi8uLi9pbmNsdWRlL3d4L3N0cmluZy5o IiwgNTA3KTsNCg0KICAgIENvbmNhdFNlbGYocy5MZW4oKSwgcyk7DQogICAgcmV0dXJuICp0aGlz Ow0KICB9DQoNCiAgd3hTdHJpbmcmIG9wZXJhdG9yPDwoY29uc3QgY2hhciAqcHN6KQ0KICAgIHsg Q29uY2F0U2VsZih3eFN0cmxlbihwc3opLCBwc3opOyByZXR1cm4gKnRoaXM7IH0NCg0KICB3eFN0 cmluZyYgb3BlcmF0b3I8PChjaGFyIGNoKSB7IENvbmNhdFNlbGYoMSwgJmNoKTsgcmV0dXJuICp0 aGlzOyB9DQoNCg0KICB2b2lkIG9wZXJhdG9yKz0oY29uc3Qgd3hTdHJpbmcmIHMpIHsgKHZvaWQp b3BlcmF0b3I8PChzKTsgfQ0KDQogIHZvaWQgb3BlcmF0b3IrPShjb25zdCBjaGFyICpwc3opIHsg KHZvaWQpb3BlcmF0b3I8PChwc3opOyB9DQoNCiAgdm9pZCBvcGVyYXRvcis9KGNoYXIgY2gpIHsg KHZvaWQpb3BlcmF0b3I8PChjaCk7IH0NCg0KDQoNCg0KDQoNCiAgd3hTdHJpbmcmIG9wZXJhdG9y PDwoY29uc3Qgd3hDaGFyQnVmZmVyJiBzKSB7ICh2b2lkKW9wZXJhdG9yPDwoKGNvbnN0IGNoYXIg KilzKTsgcmV0dXJuICp0aGlzOyB9DQogIHZvaWQgb3BlcmF0b3IrPShjb25zdCB3eENoYXJCdWZm ZXImIHMpIHsgKHZvaWQpb3BlcmF0b3I8PCgoY29uc3QgY2hhciAqKXMpOyB9DQoNCg0KDQogIHd4 U3RyaW5nJiBBcHBlbmQoY29uc3QgY2hhciogcHN6KQ0KICAgIHsgQ29uY2F0U2VsZih3eFN0cmxl bihwc3opLCBwc3opOyByZXR1cm4gKnRoaXM7IH0NCg0KICB3eFN0cmluZyYgQXBwZW5kKGNoYXIg Y2gsIHNpemVfdCBjb3VudCA9IDF1KQ0KICAgIHsgd3hTdHJpbmcgc3RyKGNoLCBjb3VudCk7IHJl dHVybiAqdGhpcyA8PCBzdHI7IH0NCiAgd3hTdHJpbmcmIEFwcGVuZChjb25zdCBjaGFyKiBwc3os IHNpemVfdCBuTGVuKQ0KICAgIHsgQ29uY2F0U2VsZihuTGVuLCBwc3opOyByZXR1cm4gKnRoaXM7 IH0NCg0KDQogIHd4U3RyaW5nJiBQcmVwZW5kKGNvbnN0IHd4U3RyaW5nJiBzdHIpDQogICAgeyAq dGhpcyA9IHN0ciArICp0aGlzOyByZXR1cm4gKnRoaXM7IH0NCg0KDQoNCiAgZnJpZW5kIHd4U3Ry aW5nIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIG9wZXJhdG9yKyhjb25zdCB3eFN0cmluZyYg c3RyaW5nMSwgY29uc3Qgd3hTdHJpbmcmIHN0cmluZzIpOw0KDQogIGZyaWVuZCB3eFN0cmluZyBf X2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBvcGVyYXRvcisoY29uc3Qgd3hTdHJpbmcmIHN0cmlu ZywgY2hhciBjaCk7DQoNCiAgZnJpZW5kIHd4U3RyaW5nIF9fYXR0cmlidXRlX18oKGRsbGltcG9y dCkpIG9wZXJhdG9yKyhjaGFyIGNoLCBjb25zdCB3eFN0cmluZyYgc3RyaW5nKTsNCg0KICBmcmll bmQgd3hTdHJpbmcgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgb3BlcmF0b3IrKGNvbnN0IHd4 U3RyaW5nJiBzdHJpbmcsIGNvbnN0IGNoYXIgKnBzeik7DQoNCiAgZnJpZW5kIHd4U3RyaW5nIF9f YXR0cmlidXRlX18oKGRsbGltcG9ydCkpIG9wZXJhdG9yKyhjb25zdCBjaGFyICpwc3osIGNvbnN0 IHd4U3RyaW5nJiBzdHJpbmcpOw0KDQoNCg0KICB3eFN0cmluZyYgb3BlcmF0b3I8PChpbnQgaSkN CiAgICB7IHJldHVybiAoKnRoaXMpIDw8IEZvcm1hdCgiJWQiLCBpKTsgfQ0KDQogIHd4U3RyaW5n JiBvcGVyYXRvcjw8KHVuc2lnbmVkIGludCB1aSkNCiAgICB7IHJldHVybiAoKnRoaXMpIDw8IEZv cm1hdCgiJXUiLCB1aSk7IH0NCg0KICB3eFN0cmluZyYgb3BlcmF0b3I8PChsb25nIGwpDQogICAg eyByZXR1cm4gKCp0aGlzKSA8PCBGb3JtYXQoIiVsZCIsIGwpOyB9DQoNCiAgd3hTdHJpbmcmIG9w ZXJhdG9yPDwodW5zaWduZWQgbG9uZyB1bCkNCiAgICB7IHJldHVybiAoKnRoaXMpIDw8IEZvcm1h dCgiJWx1IiwgdWwpOyB9DQoNCiAgd3hTdHJpbmcmIG9wZXJhdG9yPDwoZmxvYXQgZikNCiAgICB7 IHJldHVybiAoKnRoaXMpIDw8IEZvcm1hdCgiJWYiLCBmKTsgfQ0KDQogIHd4U3RyaW5nJiBvcGVy YXRvcjw8KGRvdWJsZSBkKQ0KICAgIHsgcmV0dXJuICgqdGhpcykgPDwgRm9ybWF0KCIlZyIsIGQp OyB9DQoNCg0KDQogIGludCBDbXAoY29uc3QgY2hhciAqcHN6KSBjb25zdCB7IHJldHVybiBzdHJj bXAoY19zdHIoKSwgcHN6KTsgfQ0KDQogIGludCBDbXBOb0Nhc2UoY29uc3QgY2hhciAqcHN6KSBj b25zdCB7IHJldHVybiBzdHJjYXNlY21wKGNfc3RyKCksIHBzeik7IH0NCg0KDQogIGJvb2wgSXNT YW1lQXMoY29uc3QgY2hhciAqcHN6LCBib29sIGNvbXBhcmVXaXRoQ2FzZSA9IDEpIGNvbnN0DQog ICAgeyByZXR1cm4gKGNvbXBhcmVXaXRoQ2FzZSA/IENtcChwc3opIDogQ21wTm9DYXNlKHBzeikp ID09IDA7IH0NCg0KICBib29sIElzU2FtZUFzKGNoYXIgYywgYm9vbCBjb21wYXJlV2l0aENhc2Ug PSAxKSBjb25zdA0KICAgIHsNCiAgICAgIHJldHVybiAoTGVuKCkgPT0gMSkgJiYgKGNvbXBhcmVX aXRoQ2FzZSA/IEdldENoYXIoMHUpID09IGMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDogdG91cHBlcihHZXRDaGFyKDB1KSkgPT0gdG91cHBlcihjKSk7DQogICAgfQ0KDQoNCg0KDQog IHd4U3RyaW5nIE1pZChzaXplX3QgbkZpcnN0LCBzaXplX3QgbkNvdW50ID0gd3hTVFJJTkdfTUFY TEVOKSBjb25zdDsNCg0KDQogIHd4U3RyaW5nIG9wZXJhdG9yKCkoc2l6ZV90IHN0YXJ0LCBzaXpl X3QgbGVuKSBjb25zdA0KICAgIHsgcmV0dXJuIE1pZChzdGFydCwgbGVuKTsgfQ0KDQoNCg0KDQog IGJvb2wgU3RhcnRzV2l0aChjb25zdCBjaGFyICpwcmVmaXgsIHd4U3RyaW5nICpyZXN0ID0gX19u dWxsKSBjb25zdDsNCg0KDQogIHd4U3RyaW5nIExlZnQoc2l6ZV90IG5Db3VudCkgY29uc3Q7DQoN CiAgd3hTdHJpbmcgUmlnaHQoc2l6ZV90IG5Db3VudCkgY29uc3Q7DQoNCg0KICB3eFN0cmluZyBC ZWZvcmVGaXJzdChjaGFyIGNoKSBjb25zdDsNCg0KDQogIHd4U3RyaW5nIEJlZm9yZUxhc3QoY2hh ciBjaCkgY29uc3Q7DQoNCg0KICB3eFN0cmluZyBBZnRlckZpcnN0KGNoYXIgY2gpIGNvbnN0Ow0K DQoNCiAgd3hTdHJpbmcgQWZ0ZXJMYXN0KGNoYXIgY2gpIGNvbnN0Ow0KDQoNCiAgd3hTdHJpbmcg QmVmb3JlKGNoYXIgY2gpIGNvbnN0IHsgcmV0dXJuIEJlZm9yZUxhc3QoY2gpOyB9DQogIHd4U3Ry aW5nIEFmdGVyKGNoYXIgY2gpIGNvbnN0IHsgcmV0dXJuIEFmdGVyRmlyc3QoY2gpOyB9DQoNCg0K DQogIHd4U3RyaW5nJiBNYWtlVXBwZXIoKTsNCg0KDQogIHd4U3RyaW5nIFVwcGVyKCkgY29uc3Qg Ow0KDQogIHd4U3RyaW5nJiBNYWtlTG93ZXIoKTsNCg0KICB3eFN0cmluZyBMb3dlcigpIGNvbnN0 IDsNCg0KDQoNCiAgd3hTdHJpbmcmIFRyaW0oYm9vbCBiRnJvbVJpZ2h0ID0gMSk7DQoNCiAgd3hT dHJpbmcmIFBhZChzaXplX3QgbkNvdW50LCBjaGFyIGNoUGFkID0gJyAnLCBib29sIGJGcm9tUmln aHQgPSAxKTsNCg0KICB3eFN0cmluZyYgVHJ1bmNhdGUoc2l6ZV90IHVpTGVuKTsNCg0KDQoNCiAg aW50IEZpbmQoY2hhciBjaCwgYm9vbCBiRnJvbUVuZCA9IDApIGNvbnN0Ow0KDQogIGludCBGaW5k KGNvbnN0IGNoYXIgKnBzelN1YikgY29uc3Q7DQoNCg0KICBzaXplX3QgUmVwbGFjZShjb25zdCBj aGFyICpzek9sZCwNCiAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3pOZXcsDQogICAgICAg ICAgICAgICAgIGJvb2wgYlJlcGxhY2VBbGwgPSAxKTsNCg0KDQogIGJvb2wgTWF0Y2hlcyhjb25z dCBjaGFyICpzek1hc2spIGNvbnN0Ow0KDQoNCg0KDQogICAgYm9vbCBUb0xvbmcobG9uZyAqdmFs KSBjb25zdDsNCg0KICAgIGJvb2wgVG9VTG9uZyh1bnNpZ25lZCBsb25nICp2YWwpIGNvbnN0Ow0K DQogICAgYm9vbCBUb0RvdWJsZShkb3VibGUgKnZhbCkgY29uc3Q7DQoNCg0KDQogIGludCBQcmlu dGYoY29uc3QgY2hhciAqcHN6Rm9ybWF0LCAuLi4pOw0KDQogIGludCBQcmludGZWKGNvbnN0IGNo YXIqIHBzekZvcm1hdCwgdmFfbGlzdCBhcmdwdHIpOw0KDQoNCiAgc3RhdGljIHd4U3RyaW5nIEZv cm1hdChjb25zdCBjaGFyICpwc3pGb3JtYXQsIC4uLik7DQoNCiAgc3RhdGljIHd4U3RyaW5nIEZv cm1hdFYoY29uc3QgY2hhciAqcHN6Rm9ybWF0LCB2YV9saXN0IGFyZ3B0cik7DQoNCg0KDQoNCiAg dm9pZCBBbGxvYyhzaXplX3Qgbkxlbik7DQoNCg0KICB2b2lkIFNocmluaygpOw0KDQoNCiAgY2hh ciAqR2V0V3JpdGVCdWYoc2l6ZV90IG5MZW4pOw0KDQogIHZvaWQgVW5nZXRXcml0ZUJ1ZigpOw0K ICB2b2lkIFVuZ2V0V3JpdGVCdWYoc2l6ZV90IG5MZW4pOw0KDQoNCg0KDQogIHd4U3RyaW5nIFN1 YlN0cmluZyhzaXplX3QgZnJvbSwgc2l6ZV90IHRvKSBjb25zdA0KICAgICAgeyByZXR1cm4gTWlk KGZyb20sICh0byAtIGZyb20gKyAxKSk7IH0NCg0KICBlbnVtIGNhc2VDb21wYXJlIHtleGFjdCwg aWdub3JlQ2FzZX07DQoNCiAgZW51bSBzdHJpcFR5cGUge2xlYWRpbmcgPSAweDEsIHRyYWlsaW5n ID0gMHgyLCBib3RoID0gMHgzfTsNCg0KDQogIGludCBzcHJpbnRmKGNvbnN0IGNoYXIgKnBzekZv cm1hdCwgLi4uKTsNCg0KDQogIGlubGluZSBpbnQgQ29tcGFyZVRvKGNvbnN0IGNoYXIqIHBzeiwg Y2FzZUNvbXBhcmUgY21wID0gZXhhY3QpIGNvbnN0DQogICAgeyByZXR1cm4gY21wID09IGV4YWN0 ID8gQ21wKHBzeikgOiBDbXBOb0Nhc2UocHN6KTsgfQ0KDQoNCiAgc2l6ZV90IExlbmd0aCgpIGNv bnN0IHsgcmV0dXJuIExlbigpOyB9DQoNCiAgaW50IEZyZXEoY2hhciBjaCkgY29uc3Q7DQoNCiAg dm9pZCBMb3dlckNhc2UoKSB7IE1ha2VMb3dlcigpOyB9DQoNCiAgdm9pZCBVcHBlckNhc2UoKSB7 IE1ha2VVcHBlcigpOyB9DQoNCiAgd3hTdHJpbmcgU3RyaXAoc3RyaXBUeXBlIHcgPSB0cmFpbGlu ZykgY29uc3Q7DQoNCg0KICBzaXplX3QgSW5kZXgoY29uc3QgY2hhciogcHN6KSBjb25zdCB7IHJl dHVybiBGaW5kKHBzeik7IH0NCiAgc2l6ZV90IEluZGV4KGNoYXIgY2gpIGNvbnN0IHsgcmV0dXJu IEZpbmQoY2gpOyB9DQoNCiAgd3hTdHJpbmcmIFJlbW92ZShzaXplX3QgcG9zKSB7IHJldHVybiBU cnVuY2F0ZShwb3MpOyB9DQogIHd4U3RyaW5nJiBSZW1vdmVMYXN0KCkgeyByZXR1cm4gVHJ1bmNh dGUoTGVuKCkgLSAxKTsgfQ0KDQogIHd4U3RyaW5nJiBSZW1vdmUoc2l6ZV90IG5TdGFydCwgc2l6 ZV90IG5MZW4pIHsgcmV0dXJuIGVyYXNlKCBuU3RhcnQsIG5MZW4gKTsgfQ0KDQoNCiAgaW50IEZp cnN0KCBjb25zdCBjaGFyIGNoICkgY29uc3QgeyByZXR1cm4gRmluZChjaCk7IH0NCiAgaW50IEZp cnN0KCBjb25zdCBjaGFyKiBwc3ogKSBjb25zdCB7IHJldHVybiBGaW5kKHBzeik7IH0NCiAgaW50 IEZpcnN0KCBjb25zdCB3eFN0cmluZyAmc3RyICkgY29uc3QgeyByZXR1cm4gRmluZChzdHIpOyB9 DQogIGludCBMYXN0KCBjb25zdCBjaGFyIGNoICkgY29uc3QgeyByZXR1cm4gRmluZChjaCwgMSk7 IH0NCiAgYm9vbCBDb250YWlucyhjb25zdCB3eFN0cmluZyYgc3RyKSBjb25zdCB7IHJldHVybiBG aW5kKHN0cikgIT0gLTE7IH0NCg0KDQogIGJvb2wgSXNOdWxsKCkgY29uc3QgeyByZXR1cm4gSXNF bXB0eSgpOyB9DQoNCg0KDQoNCg0KICB0eXBlZGVmIGNoYXIgdmFsdWVfdHlwZTsNCiAgdHlwZWRl ZiBjb25zdCB2YWx1ZV90eXBlICpjb25zdF9pdGVyYXRvcjsNCg0KDQogIHN0YXRpYyBjb25zdCBz aXplX3QgbnBvczsNCg0KDQoNCiAgd3hTdHJpbmcoY29uc3Qgd3hTdHJpbmcmIHN0ciwgc2l6ZV90 IG5Qb3MsIHNpemVfdCBuTGVuKQ0KICB7DQogICAgaWYgKCAhKHN0ci5HZXRTdHJpbmdEYXRhKCkt PklzVmFsaWQoKSkgKSB3eE9uQXNzZXJ0KCIuLi8uLi9pbmNsdWRlL3d4L3N0cmluZy5oIiwgNzU4 KTsNCiAgICBJbml0V2l0aChzdHIuY19zdHIoKSwgblBvcywgbkxlbiA9PSBucG9zID8gMCA6IG5M ZW4pOw0KICB9DQoNCiAgd3hTdHJpbmcoY29uc3Qgdm9pZCAqcFN0YXJ0LCBjb25zdCB2b2lkICpw RW5kKTsNCg0KDQoNCiAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBMZW4oKTsgfQ0KDQog IHNpemVfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBMZW4oKTsgfQ0KDQogIHNpemVfdCBtYXhf c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHd4U1RSSU5HX01BWExFTjsgfQ0KDQogIHZvaWQgcmVzaXpl KHNpemVfdCBuU2l6ZSwgY2hhciBjaCA9ICdcMCcpOw0KDQogIHZvaWQgY2xlYXIoKSB7IEVtcHR5 KCk7IH0NCg0KICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gSXNFbXB0eSgpOyB9DQoNCiAg dm9pZCByZXNlcnZlKHNpemVfdCBzaXplKSB7IEFsbG9jKHNpemUpOyB9DQoNCg0KDQogIGNoYXIg YXQoc2l6ZV90IG4pIGNvbnN0IHsgcmV0dXJuIEdldENoYXIobik7IH0NCg0KICBjaGFyJiBhdChz aXplX3QgbikgeyByZXR1cm4gR2V0V3JpdGFibGVDaGFyKG4pOyB9DQoNCg0KICBjb25zdF9pdGVy YXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIHd4X3N0cigpOyB9DQoNCiAgY29uc3RfaXRlcmF0 b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gd3hfc3RyKCkgKyBsZW5ndGgoKTsgfQ0KDQoNCg0KICB3 eFN0cmluZyYgYXBwZW5kKGNvbnN0IHd4U3RyaW5nJiBzdHIpDQogICAgeyAqdGhpcyArPSBzdHI7 IHJldHVybiAqdGhpczsgfQ0KDQogIHd4U3RyaW5nJiBhcHBlbmQoY29uc3Qgd3hTdHJpbmcmIHN0 ciwgc2l6ZV90IHBvcywgc2l6ZV90IG4pDQogICAgeyBDb25jYXRTZWxmKG4sIHN0ci5jX3N0cigp ICsgcG9zKTsgcmV0dXJuICp0aGlzOyB9DQoNCiAgd3hTdHJpbmcmIGFwcGVuZChjb25zdCBjaGFy ICpzeiwgc2l6ZV90IG4gPSBucG9zKQ0KICAgIHsgQ29uY2F0U2VsZihuID09IG5wb3MgPyB3eFN0 cmxlbihzeikgOiBuLCBzeik7IHJldHVybiAqdGhpczsgfQ0KDQoNCiAgd3hTdHJpbmcmIGFwcGVu ZChzaXplX3QgbiwgY2hhciBjaCkgeyByZXR1cm4gUGFkKG4sIGNoKTsgfQ0KDQoNCiAgd3hTdHJp bmcmIGFzc2lnbihjb25zdCB3eFN0cmluZyYgc3RyKSB7IHJldHVybiAoKnRoaXMpID0gc3RyOyB9 DQoNCiAgd3hTdHJpbmcmIGFzc2lnbihjb25zdCB3eFN0cmluZyYgc3RyLCBzaXplX3QgcG9zLCBz aXplX3QgbikNCiAgICB7IHJldHVybiAqdGhpcyA9IHd4U3RyaW5nKChjb25zdCBjaGFyICopc3Ry ICsgcG9zLCBuKTsgfQ0KDQogIHd4U3RyaW5nJiBhc3NpZ24oY29uc3QgY2hhciAqc3osIHNpemVf dCBuID0gbnBvcykNCiAgICB7IHJldHVybiAqdGhpcyA9IHd4U3RyaW5nKHN6LCBuKTsgfQ0KDQog IHd4U3RyaW5nJiBhc3NpZ24oc2l6ZV90IG4sIGNoYXIgY2gpDQogICAgeyByZXR1cm4gKnRoaXMg PSB3eFN0cmluZyhjaCwgbik7IH0NCg0KDQogIHd4U3RyaW5nJiBpbnNlcnQoc2l6ZV90IG5Qb3Ms IGNvbnN0IHd4U3RyaW5nJiBzdHIpOw0KDQogIHd4U3RyaW5nJiBpbnNlcnQoc2l6ZV90IG5Qb3Ms IGNvbnN0IHd4U3RyaW5nJiBzdHIsIHNpemVfdCBuU3RhcnQsIHNpemVfdCBuKQ0KICAgIHsgcmV0 dXJuIGluc2VydChuUG9zLCB3eFN0cmluZygoY29uc3QgY2hhciAqKXN0ciArIG5TdGFydCwgbikp OyB9DQoNCg0KICB3eFN0cmluZyYgaW5zZXJ0KHNpemVfdCBuUG9zLCBjb25zdCBjaGFyICpzeiwg c2l6ZV90IG4gPSBucG9zKQ0KICAgIHsgcmV0dXJuIGluc2VydChuUG9zLCB3eFN0cmluZyhzeiwg bikpOyB9DQoNCiAgd3hTdHJpbmcmIGluc2VydChzaXplX3QgblBvcywgc2l6ZV90IG4sIGNoYXIg Y2gpDQogICAgeyByZXR1cm4gaW5zZXJ0KG5Qb3MsIHd4U3RyaW5nKGNoLCBuKSk7IH0NCg0KDQog IHd4U3RyaW5nJiBlcmFzZShzaXplX3QgblN0YXJ0ID0gMCwgc2l6ZV90IG5MZW4gPSBucG9zKTsN Cg0KDQogIHd4U3RyaW5nJiByZXBsYWNlKHNpemVfdCBuU3RhcnQsIHNpemVfdCBuTGVuLCBjb25z dCBjaGFyKiBzeik7DQoNCiAgd3hTdHJpbmcmIHJlcGxhY2Uoc2l6ZV90IG5TdGFydCwgc2l6ZV90 IG5MZW4sIHNpemVfdCBuQ291bnQsIGNoYXIgY2gpOw0KDQogIHd4U3RyaW5nJiByZXBsYWNlKHNp emVfdCBuU3RhcnQsIHNpemVfdCBuTGVuLA0KICAgICAgICAgICAgICAgICAgICBjb25zdCB3eFN0 cmluZyYgc3RyLCBzaXplX3QgblN0YXJ0Miwgc2l6ZV90IG5MZW4yKTsNCg0KICB3eFN0cmluZyYg cmVwbGFjZShzaXplX3QgblN0YXJ0LCBzaXplX3QgbkxlbiwNCiAgICAgICAgICAgICAgICAgICAg Y29uc3QgY2hhciogc3osIHNpemVfdCBuQ291bnQpOw0KDQoNCiAgdm9pZCBzd2FwKHd4U3RyaW5n JiBzdHIpOw0KDQoNCg0KDQoNCg0KICBzaXplX3QgZmluZChjb25zdCB3eFN0cmluZyYgc3RyLCBz aXplX3QgblN0YXJ0ID0gMCkgY29uc3Q7DQoNCg0KDQoNCiAgc2l6ZV90IGZpbmQoY29uc3QgY2hh ciogc3osIHNpemVfdCBuU3RhcnQgPSAwLCBzaXplX3QgbiA9IG5wb3MpIGNvbnN0Ow0KDQoNCg0K DQoNCiAgc2l6ZV90IGZpbmQoY2hhciBjaCwgc2l6ZV90IG5TdGFydCA9IDApIGNvbnN0Ow0KDQoN Cg0KDQogIHNpemVfdCByZmluZChjb25zdCB3eFN0cmluZyYgc3RyLCBzaXplX3QgblN0YXJ0ID0g bnBvcykgY29uc3Q7DQoNCg0KDQoNCiAgc2l6ZV90IHJmaW5kKGNvbnN0IGNoYXIqIHN6LCBzaXpl X3QgblN0YXJ0ID0gbnBvcywNCiAgICAgICAgICBzaXplX3QgbiA9IG5wb3MpIGNvbnN0Ow0KDQog IHNpemVfdCByZmluZChjaGFyIGNoLCBzaXplX3QgblN0YXJ0ID0gbnBvcykgY29uc3Q7DQoNCg0K DQoNCg0KICBzaXplX3QgZmluZF9maXJzdF9vZihjb25zdCB3eFN0cmluZyYgc3RyLCBzaXplX3Qg blN0YXJ0ID0gMCkgY29uc3QNCiAgICB7IHJldHVybiBmaW5kX2ZpcnN0X29mKHN0ci5jX3N0cigp LCBuU3RhcnQpOyB9DQoNCiAgc2l6ZV90IGZpbmRfZmlyc3Rfb2YoY29uc3QgY2hhciogc3osIHNp emVfdCBuU3RhcnQgPSAwKSBjb25zdDsNCg0KICBzaXplX3QgZmluZF9maXJzdF9vZihjaGFyIGMs IHNpemVfdCBuU3RhcnQgPSAwKSBjb25zdA0KICAgIHsgcmV0dXJuIGZpbmQoYywgblN0YXJ0KTsg fQ0KDQogIHNpemVfdCBmaW5kX2xhc3Rfb2YgKGNvbnN0IHd4U3RyaW5nJiBzdHIsIHNpemVfdCBu U3RhcnQgPSBucG9zKSBjb25zdA0KICAgIHsgcmV0dXJuIGZpbmRfbGFzdF9vZihzdHIuY19zdHIo KSwgblN0YXJ0KTsgfQ0KDQogIHNpemVfdCBmaW5kX2xhc3Rfb2YgKGNvbnN0IGNoYXIqIHN6LCBz aXplX3QgblN0YXJ0ID0gbnBvcykgY29uc3Q7DQoNCiAgc2l6ZV90IGZpbmRfbGFzdF9vZihjaGFy IGMsIHNpemVfdCBuU3RhcnQgPSBucG9zKSBjb25zdA0KICAgIHsgcmV0dXJuIHJmaW5kKGMsIG5T dGFydCk7IH0NCg0KDQoNCg0KICBzaXplX3QgZmluZF9maXJzdF9ub3Rfb2YoY29uc3Qgd3hTdHJp bmcmIHN0ciwgc2l6ZV90IG5TdGFydCA9IDApIGNvbnN0DQogICAgeyByZXR1cm4gZmluZF9maXJz dF9ub3Rfb2Yoc3RyLmNfc3RyKCksIG5TdGFydCk7IH0NCg0KICBzaXplX3QgZmluZF9maXJzdF9u b3Rfb2YoY29uc3QgY2hhciogc3osIHNpemVfdCBuU3RhcnQgPSAwKSBjb25zdDsNCg0KICBzaXpl X3QgZmluZF9maXJzdF9ub3Rfb2YoY2hhciBjaCwgc2l6ZV90IG5TdGFydCA9IDApIGNvbnN0Ow0K DQogIHNpemVfdCBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IHd4U3RyaW5nJiBzdHIsIHNpemVfdCBu U3RhcnQgPSBucG9zKSBjb25zdA0KICAgIHsgcmV0dXJuIGZpbmRfZmlyc3Rfbm90X29mKHN0ci5j X3N0cigpLCBuU3RhcnQpOyB9DQoNCiAgc2l6ZV90IGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgY2hh ciogc3osIHNpemVfdCBuU3RhcnQgPSBucG9zKSBjb25zdDsNCg0KICBzaXplX3QgZmluZF9sYXN0 X25vdF9vZihjaGFyIGNoLCBzaXplX3QgblN0YXJ0ID0gbnBvcykgY29uc3Q7DQoNCg0KDQoNCg0K ICBpbnQgY29tcGFyZShjb25zdCB3eFN0cmluZyYgc3RyKSBjb25zdCB7IHJldHVybiBDbXAoc3Ry KTsgfQ0KDQogIGludCBjb21wYXJlKHNpemVfdCBuU3RhcnQsIHNpemVfdCBuTGVuLCBjb25zdCB3 eFN0cmluZyYgc3RyKSBjb25zdA0KICAgIHsgcmV0dXJuIE1pZChuU3RhcnQsIG5MZW4pLkNtcChz dHIpOyB9DQoNCiAgaW50IGNvbXBhcmUoc2l6ZV90IG5TdGFydCwgc2l6ZV90IG5MZW4sDQogICAg ICAgICAgICAgIGNvbnN0IHd4U3RyaW5nJiBzdHIsIHNpemVfdCBuU3RhcnQyLCBzaXplX3Qgbkxl bjIpIGNvbnN0DQogICAgeyByZXR1cm4gTWlkKG5TdGFydCwgbkxlbikuQ21wKHN0ci5NaWQoblN0 YXJ0MiwgbkxlbjIpKTsgfQ0KDQogIGludCBjb21wYXJlKGNvbnN0IGNoYXIqIHN6KSBjb25zdCB7 IHJldHVybiBDbXAoc3opOyB9DQoNCiAgaW50IGNvbXBhcmUoc2l6ZV90IG5TdGFydCwgc2l6ZV90 IG5MZW4sDQogICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHN6LCBzaXplX3QgbkNvdW50ID0gbnBv cykgY29uc3QNCiAgICB7IHJldHVybiBNaWQoblN0YXJ0LCBuTGVuKS5DbXAod3hTdHJpbmcoc3os IG5Db3VudCkpOyB9DQoNCg0KICB3eFN0cmluZyBzdWJzdHIoc2l6ZV90IG5TdGFydCA9IDAsIHNp emVfdCBuTGVuID0gbnBvcykgY29uc3QNCiAgICB7IHJldHVybiBNaWQoblN0YXJ0LCBuTGVuKTsg fQ0KDQp9Ow0KIyA5NTUgIi4uLy4uL2luY2x1ZGUvd3gvc3RyaW5nLmgiDQpjbGFzcyBfX2F0dHJp YnV0ZV9fKChkbGxpbXBvcnQpKSB3eEFycmF5U3RyaW5nDQp7DQpwdWJsaWM6DQoNCiAgdHlwZWRl ZiBpbnQgKCpDb21wYXJlRnVuY3Rpb24pKGNvbnN0IHd4U3RyaW5nJiBmaXJzdCwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHd4U3RyaW5nJiBzZWNvbmQpOw0KDQoNCg0K DQogIHd4QXJyYXlTdHJpbmcoYm9vbCBhdXRvU29ydCA9IDApOw0KDQogIHd4QXJyYXlTdHJpbmco Y29uc3Qgd3hBcnJheVN0cmluZyYgYXJyYXkpOw0KDQogIHd4QXJyYXlTdHJpbmcmIG9wZXJhdG9y PShjb25zdCB3eEFycmF5U3RyaW5nJiBzcmMpOw0KDQogfnd4QXJyYXlTdHJpbmcoKTsNCg0KDQoN CiAgdm9pZCBFbXB0eSgpOw0KDQogIHZvaWQgQ2xlYXIoKTsNCg0KICB2b2lkIEFsbG9jKHNpemVf dCBuQ291bnQpOw0KDQogIHZvaWQgU2hyaW5rKCk7DQoNCg0KDQogIHNpemVfdCBHZXRDb3VudCgp IGNvbnN0IHsgcmV0dXJuIG1fbkNvdW50OyB9DQoNCiAgYm9vbCBJc0VtcHR5KCkgY29uc3QgeyBy ZXR1cm4gbV9uQ291bnQgPT0gMDsgfQ0KDQogIHNpemVfdCBDb3VudCgpIGNvbnN0IHsgcmV0dXJu IG1fbkNvdW50OyB9DQoNCg0KDQogIHd4U3RyaW5nJiBJdGVtKHNpemVfdCBuSW5kZXgpIGNvbnN0 DQogICAgeyBpZiAoICEobkluZGV4IDwgbV9uQ291bnQpICkgd3hPbkFzc2VydCgiLi4vLi4vaW5j bHVkZS93eC9zdHJpbmcuaCIsIDk5NCk7IHJldHVybiAqKHd4U3RyaW5nICopJihtX3BJdGVtc1tu SW5kZXhdKTsgfQ0KDQogIHd4U3RyaW5nJiBvcGVyYXRvcltdKHNpemVfdCBuSW5kZXgpIGNvbnN0 IHsgcmV0dXJuIEl0ZW0obkluZGV4KTsgfQ0KDQogIHd4U3RyaW5nJiBMYXN0KCkgY29uc3QgeyBp ZiAoICEoIUlzRW1wdHkoKSkgKSB3eE9uQXNzZXJ0KCIuLi8uLi9pbmNsdWRlL3d4L3N0cmluZy5o IiwgOTk4KTsgcmV0dXJuIEl0ZW0oQ291bnQoKSAtIDEpOyB9DQoNCg0KDQoNCg0KDQogIGludCBJ bmRleCAoY29uc3QgY2hhciAqc3osIGJvb2wgYkNhc2UgPSAxLCBib29sIGJGcm9tRW5kID0gMCkg Y29uc3Q7DQoNCg0KICBzaXplX3QgQWRkKGNvbnN0IHd4U3RyaW5nJiBzdHIpOw0KDQogIHZvaWQg SW5zZXJ0KGNvbnN0IHd4U3RyaW5nJiBzdHIsIHNpemVfdCB1aUluZGV4KTsNCg0KICB2b2lkIFJl bW92ZShjb25zdCBjaGFyICpzeik7DQoNCiAgdm9pZCBSZW1vdmVBdChzaXplX3QgbkluZGV4KTsN Cg0KDQogIHZvaWQgUmVtb3ZlKHNpemVfdCBuSW5kZXgpOw0KDQoNCg0KDQogIHZvaWQgU29ydChi b29sIHJldmVyc2VPcmRlciA9IDApOw0KDQogIHZvaWQgU29ydChDb21wYXJlRnVuY3Rpb24gY29t cGFyZUZ1bmN0aW9uKTsNCg0KDQoNCiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHd4QXJyYXlTdHJp bmcmIGEpIGNvbnN0Ow0KDQogIGJvb2wgb3BlcmF0b3IhPShjb25zdCB3eEFycmF5U3RyaW5nJiBh KSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IGEpOyB9DQoNCnByb3RlY3RlZDoNCiAgdm9pZCBD b3B5KGNvbnN0IHd4QXJyYXlTdHJpbmcmIHNyYyk7DQoNCnByaXZhdGU6DQogIHZvaWQgR3Jvdygp Ow0KICB2b2lkIEZyZWUoKTsNCg0KICB2b2lkIERvU29ydCgpOw0KDQogIHNpemVfdCBtX25TaXpl LA0KICAgICAgICAgIG1fbkNvdW50Ow0KDQogIGNoYXIgKiptX3BJdGVtczsNCg0KICBib29sIG1f YXV0b1NvcnQ7DQp9Ow0KDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eFNvcnRl ZEFycmF5U3RyaW5nIDogcHVibGljIHd4QXJyYXlTdHJpbmcNCnsNCnB1YmxpYzoNCiAgd3hTb3J0 ZWRBcnJheVN0cmluZygpIDogd3hBcnJheVN0cmluZygxKQ0KICAgIHsgfQ0KICB3eFNvcnRlZEFy cmF5U3RyaW5nKGNvbnN0IHd4QXJyYXlTdHJpbmcmIGFycmF5KSA6IHd4QXJyYXlTdHJpbmcoMSkN CiAgICB7IENvcHkoYXJyYXkpOyB9DQp9Ow0KDQoNCg0KDQoNCg0KaW5saW5lIGJvb2wgb3BlcmF0 b3I9PShjb25zdCB3eFN0cmluZyYgczEsIGNvbnN0IHd4U3RyaW5nJiBzMikgeyByZXR1cm4gKHMx LkNtcChzMikgPT0gMCk7IH0NCg0KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCB3eFN0cmlu ZyYgczEsIGNvbnN0IGNoYXIgKiBzMikgeyByZXR1cm4gKHMxLkNtcChzMikgPT0gMCk7IH0NCg0K aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBjaGFyICogczEsIGNvbnN0IHd4U3RyaW5nJiBz MikgeyByZXR1cm4gKHMyLkNtcChzMSkgPT0gMCk7IH0NCg0KaW5saW5lIGJvb2wgb3BlcmF0b3Ih PShjb25zdCB3eFN0cmluZyYgczEsIGNvbnN0IHd4U3RyaW5nJiBzMikgeyByZXR1cm4gKHMxLkNt cChzMikgIT0gMCk7IH0NCg0KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCB3eFN0cmluZyYg czEsIGNvbnN0IGNoYXIgKiBzMikgeyByZXR1cm4gKHMxLkNtcChzMikgIT0gMCk7IH0NCg0KaW5s aW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBjaGFyICogczEsIGNvbnN0IHd4U3RyaW5nJiBzMikg eyByZXR1cm4gKHMyLkNtcChzMSkgIT0gMCk7IH0NCg0KaW5saW5lIGJvb2wgb3BlcmF0b3I8IChj b25zdCB3eFN0cmluZyYgczEsIGNvbnN0IHd4U3RyaW5nJiBzMikgeyByZXR1cm4gKHMxLkNtcChz MikgPCAwKTsgfQ0KDQppbmxpbmUgYm9vbCBvcGVyYXRvcjwgKGNvbnN0IHd4U3RyaW5nJiBzMSwg Y29uc3QgY2hhciAqIHMyKSB7IHJldHVybiAoczEuQ21wKHMyKSA8IDApOyB9DQoNCmlubGluZSBi b29sIG9wZXJhdG9yPCAoY29uc3QgY2hhciAqIHMxLCBjb25zdCB3eFN0cmluZyYgczIpIHsgcmV0 dXJuIChzMi5DbXAoczEpID4gMCk7IH0NCg0KaW5saW5lIGJvb2wgb3BlcmF0b3I+IChjb25zdCB3 eFN0cmluZyYgczEsIGNvbnN0IHd4U3RyaW5nJiBzMikgeyByZXR1cm4gKHMxLkNtcChzMikgPiAw KTsgfQ0KDQppbmxpbmUgYm9vbCBvcGVyYXRvcj4gKGNvbnN0IHd4U3RyaW5nJiBzMSwgY29uc3Qg Y2hhciAqIHMyKSB7IHJldHVybiAoczEuQ21wKHMyKSA+IDApOyB9DQoNCmlubGluZSBib29sIG9w ZXJhdG9yPiAoY29uc3QgY2hhciAqIHMxLCBjb25zdCB3eFN0cmluZyYgczIpIHsgcmV0dXJuIChz Mi5DbXAoczEpIDwgMCk7IH0NCg0KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCB3eFN0cmlu ZyYgczEsIGNvbnN0IHd4U3RyaW5nJiBzMikgeyByZXR1cm4gKHMxLkNtcChzMikgPD0gMCk7IH0N Cg0KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCB3eFN0cmluZyYgczEsIGNvbnN0IGNoYXIg KiBzMikgeyByZXR1cm4gKHMxLkNtcChzMikgPD0gMCk7IH0NCg0KaW5saW5lIGJvb2wgb3BlcmF0 b3I8PShjb25zdCBjaGFyICogczEsIGNvbnN0IHd4U3RyaW5nJiBzMikgeyByZXR1cm4gKHMyLkNt cChzMSkgPj0gMCk7IH0NCg0KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCB3eFN0cmluZyYg czEsIGNvbnN0IHd4U3RyaW5nJiBzMikgeyByZXR1cm4gKHMxLkNtcChzMikgPj0gMCk7IH0NCg0K aW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCB3eFN0cmluZyYgczEsIGNvbnN0IGNoYXIgKiBz MikgeyByZXR1cm4gKHMxLkNtcChzMikgPj0gMCk7IH0NCg0KaW5saW5lIGJvb2wgb3BlcmF0b3I+ PShjb25zdCBjaGFyICogczEsIGNvbnN0IHd4U3RyaW5nJiBzMikgeyByZXR1cm4gKHMyLkNtcChz MSkgPD0gMCk7IH0NCg0KDQppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNoYXIgYywgY29uc3Qgd3hT dHJpbmcmIHMpIHsgcmV0dXJuIHMuSXNTYW1lQXMoYyk7IH0NCmlubGluZSBib29sIG9wZXJhdG9y PT0oY29uc3Qgd3hTdHJpbmcmIHMsIGNoYXIgYykgeyByZXR1cm4gcy5Jc1NhbWVBcyhjKTsgfQ0K aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjaGFyIGMsIGNvbnN0IHd4U3RyaW5nJiBzKSB7IHJldHVy biAhcy5Jc1NhbWVBcyhjKTsgfQ0KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCB3eFN0cmlu ZyYgcywgY2hhciBjKSB7IHJldHVybiAhcy5Jc1NhbWVBcyhjKTsgfQ0KIyAxMTE1ICIuLi8uLi9p bmNsdWRlL3d4L3N0cmluZy5oIg0KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCB3eFN0cmlu ZyYgczEsIGNvbnN0IHd4Q2hhckJ1ZmZlciYgczIpDQogICAgeyByZXR1cm4gKHMxLkNtcCgoY29u c3QgY2hhciAqKXMyKSA9PSAwKTsgfQ0KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCB3eENo YXJCdWZmZXImIHMxLCBjb25zdCB3eFN0cmluZyYgczIpDQogICAgeyByZXR1cm4gKHMyLkNtcCgo Y29uc3QgY2hhciAqKXMxKSA9PSAwKTsgfQ0KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCB3 eFN0cmluZyYgczEsIGNvbnN0IHd4Q2hhckJ1ZmZlciYgczIpDQogICAgeyByZXR1cm4gKHMxLkNt cCgoY29uc3QgY2hhciAqKXMyKSAhPSAwKTsgfQ0KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25z dCB3eENoYXJCdWZmZXImIHMxLCBjb25zdCB3eFN0cmluZyYgczIpDQogICAgeyByZXR1cm4gKHMy LkNtcCgoY29uc3QgY2hhciAqKXMxKSAhPSAwKTsgfQ0KDQoNCnd4U3RyaW5nIF9fYXR0cmlidXRl X18oKGRsbGltcG9ydCkpIG9wZXJhdG9yKyhjb25zdCB3eFN0cmluZyYgc3RyaW5nMSwgY29uc3Qg d3hTdHJpbmcmIHN0cmluZzIpOw0Kd3hTdHJpbmcgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkg b3BlcmF0b3IrKGNvbnN0IHd4U3RyaW5nJiBzdHJpbmcsIGNoYXIgY2gpOw0Kd3hTdHJpbmcgX19h dHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgb3BlcmF0b3IrKGNoYXIgY2gsIGNvbnN0IHd4U3RyaW5n JiBzdHJpbmcpOw0Kd3hTdHJpbmcgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgb3BlcmF0b3Ir KGNvbnN0IHd4U3RyaW5nJiBzdHJpbmcsIGNvbnN0IGNoYXIgKnBzeik7DQp3eFN0cmluZyBfX2F0 dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBvcGVyYXRvcisoY29uc3QgY2hhciAqcHN6LCBjb25zdCB3 eFN0cmluZyYgc3RyaW5nKTsNCg0KDQoNCg0KDQoNCmlubGluZSB3eFN0cmluZyBfX2F0dHJpYnV0 ZV9fKChkbGxpbXBvcnQpKSBvcGVyYXRvcisoY29uc3Qgd3hTdHJpbmcmIHN0cmluZywgY29uc3Qg d3hDaGFyQnVmZmVyJiBidWYpDQogICAgeyByZXR1cm4gc3RyaW5nICsgKGNvbnN0IGNoYXIgKili dWY7IH0NCmlubGluZSB3eFN0cmluZyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBvcGVyYXRv cisoY29uc3Qgd3hDaGFyQnVmZmVyJiBidWYsIGNvbnN0IHd4U3RyaW5nJiBzdHJpbmcpDQogICAg eyByZXR1cm4gKGNvbnN0IGNoYXIgKilidWYgKyBzdHJpbmc7IH0NCiMgMjEgIi4uLy4uL2luY2x1 ZGUvd3gvbWVtb3J5LmgiIDINCiMgMjkgIi4uLy4uL2luY2x1ZGUvd3gvbWVtb3J5LmgiDQojIDEg InQ6L21zeXMvMS4wL21pbmd3L2xpYi9nY2MtbGliL2k2ODYtcGMtbWluZ3czMi8zLjEvaW5jbHVk ZS9zdGRkZWYuaCIgMSAzDQojIDMwICIuLi8uLi9pbmNsdWRlL3d4L21lbW9yeS5oIiAyDQoNCg0K DQojIDEgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL2lvc3RyZWFt LmgiIDEgMw0KIyAzMSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYmFja3dhcmQv aW9zdHJlYW0uaCIgMw0KIyAxICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iYWNr d2FyZC9iYWNrd2FyZF93YXJuaW5nLmgiIDEgMw0KIyAzMiAidDovbXN5cy8xLjAvbWluZ3cvaW5j bHVkZS9nKystdjMvYmFja3dhcmQvaW9zdHJlYW0uaCIgMiAzDQojIDEgInQ6L21zeXMvMS4wL21p bmd3L2luY2x1ZGUvZysrLXYzL2lvc3RyZWFtIiAxIDMNCiMgNDMgInQ6L21zeXMvMS4wL21pbmd3 L2luY2x1ZGUvZysrLXYzL2lvc3RyZWFtIiAzDQoNCiMgMSAidDovbXN5cy8xLjAvbWluZ3cvaW5j bHVkZS9nKystdjMvaTY4Ni1wYy1taW5ndzMyL2JpdHMvYysrY29uZmlnLmgiIDEgMw0KIyAzNCAi dDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1taW5ndzMyL2JpdHMvYysr Y29uZmlnLmgiIDMNCiMgMSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvaTY4Ni1w Yy1taW5ndzMyL2JpdHMvb3NfZGVmaW5lcy5oIiAxIDMNCiMgMzUgInQ6L21zeXMvMS4wL21pbmd3 L2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbWluZ3czMi9iaXRzL2MrK2NvbmZpZy5oIiAyIDMNCiMg NDUgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2lvc3RyZWFtIiAyIDMNCiMgMSAi dDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvb3N0cmVhbSIgMSAzDQojIDQ0ICJ0Oi9t c3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9vc3RyZWFtIiAzDQoNCiMgMSAidDovbXN5cy8x LjAvbWluZ3cvaW5jbHVkZS9nKystdjMvaW9zIiAxIDMNCiMgNDMgInQ6L21zeXMvMS4wL21pbmd3 L2luY2x1ZGUvZysrLXYzL2lvcyIgMw0KDQojIDEgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUv ZysrLXYzL2lvc2Z3ZCIgMSAzDQojIDQzICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12 My9pb3Nmd2QiIDMNCg0KDQojIDEgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RyaW5nZndkLmgiIDEgMw0KIyA0MyAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKyst djMvYml0cy9zdHJpbmdmd2QuaCIgMw0KDQoNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KICB0ZW1wbGF0 ZTxjbGFzcyBfQ2hhclQ+DQogICAgc3RydWN0IGNoYXJfdHJhaXRzOw0KDQogIHRlbXBsYXRlPD4g c3RydWN0IGNoYXJfdHJhaXRzPGNoYXI+Ow0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9B bGxvYz4NCiAgICBjbGFzcyBhbGxvY2F0b3I7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwNCiAgICAgICAgICAgdHlw ZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPg0KICAgIGNsYXNzIGJhc2ljX3N0cmlu ZzsNCg0KICB0eXBlZGVmIGJhc2ljX3N0cmluZzxjaGFyPiBzdHJpbmc7DQogIHR5cGVkZWYgYmFz aWNfc3RyaW5nPHdjaGFyX3Q+IHdzdHJpbmc7DQp9DQojIDQ2ICJ0Oi9tc3lzLzEuMC9taW5ndy9p bmNsdWRlL2crKy12My9pb3Nmd2QiIDIgMw0KIyAxICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRl L2crKy12My9iaXRzL2Zwb3MuaCIgMSAzDQojIDQzICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRl L2crKy12My9iaXRzL2Zwb3MuaCIgMw0KDQojIDEgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUv ZysrLXYzL2k2ODYtcGMtbWluZ3czMi9iaXRzL2MrK2lvLmgiIDEgMw0KIyAzNSAidDovbXN5cy8x LjAvbWluZ3cvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1taW5ndzMyL2JpdHMvYysraW8uaCIgMw0K IyAxICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9jc3RkaW8iIDEgMw0KIyA0OCAi dDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvY3N0ZGlvIiAzDQoNCg0KIyAxICJ0Oi9t c3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9jc3RkZGVmIiAxIDMNCiMgNDcgInQ6L21zeXMv MS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2NzdGRkZWYiIDMNCg0KIyAxICJ0Oi9tc3lzLzEuMC9t aW5ndy9saWIvZ2NjLWxpYi9pNjg2LXBjLW1pbmd3MzIvMy4xL2luY2x1ZGUvc3RkZGVmLmgiIDEg Mw0KIyA0OSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvY3N0ZGRlZiIgMiAzDQoN Cm5hbWVzcGFjZSBzdGQNCnsNCiAgdXNpbmcgOjpwdHJkaWZmX3Q7DQogIHVzaW5nIDo6c2l6ZV90 Ow0KfQ0KIyA1MSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvY3N0ZGlvIiAyIDMN CiMgOTcgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2NzdGRpbyIgMw0KbmFtZXNw YWNlIHN0ZA0Kew0KICB1c2luZyA6OkZJTEU7DQogIHVzaW5nIDo6ZnBvc190Ow0KDQogIHVzaW5n IDo6Y2xlYXJlcnI7DQogIHVzaW5nIDo6ZmNsb3NlOw0KICB1c2luZyA6OmZlb2Y7DQogIHVzaW5n IDo6ZmVycm9yOw0KICB1c2luZyA6OmZmbHVzaDsNCiAgdXNpbmcgOjpmZ2V0YzsNCiAgdXNpbmcg OjpmZ2V0cG9zOw0KICB1c2luZyA6OmZnZXRzOw0KICB1c2luZyA6OmZvcGVuOw0KICB1c2luZyA6 OmZwcmludGY7DQogIHVzaW5nIDo6ZnB1dGM7DQogIHVzaW5nIDo6ZnB1dHM7DQogIHVzaW5nIDo6 ZnJlYWQ7DQogIHVzaW5nIDo6ZnJlb3BlbjsNCiAgdXNpbmcgOjpmc2NhbmY7DQogIHVzaW5nIDo6 ZnNlZWs7DQogIHVzaW5nIDo6ZnNldHBvczsNCiAgdXNpbmcgOjpmdGVsbDsNCiAgdXNpbmcgOjpm d3JpdGU7DQogIHVzaW5nIDo6Z2V0YzsNCiAgdXNpbmcgOjpnZXRjaGFyOw0KICB1c2luZyA6Omdl dHM7DQogIHVzaW5nIDo6cGVycm9yOw0KICB1c2luZyA6OnByaW50ZjsNCiAgdXNpbmcgOjpwdXRj Ow0KICB1c2luZyA6OnB1dGNoYXI7DQogIHVzaW5nIDo6cHV0czsNCiAgdXNpbmcgOjpyZW1vdmU7 DQogIHVzaW5nIDo6cmVuYW1lOw0KICB1c2luZyA6OnJld2luZDsNCiAgdXNpbmcgOjpzY2FuZjsN CiAgdXNpbmcgOjpzZXRidWY7DQogIHVzaW5nIDo6c2V0dmJ1ZjsNCiAgdXNpbmcgOjpzcHJpbnRm Ow0KICB1c2luZyA6OnNzY2FuZjsNCiAgdXNpbmcgOjp0bXBmaWxlOw0KICB1c2luZyA6OnRtcG5h bTsNCiAgdXNpbmcgOjp1bmdldGM7DQogIHVzaW5nIDo6dmZwcmludGY7DQogIHVzaW5nIDo6dnBy aW50ZjsNCiAgdXNpbmcgOjp2c3ByaW50ZjsNCn0NCiMgMzYgInQ6L21zeXMvMS4wL21pbmd3L2lu Y2x1ZGUvZysrLXYzL2k2ODYtcGMtbWluZ3czMi9iaXRzL2MrK2lvLmgiIDIgMw0KDQojIDEgInQ6 L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbWluZ3czMi9iaXRzL2d0aHIu aCIgMSAzDQojIDk4ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9pNjg2LXBjLW1p bmd3MzIvYml0cy9ndGhyLmgiIDMNCiMgMSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKyst djMvaTY4Ni1wYy1taW5ndzMyL2JpdHMvZ3Roci1kZWZhdWx0LmgiIDEgMw0KIyA2NyAidDovbXN5 cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1taW5ndzMyL2JpdHMvZ3Roci1kZWZh dWx0LmgiIDMNCiMgMSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9lcnJuby5oIiAxIDMNCiMg OTYgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZXJybm8uaCIgMw0KZXh0ZXJuICJDIiB7DQoj IDEwNyAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9lcnJuby5oIiAzDQppbnQqIF9lcnJubygp Ow0KDQoNCg0KDQp9DQojIDY4ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9pNjg2 LXBjLW1pbmd3MzIvYml0cy9ndGhyLWRlZmF1bHQuaCIgMiAzDQojIDMzMSAidDovbXN5cy8xLjAv bWluZ3cvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1taW5ndzMyL2JpdHMvZ3Roci1kZWZhdWx0Lmgi IDMNCiMgMSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS93aW5kb3dzLmgiIDEgMw0KIyA5OCAi dDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS93aW5kb3dzLmgiIDMNCiMgMSAidDovbXN5cy8xLjAv bWluZ3cvaW5jbHVkZS93aW5kZWYuaCIgMSAzDQoNCg0KDQpleHRlcm4gIkMiIHsNCiMgMTIwICJ0 Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL3dpbmRlZi5oIiAzDQp0eXBlZGVmIHVuc2lnbmVkIGxv bmcgRFdPUkQ7DQp0eXBlZGVmIGludCBXSU5CT09MLCpQV0lOQk9PTCwqTFBXSU5CT09MOw0KDQoN Cg0KdHlwZWRlZiBXSU5CT09MIEJPT0w7DQoNCg0KDQp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgQllU RTsNCg0KdHlwZWRlZiBCT09MICpQQk9PTCwqTFBCT09MOw0KdHlwZWRlZiB1bnNpZ25lZCBzaG9y dCBXT1JEOw0KdHlwZWRlZiBmbG9hdCBGTE9BVDsNCnR5cGVkZWYgRkxPQVQgKlBGTE9BVDsNCnR5 cGVkZWYgQllURSAqUEJZVEUsKkxQQllURTsNCnR5cGVkZWYgaW50ICpQSU5ULCpMUElOVDsNCnR5 cGVkZWYgV09SRCAqUFdPUkQsKkxQV09SRDsNCnR5cGVkZWYgbG9uZyAqTFBMT05HOw0KdHlwZWRl ZiBEV09SRCAqUERXT1JELCpMUERXT1JEOw0KdHlwZWRlZiB2b2lkICpQVk9JRCwqTFBWT0lEOw0K dHlwZWRlZiBjb25zdCB2b2lkICpQQ1ZPSUQsKkxQQ1ZPSUQ7DQp0eXBlZGVmIGludCBJTlQ7DQp0 eXBlZGVmIHVuc2lnbmVkIGludCBVSU5ULCpQVUlOVCwqTFBVSU5UOw0KDQojIDEgInQ6L21zeXMv MS4wL21pbmd3L2luY2x1ZGUvd2lubnQuaCIgMSAzDQojIDI3ICJ0Oi9tc3lzLzEuMC9taW5ndy9p bmNsdWRlL3dpbm50LmgiIDMNCmV4dGVybiAiQyIgew0KDQoNCiMgMSAidDovbXN5cy8xLjAvbWlu Z3cvaW5jbHVkZS93aW5lcnJvci5oIiAxIDMNCiMgMzEgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1 ZGUvd2lubnQuaCIgMiAzDQojIDQ1ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL3dpbm50Lmgi IDMNCnR5cGVkZWYgY2hhciBDSEFSOw0KdHlwZWRlZiBzaG9ydCBTSE9SVDsNCnR5cGVkZWYgbG9u ZyBMT05HOw0KdHlwZWRlZiBDSEFSIENDSEFSOw0KdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFVDSEFS LCpQVUNIQVI7DQp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IFVTSE9SVCwqUFVTSE9SVDsNCnR5cGVk ZWYgdW5zaWduZWQgbG9uZyBVTE9ORywqUFVMT05HOw0KdHlwZWRlZiBjaGFyICpQU1o7DQojIDY1 ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL3dpbm50LmgiIDMNCnR5cGVkZWYgd2NoYXJfdCBX Q0hBUjsNCnR5cGVkZWYgV0NIQVIgKlBXQ0hBUiwqTFBXQ0gsKlBXQ0gsKk5XUFNUUiwqTFBXU1RS LCpQV1NUUjsNCnR5cGVkZWYgY29uc3QgV0NIQVIgKkxQQ1dDSCwqUENXQ0gsKkxQQ1dTVFIsKlBD V1NUUjsNCnR5cGVkZWYgQ0hBUiAqUENIQVIsKkxQQ0gsKlBDSCwqTlBTVFIsKkxQU1RSLCpQU1RS Ow0KdHlwZWRlZiBjb25zdCBDSEFSICpMUENDSCwqUENTVFIsKkxQQ1NUUjsNCiMgNzkgInQ6L21z eXMvMS4wL21pbmd3L2luY2x1ZGUvd2lubnQuaCIgMw0KdHlwZWRlZiBDSEFSIFRDSEFSOw0KDQoN CnR5cGVkZWYgVENIQVIgVEJZVEUsKlBUQ0gsKlBUQllURTsNCnR5cGVkZWYgVENIQVIgKkxQVENI LCpQVFNUUiwqTFBUU1RSLCpMUCwqUFRDSEFSOw0KdHlwZWRlZiBjb25zdCBUQ0hBUiAqTFBDVFNU UjsNCiMgMTAzICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL3dpbm50LmgiIDMNCnR5cGVkZWYg U0hPUlQgKlBTSE9SVDsNCnR5cGVkZWYgTE9ORyAqUExPTkc7DQp0eXBlZGVmIHZvaWQgKkhBTkRM RTsNCnR5cGVkZWYgSEFORExFICpQSEFORExFLCpMUEhBTkRMRTsNCg0KDQoNCg0KDQp0eXBlZGVm IERXT1JEIExDSUQ7DQp0eXBlZGVmIFBEV09SRCBQTENJRDsNCnR5cGVkZWYgV09SRCBMQU5HSUQ7 DQoNCg0KDQoNCg0KDQoNCnR5cGVkZWYgbG9uZyBsb25nIExPTkdMT05HOw0KdHlwZWRlZiB1bnNp Z25lZCBsb25nIGxvbmcgRFdPUkRMT05HOw0KDQoNCg0KdHlwZWRlZiBMT05HTE9ORyAqUExPTkdM T05HOw0KdHlwZWRlZiBEV09SRExPTkcgKlBEV09SRExPTkc7DQp0eXBlZGVmIERXT1JETE9ORyBV TE9OR0xPTkcsKlBVTE9OR0xPTkc7DQp0eXBlZGVmIExPTkdMT05HIFVTTjsNCiMgMTQwICJ0Oi9t c3lzLzEuMC9taW5ndy9pbmNsdWRlL3dpbm50LmgiIDMNCnR5cGVkZWYgQllURSBCT09MRUFOLCpQ Qk9PTEVBTjsNCg0KDQoNCiMgMSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9iYXNldHNkLmgi IDEgMw0KIyA0NSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9iYXNldHNkLmgiIDMNCmV4dGVy biAiQyIgew0KDQp0eXBlZGVmIGludCBMT05HMzIsICpQTE9ORzMyOw0KDQp0eXBlZGVmIGludCBJ TlQzMiwgKlBJTlQzMjsNCg0KdHlwZWRlZiB1bnNpZ25lZCBpbnQgVUxPTkczMiwgKlBVTE9ORzMy Ow0KdHlwZWRlZiB1bnNpZ25lZCBpbnQgRFdPUkQzMiwgKlBEV09SRDMyOw0KdHlwZWRlZiB1bnNp Z25lZCBpbnQgVUlOVDMyLCAqUFVJTlQzMjsNCiMgOTQgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1 ZGUvYmFzZXRzZC5oIiAzDQp0eXBlZGVmIGludCBJTlRfUFRSLCAqUElOVF9QVFI7DQp0eXBlZGVm IHVuc2lnbmVkIGludCBVSU5UX1BUUiwgKlBVSU5UX1BUUjsNCnR5cGVkZWYgbG9uZyBMT05HX1BU UiwgKlBMT05HX1BUUjsNCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBVTE9OR19QVFIsICpQVUxPTkdf UFRSOw0KdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBVSEFMRl9QVFIsICpQVUhBTEZfUFRSOw0KdHlw ZWRlZiBzaG9ydCBIQUxGX1BUUiwgKlBIQUxGX1BUUjsNCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBI QU5ETEVfUFRSOw0KDQoNCnR5cGVkZWYgVUxPTkdfUFRSIFNJWkVfVCwgKlBTSVpFX1Q7DQp0eXBl ZGVmIExPTkdfUFRSIFNTSVpFX1QsICpQU1NJWkVfVDsNCnR5cGVkZWYgVUxPTkdfUFRSIERXT1JE X1BUUiwgKlBEV09SRF9QVFI7DQp0eXBlZGVmIGxvbmcgbG9uZyBMT05HNjQsICpQTE9ORzY0Ow0K dHlwZWRlZiBsb25nIGxvbmcgSU5UNjQsICpQSU5UNjQ7DQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcg bG9uZyBVTE9ORzY0LCAqUFVMT05HNjQ7DQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBEV09S RDY0LCAqUERXT1JENjQ7DQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBVSU5UNjQsICpQVUlO VDY0Ow0KDQp9DQojIDE0NSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS93aW5udC5oIiAyIDMN CiMgMTA2OSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS93aW5udC5oIiAzDQp0eXBlZGVmIERX T1JEIEFDQ0VTU19NQVNLOw0KDQoNCnR5cGVkZWYgc3RydWN0IF9HVUlEIHsNCiAgICAgICAgdW5z aWduZWQgbG9uZyBEYXRhMTsNCiAgICAgICAgdW5zaWduZWQgc2hvcnQgRGF0YTI7DQogICAgICAg IHVuc2lnbmVkIHNob3J0IERhdGEzOw0KICAgICAgICB1bnNpZ25lZCBjaGFyIERhdGE0WzhdOw0K fSBHVUlELCAqUkVGR1VJRCwgKkxQR1VJRDsNCg0KDQp0eXBlZGVmIHN0cnVjdCBfR0VORVJJQ19N QVBQSU5HIHsNCiAgICAgICAgQUNDRVNTX01BU0sgR2VuZXJpY1JlYWQ7DQogICAgICAgIEFDQ0VT U19NQVNLIEdlbmVyaWNXcml0ZTsNCiAgICAgICAgQUNDRVNTX01BU0sgR2VuZXJpY0V4ZWN1dGU7 DQogICAgICAgIEFDQ0VTU19NQVNLIEdlbmVyaWNBbGw7DQp9IEdFTkVSSUNfTUFQUElORywgKlBH RU5FUklDX01BUFBJTkc7DQp0eXBlZGVmIHN0cnVjdCBfQUNFX0hFQURFUiB7DQogICAgICAgIEJZ VEUgQWNlVHlwZTsNCiAgICAgICAgQllURSBBY2VGbGFnczsNCiAgICAgICAgV09SRCBBY2VTaXpl Ow0KfSBBQ0VfSEVBREVSOw0KdHlwZWRlZiBzdHJ1Y3QgX0FDQ0VTU19BTExPV0VEX0FDRSB7DQog ICAgICAgIEFDRV9IRUFERVIgSGVhZGVyOw0KICAgICAgICBBQ0NFU1NfTUFTSyBNYXNrOw0KICAg ICAgICBEV09SRCBTaWRTdGFydDsNCn0gQUNDRVNTX0FMTE9XRURfQUNFOw0KdHlwZWRlZiBzdHJ1 Y3QgX0FDQ0VTU19ERU5JRURfQUNFIHsNCiAgICAgICAgQUNFX0hFQURFUiBIZWFkZXI7DQogICAg ICAgIEFDQ0VTU19NQVNLIE1hc2s7DQogICAgICAgIERXT1JEIFNpZFN0YXJ0Ow0KfSBBQ0NFU1Nf REVOSUVEX0FDRTsNCnR5cGVkZWYgc3RydWN0IF9TWVNURU1fQVVESVRfQUNFIHsNCiAgICAgICAg QUNFX0hFQURFUiBIZWFkZXI7DQogICAgICAgIEFDQ0VTU19NQVNLIE1hc2s7DQogICAgICAgIERX T1JEIFNpZFN0YXJ0Ow0KfSBTWVNURU1fQVVESVRfQUNFOw0KdHlwZWRlZiBTWVNURU1fQVVESVRf QUNFICpQU1lTVEVNX0FVRElUX0FDRTsNCnR5cGVkZWYgc3RydWN0IF9TWVNURU1fQUxBUk1fQUNF IHsNCiAgICAgICAgQUNFX0hFQURFUiBIZWFkZXI7DQogICAgICAgIEFDQ0VTU19NQVNLIE1hc2s7 DQogICAgICAgIERXT1JEIFNpZFN0YXJ0Ow0KfSBTWVNURU1fQUxBUk1fQUNFLCpQU1lTVEVNX0FM QVJNX0FDRTsNCnR5cGVkZWYgc3RydWN0IF9BQ0NFU1NfQUxMT1dFRF9PQkpFQ1RfQUNFIHsNCiAg ICAgICAgQUNFX0hFQURFUiBIZWFkZXI7DQogICAgICAgIEFDQ0VTU19NQVNLIE1hc2s7DQogICAg ICAgIERXT1JEIEZsYWdzOw0KICAgICAgICBHVUlEIE9iamVjdFR5cGU7DQogICAgICAgIEdVSUQg SW5oZXJpdGVkT2JqZWN0VHlwZTsNCiAgICAgICAgRFdPUkQgU2lkU3RhcnQ7DQp9IEFDQ0VTU19B TExPV0VEX09CSkVDVF9BQ0UsKlBBQ0NFU1NfQUxMT1dFRF9PQkpFQ1RfQUNFOw0KdHlwZWRlZiBz dHJ1Y3QgX0FDQ0VTU19ERU5JRURfT0JKRUNUX0FDRSB7DQogICAgICAgIEFDRV9IRUFERVIgSGVh ZGVyOw0KICAgICAgICBBQ0NFU1NfTUFTSyBNYXNrOw0KICAgICAgICBEV09SRCBGbGFnczsNCiAg ICAgICAgR1VJRCBPYmplY3RUeXBlOw0KICAgICAgICBHVUlEIEluaGVyaXRlZE9iamVjdFR5cGU7 DQogICAgICAgIERXT1JEIFNpZFN0YXJ0Ow0KfSBBQ0NFU1NfREVOSUVEX09CSkVDVF9BQ0UsKlBB Q0NFU1NfREVOSUVEX09CSkVDVF9BQ0U7DQp0eXBlZGVmIHN0cnVjdCBfU1lTVEVNX0FVRElUX09C SkVDVF9BQ0Ugew0KICAgICAgICBBQ0VfSEVBREVSIEhlYWRlcjsNCiAgICAgICAgQUNDRVNTX01B U0sgTWFzazsNCiAgICAgICAgRFdPUkQgRmxhZ3M7DQogICAgICAgIEdVSUQgT2JqZWN0VHlwZTsN CiAgICAgICAgR1VJRCBJbmhlcml0ZWRPYmplY3RUeXBlOw0KICAgICAgICBEV09SRCBTaWRTdGFy dDsNCn0gU1lTVEVNX0FVRElUX09CSkVDVF9BQ0UsKlBTWVNURU1fQVVESVRfT0JKRUNUX0FDRTsN CnR5cGVkZWYgc3RydWN0IF9TWVNURU1fQUxBUk1fT0JKRUNUX0FDRSB7DQogICAgICAgIEFDRV9I RUFERVIgSGVhZGVyOw0KICAgICAgICBBQ0NFU1NfTUFTSyBNYXNrOw0KICAgICAgICBEV09SRCBG bGFnczsNCiAgICAgICAgR1VJRCBPYmplY3RUeXBlOw0KICAgICAgICBHVUlEIEluaGVyaXRlZE9i amVjdFR5cGU7DQogICAgICAgIERXT1JEIFNpZFN0YXJ0Ow0KfSBTWVNURU1fQUxBUk1fT0JKRUNU X0FDRSwqUFNZU1RFTV9BTEFSTV9PQkpFQ1RfQUNFOw0KdHlwZWRlZiBzdHJ1Y3QgX0FDTCB7DQog ICAgICAgIEJZVEUgQWNsUmV2aXNpb247DQogICAgICAgIEJZVEUgU2J6MTsNCiAgICAgICAgV09S RCBBY2xTaXplOw0KICAgICAgICBXT1JEIEFjZUNvdW50Ow0KICAgICAgICBXT1JEIFNiejI7DQp9 IEFDTCwqUEFDTDsNCnR5cGVkZWYgc3RydWN0IF9BQ0xfUkVWSVNJT05fSU5GT1JNQVRJT04gew0K ICAgICAgICBEV09SRCBBY2xSZXZpc2lvbjsNCn0gQUNMX1JFVklTSU9OX0lORk9STUFUSU9OOw0K dHlwZWRlZiBzdHJ1Y3QgX0FDTF9TSVpFX0lORk9STUFUSU9OIHsNCiAgICAgICAgRFdPUkQgQWNl Q291bnQ7DQogICAgICAgIERXT1JEIEFjbEJ5dGVzSW5Vc2U7DQogICAgICAgIERXT1JEIEFjbEJ5 dGVzRnJlZTsNCn0gQUNMX1NJWkVfSU5GT1JNQVRJT047DQojIDExNzEgInQ6L21zeXMvMS4wL21p bmd3L2luY2x1ZGUvd2lubnQuaCIgMw0KdHlwZWRlZiBzdHJ1Y3QgX0ZMT0FUSU5HX1NBVkVfQVJF QSB7DQogICAgICAgIERXT1JEIENvbnRyb2xXb3JkOw0KICAgICAgICBEV09SRCBTdGF0dXNXb3Jk Ow0KICAgICAgICBEV09SRCBUYWdXb3JkOw0KICAgICAgICBEV09SRCBFcnJvck9mZnNldDsNCiAg ICAgICAgRFdPUkQgRXJyb3JTZWxlY3RvcjsNCiAgICAgICAgRFdPUkQgRGF0YU9mZnNldDsNCiAg ICAgICAgRFdPUkQgRGF0YVNlbGVjdG9yOw0KICAgICAgICBCWVRFIFJlZ2lzdGVyQXJlYVs4MF07 DQogICAgICAgIERXT1JEIENyME5weFN0YXRlOw0KfSBGTE9BVElOR19TQVZFX0FSRUE7DQp0eXBl ZGVmIHN0cnVjdCBfQ09OVEVYVCB7DQogICAgICAgIERXT1JEIENvbnRleHRGbGFnczsNCiAgICAg ICAgRFdPUkQgRHIwOw0KICAgICAgICBEV09SRCBEcjE7DQogICAgICAgIERXT1JEIERyMjsNCiAg ICAgICAgRFdPUkQgRHIzOw0KICAgICAgICBEV09SRCBEcjY7DQogICAgICAgIERXT1JEIERyNzsN CiAgICAgICAgRkxPQVRJTkdfU0FWRV9BUkVBIEZsb2F0U2F2ZTsNCiAgICAgICAgRFdPUkQgU2Vn R3M7DQogICAgICAgIERXT1JEIFNlZ0ZzOw0KICAgICAgICBEV09SRCBTZWdFczsNCiAgICAgICAg RFdPUkQgU2VnRHM7DQogICAgICAgIERXT1JEIEVkaTsNCiAgICAgICAgRFdPUkQgRXNpOw0KICAg ICAgICBEV09SRCBFYng7DQogICAgICAgIERXT1JEIEVkeDsNCiAgICAgICAgRFdPUkQgRWN4Ow0K ICAgICAgICBEV09SRCBFYXg7DQogICAgICAgIERXT1JEIEVicDsNCiAgICAgICAgRFdPUkQgRWlw Ow0KICAgICAgICBEV09SRCBTZWdDczsNCiAgICAgICAgRFdPUkQgRUZsYWdzOw0KICAgICAgICBE V09SRCBFc3A7DQogICAgICAgIERXT1JEIFNlZ1NzOw0KfSBDT05URVhUOw0KIyAxNjkwICJ0Oi9t c3lzLzEuMC9taW5ndy9pbmNsdWRlL3dpbm50LmgiIDMNCnR5cGVkZWYgQ09OVEVYVCAqUENPTlRF WFQsKkxQQ09OVEVYVDsNCnR5cGVkZWYgc3RydWN0IF9FWENFUFRJT05fUkVDT1JEIHsNCiAgICAg ICAgRFdPUkQgRXhjZXB0aW9uQ29kZTsNCiAgICAgICAgRFdPUkQgRXhjZXB0aW9uRmxhZ3M7DQog ICAgICAgIHN0cnVjdCBfRVhDRVBUSU9OX1JFQ09SRCAqRXhjZXB0aW9uUmVjb3JkOw0KICAgICAg ICBQVk9JRCBFeGNlcHRpb25BZGRyZXNzOw0KICAgICAgICBEV09SRCBOdW1iZXJQYXJhbWV0ZXJz Ow0KICAgICAgICBEV09SRCBFeGNlcHRpb25JbmZvcm1hdGlvblsxNV07DQp9IEVYQ0VQVElPTl9S RUNPUkQsKlBFWENFUFRJT05fUkVDT1JEOw0KdHlwZWRlZiBzdHJ1Y3QgX0VYQ0VQVElPTl9QT0lO VEVSUyB7DQogICAgICAgIFBFWENFUFRJT05fUkVDT1JEIEV4Y2VwdGlvblJlY29yZDsNCiAgICAg ICAgUENPTlRFWFQgQ29udGV4dFJlY29yZDsNCn0gRVhDRVBUSU9OX1BPSU5URVJTLCpQRVhDRVBU SU9OX1BPSU5URVJTLCpMUEVYQ0VQVElPTl9QT0lOVEVSUzsNCnR5cGVkZWYgdW5pb24gX0xBUkdF X0lOVEVHRVIgew0KICBzdHJ1Y3Qgew0KICAgIERXT1JEIExvd1BhcnQ7DQogICAgTE9ORyBIaWdo UGFydDsNCiAgfSB1Ow0KDQogIHN0cnVjdCB7DQogICAgRFdPUkQgTG93UGFydDsNCiAgICBMT05H IEhpZ2hQYXJ0Ow0KICB9Ow0KDQogIExPTkdMT05HIFF1YWRQYXJ0Ow0KfSBMQVJHRV9JTlRFR0VS LCAqUExBUkdFX0lOVEVHRVI7DQp0eXBlZGVmIHVuaW9uIF9VTEFSR0VfSU5URUdFUiB7DQogIHN0 cnVjdCB7DQogICAgRFdPUkQgTG93UGFydDsNCiAgICBEV09SRCBIaWdoUGFydDsNCiAgfSB1Ow0K DQogIHN0cnVjdCB7DQogICAgRFdPUkQgTG93UGFydDsNCiAgICBEV09SRCBIaWdoUGFydDsNCiAg fTsNCg0KICBVTE9OR0xPTkcgUXVhZFBhcnQ7DQp9IFVMQVJHRV9JTlRFR0VSLCAqUFVMQVJHRV9J TlRFR0VSOw0KdHlwZWRlZiBMQVJHRV9JTlRFR0VSIExVSUQsKlBMVUlEOw0KI3ByYWdtYSBwYWNr KHB1c2gsNCkNCnR5cGVkZWYgc3RydWN0IF9MVUlEX0FORF9BVFRSSUJVVEVTIHsNCiAgICAgICAg TFVJRCBMdWlkOw0KICAgICAgICBEV09SRCBBdHRyaWJ1dGVzOw0KfSBMVUlEX0FORF9BVFRSSUJV VEVTOw0KI3ByYWdtYSBwYWNrKHBvcCkNCnR5cGVkZWYgTFVJRF9BTkRfQVRUUklCVVRFUyBMVUlE X0FORF9BVFRSSUJVVEVTX0FSUkFZWzFdOw0KdHlwZWRlZiBMVUlEX0FORF9BVFRSSUJVVEVTX0FS UkFZICpQTFVJRF9BTkRfQVRUUklCVVRFU19BUlJBWTsNCnR5cGVkZWYgc3RydWN0IF9QUklWSUxF R0VfU0VUIHsNCiAgICAgICAgRFdPUkQgUHJpdmlsZWdlQ291bnQ7DQogICAgICAgIERXT1JEIENv bnRyb2w7DQogICAgICAgIExVSURfQU5EX0FUVFJJQlVURVMgUHJpdmlsZWdlWzFdOw0KfSBQUklW SUxFR0VfU0VULCpQUFJJVklMRUdFX1NFVDsNCnR5cGVkZWYgc3RydWN0IF9TRUNVUklUWV9BVFRS SUJVVEVTIHsNCiAgICAgICAgRFdPUkQgbkxlbmd0aDsNCiAgICAgICAgTFBWT0lEIGxwU2VjdXJp dHlEZXNjcmlwdG9yOw0KICAgICAgICBCT09MIGJJbmhlcml0SGFuZGxlOw0KfSBTRUNVUklUWV9B VFRSSUJVVEVTLCpQU0VDVVJJVFlfQVRUUklCVVRFUywqTFBTRUNVUklUWV9BVFRSSUJVVEVTOw0K dHlwZWRlZiBlbnVtIF9TRUNVUklUWV9JTVBFUlNPTkFUSU9OX0xFVkVMIHsNCiAgICAgICAgU2Vj dXJpdHlBbm9ueW1vdXMsDQogICAgICAgIFNlY3VyaXR5SWRlbnRpZmljYXRpb24sDQogICAgICAg IFNlY3VyaXR5SW1wZXJzb25hdGlvbiwNCiAgICAgICAgU2VjdXJpdHlEZWxlZ2F0aW9uDQp9IFNF Q1VSSVRZX0lNUEVSU09OQVRJT05fTEVWRUw7DQp0eXBlZGVmIEJPT0xFQU4gU0VDVVJJVFlfQ09O VEVYVF9UUkFDS0lOR19NT0RFLCpQU0VDVVJJVFlfQ09OVEVYVF9UUkFDS0lOR19NT0RFOw0KdHlw ZWRlZiBzdHJ1Y3QgX1NFQ1VSSVRZX1FVQUxJVFlfT0ZfU0VSVklDRSB7DQogICAgICAgIERXT1JE IExlbmd0aDsNCiAgICAgICAgU0VDVVJJVFlfSU1QRVJTT05BVElPTl9MRVZFTCBJbXBlcnNvbmF0 aW9uTGV2ZWw7DQogICAgICAgIFNFQ1VSSVRZX0NPTlRFWFRfVFJBQ0tJTkdfTU9ERSBDb250ZXh0 VHJhY2tpbmdNb2RlOw0KICAgICAgICBCT09MRUFOIEVmZmVjdGl2ZU9ubHk7DQp9IFNFQ1VSSVRZ X1FVQUxJVFlfT0ZfU0VSVklDRSwqUFNFQ1VSSVRZX1FVQUxJVFlfT0ZfU0VSVklDRTsNCnR5cGVk ZWYgUFZPSUQgUEFDQ0VTU19UT0tFTjsNCnR5cGVkZWYgc3RydWN0IF9TRV9JTVBFUlNPTkFUSU9O X1NUQVRFIHsNCiAgICAgICAgUEFDQ0VTU19UT0tFTiBUb2tlbjsNCiAgICAgICAgQk9PTEVBTiBD b3B5T25PcGVuOw0KICAgICAgICBCT09MRUFOIEVmZmVjdGl2ZU9ubHk7DQogICAgICAgIFNFQ1VS SVRZX0lNUEVSU09OQVRJT05fTEVWRUwgTGV2ZWw7DQp9IFNFX0lNUEVSU09OQVRJT05fU1RBVEUs KlBTRV9JTVBFUlNPTkFUSU9OX1NUQVRFOw0KDQp0eXBlZGVmIHN0cnVjdCBfU0lEX0lERU5USUZJ RVJfQVVUSE9SSVRZIHsNCiAgICAgICAgQllURSBWYWx1ZVs2XTsNCn0gU0lEX0lERU5USUZJRVJf QVVUSE9SSVRZLCpQU0lEX0lERU5USUZJRVJfQVVUSE9SSVRZLCpMUFNJRF9JREVOVElGSUVSX0FV VEhPUklUWTsNCnR5cGVkZWYgUFZPSUQgUFNJRDsNCnR5cGVkZWYgc3RydWN0IF9TSUQgew0KICAg QllURSBSZXZpc2lvbjsNCiAgIEJZVEUgU3ViQXV0aG9yaXR5Q291bnQ7DQogICBTSURfSURFTlRJ RklFUl9BVVRIT1JJVFkgSWRlbnRpZmllckF1dGhvcml0eTsNCiAgIERXT1JEIFN1YkF1dGhvcml0 eVsxXTsNCn0gU0lELCAqUElTSUQ7DQp0eXBlZGVmIHN0cnVjdCBfU0lEX0FORF9BVFRSSUJVVEVT IHsNCiAgICAgICAgUFNJRCBTaWQ7DQogICAgICAgIERXT1JEIEF0dHJpYnV0ZXM7DQp9IFNJRF9B TkRfQVRUUklCVVRFUzsNCnR5cGVkZWYgU0lEX0FORF9BVFRSSUJVVEVTIFNJRF9BTkRfQVRUUklC VVRFU19BUlJBWVsxXTsNCnR5cGVkZWYgU0lEX0FORF9BVFRSSUJVVEVTX0FSUkFZICpQU0lEX0FO RF9BVFRSSUJVVEVTX0FSUkFZOw0KdHlwZWRlZiBzdHJ1Y3QgX1RPS0VOX1NPVVJDRSB7DQogICAg ICAgIENIQVIgU291cmNlTmFtZVs4XTsNCiAgICAgICAgTFVJRCBTb3VyY2VJZGVudGlmaWVyOw0K fSBUT0tFTl9TT1VSQ0UsKlBUT0tFTl9TT1VSQ0U7DQp0eXBlZGVmIHN0cnVjdCBfVE9LRU5fQ09O VFJPTCB7DQogICAgICAgIExVSUQgVG9rZW5JZDsNCiAgICAgICAgTFVJRCBBdXRoZW50aWNhdGlv bklkOw0KICAgICAgICBMVUlEIE1vZGlmaWVkSWQ7DQogICAgICAgIFRPS0VOX1NPVVJDRSBUb2tl blNvdXJjZTsNCn0gVE9LRU5fQ09OVFJPTCwqUFRPS0VOX0NPTlRST0w7DQp0eXBlZGVmIHN0cnVj dCBfVE9LRU5fREVGQVVMVF9EQUNMIHsNCiAgICAgICAgUEFDTCBEZWZhdWx0RGFjbDsNCn0gVE9L RU5fREVGQVVMVF9EQUNMLCpQVE9LRU5fREVGQVVMVF9EQUNMOw0KdHlwZWRlZiBzdHJ1Y3QgX1RP S0VOX0dST1VQUyB7DQogICAgICAgIERXT1JEIEdyb3VwQ291bnQ7DQogICAgICAgIFNJRF9BTkRf QVRUUklCVVRFUyBHcm91cHNbMV07DQp9IFRPS0VOX0dST1VQUywqUFRPS0VOX0dST1VQUywqTFBU T0tFTl9HUk9VUFM7DQp0eXBlZGVmIHN0cnVjdCBfVE9LRU5fT1dORVIgew0KICAgICAgICBQU0lE IE93bmVyOw0KfSBUT0tFTl9PV05FUiwqUFRPS0VOX09XTkVSOw0KdHlwZWRlZiBzdHJ1Y3QgX1RP S0VOX1BSSU1BUllfR1JPVVAgew0KICAgICAgICBQU0lEIFByaW1hcnlHcm91cDsNCn0gVE9LRU5f UFJJTUFSWV9HUk9VUCwqUFRPS0VOX1BSSU1BUllfR1JPVVA7DQp0eXBlZGVmIHN0cnVjdCBfVE9L RU5fUFJJVklMRUdFUyB7DQogICAgICAgIERXT1JEIFByaXZpbGVnZUNvdW50Ow0KICAgICAgICBM VUlEX0FORF9BVFRSSUJVVEVTIFByaXZpbGVnZXNbMV07DQp9IFRPS0VOX1BSSVZJTEVHRVMsKlBU T0tFTl9QUklWSUxFR0VTLCpMUFRPS0VOX1BSSVZJTEVHRVM7DQp0eXBlZGVmIGVudW0gdGFnVE9L RU5fVFlQRSB7IFRva2VuUHJpbWFyeT0xLFRva2VuSW1wZXJzb25hdGlvbiB9VE9LRU5fVFlQRTsN CnR5cGVkZWYgc3RydWN0IF9UT0tFTl9TVEFUSVNUSUNTIHsNCiAgICAgICAgTFVJRCBUb2tlbklk Ow0KICAgICAgICBMVUlEIEF1dGhlbnRpY2F0aW9uSWQ7DQogICAgICAgIExBUkdFX0lOVEVHRVIg RXhwaXJhdGlvblRpbWU7DQogICAgICAgIFRPS0VOX1RZUEUgVG9rZW5UeXBlOw0KICAgICAgICBT RUNVUklUWV9JTVBFUlNPTkFUSU9OX0xFVkVMIEltcGVyc29uYXRpb25MZXZlbDsNCiAgICAgICAg RFdPUkQgRHluYW1pY0NoYXJnZWQ7DQogICAgICAgIERXT1JEIER5bmFtaWNBdmFpbGFibGU7DQog ICAgICAgIERXT1JEIEdyb3VwQ291bnQ7DQogICAgICAgIERXT1JEIFByaXZpbGVnZUNvdW50Ow0K ICAgICAgICBMVUlEIE1vZGlmaWVkSWQ7DQp9IFRPS0VOX1NUQVRJU1RJQ1M7DQp0eXBlZGVmIHN0 cnVjdCBfVE9LRU5fVVNFUiB7DQogICAgICAgIFNJRF9BTkRfQVRUUklCVVRFUyBVc2VyOw0KfSBU T0tFTl9VU0VSLCAqUFRPS0VOX1VTRVI7DQp0eXBlZGVmIERXT1JEIFNFQ1VSSVRZX0lORk9STUFU SU9OLCpQU0VDVVJJVFlfSU5GT1JNQVRJT047DQp0eXBlZGVmIFdPUkQgU0VDVVJJVFlfREVTQ1JJ UFRPUl9DT05UUk9MLCpQU0VDVVJJVFlfREVTQ1JJUFRPUl9DT05UUk9MOw0KdHlwZWRlZiBzdHJ1 Y3QgX1NFQ1VSSVRZX0RFU0NSSVBUT1Igew0KICAgICAgICBCWVRFIFJldmlzaW9uOw0KICAgICAg ICBCWVRFIFNiejE7DQogICAgICAgIFNFQ1VSSVRZX0RFU0NSSVBUT1JfQ09OVFJPTCBDb250cm9s Ow0KICAgICAgICBQU0lEIE93bmVyOw0KICAgICAgICBQU0lEIEdyb3VwOw0KICAgICAgICBQQUNM IFNhY2w7DQogICAgICAgIFBBQ0wgRGFjbDsNCn0gU0VDVVJJVFlfREVTQ1JJUFRPUiwgKlBTRUNV UklUWV9ERVNDUklQVE9SLCAqUElTRUNVUklUWV9ERVNDUklQVE9SOw0KdHlwZWRlZiBlbnVtIF9U T0tFTl9JTkZPUk1BVElPTl9DTEFTUyB7DQogICAgICAgIFRva2VuVXNlcj0xLFRva2VuR3JvdXBz LFRva2VuUHJpdmlsZWdlcyxUb2tlbk93bmVyLA0KICAgICAgICBUb2tlblByaW1hcnlHcm91cCxU b2tlbkRlZmF1bHREYWNsLFRva2VuU291cmNlLFRva2VuVHlwZSwNCiAgICAgICAgVG9rZW5JbXBl cnNvbmF0aW9uTGV2ZWwsVG9rZW5TdGF0aXN0aWNzLFRva2VuUmVzdHJpY3RlZFNpZHMsDQogICAg ICAgIFRva2VuU2Vzc2lvbklkDQp9IFRPS0VOX0lORk9STUFUSU9OX0NMQVNTOw0KdHlwZWRlZiBl bnVtIF9TSURfTkFNRV9VU0Ugew0KICAgICAgICBTaWRUeXBlVXNlcj0xLFNpZFR5cGVHcm91cCxT aWRUeXBlRG9tYWluLFNpZFR5cGVBbGlhcyxTaWRUeXBlV2VsbEtub3duR3JvdXAsDQogICAgICAg IFNpZFR5cGVEZWxldGVkQWNjb3VudCxTaWRUeXBlSW52YWxpZCxTaWRUeXBlVW5rbm93bg0KfSBT SURfTkFNRV9VU0UsKlBTSURfTkFNRV9VU0U7DQp0eXBlZGVmIHN0cnVjdCBfUVVPVEFfTElNSVRT IHsNCiAgICAgICAgU0laRV9UIFBhZ2VkUG9vbExpbWl0Ow0KICAgICAgICBTSVpFX1QgTm9uUGFn ZWRQb29sTGltaXQ7DQogICAgICAgIFNJWkVfVCBNaW5pbXVtV29ya2luZ1NldFNpemU7DQogICAg ICAgIFNJWkVfVCBNYXhpbXVtV29ya2luZ1NldFNpemU7DQogICAgICAgIFNJWkVfVCBQYWdlZmls ZUxpbWl0Ow0KICAgICAgICBMQVJHRV9JTlRFR0VSIFRpbWVMaW1pdDsNCn0gUVVPVEFfTElNSVRT LCpQUVVPVEFfTElNSVRTOw0KdHlwZWRlZiBzdHJ1Y3QgX0lPX0NPVU5URVJTIHsNCiAgICAgICAg VUxPTkdMT05HIFJlYWRPcGVyYXRpb25Db3VudDsNCiAgICAgICAgVUxPTkdMT05HIFdyaXRlT3Bl cmF0aW9uQ291bnQ7DQogICAgICAgIFVMT05HTE9ORyBPdGhlck9wZXJhdGlvbkNvdW50Ow0KICAg ICAgICBVTE9OR0xPTkcgUmVhZFRyYW5zZmVyQ291bnQ7DQogICAgICAgIFVMT05HTE9ORyBXcml0 ZVRyYW5zZmVyQ291bnQ7DQogICAgICAgIFVMT05HTE9ORyBPdGhlclRyYW5zZmVyQ291bnQ7DQp9 IElPX0NPVU5URVJTLCAqUElPX0NPVU5URVJTOw0KdHlwZWRlZiBzdHJ1Y3QgX0ZJTEVfTk9USUZZ X0lORk9STUFUSU9OIHsNCiAgICAgICAgRFdPUkQgTmV4dEVudHJ5T2Zmc2V0Ow0KICAgICAgICBE V09SRCBBY3Rpb247DQogICAgICAgIERXT1JEIEZpbGVOYW1lTGVuZ3RoOw0KICAgICAgICBXQ0hB UiBGaWxlTmFtZVsxXTsNCn0gRklMRV9OT1RJRllfSU5GT1JNQVRJT04sKlBGSUxFX05PVElGWV9J TkZPUk1BVElPTjsNCnR5cGVkZWYgc3RydWN0IF9UQVBFX0VSQVNFIHsNCiAgICAgICAgRFdPUkQg VHlwZTsNCiAgICAgICAgQk9PTEVBTiBJbW1lZGlhdGU7DQp9IFRBUEVfRVJBU0UsKlBUQVBFX0VS QVNFOw0KdHlwZWRlZiBzdHJ1Y3QgX1RBUEVfR0VUX0RSSVZFX1BBUkFNRVRFUlMgew0KICAgICAg ICBCT09MRUFOIEVDQzsNCiAgICAgICAgQk9PTEVBTiBDb21wcmVzc2lvbjsNCiAgICAgICAgQk9P TEVBTiBEYXRhUGFkZGluZzsNCiAgICAgICAgQk9PTEVBTiBSZXBvcnRTZXRtYXJrczsNCiAgICAg ICAgRFdPUkQgRGVmYXVsdEJsb2NrU2l6ZTsNCiAgICAgICAgRFdPUkQgTWF4aW11bUJsb2NrU2l6 ZTsNCiAgICAgICAgRFdPUkQgTWluaW11bUJsb2NrU2l6ZTsNCiAgICAgICAgRFdPUkQgTWF4aW11 bVBhcnRpdGlvbkNvdW50Ow0KICAgICAgICBEV09SRCBGZWF0dXJlc0xvdzsNCiAgICAgICAgRFdP UkQgRmVhdHVyZXNIaWdoOw0KICAgICAgICBEV09SRCBFT1RXYXJuaW5nWm9uZVNpemU7DQp9IFRB UEVfR0VUX0RSSVZFX1BBUkFNRVRFUlMsKlBUQVBFX0dFVF9EUklWRV9QQVJBTUVURVJTOw0KdHlw ZWRlZiBzdHJ1Y3QgX1RBUEVfR0VUX01FRElBX1BBUkFNRVRFUlMgew0KICAgICAgICBMQVJHRV9J TlRFR0VSIENhcGFjaXR5Ow0KICAgICAgICBMQVJHRV9JTlRFR0VSIFJlbWFpbmluZzsNCiAgICAg ICAgRFdPUkQgQmxvY2tTaXplOw0KICAgICAgICBEV09SRCBQYXJ0aXRpb25Db3VudDsNCiAgICAg ICAgQk9PTEVBTiBXcml0ZVByb3RlY3RlZDsNCn0gVEFQRV9HRVRfTUVESUFfUEFSQU1FVEVSUywq UFRBUEVfR0VUX01FRElBX1BBUkFNRVRFUlM7DQp0eXBlZGVmIHN0cnVjdCBfVEFQRV9HRVRfUE9T SVRJT04gew0KICAgICAgICBVTE9ORyBUeXBlOw0KICAgICAgICBVTE9ORyBQYXJ0aXRpb247DQog ICAgICAgIFVMT05HIE9mZnNldExvdzsNCiAgICAgICAgVUxPTkcgT2Zmc2V0SGlnaDsNCn0gVEFQ RV9HRVRfUE9TSVRJT04sKlBUQVBFX0dFVF9QT1NJVElPTjsNCnR5cGVkZWYgc3RydWN0IF9UQVBF X1BSRVBBUkUgew0KICAgICAgICBEV09SRCBPcGVyYXRpb247DQogICAgICAgIEJPT0xFQU4gSW1t ZWRpYXRlOw0KfSBUQVBFX1BSRVBBUkUsKlBUQVBFX1BSRVBBUkU7DQp0eXBlZGVmIHN0cnVjdCBf VEFQRV9TRVRfRFJJVkVfUEFSQU1FVEVSUyB7DQogICAgICAgIEJPT0xFQU4gRUNDOw0KICAgICAg ICBCT09MRUFOIENvbXByZXNzaW9uOw0KICAgICAgICBCT09MRUFOIERhdGFQYWRkaW5nOw0KICAg ICAgICBCT09MRUFOIFJlcG9ydFNldG1hcmtzOw0KICAgICAgICBVTE9ORyBFT1RXYXJuaW5nWm9u ZVNpemU7DQp9IFRBUEVfU0VUX0RSSVZFX1BBUkFNRVRFUlMsKlBUQVBFX1NFVF9EUklWRV9QQVJB TUVURVJTOw0KdHlwZWRlZiBzdHJ1Y3QgX1RBUEVfU0VUX01FRElBX1BBUkFNRVRFUlMgew0KICAg ICAgICBVTE9ORyBCbG9ja1NpemU7DQp9IFRBUEVfU0VUX01FRElBX1BBUkFNRVRFUlMsKlBUQVBF X1NFVF9NRURJQV9QQVJBTUVURVJTOw0KdHlwZWRlZiBzdHJ1Y3QgX1RBUEVfU0VUX1BPU0lUSU9O IHsNCiAgICAgICAgRFdPUkQgTWV0aG9kOw0KICAgICAgICBEV09SRCBQYXJ0aXRpb247DQogICAg ICAgIExBUkdFX0lOVEVHRVIgT2Zmc2V0Ow0KICAgICAgICBCT09MRUFOIEltbWVkaWF0ZTsNCn0g VEFQRV9TRVRfUE9TSVRJT04sKlBUQVBFX1NFVF9QT1NJVElPTjsNCnR5cGVkZWYgc3RydWN0IF9U QVBFX1dSSVRFX01BUktTIHsNCiAgICAgICAgRFdPUkQgVHlwZTsNCiAgICAgICAgRFdPUkQgQ291 bnQ7DQogICAgICAgIEJPT0xFQU4gSW1tZWRpYXRlOw0KfSBUQVBFX1dSSVRFX01BUktTLCpQVEFQ RV9XUklURV9NQVJLUzsNCnR5cGVkZWYgc3RydWN0IF9UQVBFX0NSRUFURV9QQVJUSVRJT04gew0K ICAgICAgICBEV09SRCBNZXRob2Q7DQogICAgICAgIERXT1JEIENvdW50Ow0KICAgICAgICBEV09S RCBTaXplOw0KfSBUQVBFX0NSRUFURV9QQVJUSVRJT04sKlBUQVBFX0NSRUFURV9QQVJUSVRJT047 DQp0eXBlZGVmIHN0cnVjdCBfTUVNT1JZX0JBU0lDX0lORk9STUFUSU9OIHsNCiAgICAgICAgUFZP SUQgQmFzZUFkZHJlc3M7DQogICAgICAgIFBWT0lEIEFsbG9jYXRpb25CYXNlOw0KICAgICAgICBE V09SRCBBbGxvY2F0aW9uUHJvdGVjdDsNCiAgICAgICAgRFdPUkQgUmVnaW9uU2l6ZTsNCiAgICAg ICAgRFdPUkQgU3RhdGU7DQogICAgICAgIERXT1JEIFByb3RlY3Q7DQogICAgICAgIERXT1JEIFR5 cGU7DQp9IE1FTU9SWV9CQVNJQ19JTkZPUk1BVElPTiwqUE1FTU9SWV9CQVNJQ19JTkZPUk1BVElP TjsNCnR5cGVkZWYgc3RydWN0IF9NRVNTQUdFX1JFU09VUkNFX0VOVFJZIHsNCiAgICAgICAgV09S RCBMZW5ndGg7DQogICAgICAgIFdPUkQgRmxhZ3M7DQogICAgICAgIEJZVEUgVGV4dFsxXTsNCn0g TUVTU0FHRV9SRVNPVVJDRV9FTlRSWSwqUE1FU1NBR0VfUkVTT1VSQ0VfRU5UUlk7DQp0eXBlZGVm IHN0cnVjdCBfTUVTU0FHRV9SRVNPVVJDRV9CTE9DSyB7DQogICAgICAgIERXT1JEIExvd0lkOw0K ICAgICAgICBEV09SRCBIaWdoSWQ7DQogICAgICAgIERXT1JEIE9mZnNldFRvRW50cmllczsNCn0g TUVTU0FHRV9SRVNPVVJDRV9CTE9DSywqUE1FU1NBR0VfUkVTT1VSQ0VfQkxPQ0s7DQp0eXBlZGVm IHN0cnVjdCBfTUVTU0FHRV9SRVNPVVJDRV9EQVRBIHsNCiAgICAgICAgRFdPUkQgTnVtYmVyT2ZC bG9ja3M7DQogICAgICAgIE1FU1NBR0VfUkVTT1VSQ0VfQkxPQ0sgQmxvY2tzWzFdOw0KfSBNRVNT QUdFX1JFU09VUkNFX0RBVEEsKlBNRVNTQUdFX1JFU09VUkNFX0RBVEE7DQp0eXBlZGVmIHN0cnVj dCBfTElTVF9FTlRSWSB7DQogICAgICAgIHN0cnVjdCBfTElTVF9FTlRSWSAqRmxpbms7DQogICAg ICAgIHN0cnVjdCBfTElTVF9FTlRSWSAqQmxpbms7DQp9IExJU1RfRU5UUlksKlBMSVNUX0VOVFJZ Ow0KdHlwZWRlZiBzdHJ1Y3QgX1JUTF9DUklUSUNBTF9TRUNUSU9OX0RFQlVHIHsNCiAgICAgICAg V09SRCBUeXBlOw0KICAgICAgICBXT1JEIENyZWF0b3JCYWNrVHJhY2VJbmRleDsNCiAgICAgICAg c3RydWN0IF9SVExfQ1JJVElDQUxfU0VDVElPTiAqQ3JpdGljYWxTZWN0aW9uOw0KICAgICAgICBM SVNUX0VOVFJZIFByb2Nlc3NMb2Nrc0xpc3Q7DQogICAgICAgIERXT1JEIEVudHJ5Q291bnQ7DQog ICAgICAgIERXT1JEIENvbnRlbnRpb25Db3VudDsNCiAgICAgICAgRFdPUkQgU3BhcmVbMl07DQp9 IFJUTF9DUklUSUNBTF9TRUNUSU9OX0RFQlVHLCpQUlRMX0NSSVRJQ0FMX1NFQ1RJT05fREVCVUc7 DQp0eXBlZGVmIHN0cnVjdCBfUlRMX0NSSVRJQ0FMX1NFQ1RJT04gew0KICAgICAgICBQUlRMX0NS SVRJQ0FMX1NFQ1RJT05fREVCVUcgRGVidWdJbmZvOw0KICAgICAgICBMT05HIExvY2tDb3VudDsN CiAgICAgICAgTE9ORyBSZWN1cnNpb25Db3VudDsNCiAgICAgICAgSEFORExFIE93bmluZ1RocmVh ZDsNCiAgICAgICAgSEFORExFIExvY2tTZW1hcGhvcmU7DQogICAgICAgIERXT1JEIFJlc2VydmVk Ow0KfSBSVExfQ1JJVElDQUxfU0VDVElPTiwqUFJUTF9DUklUSUNBTF9TRUNUSU9OOw0KdHlwZWRl ZiBzdHJ1Y3QgX0VWRU5UTE9HUkVDT1JEIHsNCiAgICAgICAgRFdPUkQgTGVuZ3RoOw0KICAgICAg ICBEV09SRCBSZXNlcnZlZDsNCiAgICAgICAgRFdPUkQgUmVjb3JkTnVtYmVyOw0KICAgICAgICBE V09SRCBUaW1lR2VuZXJhdGVkOw0KICAgICAgICBEV09SRCBUaW1lV3JpdHRlbjsNCiAgICAgICAg RFdPUkQgRXZlbnRJRDsNCiAgICAgICAgV09SRCBFdmVudFR5cGU7DQogICAgICAgIFdPUkQgTnVt U3RyaW5nczsNCiAgICAgICAgV09SRCBFdmVudENhdGVnb3J5Ow0KICAgICAgICBXT1JEIFJlc2Vy dmVkRmxhZ3M7DQogICAgICAgIERXT1JEIENsb3NpbmdSZWNvcmROdW1iZXI7DQogICAgICAgIERX T1JEIFN0cmluZ09mZnNldDsNCiAgICAgICAgRFdPUkQgVXNlclNpZExlbmd0aDsNCiAgICAgICAg RFdPUkQgVXNlclNpZE9mZnNldDsNCiAgICAgICAgRFdPUkQgRGF0YUxlbmd0aDsNCiAgICAgICAg RFdPUkQgRGF0YU9mZnNldDsNCn0gRVZFTlRMT0dSRUNPUkQsKlBFVkVOVExPR1JFQ09SRDsNCiNw cmFnbWEgcGFjayhwdXNoLDIpDQp0eXBlZGVmIHN0cnVjdCBfSU1BR0VfVlhEX0hFQURFUiB7DQog ICAgICAgIFdPUkQgZTMyX21hZ2ljOw0KICAgICAgICBCWVRFIGUzMl9ib3JkZXI7DQogICAgICAg IEJZVEUgZTMyX3dvcmRlcjsNCiAgICAgICAgRFdPUkQgZTMyX2xldmVsOw0KICAgICAgICBXT1JE IGUzMl9jcHU7DQogICAgICAgIFdPUkQgZTMyX29zOw0KICAgICAgICBEV09SRCBlMzJfdmVyOw0K ICAgICAgICBEV09SRCBlMzJfbWZsYWdzOw0KICAgICAgICBEV09SRCBlMzJfbXBhZ2VzOw0KICAg ICAgICBEV09SRCBlMzJfc3RhcnRvYmo7DQogICAgICAgIERXT1JEIGUzMl9laXA7DQogICAgICAg IERXT1JEIGUzMl9zdGFja29iajsNCiAgICAgICAgRFdPUkQgZTMyX2VzcDsNCiAgICAgICAgRFdP UkQgZTMyX3BhZ2VzaXplOw0KICAgICAgICBEV09SRCBlMzJfbGFzdHBhZ2VzaXplOw0KICAgICAg ICBEV09SRCBlMzJfZml4dXBzaXplOw0KICAgICAgICBEV09SRCBlMzJfZml4dXBzdW07DQogICAg ICAgIERXT1JEIGUzMl9sZHJzaXplOw0KICAgICAgICBEV09SRCBlMzJfbGRyc3VtOw0KICAgICAg ICBEV09SRCBlMzJfb2JqdGFiOw0KICAgICAgICBEV09SRCBlMzJfb2JqY250Ow0KICAgICAgICBE V09SRCBlMzJfb2JqbWFwOw0KICAgICAgICBEV09SRCBlMzJfaXRlcm1hcDsNCiAgICAgICAgRFdP UkQgZTMyX3JzcmN0YWI7DQogICAgICAgIERXT1JEIGUzMl9yc3JjY250Ow0KICAgICAgICBEV09S RCBlMzJfcmVzdGFiOw0KICAgICAgICBEV09SRCBlMzJfZW50dGFiOw0KICAgICAgICBEV09SRCBl MzJfZGlydGFiOw0KICAgICAgICBEV09SRCBlMzJfZGlyY250Ow0KICAgICAgICBEV09SRCBlMzJf ZnBhZ2V0YWI7DQogICAgICAgIERXT1JEIGUzMl9mcmVjdGFiOw0KICAgICAgICBEV09SRCBlMzJf aW1wbW9kOw0KICAgICAgICBEV09SRCBlMzJfaW1wbW9kY250Ow0KICAgICAgICBEV09SRCBlMzJf aW1wcHJvYzsNCiAgICAgICAgRFdPUkQgZTMyX3BhZ2VzdW07DQogICAgICAgIERXT1JEIGUzMl9k YXRhcGFnZTsNCiAgICAgICAgRFdPUkQgZTMyX3ByZWxvYWQ7DQogICAgICAgIERXT1JEIGUzMl9u cmVzdGFiOw0KICAgICAgICBEV09SRCBlMzJfY2JucmVzdGFiOw0KICAgICAgICBEV09SRCBlMzJf bnJlc3N1bTsNCiAgICAgICAgRFdPUkQgZTMyX2F1dG9kYXRhOw0KICAgICAgICBEV09SRCBlMzJf ZGVidWdpbmZvOw0KICAgICAgICBEV09SRCBlMzJfZGVidWdsZW47DQogICAgICAgIERXT1JEIGUz Ml9pbnN0cHJlbG9hZDsNCiAgICAgICAgRFdPUkQgZTMyX2luc3RkZW1hbmQ7DQogICAgICAgIERX T1JEIGUzMl9oZWFwc2l6ZTsNCiAgICAgICAgQllURSBlMzJfcmVzM1sxMl07DQogICAgICAgIERX T1JEIGUzMl93aW5yZXNvZmY7DQogICAgICAgIERXT1JEIGUzMl93aW5yZXNsZW47DQogICAgICAg IFdPUkQgZTMyX2RldmlkOw0KICAgICAgICBXT1JEIGUzMl9kZGt2ZXI7DQp9IElNQUdFX1ZYRF9I RUFERVIsKlBJTUFHRV9WWERfSEVBREVSOw0KI3ByYWdtYSBwYWNrKHBvcCkNCiNwcmFnbWEgcGFj ayhwdXNoLDQpDQp0eXBlZGVmIHN0cnVjdCBfSU1BR0VfRklMRV9IRUFERVIgew0KICAgICAgICBX T1JEIE1hY2hpbmU7DQogICAgICAgIFdPUkQgTnVtYmVyT2ZTZWN0aW9uczsNCiAgICAgICAgRFdP UkQgVGltZURhdGVTdGFtcDsNCiAgICAgICAgRFdPUkQgUG9pbnRlclRvU3ltYm9sVGFibGU7DQog ICAgICAgIERXT1JEIE51bWJlck9mU3ltYm9sczsNCiAgICAgICAgV09SRCBTaXplT2ZPcHRpb25h bEhlYWRlcjsNCiAgICAgICAgV09SRCBDaGFyYWN0ZXJpc3RpY3M7DQp9IElNQUdFX0ZJTEVfSEVB REVSLCAqUElNQUdFX0ZJTEVfSEVBREVSOw0KdHlwZWRlZiBzdHJ1Y3QgX0lNQUdFX0RBVEFfRElS RUNUT1JZIHsNCiAgICAgICAgRFdPUkQgVmlydHVhbEFkZHJlc3M7DQogICAgICAgIERXT1JEIFNp emU7DQp9IElNQUdFX0RBVEFfRElSRUNUT1JZLCpQSU1BR0VfREFUQV9ESVJFQ1RPUlk7DQp0eXBl ZGVmIHN0cnVjdCBfSU1BR0VfT1BUSU9OQUxfSEVBREVSIHsNCiAgICAgICAgV09SRCBNYWdpYzsN CiAgICAgICAgQllURSBNYWpvckxpbmtlclZlcnNpb247DQogICAgICAgIEJZVEUgTWlub3JMaW5r ZXJWZXJzaW9uOw0KICAgICAgICBEV09SRCBTaXplT2ZDb2RlOw0KICAgICAgICBEV09SRCBTaXpl T2ZJbml0aWFsaXplZERhdGE7DQogICAgICAgIERXT1JEIFNpemVPZlVuaW5pdGlhbGl6ZWREYXRh Ow0KICAgICAgICBEV09SRCBBZGRyZXNzT2ZFbnRyeVBvaW50Ow0KICAgICAgICBEV09SRCBCYXNl T2ZDb2RlOw0KICAgICAgICBEV09SRCBCYXNlT2ZEYXRhOw0KICAgICAgICBEV09SRCBJbWFnZUJh c2U7DQogICAgICAgIERXT1JEIFNlY3Rpb25BbGlnbm1lbnQ7DQogICAgICAgIERXT1JEIEZpbGVB bGlnbm1lbnQ7DQogICAgICAgIFdPUkQgTWFqb3JPcGVyYXRpbmdTeXN0ZW1WZXJzaW9uOw0KICAg ICAgICBXT1JEIE1pbm9yT3BlcmF0aW5nU3lzdGVtVmVyc2lvbjsNCiAgICAgICAgV09SRCBNYWpv ckltYWdlVmVyc2lvbjsNCiAgICAgICAgV09SRCBNaW5vckltYWdlVmVyc2lvbjsNCiAgICAgICAg V09SRCBNYWpvclN1YnN5c3RlbVZlcnNpb247DQogICAgICAgIFdPUkQgTWlub3JTdWJzeXN0ZW1W ZXJzaW9uOw0KICAgICAgICBEV09SRCBSZXNlcnZlZDE7DQogICAgICAgIERXT1JEIFNpemVPZklt YWdlOw0KICAgICAgICBEV09SRCBTaXplT2ZIZWFkZXJzOw0KICAgICAgICBEV09SRCBDaGVja1N1 bTsNCiAgICAgICAgV09SRCBTdWJzeXN0ZW07DQogICAgICAgIFdPUkQgRGxsQ2hhcmFjdGVyaXN0 aWNzOw0KICAgICAgICBEV09SRCBTaXplT2ZTdGFja1Jlc2VydmU7DQogICAgICAgIERXT1JEIFNp emVPZlN0YWNrQ29tbWl0Ow0KICAgICAgICBEV09SRCBTaXplT2ZIZWFwUmVzZXJ2ZTsNCiAgICAg ICAgRFdPUkQgU2l6ZU9mSGVhcENvbW1pdDsNCiAgICAgICAgRFdPUkQgTG9hZGVyRmxhZ3M7DQog ICAgICAgIERXT1JEIE51bWJlck9mUnZhQW5kU2l6ZXM7DQogICAgICAgIElNQUdFX0RBVEFfRElS RUNUT1JZIERhdGFEaXJlY3RvcnlbMTZdOw0KfSBJTUFHRV9PUFRJT05BTF9IRUFERVIsKlBJTUFH RV9PUFRJT05BTF9IRUFERVI7DQp0eXBlZGVmIHN0cnVjdCBfSU1BR0VfUk9NX09QVElPTkFMX0hF QURFUiB7DQogICAgICAgIFdPUkQgTWFnaWM7DQogICAgICAgIEJZVEUgTWFqb3JMaW5rZXJWZXJz aW9uOw0KICAgICAgICBCWVRFIE1pbm9yTGlua2VyVmVyc2lvbjsNCiAgICAgICAgRFdPUkQgU2l6 ZU9mQ29kZTsNCiAgICAgICAgRFdPUkQgU2l6ZU9mSW5pdGlhbGl6ZWREYXRhOw0KICAgICAgICBE V09SRCBTaXplT2ZVbmluaXRpYWxpemVkRGF0YTsNCiAgICAgICAgRFdPUkQgQWRkcmVzc09mRW50 cnlQb2ludDsNCiAgICAgICAgRFdPUkQgQmFzZU9mQ29kZTsNCiAgICAgICAgRFdPUkQgQmFzZU9m RGF0YTsNCiAgICAgICAgRFdPUkQgQmFzZU9mQnNzOw0KICAgICAgICBEV09SRCBHcHJNYXNrOw0K ICAgICAgICBEV09SRCBDcHJNYXNrWzRdOw0KICAgICAgICBEV09SRCBHcFZhbHVlOw0KfSBJTUFH RV9ST01fT1BUSU9OQUxfSEVBREVSLCpQSU1BR0VfUk9NX09QVElPTkFMX0hFQURFUjsNCiNwcmFn bWEgcGFjayhwb3ApDQojcHJhZ21hIHBhY2socHVzaCwyKQ0KdHlwZWRlZiBzdHJ1Y3QgX0lNQUdF X0RPU19IRUFERVIgew0KICAgICAgICBXT1JEIGVfbWFnaWM7DQogICAgICAgIFdPUkQgZV9jYmxw Ow0KICAgICAgICBXT1JEIGVfY3A7DQogICAgICAgIFdPUkQgZV9jcmxjOw0KICAgICAgICBXT1JE IGVfY3BhcmhkcjsNCiAgICAgICAgV09SRCBlX21pbmFsbG9jOw0KICAgICAgICBXT1JEIGVfbWF4 YWxsb2M7DQogICAgICAgIFdPUkQgZV9zczsNCiAgICAgICAgV09SRCBlX3NwOw0KICAgICAgICBX T1JEIGVfY3N1bTsNCiAgICAgICAgV09SRCBlX2lwOw0KICAgICAgICBXT1JEIGVfY3M7DQogICAg ICAgIFdPUkQgZV9sZmFybGM7DQogICAgICAgIFdPUkQgZV9vdm5vOw0KICAgICAgICBXT1JEIGVf cmVzWzRdOw0KICAgICAgICBXT1JEIGVfb2VtaWQ7DQogICAgICAgIFdPUkQgZV9vZW1pbmZvOw0K ICAgICAgICBXT1JEIGVfcmVzMlsxMF07DQogICAgICAgIExPTkcgZV9sZmFuZXc7DQp9IElNQUdF X0RPU19IRUFERVIsKlBJTUFHRV9ET1NfSEVBREVSOw0KdHlwZWRlZiBzdHJ1Y3QgX0lNQUdFX09T Ml9IRUFERVIgew0KICAgICAgICBXT1JEIG5lX21hZ2ljOw0KICAgICAgICBDSEFSIG5lX3ZlcjsN CiAgICAgICAgQ0hBUiBuZV9yZXY7DQogICAgICAgIFdPUkQgbmVfZW50dGFiOw0KICAgICAgICBX T1JEIG5lX2NiZW50dGFiOw0KICAgICAgICBMT05HIG5lX2NyYzsNCiAgICAgICAgV09SRCBuZV9m bGFnczsNCiAgICAgICAgV09SRCBuZV9hdXRvZGF0YTsNCiAgICAgICAgV09SRCBuZV9oZWFwOw0K ICAgICAgICBXT1JEIG5lX3N0YWNrOw0KICAgICAgICBMT05HIG5lX2NzaXA7DQogICAgICAgIExP TkcgbmVfc3NzcDsNCiAgICAgICAgV09SRCBuZV9jc2VnOw0KICAgICAgICBXT1JEIG5lX2Ntb2Q7 DQogICAgICAgIFdPUkQgbmVfY2JucmVzdGFiOw0KICAgICAgICBXT1JEIG5lX3NlZ3RhYjsNCiAg ICAgICAgV09SRCBuZV9yc3JjdGFiOw0KICAgICAgICBXT1JEIG5lX3Jlc3RhYjsNCiAgICAgICAg V09SRCBuZV9tb2R0YWI7DQogICAgICAgIFdPUkQgbmVfaW1wdGFiOw0KICAgICAgICBMT05HIG5l X25yZXN0YWI7DQogICAgICAgIFdPUkQgbmVfY21vdmVudDsNCiAgICAgICAgV09SRCBuZV9hbGln bjsNCiAgICAgICAgV09SRCBuZV9jcmVzOw0KICAgICAgICBCWVRFIG5lX2V4ZXR5cDsNCiAgICAg ICAgQllURSBuZV9mbGFnc290aGVyczsNCiAgICAgICAgV09SRCBuZV9wcmV0dGh1bmtzOw0KICAg ICAgICBXT1JEIG5lX3BzZWdyZWZieXRlczsNCiAgICAgICAgV09SRCBuZV9zd2FwYXJlYTsNCiAg ICAgICAgV09SRCBuZV9leHB2ZXI7DQp9IElNQUdFX09TMl9IRUFERVIsKlBJTUFHRV9PUzJfSEVB REVSOw0KI3ByYWdtYSBwYWNrKHBvcCkNCiNwcmFnbWEgcGFjayhwdXNoLDQpDQp0eXBlZGVmIHN0 cnVjdCBfSU1BR0VfTlRfSEVBREVSUyB7DQogICAgICAgIERXT1JEIFNpZ25hdHVyZTsNCiAgICAg ICAgSU1BR0VfRklMRV9IRUFERVIgRmlsZUhlYWRlcjsNCiAgICAgICAgSU1BR0VfT1BUSU9OQUxf SEVBREVSIE9wdGlvbmFsSGVhZGVyOw0KfSBJTUFHRV9OVF9IRUFERVJTLCpQSU1BR0VfTlRfSEVB REVSUzsNCnR5cGVkZWYgc3RydWN0IF9JTUFHRV9ST01fSEVBREVSUyB7DQogICAgICAgIElNQUdF X0ZJTEVfSEVBREVSIEZpbGVIZWFkZXI7DQogICAgICAgIElNQUdFX1JPTV9PUFRJT05BTF9IRUFE RVIgT3B0aW9uYWxIZWFkZXI7DQp9IElNQUdFX1JPTV9IRUFERVJTLCpQSU1BR0VfUk9NX0hFQURF UlM7DQp0eXBlZGVmIHN0cnVjdCBfSU1BR0VfU0VDVElPTl9IRUFERVIgew0KICAgICAgICBCWVRF IE5hbWVbOF07DQogICAgICAgIHVuaW9uIHsNCiAgICAgICAgICAgICAgICBEV09SRCBQaHlzaWNh bEFkZHJlc3M7DQogICAgICAgICAgICAgICAgRFdPUkQgVmlydHVhbFNpemU7DQogICAgICAgIH0g TWlzYzsNCiAgICAgICAgRFdPUkQgVmlydHVhbEFkZHJlc3M7DQogICAgICAgIERXT1JEIFNpemVP ZlJhd0RhdGE7DQogICAgICAgIERXT1JEIFBvaW50ZXJUb1Jhd0RhdGE7DQogICAgICAgIERXT1JE IFBvaW50ZXJUb1JlbG9jYXRpb25zOw0KICAgICAgICBEV09SRCBQb2ludGVyVG9MaW5lbnVtYmVy czsNCiAgICAgICAgV09SRCBOdW1iZXJPZlJlbG9jYXRpb25zOw0KICAgICAgICBXT1JEIE51bWJl ck9mTGluZW51bWJlcnM7DQogICAgICAgIERXT1JEIENoYXJhY3RlcmlzdGljczsNCn0gSU1BR0Vf U0VDVElPTl9IRUFERVIsKlBJTUFHRV9TRUNUSU9OX0hFQURFUjsNCiNwcmFnbWEgcGFjayhwb3Ap DQojcHJhZ21hIHBhY2socHVzaCwyKQ0KdHlwZWRlZiBzdHJ1Y3QgX0lNQUdFX1NZTUJPTCB7DQog ICAgICAgIHVuaW9uIHsNCiAgICAgICAgICAgICAgICBCWVRFIFNob3J0TmFtZVs4XTsNCiAgICAg ICAgICAgICAgICBzdHJ1Y3Qgew0KICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgU2hvcnQ7 DQogICAgICAgICAgICAgICAgICAgICAgICBEV09SRCBMb25nOw0KICAgICAgICAgICAgICAgIH0g TmFtZTsNCiAgICAgICAgICAgICAgICBQQllURSBMb25nTmFtZVsyXTsNCiAgICAgICAgfSBOOw0K ICAgICAgICBEV09SRCBWYWx1ZTsNCiAgICAgICAgU0hPUlQgU2VjdGlvbk51bWJlcjsNCiAgICAg ICAgV09SRCBUeXBlOw0KICAgICAgICBCWVRFIFN0b3JhZ2VDbGFzczsNCiAgICAgICAgQllURSBO dW1iZXJPZkF1eFN5bWJvbHM7DQp9IElNQUdFX1NZTUJPTCwqUElNQUdFX1NZTUJPTDsNCnR5cGVk ZWYgdW5pb24gX0lNQUdFX0FVWF9TWU1CT0wgew0KICAgICAgICBzdHJ1Y3Qgew0KICAgICAgICAg ICAgICAgIERXT1JEIFRhZ0luZGV4Ow0KICAgICAgICAgICAgICAgIHVuaW9uIHsNCiAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFdPUkQgTGluZW51bWJlcjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09SRCBT aXplOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBMblN6Ow0KICAgICAgICAgICAgICAgICAg ICAgICAgRFdPUkQgVG90YWxTaXplOw0KICAgICAgICAgICAgICAgIH0gTWlzYzsNCiAgICAgICAg ICAgICAgICB1bmlvbiB7DQogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgew0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCBQb2ludGVyVG9MaW5lbnVtYmVyOw0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCBQb2ludGVyVG9OZXh0RnVuY3Rpb247 DQogICAgICAgICAgICAgICAgICAgICAgICB9IEZ1bmN0aW9uOw0KICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV09SRCBEaW1l bnNpb25bNF07DQogICAgICAgICAgICAgICAgICAgICAgICB9IEFycmF5Ow0KICAgICAgICAgICAg ICAgIH0gRmNuQXJ5Ow0KICAgICAgICAgICAgICAgIFdPUkQgVHZJbmRleDsNCiAgICAgICAgfSBT eW07DQogICAgICAgIHN0cnVjdCB7DQogICAgICAgICAgICAgICAgQllURSBOYW1lWzE4XTsNCiAg ICAgICAgfSBGaWxlOw0KICAgICAgICBzdHJ1Y3Qgew0KICAgICAgICAgICAgICAgIERXT1JEIExl bmd0aDsNCiAgICAgICAgICAgICAgICBXT1JEIE51bWJlck9mUmVsb2NhdGlvbnM7DQogICAgICAg ICAgICAgICAgV09SRCBOdW1iZXJPZkxpbmVudW1iZXJzOw0KICAgICAgICAgICAgICAgIERXT1JE IENoZWNrU3VtOw0KICAgICAgICAgICAgICAgIFNIT1JUIE51bWJlcjsNCiAgICAgICAgICAgICAg ICBCWVRFIFNlbGVjdGlvbjsNCiAgICAgICAgfSBTZWN0aW9uOw0KfSBJTUFHRV9BVVhfU1lNQk9M LCpQSU1BR0VfQVVYX1NZTUJPTDsNCnR5cGVkZWYgc3RydWN0IF9JTUFHRV9DT0ZGX1NZTUJPTFNf SEVBREVSIHsNCiAgICAgICAgRFdPUkQgTnVtYmVyT2ZTeW1ib2xzOw0KICAgICAgICBEV09SRCBM dmFUb0ZpcnN0U3ltYm9sOw0KICAgICAgICBEV09SRCBOdW1iZXJPZkxpbmVudW1iZXJzOw0KICAg ICAgICBEV09SRCBMdmFUb0ZpcnN0TGluZW51bWJlcjsNCiAgICAgICAgRFdPUkQgUnZhVG9GaXJz dEJ5dGVPZkNvZGU7DQogICAgICAgIERXT1JEIFJ2YVRvTGFzdEJ5dGVPZkNvZGU7DQogICAgICAg IERXT1JEIFJ2YVRvRmlyc3RCeXRlT2ZEYXRhOw0KICAgICAgICBEV09SRCBSdmFUb0xhc3RCeXRl T2ZEYXRhOw0KfSBJTUFHRV9DT0ZGX1NZTUJPTFNfSEVBREVSLCpQSU1BR0VfQ09GRl9TWU1CT0xT X0hFQURFUjsNCnR5cGVkZWYgc3RydWN0IF9JTUFHRV9SRUxPQ0FUSU9OIHsNCiAgICAgICAgX19l eHRlbnNpb25fXyB1bmlvbiB7DQogICAgICAgICAgICAgICAgRFdPUkQgVmlydHVhbEFkZHJlc3M7 DQogICAgICAgICAgICAgICAgRFdPUkQgUmVsb2NDb3VudDsNCiAgICAgICAgfSA7DQogICAgICAg IERXT1JEIFN5bWJvbFRhYmxlSW5kZXg7DQogICAgICAgIFdPUkQgVHlwZTsNCn0gSU1BR0VfUkVM T0NBVElPTiwqUElNQUdFX1JFTE9DQVRJT047DQojcHJhZ21hIHBhY2socG9wKQ0KI3ByYWdtYSBw YWNrKHB1c2gsNCkNCnR5cGVkZWYgc3RydWN0IF9JTUFHRV9CQVNFX1JFTE9DQVRJT04gew0KICAg ICAgICBEV09SRCBWaXJ0dWFsQWRkcmVzczsNCiAgICAgICAgRFdPUkQgU2l6ZU9mQmxvY2s7DQp9 IElNQUdFX0JBU0VfUkVMT0NBVElPTiwqUElNQUdFX0JBU0VfUkVMT0NBVElPTjsNCiNwcmFnbWEg cGFjayhwb3ApDQojcHJhZ21hIHBhY2socHVzaCwyKQ0KdHlwZWRlZiBzdHJ1Y3QgX0lNQUdFX0xJ TkVOVU1CRVIgew0KICAgICAgICB1bmlvbiB7DQogICAgICAgICAgICAgICAgRFdPUkQgU3ltYm9s VGFibGVJbmRleDsNCiAgICAgICAgICAgICAgICBEV09SRCBWaXJ0dWFsQWRkcmVzczsNCiAgICAg ICAgfSBUeXBlOw0KICAgICAgICBXT1JEIExpbmVudW1iZXI7DQp9IElNQUdFX0xJTkVOVU1CRVIs KlBJTUFHRV9MSU5FTlVNQkVSOw0KI3ByYWdtYSBwYWNrKHBvcCkNCiNwcmFnbWEgcGFjayhwdXNo LDQpDQp0eXBlZGVmIHN0cnVjdCBfSU1BR0VfQVJDSElWRV9NRU1CRVJfSEVBREVSIHsNCiAgICAg ICAgQllURSBOYW1lWzE2XTsNCiAgICAgICAgQllURSBEYXRlWzEyXTsNCiAgICAgICAgQllURSBV c2VySURbNl07DQogICAgICAgIEJZVEUgR3JvdXBJRFs2XTsNCiAgICAgICAgQllURSBNb2RlWzhd Ow0KICAgICAgICBCWVRFIFNpemVbMTBdOw0KICAgICAgICBCWVRFIEVuZEhlYWRlclsyXTsNCn0g SU1BR0VfQVJDSElWRV9NRU1CRVJfSEVBREVSLCpQSU1BR0VfQVJDSElWRV9NRU1CRVJfSEVBREVS Ow0KdHlwZWRlZiBzdHJ1Y3QgX0lNQUdFX0VYUE9SVF9ESVJFQ1RPUlkgew0KICAgICAgICBEV09S RCBDaGFyYWN0ZXJpc3RpY3M7DQogICAgICAgIERXT1JEIFRpbWVEYXRlU3RhbXA7DQogICAgICAg IFdPUkQgTWFqb3JWZXJzaW9uOw0KICAgICAgICBXT1JEIE1pbm9yVmVyc2lvbjsNCiAgICAgICAg RFdPUkQgTmFtZTsNCiAgICAgICAgRFdPUkQgQmFzZTsNCiAgICAgICAgRFdPUkQgTnVtYmVyT2ZG dW5jdGlvbnM7DQogICAgICAgIERXT1JEIE51bWJlck9mTmFtZXM7DQogICAgICAgIFBEV09SRCAq QWRkcmVzc09mRnVuY3Rpb25zOw0KICAgICAgICBQRFdPUkQgKkFkZHJlc3NPZk5hbWVzOw0KICAg ICAgICBQV09SRCAqQWRkcmVzc09mTmFtZU9yZGluYWxzOw0KfSBJTUFHRV9FWFBPUlRfRElSRUNU T1JZLCpQSU1BR0VfRVhQT1JUX0RJUkVDVE9SWTsNCnR5cGVkZWYgc3RydWN0IF9JTUFHRV9JTVBP UlRfQllfTkFNRSB7DQogICAgICAgIFdPUkQgSGludDsNCiAgICAgICAgQllURSBOYW1lWzFdOw0K fSBJTUFHRV9JTVBPUlRfQllfTkFNRSwqUElNQUdFX0lNUE9SVF9CWV9OQU1FOw0KdHlwZWRlZiBz dHJ1Y3QgX0lNQUdFX1RIVU5LX0RBVEEgew0KICAgICAgICB1bmlvbiB7DQogICAgICAgICAgICAg ICAgUEJZVEUgRm9yd2FyZGVyU3RyaW5nOw0KICAgICAgICAgICAgICAgIFBEV09SRCBGdW5jdGlv bjsNCiAgICAgICAgICAgICAgICBEV09SRCBPcmRpbmFsOw0KICAgICAgICAgICAgICAgIFBJTUFH RV9JTVBPUlRfQllfTkFNRSBBZGRyZXNzT2ZEYXRhOw0KICAgICAgICB9IHUxOw0KfSBJTUFHRV9U SFVOS19EQVRBLCpQSU1BR0VfVEhVTktfREFUQTsNCnR5cGVkZWYgc3RydWN0IF9JTUFHRV9JTVBP UlRfREVTQ1JJUFRPUiB7DQogICAgICAgIF9fZXh0ZW5zaW9uX18gdW5pb24gew0KICAgICAgICAg ICAgICAgIERXT1JEIENoYXJhY3RlcmlzdGljczsNCiAgICAgICAgICAgICAgICBQSU1BR0VfVEhV TktfREFUQSBPcmlnaW5hbEZpcnN0VGh1bms7DQogICAgICAgIH0gOw0KICAgICAgICBEV09SRCBU aW1lRGF0ZVN0YW1wOw0KICAgICAgICBEV09SRCBGb3J3YXJkZXJDaGFpbjsNCiAgICAgICAgRFdP UkQgTmFtZTsNCiAgICAgICAgUElNQUdFX1RIVU5LX0RBVEEgRmlyc3RUaHVuazsNCn0gSU1BR0Vf SU1QT1JUX0RFU0NSSVBUT1IsKlBJTUFHRV9JTVBPUlRfREVTQ1JJUFRPUjsNCnR5cGVkZWYgc3Ry dWN0IF9JTUFHRV9CT1VORF9JTVBPUlRfREVTQ1JJUFRPUiB7DQogICAgICAgIERXT1JEIFRpbWVE YXRlU3RhbXA7DQogICAgICAgIFdPUkQgT2Zmc2V0TW9kdWxlTmFtZTsNCiAgICAgICAgV09SRCBO dW1iZXJPZk1vZHVsZUZvcndhcmRlclJlZnM7DQp9IElNQUdFX0JPVU5EX0lNUE9SVF9ERVNDUklQ VE9SLCpQSU1BR0VfQk9VTkRfSU1QT1JUX0RFU0NSSVBUT1I7DQp0eXBlZGVmIHN0cnVjdCBfSU1B R0VfQk9VTkRfRk9SV0FSREVSX1JFRiB7DQogICAgICAgIERXT1JEIFRpbWVEYXRlU3RhbXA7DQog ICAgICAgIFdPUkQgT2Zmc2V0TW9kdWxlTmFtZTsNCiAgICAgICAgV09SRCBSZXNlcnZlZDsNCn0g SU1BR0VfQk9VTkRfRk9SV0FSREVSX1JFRiwqUElNQUdFX0JPVU5EX0ZPUldBUkRFUl9SRUY7DQp0 eXBlZGVmIHZvaWQoX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSAqUElNQUdFX1RMU19DQUxM QkFDSykoUFZPSUQsRFdPUkQsUFZPSUQpOw0KdHlwZWRlZiBzdHJ1Y3QgX0lNQUdFX1RMU19ESVJF Q1RPUlkgew0KICAgICAgICBEV09SRCBTdGFydEFkZHJlc3NPZlJhd0RhdGE7DQogICAgICAgIERX T1JEIEVuZEFkZHJlc3NPZlJhd0RhdGE7DQogICAgICAgIFBEV09SRCBBZGRyZXNzT2ZJbmRleDsN CiAgICAgICAgUElNQUdFX1RMU19DQUxMQkFDSyAqQWRkcmVzc09mQ2FsbEJhY2tzOw0KICAgICAg ICBEV09SRCBTaXplT2ZaZXJvRmlsbDsNCiAgICAgICAgRFdPUkQgQ2hhcmFjdGVyaXN0aWNzOw0K fSBJTUFHRV9UTFNfRElSRUNUT1JZLCpQSU1BR0VfVExTX0RJUkVDVE9SWTsNCnR5cGVkZWYgc3Ry dWN0IF9JTUFHRV9SRVNPVVJDRV9ESVJFQ1RPUlkgew0KICAgICAgICBEV09SRCBDaGFyYWN0ZXJp c3RpY3M7DQogICAgICAgIERXT1JEIFRpbWVEYXRlU3RhbXA7DQogICAgICAgIFdPUkQgTWFqb3JW ZXJzaW9uOw0KICAgICAgICBXT1JEIE1pbm9yVmVyc2lvbjsNCiAgICAgICAgV09SRCBOdW1iZXJP Zk5hbWVkRW50cmllczsNCiAgICAgICAgV09SRCBOdW1iZXJPZklkRW50cmllczsNCn0gSU1BR0Vf UkVTT1VSQ0VfRElSRUNUT1JZLCpQSU1BR0VfUkVTT1VSQ0VfRElSRUNUT1JZOw0KX19leHRlbnNp b25fXyB0eXBlZGVmIHN0cnVjdCBfSU1BR0VfUkVTT1VSQ0VfRElSRUNUT1JZX0VOVFJZIHsNCiAg ICAgICAgX19leHRlbnNpb25fXyB1bmlvbiB7DQogICAgICAgICAgICAgICAgX19leHRlbnNpb25f XyBzdHJ1Y3Qgew0KICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgTmFtZU9mZnNldDozMTsN CiAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEIE5hbWVJc1N0cmluZzoxOw0KICAgICAgICAg ICAgICAgIH07DQogICAgICAgICAgICAgICAgRFdPUkQgTmFtZTsNCiAgICAgICAgICAgICAgICBX T1JEIElkOw0KICAgICAgICB9IDsNCiAgICAgICAgX19leHRlbnNpb25fXyB1bmlvbiB7DQogICAg ICAgICAgICAgICAgRFdPUkQgT2Zmc2V0VG9EYXRhOw0KICAgICAgICAgICAgICAgIF9fZXh0ZW5z aW9uX18gc3RydWN0IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEIE9mZnNldFRvRGly ZWN0b3J5OjMxOw0KICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgRGF0YUlzRGlyZWN0b3J5 OjE7DQogICAgICAgICAgICAgICAgfSA7DQogICAgICAgIH0gOw0KfSBJTUFHRV9SRVNPVVJDRV9E SVJFQ1RPUllfRU5UUlksKlBJTUFHRV9SRVNPVVJDRV9ESVJFQ1RPUllfRU5UUlk7DQp0eXBlZGVm IHN0cnVjdCBfSU1BR0VfUkVTT1VSQ0VfRElSRUNUT1JZX1NUUklORyB7DQogICAgICAgIFdPUkQg TGVuZ3RoOw0KICAgICAgICBDSEFSIE5hbWVTdHJpbmdbMV07DQp9IElNQUdFX1JFU09VUkNFX0RJ UkVDVE9SWV9TVFJJTkcsKlBJTUFHRV9SRVNPVVJDRV9ESVJFQ1RPUllfU1RSSU5HOw0KdHlwZWRl ZiBzdHJ1Y3QgX0lNQUdFX1JFU09VUkNFX0RJUl9TVFJJTkdfVSB7DQogICAgICAgIFdPUkQgTGVu Z3RoOw0KICAgICAgICBXQ0hBUiBOYW1lU3RyaW5nWzFdOw0KfSBJTUFHRV9SRVNPVVJDRV9ESVJf U1RSSU5HX1UsKlBJTUFHRV9SRVNPVVJDRV9ESVJfU1RSSU5HX1U7DQp0eXBlZGVmIHN0cnVjdCBf SU1BR0VfUkVTT1VSQ0VfREFUQV9FTlRSWSB7DQogICAgICAgIERXT1JEIE9mZnNldFRvRGF0YTsN CiAgICAgICAgRFdPUkQgU2l6ZTsNCiAgICAgICAgRFdPUkQgQ29kZVBhZ2U7DQogICAgICAgIERX T1JEIFJlc2VydmVkOw0KfSBJTUFHRV9SRVNPVVJDRV9EQVRBX0VOVFJZLCpQSU1BR0VfUkVTT1VS Q0VfREFUQV9FTlRSWTsNCnR5cGVkZWYgc3RydWN0IF9JTUFHRV9MT0FEX0NPTkZJR19ESVJFQ1RP Ulkgew0KICAgICAgICBEV09SRCBDaGFyYWN0ZXJpc3RpY3M7DQogICAgICAgIERXT1JEIFRpbWVE YXRlU3RhbXA7DQogICAgICAgIFdPUkQgTWFqb3JWZXJzaW9uOw0KICAgICAgICBXT1JEIE1pbm9y VmVyc2lvbjsNCiAgICAgICAgRFdPUkQgR2xvYmFsRmxhZ3NDbGVhcjsNCiAgICAgICAgRFdPUkQg R2xvYmFsRmxhZ3NTZXQ7DQogICAgICAgIERXT1JEIENyaXRpY2FsU2VjdGlvbkRlZmF1bHRUaW1l b3V0Ow0KICAgICAgICBEV09SRCBEZUNvbW1pdEZyZWVCbG9ja1RocmVzaG9sZDsNCiAgICAgICAg RFdPUkQgRGVDb21taXRUb3RhbEZyZWVUaHJlc2hvbGQ7DQogICAgICAgIFBWT0lEIExvY2tQcmVm aXhUYWJsZTsNCiAgICAgICAgRFdPUkQgTWF4aW11bUFsbG9jYXRpb25TaXplOw0KICAgICAgICBE V09SRCBWaXJ0dWFsTWVtb3J5VGhyZXNob2xkOw0KICAgICAgICBEV09SRCBQcm9jZXNzSGVhcEZs YWdzOw0KICAgICAgICBEV09SRCBSZXNlcnZlZFs0XTsNCn0gSU1BR0VfTE9BRF9DT05GSUdfRElS RUNUT1JZLCpQSU1BR0VfTE9BRF9DT05GSUdfRElSRUNUT1JZOw0KdHlwZWRlZiBzdHJ1Y3QgX0lN QUdFX1JVTlRJTUVfRlVOQ1RJT05fRU5UUlkgew0KICAgICAgICBEV09SRCBCZWdpbkFkZHJlc3M7 DQogICAgICAgIERXT1JEIEVuZEFkZHJlc3M7DQogICAgICAgIFBWT0lEIEV4Y2VwdGlvbkhhbmRs ZXI7DQogICAgICAgIFBWT0lEIEhhbmRsZXJEYXRhOw0KICAgICAgICBEV09SRCBQcm9sb2dFbmRB ZGRyZXNzOw0KfSBJTUFHRV9SVU5USU1FX0ZVTkNUSU9OX0VOVFJZLCpQSU1BR0VfUlVOVElNRV9G VU5DVElPTl9FTlRSWTsNCnR5cGVkZWYgc3RydWN0IF9JTUFHRV9ERUJVR19ESVJFQ1RPUlkgew0K ICAgICAgICBEV09SRCBDaGFyYWN0ZXJpc3RpY3M7DQogICAgICAgIERXT1JEIFRpbWVEYXRlU3Rh bXA7DQogICAgICAgIFdPUkQgTWFqb3JWZXJzaW9uOw0KICAgICAgICBXT1JEIE1pbm9yVmVyc2lv bjsNCiAgICAgICAgRFdPUkQgVHlwZTsNCiAgICAgICAgRFdPUkQgU2l6ZU9mRGF0YTsNCiAgICAg ICAgRFdPUkQgQWRkcmVzc09mUmF3RGF0YTsNCiAgICAgICAgRFdPUkQgUG9pbnRlclRvUmF3RGF0 YTsNCn0gSU1BR0VfREVCVUdfRElSRUNUT1JZLCpQSU1BR0VfREVCVUdfRElSRUNUT1JZOw0KdHlw ZWRlZiBzdHJ1Y3QgX0ZQT19EQVRBIHsNCiAgICAgICAgRFdPUkQgdWxPZmZTdGFydDsNCiAgICAg ICAgRFdPUkQgY2JQcm9jU2l6ZTsNCiAgICAgICAgRFdPUkQgY2R3TG9jYWxzOw0KICAgICAgICBX T1JEIGNkd1BhcmFtczsNCiAgICAgICAgV09SRCBjYlByb2xvZzo4Ow0KICAgICAgICBXT1JEIGNi UmVnczozOw0KICAgICAgICBXT1JEIGZIYXNTRUg6MTsNCiAgICAgICAgV09SRCBmVXNlQlA6MTsN CiAgICAgICAgV09SRCByZXNlcnZlZDoxOw0KICAgICAgICBXT1JEIGNiRnJhbWU6MjsNCn0gRlBP X0RBVEEsKlBGUE9fREFUQTsNCnR5cGVkZWYgc3RydWN0IF9JTUFHRV9ERUJVR19NSVNDIHsNCiAg ICAgICAgRFdPUkQgRGF0YVR5cGU7DQogICAgICAgIERXT1JEIExlbmd0aDsNCiAgICAgICAgQk9P TEVBTiBVbmljb2RlOw0KICAgICAgICBCWVRFIFJlc2VydmVkWzNdOw0KICAgICAgICBCWVRFIERh dGFbMV07DQp9IElNQUdFX0RFQlVHX01JU0MsKlBJTUFHRV9ERUJVR19NSVNDOw0KdHlwZWRlZiBz dHJ1Y3QgX0lNQUdFX0ZVTkNUSU9OX0VOVFJZIHsNCiAgICAgICAgRFdPUkQgU3RhcnRpbmdBZGRy ZXNzOw0KICAgICAgICBEV09SRCBFbmRpbmdBZGRyZXNzOw0KICAgICAgICBEV09SRCBFbmRPZlBy b2xvZ3VlOw0KfSBJTUFHRV9GVU5DVElPTl9FTlRSWSwqUElNQUdFX0ZVTkNUSU9OX0VOVFJZOw0K dHlwZWRlZiBzdHJ1Y3QgX0lNQUdFX1NFUEFSQVRFX0RFQlVHX0hFQURFUiB7DQogICAgICAgIFdP UkQgU2lnbmF0dXJlOw0KICAgICAgICBXT1JEIEZsYWdzOw0KICAgICAgICBXT1JEIE1hY2hpbmU7 DQogICAgICAgIFdPUkQgQ2hhcmFjdGVyaXN0aWNzOw0KICAgICAgICBEV09SRCBUaW1lRGF0ZVN0 YW1wOw0KICAgICAgICBEV09SRCBDaGVja1N1bTsNCiAgICAgICAgRFdPUkQgSW1hZ2VCYXNlOw0K ICAgICAgICBEV09SRCBTaXplT2ZJbWFnZTsNCiAgICAgICAgRFdPUkQgTnVtYmVyT2ZTZWN0aW9u czsNCiAgICAgICAgRFdPUkQgRXhwb3J0ZWROYW1lc1NpemU7DQogICAgICAgIERXT1JEIERlYnVn RGlyZWN0b3J5U2l6ZTsNCiAgICAgICAgRFdPUkQgUmVzZXJ2ZWRbM107DQp9IElNQUdFX1NFUEFS QVRFX0RFQlVHX0hFQURFUiwqUElNQUdFX1NFUEFSQVRFX0RFQlVHX0hFQURFUjsNCiNwcmFnbWEg cGFjayhwb3ApDQp0eXBlZGVmIGVudW0gX0NNX1NFUlZJQ0VfTk9ERV9UWVBFIHsNCiAgICAgICAg RHJpdmVyVHlwZT0xLA0KICAgICAgICBGaWxlU3lzdGVtVHlwZT0yLA0KICAgICAgICBXaW4zMlNl cnZpY2VPd25Qcm9jZXNzPTE2LA0KICAgICAgICBXaW4zMlNlcnZpY2VTaGFyZVByb2Nlc3M9MzIs DQogICAgICAgIEFkYXB0ZXJUeXBlPTQsDQogICAgICAgIFJlY29nbml6ZXJUeXBlPTgNCn0gU0VS VklDRV9OT0RFX1RZUEU7DQp0eXBlZGVmIGVudW0gX0NNX1NFUlZJQ0VfTE9BRF9UWVBFIHsNCiAg ICAgICAgQm9vdExvYWQ9MCwNCiAgICAgICAgU3lzdGVtTG9hZD0xLA0KICAgICAgICBBdXRvTG9h ZD0yLA0KICAgICAgICBEZW1hbmRMb2FkPTMsDQogICAgICAgIERpc2FibGVMb2FkPTQNCn0gU0VS VklDRV9MT0FEX1RZUEU7DQp0eXBlZGVmIGVudW0gX0NNX0VSUk9SX0NPTlRST0xfVFlQRSB7DQog ICAgICAgIElnbm9yZUVycm9yPTAsDQogICAgICAgIE5vcm1hbEVycm9yPTEsDQogICAgICAgIFNl dmVyZUVycm9yPTIsDQogICAgICAgIENyaXRpY2FsRXJyb3I9Mw0KfSBTRVJWSUNFX0VSUk9SX1RZ UEU7DQp0eXBlZGVmIHN0cnVjdCBfTlRfVElCIHsNCiAgICAgICAgc3RydWN0IF9FWENFUFRJT05f UkVHSVNUUkFUSU9OX1JFQ09SRCAqRXhjZXB0aW9uTGlzdDsNCiAgICAgICAgUFZPSUQgU3RhY2tC YXNlOw0KICAgICAgICBQVk9JRCBTdGFja0xpbWl0Ow0KICAgICAgICBQVk9JRCBTdWJTeXN0ZW1U aWI7DQogICAgICAgIF9fZXh0ZW5zaW9uX18gdW5pb24gew0KICAgICAgICAgICAgICAgIFBWT0lE IEZpYmVyRGF0YTsNCiAgICAgICAgICAgICAgICBEV09SRCBWZXJzaW9uOw0KICAgICAgICB9IDsN CiAgICAgICAgUFZPSUQgQXJiaXRyYXJ5VXNlclBvaW50ZXI7DQogICAgICAgIHN0cnVjdCBfTlRf VElCICpTZWxmOw0KfSBOVF9USUIsKlBOVF9USUI7DQp0eXBlZGVmIHN0cnVjdCBfUkVQQVJTRV9E QVRBX0JVRkZFUiB7DQogICAgICAgIERXT1JEIFJlcGFyc2VUYWc7DQogICAgICAgIFdPUkQgUmVw YXJzZURhdGFMZW5ndGg7DQogICAgICAgIFdPUkQgUmVzZXJ2ZWQ7DQogICAgICAgIF9fZXh0ZW5z aW9uX18gdW5pb24gew0KICAgICAgICAgICAgICAgIHN0cnVjdCB7DQogICAgICAgICAgICAgICAg ICAgICAgICBXT1JEIFN1YnN0aXR1dGVOYW1lT2Zmc2V0Ow0KICAgICAgICAgICAgICAgICAgICAg ICAgV09SRCBTdWJzdGl0dXRlTmFtZUxlbmd0aDsNCiAgICAgICAgICAgICAgICAgICAgICAgIFdP UkQgUHJpbnROYW1lT2Zmc2V0Ow0KICAgICAgICAgICAgICAgICAgICAgICAgV09SRCBQcmludE5h bWVMZW5ndGg7DQogICAgICAgICAgICAgICAgICAgICAgICBXQ0hBUiBQYXRoQnVmZmVyWzFdOw0K ICAgICAgICAgICAgICAgIH0gU3ltYm9saWNMaW5rUmVwYXJzZUJ1ZmZlcjsNCiAgICAgICAgICAg ICAgICBzdHJ1Y3Qgew0KICAgICAgICAgICAgICAgICAgICAgICAgV09SRCBTdWJzdGl0dXRlTmFt ZU9mZnNldDsNCiAgICAgICAgICAgICAgICAgICAgICAgIFdPUkQgU3Vic3RpdHV0ZU5hbWVMZW5n dGg7DQogICAgICAgICAgICAgICAgICAgICAgICBXT1JEIFByaW50TmFtZU9mZnNldDsNCiAgICAg ICAgICAgICAgICAgICAgICAgIFdPUkQgUHJpbnROYW1lTGVuZ3RoOw0KICAgICAgICAgICAgICAg ICAgICAgICAgV0NIQVIgUGF0aEJ1ZmZlclsxXTsNCiAgICAgICAgICAgICAgICB9IE1vdW50UG9p bnRSZXBhcnNlQnVmZmVyOw0KICAgICAgICAgICAgICAgIHN0cnVjdCB7DQogICAgICAgICAgICAg ICAgICAgICAgICBCWVRFIERhdGFCdWZmZXJbMV07DQogICAgICAgICAgICAgICAgfSBHZW5lcmlj UmVwYXJzZUJ1ZmZlcjsNCiAgICAgICAgfSA7DQp9IFJFUEFSU0VfREFUQV9CVUZGRVIsICpQUkVQ QVJTRV9EQVRBX0JVRkZFUjsNCnR5cGVkZWYgc3RydWN0IF9SRVBBUlNFX0dVSURfREFUQV9CVUZG RVIgew0KICAgICAgICBEV09SRCBSZXBhcnNlVGFnOw0KICAgICAgICBXT1JEIFJlcGFyc2VEYXRh TGVuZ3RoOw0KICAgICAgICBXT1JEIFJlc2VydmVkOw0KICAgICAgICBHVUlEIFJlcGFyc2VHdWlk Ow0KICAgICAgICBzdHJ1Y3Qgew0KICAgICAgICAgICAgICAgIEJZVEUgRGF0YUJ1ZmZlclsxXTsN CiAgICAgICAgfSBHZW5lcmljUmVwYXJzZUJ1ZmZlcjsNCn0gUkVQQVJTRV9HVUlEX0RBVEFfQlVG RkVSLCAqUFJFUEFSU0VfR1VJRF9EQVRBX0JVRkZFUjsNCnR5cGVkZWYgc3RydWN0IF9SRVBBUlNF X1BPSU5UX0lORk9STUFUSU9OIHsNCiAgICAgICAgV09SRCBSZXBhcnNlRGF0YUxlbmd0aDsNCiAg ICAgICAgV09SRCBVbnBhcnNlZE5hbWVMZW5ndGg7DQp9IFJFUEFSU0VfUE9JTlRfSU5GT1JNQVRJ T04sICpQUkVQQVJTRV9QT0lOVF9JTkZPUk1BVElPTjsNCmV4dGVybiBfX2lubGluZV9fIFBWT0lE IEdldEN1cnJlbnRGaWJlcih2b2lkKQ0Kew0KICAgIHZvaWQqIHJldDsNCiAgICBfX2FzbV9fIHZv bGF0aWxlICgNCiAgICAgICAgICAgICAgIm1vdmwJJSVmczoweDEwLCUwIg0KICAgICAgICAgICAg ICAgIDogIj1yIiAocmV0KQ0KICAgICAgICAgICAgICAgIDoNCiAgICAgICAgICAgICAgICApOw0K ICAgIHJldHVybiByZXQ7DQp9DQoNCmV4dGVybiBfX2lubGluZV9fIFBWT0lEIEdldEZpYmVyRGF0 YSh2b2lkKQ0Kew0KICAgIHZvaWQqIHJldDsNCiAgICBfX2FzbV9fIHZvbGF0aWxlICgNCiAgICAg ICAgICAgICAgIm1vdmwJJSVmczoweDEwLCUwXG4iDQogICAgICAgICAgICAgICJtb3ZsCSglMCks JTAiDQogICAgICAgICAgICAgICA6ICI9ciIgKHJldCkNCiAgICAgICAgICAgICAgIDoNCiAgICAg ICAgICAgICAgKTsNCiAgICByZXR1cm4gcmV0Ow0KfQ0KDQoNCg0KfQ0KIyAxNDYgInQ6L21zeXMv MS4wL21pbmd3L2luY2x1ZGUvd2luZGVmLmgiIDIgMw0KDQp0eXBlZGVmIFVJTlQgV1BBUkFNOw0K dHlwZWRlZiBMT05HIExQQVJBTTsNCnR5cGVkZWYgTE9ORyBMUkVTVUxUOw0KDQp0eXBlZGVmIExP TkcgSFJFU1VMVDsNCg0KDQoNCnR5cGVkZWYgV09SRCBBVE9NOw0KDQp0eXBlZGVmIEhBTkRMRSBI R0xPQkFMOw0KdHlwZWRlZiBIQU5ETEUgSExPQ0FMOw0KdHlwZWRlZiBIQU5ETEUgR0xPQkFMSEFO RExFOw0KdHlwZWRlZiBIQU5ETEUgTE9DQUxIQU5ETEU7DQp0eXBlZGVmIHZvaWQgKkhHRElPQko7 DQp0eXBlZGVmIHN0cnVjdCBIQUNDRUxfX3tpbnQgaTt9KkhBQ0NFTDsNCnR5cGVkZWYgc3RydWN0 IEhCSVRNQVBfX3tpbnQgaTt9KkhCSVRNQVA7DQp0eXBlZGVmIHN0cnVjdCBIQlJVU0hfX3tpbnQg aTt9KkhCUlVTSDsNCnR5cGVkZWYgc3RydWN0IEhDT0xPUlNQQUNFX197aW50IGk7fSpIQ09MT1JT UEFDRTsNCnR5cGVkZWYgc3RydWN0IEhEQ19fe2ludCBpO30qSERDOw0KdHlwZWRlZiBzdHJ1Y3Qg SEdMUkNfX3tpbnQgaTt9KkhHTFJDOw0KdHlwZWRlZiBzdHJ1Y3QgSERFU0tfX3tpbnQgaTt9KkhE RVNLOw0KdHlwZWRlZiBzdHJ1Y3QgSEVOSE1FVEFGSUxFX197aW50IGk7fSpIRU5ITUVUQUZJTEU7 DQp0eXBlZGVmIHN0cnVjdCBIRk9OVF9fe2ludCBpO30qSEZPTlQ7DQp0eXBlZGVmIHN0cnVjdCBI SUNPTl9fe2ludCBpO30qSElDT047DQp0eXBlZGVmIHN0cnVjdCBIS0VZX197aW50IGk7fSpIS0VZ Ow0KDQoNCnR5cGVkZWYgc3RydWN0IEhNT05JVE9SX197aW50IGk7fSpITU9OSVRPUjsNCg0KdHlw ZWRlZiBzdHJ1Y3QgSFRFUk1JTkFMX197aW50IGk7fSpIVEVSTUlOQUw7DQp0eXBlZGVmIHN0cnVj dCBIV0lORVZFTlRIT09LX197aW50IGk7fSpIV0lORVZFTlRIT09LOw0KDQp0eXBlZGVmIEhLRVkg KlBIS0VZOw0KdHlwZWRlZiBzdHJ1Y3QgSE1FTlVfX3tpbnQgaTt9KkhNRU5VOw0KdHlwZWRlZiBz dHJ1Y3QgSE1FVEFGSUxFX197aW50IGk7fSpITUVUQUZJTEU7DQp0eXBlZGVmIHN0cnVjdCBISU5T VEFOQ0VfX3tpbnQgaTt9KkhJTlNUQU5DRTsNCnR5cGVkZWYgSElOU1RBTkNFIEhNT0RVTEU7DQp0 eXBlZGVmIHN0cnVjdCBIUEFMRVRURV9fe2ludCBpO30qSFBBTEVUVEU7DQp0eXBlZGVmIHN0cnVj dCBIUEVOX197aW50IGk7fSpIUEVOOw0KdHlwZWRlZiBzdHJ1Y3QgSFJHTl9fe2ludCBpO30qSFJH TjsNCnR5cGVkZWYgc3RydWN0IEhSU1JDX197aW50IGk7fSpIUlNSQzsNCnR5cGVkZWYgc3RydWN0 IEhTVFJfX3tpbnQgaTt9KkhTVFI7DQp0eXBlZGVmIHN0cnVjdCBIVEFTS19fe2ludCBpO30qSFRB U0s7DQp0eXBlZGVmIHN0cnVjdCBIV05EX197aW50IGk7fSpIV05EOw0KdHlwZWRlZiBzdHJ1Y3Qg SFdJTlNUQV9fe2ludCBpO30qSFdJTlNUQTsNCnR5cGVkZWYgc3RydWN0IEhLTF9fe2ludCBpO30q SEtMOw0KdHlwZWRlZiBpbnQgSEZJTEU7DQp0eXBlZGVmIEhJQ09OIEhDVVJTT1I7DQp0eXBlZGVm IERXT1JEIENPTE9SUkVGOw0KdHlwZWRlZiBpbnQgKF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgKkZBUlBST0MpKCk7DQp0eXBlZGVmIGludCAoX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSAqTkVBUlBST0MpKCk7DQp0eXBlZGVmIGludCAoX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSAqUFJPQykoKTsNCnR5cGVkZWYgc3RydWN0IHRhZ1JFQ1Qgew0KICAgICAgICBMT05HIGxlZnQ7 DQogICAgICAgIExPTkcgdG9wOw0KICAgICAgICBMT05HIHJpZ2h0Ow0KICAgICAgICBMT05HIGJv dHRvbTsNCn0gUkVDVCwqUFJFQ1QsKkxQUkVDVDsNCnR5cGVkZWYgY29uc3QgUkVDVCAqTFBDUkVD VDsNCnR5cGVkZWYgc3RydWN0IHRhZ1JFQ1RMIHsNCiAgICAgICAgTE9ORyBsZWZ0Ow0KICAgICAg ICBMT05HIHRvcDsNCiAgICAgICAgTE9ORyByaWdodDsNCiAgICAgICAgTE9ORyBib3R0b207DQp9 IFJFQ1RMLCpQUkVDVEwsKkxQUkVDVEw7DQp0eXBlZGVmIGNvbnN0IFJFQ1RMICpMUENSRUNUTDsN CnR5cGVkZWYgc3RydWN0IHRhZ1BPSU5UIHsNCiAgICAgICAgTE9ORyB4Ow0KICAgICAgICBMT05H IHk7DQp9IFBPSU5ULFBPSU5UTCwqUFBPSU5ULCpMUFBPSU5ULCpQUE9JTlRMLCpMUFBPSU5UTDsN CnR5cGVkZWYgc3RydWN0IHRhZ1NJWkUgew0KICAgICAgICBMT05HIGN4Ow0KICAgICAgICBMT05H IGN5Ow0KfSBTSVpFLFNJWkVMLCpQU0laRSwqTFBTSVpFLCpQU0laRUwsKkxQU0laRUw7DQp0eXBl ZGVmIHN0cnVjdCB0YWdQT0lOVFMgew0KICAgICAgICBTSE9SVCB4Ow0KICAgICAgICBTSE9SVCB5 Ow0KfSBQT0lOVFMsKlBQT0lOVFMsKkxQUE9JTlRTOw0KDQoNCn0NCiMgOTkgInQ6L21zeXMvMS4w L21pbmd3L2luY2x1ZGUvd2luZG93cy5oIiAyIDMNCiMgMSAidDovbXN5cy8xLjAvbWluZ3cvaW5j bHVkZS93aW5jb24uaCIgMSAzDQoNCg0KDQoNCmV4dGVybiAiQyIgew0KIyA1MSAidDovbXN5cy8x LjAvbWluZ3cvaW5jbHVkZS93aW5jb24uaCIgMw0KdHlwZWRlZiBzdHJ1Y3QgX0NIQVJfSU5GTyB7 DQogICAgICAgIHVuaW9uIHsNCiAgICAgICAgICAgICAgICBXQ0hBUiBVbmljb2RlQ2hhcjsNCiAg ICAgICAgICAgICAgICBDSEFSIEFzY2lpQ2hhcjsNCiAgICAgICAgfSBDaGFyOw0KICAgICAgICBX T1JEIEF0dHJpYnV0ZXM7DQp9IENIQVJfSU5GTywqUENIQVJfSU5GTzsNCnR5cGVkZWYgc3RydWN0 IF9TTUFMTF9SRUNUIHsNCiAgICAgICAgU0hPUlQgTGVmdDsNCiAgICAgICAgU0hPUlQgVG9wOw0K ICAgICAgICBTSE9SVCBSaWdodDsNCiAgICAgICAgU0hPUlQgQm90dG9tOw0KfSBTTUFMTF9SRUNU LCpQU01BTExfUkVDVDsNCnR5cGVkZWYgc3RydWN0IF9DT05TT0xFX0NVUlNPUl9JTkZPIHsNCiAg ICAgICAgRFdPUkQgZHdTaXplOw0KICAgICAgICBCT09MIGJWaXNpYmxlOw0KfSBDT05TT0xFX0NV UlNPUl9JTkZPLCpQQ09OU09MRV9DVVJTT1JfSU5GTzsNCnR5cGVkZWYgc3RydWN0IF9DT09SRCB7 DQogICAgICAgIFNIT1JUIFg7DQogICAgICAgIFNIT1JUIFk7DQp9IENPT1JEOw0KdHlwZWRlZiBz dHJ1Y3QgX0NPTlNPTEVfU0NSRUVOX0JVRkZFUl9JTkZPIHsNCiAgICAgICAgQ09PUkQgZHdTaXpl Ow0KICAgICAgICBDT09SRCBkd0N1cnNvclBvc2l0aW9uOw0KICAgICAgICBXT1JEIHdBdHRyaWJ1 dGVzOw0KICAgICAgICBTTUFMTF9SRUNUIHNyV2luZG93Ow0KICAgICAgICBDT09SRCBkd01heGlt dW1XaW5kb3dTaXplOw0KfSBDT05TT0xFX1NDUkVFTl9CVUZGRVJfSU5GTywqUENPTlNPTEVfU0NS RUVOX0JVRkZFUl9JTkZPOw0KdHlwZWRlZiBCT09MKF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgKlBIQU5ETEVSX1JPVVRJTkUpKERXT1JEKTsNCnR5cGVkZWYgc3RydWN0IF9LRVlfRVZFTlRf UkVDT1JEIHsNCiAgICAgICAgQk9PTCBiS2V5RG93bjsNCiAgICAgICAgV09SRCB3UmVwZWF0Q291 bnQ7DQogICAgICAgIFdPUkQgd1ZpcnR1YWxLZXlDb2RlOw0KICAgICAgICBXT1JEIHdWaXJ0dWFs U2NhbkNvZGU7DQogICAgICAgIHVuaW9uIHsNCiAgICAgICAgICAgICAgICBXQ0hBUiBVbmljb2Rl Q2hhcjsNCiAgICAgICAgICAgICAgICBDSEFSIEFzY2lpQ2hhcjsNCiAgICAgICAgfSB1Q2hhcjsN CiAgICAgICAgRFdPUkQgZHdDb250cm9sS2V5U3RhdGU7DQp9DQoNCg0KIF9fYXR0cmlidXRlX18o KHBhY2tlZCkpDQoNCktFWV9FVkVOVF9SRUNPUkQ7DQoNCnR5cGVkZWYgc3RydWN0IF9NT1VTRV9F VkVOVF9SRUNPUkQgew0KICAgICAgICBDT09SRCBkd01vdXNlUG9zaXRpb247DQogICAgICAgIERX T1JEIGR3QnV0dG9uU3RhdGU7DQogICAgICAgIERXT1JEIGR3Q29udHJvbEtleVN0YXRlOw0KICAg ICAgICBEV09SRCBkd0V2ZW50RmxhZ3M7DQp9IE1PVVNFX0VWRU5UX1JFQ09SRDsNCnR5cGVkZWYg c3RydWN0IF9XSU5ET1dfQlVGRkVSX1NJWkVfUkVDT1JEIHsgQ09PUkQgZHdTaXplOyB9IFdJTkRP V19CVUZGRVJfU0laRV9SRUNPUkQ7DQp0eXBlZGVmIHN0cnVjdCBfTUVOVV9FVkVOVF9SRUNPUkQg eyBVSU5UIGR3Q29tbWFuZElkOyB9IE1FTlVfRVZFTlRfUkVDT1JELCpQTUVOVV9FVkVOVF9SRUNP UkQ7DQp0eXBlZGVmIHN0cnVjdCBfRk9DVVNfRVZFTlRfUkVDT1JEIHsgQk9PTCBiU2V0Rm9jdXM7 IH0gRk9DVVNfRVZFTlRfUkVDT1JEOw0KdHlwZWRlZiBzdHJ1Y3QgX0lOUFVUX1JFQ09SRCB7DQog ICAgICAgIFdPUkQgRXZlbnRUeXBlOw0KICAgICAgICB1bmlvbiB7DQogICAgICAgICAgICAgICAg S0VZX0VWRU5UX1JFQ09SRCBLZXlFdmVudDsNCiAgICAgICAgICAgICAgICBNT1VTRV9FVkVOVF9S RUNPUkQgTW91c2VFdmVudDsNCiAgICAgICAgICAgICAgICBXSU5ET1dfQlVGRkVSX1NJWkVfUkVD T1JEIFdpbmRvd0J1ZmZlclNpemVFdmVudDsNCiAgICAgICAgICAgICAgICBNRU5VX0VWRU5UX1JF Q09SRCBNZW51RXZlbnQ7DQogICAgICAgICAgICAgICAgRk9DVVNfRVZFTlRfUkVDT1JEIEZvY3Vz RXZlbnQ7DQogICAgICAgIH0gRXZlbnQ7DQp9IElOUFVUX1JFQ09SRCwqUElOUFVUX1JFQ09SRDsN Cg0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEFsbG9jQ29uc29sZSh2b2lkKTsN CkhBTkRMRSBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIENyZWF0ZUNvbnNvbGVTY3JlZW5C dWZmZXIoRFdPUkQsRFdPUkQsTFBTRUNVUklUWV9BVFRSSUJVVEVTLERXT1JELFBWT0lEKTsNCkJP T0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBGaWxsQ29uc29sZU91dHB1dEF0dHJpYnV0 ZShIQU5ETEUsV09SRCxEV09SRCxDT09SRCxQRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIEZpbGxDb25zb2xlT3V0cHV0Q2hhcmFjdGVyQShIQU5ETEUsQ0hBUixEV09S RCxDT09SRCxQRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEZpbGxD b25zb2xlT3V0cHV0Q2hhcmFjdGVyVyhIQU5ETEUsV0NIQVIsRFdPUkQsQ09PUkQsUERXT1JEKTsN CkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBGbHVzaENvbnNvbGVJbnB1dEJ1ZmZl cihIQU5ETEUpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEZyZWVDb25zb2xl KHZvaWQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdlbmVyYXRlQ29uc29s ZUN0cmxFdmVudChEV09SRCxEV09SRCk7DQpVSU5UIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgR2V0Q29uc29sZUNQKHZvaWQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykp IEdldENvbnNvbGVDdXJzb3JJbmZvKEhBTkRMRSxQQ09OU09MRV9DVVJTT1JfSU5GTyk7DQpCT09M IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0Q29uc29sZU1vZGUoSEFORExFLFBEV09S RCk7DQpVSU5UIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0Q29uc29sZU91dHB1dENQ KHZvaWQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldENvbnNvbGVTY3Jl ZW5CdWZmZXJJbmZvKEhBTkRMRSxQQ09OU09MRV9TQ1JFRU5fQlVGRkVSX0lORk8pOw0KRFdPUkQg X19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRDb25zb2xlVGl0bGVBKExQU1RSLERXT1JE KTsNCkRXT1JEIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0Q29uc29sZVRpdGxlVyhM UFdTVFIsRFdPUkQpOw0KQ09PUkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRMYXJn ZXN0Q29uc29sZVdpbmRvd1NpemUoSEFORExFKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBHZXROdW1iZXJPZkNvbnNvbGVJbnB1dEV2ZW50cyhIQU5ETEUsUERXT1JEKTsNCkJP T0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXROdW1iZXJPZkNvbnNvbGVNb3VzZUJ1 dHRvbnMoUERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBQZWVrQ29u c29sZUlucHV0QShIQU5ETEUsUElOUFVUX1JFQ09SRCxEV09SRCxQRFdPUkQpOw0KQk9PTCBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFBlZWtDb25zb2xlSW5wdXRXKEhBTkRMRSxQSU5QVVRf UkVDT1JELERXT1JELFBEV09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg UmVhZENvbnNvbGVBKEhBTkRMRSxQVk9JRCxEV09SRCxQRFdPUkQsUFZPSUQpOw0KQk9PTCBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJlYWRDb25zb2xlVyhIQU5ETEUsUFZPSUQsRFdPUkQs UERXT1JELFBWT0lEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBSZWFkQ29u c29sZUlucHV0QShIQU5ETEUsUElOUFVUX1JFQ09SRCxEV09SRCxQRFdPUkQpOw0KQk9PTCBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJlYWRDb25zb2xlSW5wdXRXKEhBTkRMRSxQSU5QVVRf UkVDT1JELERXT1JELFBEV09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg UmVhZENvbnNvbGVPdXRwdXRBdHRyaWJ1dGUoSEFORExFLExQV09SRCxEV09SRCxDT09SRCxMUERX T1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBSZWFkQ29uc29sZU91dHB1 dENoYXJhY3RlckEoSEFORExFLExQU1RSLERXT1JELENPT1JELFBEV09SRCk7DQpCT09MIF9fYXR0 cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUmVhZENvbnNvbGVPdXRwdXRDaGFyYWN0ZXJXKEhBTkRM RSxMUFdTVFIsRFdPUkQsQ09PUkQsUERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBSZWFkQ29uc29sZU91dHB1dEEoSEFORExFLFBDSEFSX0lORk8sQ09PUkQsQ09PUkQs UFNNQUxMX1JFQ1QpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJlYWRDb25z b2xlT3V0cHV0VyhIQU5ETEUsUENIQVJfSU5GTyxDT09SRCxDT09SRCxQU01BTExfUkVDVCk7DQpC T09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2Nyb2xsQ29uc29sZVNjcmVlbkJ1ZmZl ckEoSEFORExFLGNvbnN0IFNNQUxMX1JFQ1QqLGNvbnN0IFNNQUxMX1JFQ1QqLENPT1JELGNvbnN0 IENIQVJfSU5GTyopOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNjcm9sbENv bnNvbGVTY3JlZW5CdWZmZXJXKEhBTkRMRSxjb25zdCBTTUFMTF9SRUNUKixjb25zdCBTTUFMTF9S RUNUKixDT09SRCxjb25zdCBDSEFSX0lORk8qKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBTZXRDb25zb2xlQWN0aXZlU2NyZWVuQnVmZmVyKEhBTkRMRSk7DQpCT09MIF9fYXR0 cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0Q29uc29sZUNQKFVJTlQpOw0KQk9PTCBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNldENvbnNvbGVDdHJsSGFuZGxlcihQSEFORExFUl9ST1VU SU5FLEJPT0wpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNldENvbnNvbGVD dXJzb3JJbmZvKEhBTkRMRSxjb25zdCBDT05TT0xFX0NVUlNPUl9JTkZPKik7DQpCT09MIF9fYXR0 cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0Q29uc29sZUN1cnNvclBvc2l0aW9uKEhBTkRMRSxD T09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0Q29uc29sZU1vZGUo SEFORExFLERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBTZXRDb25z b2xlT3V0cHV0Q1AoVUlOVCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0 Q29uc29sZVNjcmVlbkJ1ZmZlclNpemUoSEFORExFLENPT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBTZXRDb25zb2xlVGV4dEF0dHJpYnV0ZShIQU5ETEUsV09SRCk7DQpC T09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0Q29uc29sZVRpdGxlQShMUENTVFIp Ow0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNldENvbnNvbGVUaXRsZVcoTFBD V1NUUik7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0Q29uc29sZVdpbmRv d0luZm8oSEFORExFLEJPT0wsY29uc3QgU01BTExfUkVDVCopOw0KQk9PTCBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIFdyaXRlQ29uc29sZUEoSEFORExFLFBDVk9JRCxEV09SRCxQRFdPUkQs UFZPSUQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFdyaXRlQ29uc29sZVco SEFORExFLFBDVk9JRCxEV09SRCxQRFdPUkQsUFZPSUQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIFdyaXRlQ29uc29sZUlucHV0QShIQU5ETEUsY29uc3QgSU5QVVRfUkVDT1JE KixEV09SRCxQRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFdyaXRl Q29uc29sZUlucHV0VyhIQU5ETEUsY29uc3QgSU5QVVRfUkVDT1JEKixEV09SRCxQRFdPUkQpOw0K Qk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFdyaXRlQ29uc29sZU91dHB1dEEoSEFO RExFLGNvbnN0IENIQVJfSU5GTyosQ09PUkQsQ09PUkQsUFNNQUxMX1JFQ1QpOw0KQk9PTCBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFdyaXRlQ29uc29sZU91dHB1dFcoSEFORExFLGNvbnN0 IENIQVJfSU5GTyosQ09PUkQsQ09PUkQsUFNNQUxMX1JFQ1QpOw0KQk9PTCBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIFdyaXRlQ29uc29sZU91dHB1dEF0dHJpYnV0ZShIQU5ETEUsY29uc3Qg V09SRCosRFdPUkQsQ09PUkQsUERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBXcml0ZUNvbnNvbGVPdXRwdXRDaGFyYWN0ZXJBKEhBTkRMRSxMUENTVFIsRFdPUkQsQ09P UkQsUERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBXcml0ZUNvbnNv bGVPdXRwdXRDaGFyYWN0ZXJXKEhBTkRMRSxMUENXU1RSLERXT1JELENPT1JELFBEV09SRCk7DQoj IDIwMSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS93aW5jb24uaCIgMw0KfQ0KIyAxMDAgInQ6 L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvd2luZG93cy5oIiAyIDMNCiMgMSAidDovbXN5cy8xLjAv bWluZ3cvaW5jbHVkZS9iYXNldHlwcy5oIiAxIDMNCiMgODkgInQ6L21zeXMvMS4wL21pbmd3L2lu Y2x1ZGUvYmFzZXR5cHMuaCIgMw0KdHlwZWRlZiBHVUlEIFVVSUQ7DQoNCnR5cGVkZWYgR1VJRCBJ SUQ7DQp0eXBlZGVmIEdVSUQgQ0xTSUQ7DQp0eXBlZGVmIENMU0lEICpMUENMU0lEOw0KdHlwZWRl ZiBJSUQgKkxQSUlEOw0KdHlwZWRlZiBJSUQgKlJFRklJRDsNCnR5cGVkZWYgQ0xTSUQgKlJFRkNM U0lEOw0KdHlwZWRlZiBHVUlEIEZNVElEOw0KdHlwZWRlZiBGTVRJRCAqUkVGRk1USUQ7DQp0eXBl ZGVmIHVuc2lnbmVkIGxvbmcgZXJyb3Jfc3RhdHVzX3Q7DQoNCnR5cGVkZWYgdW5zaWduZWQgbG9u ZyBQUk9QSUQ7DQojIDEwMSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS93aW5kb3dzLmgiIDIg Mw0KIyAxICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2V4Y3B0LmgiIDEgMw0KIyAzOSAidDov bXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9leGNwdC5oIiAzDQojIDEgInQ6L21zeXMvMS4wL21pbmd3 L2luY2x1ZGUvd2luZG93cy5oIiAxIDMNCiMgNDAgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUv ZXhjcHQuaCIgMiAzDQojIDUzICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2V4Y3B0LmgiIDMN CnR5cGVkZWYgZW51bSB7DQogICAgICAgIEV4Y2VwdGlvbkNvbnRpbnVlRXhlY3V0aW9uLA0KICAg ICAgICBFeGNlcHRpb25Db250aW51ZVNlYXJjaCwNCiAgICAgICAgRXhjZXB0aW9uTmVzdGVkRXhj ZXB0aW9uLA0KICAgICAgICBFeGNlcHRpb25Db2xsaWRlZFVud2luZA0KfSBFWENFUFRJT05fRElT UE9TSVRJT047DQojIDY3ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2V4Y3B0LmgiIDMNCmV4 dGVybiAiQyIgew0KDQoNCg0KDQoNCg0KdHlwZWRlZiBFWENFUFRJT05fRElTUE9TSVRJT04gKCpQ RVhDRVBUSU9OX0hBTkRMRVIpDQogICAgICAgICAgICAgICAgKHN0cnVjdCBfRVhDRVBUSU9OX1JF Q09SRCosIHZvaWQqLCBzdHJ1Y3QgX0NPTlRFWFQqLCB2b2lkKik7DQoNCg0KDQoNCg0KdHlwZWRl ZiBzdHJ1Y3QgX0VYQ0VQVElPTl9SRUdJU1RSQVRJT04NCnsNCiAgICAgICAgc3RydWN0IF9FWENF UFRJT05fUkVHSVNUUkFUSU9OKiBwcmV2Ow0KICAgICAgICBQRVhDRVBUSU9OX0hBTkRMRVIgaGFu ZGxlcjsNCn0gRVhDRVBUSU9OX1JFR0lTVFJBVElPTiwgKlBFWENFUFRJT05fUkVHSVNUUkFUSU9O Ow0KDQp0eXBlZGVmIEVYQ0VQVElPTl9SRUdJU1RSQVRJT04gRVhDRVBUSU9OX1JFR0lTVFJBVElP Tl9SRUNPUkQ7DQp0eXBlZGVmIFBFWENFUFRJT05fUkVHSVNUUkFUSU9OIFBFWENFUFRJT05fUkVH SVNUUkFUSU9OX1JFQ09SRDsNCiMgMTE2ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2V4Y3B0 LmgiIDMNCn0NCiMgMTAyICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL3dpbmRvd3MuaCIgMiAz DQojIDEgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvd2luYmFzZS5oIiAxIDMNCg0KDQoNCg0K ZXh0ZXJuICJDIiB7DQojIDUwMyAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS93aW5iYXNlLmgi IDMNCnR5cGVkZWYgc3RydWN0IF9GSUxFVElNRSB7DQogICAgICAgIERXT1JEIGR3TG93RGF0ZVRp bWU7DQogICAgICAgIERXT1JEIGR3SGlnaERhdGVUaW1lOw0KfSBGSUxFVElNRSwqUEZJTEVUSU1F LCpMUEZJTEVUSU1FOw0KdHlwZWRlZiBzdHJ1Y3QgX0JZX0hBTkRMRV9GSUxFX0lORk9STUFUSU9O IHsNCiAgICAgICAgRFdPUkQgZHdGaWxlQXR0cmlidXRlczsNCiAgICAgICAgRklMRVRJTUUgZnRD cmVhdGlvblRpbWU7DQogICAgICAgIEZJTEVUSU1FIGZ0TGFzdEFjY2Vzc1RpbWU7DQogICAgICAg IEZJTEVUSU1FIGZ0TGFzdFdyaXRlVGltZTsNCiAgICAgICAgRFdPUkQgZHdWb2x1bWVTZXJpYWxO dW1iZXI7DQogICAgICAgIERXT1JEIG5GaWxlU2l6ZUhpZ2g7DQogICAgICAgIERXT1JEIG5GaWxl U2l6ZUxvdzsNCiAgICAgICAgRFdPUkQgbk51bWJlck9mTGlua3M7DQogICAgICAgIERXT1JEIG5G aWxlSW5kZXhIaWdoOw0KICAgICAgICBEV09SRCBuRmlsZUluZGV4TG93Ow0KfSBCWV9IQU5ETEVf RklMRV9JTkZPUk1BVElPTiwqTFBCWV9IQU5ETEVfRklMRV9JTkZPUk1BVElPTjsNCnR5cGVkZWYg c3RydWN0IF9EQ0Igew0KICAgICAgICBEV09SRCBEQ0JsZW5ndGg7DQogICAgICAgIERXT1JEIEJh dWRSYXRlOw0KICAgICAgICBEV09SRCBmQmluYXJ5OjE7DQogICAgICAgIERXT1JEIGZQYXJpdHk6 MTsNCiAgICAgICAgRFdPUkQgZk91dHhDdHNGbG93OjE7DQogICAgICAgIERXT1JEIGZPdXR4RHNy RmxvdzoxOw0KICAgICAgICBEV09SRCBmRHRyQ29udHJvbDoyOw0KICAgICAgICBEV09SRCBmRHNy U2Vuc2l0aXZpdHk6MTsNCiAgICAgICAgRFdPUkQgZlRYQ29udGludWVPblhvZmY6MTsNCiAgICAg ICAgRFdPUkQgZk91dFg6MTsNCiAgICAgICAgRFdPUkQgZkluWDoxOw0KICAgICAgICBEV09SRCBm RXJyb3JDaGFyOjE7DQogICAgICAgIERXT1JEIGZOdWxsOjE7DQogICAgICAgIERXT1JEIGZSdHND b250cm9sOjI7DQogICAgICAgIERXT1JEIGZBYm9ydE9uRXJyb3I6MTsNCiAgICAgICAgRFdPUkQg ZkR1bW15MjoxNzsNCiAgICAgICAgV09SRCB3UmVzZXJ2ZWQ7DQogICAgICAgIFdPUkQgWG9uTGlt Ow0KICAgICAgICBXT1JEIFhvZmZMaW07DQogICAgICAgIEJZVEUgQnl0ZVNpemU7DQogICAgICAg IEJZVEUgUGFyaXR5Ow0KICAgICAgICBCWVRFIFN0b3BCaXRzOw0KICAgICAgICBjaGFyIFhvbkNo YXI7DQogICAgICAgIGNoYXIgWG9mZkNoYXI7DQogICAgICAgIGNoYXIgRXJyb3JDaGFyOw0KICAg ICAgICBjaGFyIEVvZkNoYXI7DQogICAgICAgIGNoYXIgRXZ0Q2hhcjsNCiAgICAgICAgV09SRCB3 UmVzZXJ2ZWQxOw0KfSBEQ0IsKkxQRENCOw0KdHlwZWRlZiBzdHJ1Y3QgX0NPTU1fQ09ORklHIHsN CiAgICAgICAgRFdPUkQgZHdTaXplOw0KICAgICAgICBXT1JEIHdWZXJzaW9uOw0KICAgICAgICBX T1JEIHdSZXNlcnZlZDsNCiAgICAgICAgRENCIGRjYjsNCiAgICAgICAgRFdPUkQgZHdQcm92aWRl clN1YlR5cGU7DQogICAgICAgIERXT1JEIGR3UHJvdmlkZXJPZmZzZXQ7DQogICAgICAgIERXT1JE IGR3UHJvdmlkZXJTaXplOw0KICAgICAgICBXQ0hBUiB3Y1Byb3ZpZGVyRGF0YVsxXTsNCn0gQ09N TUNPTkZJRywqTFBDT01NQ09ORklHOw0KdHlwZWRlZiBzdHJ1Y3QgX0NPTU1QUk9QIHsNCiAgICAg ICAgV09SRCB3UGFja2V0TGVuZ3RoOw0KICAgICAgICBXT1JEIHdQYWNrZXRWZXJzaW9uOw0KICAg ICAgICBEV09SRCBkd1NlcnZpY2VNYXNrOw0KICAgICAgICBEV09SRCBkd1Jlc2VydmVkMTsNCiAg ICAgICAgRFdPUkQgZHdNYXhUeFF1ZXVlOw0KICAgICAgICBEV09SRCBkd01heFJ4UXVldWU7DQog ICAgICAgIERXT1JEIGR3TWF4QmF1ZDsNCiAgICAgICAgRFdPUkQgZHdQcm92U3ViVHlwZTsNCiAg ICAgICAgRFdPUkQgZHdQcm92Q2FwYWJpbGl0aWVzOw0KICAgICAgICBEV09SRCBkd1NldHRhYmxl UGFyYW1zOw0KICAgICAgICBEV09SRCBkd1NldHRhYmxlQmF1ZDsNCiAgICAgICAgV09SRCB3U2V0 dGFibGVEYXRhOw0KICAgICAgICBXT1JEIHdTZXR0YWJsZVN0b3BQYXJpdHk7DQogICAgICAgIERX T1JEIGR3Q3VycmVudFR4UXVldWU7DQogICAgICAgIERXT1JEIGR3Q3VycmVudFJ4UXVldWU7DQog ICAgICAgIERXT1JEIGR3UHJvdlNwZWMxOw0KICAgICAgICBEV09SRCBkd1Byb3ZTcGVjMjsNCiAg ICAgICAgV0NIQVIgd2NQcm92Q2hhclsxXTsNCn0gQ09NTVBST1AsKkxQQ09NTVBST1A7DQp0eXBl ZGVmIHN0cnVjdCBfQ09NTVRJTUVPVVRTIHsNCiAgICAgICAgRFdPUkQgUmVhZEludGVydmFsVGlt ZW91dDsNCiAgICAgICAgRFdPUkQgUmVhZFRvdGFsVGltZW91dE11bHRpcGxpZXI7DQogICAgICAg IERXT1JEIFJlYWRUb3RhbFRpbWVvdXRDb25zdGFudDsNCiAgICAgICAgRFdPUkQgV3JpdGVUb3Rh bFRpbWVvdXRNdWx0aXBsaWVyOw0KICAgICAgICBEV09SRCBXcml0ZVRvdGFsVGltZW91dENvbnN0 YW50Ow0KfSBDT01NVElNRU9VVFMsKkxQQ09NTVRJTUVPVVRTOw0KdHlwZWRlZiBzdHJ1Y3QgX0NP TVNUQVQgew0KICAgICAgICBEV09SRCBmQ3RzSG9sZDoxOw0KICAgICAgICBEV09SRCBmRHNySG9s ZDoxOw0KICAgICAgICBEV09SRCBmUmxzZEhvbGQ6MTsNCiAgICAgICAgRFdPUkQgZlhvZmZIb2xk OjE7DQogICAgICAgIERXT1JEIGZYb2ZmU2VudDoxOw0KICAgICAgICBEV09SRCBmRW9mOjE7DQog ICAgICAgIERXT1JEIGZUeGltOjE7DQogICAgICAgIERXT1JEIGZSZXNlcnZlZDoyNTsNCiAgICAg ICAgRFdPUkQgY2JJblF1ZTsNCiAgICAgICAgRFdPUkQgY2JPdXRRdWU7DQp9IENPTVNUQVQsKkxQ Q09NU1RBVDsNCnR5cGVkZWYgRFdPUkQgKF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgKkxQ VEhSRUFEX1NUQVJUX1JPVVRJTkUpKExQVk9JRCk7DQp0eXBlZGVmIHN0cnVjdCBfQ1JFQVRFX1BS T0NFU1NfREVCVUdfSU5GTyB7DQogICAgICAgIEhBTkRMRSBoRmlsZTsNCiAgICAgICAgSEFORExF IGhQcm9jZXNzOw0KICAgICAgICBIQU5ETEUgaFRocmVhZDsNCiAgICAgICAgTFBWT0lEIGxwQmFz ZU9mSW1hZ2U7DQogICAgICAgIERXT1JEIGR3RGVidWdJbmZvRmlsZU9mZnNldDsNCiAgICAgICAg RFdPUkQgbkRlYnVnSW5mb1NpemU7DQogICAgICAgIExQVk9JRCBscFRocmVhZExvY2FsQmFzZTsN CiAgICAgICAgTFBUSFJFQURfU1RBUlRfUk9VVElORSBscFN0YXJ0QWRkcmVzczsNCiAgICAgICAg TFBWT0lEIGxwSW1hZ2VOYW1lOw0KICAgICAgICBXT1JEIGZVbmljb2RlOw0KfSBDUkVBVEVfUFJP Q0VTU19ERUJVR19JTkZPLCpMUENSRUFURV9QUk9DRVNTX0RFQlVHX0lORk87DQp0eXBlZGVmIHN0 cnVjdCBfQ1JFQVRFX1RIUkVBRF9ERUJVR19JTkZPIHsNCiAgICAgICAgSEFORExFIGhUaHJlYWQ7 DQogICAgICAgIExQVk9JRCBscFRocmVhZExvY2FsQmFzZTsNCiAgICAgICAgTFBUSFJFQURfU1RB UlRfUk9VVElORSBscFN0YXJ0QWRkcmVzczsNCn0gQ1JFQVRFX1RIUkVBRF9ERUJVR19JTkZPLCpM UENSRUFURV9USFJFQURfREVCVUdfSU5GTzsNCnR5cGVkZWYgc3RydWN0IF9FWENFUFRJT05fREVC VUdfSU5GTyB7DQogICAgICAgIEVYQ0VQVElPTl9SRUNPUkQgRXhjZXB0aW9uUmVjb3JkOw0KICAg ICAgICBEV09SRCBkd0ZpcnN0Q2hhbmNlOw0KfSBFWENFUFRJT05fREVCVUdfSU5GTywqTFBFWENF UFRJT05fREVCVUdfSU5GTzsNCnR5cGVkZWYgc3RydWN0IF9FWElUX1RIUkVBRF9ERUJVR19JTkZP IHsNCiAgICAgICAgRFdPUkQgZHdFeGl0Q29kZTsNCn0gRVhJVF9USFJFQURfREVCVUdfSU5GTywq TFBFWElUX1RIUkVBRF9ERUJVR19JTkZPOw0KdHlwZWRlZiBzdHJ1Y3QgX0VYSVRfUFJPQ0VTU19E RUJVR19JTkZPIHsNCiAgICAgICAgRFdPUkQgZHdFeGl0Q29kZTsNCn0gRVhJVF9QUk9DRVNTX0RF QlVHX0lORk8sKkxQRVhJVF9QUk9DRVNTX0RFQlVHX0lORk87DQp0eXBlZGVmIHN0cnVjdCBfTE9B RF9ETExfREVCVUdfSU5GTyB7DQogICAgICAgIEhBTkRMRSBoRmlsZTsNCiAgICAgICAgTFBWT0lE IGxwQmFzZU9mRGxsOw0KICAgICAgICBEV09SRCBkd0RlYnVnSW5mb0ZpbGVPZmZzZXQ7DQogICAg ICAgIERXT1JEIG5EZWJ1Z0luZm9TaXplOw0KICAgICAgICBMUFZPSUQgbHBJbWFnZU5hbWU7DQog ICAgICAgIFdPUkQgZlVuaWNvZGU7DQp9IExPQURfRExMX0RFQlVHX0lORk8sKkxQTE9BRF9ETExf REVCVUdfSU5GTzsNCnR5cGVkZWYgc3RydWN0IF9VTkxPQURfRExMX0RFQlVHX0lORk8gew0KICAg ICAgICBMUFZPSUQgbHBCYXNlT2ZEbGw7DQp9IFVOTE9BRF9ETExfREVCVUdfSU5GTywqTFBVTkxP QURfRExMX0RFQlVHX0lORk87DQp0eXBlZGVmIHN0cnVjdCBfT1VUUFVUX0RFQlVHX1NUUklOR19J TkZPIHsNCiAgICAgICAgTFBTVFIgbHBEZWJ1Z1N0cmluZ0RhdGE7DQogICAgICAgIFdPUkQgZlVu aWNvZGU7DQogICAgICAgIFdPUkQgbkRlYnVnU3RyaW5nTGVuZ3RoOw0KfSBPVVRQVVRfREVCVUdf U1RSSU5HX0lORk8sKkxQT1VUUFVUX0RFQlVHX1NUUklOR19JTkZPOw0KdHlwZWRlZiBzdHJ1Y3Qg X1JJUF9JTkZPIHsNCiAgICAgICAgRFdPUkQgZHdFcnJvcjsNCiAgICAgICAgRFdPUkQgZHdUeXBl Ow0KfSBSSVBfSU5GTywqTFBSSVBfSU5GTzsNCnR5cGVkZWYgc3RydWN0IF9ERUJVR19FVkVOVCB7 DQogICAgICAgIERXT1JEIGR3RGVidWdFdmVudENvZGU7DQogICAgICAgIERXT1JEIGR3UHJvY2Vz c0lkOw0KICAgICAgICBEV09SRCBkd1RocmVhZElkOw0KICAgICAgICB1bmlvbiB7DQogICAgICAg ICAgICAgICAgRVhDRVBUSU9OX0RFQlVHX0lORk8gRXhjZXB0aW9uOw0KICAgICAgICAgICAgICAg IENSRUFURV9USFJFQURfREVCVUdfSU5GTyBDcmVhdGVUaHJlYWQ7DQogICAgICAgICAgICAgICAg Q1JFQVRFX1BST0NFU1NfREVCVUdfSU5GTyBDcmVhdGVQcm9jZXNzSW5mbzsNCiAgICAgICAgICAg ICAgICBFWElUX1RIUkVBRF9ERUJVR19JTkZPIEV4aXRUaHJlYWQ7DQogICAgICAgICAgICAgICAg RVhJVF9QUk9DRVNTX0RFQlVHX0lORk8gRXhpdFByb2Nlc3M7DQogICAgICAgICAgICAgICAgTE9B RF9ETExfREVCVUdfSU5GTyBMb2FkRGxsOw0KICAgICAgICAgICAgICAgIFVOTE9BRF9ETExfREVC VUdfSU5GTyBVbmxvYWREbGw7DQogICAgICAgICAgICAgICAgT1VUUFVUX0RFQlVHX1NUUklOR19J TkZPIERlYnVnU3RyaW5nOw0KICAgICAgICAgICAgICAgIFJJUF9JTkZPIFJpcEluZm87DQogICAg ICAgIH0gdTsNCn0gREVCVUdfRVZFTlQsKkxQREVCVUdfRVZFTlQ7DQp0eXBlZGVmIHN0cnVjdCBf T1ZFUkxBUFBFRCB7DQogICAgICAgIERXT1JEIEludGVybmFsOw0KICAgICAgICBEV09SRCBJbnRl cm5hbEhpZ2g7DQogICAgICAgIERXT1JEIE9mZnNldDsNCiAgICAgICAgRFdPUkQgT2Zmc2V0SGln aDsNCiAgICAgICAgSEFORExFIGhFdmVudDsNCn0gT1ZFUkxBUFBFRCwqUE9WRVJMQVBQRUQsKkxQ T1ZFUkxBUFBFRDsNCnR5cGVkZWYgc3RydWN0IF9TVEFSVFVQSU5GT0Egew0KICAgICAgICBEV09S RCBjYjsNCiAgICAgICAgTFBTVFIgbHBSZXNlcnZlZDsNCiAgICAgICAgTFBTVFIgbHBEZXNrdG9w Ow0KICAgICAgICBMUFNUUiBscFRpdGxlOw0KICAgICAgICBEV09SRCBkd1g7DQogICAgICAgIERX T1JEIGR3WTsNCiAgICAgICAgRFdPUkQgZHdYU2l6ZTsNCiAgICAgICAgRFdPUkQgZHdZU2l6ZTsN CiAgICAgICAgRFdPUkQgZHdYQ291bnRDaGFyczsNCiAgICAgICAgRFdPUkQgZHdZQ291bnRDaGFy czsNCiAgICAgICAgRFdPUkQgZHdGaWxsQXR0cmlidXRlOw0KICAgICAgICBEV09SRCBkd0ZsYWdz Ow0KICAgICAgICBXT1JEIHdTaG93V2luZG93Ow0KICAgICAgICBXT1JEIGNiUmVzZXJ2ZWQyOw0K ICAgICAgICBQQllURSBscFJlc2VydmVkMjsNCiAgICAgICAgSEFORExFIGhTdGRJbnB1dDsNCiAg ICAgICAgSEFORExFIGhTdGRPdXRwdXQ7DQogICAgICAgIEhBTkRMRSBoU3RkRXJyb3I7DQp9IFNU QVJUVVBJTkZPQSwqTFBTVEFSVFVQSU5GT0E7DQp0eXBlZGVmIHN0cnVjdCBfU1RBUlRVUElORk9X IHsNCiAgICAgICAgRFdPUkQgY2I7DQogICAgICAgIExQV1NUUiBscFJlc2VydmVkOw0KICAgICAg ICBMUFdTVFIgbHBEZXNrdG9wOw0KICAgICAgICBMUFdTVFIgbHBUaXRsZTsNCiAgICAgICAgRFdP UkQgZHdYOw0KICAgICAgICBEV09SRCBkd1k7DQogICAgICAgIERXT1JEIGR3WFNpemU7DQogICAg ICAgIERXT1JEIGR3WVNpemU7DQogICAgICAgIERXT1JEIGR3WENvdW50Q2hhcnM7DQogICAgICAg IERXT1JEIGR3WUNvdW50Q2hhcnM7DQogICAgICAgIERXT1JEIGR3RmlsbEF0dHJpYnV0ZTsNCiAg ICAgICAgRFdPUkQgZHdGbGFnczsNCiAgICAgICAgV09SRCB3U2hvd1dpbmRvdzsNCiAgICAgICAg V09SRCBjYlJlc2VydmVkMjsNCiAgICAgICAgUEJZVEUgbHBSZXNlcnZlZDI7DQogICAgICAgIEhB TkRMRSBoU3RkSW5wdXQ7DQogICAgICAgIEhBTkRMRSBoU3RkT3V0cHV0Ow0KICAgICAgICBIQU5E TEUgaFN0ZEVycm9yOw0KfSBTVEFSVFVQSU5GT1csKkxQU1RBUlRVUElORk9XOw0KdHlwZWRlZiBz dHJ1Y3QgX1BST0NFU1NfSU5GT1JNQVRJT04gew0KICAgICAgICBIQU5ETEUgaFByb2Nlc3M7DQog ICAgICAgIEhBTkRMRSBoVGhyZWFkOw0KICAgICAgICBEV09SRCBkd1Byb2Nlc3NJZDsNCiAgICAg ICAgRFdPUkQgZHdUaHJlYWRJZDsNCn0gUFJPQ0VTU19JTkZPUk1BVElPTiwqTFBQUk9DRVNTX0lO Rk9STUFUSU9OOw0KdHlwZWRlZiBzdHJ1Y3QgX0NSSVRJQ0FMX1NFQ1RJT05fREVCVUcgew0KICAg ICAgICBXT1JEIFR5cGU7DQogICAgICAgIFdPUkQgQ3JlYXRvckJhY2tUcmFjZUluZGV4Ow0KICAg ICAgICBzdHJ1Y3QgX0NSSVRJQ0FMX1NFQ1RJT04gKkNyaXRpY2FsU2VjdGlvbjsNCiAgICAgICAg TElTVF9FTlRSWSBQcm9jZXNzTG9ja3NMaXN0Ow0KICAgICAgICBEV09SRCBFbnRyeUNvdW50Ow0K ICAgICAgICBEV09SRCBDb250ZW50aW9uQ291bnQ7DQogICAgICAgIERXT1JEIFNwYXJlIFsyXTsN Cn0gQ1JJVElDQUxfU0VDVElPTl9ERUJVRywqUENSSVRJQ0FMX1NFQ1RJT05fREVCVUc7DQp0eXBl ZGVmIHN0cnVjdCBfQ1JJVElDQUxfU0VDVElPTiB7DQogICAgICAgIFBDUklUSUNBTF9TRUNUSU9O X0RFQlVHIERlYnVnSW5mbzsNCiAgICAgICAgTE9ORyBMb2NrQ291bnQ7DQogICAgICAgIExPTkcg UmVjdXJzaW9uQ291bnQ7DQogICAgICAgIEhBTkRMRSBPd25pbmdUaHJlYWQ7DQogICAgICAgIEhB TkRMRSBMb2NrU2VtYXBob3JlOw0KICAgICAgICBEV09SRCBTcGluQ291bnQ7DQp9IENSSVRJQ0FM X1NFQ1RJT04sKlBDUklUSUNBTF9TRUNUSU9OLCpMUENSSVRJQ0FMX1NFQ1RJT047DQp0eXBlZGVm IHN0cnVjdCBfU1lTVEVNVElNRSB7DQogICAgICAgIFdPUkQgd1llYXI7DQogICAgICAgIFdPUkQg d01vbnRoOw0KICAgICAgICBXT1JEIHdEYXlPZldlZWs7DQogICAgICAgIFdPUkQgd0RheTsNCiAg ICAgICAgV09SRCB3SG91cjsNCiAgICAgICAgV09SRCB3TWludXRlOw0KICAgICAgICBXT1JEIHdT ZWNvbmQ7DQogICAgICAgIFdPUkQgd01pbGxpc2Vjb25kczsNCn0gU1lTVEVNVElNRSwqTFBTWVNU RU1USU1FOw0KdHlwZWRlZiBzdHJ1Y3QgX1dJTjMyX0ZJTEVfQVRUUklCVVRFX0RBVEEgew0KICAg ICAgICBEV09SRCBkd0ZpbGVBdHRyaWJ1dGVzOw0KICAgICAgICBGSUxFVElNRSBmdENyZWF0aW9u VGltZTsNCiAgICAgICAgRklMRVRJTUUgZnRMYXN0QWNjZXNzVGltZTsNCiAgICAgICAgRklMRVRJ TUUgZnRMYXN0V3JpdGVUaW1lOw0KICAgICAgICBEV09SRCBuRmlsZVNpemVIaWdoOw0KICAgICAg ICBEV09SRCBuRmlsZVNpemVMb3c7DQp9IFdJTjMyX0ZJTEVfQVRUUklCVVRFX0RBVEEsKkxQV0lO MzJfRklMRV9BVFRSSUJVVEVfREFUQTsNCnR5cGVkZWYgc3RydWN0IF9XSU4zMl9GSU5EX0RBVEFB IHsNCiAgICAgICAgRFdPUkQgZHdGaWxlQXR0cmlidXRlczsNCiAgICAgICAgRklMRVRJTUUgZnRD cmVhdGlvblRpbWU7DQogICAgICAgIEZJTEVUSU1FIGZ0TGFzdEFjY2Vzc1RpbWU7DQogICAgICAg IEZJTEVUSU1FIGZ0TGFzdFdyaXRlVGltZTsNCiAgICAgICAgRFdPUkQgbkZpbGVTaXplSGlnaDsN CiAgICAgICAgRFdPUkQgbkZpbGVTaXplTG93Ow0KICAgICAgICBEV09SRCBkd1Jlc2VydmVkMDsN CiAgICAgICAgRFdPUkQgZHdSZXNlcnZlZDE7DQogICAgICAgIENIQVIgY0ZpbGVOYW1lWzI2MF07 DQogICAgICAgIENIQVIgY0FsdGVybmF0ZUZpbGVOYW1lWzE0XTsNCn0gV0lOMzJfRklORF9EQVRB QSwqTFBXSU4zMl9GSU5EX0RBVEFBOw0KdHlwZWRlZiBzdHJ1Y3QgX1dJTjMyX0ZJTkRfREFUQVcg ew0KICAgICAgICBEV09SRCBkd0ZpbGVBdHRyaWJ1dGVzOw0KICAgICAgICBGSUxFVElNRSBmdENy ZWF0aW9uVGltZTsNCiAgICAgICAgRklMRVRJTUUgZnRMYXN0QWNjZXNzVGltZTsNCiAgICAgICAg RklMRVRJTUUgZnRMYXN0V3JpdGVUaW1lOw0KICAgICAgICBEV09SRCBuRmlsZVNpemVIaWdoOw0K ICAgICAgICBEV09SRCBuRmlsZVNpemVMb3c7DQogICAgICAgIERXT1JEIGR3UmVzZXJ2ZWQwOw0K ICAgICAgICBEV09SRCBkd1Jlc2VydmVkMTsNCiAgICAgICAgV0NIQVIgY0ZpbGVOYW1lWzI2MF07 DQogICAgICAgIFdDSEFSIGNBbHRlcm5hdGVGaWxlTmFtZVsxNF07DQp9IFdJTjMyX0ZJTkRfREFU QVcsKkxQV0lOMzJfRklORF9EQVRBVzsNCnR5cGVkZWYgc3RydWN0IF9XSU4zMl9TVFJFQU1fSUQg ew0KICAgICAgICBEV09SRCBkd1N0cmVhbUlkOw0KICAgICAgICBEV09SRCBkd1N0cmVhbUF0dHJp YnV0ZXM7DQogICAgICAgIExBUkdFX0lOVEVHRVIgU2l6ZTsNCiAgICAgICAgRFdPUkQgZHdTdHJl YW1OYW1lU2l6ZTsNCiAgICAgICAgV0NIQVIgY1N0cmVhbU5hbWVbMV07DQp9IFdJTjMyX1NUUkVB TV9JRDsNCnR5cGVkZWYgZW51bSBfRklOREVYX0lORk9fTEVWRUxTIHsNCiAgICAgICAgRmluZEV4 SW5mb1N0YW5kYXJkLA0KICAgICAgICBGaW5kRXhJbmZvTWF4SW5mb0xldmVsDQp9IEZJTkRFWF9J TkZPX0xFVkVMUzsNCnR5cGVkZWYgZW51bSBfRklOREVYX1NFQVJDSF9PUFMgew0KICAgICAgICBG aW5kRXhTZWFyY2hOYW1lTWF0Y2gsDQogICAgICAgIEZpbmRFeFNlYXJjaExpbWl0VG9EaXJlY3Rv cmllcywNCiAgICAgICAgRmluZEV4U2VhcmNoTGltaXRUb0RldmljZXMsDQogICAgICAgIEZpbmRF eFNlYXJjaE1heFNlYXJjaE9wDQp9IEZJTkRFWF9TRUFSQ0hfT1BTOw0KdHlwZWRlZiBlbnVtIF9B Q0xfSU5GT1JNQVRJT05fQ0xBU1Mgew0KICAgICAgICBBY2xSZXZpc2lvbkluZm9ybWF0aW9uPTEs DQogICAgICAgIEFjbFNpemVJbmZvcm1hdGlvbg0KfSBBQ0xfSU5GT1JNQVRJT05fQ0xBU1M7DQp0 eXBlZGVmIHN0cnVjdCB0YWdIV19QUk9GSUxFX0lORk9BIHsNCiAgICAgICAgRFdPUkQgZHdEb2Nr SW5mbzsNCiAgICAgICAgQ0hBUiBzekh3UHJvZmlsZUd1aWRbMzldOw0KICAgICAgICBDSEFSIHN6 SHdQcm9maWxlTmFtZVs4MF07DQp9IEhXX1BST0ZJTEVfSU5GT0EsKkxQSFdfUFJPRklMRV9JTkZP QTsNCnR5cGVkZWYgc3RydWN0IHRhZ0hXX1BST0ZJTEVfSU5GT1cgew0KICAgICAgICBEV09SRCBk d0RvY2tJbmZvOw0KICAgICAgICBXQ0hBUiBzekh3UHJvZmlsZUd1aWRbMzldOw0KICAgICAgICBX Q0hBUiBzekh3UHJvZmlsZU5hbWVbODBdOw0KfSBIV19QUk9GSUxFX0lORk9XLCpMUEhXX1BST0ZJ TEVfSU5GT1c7DQp0eXBlZGVmIGVudW0gX0dFVF9GSUxFRVhfSU5GT19MRVZFTFMgew0KICAgICAg ICBHZXRGaWxlRXhJbmZvU3RhbmRhcmQsDQogICAgICAgIEdldEZpbGVFeE1heEluZm9MZXZlbA0K fSBHRVRfRklMRUVYX0lORk9fTEVWRUxTOw0KdHlwZWRlZiBzdHJ1Y3QgX1NZU1RFTV9JTkZPIHsN CiAgICAgICAgX19leHRlbnNpb25fXyB1bmlvbiB7DQogICAgICAgICAgICAgICAgRFdPUkQgZHdP ZW1JZDsNCiAgICAgICAgICAgICAgICBfX2V4dGVuc2lvbl9fIHN0cnVjdCB7DQogICAgICAgICAg ICAgICAgICAgICAgICBXT1JEIHdQcm9jZXNzb3JBcmNoaXRlY3R1cmU7DQogICAgICAgICAgICAg ICAgICAgICAgICBXT1JEIHdSZXNlcnZlZDsNCiAgICAgICAgICAgICAgICB9IDsNCiAgICAgICAg fSA7DQogICAgICAgIERXT1JEIGR3UGFnZVNpemU7DQogICAgICAgIFBWT0lEIGxwTWluaW11bUFw cGxpY2F0aW9uQWRkcmVzczsNCiAgICAgICAgUFZPSUQgbHBNYXhpbXVtQXBwbGljYXRpb25BZGRy ZXNzOw0KICAgICAgICBEV09SRCBkd0FjdGl2ZVByb2Nlc3Nvck1hc2s7DQogICAgICAgIERXT1JE IGR3TnVtYmVyT2ZQcm9jZXNzb3JzOw0KICAgICAgICBEV09SRCBkd1Byb2Nlc3NvclR5cGU7DQog ICAgICAgIERXT1JEIGR3QWxsb2NhdGlvbkdyYW51bGFyaXR5Ow0KICAgICAgICBXT1JEIHdQcm9j ZXNzb3JMZXZlbDsNCiAgICAgICAgV09SRCB3UHJvY2Vzc29yUmV2aXNpb247DQp9IFNZU1RFTV9J TkZPLCpMUFNZU1RFTV9JTkZPOw0KdHlwZWRlZiBzdHJ1Y3QgX1NZU1RFTV9QT1dFUl9TVEFUVVMg ew0KICAgICAgICBCWVRFIEFDTGluZVN0YXR1czsNCiAgICAgICAgQllURSBCYXR0ZXJ5RmxhZzsN CiAgICAgICAgQllURSBCYXR0ZXJ5TGlmZVBlcmNlbnQ7DQogICAgICAgIEJZVEUgUmVzZXJ2ZWQx Ow0KICAgICAgICBEV09SRCBCYXR0ZXJ5TGlmZVRpbWU7DQogICAgICAgIERXT1JEIEJhdHRlcnlG dWxsTGlmZVRpbWU7DQp9IFNZU1RFTV9QT1dFUl9TVEFUVVMsKkxQU1lTVEVNX1BPV0VSX1NUQVRV UzsNCnR5cGVkZWYgc3RydWN0IF9USU1FX1pPTkVfSU5GT1JNQVRJT04gew0KICAgICAgICBMT05H IEJpYXM7DQogICAgICAgIFdDSEFSIFN0YW5kYXJkTmFtZVszMl07DQogICAgICAgIFNZU1RFTVRJ TUUgU3RhbmRhcmREYXRlOw0KICAgICAgICBMT05HIFN0YW5kYXJkQmlhczsNCiAgICAgICAgV0NI QVIgRGF5bGlnaHROYW1lWzMyXTsNCiAgICAgICAgU1lTVEVNVElNRSBEYXlsaWdodERhdGU7DQog ICAgICAgIExPTkcgRGF5bGlnaHRCaWFzOw0KfSBUSU1FX1pPTkVfSU5GT1JNQVRJT04sKkxQVElN RV9aT05FX0lORk9STUFUSU9OOw0KdHlwZWRlZiBzdHJ1Y3QgX09TVkVSU0lPTklORk9BIHsNCiAg ICAgICAgRFdPUkQgZHdPU1ZlcnNpb25JbmZvU2l6ZTsNCiAgICAgICAgRFdPUkQgZHdNYWpvclZl cnNpb247DQogICAgICAgIERXT1JEIGR3TWlub3JWZXJzaW9uOw0KICAgICAgICBEV09SRCBkd0J1 aWxkTnVtYmVyOw0KICAgICAgICBEV09SRCBkd1BsYXRmb3JtSWQ7DQogICAgICAgIENIQVIgc3pD U0RWZXJzaW9uWzEyOF07DQp9IE9TVkVSU0lPTklORk9BLCpQT1NWRVJTSU9OSU5GT0EsKkxQT1NW RVJTSU9OSU5GT0E7DQp0eXBlZGVmIHN0cnVjdCBfT1NWRVJTSU9OSU5GT1cgew0KICAgICAgICBE V09SRCBkd09TVmVyc2lvbkluZm9TaXplOw0KICAgICAgICBEV09SRCBkd01ham9yVmVyc2lvbjsN CiAgICAgICAgRFdPUkQgZHdNaW5vclZlcnNpb247DQogICAgICAgIERXT1JEIGR3QnVpbGROdW1i ZXI7DQogICAgICAgIERXT1JEIGR3UGxhdGZvcm1JZDsNCiAgICAgICAgV0NIQVIgc3pDU0RWZXJz aW9uWzEyOF07DQp9IE9TVkVSU0lPTklORk9XLCpQT1NWRVJTSU9OSU5GT1csKkxQT1NWRVJTSU9O SU5GT1c7DQp0eXBlZGVmIHN0cnVjdCBfTUVNT1JZU1RBVFVTIHsNCiAgICAgICAgRFdPUkQgZHdM ZW5ndGg7DQogICAgICAgIERXT1JEIGR3TWVtb3J5TG9hZDsNCiAgICAgICAgRFdPUkQgZHdUb3Rh bFBoeXM7DQogICAgICAgIERXT1JEIGR3QXZhaWxQaHlzOw0KICAgICAgICBEV09SRCBkd1RvdGFs UGFnZUZpbGU7DQogICAgICAgIERXT1JEIGR3QXZhaWxQYWdlRmlsZTsNCiAgICAgICAgRFdPUkQg ZHdUb3RhbFZpcnR1YWw7DQogICAgICAgIERXT1JEIGR3QXZhaWxWaXJ0dWFsOw0KfSBNRU1PUllT VEFUVVMsKkxQTUVNT1JZU1RBVFVTOw0KdHlwZWRlZiBzdHJ1Y3QgX0xEVF9FTlRSWSB7DQogICAg ICAgIFdPUkQgTGltaXRMb3c7DQogICAgICAgIFdPUkQgQmFzZUxvdzsNCiAgICAgICAgdW5pb24g ew0KICAgICAgICAgICAgICAgIHN0cnVjdCB7DQogICAgICAgICAgICAgICAgICAgICAgICBCWVRF IEJhc2VNaWQ7DQogICAgICAgICAgICAgICAgICAgICAgICBCWVRFIEZsYWdzMTsNCiAgICAgICAg ICAgICAgICAgICAgICAgIEJZVEUgRmxhZ3MyOw0KICAgICAgICAgICAgICAgICAgICAgICAgQllU RSBCYXNlSGk7DQogICAgICAgICAgICAgICAgfSBCeXRlczsNCiAgICAgICAgICAgICAgICBzdHJ1 Y3Qgew0KICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgQmFzZU1pZDo4Ow0KICAgICAgICAg ICAgICAgICAgICAgICAgRFdPUkQgVHlwZTo1Ow0KICAgICAgICAgICAgICAgICAgICAgICAgRFdP UkQgRHBsOjI7DQogICAgICAgICAgICAgICAgICAgICAgICBEV09SRCBQcmVzOjE7DQogICAgICAg ICAgICAgICAgICAgICAgICBEV09SRCBMaW1pdEhpOjQ7DQogICAgICAgICAgICAgICAgICAgICAg ICBEV09SRCBTeXM6MTsNCiAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEIFJlc2VydmVkXzA6 MTsNCiAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEIERlZmF1bHRfQmlnOjE7DQogICAgICAg ICAgICAgICAgICAgICAgICBEV09SRCBHcmFudWxhcml0eToxOw0KICAgICAgICAgICAgICAgICAg ICAgICAgRFdPUkQgQmFzZUhpOjg7DQogICAgICAgICAgICAgICAgfSBCaXRzOw0KICAgICAgICB9 IEhpZ2hXb3JkOw0KfSBMRFRfRU5UUlksKlBMRFRfRU5UUlksKkxQTERUX0VOVFJZOw0KdHlwZWRl ZiBzdHJ1Y3QgX1BST0NFU1NfSEVBUF9FTlRSWSB7DQogICAgICAgIFBWT0lEIGxwRGF0YTsNCiAg ICAgICAgRFdPUkQgY2JEYXRhOw0KICAgICAgICBCWVRFIGNiT3ZlcmhlYWQ7DQogICAgICAgIEJZ VEUgaVJlZ2lvbkluZGV4Ow0KICAgICAgICBXT1JEIHdGbGFnczsNCiAgICAgICAgX19leHRlbnNp b25fXyB1bmlvbiB7DQogICAgICAgICAgICAgICAgc3RydWN0IHsNCiAgICAgICAgICAgICAgICAg ICAgICAgIEhBTkRMRSBoTWVtOw0KICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgZHdSZXNl cnZlZFszXTsNCiAgICAgICAgICAgICAgICB9IEJsb2NrOw0KICAgICAgICAgICAgICAgIHN0cnVj dCB7DQogICAgICAgICAgICAgICAgICAgICAgICBEV09SRCBkd0NvbW1pdHRlZFNpemU7DQogICAg ICAgICAgICAgICAgICAgICAgICBEV09SRCBkd1VuQ29tbWl0dGVkU2l6ZTsNCiAgICAgICAgICAg ICAgICAgICAgICAgIExQVk9JRCBscEZpcnN0QmxvY2s7DQogICAgICAgICAgICAgICAgICAgICAg ICBMUFZPSUQgbHBMYXN0QmxvY2s7DQogICAgICAgICAgICAgICAgfSBSZWdpb247DQogICAgICAg IH0gOw0KfSBQUk9DRVNTX0hFQVBfRU5UUlksKkxQUFJPQ0VTU19IRUFQX0VOVFJZOw0KdHlwZWRl ZiBzdHJ1Y3QgX09GU1RSVUNUIHsNCiAgICAgICAgQllURSBjQnl0ZXM7DQogICAgICAgIEJZVEUg ZkZpeGVkRGlzazsNCiAgICAgICAgV09SRCBuRXJyQ29kZTsNCiAgICAgICAgV09SRCBSZXNlcnZl ZDE7DQogICAgICAgIFdPUkQgUmVzZXJ2ZWQyOw0KICAgICAgICBDSEFSIHN6UGF0aE5hbWVbMTI4 XTsNCn0gT0ZTVFJVQ1QsKkxQT0ZTVFJVQ1QsKlBPRlNUUlVDVDsNCnR5cGVkZWYgc3RydWN0IF9X SU5fQ0VSVElGSUNBVEUgew0KICAgICAgRFdPUkQgZHdMZW5ndGg7DQogICAgICBXT1JEIHdSZXZp c2lvbjsNCiAgICAgIFdPUkQgd0NlcnRpZmljYXRlVHlwZTsNCiAgICAgIEJZVEUgYkNlcnRpZmlj YXRlWzFdOw0KfSBXSU5fQ0VSVElGSUNBVEUsICpMUFdJTl9DRVJUSUZJQ0FURTsNCg0KdHlwZWRl ZiBEV09SRChfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpICpMUFBST0dSRVNTX1JPVVRJTkUp KExBUkdFX0lOVEVHRVIsTEFSR0VfSU5URUdFUixMQVJHRV9JTlRFR0VSLExBUkdFX0lOVEVHRVIs RFdPUkQsRFdPUkQsSEFORExFLEhBTkRMRSxMUFZPSUQpOw0KdHlwZWRlZiB2b2lkKF9fYXR0cmli dXRlX18oKF9fc3RkY2FsbF9fKSkgKkxQRklCRVJfU1RBUlRfUk9VVElORSkoUFZPSUQpOw0KdHlw ZWRlZiBCT09MKF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgKkVOVU1SRVNMQU5HUFJPQyko SE1PRFVMRSxMUENUU1RSLExQQ1RTVFIsV09SRCxMT05HKTsNCnR5cGVkZWYgQk9PTChfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpICpFTlVNUkVTTkFNRVBST0MpKEhNT0RVTEUsTFBDVFNUUixM UFRTVFIsTE9ORyk7DQp0eXBlZGVmIEJPT0woX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSAq RU5VTVJFU1RZUEVQUk9DKShITU9EVUxFLExQVFNUUixMT05HKTsNCnR5cGVkZWYgdm9pZChfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpICpMUE9WRVJMQVBQRURfQ09NUExFVElPTl9ST1VUSU5F KShEV09SRCxEV09SRCxMUE9WRVJMQVBQRUQpOw0KdHlwZWRlZiBMT05HKF9fYXR0cmlidXRlX18o KF9fc3RkY2FsbF9fKSkgKlBUT1BfTEVWRUxfRVhDRVBUSU9OX0ZJTFRFUikoTFBFWENFUFRJT05f UE9JTlRFUlMpOw0KdHlwZWRlZiBQVE9QX0xFVkVMX0VYQ0VQVElPTl9GSUxURVIgTFBUT1BfTEVW RUxfRVhDRVBUSU9OX0ZJTFRFUjsNCnR5cGVkZWYgdm9pZChfX2F0dHJpYnV0ZV9fKChfX3N0ZGNh bGxfXykpICpQQVBDRlVOQykoRFdPUkQpOw0KdHlwZWRlZiB2b2lkKF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgKlBUSU1FUkFQQ1JPVVRJTkUpKFBWT0lELERXT1JELERXT1JEKTsNCg0KDQoN CmludCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFdpbk1haW4oSElOU1RBTkNFLEhJTlNU QU5DRSxMUFNUUixpbnQpOw0KDQoNCg0KaW50IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg d1dpbk1haW4oSElOU1RBTkNFLEhJTlNUQU5DRSxMUFdTVFIsaW50KTsNCmxvbmcgX19hdHRyaWJ1 dGVfXygoX19zdGRjYWxsX18pKSBfaHJlYWQoSEZJTEUsTFBWT0lELGxvbmcpOw0KbG9uZyBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIF9od3JpdGUoSEZJTEUsTFBDU1RSLGxvbmcpOw0KSEZJ TEUgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBfbGNsb3NlKEhGSUxFKTsNCkhGSUxFIF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgX2xjcmVhdChMUENTVFIsaW50KTsNCkxPTkcgX19h dHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBfbGxzZWVrKEhGSUxFLExPTkcsaW50KTsNCkhGSUxF IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgX2xvcGVuKExQQ1NUUixpbnQpOw0KVUlOVCBf X2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIF9scmVhZChIRklMRSxMUFZPSUQsVUlOVCk7DQpV SU5UIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgX2x3cml0ZShIRklMRSxMUENTVFIsVUlO VCk7DQoNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBBY2Nlc3NDaGVjayhQU0VD VVJJVFlfREVTQ1JJUFRPUixIQU5ETEUsRFdPUkQsUEdFTkVSSUNfTUFQUElORyxQUFJJVklMRUdF X1NFVCxQRFdPUkQsUERXT1JELFBCT09MKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBBY2Nlc3NDaGVja0FuZEF1ZGl0QWxhcm1BKExQQ1NUUixMUFZPSUQsTFBTVFIsTFBTVFIs UFNFQ1VSSVRZX0RFU0NSSVBUT1IsRFdPUkQsUEdFTkVSSUNfTUFQUElORyxCT09MLFBEV09SRCxQ Qk9PTCxQQk9PTCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQWNjZXNzQ2hl Y2tBbmRBdWRpdEFsYXJtVyhMUENXU1RSLExQVk9JRCxMUFdTVFIsTFBXU1RSLFBTRUNVUklUWV9E RVNDUklQVE9SLERXT1JELFBHRU5FUklDX01BUFBJTkcsQk9PTCxQRFdPUkQsUEJPT0wsUEJPT0wp Ow0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEFkZEFjY2Vzc0FsbG93ZWRBY2Uo UEFDTCxEV09SRCxEV09SRCxQU0lEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSBBZGRBY2Nlc3NEZW5pZWRBY2UoUEFDTCxEV09SRCxEV09SRCxQU0lEKTsNCkJPT0wgX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBBZGRBY2UoUEFDTCxEV09SRCxEV09SRCxQVk9JRCxEV09S RCk7DQpBVE9NIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQWRkQXRvbUEoTFBDU1RSKTsN CkFUT00gX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBBZGRBdG9tVyhMUENXU1RSKTsNCkJP T0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBBZGRBdWRpdEFjY2Vzc0FjZShQQUNMLERX T1JELERXT1JELFBTSUQsQk9PTCxCT09MKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBBZGp1c3RUb2tlbkdyb3VwcyhIQU5ETEUsQk9PTCxQVE9LRU5fR1JPVVBTLERXT1JELFBU T0tFTl9HUk9VUFMsUERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBB ZGp1c3RUb2tlblByaXZpbGVnZXMoSEFORExFLEJPT0wsUFRPS0VOX1BSSVZJTEVHRVMsRFdPUkQs UFRPS0VOX1BSSVZJTEVHRVMsUERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBBbGxvY2F0ZUFuZEluaXRpYWxpemVTaWQoUFNJRF9JREVOVElGSUVSX0FVVEhPUklUWSxC WVRFLERXT1JELERXT1JELERXT1JELERXT1JELERXT1JELERXT1JELERXT1JELERXT1JELFBTSUQq KTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBBbGxvY2F0ZUxvY2FsbHlVbmlx dWVJZChQTFVJRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQXJlQWxsQWNj ZXNzZXNHcmFudGVkKERXT1JELERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBBcmVBbnlBY2Nlc3Nlc0dyYW50ZWQoRFdPUkQsRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpIEFyZUZpbGVBcGlzQU5TSSh2b2lkKTsNCkJPT0wgX19hdHRyaWJ1 dGVfXygoX19zdGRjYWxsX18pKSBCYWNrdXBFdmVudExvZ0EoSEFORExFLExQQ1NUUik7DQpCT09M IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQmFja3VwRXZlbnRMb2dXKEhBTkRMRSxMUENX U1RSKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBCYWNrdXBSZWFkKEhBTkRM RSxQQllURSxEV09SRCxQRFdPUkQsQk9PTCxCT09MLFBWT0lEKTsNCkJPT0wgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBCYWNrdXBTZWVrKEhBTkRMRSxEV09SRCxEV09SRCxQRFdPUkQsUERX T1JELFBWT0lEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBCYWNrdXBXcml0 ZShIQU5ETEUsUEJZVEUsRFdPUkQsUERXT1JELEJPT0wsQk9PTCxQVk9JRCk7DQpCT09MIF9fYXR0 cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQmVlcChEV09SRCxEV09SRCk7DQpIQU5ETEUgX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBCZWdpblVwZGF0ZVJlc291cmNlQShMUENTVFIsQk9PTCk7 DQpIQU5ETEUgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBCZWdpblVwZGF0ZVJlc291cmNl VyhMUENXU1RSLEJPT0wpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEJ1aWxk Q29tbURDQkEoTFBDU1RSLExQRENCKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSBCdWlsZENvbW1EQ0JXKExQQ1dTVFIsTFBEQ0IpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIEJ1aWxkQ29tbURDQkFuZFRpbWVvdXRzQShMUENTVFIsTFBEQ0IsTFBDT01NVElN RU9VVFMpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEJ1aWxkQ29tbURDQkFu ZFRpbWVvdXRzVyhMUENXU1RSLExQRENCLExQQ09NTVRJTUVPVVRTKTsNCkJPT0wgX19hdHRyaWJ1 dGVfXygoX19zdGRjYWxsX18pKSBDYWxsTmFtZWRQaXBlQShMUENTVFIsUFZPSUQsRFdPUkQsUFZP SUQsRFdPUkQsUERXT1JELERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSBDYWxsTmFtZWRQaXBlVyhMUENXU1RSLFBWT0lELERXT1JELFBWT0lELERXT1JELFBEV09SRCxE V09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQ2FuY2VsSW8oSEFORExF KTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBDYW5jZWxXYWl0YWJsZVRpbWVy KEhBTkRMRSk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQ2xlYXJDb21tQnJl YWsoSEFORExFKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBDbGVhckNvbW1F cnJvcihIQU5ETEUsUERXT1JELExQQ09NU1RBVCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3Rk Y2FsbF9fKSkgQ2xlYXJFdmVudExvZ0EoSEFORExFLExQQ1NUUik7DQpCT09MIF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgQ2xlYXJFdmVudExvZ1coSEFORExFLExQQ1dTVFIpOw0KQk9PTCBf X2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIENsb3NlRXZlbnRMb2coSEFORExFKTsNCkJPT0wg X19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBDbG9zZUhhbmRsZShIQU5ETEUpOw0KQk9PTCBf X2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIENvbW1Db25maWdEaWFsb2dBKExQQ1NUUixIV05E LExQQ09NTUNPTkZJRyk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQ29tbUNv bmZpZ0RpYWxvZ1coTFBDV1NUUixIV05ELExQQ09NTUNPTkZJRyk7DQpMT05HIF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgQ29tcGFyZUZpbGVUaW1lKGNvbnN0IEZJTEVUSU1FKixjb25zdCBG SUxFVElNRSopOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIENvbm5lY3ROYW1l ZFBpcGUoSEFORExFLExQT1ZFUkxBUFBFRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2Fs bF9fKSkgQ29udGludWVEZWJ1Z0V2ZW50KERXT1JELERXT1JELERXT1JEKTsNClBWT0lEIF9fYXR0 cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQ29udmVydFRocmVhZFRvRmliZXIoUFZPSUQpOw0KQk9P TCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIENvcHlGaWxlQShMUENTVFIsTFBDU1RSLEJP T0wpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIENvcHlGaWxlVyhMUENXU1RS LExQQ1dTVFIsQk9PTCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQ29weUZp bGVFeEEoTFBDU1RSLExQQ1NUUixMUFBST0dSRVNTX1JPVVRJTkUsTFBWT0lELExQQk9PTCxEV09S RCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQ29weUZpbGVFeFcoTFBDV1NU UixMUENXU1RSLExQUFJPR1JFU1NfUk9VVElORSxMUFZPSUQsTFBCT09MLERXT1JEKTsNCiMgMTAx MSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS93aW5iYXNlLmgiIDMNCkJPT0wgX19hdHRyaWJ1 dGVfXygoX19zdGRjYWxsX18pKSBDb3B5U2lkKERXT1JELFBTSUQsUFNJRCk7DQpCT09MIF9fYXR0 cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQ3JlYXRlRGlyZWN0b3J5QShMUENTVFIsTFBTRUNVUklU WV9BVFRSSUJVVEVTKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBDcmVhdGVE aXJlY3RvcnlXKExQQ1dTVFIsTFBTRUNVUklUWV9BVFRSSUJVVEVTKTsNCkJPT0wgX19hdHRyaWJ1 dGVfXygoX19zdGRjYWxsX18pKSBDcmVhdGVEaXJlY3RvcnlFeEEoTFBDU1RSLExQQ1NUUixMUFNF Q1VSSVRZX0FUVFJJQlVURVMpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIENy ZWF0ZURpcmVjdG9yeUV4VyhMUENXU1RSLExQQ1dTVFIsTFBTRUNVUklUWV9BVFRSSUJVVEVTKTsN CkhBTkRMRSBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIENyZWF0ZUV2ZW50QShMUFNFQ1VS SVRZX0FUVFJJQlVURVMsQk9PTCxCT09MLExQQ1NUUik7DQpIQU5ETEUgX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSBDcmVhdGVFdmVudFcoTFBTRUNVUklUWV9BVFRSSUJVVEVTLEJPT0wsQk9P TCxMUENXU1RSKTsNCkxQVk9JRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIENyZWF0ZUZp YmVyKERXT1JELExQRklCRVJfU1RBUlRfUk9VVElORSxMUFZPSUQpOw0KSEFORExFIF9fYXR0cmli dXRlX18oKF9fc3RkY2FsbF9fKSkgQ3JlYXRlRmlsZUEoTFBDU1RSLERXT1JELERXT1JELExQU0VD VVJJVFlfQVRUUklCVVRFUyxEV09SRCxEV09SRCxIQU5ETEUpOw0KSEFORExFIF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgQ3JlYXRlRmlsZVcoTFBDV1NUUixEV09SRCxEV09SRCxMUFNFQ1VS SVRZX0FUVFJJQlVURVMsRFdPUkQsRFdPUkQsSEFORExFKTsNCkhBTkRMRSBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIENyZWF0ZUZpbGVNYXBwaW5nQShIQU5ETEUsTFBTRUNVUklUWV9BVFRS SUJVVEVTLERXT1JELERXT1JELERXT1JELExQQ1NUUik7DQpIQU5ETEUgX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSBDcmVhdGVGaWxlTWFwcGluZ1coSEFORExFLExQU0VDVVJJVFlfQVRUUklC VVRFUyxEV09SRCxEV09SRCxEV09SRCxMUENXU1RSKTsNCkhBTkRMRSBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIENyZWF0ZUhhcmRMaW5rQShMUENTVFIsTFBDU1RSLExQU0VDVVJJVFlfQVRU UklCVVRFUyk7DQpIQU5ETEUgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBDcmVhdGVIYXJk TGlua1coTFBDV1NUUixMUENXU1RSLExQU0VDVVJJVFlfQVRUUklCVVRFUyk7DQpIQU5ETEUgX19h dHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBDcmVhdGVJb0NvbXBsZXRpb25Qb3J0KEhBTkRMRSxI QU5ETEUsRFdPUkQsRFdPUkQpOw0KSEFORExFIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg Q3JlYXRlTWFpbHNsb3RBKExQQ1NUUixEV09SRCxEV09SRCxMUFNFQ1VSSVRZX0FUVFJJQlVURVMp Ow0KSEFORExFIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQ3JlYXRlTWFpbHNsb3RXKExQ Q1dTVFIsRFdPUkQsRFdPUkQsTFBTRUNVUklUWV9BVFRSSUJVVEVTKTsNCkhBTkRMRSBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIENyZWF0ZU11dGV4QShMUFNFQ1VSSVRZX0FUVFJJQlVURVMs Qk9PTCxMUENTVFIpOw0KSEFORExFIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQ3JlYXRl TXV0ZXhXKExQU0VDVVJJVFlfQVRUUklCVVRFUyxCT09MLExQQ1dTVFIpOw0KSEFORExFIF9fYXR0 cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQ3JlYXRlTmFtZWRQaXBlQShMUENTVFIsRFdPUkQsRFdP UkQsRFdPUkQsRFdPUkQsRFdPUkQsRFdPUkQsTFBTRUNVUklUWV9BVFRSSUJVVEVTKTsNCkhBTkRM RSBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIENyZWF0ZU5hbWVkUGlwZVcoTFBDV1NUUixE V09SRCxEV09SRCxEV09SRCxEV09SRCxEV09SRCxEV09SRCxMUFNFQ1VSSVRZX0FUVFJJQlVURVMp Ow0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIENyZWF0ZVBpcGUoUEhBTkRMRSxQ SEFORExFLExQU0VDVVJJVFlfQVRUUklCVVRFUyxEV09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18o KF9fc3RkY2FsbF9fKSkgQ3JlYXRlUHJpdmF0ZU9iamVjdFNlY3VyaXR5KFBTRUNVUklUWV9ERVND UklQVE9SLFBTRUNVUklUWV9ERVNDUklQVE9SLFBTRUNVUklUWV9ERVNDUklQVE9SKixCT09MLEhB TkRMRSxQR0VORVJJQ19NQVBQSU5HKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSBDcmVhdGVQcm9jZXNzQShMUENTVFIsTFBTVFIsTFBTRUNVUklUWV9BVFRSSUJVVEVTLExQU0VD VVJJVFlfQVRUUklCVVRFUyxCT09MLERXT1JELFBWT0lELExQQ1NUUixMUFNUQVJUVVBJTkZPQSxM UFBST0NFU1NfSU5GT1JNQVRJT04pOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykp IENyZWF0ZVByb2Nlc3NXKExQQ1dTVFIsTFBXU1RSLExQU0VDVVJJVFlfQVRUUklCVVRFUyxMUFNF Q1VSSVRZX0FUVFJJQlVURVMsQk9PTCxEV09SRCxQVk9JRCxMUENXU1RSLExQU1RBUlRVUElORk9X LExQUFJPQ0VTU19JTkZPUk1BVElPTik7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgQ3JlYXRlUHJvY2Vzc0FzVXNlckEoSEFORExFLExQQ1NUUixMUFNUUixMUFNFQ1VSSVRZX0FU VFJJQlVURVMsTFBTRUNVUklUWV9BVFRSSUJVVEVTLEJPT0wsRFdPUkQsUFZPSUQsTFBDU1RSLExQ U1RBUlRVUElORk9BLExQUFJPQ0VTU19JTkZPUk1BVElPTik7DQpCT09MIF9fYXR0cmlidXRlX18o KF9fc3RkY2FsbF9fKSkgQ3JlYXRlUHJvY2Vzc0FzVXNlclcoSEFORExFLExQQ1dTVFIsTFBXU1RS LExQU0VDVVJJVFlfQVRUUklCVVRFUyxMUFNFQ1VSSVRZX0FUVFJJQlVURVMsQk9PTCxEV09SRCxQ Vk9JRCxMUENXU1RSLExQU1RBUlRVUElORk9XLExQUFJPQ0VTU19JTkZPUk1BVElPTik7DQpIQU5E TEUgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBDcmVhdGVSZW1vdGVUaHJlYWQoSEFORExF LExQU0VDVVJJVFlfQVRUUklCVVRFUyxEV09SRCxMUFRIUkVBRF9TVEFSVF9ST1VUSU5FLExQVk9J RCxEV09SRCxMUERXT1JEKTsNCkhBTkRMRSBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIENy ZWF0ZVNlbWFwaG9yZUEoTFBTRUNVUklUWV9BVFRSSUJVVEVTLExPTkcsTE9ORyxMUENTVFIpOw0K SEFORExFIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQ3JlYXRlU2VtYXBob3JlVyhMUFNF Q1VSSVRZX0FUVFJJQlVURVMsTE9ORyxMT05HLExQQ1dTVFIpOw0KRFdPUkQgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBDcmVhdGVUYXBlUGFydGl0aW9uKEhBTkRMRSxEV09SRCxEV09SRCxE V09SRCk7DQpIQU5ETEUgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBDcmVhdGVUaHJlYWQo TFBTRUNVUklUWV9BVFRSSUJVVEVTLERXT1JELExQVEhSRUFEX1NUQVJUX1JPVVRJTkUsUFZPSUQs RFdPUkQsUERXT1JEKTsNCkhBTkRMRSBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIENyZWF0 ZVdhaXRhYmxlVGltZXJBKExQU0VDVVJJVFlfQVRUUklCVVRFUyxCT09MLExQQ1NUUik7DQpIQU5E TEUgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBDcmVhdGVXYWl0YWJsZVRpbWVyVyhMUFNF Q1VSSVRZX0FUVFJJQlVURVMsQk9PTCxMUENXU1RSKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBEZWJ1Z0FjdGl2ZVByb2Nlc3MoRFdPUkQpOw0Kdm9pZCBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIERlYnVnQnJlYWsodm9pZCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgRGVmaW5lRG9zRGV2aWNlQShEV09SRCxMUENTVFIsTFBDU1RSKTsNCkJPT0wg X19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBEZWZpbmVEb3NEZXZpY2VXKERXT1JELExQQ1dT VFIsTFBDV1NUUik7DQoNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBEZWxldGVB Y2UoUEFDTCxEV09SRCk7DQpBVE9NIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRGVsZXRl QXRvbShBVE9NKTsNCnZvaWQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBEZWxldGVDcml0 aWNhbFNlY3Rpb24oUENSSVRJQ0FMX1NFQ1RJT04pOw0Kdm9pZCBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIERlbGV0ZUZpYmVyKFBWT0lEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBEZWxldGVGaWxlQShMUENTVFIpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNh bGxfXykpIERlbGV0ZUZpbGVXKExQQ1dTVFIpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNh bGxfXykpIERlcmVnaXN0ZXJFdmVudFNvdXJjZShIQU5ETEUpOw0KQk9PTCBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIERlc3Ryb3lQcml2YXRlT2JqZWN0U2VjdXJpdHkoUFNFQ1VSSVRZX0RF U0NSSVBUT1IqKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBEZXZpY2VJb0Nv bnRyb2woSEFORExFLERXT1JELFBWT0lELERXT1JELFBWT0lELERXT1JELFBEV09SRCxQT1ZFUkxB UFBFRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRGlzYWJsZVRocmVhZExp YnJhcnlDYWxscyhITU9EVUxFKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBE aXNjb25uZWN0TmFtZWRQaXBlKEhBTkRMRSk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2Fs bF9fKSkgRG9zRGF0ZVRpbWVUb0ZpbGVUaW1lKFdPUkQsV09SRCxMUEZJTEVUSU1FKTsNCkJPT0wg X19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBEdXBsaWNhdGVIYW5kbGUoSEFORExFLEhBTkRM RSxIQU5ETEUsUEhBTkRMRSxEV09SRCxCT09MLERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSBEdXBsaWNhdGVUb2tlbihIQU5ETEUsU0VDVVJJVFlfSU1QRVJTT05BVElP Tl9MRVZFTCxQSEFORExFKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBEdXBs aWNhdGVUb2tlbkV4KEhBTkRMRSxEV09SRCxMUFNFQ1VSSVRZX0FUVFJJQlVURVMsU0VDVVJJVFlf SU1QRVJTT05BVElPTl9MRVZFTCxUT0tFTl9UWVBFLFBIQU5ETEUpOw0KQk9PTCBfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpIEVuZFVwZGF0ZVJlc291cmNlQShIQU5ETEUsQk9PTCk7DQpCT09M IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRW5kVXBkYXRlUmVzb3VyY2VXKEhBTkRMRSxC T09MKTsNCnZvaWQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBFbnRlckNyaXRpY2FsU2Vj dGlvbihMUENSSVRJQ0FMX1NFQ1RJT04pOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxf XykpIEVudW1SZXNvdXJjZUxhbmd1YWdlc0EoSElOU1RBTkNFLExQQ1NUUixMUENTVFIsRU5VTVJF U0xBTkdQUk9DLExPTkcpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEVudW1S ZXNvdXJjZUxhbmd1YWdlc1coSElOU1RBTkNFLExQQ1dTVFIsTFBDV1NUUixFTlVNUkVTTEFOR1BS T0MsTE9ORyk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRW51bVJlc291cmNl TmFtZXNBKEhJTlNUQU5DRSxMUENTVFIsRU5VTVJFU05BTUVQUk9DLExPTkcpOw0KQk9PTCBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEVudW1SZXNvdXJjZU5hbWVzVyhISU5TVEFOQ0UsTFBD V1NUUixFTlVNUkVTTkFNRVBST0MsTE9ORyk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2Fs bF9fKSkgRW51bVJlc291cmNlVHlwZXNBKEhJTlNUQU5DRSxFTlVNUkVTVFlQRVBST0MsTE9ORyk7 DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRW51bVJlc291cmNlVHlwZXNXKEhJ TlNUQU5DRSxFTlVNUkVTVFlQRVBST0MsTE9ORyk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3Rk Y2FsbF9fKSkgRXF1YWxQcmVmaXhTaWQoUFNJRCxQU0lEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSBFcXVhbFNpZChQU0lELFBTSUQpOw0KRFdPUkQgX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSBFcmFzZVRhcGUoSEFORExFLERXT1JELEJPT0wpOw0KQk9PTCBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIEVzY2FwZUNvbW1GdW5jdGlvbihIQU5ETEUsRFdPUkQpOw0K X19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKSB2b2lkIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgRXhpdFByb2Nlc3MoVUlOVCk7DQpfX2F0dHJpYnV0ZV9fKChub3JldHVybikpIHZvaWQgX19h dHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBFeGl0VGhyZWFkKERXT1JEKTsNCkRXT1JEIF9fYXR0 cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRXhwYW5kRW52aXJvbm1lbnRTdHJpbmdzQShMUENTVFIs TFBTVFIsRFdPUkQpOw0KRFdPUkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBFeHBhbmRF bnZpcm9ubWVudFN0cmluZ3NXKExQQ1dTVFIsTFBXU1RSLERXT1JEKTsNCnZvaWQgX19hdHRyaWJ1 dGVfXygoX19zdGRjYWxsX18pKSBGYXRhbEFwcEV4aXRBKFVJTlQsTFBDU1RSKTsNCnZvaWQgX19h dHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBGYXRhbEFwcEV4aXRXKFVJTlQsTFBDV1NUUik7DQp2 b2lkIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRmF0YWxFeGl0KGludCk7DQpCT09MIF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRmlsZVRpbWVUb0Rvc0RhdGVUaW1lKGNvbnN0IEZJ TEVUSU1FICosTFBXT1JELExQV09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgRmlsZVRpbWVUb0xvY2FsRmlsZVRpbWUoRklMRVRJTUUgKixMUEZJTEVUSU1FKTsNCkJPT0wg X19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBGaWxlVGltZVRvU3lzdGVtVGltZShjb25zdCBG SUxFVElNRSAqLExQU1lTVEVNVElNRSk7DQpBVE9NIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgRmluZEF0b21BKExQQ1NUUik7DQpBVE9NIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg RmluZEF0b21XKExQQ1dTVFIpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEZp bmRDbG9zZShIQU5ETEUpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEZpbmRD bG9zZUNoYW5nZU5vdGlmaWNhdGlvbihIQU5ETEUpOw0KSEFORExFIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgRmluZEZpcnN0Q2hhbmdlTm90aWZpY2F0aW9uQShMUENTVFIsQk9PTCxEV09S RCk7DQpIQU5ETEUgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBGaW5kRmlyc3RDaGFuZ2VO b3RpZmljYXRpb25XKExQQ1dTVFIsQk9PTCxEV09SRCk7DQpIQU5ETEUgX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSBGaW5kRmlyc3RGaWxlQShMUENTVFIsTFBXSU4zMl9GSU5EX0RBVEFBKTsN CkhBTkRMRSBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEZpbmRGaXJzdEZpbGVXKExQQ1dT VFIsTFBXSU4zMl9GSU5EX0RBVEFXKTsNCkhBTkRMRSBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxf XykpIEZpbmRGaXJzdEZpbGVFeEEoTFBDU1RSLEZJTkRFWF9JTkZPX0xFVkVMUyxQVk9JRCxGSU5E RVhfU0VBUkNIX09QUyxQVk9JRCxEV09SRCk7DQpIQU5ETEUgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBGaW5kRmlyc3RGaWxlRXhXKExQQ1dTVFIsRklOREVYX0lORk9fTEVWRUxTLFBWT0lE LEZJTkRFWF9TRUFSQ0hfT1BTLFBWT0lELERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBGaW5kRmlyc3RGcmVlQWNlKFBBQ0wsUFZPSUQqKTsNCkJPT0wgX19hdHRyaWJ1 dGVfXygoX19zdGRjYWxsX18pKSBGaW5kTmV4dENoYW5nZU5vdGlmaWNhdGlvbihIQU5ETEUpOw0K Qk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEZpbmROZXh0RmlsZUEoSEFORExFLExQ V0lOMzJfRklORF9EQVRBQSk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRmlu ZE5leHRGaWxlVyhIQU5ETEUsTFBXSU4zMl9GSU5EX0RBVEFXKTsNCkhSU1JDIF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgRmluZFJlc291cmNlQShITU9EVUxFLExQQ1NUUixMUENTVFIpOw0K SFJTUkMgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBGaW5kUmVzb3VyY2VXKEhJTlNUQU5D RSxMUENXU1RSLExQQ1dTVFIpOw0KSFJTUkMgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBG aW5kUmVzb3VyY2VFeEEoSElOU1RBTkNFLExQQ1NUUixMUENTVFIsV09SRCk7DQpIUlNSQyBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEZpbmRSZXNvdXJjZUV4VyhISU5TVEFOQ0UsTFBDV1NU UixMUENXU1RSLFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEZsdXNo RmlsZUJ1ZmZlcnMoSEFORExFKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBG bHVzaEluc3RydWN0aW9uQ2FjaGUoSEFORExFLFBDVk9JRCxEV09SRCk7DQpCT09MIF9fYXR0cmli dXRlX18oKF9fc3RkY2FsbF9fKSkgRmx1c2hWaWV3T2ZGaWxlKFBDVk9JRCxEV09SRCk7DQpEV09S RCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEZvcm1hdE1lc3NhZ2VBKERXT1JELFBDVk9J RCxEV09SRCxEV09SRCxMUFNUUixEV09SRCx2YV9saXN0Kik7DQpEV09SRCBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIEZvcm1hdE1lc3NhZ2VXKERXT1JELFBDVk9JRCxEV09SRCxEV09SRCxM UFdTVFIsRFdPUkQsdmFfbGlzdCopOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykp IEZyZWVFbnZpcm9ubWVudFN0cmluZ3NBKExQU1RSKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBGcmVlRW52aXJvbm1lbnRTdHJpbmdzVyhMUFdTVFIpOw0KQk9PTCBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIEZyZWVMaWJyYXJ5KEhNT0RVTEUpOw0KX19hdHRyaWJ1dGVf Xygobm9yZXR1cm4pKSB2b2lkIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRnJlZUxpYnJh cnlBbmRFeGl0VGhyZWFkKEhNT0RVTEUsRFdPUkQpOw0KDQoNCg0KQk9PTCBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIEZyZWVSZXNvdXJjZShIR0xPQkFMKTsNCg0KUFZPSUQgX19hdHRyaWJ1 dGVfXygoX19zdGRjYWxsX18pKSBGcmVlU2lkKFBTSUQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIEdldEFjZShQQUNMLERXT1JELFBWT0lEKTsNCkJPT0wgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBHZXRBY2xJbmZvcm1hdGlvbihQQUNMLFBWT0lELERXT1JELEFDTF9J TkZPUk1BVElPTl9DTEFTUyk7DQpVSU5UIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0 QXRvbU5hbWVBKEFUT00sTFBTVFIsaW50KTsNClVJTlQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBHZXRBdG9tTmFtZVcoQVRPTSxMUFdTVFIsaW50KTsNCkJPT0wgX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSBHZXRCaW5hcnlUeXBlQShMUENTVFIsUERXT1JEKTsNCkJPT0wgX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRCaW5hcnlUeXBlVyhMUENXU1RSLFBEV09SRCk7DQpM UFNUUiBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldENvbW1hbmRMaW5lQSh2b2lkKTsN CkxQV1NUUiBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldENvbW1hbmRMaW5lVyh2b2lk KTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRDb21tQ29uZmlnKEhBTkRM RSxMUENPTU1DT05GSUcsUERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSBHZXRDb21tTWFzayhIQU5ETEUsUERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBHZXRDb21tTW9kZW1TdGF0dXMoSEFORExFLFBEV09SRCk7DQpCT09MIF9fYXR0cmli dXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0Q29tbVByb3BlcnRpZXMoSEFORExFLExQQ09NTVBST1Ap Ow0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldENvbW1TdGF0ZShIQU5ETEUs TFBEQ0IpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldENvbW1UaW1lb3V0 cyhIQU5ETEUsTFBDT01NVElNRU9VVFMpOw0KRFdPUkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBHZXRDb21wcmVzc2VkRmlsZVNpemVBKExQQ1NUUixQRFdPUkQpOw0KRFdPUkQgX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRDb21wcmVzc2VkRmlsZVNpemVXKExQQ1dTVFIsUERX T1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRDb21wdXRlck5hbWVB KExQU1RSLFBEV09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0Q29t cHV0ZXJOYW1lVyhMUFdTVFIsUERXT1JEKTsNCkRXT1JEIF9fYXR0cmlidXRlX18oKF9fc3RkY2Fs bF9fKSkgR2V0Q3VycmVudERpcmVjdG9yeUEoRFdPUkQsTFBTVFIpOw0KRFdPUkQgX19hdHRyaWJ1 dGVfXygoX19zdGRjYWxsX18pKSBHZXRDdXJyZW50RGlyZWN0b3J5VyhEV09SRCxMUFdTVFIpOw0K Qk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldEN1cnJlbnRId1Byb2ZpbGVBKExQ SFdfUFJPRklMRV9JTkZPQSk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0 Q3VycmVudEh3UHJvZmlsZVcoTFBIV19QUk9GSUxFX0lORk9XKTsNCkhBTkRMRSBfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpIEdldEN1cnJlbnRQcm9jZXNzKHZvaWQpOw0KRFdPUkQgX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRDdXJyZW50UHJvY2Vzc0lkKHZvaWQpOw0KSEFORExF IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0Q3VycmVudFRocmVhZCh2b2lkKTsNCkRX T1JEIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0Q3VycmVudFRocmVhZElkKHZvaWQp Ow0KDQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0RGVmYXVsdENvbW1Db25m aWdBKExQQ1NUUixMUENPTU1DT05GSUcsUERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBHZXREZWZhdWx0Q29tbUNvbmZpZ1coTFBDV1NUUixMUENPTU1DT05GSUcsUERX T1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXREaXNrRnJlZVNwYWNl QShMUENTVFIsUERXT1JELFBEV09SRCxQRFdPUkQsUERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBHZXREaXNrRnJlZVNwYWNlVyhMUENXU1RSLFBEV09SRCxQRFdPUkQs UERXT1JELFBEV09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0RGlz a0ZyZWVTcGFjZUV4QShMUENTVFIsUFVMQVJHRV9JTlRFR0VSLFBVTEFSR0VfSU5URUdFUixQVUxB UkdFX0lOVEVHRVIpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldERpc2tG cmVlU3BhY2VFeFcoTFBDV1NUUixQVUxBUkdFX0lOVEVHRVIsUFVMQVJHRV9JTlRFR0VSLFBVTEFS R0VfSU5URUdFUik7DQpVSU5UIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0RHJpdmVU eXBlQShMUENTVFIpOw0KVUlOVCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldERyaXZl VHlwZVcoTFBDV1NUUik7DQpMUFNUUiBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldEVu dmlyb25tZW50U3RyaW5ncyh2b2lkKTsNCkxQU1RSIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgR2V0RW52aXJvbm1lbnRTdHJpbmdzQSh2b2lkKTsNCkxQV1NUUiBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIEdldEVudmlyb25tZW50U3RyaW5nc1codm9pZCk7DQpEV09SRCBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldEVudmlyb25tZW50VmFyaWFibGVBKExQQ1NUUixMUFNU UixEV09SRCk7DQpEV09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldEVudmlyb25t ZW50VmFyaWFibGVXKExQQ1dTVFIsTFBXU1RSLERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSBHZXRFeGl0Q29kZVByb2Nlc3MoSEFORExFLFBEV09SRCk7DQpCT09MIF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0RXhpdENvZGVUaHJlYWQoSEFORExFLFBEV09S RCk7DQpEV09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldEZpbGVBdHRyaWJ1dGVz QShMUENTVFIpOw0KRFdPUkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRGaWxlQXR0 cmlidXRlc1coTFBDV1NUUik7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0 RmlsZUF0dHJpYnV0ZXNFeEEoTFBDU1RSLEdFVF9GSUxFRVhfSU5GT19MRVZFTFMsUFZPSUQpOw0K Qk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldEZpbGVBdHRyaWJ1dGVzRXhXKExQ Q1dTVFIsR0VUX0ZJTEVFWF9JTkZPX0xFVkVMUyxQVk9JRCk7DQpCT09MIF9fYXR0cmlidXRlX18o KF9fc3RkY2FsbF9fKSkgR2V0RmlsZUluZm9ybWF0aW9uQnlIYW5kbGUoSEFORExFLExQQllfSEFO RExFX0ZJTEVfSU5GT1JNQVRJT04pOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykp IEdldEZpbGVTZWN1cml0eUEoTFBDU1RSLFNFQ1VSSVRZX0lORk9STUFUSU9OLFBTRUNVUklUWV9E RVNDUklQVE9SLERXT1JELFBEV09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgR2V0RmlsZVNlY3VyaXR5VyhMUENXU1RSLFNFQ1VSSVRZX0lORk9STUFUSU9OLFBTRUNVUklU WV9ERVNDUklQVE9SLERXT1JELFBEV09SRCk7DQpEV09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNh bGxfXykpIEdldEZpbGVTaXplKEhBTkRMRSxQRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIEdldEZpbGVUaW1lKEhBTkRMRSxMUEZJTEVUSU1FLExQRklMRVRJTUUsTFBG SUxFVElNRSk7DQpEV09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldEZpbGVUeXBl KEhBTkRMRSk7DQoNCkRXT1JEIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0RnVsbFBh dGhOYW1lQShMUENTVFIsRFdPUkQsTFBTVFIsTFBTVFIqKTsNCkRXT1JEIF9fYXR0cmlidXRlX18o KF9fc3RkY2FsbF9fKSkgR2V0RnVsbFBhdGhOYW1lVyhMUENXU1RSLERXT1JELExQV1NUUixMUFdT VFIqKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRIYW5kbGVJbmZvcm1h dGlvbihIQU5ETEUsUERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBH ZXRLZXJuZWxPYmplY3RTZWN1cml0eShIQU5ETEUsU0VDVVJJVFlfSU5GT1JNQVRJT04sUFNFQ1VS SVRZX0RFU0NSSVBUT1IsRFdPUkQsUERXT1JEKTsNCkRXT1JEIF9fYXR0cmlidXRlX18oKF9fc3Rk Y2FsbF9fKSkgR2V0TGVuZ3RoU2lkKFBTSUQpOw0Kdm9pZCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNh bGxfXykpIEdldExvY2FsVGltZShMUFNZU1RFTVRJTUUpOw0KRFdPUkQgX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSBHZXRMb2dpY2FsRHJpdmVzKHZvaWQpOw0KRFdPUkQgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBHZXRMb2dpY2FsRHJpdmVTdHJpbmdzQShEV09SRCxMUFNUUik7DQpE V09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldExvZ2ljYWxEcml2ZVN0cmluZ3NX KERXT1JELExQV1NUUik7DQpEV09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldExv bmdQYXRoTmFtZUEoTFBDU1RSLExQU1RSLERXT1JEKTsNCkRXT1JEIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgR2V0TG9uZ1BhdGhOYW1lVyhMUENXU1RSLExQV1NUUixEV09SRCk7DQpCT09M IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0TWFpbHNsb3RJbmZvKEhBTkRMRSxQRFdP UkQsUERXT1JELFBEV09SRCxQRFdPUkQpOw0KRFdPUkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBHZXRNb2R1bGVGaWxlTmFtZUEoSElOU1RBTkNFLExQU1RSLERXT1JEKTsNCkRXT1JEIF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0TW9kdWxlRmlsZU5hbWVXKEhJTlNUQU5DRSxM UFdTVFIsRFdPUkQpOw0KSE1PRFVMRSBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldE1v ZHVsZUhhbmRsZUEoTFBDU1RSKTsNCkhNT0RVTEUgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSBHZXRNb2R1bGVIYW5kbGVXKExQQ1dTVFIpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNh bGxfXykpIEdldE5hbWVkUGlwZUhhbmRsZVN0YXRlQShIQU5ETEUsUERXT1JELFBEV09SRCxQRFdP UkQsUERXT1JELExQU1RSLERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSBHZXROYW1lZFBpcGVIYW5kbGVTdGF0ZVcoSEFORExFLFBEV09SRCxQRFdPUkQsUERXT1JELFBE V09SRCxMUFdTVFIsRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdl dE5hbWVkUGlwZUluZm8oSEFORExFLFBEV09SRCxQRFdPUkQsUERXT1JELFBEV09SRCk7DQpCT09M IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0TnVtYmVyT2ZFdmVudExvZ1JlY29yZHMo SEFORExFLFBEV09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0T2xk ZXN0RXZlbnRMb2dSZWNvcmQoSEFORExFLFBEV09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgR2V0T3ZlcmxhcHBlZFJlc3VsdChIQU5ETEUsTFBPVkVSTEFQUEVELFBEV09S RCxCT09MKTsNCkRXT1JEIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0UHJpb3JpdHlD bGFzcyhIQU5ETEUpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldFByaXZh dGVPYmplY3RTZWN1cml0eShQU0VDVVJJVFlfREVTQ1JJUFRPUixTRUNVUklUWV9JTkZPUk1BVElP TixQU0VDVVJJVFlfREVTQ1JJUFRPUixEV09SRCxQRFdPUkQpOw0KVUlOVCBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIEdldFByaXZhdGVQcm9maWxlSW50QShMUENTVFIsTFBDU1RSLElOVCxM UENTVFIpOw0KVUlOVCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldFByaXZhdGVQcm9m aWxlSW50VyhMUENXU1RSLExQQ1dTVFIsSU5ULExQQ1dTVFIpOw0KRFdPUkQgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBHZXRQcml2YXRlUHJvZmlsZVNlY3Rpb25BKExQQ1NUUixMUFNUUixE V09SRCxMUENTVFIpOw0KRFdPUkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRQcml2 YXRlUHJvZmlsZVNlY3Rpb25XKExQQ1dTVFIsTFBXU1RSLERXT1JELExQQ1dTVFIpOw0KRFdPUkQg X19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRQcml2YXRlUHJvZmlsZVNlY3Rpb25OYW1l c0EoTFBTVFIsRFdPUkQsTFBDU1RSKTsNCkRXT1JEIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgR2V0UHJpdmF0ZVByb2ZpbGVTZWN0aW9uTmFtZXNXKExQV1NUUixEV09SRCxMUENXU1RSKTsN CkRXT1JEIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0UHJpdmF0ZVByb2ZpbGVTdHJp bmdBKExQQ1NUUixMUENTVFIsTFBDU1RSLExQU1RSLERXT1JELExQQ1NUUik7DQpEV09SRCBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldFByaXZhdGVQcm9maWxlU3RyaW5nVyhMUENXU1RS LExQQ1dTVFIsTFBDV1NUUixMUFdTVFIsRFdPUkQsTFBDV1NUUik7DQpCT09MIF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgR2V0UHJpdmF0ZVByb2ZpbGVTdHJ1Y3RBKExQQ1NUUixMUENTVFIs UFZPSUQsVUlOVCxMUENTVFIpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdl dFByaXZhdGVQcm9maWxlU3RydWN0VyhMUENXU1RSLExQQ1dTVFIsUFZPSUQsVUlOVCxMUENXU1RS KTsNCkZBUlBST0MgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRQcm9jQWRkcmVzcyhI SU5TVEFOQ0UsTFBDU1RSKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRQ cm9jZXNzQWZmaW5pdHlNYXNrKEhBTkRMRSxQRFdPUkQsUERXT1JEKTsNCkhBTkRMRSBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldFByb2Nlc3NIZWFwKHZvaWQpOw0KRFdPUkQgX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRQcm9jZXNzSGVhcHMoRFdPUkQsUEhBTkRMRSk7DQpC T09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0UHJvY2Vzc1ByaW9yaXR5Qm9vc3Qo SEFORExFLFBCT09MKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRQcm9j ZXNzU2h1dGRvd25QYXJhbWV0ZXJzKFBEV09SRCxQRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIEdldFByb2Nlc3NUaW1lcyhIQU5ETEUsTFBGSUxFVElNRSxMUEZJTEVU SU1FLExQRklMRVRJTUUsTFBGSUxFVElNRSk7DQpEV09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNh bGxfXykpIEdldFByb2Nlc3NWZXJzaW9uKERXT1JEKTsNCkhXSU5TVEEgX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSBHZXRQcm9jZXNzV2luZG93U3RhdGlvbih2b2lkKTsNCkJPT0wgX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRQcm9jZXNzV29ya2luZ1NldFNpemUoSEFORExFLFBE V09SRCxQRFdPUkQpOw0KVUlOVCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldFByb2Zp bGVJbnRBKExQQ1NUUixMUENTVFIsSU5UKTsNClVJTlQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBHZXRQcm9maWxlSW50VyhMUENXU1RSLExQQ1dTVFIsSU5UKTsNCkRXT1JEIF9fYXR0cmli dXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0UHJvZmlsZVNlY3Rpb25BKExQQ1NUUixMUFNUUixEV09S RCk7DQpEV09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldFByb2ZpbGVTZWN0aW9u VyhMUENXU1RSLExQV1NUUixEV09SRCk7DQpEV09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxf XykpIEdldFByb2ZpbGVTdHJpbmdBKExQQ1NUUixMUENTVFIsTFBDU1RSLExQU1RSLERXT1JEKTsN CkRXT1JEIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0UHJvZmlsZVN0cmluZ1coTFBD V1NUUixMUENXU1RSLExQQ1dTVFIsTFBXU1RSLERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSBHZXRRdWV1ZWRDb21wbGV0aW9uU3RhdHVzKEhBTkRMRSxQRFdPUkQsUERX T1JELExQT1ZFUkxBUFBFRCosRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxf XykpIEdldFNlY3VyaXR5RGVzY3JpcHRvckNvbnRyb2woUFNFQ1VSSVRZX0RFU0NSSVBUT1IsUFNF Q1VSSVRZX0RFU0NSSVBUT1JfQ09OVFJPTCxQRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIEdldFNlY3VyaXR5RGVzY3JpcHRvckRhY2woUFNFQ1VSSVRZX0RFU0NSSVBU T1IsTFBCT09MLFBBQ0wqLExQQk9PTCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgR2V0U2VjdXJpdHlEZXNjcmlwdG9yR3JvdXAoUFNFQ1VSSVRZX0RFU0NSSVBUT1IsUFNJRCos TFBCT09MKTsNCkRXT1JEIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0U2VjdXJpdHlE ZXNjcmlwdG9yTGVuZ3RoKFBTRUNVUklUWV9ERVNDUklQVE9SKTsNCkJPT0wgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBHZXRTZWN1cml0eURlc2NyaXB0b3JPd25lcihQU0VDVVJJVFlfREVT Q1JJUFRPUixQU0lEKixMUEJPT0wpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykp IEdldFNlY3VyaXR5RGVzY3JpcHRvclNhY2woUFNFQ1VSSVRZX0RFU0NSSVBUT1IsTFBCT09MLFBB Q0wqLExQQk9PTCk7DQpEV09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldFNob3J0 UGF0aE5hbWVBKExQQ1NUUixMUFNUUixEV09SRCk7DQpEV09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIEdldFNob3J0UGF0aE5hbWVXKExQQ1dTVFIsTFBXU1RSLERXT1JEKTsNClBTSURf SURFTlRJRklFUl9BVVRIT1JJVFkgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRTaWRJ ZGVudGlmaWVyQXV0aG9yaXR5KFBTSUQpOw0KRFdPUkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBHZXRTaWRMZW5ndGhSZXF1aXJlZChVQ0hBUik7DQpQRFdPUkQgX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSBHZXRTaWRTdWJBdXRob3JpdHkoUFNJRCxEV09SRCk7DQpQVUNIQVIgX19h dHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRTaWRTdWJBdXRob3JpdHlDb3VudChQU0lEKTsN CnZvaWQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRTdGFydHVwSW5mb0EoTFBTVEFS VFVQSU5GT0EpOw0Kdm9pZCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldFN0YXJ0dXBJ bmZvVyhMUFNUQVJUVVBJTkZPVyk7DQpIQU5ETEUgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSBHZXRTdGRIYW5kbGUoRFdPUkQpOw0KVUlOVCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykp IEdldFN5c3RlbURpcmVjdG9yeUEoTFBTVFIsVUlOVCk7DQpVSU5UIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgR2V0U3lzdGVtRGlyZWN0b3J5VyhMUFdTVFIsVUlOVCk7DQp2b2lkIF9fYXR0 cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0U3lzdGVtSW5mbyhMUFNZU1RFTV9JTkZPKTsNCkJP T0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRTeXN0ZW1Qb3dlclN0YXR1cyhMUFNZ U1RFTV9QT1dFUl9TVEFUVVMpOw0Kdm9pZCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdl dFN5c3RlbVRpbWUoTFBTWVNURU1USU1FKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBHZXRTeXN0ZW1UaW1lQWRqdXN0bWVudChQRFdPUkQsUERXT1JELFBCT09MKTsNCnZvaWQg X19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRTeXN0ZW1UaW1lQXNGaWxlVGltZShMUEZJ TEVUSU1FKTsNCkRXT1JEIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0VGFwZVBhcmFt ZXRlcnMoSEFORExFLERXT1JELFBEV09SRCxQVk9JRCk7DQpEV09SRCBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIEdldFRhcGVQb3NpdGlvbihIQU5ETEUsRFdPUkQsUERXT1JELFBEV09SRCxQ RFdPUkQpOw0KRFdPUkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRUYXBlU3RhdHVz KEhBTkRMRSk7DQpVSU5UIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0VGVtcEZpbGVO YW1lQShMUENTVFIsTFBDU1RSLFVJTlQsTFBTVFIpOw0KVUlOVCBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIEdldFRlbXBGaWxlTmFtZVcoTFBDV1NUUixMUENXU1RSLFVJTlQsTFBXU1RSKTsN CkRXT1JEIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0VGVtcFBhdGhBKERXT1JELExQ U1RSKTsNCkRXT1JEIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0VGVtcFBhdGhXKERX T1JELExQV1NUUik7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0VGhyZWFk Q29udGV4dChIQU5ETEUsTFBDT05URVhUKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxf XykpIEdldFRocmVhZFByaW9yaXR5KEhBTkRMRSk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3Rk Y2FsbF9fKSkgR2V0VGhyZWFkUHJpb3JpdHlCb29zdChIQU5ETEUsUEJPT0wpOw0KQk9PTCBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldFRocmVhZFNlbGVjdG9yRW50cnkoSEFORExFLERX T1JELExQTERUX0VOVFJZKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRU aHJlYWRUaW1lcyhIQU5ETEUsTFBGSUxFVElNRSxMUEZJTEVUSU1FLExQRklMRVRJTUUsTFBGSUxF VElNRSk7DQpEV09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldFRpY2tDb3VudCh2 b2lkKTsNCkRXT1JEIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0VGltZVpvbmVJbmZv cm1hdGlvbihMUFRJTUVfWk9ORV9JTkZPUk1BVElPTik7DQpCT09MIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgR2V0VG9rZW5JbmZvcm1hdGlvbihIQU5ETEUsVE9LRU5fSU5GT1JNQVRJT05f Q0xBU1MsUFZPSUQsRFdPUkQsUERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBHZXRVc2VyTmFtZUEgKExQU1RSLFBEV09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgR2V0VXNlck5hbWVXKExQV1NUUixQRFdPUkQpOw0KRFdPUkQgX19hdHRyaWJ1 dGVfXygoX19zdGRjYWxsX18pKSBHZXRWZXJzaW9uKHZvaWQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIEdldFZlcnNpb25FeEEoTFBPU1ZFUlNJT05JTkZPQSk7DQpCT09MIF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0VmVyc2lvbkV4VyhMUE9TVkVSU0lPTklORk9X KTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRWb2x1bWVJbmZvcm1hdGlv bkEoTFBDU1RSLExQU1RSLERXT1JELFBEV09SRCxQRFdPUkQsUERXT1JELExQU1RSLERXT1JEKTsN CkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRWb2x1bWVJbmZvcm1hdGlvblco TFBDV1NUUixMUFdTVFIsRFdPUkQsUERXT1JELFBEV09SRCxQRFdPUkQsTFBXU1RSLERXT1JEKTsN ClVJTlQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRXaW5kb3dzRGlyZWN0b3J5QShM UFNUUixVSU5UKTsNClVJTlQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRXaW5kb3dz RGlyZWN0b3J5VyhMUFdTVFIsVUlOVCk7DQpEV09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxf XykpIEdldFdpbmRvd1RocmVhZFByb2Nlc3NJZChIV05ELFBEV09SRCk7DQpBVE9NIF9fYXR0cmli dXRlX18oKF9fc3RkY2FsbF9fKSkgR2xvYmFsQWRkQXRvbUEoTFBDU1RSKTsNCkFUT00gX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBHbG9iYWxBZGRBdG9tVyggTFBDV1NUUik7DQpIR0xPQkFM IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2xvYmFsQWxsb2MoVUlOVCxEV09SRCk7DQpV SU5UIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2xvYmFsQ29tcGFjdChEV09SRCk7DQpB VE9NIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2xvYmFsRGVsZXRlQXRvbShBVE9NKTsN CkhHTE9CQUwgR2xvYmFsRGlzY2FyZChIR0xPQkFMKTsNCkFUT00gX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBHbG9iYWxGaW5kQXRvbUEoTFBDU1RSKTsNCkFUT00gX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSBHbG9iYWxGaW5kQXRvbVcoTFBDV1NUUik7DQp2b2lkIF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgR2xvYmFsRml4KEhHTE9CQUwpOw0KVUlOVCBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIEdsb2JhbEZsYWdzKEhHTE9CQUwpOw0KSEdMT0JBTCBfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpIEdsb2JhbEZyZWUoSEdMT0JBTCk7DQpVSU5UIF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgR2xvYmFsR2V0QXRvbU5hbWVBKEFUT00sTFBTVFIsaW50KTsNClVJ TlQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHbG9iYWxHZXRBdG9tTmFtZVcoQVRPTSxM UFdTVFIsaW50KTsNCkhHTE9CQUwgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHbG9iYWxI YW5kbGUoUENWT0lEKTsNCkxQVk9JRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdsb2Jh bExvY2soSEdMT0JBTCk7DQp2b2lkIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2xvYmFs TWVtb3J5U3RhdHVzKExQTUVNT1JZU1RBVFVTKTsNCkhHTE9CQUwgX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBHbG9iYWxSZUFsbG9jKEhHTE9CQUwsRFdPUkQsVUlOVCk7DQpEV09SRCBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdsb2JhbFNpemUoSEdMT0JBTCk7DQp2b2lkIF9fYXR0 cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2xvYmFsVW5maXgoSEdMT0JBTCk7DQpCT09MIF9fYXR0 cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2xvYmFsVW5sb2NrKEhHTE9CQUwpOw0KQk9PTCBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdsb2JhbFVuV2lyZShIR0xPQkFMKTsNClBWT0lEIF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2xvYmFsV2lyZShIR0xPQkFMKTsNCg0KUFZPSUQg X19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBIZWFwQWxsb2MoSEFORExFLERXT1JELERXT1JE KTsNClVJTlQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBIZWFwQ29tcGFjdChIQU5ETEUs RFdPUkQpOw0KSEFORExFIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgSGVhcENyZWF0ZShE V09SRCxEV09SRCxEV09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgSGVh cERlc3Ryb3koSEFORExFKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBIZWFw RnJlZShIQU5ETEUsRFdPUkQsUFZPSUQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxf XykpIEhlYXBMb2NrKEhBTkRMRSk7DQpQVk9JRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykp IEhlYXBSZUFsbG9jKEhBTkRMRSxEV09SRCxQVk9JRCxEV09SRCk7DQpEV09SRCBfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpIEhlYXBTaXplKEhBTkRMRSxEV09SRCxQQ1ZPSUQpOw0KQk9PTCBf X2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEhlYXBVbmxvY2soSEFORExFKTsNCkJPT0wgX19h dHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBIZWFwVmFsaWRhdGUoSEFORExFLERXT1JELFBDVk9J RCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgSGVhcFdhbGsoSEFORExFLExQ UFJPQ0VTU19IRUFQX0VOVFJZKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBJ bXBlcnNvbmF0ZUxvZ2dlZE9uVXNlcihIQU5ETEUpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIEltcGVyc29uYXRlTmFtZWRQaXBlQ2xpZW50KEhBTkRMRSk7DQpCT09MIF9fYXR0 cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgSW1wZXJzb25hdGVTZWxmKFNFQ1VSSVRZX0lNUEVSU09O QVRJT05fTEVWRUwpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEluaXRBdG9t VGFibGUoRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEluaXRpYWxp emVBY2woUEFDTCxEV09SRCxEV09SRCk7DQp2b2lkIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbihMUENSSVRJQ0FMX1NFQ1RJT04pOw0KQk9PTCBf X2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEluaXRpYWxpemVTZWN1cml0eURlc2NyaXB0b3Io UFNFQ1VSSVRZX0RFU0NSSVBUT1IsRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNh bGxfXykpIEluaXRpYWxpemVTaWQgKFBTSUQsUFNJRF9JREVOVElGSUVSX0FVVEhPUklUWSxCWVRF KTsNCkxPTkcgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBJbnRlcmxvY2tlZENvbXBhcmVF eGNoYW5nZShMUExPTkcsTE9ORyxMT05HKTsNCg0KDQoNCkxPTkcgX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBJbnRlcmxvY2tlZERlY3JlbWVudChMUExPTkcpOw0KTE9ORyBfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpIEludGVybG9ja2VkRXhjaGFuZ2UoTFBMT05HLExPTkcpOw0KDQoN Cg0KTE9ORyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEludGVybG9ja2VkRXhjaGFuZ2VB ZGQoUExPTkcsTE9ORyk7DQpMT05HIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgSW50ZXJs b2NrZWRJbmNyZW1lbnQoTFBMT05HKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSBJc0JhZENvZGVQdHIoRkFSUFJPQyk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgSXNCYWRIdWdlUmVhZFB0cihQQ1ZPSUQsVUlOVCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgSXNCYWRIdWdlV3JpdGVQdHIoUFZPSUQsVUlOVCk7DQpCT09MIF9fYXR0cmli dXRlX18oKF9fc3RkY2FsbF9fKSkgSXNCYWRSZWFkUHRyKFBDVk9JRCxVSU5UKTsNCkJPT0wgX19h dHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBJc0JhZFN0cmluZ1B0ckEoTFBDU1RSLFVJTlQpOw0K Qk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIElzQmFkU3RyaW5nUHRyVyhMUENXU1RS LFVJTlQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIElzQmFkV3JpdGVQdHIo UFZPSUQsVUlOVCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgSXNEZWJ1Z2dl clByZXNlbnQodm9pZCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgSXNQcm9j ZXNzb3JGZWF0dXJlUHJlc2VudChEV09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2Fs bF9fKSkgSXNUZXh0VW5pY29kZShQQ1ZPSUQsaW50LExQSU5UKTsNCkJPT0wgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBJc1ZhbGlkQWNsKFBBQ0wpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIElzVmFsaWRTZWN1cml0eURlc2NyaXB0b3IoUFNFQ1VSSVRZX0RFU0NSSVBU T1IpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIElzVmFsaWRTaWQoUFNJRCk7 DQp2b2lkIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgTGVhdmVDcml0aWNhbFNlY3Rpb24o TFBDUklUSUNBTF9TRUNUSU9OKTsNCg0KSElOU1RBTkNFIF9fYXR0cmlidXRlX18oKF9fc3RkY2Fs bF9fKSkgTG9hZExpYnJhcnlBKExQQ1NUUik7DQpISU5TVEFOQ0UgX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBMb2FkTGlicmFyeUV4QShMUENTVFIsSEFORExFLERXT1JEKTsNCkhJTlNUQU5D RSBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIExvYWRMaWJyYXJ5RXhXKExQQ1dTVFIsSEFO RExFLERXT1JEKTsNCkhJTlNUQU5DRSBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIExvYWRM aWJyYXJ5VyhMUENXU1RSKTsNCkRXT1JEIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgTG9h ZE1vZHVsZShMUENTVFIsUFZPSUQpOw0KSEdMT0JBTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxf XykpIExvYWRSZXNvdXJjZShISU5TVEFOQ0UsSFJTUkMpOw0KSExPQ0FMIF9fYXR0cmlidXRlX18o KF9fc3RkY2FsbF9fKSkgTG9jYWxBbGxvYyhVSU5ULFVJTlQpOw0KVUlOVCBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIExvY2FsQ29tcGFjdChVSU5UKTsNCkhMT0NBTCBMb2NhbERpc2NhcmQo SExPQ0FMKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBMb2NhbEZpbGVUaW1l VG9GaWxlVGltZShjb25zdCBGSUxFVElNRSAqLExQRklMRVRJTUUpOw0KVUlOVCBfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpIExvY2FsRmxhZ3MoSExPQ0FMKTsNCkhMT0NBTCBfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpIExvY2FsRnJlZShITE9DQUwpOw0KSExPQ0FMIF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgTG9jYWxIYW5kbGUoTFBDVk9JRCk7DQpQVk9JRCBfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpIExvY2FsTG9jayhITE9DQUwpOw0KSExPQ0FMIF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgTG9jYWxSZUFsbG9jKEhMT0NBTCxVSU5ULFVJTlQpOw0KVUlOVCBf X2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIExvY2FsU2hyaW5rKEhMT0NBTCxVSU5UKTsNClVJ TlQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBMb2NhbFNpemUoSExPQ0FMKTsNCkJPT0wg X19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBMb2NhbFVubG9jayhITE9DQUwpOw0KQk9PTCBf X2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIExvY2tGaWxlKEhBTkRMRSxEV09SRCxEV09SRCxE V09SRCxEV09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgTG9ja0ZpbGVF eChIQU5ETEUsRFdPUkQsRFdPUkQsRFdPUkQsRFdPUkQsTFBPVkVSTEFQUEVEKTsNClBWT0lEIF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgTG9ja1Jlc291cmNlKEhHTE9CQUwpOw0KDQpCT09M IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgTG9nb25Vc2VyQShMUFNUUixMUFNUUixMUFNU UixEV09SRCxEV09SRCxQSEFORExFKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSBMb2dvblVzZXJXKExQV1NUUixMUFdTVFIsTFBXU1RSLERXT1JELERXT1JELFBIQU5ETEUpOw0K Qk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIExvb2t1cEFjY291bnROYW1lQShMUENT VFIsTFBDU1RSLFBTSUQsUERXT1JELExQU1RSLFBEV09SRCxQU0lEX05BTUVfVVNFKTsNCkJPT0wg X19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBMb29rdXBBY2NvdW50TmFtZVcoTFBDV1NUUixM UENXU1RSLFBTSUQsUERXT1JELExQV1NUUixQRFdPUkQsUFNJRF9OQU1FX1VTRSk7DQpCT09MIF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgTG9va3VwQWNjb3VudFNpZEEoTFBDU1RSLFBTSUQs TFBTVFIsUERXT1JELExQU1RSLFBEV09SRCxQU0lEX05BTUVfVVNFKTsNCkJPT0wgX19hdHRyaWJ1 dGVfXygoX19zdGRjYWxsX18pKSBMb29rdXBBY2NvdW50U2lkVyhMUENXU1RSLFBTSUQsTFBXU1RS LFBEV09SRCxMUFdTVFIsUERXT1JELFBTSURfTkFNRV9VU0UpOw0KQk9PTCBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIExvb2t1cFByaXZpbGVnZURpc3BsYXlOYW1lQShMUENTVFIsTFBDU1RS LExQU1RSLFBEV09SRCxQRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykp IExvb2t1cFByaXZpbGVnZURpc3BsYXlOYW1lVyhMUENXU1RSLExQQ1dTVFIsTFBXU1RSLFBEV09S RCxQRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIExvb2t1cFByaXZp bGVnZU5hbWVBKExQQ1NUUixQTFVJRCxMUFNUUixQRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIExvb2t1cFByaXZpbGVnZU5hbWVXKExQQ1dTVFIsUExVSUQsTFBXU1RS LFBEV09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgTG9va3VwUHJpdmls ZWdlVmFsdWVBKExQQ1NUUixMUENTVFIsUExVSUQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIExvb2t1cFByaXZpbGVnZVZhbHVlVyhMUENXU1RSLExQQ1dTVFIsUExVSUQpOw0K TFBTVFIgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBsc3RyY2F0QShMUFNUUixMUENTVFIp Ow0KTFBXU1RSIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgbHN0cmNhdFcoTFBXU1RSLExQ Q1dTVFIpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgbHN0cmNtcEEoTFBDU1RS LExQQ1NUUik7DQppbnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBsc3RyY21waUEoTFBD U1RSLExQQ1NUUik7DQppbnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBsc3RyY21waVco IExQQ1dTVFIsTFBDV1NUUik7DQppbnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBsc3Ry Y21wVyhMUENXU1RSLExQQ1dTVFIpOw0KTFBTVFIgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSBsc3RyY3B5QShMUFNUUixMUENTVFIpOw0KTFBTVFIgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBsc3RyY3B5bkEoTFBTVFIsTFBDU1RSLGludCk7DQpMUFdTVFIgX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSBsc3RyY3B5blcoTFBXU1RSLExQQ1dTVFIsaW50KTsNCkxQV1NUUiBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIGxzdHJjcHlXKExQV1NUUixMUENXU1RSKTsNCmludCBf X2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIGxzdHJsZW5BKExQQ1NUUik7DQppbnQgX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBsc3RybGVuVyhMUENXU1RSKTsNCkJPT0wgX19hdHRyaWJ1 dGVfXygoX19zdGRjYWxsX18pKSBNYWtlQWJzb2x1dGVTRChQU0VDVVJJVFlfREVTQ1JJUFRPUixQ U0VDVVJJVFlfREVTQ1JJUFRPUixQRFdPUkQsUEFDTCxQRFdPUkQsUEFDTCxQRFdPUkQsUFNJRCxQ RFdPUkQsUFNJRCxQRFdPUkQpOw0KDQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg TWFrZVNlbGZSZWxhdGl2ZVNEKFBTRUNVUklUWV9ERVNDUklQVE9SLFBTRUNVUklUWV9ERVNDUklQ VE9SLFBEV09SRCk7DQp2b2lkIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgTWFwR2VuZXJp Y01hc2soUERXT1JELFBHRU5FUklDX01BUFBJTkcpOw0KUFZPSUQgX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBNYXBWaWV3T2ZGaWxlKEhBTkRMRSxEV09SRCxEV09SRCxEV09SRCxEV09SRCk7 DQpQVk9JRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIE1hcFZpZXdPZkZpbGVFeChIQU5E TEUsRFdPUkQsRFdPUkQsRFdPUkQsRFdPUkQsUFZPSUQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIE1vdmVGaWxlQShMUENTVFIsTFBDU1RSKTsNCkJPT0wgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBNb3ZlRmlsZUV4QShMUENTVFIsTFBDU1RSLERXT1JEKTsNCkJPT0wg X19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBNb3ZlRmlsZUV4VyhMUENXU1RSLExQQ1dTVFIs RFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIE1vdmVGaWxlVyhMUENX U1RSLExQQ1dTVFIpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgTXVsRGl2KGlu dCxpbnQsaW50KTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBOb3RpZnlDaGFu Z2VFdmVudExvZyhIQU5ETEUsSEFORExFKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBPYmplY3RDbG9zZUF1ZGl0QWxhcm1BKExQQ1NUUixQVk9JRCxCT09MKTsNCkJPT0wgX19h dHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBPYmplY3RDbG9zZUF1ZGl0QWxhcm1XKExQQ1dTVFIs UFZPSUQsQk9PTCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgT2JqZWN0RGVs ZXRlQXVkaXRBbGFybUEoTFBDU1RSLFBWT0lELEJPT0wpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIE9iamVjdERlbGV0ZUF1ZGl0QWxhcm1XKExQQ1dTVFIsUFZPSUQsQk9PTCk7 DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgT2JqZWN0T3BlbkF1ZGl0QWxhcm1B KExQQ1NUUixQVk9JRCxMUFNUUixMUFNUUixQU0VDVVJJVFlfREVTQ1JJUFRPUixIQU5ETEUsRFdP UkQsRFdPUkQsUFBSSVZJTEVHRV9TRVQsQk9PTCxCT09MLFBCT09MKTsNCkJPT0wgX19hdHRyaWJ1 dGVfXygoX19zdGRjYWxsX18pKSBPYmplY3RPcGVuQXVkaXRBbGFybVcoTFBDV1NUUixQVk9JRCxM UFdTVFIsTFBXU1RSLFBTRUNVUklUWV9ERVNDUklQVE9SLEhBTkRMRSxEV09SRCxEV09SRCxQUFJJ VklMRUdFX1NFVCxCT09MLEJPT0wsUEJPT0wpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNh bGxfXykpIE9iamVjdFByaXZpbGVnZUF1ZGl0QWxhcm1BKExQQ1NUUixQVk9JRCxIQU5ETEUsRFdP UkQsUFBSSVZJTEVHRV9TRVQsQk9PTCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgT2JqZWN0UHJpdmlsZWdlQXVkaXRBbGFybVcoTFBDV1NUUixQVk9JRCxIQU5ETEUsRFdPUkQs UFBSSVZJTEVHRV9TRVQsQk9PTCk7DQpIQU5ETEUgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSBPcGVuQmFja3VwRXZlbnRMb2dBKExQQ1NUUixMUENTVFIpOw0KSEFORExFIF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgT3BlbkJhY2t1cEV2ZW50TG9nVyhMUENXU1RSLExQQ1dTVFIpOw0K SEFORExFIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgT3BlbkV2ZW50QShEV09SRCxCT09M LExQQ1NUUik7DQpIQU5ETEUgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBPcGVuRXZlbnRM b2dBIChMUENTVFIsTFBDU1RSKTsNCkhBTkRMRSBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykp IE9wZW5FdmVudExvZ1coTFBDV1NUUixMUENXU1RSKTsNCkhBTkRMRSBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIE9wZW5FdmVudFcoRFdPUkQsQk9PTCxMUENXU1RSKTsNCkhGSUxFIF9fYXR0 cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgT3BlbkZpbGUoTFBDU1RSLExQT0ZTVFJVQ1QsVUlOVCk7 DQpIQU5ETEUgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBPcGVuRmlsZU1hcHBpbmdBKERX T1JELEJPT0wsTFBDU1RSKTsNCkhBTkRMRSBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIE9w ZW5GaWxlTWFwcGluZ1coRFdPUkQsQk9PTCxMUENXU1RSKTsNCkhBTkRMRSBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIE9wZW5NdXRleEEoRFdPUkQsQk9PTCxMUENTVFIpOw0KSEFORExFIF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgT3Blbk11dGV4VyhEV09SRCxCT09MLExQQ1dTVFIp Ow0KSEFORExFIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgT3BlblByb2Nlc3MoRFdPUkQs Qk9PTCxEV09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgT3BlblByb2Nl c3NUb2tlbihIQU5ETEUsRFdPUkQsUEhBTkRMRSk7DQpIQU5ETEUgX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBPcGVuU2VtYXBob3JlQShEV09SRCxCT09MLExQQ1NUUik7DQpIQU5ETEUgX19h dHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBPcGVuU2VtYXBob3JlVyhEV09SRCxCT09MLExQQ1dT VFIpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIE9wZW5UaHJlYWRUb2tlbihI QU5ETEUsRFdPUkQsQk9PTCxQSEFORExFKTsNCkhBTkRMRSBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNh bGxfXykpIE9wZW5XYWl0YWJsZVRpbWVyQShEV09SRCxCT09MLExQQ1NUUik7DQpIQU5ETEUgX19h dHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBPcGVuV2FpdGFibGVUaW1lclcoRFdPUkQsQk9PTCxM UENXU1RSKTsNCnZvaWQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBPdXRwdXREZWJ1Z1N0 cmluZ0EoTFBDU1RSKTsNCnZvaWQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBPdXRwdXRE ZWJ1Z1N0cmluZ1coTFBDV1NUUik7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg UGVla05hbWVkUGlwZShIQU5ETEUsUFZPSUQsRFdPUkQsUERXT1JELFBEV09SRCxQRFdPUkQpOw0K Qk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFBvc3RRdWV1ZWRDb21wbGV0aW9uU3Rh dHVzKEhBTkRMRSxEV09SRCxEV09SRCxMUE9WRVJMQVBQRUQpOw0KRFdPUkQgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBQcmVwYXJlVGFwZShIQU5ETEUsRFdPUkQsQk9PTCk7DQpCT09MIF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUHJpdmlsZWdlQ2hlY2sgKEhBTkRMRSxQUFJJVklM RUdFX1NFVCxQQk9PTCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUHJpdmls ZWdlZFNlcnZpY2VBdWRpdEFsYXJtQShMUENTVFIsTFBDU1RSLEhBTkRMRSxQUFJJVklMRUdFX1NF VCxCT09MKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBQcml2aWxlZ2VkU2Vy dmljZUF1ZGl0QWxhcm1XKExQQ1dTVFIsTFBDV1NUUixIQU5ETEUsUFBSSVZJTEVHRV9TRVQsQk9P TCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUHVsc2VFdmVudChIQU5ETEUp Ow0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFB1cmdlQ29tbShIQU5ETEUsRFdP UkQpOw0KRFdPUkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBRdWVyeURvc0RldmljZUEo TFBDU1RSLExQU1RSLERXT1JEKTsNCkRXT1JEIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg UXVlcnlEb3NEZXZpY2VXKExQQ1dTVFIsTFBXU1RSLERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBRdWVyeVBlcmZvcm1hbmNlQ291bnRlcihQTEFSR0VfSU5URUdFUik7 DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUXVlcnlQZXJmb3JtYW5jZUZyZXF1 ZW5jeShQTEFSR0VfSU5URUdFUik7DQpEV09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykp IFF1ZXVlVXNlckFQQyhQQVBDRlVOQyxIQU5ETEUsRFdPUkQpOw0Kdm9pZCBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIFJhaXNlRXhjZXB0aW9uKERXT1JELERXT1JELERXT1JELGNvbnN0IERX T1JEKik7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUmVhZERpcmVjdG9yeUNo YW5nZXNXKEhBTkRMRSxQVk9JRCxEV09SRCxCT09MLERXT1JELFBEV09SRCxMUE9WRVJMQVBQRUQs TFBPVkVSTEFQUEVEX0NPTVBMRVRJT05fUk9VVElORSk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgUmVhZEV2ZW50TG9nQShIQU5ETEUsRFdPUkQsRFdPUkQsUFZPSUQsRFdPUkQs RFdPUkQgKixEV09SRCAqKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBSZWFk RXZlbnRMb2dXKEhBTkRMRSxEV09SRCxEV09SRCxQVk9JRCxEV09SRCxEV09SRCAqLERXT1JEICop Ow0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJlYWRGaWxlKEhBTkRMRSxQVk9J RCxEV09SRCxQRFdPUkQsTFBPVkVSTEFQUEVEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBSZWFkRmlsZUV4KEhBTkRMRSxQVk9JRCxEV09SRCxMUE9WRVJMQVBQRUQsTFBPVkVS TEFQUEVEX0NPTVBMRVRJT05fUk9VVElORSk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2Fs bF9fKSkgUmVhZFByb2Nlc3NNZW1vcnkoSEFORExFLFBDVk9JRCxQVk9JRCxEV09SRCxQRFdPUkQp Ow0KSEFORExFIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUmVnaXN0ZXJFdmVudFNvdXJj ZUEgKExQQ1NUUixMUENTVFIpOw0KSEFORExFIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg UmVnaXN0ZXJFdmVudFNvdXJjZVcoTFBDV1NUUixMUENXU1RSKTsNCkJPT0wgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBSZWxlYXNlTXV0ZXgoSEFORExFKTsNCkJPT0wgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBSZWxlYXNlU2VtYXBob3JlKEhBTkRMRSxMT05HLExQTE9ORyk7DQpC T09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUmVtb3ZlRGlyZWN0b3J5QShMUENTVFIp Ow0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJlbW92ZURpcmVjdG9yeVcoTFBD V1NUUik7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUmVwb3J0RXZlbnRBKEhB TkRMRSxXT1JELFdPUkQsRFdPUkQsUFNJRCxXT1JELERXT1JELExQQ1NUUiosUFZPSUQpOw0KQk9P TCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJlcG9ydEV2ZW50VyhIQU5ETEUsV09SRCxX T1JELERXT1JELFBTSUQsV09SRCxEV09SRCxMUENXU1RSKixQVk9JRCk7DQpCT09MIF9fYXR0cmli dXRlX18oKF9fc3RkY2FsbF9fKSkgUmVzZXRFdmVudChIQU5ETEUpOw0KRFdPUkQgX19hdHRyaWJ1 dGVfXygoX19zdGRjYWxsX18pKSBSZXN1bWVUaHJlYWQoSEFORExFKTsNCkJPT0wgX19hdHRyaWJ1 dGVfXygoX19zdGRjYWxsX18pKSBSZXZlcnRUb1NlbGYodm9pZCk7DQpEV09SRCBfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpIFNlYXJjaFBhdGhBKExQQ1NUUixMUENTVFIsTFBDU1RSLERXT1JE LExQU1RSLExQU1RSKik7DQpEV09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNlYXJj aFBhdGhXKExQQ1dTVFIsTFBDV1NUUixMUENXU1RSLERXT1JELExQV1NUUixMUFdTVFIqKTsNCkJP T0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBTZXRBY2xJbmZvcm1hdGlvbihQQUNMLFBW T0lELERXT1JELEFDTF9JTkZPUk1BVElPTl9DTEFTUyk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgU2V0Q29tbUJyZWFrKEhBTkRMRSk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgU2V0Q29tbUNvbmZpZyhIQU5ETEUsTFBDT01NQ09ORklHLERXT1JEKTsNCkJP T0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBTZXRDb21tTWFzayhIQU5ETEUsRFdPUkQp Ow0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNldENvbW1TdGF0ZShIQU5ETEUs TFBEQ0IpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNldENvbW1UaW1lb3V0 cyhIQU5ETEUsTFBDT01NVElNRU9VVFMpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxf XykpIFNldENvbXB1dGVyTmFtZUEoTFBDU1RSKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBTZXRDb21wdXRlck5hbWVXKExQQ1dTVFIpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIFNldEN1cnJlbnREaXJlY3RvcnlBKExQQ1NUUik7DQpCT09MIF9fYXR0cmli dXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0Q3VycmVudERpcmVjdG9yeVcoTFBDV1NUUik7DQpCT09M IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0RGVmYXVsdENvbW1Db25maWdBKExQQ1NU UixMUENPTU1DT05GSUcsRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykp IFNldERlZmF1bHRDb21tQ29uZmlnVyhMUENXU1RSLExQQ09NTUNPTkZJRyxEV09SRCk7DQpCT09M IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0RW5kT2ZGaWxlKEhBTkRMRSk7DQpCT09M IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0RW52aXJvbm1lbnRWYXJpYWJsZUEoTFBD U1RSLExQQ1NUUik7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0RW52aXJv bm1lbnRWYXJpYWJsZVcoTFBDV1NUUixMUENXU1RSKTsNClVJTlQgX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBTZXRFcnJvck1vZGUoVUlOVCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3Rk Y2FsbF9fKSkgU2V0RXZlbnQoSEFORExFKTsNCnZvaWQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBTZXRGaWxlQXBpc1RvQU5TSSh2b2lkKTsNCnZvaWQgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBTZXRGaWxlQXBpc1RvT0VNKHZvaWQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIFNldEZpbGVBdHRyaWJ1dGVzQShMUENTVFIsRFdPUkQpOw0KQk9PTCBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNldEZpbGVBdHRyaWJ1dGVzVyhMUENXU1RSLERXT1JEKTsN CkRXT1JEIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0RmlsZVBvaW50ZXIoSEFORExF LExPTkcsUExPTkcsRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNl dEZpbGVTZWN1cml0eUEoTFBDU1RSLFNFQ1VSSVRZX0lORk9STUFUSU9OLFBTRUNVUklUWV9ERVND UklQVE9SKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBTZXRGaWxlU2VjdXJp dHlXKExQQ1dTVFIsU0VDVVJJVFlfSU5GT1JNQVRJT04sUFNFQ1VSSVRZX0RFU0NSSVBUT1IpOw0K Qk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNldEZpbGVUaW1lKEhBTkRMRSxjb25z dCBGSUxFVElNRSosY29uc3QgRklMRVRJTUUqLGNvbnN0IEZJTEVUSU1FKik7DQpVSU5UIF9fYXR0 cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0SGFuZGxlQ291bnQoVUlOVCk7DQpCT09MIF9fYXR0 cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0SGFuZGxlSW5mb3JtYXRpb24oSEFORExFLERXT1JE LERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBTZXRLZXJuZWxPYmpl Y3RTZWN1cml0eShIQU5ETEUsU0VDVVJJVFlfSU5GT1JNQVRJT04sUFNFQ1VSSVRZX0RFU0NSSVBU T1IpOw0Kdm9pZCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNldExhc3RFcnJvcihEV09S RCk7DQp2b2lkIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0TGFzdEVycm9yRXgoRFdP UkQsRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNldExvY2FsVGlt ZShjb25zdCBTWVNURU1USU1FKik7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg U2V0TWFpbHNsb3RJbmZvKEhBTkRMRSxEV09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3Rk Y2FsbF9fKSkgU2V0TmFtZWRQaXBlSGFuZGxlU3RhdGUoSEFORExFLFBEV09SRCxQRFdPUkQsUERX T1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBTZXRQcmlvcml0eUNsYXNz KEhBTkRMRSxEV09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0UHJp dmF0ZU9iamVjdFNlY3VyaXR5KFNFQ1VSSVRZX0lORk9STUFUSU9OLFBTRUNVUklUWV9ERVNDUklQ VE9SLFBTRUNVUklUWV9ERVNDUklQVE9SICosUEdFTkVSSUNfTUFQUElORyxIQU5ETEUpOw0KQk9P TCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNldFByb2Nlc3NBZmZpbml0eU1hc2soSEFO RExFLERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBTZXRQcm9jZXNz UHJpb3JpdHlCb29zdChIQU5ETEUsQk9PTCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2Fs bF9fKSkgU2V0UHJvY2Vzc1NodXRkb3duUGFyYW1ldGVycyhEV09SRCxEV09SRCk7DQpCT09MIF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0UHJvY2Vzc1dvcmtpbmdTZXRTaXplKEhBTkRM RSxEV09SRCxEV09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0U2Vj dXJpdHlEZXNjcmlwdG9yQ29udHJvbChQU0VDVVJJVFlfREVTQ1JJUFRPUixTRUNVUklUWV9ERVND UklQVE9SX0NPTlRST0wsU0VDVVJJVFlfREVTQ1JJUFRPUl9DT05UUk9MKTsNCkJPT0wgX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBTZXRTZWN1cml0eURlc2NyaXB0b3JEYWNsKFBTRUNVUklU WV9ERVNDUklQVE9SLEJPT0wsUEFDTCxCT09MKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBTZXRTZWN1cml0eURlc2NyaXB0b3JHcm91cChQU0VDVVJJVFlfREVTQ1JJUFRPUixQ U0lELEJPT0wpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNldFNlY3VyaXR5 RGVzY3JpcHRvck93bmVyKFBTRUNVUklUWV9ERVNDUklQVE9SLFBTSUQsQk9PTCk7DQpCT09MIF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0U2VjdXJpdHlEZXNjcmlwdG9yU2FjbChQU0VD VVJJVFlfREVTQ1JJUFRPUixCT09MLFBBQ0wsQk9PTCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgU2V0U3RkSGFuZGxlKERXT1JELEhBTkRMRSk7DQoNCkJPT0wgX19hdHRyaWJ1 dGVfXygoX19zdGRjYWxsX18pKSBTZXRTeXN0ZW1Qb3dlclN0YXRlKEJPT0wsQk9PTCk7DQpCT09M IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0U3lzdGVtVGltZShjb25zdCBTWVNURU1U SU1FKik7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0U3lzdGVtVGltZUFk anVzdG1lbnQoRFdPUkQsQk9PTCk7DQpEV09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykp IFNldFRhcGVQYXJhbWV0ZXJzKEhBTkRMRSxEV09SRCxQVk9JRCk7DQpEV09SRCBfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpIFNldFRhcGVQb3NpdGlvbihIQU5ETEUsRFdPUkQsRFdPUkQsRFdP UkQsRFdPUkQsQk9PTCk7DQpEV09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNldFRo cmVhZEFmZmluaXR5TWFzayhIQU5ETEUsRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIFNldFRocmVhZENvbnRleHQoSEFORExFLGNvbnN0IENPTlRFWFQqKTsNCkRXT1JE IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0VGhyZWFkSWRlYWxQcm9jZXNzb3IoSEFO RExFLERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBTZXRUaHJlYWRQ cmlvcml0eShIQU5ETEUsaW50KTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBT ZXRUaHJlYWRQcmlvcml0eUJvb3N0KEhBTkRMRSxCT09MKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSBTZXRUaHJlYWRUb2tlbiAoUEhBTkRMRSxIQU5ETEUpOw0KQk9PTCBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNldFRpbWVab25lSW5mb3JtYXRpb24oY29uc3QgVElN RV9aT05FX0lORk9STUFUSU9OICopOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykp IFNldFRva2VuSW5mb3JtYXRpb24oSEFORExFLFRPS0VOX0lORk9STUFUSU9OX0NMQVNTLFBWT0lE LERXT1JEKTsNCkxQVE9QX0xFVkVMX0VYQ0VQVElPTl9GSUxURVIgX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBTZXRVbmhhbmRsZWRFeGNlcHRpb25GaWx0ZXIoTFBUT1BfTEVWRUxfRVhDRVBU SU9OX0ZJTFRFUik7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0dXBDb21t KEhBTkRMRSxEV09SRCxEV09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg U2V0Vm9sdW1lTGFiZWxBKExQQ1NUUixMUENTVFIpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIFNldFZvbHVtZUxhYmVsVyhMUENXU1RSLExQQ1dTVFIpOw0KQk9PTCBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNldFdhaXRhYmxlVGltZXIoSEFORExFLGNvbnN0IExBUkdF X0lOVEVHRVIqLExPTkcsUFRJTUVSQVBDUk9VVElORSxQVk9JRCxCT09MKTsNCkJPT0wgX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBTaWduYWxPYmplY3RBbmRXYWl0KEhBTkRMRSxIQU5ETEUs RFdPUkQsQk9PTCk7DQpEV09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNpemVvZlJl c291cmNlKEhJTlNUQU5DRSxIUlNSQyk7DQp2b2lkIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgU2xlZXAoRFdPUkQpOw0KRFdPUkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBTbGVl cEV4KERXT1JELEJPT0wpOw0KRFdPUkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBTdXNw ZW5kVGhyZWFkKEhBTkRMRSk7DQp2b2lkIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU3dp dGNoVG9GaWJlcihQVk9JRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU3dp dGNoVG9UaHJlYWQodm9pZCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU3lz dGVtVGltZVRvRmlsZVRpbWUoY29uc3QgU1lTVEVNVElNRSosTFBGSUxFVElNRSk7DQpCT09MIF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU3lzdGVtVGltZVRvVHpTcGVjaWZpY0xvY2FsVGlt ZShMUFRJTUVfWk9ORV9JTkZPUk1BVElPTixMUFNZU1RFTVRJTUUsTFBTWVNURU1USU1FKTsNCkJP T0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBUZXJtaW5hdGVQcm9jZXNzKEhBTkRMRSxV SU5UKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBUZXJtaW5hdGVUaHJlYWQo SEFORExFLERXT1JEKTsNCkRXT1JEIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgVGxzQWxs b2Modm9pZCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgVGxzRnJlZShEV09S RCk7DQpQVk9JRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFRsc0dldFZhbHVlKERXT1JE KTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBUbHNTZXRWYWx1ZShEV09SRCxQ Vk9JRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgVHJhbnNhY3ROYW1lZFBp cGUoSEFORExFLFBWT0lELERXT1JELFBWT0lELERXT1JELFBEV09SRCxMUE9WRVJMQVBQRUQpOw0K Qk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFRyYW5zbWl0Q29tbUNoYXIoSEFORExF LGNoYXIpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFRyeUVudGVyQ3JpdGlj YWxTZWN0aW9uKExQQ1JJVElDQUxfU0VDVElPTik7DQpMT05HIF9fYXR0cmlidXRlX18oKF9fc3Rk Y2FsbF9fKSkgVW5oYW5kbGVkRXhjZXB0aW9uRmlsdGVyKExQRVhDRVBUSU9OX1BPSU5URVJTKTsN CkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBVbmxvY2tGaWxlKEhBTkRMRSxEV09S RCxEV09SRCxEV09SRCxEV09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg VW5sb2NrRmlsZUV4KEhBTkRMRSxEV09SRCxEV09SRCxEV09SRCxMUE9WRVJMQVBQRUQpOw0KDQoN CkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBVbm1hcFZpZXdPZkZpbGUoUFZPSUQp Ow0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFVwZGF0ZVJlc291cmNlQShIQU5E TEUsTFBDU1RSLExQQ1NUUixXT1JELFBWT0lELERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSBVcGRhdGVSZXNvdXJjZVcoSEFORExFLExQQ1dTVFIsTFBDV1NUUixXT1JE LFBWT0lELERXT1JEKTsNClBWT0lEIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgVmlydHVh bEFsbG9jKFBWT0lELERXT1JELERXT1JELERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBWaXJ0dWFsRnJlZShQVk9JRCxEV09SRCxEV09SRCk7DQpCT09MIF9fYXR0cmli dXRlX18oKF9fc3RkY2FsbF9fKSkgVmlydHVhbEZyZWVFeChIQU5ETEUsUFZPSUQsRFdPUkQsRFdP UkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFZpcnR1YWxMb2NrKFBWT0lE LERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBWaXJ0dWFsUHJvdGVj dChQVk9JRCxEV09SRCxEV09SRCxQRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNh bGxfXykpIFZpcnR1YWxQcm90ZWN0RXgoSEFORExFLFBWT0lELERXT1JELERXT1JELFBEV09SRCk7 DQpEV09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFZpcnR1YWxRdWVyeShMUENWT0lE LFBNRU1PUllfQkFTSUNfSU5GT1JNQVRJT04sRFdPUkQpOw0KRFdPUkQgX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSBWaXJ0dWFsUXVlcnlFeChIQU5ETEUsTFBDVk9JRCxQTUVNT1JZX0JBU0lD X0lORk9STUFUSU9OLERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBW aXJ0dWFsVW5sb2NrKFBWT0lELERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBXYWl0Q29tbUV2ZW50KEhBTkRMRSxQRFdPUkQsTFBPVkVSTEFQUEVEKTsNCkJPT0wgX19h dHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBXYWl0Rm9yRGVidWdFdmVudChMUERFQlVHX0VWRU5U LERXT1JEKTsNCkRXT1JEIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgV2FpdEZvck11bHRp cGxlT2JqZWN0cyhEV09SRCxjb25zdCBIQU5ETEUqLEJPT0wsRFdPUkQpOw0KRFdPUkQgX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBXYWl0Rm9yTXVsdGlwbGVPYmplY3RzRXgoRFdPUkQsY29u c3QgSEFORExFKixCT09MLERXT1JELEJPT0wpOw0KRFdPUkQgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBXYWl0Rm9yU2luZ2xlT2JqZWN0KEhBTkRMRSxEV09SRCk7DQpEV09SRCBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIFdhaXRGb3JTaW5nbGVPYmplY3RFeChIQU5ETEUsRFdPUkQs Qk9PTCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgV2FpdE5hbWVkUGlwZUEo TFBDU1RSLERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBXYWl0TmFt ZWRQaXBlVyhMUENXU1RSLERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSBXaW5Mb2FkVHJ1c3RQcm92aWRlcihHVUlEKik7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3Rk Y2FsbF9fKSkgV3JpdGVGaWxlKEhBTkRMRSxQQ1ZPSUQsRFdPUkQsUERXT1JELExQT1ZFUkxBUFBF RCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgV3JpdGVGaWxlRXgoSEFORExF LFBDVk9JRCxEV09SRCxMUE9WRVJMQVBQRUQsTFBPVkVSTEFQUEVEX0NPTVBMRVRJT05fUk9VVElO RSk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgV3JpdGVQcml2YXRlUHJvZmls ZVNlY3Rpb25BKExQQ1NUUixMUENTVFIsTFBDU1RSKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBXcml0ZVByaXZhdGVQcm9maWxlU2VjdGlvblcoTFBDV1NUUixMUENXU1RSLExQ Q1dTVFIpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFdyaXRlUHJpdmF0ZVBy b2ZpbGVTdHJpbmdBKExQQ1NUUixMUENTVFIsTFBDU1RSLExQQ1NUUik7DQpCT09MIF9fYXR0cmli dXRlX18oKF9fc3RkY2FsbF9fKSkgV3JpdGVQcml2YXRlUHJvZmlsZVN0cmluZ1coTFBDV1NUUixM UENXU1RSLExQQ1dTVFIsTFBDV1NUUik7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgV3JpdGVQcml2YXRlUHJvZmlsZVN0cnVjdEEoTFBDU1RSLExQQ1NUUixQVk9JRCxVSU5ULExQ Q1NUUik7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgV3JpdGVQcml2YXRlUHJv ZmlsZVN0cnVjdFcoTFBDV1NUUixMUENXU1RSLFBWT0lELFVJTlQsTFBDV1NUUik7DQpCT09MIF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgV3JpdGVQcm9jZXNzTWVtb3J5KEhBTkRMRSxQVk9J RCxQVk9JRCxEV09SRCxQRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykp IFdyaXRlUHJvZmlsZVNlY3Rpb25BKExQQ1NUUixMUENTVFIpOw0KQk9PTCBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIFdyaXRlUHJvZmlsZVNlY3Rpb25XKExQQ1dTVFIsTFBDV1NUUik7DQpC T09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgV3JpdGVQcm9maWxlU3RyaW5nQShMUENT VFIsTFBDU1RSLExQQ1NUUik7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgV3Jp dGVQcm9maWxlU3RyaW5nVyhMUENXU1RSLExQQ1dTVFIsTFBDV1NUUik7DQpEV09SRCBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIFdyaXRlVGFwZW1hcmsoSEFORExFLERXT1JELERXT1JELEJP T0wpOw0KIyAxNzIwICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL3dpbmJhc2UuaCIgMw0KdHlw ZWRlZiBTVEFSVFVQSU5GT0EgU1RBUlRVUElORk8sKkxQU1RBUlRVUElORk87DQp0eXBlZGVmIFdJ TjMyX0ZJTkRfREFUQUEgV0lOMzJfRklORF9EQVRBLCpMUFdJTjMyX0ZJTkRfREFUQTsNCnR5cGVk ZWYgSFdfUFJPRklMRV9JTkZPQSBIV19QUk9GSUxFX0lORk8sKkxQSFdfUFJPRklMRV9JTkZPOw0K dHlwZWRlZiBPU1ZFUlNJT05JTkZPQSBPU1ZFUlNJT05JTkZPLCpQT1NWRVJTSU9OSU5GTywqTFBP U1ZFUlNJT05JTkZPOw0KIyAxODU4ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL3dpbmJhc2Uu aCIgMw0KfQ0KIyAxMDMgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvd2luZG93cy5oIiAyIDMN Cg0KIyAxICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL3dpbmdkaS5oIiAxIDMNCg0KDQoNCmV4 dGVybiAiQyIgew0KIyAxMTUzICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL3dpbmdkaS5oIiAz DQp0eXBlZGVmIHN0cnVjdCBfQUJDIHsNCiAgICAgICAgaW50IGFiY0E7DQogICAgICAgIFVJTlQg YWJjQjsNCiAgICAgICAgaW50IGFiY0M7DQp9IEFCQywqTFBBQkM7DQp0eXBlZGVmIHN0cnVjdCBf QUJDRkxPQVQgew0KICAgICAgICBGTE9BVCBhYmNmQTsNCiAgICAgICAgRkxPQVQgYWJjZkI7DQog ICAgICAgIEZMT0FUIGFiY2ZDOw0KfSBBQkNGTE9BVCwqTFBBQkNGTE9BVDsNCnR5cGVkZWYgc3Ry dWN0IHRhZ0JJVE1BUCB7DQogICAgICAgIExPTkcgYm1UeXBlOw0KICAgICAgICBMT05HIGJtV2lk dGg7DQogICAgICAgIExPTkcgYm1IZWlnaHQ7DQogICAgICAgIExPTkcgYm1XaWR0aEJ5dGVzOw0K ICAgICAgICBXT1JEIGJtUGxhbmVzOw0KICAgICAgICBXT1JEIGJtQml0c1BpeGVsOw0KICAgICAg ICBMUFZPSUQgYm1CaXRzOw0KfSBCSVRNQVAsKlBCSVRNQVAsKkxQQklUTUFQOw0KdHlwZWRlZiBz dHJ1Y3QgdGFnQklUTUFQQ09SRUhFQURFUiB7DQogICAgICAgIERXT1JEIGJjU2l6ZTsNCiAgICAg ICAgV09SRCBiY1dpZHRoOw0KICAgICAgICBXT1JEIGJjSGVpZ2h0Ow0KICAgICAgICBXT1JEIGJj UGxhbmVzOw0KICAgICAgICBXT1JEIGJjQml0Q291bnQ7DQp9IEJJVE1BUENPUkVIRUFERVIsKkxQ QklUTUFQQ09SRUhFQURFUiwqUEJJVE1BUENPUkVIRUFERVI7DQojcHJhZ21hIHBhY2socHVzaCwx KQ0KdHlwZWRlZiBzdHJ1Y3QgdGFnUkdCVFJJUExFIHsNCiAgICAgICAgQllURSByZ2J0Qmx1ZTsN CiAgICAgICAgQllURSByZ2J0R3JlZW47DQogICAgICAgIEJZVEUgcmdidFJlZDsNCn0gUkdCVFJJ UExFOw0KI3ByYWdtYSBwYWNrKHBvcCkNCiNwcmFnbWEgcGFjayhwdXNoLDIpDQp0eXBlZGVmIHN0 cnVjdCB0YWdCSVRNQVBGSUxFSEVBREVSIHsNCiAgICAgICAgV09SRCBiZlR5cGU7DQogICAgICAg IERXT1JEIGJmU2l6ZTsNCiAgICAgICAgV09SRCBiZlJlc2VydmVkMTsNCiAgICAgICAgV09SRCBi ZlJlc2VydmVkMjsNCiAgICAgICAgRFdPUkQgYmZPZmZCaXRzOw0KfSBCSVRNQVBGSUxFSEVBREVS LCpMUEJJVE1BUEZJTEVIRUFERVIsKlBCSVRNQVBGSUxFSEVBREVSOw0KI3ByYWdtYSBwYWNrKHBv cCkNCnR5cGVkZWYgc3RydWN0IF9CSVRNQVBDT1JFSU5GTyB7DQogICAgICAgIEJJVE1BUENPUkVI RUFERVIgYm1jaUhlYWRlcjsNCiAgICAgICAgUkdCVFJJUExFIGJtY2lDb2xvcnNbMV07DQp9IEJJ VE1BUENPUkVJTkZPLCpMUEJJVE1BUENPUkVJTkZPLCpQQklUTUFQQ09SRUlORk87DQp0eXBlZGVm IHN0cnVjdCB0YWdCSVRNQVBJTkZPSEVBREVSew0KICAgICAgICBEV09SRCBiaVNpemU7DQogICAg ICAgIExPTkcgYmlXaWR0aDsNCiAgICAgICAgTE9ORyBiaUhlaWdodDsNCiAgICAgICAgV09SRCBi aVBsYW5lczsNCiAgICAgICAgV09SRCBiaUJpdENvdW50Ow0KICAgICAgICBEV09SRCBiaUNvbXBy ZXNzaW9uOw0KICAgICAgICBEV09SRCBiaVNpemVJbWFnZTsNCiAgICAgICAgTE9ORyBiaVhQZWxz UGVyTWV0ZXI7DQogICAgICAgIExPTkcgYmlZUGVsc1Blck1ldGVyOw0KICAgICAgICBEV09SRCBi aUNsclVzZWQ7DQogICAgICAgIERXT1JEIGJpQ2xySW1wb3J0YW50Ow0KfSBCSVRNQVBJTkZPSEVB REVSLCpMUEJJVE1BUElORk9IRUFERVIsKlBCSVRNQVBJTkZPSEVBREVSOw0KdHlwZWRlZiBzdHJ1 Y3QgdGFnUkdCUVVBRCB7DQogICAgICAgIEJZVEUgcmdiQmx1ZTsNCiAgICAgICAgQllURSByZ2JH cmVlbjsNCiAgICAgICAgQllURSByZ2JSZWQ7DQogICAgICAgIEJZVEUgcmdiUmVzZXJ2ZWQ7DQp9 IFJHQlFVQUQ7DQp0eXBlZGVmIHN0cnVjdCB0YWdCSVRNQVBJTkZPIHsNCiAgICAgICAgQklUTUFQ SU5GT0hFQURFUiBibWlIZWFkZXI7DQogICAgICAgIFJHQlFVQUQgYm1pQ29sb3JzWzFdOw0KfSBC SVRNQVBJTkZPLCpMUEJJVE1BUElORk8sKlBCSVRNQVBJTkZPOw0KdHlwZWRlZiBsb25nIEZYUFQx NkRPVDE2LCpMUEZYUFQxNkRPVDE2Ow0KdHlwZWRlZiBsb25nIEZYUFQyRE9UMzAsKkxQRlhQVDJE T1QzMDsNCnR5cGVkZWYgc3RydWN0IHRhZ0NJRVhZWiB7DQogICAgICAgIEZYUFQyRE9UMzAgY2ll eHl6WDsNCiAgICAgICAgRlhQVDJET1QzMCBjaWV4eXpZOw0KICAgICAgICBGWFBUMkRPVDMwIGNp ZXh5elo7DQp9IENJRVhZWiwqTFBDSUVYWVo7DQp0eXBlZGVmIHN0cnVjdCB0YWdDSUVYWVpUUklQ TEUgew0KICAgICAgICBDSUVYWVogY2lleHl6UmVkOw0KICAgICAgICBDSUVYWVogY2lleHl6R3Jl ZW47DQogICAgICAgIENJRVhZWiBjaWV4eXpCbHVlOw0KfSBDSUVYWVpUUklQTEUsKkxQQ0lFWFla VFJJUExFOw0KdHlwZWRlZiBzdHJ1Y3Qgew0KICAgICAgICBEV09SRCBiVjRTaXplOw0KICAgICAg ICBMT05HIGJWNFdpZHRoOw0KICAgICAgICBMT05HIGJWNEhlaWdodDsNCiAgICAgICAgV09SRCBi VjRQbGFuZXM7DQogICAgICAgIFdPUkQgYlY0Qml0Q291bnQ7DQogICAgICAgIERXT1JEIGJWNFY0 Q29tcHJlc3Npb247DQogICAgICAgIERXT1JEIGJWNFNpemVJbWFnZTsNCiAgICAgICAgTE9ORyBi VjRYUGVsc1Blck1ldGVyOw0KICAgICAgICBMT05HIGJWNFlQZWxzUGVyTWV0ZXI7DQogICAgICAg IERXT1JEIGJWNENsclVzZWQ7DQogICAgICAgIERXT1JEIGJWNENsckltcG9ydGFudDsNCiAgICAg ICAgRFdPUkQgYlY0UmVkTWFzazsNCiAgICAgICAgRFdPUkQgYlY0R3JlZW5NYXNrOw0KICAgICAg ICBEV09SRCBiVjRCbHVlTWFzazsNCiAgICAgICAgRFdPUkQgYlY0QWxwaGFNYXNrOw0KICAgICAg ICBEV09SRCBiVjRDU1R5cGU7DQogICAgICAgIENJRVhZWlRSSVBMRSBiVjRFbmRwb2ludHM7DQog ICAgICAgIERXT1JEIGJWNEdhbW1hUmVkOw0KICAgICAgICBEV09SRCBiVjRHYW1tYUdyZWVuOw0K ICAgICAgICBEV09SRCBiVjRHYW1tYUJsdWU7DQp9IEJJVE1BUFY0SEVBREVSLCpMUEJJVE1BUFY0 SEVBREVSLCpQQklUTUFQVjRIRUFERVI7DQp0eXBlZGVmIHN0cnVjdCB0YWdGT05UU0lHTkFUVVJF IHsNCiAgICAgICAgRFdPUkQgZnNVc2JbNF07DQogICAgICAgIERXT1JEIGZzQ3NiWzJdOw0KfSBG T05UU0lHTkFUVVJFLCpMUEZPTlRTSUdOQVRVUkU7DQp0eXBlZGVmIHN0cnVjdCB7DQogICAgICAg IFVJTlQgY2lDaGFyc2V0Ow0KICAgICAgICBVSU5UIGNpQUNQOw0KICAgICAgICBGT05UU0lHTkFU VVJFIGZzOw0KfSBDSEFSU0VUSU5GTywqTFBDSEFSU0VUSU5GTzsNCnR5cGVkZWYgc3RydWN0IHRh Z0NPTE9SQURKVVNUTUVOVCB7DQogICAgICAgIFdPUkQgY2FTaXplOw0KICAgICAgICBXT1JEIGNh RmxhZ3M7DQogICAgICAgIFdPUkQgY2FJbGx1bWluYW50SW5kZXg7DQogICAgICAgIFdPUkQgY2FS ZWRHYW1tYTsNCiAgICAgICAgV09SRCBjYUdyZWVuR2FtbWE7DQogICAgICAgIFdPUkQgY2FCbHVl R2FtbWE7DQogICAgICAgIFdPUkQgY2FSZWZlcmVuY2VCbGFjazsNCiAgICAgICAgV09SRCBjYVJl ZmVyZW5jZVdoaXRlOw0KICAgICAgICBTSE9SVCBjYUNvbnRyYXN0Ow0KICAgICAgICBTSE9SVCBj YUJyaWdodG5lc3M7DQogICAgICAgIFNIT1JUIGNhQ29sb3JmdWxuZXNzOw0KICAgICAgICBTSE9S VCBjYVJlZEdyZWVuVGludDsNCn0gQ09MT1JBREpVU1RNRU5ULCpMUENPTE9SQURKVVNUTUVOVDsN CnR5cGVkZWYgc3RydWN0IF9kZXZpY2Vtb2RlQSB7DQogICAgICAgIEJZVEUgZG1EZXZpY2VOYW1l WzMyXTsNCiAgICAgICAgV09SRCBkbVNwZWNWZXJzaW9uOw0KICAgICAgICBXT1JEIGRtRHJpdmVy VmVyc2lvbjsNCiAgICAgICAgV09SRCBkbVNpemU7DQogICAgICAgIFdPUkQgZG1Ecml2ZXJFeHRy YTsNCiAgICAgICAgRFdPUkQgZG1GaWVsZHM7DQogICAgICAgIHNob3J0IGRtT3JpZW50YXRpb247 DQogICAgICAgIHNob3J0IGRtUGFwZXJTaXplOw0KICAgICAgICBzaG9ydCBkbVBhcGVyTGVuZ3Ro Ow0KICAgICAgICBzaG9ydCBkbVBhcGVyV2lkdGg7DQogICAgICAgIHNob3J0IGRtU2NhbGU7DQog ICAgICAgIHNob3J0IGRtQ29waWVzOw0KICAgICAgICBzaG9ydCBkbURlZmF1bHRTb3VyY2U7DQog ICAgICAgIHNob3J0IGRtUHJpbnRRdWFsaXR5Ow0KICAgICAgICBzaG9ydCBkbUNvbG9yOw0KICAg ICAgICBzaG9ydCBkbUR1cGxleDsNCiAgICAgICAgc2hvcnQgZG1ZUmVzb2x1dGlvbjsNCiAgICAg ICAgc2hvcnQgZG1UVE9wdGlvbjsNCiAgICAgICAgc2hvcnQgZG1Db2xsYXRlOw0KICAgICAgICBC WVRFIGRtRm9ybU5hbWVbMzJdOw0KICAgICAgICBXT1JEIGRtTG9nUGl4ZWxzOw0KICAgICAgICBE V09SRCBkbUJpdHNQZXJQZWw7DQogICAgICAgIERXT1JEIGRtUGVsc1dpZHRoOw0KICAgICAgICBE V09SRCBkbVBlbHNIZWlnaHQ7DQogICAgICAgIERXT1JEIGRtRGlzcGxheUZsYWdzOw0KICAgICAg ICBEV09SRCBkbURpc3BsYXlGcmVxdWVuY3k7DQogICAgICAgIERXT1JEIGRtSUNNTWV0aG9kOw0K ICAgICAgICBEV09SRCBkbUlDTUludGVudDsNCiAgICAgICAgRFdPUkQgZG1NZWRpYVR5cGU7DQog ICAgICAgIERXT1JEIGRtRGl0aGVyVHlwZTsNCiAgICAgICAgRFdPUkQgZG1JQ0NNYW51ZmFjdHVy ZXI7DQogICAgICAgIERXT1JEIGRtSUNDTW9kZWw7DQp9IERFVk1PREVBLCpMUERFVk1PREVBLCpQ REVWTU9ERUE7DQp0eXBlZGVmIHN0cnVjdCBfZGV2aWNlbW9kZVcgew0KICAgICAgICBXQ0hBUiBk bURldmljZU5hbWVbMzJdOw0KICAgICAgICBXT1JEIGRtU3BlY1ZlcnNpb247DQogICAgICAgIFdP UkQgZG1Ecml2ZXJWZXJzaW9uOw0KICAgICAgICBXT1JEIGRtU2l6ZTsNCiAgICAgICAgV09SRCBk bURyaXZlckV4dHJhOw0KICAgICAgICBEV09SRCBkbUZpZWxkczsNCiAgICAgICAgc2hvcnQgZG1P cmllbnRhdGlvbjsNCiAgICAgICAgc2hvcnQgZG1QYXBlclNpemU7DQogICAgICAgIHNob3J0IGRt UGFwZXJMZW5ndGg7DQogICAgICAgIHNob3J0IGRtUGFwZXJXaWR0aDsNCiAgICAgICAgc2hvcnQg ZG1TY2FsZTsNCiAgICAgICAgc2hvcnQgZG1Db3BpZXM7DQogICAgICAgIHNob3J0IGRtRGVmYXVs dFNvdXJjZTsNCiAgICAgICAgc2hvcnQgZG1QcmludFF1YWxpdHk7DQogICAgICAgIHNob3J0IGRt Q29sb3I7DQogICAgICAgIHNob3J0IGRtRHVwbGV4Ow0KICAgICAgICBzaG9ydCBkbVlSZXNvbHV0 aW9uOw0KICAgICAgICBzaG9ydCBkbVRUT3B0aW9uOw0KICAgICAgICBzaG9ydCBkbUNvbGxhdGU7 DQogICAgICAgIFdDSEFSIGRtRm9ybU5hbWVbMzJdOw0KICAgICAgICBXT1JEIGRtTG9nUGl4ZWxz Ow0KICAgICAgICBEV09SRCBkbUJpdHNQZXJQZWw7DQogICAgICAgIERXT1JEIGRtUGVsc1dpZHRo Ow0KICAgICAgICBEV09SRCBkbVBlbHNIZWlnaHQ7DQogICAgICAgIERXT1JEIGRtRGlzcGxheUZs YWdzOw0KICAgICAgICBEV09SRCBkbURpc3BsYXlGcmVxdWVuY3k7DQogICAgICAgIERXT1JEIGRt SUNNTWV0aG9kOw0KICAgICAgICBEV09SRCBkbUlDTUludGVudDsNCiAgICAgICAgRFdPUkQgZG1N ZWRpYVR5cGU7DQogICAgICAgIERXT1JEIGRtRGl0aGVyVHlwZTsNCiAgICAgICAgRFdPUkQgZG1J Q0NNYW51ZmFjdHVyZXI7DQogICAgICAgIERXT1JEIGRtSUNDTW9kZWw7DQp9IERFVk1PREVXLCpM UERFVk1PREVXLCpQREVWTU9ERVc7DQp0eXBlZGVmIHN0cnVjdCB0YWdESUJTRUNUSU9OIHsNCiAg ICAgICAgQklUTUFQIGRzQm07DQogICAgICAgIEJJVE1BUElORk9IRUFERVIgZHNCbWloOw0KICAg ICAgICBEV09SRCBkc0JpdGZpZWxkc1szXTsNCiAgICAgICAgSEFORExFIGRzaFNlY3Rpb247DQog ICAgICAgIERXT1JEIGRzT2Zmc2V0Ow0KfSBESUJTRUNUSU9OOw0KdHlwZWRlZiBzdHJ1Y3QgX0RP Q0lORk9BIHsNCiAgICAgICAgaW50IGNiU2l6ZTsNCiAgICAgICAgTFBDVFNUUiBscHN6RG9jTmFt ZTsNCiAgICAgICAgTFBDVFNUUiBscHN6T3V0cHV0Ow0KICAgICAgICBMUENUU1RSIGxwc3pEYXRh dHlwZTsNCiAgICAgICAgRFdPUkQgZndUeXBlOw0KfSBET0NJTkZPQSwqTFBET0NJTkZPQTsNCnR5 cGVkZWYgc3RydWN0IF9ET0NJTkZPVyB7DQogICAgICAgIGludCBjYlNpemU7DQogICAgICAgIExQ Q1dTVFIgbHBzekRvY05hbWU7DQogICAgICAgIExQQ1dTVFIgbHBzek91dHB1dDsNCiAgICAgICAg TFBDV1NUUiBscHN6RGF0YXR5cGU7DQogICAgICAgIERXT1JEIGZ3VHlwZTsNCn0gRE9DSU5GT1cs KkxQRE9DSU5GT1c7DQp0eXBlZGVmIHN0cnVjdCB0YWdFTVIgew0KICAgICAgICBEV09SRCBpVHlw ZTsNCiAgICAgICAgRFdPUkQgblNpemU7DQp9IEVNUiwqUEVNUjsNCnR5cGVkZWYgc3RydWN0IHRh Z0VNUkFOR0xFQVJDIHsNCiAgICAgICAgRU1SIGVtcjsNCiAgICAgICAgUE9JTlRMIHB0bENlbnRl cjsNCiAgICAgICAgRFdPUkQgblJhZGl1czsNCiAgICAgICAgRkxPQVQgZVN0YXJ0QW5nbGU7DQog ICAgICAgIEZMT0FUIGVTd2VlcEFuZ2xlOw0KfSBFTVJBTkdMRUFSQywqUEVNUkFOR0xFQVJDOw0K dHlwZWRlZiBzdHJ1Y3QgdGFnRU1SQVJDIHsNCiAgICAgICAgRU1SIGVtcjsNCiAgICAgICAgUkVD VEwgcmNsQm94Ow0KICAgICAgICBQT0lOVEwgcHRsU3RhcnQ7DQogICAgICAgIFBPSU5UTCBwdGxF bmQ7DQp9IEVNUkFSQywqUEVNUkFSQyxFTVJBUkNUTywqUEVNUkFSQ1RPLEVNUkNIT1JELCpQRU1S Q0hPUkQsRU1SUElFLCpQRU1SUElFOw0KdHlwZWRlZiBzdHJ1Y3QgX1hGT1JNIHsNCiAgICAgICAg RkxPQVQgZU0xMTsNCiAgICAgICAgRkxPQVQgZU0xMjsNCiAgICAgICAgRkxPQVQgZU0yMTsNCiAg ICAgICAgRkxPQVQgZU0yMjsNCiAgICAgICAgRkxPQVQgZUR4Ow0KICAgICAgICBGTE9BVCBlRHk7 DQp9IFhGT1JNLCpMUFhGT1JNOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnRU1SQklUQkxUIHsNCiAgICAg ICAgRU1SIGVtcjsNCiAgICAgICAgUkVDVEwgcmNsQm91bmRzOw0KICAgICAgICBMT05HIHhEZXN0 Ow0KICAgICAgICBMT05HIHlEZXN0Ow0KICAgICAgICBMT05HIGN4RGVzdDsNCiAgICAgICAgTE9O RyBjeURlc3Q7DQogICAgICAgIERXT1JEIGR3Um9wOw0KICAgICAgICBMT05HIHhTcmM7DQogICAg ICAgIExPTkcgeVNyYzsNCiAgICAgICAgWEZPUk0geGZvcm1TcmM7DQogICAgICAgIENPTE9SUkVG IGNyQmtDb2xvclNyYzsNCiAgICAgICAgRFdPUkQgaVVzYWdlU3JjOw0KICAgICAgICBEV09SRCBv ZmZCbWlTcmM7DQogICAgICAgIERXT1JEIG9mZkJpdHNTcmM7DQogICAgICAgIERXT1JEIGNiQml0 c1NyYzsNCn0gRU1SQklUQkxULCpQRU1SQklUQkxUOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnTE9HQlJV U0ggew0KICAgICAgICBVSU5UIGxiU3R5bGU7DQogICAgICAgIENPTE9SUkVGIGxiQ29sb3I7DQog ICAgICAgIExPTkcgbGJIYXRjaDsNCn0gTE9HQlJVU0gsKkxQTE9HQlJVU0g7DQp0eXBlZGVmIExP R0JSVVNIIFBBVFRFUk4sKlBQQVRURVJOLCpMUFBBVFRFUk47DQp0eXBlZGVmIHN0cnVjdCB0YWdF TVJDUkVBVEVCUlVTSElORElSRUNUIHsNCiAgICAgICAgRU1SIGVtcjsNCiAgICAgICAgRFdPUkQg aWhCcnVzaDsNCiAgICAgICAgTE9HQlJVU0ggbGI7DQp9IEVNUkNSRUFURUJSVVNISU5ESVJFQ1Qs KlBFTVJDUkVBVEVCUlVTSElORElSRUNUOw0KdHlwZWRlZiBMT05HIExDU0NTVFlQRTsNCnR5cGVk ZWYgTE9ORyBMQ1NHQU1VVE1BVENIOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnTE9HQ09MT1JTUEFDRUEg ew0KICAgICAgICBEV09SRCBsY3NTaWduYXR1cmU7DQogICAgICAgIERXT1JEIGxjc1ZlcnNpb247 DQogICAgICAgIERXT1JEIGxjc1NpemU7DQogICAgICAgIExDU0NTVFlQRSBsY3NDU1R5cGU7DQog ICAgICAgIExDU0dBTVVUTUFUQ0ggbGNzSW50ZW50Ow0KICAgICAgICBDSUVYWVpUUklQTEUgbGNz RW5kcG9pbnRzOw0KICAgICAgICBEV09SRCBsY3NHYW1tYVJlZDsNCiAgICAgICAgRFdPUkQgbGNz R2FtbWFHcmVlbjsNCiAgICAgICAgRFdPUkQgbGNzR2FtbWFCbHVlOw0KICAgICAgICBDSEFSIGxj c0ZpbGVuYW1lWzI2MF07DQp9IExPR0NPTE9SU1BBQ0VBLCpMUExPR0NPTE9SU1BBQ0VBOw0KdHlw ZWRlZiBzdHJ1Y3QgdGFnTE9HQ09MT1JTUEFDRVcgew0KICAgICAgICBEV09SRCBsY3NTaWduYXR1 cmU7DQogICAgICAgIERXT1JEIGxjc1ZlcnNpb247DQogICAgICAgIERXT1JEIGxjc1NpemU7DQog ICAgICAgIExDU0NTVFlQRSBsY3NDU1R5cGU7DQogICAgICAgIExDU0dBTVVUTUFUQ0ggbGNzSW50 ZW50Ow0KICAgICAgICBDSUVYWVpUUklQTEUgbGNzRW5kcG9pbnRzOw0KICAgICAgICBEV09SRCBs Y3NHYW1tYVJlZDsNCiAgICAgICAgRFdPUkQgbGNzR2FtbWFHcmVlbjsNCiAgICAgICAgRFdPUkQg bGNzR2FtbWFCbHVlOw0KICAgICAgICBXQ0hBUiBsY3NGaWxlbmFtZVsyNjBdOw0KfSBMT0dDT0xP UlNQQUNFVywqTFBMT0dDT0xPUlNQQUNFVzsNCnR5cGVkZWYgc3RydWN0IHRhZ0VNUkNSRUFURUNP TE9SU1BBQ0Ugew0KICAgICAgICBFTVIgZW1yOw0KICAgICAgICBEV09SRCBpaENTOw0KICAgICAg ICBMT0dDT0xPUlNQQUNFVyBsY3M7DQp9IEVNUkNSRUFURUNPTE9SU1BBQ0UsKlBFTVJDUkVBVEVD T0xPUlNQQUNFOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnRU1SQ1JFQVRFRElCUEFUVEVSTkJSVVNIUFQg ew0KICAgICAgICBFTVIgZW1yOw0KICAgICAgICBEV09SRCBpaEJydXNoOw0KICAgICAgICBEV09S RCBpVXNhZ2U7DQogICAgICAgIERXT1JEIG9mZkJtaTsNCiAgICAgICAgRFdPUkQgY2JCbWk7DQog ICAgICAgIERXT1JEIG9mZkJpdHM7DQogICAgICAgIERXT1JEIGNiQml0czsNCn0gRU1SQ1JFQVRF RElCUEFUVEVSTkJSVVNIUFQsKlBFTVJDUkVBVEVESUJQQVRURVJOQlJVU0hQVDsNCnR5cGVkZWYg c3RydWN0IHRhZ0VNUkNSRUFURU1PTk9CUlVTSCB7DQogICAgICAgIEVNUiBlbXI7DQogICAgICAg IERXT1JEIGloQnJ1c2g7DQogICAgICAgIERXT1JEIGlVc2FnZTsNCiAgICAgICAgRFdPUkQgb2Zm Qm1pOw0KICAgICAgICBEV09SRCBjYkJtaTsNCiAgICAgICAgRFdPUkQgb2ZmQml0czsNCiAgICAg ICAgRFdPUkQgY2JCaXRzOw0KfSBFTVJDUkVBVEVNT05PQlJVU0gsKlBFTVJDUkVBVEVNT05PQlJV U0g7DQp0eXBlZGVmIHN0cnVjdCB0YWdQQUxFVFRFRU5UUlkgew0KICAgICAgICBCWVRFIHBlUmVk Ow0KICAgICAgICBCWVRFIHBlR3JlZW47DQogICAgICAgIEJZVEUgcGVCbHVlOw0KICAgICAgICBC WVRFIHBlRmxhZ3M7DQp9IFBBTEVUVEVFTlRSWSwqTFBQQUxFVFRFRU5UUlksKlBQQUxFVFRFRU5U Ulk7DQp0eXBlZGVmIHN0cnVjdCB0YWdMT0dQQUxFVFRFIHsNCiAgICAgICAgV09SRCBwYWxWZXJz aW9uOw0KICAgICAgICBXT1JEIHBhbE51bUVudHJpZXM7DQogICAgICAgIFBBTEVUVEVFTlRSWSBw YWxQYWxFbnRyeVsxXTsNCn0gTE9HUEFMRVRURSwqTlBMT0dQQUxFVFRFLCpQTE9HUEFMRVRURSwq TFBMT0dQQUxFVFRFOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnRU1SQ1JFQVRFUEFMRVRURSB7DQogICAg ICAgIEVNUiBlbXI7DQogICAgICAgIERXT1JEIGloUGFsOw0KICAgICAgICBMT0dQQUxFVFRFIGxn cGw7DQp9IEVNUkNSRUFURVBBTEVUVEUsKlBFTVJDUkVBVEVQQUxFVFRFOw0KdHlwZWRlZiBzdHJ1 Y3QgdGFnTE9HUEVOIHsNCiAgICAgICAgVUlOVCBsb3BuU3R5bGU7DQogICAgICAgIFBPSU5UIGxv cG5XaWR0aDsNCiAgICAgICAgQ09MT1JSRUYgbG9wbkNvbG9yOw0KfSBMT0dQRU4sKkxQTE9HUEVO Ow0KdHlwZWRlZiBzdHJ1Y3QgdGFnRU1SQ1JFQVRFUEVOIHsNCiAgICAgICAgRU1SIGVtcjsNCiAg ICAgICAgRFdPUkQgaWhQZW47DQogICAgICAgIExPR1BFTiBsb3BuOw0KfSBFTVJDUkVBVEVQRU4s KlBFTVJDUkVBVEVQRU47DQp0eXBlZGVmIHN0cnVjdCB0YWdFTVJFTExJUFNFIHsNCiAgICAgICAg RU1SIGVtcjsNCiAgICAgICAgUkVDVEwgcmNsQm94Ow0KfSBFTVJFTExJUFNFLCpQRU1SRUxMSVBT RSxFTVJSRUNUQU5HTEUsKlBFTVJSRUNUQU5HTEU7DQp0eXBlZGVmIHN0cnVjdCB0YWdFTVJFT0Yg ew0KICAgICAgICBFTVIgZW1yOw0KICAgICAgICBEV09SRCBuUGFsRW50cmllczsNCiAgICAgICAg RFdPUkQgb2ZmUGFsRW50cmllczsNCiAgICAgICAgRFdPUkQgblNpemVMYXN0Ow0KfSBFTVJFT0Ys KlBFTVJFT0Y7DQp0eXBlZGVmIHN0cnVjdCB0YWdFTVJFWENMVURFQ0xJUFJFQ1Qgew0KICAgICAg ICBFTVIgZW1yOw0KICAgICAgICBSRUNUTCByY2xDbGlwOw0KfSBFTVJFWENMVURFQ0xJUFJFQ1Qs KlBFTVJFWENMVURFQ0xJUFJFQ1QsRU1SSU5URVJTRUNUQ0xJUFJFQ1QsKlBFTVJJTlRFUlNFQ1RD TElQUkVDVDsNCnR5cGVkZWYgc3RydWN0IHRhZ1BBTk9TRSB7DQogICAgICAgIEJZVEUgYkZhbWls eVR5cGU7DQogICAgICAgIEJZVEUgYlNlcmlmU3R5bGU7DQogICAgICAgIEJZVEUgYldlaWdodDsN CiAgICAgICAgQllURSBiUHJvcG9ydGlvbjsNCiAgICAgICAgQllURSBiQ29udHJhc3Q7DQogICAg ICAgIEJZVEUgYlN0cm9rZVZhcmlhdGlvbjsNCiAgICAgICAgQllURSBiQXJtU3R5bGU7DQogICAg ICAgIEJZVEUgYkxldHRlcmZvcm07DQogICAgICAgIEJZVEUgYk1pZGxpbmU7DQogICAgICAgIEJZ VEUgYlhIZWlnaHQ7DQp9IFBBTk9TRTsNCnR5cGVkZWYgc3RydWN0IHRhZ0xPR0ZPTlRBIHsNCiAg ICAgICAgTE9ORyBsZkhlaWdodDsNCiAgICAgICAgTE9ORyBsZldpZHRoOw0KICAgICAgICBMT05H IGxmRXNjYXBlbWVudDsNCiAgICAgICAgTE9ORyBsZk9yaWVudGF0aW9uOw0KICAgICAgICBMT05H IGxmV2VpZ2h0Ow0KICAgICAgICBCWVRFIGxmSXRhbGljOw0KICAgICAgICBCWVRFIGxmVW5kZXJs aW5lOw0KICAgICAgICBCWVRFIGxmU3RyaWtlT3V0Ow0KICAgICAgICBCWVRFIGxmQ2hhclNldDsN CiAgICAgICAgQllURSBsZk91dFByZWNpc2lvbjsNCiAgICAgICAgQllURSBsZkNsaXBQcmVjaXNp b247DQogICAgICAgIEJZVEUgbGZRdWFsaXR5Ow0KICAgICAgICBCWVRFIGxmUGl0Y2hBbmRGYW1p bHk7DQogICAgICAgIENIQVIgbGZGYWNlTmFtZVszMl07DQp9IExPR0ZPTlRBLCpQTE9HRk9OVEEs KkxQTE9HRk9OVEE7DQp0eXBlZGVmIHN0cnVjdCB0YWdMT0dGT05UVyB7DQogICAgICAgIExPTkcg bGZIZWlnaHQ7DQogICAgICAgIExPTkcgbGZXaWR0aDsNCiAgICAgICAgTE9ORyBsZkVzY2FwZW1l bnQ7DQogICAgICAgIExPTkcgbGZPcmllbnRhdGlvbjsNCiAgICAgICAgTE9ORyBsZldlaWdodDsN CiAgICAgICAgQllURSBsZkl0YWxpYzsNCiAgICAgICAgQllURSBsZlVuZGVybGluZTsNCiAgICAg ICAgQllURSBsZlN0cmlrZU91dDsNCiAgICAgICAgQllURSBsZkNoYXJTZXQ7DQogICAgICAgIEJZ VEUgbGZPdXRQcmVjaXNpb247DQogICAgICAgIEJZVEUgbGZDbGlwUHJlY2lzaW9uOw0KICAgICAg ICBCWVRFIGxmUXVhbGl0eTsNCiAgICAgICAgQllURSBsZlBpdGNoQW5kRmFtaWx5Ow0KICAgICAg ICBXQ0hBUiBsZkZhY2VOYW1lWzMyXTsNCn0gTE9HRk9OVFcsKlBMT0dGT05UVywqTFBMT0dGT05U VzsNCnR5cGVkZWYgc3RydWN0IHRhZ0VYVExPR0ZPTlRBIHsNCiAgICAgICAgTE9HRk9OVEEgZWxm TG9nRm9udDsNCiAgICAgICAgQllURSBlbGZGdWxsTmFtZVs2NF07DQogICAgICAgIEJZVEUgZWxm U3R5bGVbMzJdOw0KICAgICAgICBEV09SRCBlbGZWZXJzaW9uOw0KICAgICAgICBEV09SRCBlbGZT dHlsZVNpemU7DQogICAgICAgIERXT1JEIGVsZk1hdGNoOw0KICAgICAgICBEV09SRCBlbGZSZXNl cnZlZDsNCiAgICAgICAgQllURSBlbGZWZW5kb3JJZFs0XTsNCiAgICAgICAgRFdPUkQgZWxmQ3Vs dHVyZTsNCiAgICAgICAgUEFOT1NFIGVsZlBhbm9zZTsNCn0gRVhUTE9HRk9OVEEsKlBFWFRMT0dG T05UQSwqTFBFWFRMT0dGT05UQTsNCnR5cGVkZWYgc3RydWN0IHRhZ0VYVExPR0ZPTlRXIHsNCiAg ICAgICAgTE9HRk9OVFcgZWxmTG9nRm9udDsNCiAgICAgICAgV0NIQVIgZWxmRnVsbE5hbWVbNjRd Ow0KICAgICAgICBXQ0hBUiBlbGZTdHlsZVszMl07DQogICAgICAgIERXT1JEIGVsZlZlcnNpb247 DQogICAgICAgIERXT1JEIGVsZlN0eWxlU2l6ZTsNCiAgICAgICAgRFdPUkQgZWxmTWF0Y2g7DQog ICAgICAgIERXT1JEIGVsZlJlc2VydmVkOw0KICAgICAgICBCWVRFIGVsZlZlbmRvcklkWzRdOw0K ICAgICAgICBEV09SRCBlbGZDdWx0dXJlOw0KICAgICAgICBQQU5PU0UgZWxmUGFub3NlOw0KfSBF WFRMT0dGT05UVywqUEVYVExPR0ZPTlRXLCpMUEVYVExPR0ZPTlRXOw0KdHlwZWRlZiBzdHJ1Y3Qg dGFnRU1SRVhUQ1JFQVRFRk9OVElORElSRUNUVyB7DQogICAgICAgIEVNUiBlbXI7DQogICAgICAg IERXT1JEIGloRm9udDsNCiAgICAgICAgRVhUTE9HRk9OVFcgZWxmdzsNCn0gRU1SRVhUQ1JFQVRF Rk9OVElORElSRUNUVywqUEVNUkVYVENSRUFURUZPTlRJTkRJUkVDVFc7DQp0eXBlZGVmIHN0cnVj dCB0YWdFWFRMT0dQRU4gew0KICAgICAgICBVSU5UIGVscFBlblN0eWxlOw0KICAgICAgICBVSU5U IGVscFdpZHRoOw0KICAgICAgICBVSU5UIGVscEJydXNoU3R5bGU7DQogICAgICAgIENPTE9SUkVG IGVscENvbG9yOw0KICAgICAgICBMT05HIGVscEhhdGNoOw0KICAgICAgICBEV09SRCBlbHBOdW1F bnRyaWVzOw0KICAgICAgICBEV09SRCBlbHBTdHlsZUVudHJ5WzFdOw0KfSBFWFRMT0dQRU4sKlBF WFRMT0dQRU4sKkxQRVhUTE9HUEVOOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnRU1SRVhUQ1JFQVRFUEVO IHsNCiAgICAgICAgRU1SIGVtcjsNCiAgICAgICAgRFdPUkQgaWhQZW47DQogICAgICAgIERXT1JE IG9mZkJtaTsNCiAgICAgICAgRFdPUkQgY2JCbWk7DQogICAgICAgIERXT1JEIG9mZkJpdHM7DQog ICAgICAgIERXT1JEIGNiQml0czsNCiAgICAgICAgRVhUTE9HUEVOIGVscDsNCn0gRU1SRVhUQ1JF QVRFUEVOLCpQRU1SRVhUQ1JFQVRFUEVOOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnRU1SRVhURkxPT0RG SUxMIHsNCiAgICAgICAgRU1SIGVtcjsNCiAgICAgICAgUE9JTlRMIHB0bFN0YXJ0Ow0KICAgICAg ICBDT0xPUlJFRiBjckNvbG9yOw0KICAgICAgICBEV09SRCBpTW9kZTsNCn0gRU1SRVhURkxPT0RG SUxMLCpQRU1SRVhURkxPT0RGSUxMOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnRU1SRVhUU0VMRUNUQ0xJ UFJHTiB7DQogICAgICAgIEVNUiBlbXI7DQogICAgICAgIERXT1JEIGNiUmduRGF0YTsNCiAgICAg ICAgRFdPUkQgaU1vZGU7DQogICAgICAgIEJZVEUgUmduRGF0YVsxXTsNCn0gRU1SRVhUU0VMRUNU Q0xJUFJHTiwqUEVNUkVYVFNFTEVDVENMSVBSR047DQp0eXBlZGVmIHN0cnVjdCB0YWdFTVJURVhU IHsNCiAgICAgICAgUE9JTlRMIHB0bFJlZmVyZW5jZTsNCiAgICAgICAgRFdPUkQgbkNoYXJzOw0K ICAgICAgICBEV09SRCBvZmZTdHJpbmc7DQogICAgICAgIERXT1JEIGZPcHRpb25zOw0KICAgICAg ICBSRUNUTCByY2w7DQogICAgICAgIERXT1JEIG9mZkR4Ow0KfSBFTVJURVhULCpQRU1SVEVYVDsN CnR5cGVkZWYgc3RydWN0IHRhZ0VNUkVYVFRFWFRPVVRBIHsNCiAgICAgICAgRU1SIGVtcjsNCiAg ICAgICAgUkVDVEwgcmNsQm91bmRzOw0KICAgICAgICBEV09SRCBpR3JhcGhpY3NNb2RlOw0KICAg ICAgICBGTE9BVCBleFNjYWxlOw0KICAgICAgICBGTE9BVCBleVNjYWxlOw0KICAgICAgICBFTVJU RVhUIGVtcnRleHQ7DQp9IEVNUkVYVFRFWFRPVVRBLCpQRU1SRVhUVEVYVE9VVEEsRU1SRVhUVEVY VE9VVFcsKlBFTVJFWFRURVhUT1VUVzsNCnR5cGVkZWYgc3RydWN0IHRhZ0VNUkZJTExQQVRIIHsN CiAgICAgICAgRU1SIGVtcjsNCiAgICAgICAgUkVDVEwgcmNsQm91bmRzOw0KfSBFTVJGSUxMUEFU SCwqUEVNUkZJTExQQVRILEVNUlNUUk9LRUFOREZJTExQQVRILCpQRU1SU1RST0tFQU5ERklMTFBB VEgsRU1SU1RST0tFUEFUSCwqUEVNUlNUUk9LRVBBVEg7DQp0eXBlZGVmIHN0cnVjdCB0YWdFTVJG SUxMUkdOIHsNCiAgICAgICAgRU1SIGVtcjsNCiAgICAgICAgUkVDVEwgcmNsQm91bmRzOw0KICAg ICAgICBEV09SRCBjYlJnbkRhdGE7DQogICAgICAgIERXT1JEIGloQnJ1c2g7DQogICAgICAgIEJZ VEUgUmduRGF0YVsxXTsNCn0gRU1SRklMTFJHTiwqUEVNUkZJTExSR047DQp0eXBlZGVmIHN0cnVj dCB0YWdFTVJGT1JNQVQgew0KICAgICAgICBEV09SRCBkU2lnbmF0dXJlOw0KICAgICAgICBEV09S RCBuVmVyc2lvbjsNCiAgICAgICAgRFdPUkQgY2JEYXRhOw0KICAgICAgICBEV09SRCBvZmZEYXRh Ow0KfSBFTVJGT1JNQVQ7DQp0eXBlZGVmIHN0cnVjdCB0YWdFTVJGUkFNRVJHTiB7DQogICAgICAg IEVNUiBlbXI7DQogICAgICAgIFJFQ1RMIHJjbEJvdW5kczsNCiAgICAgICAgRFdPUkQgY2JSZ25E YXRhOw0KICAgICAgICBEV09SRCBpaEJydXNoOw0KICAgICAgICBTSVpFTCBzemxTdHJva2U7DQog ICAgICAgIEJZVEUgUmduRGF0YVsxXTsNCn0gRU1SRlJBTUVSR04sKlBFTVJGUkFNRVJHTjsNCnR5 cGVkZWYgc3RydWN0IHRhZ0VNUkdESUNPTU1FTlQgew0KICAgICAgICBFTVIgZW1yOw0KICAgICAg ICBEV09SRCBjYkRhdGE7DQogICAgICAgIEJZVEUgRGF0YVsxXTsNCn0gRU1SR0RJQ09NTUVOVCwq UEVNUkdESUNPTU1FTlQ7DQp0eXBlZGVmIHN0cnVjdCB0YWdFTVJJTlZFUlRSR04gew0KICAgICAg ICBFTVIgZW1yOw0KICAgICAgICBSRUNUTCByY2xCb3VuZHM7DQogICAgICAgIERXT1JEIGNiUmdu RGF0YTsNCiAgICAgICAgQllURSBSZ25EYXRhWzFdOw0KfSBFTVJJTlZFUlRSR04sKlBFTVJJTlZF UlRSR04sRU1SUEFJTlRSR04sKlBFTVJQQUlOVFJHTjsNCnR5cGVkZWYgc3RydWN0IHRhZ0VNUkxJ TkVUTyB7DQogICAgICAgIEVNUiBlbXI7DQogICAgICAgIFBPSU5UTCBwdGw7DQp9IEVNUkxJTkVU TywqUEVNUkxJTkVUTyxFTVJNT1ZFVE9FWCwqUEVNUk1PVkVUT0VYOw0KdHlwZWRlZiBzdHJ1Y3Qg dGFnRU1STUFTS0JMVCB7DQogICAgICAgIEVNUiBlbXI7DQogICAgICAgIFJFQ1RMIHJjbEJvdW5k czsNCiAgICAgICAgTE9ORyB4RGVzdDsNCiAgICAgICAgTE9ORyB5RGVzdDsNCiAgICAgICAgTE9O RyBjeERlc3Q7DQogICAgICAgIExPTkcgY3lEZXN0Ow0KICAgICAgICBEV09SRCBkd1JvcDsNCiAg ICAgICAgTE9ORyB4U3JjOw0KICAgICAgICBMT05HIHlTcmM7DQogICAgICAgIFhGT1JNIHhmb3Jt U3JjOw0KICAgICAgICBDT0xPUlJFRiBjckJrQ29sb3JTcmM7DQogICAgICAgIERXT1JEIGlVc2Fn ZVNyYzsNCiAgICAgICAgRFdPUkQgb2ZmQm1pU3JjOw0KICAgICAgICBEV09SRCBjYkJtaVNyYzsN CiAgICAgICAgRFdPUkQgb2ZmQml0c1NyYzsNCiAgICAgICAgRFdPUkQgY2JCaXRzU3JjOw0KICAg ICAgICBMT05HIHhNYXNrOw0KICAgICAgICBMT05HIHlNYXNrOw0KICAgICAgICBEV09SRCBpVXNh Z2VNYXNrOw0KICAgICAgICBEV09SRCBvZmZCbWlNYXNrOw0KICAgICAgICBEV09SRCBjYkJtaU1h c2s7DQogICAgICAgIERXT1JEIG9mZkJpdHNNYXNrOw0KICAgICAgICBEV09SRCBjYkJpdHNNYXNr Ow0KfSBFTVJNQVNLQkxULCpQRU1STUFTS0JMVDsNCnR5cGVkZWYgc3RydWN0IHRhZ0VNUk1PRElG WVdPUkxEVFJBTlNGT1JNIHsNCiAgICAgICAgRU1SIGVtcjsNCiAgICAgICAgWEZPUk0geGZvcm07 DQogICAgICAgIERXT1JEIGlNb2RlOw0KfSBFTVJNT0RJRllXT1JMRFRSQU5TRk9STSwqUEVNUk1P RElGWVdPUkxEVFJBTlNGT1JNOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnRU1ST0ZGU0VUQ0xJUFJHTiB7 DQogICAgICAgIEVNUiBlbXI7DQogICAgICAgIFBPSU5UTCBwdGxPZmZzZXQ7DQp9IEVNUk9GRlNF VENMSVBSR04sKlBFTVJPRkZTRVRDTElQUkdOOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnRU1SUExHQkxU IHsNCiAgICAgICAgRU1SIGVtcjsNCiAgICAgICAgUkVDVEwgcmNsQm91bmRzOw0KICAgICAgICBQ T0lOVEwgYXB0bERlc3RbM107DQogICAgICAgIExPTkcgeFNyYzsNCiAgICAgICAgTE9ORyB5U3Jj Ow0KICAgICAgICBMT05HIGN4U3JjOw0KICAgICAgICBMT05HIGN5U3JjOw0KICAgICAgICBYRk9S TSB4Zm9ybVNyYzsNCiAgICAgICAgQ09MT1JSRUYgY3JCa0NvbG9yU3JjOw0KICAgICAgICBEV09S RCBpVXNhZ2VTcmM7DQogICAgICAgIERXT1JEIG9mZkJtaVNyYzsNCiAgICAgICAgRFdPUkQgY2JC bWlTcmM7DQogICAgICAgIERXT1JEIG9mZkJpdHNTcmM7DQogICAgICAgIERXT1JEIGNiQml0c1Ny YzsNCiAgICAgICAgTE9ORyB4TWFzazsNCiAgICAgICAgTE9ORyB5TWFzazsNCiAgICAgICAgRFdP UkQgaVVzYWdlTWFzazsNCiAgICAgICAgRFdPUkQgb2ZmQm1pTWFzazsNCiAgICAgICAgRFdPUkQg Y2JCbWlNYXNrOw0KICAgICAgICBEV09SRCBvZmZCaXRzTWFzazsNCiAgICAgICAgRFdPUkQgY2JC aXRzTWFzazsNCn0gRU1SUExHQkxULCpQRU1SUExHQkxUOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnRU1S UE9MWURSQVcgew0KICAgICAgICBFTVIgZW1yOw0KICAgICAgICBSRUNUTCByY2xCb3VuZHM7DQog ICAgICAgIERXT1JEIGNwdGw7DQogICAgICAgIFBPSU5UTCBhcHRsWzFdOw0KICAgICAgICBCWVRF IGFiVHlwZXNbMV07DQp9IEVNUlBPTFlEUkFXLCpQRU1SUE9MWURSQVc7DQp0eXBlZGVmIHN0cnVj dCB0YWdFTVJQT0xZRFJBVzE2IHsNCiAgICAgICAgRU1SIGVtcjsNCiAgICAgICAgUkVDVEwgcmNs Qm91bmRzOw0KICAgICAgICBEV09SRCBjcHRzOw0KICAgICAgICBQT0lOVFMgYXB0c1sxXTsNCiAg ICAgICAgQllURSBhYlR5cGVzWzFdOw0KfSBFTVJQT0xZRFJBVzE2LCpQRU1SUE9MWURSQVcxNjsN CnR5cGVkZWYgc3RydWN0IHRhZ0VNUlBPTFlMSU5FIHsNCiAgICAgICAgRU1SIGVtcjsNCiAgICAg ICAgUkVDVEwgcmNsQm91bmRzOw0KICAgICAgICBEV09SRCBjcHRsOw0KICAgICAgICBQT0lOVEwg YXB0bFsxXTsNCn0gRU1SUE9MWUxJTkUsKlBFTVJQT0xZTElORSxFTVJQT0xZQkVaSUVSLCpQRU1S UE9MWUJFWklFUixFTVJQT0xZR09OLCpQRU1SUE9MWUdPTixFTVJQT0xZQkVaSUVSVE8sKlBFTVJQ T0xZQkVaSUVSVE8sRU1SUE9MWUxJTkVUTywqUEVNUlBPTFlMSU5FVE87DQp0eXBlZGVmIHN0cnVj dCB0YWdFTVJQT0xZTElORTE2IHsNCiAgICAgICAgRU1SIGVtcjsNCiAgICAgICAgUkVDVEwgcmNs Qm91bmRzOw0KICAgICAgICBEV09SRCBjcHRzOw0KICAgICAgICBQT0lOVEwgYXB0c1sxXTsNCn0g RU1SUE9MWUxJTkUxNiwqUEVNUlBPTFlMSU5FMTYsRU1SUE9MWUJFWklFUjE2LCpQRU1SUE9MWUJF WklFUjE2LEVNUlBPTFlHT04xNiwqUEVNUlBPTFlHT04xNixFTVJQT0xZQkVaSUVSVE8xNiwqUEVN UlBPTFlCRVpJRVJUTzE2LEVNUlBPTFlMSU5FVE8xNiwqUEVNUlBPTFlMSU5FVE8xNjsNCnR5cGVk ZWYgc3RydWN0IHRhZ0VNUlBPTFlQT0xZTElORSB7DQogICAgICAgIEVNUiBlbXI7DQogICAgICAg IFJFQ1RMIHJjbEJvdW5kczsNCiAgICAgICAgRFdPUkQgblBvbHlzOw0KICAgICAgICBEV09SRCBj cHRsOw0KICAgICAgICBEV09SRCBhUG9seUNvdW50c1sxXTsNCiAgICAgICAgUE9JTlRMIGFwdGxb MV07DQp9IEVNUlBPTFlQT0xZTElORSwqUEVNUlBPTFlQT0xZTElORSxFTVJQT0xZUE9MWUdPTiwq UEVNUlBPTFlQT0xZR09OOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnRU1SUE9MWVBPTFlMSU5FMTYgew0K ICAgICAgICBFTVIgZW1yOw0KICAgICAgICBSRUNUTCByY2xCb3VuZHM7DQogICAgICAgIERXT1JE IG5Qb2x5czsNCiAgICAgICAgRFdPUkQgY3B0czsNCiAgICAgICAgRFdPUkQgYVBvbHlDb3VudHNb MV07DQogICAgICAgIFBPSU5UUyBhcHRzWzFdOw0KfSBFTVJQT0xZUE9MWUxJTkUxNiwqUEVNUlBP TFlQT0xZTElORTE2LEVNUlBPTFlQT0xZR09OMTYsKlBFTVJQT0xZUE9MWUdPTjE2Ow0KdHlwZWRl ZiBzdHJ1Y3QgdGFnRU1SUE9MWVRFWFRPVVRBIHsNCiAgICAgICAgRU1SIGVtcjsNCiAgICAgICAg UkVDVEwgcmNsQm91bmRzOw0KICAgICAgICBEV09SRCBpR3JhcGhpY3NNb2RlOw0KICAgICAgICBG TE9BVCBleFNjYWxlOw0KICAgICAgICBGTE9BVCBleVNjYWxlOw0KICAgICAgICBMT05HIGNTdHJp bmdzOw0KICAgICAgICBFTVJURVhUIGFlbXJ0ZXh0WzFdOw0KfSBFTVJQT0xZVEVYVE9VVEEsKlBF TVJQT0xZVEVYVE9VVEEsRU1SUE9MWVRFWFRPVVRXLCpQRU1SUE9MWVRFWFRPVVRXOw0KdHlwZWRl ZiBzdHJ1Y3QgdGFnRU1SUkVTSVpFUEFMRVRURSB7DQogICAgICAgIEVNUiBlbXI7DQogICAgICAg IERXT1JEIGloUGFsOw0KICAgICAgICBEV09SRCBjRW50cmllczsNCn0gRU1SUkVTSVpFUEFMRVRU RSwqUEVNUlJFU0laRVBBTEVUVEU7DQp0eXBlZGVmIHN0cnVjdCB0YWdFTVJSRVNUT1JFREMgew0K ICAgICAgICBFTVIgZW1yOw0KICAgICAgICBMT05HIGlSZWxhdGl2ZTsNCn0gRU1SUkVTVE9SRURD LCpQRU1SUkVTVE9SRURDOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnRU1SUk9VTkRSRUNUIHsNCiAgICAg ICAgRU1SIGVtcjsNCiAgICAgICAgUkVDVEwgcmNsQm94Ow0KICAgICAgICBTSVpFTCBzemxDb3Ju ZXI7DQp9IEVNUlJPVU5EUkVDVCwqUEVNUlJPVU5EUkVDVDsNCnR5cGVkZWYgc3RydWN0IHRhZ0VN UlNDQUxFVklFV1BPUlRFWFRFWCB7DQogICAgICAgIEVNUiBlbXI7DQogICAgICAgIExPTkcgeE51 bTsNCiAgICAgICAgTE9ORyB4RGVub207DQogICAgICAgIExPTkcgeU51bTsNCiAgICAgICAgTE9O RyB5RGVub207DQp9IEVNUlNDQUxFVklFV1BPUlRFWFRFWCwqUEVNUlNDQUxFVklFV1BPUlRFWFRF WCxFTVJTQ0FMRVdJTkRPV0VYVEVYLCpQRU1SU0NBTEVXSU5ET1dFWFRFWDsNCnR5cGVkZWYgc3Ry dWN0IHRhZ0VNUlNFTEVDVENPTE9SU1BBQ0Ugew0KICAgICAgICBFTVIgZW1yOw0KICAgICAgICBE V09SRCBpaENTOw0KfSBFTVJTRUxFQ1RDT0xPUlNQQUNFLCpQRU1SU0VMRUNUQ09MT1JTUEFDRSxF TVJERUxFVEVDT0xPUlNQQUNFLCpQRU1SREVMRVRFQ09MT1JTUEFDRTsNCnR5cGVkZWYgc3RydWN0 IHRhZ0VNUlNFTEVDVE9CSkVDVCB7DQogICAgICAgIEVNUiBlbXI7DQogICAgICAgIERXT1JEIGlo T2JqZWN0Ow0KfSBFTVJTRUxFQ1RPQkpFQ1QsKlBFTVJTRUxFQ1RPQkpFQ1QsRU1SREVMRVRFT0JK RUNULCpQRU1SREVMRVRFT0JKRUNUOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnRU1SU0VMRUNUUEFMRVRU RSB7DQogICAgICAgIEVNUiBlbXI7DQogICAgICAgIERXT1JEIGloUGFsOw0KfSBFTVJTRUxFQ1RQ QUxFVFRFLCpQRU1SU0VMRUNUUEFMRVRURTsNCnR5cGVkZWYgc3RydWN0IHRhZ0VNUlNFVEFSQ0RJ UkVDVElPTiB7DQogICAgICAgIEVNUiBlbXI7DQogICAgICAgIERXT1JEIGlBcmNEaXJlY3Rpb247 DQp9IEVNUlNFVEFSQ0RJUkVDVElPTiwqUEVNUlNFVEFSQ0RJUkVDVElPTjsNCnR5cGVkZWYgc3Ry dWN0IHRhZ0VNUlNFVFRFWFRDT0xPUiB7DQogICAgICAgIEVNUiBlbXI7DQogICAgICAgIENPTE9S UkVGIGNyQ29sb3I7DQp9IEVNUlNFVEJLQ09MT1IsKlBFTVJTRVRCS0NPTE9SLEVNUlNFVFRFWFRD T0xPUiwqUEVNUlNFVFRFWFRDT0xPUjsNCnR5cGVkZWYgc3RydWN0IHRhZ0VNUlNFVENPTE9SQURK VVNUTUVOVCB7DQogICAgICAgIEVNUiBlbXI7DQogICAgICAgIENPTE9SQURKVVNUTUVOVCBDb2xv ckFkanVzdG1lbnQ7DQp9IEVNUlNFVENPTE9SQURKVVNUTUVOVCwqUEVNUlNFVENPTE9SQURKVVNU TUVOVDsNCnR5cGVkZWYgc3RydWN0IHRhZ0VNUlNFVERJQklUU1RPREVWSUNFIHsNCiAgICAgICAg RU1SIGVtcjsNCiAgICAgICAgUkVDVEwgcmNsQm91bmRzOw0KICAgICAgICBMT05HIHhEZXN0Ow0K ICAgICAgICBMT05HIHlEZXN0Ow0KICAgICAgICBMT05HIHhTcmM7DQogICAgICAgIExPTkcgeVNy YzsNCiAgICAgICAgTE9ORyBjeFNyYzsNCiAgICAgICAgTE9ORyBjeVNyYzsNCiAgICAgICAgRFdP UkQgb2ZmQm1pU3JjOw0KICAgICAgICBEV09SRCBjYkJtaVNyYzsNCiAgICAgICAgRFdPUkQgb2Zm Qml0c1NyYzsNCiAgICAgICAgRFdPUkQgY2JCaXRzU3JjOw0KICAgICAgICBEV09SRCBpVXNhZ2VT cmM7DQogICAgICAgIERXT1JEIGlTdGFydFNjYW47DQogICAgICAgIERXT1JEIGNTY2FuczsNCn0g RU1SU0VURElCSVRTVE9ERVZJQ0UsKlBFTVJTRVRESUJJVFNUT0RFVklDRTsNCnR5cGVkZWYgc3Ry dWN0IHRhZ0VNUlNFVE1BUFBFUkZMQUdTIHsNCiAgICAgICAgRU1SIGVtcjsNCiAgICAgICAgRFdP UkQgZHdGbGFnczsNCn0gRU1SU0VUTUFQUEVSRkxBR1MsKlBFTVJTRVRNQVBQRVJGTEFHUzsNCnR5 cGVkZWYgc3RydWN0IHRhZ0VNUlNFVE1JVEVSTElNSVQgew0KICAgICAgICBFTVIgZW1yOw0KICAg ICAgICBGTE9BVCBlTWl0ZXJMaW1pdDsNCn0gRU1SU0VUTUlURVJMSU1JVCwqUEVNUlNFVE1JVEVS TElNSVQ7DQp0eXBlZGVmIHN0cnVjdCB0YWdFTVJTRVRQQUxFVFRFRU5UUklFUyB7DQogICAgICAg IEVNUiBlbXI7DQogICAgICAgIERXT1JEIGloUGFsOw0KICAgICAgICBEV09SRCBpU3RhcnQ7DQog ICAgICAgIERXT1JEIGNFbnRyaWVzOw0KICAgICAgICBQQUxFVFRFRU5UUlkgYVBhbEVudHJpZXNb MV07DQp9IEVNUlNFVFBBTEVUVEVFTlRSSUVTLCpQRU1SU0VUUEFMRVRURUVOVFJJRVM7DQp0eXBl ZGVmIHN0cnVjdCB0YWdFTVJTRVRQSVhFTFYgew0KICAgICAgICBFTVIgZW1yOw0KICAgICAgICBQ T0lOVEwgcHRsUGl4ZWw7DQogICAgICAgIENPTE9SUkVGIGNyQ29sb3I7DQp9IEVNUlNFVFBJWEVM ViwqUEVNUlNFVFBJWEVMVjsNCnR5cGVkZWYgc3RydWN0IHRhZ0VNUlNFVFZJRVdQT1JURVhURVgg ew0KICAgICAgICBFTVIgZW1yOw0KICAgICAgICBTSVpFTCBzemxFeHRlbnQ7DQp9IEVNUlNFVFZJ RVdQT1JURVhURVgsKlBFTVJTRVRWSUVXUE9SVEVYVEVYLEVNUlNFVFdJTkRPV0VYVEVYLCpQRU1S U0VUV0lORE9XRVhURVg7DQp0eXBlZGVmIHN0cnVjdCB0YWdFTVJTRVRWSUVXUE9SVE9SR0VYIHsN CiAgICAgICAgRU1SIGVtcjsNCiAgICAgICAgUE9JTlRMIHB0bE9yaWdpbjsNCn0gRU1SU0VUVklF V1BPUlRPUkdFWCwqUEVNUlNFVFZJRVdQT1JUT1JHRVgsRU1SU0VUV0lORE9XT1JHRVgsKlBFTVJT RVRXSU5ET1dPUkdFWCxFTVJTRVRCUlVTSE9SR0VYLCpQRU1SU0VUQlJVU0hPUkdFWDsNCnR5cGVk ZWYgc3RydWN0IHRhZ0VNUlNFVFdPUkxEVFJBTlNGT1JNIHsNCiAgICAgICAgRU1SIGVtcjsNCiAg ICAgICAgWEZPUk0geGZvcm07DQp9IEVNUlNFVFdPUkxEVFJBTlNGT1JNLCpQRU1SU0VUV09STERU UkFOU0ZPUk07DQp0eXBlZGVmIHN0cnVjdCB0YWdFTVJTVFJFVENIQkxUIHsNCiAgICAgICAgRU1S IGVtcjsNCiAgICAgICAgUkVDVEwgcmNsQm91bmRzOw0KICAgICAgICBMT05HIHhEZXN0Ow0KICAg ICAgICBMT05HIHlEZXN0Ow0KICAgICAgICBMT05HIGN4RGVzdDsNCiAgICAgICAgTE9ORyBjeURl c3Q7DQogICAgICAgIERXT1JEIGR3Um9wOw0KICAgICAgICBMT05HIHhTcmM7DQogICAgICAgIExP TkcgeVNyYzsNCiAgICAgICAgWEZPUk0geGZvcm1TcmM7DQogICAgICAgIENPTE9SUkVGIGNyQmtD b2xvclNyYzsNCiAgICAgICAgRFdPUkQgaVVzYWdlU3JjOw0KICAgICAgICBEV09SRCBvZmZCbWlT cmM7DQogICAgICAgIERXT1JEIGNiQm1pU3JjOw0KICAgICAgICBEV09SRCBvZmZCaXRzU3JjOw0K ICAgICAgICBEV09SRCBjYkJpdHNTcmM7DQogICAgICAgIExPTkcgY3hTcmM7DQogICAgICAgIExP TkcgY3lTcmM7DQp9IEVNUlNUUkVUQ0hCTFQsKlBFTVJTVFJFVENIQkxUOw0KdHlwZWRlZiBzdHJ1 Y3QgdGFnRU1SU1RSRVRDSERJQklUUyB7DQogICAgICAgIEVNUiBlbXI7DQogICAgICAgIFJFQ1RM IHJjbEJvdW5kczsNCiAgICAgICAgTE9ORyB4RGVzdDsNCiAgICAgICAgTE9ORyB5RGVzdDsNCiAg ICAgICAgTE9ORyB4U3JjOw0KICAgICAgICBMT05HIHlTcmM7DQogICAgICAgIExPTkcgY3hTcmM7 DQogICAgICAgIExPTkcgY3lTcmM7DQogICAgICAgIERXT1JEIG9mZkJtaVNyYzsNCiAgICAgICAg RFdPUkQgY2JCbWlTcmM7DQogICAgICAgIERXT1JEIG9mZkJpdHNTcmM7DQogICAgICAgIERXT1JE IGNiQml0c1NyYzsNCiAgICAgICAgRFdPUkQgaVVzYWdlU3JjOw0KICAgICAgICBEV09SRCBkd1Jv cDsNCiAgICAgICAgTE9ORyBjeERlc3Q7DQogICAgICAgIExPTkcgY3lEZXN0Ow0KfSBFTVJTVFJF VENIRElCSVRTLCpQRU1SU1RSRVRDSERJQklUUzsNCnR5cGVkZWYgc3RydWN0IHRhZ0FCT1JUUEFU SCB7DQogICAgICAgIEVNUiBlbXI7DQp9IEVNUkFCT1JUUEFUSCwqUEVNUkFCT1JUUEFUSCxFTVJC RUdJTlBBVEgsKlBFTVJCRUdJTlBBVEgsRU1SRU5EUEFUSCwqUEVNUkVORFBBVEgsRU1SQ0xPU0VG SUdVUkUsKlBFTVJDTE9TRUZJR1VSRSxFTVJGTEFUVEVOUEFUSCwqUEVNUkZMQVRURU5QQVRILEVN UldJREVOUEFUSCwqUEVNUldJREVOUEFUSCxFTVJTRVRNRVRBUkdOLCpQRU1SU0VUTUVUQVJHTixF TVJTQVZFREMsKlBFTVJTQVZFREMsRU1SUkVBTElaRVBBTEVUVEUsKlBFTVJSRUFMSVpFUEFMRVRU RTsNCnR5cGVkZWYgc3RydWN0IHRhZ0VNUlNFTEVDVENMSVBQQVRIIHsNCiAgICAgICAgRU1SIGVt cjsNCiAgICAgICAgRFdPUkQgaU1vZGU7DQp9IEVNUlNFTEVDVENMSVBQQVRILCpQRU1SU0VMRUNU Q0xJUFBBVEgsRU1SU0VUQktNT0RFLCpQRU1SU0VUQktNT0RFLEVNUlNFVE1BUE1PREUsKlBFTVJT RVRNQVBNT0RFLEVNUlNFVFBPTFlGSUxMTU9ERSwqUEVNUlNFVFBPTFlGSUxMTU9ERSxFTVJTRVRS T1AyLCpQRU1SU0VUUk9QMixFTVJTRVRTVFJFVENIQkxUTU9ERSwqUEVNUlNFVFNUUkVUQ0hCTFRN T0RFLEVNUlNFVFRFWFRBTElHTiwqUEVNUlNFVFRFWFRBTElHTixFTVJFTkFCTEVJQ00sKlBFTVJF TkFCTEVJQ007DQojcHJhZ21hIHBhY2socHVzaCwyKQ0KdHlwZWRlZiBzdHJ1Y3QgdGFnTUVUQUhF QURFUiB7DQogICAgICAgIFdPUkQgbXRUeXBlOw0KICAgICAgICBXT1JEIG10SGVhZGVyU2l6ZTsN CiAgICAgICAgV09SRCBtdFZlcnNpb247DQogICAgICAgIERXT1JEIG10U2l6ZTsNCiAgICAgICAg V09SRCBtdE5vT2JqZWN0czsNCiAgICAgICAgRFdPUkQgbXRNYXhSZWNvcmQ7DQogICAgICAgIFdP UkQgbXROb1BhcmFtZXRlcnM7DQp9IE1FVEFIRUFERVIsKlBNRVRBSEVBREVSLCpMUE1FVEFIRUFE RVI7DQojcHJhZ21hIHBhY2socG9wKQ0KdHlwZWRlZiBzdHJ1Y3QgdGFnRU5ITUVUQUhFQURFUiB7 DQogICAgICAgIERXT1JEIGlUeXBlOw0KICAgICAgICBEV09SRCBuU2l6ZTsNCiAgICAgICAgUkVD VEwgcmNsQm91bmRzOw0KICAgICAgICBSRUNUTCByY2xGcmFtZTsNCiAgICAgICAgRFdPUkQgZFNp Z25hdHVyZTsNCiAgICAgICAgRFdPUkQgblZlcnNpb247DQogICAgICAgIERXT1JEIG5CeXRlczsN CiAgICAgICAgRFdPUkQgblJlY29yZHM7DQogICAgICAgIFdPUkQgbkhhbmRsZXM7DQogICAgICAg IFdPUkQgc1Jlc2VydmVkOw0KICAgICAgICBEV09SRCBuRGVzY3JpcHRpb247DQogICAgICAgIERX T1JEIG9mZkRlc2NyaXB0aW9uOw0KICAgICAgICBEV09SRCBuUGFsRW50cmllczsNCiAgICAgICAg U0laRUwgc3psRGV2aWNlOw0KICAgICAgICBTSVpFTCBzemxNaWxsaW1ldGVyczsNCn0gRU5ITUVU QUhFQURFUiwqTFBFTkhNRVRBSEVBREVSOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnTUVUQVJFQ09SRCB7 DQogICAgICAgIERXT1JEIHJkU2l6ZTsNCiAgICAgICAgV09SRCByZEZ1bmN0aW9uOw0KICAgICAg ICBXT1JEIHJkUGFybVsxXTsNCn0gTUVUQVJFQ09SRCwqUE1FVEFSRUNPUkQsKkxQTUVUQVJFQ09S RDsNCnR5cGVkZWYgc3RydWN0IHRhZ0VOSE1FVEFSRUNPUkQgew0KICAgICAgICBEV09SRCBpVHlw ZTsNCiAgICAgICAgRFdPUkQgblNpemU7DQogICAgICAgIERXT1JEIGRQYXJtWzFdOw0KfSBFTkhN RVRBUkVDT1JELCpMUEVOSE1FVEFSRUNPUkQ7DQp0eXBlZGVmIHN0cnVjdCB0YWdIQU5ETEVUQUJM RSB7DQogICAgICAgIEhHRElPQkogb2JqZWN0SGFuZGxlWzFdOw0KfSBIQU5ETEVUQUJMRSwqTFBI QU5ETEVUQUJMRTsNCnR5cGVkZWYgc3RydWN0IHRhZ1RFWFRNRVRSSUNBIHsNCiAgICAgICAgTE9O RyB0bUhlaWdodDsNCiAgICAgICAgTE9ORyB0bUFzY2VudDsNCiAgICAgICAgTE9ORyB0bURlc2Nl bnQ7DQogICAgICAgIExPTkcgdG1JbnRlcm5hbExlYWRpbmc7DQogICAgICAgIExPTkcgdG1FeHRl cm5hbExlYWRpbmc7DQogICAgICAgIExPTkcgdG1BdmVDaGFyV2lkdGg7DQogICAgICAgIExPTkcg dG1NYXhDaGFyV2lkdGg7DQogICAgICAgIExPTkcgdG1XZWlnaHQ7DQogICAgICAgIExPTkcgdG1P dmVyaGFuZzsNCiAgICAgICAgTE9ORyB0bURpZ2l0aXplZEFzcGVjdFg7DQogICAgICAgIExPTkcg dG1EaWdpdGl6ZWRBc3BlY3RZOw0KICAgICAgICBCWVRFIHRtRmlyc3RDaGFyOw0KICAgICAgICBC WVRFIHRtTGFzdENoYXI7DQogICAgICAgIEJZVEUgdG1EZWZhdWx0Q2hhcjsNCiAgICAgICAgQllU RSB0bUJyZWFrQ2hhcjsNCiAgICAgICAgQllURSB0bUl0YWxpYzsNCiAgICAgICAgQllURSB0bVVu ZGVybGluZWQ7DQogICAgICAgIEJZVEUgdG1TdHJ1Y2tPdXQ7DQogICAgICAgIEJZVEUgdG1QaXRj aEFuZEZhbWlseTsNCiAgICAgICAgQllURSB0bUNoYXJTZXQ7DQp9IFRFWFRNRVRSSUNBLCpQVEVY VE1FVFJJQ0EsKkxQVEVYVE1FVFJJQ0E7DQp0eXBlZGVmIHN0cnVjdCB0YWdURVhUTUVUUklDVyB7 DQogICAgICAgIExPTkcgdG1IZWlnaHQ7DQogICAgICAgIExPTkcgdG1Bc2NlbnQ7DQogICAgICAg IExPTkcgdG1EZXNjZW50Ow0KICAgICAgICBMT05HIHRtSW50ZXJuYWxMZWFkaW5nOw0KICAgICAg ICBMT05HIHRtRXh0ZXJuYWxMZWFkaW5nOw0KICAgICAgICBMT05HIHRtQXZlQ2hhcldpZHRoOw0K ICAgICAgICBMT05HIHRtTWF4Q2hhcldpZHRoOw0KICAgICAgICBMT05HIHRtV2VpZ2h0Ow0KICAg ICAgICBMT05HIHRtT3Zlcmhhbmc7DQogICAgICAgIExPTkcgdG1EaWdpdGl6ZWRBc3BlY3RYOw0K ICAgICAgICBMT05HIHRtRGlnaXRpemVkQXNwZWN0WTsNCiAgICAgICAgV0NIQVIgdG1GaXJzdENo YXI7DQogICAgICAgIFdDSEFSIHRtTGFzdENoYXI7DQogICAgICAgIFdDSEFSIHRtRGVmYXVsdENo YXI7DQogICAgICAgIFdDSEFSIHRtQnJlYWtDaGFyOw0KICAgICAgICBCWVRFIHRtSXRhbGljOw0K ICAgICAgICBCWVRFIHRtVW5kZXJsaW5lZDsNCiAgICAgICAgQllURSB0bVN0cnVja091dDsNCiAg ICAgICAgQllURSB0bVBpdGNoQW5kRmFtaWx5Ow0KICAgICAgICBCWVRFIHRtQ2hhclNldDsNCn0g VEVYVE1FVFJJQ1csKlBURVhUTUVUUklDVywqTFBURVhUTUVUUklDVzsNCnR5cGVkZWYgc3RydWN0 IF9SR05EQVRBSEVBREVSIHsNCiAgICAgICAgRFdPUkQgZHdTaXplOw0KICAgICAgICBEV09SRCBp VHlwZTsNCiAgICAgICAgRFdPUkQgbkNvdW50Ow0KICAgICAgICBEV09SRCBuUmduU2l6ZTsNCiAg ICAgICAgUkVDVCByY0JvdW5kOw0KfSBSR05EQVRBSEVBREVSOw0KdHlwZWRlZiBzdHJ1Y3QgX1JH TkRBVEEgew0KICAgICAgICBSR05EQVRBSEVBREVSIHJkaDsNCiAgICAgICAgY2hhciBCdWZmZXJb MV07DQp9IFJHTkRBVEEsKkxQUkdOREFUQTsNCnR5cGVkZWYgc3RydWN0IHRhZ0dDUF9SRVNVTFRT QSB7DQogICAgICAgIERXT1JEIGxTdHJ1Y3RTaXplOw0KICAgICAgICBMUFNUUiBscE91dFN0cmlu ZzsNCiAgICAgICAgVUlOVCAqbHBPcmRlcjsNCiAgICAgICAgSU5UICpscER4Ow0KICAgICAgICBJ TlQgKmxwQ2FyZXRQb3M7DQogICAgICAgIExQU1RSIGxwQ2xhc3M7DQogICAgICAgIFVJTlQgKmxw R2x5cGhzOw0KICAgICAgICBVSU5UIG5HbHlwaHM7DQogICAgICAgIFVJTlQgbk1heEZpdDsNCn0g R0NQX1JFU1VMVFNBLCpMUEdDUF9SRVNVTFRTQTsNCnR5cGVkZWYgc3RydWN0IHRhZ0dDUF9SRVNV TFRTVyB7DQogICAgICAgIERXT1JEIGxTdHJ1Y3RTaXplOw0KICAgICAgICBMUFdTVFIgbHBPdXRT dHJpbmc7DQogICAgICAgIFVJTlQgKmxwT3JkZXI7DQogICAgICAgIElOVCAqbHBEeDsNCiAgICAg ICAgSU5UICpscENhcmV0UG9zOw0KICAgICAgICBMUFdTVFIgbHBDbGFzczsNCiAgICAgICAgVUlO VCAqbHBHbHlwaHM7DQogICAgICAgIFVJTlQgbkdseXBoczsNCiAgICAgICAgVUlOVCBuTWF4Rml0 Ow0KfSBHQ1BfUkVTVUxUU1csKkxQR0NQX1JFU1VMVFNXOw0KdHlwZWRlZiBzdHJ1Y3QgX0dMWVBI TUVUUklDUyB7DQogICAgICAgIFVJTlQgZ21CbGFja0JveFg7DQogICAgICAgIFVJTlQgZ21CbGFj a0JveFk7DQogICAgICAgIFBPSU5UIGdtcHRHbHlwaE9yaWdpbjsNCiAgICAgICAgc2hvcnQgZ21D ZWxsSW5jWDsNCiAgICAgICAgc2hvcnQgZ21DZWxsSW5jWTsNCn0gR0xZUEhNRVRSSUNTLCpMUEdM WVBITUVUUklDUzsNCnR5cGVkZWYgc3RydWN0IHRhZ0tFUk5JTkdQQUlSIHsNCiAgICAgICAgV09S RCB3Rmlyc3Q7DQogICAgICAgIFdPUkQgd1NlY29uZDsNCiAgICAgICAgaW50IGlLZXJuQW1vdW50 Ow0KfSBLRVJOSU5HUEFJUiwqTFBLRVJOSU5HUEFJUjsNCnR5cGVkZWYgc3RydWN0IF9GSVhFRCB7 DQogICAgICAgIFdPUkQgZnJhY3Q7DQogICAgICAgIHNob3J0IHZhbHVlOw0KfSBGSVhFRDsNCnR5 cGVkZWYgc3RydWN0IF9NQVQyIHsNCiAgICAgICAgRklYRUQgZU0xMTsNCiAgICAgICAgRklYRUQg ZU0xMjsNCiAgICAgICAgRklYRUQgZU0yMTsNCiAgICAgICAgRklYRUQgZU0yMjsNCn0gTUFUMiwq TFBNQVQyOw0KdHlwZWRlZiBzdHJ1Y3QgX09VVExJTkVURVhUTUVUUklDQSB7DQogICAgICAgIFVJ TlQgb3RtU2l6ZTsNCiAgICAgICAgVEVYVE1FVFJJQ0Egb3RtVGV4dE1ldHJpY3M7DQogICAgICAg IEJZVEUgb3RtRmlsbGVyOw0KICAgICAgICBQQU5PU0Ugb3RtUGFub3NlTnVtYmVyOw0KICAgICAg ICBVSU5UIG90bWZzU2VsZWN0aW9uOw0KICAgICAgICBVSU5UIG90bWZzVHlwZTsNCiAgICAgICAg aW50IG90bXNDaGFyU2xvcGVSaXNlOw0KICAgICAgICBpbnQgb3Rtc0NoYXJTbG9wZVJ1bjsNCiAg ICAgICAgaW50IG90bUl0YWxpY0FuZ2xlOw0KICAgICAgICBVSU5UIG90bUVNU3F1YXJlOw0KICAg ICAgICBpbnQgb3RtQXNjZW50Ow0KICAgICAgICBpbnQgb3RtRGVzY2VudDsNCiAgICAgICAgVUlO VCBvdG1MaW5lR2FwOw0KICAgICAgICBVSU5UIG90bXNDYXBFbUhlaWdodDsNCiAgICAgICAgVUlO VCBvdG1zWEhlaWdodDsNCiAgICAgICAgUkVDVCBvdG1yY0ZvbnRCb3g7DQogICAgICAgIGludCBv dG1NYWNBc2NlbnQ7DQogICAgICAgIGludCBvdG1NYWNEZXNjZW50Ow0KICAgICAgICBVSU5UIG90 bU1hY0xpbmVHYXA7DQogICAgICAgIFVJTlQgb3RtdXNNaW5pbXVtUFBFTTsNCiAgICAgICAgUE9J TlQgb3RtcHRTdWJzY3JpcHRTaXplOw0KICAgICAgICBQT0lOVCBvdG1wdFN1YnNjcmlwdE9mZnNl dDsNCiAgICAgICAgUE9JTlQgb3RtcHRTdXBlcnNjcmlwdFNpemU7DQogICAgICAgIFBPSU5UIG90 bXB0U3VwZXJzY3JpcHRPZmZzZXQ7DQogICAgICAgIFVJTlQgb3Rtc1N0cmlrZW91dFNpemU7DQog ICAgICAgIGludCBvdG1zU3RyaWtlb3V0UG9zaXRpb247DQogICAgICAgIGludCBvdG1zVW5kZXJz Y29yZVNpemU7DQogICAgICAgIGludCBvdG1zVW5kZXJzY29yZVBvc2l0aW9uOw0KICAgICAgICBQ U1RSIG90bXBGYW1pbHlOYW1lOw0KICAgICAgICBQU1RSIG90bXBGYWNlTmFtZTsNCiAgICAgICAg UFNUUiBvdG1wU3R5bGVOYW1lOw0KICAgICAgICBQU1RSIG90bXBGdWxsTmFtZTsNCn0gT1VUTElO RVRFWFRNRVRSSUNBLCpQT1VUTElORVRFWFRNRVRSSUNBLCpMUE9VVExJTkVURVhUTUVUUklDQTsN CnR5cGVkZWYgc3RydWN0IF9PVVRMSU5FVEVYVE1FVFJJQ1cgew0KICAgICAgICBVSU5UIG90bVNp emU7DQogICAgICAgIFRFWFRNRVRSSUNXIG90bVRleHRNZXRyaWNzOw0KICAgICAgICBCWVRFIG90 bUZpbGxlcjsNCiAgICAgICAgUEFOT1NFIG90bVBhbm9zZU51bWJlcjsNCiAgICAgICAgVUlOVCBv dG1mc1NlbGVjdGlvbjsNCiAgICAgICAgVUlOVCBvdG1mc1R5cGU7DQogICAgICAgIGludCBvdG1z Q2hhclNsb3BlUmlzZTsNCiAgICAgICAgaW50IG90bXNDaGFyU2xvcGVSdW47DQogICAgICAgIGlu dCBvdG1JdGFsaWNBbmdsZTsNCiAgICAgICAgVUlOVCBvdG1FTVNxdWFyZTsNCiAgICAgICAgaW50 IG90bUFzY2VudDsNCiAgICAgICAgaW50IG90bURlc2NlbnQ7DQogICAgICAgIFVJTlQgb3RtTGlu ZUdhcDsNCiAgICAgICAgVUlOVCBvdG1zQ2FwRW1IZWlnaHQ7DQogICAgICAgIFVJTlQgb3Rtc1hI ZWlnaHQ7DQogICAgICAgIFJFQ1Qgb3RtcmNGb250Qm94Ow0KICAgICAgICBpbnQgb3RtTWFjQXNj ZW50Ow0KICAgICAgICBpbnQgb3RtTWFjRGVzY2VudDsNCiAgICAgICAgVUlOVCBvdG1NYWNMaW5l R2FwOw0KICAgICAgICBVSU5UIG90bXVzTWluaW11bVBQRU07DQogICAgICAgIFBPSU5UIG90bXB0 U3Vic2NyaXB0U2l6ZTsNCiAgICAgICAgUE9JTlQgb3RtcHRTdWJzY3JpcHRPZmZzZXQ7DQogICAg ICAgIFBPSU5UIG90bXB0U3VwZXJzY3JpcHRTaXplOw0KICAgICAgICBQT0lOVCBvdG1wdFN1cGVy c2NyaXB0T2Zmc2V0Ow0KICAgICAgICBVSU5UIG90bXNTdHJpa2VvdXRTaXplOw0KICAgICAgICBp bnQgb3Rtc1N0cmlrZW91dFBvc2l0aW9uOw0KICAgICAgICBpbnQgb3Rtc1VuZGVyc2NvcmVTaXpl Ow0KICAgICAgICBpbnQgb3Rtc1VuZGVyc2NvcmVQb3NpdGlvbjsNCiAgICAgICAgUFNUUiBvdG1w RmFtaWx5TmFtZTsNCiAgICAgICAgUFNUUiBvdG1wRmFjZU5hbWU7DQogICAgICAgIFBTVFIgb3Rt cFN0eWxlTmFtZTsNCiAgICAgICAgUFNUUiBvdG1wRnVsbE5hbWU7DQp9IE9VVExJTkVURVhUTUVU UklDVywqUE9VVExJTkVURVhUTUVUUklDVywqTFBPVVRMSU5FVEVYVE1FVFJJQ1c7DQp0eXBlZGVm IHN0cnVjdCBfUkFTVEVSSVpFUl9TVEFUVVMgew0KICAgICAgICBzaG9ydCBuU2l6ZTsNCiAgICAg ICAgc2hvcnQgd0ZsYWdzOw0KICAgICAgICBzaG9ydCBuTGFuZ3VhZ2VJRDsNCn0gUkFTVEVSSVpF Ul9TVEFUVVMsKkxQUkFTVEVSSVpFUl9TVEFUVVM7DQp0eXBlZGVmIHN0cnVjdCBfUE9MWVRFWFRB IHsNCiAgICAgICAgaW50IHg7DQogICAgICAgIGludCB5Ow0KICAgICAgICBVSU5UIG47DQogICAg ICAgIExQQ1NUUiBscHN0cjsNCiAgICAgICAgVUlOVCB1aUZsYWdzOw0KICAgICAgICBSRUNUIHJj bDsNCiAgICAgICAgaW50ICpwZHg7DQp9IFBPTFlURVhUQTsNCnR5cGVkZWYgc3RydWN0IF9QT0xZ VEVYVFcgew0KICAgICAgICBpbnQgeDsNCiAgICAgICAgaW50IHk7DQogICAgICAgIFVJTlQgbjsN CiAgICAgICAgTFBDV1NUUiBscHN0cjsNCiAgICAgICAgVUlOVCB1aUZsYWdzOw0KICAgICAgICBS RUNUIHJjbDsNCiAgICAgICAgaW50ICpwZHg7DQp9IFBPTFlURVhUVzsNCnR5cGVkZWYgc3RydWN0 IHRhZ1BJWEVMRk9STUFUREVTQ1JJUFRPUiB7DQogICAgICAgIFdPUkQgblNpemU7DQogICAgICAg IFdPUkQgblZlcnNpb247DQogICAgICAgIERXT1JEIGR3RmxhZ3M7DQogICAgICAgIEJZVEUgaVBp eGVsVHlwZTsNCiAgICAgICAgQllURSBjQ29sb3JCaXRzOw0KICAgICAgICBCWVRFIGNSZWRCaXRz Ow0KICAgICAgICBCWVRFIGNSZWRTaGlmdDsNCiAgICAgICAgQllURSBjR3JlZW5CaXRzOw0KICAg ICAgICBCWVRFIGNHcmVlblNoaWZ0Ow0KICAgICAgICBCWVRFIGNCbHVlQml0czsNCiAgICAgICAg QllURSBjQmx1ZVNoaWZ0Ow0KICAgICAgICBCWVRFIGNBbHBoYUJpdHM7DQogICAgICAgIEJZVEUg Y0FscGhhU2hpZnQ7DQogICAgICAgIEJZVEUgY0FjY3VtQml0czsNCiAgICAgICAgQllURSBjQWNj dW1SZWRCaXRzOw0KICAgICAgICBCWVRFIGNBY2N1bUdyZWVuQml0czsNCiAgICAgICAgQllURSBj QWNjdW1CbHVlQml0czsNCiAgICAgICAgQllURSBjQWNjdW1BbHBoYUJpdHM7DQogICAgICAgIEJZ VEUgY0RlcHRoQml0czsNCiAgICAgICAgQllURSBjU3RlbmNpbEJpdHM7DQogICAgICAgIEJZVEUg Y0F1eEJ1ZmZlcnM7DQogICAgICAgIEJZVEUgaUxheWVyVHlwZTsNCiAgICAgICAgQllURSBiUmVz ZXJ2ZWQ7DQogICAgICAgIERXT1JEIGR3TGF5ZXJNYXNrOw0KICAgICAgICBEV09SRCBkd1Zpc2li bGVNYXNrOw0KICAgICAgICBEV09SRCBkd0RhbWFnZU1hc2s7DQp9IFBJWEVMRk9STUFUREVTQ1JJ UFRPUiwqUFBJWEVMRk9STUFUREVTQ1JJUFRPUiwqTFBQSVhFTEZPUk1BVERFU0NSSVBUT1I7DQp0 eXBlZGVmIHN0cnVjdCB0YWdNRVRBRklMRVBJQ1Qgew0KICAgICAgICBMT05HIG1tOw0KICAgICAg ICBMT05HIHhFeHQ7DQogICAgICAgIExPTkcgeUV4dDsNCiAgICAgICAgSE1FVEFGSUxFIGhNRjsN Cn0gTUVUQUZJTEVQSUNULCpMUE1FVEFGSUxFUElDVDsNCnR5cGVkZWYgc3RydWN0IHRhZ0xPQ0FM RVNJR05BVFVSRSB7DQogICAgICAgIERXT1JEIGxzVXNiWzRdOw0KICAgICAgICBEV09SRCBsc0Nz YkRlZmF1bHRbMl07DQogICAgICAgIERXT1JEIGxzQ3NiU3VwcG9ydGVkWzJdOw0KfSBMT0NBTEVT SUdOQVRVUkUsKlBMT0NBTEVTSUdOQVRVUkUsKkxQTE9DQUxFU0lHTkFUVVJFOw0KdHlwZWRlZiBM T05HIExDU1RZUEU7DQojcHJhZ21hIHBhY2socHVzaCw0KQ0KdHlwZWRlZiBzdHJ1Y3QgdGFnTkVX VEVYVE1FVFJJQ0Egew0KICAgICAgICBMT05HIHRtSGVpZ2h0Ow0KICAgICAgICBMT05HIHRtQXNj ZW50Ow0KICAgICAgICBMT05HIHRtRGVzY2VudDsNCiAgICAgICAgTE9ORyB0bUludGVybmFsTGVh ZGluZzsNCiAgICAgICAgTE9ORyB0bUV4dGVybmFsTGVhZGluZzsNCiAgICAgICAgTE9ORyB0bUF2 ZUNoYXJXaWR0aDsNCiAgICAgICAgTE9ORyB0bU1heENoYXJXaWR0aDsNCiAgICAgICAgTE9ORyB0 bVdlaWdodDsNCiAgICAgICAgTE9ORyB0bU92ZXJoYW5nOw0KICAgICAgICBMT05HIHRtRGlnaXRp emVkQXNwZWN0WDsNCiAgICAgICAgTE9ORyB0bURpZ2l0aXplZEFzcGVjdFk7DQogICAgICAgIEJZ VEUgdG1GaXJzdENoYXI7DQogICAgICAgIEJZVEUgdG1MYXN0Q2hhcjsNCiAgICAgICAgQllURSB0 bURlZmF1bHRDaGFyOw0KICAgICAgICBCWVRFIHRtQnJlYWtDaGFyOw0KICAgICAgICBCWVRFIHRt SXRhbGljOw0KICAgICAgICBCWVRFIHRtVW5kZXJsaW5lZDsNCiAgICAgICAgQllURSB0bVN0cnVj a091dDsNCiAgICAgICAgQllURSB0bVBpdGNoQW5kRmFtaWx5Ow0KICAgICAgICBCWVRFIHRtQ2hh clNldDsNCiAgICAgICAgRFdPUkQgbnRtRmxhZ3M7DQogICAgICAgIFVJTlQgbnRtU2l6ZUVNOw0K ICAgICAgICBVSU5UIG50bUNlbGxIZWlnaHQ7DQogICAgICAgIFVJTlQgbnRtQXZnV2lkdGg7DQp9 IE5FV1RFWFRNRVRSSUNBLCpQTkVXVEVYVE1FVFJJQ0EsKkxQTkVXVEVYVE1FVFJJQ0E7DQp0eXBl ZGVmIHN0cnVjdCB0YWdORVdURVhUTUVUUklDVyB7DQogICAgICAgIExPTkcgdG1IZWlnaHQ7DQog ICAgICAgIExPTkcgdG1Bc2NlbnQ7DQogICAgICAgIExPTkcgdG1EZXNjZW50Ow0KICAgICAgICBM T05HIHRtSW50ZXJuYWxMZWFkaW5nOw0KICAgICAgICBMT05HIHRtRXh0ZXJuYWxMZWFkaW5nOw0K ICAgICAgICBMT05HIHRtQXZlQ2hhcldpZHRoOw0KICAgICAgICBMT05HIHRtTWF4Q2hhcldpZHRo Ow0KICAgICAgICBMT05HIHRtV2VpZ2h0Ow0KICAgICAgICBMT05HIHRtT3Zlcmhhbmc7DQogICAg ICAgIExPTkcgdG1EaWdpdGl6ZWRBc3BlY3RYOw0KICAgICAgICBMT05HIHRtRGlnaXRpemVkQXNw ZWN0WTsNCiAgICAgICAgV0NIQVIgdG1GaXJzdENoYXI7DQogICAgICAgIFdDSEFSIHRtTGFzdENo YXI7DQogICAgICAgIFdDSEFSIHRtRGVmYXVsdENoYXI7DQogICAgICAgIFdDSEFSIHRtQnJlYWtD aGFyOw0KICAgICAgICBCWVRFIHRtSXRhbGljOw0KICAgICAgICBCWVRFIHRtVW5kZXJsaW5lZDsN CiAgICAgICAgQllURSB0bVN0cnVja091dDsNCiAgICAgICAgQllURSB0bVBpdGNoQW5kRmFtaWx5 Ow0KICAgICAgICBCWVRFIHRtQ2hhclNldDsNCiAgICAgICAgRFdPUkQgbnRtRmxhZ3M7DQogICAg ICAgIFVJTlQgbnRtU2l6ZUVNOw0KICAgICAgICBVSU5UIG50bUNlbGxIZWlnaHQ7DQogICAgICAg IFVJTlQgbnRtQXZnV2lkdGg7DQp9IE5FV1RFWFRNRVRSSUNXLCpQTkVXVEVYVE1FVFJJQ1csKkxQ TkVXVEVYVE1FVFJJQ1c7DQojcHJhZ21hIHBhY2socG9wKQ0KdHlwZWRlZiBzdHJ1Y3QgdGFnTkVX VEVYVE1FVFJJQ0VYQSB7DQogICAgICAgIE5FV1RFWFRNRVRSSUNBIG50bVRtOw0KICAgICAgICBG T05UU0lHTkFUVVJFIG50bUZvbnRTaWc7DQp9IE5FV1RFWFRNRVRSSUNFWEE7DQp0eXBlZGVmIHN0 cnVjdCB0YWdORVdURVhUTUVUUklDRVhXIHsNCiAgICAgICAgTkVXVEVYVE1FVFJJQ1cgbnRtVG07 DQogICAgICAgIEZPTlRTSUdOQVRVUkUgbnRtRm9udFNpZzsNCn0gTkVXVEVYVE1FVFJJQ0VYVzsN CnR5cGVkZWYgc3RydWN0IHRhZ1BFTEFSUkFZIHsNCiAgICAgICAgTE9ORyBwYVhDb3VudDsNCiAg ICAgICAgTE9ORyBwYVlDb3VudDsNCiAgICAgICAgTE9ORyBwYVhFeHQ7DQogICAgICAgIExPTkcg cGFZRXh0Ow0KICAgICAgICBCWVRFIHBhUkdCczsNCn0gUEVMQVJSQVksKlBQRUxBUlJBWSwqTFBQ RUxBUlJBWTsNCnR5cGVkZWYgc3RydWN0IHRhZ0VOVU1MT0dGT05UQSB7DQogICAgICAgIExPR0ZP TlRBIGVsZkxvZ0ZvbnQ7DQogICAgICAgIEJZVEUgZWxmRnVsbE5hbWVbNjRdOw0KICAgICAgICBC WVRFIGVsZlN0eWxlWzMyXTsNCn0gRU5VTUxPR0ZPTlRBLCpMUEVOVU1MT0dGT05UQTsNCnR5cGVk ZWYgc3RydWN0IHRhZ0VOVU1MT0dGT05UVyB7DQogICAgICAgIExPR0ZPTlRXIGVsZkxvZ0ZvbnQ7 DQogICAgICAgIFdDSEFSIGVsZkZ1bGxOYW1lWzY0XTsNCiAgICAgICAgV0NIQVIgZWxmU3R5bGVb MzJdOw0KfSBFTlVNTE9HRk9OVFcsKkxQRU5VTUxPR0ZPTlRXOw0KdHlwZWRlZiBzdHJ1Y3QgdGFn RU5VTUxPR0ZPTlRFWEEgew0KICAgICAgICBMT0dGT05UQSBlbGZMb2dGb250Ow0KICAgICAgICBC WVRFIGVsZkZ1bGxOYW1lWzY0XTsNCiAgICAgICAgQllURSBlbGZTdHlsZVszMl07DQogICAgICAg IEJZVEUgZWxmU2NyaXB0WzMyXTsNCn0gRU5VTUxPR0ZPTlRFWEEsKkxQRU5VTUxPR0ZPTlRFWEE7 DQp0eXBlZGVmIHN0cnVjdCB0YWdFTlVNTE9HRk9OVEVYVyB7DQogICAgICAgIExPR0ZPTlRXIGVs ZkxvZ0ZvbnQ7DQogICAgICAgIFdDSEFSIGVsZkZ1bGxOYW1lWzY0XTsNCiAgICAgICAgQllURSBl bGZTdHlsZVszMl07DQogICAgICAgIEJZVEUgZWxmU2NyaXB0WzMyXTsNCn0gRU5VTUxPR0ZPTlRF WFcsKkxQRU5VTUxPR0ZPTlRFWFc7DQp0eXBlZGVmIHN0cnVjdCB0YWdQT0lOVEZYIHsNCiAgICAg ICAgRklYRUQgeDsNCiAgICAgICAgRklYRUQgeTsNCn0gUE9JTlRGWCwqTFBQT0lOVEZYOw0KdHlw ZWRlZiBzdHJ1Y3QgdGFnVFRQT0xZQ1VSVkUgew0KICAgICAgICBXT1JEIHdUeXBlOw0KICAgICAg ICBXT1JEIGNwZng7DQogICAgICAgIFBPSU5URlggYXBmeFsxXTsNCn0gVFRQT0xZQ1VSVkUsKkxQ VFRQT0xZQ1VSVkU7DQp0eXBlZGVmIHN0cnVjdCB0YWdUVFBPTFlHT05IRUFERVIgew0KICAgICAg ICBEV09SRCBjYjsNCiAgICAgICAgRFdPUkQgZHdUeXBlOw0KICAgICAgICBQT0lOVEZYIHBmeFN0 YXJ0Ow0KfSBUVFBPTFlHT05IRUFERVIsKkxQVFRQT0xZR09OSEVBREVSOw0KdHlwZWRlZiBzdHJ1 Y3QgX1BPSU5URkxPQVQgew0KICAgICAgICBGTE9BVCB4Ow0KICAgICAgICBGTE9BVCB5Ow0KfSBQ T0lOVEZMT0FULCpQUE9JTlRGTE9BVDsNCnR5cGVkZWYgc3RydWN0IF9HTFlQSE1FVFJJQ1NGTE9B VCB7DQogICAgICAgIEZMT0FUIGdtZkJsYWNrQm94WDsNCiAgICAgICAgRkxPQVQgZ21mQmxhY2tC b3hZOw0KICAgICAgICBQT0lOVEZMT0FUIGdtZnB0R2x5cGhPcmlnaW47DQogICAgICAgIEZMT0FU IGdtZkNlbGxJbmNYOw0KICAgICAgICBGTE9BVCBnbWZDZWxsSW5jWTsNCn0gR0xZUEhNRVRSSUNT RkxPQVQsKlBHTFlQSE1FVFJJQ1NGTE9BVCwqTFBHTFlQSE1FVFJJQ1NGTE9BVDsNCnR5cGVkZWYg c3RydWN0IHRhZ0xBWUVSUExBTkVERVNDUklQVE9SIHsNCiAgICAgICAgV09SRCBuU2l6ZTsNCiAg ICAgICAgV09SRCBuVmVyc2lvbjsNCiAgICAgICAgRFdPUkQgZHdGbGFnczsNCiAgICAgICAgQllU RSBpUGl4ZWxUeXBlOw0KICAgICAgICBCWVRFIGNDb2xvckJpdHM7DQogICAgICAgIEJZVEUgY1Jl ZEJpdHM7DQogICAgICAgIEJZVEUgY1JlZFNoaWZ0Ow0KICAgICAgICBCWVRFIGNHcmVlbkJpdHM7 DQogICAgICAgIEJZVEUgY0dyZWVuU2hpZnQ7DQogICAgICAgIEJZVEUgY0JsdWVCaXRzOw0KICAg ICAgICBCWVRFIGNCbHVlU2hpZnQ7DQogICAgICAgIEJZVEUgY0FscGhhQml0czsNCiAgICAgICAg QllURSBjQWxwaGFTaGlmdDsNCiAgICAgICAgQllURSBjQWNjdW1CaXRzOw0KICAgICAgICBCWVRF IGNBY2N1bVJlZEJpdHM7DQogICAgICAgIEJZVEUgY0FjY3VtR3JlZW5CaXRzOw0KICAgICAgICBC WVRFIGNBY2N1bUJsdWVCaXRzOw0KICAgICAgICBCWVRFIGNBY2N1bUFscGhhQml0czsNCiAgICAg ICAgQllURSBjRGVwdGhCaXRzOw0KICAgICAgICBCWVRFIGNTdGVuY2lsQml0czsNCiAgICAgICAg QllURSBjQXV4QnVmZmVyczsNCiAgICAgICAgQllURSBpTGF5ZXJQbGFuZTsNCiAgICAgICAgQllU RSBiUmVzZXJ2ZWQ7DQogICAgICAgIENPTE9SUkVGIGNyVHJhbnNwYXJlbnQ7DQp9IExBWUVSUExB TkVERVNDUklQVE9SLCpQTEFZRVJQTEFORURFU0NSSVBUT1IsKkxQTEFZRVJQTEFORURFU0NSSVBU T1I7DQp0eXBlZGVmIHN0cnVjdCBfQkxFTkRGVU5DVElPTiB7DQogICAgQllURSBCbGVuZE9wOw0K ICAgIEJZVEUgQmxlbmRGbGFnczsNCiAgICBCWVRFIFNvdXJjZUNvbnN0YW50QWxwaGE7DQogICAg QllURSBBbHBoYUZvcm1hdDsNCn0gQkxFTkRGVU5DVElPTiwqUEJMRU5ERlVOQ1RJT04sKkxQQkxF TkRGVU5DVElPTjsNCnR5cGVkZWYgQk9PTCAoX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSAq QUJPUlRQUk9DKShIREMsaW50KTsNCnR5cGVkZWYgaW50IChfX2F0dHJpYnV0ZV9fKChfX3N0ZGNh bGxfXykpICpNRkVOVU1QUk9DKShIREMsSEFORExFVEFCTEUqLE1FVEFSRUNPUkQqLGludCxMUEFS QU0pOw0KdHlwZWRlZiBpbnQgKF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgKkVOSE1GRU5V TVBST0MpKEhEQyxIQU5ETEVUQUJMRSosRU5ITUVUQVJFQ09SRCosaW50LExQQVJBTSk7DQp0eXBl ZGVmIGludCAoX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSAqT0xERk9OVEVOVU1QUk9DQSko Y29uc3QgTE9HRk9OVEEqLGNvbnN0IFRFWFRNRVRSSUNBKixEV09SRCxMUEFSQU0pOw0KdHlwZWRl ZiBpbnQgKF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgKk9MREZPTlRFTlVNUFJPQ1cpKGNv bnN0IExPR0ZPTlRXKixjb25zdCBURVhUTUVUUklDVyosRFdPUkQsTFBBUkFNKTsNCnR5cGVkZWYg T0xERk9OVEVOVU1QUk9DQSBGT05URU5VTVBST0NBOw0KdHlwZWRlZiBPTERGT05URU5VTVBST0NX IEZPTlRFTlVNUFJPQ1c7DQp0eXBlZGVmIGludCAoX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSAqSUNNRU5VTVBST0NBKShMUFNUUixMUEFSQU0pOw0KdHlwZWRlZiBpbnQgKF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgKklDTUVOVU1QUk9DVykoTFBXU1RSLExQQVJBTSk7DQp0eXBlZGVm IHZvaWQgKF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgKkdPQkpFTlVNUFJPQykoTFBWT0lE LExQQVJBTSk7DQp0eXBlZGVmIHZvaWQgKF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgKkxJ TkVEREFQUk9DKShpbnQsaW50LExQQVJBTSk7DQp0eXBlZGVmIFVJTlQgKF9fYXR0cmlidXRlX18o KF9fc3RkY2FsbF9fKSkgKkxQRk5ERVZNT0RFKShIV05ELEhNT0RVTEUsTFBERVZNT0RFQSxMUFNU UixMUFNUUixMUERFVk1PREVBLExQU1RSLFVJTlQpOw0KdHlwZWRlZiBEV09SRCAoX19hdHRyaWJ1 dGVfXygoX19zdGRjYWxsX18pKSAqTFBGTkRFVkNBUFMpKExQU1RSLExQU1RSLFVJTlQsTFBTVFIs TFBERVZNT0RFQSk7DQoNCg0KDQoNCg0KDQoNCmludCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxf XykpIEFib3J0RG9jKEhEQyk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQWJv cnRQYXRoKEhEQyk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBBZGRGb250UmVz b3VyY2VBKExQQ1NUUik7DQppbnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBBZGRGb250 UmVzb3VyY2VXKExQQ1dTVFIpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEFu Z2xlQXJjKEhEQyxpbnQsaW50LERXT1JELEZMT0FULEZMT0FUKTsNCkJPT0wgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBBbmltYXRlUGFsZXR0ZShIUEFMRVRURSxVSU5ULFVJTlQsY29uc3Qg UEFMRVRURUVOVFJZKik7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQXJjKEhE QyxpbnQsaW50LGludCxpbnQsaW50LGludCxpbnQsaW50KTsNCkJPT0wgX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSBBcmNUbyhIREMsaW50LGludCxpbnQsaW50LGludCxpbnQsaW50LGludCk7 DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQmVnaW5QYXRoKEhEQyk7DQpCT09M IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQml0Qmx0KEhEQyxpbnQsaW50LGludCxpbnQs SERDLGludCxpbnQsRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIENh bmNlbERDKEhEQyk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQ2hlY2tDb2xv cnNJbkdhbXV0KEhEQyxQVk9JRCxQVk9JRCxEV09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgQ2hvcmQoSERDLGludCxpbnQsaW50LGludCxpbnQsaW50LGludCxpbnQpOw0K aW50IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQ2hvb3NlUGl4ZWxGb3JtYXQoSERDLGNv bnN0IFBJWEVMRk9STUFUREVTQ1JJUFRPUiopOw0KSEVOSE1FVEFGSUxFIF9fYXR0cmlidXRlX18o KF9fc3RkY2FsbF9fKSkgQ2xvc2VFbmhNZXRhRmlsZShIREMpOw0KQk9PTCBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIENsb3NlRmlndXJlKEhEQyk7DQpITUVUQUZJTEUgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBDbG9zZU1ldGFGaWxlKEhEQyk7DQpCT09MIF9fYXR0cmlidXRlX18o KF9fc3RkY2FsbF9fKSkgQ29sb3JNYXRjaFRvVGFyZ2V0KEhEQyxIREMsRFdPUkQpOw0KaW50IF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQ29tYmluZVJnbihIUkdOLEhSR04sSFJHTixpbnQp Ow0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIENvbWJpbmVUcmFuc2Zvcm0oTFBY Rk9STSxjb25zdCBYRk9STSosY29uc3QgWEZPUk0qKTsNCkhFTkhNRVRBRklMRSBfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpIENvcHlFbmhNZXRhRmlsZUEoSEVOSE1FVEFGSUxFLExQQ1NUUik7 DQpIRU5ITUVUQUZJTEUgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBDb3B5RW5oTWV0YUZp bGVXKEhFTkhNRVRBRklMRSxMUENXU1RSKTsNCkhNRVRBRklMRSBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIENvcHlNZXRhRmlsZUEoSE1FVEFGSUxFLExQQ1NUUik7DQpITUVUQUZJTEUgX19h dHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBDb3B5TWV0YUZpbGVXKEhNRVRBRklMRSxMUENXU1RS KTsNCkhCSVRNQVAgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBDcmVhdGVCaXRtYXAoaW50 LGludCxVSU5ULFVJTlQsUENWT0lEKTsNCkhCSVRNQVAgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBDcmVhdGVCaXRtYXBJbmRpcmVjdChjb25zdCBCSVRNQVAqKTsNCkhCUlVTSCBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIENyZWF0ZUJydXNoSW5kaXJlY3QoY29uc3QgTE9HQlJVU0gq KTsNCkhDT0xPUlNQQUNFIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQ3JlYXRlQ29sb3JT cGFjZUEoTFBMT0dDT0xPUlNQQUNFQSk7DQpIQ09MT1JTUEFDRSBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIENyZWF0ZUNvbG9yU3BhY2VXKExQTE9HQ09MT1JTUEFDRVcpOw0KSEJJVE1BUCBf X2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIENyZWF0ZUNvbXBhdGlibGVCaXRtYXAoSERDLGlu dCxpbnQpOw0KSERDIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQ3JlYXRlQ29tcGF0aWJs ZURDKEhEQyk7DQpIREMgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBDcmVhdGVEQ0EoTFBD U1RSLExQQ1NUUixMUENTVFIsY29uc3QgREVWTU9ERUEqKTsNCkhEQyBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIENyZWF0ZURDVyhMUENXU1RSLExQQ1dTVFIsTFBDV1NUUixjb25zdCBERVZN T0RFVyopOw0KSEJJVE1BUCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIENyZWF0ZURJQml0 bWFwKEhEQyxjb25zdCBCSVRNQVBJTkZPSEVBREVSKixEV09SRCxQQ1ZPSUQsY29uc3QgQklUTUFQ SU5GTyosVUlOVCk7DQpIQlJVU0ggX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBDcmVhdGVE SUJQYXR0ZXJuQnJ1c2goSEdMT0JBTCxVSU5UKTsNCkhCUlVTSCBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIENyZWF0ZURJQlBhdHRlcm5CcnVzaFB0KFBDVk9JRCxVSU5UKTsNCkhCSVRNQVAg X19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBDcmVhdGVESUJTZWN0aW9uKEhEQyxjb25zdCBC SVRNQVBJTkZPKixVSU5ULHZvaWQqKixIQU5ETEUsRFdPUkQpOw0KSEJJVE1BUCBfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpIENyZWF0ZURpc2NhcmRhYmxlQml0bWFwKEhEQyxpbnQsaW50KTsN CkhSR04gX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBDcmVhdGVFbGxpcHRpY1JnbihpbnQs aW50LGludCxpbnQpOw0KSFJHTiBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIENyZWF0ZUVs bGlwdGljUmduSW5kaXJlY3QoTFBDUkVDVCk7DQpIREMgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBDcmVhdGVFbmhNZXRhRmlsZUEoSERDLExQQ1NUUixMUENSRUNULExQQ1NUUik7DQpIREMg X19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBDcmVhdGVFbmhNZXRhRmlsZVcoSERDLExQQ1dT VFIsTFBDUkVDVCxMUENXU1RSKTsNCkhGT05UIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg Q3JlYXRlRm9udEEoaW50LGludCxpbnQsaW50LGludCxEV09SRCxEV09SRCxEV09SRCxEV09SRCxE V09SRCxEV09SRCxEV09SRCxEV09SRCxMUENTVFIpOw0KSEZPTlQgX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBDcmVhdGVGb250VyhpbnQsaW50LGludCxpbnQsaW50LERXT1JELERXT1JELERX T1JELERXT1JELERXT1JELERXT1JELERXT1JELERXT1JELExQQ1dTVFIpOw0KSEZPTlQgX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBDcmVhdGVGb250SW5kaXJlY3RBKGNvbnN0IExPR0ZPTlRB Kik7DQpIRk9OVCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIENyZWF0ZUZvbnRJbmRpcmVj dFcoY29uc3QgTE9HRk9OVFcqKTsNCkhQQUxFVFRFIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgQ3JlYXRlSGFsZnRvbmVQYWxldHRlKEhEQyk7DQpIQlJVU0ggX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBDcmVhdGVIYXRjaEJydXNoKGludCxDT0xPUlJFRik7DQpIREMgX19hdHRyaWJ1 dGVfXygoX19zdGRjYWxsX18pKSBDcmVhdGVJQ0EoTFBDU1RSLExQQ1NUUixMUENTVFIsY29uc3Qg REVWTU9ERUEqKTsNCkhEQyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIENyZWF0ZUlDVyhM UENXU1RSLExQQ1dTVFIsTFBDV1NUUixjb25zdCBERVZNT0RFVyopOw0KSERDIF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgQ3JlYXRlTWV0YUZpbGVBKExQQ1NUUik7DQpIREMgX19hdHRyaWJ1 dGVfXygoX19zdGRjYWxsX18pKSBDcmVhdGVNZXRhRmlsZVcoTFBDV1NUUik7DQpIUEFMRVRURSBf X2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIENyZWF0ZVBhbGV0dGUoY29uc3QgTE9HUEFMRVRU RSopOw0KSEJSVVNIIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQ3JlYXRlUGF0dGVybkJy dXNoKEhCSVRNQVApOw0KSFBFTiBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIENyZWF0ZVBl bihpbnQsaW50LENPTE9SUkVGKTsNCkhQRU4gX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBD cmVhdGVQZW5JbmRpcmVjdChjb25zdCBMT0dQRU4qKTsNCkhSR04gX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBDcmVhdGVQb2x5Z29uUmduKGNvbnN0IFBPSU5UKixpbnQsaW50KTsNCkhSR04g X19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBDcmVhdGVQb2x5UG9seWdvblJnbihjb25zdCBQ T0lOVCosY29uc3QgSU5UKixpbnQsaW50KTsNCkhSR04gX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBDcmVhdGVSZWN0UmduKGludCxpbnQsaW50LGludCk7DQpIUkdOIF9fYXR0cmlidXRlX18o KF9fc3RkY2FsbF9fKSkgQ3JlYXRlUmVjdFJnbkluZGlyZWN0KExQQ1JFQ1QpOw0KSFJHTiBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIENyZWF0ZVJvdW5kUmVjdFJnbihpbnQsaW50LGludCxp bnQsaW50LGludCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQ3JlYXRlU2Nh bGFibGVGb250UmVzb3VyY2VBKERXT1JELExQQ1NUUixMUENTVFIsTFBDU1RSKTsNCkJPT0wgX19h dHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBDcmVhdGVTY2FsYWJsZUZvbnRSZXNvdXJjZVcoRFdP UkQsTFBDV1NUUixMUENXU1RSLExQQ1dTVFIpOw0KSEJSVVNIIF9fYXR0cmlidXRlX18oKF9fc3Rk Y2FsbF9fKSkgQ3JlYXRlU29saWRCcnVzaChDT0xPUlJFRik7DQpCT09MIF9fYXR0cmlidXRlX18o KF9fc3RkY2FsbF9fKSkgRGVsZXRlQ29sb3JTcGFjZShIQ09MT1JTUEFDRSk7DQpCT09MIF9fYXR0 cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRGVsZXRlREMoSERDKTsNCkJPT0wgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBEZWxldGVFbmhNZXRhRmlsZShIRU5ITUVUQUZJTEUpOw0KQk9PTCBf X2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIERlbGV0ZU1ldGFGaWxlKEhNRVRBRklMRSk7DQpC T09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRGVsZXRlT2JqZWN0KEhHRElPQkopOw0K aW50IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRGVzY3JpYmVQaXhlbEZvcm1hdChIREMs aW50LFVJTlQsTFBQSVhFTEZPUk1BVERFU0NSSVBUT1IpOw0KRFdPUkQgX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSBEZXZpY2VDYXBhYmlsaXRpZXNBKExQQ1NUUixMUENTVFIsV09SRCxMUFNU Uixjb25zdCBERVZNT0RFQSopOw0KRFdPUkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBE ZXZpY2VDYXBhYmlsaXRpZXNXKExQQ1dTVFIsTFBDV1NUUixXT1JELExQV1NUUixjb25zdCBERVZN T0RFVyopOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIERQdG9MUChIREMsTFBQ T0lOVCxpbnQpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRHJhd0VzY2FwZShI REMsaW50LGludCxMUENTVFIpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEVs bGlwc2UoSERDLGludCxpbnQsaW50LGludCk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBFbmREb2MoSERDKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEVuZFBh Z2UoSERDKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBFbmRQYXRoKEhEQyk7 DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRW51bUVuaE1ldGFGaWxlKEhEQyxI RU5ITUVUQUZJTEUsRU5ITUZFTlVNUFJPQyxQVk9JRCxMUENSRUNUKTsNCmludCBfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpIEVudW1Gb250RmFtaWxpZXNBKEhEQyxMUENTVFIsRk9OVEVOVU1Q Uk9DQSxMUEFSQU0pOw0KaW50IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRW51bUZvbnRG YW1pbGllc1coSERDLExQQ1dTVFIsRk9OVEVOVU1QUk9DVyxMUEFSQU0pOw0KaW50IF9fYXR0cmli dXRlX18oKF9fc3RkY2FsbF9fKSkgRW51bUZvbnRGYW1pbGllc0V4QShIREMsUExPR0ZPTlRBLEZP TlRFTlVNUFJPQ0EsTFBBUkFNLERXT1JEKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxf XykpIEVudW1Gb250RmFtaWxpZXNFeFcoSERDLFBMT0dGT05UVyxGT05URU5VTVBST0NXLExQQVJB TSxEV09SRCk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBFbnVtRm9udHNBKEhE QyxMUENTVFIsRk9OVEVOVU1QUk9DQSxMUEFSQU0pOw0KaW50IF9fYXR0cmlidXRlX18oKF9fc3Rk Y2FsbF9fKSkgRW51bUZvbnRzVyhIREMsTFBDV1NUUixGT05URU5VTVBST0NBLExQQVJBTSk7DQpp bnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBFbnVtSUNNUHJvZmlsZXNBKEhEQyxJQ01F TlVNUFJPQ0EsTFBBUkFNKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEVudW1J Q01Qcm9maWxlc1coSERDLElDTUVOVU1QUk9DVyxMUEFSQU0pOw0KQk9PTCBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIEVudW1NZXRhRmlsZShIREMsSE1FVEFGSUxFLE1GRU5VTVBST0MsTFBB UkFNKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEVudW1PYmplY3RzKEhEQyxp bnQsR09CSkVOVU1QUk9DLExQQVJBTSk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgRXF1YWxSZ24oSFJHTixIUkdOKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykp IEVzY2FwZShIREMsaW50LGludCxMUENTVFIsUFZPSUQpOw0KaW50IF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgRXhjbHVkZUNsaXBSZWN0KEhEQyxpbnQsaW50LGludCxpbnQpOw0KaW50IF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRXhjbHVkZVVwZGF0ZVJnbihIREMsSFdORCk7DQpI UEVOIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRXh0Q3JlYXRlUGVuKERXT1JELERXT1JE LGNvbnN0IExPR0JSVVNIKixEV09SRCxjb25zdCBEV09SRCopOw0KSFJHTiBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIEV4dENyZWF0ZVJlZ2lvbihjb25zdCBYRk9STSosRFdPUkQsY29uc3Qg UkdOREFUQSopOw0KaW50IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRXh0RXNjYXBlKEhE QyxpbnQsaW50LExQQ1NUUixpbnQsTFBTVFIpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNh bGxfXykpIEV4dEZsb29kRmlsbChIREMsaW50LGludCxDT0xPUlJFRixVSU5UKTsNCmludCBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEV4dFNlbGVjdENsaXBSZ24oSERDLEhSR04saW50KTsN CkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBFeHRUZXh0T3V0QShIREMsaW50LGlu dCxVSU5ULExQQ1JFQ1QsTFBDU1RSLFVJTlQsY29uc3QgSU5UKik7DQpCT09MIF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgRXh0VGV4dE91dFcoSERDLGludCxpbnQsVUlOVCxMUENSRUNULExQ Q1dTVFIsVUlOVCxjb25zdCBJTlQqKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSBGaWxsUGF0aChIREMpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRmlsbFJl Y3QoSERDLExQQ1JFQ1QsSEJSVVNIKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykp IEZpbGxSZ24oSERDLEhSR04sSEJSVVNIKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBGaXhCcnVzaE9yZ0V4KEhEQyxpbnQsaW50LExQUE9JTlQpOw0KQk9PTCBfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpIEZsYXR0ZW5QYXRoKEhEQyk7DQpCT09MIF9fYXR0cmlidXRlX18o KF9fc3RkY2FsbF9fKSkgRmxvb2RGaWxsKEhEQyxpbnQsaW50LENPTE9SUkVGKTsNCkJPT0wgX19h dHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZGlDb21tZW50KEhEQyxVSU5ULGNvbnN0IEJZVEUq KTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZGlGbHVzaCh2b2lkKTsNCkRX T1JEIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2RpR2V0QmF0Y2hMaW1pdCh2b2lkKTsN CkRXT1JEIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2RpU2V0QmF0Y2hMaW1pdChEV09S RCk7DQojIDI0NzMgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvd2luZ2RpLmgiIDMNCmludCBf X2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldEFyY0RpcmVjdGlvbihIREMpOw0KQk9PTCBf X2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldEFzcGVjdFJhdGlvRmlsdGVyRXgoSERDLExQ U0laRSk7DQpMT05HIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0Qml0bWFwQml0cyhI QklUTUFQLExPTkcsUFZPSUQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdl dEJpdG1hcERpbWVuc2lvbkV4KEhCSVRNQVAsTFBTSVpFKTsNCkNPTE9SUkVGIF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgR2V0QmtDb2xvcihIREMpOw0KaW50IF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgR2V0QmtNb2RlKEhEQyk7DQpVSU5UIF9fYXR0cmlidXRlX18oKF9fc3RkY2Fs bF9fKSkgR2V0Qm91bmRzUmVjdChIREMsTFBSRUNULFVJTlQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIEdldEJydXNoT3JnRXgoSERDLExQUE9JTlQpOw0KQk9PTCBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldENoYXJBQkNXaWR0aHNBKEhEQyxVSU5ULFVJTlQsTFBB QkMpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldENoYXJBQkNXaWR0aHNX KEhEQyxVSU5ULFVJTlQsTFBBQkMpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykp IEdldENoYXJBQkNXaWR0aHNGbG9hdEEoSERDLFVJTlQsVUlOVCxMUEFCQ0ZMT0FUKTsNCkJPT0wg X19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRDaGFyQUJDV2lkdGhzRmxvYXRXKEhEQyxV SU5ULFVJTlQsTFBBQkNGTE9BVCk7DQpEV09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykp IEdldENoYXJhY3RlclBsYWNlbWVudEEoSERDLExQQ1NUUixpbnQsaW50LExQR0NQX1JFU1VMVFNB LERXT1JEKTsNCkRXT1JEIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0Q2hhcmFjdGVy UGxhY2VtZW50VyhIREMsTFBDV1NUUixpbnQsaW50LExQR0NQX1JFU1VMVFNXLERXT1JEKTsNCkJP T0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRDaGFyV2lkdGgzMkEoSERDLFVJTlQs VUlOVCxMUElOVCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0Q2hhcldp ZHRoMzJXKEhEQyxVSU5ULFVJTlQsTFBJTlQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNh bGxfXykpIEdldENoYXJXaWR0aEEoSERDLFVJTlQsVUlOVCxMUElOVCk7DQpCT09MIF9fYXR0cmli dXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0Q2hhcldpZHRoVyhIREMsVUlOVCxVSU5ULExQSU5UKTsN CkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRDaGFyV2lkdGhGbG9hdEEoSERD LFVJTlQsVUlOVCxQRkxPQVQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdl dENoYXJXaWR0aEZsb2F0VyhIREMsVUlOVCxVSU5ULFBGTE9BVCk7DQppbnQgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBHZXRDbGlwQm94KEhEQyxMUFJFQ1QpOw0KaW50IF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgR2V0Q2xpcFJnbihIREMsSFJHTik7DQpCT09MIF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgR2V0Q29sb3JBZGp1c3RtZW50KEhEQyxMUENPTE9SQURKVVNUTUVO VCk7DQpIQU5ETEUgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRDb2xvclNwYWNlKEhE Qyk7DQpIR0RJT0JKIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0Q3VycmVudE9iamVj dChIREMsVUlOVCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0Q3VycmVu dFBvc2l0aW9uRXgoSERDLExQUE9JTlQpOw0KSENVUlNPUiBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNh bGxfXykpIEdldEN1cnNvcih2b2lkKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSBHZXREQ09yZ0V4KEhEQyxMUFBPSU5UKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxf XykpIEdldERldmljZUNhcHMoSERDLGludCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2Fs bF9fKSkgR2V0RGV2aWNlR2FtbWFSYW1wKEhEQyxQVk9JRCk7DQpVSU5UIF9fYXR0cmlidXRlX18o KF9fc3RkY2FsbF9fKSkgR2V0RElCQ29sb3JUYWJsZShIREMsVUlOVCxVSU5ULFJHQlFVQUQqKTsN CmludCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldERJQml0cyhIREMsSEJJVE1BUCxV SU5ULFVJTlQsUFZPSUQsTFBCSVRNQVBJTkZPLFVJTlQpOw0KSEVOSE1FVEFGSUxFIF9fYXR0cmli dXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0RW5oTWV0YUZpbGVBKExQQ1NUUik7DQpIRU5ITUVUQUZJ TEUgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRFbmhNZXRhRmlsZVcoTFBDV1NUUik7 DQpVSU5UIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0RW5oTWV0YUZpbGVEZXNjcmlw dGlvbkEoSEVOSE1FVEFGSUxFLFVJTlQsTFBTVFIpOw0KVUlOVCBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIEdldEVuaE1ldGFGaWxlRGVzY3JpcHRpb25XKEhFTkhNRVRBRklMRSxVSU5ULExQ V1NUUik7DQpVSU5UIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0RW5oTWV0YUZpbGVI ZWFkZXIoSEVOSE1FVEFGSUxFLFVJTlQsTFBFTkhNRVRBSEVBREVSKTsNClVJTlQgX19hdHRyaWJ1 dGVfXygoX19zdGRjYWxsX18pKSBHZXRFbmhNZXRhRmlsZVBhbGV0dGVFbnRyaWVzKEhFTkhNRVRB RklMRSxVSU5ULExQUEFMRVRURUVOVFJZKTsNClVJTlQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBHZXRFbmhNZXRhRmlsZVBpeGVsRm9ybWF0KEhFTkhNRVRBRklMRSxEV09SRCxQSVhFTEZP Uk1BVERFU0NSSVBUT1IqKTsNCkRXT1JEIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0 Rm9udERhdGEoSERDLERXT1JELERXT1JELFBWT0lELERXT1JEKTsNCkRXT1JEIF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgR2V0Rm9udExhbmd1YWdlSW5mbyhIREMpOw0KRFdPUkQgX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRHbHlwaE91dGxpbmVBKEhEQyxVSU5ULFVJTlQsTFBH TFlQSE1FVFJJQ1MsRFdPUkQsUFZPSUQsY29uc3QgTUFUMiopOw0KRFdPUkQgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBHZXRHbHlwaE91dGxpbmVXKEhEQyxVSU5ULFVJTlQsTFBHTFlQSE1F VFJJQ1MsRFdPUkQsUFZPSUQsY29uc3QgTUFUMiopOw0KaW50IF9fYXR0cmlidXRlX18oKF9fc3Rk Y2FsbF9fKSkgR2V0R3JhcGhpY3NNb2RlKEhEQyk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3Rk Y2FsbF9fKSkgR2V0SUNNUHJvZmlsZUEoSERDLERXT1JELExQU1RSKTsNCkJPT0wgX19hdHRyaWJ1 dGVfXygoX19zdGRjYWxsX18pKSBHZXRJQ01Qcm9maWxlVyhIREMsRFdPUkQsTFBXU1RSKTsNCkRX T1JEIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0S2VybmluZ1BhaXJzQShIREMsRFdP UkQsTFBLRVJOSU5HUEFJUik7DQpEV09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdl dEtlcm5pbmdQYWlyc1coSERDLERXT1JELExQS0VSTklOR1BBSVIpOw0KQk9PTCBfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpIEdldExvZ0NvbG9yU3BhY2VBKEhDT0xPUlNQQUNFLExQTE9HQ09M T1JTUEFDRUEsRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldExv Z0NvbG9yU3BhY2VXKEhDT0xPUlNQQUNFLExQTE9HQ09MT1JTUEFDRVcsRFdPUkQpOw0KaW50IF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0TWFwTW9kZShIREMpOw0KSE1FVEFGSUxFIF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0TWV0YUZpbGVBKExQQ1NUUik7DQpITUVUQUZJ TEUgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRNZXRhRmlsZVcoTFBDV1NUUik7DQpV SU5UIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0TWV0YUZpbGVCaXRzRXgoSE1FVEFG SUxFLFVJTlQsUFZPSUQpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0TWV0 YVJnbihIREMsSFJHTik7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0TWl0 ZXJMaW1pdChIREMsUEZMT0FUKTsNCkNPTE9SUkVGIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgR2V0TmVhcmVzdENvbG9yKEhEQyxDT0xPUlJFRik7DQpVSU5UIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgR2V0TmVhcmVzdFBhbGV0dGVJbmRleChIUEFMRVRURSxDT0xPUlJFRik7DQpp bnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRPYmplY3RBKEhHRElPQkosaW50LFBW T0lEKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldE9iamVjdFcoSEdESU9C SixpbnQsUFZPSUQpOw0KRFdPUkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRPYmpl Y3RUeXBlKEhHRElPQkopOw0KVUlOVCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldE91 dGxpbmVUZXh0TWV0cmljc0EoSERDLFVJTlQsTFBPVVRMSU5FVEVYVE1FVFJJQ0EpOw0KVUlOVCBf X2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldE91dGxpbmVUZXh0TWV0cmljc1coSERDLFVJ TlQsTFBPVVRMSU5FVEVYVE1FVFJJQ1cpOw0KVUlOVCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxf XykpIEdldFBhbGV0dGVFbnRyaWVzKEhQQUxFVFRFLFVJTlQsVUlOVCxMUFBBTEVUVEVFTlRSWSk7 DQppbnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRQYXRoKEhEQyxMUFBPSU5ULFBC WVRFLGludCk7DQpDT0xPUlJFRiBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldFBpeGVs KEhEQyxpbnQsaW50KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldFBpeGVs Rm9ybWF0KEhEQyk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRQb2x5Rmls bE1vZGUoSERDKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRSYXN0ZXJp emVyQ2FwcyhMUFJBU1RFUklaRVJfU1RBVFVTLFVJTlQpOw0KRFdPUkQgX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSBHZXRSZWdpb25EYXRhKEhSR04sRFdPUkQsTFBSR05EQVRBKTsNCmludCBf X2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldFJnbkJveChIUkdOLExQUkVDVCk7DQppbnQg X19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRST1AyKEhEQyk7DQpIR0RJT0JKIF9fYXR0 cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0U3RvY2tPYmplY3QoaW50KTsNCmludCBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldFN0cmV0Y2hCbHRNb2RlKEhEQyk7DQpVSU5UIF9fYXR0 cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0U3lzdGVtUGFsZXR0ZUVudHJpZXMoSERDLFVJTlQs VUlOVCxMUFBBTEVUVEVFTlRSWSk7DQpVSU5UIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg R2V0U3lzdGVtUGFsZXR0ZVVzZShIREMpOw0KVUlOVCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxf XykpIEdldFRleHRBbGlnbihIREMpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg R2V0VGV4dENoYXJhY3RlckV4dHJhKEhEQyk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBHZXRUZXh0Q2hhcnNldChIREMpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgR2V0VGV4dENoYXJzZXRJbmZvKEhEQyxMUEZPTlRTSUdOQVRVUkUsRFdPUkQpOw0KQ09MT1JS RUYgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRUZXh0Q29sb3IoSERDKTsNCkJPT0wg X19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRUZXh0RXh0ZW50RXhQb2ludEEoSERDLExQ Q1NUUixpbnQsaW50LExQSU5ULExQSU5ULExQU0laRSk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgR2V0VGV4dEV4dGVudEV4UG9pbnRXKCBIREMsTFBDV1NUUixpbnQsaW50LExQ SU5ULExQSU5ULExQU0laRSApOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdl dFRleHRFeHRlbnRQb2ludEEoSERDLExQQ1NUUixpbnQsTFBTSVpFKTsNCkJPT0wgX19hdHRyaWJ1 dGVfXygoX19zdGRjYWxsX18pKSBHZXRUZXh0RXh0ZW50UG9pbnRXKEhEQyxMUENXU1RSLGludCxM UFNJWkUpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldFRleHRFeHRlbnRQ b2ludDMyQShIREMsTFBDU1RSLGludCxMUFNJWkUpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIEdldFRleHRFeHRlbnRQb2ludDMyVyggSERDLExQQ1dTVFIsaW50LExQU0laRSk7 DQppbnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRUZXh0RmFjZUEoSERDLGludCxM UFNUUik7DQppbnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRUZXh0RmFjZVcoSERD LGludCxMUFdTVFIpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldFRleHRN ZXRyaWNzQShIREMsTFBURVhUTUVUUklDQSk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2Fs bF9fKSkgR2V0VGV4dE1ldHJpY3NXKEhEQyxMUFRFWFRNRVRSSUNXKTsNCkJPT0wgX19hdHRyaWJ1 dGVfXygoX19zdGRjYWxsX18pKSBHZXRWaWV3cG9ydEV4dEV4KEhEQyxMUFNJWkUpOw0KQk9PTCBf X2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldFZpZXdwb3J0T3JnRXgoSERDLExQUE9JTlQp Ow0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldFdpbmRvd0V4dEV4KEhEQyxM UFNJWkUpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldFdpbmRvd09yZ0V4 KEhEQyxMUFBPSU5UKTsNClVJTlQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRXaW5N ZXRhRmlsZUJpdHMoSEVOSE1FVEFGSUxFLFVJTlQsTFBCWVRFLElOVCxIREMpOw0KQk9PTCBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldFdvcmxkVHJhbnNmb3JtKEhEQyxMUFhGT1JNKTsN CmludCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEludGVyc2VjdENsaXBSZWN0KEhEQyxp bnQsaW50LGludCxpbnQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEludmVy dFJnbihIREMsSFJHTik7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgTGluZURE QShpbnQsaW50LGludCxpbnQsTElORUREQVBST0MsTFBBUkFNKTsNCkJPT0wgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBMaW5lVG8oSERDLGludCxpbnQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIExQdG9EUChIREMsTFBQT0lOVCxpbnQpOw0KQk9PTCBfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpIE1hc2tCbHQoSERDLGludCxpbnQsaW50LGludCxIREMsaW50LGlu dCxIQklUTUFQLGludCxpbnQsRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxf XykpIE1vZGlmeVdvcmxkVHJhbnNmb3JtKEhEQyxjb25zdCBYRk9STSosRFdPUkQpOw0KQk9PTCBf X2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIE1vdmVUb0V4KEhEQyxpbnQsaW50LExQUE9JTlQp Ow0KaW50IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgT2Zmc2V0Q2xpcFJnbihIREMsaW50 LGludCk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBPZmZzZXRSZ24oSFJHTixp bnQsaW50KTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBPZmZzZXRWaWV3cG9y dE9yZ0V4KEhEQyxpbnQsaW50LExQUE9JTlQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNh bGxfXykpIE9mZnNldFdpbmRvd09yZ0V4KEhEQyxpbnQsaW50LExQUE9JTlQpOw0KQk9PTCBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFBhaW50UmduKEhEQyxIUkdOKTsNCkJPT0wgX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBQYXRCbHQoSERDLGludCxpbnQsaW50LGludCxEV09SRCk7 DQpIUkdOIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUGF0aFRvUmVnaW9uKEhEQyk7DQpC T09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUGllKEhEQyxpbnQsaW50LGludCxpbnQs aW50LGludCxpbnQsaW50KTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBQbGF5 RW5oTWV0YUZpbGUoSERDLEhFTkhNRVRBRklMRSxMUENSRUNUKTsNCkJPT0wgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBQbGF5RW5oTWV0YUZpbGVSZWNvcmQoSERDLExQSEFORExFVEFCTEUs Y29uc3QgRU5ITUVUQVJFQ09SRCosVUlOVCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2Fs bF9fKSkgUGxheU1ldGFGaWxlKEhEQyxITUVUQUZJTEUpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIFBsYXlNZXRhRmlsZVJlY29yZChIREMsTFBIQU5ETEVUQUJMRSxMUE1FVEFS RUNPUkQsVUlOVCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUGxnQmx0KEhE Qyxjb25zdCBQT0lOVCosSERDLGludCxpbnQsaW50LGludCxIQklUTUFQLGludCxpbnQpOw0KQk9P TCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFBvbHlCZXppZXIoSERDLGNvbnN0IFBPSU5U KixEV09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUG9seUJlemllclRv KEhEQyxjb25zdCBQT0lOVCosRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxf XykpIFBvbHlEcmF3KEhEQyxjb25zdCBQT0lOVCosY29uc3QgQllURSosaW50KTsNCkJPT0wgX19h dHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBQb2x5Z29uKEhEQyxjb25zdCBQT0lOVCosaW50KTsN CkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBQb2x5bGluZShIREMsY29uc3QgUE9J TlQqLGludCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUG9seWxpbmVUbyhI REMsY29uc3QgUE9JTlQqLERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSBQb2x5UG9seWdvbihIREMsY29uc3QgUE9JTlQqLGNvbnN0IElOVCosaW50KTsNCkJPT0wgX19h dHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBQb2x5UG9seWxpbmUoSERDLGNvbnN0IFBPSU5UKixj b25zdCBEV09SRCosRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFBv bHlUZXh0T3V0QShIREMsY29uc3QgUE9MWVRFWFRBKixpbnQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIFBvbHlUZXh0T3V0VyhIREMsY29uc3QgUE9MWVRFWFRXKixpbnQpOw0K Qk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFB0SW5SZWdpb24oSFJHTixpbnQsaW50 KTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBQdFZpc2libGUoSERDLGludCxp bnQpOw0KVUlOVCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJlYWxpemVQYWxldHRlKEhE Qyk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUmVjdGFuZ2xlKEhEQyxpbnQs aW50LGludCxpbnQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJlY3RJblJl Z2lvbihIUkdOLExQQ1JFQ1QpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJl Y3RWaXNpYmxlKEhEQyxMUENSRUNUKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSBSZW1vdmVGb250UmVzb3VyY2VBKExQQ1NUUik7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3Rk Y2FsbF9fKSkgUmVtb3ZlRm9udFJlc291cmNlVyhMUENXU1RSKTsNCkhEQyBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIFJlc2V0RENBKEhEQyxjb25zdCBERVZNT0RFQSopOw0KSERDIF9fYXR0 cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUmVzZXREQ1coSERDLGNvbnN0IERFVk1PREVXKik7DQpC T09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUmVzaXplUGFsZXR0ZShIUEFMRVRURSxV SU5UKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBSZXN0b3JlREMoSERDLGlu dCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUm91bmRSZWN0KEhEQyxpbnQs aW50LGludCxpbnQsaW50LGludCk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBT YXZlREMoSERDKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBTY2FsZVZpZXdw b3J0RXh0RXgoSERDLGludCxpbnQsaW50LGludCxMUFNJWkUpOw0KQk9PTCBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIFNjYWxlV2luZG93RXh0RXgoSERDLGludCxpbnQsaW50LGludCxMUFNJ WkUpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNlbGVjdENsaXBQYXRoKEhE QyxpbnQpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2VsZWN0Q2xpcFJnbihI REMsSFJHTik7DQpIR0RJT0JKIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2VsZWN0T2Jq ZWN0KEhEQyxIR0RJT0JKKTsNCkhQQUxFVFRFIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg U2VsZWN0UGFsZXR0ZShIREMsSFBBTEVUVEUsQk9PTCk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBTZXRBYm9ydFByb2MoSERDLEFCT1JUUFJPQyk7DQppbnQgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBTZXRBcmNEaXJlY3Rpb24oSERDLGludCk7DQpMT05HIF9fYXR0cmli dXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0Qml0bWFwQml0cyhIQklUTUFQLERXT1JELFBDVk9JRCk7 DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0Qml0bWFwRGltZW5zaW9uRXgo SEJJVE1BUCxpbnQsaW50LExQU0laRSk7DQpDT0xPUlJFRiBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNh bGxfXykpIFNldEJrQ29sb3IoSERDLENPTE9SUkVGKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIFNldEJrTW9kZShIREMsaW50KTsNClVJTlQgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBTZXRCb3VuZHNSZWN0KEhEQyxMUENSRUNULFVJTlQpOw0KQk9PTCBfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpIFNldEJydXNoT3JnRXgoSERDLGludCxpbnQsTFBQT0lOVCk7DQpC T09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0Q29sb3JBZGp1c3RtZW50KEhEQyxj b25zdCBDT0xPUkFESlVTVE1FTlQqKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSBTZXRDb2xvclNwYWNlKEhEQyxIQ09MT1JTUEFDRSk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgU2V0RGV2aWNlR2FtbWFSYW1wKEhEQyxQVk9JRCk7DQpVSU5UIF9fYXR0cmli dXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0RElCQ29sb3JUYWJsZShIREMsVUlOVCxVSU5ULGNvbnN0 IFJHQlFVQUQqKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNldERJQml0cyhI REMsSEJJVE1BUCxVSU5ULFVJTlQsUENWT0lELGNvbnN0IEJJVE1BUElORk8qLFVJTlQpOw0KaW50 IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0RElCaXRzVG9EZXZpY2UoSERDLGludCxp bnQsRFdPUkQsRFdPUkQsaW50LGludCxVSU5ULFVJTlQsUENWT0lELGNvbnN0IEJJVE1BUElORk8q LFVJTlQpOw0KSEVOSE1FVEFGSUxFIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0RW5o TWV0YUZpbGVCaXRzKFVJTlQsY29uc3QgQllURSopOw0KaW50IF9fYXR0cmlidXRlX18oKF9fc3Rk Y2FsbF9fKSkgU2V0R3JhcGhpY3NNb2RlKEhEQyxpbnQpOw0KaW50IF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgU2V0SUNNTW9kZShIREMsaW50KTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBTZXRJQ01Qcm9maWxlQShIREMsTFBTVFIpOw0KQk9PTCBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIFNldElDTVByb2ZpbGVXKEhEQyxMUFdTVFIpOw0KaW50IF9fYXR0cmli dXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0TWFwTW9kZShIREMsaW50KTsNCkRXT1JEIF9fYXR0cmli dXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0TWFwcGVyRmxhZ3MoSERDLERXT1JEKTsNCkhNRVRBRklM RSBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNldE1ldGFGaWxlQml0c0V4KFVJTlQsY29u c3QgQllURSAqKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNldE1ldGFSZ24o SERDKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBTZXRNaXRlckxpbWl0KEhE QyxGTE9BVCxQRkxPQVQpOw0KVUlOVCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNldFBh bGV0dGVFbnRyaWVzKEhQQUxFVFRFLFVJTlQsVUlOVCxjb25zdCBQQUxFVFRFRU5UUlkqKTsNCkNP TE9SUkVGIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0UGl4ZWwoSERDLGludCxpbnQs Q09MT1JSRUYpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNldFBpeGVsRm9y bWF0KEhEQyxpbnQsUElYRUxGT1JNQVRERVNDUklQVE9SKik7DQpCT09MIF9fYXR0cmlidXRlX18o KF9fc3RkY2FsbF9fKSkgU2V0UGl4ZWxWKEhEQyxpbnQsaW50LENPTE9SUkVGKTsNCmludCBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNldFBvbHlGaWxsTW9kZShIREMsaW50KTsNCkJPT0wg X19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBTZXRSZWN0UmduKEhSR04saW50LGludCxpbnQs aW50KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNldFJPUDIoSERDLGludCk7 DQppbnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBTZXRTdHJldGNoQmx0TW9kZShIREMs aW50KTsNClVJTlQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBTZXRTeXN0ZW1QYWxldHRl VXNlKEhEQyxVSU5UKTsNClVJTlQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBTZXRUZXh0 QWxpZ24oSERDLFVJTlQpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0VGV4 dENoYXJhY3RlckV4dHJhKEhEQyxpbnQpOw0KQ09MT1JSRUYgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBTZXRUZXh0Q29sb3IoSERDLENPTE9SUkVGKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSBTZXRUZXh0SnVzdGlmaWNhdGlvbihIREMsaW50LGludCk7DQpCT09MIF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0Vmlld3BvcnRFeHRFeChIREMsaW50LGludCxM UFNJWkUpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNldFZpZXdwb3J0T3Jn RXgoSERDLGludCxpbnQsTFBQT0lOVCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgU2V0V2luZG93RXh0RXgoSERDLGludCxpbnQsTFBTSVpFKTsNCkJPT0wgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBTZXRXaW5kb3dPcmdFeChIREMsaW50LGludCxMUFBPSU5UKTsNCkhF TkhNRVRBRklMRSBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNldFdpbk1ldGFGaWxlQml0 cyhVSU5ULGNvbnN0IEJZVEUqLEhEQyxjb25zdCBNRVRBRklMRVBJQ1QqKTsNCkJPT0wgX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBTZXRXb3JsZFRyYW5zZm9ybShIREMsY29uc3QgWEZPUk0g Kik7DQppbnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBTdGFydERvY0EoSERDLGNvbnN0 IERPQ0lORk9BKik7DQppbnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBTdGFydERvY1co SERDLGNvbnN0IERPQ0lORk9XKik7DQppbnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBT dGFydFBhZ2UoSERDKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBTdHJldGNo Qmx0KEhEQyxpbnQsaW50LGludCxpbnQsSERDLGludCxpbnQsaW50LGludCxEV09SRCk7DQppbnQg X19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBTdHJldGNoRElCaXRzKEhEQyxpbnQsaW50LGlu dCxpbnQsaW50LGludCxpbnQsaW50LGNvbnN0IHZvaWQgKixjb25zdCBCSVRNQVBJTkZPICosVUlO VCxEV09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU3Ryb2tlQW5kRmls bFBhdGgoSERDKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBTdHJva2VQYXRo KEhEQyk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU3dhcEJ1ZmZlcnMoSERD KTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBUZXh0T3V0QShIREMsaW50LGlu dCxMUENTVFIsaW50KTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBUZXh0T3V0 VyhIREMsaW50LGludCxMUENXU1RSLGludCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2Fs bF9fKSkgVHJhbnNsYXRlQ2hhcnNldEluZm8oUERXT1JELExQQ0hBUlNFVElORk8sRFdPUkQpOw0K Qk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFVucmVhbGl6ZU9iamVjdChIR0RJT0JK KTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBVcGRhdGVDb2xvcnMoSERDKTsN CkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBVcGRhdGVJQ01SZWdLZXlBKERXT1JE LERXT1JELExQU1RSLFVJTlQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFVw ZGF0ZUlDTVJlZ0tleVcoRFdPUkQsRFdPUkQsTFBXU1RSLFVJTlQpOw0KQk9PTCBfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpIFdpZGVuUGF0aChIREMpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIHdnbENvcHlDb250ZXh0KEhHTFJDLEhHTFJDLFVJTlQpOw0KSEdMUkMgX19h dHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSB3Z2xDcmVhdGVDb250ZXh0KEhEQyk7DQpIR0xSQyBf X2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIHdnbENyZWF0ZUxheWVyQ29udGV4dChIREMsaW50 KTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSB3Z2xEZWxldGVDb250ZXh0KEhH TFJDKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSB3Z2xEZXNjcmliZUxheWVy UGxhbmUoSERDLGludCxpbnQsVUlOVCxMUExBWUVSUExBTkVERVNDUklQVE9SKTsNCkhHTFJDIF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgd2dsR2V0Q3VycmVudENvbnRleHQodm9pZCk7DQpI REMgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSB3Z2xHZXRDdXJyZW50REModm9pZCk7DQpp bnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSB3Z2xHZXRMYXllclBhbGV0dGVFbnRyaWVz KEhEQyxpbnQsaW50LGludCxDT0xPUlJFRiopOw0KUFJPQyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNh bGxfXykpIHdnbEdldFByb2NBZGRyZXNzKExQQ1NUUik7DQpCT09MIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgd2dsTWFrZUN1cnJlbnQoSERDLEhHTFJDKTsNCkJPT0wgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSB3Z2xSZWFsaXplTGF5ZXJQYWxldHRlKEhEQyxpbnQsQk9PTCk7DQpp bnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSB3Z2xTZXRMYXllclBhbGV0dGVFbnRyaWVz KEhEQyxpbnQsaW50LGludCxjb25zdCBDT0xPUlJFRiopOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIHdnbFNoYXJlTGlzdHMoSEdMUkMsSEdMUkMpOw0KQk9PTCBfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpIHdnbFN3YXBMYXllckJ1ZmZlcnMoSERDLFVJTlQpOw0KQk9PTCBf X2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIHdnbFVzZUZvbnRCaXRtYXBzQShIREMsRFdPUkQs RFdPUkQsRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIHdnbFVzZUZv bnRCaXRtYXBzVyhIREMsRFdPUkQsRFdPUkQsRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIHdnbFVzZUZvbnRPdXRsaW5lc0EoSERDLERXT1JELERXT1JELERXT1JELEZM T0FULEZMT0FULGludCxMUEdMWVBITUVUUklDU0ZMT0FUKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSB3Z2xVc2VGb250T3V0bGluZXNXKEhEQyxEV09SRCxEV09SRCxEV09SRCxG TE9BVCxGTE9BVCxpbnQsTFBHTFlQSE1FVFJJQ1NGTE9BVCk7DQojIDI3NjIgInQ6L21zeXMvMS4w L21pbmd3L2luY2x1ZGUvd2luZ2RpLmgiIDMNCnR5cGVkZWYgQllURSBCQ0hBUjsNCnR5cGVkZWYg RE9DSU5GT0EgRE9DSU5GTywgKkxQRE9DSU5GTzsNCnR5cGVkZWYgTE9HRk9OVEEgTE9HRk9OVCwq UExPR0ZPTlQsKkxQTE9HRk9OVDsNCnR5cGVkZWYgVEVYVE1FVFJJQ0EgVEVYVE1FVFJJQywqUFRF WFRNRVRSSUMsKkxQVEVYVE1FVFJJQzsNCg0KDQp0eXBlZGVmIERFVk1PREVBIERFVk1PREUsKlBE RVZNT0RFLCpMUERFVk1PREU7DQp0eXBlZGVmIEVYVExPR0ZPTlRBIEVYVExPR0ZPTlQsKlBFWFRM T0dGT05ULCpMUEVYVExPR0ZPTlQ7DQp0eXBlZGVmIEdDUF9SRVNVTFRTQSBHQ1BfUkVTVUxUUywq TFBHQ1BfUkVTVUxUUzsNCnR5cGVkZWYgT1VUTElORVRFWFRNRVRSSUNBIE9VVExJTkVURVhUTUVU UklDLCpQT1VUTElORVRFWFRNRVRSSUMsKkxQT1VUTElORVRFWFRNRVRSSUM7DQp0eXBlZGVmIFBP TFlURVhUQSBQT0xZVEVYVDsNCnR5cGVkZWYgTE9HQ09MT1JTUEFDRUEgTE9HQ09MT1JTUEFDRSwq TFBMT0dDT0xPUlNQQUNFOw0KdHlwZWRlZiBORVdURVhUTUVUUklDQSBORVdURVhUTUVUUklDLCpQ TkVXVEVYVE1FVFJJQywqTFBORVdURVhUTUVUUklDOw0KdHlwZWRlZiBORVdURVhUTUVUUklDRVhB IE5FV1RFWFRNRVRSSUNFWDsNCnR5cGVkZWYgRU5VTUxPR0ZPTlRBIEVOVU1MT0dGT05ULCpMUEVO VU1MT0dGT05UOw0KdHlwZWRlZiBFTlVNTE9HRk9OVEVYQSBFTlVNTE9HRk9OVEVYLCpMUEVOVU1M T0dGT05URVg7DQojIDI4MjYgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvd2luZ2RpLmgiIDMN Cn0NCiMgMTA1ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL3dpbmRvd3MuaCIgMiAzDQoNCg0K IyAxICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL3dpbnVzZXIuaCIgMSAzDQoNCg0KDQpleHRl cm4gIkMiIHsNCiMgMTg1MyAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS93aW51c2VyLmgiIDMN CnR5cGVkZWYgQk9PTChfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpICpETEdQUk9DKShIV05E LFVJTlQsV1BBUkFNLExQQVJBTSk7DQp0eXBlZGVmIHZvaWQoX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSAqVElNRVJQUk9DKShIV05ELFVJTlQsVUlOVCxEV09SRCk7DQp0eXBlZGVmIEJPT0wo X19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSAqR1JBWVNUUklOR1BST0MpKEhEQyxMUEFSQU0s aW50KTsNCnR5cGVkZWYgTFJFU1VMVChfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpICpIT09L UFJPQykoaW50LFdQQVJBTSxMUEFSQU0pOw0KdHlwZWRlZiBCT09MKF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgKlBST1BFTlVNUFJPQ0EpKEhXTkQsTFBDU1RSLEhBTkRMRSk7DQp0eXBlZGVm IEJPT0woX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSAqUFJPUEVOVU1QUk9DVykoSFdORCxM UENXU1RSLEhBTkRMRSk7DQp0eXBlZGVmIEJPT0woX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSAqUFJPUEVOVU1QUk9DRVhBKShIV05ELExQU1RSLEhBTkRMRSxEV09SRCk7DQp0eXBlZGVmIEJP T0woX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSAqUFJPUEVOVU1QUk9DRVhXKShIV05ELExQ V1NUUixIQU5ETEUsRFdPUkQpOw0KdHlwZWRlZiBpbnQoX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSAqRURJVFdPUkRCUkVBS1BST0NBKShMUFNUUixpbnQsaW50LGludCk7DQp0eXBlZGVmIGlu dChfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpICpFRElUV09SREJSRUFLUFJPQ1cpKExQV1NU UixpbnQsaW50LGludCk7DQp0eXBlZGVmIExSRVNVTFQoX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSAqV05EUFJPQykoSFdORCxVSU5ULFdQQVJBTSxMUEFSQU0pOw0KdHlwZWRlZiBCT09MKF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgKkRSQVdTVEFURVBST0MpKEhEQyxMUEFSQU0sV1BB UkFNLGludCxpbnQpOw0KdHlwZWRlZiBCT09MKF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg KldOREVOVU1QUk9DKShIV05ELExQQVJBTSk7DQp0eXBlZGVmIEJPT0woX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSAqRU5VTVdJTkRPV1NQUk9DKShIV05ELExQQVJBTSk7DQp0eXBlZGVmIEJP T0woX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSAqTkFNRUVOVU1QUk9DQSkoTFBTVFIsTFBB UkFNKTsNCnR5cGVkZWYgQk9PTChfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpICpOQU1FRU5V TVBST0NXKShMUFdTVFIsTFBBUkFNKTsNCnR5cGVkZWYgTkFNRUVOVU1QUk9DQSBERVNLVE9QRU5V TVBST0NBOw0KdHlwZWRlZiBOQU1FRU5VTVBST0NXIERFU0tUT1BFTlVNUFJPQ1c7DQp0eXBlZGVm IE5BTUVFTlVNUFJPQ0EgV0lOU1RBRU5VTVBST0NBOw0KdHlwZWRlZiBOQU1FRU5VTVBST0NXIFdJ TlNUQUVOVU1QUk9DVzsNCnR5cGVkZWYgdm9pZChfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykp ICpTRU5EQVNZTkNQUk9DKShIV05ELFVJTlQsRFdPUkQsTFJFU1VMVCk7DQp0eXBlZGVmIHN0cnVj dCBISE9PS19fe2ludCBpO30qSEhPT0s7DQp0eXBlZGVmIHN0cnVjdCBIRFdQX197aW50IGk7fSpI RFdQOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnQUNDRUwgew0KICAgICAgICBCWVRFIGZWaXJ0Ow0KICAg ICAgICBXT1JEIGtleTsNCiAgICAgICAgV09SRCBjbWQ7DQp9IEFDQ0VMLCpMUEFDQ0VMOw0KdHlw ZWRlZiBzdHJ1Y3QgdGFnQUNDRVNTVElNRU9VVCB7DQogICAgICAgIFVJTlQgY2JTaXplOw0KICAg ICAgICBEV09SRCBkd0ZsYWdzOw0KICAgICAgICBEV09SRCBpVGltZU91dE1TZWM7DQp9IEFDQ0VT U1RJTUVPVVQ7DQp0eXBlZGVmIHN0cnVjdCB0YWdBTklNQVRJT05JTkZPIHsNCiAgICAgICAgVUlO VCBjYlNpemU7DQogICAgICAgIGludCBpTWluQW5pbWF0ZTsNCn0gQU5JTUFUSU9OSU5GTywqTFBB TklNQVRJT05JTkZPOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnQ1JFQVRFU1RSVUNUIHsNCiAgICAgICAg TFBWT0lEIGxwQ3JlYXRlUGFyYW1zOw0KICAgICAgICBISU5TVEFOQ0UgaEluc3RhbmNlOw0KICAg ICAgICBITUVOVSBoTWVudTsNCiAgICAgICAgSFdORCBod25kUGFyZW50Ow0KICAgICAgICBpbnQg Y3k7DQogICAgICAgIGludCBjeDsNCiAgICAgICAgaW50IHk7DQogICAgICAgIGludCB4Ow0KICAg ICAgICBMT05HIHN0eWxlOw0KICAgICAgICBMUENUU1RSIGxwc3pOYW1lOw0KICAgICAgICBMUENU U1RSIGxwc3pDbGFzczsNCiAgICAgICAgRFdPUkQgZHdFeFN0eWxlOw0KfSBDUkVBVEVTVFJVQ1Qs KkxQQ1JFQVRFU1RSVUNUOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnQ0JUX0NSRUFURVdORCB7DQogICAg ICAgIExQQ1JFQVRFU1RSVUNUIGxwY3M7DQogICAgICAgIEhXTkQgaHduZEluc2VydEFmdGVyOw0K fSBDQlRfQ1JFQVRFV05EOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnQ0JUQUNUSVZBVEVTVFJVQ1Qgew0K ICAgICAgICBCT09MIGZNb3VzZTsNCiAgICAgICAgSFdORCBoV25kQWN0aXZlOw0KfSBDQlRBQ1RJ VkFURVNUUlVDVCwqTFBDQlRBQ1RJVkFURVNUUlVDVDsNCnR5cGVkZWYgc3RydWN0IHRhZ0NMSUVO VENSRUFURVNUUlVDVCB7DQogICAgICAgIEhBTkRMRSBoV2luZG93TWVudTsNCiAgICAgICAgVUlO VCBpZEZpcnN0Q2hpbGQ7DQp9IENMSUVOVENSRUFURVNUUlVDVCwqTFBDTElFTlRDUkVBVEVTVFJV Q1Q7DQp0eXBlZGVmIHN0cnVjdCB0YWdDT01QQVJFSVRFTVNUUlVDVCB7DQogICAgICAgIFVJTlQg Q3RsVHlwZTsNCiAgICAgICAgVUlOVCBDdGxJRDsNCiAgICAgICAgSFdORCBod25kSXRlbTsNCiAg ICAgICAgVUlOVCBpdGVtSUQxOw0KICAgICAgICBEV09SRCBpdGVtRGF0YTE7DQogICAgICAgIFVJ TlQgaXRlbUlEMjsNCiAgICAgICAgRFdPUkQgaXRlbURhdGEyOw0KICAgICAgICBEV09SRCBkd0xv Y2FsZUlkOw0KfSBDT01QQVJFSVRFTVNUUlVDVCwqTFBDT01QQVJFSVRFTVNUUlVDVDsNCnR5cGVk ZWYgc3RydWN0IHRhZ0NPUFlEQVRBU1RSVUNUIHsNCiAgICAgICAgRFdPUkQgZHdEYXRhOw0KICAg ICAgICBEV09SRCBjYkRhdGE7DQogICAgICAgIFBWT0lEIGxwRGF0YTsNCn0gQ09QWURBVEFTVFJV Q1QsKlBDT1BZREFUQVNUUlVDVDsNCnR5cGVkZWYgc3RydWN0IHRhZ0NVUlNPUlNIQVBFIHsNCiAg ICAgICAgaW50IHhIb3RTcG90Ow0KICAgICAgICBpbnQgeUhvdFNwb3Q7DQogICAgICAgIGludCBj eDsNCiAgICAgICAgaW50IGN5Ow0KICAgICAgICBpbnQgY2JXaWR0aDsNCiAgICBCWVRFIFBsYW5l czsNCiAgICBCWVRFIEJpdHNQaXhlbDsNCn0gQ1VSU09SU0hBUEUsKkxQQ1VSU09SU0hBUEU7DQp0 eXBlZGVmIHN0cnVjdCB0YWdDV1BSRVRTVFJVQ1Qgew0KICAgICAgICBMUkVTVUxUIGxSZXN1bHQ7 DQogICAgICAgIExQQVJBTSBsUGFyYW07DQogICAgICAgIFdQQVJBTSB3UGFyYW07DQogICAgICAg IERXT1JEIG1lc3NhZ2U7DQogICAgICAgIEhXTkQgaHduZDsNCn0gQ1dQUkVUU1RSVUNUOw0KdHlw ZWRlZiBzdHJ1Y3QgdGFnQ1dQU1RSVUNUIHsNCiAgICAgICAgTFBBUkFNIGxQYXJhbTsNCiAgICAg ICAgV1BBUkFNIHdQYXJhbTsNCiAgICAgICAgVUlOVCBtZXNzYWdlOw0KICAgICAgICBIV05EIGh3 bmQ7DQp9IENXUFNUUlVDVCwqUENXUFNUUlVDVDsNCnR5cGVkZWYgc3RydWN0IHRhZ0RFQlVHSE9P S0lORk8gew0KICAgICAgICBEV09SRCBpZFRocmVhZDsNCiAgICAgICAgRFdPUkQgaWRUaHJlYWRJ bnN0YWxsZXI7DQogICAgICAgIExQQVJBTSBsUGFyYW07DQogICAgICAgIFdQQVJBTSB3UGFyYW07 DQogICAgICAgIGludCBjb2RlOw0KfSBERUJVR0hPT0tJTkZPLCpQREVCVUdIT09LSU5GTywqTFBE RUJVR0hPT0tJTkZPOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnREVMRVRFSVRFTVNUUlVDVCB7DQogICAg ICAgIFVJTlQgQ3RsVHlwZTsNCiAgICAgICAgVUlOVCBDdGxJRDsNCiAgICAgICAgVUlOVCBpdGVt SUQ7DQogICAgICAgIEhXTkQgaHduZEl0ZW07DQogICAgICAgIFVJTlQgaXRlbURhdGE7DQp9IERF TEVURUlURU1TVFJVQ1QsKlBERUxFVEVJVEVNU1RSVUNULCpMUERFTEVURUlURU1TVFJVQ1Q7DQoj cHJhZ21hIHBhY2socHVzaCwyKQ0KdHlwZWRlZiBzdHJ1Y3Qgew0KICAgICAgICBEV09SRCBzdHls ZTsNCiAgICAgICAgRFdPUkQgZHdFeHRlbmRlZFN0eWxlOw0KICAgICAgICBzaG9ydCB4Ow0KICAg ICAgICBzaG9ydCB5Ow0KICAgICAgICBzaG9ydCBjeDsNCiAgICAgICAgc2hvcnQgY3k7DQogICAg ICAgIFdPUkQgaWQ7DQp9IERMR0lURU1URU1QTEFURSwqTFBETEdJVEVNVEVNUExBVEU7DQp0eXBl ZGVmIHN0cnVjdCB7DQogICAgICAgIERXT1JEIHN0eWxlOw0KICAgICAgICBEV09SRCBkd0V4dGVu ZGVkU3R5bGU7DQogICAgICAgIFdPUkQgY2RpdDsNCiAgICAgICAgc2hvcnQgeDsNCiAgICAgICAg c2hvcnQgeTsNCiAgICAgICAgc2hvcnQgY3g7DQogICAgICAgIHNob3J0IGN5Ow0KfSBETEdURU1Q TEFURSwqTFBETEdURU1QTEFURTsNCnR5cGVkZWYgY29uc3QgRExHVEVNUExBVEUgKkxQQ0RMR1RF TVBMQVRFOw0KI3ByYWdtYSBwYWNrKHBvcCkNCnR5cGVkZWYgc3RydWN0IHRhZ0RSQVdJVEVNU1RS VUNUIHsNCiAgICAgICAgVUlOVCBDdGxUeXBlOw0KICAgICAgICBVSU5UIEN0bElEOw0KICAgICAg ICBVSU5UIGl0ZW1JRDsNCiAgICAgICAgVUlOVCBpdGVtQWN0aW9uOw0KICAgICAgICBVSU5UIGl0 ZW1TdGF0ZTsNCiAgICAgICAgSFdORCBod25kSXRlbTsNCiAgICAgICAgSERDIGhEQzsNCiAgICAg ICAgUkVDVCByY0l0ZW07DQogICAgICAgIERXT1JEIGl0ZW1EYXRhOw0KfSBEUkFXSVRFTVNUUlVD VCwqTFBEUkFXSVRFTVNUUlVDVCwqUERSQVdJVEVNU1RSVUNUOw0KdHlwZWRlZiBzdHJ1Y3Qgew0K ICAgICAgICBVSU5UIGNiU2l6ZTsNCiAgICAgICAgaW50IGlUYWJMZW5ndGg7DQogICAgICAgIGlu dCBpTGVmdE1hcmdpbjsNCiAgICAgICAgaW50IGlSaWdodE1hcmdpbjsNCiAgICAgICAgVUlOVCB1 aUxlbmd0aERyYXduOw0KfSBEUkFXVEVYVFBBUkFNUywqTFBEUkFXVEVYVFBBUkFNUzsNCnR5cGVk ZWYgc3RydWN0IHRhZ1BBSU5UU1RSVUNUIHsNCiAgICAgICAgSERDIGhkYzsNCiAgICAgICAgQk9P TCBmRXJhc2U7DQogICAgICAgIFJFQ1QgcmNQYWludDsNCiAgICAgICAgQk9PTCBmUmVzdG9yZTsN CiAgICAgICAgQk9PTCBmSW5jVXBkYXRlOw0KICAgICAgICBCWVRFIHJnYlJlc2VydmVkWzMyXTsN Cn0gUEFJTlRTVFJVQ1QsKkxQUEFJTlRTVFJVQ1Q7DQp0eXBlZGVmIHN0cnVjdCB0YWdNU0cgew0K ICAgICAgICBIV05EIGh3bmQ7DQogICAgICAgIFVJTlQgbWVzc2FnZTsNCiAgICAgICAgV1BBUkFN IHdQYXJhbTsNCiAgICAgICAgTFBBUkFNIGxQYXJhbTsNCiAgICAgICAgRFdPUkQgdGltZTsNCiAg ICAgICAgUE9JTlQgcHQ7DQp9IE1TRywqTFBNU0csKlBNU0c7DQp0eXBlZGVmIHN0cnVjdCBfSUNP TklORk8gew0KICAgICAgICBCT09MIGZJY29uOw0KICAgICAgICBEV09SRCB4SG90c3BvdDsNCiAg ICAgICAgRFdPUkQgeUhvdHNwb3Q7DQogICAgICAgIEhCSVRNQVAgaGJtTWFzazsNCiAgICAgICAg SEJJVE1BUCBoYm1Db2xvcjsNCn0gSUNPTklORk8sKlBJQ09OSU5GTzsNCnR5cGVkZWYgc3RydWN0 IHRhZ05NSERSIHsNCiAgICAgICAgSFdORCBod25kRnJvbTsNCiAgICAgICAgVUlOVCBpZEZyb207 DQogICAgICAgIFVJTlQgY29kZTsNCn0gTk1IRFIsKkxQTk1IRFI7DQp0eXBlZGVmIHN0cnVjdCBf V05EQ0xBU1NBIHsNCiAgICAgICAgVUlOVCBzdHlsZTsNCiAgICAgICAgV05EUFJPQyBscGZuV25k UHJvYzsNCiAgICAgICAgaW50IGNiQ2xzRXh0cmE7DQogICAgICAgIGludCBjYlduZEV4dHJhOw0K ICAgICAgICBIQU5ETEUgaEluc3RhbmNlOw0KICAgICAgICBISUNPTiBoSWNvbjsNCiAgICAgICAg SENVUlNPUiBoQ3Vyc29yOw0KICAgICAgICBIQlJVU0ggaGJyQmFja2dyb3VuZDsNCiAgICAgICAg TFBDU1RSIGxwc3pNZW51TmFtZTsNCiAgICAgICAgTFBDU1RSIGxwc3pDbGFzc05hbWU7DQp9IFdO RENMQVNTQSwqTFBXTkRDTEFTU0EsKlBXTkRDTEFTU0E7DQp0eXBlZGVmIHN0cnVjdCBfV05EQ0xB U1NXIHsNCiAgICAgICAgVUlOVCBzdHlsZTsNCiAgICAgICAgV05EUFJPQyBscGZuV25kUHJvYzsN CiAgICAgICAgaW50IGNiQ2xzRXh0cmE7DQogICAgICAgIGludCBjYlduZEV4dHJhOw0KICAgICAg ICBIQU5ETEUgaEluc3RhbmNlOw0KICAgICAgICBISUNPTiBoSWNvbjsNCiAgICAgICAgSENVUlNP UiBoQ3Vyc29yOw0KICAgICAgICBIQlJVU0ggaGJyQmFja2dyb3VuZDsNCiAgICAgICAgTFBDV1NU UiBscHN6TWVudU5hbWU7DQogICAgICAgIExQQ1dTVFIgbHBzekNsYXNzTmFtZTsNCn0gV05EQ0xB U1NXLCpMUFdORENMQVNTVywqUFdORENMQVNTVzsNCnR5cGVkZWYgc3RydWN0IF9XTkRDTEFTU0VY QSB7DQogICAgICAgIFVJTlQgY2JTaXplOw0KICAgICAgICBVSU5UIHN0eWxlOw0KICAgICAgICBX TkRQUk9DIGxwZm5XbmRQcm9jOw0KICAgICAgICBpbnQgY2JDbHNFeHRyYTsNCiAgICAgICAgaW50 IGNiV25kRXh0cmE7DQogICAgICAgIEhBTkRMRSBoSW5zdGFuY2U7DQogICAgICAgIEhJQ09OIGhJ Y29uOw0KICAgICAgICBIQ1VSU09SIGhDdXJzb3I7DQogICAgICAgIEhCUlVTSCBoYnJCYWNrZ3Jv dW5kOw0KICAgICAgICBMUENTVFIgbHBzek1lbnVOYW1lOw0KICAgICAgICBMUENTVFIgbHBzekNs YXNzTmFtZTsNCiAgICAgICAgSElDT04gaEljb25TbTsNCn0gV05EQ0xBU1NFWEEsKkxQV05EQ0xB U1NFWEEsKlBXTkRDTEFTU0VYQTsNCnR5cGVkZWYgc3RydWN0IF9XTkRDTEFTU0VYVyB7DQogICAg ICAgIFVJTlQgY2JTaXplOw0KICAgICAgICBVSU5UIHN0eWxlOw0KICAgICAgICBXTkRQUk9DIGxw Zm5XbmRQcm9jOw0KICAgICAgICBpbnQgY2JDbHNFeHRyYTsNCiAgICAgICAgaW50IGNiV25kRXh0 cmE7DQogICAgICAgIEhBTkRMRSBoSW5zdGFuY2U7DQogICAgICAgIEhJQ09OIGhJY29uOw0KICAg ICAgICBIQ1VSU09SIGhDdXJzb3I7DQogICAgICAgIEhCUlVTSCBoYnJCYWNrZ3JvdW5kOw0KICAg ICAgICBMUENXU1RSIGxwc3pNZW51TmFtZTsNCiAgICAgICAgTFBDV1NUUiBscHN6Q2xhc3NOYW1l Ow0KICAgICAgICBISUNPTiBoSWNvblNtOw0KfSBXTkRDTEFTU0VYVywqTFBXTkRDTEFTU0VYVywq UFdORENMQVNTRVhXOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnTUVOVUlURU1JTkZPQSB7DQogICAgICAg IFVJTlQgY2JTaXplOw0KICAgICAgICBVSU5UIGZNYXNrOw0KICAgICAgICBVSU5UIGZUeXBlOw0K ICAgICAgICBVSU5UIGZTdGF0ZTsNCiAgICAgICAgVUlOVCB3SUQ7DQogICAgICAgIEhNRU5VIGhT dWJNZW51Ow0KICAgICAgICBIQklUTUFQIGhibXBDaGVja2VkOw0KICAgICAgICBIQklUTUFQIGhi bXBVbmNoZWNrZWQ7DQogICAgICAgIERXT1JEIGR3SXRlbURhdGE7DQogICAgICAgIExQU1RSIGR3 VHlwZURhdGE7DQogICAgICAgIFVJTlQgY2NoOw0KDQoNCg0KfSBNRU5VSVRFTUlORk9BLCpMUE1F TlVJVEVNSU5GT0E7DQp0eXBlZGVmIGNvbnN0IE1FTlVJVEVNSU5GT0EgKkxQQ01FTlVJVEVNSU5G T0E7DQp0eXBlZGVmIHN0cnVjdCB0YWdNRU5VSVRFTUlORk9XIHsNCiAgICAgICAgVUlOVCBjYlNp emU7DQogICAgICAgIFVJTlQgZk1hc2s7DQogICAgICAgIFVJTlQgZlR5cGU7DQogICAgICAgIFVJ TlQgZlN0YXRlOw0KICAgICAgICBVSU5UIHdJRDsNCiAgICAgICAgSE1FTlUgaFN1Yk1lbnU7DQog ICAgICAgIEhCSVRNQVAgaGJtcENoZWNrZWQ7DQogICAgICAgIEhCSVRNQVAgaGJtcFVuY2hlY2tl ZDsNCiAgICAgICAgRFdPUkQgZHdJdGVtRGF0YTsNCiAgICAgICAgTFBXU1RSIGR3VHlwZURhdGE7 DQogICAgICAgIFVJTlQgY2NoOw0KDQoNCg0KfSBNRU5VSVRFTUlORk9XLCpMUE1FTlVJVEVNSU5G T1c7DQp0eXBlZGVmIGNvbnN0IE1FTlVJVEVNSU5GT1cgKkxQQ01FTlVJVEVNSU5GT1c7DQp0eXBl ZGVmIHN0cnVjdCB0YWdTQ1JPTExJTkZPIHsNCiAgICAgICAgVUlOVCBjYlNpemU7DQogICAgICAg IFVJTlQgZk1hc2s7DQogICAgICAgIGludCBuTWluOw0KICAgICAgICBpbnQgbk1heDsNCiAgICAg ICAgVUlOVCBuUGFnZTsNCiAgICAgICAgaW50IG5Qb3M7DQogICAgICAgIGludCBuVHJhY2tQb3M7 DQp9IFNDUk9MTElORk8sKkxQU0NST0xMSU5GTzsNCnR5cGVkZWYgY29uc3QgU0NST0xMSU5GTyAq TFBDU0NST0xMSU5GTzsNCnR5cGVkZWYgc3RydWN0IF9XSU5ET1dQTEFDRU1FTlQgew0KICAgICAg ICBVSU5UIGxlbmd0aDsNCiAgICAgICAgVUlOVCBmbGFnczsNCiAgICAgICAgVUlOVCBzaG93Q21k Ow0KICAgICAgICBQT0lOVCBwdE1pblBvc2l0aW9uOw0KICAgICAgICBQT0lOVCBwdE1heFBvc2l0 aW9uOw0KICAgICAgICBSRUNUIHJjTm9ybWFsUG9zaXRpb247DQp9IFdJTkRPV1BMQUNFTUVOVCwq TFBXSU5ET1dQTEFDRU1FTlQsKlBXSU5ET1dQTEFDRU1FTlQ7DQp0eXBlZGVmIHN0cnVjdCB7DQog ICAgICAgIFdPUkQgdmVyc2lvbk51bWJlcjsNCiAgICAgICAgV09SRCBvZmZzZXQ7DQp9IE1FTlVJ VEVNVEVNUExBVEVIRUFERVI7DQp0eXBlZGVmIHN0cnVjdCB7DQogICAgICAgIFdPUkQgbXRPcHRp b247DQogICAgICAgIFdPUkQgbXRJRDsNCiAgICAgICAgV0NIQVIgbXRTdHJpbmdbMV07DQp9IE1F TlVJVEVNVEVNUExBVEU7DQp0eXBlZGVmIHZvaWQgTUVOVVRFTVBMQVRFLE1FTlVURU1QTEFURUEs TUVOVVRFTVBMQVRFVywqTFBNRU5VVEVNUExBVEVBLCpMUE1FTlVURU1QTEFURVcsKkxQTUVOVVRF TVBMQVRFOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnSEVMUElORk8gew0KICAgICAgICBVSU5UIGNiU2l6 ZTsNCiAgICAgICAgaW50IGlDb250ZXh0VHlwZTsNCiAgICAgICAgaW50IGlDdHJsSWQ7DQogICAg ICAgIEhBTkRMRSBoSXRlbUhhbmRsZTsNCiAgICAgICAgRFdPUkQgZHdDb250ZXh0SWQ7DQogICAg ICAgIFBPSU5UIE1vdXNlUG9zOw0KfSBIRUxQSU5GTywqTFBIRUxQSU5GTzsNCnR5cGVkZWYgdm9p ZChfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpICpNU0dCT1hDQUxMQkFDSykoTFBIRUxQSU5G Tyk7DQp0eXBlZGVmIHN0cnVjdCB7DQogICAgICAgIFVJTlQgY2JTaXplOw0KICAgICAgICBIV05E IGh3bmRPd25lcjsNCiAgICAgICAgSElOU1RBTkNFIGhJbnN0YW5jZTsNCiAgICAgICAgTFBDU1RS IGxwc3pUZXh0Ow0KICAgICAgICBMUENTVFIgbHBzekNhcHRpb247DQogICAgICAgIERXT1JEIGR3 U3R5bGU7DQogICAgICAgIExQQ1NUUiBscHN6SWNvbjsNCiAgICAgICAgRFdPUkQgZHdDb250ZXh0 SGVscElkOw0KICAgICAgICBNU0dCT1hDQUxMQkFDSyBscGZuTXNnQm94Q2FsbGJhY2s7DQogICAg ICAgIERXT1JEIGR3TGFuZ3VhZ2VJZDsNCn0gTVNHQk9YUEFSQU1TQSwqUE1TR0JPWFBBUkFNU0Es KkxQTVNHQk9YUEFSQU1TQTsNCnR5cGVkZWYgc3RydWN0IHsNCiAgICAgICAgVUlOVCBjYlNpemU7 DQogICAgICAgIEhXTkQgaHduZE93bmVyOw0KICAgICAgICBISU5TVEFOQ0UgaEluc3RhbmNlOw0K ICAgICAgICBMUENXU1RSIGxwc3pUZXh0Ow0KICAgICAgICBMUENXU1RSIGxwc3pDYXB0aW9uOw0K ICAgICAgICBEV09SRCBkd1N0eWxlOw0KICAgICAgICBMUENXU1RSIGxwc3pJY29uOw0KICAgICAg ICBEV09SRCBkd0NvbnRleHRIZWxwSWQ7DQogICAgICAgIE1TR0JPWENBTExCQUNLIGxwZm5Nc2dC b3hDYWxsYmFjazsNCiAgICAgICAgRFdPUkQgZHdMYW5ndWFnZUlkOw0KfSBNU0dCT1hQQVJBTVNX LCpQTVNHQk9YUEFSQU1TVywqTFBNU0dCT1hQQVJBTVNXOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnVVNF Uk9CSkVDVEZMQUdTIHsNCiAgICAgICAgQk9PTCBmSW5oZXJpdDsNCiAgICAgICAgQk9PTCBmUmVz ZXJ2ZWQ7DQogICAgICAgIERXT1JEIGR3RmxhZ3M7DQp9IFVTRVJPQkpFQ1RGTEFHUzsNCnR5cGVk ZWYgc3RydWN0IHRhZ0ZJTFRFUktFWVMgew0KICAgICAgICBVSU5UIGNiU2l6ZTsNCiAgICAgICAg RFdPUkQgZHdGbGFnczsNCiAgICAgICAgRFdPUkQgaVdhaXRNU2VjOw0KICAgICAgICBEV09SRCBp RGVsYXlNU2VjOw0KICAgICAgICBEV09SRCBpUmVwZWF0TVNlYzsNCiAgICAgICAgRFdPUkQgaUJv dW5jZU1TZWM7DQp9IEZJTFRFUktFWVM7DQp0eXBlZGVmIHN0cnVjdCB0YWdISUdIQ09OVFJBU1RB IHsNCiAgICAgICAgVUlOVCBjYlNpemU7DQogICAgICAgIERXT1JEIGR3RmxhZ3M7DQogICAgICAg IExQU1RSIGxwc3pEZWZhdWx0U2NoZW1lOw0KfSBISUdIQ09OVFJBU1RBLCpMUEhJR0hDT05UUkFT VEE7DQp0eXBlZGVmIHN0cnVjdCB0YWdISUdIQ09OVFJBU1RXIHsNCiAgICAgICAgVUlOVCBjYlNp emU7DQogICAgICAgIERXT1JEIGR3RmxhZ3M7DQogICAgICAgIExQV1NUUiBscHN6RGVmYXVsdFNj aGVtZTsNCn0gSElHSENPTlRSQVNUVywqTFBISUdIQ09OVFJBU1RXOw0KdHlwZWRlZiBzdHJ1Y3Qg dGFnSUNPTk1FVFJJQ1NBIHsNCiAgICAgICAgVUlOVCBjYlNpemU7DQogICAgICAgIGludCBpSG9y elNwYWNpbmc7DQogICAgICAgIGludCBpVmVydFNwYWNpbmc7DQogICAgICAgIGludCBpVGl0bGVX cmFwOw0KICAgICAgICBMT0dGT05UQSBsZkZvbnQ7DQp9IElDT05NRVRSSUNTQSwqTFBJQ09OTUVU UklDU0E7DQp0eXBlZGVmIHN0cnVjdCB0YWdJQ09OTUVUUklDU1cgew0KICAgICAgICBVSU5UIGNi U2l6ZTsNCiAgICAgICAgaW50IGlIb3J6U3BhY2luZzsNCiAgICAgICAgaW50IGlWZXJ0U3BhY2lu ZzsNCiAgICAgICAgaW50IGlUaXRsZVdyYXA7DQogICAgICAgIExPR0ZPTlRXIGxmRm9udDsNCn0g SUNPTk1FVFJJQ1NXLCpMUElDT05NRVRSSUNTVzsNCnR5cGVkZWYgc3RydWN0IHRhZ01JTklNSVpF RE1FVFJJQ1Mgew0KICAgICAgICBVSU5UIGNiU2l6ZTsNCiAgICAgICAgaW50IGlXaWR0aDsNCiAg ICAgICAgaW50IGlIb3J6R2FwOw0KICAgICAgICBpbnQgaVZlcnRHYXA7DQogICAgICAgIGludCBp QXJyYW5nZTsNCn0gTUlOSU1JWkVETUVUUklDUywqTFBNSU5JTUlaRURNRVRSSUNTOw0KdHlwZWRl ZiBzdHJ1Y3QgdGFnTU9VU0VLRVlTew0KICAgICAgICBVSU5UIGNiU2l6ZTsNCiAgICAgICAgRFdP UkQgZHdGbGFnczsNCiAgICAgICAgRFdPUkQgaU1heFNwZWVkOw0KICAgICAgICBEV09SRCBpVGlt ZVRvTWF4U3BlZWQ7DQogICAgICAgIERXT1JEIGlDdHJsU3BlZWQ7DQogICAgICAgIERXT1JEIGR3 UmVzZXJ2ZWQxOw0KICAgICAgICBEV09SRCBkd1Jlc2VydmVkMjsNCn0gTU9VU0VLRVlTLCAqTFBN T1VTRUtFWVM7DQp0eXBlZGVmIHN0cnVjdCB0YWdOT05DTElFTlRNRVRSSUNTQSB7DQogICAgICAg IFVJTlQgY2JTaXplOw0KICAgICAgICBpbnQgaUJvcmRlcldpZHRoOw0KICAgICAgICBpbnQgaVNj cm9sbFdpZHRoOw0KICAgICAgICBpbnQgaVNjcm9sbEhlaWdodDsNCiAgICAgICAgaW50IGlDYXB0 aW9uV2lkdGg7DQogICAgICAgIGludCBpQ2FwdGlvbkhlaWdodDsNCiAgICAgICAgTE9HRk9OVEEg bGZDYXB0aW9uRm9udDsNCiAgICAgICAgaW50IGlTbUNhcHRpb25XaWR0aDsNCiAgICAgICAgaW50 IGlTbUNhcHRpb25IZWlnaHQ7DQogICAgICAgIExPR0ZPTlRBIGxmU21DYXB0aW9uRm9udDsNCiAg ICAgICAgaW50IGlNZW51V2lkdGg7DQogICAgICAgIGludCBpTWVudUhlaWdodDsNCiAgICAgICAg TE9HRk9OVEEgbGZNZW51Rm9udDsNCiAgICAgICAgTE9HRk9OVEEgbGZTdGF0dXNGb250Ow0KICAg ICAgICBMT0dGT05UQSBsZk1lc3NhZ2VGb250Ow0KfSBOT05DTElFTlRNRVRSSUNTQSwqTFBOT05D TElFTlRNRVRSSUNTQTsNCnR5cGVkZWYgc3RydWN0IHRhZ05PTkNMSUVOVE1FVFJJQ1NXIHsNCiAg ICAgICAgVUlOVCBjYlNpemU7DQogICAgICAgIGludCBpQm9yZGVyV2lkdGg7DQogICAgICAgIGlu dCBpU2Nyb2xsV2lkdGg7DQogICAgICAgIGludCBpU2Nyb2xsSGVpZ2h0Ow0KICAgICAgICBpbnQg aUNhcHRpb25XaWR0aDsNCiAgICAgICAgaW50IGlDYXB0aW9uSGVpZ2h0Ow0KICAgICAgICBMT0dG T05UVyBsZkNhcHRpb25Gb250Ow0KICAgICAgICBpbnQgaVNtQ2FwdGlvbldpZHRoOw0KICAgICAg ICBpbnQgaVNtQ2FwdGlvbkhlaWdodDsNCiAgICAgICAgTE9HRk9OVFcgbGZTbUNhcHRpb25Gb250 Ow0KICAgICAgICBpbnQgaU1lbnVXaWR0aDsNCiAgICAgICAgaW50IGlNZW51SGVpZ2h0Ow0KICAg ICAgICBMT0dGT05UVyBsZk1lbnVGb250Ow0KICAgICAgICBMT0dGT05UVyBsZlN0YXR1c0ZvbnQ7 DQogICAgICAgIExPR0ZPTlRXIGxmTWVzc2FnZUZvbnQ7DQp9IE5PTkNMSUVOVE1FVFJJQ1NXLCpM UE5PTkNMSUVOVE1FVFJJQ1NXOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnU0VSSUFMS0VZU0Egew0KICAg ICAgICBVSU5UIGNiU2l6ZTsNCiAgICAgICAgRFdPUkQgZHdGbGFnczsNCiAgICAgICAgTFBTVFIg bHBzekFjdGl2ZVBvcnQ7DQogICAgICAgIExQU1RSIGxwc3pQb3J0Ow0KICAgICAgICBVSU5UIGlC YXVkUmF0ZTsNCiAgICAgICAgVUlOVCBpUG9ydFN0YXRlOw0KICAgICAgICBVSU5UIGlBY3RpdmU7 DQp9IFNFUklBTEtFWVNBLCpMUFNFUklBTEtFWVNBOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnU0VSSUFM S0VZU1cgew0KICAgICAgICBVSU5UIGNiU2l6ZTsNCiAgICAgICAgRFdPUkQgZHdGbGFnczsNCiAg ICAgICAgTFBXU1RSIGxwc3pBY3RpdmVQb3J0Ow0KICAgICAgICBMUFdTVFIgbHBzelBvcnQ7DQog ICAgICAgIFVJTlQgaUJhdWRSYXRlOw0KICAgICAgICBVSU5UIGlQb3J0U3RhdGU7DQogICAgICAg IFVJTlQgaUFjdGl2ZTsNCn0gU0VSSUFMS0VZU1csKkxQU0VSSUFMS0VZU1c7DQp0eXBlZGVmIHN0 cnVjdCB0YWdTT1VORFNFTlRSWUEgew0KICAgICAgICBVSU5UIGNiU2l6ZTsNCiAgICAgICAgRFdP UkQgZHdGbGFnczsNCiAgICAgICAgRFdPUkQgaUZTVGV4dEVmZmVjdDsNCiAgICAgICAgRFdPUkQg aUZTVGV4dEVmZmVjdE1TZWM7DQogICAgICAgIERXT1JEIGlGU1RleHRFZmZlY3RDb2xvckJpdHM7 DQogICAgICAgIERXT1JEIGlGU0dyYWZFZmZlY3Q7DQogICAgICAgIERXT1JEIGlGU0dyYWZFZmZl Y3RNU2VjOw0KICAgICAgICBEV09SRCBpRlNHcmFmRWZmZWN0Q29sb3I7DQogICAgICAgIERXT1JE IGlXaW5kb3dzRWZmZWN0Ow0KICAgICAgICBEV09SRCBpV2luZG93c0VmZmVjdE1TZWM7DQogICAg ICAgIExQU1RSIGxwc3pXaW5kb3dzRWZmZWN0RExMOw0KICAgICAgICBEV09SRCBpV2luZG93c0Vm ZmVjdE9yZGluYWw7DQp9IFNPVU5EU0VOVFJZQSwqTFBTT1VORFNFTlRSWUE7DQp0eXBlZGVmIHN0 cnVjdCB0YWdTT1VORFNFTlRSWVcgew0KICAgICAgICBVSU5UIGNiU2l6ZTsNCiAgICAgICAgRFdP UkQgZHdGbGFnczsNCiAgICAgICAgRFdPUkQgaUZTVGV4dEVmZmVjdDsNCiAgICAgICAgRFdPUkQg aUZTVGV4dEVmZmVjdE1TZWM7DQogICAgICAgIERXT1JEIGlGU1RleHRFZmZlY3RDb2xvckJpdHM7 DQogICAgICAgIERXT1JEIGlGU0dyYWZFZmZlY3Q7DQogICAgICAgIERXT1JEIGlGU0dyYWZFZmZl Y3RNU2VjOw0KICAgICAgICBEV09SRCBpRlNHcmFmRWZmZWN0Q29sb3I7DQogICAgICAgIERXT1JE IGlXaW5kb3dzRWZmZWN0Ow0KICAgICAgICBEV09SRCBpV2luZG93c0VmZmVjdE1TZWM7DQogICAg ICAgIExQV1NUUiBscHN6V2luZG93c0VmZmVjdERMTDsNCiAgICAgICAgRFdPUkQgaVdpbmRvd3NF ZmZlY3RPcmRpbmFsOw0KfSBTT1VORFNFTlRSWVcsKkxQU09VTkRTRU5UUllXOw0KdHlwZWRlZiBz dHJ1Y3QgdGFnU1RJQ0tZS0VZUyB7DQogICAgICAgIERXT1JEIGNiU2l6ZTsNCiAgICAgICAgRFdP UkQgZHdGbGFnczsNCn0gU1RJQ0tZS0VZUywqTFBTVElDS1lLRVlTOw0KdHlwZWRlZiBzdHJ1Y3Qg dGFnVE9HR0xFS0VZUyB7DQogICAgICAgIERXT1JEIGNiU2l6ZTsNCiAgICAgICAgRFdPUkQgZHdG bGFnczsNCn0gVE9HR0xFS0VZUzsNCnR5cGVkZWYgc3RydWN0IHRhZ1RSQUNLTU9VU0VFVkVOVCB7 DQogICAgICAgIERXT1JEIGNiU2l6ZTsNCiAgICAgICAgRFdPUkQgZHdGbGFnczsNCiAgICAgICAg SFdORCBod25kVHJhY2s7DQogICAgICAgIERXT1JEIGR3SG92ZXJUaW1lOw0KfSBUUkFDS01PVVNF RVZFTlQsKkxQVFJBQ0tNT1VTRUVWRU5UOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnVFBNUEFSQU1TIHsN CiAgICAgICAgVUlOVCBjYlNpemU7DQogICAgICAgIFJFQ1QgcmNFeGNsdWRlOw0KfSBUUE1QQVJB TVMsKkxQVFBNUEFSQU1TOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnRVZFTlRNU0cgew0KICAgICAgICBV SU5UIG1lc3NhZ2U7DQogICAgICAgIFVJTlQgcGFyYW1MOw0KICAgICAgICBVSU5UIHBhcmFtSDsN CiAgICAgICAgRFdPUkQgdGltZTsNCiAgICAgICAgSFdORCBod25kOw0KfSBFVkVOVE1TRywqUEVW RU5UTVNHTVNHLCpMUEVWRU5UTVNHTVNHLCAqUEVWRU5UTVNHLCAqTFBFVkVOVE1TRzsNCnR5cGVk ZWYgc3RydWN0IF9XSU5ET1dQT1Mgew0KICAgICAgICBIV05EIGh3bmQ7DQogICAgICAgIEhXTkQg aHduZEluc2VydEFmdGVyOw0KICAgICAgICBpbnQgeDsNCiAgICAgICAgaW50IHk7DQogICAgICAg IGludCBjeDsNCiAgICAgICAgaW50IGN5Ow0KICAgICAgICBVSU5UIGZsYWdzOw0KfSBXSU5ET1dQ T1MsKlBXSU5ET1dQT1MsKkxQV0lORE9XUE9TOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnTURJQ1JFQVRF U1RSVUNUQSB7DQogICAgICAgIExQQ1NUUiBzekNsYXNzOw0KICAgICAgICBMUENTVFIgc3pUaXRs ZTsNCiAgICAgICAgSEFORExFIGhPd25lcjsNCiAgICAgICAgaW50IHg7DQogICAgICAgIGludCB5 Ow0KICAgICAgICBpbnQgY3g7DQogICAgICAgIGludCBjeTsNCiAgICAgICAgRFdPUkQgc3R5bGU7 DQogICAgICAgIExQQVJBTSBsUGFyYW07DQp9IE1ESUNSRUFURVNUUlVDVEEsKkxQTURJQ1JFQVRF U1RSVUNUQTsNCnR5cGVkZWYgc3RydWN0IHRhZ01ESUNSRUFURVNUUlVDVFcgew0KICAgICAgICBM UENXU1RSIHN6Q2xhc3M7DQogICAgICAgIExQQ1dTVFIgc3pUaXRsZTsNCiAgICAgICAgSEFORExF IGhPd25lcjsNCiAgICAgICAgaW50IHg7DQogICAgICAgIGludCB5Ow0KICAgICAgICBpbnQgY3g7 DQogICAgICAgIGludCBjeTsNCiAgICAgICAgRFdPUkQgc3R5bGU7DQogICAgICAgIExQQVJBTSBs UGFyYW07DQp9IE1ESUNSRUFURVNUUlVDVFcsKkxQTURJQ1JFQVRFU1RSVUNUVzsNCnR5cGVkZWYg c3RydWN0IHRhZ01JTk1BWElORk8gew0KICAgICAgICBQT0lOVCBwdFJlc2VydmVkOw0KICAgICAg ICBQT0lOVCBwdE1heFNpemU7DQogICAgICAgIFBPSU5UIHB0TWF4UG9zaXRpb247DQogICAgICAg IFBPSU5UIHB0TWluVHJhY2tTaXplOw0KICAgICAgICBQT0lOVCBwdE1heFRyYWNrU2l6ZTsNCn0g TUlOTUFYSU5GTywqUE1JTk1BWElORk8sKkxQTUlOTUFYSU5GTzsNCnR5cGVkZWYgc3RydWN0IHRh Z01ESU5FWFRNRU5VIHsNCiAgICAgICAgSE1FTlUgaG1lbnVJbjsNCiAgICAgICAgSE1FTlUgaG1l bnVOZXh0Ow0KICAgICAgICBIV05EIGh3bmROZXh0Ow0KfSBNRElORVhUTUVOVSwqUE1ESU5FWFRN RU5VLCpMUE1ESU5FWFRNRU5VOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnTUVBU1VSRUlURU1TVFJVQ1Qg ew0KICAgICAgICBVSU5UIEN0bFR5cGU7DQogICAgICAgIFVJTlQgQ3RsSUQ7DQogICAgICAgIFVJ TlQgaXRlbUlEOw0KICAgICAgICBVSU5UIGl0ZW1XaWR0aDsNCiAgICAgICAgVUlOVCBpdGVtSGVp Z2h0Ow0KICAgICAgICBEV09SRCBpdGVtRGF0YTsNCn0gTUVBU1VSRUlURU1TVFJVQ1QsKlBNRUFT VVJFSVRFTVNUUlVDVCwqTFBNRUFTVVJFSVRFTVNUUlVDVDsNCnR5cGVkZWYgc3RydWN0IHRhZ0RS T1BTVFJVQ1Qgew0KICAgICAgICBIV05EIGh3bmRTb3VyY2U7DQogICAgICAgIEhXTkQgaHduZFNp bms7DQogICAgICAgIERXT1JEIHdGbXQ7DQogICAgICAgIERXT1JEIGR3RGF0YTsNCiAgICAgICAg UE9JTlQgcHREcm9wOw0KICAgICAgICBEV09SRCBkd0NvbnRyb2xEYXRhOw0KfSBEUk9QU1RSVUNU LCpQRFJPUFNUUlVDVCwqTFBEUk9QU1RSVUNUOw0KdHlwZWRlZiBEV09SRCBIRUxQUE9MWTsNCnR5 cGVkZWYgc3RydWN0IHRhZ01VTFRJS0VZSEVMUEEgew0KICAgICAgICBEV09SRCBta1NpemU7DQog ICAgICAgIENIQVIgbWtLZXlsaXN0Ow0KICAgICAgICBDSEFSIHN6S2V5cGhyYXNlWzFdOw0KfSBN VUxUSUtFWUhFTFBBLCpQTVVMVElLRVlIRUxQQSwqTFBNVUxUSUtFWUhFTFBBOw0KdHlwZWRlZiBz dHJ1Y3QgdGFnTVVMVElLRVlIRUxQVyB7DQogICAgICAgIERXT1JEIG1rU2l6ZTsNCiAgICAgICAg V0NIQVIgbWtLZXlsaXN0Ow0KICAgICAgICBXQ0hBUiBzektleXBocmFzZVsxXTsNCn0gTVVMVElL RVlIRUxQVywqUE1VTFRJS0VZSEVMUFcsKkxQTVVMVElLRVlIRUxQVzsNCnR5cGVkZWYgc3RydWN0 IHRhZ0hFTFBXSU5JTkZPQSB7DQogICAgICAgIGludCB3U3RydWN0U2l6ZTsNCiAgICAgICAgaW50 IHg7DQogICAgICAgIGludCB5Ow0KICAgICAgICBpbnQgZHg7DQogICAgICAgIGludCBkeTsNCiAg ICAgICAgaW50IHdNYXg7DQogICAgICAgIENIQVIgcmdjaE1lbWJlclsyXTsNCn0gSEVMUFdJTklO Rk9BLCpQSEVMUFdJTklORk9BLCpMUEhFTFBXSU5JTkZPQTsNCnR5cGVkZWYgc3RydWN0IHRhZ0hF TFBXSU5JTkZPVyB7DQogICAgICAgIGludCB3U3RydWN0U2l6ZTsNCiAgICAgICAgaW50IHg7DQog ICAgICAgIGludCB5Ow0KICAgICAgICBpbnQgZHg7DQogICAgICAgIGludCBkeTsNCiAgICAgICAg aW50IHdNYXg7DQogICAgICAgIFdDSEFSIHJnY2hNZW1iZXJbMl07DQp9IEhFTFBXSU5JTkZPVywq UEhFTFBXSU5JTkZPVywqTFBIRUxQV0lOSU5GT1c7DQp0eXBlZGVmIHN0cnVjdCB0YWdTVFlMRVNU UlVDVCB7DQogICAgICAgIERXT1JEIHN0eWxlT2xkOw0KICAgICAgICBEV09SRCBzdHlsZU5ldzsN Cn0gU1RZTEVTVFJVQ1QsKkxQU1RZTEVTVFJVQ1Q7DQojIDI0NDggInQ6L21zeXMvMS4wL21pbmd3 L2luY2x1ZGUvd2ludXNlci5oIiAzDQpIS0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBB Y3RpdmF0ZUtleWJvYXJkTGF5b3V0KEhLTCxVSU5UKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBBZGp1c3RXaW5kb3dSZWN0KExQUkVDVCxEV09SRCxCT09MKTsNCkJPT0wgX19h dHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBBZGp1c3RXaW5kb3dSZWN0RXgoTFBSRUNULERXT1JE LEJPT0wsRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEFueVBvcHVw KHZvaWQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEFwcGVuZE1lbnVBKEhN RU5VLFVJTlQsVUlOVCxMUENTVFIpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykp IEFwcGVuZE1lbnVXKEhNRU5VLFVJTlQsVUlOVCxMUENXU1RSKTsNClVJTlQgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBBcnJhbmdlSWNvbmljV2luZG93cyhIV05EKTsNCkJPT0wgX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBBdHRhY2hUaHJlYWRJbnB1dChEV09SRCxEV09SRCxCT09M KTsNCkhEV1AgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBCZWdpbkRlZmVyV2luZG93UG9z KGludCk7DQpIREMgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBCZWdpblBhaW50KEhXTkQs TFBQQUlOVFNUUlVDVCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQnJpbmdX aW5kb3dUb1RvcChIV05EKTsNCmxvbmcgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBCcm9h ZGNhc3RTeXN0ZW1NZXNzYWdlKERXT1JELExQRFdPUkQsVUlOVCxXUEFSQU0sTFBBUkFNKTsNCkJP T0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBDYWxsTXNnRmlsdGVyKFBNU0csaW50KTsN CkxSRVNVTFQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBDYWxsTmV4dEhvb2tFeChISE9P SyxpbnQsV1BBUkFNLExQQVJBTSk7DQpMUkVTVUxUIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgQ2FsbFdpbmRvd1Byb2NBKFdORFBST0MsSFdORCxVSU5ULFdQQVJBTSxMUEFSQU0pOw0KTFJF U1VMVCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIENhbGxXaW5kb3dQcm9jVyhXTkRQUk9D LEhXTkQsVUlOVCxXUEFSQU0sTFBBUkFNKTsNCldPUkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBDYXNjYWRlV2luZG93cyhIV05ELFVJTlQsTFBDUkVDVCxVSU5ULGNvbnN0IEhXTkQqKTsN CkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBDaGFuZ2VDbGlwYm9hcmRDaGFpbihI V05ELEhXTkQpOw0KTE9ORyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIENoYW5nZURpc3Bs YXlTZXR0aW5nc0EoUERFVk1PREVBLERXT1JEKTsNCkxPTkcgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBDaGFuZ2VEaXNwbGF5U2V0dGluZ3NXKFBERVZNT0RFVyxEV09SRCk7DQpCT09MIF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQ2hhbmdlTWVudUEoSE1FTlUsVUlOVCxMUENTVFIs VUlOVCxVSU5UKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBDaGFuZ2VNZW51 VyhITUVOVSxVSU5ULExQQ1dTVFIsVUlOVCxVSU5UKTsNCkxQU1RSIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgQ2hhckxvd2VyQShMUFNUUik7DQpMUFdTVFIgX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBDaGFyTG93ZXJXKExQV1NUUik7DQpEV09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIENoYXJMb3dlckJ1ZmZBKExQU1RSLERXT1JEKTsNCkRXT1JEIF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgQ2hhckxvd2VyQnVmZlcoTFBXU1RSLERXT1JEKTsNCkxQU1RSIF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQ2hhck5leHRBKExQQ1NUUik7DQpMUFdTVFIgX19h dHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBDaGFyTmV4dFcoTFBDV1NUUik7DQpMUFNUUiBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIENoYXJOZXh0RXhBKFdPUkQsTFBDU1RSLERXT1JEKTsN CkxQV1NUUiBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIENoYXJOZXh0RXhXKFdPUkQsTFBD V1NUUixEV09SRCk7DQpMUFNUUiBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIENoYXJQcmV2 QShMUENTVFIsTFBDU1RSKTsNCkxQV1NUUiBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIENo YXJQcmV2VyhMUENXU1RSLExQQ1dTVFIpOw0KTFBTVFIgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBDaGFyUHJldkV4QShXT1JELExQQ1NUUixMUENTVFIsRFdPUkQpOw0KTFBXU1RSIF9fYXR0 cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQ2hhclByZXZFeFcoV09SRCxMUENXU1RSLExQQ1dTVFIs RFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIENoYXJUb09lbUEoTFBD U1RSLExQU1RSKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBDaGFyVG9PZW1X KExQQ1dTVFIsTFBTVFIpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIENoYXJU b09lbUJ1ZmZBKExQQ1NUUixMUFNUUixEV09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3Rk Y2FsbF9fKSkgQ2hhclRvT2VtQnVmZlcoTFBDV1NUUixMUFNUUixEV09SRCk7DQpMUFNUUiBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIENoYXJVcHBlckEoTFBTVFIpOw0KTFBXU1RSIF9fYXR0 cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQ2hhclVwcGVyVyhMUFdTVFIpOw0KRFdPUkQgX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBDaGFyVXBwZXJCdWZmQShMUFNUUixEV09SRCk7DQpEV09S RCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIENoYXJVcHBlckJ1ZmZXKExQV1NUUixEV09S RCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQ2hlY2tEbGdCdXR0b24oSFdO RCxpbnQsVUlOVCk7DQpEV09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIENoZWNrTWVu dUl0ZW0oSE1FTlUsVUlOVCxVSU5UKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSBDaGVja01lbnVSYWRpb0l0ZW0oSE1FTlUsVUlOVCxVSU5ULFVJTlQsVUlOVCk7DQpCT09MIF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQ2hlY2tSYWRpb0J1dHRvbihIV05ELGludCxpbnQs aW50KTsNCkhXTkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBDaGlsZFdpbmRvd0Zyb21Q b2ludChIV05ELFBPSU5UKTsNCkhXTkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBDaGls ZFdpbmRvd0Zyb21Qb2ludEV4KEhXTkQsUE9JTlQsVUlOVCk7DQpCT09MIF9fYXR0cmlidXRlX18o KF9fc3RkY2FsbF9fKSkgQ2xpZW50VG9TY3JlZW4oSFdORCxMUFBPSU5UKTsNCkJPT0wgX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBDbGlwQ3Vyc29yKExQQ1JFQ1QpOw0KQk9PTCBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIENsb3NlQ2xpcGJvYXJkKHZvaWQpOw0KQk9PTCBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIENsb3NlRGVza3RvcChIREVTSyk7DQpCT09MIF9fYXR0cmli dXRlX18oKF9fc3RkY2FsbF9fKSkgQ2xvc2VXaW5kb3coSFdORCk7DQpCT09MIF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgQ2xvc2VXaW5kb3dTdGF0aW9uKEhXSU5TVEEpOw0KaW50IF9fYXR0 cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQ29weUFjY2VsZXJhdG9yVGFibGVBKEhBQ0NFTCxMUEFD Q0VMLGludCk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBDb3B5QWNjZWxlcmF0 b3JUYWJsZVcoSEFDQ0VMLExQQUNDRUwsaW50KTsNCkhDVVJTT1IgX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBDb3B5Q3Vyc29yKEhDVVJTT1IpOw0KSElDT04gX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBDb3B5SWNvbihISUNPTik7DQpIQU5ETEUgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBDb3B5SW1hZ2UoSEFORExFLFVJTlQsaW50LGludCxVSU5UKTsNCkJPT0wgX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBDb3B5UmVjdChMUFJFQ1QsTFBDUkVDVCk7DQppbnQgX19h dHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBDb3VudENsaXBib2FyZEZvcm1hdHModm9pZCk7DQpI QUNDRUwgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBDcmVhdGVBY2NlbGVyYXRvclRhYmxl QShMUEFDQ0VMLGludCk7DQpIQUNDRUwgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBDcmVh dGVBY2NlbGVyYXRvclRhYmxlVyhMUEFDQ0VMLGludCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgQ3JlYXRlQ2FyZXQoSFdORCxIQklUTUFQLGludCxpbnQpOw0KSENVUlNPUiBf X2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIENyZWF0ZUN1cnNvcihISU5TVEFOQ0UsaW50LGlu dCxpbnQsaW50LFBDVk9JRCxQQ1ZPSUQpOw0KSERFU0sgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBDcmVhdGVEZXNrdG9wQShMUFNUUixMUFNUUixMUERFVk1PREVBLERXT1JELERXT1JELExQ U0VDVVJJVFlfQVRUUklCVVRFUyk7DQpIREVTSyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykp IENyZWF0ZURlc2t0b3BXKExQV1NUUixMUFdTVFIsTFBERVZNT0RFVyxEV09SRCxEV09SRCxMUFNF Q1VSSVRZX0FUVFJJQlVURVMpOw0KDQoNCg0KDQpIV05EIF9fYXR0cmlidXRlX18oKF9fc3RkY2Fs bF9fKSkgQ3JlYXRlRGlhbG9nSW5kaXJlY3RQYXJhbUEoSElOU1RBTkNFLExQQ0RMR1RFTVBMQVRF LEhXTkQsRExHUFJPQyxMUEFSQU0pOw0KSFdORCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykp IENyZWF0ZURpYWxvZ0luZGlyZWN0UGFyYW1XKEhJTlNUQU5DRSxMUENETEdURU1QTEFURSxIV05E LERMR1BST0MsTFBBUkFNKTsNCkhXTkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBDcmVh dGVEaWFsb2dQYXJhbUEoSElOU1RBTkNFLExQQ1NUUixIV05ELERMR1BST0MsTFBBUkFNKTsNCkhX TkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBDcmVhdGVEaWFsb2dQYXJhbVcoSElOU1RB TkNFLExQQ1dTVFIsSFdORCxETEdQUk9DLExQQVJBTSk7DQpISUNPTiBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIENyZWF0ZUljb24oSElOU1RBTkNFLGludCxpbnQsQllURSxCWVRFLGNvbnN0 IEJZVEUqLGNvbnN0IEJZVEUqKTsNCkhJQ09OIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg Q3JlYXRlSWNvbkZyb21SZXNvdXJjZShQQllURSxEV09SRCxCT09MLERXT1JEKTsNCkhJQ09OIF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQ3JlYXRlSWNvbkZyb21SZXNvdXJjZUV4KFBCWVRF LERXT1JELEJPT0wsRFdPUkQsaW50LGludCxVSU5UKTsNCkhJQ09OIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgQ3JlYXRlSWNvbkluZGlyZWN0KFBJQ09OSU5GTyk7DQpIV05EIF9fYXR0cmli dXRlX18oKF9fc3RkY2FsbF9fKSkgQ3JlYXRlTURJV2luZG93QShMUFNUUixMUFNUUixEV09SRCxp bnQsaW50LGludCxpbnQsSFdORCxISU5TVEFOQ0UsTFBBUkFNKTsNCkhXTkQgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBDcmVhdGVNRElXaW5kb3dXKExQV1NUUixMUFdTVFIsRFdPUkQsaW50 LGludCxpbnQsaW50LEhXTkQsSElOU1RBTkNFLExQQVJBTSk7DQpITUVOVSBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIENyZWF0ZU1lbnUodm9pZCk7DQpITUVOVSBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIENyZWF0ZVBvcHVwTWVudSh2b2lkKTsNCg0KDQpIV05EIF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgQ3JlYXRlV2luZG93RXhBKERXT1JELExQQ1NUUixMUENTVFIsRFdP UkQsaW50LGludCxpbnQsaW50LEhXTkQsSE1FTlUsSElOU1RBTkNFLExQVk9JRCk7DQpIV05EIF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQ3JlYXRlV2luZG93RXhXKERXT1JELExQQ1dTVFIs TFBDV1NUUixEV09SRCxpbnQsaW50LGludCxpbnQsSFdORCxITUVOVSxISU5TVEFOQ0UsTFBWT0lE KTsNCkhXSU5TVEEgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBDcmVhdGVXaW5kb3dTdGF0 aW9uQShMUFNUUixEV09SRCxEV09SRCxMUFNFQ1VSSVRZX0FUVFJJQlVURVMpOw0KSFdJTlNUQSBf X2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIENyZWF0ZVdpbmRvd1N0YXRpb25XKExQV1NUUixE V09SRCxEV09SRCxMUFNFQ1VSSVRZX0FUVFJJQlVURVMpOw0KTFJFU1VMVCBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIERlZkRsZ1Byb2NBKEhXTkQsVUlOVCxXUEFSQU0sTFBBUkFNKTsNCkxS RVNVTFQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBEZWZEbGdQcm9jVyhIV05ELFVJTlQs V1BBUkFNLExQQVJBTSk7DQpIRFdQIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRGVmZXJX aW5kb3dQb3MoSERXUCxIV05ELEhXTkQsaW50LGludCxpbnQsaW50LFVJTlQpOw0KTFJFU1VMVCBf X2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIERlZkZyYW1lUHJvY0EoSFdORCxIV05ELFVJTlQs V1BBUkFNLExQQVJBTSk7DQpMUkVTVUxUIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRGVm RnJhbWVQcm9jVyhIV05ELEhXTkQsVUlOVCxXUEFSQU0sTFBBUkFNKTsNCg0KTFJFU1VMVCBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIERlZk1ESUNoaWxkUHJvY0EoSFdORCxVSU5ULFdQQVJB TSxMUEFSQU0pOw0KTFJFU1VMVCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIERlZk1ESUNo aWxkUHJvY1coSFdORCxVSU5ULFdQQVJBTSxMUEFSQU0pOw0KTFJFU1VMVCBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIERlZldpbmRvd1Byb2NBKEhXTkQsVUlOVCxXUEFSQU0sTFBBUkFNKTsN CkxSRVNVTFQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBEZWZXaW5kb3dQcm9jVyhIV05E LFVJTlQsV1BBUkFNLExQQVJBTSk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg RGVsZXRlTWVudShITUVOVSxVSU5ULFVJTlQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNh bGxfXykpIERlc3Ryb3lBY2NlbGVyYXRvclRhYmxlKEhBQ0NFTCk7DQpCT09MIF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgRGVzdHJveUNhcmV0KHZvaWQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIERlc3Ryb3lDdXJzb3IoSENVUlNPUik7DQpCT09MIF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgRGVzdHJveUljb24oSElDT04pOw0KQk9PTCBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIERlc3Ryb3lNZW51KEhNRU5VKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSBEZXN0cm95V2luZG93KEhXTkQpOw0KDQoNCg0KDQppbnQgX19hdHRyaWJ1 dGVfXygoX19zdGRjYWxsX18pKSBEaWFsb2dCb3hJbmRpcmVjdFBhcmFtQShISU5TVEFOQ0UsTFBD RExHVEVNUExBVEUsSFdORCxETEdQUk9DLExQQVJBTSk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBEaWFsb2dCb3hJbmRpcmVjdFBhcmFtVyhISU5TVEFOQ0UsTFBDRExHVEVNUExB VEUsSFdORCxETEdQUk9DLExQQVJBTSk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSBEaWFsb2dCb3hQYXJhbUEoSElOU1RBTkNFLExQQ1NUUixIV05ELERMR1BST0MsTFBBUkFNKTsN CmludCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIERpYWxvZ0JveFBhcmFtVyhISU5TVEFO Q0UsTFBDV1NUUixIV05ELERMR1BST0MsTFBBUkFNKTsNCkxPTkcgX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBEaXNwYXRjaE1lc3NhZ2VBKGNvbnN0IE1TRyopOw0KTE9ORyBfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpIERpc3BhdGNoTWVzc2FnZVcoY29uc3QgTVNHKik7DQppbnQgX19h dHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBEbGdEaXJMaXN0QShIV05ELExQU1RSLGludCxpbnQs VUlOVCk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBEbGdEaXJMaXN0VyhIV05E LExQV1NUUixpbnQsaW50LFVJTlQpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg RGxnRGlyTGlzdENvbWJvQm94QShIV05ELExQU1RSLGludCxpbnQsVUlOVCk7DQppbnQgX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBEbGdEaXJMaXN0Q29tYm9Cb3hXKEhXTkQsTFBXU1RSLGlu dCxpbnQsVUlOVCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRGxnRGlyU2Vs ZWN0Q29tYm9Cb3hFeEEoSFdORCxMUFNUUixpbnQsaW50KTsNCkJPT0wgX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSBEbGdEaXJTZWxlY3RDb21ib0JveEV4VyhIV05ELExQV1NUUixpbnQsaW50 KTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBEbGdEaXJTZWxlY3RFeEEoSFdO RCxMUFNUUixpbnQsaW50KTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBEbGdE aXJTZWxlY3RFeFcoSFdORCxMUFdTVFIsaW50LGludCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgRHJhZ0RldGVjdChIV05ELFBPSU5UKTsNCkRXT1JEIF9fYXR0cmlidXRlX18o KF9fc3RkY2FsbF9fKSkgRHJhZ09iamVjdChIV05ELEhXTkQsVUlOVCxEV09SRCxIQ1VSU09SKTsN CkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBEcmF3QW5pbWF0ZWRSZWN0cyhIV05E LGludCxMUENSRUNULExQQ1JFQ1QpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykp IERyYXdDYXB0aW9uKEhXTkQsSERDLExQQ1JFQ1QsVUlOVCk7DQpCT09MIF9fYXR0cmlidXRlX18o KF9fc3RkY2FsbF9fKSkgRHJhd0VkZ2UoSERDLExQUkVDVCxVSU5ULFVJTlQpOw0KQk9PTCBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIERyYXdGb2N1c1JlY3QoSERDLExQQ1JFQ1QpOw0KQk9P TCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIERyYXdGcmFtZUNvbnRyb2woSERDLExQUkVD VCxVSU5ULFVJTlQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIERyYXdJY29u KEhEQyxpbnQsaW50LEhJQ09OKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBE cmF3SWNvbkV4KEhEQyxpbnQsaW50LEhJQ09OLGludCxpbnQsVUlOVCxIQlJVU0gsVUlOVCk7DQpC T09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRHJhd01lbnVCYXIoSFdORCk7DQpCT09M IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRHJhd1N0YXRlQShIREMsSEJSVVNILERSQVdT VEFURVBST0MsTFBBUkFNLFdQQVJBTSxpbnQsaW50LGludCxpbnQsVUlOVCk7DQpCT09MIF9fYXR0 cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRHJhd1N0YXRlVyhIREMsSEJSVVNILERSQVdTVEFURVBS T0MsTFBBUkFNLFdQQVJBTSxpbnQsaW50LGludCxpbnQsVUlOVCk7DQppbnQgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBEcmF3VGV4dEEoSERDLExQQ1NUUixpbnQsTFBSRUNULFVJTlQpOw0K aW50IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRHJhd1RleHRXKEhEQyxMUENXU1RSLGlu dCxMUFJFQ1QsVUlOVCk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBEcmF3VGV4 dEV4QShIREMsTFBTVFIsaW50LExQUkVDVCxVSU5ULExQRFJBV1RFWFRQQVJBTVMpOw0KaW50IF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRHJhd1RleHRFeFcoSERDLExQV1NUUixpbnQsTFBS RUNULFVJTlQsTFBEUkFXVEVYVFBBUkFNUyk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2Fs bF9fKSkgRW1wdHlDbGlwYm9hcmQodm9pZCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2Fs bF9fKSkgRW5hYmxlTWVudUl0ZW0oSE1FTlUsVUlOVCxVSU5UKTsNCkJPT0wgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBFbmFibGVTY3JvbGxCYXIoSFdORCxVSU5ULFVJTlQpOw0KQk9PTCBf X2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEVuYWJsZVdpbmRvdyhIV05ELEJPT0wpOw0KQk9P TCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEVuZERlZmVyV2luZG93UG9zKEhEV1ApOw0K Qk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEVuZERpYWxvZyhIV05ELGludCk7DQpC T09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRW5kUGFpbnQoSFdORCxjb25zdCBQQUlO VFNUUlVDVCopOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEVudW1DaGlsZFdp bmRvd3MoSFdORCxFTlVNV0lORE9XU1BST0MsTFBBUkFNKTsNClVJTlQgX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSBFbnVtQ2xpcGJvYXJkRm9ybWF0cyhVSU5UKTsNCkJPT0wgX19hdHRyaWJ1 dGVfXygoX19zdGRjYWxsX18pKSBFbnVtRGVza3RvcHNBKEhXSU5TVEEsREVTS1RPUEVOVU1QUk9D QSxMUEFSQU0pOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEVudW1EZXNrdG9w c1coSFdJTlNUQSxERVNLVE9QRU5VTVBST0NXLExQQVJBTSk7DQpCT09MIF9fYXR0cmlidXRlX18o KF9fc3RkY2FsbF9fKSkgRW51bURlc2t0b3BXaW5kb3dzKEhERVNLLEVOVU1XSU5ET1dTUFJPQyxM UEFSQU0pOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEVudW1EaXNwbGF5U2V0 dGluZ3NBKExQQ1NUUixEV09SRCxQREVWTU9ERUEpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIEVudW1EaXNwbGF5U2V0dGluZ3NXKExQQ1dTVFIsRFdPUkQsUERFVk1PREVXKTsN CmludCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEVudW1Qcm9wc0EoSFdORCxQUk9QRU5V TVBST0NBKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEVudW1Qcm9wc1coSFdO RCxQUk9QRU5VTVBST0NXKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEVudW1Q cm9wc0V4QShIV05ELFBST1BFTlVNUFJPQ0VYQSxMUEFSQU0pOw0KaW50IF9fYXR0cmlidXRlX18o KF9fc3RkY2FsbF9fKSkgRW51bVByb3BzRXhXKEhXTkQsUFJPUEVOVU1QUk9DRVhXLExQQVJBTSk7 DQoNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBFbnVtVGhyZWFkV2luZG93cyhE V09SRCxXTkRFTlVNUFJPQyxMUEFSQU0pOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxf XykpIEVudW1XaW5kb3dzKFdOREVOVU1QUk9DLExQQVJBTSk7DQpCT09MIF9fYXR0cmlidXRlX18o KF9fc3RkY2FsbF9fKSkgRW51bVdpbmRvd1N0YXRpb25zQShXSU5TVEFFTlVNUFJPQ0EsTFBBUkFN KTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBFbnVtV2luZG93U3RhdGlvbnNX KFdJTlNUQUVOVU1QUk9DVyxMUEFSQU0pOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxf XykpIEVxdWFsUmVjdChMUENSRUNULExQQ1JFQ1QpOw0KDQpCT09MIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgRXhpdFdpbmRvd3NFeChVSU5ULERXT1JEKTsNCkhXTkQgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBGaW5kV2luZG93QShMUENTVFIsTFBDU1RSKTsNCkhXTkQgX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBGaW5kV2luZG93RXhBKEhXTkQsSFdORCxMUENTVFIsTFBD U1RSKTsNCkhXTkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBGaW5kV2luZG93RXhXKEhX TkQsSFdORCxMUENXU1RSLExQQ1dTVFIpOw0KSFdORCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxf XykpIEZpbmRXaW5kb3dXKExQQ1dTVFIsTFBDV1NUUik7DQpCT09MIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgRmxhc2hXaW5kb3coSFdORCxCT09MKTsNCmludCBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIEZyYW1lUmVjdChIREMsTFBDUkVDVCxIQlJVU0gpOw0KQk9PTCBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIEZyYW1lUmduKEhEQyxIUkdOLEhCUlVTSCxpbnQsaW50KTsN CkhXTkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRBY3RpdmVXaW5kb3codm9pZCk7 DQpTSE9SVCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldEFzeW5jS2V5U3RhdGUoaW50 KTsNCkhXTkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRDYXB0dXJlKHZvaWQpOw0K VUlOVCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldENhcmV0QmxpbmtUaW1lKHZvaWQp Ow0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldENhcmV0UG9zKExQUE9JTlQp Ow0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldENsYXNzSW5mb0EoSElOU1RB TkNFLExQQ1NUUixQV05EQ0xBU1NBKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSBHZXRDbGFzc0luZm9FeEEoSElOU1RBTkNFLExQQ1NUUixQV05EQ0xBU1NFWEEpOw0KQk9PTCBf X2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldENsYXNzSW5mb1coSElOU1RBTkNFLExQQ1dT VFIsUFdORENMQVNTVyk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0Q2xh c3NJbmZvRXhXKEhJTlNUQU5DRSxMUENXU1RSLFBXTkRDTEFTU0VYVyk7DQpEV09SRCBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldENsYXNzTG9uZ0EoSFdORCxpbnQpOw0KRFdPUkQgX19h dHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRDbGFzc0xvbmdXKEhXTkQsaW50KTsNCmludCBf X2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldENsYXNzTmFtZUEoSFdORCxMUFNUUixpbnQp Ow0KaW50IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0Q2xhc3NOYW1lVyhIV05ELExQ V1NUUixpbnQpOw0KV09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldENsYXNzV29y ZChIV05ELGludCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0Q2xpZW50 UmVjdChIV05ELExQUkVDVCk7DQpIQU5ETEUgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBH ZXRDbGlwYm9hcmREYXRhKFVJTlQpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg R2V0Q2xpcGJvYXJkRm9ybWF0TmFtZUEoVUlOVCxMUFNUUixpbnQpOw0KaW50IF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgR2V0Q2xpcGJvYXJkRm9ybWF0TmFtZVcoVUlOVCxMUFdTVFIsaW50 KTsNCkhXTkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRDbGlwYm9hcmRPd25lcih2 b2lkKTsNCkhXTkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRDbGlwYm9hcmRWaWV3 ZXIodm9pZCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0Q2xpcEN1cnNv cihMUFJFQ1QpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldEN1cnNvclBv cyhMUFBPSU5UKTsNCkhEQyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldERDKEhXTkQp Ow0KSERDIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0RENFeChIV05ELEhSR04sRFdP UkQpOw0KSFdORCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldERlc2t0b3BXaW5kb3co dm9pZCk7DQpsb25nIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0RGlhbG9nQmFzZVVu aXRzKHZvaWQpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0RGxnQ3RybElE KEhXTkQpOw0KSFdORCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldERsZ0l0ZW0oSFdO RCxpbnQpOw0KVUlOVCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldERsZ0l0ZW1JbnQo SFdORCxpbnQsUEJPT0wsQk9PTCk7DQpVSU5UIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg R2V0RGxnSXRlbVRleHRBKEhXTkQsaW50LExQU1RSLGludCk7DQpVSU5UIF9fYXR0cmlidXRlX18o KF9fc3RkY2FsbF9fKSkgR2V0RGxnSXRlbVRleHRXKEhXTkQsaW50LExQV1NUUixpbnQpOw0KVUlO VCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldERvdWJsZUNsaWNrVGltZSh2b2lkKTsN CkhXTkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRGb2N1cyh2b2lkKTsNCkhXTkQg X19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRGb3JlZ3JvdW5kV2luZG93KHZvaWQpOw0K Qk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldEljb25JbmZvKEhJQ09OLFBJQ09O SU5GTyk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0SW5wdXRTdGF0ZSh2 b2lkKTsNClVJTlQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRLQkNvZGVQYWdlKHZv aWQpOw0KSEtMIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0S2V5Ym9hcmRMYXlvdXQo RFdPUkQpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0S2V5Ym9hcmRMYXlv dXRMaXN0KGludCxIS0wqKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRL ZXlib2FyZExheW91dE5hbWVBKExQU1RSKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBHZXRLZXlib2FyZExheW91dE5hbWVXKExQV1NUUik7DQpCT09MIF9fYXR0cmlidXRlX18o KF9fc3RkY2FsbF9fKSkgR2V0S2V5Ym9hcmRTdGF0ZShQQllURSk7DQppbnQgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBHZXRLZXlib2FyZFR5cGUoaW50KTsNCmludCBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIEdldEtleU5hbWVUZXh0QShMT05HLExQU1RSLGludCk7DQppbnQgX19h dHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRLZXlOYW1lVGV4dFcoTE9ORyxMUFdTVFIsaW50 KTsNClNIT1JUIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0S2V5U3RhdGUoaW50KTsN CkhXTkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRMYXN0QWN0aXZlUG9wdXAoSFdO RCk7DQpEV09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldExhc3RFcnJvcih2b2lk KTsNCkhNRU5VIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0TWVudShIV05EKTsNCkxP TkcgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRNZW51Q2hlY2tNYXJrRGltZW5zaW9u cyh2b2lkKTsNCkRXT1JEIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0TWVudUNvbnRl eHRIZWxwSWQoSE1FTlUpOw0KVUlOVCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldE1l bnVEZWZhdWx0SXRlbShITUVOVSxVSU5ULFVJTlQpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fc3Rk Y2FsbF9fKSkgR2V0TWVudUl0ZW1Db3VudChITUVOVSk7DQpVSU5UIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgR2V0TWVudUl0ZW1JRChITUVOVSxpbnQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIEdldE1lbnVJdGVtSW5mb0EoSE1FTlUsVUlOVCxCT09MLExQTUVOVUlU RU1JTkZPQSk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0TWVudUl0ZW1J bmZvVyhITUVOVSxVSU5ULEJPT0wsTFBNRU5VSVRFTUlORk9XKTsNCkJPT0wgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBHZXRNZW51SXRlbVJlY3QoSFdORCxITUVOVSxVSU5ULExQUkVDVCk7 DQpVSU5UIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0TWVudVN0YXRlKEhNRU5VLFVJ TlQsVUlOVCk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRNZW51U3RyaW5n QShITUVOVSxVSU5ULExQU1RSLGludCxVSU5UKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNh bGxfXykpIEdldE1lbnVTdHJpbmdXKEhNRU5VLFVJTlQsTFBXU1RSLGludCxVSU5UKTsNCkJPT0wg X19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRNZXNzYWdlQShMUE1TRyxIV05ELFVJTlQs VUlOVCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0TWVzc2FnZVcoTFBN U0csSFdORCxVSU5ULFVJTlQpOw0KTE9ORyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdl dE1lc3NhZ2VFeHRyYUluZm8odm9pZCk7DQpEV09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxf XykpIEdldE1lc3NhZ2VQb3Modm9pZCk7DQpMT05HIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgR2V0TWVzc2FnZVRpbWUodm9pZCk7DQpIV05EIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgR2V0TmV4dERsZ0dyb3VwSXRlbShIV05ELEhXTkQsQk9PTCk7DQpIV05EIF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgR2V0TmV4dERsZ1RhYkl0ZW0oSFdORCxIV05ELEJPT0wpOw0KDQpI V05EIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0T3BlbkNsaXBib2FyZFdpbmRvdyh2 b2lkKTsNCkhXTkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRQYXJlbnQoSFdORCk7 DQppbnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRQcmlvcml0eUNsaXBib2FyZEZv cm1hdChVSU5UKixpbnQpOw0KSEFORExFIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0 UHJvcEEoSFdORCxMUENTVFIpOw0KSEFORExFIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg R2V0UHJvcFcoSFdORCxMUENXU1RSKTsNCkRXT1JEIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgR2V0UXVldWVTdGF0dXMoVUlOVCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgR2V0U2Nyb2xsSW5mbyhIV05ELGludCxMUFNDUk9MTElORk8pOw0KaW50IF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgR2V0U2Nyb2xsUG9zKEhXTkQsaW50KTsNCkJPT0wgX19hdHRyaWJ1 dGVfXygoX19zdGRjYWxsX18pKSBHZXRTY3JvbGxSYW5nZShIV05ELGludCxMUElOVCxMUElOVCk7 DQpITUVOVSBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldFN1Yk1lbnUoSE1FTlUsaW50 KTsNCkRXT1JEIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0U3lzQ29sb3IoaW50KTsN CkhCUlVTSCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldFN5c0NvbG9yQnJ1c2goaW50 KTsNCg0KSE1FTlUgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRTeXN0ZW1NZW51KEhX TkQsQk9PTCk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRTeXN0ZW1NZXRy aWNzKGludCk7DQpEV09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldFRhYmJlZFRl eHRFeHRlbnRBKEhEQyxMUENTVFIsaW50LGludCxMUElOVCk7DQpEV09SRCBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIEdldFRhYmJlZFRleHRFeHRlbnRXKEhEQyxMUENXU1RSLGludCxpbnQs TFBJTlQpOw0KTE9ORyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldFdpbmRvd0xvbmdB KEhXTkQsaW50KTsNCkxPTkcgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRXaW5kb3dM b25nVyhIV05ELGludCk7DQpIREVTSyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldFRo cmVhZERlc2t0b3AoRFdPUkQpOw0KSFdORCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdl dFRvcFdpbmRvdyhIV05EKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRV cGRhdGVSZWN0KEhXTkQsTFBSRUNULEJPT0wpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fc3RkY2Fs bF9fKSkgR2V0VXBkYXRlUmduKEhXTkQsSFJHTixCT09MKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSBHZXRVc2VyT2JqZWN0SW5mb3JtYXRpb25BKEhBTkRMRSxpbnQsUFZPSUQs RFdPUkQsUERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRVc2Vy T2JqZWN0SW5mb3JtYXRpb25XKEhBTkRMRSxpbnQsUFZPSUQsRFdPUkQsUERXT1JEKTsNCkJPT0wg X19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRVc2VyT2JqZWN0U2VjdXJpdHkoSEFORExF LFBTRUNVUklUWV9JTkZPUk1BVElPTixQU0VDVVJJVFlfREVTQ1JJUFRPUixEV09SRCxQRFdPUkQp Ow0KSFdORCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldFdpbmRvdyhIV05ELFVJTlQp Ow0KRFdPUkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRXaW5kb3dDb250ZXh0SGVs cElkKEhXTkQpOw0KSERDIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0V2luZG93REMo SFdORCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0V2luZG93RXh0RXgo SERDLExQU0laRSk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0V2luZG93 UGxhY2VtZW50KEhXTkQsV0lORE9XUExBQ0VNRU5UKik7DQpCT09MIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgR2V0V2luZG93UmVjdChIV05ELExQUkVDVCk7DQppbnQgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBHZXRXaW5kb3dSZ24oSFdORCxIUkdOKTsNCg0KaW50IF9fYXR0cmli dXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0V2luZG93VGV4dEEoSFdORCxMUFNUUixpbnQpOw0KaW50 IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0V2luZG93VGV4dExlbmd0aEEoSFdORCk7 DQppbnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRXaW5kb3dUZXh0TGVuZ3RoVyhI V05EKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldFdpbmRvd1RleHRXKEhX TkQsTFBXU1RSLGludCk7DQpXT1JEIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0V2lu ZG93V29yZChIV05ELGludCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR3Jh eVN0cmluZ0EoSERDLEhCUlVTSCxHUkFZU1RSSU5HUFJPQyxMUEFSQU0saW50LGludCxpbnQsaW50 LGludCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR3JheVN0cmluZ1coSERD LEhCUlVTSCxHUkFZU1RSSU5HUFJPQyxMUEFSQU0saW50LGludCxpbnQsaW50LGludCk7DQpCT09M IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgSGlkZUNhcmV0KEhXTkQpOw0KQk9PTCBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEhpbGl0ZU1lbnVJdGVtKEhXTkQsSE1FTlUsVUlOVCxV SU5UKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBJbmZsYXRlUmVjdChMUFJF Q1QsaW50LGludCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgSW5TZW5kTWVz c2FnZSh2b2lkKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBJbnNlcnRNZW51 QShITUVOVSxVSU5ULFVJTlQsVUlOVCxMUENTVFIpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIEluc2VydE1lbnVXKEhNRU5VLFVJTlQsVUlOVCxVSU5ULExQQ1dTVFIpOw0KQk9P TCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEluc2VydE1lbnVJdGVtQShITUVOVSxVSU5U LEJPT0wsTFBDTUVOVUlURU1JTkZPQSk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgSW5zZXJ0TWVudUl0ZW1XKEhNRU5VLFVJTlQsQk9PTCxMUENNRU5VSVRFTUlORk9XKTsNCkJP T0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBJbnRlcnNlY3RSZWN0KExQUkVDVCxMUENS RUNULExQQ1JFQ1QpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEludmFsaWRh dGVSZWN0KEhXTkQsTFBDUkVDVCxCT09MKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBJbnZhbGlkYXRlUmduKEhXTkQsSFJHTixCT09MKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSBJbnZlcnRSZWN0KEhEQyxMUENSRUNUKTsNCkJPT0wgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBJc0NoYXJBbHBoYUEoQ0hBUiBjaCk7DQpCT09MIF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgSXNDaGFyQWxwaGFOdW1lcmljQShDSEFSKTsNCkJPT0wgX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBJc0NoYXJBbHBoYU51bWVyaWNXKFdDSEFSKTsNCkJPT0wg X19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBJc0NoYXJBbHBoYVcoV0NIQVIpOw0KQk9PTCBf X2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIElzQ2hhckxvd2VyQShDSEFSKTsNCkJPT0wgX19h dHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBJc0NoYXJMb3dlclcoV0NIQVIpOw0KQk9PTCBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIElzQ2hhclVwcGVyQShDSEFSKTsNCkJPT0wgX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBJc0NoYXJVcHBlclcoV0NIQVIpOw0KQk9PTCBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIElzQ2hpbGQoSFdORCxIV05EKTsNCkJPT0wgX19hdHRyaWJ1 dGVfXygoX19zdGRjYWxsX18pKSBJc0NsaXBib2FyZEZvcm1hdEF2YWlsYWJsZShVSU5UKTsNCkJP T0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBJc0RpYWxvZ01lc3NhZ2VBKEhXTkQsTFBN U0cpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIElzRGlhbG9nTWVzc2FnZVco SFdORCxMUE1TRyk7DQpVSU5UIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgSXNEbGdCdXR0 b25DaGVja2VkKEhXTkQsaW50KTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBJ c0ljb25pYyhIV05EKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBJc01lbnUo SE1FTlUpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIElzUmVjdEVtcHR5KExQ Q1JFQ1QpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIElzV2luZG93KEhXTkQp Ow0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIElzV2luZG93RW5hYmxlZChIV05E KTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBJc1dpbmRvd1VuaWNvZGUoSFdO RCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgSXNXaW5kb3dWaXNpYmxlKEhX TkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIElzWm9vbWVkKEhXTkQpOw0K dm9pZCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIGtleWJkX2V2ZW50KEJZVEUsQllURSxE V09SRCxEV09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgS2lsbFRpbWVy KEhXTkQsVUlOVCk7DQpIQUNDRUwgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBMb2FkQWNj ZWxlcmF0b3JzQShISU5TVEFOQ0UsTFBDU1RSKTsNCkhBQ0NFTCBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIExvYWRBY2NlbGVyYXRvcnNXKEhJTlNUQU5DRSxMUENXU1RSKTsNCkhCSVRNQVAg X19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBMb2FkQml0bWFwQShISU5TVEFOQ0UsTFBDU1RS KTsNCkhCSVRNQVAgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBMb2FkQml0bWFwVyhISU5T VEFOQ0UsTFBDV1NUUik7DQpIQ1VSU09SIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgTG9h ZEN1cnNvckEoSElOU1RBTkNFLExQQ1NUUik7DQpIQ1VSU09SIF9fYXR0cmlidXRlX18oKF9fc3Rk Y2FsbF9fKSkgTG9hZEN1cnNvckZyb21GaWxlQShMUENTVFIpOw0KSENVUlNPUiBfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpIExvYWRDdXJzb3JGcm9tRmlsZVcoTFBDV1NUUik7DQpIQ1VSU09S IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgTG9hZEN1cnNvclcoSElOU1RBTkNFLExQQ1dT VFIpOw0KSElDT04gX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBMb2FkSWNvbkEoSElOU1RB TkNFLExQQ1NUUik7DQpISUNPTiBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIExvYWRJY29u VyhISU5TVEFOQ0UsTFBDV1NUUik7DQpIQU5ETEUgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSBMb2FkSW1hZ2VBKEhJTlNUQU5DRSxMUENTVFIsVUlOVCxpbnQsaW50LFVJTlQpOw0KSEFORExF IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgTG9hZEltYWdlVyhISU5TVEFOQ0UsTFBDV1NU UixVSU5ULGludCxpbnQsVUlOVCk7DQpIS0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBM b2FkS2V5Ym9hcmRMYXlvdXRBKExQQ1NUUixVSU5UKTsNCkhLTCBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIExvYWRLZXlib2FyZExheW91dFcoTFBDV1NUUixVSU5UKTsNCkhNRU5VIF9fYXR0 cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgTG9hZE1lbnVBKEhJTlNUQU5DRSxMUENTVFIpOw0KSE1F TlUgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBMb2FkTWVudUluZGlyZWN0QShjb25zdCBN RU5VVEVNUExBVEUqKTsNCkhNRU5VIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgTG9hZE1l bnVJbmRpcmVjdFcoY29uc3QgTUVOVVRFTVBMQVRFKik7DQpITUVOVSBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIExvYWRNZW51VyhISU5TVEFOQ0UsTFBDV1NUUik7DQppbnQgX19hdHRyaWJ1 dGVfXygoX19zdGRjYWxsX18pKSBMb2FkU3RyaW5nQShISU5TVEFOQ0UsVUlOVCxMUFNUUixpbnQp Ow0KaW50IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgTG9hZFN0cmluZ1coSElOU1RBTkNF LFVJTlQsTFBXU1RSLGludCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgTG9j a1dpbmRvd1VwZGF0ZShIV05EKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIExv b2t1cEljb25JZEZyb21EaXJlY3RvcnkoUEJZVEUsQk9PTCk7DQppbnQgX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSBMb29rdXBJY29uSWRGcm9tRGlyZWN0b3J5RXgoUEJZVEUsQk9PTCxpbnQs aW50LFVJTlQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIE1hcERpYWxvZ1Jl Y3QoSFdORCxMUFJFQ1QpOw0KVUlOVCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIE1hcFZp cnR1YWxLZXlBKFVJTlQsVUlOVCk7DQpVSU5UIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg TWFwVmlydHVhbEtleUV4QShVSU5ULFVJTlQsSEtMKTsNClVJTlQgX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBNYXBWaXJ0dWFsS2V5RXhXKFVJTlQsVUlOVCxIS0wpOw0KVUlOVCBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIE1hcFZpcnR1YWxLZXlXKFVJTlQsVUlOVCk7DQppbnQgX19h dHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBNYXBXaW5kb3dQb2ludHMoSFdORCxIV05ELExQUE9J TlQsVUlOVCk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBNZW51SXRlbUZyb21Q b2ludChIV05ELEhNRU5VLFBPSU5UKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSBNZXNzYWdlQmVlcChVSU5UKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIE1l c3NhZ2VCb3hBKEhXTkQsTFBDU1RSLExQQ1NUUixVSU5UKTsNCmludCBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIE1lc3NhZ2VCb3hXKEhXTkQsTFBDV1NUUixMUENXU1RSLFVJTlQpOw0KaW50 IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgTWVzc2FnZUJveEV4QShIV05ELExQQ1NUUixM UENTVFIsVUlOVCxXT1JEKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIE1lc3Nh Z2VCb3hFeFcoSFdORCxMUENXU1RSLExQQ1dTVFIsVUlOVCxXT1JEKTsNCmludCBfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpIE1lc3NhZ2VCb3hJbmRpcmVjdEEoTFBNU0dCT1hQQVJBTVNBKTsN CmludCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIE1lc3NhZ2VCb3hJbmRpcmVjdFcoTFBN U0dCT1hQQVJBTVNXKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBNb2RpZnlN ZW51QShITUVOVSxVSU5ULFVJTlQsVUlOVCxMUENTVFIpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIE1vZGlmeU1lbnVXKEhNRU5VLFVJTlQsVUlOVCxVSU5ULExQQ1dTVFIpOw0K dm9pZCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIG1vdXNlX2V2ZW50KERXT1JELERXT1JE LERXT1JELERXT1JELERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBN b3ZlV2luZG93KEhXTkQsaW50LGludCxpbnQsaW50LEJPT0wpOw0KRFdPUkQgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBNc2dXYWl0Rm9yTXVsdGlwbGVPYmplY3RzKERXT1JELExQSEFORExF LEJPT0wsRFdPUkQsRFdPUkQpOw0KRFdPUkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBN c2dXYWl0Rm9yTXVsdGlwbGVPYmplY3RzRXgoRFdPUkQsTFBIQU5ETEUsRFdPUkQsRFdPUkQsRFdP UkQpOw0KRFdPUkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBPZW1LZXlTY2FuKFdPUkQp Ow0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIE9lbVRvQ2hhckEoTFBDU1RSLExQ U1RSKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBPZW1Ub0NoYXJCdWZmQShM UENTVFIsTFBTVFIsRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIE9l bVRvQ2hhckJ1ZmZXKExQQ1NUUixMUFdTVFIsRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIE9lbVRvQ2hhclcoTFBDU1RSLExQV1NUUik7DQpCT09MIF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgT2Zmc2V0UmVjdChMUFJFQ1QsaW50LGludCk7DQpCT09MIF9fYXR0 cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgT3BlbkNsaXBib2FyZChIV05EKTsNCkhERVNLIF9fYXR0 cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgT3BlbkRlc2t0b3BBKExQU1RSLERXT1JELEJPT0wsRFdP UkQpOw0KSERFU0sgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBPcGVuRGVza3RvcFcoTFBX U1RSLERXT1JELEJPT0wsRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykp IE9wZW5JY29uKEhXTkQpOw0KSERFU0sgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBPcGVu SW5wdXREZXNrdG9wKERXT1JELEJPT0wsRFdPUkQpOw0KSFdJTlNUQSBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIE9wZW5XaW5kb3dTdGF0aW9uQShMUFNUUixCT09MLERXT1JEKTsNCkhXSU5T VEEgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBPcGVuV2luZG93U3RhdGlvblcoTFBXU1RS LEJPT0wsRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFBhaW50RGVz a3RvcChIREMpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFBlZWtNZXNzYWdl QShMUE1TRyxIV05ELFVJTlQsVUlOVCxVSU5UKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBQZWVrTWVzc2FnZVcoTFBNU0csSFdORCxVSU5ULFVJTlQsVUlOVCk7DQoNCg0KQk9P TCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFBvc3RNZXNzYWdlQShIV05ELFVJTlQsV1BB UkFNLExQQVJBTSk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUG9zdE1lc3Nh Z2VXKEhXTkQsVUlOVCxXUEFSQU0sTFBBUkFNKTsNCnZvaWQgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBQb3N0UXVpdE1lc3NhZ2UoaW50KTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBQb3N0VGhyZWFkTWVzc2FnZUEoRFdPUkQsVUlOVCxXUEFSQU0sTFBBUkFNKTsNCkJP T0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBQb3N0VGhyZWFkTWVzc2FnZVcoRFdPUkQs VUlOVCxXUEFSQU0sTFBBUkFNKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBQ dEluUmVjdChMUENSRUNULFBPSU5UKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSBSZWRyYXdXaW5kb3coSFdORCxMUENSRUNULEhSR04sVUlOVCk7DQpBVE9NIF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgUmVnaXN0ZXJDbGFzc0EoY29uc3QgV05EQ0xBU1NBKik7DQpBVE9N IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUmVnaXN0ZXJDbGFzc1coY29uc3QgV05EQ0xB U1NXKik7DQpBVE9NIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUmVnaXN0ZXJDbGFzc0V4 QShjb25zdCBXTkRDTEFTU0VYQSopOw0KQVRPTSBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykp IFJlZ2lzdGVyQ2xhc3NFeFcoY29uc3QgV05EQ0xBU1NFWFcqKTsNClVJTlQgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBSZWdpc3RlckNsaXBib2FyZEZvcm1hdEEoTFBDU1RSKTsNClVJTlQg X19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBSZWdpc3RlckNsaXBib2FyZEZvcm1hdFcoTFBD V1NUUik7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUmVnaXN0ZXJIb3RLZXko SFdORCxpbnQsVUlOVCxVSU5UKTsNClVJTlQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBS ZWdpc3RlcldpbmRvd01lc3NhZ2VBKExQQ1NUUik7DQpVSU5UIF9fYXR0cmlidXRlX18oKF9fc3Rk Y2FsbF9fKSkgUmVnaXN0ZXJXaW5kb3dNZXNzYWdlVyhMUENXU1RSKTsNCkJPT0wgX19hdHRyaWJ1 dGVfXygoX19zdGRjYWxsX18pKSBSZWxlYXNlQ2FwdHVyZSh2b2lkKTsNCmludCBfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpIFJlbGVhc2VEQyhIV05ELEhEQyk7DQpCT09MIF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgUmVtb3ZlTWVudShITUVOVSxVSU5ULFVJTlQpOw0KSEFORExFIF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUmVtb3ZlUHJvcEEoSFdORCxMUENTVFIpOw0KSEFO RExFIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUmVtb3ZlUHJvcFcoSFdORCxMUENXU1RS KTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBSZXBseU1lc3NhZ2UoTFJFU1VM VCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2NyZWVuVG9DbGllbnQoSFdO RCxMUFBPSU5UKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBTY3JvbGxEQyhI REMsaW50LGludCxMUENSRUNULExQQ1JFQ1QsSFJHTixMUFJFQ1QpOw0KQk9PTCBfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpIFNjcm9sbFdpbmRvdyhIV05ELGludCxpbnQsTFBDUkVDVCxMUENS RUNUKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNjcm9sbFdpbmRvd0V4KEhX TkQsaW50LGludCxMUENSRUNULExQQ1JFQ1QsSFJHTixMUFJFQ1QsVUlOVCk7DQpMT05HIF9fYXR0 cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2VuZERsZ0l0ZW1NZXNzYWdlQShIV05ELGludCxVSU5U LFdQQVJBTSxMUEFSQU0pOw0KTE9ORyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNlbmRE bGdJdGVtTWVzc2FnZVcoSFdORCxpbnQsVUlOVCxXUEFSQU0sTFBBUkFNKTsNCkxSRVNVTFQgX19h dHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBTZW5kTWVzc2FnZUEoSFdORCxVSU5ULFdQQVJBTSxM UEFSQU0pOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNlbmRNZXNzYWdlQ2Fs bGJhY2tBKEhXTkQsVUlOVCxXUEFSQU0sTFBBUkFNLFNFTkRBU1lOQ1BST0MsRFdPUkQpOw0KQk9P TCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNlbmRNZXNzYWdlQ2FsbGJhY2tXKEhXTkQs VUlOVCxXUEFSQU0sTFBBUkFNLFNFTkRBU1lOQ1BST0MsRFdPUkQpOw0KTFJFU1VMVCBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNlbmRNZXNzYWdlVGltZW91dEEoSFdORCxVSU5ULFdQQVJB TSxMUEFSQU0sVUlOVCxVSU5ULFBEV09SRCk7DQpMUkVTVUxUIF9fYXR0cmlidXRlX18oKF9fc3Rk Y2FsbF9fKSkgU2VuZE1lc3NhZ2VUaW1lb3V0VyhIV05ELFVJTlQsV1BBUkFNLExQQVJBTSxVSU5U LFVJTlQsUERXT1JEKTsNCkxSRVNVTFQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBTZW5k TWVzc2FnZVcoSFdORCxVSU5ULFdQQVJBTSxMUEFSQU0pOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIFNlbmROb3RpZnlNZXNzYWdlQShIV05ELFVJTlQsV1BBUkFNLExQQVJBTSk7 DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2VuZE5vdGlmeU1lc3NhZ2VXKEhX TkQsVUlOVCxXUEFSQU0sTFBBUkFNKTsNCkhXTkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSBTZXRBY3RpdmVXaW5kb3coSFdORCk7DQpIV05EIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgU2V0Q2FwdHVyZShIV05EIGhXbmQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxf XykpIFNldENhcmV0QmxpbmtUaW1lKFVJTlQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNh bGxfXykpIFNldENhcmV0UG9zKGludCxpbnQpOw0KRFdPUkQgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBTZXRDbGFzc0xvbmdBKEhXTkQsaW50LExPTkcpOw0KRFdPUkQgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBTZXRDbGFzc0xvbmdXKEhXTkQsaW50LExPTkcpOw0KV09SRCBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNldENsYXNzV29yZChIV05ELGludCxXT1JEKTsNCkhB TkRMRSBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNldENsaXBib2FyZERhdGEoVUlOVCxI QU5ETEUpOw0KSFdORCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNldENsaXBib2FyZFZp ZXdlcihIV05EKTsNCkhDVVJTT1IgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBTZXRDdXJz b3IoSENVUlNPUik7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0Q3Vyc29y UG9zKGludCxpbnQpOw0Kdm9pZCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNldERlYnVn RXJyb3JMZXZlbChEV09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0 RGxnSXRlbUludChIV05ELGludCxVSU5ULEJPT0wpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIFNldERsZ0l0ZW1UZXh0QShIV05ELGludCxMUENTVFIpOw0KQk9PTCBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNldERsZ0l0ZW1UZXh0VyhIV05ELGludCxMUENXU1RSKTsN CkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBTZXREb3VibGVDbGlja1RpbWUoVUlO VCk7DQpIV05EIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0Rm9jdXMoSFdORCk7DQpC T09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0Rm9yZWdyb3VuZFdpbmRvdyhIV05E KTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBTZXRLZXlib2FyZFN0YXRlKFBC WVRFKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBTZXRNZW51KEhXTkQsSE1F TlUpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNldE1lbnVDb250ZXh0SGVs cElkKEhNRU5VLERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBTZXRN ZW51RGVmYXVsdEl0ZW0oSE1FTlUsVUlOVCxVSU5UKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBTZXRNZW51SXRlbUJpdG1hcHMoSE1FTlUsVUlOVCxVSU5ULEhCSVRNQVAsSEJJ VE1BUCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0TWVudUl0ZW1JbmZv QShITUVOVSxVSU5ULEJPT0wsTFBDTUVOVUlURU1JTkZPQSk7DQpCT09MIF9fYXR0cmlidXRlX18o KF9fc3RkY2FsbF9fKSkgU2V0TWVudUl0ZW1JbmZvVyggSE1FTlUsVUlOVCxCT09MLExQQ01FTlVJ VEVNSU5GT1cpOw0KTFBBUkFNIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0TWVzc2Fn ZUV4dHJhSW5mbyhMUEFSQU0pOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNl dE1lc3NhZ2VRdWV1ZShpbnQpOw0KSFdORCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNl dFBhcmVudChIV05ELEhXTkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNl dFByb2Nlc3NXaW5kb3dTdGF0aW9uKEhXSU5TVEEpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIFNldFByb3BBKEhXTkQsTFBDU1RSLEhBTkRMRSk7DQpCT09MIF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgU2V0UHJvcFcoSFdORCxMUENXU1RSLEhBTkRMRSk7DQpCT09MIF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0UmVjdChMUFJFQ1QsaW50LGludCxpbnQsaW50 KTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBTZXRSZWN0RW1wdHkoTFBSRUNU KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNldFNjcm9sbEluZm8oSFdORCxp bnQsTFBDU0NST0xMSU5GTyxCT09MKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykp IFNldFNjcm9sbFBvcyhIV05ELGludCxpbnQsQk9PTCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgU2V0U2Nyb2xsUmFuZ2UoSFdORCxpbnQsaW50LGludCxCT09MKTsNCkJPT0wg X19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBTZXRTeXNDb2xvcnMoaW50LGNvbnN0IElOVCAq LGNvbnN0IENPTE9SUkVGICopOw0KDQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg U2V0U3lzdGVtQ3Vyc29yKEhDVVJTT1IsRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIFNldFRocmVhZERlc2t0b3AoSERFU0spOw0KVUlOVCBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIFNldFRpbWVyKEhXTkQsVUlOVCxVSU5ULFRJTUVSUFJPQyk7DQpCT09MIF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0VXNlck9iamVjdEluZm9ybWF0aW9uQShIQU5E TEUsaW50LFBWT0lELERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBT ZXRVc2VyT2JqZWN0SW5mb3JtYXRpb25XKEhBTkRMRSxpbnQsUFZPSUQsRFdPUkQpOw0KQk9PTCBf X2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNldFVzZXJPYmplY3RTZWN1cml0eShIQU5ETEUs UFNFQ1VSSVRZX0lORk9STUFUSU9OLFBTRUNVUklUWV9ERVNDUklQVE9SKTsNCkJPT0wgX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBTZXRXaW5kb3dDb250ZXh0SGVscElkKEhXTkQsRFdPUkQp Ow0KTE9ORyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNldFdpbmRvd0xvbmdBKEhXTkQs aW50LExPTkcpOw0KTE9ORyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNldFdpbmRvd0xv bmdXKEhXTkQsaW50LExPTkcpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNl dFdpbmRvd1BsYWNlbWVudChIV05EIGhXbmQsY29uc3QgV0lORE9XUExBQ0VNRU5UKik7DQpCT09M IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0V2luZG93UG9zKEhXTkQsSFdORCxpbnQs aW50LGludCxpbnQsVUlOVCk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBTZXRX aW5kb3dSZ24oSFdORCxIUkdOLEJPT0wpOw0KSE9PS1BST0MgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBTZXRXaW5kb3dzSG9va0EoaW50LEhPT0tQUk9DKTsNCkhIT09LIF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgU2V0V2luZG93c0hvb2tFeEEoaW50LEhPT0tQUk9DLEhJTlNUQU5D RSxEV09SRCk7DQpISE9PSyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNldFdpbmRvd3NI b29rRXhXKGludCxIT09LUFJPQyxISU5TVEFOQ0UsRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIFNldFdpbmRvd1RleHRBKEhXTkQsTFBDU1RSKTsNCkJPT0wgX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBTZXRXaW5kb3dUZXh0VyhIV05ELExQQ1dTVFIpOw0KV09S RCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNldFdpbmRvd1dvcmQoSFdORCxpbnQsV09S RCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2hvd0NhcmV0KEhXTkQpOw0K aW50IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2hvd0N1cnNvcihCT09MKTsNCkJPT0wg X19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBTaG93T3duZWRQb3B1cHMoSFdORCxCT09MKTsN CkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBTaG93U2Nyb2xsQmFyKEhXTkQsaW50 LEJPT0wpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNob3dXaW5kb3coSFdO RCxpbnQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNob3dXaW5kb3dBc3lu YyhIV05ELGludCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU3VidHJhY3RS ZWN0KExQUkVDVCxMUENSRUNULExQQ1JFQ1QpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNh bGxfXykpIFN3YXBNb3VzZUJ1dHRvbihCT09MKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBTd2l0Y2hEZXNrdG9wKEhERVNLKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBTeXN0ZW1QYXJhbWV0ZXJzSW5mb0EoVUlOVCxVSU5ULFBWT0lELFVJTlQpOw0KQk9P TCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFN5c3RlbVBhcmFtZXRlcnNJbmZvVyhVSU5U LFVJTlQsUFZPSUQsVUlOVCk7DQpMT05HIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgVGFi YmVkVGV4dE91dEEoSERDLGludCxpbnQsTFBDU1RSLGludCxpbnQsTFBJTlQsaW50KTsNCkxPTkcg X19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBUYWJiZWRUZXh0T3V0VyhIREMsaW50LGludCxM UENXU1RSLGludCxpbnQsTFBJTlQsaW50KTsNCldPUkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBUaWxlV2luZG93cyhIV05ELFVJTlQsTFBDUkVDVCxVSU5ULGNvbnN0IEhXTkQgKik7DQpp bnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBUb0FzY2lpKFVJTlQsVUlOVCxQQllURSxM UFdPUkQsVUlOVCk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBUb0FzY2lpRXgo VUlOVCxVSU5ULFBCWVRFLExQV09SRCxVSU5ULEhLTCk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBUb1VuaWNvZGUoVUlOVCxVSU5ULFBCWVRFLExQV1NUUixpbnQsVUlOVCk7DQpp bnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBUb1VuaWNvZGVFeChVSU5ULFVJTlQsUEJZ VEUsTFBXU1RSLGludCxVSU5ULEhLTCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgVHJhY2tNb3VzZUV2ZW50KExQVFJBQ0tNT1VTRUVWRU5UKTsNCkJPT0wgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBUcmFja1BvcHVwTWVudShITUVOVSxVSU5ULGludCxpbnQsaW50LEhX TkQsTFBDUkVDVCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgVHJhY2tQb3B1 cE1lbnVFeChITUVOVSxVSU5ULGludCxpbnQsSFdORCxMUFRQTVBBUkFNUyk7DQppbnQgX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBUcmFuc2xhdGVBY2NlbGVyYXRvckEoSFdORCxIQUNDRUws TFBNU0cpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgVHJhbnNsYXRlQWNjZWxl cmF0b3JXKEhXTkQsSEFDQ0VMLExQTVNHKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBUcmFuc2xhdGVNRElTeXNBY2NlbChIV05ELExQTVNHKTsNCkJPT0wgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBUcmFuc2xhdGVNZXNzYWdlKGNvbnN0IE1TRyopOw0KQk9PTCBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFVuaG9va1dpbmRvd3NIb29rKGludCxIT09LUFJPQyk7 DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgVW5ob29rV2luZG93c0hvb2tFeChI SE9PSyk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgVW5pb25SZWN0KExQUkVD VCxMUENSRUNULExQQ1JFQ1QpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFVu bG9hZEtleWJvYXJkTGF5b3V0KEhLTCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgVW5yZWdpc3RlckNsYXNzQShMUENTVFIsSElOU1RBTkNFKTsNCkJPT0wgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBVbnJlZ2lzdGVyQ2xhc3NXKExQQ1dTVFIsSElOU1RBTkNFKTsNCkJP T0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBVbnJlZ2lzdGVySG90S2V5KEhXTkQsaW50 KTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBVcGRhdGVXaW5kb3coSFdORCk7 DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgVmFsaWRhdGVSZWN0KEhXTkQsTFBD UkVDVCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgVmFsaWRhdGVSZ24oSFdO RCxIUkdOKTsNClNIT1JUIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgVmtLZXlTY2FuQShD SEFSKTsNClNIT1JUIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgVmtLZXlTY2FuRXhBKENI QVIsSEtMKTsNClNIT1JUIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgVmtLZXlTY2FuRXhX KFdDSEFSLEhLTCk7DQpTSE9SVCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFZrS2V5U2Nh blcoV0NIQVIpOw0KRFdPUkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBXYWl0Rm9ySW5w dXRJZGxlKEhBTkRMRSxEV09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg V2FpdE1lc3NhZ2Uodm9pZCk7DQpIV05EIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgV2lu ZG93RnJvbURDKEhEQyBoREMpOw0KSFdORCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFdp bmRvd0Zyb21Qb2ludChQT0lOVCk7DQpVSU5UIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg V2luRXhlYyhMUENTVFIsVUlOVCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg V2luSGVscEEoSFdORCxMUENTVFIsVUlOVCxEV09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgV2luSGVscFcoSFdORCxMUENXU1RSLFVJTlQsRFdPUkQpOw0KaW50IF9fYXR0 cmlidXRlX18oKF9fY2RlY2xfXykpIHdzcHJpbnRmQShMUFNUUixMUENTVFIsLi4uKTsNCmludCBf X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB3c3ByaW50ZlcoTFBXU1RSLExQQ1dTVFIsLi4uKTsN CmludCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIHd2c3ByaW50ZkEoTFBTVFIsTFBDU1RS LHZhX2xpc3QgYXJnbGlzdCk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSB3dnNw cmludGZXKExQV1NUUixMUENXU1RSLHZhX2xpc3QgYXJnbGlzdCk7DQojIDMxMjQgInQ6L21zeXMv MS4wL21pbmd3L2luY2x1ZGUvd2ludXNlci5oIiAzDQp0eXBlZGVmIFdORENMQVNTQSBXTkRDTEFT UywqTFBXTkRDTEFTUywqUFdORENMQVNTOw0KdHlwZWRlZiBXTkRDTEFTU0VYQSBXTkRDTEFTU0VY LCpMUFdORENMQVNTRVgsKlBXTkRDTEFTU0VYOw0KdHlwZWRlZiBNRU5VSVRFTUlORk9BIE1FTlVJ VEVNSU5GTywqTFBNRU5VSVRFTUlORk87DQp0eXBlZGVmIExQQ01FTlVJVEVNSU5GT0EgTFBDTUVO VUlURU1JTkZPOw0KdHlwZWRlZiBNU0dCT1hQQVJBTVNBIE1TR0JPWFBBUkFNUywqUE1TR0JPWFBB UkFNUywqTFBNU0dCT1hQQVJBTVM7DQp0eXBlZGVmIEhJR0hDT05UUkFTVEEgSElHSENPTlRSQVNU LCpMUEhJR0hDT05UUkFTVDsNCnR5cGVkZWYgSUNPTk1FVFJJQ1NBIElDT05NRVRSSUNTLCpMUElD T05NRVRSSUNTOw0KdHlwZWRlZiBOT05DTElFTlRNRVRSSUNTQSBOT05DTElFTlRNRVRSSUNTLCpM UE5PTkNMSUVOVE1FVFJJQ1M7DQp0eXBlZGVmIFNFUklBTEtFWVNBIFNFUklBTEtFWVMsKkxQU0VS SUFMS0VZUzsNCnR5cGVkZWYgU09VTkRTRU5UUllBIFNPVU5EU0VOVFJZLCpMUFNPVU5EU0VOVFJZ Ow0KdHlwZWRlZiBNRElDUkVBVEVTVFJVQ1RBIE1ESUNSRUFURVNUUlVDVCwqTFBNRElDUkVBVEVT VFJVQ1Q7DQp0eXBlZGVmIE1VTFRJS0VZSEVMUEEgTVVMVElLRVlIRUxQLCpQTVVMVElLRVlIRUxQ LCpMUE1VTFRJS0VZSEVMUDsNCiMgMzI2NCAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS93aW51 c2VyLmgiIDMNCn0NCiMgMTA4ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL3dpbmRvd3MuaCIg MiAzDQoNCg0KIyAxICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL3dpbm5scy5oIiAxIDMNCg0K DQoNCmV4dGVybiAiQyIgew0KIyA0MTUgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvd2lubmxz LmgiIDMNCnR5cGVkZWYgRFdPUkQgTENUWVBFOw0KdHlwZWRlZiBEV09SRCBDQUxUWVBFOw0KdHlw ZWRlZiBEV09SRCBDQUxJRDsNCnR5cGVkZWYgRFdPUkQgTEdSUElEOw0KdHlwZWRlZiBCT09MIChf X2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpICpDQUxJTkZPX0VOVU1QUk9DQSkoTFBTVFIpOw0K dHlwZWRlZiBCT09MIChfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpICpDQUxJTkZPX0VOVU1Q Uk9DVykoTFBXU1RSKTsNCnR5cGVkZWYgQk9PTCAoX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSogQ0FMSU5GT19FTlVNUFJPQ0VYQSkoTFBTVFIsIENBTElEKTsNCnR5cGVkZWYgQk9PTCAoX19h dHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSogQ0FMSU5GT19FTlVNUFJPQ0VYVykoTFBXU1RSLCBD QUxJRCk7DQp0eXBlZGVmIEJPT0wgKF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkqIExBTkdV QUdFR1JPVVBfRU5VTVBST0NBKShMR1JQSUQsIExQU1RSLCBMUFNUUiwgRFdPUkQsIExPTkdfUFRS KTsNCnR5cGVkZWYgQk9PTCAoX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSogTEFOR1VBR0VH Uk9VUF9FTlVNUFJPQ1cpKExHUlBJRCwgTFBXU1RSLCBMUFdTVFIsIERXT1JELCBMT05HX1BUUik7 DQp0eXBlZGVmIEJPT0wgKF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkqIExBTkdHUk9VUExP Q0FMRV9FTlVNUFJPQ0EpKExHUlBJRCwgTENJRCwgTFBTVFIsIExPTkdfUFRSKTsNCnR5cGVkZWYg Qk9PTCAoX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSogTEFOR0dST1VQTE9DQUxFX0VOVU1Q Uk9DVykoTEdSUElELCBMQ0lELCBMUFdTVFIsIExPTkdfUFRSKTsNCnR5cGVkZWYgQk9PTCAoX19h dHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSogVUlMQU5HVUFHRV9FTlVNUFJPQ1cpKExQV1NUUiwg TE9OR19QVFIpOw0KdHlwZWRlZiBCT09MIChfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpKiBV SUxBTkdVQUdFX0VOVU1QUk9DQSkoTFBTVFIsIExPTkdfUFRSKTsNCnR5cGVkZWYgQk9PTCAoX19h dHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSAqTE9DQUxFX0VOVU1QUk9DQSkoTFBTVFIpOw0KdHlw ZWRlZiBCT09MIChfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpICpMT0NBTEVfRU5VTVBST0NX KShMUFdTVFIpOw0KdHlwZWRlZiBCT09MIChfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpICpD T0RFUEFHRV9FTlVNUFJPQ0EpKExQU1RSKTsNCnR5cGVkZWYgQk9PTCAoX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSAqQ09ERVBBR0VfRU5VTVBST0NXKShMUFdTVFIpOw0KdHlwZWRlZiBCT09M IChfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpICpEQVRFRk1UX0VOVU1QUk9DQSkoTFBTVFIp Ow0KdHlwZWRlZiBCT09MIChfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpICpEQVRFRk1UX0VO VU1QUk9DVykoTFBXU1RSKTsNCnR5cGVkZWYgQk9PTCAoX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSogREFURUZNVF9FTlVNUFJPQ0VYQSkoTFBTVFIsIENBTElEKTsNCnR5cGVkZWYgQk9PTCAo X19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSogREFURUZNVF9FTlVNUFJPQ0VYVykoTFBXU1RS LCBDQUxJRCk7DQp0eXBlZGVmIEJPT0wgKF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgKlRJ TUVGTVRfRU5VTVBST0NBKShMUFNUUik7DQp0eXBlZGVmIEJPT0wgKF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgKlRJTUVGTVRfRU5VTVBST0NXKShMUFdTVFIpOw0KDQp0eXBlZGVmIHN0cnVj dCBfY3BpbmZvIHsNCiAgICAgICAgVUlOVCBNYXhDaGFyU2l6ZTsNCiAgICAgICAgQllURSBEZWZh dWx0Q2hhclsyXTsNCiAgICAgICAgQllURSBMZWFkQnl0ZVsxMl07DQp9IENQSU5GTywqTFBDUElO Rk87DQp0eXBlZGVmIHN0cnVjdCBfY3BpbmZvZXhBIHsNCiAgICBVSU5UIE1heENoYXJTaXplOw0K ICAgIEJZVEUgRGVmYXVsdENoYXJbMl07DQogICAgQllURSBMZWFkQnl0ZVsxMl07DQogICAgV0NI QVIgVW5pY29kZURlZmF1bHRDaGFyOw0KICAgIFVJTlQgQ29kZVBhZ2U7DQogICAgQ0hBUiBDb2Rl UGFnZU5hbWVbMjYwXTsNCn0gQ1BJTkZPRVhBLCAqTFBDUElORk9FWEE7DQp0eXBlZGVmIHN0cnVj dCBfY3BpbmZvZXhXIHsNCiAgICBVSU5UIE1heENoYXJTaXplOw0KICAgIEJZVEUgRGVmYXVsdENo YXJbMl07DQogICAgQllURSBMZWFkQnl0ZVsxMl07DQogICAgV0NIQVIgVW5pY29kZURlZmF1bHRD aGFyOw0KICAgIFVJTlQgQ29kZVBhZ2U7DQogICAgV0NIQVIgQ29kZVBhZ2VOYW1lWzI2MF07DQp9 IENQSU5GT0VYVywgKkxQQ1BJTkZPRVhXOw0KdHlwZWRlZiBzdHJ1Y3QgX2N1cnJlbmN5Zm10QSB7 DQogICAgICAgIFVJTlQgTnVtRGlnaXRzOw0KICAgICAgICBVSU5UIExlYWRpbmdaZXJvOw0KICAg ICAgICBVSU5UIEdyb3VwaW5nOw0KICAgICAgICBMUFNUUiBscERlY2ltYWxTZXA7DQogICAgICAg IExQU1RSIGxwVGhvdXNhbmRTZXA7DQogICAgICAgIFVJTlQgTmVnYXRpdmVPcmRlcjsNCiAgICAg ICAgVUlOVCBQb3NpdGl2ZU9yZGVyOw0KICAgICAgICBMUFNUUiBscEN1cnJlbmN5U3ltYm9sOw0K fSBDVVJSRU5DWUZNVEEsICpMUENVUlJFTkNZRk1UQTsNCnR5cGVkZWYgc3RydWN0IF9jdXJyZW5j eWZtdFcgew0KICAgICAgICBVSU5UIE51bURpZ2l0czsNCiAgICAgICAgVUlOVCBMZWFkaW5nWmVy bzsNCiAgICAgICAgVUlOVCBHcm91cGluZzsNCiAgICAgICAgTFBXU1RSIGxwRGVjaW1hbFNlcDsN CiAgICAgICAgTFBXU1RSIGxwVGhvdXNhbmRTZXA7DQogICAgICAgIFVJTlQgTmVnYXRpdmVPcmRl cjsNCiAgICAgICAgVUlOVCBQb3NpdGl2ZU9yZGVyOw0KICAgICAgICBMUFdTVFIgbHBDdXJyZW5j eVN5bWJvbDsNCn0gQ1VSUkVOQ1lGTVRXLCAqTFBDVVJSRU5DWUZNVFc7DQp0eXBlZGVmIHN0cnVj dCBfbnVtYmVyZm10QSB7DQogICAgICAgIFVJTlQgTnVtRGlnaXRzOw0KICAgICAgICBVSU5UIExl YWRpbmdaZXJvOw0KICAgICAgICBVSU5UIEdyb3VwaW5nOw0KICAgICAgICBMUFNUUiBscERlY2lt YWxTZXA7DQogICAgICAgIExQU1RSIGxwVGhvdXNhbmRTZXA7DQogICAgICAgIFVJTlQgTmVnYXRp dmVPcmRlcjsNCn0gTlVNQkVSRk1UQSwgKkxQTlVNQkVSRk1UQTsNCnR5cGVkZWYgc3RydWN0IF9u dW1iZXJmbXRXIHsNCiAgICAgICAgVUlOVCBOdW1EaWdpdHM7DQogICAgICAgIFVJTlQgTGVhZGlu Z1plcm87DQogICAgICAgIFVJTlQgR3JvdXBpbmc7DQogICAgICAgIExQV1NUUiBscERlY2ltYWxT ZXA7DQogICAgICAgIExQV1NUUiBscFRob3VzYW5kU2VwOw0KICAgICAgICBVSU5UIE5lZ2F0aXZl T3JkZXI7DQp9IE5VTUJFUkZNVFcsICpMUE5VTUJFUkZNVFc7DQoNCmludCBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIENvbXBhcmVTdHJpbmdBKExDSUQsRFdPUkQsTFBDU1RSLGludCxMUENT VFIsaW50KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIENvbXBhcmVTdHJpbmdX KExDSUQsRFdPUkQsTFBDV1NUUixpbnQsTFBDV1NUUixpbnQpOw0KTENJRCBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIENvbnZlcnREZWZhdWx0TG9jYWxlKExDSUQpOw0KQk9PTCBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIEVudW1DYWxlbmRhckluZm9BKENBTElORk9fRU5VTVBST0NB LExDSUQsQ0FMSUQsQ0FMVFlQRSk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg RW51bUNhbGVuZGFySW5mb1coQ0FMSU5GT19FTlVNUFJPQ1csTENJRCxDQUxJRCxDQUxUWVBFKTsN CkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBFbnVtRGF0ZUZvcm1hdHNBKERBVEVG TVRfRU5VTVBST0NBLExDSUQsRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxf XykpIEVudW1EYXRlRm9ybWF0c1coREFURUZNVF9FTlVNUFJPQ1csTENJRCxEV09SRCk7DQpCT09M IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRW51bVN5c3RlbUNvZGVQYWdlc0EoQ09ERVBB R0VfRU5VTVBST0NBLERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBF bnVtU3lzdGVtQ29kZVBhZ2VzVyhDT0RFUEFHRV9FTlVNUFJPQ1csRFdPUkQpOw0KQk9PTCBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEVudW1TeXN0ZW1Mb2NhbGVzQShMT0NBTEVfRU5VTVBS T0NBLERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBFbnVtU3lzdGVt TG9jYWxlc1coTE9DQUxFX0VOVU1QUk9DVyxEV09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgRW51bVRpbWVGb3JtYXRzQShUSU1FRk1UX0VOVU1QUk9DQSxMQ0lELERXT1JE KTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBFbnVtVGltZUZvcm1hdHNXKFRJ TUVGTVRfRU5VTVBST0NXLExDSUQsRFdPUkQpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fc3RkY2Fs bF9fKSkgRm9sZFN0cmluZ0EoRFdPUkQsTFBDU1RSLGludCxMUFNUUixpbnQpOw0KaW50IF9fYXR0 cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRm9sZFN0cmluZ1coRFdPUkQsTFBDV1NUUixpbnQsTFBX U1RSLGludCk7DQpVSU5UIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0QUNQKHZvaWQp Ow0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldENQSW5mbyhVSU5ULExQQ1BJ TkZPKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRDUEluZm9FeEEoVUlO VCxEV09SRCxMUENQSU5GT0VYQSk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg R2V0Q1BJbmZvRXhXKFVJTlQsRFdPUkQsTFBDUElORk9FWFcpOw0KaW50IF9fYXR0cmlidXRlX18o KF9fc3RkY2FsbF9fKSkgR2V0Q3VycmVuY3lGb3JtYXRBKExDSUQsRFdPUkQsTFBDU1RSLGNvbnN0 IENVUlJFTkNZRk1UQSosTFBTVFIsaW50KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxf XykpIEdldEN1cnJlbmN5Rm9ybWF0VyhMQ0lELERXT1JELExQQ1dTVFIsY29uc3QgQ1VSUkVOQ1lG TVRXKixMUFdTVFIsaW50KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldERh dGVGb3JtYXRBKExDSUQsRFdPUkQsY29uc3QgU1lTVEVNVElNRSosTFBDU1RSLExQU1RSLGludCk7 DQppbnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXREYXRlRm9ybWF0VyhMQ0lELERX T1JELGNvbnN0IFNZU1RFTVRJTUUqLExQQ1dTVFIsTFBXU1RSLGludCk7DQppbnQgX19hdHRyaWJ1 dGVfXygoX19zdGRjYWxsX18pKSBHZXRMb2NhbGVJbmZvQShMQ0lELExDVFlQRSxMUFNUUixpbnQp Ow0KaW50IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0TG9jYWxlSW5mb1coTENJRCxM Q1RZUEUsTFBXU1RSLGludCk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRO dW1iZXJGb3JtYXRBKExDSUQsRFdPUkQsTFBDU1RSLGNvbnN0IE5VTUJFUkZNVEEqLExQU1RSLGlu dCk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXROdW1iZXJGb3JtYXRXKExD SUQsRFdPUkQsTFBDV1NUUixjb25zdCBOVU1CRVJGTVRXKixMUFdTVFIsaW50KTsNClVJTlQgX19h dHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRPRU1DUCh2b2lkKTsNCkJPT0wgX19hdHRyaWJ1 dGVfXygoX19zdGRjYWxsX18pKSBHZXRTdHJpbmdUeXBlQShMQ0lELERXT1JELExQQ1NUUixpbnQs TFBXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRTdHJpbmdUeXBl VyhEV09SRCxMUENXU1RSLGludCxMUFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNh bGxfXykpIEdldFN0cmluZ1R5cGVFeEEoTENJRCxEV09SRCxMUENTVFIsaW50LExQV09SRCk7DQpC T09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0U3RyaW5nVHlwZUV4VyhMQ0lELERX T1JELExQQ1dTVFIsaW50LExQV09SRCk7DQpMQU5HSUQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBHZXRTeXN0ZW1EZWZhdWx0TGFuZ0lEKHZvaWQpOw0KTENJRCBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIEdldFN5c3RlbURlZmF1bHRMQ0lEKHZvaWQpOw0KTENJRCBfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpIEdldFRocmVhZExvY2FsZSh2b2lkKTsNCmludCBfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpIEdldFRpbWVGb3JtYXRBKExDSUQsRFdPUkQsY29uc3QgU1lTVEVN VElNRSosTFBDU1RSLExQU1RSLGludCk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSBHZXRUaW1lRm9ybWF0VyhMQ0lELERXT1JELGNvbnN0IFNZU1RFTVRJTUUqLExQQ1dTVFIsTFBX U1RSLGludCk7DQpMQU5HSUQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRVc2VyRGVm YXVsdExhbmdJRCh2b2lkKTsNCkxDSUQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRV c2VyRGVmYXVsdExDSUQodm9pZCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg SXNEQkNTTGVhZEJ5dGUoQllURSk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg SXNEQkNTTGVhZEJ5dGVFeChVSU5ULEJZVEUpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNh bGxfXykpIElzVmFsaWRDb2RlUGFnZShVSU5UKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBJc1ZhbGlkTG9jYWxlKExDSUQsRFdPUkQpOw0KaW50IF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgTENNYXBTdHJpbmdBKExDSUQsRFdPUkQsTFBDU1RSLGludCxMUFNUUixpbnQp Ow0KaW50IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgTENNYXBTdHJpbmdXKExDSUQsRFdP UkQsTFBDV1NUUixpbnQsTFBXU1RSLGludCk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBNdWx0aUJ5dGVUb1dpZGVDaGFyKFVJTlQsRFdPUkQsTFBDU1RSLGludCxMUFdTVFIsaW50 KTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBTZXRMb2NhbGVJbmZvQShMQ0lE LExDVFlQRSxMUENTVFIpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNldExv Y2FsZUluZm9XKExDSUQsTENUWVBFLExQQ1dTVFIpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIFNldFRocmVhZExvY2FsZShMQ0lEKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIFdpZGVDaGFyVG9NdWx0aUJ5dGUoVUlOVCxEV09SRCxMUENXU1RSLGludCxMUFNU UixpbnQsTFBDU1RSLExQQk9PTCk7DQojIDYxNCAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS93 aW5ubHMuaCIgMw0KdHlwZWRlZiBDUElORk9FWEEgQ1BJTkZPRVg7DQp0eXBlZGVmIExQQ1BJTkZP RVhBIExQQ1BJTkZPRVg7DQp0eXBlZGVmIENVUlJFTkNZRk1UQSBDVVJSRU5DWUZNVDsNCnR5cGVk ZWYgTFBDVVJSRU5DWUZNVEEgTFBDVVJSRU5DWUZNVDsNCnR5cGVkZWYgTlVNQkVSRk1UQSBOVU1C RVJGTVQ7DQp0eXBlZGVmIExQTlVNQkVSRk1UQSBMUE5VTUJFUkZNVDsNCiMgNjQ1ICJ0Oi9tc3lz LzEuMC9taW5ndy9pbmNsdWRlL3dpbm5scy5oIiAzDQp9DQojIDExMSAidDovbXN5cy8xLjAvbWlu Z3cvaW5jbHVkZS93aW5kb3dzLmgiIDIgMw0KDQoNCiMgMSAidDovbXN5cy8xLjAvbWluZ3cvaW5j bHVkZS93aW52ZXIuaCIgMSAzDQoNCg0KDQpleHRlcm4gIkMiIHsNCiMgODEgInQ6L21zeXMvMS4w L21pbmd3L2luY2x1ZGUvd2ludmVyLmgiIDMNCnR5cGVkZWYgc3RydWN0IHRhZ1ZTX0ZJWEVERklM RUlORk8gew0KICAgICAgICBEV09SRCBkd1NpZ25hdHVyZTsNCiAgICAgICAgRFdPUkQgZHdTdHJ1 Y1ZlcnNpb247DQogICAgICAgIERXT1JEIGR3RmlsZVZlcnNpb25NUzsNCiAgICAgICAgRFdPUkQg ZHdGaWxlVmVyc2lvbkxTOw0KICAgICAgICBEV09SRCBkd1Byb2R1Y3RWZXJzaW9uTVM7DQogICAg ICAgIERXT1JEIGR3UHJvZHVjdFZlcnNpb25MUzsNCiAgICAgICAgRFdPUkQgZHdGaWxlRmxhZ3NN YXNrOw0KICAgICAgICBEV09SRCBkd0ZpbGVGbGFnczsNCiAgICAgICAgRFdPUkQgZHdGaWxlT1M7 DQogICAgICAgIERXT1JEIGR3RmlsZVR5cGU7DQogICAgICAgIERXT1JEIGR3RmlsZVN1YnR5cGU7 DQogICAgICAgIERXT1JEIGR3RmlsZURhdGVNUzsNCiAgICAgICAgRFdPUkQgZHdGaWxlRGF0ZUxT Ow0KfSBWU19GSVhFREZJTEVJTkZPOw0KRFdPUkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSBWZXJGaW5kRmlsZUEoRFdPUkQsTFBTVFIsTFBTVFIsTFBTVFIsTFBTVFIsUFVJTlQsTFBTVFIs UFVJTlQpOw0KRFdPUkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBWZXJGaW5kRmlsZVco RFdPUkQsTFBXU1RSLExQV1NUUixMUFdTVFIsTFBXU1RSLFBVSU5ULExQV1NUUixQVUlOVCk7DQpE V09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFZlckluc3RhbGxGaWxlQShEV09SRCxM UFNUUixMUFNUUixMUFNUUixMUFNUUixMUFNUUixMUFNUUixQVUlOVCk7DQpEV09SRCBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIFZlckluc3RhbGxGaWxlVyhEV09SRCxMUFdTVFIsTFBXU1RS LExQV1NUUixMUFdTVFIsTFBXU1RSLExQV1NUUixQVUlOVCk7DQpEV09SRCBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIEdldEZpbGVWZXJzaW9uSW5mb1NpemVBKExQU1RSLFBEV09SRCk7DQpE V09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldEZpbGVWZXJzaW9uSW5mb1NpemVX KExQV1NUUixQRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldEZp bGVWZXJzaW9uSW5mb0EoTFBTVFIsRFdPUkQsRFdPUkQsUFZPSUQpOw0KQk9PTCBfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpIEdldEZpbGVWZXJzaW9uSW5mb1coTFBXU1RSLERXT1JELERXT1JE LFBWT0lEKTsNCkRXT1JEIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgVmVyTGFuZ3VhZ2VO YW1lQShEV09SRCxMUFNUUixEV09SRCk7DQpEV09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxf XykpIFZlckxhbmd1YWdlTmFtZVcoRFdPUkQsTFBXU1RSLERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1 dGVfXygoX19zdGRjYWxsX18pKSBWZXJRdWVyeVZhbHVlQShQQ1ZPSUQsTFBTVFIsUFZPSUQqLFBV SU5UKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBWZXJRdWVyeVZhbHVlVyhQ Q1ZPSUQsTFBXU1RSLFBWT0lEKixQVUlOVCk7DQojIDEyNyAidDovbXN5cy8xLjAvbWluZ3cvaW5j bHVkZS93aW52ZXIuaCIgMw0KfQ0KIyAxMTQgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvd2lu ZG93cy5oIiAyIDMNCg0KDQojIDEgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvd2lubmV0d2su aCIgMSAzDQoNCg0KDQpleHRlcm4gIkMiIHsNCiMgMTU2ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNs dWRlL3dpbm5ldHdrLmgiIDMNCnR5cGVkZWYgc3RydWN0IF9ORVRSRVNPVVJDRUEgew0KICAgICAg ICBEV09SRCBkd1Njb3BlOw0KICAgICAgICBEV09SRCBkd1R5cGU7DQogICAgICAgIERXT1JEIGR3 RGlzcGxheVR5cGU7DQogICAgICAgIERXT1JEIGR3VXNhZ2U7DQogICAgICAgIExQU1RSIGxwTG9j YWxOYW1lOw0KICAgICAgICBMUFNUUiBscFJlbW90ZU5hbWU7DQogICAgICAgIExQU1RSIGxwQ29t bWVudCA7DQogICAgICAgIExQU1RSIGxwUHJvdmlkZXI7DQp9TkVUUkVTT1VSQ0VBLCpMUE5FVFJF U09VUkNFQTsNCnR5cGVkZWYgc3RydWN0IF9ORVRSRVNPVVJDRVcgew0KICAgICAgICBEV09SRCBk d1Njb3BlOw0KICAgICAgICBEV09SRCBkd1R5cGU7DQogICAgICAgIERXT1JEIGR3RGlzcGxheVR5 cGU7DQogICAgICAgIERXT1JEIGR3VXNhZ2U7DQogICAgICAgIExQV1NUUiBscExvY2FsTmFtZTsN CiAgICAgICAgTFBXU1RSIGxwUmVtb3RlTmFtZTsNCiAgICAgICAgTFBXU1RSIGxwQ29tbWVudCA7 DQogICAgICAgIExQV1NUUiBscFByb3ZpZGVyOw0KfU5FVFJFU09VUkNFVywqTFBORVRSRVNPVVJD RVc7DQp0eXBlZGVmIHN0cnVjdCBfQ09OTkVDVERMR1NUUlVDVEF7DQogICAgICAgIERXT1JEIGNi U3RydWN0dXJlOw0KICAgICAgICBIV05EIGh3bmRPd25lcjsNCiAgICAgICAgTFBORVRSRVNPVVJD RUEgbHBDb25uUmVzOw0KICAgICAgICBEV09SRCBkd0ZsYWdzOw0KICAgICAgICBEV09SRCBkd0Rl dk51bTsNCn0gQ09OTkVDVERMR1NUUlVDVEEsKkxQQ09OTkVDVERMR1NUUlVDVEE7DQp0eXBlZGVm IHN0cnVjdCBfQ09OTkVDVERMR1NUUlVDVFd7DQogICAgICAgIERXT1JEIGNiU3RydWN0dXJlOw0K ICAgICAgICBIV05EIGh3bmRPd25lcjsNCiAgICAgICAgTFBORVRSRVNPVVJDRVcgbHBDb25uUmVz Ow0KICAgICAgICBEV09SRCBkd0ZsYWdzOw0KICAgICAgICBEV09SRCBkd0Rldk51bTsNCn0gQ09O TkVDVERMR1NUUlVDVFcsKkxQQ09OTkVDVERMR1NUUlVDVFc7DQp0eXBlZGVmIHN0cnVjdCBfRElT Q0RMR1NUUlVDVEF7DQogICAgICAgIERXT1JEIGNiU3RydWN0dXJlOw0KICAgICAgICBIV05EIGh3 bmRPd25lcjsNCiAgICAgICAgTFBTVFIgbHBMb2NhbE5hbWU7DQogICAgICAgIExQU1RSIGxwUmVt b3RlTmFtZTsNCiAgICAgICAgRFdPUkQgZHdGbGFnczsNCn0gRElTQ0RMR1NUUlVDVEEsKkxQRElT Q0RMR1NUUlVDVEE7DQp0eXBlZGVmIHN0cnVjdCBfRElTQ0RMR1NUUlVDVFd7DQogICAgICAgIERX T1JEIGNiU3RydWN0dXJlOw0KICAgICAgICBIV05EIGh3bmRPd25lcjsNCiAgICAgICAgTFBXU1RS IGxwTG9jYWxOYW1lOw0KICAgICAgICBMUFdTVFIgbHBSZW1vdGVOYW1lOw0KICAgICAgICBEV09S RCBkd0ZsYWdzOw0KfSBESVNDRExHU1RSVUNUVywqTFBESVNDRExHU1RSVUNUVzsNCnR5cGVkZWYg c3RydWN0IF9VTklWRVJTQUxfTkFNRV9JTkZPQSB7IExQU1RSIGxwVW5pdmVyc2FsTmFtZTsgfVVO SVZFUlNBTF9OQU1FX0lORk9BLCpMUFVOSVZFUlNBTF9OQU1FX0lORk9BOw0KdHlwZWRlZiBzdHJ1 Y3QgX1VOSVZFUlNBTF9OQU1FX0lORk9XIHsgTFBXU1RSIGxwVW5pdmVyc2FsTmFtZTsgfVVOSVZF UlNBTF9OQU1FX0lORk9XLCpMUFVOSVZFUlNBTF9OQU1FX0lORk9XOw0KdHlwZWRlZiBzdHJ1Y3Qg X1JFTU9URV9OQU1FX0lORk9BIHsNCiAgICAgICAgTFBTVFIgbHBVbml2ZXJzYWxOYW1lOw0KICAg ICAgICBMUFNUUiBscENvbm5lY3Rpb25OYW1lOw0KICAgICAgICBMUFNUUiBscFJlbWFpbmluZ1Bh dGg7DQp9UkVNT1RFX05BTUVfSU5GT0EsKkxQUkVNT1RFX05BTUVfSU5GT0E7DQp0eXBlZGVmIHN0 cnVjdCBfUkVNT1RFX05BTUVfSU5GT1cgew0KICAgICAgICBMUFdTVFIgbHBVbml2ZXJzYWxOYW1l Ow0KICAgICAgICBMUFdTVFIgbHBDb25uZWN0aW9uTmFtZTsNCiAgICAgICAgTFBXU1RSIGxwUmVt YWluaW5nUGF0aDsNCn1SRU1PVEVfTkFNRV9JTkZPVywqTFBSRU1PVEVfTkFNRV9JTkZPVzsNCnR5 cGVkZWYgc3RydWN0IF9ORVRJTkZPU1RSVUNUew0KICAgICAgICBEV09SRCBjYlN0cnVjdHVyZTsN CiAgICAgICAgRFdPUkQgZHdQcm92aWRlclZlcnNpb247DQogICAgICAgIERXT1JEIGR3U3RhdHVz Ow0KICAgICAgICBEV09SRCBkd0NoYXJhY3RlcmlzdGljczsNCiAgICAgICAgRFdPUkQgZHdIYW5k bGU7DQogICAgICAgIFdPUkQgd05ldFR5cGU7DQogICAgICAgIERXT1JEIGR3UHJpbnRlcnM7DQog ICAgICAgIERXT1JEIGR3RHJpdmVzOw0KfSBORVRJTkZPU1RSVUNULCpMUE5FVElORk9TVFJVQ1Q7 DQp0eXBlZGVmIFVJTlQoX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSAqUEZOR0VUUFJPRklM RVBBVEhBKShMUENTVFIsTFBTVFIsVUlOVCk7DQp0eXBlZGVmIFVJTlQoX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSAqUEZOR0VUUFJPRklMRVBBVEhXKShMUENXU1RSLExQV1NUUixVSU5UKTsN CnR5cGVkZWYgVUlOVChfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpICpQRk5SRUNPTkNJTEVQ Uk9GSUxFQSkoTFBDU1RSLExQQ1NUUixEV09SRCk7DQp0eXBlZGVmIFVJTlQoX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSAqUEZOUkVDT05DSUxFUFJPRklMRVcpKExQQ1dTVFIsTFBDV1NUUixE V09SRCk7DQp0eXBlZGVmIEJPT0woX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSAqUEZOUFJP Q0VTU1BPTElDSUVTQSkoSFdORCxMUENTVFIsTFBDU1RSLExQQ1NUUixEV09SRCk7DQp0eXBlZGVm IEJPT0woX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSAqUEZOUFJPQ0VTU1BPTElDSUVTVyko SFdORCxMUENXU1RSLExQQ1dTVFIsTFBDV1NUUixEV09SRCk7DQp0eXBlZGVmIHN0cnVjdCBfTkVU Q09OTkVDVElORk9TVFJVQ1R7DQogICAgICAgIERXT1JEIGNiU3RydWN0dXJlOw0KICAgICAgICBE V09SRCBkd0ZsYWdzOw0KICAgICAgICBEV09SRCBkd1NwZWVkOw0KICAgICAgICBEV09SRCBkd0Rl bGF5Ow0KICAgICAgICBEV09SRCBkd09wdERhdGFTaXplOw0KfSBORVRDT05ORUNUSU5GT1NUUlVD VCwqTFBORVRDT05ORUNUSU5GT1NUUlVDVDsNCg0KRFdPUkQgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBXTmV0QWRkQ29ubmVjdGlvbkEoTFBDU1RSLExQQ1NUUixMUENTVFIpOw0KRFdPUkQg X19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBXTmV0QWRkQ29ubmVjdGlvblcoTFBDV1NUUixM UENXU1RSLExQQ1dTVFIpOw0KRFdPUkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBXTmV0 QWRkQ29ubmVjdGlvbjJBKExQTkVUUkVTT1VSQ0VBLExQQ1NUUixMUENTVFIsRFdPUkQpOw0KRFdP UkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBXTmV0QWRkQ29ubmVjdGlvbjJXKExQTkVU UkVTT1VSQ0VXLExQQ1dTVFIsTFBDV1NUUixEV09SRCk7DQpEV09SRCBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIFdOZXRBZGRDb25uZWN0aW9uM0EoSFdORCxMUE5FVFJFU09VUkNFQSxMUENT VFIsTFBDU1RSLERXT1JEKTsNCkRXT1JEIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgV05l dEFkZENvbm5lY3Rpb24zVyhIV05ELExQTkVUUkVTT1VSQ0VXLExQQ1dTVFIsTFBDV1NUUixEV09S RCk7DQpEV09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFdOZXRDYW5jZWxDb25uZWN0 aW9uQShMUENTVFIsQk9PTCk7DQpEV09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFdO ZXRDYW5jZWxDb25uZWN0aW9uVyhMUENXU1RSLEJPT0wpOw0KRFdPUkQgX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSBXTmV0Q2FuY2VsQ29ubmVjdGlvbjJBKExQQ1NUUixEV09SRCxCT09MKTsN CkRXT1JEIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgV05ldENhbmNlbENvbm5lY3Rpb24y VyhMUENXU1RSLERXT1JELEJPT0wpOw0KRFdPUkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSBXTmV0R2V0Q29ubmVjdGlvbkEoTFBDU1RSLExQU1RSLFBEV09SRCk7DQpEV09SRCBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIFdOZXRHZXRDb25uZWN0aW9uVyhMUENXU1RSLExQV1NUUixQ RFdPUkQpOw0KRFdPUkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBXTmV0VXNlQ29ubmVj dGlvbkEoSFdORCxMUE5FVFJFU09VUkNFQSxMUENTVFIsTFBDU1RSLERXT1JELExQU1RSLFBEV09S RCxQRFdPUkQpOw0KRFdPUkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBXTmV0VXNlQ29u bmVjdGlvblcoSFdORCxMUE5FVFJFU09VUkNFVyxMUENXU1RSLExQQ1dTVFIsRFdPUkQsTFBXU1RS LFBEV09SRCxQRFdPUkQpOw0KRFdPUkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBXTmV0 U2V0Q29ubmVjdGlvbkEoTFBDU1RSLERXT1JELFBWT0lEKTsNCkRXT1JEIF9fYXR0cmlidXRlX18o KF9fc3RkY2FsbF9fKSkgV05ldFNldENvbm5lY3Rpb25XKExQQ1dTVFIsRFdPUkQsUFZPSUQpOw0K RFdPUkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBXTmV0Q29ubmVjdGlvbkRpYWxvZyhI V05ELERXT1JEKTsNCkRXT1JEIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgV05ldERpc2Nv bm5lY3REaWFsb2coSFdORCxEV09SRCk7DQpEV09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxf XykpIFdOZXRDb25uZWN0aW9uRGlhbG9nMUEoTFBDT05ORUNURExHU1RSVUNUQSk7DQpEV09SRCBf X2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFdOZXRDb25uZWN0aW9uRGlhbG9nMVcoTFBDT05O RUNURExHU1RSVUNUVyk7DQpEV09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFdOZXRE aXNjb25uZWN0RGlhbG9nMUEoTFBESVNDRExHU1RSVUNUQSk7DQpEV09SRCBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIFdOZXREaXNjb25uZWN0RGlhbG9nMVcoTFBESVNDRExHU1RSVUNUVyk7 DQpEV09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFdOZXRPcGVuRW51bUEoRFdPUkQs RFdPUkQsRFdPUkQsTFBORVRSRVNPVVJDRUEsTFBIQU5ETEUpOw0KRFdPUkQgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBXTmV0T3BlbkVudW1XKERXT1JELERXT1JELERXT1JELExQTkVUUkVT T1VSQ0VXLExQSEFORExFKTsNCkRXT1JEIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgV05l dEVudW1SZXNvdXJjZUEoSEFORExFLFBEV09SRCxQVk9JRCxQRFdPUkQpOw0KRFdPUkQgX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBXTmV0RW51bVJlc291cmNlVyhIQU5ETEUsUERXT1JELFBW T0lELFBEV09SRCk7DQpEV09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFdOZXRDbG9z ZUVudW0oSEFORExFKTsNCkRXT1JEIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgV05ldEdl dFVuaXZlcnNhbE5hbWVBKExQQ1NUUixEV09SRCxQVk9JRCxQRFdPUkQpOw0KRFdPUkQgX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBXTmV0R2V0VW5pdmVyc2FsTmFtZVcoTFBDV1NUUixEV09S RCxQVk9JRCxQRFdPUkQpOw0KRFdPUkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBXTmV0 R2V0VXNlckEoTFBDU1RSLExQU1RSLFBEV09SRCk7DQpEV09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIFdOZXRHZXRVc2VyVyhMUENXU1RSLExQV1NUUixQRFdPUkQpOw0KRFdPUkQgX19h dHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBXTmV0R2V0UHJvdmlkZXJOYW1lQShEV09SRCxMUFNU UixQRFdPUkQpOw0KRFdPUkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBXTmV0R2V0UHJv dmlkZXJOYW1lVyhEV09SRCxMUFdTVFIsUERXT1JEKTsNCkRXT1JEIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgV05ldEdldE5ldHdvcmtJbmZvcm1hdGlvbkEoTFBDU1RSLExQTkVUSU5GT1NU UlVDVCk7DQpEV09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFdOZXRHZXROZXR3b3Jr SW5mb3JtYXRpb25XKExQQ1dTVFIsTFBORVRJTkZPU1RSVUNUKTsNCkRXT1JEIF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgV05ldEdldExhc3RFcnJvckEoUERXT1JELExQU1RSLERXT1JELExQ U1RSLERXT1JEKTsNCkRXT1JEIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgV05ldEdldExh c3RFcnJvclcoUERXT1JELExQV1NUUixEV09SRCxMUFdTVFIsRFdPUkQpOw0KRFdPUkQgX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBNdWx0aW5ldEdldENvbm5lY3Rpb25QZXJmb3JtYW5jZUEo TFBORVRSRVNPVVJDRUEsTFBORVRDT05ORUNUSU5GT1NUUlVDVCk7DQpEV09SRCBfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpIE11bHRpbmV0R2V0Q29ubmVjdGlvblBlcmZvcm1hbmNlVyhMUE5F VFJFU09VUkNFVyxMUE5FVENPTk5FQ1RJTkZPU1RSVUNUKTsNCiMgMzEwICJ0Oi9tc3lzLzEuMC9t aW5ndy9pbmNsdWRlL3dpbm5ldHdrLmgiIDMNCnR5cGVkZWYgTkVUUkVTT1VSQ0VBIE5FVFJFU09V UkNFLCpMUE5FVFJFU09VUkNFOw0KdHlwZWRlZiBDT05ORUNURExHU1RSVUNUQSBDT05ORUNURExH U1RSVUNULCpMUENPTk5FQ1RETEdTVFJVQ1Q7DQp0eXBlZGVmIERJU0NETEdTVFJVQ1RBIERJU0NE TEdTVFJVQ1QsKkxQRElTQ0RMR1NUUlVDVDsNCnR5cGVkZWYgVU5JVkVSU0FMX05BTUVfSU5GT0Eg VU5JVkVSU0FMX05BTUVfSU5GTywqTFBVTklWRVJTQUxfTkFNRV9JTkZPOw0KdHlwZWRlZiBSRU1P VEVfTkFNRV9JTkZPQSBSRU1PVEVfTkFNRV9JTkZPLCpMUFJFTU9URV9OQU1FX0lORk87DQojIDMz NiAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS93aW5uZXR3ay5oIiAzDQp9DQojIDExNyAidDov bXN5cy8xLjAvbWluZ3cvaW5jbHVkZS93aW5kb3dzLmgiIDIgMw0KDQoNCiMgMSAidDovbXN5cy8x LjAvbWluZ3cvaW5jbHVkZS93aW5yZWcuaCIgMSAzDQoNCg0KDQpleHRlcm4gIkMiIHsNCiMgMzUg InQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvd2lucmVnLmgiIDMNCnR5cGVkZWYgQUNDRVNTX01B U0sgUkVHU0FNOw0KdHlwZWRlZiBzdHJ1Y3QgdmFsdWVfZW50QSB7DQogICAgICAgIExQU1RSIHZl X3ZhbHVlbmFtZTsNCiAgICAgICAgRFdPUkQgdmVfdmFsdWVsZW47DQogICAgICAgIERXT1JEIHZl X3ZhbHVlcHRyOw0KICAgICAgICBEV09SRCB2ZV90eXBlOw0KfSBWQUxFTlRBLCpQVkFMRU5UQTsN CnR5cGVkZWYgc3RydWN0IHZhbHVlX2VudFcgew0KICAgICAgICBMUFdTVFIgdmVfdmFsdWVuYW1l Ow0KICAgICAgICBEV09SRCB2ZV92YWx1ZWxlbjsNCiAgICAgICAgRFdPUkQgdmVfdmFsdWVwdHI7 DQogICAgICAgIERXT1JEIHZlX3R5cGU7DQp9IFZBTEVOVFcsKlBWQUxFTlRXOw0KQk9PTCBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEFib3J0U3lzdGVtU2h1dGRvd25BKExQQ1NUUik7DQpC T09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQWJvcnRTeXN0ZW1TaHV0ZG93blcoTFBD V1NUUik7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgSW5pdGlhdGVTeXN0ZW1T aHV0ZG93bkEoTFBTVFIsTFBTVFIsRFdPUkQsQk9PTCxCT09MKTsNCkJPT0wgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBJbml0aWF0ZVN5c3RlbVNodXRkb3duVyhMUFdTVFIsTFBXU1RSLERX T1JELEJPT0wsQk9PTCk7DQpMT05HIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUmVnQ2xv c2VLZXkoSEtFWSk7DQpMT05HIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUmVnQ29ubmVj dFJlZ2lzdHJ5QShMUFNUUixIS0VZLFBIS0VZKTsNCkxPTkcgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBSZWdDb25uZWN0UmVnaXN0cnlXKExQV1NUUixIS0VZLFBIS0VZKTsNCkxPTkcgX19h dHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBSZWdDcmVhdGVLZXlBKEhLRVksTFBDU1RSLFBIS0VZ KTsNCkxPTkcgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBSZWdDcmVhdGVLZXlFeEEoSEtF WSxMUENTVFIsRFdPUkQsTFBTVFIsRFdPUkQsUkVHU0FNLExQU0VDVVJJVFlfQVRUUklCVVRFUyxQ SEtFWSxQRFdPUkQpOw0KTE9ORyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJlZ0NyZWF0 ZUtleUV4VyhIS0VZLExQQ1dTVFIsRFdPUkQsTFBXU1RSLERXT1JELFJFR1NBTSxMUFNFQ1VSSVRZ X0FUVFJJQlVURVMsUEhLRVksUERXT1JEKTsNCkxPTkcgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBSZWdDcmVhdGVLZXlXKEhLRVksTFBDV1NUUixQSEtFWSk7DQpMT05HIF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgUmVnRGVsZXRlS2V5QShIS0VZLExQQ1NUUik7DQpMT05HIF9fYXR0 cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUmVnRGVsZXRlS2V5VyhIS0VZLExQQ1dTVFIpOw0KTE9O RyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJlZ0RlbGV0ZVZhbHVlQSAoSEtFWSxMUENT VFIpOw0KTE9ORyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJlZ0RlbGV0ZVZhbHVlVyhI S0VZLExQQ1dTVFIpOw0KTE9ORyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJlZ0VudW1L ZXlBIChIS0VZLERXT1JELExQU1RSLERXT1JEKTsNCkxPTkcgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBSZWdFbnVtS2V5VyhIS0VZLERXT1JELExQV1NUUixEV09SRCk7DQpMT05HIF9fYXR0 cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUmVnRW51bUtleUV4QShIS0VZLERXT1JELExQU1RSLFBE V09SRCxQRFdPUkQsTFBTVFIsUERXT1JELFBGSUxFVElNRSk7DQpMT05HIF9fYXR0cmlidXRlX18o KF9fc3RkY2FsbF9fKSkgUmVnRW51bUtleUV4VyhIS0VZLERXT1JELExQV1NUUixQRFdPUkQsUERX T1JELExQV1NUUixQRFdPUkQsUEZJTEVUSU1FKTsNCkxPTkcgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBSZWdFbnVtVmFsdWVBKEhLRVksRFdPUkQsTFBTVFIsUERXT1JELFBEV09SRCxQRFdP UkQsTFBCWVRFLFBEV09SRCk7DQpMT05HIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUmVn RW51bVZhbHVlVyhIS0VZLERXT1JELExQV1NUUixQRFdPUkQsUERXT1JELFBEV09SRCxMUEJZVEUs UERXT1JEKTsNCkxPTkcgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBSZWdGbHVzaEtleShI S0VZKTsNCkxPTkcgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBSZWdHZXRLZXlTZWN1cml0 eShIS0VZLFNFQ1VSSVRZX0lORk9STUFUSU9OLFBTRUNVUklUWV9ERVNDUklQVE9SLFBEV09SRCk7 DQpMT05HIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUmVnTG9hZEtleUEoSEtFWSxMUENT VFIsTFBDU1RSKTsNCkxPTkcgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBSZWdMb2FkS2V5 VyhIS0VZLExQQ1dTVFIsTFBDV1NUUik7DQpMT05HIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgUmVnTm90aWZ5Q2hhbmdlS2V5VmFsdWUoSEtFWSxCT09MLERXT1JELEhBTkRMRSxCT09MKTsN CkxPTkcgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBSZWdPcGVuS2V5QShIS0VZLExQQ1NU UixQSEtFWSk7DQpMT05HIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUmVnT3BlbktleUV4 QShIS0VZLExQQ1NUUixEV09SRCxSRUdTQU0sUEhLRVkpOw0KTE9ORyBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIFJlZ09wZW5LZXlFeFcoSEtFWSxMUENXU1RSLERXT1JELFJFR1NBTSxQSEtF WSk7DQpMT05HIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUmVnT3BlbktleVcoSEtFWSxM UENXU1RSLFBIS0VZKTsNCkxPTkcgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBSZWdRdWVy eUluZm9LZXlBKEhLRVksTFBTVFIsUERXT1JELFBEV09SRCxQRFdPUkQsUERXT1JELFBEV09SRCxQ RFdPUkQsUERXT1JELFBEV09SRCxQRFdPUkQsUEZJTEVUSU1FKTsNCkxPTkcgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBSZWdRdWVyeUluZm9LZXlXKEhLRVksTFBXU1RSLFBEV09SRCxQRFdP UkQsUERXT1JELFBEV09SRCxQRFdPUkQsUERXT1JELFBEV09SRCxQRFdPUkQsUERXT1JELFBGSUxF VElNRSk7DQpMT05HIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUmVnUXVlcnlNdWx0aXBs ZVZhbHVlc0EoSEtFWSxQVkFMRU5UQSxEV09SRCxMUFNUUixQRFdPUkQpOw0KTE9ORyBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJlZ1F1ZXJ5TXVsdGlwbGVWYWx1ZXNXKEhLRVksUFZBTEVO VFcsRFdPUkQsTFBXU1RSLFBEV09SRCk7DQpMT05HIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgUmVnUXVlcnlWYWx1ZUEoSEtFWSxMUENTVFIsTFBTVFIsUExPTkcpOw0KTE9ORyBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJlZ1F1ZXJ5VmFsdWVFeEEgKEhLRVksTFBDU1RSLFBEV09S RCxQRFdPUkQsTFBCWVRFLFBEV09SRCk7DQpMT05HIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgUmVnUXVlcnlWYWx1ZUV4VyhIS0VZLExQQ1dTVFIsUERXT1JELFBEV09SRCxMUEJZVEUsUERX T1JEKTsNCkxPTkcgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBSZWdRdWVyeVZhbHVlVyhI S0VZLExQQ1dTVFIsTFBXU1RSLFBMT05HKTsNCkxPTkcgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBSZWdSZXBsYWNlS2V5QShIS0VZLExQQ1NUUixMUENTVFIsTFBDU1RSKTsNCkxPTkcgX19h dHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBSZWdSZXBsYWNlS2V5VyhIS0VZLExQQ1dTVFIsTFBD V1NUUixMUENXU1RSKTsNCkxPTkcgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBSZWdSZXN0 b3JlS2V5QSAoSEtFWSxMUENTVFIsRFdPUkQpOw0KTE9ORyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNh bGxfXykpIFJlZ1Jlc3RvcmVLZXlXKEhLRVksTFBDV1NUUixEV09SRCk7DQpMT05HIF9fYXR0cmli dXRlX18oKF9fc3RkY2FsbF9fKSkgUmVnU2F2ZUtleUEoSEtFWSxMUENTVFIsTFBTRUNVUklUWV9B VFRSSUJVVEVTKTsNCkxPTkcgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBSZWdTYXZlS2V5 VyhIS0VZLExQQ1dTVFIsTFBTRUNVUklUWV9BVFRSSUJVVEVTKTsNCkxPTkcgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBSZWdTZXRLZXlTZWN1cml0eShIS0VZLFNFQ1VSSVRZX0lORk9STUFU SU9OLFBTRUNVUklUWV9ERVNDUklQVE9SKTsNCkxPTkcgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBSZWdTZXRWYWx1ZUEoSEtFWSxMUENTVFIsRFdPUkQsTFBDU1RSLERXT1JEKTsNCkxPTkcg X19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBSZWdTZXRWYWx1ZUV4QShIS0VZLExQQ1NUUixE V09SRCxEV09SRCxjb25zdCBCWVRFKixEV09SRCk7DQpMT05HIF9fYXR0cmlidXRlX18oKF9fc3Rk Y2FsbF9fKSkgUmVnU2V0VmFsdWVFeFcoSEtFWSxMUENXU1RSLERXT1JELERXT1JELGNvbnN0IEJZ VEUqLERXT1JEKTsNCkxPTkcgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBSZWdTZXRWYWx1 ZVcoSEtFWSxMUENXU1RSLERXT1JELExQQ1dTVFIsRFdPUkQpOw0KTE9ORyBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIFJlZ1VuTG9hZEtleUEoSEtFWSxMUENTVFIpOw0KTE9ORyBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJlZ1VuTG9hZEtleVcoSEtFWSxMUENXU1RSKTsNCiMgMTI2 ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL3dpbnJlZy5oIiAzDQp0eXBlZGVmIFZBTEVOVEEg VkFMRU5ULCpQVkFMRU5UOw0KIyAxNTMgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvd2lucmVn LmgiIDMNCn0NCiMgMTIwICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL3dpbmRvd3MuaCIgMiAz DQoNCg0KIyAxICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL3dpbnN2Yy5oIiAxIDMNCg0KDQoN CmV4dGVybiAiQyIgew0KIyA1MCAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS93aW5zdmMuaCIg Mw0KdHlwZWRlZiBzdHJ1Y3QgX1NFUlZJQ0VfU1RBVFVTIHsNCiAgICAgICAgRFdPUkQgZHdTZXJ2 aWNlVHlwZTsNCiAgICAgICAgRFdPUkQgZHdDdXJyZW50U3RhdGU7DQogICAgICAgIERXT1JEIGR3 Q29udHJvbHNBY2NlcHRlZDsNCiAgICAgICAgRFdPUkQgZHdXaW4zMkV4aXRDb2RlOw0KICAgICAg ICBEV09SRCBkd1NlcnZpY2VTcGVjaWZpY0V4aXRDb2RlOw0KICAgICAgICBEV09SRCBkd0NoZWNr UG9pbnQ7DQogICAgICAgIERXT1JEIGR3V2FpdEhpbnQ7DQp9IFNFUlZJQ0VfU1RBVFVTLCpMUFNF UlZJQ0VfU1RBVFVTOw0KdHlwZWRlZiBzdHJ1Y3QgX0VOVU1fU0VSVklDRV9TVEFUVVNBIHsNCiAg ICAgICAgTFBTVFIgbHBTZXJ2aWNlTmFtZTsNCiAgICAgICAgTFBTVFIgbHBEaXNwbGF5TmFtZTsN CiAgICAgICAgU0VSVklDRV9TVEFUVVMgU2VydmljZVN0YXR1czsNCn0gRU5VTV9TRVJWSUNFX1NU QVRVU0EsKkxQRU5VTV9TRVJWSUNFX1NUQVRVU0E7DQp0eXBlZGVmIHN0cnVjdCBfRU5VTV9TRVJW SUNFX1NUQVRVU1cgew0KICAgICAgICBMUFdTVFIgbHBTZXJ2aWNlTmFtZTsNCiAgICAgICAgTFBX U1RSIGxwRGlzcGxheU5hbWU7DQogICAgICAgIFNFUlZJQ0VfU1RBVFVTIFNlcnZpY2VTdGF0dXM7 DQp9IEVOVU1fU0VSVklDRV9TVEFUVVNXLCpMUEVOVU1fU0VSVklDRV9TVEFUVVNXOw0KdHlwZWRl ZiBzdHJ1Y3QgX1FVRVJZX1NFUlZJQ0VfQ09ORklHQSB7DQogICAgICAgIERXT1JEIGR3U2Vydmlj ZVR5cGU7DQogICAgICAgIERXT1JEIGR3U3RhcnRUeXBlOw0KICAgICAgICBEV09SRCBkd0Vycm9y Q29udHJvbDsNCiAgICAgICAgTFBTVFIgbHBCaW5hcnlQYXRoTmFtZTsNCiAgICAgICAgTFBTVFIg bHBMb2FkT3JkZXJHcm91cDsNCiAgICAgICAgRFdPUkQgZHdUYWdJZDsNCiAgICAgICAgTFBTVFIg bHBEZXBlbmRlbmNpZXM7DQogICAgICAgIExQU1RSIGxwU2VydmljZVN0YXJ0TmFtZTsNCiAgICAg ICAgTFBTVFIgbHBEaXNwbGF5TmFtZTsNCn0gUVVFUllfU0VSVklDRV9DT05GSUdBLCpMUFFVRVJZ X1NFUlZJQ0VfQ09ORklHQTsNCnR5cGVkZWYgc3RydWN0IF9RVUVSWV9TRVJWSUNFX0NPTkZJR1cg ew0KICAgICAgICBEV09SRCBkd1NlcnZpY2VUeXBlOw0KICAgICAgICBEV09SRCBkd1N0YXJ0VHlw ZTsNCiAgICAgICAgRFdPUkQgZHdFcnJvckNvbnRyb2w7DQogICAgICAgIExQV1NUUiBscEJpbmFy eVBhdGhOYW1lOw0KICAgICAgICBMUFdTVFIgbHBMb2FkT3JkZXJHcm91cDsNCiAgICAgICAgRFdP UkQgZHdUYWdJZDsNCiAgICAgICAgTFBXU1RSIGxwRGVwZW5kZW5jaWVzOw0KICAgICAgICBMUFdT VFIgbHBTZXJ2aWNlU3RhcnROYW1lOw0KICAgICAgICBMUFdTVFIgbHBEaXNwbGF5TmFtZTsNCn0g UVVFUllfU0VSVklDRV9DT05GSUdXLCpMUFFVRVJZX1NFUlZJQ0VfQ09ORklHVzsNCnR5cGVkZWYg c3RydWN0IF9RVUVSWV9TRVJWSUNFX0xPQ0tfU1RBVFVTQSB7DQogICAgICAgIERXT1JEIGZJc0xv Y2tlZDsNCiAgICAgICAgTFBTVFIgbHBMb2NrT3duZXI7DQogICAgICAgIERXT1JEIGR3TG9ja0R1 cmF0aW9uOw0KfSBRVUVSWV9TRVJWSUNFX0xPQ0tfU1RBVFVTQSwqTFBRVUVSWV9TRVJWSUNFX0xP Q0tfU1RBVFVTQTsNCnR5cGVkZWYgc3RydWN0IF9RVUVSWV9TRVJWSUNFX0xPQ0tfU1RBVFVTVyB7 DQogICAgICAgIERXT1JEIGZJc0xvY2tlZDsNCiAgICAgICAgTFBXU1RSIGxwTG9ja093bmVyOw0K ICAgICAgICBEV09SRCBkd0xvY2tEdXJhdGlvbjsNCn0gUVVFUllfU0VSVklDRV9MT0NLX1NUQVRV U1csKkxQUVVFUllfU0VSVklDRV9MT0NLX1NUQVRVU1c7DQp0eXBlZGVmIHZvaWQgKF9fYXR0cmli dXRlX18oKF9fc3RkY2FsbF9fKSkgKkxQU0VSVklDRV9NQUlOX0ZVTkNUSU9OQSkoRFdPUkQsTFBT VFIqKTsNCnR5cGVkZWYgdm9pZCAoX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSAqTFBTRVJW SUNFX01BSU5fRlVOQ1RJT05XKShEV09SRCxMUFdTVFIqKTsNCnR5cGVkZWYgc3RydWN0IF9TRVJW SUNFX1RBQkxFX0VOVFJZQSB7DQogICAgICAgIExQU1RSIGxwU2VydmljZU5hbWU7DQogICAgICAg IExQU0VSVklDRV9NQUlOX0ZVTkNUSU9OQSBscFNlcnZpY2VQcm9jOw0KfSBTRVJWSUNFX1RBQkxF X0VOVFJZQSwqTFBTRVJWSUNFX1RBQkxFX0VOVFJZQTsNCnR5cGVkZWYgc3RydWN0IF9TRVJWSUNF X1RBQkxFX0VOVFJZVyB7DQogICAgICAgIExQV1NUUiBscFNlcnZpY2VOYW1lOw0KICAgICAgICBM UFNFUlZJQ0VfTUFJTl9GVU5DVElPTlcgbHBTZXJ2aWNlUHJvYzsNCn0gU0VSVklDRV9UQUJMRV9F TlRSWVcsKkxQU0VSVklDRV9UQUJMRV9FTlRSWVc7DQp0eXBlZGVmIHN0cnVjdCBTQ19IQU5ETEVf X3tpbnQgaTt9KlNDX0hBTkRMRTsNCnR5cGVkZWYgU0NfSEFORExFICpMUFNDX0hBTkRMRTsNCnR5 cGVkZWYgUFZPSUQgU0NfTE9DSzsNCnR5cGVkZWYgRFdPUkQgU0VSVklDRV9TVEFUVVNfSEFORExF Ow0KdHlwZWRlZiB2b2lkKF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgKkxQSEFORExFUl9G VU5DVElPTikoRFdPUkQpOw0KDQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQ2hh bmdlU2VydmljZUNvbmZpZ0EoU0NfSEFORExFLERXT1JELERXT1JELERXT1JELExQQ1NUUixMUENT VFIsTFBEV09SRCxMUENTVFIsTFBDU1RSLExQQ1NUUixMUENTVFIpOw0KQk9PTCBfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpIENoYW5nZVNlcnZpY2VDb25maWdXKFNDX0hBTkRMRSxEV09SRCxE V09SRCxEV09SRCxMUENXU1RSLExQQ1dTVFIsTFBEV09SRCxMUENXU1RSLExQQ1dTVFIsTFBDV1NU UixMUENXU1RSKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBDbG9zZVNlcnZp Y2VIYW5kbGUoU0NfSEFORExFKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBD b250cm9sU2VydmljZShTQ19IQU5ETEUsRFdPUkQsTFBTRVJWSUNFX1NUQVRVUyk7DQpTQ19IQU5E TEUgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBDcmVhdGVTZXJ2aWNlQShTQ19IQU5ETEUs TFBDU1RSLExQQ1NUUixEV09SRCxEV09SRCxEV09SRCxEV09SRCxMUENTVFIsTFBDU1RSLFBEV09S RCxMUENTVFIsTFBDU1RSLExQQ1NUUik7DQpTQ19IQU5ETEUgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBDcmVhdGVTZXJ2aWNlVyhTQ19IQU5ETEUsTFBDV1NUUixMUENXU1RSLERXT1JELERX T1JELERXT1JELERXT1JELExQQ1dTVFIsTFBDV1NUUixQRFdPUkQsTFBDV1NUUixMUENXU1RSLExQ Q1dTVFIpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIERlbGV0ZVNlcnZpY2Uo U0NfSEFORExFKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBFbnVtRGVwZW5k ZW50U2VydmljZXNBKFNDX0hBTkRMRSxEV09SRCxMUEVOVU1fU0VSVklDRV9TVEFUVVNBLERXT1JE LFBEV09SRCxQRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEVudW1E ZXBlbmRlbnRTZXJ2aWNlc1coU0NfSEFORExFLERXT1JELExQRU5VTV9TRVJWSUNFX1NUQVRVU1cs RFdPUkQsUERXT1JELFBEV09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg RW51bVNlcnZpY2VzU3RhdHVzQShTQ19IQU5ETEUsRFdPUkQsRFdPUkQsTFBFTlVNX1NFUlZJQ0Vf U1RBVFVTQSxEV09SRCxQRFdPUkQsUERXT1JELFBEV09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18o KF9fc3RkY2FsbF9fKSkgRW51bVNlcnZpY2VzU3RhdHVzVyhTQ19IQU5ETEUsRFdPUkQsRFdPUkQs TFBFTlVNX1NFUlZJQ0VfU1RBVFVTVyxEV09SRCxQRFdPUkQsUERXT1JELFBEV09SRCk7DQpCT09M IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0U2VydmljZURpc3BsYXlOYW1lQShTQ19I QU5ETEUsTFBDU1RSLExQU1RSLFBEV09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2Fs bF9fKSkgR2V0U2VydmljZURpc3BsYXlOYW1lVyhTQ19IQU5ETEUsTFBDV1NUUixMUFdTVFIsUERX T1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRTZXJ2aWNlS2V5TmFt ZUEoU0NfSEFORExFLExQQ1NUUixMUFNUUixQRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIEdldFNlcnZpY2VLZXlOYW1lVyhTQ19IQU5ETEUsTFBDV1NUUixMUFdTVFIs UERXT1JEKTsNClNDX0xPQ0sgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBMb2NrU2Vydmlj ZURhdGFiYXNlKFNDX0hBTkRMRSk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg Tm90aWZ5Qm9vdENvbmZpZ1N0YXR1cyhCT09MKTsNClNDX0hBTkRMRSBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIE9wZW5TQ01hbmFnZXJBKExQQ1NUUixMUENTVFIsRFdPUkQpOw0KU0NfSEFO RExFIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgT3BlblNDTWFuYWdlclcoTFBDV1NUUixM UENXU1RSLERXT1JEKTsNClNDX0hBTkRMRSBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIE9w ZW5TZXJ2aWNlQShTQ19IQU5ETEUsTFBDU1RSLERXT1JEKTsNClNDX0hBTkRMRSBfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpIE9wZW5TZXJ2aWNlVyhTQ19IQU5ETEUsTFBDV1NUUixEV09SRCk7 DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUXVlcnlTZXJ2aWNlQ29uZmlnQShT Q19IQU5ETEUsTFBRVUVSWV9TRVJWSUNFX0NPTkZJR0EsRFdPUkQsUERXT1JEKTsNCkJPT0wgX19h dHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBRdWVyeVNlcnZpY2VDb25maWdXKFNDX0hBTkRMRSxM UFFVRVJZX1NFUlZJQ0VfQ09ORklHVyxEV09SRCxQRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIFF1ZXJ5U2VydmljZUxvY2tTdGF0dXNBKFNDX0hBTkRMRSxMUFFVRVJZ X1NFUlZJQ0VfTE9DS19TVEFUVVNBLERXT1JELFBEV09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18o KF9fc3RkY2FsbF9fKSkgUXVlcnlTZXJ2aWNlTG9ja1N0YXR1c1coU0NfSEFORExFLExQUVVFUllf U0VSVklDRV9MT0NLX1NUQVRVU1csRFdPUkQsUERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSBRdWVyeVNlcnZpY2VPYmplY3RTZWN1cml0eShTQ19IQU5ETEUsU0VDVVJJ VFlfSU5GT1JNQVRJT04sUFNFQ1VSSVRZX0RFU0NSSVBUT1IsRFdPUkQsTFBEV09SRCk7DQpCT09M IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUXVlcnlTZXJ2aWNlU3RhdHVzKFNDX0hBTkRM RSxMUFNFUlZJQ0VfU1RBVFVTKTsNClNFUlZJQ0VfU1RBVFVTX0hBTkRMRSBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIFJlZ2lzdGVyU2VydmljZUN0cmxIYW5kbGVyQShMUENTVFIsTFBIQU5E TEVSX0ZVTkNUSU9OKTsNClNFUlZJQ0VfU1RBVFVTX0hBTkRMRSBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIFJlZ2lzdGVyU2VydmljZUN0cmxIYW5kbGVyVyhMUENXU1RSLExQSEFORExFUl9G VU5DVElPTik7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0U2VydmljZU9i amVjdFNlY3VyaXR5KFNDX0hBTkRMRSxTRUNVUklUWV9JTkZPUk1BVElPTixQU0VDVVJJVFlfREVT Q1JJUFRPUik7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0U2VydmljZVN0 YXR1cyhTRVJWSUNFX1NUQVRVU19IQU5ETEUsTFBTRVJWSUNFX1NUQVRVUyk7DQpCT09MIF9fYXR0 cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU3RhcnRTZXJ2aWNlQShTQ19IQU5ETEUsRFdPUkQsTFBD U1RSKik7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU3RhcnRTZXJ2aWNlQ3Ry bERpc3BhdGNoZXJBKExQU0VSVklDRV9UQUJMRV9FTlRSWUEpOw0KQk9PTCBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIFN0YXJ0U2VydmljZUN0cmxEaXNwYXRjaGVyVyhMUFNFUlZJQ0VfVEFC TEVfRU5UUllXKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBTdGFydFNlcnZp Y2VXKFNDX0hBTkRMRSxEV09SRCxMUENXU1RSKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBVbmxvY2tTZXJ2aWNlRGF0YWJhc2UoU0NfTE9DSyk7DQojIDE3NyAidDovbXN5cy8x LjAvbWluZ3cvaW5jbHVkZS93aW5zdmMuaCIgMw0KdHlwZWRlZiBFTlVNX1NFUlZJQ0VfU1RBVFVT QSBFTlVNX1NFUlZJQ0VfU1RBVFVTLCpMUEVOVU1fU0VSVklDRV9TVEFUVVM7DQp0eXBlZGVmIFFV RVJZX1NFUlZJQ0VfQ09ORklHQSBRVUVSWV9TRVJWSUNFX0NPTkZJRywqTFBRVUVSWV9TRVJWSUNF X0NPTkZJRzsNCnR5cGVkZWYgUVVFUllfU0VSVklDRV9MT0NLX1NUQVRVU0EgUVVFUllfU0VSVklD RV9MT0NLX1NUQVRVUywqTFBRVUVSWV9TRVJWSUNFX0xPQ0tfU1RBVFVTOw0KdHlwZWRlZiBTRVJW SUNFX1RBQkxFX0VOVFJZQSBTRVJWSUNFX1RBQkxFX0VOVFJZLCpMUFNFUlZJQ0VfVEFCTEVfRU5U Ulk7DQp0eXBlZGVmIExQU0VSVklDRV9NQUlOX0ZVTkNUSU9OQSBMUFNFUlZJQ0VfTUFJTl9GVU5D VElPTjsNCiMgMjAwICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL3dpbnN2Yy5oIiAzDQp9DQoj IDEyMyAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS93aW5kb3dzLmgiIDIgMw0KDQoNCg0KIyAx ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2NvbW1kbGcuaCIgMSAzDQoNCg0KDQpleHRlcm4g IkMiIHsNCg0KI3ByYWdtYSBwYWNrKHB1c2gsMSkNCiMgMjAyICJ0Oi9tc3lzLzEuMC9taW5ndy9p bmNsdWRlL2NvbW1kbGcuaCIgMw0KdHlwZWRlZiBVSU5UIChfX2F0dHJpYnV0ZV9fKChfX3N0ZGNh bGxfXykpICpfX0NESE9PS1BST0MpKEhXTkQsVUlOVCxXUEFSQU0sTFBBUkFNKTsNCnR5cGVkZWYg X19DREhPT0tQUk9DIExQQ0NIT09LUFJPQzsNCnR5cGVkZWYgX19DREhPT0tQUk9DIExQQ0ZIT09L UFJPQzsNCnR5cGVkZWYgX19DREhPT0tQUk9DIExQRlJIT09LUFJPQzsNCnR5cGVkZWYgX19DREhP T0tQUk9DIExQT0ZOSE9PS1BST0M7DQp0eXBlZGVmIF9fQ0RIT09LUFJPQyBMUFBBR0VQQUlOVEhP T0s7DQp0eXBlZGVmIF9fQ0RIT09LUFJPQyBMUFBBR0VTRVRVUEhPT0s7DQp0eXBlZGVmIF9fQ0RI T09LUFJPQyBMUFNFVFVQSE9PS1BST0M7DQp0eXBlZGVmIF9fQ0RIT09LUFJPQyBMUFBSSU5USE9P S1BST0M7DQp0eXBlZGVmIHN0cnVjdCB0YWdDSE9PU0VDT0xPUkEgew0KICAgICAgICBEV09SRCBs U3RydWN0U2l6ZTsNCiAgICAgICAgSFdORCBod25kT3duZXI7DQogICAgICAgIEhXTkQgaEluc3Rh bmNlOw0KICAgICAgICBDT0xPUlJFRiByZ2JSZXN1bHQ7DQogICAgICAgIENPTE9SUkVGKiBscEN1 c3RDb2xvcnM7DQogICAgICAgIERXT1JEIEZsYWdzOw0KICAgICAgICBMUEFSQU0gbEN1c3REYXRh Ow0KICAgICAgICBMUENDSE9PS1BST0MgbHBmbkhvb2s7DQogICAgICAgIExQQ1NUUiBscFRlbXBs YXRlTmFtZTsNCn0gQ0hPT1NFQ09MT1JBLCpMUENIT09TRUNPTE9SQTsNCnR5cGVkZWYgc3RydWN0 IHRhZ0NIT09TRUNPTE9SVyB7DQogICAgICAgIERXT1JEIGxTdHJ1Y3RTaXplOw0KICAgICAgICBI V05EIGh3bmRPd25lcjsNCiAgICAgICAgSFdORCBoSW5zdGFuY2U7DQogICAgICAgIENPTE9SUkVG IHJnYlJlc3VsdDsNCiAgICAgICAgQ09MT1JSRUYqIGxwQ3VzdENvbG9yczsNCiAgICAgICAgRFdP UkQgRmxhZ3M7DQogICAgICAgIExQQVJBTSBsQ3VzdERhdGE7DQogICAgICAgIExQQ0NIT09LUFJP QyBscGZuSG9vazsNCiAgICAgICAgTFBDV1NUUiBscFRlbXBsYXRlTmFtZTsNCn0gQ0hPT1NFQ09M T1JXLCpMUENIT09TRUNPTE9SVzsNCnR5cGVkZWYgc3RydWN0IHRhZ0NIT09TRUZPTlRBIHsNCiAg ICAgICAgRFdPUkQgbFN0cnVjdFNpemU7DQogICAgICAgIEhXTkQgaHduZE93bmVyOw0KICAgICAg ICBIREMgaERDOw0KICAgICAgICBMUExPR0ZPTlRBIGxwTG9nRm9udDsNCiAgICAgICAgSU5UIGlQ b2ludFNpemU7DQogICAgICAgIERXT1JEIEZsYWdzOw0KICAgICAgICBEV09SRCByZ2JDb2xvcnM7 DQogICAgICAgIExQQVJBTSBsQ3VzdERhdGE7DQogICAgICAgIExQQ0ZIT09LUFJPQyBscGZuSG9v azsNCiAgICAgICAgTFBDU1RSIGxwVGVtcGxhdGVOYW1lOw0KICAgICAgICBISU5TVEFOQ0UgaElu c3RhbmNlOw0KICAgICAgICBMUFNUUiBscHN6U3R5bGU7DQogICAgICAgIFdPUkQgbkZvbnRUeXBl Ow0KICAgICAgICBXT1JEIF9fX01JU1NJTkdfQUxJR05NRU5UX187DQogICAgICAgIElOVCBuU2l6 ZU1pbjsNCiAgICAgICAgSU5UIG5TaXplTWF4Ow0KfSBDSE9PU0VGT05UQSwqTFBDSE9PU0VGT05U QTsNCnR5cGVkZWYgc3RydWN0IHRhZ0NIT09TRUZPTlRXIHsNCiAgICAgICAgRFdPUkQgbFN0cnVj dFNpemU7DQogICAgICAgIEhXTkQgaHduZE93bmVyOw0KICAgICAgICBIREMgaERDOw0KICAgICAg ICBMUExPR0ZPTlRXIGxwTG9nRm9udDsNCiAgICAgICAgSU5UIGlQb2ludFNpemU7DQogICAgICAg IERXT1JEIEZsYWdzOw0KICAgICAgICBEV09SRCByZ2JDb2xvcnM7DQogICAgICAgIExQQVJBTSBs Q3VzdERhdGE7DQogICAgICAgIExQQ0ZIT09LUFJPQyBscGZuSG9vazsNCiAgICAgICAgTFBDV1NU UiBscFRlbXBsYXRlTmFtZTsNCiAgICAgICAgSElOU1RBTkNFIGhJbnN0YW5jZTsNCiAgICAgICAg TFBXU1RSIGxwc3pTdHlsZTsNCiAgICAgICAgV09SRCBuRm9udFR5cGU7DQogICAgICAgIFdPUkQg X19fTUlTU0lOR19BTElHTk1FTlRfXzsNCiAgICAgICAgSU5UIG5TaXplTWluOw0KICAgICAgICBJ TlQgblNpemVNYXg7DQp9IENIT09TRUZPTlRXLCpMUENIT09TRUZPTlRXOw0KdHlwZWRlZiBzdHJ1 Y3QgdGFnREVWTkFNRVMgew0KICAgICAgICBXT1JEIHdEcml2ZXJPZmZzZXQ7DQogICAgICAgIFdP UkQgd0RldmljZU9mZnNldDsNCiAgICAgICAgV09SRCB3T3V0cHV0T2Zmc2V0Ow0KICAgICAgICBX T1JEIHdEZWZhdWx0Ow0KfSBERVZOQU1FUywqTFBERVZOQU1FUzsNCnR5cGVkZWYgc3RydWN0IHsN CiAgICAgICAgRFdPUkQgbFN0cnVjdFNpemU7DQogICAgICAgIEhXTkQgaHduZE93bmVyOw0KICAg ICAgICBISU5TVEFOQ0UgaEluc3RhbmNlOw0KICAgICAgICBEV09SRCBGbGFnczsNCiAgICAgICAg TFBTVFIgbHBzdHJGaW5kV2hhdDsNCiAgICAgICAgTFBTVFIgbHBzdHJSZXBsYWNlV2l0aDsNCiAg ICAgICAgV09SRCB3RmluZFdoYXRMZW47DQogICAgICAgIFdPUkQgd1JlcGxhY2VXaXRoTGVuOw0K ICAgICAgICBMUEFSQU0gbEN1c3REYXRhOw0KICAgICAgICBMUEZSSE9PS1BST0MgbHBmbkhvb2s7 DQogICAgICAgIExQQ1NUUiBscFRlbXBsYXRlTmFtZTsNCn0gRklORFJFUExBQ0VBLCpMUEZJTkRS RVBMQUNFQTsNCnR5cGVkZWYgc3RydWN0IHsNCiAgICAgICAgRFdPUkQgbFN0cnVjdFNpemU7DQog ICAgICAgIEhXTkQgaHduZE93bmVyOw0KICAgICAgICBISU5TVEFOQ0UgaEluc3RhbmNlOw0KICAg ICAgICBEV09SRCBGbGFnczsNCiAgICAgICAgTFBXU1RSIGxwc3RyRmluZFdoYXQ7DQogICAgICAg IExQV1NUUiBscHN0clJlcGxhY2VXaXRoOw0KICAgICAgICBXT1JEIHdGaW5kV2hhdExlbjsNCiAg ICAgICAgV09SRCB3UmVwbGFjZVdpdGhMZW47DQogICAgICAgIExQQVJBTSBsQ3VzdERhdGE7DQog ICAgICAgIExQRlJIT09LUFJPQyBscGZuSG9vazsNCiAgICAgICAgTFBDV1NUUiBscFRlbXBsYXRl TmFtZTsNCn0gRklORFJFUExBQ0VXLCpMUEZJTkRSRVBMQUNFVzsNCnR5cGVkZWYgc3RydWN0IHRh Z09GTkEgew0KICAgICAgICBEV09SRCBsU3RydWN0U2l6ZTsNCiAgICAgICAgSFdORCBod25kT3du ZXI7DQogICAgICAgIEhJTlNUQU5DRSBoSW5zdGFuY2U7DQogICAgICAgIExQQ1NUUiBscHN0ckZp bHRlcjsNCiAgICAgICAgTFBTVFIgbHBzdHJDdXN0b21GaWx0ZXI7DQogICAgICAgIERXT1JEIG5N YXhDdXN0RmlsdGVyOw0KICAgICAgICBEV09SRCBuRmlsdGVySW5kZXg7DQogICAgICAgIExQU1RS IGxwc3RyRmlsZTsNCiAgICAgICAgRFdPUkQgbk1heEZpbGU7DQogICAgICAgIExQU1RSIGxwc3Ry RmlsZVRpdGxlOw0KICAgICAgICBEV09SRCBuTWF4RmlsZVRpdGxlOw0KICAgICAgICBMUENTVFIg bHBzdHJJbml0aWFsRGlyOw0KICAgICAgICBMUENTVFIgbHBzdHJUaXRsZTsNCiAgICAgICAgRFdP UkQgRmxhZ3M7DQogICAgICAgIFdPUkQgbkZpbGVPZmZzZXQ7DQogICAgICAgIFdPUkQgbkZpbGVF eHRlbnNpb247DQogICAgICAgIExQQ1NUUiBscHN0ckRlZkV4dDsNCiAgICAgICAgRFdPUkQgbEN1 c3REYXRhOw0KICAgICAgICBMUE9GTkhPT0tQUk9DIGxwZm5Ib29rOw0KICAgICAgICBMUENTVFIg bHBUZW1wbGF0ZU5hbWU7DQp9IE9QRU5GSUxFTkFNRUEsKkxQT1BFTkZJTEVOQU1FQTsNCnR5cGVk ZWYgc3RydWN0IHRhZ09GTlcgew0KICAgICAgICBEV09SRCBsU3RydWN0U2l6ZTsNCiAgICAgICAg SFdORCBod25kT3duZXI7DQogICAgICAgIEhJTlNUQU5DRSBoSW5zdGFuY2U7DQogICAgICAgIExQ Q1dTVFIgbHBzdHJGaWx0ZXI7DQogICAgICAgIExQV1NUUiBscHN0ckN1c3RvbUZpbHRlcjsNCiAg ICAgICAgRFdPUkQgbk1heEN1c3RGaWx0ZXI7DQogICAgICAgIERXT1JEIG5GaWx0ZXJJbmRleDsN CiAgICAgICAgTFBXU1RSIGxwc3RyRmlsZTsNCiAgICAgICAgRFdPUkQgbk1heEZpbGU7DQogICAg ICAgIExQV1NUUiBscHN0ckZpbGVUaXRsZTsNCiAgICAgICAgRFdPUkQgbk1heEZpbGVUaXRsZTsN CiAgICAgICAgTFBDV1NUUiBscHN0ckluaXRpYWxEaXI7DQogICAgICAgIExQQ1dTVFIgbHBzdHJU aXRsZTsNCiAgICAgICAgRFdPUkQgRmxhZ3M7DQogICAgICAgIFdPUkQgbkZpbGVPZmZzZXQ7DQog ICAgICAgIFdPUkQgbkZpbGVFeHRlbnNpb247DQogICAgICAgIExQQ1dTVFIgbHBzdHJEZWZFeHQ7 DQogICAgICAgIERXT1JEIGxDdXN0RGF0YTsNCiAgICAgICAgTFBPRk5IT09LUFJPQyBscGZuSG9v azsNCiAgICAgICAgTFBDV1NUUiBscFRlbXBsYXRlTmFtZTsNCn0gT1BFTkZJTEVOQU1FVywqTFBP UEVORklMRU5BTUVXOw0KdHlwZWRlZiBzdHJ1Y3QgX09GTk9USUZZQSB7DQogICAgICAgIE5NSERS IGhkcjsNCiAgICAgICAgTFBPUEVORklMRU5BTUVBIGxwT0ZOOw0KICAgICAgICBMUFNUUiBwc3pG aWxlOw0KfSBPRk5PVElGWUEsKkxQT0ZOT1RJRllBOw0KdHlwZWRlZiBzdHJ1Y3QgX09GTk9USUZZ VyB7DQogICAgICAgIE5NSERSIGhkcjsNCiAgICAgICAgTFBPUEVORklMRU5BTUVXIGxwT0ZOOw0K ICAgICAgICBMUFdTVFIgcHN6RmlsZTsNCn0gT0ZOT1RJRllXLCpMUE9GTk9USUZZVzsNCnR5cGVk ZWYgc3RydWN0IHRhZ1BTREEgew0KICAgICAgICBEV09SRCBsU3RydWN0U2l6ZTsNCiAgICAgICAg SFdORCBod25kT3duZXI7DQogICAgICAgIEhHTE9CQUwgaERldk1vZGU7DQogICAgICAgIEhHTE9C QUwgaERldk5hbWVzOw0KICAgICAgICBEV09SRCBGbGFnczsNCiAgICAgICAgUE9JTlQgcHRQYXBl clNpemU7DQogICAgICAgIFJFQ1QgcnRNaW5NYXJnaW47DQogICAgICAgIFJFQ1QgcnRNYXJnaW47 DQogICAgICAgIEhJTlNUQU5DRSBoSW5zdGFuY2U7DQogICAgICAgIExQQVJBTSBsQ3VzdERhdGE7 DQogICAgICAgIExQUEFHRVNFVFVQSE9PSyBscGZuUGFnZVNldHVwSG9vazsNCiAgICAgICAgTFBQ QUdFUEFJTlRIT09LIGxwZm5QYWdlUGFpbnRIb29rOw0KICAgICAgICBMUENTVFIgbHBQYWdlU2V0 dXBUZW1wbGF0ZU5hbWU7DQogICAgICAgIEhHTE9CQUwgaFBhZ2VTZXR1cFRlbXBsYXRlOw0KfSBQ QUdFU0VUVVBETEdBLCpMUFBBR0VTRVRVUERMR0E7DQp0eXBlZGVmIHN0cnVjdCB0YWdQU0RXIHsN CiAgICAgICAgRFdPUkQgbFN0cnVjdFNpemU7DQogICAgICAgIEhXTkQgaHduZE93bmVyOw0KICAg ICAgICBIR0xPQkFMIGhEZXZNb2RlOw0KICAgICAgICBIR0xPQkFMIGhEZXZOYW1lczsNCiAgICAg ICAgRFdPUkQgRmxhZ3M7DQogICAgICAgIFBPSU5UIHB0UGFwZXJTaXplOw0KICAgICAgICBSRUNU IHJ0TWluTWFyZ2luOw0KICAgICAgICBSRUNUIHJ0TWFyZ2luOw0KICAgICAgICBISU5TVEFOQ0Ug aEluc3RhbmNlOw0KICAgICAgICBMUEFSQU0gbEN1c3REYXRhOw0KICAgICAgICBMUFBBR0VTRVRV UEhPT0sgbHBmblBhZ2VTZXR1cEhvb2s7DQogICAgICAgIExQUEFHRVBBSU5USE9PSyBscGZuUGFn ZVBhaW50SG9vazsNCiAgICAgICAgTFBDV1NUUiBscFBhZ2VTZXR1cFRlbXBsYXRlTmFtZTsNCiAg ICAgICAgSEdMT0JBTCBoUGFnZVNldHVwVGVtcGxhdGU7DQp9IFBBR0VTRVRVUERMR1csKkxQUEFH RVNFVFVQRExHVzsNCnR5cGVkZWYgc3RydWN0IHRhZ1BEQSB7DQogICAgICAgIERXT1JEIGxTdHJ1 Y3RTaXplOw0KICAgICAgICBIV05EIGh3bmRPd25lcjsNCiAgICAgICAgSEFORExFIGhEZXZNb2Rl Ow0KICAgICAgICBIQU5ETEUgaERldk5hbWVzOw0KICAgICAgICBIREMgaERDOw0KICAgICAgICBE V09SRCBGbGFnczsNCiAgICAgICAgV09SRCBuRnJvbVBhZ2U7DQogICAgICAgIFdPUkQgblRvUGFn ZTsNCiAgICAgICAgV09SRCBuTWluUGFnZTsNCiAgICAgICAgV09SRCBuTWF4UGFnZTsNCiAgICAg ICAgV09SRCBuQ29waWVzOw0KICAgICAgICBISU5TVEFOQ0UgaEluc3RhbmNlOw0KICAgICAgICBE V09SRCBsQ3VzdERhdGE7DQogICAgICAgIExQUFJJTlRIT09LUFJPQyBscGZuUHJpbnRIb29rOw0K ICAgICAgICBMUFNFVFVQSE9PS1BST0MgbHBmblNldHVwSG9vazsNCiAgICAgICAgTFBDU1RSIGxw UHJpbnRUZW1wbGF0ZU5hbWU7DQogICAgICAgIExQQ1NUUiBscFNldHVwVGVtcGxhdGVOYW1lOw0K ICAgICAgICBIQU5ETEUgaFByaW50VGVtcGxhdGU7DQogICAgICAgIEhBTkRMRSBoU2V0dXBUZW1w bGF0ZTsNCn0gUFJJTlRETEdBLCpMUFBSSU5URExHQTsNCnR5cGVkZWYgc3RydWN0IHRhZ1BEVyB7 DQogICAgICAgIERXT1JEIGxTdHJ1Y3RTaXplOw0KICAgICAgICBIV05EIGh3bmRPd25lcjsNCiAg ICAgICAgSEFORExFIGhEZXZNb2RlOw0KICAgICAgICBIQU5ETEUgaERldk5hbWVzOw0KICAgICAg ICBIREMgaERDOw0KICAgICAgICBEV09SRCBGbGFnczsNCiAgICAgICAgV09SRCBuRnJvbVBhZ2U7 DQogICAgICAgIFdPUkQgblRvUGFnZTsNCiAgICAgICAgV09SRCBuTWluUGFnZTsNCiAgICAgICAg V09SRCBuTWF4UGFnZTsNCiAgICAgICAgV09SRCBuQ29waWVzOw0KICAgICAgICBISU5TVEFOQ0Ug aEluc3RhbmNlOw0KICAgICAgICBEV09SRCBsQ3VzdERhdGE7DQogICAgICAgIExQUFJJTlRIT09L UFJPQyBscGZuUHJpbnRIb29rOw0KICAgICAgICBMUFNFVFVQSE9PS1BST0MgbHBmblNldHVwSG9v azsNCiAgICAgICAgTFBDV1NUUiBscFByaW50VGVtcGxhdGVOYW1lOw0KICAgICAgICBMUENXU1RS IGxwU2V0dXBUZW1wbGF0ZU5hbWU7DQogICAgICAgIEhBTkRMRSBoUHJpbnRUZW1wbGF0ZTsNCiAg ICAgICAgSEFORExFIGhTZXR1cFRlbXBsYXRlOw0KfSBQUklOVERMR1csKkxQUFJJTlRETEdXOw0K DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQ2hvb3NlQ29sb3JBKExQQ0hPT1NF Q09MT1JBKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBDaG9vc2VDb2xvclco TFBDSE9PU0VDT0xPUlcpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIENob29z ZUZvbnRBKExQQ0hPT1NFRk9OVEEpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykp IENob29zZUZvbnRXKExQQ0hPT1NFRk9OVFcpOw0KRFdPUkQgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBDb21tRGxnRXh0ZW5kZWRFcnJvcih2b2lkKTsNCkhXTkQgX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSBGaW5kVGV4dEEoTFBGSU5EUkVQTEFDRUEpOw0KSFdORCBfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpIEZpbmRUZXh0VyhMUEZJTkRSRVBMQUNFVyk7DQpzaG9ydCBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldEZpbGVUaXRsZUEoTFBDU1RSLExQU1RSLFdPUkQp Ow0Kc2hvcnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRGaWxlVGl0bGVXKExQQ1dT VFIsTFBXU1RSLFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldE9w ZW5GaWxlTmFtZUEoTFBPUEVORklMRU5BTUVBKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBHZXRPcGVuRmlsZU5hbWVXKExQT1BFTkZJTEVOQU1FVyk7DQpCT09MIF9fYXR0cmli dXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0U2F2ZUZpbGVOYW1lQShMUE9QRU5GSUxFTkFNRUEpOw0K Qk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldFNhdmVGaWxlTmFtZVcoTFBPUEVO RklMRU5BTUVXKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBQYWdlU2V0dXBE bGdBKExQUEFHRVNFVFVQRExHQSk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg UGFnZVNldHVwRGxnVyhMUFBBR0VTRVRVUERMR1cpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIFByaW50RGxnQShMUFBSSU5URExHQSk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgUHJpbnREbGdXKExQUFJJTlRETEdXKTsNCkhXTkQgX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSBSZXBsYWNlVGV4dEEoTFBGSU5EUkVQTEFDRUEpOw0KSFdORCBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJlcGxhY2VUZXh0VyhMUEZJTkRSRVBMQUNFVyk7DQojIDQ4 MiAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9jb21tZGxnLmgiIDMNCnR5cGVkZWYgQ0hPT1NF Q09MT1JBIENIT09TRUNPTE9SLCpMUENIT09TRUNPTE9SOw0KdHlwZWRlZiBDSE9PU0VGT05UQSBD SE9PU0VGT05ULCpMUENIT09TRUZPTlQ7DQp0eXBlZGVmIEZJTkRSRVBMQUNFQSBGSU5EUkVQTEFD RSwqTFBGSU5EUkVQTEFDRTsNCnR5cGVkZWYgT1BFTkZJTEVOQU1FQSBPUEVORklMRU5BTUUsKkxQ T1BFTkZJTEVOQU1FOw0KdHlwZWRlZiBPRk5PVElGWUEgT0ZOT1RJRlksKkxQT0ZOT1RJRlk7DQp0 eXBlZGVmIFBBR0VTRVRVUERMR0EgUEFHRVNFVFVQRExHLCpMUFBBR0VTRVRVUERMRzsNCnR5cGVk ZWYgUFJJTlRETEdBIFBSSU5URExHLCpMUFBSSU5URExHOw0KIyA0OTkgInQ6L21zeXMvMS4wL21p bmd3L2luY2x1ZGUvY29tbWRsZy5oIiAzDQojcHJhZ21hIHBhY2socG9wKQ0KDQp9DQojIDEyNyAi dDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS93aW5kb3dzLmgiIDIgMw0KIyAxICJ0Oi9tc3lzLzEu MC9taW5ndy9pbmNsdWRlL2NkZXJyLmgiIDEgMw0KIyAxMjggInQ6L21zeXMvMS4wL21pbmd3L2lu Y2x1ZGUvd2luZG93cy5oIiAyIDMNCiMgMSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9kZGUu aCIgMSAzDQoNCg0KDQpleHRlcm4gIkMiIHsNCiMgMTkgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1 ZGUvZGRlLmgiIDMNCnR5cGVkZWYgc3RydWN0IHsNCiAgICAgICAgdW5zaWduZWQgc2hvcnQgYkFw cFJldHVybkNvZGU6OCxyZXNlcnZlZDo2LGZCdXN5OjEsZkFjazoxOw0KfSBEREVBQ0s7DQp0eXBl ZGVmIHN0cnVjdCB7DQogICAgICAgIHVuc2lnbmVkIHNob3J0IHJlc2VydmVkOjE0LGZEZWZlclVw ZDoxLGZBY2tSZXE6MTsNCiAgICAgICAgc2hvcnQgY2ZGb3JtYXQ7DQp9IERERUFEVklTRTsNCnR5 cGVkZWYgc3RydWN0IHsNCiAgICAgICAgdW5zaWduZWQgc2hvcnQgdW51c2VkOjEyLGZSZXNwb25z ZToxLGZSZWxlYXNlOjEscmVzZXJ2ZWQ6MSxmQWNrUmVxOjE7DQogICAgICAgIHNob3J0IGNmRm9y bWF0Ow0KICAgICAgICBCWVRFIFZhbHVlWzFdOw0KfSBEREVEQVRBOw0KdHlwZWRlZiBzdHJ1Y3Qg ew0KICAgICAgICB1bnNpZ25lZCBzaG9ydCB1bnVzZWQ6MTMsZlJlbGVhc2U6MSxmUmVzZXJ2ZWQ6 MjsNCiAgICAgICAgc2hvcnQgY2ZGb3JtYXQ7DQogICAgICAgIEJZVEUgVmFsdWVbMV07DQp9IERE RVBPS0U7DQp0eXBlZGVmIHN0cnVjdCB7DQogICAgICAgIHVuc2lnbmVkIHNob3J0IHVudXNlZDox MywNCiAgICAgICAgICAgICAgICAgZlJlbGVhc2U6MSwNCiAgICAgICAgICAgICAgICAgZkRlZmVy VXBkOjEsDQogICAgICAgICBmQWNrUmVxOjE7DQogICAgc2hvcnQgY2ZGb3JtYXQ7DQp9IERERUxO Ow0KDQp0eXBlZGVmIHN0cnVjdCB7DQogICAgICAgIHVuc2lnbmVkIHNob3J0IHVudXNlZDoxMixm QWNrOjEsZlJlbGVhc2U6MSxmUmVzZXJ2ZWQ6MSxmQWNrUmVxOjE7DQogICAgc2hvcnQgY2ZGb3Jt YXQ7DQogICAgQllURSByZ2JbMV07DQp9IERERVVQOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIERkZVNldFF1YWxpdHlPZlNlcnZpY2UoSFdORCxjb25zdCBTRUNVUklUWV9RVUFM SVRZX09GX1NFUlZJQ0UqLFBTRUNVUklUWV9RVUFMSVRZX09GX1NFUlZJQ0UpOw0KQk9PTCBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEltcGVyc29uYXRlRGRlQ2xpZW50V2luZG93KEhXTkQs SFdORCk7DQpMT05HIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUGFja0RERWxQYXJhbShV SU5ULFVJTlQsVUlOVCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgVW5wYWNr RERFbFBhcmFtKFVJTlQsTE9ORyxQVUlOVCxQVUlOVCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgRnJlZURERWxQYXJhbShVSU5ULExPTkcpOw0KTE9ORyBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIFJldXNlRERFbFBhcmFtKExPTkcsVUlOVCxVSU5ULFVJTlQsVUlOVCk7 DQoNCg0KDQp9DQojIDEyOSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS93aW5kb3dzLmgiIDIg Mw0KIyAxICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2RkZW1sLmgiIDEgMw0KDQoNCg0KZXh0 ZXJuICJDIiB7DQojIDEzNyAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9kZGVtbC5oIiAzDQp0 eXBlZGVmIHN0cnVjdCBIQ09OVkxJU1RfX3tpbnQgaTt9KkhDT05WTElTVDsNCnR5cGVkZWYgc3Ry dWN0IEhDT05WX197aW50IGk7fSpIQ09OVjsNCnR5cGVkZWYgc3RydWN0IEhTWl9fe2ludCBpO30q SFNaOw0KdHlwZWRlZiBzdHJ1Y3QgSERERURBVEFfX3tpbnQgaTt9KkhEREVEQVRBOw0KdHlwZWRl ZiBIRERFREFUQSBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEZOQ0FMTEJBQ0soVUlOVCxV SU5ULEhDT05WLEhTWixIU1osSERERURBVEEsRFdPUkQsRFdPUkQpOw0KdHlwZWRlZiBIRERFREFU QShfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpICpQRk5DQUxMQkFDSykoVUlOVCxVSU5ULEhD T05WLEhTWixIU1osSERERURBVEEsRFdPUkQsRFdPUkQpOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnSFNa UEFJUiB7DQogICAgICAgIEhTWiBoc3pTdmM7DQogICAgICAgIEhTWiBoc3pUb3BpYzsNCn0gSFNa UEFJUiwgKlBIU1pQQUlSOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnQ09OVkNPTlRFWFQgew0KICAgICAg ICBVSU5UIGNiOw0KICAgICAgICBVSU5UIHdGbGFnczsNCiAgICAgICAgVUlOVCB3Q291bnRyeUlE Ow0KICAgICAgICBpbnQgaUNvZGVQYWdlOw0KICAgICAgICBEV09SRCBkd0xhbmdJRDsNCiAgICAg ICAgRFdPUkQgZHdTZWN1cml0eTsNCiAgICAgICAgU0VDVVJJVFlfUVVBTElUWV9PRl9TRVJWSUNF IHFvczsNCn0gQ09OVkNPTlRFWFQsKlBDT05WQ09OVEVYVDsNCnR5cGVkZWYgc3RydWN0IHRhZ0NP TlZJTkZPIHsNCiAgICAgICAgRFdPUkQgY2I7DQogICAgICAgIERXT1JEIGhVc2VyOw0KICAgICAg ICBIQ09OViBoQ29udlBhcnRuZXI7DQogICAgICAgIEhTWiBoc3pTdmNQYXJ0bmVyOw0KICAgICAg ICBIU1ogaHN6U2VydmljZVJlcTsNCiAgICAgICAgSFNaIGhzelRvcGljOw0KICAgICAgICBIU1og aHN6SXRlbTsNCiAgICAgICAgVUlOVCB3Rm10Ow0KICAgICAgICBVSU5UIHdUeXBlOw0KICAgICAg ICBVSU5UIHdTdGF0dXM7DQogICAgICAgIFVJTlQgd0NvbnZzdDsNCiAgICAgICAgVUlOVCB3TGFz dEVycm9yOw0KICAgICAgICBIQ09OVkxJU1QgaENvbnZMaXN0Ow0KICAgICAgICBDT05WQ09OVEVY VCBDb252Q3R4dDsNCiAgICAgICAgSFdORCBod25kOw0KICAgICAgICBIV05EIGh3bmRQYXJ0bmVy Ow0KfSBDT05WSU5GTywqUENPTlZJTkZPOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnRERFTUxfTVNHX0hP T0tfREFUQSB7DQogICAgICAgIFVJTlQgdWlMbzsNCiAgICAgICAgVUlOVCB1aUhpOw0KICAgICAg ICBEV09SRCBjYkRhdGE7DQogICAgICAgIERXT1JEIERhdGFbOF07DQp9IERERU1MX01TR19IT09L X0RBVEE7DQoNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBEZGVBYmFuZG9uVHJh bnNhY3Rpb24oRFdPUkQsSENPTlYsRFdPUkQpOw0KUEJZVEUgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBEZGVBY2Nlc3NEYXRhKEhEREVEQVRBLFBEV09SRCk7DQpIRERFREFUQSBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIERkZUFkZERhdGEoSERERURBVEEsUEJZVEUsRFdPUkQsRFdP UkQpOw0KSERERURBVEEgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBEZGVDbGllbnRUcmFu c2FjdGlvbihQQllURSxEV09SRCxIQ09OVixIU1osVUlOVCxVSU5ULERXT1JELFBEV09SRCk7DQpp bnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBEZGVDbXBTdHJpbmdIYW5kbGVzKEhTWixI U1opOw0KSENPTlYgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBEZGVDb25uZWN0KERXT1JE LEhTWixIU1osUENPTlZDT05URVhUKTsNCkhDT05WTElTVCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNh bGxfXykpIERkZUNvbm5lY3RMaXN0KERXT1JELEhTWixIU1osSENPTlZMSVNULFBDT05WQ09OVEVY VCk7DQpIRERFREFUQSBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIERkZUNyZWF0ZURhdGFI YW5kbGUoRFdPUkQsUEJZVEUsRFdPUkQsRFdPUkQsSFNaLFVJTlQsVUlOVCk7DQpIU1ogX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBEZGVDcmVhdGVTdHJpbmdIYW5kbGVBKERXT1JELExQQ1NU UixpbnQpOw0KSFNaIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRGRlQ3JlYXRlU3RyaW5n SGFuZGxlVyhEV09SRCxMUENXU1RSLGludCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2Fs bF9fKSkgRGRlRGlzY29ubmVjdChIQ09OVik7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2Fs bF9fKSkgRGRlRGlzY29ubmVjdExpc3QoSENPTlZMSVNUKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSBEZGVFbmFibGVDYWxsYmFjayhEV09SRCxIQ09OVixVSU5UKTsNCkJPT0wg X19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBEZGVGcmVlRGF0YUhhbmRsZShIRERFREFUQSk7 DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRGRlRnJlZVN0cmluZ0hhbmRsZShE V09SRCxIU1opOw0KRFdPUkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBEZGVHZXREYXRh KEhEREVEQVRBLFBCWVRFLERXT1JELERXT1JEKTsNClVJTlQgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBEZGVHZXRMYXN0RXJyb3IoRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIERkZUltcGVyc29uYXRlQ2xpZW50KEhDT05WKTsNClVJTlQgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBEZGVJbml0aWFsaXplQShQRFdPUkQsUEZOQ0FMTEJBQ0ssRFdPUkQs RFdPUkQpOw0KVUlOVCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIERkZUluaXRpYWxpemVX KFBEV09SRCxQRk5DQUxMQkFDSyxEV09SRCxEV09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgRGRlS2VlcFN0cmluZ0hhbmRsZShEV09SRCxIU1opOw0KSERERURBVEEgX19h dHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBEZGVOYW1lU2VydmljZShEV09SRCxIU1osSFNaLFVJ TlQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIERkZVBvc3RBZHZpc2UoRFdP UkQsSFNaLEhTWik7DQpVSU5UIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRGRlUXVlcnlD b252SW5mbyhIQ09OVixEV09SRCxQQ09OVklORk8pOw0KSENPTlYgX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBEZGVRdWVyeU5leHRTZXJ2ZXIoSENPTlZMSVNULEhDT05WKTsNCkRXT1JEIF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRGRlUXVlcnlTdHJpbmdBKERXT1JELEhTWixMUFNU UixEV09SRCxpbnQpOw0KRFdPUkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBEZGVRdWVy eVN0cmluZ1coRFdPUkQsSFNaLExQV1NUUixEV09SRCxpbnQpOw0KSENPTlYgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBEZGVSZWNvbm5lY3QoSENPTlYpOw0KQk9PTCBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIERkZVNldFVzZXJIYW5kbGUoSENPTlYsRFdPUkQsRFdPUkQpOw0KQk9P TCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIERkZVVuYWNjZXNzRGF0YShIRERFREFUQSk7 DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRGRlVW5pbml0aWFsaXplKERXT1JE KTsNCiMgMjM5ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2RkZW1sLmgiIDMNCn0NCiMgMTMw ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL3dpbmRvd3MuaCIgMiAzDQojIDEgInQ6L21zeXMv MS4wL21pbmd3L2luY2x1ZGUvZGxncy5oIiAxIDMNCg0KDQoNCmV4dGVybiAiQyIgew0KIyAxNzIg InQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZGxncy5oIiAzDQp0eXBlZGVmIHN0cnVjdCB0YWdD UkdCIHsNCiBCWVRFIGJSZWQ7DQogQllURSBiR3JlZW47DQogQllURSBiQmx1ZTsNCiBCWVRFIGJF eHRyYTsNCn0gQ1JHQjsNCg0KDQp9DQojIDEzMSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS93 aW5kb3dzLmgiIDIgMw0KIyAxICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2x6ZXhwYW5kLmgi IDEgMw0KDQoNCg0KZXh0ZXJuICJDIiB7DQojIDE0ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRl L2x6ZXhwYW5kLmgiIDMNCkxPTkcgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBDb3B5TFpG aWxlKElOVCxJTlQpOw0KSU5UIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0RXhwYW5k ZWROYW1lQShMUFNUUixMUFNUUik7DQpJTlQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBH ZXRFeHBhbmRlZE5hbWVXKExQV1NUUixMUFdTVFIpOw0Kdm9pZCBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIExaQ2xvc2UoSU5UKTsNCkxPTkcgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSBMWkNvcHkoSU5ULElOVCk7DQp2b2lkIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgTFpE b25lKHZvaWQpOw0KSU5UIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgTFpJbml0KElOVCk7 DQpJTlQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBMWk9wZW5GaWxlQShMUFNUUixMUE9G U1RSVUNULFdPUkQpOw0KSU5UIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgTFpPcGVuRmls ZVcoTFBXU1RSLExQT0ZTVFJVQ1QsV09SRCk7DQpJTlQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBMWlJlYWQoSU5ULExQU1RSLElOVCk7DQpMT05HIF9fYXR0cmlidXRlX18oKF9fc3RkY2Fs bF9fKSkgTFpTZWVrKElOVCxMT05HLElOVCk7DQpJTlQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBMWlN0YXJ0KHZvaWQpOw0KIyAzNCAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9semV4 cGFuZC5oIiAzDQp9DQojIDEzMiAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS93aW5kb3dzLmgi IDIgMw0KIyAxICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL21tc3lzdGVtLmgiIDEgMw0KDQoN Cg0KI3ByYWdtYSBwYWNrKHB1c2gsMSkNCg0KZXh0ZXJuICJDIiB7DQojIDg5NiAidDovbXN5cy8x LjAvbWluZ3cvaW5jbHVkZS9tbXN5c3RlbS5oIiAzDQp0eXBlZGVmIERXT1JEIE1DSUVSUk9SOw0K dHlwZWRlZiBVSU5UIE1DSURFVklDRUlEOw0KdHlwZWRlZiBVSU5UKF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgKllJRUxEUFJPQykoTUNJREVWSUNFSUQsRFdPUkQpOw0KdHlwZWRlZiBVSU5U IE1NVkVSU0lPTjsNCnR5cGVkZWYgVUlOVCBNTVJFU1VMVDsNCnR5cGVkZWYgc3RydWN0IG1tdGlt ZV90YWcgew0KICAgICAgICBVSU5UIHdUeXBlOw0KICAgICAgICB1bmlvbiB7DQogICAgICAgICAg ICAgICAgRFdPUkQgbXM7DQogICAgICAgICAgICAgICAgRFdPUkQgc2FtcGxlOw0KICAgICAgICAg ICAgICAgIERXT1JEIGNiOw0KICAgICAgICAgICAgICAgIERXT1JEIHRpY2tzOw0KICAgICAgICAg ICAgICAgIHN0cnVjdCB7DQogICAgICAgICAgICAgICAgICAgICAgICBCWVRFIGhvdXI7DQogICAg ICAgICAgICAgICAgICAgICAgICBCWVRFIG1pbjsNCiAgICAgICAgICAgICAgICAgICAgICAgIEJZ VEUgc2VjOw0KICAgICAgICAgICAgICAgICAgICAgICAgQllURSBmcmFtZTsNCiAgICAgICAgICAg ICAgICAgICAgICAgIEJZVEUgZnBzOw0KICAgICAgICAgICAgICAgICAgICAgICAgQllURSBkdW1t eTsNCiAgICAgICAgICAgICAgICAgICAgICAgIEJZVEUgcGFkWzJdOw0KICAgICAgICAgICAgICAg IH0gc21wdGU7DQogICAgICAgICAgICAgICAgc3RydWN0IHsNCiAgICAgICAgICAgICAgICAgICAg ICAgIERXT1JEIHNvbmdwdHJwb3M7DQogICAgICAgICAgICAgICAgfSBtaWRpOw0KICAgICAgICB9 IHU7DQp9IE1NVElNRSwqUE1NVElNRSwqTFBNTVRJTUU7DQp0eXBlZGVmIHN0cnVjdCBIRFJWUl9f e2ludCBpO30qSERSVlI7DQp0eXBlZGVmIHN0cnVjdCB0YWdEUlZDT05GSUdJTkZPIHsNCiAgICAg ICAgRFdPUkQgZHdEQ0lTaXplOw0KICAgICAgICBMUENXU1RSIGxwc3pEQ0lTZWN0aW9uTmFtZTsN CiAgICAgICAgTFBDV1NUUiBscHN6RENJQWxpYXNOYW1lOw0KfSBEUlZDT05GSUdJTkZPLCpQRFJW Q09ORklHSU5GTywqTFBEUlZDT05GSUdJTkZPOw0KdHlwZWRlZiBzdHJ1Y3QgRFJWQ09ORklHSU5G T0VYIHsNCiAgICAgICAgRFdPUkQgZHdEQ0lTaXplOw0KICAgICAgICBMUENXU1RSIGxwc3pEQ0lT ZWN0aW9uTmFtZTsNCiAgICAgICAgTFBDV1NUUiBscHN6RENJQWxpYXNOYW1lOw0KICAgICAgICBE V09SRCBkbkRldk5vZGU7DQp9IERSVkNPTkZJR0lORk9FWCwqUERSVkNPTkZJR0lORk9FWCwqTFBE UlZDT05GSUdJTkZPRVg7DQp0eXBlZGVmIExSRVNVTFQoX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSogRFJJVkVSUFJPQykoRFdPUkQsSERSVlIsVUlOVCxMUEFSQU0sTFBBUkFNKTsNCnR5cGVk ZWYgdm9pZCAoX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBEUlZDQUxMQkFDSykoSERSVlIs VUlOVCxEV09SRCxEV09SRCxEV09SRCk7DQp0eXBlZGVmIERSVkNBTExCQUNLICpMUERSVkNBTExC QUNLOw0KdHlwZWRlZiBEUlZDQUxMQkFDSyAqUERSVkNBTExCQUNLOw0KdHlwZWRlZiBzdHJ1Y3Qg SFdBVkVfX3tpbnQgaTt9KkhXQVZFOw0KdHlwZWRlZiBzdHJ1Y3QgSFdBVkVJTl9fe2ludCBpO30q SFdBVkVJTjsNCnR5cGVkZWYgc3RydWN0IEhXQVZFT1VUX197aW50IGk7fSpIV0FWRU9VVDsNCnR5 cGVkZWYgSFdBVkVJTiAqTFBIV0FWRUlOOw0KdHlwZWRlZiBIV0FWRU9VVCAqTFBIV0FWRU9VVDsN CnR5cGVkZWYgRFJWQ0FMTEJBQ0sgV0FWRUNBTExCQUNLOw0KdHlwZWRlZiBXQVZFQ0FMTEJBQ0sg KkxQV0FWRUNBTExCQUNLOw0KdHlwZWRlZiBzdHJ1Y3Qgd2F2ZWhkcl90YWcgew0KICAgICAgICBM UFNUUiBscERhdGE7DQogICAgICAgIERXT1JEIGR3QnVmZmVyTGVuZ3RoOw0KICAgICAgICBEV09S RCBkd0J5dGVzUmVjb3JkZWQ7DQogICAgICAgIERXT1JEIGR3VXNlcjsNCiAgICAgICAgRFdPUkQg ZHdGbGFnczsNCiAgICAgICAgRFdPUkQgZHdMb29wczsNCiAgICAgICAgc3RydWN0IHdhdmVoZHJf dGFnICpscE5leHQ7DQogICAgICAgIERXT1JEIHJlc2VydmVkOw0KfSBXQVZFSERSLCpQV0FWRUhE UiwqTFBXQVZFSERSOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnV0FWRU9VVENBUFNBIHsNCiAgICAgICAg V09SRCB3TWlkOw0KICAgICAgICBXT1JEIHdQaWQ7DQogICAgICAgIE1NVkVSU0lPTiB2RHJpdmVy VmVyc2lvbjsNCiAgICAgICAgQ0hBUiBzelBuYW1lWzMyXTsNCiAgICAgICAgRFdPUkQgZHdGb3Jt YXRzOw0KICAgICAgICBXT1JEIHdDaGFubmVsczsNCiAgICAgICAgV09SRCB3UmVzZXJ2ZWQxOw0K ICAgICAgICBEV09SRCBkd1N1cHBvcnQ7DQp9IFdBVkVPVVRDQVBTQSwqUFdBVkVPVVRDQVBTQSwq TFBXQVZFT1VUQ0FQU0E7DQp0eXBlZGVmIHN0cnVjdCB0YWdXQVZFT1VUQ0FQU1cgew0KICAgICAg ICBXT1JEIHdNaWQ7DQogICAgICAgIFdPUkQgd1BpZDsNCiAgICAgICAgTU1WRVJTSU9OIHZEcml2 ZXJWZXJzaW9uOw0KICAgICAgICBXQ0hBUiBzelBuYW1lWzMyXTsNCiAgICAgICAgRFdPUkQgZHdG b3JtYXRzOw0KICAgICAgICBXT1JEIHdDaGFubmVsczsNCiAgICAgICAgV09SRCB3UmVzZXJ2ZWQx Ow0KICAgICAgICBEV09SRCBkd1N1cHBvcnQ7DQp9IFdBVkVPVVRDQVBTVywqUFdBVkVPVVRDQVBT VywqTFBXQVZFT1VUQ0FQU1c7DQp0eXBlZGVmIHN0cnVjdCB0YWdXQVZFSU5DQVBTQSB7DQogICAg ICAgIFdPUkQgd01pZDsNCiAgICAgICAgV09SRCB3UGlkOw0KICAgICAgICBNTVZFUlNJT04gdkRy aXZlclZlcnNpb247DQogICAgICAgIENIQVIgc3pQbmFtZVszMl07DQogICAgICAgIERXT1JEIGR3 Rm9ybWF0czsNCiAgICAgICAgV09SRCB3Q2hhbm5lbHM7DQogICAgICAgIFdPUkQgd1Jlc2VydmVk MTsNCn0gV0FWRUlOQ0FQU0EsKlBXQVZFSU5DQVBTQSwqTFBXQVZFSU5DQVBTQTsNCnR5cGVkZWYg c3RydWN0IHRhZ1dBVkVJTkNBUFNXIHsNCiAgICAgICAgV09SRCB3TWlkOw0KICAgICAgICBXT1JE IHdQaWQ7DQogICAgICAgIE1NVkVSU0lPTiB2RHJpdmVyVmVyc2lvbjsNCiAgICAgICAgV0NIQVIg c3pQbmFtZVszMl07DQogICAgICAgIERXT1JEIGR3Rm9ybWF0czsNCiAgICAgICAgV09SRCB3Q2hh bm5lbHM7DQogICAgICAgIFdPUkQgd1Jlc2VydmVkMTsNCn0gV0FWRUlOQ0FQU1csKlBXQVZFSU5D QVBTVywqTFBXQVZFSU5DQVBTVzsNCnR5cGVkZWYgc3RydWN0IHdhdmVmb3JtYXRfdGFnIHsNCiAg ICAgICAgV09SRCB3Rm9ybWF0VGFnOw0KICAgICAgICBXT1JEIG5DaGFubmVsczsNCiAgICAgICAg RFdPUkQgblNhbXBsZXNQZXJTZWM7DQogICAgICAgIERXT1JEIG5BdmdCeXRlc1BlclNlYzsNCiAg ICAgICAgV09SRCBuQmxvY2tBbGlnbjsNCn0gV0FWRUZPUk1BVCwqUFdBVkVGT1JNQVQsKkxQV0FW RUZPUk1BVDsNCnR5cGVkZWYgc3RydWN0IHBjbXdhdmVmb3JtYXRfdGFnIHsNCiAgICAgICAgV0FW RUZPUk1BVCB3ZjsNCiAgICAgICAgV09SRCB3Qml0c1BlclNhbXBsZTsNCn0gUENNV0FWRUZPUk1B VCwgKlBQQ01XQVZFRk9STUFULCpMUFBDTVdBVkVGT1JNQVQ7DQoNCg0KdHlwZWRlZiBzdHJ1Y3Qg dFdBVkVGT1JNQVRFWCB7DQogICAgICAgIFdPUkQgd0Zvcm1hdFRhZzsNCiAgICAgICAgV09SRCBu Q2hhbm5lbHM7DQogICAgICAgIERXT1JEIG5TYW1wbGVzUGVyU2VjOw0KICAgICAgICBEV09SRCBu QXZnQnl0ZXNQZXJTZWM7DQogICAgICAgIFdPUkQgbkJsb2NrQWxpZ247DQogICAgICAgIFdPUkQg d0JpdHNQZXJTYW1wbGU7DQogICAgICAgIFdPUkQgY2JTaXplOw0KfSBXQVZFRk9STUFURVgsKlBX QVZFRk9STUFURVgsKkxQV0FWRUZPUk1BVEVYOw0KdHlwZWRlZiBjb25zdCBXQVZFRk9STUFURVgg KkxQQ1dBVkVGT1JNQVRFWDsNCg0KdHlwZWRlZiBzdHJ1Y3QgSE1JRElfX3tpbnQgaTt9KkhNSURJ Ow0KdHlwZWRlZiBzdHJ1Y3QgSE1JRElJTl9fe2ludCBpO30qSE1JRElJTjsNCnR5cGVkZWYgc3Ry dWN0IEhNSURJT1VUX197aW50IGk7fSpITUlESU9VVDsNCnR5cGVkZWYgc3RydWN0IEhNSURJU1RS TV9fe2ludCBpO30qSE1JRElTVFJNOw0KdHlwZWRlZiBITUlESSAqTFBITUlESTsNCnR5cGVkZWYg SE1JRElJTiAqTFBITUlESUlOOw0KdHlwZWRlZiBITUlESU9VVCAqTFBITUlESU9VVDsNCnR5cGVk ZWYgSE1JRElTVFJNICpMUEhNSURJU1RSTTsNCnR5cGVkZWYgRFJWQ0FMTEJBQ0sgTUlESUNBTExC QUNLOw0KdHlwZWRlZiBNSURJQ0FMTEJBQ0sgKkxQTUlESUNBTExCQUNLOw0KdHlwZWRlZiBXT1JE IFBBVENIQVJSQVlbMTI4XTsNCnR5cGVkZWYgV09SRCAqTFBQQVRDSEFSUkFZOw0KdHlwZWRlZiBX T1JEIEtFWUFSUkFZWzEyOF07DQp0eXBlZGVmIFdPUkQgKkxQS0VZQVJSQVk7DQp0eXBlZGVmIHN0 cnVjdCB0YWdNSURJT1VUQ0FQU0Egew0KICAgICAgICBXT1JEIHdNaWQ7DQogICAgICAgIFdPUkQg d1BpZDsNCiAgICAgICAgTU1WRVJTSU9OIHZEcml2ZXJWZXJzaW9uOw0KICAgICAgICBDSEFSIHN6 UG5hbWVbMzJdOw0KICAgICAgICBXT1JEIHdUZWNobm9sb2d5Ow0KICAgICAgICBXT1JEIHdWb2lj ZXM7DQogICAgICAgIFdPUkQgd05vdGVzOw0KICAgICAgICBXT1JEIHdDaGFubmVsTWFzazsNCiAg ICAgICAgRFdPUkQgZHdTdXBwb3J0Ow0KfSBNSURJT1VUQ0FQU0EsKlBNSURJT1VUQ0FQU0EsKkxQ TUlESU9VVENBUFNBOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnTUlESU9VVENBUFNXIHsNCiAgICAgICAg V09SRCB3TWlkOw0KICAgICAgICBXT1JEIHdQaWQ7DQogICAgICAgIE1NVkVSU0lPTiB2RHJpdmVy VmVyc2lvbjsNCiAgICAgICAgV0NIQVIgc3pQbmFtZVszMl07DQogICAgICAgIFdPUkQgd1RlY2hu b2xvZ3k7DQogICAgICAgIFdPUkQgd1ZvaWNlczsNCiAgICAgICAgV09SRCB3Tm90ZXM7DQogICAg ICAgIFdPUkQgd0NoYW5uZWxNYXNrOw0KICAgICAgICBEV09SRCBkd1N1cHBvcnQ7DQp9IE1JRElP VVRDQVBTVywqUE1JRElPVVRDQVBTVywqTFBNSURJT1VUQ0FQU1c7DQp0eXBlZGVmIHN0cnVjdCB0 YWdNSURJSU5DQVBTQSB7DQogICAgICAgIFdPUkQgd01pZDsNCiAgICAgICAgV09SRCB3UGlkOw0K ICAgICAgICBNTVZFUlNJT04gdkRyaXZlclZlcnNpb247DQogICAgICAgIENIQVIgc3pQbmFtZVsz Ml07DQogICAgICAgIERXT1JEIGR3U3VwcG9ydDsNCn0gTUlESUlOQ0FQU0EsKlBNSURJSU5DQVBT QSwqTFBNSURJSU5DQVBTQTsNCnR5cGVkZWYgc3RydWN0IHRhZ01JRElJTkNBUFNXIHsNCiAgICAg ICAgV09SRCB3TWlkOw0KICAgICAgICBXT1JEIHdQaWQ7DQogICAgICAgIE1NVkVSU0lPTiB2RHJp dmVyVmVyc2lvbjsNCiAgICAgICAgV0NIQVIgc3pQbmFtZVszMl07DQogICAgICAgIERXT1JEIGR3 U3VwcG9ydDsNCn0gTUlESUlOQ0FQU1csKlBNSURJSU5DQVBTVywqTlBNSURJSU5DQVBTVywqTFBN SURJSU5DQVBTVzsNCnR5cGVkZWYgc3RydWN0IG1pZGloZHJfdGFnIHsNCiAgICAgICAgTFBTVFIg bHBEYXRhOw0KICAgICAgICBEV09SRCBkd0J1ZmZlckxlbmd0aDsNCiAgICAgICAgRFdPUkQgZHdC eXRlc1JlY29yZGVkOw0KICAgICAgICBEV09SRCBkd1VzZXI7DQogICAgICAgIERXT1JEIGR3Rmxh Z3M7DQogICAgICAgIHN0cnVjdCBtaWRpaGRyX3RhZyAqbHBOZXh0Ow0KICAgICAgICBEV09SRCBy ZXNlcnZlZDsNCiAgICAgICAgRFdPUkQgZHdPZmZzZXQ7DQogICAgICAgIERXT1JEIGR3UmVzZXJ2 ZWRbOF07DQp9IE1JRElIRFIsKlBNSURJSERSLCpMUE1JRElIRFI7DQp0eXBlZGVmIHN0cnVjdCBt aWRpZXZlbnRfdGFnIHsNCiAgICAgICAgRFdPUkQgZHdEZWx0YVRpbWU7DQogICAgICAgIERXT1JE IGR3U3RyZWFtSUQ7DQogICAgICAgIERXT1JEIGR3RXZlbnQ7DQogICAgICAgIERXT1JEIGR3UGFy bXNbMV07DQp9IE1JRElFVkVOVDsNCnR5cGVkZWYgc3RydWN0IG1pZGlzdHJtYnVmZnZlcl90YWcg ew0KICAgICAgICBEV09SRCBkd1ZlcnNpb247DQogICAgICAgIERXT1JEIGR3TWlkOw0KICAgICAg ICBEV09SRCBkd09FTVZlcnNpb247DQp9IE1JRElTVFJNQlVGRlZFUjsNCnR5cGVkZWYgc3RydWN0 IG1pZGlwcm9wdGltZWRpdl90YWcgew0KICAgICAgICBEV09SRCBjYlN0cnVjdDsNCiAgICAgICAg RFdPUkQgZHdUaW1lRGl2Ow0KfSBNSURJUFJPUFRJTUVESVYsKkxQTUlESVBST1BUSU1FRElWOw0K dHlwZWRlZiBzdHJ1Y3QgbWlkaXByb3B0ZW1wb190YWcgew0KICAgICAgICBEV09SRCBjYlN0cnVj dDsNCiAgICAgICAgRFdPUkQgZHdUZW1wbzsNCn0gTUlESVBST1BURU1QTywqTFBNSURJUFJPUFRF TVBPOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnQVVYQ0FQU0Egew0KICAgICAgICBXT1JEIHdNaWQ7DQog ICAgICAgIFdPUkQgd1BpZDsNCiAgICAgICAgTU1WRVJTSU9OIHZEcml2ZXJWZXJzaW9uOw0KICAg ICAgICBDSEFSIHN6UG5hbWVbMzJdOw0KICAgICAgICBXT1JEIHdUZWNobm9sb2d5Ow0KICAgICAg ICBXT1JEIHdSZXNlcnZlZDE7DQogICAgICAgIERXT1JEIGR3U3VwcG9ydDsNCn0gQVVYQ0FQU0Es KlBBVVhDQVBTQSwqTFBBVVhDQVBTQTsNCnR5cGVkZWYgc3RydWN0IHRhZ0FVWENBUFNXIHsNCiAg ICAgICAgV09SRCB3TWlkOw0KICAgICAgICBXT1JEIHdQaWQ7DQogICAgICAgIE1NVkVSU0lPTiB2 RHJpdmVyVmVyc2lvbjsNCiAgICAgICAgV0NIQVIgc3pQbmFtZVszMl07DQogICAgICAgIFdPUkQg d1RlY2hub2xvZ3k7DQogICAgICAgIFdPUkQgd1Jlc2VydmVkMTsNCiAgICAgICAgRFdPUkQgZHdT dXBwb3J0Ow0KfSBBVVhDQVBTVywqUEFVWENBUFNXLCpMUEFVWENBUFNXOw0KdHlwZWRlZiBzdHJ1 Y3QgSE1JWEVST0JKX197aW50IGk7fSpITUlYRVJPQko7DQp0eXBlZGVmIEhNSVhFUk9CSiAqTFBI TUlYRVJPQko7DQp0eXBlZGVmIHN0cnVjdCBITUlYRVJfX3tpbnQgaTt9KkhNSVhFUjsNCnR5cGVk ZWYgSE1JWEVSICpMUEhNSVhFUjsNCnR5cGVkZWYgc3RydWN0IHRhZ01JWEVSQ0FQU0Egew0KICAg ICAgICBXT1JEIHdNaWQ7DQogICAgICAgIFdPUkQgd1BpZDsNCiAgICAgICAgTU1WRVJTSU9OIHZE cml2ZXJWZXJzaW9uOw0KICAgICAgICBDSEFSIHN6UG5hbWVbMzJdOw0KICAgICAgICBEV09SRCBm ZHdTdXBwb3J0Ow0KICAgICAgICBEV09SRCBjRGVzdGluYXRpb25zOw0KfSBNSVhFUkNBUFNBLCpQ TUlYRVJDQVBTQSwqTFBNSVhFUkNBUFNBOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnTUlYRVJDQVBTVyB7 DQogICAgICAgIFdPUkQgd01pZDsNCiAgICAgICAgV09SRCB3UGlkOw0KICAgICAgICBNTVZFUlNJ T04gdkRyaXZlclZlcnNpb247DQogICAgICAgIFdDSEFSIHN6UG5hbWVbMzJdOw0KICAgICAgICBE V09SRCBmZHdTdXBwb3J0Ow0KICAgICAgICBEV09SRCBjRGVzdGluYXRpb25zOw0KfSBNSVhFUkNB UFNXLCpQTUlYRVJDQVBTVywqTFBNSVhFUkNBUFNXOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnTUlYRVJM SU5FQSB7DQogICAgICAgIERXT1JEIGNiU3RydWN0Ow0KICAgICAgICBEV09SRCBkd0Rlc3RpbmF0 aW9uOw0KICAgICAgICBEV09SRCBkd1NvdXJjZTsNCiAgICAgICAgRFdPUkQgZHdMaW5lSUQ7DQog ICAgICAgIERXT1JEIGZkd0xpbmU7DQogICAgICAgIERXT1JEIGR3VXNlcjsNCiAgICAgICAgRFdP UkQgZHdDb21wb25lbnRUeXBlOw0KICAgICAgICBEV09SRCBjQ2hhbm5lbHM7DQogICAgICAgIERX T1JEIGNDb25uZWN0aW9uczsNCiAgICAgICAgRFdPUkQgY0NvbnRyb2xzOw0KICAgICAgICBDSEFS IHN6U2hvcnROYW1lWzE2XTsNCiAgICAgICAgQ0hBUiBzek5hbWVbNjRdOw0KICAgICAgICBzdHJ1 Y3Qgew0KICAgICAgICAgICAgICAgIERXT1JEIGR3VHlwZTsNCiAgICAgICAgICAgICAgICBEV09S RCBkd0RldmljZUlEOw0KICAgICAgICAgICAgICAgIFdPUkQgd01pZDsNCiAgICAgICAgICAgICAg ICBXT1JEIHdQaWQ7DQogICAgICAgICAgICAgICAgTU1WRVJTSU9OIHZEcml2ZXJWZXJzaW9uOw0K ICAgICAgICAgICAgICAgIENIQVIgc3pQbmFtZVszMl07DQogICAgICAgIH0gVGFyZ2V0Ow0KfSBN SVhFUkxJTkVBLCpQTUlYRVJMSU5FQSwqTFBNSVhFUkxJTkVBOw0KdHlwZWRlZiBzdHJ1Y3QgdGFn TUlYRVJMSU5FVyB7DQogICAgICAgIERXT1JEIGNiU3RydWN0Ow0KICAgICAgICBEV09SRCBkd0Rl c3RpbmF0aW9uOw0KICAgICAgICBEV09SRCBkd1NvdXJjZTsNCiAgICAgICAgRFdPUkQgZHdMaW5l SUQ7DQogICAgICAgIERXT1JEIGZkd0xpbmU7DQogICAgICAgIERXT1JEIGR3VXNlcjsNCiAgICAg ICAgRFdPUkQgZHdDb21wb25lbnRUeXBlOw0KICAgICAgICBEV09SRCBjQ2hhbm5lbHM7DQogICAg ICAgIERXT1JEIGNDb25uZWN0aW9uczsNCiAgICAgICAgRFdPUkQgY0NvbnRyb2xzOw0KICAgICAg ICBXQ0hBUiBzelNob3J0TmFtZVsxNl07DQogICAgICAgIFdDSEFSIHN6TmFtZVs2NF07DQogICAg ICAgIHN0cnVjdCB7DQogICAgICAgICAgICAgICAgRFdPUkQgZHdUeXBlOw0KICAgICAgICAgICAg ICAgIERXT1JEIGR3RGV2aWNlSUQ7DQogICAgICAgICAgICAgICAgV09SRCB3TWlkOw0KICAgICAg ICAgICAgICAgIFdPUkQgd1BpZDsNCiAgICAgICAgICAgICAgICBNTVZFUlNJT04gdkRyaXZlclZl cnNpb247DQogICAgICAgICAgICAgICAgV0NIQVIgc3pQbmFtZVszMl07DQogICAgICAgIH0gVGFy Z2V0Ow0KfSBNSVhFUkxJTkVXLCpQTUlYRVJMSU5FVywqTFBNSVhFUkxJTkVXOw0KdHlwZWRlZiBz dHJ1Y3QgdGFnTUlYRVJDT05UUk9MQSB7DQogICAgICAgIERXT1JEIGNiU3RydWN0Ow0KICAgICAg ICBEV09SRCBkd0NvbnRyb2xJRDsNCiAgICAgICAgRFdPUkQgZHdDb250cm9sVHlwZTsNCiAgICAg ICAgRFdPUkQgZmR3Q29udHJvbDsNCiAgICAgICAgRFdPUkQgY011bHRpcGxlSXRlbXM7DQogICAg ICAgIENIQVIgc3pTaG9ydE5hbWVbMTZdOw0KICAgICAgICBDSEFSIHN6TmFtZVs2NF07DQogICAg ICAgIHVuaW9uIHsNCiAgICAgICAgICAgICAgICBfX2V4dGVuc2lvbl9fIHN0cnVjdCB7DQogICAg ICAgICAgICAgICAgICAgICAgICBMT05HIGxNaW5pbXVtOw0KICAgICAgICAgICAgICAgICAgICAg ICAgTE9ORyBsTWF4aW11bTsNCiAgICAgICAgICAgICAgICB9Ow0KICAgICAgICAgICAgICAgIF9f ZXh0ZW5zaW9uX18gc3RydWN0IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEIGR3TWlu aW11bTsNCiAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEIGR3TWF4aW11bTsNCiAgICAgICAg ICAgICAgICB9Ow0KICAgICAgICAgICAgICAgIERXT1JEIGR3UmVzZXJ2ZWRbNl07DQogICAgICAg IH0gQm91bmRzOw0KICAgICAgICB1bmlvbiB7DQogICAgICAgICAgICAgICAgRFdPUkQgY1N0ZXBz Ow0KICAgICAgICAgICAgICAgIERXT1JEIGNiQ3VzdG9tRGF0YTsNCiAgICAgICAgICAgICAgICBE V09SRCBkd1Jlc2VydmVkWzZdOw0KICAgICAgICB9IE1ldHJpY3M7DQp9IE1JWEVSQ09OVFJPTEEs KlBNSVhFUkNPTlRST0xBLCpMUE1JWEVSQ09OVFJPTEE7DQp0eXBlZGVmIHN0cnVjdCB0YWdNSVhF UkNPTlRST0xXIHsNCiAgICAgICAgRFdPUkQgY2JTdHJ1Y3Q7DQogICAgICAgIERXT1JEIGR3Q29u dHJvbElEOw0KICAgICAgICBEV09SRCBkd0NvbnRyb2xUeXBlOw0KICAgICAgICBEV09SRCBmZHdD b250cm9sOw0KICAgICAgICBEV09SRCBjTXVsdGlwbGVJdGVtczsNCiAgICAgICAgV0NIQVIgc3pT aG9ydE5hbWVbMTZdOw0KICAgICAgICBXQ0hBUiBzek5hbWVbNjRdOw0KICAgICAgICB1bmlvbiB7 DQogICAgICAgICAgICAgICAgX19leHRlbnNpb25fXyBzdHJ1Y3Qgew0KICAgICAgICAgICAgICAg ICAgICAgICAgTE9ORyBsTWluaW11bTsNCiAgICAgICAgICAgICAgICAgICAgICAgIExPTkcgbE1h eGltdW07DQogICAgICAgICAgICAgICAgfTsNCiAgICAgICAgICAgICAgICBfX2V4dGVuc2lvbl9f IHN0cnVjdCB7DQogICAgICAgICAgICAgICAgICAgICAgICBEV09SRCBkd01pbmltdW07DQogICAg ICAgICAgICAgICAgICAgICAgICBEV09SRCBkd01heGltdW07DQogICAgICAgICAgICAgICAgfTsN CiAgICAgICAgICAgICAgICBEV09SRCBkd1Jlc2VydmVkWzZdOw0KICAgICAgICB9IEJvdW5kczsN CiAgICAgICAgdW5pb24gew0KICAgICAgICAgICAgICAgIERXT1JEIGNTdGVwczsNCiAgICAgICAg ICAgICAgICBEV09SRCBjYkN1c3RvbURhdGE7DQogICAgICAgICAgICAgICAgRFdPUkQgZHdSZXNl cnZlZFs2XTsNCiAgICAgICAgfSBNZXRyaWNzOw0KfSBNSVhFUkNPTlRST0xXLCpQTUlYRVJDT05U Uk9MVywqTFBNSVhFUkNPTlRST0xXOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnTUlYRVJMSU5FQ09OVFJP TFNBIHsNCiAgICAgICAgRFdPUkQgY2JTdHJ1Y3Q7DQogICAgICAgIERXT1JEIGR3TGluZUlEOw0K ICAgICAgICBfX2V4dGVuc2lvbl9fIHVuaW9uIHsNCiAgICAgICAgICAgICAgICBEV09SRCBkd0Nv bnRyb2xJRDsNCiAgICAgICAgICAgICAgICBEV09SRCBkd0NvbnRyb2xUeXBlOw0KICAgICAgICB9 IDsNCiAgICAgICAgRFdPUkQgY0NvbnRyb2xzOw0KICAgICAgICBEV09SRCBjYm14Y3RybDsNCiAg ICAgICAgTFBNSVhFUkNPTlRST0xBIHBhbXhjdHJsOw0KfSBNSVhFUkxJTkVDT05UUk9MU0EsKlBN SVhFUkxJTkVDT05UUk9MU0EsKkxQTUlYRVJMSU5FQ09OVFJPTFNBOw0KdHlwZWRlZiBzdHJ1Y3Qg dGFnTUlYRVJMSU5FQ09OVFJPTFNXIHsNCiAgICAgICAgRFdPUkQgY2JTdHJ1Y3Q7DQogICAgICAg IERXT1JEIGR3TGluZUlEOw0KICAgICAgICBfX2V4dGVuc2lvbl9fIHVuaW9uIHsNCiAgICAgICAg ICAgICAgICBEV09SRCBkd0NvbnRyb2xJRDsNCiAgICAgICAgICAgICAgICBEV09SRCBkd0NvbnRy b2xUeXBlOw0KICAgICAgICB9IDsNCiAgICAgICAgRFdPUkQgY0NvbnRyb2xzOw0KICAgICAgICBE V09SRCBjYm14Y3RybDsNCiAgICAgICAgTFBNSVhFUkNPTlRST0xXIHBhbXhjdHJsOw0KfSBNSVhF UkxJTkVDT05UUk9MU1csKlBNSVhFUkxJTkVDT05UUk9MU1csKkxQTUlYRVJMSU5FQ09OVFJPTFNX Ow0KdHlwZWRlZiBzdHJ1Y3QgdE1JWEVSQ09OVFJPTERFVEFJTFMgew0KICAgICAgICBEV09SRCBj YlN0cnVjdDsNCiAgICAgICAgRFdPUkQgZHdDb250cm9sSUQ7DQogICAgICAgIERXT1JEIGNDaGFu bmVsczsNCiAgICAgICAgX19leHRlbnNpb25fXyB1bmlvbiB7DQogICAgICAgICAgICAgICAgSFdO RCBod25kT3duZXI7DQogICAgICAgICAgICAgICAgRFdPUkQgY011bHRpcGxlSXRlbXM7DQogICAg ICAgIH0gOw0KICAgICAgICBEV09SRCBjYkRldGFpbHM7DQogICAgICAgIFBWT0lEIHBhRGV0YWls czsNCn0gTUlYRVJDT05UUk9MREVUQUlMUywqUE1JWEVSQ09OVFJPTERFVEFJTFMsKkxQTUlYRVJD T05UUk9MREVUQUlMUzsNCnR5cGVkZWYgc3RydWN0IHRhZ01JWEVSQ09OVFJPTERFVEFJTFNfTElT VFRFWFRBIHsNCiAgICAgICAgRFdPUkQgZHdQYXJhbTE7DQogICAgICAgIERXT1JEIGR3UGFyYW0y Ow0KICAgICAgICBDSEFSIHN6TmFtZVs2NF07DQp9IE1JWEVSQ09OVFJPTERFVEFJTFNfTElTVFRF WFRBLCpQTUlYRVJDT05UUk9MREVUQUlMU19MSVNUVEVYVEEsKkxQTUlYRVJDT05UUk9MREVUQUlM U19MSVNUVEVYVEE7DQp0eXBlZGVmIHN0cnVjdCB0YWdNSVhFUkNPTlRST0xERVRBSUxTX0xJU1RU RVhUVyB7DQogICAgICAgIERXT1JEIGR3UGFyYW0xOw0KICAgICAgICBEV09SRCBkd1BhcmFtMjsN CiAgICAgICAgV0NIQVIgc3pOYW1lWzY0XTsNCn0gTUlYRVJDT05UUk9MREVUQUlMU19MSVNUVEVY VFcsKlBNSVhFUkNPTlRST0xERVRBSUxTX0xJU1RURVhUVywqTFBNSVhFUkNPTlRST0xERVRBSUxT X0xJU1RURVhUVzsNCnR5cGVkZWYgc3RydWN0IHRNSVhFUkNPTlRST0xERVRBSUxTX0JPT0xFQU4g ew0KICAgICAgICBMT05HIGZWYWx1ZTsNCn0gTUlYRVJDT05UUk9MREVUQUlMU19CT09MRUFOLCpQ TUlYRVJDT05UUk9MREVUQUlMU19CT09MRUFOLCpMUE1JWEVSQ09OVFJPTERFVEFJTFNfQk9PTEVB TjsNCnR5cGVkZWYgc3RydWN0IHRNSVhFUkNPTlRST0xERVRBSUxTX1NJR05FRCB7DQogICAgICAg IExPTkcgbFZhbHVlOw0KfSBNSVhFUkNPTlRST0xERVRBSUxTX1NJR05FRCwqUE1JWEVSQ09OVFJP TERFVEFJTFNfU0lHTkVELCpMUE1JWEVSQ09OVFJPTERFVEFJTFNfU0lHTkVEOw0KdHlwZWRlZiBz dHJ1Y3QgdE1JWEVSQ09OVFJPTERFVEFJTFNfVU5TSUdORUQgew0KICAgICAgICBEV09SRCBkd1Zh bHVlOw0KfSBNSVhFUkNPTlRST0xERVRBSUxTX1VOU0lHTkVELCpQTUlYRVJDT05UUk9MREVUQUlM U19VTlNJR05FRCwqTFBNSVhFUkNPTlRST0xERVRBSUxTX1VOU0lHTkVEOw0KdHlwZWRlZiB2b2lk KF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgVElNRUNBTExCQUNLKShVSU5ULFVJTlQsRFdP UkQsRFdPUkQsRFdPUkQpOw0KdHlwZWRlZiBUSU1FQ0FMTEJBQ0sgKkxQVElNRUNBTExCQUNLOw0K dHlwZWRlZiBzdHJ1Y3QgdGltZWNhcHNfdGFnIHsNCiAgICAgICAgVUlOVCB3UGVyaW9kTWluOw0K ICAgICAgICBVSU5UIHdQZXJpb2RNYXg7DQp9IFRJTUVDQVBTLCpQVElNRUNBUFMsKkxQVElNRUNB UFM7DQp0eXBlZGVmIHN0cnVjdCB0YWdKT1lDQVBTQSB7DQogICAgICAgIFdPUkQgd01pZDsNCiAg ICAgICAgV09SRCB3UGlkOw0KICAgICAgICBDSEFSIHN6UG5hbWVbMzJdOw0KICAgICAgICBVSU5U IHdYbWluOw0KICAgICAgICBVSU5UIHdYbWF4Ow0KICAgICAgICBVSU5UIHdZbWluOw0KICAgICAg ICBVSU5UIHdZbWF4Ow0KICAgICAgICBVSU5UIHdabWluOw0KICAgICAgICBVSU5UIHdabWF4Ow0K ICAgICAgICBVSU5UIHdOdW1CdXR0b25zOw0KICAgICAgICBVSU5UIHdQZXJpb2RNaW47DQogICAg ICAgIFVJTlQgd1BlcmlvZE1heDsNCiAgICAgICAgVUlOVCB3Um1pbjsNCiAgICAgICAgVUlOVCB3 Um1heDsNCiAgICAgICAgVUlOVCB3VW1pbjsNCiAgICAgICAgVUlOVCB3VW1heDsNCiAgICAgICAg VUlOVCB3Vm1pbjsNCiAgICAgICAgVUlOVCB3Vm1heDsNCiAgICAgICAgVUlOVCB3Q2FwczsNCiAg ICAgICAgVUlOVCB3TWF4QXhlczsNCiAgICAgICAgVUlOVCB3TnVtQXhlczsNCiAgICAgICAgVUlO VCB3TWF4QnV0dG9uczsNCiAgICAgICAgQ0hBUiBzelJlZ0tleVszMl07DQogICAgICAgIENIQVIg c3pPRU1WeERbMjYwXTsNCn0gSk9ZQ0FQU0EsKlBKT1lDQVBTQSwqTFBKT1lDQVBTQTsNCnR5cGVk ZWYgc3RydWN0IHRhZ0pPWUNBUFNXIHsNCiAgICAgICAgV09SRCB3TWlkOw0KICAgICAgICBXT1JE IHdQaWQ7DQogICAgICAgIFdDSEFSIHN6UG5hbWVbMzJdOw0KICAgICAgICBVSU5UIHdYbWluOw0K ICAgICAgICBVSU5UIHdYbWF4Ow0KICAgICAgICBVSU5UIHdZbWluOw0KICAgICAgICBVSU5UIHdZ bWF4Ow0KICAgICAgICBVSU5UIHdabWluOw0KICAgICAgICBVSU5UIHdabWF4Ow0KICAgICAgICBV SU5UIHdOdW1CdXR0b25zOw0KICAgICAgICBVSU5UIHdQZXJpb2RNaW47DQogICAgICAgIFVJTlQg d1BlcmlvZE1heDsNCiAgICAgICAgVUlOVCB3Um1pbjsNCiAgICAgICAgVUlOVCB3Um1heDsNCiAg ICAgICAgVUlOVCB3VW1pbjsNCiAgICAgICAgVUlOVCB3VW1heDsNCiAgICAgICAgVUlOVCB3Vm1p bjsNCiAgICAgICAgVUlOVCB3Vm1heDsNCiAgICAgICAgVUlOVCB3Q2FwczsNCiAgICAgICAgVUlO VCB3TWF4QXhlczsNCiAgICAgICAgVUlOVCB3TnVtQXhlczsNCiAgICAgICAgVUlOVCB3TWF4QnV0 dG9uczsNCiAgICAgICAgV0NIQVIgc3pSZWdLZXlbMzJdOw0KICAgICAgICBXQ0hBUiBzek9FTVZ4 RFsyNjBdOw0KfSBKT1lDQVBTVywqUEpPWUNBUFNXLCpMUEpPWUNBUFNXOw0KdHlwZWRlZiBzdHJ1 Y3Qgam95aW5mb190YWcgew0KICAgICAgICBVSU5UIHdYcG9zOw0KICAgICAgICBVSU5UIHdZcG9z Ow0KICAgICAgICBVSU5UIHdacG9zOw0KICAgICAgICBVSU5UIHdCdXR0b25zOw0KfSBKT1lJTkZP LCpQSk9ZSU5GTywqTFBKT1lJTkZPOw0KdHlwZWRlZiBzdHJ1Y3Qgam95aW5mb2V4X3RhZyB7DQog ICAgICAgIERXT1JEIGR3U2l6ZTsNCiAgICAgICAgRFdPUkQgZHdGbGFnczsNCiAgICAgICAgRFdP UkQgZHdYcG9zOw0KICAgICAgICBEV09SRCBkd1lwb3M7DQogICAgICAgIERXT1JEIGR3WnBvczsN CiAgICAgICAgRFdPUkQgZHdScG9zOw0KICAgICAgICBEV09SRCBkd1Vwb3M7DQogICAgICAgIERX T1JEIGR3VnBvczsNCiAgICAgICAgRFdPUkQgZHdCdXR0b25zOw0KICAgICAgICBEV09SRCBkd0J1 dHRvbk51bWJlcjsNCiAgICAgICAgRFdPUkQgZHdQT1Y7DQogICAgICAgIERXT1JEIGR3UmVzZXJ2 ZWQxOw0KICAgICAgICBEV09SRCBkd1Jlc2VydmVkMjsNCn0gSk9ZSU5GT0VYLCpQSk9ZSU5GT0VY LCpMUEpPWUlORk9FWDsNCnR5cGVkZWYgRFdPUkQgRk9VUkNDOw0KdHlwZWRlZiBjaGFyICpIUFNU UjsNCnR5cGVkZWYgc3RydWN0IEhNTUlPX197aW50IGk7fSpITU1JTzsNCnR5cGVkZWYgTFJFU1VM VCAoX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBNTUlPUFJPQykoTFBTVFIsVUlOVCxMUEFS QU0sTFBBUkFNKTsNCnR5cGVkZWYgTU1JT1BST0MgKkxQTU1JT1BST0M7DQp0eXBlZGVmIHN0cnVj dCBfTU1JT0lORk8gew0KICAgICAgICBEV09SRCBkd0ZsYWdzOw0KICAgICAgICBGT1VSQ0MgZmNj SU9Qcm9jOw0KICAgICAgICBMUE1NSU9QUk9DIHBJT1Byb2M7DQogICAgICAgIFVJTlQgd0Vycm9y UmV0Ow0KICAgICAgICBIVEFTSyBodGFzazsNCiAgICAgICAgTE9ORyBjY2hCdWZmZXI7DQogICAg ICAgIEhQU1RSIHBjaEJ1ZmZlcjsNCiAgICAgICAgSFBTVFIgcGNoTmV4dDsNCiAgICAgICAgSFBT VFIgcGNoRW5kUmVhZDsNCiAgICAgICAgSFBTVFIgcGNoRW5kV3JpdGU7DQogICAgICAgIExPTkcg bEJ1Zk9mZnNldDsNCiAgICAgICAgTE9ORyBsRGlza09mZnNldDsNCiAgICAgICAgRFdPUkQgYWR3 SW5mb1szXTsNCiAgICAgICAgRFdPUkQgZHdSZXNlcnZlZDE7DQogICAgICAgIERXT1JEIGR3UmVz ZXJ2ZWQyOw0KICAgICAgICBITU1JTyBobW1pbzsNCn0gTU1JT0lORk8sKlBNTUlPSU5GTywqTFBN TUlPSU5GTzsNCnR5cGVkZWYgY29uc3QgTU1JT0lORk8gKkxQQ01NSU9JTkZPOw0KdHlwZWRlZiBz dHJ1Y3QgX01NQ0tJTkZPIHsNCiAgICAgICAgRk9VUkNDIGNraWQ7DQogICAgICAgIERXT1JEIGNr c2l6ZTsNCiAgICAgICAgRk9VUkNDIGZjY1R5cGU7DQogICAgICAgIERXT1JEIGR3RGF0YU9mZnNl dDsNCiAgICAgICAgRFdPUkQgZHdGbGFnczsNCn0gTU1DS0lORk8sKlBNTUNLSU5GTywqTFBNTUNL SU5GTzsNCnR5cGVkZWYgY29uc3QgTU1DS0lORk8gKkxQQ01NQ0tJTkZPOw0KdHlwZWRlZiBzdHJ1 Y3QgdGFnTUNJX0dFTkVSSUNfUEFSTVMgew0KICAgICAgICBEV09SRCBkd0NhbGxiYWNrOw0KfSBN Q0lfR0VORVJJQ19QQVJNUywqUE1DSV9HRU5FUklDX1BBUk1TLCpMUE1DSV9HRU5FUklDX1BBUk1T Ow0KdHlwZWRlZiBzdHJ1Y3QgdGFnTUNJX09QRU5fUEFSTVNBIHsNCiAgICAgICAgRFdPUkQgZHdD YWxsYmFjazsNCiAgICAgICAgTUNJREVWSUNFSUQgd0RldmljZUlEOw0KICAgICAgICBMUENTVFIg bHBzdHJEZXZpY2VUeXBlOw0KICAgICAgICBMUENTVFIgbHBzdHJFbGVtZW50TmFtZTsNCiAgICAg ICAgTFBDU1RSIGxwc3RyQWxpYXM7DQp9IE1DSV9PUEVOX1BBUk1TQSwqUE1DSV9PUEVOX1BBUk1T QSwqTFBNQ0lfT1BFTl9QQVJNU0E7DQp0eXBlZGVmIHN0cnVjdCB0YWdNQ0lfT1BFTl9QQVJNU1cg ew0KICAgICAgICBEV09SRCBkd0NhbGxiYWNrOw0KICAgICAgICBNQ0lERVZJQ0VJRCB3RGV2aWNl SUQ7DQogICAgICAgIExQQ1dTVFIgbHBzdHJEZXZpY2VUeXBlOw0KICAgICAgICBMUENXU1RSIGxw c3RyRWxlbWVudE5hbWU7DQogICAgICAgIExQQ1dTVFIgbHBzdHJBbGlhczsNCn0gTUNJX09QRU5f UEFSTVNXLCpQTUNJX09QRU5fUEFSTVNXLCpMUE1DSV9PUEVOX1BBUk1TVzsNCnR5cGVkZWYgc3Ry dWN0IHRhZ01DSV9QTEFZX1BBUk1TIHsNCiAgICAgICAgRFdPUkQgZHdDYWxsYmFjazsNCiAgICAg ICAgRFdPUkQgZHdGcm9tOw0KICAgICAgICBEV09SRCBkd1RvOw0KfSBNQ0lfUExBWV9QQVJNUywq UE1DSV9QTEFZX1BBUk1TLCpMUE1DSV9QTEFZX1BBUk1TOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnTUNJ X1NFRUtfUEFSTVMgew0KICAgICAgICBEV09SRCBkd0NhbGxiYWNrOw0KICAgICAgICBEV09SRCBk d1RvOw0KfSBNQ0lfU0VFS19QQVJNUywgKlBNQ0lfU0VFS19QQVJNUywqTFBNQ0lfU0VFS19QQVJN UzsNCnR5cGVkZWYgc3RydWN0IHRhZ01DSV9TVEFUVVNfUEFSTVMgew0KICAgICAgICBEV09SRCBk d0NhbGxiYWNrOw0KICAgICAgICBEV09SRCBkd1JldHVybjsNCiAgICAgICAgRFdPUkQgZHdJdGVt Ow0KICAgICAgICBEV09SRCBkd1RyYWNrOw0KfSBNQ0lfU1RBVFVTX1BBUk1TLCpQTUNJX1NUQVRV U19QQVJNUywqTFBNQ0lfU1RBVFVTX1BBUk1TOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnTUNJX0lORk9f UEFSTVNBIHsNCiAgICAgICAgRFdPUkQgZHdDYWxsYmFjazsNCiAgICAgICAgTFBTVFIgbHBzdHJS ZXR1cm47DQogICAgICAgIERXT1JEIGR3UmV0U2l6ZTsNCn0gTUNJX0lORk9fUEFSTVNBLCpMUE1D SV9JTkZPX1BBUk1TQTsNCnR5cGVkZWYgc3RydWN0IHRhZ01DSV9JTkZPX1BBUk1TVyB7DQogICAg ICAgIERXT1JEIGR3Q2FsbGJhY2s7DQogICAgICAgIExQV1NUUiBscHN0clJldHVybjsNCiAgICAg ICAgRFdPUkQgZHdSZXRTaXplOw0KfSBNQ0lfSU5GT19QQVJNU1csKkxQTUNJX0lORk9fUEFSTVNX Ow0KdHlwZWRlZiBzdHJ1Y3QgdGFnTUNJX0dFVERFVkNBUFNfUEFSTVMgew0KICAgICAgICBEV09S RCBkd0NhbGxiYWNrOw0KICAgICAgICBEV09SRCBkd1JldHVybjsNCiAgICAgICAgRFdPUkQgZHdJ dGVtOw0KfSBNQ0lfR0VUREVWQ0FQU19QQVJNUywqUE1DSV9HRVRERVZDQVBTX1BBUk1TLCpMUE1D SV9HRVRERVZDQVBTX1BBUk1TOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnTUNJX1NZU0lORk9fUEFSTVNB IHsNCiAgICAgICAgRFdPUkQgZHdDYWxsYmFjazsNCiAgICAgICAgTFBTVFIgbHBzdHJSZXR1cm47 DQogICAgICAgIERXT1JEIGR3UmV0U2l6ZTsNCiAgICAgICAgRFdPUkQgZHdOdW1iZXI7DQogICAg ICAgIFVJTlQgd0RldmljZVR5cGU7DQp9IE1DSV9TWVNJTkZPX1BBUk1TQSwqUE1DSV9TWVNJTkZP X1BBUk1TQSwqTFBNQ0lfU1lTSU5GT19QQVJNU0E7DQp0eXBlZGVmIHN0cnVjdCB0YWdNQ0lfU1lT SU5GT19QQVJNU1cgew0KICAgICAgICBEV09SRCBkd0NhbGxiYWNrOw0KICAgICAgICBMUFdTVFIg bHBzdHJSZXR1cm47DQogICAgICAgIERXT1JEIGR3UmV0U2l6ZTsNCiAgICAgICAgRFdPUkQgZHdO dW1iZXI7DQogICAgICAgIFVJTlQgd0RldmljZVR5cGU7DQp9IE1DSV9TWVNJTkZPX1BBUk1TVywq UE1DSV9TWVNJTkZPX1BBUk1TVywqTFBNQ0lfU1lTSU5GT19QQVJNU1c7DQp0eXBlZGVmIHN0cnVj dCB0YWdNQ0lfU0VUX1BBUk1TIHsNCiAgICAgICAgRFdPUkQgZHdDYWxsYmFjazsNCiAgICAgICAg RFdPUkQgZHdUaW1lRm9ybWF0Ow0KICAgICAgICBEV09SRCBkd0F1ZGlvOw0KfSBNQ0lfU0VUX1BB Uk1TLCpQTUNJX1NFVF9QQVJNUywqTFBNQ0lfU0VUX1BBUk1TOw0KdHlwZWRlZiBzdHJ1Y3QgdGFn TUNJX0JSRUFLX1BBUk1TIHsNCiAgICAgICAgRFdPUkQgZHdDYWxsYmFjazsNCiAgICAgICAgaW50 IG5WaXJ0S2V5Ow0KICAgICAgICBIV05EIGh3bmRCcmVhazsNCn0gTUNJX0JSRUFLX1BBUk1TLCpQ TUNJX0JSRUFLX1BBUk1TLCpMUE1DSV9CUkVBS19QQVJNUzsNCnR5cGVkZWYgc3RydWN0IHRhZ01D SV9TQVZFX1BBUk1TQSB7DQogICAgICAgIERXT1JEIGR3Q2FsbGJhY2s7DQogICAgICAgIExQQ1NU UiBscGZpbGVuYW1lOw0KfSBNQ0lfU0FWRV9QQVJNU0EsKlBNQ0lfU0FWRV9QQVJNU0EsKkxQTUNJ X1NBVkVfUEFSTVNBOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnTUNJX1NBVkVfUEFSTVNXIHsNCiAgICAg ICAgRFdPUkQgZHdDYWxsYmFjazsNCiAgICAgICAgTFBDV1NUUiBscGZpbGVuYW1lOw0KfSBNQ0lf U0FWRV9QQVJNU1csKlBNQ0lfU0FWRV9QQVJNU1csKkxQTUNJX1NBVkVfUEFSTVNXOw0KdHlwZWRl ZiBzdHJ1Y3QgdGFnTUNJX0xPQURfUEFSTVNBIHsNCiAgICAgICAgRFdPUkQgZHdDYWxsYmFjazsN CiAgICAgICAgTFBDU1RSIGxwZmlsZW5hbWU7DQp9IE1DSV9MT0FEX1BBUk1TQSwqUE1DSV9MT0FE X1BBUk1TQSwqTFBNQ0lfTE9BRF9QQVJNU0E7DQp0eXBlZGVmIHN0cnVjdCB0YWdNQ0lfTE9BRF9Q QVJNU1cgew0KICAgICAgICBEV09SRCBkd0NhbGxiYWNrOw0KICAgICAgICBMUENXU1RSIGxwZmls ZW5hbWU7DQp9IE1DSV9MT0FEX1BBUk1TVywqUE1DSV9MT0FEX1BBUk1TVywqTFBNQ0lfTE9BRF9Q QVJNU1c7DQp0eXBlZGVmIHN0cnVjdCB0YWdNQ0lfUkVDT1JEX1BBUk1TIHsNCiAgICAgICAgRFdP UkQgZHdDYWxsYmFjazsNCiAgICAgICAgRFdPUkQgZHdGcm9tOw0KICAgICAgICBEV09SRCBkd1Rv Ow0KfSBNQ0lfUkVDT1JEX1BBUk1TLCpMUE1DSV9SRUNPUkRfUEFSTVM7DQp0eXBlZGVmIHN0cnVj dCB0YWdNQ0lfVkRfUExBWV9QQVJNUyB7DQogICAgICAgIERXT1JEIGR3Q2FsbGJhY2s7DQogICAg ICAgIERXT1JEIGR3RnJvbTsNCiAgICAgICAgRFdPUkQgZHdUbzsNCiAgICAgICAgRFdPUkQgZHdT cGVlZDsNCn0gTUNJX1ZEX1BMQVlfUEFSTVMsKlBNQ0lfVkRfUExBWV9QQVJNUywqTFBNQ0lfVkRf UExBWV9QQVJNUzsNCnR5cGVkZWYgc3RydWN0IHRhZ01DSV9WRF9TVEVQX1BBUk1TIHsNCiAgICAg ICAgRFdPUkQgZHdDYWxsYmFjazsNCiAgICAgICAgRFdPUkQgZHdGcmFtZXM7DQp9IE1DSV9WRF9T VEVQX1BBUk1TLCpQTUNJX1ZEX1NURVBfUEFSTVMsKkxQTUNJX1ZEX1NURVBfUEFSTVM7DQp0eXBl ZGVmIHN0cnVjdCB0YWdNQ0lfVkRfRVNDQVBFX1BBUk1TQSB7DQogICAgICAgIERXT1JEIGR3Q2Fs bGJhY2s7DQogICAgICAgIExQQ1NUUiBscHN0ckNvbW1hbmQ7DQp9IE1DSV9WRF9FU0NBUEVfUEFS TVNBLCpQTUNJX1ZEX0VTQ0FQRV9QQVJNU0EsKkxQTUNJX1ZEX0VTQ0FQRV9QQVJNU0E7DQp0eXBl ZGVmIHN0cnVjdCB0YWdNQ0lfVkRfRVNDQVBFX1BBUk1TVyB7DQogICAgICAgIERXT1JEIGR3Q2Fs bGJhY2s7DQogICAgICAgIExQQ1dTVFIgbHBzdHJDb21tYW5kOw0KfSBNQ0lfVkRfRVNDQVBFX1BB Uk1TVywqUE1DSV9WRF9FU0NBUEVfUEFSTVNXLCpMUE1DSV9WRF9FU0NBUEVfUEFSTVNXOw0KdHlw ZWRlZiBzdHJ1Y3QgdGFnTUNJX1dBVkVfT1BFTl9QQVJNU0Egew0KICAgICAgICBEV09SRCBkd0Nh bGxiYWNrOw0KICAgICAgICBNQ0lERVZJQ0VJRCB3RGV2aWNlSUQ7DQogICAgICAgIExQQ1NUUiBs cHN0ckRldmljZVR5cGU7DQogICAgICAgIExQQ1NUUiBscHN0ckVsZW1lbnROYW1lOw0KICAgICAg ICBMUENTVFIgbHBzdHJBbGlhczsNCiAgICAgICAgRFdPUkQgZHdCdWZmZXJTZWNvbmRzOw0KfSBN Q0lfV0FWRV9PUEVOX1BBUk1TQSwqUE1DSV9XQVZFX09QRU5fUEFSTVNBLCpMUE1DSV9XQVZFX09Q RU5fUEFSTVNBOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnTUNJX1dBVkVfT1BFTl9QQVJNU1cgew0KICAg ICAgICBEV09SRCBkd0NhbGxiYWNrOw0KICAgICAgICBNQ0lERVZJQ0VJRCB3RGV2aWNlSUQ7DQog ICAgICAgIExQQ1dTVFIgbHBzdHJEZXZpY2VUeXBlOw0KICAgICAgICBMUENXU1RSIGxwc3RyRWxl bWVudE5hbWU7DQogICAgICAgIExQQ1dTVFIgbHBzdHJBbGlhczsNCiAgICAgICAgRFdPUkQgZHdC dWZmZXJTZWNvbmRzOw0KfSBNQ0lfV0FWRV9PUEVOX1BBUk1TVywqUE1DSV9XQVZFX09QRU5fUEFS TVNXLCpMUE1DSV9XQVZFX09QRU5fUEFSTVNXOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnTUNJX1dBVkVf REVMRVRFX1BBUk1TIHsNCiAgICAgICAgRFdPUkQgZHdDYWxsYmFjazsNCiAgICAgICAgRFdPUkQg ZHdGcm9tOw0KICAgICAgICBEV09SRCBkd1RvOw0KfSBNQ0lfV0FWRV9ERUxFVEVfUEFSTVMsICpQ TUNJX1dBVkVfREVMRVRFX1BBUk1TLCpMUE1DSV9XQVZFX0RFTEVURV9QQVJNUzsNCnR5cGVkZWYg c3RydWN0IHRhZ01DSV9XQVZFX1NFVF9QQVJNUyB7DQogICAgICAgIERXT1JEIGR3Q2FsbGJhY2s7 DQogICAgICAgIERXT1JEIGR3VGltZUZvcm1hdDsNCiAgICAgICAgRFdPUkQgZHdBdWRpbzsNCiAg ICAgICAgVUlOVCB3SW5wdXQ7DQogICAgICAgIFVJTlQgd091dHB1dDsNCiAgICAgICAgV09SRCB3 Rm9ybWF0VGFnOw0KICAgICAgICBXT1JEIHdSZXNlcnZlZDI7DQogICAgICAgIFdPUkQgbkNoYW5u ZWxzOw0KICAgICAgICBXT1JEIHdSZXNlcnZlZDM7DQogICAgICAgIERXT1JEIG5TYW1wbGVzUGVy U2VjOw0KICAgICAgICBEV09SRCBuQXZnQnl0ZXNQZXJTZWM7DQogICAgICAgIFdPUkQgbkJsb2Nr QWxpZ247DQogICAgICAgIFdPUkQgd1Jlc2VydmVkNDsNCiAgICAgICAgV09SRCB3Qml0c1BlclNh bXBsZTsNCiAgICAgICAgV09SRCB3UmVzZXJ2ZWQ1Ow0KfSBNQ0lfV0FWRV9TRVRfUEFSTVMsKlBN Q0lfV0FWRV9TRVRfUEFSTVMsKkxQTUNJX1dBVkVfU0VUX1BBUk1TOw0KDQpMUkVTVUxUIF9fYXR0 cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQ2xvc2VEcml2ZXIoSERSVlIsTE9ORyxMT05HKTsNCkhE UlZSIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgT3BlbkRyaXZlcihMUENXU1RSLExQQ1dT VFIsTE9ORyk7DQpMUkVTVUxUIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2VuZERyaXZl ck1lc3NhZ2UoSERSVlIsVUlOVCxMT05HLExPTkcpOw0KSE1PRFVMRSBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIERydkdldE1vZHVsZUhhbmRsZShIRFJWUik7DQpITU9EVUxFIF9fYXR0cmli dXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0RHJpdmVyTW9kdWxlSGFuZGxlKEhEUlZSKTsNCkxSRVNV TFQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBEZWZEcml2ZXJQcm9jKERXT1JELEhEUlZS LFVJTlQsTFBBUkFNLExQQVJBTSk7DQpVSU5UIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg bW1zeXN0ZW1HZXRWZXJzaW9uKHZvaWQpOw0KDQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2Fs bF9fKSkgc25kUGxheVNvdW5kQShMUENTVFIsVUlOVCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgc25kUGxheVNvdW5kVyhMUENXU1RSLFVJTlQpOw0KQk9PTCBfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpIFBsYXlTb3VuZEEoTFBDU1RSLEhNT0RVTEUsRFdPUkQpOw0KQk9P TCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFBsYXlTb3VuZFcoTFBDV1NUUixITU9EVUxF LERXT1JEKTsNClVJTlQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSB3YXZlT3V0R2V0TnVt RGV2cyh2b2lkKTsNCk1NUkVTVUxUIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgd2F2ZU91 dEdldERldkNhcHNBKFVJTlQsTFBXQVZFT1VUQ0FQU0EsVUlOVCk7DQpNTVJFU1VMVCBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIHdhdmVPdXRHZXREZXZDYXBzVyhVSU5ULExQV0FWRU9VVENB UFNXLFVJTlQpOw0KTU1SRVNVTFQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSB3YXZlT3V0 R2V0Vm9sdW1lKEhXQVZFT1VULFBEV09SRCk7DQpNTVJFU1VMVCBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIHdhdmVPdXRTZXRWb2x1bWUoSFdBVkVPVVQsRFdPUkQpOw0KTU1SRVNVTFQgX19h dHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSB3YXZlT3V0R2V0RXJyb3JUZXh0QShNTVJFU1VMVCxM UFNUUixVSU5UKTsNCk1NUkVTVUxUIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgd2F2ZU91 dEdldEVycm9yVGV4dFcoTU1SRVNVTFQsTFBXU1RSLFVJTlQpOw0KTU1SRVNVTFQgX19hdHRyaWJ1 dGVfXygoX19zdGRjYWxsX18pKSB3YXZlT3V0T3BlbihMUEhXQVZFT1VULFVJTlQsTFBDV0FWRUZP Uk1BVEVYLERXT1JELERXT1JELERXT1JEKTsNCk1NUkVTVUxUIF9fYXR0cmlidXRlX18oKF9fc3Rk Y2FsbF9fKSkgd2F2ZU91dENsb3NlKEhXQVZFT1VUKTsNCk1NUkVTVUxUIF9fYXR0cmlidXRlX18o KF9fc3RkY2FsbF9fKSkgd2F2ZU91dFByZXBhcmVIZWFkZXIoSFdBVkVPVVQsTFBXQVZFSERSLFVJ TlQpOw0KTU1SRVNVTFQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSB3YXZlT3V0VW5wcmVw YXJlSGVhZGVyKEhXQVZFT1VULExQV0FWRUhEUixVSU5UKTsNCk1NUkVTVUxUIF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgd2F2ZU91dFdyaXRlKEhXQVZFT1VULExQV0FWRUhEUixVSU5UKTsN Ck1NUkVTVUxUIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgd2F2ZU91dFBhdXNlKEhXQVZF T1VUKTsNCk1NUkVTVUxUIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgd2F2ZU91dFJlc3Rh cnQoSFdBVkVPVVQpOw0KTU1SRVNVTFQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSB3YXZl T3V0UmVzZXQoSFdBVkVPVVQpOw0KTU1SRVNVTFQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSB3YXZlT3V0QnJlYWtMb29wKEhXQVZFT1VUKTsNCk1NUkVTVUxUIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgd2F2ZU91dEdldFBvc2l0aW9uKEhXQVZFT1VULExQTU1USU1FLFVJTlQpOw0K TU1SRVNVTFQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSB3YXZlT3V0R2V0UGl0Y2goSFdB VkVPVVQsUERXT1JEKTsNCk1NUkVTVUxUIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgd2F2 ZU91dFNldFBpdGNoKEhXQVZFT1VULERXT1JEKTsNCk1NUkVTVUxUIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgd2F2ZU91dEdldFBsYXliYWNrUmF0ZShIV0FWRU9VVCxQRFdPUkQpOw0KTU1S RVNVTFQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSB3YXZlT3V0U2V0UGxheWJhY2tSYXRl KEhXQVZFT1VULERXT1JEKTsNCk1NUkVTVUxUIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg d2F2ZU91dEdldElEKEhXQVZFT1VULExQVUlOVCk7DQpNTVJFU1VMVCBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIHdhdmVPdXRNZXNzYWdlKEhXQVZFT1VULFVJTlQsRFdPUkQsRFdPUkQpOw0K VUlOVCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIHdhdmVJbkdldE51bURldnModm9pZCk7 DQpNTVJFU1VMVCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIHdhdmVJbkdldERldkNhcHNB KFVJTlQsTFBXQVZFSU5DQVBTQSxVSU5UKTsNCk1NUkVTVUxUIF9fYXR0cmlidXRlX18oKF9fc3Rk Y2FsbF9fKSkgd2F2ZUluR2V0RGV2Q2Fwc1coVUlOVCxMUFdBVkVJTkNBUFNXLFVJTlQpOw0KTU1S RVNVTFQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSB3YXZlSW5HZXRFcnJvclRleHRBKE1N UkVTVUxULExQU1RSLFVJTlQpOw0KTU1SRVNVTFQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSB3YXZlSW5HZXRFcnJvclRleHRXKE1NUkVTVUxULExQV1NUUixVSU5UKTsNCk1NUkVTVUxUIF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgd2F2ZUluT3BlbihMUEhXQVZFSU4sVUlOVCxMUENX QVZFRk9STUFURVgsRFdPUkQsRFdPUkQsRFdPUkQpOw0KTU1SRVNVTFQgX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSB3YXZlSW5DbG9zZShIV0FWRUlOKTsNCk1NUkVTVUxUIF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgd2F2ZUluUHJlcGFyZUhlYWRlcihIV0FWRUlOLExQV0FWRUhEUixV SU5UKTsNCk1NUkVTVUxUIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgd2F2ZUluVW5wcmVw YXJlSGVhZGVyKEhXQVZFSU4sTFBXQVZFSERSLFVJTlQpOw0KTU1SRVNVTFQgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSB3YXZlSW5BZGRCdWZmZXIoSFdBVkVJTixMUFdBVkVIRFIsVUlOVCk7 DQpNTVJFU1VMVCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIHdhdmVJblN0YXJ0KEhXQVZF SU4pOw0KTU1SRVNVTFQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSB3YXZlSW5TdG9wKEhX QVZFSU4pOw0KTU1SRVNVTFQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSB3YXZlSW5SZXNl dChIV0FWRUlOKTsNCk1NUkVTVUxUIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgd2F2ZUlu R2V0UG9zaXRpb24oSFdBVkVJTixMUE1NVElNRSxVSU5UKTsNCk1NUkVTVUxUIF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgd2F2ZUluR2V0SUQoSFdBVkVJTixMUFVJTlQpOw0KTU1SRVNVTFQg X19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSB3YXZlSW5NZXNzYWdlKEhXQVZFSU4sVUlOVCxE V09SRCxEV09SRCk7DQpVSU5UIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgbWlkaU91dEdl dE51bURldnModm9pZCk7DQpNTVJFU1VMVCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIG1p ZGlTdHJlYW1PcGVuKExQSE1JRElTVFJNLExQVUlOVCxEV09SRCxEV09SRCxEV09SRCxEV09SRCk7 DQpNTVJFU1VMVCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIG1pZGlTdHJlYW1DbG9zZShI TUlESVNUUk0pOw0KTU1SRVNVTFQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBtaWRpU3Ry ZWFtUHJvcGVydHkoSE1JRElTVFJNLExQQllURSxEV09SRCk7DQpNTVJFU1VMVCBfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpIG1pZGlTdHJlYW1Qb3NpdGlvbihITUlESVNUUk0sTFBNTVRJTUUs VUlOVCk7DQpNTVJFU1VMVCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIG1pZGlTdHJlYW1P dXQoSE1JRElTVFJNLExQTUlESUhEUixVSU5UKTsNCk1NUkVTVUxUIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgbWlkaVN0cmVhbVBhdXNlKEhNSURJU1RSTSk7DQpNTVJFU1VMVCBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIG1pZGlTdHJlYW1SZXN0YXJ0KEhNSURJU1RSTSk7DQpNTVJF U1VMVCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIG1pZGlTdHJlYW1TdG9wKEhNSURJU1RS TSk7DQpNTVJFU1VMVCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIG1pZGlDb25uZWN0KEhN SURJLEhNSURJT1VULFBWT0lEKTsNCk1NUkVTVUxUIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgbWlkaURpc2Nvbm5lY3QoSE1JREksSE1JRElPVVQsUFZPSUQpOw0KTU1SRVNVTFQgX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBtaWRpT3V0R2V0RGV2Q2Fwc0EoVUlOVCxMUE1JRElPVVRD QVBTQSxVSU5UKTsNCk1NUkVTVUxUIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgbWlkaU91 dEdldERldkNhcHNXKFVJTlQsTFBNSURJT1VUQ0FQU1csVUlOVCk7DQpNTVJFU1VMVCBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIG1pZGlPdXRHZXRWb2x1bWUoSE1JRElPVVQsUERXT1JEKTsN Ck1NUkVTVUxUIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgbWlkaU91dFNldFZvbHVtZShI TUlESU9VVCxEV09SRCk7DQpNTVJFU1VMVCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIG1p ZGlPdXRHZXRFcnJvclRleHRBKE1NUkVTVUxULExQU1RSLFVJTlQpOw0KTU1SRVNVTFQgX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBtaWRpT3V0R2V0RXJyb3JUZXh0VyhNTVJFU1VMVCxMUFdT VFIsVUlOVCk7DQpNTVJFU1VMVCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIG1pZGlPdXRP cGVuKExQSE1JRElPVVQsVUlOVCxEV09SRCxEV09SRCxEV09SRCk7DQpNTVJFU1VMVCBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIG1pZGlPdXRDbG9zZShITUlESU9VVCk7DQpNTVJFU1VMVCBf X2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIG1pZGlPdXRQcmVwYXJlSGVhZGVyKEhNSURJT1VU LExQTUlESUhEUixVSU5UKTsNCk1NUkVTVUxUIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg bWlkaU91dFVucHJlcGFyZUhlYWRlcihITUlESU9VVCxMUE1JRElIRFIsVUlOVCk7DQpNTVJFU1VM VCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIG1pZGlPdXRTaG9ydE1zZyhITUlESU9VVCxE V09SRCk7DQpNTVJFU1VMVCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIG1pZGlPdXRMb25n TXNnKEhNSURJT1VULExQTUlESUhEUixVSU5UKTsNCk1NUkVTVUxUIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgbWlkaU91dFJlc2V0KEhNSURJT1VUKTsNCk1NUkVTVUxUIF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgbWlkaU91dENhY2hlUGF0Y2hlcyhITUlESU9VVCxVSU5ULExQV09S RCxVSU5UKTsNCk1NUkVTVUxUIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgbWlkaU91dENh Y2hlRHJ1bVBhdGNoZXMoSE1JRElPVVQsVUlOVCxMUFdPUkQsVUlOVCk7DQpNTVJFU1VMVCBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIG1pZGlPdXRHZXRJRChITUlESU9VVCxMUFVJTlQpOw0K TU1SRVNVTFQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBtaWRpT3V0TWVzc2FnZShITUlE SU9VVCxVSU5ULERXT1JELERXT1JEKTsNClVJTlQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSBtaWRpSW5HZXROdW1EZXZzKHZvaWQpOw0KTU1SRVNVTFQgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBtaWRpSW5HZXREZXZDYXBzQShVSU5ULExQTUlESUlOQ0FQU0EsVUlOVCk7DQpNTVJF U1VMVCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIG1pZGlJbkdldERldkNhcHNXKFVJTlQs TFBNSURJSU5DQVBTVyxVSU5UKTsNCk1NUkVTVUxUIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgbWlkaUluR2V0RXJyb3JUZXh0QShNTVJFU1VMVCxMUFNUUixVSU5UKTsNCk1NUkVTVUxUIF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgbWlkaUluR2V0RXJyb3JUZXh0VyhNTVJFU1VMVCxM UFdTVFIsVUlOVCk7DQpNTVJFU1VMVCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIG1pZGlJ bk9wZW4oTFBITUlESUlOLFVJTlQsRFdPUkQsRFdPUkQsRFdPUkQpOw0KTU1SRVNVTFQgX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBtaWRpSW5DbG9zZShITUlESUlOKTsNCk1NUkVTVUxUIF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgbWlkaUluUHJlcGFyZUhlYWRlcihITUlESUlOLExQ TUlESUhEUixVSU5UKTsNCk1NUkVTVUxUIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgbWlk aUluVW5wcmVwYXJlSGVhZGVyKEhNSURJSU4sTFBNSURJSERSLFVJTlQpOw0KTU1SRVNVTFQgX19h dHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBtaWRpSW5BZGRCdWZmZXIoSE1JRElJTixMUE1JRElI RFIsVUlOVCk7DQpNTVJFU1VMVCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIG1pZGlJblN0 YXJ0KEhNSURJSU4pOw0KTU1SRVNVTFQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBtaWRp SW5TdG9wKEhNSURJSU4pOw0KTU1SRVNVTFQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBt aWRpSW5SZXNldChITUlESUlOKTsNCk1NUkVTVUxUIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgbWlkaUluR2V0SUQoSE1JRElJTixMUFVJTlQpOw0KTU1SRVNVTFQgX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSBtaWRpSW5NZXNzYWdlKEhNSURJSU4sVUlOVCxEV09SRCxEV09SRCk7DQpV SU5UIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgYXV4R2V0TnVtRGV2cyh2b2lkKTsNCk1N UkVTVUxUIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgYXV4R2V0RGV2Q2Fwc0EoVUlOVCxM UEFVWENBUFNBLFVJTlQpOw0KTU1SRVNVTFQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBh dXhHZXREZXZDYXBzVyhVSU5ULExQQVVYQ0FQU1csVUlOVCk7DQpNTVJFU1VMVCBfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpIGF1eFNldFZvbHVtZShVSU5ULERXT1JEKTsNCk1NUkVTVUxUIF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgYXV4R2V0Vm9sdW1lKFVJTlQsUERXT1JEKTsNCk1N UkVTVUxUIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgYXV4T3V0TWVzc2FnZShVSU5ULFVJ TlQsRFdPUkQsRFdPUkQpOw0KVUlOVCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIG1peGVy R2V0TnVtRGV2cyh2b2lkKTsNCk1NUkVTVUxUIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg bWl4ZXJHZXREZXZDYXBzQShVSU5ULExQTUlYRVJDQVBTQSxVSU5UKTsNCk1NUkVTVUxUIF9fYXR0 cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgbWl4ZXJHZXREZXZDYXBzVyhVSU5ULExQTUlYRVJDQVBT VyxVSU5UKTsNCk1NUkVTVUxUIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgbWl4ZXJPcGVu KExQSE1JWEVSLFVJTlQsRFdPUkQsRFdPUkQsRFdPUkQpOw0KTU1SRVNVTFQgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBtaXhlckNsb3NlKEhNSVhFUik7DQpEV09SRCBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIG1peGVyTWVzc2FnZShITUlYRVIsVUlOVCxEV09SRCxEV09SRCk7DQpN TVJFU1VMVCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIG1peGVyR2V0TGluZUluZm9BKEhN SVhFUk9CSixMUE1JWEVSTElORUEsRFdPUkQpOw0KTU1SRVNVTFQgX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBtaXhlckdldExpbmVJbmZvVyhITUlYRVJPQkosTFBNSVhFUkxJTkVXLERXT1JE KTsNCk1NUkVTVUxUIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgbWl4ZXJHZXRJRChITUlY RVJPQkosUFVJTlQsRFdPUkQpOw0KTU1SRVNVTFQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSBtaXhlckdldExpbmVDb250cm9sc0EoSE1JWEVST0JKLExQTUlYRVJMSU5FQ09OVFJPTFNBLERX T1JEKTsNCk1NUkVTVUxUIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgbWl4ZXJHZXRMaW5l Q29udHJvbHNXKEhNSVhFUk9CSixMUE1JWEVSTElORUNPTlRST0xTVyxEV09SRCk7DQpNTVJFU1VM VCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIG1peGVyR2V0Q29udHJvbERldGFpbHNBKEhN SVhFUk9CSixMUE1JWEVSQ09OVFJPTERFVEFJTFMsRFdPUkQpOw0KTU1SRVNVTFQgX19hdHRyaWJ1 dGVfXygoX19zdGRjYWxsX18pKSBtaXhlckdldENvbnRyb2xEZXRhaWxzVyhITUlYRVJPQkosTFBN SVhFUkNPTlRST0xERVRBSUxTLERXT1JEKTsNCk1NUkVTVUxUIF9fYXR0cmlidXRlX18oKF9fc3Rk Y2FsbF9fKSkgbWl4ZXJTZXRDb250cm9sRGV0YWlscyhITUlYRVJPQkosTFBNSVhFUkNPTlRST0xE RVRBSUxTLERXT1JEKTsNCk1NUkVTVUxUIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgdGlt ZUdldFN5c3RlbVRpbWUoTFBNTVRJTUUsVUlOVCk7DQpEV09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIHRpbWVHZXRUaW1lKHZvaWQpOw0KTU1SRVNVTFQgX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSB0aW1lU2V0RXZlbnQoVUlOVCxVSU5ULExQVElNRUNBTExCQUNLLERXT1JELFVJ TlQpOw0KTU1SRVNVTFQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSB0aW1lS2lsbEV2ZW50 KFVJTlQpOw0KTU1SRVNVTFQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSB0aW1lR2V0RGV2 Q2FwcyhMUFRJTUVDQVBTLFVJTlQpOw0KTU1SRVNVTFQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSB0aW1lQmVnaW5QZXJpb2QoVUlOVCk7DQpNTVJFU1VMVCBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIHRpbWVFbmRQZXJpb2QoVUlOVCk7DQpVSU5UIF9fYXR0cmlidXRlX18oKF9fc3Rk Y2FsbF9fKSkgam95R2V0TnVtRGV2cyh2b2lkKTsNCk1NUkVTVUxUIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgam95R2V0RGV2Q2Fwc0EoVUlOVCxMUEpPWUNBUFNBLFVJTlQpOw0KTU1SRVNV TFQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBqb3lHZXREZXZDYXBzVyhVSU5ULExQSk9Z Q0FQU1csVUlOVCk7DQpNTVJFU1VMVCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIGpveUdl dFBvcyhVSU5ULExQSk9ZSU5GTyk7DQpNTVJFU1VMVCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxf XykpIGpveUdldFBvc0V4KFVJTlQsTFBKT1lJTkZPRVgpOw0KTU1SRVNVTFQgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBqb3lHZXRUaHJlc2hvbGQoVUlOVCxMUFVJTlQpOw0KTU1SRVNVTFQg X19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBqb3lSZWxlYXNlQ2FwdHVyZShVSU5UKTsNCk1N UkVTVUxUIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgam95U2V0Q2FwdHVyZShIV05ELFVJ TlQsVUlOVCxCT09MKTsNCk1NUkVTVUxUIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgam95 U2V0VGhyZXNob2xkKFVJTlQsVUlOVCk7DQpGT1VSQ0MgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBtbWlvU3RyaW5nVG9GT1VSQ0NBKExQQ1NUUixVSU5UKTsNCkZPVVJDQyBfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpIG1taW9TdHJpbmdUb0ZPVVJDQ1coTFBDV1NUUixVSU5UKTsNCkxQ TU1JT1BST0MgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBtbWlvSW5zdGFsbElPUHJvY0Eo Rk9VUkNDLExQTU1JT1BST0MsRFdPUkQpOw0KTFBNTUlPUFJPQyBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIG1taW9JbnN0YWxsSU9Qcm9jVyhGT1VSQ0MsTFBNTUlPUFJPQyxEV09SRCk7DQpI TU1JTyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIG1taW9PcGVuQShMUFNUUixMUE1NSU9J TkZPLERXT1JEKTsNCkhNTUlPIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgbW1pb09wZW5X KExQV1NUUixMUE1NSU9JTkZPLERXT1JEKTsNCk1NUkVTVUxUIF9fYXR0cmlidXRlX18oKF9fc3Rk Y2FsbF9fKSkgbW1pb1JlbmFtZUEoTFBDU1RSLExQQ1NUUixMUENNTUlPSU5GTyxEV09SRCk7DQpN TVJFU1VMVCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIG1taW9SZW5hbWVXKExQQ1dTVFIs TFBDV1NUUixMUENNTUlPSU5GTyxEV09SRCk7DQpNTVJFU1VMVCBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIG1taW9DbG9zZShITU1JTyxVSU5UKTsNCkxPTkcgX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBtbWlvUmVhZChITU1JTyxIUFNUUixMT05HKTsNCkxPTkcgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBtbWlvV3JpdGUoSE1NSU8sTFBDU1RSLExPTkcpOw0KTE9ORyBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIG1taW9TZWVrKEhNTUlPLExPTkcsaW50KTsNCk1NUkVT VUxUIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgbW1pb0dldEluZm8oSE1NSU8sTFBNTUlP SU5GTyxVSU5UKTsNCk1NUkVTVUxUIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgbW1pb1Nl dEluZm8oSE1NSU8sTFBDTU1JT0lORk8sVUlOVCk7DQpNTVJFU1VMVCBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIG1taW9TZXRCdWZmZXIoSE1NSU8sTFBTVFIsTE9ORyxVSU5UKTsNCk1NUkVT VUxUIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgbW1pb0ZsdXNoKEhNTUlPLFVJTlQpOw0K TU1SRVNVTFQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBtbWlvQWR2YW5jZShITU1JTyxM UE1NSU9JTkZPLFVJTlQpOw0KTFJFU1VMVCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIG1t aW9TZW5kTWVzc2FnZShITU1JTyxVSU5ULExQQVJBTSxMUEFSQU0pOw0KTU1SRVNVTFQgX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBtbWlvRGVzY2VuZChITU1JTyxMUE1NQ0tJTkZPLGNvbnN0 IE1NQ0tJTkZPKixVSU5UKTsNCk1NUkVTVUxUIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg bW1pb0FzY2VuZChITU1JTyxMUE1NQ0tJTkZPLFVJTlQpOw0KTU1SRVNVTFQgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBtbWlvQ3JlYXRlQ2h1bmsoSE1NSU8sTFBNTUNLSU5GTyxVSU5UKTsN Ck1DSUVSUk9SIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgbWNpU2VuZENvbW1hbmRBKE1D SURFVklDRUlELFVJTlQsRFdPUkQsRFdPUkQpOw0KTUNJRVJST1IgX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBtY2lTZW5kQ29tbWFuZFcoTUNJREVWSUNFSUQsVUlOVCxEV09SRCxEV09SRCk7 DQpNQ0lFUlJPUiBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIG1jaVNlbmRTdHJpbmdBKExQ Q1NUUixMUFNUUixVSU5ULEhXTkQpOw0KTUNJRVJST1IgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBtY2lTZW5kU3RyaW5nVyhMUENXU1RSLExQV1NUUixVSU5ULEhXTkQpOw0KTUNJREVWSUNF SUQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBtY2lHZXREZXZpY2VJREEoTFBDU1RSKTsN Ck1DSURFVklDRUlEIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgbWNpR2V0RGV2aWNlSURX KExQQ1dTVFIpOw0KTUNJREVWSUNFSUQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBtY2lH ZXREZXZpY2VJREZyb21FbGVtZW50SURBKERXT1JELExQQ1NUUik7DQpNQ0lERVZJQ0VJRCBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIG1jaUdldERldmljZUlERnJvbUVsZW1lbnRJRFcoRFdP UkQsTFBDV1NUUik7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgbWNpR2V0RXJy b3JTdHJpbmdBKE1DSUVSUk9SLExQU1RSLFVJTlQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIG1jaUdldEVycm9yU3RyaW5nVyhNQ0lFUlJPUixMUFdTVFIsVUlOVCk7DQpCT09M IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgbWNpU2V0WWllbGRQcm9jKE1DSURFVklDRUlE LFlJRUxEUFJPQyxEV09SRCk7DQpIVEFTSyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIG1j aUdldENyZWF0b3JUYXNrKE1DSURFVklDRUlEKTsNCllJRUxEUFJPQyBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIG1jaUdldFlpZWxkUHJvYyhNQ0lERVZJQ0VJRCxQRFdPUkQpOw0KDQp0eXBl ZGVmIHN0cnVjdCB0YWdNQ0lfU0VRX1NFVF9QQVJNUyB7DQogICAgICAgIERXT1JEIGR3Q2FsbGJh Y2s7DQogICAgICAgIERXT1JEIGR3VGltZUZvcm1hdDsNCiAgICAgICAgRFdPUkQgZHdBdWRpbzsN CiAgICAgICAgRFdPUkQgZHdUZW1wbzsNCiAgICAgICAgRFdPUkQgZHdQb3J0Ow0KICAgICAgICBE V09SRCBkd1NsYXZlOw0KICAgICAgICBEV09SRCBkd01hc3RlcjsNCiAgICAgICAgRFdPUkQgZHdP ZmZzZXQ7DQp9IE1DSV9TRVFfU0VUX1BBUk1TLCpQTUNJX1NFUV9TRVRfUEFSTVMsKkxQTUNJX1NF UV9TRVRfUEFSTVM7DQp0eXBlZGVmIHN0cnVjdCB0YWdNQ0lfQU5JTV9PUEVOX1BBUk1TQSB7DQog ICAgICAgIERXT1JEIGR3Q2FsbGJhY2s7DQogICAgICAgIE1DSURFVklDRUlEIHdEZXZpY2VJRDsN CiAgICAgICAgTFBDU1RSIGxwc3RyRGV2aWNlVHlwZTsNCiAgICAgICAgTFBDU1RSIGxwc3RyRWxl bWVudE5hbWU7DQogICAgICAgIExQQ1NUUiBscHN0ckFsaWFzOw0KICAgICAgICBEV09SRCBkd1N0 eWxlOw0KICAgICAgICBIV05EIGhXbmRQYXJlbnQ7DQp9IE1DSV9BTklNX09QRU5fUEFSTVNBLCpQ TUNJX0FOSU1fT1BFTl9QQVJNU0EsKkxQTUNJX0FOSU1fT1BFTl9QQVJNU0E7DQp0eXBlZGVmIHN0 cnVjdCB0YWdNQ0lfQU5JTV9PUEVOX1BBUk1TVyB7DQogICAgICAgIERXT1JEIGR3Q2FsbGJhY2s7 DQogICAgICAgIE1DSURFVklDRUlEIHdEZXZpY2VJRDsNCiAgICAgICAgTFBDV1NUUiBscHN0ckRl dmljZVR5cGU7DQogICAgICAgIExQQ1dTVFIgbHBzdHJFbGVtZW50TmFtZTsNCiAgICAgICAgTFBD V1NUUiBscHN0ckFsaWFzOw0KICAgICAgICBEV09SRCBkd1N0eWxlOw0KICAgICAgICBIV05EIGhX bmRQYXJlbnQ7DQp9IE1DSV9BTklNX09QRU5fUEFSTVNXLCpQTUNJX0FOSU1fT1BFTl9QQVJNU1cs KkxQTUNJX0FOSU1fT1BFTl9QQVJNU1c7DQp0eXBlZGVmIHN0cnVjdCB0YWdNQ0lfQU5JTV9QTEFZ X1BBUk1TIHsNCiAgICAgICAgRFdPUkQgZHdDYWxsYmFjazsNCiAgICAgICAgRFdPUkQgZHdGcm9t Ow0KICAgICAgICBEV09SRCBkd1RvOw0KICAgICAgICBEV09SRCBkd1NwZWVkOw0KfSBNQ0lfQU5J TV9QTEFZX1BBUk1TLCpQTUNJX0FOSU1fUExBWV9QQVJNUywqTFBNQ0lfQU5JTV9QTEFZX1BBUk1T Ow0KdHlwZWRlZiBzdHJ1Y3QgdGFnTUNJX0FOSU1fU1RFUF9QQVJNUyB7DQogICAgICAgIERXT1JE IGR3Q2FsbGJhY2s7DQogICAgICAgIERXT1JEIGR3RnJhbWVzOw0KfSBNQ0lfQU5JTV9TVEVQX1BB Uk1TLCpQTUNJX0FOSU1fU1RFUF9QQVJNUywqTFBNQ0lfQU5JTV9TVEVQX1BBUk1TOw0KdHlwZWRl ZiBzdHJ1Y3QgdGFnTUNJX0FOSU1fV0lORE9XX1BBUk1TQSB7DQogICAgICAgIERXT1JEIGR3Q2Fs bGJhY2s7DQogICAgICAgIEhXTkQgaFduZDsNCiAgICAgICAgVUlOVCBuQ21kU2hvdzsNCiAgICAg ICAgTFBDU1RSIGxwc3RyVGV4dDsNCn0gTUNJX0FOSU1fV0lORE9XX1BBUk1TQSwqUE1DSV9BTklN X1dJTkRPV19QQVJNU0EsKkxQTUNJX0FOSU1fV0lORE9XX1BBUk1TQTsNCnR5cGVkZWYgc3RydWN0 IHRhZ01DSV9BTklNX1dJTkRPV19QQVJNU1cgew0KICAgICAgICBEV09SRCBkd0NhbGxiYWNrOw0K ICAgICAgICBIV05EIGhXbmQ7DQogICAgICAgIFVJTlQgbkNtZFNob3c7DQogICAgICAgIExQQ1dT VFIgbHBzdHJUZXh0Ow0KfSBNQ0lfQU5JTV9XSU5ET1dfUEFSTVNXLCpQTUNJX0FOSU1fV0lORE9X X1BBUk1TVywqTFBNQ0lfQU5JTV9XSU5ET1dfUEFSTVNXOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnTUNJ X0FOSU1fUkVDVF9QQVJNUyB7DQogICAgICAgIERXT1JEIGR3Q2FsbGJhY2s7DQoNCg0KDQoNCiAg ICAgICAgUkVDVCByYzsNCg0KfSBNQ0lfQU5JTV9SRUNUX1BBUk1TLCpQTUNJX0FOSU1fUkVDVF9Q QVJNUywqTFBNQ0lfQU5JTV9SRUNUX1BBUk1TOw0KdHlwZWRlZiBzdHJ1Y3QgdGFnTUNJX0FOSU1f VVBEQVRFX1BBUk1TIHsNCiAgICAgICAgRFdPUkQgZHdDYWxsYmFjazsNCiAgICAgICAgUkVDVCBy YzsNCiAgICAgICAgSERDIGhEQzsNCn0gTUNJX0FOSU1fVVBEQVRFX1BBUk1TLCpQTUNJX0FOSU1f VVBEQVRFX1BBUk1TLCpMUE1DSV9BTklNX1VQREFURV9QQVJNUzsNCnR5cGVkZWYgc3RydWN0IHRh Z01DSV9PVkxZX09QRU5fUEFSTVNBIHsNCiAgICAgICAgRFdPUkQgZHdDYWxsYmFjazsNCiAgICAg ICAgTUNJREVWSUNFSUQgd0RldmljZUlEOw0KICAgICAgICBMUENTVFIgbHBzdHJEZXZpY2VUeXBl Ow0KICAgICAgICBMUENTVFIgbHBzdHJFbGVtZW50TmFtZTsNCiAgICAgICAgTFBDU1RSIGxwc3Ry QWxpYXM7DQogICAgICAgIERXT1JEIGR3U3R5bGU7DQogICAgICAgIEhXTkQgaFduZFBhcmVudDsN Cn0gTUNJX09WTFlfT1BFTl9QQVJNU0EsKlBNQ0lfT1ZMWV9PUEVOX1BBUk1TQSwqTFBNQ0lfT1ZM WV9PUEVOX1BBUk1TQTsNCnR5cGVkZWYgc3RydWN0IHRhZ01DSV9PVkxZX09QRU5fUEFSTVNXIHsN CiAgICAgICAgRFdPUkQgZHdDYWxsYmFjazsNCiAgICAgICAgTUNJREVWSUNFSUQgd0RldmljZUlE Ow0KICAgICAgICBMUENXU1RSIGxwc3RyRGV2aWNlVHlwZTsNCiAgICAgICAgTFBDV1NUUiBscHN0 ckVsZW1lbnROYW1lOw0KICAgICAgICBMUENXU1RSIGxwc3RyQWxpYXM7DQogICAgICAgIERXT1JE IGR3U3R5bGU7DQogICAgICAgIEhXTkQgaFduZFBhcmVudDsNCn0gTUNJX09WTFlfT1BFTl9QQVJN U1csKlBNQ0lfT1ZMWV9PUEVOX1BBUk1TVywqTFBNQ0lfT1ZMWV9PUEVOX1BBUk1TVzsNCnR5cGVk ZWYgc3RydWN0IHRhZ01DSV9PVkxZX1dJTkRPV19QQVJNU0Egew0KICAgICAgICBEV09SRCBkd0Nh bGxiYWNrOw0KICAgICAgICBIV05EIGhXbmQ7DQogICAgICAgIFVJTlQgbkNtZFNob3c7DQogICAg ICAgIExQQ1NUUiBscHN0clRleHQ7DQp9IE1DSV9PVkxZX1dJTkRPV19QQVJNU0EsKlBNQ0lfT1ZM WV9XSU5ET1dfUEFSTVNBLCpMUE1DSV9PVkxZX1dJTkRPV19QQVJNU0E7DQp0eXBlZGVmIHN0cnVj dCB0YWdNQ0lfT1ZMWV9XSU5ET1dfUEFSTVNXIHsNCiAgICAgICAgRFdPUkQgZHdDYWxsYmFjazsN CiAgICAgICAgSFdORCBoV25kOw0KICAgICAgICBVSU5UIG5DbWRTaG93Ow0KICAgICAgICBMUENX U1RSIGxwc3RyVGV4dDsNCn0gTUNJX09WTFlfV0lORE9XX1BBUk1TVywqUE1DSV9PVkxZX1dJTkRP V19QQVJNU1csKkxQTUNJX09WTFlfV0lORE9XX1BBUk1TVzsNCnR5cGVkZWYgc3RydWN0IHRhZ01D SV9PVkxZX1JFQ1RfUEFSTVMgew0KICAgICAgICBEV09SRCBkd0NhbGxiYWNrOw0KDQoNCg0KDQog ICAgICAgIFJFQ1QgcmM7DQoNCn0gTUNJX09WTFlfUkVDVF9QQVJNUywqUE1DSV9PVkxZX1JFQ1Rf UEFSTVMsKkxQTUNJX09WTFlfUkVDVF9QQVJNUzsNCnR5cGVkZWYgc3RydWN0IHRhZ01DSV9PVkxZ X1NBVkVfUEFSTVNBIHsNCiAgICAgICAgRFdPUkQgZHdDYWxsYmFjazsNCiAgICAgICAgTFBDU1RS IGxwZmlsZW5hbWU7DQogICAgICAgIFJFQ1QgcmM7DQp9IE1DSV9PVkxZX1NBVkVfUEFSTVNBLCpQ TUNJX09WTFlfU0FWRV9QQVJNU0EsKkxQTUNJX09WTFlfU0FWRV9QQVJNU0E7DQp0eXBlZGVmIHN0 cnVjdCB0YWdNQ0lfT1ZMWV9TQVZFX1BBUk1TVyB7DQogICAgICAgIERXT1JEIGR3Q2FsbGJhY2s7 DQogICAgICAgIExQQ1dTVFIgbHBmaWxlbmFtZTsNCiAgICAgICAgUkVDVCByYzsNCn0gTUNJX09W TFlfU0FWRV9QQVJNU1csKlBNQ0lfT1ZMWV9TQVZFX1BBUk1TVywqTFBNQ0lfT1ZMWV9TQVZFX1BB Uk1TVzsNCnR5cGVkZWYgc3RydWN0IHRhZ01DSV9PVkxZX0xPQURfUEFSTVNBIHsNCiAgICAgICAg RFdPUkQgZHdDYWxsYmFjazsNCiAgICAgICAgTFBDU1RSIGxwZmlsZW5hbWU7DQogICAgICAgIFJF Q1QgcmM7DQp9IE1DSV9PVkxZX0xPQURfUEFSTVNBLCpQTUNJX09WTFlfTE9BRF9QQVJNU0EsKkxQ TUNJX09WTFlfTE9BRF9QQVJNU0E7DQp0eXBlZGVmIHN0cnVjdCB0YWdNQ0lfT1ZMWV9MT0FEX1BB Uk1TVyB7DQogICAgICAgIERXT1JEIGR3Q2FsbGJhY2s7DQogICAgICAgIExQQ1dTVFIgbHBmaWxl bmFtZTsNCiAgICAgICAgUkVDVCByYzsNCn0gTUNJX09WTFlfTE9BRF9QQVJNU1csKlBNQ0lfT1ZM WV9MT0FEX1BBUk1TVywqTFBNQ0lfT1ZMWV9MT0FEX1BBUk1TVzsNCiMgMTg4MCAidDovbXN5cy8x LjAvbWluZ3cvaW5jbHVkZS9tbXN5c3RlbS5oIiAzDQp0eXBlZGVmIFdBVkVPVVRDQVBTQSBXQVZF T1VUQ0FQUywqUFdBVkVPVVRDQVBTLCpMUFdBVkVPVVRDQVBTOw0KdHlwZWRlZiBXQVZFSU5DQVBT QSBXQVZFSU5DQVBTLCpQV0FWRUlOQ0FQUywqTFBXQVZFSU5DQVBTOw0KdHlwZWRlZiBNSURJT1VU Q0FQU0EgTUlESU9VVENBUFMsKlBNSURJT1VUQ0FQUywqTFBNSURJT1VUQ0FQUzsNCnR5cGVkZWYg TUlESUlOQ0FQU0EgTUlESUlOQ0FQUywqUE1JRElJTkNBUFMsKkxQTUlESUlOQ0FQUzsNCnR5cGVk ZWYgQVVYQ0FQU0EgQVVYQ0FQUywqUEFVWENBUFMsKkxQQVVYQ0FQUzsNCnR5cGVkZWYgTUlYRVJD QVBTQSBNSVhFUkNBUFMsKlBNSVhFUkNBUFMsKkxQTUlYRVJDQVBTOw0KdHlwZWRlZiBNSVhFUkxJ TkVBIE1JWEVSTElORSwqUE1JWEVSTElORSwqTFBNSVhFUkxJTkU7DQp0eXBlZGVmIE1JWEVSQ09O VFJPTEEgTUlYRVJDT05UUk9MLCpQTUlYRVJDT05UUk9MLCpMUE1JWEVSQ09OVFJPTDsNCnR5cGVk ZWYgTUlYRVJMSU5FQ09OVFJPTFNBIE1JWEVSTElORUNPTlRST0xTLCpQTUlYRVJMSU5FQ09OVFJP TFMsKkxQTUlYRVJMSU5FQ09OVFJPTFM7DQp0eXBlZGVmIE1JWEVSQ09OVFJPTERFVEFJTFNfTElT VFRFWFRBIE1JWEVSQ09OVFJPTERFVEFJTFNfTElTVFRFWFQsKlBNSVhFUkNPTlRST0xERVRBSUxT X0xJU1RURVhULCpMUE1JWEVSQ09OVFJPTERFVEFJTFNfTElTVFRFWFQ7DQp0eXBlZGVmIEpPWUNB UFNBIEpPWUNBUFMsKlBKT1lDQVBTLCpMUEpPWUNBUFM7DQp0eXBlZGVmIE1DSV9PUEVOX1BBUk1T QSBNQ0lfT1BFTl9QQVJNUywqUE1DSV9PUEVOX1BBUk1TLCpMUE1DSV9PUEVOX1BBUk1TOw0KdHlw ZWRlZiBNQ0lfSU5GT19QQVJNU0EgTUNJX0lORk9fUEFSTVMsKkxQTUNJX0lORk9fUEFSTVM7DQp0 eXBlZGVmIE1DSV9TWVNJTkZPX1BBUk1TQSBNQ0lfU1lTSU5GT19QQVJNUywqUE1DSV9TWVNJTkZP X1BBUk1TLCpMUE1DSV9TWVNJTkZPX1BBUk1TOw0KdHlwZWRlZiBNQ0lfU0FWRV9QQVJNU0EgTUNJ X1NBVkVfUEFSTVMsKlBNQ0lfU0FWRV9QQVJNUywqTFBNQ0lfU0FWRV9QQVJNUzsNCnR5cGVkZWYg TUNJX0xPQURfUEFSTVNBIE1DSV9MT0FEX1BBUk1TLCpQTUNJX0xPQURfUEFSTVMsKkxQTUNJX0xP QURfUEFSTVM7DQp0eXBlZGVmIE1DSV9WRF9FU0NBUEVfUEFSTVNBIE1DSV9WRF9FU0NBUEVfUEFS TVMsKlBNQ0lfVkRfRVNDQVBFX1BBUk1TLCpMUE1DSV9WRF9FU0NBUEVfUEFSTVM7DQp0eXBlZGVm IE1DSV9XQVZFX09QRU5fUEFSTVNBIE1DSV9XQVZFX09QRU5fUEFSTVMsKlBNQ0lfV0FWRV9PUEVO X1BBUk1TLCpMUE1DSV9XQVZFX09QRU5fUEFSTVM7DQp0eXBlZGVmIE1DSV9BTklNX09QRU5fUEFS TVNBIE1DSV9BTklNX09QRU5fUEFSTVMsKlBNQ0lfQU5JTV9PUEVOX1BBUk1TLCpMUE1DSV9BTklN X09QRU5fUEFSTVM7DQp0eXBlZGVmIE1DSV9BTklNX1dJTkRPV19QQVJNU0EgTUNJX0FOSU1fV0lO RE9XX1BBUk1TLCpQTUNJX0FOSU1fV0lORE9XX1BBUk1TLCpMUE1DSV9BTklNX1dJTkRPV19QQVJN UzsNCnR5cGVkZWYgTUNJX09WTFlfT1BFTl9QQVJNU0EgTUNJX09WTFlfT1BFTl9QQVJNUywqUE1D SV9PVkxZX09QRU5fUEFSTVMsKkxQTUNJX09WTFlfT1BFTl9QQVJNUzsNCnR5cGVkZWYgTUNJX09W TFlfV0lORE9XX1BBUk1TQSBNQ0lfT1ZMWV9XSU5ET1dfUEFSTVMsKlBNQ0lfT1ZMWV9XSU5ET1df UEFSTVMsKkxQTUNJX09WTFlfV0lORE9XX1BBUk1TOw0KdHlwZWRlZiBNQ0lfT1ZMWV9TQVZFX1BB Uk1TQSBNQ0lfT1ZMWV9TQVZFX1BBUk1TLCpQTUNJX09WTFlfU0FWRV9QQVJNUywqTFBNQ0lfT1ZM WV9TQVZFX1BBUk1TOw0KIyAxOTMwICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL21tc3lzdGVt LmgiIDMNCn0NCg0KI3ByYWdtYSBwYWNrKHBvcCkNCiMgMTMzICJ0Oi9tc3lzLzEuMC9taW5ndy9p bmNsdWRlL3dpbmRvd3MuaCIgMiAzDQojIDEgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvbmIz MC5oIiAxIDMNCg0KDQoNCmV4dGVybiAiQyIgew0KIyA5MSAidDovbXN5cy8xLjAvbWluZ3cvaW5j bHVkZS9uYjMwLmgiIDMNCnR5cGVkZWYgc3RydWN0IF9BQ1RJT05fSEVBREVSIHsNCiAgICAgICAg VUxPTkcgdHJhbnNwb3J0X2lkOw0KICAgICAgICBVU0hPUlQgYWN0aW9uX2NvZGU7DQogICAgICAg IFVTSE9SVCByZXNlcnZlZDsNCn0gQUNUSU9OX0hFQURFUiwqUEFDVElPTl9IRUFERVI7DQp0eXBl ZGVmIHN0cnVjdCBfQURBUFRFUl9TVEFUVVMgew0KICAgICAgICBVQ0hBUiBhZGFwdGVyX2FkZHJl c3NbNl07DQogICAgICAgIFVDSEFSIHJldl9tYWpvcjsNCiAgICAgICAgVUNIQVIgcmVzZXJ2ZWQw Ow0KICAgICAgICBVQ0hBUiBhZGFwdGVyX3R5cGU7DQogICAgICAgIFVDSEFSIHJldl9taW5vcjsN CiAgICAgICAgV09SRCBkdXJhdGlvbjsNCiAgICAgICAgV09SRCBmcm1yX3JlY3Y7DQogICAgICAg IFdPUkQgZnJtcl94bWl0Ow0KICAgICAgICBXT1JEIGlmcmFtZV9yZWN2X2VycjsNCiAgICAgICAg V09SRCB4bWl0X2Fib3J0czsNCiAgICAgICAgRFdPUkQgeG1pdF9zdWNjZXNzOw0KICAgICAgICBE V09SRCByZWN2X3N1Y2Nlc3M7DQogICAgICAgIFdPUkQgaWZyYW1lX3htaXRfZXJyOw0KICAgICAg ICBXT1JEIHJlY3ZfYnVmZl91bmF2YWlsOw0KICAgICAgICBXT1JEIHQxX3RpbWVvdXRzOw0KICAg ICAgICBXT1JEIHRpX3RpbWVvdXRzOw0KICAgICAgICBEV09SRCByZXNlcnZlZDE7DQogICAgICAg IFdPUkQgZnJlZV9uY2JzOw0KICAgICAgICBXT1JEIG1heF9jZmdfbmNiczsNCiAgICAgICAgV09S RCBtYXhfbmNiczsNCiAgICAgICAgV09SRCB4bWl0X2J1Zl91bmF2YWlsOw0KICAgICAgICBXT1JE IG1heF9kZ3JhbV9zaXplOw0KICAgICAgICBXT1JEIHBlbmRpbmdfc2VzczsNCiAgICAgICAgV09S RCBtYXhfY2ZnX3Nlc3M7DQogICAgICAgIFdPUkQgbWF4X3Nlc3M7DQogICAgICAgIFdPUkQgbWF4 X3Nlc3NfcGt0X3NpemU7DQogICAgICAgIFdPUkQgbmFtZV9jb3VudDsNCn0gQURBUFRFUl9TVEFU VVMsKlBBREFQVEVSX1NUQVRVUzsNCnR5cGVkZWYgc3RydWN0IF9GSU5EX05BTUVfQlVGRkVSIHsN CiAgICAgICAgVUNIQVIgbGVuZ3RoOw0KICAgICAgICBVQ0hBUiBhY2Nlc3NfY29udHJvbDsNCiAg ICAgICAgVUNIQVIgZnJhbWVfY29udHJvbDsNCiAgICAgICAgVUNIQVIgZGVzdGluYXRpb25fYWRk cls2XTsNCiAgICAgICAgVUNIQVIgc291cmNlX2FkZHJbNl07DQogICAgICAgIFVDSEFSIHJvdXRp bmdfaW5mb1sxOF07DQp9IEZJTkRfTkFNRV9CVUZGRVIsKlBGSU5EX05BTUVfQlVGRkVSOw0KdHlw ZWRlZiBzdHJ1Y3QgX0ZJTkRfTkFNRV9IRUFERVIgew0KICAgICAgICBXT1JEIG5vZGVfY291bnQ7 DQogICAgICAgIFVDSEFSIHJlc2VydmVkOw0KICAgICAgICBVQ0hBUiB1bmlxdWVfZ3JvdXA7DQp9 IEZJTkRfTkFNRV9IRUFERVIsKlBGSU5EX05BTUVfSEVBREVSOw0KdHlwZWRlZiBzdHJ1Y3QgX0xB TkFfRU5VTSB7DQogICAgICAgIFVDSEFSIGxlbmd0aDsNCiAgICAgICAgVUNIQVIgbGFuYVsyNTQg KzFdOw0KfSBMQU5BX0VOVU0sKlBMQU5BX0VOVU07DQp0eXBlZGVmIHN0cnVjdCBfTkFNRV9CVUZG RVIgew0KICAgICAgICBVQ0hBUiBuYW1lWzE2XTsNCiAgICAgICAgVUNIQVIgbmFtZV9udW07DQog ICAgICAgIFVDSEFSIG5hbWVfZmxhZ3M7DQp9IE5BTUVfQlVGRkVSLCpQTkFNRV9CVUZGRVI7DQp0 eXBlZGVmIHN0cnVjdCBfTkNCIHsNCiAgICAgICAgVUNIQVIgbmNiX2NvbW1hbmQ7DQogICAgICAg IFVDSEFSIG5jYl9yZXRjb2RlOw0KICAgICAgICBVQ0hBUiBuY2JfbHNuOw0KICAgICAgICBVQ0hB UiBuY2JfbnVtOw0KICAgICAgICBQVUNIQVIgbmNiX2J1ZmZlcjsNCiAgICAgICAgV09SRCBuY2Jf bGVuZ3RoOw0KICAgICAgICBVQ0hBUiBuY2JfY2FsbG5hbWVbMTZdOw0KICAgICAgICBVQ0hBUiBu Y2JfbmFtZVsxNl07DQogICAgICAgIFVDSEFSIG5jYl9ydG87DQogICAgICAgIFVDSEFSIG5jYl9z dG87DQogICAgICAgIHZvaWQgKF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgKm5jYl9wb3N0 KShzdHJ1Y3QgX05DQiopOw0KICAgICAgICBVQ0hBUiBuY2JfbGFuYV9udW07DQogICAgICAgIFVD SEFSIG5jYl9jbWRfY3BsdDsNCiAgICAgICAgVUNIQVIgbmNiX3Jlc2VydmVbMTBdOw0KICAgICAg ICBIQU5ETEUgbmNiX2V2ZW50Ow0KfSBOQ0IsKlBOQ0I7DQp0eXBlZGVmIHN0cnVjdCBfU0VTU0lP Tl9CVUZGRVIgew0KICAgICAgICBVQ0hBUiBsc247DQogICAgICAgIFVDSEFSIHN0YXRlOw0KICAg ICAgICBVQ0hBUiBsb2NhbF9uYW1lWzE2XTsNCiAgICAgICAgVUNIQVIgcmVtb3RlX25hbWVbMTZd Ow0KICAgICAgICBVQ0hBUiByY3ZzX291dHN0YW5kaW5nOw0KICAgICAgICBVQ0hBUiBzZW5kc19v dXRzdGFuZGluZzsNCn0gU0VTU0lPTl9CVUZGRVIsKlBTRVNTSU9OX0JVRkZFUjsNCnR5cGVkZWYg c3RydWN0IF9TRVNTSU9OX0hFQURFUiB7DQogICAgICAgIFVDSEFSIHNlc3NfbmFtZTsNCiAgICAg ICAgVUNIQVIgbnVtX3Nlc3M7DQogICAgICAgIFVDSEFSIHJjdl9kZ19vdXRzdGFuZGluZzsNCiAg ICAgICAgVUNIQVIgcmN2X2FueV9vdXRzdGFuZGluZzsNCn0gU0VTU0lPTl9IRUFERVIsKlBTRVNT SU9OX0hFQURFUjsNClVDSEFSIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgTmV0YmlvcyhQ TkNCKTsNCg0KfQ0KIyAxMzQgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvd2luZG93cy5oIiAy IDMNCiMgMSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9ycGMuaCIgMSAzDQoNCg0KDQoNCg0K DQpleHRlcm4gIkMiIHsNCiMgMjYgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvcnBjLmgiIDMN CnR5cGVkZWYgdm9pZCAqSV9SUENfSEFORExFOw0KdHlwZWRlZiBsb25nIFJQQ19TVEFUVVM7DQoN CiMgMSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9ycGNkY2UuaCIgMSAzDQoNCg0KDQoNCmV4 dGVybiAiQyIgew0KIyA4OCAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9ycGNkY2UuaCIgMw0K dHlwZWRlZiBJX1JQQ19IQU5ETEUgUlBDX0JJTkRJTkdfSEFORExFOw0KdHlwZWRlZiBSUENfQklO RElOR19IQU5ETEUgaGFuZGxlX3Q7DQp0eXBlZGVmIHN0cnVjdCBfUlBDX0JJTkRJTkdfVkVDVE9S IHsNCiAgICAgICAgdW5zaWduZWQgbG9uZyBDb3VudDsNCiAgICAgICAgUlBDX0JJTkRJTkdfSEFO RExFIEJpbmRpbmdIWzFdOw0KfSBSUENfQklORElOR19WRUNUT1I7DQp0eXBlZGVmIHN0cnVjdCBf VVVJRF9WRUNUT1Igew0KICAgICAgICB1bnNpZ25lZCBsb25nIENvdW50Ow0KICAgICAgICBVVUlE ICpVdWlkWzFdOw0KfSBVVUlEX1ZFQ1RPUjsNCnR5cGVkZWYgdm9pZCAqUlBDX0lGX0hBTkRMRTsN CnR5cGVkZWYgc3RydWN0IF9SUENfSUZfSUQgew0KICAgICAgICBVVUlEIFV1aWQ7DQogICAgICAg IHVuc2lnbmVkIHNob3J0IFZlcnNNYWpvcjsNCiAgICAgICAgdW5zaWduZWQgc2hvcnQgVmVyc01p bm9yOw0KfSBSUENfSUZfSUQ7DQp0eXBlZGVmIHN0cnVjdCBfUlBDX1BPTElDWSB7DQogICAgICAg IHVuc2lnbmVkIGludCBMZW5ndGggOw0KICAgICAgICB1bnNpZ25lZCBsb25nIEVuZHBvaW50Rmxh Z3MgOw0KICAgICAgICB1bnNpZ25lZCBsb25nIE5JQ0ZsYWdzIDsNCn0gUlBDX1BPTElDWSwqUFJQ Q19QT0xJQ1kgOw0KdHlwZWRlZiB2b2lkIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUlBD X09CSkVDVF9JTlFfRk4oVVVJRCosVVVJRCosUlBDX1NUQVRVUyopOw0KdHlwZWRlZiBSUENfU1RB VFVTIFJQQ19JRl9DQUxMQkFDS19GTihSUENfSUZfSEFORExFLHZvaWQqKTsNCnR5cGVkZWYgc3Ry dWN0IHsNCiAgICAgICAgdW5zaWduZWQgaW50IENvdW50Ow0KICAgICAgICB1bnNpZ25lZCBsb25n IFN0YXRzWzFdOw0KfSBSUENfU1RBVFNfVkVDVE9SOw0KdHlwZWRlZiBzdHJ1Y3Qgew0KICAgICAg ICB1bnNpZ25lZCBsb25nIENvdW50Ow0KICAgICAgICBSUENfSUZfSUQqSWZJZFsxXTsNCn0gUlBD X0lGX0lEX1ZFQ1RPUjsNCnR5cGVkZWYgdm9pZCAqUlBDX0FVVEhfSURFTlRJVFlfSEFORExFOw0K dHlwZWRlZiB2b2lkICpSUENfQVVUSFpfSEFORExFOw0KdHlwZWRlZiBzdHJ1Y3QgX1JQQ19TRUNV UklUWV9RT1Mgew0KICAgICAgICB1bnNpZ25lZCBsb25nIFZlcnNpb247DQogICAgICAgIHVuc2ln bmVkIGxvbmcgQ2FwYWJpbGl0aWVzOw0KICAgICAgICB1bnNpZ25lZCBsb25nIElkZW50aXR5VHJh Y2tpbmc7DQogICAgICAgIHVuc2lnbmVkIGxvbmcgSW1wZXJzb25hdGlvblR5cGU7DQp9IFJQQ19T RUNVUklUWV9RT1MsKlBSUENfU0VDVVJJVFlfUU9TOw0KdHlwZWRlZiBzdHJ1Y3QgX1NFQ19XSU5O VF9BVVRIX0lERU5USVRZX1cgew0KICAgICAgICB1bnNpZ25lZCBzaG9ydCAqVXNlcjsNCiAgICAg ICAgdW5zaWduZWQgbG9uZyBVc2VyTGVuZ3RoOw0KICAgICAgICB1bnNpZ25lZCBzaG9ydCAqRG9t YWluOw0KICAgICAgICB1bnNpZ25lZCBsb25nIERvbWFpbkxlbmd0aDsNCiAgICAgICAgdW5zaWdu ZWQgc2hvcnQgKlBhc3N3b3JkOw0KICAgICAgICB1bnNpZ25lZCBsb25nIFBhc3N3b3JkTGVuZ3Ro Ow0KICAgICAgICB1bnNpZ25lZCBsb25nIEZsYWdzOw0KfSBTRUNfV0lOTlRfQVVUSF9JREVOVElU WV9XLCpQU0VDX1dJTk5UX0FVVEhfSURFTlRJVFlfVzsNCnR5cGVkZWYgc3RydWN0IF9TRUNfV0lO TlRfQVVUSF9JREVOVElUWV9BIHsNCiAgICAgICAgdW5zaWduZWQgY2hhciAqVXNlcjsNCiAgICAg ICAgdW5zaWduZWQgbG9uZyBVc2VyTGVuZ3RoOw0KICAgICAgICB1bnNpZ25lZCBjaGFyICpEb21h aW47DQogICAgICAgIHVuc2lnbmVkIGxvbmcgRG9tYWluTGVuZ3RoOw0KICAgICAgICB1bnNpZ25l ZCBjaGFyICpQYXNzd29yZDsNCiAgICAgICAgdW5zaWduZWQgbG9uZyBQYXNzd29yZExlbmd0aDsN CiAgICAgICAgdW5zaWduZWQgbG9uZyBGbGFnczsNCn0gU0VDX1dJTk5UX0FVVEhfSURFTlRJVFlf QSwqUFNFQ19XSU5OVF9BVVRIX0lERU5USVRZX0E7DQp0eXBlZGVmIHN0cnVjdCB7DQogICAgICAg IHVuc2lnbmVkIGNoYXIgKlVzZXJOYW1lOw0KICAgICAgICB1bnNpZ25lZCBjaGFyICpDb21wdXRl ck5hbWU7DQogICAgICAgIHVuc2lnbmVkIHNob3J0IFByaXZpbGVnZTsNCiAgICAgICAgdW5zaWdu ZWQgbG9uZyBBdXRoRmxhZ3M7DQp9IFJQQ19DTElFTlRfSU5GT1JNQVRJT04xLCogUFJQQ19DTElF TlRfSU5GT1JNQVRJT04xOw0KdHlwZWRlZiBJX1JQQ19IQU5ETEUgKlJQQ19FUF9JTlFfSEFORExF Ow0KdHlwZWRlZiBpbnQoX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSAqUlBDX01HTVRfQVVU SE9SSVpBVElPTl9GTikoUlBDX0JJTkRJTkdfSEFORExFLHVuc2lnbmVkIGxvbmcsUlBDX1NUQVRV UyopOw0KDQoNCnR5cGVkZWYgc3RydWN0IF9SUENfUFJPVFNFUV9WRUNUT1JBIHsNCiAgICAgICAg dW5zaWduZWQgaW50IENvdW50Ow0KICAgICAgICB1bnNpZ25lZCBjaGFyKlByb3RzZXFbMV07DQp9 IFJQQ19QUk9UU0VRX1ZFQ1RPUkE7DQp0eXBlZGVmIHN0cnVjdCBfUlBDX1BST1RTRVFfVkVDVE9S VyB7DQogICAgICAgIHVuc2lnbmVkIGludCBDb3VudDsNCiAgICAgICAgdW5zaWduZWQgc2hvcnQq UHJvdHNlcVsxXTsNCn0gUlBDX1BST1RTRVFfVkVDVE9SVzsNClJQQ19TVEFUVVMgX19hdHRyaWJ1 dGVfXygoX19zdGRjYWxsX18pKSBScGNCaW5kaW5nRnJvbVN0cmluZ0JpbmRpbmdBKHVuc2lnbmVk IGNoYXIgKixSUENfQklORElOR19IQU5ETEUgKik7DQpSUENfU1RBVFVTIF9fYXR0cmlidXRlX18o KF9fc3RkY2FsbF9fKSkgUnBjQmluZGluZ0Zyb21TdHJpbmdCaW5kaW5nVyh1bnNpZ25lZCBzaG9y dCAqLFJQQ19CSU5ESU5HX0hBTkRMRSAqKTsNClJQQ19TVEFUVVMgX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBScGNCaW5kaW5nVG9TdHJpbmdCaW5kaW5nQShSUENfQklORElOR19IQU5ETEUs dW5zaWduZWQgY2hhcioqKTsNClJQQ19TVEFUVVMgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSBScGNCaW5kaW5nVG9TdHJpbmdCaW5kaW5nVyhSUENfQklORElOR19IQU5ETEUsdW5zaWduZWQg c2hvcnQqKik7DQpSUENfU1RBVFVTIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUnBjU3Ry aW5nQmluZGluZ0NvbXBvc2VBKHVuc2lnbmVkIGNoYXIgKix1bnNpZ25lZCBjaGFyICosdW5zaWdu ZWQgY2hhciAqLHVuc2lnbmVkIGNoYXIgKix1bnNpZ25lZCBjaGFyICosdW5zaWduZWQgY2hhciAq Kik7DQpSUENfU1RBVFVTIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUnBjU3RyaW5nQmlu ZGluZ0NvbXBvc2VXKHVuc2lnbmVkIHNob3J0ICosdW5zaWduZWQgc2hvcnQgKix1bnNpZ25lZCBz aG9ydCAqLHVuc2lnbmVkIHNob3J0ICosdW5zaWduZWQgc2hvcnQgKix1bnNpZ25lZCBzaG9ydCAq Kik7DQpSUENfU1RBVFVTIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUnBjU3RyaW5nQmlu ZGluZ1BhcnNlQSh1bnNpZ25lZCBjaGFyICosdW5zaWduZWQgY2hhciAqKix1bnNpZ25lZCBjaGFy ICoqLHVuc2lnbmVkIGNoYXIgKiosdW5zaWduZWQgY2hhciAqKix1bnNpZ25lZCBjaGFyICoqKTsN ClJQQ19TVEFUVVMgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBScGNTdHJpbmdCaW5kaW5n UGFyc2VXKHVuc2lnbmVkIHNob3J0ICosdW5zaWduZWQgc2hvcnQgKiosdW5zaWduZWQgc2hvcnQg KiosdW5zaWduZWQgc2hvcnQgKiosdW5zaWduZWQgc2hvcnQgKiosdW5zaWduZWQgc2hvcnQgKiop Ow0KUlBDX1NUQVRVUyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJwY1N0cmluZ0ZyZWVB KHVuc2lnbmVkIGNoYXIqKik7DQpSUENfU1RBVFVTIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgUnBjU3RyaW5nRnJlZVcodW5zaWduZWQgc2hvcnQqKik7DQpSUENfU1RBVFVTIF9fYXR0cmli dXRlX18oKF9fc3RkY2FsbF9fKSkgUnBjTmV0d29ya0lzUHJvdHNlcVZhbGlkQSh1bnNpZ25lZCBj aGFyKik7DQpSUENfU1RBVFVTIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUnBjTmV0d29y a0lzUHJvdHNlcVZhbGlkVyh1bnNpZ25lZCBzaG9ydCopOw0KUlBDX1NUQVRVUyBfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpIFJwY05ldHdvcmtJbnFQcm90c2Vxc0EoUlBDX1BST1RTRVFfVkVD VE9SQSoqKTsNClJQQ19TVEFUVVMgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBScGNOZXR3 b3JrSW5xUHJvdHNlcXNXKFJQQ19QUk9UU0VRX1ZFQ1RPUlcqKik7DQpSUENfU1RBVFVTIF9fYXR0 cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUnBjUHJvdHNlcVZlY3RvckZyZWVBKFJQQ19QUk9UU0VR X1ZFQ1RPUkEqKik7DQpSUENfU1RBVFVTIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUnBj UHJvdHNlcVZlY3RvckZyZWVXKFJQQ19QUk9UU0VRX1ZFQ1RPUlcqKik7DQpSUENfU1RBVFVTIF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUnBjU2VydmVyVXNlUHJvdHNlcUEodW5zaWduZWQg Y2hhciosdW5zaWduZWQgaW50LHZvaWQqKTsNClJQQ19TVEFUVVMgX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBScGNTZXJ2ZXJVc2VQcm90c2VxVyh1bnNpZ25lZCBzaG9ydCosdW5zaWduZWQg aW50LHZvaWQqKTsNClJQQ19TVEFUVVMgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBScGNT ZXJ2ZXJVc2VQcm90c2VxRXhBKHVuc2lnbmVkIGNoYXIqLHVuc2lnbmVkIGludCBNYXhDYWxscyx2 b2lkKixQUlBDX1BPTElDWSk7DQpSUENfU1RBVFVTIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgUnBjU2VydmVyVXNlUHJvdHNlcUV4Vyh1bnNpZ25lZCBzaG9ydCosdW5zaWduZWQgaW50LHZv aWQqLFBSUENfUE9MSUNZKTsNClJQQ19TVEFUVVMgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSBScGNTZXJ2ZXJVc2VQcm90c2VxRXBBKHVuc2lnbmVkIGNoYXIqLHVuc2lnbmVkIGludCx1bnNp Z25lZCBjaGFyKix2b2lkKik7DQpSUENfU1RBVFVTIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgUnBjU2VydmVyVXNlUHJvdHNlcUVwRXhBKHVuc2lnbmVkIGNoYXIqLHVuc2lnbmVkIGludCx1 bnNpZ25lZCBjaGFyKix2b2lkKixQUlBDX1BPTElDWSk7DQpSUENfU1RBVFVTIF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgUnBjU2VydmVyVXNlUHJvdHNlcUVwVyh1bnNpZ25lZCBzaG9ydCos dW5zaWduZWQgaW50LHVuc2lnbmVkIHNob3J0Kix2b2lkKik7DQpSUENfU1RBVFVTIF9fYXR0cmli dXRlX18oKF9fc3RkY2FsbF9fKSkgUnBjU2VydmVyVXNlUHJvdHNlcUVwRXhXKHVuc2lnbmVkIHNo b3J0Kix1bnNpZ25lZCBpbnQsdW5zaWduZWQgc2hvcnQqLHZvaWQqLFBSUENfUE9MSUNZKTsNClJQ Q19TVEFUVVMgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBScGNTZXJ2ZXJVc2VQcm90c2Vx SWZBKHVuc2lnbmVkIGNoYXIqLHVuc2lnbmVkIGludCxSUENfSUZfSEFORExFLHZvaWQqKTsNClJQ Q19TVEFUVVMgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBScGNTZXJ2ZXJVc2VQcm90c2Vx SWZFeEEodW5zaWduZWQgY2hhciosdW5zaWduZWQgaW50LFJQQ19JRl9IQU5ETEUsdm9pZCosUFJQ Q19QT0xJQ1kpOw0KUlBDX1NUQVRVUyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJwY1Nl cnZlclVzZVByb3RzZXFJZlcodW5zaWduZWQgc2hvcnQqLHVuc2lnbmVkIGludCxSUENfSUZfSEFO RExFLHZvaWQqKTsNClJQQ19TVEFUVVMgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBScGNT ZXJ2ZXJVc2VQcm90c2VxSWZFeFcodW5zaWduZWQgc2hvcnQqLHVuc2lnbmVkIGludCxSUENfSUZf SEFORExFLHZvaWQqLFBSUENfUE9MSUNZKTsNClJQQ19TVEFUVVMgX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBScGNNZ210SW5xU2VydmVyUHJpbmNOYW1lQShSUENfQklORElOR19IQU5ETEUs dW5zaWduZWQgbG9uZyx1bnNpZ25lZCBjaGFyKiopOw0KUlBDX1NUQVRVUyBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIFJwY01nbXRJbnFTZXJ2ZXJQcmluY05hbWVXKFJQQ19CSU5ESU5HX0hB TkRMRSx1bnNpZ25lZCBsb25nLHVuc2lnbmVkIHNob3J0KiopOw0KUlBDX1NUQVRVUyBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJwY1NlcnZlcklucURlZmF1bHRQcmluY05hbWVBKHVuc2ln bmVkIGxvbmcsdW5zaWduZWQgY2hhcioqKTsNClJQQ19TVEFUVVMgX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBScGNTZXJ2ZXJJbnFEZWZhdWx0UHJpbmNOYW1lVyh1bnNpZ25lZCBsb25nLHVu c2lnbmVkIHNob3J0KiopOw0KUlBDX1NUQVRVUyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykp IFJwY05zQmluZGluZ0lucUVudHJ5TmFtZUEoUlBDX0JJTkRJTkdfSEFORExFLHVuc2lnbmVkIGxv bmcsdW5zaWduZWQgY2hhcioqKTsNClJQQ19TVEFUVVMgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBScGNOc0JpbmRpbmdJbnFFbnRyeU5hbWVXKFJQQ19CSU5ESU5HX0hBTkRMRSx1bnNpZ25l ZCBsb25nLHVuc2lnbmVkIHNob3J0KiopOw0KUlBDX1NUQVRVUyBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIFJwY0JpbmRpbmdJbnFBdXRoQ2xpZW50QShSUENfQklORElOR19IQU5ETEUsUlBD X0FVVEhaX0hBTkRMRSAqLHVuc2lnbmVkIGNoYXIqKix1bnNpZ25lZCBsb25nKix1bnNpZ25lZCBs b25nKix1bnNpZ25lZCBsb25nKik7DQpSUENfU1RBVFVTIF9fYXR0cmlidXRlX18oKF9fc3RkY2Fs bF9fKSkgUnBjQmluZGluZ0lucUF1dGhDbGllbnRXKFJQQ19CSU5ESU5HX0hBTkRMRSxSUENfQVVU SFpfSEFORExFICosdW5zaWduZWQgc2hvcnQqKix1bnNpZ25lZCBsb25nKix1bnNpZ25lZCBsb25n Kix1bnNpZ25lZCBsb25nKik7DQpSUENfU1RBVFVTIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgUnBjQmluZGluZ0lucUF1dGhJbmZvQShSUENfQklORElOR19IQU5ETEUsdW5zaWduZWQgY2hh cioqLHVuc2lnbmVkIGxvbmcqLHVuc2lnbmVkIGxvbmcqLFJQQ19BVVRIX0lERU5USVRZX0hBTkRM RSosdW5zaWduZWQgbG9uZyopOw0KUlBDX1NUQVRVUyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxf XykpIFJwY0JpbmRpbmdJbnFBdXRoSW5mb1coUlBDX0JJTkRJTkdfSEFORExFLHVuc2lnbmVkIHNo b3J0KiosdW5zaWduZWQgbG9uZyosdW5zaWduZWQgbG9uZyosUlBDX0FVVEhfSURFTlRJVFlfSEFO RExFKix1bnNpZ25lZCBsb25nKik7DQpSUENfU1RBVFVTIF9fYXR0cmlidXRlX18oKF9fc3RkY2Fs bF9fKSkgUnBjQmluZGluZ1NldEF1dGhJbmZvQShSUENfQklORElOR19IQU5ETEUsdW5zaWduZWQg Y2hhciosdW5zaWduZWQgbG9uZyx1bnNpZ25lZCBsb25nLFJQQ19BVVRIX0lERU5USVRZX0hBTkRM RSx1bnNpZ25lZCBsb25nKTsNClJQQ19TVEFUVVMgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSBScGNCaW5kaW5nU2V0QXV0aEluZm9FeEEoUlBDX0JJTkRJTkdfSEFORExFLHVuc2lnbmVkIGNo YXIqLHVuc2lnbmVkIGxvbmcsdW5zaWduZWQgbG9uZyxSUENfQVVUSF9JREVOVElUWV9IQU5ETEUs dW5zaWduZWQgbG9uZyxSUENfU0VDVVJJVFlfUU9TKik7DQpSUENfU1RBVFVTIF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgUnBjQmluZGluZ1NldEF1dGhJbmZvVyhSUENfQklORElOR19IQU5E TEUsdW5zaWduZWQgc2hvcnQqLHVuc2lnbmVkIGxvbmcsdW5zaWduZWQgbG9uZyxSUENfQVVUSF9J REVOVElUWV9IQU5ETEUsdW5zaWduZWQgbG9uZyk7DQpSUENfU1RBVFVTIF9fYXR0cmlidXRlX18o KF9fc3RkY2FsbF9fKSkgUnBjQmluZGluZ1NldEF1dGhJbmZvRXhXKFJQQ19CSU5ESU5HX0hBTkRM RSx1bnNpZ25lZCBzaG9ydCosdW5zaWduZWQgbG9uZyx1bnNpZ25lZCBsb25nLFJQQ19BVVRIX0lE RU5USVRZX0hBTkRMRSx1bnNpZ25lZCBsb25nLFJQQ19TRUNVUklUWV9RT1MqKTsNClJQQ19TVEFU VVMgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBScGNCaW5kaW5nSW5xQXV0aEluZm9FeEEo UlBDX0JJTkRJTkdfSEFORExFLHVuc2lnbmVkIGNoYXIqKix1bnNpZ25lZCBsb25nKix1bnNpZ25l ZCBsb25nKixSUENfQVVUSF9JREVOVElUWV9IQU5ETEUqLHVuc2lnbmVkIGxvbmcqLHVuc2lnbmVk IGxvbmcsUlBDX1NFQ1VSSVRZX1FPUyopOw0KUlBDX1NUQVRVUyBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIFJwY0JpbmRpbmdJbnFBdXRoSW5mb0V4VyhSUENfQklORElOR19IQU5ETEUsdW5z aWduZWQgc2hvcnQgKiogLCB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKiwgUlBDX0FV VEhfSURFTlRJVFlfSEFORExFICosIHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQgbG9uZyAsIFJQ Q19TRUNVUklUWV9RT1MgKik7DQp0eXBlZGVmIHZvaWQoX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSAqUlBDX0FVVEhfS0VZX1JFVFJJRVZBTF9GTikodm9pZCosdW5zaWduZWQgc2hvcnQqLHVu c2lnbmVkIGxvbmcsdm9pZCoqLFJQQ19TVEFUVVMqKTsNClJQQ19TVEFUVVMgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBScGNTZXJ2ZXJSZWdpc3RlckF1dGhJbmZvQSh1bnNpZ25lZCBjaGFy Kix1bnNpZ25lZCBsb25nLFJQQ19BVVRIX0tFWV9SRVRSSUVWQUxfRk4sdm9pZCopOw0KUlBDX1NU QVRVUyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJwY1NlcnZlclJlZ2lzdGVyQXV0aElu Zm9XKHVuc2lnbmVkIHNob3J0Kix1bnNpZ25lZCBsb25nLFJQQ19BVVRIX0tFWV9SRVRSSUVWQUxf Rk4sdm9pZCopOw0KUlBDX1NUQVRVUyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFV1aWRU b1N0cmluZ0EoVVVJRCosdW5zaWduZWQgY2hhcioqKTsNClJQQ19TVEFUVVMgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBVdWlkRnJvbVN0cmluZ0EodW5zaWduZWQgY2hhciosVVVJRCopOw0K UlBDX1NUQVRVUyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFV1aWRUb1N0cmluZ1coVVVJ RCosdW5zaWduZWQgc2hvcnQqKik7DQpSUENfU1RBVFVTIF9fYXR0cmlidXRlX18oKF9fc3RkY2Fs bF9fKSkgVXVpZEZyb21TdHJpbmdXKHVuc2lnbmVkIHNob3J0KixVVUlEKik7DQpSUENfU1RBVFVT IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUnBjRXBSZWdpc3Rlck5vUmVwbGFjZUEoUlBD X0lGX0hBTkRMRSxSUENfQklORElOR19WRUNUT1IqLFVVSURfVkVDVE9SKix1bnNpZ25lZCBjaGFy Kik7DQpSUENfU1RBVFVTIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUnBjRXBSZWdpc3Rl ck5vUmVwbGFjZVcoUlBDX0lGX0hBTkRMRSxSUENfQklORElOR19WRUNUT1IqLCBVVUlEX1ZFQ1RP UiosdW5zaWduZWQgc2hvcnQqKTsNClJQQ19TVEFUVVMgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBScGNFcFJlZ2lzdGVyQShSUENfSUZfSEFORExFLFJQQ19CSU5ESU5HX1ZFQ1RPUiosVVVJ RF9WRUNUT1IqLHVuc2lnbmVkIGNoYXIqKTsNClJQQ19TVEFUVVMgX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBScGNFcFJlZ2lzdGVyVyhSUENfSUZfSEFORExFLFJQQ19CSU5ESU5HX1ZFQ1RP UiosVVVJRF9WRUNUT1IqLHVuc2lnbmVkIHNob3J0Kik7DQpSUENfU1RBVFVTIF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgRGNlRXJyb3JJbnFUZXh0QShSUENfU1RBVFVTLHVuc2lnbmVkIGNo YXIqKTsNClJQQ19TVEFUVVMgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBEY2VFcnJvcklu cVRleHRXKFJQQ19TVEFUVVMsdW5zaWduZWQgc2hvcnQqKTsNClJQQ19TVEFUVVMgX19hdHRyaWJ1 dGVfXygoX19zdGRjYWxsX18pKSBScGNNZ210RXBFbHRJbnFOZXh0QShSUENfRVBfSU5RX0hBTkRM RSxSUENfSUZfSUQqLFJQQ19CSU5ESU5HX0hBTkRMRSosVVVJRCosdW5zaWduZWQgY2hhcioqKTsN ClJQQ19TVEFUVVMgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBScGNNZ210RXBFbHRJbnFO ZXh0VyhSUENfRVBfSU5RX0hBTkRMRSxSUENfSUZfSUQqLFJQQ19CSU5ESU5HX0hBTkRMRSosVVVJ RCosdW5zaWduZWQgc2hvcnQqKik7DQojIDMyNiAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9y cGNkY2UuaCIgMw0KUlBDX1NUQVRVUyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJwY0Jp bmRpbmdDb3B5KFJQQ19CSU5ESU5HX0hBTkRMRSxSUENfQklORElOR19IQU5ETEUqKTsNClJQQ19T VEFUVVMgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBScGNCaW5kaW5nRnJlZShSUENfQklO RElOR19IQU5ETEUqKTsNClJQQ19TVEFUVVMgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBS cGNCaW5kaW5nSW5xT2JqZWN0KFJQQ19CSU5ESU5HX0hBTkRMRSxVVUlEICopOw0KUlBDX1NUQVRV UyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJwY0JpbmRpbmdSZXNldChSUENfQklORElO R19IQU5ETEUpOw0KUlBDX1NUQVRVUyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJwY0Jp bmRpbmdTZXRPYmplY3QoUlBDX0JJTkRJTkdfSEFORExFLFVVSUQgKik7DQpSUENfU1RBVFVTIF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUnBjTWdtdElucURlZmF1bHRQcm90ZWN0TGV2ZWwo dW5zaWduZWQgbG9uZyx1bnNpZ25lZCBsb25nICopOw0KUlBDX1NUQVRVUyBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIFJwY0JpbmRpbmdWZWN0b3JGcmVlKFJQQ19CSU5ESU5HX1ZFQ1RPUiAq Kik7DQpSUENfU1RBVFVTIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUnBjSWZJbnFJZChS UENfSUZfSEFORExFLFJQQ19JRl9JRCAqKTsNClJQQ19TVEFUVVMgX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBScGNNZ210SW5xQ29tVGltZW91dChSUENfQklORElOR19IQU5ETEUsdW5zaWdu ZWQgaW50Kik7DQpSUENfU1RBVFVTIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUnBjTWdt dFNldENvbVRpbWVvdXQoUlBDX0JJTkRJTkdfSEFORExFLHVuc2lnbmVkIGludCk7DQpSUENfU1RB VFVTIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUnBjTWdtdFNldENhbmNlbFRpbWVvdXQo bG9uZyBUaW1lb3V0KTsNClJQQ19TVEFUVVMgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBS cGNPYmplY3RJbnFUeXBlKFVVSUQgKixVVUlEICopOw0KUlBDX1NUQVRVUyBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIFJwY09iamVjdFNldElucUZuKFJQQ19PQkpFQ1RfSU5RX0ZOICopOw0K UlBDX1NUQVRVUyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJwY09iamVjdFNldFR5cGUo VVVJRCAqLFVVSUQgKik7DQpSUENfU1RBVFVTIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg UnBjUHJvdHNlcVZlY3RvckZyZWVBKFJQQ19QUk9UU0VRX1ZFQ1RPUkEgKiopOw0KUlBDX1NUQVRV UyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJwY1NlcnZlcklucUlmKFJQQ19JRl9IQU5E TEUsVVVJRCosdm9pZCoqKTsNClJQQ19TVEFUVVMgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSBScGNTZXJ2ZXJMaXN0ZW4odW5zaWduZWQgaW50LHVuc2lnbmVkIGludCx1bnNpZ25lZCBpbnQp Ow0KUlBDX1NUQVRVUyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJwY1NlcnZlclJlZ2lz dGVySWYoUlBDX0lGX0hBTkRMRSxVVUlEKix2b2lkKik7DQpSUENfU1RBVFVTIF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgUnBjU2VydmVyUmVnaXN0ZXJJZkV4KFJQQ19JRl9IQU5ETEUsVVVJ RCosdm9pZCosdW5zaWduZWQgaW50LHVuc2lnbmVkIGludCxSUENfSUZfQ0FMTEJBQ0tfRk4qKTsN ClJQQ19TVEFUVVMgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBScGNTZXJ2ZXJVbnJlZ2lz dGVySWYoUlBDX0lGX0hBTkRMRSxVVUlEKix1bnNpZ25lZCBpbnQpOw0KUlBDX1NUQVRVUyBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJwY1NlcnZlclVzZUFsbFByb3RzZXFzKHVuc2lnbmVk IGludCx2b2lkKik7DQpSUENfU1RBVFVTIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUnBj U2VydmVyVXNlQWxsUHJvdHNlcXNFeCh1bnNpZ25lZCBpbnQsdm9pZCosUFJQQ19QT0xJQ1kpOw0K UlBDX1NUQVRVUyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJwY1NlcnZlclVzZUFsbFBy b3RzZXFzSWYodW5zaWduZWQgaW50LFJQQ19JRl9IQU5ETEUsdm9pZCopOw0KUlBDX1NUQVRVUyBf X2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJwY1NlcnZlclVzZUFsbFByb3RzZXFzSWZFeCh1 bnNpZ25lZCBpbnQsUlBDX0lGX0hBTkRMRSx2b2lkKixQUlBDX1BPTElDWSk7DQpSUENfU1RBVFVT IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUnBjTWdtdFN0YXRzVmVjdG9yRnJlZShSUENf U1RBVFNfVkVDVE9SKiopOw0KUlBDX1NUQVRVUyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykp IFJwY01nbXRJbnFTdGF0cyhSUENfQklORElOR19IQU5ETEUsUlBDX1NUQVRTX1ZFQ1RPUioqKTsN ClJQQ19TVEFUVVMgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBScGNNZ210SXNTZXJ2ZXJM aXN0ZW5pbmcoUlBDX0JJTkRJTkdfSEFORExFKTsNClJQQ19TVEFUVVMgX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSBScGNNZ210U3RvcFNlcnZlckxpc3RlbmluZyhSUENfQklORElOR19IQU5E TEUpOw0KUlBDX1NUQVRVUyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJwY01nbXRXYWl0 U2VydmVyTGlzdGVuKHZvaWQpOw0KUlBDX1NUQVRVUyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxf XykpIFJwY01nbXRTZXRTZXJ2ZXJTdGFja1NpemUodW5zaWduZWQgbG9uZyk7DQp2b2lkIF9fYXR0 cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUnBjU3NEb250U2VyaWFsaXplQ29udGV4dCh2b2lkKTsN ClJQQ19TVEFUVVMgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBScGNNZ210RW5hYmxlSWRs ZUNsZWFudXAodm9pZCk7DQpSUENfU1RBVFVTIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg UnBjTWdtdElucUlmSWRzKFJQQ19CSU5ESU5HX0hBTkRMRSxSUENfSUZfSURfVkVDVE9SKiopOw0K UlBDX1NUQVRVUyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJwY0lmSWRWZWN0b3JGcmVl KFJQQ19JRl9JRF9WRUNUT1IqKik7DQpSUENfU1RBVFVTIF9fYXR0cmlidXRlX18oKF9fc3RkY2Fs bF9fKSkgUnBjRXBSZXNvbHZlQmluZGluZyhSUENfQklORElOR19IQU5ETEUsUlBDX0lGX0hBTkRM RSk7DQpSUENfU1RBVFVTIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUnBjQmluZGluZ1Nl cnZlckZyb21DbGllbnQoUlBDX0JJTkRJTkdfSEFORExFLFJQQ19CSU5ESU5HX0hBTkRMRSopOw0K X19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKSB2b2lkIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgUnBjUmFpc2VFeGNlcHRpb24oUlBDX1NUQVRVUyk7DQpSUENfU1RBVFVTIF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgUnBjVGVzdENhbmNlbCgpOw0KUlBDX1NUQVRVUyBfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpIFJwY0NhbmNlbFRocmVhZCh2b2lkKik7DQpSUENfU1RBVFVTIF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgVXVpZENyZWF0ZShVVUlEKik7DQpzaWduZWQgaW50 IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgVXVpZENvbXBhcmUoVVVJRCosVVVJRCosIFJQ Q19TVEFUVVMqKTsNClJQQ19TVEFUVVMgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBVdWlk Q3JlYXRlTmlsKFVVSUQqKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFV1aWRF cXVhbChVVUlEKixVVUlEKiwgUlBDX1NUQVRVUyopOw0KdW5zaWduZWQgc2hvcnQgX19hdHRyaWJ1 dGVfXygoX19zdGRjYWxsX18pKSBVdWlkSGFzaChVVUlEKixSUENfU1RBVFVTKik7DQppbnQgX19h dHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBVdWlkSXNOaWwoVVVJRCosUlBDX1NUQVRVUyopOw0K UlBDX1NUQVRVUyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJwY0VwVW5yZWdpc3RlcihS UENfSUZfSEFORExFLFJQQ19CSU5ESU5HX1ZFQ1RPUiosVVVJRF9WRUNUT1IqKTsNClJQQ19TVEFU VVMgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBScGNNZ210RXBFbHRJbnFCZWdpbihSUENf QklORElOR19IQU5ETEUsdW5zaWduZWQgbG9uZyxSUENfSUZfSUQqLHVuc2lnbmVkIGxvbmcsVVVJ RCosUlBDX0VQX0lOUV9IQU5ETEUqKTsNClJQQ19TVEFUVVMgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBScGNNZ210RXBFbHRJbnFEb25lKFJQQ19FUF9JTlFfSEFORExFKik7DQpSUENfU1RB VFVTIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUnBjTWdtdEVwVW5yZWdpc3RlcihSUENf QklORElOR19IQU5ETEUsUlBDX0lGX0lEKixSUENfQklORElOR19IQU5ETEUsVVVJRCopOw0KUlBD X1NUQVRVUyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJwY01nbXRTZXRBdXRob3JpemF0 aW9uRm4oUlBDX01HTVRfQVVUSE9SSVpBVElPTl9GTik7DQpSUENfU1RBVFVTIF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgUnBjTWdtdElucVBhcmFtZXRlcih1bnNpZ25lZCBpbnQsdW5zaWdu ZWQgbG9uZyopOw0KUlBDX1NUQVRVUyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJwY01n bXRTZXRQYXJhbWV0ZXIodW5zaWduZWQgaW50LHVuc2lnbmVkIGxvbmcpOw0KUlBDX1NUQVRVUyBf X2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJwY01nbXRCaW5kaW5nSW5xUGFyYW1ldGVyKFJQ Q19CSU5ESU5HX0hBTkRMRSx1bnNpZ25lZCBpbnQsdW5zaWduZWQgbG9uZyopOw0KUlBDX1NUQVRV UyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJwY01nbXRCaW5kaW5nU2V0UGFyYW1ldGVy KFJQQ19CSU5ESU5HX0hBTkRMRSx1bnNpZ25lZCBpbnQsdW5zaWduZWQgbG9uZyk7DQojIDEgInQ6 L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvcnBjZGNlcC5oIiAxIDMNCg0KDQoNCmV4dGVybiAiQyIg ew0KIyAxOCAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9ycGNkY2VwLmgiIDMNCnR5cGVkZWYg c3RydWN0IF9SUENfVkVSU0lPTiB7DQogICAgICAgIHVuc2lnbmVkIHNob3J0IE1ham9yVmVyc2lv bjsNCiAgICAgICAgdW5zaWduZWQgc2hvcnQgTWlub3JWZXJzaW9uOw0KfSBSUENfVkVSU0lPTjsN CnR5cGVkZWYgc3RydWN0IF9SUENfU1lOVEFYX0lERU5USUZJRVIgew0KICAgICAgICBHVUlEIFN5 bnRheEdVSUQ7DQogICAgICAgIFJQQ19WRVJTSU9OIFN5bnRheFZlcnNpb247DQp9IFJQQ19TWU5U QVhfSURFTlRJRklFUiwgKlBSUENfU1lOVEFYX0lERU5USUZJRVI7DQp0eXBlZGVmIHN0cnVjdCBf UlBDX01FU1NBR0Ugew0KICAgICAgICBIQU5ETEUgSGFuZGxlOw0KICAgICAgICB1bnNpZ25lZCBs b25nIERhdGFSZXByZXNlbnRhdGlvbjsNCiAgICAgICAgdm9pZCAqQnVmZmVyOw0KICAgICAgICB1 bnNpZ25lZCBpbnQgQnVmZmVyTGVuZ3RoOw0KICAgICAgICB1bnNpZ25lZCBpbnQgUHJvY051bTsN CiAgICAgICAgUFJQQ19TWU5UQVhfSURFTlRJRklFUiBUcmFuc2ZlclN5bnRheDsNCiAgICAgICAg dm9pZCAqUnBjSW50ZXJmYWNlSW5mb3JtYXRpb247DQogICAgICAgIHZvaWQgKlJlc2VydmVkRm9y UnVudGltZTsNCiAgICAgICAgdm9pZCAqTWFuYWdlckVwdjsNCiAgICAgICAgdm9pZCAqSW1wb3J0 Q29udGV4dDsNCiAgICAgICAgdW5zaWduZWQgbG9uZyBScGNGbGFnczsNCn0gUlBDX01FU1NBR0Us KlBSUENfTUVTU0FHRTsNCnR5cGVkZWYgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykp IFJQQ19GT1JXQVJEX0ZVTkNUSU9OKEdVSUQqLFJQQ19WRVJTSU9OKixHVUlEKix1bnNpZ25lZCBj aGFyKix2b2lkKiopOw0KdHlwZWRlZiB2b2lkKF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg KlJQQ19ESVNQQVRDSF9GVU5DVElPTikgKCBQUlBDX01FU1NBR0UgTWVzc2FnZSk7DQp0eXBlZGVm IHN0cnVjdCB7DQogICAgICAgIHVuc2lnbmVkIGludCBEaXNwYXRjaFRhYmxlQ291bnQ7DQogICAg ICAgIFJQQ19ESVNQQVRDSF9GVU5DVElPTiAqRGlzcGF0Y2hUYWJsZTsNCiAgICAgICAgaW50IFJl c2VydmVkOw0KfSBSUENfRElTUEFUQ0hfVEFCTEUsKlBSUENfRElTUEFUQ0hfVEFCTEU7DQp0eXBl ZGVmIHN0cnVjdCBfUlBDX1BST1RTRVFfRU5EUE9JTlQgew0KICAgICAgICB1bnNpZ25lZCBjaGFy ICpScGNQcm90b2NvbFNlcXVlbmNlOw0KICAgICAgICB1bnNpZ25lZCBjaGFyICpFbmRwb2ludDsN Cn0gUlBDX1BST1RTRVFfRU5EUE9JTlQsKlBSUENfUFJPVFNFUV9FTkRQT0lOVDsNCnR5cGVkZWYg c3RydWN0IF9SUENfU0VSVkVSX0lOVEVSRkFDRSB7DQogICAgICAgIHVuc2lnbmVkIGludCBMZW5n dGg7DQogICAgICAgIFJQQ19TWU5UQVhfSURFTlRJRklFUiBJbnRlcmZhY2VJZDsNCiAgICAgICAg UlBDX1NZTlRBWF9JREVOVElGSUVSIFRyYW5zZmVyU3ludGF4Ow0KICAgICAgICBQUlBDX0RJU1BB VENIX1RBQkxFIERpc3BhdGNoVGFibGU7DQogICAgICAgIHVuc2lnbmVkIGludCBScGNQcm90c2Vx RW5kcG9pbnRDb3VudDsNCiAgICAgICAgUFJQQ19QUk9UU0VRX0VORFBPSU5UIFJwY1Byb3RzZXFF bmRwb2ludDsNCiAgICAgICAgdm9pZCAqRGVmYXVsdE1hbmFnZXJFcHY7DQogICAgICAgIHZvaWQg Y29uc3QgKkludGVycHJldGVySW5mbzsNCn0gUlBDX1NFUlZFUl9JTlRFUkZBQ0UsKlBSUENfU0VS VkVSX0lOVEVSRkFDRTsNCnR5cGVkZWYgc3RydWN0IF9SUENfQ0xJRU5UX0lOVEVSRkFDRSB7DQog ICAgICAgIHVuc2lnbmVkIGludCBMZW5ndGg7DQogICAgICAgIFJQQ19TWU5UQVhfSURFTlRJRklF UiBJbnRlcmZhY2VJZDsNCiAgICAgICAgUlBDX1NZTlRBWF9JREVOVElGSUVSIFRyYW5zZmVyU3lu dGF4Ow0KICAgICAgICBQUlBDX0RJU1BBVENIX1RBQkxFIERpc3BhdGNoVGFibGU7DQogICAgICAg IHVuc2lnbmVkIGludCBScGNQcm90c2VxRW5kcG9pbnRDb3VudDsNCiAgICAgICAgUFJQQ19QUk9U U0VRX0VORFBPSU5UIFJwY1Byb3RzZXFFbmRwb2ludDsNCiAgICAgICAgdW5zaWduZWQgbG9uZyBS ZXNlcnZlZDsNCiAgICAgICAgdm9pZCBjb25zdCAqSW50ZXJwcmV0ZXJJbmZvOw0KfSBSUENfQ0xJ RU5UX0lOVEVSRkFDRSwqUFJQQ19DTElFTlRfSU5URVJGQUNFOw0KdHlwZWRlZiB2b2lkICpJX1JQ Q19NVVRFWDsNCnR5cGVkZWYgc3RydWN0IF9SUENfVFJBTlNGRVJfU1lOVEFYIHsNCiAgICAgICAg R1VJRCBVdWlkOw0KICAgICAgICB1bnNpZ25lZCBzaG9ydCBWZXJzTWFqb3I7DQogICAgICAgIHVu c2lnbmVkIHNob3J0IFZlcnNNaW5vcjsNCn0gUlBDX1RSQU5TRkVSX1NZTlRBWDsNCnR5cGVkZWYg bG9uZyhfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpICpSUENfQkxPQ0tJTkdfRlVOQ1RJT04p KHZvaWQqLHZvaWQqKTsNCg0KbG9uZyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIElfUnBj R2V0QnVmZmVyKFJQQ19NRVNTQUdFKik7DQpsb25nIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgSV9ScGNTZW5kUmVjZWl2ZShSUENfTUVTU0FHRSopOw0KbG9uZyBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIElfUnBjRnJlZUJ1ZmZlcihSUENfTUVTU0FHRSopOw0Kdm9pZCBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIElfUnBjUmVxdWVzdE11dGV4KElfUlBDX01VVEVYKik7DQp2 b2lkIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgSV9ScGNDbGVhck11dGV4KElfUlBDX01V VEVYKTsNCnZvaWQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBJX1JwY0RlbGV0ZU11dGV4 KElfUlBDX01VVEVYKTsNCl9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgdm9pZCAqSV9ScGNB bGxvY2F0ZSh1bnNpZ25lZCBpbnQpOw0Kdm9pZCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykp IElfUnBjRnJlZSh2b2lkKik7DQp2b2lkIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgSV9S cGNQYXVzZUV4ZWN1dGlvbih1bnNpZ25lZCBsb25nKTsNCnR5cGVkZWYgdm9pZChfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpICpQUlBDX1JVTkRPV04pICh2b2lkKik7DQpsb25nIF9fYXR0cmli dXRlX18oKF9fc3RkY2FsbF9fKSkgSV9ScGNNb25pdG9yQXNzb2NpYXRpb24oSEFORExFLFBSUENf UlVORE9XTix2b2lkKik7DQpsb25nIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgSV9ScGNT dG9wTW9uaXRvckFzc29jaWF0aW9uKEhBTkRMRSk7DQpIQU5ETEUgX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBJX1JwY0dldEN1cnJlbnRDYWxsSGFuZGxlKHZvaWQpOw0KbG9uZyBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIElfUnBjR2V0QXNzb2NpYXRpb25Db250ZXh0KHZvaWQqKik7 DQpsb25nIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgSV9ScGNTZXRBc3NvY2lhdGlvbkNv bnRleHQodm9pZCopOw0KDQpsb25nIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgSV9ScGNO c0JpbmRpbmdTZXRFbnRyeU5hbWUoSEFORExFLHVuc2lnbmVkIGxvbmcsdW5zaWduZWQgc2hvcnQq KTsNCmxvbmcgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBJX1JwY0JpbmRpbmdJbnFEeW5h bWljRW5kcG9pbnQoSEFORExFLCB1bnNpZ25lZCBzaG9ydCoqKTsNCg0KDQoNCg0KbG9uZyBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIElfUnBjQmluZGluZ0lucVRyYW5zcG9ydFR5cGUoSEFO RExFLHVuc2lnbmVkIGludCopOw0KbG9uZyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIElf UnBjSWZJbnFUcmFuc2ZlclN5bnRheGVzKEhBTkRMRSxSUENfVFJBTlNGRVJfU1lOVEFYKix1bnNp Z25lZCBpbnQsdW5zaWduZWQgaW50Kik7DQpsb25nIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgSV9VdWlkQ3JlYXRlKEdVSUQqKTsNCmxvbmcgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSBJX1JwY0JpbmRpbmdDb3B5KEhBTkRMRSxIQU5ETEUqKTsNCmxvbmcgX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSBJX1JwY0JpbmRpbmdJc0NsaWVudExvY2FsKEhBTkRMRSx1bnNpZ25lZCBp bnQqKTsNCnZvaWQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBJX1JwY1NzRG9udFNlcmlh bGl6ZUNvbnRleHQodm9pZCk7DQpsb25nIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgSV9S cGNTZXJ2ZXJSZWdpc3RlckZvcndhcmRGdW5jdGlvbihSUENfRk9SV0FSRF9GVU5DVElPTiopOw0K bG9uZyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIElfUnBjQ29ubmVjdGlvbklucVNvY2tC dWZmU2l6ZSh1bnNpZ25lZCBsb25nKix1bnNpZ25lZCBsb25nKik7DQpsb25nIF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgSV9ScGNDb25uZWN0aW9uU2V0U29ja0J1ZmZTaXplKHVuc2lnbmVk IGxvbmcsdW5zaWduZWQgbG9uZyk7DQpsb25nIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg SV9ScGNCaW5kaW5nU2V0QXN5bmMoSEFORExFLFJQQ19CTE9DS0lOR19GVU5DVElPTik7DQpsb25n IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgSV9ScGNBc3luY1NlbmRSZWNlaXZlKFJQQ19N RVNTQUdFKix2b2lkKik7DQpsb25nIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgSV9ScGNH ZXRUaHJlYWRXaW5kb3dIYW5kbGUodm9pZCoqKTsNCmxvbmcgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBJX1JwY1NlcnZlclRocmVhZFBhdXNlTGlzdGVuaW5nKCk7DQpsb25nIF9fYXR0cmli dXRlX18oKF9fc3RkY2FsbF9fKSkgSV9ScGNTZXJ2ZXJUaHJlYWRDb250aW51ZUxpc3RlbmluZygp Ow0KbG9uZyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIElfUnBjU2VydmVyVW5yZWdpc3Rl ckVuZHBvaW50QSh1bnNpZ25lZCBjaGFyKix1bnNpZ25lZCBjaGFyKik7DQpsb25nIF9fYXR0cmli dXRlX18oKF9fc3RkY2FsbF9fKSkgSV9ScGNTZXJ2ZXJVbnJlZ2lzdGVyRW5kcG9pbnRXKHVuc2ln bmVkIHNob3J0Kix1bnNpZ25lZCBzaG9ydCopOw0KDQoNCg0KDQoNCg0KfQ0KIyAzODEgInQ6L21z eXMvMS4wL21pbmd3L2luY2x1ZGUvcnBjZGNlLmgiIDIgMw0KDQp9DQojIDMwICJ0Oi9tc3lzLzEu MC9taW5ndy9pbmNsdWRlL3JwYy5oIiAyIDMNCiMgMSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVk ZS9ycGNuc2kuaCIgMSAzDQoNCg0KDQpleHRlcm4gIkMiIHsNCg0KdHlwZWRlZiB2b2lkICpSUENf TlNfSEFORExFOw0KIyAxNiAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9ycGNuc2kuaCIgMw0K UlBDX1NUQVRVUyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJwY05zQmluZGluZ0V4cG9y dEEodW5zaWduZWQgbG9uZyx1bnNpZ25lZCBjaGFyKixSUENfSUZfSEFORExFLFJQQ19CSU5ESU5H X1ZFQ1RPUiosVVVJRF9WRUNUT1IqKTsNClJQQ19TVEFUVVMgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBScGNOc0JpbmRpbmdVbmV4cG9ydEEodW5zaWduZWQgbG9uZyx1bnNpZ25lZCBjaGFy KixSUENfSUZfSEFORExFLFVVSURfVkVDVE9SKik7DQpSUENfU1RBVFVTIF9fYXR0cmlidXRlX18o KF9fc3RkY2FsbF9fKSkgUnBjTnNCaW5kaW5nTG9va3VwQmVnaW5BKHVuc2lnbmVkIGxvbmcsdW5z aWduZWQgY2hhciosUlBDX0lGX0hBTkRMRSxVVUlEKix1bnNpZ25lZCBsb25nLFJQQ19OU19IQU5E TEUqKTsNClJQQ19TVEFUVVMgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBScGNOc0JpbmRp bmdMb29rdXBOZXh0KFJQQ19OU19IQU5ETEUsUlBDX0JJTkRJTkdfVkVDVE9SKiopOw0KUlBDX1NU QVRVUyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJwY05zQmluZGluZ0xvb2t1cERvbmUo UlBDX05TX0hBTkRMRSopOw0KUlBDX1NUQVRVUyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykp IFJwY05zR3JvdXBEZWxldGVBKHVuc2lnbmVkIGxvbmcsdW5zaWduZWQgY2hhciopOw0KUlBDX1NU QVRVUyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJwY05zR3JvdXBNYnJBZGRBKHVuc2ln bmVkIGxvbmcsdW5zaWduZWQgY2hhciosdW5zaWduZWQgbG9uZyx1bnNpZ25lZCBjaGFyKik7DQpS UENfU1RBVFVTIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUnBjTnNHcm91cE1iclJlbW92 ZUEodW5zaWduZWQgbG9uZyx1bnNpZ25lZCBjaGFyKix1bnNpZ25lZCBsb25nLHVuc2lnbmVkIGNo YXIqKTsNClJQQ19TVEFUVVMgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBScGNOc0dyb3Vw TWJySW5xQmVnaW5BKHVuc2lnbmVkIGxvbmcsdW5zaWduZWQgY2hhciosdW5zaWduZWQgbG9uZyxS UENfTlNfSEFORExFKik7DQpSUENfU1RBVFVTIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg UnBjTnNHcm91cE1icklucU5leHRBKFJQQ19OU19IQU5ETEUsdW5zaWduZWQgY2hhcioqKTsNClJQ Q19TVEFUVVMgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBScGNOc0dyb3VwTWJySW5xRG9u ZShSUENfTlNfSEFORExFKik7DQpSUENfU1RBVFVTIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgUnBjTnNQcm9maWxlRGVsZXRlQSh1bnNpZ25lZCBsb25nLHVuc2lnbmVkIGNoYXIqKTsNClJQ Q19TVEFUVVMgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBScGNOc1Byb2ZpbGVFbHRBZGRB KHVuc2lnbmVkIGxvbmcsdW5zaWduZWQgY2hhciosUlBDX0lGX0lEKix1bnNpZ25lZCBsb25nLHVu c2lnbmVkIGNoYXIqLHVuc2lnbmVkIGxvbmcsdW5zaWduZWQgY2hhciopOw0KUlBDX1NUQVRVUyBf X2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJwY05zUHJvZmlsZUVsdFJlbW92ZUEodW5zaWdu ZWQgbG9uZyx1bnNpZ25lZCBjaGFyKixSUENfSUZfSUQqLHVuc2lnbmVkIGxvbmcsdW5zaWduZWQg Y2hhciopOw0KUlBDX1NUQVRVUyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJwY05zUHJv ZmlsZUVsdElucUJlZ2luQSh1bnNpZ25lZCBsb25nLHVuc2lnbmVkIGNoYXIqLHVuc2lnbmVkIGxv bmcsUlBDX0lGX0lEKix1bnNpZ25lZCBsb25nLHVuc2lnbmVkIGxvbmcsdW5zaWduZWQgY2hhcios UlBDX05TX0hBTkRMRSopOw0KUlBDX1NUQVRVUyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykp IFJwY05zUHJvZmlsZUVsdElucU5leHRBKFJQQ19OU19IQU5ETEUsUlBDX0lGX0lEKix1bnNpZ25l ZCBjaGFyKiosdW5zaWduZWQgbG9uZyosdW5zaWduZWQgY2hhcioqKTsNClJQQ19TVEFUVVMgX19h dHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBScGNOc1Byb2ZpbGVFbHRJbnFEb25lKFJQQ19OU19I QU5ETEUqKTsNClJQQ19TVEFUVVMgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBScGNOc0Vu dHJ5T2JqZWN0SW5xTmV4dCggUlBDX05TX0hBTkRMRSwgVVVJRCopOw0KUlBDX1NUQVRVUyBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJwY05zRW50cnlPYmplY3RJbnFEb25lKCBSUENfTlNf SEFORExFKik7DQpSUENfU1RBVFVTIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUnBjTnNF bnRyeUV4cGFuZE5hbWVBKHVuc2lnbmVkIGxvbmcsdW5zaWduZWQgY2hhciosdW5zaWduZWQgY2hh cioqKTsNClJQQ19TVEFUVVMgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBScGNOc01nbXRC aW5kaW5nVW5leHBvcnRBKHVuc2lnbmVkIGxvbmcsdW5zaWduZWQgY2hhciosUlBDX0lGX0lEKix1 bnNpZ25lZCBsb25nLFVVSURfVkVDVE9SKik7DQpSUENfU1RBVFVTIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgUnBjTnNNZ210RW50cnlDcmVhdGVBKHVuc2lnbmVkIGxvbmcsdW5zaWduZWQg Y2hhciopOw0KUlBDX1NUQVRVUyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJwY05zTWdt dEVudHJ5RGVsZXRlQSh1bnNpZ25lZCBsb25nLHVuc2lnbmVkIGNoYXIqKTsNClJQQ19TVEFUVVMg X19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBScGNOc01nbXRFbnRyeUlucUlmSWRzQSh1bnNp Z25lZCBsb25nLHVuc2lnbmVkIGNoYXIqLFJQQ19JRl9JRF9WRUNUT1IqKik7DQpSUENfU1RBVFVT IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUnBjTnNNZ210SGFuZGxlU2V0RXhwQWdlKFJQ Q19OU19IQU5ETEUsdW5zaWduZWQgbG9uZyk7DQpSUENfU1RBVFVTIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgUnBjTnNNZ210SW5xRXhwQWdlKHVuc2lnbmVkIGxvbmcqKTsNClJQQ19TVEFU VVMgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBScGNOc01nbXRTZXRFeHBBZ2UodW5zaWdu ZWQgbG9uZyk7DQpSUENfU1RBVFVTIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUnBjTnNC aW5kaW5nSW1wb3J0TmV4dChSUENfTlNfSEFORExFLFJQQ19CSU5ESU5HX0hBTkRMRSopOw0KUlBD X1NUQVRVUyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJwY05zQmluZGluZ0ltcG9ydERv bmUoUlBDX05TX0hBTkRMRSopOw0KUlBDX1NUQVRVUyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxf XykpIFJwY05zQmluZGluZ1NlbGVjdChSUENfQklORElOR19WRUNUT1IqLFJQQ19CSU5ESU5HX0hB TkRMRSopOw0KDQpSUENfU1RBVFVTIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUnBjTnNF bnRyeU9iamVjdElucUJlZ2luQSh1bnNpZ25lZCBsb25nLHVuc2lnbmVkIGNoYXIqLFJQQ19OU19I QU5ETEUqKTsNClJQQ19TVEFUVVMgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBScGNOc0Jp bmRpbmdJbXBvcnRCZWdpbkEodW5zaWduZWQgbG9uZyx1bnNpZ25lZCBjaGFyKixSUENfSUZfSEFO RExFLFVVSUQqLFJQQ19OU19IQU5ETEUqKTsNCg0KDQpSUENfU1RBVFVTIF9fYXR0cmlidXRlX18o KF9fc3RkY2FsbF9fKSkgUnBjTnNCaW5kaW5nRXhwb3J0Vyh1bnNpZ25lZCBsb25nLHVuc2lnbmVk IHNob3J0KixSUENfSUZfSEFORExFLFJQQ19CSU5ESU5HX1ZFQ1RPUiosVVVJRF9WRUNUT1IqKTsN ClJQQ19TVEFUVVMgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBScGNOc0JpbmRpbmdVbmV4 cG9ydFcodW5zaWduZWQgbG9uZyx1bnNpZ25lZCBzaG9ydCosUlBDX0lGX0hBTkRMRSxVVUlEX1ZF Q1RPUiopOw0KUlBDX1NUQVRVUyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJwY05zQmlu ZGluZ0xvb2t1cEJlZ2luVyh1bnNpZ25lZCBsb25nLHVuc2lnbmVkIHNob3J0KixSUENfSUZfSEFO RExFLFVVSUQqLHVuc2lnbmVkIGxvbmcsUlBDX05TX0hBTkRMRSopOw0KUlBDX1NUQVRVUyBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJwY05zR3JvdXBEZWxldGVXKHVuc2lnbmVkIGxvbmcs dW5zaWduZWQgc2hvcnQqKTsNClJQQ19TVEFUVVMgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSBScGNOc0dyb3VwTWJyQWRkVyh1bnNpZ25lZCBsb25nLHVuc2lnbmVkIHNob3J0Kix1bnNpZ25l ZCBsb25nLHVuc2lnbmVkIHNob3J0Kik7DQpSUENfU1RBVFVTIF9fYXR0cmlidXRlX18oKF9fc3Rk Y2FsbF9fKSkgUnBjTnNHcm91cE1iclJlbW92ZVcodW5zaWduZWQgbG9uZyx1bnNpZ25lZCBzaG9y dCosdW5zaWduZWQgbG9uZyx1bnNpZ25lZCBzaG9ydCopOw0KUlBDX1NUQVRVUyBfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpIFJwY05zR3JvdXBNYnJJbnFCZWdpblcodW5zaWduZWQgbG9uZyx1 bnNpZ25lZCBzaG9ydCosdW5zaWduZWQgbG9uZyxSUENfTlNfSEFORExFKik7DQpSUENfU1RBVFVT IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUnBjTnNHcm91cE1icklucU5leHRXKFJQQ19O U19IQU5ETEUsdW5zaWduZWQgc2hvcnQqKik7DQpSUENfU1RBVFVTIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgUnBjTnNQcm9maWxlRGVsZXRlVyh1bnNpZ25lZCBsb25nLHVuc2lnbmVkIHNo b3J0Kik7DQpSUENfU1RBVFVTIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUnBjTnNQcm9m aWxlRWx0QWRkVyh1bnNpZ25lZCBsb25nLHVuc2lnbmVkIHNob3J0KiwgUlBDX0lGX0lEKix1bnNp Z25lZCBsb25nLHVuc2lnbmVkIHNob3J0Kix1bnNpZ25lZCBsb25nLHVuc2lnbmVkIHNob3J0Kik7 DQpSUENfU1RBVFVTIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUnBjTnNQcm9maWxlRWx0 UmVtb3ZlVyh1bnNpZ25lZCBsb25nLHVuc2lnbmVkIHNob3J0KiwgUlBDX0lGX0lEKix1bnNpZ25l ZCBsb25nLHVuc2lnbmVkIHNob3J0Kik7DQpSUENfU1RBVFVTIF9fYXR0cmlidXRlX18oKF9fc3Rk Y2FsbF9fKSkgUnBjTnNQcm9maWxlRWx0SW5xQmVnaW5XKHVuc2lnbmVkIGxvbmcsdW5zaWduZWQg c2hvcnQqLCB1bnNpZ25lZCBsb25nLFJQQ19JRl9JRCosdW5zaWduZWQgbG9uZyx1bnNpZ25lZCBs b25nLHVuc2lnbmVkIHNob3J0KiwgUlBDX05TX0hBTkRMRSopOw0KUlBDX1NUQVRVUyBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJwY05zUHJvZmlsZUVsdElucU5leHRXKFJQQ19OU19IQU5E TEUsUlBDX0lGX0lEKiwgdW5zaWduZWQgc2hvcnQqKix1bnNpZ25lZCBsb25nKix1bnNpZ25lZCBz aG9ydCoqKTsNClJQQ19TVEFUVVMgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBScGNOc0Vu dHJ5T2JqZWN0SW5xQmVnaW5XKHVuc2lnbmVkIGxvbmcsdW5zaWduZWQgc2hvcnQqLFJQQ19OU19I QU5ETEUqKTsNClJQQ19TVEFUVVMgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBScGNOc0Vu dHJ5RXhwYW5kTmFtZVcodW5zaWduZWQgbG9uZyx1bnNpZ25lZCBzaG9ydCosdW5zaWduZWQgc2hv cnQqKik7DQpSUENfU1RBVFVTIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUnBjTnNNZ210 QmluZGluZ1VuZXhwb3J0Vyh1bnNpZ25lZCBsb25nLHVuc2lnbmVkIHNob3J0KixSUENfSUZfSUQq LHVuc2lnbmVkIGxvbmcsVVVJRF9WRUNUT1IqKTsNClJQQ19TVEFUVVMgX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSBScGNOc01nbXRFbnRyeUNyZWF0ZVcodW5zaWduZWQgbG9uZyx1bnNpZ25l ZCBzaG9ydCopOw0KUlBDX1NUQVRVUyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFJwY05z TWdtdEVudHJ5RGVsZXRlVyh1bnNpZ25lZCBsb25nLHVuc2lnbmVkIHNob3J0Kik7DQpSUENfU1RB VFVTIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUnBjTnNNZ210RW50cnlJbnFJZklkc1co dW5zaWduZWQgbG9uZyx1bnNpZ25lZCBzaG9ydCAsIFJQQ19JRl9JRF9WRUNUT1IqKik7DQpSUENf U1RBVFVTIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUnBjTnNCaW5kaW5nSW1wb3J0QmVn aW5XKHVuc2lnbmVkIGxvbmcsdW5zaWduZWQgc2hvcnQqLFJQQ19JRl9IQU5ETEUsVVVJRCosUlBD X05TX0hBTkRMRSopOw0KIyAxMTYgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvcnBjbnNpLmgi IDMNCn0NCiMgMzEgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvcnBjLmgiIDIgMw0KIyAxICJ0 Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL3JwY250ZXJyLmgiIDEgMw0KIyAzMiAidDovbXN5cy8x LjAvbWluZ3cvaW5jbHVkZS9ycGMuaCIgMiAzDQojIDQ4ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNs dWRlL3JwYy5oIiAzDQpSUENfU1RBVFVTIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUnBj SW1wZXJzb25hdGVDbGllbnQoUlBDX0JJTkRJTkdfSEFORExFKTsNClJQQ19TVEFUVVMgX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBScGNSZXZlcnRUb1NlbGYoKTsNCmxvbmcgX19hdHRyaWJ1 dGVfXygoX19zdGRjYWxsX18pKSBJX1JwY01hcFdpbjMyU3RhdHVzKFJQQ19TVEFUVVMpOw0KDQp9 DQojIDEzNSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS93aW5kb3dzLmgiIDIgMw0KIyAxICJ0 Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL3NoZWxsYXBpLmgiIDEgMw0KDQoNCg0KZXh0ZXJuICJD IiB7DQojIDg4ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL3NoZWxsYXBpLmgiIDMNCnR5cGVk ZWYgV09SRCBGSUxFT1BfRkxBR1M7DQp0eXBlZGVmIFdPUkQgUFJJTlRFUk9QX0ZMQUdTOw0KdHlw ZWRlZiBzdHJ1Y3QgX0FwcEJhckRhdGEgew0KICAgICAgICBEV09SRCBjYlNpemU7DQogICAgICAg IEhXTkQgaFduZDsNCiAgICAgICAgVUlOVCB1Q2FsbGJhY2tNZXNzYWdlOw0KICAgICAgICBVSU5U IHVFZGdlOw0KICAgICAgICBSRUNUIHJjOw0KICAgICAgICBMUEFSQU0gbFBhcmFtOw0KfSBBUFBC QVJEQVRBLCpQQVBQQkFSREFUQTsNCnR5cGVkZWYgc3RydWN0IEhEUk9QX197aW50IGk7fSpIRFJP UDsNCnR5cGVkZWYgc3RydWN0IF9OT1RJRllJQ09OREFUQUEgew0KICAgICAgICBEV09SRCBjYlNp emU7DQogICAgICAgIEhXTkQgaFduZDsNCiAgICAgICAgVUlOVCB1SUQ7DQogICAgICAgIFVJTlQg dUZsYWdzOw0KICAgICAgICBVSU5UIHVDYWxsYmFja01lc3NhZ2U7DQogICAgICAgIEhJQ09OIGhJ Y29uOw0KICAgICAgICBDSEFSIHN6VGlwWzY0XTsNCn0gTk9USUZZSUNPTkRBVEFBLCpQTk9USUZZ SUNPTkRBVEFBOw0KdHlwZWRlZiBzdHJ1Y3QgX05PVElGWUlDT05EQVRBVyB7DQogICAgICAgIERX T1JEIGNiU2l6ZTsNCiAgICAgICAgSFdORCBoV25kOw0KICAgICAgICBVSU5UIHVJRDsNCiAgICAg ICAgVUlOVCB1RmxhZ3M7DQogICAgICAgIFVJTlQgdUNhbGxiYWNrTWVzc2FnZTsNCiAgICAgICAg SElDT04gaEljb247DQogICAgICAgIFdDSEFSIHN6VGlwWzY0XTsNCn0gTk9USUZZSUNPTkRBVEFX LCpQTk9USUZZSUNPTkRBVEFXOw0KdHlwZWRlZiBzdHJ1Y3QgX1NIRUxMRVhFQ1VURUlORk9BIHsN CiAgICAgICAgRFdPUkQgY2JTaXplOw0KICAgICAgICBVTE9ORyBmTWFzazsNCiAgICAgICAgSFdO RCBod25kOw0KICAgICAgICBMUENTVFIgbHBWZXJiOw0KICAgICAgICBMUENTVFIgbHBGaWxlOw0K ICAgICAgICBMUENTVFIgbHBQYXJhbWV0ZXJzOw0KICAgICAgICBMUENTVFIgbHBEaXJlY3Rvcnk7 DQogICAgICAgIGludCBuU2hvdzsNCiAgICAgICAgSElOU1RBTkNFIGhJbnN0QXBwOw0KICAgICAg ICBQVk9JRCBscElETGlzdDsNCiAgICAgICAgTFBDU1RSIGxwQ2xhc3M7DQogICAgICAgIEhLRVkg aGtleUNsYXNzOw0KICAgICAgICBEV09SRCBkd0hvdEtleTsNCiAgICAgICAgSEFORExFIGhJY29u Ow0KICAgICAgICBIQU5ETEUgaFByb2Nlc3M7DQp9IFNIRUxMRVhFQ1VURUlORk9BLCpMUFNIRUxM RVhFQ1VURUlORk9BOw0KdHlwZWRlZiBzdHJ1Y3QgX1NIRUxMRVhFQ1VURUlORk9XIHsNCiAgICAg ICAgRFdPUkQgY2JTaXplOw0KICAgICAgICBVTE9ORyBmTWFzazsNCiAgICAgICAgSFdORCBod25k Ow0KICAgICAgICBMUENXU1RSIGxwVmVyYjsNCiAgICAgICAgTFBDV1NUUiBscEZpbGU7DQogICAg ICAgIExQQ1dTVFIgbHBQYXJhbWV0ZXJzOw0KICAgICAgICBMUENXU1RSIGxwRGlyZWN0b3J5Ow0K ICAgICAgICBpbnQgblNob3c7DQogICAgICAgIEhJTlNUQU5DRSBoSW5zdEFwcDsNCiAgICAgICAg UFZPSUQgbHBJRExpc3Q7DQogICAgICAgIExQQ1dTVFIgbHBDbGFzczsNCiAgICAgICAgSEtFWSBo a2V5Q2xhc3M7DQogICAgICAgIERXT1JEIGR3SG90S2V5Ow0KICAgICAgICBIQU5ETEUgaEljb247 DQogICAgICAgIEhBTkRMRSBoUHJvY2VzczsNCn0gU0hFTExFWEVDVVRFSU5GT1csKkxQU0hFTExF WEVDVVRFSU5GT1c7DQp0eXBlZGVmIHN0cnVjdCBfU0hGSUxFT1BTVFJVQ1RBIHsNCiAgICAgICAg SFdORCBod25kOw0KICAgICAgICBVSU5UIHdGdW5jOw0KICAgICAgICBMUENTVFIgcEZyb207DQog ICAgICAgIExQQ1NUUiBwVG87DQogICAgICAgIEZJTEVPUF9GTEFHUyBmRmxhZ3M7DQogICAgICAg IEJPT0wgZkFueU9wZXJhdGlvbnNBYm9ydGVkOw0KICAgICAgICBQVk9JRCBoTmFtZU1hcHBpbmdz Ow0KICAgICAgICBMUENTVFIgbHBzelByb2dyZXNzVGl0bGU7DQp9IFNIRklMRU9QU1RSVUNUQSwq TFBTSEZJTEVPUFNUUlVDVEE7DQp0eXBlZGVmIHN0cnVjdCBfU0hGSUxFT1BTVFJVQ1RXIHsNCiAg ICAgICAgSFdORCBod25kOw0KICAgICAgICBVSU5UIHdGdW5jOw0KICAgICAgICBMUENXU1RSIHBG cm9tOw0KICAgICAgICBMUENXU1RSIHBUbzsNCiAgICAgICAgRklMRU9QX0ZMQUdTIGZGbGFnczsN CiAgICAgICAgQk9PTCBmQW55T3BlcmF0aW9uc0Fib3J0ZWQ7DQogICAgICAgIFBWT0lEIGhOYW1l TWFwcGluZ3M7DQogICAgICAgIExQQ1dTVFIgbHBzelByb2dyZXNzVGl0bGU7DQp9IFNIRklMRU9Q U1RSVUNUVywqTFBTSEZJTEVPUFNUUlVDVFc7DQp0eXBlZGVmIHN0cnVjdCBfU0hGSUxFSU5GT0Eg ew0KICAgICAgICBISUNPTiBoSWNvbjsNCiAgICAgICAgaW50IGlJY29uOw0KICAgICAgICBEV09S RCBkd0F0dHJpYnV0ZXM7DQogICAgICAgIENIQVIgc3pEaXNwbGF5TmFtZVsyNjBdOw0KICAgICAg ICBDSEFSIHN6VHlwZU5hbWVbODBdOw0KfSBTSEZJTEVJTkZPQTsNCnR5cGVkZWYgc3RydWN0IF9T SEZJTEVJTkZPVyB7DQogICAgICAgIEhJQ09OIGhJY29uOw0KICAgICAgICBpbnQgaUljb247DQog ICAgICAgIERXT1JEIGR3QXR0cmlidXRlczsNCiAgICAgICAgV0NIQVIgc3pEaXNwbGF5TmFtZVsy NjBdOw0KICAgICAgICBXQ0hBUiBzelR5cGVOYW1lWzgwXTsNCn0gU0hGSUxFSU5GT1c7DQoNCkxQ V1NUUiAqIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQ29tbWFuZExpbmVUb0FyZ3ZXKExQ Q1dTVFIsaW50Kik7DQp2b2lkIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRHJhZ0FjY2Vw dEZpbGVzKEhXTkQsQk9PTCk7DQp2b2lkIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRHJh Z0ZpbmlzaChIRFJPUCk7DQpVSU5UIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRHJhZ1F1 ZXJ5RmlsZUEoSERST1AsVUlOVCxMUFNUUixVSU5UKTsNClVJTlQgX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBEcmFnUXVlcnlGaWxlVyhIRFJPUCxVSU5ULExQV1NUUixVSU5UKTsNCkJPT0wg X19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBEcmFnUXVlcnlQb2ludChIRFJPUCxMUFBPSU5U KTsNCkhJQ09OIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRXh0cmFjdEFzc29jaWF0ZWRJ Y29uQShISU5TVEFOQ0UsTFBDU1RSLFBXT1JEKTsNCkhJQ09OIF9fYXR0cmlidXRlX18oKF9fc3Rk Y2FsbF9fKSkgRXh0cmFjdEFzc29jaWF0ZWRJY29uVyhISU5TVEFOQ0UsTFBDV1NUUixQV09SRCk7 DQpISUNPTiBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEV4dHJhY3RJY29uQShISU5TVEFO Q0UsTFBDU1RSLFVJTlQpOw0KSElDT04gX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBFeHRy YWN0SWNvblcoSElOU1RBTkNFLExQQ1dTVFIsVUlOVCk7DQpISUNPTiBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIEV4dHJhY3RJY29uRXhBKExQQ1NUUixpbnQsSElDT04qLEhJQ09OKixVSU5U KTsNCkhJQ09OIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRXh0cmFjdEljb25FeFcoTFBD V1NUUixpbnQsSElDT04qLEhJQ09OKixVSU5UKTsNCkhJTlNUQU5DRSBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIEZpbmRFeGVjdXRhYmxlQShMUENTVFIsTFBDU1RSLExQU1RSKTsNCkhJTlNU QU5DRSBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEZpbmRFeGVjdXRhYmxlVyhMUENXU1RS LExQQ1dTVFIsTFBXU1RSKTsNClVJTlQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBTSEFw cEJhck1lc3NhZ2UoRFdPUkQsUEFQUEJBUkRBVEEpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIFNoZWxsX05vdGlmeUljb25BKERXT1JELFBOT1RJRllJQ09OREFUQUEpOw0KQk9P TCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNoZWxsX05vdGlmeUljb25XKERXT1JELFBO T1RJRllJQ09OREFUQVcpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2hlbGxB Ym91dEEoSFdORCxMUENTVFIsTFBDU1RSLEhJQ09OKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIFNoZWxsQWJvdXRXKEhXTkQsTFBDV1NUUixMUENXU1RSLEhJQ09OKTsNCkhJTlNU QU5DRSBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNoZWxsRXhlY3V0ZUEoSFdORCxMUENT VFIsTFBDU1RSLExQQ1NUUixMUENTVFIsSU5UKTsNCkhJTlNUQU5DRSBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIFNoZWxsRXhlY3V0ZVcoSFdORCxMUENXU1RSLExQQ1dTVFIsTFBDV1NUUixM UENXU1RSLElOVCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2hlbGxFeGVj dXRlRXhBKExQU0hFTExFWEVDVVRFSU5GT0EpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNh bGxfXykpIFNoZWxsRXhlY3V0ZUV4VyhMUFNIRUxMRVhFQ1VURUlORk9XKTsNCmludCBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNIRmlsZU9wZXJhdGlvbkEoTFBTSEZJTEVPUFNUUlVDVEEp Ow0KaW50IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU0hGaWxlT3BlcmF0aW9uVyhMUFNI RklMRU9QU1RSVUNUVyk7DQp2b2lkIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU0hGcmVl TmFtZU1hcHBpbmdzKEhBTkRMRSk7DQpEV09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykp IFNIR2V0RmlsZUluZm9BKExQQ1NUUixEV09SRCxTSEZJTEVJTkZPQSosVUlOVCxVSU5UKTsNCkRX T1JEIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU0hHZXRGaWxlSW5mb1coTFBDV1NUUixE V09SRCxTSEZJTEVJTkZPVyosVUlOVCxVSU5UKTsNCiMgMjMyICJ0Oi9tc3lzLzEuMC9taW5ndy9p bmNsdWRlL3NoZWxsYXBpLmgiIDMNCnR5cGVkZWYgTk9USUZZSUNPTkRBVEFBIE5PVElGWUlDT05E QVRBLCpQTk9USUZZSUNPTkRBVEE7DQp0eXBlZGVmIFNIRUxMRVhFQ1VURUlORk9BIFNIRUxMRVhF Q1VURUlORk8sKkxQU0hFTExFWEVDVVRFSU5GTzsNCnR5cGVkZWYgU0hGSUxFT1BTVFJVQ1RBIFNI RklMRU9QU1RSVUNULCpMUFNIRklMRU9QU1RSVUNUOw0KdHlwZWRlZiBTSEZJTEVJTkZPQSBTSEZJ TEVJTkZPOw0KIyAyNDkgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvc2hlbGxhcGkuaCIgMw0K fQ0KIyAxMzYgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvd2luZG93cy5oIiAyIDMNCiMgMSAi dDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS93aW5wZXJmLmgiIDEgMw0KDQoNCg0KZXh0ZXJuICJD IiB7DQojIDc0ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL3dpbnBlcmYuaCIgMw0KdHlwZWRl ZiBzdHJ1Y3QgX1BFUkZfREFUQV9CTE9DSyB7DQogICAgICAgIFdDSEFSIFNpZ25hdHVyZVs0XTsN CiAgICAgICAgRFdPUkQgTGl0dGxlRW5kaWFuOw0KICAgICAgICBEV09SRCBWZXJzaW9uOw0KICAg ICAgICBEV09SRCBSZXZpc2lvbjsNCiAgICAgICAgRFdPUkQgVG90YWxCeXRlTGVuZ3RoOw0KICAg ICAgICBEV09SRCBIZWFkZXJMZW5ndGg7DQogICAgICAgIERXT1JEIE51bU9iamVjdFR5cGVzOw0K ICAgICAgICBMT05HIERlZmF1bHRPYmplY3Q7DQogICAgICAgIFNZU1RFTVRJTUUgU3lzdGVtVGlt ZTsNCiAgICAgICAgTEFSR0VfSU5URUdFUiBQZXJmVGltZTsNCiAgICAgICAgTEFSR0VfSU5URUdF UiBQZXJmRnJlcTsNCiAgICAgICAgTEFSR0VfSU5URUdFUiBQZXJmVGltZTEwMG5TZWM7DQogICAg ICAgIERXT1JEIFN5c3RlbU5hbWVMZW5ndGg7DQogICAgICAgIERXT1JEIFN5c3RlbU5hbWVPZmZz ZXQ7DQp9IFBFUkZfREFUQV9CTE9DSywgKlBQRVJGX0RBVEFfQkxPQ0s7DQp0eXBlZGVmIHN0cnVj dCBfUEVSRl9PQkpFQ1RfVFlQRSB7DQogICAgICAgIERXT1JEIFRvdGFsQnl0ZUxlbmd0aDsNCiAg ICAgICAgRFdPUkQgRGVmaW5pdGlvbkxlbmd0aDsNCiAgICAgICAgRFdPUkQgSGVhZGVyTGVuZ3Ro Ow0KICAgICAgICBEV09SRCBPYmplY3ROYW1lVGl0bGVJbmRleDsNCiAgICAgICAgTFBXU1RSIE9i amVjdE5hbWVUaXRsZTsNCiAgICAgICAgRFdPUkQgT2JqZWN0SGVscFRpdGxlSW5kZXg7DQogICAg ICAgIExQV1NUUiBPYmplY3RIZWxwVGl0bGU7DQogICAgICAgIERXT1JEIERldGFpbExldmVsOw0K ICAgICAgICBEV09SRCBOdW1Db3VudGVyczsNCiAgICAgICAgTE9ORyBEZWZhdWx0Q291bnRlcjsN CiAgICAgICAgTE9ORyBOdW1JbnN0YW5jZXM7DQogICAgICAgIERXT1JEIENvZGVQYWdlOw0KICAg ICAgICBMQVJHRV9JTlRFR0VSIFBlcmZUaW1lOw0KICAgICAgICBMQVJHRV9JTlRFR0VSIFBlcmZG cmVxOw0KfSBQRVJGX09CSkVDVF9UWVBFLCAqUFBFUkZfT0JKRUNUX1RZUEU7DQp0eXBlZGVmIHN0 cnVjdCBfUEVSRl9DT1VOVEVSX0RFRklOSVRJT04gew0KICAgICAgICBEV09SRCBCeXRlTGVuZ3Ro Ow0KICAgICAgICBEV09SRCBDb3VudGVyTmFtZVRpdGxlSW5kZXg7DQogICAgICAgIExQV1NUUiBD b3VudGVyTmFtZVRpdGxlOw0KICAgICAgICBEV09SRCBDb3VudGVySGVscFRpdGxlSW5kZXg7DQog ICAgICAgIExQV1NUUiBDb3VudGVySGVscFRpdGxlOw0KICAgICAgICBMT05HIERlZmF1bHRTY2Fs ZTsNCiAgICAgICAgRFdPUkQgRGV0YWlsTGV2ZWw7DQogICAgICAgIERXT1JEIENvdW50ZXJUeXBl Ow0KICAgICAgICBEV09SRCBDb3VudGVyU2l6ZTsNCiAgICAgICAgRFdPUkQgQ291bnRlck9mZnNl dDsNCn0gUEVSRl9DT1VOVEVSX0RFRklOSVRJT04sKlBQRVJGX0NPVU5URVJfREVGSU5JVElPTjsN CnR5cGVkZWYgc3RydWN0IF9QRVJGX0lOU1RBTkNFX0RFRklOSVRJT04gew0KICAgICAgICBEV09S RCBCeXRlTGVuZ3RoOw0KICAgICAgICBEV09SRCBQYXJlbnRPYmplY3RUaXRsZUluZGV4Ow0KICAg ICAgICBEV09SRCBQYXJlbnRPYmplY3RJbnN0YW5jZTsNCiAgICAgICAgTE9ORyBVbmlxdWVJRDsN CiAgICAgICAgRFdPUkQgTmFtZU9mZnNldDsNCiAgICAgICAgRFdPUkQgTmFtZUxlbmd0aDsNCn0g UEVSRl9JTlNUQU5DRV9ERUZJTklUSU9OLCpQUEVSRl9JTlNUQU5DRV9ERUZJTklUSU9OOw0KdHlw ZWRlZiBzdHJ1Y3QgX1BFUkZfQ09VTlRFUl9CTE9DSyB7DQogICAgICAgIERXT1JEIEJ5dGVMZW5n dGg7DQp9IFBFUkZfQ09VTlRFUl9CTE9DSywgKlBQRVJGX0NPVU5URVJfQkxPQ0s7DQp0eXBlZGVm IERXT1JEKF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUE1fT1BFTl9QUk9DKShMUFdTVFIp Ow0KdHlwZWRlZiBEV09SRChfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFBNX0NPTExFQ1Rf UFJPQykoTFBXU1RSLFBWT0lEKixQRFdPUkQsUERXT1JEKTsNCnR5cGVkZWYgRFdPUkQoX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBQTV9DTE9TRV9QUk9DKSh2b2lkKTsNCg0KfQ0KIyAxMzcg InQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvd2luZG93cy5oIiAyIDMNCiMgMSAidDovbXN5cy8x LjAvbWluZ3cvaW5jbHVkZS93aW5zcG9vbC5oIiAxIDMNCg0KDQoNCmV4dGVybiAiQyIgew0KIyAy MTcgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvd2luc3Bvb2wuaCIgMw0KdHlwZWRlZiBzdHJ1 Y3QgX0FEREpPQl9JTkZPXzFBIHsNCiAgICAgICAgTFBTVFIgUGF0aDsNCiAgICAgICAgRFdPUkQg Sm9iSWQ7DQp9IEFEREpPQl9JTkZPXzFBLCpQQURESk9CX0lORk9fMUEsKkxQQURESk9CX0lORk9f MUE7DQp0eXBlZGVmIHN0cnVjdCBfQURESk9CX0lORk9fMVcgew0KICAgICAgICBMUFdTVFIgUGF0 aDsNCiAgICAgICAgRFdPUkQgSm9iSWQ7DQp9IEFEREpPQl9JTkZPXzFXLCpQQURESk9CX0lORk9f MVcsKkxQQURESk9CX0lORk9fMVc7DQp0eXBlZGVmIHN0cnVjdCBfREFUQVRZUEVTX0lORk9fMUF7 TFBTVFIgcE5hbWU7fSBEQVRBVFlQRVNfSU5GT18xQSwqUERBVEFUWVBFU19JTkZPXzFBLCpMUERB VEFUWVBFU19JTkZPXzFBOw0KdHlwZWRlZiBzdHJ1Y3QgX0RBVEFUWVBFU19JTkZPXzFXe0xQV1NU UiBwTmFtZTt9IERBVEFUWVBFU19JTkZPXzFXLCpQREFUQVRZUEVTX0lORk9fMVcsKkxQREFUQVRZ UEVTX0lORk9fMVc7DQp0eXBlZGVmIHN0cnVjdCBfSk9CX0lORk9fMUEgew0KICAgICAgICBEV09S RCBKb2JJZDsNCiAgICAgICAgTFBTVFIgcFByaW50ZXJOYW1lOw0KICAgICAgICBMUFNUUiBwTWFj aGluZU5hbWU7DQogICAgICAgIExQU1RSIHBVc2VyTmFtZTsNCiAgICAgICAgTFBTVFIgcERvY3Vt ZW50Ow0KICAgICAgICBMUFNUUiBwRGF0YXR5cGU7DQogICAgICAgIExQU1RSIHBTdGF0dXM7DQog ICAgICAgIERXT1JEIFN0YXR1czsNCiAgICAgICAgRFdPUkQgUHJpb3JpdHk7DQogICAgICAgIERX T1JEIFBvc2l0aW9uOw0KICAgICAgICBEV09SRCBUb3RhbFBhZ2VzOw0KICAgICAgICBEV09SRCBQ YWdlc1ByaW50ZWQ7DQogICAgICAgIFNZU1RFTVRJTUUgU3VibWl0dGVkOw0KfSBKT0JfSU5GT18x QSwqUEpPQl9JTkZPXzFBLCpMUEpPQl9JTkZPXzFBOw0KdHlwZWRlZiBzdHJ1Y3QgX0pPQl9JTkZP XzFXIHsNCiAgICAgICAgRFdPUkQgSm9iSWQ7DQogICAgICAgIExQV1NUUiBwUHJpbnRlck5hbWU7 DQogICAgICAgIExQV1NUUiBwTWFjaGluZU5hbWU7DQogICAgICAgIExQV1NUUiBwVXNlck5hbWU7 DQogICAgICAgIExQV1NUUiBwRG9jdW1lbnQ7DQogICAgICAgIExQV1NUUiBwRGF0YXR5cGU7DQog ICAgICAgIExQV1NUUiBwU3RhdHVzOw0KICAgICAgICBEV09SRCBTdGF0dXM7DQogICAgICAgIERX T1JEIFByaW9yaXR5Ow0KICAgICAgICBEV09SRCBQb3NpdGlvbjsNCiAgICAgICAgRFdPUkQgVG90 YWxQYWdlczsNCiAgICAgICAgRFdPUkQgUGFnZXNQcmludGVkOw0KICAgICAgICBTWVNURU1USU1F IFN1Ym1pdHRlZDsNCn0gSk9CX0lORk9fMVcsKlBKT0JfSU5GT18xVywqTFBKT0JfSU5GT18xVzsN CnR5cGVkZWYgc3RydWN0IF9KT0JfSU5GT18yQSB7DQogICAgICAgIERXT1JEIEpvYklkOw0KICAg ICAgICBMUFNUUiBwUHJpbnRlck5hbWU7DQogICAgICAgIExQU1RSIHBNYWNoaW5lTmFtZTsNCiAg ICAgICAgTFBTVFIgcFVzZXJOYW1lOw0KICAgICAgICBMUFNUUiBwRG9jdW1lbnQ7DQogICAgICAg IExQU1RSIHBOb3RpZnlOYW1lOw0KICAgICAgICBMUFNUUiBwRGF0YXR5cGU7DQogICAgICAgIExQ U1RSIHBQcmludFByb2Nlc3NvcjsNCiAgICAgICAgTFBTVFIgcFBhcmFtZXRlcnM7DQogICAgICAg IExQU1RSIHBEcml2ZXJOYW1lOw0KICAgICAgICBMUERFVk1PREVBIHBEZXZNb2RlOw0KICAgICAg ICBMUFNUUiBwU3RhdHVzOw0KICAgICAgICBQU0VDVVJJVFlfREVTQ1JJUFRPUiBwU2VjdXJpdHlE ZXNjcmlwdG9yOw0KICAgICAgICBEV09SRCBTdGF0dXM7DQogICAgICAgIERXT1JEIFByaW9yaXR5 Ow0KICAgICAgICBEV09SRCBQb3NpdGlvbjsNCiAgICAgICAgRFdPUkQgU3RhcnRUaW1lOw0KICAg ICAgICBEV09SRCBVbnRpbFRpbWU7DQogICAgICAgIERXT1JEIFRvdGFsUGFnZXM7DQogICAgICAg IERXT1JEIFNpemU7DQogICAgICAgIFNZU1RFTVRJTUUgU3VibWl0dGVkOw0KICAgICAgICBEV09S RCBUaW1lOw0KICAgICAgICBEV09SRCBQYWdlc1ByaW50ZWQ7DQp9IEpPQl9JTkZPXzJBLCpQSk9C X0lORk9fMkEsKkxQSk9CX0lORk9fMkE7DQp0eXBlZGVmIHN0cnVjdCBfSk9CX0lORk9fMlcgew0K ICAgICAgICBEV09SRCBKb2JJZDsNCiAgICAgICAgTFBXU1RSIHBQcmludGVyTmFtZTsNCiAgICAg ICAgTFBXU1RSIHBNYWNoaW5lTmFtZTsNCiAgICAgICAgTFBXU1RSIHBVc2VyTmFtZTsNCiAgICAg ICAgTFBXU1RSIHBEb2N1bWVudDsNCiAgICAgICAgTFBXU1RSIHBOb3RpZnlOYW1lOw0KICAgICAg ICBMUFdTVFIgcERhdGF0eXBlOw0KICAgICAgICBMUFdTVFIgcFByaW50UHJvY2Vzc29yOw0KICAg ICAgICBMUFdTVFIgcFBhcmFtZXRlcnM7DQogICAgICAgIExQV1NUUiBwRHJpdmVyTmFtZTsNCiAg ICAgICAgTFBERVZNT0RFVyBwRGV2TW9kZTsNCiAgICAgICAgTFBXU1RSIHBTdGF0dXM7DQogICAg ICAgIFBTRUNVUklUWV9ERVNDUklQVE9SIHBTZWN1cml0eURlc2NyaXB0b3I7DQogICAgICAgIERX T1JEIFN0YXR1czsNCiAgICAgICAgRFdPUkQgUHJpb3JpdHk7DQogICAgICAgIERXT1JEIFBvc2l0 aW9uOw0KICAgICAgICBEV09SRCBTdGFydFRpbWU7DQogICAgICAgIERXT1JEIFVudGlsVGltZTsN CiAgICAgICAgRFdPUkQgVG90YWxQYWdlczsNCiAgICAgICAgRFdPUkQgU2l6ZTsNCiAgICAgICAg U1lTVEVNVElNRSBTdWJtaXR0ZWQ7DQogICAgICAgIERXT1JEIFRpbWU7DQogICAgICAgIERXT1JE IFBhZ2VzUHJpbnRlZDsNCn0gSk9CX0lORk9fMlcsKlBKT0JfSU5GT18yVywqTFBKT0JfSU5GT18y VzsNCnR5cGVkZWYgc3RydWN0IF9ET0NfSU5GT18xQSB7DQogICAgICAgIExQU1RSIHBEb2NOYW1l Ow0KICAgICAgICBMUFNUUiBwT3V0cHV0RmlsZTsNCiAgICAgICAgTFBTVFIgcERhdGF0eXBlOw0K fSBET0NfSU5GT18xQSwqUERPQ19JTkZPXzFBLCpMUERPQ19JTkZPXzFBOw0KdHlwZWRlZiBzdHJ1 Y3QgX0RPQ19JTkZPXzFXIHsNCiAgICAgICAgTFBXU1RSIHBEb2NOYW1lOw0KICAgICAgICBMUFdT VFIgcE91dHB1dEZpbGU7DQogICAgICAgIExQV1NUUiBwRGF0YXR5cGU7DQp9IERPQ19JTkZPXzFX LCpQRE9DX0lORk9fMVcsKkxQRE9DX0lORk9fMVc7DQp0eXBlZGVmIHN0cnVjdCBfRE9DX0lORk9f MkEgew0KICAgICAgICBMUFNUUiBwRG9jTmFtZTsNCiAgICAgICAgTFBTVFIgcE91dHB1dEZpbGU7 DQogICAgICAgIExQU1RSIHBEYXRhdHlwZTsNCiAgICAgICAgRFdPUkQgZHdNb2RlOw0KICAgICAg ICBEV09SRCBKb2JJZDsNCn0gRE9DX0lORk9fMkEsKlBET0NfSU5GT18yQSwqTFBET0NfSU5GT18y QTsNCnR5cGVkZWYgc3RydWN0IF9ET0NfSU5GT18yVyB7DQogICAgICAgIExQV1NUUiBwRG9jTmFt ZTsNCiAgICAgICAgTFBXU1RSIHBPdXRwdXRGaWxlOw0KICAgICAgICBMUFdTVFIgcERhdGF0eXBl Ow0KICAgICAgICBEV09SRCBkd01vZGU7DQogICAgICAgIERXT1JEIEpvYklkOw0KfSBET0NfSU5G T18yVywqUERPQ19JTkZPXzJXLCpMUERPQ19JTkZPXzJXOw0KdHlwZWRlZiBzdHJ1Y3QgX0RSSVZF Ul9JTkZPXzFBIHtMUFNUUiBwTmFtZTt9IERSSVZFUl9JTkZPXzFBLCpQRFJJVkVSX0lORk9fMUEs KkxQRFJJVkVSX0lORk9fMUE7DQp0eXBlZGVmIHN0cnVjdCBfRFJJVkVSX0lORk9fMVcge0xQV1NU UiBwTmFtZTt9IERSSVZFUl9JTkZPXzFXLCpQRFJJVkVSX0lORk9fMVcsKkxQRFJJVkVSX0lORk9f MVc7DQp0eXBlZGVmIHN0cnVjdCBfRFJJVkVSX0lORk9fMkEgew0KICAgICAgICBEV09SRCBjVmVy c2lvbjsNCiAgICAgICAgTFBTVFIgcE5hbWU7DQogICAgICAgIExQU1RSIHBFbnZpcm9ubWVudDsN CiAgICAgICAgTFBTVFIgcERyaXZlclBhdGg7DQogICAgICAgIExQU1RSIHBEYXRhRmlsZTsNCiAg ICAgICAgTFBTVFIgcENvbmZpZ0ZpbGU7DQp9IERSSVZFUl9JTkZPXzJBLCpQRFJJVkVSX0lORk9f MkEsKkxQRFJJVkVSX0lORk9fMkE7DQp0eXBlZGVmIHN0cnVjdCBfRFJJVkVSX0lORk9fMlcgew0K ICAgICAgICBEV09SRCBjVmVyc2lvbjsNCiAgICAgICAgTFBXU1RSIHBOYW1lOw0KICAgICAgICBM UFdTVFIgcEVudmlyb25tZW50Ow0KICAgICAgICBMUFdTVFIgcERyaXZlclBhdGg7DQogICAgICAg IExQV1NUUiBwRGF0YUZpbGU7DQogICAgICAgIExQV1NUUiBwQ29uZmlnRmlsZTsNCn0gRFJJVkVS X0lORk9fMlcsKlBEUklWRVJfSU5GT18yVywqTFBEUklWRVJfSU5GT18yVzsNCnR5cGVkZWYgc3Ry dWN0IF9EUklWRVJfSU5GT18zQSB7DQogICAgICAgIERXT1JEIGNWZXJzaW9uOw0KICAgICAgICBM UFNUUiBwTmFtZTsNCiAgICAgICAgTFBTVFIgcEVudmlyb25tZW50Ow0KICAgICAgICBMUFNUUiBw RHJpdmVyUGF0aDsNCiAgICAgICAgTFBTVFIgcERhdGFGaWxlOw0KICAgICAgICBMUFNUUiBwQ29u ZmlnRmlsZTsNCiAgICAgICAgTFBTVFIgcEhlbHBGaWxlOw0KICAgICAgICBMUFNUUiBwRGVwZW5k ZW50RmlsZXM7DQogICAgICAgIExQU1RSIHBNb25pdG9yTmFtZTsNCiAgICAgICAgTFBTVFIgcERl ZmF1bHREYXRhVHlwZTsNCn0gRFJJVkVSX0lORk9fM0EsKlBEUklWRVJfSU5GT18zQSwqTFBEUklW RVJfSU5GT18zQTsNCnR5cGVkZWYgc3RydWN0IF9EUklWRVJfSU5GT18zVyB7DQogICAgICAgIERX T1JEIGNWZXJzaW9uOw0KICAgICAgICBMUFdTVFIgcE5hbWU7DQogICAgICAgIExQV1NUUiBwRW52 aXJvbm1lbnQ7DQogICAgICAgIExQV1NUUiBwRHJpdmVyUGF0aDsNCiAgICAgICAgTFBXU1RSIHBE YXRhRmlsZTsNCiAgICAgICAgTFBXU1RSIHBDb25maWdGaWxlOw0KICAgICAgICBMUFdTVFIgcEhl bHBGaWxlOw0KICAgICAgICBMUFdTVFIgcERlcGVuZGVudEZpbGVzOw0KICAgICAgICBMUFdTVFIg cE1vbml0b3JOYW1lOw0KICAgICAgICBMUFdTVFIgcERlZmF1bHREYXRhVHlwZTsNCn0gRFJJVkVS X0lORk9fM1csKlBEUklWRVJfSU5GT18zVywqTFBEUklWRVJfSU5GT18zVzsNCnR5cGVkZWYgc3Ry dWN0IF9NT05JVE9SX0lORk9fMUF7TFBTVFIgcE5hbWU7fSBNT05JVE9SX0lORk9fMUEsKlBNT05J VE9SX0lORk9fMUEsKkxQTU9OSVRPUl9JTkZPXzFBOw0KdHlwZWRlZiBzdHJ1Y3QgX01PTklUT1Jf SU5GT18xV3tMUFdTVFIgcE5hbWU7fSBNT05JVE9SX0lORk9fMVcsKlBNT05JVE9SX0lORk9fMVcs KkxQTU9OSVRPUl9JTkZPXzFXOw0KdHlwZWRlZiBzdHJ1Y3QgX1BPUlRfSU5GT18xQSB7TFBTVFIg cE5hbWU7fSBQT1JUX0lORk9fMUEsKlBQT1JUX0lORk9fMUEsKkxQUE9SVF9JTkZPXzFBOw0KdHlw ZWRlZiBzdHJ1Y3QgX1BPUlRfSU5GT18xVyB7TFBXU1RSIHBOYW1lO30gUE9SVF9JTkZPXzFXLCpQ UE9SVF9JTkZPXzFXLCpMUFBPUlRfSU5GT18xVzsNCnR5cGVkZWYgc3RydWN0IF9NT05JVE9SX0lO Rk9fMkF7DQogICAgICAgIExQU1RSIHBOYW1lOw0KICAgICAgICBMUFNUUiBwRW52aXJvbm1lbnQ7 DQogICAgICAgIExQU1RSIHBETExOYW1lOw0KfSBNT05JVE9SX0lORk9fMkEsKlBNT05JVE9SX0lO Rk9fMkEsKkxQTU9OSVRPUl9JTkZPXzJBOw0KdHlwZWRlZiBzdHJ1Y3QgX01PTklUT1JfSU5GT18y V3sNCiAgICAgICAgTFBXU1RSIHBOYW1lOw0KICAgICAgICBMUFdTVFIgcEVudmlyb25tZW50Ow0K ICAgICAgICBMUFdTVFIgcERMTE5hbWU7DQp9IE1PTklUT1JfSU5GT18yVywqUE1PTklUT1JfSU5G T18yVywqTFBNT05JVE9SX0lORk9fMlc7DQp0eXBlZGVmIHN0cnVjdCBfUE9SVF9JTkZPXzJBIHsN CiAgICAgICAgTFBTVFIgcFBvcnROYW1lOw0KICAgICAgICBMUFNUUiBwTW9uaXRvck5hbWU7DQog ICAgICAgIExQU1RSIHBEZXNjcmlwdGlvbjsNCiAgICAgICAgRFdPUkQgZlBvcnRUeXBlOw0KICAg ICAgICBEV09SRCBSZXNlcnZlZDsNCn0gUE9SVF9JTkZPXzJBLCpQUE9SVF9JTkZPXzJBLCpMUFBP UlRfSU5GT18yQTsNCnR5cGVkZWYgc3RydWN0IF9QT1JUX0lORk9fMlcgew0KICAgICAgICBMUFdT VFIgcFBvcnROYW1lOw0KICAgICAgICBMUFdTVFIgcE1vbml0b3JOYW1lOw0KICAgICAgICBMUFdT VFIgcERlc2NyaXB0aW9uOw0KICAgICAgICBEV09SRCBmUG9ydFR5cGU7DQogICAgICAgIERXT1JE IFJlc2VydmVkOw0KfSBQT1JUX0lORk9fMlcsKlBQT1JUX0lORk9fMlcsKkxQUE9SVF9JTkZPXzJX Ow0KdHlwZWRlZiBzdHJ1Y3QgX1BPUlRfSU5GT18zQSB7DQogICAgICAgIERXT1JEIGR3U3RhdHVz Ow0KICAgICAgICBMUFNUUiBwc3pTdGF0dXM7DQogICAgICAgIERXT1JEIGR3U2V2ZXJpdHk7DQp9 IFBPUlRfSU5GT18zQSwqUFBPUlRfSU5GT18zQSwqTFBQT1JUX0lORk9fM0E7DQp0eXBlZGVmIHN0 cnVjdCBfUE9SVF9JTkZPXzNXIHsNCiAgICAgICAgRFdPUkQgZHdTdGF0dXM7DQogICAgICAgIExQ V1NUUiBwc3pTdGF0dXM7DQogICAgICAgIERXT1JEIGR3U2V2ZXJpdHk7DQp9IFBPUlRfSU5GT18z VywqUFBPUlRfSU5GT18zVywqTFBQT1JUX0lORk9fM1c7DQp0eXBlZGVmIHN0cnVjdCBfUFJJTlRF Ul9JTkZPXzFBIHsNCiAgICAgICAgRFdPUkQgRmxhZ3M7DQogICAgICAgIExQU1RSIHBEZXNjcmlw dGlvbjsNCiAgICAgICAgTFBTVFIgcE5hbWU7DQogICAgICAgIExQU1RSIHBDb21tZW50Ow0KfSBQ UklOVEVSX0lORk9fMUEsKlBQUklOVEVSX0lORk9fMUEsKkxQUFJJTlRFUl9JTkZPXzFBOw0KdHlw ZWRlZiBzdHJ1Y3QgX1BSSU5URVJfSU5GT18xVyB7DQogICAgICAgIERXT1JEIEZsYWdzOw0KICAg ICAgICBMUFdTVFIgcERlc2NyaXB0aW9uOw0KICAgICAgICBMUFdTVFIgcE5hbWU7DQogICAgICAg IExQV1NUUiBwQ29tbWVudDsNCn0gUFJJTlRFUl9JTkZPXzFXLCpQUFJJTlRFUl9JTkZPXzFXLCpM UFBSSU5URVJfSU5GT18xVzsNCnR5cGVkZWYgc3RydWN0IF9QUklOVEVSX0lORk9fMkEgew0KICAg ICAgICBMUFNUUiBwU2VydmVyTmFtZTsNCiAgICAgICAgTFBTVFIgcFByaW50ZXJOYW1lOw0KICAg ICAgICBMUFNUUiBwU2hhcmVOYW1lOw0KICAgICAgICBMUFNUUiBwUG9ydE5hbWU7DQogICAgICAg IExQU1RSIHBEcml2ZXJOYW1lOw0KICAgICAgICBMUFNUUiBwQ29tbWVudDsNCiAgICAgICAgTFBT VFIgcExvY2F0aW9uOw0KICAgICAgICBMUERFVk1PREVBIHBEZXZNb2RlOw0KICAgICAgICBMUFNU UiBwU2VwRmlsZTsNCiAgICAgICAgTFBTVFIgcFByaW50UHJvY2Vzc29yOw0KICAgICAgICBMUFNU UiBwRGF0YXR5cGU7DQogICAgICAgIExQU1RSIHBQYXJhbWV0ZXJzOw0KICAgICAgICBQU0VDVVJJ VFlfREVTQ1JJUFRPUiBwU2VjdXJpdHlEZXNjcmlwdG9yOw0KICAgICAgICBEV09SRCBBdHRyaWJ1 dGVzOw0KICAgICAgICBEV09SRCBQcmlvcml0eTsNCiAgICAgICAgRFdPUkQgRGVmYXVsdFByaW9y aXR5Ow0KICAgICAgICBEV09SRCBTdGFydFRpbWU7DQogICAgICAgIERXT1JEIFVudGlsVGltZTsN CiAgICAgICAgRFdPUkQgU3RhdHVzOw0KICAgICAgICBEV09SRCBjSm9iczsNCiAgICAgICAgRFdP UkQgQXZlcmFnZVBQTTsNCn0gUFJJTlRFUl9JTkZPXzJBLCpQUFJJTlRFUl9JTkZPXzJBLCpMUFBS SU5URVJfSU5GT18yQTsNCnR5cGVkZWYgc3RydWN0IF9QUklOVEVSX0lORk9fMlcgew0KICAgICAg ICBMUFdTVFIgcFNlcnZlck5hbWU7DQogICAgICAgIExQV1NUUiBwUHJpbnRlck5hbWU7DQogICAg ICAgIExQV1NUUiBwU2hhcmVOYW1lOw0KICAgICAgICBMUFdTVFIgcFBvcnROYW1lOw0KICAgICAg ICBMUFdTVFIgcERyaXZlck5hbWU7DQogICAgICAgIExQV1NUUiBwQ29tbWVudDsNCiAgICAgICAg TFBXU1RSIHBMb2NhdGlvbjsNCiAgICAgICAgTFBERVZNT0RFVyBwRGV2TW9kZTsNCiAgICAgICAg TFBXU1RSIHBTZXBGaWxlOw0KICAgICAgICBMUFdTVFIgcFByaW50UHJvY2Vzc29yOw0KICAgICAg ICBMUFdTVFIgcERhdGF0eXBlOw0KICAgICAgICBMUFdTVFIgcFBhcmFtZXRlcnM7DQogICAgICAg IFBTRUNVUklUWV9ERVNDUklQVE9SIHBTZWN1cml0eURlc2NyaXB0b3I7DQogICAgICAgIERXT1JE IEF0dHJpYnV0ZXM7DQogICAgICAgIERXT1JEIFByaW9yaXR5Ow0KICAgICAgICBEV09SRCBEZWZh dWx0UHJpb3JpdHk7DQogICAgICAgIERXT1JEIFN0YXJ0VGltZTsNCiAgICAgICAgRFdPUkQgVW50 aWxUaW1lOw0KICAgICAgICBEV09SRCBTdGF0dXM7DQogICAgICAgIERXT1JEIGNKb2JzOw0KICAg ICAgICBEV09SRCBBdmVyYWdlUFBNOw0KfSBQUklOVEVSX0lORk9fMlcsKlBQUklOVEVSX0lORk9f MlcsKkxQUFJJTlRFUl9JTkZPXzJXOw0KdHlwZWRlZiBzdHJ1Y3QgX1BSSU5URVJfSU5GT18zIHsN CiAgICAgICAgUFNFQ1VSSVRZX0RFU0NSSVBUT1IgcFNlY3VyaXR5RGVzY3JpcHRvcjsNCn0gUFJJ TlRFUl9JTkZPXzMsKlBQUklOVEVSX0lORk9fMywqTFBQUklOVEVSX0lORk9fMzsNCnR5cGVkZWYg c3RydWN0IF9QUklOVEVSX0lORk9fNEEgew0KICAgICAgICBMUFNUUiBwUHJpbnRlck5hbWU7DQog ICAgICAgIExQU1RSIHBTZXJ2ZXJOYW1lOw0KICAgICAgICBEV09SRCBBdHRyaWJ1dGVzOw0KfSBQ UklOVEVSX0lORk9fNEEsKlBQUklOVEVSX0lORk9fNEEsKkxQUFJJTlRFUl9JTkZPXzRBOw0KdHlw ZWRlZiBzdHJ1Y3QgX1BSSU5URVJfSU5GT180VyB7DQogICAgICAgIExQV1NUUiBwUHJpbnRlck5h bWU7DQogICAgICAgIExQV1NUUiBwU2VydmVyTmFtZTsNCiAgICAgICAgRFdPUkQgQXR0cmlidXRl czsNCn0gUFJJTlRFUl9JTkZPXzRXLCpQUFJJTlRFUl9JTkZPXzRXLCpMUFBSSU5URVJfSU5GT180 VzsNCnR5cGVkZWYgc3RydWN0IF9QUklOVEVSX0lORk9fNUEgew0KICAgICAgICBMUFNUUiBwUHJp bnRlck5hbWU7DQogICAgICAgIExQU1RSIHBQb3J0TmFtZTsNCiAgICAgICAgRFdPUkQgQXR0cmli dXRlczsNCiAgICAgICAgRFdPUkQgRGV2aWNlTm90U2VsZWN0ZWRUaW1lb3V0Ow0KICAgICAgICBE V09SRCBUcmFuc21pc3Npb25SZXRyeVRpbWVvdXQ7DQp9IFBSSU5URVJfSU5GT181QSwqUFBSSU5U RVJfSU5GT181QSwqTFBQUklOVEVSX0lORk9fNUE7DQp0eXBlZGVmIHN0cnVjdCBfUFJJTlRFUl9J TkZPXzVXIHsNCiAgICAgICAgTFBXU1RSIHBQcmludGVyTmFtZTsNCiAgICAgICAgTFBXU1RSIHBQ b3J0TmFtZTsNCiAgICAgICAgRFdPUkQgQXR0cmlidXRlczsNCiAgICAgICAgRFdPUkQgRGV2aWNl Tm90U2VsZWN0ZWRUaW1lb3V0Ow0KICAgICAgICBEV09SRCBUcmFuc21pc3Npb25SZXRyeVRpbWVv dXQ7DQp9IFBSSU5URVJfSU5GT181VywqUFBSSU5URVJfSU5GT181VywqTFBQUklOVEVSX0lORk9f NVc7DQp0eXBlZGVmIHN0cnVjdCBfUFJJTlRQUk9DRVNTT1JfSU5GT18xQSB7TFBTVFIgcE5hbWU7 fSBQUklOVFBST0NFU1NPUl9JTkZPXzFBLCpQUFJJTlRQUk9DRVNTT1JfSU5GT18xQSwqTFBQUklO VFBST0NFU1NPUl9JTkZPXzFBOw0KdHlwZWRlZiBzdHJ1Y3QgX1BSSU5UUFJPQ0VTU09SX0lORk9f MVcge0xQV1NUUiBwTmFtZTt9IFBSSU5UUFJPQ0VTU09SX0lORk9fMVcsKlBQUklOVFBST0NFU1NP Ul9JTkZPXzFXLCpMUFBSSU5UUFJPQ0VTU09SX0lORk9fMVc7DQp0eXBlZGVmIHN0cnVjdCBfUFJJ TlRFUl9OT1RJRllfSU5GT19EQVRBIHsNCiAgICAgICAgV09SRCBUeXBlOw0KICAgICAgICBXT1JE IEZpZWxkOw0KICAgICAgICBEV09SRCBSZXNlcnZlZDsNCiAgICAgICAgRFdPUkQgSWQ7DQogICAg ICAgIHVuaW9uIHsNCiAgICAgICAgICAgICAgICBEV09SRCBhZHdEYXRhWzJdOw0KICAgICAgICAg ICAgICAgIHN0cnVjdCB7DQogICAgICAgICAgICAgICAgICAgICAgICBEV09SRCBjYkJ1ZjsNCiAg ICAgICAgICAgICAgICAgICAgICAgIFBWT0lEIHBCdWY7DQogICAgICAgICAgICAgICAgfSBEYXRh Ow0KICAgICAgICB9IE5vdGlmeURhdGE7DQp9IFBSSU5URVJfTk9USUZZX0lORk9fREFUQSwqUFBS SU5URVJfTk9USUZZX0lORk9fREFUQSwqTFBQUklOVEVSX05PVElGWV9JTkZPX0RBVEE7DQp0eXBl ZGVmIHN0cnVjdCBfUFJJTlRFUl9OT1RJRllfSU5GTyB7DQogICAgICAgIERXT1JEIFZlcnNpb247 DQogICAgICAgIERXT1JEIEZsYWdzOw0KICAgICAgICBEV09SRCBDb3VudDsNCiAgICAgICAgUFJJ TlRFUl9OT1RJRllfSU5GT19EQVRBIGFEYXRhWzFdOw0KfSBQUklOVEVSX05PVElGWV9JTkZPLCpQ UFJJTlRFUl9OT1RJRllfSU5GTywqTFBQUklOVEVSX05PVElGWV9JTkZPOw0KdHlwZWRlZiBzdHJ1 Y3QgX0ZPUk1fSU5GT18xQSB7DQogICAgICAgIERXT1JEIEZsYWdzOw0KICAgICAgICBMUFNUUiBw TmFtZTsNCiAgICAgICAgU0laRUwgU2l6ZTsNCiAgICAgICAgUkVDVEwgSW1hZ2VhYmxlQXJlYTsN Cn0gRk9STV9JTkZPXzFBLCpQRk9STV9JTkZPXzFBLCpMUEZPUk1fSU5GT18xQTsNCnR5cGVkZWYg c3RydWN0IF9GT1JNX0lORk9fMVcgew0KICAgICAgICBEV09SRCBGbGFnczsNCiAgICAgICAgTFBX U1RSIHBOYW1lOw0KICAgICAgICBTSVpFTCBTaXplOw0KICAgICAgICBSRUNUTCBJbWFnZWFibGVB cmVhOw0KfSBGT1JNX0lORk9fMVcsKlBGT1JNX0lORk9fMVcsKkxQRk9STV9JTkZPXzFXOw0KdHlw ZWRlZiBzdHJ1Y3QgX1BSSU5URVJfREVGQVVMVFNBIHsNCiAgICAgICAgTFBTVFIgcERhdGF0eXBl Ow0KICAgICAgICBMUERFVk1PREUgcERldk1vZGU7DQogICAgICAgIEFDQ0VTU19NQVNLIERlc2ly ZWRBY2Nlc3M7DQp9IFBSSU5URVJfREVGQVVMVFNBLCpQUFJJTlRFUl9ERUZBVUxUU0EsKkxQUFJJ TlRFUl9ERUZBVUxUU0E7DQp0eXBlZGVmIHN0cnVjdCBfUFJJTlRFUl9ERUZBVUxUU1cgew0KICAg ICAgICBMUFdTVFIgcERhdGF0eXBlOw0KICAgICAgICBMUERFVk1PREUgcERldk1vZGU7DQogICAg ICAgIEFDQ0VTU19NQVNLIERlc2lyZWRBY2Nlc3M7DQp9IFBSSU5URVJfREVGQVVMVFNXLCpQUFJJ TlRFUl9ERUZBVUxUU1csKkxQUFJJTlRFUl9ERUZBVUxUU1c7DQoNCkJPT0wgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBBYm9ydFByaW50ZXIoSEFORExFKTsNCkJPT0wgX19hdHRyaWJ1dGVf XygoX19zdGRjYWxsX18pKSBBZGRGb3JtQShIQU5ETEUsRFdPUkQsUEJZVEUpOw0KQk9PTCBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEFkZEZvcm1XKEhBTkRMRSxEV09SRCxQQllURSk7DQpC T09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQWRkSm9iQShIQU5ETEUsRFdPUkQsUEJZ VEUsRFdPUkQsUERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBBZGRK b2JXKEhBTkRMRSxEV09SRCxQQllURSxEV09SRCxQRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIEFkZE1vbml0b3JBKExQU1RSLERXT1JELFBCWVRFKTsNCkJPT0wgX19h dHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBBZGRNb25pdG9yVyhMUFdTVFIsRFdPUkQsUEJZVEUp Ow0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEFkZFBvcnRBKExQU1RSLEhXTkQs TFBTVFIpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEFkZFBvcnRXKExQV1NU UixIV05ELExQV1NUUik7DQpIQU5ETEUgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBBZGRQ cmludGVyQShMUFNUUixEV09SRCxQQllURSk7DQpIQU5ETEUgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBBZGRQcmludGVyVyhMUFdTVFIsRFdPUkQsUEJZVEUpOw0KQk9PTCBfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpIEFkZFByaW50ZXJDb25uZWN0aW9uQShMUFNUUik7DQpCT09MIF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQWRkUHJpbnRlckNvbm5lY3Rpb25XKExQV1NUUik7 DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQWRkUHJpbnRlckRyaXZlckEoTFBT VFIsRFdPUkQsUEJZVEUpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEFkZFBy aW50ZXJEcml2ZXJXKExQV1NUUixEV09SRCxQQllURSk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgQWRkUHJpbnRQcm9jZXNzb3JBKExQU1RSLExQU1RSLExQU1RSLExQU1RSKTsN CkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBBZGRQcmludFByb2Nlc3NvclcoTFBX U1RSLExQV1NUUixMUFdTVFIsTFBXU1RSKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBBZGRQcmludFByb3ZpZG9yQShMUFNUUixEV09SRCxQQllURSk7DQpCT09MIF9fYXR0cmli dXRlX18oKF9fc3RkY2FsbF9fKSkgQWRkUHJpbnRQcm92aWRvclcoTFBXU1RSLERXT1JELFBCWVRF KTsNCkxPTkcgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBBZHZhbmNlZERvY3VtZW50UHJv cGVydGllc0EoSFdORCxIQU5ETEUsTFBTVFIsUERFVk1PREUsUERFVk1PREVBKTsNCkxPTkcgX19h dHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBBZHZhbmNlZERvY3VtZW50UHJvcGVydGllc1coSFdO RCxIQU5ETEUsTFBXU1RSLFBERVZNT0RFLFBERVZNT0RFVyk7DQpCT09MIF9fYXR0cmlidXRlX18o KF9fc3RkY2FsbF9fKSkgQ2xvc2VQcmludGVyKEhBTkRMRSk7DQpCT09MIF9fYXR0cmlidXRlX18o KF9fc3RkY2FsbF9fKSkgQ29uZmlndXJlUG9ydEEoTFBTVFIsSFdORCxMUFNUUik7DQpCT09MIF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgQ29uZmlndXJlUG9ydFcoTFBXU1RSLEhXTkQsTFBX U1RSKTsNCkhBTkRMRSBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIENvbm5lY3RUb1ByaW50 ZXJEbGcoSFdORCxEV09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRGVs ZXRlRm9ybUEoSEFORExFLExQU1RSKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSBEZWxldGVGb3JtVyhIQU5ETEUsTFBXU1RSKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBEZWxldGVNb25pdG9yQShMUFNUUixMUFNUUixMUFNUUik7DQpCT09MIF9fYXR0cmli dXRlX18oKF9fc3RkY2FsbF9fKSkgRGVsZXRlTW9uaXRvclcoTFBXU1RSLExQV1NUUixMUFdTVFIp Ow0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIERlbGV0ZVBvcnRBKExQU1RSLEhX TkQsTFBTVFIpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIERlbGV0ZVBvcnRX KExQV1NUUixIV05ELExQV1NUUik7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg RGVsZXRlUHJpbnRlcihIQU5ETEUpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykp IERlbGV0ZVByaW50ZXJDb25uZWN0aW9uQShMUFNUUik7DQpCT09MIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgRGVsZXRlUHJpbnRlckNvbm5lY3Rpb25XKExQV1NUUik7DQpEV09SRCBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIERlbGV0ZVByaW50ZXJEYXRhQShIQU5ETEUsTFBTVFIp Ow0KRFdPUkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBEZWxldGVQcmludGVyRGF0YVco SEFORExFLExQV1NUUik7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRGVsZXRl UHJpbnRlckRyaXZlckEoTFBTVFIsTFBTVFIsTFBTVFIpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIERlbGV0ZVByaW50ZXJEcml2ZXJXKExQV1NUUixMUFdTVFIsTFBXU1RSKTsN CkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBEZWxldGVQcmludFByb2Nlc3NvckEo TFBTVFIsTFBTVFIsTFBTVFIpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIERl bGV0ZVByaW50UHJvY2Vzc29yVyhMUFdTVFIsTFBXU1RSLExQV1NUUik7DQpCT09MIF9fYXR0cmli dXRlX18oKF9fc3RkY2FsbF9fKSkgRGVsZXRlUHJpbnRQcm92aWRvckEoTFBTVFIsTFBTVFIsTFBT VFIpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIERlbGV0ZVByaW50UHJvdmlk b3JXKExQV1NUUixMUFdTVFIsTFBXU1RSKTsNCkxPTkcgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBEb2N1bWVudFByb3BlcnRpZXNBKEhXTkQsSEFORExFLExQU1RSLFBERVZNT0RFQSxQREVW TU9ERUEsRFdPUkQpOw0KTE9ORyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIERvY3VtZW50 UHJvcGVydGllc1coSFdORCxIQU5ETEUsTFBXU1RSLFBERVZNT0RFQSxQREVWTU9ERUEsRFdPUkQp Ow0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEVuZERvY1ByaW50ZXIoSEFORExF KTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBFbmRQYWdlUHJpbnRlcihIQU5E TEUpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEVudW1Gb3Jtc0EoSEFORExF LERXT1JELFBCWVRFLERXT1JELFBEV09SRCxQRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIEVudW1Gb3Jtc1coSEFORExFLERXT1JELFBCWVRFLERXT1JELFBEV09SRCxQ RFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEVudW1Kb2JzQShIQU5E TEUsRFdPUkQsRFdPUkQsRFdPUkQsUEJZVEUsRFdPUkQsUERXT1JELFBEV09SRCk7DQpCT09MIF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRW51bUpvYnNXKEhBTkRMRSxEV09SRCxEV09SRCxE V09SRCxQQllURSxEV09SRCxQRFdPUkQsUERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBFbnVtTW9uaXRvcnNBKExQU1RSLERXT1JELFBCWVRFLERXT1JELFBEV09SRCxQ RFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEVudW1Nb25pdG9yc1co TFBXU1RSLERXT1JELFBCWVRFLERXT1JELFBEV09SRCxQRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0 ZV9fKChfX3N0ZGNhbGxfXykpIEVudW1Qb3J0c0EoTFBTVFIsRFdPUkQsUEJZVEUsRFdPUkQsUERX T1JELFBEV09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRW51bVBvcnRz VyhMUFdTVFIsRFdPUkQsUEJZVEUsRFdPUkQsUERXT1JELFBEV09SRCk7DQpEV09SRCBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIEVudW1QcmludGVyRGF0YUEoSEFORExFLERXT1JELExQU1RS LERXT1JELFBEV09SRCxQRFdPUkQsUEJZVEUsRFdPUkQsUERXT1JEKTsNCkRXT1JEIF9fYXR0cmli dXRlX18oKF9fc3RkY2FsbF9fKSkgRW51bVByaW50ZXJEYXRhVyhIQU5ETEUsRFdPUkQsTFBXU1RS LERXT1JELFBEV09SRCxQRFdPUkQsUEJZVEUsRFdPUkQsUERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1 dGVfXygoX19zdGRjYWxsX18pKSBFbnVtUHJpbnRlckRyaXZlcnNBKExQU1RSLExQU1RSLERXT1JE LFBCWVRFLERXT1JELFBEV09SRCxQRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNh bGxfXykpIEVudW1QcmludGVyRHJpdmVyc1coTFBXU1RSLExQV1NUUixEV09SRCxQQllURSxEV09S RCxQRFdPUkQsUERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBFbnVt UHJpbnRlcnNBKERXT1JELExQU1RSLERXT1JELFBCWVRFLERXT1JELFBEV09SRCxQRFdPUkQpOw0K Qk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEVudW1QcmludGVyc1coRFdPUkQsTFBX U1RSLERXT1JELFBCWVRFLERXT1JELFBEV09SRCxQRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIEVudW1QcmludFByb2Nlc3NvckRhdGF0eXBlc0EoTFBTVFIsTFBTVFIs RFdPUkQsUEJZVEUsRFdPUkQsUERXT1JELFBEV09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgRW51bVByaW50UHJvY2Vzc29yRGF0YXR5cGVzVyhMUFdTVFIsTFBXU1RSLERX T1JELFBCWVRFLERXT1JELFBEV09SRCxQRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0 ZGNhbGxfXykpIEVudW1QcmludFByb2Nlc3NvcnNBKExQU1RSLExQU1RSLERXT1JELFBCWVRFLERX T1JELFBEV09SRCxQRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEVu dW1QcmludFByb2Nlc3NvcnNXKExQV1NUUixMUFdTVFIsRFdPUkQsUEJZVEUsRFdPUkQsUERXT1JE LFBEV09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRmluZENsb3NlUHJp bnRlckNoYW5nZU5vdGlmaWNhdGlvbihIQU5ETEUpOw0KSEFORExFIF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgRmluZEZpcnN0UHJpbnRlckNoYW5nZU5vdGlmaWNhdGlvbihIQU5ETEUsRFdP UkQsRFdPUkQsUFZPSUQpOw0KSEFORExFIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgRmlu ZE5leHRQcmludGVyQ2hhbmdlTm90aWZpY2F0aW9uKEhBTkRMRSxQRFdPUkQsUFZPSUQsUFZPSUQq KTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBGcmVlUHJpbnRlck5vdGlmeUlu Zm8oUFBSSU5URVJfTk9USUZZX0lORk8pOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxf XykpIEdldEZvcm1BKEhBTkRMRSxMUFNUUixEV09SRCxQQllURSxEV09SRCxQRFdPUkQpOw0KQk9P TCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldEZvcm1XKEhBTkRMRSxMUFdTVFIsRFdP UkQsUEJZVEUsRFdPUkQsUERXT1JEKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18p KSBHZXRKb2JBKEhBTkRMRSxEV09SRCxEV09SRCxQQllURSxEV09SRCxQRFdPUkQpOw0KQk9PTCBf X2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldEpvYlcoSEFORExFLERXT1JELERXT1JELFBC WVRFLERXT1JELFBEV09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0 UHJpbnRlckEoSEFORExFLERXT1JELFBCWVRFLERXT1JELFBEV09SRCk7DQpCT09MIF9fYXR0cmli dXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0UHJpbnRlclcoSEFORExFLERXT1JELFBCWVRFLERXT1JE LFBEV09SRCk7DQpEV09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldFByaW50ZXJE YXRhQShIQU5ETEUsTFBTVFIsUERXT1JELFBCWVRFLERXT1JELFBEV09SRCk7DQpEV09SRCBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIEdldFByaW50ZXJEYXRhVyhIQU5ETEUsTFBXU1RSLFBE V09SRCxQQllURSxEV09SRCxQRFdPUkQpOw0KRFdPUkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBHZXRQcmludGVyRHJpdmVyQShIQU5ETEUsTFBTVFIsRFdPUkQsUEJZVEUsRFdPUkQsUERX T1JEKTsNCkRXT1JEIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgR2V0UHJpbnRlckRyaXZl clcoSEFORExFLExQV1NUUixEV09SRCxQQllURSxEV09SRCxQRFdPUkQpOw0KRFdPUkQgX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRQcmludGVyRHJpdmVyRGlyZWN0b3J5QShMUFNUUixM UFNUUixEV09SRCxQQllURSxEV09SRCxQRFdPUkQpOw0KRFdPUkQgX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBHZXRQcmludGVyRHJpdmVyRGlyZWN0b3J5VyhMUFdTVFIsTFBXU1RSLERXT1JE LFBCWVRFLERXT1JELFBEV09SRCk7DQpEV09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykp IEdldFByaW50UHJvY2Vzc29yRGlyZWN0b3J5QShMUFNUUixMUFNUUixEV09SRCxQQllURSxEV09S RCxQRFdPUkQpOw0KRFdPUkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBHZXRQcmludFBy b2Nlc3NvckRpcmVjdG9yeVcoTFBXU1RSLExQV1NUUixEV09SRCxQQllURSxEV09SRCxQRFdPUkQp Ow0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIE9wZW5QcmludGVyQShMUFNUUixQ SEFORExFLExQUFJJTlRFUl9ERUZBVUxUU0EpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNh bGxfXykpIE9wZW5QcmludGVyVyhMUFdTVFIsUEhBTkRMRSxMUFBSSU5URVJfREVGQVVMVFNXKTsN CkRXT1JEIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgUHJpbnRlck1lc3NhZ2VCb3hBKEhB TkRMRSxEV09SRCxIV05ELExQU1RSLExQU1RSLERXT1JEKTsNCkRXT1JEIF9fYXR0cmlidXRlX18o KF9fc3RkY2FsbF9fKSkgUHJpbnRlck1lc3NhZ2VCb3hXKEhBTkRMRSxEV09SRCxIV05ELExQV1NU UixMUFdTVFIsRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFByaW50 ZXJQcm9wZXJ0aWVzKEhXTkQsSEFORExFKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBSZWFkUHJpbnRlcihIQU5ETEUsUFZPSUQsRFdPUkQsUERXT1JEKTsNCkJPT0wgX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBSZXNldFByaW50ZXJBKEhBTkRMRSxMUFBSSU5URVJfREVG QVVMVFNBKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBSZXNldFByaW50ZXJX KEhBTkRMRSxMUFBSSU5URVJfREVGQVVMVFNXKTsNCkJPT0wgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBTY2hlZHVsZUpvYihIQU5ETEUsRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIFNldEZvcm1BKEhBTkRMRSxMUFNUUixEV09SRCxQQllURSk7DQpCT09MIF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0Rm9ybVcoSEFORExFLExQV1NUUixEV09SRCxQ QllURSk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0Sm9iQShIQU5ETEUs RFdPUkQsRFdPUkQsUEJZVEUsRFdPUkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxf XykpIFNldEpvYlcoSEFORExFLERXT1JELERXT1JELFBCWVRFLERXT1JEKTsNCkJPT0wgX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBTZXRQcmludGVyQShIQU5ETEUsRFdPUkQsUEJZVEUsRFdP UkQpOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFNldFByaW50ZXJXKEhBTkRM RSxEV09SRCxQQllURSxEV09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg U2V0UHJpbnRlckRhdGFBKEhBTkRMRSxMUFNUUixEV09SRCxQQllURSxEV09SRCk7DQpCT09MIF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgU2V0UHJpbnRlckRhdGFXKEhBTkRMRSxMUFdTVFIs RFdPUkQsUEJZVEUsRFdPUkQpOw0KRFdPUkQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBT dGFydERvY1ByaW50ZXJBKEhBTkRMRSxEV09SRCxQQllURSk7DQpEV09SRCBfX2F0dHJpYnV0ZV9f KChfX3N0ZGNhbGxfXykpIFN0YXJ0RG9jUHJpbnRlclcoSEFORExFLERXT1JELFBCWVRFKTsNCkJP T0wgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBTdGFydFBhZ2VQcmludGVyKEhBTkRMRSk7 DQpEV09SRCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFdhaXRGb3JQcmludGVyQ2hhbmdl KEhBTkRMRSxEV09SRCk7DQpCT09MIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgV3JpdGVQ cmludGVyKEhBTkRMRSxQVk9JRCxEV09SRCxQRFdPUkQpOw0KIyA3MTAgInQ6L21zeXMvMS4wL21p bmd3L2luY2x1ZGUvd2luc3Bvb2wuaCIgMw0KdHlwZWRlZiBKT0JfSU5GT18xQSBKT0JfSU5GT18x LCpQSk9CX0lORk9fMSwqTFBKT0JfSU5GT18xOw0KdHlwZWRlZiBKT0JfSU5GT18yQSBKT0JfSU5G T18yLCpQSk9CX0lORk9fMiwqTFBKT0JfSU5GT18yOw0KdHlwZWRlZiBBRERKT0JfSU5GT18xQSBB RERKT0JfSU5GT18xLCpQQURESk9CX0lORk9fMSwqTFBBRERKT0JfSU5GT18xOw0KdHlwZWRlZiBE QVRBVFlQRVNfSU5GT18xQSBEQVRBVFlQRVNfSU5GT18xLCpQREFUQVRZUEVTX0lORk9fMSwqTFBE QVRBVFlQRVNfSU5GT18xOw0KdHlwZWRlZiBNT05JVE9SX0lORk9fMUEgTU9OSVRPUl9JTkZPXzEs KlBNT05JVE9SX0lORk9fMSwqTFBNT05JVE9SX0lORk9fMTsNCnR5cGVkZWYgTU9OSVRPUl9JTkZP XzJBIE1PTklUT1JfSU5GT18yLCpQTU9OSVRPUl9JTkZPXzIsKkxQTU9OSVRPUl9JTkZPXzI7DQp0 eXBlZGVmIERPQ19JTkZPXzFBIERPQ19JTkZPXzEsKlBET0NfSU5GT18xLCpMUERPQ19JTkZPXzE7 DQp0eXBlZGVmIERPQ19JTkZPXzJBIERPQ19JTkZPXzIsKlBET0NfSU5GT18yLCpMUERPQ19JTkZP XzI7DQp0eXBlZGVmIFBPUlRfSU5GT18xQSBQT1JUX0lORk9fMSwqUFBPUlRfSU5GT18xLCpMUFBP UlRfSU5GT18xOw0KdHlwZWRlZiBQT1JUX0lORk9fMkEgUE9SVF9JTkZPXzIsKlBQT1JUX0lORk9f MiwqTFBQT1JUX0lORk9fMjsNCnR5cGVkZWYgUE9SVF9JTkZPXzNBIFBPUlRfSU5GT18zLCpQUE9S VF9JTkZPXzMsKkxQUE9SVF9JTkZPXzM7DQp0eXBlZGVmIERSSVZFUl9JTkZPXzJBIERSSVZFUl9J TkZPXzIsKlBEUklWRVJfSU5GT18yLCpMUERSSVZFUl9JTkZPXzI7DQp0eXBlZGVmIFBSSU5URVJf SU5GT18xQSBQUklOVEVSX0lORk9fMSwqUFBSSU5URVJfSU5GT18xLCpMUFBSSU5URVJfSU5GT18x Ow0KdHlwZWRlZiBQUklOVEVSX0lORk9fMkEgUFJJTlRFUl9JTkZPXzIsKlBQUklOVEVSX0lORk9f MiwqTFBQUklOVEVSX0lORk9fMjsNCnR5cGVkZWYgUFJJTlRFUl9JTkZPXzRBIFBSSU5URVJfSU5G T180LCpQUFJJTlRFUl9JTkZPXzQsKkxQUFJJTlRFUl9JTkZPXzQ7DQp0eXBlZGVmIFBSSU5URVJf SU5GT181QSBQUklOVEVSX0lORk9fNSwqUFBSSU5URVJfSU5GT181LCpMUFBSSU5URVJfSU5GT181 Ow0KdHlwZWRlZiBQUklOVFBST0NFU1NPUl9JTkZPXzFBIFBSSU5UUFJPQ0VTU09SX0lORk9fMSwq UFBSSU5UUFJPQ0VTU09SX0lORk9fMSwqTFBQUklOVFBST0NFU1NPUl9JTkZPXzE7DQp0eXBlZGVm IEZPUk1fSU5GT18xQSBGT1JNX0lORk9fMSwqUEZPUk1fSU5GT18xLCpMUEZPUk1fSU5GT18xOw0K dHlwZWRlZiBQUklOVEVSX0RFRkFVTFRTQSBQUklOVEVSX0RFRkFVTFRTLCpQUFJJTlRFUl9ERUZB VUxUUywqTFBQUklOVEVSX0RFRkFVTFRTOw0KIyA3NzYgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1 ZGUvd2luc3Bvb2wuaCIgMw0KfQ0KIyAxMzggInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvd2lu ZG93cy5oIiAyIDMNCiMgMTU0ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL3dpbmRvd3MuaCIg Mw0KIyAxICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL3dpbnNvY2suaCIgMSAzDQojIDE3ICJ0 Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL3dpbnNvY2suaCIgMw0KZXh0ZXJuICJDIiB7DQoNCg0K DQoNCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1X2NoYXI7DQp0eXBlZGVmIHVuc2lnbmVkIHNob3J0 IHVfc2hvcnQ7DQp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDsNCnR5cGVkZWYgdW5zaWduZWQg bG9uZyB1X2xvbmc7DQoNCg0KdHlwZWRlZiB1X2ludCBTT0NLRVQ7DQojIDQ1ICJ0Oi9tc3lzLzEu MC9taW5ndy9pbmNsdWRlL3dpbnNvY2suaCIgMw0KdHlwZWRlZiBzdHJ1Y3QgZmRfc2V0IHsNCiAg ICAgICAgdV9pbnQgZmRfY291bnQ7DQogICAgICAgIFNPQ0tFVCBmZF9hcnJheVs2NF07DQp9IGZk X3NldDsNCmludCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIF9fV1NBRkRJc1NldChTT0NL RVQsZmRfc2V0Kik7DQojIDgyICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL3dpbnNvY2suaCIg Mw0Kc3RydWN0IHRpbWV2YWwgew0KICAgICAgICBsb25nIHR2X3NlYzsNCiAgICAgICAgbG9uZyB0 dl91c2VjOw0KfTsNCnN0cnVjdCBob3N0ZW50IHsNCiAgICAgICAgY2hhciAqaF9uYW1lOw0KICAg ICAgICBjaGFyICoqaF9hbGlhc2VzOw0KICAgICAgICBzaG9ydCBoX2FkZHJ0eXBlOw0KICAgICAg ICBzaG9ydCBoX2xlbmd0aDsNCiAgICAgICAgY2hhciAqKmhfYWRkcl9saXN0Ow0KDQp9Ow0Kc3Ry dWN0IGxpbmdlciB7DQogICAgICAgIHVfc2hvcnQgbF9vbm9mZjsNCiAgICAgICAgdV9zaG9ydCBs X2xpbmdlcjsNCn07DQojIDEyNyAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS93aW5zb2NrLmgi IDMNCnN0cnVjdCBuZXRlbnQgew0KICAgICAgICBjaGFyICogbl9uYW1lOw0KICAgICAgICBjaGFy ICoqbl9hbGlhc2VzOw0KICAgICAgICBzaG9ydCBuX2FkZHJ0eXBlOw0KICAgICAgICB1X2xvbmcg bl9uZXQ7DQp9Ow0Kc3RydWN0IHNlcnZlbnQgew0KICAgICAgICBjaGFyICpzX25hbWU7DQogICAg ICAgIGNoYXIgKipzX2FsaWFzZXM7DQogICAgICAgIHNob3J0IHNfcG9ydDsNCiAgICAgICAgY2hh ciAqc19wcm90bzsNCn07DQpzdHJ1Y3QgcHJvdG9lbnQgew0KICAgICAgICBjaGFyICpwX25hbWU7 DQogICAgICAgIGNoYXIgKipwX2FsaWFzZXM7DQogICAgICAgIHNob3J0IHBfcHJvdG87DQp9Ow0K IyAxODUgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvd2luc29jay5oIiAzDQpzdHJ1Y3QgaW5f YWRkciB7DQogICAgICAgIHVuaW9uIHsNCiAgICAgICAgICAgICAgICBzdHJ1Y3QgeyB1X2NoYXIg c19iMSxzX2IyLHNfYjMsc19iNDsgfSBTX3VuX2I7DQogICAgICAgICAgICAgICAgc3RydWN0IHsg dV9zaG9ydCBzX3cxLHNfdzI7IH0gU191bl93Ow0KICAgICAgICAgICAgICAgIHVfbG9uZyBTX2Fk ZHI7DQogICAgICAgIH0gU191bjsNCg0KDQoNCg0KDQoNCn07DQojIDIxNiAidDovbXN5cy8xLjAv bWluZ3cvaW5jbHVkZS93aW5zb2NrLmgiIDMNCnN0cnVjdCBzb2NrYWRkcl9pbiB7DQogICAgICAg IHNob3J0IHNpbl9mYW1pbHk7DQogICAgICAgIHVfc2hvcnQgc2luX3BvcnQ7DQogICAgICAgIHN0 cnVjdCBpbl9hZGRyIHNpbl9hZGRyOw0KICAgICAgICBjaGFyIHNpbl96ZXJvWzhdOw0KfTsNCg0K DQp0eXBlZGVmIHN0cnVjdCBXU0FEYXRhIHsNCiAgICAgICAgV09SRCB3VmVyc2lvbjsNCiAgICAg ICAgV09SRCB3SGlnaFZlcnNpb247DQogICAgICAgIGNoYXIgc3pEZXNjcmlwdGlvblsyNTYgKzFd Ow0KICAgICAgICBjaGFyIHN6U3lzdGVtU3RhdHVzWzEyOCArMV07DQogICAgICAgIHVuc2lnbmVk IHNob3J0IGlNYXhTb2NrZXRzOw0KICAgICAgICB1bnNpZ25lZCBzaG9ydCBpTWF4VWRwRGc7DQog ICAgICAgIGNoYXIgKiBscFZlbmRvckluZm87DQp9IFdTQURBVEE7DQp0eXBlZGVmIFdTQURBVEEg KkxQV1NBREFUQTsNCiMgMjcwICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL3dpbnNvY2suaCIg Mw0Kc3RydWN0IGlwX21yZXEgew0KICAgICAgICBzdHJ1Y3QgaW5fYWRkciBpbXJfbXVsdGlhZGRy Ow0KICAgICAgICBzdHJ1Y3QgaW5fYWRkciBpbXJfaW50ZXJmYWNlOw0KfTsNCiMgMzEwICJ0Oi9t c3lzLzEuMC9taW5ndy9pbmNsdWRlL3dpbnNvY2suaCIgMw0Kc3RydWN0IHNvY2thZGRyIHsNCiAg ICAgICAgdV9zaG9ydCBzYV9mYW1pbHk7DQogICAgICAgIGNoYXIgc2FfZGF0YVsxNF07DQp9Ow0K DQoNCnN0cnVjdCBzb2NrcHJvdG8gew0KICAgICAgICB1X3Nob3J0IHNwX2ZhbWlseTsNCiAgICAg ICAgdV9zaG9ydCBzcF9wcm90b2NvbDsNCn07DQojIDQyMyAidDovbXN5cy8xLjAvbWluZ3cvaW5j bHVkZS93aW5zb2NrLmgiIDMNClNPQ0tFVCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIGFj Y2VwdChTT0NLRVQsc3RydWN0IHNvY2thZGRyKixpbnQqKTsNCmludCBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIGJpbmQoU09DS0VULGNvbnN0IHN0cnVjdCBzb2NrYWRkciosaW50KTsNCmlu dCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIGNsb3Nlc29ja2V0KFNPQ0tFVCk7DQppbnQg X19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBjb25uZWN0KFNPQ0tFVCxjb25zdCBzdHJ1Y3Qg c29ja2FkZHIqLGludCk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBpb2N0bHNv Y2tldChTT0NLRVQsbG9uZyx1X2xvbmcgKik7DQppbnQgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxs X18pKSBnZXRwZWVybmFtZShTT0NLRVQsc3RydWN0IHNvY2thZGRyKixpbnQqKTsNCmludCBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIGdldHNvY2tuYW1lKFNPQ0tFVCxzdHJ1Y3Qgc29ja2Fk ZHIqLGludCopOw0KaW50IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgZ2V0c29ja29wdChT T0NLRVQsaW50LGludCxjaGFyKixpbnQqKTsNCnVuc2lnbmVkIGxvbmcgX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSBpbmV0X2FkZHIoY29uc3QgY2hhciopOw0KX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBjaGFyICppbmV0X250b2Eoc3RydWN0IGluX2FkZHIpOw0KaW50IF9fYXR0cmli dXRlX18oKF9fc3RkY2FsbF9fKSkgbGlzdGVuKFNPQ0tFVCxpbnQpOw0KaW50IF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgcmVjdihTT0NLRVQsY2hhciosaW50LGludCk7DQppbnQgX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSByZWN2ZnJvbShTT0NLRVQsY2hhciosaW50LGludCxzdHJ1 Y3Qgc29ja2FkZHIqLGludCopOw0KaW50IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgc2Vu ZChTT0NLRVQsY29uc3QgY2hhciosaW50LGludCk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBzZW5kdG8oU09DS0VULGNvbnN0IGNoYXIqLGludCxpbnQsY29uc3Qgc3RydWN0IHNv Y2thZGRyKixpbnQpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgc2V0c29ja29w dChTT0NLRVQsaW50LGludCxjb25zdCBjaGFyKixpbnQpOw0KaW50IF9fYXR0cmlidXRlX18oKF9f c3RkY2FsbF9fKSkgc2h1dGRvd24oU09DS0VULGludCk7DQpTT0NLRVQgX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSBzb2NrZXQoaW50LGludCxpbnQpOw0KX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBzdHJ1Y3QgaG9zdGVudCAqZ2V0aG9zdGJ5YWRkcihjb25zdCBjaGFyKixpbnQsaW50 KTsNCl9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgc3RydWN0IGhvc3RlbnQgKmdldGhvc3Ri eW5hbWUoY29uc3QgY2hhciopOw0KX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBzdHJ1Y3Qg c2VydmVudCAqZ2V0c2VydmJ5cG9ydChpbnQsY29uc3QgY2hhciopOw0KX19hdHRyaWJ1dGVfXygo X19zdGRjYWxsX18pKSBzdHJ1Y3Qgc2VydmVudCAqZ2V0c2VydmJ5bmFtZShjb25zdCBjaGFyKixj b25zdCBjaGFyKik7DQpfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIHN0cnVjdCBwcm90b2Vu dCAqZ2V0cHJvdG9ieW51bWJlcihpbnQpOw0KX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBz dHJ1Y3QgcHJvdG9lbnQgKmdldHByb3RvYnluYW1lKGNvbnN0IGNoYXIqKTsNCmludCBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIFdTQVN0YXJ0dXAoV09SRCxMUFdTQURBVEEpOw0KaW50IF9f YXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgV1NBQ2xlYW51cCh2b2lkKTsNCnZvaWQgX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBXU0FTZXRMYXN0RXJyb3IoaW50KTsNCmludCBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIFdTQUdldExhc3RFcnJvcih2b2lkKTsNCkJPT0wgX19hdHRy aWJ1dGVfXygoX19zdGRjYWxsX18pKSBXU0FJc0Jsb2NraW5nKHZvaWQpOw0KaW50IF9fYXR0cmli dXRlX18oKF9fc3RkY2FsbF9fKSkgV1NBVW5ob29rQmxvY2tpbmdIb29rKHZvaWQpOw0KRkFSUFJP QyBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFdTQVNldEJsb2NraW5nSG9vayhGQVJQUk9D KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFdTQUNhbmNlbEJsb2NraW5nQ2Fs bCh2b2lkKTsNCkhBTkRMRSBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIFdTQUFzeW5jR2V0 U2VydkJ5TmFtZShIV05ELHVfaW50LGNvbnN0IGNoYXIqLGNvbnN0IGNoYXIqLGNoYXIqLGludCk7 DQpIQU5ETEUgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBXU0FBc3luY0dldFNlcnZCeVBv cnQoSFdORCx1X2ludCxpbnQsY29uc3QgY2hhciosY2hhciosaW50KTsNCkhBTkRMRSBfX2F0dHJp YnV0ZV9fKChfX3N0ZGNhbGxfXykpIFdTQUFzeW5jR2V0UHJvdG9CeU5hbWUoSFdORCx1X2ludCxj b25zdCBjaGFyKixjaGFyKixpbnQpOw0KSEFORExFIF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9f KSkgV1NBQXN5bmNHZXRQcm90b0J5TnVtYmVyKEhXTkQsdV9pbnQsaW50LGNoYXIqLGludCk7DQpI QU5ETEUgX19hdHRyaWJ1dGVfXygoX19zdGRjYWxsX18pKSBXU0FBc3luY0dldEhvc3RCeU5hbWUo SFdORCx1X2ludCxjb25zdCBjaGFyKixjaGFyKixpbnQpOw0KSEFORExFIF9fYXR0cmlidXRlX18o KF9fc3RkY2FsbF9fKSkgV1NBQXN5bmNHZXRIb3N0QnlBZGRyKEhXTkQsdV9pbnQsY29uc3QgY2hh ciosaW50LGludCxjaGFyKixpbnQpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkg V1NBQ2FuY2VsQXN5bmNSZXF1ZXN0KEhBTkRMRSk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19zdGRj YWxsX18pKSBXU0FBc3luY1NlbGVjdChTT0NLRVQsSFdORCx1X2ludCxsb25nKTsNCg0KdV9sb25n IF9fYXR0cmlidXRlX18oKF9fc3RkY2FsbF9fKSkgaHRvbmwodV9sb25nKTsNCnVfbG9uZyBfX2F0 dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIG50b2hsKHVfbG9uZyk7DQp1X3Nob3J0IF9fYXR0cmli dXRlX18oKF9fc3RkY2FsbF9fKSkgaHRvbnModV9zaG9ydCk7DQp1X3Nob3J0IF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgbnRvaHModV9zaG9ydCk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19z dGRjYWxsX18pKSBzZWxlY3QoaW50IG5mZHMsZmRfc2V0KixmZF9zZXQqLGZkX3NldCosY29uc3Qg c3RydWN0IHRpbWV2YWwqKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykpIGdldGhv c3RuYW1lKGNoYXIqLGludCk7DQojIDQ3OSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS93aW5z b2NrLmgiIDMNCnR5cGVkZWYgc3RydWN0IHNvY2thZGRyIFNPQ0tBRERSOw0KdHlwZWRlZiBzdHJ1 Y3Qgc29ja2FkZHIgKlBTT0NLQUREUjsNCnR5cGVkZWYgc3RydWN0IHNvY2thZGRyICpMUFNPQ0tB RERSOw0KdHlwZWRlZiBzdHJ1Y3Qgc29ja2FkZHJfaW4gU09DS0FERFJfSU47DQp0eXBlZGVmIHN0 cnVjdCBzb2NrYWRkcl9pbiAqUFNPQ0tBRERSX0lOOw0KdHlwZWRlZiBzdHJ1Y3Qgc29ja2FkZHJf aW4gKkxQU09DS0FERFJfSU47DQp0eXBlZGVmIHN0cnVjdCBsaW5nZXIgTElOR0VSOw0KdHlwZWRl ZiBzdHJ1Y3QgbGluZ2VyICpQTElOR0VSOw0KdHlwZWRlZiBzdHJ1Y3QgbGluZ2VyICpMUExJTkdF UjsNCnR5cGVkZWYgc3RydWN0IGluX2FkZHIgSU5fQUREUjsNCnR5cGVkZWYgc3RydWN0IGluX2Fk ZHIgKlBJTl9BRERSOw0KdHlwZWRlZiBzdHJ1Y3QgaW5fYWRkciAqTFBJTl9BRERSOw0KdHlwZWRl ZiBzdHJ1Y3QgZmRfc2V0IEZEX1NFVDsNCnR5cGVkZWYgc3RydWN0IGZkX3NldCAqUEZEX1NFVDsN CnR5cGVkZWYgc3RydWN0IGZkX3NldCAqTFBGRF9TRVQ7DQp0eXBlZGVmIHN0cnVjdCBob3N0ZW50 IEhPU1RFTlQ7DQp0eXBlZGVmIHN0cnVjdCBob3N0ZW50ICpQSE9TVEVOVDsNCnR5cGVkZWYgc3Ry dWN0IGhvc3RlbnQgKkxQSE9TVEVOVDsNCnR5cGVkZWYgc3RydWN0IHNlcnZlbnQgU0VSVkVOVDsN CnR5cGVkZWYgc3RydWN0IHNlcnZlbnQgKlBTRVJWRU5UOw0KdHlwZWRlZiBzdHJ1Y3Qgc2VydmVu dCAqTFBTRVJWRU5UOw0KdHlwZWRlZiBzdHJ1Y3QgcHJvdG9lbnQgUFJPVE9FTlQ7DQp0eXBlZGVm IHN0cnVjdCBwcm90b2VudCAqUFBST1RPRU5UOw0KdHlwZWRlZiBzdHJ1Y3QgcHJvdG9lbnQgKkxQ UFJPVE9FTlQ7DQp0eXBlZGVmIHN0cnVjdCB0aW1ldmFsIFRJTUVWQUw7DQp0eXBlZGVmIHN0cnVj dCB0aW1ldmFsICpQVElNRVZBTDsNCnR5cGVkZWYgc3RydWN0IHRpbWV2YWwgKkxQVElNRVZBTDsN Cg0KDQp9DQojIDUyMyAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS93aW5zb2NrLmgiIDMNCiMg MSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9tc3dzb2NrLmgiIDEgMw0KIyAxNiAidDovbXN5 cy8xLjAvbWluZ3cvaW5jbHVkZS9tc3dzb2NrLmgiIDMNCmV4dGVybiAiQyIgew0KIyA0MyAidDov bXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9tc3dzb2NrLmgiIDMNCnR5cGVkZWYgc3RydWN0IF9UUkFO U01JVF9GSUxFX0JVRkZFUlMgew0KICAgICAgICBQVk9JRCBIZWFkOw0KICAgICAgICBEV09SRCBI ZWFkTGVuZ3RoOw0KICAgICAgICBQVk9JRCBUYWlsOw0KICAgICAgICBEV09SRCBUYWlsTGVuZ3Ro Ow0KfSBUUkFOU01JVF9GSUxFX0JVRkZFUlMsICpQVFJBTlNNSVRfRklMRV9CVUZGRVJTLCAqTFBU UkFOU01JVF9GSUxFX0JVRkZFUlM7DQoNCmludCBfX2F0dHJpYnV0ZV9fKChfX3N0ZGNhbGxfXykp IFdTQVJlY3ZFeChTT0NLRVQsY2hhciosaW50LGludCopOw0KQk9PTCBfX2F0dHJpYnV0ZV9fKChf X3N0ZGNhbGxfXykpIFRyYW5zbWl0RmlsZShTT0NLRVQsSEFORExFLERXT1JELERXT1JELExQT1ZF UkxBUFBFRCxMUFRSQU5TTUlUX0ZJTEVfQlVGRkVSUyxEV09SRCk7DQpCT09MIF9fYXR0cmlidXRl X18oKF9fc3RkY2FsbF9fKSkgQWNjZXB0RXgoU09DS0VULFNPQ0tFVCxQVk9JRCxEV09SRCxEV09S RCxEV09SRCxMUERXT1JELExQT1ZFUkxBUFBFRCk7DQp2b2lkIF9fYXR0cmlidXRlX18oKF9fc3Rk Y2FsbF9fKSkgR2V0QWNjZXB0RXhTb2NrYWRkcnMoUFZPSUQsRFdPUkQsRFdPUkQsRFdPUkQsc3Ry dWN0IHNvY2thZGRyKiosIExQSU5ULCBzdHJ1Y3Qgc29ja2FkZHIqKiwgTFBJTlQpOw0KDQoNCn0N CiMgNTI0ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL3dpbnNvY2suaCIgMiAzDQojIDE1NSAi dDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS93aW5kb3dzLmgiIDIgMw0KIyAzMzIgInQ6L21zeXMv MS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbWluZ3czMi9iaXRzL2d0aHItZGVmYXVs dC5oIiAyIDMNCg0KdHlwZWRlZiBEV09SRCBfX2d0aHJlYWRfa2V5X3Q7DQoNCnR5cGVkZWYgc3Ry dWN0IHsNCiAgaW50IGRvbmU7DQogIGxvbmcgc3RhcnRlZDsNCn0gX19ndGhyZWFkX29uY2VfdDsN Cg0KdHlwZWRlZiBIQU5ETEUgX19ndGhyZWFkX211dGV4X3Q7DQojIDM0OSAidDovbXN5cy8xLjAv bWluZ3cvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1taW5ndzMyL2JpdHMvZ3Roci1kZWZhdWx0Lmgi IDMNCmV4dGVybiAiQyIgew0KDQpleHRlcm4gaW50IF9fbWluZ3d0aHJfa2V5X2R0b3IgKERXT1JE LCB2b2lkICgqKSAodm9pZCAqKSk7DQoNCn0NCg0KDQoNCg0KDQpleHRlcm4gaW50IF9DUlRfTVQ7 DQoNCg0Kc3RhdGljIGlubGluZSBpbnQNCl9fZ3RocmVhZF9hY3RpdmVfcCAodm9pZCkNCnsNCg0K ICByZXR1cm4gX0NSVF9NVDsNCg0KDQoNCn0NCg0Kc3RhdGljIGlubGluZSBpbnQNCl9fZ3RocmVh ZF9vbmNlIChfX2d0aHJlYWRfb25jZV90ICpvbmNlLCB2b2lkICgqZnVuYykgKHZvaWQpKQ0Kew0K ICBpZiAoISBfX2d0aHJlYWRfYWN0aXZlX3AgKCkpDQogICAgcmV0dXJuIC0xOw0KICBlbHNlIGlm IChvbmNlID09IF9fbnVsbCB8fCBmdW5jID09IF9fbnVsbCkNCiAgICByZXR1cm4gMjI7DQoNCiAg aWYgKCEgb25jZS0+ZG9uZSkNCiAgICB7DQogICAgICBpZiAoSW50ZXJsb2NrZWRJbmNyZW1lbnQg KCYob25jZS0+c3RhcnRlZCkpID09IDApDQogICAgICAgIHsNCiAgICAgICAgICAoKmZ1bmMpICgp Ow0KICAgICAgICAgIG9uY2UtPmRvbmUgPSAxOw0KICAgICAgICB9DQogICAgICBlbHNlDQogICAg ICAgIHsNCg0KDQoNCg0KDQogICAgICAgICAgd2hpbGUgKCEgb25jZS0+ZG9uZSkNCiAgICAgICAg ICAgIFNsZWVwICgwKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICByZXR1cm4gMDsNCn0NCg0KDQoN Cg0Kc3RhdGljIGlubGluZSBpbnQNCl9fZ3RocmVhZF9rZXlfY3JlYXRlIChfX2d0aHJlYWRfa2V5 X3QgKmtleSwgdm9pZCAoKmR0b3IpICh2b2lkICopKQ0Kew0KICBpbnQgc3RhdHVzID0gMDsNCiAg RFdPUkQgdGxzX2luZGV4ID0gVGxzQWxsb2MgKCk7DQogIGlmICh0bHNfaW5kZXggIT0gMHhGRkZG RkZGRikNCiAgICB7DQogICAgICAqa2V5ID0gdGxzX2luZGV4Ow0KDQoNCg0KICAgICAgc3RhdHVz ID0gX19taW5nd3Rocl9rZXlfZHRvciAoKmtleSwgZHRvcik7DQoNCiAgICB9DQogIGVsc2UNCiAg ICBzdGF0dXMgPSAoaW50KSBHZXRMYXN0RXJyb3IgKCk7DQogIHJldHVybiBzdGF0dXM7DQp9DQoN Cg0KDQpzdGF0aWMgaW5saW5lIGludA0KX19ndGhyZWFkX2tleV9kdG9yIChfX2d0aHJlYWRfa2V5 X3Qga2V5LCB2b2lkICpwdHIpDQp7DQoNCiAgcmV0dXJuIDA7DQp9DQoNCnN0YXRpYyBpbmxpbmUg aW50DQpfX2d0aHJlYWRfa2V5X2RlbGV0ZSAoX19ndGhyZWFkX2tleV90IGtleSkNCnsNCiAgcmV0 dXJuIChUbHNGcmVlIChrZXkpICE9IDApID8gMCA6IChpbnQpIEdldExhc3RFcnJvciAoKTsNCn0N Cg0Kc3RhdGljIGlubGluZSB2b2lkICoNCl9fZ3RocmVhZF9nZXRzcGVjaWZpYyAoX19ndGhyZWFk X2tleV90IGtleSkNCnsNCiAgRFdPUkQgbGFzdGVycm9yOw0KICB2b2lkICpwdHI7DQoNCiAgbGFz dGVycm9yID0gR2V0TGFzdEVycm9yKCk7DQoNCiAgcHRyID0gVGxzR2V0VmFsdWUoa2V5KTsNCg0K ICBTZXRMYXN0RXJyb3IoIGxhc3RlcnJvciApOw0KDQogIHJldHVybiBwdHI7DQp9DQoNCnN0YXRp YyBpbmxpbmUgaW50DQpfX2d0aHJlYWRfc2V0c3BlY2lmaWMgKF9fZ3RocmVhZF9rZXlfdCBrZXks IGNvbnN0IHZvaWQgKnB0cikNCnsNCiAgcmV0dXJuIChUbHNTZXRWYWx1ZSAoa2V5LCAodm9pZCop IHB0cikgIT0gMCkgPyAwIDogKGludCkgR2V0TGFzdEVycm9yICgpOw0KfQ0KDQpzdGF0aWMgaW5s aW5lIHZvaWQNCl9fZ3RocmVhZF9tdXRleF9pbml0X2Z1bmN0aW9uIChfX2d0aHJlYWRfbXV0ZXhf dCAqbXV0ZXgpDQp7DQoNCiAgKm11dGV4ID0gQ3JlYXRlTXV0ZXhBIChfX251bGwsIDAsIF9fbnVs bCk7DQp9DQoNCnN0YXRpYyBpbmxpbmUgaW50DQpfX2d0aHJlYWRfbXV0ZXhfbG9jayAoX19ndGhy ZWFkX211dGV4X3QgKm11dGV4KQ0Kew0KICBpbnQgc3RhdHVzID0gMDsNCg0KICBpZiAoX19ndGhy ZWFkX2FjdGl2ZV9wICgpKQ0KICAgIHsNCiAgICAgIGlmIChXYWl0Rm9yU2luZ2xlT2JqZWN0ICgq bXV0ZXgsIDB4RkZGRkZGRkYpID09IDApDQogICAgICAgIHN0YXR1cyA9IDA7DQogICAgICBlbHNl DQogICAgICAgIHN0YXR1cyA9IDE7DQogICAgfQ0KICByZXR1cm4gc3RhdHVzOw0KfQ0KDQpzdGF0 aWMgaW5saW5lIGludA0KX19ndGhyZWFkX211dGV4X3RyeWxvY2sgKF9fZ3RocmVhZF9tdXRleF90 ICptdXRleCkNCnsNCiAgaW50IHN0YXR1cyA9IDA7DQoNCiAgaWYgKF9fZ3RocmVhZF9hY3RpdmVf cCAoKSkNCiAgICB7DQogICAgICBpZiAoV2FpdEZvclNpbmdsZU9iamVjdCAoKm11dGV4LCAwKSA9 PSAwKQ0KICAgICAgICBzdGF0dXMgPSAwOw0KICAgICAgZWxzZQ0KICAgICAgICBzdGF0dXMgPSAx Ow0KICAgIH0NCiAgcmV0dXJuIHN0YXR1czsNCn0NCg0Kc3RhdGljIGlubGluZSBpbnQNCl9fZ3Ro cmVhZF9tdXRleF91bmxvY2sgKF9fZ3RocmVhZF9tdXRleF90ICptdXRleCkNCnsNCiAgaWYgKF9f Z3RocmVhZF9hY3RpdmVfcCAoKSkNCiAgICByZXR1cm4gKFJlbGVhc2VNdXRleCAoKm11dGV4KSAh PSAwKSA/IDAgOiAxOw0KICBlbHNlDQogICAgcmV0dXJuIDA7DQp9DQojIDk5ICJ0Oi9tc3lzLzEu MC9taW5ndy9pbmNsdWRlL2crKy12My9pNjg2LXBjLW1pbmd3MzIvYml0cy9ndGhyLmgiIDIgMw0K IyAzOCAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1taW5ndzMyL2Jp dHMvYysraW8uaCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KICB0eXBlZGVmIGxvbmcgc3Ry ZWFtb2ZmOw0KICB0eXBlZGVmIHB0cmRpZmZfdCBzdHJlYW1zaXplOw0KDQoNCg0KICB0eXBlZGVm IGZwb3NfdCBfX2Nfc3RyZWFtcG9zOw0KDQogIHR5cGVkZWYgX19ndGhyZWFkX211dGV4X3QgX19j X2xvY2s7DQoNCg0KICB0eXBlZGVmIEZJTEUgX19jX2ZpbGU7DQoNCg0KICBzdHJ1Y3QgX19pb3Nf ZmxhZ3MNCiAgew0KICAgIHR5cGVkZWYgc2hvcnQgX19pbnRfdHlwZTsNCg0KICAgIHN0YXRpYyBj b25zdCBfX2ludF90eXBlIF9TX2Jvb2xhbHBoYSA9IDB4MDAwMTsNCiAgICBzdGF0aWMgY29uc3Qg X19pbnRfdHlwZSBfU19kZWMgPSAweDAwMDI7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUg X1NfZml4ZWQgPSAweDAwMDQ7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaGV4ID0g MHgwMDA4Ow0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2ludGVybmFsID0gMHgwMDEw Ow0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2xlZnQgPSAweDAwMjA7DQogICAgc3Rh dGljIGNvbnN0IF9faW50X3R5cGUgX1Nfb2N0ID0gMHgwMDQwOw0KICAgIHN0YXRpYyBjb25zdCBf X2ludF90eXBlIF9TX3JpZ2h0ID0gMHgwMDgwOw0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBl IF9TX3NjaWVudGlmaWMgPSAweDAxMDA7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf c2hvd2Jhc2UgPSAweDAyMDA7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd3Bv aW50ID0gMHgwNDAwOw0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3Nob3dwb3MgPSAw eDA4MDA7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2tpcHdzID0gMHgxMDAwOw0K ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3VuaXRidWYgPSAweDIwMDA7DQogICAgc3Rh dGljIGNvbnN0IF9faW50X3R5cGUgX1NfdXBwZXJjYXNlID0gMHg0MDAwOw0KICAgIHN0YXRpYyBj b25zdCBfX2ludF90eXBlIF9TX2FkanVzdGZpZWxkID0gMHgwMDIwIHwgMHgwMDgwIHwgMHgwMDEw Ow0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Jhc2VmaWVsZCA9IDB4MDAwMiB8IDB4 MDA0MCB8IDB4MDAwODsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19mbG9hdGZpZWxk ID0gMHgwMTAwIHwgMHgwMDA0Ow0KDQoNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19i YWRiaXQgPSAweDAxOw0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2VvZmJpdCA9IDB4 MDI7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZmFpbGJpdCA9IDB4MDQ7DQoNCg0K ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2FwcCA9IDB4MDE7DQogICAgc3RhdGljIGNv bnN0IF9faW50X3R5cGUgX1NfYXRlID0gMHgwMjsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw ZSBfU19iaW4gPSAweDA0Ow0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2luID0gMHgw ODsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19vdXQgPSAweDEwOw0KICAgIHN0YXRp YyBjb25zdCBfX2ludF90eXBlIF9TX3RydW5jID0gMHgyMDsNCiAgfTsNCn0NCiMgNDUgInQ6L21z eXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvZnBvcy5oIiAyIDMNCiMgMSAidDovbXN5 cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvY3djaGFyIiAxIDMNCiMgNDggInQ6L21zeXMvMS4w L21pbmd3L2luY2x1ZGUvZysrLXYzL2N3Y2hhciIgMw0KDQoNCg0KIyAxICJ0Oi9tc3lzLzEuMC9t aW5ndy9pbmNsdWRlL2crKy12My9jdGltZSIgMSAzDQojIDQ4ICJ0Oi9tc3lzLzEuMC9taW5ndy9p bmNsdWRlL2crKy12My9jdGltZSIgMw0KIyA2NCAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9n KystdjMvY3RpbWUiIDMNCm5hbWVzcGFjZSBzdGQNCnsNCiAgdXNpbmcgOjpjbG9ja190Ow0KICB1 c2luZyA6OnRpbWVfdDsNCiAgdXNpbmcgOjp0bTsNCg0KICB1c2luZyA6OmNsb2NrOw0KICB1c2lu ZyA6OmRpZmZ0aW1lOw0KICB1c2luZyA6Om1rdGltZTsNCiAgdXNpbmcgOjp0aW1lOw0KICB1c2lu ZyA6OmFzY3RpbWU7DQogIHVzaW5nIDo6Y3RpbWU7DQogIHVzaW5nIDo6Z210aW1lOw0KICB1c2lu ZyA6OmxvY2FsdGltZTsNCiAgdXNpbmcgOjpzdHJmdGltZTsNCn0NCiMgNTIgInQ6L21zeXMvMS4w L21pbmd3L2luY2x1ZGUvZysrLXYzL2N3Y2hhciIgMiAzDQojIDY5ICJ0Oi9tc3lzLzEuMC9taW5n dy9pbmNsdWRlL2crKy12My9jd2NoYXIiIDMNCm5hbWVzcGFjZSBzdGQNCnsNCiAgdXNpbmcgOjpt YnN0YXRlX3Q7DQp9DQojIDQ2ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRz L2Zwb3MuaCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1N0YXRlVD4NCiAgICBjbGFzcyBmcG9zDQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAg dHlwZWRlZiBfU3RhdGVUIF9fc3RhdGVfdHlwZTsNCg0KICAgIHByaXZhdGU6DQogICAgICBzdHJl YW1vZmYgX01fb2ZmOw0KICAgICAgX19zdGF0ZV90eXBlIF9NX3N0Ow0KDQogICAgcHVibGljOg0K ICAgICAgX19zdGF0ZV90eXBlDQogICAgICBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3N0OyB9 DQoNCiAgICAgIHZvaWQNCiAgICAgIHN0YXRlKF9fc3RhdGVfdHlwZSBfX3N0KSB7IF9NX3N0ID0g X19zdDsgfQ0KDQoNCg0KICAgICAgZnBvcygpOiBfTV9vZmYoc3RyZWFtb2ZmKCkpLCBfTV9zdChf X3N0YXRlX3R5cGUoKSkgeyB9DQoNCiAgICAgIGZwb3Moc3RyZWFtb2ZmIF9fb2ZmLCBfX3N0YXRl X3R5cGUgX19zdCA9IF9fc3RhdGVfdHlwZSgpKQ0KICAgICAgOiBfTV9vZmYoX19vZmYpLCBfTV9z dChfX3N0KSB7IH0NCg0KICAgICAgb3BlcmF0b3Igc3RyZWFtb2ZmKCkgY29uc3QgeyByZXR1cm4g X01fb2ZmOyB9DQoNCiAgICAgIGZwb3MmDQogICAgICBvcGVyYXRvcis9KHN0cmVhbW9mZiBfX29m ZikgeyBfTV9vZmYgKz0gX19vZmY7IHJldHVybiAqdGhpczsgfQ0KDQogICAgICBmcG9zJg0KICAg ICAgb3BlcmF0b3ItPShzdHJlYW1vZmYgX19vZmYpIHsgX01fb2ZmIC09IF9fb2ZmOyByZXR1cm4g KnRoaXM7IH0NCg0KICAgICAgZnBvcw0KICAgICAgb3BlcmF0b3IrKHN0cmVhbW9mZiBfX29mZikN CiAgICAgIHsNCiAgICAgICAgZnBvcyBfX3QoKnRoaXMpOw0KICAgICAgICBfX3QgKz0gX19vZmY7 DQogICAgICAgIHJldHVybiBfX3Q7DQogICAgICB9DQoNCiAgICAgIGZwb3MNCiAgICAgIG9wZXJh dG9yLShzdHJlYW1vZmYgX19vZmYpDQogICAgICB7DQogICAgICAgIGZwb3MgX190KCp0aGlzKTsN CiAgICAgICAgX190IC09IF9fb2ZmOw0KICAgICAgICByZXR1cm4gX190Ow0KICAgICAgfQ0KDQog ICAgICBib29sDQogICAgICBvcGVyYXRvcj09KGNvbnN0IGZwb3MmIF9fcG9zKSBjb25zdA0KICAg ICAgeyByZXR1cm4gX01fb2ZmID09IF9fcG9zLl9NX29mZjsgfQ0KDQogICAgICBib29sDQogICAg ICBvcGVyYXRvciE9KGNvbnN0IGZwb3MmIF9fcG9zKSBjb25zdA0KICAgICAgeyByZXR1cm4gX01f b2ZmICE9IF9fcG9zLl9NX29mZjsgfQ0KDQogICAgICBzdHJlYW1vZmYNCiAgICAgIF9NX3Bvc2l0 aW9uKCkgY29uc3QgeyByZXR1cm4gX01fb2ZmOyB9DQoNCiAgICAgIHZvaWQNCiAgICAgIF9NX3Bv c2l0aW9uKHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYgPSBfX29mZjsgfQ0KICAgIH07DQoNCg0K ICB0eXBlZGVmIGZwb3M8bWJzdGF0ZV90PiBzdHJlYW1wb3M7DQoNCg0KDQp9DQojIDQ3ICJ0Oi9t c3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9pb3Nmd2QiIDIgMw0KIyAxICJ0Oi9tc3lzLzEu MC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMw0KIyAzNCAidDov bXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzDQojIDEg InQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEg Mw0KIyAzNSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2Vw dC5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KDQogIHZvaWQNCiAgX190aHJvd19iYWRfZXhj ZXB0aW9uKHZvaWQpOw0KDQoNCiAgdm9pZA0KICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsNCg0K DQogIHZvaWQNCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsNCg0KICB2b2lkDQogIF9fdGhyb3df YmFkX3R5cGVpZCh2b2lkKTsNCg0KDQogIHZvaWQNCiAgX190aHJvd19sb2dpY19lcnJvcihjb25z dCBjaGFyKiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJvd19kb21haW5fZXJyb3IoY29uc3QgY2hh ciogX19zKTsNCg0KICB2b2lkDQogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFy KiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hhciogX19z KTsNCg0KICB2b2lkDQogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7DQoN CiAgdm9pZA0KICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2 b2lkDQogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQog IF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQogIF9f dGhyb3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCg0KICB2b2lkDQogIF9f dGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsNCn0NCiMgNDggInQ6L21zeXMvMS4w L21pbmd3L2luY2x1ZGUvZysrLXYzL2lvc2Z3ZCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8 X0NoYXJUPiA+DQogICAgY2xhc3MgYmFzaWNfaW9zOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPg0KICAgIGNsYXNz IGJhc2ljX3N0cmVhbWJ1ZjsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4NCiAgICBjbGFzcyBiYXNpY19pc3RyZWFt Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJf dHJhaXRzPF9DaGFyVD4gPg0KICAgIGNsYXNzIGJhc2ljX29zdHJlYW07DQoNCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+ DQogICAgY2xhc3MgYmFzaWNfaW9zdHJlYW07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwNCiAgICAgICAgICAgIHR5 cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4NCiAgICBjbGFzcyBiYXNpY19zdHJp bmdidWY7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0g Y2hhcl90cmFpdHM8X0NoYXJUPiwNCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2Nh dG9yPF9DaGFyVD4gPg0KICAgIGNsYXNzIGJhc2ljX2lzdHJpbmdzdHJlYW07DQoNCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJU PiwNCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPg0KICAg IGNsYXNzIGJhc2ljX29zdHJpbmdzdHJlYW07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwNCiAgICAgICAgICAgdHlw ZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPg0KICAgIGNsYXNzIGJhc2ljX3N0cmlu Z3N0cmVhbTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMg PSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4NCiAgICBjbGFzcyBiYXNpY19maWxlYnVmOw0KDQogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9D aGFyVD4gPg0KICAgIGNsYXNzIGJhc2ljX2lmc3RyZWFtOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPg0KICAgIGNs YXNzIGJhc2ljX29mc3RyZWFtOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPg0KICAgIGNsYXNzIGJhc2ljX2ZzdHJl YW07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hh cl90cmFpdHM8X0NoYXJUPiA+DQogICAgY2xhc3MgaXN0cmVhbWJ1Zl9pdGVyYXRvcjsNCg0KICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxf Q2hhclQ+ID4NCiAgICBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yOw0KDQoNCg0KICBjbGFzcyBp b3NfYmFzZTsNCg0KDQogIHR5cGVkZWYgYmFzaWNfaW9zPGNoYXI+IGlvczsNCiAgdHlwZWRlZiBi YXNpY19zdHJlYW1idWY8Y2hhcj4gc3RyZWFtYnVmOw0KICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08 Y2hhcj4gaXN0cmVhbTsNCiAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXI+IG9zdHJlYW07DQog IHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08Y2hhcj4gaW9zdHJlYW07DQogIHR5cGVkZWYgYmFzaWNf c3RyaW5nYnVmPGNoYXI+IHN0cmluZ2J1ZjsNCiAgdHlwZWRlZiBiYXNpY19pc3RyaW5nc3RyZWFt PGNoYXI+IGlzdHJpbmdzdHJlYW07DQogIHR5cGVkZWYgYmFzaWNfb3N0cmluZ3N0cmVhbTxjaGFy PiBvc3RyaW5nc3RyZWFtOw0KICB0eXBlZGVmIGJhc2ljX3N0cmluZ3N0cmVhbTxjaGFyPiBzdHJp bmdzdHJlYW07DQogIHR5cGVkZWYgYmFzaWNfZmlsZWJ1ZjxjaGFyPiBmaWxlYnVmOw0KICB0eXBl ZGVmIGJhc2ljX2lmc3RyZWFtPGNoYXI+IGlmc3RyZWFtOw0KICB0eXBlZGVmIGJhc2ljX29mc3Ry ZWFtPGNoYXI+IG9mc3RyZWFtOw0KICB0eXBlZGVmIGJhc2ljX2ZzdHJlYW08Y2hhcj4gZnN0cmVh bTsNCg0KICB0eXBlZGVmIGJhc2ljX2lvczx3Y2hhcl90PiB3aW9zOw0KICB0eXBlZGVmIGJhc2lj X3N0cmVhbWJ1Zjx3Y2hhcl90PiB3c3RyZWFtYnVmOw0KICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08 d2NoYXJfdD4gd2lzdHJlYW07DQogIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTx3Y2hhcl90PiB3b3N0 cmVhbTsNCiAgdHlwZWRlZiBiYXNpY19pb3N0cmVhbTx3Y2hhcl90PiB3aW9zdHJlYW07DQogIHR5 cGVkZWYgYmFzaWNfc3RyaW5nYnVmPHdjaGFyX3Q+IHdzdHJpbmdidWY7DQogIHR5cGVkZWYgYmFz aWNfaXN0cmluZ3N0cmVhbTx3Y2hhcl90PiB3aXN0cmluZ3N0cmVhbTsNCiAgdHlwZWRlZiBiYXNp Y19vc3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdvc3RyaW5nc3RyZWFtOw0KICB0eXBlZGVmIGJhc2lj X3N0cmluZ3N0cmVhbTx3Y2hhcl90PiB3c3RyaW5nc3RyZWFtOw0KICB0eXBlZGVmIGJhc2ljX2Zp bGVidWY8d2NoYXJfdD4gd2ZpbGVidWY7DQogIHR5cGVkZWYgYmFzaWNfaWZzdHJlYW08d2NoYXJf dD4gd2lmc3RyZWFtOw0KICB0eXBlZGVmIGJhc2ljX29mc3RyZWFtPHdjaGFyX3Q+IHdvZnN0cmVh bTsNCiAgdHlwZWRlZiBiYXNpY19mc3RyZWFtPHdjaGFyX3Q+IHdmc3RyZWFtOw0KfQ0KIyA0NSAi dDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvaW9zIiAyIDMNCiMgMSAidDovbXN5cy8x LjAvbWluZ3cvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uIiAxIDMNCiMgNDAgInQ6L21zeXMvMS4w L21pbmd3L2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbiIgMw0KZXh0ZXJuICJDKysiIHsNCg0KbmFt ZXNwYWNlIHN0ZA0Kew0KDQoNCg0KDQoNCg0KICBjbGFzcyBleGNlcHRpb24NCiAgew0KICBwdWJs aWM6DQogICAgZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0NCiAgICB2aXJ0dWFsIH5leGNlcHRpb24o KSB0aHJvdygpOw0KDQoNCiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQoKSBjb25zdCB0aHJv dygpOw0KICB9Ow0KDQoNCg0KICBjbGFzcyBiYWRfZXhjZXB0aW9uIDogcHVibGljIGV4Y2VwdGlv bg0KICB7DQogIHB1YmxpYzoNCiAgICBiYWRfZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0NCg0KDQog ICAgdmlydHVhbCB+YmFkX2V4Y2VwdGlvbigpIHRocm93KCk7DQogIH07DQoNCg0KICB0eXBlZGVm IHZvaWQgKCp0ZXJtaW5hdGVfaGFuZGxlcikgKCk7DQoNCiAgdHlwZWRlZiB2b2lkICgqdW5leHBl Y3RlZF9oYW5kbGVyKSAoKTsNCg0KDQogIHRlcm1pbmF0ZV9oYW5kbGVyIHNldF90ZXJtaW5hdGUo dGVybWluYXRlX2hhbmRsZXIpIHRocm93KCk7DQoNCg0KICB2b2lkIHRlcm1pbmF0ZSgpIF9fYXR0 cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsNCg0KDQogIHVuZXhwZWN0ZWRfaGFuZGxlciBzZXRf dW5leHBlY3RlZCh1bmV4cGVjdGVkX2hhbmRsZXIpIHRocm93KCk7DQoNCg0KICB2b2lkIHVuZXhw ZWN0ZWQoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7DQojIDk4ICJ0Oi9tc3lzLzEu MC9taW5ndy9pbmNsdWRlL2crKy12My9leGNlcHRpb24iIDMNCiAgYm9vbCB1bmNhdWdodF9leGNl cHRpb24oKSB0aHJvdygpOw0KfQ0KDQpuYW1lc3BhY2UgX19nbnVfY3h4DQp7DQojIDExMSAidDov bXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uIiAzDQogIHZvaWQgX192ZXJi b3NlX3Rlcm1pbmF0ZV9oYW5kbGVyICgpOw0KfQ0KDQp9DQojIDQ2ICJ0Oi9tc3lzLzEuMC9taW5n dy9pbmNsdWRlL2crKy12My9pb3MiIDIgMw0KIyAxICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRl L2crKy12My9iaXRzL2NoYXJfdHJhaXRzLmgiIDEgMw0KIyA0MyAidDovbXN5cy8xLjAvbWluZ3cv aW5jbHVkZS9nKystdjMvYml0cy9jaGFyX3RyYWl0cy5oIiAzDQoNCiMgMSAidDovbXN5cy8xLjAv bWluZ3cvaW5jbHVkZS9nKystdjMvY3N0cmluZyIgMSAzDQojIDQ4ICJ0Oi9tc3lzLzEuMC9taW5n dy9pbmNsdWRlL2crKy12My9jc3RyaW5nIiAzDQojIDc3ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNs dWRlL2crKy12My9jc3RyaW5nIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQogIHVzaW5nIDo6bWVtY3B5 Ow0KICB1c2luZyA6Om1lbW1vdmU7DQogIHVzaW5nIDo6c3RyY3B5Ow0KICB1c2luZyA6OnN0cm5j cHk7DQogIHVzaW5nIDo6c3RyY2F0Ow0KICB1c2luZyA6OnN0cm5jYXQ7DQogIHVzaW5nIDo6bWVt Y21wOw0KICB1c2luZyA6OnN0cmNtcDsNCiAgdXNpbmcgOjpzdHJjb2xsOw0KICB1c2luZyA6OnN0 cm5jbXA7DQogIHVzaW5nIDo6c3RyeGZybTsNCiAgdXNpbmcgOjpzdHJjc3BuOw0KICB1c2luZyA6 OnN0cnNwbjsNCiAgdXNpbmcgOjpzdHJ0b2s7DQogIHVzaW5nIDo6bWVtc2V0Ow0KICB1c2luZyA6 OnN0cmVycm9yOw0KICB1c2luZyA6OnN0cmxlbjsNCg0KICB1c2luZyA6Om1lbWNocjsNCg0KICBp bmxpbmUgdm9pZCoNCiAgbWVtY2hyKHZvaWQqIF9fcCwgaW50IF9fYywgc2l6ZV90IF9fbikNCiAg eyByZXR1cm4gbWVtY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgdm9pZCo+KF9fcCksIF9fYywgX19uKTsg fQ0KDQogIHVzaW5nIDo6c3RyY2hyOw0KDQogIGlubGluZSBjaGFyKg0KICBzdHJjaHIoY2hhciog X19zMSwgaW50IF9fbikNCiAgeyByZXR1cm4gX19idWlsdGluX3N0cmNocihjb25zdF9jYXN0PGNv bnN0IGNoYXIqPihfX3MxKSwgX19uKTsgfQ0KDQogIHVzaW5nIDo6c3RycGJyazsNCg0KICBpbmxp bmUgY2hhcioNCiAgc3RycGJyayhjaGFyKiBfX3MxLCBjb25zdCBjaGFyKiBfX3MyKQ0KICB7IHJl dHVybiBfX2J1aWx0aW5fc3RycGJyayhjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19z Mik7IH0NCg0KICB1c2luZyA6OnN0cnJjaHI7DQoNCiAgaW5saW5lIGNoYXIqDQogIHN0cnJjaHIo Y2hhciogX19zMSwgaW50IF9fbikNCiAgeyByZXR1cm4gX19idWlsdGluX3N0cnJjaHIoY29uc3Rf Y2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fbik7IH0NCg0KICB1c2luZyA6OnN0cnN0cjsNCg0K ICBpbmxpbmUgY2hhcioNCiAgc3Ryc3RyKGNoYXIqIF9fczEsIGNvbnN0IGNoYXIqIF9fczIpDQog IHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJzdHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSks IF9fczIpOyB9DQp9DQojIDQ1ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRz L2NoYXJfdHJhaXRzLmgiIDIgMw0KDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KDQoNCiAgdGVtcGxh dGU8Y2xhc3MgX0NoYXJUPg0KICAgIHN0cnVjdCBjaGFyX3RyYWl0cw0KICAgIHsNCiAgICAgIHR5 cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCg0KICAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGlu dF90eXBlOw0KICAgICAgdHlwZWRlZiBzdHJlYW1wb3MgcG9zX3R5cGU7DQogICAgICB0eXBlZGVm IHN0cmVhbW9mZiBvZmZfdHlwZTsNCiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7 DQoNCiAgICAgIHN0YXRpYyB2b2lkDQogICAgICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25z dCBjaGFyX3R5cGUmIF9fYzIpDQogICAgICB7IF9fYzEgPSBfX2MyOyB9DQoNCiAgICAgIHN0YXRp YyBib29sDQogICAgICBlcShjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYg X19jMikNCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQ0KDQogICAgICBzdGF0aWMgYm9v bA0KICAgICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIp DQogICAgICB7IHJldHVybiBfX2MxIDwgX19jMjsgfQ0KDQogICAgICBzdGF0aWMgaW50DQogICAg ICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBz aXplX3QgX19uKQ0KICAgICAgew0KICAgICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBf X247ICsrX19pKQ0KICAgICAgICAgIGlmICghZXEoX19zMVtfX2ldLCBfX3MyW19faV0pKQ0KICAg ICAgICAgICAgcmV0dXJuIGx0KF9fczFbX19pXSwgX19zMltfX2ldKSA/IC0xIDogMTsNCiAgICAg ICAgcmV0dXJuIDA7DQogICAgICB9DQoNCiAgICAgIHN0YXRpYyBzaXplX3QNCiAgICAgIGxlbmd0 aChjb25zdCBjaGFyX3R5cGUqIF9fcykNCiAgICAgIHsNCiAgICAgICAgY29uc3QgY2hhcl90eXBl KiBfX3AgPSBfX3M7DQogICAgICAgIHdoaWxlICgqX19wKSArK19fcDsNCiAgICAgICAgcmV0dXJu IChfX3AgLSBfX3MpOw0KICAgICAgfQ0KDQogICAgICBzdGF0aWMgY29uc3QgY2hhcl90eXBlKg0K ICAgICAgZmluZChjb25zdCBjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY29uc3QgY2hhcl90 eXBlJiBfX2EpDQogICAgICB7DQogICAgICAgIGZvciAoY29uc3QgY2hhcl90eXBlKiBfX3AgPSBf X3M7IHNpemVfdChfX3AgLSBfX3MpIDwgX19uOyArK19fcCkNCiAgICAgICAgICBpZiAoKl9fcCA9 PSBfX2EpIHJldHVybiBfX3A7DQogICAgICAgIHJldHVybiAwOw0KICAgICAgfQ0KDQogICAgICBz dGF0aWMgY2hhcl90eXBlKg0KICAgICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJf dHlwZSogX19zMiwgc2l6ZV90IF9fbikNCiAgICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1t b3ZlKF9fczEsIF9fczIsIF9fbiAqIHNpemVvZihjaGFyX3R5cGUpKTsgfQ0KDQogICAgICBzdGF0 aWMgY2hhcl90eXBlKg0KICAgICAgY29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlw ZSogX19zMiwgc2l6ZV90IF9fbikNCiAgICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1jcHko X19zMSwgX19zMiwgX19uICogc2l6ZW9mKGNoYXJfdHlwZSkpOyB9DQoNCiAgICAgIHN0YXRpYyBj aGFyX3R5cGUqDQogICAgICBhc3NpZ24oY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNoYXJf dHlwZSBfX2EpDQogICAgICB7DQogICAgICAgIGZvciAoY2hhcl90eXBlKiBfX3AgPSBfX3M7IF9f cCA8IF9fcyArIF9fbjsgKytfX3ApDQogICAgICAgICAgYXNzaWduKCpfX3AsIF9fYSk7DQogICAg ICAgIHJldHVybiBfX3M7DQogICAgICB9DQoNCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUNCiAgICAg IHRvX2NoYXJfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jKQ0KICAgICAgeyByZXR1cm4gY2hhcl90 eXBlKF9fYyk7IH0NCg0KICAgICAgc3RhdGljIGludF90eXBlDQogICAgICB0b19pbnRfdHlwZShj b25zdCBjaGFyX3R5cGUmIF9fYykgeyByZXR1cm4gaW50X3R5cGUoX19jKTsgfQ0KDQogICAgICBz dGF0aWMgYm9vbA0KICAgICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0 IGludF90eXBlJiBfX2MyKQ0KICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9DQoNCiAgICAg IHN0YXRpYyBpbnRfdHlwZQ0KICAgICAgZW9mKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5 cGU+KC0xKTsgfQ0KDQogICAgICBzdGF0aWMgaW50X3R5cGUNCiAgICAgIG5vdF9lb2YoY29uc3Qg aW50X3R5cGUmIF9fYykNCiAgICAgIHsgcmV0dXJuIGVxX2ludF90eXBlKF9fYywgZW9mKCkpID8g aW50X3R5cGUoMCkgOiBfX2M7IH0NCiAgICB9Ow0KDQoNCg0KICB0ZW1wbGF0ZTw+DQogICAgc3Ry dWN0IGNoYXJfdHJhaXRzPGNoYXI+DQogICAgew0KICAgICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlw ZTsNCiAgICAgIHR5cGVkZWYgaW50IGludF90eXBlOw0KICAgICAgdHlwZWRlZiBzdHJlYW1wb3Mg cG9zX3R5cGU7DQogICAgICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsNCiAgICAgIHR5cGVk ZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7DQoNCiAgICAgIHN0YXRpYyB2b2lkDQogICAgICBhc3Np Z24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpDQogICAgICB7IF9fYzEg PSBfX2MyOyB9DQoNCiAgICAgIHN0YXRpYyBib29sDQogICAgICBlcShjb25zdCBjaGFyX3R5cGUm IF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikNCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19j MjsgfQ0KDQogICAgICBzdGF0aWMgYm9vbA0KICAgICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2Mx LCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpDQogICAgICB7IHJldHVybiBfX2MxIDwgX19jMjsgfQ0K DQogICAgICBzdGF0aWMgaW50DQogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwg Y29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQ0KICAgICAgeyByZXR1cm4gbWVtY21w KF9fczEsIF9fczIsIF9fbik7IH0NCg0KICAgICAgc3RhdGljIHNpemVfdA0KICAgICAgbGVuZ3Ro KGNvbnN0IGNoYXJfdHlwZSogX19zKQ0KICAgICAgeyByZXR1cm4gc3RybGVuKF9fcyk7IH0NCg0K ICAgICAgc3RhdGljIGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIGZpbmQoY29uc3QgY2hhcl90eXBl KiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJfdHlwZSYgX19hKQ0KICAgICAgeyByZXR1cm4g c3RhdGljX2Nhc3Q8Y29uc3QgY2hhcl90eXBlKj4obWVtY2hyKF9fcywgX19hLCBfX24pKTsgfQ0K DQogICAgICBzdGF0aWMgY2hhcl90eXBlKg0KICAgICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNv bnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikNCiAgICAgIHsgcmV0dXJuIHN0YXRpY19j YXN0PGNoYXJfdHlwZSo+KG1lbW1vdmUoX19zMSwgX19zMiwgX19uKSk7IH0NCg0KICAgICAgc3Rh dGljIGNoYXJfdHlwZSoNCiAgICAgIGNvcHkoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5 cGUqIF9fczIsIHNpemVfdCBfX24pDQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5 cGUqPihtZW1jcHkoX19zMSwgX19zMiwgX19uKSk7IH0NCg0KICAgICAgc3RhdGljIGNoYXJfdHlw ZSoNCiAgICAgIGFzc2lnbihjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY2hhcl90eXBlIF9f YSkNCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1lbXNldChfX3MsIF9f YSwgX19uKSk7IH0NCg0KICAgICAgc3RhdGljIGNoYXJfdHlwZQ0KICAgICAgdG9fY2hhcl90eXBl KGNvbnN0IGludF90eXBlJiBfX2MpDQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5 cGU+KF9fYyk7IH0NCg0KDQoNCiAgICAgIHN0YXRpYyBpbnRfdHlwZQ0KICAgICAgdG9faW50X3R5 cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpDQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRf dHlwZT4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKSk7IH0NCg0KICAgICAgc3RhdGlj IGJvb2wNCiAgICAgIGVxX2ludF90eXBlKGNvbnN0IGludF90eXBlJiBfX2MxLCBjb25zdCBpbnRf dHlwZSYgX19jMikNCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQ0KDQogICAgICBzdGF0 aWMgaW50X3R5cGUNCiAgICAgIGVvZigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBlPigo LTEpKTsgfQ0KDQogICAgICBzdGF0aWMgaW50X3R5cGUNCiAgICAgIG5vdF9lb2YoY29uc3QgaW50 X3R5cGUmIF9fYykNCiAgICAgIHsgcmV0dXJuIChfX2MgPT0gZW9mKCkpID8gMCA6IF9fYzsgfQ0K ICB9Ow0KIyAyNjkgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvY2hhcl90 cmFpdHMuaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ DQogICAgc3RydWN0IF9DaGFyX3RyYWl0c19tYXRjaA0KICAgIHsNCiAgICAgIF9DaGFyVCBfTV9j Ow0KICAgICAgX0NoYXJfdHJhaXRzX21hdGNoKF9DaGFyVCBjb25zdCYgX19jKSA6IF9NX2MoX19j KSB7IH0NCg0KICAgICAgYm9vbA0KICAgICAgb3BlcmF0b3IoKShfQ2hhclQgY29uc3QmIF9fYSkg eyByZXR1cm4gX1RyYWl0czo6ZXEoX01fYywgX19hKTsgfQ0KICAgIH07DQp9DQojIDQ3ICJ0Oi9t c3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9pb3MiIDIgMw0KDQojIDEgInQ6L21zeXMvMS4w L21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgiIDEgMw0KIyA0NCAidDovbXN5 cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMw0KDQoNCiMgMSAi dDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1taW5ndzMyL2JpdHMvYysr bG9jYWxlLmgiIDEgMw0KIyAzNiAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvaTY4 Ni1wYy1taW5ndzMyL2JpdHMvYysrbG9jYWxlLmgiIDMNCiMgMSAidDovbXN5cy8xLjAvbWluZ3cv aW5jbHVkZS9nKystdjMvY2xvY2FsZSIgMSAzDQojIDQ4ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNs dWRlL2crKy12My9jbG9jYWxlIiAzDQoNCiMgMSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9s b2NhbGUuaCIgMSAzDQojIDU3ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2xvY2FsZS5oIiAz DQpzdHJ1Y3QgbGNvbnYNCnsNCiAgICAgICAgY2hhciogZGVjaW1hbF9wb2ludDsNCiAgICAgICAg Y2hhciogdGhvdXNhbmRzX3NlcDsNCiAgICAgICAgY2hhciogZ3JvdXBpbmc7DQogICAgICAgIGNo YXIqIGludF9jdXJyX3N5bWJvbDsNCiAgICAgICAgY2hhciogY3VycmVuY3lfc3ltYm9sOw0KICAg ICAgICBjaGFyKiBtb25fZGVjaW1hbF9wb2ludDsNCiAgICAgICAgY2hhciogbW9uX3Rob3VzYW5k c19zZXA7DQogICAgICAgIGNoYXIqIG1vbl9ncm91cGluZzsNCiAgICAgICAgY2hhciogcG9zaXRp dmVfc2lnbjsNCiAgICAgICAgY2hhciogbmVnYXRpdmVfc2lnbjsNCiAgICAgICAgY2hhciBpbnRf ZnJhY19kaWdpdHM7DQogICAgICAgIGNoYXIgZnJhY19kaWdpdHM7DQogICAgICAgIGNoYXIgcF9j c19wcmVjZWRlczsNCiAgICAgICAgY2hhciBwX3NlcF9ieV9zcGFjZTsNCiAgICAgICAgY2hhciBu X2NzX3ByZWNlZGVzOw0KICAgICAgICBjaGFyIG5fc2VwX2J5X3NwYWNlOw0KICAgICAgICBjaGFy IHBfc2lnbl9wb3NuOw0KICAgICAgICBjaGFyIG5fc2lnbl9wb3NuOw0KfTsNCg0KDQpleHRlcm4g IkMiIHsNCg0KDQpjaGFyKiBzZXRsb2NhbGUgKGludCwgY29uc3QgY2hhciopOw0Kc3RydWN0IGxj b252KiBsb2NhbGVjb252ICh2b2lkKTsNCiMgOTQgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUv bG9jYWxlLmgiIDMNCn0NCiMgNTAgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2Ns b2NhbGUiIDIgMw0KDQoNCg0KDQoNCm5hbWVzcGFjZSBzdGQNCnsNCiAgdXNpbmcgOjpsY29udjsN CiAgdXNpbmcgOjpzZXRsb2NhbGU7DQogIHVzaW5nIDo6bG9jYWxlY29udjsNCn0NCiMgMzcgInQ6 L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbWluZ3czMi9iaXRzL2MrK2xv Y2FsZS5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KICB0eXBlZGVmIGludCogX19jX2xvY2Fs ZTsNCn0NCiMgNDcgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxl ZndkLmgiIDIgMw0KIyAxICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9jbGltaXRz IiAxIDMNCiMgNDggInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2NsaW1pdHMiIDMN Cg0KIyAxICJ0Oi9tc3lzLzEuMC9taW5ndy9saWIvZ2NjLWxpYi9pNjg2LXBjLW1pbmd3MzIvMy4x L2luY2x1ZGUvbGltaXRzLmgiIDEgMw0KIyA1MCAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9n KystdjMvY2xpbWl0cyIgMiAzDQojIDQ4ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12 My9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMNCiMgMSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9n KystdjMvY2N0eXBlIiAxIDMNCiMgNDcgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYz L2NjdHlwZSIgMw0KIyA2NiAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvY2N0eXBl IiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQogIHVzaW5nIDo6aXNhbG51bTsNCiAgdXNpbmcgOjppc2Fs cGhhOw0KICB1c2luZyA6OmlzY250cmw7DQogIHVzaW5nIDo6aXNkaWdpdDsNCiAgdXNpbmcgOjpp c2dyYXBoOw0KICB1c2luZyA6OmlzbG93ZXI7DQogIHVzaW5nIDo6aXNwcmludDsNCiAgdXNpbmcg Ojppc3B1bmN0Ow0KICB1c2luZyA6Omlzc3BhY2U7DQogIHVzaW5nIDo6aXN1cHBlcjsNCiAgdXNp bmcgOjppc3hkaWdpdDsNCiAgdXNpbmcgOjp0b2xvd2VyOw0KICB1c2luZyA6OnRvdXBwZXI7DQp9 DQojIDQ5ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5o IiAyIDMNCiMgMSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvc3RyaW5nIiAxIDMN CiMgNDQgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL3N0cmluZyIgMw0KDQoNCg0K DQojIDEgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL21lbW9yeSIgMSAzDQojIDUz ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9tZW1vcnkiIDMNCg0KIyAxICJ0Oi9t c3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAxIDMNCiMg NjcgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgi IDMNCiMgMSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvY3N0ZGxpYiIgMSAzDQoj IDQ4ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9jc3RkbGliIiAzDQojIDg0ICJ0 Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9jc3RkbGliIiAzDQpuYW1lc3BhY2Ugc3Rk DQp7DQogIHVzaW5nIDo6ZGl2X3Q7DQogIHVzaW5nIDo6bGRpdl90Ow0KDQogIHVzaW5nIDo6YWJv cnQ7DQogIHVzaW5nIDo6YWJzOw0KICB1c2luZyA6OmF0ZXhpdDsNCiAgdXNpbmcgOjphdG9mOw0K ICB1c2luZyA6OmF0b2k7DQogIHVzaW5nIDo6YXRvbDsNCiAgdXNpbmcgOjpic2VhcmNoOw0KICB1 c2luZyA6OmNhbGxvYzsNCiAgdXNpbmcgOjpkaXY7DQogIHVzaW5nIDo6ZXhpdDsNCiAgdXNpbmcg OjpmcmVlOw0KICB1c2luZyA6OmdldGVudjsNCiAgdXNpbmcgOjpsYWJzOw0KICB1c2luZyA6Omxk aXY7DQogIHVzaW5nIDo6bWFsbG9jOw0KICB1c2luZyA6Om1ibGVuOw0KICB1c2luZyA6Om1ic3Rv d2NzOw0KICB1c2luZyA6Om1idG93YzsNCiAgdXNpbmcgOjpxc29ydDsNCiAgdXNpbmcgOjpyYW5k Ow0KICB1c2luZyA6OnJlYWxsb2M7DQogIHVzaW5nIDo6c3JhbmQ7DQogIHVzaW5nIDo6c3RydG9k Ow0KICB1c2luZyA6OnN0cnRvbDsNCiAgdXNpbmcgOjpzdHJ0b3VsOw0KICB1c2luZyA6OnN5c3Rl bTsNCiAgdXNpbmcgOjp3Y3N0b21iczsNCiAgdXNpbmcgOjp3Y3RvbWI7DQoNCiAgaW5saW5lIGxv bmcNCiAgYWJzKGxvbmcgX19pKSB7IHJldHVybiBsYWJzKF9faSk7IH0NCg0KICBpbmxpbmUgbGRp dl90DQogIGRpdihsb25nIF9faSwgbG9uZyBfX2opIHsgcmV0dXJuIGxkaXYoX19pLCBfX2opOyB9 DQp9DQojIDY4ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdv YmFzZS5oIiAyIDMNCg0KIyAxICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9uZXci IDEgMw0KIyA0NCAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvbmV3IiAzDQpleHRl cm4gIkMrKyIgew0KDQpuYW1lc3BhY2Ugc3RkDQp7DQoNCg0KICBjbGFzcyBiYWRfYWxsb2MgOiBw dWJsaWMgZXhjZXB0aW9uDQogIHsNCiAgcHVibGljOg0KICAgIGJhZF9hbGxvYygpIHRocm93KCkg eyB9DQoNCg0KICAgIHZpcnR1YWwgfmJhZF9hbGxvYygpIHRocm93KCk7DQogIH07DQoNCiAgc3Ry dWN0IG5vdGhyb3dfdCB7IH07DQogIGV4dGVybiBjb25zdCBub3Rocm93X3Qgbm90aHJvdzsNCg0K DQogIHR5cGVkZWYgdm9pZCAoKm5ld19oYW5kbGVyKSgpOw0KDQogIG5ld19oYW5kbGVyIHNldF9u ZXdfaGFuZGxlcihuZXdfaGFuZGxlcik7DQp9DQojIDc5ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNs dWRlL2crKy12My9uZXciIDMNCnZvaWQqIG9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCkgdGhyb3cg KHN0ZDo6YmFkX2FsbG9jKTsNCnZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90KSB0aHJv dyAoc3RkOjpiYWRfYWxsb2MpOw0Kdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCopIHRocm93KCk7 DQp2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqKSB0aHJvdygpOw0Kdm9pZCogb3BlcmF0b3Ig bmV3KHN0ZDo6c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7DQp2b2lkKiBv cGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygp Ow0Kdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhy b3coKTsNCnZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCosIGNvbnN0IHN0ZDo6bm90aHJvd190 JikgdGhyb3coKTsNCg0KDQppbmxpbmUgdm9pZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90LCB2 b2lkKiBfX3ApIHRocm93KCkgeyByZXR1cm4gX19wOyB9DQppbmxpbmUgdm9pZCogb3BlcmF0b3Ig bmV3W10oc3RkOjpzaXplX3QsIHZvaWQqIF9fcCkgdGhyb3coKSB7IHJldHVybiBfX3A7IH0NCg0K fQ0KIyA3MCAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jh c2UuaCIgMiAzDQoNCiMgMSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9z dGxfcGFpci5oIiAxIDMNCiMgNjQgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RsX3BhaXIuaCIgMw0KbmFtZXNwYWNlIHN0ZA0Kew0KDQoNCnRlbXBsYXRlIDxjbGFzcyBf VDEsIGNsYXNzIF9UMj4NCnN0cnVjdCBwYWlyIHsNCiAgdHlwZWRlZiBfVDEgZmlyc3RfdHlwZTsN CiAgdHlwZWRlZiBfVDIgc2Vjb25kX3R5cGU7DQoNCiAgX1QxIGZpcnN0Ow0KICBfVDIgc2Vjb25k Ow0KDQoNCg0KDQogIHBhaXIoKSA6IGZpcnN0KCksIHNlY29uZCgpIHt9DQoNCg0KDQoNCiAgcGFp cihjb25zdCBfVDEmIF9fYSwgY29uc3QgX1QyJiBfX2IpIDogZmlyc3QoX19hKSwgc2Vjb25kKF9f Yikge30NCg0KDQogIHRlbXBsYXRlIDxjbGFzcyBfVTEsIGNsYXNzIF9VMj4NCiAgcGFpcihjb25z dCBwYWlyPF9VMSwgX1UyPiYgX19wKSA6IGZpcnN0KF9fcC5maXJzdCksIHNlY29uZChfX3Auc2Vj b25kKSB7fQ0KfTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+DQppbmxpbmUg Ym9vbCBvcGVyYXRvcj09KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1Qx LCBfVDI+JiBfX3kpDQp7DQogIHJldHVybiBfX3guZmlyc3QgPT0gX195LmZpcnN0ICYmIF9feC5z ZWNvbmQgPT0gX195LnNlY29uZDsNCn0NCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBf VDI+DQppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29u c3QgcGFpcjxfVDEsIF9UMj4mIF9feSkNCnsNCiAgcmV0dXJuIF9feC5maXJzdCA8IF9feS5maXJz dCB8fA0KICAgICAgICAgKCEoX195LmZpcnN0IDwgX194LmZpcnN0KSAmJiBfX3guc2Vjb25kIDwg X195LnNlY29uZCk7DQp9DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPg0KaW5s aW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWly PF9UMSwgX1QyPiYgX195KSB7DQogIHJldHVybiAhKF9feCA9PSBfX3kpOw0KfQ0KDQoNCnRlbXBs YXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4NCmlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBw YWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7DQogIHJldHVy biBfX3kgPCBfX3g7DQp9DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPg0KaW5s aW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWly PF9UMSwgX1QyPiYgX195KSB7DQogIHJldHVybiAhKF9feSA8IF9feCk7DQp9DQoNCg0KdGVtcGxh dGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPg0KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBw YWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7DQogIHJldHVy biAhKF9feCA8IF9feSk7DQp9DQojIDE0MCAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKyst djMvYml0cy9zdGxfcGFpci5oIiAzDQp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+DQoN Cg0KaW5saW5lIHBhaXI8X1QxLCBfVDI+IG1ha2VfcGFpcihfVDEgX194LCBfVDIgX195KQ0KDQoN Cg0Kew0KICByZXR1cm4gcGFpcjxfVDEsIF9UMj4oX194LCBfX3kpOw0KfQ0KDQp9DQojIDcyICJ0 Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMN CiMgMSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy90eXBlX3RyYWl0cy5o IiAxIDMNCiMgNTMgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvdHlwZV90 cmFpdHMuaCIgMw0KIyA5MCAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy90 eXBlX3RyYWl0cy5oIiAzDQpzdHJ1Y3QgX190cnVlX3R5cGUge307DQpzdHJ1Y3QgX19mYWxzZV90 eXBlIHt9Ow0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0Kc3RydWN0IF9fdHlwZV90cmFpdHMgew0K ICAgdHlwZWRlZiBfX3RydWVfdHlwZSB0aGlzX2R1bW15X21lbWJlcl9tdXN0X2JlX2ZpcnN0Ow0K IyAxMTMgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvdHlwZV90cmFpdHMu aCIgMw0KICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1 Y3RvcjsNCiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0 b3I7DQogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJh dG9yOw0KICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAg IHR5cGVkZWYgX19mYWxzZV90eXBlIGlzX1BPRF90eXBlOw0KfTsNCg0KDQoNCg0KdGVtcGxhdGU8 PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxib29sPiB7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh c190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh c190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190 cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190 cml2aWFsX2Rlc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOw0K fTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxjaGFyPiB7DQogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7DQogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7DQogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGlzX1BPRF90eXBlOw0KfTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxzaWdu ZWQgY2hhcj4gew0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2Nv bnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0 cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w ZXJhdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOw0K ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsNCn07DQoNCnRlbXBsYXRlPD4gc3Ry dWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgY2hhcj4gew0KICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo YXNfdHJpdmlhbF9kZXN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlw ZTsNCn07DQoNCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8d2NoYXJfdD4gew0KICAg dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOw0KICAg dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOw0KICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOw0KICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBpc19QT0RfdHlwZTsNCn07DQoNCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFp dHM8c2hvcnQ+IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j b25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25z dHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9v cGVyYXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsN CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0 cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIHNob3J0PiB7DQogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGhhc190cml2aWFsX2Rlc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90 eXBlOw0KfTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxpbnQ+IHsNCiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVl X3R5cGUgaXNfUE9EX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRz PHVuc2lnbmVkIGludD4gew0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZh dWx0X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5 X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25t ZW50X29wZXJhdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVj dG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsNCn07DQoNCnRlbXBsYXRl PD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZz4gew0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo YXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf dHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf dHJpdmlhbF9kZXN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsN Cn07DQoNCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZz4gew0K ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOw0K ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOw0KICAg dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOw0KICAg dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOw0KICAgdHlwZWRlZiBf X3RydWVfdHlwZSBpc19QT0RfdHlwZTsNCn07DQoNCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90 cmFpdHM8bG9uZyBsb25nPiB7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl ZmF1bHRfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Nv cHlfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2ln bm1lbnRfb3BlcmF0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3Ry dWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOw0KfTsNCg0KdGVtcGxh dGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBsb25nIGxvbmc+IHsNCiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaXNfUE9EX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGZs b2F0PiB7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3Ry dWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0 b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0 b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7DQogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOw0KfTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3Qg X190eXBlX3RyYWl0czxkb3VibGU+IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp YWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp YWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf YXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf ZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7DQp9Ow0KDQp0 ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgZG91YmxlPiB7DQogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7DQogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7DQogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGlzX1BPRF90eXBlOw0KfTsNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCnN0cnVjdCBfX3R5cGVf dHJhaXRzPF9UcCo+IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVs dF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9j b25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVu dF9vcGVyYXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3Rv cjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7DQp9Ow0KDQoNCg0KDQoNCnRl bXBsYXRlIDxjbGFzcyBfVHA+IHN0cnVjdCBfSXNfaW50ZWdlciB7DQogIHR5cGVkZWYgX19mYWxz ZV90eXBlIF9JbnRlZ3JhbDsNCn07DQoNCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGJv b2w+IHsNCiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7DQp9Ow0KDQp0ZW1wbGF0ZTw+ IHN0cnVjdCBfSXNfaW50ZWdlcjxjaGFyPiB7DQogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVn cmFsOw0KfTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8c2lnbmVkIGNoYXI+IHsN CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVj dCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBjaGFyPiB7DQogIHR5cGVkZWYgX190cnVlX3R5cGUgX0lu dGVncmFsOw0KfTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8d2NoYXJfdD4gew0K ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsNCn07DQoNCnRlbXBsYXRlPD4gc3RydWN0 IF9Jc19pbnRlZ2VyPHNob3J0PiB7DQogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOw0K fTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgc2hvcnQ+IHsNCiAg dHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBf SXNfaW50ZWdlcjxpbnQ+IHsNCiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7DQp9Ow0K DQp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBpbnQ+IHsNCiAgdHlwZWRl ZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50 ZWdlcjxsb25nPiB7DQogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOw0KfTsNCg0KdGVt cGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgbG9uZz4gew0KICB0eXBlZGVmIF9f dHJ1ZV90eXBlIF9JbnRlZ3JhbDsNCn07DQoNCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2Vy PGxvbmcgbG9uZz4gew0KICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsNCn07DQoNCnRl bXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGxvbmcgbG9uZz4gew0KICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsNCn07DQoNCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4g c3RydWN0IF9Jc19ub3JtYWxfaXRlcmF0b3Igew0KICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX05v cm1hbDsNCn07DQoNCg0KbmFtZXNwYWNlIF9fZ251X2N4eA0Kew0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+IGNsYXNzIF9fbm9ybWFsX2l0ZXJhdG9y Ow0KfQ0KDQp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+ DQpzdHJ1Y3QgX0lzX25vcm1hbF9pdGVyYXRvcjwgX19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRv cjxfSXRlcmF0b3IsIF9Db250YWluZXI+ID4gew0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBfTm9y bWFsOw0KfTsNCiMgNzMgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs X2FsZ29iYXNlLmgiIDIgMw0KIyAxICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9i aXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDEgMw0KIyA2OCAidDovbXN5cy8xLjAvbWlu Z3cvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAzDQoNCm5h bWVzcGFjZSBzdGQNCnsNCiMgODAgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMw0KICBzdHJ1Y3QgaW5wdXRfaXRlcmF0b3Jf dGFnIHt9Ow0KDQogIHN0cnVjdCBvdXRwdXRfaXRlcmF0b3JfdGFnIHt9Ow0KDQogIHN0cnVjdCBm b3J3YXJkX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBpbnB1dF9pdGVyYXRvcl90YWcge307DQoNCiAg c3RydWN0IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIDogcHVibGljIGZvcndhcmRfaXRlcmF0 b3JfdGFnIHt9Ow0KDQogIHN0cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyA6IHB1Ymxp YyBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyB7fTsNCiMgMTAwICJ0Oi9tc3lzLzEuMC9taW5n dy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDMNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NhdGVnb3J5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9EaXN0YW5j ZSA9IHB0cmRpZmZfdCwNCiAgICAgICAgICAgdHlwZW5hbWUgX1BvaW50ZXIgPSBfVHAqLCB0eXBl bmFtZSBfUmVmZXJlbmNlID0gX1RwJj4NCiAgICBzdHJ1Y3QgaXRlcmF0b3Igew0KDQogICAgICB0 eXBlZGVmIF9DYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsNCg0KICAgICAgdHlwZWRlZiBfVHAg dmFsdWVfdHlwZTsNCg0KICAgICAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOw0K DQogICAgICB0eXBlZGVmIF9Qb2ludGVyIHBvaW50ZXI7DQoNCiAgICAgIHR5cGVkZWYgX1JlZmVy ZW5jZSByZWZlcmVuY2U7DQogICAgfTsNCg0KDQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSXRlcmF0b3I+DQogICAgc3RydWN0IGl0ZXJhdG9yX3RyYWl0cyB7DQogICAgICB0eXBlZGVm IHR5cGVuYW1lIF9JdGVyYXRvcjo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7 DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6dmFsdWVfdHlwZSB2YWx1ZV90eXBl Ow0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZSBkaWZm ZXJlbmNlX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cG9pbnRlciBw b2ludGVyOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnJlZmVyZW5jZSByZWZl cmVuY2U7DQogICAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogICAgc3RydWN0IGl0 ZXJhdG9yX3RyYWl0czxfVHAqPiB7DQogICAgICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0 b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Ow0KICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsN CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsNCiAgICAgIHR5cGVkZWYg X1RwKiBwb2ludGVyOw0KICAgICAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsNCiAgICB9Ow0KDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgICBzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPGNvbnN0 IF9UcCo+IHsNCiAgICAgIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0 b3JfY2F0ZWdvcnk7DQogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOw0KICAgICAgdHlwZWRl ZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOw0KICAgICAgdHlwZWRlZiBjb25zdCBfVHAqIHBv aW50ZXI7DQogICAgICB0eXBlZGVmIGNvbnN0IF9UcCYgcmVmZXJlbmNlOw0KICAgIH07DQoNCg0K DQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXI+DQogICAgaW5saW5lIHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5DQogICAgX19pdGVyYXRv cl9jYXRlZ29yeShjb25zdCBfSXRlciYpDQogICAgeyByZXR1cm4gdHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkoKTsgfQ0KDQp9DQojIDc0ICJ0Oi9tc3lz LzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMNCiMgMSAi dDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9m dW5jcy5oIiAxIDMNCiMgNjggInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMv c3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMw0KIyAxICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNs dWRlL2crKy12My9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzDQojIDM5ICJ0Oi9tc3lzLzEuMC9t aW5ndy9pbmNsdWRlL2crKy12My9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMw0KIyA2OSAidDovbXN5 cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5o IiAyIDMNCg0KDQoNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0 SXRlcmF0b3I+DQogIGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0 b3I+OjpkaWZmZXJlbmNlX3R5cGUNCiAgX19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0 LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9yX3RhZykNCiAgew0KDQogICAN Cg0KICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVu Y2VfdHlwZSBfX24gPSAwOw0KICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgew0KICAgICAg KytfX2ZpcnN0OyArK19fbjsNCiAgICB9DQogICAgcmV0dXJuIF9fbjsNCiAgfQ0KDQp0ZW1wbGF0 ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+DQogIGlubGluZSB0eXBlbmFtZSBpdGVy YXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlDQogIF9f ZGlzdGFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy YXRvciBfX2xhc3QsDQogICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpDQog IHsNCg0KICAgDQogICAgcmV0dXJuIF9fbGFzdCAtIF9fZmlyc3Q7DQogIH0NCiMgMTExICJ0Oi9t c3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNz LmgiIDMNCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPg0KICBpbmxpbmUgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlDQogIGRp c3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkNCiAg ew0KDQogICAgcmV0dXJuIF9fZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2Nh dGVnb3J5KF9fZmlyc3QpKTsNCiAgfQ0KDQp0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0 eXBlbmFtZSBfRGlzdGFuY2U+DQogIGlubGluZSB2b2lkDQogIF9fYWR2YW5jZShfSW5wdXRJdGVy JiBfX2ksIF9EaXN0YW5jZSBfX24sIGlucHV0X2l0ZXJhdG9yX3RhZykNCiAgew0KDQogICANCiAg ICB3aGlsZSAoX19uLS0pICsrX19pOw0KICB9DQoNCnRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVj dGlvbmFsSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZT4NCiAgaW5saW5lIHZvaWQNCiAgX19h ZHZhbmNlKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwNCiAgICAg ICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQ0KICB7DQoNCiAgIA0KDQogICAgaWYg KF9fbiA+IDApDQogICAgICB3aGlsZSAoX19uLS0pICsrX19pOw0KICAgIGVsc2UNCiAgICAgIHdo aWxlIChfX24rKykgLS1fX2k7DQogIH0NCg0KdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz c0l0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2U+DQogIGlubGluZSB2b2lkDQogIF9fYWR2YW5j ZShfUmFuZG9tQWNjZXNzSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwNCiAgICAgICAgICAg IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQ0KICB7DQoNCiAgIA0KICAgIF9faSArPSBfX247 DQogIH0NCiMgMTY0ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9p dGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDMNCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9y LCB0eXBlbmFtZSBfRGlzdGFuY2U+DQogIGlubGluZSB2b2lkDQogIGFkdmFuY2UoX0lucHV0SXRl cmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbikNCiAgew0KDQogICAgX19hZHZhbmNlKF9faSwgX19u LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9faSkpOw0KICB9DQoNCn0NCiMgNzUgInQ6L21zeXMvMS4w L21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMw0KIyAxICJ0Oi9t c3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvci5oIiAxIDMNCiMg NjggInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgi IDMNCm5hbWVzcGFjZSBzdGQNCnsNCiMgODkgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysr LXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9y Pg0KICAgIGNsYXNzIHJldmVyc2VfaXRlcmF0b3INCiAgICA6IHB1YmxpYyBpdGVyYXRvcjx0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnksDQogICAg ICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZh bHVlX3R5cGUsDQogICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz PF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSwNCiAgICAgICAgICAgICAgICAgICAgICB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciwNCiAgICAgICAgICAgICAg ICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlPg0K ICAgIHsNCiAgICBwcm90ZWN0ZWQ6DQogICAgICBfSXRlcmF0b3IgY3VycmVudDsNCg0KICAgIHB1 YmxpYzoNCiAgICAgIHR5cGVkZWYgX0l0ZXJhdG9yIGl0ZXJhdG9yX3R5cGU7DQogICAgICB0eXBl ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRpZmZlcmVuY2VfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZSByZWZlcmVuY2U7DQogICAgICB0eXBlZGVmIHR5 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyIHBvaW50ZXI7DQoNCiAg ICBwdWJsaWM6DQoNCg0KDQogICAgICByZXZlcnNlX2l0ZXJhdG9yKCkgeyB9DQoNCg0KDQoNCiAg ICAgIGV4cGxpY2l0DQogICAgICByZXZlcnNlX2l0ZXJhdG9yKGl0ZXJhdG9yX3R5cGUgX194KSA6 IGN1cnJlbnQoX194KSB7IH0NCg0KDQoNCg0KICAgICAgcmV2ZXJzZV9pdGVyYXRvcihjb25zdCBy ZXZlcnNlX2l0ZXJhdG9yJiBfX3gpDQogICAgICA6IGN1cnJlbnQoX194LmN1cnJlbnQpIHsgfQ0K DQoNCg0KDQoNCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyPg0KICAgICAgICByZXZlcnNl X2l0ZXJhdG9yKGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXI+JiBfX3gpDQogICAgICAgIDog Y3VycmVudChfX3guYmFzZSgpKSB7IH0NCg0KDQoNCg0KICAgICAgaXRlcmF0b3JfdHlwZQ0KICAg ICAgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnQ7IH0NCg0KDQoNCg0KDQoNCiAgICAgIHJl ZmVyZW5jZQ0KICAgICAgb3BlcmF0b3IqKCkgY29uc3QNCiAgICAgIHsNCiAgICAgICAgX0l0ZXJh dG9yIF9fdG1wID0gY3VycmVudDsNCiAgICAgICAgcmV0dXJuICotLV9fdG1wOw0KICAgICAgfQ0K DQoNCg0KDQoNCg0KICAgICAgcG9pbnRlcg0KICAgICAgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0 dXJuICYob3BlcmF0b3IqKCkpOyB9DQoNCg0KDQoNCg0KDQogICAgICByZXZlcnNlX2l0ZXJhdG9y Jg0KICAgICAgb3BlcmF0b3IrKygpDQogICAgICB7DQogICAgICAgIC0tY3VycmVudDsNCiAgICAg ICAgcmV0dXJuICp0aGlzOw0KICAgICAgfQ0KDQoNCg0KDQoNCg0KICAgICAgcmV2ZXJzZV9pdGVy YXRvcg0KICAgICAgb3BlcmF0b3IrKyhpbnQpDQogICAgICB7DQogICAgICAgIHJldmVyc2VfaXRl cmF0b3IgX190bXAgPSAqdGhpczsNCiAgICAgICAgLS1jdXJyZW50Ow0KICAgICAgICByZXR1cm4g X190bXA7DQogICAgICB9DQoNCg0KDQoNCg0KDQogICAgICByZXZlcnNlX2l0ZXJhdG9yJg0KICAg ICAgb3BlcmF0b3ItLSgpDQogICAgICB7DQogICAgICAgICsrY3VycmVudDsNCiAgICAgICAgcmV0 dXJuICp0aGlzOw0KICAgICAgfQ0KDQoNCg0KDQoNCg0KICAgICAgcmV2ZXJzZV9pdGVyYXRvciBv cGVyYXRvci0tKGludCkNCiAgICAgIHsNCiAgICAgICAgcmV2ZXJzZV9pdGVyYXRvciBfX3RtcCA9 ICp0aGlzOw0KICAgICAgICArK2N1cnJlbnQ7DQogICAgICAgIHJldHVybiBfX3RtcDsNCiAgICAg IH0NCg0KDQoNCg0KDQoNCiAgICAgIHJldmVyc2VfaXRlcmF0b3INCiAgICAgIG9wZXJhdG9yKyhk aWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdA0KICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRv cihjdXJyZW50IC0gX19uKTsgfQ0KDQoNCg0KDQoNCg0KICAgICAgcmV2ZXJzZV9pdGVyYXRvciYN CiAgICAgIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9fbikNCiAgICAgIHsNCiAgICAgICAg Y3VycmVudCAtPSBfX247DQogICAgICAgIHJldHVybiAqdGhpczsNCiAgICAgIH0NCg0KDQoNCg0K DQoNCiAgICAgIHJldmVyc2VfaXRlcmF0b3INCiAgICAgIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5 cGUgX19uKSBjb25zdA0KICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihjdXJyZW50ICsg X19uKTsgfQ0KDQoNCg0KDQoNCg0KICAgICAgcmV2ZXJzZV9pdGVyYXRvciYNCiAgICAgIG9wZXJh dG9yLT0oZGlmZmVyZW5jZV90eXBlIF9fbikNCiAgICAgIHsNCiAgICAgICAgY3VycmVudCArPSBf X247DQogICAgICAgIHJldHVybiAqdGhpczsNCiAgICAgIH0NCg0KDQoNCg0KDQoNCiAgICAgIHJl ZmVyZW5jZQ0KICAgICAgb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7IHJl dHVybiAqKCp0aGlzICsgX19uKTsgfQ0KICAgIH07DQojIDI2OSAidDovbXN5cy8xLjAvbWluZ3cv aW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSXRlcmF0b3I+DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRvcj09KGNvbnN0IHJldmVy c2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LA0KICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJz ZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpDQogICAgeyByZXR1cm4gX194LmJhc2UoKSA9PSBf X3kuYmFzZSgpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPg0KICAgIGlubGlu ZSBib29sDQogICAgb3BlcmF0b3I8KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYg X194LA0KICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9f eSkNCiAgICB7IHJldHVybiBfX3kuYmFzZSgpIDwgX194LmJhc2UoKTsgfQ0KDQogIHRlbXBsYXRl PHR5cGVuYW1lIF9JdGVyYXRvcj4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJhdG9yIT0oY29u c3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsDQogICAgICAgICAgICAgICBjb25z dCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkNCiAgICB7IHJldHVybiAhKF9feCA9 PSBfX3kpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPg0KICAgIGlubGluZSBi b29sDQogICAgb3BlcmF0b3I+KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194 LA0KICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkN CiAgICB7IHJldHVybiBfX3kgPCBfX3g7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0 b3I+DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRvcjw9KGNvbnN0IHJldmVyc2VfaXRlcmF0 b3I8X0l0ZXJhdG9yPiYgX194LA0KICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0 b3I8X0l0ZXJhdG9yPiYgX195KQ0KICAgIHsgcmV0dXJuICEoX195IDwgX194KTsgfQ0KDQogIHRl bXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJhdG9y Pj0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsDQogICAgICAgICAgICAg ICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkNCiAgICB7IHJldHVybiAh KF9feCA8IF9feSk7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+DQogICAgaW5s aW5lIHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBl DQogICAgb3BlcmF0b3ItKGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LA0K ICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkNCiAg ICB7IHJldHVybiBfX3kuYmFzZSgpIC0gX194LmJhc2UoKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9JdGVyYXRvcj4NCiAgICBpbmxpbmUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+DQog ICAgb3BlcmF0b3IrKHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVy ZW5jZV90eXBlIF9fbiwNCiAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRl cmF0b3I+JiBfX3gpDQogICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+KF9f eC5iYXNlKCkgLSBfX24pOyB9DQojIDMyNyAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKyst djMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVy Pg0KICAgIGNsYXNzIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yDQogICAgOiBwdWJsaWMgaXRlcmF0b3I8 b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4NCiAgICB7DQogICAg cHJvdGVjdGVkOg0KICAgICAgX0NvbnRhaW5lciogY29udGFpbmVyOw0KDQogICAgcHVibGljOg0K DQogICAgICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVyX3R5cGU7DQoNCg0KICAgICAgZXhw bGljaXQNCiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkgOiBjb250 YWluZXIoJl9feCkgeyB9DQojIDM1MyAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMv Yml0cy9zdGxfaXRlcmF0b3IuaCIgMw0KICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3ImDQogICAg ICBvcGVyYXRvcj0odHlwZW5hbWUgX0NvbnRhaW5lcjo6Y29uc3RfcmVmZXJlbmNlIF9fdmFsdWUp DQogICAgICB7DQogICAgICAgIGNvbnRhaW5lci0+cHVzaF9iYWNrKF9fdmFsdWUpOw0KICAgICAg ICByZXR1cm4gKnRoaXM7DQogICAgICB9DQoNCg0KICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3Im DQogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQ0KDQoNCiAgICAgIGJhY2tfaW5z ZXJ0X2l0ZXJhdG9yJg0KICAgICAgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9DQoNCg0K ICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3INCiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVy biAqdGhpczsgfQ0KICAgIH07DQojIDM4NCAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKyst djMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVy Pg0KICAgIGlubGluZSBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPg0KICAgIGJhY2tf aW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KQ0KICAgIHsgcmV0dXJuIGJhY2tfaW5zZXJ0X2l0ZXJh dG9yPF9Db250YWluZXI+KF9feCk7IH0NCiMgMzk3ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRl L2crKy12My9iaXRzL3N0bF9pdGVyYXRvci5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250 YWluZXI+DQogICAgY2xhc3MgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yDQogICAgOiBwdWJsaWMgaXRl cmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4NCiAgICB7 DQogICAgcHJvdGVjdGVkOg0KICAgICAgX0NvbnRhaW5lciogY29udGFpbmVyOw0KDQogICAgcHVi bGljOg0KDQogICAgICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVyX3R5cGU7DQoNCg0KICAg ICAgZXhwbGljaXQgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkgOiBjb250 YWluZXIoJl9feCkgeyB9DQojIDQyMiAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMv Yml0cy9zdGxfaXRlcmF0b3IuaCIgMw0KICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yJg0KICAg ICAgb3BlcmF0b3I9KHR5cGVuYW1lIF9Db250YWluZXI6OmNvbnN0X3JlZmVyZW5jZSBfX3ZhbHVl KQ0KICAgICAgew0KICAgICAgICBjb250YWluZXItPnB1c2hfZnJvbnQoX192YWx1ZSk7DQogICAg ICAgIHJldHVybiAqdGhpczsNCiAgICAgIH0NCg0KDQogICAgICBmcm9udF9pbnNlcnRfaXRlcmF0 b3ImDQogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQ0KDQoNCiAgICAgIGZyb250 X2luc2VydF9pdGVyYXRvciYNCiAgICAgIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQ0K DQoNCiAgICAgIGZyb250X2luc2VydF9pdGVyYXRvcg0KICAgICAgb3BlcmF0b3IrKyhpbnQpIHsg cmV0dXJuICp0aGlzOyB9DQogICAgfTsNCiMgNDUzICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRl L2crKy12My9iaXRzL3N0bF9pdGVyYXRvci5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250 YWluZXI+DQogICAgaW5saW5lIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPg0KICAg IGZyb250X2luc2VydGVyKF9Db250YWluZXImIF9feCkNCiAgICB7IHJldHVybiBmcm9udF9pbnNl cnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsgfQ0KIyA0NzAgInQ6L21zeXMvMS4wL21pbmd3 L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NvbnRhaW5lcj4NCiAgICBjbGFzcyBpbnNlcnRfaXRlcmF0b3INCiAgICA6IHB1YmxpYyBp dGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPg0KICAg IHsNCiAgICBwcm90ZWN0ZWQ6DQogICAgICBfQ29udGFpbmVyKiBjb250YWluZXI7DQogICAgICB0 eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBpdGVyOw0KDQogICAgcHVibGljOg0KDQogICAg ICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVyX3R5cGU7DQoNCg0KDQoNCg0KICAgICAgaW5z ZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCwgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0 b3IgX19pKQ0KICAgICAgOiBjb250YWluZXIoJl9feCksIGl0ZXIoX19pKSB7fQ0KIyA1MTIgInQ6 L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMNCiAg ICAgIGluc2VydF9pdGVyYXRvciYNCiAgICAgIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29u dGFpbmVyOjpjb25zdF9yZWZlcmVuY2UgX192YWx1ZSkNCiAgICAgIHsNCiAgICAgICAgaXRlciA9 IGNvbnRhaW5lci0+aW5zZXJ0KGl0ZXIsIF9fdmFsdWUpOw0KICAgICAgICArK2l0ZXI7DQogICAg ICAgIHJldHVybiAqdGhpczsNCiAgICAgIH0NCg0KDQogICAgICBpbnNlcnRfaXRlcmF0b3ImDQog ICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQ0KDQoNCiAgICAgIGluc2VydF9pdGVy YXRvciYNCiAgICAgIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQ0KDQoNCiAgICAgIGlu c2VydF9pdGVyYXRvciYNCiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQ0K ICAgIH07DQojIDU0NCAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf aXRlcmF0b3IuaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyLCB0eXBlbmFtZSBf SXRlcmF0b3I+DQogICAgaW5saW5lIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPg0KICAgIGlu c2VydGVyKF9Db250YWluZXImIF9feCwgX0l0ZXJhdG9yIF9faSkNCiAgICB7DQogICAgICByZXR1 cm4gaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IoX19pKSk7 DQogICAgfQ0KfQ0KDQpuYW1lc3BhY2UgX19nbnVfY3h4DQp7DQoNCg0KDQoNCg0KDQoNCiAgdXNp bmcgc3RkOjppdGVyYXRvcl90cmFpdHM7DQogIHVzaW5nIHN0ZDo6aXRlcmF0b3I7DQogIHRlbXBs YXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4NCiAgICBjbGFzcyBf X25vcm1hbF9pdGVyYXRvcg0KICAgICAgOiBwdWJsaWMgaXRlcmF0b3I8dHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5LA0KICAgICAgICAgICAgICAg ICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUs DQogICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJh dG9yPjo6ZGlmZmVyZW5jZV90eXBlLA0KICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIsDQogICAgICAgICAgICAgICAgICAg ICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlPg0KICAg IHsNCiAgICBwcm90ZWN0ZWQ6DQogICAgICBfSXRlcmF0b3IgX01fY3VycmVudDsNCg0KICAgIHB1 YmxpYzoNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46 OmRpZmZlcmVuY2VfdHlwZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOw0KICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsN CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50 ZXIgcG9pbnRlcjsNCg0KICAgICAgX19ub3JtYWxfaXRlcmF0b3IoKSA6IF9NX2N1cnJlbnQoX0l0 ZXJhdG9yKCkpIHsgfQ0KDQogICAgICBleHBsaWNpdA0KICAgICAgX19ub3JtYWxfaXRlcmF0b3Io Y29uc3QgX0l0ZXJhdG9yJiBfX2kpIDogX01fY3VycmVudChfX2kpIHsgfQ0KDQoNCiAgICAgIHRl bXBsYXRlPHR5cGVuYW1lIF9JdGVyPg0KICAgICAgaW5saW5lIF9fbm9ybWFsX2l0ZXJhdG9yKGNv bnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyLCBfQ29udGFpbmVyPiYgX19pKQ0KICAgICAgICA6 IF9NX2N1cnJlbnQoX19pLmJhc2UoKSkgeyB9DQoNCg0KICAgICAgcmVmZXJlbmNlDQogICAgICBv cGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqX01fY3VycmVudDsgfQ0KDQogICAgICBwb2ludGVy DQogICAgICBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gX01fY3VycmVudDsgfQ0KDQogICAg ICBfX25vcm1hbF9pdGVyYXRvciYNCiAgICAgIG9wZXJhdG9yKysoKSB7ICsrX01fY3VycmVudDsg cmV0dXJuICp0aGlzOyB9DQoNCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yDQogICAgICBvcGVyYXRv cisrKGludCkgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVudCsrKTsgfQ0KDQoN CiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJg0KICAgICAgb3BlcmF0b3ItLSgpIHsgLS1fTV9jdXJy ZW50OyByZXR1cm4gKnRoaXM7IH0NCg0KICAgICAgX19ub3JtYWxfaXRlcmF0b3INCiAgICAgIG9w ZXJhdG9yLS0oaW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50LS0pOyB9 DQoNCg0KICAgICAgcmVmZXJlbmNlDQogICAgICBvcGVyYXRvcltdKGNvbnN0IGRpZmZlcmVuY2Vf dHlwZSYgX19uKSBjb25zdA0KICAgICAgeyByZXR1cm4gX01fY3VycmVudFtfX25dOyB9DQoNCiAg ICAgIF9fbm9ybWFsX2l0ZXJhdG9yJg0KICAgICAgb3BlcmF0b3IrPShjb25zdCBkaWZmZXJlbmNl X3R5cGUmIF9fbikNCiAgICAgIHsgX01fY3VycmVudCArPSBfX247IHJldHVybiAqdGhpczsgfQ0K DQogICAgICBfX25vcm1hbF9pdGVyYXRvcg0KICAgICAgb3BlcmF0b3IrKGNvbnN0IGRpZmZlcmVu Y2VfdHlwZSYgX19uKSBjb25zdA0KICAgICAgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01f Y3VycmVudCArIF9fbik7IH0NCg0KICAgICAgX19ub3JtYWxfaXRlcmF0b3ImDQogICAgICBvcGVy YXRvci09KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKQ0KICAgICAgeyBfTV9jdXJyZW50IC09 IF9fbjsgcmV0dXJuICp0aGlzOyB9DQoNCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yDQogICAgICBv cGVyYXRvci0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pIGNvbnN0DQogICAgICB7IHJldHVy biBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50IC0gX19uKTsgfQ0KDQogICAgICBkaWZmZXJl bmNlX3R5cGUNCiAgICAgIG9wZXJhdG9yLShjb25zdCBfX25vcm1hbF9pdGVyYXRvciYgX19pKSBj b25zdA0KICAgICAgeyByZXR1cm4gX01fY3VycmVudCAtIF9faS5fTV9jdXJyZW50OyB9DQoNCiAg ICAgIGNvbnN0IF9JdGVyYXRvciYNCiAgICAgIGJhc2UoKSBjb25zdCB7IHJldHVybiBfTV9jdXJy ZW50OyB9DQogICAgfTsNCiMgNjQ5ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9i aXRzL3N0bF9pdGVyYXRvci5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5 cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+DQogIGlubGluZSBib29sDQog IG9wZXJhdG9yPT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5l cj4mIF9fbGhzLA0KICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv clIsIF9Db250YWluZXI+JiBfX3JocykNCiAgeyByZXR1cm4gX19saHMuYmFzZSgpID09IF9fcmhz LmJhc2UoKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0Nv bnRhaW5lcj4NCiAgaW5saW5lIGJvb2wNCiAgb3BlcmF0b3I9PShjb25zdCBfX25vcm1hbF9pdGVy YXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xocywNCiAgICAgICAgICAgICBjb25zdCBf X25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykNCiAgeyByZXR1 cm4gX19saHMuYmFzZSgpID09IF9fcmhzLmJhc2UoKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1l IF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+DQog IGlubGluZSBib29sDQogIG9wZXJhdG9yIT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh dG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLA0KICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0 ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykNCiAgeyByZXR1cm4gX19saHMu YmFzZSgpICE9IF9fcmhzLmJhc2UoKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRv ciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4NCiAgaW5saW5lIGJvb2wNCiAgb3BlcmF0b3IhPShjb25z dCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xocywNCiAgICAg ICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBf X3JocykNCiAgeyByZXR1cm4gX19saHMuYmFzZSgpICE9IF9fcmhzLmJhc2UoKTsgfQ0KDQoNCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5h bWUgX0NvbnRhaW5lcj4NCiAgaW5saW5lIGJvb2wNCiAgb3BlcmF0b3I8KGNvbnN0IF9fbm9ybWFs X2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywNCiAgICAgICAgICAgIGNv bnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykNCiAg eyByZXR1cm4gX19saHMuYmFzZSgpIDwgX19yaHMuYmFzZSgpOyB9DQoNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPg0KICBpbmxpbmUgYm9vbA0KICBv cGVyYXRvcjwoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYg X19saHMsDQogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBf Q29udGFpbmVyPiYgX19yaHMpDQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8IF9fcmhzLmJhc2Uo KTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRv clIsIHR5cGVuYW1lIF9Db250YWluZXI+DQogIGlubGluZSBib29sDQogIG9wZXJhdG9yPihjb25z dCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsDQogICAg ICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYg X19yaHMpDQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+IF9fcmhzLmJhc2UoKTsgfQ0KDQogIHRl bXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4NCiAgaW5saW5l IGJvb2wNCiAgb3BlcmF0b3I+KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0Nv bnRhaW5lcj4mIF9fbGhzLA0KICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0 ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpDQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+IF9f cmhzLmJhc2UoKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1l IF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+DQogIGlubGluZSBib29sDQogIG9wZXJh dG9yPD0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9f bGhzLA0KICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9D b250YWluZXI+JiBfX3JocykNCiAgeyByZXR1cm4gX19saHMuYmFzZSgpIDw9IF9fcmhzLmJhc2Uo KTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5l cj4NCiAgaW5saW5lIGJvb2wNCiAgb3BlcmF0b3I8PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxf SXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xocywNCiAgICAgICAgICAgICBjb25zdCBfX25vcm1h bF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykNCiAgeyByZXR1cm4gX19s aHMuYmFzZSgpIDw9IF9fcmhzLmJhc2UoKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVy YXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+DQogIGlubGlu ZSBib29sDQogIG9wZXJhdG9yPj0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwg X0NvbnRhaW5lcj4mIF9fbGhzLA0KICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9y PF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykNCiAgeyByZXR1cm4gX19saHMuYmFzZSgp ID49IF9fcmhzLmJhc2UoKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlw ZW5hbWUgX0NvbnRhaW5lcj4NCiAgaW5saW5lIGJvb2wNCiAgb3BlcmF0b3I+PShjb25zdCBfX25v cm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xocywNCiAgICAgICAgICAg ICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykN CiAgeyByZXR1cm4gX19saHMuYmFzZSgpID49IF9fcmhzLmJhc2UoKTsgfQ0KDQogIHRlbXBsYXRl PHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4NCiAgaW5saW5lIF9fbm9y bWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4NCiAgb3BlcmF0b3IrKHR5cGVuYW1l IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj46OmRpZmZlcmVuY2VfdHlw ZSBfX24sDQogICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9D b250YWluZXI+JiBfX2kpDQogIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwg X0NvbnRhaW5lcj4oX19pLmJhc2UoKSArIF9fbik7IH0NCn0NCiMgNzYgInQ6L21zeXMvMS4wL21p bmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMw0KDQoNCm5hbWVzcGFj ZSBzdGQNCnsNCiMgOTEgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs X2FsZ29iYXNlLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5h bWUgX0ZvcndhcmRJdGVyMj4NCiAgICBpbmxpbmUgdm9pZA0KICAgIGl0ZXJfc3dhcChfRm9yd2Fy ZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVyMiBfX2IpDQogICAgew0KICAgICAgdHlwZWRlZiB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyMT46OnZhbHVlX3R5cGUgX1ZhbHVlVHlw ZTE7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIy Pjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlMjsNCg0KDQogICAgIA0KICAgICANCiAgICAgDQogICAg IA0KDQogICAgICBfVmFsdWVUeXBlMSBfX3RtcCA9ICpfX2E7DQogICAgICAqX19hID0gKl9fYjsN CiAgICAgICpfX2IgPSBfX3RtcDsNCiAgICB9DQojIDExOCAidDovbXN5cy8xLjAvbWluZ3cvaW5j bHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf VHA+DQogICAgaW5saW5lIHZvaWQNCiAgICBzd2FwKF9UcCYgX19hLCBfVHAmIF9fYikNCiAgICB7 DQoNCiAgICAgDQoNCiAgICAgIF9UcCBfX3RtcCA9IF9fYTsNCiAgICAgIF9fYSA9IF9fYjsNCiAg ICAgIF9fYiA9IF9fdG1wOw0KICAgIH0NCiMgMTQ2ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRl L2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4N CiAgICBpbmxpbmUgY29uc3QgX1RwJg0KICAgIG1pbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1Rw JiBfX2IpDQogICAgew0KDQogICAgIA0KDQogICAgICBpZiAoX19iIDwgX19hKSByZXR1cm4gX19i OyByZXR1cm4gX19hOw0KICAgIH0NCiMgMTY2ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2cr Ky12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAg ICBpbmxpbmUgY29uc3QgX1RwJg0KICAgIG1heChjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBf X2IpDQogICAgew0KDQogICAgIA0KDQogICAgICBpZiAoX19hIDwgX19iKSByZXR1cm4gX19iOyBy ZXR1cm4gX19hOw0KICAgIH0NCiMgMTg2ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12 My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5h bWUgX0NvbXBhcmU+DQogICAgaW5saW5lIGNvbnN0IF9UcCYNCiAgICBtaW4oY29uc3QgX1RwJiBf X2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApDQogICAgew0KDQogICAgICBpZiAo X19jb21wKF9fYiwgX19hKSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsNCiAgICB9DQojIDIwNCAi dDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMw0K ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPg0KICAgIGlubGluZSBj b25zdCBfVHAmDQogICAgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgX0NvbXBh cmUgX19jb21wKQ0KICAgIHsNCg0KICAgICAgaWYgKF9fY29tcChfX2EsIF9fYikpIHJldHVybiBf X2I7IHJldHVybiBfX2E7DQogICAgfQ0KIyAyMjEgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0 SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+DQogICAgaW5saW5lIF9PdXRwdXRJdGVyDQogICAg X19jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAg IF9PdXRwdXRJdGVyIF9fcmVzdWx0LA0KICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpDQog ICAgew0KICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX3Jlc3VsdCwgKytfX2Zp cnN0KQ0KICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsNCiAgICAgIHJldHVybiBfX3Jlc3Vs dDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVu YW1lIF9PdXRwdXRJdGVyPg0KICAgIGlubGluZSBfT3V0cHV0SXRlcg0KICAgIF9fY29weShfUmFu ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsDQogICAgICAg ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LA0KICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJh dG9yX3RhZykNCiAgICB7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf UmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZQ0KICAgICAgICAgIF9EaXN0YW5jZTsN CiAgICAgIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0t X19uKSB7DQogICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0Ow0KICAgICAgICArK19fZmlyc3Q7 DQogICAgICAgICsrX19yZXN1bHQ7DQogICAgICB9DQogICAgICByZXR1cm4gX19yZXN1bHQ7DQog ICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgICBpbmxpbmUgX1RwKg0KICAgIF9f Y29weV90cml2aWFsKGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCog X19yZXN1bHQpDQogICAgew0KICAgICAgbWVtbW92ZShfX3Jlc3VsdCwgX19maXJzdCwgc2l6ZW9m KF9UcCkgKiAoX19sYXN0IC0gX19maXJzdCkpOw0KICAgICAgcmV0dXJuIF9fcmVzdWx0ICsgKF9f bGFzdCAtIF9fZmlyc3QpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVy LCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4NCiAgICBpbmxpbmUgX091dHB1dEl0ZXINCiAgICBfX2Nv cHlfYXV4MihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAg ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpDQogICAgeyByZXR1cm4g X19jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19m aXJzdCkpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091 dHB1dEl0ZXI+DQogICAgaW5saW5lIF9PdXRwdXRJdGVyDQogICAgX19jb3B5X2F1eDIoX0lucHV0 SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICBfT3V0cHV0 SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpDQogICAgeyByZXR1cm4gX19jb3B5KF9fZmlyc3Qs IF9fbGFzdCwgX19yZXN1bHQsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOyB9DQoNCiAg dGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgIGlubGluZSBfVHAqDQogICAgX19jb3B5X2F1eDIo X1RwKiBfX2ZpcnN0LCBfVHAqIF9fbGFzdCwNCiAgICAgICAgICAgICAgICBfVHAqIF9fcmVzdWx0 LCBfX3RydWVfdHlwZSkNCiAgICB7IHJldHVybiBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xh c3QsIF9fcmVzdWx0KTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgICBpbmxpbmUg X1RwKg0KICAgIF9fY29weV9hdXgyKGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xh c3QsDQogICAgICAgICAgICAgICAgX1RwKiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpDQogICAgeyBy ZXR1cm4gX19jb3B5X3RyaXZpYWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7IH0NCg0KICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4NCiAgICBp bmxpbmUgX091dHB1dEl0ZXINCiAgICBfX2NvcHlfbmkyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu cHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190 cnVlX3R5cGUpDQogICAgew0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X0lucHV0SXRlcj46OnZhbHVlX3R5cGUNCiAgICAgICAgICBfVmFsdWVUeXBlOw0KICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+OjpoYXNfdHJpdmlhbF9hc3Np Z25tZW50X29wZXJhdG9yDQogICAgICAgICAgX1RyaXZpYWw7DQogICAgICByZXR1cm4gX091dHB1 dEl0ZXIoX19jb3B5X2F1eDIoX19maXJzdCwgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fcmVzdWx0LmJhc2UoKSwNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfVHJpdmlhbCgpKSk7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1l IF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPg0KICAgIGlubGluZSBfT3V0cHV0SXRl cg0KICAgIF9fY29weV9uaTIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwN CiAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpDQogICAg ew0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZh bHVlX3R5cGUNCiAgICAgICAgICBfVmFsdWVUeXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf X3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+OjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9y DQogICAgICAgICAgX1RyaXZpYWw7DQogICAgICByZXR1cm4gX19jb3B5X2F1eDIoX19maXJzdCwg X19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0LA0KICAgICAgICAgICAg ICAgICAgICAgICAgIF9Ucml2aWFsKCkpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf SW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4NCiAgICBpbmxpbmUgX091dHB1dEl0ZXIN CiAgICBfX2NvcHlfbmkxKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQog ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpDQogICAgew0K ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9PdXRwdXRJdGVyPjo6 X05vcm1hbCBfX05vcm1hbDsNCiAgICAgIHJldHVybiBfX2NvcHlfbmkyKF9fZmlyc3QuYmFzZSgp LCBfX2xhc3QuYmFzZSgpLCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7DQogICAgfQ0KDQogIHRlbXBs YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPg0KICAgIGlubGlu ZSBfT3V0cHV0SXRlcg0KICAgIF9fY29weV9uaTEoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ dGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNl X3R5cGUpDQogICAgew0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9y PF9PdXRwdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsNCiAgICAgIHJldHVybiBfX2NvcHlfbmky KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fTm9ybWFsKCkpOw0KICAgIH0NCiMgMzM5ICJ0 Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPg0KICAg IGlubGluZSBfT3V0cHV0SXRlcg0KICAgIGNvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ dGVyIF9fbGFzdCwgX091dHB1dEl0ZXIgX19yZXN1bHQpDQogICAgew0KDQogICAgIA0KICAgICAN Cg0KDQogICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9JbnB1dEl0 ZXI+OjpfTm9ybWFsIF9fTm9ybWFsOw0KICAgICAgIHJldHVybiBfX2NvcHlfbmkxKF9fZmlyc3Qs IF9fbGFzdCwgX19yZXN1bHQsIF9fTm9ybWFsKCkpOw0KICAgIH0NCg0KDQoNCg0KICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0 ZXIyPg0KICAgIGlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIyDQogICAgX19jb3B5X2JhY2t3YXJk KF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3Qs DQogICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQsDQogICAg ICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQ0KICAgIHsNCiAgICAg IHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkNCiAgICAgICAgKi0tX19yZXN1bHQgPSAqLS1fX2xh c3Q7DQogICAgICByZXR1cm4gX19yZXN1bHQ7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1l IF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+DQogICAgaW5s aW5lIF9CaWRpcmVjdGlvbmFsSXRlcg0KICAgIF9fY29weV9iYWNrd2FyZChfUmFuZG9tQWNjZXNz SXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAg ICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAgICAgcmFu ZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpDQogICAgew0KICAgICAgdHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbjsNCiAgICAgIGZv ciAoX19uID0gX19sYXN0IC0gX19maXJzdDsgX19uID4gMDsgLS1fX24pDQogICAgICAgICotLV9f cmVzdWx0ID0gKi0tX19sYXN0Ow0KICAgICAgcmV0dXJuIF9fcmVzdWx0Ow0KICAgIH0NCg0KDQoN Cg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFt ZSBfQmlkaXJlY3Rpb25hbEl0ZXIyLA0KICAgICAgICAgICB0eXBlbmFtZSBfQm9vbFR5cGU+DQog ICAgc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaA0KICAgIHsNCiAgICAgIHN0YXRpYyBf QmlkaXJlY3Rpb25hbEl0ZXIyDQogICAgICBjb3B5KF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJz dCwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsDQogICAgICAgICAgIF9CaWRpcmVjdGlvbmFs SXRlcjIgX19yZXN1bHQpDQogICAgICB7DQogICAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmQo X19maXJzdCwgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0 LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19m aXJzdCkpOw0KICAgICAgfQ0KICAgIH07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAg IHN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+ DQogICAgew0KICAgICAgc3RhdGljIF9UcCoNCiAgICAgIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0 LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkNCiAgICAgIHsNCiAgICAgICAgY29u c3QgcHRyZGlmZl90IF9OdW0gPSBfX2xhc3QgLSBfX2ZpcnN0Ow0KICAgICAgICBtZW1tb3ZlKF9f cmVzdWx0IC0gX051bSwgX19maXJzdCwgc2l6ZW9mKF9UcCkgKiBfTnVtKTsNCiAgICAgICAgcmV0 dXJuIF9fcmVzdWx0IC0gX051bTsNCiAgICAgIH0NCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9UcD4NCiAgICBzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPGNvbnN0IF9UcCos IF9UcCosIF9fdHJ1ZV90eXBlPg0KICAgIHsNCiAgICAgIHN0YXRpYyBfVHAqDQogICAgICBjb3B5 KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpDQog ICAgICB7DQogICAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1Rw KiwgX190cnVlX3R5cGU+DQogICAgICAgICAgOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1 bHQpOw0KICAgICAgfQ0KICAgIH07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JJMSwgdHlwZW5h bWUgX0JJMj4NCiAgICBpbmxpbmUgX0JJMg0KICAgIF9fY29weV9iYWNrd2FyZF9hdXgoX0JJMSBf X2ZpcnN0LCBfQkkxIF9fbGFzdCwgX0JJMiBfX3Jlc3VsdCkNCiAgICB7DQogICAgICB0eXBlZGVm IHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CSTI+Ojp2 YWx1ZV90eXBlPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6aGFzX3RyaXZpYWxfYXNz aWdubWVudF9vcGVyYXRvciBfVHJpdmlhbDsNCiAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRf ZGlzcGF0Y2g8X0JJMSwgX0JJMiwgX1RyaXZpYWw+DQogICAgICAgICAgICAgICAgICA6OmNvcHko X19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7DQogICAgfQ0KDQogIHRlbXBsYXRlIDx0eXBlbmFt ZSBfQkkxLCB0eXBlbmFtZSBfQkkyPg0KICAgIGlubGluZSBfQkkyDQogICAgX19jb3B5X2JhY2t3 YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBf X3RydWVfdHlwZSkNCiAgICB7IHJldHVybiBfQkkyKF9fY29weV9iYWNrd2FyZF9hdXgoX19maXJz dCwgX19sYXN0LCBfX3Jlc3VsdC5iYXNlKCkpKTsgfQ0KDQogIHRlbXBsYXRlIDx0eXBlbmFtZSBf QkkxLCB0eXBlbmFtZSBfQkkyPg0KICAgIGlubGluZSBfQkkyDQogICAgX19jb3B5X2JhY2t3YXJk X291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX2Zh bHNlX3R5cGUpDQogICAgeyByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2F1eChfX2ZpcnN0LCBfX2xh c3QsIF9fcmVzdWx0KTsgfQ0KDQogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBf QkkyPg0KICAgIGlubGluZSBfQkkyDQogICAgX19jb3B5X2JhY2t3YXJkX2lucHV0X25vcm1hbF9p dGVyYXRvcihfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpDQogICAgew0K ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9CSTI+OjpfTm9ybWFs IF9fTm9ybWFsOw0KICAgICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0 ZXJhdG9yKF9fZmlyc3QuYmFzZSgpLCBfX2xhc3QuYmFzZSgpLA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsN CiAgICB9DQoNCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+DQogICAg aW5saW5lIF9CSTINCiAgICBfX2NvcHlfYmFja3dhcmRfaW5wdXRfbm9ybWFsX2l0ZXJhdG9yKF9C STEgX19maXJzdCwgX0JJMSBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpDQogICAgew0KICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9CSTI+OjpfTm9ybWFsIF9fTm9ybWFs Ow0KICAgICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9f Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19Ob3JtYWwoKSk7DQogICAgfQ0KIyA0NzcgInQ6L21zeXMv MS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMNCiAgdGVtcGxh dGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+DQogICAgaW5saW5lIF9CSTINCiAgICBj b3B5X2JhY2t3YXJkKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1bHQpDQog ICAgew0KDQogICAgIA0KICAgICANCiAgICAgDQoNCg0KDQogICAgICB0eXBlZGVmIHR5cGVuYW1l IF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMT46Ol9Ob3JtYWwgX19Ob3JtYWw7DQogICAgICByZXR1 cm4gX19jb3B5X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0LCBfX2xhc3Qs IF9fcmVzdWx0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19Ob3JtYWwoKSk7DQogICAgfQ0KIyA1MDkgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv cndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+DQogICAgdm9pZA0KICAgIGZpbGwoX0ZvcndhcmRJdGVy IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkNCiAgICB7 DQoNCiAgICAgDQoNCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkN CiAgICAgICAgKl9fZmlyc3QgPSBfX3ZhbHVlOw0KICAgIH0NCiMgNTMxICJ0Oi9tc3lzLzEuMC9t aW5ndy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzDQogIHRlbXBsYXRlPHR5 cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPg0KICAgIF9P dXRwdXRJdGVyDQogICAgZmlsbF9uKF9PdXRwdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgY29u c3QgX1RwJiBfX3ZhbHVlKQ0KICAgIHsNCg0KICAgICANCg0KICAgICAgZm9yICggOyBfX24gPiAw OyAtLV9fbiwgKytfX2ZpcnN0KQ0KICAgICAgICAqX19maXJzdCA9IF9fdmFsdWU7DQogICAgICBy ZXR1cm4gX19maXJzdDsNCiAgICB9DQoNCg0KDQogIGlubGluZSB2b2lkDQogIGZpbGwodW5zaWdu ZWQgY2hhciogX19maXJzdCwgdW5zaWduZWQgY2hhciogX19sYXN0LCBjb25zdCB1bnNpZ25lZCBj aGFyJiBfX2MpDQogIHsNCiAgICB1bnNpZ25lZCBjaGFyIF9fdG1wID0gX19jOw0KICAgIG1lbXNl dChfX2ZpcnN0LCBfX3RtcCwgX19sYXN0IC0gX19maXJzdCk7DQogIH0NCg0KICBpbmxpbmUgdm9p ZA0KICBmaWxsKHNpZ25lZCBjaGFyKiBfX2ZpcnN0LCBzaWduZWQgY2hhciogX19sYXN0LCBjb25z dCBzaWduZWQgY2hhciYgX19jKQ0KICB7DQogICAgc2lnbmVkIGNoYXIgX190bXAgPSBfX2M7DQog ICAgbWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fdG1wKSwgX19s YXN0IC0gX19maXJzdCk7DQogIH0NCg0KICBpbmxpbmUgdm9pZA0KICBmaWxsKGNoYXIqIF9fZmly c3QsIGNoYXIqIF9fbGFzdCwgY29uc3QgY2hhciYgX19jKQ0KICB7DQogICAgY2hhciBfX3RtcCA9 IF9fYzsNCiAgICBtZW1zZXQoX19maXJzdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX190 bXApLCBfX2xhc3QgLSBfX2ZpcnN0KTsNCiAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9TaXpl Pg0KICAgIGlubGluZSB1bnNpZ25lZCBjaGFyKg0KICAgIGZpbGxfbih1bnNpZ25lZCBjaGFyKiBf X2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IHVuc2lnbmVkIGNoYXImIF9fYykNCiAgICB7DQogICAg ICBmaWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7DQogICAgICByZXR1cm4gX19maXJz dCArIF9fbjsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpemU+DQogICAgaW5saW5l IHNpZ25lZCBjaGFyKg0KICAgIGZpbGxfbihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0 IHNpZ25lZCBjaGFyJiBfX2MpDQogICAgew0KICAgICAgZmlsbChfX2ZpcnN0LCBfX2ZpcnN0ICsg X19uLCBfX2MpOw0KICAgICAgcmV0dXJuIF9fZmlyc3QgKyBfX247DQogICAgfQ0KDQogIHRlbXBs YXRlPHR5cGVuYW1lIF9TaXplPg0KICAgIGlubGluZSBjaGFyKg0KICAgIGZpbGxfbihjaGFyKiBf X2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IGNoYXImIF9fYykNCiAgICB7DQogICAgICBmaWxsKF9f Zmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7DQogICAgICByZXR1cm4gX19maXJzdCArIF9fbjsN CiAgICB9DQojIDYwNiAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf YWxnb2Jhc2UuaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUg X0lucHV0SXRlcjI+DQogICAgcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+DQogICAgbWlz bWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAg ICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIpDQogICAgew0KDQogICAgIA0KICAgICANCiAgICAg DQoNCiAgICAgDQoNCg0KICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgKl9fZmly c3QxID09ICpfX2ZpcnN0Mikgew0KICAgICAgICArK19fZmlyc3QxOw0KICAgICAgICArK19fZmly c3QyOw0KICAgICAgfQ0KICAgICAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIy PihfX2ZpcnN0MSwgX19maXJzdDIpOw0KICAgIH0NCiMgNjQwICJ0Oi9tc3lzLzEuMC9taW5ndy9p bmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1l IF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0JpbmFyeVByZWRp Y2F0ZT4NCiAgICBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4NCiAgICBtaXNtYXRjaChf SW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICBf SW5wdXRJdGVyMiBfX2ZpcnN0MiwNCiAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmlu YXJ5X3ByZWQpDQogICAgew0KDQogICAgIA0KICAgICANCg0KICAgICAgd2hpbGUgKF9fZmlyc3Qx ICE9IF9fbGFzdDEgJiYgX19iaW5hcnlfcHJlZCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsNCiAg ICAgICAgKytfX2ZpcnN0MTsNCiAgICAgICAgKytfX2ZpcnN0MjsNCiAgICAgIH0NCiAgICAgIHJl dHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmlyc3QyKTsN CiAgICB9DQojIDY2OCAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf YWxnb2Jhc2UuaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUg X0lucHV0SXRlcjI+DQogICAgaW5saW5lIGJvb2wNCiAgICBlcXVhbChfSW5wdXRJdGVyMSBfX2Zp cnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0 MikNCiAgICB7DQoNCiAgICAgDQogICAgIA0KICAgICANCg0KDQoNCiAgICAgIGZvciAoIDsgX19m aXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikNCiAgICAgICAgaWYgKCEo Kl9fZmlyc3QxID09ICpfX2ZpcnN0MikpDQogICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAg cmV0dXJuIHRydWU7DQogICAgfQ0KIyA2OTkgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysr LXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl cjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPg0KICAg IGlubGluZSBib29sDQogICAgZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIx IF9fbGFzdDEsDQogICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsDQogICAgICAgICAgX0Jp bmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQ0KICAgIHsNCg0KICAgICANCiAgICAgDQoNCiAg ICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikN CiAgICAgICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkNCiAgICAg ICAgICByZXR1cm4gZmFsc2U7DQogICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9DQojIDczMiAidDov bXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMw0KICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+DQogICAg Ym9vbA0KICAgIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBf SW5wdXRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0 ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQ0KICAgIHsNCg0KICAgICANCiAgICAg DQogICAgIA0KDQogICAgIA0KDQoNCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAm JiBfX2ZpcnN0MiAhPSBfX2xhc3QyDQogICAgICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJz dDIpIHsNCiAgICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikNCiAgICAgICAgICByZXR1 cm4gdHJ1ZTsNCiAgICAgICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkNCiAgICAgICAgICBy ZXR1cm4gZmFsc2U7DQogICAgICB9DQogICAgICByZXR1cm4gX19maXJzdDEgPT0gX19sYXN0MSAm JiBfX2ZpcnN0MiAhPSBfX2xhc3QyOw0KICAgIH0NCiMgNzY3ICJ0Oi9tc3lzLzEuMC9taW5ndy9p bmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1l IF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0NvbXBhcmU+DQog ICAgYm9vbA0KICAgIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9JbnB1dEl0ZXIxIF9fZmlyc3Qx LCBfSW5wdXRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1 dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkNCiAgICB7DQoNCiAgICAgDQogICAgIA0KDQogICAg ICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0Mg0KICAg ICAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7DQogICAgICAgIGlmIChfX2NvbXAo Kl9fZmlyc3QxLCAqX19maXJzdDIpKQ0KICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICBp ZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkNCiAgICAgICAgICByZXR1cm4gZmFsc2U7 DQogICAgICB9DQogICAgICByZXR1cm4gX19maXJzdDEgPT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAh PSBfX2xhc3QyOw0KICAgIH0NCg0KICBpbmxpbmUgYm9vbA0KICBsZXhpY29ncmFwaGljYWxfY29t cGFyZShjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MSwgY29uc3QgdW5zaWduZWQgY2hhciog X19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciog X19maXJzdDIsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDIpDQogIHsNCiAgICBjb25zdCBz aXplX3QgX19sZW4xID0gX19sYXN0MSAtIF9fZmlyc3QxOw0KICAgIGNvbnN0IHNpemVfdCBfX2xl bjIgPSBfX2xhc3QyIC0gX19maXJzdDI7DQogICAgY29uc3QgaW50IF9fcmVzdWx0ID0gbWVtY21w KF9fZmlyc3QxLCBfX2ZpcnN0MiwgbWluKF9fbGVuMSwgX19sZW4yKSk7DQogICAgcmV0dXJuIF9f cmVzdWx0ICE9IDAgPyBfX3Jlc3VsdCA8IDAgOiBfX2xlbjEgPCBfX2xlbjI7DQogIH0NCg0KICBp bmxpbmUgYm9vbA0KICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCBjaGFyKiBfX2ZpcnN0 MSwgY29uc3QgY2hhciogX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhciogX19maXJzdDIsIGNvbnN0IGNoYXIqIF9fbGFzdDIpDQogIHsNCg0KICAgIHJldHVybiBs ZXhpY29ncmFwaGljYWxfY29tcGFyZSgoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19s YXN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBj aGFyKikgX19maXJzdDIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25z dCBzaWduZWQgY2hhciopIF9fbGFzdDIpOw0KDQoNCg0KDQoNCg0KICB9DQoNCn0NCiMgNTUgInQ6 L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL21lbW9yeSIgMiAzDQojIDEgInQ6L21zeXMv MS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDEgMw0KIyA4NCAidDov bXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMw0KIyAxICJ0 Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9jYXNzZXJ0IiAxIDMNCiMgNDcgInQ6L21z eXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2Nhc3NlcnQiIDMNCiMgODUgInQ6L21zeXMvMS4w L21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDIgMw0KIyAxICJ0Oi9tc3lz LzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMw0KIyAzNCAi dDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzDQoj IDEgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbl9kZWZpbmVzLmgi IDEgMw0KIyAzNSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4 Y2VwdC5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KDQogIHZvaWQNCiAgX190aHJvd19iYWRf ZXhjZXB0aW9uKHZvaWQpOw0KDQoNCiAgdm9pZA0KICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsN Cg0KDQogIHZvaWQNCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsNCg0KICB2b2lkDQogIF9fdGhy b3dfYmFkX3R5cGVpZCh2b2lkKTsNCg0KDQogIHZvaWQNCiAgX190aHJvd19sb2dpY19lcnJvcihj b25zdCBjaGFyKiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJvd19kb21haW5fZXJyb3IoY29uc3Qg Y2hhciogX19zKTsNCg0KICB2b2lkDQogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBj aGFyKiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hhciog X19zKTsNCg0KICB2b2lkDQogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7 DQoNCiAgdm9pZA0KICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0K ICB2b2lkDQogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lk DQogIF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQog IF9fdGhyb3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCg0KICB2b2lkDQog IF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsNCn0NCiMgODYgInQ6L21zeXMv MS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDIgMw0KIyAxICJ0Oi9t c3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJlYWRzLmgiIDEgMw0KIyA1 NCAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAz DQpuYW1lc3BhY2Ugc3RkDQp7DQoNCg0KDQoNCiAgc3RydWN0IF9SZWZjb3VudF9CYXNlDQogIHsN Cg0KICAgIHR5cGVkZWYgc2l6ZV90IF9SQ190Ow0KDQoNCiAgICB2b2xhdGlsZSBfUkNfdCBfTV9y ZWZfY291bnQ7DQoNCg0KICAgIF9fZ3RocmVhZF9tdXRleF90IF9NX3JlZl9jb3VudF9sb2NrOw0K DQogICAgX1JlZmNvdW50X0Jhc2UoX1JDX3QgX19uKSA6IF9NX3JlZl9jb3VudChfX24pDQogICAg ew0KDQoNCg0KDQogICAgICBfX2d0aHJlYWRfbXV0ZXhfaW5pdF9mdW5jdGlvbiAoJl9NX3JlZl9j b3VudF9sb2NrKTsNCg0KDQoNCiAgICB9DQoNCiAgICB2b2lkDQogICAgX01faW5jcigpDQogICAg ew0KICAgICAgX19ndGhyZWFkX211dGV4X2xvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsNCiAgICAg ICsrX01fcmVmX2NvdW50Ow0KICAgICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fcmVmX2Nv dW50X2xvY2spOw0KICAgIH0NCg0KICAgIF9SQ190DQogICAgX01fZGVjcigpDQogICAgew0KICAg ICAgX19ndGhyZWFkX211dGV4X2xvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsNCiAgICAgIHZvbGF0 aWxlIF9SQ190IF9fdG1wID0gLS1fTV9yZWZfY291bnQ7DQogICAgICBfX2d0aHJlYWRfbXV0ZXhf dW5sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7DQogICAgICByZXR1cm4gX190bXA7DQogICAgfQ0K ICB9Ow0KIyAxNDQgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3Ro cmVhZHMuaCIgMw0KICBleHRlcm4gX19ndGhyZWFkX211dGV4X3QgX0dMSUJDUFBfbXV0ZXg7DQog IGV4dGVybiBfX2d0aHJlYWRfbXV0ZXhfdCAqX0dMSUJDUFBfbXV0ZXhfYWRkcmVzczsNCiAgZXh0 ZXJuIF9fZ3RocmVhZF9vbmNlX3QgX0dMSUJDUFBfb25jZTsNCiAgZXh0ZXJuIHZvaWQgX0dMSUJD UFBfbXV0ZXhfaW5pdCAodm9pZCk7DQogIGV4dGVybiB2b2lkIF9HTElCQ1BQX211dGV4X2FkZHJl c3NfaW5pdCAodm9pZCk7DQoNCg0KICBzdHJ1Y3QgX1NUTF9tdXRleF9sb2NrDQogIHsNCg0KDQog ICAgdm9sYXRpbGUgaW50IF9NX2luaXRfZmxhZzsNCiAgICBfX2d0aHJlYWRfb25jZV90IF9NX29u Y2U7DQoNCiAgICBfX2d0aHJlYWRfbXV0ZXhfdCBfTV9sb2NrOw0KDQogICAgdm9pZA0KICAgIF9N X2luaXRpYWxpemUoKQ0KICAgIHsNCg0KDQoNCiAgICAgIGlmIChfTV9pbml0X2ZsYWcpIHJldHVy bjsNCiAgICAgIGlmIChfX2d0aHJlYWRfb25jZSAoJl9HTElCQ1BQX29uY2UsIF9HTElCQ1BQX211 dGV4X2luaXQpICE9IDANCiAgICAgICAgICAmJiBfX2d0aHJlYWRfYWN0aXZlX3AgKCkpDQogICAg ICAgIGFib3J0ICgpOw0KICAgICAgX19ndGhyZWFkX211dGV4X2xvY2sgKCZfR0xJQkNQUF9tdXRl eCk7DQogICAgICBpZiAoIV9NX2luaXRfZmxhZykNCiAgICAgICAgew0KDQoNCg0KICAgICAgICAg IF9HTElCQ1BQX211dGV4X2FkZHJlc3MgPSAmX01fbG9jazsNCiAgICAgICAgICBpZiAoX19ndGhy ZWFkX29uY2UgKCZfTV9vbmNlLCBfR0xJQkNQUF9tdXRleF9hZGRyZXNzX2luaXQpICE9IDANCiAg ICAgICAgICAgICYmIF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkNCiAgICAgICAgICAgIGFib3J0ICgp Ow0KICAgICAgICAgIF9NX2luaXRfZmxhZyA9IDE7DQogICAgICAgIH0NCiAgICAgIF9fZ3RocmVh ZF9tdXRleF91bmxvY2sgKCZfR0xJQkNQUF9tdXRleCk7DQoNCiAgICB9DQoNCiAgICB2b2lkDQog ICAgX01fYWNxdWlyZV9sb2NrKCkNCiAgICB7DQoNCiAgICAgIGlmICghX01faW5pdF9mbGFnKSBf TV9pbml0aWFsaXplKCk7DQoNCiAgICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfTV9sb2NrKTsN CiAgICB9DQoNCiAgICB2b2lkDQogICAgX01fcmVsZWFzZV9sb2NrKCkNCiAgICB7DQoNCiAgICAg IGlmICghX01faW5pdF9mbGFnKSBfTV9pbml0aWFsaXplKCk7DQoNCiAgICAgIF9fZ3RocmVhZF9t dXRleF91bmxvY2soJl9NX2xvY2spOw0KICAgIH0NCiAgfTsNCiMgMjIwICJ0Oi9tc3lzLzEuMC9t aW5ndy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJlYWRzLmgiIDMNCiAgc3RydWN0IF9TVExf YXV0b19sb2NrDQogIHsNCiAgICBfU1RMX211dGV4X2xvY2smIF9NX2xvY2s7DQoNCiAgICBfU1RM X2F1dG9fbG9jayhfU1RMX211dGV4X2xvY2smIF9fbG9jaykgOiBfTV9sb2NrKF9fbG9jaykNCiAg ICB7IF9NX2xvY2suX01fYWNxdWlyZV9sb2NrKCk7IH0NCg0KICAgIH5fU1RMX2F1dG9fbG9jaygp IHsgX01fbG9jay5fTV9yZWxlYXNlX2xvY2soKTsgfQ0KDQogIHByaXZhdGU6DQogICAgdm9pZCBv cGVyYXRvcj0oY29uc3QgX1NUTF9hdXRvX2xvY2smKTsNCiAgICBfU1RMX2F1dG9fbG9jayhjb25z dCBfU1RMX2F1dG9fbG9jayYpOw0KICB9Ow0KDQp9DQojIDg3ICJ0Oi9tc3lzLzEuMC9taW5ndy9p bmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0K IyA5OCAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIg Mw0KICBjbGFzcyBfX25ld19hbGxvYw0KICB7DQogIHB1YmxpYzoNCiAgICBzdGF0aWMgdm9pZCoN CiAgICBhbGxvY2F0ZShzaXplX3QgX19uKQ0KICAgIHsgcmV0dXJuIDo6b3BlcmF0b3IgbmV3KF9f bik7IH0NCg0KICAgIHN0YXRpYyB2b2lkDQogICAgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVf dCkNCiAgICB7IDo6b3BlcmF0b3IgZGVsZXRlKF9fcCk7IH0NCiAgfTsNCiMgMTIxICJ0Oi9tc3lz LzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzDQogIHRlbXBsYXRl IDxpbnQgX19pbnN0Pg0KICAgIGNsYXNzIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlDQogICAgew0K ICAgIHByaXZhdGU6DQogICAgICBzdGF0aWMgdm9pZCogX1Nfb29tX21hbGxvYyhzaXplX3QpOw0K ICAgICAgc3RhdGljIHZvaWQqIF9TX29vbV9yZWFsbG9jKHZvaWQqLCBzaXplX3QpOw0KICAgICAg c3RhdGljIHZvaWQgKCogX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIpKCk7DQoNCiAgICBwdWJs aWM6DQogICAgICBzdGF0aWMgdm9pZCoNCiAgICAgIGFsbG9jYXRlKHNpemVfdCBfX24pDQogICAg ICB7DQogICAgICAgIHZvaWQqIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7DQogICAgICAgIGlmICgw ID09IF9fcmVzdWx0KSBfX3Jlc3VsdCA9IF9TX29vbV9tYWxsb2MoX19uKTsNCiAgICAgICAgcmV0 dXJuIF9fcmVzdWx0Ow0KICAgICAgfQ0KDQogICAgICBzdGF0aWMgdm9pZA0KICAgICAgZGVhbGxv Y2F0ZSh2b2lkKiBfX3AsIHNpemVfdCApDQogICAgICB7IGZyZWUoX19wKTsgfQ0KDQogICAgICBz dGF0aWMgdm9pZCoNCiAgICAgIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgLCBzaXplX3Qg X19uZXdfc3opDQogICAgICB7DQogICAgICAgIHZvaWQqIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3As IF9fbmV3X3N6KTsNCiAgICAgICAgaWYgKDAgPT0gX19yZXN1bHQpIF9fcmVzdWx0ID0gX1Nfb29t X3JlYWxsb2MoX19wLCBfX25ld19zeik7DQogICAgICAgIHJldHVybiBfX3Jlc3VsdDsNCiAgICAg IH0NCg0KICAgICAgc3RhdGljIHZvaWQgKCogX19zZXRfbWFsbG9jX2hhbmRsZXIodm9pZCAoKl9f ZikoKSkpKCkNCiAgICAgIHsNCiAgICAgICAgdm9pZCAoKiBfX29sZCkoKSA9IF9fbWFsbG9jX2Fs bG9jX29vbV9oYW5kbGVyOw0KICAgICAgICBfX21hbGxvY19hbGxvY19vb21faGFuZGxlciA9IF9f ZjsNCiAgICAgICAgcmV0dXJuKF9fb2xkKTsNCiAgICAgIH0NCiAgICB9Ow0KDQoNCiAgdGVtcGxh dGUgPGludCBfX2luc3Q+DQogICAgdm9pZCAoKiBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2lu c3Q+OjpfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKSA9IDA7DQoNCiAgdGVtcGxhdGUgPGlu dCBfX2luc3Q+DQogICAgdm9pZCoNCiAgICBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ OjpfU19vb21fbWFsbG9jKHNpemVfdCBfX24pDQogICAgew0KICAgICAgdm9pZCAoKiBfX215X21h bGxvY19oYW5kbGVyKSgpOw0KICAgICAgdm9pZCogX19yZXN1bHQ7DQoNCiAgICAgIGZvciAoOzsp DQogICAgICAgIHsNCiAgICAgICAgICBfX215X21hbGxvY19oYW5kbGVyID0gX19tYWxsb2NfYWxs b2Nfb29tX2hhbmRsZXI7DQogICAgICAgICAgaWYgKDAgPT0gX19teV9tYWxsb2NfaGFuZGxlcikN CiAgICAgICAgICAgIHN0ZDo6X190aHJvd19iYWRfYWxsb2MoKTsNCiAgICAgICAgICAoKl9fbXlf bWFsbG9jX2hhbmRsZXIpKCk7DQogICAgICAgICAgX19yZXN1bHQgPSBtYWxsb2MoX19uKTsNCiAg ICAgICAgICBpZiAoX19yZXN1bHQpDQogICAgICAgICAgICByZXR1cm4oX19yZXN1bHQpOw0KICAg ICAgICB9DQogICAgfQ0KDQogIHRlbXBsYXRlIDxpbnQgX19pbnN0Pg0KICAgIHZvaWQqDQogICAg X19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6X1Nfb29tX3JlYWxsb2Modm9pZCogX19w LCBzaXplX3QgX19uKQ0KICAgIHsNCiAgICAgIHZvaWQgKCogX19teV9tYWxsb2NfaGFuZGxlciko KTsNCiAgICAgIHZvaWQqIF9fcmVzdWx0Ow0KDQogICAgICBmb3IgKDs7KQ0KICAgICAgICB7DQog ICAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVy Ow0KICAgICAgICAgIGlmICgwID09IF9fbXlfbWFsbG9jX2hhbmRsZXIpDQogICAgICAgICAgICBz dGQ6Ol9fdGhyb3dfYmFkX2FsbG9jKCk7DQogICAgICAgICAgKCpfX215X21hbGxvY19oYW5kbGVy KSgpOw0KICAgICAgICAgIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3AsIF9fbik7DQogICAgICAgICAg aWYgKF9fcmVzdWx0KQ0KICAgICAgICAgICAgcmV0dXJuKF9fcmVzdWx0KTsNCiAgICAgICAgfQ0K ICAgIH0NCg0KDQoNCg0KDQoNCiAgdHlwZWRlZiBfX25ld19hbGxvYyBfX21lbV9pbnRlcmZhY2U7 DQojIDIxOSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2Mu aCIgMw0KICB0ZW1wbGF0ZTxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCiAgY2xhc3MgX19zaW1w bGVfYWxsb2MNCiAgew0KICBwdWJsaWM6DQogICAgc3RhdGljIF9UcCogYWxsb2NhdGUoc2l6ZV90 IF9fbikNCiAgICB7IHJldHVybiAwID09IF9fbiA/IDAgOiAoX1RwKikgX0FsbG9jOjphbGxvY2F0 ZShfX24gKiBzaXplb2YgKF9UcCkpOyB9DQoNCiAgICBzdGF0aWMgX1RwKiBhbGxvY2F0ZSgpDQog ICAgeyByZXR1cm4gKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoc2l6ZW9mIChfVHApKTsgfQ0KDQog ICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikNCiAgICB7IGlm ICgwICE9IF9fbikgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mIChfVHApKTsg fQ0KDQogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCkNCiAgICB7IF9BbGxvYzo6 ZGVhbGxvY2F0ZShfX3AsIHNpemVvZiAoX1RwKSk7IH0NCiAgfTsNCiMgMjUxICJ0Oi9tc3lzLzEu MC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzDQogIHRlbXBsYXRlIDxj bGFzcyBfQWxsb2M+DQogIGNsYXNzIF9fZGVidWdfYWxsb2MNCiAgew0KICBwcml2YXRlOg0KICAg IGVudW0ge19TX2V4dHJhID0gOH07DQoNCg0KICBwdWJsaWM6DQoNCiAgICBzdGF0aWMgdm9pZCog YWxsb2NhdGUoc2l6ZV90IF9fbikNCiAgICB7DQogICAgICBjaGFyKiBfX3Jlc3VsdCA9IChjaGFy KilfQWxsb2M6OmFsbG9jYXRlKF9fbiArIChpbnQpIF9TX2V4dHJhKTsNCiAgICAgICooc2l6ZV90 KilfX3Jlc3VsdCA9IF9fbjsNCiAgICAgIHJldHVybiBfX3Jlc3VsdCArIChpbnQpIF9TX2V4dHJh Ow0KICAgIH0NCg0KICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3Qg X19uKQ0KICAgIHsNCiAgICAgIGNoYXIqIF9fcmVhbF9wID0gKGNoYXIqKV9fcCAtIChpbnQpIF9T X2V4dHJhOw0KICAgICAgKCgqKHNpemVfdCopX19yZWFsX3AgPT0gX19uKSA/ICh2b2lkKTAgOiBf YXNzZXJ0KCIqKHNpemVfdCopX19yZWFsX3AgPT0gX19uIiwgInQ6L21zeXMvMS4wL21pbmd3L2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiLCAyNzApKTsNCiAgICAgIF9BbGxvYzo6ZGVh bGxvY2F0ZShfX3JlYWxfcCwgX19uICsgKGludCkgX1NfZXh0cmEpOw0KICAgIH0NCg0KICAgIHN0 YXRpYyB2b2lkKiByZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3Qg X19uZXdfc3opDQogICAgew0KICAgICAgY2hhciogX19yZWFsX3AgPSAoY2hhciopX19wIC0gKGlu dCkgX1NfZXh0cmE7DQogICAgICAoKCooc2l6ZV90KilfX3JlYWxfcCA9PSBfX29sZF9zeikgPyAo dm9pZCkwIDogX2Fzc2VydCgiKihzaXplX3QqKV9fcmVhbF9wID09IF9fb2xkX3N6IiwgInQ6L21z eXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiLCAyNzcpKTsNCiAg ICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIqKQ0KICAgICAgICBfQWxsb2M6OnJlYWxsb2NhdGUo X19yZWFsX3AsIF9fb2xkX3N6ICsgKGludCkgX1NfZXh0cmEsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19uZXdfc3ogKyAoaW50KSBfU19leHRyYSk7DQogICAgICAqKHNp emVfdCopX19yZXN1bHQgPSBfX25ld19zejsNCiAgICAgIHJldHVybiBfX3Jlc3VsdCArIChpbnQp IF9TX2V4dHJhOw0KICAgIH0NCiAgfTsNCiMgMzI0ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRl L2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzDQp0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50 IF9faW5zdD4NCiAgY2xhc3MgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlDQogIHsNCiAgcHJpdmF0 ZToNCiAgICBlbnVtIHtfQUxJR04gPSA4fTsNCiAgICBlbnVtIHtfTUFYX0JZVEVTID0gMTI4fTsN CiAgICBlbnVtIHtfTkZSRUVMSVNUUyA9IF9NQVhfQllURVMgLyBfQUxJR059Ow0KDQogICAgdW5p b24gX09iag0KICAgIHsNCiAgICAgIHVuaW9uIF9PYmoqIF9NX2ZyZWVfbGlzdF9saW5rOw0KICAg ICAgY2hhciBfTV9jbGllbnRfZGF0YVsxXTsNCiAgICB9Ow0KDQogICAgc3RhdGljIF9PYmoqIHZv bGF0aWxlIF9TX2ZyZWVfbGlzdFtfTkZSRUVMSVNUU107DQoNCg0KICAgIHN0YXRpYyBjaGFyKiBf U19zdGFydF9mcmVlOw0KICAgIHN0YXRpYyBjaGFyKiBfU19lbmRfZnJlZTsNCiAgICBzdGF0aWMg c2l6ZV90IF9TX2hlYXBfc2l6ZTsNCg0KICAgIHN0YXRpYyBfU1RMX211dGV4X2xvY2sgX1Nfbm9k ZV9hbGxvY2F0b3JfbG9jazsNCg0KICAgIHN0YXRpYyBzaXplX3QNCiAgICBfU19yb3VuZF91cChz aXplX3QgX19ieXRlcykNCiAgICB7IHJldHVybiAoKChfX2J5dGVzKSArIChzaXplX3QpIF9BTElH Ti0xKSAmIH4oKHNpemVfdCkgX0FMSUdOIC0gMSkpOyB9DQoNCiAgICBzdGF0aWMgc2l6ZV90DQog ICAgX1NfZnJlZWxpc3RfaW5kZXgoc2l6ZV90IF9fYnl0ZXMpDQogICAgeyByZXR1cm4gKCgoX19i eXRlcykgKyAoc2l6ZV90KV9BTElHTi0xKS8oc2l6ZV90KV9BTElHTiAtIDEpOyB9DQoNCg0KDQog ICAgc3RhdGljIHZvaWQqDQogICAgX1NfcmVmaWxsKHNpemVfdCBfX24pOw0KDQoNCg0KICAgIHN0 YXRpYyBjaGFyKg0KICAgIF9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3NpemUsIGludCYgX19ub2Jq cyk7DQoNCg0KDQogICAgY2xhc3MgX0xvY2sNCiAgICB7DQogICAgcHVibGljOg0KICAgICAgX0xv Y2soKSB7IGlmIChfX3RocmVhZHMpIF9TX25vZGVfYWxsb2NhdG9yX2xvY2suX01fYWNxdWlyZV9s b2NrKCk7IH0NCiAgICAgIH5fTG9jaygpIHsgaWYgKF9fdGhyZWFkcykgX1Nfbm9kZV9hbGxvY2F0 b3JfbG9jay5fTV9yZWxlYXNlX2xvY2soKTsgfQ0KICAgIH0gX19hdHRyaWJ1dGVfXyAoKF9fdW51 c2VkX18pKTsNCiAgICBmcmllbmQgY2xhc3MgX0xvY2s7DQoNCiAgcHVibGljOg0KDQogICAgc3Rh dGljIHZvaWQqDQogICAgYWxsb2NhdGUoc2l6ZV90IF9fbikNCiAgICB7DQogICAgICB2b2lkKiBf X3JldCA9IDA7DQoNCiAgICAgIGlmIChfX24gPiAoc2l6ZV90KSBfTUFYX0JZVEVTKQ0KICAgICAg ICBfX3JldCA9IF9fbWVtX2ludGVyZmFjZTo6YWxsb2NhdGUoX19uKTsNCiAgICAgIGVsc2UNCiAg ICAgICAgew0KICAgICAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdCA9IF9TX2Zy ZWVfbGlzdA0KICAgICAgICAgICAgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOw0KDQoNCg0KICAg ICAgICAgIF9Mb2NrIF9fbG9ja19pbnN0YW5jZTsNCiAgICAgICAgICBfT2JqKiBfX3Jlc3RyaWN0 X18gX19yZXN1bHQgPSAqX19teV9mcmVlX2xpc3Q7DQogICAgICAgICAgaWYgKF9fcmVzdWx0ID09 IDApDQogICAgICAgICAgICBfX3JldCA9IF9TX3JlZmlsbChfU19yb3VuZF91cChfX24pKTsNCiAg ICAgICAgICBlbHNlDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICpfX215X2ZyZWVfbGlz dCA9IF9fcmVzdWx0IC0+IF9NX2ZyZWVfbGlzdF9saW5rOw0KICAgICAgICAgICAgICBfX3JldCA9 IF9fcmVzdWx0Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gX19yZXQ7 DQogICAgfTsNCg0KDQogICAgc3RhdGljIHZvaWQNCiAgICBkZWFsbG9jYXRlKHZvaWQqIF9fcCwg c2l6ZV90IF9fbikNCiAgICB7DQogICAgICBpZiAoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykN CiAgICAgICAgX19tZW1faW50ZXJmYWNlOjpkZWFsbG9jYXRlKF9fcCwgX19uKTsNCiAgICAgIGVs c2UNCiAgICAgICAgew0KICAgICAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdA0K ICAgICAgICAgICAgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOw0KICAg ICAgICAgIF9PYmoqIF9fcSA9IChfT2JqKilfX3A7DQoNCg0KDQogICAgICAgICAgX0xvY2sgX19s b2NrX2luc3RhbmNlOw0KICAgICAgICAgIF9fcSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215 X2ZyZWVfbGlzdDsNCiAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3E7DQogICAgICAgIH0N CiAgICB9DQoNCiAgICBzdGF0aWMgdm9pZCoNCiAgICByZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6 ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdfc3opOw0KICB9Ow0KDQoNCiAgdGVtcGxhdGU8Ym9v bCBfX3RocmVhZHMsIGludCBfX2luc3Q+DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRvcj09 KGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mLA0KICAg ICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19p bnN0PiYpDQogICAgeyByZXR1cm4gdHJ1ZTsgfQ0KDQogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRz LCBpbnQgX19pbnN0Pg0KICAgIGlubGluZSBib29sDQogICAgb3BlcmF0b3IhPShjb25zdCBfX2Rl ZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JiwNCiAgICAgICAgICAgICAg IGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mKQ0KICAg IHsgcmV0dXJuIGZhbHNlOyB9DQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywg aW50IF9faW5zdD4NCiAgICBjaGFyKg0KICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3Ro cmVhZHMsIF9faW5zdD46Ol9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3NpemUsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 JiBfX25vYmpzKQ0KICAgIHsNCiAgICAgIGNoYXIqIF9fcmVzdWx0Ow0KICAgICAgc2l6ZV90IF9f dG90YWxfYnl0ZXMgPSBfX3NpemUgKiBfX25vYmpzOw0KICAgICAgc2l6ZV90IF9fYnl0ZXNfbGVm dCA9IF9TX2VuZF9mcmVlIC0gX1Nfc3RhcnRfZnJlZTsNCg0KICAgICAgaWYgKF9fYnl0ZXNfbGVm dCA+PSBfX3RvdGFsX2J5dGVzKQ0KICAgICAgew0KICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0 X2ZyZWU7DQogICAgICAgIF9TX3N0YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRlczsNCiAgICAgICAg cmV0dXJuKF9fcmVzdWx0KTsNCiAgICAgIH0NCiAgICAgIGVsc2UgaWYgKF9fYnl0ZXNfbGVmdCA+ PSBfX3NpemUpDQogICAgICAgIHsNCiAgICAgICAgICBfX25vYmpzID0gKGludCkoX19ieXRlc19s ZWZ0L19fc2l6ZSk7DQogICAgICAgICAgX190b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7 DQogICAgICAgICAgX19yZXN1bHQgPSBfU19zdGFydF9mcmVlOw0KICAgICAgICAgIF9TX3N0YXJ0 X2ZyZWUgKz0gX190b3RhbF9ieXRlczsNCiAgICAgICAgICByZXR1cm4oX19yZXN1bHQpOw0KICAg ICAgICB9DQogICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICBzaXplX3QgX19ieXRlc190 b19nZXQgPQ0KICAgICAgICAgICAgMiAqIF9fdG90YWxfYnl0ZXMgKyBfU19yb3VuZF91cChfU19o ZWFwX3NpemUgPj4gNCk7DQoNCiAgICAgICAgICBpZiAoX19ieXRlc19sZWZ0ID4gMCkNCiAgICAg ICAgICAgIHsNCiAgICAgICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0ID0N CiAgICAgICAgICAgICAgICBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX2J5dGVz X2xlZnQpOw0KDQogICAgICAgICAgICAgICgoX09iaiopX1Nfc3RhcnRfZnJlZSkgLT4gX01fZnJl ZV9saXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7DQogICAgICAgICAgICAgICpfX215X2ZyZWVf bGlzdCA9IChfT2JqKilfU19zdGFydF9mcmVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIF9T X3N0YXJ0X2ZyZWUgPSAoY2hhciopIF9fbWVtX2ludGVyZmFjZTo6YWxsb2NhdGUoX19ieXRlc190 b19nZXQpOw0KICAgICAgICAgIGlmICgwID09IF9TX3N0YXJ0X2ZyZWUpDQogICAgICAgICAgICB7 DQogICAgICAgICAgICAgIHNpemVfdCBfX2k7DQogICAgICAgICAgICAgIF9PYmoqIHZvbGF0aWxl KiBfX215X2ZyZWVfbGlzdDsNCiAgICAgICAgICAgICAgX09iaiogX19wOw0KDQoNCg0KICAgICAg ICAgICAgICBfX2kgPSBfX3NpemU7DQogICAgICAgICAgICAgIGZvciAoOyBfX2kgPD0gKHNpemVf dCkgX01BWF9CWVRFUzsgX19pICs9IChzaXplX3QpIF9BTElHTikNCiAgICAgICAgICAgICAgICB7 DQogICAgICAgICAgICAgICAgICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2Zy ZWVsaXN0X2luZGV4KF9faSk7DQogICAgICAgICAgICAgICAgICBfX3AgPSAqX19teV9mcmVlX2xp c3Q7DQogICAgICAgICAgICAgICAgICBpZiAoMCAhPSBfX3ApDQogICAgICAgICAgICAgICAgICAg IHsNCiAgICAgICAgICAgICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3AgLT4gX01fZnJl ZV9saXN0X2xpbms7DQogICAgICAgICAgICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFy KilfX3A7DQogICAgICAgICAgICAgICAgICAgICAgX1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVl ICsgX19pOw0KICAgICAgICAgICAgICAgICAgICAgIHJldHVybihfU19jaHVua19hbGxvYyhfX3Np emUsIF9fbm9ianMpKTsNCg0KDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg ICB9DQogICAgICAgICAgICAgIF9TX2VuZF9mcmVlID0gMDsNCiAgICAgICAgICAgICAgX1Nfc3Rh cnRfZnJlZSA9IChjaGFyKilfX21lbV9pbnRlcmZhY2U6OmFsbG9jYXRlKF9fYnl0ZXNfdG9fZ2V0 KTsNCg0KDQogICAgICAgICAgICB9DQogICAgICAgICAgX1NfaGVhcF9zaXplICs9IF9fYnl0ZXNf dG9fZ2V0Ow0KICAgICAgICAgIF9TX2VuZF9mcmVlID0gX1Nfc3RhcnRfZnJlZSArIF9fYnl0ZXNf dG9fZ2V0Ow0KICAgICAgICAgIHJldHVybihfU19jaHVua19hbGxvYyhfX3NpemUsIF9fbm9ianMp KTsNCiAgICAgICAgfQ0KICAgIH0NCg0KDQoNCg0KDQogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRz LCBpbnQgX19pbnN0Pg0KICAgIHZvaWQqDQogICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9f dGhyZWFkcywgX19pbnN0Pjo6X1NfcmVmaWxsKHNpemVfdCBfX24pDQogICAgew0KICAgICAgaW50 IF9fbm9ianMgPSAyMDsNCiAgICAgIGNoYXIqIF9fY2h1bmsgPSBfU19jaHVua19hbGxvYyhfX24s IF9fbm9ianMpOw0KICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0Ow0KICAgICAg X09iaiogX19yZXN1bHQ7DQogICAgICBfT2JqKiBfX2N1cnJlbnRfb2JqOw0KICAgICAgX09iaiog X19uZXh0X29iajsNCiAgICAgIGludCBfX2k7DQoNCiAgICAgIGlmICgxID09IF9fbm9ianMpIHJl dHVybihfX2NodW5rKTsNCiAgICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1Nf ZnJlZWxpc3RfaW5kZXgoX19uKTsNCg0KDQogICAgICBfX3Jlc3VsdCA9IChfT2JqKilfX2NodW5r Ow0KICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19uZXh0X29iaiA9IChfT2JqKikoX19jaHVuayAr IF9fbik7DQogICAgICBmb3IgKF9faSA9IDE7IDsgX19pKyspIHsNCiAgICAgICAgX19jdXJyZW50 X29iaiA9IF9fbmV4dF9vYmo7DQogICAgICAgIF9fbmV4dF9vYmogPSAoX09iaiopKChjaGFyKilf X25leHRfb2JqICsgX19uKTsNCiAgICAgICAgaWYgKF9fbm9ianMgLSAxID09IF9faSkgew0KICAg ICAgICAgIF9fY3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0X2xpbmsgPSAwOw0KICAgICAgICAg IGJyZWFrOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIF9fY3VycmVudF9vYmogLT4gX01f ZnJlZV9saXN0X2xpbmsgPSBfX25leHRfb2JqOw0KICAgICAgICB9DQogICAgICB9DQogICAgICBy ZXR1cm4oX19yZXN1bHQpOw0KICAgIH0NCg0KDQogIHRlbXBsYXRlPGJvb2wgdGhyZWFkcywgaW50 IGluc3Q+DQogICAgdm9pZCoNCiAgICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dGhyZWFkcywg aW5zdD46OnJlYWxsb2NhdGUodm9pZCogX19wLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19vbGRfc3osDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX25l d19zeikNCiAgICB7DQogICAgICB2b2lkKiBfX3Jlc3VsdDsNCiAgICAgIHNpemVfdCBfX2NvcHlf c3o7DQoNCiAgICAgIGlmIChfX29sZF9zeiA+IChzaXplX3QpIF9NQVhfQllURVMgJiYgX19uZXdf c3ogPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB7DQogICAgICAgIHJldHVybihyZWFsbG9jKF9fcCwg X19uZXdfc3opKTsNCiAgICAgIH0NCiAgICAgIGlmIChfU19yb3VuZF91cChfX29sZF9zeikgPT0g X1Nfcm91bmRfdXAoX19uZXdfc3opKSByZXR1cm4oX19wKTsNCiAgICAgIF9fcmVzdWx0ID0gYWxs b2NhdGUoX19uZXdfc3opOw0KICAgICAgX19jb3B5X3N6ID0gX19uZXdfc3ogPiBfX29sZF9zej8g X19vbGRfc3ogOiBfX25ld19zejsNCiAgICAgIG1lbWNweShfX3Jlc3VsdCwgX19wLCBfX2NvcHlf c3opOw0KICAgICAgZGVhbGxvY2F0ZShfX3AsIF9fb2xkX3N6KTsNCiAgICAgIHJldHVybihfX3Jl c3VsdCk7DQogICAgfQ0KDQogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pg0K ICBfU1RMX211dGV4X2xvY2sNCiAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywg X19pbnN0Pjo6X1Nfbm9kZV9hbGxvY2F0b3JfbG9jaw0KICA9IHsgMCwgezAsIC0xfSB9Ow0KDQog IHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pg0KICBjaGFyKiBfX2RlZmF1bHRf YWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19zdGFydF9mcmVlID0gMDsNCg0K ICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4NCiAgY2hhciogX19kZWZhdWx0 X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfZW5kX2ZyZWUgPSAwOw0KDQog IHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pg0KICBzaXplX3QgX19kZWZhdWx0 X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfaGVhcF9zaXplID0gMDsNCg0K ICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4NCiAgdHlwZW5hbWUgX19kZWZh dWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X09iaiogdm9sYXRpbGUNCiAg X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfZnJlZV9saXN0 W19ORlJFRUxJU1RTXTsNCg0KICB0eXBlZGVmIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0cnVl LCAwPiBfX2FsbG9jOw0KICB0eXBlZGVmIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxmYWxzZSwg MD4gX19zaW5nbGVfY2xpZW50X2FsbG9jOw0KIyA2MTMgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDMNCnRlbXBsYXRlIDxjbGFzcyBfVHA+DQpjbGFz cyBhbGxvY2F0b3INCnsNCiAgdHlwZWRlZiBfX2FsbG9jIF9BbGxvYzsNCnB1YmxpYzoNCiAgdHlw ZWRlZiBzaXplX3Qgc2l6ZV90eXBlOw0KICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5 cGU7DQogIHR5cGVkZWYgX1RwKiBwb2ludGVyOw0KICB0eXBlZGVmIGNvbnN0IF9UcCogY29uc3Rf cG9pbnRlcjsNCiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsNCiAgdHlwZWRlZiBjb25zdCBfVHAm IGNvbnN0X3JlZmVyZW5jZTsNCiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsNCg0KICB0ZW1wbGF0 ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7DQogICAgdHlwZWRlZiBhbGxvY2F0b3I8X1Rw MT4gb3RoZXI7DQogIH07DQoNCiAgYWxsb2NhdG9yKCkgdGhyb3coKSB7fQ0KICBhbGxvY2F0b3Io Y29uc3QgYWxsb2NhdG9yJikgdGhyb3coKSB7fQ0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gYWxs b2NhdG9yKGNvbnN0IGFsbG9jYXRvcjxfVHAxPiYpIHRocm93KCkge30NCiAgfmFsbG9jYXRvcigp IHRocm93KCkge30NCg0KICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyBy ZXR1cm4gJl9feDsgfQ0KICBjb25zdF9wb2ludGVyIGFkZHJlc3MoY29uc3RfcmVmZXJlbmNlIF9f eCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQ0KDQoNCg0KICBfVHAqIGFsbG9jYXRlKHNpemVfdHlw ZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgew0KICAgIHJldHVybiBfX24gIT0gMCA/IHN0YXRpY19j YXN0PF9UcCo+KF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKQ0KICAgICAgICAg ICAgICAgICAgICA6IDA7DQogIH0NCg0KDQogIHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwg c2l6ZV90eXBlIF9fbikNCiAgICB7IF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVv ZihfVHApKTsgfQ0KDQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkNCiAgICB7 IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0NCg0KICB2b2lkIGNvbnN0cnVjdChw b2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192YWwpOyB9DQog IHZvaWQgZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQ0KfTsNCg0KdGVtcGxh dGU8Pg0KY2xhc3MgYWxsb2NhdG9yPHZvaWQ+IHsNCnB1YmxpYzoNCiAgdHlwZWRlZiBzaXplX3Qg c2l6ZV90eXBlOw0KICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7DQogIHR5cGVk ZWYgdm9pZCogcG9pbnRlcjsNCiAgdHlwZWRlZiBjb25zdCB2b2lkKiBjb25zdF9wb2ludGVyOw0K ICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsNCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3Ry dWN0IHJlYmluZCB7DQogICAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7DQogIH07DQp9 Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4NCmlubGluZSBib29sIG9wZXJh dG9yPT0oY29uc3QgYWxsb2NhdG9yPF9UMT4mLCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpDQp7DQog IHJldHVybiB0cnVlOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+DQppbmxp bmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGFsbG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9y PF9UMj4mKQ0Kew0KICByZXR1cm4gZmFsc2U7DQp9DQojIDY5NSAidDovbXN5cy8xLjAvbWluZ3cv aW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMw0KdGVtcGxhdGUgPGNsYXNzIF9UcCwg Y2xhc3MgX0FsbG9jPg0Kc3RydWN0IF9fYWxsb2NhdG9yDQp7DQogIF9BbGxvYyBfX3VuZGVybHlp bmdfYWxsb2M7DQoNCiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOw0KICB0eXBlZGVmIHB0cmRp ZmZfdCBkaWZmZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYgX1RwKiBwb2ludGVyOw0KICB0eXBlZGVm IGNvbnN0IF9UcCogY29uc3RfcG9pbnRlcjsNCiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsNCiAg dHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsNCiAgdHlwZWRlZiBfVHAgdmFsdWVf dHlwZTsNCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7DQogICAgdHlw ZWRlZiBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+IG90aGVyOw0KICB9Ow0KDQogIF9fYWxsb2Nh dG9yKCkgdGhyb3coKSB7fQ0KICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRvciYgX19hKSB0 aHJvdygpDQogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5kZXJseWluZ19hbGxvYykg e30NCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+DQogIF9fYWxsb2NhdG9yKGNvbnN0IF9fYWxsb2Nh dG9yPF9UcDEsIF9BbGxvYz4mIF9fYSkgdGhyb3coKQ0KICAgIDogX191bmRlcmx5aW5nX2FsbG9j KF9fYS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9DQogIH5fX2FsbG9jYXRvcigpIHRocm93KCkge30N Cg0KICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsg fQ0KICBjb25zdF9wb2ludGVyIGFkZHJlc3MoY29uc3RfcmVmZXJlbmNlIF9feCkgY29uc3QgeyBy ZXR1cm4gJl9feDsgfQ0KDQoNCiAgX1RwKiBhbGxvY2F0ZShzaXplX3R5cGUgX19uLCBjb25zdCB2 b2lkKiA9IDApIHsNCiAgICByZXR1cm4gX19uICE9IDANCiAgICAgICAgPyBzdGF0aWNfY2FzdDxf VHAqPihfX3VuZGVybHlpbmdfYWxsb2MuYWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKQ0KICAg ICAgICA6IDA7DQogIH0NCg0KDQogIHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90 eXBlIF9fbikNCiAgICB7IF9fdW5kZXJseWluZ19hbGxvYy5kZWFsbG9jYXRlKF9fcCwgX19uICog c2l6ZW9mKF9UcCkpOyB9DQoNCiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgdGhyb3coKQ0K ICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQ0KDQogIHZvaWQgY29uc3Ry dWN0KHBvaW50ZXIgX19wLCBjb25zdCBfVHAmIF9fdmFsKSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7 IH0NCiAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9DQp9Ow0KDQp0 ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPg0KY2xhc3MgX19hbGxvY2F0b3I8dm9pZCwgX0FsbG9jPiB7 DQogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsNCiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVy ZW5jZV90eXBlOw0KICB0eXBlZGVmIHZvaWQqIHBvaW50ZXI7DQogIHR5cGVkZWYgY29uc3Qgdm9p ZCogY29uc3RfcG9pbnRlcjsNCiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7DQoNCiAgdGVtcGxh dGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgew0KICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8 X1RwMSwgX0FsbG9jPiBvdGhlcjsNCiAgfTsNCn07DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs YXNzIF9BbGxvYz4NCmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19hbGxvY2F0b3I8X1Rw LCBfQWxsb2M+JiBfX2ExLA0KICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2FsbG9jYXRv cjxfVHAsIF9BbGxvYz4mIF9fYTIpDQp7DQogIHJldHVybiBfX2ExLl9fdW5kZXJseWluZ19hbGxv YyA9PSBfX2EyLl9fdW5kZXJseWluZ19hbGxvYzsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwg Y2xhc3MgX0FsbG9jPg0KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX2FsbG9jYXRvcjxf VHAsIF9BbGxvYz4mIF9fYTEsDQogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fYWxsb2Nh dG9yPF9UcCwgX0FsbG9jPiYgX19hMikNCnsNCiAgcmV0dXJuIF9fYTEuX191bmRlcmx5aW5nX2Fs bG9jICE9IF9fYTIuX191bmRlcmx5aW5nX2FsbG9jOw0KfQ0KDQoNCg0KDQoNCg0KDQp0ZW1wbGF0 ZSA8aW50IGluc3Q+DQppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fbWFsbG9jX2FsbG9j X3RlbXBsYXRlPGluc3Q+JiwNCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2Nf YWxsb2NfdGVtcGxhdGU8aW5zdD4mKQ0Kew0KICByZXR1cm4gdHJ1ZTsNCn0NCg0KdGVtcGxhdGUg PGludCBfX2luc3Q+DQppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9fbWFsbG9jX2FsbG9j X3RlbXBsYXRlPF9faW5zdD4mLA0KICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX21hbGxv Y19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+JikNCnsNCiAgcmV0dXJuIGZhbHNlOw0KfQ0KDQp0ZW1w bGF0ZSA8Y2xhc3MgX0FsbG9jPg0KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX2RlYnVn X2FsbG9jPF9BbGxvYz4mLA0KICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2RlYnVnX2Fs bG9jPF9BbGxvYz4mKSB7DQogIHJldHVybiB0cnVlOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0Fs bG9jPg0KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4m LA0KICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4mKSB7 DQogIHJldHVybiBmYWxzZTsNCn0NCiMgODQwICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2cr Ky12My9iaXRzL3N0bF9hbGxvYy5oIiAzDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxs b2NhdG9yPg0Kc3RydWN0IF9BbGxvY190cmFpdHMNCnsNCiAgc3RhdGljIGNvbnN0IGJvb2wgX1Nf aW5zdGFuY2VsZXNzID0gZmFsc2U7DQogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jYXRvcjo6dGVt cGxhdGUgcmViaW5kPF9UcD46Om90aGVyIGFsbG9jYXRvcl90eXBlOw0KfTsNCg0KdGVtcGxhdGUg PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvcj4NCmNvbnN0IGJvb2wgX0FsbG9jX3RyYWl0czxf VHAsIF9BbGxvY2F0b3I+OjpfU19pbnN0YW5jZWxlc3M7DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9U cCwgY2xhc3MgX1RwMT4NCnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgYWxsb2NhdG9yPF9UcDE+ ID4NCnsNCiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsNCiAgdHlw ZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fYWxsb2M+IF9BbGxvY190eXBlOw0KICB0eXBlZGVm IGFsbG9jYXRvcjxfVHA+IGFsbG9jYXRvcl90eXBlOw0KfTsNCg0KDQoNCg0KdGVtcGxhdGUgPGNs YXNzIF9UcCwgaW50IF9faW5zdD4NCnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19tYWxsb2Nf YWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+DQp7DQogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3Rh bmNlbGVzcyA9IHRydWU7DQogIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX21hbGxvY19h bGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7DQogIHR5cGVkZWYgX19hbGxvY2F0 b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7 DQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0 Pg0Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190 aHJlYWRzLCBfX2luc3Q+ID4NCnsNCiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNz ID0gdHJ1ZTsNCiAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fZGVmYXVsdF9hbGxvY190 ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPg0KICAgICAgICAgIF9BbGxvY190eXBlOw0KICB0 eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFk cywgX19pbnN0PiA+DQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7DQp9Ow0KDQoNCnRlbXBsYXRl IDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19k ZWJ1Z19hbGxvYzxfQWxsb2M+ID4NCnsNCiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2Vs ZXNzID0gdHJ1ZTsNCiAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fZGVidWdfYWxsb2M8 X0FsbG9jPiA+IF9BbGxvY190eXBlOw0KICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWJ1 Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7DQp9Ow0KDQoNCg0KDQp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBpbnQgX19pbnN0Pg0Kc3RydWN0IF9BbGxvY190cmFpdHM8 X1RwLA0KICAgICAgICAgICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwgX19tYWxsb2NfYWxs b2NfdGVtcGxhdGU8X19pbnN0PiA+ID4NCnsNCiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFu Y2VsZXNzID0gdHJ1ZTsNCiAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fbWFsbG9jX2Fs bG9jX3RlbXBsYXRlPF9faW5zdD4gPiBfQWxsb2NfdHlwZTsNCiAgdHlwZWRlZiBfX2FsbG9jYXRv cjxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0b3JfdHlwZTsN Cn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwgYm9vbCBfX3RociwgaW50 IF9faW5zdD4NCnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwNCiAgICAgICAgICAgICAgICAgICAg ICBfX2FsbG9jYXRvcjxfVHAxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RociwgX19pbnN0PiA+ID4NCnsNCiAgc3RhdGljIGNv bnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsNCiAgdHlwZWRlZiBfX3NpbXBsZV9hbGxv YzxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocixfX2luc3Q+ID4NCiAgICAgICAg ICBfQWxsb2NfdHlwZTsNCiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVmYXVsdF9hbGxv Y190ZW1wbGF0ZTxfX3RocixfX2luc3Q+ID4NCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsNCn07 DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwgY2xhc3MgX0FsbG9jPg0Kc3Ry dWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2FsbG9jYXRvcjxfVHAxLCBfX2RlYnVnX2FsbG9jPF9B bGxvYz4gPiA+DQp7DQogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7 DQogIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPiBf QWxsb2NfdHlwZTsNCiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVidWdfYWxsb2M8X0Fs bG9jPiA+IGFsbG9jYXRvcl90eXBlOw0KfTsNCg0KDQoNCg0KDQogIGV4dGVybiB0ZW1wbGF0ZSBj bGFzcyBhbGxvY2F0b3I8Y2hhcj47DQogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBhbGxvY2F0b3I8 d2NoYXJfdD47DQoNCg0KDQogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBfX2RlZmF1bHRfYWxsb2Nf dGVtcGxhdGU8dHJ1ZSwgMD47DQoNCn0NCiMgNTYgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUv ZysrLXYzL21lbW9yeSIgMiAzDQojIDEgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYz L2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAxIDMNCiMgNjcgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQoNCg0K DQoNCg0KDQogIHRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4NCiAgICBpbmxpbmUgdm9p ZA0KICAgIF9Db25zdHJ1Y3QoX1QxKiBfX3AsIGNvbnN0IF9UMiYgX192YWx1ZSkNCiAgICB7IG5l dyAoc3RhdGljX2Nhc3Q8dm9pZCo+KF9fcCkpIF9UMShfX3ZhbHVlKTsgfQ0KDQoNCg0KDQoNCg0K DQogIHRlbXBsYXRlIDxjbGFzcyBfVDE+DQogICAgaW5saW5lIHZvaWQNCiAgICBfQ29uc3RydWN0 KF9UMSogX19wKQ0KICAgIHsgbmV3IChzdGF0aWNfY2FzdDx2b2lkKj4oX19wKSkgX1QxKCk7IH0N CiMgOTggInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVj dC5oIiAzDQogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPg0KICAgIGlubGluZSB2 b2lkDQogICAgX19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJk SXRlcmF0b3IgX19sYXN0LCBfX2ZhbHNlX3R5cGUpDQogICAgeyBmb3IgKCA7IF9fZmlyc3QgIT0g X19sYXN0OyArK19fZmlyc3QpIF9EZXN0cm95KCYqX19maXJzdCk7IH0NCiMgMTEyICJ0Oi9tc3lz LzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMw0KICB0ZW1w bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4NCiAgICBpbmxpbmUgdm9pZA0KICAgIF9fZGVz dHJveV9hdXgoX0ZvcndhcmRJdGVyYXRvciwgX0ZvcndhcmRJdGVyYXRvciwgX190cnVlX3R5cGUp DQogICAgeyB9DQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlIDxjbGFzcyBfVHA+DQogICAgaW5saW5l IHZvaWQNCiAgICBfRGVzdHJveShfVHAqIF9fcG9pbnRlcikNCiAgICB7IF9fcG9pbnRlci0+fl9U cCgpOyB9DQojIDEzNCAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf Y29uc3RydWN0LmgiIDMNCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+DQogICAg aW5saW5lIHZvaWQNCiAgICBfRGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3 YXJkSXRlcmF0b3IgX19sYXN0KQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlDQogICAgICAgICAgICAgICAg ICAgICAgIF9WYWx1ZV90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRz PF9WYWx1ZV90eXBlPjo6aGFzX3RyaXZpYWxfZGVzdHJ1Y3Rvcg0KICAgICAgICAgICAgICAgICAg ICAgICBfSGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCg0KICAgICAgX19kZXN0cm95X2F1eChfX2Zp cnN0LCBfX2xhc3QsIF9IYXNfdHJpdmlhbF9kZXN0cnVjdG9yKCkpOw0KICAgIH0NCn0NCiMgNTcg InQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL21lbW9yeSIgMiAzDQoNCiMgMSAidDov bXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAx IDMNCiMgNjYgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5p dGlhbGl6ZWQuaCIgMw0KbmFtZXNwYWNlIHN0ZA0Kew0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+DQogICAgaW5saW5lIF9Gb3J3YXJk SXRlcg0KICAgIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9J bnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0 ZXIgX19yZXN1bHQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKQ0K ICAgIHsgcmV0dXJuIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7IH0NCg0KICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+DQogICAgX0Zv cndhcmRJdGVyDQogICAgX191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9JbnB1dEl0ZXIgX19maXJz dCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3 YXJkSXRlciBfX3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90 eXBlKQ0KICAgIHsNCiAgICAgIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fcmVzdWx0Ow0KICAgICAg aWYgKHRydWUpIHsNCiAgICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0 LCArK19fY3VyKQ0KICAgICAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgKl9fZmlyc3QpOw0KICAg ICAgICByZXR1cm4gX19jdXI7DQogICAgICB9DQogICAgICBpZiAoZmFsc2UpDQogICAgICAgIHsN CiAgICAgICAgICBfRGVzdHJveShfX3Jlc3VsdCwgX19jdXIpOw0KICAgICAgICAgIDsNCiAgICAg ICAgfQ0KICAgIH0NCiMgMTA2ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRz L3N0bF91bmluaXRpYWxpemVkLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwg dHlwZW5hbWUgX0ZvcndhcmRJdGVyPg0KICAgIGlubGluZSBfRm9yd2FyZEl0ZXINCiAgICB1bmlu aXRpYWxpemVkX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX0Zv cndhcmRJdGVyIF9fcmVzdWx0KQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsNCiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVUeXBlPjo6aXNfUE9EX3R5cGUgX0lz X1BPRDsNCiAgICAgIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX19maXJzdCwgX19s YXN0LCBfX3Jlc3VsdCwgX0lzX1BPRCgpKTsNCiAgICB9DQoNCiAgaW5saW5lIGNoYXIqDQogIHVu aW5pdGlhbGl6ZWRfY29weShjb25zdCBjaGFyKiBfX2ZpcnN0LCBjb25zdCBjaGFyKiBfX2xhc3Qs IGNoYXIqIF9fcmVzdWx0KQ0KICB7DQogICAgbWVtbW92ZShfX3Jlc3VsdCwgX19maXJzdCwgX19s YXN0IC0gX19maXJzdCk7DQogICAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3Qp Ow0KICB9DQoNCiAgaW5saW5lIHdjaGFyX3QqDQogIHVuaW5pdGlhbGl6ZWRfY29weShjb25zdCB3 Y2hhcl90KiBfX2ZpcnN0LCBjb25zdCB3Y2hhcl90KiBfX2xhc3QsDQogICAgICAgICAgICAgICAg ICAgICB3Y2hhcl90KiBfX3Jlc3VsdCkNCiAgew0KICAgIG1lbW1vdmUoX19yZXN1bHQsIF9fZmly c3QsIHNpemVvZih3Y2hhcl90KSAqIChfX2xhc3QgLSBfX2ZpcnN0KSk7DQogICAgcmV0dXJuIF9f cmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOw0KICB9DQoNCg0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPg0KICAgIGlubGluZSB2b2lkDQogICAgX191 bmluaXRpYWxpemVkX2ZpbGxfYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIg X19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX190 cnVlX3R5cGUpDQogICAgeyBmaWxsKF9fZmlyc3QsIF9fbGFzdCwgX194KTsgfQ0KDQogIHRlbXBs YXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPg0KICAgIHZvaWQNCiAgICBf X3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl ciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBf X2ZhbHNlX3R5cGUpDQogICAgew0KICAgICAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19maXJzdDsN CiAgICAgIGlmICh0cnVlKSB7DQogICAgICAgIGZvciAoIDsgX19jdXIgIT0gX19sYXN0OyArK19f Y3VyKQ0KICAgICAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgX194KTsNCiAgICAgIH0NCiAgICAg IGlmIChmYWxzZSkNCiAgICAgICAgew0KICAgICAgICAgIF9EZXN0cm95KF9fZmlyc3QsIF9fY3Vy KTsNCiAgICAgICAgICA7DQogICAgICAgIH0NCiAgICB9DQojIDE2NCAidDovbXN5cy8xLjAvbWlu Z3cvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzDQogIHRlbXBsYXRl PHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPg0KICAgIGlubGluZSB2b2lkDQog ICAgdW5pbml0aWFsaXplZF9maWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIg X19sYXN0LCBjb25zdCBfVHAmIF9feCkNCiAgICB7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7DQogICAg ICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46OmlzX1BPRF90eXBl IF9Jc19QT0Q7DQogICAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX19maXJzdCwgX19sYXN0 LCBfX3gsIF9Jc19QT0QoKSk7DQogICAgfQ0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9y d2FyZEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfVHA+DQogICAgaW5saW5lIF9Gb3J3 YXJkSXRlcg0KICAgIF9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9Gb3J3YXJkSXRlciBfX2Zp cnN0LCBfU2l6ZSBfX24sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1Rw JiBfX3gsIF9fdHJ1ZV90eXBlKQ0KICAgIHsNCiAgICAgIHJldHVybiBmaWxsX24oX19maXJzdCwg X19uLCBfX3gpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5 cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfVHA+DQogICAgX0ZvcndhcmRJdGVyDQogICAgX191bmlu aXRpYWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX19mYWxzZV90eXBl KQ0KICAgIHsNCiAgICAgIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fZmlyc3Q7DQogICAgICBpZiAo dHJ1ZSkgew0KICAgICAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fY3VyKQ0KICAgICAg ICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgX194KTsNCiAgICAgICAgcmV0dXJuIF9fY3VyOw0KICAg ICAgfQ0KICAgICAgaWYgKGZhbHNlKQ0KICAgICAgICB7DQogICAgICAgICAgX0Rlc3Ryb3koX19m aXJzdCwgX19jdXIpOw0KICAgICAgICAgIDsNCiAgICAgICAgfQ0KICAgIH0NCiMgMjEwICJ0Oi9t c3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5h bWUgX1RwPg0KICAgIGlubGluZSBfRm9yd2FyZEl0ZXINCiAgICB1bmluaXRpYWxpemVkX2ZpbGxf bihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9feCkNCiAgICB7 DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2 YWx1ZV90eXBlIF9WYWx1ZVR5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFp dHM8X1ZhbHVlVHlwZT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7DQogICAgICByZXR1cm4gX191bmlu aXRpYWxpemVkX2ZpbGxfbl9hdXgoX19maXJzdCwgX19uLCBfX3gsIF9Jc19QT0QoKSk7DQogICAg fQ0KIyAyMjcgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5p dGlhbGl6ZWQuaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUg X0lucHV0SXRlcjIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4NCiAgICBpbmxpbmUgX0ZvcndhcmRJ dGVyDQogICAgX191bmluaXRpYWxpemVkX2NvcHlfY29weShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwg X0lucHV0SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1 dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KQ0KICAgIHsNCiAgICAgIF9Gb3J3YXJk SXRlciBfX21pZCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1 bHQpOw0KICAgICAgaWYgKHRydWUpIHsNCiAgICAgICAgcmV0dXJuIHVuaW5pdGlhbGl6ZWRfY29w eShfX2ZpcnN0MiwgX19sYXN0MiwgX19taWQpOw0KICAgICAgfQ0KICAgICAgaWYgKGZhbHNlKQ0K ICAgICAgICB7DQogICAgICAgICAgX0Rlc3Ryb3koX19yZXN1bHQsIF9fbWlkKTsNCiAgICAgICAg ICA7DQogICAgICAgIH0NCiAgICB9DQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh cmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9JbnB1dEl0ZXI+DQogICAgaW5saW5lIF9G b3J3YXJkSXRlcg0KICAgIF9fdW5pbml0aWFsaXplZF9maWxsX2NvcHkoX0ZvcndhcmRJdGVyIF9f cmVzdWx0LCBfRm9yd2FyZEl0ZXIgX19taWQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBfVHAmIF9feCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0 ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QpDQogICAgew0KICAgICAgdW5pbml0aWFsaXpl ZF9maWxsKF9fcmVzdWx0LCBfX21pZCwgX194KTsNCiAgICAgIGlmICh0cnVlKSB7DQogICAgICAg IHJldHVybiB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX21pZCk7DQogICAg ICB9DQogICAgICBpZiAoZmFsc2UpDQogICAgICAgIHsNCiAgICAgICAgICBfRGVzdHJveShfX3Jl c3VsdCwgX19taWQpOw0KICAgICAgICAgIDsNCiAgICAgICAgfQ0KICAgIH0NCg0KDQoNCg0KICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVu YW1lIF9UcD4NCiAgICBpbmxpbmUgdm9pZA0KICAgIF9fdW5pbml0aWFsaXplZF9jb3B5X2ZpbGwo X0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0 MiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194KQ0KICAgIHsN CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZDIgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEs IF9fbGFzdDEsIF9fZmlyc3QyKTsNCiAgICAgIGlmICh0cnVlKSB7DQogICAgICAgIHVuaW5pdGlh bGl6ZWRfZmlsbChfX21pZDIsIF9fbGFzdDIsIF9feCk7DQogICAgICB9DQogICAgICBpZiAoZmFs c2UpDQogICAgICAgIHsNCiAgICAgICAgICBfRGVzdHJveShfX2ZpcnN0MiwgX19taWQyKTsNCiAg ICAgICAgICA7DQogICAgICAgIH0NCiAgICB9DQoNCn0NCiMgNTkgInQ6L21zeXMvMS4wL21pbmd3 L2luY2x1ZGUvZysrLXYzL21lbW9yeSIgMiAzDQojIDEgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RsX3Jhd19zdG9yYWdlX2l0ZXIuaCIgMSAzDQojIDY0ICJ0Oi9tc3lz LzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9yYXdfc3RvcmFnZV9pdGVyLmgiIDMN Cm5hbWVzcGFjZSBzdGQNCnsNCg0KDQoNCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy YXRvciwgY2xhc3MgX1RwPg0KICBjbGFzcyByYXdfc3RvcmFnZV9pdGVyYXRvcg0KICAgIDogcHVi bGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+ DQogICAgew0KICAgIHByb3RlY3RlZDoNCiAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX01faXRlcjsN Cg0KICAgIHB1YmxpYzoNCiAgICAgIGV4cGxpY2l0DQogICAgICByYXdfc3RvcmFnZV9pdGVyYXRv cihfRm9yd2FyZEl0ZXJhdG9yIF9feCkgOiBfTV9pdGVyKF9feCkge30NCg0KICAgICAgcmF3X3N0 b3JhZ2VfaXRlcmF0b3ImDQogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQ0KDQog ICAgICByYXdfc3RvcmFnZV9pdGVyYXRvciYNCiAgICAgIG9wZXJhdG9yPShjb25zdCBfVHAmIF9f ZWxlbWVudCkNCiAgICAgIHsNCiAgICAgICAgX0NvbnN0cnVjdCgmKl9NX2l0ZXIsIF9fZWxlbWVu dCk7DQogICAgICAgIHJldHVybiAqdGhpczsNCiAgICAgIH0NCg0KICAgICAgcmF3X3N0b3JhZ2Vf aXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPiYNCiAgICAgIG9wZXJhdG9yKysoKQ0KICAg ICAgew0KICAgICAgICArK19NX2l0ZXI7DQogICAgICAgIHJldHVybiAqdGhpczsNCiAgICAgIH0N Cg0KICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPg0KICAg ICAgb3BlcmF0b3IrKyhpbnQpDQogICAgICB7DQogICAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9y PF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4gX190bXAgPSAqdGhpczsNCiAgICAgICAgKytfTV9pdGVy Ow0KICAgICAgICByZXR1cm4gX190bXA7DQogICAgICB9DQogICAgfTsNCn0NCiMgNjAgInQ6L21z eXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL21lbW9yeSIgMiAzDQoNCm5hbWVzcGFjZSBzdGQN CnsNCg0KDQoNCg0KDQoNCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0KICBwYWlyPF9UcCosIHB0 cmRpZmZfdD4NCiAgX19nZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4sIF9UcCop DQogIHsNCiAgICBpZiAoX19sZW4gPiBwdHJkaWZmX3QoMjE0NzQ4MzY0NyAvIHNpemVvZihfVHAp KSkNCiAgICAgIF9fbGVuID0gMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApOw0KDQogICAgd2hpbGUg KF9fbGVuID4gMCkgew0KICAgICAgX1RwKiBfX3RtcCA9IChfVHAqKSBzdGQ6Om1hbGxvYygoc3Rk OjpzaXplX3QpX19sZW4gKiBzaXplb2YoX1RwKSk7DQogICAgICBpZiAoX190bXAgIT0gMCkNCiAg ICAgICAgcmV0dXJuIHBhaXI8X1RwKiwgcHRyZGlmZl90PihfX3RtcCwgX19sZW4pOw0KICAgICAg X19sZW4gLz0gMjsNCiAgICB9DQoNCiAgICByZXR1cm4gcGFpcjxfVHAqLCBwdHJkaWZmX3Q+KChf VHAqKTAsIDApOw0KICB9DQojIDEwMiAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMv bWVtb3J5IiAzDQogIHRlbXBsYXRlIDxjbGFzcyBfVHA+DQogIGlubGluZSBwYWlyPF9UcCosIHB0 cmRpZmZfdD4gZ2V0X3RlbXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVuKSB7DQogICAgcmV0 dXJuIF9fZ2V0X3RlbXBvcmFyeV9idWZmZXIoX19sZW4sIChfVHAqKSAwKTsNCiAgfQ0KIyAxMTQg InQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL21lbW9yeSIgMw0KICB0ZW1wbGF0ZSA8 Y2xhc3MgX1RwPg0KICB2b2lkIHJldHVybl90ZW1wb3JhcnlfYnVmZmVyKF9UcCogX19wKSB7DQog ICAgc3RkOjpmcmVlKF9fcCk7DQogIH0NCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4NCiAgc3Ry dWN0IGF1dG9fcHRyX3JlZg0Kew0KICAgX1RwMSogX01fcHRyOw0KICAgYXV0b19wdHJfcmVmKF9U cDEqIF9fcCkgOiBfTV9wdHIoX19wKSB7fQ0KfTsNCg0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9U cD4NCiAgY2xhc3MgYXV0b19wdHINCnsNCnByaXZhdGU6DQogIF9UcCogX01fcHRyOw0KDQpwdWJs aWM6DQogIHR5cGVkZWYgX1RwIGVsZW1lbnRfdHlwZTsNCg0KICBleHBsaWNpdCBhdXRvX3B0cihf VHAqIF9fcCA9IDApIHRocm93KCkgOiBfTV9wdHIoX19wKSB7fQ0KICBhdXRvX3B0cihhdXRvX3B0 ciYgX19hKSB0aHJvdygpIDogX01fcHRyKF9fYS5yZWxlYXNlKCkpIHt9DQoNCiAgdGVtcGxhdGUg PGNsYXNzIF9UcDE+IGF1dG9fcHRyKGF1dG9fcHRyPF9UcDE+JiBfX2EpIHRocm93KCkNCiAgICA6 IF9NX3B0cihfX2EucmVsZWFzZSgpKSB7fQ0KDQogIGF1dG9fcHRyJiBvcGVyYXRvcj0oYXV0b19w dHImIF9fYSkgdGhyb3coKSB7DQogICAgcmVzZXQoX19hLnJlbGVhc2UoKSk7DQogICAgcmV0dXJu ICp0aGlzOw0KICB9DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+DQogIGF1dG9fcHRyJiBvcGVy YXRvcj0oYXV0b19wdHI8X1RwMT4mIF9fYSkgdGhyb3coKSB7DQogICAgcmVzZXQoX19hLnJlbGVh c2UoKSk7DQogICAgcmV0dXJuICp0aGlzOw0KICB9DQoNCg0KDQoNCg0KICB+YXV0b19wdHIoKSB7 IGRlbGV0ZSBfTV9wdHI7IH0NCg0KICBfVHAmIG9wZXJhdG9yKigpIGNvbnN0IHRocm93KCkgew0K ICAgIHJldHVybiAqX01fcHRyOw0KICB9DQogIF9UcCogb3BlcmF0b3ItPigpIGNvbnN0IHRocm93 KCkgew0KICAgIHJldHVybiBfTV9wdHI7DQogIH0NCiAgX1RwKiBnZXQoKSBjb25zdCB0aHJvdygp IHsNCiAgICByZXR1cm4gX01fcHRyOw0KICB9DQogIF9UcCogcmVsZWFzZSgpIHRocm93KCkgew0K ICAgIF9UcCogX190bXAgPSBfTV9wdHI7DQogICAgX01fcHRyID0gMDsNCiAgICByZXR1cm4gX190 bXA7DQogIH0NCiAgdm9pZCByZXNldChfVHAqIF9fcCA9IDApIHRocm93KCkgew0KICAgIGlmIChf X3AgIT0gX01fcHRyKSB7DQogICAgICBkZWxldGUgX01fcHRyOw0KICAgICAgX01fcHRyID0gX19w Ow0KICAgIH0NCiAgfQ0KDQpwdWJsaWM6DQogIGF1dG9fcHRyKGF1dG9fcHRyX3JlZjxfVHA+IF9f cmVmKSB0aHJvdygpDQogICAgOiBfTV9wdHIoX19yZWYuX01fcHRyKSB7fQ0KDQogIGF1dG9fcHRy JiBvcGVyYXRvcj0oYXV0b19wdHJfcmVmPF9UcD4gX19yZWYpIHRocm93KCkgew0KICAgIGlmIChf X3JlZi5fTV9wdHIgIT0gdGhpcy0+Z2V0KCkpIHsNCiAgICAgIGRlbGV0ZSBfTV9wdHI7DQogICAg ICBfTV9wdHIgPSBfX3JlZi5fTV9wdHI7DQogICAgfQ0KICAgIHJldHVybiAqdGhpczsNCiAgfQ0K DQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBvcGVyYXRvciBhdXRvX3B0cl9yZWY8X1RwMT4oKSB0 aHJvdygpDQogICAgeyByZXR1cm4gYXV0b19wdHJfcmVmPF9UcD4odGhpcy0+cmVsZWFzZSgpKTsg fQ0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gb3BlcmF0b3IgYXV0b19wdHI8X1RwMT4oKSB0aHJv dygpDQogICAgeyByZXR1cm4gYXV0b19wdHI8X1RwMT4odGhpcy0+cmVsZWFzZSgpKTsgfQ0KfTsN Cg0KfQ0KIyA0OSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvc3RyaW5nIiAyIDMN Cg0KDQoNCiMgMSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfZnVu Y3Rpb24uaCIgMSAzDQojIDY0ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRz L3N0bF9mdW5jdGlvbi5oIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQojIDEwMSAidDovbXN5cy8xLjAv bWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfZnVuY3Rpb24uaCIgMw0KdGVtcGxhdGUgPGNs YXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+DQpzdHJ1Y3QgdW5hcnlfZnVuY3Rpb24gew0KICB0eXBl ZGVmIF9BcmcgYXJndW1lbnRfdHlwZTsNCiAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOw0K fTsNCg0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xhc3MgX1Jl c3VsdD4NCnN0cnVjdCBiaW5hcnlfZnVuY3Rpb24gew0KICB0eXBlZGVmIF9BcmcxIGZpcnN0X2Fy Z3VtZW50X3R5cGU7DQogIHR5cGVkZWYgX0FyZzIgc2Vjb25kX2FyZ3VtZW50X3R5cGU7DQogIHR5 cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsNCn07DQojIDEyNyAidDovbXN5cy8xLjAvbWluZ3cv aW5jbHVkZS9nKystdjMvYml0cy9zdGxfZnVuY3Rpb24uaCIgMw0KdGVtcGxhdGUgPGNsYXNzIF9U cD4NCnN0cnVjdCBwbHVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gew0K ICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsg cmV0dXJuIF9feCArIF9feTsgfQ0KfTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0Kc3RydWN0 IG1pbnVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gew0KICBfVHAgb3Bl cmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9f eCAtIF9feTsgfQ0KfTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0Kc3RydWN0IG11bHRpcGxp ZXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7DQogIF9UcCBvcGVyYXRv cigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICog X195OyB9DQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+DQpzdHJ1Y3QgZGl2aWRlcyA6IHB1 YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsNCiAgX1RwIG9wZXJhdG9yKCkoY29u c3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggLyBfX3k7IH0N Cn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCnN0cnVjdCBtb2R1bHVzIDogcHVibGljIGJp bmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4NCnsNCiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1Rw JiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggJSBfX3k7IH0NCn07DQoN Cg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCnN0cnVjdCBuZWdhdGUgOiBwdWJsaWMgdW5hcnlfZnVu Y3Rpb248X1RwLF9UcD4NCnsNCiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0 IHsgcmV0dXJuIC1fX3g7IH0NCn07DQojIDE3MyAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9n KystdjMvYml0cy9zdGxfZnVuY3Rpb24uaCIgMw0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCnN0cnVj dCBlcXVhbF90byA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPg0Kew0KICBi b29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJl dHVybiBfX3ggPT0gX195OyB9DQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+DQpzdHJ1Y3Qg bm90X2VxdWFsX3RvIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+DQp7DQog IGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsg cmV0dXJuIF9feCAhPSBfX3k7IH0NCn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCnN0cnVj dCBncmVhdGVyIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+DQp7DQogIGJv b2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0 dXJuIF9feCA+IF9feTsgfQ0KfTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0Kc3RydWN0IGxl c3MgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4NCnsNCiAgYm9vbCBvcGVy YXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194 IDwgX195OyB9DQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+DQpzdHJ1Y3QgZ3JlYXRlcl9l cXVhbCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPg0Kew0KICBib29sIG9w ZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBf X3ggPj0gX195OyB9DQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+DQpzdHJ1Y3QgbGVzc19l cXVhbCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPg0Kew0KICBib29sIG9w ZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBf X3ggPD0gX195OyB9DQp9Ow0KIyAyMjIgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYz L2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMNCnRlbXBsYXRlIDxjbGFzcyBfVHA+DQpzdHJ1Y3QgbG9n aWNhbF9hbmQgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4NCnsNCiAgYm9v bCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1 cm4gX194ICYmIF9feTsgfQ0KfTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0Kc3RydWN0IGxv Z2ljYWxfb3IgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4NCnsNCiAgYm9v bCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1 cm4gX194IHx8IF9feTsgfQ0KfTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0Kc3RydWN0IGxv Z2ljYWxfbm90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxib29sPg0Kew0KICBib29sIG9w ZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuICFfX3g7IH0NCn07DQojIDI3 MSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfZnVuY3Rpb24uaCIg Mw0KdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+DQpjbGFzcyB1bmFyeV9uZWdhdGUNCiAgOiBw dWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1ByZWRpY2F0ZTo6YXJndW1lbnRfdHlwZSwg Ym9vbD4gew0KcHJvdGVjdGVkOg0KICBfUHJlZGljYXRlIF9NX3ByZWQ7DQpwdWJsaWM6DQogIGV4 cGxpY2l0IHVuYXJ5X25lZ2F0ZShjb25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChfX3gp IHt9DQogIGJvb2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRlOjphcmd1bWVu dF90eXBlJiBfX3gpIGNvbnN0IHsNCiAgICByZXR1cm4gIV9NX3ByZWQoX194KTsNCiAgfQ0KfTsN Cg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4NCmlubGluZSB1bmFyeV9uZWdhdGU8X1By ZWRpY2F0ZT4NCm5vdDEoY29uc3QgX1ByZWRpY2F0ZSYgX19wcmVkKQ0Kew0KICByZXR1cm4gdW5h cnlfbmVnYXRlPF9QcmVkaWNhdGU+KF9fcHJlZCk7DQp9DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9Q cmVkaWNhdGU+DQpjbGFzcyBiaW5hcnlfbmVnYXRlDQogIDogcHVibGljIGJpbmFyeV9mdW5jdGlv bjx0eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJzdF9hcmd1bWVudF90eXBlLA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUs DQogICAgICAgICAgICAgICAgICAgICAgICAgICBib29sPiB7DQpwcm90ZWN0ZWQ6DQogIF9QcmVk aWNhdGUgX01fcHJlZDsNCnB1YmxpYzoNCiAgZXhwbGljaXQgYmluYXJ5X25lZ2F0ZShjb25zdCBf UHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChfX3gpIHt9DQogIGJvb2wgb3BlcmF0b3IoKShjb25z dCB0eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gsDQogICAgICAg ICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRlOjpzZWNvbmRfYXJndW1lbnRfdHlw ZSYgX195KSBjb25zdA0KICB7DQogICAgcmV0dXJuICFfTV9wcmVkKF9feCwgX195KTsNCiAgfQ0K fTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4NCmlubGluZSBiaW5hcnlfbmVnYXRl PF9QcmVkaWNhdGU+DQpub3QyKGNvbnN0IF9QcmVkaWNhdGUmIF9fcHJlZCkNCnsNCiAgcmV0dXJu IGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVkKTsNCn0NCiMgMzQ5ICJ0Oi9tc3lzLzEu MC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzDQp0ZW1wbGF0ZSA8 Y2xhc3MgX09wZXJhdGlvbj4NCmNsYXNzIGJpbmRlcjFzdA0KICA6IHB1YmxpYyB1bmFyeV9mdW5j dGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGU+IHsNCnBy b3RlY3RlZDoNCiAgX09wZXJhdGlvbiBvcDsNCiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3Rf YXJndW1lbnRfdHlwZSB2YWx1ZTsNCnB1YmxpYzoNCiAgYmluZGVyMXN0KGNvbnN0IF9PcGVyYXRp b24mIF9feCwNCiAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2Fy Z3VtZW50X3R5cGUmIF9feSkNCiAgICAgIDogb3AoX194KSwgdmFsdWUoX195KSB7fQ0KICB0eXBl bmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQ0KICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1l IF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsNCiAgICByZXR1 cm4gb3AodmFsdWUsIF9feCk7DQogIH0NCg0KDQogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3Vs dF90eXBlDQogIG9wZXJhdG9yKCkodHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50 X3R5cGUmIF9feCkgY29uc3Qgew0KICAgIHJldHVybiBvcCh2YWx1ZSwgX194KTsNCiAgfQ0KDQp9 Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uLCBjbGFzcyBfVHA+DQppbmxpbmUgYmlu ZGVyMXN0PF9PcGVyYXRpb24+DQpiaW5kMXN0KGNvbnN0IF9PcGVyYXRpb24mIF9fZm4sIGNvbnN0 IF9UcCYgX194KQ0Kew0KICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3Vt ZW50X3R5cGUgX0FyZzFfdHlwZTsNCiAgcmV0dXJuIGJpbmRlcjFzdDxfT3BlcmF0aW9uPihfX2Zu LCBfQXJnMV90eXBlKF9feCkpOw0KfQ0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uPg0K Y2xhc3MgYmluZGVyMm5kDQogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVy YXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgIHR5 cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlPiB7DQpwcm90ZWN0ZWQ6DQogIF9PcGVyYXRp b24gb3A7DQogIHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlIHZhbHVl Ow0KcHVibGljOg0KICBiaW5kZXIybmQoY29uc3QgX09wZXJhdGlvbiYgX194LA0KICAgICAgICAg ICAgY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feSkN CiAgICAgIDogb3AoX194KSwgdmFsdWUoX195KSB7fQ0KICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpy ZXN1bHRfdHlwZQ0KICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0 X2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3Qgew0KICAgIHJldHVybiBvcChfX3gsIHZhbHVlKTsN CiAgfQ0KDQoNCiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUNCiAgb3BlcmF0b3Io KSh0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsN CiAgICByZXR1cm4gb3AoX194LCB2YWx1ZSk7DQogIH0NCg0KfTsNCg0KDQp0ZW1wbGF0ZSA8Y2xh c3MgX09wZXJhdGlvbiwgY2xhc3MgX1RwPg0KaW5saW5lIGJpbmRlcjJuZDxfT3BlcmF0aW9uPg0K YmluZDJuZChjb25zdCBfT3BlcmF0aW9uJiBfX2ZuLCBjb25zdCBfVHAmIF9feCkNCnsNCiAgdHlw ZWRlZiB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSBfQXJnMl90eXBl Ow0KICByZXR1cm4gYmluZGVyMm5kPF9PcGVyYXRpb24+KF9fZm4sIF9BcmcyX3R5cGUoX194KSk7 DQp9DQojIDQzOCAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfZnVu Y3Rpb24uaCIgMw0KdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+DQpjbGFzcyBw b2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9S ZXN1bHQ+IHsNCnByb3RlY3RlZDoNCiAgX1Jlc3VsdCAoKl9NX3B0cikoX0FyZyk7DQpwdWJsaWM6 DQogIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24oKSB7fQ0KICBleHBsaWNpdCBwb2ludGVyX3Rv X3VuYXJ5X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gpKF9BcmcpKSA6IF9NX3B0cihfX3gpIHt9DQog IF9SZXN1bHQgb3BlcmF0b3IoKShfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gX01fcHRyKF9feCk7 IH0NCn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+DQppbmxpbmUg cG9pbnRlcl90b191bmFyeV9mdW5jdGlvbjxfQXJnLCBfUmVzdWx0PiBwdHJfZnVuKF9SZXN1bHQg KCpfX3gpKF9BcmcpKQ0Kew0KICByZXR1cm4gcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbjxfQXJn LCBfUmVzdWx0PihfX3gpOw0KfQ0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0Fy ZzIsIGNsYXNzIF9SZXN1bHQ+DQpjbGFzcyBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbiA6DQog IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3VsdD4gew0KcHJvdGVjdGVk Og0KICAgIF9SZXN1bHQgKCpfTV9wdHIpKF9BcmcxLCBfQXJnMik7DQpwdWJsaWM6DQogICAgcG9p bnRlcl90b19iaW5hcnlfZnVuY3Rpb24oKSB7fQ0KICAgIGV4cGxpY2l0IHBvaW50ZXJfdG9fYmlu YXJ5X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gpKF9BcmcxLCBfQXJnMikpDQogICAgICA6IF9NX3B0 cihfX3gpIHt9DQogICAgX1Jlc3VsdCBvcGVyYXRvcigpKF9BcmcxIF9feCwgX0FyZzIgX195KSBj b25zdCB7DQogICAgICByZXR1cm4gX01fcHRyKF9feCwgX195KTsNCiAgICB9DQp9Ow0KDQoNCnRl bXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+DQppbmxpbmUg cG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3VsdD4NCnB0cl9mdW4o X1Jlc3VsdCAoKl9feCkoX0FyZzEsIF9BcmcyKSkgew0KICByZXR1cm4gcG9pbnRlcl90b19iaW5h cnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3VsdD4oX194KTsNCn0NCg0KDQp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwPg0Kc3RydWN0IF9JZGVudGl0eSA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAs X1RwPiB7DQogIF9UcCYgb3BlcmF0b3IoKShfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9 DQogIGNvbnN0IF9UcCYgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QgeyByZXR1cm4g X194OyB9DQp9Ow0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+DQpzdHJ1Y3QgX1NlbGVjdDFzdCA6 IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfUGFpciwgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGU+ IHsNCiAgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGUmIG9wZXJhdG9yKCkoX1BhaXImIF9feCkg Y29uc3Qgew0KICAgIHJldHVybiBfX3guZmlyc3Q7DQogIH0NCiAgY29uc3QgdHlwZW5hbWUgX1Bh aXI6OmZpcnN0X3R5cGUmIG9wZXJhdG9yKCkoY29uc3QgX1BhaXImIF9feCkgY29uc3Qgew0KICAg IHJldHVybiBfX3guZmlyc3Q7DQogIH0NCn07DQoNCnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4NCnN0 cnVjdCBfU2VsZWN0Mm5kIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9QYWlyLCB0eXBlbmFtZSBf UGFpcjo6c2Vjb25kX3R5cGU+DQp7DQogIHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZSYgb3Bl cmF0b3IoKShfUGFpciYgX194KSBjb25zdCB7DQogICAgcmV0dXJuIF9feC5zZWNvbmQ7DQogIH0N CiAgY29uc3QgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlJiBvcGVyYXRvcigpKGNvbnN0IF9Q YWlyJiBfX3gpIGNvbnN0IHsNCiAgICByZXR1cm4gX194LnNlY29uZDsNCiAgfQ0KfTsNCiMgNTI4 ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9mdW5jdGlvbi5oIiAz DQp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPg0KY2xhc3MgbWVtX2Z1bl90IDogcHVi bGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCosX1JldD4gew0KcHVibGljOg0KICBleHBsaWNpdCBtZW1f ZnVuX3QoX1JldCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9DQogIF9SZXQgb3BlcmF0 b3IoKShfVHAqIF9fcCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0NCnByaXZhdGU6 DQogIF9SZXQgKF9UcDo6Kl9NX2YpKCk7DQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBj bGFzcyBfVHA+DQpjbGFzcyBjb25zdF9tZW1fZnVuX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248 Y29uc3QgX1RwKixfUmV0PiB7DQpwdWJsaWM6DQogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fdChf UmV0IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30NCiAgX1JldCBvcGVyYXRv cigpKGNvbnN0IF9UcCogX19wKSBjb25zdCB7IHJldHVybiAoX19wLT4qX01fZikoKTsgfQ0KcHJp dmF0ZToNCiAgX1JldCAoX1RwOjoqX01fZikoKSBjb25zdDsNCn07DQoNCg0KdGVtcGxhdGUgPGNs YXNzIF9SZXQsIGNsYXNzIF9UcD4NCmNsYXNzIG1lbV9mdW5fcmVmX3QgOiBwdWJsaWMgdW5hcnlf ZnVuY3Rpb248X1RwLF9SZXQ+IHsNCnB1YmxpYzoNCiAgZXhwbGljaXQgbWVtX2Z1bl9yZWZfdChf UmV0IChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30NCiAgX1JldCBvcGVyYXRvcigpKF9U cCYgX19yKSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKSgpOyB9DQpwcml2YXRlOg0KICBfUmV0 IChfVHA6OipfTV9mKSgpOw0KfTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1Rw Pg0KY2xhc3MgY29uc3RfbWVtX2Z1bl9yZWZfdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAs X1JldD4gew0KcHVibGljOg0KICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3JlZl90KF9SZXQgKF9U cDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQ0KICBfUmV0IG9wZXJhdG9yKCkoY29u c3QgX1RwJiBfX3IpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKCk7IH0NCnByaXZhdGU6DQog IF9SZXQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7DQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfUmV0 LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+DQpjbGFzcyBtZW1fZnVuMV90IDogcHVibGljIGJpbmFy eV9mdW5jdGlvbjxfVHAqLF9BcmcsX1JldD4gew0KcHVibGljOg0KICBleHBsaWNpdCBtZW1fZnVu MV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30NCiAgX1JldCBvcGVy YXRvcigpKF9UcCogX19wLCBfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKF9f eCk7IH0NCnByaXZhdGU6DQogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOw0KfTsNCg0KDQp0ZW1w bGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPg0KY2xhc3MgY29uc3RfbWVt X2Z1bjFfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLF9SZXQ+IHsN CnB1YmxpYzoNCiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfdChfUmV0IChfVHA6OipfX3BmKShf QXJnKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9DQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAq IF9fcCwgX0FyZyBfX3gpIGNvbnN0DQogICAgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKF9feCk7IH0N CnByaXZhdGU6DQogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Ow0KfTsNCg0KDQp0ZW1w bGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPg0KY2xhc3MgbWVtX2Z1bjFf cmVmX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLF9SZXQ+IHsNCnB1YmxpYzoN CiAgZXhwbGljaXQgbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykpIDogX01f ZihfX3BmKSB7fQ0KICBfUmV0IG9wZXJhdG9yKCkoX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7 IHJldHVybiAoX19yLipfTV9mKShfX3gpOyB9DQpwcml2YXRlOg0KICBfUmV0IChfVHA6OipfTV9m KShfQXJnKTsNCn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3Mg X0FyZz4NCmNsYXNzIGNvbnN0X21lbV9mdW4xX3JlZl90IDogcHVibGljIGJpbmFyeV9mdW5jdGlv bjxfVHAsX0FyZyxfUmV0PiB7DQpwdWJsaWM6DQogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3Jl Zl90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30NCiAgX1Jl dCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9f ci4qX01fZikoX194KTsgfQ0KcHJpdmF0ZToNCiAgX1JldCAoX1RwOjoqX01fZikoX0FyZykgY29u c3Q7DQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+DQpjbGFzcyBtZW1fZnVuX3Q8dm9pZCwg X1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAqLHZvaWQ+IHsNCnB1YmxpYzoNCiAgZXhw bGljaXQgbWVtX2Z1bl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQ0KICB2 b2lkIG9wZXJhdG9yKCkoX1RwKiBfX3ApIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKCk7IH0NCnByaXZh dGU6DQogIHZvaWQgKF9UcDo6Kl9NX2YpKCk7DQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+ DQpjbGFzcyBjb25zdF9tZW1fZnVuX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlv bjxjb25zdCBfVHAqLHZvaWQ+IHsNCnB1YmxpYzoNCiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl90 KHZvaWQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQ0KICB2b2lkIG9wZXJh dG9yKCkoY29uc3QgX1RwKiBfX3ApIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKCk7IH0NCnByaXZhdGU6 DQogIHZvaWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7DQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBf VHA+DQpjbGFzcyBtZW1fZnVuX3JlZl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rp b248X1RwLHZvaWQ+IHsNCnB1YmxpYzoNCiAgZXhwbGljaXQgbWVtX2Z1bl9yZWZfdCh2b2lkIChf VHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30NCiAgdm9pZCBvcGVyYXRvcigpKF9UcCYgX19y KSBjb25zdCB7IChfX3IuKl9NX2YpKCk7IH0NCnByaXZhdGU6DQogIHZvaWQgKF9UcDo6Kl9NX2Yp KCk7DQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+DQpjbGFzcyBjb25zdF9tZW1fZnVuX3Jl Zl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLHZvaWQ+IHsNCnB1Ymxp YzoNCiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl9yZWZfdCh2b2lkIChfVHA6OipfX3BmKSgpIGNv bnN0KSA6IF9NX2YoX19wZikge30NCiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yKSBj b25zdCB7IChfX3IuKl9NX2YpKCk7IH0NCnByaXZhdGU6DQogIHZvaWQgKF9UcDo6Kl9NX2YpKCkg Y29uc3Q7DQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+DQpjbGFzcyBt ZW1fZnVuMV90PHZvaWQsIF9UcCwgX0FyZz4gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCos X0FyZyx2b2lkPiB7DQpwdWJsaWM6DQogIGV4cGxpY2l0IG1lbV9mdW4xX3Qodm9pZCAoX1RwOjoq X19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQ0KICB2b2lkIG9wZXJhdG9yKCkoX1RwKiBfX3As IF9BcmcgX194KSBjb25zdCB7IChfX3AtPipfTV9mKShfX3gpOyB9DQpwcml2YXRlOg0KICB2b2lk IChfVHA6OipfTV9mKShfQXJnKTsNCn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg X0FyZz4NCmNsYXNzIGNvbnN0X21lbV9mdW4xX3Q8dm9pZCwgX1RwLCBfQXJnPg0KICA6IHB1Ymxp YyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLHZvaWQ+IHsNCnB1YmxpYzoNCiAgZXhw bGljaXQgY29uc3RfbWVtX2Z1bjFfdCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBf TV9mKF9fcGYpIHt9DQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gp IGNvbnN0IHsgKF9fcC0+Kl9NX2YpKF9feCk7IH0NCnByaXZhdGU6DQogIHZvaWQgKF9UcDo6Kl9N X2YpKF9BcmcpIGNvbnN0Ow0KfTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJn Pg0KY2xhc3MgbWVtX2Z1bjFfcmVmX3Q8dm9pZCwgX1RwLCBfQXJnPg0KICA6IHB1YmxpYyBiaW5h cnlfZnVuY3Rpb248X1RwLF9Bcmcsdm9pZD4gew0KcHVibGljOg0KICBleHBsaWNpdCBtZW1fZnVu MV9yZWZfdCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9DQogIHZvaWQg b3BlcmF0b3IoKShfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fci4qX01fZikoX194KTsg fQ0KcHJpdmF0ZToNCiAgdm9pZCAoX1RwOjoqX01fZikoX0FyZyk7DQp9Ow0KDQoNCnRlbXBsYXRl IDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+DQpjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdDx2b2lk LCBfVHAsIF9Bcmc+DQogIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyx2b2lkPiB7 DQpwdWJsaWM6DQogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9f cGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30NCiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0 IF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyAoX19yLipfTV9mKShfX3gpOyB9DQpwcml2YXRl Og0KICB2b2lkIChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsNCn07DQoNCg0KDQoNCg0KdGVtcGxh dGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4NCmlubGluZSBtZW1fZnVuX3Q8X1JldCxfVHA+IG1l bV9mdW4oX1JldCAoX1RwOjoqX19mKSgpKQ0KICB7IHJldHVybiBtZW1fZnVuX3Q8X1JldCxfVHA+ KF9fZik7IH0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4NCmlubGluZSBjb25z dF9tZW1fZnVuX3Q8X1JldCxfVHA+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQ0K ICB7IHJldHVybiBjb25zdF9tZW1fZnVuX3Q8X1JldCxfVHA+KF9fZik7IH0NCg0KdGVtcGxhdGUg PGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4NCmlubGluZSBtZW1fZnVuX3JlZl90PF9SZXQsX1RwPiBt ZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKCkpDQogIHsgcmV0dXJuIG1lbV9mdW5fcmVmX3Q8 X1JldCxfVHA+KF9fZik7IH0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4NCmlu bGluZSBjb25zdF9tZW1fZnVuX3JlZl90PF9SZXQsX1RwPiBtZW1fZnVuX3JlZihfUmV0IChfVHA6 OipfX2YpKCkgY29uc3QpDQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW5fcmVmX3Q8X1JldCxfVHA+ KF9fZik7IH0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4N CmlubGluZSBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19m KShfQXJnKSkNCiAgeyByZXR1cm4gbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9DQoN CnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+DQppbmxpbmUgY29u c3RfbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoX0Fy ZykgY29uc3QpDQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4oX19m KTsgfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPg0KaW5s aW5lIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6 Kl9fZikoX0FyZykpDQogIHsgcmV0dXJuIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9f Zik7IH0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4NCmlu bGluZSBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPg0KbWVtX2Z1bl9yZWYoX1Jl dCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkNCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfcmVm X3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQ0KDQoNCg0KfQ0KIyA1MyAidDovbXN5cy8xLjAvbWlu Z3cvaW5jbHVkZS9nKystdjMvc3RyaW5nIiAyIDMNCiMgMSAidDovbXN5cy8xLjAvbWluZ3cvaW5j bHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcuaCIgMSAzDQojIDQ0ICJ0Oi9tc3lzLzEuMC9t aW5ndy9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzDQoNCiMgMSAidDovbXN5 cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1taW5ndzMyL2JpdHMvYXRvbWljaXR5 LmgiIDEgMw0KIyAzMyAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1t aW5ndzMyL2JpdHMvYXRvbWljaXR5LmgiIDMNCnR5cGVkZWYgaW50IF9BdG9taWNfd29yZDsNCg0K c3RhdGljIGlubGluZSBfQXRvbWljX3dvcmQNCl9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkN Cl9fZXhjaGFuZ2VfYW5kX2FkZCAodm9sYXRpbGUgX0F0b21pY193b3JkICpfX21lbSwgaW50IF9f dmFsKQ0Kew0KICByZWdpc3RlciBfQXRvbWljX3dvcmQgX19yZXN1bHQ7DQogIF9fYXNtX18gX192 b2xhdGlsZV9fICgibG9jazsgeGFkZGwgJTAsJTIiDQogICAgICAgICAgICAgICAgICAgICAgICA6 ICI9ciIgKF9fcmVzdWx0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgOiAiMCIgKF9fdmFsKSwg Im0iICgqX19tZW0pDQogICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsNCiAgcmV0 dXJuIF9fcmVzdWx0Ow0KfQ0KDQpzdGF0aWMgaW5saW5lIHZvaWQNCl9fYXR0cmlidXRlX18gKChf X3VudXNlZF9fKSkNCl9fYXRvbWljX2FkZCAodm9sYXRpbGUgX0F0b21pY193b3JkKiBfX21lbSwg aW50IF9fdmFsKQ0Kew0KICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxvY2s7IGFkZGwgJTAsJTEi DQogICAgICAgICAgICAgICAgICAgICAgICA6IDogImlyIiAoX192YWwpLCAibSIgKCpfX21lbSkg OiAibWVtb3J5Iik7DQp9DQojIDQ2ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9i aXRzL2Jhc2ljX3N0cmluZy5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KIyA4OCAidDovbXN5 cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcuaCIgMw0KICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4N CiAgICBjbGFzcyBiYXNpY19zdHJpbmcNCiAgICB7DQoNCiAgICBwdWJsaWM6DQogICAgICB0eXBl ZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6 OmNoYXJfdHlwZSB2YWx1ZV90eXBlOw0KICAgICAgdHlwZWRlZiBfQWxsb2MgYWxsb2NhdG9yX3R5 cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIHNpemVfdHlwZTsN CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5j ZV90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnJlZmVyZW5jZSByZWZlcmVu Y2U7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0 X3JlZmVyZW5jZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpwb2ludGVyIHBvaW50 ZXI7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6Y29uc3RfcG9pbnRlciBjb25zdF9w b2ludGVyOw0KICAgICAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPHBvaW50 ZXIsIGJhc2ljX3N0cmluZz4gaXRlcmF0b3I7DQogICAgICB0eXBlZGVmIF9fZ251X2N4eDo6X19u b3JtYWxfaXRlcmF0b3I8Y29uc3RfcG9pbnRlciwgYmFzaWNfc3RyaW5nPg0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfaXRl cmF0b3I7DQogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNv bnN0X3JldmVyc2VfaXRlcmF0b3I7DQogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRl cmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7DQoNCiAgICBwcml2YXRlOg0KIyAxMjMgInQ6L21zeXMv MS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMNCiAgICAgIHN0 cnVjdCBfUmVwDQogICAgICB7DQoNCiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRl bXBsYXRlIHJlYmluZDxjaGFyPjo6b3RoZXIgX1Jhd19ieXRlc19hbGxvYzsNCiMgMTQxICJ0Oi9t c3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzDQogICAg ICAgIHN0YXRpYyBjb25zdCBzaXplX3R5cGUgX1NfbWF4X3NpemU7DQogICAgICAgIHN0YXRpYyBj b25zdCBfQ2hhclQgX1NfdGVybWluYWw7DQoNCiAgICAgICAgc2l6ZV90eXBlIF9NX2xlbmd0aDsN CiAgICAgICAgc2l6ZV90eXBlIF9NX2NhcGFjaXR5Ow0KICAgICAgICBfQXRvbWljX3dvcmQgX01f cmVmZXJlbmNlczsNCg0KICAgICAgICBib29sDQogICAgICAgIF9NX2lzX2xlYWtlZCgpIGNvbnN0 DQogICAgICAgIHsgcmV0dXJuIF9NX3JlZmVyZW5jZXMgPCAwOyB9DQoNCiAgICAgICAgYm9vbA0K ICAgICAgICBfTV9pc19zaGFyZWQoKSBjb25zdA0KICAgICAgICB7IHJldHVybiBfTV9yZWZlcmVu Y2VzID4gMDsgfQ0KDQogICAgICAgIHZvaWQNCiAgICAgICAgX01fc2V0X2xlYWtlZCgpDQogICAg ICAgIHsgX01fcmVmZXJlbmNlcyA9IC0xOyB9DQoNCiAgICAgICAgdm9pZA0KICAgICAgICBfTV9z ZXRfc2hhcmFibGUoKQ0KICAgICAgICB7IF9NX3JlZmVyZW5jZXMgPSAwOyB9DQoNCiAgICAgICAg X0NoYXJUKg0KICAgICAgICBfTV9yZWZkYXRhKCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiBy ZWludGVycHJldF9jYXN0PF9DaGFyVCo+KHRoaXMgKyAxKTsgfQ0KDQogICAgICAgIF9DaGFyVCYN CiAgICAgICAgb3BlcmF0b3JbXShzaXplX3QgX19zKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJu IF9NX3JlZmRhdGEoKSBbX19zXTsgfQ0KDQogICAgICAgIF9DaGFyVCoNCiAgICAgICAgX01fZ3Jh Yihjb25zdCBfQWxsb2MmIF9fYWxsb2MxLCBjb25zdCBfQWxsb2MmIF9fYWxsb2MyKQ0KICAgICAg ICB7DQogICAgICAgICAgcmV0dXJuICghX01faXNfbGVha2VkKCkgJiYgX19hbGxvYzEgPT0gX19h bGxvYzIpDQogICAgICAgICAgICAgICAgICA/IF9NX3JlZmNvcHkoKSA6IF9NX2Nsb25lKF9fYWxs b2MxKTsNCiAgICAgICAgfQ0KDQoNCiAgICAgICAgc3RhdGljIF9SZXAqDQogICAgICAgIF9TX2Ny ZWF0ZShzaXplX3QsIGNvbnN0IF9BbGxvYyYpOw0KDQogICAgICAgIHZvaWQNCiAgICAgICAgX01f ZGlzcG9zZShjb25zdCBfQWxsb2MmIF9fYSkNCiAgICAgICAgew0KICAgICAgICAgIGlmIChfX2V4 Y2hhbmdlX2FuZF9hZGQoJl9NX3JlZmVyZW5jZXMsIC0xKSA8PSAwKQ0KICAgICAgICAgICAgX01f ZGVzdHJveShfX2EpOw0KICAgICAgICB9DQoNCiAgICAgICAgdm9pZA0KICAgICAgICBfTV9kZXN0 cm95KGNvbnN0IF9BbGxvYyYpIHRocm93KCk7DQoNCiAgICAgICAgX0NoYXJUKg0KICAgICAgICBf TV9yZWZjb3B5KCkgdGhyb3coKQ0KICAgICAgICB7DQogICAgICAgICAgX19hdG9taWNfYWRkKCZf TV9yZWZlcmVuY2VzLCAxKTsNCiAgICAgICAgICByZXR1cm4gX01fcmVmZGF0YSgpOw0KICAgICAg ICB9DQoNCiAgICAgICAgX0NoYXJUKg0KICAgICAgICBfTV9jbG9uZShjb25zdCBfQWxsb2MmLCBz aXplX3R5cGUgX19yZXMgPSAwKTsNCiAgICAgIH07DQoNCg0KICAgICAgc3RydWN0IF9BbGxvY19o aWRlciA6IF9BbGxvYw0KICAgICAgew0KICAgICAgICBfQWxsb2NfaGlkZXIoX0NoYXJUKiBfX2Rh dCwgY29uc3QgX0FsbG9jJiBfX2EpDQogICAgICAgIDogX0FsbG9jKF9fYSksIF9NX3AoX19kYXQp IHsgfQ0KDQogICAgICAgIF9DaGFyVCogX01fcDsNCiAgICAgIH07DQoNCiAgICBwdWJsaWM6DQoN Cg0KDQogICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlIG5wb3MgPSBzdGF0aWNfY2FzdDxzaXpl X3R5cGU+KC0xKTsNCg0KICAgIHByaXZhdGU6DQoNCiAgICAgIG11dGFibGUgX0FsbG9jX2hpZGVy IF9NX2RhdGFwbHVzOw0KDQoNCg0KICAgICAgc3RhdGljIHNpemVfdHlwZSBfU19lbXB0eV9yZXBf c3RvcmFnZVsoc2l6ZW9mKF9SZXApICsgc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2Yoc2l6ZV90eXBl KSAtIDEpL3NpemVvZihzaXplX3R5cGUpXTsNCg0KICAgICAgX0NoYXJUKg0KICAgICAgX01fZGF0 YSgpIGNvbnN0DQogICAgICB7IHJldHVybiBfTV9kYXRhcGx1cy5fTV9wOyB9DQoNCiAgICAgIF9D aGFyVCoNCiAgICAgIF9NX2RhdGEoX0NoYXJUKiBfX3ApDQogICAgICB7IHJldHVybiAoX01fZGF0 YXBsdXMuX01fcCA9IF9fcCk7IH0NCg0KICAgICAgX1JlcCoNCiAgICAgIF9NX3JlcCgpIGNvbnN0 DQogICAgICB7IHJldHVybiAmKChyZWludGVycHJldF9jYXN0PF9SZXAqPiAoX01fZGF0YSgpKSlb LTFdKTsgfQ0KDQoNCg0KICAgICAgaXRlcmF0b3INCiAgICAgIF9NX2liZWdpbigpIGNvbnN0IHsg cmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSk7IH0NCg0KICAgICAgaXRlcmF0b3INCiAgICAgIF9N X2llbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkgKyB0aGlzLT5zaXplKCkp OyB9DQoNCiAgICAgIHZvaWQNCiAgICAgIF9NX2xlYWsoKQ0KICAgICAgew0KICAgICAgICBpZiAo IV9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkNCiAgICAgICAgICBfTV9sZWFrX2hhcmQoKTsNCiAg ICAgIH0NCg0KICAgICAgaXRlcmF0b3INCiAgICAgIF9NX2NoZWNrKHNpemVfdHlwZSBfX3Bvcykg Y29uc3QNCiAgICAgIHsNCiAgICAgICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQ0KICAgICAg ICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6Ol9NX2NoZWNrIik7DQogICAg ICAgIHJldHVybiBfTV9pYmVnaW4oKSArIF9fcG9zOw0KICAgICAgfQ0KDQoNCiAgICAgIGl0ZXJh dG9yDQogICAgICBfTV9mb2xkKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fb2ZmKSBjb25z dA0KICAgICAgew0KICAgICAgICBib29sIF9fdGVzdG9mZiA9IF9fb2ZmIDwgdGhpcy0+c2l6ZSgp IC0gX19wb3M7DQogICAgICAgIHNpemVfdHlwZSBfX25ld29mZiA9IF9fdGVzdG9mZiA/IF9fb2Zm IDogdGhpcy0+c2l6ZSgpIC0gX19wb3M7DQogICAgICAgIHJldHVybiAoX01faWJlZ2luKCkgKyBf X3BvcyArIF9fbmV3b2ZmKTsNCiAgICAgIH0NCg0KDQoNCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9J dGVyYXRvcj4NCiAgICAgICAgc3RhdGljIHZvaWQNCiAgICAgICAgX1NfY29weV9jaGFycyhfQ2hh clQqIF9fcCwgX0l0ZXJhdG9yIF9fazEsIF9JdGVyYXRvciBfX2syKQ0KICAgICAgICB7DQogICAg ICAgICAgZm9yICg7IF9fazEgIT0gX19rMjsgKytfX2sxLCArK19fcCkNCiAgICAgICAgICAgIHRy YWl0c190eXBlOjphc3NpZ24oKl9fcCwgKl9fazEpOw0KICAgICAgICB9DQoNCiAgICAgIHN0YXRp YyB2b2lkDQogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBpdGVyYXRvciBfX2sxLCBp dGVyYXRvciBfX2syKQ0KICAgICAgeyBfU19jb3B5X2NoYXJzKF9fcCwgX19rMS5iYXNlKCksIF9f azIuYmFzZSgpKTsgfQ0KDQogICAgICBzdGF0aWMgdm9pZA0KICAgICAgX1NfY29weV9jaGFycyhf Q2hhclQqIF9fcCwgY29uc3RfaXRlcmF0b3IgX19rMSwgY29uc3RfaXRlcmF0b3IgX19rMikNCiAg ICAgIHsgX1NfY29weV9jaGFycyhfX3AsIF9fazEuYmFzZSgpLCBfX2syLmJhc2UoKSk7IH0NCg0K ICAgICAgc3RhdGljIHZvaWQNCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIF9DaGFy VCogX19rMSwgX0NoYXJUKiBfX2syKQ0KICAgICAgeyB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9f azEsIF9fazIgLSBfX2sxKTsgfQ0KDQogICAgICBzdGF0aWMgdm9pZA0KICAgICAgX1NfY29weV9j aGFycyhfQ2hhclQqIF9fcCwgY29uc3QgX0NoYXJUKiBfX2sxLCBjb25zdCBfQ2hhclQqIF9fazIp DQogICAgICB7IHRyYWl0c190eXBlOjpjb3B5KF9fcCwgX19rMSwgX19rMiAtIF9fazEpOyB9DQoN CiAgICAgIHZvaWQNCiAgICAgIF9NX211dGF0ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBf X2xlbjEsIHNpemVfdHlwZSBfX2xlbjIpOw0KDQogICAgICB2b2lkDQogICAgICBfTV9sZWFrX2hh cmQoKTsNCg0KICAgICAgc3RhdGljIF9SZXAmDQogICAgICBfU19lbXB0eV9yZXAoKQ0KICAgICAg eyByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8X1JlcCo+KCZfU19lbXB0eV9yZXBfc3RvcmFnZSk7 IH0NCg0KICAgIHB1YmxpYzoNCg0KDQoNCg0KICAgICAgaW5saW5lDQogICAgICBiYXNpY19zdHJp bmcoKTsNCg0KICAgICAgZXhwbGljaXQNCiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQWxsb2Mm IF9fYSk7DQoNCg0KICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIp Ow0KICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlw ZSBfX3BvcywNCiAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uID0gbnBvcyk7DQogICAg ICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9z LA0KICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24sIGNvbnN0IF9BbGxvYyYgX19hKTsN Cg0KICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLA0K ICAgICAgICAgICAgICAgICAgIGNvbnN0IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOw0KICAgICAg YmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxv YygpKTsNCiAgICAgIGJhc2ljX3N0cmluZyhzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25z dCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsNCg0KICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0 SXRlcmF0b3I+DQogICAgICAgIGJhc2ljX3N0cmluZyhfSW5wdXRJdGVyYXRvciBfX2JlZywgX0lu cHV0SXRlcmF0b3IgX19lbmQsDQogICAgICAgICAgICAgICAgICAgICBjb25zdCBfQWxsb2MmIF9f YSA9IF9BbGxvYygpKTsNCg0KICAgICAgfmJhc2ljX3N0cmluZygpDQogICAgICB7IF9NX3JlcCgp LT5fTV9kaXNwb3NlKHRoaXMtPmdldF9hbGxvY2F0b3IoKSk7IH0NCg0KICAgICAgYmFzaWNfc3Ry aW5nJg0KICAgICAgb3BlcmF0b3I9KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIHsgcmV0dXJu IHRoaXMtPmFzc2lnbihfX3N0cik7IH0NCg0KICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgb3Bl cmF0b3I9KGNvbnN0IF9DaGFyVCogX19zKSB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19zKTsgfQ0K DQogICAgICBiYXNpY19zdHJpbmcmDQogICAgICBvcGVyYXRvcj0oX0NoYXJUIF9fYykgeyByZXR1 cm4gdGhpcy0+YXNzaWduKDEsIF9fYyk7IH0NCg0KDQogICAgICBpdGVyYXRvcg0KICAgICAgYmVn aW4oKQ0KICAgICAgew0KICAgICAgICBfTV9sZWFrKCk7DQogICAgICAgIHJldHVybiBpdGVyYXRv cihfTV9kYXRhKCkpOw0KICAgICAgfQ0KDQogICAgICBjb25zdF9pdGVyYXRvcg0KICAgICAgYmVn aW4oKSBjb25zdA0KICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX01fZGF0YSgpKTsgfQ0K DQogICAgICBpdGVyYXRvcg0KICAgICAgZW5kKCkNCiAgICAgIHsNCiAgICAgICAgIF9NX2xlYWso KTsNCiAgICAgICAgIHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkgKyB0aGlzLT5zaXplKCkpOw0K ICAgICAgfQ0KDQogICAgICBjb25zdF9pdGVyYXRvcg0KICAgICAgZW5kKCkgY29uc3QNCiAgICAg IHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSk7IH0NCg0K ICAgICAgcmV2ZXJzZV9pdGVyYXRvcg0KICAgICAgcmJlZ2luKCkNCiAgICAgIHsgcmV0dXJuIHJl dmVyc2VfaXRlcmF0b3IodGhpcy0+ZW5kKCkpOyB9DQoNCiAgICAgIGNvbnN0X3JldmVyc2VfaXRl cmF0b3INCiAgICAgIHJiZWdpbigpIGNvbnN0DQogICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNl X2l0ZXJhdG9yKHRoaXMtPmVuZCgpKTsgfQ0KDQogICAgICByZXZlcnNlX2l0ZXJhdG9yDQogICAg ICByZW5kKCkNCiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IodGhpcy0+YmVnaW4oKSk7 IH0NCg0KICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcg0KICAgICAgcmVuZCgpIGNvbnN0DQog ICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmJlZ2luKCkpOyB9DQoN CiAgICBwdWJsaWM6DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgc2l6ZSgpIGNvbnN0IHsgcmV0 dXJuIF9NX3JlcCgpLT5fTV9sZW5ndGg7IH0NCg0KICAgICAgc2l6ZV90eXBlDQogICAgICBsZW5n dGgoKSBjb25zdCB7IHJldHVybiBfTV9yZXAoKS0+X01fbGVuZ3RoOyB9DQoNCiAgICAgIHNpemVf dHlwZQ0KICAgICAgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBfUmVwOjpfU19tYXhfc2l6ZTsg fQ0KDQogICAgICB2b2lkDQogICAgICByZXNpemUoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYyk7 DQoNCiAgICAgIHZvaWQNCiAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19uKSB7IHRoaXMtPnJlc2l6 ZShfX24sIF9DaGFyVCgpKTsgfQ0KDQogICAgICBzaXplX3R5cGUNCiAgICAgIGNhcGFjaXR5KCkg Y29uc3QgeyByZXR1cm4gX01fcmVwKCktPl9NX2NhcGFjaXR5OyB9DQoNCiAgICAgIHZvaWQNCiAg ICAgIHJlc2VydmUoc2l6ZV90eXBlIF9fcmVzX2FyZyA9IDApOw0KDQogICAgICB2b2lkDQogICAg ICBjbGVhcigpIHsgX01fbXV0YXRlKDAsIHRoaXMtPnNpemUoKSwgMCk7IH0NCg0KICAgICAgYm9v bA0KICAgICAgZW1wdHkoKSBjb25zdCB7IHJldHVybiB0aGlzLT5zaXplKCkgPT0gMDsgfQ0KDQoN CiAgICAgIGNvbnN0X3JlZmVyZW5jZQ0KICAgICAgb3BlcmF0b3JbXSAoc2l6ZV90eXBlIF9fcG9z KSBjb25zdA0KICAgICAgeyByZXR1cm4gX01fZGF0YSgpW19fcG9zXTsgfQ0KDQogICAgICByZWZl cmVuY2UNCiAgICAgIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fcG9zKQ0KICAgICAgew0KICAgICAg ICBfTV9sZWFrKCk7DQogICAgICAgIHJldHVybiBfTV9kYXRhKClbX19wb3NdOw0KICAgICAgfQ0K DQogICAgICBjb25zdF9yZWZlcmVuY2UNCiAgICAgIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0DQog ICAgICB7DQogICAgICAgIGlmIChfX24gPj0gdGhpcy0+c2l6ZSgpKQ0KICAgICAgICAgIF9fdGhy b3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmF0Iik7DQogICAgICAgIHJldHVybiBfTV9k YXRhKClbX19uXTsNCiAgICAgIH0NCg0KICAgICAgcmVmZXJlbmNlDQogICAgICBhdChzaXplX3R5 cGUgX19uKQ0KICAgICAgew0KICAgICAgICBpZiAoX19uID49IHNpemUoKSkNCiAgICAgICAgICBf X3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjphdCIpOw0KICAgICAgICBfTV9sZWFr KCk7DQogICAgICAgIHJldHVybiBfTV9kYXRhKClbX19uXTsNCiAgICAgIH0NCg0KDQogICAgICBi YXNpY19zdHJpbmcmDQogICAgICBvcGVyYXRvcis9KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIp IHsgcmV0dXJuIHRoaXMtPmFwcGVuZChfX3N0cik7IH0NCg0KICAgICAgYmFzaWNfc3RyaW5nJg0K ICAgICAgb3BlcmF0b3IrPShjb25zdCBfQ2hhclQqIF9fcykgeyByZXR1cm4gdGhpcy0+YXBwZW5k KF9fcyk7IH0NCg0KICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgb3BlcmF0b3IrPShfQ2hhclQg X19jKSB7IHJldHVybiB0aGlzLT5hcHBlbmQoc2l6ZV90eXBlKDEpLCBfX2MpOyB9DQoNCiAgICAg IGJhc2ljX3N0cmluZyYNCiAgICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKTsN Cg0KICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYg X19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbik7DQoNCiAgICAgIGJhc2ljX3N0 cmluZyYNCiAgICAgIGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbik7DQoN CiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcykNCiAg ICAgIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7 IH0NCg0KICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgYXBwZW5kKHNpemVfdHlwZSBfX24sIF9D aGFyVCBfX2MpOw0KDQogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4NCiAgICAg ICAgYmFzaWNfc3RyaW5nJg0KICAgICAgICBhcHBlbmQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwg X0lucHV0SXRlcmF0b3IgX19sYXN0KQ0KICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9N X2llbmQoKSwgX01faWVuZCgpLCBfX2ZpcnN0LCBfX2xhc3QpOyB9DQoNCiAgICAgIHZvaWQNCiAg ICAgIHB1c2hfYmFjayhfQ2hhclQgX19jKQ0KICAgICAgeyB0aGlzLT5yZXBsYWNlKF9NX2llbmQo KSwgX01faWVuZCgpLCAxLCBfX2MpOyB9DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIGFz c2lnbihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKTsNCg0KICAgICAgYmFzaWNfc3RyaW5nJg0K ICAgICAgYXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywg c2l6ZV90eXBlIF9fbikNCiAgICAgIHsNCiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fc3Ryc2l6 ZSA9IF9fc3RyLnNpemUoKTsNCiAgICAgICAgaWYgKF9fcG9zID4gX19zdHJzaXplKQ0KICAgICAg ICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmFzc2lnbiIpOw0KICAgICAg ICBjb25zdCBib29sIF9fdGVzdG4gPSBfX24gPCBfX3N0cnNpemUgLSBfX3BvczsNCiAgICAgICAg Y29uc3Qgc2l6ZV90eXBlIF9fbmV3c2l6ZSA9IF9fdGVzdG4gPyBfX24gOiBfX3N0cnNpemUgLSBf X3BvczsNCiAgICAgICAgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3N0ci5fTV9kYXRhKCkgKyBfX3Bv cywgX19uZXdzaXplKTsNCiAgICAgIH0NCg0KICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgYXNz aWduKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQ0KICAgICAgew0KICAgICAgICBp ZiAoX19uID4gdGhpcy0+bWF4X3NpemUoKSkNCiAgICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJv cigiYmFzaWNfc3RyaW5nOjphc3NpZ24iKTsNCiAgICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19z aGFyZWQoKSB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX19zLCBfTV9kYXRhKCkpDQogICAgICAg ICAgICB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpLCBf X3MpKQ0KICAgICAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWJlZ2luKCksIF9NX2ll bmQoKSwgX19zLCBfX3MgKyBfX24pOw0KICAgICAgICBlbHNlDQogICAgICAgICAgew0KDQogICAg ICAgICAgICBjb25zdCBzaXplX3R5cGUgX19wb3MgPSBfX3MgLSBfTV9kYXRhKCk7DQogICAgICAg ICAgICBpZiAoX19wb3MgPj0gX19uKQ0KICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShf TV9kYXRhKCksIF9fcywgX19uKTsNCiAgICAgICAgICAgIGVsc2UgaWYgKF9fcG9zKQ0KICAgICAg ICAgICAgICB0cmFpdHNfdHlwZTo6bW92ZShfTV9kYXRhKCksIF9fcywgX19uKTsNCiAgICAgICAg ICAgIF9NX3JlcCgpLT5fTV9sZW5ndGggPSBfX247DQogICAgICAgICAgICBfTV9kYXRhKClbX19u XSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOw0KICAgICAgICAgICAgcmV0dXJuICp0aGlzOw0KICAgICAg ICAgIH0NCiAgICAgIH0NCg0KICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgYXNzaWduKGNvbnN0 IF9DaGFyVCogX19zKQ0KICAgICAgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fcywgdHJhaXRzX3R5 cGU6Omxlbmd0aChfX3MpKTsgfQ0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAgICBhc3NpZ24o c2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykNCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2Uo X01faWJlZ2luKCksIF9NX2llbmQoKSwgX19uLCBfX2MpOyB9DQoNCiAgICAgIHRlbXBsYXRlPGNs YXNzIF9JbnB1dEl0ZXJhdG9yPg0KICAgICAgICBiYXNpY19zdHJpbmcmDQogICAgICAgIGFzc2ln bihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpDQogICAgICAg IHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWJlZ2luKCksIF9NX2llbmQoKSwgX19maXJzdCwg X19sYXN0KTsgfQ0KDQogICAgICB2b2lkDQogICAgICBpbnNlcnQoaXRlcmF0b3IgX19wLCBzaXpl X3R5cGUgX19uLCBfQ2hhclQgX19jKQ0KICAgICAgeyB0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBf X24sIF9fYyk7IH0NCg0KICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+DQogICAg ICAgIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgX0lucHV0SXRlcmF0b3IgX19iZWcsIF9JbnB1 dEl0ZXJhdG9yIF9fZW5kKQ0KICAgICAgICB7IHRoaXMtPnJlcGxhY2UoX19wLCBfX3AsIF9fYmVn LCBfX2VuZCk7IH0NCg0KICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgaW5zZXJ0KHNpemVfdHlw ZSBfX3BvczEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpDQogICAgICB7IHJldHVybiB0aGlz LT5pbnNlcnQoX19wb3MxLCBfX3N0ciwgMCwgX19zdHIuc2l6ZSgpKTsgfQ0KDQogICAgICBiYXNp Y19zdHJpbmcmDQogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zMSwgY29uc3QgYmFzaWNfc3Ry aW5nJiBfX3N0ciwNCiAgICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19u KQ0KICAgICAgew0KICAgICAgICBjb25zdCBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6 ZSgpOw0KICAgICAgICBpZiAoX19wb3MyID4gX19zdHJzaXplKQ0KICAgICAgICAgIF9fdGhyb3df b3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6Omluc2VydCIpOw0KICAgICAgICBjb25zdCBib29s IF9fdGVzdG4gPSBfX24gPCBfX3N0cnNpemUgLSBfX3BvczI7DQogICAgICAgIGNvbnN0IHNpemVf dHlwZSBfX25ld3NpemUgPSBfX3Rlc3RuID8gX19uIDogX19zdHJzaXplIC0gX19wb3MyOw0KICAg ICAgICByZXR1cm4gdGhpcy0+aW5zZXJ0KF9fcG9zMSwgX19zdHIuX01fZGF0YSgpICsgX19wb3My LCBfX25ld3NpemUpOw0KICAgICAgfQ0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAgICBpbnNl cnQoc2l6ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikNCiAg ICAgIHsNCiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsNCiAg ICAgICAgaWYgKF9fcG9zID4gX19zaXplKQ0KICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3Jhbmdl KCJiYXNpY19zdHJpbmc6Omluc2VydCIpOw0KICAgICAgICBpZiAoX19zaXplID4gdGhpcy0+bWF4 X3NpemUoKSAtIF9fbikNCiAgICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3Ry aW5nOjppbnNlcnQiKTsNCiAgICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSB8fCBs ZXNzPGNvbnN0IF9DaGFyVCo+KCkoX19zLCBfTV9kYXRhKCkpDQogICAgICAgICAgICB8fCBsZXNz PGNvbnN0IF9DaGFyVCo+KCkoX01fZGF0YSgpICsgX19zaXplLCBfX3MpKQ0KICAgICAgICAgIHJl dHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWJlZ2luKCkgKyBfX3BvcywgX01faWJlZ2luKCkgKyBf X3BvcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcywgX19zICsgX19uKTsN CiAgICAgICAgZWxzZQ0KICAgICAgICAgIHsNCg0KDQoNCiAgICAgICAgICAgIGNvbnN0IHNpemVf dHlwZSBfX29mZiA9IF9fcyAtIF9NX2RhdGEoKTsNCiAgICAgICAgICAgIF9NX211dGF0ZShfX3Bv cywgMCwgX19uKTsNCiAgICAgICAgICAgIF9fcyA9IF9NX2RhdGEoKSArIF9fb2ZmOw0KICAgICAg ICAgICAgX0NoYXJUKiBfX3AgPSBfTV9kYXRhKCkgKyBfX3BvczsNCiAgICAgICAgICAgIGlmIChf X3MgKyBfX24gPD0gX19wKQ0KICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9f cywgX19uKTsNCiAgICAgICAgICAgIGVsc2UgaWYgKF9fcyA+PSBfX3ApDQogICAgICAgICAgICAg IHRyYWl0c190eXBlOjpjb3B5KF9fcCwgX19zICsgX19uLCBfX24pOw0KICAgICAgICAgICAgZWxz ZQ0KICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19w LCBfX3MsIF9fcCAtIF9fcyk7DQogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19w ICsgKF9fcCAtIF9fcyksIF9fcCArIF9fbiwgX19uIC0gKF9fcCAtIF9fcykpOw0KICAgICAgICAg ICAgICB9DQogICAgICAgICAgICByZXR1cm4gKnRoaXM7DQogICAgICAgICAgfQ0KICAgICAgIH0N Cg0KICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvcywgY29u c3QgX0NoYXJUKiBfX3MpDQogICAgICB7IHJldHVybiB0aGlzLT5pbnNlcnQoX19wb3MsIF9fcywg dHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQ0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAg ICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQ0KICAg ICAgew0KICAgICAgICB0aGlzLT5pbnNlcnQoX01fY2hlY2soX19wb3MpLCBfX24sIF9fYyk7DQog ICAgICAgIHJldHVybiAqdGhpczsNCiAgICAgIH0NCg0KICAgICAgaXRlcmF0b3INCiAgICAgIGlu c2VydChpdGVyYXRvciBfX3AsIF9DaGFyVCBfX2MgPSBfQ2hhclQoKSkNCiAgICAgIHsNCiAgICAg ICAgc2l6ZV90eXBlIF9fcG9zID0gX19wIC0gX01faWJlZ2luKCk7DQogICAgICAgIHRoaXMtPmlu c2VydChfTV9jaGVjayhfX3BvcyksIHNpemVfdHlwZSgxKSwgX19jKTsNCiAgICAgICAgX01fcmVw KCktPl9NX3NldF9sZWFrZWQoKTsNCiAgICAgICAgcmV0dXJuIHRoaXMtPl9NX2liZWdpbigpICsg X19wb3M7DQogICAgICB9DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIGVyYXNlKHNpemVf dHlwZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBfX24gPSBucG9zKQ0KICAgICAgew0KICAgICAgICBy ZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2ZvbGQoX19wb3MsIF9fbiks DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2RhdGEoKSwgX01fZGF0YSgpKTsNCiAg ICAgIH0NCg0KICAgICAgaXRlcmF0b3INCiAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24p DQogICAgICB7DQogICAgICAgIHNpemVfdHlwZSBfX2kgPSBfX3Bvc2l0aW9uIC0gX01faWJlZ2lu KCk7DQogICAgICAgIHRoaXMtPnJlcGxhY2UoX19wb3NpdGlvbiwgX19wb3NpdGlvbiArIDEsIF9N X2RhdGEoKSwgX01fZGF0YSgpKTsNCiAgICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsN CiAgICAgICAgcmV0dXJuIF9NX2liZWdpbigpICsgX19pOw0KICAgICAgfQ0KDQogICAgICBpdGVy YXRvcg0KICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQ0KICAg ICAgew0KICAgICAgICBzaXplX3R5cGUgX19pID0gX19maXJzdCAtIF9NX2liZWdpbigpOw0KICAg ICAgICB0aGlzLT5yZXBsYWNlKF9fZmlyc3QsIF9fbGFzdCwgX01fZGF0YSgpLCBfTV9kYXRhKCkp Ow0KICAgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOw0KICAgICAgIHJldHVybiBfTV9p YmVnaW4oKSArIF9faTsNCiAgICAgIH0NCg0KICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgcmVw bGFjZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IGJhc2ljX3N0cmluZyYg X19zdHIpDQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9fcG9zLCBfX24sIF9fc3RyLl9N X2RhdGEoKSwgX19zdHIuc2l6ZSgpKTsgfQ0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAgICBy ZXBsYWNlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJp bmcmIF9fc3RyLA0KICAgICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19u Mik7DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9z LCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MsDQogICAgICAgICAgICAgIHNpemVf dHlwZSBfX24yKQ0KICAgICAgew0KICAgICAgICBjb25zdCBzaXplX3R5cGUgX19zaXplID0gdGhp cy0+c2l6ZSgpOw0KICAgICAgICBpZiAoX19wb3MgPiBfX3NpemUpDQogICAgICAgICAgX190aHJv d19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6cmVwbGFjZSIpOw0KICAgICAgICBjb25zdCBi b29sIF9fdGVzdG4xID0gX19uMSA8IF9fc2l6ZSAtIF9fcG9zOw0KICAgICAgICBjb25zdCBzaXpl X3R5cGUgX19mb2xkbjEgPSBfX3Rlc3RuMSA/IF9fbjEgOiBfX3NpemUgLSBfX3BvczsNCiAgICAg ICAgaWYgKF9fc2l6ZSAtIF9fZm9sZG4xID4gdGhpcy0+bWF4X3NpemUoKSAtIF9fbjIpDQogICAg ICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVwbGFjZSIpOw0KICAg ICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3NoYXJlZCgpIHx8IGxlc3M8Y29uc3QgX0NoYXJUKj4o KShfX3MsIF9NX2RhdGEoKSkNCiAgICAgICAgICAgIHx8IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShf TV9kYXRhKCkgKyBfX3NpemUsIF9fcykpDQogICAgICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2Fm ZShfTV9pYmVnaW4oKSArIF9fcG9zLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X01faWJlZ2luKCkgKyBfX3BvcyArIF9fZm9sZG4xLCBfX3MsIF9fcyArIF9fbjIpOw0KICAgICAg ICBlbHNlIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwgX01fZm9sZChfX3Bv cywgX19uMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zLCBfX3MgKyBf X24yKTsNCiAgICAgIH0NCg0KICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgcmVwbGFjZShzaXpl X3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcykNCiAgICAgIHsg cmV0dXJuIHRoaXMtPnJlcGxhY2UoX19wb3MsIF9fbjEsIF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0 aChfX3MpKTsgfQ0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAgICByZXBsYWNlKHNpemVfdHlw ZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIHNpemVfdHlwZSBfX24yLCBfQ2hhclQgX19jKQ0KICAg ICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2ZvbGQoX19wb3Ms IF9fbjEpLCBfX24yLCBfX2MpOyB9DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIHJlcGxh Y2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0 cikNCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19zdHIuX01fZGF0 YSgpLCBfX3N0ci5zaXplKCkpOyB9DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIHJlcGxh Y2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQ0KICAgICAgeyByZXR1cm4gdGhp cy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLCBfX3MsIF9fbik7IH0N Cg0KICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVy YXRvciBfX2kyLCBjb25zdCBfQ2hhclQqIF9fcykNCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxh Y2UoX19pMSwgX19pMiwgX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9DQoNCiAgICAg IGJhc2ljX3N0cmluZyYNCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19p Miwgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYyk7DQoNCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9J bnB1dEl0ZXJhdG9yPg0KICAgICAgICBiYXNpY19zdHJpbmcmDQogICAgICAgIHJlcGxhY2UoaXRl cmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwNCiAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRv ciBfX2sxLCBfSW5wdXRJdGVyYXRvciBfX2syKQ0KICAgICAgICB7IHJldHVybiBfTV9yZXBsYWNl KF9faTEsIF9faTIsIF9fazEsIF9fazIsDQogICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkoKSk7IH0NCg0KICAgIHBy aXZhdGU6DQogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4NCiAgICAgICAgYmFz aWNfc3RyaW5nJg0KICAgICAgICBfTV9yZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9f aTIsIF9JbnB1dEl0ZXJhdG9yIF9fazEsDQogICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0 b3IgX19rMiwgaW5wdXRfaXRlcmF0b3JfdGFnKTsNCg0KICAgICAgdGVtcGxhdGU8Y2xhc3MgX0Zv cndhcmRJdGVyYXRvcj4NCiAgICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgICBfTV9yZXBsYWNl X3NhZmUoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0ZvcndhcmRJdGVyYXRvciBfX2sx LA0KICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19rMik7DQoNCg0KDQogICAg ICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPg0KICAgICAgICBzdGF0aWMgX0NoYXJUKg0KICAgICAg ICBfU19jb25zdHJ1Y3RfYXV4KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9B bGxvYyYgX19hLA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkNCiAgICAg ICAgew0KICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Jbkl0ZXI+ OjppdGVyYXRvcl9jYXRlZ29yeSBfVGFnOw0KICAgICAgICAgIHJldHVybiBfU19jb25zdHJ1Y3Qo X19iZWcsIF9fZW5kLCBfX2EsIF9UYWcoKSk7DQogICAgICAgIH0NCg0KICAgICAgdGVtcGxhdGU8 Y2xhc3MgX0luSXRlcj4NCiAgICAgICAgc3RhdGljIF9DaGFyVCoNCiAgICAgICAgX1NfY29uc3Ry dWN0X2F1eChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwN CiAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkNCiAgICAgICAgew0KICAgICAg ICAgIHJldHVybiBfU19jb25zdHJ1Y3Qoc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfX2JlZyksDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx2YWx1ZV90eXBlPihfX2Vu ZCksIF9fYSk7DQogICAgICAgIH0NCg0KICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4NCiAg ICAgICAgc3RhdGljIF9DaGFyVCoNCiAgICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcs IF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hKQ0KICAgICAgICB7DQogICAgICAgICAg dHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5JdGVyPjo6X0ludGVncmFsIF9JbnRlZ3Jh bDsNCiAgICAgICAgICByZXR1cm4gX1NfY29uc3RydWN0X2F1eChfX2JlZywgX19lbmQsIF9fYSwg X0ludGVncmFsKCkpOw0KICAgICAgICB9DQoNCg0KICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRl cj4NCiAgICAgICAgc3RhdGljIF9DaGFyVCoNCiAgICAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVy IF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwNCiAgICAgICAgICAgICAg ICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOw0KDQoNCg0KICAgICAgdGVtcGxhdGU8Y2xhc3Mg X0Z3ZEl0ZXI+DQogICAgICAgIHN0YXRpYyBfQ2hhclQqDQogICAgICAgIF9TX2NvbnN0cnVjdChf RndkSXRlciBfX2JlZywgX0Z3ZEl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLA0KICAgICAg ICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpOw0KDQogICAgICBzdGF0aWMgX0No YXJUKg0KICAgICAgX1NfY29uc3RydWN0KHNpemVfdHlwZSBfX3JlcSwgX0NoYXJUIF9fYywgY29u c3QgX0FsbG9jJiBfX2EpOw0KDQogICAgcHVibGljOg0KDQogICAgICBzaXplX3R5cGUNCiAgICAg IGNvcHkoX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIHNpemVfdHlwZSBfX3BvcyA9IDApIGNv bnN0Ow0KDQogICAgICB2b2lkDQogICAgICBzd2FwKGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz4mIF9fcyk7DQoNCg0KICAgICAgY29uc3QgX0NoYXJUKg0KICAgICAgY19zdHIo KSBjb25zdA0KICAgICAgew0KDQogICAgICAgIHNpemVfdHlwZSBfX24gPSB0aGlzLT5zaXplKCk7 DQogICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oX01fZGF0YSgpW19fbl0sIF9SZXA6Ol9TX3Rl cm1pbmFsKTsNCiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKTsNCiAgICAgIH0NCg0KICAgICAgY29u c3QgX0NoYXJUKg0KICAgICAgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGEoKTsgfQ0KDQog ICAgICBhbGxvY2F0b3JfdHlwZQ0KICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJu IF9NX2RhdGFwbHVzOyB9DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgZmluZChjb25zdCBfQ2hh clQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsNCg0KICAgICAg c2l6ZV90eXBlDQogICAgICBmaW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlw ZSBfX3BvcyA9IDApIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5maW5kKF9fc3RyLmRhdGEo KSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0NCg0KICAgICAgc2l6ZV90eXBlDQogICAgICBmaW5k KGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdA0KICAgICAgeyBy ZXR1cm4gdGhpcy0+ZmluZChfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9 DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19w b3MgPSAwKSBjb25zdDsNCg0KICAgICAgc2l6ZV90eXBlDQogICAgICByZmluZChjb25zdCBiYXNp Y19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdA0KICAgICAgeyBy ZXR1cm4gdGhpcy0+cmZpbmQoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQ0K DQogICAgICBzaXplX3R5cGUNCiAgICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5 cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0Ow0KDQogICAgICBzaXplX3R5cGUNCiAgICAg IHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdA0K ICAgICAgeyByZXR1cm4gdGhpcy0+cmZpbmQoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0 aChfX3MpKTsgfQ0KDQogICAgICBzaXplX3R5cGUNCiAgICAgIHJmaW5kKF9DaGFyVCBfX2MsIHNp emVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0Ow0KDQogICAgICBzaXplX3R5cGUNCiAgICAgIGZp bmRfZmlyc3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0g MCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfb2YoX19zdHIuZGF0YSgp LCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQ0KDQogICAgICBzaXplX3R5cGUNCiAgICAgIGZpbmRf Zmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9f bikgY29uc3Q7DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgZmluZF9maXJzdF9vZihjb25zdCBf Q2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRo aXMtPmZpbmRfZmlyc3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsg fQ0KDQogICAgICBzaXplX3R5cGUNCiAgICAgIGZpbmRfZmlyc3Rfb2YoX0NoYXJUIF9fYywgc2l6 ZV90eXBlIF9fcG9zID0gMCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmQoX19jLCBf X3Bvcyk7IH0NCg0KICAgICAgc2l6ZV90eXBlDQogICAgICBmaW5kX2xhc3Rfb2YoY29uc3QgYmFz aWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QNCiAgICAgIHsg cmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXpl KCkpOyB9DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFy VCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0Ow0KDQogICAgICBz aXplX3R5cGUNCiAgICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBl IF9fcG9zID0gbnBvcykgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9vZihf X3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9DQoNCiAgICAgIHNpemVfdHlw ZQ0KICAgICAgZmluZF9sYXN0X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3Mp IGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5yZmluZChfX2MsIF9fcG9zKTsgfQ0KDQogICAg ICBzaXplX3R5cGUNCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IGJhc2ljX3N0cmluZyYg X19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5m aW5kX2ZpcnN0X25vdF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9DQoN CiAgICAgIHNpemVfdHlwZQ0KICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBf X3MsIHNpemVfdHlwZSBfX3BvcywNCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBf X24pIGNvbnN0Ow0KDQogICAgICBzaXplX3R5cGUNCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNv bnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdA0KICAgICAgeyByZXR1 cm4gdGhpcy0+ZmluZF9maXJzdF9ub3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0 aChfX3MpKTsgfQ0KDQogICAgICBzaXplX3R5cGUNCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKF9D aGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0Ow0KDQogICAgICBzaXplX3R5cGUN CiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90 eXBlIF9fcG9zID0gbnBvcykgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9u b3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQ0KDQogICAgICBzaXpl X3R5cGUNCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlw ZSBfX3BvcywNCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbikgY29uc3Q7DQog ICAgICBzaXplX3R5cGUNCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3Ms IHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5maW5k X2xhc3Rfbm90X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0NCg0K ICAgICAgc2l6ZV90eXBlDQogICAgICBmaW5kX2xhc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVf dHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0Ow0KDQogICAgICBiYXNpY19zdHJpbmcNCiAgICAgIHN1 YnN0cihzaXplX3R5cGUgX19wb3MgPSAwLCBzaXplX3R5cGUgX19uID0gbnBvcykgY29uc3QNCiAg ICAgIHsNCiAgICAgICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQ0KICAgICAgICAgIF9fdGhy b3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OnN1YnN0ciIpOw0KICAgICAgICByZXR1cm4g YmFzaWNfc3RyaW5nKCp0aGlzLCBfX3BvcywgX19uKTsNCiAgICAgIH0NCg0KICAgICAgaW50DQog ICAgICBjb21wYXJlKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIGNvbnN0DQogICAgICB7DQog ICAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7DQogICAgICAgIHNpemVfdHlw ZSBfX29zaXplID0gX19zdHIuc2l6ZSgpOw0KICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4o X19zaXplLCBfX29zaXplKTsNCg0KICAgICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBh cmUoX01fZGF0YSgpLCBfX3N0ci5kYXRhKCksIF9fbGVuKTsNCiAgICAgICAgaWYgKCFfX3IpDQog ICAgICAgICAgX19yID0gX19zaXplIC0gX19vc2l6ZTsNCiAgICAgICAgcmV0dXJuIF9fcjsNCiAg ICAgIH0NCg0KICAgICAgaW50DQogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90 eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgY29uc3Q7DQoNCiAgICAgIGludA0K ICAgICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFz aWNfc3RyaW5nJiBfX3N0ciwNCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90 eXBlIF9fbjIpIGNvbnN0Ow0KDQogICAgICBpbnQNCiAgICAgIGNvbXBhcmUoY29uc3QgX0NoYXJU KiBfX3MpIGNvbnN0Ow0KDQoNCg0KICAgICAgaW50DQogICAgICBjb21wYXJlKHNpemVfdHlwZSBf X3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zKSBjb25zdDsNCg0KICAgICAg aW50DQogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0 IF9DaGFyVCogX19zLA0KICAgICAgICAgICAgICBzaXplX3R5cGUgX19uMikgY29uc3Q7DQogIH07 DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu YW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPjo6DQogICAgYmFzaWNfc3RyaW5nKCkNCiAgICA6IF9NX2RhdGFwbHVzKF9TX2VtcHR5X3Jl cCgpLl9NX3JlZmNvcHkoKSwgX0FsbG9jKCkpIHsgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPg0KICAgIG9wZXJhdG9yKyhjb25zdCBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywNCiAgICAgICAgICAgICAgY29u c3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpDQogICAgew0K ICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cihfX2xocyk7 DQogICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOw0KICAgICAgcmV0dXJuIF9fc3RyOw0KICAgIH0N Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l IF9BbGxvYz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPg0KICAgIG9w ZXJhdG9yKyhjb25zdCBfQ2hhclQqIF9fbGhzLA0KICAgICAgICAgICAgICBjb25zdCBiYXNpY19z dHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19yaHMpOw0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2lj X3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+DQogICAgb3BlcmF0b3IrKF9DaGFyVCBfX2xo cywgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9fcmhzKTsNCg0K ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4NCiAgICBpbmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPg0K ICAgIG9wZXJhdG9yKyhjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ JiBfX2xocywNCiAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQ0KICAgIHsNCiAgICAg IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHIoX19saHMpOw0KICAg ICAgX19zdHIuYXBwZW5kKF9fcmhzKTsNCiAgICAgIHJldHVybiBfX3N0cjsNCiAgICB9DQoNCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs b2M+DQogICAgaW5saW5lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4NCiAg ICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg X19saHMsIF9DaGFyVCBfX3JocykNCiAgICB7DQogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOw0KICAgICAgX19zdHJp bmdfdHlwZSBfX3N0cihfX2xocyk7DQogICAgICBfX3N0ci5hcHBlbmQoX19zaXplX3R5cGUoMSks IF9fcmhzKTsNCiAgICAgIHJldHVybiBfX3N0cjsNCiAgICB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxp bmUgYm9vbA0KICAgIG9wZXJhdG9yPT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPiYgX19saHMsDQogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykNCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJl KF9fcmhzKSA9PSAwOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRvcj09 KGNvbnN0IF9DaGFyVCogX19saHMsDQogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykNCiAgICB7IHJldHVybiBfX3Jocy5jb21w YXJlKF9fbGhzKSA9PSAwOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRv cj09KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLA0K ICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykNCiAgICB7IHJldHVybiBfX2xocy5j b21wYXJlKF9fcmhzKSA9PSAwOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9w ZXJhdG9yIT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19s aHMsDQogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+JiBfX3JocykNCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSAhPSAwOyB9 DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRvciE9KGNvbnN0IF9DaGFyVCog X19saHMsDQogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+JiBfX3JocykNCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSAhPSAw OyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfQWxsb2M+DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRvciE9KGNvbnN0IGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLA0KICAgICAgICAgICAgICAg Y29uc3QgX0NoYXJUKiBfX3JocykNCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSAh PSAwOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs IHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJhdG9yPChjb25zdCBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywNCiAgICAgICAgICAg ICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpDQog ICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPCAwOyB9DQoNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5s aW5lIGJvb2wNCiAgICBvcGVyYXRvcjwoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPiYgX19saHMsDQogICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpDQog ICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPCAwOyB9DQoNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5s aW5lIGJvb2wNCiAgICBvcGVyYXRvcjwoY29uc3QgX0NoYXJUKiBfX2xocywNCiAgICAgICAgICAg ICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpDQog ICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPiAwOyB9DQoNCg0KICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBp bmxpbmUgYm9vbA0KICAgIG9wZXJhdG9yPihjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+JiBfX2xocywNCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpDQogICAgeyByZXR1cm4gX19saHMuY29tcGFy ZShfX3JocykgPiAwOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRvcj4o Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsDQogICAg ICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpDQogICAgeyByZXR1cm4gX19saHMuY29tcGFy ZShfX3JocykgPiAwOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRvcj4o Y29uc3QgX0NoYXJUKiBfX2xocywNCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpDQogICAgeyByZXR1cm4gX19yaHMuY29tcGFy ZShfX2xocykgPCAwOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJhdG9y PD0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsDQog ICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ JiBfX3JocykNCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8PSAwOyB9DQoNCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs b2M+DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRvcjw9KGNvbnN0IGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLA0KICAgICAgICAgICAgICAgY29uc3QgX0No YXJUKiBfX3JocykNCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8PSAwOyB9DQoN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf QWxsb2M+DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRvcjw9KGNvbnN0IF9DaGFyVCogX19s aHMsDQogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+JiBfX3JocykNCiAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPj0gMDsgfQ0K DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRvcj49KGNvbnN0IGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLA0KICAgICAgICAgICAgICAgY29u c3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpDQogICAgeyBy ZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPj0gMDsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBi b29sDQogICAgb3BlcmF0b3I+PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+JiBfX2xocywNCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpDQogICAg eyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPj0gMDsgfQ0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGlu ZSBib29sDQogICAgb3BlcmF0b3I+PShjb25zdCBfQ2hhclQqIF9fbGhzLA0KICAgICAgICAgICAg IGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQ0KICAg IHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpIDw9IDA7IH0NCg0KDQogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlu bGluZSB2b2lkDQogICAgc3dhcChiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ JiBfX2xocywNCiAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m IF9fcmhzKQ0KICAgIHsgX19saHMuc3dhcChfX3Jocyk7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19p c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4mIF9faXMsDQogICAgICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cik7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfb3N0cmVhbTxf Q2hhclQsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U cmFpdHM+JiBfX29zLA0KICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPiYgX19zdHIpOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX2lzdHJlYW08X0No YXJULF9UcmFpdHM+Jg0KICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ JiBfX2lzLA0KICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j PiYgX19zdHIsIF9DaGFyVCBfX2RlbGltKTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYmFzaWNfaXN0 cmVhbTxfQ2hhclQsX1RyYWl0cz4mDQogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4mIF9faXMsDQogICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+JiBfX3N0cik7DQp9DQojIDU0ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2cr Ky12My9zdHJpbmciIDIgMw0KDQoNCiMgMSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKyst djMvYWxnb3JpdGhtIiAxIDMNCiMgNjUgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYz L2FsZ29yaXRobSIgMw0KDQoNCg0KDQojIDEgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysr LXYzL2JpdHMvc3RsX2FsZ28uaCIgMSAzDQojIDY0ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRl L2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMNCiMgMSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVk ZS9nKystdjMvYml0cy9zdGxfaGVhcC5oIiAxIDMNCiMgNjMgInQ6L21zeXMvMS4wL21pbmd3L2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2hlYXAuaCIgMw0KbmFtZXNwYWNlIHN0ZA0Kew0KDQoNCg0K ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0 YW5jZSwgdHlwZW5hbWUgX1RwPg0KICAgIHZvaWQNCiAgICBfX3B1c2hfaGVhcChfUmFuZG9tQWNj ZXNzSXRlcmF0b3IgX19maXJzdCwNCiAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19ob2xlSW5k ZXgsIF9EaXN0YW5jZSBfX3RvcEluZGV4LCBfVHAgX192YWx1ZSkNCiAgICB7DQogICAgICBfRGlz dGFuY2UgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7DQogICAgICB3aGlsZSAoX19o b2xlSW5kZXggPiBfX3RvcEluZGV4ICYmICooX19maXJzdCArIF9fcGFyZW50KSA8IF9fdmFsdWUp IHsNCiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19wYXJl bnQpOw0KICAgICAgICBfX2hvbGVJbmRleCA9IF9fcGFyZW50Ow0KICAgICAgICBfX3BhcmVudCA9 IChfX2hvbGVJbmRleCAtIDEpIC8gMjsNCiAgICAgIH0NCiAgICAgICooX19maXJzdCArIF9faG9s ZUluZGV4KSA9IF9fdmFsdWU7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B Y2Nlc3NJdGVyYXRvcj4NCiAgICBpbmxpbmUgdm9pZA0KICAgIHB1c2hfaGVhcChfUmFuZG9tQWNj ZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkNCiAgICB7 DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRl cmF0b3I+Ojp2YWx1ZV90eXBlDQogICAgICAgICAgX1ZhbHVlVHlwZTsNCiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVu Y2VfdHlwZQ0KICAgICAgICAgIF9EaXN0YW5jZVR5cGU7DQoNCg0KICAgICANCg0KICAgICANCg0K ICAgICAgX19wdXNoX2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlVHlwZSgoX19sYXN0IC0gX19maXJz dCkgLSAxKSwgX0Rpc3RhbmNlVHlwZSgwKSwNCiAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUo KihfX2xhc3QgLSAxKSkpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNj ZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1RwLA0KICAgICAgICAg ICAgdHlwZW5hbWUgX0NvbXBhcmU+DQogICAgdm9pZA0KICAgIF9fcHVzaF9oZWFwKF9SYW5kb21B Y2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsDQogICAgICAgICAg ICAgICAgX0Rpc3RhbmNlIF9fdG9wSW5kZXgsIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXAp DQogICAgew0KICAgICAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAy Ow0KICAgICAgd2hpbGUgKF9faG9sZUluZGV4ID4gX190b3BJbmRleCAmJiBfX2NvbXAoKihfX2Zp cnN0ICsgX19wYXJlbnQpLCBfX3ZhbHVlKSkgew0KICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJ bmRleCkgPSAqKF9fZmlyc3QgKyBfX3BhcmVudCk7DQogICAgICAgIF9faG9sZUluZGV4ID0gX19w YXJlbnQ7DQogICAgICAgIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOw0KICAgICAg fQ0KICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX192YWx1ZTsNCiAgICB9DQoNCiAg dGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFy ZT4NCiAgICBpbmxpbmUgdm9pZA0KICAgIHB1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAgX0Nv bXBhcmUgX19jb21wKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUNCiAgICAgICAgICBfVmFsdWVU eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vz c0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlDQogICAgICAgICAgX0Rpc3RhbmNlVHlwZTsNCg0K DQogICAgIA0KDQoNCiAgICAgIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZVR5cGUoKF9f bGFzdCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0YW5jZVR5cGUoMCksDQogICAgICAgICAgICAgICAg ICBfVmFsdWVUeXBlKCooX19sYXN0IC0gMSkpLCBfX2NvbXApOw0KICAgIH0NCg0KICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlw ZW5hbWUgX1RwPg0KICAgIHZvaWQNCiAgICBfX2FkanVzdF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVy YXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsDQogICAgICAgICAgICAgICAgICBf RGlzdGFuY2UgX19sZW4sIF9UcCBfX3ZhbHVlKQ0KICAgIHsNCiAgICAgIF9EaXN0YW5jZSBfX3Rv cEluZGV4ID0gX19ob2xlSW5kZXg7DQogICAgICBfRGlzdGFuY2UgX19zZWNvbmRDaGlsZCA9IDIg KiBfX2hvbGVJbmRleCArIDI7DQogICAgICB3aGlsZSAoX19zZWNvbmRDaGlsZCA8IF9fbGVuKSB7 DQogICAgICAgIGlmICgqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKSA8ICooX19maXJzdCArIChf X3NlY29uZENoaWxkIC0gMSkpKQ0KICAgICAgICAgIF9fc2Vjb25kQ2hpbGQtLTsNCiAgICAgICAg KihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCk7DQog ICAgICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZDsNCiAgICAgICAgX19zZWNvbmRDaGls ZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEpOw0KICAgICAgfQ0KICAgICAgaWYgKF9fc2Vjb25k Q2hpbGQgPT0gX19sZW4pIHsNCiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihf X2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7DQogICAgICAgIF9faG9sZUluZGV4ID0gX19z ZWNvbmRDaGlsZCAtIDE7DQogICAgICB9DQogICAgICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hv bGVJbmRleCwgX190b3BJbmRleCwgX192YWx1ZSk7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX1RwPg0KICAgIGlubGluZSB2b2lk DQogICAgX19wb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRv ciBfX3Jlc3VsdCwgX1RwIF9fdmFsdWUpDQogICAgew0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9E aXN0YW5jZTsNCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0Ow0KICAgICAgX19hZGp1c3RfaGVh cChfX2ZpcnN0LCBfRGlzdGFuY2UoMCksIF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX192 YWx1ZSk7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRv cj4NCiAgICBpbmxpbmUgdm9pZA0KICAgIHBvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQ0KICAgIHsNCiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVl X3R5cGUgX1ZhbHVlVHlwZTsNCg0KDQogICAgIA0KDQogICAgIA0KDQogICAgICBfX3BvcF9oZWFw KF9fZmlyc3QsIF9fbGFzdCAtIDEsIF9fbGFzdCAtIDEsIF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAx KSkpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3Is IHR5cGVuYW1lIF9EaXN0YW5jZSwNCiAgICAgICAgICAgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBf Q29tcGFyZT4NCiAgICB2b2lkDQogICAgX19hZGp1c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0 b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4LA0KICAgICAgICAgICAgICAgICAgX0Rp c3RhbmNlIF9fbGVuLCBfVHAgX192YWx1ZSwgX0NvbXBhcmUgX19jb21wKQ0KICAgIHsNCiAgICAg IF9EaXN0YW5jZSBfX3RvcEluZGV4ID0gX19ob2xlSW5kZXg7DQogICAgICBfRGlzdGFuY2UgX19z ZWNvbmRDaGlsZCA9IDIgKiBfX2hvbGVJbmRleCArIDI7DQogICAgICB3aGlsZSAoX19zZWNvbmRD aGlsZCA8IF9fbGVuKSB7DQogICAgICAgIGlmIChfX2NvbXAoKihfX2ZpcnN0ICsgX19zZWNvbmRD aGlsZCksICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpKSkNCiAgICAgICAgICBfX3Nl Y29uZENoaWxkLS07DQogICAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJz dCArIF9fc2Vjb25kQ2hpbGQpOw0KICAgICAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7 DQogICAgICAgIF9fc2Vjb25kQ2hpbGQgPSAyICogKF9fc2Vjb25kQ2hpbGQgKyAxKTsNCiAgICAg IH0NCiAgICAgIGlmIChfX3NlY29uZENoaWxkID09IF9fbGVuKSB7DQogICAgICAgICooX19maXJz dCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpOw0KICAg ICAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAxOw0KICAgICAgfQ0KICAgICAgX19w dXNoX2hlYXAoX19maXJzdCwgX19ob2xlSW5kZXgsIF9fdG9wSW5kZXgsIF9fdmFsdWUsIF9fY29t cCk7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwg dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4NCiAgICBpbmxpbmUgdm9pZA0KICAgIF9f cG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy YXRvciBfX2xhc3QsDQogICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19yZXN1 bHQsIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXApDQogICAgew0KICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5j ZV90eXBlIF9EaXN0YW5jZTsNCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0Ow0KICAgICAgX19h ZGp1c3RfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoMCksIF9EaXN0YW5jZShfX2xhc3QgLSBfX2Zp cnN0KSwNCiAgICAgICAgICAgICAgICAgICAgX192YWx1ZSwgX19jb21wKTsNCiAgICB9DQoNCiAg dGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFy ZT4NCiAgICBpbmxpbmUgdm9pZA0KICAgIHBvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf X2ZpcnN0LA0KICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9Db21w YXJlIF9fY29tcCkNCiAgICB7DQoNCiAgICAgDQoNCg0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSBfVmFsdWVU eXBlOw0KICAgICAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QgLSAxLCBfX2xhc3QgLSAxLCBf VmFsdWVUeXBlKCooX19sYXN0IC0gMSkpLCBfX2NvbXApOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+DQogICAgdm9pZA0KICAgIG1ha2VfaGVhcChf UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFz dCkNCiAgICB7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9t QWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlDQogICAgICAgICAgX1ZhbHVlVHlwZTsNCiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46 OmRpZmZlcmVuY2VfdHlwZQ0KICAgICAgICAgIF9EaXN0YW5jZVR5cGU7DQoNCg0KICAgICANCg0K ICAgICANCg0KICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAyKSByZXR1cm47DQogICAgICBf RGlzdGFuY2VUeXBlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsNCiAgICAgIF9EaXN0YW5jZVR5 cGUgX19wYXJlbnQgPSAoX19sZW4gLSAyKS8yOw0KDQogICAgICB3aGlsZSAodHJ1ZSkgew0KICAg ICAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9fcGFyZW50LCBfX2xlbiwgX1ZhbHVlVHlwZSgq KF9fZmlyc3QgKyBfX3BhcmVudCkpKTsNCiAgICAgICAgaWYgKF9fcGFyZW50ID09IDApIHJldHVy bjsNCiAgICAgICAgX19wYXJlbnQtLTsNCiAgICAgIH0NCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4NCiAgICBpbmxp bmUgdm9pZA0KICAgIG1ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21w KQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21B Y2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUNCiAgICAgICAgICBfVmFsdWVUeXBlOw0KICAgICAg dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6 ZGlmZmVyZW5jZV90eXBlDQogICAgICAgICAgX0Rpc3RhbmNlVHlwZTsNCg0KDQogICAgIA0KDQoN CiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMikgcmV0dXJuOw0KICAgICAgX0Rpc3RhbmNl VHlwZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7DQogICAgICBfRGlzdGFuY2VUeXBlIF9fcGFy ZW50ID0gKF9fbGVuIC0gMikvMjsNCg0KICAgICAgd2hpbGUgKHRydWUpIHsNCiAgICAgICAgX19h ZGp1c3RfaGVhcChfX2ZpcnN0LCBfX3BhcmVudCwgX19sZW4sDQogICAgICAgICAgICAgICAgICAg ICAgX1ZhbHVlVHlwZSgqKF9fZmlyc3QgKyBfX3BhcmVudCkpLCBfX2NvbXApOw0KICAgICAgICBp ZiAoX19wYXJlbnQgPT0gMCkgcmV0dXJuOw0KICAgICAgICBfX3BhcmVudC0tOw0KICAgICAgfQ0K ICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+DQogICAg dm9pZA0KICAgIHNvcnRfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRv bUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkNCiAgICB7DQoNCiAgICAgDQoNCiAgICAgDQoNCg0KICAg ICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAxKQ0KICAgICAgICBwb3BfaGVhcChfX2ZpcnN0 LCBfX2xhc3QtLSk7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJ dGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+DQogICAgdm9pZA0KICAgIHNvcnRfaGVhcChfUmFu ZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwN CiAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQ0KICAgIHsNCg0KICAgICANCg0KDQogICAg ICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDEpDQogICAgICAgIHBvcF9oZWFwKF9fZmlyc3Qs IF9fbGFzdC0tLCBfX2NvbXApOw0KICAgIH0NCg0KfQ0KIyA2NSAidDovbXN5cy8xLjAvbWluZ3cv aW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAyIDMNCiMgMSAidDovbXN5cy8xLjAvbWlu Z3cvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGVtcGJ1Zi5oIiAxIDMNCiMgNjQgInQ6L21zeXMv MS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RlbXBidWYuaCIgMw0KbmFtZXNwYWNl IHN0ZA0Kew0KIyA3NCAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf dGVtcGJ1Zi5oIiAzDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1Rw Pg0KICBjbGFzcyBfVGVtcG9yYXJ5X2J1ZmZlcg0Kew0KDQogDQoNCiAgcHRyZGlmZl90IF9NX29y aWdpbmFsX2xlbjsNCiAgcHRyZGlmZl90IF9NX2xlbjsNCiAgX1RwKiBfTV9idWZmZXI7DQoNCg0K ICB2b2lkIF9NX2FsbG9jYXRlX2J1ZmZlcigpIHsNCiAgICBfTV9vcmlnaW5hbF9sZW4gPSBfTV9s ZW47DQogICAgX01fYnVmZmVyID0gMDsNCg0KICAgIGlmIChfTV9sZW4gPiAocHRyZGlmZl90KSgy MTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCkpKQ0KICAgICAgX01fbGVuID0gMjE0NzQ4MzY0NyAvIHNp emVvZihfVHApOw0KDQogICAgd2hpbGUgKF9NX2xlbiA+IDApIHsNCiAgICAgIF9NX2J1ZmZlciA9 IChfVHAqKSBtYWxsb2MoX01fbGVuICogc2l6ZW9mKF9UcCkpOw0KICAgICAgaWYgKF9NX2J1ZmZl cikNCiAgICAgICAgYnJlYWs7DQogICAgICBfTV9sZW4gLz0gMjsNCiAgICB9DQogIH0NCg0KICB2 b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0IF9UcCYsIF9fdHJ1ZV90eXBlKSB7fQ0KICB2 b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0IF9UcCYgdmFsLCBfX2ZhbHNlX3R5cGUpIHsN CiAgICB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9idWZmZXIsIF9NX2xlbiwgdmFsKTsNCiAgfQ0K DQpwdWJsaWM6DQoNCiAgcHRyZGlmZl90IHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9sZW47IH0N Cg0KICBwdHJkaWZmX3QgcmVxdWVzdGVkX3NpemUoKSBjb25zdCB7IHJldHVybiBfTV9vcmlnaW5h bF9sZW47IH0NCg0KICBfVHAqIGJlZ2luKCkgeyByZXR1cm4gX01fYnVmZmVyOyB9DQoNCiAgX1Rw KiBlbmQoKSB7IHJldHVybiBfTV9idWZmZXIgKyBfTV9sZW47IH0NCg0KICBfVGVtcG9yYXJ5X2J1 ZmZlcihfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KSB7 DQoNCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwPjo6aGFzX3RyaXZpYWxf ZGVmYXVsdF9jb25zdHJ1Y3Rvcg0KICAgICAgICAgICAgX1RyaXZpYWw7DQoNCiAgICBpZiAodHJ1 ZSkgew0KICAgICAgX01fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsNCiAgICAgIF9N X2FsbG9jYXRlX2J1ZmZlcigpOw0KICAgICAgaWYgKF9NX2xlbiA+IDApDQogICAgICAgIF9NX2lu aXRpYWxpemVfYnVmZmVyKCpfX2ZpcnN0LCBfVHJpdmlhbCgpKTsNCiAgICB9DQogICAgaWYgKGZh bHNlKQ0KICAgICAgew0KICAgICAgICBmcmVlKF9NX2J1ZmZlcik7DQogICAgICAgIF9NX2J1ZmZl ciA9IDA7DQogICAgICAgIF9NX2xlbiA9IDA7DQogICAgICAgIDsNCiAgICAgIH0NCiAgfQ0KDQog IH5fVGVtcG9yYXJ5X2J1ZmZlcigpIHsNCiAgICBfRGVzdHJveShfTV9idWZmZXIsIF9NX2J1ZmZl ciArIF9NX2xlbik7DQogICAgZnJlZShfTV9idWZmZXIpOw0KICB9DQoNCnByaXZhdGU6DQoNCiAg X1RlbXBvcmFyeV9idWZmZXIoY29uc3QgX1RlbXBvcmFyeV9idWZmZXImKSB7fQ0KICB2b2lkIG9w ZXJhdG9yPShjb25zdCBfVGVtcG9yYXJ5X2J1ZmZlciYpIHt9DQp9Ow0KDQp9DQojIDY2ICJ0Oi9t c3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDIgMw0KDQoNCg0K bmFtZXNwYWNlIHN0ZA0Kew0KIyA4NCAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMv Yml0cy9zdGxfYWxnby5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgaW5saW5lIGNv bnN0IF9UcCYNCiAgICBfX21lZGlhbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIGNv bnN0IF9UcCYgX19jKQ0KICAgIHsNCg0KICAgICANCiAgICAgIGlmIChfX2EgPCBfX2IpDQogICAg ICAgIGlmIChfX2IgPCBfX2MpDQogICAgICAgICAgcmV0dXJuIF9fYjsNCiAgICAgICAgZWxzZSBp ZiAoX19hIDwgX19jKQ0KICAgICAgICAgIHJldHVybiBfX2M7DQogICAgICAgIGVsc2UNCiAgICAg ICAgICByZXR1cm4gX19hOw0KICAgICAgZWxzZSBpZiAoX19hIDwgX19jKQ0KICAgICAgICByZXR1 cm4gX19hOw0KICAgICAgZWxzZSBpZiAoX19iIDwgX19jKQ0KICAgICAgICByZXR1cm4gX19jOw0K ICAgICAgZWxzZQ0KICAgICAgICByZXR1cm4gX19iOw0KICAgIH0NCiMgMTE4ICJ0Oi9tc3lzLzEu MC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4NCiAgICBpbmxpbmUgY29uc3QgX1RwJg0KICAg IF9fbWVkaWFuKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgY29uc3QgX1RwJiBfX2Ms IF9Db21wYXJlIF9fY29tcCkNCiAgICB7DQoNCiAgICAgDQogICAgICBpZiAoX19jb21wKF9fYSwg X19iKSkNCiAgICAgICAgaWYgKF9fY29tcChfX2IsIF9fYykpDQogICAgICAgICAgcmV0dXJuIF9f YjsNCiAgICAgICAgZWxzZSBpZiAoX19jb21wKF9fYSwgX19jKSkNCiAgICAgICAgICByZXR1cm4g X19jOw0KICAgICAgICBlbHNlDQogICAgICAgICAgcmV0dXJuIF9fYTsNCiAgICAgIGVsc2UgaWYg KF9fY29tcChfX2EsIF9fYykpDQogICAgICAgIHJldHVybiBfX2E7DQogICAgICBlbHNlIGlmIChf X2NvbXAoX19iLCBfX2MpKQ0KICAgICAgICByZXR1cm4gX19jOw0KICAgICAgZWxzZQ0KICAgICAg ICByZXR1cm4gX19iOw0KICAgIH0NCiMgMTUwICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2cr Ky12My9iaXRzL3N0bF9hbGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwg dHlwZW5hbWUgX0Z1bmN0aW9uPg0KICAgIF9GdW5jdGlvbg0KICAgIGZvcl9lYWNoKF9JbnB1dEl0 ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9GdW5jdGlvbiBfX2YpDQogICAgew0KDQog ICAgIA0KICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQ0KICAgICAg ICBfX2YoKl9fZmlyc3QpOw0KICAgICAgcmV0dXJuIF9fZjsNCiAgICB9DQoNCg0KDQoNCg0KDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4NCiAgICBpbmxpbmUg X0lucHV0SXRlcg0KICAgIGZpbmQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFz dCwNCiAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsDQogICAgICAgICBpbnB1dF9pdGVyYXRvcl90 YWcpDQogICAgew0KICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmICEoKl9fZmlyc3Qg PT0gX192YWwpKQ0KICAgICAgICArK19fZmlyc3Q7DQogICAgICByZXR1cm4gX19maXJzdDsNCiAg ICB9DQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1l IF9QcmVkaWNhdGU+DQogICAgaW5saW5lIF9JbnB1dEl0ZXINCiAgICBmaW5kX2lmKF9JbnB1dEl0 ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICBfUHJlZGljYXRlIF9f cHJlZCwNCiAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykNCiAgICB7DQogICAgICB3aGls ZSAoX19maXJzdCAhPSBfX2xhc3QgJiYgIV9fcHJlZCgqX19maXJzdCkpDQogICAgICAgICsrX19m aXJzdDsNCiAgICAgIHJldHVybiBfX2ZpcnN0Ow0KICAgIH0NCg0KDQoNCg0KDQoNCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9UcD4NCiAgICBfUmFuZG9t QWNjZXNzSXRlcg0KICAgIGZpbmQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFj Y2Vzc0l0ZXIgX19sYXN0LA0KICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwNCiAgICAgICAgIHJh bmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQ0KICAgIHsNCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9y X3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX3RyaXBfY291bnQN CiAgICAgICAgPSAoX19sYXN0IC0gX19maXJzdCkgPj4gMjsNCg0KICAgICAgZm9yICggOyBfX3Ry aXBfY291bnQgPiAwIDsgLS1fX3RyaXBfY291bnQpIHsNCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09 IF9fdmFsKSByZXR1cm4gX19maXJzdDsNCiAgICAgICAgKytfX2ZpcnN0Ow0KDQogICAgICAgIGlm ICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7DQogICAgICAgICsrX19maXJzdDsN Cg0KICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0Ow0KICAgICAg ICArK19fZmlyc3Q7DQoNCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19m aXJzdDsNCiAgICAgICAgKytfX2ZpcnN0Ow0KICAgICAgfQ0KDQogICAgICBzd2l0Y2goX19sYXN0 IC0gX19maXJzdCkgew0KICAgICAgY2FzZSAzOg0KICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192 YWwpIHJldHVybiBfX2ZpcnN0Ow0KICAgICAgICArK19fZmlyc3Q7DQogICAgICBjYXNlIDI6DQog ICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7DQogICAgICAgICsr X19maXJzdDsNCiAgICAgIGNhc2UgMToNCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSBy ZXR1cm4gX19maXJzdDsNCiAgICAgICAgKytfX2ZpcnN0Ow0KICAgICAgY2FzZSAwOg0KICAgICAg ZGVmYXVsdDoNCiAgICAgICAgcmV0dXJuIF9fbGFzdDsNCiAgICAgIH0NCiAgICB9DQoNCg0KDQoN Cg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUHJl ZGljYXRlPg0KICAgIF9SYW5kb21BY2Nlc3NJdGVyDQogICAgZmluZF9pZihfUmFuZG9tQWNjZXNz SXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsDQogICAgICAgICAgICBfUHJl ZGljYXRlIF9fcHJlZCwNCiAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQ0K ICAgIHsNCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46 OmRpZmZlcmVuY2VfdHlwZSBfX3RyaXBfY291bnQNCiAgICAgICAgPSAoX19sYXN0IC0gX19maXJz dCkgPj4gMjsNCg0KICAgICAgZm9yICggOyBfX3RyaXBfY291bnQgPiAwIDsgLS1fX3RyaXBfY291 bnQpIHsNCiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0Ow0KICAg ICAgICArK19fZmlyc3Q7DQoNCiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBf X2ZpcnN0Ow0KICAgICAgICArK19fZmlyc3Q7DQoNCiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJz dCkpIHJldHVybiBfX2ZpcnN0Ow0KICAgICAgICArK19fZmlyc3Q7DQoNCiAgICAgICAgaWYgKF9f cHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0Ow0KICAgICAgICArK19fZmlyc3Q7DQogICAg ICB9DQoNCiAgICAgIHN3aXRjaChfX2xhc3QgLSBfX2ZpcnN0KSB7DQogICAgICBjYXNlIDM6DQog ICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsNCiAgICAgICAgKytf X2ZpcnN0Ow0KICAgICAgY2FzZSAyOg0KICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0 dXJuIF9fZmlyc3Q7DQogICAgICAgICsrX19maXJzdDsNCiAgICAgIGNhc2UgMToNCiAgICAgICAg aWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0Ow0KICAgICAgICArK19fZmlyc3Q7 DQogICAgICBjYXNlIDA6DQogICAgICBkZWZhdWx0Og0KICAgICAgICByZXR1cm4gX19sYXN0Ow0K ICAgICAgfQ0KICAgIH0NCiMgMjg5ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9i aXRzL3N0bF9hbGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5h bWUgX1RwPg0KICAgIGlubGluZSBfSW5wdXRJdGVyDQogICAgZmluZChfSW5wdXRJdGVyIF9fZmly c3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkNCiAgICB7 DQoNCiAgICAgDQogICAgIA0KDQogICAgICByZXR1cm4gZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9f dmFsLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsNCiAgICB9DQojIDMwOSAidDovbXN5 cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzDQogIHRlbXBsYXRl PHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+DQogICAgaW5saW5lIF9J bnB1dEl0ZXINCiAgICBmaW5kX2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh c3QsDQogICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkNCiAgICB7DQoNCiAgICAgDQogICAg IA0KDQogICAgICByZXR1cm4gZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgX19pdGVy YXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7DQogICAgfQ0KIyAzMjkgInQ6L21zeXMvMS4wL21pbmd3 L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Rm9yd2FyZEl0ZXI+DQogICAgX0ZvcndhcmRJdGVyDQogICAgYWRqYWNlbnRfZmluZChfRm9yd2Fy ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkNCiAgICB7DQoNCiAgICAgDQogICAg IA0KDQogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpDQogICAgICAgIHJldHVybiBfX2xhc3Q7 DQogICAgICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsNCiAgICAgIHdoaWxlKCsrX19u ZXh0ICE9IF9fbGFzdCkgew0KICAgICAgICBpZiAoKl9fZmlyc3QgPT0gKl9fbmV4dCkNCiAgICAg ICAgICByZXR1cm4gX19maXJzdDsNCiAgICAgICAgX19maXJzdCA9IF9fbmV4dDsNCiAgICAgIH0N CiAgICAgIHJldHVybiBfX2xhc3Q7DQogICAgfQ0KIyAzNTggInQ6L21zeXMvMS4wL21pbmd3L2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9y d2FyZEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+DQogICAgX0ZvcndhcmRJdGVyDQog ICAgYWRqYWNlbnRfZmluZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFz dCwNCiAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkNCiAg ICB7DQoNCiAgICAgDQogICAgIA0KDQoNCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkNCiAg ICAgICAgcmV0dXJuIF9fbGFzdDsNCiAgICAgIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0 Ow0KICAgICAgd2hpbGUoKytfX25leHQgIT0gX19sYXN0KSB7DQogICAgICAgIGlmIChfX2JpbmFy eV9wcmVkKCpfX2ZpcnN0LCAqX19uZXh0KSkNCiAgICAgICAgICByZXR1cm4gX19maXJzdDsNCiAg ICAgICAgX19maXJzdCA9IF9fbmV4dDsNCiAgICAgIH0NCiAgICAgIHJldHVybiBfX2xhc3Q7DQog ICAgfQ0KIyAzODcgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Fs Z28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfVHA+DQog ICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUN CiAgICBjb3VudChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBjb25zdCBf VHAmIF9fdmFsdWUpDQogICAgew0KDQogICAgIA0KICAgICANCg0KICAgICANCiAgICAgIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7 DQogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpDQogICAgICAgIGlm ICgqX19maXJzdCA9PSBfX3ZhbHVlKQ0KICAgICAgICAgICsrX19uOw0KICAgICAgcmV0dXJuIF9f bjsNCiAgICB9DQojIDQxMSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9z dGxfYWxnby5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Q cmVkaWNhdGU+DQogICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZm ZXJlbmNlX3R5cGUNCiAgICBjb3VudF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg X19sYXN0LCBfUHJlZGljYXRlIF9fcHJlZCkNCiAgICB7DQoNCiAgICAgDQogICAgIA0KDQogICAg ICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZSBf X24gPSAwOw0KICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQ0KICAg ICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkNCiAgICAgICAgICArK19fbjsNCiAgICAgIHJldHVy biBfX247DQogICAgfQ0KIyA0NTAgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBl bmFtZSBfRm9yd2FyZEl0ZXIyPg0KICAgIF9Gb3J3YXJkSXRlcjENCiAgICBzZWFyY2goX0Zvcndh cmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgICBfRm9y d2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIpDQogICAgew0KDQogICAg IA0KICAgICANCiAgICAgDQoNCg0KDQoNCiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxIHx8 IF9fZmlyc3QyID09IF9fbGFzdDIpDQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsNCg0KDQogICAg ICBfRm9yd2FyZEl0ZXIyIF9fdG1wKF9fZmlyc3QyKTsNCiAgICAgICsrX190bXA7DQogICAgICBp ZiAoX190bXAgPT0gX19sYXN0MikNCiAgICAgICAgcmV0dXJuIGZpbmQoX19maXJzdDEsIF9fbGFz dDEsICpfX2ZpcnN0Mik7DQoNCg0KDQogICAgICBfRm9yd2FyZEl0ZXIyIF9fcDEsIF9fcDsNCg0K ICAgICAgX19wMSA9IF9fZmlyc3QyOyArK19fcDE7DQoNCiAgICAgIF9Gb3J3YXJkSXRlcjEgX19j dXJyZW50ID0gX19maXJzdDE7DQoNCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7 DQogICAgICAgIF9fZmlyc3QxID0gZmluZChfX2ZpcnN0MSwgX19sYXN0MSwgKl9fZmlyc3QyKTsN CiAgICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpDQogICAgICAgICAgcmV0dXJuIF9fbGFz dDE7DQoNCiAgICAgICAgX19wID0gX19wMTsNCiAgICAgICAgX19jdXJyZW50ID0gX19maXJzdDE7 DQogICAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQ0KICAgICAgICAgIHJldHVybiBf X2xhc3QxOw0KDQogICAgICAgIHdoaWxlICgqX19jdXJyZW50ID09ICpfX3ApIHsNCiAgICAgICAg ICBpZiAoKytfX3AgPT0gX19sYXN0MikNCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0MTsNCiAg ICAgICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkNCiAgICAgICAgICAgIHJldHVybiBf X2xhc3QxOw0KICAgICAgICB9DQoNCiAgICAgICAgKytfX2ZpcnN0MTsNCiAgICAgIH0NCiAgICAg IHJldHVybiBfX2ZpcnN0MTsNCiAgICB9DQojIDUyMiAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVk ZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk SXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkPg0KICAg IF9Gb3J3YXJkSXRlcjENCiAgICBzZWFyY2goX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0Zvcndh cmRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9y d2FyZEl0ZXIyIF9fbGFzdDIsDQogICAgICAgICAgIF9CaW5hcnlQcmVkIF9fcHJlZGljYXRlKQ0K ICAgIHsNCg0KICAgICANCiAgICAgDQogICAgIA0KDQoNCg0KDQogICAgICBpZiAoX19maXJzdDEg PT0gX19sYXN0MSB8fCBfX2ZpcnN0MiA9PSBfX2xhc3QyKQ0KICAgICAgICByZXR1cm4gX19maXJz dDE7DQoNCg0KICAgICAgX0ZvcndhcmRJdGVyMiBfX3RtcChfX2ZpcnN0Mik7DQogICAgICArK19f dG1wOw0KICAgICAgaWYgKF9fdG1wID09IF9fbGFzdDIpIHsNCiAgICAgICAgd2hpbGUgKF9fZmly c3QxICE9IF9fbGFzdDEgJiYgIV9fcHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkNCiAg ICAgICAgICArK19fZmlyc3QxOw0KICAgICAgICByZXR1cm4gX19maXJzdDE7DQogICAgICB9DQoN Cg0KDQogICAgICBfRm9yd2FyZEl0ZXIyIF9fcDEsIF9fcDsNCg0KICAgICAgX19wMSA9IF9fZmly c3QyOyArK19fcDE7DQoNCiAgICAgIF9Gb3J3YXJkSXRlcjEgX19jdXJyZW50ID0gX19maXJzdDE7 DQoNCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7DQogICAgICAgIHdoaWxlIChf X2ZpcnN0MSAhPSBfX2xhc3QxKSB7DQogICAgICAgICAgaWYgKF9fcHJlZGljYXRlKCpfX2ZpcnN0 MSwgKl9fZmlyc3QyKSkNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICsrX19maXJzdDE7 DQogICAgICAgIH0NCiAgICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgIV9fcHJl ZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkNCiAgICAgICAgICArK19fZmlyc3QxOw0KICAg ICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkNCiAgICAgICAgICByZXR1cm4gX19sYXN0MTsN Cg0KICAgICAgICBfX3AgPSBfX3AxOw0KICAgICAgICBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsNCiAg ICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpIHJldHVybiBfX2xhc3QxOw0KDQogICAg ICAgIHdoaWxlIChfX3ByZWRpY2F0ZSgqX19jdXJyZW50LCAqX19wKSkgew0KICAgICAgICAgIGlm ICgrK19fcCA9PSBfX2xhc3QyKQ0KICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3QxOw0KICAgICAg ICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQ0KICAgICAgICAgICAgcmV0dXJuIF9fbGFz dDE7DQogICAgICAgIH0NCg0KICAgICAgICArK19fZmlyc3QxOw0KICAgICAgfQ0KICAgICAgcmV0 dXJuIF9fZmlyc3QxOw0KICAgIH0NCiMgNTk2ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2cr Ky12My9iaXRzL3N0bF9hbGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVy LCB0eXBlbmFtZSBfSW50ZWdlciwgdHlwZW5hbWUgX1RwPg0KICAgIF9Gb3J3YXJkSXRlcg0KICAg IHNlYXJjaF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0KICAg ICAgICAgICAgIF9JbnRlZ2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192YWwpDQogICAgew0KDQog ICAgIA0KICAgICANCg0KICAgICANCg0KICAgICAgaWYgKF9fY291bnQgPD0gMCkNCiAgICAgICAg cmV0dXJuIF9fZmlyc3Q7DQogICAgICBlbHNlIHsNCiAgICAgICAgX19maXJzdCA9IGZpbmQoX19m aXJzdCwgX19sYXN0LCBfX3ZhbCk7DQogICAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkg ew0KICAgICAgICAgIF9JbnRlZ2VyIF9fbiA9IF9fY291bnQgLSAxOw0KICAgICAgICAgIF9Gb3J3 YXJkSXRlciBfX2kgPSBfX2ZpcnN0Ow0KICAgICAgICAgICsrX19pOw0KICAgICAgICAgIHdoaWxl IChfX2kgIT0gX19sYXN0ICYmIF9fbiAhPSAwICYmICpfX2kgPT0gX192YWwpIHsNCiAgICAgICAg ICAgICsrX19pOw0KICAgICAgICAgICAgLS1fX247DQogICAgICAgICAgfQ0KICAgICAgICAgIGlm IChfX24gPT0gMCkNCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0Ow0KICAgICAgICAgIGVsc2UN CiAgICAgICAgICAgIF9fZmlyc3QgPSBmaW5kKF9faSwgX19sYXN0LCBfX3ZhbCk7DQogICAgICAg IH0NCiAgICAgICAgcmV0dXJuIF9fbGFzdDsNCiAgICAgIH0NCiAgICB9DQojIDY0MyAidDovbXN5 cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzDQogIHRlbXBsYXRl PHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0ludGVnZXIsIHR5cGVuYW1lIF9UcCwN CiAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeVByZWQ+DQogICAgX0ZvcndhcmRJdGVyDQogICAg c2VhcmNoX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAg ICAgICAgICAgX0ludGVnZXIgX19jb3VudCwgY29uc3QgX1RwJiBfX3ZhbCwNCiAgICAgICAgICAg ICBfQmluYXJ5UHJlZCBfX2JpbmFyeV9wcmVkKQ0KICAgIHsNCg0KICAgICANCiAgICAgDQoNCg0K ICAgICAgaWYgKF9fY291bnQgPD0gMCkNCiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7DQogICAgICBl bHNlIHsNCiAgICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7DQogICAgICAgICAgaWYg KF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsIF9fdmFsKSkNCiAgICAgICAgICAgIGJyZWFrOw0KICAg ICAgICAgICsrX19maXJzdDsNCiAgICAgICAgfQ0KICAgICAgICB3aGlsZSAoX19maXJzdCAhPSBf X2xhc3QpIHsNCiAgICAgICAgICBfSW50ZWdlciBfX24gPSBfX2NvdW50IC0gMTsNCiAgICAgICAg ICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsNCiAgICAgICAgICArK19faTsNCiAgICAgICAg ICB3aGlsZSAoX19pICE9IF9fbGFzdCAmJiBfX24gIT0gMCAmJiBfX2JpbmFyeV9wcmVkKCpfX2ks IF9fdmFsKSkgew0KICAgICAgICAgICAgKytfX2k7DQogICAgICAgICAgICAtLV9fbjsNCiAgICAg ICAgICB9DQogICAgICAgICAgaWYgKF9fbiA9PSAwKQ0KICAgICAgICAgICAgcmV0dXJuIF9fZmly c3Q7DQogICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICB3aGlsZSAoX19pICE9IF9fbGFzdCkg ew0KICAgICAgICAgICAgICBpZiAoX19iaW5hcnlfcHJlZCgqX19pLCBfX3ZhbCkpDQogICAgICAg ICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICsrX19pOw0KICAgICAgICAgICAgfQ0KICAg ICAgICAgICAgX19maXJzdCA9IF9faTsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAg cmV0dXJuIF9fbGFzdDsNCiAgICAgIH0NCiAgICB9DQojIDY5NyAidDovbXN5cy8xLjAvbWluZ3cv aW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9G b3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjI+DQogICAgX0ZvcndhcmRJdGVyMg0K ICAgIHN3YXBfcmFuZ2VzKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19s YXN0MSwNCiAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyKQ0KICAgIHsNCg0K ICAgICANCiAgICAgDQogICAgIA0KDQoNCiAgICAgDQoNCg0KDQogICAgICBmb3IgKCA7IF9fZmly c3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpDQogICAgICAgIGl0ZXJfc3dh cChfX2ZpcnN0MSwgX19maXJzdDIpOw0KICAgICAgcmV0dXJuIF9fZmlyc3QyOw0KICAgIH0NCiMg NzMyICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5 cGVuYW1lIF9VbmFyeU9wZXJhdGlvbj4NCiAgICBfT3V0cHV0SXRlcg0KICAgIHRyYW5zZm9ybShf SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICBfT3V0 cHV0SXRlciBfX3Jlc3VsdCwgX1VuYXJ5T3BlcmF0aW9uIF9fdW5hcnlfb3ApDQogICAgew0KDQog ICAgIA0KICAgICANCg0KDQoNCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19m aXJzdCwgKytfX3Jlc3VsdCkNCiAgICAgICAgKl9fcmVzdWx0ID0gX191bmFyeV9vcCgqX19maXJz dCk7DQogICAgICByZXR1cm4gX19yZXN1bHQ7DQogICAgfQ0KIyA3NjUgInQ6L21zeXMvMS4wL21p bmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVy LA0KICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5T3BlcmF0aW9uPg0KICAgIF9PdXRwdXRJdGVy DQogICAgdHJhbnNmb3JtKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3Qx LA0KICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX091dHB1dEl0ZXIgX19yZXN1 bHQsDQogICAgICAgICAgICAgIF9CaW5hcnlPcGVyYXRpb24gX19iaW5hcnlfb3ApDQogICAgew0K DQogICAgIA0KICAgICANCiAgICAgDQoNCg0KDQogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9f bGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIsICsrX19yZXN1bHQpDQogICAgICAgICpfX3Jl c3VsdCA9IF9fYmluYXJ5X29wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKTsNCiAgICAgIHJldHVybiBf X3Jlc3VsdDsNCiAgICB9DQojIDc5NiAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMv Yml0cy9zdGxfYWxnby5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlw ZW5hbWUgX1RwPg0KICAgIHZvaWQNCiAgICByZXBsYWNlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf Rm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgY29uc3QgX1RwJiBfX29sZF92YWx1ZSwg Y29uc3QgX1RwJiBfX25ld192YWx1ZSkNCiAgICB7DQoNCiAgICAgDQogICAgIA0KDQogICAgIA0K DQoNCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkNCiAgICAgICAg aWYgKCpfX2ZpcnN0ID09IF9fb2xkX3ZhbHVlKQ0KICAgICAgICAgICpfX2ZpcnN0ID0gX19uZXdf dmFsdWU7DQogICAgfQ0KIyA4MjUgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVu YW1lIF9QcmVkaWNhdGUsIHR5cGVuYW1lIF9UcD4NCiAgICB2b2lkDQogICAgcmVwbGFjZV9pZihf Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAg IF9QcmVkaWNhdGUgX19wcmVkLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQ0KICAgIHsNCg0KICAg ICANCiAgICAgDQoNCiAgICAgDQoNCg0KICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsg KytfX2ZpcnN0KQ0KICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkNCiAgICAgICAgICAqX19m aXJzdCA9IF9fbmV3X3ZhbHVlOw0KICAgIH0NCiMgODU2ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNs dWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0 SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4NCiAgICBfT3V0cHV0SXRl cg0KICAgIHJlcGxhY2VfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0 LA0KICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwNCiAgICAgICAgICAgICAg ICAgY29uc3QgX1RwJiBfX29sZF92YWx1ZSwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkNCiAgICB7 DQoNCiAgICAgDQogICAgIA0KDQogICAgIA0KDQoNCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBf X2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkNCiAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmly c3QgPT0gX19vbGRfdmFsdWUgPyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0Ow0KICAgICAgcmV0dXJu IF9fcmVzdWx0Ow0KICAgIH0NCiMgODg4ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12 My9iaXRzL3N0bF9hbGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlw ZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsDQogICAgICAgICAgIHR5cGVu YW1lIF9UcD4NCiAgICBfT3V0cHV0SXRlcg0KICAgIHJlcGxhY2VfY29weV9pZihfSW5wdXRJdGVy IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICBfT3V0cHV0 SXRlciBfX3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIGNv bnN0IF9UcCYgX19uZXdfdmFsdWUpDQogICAgew0KDQogICAgIA0KICAgICANCg0KICAgICANCg0K DQogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQp DQogICAgICAgICpfX3Jlc3VsdCA9IF9fcHJlZCgqX19maXJzdCkgPyBfX25ld192YWx1ZSA6ICpf X2ZpcnN0Ow0KICAgICAgcmV0dXJuIF9fcmVzdWx0Ow0KICAgIH0NCiMgOTE4ICJ0Oi9tc3lzLzEu MC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfR2VuZXJhdG9yPg0KICAgIHZvaWQNCiAgICBn ZW5lcmF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgX0dlbmVy YXRvciBfX2dlbikNCiAgICB7DQoNCiAgICAgDQogICAgIA0KDQoNCiAgICAgIGZvciAoIDsgX19m aXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkNCiAgICAgICAgKl9fZmlyc3QgPSBfX2dlbigpOw0K ICAgIH0NCiMgOTQyICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9h bGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9TaXpl LCB0eXBlbmFtZSBfR2VuZXJhdG9yPg0KICAgIF9PdXRwdXRJdGVyDQogICAgZ2VuZXJhdGVfbihf T3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIF9HZW5lcmF0b3IgX19nZW4pDQogICAgew0K DQogICAgIA0KDQoNCg0KICAgICAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2ZpcnN0KQ0K ICAgICAgICAqX19maXJzdCA9IF9fZ2VuKCk7DQogICAgICByZXR1cm4gX19maXJzdDsNCiAgICB9 DQojIDk2OSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5o IiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVy LCB0eXBlbmFtZSBfVHA+DQogICAgX091dHB1dEl0ZXINCiAgICByZW1vdmVfY29weShfSW5wdXRJ dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgIF9PdXRwdXRJ dGVyIF9fcmVzdWx0LCBjb25zdCBfVHAmIF9fdmFsdWUpDQogICAgew0KDQogICAgIA0KICAgICAN Cg0KICAgICANCg0KDQogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3Qp DQogICAgICAgIGlmICghKCpfX2ZpcnN0ID09IF9fdmFsdWUpKSB7DQogICAgICAgICAgKl9fcmVz dWx0ID0gKl9fZmlyc3Q7DQogICAgICAgICAgKytfX3Jlc3VsdDsNCiAgICAgICAgfQ0KICAgICAg cmV0dXJuIF9fcmVzdWx0Ow0KICAgIH0NCiMgMTAwMyAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVk ZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0 ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPg0KICAgIF9PdXRw dXRJdGVyDQogICAgcmVtb3ZlX2NvcHlfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy IF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1ByZWRp Y2F0ZSBfX3ByZWQpDQogICAgew0KDQogICAgIA0KICAgICANCg0KICAgICANCg0KDQogICAgICBm b3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpDQogICAgICAgIGlmICghX19wcmVk KCpfX2ZpcnN0KSkgew0KICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0Ow0KICAgICAgICAg ICsrX19yZXN1bHQ7DQogICAgICAgIH0NCiAgICAgIHJldHVybiBfX3Jlc3VsdDsNCiAgICB9DQoj IDEwMzkgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIg Mw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4NCiAgICBf Rm9yd2FyZEl0ZXINCiAgICByZW1vdmUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl ciBfX2xhc3QsDQogICAgICAgICAgIGNvbnN0IF9UcCYgX192YWx1ZSkNCiAgICB7DQoNCiAgICAg DQogICAgIA0KDQogICAgIA0KDQoNCiAgICAgIF9fZmlyc3QgPSBmaW5kKF9fZmlyc3QsIF9fbGFz dCwgX192YWx1ZSk7DQogICAgICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsNCiAgICAgIHJl dHVybiBfX2ZpcnN0ID09IF9fbGFzdCA/IF9fZmlyc3QNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA6IHJlbW92ZV9jb3B5KCsrX19pLCBfX2xhc3QsIF9fZmlyc3QsIF9fdmFsdWUpOw0K ICAgIH0NCiMgMTA3MyAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf YWxnby5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1By ZWRpY2F0ZT4NCiAgICBfRm9yd2FyZEl0ZXINCiAgICByZW1vdmVfaWYoX0ZvcndhcmRJdGVyIF9f Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19w cmVkKQ0KICAgIHsNCg0KICAgICANCiAgICAgDQoNCg0KICAgICAgX19maXJzdCA9IGZpbmRfaWYo X19maXJzdCwgX19sYXN0LCBfX3ByZWQpOw0KICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmly c3Q7DQogICAgICByZXR1cm4gX19maXJzdCA9PSBfX2xhc3QgPyBfX2ZpcnN0DQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOiByZW1vdmVfY29weV9pZigrK19faSwgX19sYXN0LCBfX2Zp cnN0LCBfX3ByZWQpOw0KICAgIH0NCg0KDQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf SW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4NCiAgICBfT3V0cHV0SXRlcg0KICAgIF9f dW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAg ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LA0KICAgICAgICAgICAgICAgICAgb3V0 cHV0X2l0ZXJhdG9yX3RhZykNCiAgICB7DQoNCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSBfX3ZhbHVlID0gKl9fZmlyc3Q7DQogICAgICAqX19y ZXN1bHQgPSBfX3ZhbHVlOw0KICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpDQogICAg ICAgIGlmICghKF9fdmFsdWUgPT0gKl9fZmlyc3QpKSB7DQogICAgICAgICAgX192YWx1ZSA9ICpf X2ZpcnN0Ow0KICAgICAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsNCiAgICAgICAgfQ0KICAg ICAgcmV0dXJuICsrX19yZXN1bHQ7DQogICAgfQ0KDQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5 cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4NCiAgICBfRm9yd2FyZEl0 ZXINCiAgICBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh c3QsDQogICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsDQogICAgICAgICAg ICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykNCiAgICB7DQoNCiAgICAgICpfX3Jlc3VsdCA9 ICpfX2ZpcnN0Ow0KICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpDQogICAgICAgIGlm ICghKCpfX3Jlc3VsdCA9PSAqX19maXJzdCkpDQogICAgICAgICAgKisrX19yZXN1bHQgPSAqX19m aXJzdDsNCiAgICAgIHJldHVybiArK19fcmVzdWx0Ow0KICAgIH0NCiMgMTE0NSAidDovbXN5cy8x LjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzDQogIHRlbXBsYXRlPHR5 cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPg0KICAgIGlubGluZSBfT3V0 cHV0SXRlcg0KICAgIHVuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf X2xhc3QsDQogICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpDQogICAgew0KDQog ICAgIA0KICAgICANCg0KICAgICANCg0KDQogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y X3RyYWl0czxfT3V0cHV0SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyVHlwZTsNCg0KICAg ICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7DQogICAgICByZXR1cm4g X191bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfSXRlclR5cGUoKSk7DQog ICAgfQ0KIyAxMTcwICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9h bGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1 dEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+DQogICAgX091dHB1dEl0ZXINCiAgICBf X3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAg ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAgIF9C aW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCwNCiAgICAgICAgICAgICAgICAgIG91dHB1dF9p dGVyYXRvcl90YWcpDQogICAgew0KDQogICAgIA0KDQoNCg0KICAgICAgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9fdmFsdWUgPSAqX19maXJzdDsNCiAg ICAgICpfX3Jlc3VsdCA9IF9fdmFsdWU7DQogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFz dCkNCiAgICAgICAgaWYgKCFfX2JpbmFyeV9wcmVkKF9fdmFsdWUsICpfX2ZpcnN0KSkgew0KICAg ICAgICAgIF9fdmFsdWUgPSAqX19maXJzdDsNCiAgICAgICAgICAqKytfX3Jlc3VsdCA9IF9fdmFs dWU7DQogICAgICAgIH0NCiAgICAgIHJldHVybiArK19fcmVzdWx0Ow0KICAgIH0NCiMgMTE5OSAi dDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzDQogIHRl bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5h bWUgX0JpbmFyeVByZWRpY2F0ZT4NCiAgICBfRm9yd2FyZEl0ZXINCiAgICBfX3VuaXF1ZV9jb3B5 KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAg ICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsDQogICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGlj YXRlIF9fYmluYXJ5X3ByZWQsDQogICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3Rh ZykNCiAgICB7DQoNCiAgICAgDQoNCg0KDQogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsNCiAg ICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQ0KICAgICAgICBpZiAoIV9fYmluYXJ5X3By ZWQoKl9fcmVzdWx0LCAqX19maXJzdCkpICorK19fcmVzdWx0ID0gKl9fZmlyc3Q7DQogICAgICBy ZXR1cm4gKytfX3Jlc3VsdDsNCiAgICB9DQojIDEyMzIgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ dGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4NCiAg ICBpbmxpbmUgX091dHB1dEl0ZXINCiAgICB1bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3Qs IF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0 LA0KICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkNCiAgICB7 DQoNCiAgICAgDQogICAgIA0KDQoNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9PdXRwdXRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJUeXBlOw0KDQogICAgICBp ZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX3Jlc3VsdDsNCiAgICAgIHJldHVybiBfX3Vu aXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwNCl9fcmVzdWx0LCBfX2JpbmFyeV9wcmVkLCBfSXRl clR5cGUoKSk7DQogICAgfQ0KIyAxMjYzICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12 My9iaXRzL3N0bF9hbGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPg0K ICAgIF9Gb3J3YXJkSXRlcg0KICAgIHVuaXF1ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zvcndh cmRJdGVyIF9fbGFzdCkNCiAgICB7DQoNCiAgICAgICAgIA0KICAgICAgICAgDQoNCg0KICAgICAg ICAgIF9fZmlyc3QgPSBhZGphY2VudF9maW5kKF9fZmlyc3QsIF9fbGFzdCk7DQogICAgICAgICAg cmV0dXJuIHVuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19maXJzdCk7DQogICAgfQ0KIyAx MjkwICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGlj YXRlPg0KICAgIF9Gb3J3YXJkSXRlcg0KICAgIHVuaXF1ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwg X0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFy eV9wcmVkKQ0KICAgIHsNCg0KICAgICANCiAgICAgDQoNCg0KDQogICAgICBfX2ZpcnN0ID0gYWRq YWNlbnRfZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fYmluYXJ5X3ByZWQpOw0KICAgICAgcmV0dXJu IHVuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19maXJzdCwgX19iaW5hcnlfcHJlZCk7DQog ICAgfQ0KDQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRl cj4NCiAgICB2b2lkDQogICAgX19yZXZlcnNlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBf QmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRp cmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykNCiAgICB7DQogICAgICAgICAgd2hpbGUgKHRydWUpDQog ICAgICAgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QgfHwgX19maXJzdCA9PSAtLV9fbGFzdCkN CiAgICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAg ICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0KyssIF9fbGFzdCk7DQogICAgfQ0KDQoNCg0KDQoNCg0K DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPg0KICAgIHZvaWQNCiAgICBf X3JldmVyc2UoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s YXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3Rh ZykNCiAgICB7DQogICAgICAgICAgd2hpbGUgKF9fZmlyc3QgPCBfX2xhc3QpDQogICAgICAgICAg ICBpdGVyX3N3YXAoX19maXJzdCsrLCAtLV9fbGFzdCk7DQogICAgfQ0KIyAxMzQ5ICJ0Oi9tc3lz LzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMNCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPg0KICAgIGlubGluZSB2b2lkDQogICAgcmV2ZXJz ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkN CiAgICB7DQoNCiAgICAgICAgIA0KDQogICAgICAgICAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbGFz dCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7DQogICAgfQ0KIyAxMzc0ICJ0Oi9tc3lz LzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMNCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4NCiAgICBf T3V0cHV0SXRlcg0KICAgIHJldmVyc2VfY29weShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwg X0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X091dHB1dEl0ZXIgX19yZXN1bHQpDQogICAgew0KDQogICAgIA0KICAgICANCg0KDQogICAgICB3 aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsNCiAgICAgICAgLS1fX2xhc3Q7DQogICAgICAgICpf X3Jlc3VsdCA9ICpfX2xhc3Q7DQogICAgICAgICsrX19yZXN1bHQ7DQogICAgICB9DQogICAgICBy ZXR1cm4gX19yZXN1bHQ7DQogICAgfQ0KIyAxMzk5ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRl L2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0V1Y2xpZGVh blJpbmdFbGVtZW50Pg0KICAgIF9FdWNsaWRlYW5SaW5nRWxlbWVudA0KICAgIF9fZ2NkKF9FdWNs aWRlYW5SaW5nRWxlbWVudCBfX20sIF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX24pDQogICAgew0K ICAgICAgd2hpbGUgKF9fbiAhPSAwKSB7DQogICAgICAgIF9FdWNsaWRlYW5SaW5nRWxlbWVudCBf X3QgPSBfX20gJSBfX247DQogICAgICAgIF9fbSA9IF9fbjsNCiAgICAgICAgX19uID0gX190Ow0K ICAgICAgfQ0KICAgICAgcmV0dXJuIF9fbTsNCiAgICB9DQoNCg0KDQoNCg0KDQogIHRlbXBsYXRl PHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4NCiAgICB2b2lkDQogICAgX19yb3RhdGUoX0ZvcndhcmRJ dGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLA0KICAgICAg ICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0 b3JfdGFnKQ0KICAgIHsNCiAgICAgIGlmICgoX19maXJzdCA9PSBfX21pZGRsZSkgfHwgKF9fbGFz dCA9PSBfX21pZGRsZSkpDQogICAgICAgIHJldHVybjsNCg0KICAgICAgX0ZvcndhcmRJdGVyIF9f Zmlyc3QyID0gX19taWRkbGU7DQogICAgICBkbyB7DQogICAgICAgIHN3YXAoKl9fZmlyc3QrKywg Kl9fZmlyc3QyKyspOw0KICAgICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkNCiAgICAgICAg ICBfX21pZGRsZSA9IF9fZmlyc3QyOw0KICAgICAgfSB3aGlsZSAoX19maXJzdDIgIT0gX19sYXN0 KTsNCg0KICAgICAgX19maXJzdDIgPSBfX21pZGRsZTsNCg0KICAgICAgd2hpbGUgKF9fZmlyc3Qy ICE9IF9fbGFzdCkgew0KICAgICAgICBzd2FwKCpfX2ZpcnN0KyssICpfX2ZpcnN0MisrKTsNCiAg ICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpDQogICAgICAgICAgX19taWRkbGUgPSBfX2Zp cnN0MjsNCiAgICAgICAgZWxzZSBpZiAoX19maXJzdDIgPT0gX19sYXN0KQ0KICAgICAgICAgIF9f Zmlyc3QyID0gX19taWRkbGU7DQogICAgICB9DQogICAgfQ0KDQoNCg0KDQoNCg0KICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+DQogICAgdm9pZA0KICAgIF9fcm90YXRlKF9C aWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl ciBfX21pZGRsZSwNCiAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LA0KICAg ICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykNCiAgICB7DQoNCiAgICAgDQoN Cg0KICAgICAgaWYgKChfX2ZpcnN0ID09IF9fbWlkZGxlKSB8fCAoX19sYXN0ID09IF9fbWlkZGxl KSkNCiAgICAgICAgcmV0dXJuOw0KDQogICAgICBfX3JldmVyc2UoX19maXJzdCwgX19taWRkbGUs IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOw0KICAgICAgX19yZXZlcnNlKF9fbWlkZGxl LCBfX2xhc3QsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOw0KDQogICAgICB3aGlsZSAo X19maXJzdCAhPSBfX21pZGRsZSAmJiBfX21pZGRsZSAhPSBfX2xhc3QpDQogICAgICAgIHN3YXAg KCpfX2ZpcnN0KyssICotLV9fbGFzdCk7DQoNCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxl KSB7DQogICAgICAgIF9fcmV2ZXJzZShfX21pZGRsZSwgX19sYXN0LCBiaWRpcmVjdGlvbmFsX2l0 ZXJhdG9yX3RhZygpKTsNCiAgICAgIH0NCiAgICAgIGVsc2Ugew0KICAgICAgICBfX3JldmVyc2Uo X19maXJzdCwgX19taWRkbGUsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOw0KICAgICAg fQ0KICAgIH0NCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0 ZXI+DQogICAgdm9pZA0KICAgIF9fcm90YXRlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsDQog ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsDQogICAgICAgICAgICAgX1Jh bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LA0KICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0 b3JfdGFnKQ0KICAgIHsNCg0KICAgICANCg0KDQogICAgICBpZiAoKF9fZmlyc3QgPT0gX19taWRk bGUpIHx8IChfX2xhc3QgPT0gX19taWRkbGUpKQ0KICAgICAgICByZXR1cm47DQoNCiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVy ZW5jZV90eXBlIF9EaXN0YW5jZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOw0KDQogICAgICBf RGlzdGFuY2UgX19uID0gX19sYXN0IC0gX19maXJzdDsNCiAgICAgIF9EaXN0YW5jZSBfX2sgPSBf X21pZGRsZSAtIF9fZmlyc3Q7DQogICAgICBfRGlzdGFuY2UgX19sID0gX19uIC0gX19rOw0KDQog ICAgICBpZiAoX19rID09IF9fbCkgew0KICAgICAgICBzd2FwX3JhbmdlcyhfX2ZpcnN0LCBfX21p ZGRsZSwgX19taWRkbGUpOw0KICAgICAgICByZXR1cm47DQogICAgICB9DQoNCiAgICAgIF9EaXN0 YW5jZSBfX2QgPSBfX2djZChfX24sIF9fayk7DQoNCiAgICAgIGZvciAoX0Rpc3RhbmNlIF9faSA9 IDA7IF9faSA8IF9fZDsgX19pKyspIHsNCiAgICAgICAgX1ZhbHVlVHlwZSBfX3RtcCA9ICpfX2Zp cnN0Ow0KICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3AgPSBfX2ZpcnN0Ow0KDQogICAgICAg IGlmIChfX2sgPCBfX2wpIHsNCiAgICAgICAgICBmb3IgKF9EaXN0YW5jZSBfX2ogPSAwOyBfX2og PCBfX2wvX19kOyBfX2orKykgew0KICAgICAgICAgICAgaWYgKF9fcCA+IF9fZmlyc3QgKyBfX2wp IHsNCiAgICAgICAgICAgICAgKl9fcCA9ICooX19wIC0gX19sKTsNCiAgICAgICAgICAgICAgX19w IC09IF9fbDsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgKl9fcCA9ICooX19wICsgX19r KTsNCiAgICAgICAgICAgIF9fcCArPSBfX2s7DQogICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAg ICAgICAgZWxzZSB7DQogICAgICAgICAgZm9yIChfRGlzdGFuY2UgX19qID0gMDsgX19qIDwgX19r L19fZCAtIDE7IF9faiArKykgew0KICAgICAgICAgICAgaWYgKF9fcCA8IF9fbGFzdCAtIF9faykg ew0KICAgICAgICAgICAgICAqX19wID0gKihfX3AgKyBfX2spOw0KICAgICAgICAgICAgICBfX3Ag Kz0gX19rOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAqX19wID0gKiAoX19wIC0gX19s KTsNCiAgICAgICAgICAgIF9fcCAtPSBfX2w7DQogICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAg ICAgICAgKl9fcCA9IF9fdG1wOw0KICAgICAgICArK19fZmlyc3Q7DQogICAgICB9DQogICAgfQ0K IyAxNTYxICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgi IDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPg0KICAgIGlubGluZSB2b2lkDQog ICAgcm90YXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19taWRkbGUsIF9G b3J3YXJkSXRlciBfX2xhc3QpDQogICAgew0KDQogICAgIA0KDQogICAgICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfSXRl clR5cGU7DQogICAgICBfX3JvdGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfSXRlclR5 cGUoKSk7DQogICAgfQ0KIyAxNTg5ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9i aXRzL3N0bF9hbGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBl bmFtZSBfT3V0cHV0SXRlcj4NCiAgICBfT3V0cHV0SXRlcg0KICAgIHJvdGF0ZV9jb3B5KF9Gb3J3 YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19taWRkbGUsDQogICAgICAgICAgICAgICAg X0ZvcndhcmRJdGVyIF9fbGFzdCwgX091dHB1dEl0ZXIgX19yZXN1bHQpDQogICAgew0KDQogICAg IA0KICAgICANCg0KDQogICAgICByZXR1cm4gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgY29weShf X21pZGRsZSwgX19sYXN0LCBfX3Jlc3VsdCkpOw0KICAgIH0NCiMgMTYxMiAidDovbXN5cy8xLjAv bWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9EaXN0YW5jZT4NCiAgICBpbmxpbmUgX0Rpc3RhbmNlDQogICAgX19yYW5kb21fbnVtYmVy KF9EaXN0YW5jZSBfX24pDQogICAgew0KDQoNCg0KICAgICAgcmV0dXJuIHJhbmQoKSAlIF9fbjsN Cg0KICAgIH0NCiMgMTYzNCAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9z dGxfYWxnby5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPg0KICAg IGlubGluZSB2b2lkDQogICAgcmFuZG9tX3NodWZmbGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz dCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQ0KICAgIHsNCg0KICAgICANCg0KDQogICAgICBp ZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsNCiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0 ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQ0KICAgICAgICBpdGVy X3N3YXAoX19pLCBfX2ZpcnN0ICsgX19yYW5kb21fbnVtYmVyKChfX2kgLSBfX2ZpcnN0KSArIDEp KTsNCiAgICB9DQojIDE2NjAgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMv c3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlw ZW5hbWUgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4NCiAgICB2b2lkDQogICAgcmFuZG9tX3NodWZm bGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LA0K ICAgICAgICAgICAgICAgICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCkNCiAgICB7 DQoNCiAgICAgDQoNCg0KICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47DQogICAg ICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0 OyArK19faSkNCiAgICAgICAgaXRlcl9zd2FwKF9faSwgX19maXJzdCArIF9fcmFuZCgoX19pIC0g X19maXJzdCkgKyAxKSk7DQogICAgfQ0KDQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1l IF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4NCiAgICBfRm9yd2FyZEl0ZXINCiAg ICBfX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwN CiAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwNCiAgICAgICAgICAgICAgICBmb3J3 YXJkX2l0ZXJhdG9yX3RhZykNCiAgICB7DQogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJl dHVybiBfX2ZpcnN0Ow0KDQogICAgICB3aGlsZSAoX19wcmVkKCpfX2ZpcnN0KSkNCiAgICAgICAg aWYgKCsrX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0Ow0KDQogICAgICBfRm9yd2Fy ZEl0ZXIgX19uZXh0ID0gX19maXJzdDsNCg0KICAgICAgd2hpbGUgKCsrX19uZXh0ICE9IF9fbGFz dCkNCiAgICAgICAgaWYgKF9fcHJlZCgqX19uZXh0KSkgew0KICAgICAgICAgIHN3YXAoKl9fZmly c3QsICpfX25leHQpOw0KICAgICAgICAgICsrX19maXJzdDsNCiAgICAgICAgfQ0KDQogICAgICBy ZXR1cm4gX19maXJzdDsNCiAgICB9DQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9C aWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4NCiAgICBfQmlkaXJlY3Rpb25h bEl0ZXINCiAgICBfX3BhcnRpdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGly ZWN0aW9uYWxJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwN CiAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykNCiAgICB7DQogICAg ICB3aGlsZSAodHJ1ZSkgew0KICAgICAgICB3aGlsZSAodHJ1ZSkNCiAgICAgICAgICBpZiAoX19m aXJzdCA9PSBfX2xhc3QpDQogICAgICAgICAgICByZXR1cm4gX19maXJzdDsNCiAgICAgICAgICBl bHNlIGlmIChfX3ByZWQoKl9fZmlyc3QpKQ0KICAgICAgICAgICAgKytfX2ZpcnN0Ow0KICAgICAg ICAgIGVsc2UNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAtLV9fbGFzdDsNCiAgICAgICAg d2hpbGUgKHRydWUpDQogICAgICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQ0KICAgICAgICAg ICAgcmV0dXJuIF9fZmlyc3Q7DQogICAgICAgICAgZWxzZSBpZiAoIV9fcHJlZCgqX19sYXN0KSkN CiAgICAgICAgICAgIC0tX19sYXN0Ow0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIGJyZWFr Ow0KICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsNCiAgICAgICAgKytfX2ZpcnN0 Ow0KICAgICAgfQ0KICAgIH0NCiMgMTc0OCAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKyst djMvYml0cy9zdGxfYWxnby5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwg dHlwZW5hbWUgX1ByZWRpY2F0ZT4NCiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyDQogICAgcGFydGl0 aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAg ICAgICBfUHJlZGljYXRlIF9fcHJlZCkNCiAgICB7DQoNCiAgICAgDQogICAgIA0KDQoNCiAgICAg IHJldHVybiBfX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgX19pdGVyYXRvcl9j YXRlZ29yeShfX2ZpcnN0KSk7DQogICAgfQ0KDQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwgdHlwZW5hbWUgX0Rpc3RhbmNl Pg0KICAgIF9Gb3J3YXJkSXRlcg0KICAgIF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9Gb3J3 YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBfRGlzdGFuY2UgX19sZW4pDQogICAgew0K ICAgICAgaWYgKF9fbGVuID09IDEpDQogICAgICAgIHJldHVybiBfX3ByZWQoKl9fZmlyc3QpID8g X19sYXN0IDogX19maXJzdDsNCiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZSA9IF9fZmlyc3Q7 DQogICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2xlbiAvIDIpOw0KICAgICAgX0ZvcndhcmRJdGVy IF9fYmVnaW4gPSBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX2ZpcnN0LCBfX21pZGRsZSwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19wcmVkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2xlbiAvIDIpOw0KICAgICAgX0ZvcndhcmRJdGVyIF9fZW5kID0gX19pbnBsYWNl X3N0YWJsZV9wYXJ0aXRpb24oX19taWRkbGUsIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHJlZCwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC0gX19sZW4gLyAy KTsNCiAgICAgIHJvdGF0ZShfX2JlZ2luLCBfX21pZGRsZSwgX19lbmQpOw0KICAgICAgYWR2YW5j ZShfX2JlZ2luLCBkaXN0YW5jZShfX21pZGRsZSwgX19lbmQpKTsNCiAgICAgIHJldHVybiBfX2Jl Z2luOw0KICAgIH0NCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVy LCB0eXBlbmFtZSBfUG9pbnRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwNCiAgICAgICAgICAgdHlw ZW5hbWUgX0Rpc3RhbmNlPg0KICAgIF9Gb3J3YXJkSXRlcg0KICAgIF9fc3RhYmxlX3BhcnRpdGlv bl9hZGFwdGl2ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIF9EaXN0YW5j ZSBfX2xlbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZm ZXIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2J1ZmZlcl9z aXplKQ0KICAgIHsNCiAgICAgIGlmIChfX2xlbiA8PSBfX2J1ZmZlcl9zaXplKSB7DQogICAgICAg IF9Gb3J3YXJkSXRlciBfX3Jlc3VsdDEgPSBfX2ZpcnN0Ow0KICAgICAgICBfUG9pbnRlciBfX3Jl c3VsdDIgPSBfX2J1ZmZlcjsNCiAgICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCA7ICsr X19maXJzdCkNCiAgICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgew0KICAgICAgICAgICAg Kl9fcmVzdWx0MSA9ICpfX2ZpcnN0Ow0KICAgICAgICAgICAgKytfX3Jlc3VsdDE7DQogICAgICAg ICAgfQ0KICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgKl9fcmVzdWx0MiA9ICpfX2ZpcnN0 Ow0KICAgICAgICAgICAgKytfX3Jlc3VsdDI7DQogICAgICAgICAgfQ0KICAgICAgICBjb3B5KF9f YnVmZmVyLCBfX3Jlc3VsdDIsIF9fcmVzdWx0MSk7DQogICAgICAgIHJldHVybiBfX3Jlc3VsdDE7 DQogICAgICB9DQogICAgICBlbHNlIHsNCiAgICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlID0g X19maXJzdDsNCiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19sZW4gLyAyKTsNCiAgICAgICAg X0ZvcndhcmRJdGVyIF9fYmVnaW4gPSBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoX19maXJz dCwgX19taWRkbGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fcHJlZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLyAyLA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1ZmZlciwgX19idWZm ZXJfc2l6ZSk7DQogICAgICAgIF9Gb3J3YXJkSXRlciBfX2VuZCA9IF9fc3RhYmxlX3BhcnRpdGlv bl9hZGFwdGl2ZSggX19taWRkbGUsIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByZWQsDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLSBfX2xlbiAv IDIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOw0KICAgICAgICByb3RhdGUoX19iZWdpbiwg X19taWRkbGUsIF9fZW5kKTsNCiAgICAgICAgYWR2YW5jZShfX2JlZ2luLCBkaXN0YW5jZShfX21p ZGRsZSwgX19lbmQpKTsNCiAgICAgICAgcmV0dXJuIF9fYmVnaW47DQogICAgICB9DQogICAgfQ0K IyAxODQ4ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgi IDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRl Pg0KICAgIF9Gb3J3YXJkSXRlcg0KICAgIHN0YWJsZV9wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9f Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICBfUHJlZGlj YXRlIF9fcHJlZCkNCiAgICB7DQoNCiAgICAgDQogICAgIA0KDQoNCiAgICAgIGlmIChfX2ZpcnN0 ID09IF9fbGFzdCkNCiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7DQogICAgICBlbHNlDQogICAgICB7 DQogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46 OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsNCiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7DQoN CiAgICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X0ZvcndhcmRJdGVyLCBfVmFsdWVUeXBlPiBfX2J1 ZihfX2ZpcnN0LCBfX2xhc3QpOw0KICAgICAgICBpZiAoX19idWYuc2l6ZSgpID4gMCkNCiAgICAg ICAgICByZXR1cm4gX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9fZmlyc3QsIF9fbGFzdCwg X19wcmVkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rp c3RhbmNlVHlwZShfX2J1Zi5yZXF1ZXN0ZWRfc2l6ZSgpKSwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9fYnVmLnNpemUoKSk7DQog ICAgICAgIGVsc2UNCiAgICAgICAgICByZXR1cm4gX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24o X19maXJzdCwgX19sYXN0LCBfX3ByZWQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9EaXN0YW5jZVR5cGUoX19idWYucmVxdWVzdGVkX3NpemUoKSkpOw0KICAg ICAgfQ0KICAgIH0NCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz c0l0ZXIsIHR5cGVuYW1lIF9UcD4NCiAgICBfUmFuZG9tQWNjZXNzSXRlcg0KICAgIF9fdW5ndWFy ZGVkX3BhcnRpdGlvbihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRl ciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgIF9UcCBfX3Bpdm90KQ0KICAgIHsN CiAgICAgIHdoaWxlICh0cnVlKSB7DQogICAgICAgIHdoaWxlICgqX19maXJzdCA8IF9fcGl2b3Qp DQogICAgICAgICAgKytfX2ZpcnN0Ow0KICAgICAgICAtLV9fbGFzdDsNCiAgICAgICAgd2hpbGUg KF9fcGl2b3QgPCAqX19sYXN0KQ0KICAgICAgICAgIC0tX19sYXN0Ow0KICAgICAgICBpZiAoIShf X2ZpcnN0IDwgX19sYXN0KSkNCiAgICAgICAgICByZXR1cm4gX19maXJzdDsNCiAgICAgICAgaXRl cl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7DQogICAgICAgICsrX19maXJzdDsNCiAgICAgIH0NCiAg ICB9DQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0 eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPg0KICAgIF9SYW5kb21BY2Nlc3NJdGVyDQog ICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5k b21BY2Nlc3NJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwIF9fcGl2 b3QsIF9Db21wYXJlIF9fY29tcCkNCiAgICB7DQogICAgICB3aGlsZSAodHJ1ZSkgew0KICAgICAg ICB3aGlsZSAoX19jb21wKCpfX2ZpcnN0LCBfX3Bpdm90KSkNCiAgICAgICAgICArK19fZmlyc3Q7 DQogICAgICAgIC0tX19sYXN0Ow0KICAgICAgICB3aGlsZSAoX19jb21wKF9fcGl2b3QsICpfX2xh c3QpKQ0KICAgICAgICAgIC0tX19sYXN0Ow0KICAgICAgICBpZiAoIShfX2ZpcnN0IDwgX19sYXN0 KSkNCiAgICAgICAgICByZXR1cm4gX19maXJzdDsNCiAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3Qs IF9fbGFzdCk7DQogICAgICAgICsrX19maXJzdDsNCiAgICAgIH0NCiAgICB9DQojIDE5MjkgInQ6 L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMw0KICBlbnVt IHsgX01fdGhyZXNob2xkID0gMTYgfTsNCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9UcD4NCiAgICB2b2lkDQogICAgX191bmd1YXJk ZWRfbGluZWFyX2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCBfX3ZhbCkNCiAg ICB7DQogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX25leHQgPSBfX2xhc3Q7DQogICAgICAtLV9f bmV4dDsNCiAgICAgIHdoaWxlIChfX3ZhbCA8ICpfX25leHQpIHsNCiAgICAgICAgKl9fbGFzdCA9 ICpfX25leHQ7DQogICAgICAgIF9fbGFzdCA9IF9fbmV4dDsNCiAgICAgICAgLS1fX25leHQ7DQog ICAgICB9DQogICAgICAqX19sYXN0ID0gX192YWw7DQogICAgfQ0KDQoNCg0KDQoNCg0KICB0ZW1w bGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBf Q29tcGFyZT4NCiAgICB2b2lkDQogICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfUmFuZG9t QWNjZXNzSXRlciBfX2xhc3QsIF9UcCBfX3ZhbCwgX0NvbXBhcmUgX19jb21wKQ0KICAgIHsNCiAg ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbmV4dCA9IF9fbGFzdDsNCiAgICAgIC0tX19uZXh0Ow0K ICAgICAgd2hpbGUgKF9fY29tcChfX3ZhbCwgKl9fbmV4dCkpIHsNCiAgICAgICAgKl9fbGFzdCA9 ICpfX25leHQ7DQogICAgICAgIF9fbGFzdCA9IF9fbmV4dDsNCiAgICAgICAgLS1fX25leHQ7DQog ICAgICB9DQogICAgICAqX19sYXN0ID0gX192YWw7DQogICAgfQ0KDQoNCg0KDQoNCg0KICB0ZW1w bGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4NCiAgICB2b2lkDQogICAgX19pbnNlcnRp b25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xh c3QpDQogICAgew0KICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47DQoNCiAgICAg IGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7 ICsrX19pKQ0KICAgICAgew0KICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRv bUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9fdmFsID0gKl9faTsNCiAgICAgICAgaWYgKF9fdmFs IDwgKl9fZmlyc3QpIHsNCiAgICAgICAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9faSwgX19p ICsgMSk7DQogICAgICAgICAgKl9fZmlyc3QgPSBfX3ZhbDsNCiAgICAgICAgfQ0KICAgICAgICBl bHNlDQogICAgICAgICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9fdmFsKTsNCiAg ICAgIH0NCiAgICB9DQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nl c3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4NCiAgICB2b2lkDQogICAgX19pbnNlcnRpb25fc29y dChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsDQog ICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQogICAgew0KICAgICAgaWYgKF9f Zmlyc3QgPT0gX19sYXN0KSByZXR1cm47DQoNCiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIg X19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQ0KICAgICAgew0KICAgICAg ICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBl IF9fdmFsID0gKl9faTsNCiAgICAgICAgaWYgKF9fY29tcChfX3ZhbCwgKl9fZmlyc3QpKSB7DQog ICAgICAgICAgY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX2ksIF9faSArIDEpOw0KICAgICAgICAg ICpfX2ZpcnN0ID0gX192YWw7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICAgIF9f dW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfX3ZhbCwgX19jb21wKTsNCiAgICAgIH0NCiAg ICB9DQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPg0K ICAgIGlubGluZSB2b2lkDQogICAgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFj Y2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQ0KICAgIHsNCiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFs dWVfdHlwZSBfVmFsdWVUeXBlOw0KDQogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9 IF9fZmlyc3Q7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQ0KICAgICAgICBfX3VuZ3VhcmRlZF9saW5l YXJfaW5zZXJ0KF9faSwgX1ZhbHVlVHlwZSgqX19pKSk7DQogICAgfQ0KDQoNCg0KDQoNCg0KICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+DQog ICAgaW5saW5lIHZvaWQNCiAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNj ZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBf VmFsdWVUeXBlOw0KDQogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7 IF9faSAhPSBfX2xhc3Q7ICsrX19pKQ0KICAgICAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0 KF9faSwgX1ZhbHVlVHlwZSgqX19pKSwgX19jb21wKTsNCiAgICB9DQoNCg0KDQoNCg0KDQogIHRl bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPg0KICAgIHZvaWQNCiAgICBfX2ZpbmFs X2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ dGVyIF9fbGFzdCkNCiAgICB7DQogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA+IF9NX3RocmVz aG9sZCkgew0KICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfTV90 aHJlc2hvbGQpOw0KICAgICAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0ICsg X01fdGhyZXNob2xkLCBfX2xhc3QpOw0KICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgICBfX2lu c2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7DQogICAgfQ0KDQoNCg0KDQoNCg0KICB0ZW1w bGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+DQogICAg dm9pZA0KICAgIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz dCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg X0NvbXBhcmUgX19jb21wKQ0KICAgIHsNCiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4gX01f dGhyZXNob2xkKSB7DQogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCAr IF9NX3RocmVzaG9sZCwgX19jb21wKTsNCiAgICAgICAgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3Nv cnQoX19maXJzdCArIF9NX3RocmVzaG9sZCwgX19sYXN0LCBfX2NvbXApOw0KICAgICAgfQ0KICAg ICAgZWxzZQ0KICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21w KTsNCiAgICB9DQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9TaXplPg0KICAgIGlu bGluZSBfU2l6ZQ0KICAgIF9fbGcoX1NpemUgX19uKQ0KICAgIHsNCiAgICAgIF9TaXplIF9fazsN CiAgICAgIGZvciAoX19rID0gMDsgX19uICE9IDE7IF9fbiA+Pj0gMSkgKytfX2s7DQogICAgICBy ZXR1cm4gX19rOw0KICAgIH0NCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRv bUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9TaXplPg0KICAgIHZvaWQNCiAgICBfX2ludHJvc29ydF9s b29wKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwN CiAgICAgICAgICAgICAgICAgICAgIF9TaXplIF9fZGVwdGhfbGltaXQpDQogICAgew0KICAgICAg dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1 ZV90eXBlIF9WYWx1ZVR5cGU7DQoNCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gX01f dGhyZXNob2xkKSB7DQogICAgICAgIGlmIChfX2RlcHRoX2xpbWl0ID09IDApIHsNCiAgICAgICAg ICBwYXJ0aWFsX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2xhc3QpOw0KICAgICAgICAgIHJldHVy bjsNCiAgICAgICAgfQ0KICAgICAgICAtLV9fZGVwdGhfbGltaXQ7DQogICAgICAgIF9SYW5kb21B Y2Nlc3NJdGVyIF9fY3V0ID0NCiAgICAgICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJz dCwgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKF9f bWVkaWFuKCpfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEp KSkpOw0KICAgICAgICBfX2ludHJvc29ydF9sb29wKF9fY3V0LCBfX2xhc3QsIF9fZGVwdGhfbGlt aXQpOw0KICAgICAgICBfX2xhc3QgPSBfX2N1dDsNCiAgICAgIH0NCiAgICB9DQoNCg0KDQoNCg0K DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfU2l6ZSwg dHlwZW5hbWUgX0NvbXBhcmU+DQogICAgdm9pZA0KICAgIF9faW50cm9zb3J0X2xvb3AoX1JhbmRv bUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LA0KICAgICAgICAg ICAgICAgICAgICAgX1NpemUgX19kZXB0aF9saW1pdCwgX0NvbXBhcmUgX19jb21wKQ0KICAgIHsN CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVy Pjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOw0KDQogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJz dCA+IF9NX3RocmVzaG9sZCkgew0KICAgICAgICBpZiAoX19kZXB0aF9saW1pdCA9PSAwKSB7DQog ICAgICAgICAgcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0LCBfX2NvbXApOw0K ICAgICAgICAgIHJldHVybjsNCiAgICAgICAgfQ0KICAgICAgICAtLV9fZGVwdGhfbGltaXQ7DQog ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0NCiAgICAgICAgICBfX3VuZ3VhcmRlZF9w YXJ0aXRpb24oX19maXJzdCwgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfVmFsdWVUeXBlKF9fbWVkaWFuKCpfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0 KS8yKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqKF9fbGFzdCAtIDEpLCBfX2NvbXApKSwNCiAgICAgICAgICAgX19jb21wKTsNCiAgICAgICAg X19pbnRyb3NvcnRfbG9vcChfX2N1dCwgX19sYXN0LCBfX2RlcHRoX2xpbWl0LCBfX2NvbXApOw0K ICAgICAgICBfX2xhc3QgPSBfX2N1dDsNCiAgICAgIH0NCiAgICB9DQojIDIxNjYgInQ6L21zeXMv MS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4NCiAgICBpbmxpbmUgdm9pZA0KICAgIHNvcnQoX1Jh bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQ0KICAgIHsN CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVy Pjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOw0KDQoNCiAgICAgDQoNCiAgICAgDQoNCiAgICAgIGlm IChfX2ZpcnN0ICE9IF9fbGFzdCkgew0KICAgICAgICBfX2ludHJvc29ydF9sb29wKF9fZmlyc3Qs IF9fbGFzdCwgX19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIpOw0KICAgICAgICBfX2ZpbmFsX2lu c2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7DQogICAgICB9DQogICAgfQ0KIyAyMTk3ICJ0 Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPg0KICAg IGlubGluZSB2b2lkDQogICAgc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9t QWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkNCiAgICB7DQogICAgICB0eXBlZGVm IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUg X1ZhbHVlVHlwZTsNCg0KDQogICAgIA0KDQogICAgIA0KDQogICAgICBpZiAoX19maXJzdCAhPSBf X2xhc3QpIHsNCiAgICAgICAgX19pbnRyb3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fbGco X19sYXN0IC0gX19maXJzdCkgKiAyLCBfX2NvbXApOw0KICAgICAgICBfX2ZpbmFsX2luc2VydGlv bl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsNCiAgICAgIH0NCiAgICB9DQoNCg0KDQoN Cg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+DQogICAgdm9pZA0K ICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFu ZG9tQWNjZXNzSXRlciBfX2xhc3QpDQogICAgew0KICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3Qg PCAxNSkgew0KICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7DQogICAg ICAgIHJldHVybjsNCiAgICAgIH0NCiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0g X19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KSAvIDI7DQogICAgICBfX2lucGxhY2Vfc3RhYmxl X3NvcnQoX19maXJzdCwgX19taWRkbGUpOw0KICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9f bWlkZGxlLCBfX2xhc3QpOw0KICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBf X21pZGRsZSwgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21pZGRsZSAt IF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGFzdCAtIF9fbWlkZGxl KTsNCiAgICB9DQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJ dGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4NCiAgICB2b2lkDQogICAgX19pbnBsYWNlX3N0YWJsZV9z b3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQ0KICAgIHsNCiAgICAg IGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMTUpIHsNCiAgICAgICAgX19pbnNlcnRpb25fc29ydChf X2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7DQogICAgICAgIHJldHVybjsNCiAgICAgIH0NCiAgICAg IF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0 KSAvIDI7DQogICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19taWRkbGUsIF9f Y29tcCk7DQogICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19taWRkbGUsIF9fbGFzdCwgX19j b21wKTsNCiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9f bGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19taWRkbGUgLSBfX2ZpcnN0LA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xhc3QgLSBfX21pZGRsZSwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1JhbmRvbUFjY2Vzc0l0ZXIxLCB0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcjIsDQogICAg ICAgICAgIHR5cGVuYW1lIF9EaXN0YW5jZT4NCiAgICB2b2lkDQogICAgX19tZXJnZV9zb3J0X2xv b3AoX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyMSBfX2xhc3Qs DQogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIyIF9fcmVzdWx0LCBfRGlz dGFuY2UgX19zdGVwX3NpemUpDQogICAgew0KICAgICAgX0Rpc3RhbmNlIF9fdHdvX3N0ZXAgPSAy ICogX19zdGVwX3NpemU7DQoNCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fdHdv X3N0ZXApIHsNCiAgICAgICAgX19yZXN1bHQgPSBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19z dGVwX3NpemUsDQogICAgICAgICAgICAgICAgICAgICAgICAgX19maXJzdCArIF9fc3RlcF9zaXpl LCBfX2ZpcnN0ICsgX190d29fc3RlcCwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3Vs dCk7DQogICAgICAgIF9fZmlyc3QgKz0gX190d29fc3RlcDsNCiAgICAgIH0NCg0KICAgICAgX19z dGVwX3NpemUgPSBtaW4oX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3N0ZXBfc2l6ZSk7 DQogICAgICBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fZmlyc3QgKyBf X3N0ZXBfc2l6ZSwgX19sYXN0LA0KICAgICAgICAgICAgX19yZXN1bHQpOw0KICAgIH0NCg0KICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcjEsIHR5cGVuYW1lIF9SYW5kb21BY2Nl c3NJdGVyMiwNCiAgICAgICAgICAgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfQ29tcGFy ZT4NCiAgICB2b2lkDQogICAgX19tZXJnZV9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIxIF9f Zmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyMSBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAg X1JhbmRvbUFjY2Vzc0l0ZXIyIF9fcmVzdWx0LCBfRGlzdGFuY2UgX19zdGVwX3NpemUsDQogICAg ICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQ0KICAgIHsNCiAgICAgIF9EaXN0YW5j ZSBfX3R3b19zdGVwID0gMiAqIF9fc3RlcF9zaXplOw0KDQogICAgICB3aGlsZSAoX19sYXN0IC0g X19maXJzdCA+PSBfX3R3b19zdGVwKSB7DQogICAgICAgIF9fcmVzdWx0ID0gbWVyZ2UoX19maXJz dCwgX19maXJzdCArIF9fc3RlcF9zaXplLA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmly c3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCArIF9fdHdvX3N0ZXAsDQogICAgICAgICAgICAgICAg ICAgICAgICAgX19yZXN1bHQsDQogICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsNCiAg ICAgICAgX19maXJzdCArPSBfX3R3b19zdGVwOw0KICAgICAgfQ0KICAgICAgX19zdGVwX3NpemUg PSBtaW4oX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3N0ZXBfc2l6ZSk7DQoNCiAgICAg IG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwNCiAgICAgICAgICAgIF9fZmly c3QgKyBfX3N0ZXBfc2l6ZSwgX19sYXN0LA0KICAgICAgICAgICAgX19yZXN1bHQsDQogICAgICAg ICAgICBfX2NvbXApOw0KICAgIH0NCg0KICBlbnVtIHsgX01fY2h1bmtfc2l6ZSA9IDcgfTsNCg0K ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNl Pg0KICAgIHZvaWQNCiAgICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVy IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9EaXN0YW5jZSBfX2NodW5rX3NpemUpDQogICAgew0KICAgICAgd2hpbGUgKF9fbGFz dCAtIF9fZmlyc3QgPj0gX19jaHVua19zaXplKSB7DQogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQo X19maXJzdCwgX19maXJzdCArIF9fY2h1bmtfc2l6ZSk7DQogICAgICAgIF9fZmlyc3QgKz0gX19j aHVua19zaXplOw0KICAgICAgfQ0KICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xh c3QpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlw ZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfQ29tcGFyZT4NCiAgICB2b2lkDQogICAgX19jaHVu a19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNz SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19jaHVu a19zaXplLCBfQ29tcGFyZSBfX2NvbXApDQogICAgew0KICAgICAgd2hpbGUgKF9fbGFzdCAtIF9f Zmlyc3QgPj0gX19jaHVua19zaXplKSB7DQogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJz dCwgX19maXJzdCArIF9fY2h1bmtfc2l6ZSwgX19jb21wKTsNCiAgICAgICAgX19maXJzdCArPSBf X2NodW5rX3NpemU7DQogICAgICB9DQogICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9f bGFzdCwgX19jb21wKTsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz c0l0ZXIsIHR5cGVuYW1lIF9Qb2ludGVyPg0KICAgIHZvaWQNCiAgICBfX21lcmdlX3NvcnRfd2l0 aF9idWZmZXIoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s YXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlcikNCiAg ICB7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNz SXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2U7DQoNCiAgICAgIF9EaXN0YW5jZSBfX2xl biA9IF9fbGFzdCAtIF9fZmlyc3Q7DQogICAgICBfUG9pbnRlciBfX2J1ZmZlcl9sYXN0ID0gX19i dWZmZXIgKyBfX2xlbjsNCg0KICAgICAgX0Rpc3RhbmNlIF9fc3RlcF9zaXplID0gX01fY2h1bmtf c2l6ZTsNCiAgICAgIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX3N0 ZXBfc2l6ZSk7DQoNCiAgICAgIHdoaWxlIChfX3N0ZXBfc2l6ZSA8IF9fbGVuKSB7DQogICAgICAg IF9fbWVyZ2Vfc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19idWZmZXIsIF9fc3RlcF9zaXpl KTsNCiAgICAgICAgX19zdGVwX3NpemUgKj0gMjsNCiAgICAgICAgX19tZXJnZV9zb3J0X2xvb3Ao X19idWZmZXIsIF9fYnVmZmVyX2xhc3QsIF9fZmlyc3QsIF9fc3RlcF9zaXplKTsNCiAgICAgICAg X19zdGVwX3NpemUgKj0gMjsNCiAgICAgIH0NCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Qb2ludGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4N CiAgICB2b2lkDQogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9SYW5kb21BY2Nlc3NJdGVy IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9Db21wYXJlIF9fY29tcCkNCiAgICB7DQogICAg ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRp ZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2U7DQoNCiAgICAgIF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFz dCAtIF9fZmlyc3Q7DQogICAgICBfUG9pbnRlciBfX2J1ZmZlcl9sYXN0ID0gX19idWZmZXIgKyBf X2xlbjsNCg0KICAgICAgX0Rpc3RhbmNlIF9fc3RlcF9zaXplID0gX01fY2h1bmtfc2l6ZTsNCiAg ICAgIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX3N0ZXBfc2l6ZSwg X19jb21wKTsNCg0KICAgICAgd2hpbGUgKF9fc3RlcF9zaXplIDwgX19sZW4pIHsNCiAgICAgICAg X19tZXJnZV9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBfX2J1ZmZlciwgX19zdGVwX3NpemUs IF9fY29tcCk7DQogICAgICAgIF9fc3RlcF9zaXplICo9IDI7DQogICAgICAgIF9fbWVyZ2Vfc29y dF9sb29wKF9fYnVmZmVyLCBfX2J1ZmZlcl9sYXN0LCBfX2ZpcnN0LCBfX3N0ZXBfc2l6ZSwgX19j b21wKTsNCiAgICAgICAgX19zdGVwX3NpemUgKj0gMjsNCiAgICAgIH0NCiAgICB9DQoNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Qb2ludGVyLCB0eXBl bmFtZSBfRGlzdGFuY2U+DQogICAgdm9pZA0KICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX1Jh bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZl cl9zaXplKQ0KICAgIHsNCiAgICAgIF9EaXN0YW5jZSBfX2xlbiA9IChfX2xhc3QgLSBfX2ZpcnN0 ICsgMSkgLyAyOw0KICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsg X19sZW47DQogICAgICBpZiAoX19sZW4gPiBfX2J1ZmZlcl9zaXplKSB7DQogICAgICAgIF9fc3Rh YmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9z aXplKTsNCiAgICAgICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX21pZGRsZSwgX19sYXN0LCBf X2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7DQogICAgICB9DQogICAgICBlbHNlIHsNCiAgICAgICAg X19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7DQog ICAgICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZl cik7DQogICAgICB9DQogICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBf X2xhc3QsIF9EaXN0YW5jZShfX21pZGRsZSAtIF9fZmlyc3QpLA0KICAgICAgICAgICAgICAgICAg ICAgICBfRGlzdGFuY2UoX19sYXN0IC0gX19taWRkbGUpLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6 ZSk7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBl bmFtZSBfUG9pbnRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlLA0KICAgICAgICAgICB0eXBlbmFtZSBf Q29tcGFyZT4NCiAgICB2b2lkDQogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfUmFuZG9tQWNj ZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsDQogICAgICAgICAgICAg ICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUs DQogICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQogICAgew0KICAg ICAgX0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFzdCAtIF9fZmlyc3QgKyAxKSAvIDI7DQogICAgICBf UmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyBfX2xlbjsNCiAgICAgIGlmIChf X2xlbiA+IF9fYnVmZmVyX3NpemUpIHsNCiAgICAgICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShf X2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19jb21wKTsNCiAgICAgICAgX19zdGFibGVfc29ydF9hZGFwdGl2 ZShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2NvbXApOw0KICAgICAgfQ0KICAgICAgZWxzZSB7DQogICAg ICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIs IF9fY29tcCk7DQogICAgICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX21pZGRsZSwgX19s YXN0LCBfX2J1ZmZlciwgX19jb21wKTsNCiAgICAgIH0NCiAgICAgIF9fbWVyZ2VfYWRhcHRpdmUo X19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX0Rpc3RhbmNlKF9fbWlkZGxlIC0gX19maXJzdCks DQogICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX2xhc3QgLSBfX21pZGRsZSksIF9f YnVmZmVyLCBfX2J1ZmZlcl9zaXplLA0KICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOw0K ICAgIH0NCiMgMjQzMCAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf YWxnby5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPg0KICAgIGlu bGluZSB2b2lkDQogICAgc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1Jh bmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOw0K ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+ OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsNCg0KDQogICAgIA0KDQogICAgIA0KDQog ICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxfUmFuZG9tQWNjZXNzSXRlciwgX1ZhbHVlVHlwZT4gYnVm KF9fZmlyc3QsIF9fbGFzdCk7DQogICAgICBpZiAoYnVmLmJlZ2luKCkgPT0gMCkNCiAgICAgICAg X19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7DQogICAgICBlbHNlDQogICAg ICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBidWYuYmVnaW4oKSwg X0Rpc3RhbmNlVHlwZShidWYuc2l6ZSgpKSk7DQogICAgfQ0KIyAyNDY2ICJ0Oi9tc3lzLzEuMC9t aW5ndy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPg0KICAgIGlubGluZSB2b2lk DQogICAgc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vz c0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApDQogICAgew0KICAgICAgdHlwZWRlZiB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1 ZVR5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNj ZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOw0KDQoNCiAgICAgDQoNCiAg ICAgDQoNCg0KICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9WYWx1 ZVR5cGU+IGJ1ZihfX2ZpcnN0LCBfX2xhc3QpOw0KICAgICAgaWYgKGJ1Zi5iZWdpbigpID09IDAp DQogICAgICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7 DQogICAgICBlbHNlDQogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19s YXN0LCBidWYuYmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShidWYuc2l6ZSgpKSwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2NvbXApOw0KICAgIH0NCiMgMjUwMiAidDovbXN5cy8xLjAv bWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9SYW5kb21BY2Nlc3NJdGVyPg0KICAgIHZvaWQNCiAgICBwYXJ0aWFsX3NvcnQoX1JhbmRv bUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg X19taWRkbGUsDQogICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkNCiAg ICB7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNz SXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsNCg0KDQogICAgIA0KDQogICAgIA0KDQogICAg ICBtYWtlX2hlYXAoX19maXJzdCwgX19taWRkbGUpOw0KICAgICAgZm9yIChfUmFuZG9tQWNjZXNz SXRlciBfX2kgPSBfX21pZGRsZTsgX19pIDwgX19sYXN0OyArK19faSkNCiAgICAgICAgaWYgKCpf X2kgPCAqX19maXJzdCkNCiAgICAgICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBf X2ksIF9WYWx1ZVR5cGUoKl9faSkpOw0KICAgICAgc29ydF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxl KTsNCiAgICB9DQojIDI1NDAgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMv c3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlw ZW5hbWUgX0NvbXBhcmU+DQogICAgdm9pZA0KICAgIHBhcnRpYWxfc29ydChfUmFuZG9tQWNjZXNz SXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRs ZSwNCiAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LA0KICAgICAgICAg ICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQogICAgew0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7 DQoNCg0KICAgICANCg0KICAgICANCg0KDQogICAgICBtYWtlX2hlYXAoX19maXJzdCwgX19taWRk bGUsIF9fY29tcCk7DQogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fbWlkZGxl OyBfX2kgPCBfX2xhc3Q7ICsrX19pKQ0KICAgICAgICBpZiAoX19jb21wKCpfX2ksICpfX2ZpcnN0 KSkNCiAgICAgICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2ksIF9WYWx1ZVR5 cGUoKl9faSksIF9fY29tcCk7DQogICAgICBzb3J0X2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9f Y29tcCk7DQogICAgfQ0KIyAyNTc5ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9i aXRzL3N0bF9hbGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5h bWUgX1JhbmRvbUFjY2Vzc0l0ZXI+DQogICAgX1JhbmRvbUFjY2Vzc0l0ZXINCiAgICBwYXJ0aWFs X3NvcnRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAg ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2ZpcnN0LA0KICAgICAg ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2xhc3QpDQogICAgew0K ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVl X3R5cGUgX0lucHV0VmFsdWVUeXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9PdXRwdXRWYWx1ZVR5cGU7DQog ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46 OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOw0KDQoNCiAgICAgDQogICAgIA0KICAgICAN CiAgICAgDQoNCiAgICAgIGlmIChfX3Jlc3VsdF9maXJzdCA9PSBfX3Jlc3VsdF9sYXN0KSByZXR1 cm4gX19yZXN1bHRfbGFzdDsNCiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X3JlYWxf bGFzdCA9IF9fcmVzdWx0X2ZpcnN0Ow0KICAgICAgd2hpbGUoX19maXJzdCAhPSBfX2xhc3QgJiYg X19yZXN1bHRfcmVhbF9sYXN0ICE9IF9fcmVzdWx0X2xhc3QpIHsNCiAgICAgICAgKl9fcmVzdWx0 X3JlYWxfbGFzdCA9ICpfX2ZpcnN0Ow0KICAgICAgICArK19fcmVzdWx0X3JlYWxfbGFzdDsNCiAg ICAgICAgKytfX2ZpcnN0Ow0KICAgICAgfQ0KICAgICAgbWFrZV9oZWFwKF9fcmVzdWx0X2ZpcnN0 LCBfX3Jlc3VsdF9yZWFsX2xhc3QpOw0KICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7 DQogICAgICAgIGlmICgqX19maXJzdCA8ICpfX3Jlc3VsdF9maXJzdCkNCiAgICAgICAgICBfX2Fk anVzdF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfRGlzdGFuY2VUeXBlKDApLA0KICAgICAgICAgICAg ICAgICAgICAgICAgX0Rpc3RhbmNlVHlwZShfX3Jlc3VsdF9yZWFsX2xhc3QgLSBfX3Jlc3VsdF9m aXJzdCksDQogICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRWYWx1ZVR5cGUoKl9fZmlyc3Qp KTsNCiAgICAgICAgKytfX2ZpcnN0Ow0KICAgICAgfQ0KICAgICAgc29ydF9oZWFwKF9fcmVzdWx0 X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QpOw0KICAgICAgcmV0dXJuIF9fcmVzdWx0X3JlYWxf bGFzdDsNCiAgICB9DQojIDI2MzMgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFt ZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+DQogICAgX1JhbmRvbUFjY2Vz c0l0ZXINCiAgICBwYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0 ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVz dWx0X2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVz dWx0X2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQ0KICAgIHsN CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1 ZV90eXBlIF9JbnB1dFZhbHVlVHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfT3V0cHV0VmFsdWVUeXBlOw0K ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+ OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsNCg0KDQogICAgIA0KICAgICANCiAgICAg DQogICAgIA0KDQoNCiAgICAgIGlmIChfX3Jlc3VsdF9maXJzdCA9PSBfX3Jlc3VsdF9sYXN0KSBy ZXR1cm4gX19yZXN1bHRfbGFzdDsNCiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X3Jl YWxfbGFzdCA9IF9fcmVzdWx0X2ZpcnN0Ow0KICAgICAgd2hpbGUoX19maXJzdCAhPSBfX2xhc3Qg JiYgX19yZXN1bHRfcmVhbF9sYXN0ICE9IF9fcmVzdWx0X2xhc3QpIHsNCiAgICAgICAgKl9fcmVz dWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0Ow0KICAgICAgICArK19fcmVzdWx0X3JlYWxfbGFzdDsN CiAgICAgICAgKytfX2ZpcnN0Ow0KICAgICAgfQ0KICAgICAgbWFrZV9oZWFwKF9fcmVzdWx0X2Zp cnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QsIF9fY29tcCk7DQogICAgICB3aGlsZSAoX19maXJzdCAh PSBfX2xhc3QpIHsNCiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdCwgKl9fcmVzdWx0X2ZpcnN0 KSkNCiAgICAgICAgICBfX2FkanVzdF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfRGlzdGFuY2VUeXBl KDApLA0KICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlVHlwZShfX3Jlc3VsdF9yZWFs X2xhc3QgLSBfX3Jlc3VsdF9maXJzdCksDQogICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRW YWx1ZVR5cGUoKl9fZmlyc3QpLA0KICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsNCiAg ICAgICAgKytfX2ZpcnN0Ow0KICAgICAgfQ0KICAgICAgc29ydF9oZWFwKF9fcmVzdWx0X2ZpcnN0 LCBfX3Jlc3VsdF9yZWFsX2xhc3QsIF9fY29tcCk7DQogICAgICByZXR1cm4gX19yZXN1bHRfcmVh bF9sYXN0Ow0KICAgIH0NCiMgMjY4NiAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMv Yml0cy9zdGxfYWxnby5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVy Pg0KICAgIHZvaWQNCiAgICBudGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LA0K ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbnRoLA0KICAgICAgICAgICAgICAg IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkNCiAgICB7DQogICAgICB0eXBlZGVmIHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlw ZTsNCg0KDQogICAgIA0KICAgICANCg0KICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAz KSB7DQogICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0NCiAgICAgICAgICBfX3VuZ3Vh cmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfVmFsdWVUeXBlKF9fbWVkaWFuKCpfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBf X2ZpcnN0KS8yKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqKF9fbGFzdCAtIDEpKSkpOw0KICAgICAgICBpZiAoX19jdXQgPD0gX19udGgpDQog ICAgICAgICAgX19maXJzdCA9IF9fY3V0Ow0KICAgICAgICBlbHNlDQogICAgICAgICAgX19sYXN0 ID0gX19jdXQ7DQogICAgICB9DQogICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFz dCk7DQogICAgfQ0KIyAyNzI4ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRz L3N0bF9hbGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5 cGVuYW1lIF9Db21wYXJlPg0KICAgIHZvaWQNCiAgICBudGhfZWxlbWVudChfUmFuZG9tQWNjZXNz SXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbnRoLA0K ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQogICAgew0KICAgICAgdHlwZWRlZiB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1 ZVR5cGU7DQoNCg0KICAgICANCiAgICAgDQoNCg0KICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmly c3QgPiAzKSB7DQogICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0NCiAgICAgICAgICBf X3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfVmFsdWVUeXBlKF9fbWVkaWFuKCpfX2ZpcnN0LA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xh c3QgLSBfX2ZpcnN0KS8yKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCkpLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbXApOw0KICAgICAgICBpZiAoX19jdXQgPD0gX19udGgpDQogICAgICAg ICAgX19maXJzdCA9IF9fY3V0Ow0KICAgICAgICBlbHNlDQogICAgICAgICAgX19sYXN0ID0gX19j dXQ7DQogICAgICB9DQogICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19j b21wKTsNCiAgICB9DQojIDI3NjggInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVu YW1lIF9UcD4NCiAgICBfRm9yd2FyZEl0ZXINCiAgICBsb3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIg X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCkNCiAgICB7DQog ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1 ZV90eXBlIF9WYWx1ZVR5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsNCg0KDQoNCg0K DQoNCiAgICAgDQogICAgIA0KICAgICANCg0KICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IGRp c3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7DQogICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsNCiAg ICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsNCg0KICAgICAgd2hpbGUgKF9fbGVuID4gMCkgew0K ICAgICAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOw0KICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7 DQogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7DQogICAgICAgIGlmICgqX19taWRk bGUgPCBfX3ZhbCkgew0KICAgICAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsNCiAgICAgICAgICAr K19fZmlyc3Q7DQogICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7DQogICAgICAg IH0NCiAgICAgICAgZWxzZQ0KICAgICAgICAgIF9fbGVuID0gX19oYWxmOw0KICAgICAgfQ0KICAg ICAgcmV0dXJuIF9fZmlyc3Q7DQogICAgfQ0KIyAyODE2ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNs dWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh cmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPg0KICAgIF9Gb3J3YXJkSXRl cg0KICAgIGxvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s YXN0LA0KICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCkN CiAgICB7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0 ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsN Cg0KDQogICAgIA0KICAgICANCg0KICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IGRpc3RhbmNl KF9fZmlyc3QsIF9fbGFzdCk7DQogICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsNCiAgICAgIF9G b3J3YXJkSXRlciBfX21pZGRsZTsNCg0KICAgICAgd2hpbGUgKF9fbGVuID4gMCkgew0KICAgICAg ICBfX2hhbGYgPSBfX2xlbiA+PiAxOw0KICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7DQogICAg ICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7DQogICAgICAgIGlmIChfX2NvbXAoKl9fbWlk ZGxlLCBfX3ZhbCkpIHsNCiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7DQogICAgICAgICAg KytfX2ZpcnN0Ow0KICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOw0KICAgICAg ICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgICBfX2xlbiA9IF9faGFsZjsNCiAgICAgIH0NCiAg ICAgIHJldHVybiBfX2ZpcnN0Ow0KICAgIH0NCiMgMjg1NiAidDovbXN5cy8xLjAvbWluZ3cvaW5j bHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3 YXJkSXRlciwgdHlwZW5hbWUgX1RwPg0KICAgIF9Gb3J3YXJkSXRlcg0KICAgIHVwcGVyX2JvdW5k KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9f dmFsKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3 YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VU eXBlOw0KDQoNCg0KICAgICANCiAgICAgDQogICAgIA0KDQogICAgICBfRGlzdGFuY2VUeXBlIF9f bGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsNCiAgICAgIF9EaXN0YW5jZVR5cGUgX19o YWxmOw0KICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOw0KDQogICAgICB3aGlsZSAoX19sZW4g PiAwKSB7DQogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7DQogICAgICAgIF9fbWlkZGxlID0g X19maXJzdDsNCiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsNCiAgICAgICAgaWYg KF9fdmFsIDwgKl9fbWlkZGxlKQ0KICAgICAgICAgIF9fbGVuID0gX19oYWxmOw0KICAgICAgICBl bHNlIHsNCiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7DQogICAgICAgICAgKytfX2ZpcnN0 Ow0KICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOw0KICAgICAgICB9DQogICAg ICB9DQogICAgICByZXR1cm4gX19maXJzdDsNCiAgICB9DQojIDI5MDEgInQ6L21zeXMvMS4wL21p bmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+DQogICAgX0Zv cndhcmRJdGVyDQogICAgdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUg X19jb21wKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9G b3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFu Y2VUeXBlOw0KDQoNCiAgICAgDQogICAgIA0KDQogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0g ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsNCiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOw0K ICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOw0KDQogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7 DQogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7DQogICAgICAgIF9fbWlkZGxlID0gX19maXJz dDsNCiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsNCiAgICAgICAgaWYgKF9fY29t cChfX3ZhbCwgKl9fbWlkZGxlKSkNCiAgICAgICAgICBfX2xlbiA9IF9faGFsZjsNCiAgICAgICAg ZWxzZSB7DQogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOw0KICAgICAgICAgICsrX19maXJz dDsNCiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsNCiAgICAgICAgfQ0KICAg ICAgfQ0KICAgICAgcmV0dXJuIF9fZmlyc3Q7DQogICAgfQ0KIyAyOTQ4ICJ0Oi9tc3lzLzEuMC9t aW5ndy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+DQogICAgcGFpcjxfRm9yd2FyZEl0ZXIsIF9G b3J3YXJkSXRlcj4NCiAgICBlcXVhbF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zvcndh cmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCkNCiAgICB7DQogICAgICB0eXBlZGVmIHR5 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5 cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+ OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsNCg0KDQoNCiAgICAgDQogICAgIA0KICAg ICANCg0KICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFz dCk7DQogICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsNCiAgICAgIF9Gb3J3YXJkSXRlciBfX21p ZGRsZSwgX19sZWZ0LCBfX3JpZ2h0Ow0KDQogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7DQogICAg ICAgIF9faGFsZiA9IF9fbGVuID4+IDE7DQogICAgICAgIF9fbWlkZGxlID0gX19maXJzdDsNCiAg ICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsNCiAgICAgICAgaWYgKCpfX21pZGRsZSA8 IF9fdmFsKSB7DQogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOw0KICAgICAgICAgICsrX19m aXJzdDsNCiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsNCiAgICAgICAgfQ0K ICAgICAgICBlbHNlIGlmIChfX3ZhbCA8ICpfX21pZGRsZSkNCiAgICAgICAgICBfX2xlbiA9IF9f aGFsZjsNCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgX19sZWZ0ID0gbG93ZXJfYm91bmQoX19m aXJzdCwgX19taWRkbGUsIF9fdmFsKTsNCiAgICAgICAgICBhZHZhbmNlKF9fZmlyc3QsIF9fbGVu KTsNCiAgICAgICAgICBfX3JpZ2h0ID0gdXBwZXJfYm91bmQoKytfX21pZGRsZSwgX19maXJzdCwg X192YWwpOw0KICAgICAgICAgIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVy PihfX2xlZnQsIF9fcmlnaHQpOw0KICAgICAgICB9DQogICAgICB9DQogICAgICByZXR1cm4gcGFp cjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19maXJzdCk7DQogICAgfQ0K IyAzMDAzICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgi IDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVu YW1lIF9Db21wYXJlPg0KICAgIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+DQogICAg ZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNv bnN0IF9UcCYgX192YWwsDQogICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQ0KICAgIHsN CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZh bHVlX3R5cGUgX1ZhbHVlVHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOw0KDQoNCiAg ICAgDQogICAgIA0KICAgICANCg0KICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IGRpc3RhbmNl KF9fZmlyc3QsIF9fbGFzdCk7DQogICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsNCiAgICAgIF9G b3J3YXJkSXRlciBfX21pZGRsZSwgX19sZWZ0LCBfX3JpZ2h0Ow0KDQogICAgICB3aGlsZSAoX19s ZW4gPiAwKSB7DQogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7DQogICAgICAgIF9fbWlkZGxl ID0gX19maXJzdDsNCiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsNCiAgICAgICAg aWYgKF9fY29tcCgqX19taWRkbGUsIF9fdmFsKSkgew0KICAgICAgICAgIF9fZmlyc3QgPSBfX21p ZGRsZTsNCiAgICAgICAgICArK19fZmlyc3Q7DQogICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9f aGFsZiAtIDE7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSBpZiAoX19jb21wKF9fdmFsLCAqX19t aWRkbGUpKQ0KICAgICAgICAgIF9fbGVuID0gX19oYWxmOw0KICAgICAgICBlbHNlIHsNCiAgICAg ICAgICBfX2xlZnQgPSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgX192YWwsIF9fY29t cCk7DQogICAgICAgICAgYWR2YW5jZShfX2ZpcnN0LCBfX2xlbik7DQogICAgICAgICAgX19yaWdo dCA9IHVwcGVyX2JvdW5kKCsrX19taWRkbGUsIF9fZmlyc3QsIF9fdmFsLCBfX2NvbXApOw0KICAg ICAgICAgIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2xlZnQsIF9f cmlnaHQpOw0KICAgICAgICB9DQogICAgICB9DQogICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0 ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19maXJzdCk7DQogICAgfQ0KIyAzMDUyICJ0Oi9t c3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMNCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+DQogICAgYm9vbA0KICAgIGJp bmFyeV9zZWFyY2goX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQog ICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsKQ0KICAgIHsNCg0KDQogICAgIA0KICAg ICANCg0KICAgICANCg0KICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IGxvd2VyX2JvdW5kKF9fZmly c3QsIF9fbGFzdCwgX192YWwpOw0KICAgICAgcmV0dXJuIF9faSAhPSBfX2xhc3QgJiYgIShfX3Zh bCA8ICpfX2kpOw0KICAgIH0NCiMgMzA4MyAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKyst djMvYml0cy9zdGxfYWxnby5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwg dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4NCiAgICBib29sDQogICAgYmluYXJ5X3Nl YXJjaChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAg ICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCkNCiAgICB7DQoNCiAg ICAgDQogICAgIA0KDQogICAgIA0KDQoNCiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBsb3dlcl9i b3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2NvbXApOw0KICAgICAgcmV0dXJuIF9faSAh PSBfX2xhc3QgJiYgIV9fY29tcChfX3ZhbCwgKl9faSk7DQogICAgfQ0KIyAzMTE1ICJ0Oi9tc3lz LzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMNCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0 cHV0SXRlcj4NCiAgICBfT3V0cHV0SXRlcg0KICAgIG1lcmdlKF9JbnB1dEl0ZXIxIF9fZmlyc3Qx LCBfSW5wdXRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBf SW5wdXRJdGVyMiBfX2xhc3QyLA0KICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQ0KICAg IHsNCg0KICAgICANCiAgICAgDQogICAgIA0KDQogICAgIA0KDQoNCiAgICAgDQoNCg0KICAgICAg d2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0Mikgew0KICAg ICAgICBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7DQogICAgICAgICAgKl9fcmVzdWx0ID0g Kl9fZmlyc3QyOw0KICAgICAgICAgICsrX19maXJzdDI7DQogICAgICAgIH0NCiAgICAgICAgZWxz ZSB7DQogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOw0KICAgICAgICAgICsrX19maXJz dDE7DQogICAgICAgIH0NCiAgICAgICAgKytfX3Jlc3VsdDsNCiAgICAgIH0NCiAgICAgIHJldHVy biBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3Vs dCkpOw0KICAgIH0NCiMgMzE2NiAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0 cy9zdGxfYWxnby5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFt ZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsDQogICAgICAgICAgIHR5cGVuYW1l IF9Db21wYXJlPg0KICAgIF9PdXRwdXRJdGVyDQogICAgbWVyZ2UoX0lucHV0SXRlcjEgX19maXJz dDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIs IF9JbnB1dEl0ZXIyIF9fbGFzdDIsDQogICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9D b21wYXJlIF9fY29tcCkNCiAgICB7DQoNCiAgICAgDQogICAgIA0KICAgICANCg0KDQogICAgIA0K DQogICAgIA0KDQoNCg0KICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJz dDIgIT0gX19sYXN0Mikgew0KICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3Qx KSkgew0KICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsNCiAgICAgICAgICArK19fZmly c3QyOw0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgICpfX3Jlc3VsdCA9ICpf X2ZpcnN0MTsNCiAgICAgICAgICArK19fZmlyc3QxOw0KICAgICAgICB9DQogICAgICAgICsrX19y ZXN1bHQ7DQogICAgICB9DQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29w eShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsNCiAgICB9DQoNCg0KDQoNCg0KDQogIHRl bXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlPg0K ICAgIHZvaWQNCiAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9CaWRpcmVjdGlvbmFsSXRlciBf X2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f bWlkZGxlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f bGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0 YW5jZSBfX2xlbjIpDQogICAgew0KICAgICAgaWYgKF9fbGVuMSA9PSAwIHx8IF9fbGVuMiA9PSAw KQ0KICAgICAgICByZXR1cm47DQogICAgICBpZiAoX19sZW4xICsgX19sZW4yID09IDIpIHsNCiAg ICAgICAgaWYgKCpfX21pZGRsZSA8ICpfX2ZpcnN0KQ0KICAgICAgICAgICAgICBpdGVyX3N3YXAo X19maXJzdCwgX19taWRkbGUpOw0KICAgICAgICByZXR1cm47DQogICAgICB9DQogICAgICBfQmlk aXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0Ow0KICAgICAgX0JpZGlyZWN0aW9u YWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOw0KICAgICAgX0Rpc3RhbmNlIF9fbGVuMTEg PSAwOw0KICAgICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOw0KICAgICAgaWYgKF9fbGVuMSA+IF9f bGVuMikgew0KICAgICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsNCiAgICAgICAgYWR2YW5jZShf X2ZpcnN0X2N1dCwgX19sZW4xMSk7DQogICAgICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5k KF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCk7DQogICAgICAgIF9fbGVuMjIgPSBkaXN0 YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsNCiAgICAgIH0NCiAgICAgIGVsc2Ugew0KICAg ICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsNCiAgICAgICAgYWR2YW5jZShfX3NlY29uZF9jdXQs IF9fbGVuMjIpOw0KICAgICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9f bWlkZGxlLCAqX19zZWNvbmRfY3V0KTsNCiAgICAgICAgX19sZW4xMSA9IGRpc3RhbmNlKF9fZmly c3QsIF9fZmlyc3RfY3V0KTsNCiAgICAgIH0NCiAgICAgIHJvdGF0ZShfX2ZpcnN0X2N1dCwgX19t aWRkbGUsIF9fc2Vjb25kX2N1dCk7DQogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlk ZGxlID0gX19maXJzdF9jdXQ7DQogICAgICBhZHZhbmNlKF9fbmV3X21pZGRsZSwgZGlzdGFuY2Uo X19taWRkbGUsIF9fc2Vjb25kX2N1dCkpOw0KICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihf X2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2xlbjExLCBfX2xlbjIyKTsNCiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIo X19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19sZW4xIC0gX19sZW4xMSwgX19sZW4yIC0gX19sZW4yMik7DQogICAgfQ0KDQoN Cg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1l IF9EaXN0YW5jZSwgdHlwZW5hbWUgX0NvbXBhcmU+DQogICAgdm9pZA0KICAgIF9fbWVyZ2Vfd2l0 aG91dF9idWZmZXIoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAg ICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsDQogICAgICAgICAgICAgICAg ICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkNCiAgICB7DQogICAgICBpZiAoX19sZW4x ID09IDAgfHwgX19sZW4yID09IDApDQogICAgICAgIHJldHVybjsNCiAgICAgIGlmIChfX2xlbjEg KyBfX2xlbjIgPT0gMikgew0KICAgICAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgKl9fZmlyc3Qp KQ0KICAgICAgICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19taWRkbGUpOw0KICAgICAgICBy ZXR1cm47DQogICAgICB9DQogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBf X2ZpcnN0Ow0KICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxl Ow0KICAgICAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOw0KICAgICAgX0Rpc3RhbmNlIF9fbGVuMjIg PSAwOw0KICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMikgew0KICAgICAgICBfX2xlbjExID0gX19s ZW4xIC8gMjsNCiAgICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7DQogICAgICAg IF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1 dCwgX19jb21wKTsNCiAgICAgICAgX19sZW4yMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29u ZF9jdXQpOw0KICAgICAgfQ0KICAgICAgZWxzZSB7DQogICAgICAgIF9fbGVuMjIgPSBfX2xlbjIg LyAyOw0KICAgICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7DQogICAgICAgIF9f Zmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQs IF9fY29tcCk7DQogICAgICAgIF9fbGVuMTEgPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1 dCk7DQogICAgICB9DQogICAgICByb3RhdGUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29u ZF9jdXQpOw0KICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9IF9fZmlyc3Rf Y3V0Ow0KICAgICAgYWR2YW5jZShfX25ld19taWRkbGUsIGRpc3RhbmNlKF9fbWlkZGxlLCBfX3Nl Y29uZF9jdXQpKTsNCiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19maXJz dF9jdXQsIF9fbmV3X21pZGRsZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4x MSwgX19sZW4yMiwgX19jb21wKTsNCiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19uZXdf bWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19sZW4xIC0gX19sZW4xMSwgX19sZW4yIC0gX19sZW4yMiwgX19jb21wKTsNCiAgICB9DQoN Cg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVu YW1lIF9CaWRpcmVjdGlvbmFsSXRlcjIsDQogICAgICAgICAgIHR5cGVuYW1lIF9EaXN0YW5jZT4N CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxDQogICAgX19yb3RhdGVfYWRhcHRpdmUoX0JpZGlyZWN0 aW9uYWxJdGVyMSBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs SXRlcjEgX19taWRkbGUsDQogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy MSBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3Rh bmNlIF9fbGVuMiwNCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9f YnVmZmVyLA0KICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQ0K ICAgIHsNCiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19idWZmZXJfZW5kOw0KICAgICAgaWYg KF9fbGVuMSA+IF9fbGVuMiAmJiBfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgew0KICAgICAgICBf X2J1ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsNCiAgICAgICAg Y29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0KTsNCiAgICAgICAgcmV0dXJu IGNvcHkoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19maXJzdCk7DQogICAgICB9DQogICAgICBl bHNlIGlmIChfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgew0KICAgICAgICBfX2J1ZmZlcl9lbmQg PSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7DQogICAgICAgIGNvcHkoX19taWRk bGUsIF9fbGFzdCwgX19maXJzdCk7DQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fYnVm ZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbGFzdCk7DQogICAgICB9DQogICAgICBlbHNlIHsNCiAgICAg ICAgcm90YXRlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QpOw0KICAgICAgICBhZHZhbmNlKF9f Zmlyc3QsIGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QpKTsNCiAgICAgICAgcmV0dXJuIF9fZmly c3Q7DQogICAgICB9DQogICAgfQ0KDQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlk aXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyLA0KICAgICAgICAg ICB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIzPg0KICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMN CiAgICBfX21lcmdlX2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRp cmVjdGlvbmFsSXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv bmFsSXRlcjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwNCiAgICAgICAg ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMgX19yZXN1bHQpDQogICAgew0KICAgICAg aWYgKF9fZmlyc3QxID09IF9fbGFzdDEpDQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9f Zmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCk7DQogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0 MikNCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVz dWx0KTsNCiAgICAgIC0tX19sYXN0MTsNCiAgICAgIC0tX19sYXN0MjsNCiAgICAgIHdoaWxlICh0 cnVlKSB7DQogICAgICAgIGlmICgqX19sYXN0MiA8ICpfX2xhc3QxKSB7DQogICAgICAgICAgKi0t X19yZXN1bHQgPSAqX19sYXN0MTsNCiAgICAgICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkN CiAgICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCArK19fbGFzdDIsIF9f cmVzdWx0KTsNCiAgICAgICAgICAtLV9fbGFzdDE7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7 DQogICAgICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MjsNCiAgICAgICAgICBpZiAoX19maXJz dDIgPT0gX19sYXN0MikNCiAgICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3Qx LCArK19fbGFzdDEsIF9fcmVzdWx0KTsNCiAgICAgICAgICAtLV9fbGFzdDI7DQogICAgICAgIH0N CiAgICAgIH0NCiAgICB9DQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVj dGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjIsDQogICAgICAgICAgIHR5 cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjMsIHR5cGVuYW1lIF9Db21wYXJlPg0KICAgIF9CaWRp cmVjdGlvbmFsSXRlcjMNCiAgICBfX21lcmdlX2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEg X19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAg ICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19s YXN0MiwNCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMgX19yZXN1bHQs DQogICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQogICAgew0KICAgICAgaWYg KF9fZmlyc3QxID09IF9fbGFzdDEpDQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmly c3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCk7DQogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikN CiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0 KTsNCiAgICAgIC0tX19sYXN0MTsNCiAgICAgIC0tX19sYXN0MjsNCiAgICAgIHdoaWxlICh0cnVl KSB7DQogICAgICAgIGlmIChfX2NvbXAoKl9fbGFzdDIsICpfX2xhc3QxKSkgew0KICAgICAgICAg ICotLV9fcmVzdWx0ID0gKl9fbGFzdDE7DQogICAgICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFz dDEpDQogICAgICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgKytfX2xhc3Qy LCBfX3Jlc3VsdCk7DQogICAgICAgICAgLS1fX2xhc3QxOw0KICAgICAgICB9DQogICAgICAgIGVs c2Ugew0KICAgICAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDI7DQogICAgICAgICAgaWYgKF9f Zmlyc3QyID09IF9fbGFzdDIpDQogICAgICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2Zp cnN0MSwgKytfX2xhc3QxLCBfX3Jlc3VsdCk7DQogICAgICAgICAgLS1fX2xhc3QyOw0KICAgICAg ICB9DQogICAgICB9DQogICAgfQ0KDQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlk aXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1BvaW50ZXI+DQog ICAgdm9pZA0KICAgIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3Qs DQogICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsDQogICAg ICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAg ICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwNCiAgICAgICAgICAg ICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkNCiAg ICB7DQogICAgICAgICAgaWYgKF9fbGVuMSA8PSBfX2xlbjIgJiYgX19sZW4xIDw9IF9fYnVmZmVy X3NpemUpIHsNCiAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19maXJz dCwgX19taWRkbGUsIF9fYnVmZmVyKTsNCiAgICAgICAgICAgIG1lcmdlKF9fYnVmZmVyLCBfX2J1 ZmZlcl9lbmQsIF9fbWlkZGxlLCBfX2xhc3QsIF9fZmlyc3QpOw0KICAgICAgICAgIH0NCiAgICAg ICAgICBlbHNlIGlmIChfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgew0KICAgICAgICAgICAgX1Bv aW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7DQog ICAgICAgICAgICBfX21lcmdlX2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwg X19idWZmZXJfZW5kLCBfX2xhc3QpOw0KICAgICAgICAgIH0NCiAgICAgICAgICBlbHNlIHsNCiAg ICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7DQogICAg ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7DQogICAg ICAgICAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7DQogICAgICAgICAgICBfRGlzdGFuY2UgX19s ZW4yMiA9IDA7DQogICAgICAgICAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7DQogICAgICAgICAg ICAgICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsNCiAgICAgICAgICAgICAgICAgIGFkdmFuY2Uo X19maXJzdF9jdXQsIF9fbGVuMTEpOw0KICAgICAgICAgICAgICAgICAgX19zZWNvbmRfY3V0ID0g bG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0KTsNCiAgICAgICAgICAg ICAgICAgIF9fbGVuMjIgPSBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsNCiAgICAg ICAgICAgIH0NCiAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAgICAgX19sZW4yMiA9 IF9fbGVuMiAvIDI7DQogICAgICAgICAgICAgICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19s ZW4yMik7DQogICAgICAgICAgICAgICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmly c3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0KTsNCiAgICAgICAgICAgICAgICAgIF9fbGVuMTEg PSBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCk7DQogICAgICAgICAgICB9DQogICAgICAg ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlID0NCiAgICAgICAgICAgICAgICAg IF9fcm90YXRlX2FkYXB0aXZlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0LA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4xIC0gX19sZW4xMSwgX19s ZW4yMiwgX19idWZmZXIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1 ZmZlcl9zaXplKTsNCiAgICAgICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19maXJz dF9jdXQsIF9fbmV3X21pZGRsZSwgX19sZW4xMSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOw0KICAgICAgICAgICAgX19tZXJn ZV9hZGFwdGl2ZShfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LCBfX2xlbjEgLSBf X2xlbjExLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIgLSBfX2xlbjIyLCBf X2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7DQogICAgICAgICAgfQ0KICAgIH0NCg0KDQoNCg0KDQoN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfRGlzdGFu Y2UsIHR5cGVuYW1lIF9Qb2ludGVyLA0KICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4NCiAg ICB2b2lkDQogICAgX19tZXJnZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwN CiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwNCiAgICAg ICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsDQogICAgICAgICAgICAg ICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLA0KICAgICAgICAgICAg ICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplLA0KICAg ICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQ0KICAgIHsNCiAgICAgICAgICBpZiAo X19sZW4xIDw9IF9fbGVuMiAmJiBfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgew0KICAgICAgICAg ICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZm ZXIpOw0KICAgICAgICAgICAgbWVyZ2UoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19taWRkbGUs IF9fbGFzdCwgX19maXJzdCwgX19jb21wKTsNCiAgICAgICAgICB9DQogICAgICAgICAgZWxzZSBp ZiAoX19sZW4yIDw9IF9fYnVmZmVyX3NpemUpIHsNCiAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVm ZmVyX2VuZCA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOw0KICAgICAgICAgICAg X19tZXJnZV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX2Vu ZCwgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19jb21wKTsNCiAgICAgICAgICB9DQogICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICBfQmlk aXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0Ow0KICAgICAgICAgICAgX0JpZGly ZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOw0KICAgICAgICAgICAgX0Rpc3Rh bmNlIF9fbGVuMTEgPSAwOw0KICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOw0KICAg ICAgICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMikgew0KICAgICAgICAgICAgICAgICAgX19sZW4x MSA9IF9fbGVuMSAvIDI7DQogICAgICAgICAgICAgICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBf X2xlbjExKTsNCiAgICAgICAgICAgICAgICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9f bWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCwgX19jb21wKTsNCiAgICAgICAgICAgICAgICAg IF9fbGVuMjIgPSBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsNCiAgICAgICAgICAg IH0NCiAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAgICAgX19sZW4yMiA9IF9fbGVu MiAvIDI7DQogICAgICAgICAgICAgICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7 DQogICAgICAgICAgICAgICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9f bWlkZGxlLCAqX19zZWNvbmRfY3V0LCBfX2NvbXApOw0KICAgICAgICAgICAgICAgICAgX19sZW4x MSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0KTsNCiAgICAgICAgICAgIH0NCiAgICAg ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUgPQ0KICAgICAgICAgICAgICAg ICAgX19yb3RhdGVfYWRhcHRpdmUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQs DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjEgLSBfX2xlbjExLCBf X2xlbjIyLCBfX2J1ZmZlciwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f YnVmZmVyX3NpemUpOw0KICAgICAgICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX2Zp cnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwgX19jb21wKTsNCiAgICAgICAg ICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwg X19sZW4xIC0gX19sZW4xMSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0g X19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsIF9fY29tcCk7DQogICAgICAgICAgfQ0K ICAgIH0NCiMgMzUwOCAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf YWxnby5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4NCiAgICB2 b2lkDQogICAgaW5wbGFjZV9tZXJnZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwNCiAgICAg ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwNCiAgICAgICAgICAgICAg ICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpDQogICAgew0KICAgICAgdHlwZWRlZiB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6dmFsdWVfdHlwZQ0KICAg ICAgICAgIF9WYWx1ZVR5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfQmlkaXJlY3Rpb25hbEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUNCiAgICAgICAgICBfRGlzdGFu Y2VUeXBlOw0KDQoNCiAgICAgDQoNCiAgICAgDQoNCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbWlk ZGxlIHx8IF9fbWlkZGxlID09IF9fbGFzdCkNCiAgICAgICAgcmV0dXJuOw0KDQogICAgICBfRGlz dGFuY2VUeXBlIF9fbGVuMSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbWlkZGxlKTsNCiAgICAgIF9E aXN0YW5jZVR5cGUgX19sZW4yID0gZGlzdGFuY2UoX19taWRkbGUsIF9fbGFzdCk7DQoNCiAgICAg IF9UZW1wb3JhcnlfYnVmZmVyPF9CaWRpcmVjdGlvbmFsSXRlciwgX1ZhbHVlVHlwZT4gX19idWYo X19maXJzdCwgX19sYXN0KTsNCiAgICAgIGlmIChfX2J1Zi5iZWdpbigpID09IDApDQogICAgICAg IF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4x LCBfX2xlbjIpOw0KICAgICAgZWxzZQ0KICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3Qs IF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLA0KICAgICAgICAgICAgICAgICAgICAg ICAgIF9fYnVmLmJlZ2luKCksIF9EaXN0YW5jZVR5cGUoX19idWYuc2l6ZSgpKSk7DQogICAgfQ0K IyAzNTU5ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgi IDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfQ29t cGFyZT4NCiAgICB2b2lkDQogICAgaW5wbGFjZV9tZXJnZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19m aXJzdCwNCiAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwNCiAg ICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsDQogICAgICAgICAgICAg ICAgICBfQ29tcGFyZSBfX2NvbXApDQogICAgew0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy YXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6dmFsdWVfdHlwZQ0KICAgICAgICAgIF9W YWx1ZVR5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJl Y3Rpb25hbEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUNCiAgICAgICAgICBfRGlzdGFuY2VUeXBlOw0K DQoNCiAgICAgDQoNCiAgICAgDQoNCg0KICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUgfHwg X19taWRkbGUgPT0gX19sYXN0KQ0KICAgICAgICByZXR1cm47DQoNCiAgICAgIF9EaXN0YW5jZVR5 cGUgX19sZW4xID0gZGlzdGFuY2UoX19maXJzdCwgX19taWRkbGUpOw0KICAgICAgX0Rpc3RhbmNl VHlwZSBfX2xlbjIgPSBkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0KTsNCg0KICAgICAgX1RlbXBv cmFyeV9idWZmZXI8X0JpZGlyZWN0aW9uYWxJdGVyLCBfVmFsdWVUeXBlPiBfX2J1ZihfX2ZpcnN0 LCBfX2xhc3QpOw0KICAgICAgaWYgKF9fYnVmLmJlZ2luKCkgPT0gMCkNCiAgICAgICAgX19tZXJn ZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVu MiwgX19jb21wKTsNCiAgICAgIGVsc2UNCiAgICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0 LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwNCiAgICAgICAgICAgICAgICAgICAg ICAgICBfX2J1Zi5iZWdpbigpLCBfRGlzdGFuY2VUeXBlKF9fYnVmLnNpemUoKSksDQogICAgICAg ICAgICAgICAgICAgICAgICAgX19jb21wKTsNCiAgICB9DQoNCg0KDQoNCg0KDQogIHRlbXBsYXRl PHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMj4NCiAgICBib29sDQog ICAgaW5jbHVkZXMoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsDQog ICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpDQog ICAgew0KDQogICAgIA0KICAgICANCiAgICAgDQoNCg0KICAgICANCg0KDQogICAgICB3aGlsZSAo X19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQ0KICAgICAgICBpZiAo Kl9fZmlyc3QyIDwgKl9fZmlyc3QxKQ0KICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAg ZWxzZSBpZigqX19maXJzdDEgPCAqX19maXJzdDIpDQogICAgICAgICAgKytfX2ZpcnN0MTsNCiAg ICAgICAgZWxzZQ0KICAgICAgICAgICsrX19maXJzdDEsICsrX19maXJzdDI7DQoNCiAgICAgIHJl dHVybiBfX2ZpcnN0MiA9PSBfX2xhc3QyOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf SW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9Db21wYXJlPg0KICAg IGJvb2wNCiAgICBpbmNsdWRlcyhfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19s YXN0MSwNCiAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19s YXN0MiwgX0NvbXBhcmUgX19jb21wKQ0KICAgIHsNCg0KICAgICANCiAgICAgDQogICAgIA0KDQoN CiAgICAgDQoNCg0KDQogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0 MiAhPSBfX2xhc3QyKQ0KICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkN CiAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIGVsc2UgaWYoX19jb21wKCpfX2ZpcnN0 MSwgKl9fZmlyc3QyKSkNCiAgICAgICAgICArK19fZmlyc3QxOw0KICAgICAgICBlbHNlDQogICAg ICAgICAgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MjsNCg0KICAgICAgcmV0dXJuIF9fZmlyc3QyID09 IF9fbGFzdDI7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBl bmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXI+DQogICAgX091dHB1dEl0ZXIN CiAgICBzZXRfdW5pb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEs DQogICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3Qy LA0KICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkNCiAgICB7DQoNCiAgICAgDQog ICAgIA0KICAgICANCg0KICAgICANCg0KDQogICAgIA0KDQoNCiAgICAgIHdoaWxlIChfX2ZpcnN0 MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsNCiAgICAgICAgaWYgKCpfX2Zp cnN0MSA8ICpfX2ZpcnN0Mikgew0KICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsNCiAg ICAgICAgICArK19fZmlyc3QxOw0KICAgICAgICB9DQogICAgICAgIGVsc2UgaWYgKCpfX2ZpcnN0 MiA8ICpfX2ZpcnN0MSkgew0KICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsNCiAgICAg ICAgICArK19fZmlyc3QyOw0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgICpf X3Jlc3VsdCA9ICpfX2ZpcnN0MTsNCiAgICAgICAgICArK19fZmlyc3QxOw0KICAgICAgICAgICsr X19maXJzdDI7DQogICAgICAgIH0NCiAgICAgICAgKytfX3Jlc3VsdDsNCiAgICAgIH0NCiAgICAg IHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBf X3Jlc3VsdCkpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlw ZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLA0KICAgICAgICAgICB0eXBl bmFtZSBfQ29tcGFyZT4NCiAgICBfT3V0cHV0SXRlcg0KICAgIHNldF91bmlvbihfSW5wdXRJdGVy MSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICAgX0lucHV0SXRl cjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsDQogICAgICAgICAgICAgIF9PdXRwdXRJ dGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApDQogICAgew0KDQogICAgIA0KICAgICANCiAg ICAgDQoNCg0KICAgICANCg0KICAgICANCg0KDQoNCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBf X2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsNCiAgICAgICAgaWYgKF9fY29tcCgqX19m aXJzdDEsICpfX2ZpcnN0MikpIHsNCiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7DQog ICAgICAgICAgKytfX2ZpcnN0MTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIGlmIChfX2NvbXAo Kl9fZmlyc3QyLCAqX19maXJzdDEpKSB7DQogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Qy Ow0KICAgICAgICAgICsrX19maXJzdDI7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAg ICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOw0KICAgICAgICAgICsrX19maXJzdDE7DQogICAg ICAgICAgKytfX2ZpcnN0MjsNCiAgICAgICAgfQ0KICAgICAgICArK19fcmVzdWx0Ow0KICAgICAg fQ0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9f bGFzdDEsIF9fcmVzdWx0KSk7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0 ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXI+DQogICAgX091 dHB1dEl0ZXINCiAgICBzZXRfaW50ZXJzZWN0aW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5w dXRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJz dDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsDQogICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRl ciBfX3Jlc3VsdCkNCiAgICB7DQoNCiAgICAgDQogICAgIA0KICAgICANCg0KICAgICANCg0KDQog ICAgIA0KDQoNCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9 IF9fbGFzdDIpDQogICAgICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpDQogICAgICAgICAg KytfX2ZpcnN0MTsNCiAgICAgICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQ0KICAg ICAgICAgICsrX19maXJzdDI7DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgICpfX3Jlc3VsdCA9 ICpfX2ZpcnN0MTsNCiAgICAgICAgICArK19fZmlyc3QxOw0KICAgICAgICAgICsrX19maXJzdDI7 DQogICAgICAgICAgKytfX3Jlc3VsdDsNCiAgICAgICAgfQ0KICAgICAgcmV0dXJuIF9fcmVzdWx0 Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lu cHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLA0KICAgICAgICAgICB0eXBlbmFtZSBfQ29t cGFyZT4NCiAgICBfT3V0cHV0SXRlcg0KICAgIHNldF9pbnRlcnNlY3Rpb24oX0lucHV0SXRlcjEg X19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICBfSW5w dXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwNCiAgICAgICAgICAgICAgICAg ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApDQogICAgew0KDQogICAg IA0KICAgICANCiAgICAgDQoNCg0KICAgICANCg0KICAgICANCg0KDQoNCiAgICAgIHdoaWxlIChf X2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpDQogICAgICAgIGlmIChf X2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQ0KICAgICAgICAgICsrX19maXJzdDE7DQogICAg ICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpDQogICAgICAgICAgKytf X2ZpcnN0MjsNCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Qx Ow0KICAgICAgICAgICsrX19maXJzdDE7DQogICAgICAgICAgKytfX2ZpcnN0MjsNCiAgICAgICAg ICArK19fcmVzdWx0Ow0KICAgICAgICB9DQogICAgICByZXR1cm4gX19yZXN1bHQ7DQogICAgfQ0K DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwg dHlwZW5hbWUgX091dHB1dEl0ZXI+DQogICAgX091dHB1dEl0ZXINCiAgICBzZXRfZGlmZmVyZW5j ZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAg ICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwNCiAgICAg ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkNCiAgICB7DQoNCiAgICAgDQogICAg IA0KICAgICANCg0KICAgICANCg0KDQogICAgIA0KDQoNCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAh PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpDQogICAgICAgIGlmICgqX19maXJzdDEg PCAqX19maXJzdDIpIHsNCiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7DQogICAgICAg ICAgKytfX2ZpcnN0MTsNCiAgICAgICAgICArK19fcmVzdWx0Ow0KICAgICAgICB9DQogICAgICAg IGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkNCiAgICAgICAgICArK19fZmlyc3QyOw0K ICAgICAgICBlbHNlIHsNCiAgICAgICAgICArK19fZmlyc3QxOw0KICAgICAgICAgICsrX19maXJz dDI7DQogICAgICAgIH0NCiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jl c3VsdCk7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFt ZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsDQogICAgICAgICAgIHR5cGVuYW1l IF9Db21wYXJlPg0KICAgIF9PdXRwdXRJdGVyDQogICAgc2V0X2RpZmZlcmVuY2UoX0lucHV0SXRl cjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgX0lu cHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsDQogICAgICAgICAgICAgICAg ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkNCiAgICB7DQoNCiAgICAg DQogICAgIA0KICAgICANCg0KDQogICAgIA0KDQogICAgIA0KDQoNCg0KICAgICAgd2hpbGUgKF9f Zmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikNCiAgICAgICAgaWYgKF9f Y29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsNCiAgICAgICAgICAqX19yZXN1bHQgPSAqX19m aXJzdDE7DQogICAgICAgICAgKytfX2ZpcnN0MTsNCiAgICAgICAgICArK19fcmVzdWx0Ow0KICAg ICAgICB9DQogICAgICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpDQog ICAgICAgICAgKytfX2ZpcnN0MjsNCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgKytfX2ZpcnN0 MTsNCiAgICAgICAgICArK19fZmlyc3QyOw0KICAgICAgICB9DQogICAgICByZXR1cm4gY29weShf X2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVy Pg0KICAgIF9PdXRwdXRJdGVyDQogICAgc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9JbnB1dEl0 ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpDQogICAgew0KDQog ICAgIA0KICAgICANCiAgICAgDQoNCiAgICAgDQoNCg0KICAgICANCg0KDQogICAgICB3aGlsZSAo X19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQ0KICAgICAgICBpZiAo Kl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7DQogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Qx Ow0KICAgICAgICAgICsrX19maXJzdDE7DQogICAgICAgICAgKytfX3Jlc3VsdDsNCiAgICAgICAg fQ0KICAgICAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpIHsNCiAgICAgICAgICAq X19yZXN1bHQgPSAqX19maXJzdDI7DQogICAgICAgICAgKytfX2ZpcnN0MjsNCiAgICAgICAgICAr K19fcmVzdWx0Ow0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgICsrX19maXJz dDE7DQogICAgICAgICAgKytfX2ZpcnN0MjsNCiAgICAgICAgfQ0KICAgICAgcmV0dXJuIGNvcHko X19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7DQog ICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJ dGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsDQogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJl Pg0KICAgIF9PdXRwdXRJdGVyDQogICAgc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9JbnB1dEl0 ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkNCiAgICB7DQoNCiAgICAgDQogICAg IA0KICAgICANCg0KDQogICAgIA0KDQogICAgIA0KDQoNCg0KICAgICAgd2hpbGUgKF9fZmlyc3Qx ICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikNCiAgICAgICAgaWYgKF9fY29tcCgq X19maXJzdDEsICpfX2ZpcnN0MikpIHsNCiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7 DQogICAgICAgICAgKytfX2ZpcnN0MTsNCiAgICAgICAgICArK19fcmVzdWx0Ow0KICAgICAgICB9 DQogICAgICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpIHsNCiAgICAg ICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7DQogICAgICAgICAgKytfX2ZpcnN0MjsNCiAgICAg ICAgICArK19fcmVzdWx0Ow0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgICsr X19maXJzdDE7DQogICAgICAgICAgKytfX2ZpcnN0MjsNCiAgICAgICAgfQ0KICAgICAgcmV0dXJu IGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0 KSk7DQogICAgfQ0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4NCiAg ICBfRm9yd2FyZEl0ZXINCiAgICBtYXhfZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv cndhcmRJdGVyIF9fbGFzdCkNCiAgICB7DQoNCiAgICAgDQogICAgIA0KDQoNCiAgICAgIGlmIChf X2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7DQogICAgICBfRm9yd2FyZEl0ZXIgX19y ZXN1bHQgPSBfX2ZpcnN0Ow0KICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpDQogICAg ICAgIGlmICgqX19yZXN1bHQgPCAqX19maXJzdCkNCiAgICAgICAgICBfX3Jlc3VsdCA9IF9fZmly c3Q7DQogICAgICByZXR1cm4gX19yZXN1bHQ7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1l IF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+DQogICAgX0ZvcndhcmRJdGVyDQogICAg bWF4X2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQog ICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQ0KICAgIHsNCg0KICAgICANCiAgICAgDQoN Cg0KDQogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0Ow0KICAgICAg X0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsNCiAgICAgIHdoaWxlICgrK19fZmlyc3Qg IT0gX19sYXN0KQ0KICAgICAgICBpZiAoX19jb21wKCpfX3Jlc3VsdCwgKl9fZmlyc3QpKSBfX3Jl c3VsdCA9IF9fZmlyc3Q7DQogICAgICByZXR1cm4gX19yZXN1bHQ7DQogICAgfQ0KDQogIHRlbXBs YXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4NCiAgICBfRm9yd2FyZEl0ZXINCiAgICBtaW5fZWxl bWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkNCiAgICB7DQoN CiAgICAgDQogICAgIA0KDQoNCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9f Zmlyc3Q7DQogICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0Ow0KICAgICAgd2hp bGUgKCsrX19maXJzdCAhPSBfX2xhc3QpDQogICAgICAgIGlmICgqX19maXJzdCA8ICpfX3Jlc3Vs dCkNCiAgICAgICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7DQogICAgICByZXR1cm4gX19yZXN1bHQ7 DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0Nv bXBhcmU+DQogICAgX0ZvcndhcmRJdGVyDQogICAgbWluX2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9f Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgX0NvbXBhcmUgX19j b21wKQ0KICAgIHsNCg0KICAgICANCiAgICAgDQoNCg0KDQogICAgICBpZiAoX19maXJzdCA9PSBf X2xhc3QpIHJldHVybiBfX2ZpcnN0Ow0KICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19m aXJzdDsNCiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQ0KICAgICAgICBpZiAoX19j b21wKCpfX2ZpcnN0LCAqX19yZXN1bHQpKQ0KICAgICAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsN CiAgICAgIHJldHVybiBfX3Jlc3VsdDsNCiAgICB9DQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0JpZGlyZWN0aW9uYWxJdGVyPg0KICAgIGJvb2wNCiAgICBuZXh0X3Blcm11dGF0aW9uKF9C aWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KQ0KICAg IHsNCg0KICAgICANCiAgICAgDQoNCg0KICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQ0KICAg ICAgICByZXR1cm4gZmFsc2U7DQogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJz dDsNCiAgICAgICsrX19pOw0KICAgICAgaWYgKF9faSA9PSBfX2xhc3QpDQogICAgICAgIHJldHVy biBmYWxzZTsNCiAgICAgIF9faSA9IF9fbGFzdDsNCiAgICAgIC0tX19pOw0KDQogICAgICBmb3Io OzspIHsNCiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7DQogICAgICAgIC0t X19pOw0KICAgICAgICBpZiAoKl9faSA8ICpfX2lpKSB7DQogICAgICAgICAgX0JpZGlyZWN0aW9u YWxJdGVyIF9faiA9IF9fbGFzdDsNCiAgICAgICAgICB3aGlsZSAoISgqX19pIDwgKi0tX19qKSkN CiAgICAgICAgICAgIHt9DQogICAgICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsNCiAgICAgICAg ICByZXZlcnNlKF9faWksIF9fbGFzdCk7DQogICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAg IH0NCiAgICAgICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7DQogICAgICAgICAgcmV2ZXJzZShfX2Zp cnN0LCBfX2xhc3QpOw0KICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KICAgICAg fQ0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVu YW1lIF9Db21wYXJlPg0KICAgIGJvb2wNCiAgICBuZXh0X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlv bmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAg ICAgICAgICAgX0NvbXBhcmUgX19jb21wKQ0KICAgIHsNCg0KICAgICANCiAgICAgDQoNCg0KDQog ICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpDQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAg IF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0Ow0KICAgICAgKytfX2k7DQogICAgICBp ZiAoX19pID09IF9fbGFzdCkNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgX19pID0gX19s YXN0Ow0KICAgICAgLS1fX2k7DQoNCiAgICAgIGZvcig7Oykgew0KICAgICAgICBfQmlkaXJlY3Rp b25hbEl0ZXIgX19paSA9IF9faTsNCiAgICAgICAgLS1fX2k7DQogICAgICAgIGlmIChfX2NvbXAo Kl9faSwgKl9faWkpKSB7DQogICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFz dDsNCiAgICAgICAgICB3aGlsZSAoIV9fY29tcCgqX19pLCAqLS1fX2opKQ0KICAgICAgICAgICAg e30NCiAgICAgICAgICBpdGVyX3N3YXAoX19pLCBfX2opOw0KICAgICAgICAgIHJldmVyc2UoX19p aSwgX19sYXN0KTsNCiAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgfQ0KICAgICAgICBp ZiAoX19pID09IF9fZmlyc3QpIHsNCiAgICAgICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7 DQogICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQogICAgICB9DQogICAgfQ0KDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4NCiAgICBib29sDQogICAgcHJl dl9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJ dGVyIF9fbGFzdCkNCiAgICB7DQoNCiAgICAgDQogICAgIA0KDQoNCiAgICAgIGlmIChfX2ZpcnN0 ID09IF9fbGFzdCkNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgX0JpZGlyZWN0aW9uYWxJ dGVyIF9faSA9IF9fZmlyc3Q7DQogICAgICArK19faTsNCiAgICAgIGlmIChfX2kgPT0gX19sYXN0 KQ0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICBfX2kgPSBfX2xhc3Q7DQogICAgICAtLV9f aTsNCg0KICAgICAgZm9yKDs7KSB7DQogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0g X19pOw0KICAgICAgICAtLV9faTsNCiAgICAgICAgaWYgKCpfX2lpIDwgKl9faSkgew0KICAgICAg ICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7DQogICAgICAgICAgd2hpbGUgKCEo Ki0tX19qIDwgKl9faSkpDQogICAgICAgICAgICB7fQ0KICAgICAgICAgIGl0ZXJfc3dhcChfX2ks IF9faik7DQogICAgICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOw0KICAgICAgICAgIHJldHVy biB0cnVlOw0KICAgICAgICB9DQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkgew0KICAgICAg ICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsNCiAgICAgICAgICByZXR1cm4gZmFsc2U7DQog ICAgICAgIH0NCiAgICAgIH0NCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0 aW9uYWxJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4NCiAgICBib29sDQogICAgcHJldl9wZXJtdXRh dGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFz dCwNCiAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkNCiAgICB7DQoNCiAgICAg DQogICAgIA0KDQoNCg0KICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQ0KICAgICAgICByZXR1 cm4gZmFsc2U7DQogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsNCiAgICAg ICsrX19pOw0KICAgICAgaWYgKF9faSA9PSBfX2xhc3QpDQogICAgICAgIHJldHVybiBmYWxzZTsN CiAgICAgIF9faSA9IF9fbGFzdDsNCiAgICAgIC0tX19pOw0KDQogICAgICBmb3IoOzspIHsNCiAg ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7DQogICAgICAgIC0tX19pOw0KICAg ICAgICBpZiAoX19jb21wKCpfX2lpLCAqX19pKSkgew0KICAgICAgICAgIF9CaWRpcmVjdGlvbmFs SXRlciBfX2ogPSBfX2xhc3Q7DQogICAgICAgICAgd2hpbGUgKCFfX2NvbXAoKi0tX19qLCAqX19p KSkNCiAgICAgICAgICAgIHt9DQogICAgICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsNCiAgICAg ICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7DQogICAgICAgICAgcmV0dXJuIHRydWU7DQogICAg ICAgIH0NCiAgICAgICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7DQogICAgICAgICAgcmV2ZXJzZShf X2ZpcnN0LCBfX2xhc3QpOw0KICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KICAg ICAgfQ0KICAgIH0NCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5h bWUgX0ZvcndhcmRJdGVyPg0KICAgIF9JbnB1dEl0ZXINCiAgICBmaW5kX2ZpcnN0X29mKF9JbnB1 dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgIF9G b3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIpDQogICAgew0KDQogICAg IA0KICAgICANCiAgICAgDQoNCg0KDQogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7 ICsrX19maXJzdDEpDQogICAgICAgIGZvciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9fZmlyc3Qy OyBfX2l0ZXIgIT0gX19sYXN0MjsgKytfX2l0ZXIpDQogICAgICAgICAgaWYgKCpfX2ZpcnN0MSA9 PSAqX19pdGVyKQ0KICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3QxOw0KICAgICAgcmV0dXJuIF9f bGFzdDE7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1l IF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4NCiAgICBfSW5wdXRJdGVy DQogICAgZmluZF9maXJzdF9vZihfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFz dDEsDQogICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRl ciBfX2xhc3QyLA0KICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApDQog ICAgew0KDQogICAgIA0KICAgICANCiAgICAgDQoNCg0KICAgICANCg0KDQoNCiAgICAgIGZvciAo IDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSkNCiAgICAgICAgZm9yIChfRm9yd2Fy ZEl0ZXIgX19pdGVyID0gX19maXJzdDI7IF9faXRlciAhPSBfX2xhc3QyOyArK19faXRlcikNCiAg ICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9faXRlcikpDQogICAgICAgICAgICByZXR1 cm4gX19maXJzdDE7DQogICAgICByZXR1cm4gX19sYXN0MTsNCiAgICB9DQojIDQyMDEgInQ6L21z eXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPg0KICAgIF9G b3J3YXJkSXRlcjENCiAgICBfX2ZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3 YXJkSXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIs IF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwNCiAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3Jf dGFnLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykNCiAgICB7DQogICAgICBpZiAoX19maXJzdDIgPT0g X19sYXN0MikNCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7DQogICAgICBlbHNlIHsNCiAgICAgICAg X0ZvcndhcmRJdGVyMSBfX3Jlc3VsdCA9IF9fbGFzdDE7DQogICAgICAgIHdoaWxlICgxKSB7DQog ICAgICAgICAgX0ZvcndhcmRJdGVyMSBfX25ld19yZXN1bHQNCiAgICAgICAgICAgID0gc2VhcmNo KF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7DQogICAgICAgICAgaWYgKF9f bmV3X3Jlc3VsdCA9PSBfX2xhc3QxKQ0KICAgICAgICAgICAgcmV0dXJuIF9fcmVzdWx0Ow0KICAg ICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgX19yZXN1bHQgPSBfX25ld19yZXN1bHQ7DQogICAg ICAgICAgICBfX2ZpcnN0MSA9IF9fbmV3X3Jlc3VsdDsNCiAgICAgICAgICAgICsrX19maXJzdDE7 DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICB9DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5 cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjIsDQogICAgICAgICAg IHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+DQogICAgX0ZvcndhcmRJdGVyMQ0KICAgIF9fZmlu ZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLA0KICAg ICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3Qy LA0KICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcsIGZvcndhcmRfaXRlcmF0b3Jf dGFnLA0KICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApDQogICAgew0KICAg ICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpDQogICAgICAgIHJldHVybiBfX2xhc3QxOw0KICAg ICAgZWxzZSB7DQogICAgICAgIF9Gb3J3YXJkSXRlcjEgX19yZXN1bHQgPSBfX2xhc3QxOw0KICAg ICAgICB3aGlsZSAoMSkgew0KICAgICAgICAgIF9Gb3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0DQog ICAgICAgICAgICA9IHNlYXJjaChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIs IF9fY29tcCk7DQogICAgICAgICAgaWYgKF9fbmV3X3Jlc3VsdCA9PSBfX2xhc3QxKQ0KICAgICAg ICAgICAgcmV0dXJuIF9fcmVzdWx0Ow0KICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgX19y ZXN1bHQgPSBfX25ld19yZXN1bHQ7DQogICAgICAgICAgICBfX2ZpcnN0MSA9IF9fbmV3X3Jlc3Vs dDsNCiAgICAgICAgICAgICsrX19maXJzdDE7DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAg ICB9DQogICAgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwg dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMj4NCiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxDQog ICAgX19maW5kX2VuZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rpb25h bEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmly c3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsDQogICAgICAgICAgICAgICBiaWRpcmVj dGlvbmFsX2l0ZXJhdG9yX3RhZywgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpDQogICAgew0K DQogICAgIA0KICAgICANCg0KICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVj dGlvbmFsSXRlcjE+IF9SZXZJdGVyMTsNCiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxf QmlkaXJlY3Rpb25hbEl0ZXIyPiBfUmV2SXRlcjI7DQoNCiAgICAgIF9SZXZJdGVyMSBfX3JsYXN0 MShfX2ZpcnN0MSk7DQogICAgICBfUmV2SXRlcjIgX19ybGFzdDIoX19maXJzdDIpOw0KICAgICAg X1Jldkl0ZXIxIF9fcnJlc3VsdCA9IHNlYXJjaChfUmV2SXRlcjEoX19sYXN0MSksIF9fcmxhc3Qx LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmV2SXRlcjIoX19sYXN0Miks IF9fcmxhc3QyKTsNCg0KICAgICAgaWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0MSkNCiAgICAgICAg cmV0dXJuIF9fbGFzdDE7DQogICAgICBlbHNlIHsNCiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy MSBfX3Jlc3VsdCA9IF9fcnJlc3VsdC5iYXNlKCk7DQogICAgICAgIGFkdmFuY2UoX19yZXN1bHQs IC1kaXN0YW5jZShfX2ZpcnN0MiwgX19sYXN0MikpOw0KICAgICAgICByZXR1cm4gX19yZXN1bHQ7 DQogICAgICB9DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRl cjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjIsDQogICAgICAgICAgIHR5cGVuYW1lIF9C aW5hcnlQcmVkaWNhdGU+DQogICAgX0JpZGlyZWN0aW9uYWxJdGVyMQ0KICAgIF9fZmluZF9lbmQo X0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3Qx LA0KICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0 aW9uYWxJdGVyMiBfX2xhc3QyLA0KICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRv cl90YWcsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLA0KICAgICAgICAgICAgICAgX0JpbmFy eVByZWRpY2F0ZSBfX2NvbXApDQogICAgew0KDQogICAgIA0KICAgICANCg0KICAgICAgdHlwZWRl ZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjE+IF9SZXZJdGVyMTsNCiAgICAg IHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIyPiBfUmV2SXRlcjI7 DQoNCiAgICAgIF9SZXZJdGVyMSBfX3JsYXN0MShfX2ZpcnN0MSk7DQogICAgICBfUmV2SXRlcjIg X19ybGFzdDIoX19maXJzdDIpOw0KICAgICAgX1Jldkl0ZXIxIF9fcnJlc3VsdCA9IHNlYXJjaChf UmV2SXRlcjEoX19sYXN0MSksIF9fcmxhc3QxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfUmV2SXRlcjIoX19sYXN0MiksIF9fcmxhc3QyLA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2NvbXApOw0KDQogICAgICBpZiAoX19ycmVzdWx0ID09IF9fcmxh c3QxKQ0KICAgICAgICByZXR1cm4gX19sYXN0MTsNCiAgICAgIGVsc2Ugew0KICAgICAgICBfQmlk aXJlY3Rpb25hbEl0ZXIxIF9fcmVzdWx0ID0gX19ycmVzdWx0LmJhc2UoKTsNCiAgICAgICAgYWR2 YW5jZShfX3Jlc3VsdCwgLWRpc3RhbmNlKF9fZmlyc3QyLCBfX2xhc3QyKSk7DQogICAgICAgIHJl dHVybiBfX3Jlc3VsdDsNCiAgICAgIH0NCiAgICB9DQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1l IF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjI+DQogICAgaW5saW5lIF9Gb3J3 YXJkSXRlcjENCiAgICBmaW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0 ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0Zvcndh cmRJdGVyMiBfX2xhc3QyKQ0KICAgIHsNCg0KICAgICANCiAgICAgDQogICAgIA0KDQoNCg0KICAg ICAgcmV0dXJuIF9fZmluZF9lbmQoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3Qy LA0KICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MSks DQogICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QyKSk7 DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9G b3J3YXJkSXRlcjIsDQogICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+DQogICAg aW5saW5lIF9Gb3J3YXJkSXRlcjENCiAgICBmaW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3Qx LCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2Zp cnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLA0KICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNh dGUgX19jb21wKQ0KICAgIHsNCg0KICAgICANCiAgICAgDQogICAgIA0KDQoNCg0KICAgICAgcmV0 dXJuIF9fZmluZF9lbmQoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLA0KICAg ICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MSksDQogICAg ICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QyKSwNCiAgICAg ICAgICAgICAgICAgICAgICAgIF9fY29tcCk7DQogICAgfQ0KDQp9DQojIDcwICJ0Oi9tc3lzLzEu MC9taW5ndy9pbmNsdWRlL2crKy12My9hbGdvcml0aG0iIDIgMw0KIyA1NyAidDovbXN5cy8xLjAv bWluZ3cvaW5jbHVkZS9nKystdjMvc3RyaW5nIiAyIDMNCiMgMSAidDovbXN5cy8xLjAvbWluZ3cv aW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcudGNjIiAxIDMNCiMgNDUgInQ6L21zeXMv MS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLnRjYyIgMw0KDQpuYW1l c3BhY2Ugc3RkDQp7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGNvbnN0IHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQ0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIF9SZXA6Ol9TX21heF9zaXplID0gKCgobnBvcyAtIHNp emVvZihfUmVwKSkvc2l6ZW9mKF9DaGFyVCkpIC0gMSkgLyA0Ow0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGNvbnN0 IF9DaGFyVA0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAg IF9SZXA6Ol9TX3Rlcm1pbmFsID0gX0NoYXJUKCk7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgY29uc3QgdHlwZW5h bWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlDQogICAg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6bnBvczsNCg0KDQoNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+ DQogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6 ZV90eXBlDQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1NfZW1w dHlfcmVwX3N0b3JhZ2VbDQogICAgKHNpemVvZihfUmVwKSArIHNpemVvZihfQ2hhclQpICsgc2l6 ZW9mKHNpemVfdHlwZSkgLSAxKS9zaXplb2Yoc2l6ZV90eXBlKV07DQoNCg0KDQoNCg0KICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4N CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5JdGVyPg0KICAgICAgX0NoYXJUKg0KICAgICAgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgICBfU19jb25zdHJ1Y3Qo X0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsDQogICAgICAg ICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQ0KICAgICAgew0KICAgICAgICBpZiAoX19i ZWcgPT0gX19lbmQgJiYgX19hID09IF9BbGxvYygpKQ0KICAgICAgICAgIHJldHVybiBfU19lbXB0 eV9yZXAoKS5fTV9yZWZjb3B5KCk7DQoNCiAgICAgICAgX0NoYXJUIF9fYnVmWzEwMF07DQogICAg ICAgIHNpemVfdHlwZSBfX2kgPSAwOw0KICAgICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQgJiYg X19pIDwgc2l6ZW9mKF9fYnVmKSAvIHNpemVvZihfQ2hhclQpKQ0KICAgICAgICAgIHsNCiAgICAg ICAgICAgIF9fYnVmW19faSsrXSA9ICpfX2JlZzsNCiAgICAgICAgICAgICsrX19iZWc7DQogICAg ICAgICAgfQ0KICAgICAgICBfUmVwKiBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19pLCBfX2EpOw0K ICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSwgX19idWYsIF9faSk7 DQogICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19pOw0KICAgICAgICBpZiAodHJ1ZSkNCiAgICAg ICAgICB7DQoNCg0KDQogICAgICAgICAgICBmb3IgKDs7KQ0KICAgICAgICAgICAgICB7DQogICAg ICAgICAgICAgICAgX0NoYXJUKiBfX3AgPSBfX3ItPl9NX3JlZmRhdGEoKSArIF9fci0+X01fbGVu Z3RoOw0KICAgICAgICAgICAgICAgIF9DaGFyVCogX19sYXN0ID0gX19yLT5fTV9yZWZkYXRhKCkg KyBfX3ItPl9NX2NhcGFjaXR5Ow0KICAgICAgICAgICAgICAgIGZvciAoOzspDQogICAgICAgICAg ICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkNCiAgICAg ICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBfX3ItPl9NX2xlbmd0 aCA9IF9fcCAtIF9fci0+X01fcmVmZGF0YSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgKl9f cCA9IF9SZXA6Ol9TX3Rlcm1pbmFsOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9f ci0+X01fcmVmZGF0YSgpOw0KICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg ICAgICAgaWYgKF9fcCA9PSBfX2xhc3QpDQogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQog ICAgICAgICAgICAgICAgICAgICpfX3ArKyA9ICpfX2JlZzsNCiAgICAgICAgICAgICAgICAgICAg KytfX2JlZzsNCiAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIHNpemVfdHlw ZSBfX2xlbiA9IF9fcCAtIF9fci0+X01fcmVmZGF0YSgpOw0KICAgICAgICAgICAgICAgIF9SZXAq IF9fYW5vdGhlciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2xlbiArIDEsIF9fYSk7DQogICAgICAgICAg ICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19hbm90aGVyLT5fTV9yZWZkYXRhKCksDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yLT5fTV9yZWZkYXRhKCksIF9fbGVuKTsNCiAg ICAgICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsNCiAgICAgICAgICAgICAgICBfX3Ig PSBfX2Fub3RoZXI7DQogICAgICAgICAgICAgICAgX19yLT5fTV9sZW5ndGggPSBfX2xlbjsNCiAg ICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgaWYgKGZhbHNlKQ0KICAgICAgICAg IHsNCiAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2EpOw0KICAgICAgICAgICAgOw0KICAg ICAgICAgIH0NCiAgICAgICAgcmV0dXJuIDA7DQogICAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgdGVtcGxh dGUgPGNsYXNzIF9Jbkl0ZXI+DQogICAgICBfQ2hhclQqDQogICAgICBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVn LCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwNCiAgICAgICAgICAgICAgICAgICBm b3J3YXJkX2l0ZXJhdG9yX3RhZykNCiAgICAgIHsNCiAgICAgICAgc2l6ZV90eXBlIF9fZG5ldyA9 IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oZGlzdGFuY2UoX19iZWcsIF9fZW5kKSk7DQoNCg0KICAg ICAgICBpZiAoX19idWlsdGluX2V4cGVjdChfX2JlZyA9PSBfSW5JdGVyKDApLCAwKSkNCiAgICAg ICAgICBfX3Rocm93X2xvZ2ljX2Vycm9yKCJhdHRlbXB0IHRvIGNyZWF0ZSBzdHJpbmcgd2l0aCBu dWxsIHBvaW50ZXIiKTsNCg0KICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQgJiYgX19hID09IF9B bGxvYygpKQ0KICAgICAgICAgIHJldHVybiBfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7DQoN Cg0KICAgICAgICBfUmVwKiBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19kbmV3LCBfX2EpOw0KICAg ICAgICBpZiAodHJ1ZSkNCiAgICAgICAgICB7IF9TX2NvcHlfY2hhcnMoX19yLT5fTV9yZWZkYXRh KCksIF9fYmVnLCBfX2VuZCk7IH0NCiAgICAgICAgaWYgKGZhbHNlKQ0KICAgICAgICAgIHsNCiAg ICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2EpOw0KICAgICAgICAgICAgOw0KICAgICAgICAg IH0NCiAgICAgICAgX19yLT5fTV9sZW5ndGggPSBfX2RuZXc7DQoNCiAgICAgICAgX19yLT5fTV9y ZWZkYXRhKClbX19kbmV3XSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOw0KICAgICAgICByZXR1cm4gX19y LT5fTV9yZWZkYXRhKCk7DQogICAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgX0NoYXJUKg0KICAgIGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIF9TX2NvbnN0cnVjdChzaXpl X3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSkNCiAgICB7DQogICAgICBp ZiAoX19uID09IDAgJiYgX19hID09IF9BbGxvYygpKQ0KICAgICAgICByZXR1cm4gX1NfZW1wdHlf cmVwKCkuX01fcmVmY29weSgpOw0KDQoNCiAgICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0 ZShfX24sIF9fYSk7DQogICAgICBpZiAodHJ1ZSkNCiAgICAgICAgew0KICAgICAgICAgIGlmIChf X24pDQogICAgICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9fci0+X01fcmVmZGF0YSgpLCBf X24sIF9fYyk7DQogICAgICAgIH0NCiAgICAgIGlmIChmYWxzZSkNCiAgICAgICAgew0KICAgICAg ICAgIF9fci0+X01fZGVzdHJveShfX2EpOw0KICAgICAgICAgIDsNCiAgICAgICAgfQ0KICAgICAg X19yLT5fTV9sZW5ndGggPSBfX247DQogICAgICBfX3ItPl9NX3JlZmRhdGEoKVtfX25dID0gX1Jl cDo6X1NfdGVybWluYWw7DQogICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7DQogICAgfQ0K DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAg IGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQ0KICAgIDogX01fZGF0YXBs dXMoX19zdHIuX01fcmVwKCktPl9NX2dyYWIoX0FsbG9jKCksIF9fc3RyLmdldF9hbGxvY2F0b3Io KSksDQogICAgICAgICAgICAgICAgIF9fc3RyLmdldF9hbGxvY2F0b3IoKSkNCiAgICB7IH0NCg0K ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBi YXNpY19zdHJpbmcoY29uc3QgX0FsbG9jJiBfX2EpDQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25z dHJ1Y3Qoc2l6ZV90eXBlKCksIF9DaGFyVCgpLCBfX2EpLCBfX2EpDQogICAgeyB9DQoNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+ DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgYmFzaWNf c3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90 eXBlIF9fbikNCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3N0ci5fTV9jaGVjayhf X3BvcyksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3Bv cywgX19uKSwgX0FsbG9jKCkpLCBfQWxsb2MoKSkNCiAgICB7IH0NCg0KICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBiYXNpY19zdHJpbmcoY29u c3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLA0KICAgICAgICAgICAgICAg ICBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYSkNCiAgICA6IF9NX2RhdGFwbHVzKF9T X2NvbnN0cnVjdChfX3N0ci5fTV9jaGVjayhfX3BvcyksDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19zdHIuX01fZm9sZChfX3BvcywgX19uKSwgX19hKSwgX19hKQ0KICAgIHsgfQ0K DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAg IGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgX0Fs bG9jJiBfX2EpDQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zLCBfX3MgKyBfX24s IF9fYSksIF9fYSkNCiAgICB7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+OjoNCiAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIGNv bnN0IF9BbGxvYyYgX19hKQ0KICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fcywgX19z ID8gX19zICsgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpIDogMCwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2EpLCBfX2EpDQogICAgeyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgYmFzaWNfc3RyaW5nKHNpemVfdHlw ZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hKQ0KICAgIDogX01fZGF0YXBsdXMo X1NfY29uc3RydWN0KF9fbiwgX19jLCBfX2EpLCBfX2EpDQogICAgeyB9DQoNCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAg dGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcj4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+OjoNCiAgICBiYXNpY19zdHJpbmcoX0lucHV0SXRlciBfX2JlZywgX0lu cHV0SXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EpDQogICAgOiBfTV9kYXRhcGx1cyhfU19j b25zdHJ1Y3QoX19iZWcsIF9fZW5kLCBfX2EpLCBfX2EpDQogICAgeyB9DQoNCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYNCiAgICBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojphc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0 cikNCiAgICB7DQogICAgICBpZiAoX01fcmVwKCkgIT0gX19zdHIuX01fcmVwKCkpDQogICAgICAg IHsNCg0KICAgICAgICAgIGFsbG9jYXRvcl90eXBlIF9fYSA9IHRoaXMtPmdldF9hbGxvY2F0b3Io KTsNCiAgICAgICAgICBfQ2hhclQqIF9fdG1wID0gX19zdHIuX01fcmVwKCktPl9NX2dyYWIoX19h LCBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpOw0KICAgICAgICAgIF9NX3JlcCgpLT5fTV9kaXNwb3Nl KF9fYSk7DQogICAgICAgICAgX01fZGF0YShfX3RtcCk7DQogICAgICAgIH0NCiAgICAgIHJldHVy biAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgdm9pZA0KICAgIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6Og0KICAgIF9NX2Rlc3Ryb3koY29uc3QgX0FsbG9j JiBfX2EpIHRocm93ICgpDQogICAgew0KICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHNpemVvZihf UmVwKSArIChfTV9jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCk7DQogICAgICBfUmF3X2J5 dGVzX2FsbG9jKF9fYSkuZGVhbGxvY2F0ZShyZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSwg X19zaXplKTsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgdm9pZA0KICAgIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz46Ol9NX2xlYWtfaGFyZCgpDQogICAgew0KICAgICAgaWYgKF9N X3JlcCgpLT5fTV9pc19zaGFyZWQoKSkNCiAgICAgICAgX01fbXV0YXRlKDAsIDAsIDApOw0KICAg ICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsNCiAgICB9DQoNCg0KDQoNCg0KDQoNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+ DQogICAgdm9pZA0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0K ICAgIF9NX211dGF0ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX2xlbjEsIHNpemVfdHlw ZSBfX2xlbjIpDQogICAgew0KICAgICAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSB0aGlzLT5zaXpl KCk7DQogICAgICBjb25zdCBzaXplX3R5cGUgX19uZXdfc2l6ZSA9IF9fb2xkX3NpemUgKyBfX2xl bjIgLSBfX2xlbjE7DQogICAgICBjb25zdCBfQ2hhclQqIF9fc3JjID0gX01fZGF0YSgpICsgX19w b3MgKyBfX2xlbjE7DQogICAgICBjb25zdCBzaXplX3R5cGUgX19ob3dfbXVjaCA9IF9fb2xkX3Np emUgLSBfX3BvcyAtIF9fbGVuMTsNCg0KICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19zaGFyZWQo KSB8fCBfX25ld19zaXplID4gY2FwYWNpdHkoKSkNCiAgICAgICAgew0KDQogICAgICAgICAgYWxs b2NhdG9yX3R5cGUgX19hID0gZ2V0X2FsbG9jYXRvcigpOw0KDQoNCiAgICAgICAgICBjb25zdCBz aXplX3R5cGUgX19wYWdlc2l6ZSA9IDQwOTY7DQogICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9f bWFsbG9jX2hlYWRlcl9zaXplID0gNCAqIHNpemVvZiAodm9pZCopOw0KDQogICAgICAgICAgY29u c3Qgc2l6ZV90eXBlIF9fcGFnZV9jYXBhY2l0eSA9IChfX3BhZ2VzaXplIC0gX19tYWxsb2NfaGVh ZGVyX3NpemUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0g c2l6ZW9mKF9SZXApIC0gc2l6ZW9mKF9DaGFyVCkpDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvIHNpemVvZihfQ2hhclQpOw0KICAgICAgICAgIF9SZXAqIF9f cjsNCiAgICAgICAgICBpZiAoX19uZXdfc2l6ZSA+IGNhcGFjaXR5KCkgJiYgX19uZXdfc2l6ZSA+ IF9fcGFnZV9jYXBhY2l0eSkNCg0KICAgICAgICAgICAgX19yID0gX1JlcDo6X1NfY3JlYXRlKF9f bmV3X3NpemUgPiAyKmNhcGFjaXR5KCkgPw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fbmV3X3NpemUgOiAyKmNhcGFjaXR5KCksIF9fYSk7DQogICAgICAgICAgZWxzZQ0KICAg ICAgICAgICAgX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fbmV3X3NpemUsIF9fYSk7DQogICAgICAg ICAgaWYgKHRydWUpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGlmIChfX3BvcykNCiAg ICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSwgX01fZGF0 YSgpLCBfX3Bvcyk7DQogICAgICAgICAgICAgIGlmIChfX2hvd19tdWNoKQ0KICAgICAgICAgICAg ICAgIHRyYWl0c190eXBlOjpjb3B5KF9fci0+X01fcmVmZGF0YSgpICsgX19wb3MgKyBfX2xlbjIs DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zcmMsIF9faG93X211Y2gpOw0K ICAgICAgICAgICAgfQ0KICAgICAgICAgIGlmIChmYWxzZSkNCiAgICAgICAgICAgIHsNCiAgICAg ICAgICAgICAgX19yLT5fTV9kaXNwb3NlKGdldF9hbGxvY2F0b3IoKSk7DQogICAgICAgICAgICAg IDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBfTV9yZXAoKS0+X01fZGlzcG9zZShfX2EpOw0K ICAgICAgICAgIF9NX2RhdGEoX19yLT5fTV9yZWZkYXRhKCkpOw0KICAgICAgfQ0KICAgICAgZWxz ZSBpZiAoX19ob3dfbXVjaCAmJiBfX2xlbjEgIT0gX19sZW4yKQ0KICAgICAgICB7DQoNCiAgICAg ICAgICB0cmFpdHNfdHlwZTo6bW92ZShfTV9kYXRhKCkgKyBfX3BvcyArIF9fbGVuMiwgX19zcmMs IF9faG93X211Y2gpOw0KICAgICAgICB9DQogICAgICBfTV9yZXAoKS0+X01fc2V0X3NoYXJhYmxl KCk7DQogICAgICBfTV9yZXAoKS0+X01fbGVuZ3RoID0gX19uZXdfc2l6ZTsNCiAgICAgIF9NX2Rh dGEoKVtfX25ld19zaXplXSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOw0KDQogICAgfQ0KDQogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0K ICAgIHZvaWQNCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpyZXNl cnZlKHNpemVfdHlwZSBfX3JlcykNCiAgICB7DQogICAgICBpZiAoX19yZXMgPiB0aGlzLT5jYXBh Y2l0eSgpIHx8IF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSkNCiAgICAgICAgew0KICAgICAgICAg IGlmIChfX3JlcyA+IHRoaXMtPm1heF9zaXplKCkpDQogICAgICAgICAgICBfX3Rocm93X2xlbmd0 aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpyZXNlcnZlIik7DQoNCiAgICAgICAgICBpZiAoX19yZXMg PCB0aGlzLT5zaXplKCkpDQogICAgICAgICAgICBfX3JlcyA9IHRoaXMtPnNpemUoKTsNCiAgICAg ICAgICBhbGxvY2F0b3JfdHlwZSBfX2EgPSBnZXRfYWxsb2NhdG9yKCk7DQogICAgICAgICAgX0No YXJUKiBfX3RtcCA9IF9NX3JlcCgpLT5fTV9jbG9uZShfX2EsIF9fcmVzIC0gdGhpcy0+c2l6ZSgp KTsNCiAgICAgICAgICBfTV9yZXAoKS0+X01fZGlzcG9zZShfX2EpOw0KICAgICAgICAgIF9NX2Rh dGEoX190bXApOw0KICAgICAgICB9DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIHZvaWQgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c3dhcChiYXNpY19zdHJpbmcmIF9fcykNCiAg ICB7DQogICAgICBpZiAoX01fcmVwKCktPl9NX2lzX2xlYWtlZCgpKQ0KICAgICAgICBfTV9yZXAo KS0+X01fc2V0X3NoYXJhYmxlKCk7DQogICAgICBpZiAoX19zLl9NX3JlcCgpLT5fTV9pc19sZWFr ZWQoKSkNCiAgICAgICAgX19zLl9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsNCiAgICAgIGlm ICh0aGlzLT5nZXRfYWxsb2NhdG9yKCkgPT0gX19zLmdldF9hbGxvY2F0b3IoKSkNCiAgICAgICAg ew0KICAgICAgICAgIF9DaGFyVCogX190bXAgPSBfTV9kYXRhKCk7DQogICAgICAgICAgX01fZGF0 YShfX3MuX01fZGF0YSgpKTsNCiAgICAgICAgICBfX3MuX01fZGF0YShfX3RtcCk7DQogICAgICAg IH0NCg0KICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgYmFzaWNfc3RyaW5nIF9fdG1w MShfTV9pYmVnaW4oKSwgX01faWVuZCgpLCBfX3MuZ2V0X2FsbG9jYXRvcigpKTsNCiAgICAgICAg ICBiYXNpY19zdHJpbmcgX190bXAyKF9fcy5fTV9pYmVnaW4oKSwgX19zLl9NX2llbmQoKSwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPmdldF9hbGxvY2F0b3IoKSk7DQogICAg ICAgICAgKnRoaXMgPSBfX3RtcDI7DQogICAgICAgICAgX19zID0gX190bXAxOw0KICAgICAgICB9 DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg dHlwZW5hbWUgX0FsbG9jPg0KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz46Ol9SZXAqDQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPjo6X1JlcDo6DQogICAgX1NfY3JlYXRlKHNpemVfdCBfX2NhcGFjaXR5LCBjb25zdCBfQWxs b2MmIF9fYWxsb2MpDQogICAgew0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7DQoNCg0KICAgICAgaWYgKF9fY2FwYWNpdHkg PiBfU19tYXhfc2l6ZSkNCg0KDQoNCiAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2lj X3N0cmluZzo6X1NfY3JlYXRlIik7DQoNCg0KDQoNCiAgICAgIHNpemVfdCBfX3NpemUgPSAoX19j YXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2YoX1JlcCk7DQojIDQyMSAidDov bXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcudGNjIiAzDQog ICAgICBjb25zdCBzaXplX3QgX19wYWdlc2l6ZSA9IDQwOTY7DQogICAgICBjb25zdCBzaXplX3Qg X19zdWJwYWdlc2l6ZSA9IDEyODsNCiAgICAgIGNvbnN0IHNpemVfdCBfX21hbGxvY19oZWFkZXJf c2l6ZSA9IDQgKiBzaXplb2YgKHZvaWQqKTsNCiAgICAgIGlmICgoX19zaXplICsgX19tYWxsb2Nf aGVhZGVyX3NpemUpID4gX19wYWdlc2l6ZSkNCiAgICAgICAgew0KICAgICAgICAgIHNpemVfdCBf X2V4dHJhID0NCiAgICAgICAgICAgIChfX3BhZ2VzaXplIC0gKChfX3NpemUgKyBfX21hbGxvY19o ZWFkZXJfc2l6ZSkgJSBfX3BhZ2VzaXplKSkNCiAgICAgICAgICAgICUgX19wYWdlc2l6ZTsNCiAg ICAgICAgICBfX2NhcGFjaXR5ICs9IF9fZXh0cmEgLyBzaXplb2YoX0NoYXJUKTsNCiAgICAgICAg ICBfX3NpemUgPSAoX19jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2YoX1Jl cCk7DQogICAgICAgIH0NCiAgICAgIGVsc2UgaWYgKF9fc2l6ZSA+IF9fc3VicGFnZXNpemUpDQog ICAgICAgIHsNCiAgICAgICAgICBzaXplX3QgX19leHRyYSA9DQogICAgICAgICAgICAoX19zdWJw YWdlc2l6ZSAtICgoX19zaXplICsgX19tYWxsb2NfaGVhZGVyX3NpemUpICUgX19zdWJwYWdlc2l6 ZSkpDQogICAgICAgICAgICAlIF9fc3VicGFnZXNpemU7DQogICAgICAgICAgX19jYXBhY2l0eSAr PSBfX2V4dHJhIC8gc2l6ZW9mKF9DaGFyVCk7DQogICAgICAgICAgX19zaXplID0gKF9fY2FwYWNp dHkgKyAxKSAqIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKF9SZXApOw0KICAgICAgICB9DQoNCg0K DQogICAgICB2b2lkKiBfX3BsYWNlID0gX1Jhd19ieXRlc19hbGxvYyhfX2FsbG9jKS5hbGxvY2F0 ZShfX3NpemUpOw0KICAgICAgX1JlcCAqX19wID0gbmV3IChfX3BsYWNlKSBfUmVwOw0KICAgICAg X19wLT5fTV9jYXBhY2l0eSA9IF9fY2FwYWNpdHk7DQogICAgICBfX3AtPl9NX3NldF9zaGFyYWJs ZSgpOw0KICAgICAgX19wLT5fTV9sZW5ndGggPSAwOw0KICAgICAgcmV0dXJuIF9fcDsNCiAgICB9 DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+DQogICAgX0NoYXJUKg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz46Ol9SZXA6Og0KICAgIF9NX2Nsb25lKGNvbnN0IF9BbGxvYyYgX19hbGxvYywgc2l6 ZV90eXBlIF9fcmVzKQ0KICAgIHsNCg0KICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcmVxdWVzdGVk X2NhcCA9IF9NX2xlbmd0aCArIF9fcmVzOw0KDQogICAgICBjb25zdCBzaXplX3R5cGUgX19wYWdl c2l6ZSA9IDQwOTY7DQogICAgICBjb25zdCBzaXplX3R5cGUgX19tYWxsb2NfaGVhZGVyX3NpemUg PSA0ICogc2l6ZW9mICh2b2lkKik7DQoNCiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VfY2Fw YWNpdHkgPQ0KICAgICAgICAoX19wYWdlc2l6ZSAtIF9fbWFsbG9jX2hlYWRlcl9zaXplIC0gc2l6 ZW9mKF9SZXApIC0gc2l6ZW9mKF9DaGFyVCkpDQogICAgICAgIC8gc2l6ZW9mKF9DaGFyVCk7DQog ICAgICBfUmVwKiBfX3I7DQogICAgICBpZiAoX19yZXF1ZXN0ZWRfY2FwID4gX01fY2FwYWNpdHkg JiYgX19yZXF1ZXN0ZWRfY2FwID4gX19wYWdlX2NhcGFjaXR5KQ0KDQogICAgICAgIF9fciA9IF9S ZXA6Ol9TX2NyZWF0ZShfX3JlcXVlc3RlZF9jYXAgPiAyKl9NX2NhcGFjaXR5ID8NCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fcmVxdWVzdGVkX2NhcCA6IDIqX01fY2FwYWNpdHksIF9f YWxsb2MpOw0KICAgICAgZWxzZQ0KICAgICAgICBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19yZXF1 ZXN0ZWRfY2FwLCBfX2FsbG9jKTsNCg0KICAgICAgaWYgKF9NX2xlbmd0aCkNCiAgICAgICAgew0K ICAgICAgICAgIGlmICh0cnVlKQ0KICAgICAgICAgICAgeyB0cmFpdHNfdHlwZTo6Y29weShfX3It Pl9NX3JlZmRhdGEoKSwgX01fcmVmZGF0YSgpLCBfTV9sZW5ndGgpOyB9DQogICAgICAgICAgaWYg KGZhbHNlKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19h bGxvYyk7DQogICAgICAgICAgICAgIDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAg X19yLT5fTV9sZW5ndGggPSBfTV9sZW5ndGg7DQogICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRh KCk7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIHZvaWQNCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+OjpyZXNpemUoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykNCiAgICB7 DQogICAgICBpZiAoX19uID4gbWF4X3NpemUoKSkNCiAgICAgICAgX190aHJvd19sZW5ndGhfZXJy b3IoImJhc2ljX3N0cmluZzo6cmVzaXplIik7DQogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhp cy0+c2l6ZSgpOw0KICAgICAgaWYgKF9fc2l6ZSA8IF9fbikNCiAgICAgICAgdGhpcy0+YXBwZW5k KF9fbiAtIF9fc2l6ZSwgX19jKTsNCiAgICAgIGVsc2UgaWYgKF9fbiA8IF9fc2l6ZSkNCiAgICAg ICAgdGhpcy0+ZXJhc2UoX19uKTsNCg0KICAgIH0NCiMgNTA4ICJ0Oi9tc3lzLzEuMC9taW5ndy9p bmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDMNCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgdGVtcGxh dGU8dHlwZW5hbWUgX0lucHV0SXRlcj4NCiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz4mDQogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ OjoNCiAgICAgIF9NX3JlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0lucHV0 SXRlciBfX2sxLA0KICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9fazIsIGlucHV0X2l0ZXJh dG9yX3RhZykNCiAgICAgIHsNCg0KICAgICAgICBiYXNpY19zdHJpbmcgX19zKF9fazEsIF9fazIp Ow0KICAgICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9faTEsIF9faTIsIF9fcy5fTV9pYmVn aW4oKSwgX19zLl9NX2llbmQoKSk7DQogICAgICB9DQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIHRl bXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4NCiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz4mDQogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+OjoNCiAgICAgIF9NX3JlcGxhY2Vfc2FmZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBf X2kyLCBfRm9yd2FyZEl0ZXIgX19rMSwNCiAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0 ZXIgX19rMikNCiAgICAgIHsNCiAgICAgICAgc2l6ZV90eXBlIF9fZG5ldyA9IHN0YXRpY19jYXN0 PHNpemVfdHlwZT4oZGlzdGFuY2UoX19rMSwgX19rMikpOw0KICAgICAgICBzaXplX3R5cGUgX19k b2xkID0gX19pMiAtIF9faTE7DQogICAgICAgIHNpemVfdHlwZSBfX2RtYXggPSB0aGlzLT5tYXhf c2l6ZSgpOw0KDQogICAgICAgIGlmIChfX2RtYXggPD0gX19kbmV3KQ0KICAgICAgICAgIF9fdGhy b3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6Ol9NX3JlcGxhY2UiKTsNCiAgICAgICAgc2l6 ZV90eXBlIF9fb2ZmID0gX19pMSAtIF9NX2liZWdpbigpOw0KICAgICAgICBfTV9tdXRhdGUoX19v ZmYsIF9fZG9sZCwgX19kbmV3KTsNCg0KDQogICAgICAgIGlmIChfX2RuZXcpDQogICAgICAgICAg X1NfY29weV9jaGFycyhfTV9kYXRhKCkgKyBfX29mZiwgX19rMSwgX19rMik7DQoNCiAgICAgICAg cmV0dXJuICp0aGlzOw0KICAgICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz4mDQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPjo6DQogICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29u c3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwNCiAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNp emVfdHlwZSBfX24yKQ0KICAgIHsNCiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3N0cnNpemUgPSBf X3N0ci5zaXplKCk7DQogICAgICBpZiAoX19wb3MyID4gX19zdHJzaXplKQ0KICAgICAgICBfX3Ro cm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpyZXBsYWNlIik7DQogICAgICBjb25zdCBi b29sIF9fdGVzdG4yID0gX19uMiA8IF9fc3Ryc2l6ZSAtIF9fcG9zMjsNCiAgICAgIGNvbnN0IHNp emVfdHlwZSBfX2ZvbGRuMiA9IF9fdGVzdG4yID8gX19uMiA6IF9fc3Ryc2l6ZSAtIF9fcG9zMjsN CiAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9fcG9zMSwgX19uMSwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fc3RyLl9NX2RhdGEoKSArIF9fcG9zMiwgX19mb2xkbjIpOw0KICAgIH0N Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l IF9BbGxvYz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Jg0KICAg IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIGFwcGVuZChjb25z dCBiYXNpY19zdHJpbmcmIF9fc3RyKQ0KICAgIHsNCg0KDQoNCiAgICAgIHNpemVfdHlwZSBfX3Np emUgPSBfX3N0ci5zaXplKCk7DQogICAgICBzaXplX3R5cGUgX19sZW4gPSBfX3NpemUgKyB0aGlz LT5zaXplKCk7DQogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQ0KICAgICAgICB0 aGlzLT5yZXNlcnZlKF9fbGVuKTsNCiAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWVu ZCgpLCBfTV9pZW5kKCksIF9fc3RyLl9NX2liZWdpbigpLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX3N0ci5fTV9pZW5kKCkpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Jg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz46Og0KICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBz aXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pDQogICAgew0KDQoNCg0KICAgICAgc2l6ZV90 eXBlIF9fbGVuID0gbWluKF9fc3RyLnNpemUoKSAtIF9fcG9zLCBfX24pICsgdGhpcy0+c2l6ZSgp Ow0KICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkNCiAgICAgICAgdGhpcy0+cmVz ZXJ2ZShfX2xlbik7DQogICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2llbmQoKSwgX01f aWVuZCgpLCBfX3N0ci5fTV9jaGVjayhfX3BvcyksDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbikpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Jg0KICAgIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcywgc2l6 ZV90eXBlIF9fbikNCiAgICB7DQogICAgICBzaXplX3R5cGUgX19sZW4gPSBfX24gKyB0aGlzLT5z aXplKCk7DQogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQ0KICAgICAgICB0aGlz LT5yZXNlcnZlKF9fbGVuKTsNCiAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWVuZCgp LCBfTV9pZW5kKCksIF9fcywgX19zICsgX19uKTsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYNCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBhcHBlbmQoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9f YykNCiAgICB7DQogICAgICBzaXplX3R5cGUgX19sZW4gPSBfX24gKyB0aGlzLT5zaXplKCk7DQog ICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQ0KICAgICAgICB0aGlzLT5yZXNlcnZl KF9fbGVuKTsNCiAgICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQo KSwgX19uLCBfX2MpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+DQogICAgb3BlcmF0b3IrKGNvbnN0IF9DaGFyVCogX19saHMsDQogICAg ICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f cmhzKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPiBfX3N0cmluZ190eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190 eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7DQogICAgICBfX3NpemVfdHlwZSBfX2xlbiA9IF9U cmFpdHM6Omxlbmd0aChfX2xocyk7DQogICAgICBfX3N0cmluZ190eXBlIF9fc3RyOw0KICAgICAg X19zdHIucmVzZXJ2ZShfX2xlbiArIF9fcmhzLnNpemUoKSk7DQogICAgICBfX3N0ci5hcHBlbmQo X19saHMsIF9fbGhzICsgX19sZW4pOw0KICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsNCiAgICAg IHJldHVybiBfX3N0cjsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPg0KICAgIG9wZXJhdG9yKyhfQ2hhclQgX19saHMsIGNvbnN0IGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQ0KICAgIHsNCiAgICAgIHR5 cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBl Ow0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXpl X3R5cGU7DQogICAgICBfX3N0cmluZ190eXBlIF9fc3RyOw0KICAgICAgX19zaXplX3R5cGUgX19s ZW4gPSBfX3Jocy5zaXplKCk7DQogICAgICBfX3N0ci5yZXNlcnZlKF9fbGVuICsgMSk7DQogICAg ICBfX3N0ci5hcHBlbmQoX19zaXplX3R5cGUoMSksIF9fbGhzKTsNCiAgICAgIF9fc3RyLmFwcGVu ZChfX3Jocyk7DQogICAgICByZXR1cm4gX19zdHI7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mDQogICAgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRv ciBfX2kyLCBzaXplX3R5cGUgX19uMiwgX0NoYXJUIF9fYykNCiAgICB7DQogICAgICBzaXplX3R5 cGUgX19uMSA9IF9faTIgLSBfX2kxOw0KICAgICAgc2l6ZV90eXBlIF9fb2ZmMSA9IF9faTEgLSBf TV9pYmVnaW4oKTsNCiAgICAgIGlmIChtYXhfc2l6ZSgpIC0gKHRoaXMtPnNpemUoKSAtIF9fbjEp IDw9IF9fbjIpDQogICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OnJl cGxhY2UiKTsNCiAgICAgIF9NX211dGF0ZSAoX19vZmYxLCBfX24xLCBfX24yKTsNCg0KICAgICAg aWYgKF9fbjIpDQogICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oX01fZGF0YSgpICsgX19vZmYx LCBfX24yLCBfX2MpOw0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICB0 eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUN CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBjb3B5KF9D aGFyVCogX19zLCBzaXplX3R5cGUgX19uLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0DQogICAgew0K ICAgICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQ0KICAgICAgICBfX3Rocm93X291dF9vZl9y YW5nZSgiYmFzaWNfc3RyaW5nOjpjb3B5Iik7DQoNCiAgICAgIGlmIChfX24gPiB0aGlzLT5zaXpl KCkgLSBfX3BvcykNCiAgICAgICAgX19uID0gdGhpcy0+c2l6ZSgpIC0gX19wb3M7DQoNCiAgICAg IHRyYWl0c190eXBlOjpjb3B5KF9fcywgX01fZGF0YSgpICsgX19wb3MsIF9fbik7DQoNCiAgICAg IHJldHVybiBfX247DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQ0KICAgIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIGZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVf dHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QNCiAgICB7DQogICAgICBzaXplX3R5cGUg X19zaXplID0gdGhpcy0+c2l6ZSgpOw0KICAgICAgc2l6ZV90IF9feHBvcyA9IF9fcG9zOw0KICAg ICAgY29uc3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7DQogICAgICBmb3IgKDsgX194cG9z ICsgX19uIDw9IF9fc2l6ZTsgKytfX3hwb3MpDQogICAgICAgIGlmICh0cmFpdHNfdHlwZTo6Y29t cGFyZShfX2RhdGEgKyBfX3hwb3MsIF9fcywgX19uKSA9PSAwKQ0KICAgICAgICAgIHJldHVybiBf X3hwb3M7DQogICAgICByZXR1cm4gbnBvczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgdHlwZW5hbWUg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlDQogICAgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgZmluZChfQ2hhclQgX19j LCBzaXplX3R5cGUgX19wb3MpIGNvbnN0DQogICAgew0KICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9 IHRoaXMtPnNpemUoKTsNCiAgICAgIHNpemVfdHlwZSBfX3JldCA9IG5wb3M7DQogICAgICBpZiAo X19wb3MgPCBfX3NpemUpDQogICAgICAgIHsNCiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fZGF0 YSA9IF9NX2RhdGEoKTsNCiAgICAgICAgICBzaXplX3R5cGUgX19uID0gX19zaXplIC0gX19wb3M7 DQogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3AgPSB0cmFpdHNfdHlwZTo6ZmluZChfX2RhdGEg KyBfX3BvcywgX19uLCBfX2MpOw0KICAgICAgICAgIGlmIChfX3ApDQogICAgICAgICAgICBfX3Jl dCA9IF9fcCAtIF9fZGF0YTsNCiAgICAgICAgfQ0KICAgICAgcmV0dXJuIF9fcmV0Ow0KICAgIH0N Cg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h bWUgX0FsbG9jPg0KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz46OnNpemVfdHlwZQ0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz46Og0KICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVf dHlwZSBfX24pIGNvbnN0DQogICAgew0KICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNp emUoKTsNCiAgICAgIGlmIChfX24gPD0gX19zaXplKQ0KICAgICAgICB7DQogICAgICAgICAgX19w b3MgPSBzdGQ6Om1pbihfX3NpemUgLSBfX24sIF9fcG9zKTsNCiAgICAgICAgICBjb25zdCBfQ2hh clQqIF9fZGF0YSA9IF9NX2RhdGEoKTsNCiAgICAgICAgICBkbw0KICAgICAgICAgICAgew0KICAg ICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmNvbXBhcmUoX19kYXRhICsgX19wb3MsIF9fcywg X19uKSA9PSAwKQ0KICAgICAgICAgICAgICAgIHJldHVybiBfX3BvczsNCiAgICAgICAgICAgIH0N CiAgICAgICAgICB3aGlsZSAoX19wb3MtLSA+IDApOw0KICAgICAgICB9DQogICAgICByZXR1cm4g bnBvczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlDQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPjo6DQogICAgcmZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBj b25zdA0KICAgIHsNCiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7DQogICAg ICBpZiAoX19zaXplKQ0KICAgICAgICB7DQogICAgICAgICAgc2l6ZV90IF9feHBvcyA9IF9fc2l6 ZSAtIDE7DQogICAgICAgICAgaWYgKF9feHBvcyA+IF9fcG9zKQ0KICAgICAgICAgICAgX194cG9z ID0gX19wb3M7DQoNCiAgICAgICAgICBmb3IgKCsrX194cG9zOyBfX3hwb3MtLSA+IDA7ICkNCiAg ICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgpW19feHBvc10sIF9fYykpDQog ICAgICAgICAgICAgIHJldHVybiBfX3hwb3M7DQogICAgICAgIH0NCiAgICAgIHJldHVybiBucG9z Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs IHR5cGVuYW1lIF9BbGxvYz4NCiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+OjpzaXplX3R5cGUNCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+OjoNCiAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5 cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0DQogICAgew0KICAgICAgZm9yICg7IF9fbiAm JiBfX3BvcyA8IHRoaXMtPnNpemUoKTsgKytfX3BvcykNCiAgICAgICAgew0KICAgICAgICAgIGNv bnN0IF9DaGFyVCogX19wID0gdHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtf X3Bvc10pOw0KICAgICAgICAgIGlmIChfX3ApDQogICAgICAgICAgICByZXR1cm4gX19wb3M7DQog ICAgICAgIH0NCiAgICAgIHJldHVybiBucG9zOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICB0eXBlbmFt ZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUNCiAgICBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBmaW5kX2xhc3Rfb2Yo Y29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QN CiAgICB7DQogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOw0KICAgICAgaWYg KF9fc2l6ZSAmJiBfX24pDQogICAgICAgIHsNCiAgICAgICAgICBpZiAoLS1fX3NpemUgPiBfX3Bv cykNCiAgICAgICAgICAgIF9fc2l6ZSA9IF9fcG9zOw0KICAgICAgICAgIGRvDQogICAgICAgICAg ICB7DQogICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0 YSgpW19fc2l6ZV0pKQ0KICAgICAgICAgICAgICAgIHJldHVybiBfX3NpemU7DQogICAgICAgICAg ICB9DQogICAgICAgICAgd2hpbGUgKF9fc2l6ZS0tICE9IDApOw0KICAgICAgICB9DQogICAgICBy ZXR1cm4gbnBvczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlDQogICAgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJU KiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QNCiAgICB7DQogICAg ICBzaXplX3QgX194cG9zID0gX19wb3M7DQogICAgICBmb3IgKDsgX194cG9zIDwgdGhpcy0+c2l6 ZSgpOyArK19feHBvcykNCiAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwg X01fZGF0YSgpW19feHBvc10pKQ0KICAgICAgICAgIHJldHVybiBfX3hwb3M7DQogICAgICByZXR1 cm4gbnBvczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlDQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPjo6DQogICAgZmluZF9maXJzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6 ZV90eXBlIF9fcG9zKSBjb25zdA0KICAgIHsNCiAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3BvczsN CiAgICAgIGZvciAoOyBfX3hwb3MgPCB0aGlzLT5zaXplKCk7ICsrX194cG9zKQ0KICAgICAgICBp ZiAoIXRyYWl0c190eXBlOjplcShfTV9kYXRhKClbX194cG9zXSwgX19jKSkNCiAgICAgICAgICBy ZXR1cm4gX194cG9zOw0KICAgICAgcmV0dXJuIG5wb3M7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIHR5 cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQ0K ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIGZpbmRfbGFz dF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9f bikgY29uc3QNCiAgICB7DQogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOw0K ICAgICAgaWYgKF9fc2l6ZSkNCiAgICAgICAgew0KICAgICAgICAgIGlmICgtLV9fc2l6ZSA+IF9f cG9zKQ0KICAgICAgICAgICAgX19zaXplID0gX19wb3M7DQogICAgICAgICAgZG8NCiAgICAgICAg ICAgIHsNCiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgX01f ZGF0YSgpW19fc2l6ZV0pKQ0KICAgICAgICAgICAgICAgIHJldHVybiBfX3NpemU7DQogICAgICAg ICAgICB9DQogICAgICAgICAgd2hpbGUgKF9fc2l6ZS0tKTsNCiAgICAgICAgfQ0KICAgICAgcmV0 dXJuIG5wb3M7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQ0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIGZpbmRfbGFzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6 ZV90eXBlIF9fcG9zKSBjb25zdA0KICAgIHsNCiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlz LT5zaXplKCk7DQogICAgICBpZiAoX19zaXplKQ0KICAgICAgICB7DQogICAgICAgICAgaWYgKC0t X19zaXplID4gX19wb3MpDQogICAgICAgICAgICBfX3NpemUgPSBfX3BvczsNCiAgICAgICAgICBk bw0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcShfTV9k YXRhKClbX19zaXplXSwgX19jKSkNCiAgICAgICAgICAgICAgICByZXR1cm4gX19zaXplOw0KICAg ICAgICAgICAgfQ0KICAgICAgICAgIHdoaWxlIChfX3NpemUtLSk7DQogICAgICAgIH0NCiAgICAg IHJldHVybiBucG9zOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbnQNCiAgICBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywg c2l6ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgY29uc3QNCiAgICB7DQog ICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOw0KICAgICAgc2l6ZV90eXBlIF9f b3NpemUgPSBfX3N0ci5zaXplKCk7DQogICAgICBpZiAoX19wb3MgPiBfX3NpemUpDQogICAgICAg IF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsNCg0KICAgICAg c2l6ZV90eXBlIF9fcnNpemU9IG1pbihfX3NpemUgLSBfX3BvcywgX19uKTsNCiAgICAgIHNpemVf dHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX29zaXplKTsNCiAgICAgIGludCBfX3IgPSB0cmFp dHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvcywgX19zdHIuZGF0YSgpLCBfX2xlbik7 DQogICAgICBpZiAoIV9fcikNCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9fb3NpemU7DQogICAg ICByZXR1cm4gX19yOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbnQNCiAgICBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBjb21wYXJlKHNpemVfdHlwZSBfX3BvczEs IHNpemVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLA0KICAgICAgICAgICAg c2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpIGNvbnN0DQogICAgew0KICAgICAgc2l6 ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsNCiAgICAgIHNpemVfdHlwZSBfX29zaXplID0g X19zdHIuc2l6ZSgpOw0KICAgICAgaWYgKF9fcG9zMSA+IF9fc2l6ZSB8fCBfX3BvczIgPiBfX29z aXplKQ0KICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJl Iik7DQoNCiAgICAgIHNpemVfdHlwZSBfX3JzaXplID0gbWluKF9fc2l6ZSAtIF9fcG9zMSwgX19u MSk7DQogICAgICBzaXplX3R5cGUgX19yb3NpemUgPSBtaW4oX19vc2l6ZSAtIF9fcG9zMiwgX19u Mik7DQogICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19yc2l6ZSwgX19yb3NpemUpOw0KICAg ICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zMSwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5kYXRhKCkgKyBfX3BvczIs IF9fbGVuKTsNCiAgICAgIGlmICghX19yKQ0KICAgICAgICBfX3IgPSBfX3JzaXplIC0gX19yb3Np emU7DQogICAgICByZXR1cm4gX19yOw0KICAgIH0NCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGludA0KICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIGNvbXBhcmUoY29uc3Qg X0NoYXJUKiBfX3MpIGNvbnN0DQogICAgew0KICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMt PnNpemUoKTsNCiAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCks IF9fcywgX19zaXplKTsNCiAgICAgIGlmICghX19yKQ0KICAgICAgICBfX3IgPSBfX3NpemUgLSB0 cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyk7DQogICAgICByZXR1cm4gX19yOw0KICAgIH0NCg0KDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs bG9jPg0KICAgIGludA0KICAgIGJhc2ljX3N0cmluZyA8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ OjoNCiAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9D aGFyVCogX19zKSBjb25zdA0KICAgIHsNCiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5z aXplKCk7DQogICAgICBpZiAoX19wb3MgPiBfX3NpemUpDQogICAgICAgIF9fdGhyb3dfb3V0X29m X3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsNCg0KICAgICAgc2l6ZV90eXBlIF9fb3Np emUgPSB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyk7DQogICAgICBzaXplX3R5cGUgX19yc2l6ZSA9 IG1pbihfX3NpemUgLSBfX3BvcywgX19uMSk7DQogICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4o X19yc2l6ZSwgX19vc2l6ZSk7DQogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUo X01fZGF0YSgpICsgX19wb3MsIF9fcywgX19sZW4pOw0KICAgICAgaWYgKCFfX3IpDQogICAgICAg IF9fciA9IF9fcnNpemUgLSBfX29zaXplOw0KICAgICAgcmV0dXJuIF9fcjsNCiAgICB9DQoNCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs b2M+DQogICAgaW50DQogICAgYmFzaWNfc3RyaW5nIDxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46 Og0KICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0No YXJUKiBfX3MsDQogICAgICAgICAgICBzaXplX3R5cGUgX19uMikgY29uc3QNCiAgICB7DQogICAg ICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOw0KICAgICAgaWYgKF9fcG9zID4gX19z aXplKQ0KICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJl Iik7DQoNCiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gbWluKHRyYWl0c190eXBlOjpsZW5ndGgo X19zKSwgX19uMik7DQogICAgICBzaXplX3R5cGUgX19yc2l6ZSA9IG1pbihfX3NpemUgLSBfX3Bv cywgX19uMSk7DQogICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19yc2l6ZSwgX19vc2l6ZSk7 DQogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3Ms IF9fcywgX19sZW4pOw0KICAgICAgaWYgKCFfX3IpDQogICAgICAgIF9fciA9IF9fcnNpemUgLSBf X29zaXplOw0KICAgICAgcmV0dXJuIF9fcjsNCiAgICB9DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9D aGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPg0KICAgIHZvaWQNCiAgICBfU19zdHJp bmdfY29weShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0 ciwNCiAgICAgICAgICAgICAgICAgICBfQ2hhclQqIF9fYnVmLCB0eXBlbmFtZSBfQWxsb2M6OnNp emVfdHlwZSBfX2J1ZnNpeikNCiAgICB7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6 c2l6ZV90eXBlIHNpemVfdHlwZTsNCiAgICAgIHNpemVfdHlwZSBfX3N0cnNpemUgPSBfX3N0ci5z aXplKCk7DQogICAgICBzaXplX3R5cGUgX19ieXRlcyA9IG1pbihfX3N0cnNpemUsIF9fYnVmc2l6 IC0gMSk7DQogICAgICBfVHJhaXRzOjpjb3B5KF9fYnVmLCBfX3N0ci5kYXRhKCksIF9fYnl0ZXMp Ow0KICAgICAgX19idWZbX19ieXRlc10gPSBfQ2hhclQoKTsNCiAgICB9DQoNCg0KDQoNCiAgZXh0 ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX3N0cmluZzxjaGFyPjsNCiAgZXh0ZXJuIHRlbXBsYXRl DQogICAgYmFzaWNfaXN0cmVhbTxjaGFyPiYNCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08 Y2hhcj4mLCBzdHJpbmcmKTsNCiAgZXh0ZXJuIHRlbXBsYXRlDQogICAgYmFzaWNfb3N0cmVhbTxj aGFyPiYNCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhcj4mLCBjb25zdCBzdHJpbmcm KTsNCiAgZXh0ZXJuIHRlbXBsYXRlDQogICAgYmFzaWNfaXN0cmVhbTxjaGFyPiYNCiAgICBnZXRs aW5lKGJhc2ljX2lzdHJlYW08Y2hhcj4mLCBzdHJpbmcmLCBjaGFyKTsNCiAgZXh0ZXJuIHRlbXBs YXRlDQogICAgYmFzaWNfaXN0cmVhbTxjaGFyPiYNCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08 Y2hhcj4mLCBzdHJpbmcmKTsNCg0KICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyaW5n PHdjaGFyX3Q+Ow0KICBleHRlcm4gdGVtcGxhdGUNCiAgICBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+ Jg0KICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYsIHdzdHJpbmcmKTsNCiAg ZXh0ZXJuIHRlbXBsYXRlDQogICAgYmFzaWNfb3N0cmVhbTx3Y2hhcl90PiYNCiAgICBvcGVyYXRv cjw8KGJhc2ljX29zdHJlYW08d2NoYXJfdD4mLCBjb25zdCB3c3RyaW5nJik7DQogIGV4dGVybiB0 ZW1wbGF0ZQ0KICAgIGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mDQogICAgZ2V0bGluZShiYXNpY19p c3RyZWFtPHdjaGFyX3Q+Jiwgd3N0cmluZyYsIHdjaGFyX3QpOw0KICBleHRlcm4gdGVtcGxhdGUN CiAgICBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+Jg0KICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTx3 Y2hhcl90PiYsIHdzdHJpbmcmKTsNCn0NCiMgNTggInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUv ZysrLXYzL3N0cmluZyIgMiAzDQojIDUwICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12 My9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMNCiMgMSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9n KystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMNCiMgMzQgInQ6L21zeXMvMS4wL21pbmd3L2lu Y2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMw0KIyAxICJ0Oi9tc3lzLzEuMC9taW5n dy9pbmNsdWRlL2crKy12My9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMNCiMgMzUgInQ6L21zeXMv MS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMiAzDQoNCm5hbWVz cGFjZSBzdGQNCnsNCg0KICB2b2lkDQogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsNCg0K DQogIHZvaWQNCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7DQoNCg0KICB2b2lkDQogIF9fdGhy b3dfYmFkX2Nhc3Qodm9pZCk7DQoNCiAgdm9pZA0KICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7 DQoNCg0KICB2b2lkDQogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0K ICB2b2lkDQogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9p ZA0KICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lk DQogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBf X3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJv d19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X3Jh bmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X292ZXJmbG93 X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X3VuZGVyZmxvd19l cnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQoNCiAgdm9pZA0KICBfX3Rocm93X2lvc19mYWlsdXJl KGNvbnN0IGNoYXIqIF9fcyk7DQp9DQojIDUxICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2cr Ky12My9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMNCg0KDQpuYW1lc3BhY2Ugc3RkDQp7DQoNCiAgY2xh c3MgbG9jYWxlOw0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBi b29sDQogICAgaXNzcGFjZShfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOw0KDQogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVD4NCiAgICBpbmxpbmUgYm9vbA0KICAgIGlzcHJpbnQoX0NoYXJULCBjb25z dCBsb2NhbGUmKTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW5saW5lIGJv b2wNCiAgICBpc2NudHJsKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7DQoNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29sDQogICAgaXN1cHBlcihfQ2hhclQsIGNvbnN0 IGxvY2FsZSYpOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBpbmxpbmUgYm9v bA0KICAgIGlzbG93ZXIoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsNCg0KICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQ+DQogICAgaW5saW5lIGJvb2wNCiAgICBpc2FscGhhKF9DaGFyVCwgY29uc3Qg bG9jYWxlJik7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29s DQogICAgaXNkaWdpdChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOw0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVD4NCiAgICBpbmxpbmUgYm9vbA0KICAgIGlzcHVuY3QoX0NoYXJULCBjb25zdCBs b2NhbGUmKTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW5saW5lIGJvb2wN CiAgICBpc3hkaWdpdChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOw0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVD4NCiAgICBpbmxpbmUgYm9vbA0KICAgIGlzYWxudW0oX0NoYXJULCBjb25zdCBs b2NhbGUmKTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW5saW5lIGJvb2wN CiAgICBpc2dyYXBoKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7DQoNCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJUPg0KICAgIGlubGluZSBfQ2hhclQNCiAgICB0b3VwcGVyKF9DaGFyVCwgY29uc3Qg bG9jYWxlJik7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBfQ2hh clQNCiAgICB0b2xvd2VyKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7DQoNCg0KDQogIGNsYXNzIGN0 eXBlX2Jhc2U7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBjbGFzcyBjdHlwZTsN CiAgdGVtcGxhdGU8PiBjbGFzcyBjdHlwZTxjaGFyPjsNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJUPg0KICAgIGNsYXNzIGN0eXBlX2J5bmFtZTsNCg0KDQogIGNsYXNzIGNvZGVjdnRf YmFzZTsNCiAgY2xhc3MgX19lbmNfdHJhaXRzOw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJu VCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+DQogICAgY2xhc3MgY29kZWN2 dDsNCiAgdGVtcGxhdGU8PiBjbGFzcyBjb2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD47DQoN Cg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlw ZW5hbWUgX1N0YXRlVD4NCiAgICBjbGFzcyBjb2RlY3Z0X2J5bmFtZTsNCg0KDQogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8 X0NoYXJUPiA+DQogICAgY2xhc3MgbnVtX2dldDsNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+DQogICAg Y2xhc3MgbnVtX3B1dDsNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPiBjbGFzcyBudW1wdW5j dDsNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPiBjbGFzcyBudW1wdW5jdF9ieW5hbWU7DQoN Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgY2xhc3MgY29sbGF0ZTsNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJUPiBjbGFzcw0KICAgIGNvbGxhdGVfYnluYW1lOw0KDQoNCiAg Y2xhc3MgdGltZV9iYXNlOw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9J bkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPg0KICAgIGNsYXNzIHRpbWVfZ2V0 Ow0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFt YnVmX2l0ZXJhdG9yPF9DaGFyVD4gPg0KICAgIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZTsNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRl cmF0b3I8X0NoYXJUPiA+DQogICAgY2xhc3MgdGltZV9wdXQ7DQogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4g Pg0KICAgIGNsYXNzIHRpbWVfcHV0X2J5bmFtZTsNCg0KDQogIGNsYXNzIG1vbmV5X2Jhc2U7DQog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZf aXRlcmF0b3I8X0NoYXJUPiA+DQogICAgY2xhc3MgbW9uZXlfZ2V0Ow0KICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hh clQ+ID4NCiAgICBjbGFzcyBtb25leV9wdXQ7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg Ym9vbCBfSW50bCA9IGZhbHNlPg0KICAgIGNsYXNzIG1vbmV5cHVuY3Q7DQogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bCA9IGZhbHNlPg0KICAgIGNsYXNzIG1vbmV5cHVuY3Rf YnluYW1lOw0KDQoNCiAgY2xhc3MgbWVzc2FnZXNfYmFzZTsNCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJUPg0KICAgIGNsYXNzIG1lc3NhZ2VzOw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+ DQogICAgY2xhc3MgbWVzc2FnZXNfYnluYW1lOw0KDQoNCiAgY2xhc3MgbG9jYWxlDQogIHsNCiAg cHVibGljOg0KDQogICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgY2F0ZWdvcnk7DQoNCg0KICAgIGNs YXNzIGZhY2V0Ow0KICAgIGNsYXNzIGlkOw0KICAgIGNsYXNzIF9JbXBsOw0KDQogICAgZnJpZW5k IGNsYXNzIGZhY2V0Ow0KICAgIGZyaWVuZCBjbGFzcyBfSW1wbDsNCg0KICAgIHRlbXBsYXRlPHR5 cGVuYW1lIF9GYWNldD4NCiAgICAgIGZyaWVuZCBjb25zdCBfRmFjZXQmDQogICAgICB1c2VfZmFj ZXQoY29uc3QgbG9jYWxlJik7DQoNCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+DQogICAg ICBmcmllbmQgYm9vbA0KICAgICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYpIHRocm93KCk7DQoN Cg0KDQogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG5vbmUgPSAwOw0KICAgIHN0YXRpYyBjb25z dCBjYXRlZ29yeSBjdHlwZSA9IDFMIDw8IDA7DQogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG51 bWVyaWMgPSAxTCA8PCAxOw0KICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBjb2xsYXRlID0gMUwg PDwgMjsNCiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgdGltZSA9IDFMIDw8IDM7DQogICAgc3Rh dGljIGNvbnN0IGNhdGVnb3J5IG1vbmV0YXJ5ID0gMUwgPDwgNDsNCiAgICBzdGF0aWMgY29uc3Qg Y2F0ZWdvcnkgbWVzc2FnZXMgPSAxTCA8PCA1Ow0KICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBh bGwgPSAoY29sbGF0ZSB8IGN0eXBlIHwgbW9uZXRhcnkgfA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG51bWVyaWMgfCB0aW1lIHwgbWVzc2FnZXMpOw0KDQoNCiAg ICBsb2NhbGUoKSB0aHJvdygpOw0KDQogICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19vdGhlcikg dGhyb3coKTsNCg0KICAgIGV4cGxpY2l0DQogICAgbG9jYWxlKGNvbnN0IGNoYXIqIF9fcyk7DQoN CiAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX2Jhc2UsIGNvbnN0IGNoYXIqIF9fcywgY2F0ZWdv cnkgX19jYXQpOw0KDQogICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19iYXNlLCBjb25zdCBsb2Nh bGUmIF9fYWRkLCBjYXRlZ29yeSBfX2NhdCk7DQoNCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFj ZXQ+DQogICAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVyLCBfRmFjZXQqIF9fZik7DQoN CiAgICB+bG9jYWxlKCkgdGhyb3coKTsNCg0KICAgIGNvbnN0IGxvY2FsZSYNCiAgICBvcGVyYXRv cj0oY29uc3QgbG9jYWxlJiBfX290aGVyKSB0aHJvdygpOw0KDQogICAgdGVtcGxhdGU8dHlwZW5h bWUgX0ZhY2V0Pg0KICAgICAgbG9jYWxlDQogICAgICBjb21iaW5lKGNvbnN0IGxvY2FsZSYgX19v dGhlcikgY29uc3Q7DQoNCg0KICAgIHN0cmluZw0KICAgIG5hbWUoKSBjb25zdDsNCg0KICAgIGJv b2wNCiAgICBvcGVyYXRvcj09KGNvbnN0IGxvY2FsZSYgX19vdGhlcikgY29uc3QgdGhyb3cgKCk7 DQoNCiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJhdG9yIT0oY29uc3QgbG9jYWxlJiBfX290aGVy KSBjb25zdCB0aHJvdyAoKQ0KICAgIHsgcmV0dXJuICEodGhpcy0+b3BlcmF0b3I9PShfX290aGVy KSk7IH0NCg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyLCB0eXBlbmFtZSBfVHJhaXRzLCB0 eXBlbmFtZSBfQWxsb2M+DQogICAgICBib29sDQogICAgICBvcGVyYXRvcigpKGNvbnN0IGJhc2lj X3N0cmluZzxfQ2hhciwgX1RyYWl0cywgX0FsbG9jPiYgX19zMSwNCiAgICAgICAgICAgICAgICAg Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyLCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MyKSBjb25zdDsN Cg0KDQogICAgc3RhdGljIGxvY2FsZQ0KICAgIGdsb2JhbChjb25zdCBsb2NhbGUmKTsNCg0KICAg IHN0YXRpYyBjb25zdCBsb2NhbGUmDQogICAgY2xhc3NpYygpOw0KDQogIHByaXZhdGU6DQoNCiAg ICBfSW1wbCogX01faW1wbDsNCg0KDQogICAgc3RhdGljIF9JbXBsKiBfU19jbGFzc2ljOw0KDQoN CiAgICBzdGF0aWMgX0ltcGwqIF9TX2dsb2JhbDsNCg0KICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg X1NfbnVtX2NhdGVnb3JpZXMgPSA2Ow0KDQogICAgZXhwbGljaXQNCiAgICBsb2NhbGUoX0ltcGwq KSB0aHJvdygpOw0KDQogICAgc3RhdGljIGlubGluZSB2b2lkDQogICAgX1NfaW5pdGlhbGl6ZSgp DQogICAgew0KICAgICAgaWYgKCFfU19jbGFzc2ljKQ0KICAgICAgICBjbGFzc2ljKCk7DQogICAg fQ0KDQogICAgc3RhdGljIGNhdGVnb3J5DQogICAgX1Nfbm9ybWFsaXplX2NhdGVnb3J5KGNhdGVn b3J5KTsNCg0KICAgIHZvaWQNCiAgICBfTV9jb2FsZXNjZShjb25zdCBsb2NhbGUmIF9fYmFzZSwg Y29uc3QgbG9jYWxlJiBfX2FkZCwgY2F0ZWdvcnkgX19jYXQpOw0KICB9Ow0KDQoNCg0KICBjbGFz cyBsb2NhbGU6Ol9JbXBsDQogIHsNCiAgcHVibGljOg0KDQogICAgZnJpZW5kIGNsYXNzIGxvY2Fs ZTsNCiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOjpmYWNldDsNCg0KICAgIHRlbXBsYXRlPHR5cGVu YW1lIF9GYWNldD4NCiAgICAgIGZyaWVuZCBjb25zdCBfRmFjZXQmDQogICAgICB1c2VfZmFjZXQo Y29uc3QgbG9jYWxlJik7DQoNCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+DQogICAgICBm cmllbmQgYm9vbA0KICAgICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYpIHRocm93KCk7DQoNCiAg cHJpdmF0ZToNCg0KICAgIF9BdG9taWNfd29yZCBfTV9yZWZlcmVuY2VzOw0KICAgIGZhY2V0Kiog X01fZmFjZXRzOw0KICAgIHNpemVfdCBfTV9mYWNldHNfc2l6ZTsNCiAgICBjb25zdCBjaGFyKiBf TV9uYW1lc1tfU19udW1fY2F0ZWdvcmllc107DQogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQq IGNvbnN0IF9TX2lkX2N0eXBlW107DQogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0 IF9TX2lkX251bWVyaWNbXTsNCiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1Nf aWRfY29sbGF0ZVtdOw0KICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF90 aW1lW107DQogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX21vbmV0YXJ5 W107DQogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX21lc3NhZ2VzW107 DQogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0KiBjb25zdCBfU19mYWNldF9jYXRl Z29yaWVzW107DQoNCiAgICBpbmxpbmUgdm9pZA0KICAgIF9NX2FkZF9yZWZlcmVuY2UoKSB0aHJv dygpDQogICAgeyBfX2F0b21pY19hZGQoJl9NX3JlZmVyZW5jZXMsIDEpOyB9DQoNCiAgICBpbmxp bmUgdm9pZA0KICAgIF9NX3JlbW92ZV9yZWZlcmVuY2UoKSB0aHJvdygpDQogICAgew0KICAgICAg aWYgKF9fZXhjaGFuZ2VfYW5kX2FkZCgmX01fcmVmZXJlbmNlcywgLTEpID09IDEpDQogICAgICAg IHsNCiAgICAgICAgICBpZiAodHJ1ZSkNCiAgICAgICAgICAgIHsgZGVsZXRlIHRoaXM7IH0NCiAg ICAgICAgICBpZiAoZmFsc2UpDQogICAgICAgICAgICB7IH0NCiAgICAgICAgfQ0KICAgIH0NCg0K ICAgIF9JbXBsKGNvbnN0IF9JbXBsJiwgc2l6ZV90KTsNCiAgICBfSW1wbChjb25zdCBjaGFyKiwg c2l6ZV90KTsNCiAgICBfSW1wbChmYWNldCoqLCBzaXplX3QsIGJvb2wpOw0KDQogICB+X0ltcGwo KSB0aHJvdygpOw0KDQogICAgX0ltcGwoY29uc3QgX0ltcGwmKTsNCg0KICAgIHZvaWQNCiAgICBv cGVyYXRvcj0oY29uc3QgX0ltcGwmKTsNCg0KICAgIGlubGluZSBib29sDQogICAgX01fY2hlY2tf c2FtZV9uYW1lKCkNCiAgICB7DQogICAgICBib29sIF9fcmV0ID0gdHJ1ZTsNCiAgICAgIGZvciAo c2l6ZV90IGkgPSAwOyBfX3JldCAmJiBpIDwgX1NfbnVtX2NhdGVnb3JpZXMgLSAxOyArK2kpDQog ICAgICAgIF9fcmV0ICY9IChzdHJjbXAoX01fbmFtZXNbaV0sIF9NX25hbWVzW2kgKyAxXSkgPT0g MCk7DQogICAgICByZXR1cm4gX19yZXQ7DQogICAgfQ0KDQogICAgdm9pZA0KICAgIF9NX3JlcGxh Y2VfY2F0ZWdvcmllcyhjb25zdCBfSW1wbCosIGNhdGVnb3J5KTsNCg0KICAgIHZvaWQNCiAgICBf TV9yZXBsYWNlX2NhdGVnb3J5KGNvbnN0IF9JbXBsKiwgY29uc3QgbG9jYWxlOjppZCogY29uc3Qq KTsNCg0KICAgIHZvaWQNCiAgICBfTV9yZXBsYWNlX2ZhY2V0KGNvbnN0IF9JbXBsKiwgY29uc3Qg bG9jYWxlOjppZCopOw0KDQogICAgdm9pZA0KICAgIF9NX2luc3RhbGxfZmFjZXQoY29uc3QgbG9j YWxlOjppZCosIGZhY2V0Kik7DQoNCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+DQogICAg ICBpbmxpbmUgdm9pZA0KICAgICAgX01faW5pdF9mYWNldChfRmFjZXQqIF9fZmFjZXQpDQogICAg ICB7IF9NX2luc3RhbGxfZmFjZXQoJl9GYWNldDo6aWQsIF9fZmFjZXQpOyB9DQogIH07DQoNCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pg0KICAgIGxvY2FsZTo6bG9jYWxlKGNvbnN0IGxvY2Fs ZSYgX19vdGhlciwgX0ZhY2V0KiBfX2YpDQogICAgew0KICAgICAgX01faW1wbCA9IG5ldyBfSW1w bCgqX19vdGhlci5fTV9pbXBsLCAxKTsNCiAgICAgIF9NX2ltcGwtPl9NX2luc3RhbGxfZmFjZXQo Jl9GYWNldDo6aWQsIF9fZik7DQogICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfU19u dW1fY2F0ZWdvcmllczsgKytfX2kpDQogICAgICAgIF9NX2ltcGwtPl9NX25hbWVzW19faV0gPSAi KiI7DQogICAgfQ0KDQoNCiAgY2xhc3MgbG9jYWxlOjpmYWNldA0KICB7DQogIHByaXZhdGU6DQog ICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsNCiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOjpfSW1wbDsN Cg0KICAgIF9BdG9taWNfd29yZCBfTV9yZWZlcmVuY2VzOw0KDQogIHByb3RlY3RlZDoNCg0KDQog ICAgc3RhdGljIF9fY19sb2NhbGUgX1NfY19sb2NhbGU7DQoNCiAgICBleHBsaWNpdA0KICAgIGZh Y2V0KHNpemVfdCBfX3JlZnMgPSAwKSB0aHJvdygpOw0KDQogICAgdmlydHVhbA0KICAgIH5mYWNl dCgpOw0KDQogICAgc3RhdGljIHZvaWQNCiAgICBfU19jcmVhdGVfY19sb2NhbGUoX19jX2xvY2Fs ZSYgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsDQogICAgICAgICAgICAgICAgICAgICAgIF9fY19s b2NhbGUgX19vbGQgPSAwKTsNCg0KICAgIHN0YXRpYyBfX2NfbG9jYWxlDQogICAgX1NfY2xvbmVf Y19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKTsNCg0KICAgIHN0YXRpYyB2b2lkDQogICAgX1Nf ZGVzdHJveV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpOw0KDQogIHByaXZhdGU6DQogICAg dm9pZA0KICAgIF9NX2FkZF9yZWZlcmVuY2UoKSB0aHJvdygpOw0KDQogICAgdm9pZA0KICAgIF9N X3JlbW92ZV9yZWZlcmVuY2UoKSB0aHJvdygpOw0KDQogICAgZmFjZXQoY29uc3QgZmFjZXQmKTsN Cg0KICAgIHZvaWQNCiAgICBvcGVyYXRvcj0oY29uc3QgZmFjZXQmKTsNCiAgfTsNCg0KDQoNCiAg Y2xhc3MgbG9jYWxlOjppZA0KICB7DQogIHByaXZhdGU6DQogICAgZnJpZW5kIGNsYXNzIGxvY2Fs ZTsNCiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOjpfSW1wbDsNCiAgICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfRmFjZXQ+DQogICAgICBmcmllbmQgY29uc3QgX0ZhY2V0Jg0KICAgICAgdXNlX2ZhY2V0KGNv bnN0IGxvY2FsZSYpOw0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4NCiAgICAgIGZyaWVu ZCBib29sDQogICAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJikgdGhyb3cgKCk7DQoNCg0KDQoN CiAgICBtdXRhYmxlIHNpemVfdCBfTV9pbmRleDsNCg0KDQogICAgc3RhdGljIF9BdG9taWNfd29y ZCBfU19oaWdod2F0ZXI7DQoNCiAgICB2b2lkDQogICAgb3BlcmF0b3I9KGNvbnN0IGlkJik7DQoN CiAgICBpZChjb25zdCBpZCYpOw0KDQogIHB1YmxpYzoNCg0KDQogICAgaWQoKTsNCg0KICAgIGlu bGluZSBzaXplX3QNCiAgICBfTV9pZCgpIGNvbnN0DQogICAgew0KICAgICAgaWYgKCFfTV9pbmRl eCkNCiAgICAgICAgX01faW5kZXggPSAxICsgX19leGNoYW5nZV9hbmRfYWRkKCZfU19oaWdod2F0 ZXIsIDEpOw0KICAgICAgcmV0dXJuIF9NX2luZGV4IC0gMTsNCiAgICB9DQogIH07DQoNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pg0KICAgIGNvbnN0IF9GYWNldCYNCiAgICB1c2VfZmFjZXQo Y29uc3QgbG9jYWxlJiBfX2xvYyk7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pg0KICAg IGJvb2wNCiAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYykgdGhyb3coKTsNCn0NCiMg NDkgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2lvcyIgMiAzDQojIDEgInQ6L21z eXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvaW9zX2Jhc2UuaCIgMSAzDQojIDQ0ICJ0 Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL2lvc19iYXNlLmgiIDMNCg0KDQoN Cm5hbWVzcGFjZSBzdGQNCnsNCg0KDQoNCg0KICBlbnVtIF9Jb3NfRm10ZmxhZ3MgeyBfTV9pb3Nf Zm10ZmxhZ3NfZW5kID0gMUwgPDwgMTYgfTsNCg0KICBpbmxpbmUgX0lvc19GbXRmbGFncw0KICBv cGVyYXRvciYoX0lvc19GbXRmbGFncyBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQ0KICB7IHJldHVy biBfSW9zX0ZtdGZsYWdzKHN0YXRpY19jYXN0PGludD4oX19hKSAmIHN0YXRpY19jYXN0PGludD4o X19iKSk7IH0NCg0KICBpbmxpbmUgX0lvc19GbXRmbGFncw0KICBvcGVyYXRvcnwoX0lvc19GbXRm bGFncyBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQ0KICB7IHJldHVybiBfSW9zX0ZtdGZsYWdzKHN0 YXRpY19jYXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0NCg0KICBpbmxp bmUgX0lvc19GbXRmbGFncw0KICBvcGVyYXRvcl4oX0lvc19GbXRmbGFncyBfX2EsIF9Jb3NfRm10 ZmxhZ3MgX19iKQ0KICB7IHJldHVybiBfSW9zX0ZtdGZsYWdzKHN0YXRpY19jYXN0PGludD4oX19h KSBeIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0NCg0KICBpbmxpbmUgX0lvc19GbXRmbGFncw0K ICBvcGVyYXRvcnw9KF9Jb3NfRm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpDQogIHsg cmV0dXJuIF9fYSA9IF9fYSB8IF9fYjsgfQ0KDQogIGlubGluZSBfSW9zX0ZtdGZsYWdzDQogIG9w ZXJhdG9yJj0oX0lvc19GbXRmbGFncyYgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikNCiAgeyByZXR1 cm4gX19hID0gX19hICYgX19iOyB9DQoNCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MNCiAgb3BlcmF0 b3JePShfSW9zX0ZtdGZsYWdzJiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQ0KICB7IHJldHVybiBf X2EgPSBfX2EgXiBfX2I7IH0NCg0KICBpbmxpbmUgX0lvc19GbXRmbGFncw0KICBvcGVyYXRvcn4o X0lvc19GbXRmbGFncyBfX2EpDQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3MofnN0YXRpY19jYXN0 PGludD4oX19hKSk7IH0NCg0KDQogIGVudW0gX0lvc19PcGVubW9kZSB7IF9NX2lvc19vcGVubW9k ZV9lbmQgPSAxTCA8PCAxNiB9Ow0KDQogIGlubGluZSBfSW9zX09wZW5tb2RlDQogIG9wZXJhdG9y JihfSW9zX09wZW5tb2RlIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpDQogIHsgcmV0dXJuIF9Jb3Nf T3Blbm1vZGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsg fQ0KDQogIGlubGluZSBfSW9zX09wZW5tb2RlDQogIG9wZXJhdG9yfChfSW9zX09wZW5tb2RlIF9f YSwgX0lvc19PcGVubW9kZSBfX2IpDQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUoc3RhdGljX2Nh c3Q8aW50PihfX2EpIHwgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQ0KDQogIGlubGluZSBfSW9z X09wZW5tb2RlDQogIG9wZXJhdG9yXihfSW9zX09wZW5tb2RlIF9fYSwgX0lvc19PcGVubW9kZSBf X2IpDQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpIF4gc3Rh dGljX2Nhc3Q8aW50PihfX2IpKTsgfQ0KDQogIGlubGluZSBfSW9zX09wZW5tb2RlDQogIG9wZXJh dG9yfD0oX0lvc19PcGVubW9kZSYgX19hLCBfSW9zX09wZW5tb2RlIF9fYikNCiAgeyByZXR1cm4g X19hID0gX19hIHwgX19iOyB9DQoNCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUNCiAgb3BlcmF0b3Im PShfSW9zX09wZW5tb2RlJiBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQ0KICB7IHJldHVybiBfX2Eg PSBfX2EgJiBfX2I7IH0NCg0KICBpbmxpbmUgX0lvc19PcGVubW9kZQ0KICBvcGVyYXRvcl49KF9J b3NfT3Blbm1vZGUmIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpDQogIHsgcmV0dXJuIF9fYSA9IF9f YSBeIF9fYjsgfQ0KDQogIGlubGluZSBfSW9zX09wZW5tb2RlDQogIG9wZXJhdG9yfihfSW9zX09w ZW5tb2RlIF9fYSkNCiAgeyByZXR1cm4gX0lvc19PcGVubW9kZSh+c3RhdGljX2Nhc3Q8aW50Pihf X2EpKTsgfQ0KDQoNCiAgZW51bSBfSW9zX0lvc3RhdGUgeyBfTV9pb3NfaW9zdGF0ZV9lbmQgPSAx TCA8PCAxNiB9Ow0KDQogIGlubGluZSBfSW9zX0lvc3RhdGUNCiAgb3BlcmF0b3ImKF9Jb3NfSW9z dGF0ZSBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpDQogIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZShzdGF0 aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9DQoNCiAgaW5saW5l IF9Jb3NfSW9zdGF0ZQ0KICBvcGVyYXRvcnwoX0lvc19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRl IF9fYikNCiAgeyByZXR1cm4gX0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0 YXRpY19jYXN0PGludD4oX19iKSk7IH0NCg0KICBpbmxpbmUgX0lvc19Jb3N0YXRlDQogIG9wZXJh dG9yXihfSW9zX0lvc3RhdGUgX19hLCBfSW9zX0lvc3RhdGUgX19iKQ0KICB7IHJldHVybiBfSW9z X0lvc3RhdGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpIF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsg fQ0KDQogIGlubGluZSBfSW9zX0lvc3RhdGUNCiAgb3BlcmF0b3J8PShfSW9zX0lvc3RhdGUmIF9f YSwgX0lvc19Jb3N0YXRlIF9fYikNCiAgeyByZXR1cm4gX19hID0gX19hIHwgX19iOyB9DQoNCiAg aW5saW5lIF9Jb3NfSW9zdGF0ZQ0KICBvcGVyYXRvciY9KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9z X0lvc3RhdGUgX19iKQ0KICB7IHJldHVybiBfX2EgPSBfX2EgJiBfX2I7IH0NCg0KICBpbmxpbmUg X0lvc19Jb3N0YXRlDQogIG9wZXJhdG9yXj0oX0lvc19Jb3N0YXRlJiBfX2EsIF9Jb3NfSW9zdGF0 ZSBfX2IpDQogIHsgcmV0dXJuIF9fYSA9IF9fYSBeIF9fYjsgfQ0KDQogIGlubGluZSBfSW9zX0lv c3RhdGUNCiAgb3BlcmF0b3J+KF9Jb3NfSW9zdGF0ZSBfX2EpDQogIHsgcmV0dXJuIF9Jb3NfSW9z dGF0ZSh+c3RhdGljX2Nhc3Q8aW50PihfX2EpKTsgfQ0KDQogIGVudW0gX0lvc19TZWVrZGlyIHsg X01faW9zX3NlZWtkaXJfZW5kID0gMUwgPDwgMTYgfTsNCg0KDQogIGNsYXNzIGlvc19iYXNlDQog IHsNCiAgcHVibGljOg0KDQoNCiAgICBjbGFzcyBmYWlsdXJlIDogcHVibGljIGV4Y2VwdGlvbg0K ICAgIHsNCiAgICBwdWJsaWM6DQoNCg0KICAgICAgZXhwbGljaXQNCiAgICAgIGZhaWx1cmUoY29u c3Qgc3RyaW5nJiBfX3N0cikgdGhyb3coKTsNCg0KDQoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5m YWlsdXJlKCkgdGhyb3coKTsNCg0KICAgICAgdmlydHVhbCBjb25zdCBjaGFyKg0KICAgICAgd2hh dCgpIGNvbnN0IHRocm93KCk7DQoNCiAgICBwcml2YXRlOg0KICAgICAgZW51bSB7IF9NX2J1ZnNp emUgPSAyNTYgfTsNCiAgICAgIGNoYXIgX01fbmFtZVtfTV9idWZzaXplXTsNCg0KICAgIH07DQoN Cg0KICAgIHR5cGVkZWYgX0lvc19GbXRmbGFncyBmbXRmbGFnczsNCg0KICAgIHN0YXRpYyBjb25z dCBmbXRmbGFncyBib29sYWxwaGEgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfYm9vbGFscGhh KTsNCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgZGVjID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6 Ol9TX2RlYyk7DQogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGZpeGVkID0gZm10ZmxhZ3MoX19p b3NfZmxhZ3M6Ol9TX2ZpeGVkKTsNCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgaGV4ID0gZm10 ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2hleCk7DQogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGlu dGVybmFsID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2ludGVybmFsKTsNCiAgICBzdGF0aWMg Y29uc3QgZm10ZmxhZ3MgbGVmdCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19sZWZ0KTsNCiAg ICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgb2N0ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX29j dCk7DQogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHJpZ2h0ID0gZm10ZmxhZ3MoX19pb3NfZmxh Z3M6Ol9TX3JpZ2h0KTsNCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2NpZW50aWZpYyA9IGZt dGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zY2llbnRpZmljKTsNCiAgICBzdGF0aWMgY29uc3QgZm10 ZmxhZ3Mgc2hvd2Jhc2UgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2hvd2Jhc2UpOw0KICAg IHN0YXRpYyBjb25zdCBmbXRmbGFncyBzaG93cG9pbnQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6 X1Nfc2hvd3BvaW50KTsNCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2hvd3BvcyA9IGZtdGZs YWdzKF9faW9zX2ZsYWdzOjpfU19zaG93cG9zKTsNCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mg c2tpcHdzID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3NraXB3cyk7DQogICAgc3RhdGljIGNv bnN0IGZtdGZsYWdzIHVuaXRidWYgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfdW5pdGJ1Zik7 DQogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHVwcGVyY2FzZSA9IGZtdGZsYWdzKF9faW9zX2Zs YWdzOjpfU191cHBlcmNhc2UpOw0KICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBhZGp1c3RmaWVs ZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19hZGp1c3RmaWVsZCk7DQogICAgc3RhdGljIGNv bnN0IGZtdGZsYWdzIGJhc2VmaWVsZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19iYXNlZmll bGQpOw0KICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBmbG9hdGZpZWxkID0gZm10ZmxhZ3MoX19p b3NfZmxhZ3M6Ol9TX2Zsb2F0ZmllbGQpOw0KDQoNCiAgICB0eXBlZGVmIF9Jb3NfSW9zdGF0ZSBp b3N0YXRlOw0KICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGJhZGJpdCA9IGlvc3RhdGUoX19pb3Nf ZmxhZ3M6Ol9TX2JhZGJpdCk7DQogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgZW9mYml0ID0gaW9z dGF0ZShfX2lvc19mbGFnczo6X1NfZW9mYml0KTsNCiAgICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBm YWlsYml0ID0gaW9zdGF0ZShfX2lvc19mbGFnczo6X1NfZmFpbGJpdCk7DQogICAgc3RhdGljIGNv bnN0IGlvc3RhdGUgZ29vZGJpdCA9IGlvc3RhdGUoMCk7DQoNCg0KICAgIHR5cGVkZWYgX0lvc19P cGVubW9kZSBvcGVubW9kZTsNCiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgYXBwID0gb3Blbm1v ZGUoX19pb3NfZmxhZ3M6Ol9TX2FwcCk7DQogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGF0ZSA9 IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19hdGUpOw0KICAgIHN0YXRpYyBjb25zdCBvcGVubW9k ZSBiaW5hcnkgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfYmluKTsNCiAgICBzdGF0aWMgY29u c3Qgb3Blbm1vZGUgaW4gPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfaW4pOw0KICAgIHN0YXRp YyBjb25zdCBvcGVubW9kZSBvdXQgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1Nfb3V0KTsNCiAg ICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgdHJ1bmMgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1Nf dHJ1bmMpOw0KDQoNCiAgICB0eXBlZGVmIF9Jb3NfU2Vla2RpciBzZWVrZGlyOw0KICAgIHN0YXRp YyBjb25zdCBzZWVrZGlyIGJlZyA9IHNlZWtkaXIoMCk7DQogICAgc3RhdGljIGNvbnN0IHNlZWtk aXIgY3VyID0gc2Vla2RpcigoMSkpOw0KICAgIHN0YXRpYyBjb25zdCBzZWVrZGlyIGVuZCA9IHNl ZWtkaXIoKDIpKTsNCiMgMjI2ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRz L2lvc19iYXNlLmgiIDMNCiAgICBlbnVtIGV2ZW50DQogICAgew0KICAgICAgZXJhc2VfZXZlbnQs DQogICAgICBpbWJ1ZV9ldmVudCwNCiAgICAgIGNvcHlmbXRfZXZlbnQNCiAgICB9Ow0KDQogICAg dHlwZWRlZiB2b2lkICgqZXZlbnRfY2FsbGJhY2spIChldmVudCwgaW9zX2Jhc2UmLCBpbnQpOw0K DQogICAgdm9pZA0KICAgIHJlZ2lzdGVyX2NhbGxiYWNrKGV2ZW50X2NhbGxiYWNrIF9fZm4sIGlu dCBfX2luZGV4KTsNCg0KICBwcm90ZWN0ZWQ6DQoNCiAgICBzdHJlYW1zaXplIF9NX3ByZWNpc2lv bjsNCiAgICBzdHJlYW1zaXplIF9NX3dpZHRoOw0KICAgIGZtdGZsYWdzIF9NX2ZsYWdzOw0KICAg IGlvc3RhdGUgX01fZXhjZXB0aW9uOw0KICAgIGlvc3RhdGUgX01fc3RyZWFtYnVmX3N0YXRlOw0K DQoNCg0KICAgIHN0cnVjdCBfQ2FsbGJhY2tfbGlzdA0KICAgIHsNCg0KICAgICAgX0NhbGxiYWNr X2xpc3QqIF9NX25leHQ7DQogICAgICBpb3NfYmFzZTo6ZXZlbnRfY2FsbGJhY2sgX01fZm47DQog ICAgICBpbnQgX01faW5kZXg7DQogICAgICBfQXRvbWljX3dvcmQgX01fcmVmY291bnQ7DQoNCiAg ICAgIF9DYWxsYmFja19saXN0KGlvc19iYXNlOjpldmVudF9jYWxsYmFjayBfX2ZuLCBpbnQgX19p bmRleCwNCiAgICAgICAgICAgICAgICAgICAgIF9DYWxsYmFja19saXN0KiBfX2NiKQ0KICAgICAg OiBfTV9uZXh0KF9fY2IpLCBfTV9mbihfX2ZuKSwgX01faW5kZXgoX19pbmRleCksIF9NX3JlZmNv dW50KDApIHsgfQ0KDQogICAgICB2b2lkDQogICAgICBfTV9hZGRfcmVmZXJlbmNlKCkgeyBfX2F0 b21pY19hZGQoJl9NX3JlZmNvdW50LCAxKTsgfQ0KDQoNCiAgICAgIGludA0KICAgICAgX01fcmVt b3ZlX3JlZmVyZW5jZSgpIHsgcmV0dXJuIF9fZXhjaGFuZ2VfYW5kX2FkZCgmX01fcmVmY291bnQs IC0xKTsgfQ0KICAgIH07DQoNCiAgICAgX0NhbGxiYWNrX2xpc3QqIF9NX2NhbGxiYWNrczsNCg0K ICAgIHZvaWQNCiAgICBfTV9jYWxsX2NhbGxiYWNrcyhldmVudCBfX2V2KSB0aHJvdygpOw0KDQog ICAgdm9pZA0KICAgIF9NX2Rpc3Bvc2VfY2FsbGJhY2tzKHZvaWQpOw0KDQoNCiAgICBzdHJ1Y3Qg X1dvcmRzDQogICAgew0KICAgICAgdm9pZCogX01fcHdvcmQ7DQogICAgICBsb25nIF9NX2l3b3Jk Ow0KICAgICAgX1dvcmRzKCkgOiBfTV9wd29yZCgwKSwgX01faXdvcmQoMCkgeyB9DQogICAgfTsN Cg0KDQogICAgX1dvcmRzIF9NX3dvcmRfemVybzsNCg0KDQogICAgc3RhdGljIGNvbnN0IGludCBf U19sb2NhbF93b3JkX3NpemUgPSA4Ow0KICAgIF9Xb3JkcyBfTV9sb2NhbF93b3JkW19TX2xvY2Fs X3dvcmRfc2l6ZV07DQoNCg0KICAgIGludCBfTV93b3JkX3NpemU7DQogICAgX1dvcmRzKiBfTV93 b3JkOw0KDQogICAgX1dvcmRzJg0KICAgIF9NX2dyb3dfd29yZHMoaW50IF9faW5kZXgpOw0KDQoN CiAgICBsb2NhbGUgX01faW9zX2xvY2FsZTsNCg0KICAgIHZvaWQNCiAgICBfTV9pbml0KCk7DQoN CiAgcHVibGljOg0KDQoNCg0KDQoNCiAgICBjbGFzcyBJbml0DQogICAgew0KICAgICAgZnJpZW5k IGNsYXNzIGlvc19iYXNlOw0KICAgIHB1YmxpYzoNCiAgICAgIEluaXQoKTsNCiAgICAgIH5Jbml0 KCk7DQoNCiAgICAgIHN0YXRpYyB2b2lkDQogICAgICBfU19pb3NfY3JlYXRlKGJvb2wgX19zeW5j KTsNCg0KICAgICAgc3RhdGljIHZvaWQNCiAgICAgIF9TX2lvc19kZXN0cm95KCk7DQoNCiAgICBw cml2YXRlOg0KICAgICAgc3RhdGljIGludCBfU19pb3NfYmFzZV9pbml0Ow0KICAgICAgc3RhdGlj IGJvb2wgX1Nfc3luY2VkX3dpdGhfc3RkaW87DQogICAgfTsNCg0KDQogICAgaW5saW5lIGZtdGZs YWdzDQogICAgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBfTV9mbGFnczsgfQ0KDQogICAgaW5saW5l IGZtdGZsYWdzDQogICAgZmxhZ3MoZm10ZmxhZ3MgX19mbXRmbCkNCiAgICB7DQogICAgICBmbXRm bGFncyBfX29sZCA9IF9NX2ZsYWdzOw0KICAgICAgX01fZmxhZ3MgPSBfX2ZtdGZsOw0KICAgICAg cmV0dXJuIF9fb2xkOw0KICAgIH0NCg0KICAgIGlubGluZSBmbXRmbGFncw0KICAgIHNldGYoZm10 ZmxhZ3MgX19mbXRmbCkNCiAgICB7DQogICAgICBmbXRmbGFncyBfX29sZCA9IF9NX2ZsYWdzOw0K ICAgICAgX01fZmxhZ3MgfD0gX19mbXRmbDsNCiAgICAgIHJldHVybiBfX29sZDsNCiAgICB9DQoN CiAgICBpbmxpbmUgZm10ZmxhZ3MNCiAgICBzZXRmKGZtdGZsYWdzIF9fZm10ZmwsIGZtdGZsYWdz IF9fbWFzaykNCiAgICB7DQogICAgICBmbXRmbGFncyBfX29sZCA9IF9NX2ZsYWdzOw0KICAgICAg X01fZmxhZ3MgJj0gfl9fbWFzazsNCiAgICAgIF9NX2ZsYWdzIHw9IChfX2ZtdGZsICYgX19tYXNr KTsNCiAgICAgIHJldHVybiBfX29sZDsNCiAgICB9DQoNCiAgICBpbmxpbmUgdm9pZA0KICAgIHVu c2V0ZihmbXRmbGFncyBfX21hc2spIHsgX01fZmxhZ3MgJj0gfl9fbWFzazsgfQ0KDQogICAgaW5s aW5lIHN0cmVhbXNpemUNCiAgICBwcmVjaXNpb24oKSBjb25zdCB7IHJldHVybiBfTV9wcmVjaXNp b247IH0NCg0KICAgIGlubGluZSBzdHJlYW1zaXplDQogICAgcHJlY2lzaW9uKHN0cmVhbXNpemUg X19wcmVjKQ0KICAgIHsNCiAgICAgIHN0cmVhbXNpemUgX19vbGQgPSBfTV9wcmVjaXNpb247DQog ICAgICBfTV9wcmVjaXNpb24gPSBfX3ByZWM7DQogICAgICByZXR1cm4gX19vbGQ7DQogICAgfQ0K DQogICAgaW5saW5lIHN0cmVhbXNpemUNCiAgICB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIF9NX3dp ZHRoOyB9DQoNCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQ0KICAgIHdpZHRoKHN0cmVhbXNpemUgX193 aWRlKQ0KICAgIHsNCiAgICAgIHN0cmVhbXNpemUgX19vbGQgPSBfTV93aWR0aDsNCiAgICAgIF9N X3dpZHRoID0gX193aWRlOw0KICAgICAgcmV0dXJuIF9fb2xkOw0KICAgIH0NCg0KICAgIHN0YXRp YyBib29sDQogICAgc3luY193aXRoX3N0ZGlvKGJvb2wgX19zeW5jID0gdHJ1ZSk7DQoNCg0KICAg IGxvY2FsZQ0KICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpOw0KDQogICAgaW5saW5lIGxv Y2FsZQ0KICAgIGdldGxvYygpIGNvbnN0IHsgcmV0dXJuIF9NX2lvc19sb2NhbGU7IH0NCg0KDQog ICAgc3RhdGljIGludA0KICAgIHhhbGxvYygpIHRocm93KCk7DQoNCiAgICBpbmxpbmUgbG9uZyYN CiAgICBpd29yZChpbnQgX19peCkNCiAgICB7DQogICAgICBfV29yZHMmIF9fd29yZCA9IChfX2l4 IDwgX01fd29yZF9zaXplKQ0KICAgICAgICAgICAgICAgICAgICAgICAgPyBfTV93b3JkW19faXhd IDogX01fZ3Jvd193b3JkcyhfX2l4KTsNCiAgICAgIHJldHVybiBfX3dvcmQuX01faXdvcmQ7DQog ICAgfQ0KDQogICAgaW5saW5lIHZvaWQqJg0KICAgIHB3b3JkKGludCBfX2l4KQ0KICAgIHsNCiAg ICAgIF9Xb3JkcyYgX193b3JkID0gKF9faXggPCBfTV93b3JkX3NpemUpDQogICAgICAgICAgICAg ICAgICAgICAgICA/IF9NX3dvcmRbX19peF0gOiBfTV9ncm93X3dvcmRzKF9faXgpOw0KICAgICAg cmV0dXJuIF9fd29yZC5fTV9wd29yZDsNCiAgICB9DQoNCg0KICAgIH5pb3NfYmFzZSgpOw0KDQog IHByb3RlY3RlZDoNCiAgICBpb3NfYmFzZSgpOw0KDQoNCg0KICBwcml2YXRlOg0KICAgIGlvc19i YXNlKGNvbnN0IGlvc19iYXNlJik7DQoNCiAgICBpb3NfYmFzZSYNCiAgICBvcGVyYXRvcj0oY29u c3QgaW9zX2Jhc2UmKTsNCg0KICB9Ow0KDQoNCiAgaW5saW5lIGlvc19iYXNlJg0KICBib29sYWxw aGEoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpib29s YWxwaGEpOw0KICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0KICBpbmxpbmUgaW9zX2Jhc2UmDQog IG5vYm9vbGFscGhhKGlvc19iYXNlJiBfX2Jhc2UpDQogIHsNCiAgICBfX2Jhc2UudW5zZXRmKGlv c19iYXNlOjpib29sYWxwaGEpOw0KICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0KICBpbmxpbmUg aW9zX2Jhc2UmDQogIHNob3diYXNlKGlvc19iYXNlJiBfX2Jhc2UpDQogIHsNCiAgICBfX2Jhc2Uu c2V0Zihpb3NfYmFzZTo6c2hvd2Jhc2UpOw0KICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0KICBp bmxpbmUgaW9zX2Jhc2UmDQogIG5vc2hvd2Jhc2UoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAg IF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnNob3diYXNlKTsNCiAgICByZXR1cm4gX19iYXNlOw0K ICB9DQoNCiAgaW5saW5lIGlvc19iYXNlJg0KICBzaG93cG9pbnQoaW9zX2Jhc2UmIF9fYmFzZSkN CiAgew0KICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpzaG93cG9pbnQpOw0KICAgIHJldHVybiBf X2Jhc2U7DQogIH0NCg0KICBpbmxpbmUgaW9zX2Jhc2UmDQogIG5vc2hvd3BvaW50KGlvc19iYXNl JiBfX2Jhc2UpDQogIHsNCiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpzaG93cG9pbnQpOw0K ICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0KICBpbmxpbmUgaW9zX2Jhc2UmDQogIHNob3dwb3Mo aW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpzaG93cG9z KTsNCiAgICByZXR1cm4gX19iYXNlOw0KICB9DQoNCiAgaW5saW5lIGlvc19iYXNlJg0KICBub3No b3dwb3MoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6 OnNob3dwb3MpOw0KICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0KICBpbmxpbmUgaW9zX2Jhc2Um DQogIHNraXB3cyhpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQogICAgX19iYXNlLnNldGYoaW9zX2Jh c2U6OnNraXB3cyk7DQogICAgcmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQogIGlubGluZSBpb3NfYmFz ZSYNCiAgbm9za2lwd3MoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAgIF9fYmFzZS51bnNldGYo aW9zX2Jhc2U6OnNraXB3cyk7DQogICAgcmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQogIGlubGluZSBp b3NfYmFzZSYNCiAgdXBwZXJjYXNlKGlvc19iYXNlJiBfX2Jhc2UpDQogIHsNCiAgICBfX2Jhc2Uu c2V0Zihpb3NfYmFzZTo6dXBwZXJjYXNlKTsNCiAgICByZXR1cm4gX19iYXNlOw0KICB9DQoNCiAg aW5saW5lIGlvc19iYXNlJg0KICBub3VwcGVyY2FzZShpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQog ICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6dXBwZXJjYXNlKTsNCiAgICByZXR1cm4gX19iYXNl Ow0KICB9DQoNCiAgaW5saW5lIGlvc19iYXNlJg0KICB1bml0YnVmKGlvc19iYXNlJiBfX2Jhc2Up DQogIHsNCiAgICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnVuaXRidWYpOw0KICAgICByZXR1cm4g X19iYXNlOw0KICB9DQoNCiAgaW5saW5lIGlvc19iYXNlJg0KICBub3VuaXRidWYoaW9zX2Jhc2Um IF9fYmFzZSkNCiAgew0KICAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjp1bml0YnVmKTsNCiAg ICAgcmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQoNCiAgaW5saW5lIGlvc19iYXNlJg0KICBpbnRlcm5h bChpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQogICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjppbnRl cm5hbCwgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKTsNCiAgICAgcmV0dXJuIF9fYmFzZTsNCiAgfQ0K DQogIGlubGluZSBpb3NfYmFzZSYNCiAgbGVmdChpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQogICAg X19iYXNlLnNldGYoaW9zX2Jhc2U6OmxlZnQsIGlvc19iYXNlOjphZGp1c3RmaWVsZCk7DQogICAg cmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQogIGlubGluZSBpb3NfYmFzZSYNCiAgcmlnaHQoaW9zX2Jh c2UmIF9fYmFzZSkNCiAgew0KICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpyaWdodCwgaW9zX2Jh c2U6OmFkanVzdGZpZWxkKTsNCiAgICByZXR1cm4gX19iYXNlOw0KICB9DQoNCg0KICBpbmxpbmUg aW9zX2Jhc2UmDQogIGRlYyhpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQogICAgX19iYXNlLnNldGYo aW9zX2Jhc2U6OmRlYywgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7DQogICAgcmV0dXJuIF9fYmFzZTsN CiAgfQ0KDQogIGlubGluZSBpb3NfYmFzZSYNCiAgaGV4KGlvc19iYXNlJiBfX2Jhc2UpDQogIHsN CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6aGV4LCBpb3NfYmFzZTo6YmFzZWZpZWxkKTsNCiAg ICByZXR1cm4gX19iYXNlOw0KICB9DQoNCiAgaW5saW5lIGlvc19iYXNlJg0KICBvY3QoaW9zX2Jh c2UmIF9fYmFzZSkNCiAgew0KICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpvY3QsIGlvc19iYXNl OjpiYXNlZmllbGQpOw0KICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0KDQogIGlubGluZSBpb3Nf YmFzZSYNCiAgZml4ZWQoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAgIF9fYmFzZS5zZXRmKGlv c19iYXNlOjpmaXhlZCwgaW9zX2Jhc2U6OmZsb2F0ZmllbGQpOw0KICAgIHJldHVybiBfX2Jhc2U7 DQogIH0NCg0KICBpbmxpbmUgaW9zX2Jhc2UmDQogIHNjaWVudGlmaWMoaW9zX2Jhc2UmIF9fYmFz ZSkNCiAgew0KICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpzY2llbnRpZmljLCBpb3NfYmFzZTo6 ZmxvYXRmaWVsZCk7DQogICAgcmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQp9DQojIDUwICJ0Oi9tc3lz LzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9pb3MiIDIgMw0KIyAxICJ0Oi9tc3lzLzEuMC9taW5n dy9pbmNsdWRlL2crKy12My9zdHJlYW1idWYiIDEgMw0KIyA0NCAidDovbXN5cy8xLjAvbWluZ3cv aW5jbHVkZS9nKystdjMvc3RyZWFtYnVmIiAzDQoNCg0KDQoNCg0KDQoNCm5hbWVzcGFjZSBzdGQN CnsNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIHN0 cmVhbXNpemUNCiAgICBfX2NvcHlfc3RyZWFtYnVmcyhiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRz PiYgX2lvcywNCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBf VHJhaXRzPiogX19zYmluLA0KICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1Zjxf Q2hhclQsIF9UcmFpdHM+KiBfX3Nib3V0KTsNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBjbGFzcyBiYXNpY19zdHJlYW1idWYNCiAgICB7DQog ICAgcHVibGljOg0KDQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQogICAgICB0eXBl ZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190 eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5 cGU6OnBvc190eXBlIHBvc190eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlw ZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7DQoNCg0KICAgICAgdHlwZWRlZiBjdHlwZTxjaGFyX3R5cGU+ IF9fY3R5cGVfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPGNoYXJfdHlwZSwg dHJhaXRzX3R5cGU+IF9fc3RyZWFtYnVmX3R5cGU7DQoNCiAgICAgIGZyaWVuZCBjbGFzcyBiYXNp Y19pb3M8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47DQogICAgICBmcmllbmQgY2xhc3MgYmFzaWNf aXN0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsNCiAgICAgIGZyaWVuZCBjbGFzcyBiYXNp Y19vc3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+Ow0KICAgICAgZnJpZW5kIGNsYXNzIGlz dHJlYW1idWZfaXRlcmF0b3I8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47DQogICAgICBmcmllbmQg Y2xhc3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsNCg0KICAg ICAgZnJpZW5kIHN0cmVhbXNpemUNCiAgICAgIF9fY29weV9zdHJlYW1idWZzPD4oYmFzaWNfaW9z PGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+JiBfX2lvcywNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgX19zdHJlYW1idWZfdHlwZSogX19zYmluLF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JvdXQpOw0K DQogICAgcHJvdGVjdGVkOg0KDQoNCg0KDQoNCiAgICAgIGNoYXJfdHlwZSogX01fYnVmOw0KDQoN CiAgICAgIGludF90eXBlIF9NX2J1Zl9zaXplOw0KDQoNCiAgICAgIGludF90eXBlIF9NX2J1Zl9z aXplX29wdDsNCg0KDQoNCiAgICAgIGJvb2wgX01fYnVmX3VuaWZpZWQ7DQoNCg0KDQoNCg0KDQog ICAgICBjaGFyX3R5cGUqIF9NX2luX2JlZzsNCiAgICAgIGNoYXJfdHlwZSogX01faW5fY3VyOw0K ICAgICAgY2hhcl90eXBlKiBfTV9pbl9lbmQ7DQogICAgICBjaGFyX3R5cGUqIF9NX291dF9iZWc7 DQogICAgICBjaGFyX3R5cGUqIF9NX291dF9jdXI7DQogICAgICBjaGFyX3R5cGUqIF9NX291dF9l bmQ7DQoNCg0KICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9NX21vZGU7DQoNCg0KICAgICAgbG9j YWxlIF9NX2J1Zl9sb2NhbGU7DQoNCg0KICAgICAgYm9vbCBfTV9idWZfbG9jYWxlX2luaXQ7DQoN Cg0KDQoNCg0KDQogICAgICBzdGF0aWMgY29uc3QgaW50X3R5cGUgX1NfcGJhY2tfc2l6ZSA9IDE7 DQogICAgICBjaGFyX3R5cGUgX01fcGJhY2tbX1NfcGJhY2tfc2l6ZV07DQogICAgICBjaGFyX3R5 cGUqIF9NX3BiYWNrX2N1cl9zYXZlOw0KICAgICAgY2hhcl90eXBlKiBfTV9wYmFja19lbmRfc2F2 ZTsNCiAgICAgIGJvb2wgX01fcGJhY2tfaW5pdDsNCg0KDQoNCg0KICAgICAgdm9pZA0KICAgICAg X01fcGJhY2tfY3JlYXRlKCkNCiAgICAgIHsNCiAgICAgICAgaWYgKCFfTV9wYmFja19pbml0KQ0K ICAgICAgICAgIHsNCiAgICAgICAgICAgIGludF90eXBlIF9fZGlzdCA9IF9NX2luX2VuZCAtIF9N X2luX2N1cjsNCiAgICAgICAgICAgIGludF90eXBlIF9fbGVuID0gbWluKF9TX3BiYWNrX3NpemUs IF9fZGlzdCk7DQogICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfTV9wYmFjaywgX01faW5f Y3VyLCBfX2xlbik7DQogICAgICAgICAgICBfTV9wYmFja19jdXJfc2F2ZSA9IF9NX2luX2N1cjsN CiAgICAgICAgICAgIF9NX3BiYWNrX2VuZF9zYXZlID0gX01faW5fZW5kOw0KICAgICAgICAgICAg dGhpcy0+c2V0ZyhfTV9wYmFjaywgX01fcGJhY2ssIF9NX3BiYWNrICsgX19sZW4pOw0KICAgICAg ICAgICAgX01fcGJhY2tfaW5pdCA9IHRydWU7DQogICAgICAgICAgfQ0KICAgICAgfQ0KDQoNCg0K DQogICAgICB2b2lkDQogICAgICBfTV9wYmFja19kZXN0cm95KCkNCiAgICAgIHsNCiAgICAgICAg aWYgKF9NX3BiYWNrX2luaXQpDQogICAgICAgICAgew0KDQogICAgICAgICAgICBpbnRfdHlwZSBf X29mZl9jdXIgPSBfTV9pbl9jdXIgLSBfTV9wYmFjazsNCg0KDQogICAgICAgICAgICBpbnRfdHlw ZSBfX29mZl9lbmQgPSAwOw0KICAgICAgICAgICAgaW50X3R5cGUgX19wYmFja19sZW4gPSBfTV9p bl9lbmQgLSBfTV9wYmFjazsNCiAgICAgICAgICAgIGludF90eXBlIF9fc2F2ZV9sZW4gPSBfTV9w YmFja19lbmRfc2F2ZSAtIF9NX2J1ZjsNCiAgICAgICAgICAgIGlmIChfX3BiYWNrX2xlbiA+IF9f c2F2ZV9sZW4pDQogICAgICAgICAgICAgIF9fb2ZmX2VuZCA9IF9fcGJhY2tfbGVuIC0gX19zYXZl X2xlbjsNCg0KICAgICAgICAgICAgdGhpcy0+c2V0ZyhfTV9idWYsIF9NX3BiYWNrX2N1cl9zYXZl ICsgX19vZmZfY3VyLA0KICAgICAgICAgICAgICAgICAgICAgICBfTV9wYmFja19lbmRfc2F2ZSAr IF9fb2ZmX2VuZCk7DQogICAgICAgICAgICBfTV9wYmFja19jdXJfc2F2ZSA9IF9fbnVsbDsNCiAg ICAgICAgICAgIF9NX3BiYWNrX2VuZF9zYXZlID0gX19udWxsOw0KICAgICAgICAgICAgX01fcGJh Y2tfaW5pdCA9IGZhbHNlOw0KICAgICAgICAgIH0NCiAgICAgIH0NCg0KDQoNCiAgICAgIHZvaWQN CiAgICAgIF9NX2luX2N1cl9tb3ZlKG9mZl90eXBlIF9fbikNCiAgICAgIHsNCiAgICAgICAgYm9v bCBfX3Rlc3RvdXQgPSBfTV9vdXRfY3VyOw0KICAgICAgICBfTV9pbl9jdXIgKz0gX19uOw0KICAg ICAgICBpZiAoX190ZXN0b3V0ICYmIF9NX2J1Zl91bmlmaWVkKQ0KICAgICAgICAgIF9NX291dF9j dXIgKz0gX19uOw0KICAgICAgfQ0KIyAxOTggInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysr LXYzL3N0cmVhbWJ1ZiIgMw0KICAgICAgdm9pZA0KICAgICAgX01fb3V0X2N1cl9tb3ZlKG9mZl90 eXBlIF9fbikNCiAgICAgIHsNCiAgICAgICAgYm9vbCBfX3Rlc3RpbiA9IF9NX2luX2N1cjsNCg0K ICAgICAgICBfTV9vdXRfY3VyICs9IF9fbjsNCiAgICAgICAgaWYgKF9fdGVzdGluICYmIF9NX2J1 Zl91bmlmaWVkKQ0KICAgICAgICAgIF9NX2luX2N1ciArPSBfX247DQogICAgICAgIGlmIChfTV9v dXRfY3VyID4gX01fb3V0X2VuZCkNCiAgICAgICAgICB7DQogICAgICAgICAgICBfTV9vdXRfZW5k ID0gX01fb3V0X2N1cjsNCg0KICAgICAgICAgICAgaWYgKF9fdGVzdGluKQ0KICAgICAgICAgICAg ICBfTV9pbl9lbmQgKz0gX19uOw0KICAgICAgICAgIH0NCiAgICAgIH0NCg0KDQoNCg0KICAgICAg b2ZmX3R5cGUNCiAgICAgIF9NX291dF9idWZfc2l6ZSgpDQogICAgICB7DQogICAgICAgIG9mZl90 eXBlIF9fcmV0ID0gMDsNCiAgICAgICAgaWYgKF9NX291dF9jdXIpDQogICAgICAgICAgew0KDQog ICAgICAgICAgICBpZiAoX01fb3V0X2JlZyA9PSBfTV9idWYpDQogICAgICAgICAgICAgIF9fcmV0 ID0gX01fb3V0X2JlZyArIF9NX2J1Zl9zaXplIC0gX01fb3V0X2N1cjsNCg0KICAgICAgICAgICAg ZWxzZQ0KICAgICAgICAgICAgICBfX3JldCA9IF9NX291dF9lbmQgLSBfTV9vdXRfY3VyOw0KICAg ICAgICAgIH0NCiAgICAgICAgcmV0dXJuIF9fcmV0Ow0KICAgICAgfQ0KDQogIHB1YmxpYzoNCiAg ICAgIHZpcnR1YWwNCiAgICAgIH5iYXNpY19zdHJlYW1idWYoKQ0KICAgICAgew0KICAgICAgICBf TV9idWZfdW5pZmllZCA9IGZhbHNlOw0KICAgICAgICBfTV9idWZfc2l6ZSA9IDA7DQogICAgICAg IF9NX2J1Zl9zaXplX29wdCA9IDA7DQogICAgICAgIF9NX21vZGUgPSBpb3NfYmFzZTo6b3Blbm1v ZGUoMCk7DQogICAgICAgIF9NX2J1Zl9sb2NhbGVfaW5pdCA9IGZhbHNlOw0KICAgICAgfQ0KDQoN CiAgICAgIGxvY2FsZQ0KICAgICAgcHViaW1idWUoY29uc3QgbG9jYWxlICZfX2xvYykNCiAgICAg IHsNCiAgICAgICAgbG9jYWxlIF9fdG1wKHRoaXMtPmdldGxvYygpKTsNCiAgICAgICAgdGhpcy0+ aW1idWUoX19sb2MpOw0KICAgICAgICByZXR1cm4gX190bXA7DQogICAgICB9DQoNCiAgICAgIGxv Y2FsZQ0KICAgICAgZ2V0bG9jKCkgY29uc3QNCiAgICAgIHsNCiAgICAgICAgaWYgKF9NX2J1Zl9s b2NhbGVfaW5pdCkNCiAgICAgICAgICByZXR1cm4gX01fYnVmX2xvY2FsZTsNCiAgICAgICAgZWxz ZQ0KICAgICAgICAgIHJldHVybiBsb2NhbGUoKTsNCiAgICAgIH0NCg0KDQogICAgICBfX3N0cmVh bWJ1Zl90eXBlKg0KICAgICAgcHVic2V0YnVmKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9f bikNCiAgICAgIHsgcmV0dXJuIHRoaXMtPnNldGJ1ZihfX3MsIF9fbik7IH0NCg0KICAgICAgcG9z X3R5cGUNCiAgICAgIHB1YnNlZWtvZmYob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGly IF9fd2F5LA0KICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9z X2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkNCiAgICAgIHsgcmV0dXJuIHRoaXMtPnNlZWtvZmYo X19vZmYsIF9fd2F5LCBfX21vZGUpOyB9DQoNCiAgICAgIHBvc190eXBlDQogICAgICBwdWJzZWVr cG9zKHBvc190eXBlIF9fc3AsDQogICAgICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBf X21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQ0KICAgICAgeyByZXR1cm4gdGhp cy0+c2Vla3BvcyhfX3NwLCBfX21vZGUpOyB9DQoNCiAgICAgIGludA0KICAgICAgcHVic3luYygp IHsgcmV0dXJuIHRoaXMtPnN5bmMoKTsgfQ0KDQoNCg0KICAgICAgc3RyZWFtc2l6ZQ0KICAgICAg aW5fYXZhaWwoKQ0KICAgICAgew0KICAgICAgICBzdHJlYW1zaXplIF9fcmV0Ow0KICAgICAgICBp ZiAoX01faW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZCkNCiAgICAgICAgICB7DQogICAg ICAgICAgICBpZiAoX01fcGJhY2tfaW5pdCkNCiAgICAgICAgICAgICAgew0KICAgICAgICAgICAg ICAgIGludF90eXBlIF9fc2F2ZV9sZW4gPSBfTV9wYmFja19lbmRfc2F2ZSAtIF9NX3BiYWNrX2N1 cl9zYXZlOw0KICAgICAgICAgICAgICAgIGludF90eXBlIF9fcGJhY2tfbGVuID0gX01faW5fY3Vy IC0gX01fcGJhY2s7DQogICAgICAgICAgICAgICAgX19yZXQgPSBfX3NhdmVfbGVuIC0gX19wYmFj a19sZW47DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAg X19yZXQgPSB0aGlzLT5lZ3B0cigpIC0gdGhpcy0+Z3B0cigpOw0KICAgICAgICAgIH0NCiAgICAg ICAgZWxzZQ0KICAgICAgICAgIF9fcmV0ID0gdGhpcy0+c2hvd21hbnljKCk7DQogICAgICAgIHJl dHVybiBfX3JldDsNCiAgICAgIH0NCg0KICAgICAgaW50X3R5cGUNCiAgICAgIHNuZXh0YygpDQog ICAgICB7DQogICAgICAgIGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOw0KICAg ICAgICByZXR1cm4gKHRoaXMtPnNidW1wYygpID09IF9fZW9mID8gX19lb2YgOiB0aGlzLT5zZ2V0 YygpKTsNCiAgICAgIH0NCg0KICAgICAgaW50X3R5cGUNCiAgICAgIHNidW1wYygpOw0KDQogICAg ICBpbnRfdHlwZQ0KICAgICAgc2dldGMoKQ0KICAgICAgew0KICAgICAgICBpbnRfdHlwZSBfX3Jl dDsNCiAgICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpDQogICAg ICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKih0aGlzLT5ncHRyKCkpKTsN CiAgICAgICAgZWxzZQ0KICAgICAgICAgIF9fcmV0ID0gdGhpcy0+dW5kZXJmbG93KCk7DQogICAg ICAgIHJldHVybiBfX3JldDsNCiAgICAgIH0NCg0KICAgICAgc3RyZWFtc2l6ZQ0KICAgICAgc2dl dG4oY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQ0KICAgICAgeyByZXR1cm4gdGhpcy0+ eHNnZXRuKF9fcywgX19uKTsgfQ0KDQoNCiAgICAgIGludF90eXBlDQogICAgICBzcHV0YmFja2Mo Y2hhcl90eXBlIF9fYyk7DQoNCiAgICAgIGludF90eXBlDQogICAgICBzdW5nZXRjKCk7DQoNCg0K ICAgICAgaW50X3R5cGUNCiAgICAgIHNwdXRjKGNoYXJfdHlwZSBfX2MpOw0KDQogICAgICBzdHJl YW1zaXplDQogICAgICBzcHV0bihjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24p DQogICAgICB7IHJldHVybiB0aGlzLT54c3B1dG4oX19zLCBfX24pOyB9DQoNCiAgICBwcm90ZWN0 ZWQ6DQogICAgICBiYXNpY19zdHJlYW1idWYoKQ0KICAgICAgOiBfTV9idWYoX19udWxsKSwgX01f YnVmX3NpemUoMCksDQogICAgICBfTV9idWZfc2l6ZV9vcHQoc3RhdGljX2Nhc3Q8aW50X3R5cGU+ KDUxMikpLCBfTV9idWZfdW5pZmllZChmYWxzZSksDQogICAgICBfTV9pbl9iZWcoMCksIF9NX2lu X2N1cigwKSwgX01faW5fZW5kKDApLCBfTV9vdXRfYmVnKDApLCBfTV9vdXRfY3VyKDApLA0KICAg ICAgX01fb3V0X2VuZCgwKSwgX01fbW9kZShpb3NfYmFzZTo6b3Blbm1vZGUoMCkpLCBfTV9idWZf bG9jYWxlKGxvY2FsZSgpKSwNCiAgICAgIF9NX2J1Zl9sb2NhbGVfaW5pdChmYWxzZSksIF9NX3Bi YWNrX2N1cl9zYXZlKDApLCBfTV9wYmFja19lbmRfc2F2ZSgwKSwNCiAgICAgIF9NX3BiYWNrX2lu aXQoZmFsc2UpDQogICAgICB7IH0NCg0KDQogICAgICBjaGFyX3R5cGUqDQogICAgICBlYmFjaygp IGNvbnN0IHsgcmV0dXJuIF9NX2luX2JlZzsgfQ0KDQogICAgICBjaGFyX3R5cGUqDQogICAgICBn cHRyKCkgY29uc3QgeyByZXR1cm4gX01faW5fY3VyOyB9DQoNCiAgICAgIGNoYXJfdHlwZSoNCiAg ICAgIGVncHRyKCkgY29uc3QgeyByZXR1cm4gX01faW5fZW5kOyB9DQoNCiAgICAgIHZvaWQNCiAg ICAgIGdidW1wKGludCBfX24pIHsgX01faW5fY3VyICs9IF9fbjsgfQ0KDQogICAgICB2b2lkDQog ICAgICBzZXRnKGNoYXJfdHlwZSogX19nYmVnLCBjaGFyX3R5cGUqIF9fZ25leHQsIGNoYXJfdHlw ZSogX19nZW5kKQ0KICAgICAgew0KICAgICAgICBfTV9pbl9iZWcgPSBfX2diZWc7DQogICAgICAg IF9NX2luX2N1ciA9IF9fZ25leHQ7DQogICAgICAgIF9NX2luX2VuZCA9IF9fZ2VuZDsNCiAgICAg ICAgaWYgKCEoX01fbW9kZSAmIGlvc19iYXNlOjppbikgJiYgX19nYmVnICYmIF9fZ25leHQgJiYg X19nZW5kKQ0KICAgICAgICAgIF9NX21vZGUgPSBfTV9tb2RlIHwgaW9zX2Jhc2U6OmluOw0KICAg ICAgfQ0KDQoNCiAgICAgIGNoYXJfdHlwZSoNCiAgICAgIHBiYXNlKCkgY29uc3QgeyByZXR1cm4g X01fb3V0X2JlZzsgfQ0KDQogICAgICBjaGFyX3R5cGUqDQogICAgICBwcHRyKCkgY29uc3QgeyBy ZXR1cm4gX01fb3V0X2N1cjsgfQ0KDQogICAgICBjaGFyX3R5cGUqDQogICAgICBlcHB0cigpIGNv bnN0IHsgcmV0dXJuIF9NX291dF9lbmQ7IH0NCg0KICAgICAgdm9pZA0KICAgICAgcGJ1bXAoaW50 IF9fbikgeyBfTV9vdXRfY3VyICs9IF9fbjsgfQ0KDQogICAgICB2b2lkDQogICAgICBzZXRwKGNo YXJfdHlwZSogX19wYmVnLCBjaGFyX3R5cGUqIF9fcGVuZCkNCiAgICAgIHsNCiAgICAgICAgX01f b3V0X2JlZyA9IF9NX291dF9jdXIgPSBfX3BiZWc7DQogICAgICAgIF9NX291dF9lbmQgPSBfX3Bl bmQ7DQogICAgICAgIGlmICghKF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0KSAmJiBfX3BiZWcgJiYg X19wZW5kKQ0KICAgICAgICAgIF9NX21vZGUgPSBfTV9tb2RlIHwgaW9zX2Jhc2U6Om91dDsNCiAg ICAgIH0NCg0KDQoNCiAgICAgIHZpcnR1YWwgdm9pZA0KICAgICAgaW1idWUoY29uc3QgbG9jYWxl JiBfX2xvYykNCiAgICAgIHsNCiAgICAgICAgX01fYnVmX2xvY2FsZV9pbml0ID0gdHJ1ZTsNCiAg ICAgICAgaWYgKF9NX2J1Zl9sb2NhbGUgIT0gX19sb2MpDQogICAgICAgICAgX01fYnVmX2xvY2Fs ZSA9IF9fbG9jOw0KICAgICAgfQ0KDQoNCiAgICAgIHZpcnR1YWwgYmFzaWNfc3RyZWFtYnVmPGNo YXJfdHlwZSxfVHJhaXRzPioNCiAgICAgIHNldGJ1ZihjaGFyX3R5cGUqLCBzdHJlYW1zaXplKQ0K ICAgICAgeyByZXR1cm4gdGhpczsgfQ0KDQogICAgICB2aXJ0dWFsIHBvc190eXBlDQogICAgICBz ZWVrb2ZmKG9mZl90eXBlLCBpb3NfYmFzZTo6c2Vla2RpciwNCiAgICAgICAgICAgICAgaW9zX2Jh c2U6Om9wZW5tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkNCiAgICAgIHsgcmV0 dXJuIHBvc190eXBlKG9mZl90eXBlKC0xKSk7IH0NCg0KICAgICAgdmlydHVhbCBwb3NfdHlwZQ0K ICAgICAgc2Vla3Bvcyhwb3NfdHlwZSwNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2Rl ID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkNCiAgICAgIHsgcmV0dXJuIHBvc190eXBl KG9mZl90eXBlKC0xKSk7IH0NCg0KICAgICAgdmlydHVhbCBpbnQNCiAgICAgIHN5bmMoKSB7IHJl dHVybiAwOyB9DQoNCg0KICAgICAgdmlydHVhbCBzdHJlYW1zaXplDQogICAgICBzaG93bWFueWMo KSB7IHJldHVybiAwOyB9DQoNCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQ0KICAgICAgeHNnZXRu KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7DQoNCiAgICAgIHZpcnR1YWwgaW50X3R5 cGUNCiAgICAgIHVuZGVyZmxvdygpDQogICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7 IH0NCg0KICAgICAgdmlydHVhbCBpbnRfdHlwZQ0KICAgICAgdWZsb3coKQ0KICAgICAgew0KICAg ICAgICBpbnRfdHlwZSBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsNCiAgICAgICAgYm9vbCBf X3Rlc3Rlb2YgPSB0aGlzLT51bmRlcmZsb3coKSA9PSBfX3JldDsNCiAgICAgICAgYm9vbCBfX3Rl c3RwZW5kaW5nID0gX01faW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZDsNCiAgICAgICAg aWYgKCFfX3Rlc3Rlb2YgJiYgX190ZXN0cGVuZGluZykNCiAgICAgICAgICB7DQogICAgICAgICAg ICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX01faW5fY3VyKTsNCiAgICAgICAg ICAgICsrX01faW5fY3VyOw0KICAgICAgICAgICAgaWYgKF9NX2J1Zl91bmlmaWVkICYmIF9NX21v ZGUgJiBpb3NfYmFzZTo6b3V0KQ0KICAgICAgICAgICAgICArK19NX291dF9jdXI7DQogICAgICAg ICAgfQ0KICAgICAgICByZXR1cm4gX19yZXQ7DQogICAgICB9DQoNCg0KICAgICAgdmlydHVhbCBp bnRfdHlwZQ0KICAgICAgcGJhY2tmYWlsKGludF90eXBlID0gdHJhaXRzX3R5cGU6OmVvZigpKQ0K ICAgICAgeyByZXR1cm4gdHJhaXRzX3R5cGU6OmVvZigpOyB9DQoNCg0KICAgICAgdmlydHVhbCBz dHJlYW1zaXplDQogICAgICB4c3B1dG4oY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUg X19uKTsNCg0KICAgICAgdmlydHVhbCBpbnRfdHlwZQ0KICAgICAgb3ZlcmZsb3coaW50X3R5cGUg PSB0cmFpdHNfdHlwZTo6ZW9mKCkpDQogICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7 IH0NCiMgNDgwICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9zdHJlYW1idWYiIDMN CiAgICBwcml2YXRlOg0KICAgICAgYmFzaWNfc3RyZWFtYnVmKGNvbnN0IF9fc3RyZWFtYnVmX3R5 cGUmKSB7IH07DQoNCiAgICAgIF9fc3RyZWFtYnVmX3R5cGUmDQogICAgICBvcGVyYXRvcj0oY29u c3QgX19zdHJlYW1idWZfdHlwZSYpIHsgcmV0dXJuICp0aGlzOyB9Ow0KDQogICAgfTsNCn0NCg0K DQoNCg0KDQojIDEgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RyZWFt YnVmLnRjYyIgMSAzDQojIDM5ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRz L3N0cmVhbWJ1Zi50Y2MiIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgY29uc3QgdHlwZW5hbWUgYmFzaWNfc3Ry ZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlDQogICAgYmFzaWNfc3RyZWFtYnVmPF9D aGFyVCwgX1RyYWl0cz46Ol9TX3BiYWNrX3NpemU7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hh clQsIF9UcmFpdHM+OjppbnRfdHlwZQ0KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFp dHM+OjoNCiAgICBzYnVtcGMoKQ0KICAgIHsNCiAgICAgIGludF90eXBlIF9fcmV0Ow0KICAgICAg aWYgKF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpDQogICAgICAgIHsNCiAgICAg ICAgICBjaGFyX3R5cGUgX19jID0gKih0aGlzLT5ncHRyKCkpOw0KICAgICAgICAgIF9NX2luX2N1 cl9tb3ZlKDEpOw0KICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9f Yyk7DQogICAgICAgIH0NCiAgICAgIGVsc2UNCiAgICAgICAgX19yZXQgPSB0aGlzLT51Zmxvdygp Ow0KICAgICAgcmV0dXJuIF9fcmV0Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgdHlwZW5hbWUgYmFzaWNfc3RyZWFtYnVmPF9DaGFy VCwgX1RyYWl0cz46OmludF90eXBlDQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0 cz46Og0KICAgIHNwdXRiYWNrYyhjaGFyX3R5cGUgX19jKQ0KICAgIHsNCiAgICAgIGludF90eXBl IF9fcmV0Ow0KICAgICAgYm9vbCBfX3Rlc3Rwb3MgPSBfTV9pbl9jdXIgJiYgX01faW5fYmVnIDwg X01faW5fY3VyOw0KICAgICAgYm9vbCBfX3Rlc3RuZSA9IF9NX2luX2N1ciAmJiAhdHJhaXRzX3R5 cGU6OmVxKF9fYywgdGhpcy0+Z3B0cigpWy0xXSk7DQogICAgICBpZiAoIV9fdGVzdHBvcyB8fCBf X3Rlc3RuZSkNCiAgICAgICAgX19yZXQgPSBwYmFja2ZhaWwodHJhaXRzX3R5cGU6OnRvX2ludF90 eXBlKF9fYykpOw0KICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgX01faW5fY3VyX21v dmUoLTEpOw0KICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCp0aGlz LT5ncHRyKCkpOw0KICAgICAgICB9DQogICAgICByZXR1cm4gX19yZXQ7DQogICAgfQ0KDQogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICB0eXBlbmFtZSBi YXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUNCiAgICBiYXNpY19zdHJl YW1idWY8X0NoYXJULCBfVHJhaXRzPjo6DQogICAgc3VuZ2V0YygpDQogICAgew0KICAgICAgaW50 X3R5cGUgX19yZXQ7DQogICAgICBpZiAoX01faW5fY3VyICYmIF9NX2luX2JlZyA8IF9NX2luX2N1 cikNCiAgICAgICAgew0KICAgICAgICAgIF9NX2luX2N1cl9tb3ZlKC0xKTsNCiAgICAgICAgICBf X3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX01faW5fY3VyKTsNCiAgICAgICAgfQ0K ICAgICAgZWxzZQ0KICAgICAgICBfX3JldCA9IHRoaXMtPnBiYWNrZmFpbCgpOw0KICAgICAgcmV0 dXJuIF9fcmV0Ow0KICAgIH0NCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQs IF9UcmFpdHM+OjppbnRfdHlwZQ0KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+ OjoNCiAgICBzcHV0YyhjaGFyX3R5cGUgX19jKQ0KICAgIHsNCiAgICAgIGludF90eXBlIF9fcmV0 Ow0KICAgICAgaWYgKF9NX291dF9idWZfc2l6ZSgpKQ0KICAgICAgICB7DQogICAgICAgICAgKl9N X291dF9jdXIgPSBfX2M7DQogICAgICAgICAgX01fb3V0X2N1cl9tb3ZlKDEpOw0KICAgICAgICAg IF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYyk7DQogICAgICAgIH0NCiAgICAg IGVsc2UNCiAgICAgICAgX19yZXQgPSB0aGlzLT5vdmVyZmxvdyh0cmFpdHNfdHlwZTo6dG9faW50 X3R5cGUoX19jKSk7DQogICAgICByZXR1cm4gX19yZXQ7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBzdHJlYW1zaXplDQogICAgYmFz aWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIHhzZ2V0bihjaGFyX3R5cGUqIF9f cywgc3RyZWFtc2l6ZSBfX24pDQogICAgew0KICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IDA7DQog ICAgICB3aGlsZSAoX19yZXQgPCBfX24pDQogICAgICAgIHsNCiAgICAgICAgICBzaXplX3QgX19i dWZfbGVuID0gX01faW5fZW5kIC0gX01faW5fY3VyOw0KICAgICAgICAgIGlmIChfX2J1Zl9sZW4g PiAwKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBzaXplX3QgX19yZW1haW5pbmcgPSBf X24gLSBfX3JldDsNCiAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuID0gbWluKF9fYnVmX2xlbiwg X19yZW1haW5pbmcpOw0KICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3MsIF9NX2lu X2N1ciwgX19sZW4pOw0KICAgICAgICAgICAgICBfX3JldCArPSBfX2xlbjsNCiAgICAgICAgICAg ICAgX19zICs9IF9fbGVuOw0KICAgICAgICAgICAgICBfTV9pbl9jdXJfbW92ZShfX2xlbik7DQog ICAgICAgICAgICB9DQoNCiAgICAgICAgICBpZiAoX19yZXQgPCBfX24pDQogICAgICAgICAgICB7 DQogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IHRoaXMtPnVmbG93KCk7DQogICAgICAgICAg ICAgIGlmIChfX2MgIT0gdHJhaXRzX3R5cGU6OmVvZigpKQ0KICAgICAgICAgICAgICAgIHsNCiAg ICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oKl9fcysrLCB0cmFpdHNfdHlwZTo6 dG9fY2hhcl90eXBlKF9fYykpOw0KICAgICAgICAgICAgICAgICAgKytfX3JldDsNCiAgICAgICAg ICAgICAgICB9DQogICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICBicmVhazsNCiAg ICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuIF9fcmV0Ow0KICAgIH0NCg0KDQoN Cg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAg IHN0cmVhbXNpemUNCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6DQogICAg eHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikNCiAgICB7DQogICAg ICBzdHJlYW1zaXplIF9fcmV0ID0gMDsNCiAgICAgIHdoaWxlIChfX3JldCA8IF9fbikNCiAgICAg ICAgew0KICAgICAgICAgIG9mZl90eXBlIF9fYnVmX2xlbiA9IF9NX291dF9idWZfc2l6ZSgpOw0K ICAgICAgICAgIGlmIChfX2J1Zl9sZW4gPiAwKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAg ICBvZmZfdHlwZSBfX3JlbWFpbmluZyA9IF9fbiAtIF9fcmV0Ow0KICAgICAgICAgICAgICBvZmZf dHlwZSBfX2xlbiA9IG1pbihfX2J1Zl9sZW4sIF9fcmVtYWluaW5nKTsNCiAgICAgICAgICAgICAg dHJhaXRzX3R5cGU6OmNvcHkoX01fb3V0X2N1ciwgX19zLCBfX2xlbik7DQogICAgICAgICAgICAg IF9fcmV0ICs9IF9fbGVuOw0KICAgICAgICAgICAgICBfX3MgKz0gX19sZW47DQogICAgICAgICAg ICAgIF9NX291dF9jdXJfbW92ZShfX2xlbik7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICBp ZiAoX19yZXQgPCBfX24pDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGludF90eXBlIF9f YyA9IHRoaXMtPm92ZXJmbG93KHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX19zKSk7DQogICAg ICAgICAgICAgIGlmIChfX2MgIT0gdHJhaXRzX3R5cGU6OmVvZigpKQ0KICAgICAgICAgICAgICAg IHsNCiAgICAgICAgICAgICAgICAgICsrX19yZXQ7DQogICAgICAgICAgICAgICAgICArK19fczsN CiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICBi cmVhazsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuIF9fcmV0Ow0KICAg IH0NCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cz4NCiAgICBzdHJlYW1zaXplDQogICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNfaW9zPF9DaGFy VCwgX1RyYWl0cz4mIF9faW9zLA0KICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1 ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiaW4sDQogICAgICAgICAgICAgICAgICAgICAgYmFzaWNf c3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JvdXQpDQogIHsNCiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7DQoNCiAgICAgIHN0cmVhbXNpemUg X19yZXQgPSAwOw0KICAgICAgc3RyZWFtc2l6ZSBfX2J1ZnNpemUgPSBfX3NiaW4tPmluX2F2YWls KCk7DQogICAgICBzdHJlYW1zaXplIF9feHRyY3Q7DQogICAgICBib29sIF9fdGVzdHB1dCA9IF9f c2JvdXQtPl9NX21vZGUgJiBpb3NfYmFzZTo6b3V0Ow0KICAgICAgaWYgKHRydWUpDQogICAgICAg IHsNCiAgICAgICAgICB3aGlsZSAoX190ZXN0cHV0ICYmIF9fYnVmc2l6ZSAhPSAtMSkNCiAgICAg ICAgICAgIHsNCiAgICAgICAgICAgICAgX194dHJjdCA9IF9fc2JvdXQtPnNwdXRuKF9fc2Jpbi0+ Z3B0cigpLCBfX2J1ZnNpemUpOw0KICAgICAgICAgICAgICBfX3JldCArPSBfX3h0cmN0Ow0KICAg ICAgICAgICAgICBfX3NiaW4tPl9NX2luX2N1cl9tb3ZlKF9feHRyY3QpOw0KICAgICAgICAgICAg ICBpZiAoX194dHJjdCA9PSBfX2J1ZnNpemUpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAg ICAgICAgICAgaWYgKF9fc2Jpbi0+c2dldGMoKSA9PSBfVHJhaXRzOjplb2YoKSkNCiAgICAgICAg ICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICBfX2J1ZnNpemUgPSBfX3NiaW4t PmluX2F2YWlsKCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBlbHNlDQogICAg ICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIGlmIChm YWxzZSkNCiAgICAgICAgew0KICAgICAgICAgIF9faW9zLnNldHN0YXRlKGlvc19iYXNlOjpmYWls Yml0KTsNCiAgICAgICAgICBpZiAoKF9faW9zLmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpmYWls Yml0KSAhPSAwKQ0KICAgICAgICAgICAgOw0KICAgICAgICB9DQogICAgICByZXR1cm4gX19yZXQ7 DQogICAgfQ0KDQoNCg0KDQogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJlYW1idWY8 Y2hhcj47DQogIGV4dGVybiB0ZW1wbGF0ZQ0KICAgIHN0cmVhbXNpemUNCiAgICBfX2NvcHlfc3Ry ZWFtYnVmcyhiYXNpY19pb3M8Y2hhcj4mLCBiYXNpY19zdHJlYW1idWY8Y2hhcj4qLA0KICAgICAg ICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyPiopOw0KDQogIGV4dGVybiB0ZW1w bGF0ZSBjbGFzcyBiYXNpY19zdHJlYW1idWY8d2NoYXJfdD47DQogIGV4dGVybiB0ZW1wbGF0ZQ0K ICAgIHN0cmVhbXNpemUNCiAgICBfX2NvcHlfc3RyZWFtYnVmcyhiYXNpY19pb3M8d2NoYXJfdD4m LCBiYXNpY19zdHJlYW1idWY8d2NoYXJfdD4qLA0KICAgICAgICAgICAgICAgICAgICAgIGJhc2lj X3N0cmVhbWJ1Zjx3Y2hhcl90PiopOw0KfQ0KIyA0OTQgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1 ZGUvZysrLXYzL3N0cmVhbWJ1ZiIgMiAzDQojIDUxICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRl L2crKy12My9pb3MiIDIgMw0KIyAxICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9i aXRzL2Jhc2ljX2lvcy5oIiAxIDMNCiMgMzkgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysr LXYzL2JpdHMvYmFzaWNfaW9zLmgiIDMNCg0KIyAxICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRl L2crKy12My9iaXRzL3N0cmVhbWJ1Zl9pdGVyYXRvci5oIiAxIDMNCiMgNDIgInQ6L21zeXMvMS4w L21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RyZWFtYnVmX2l0ZXJhdG9yLmgiIDMNCg0KbmFt ZXNwYWNlIHN0ZA0Kew0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4NCiAgICBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9yDQogICAgOiBwdWJsaWMgaXRlcmF0 b3I8aW5wdXRfaXRlcmF0b3JfdGFnLCBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBl LA0KICAgICAgICAgICAgICAgICAgICAgIF9DaGFyVCosIF9DaGFyVCY+DQogICAgew0KICAgIHB1 YmxpYzoNCg0KICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBf VHJhaXRzIHRyYWl0c190eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRf dHlwZSBpbnRfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry YWl0cz4gc3RyZWFtYnVmX3R5cGU7DQogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPiBpc3RyZWFtX3R5cGU7DQoNCiAgICBwcml2YXRlOg0KDQoNCg0KDQoNCg0KDQog ICAgICBtdXRhYmxlIHN0cmVhbWJ1Zl90eXBlKiBfTV9zYnVmOw0KICAgICAgaW50X3R5cGUgX01f YzsNCg0KICAgIHB1YmxpYzoNCiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3IoKSB0aHJvdygpDQog ICAgICA6IF9NX3NidWYoMCksIF9NX2MoLTIpIHsgfQ0KDQogICAgICBpc3RyZWFtYnVmX2l0ZXJh dG9yKGlzdHJlYW1fdHlwZSYgX19zKSB0aHJvdygpDQogICAgICA6IF9NX3NidWYoX19zLnJkYnVm KCkpLCBfTV9jKC0yKSB7IH0NCg0KICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcihzdHJlYW1idWZf dHlwZSogX19zKSB0aHJvdygpDQogICAgICA6IF9NX3NidWYoX19zKSwgX01fYygtMikgeyB9DQoN Cg0KICAgICAgY2hhcl90eXBlDQogICAgICBvcGVyYXRvciooKSBjb25zdA0KICAgICAgeyByZXR1 cm4gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfTV9nZXQoKSk7IH0NCg0KICAgICAgaXN0cmVh bWJ1Zl9pdGVyYXRvciYNCiAgICAgIG9wZXJhdG9yKysoKQ0KICAgICAgew0KICAgICAgICBpZiAo X01fc2J1ZiAmJiBfTV9zYnVmLT5zYnVtcGMoKSA9PSB0cmFpdHNfdHlwZTo6ZW9mKCkpDQogICAg ICAgICAgX01fc2J1ZiA9IDA7DQogICAgICAgIGVsc2UNCiAgICAgICAgICBfTV9jID0gLTI7DQog ICAgICAgIHJldHVybiAqdGhpczsNCiAgICAgIH0NCg0KICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRv cg0KICAgICAgb3BlcmF0b3IrKyhpbnQpDQogICAgICB7DQogICAgICAgIGlzdHJlYW1idWZfaXRl cmF0b3IgX19vbGQgPSAqdGhpczsNCiAgICAgICAgaWYgKF9NX3NidWYgJiYgKF9fb2xkLl9NX2Mg PSBfTV9zYnVmLT5zYnVtcGMoKSkgPT0gdHJhaXRzX3R5cGU6OmVvZigpKQ0KICAgICAgICAgIF9N X3NidWYgPSAwOw0KICAgICAgICBlbHNlDQogICAgICAgICAgX01fYyA9IC0yOw0KICAgICAgICBy ZXR1cm4gX19vbGQ7DQogICAgICB9DQoNCg0KDQoNCiAgICAgIGJvb2wNCiAgICAgIGVxdWFsKGNv bnN0IGlzdHJlYW1idWZfaXRlcmF0b3ImIF9fYikgY29uc3QNCiAgICAgIHsNCiAgICAgICAgY29u c3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7DQogICAgICAgIGJvb2wgX190 aGlzZW9mID0gX01fZ2V0KCkgPT0gX19lb2Y7DQogICAgICAgIGJvb2wgX19iZW9mID0gX19iLl9N X2dldCgpID09IF9fZW9mOw0KICAgICAgICByZXR1cm4gKF9fdGhpc2VvZiAmJiBfX2Jlb2YgfHwg KCFfX3RoaXNlb2YgJiYgIV9fYmVvZikpOw0KICAgICAgfQ0KDQoNCiAgICBwcml2YXRlOg0KICAg ICAgaW50X3R5cGUNCiAgICAgIF9NX2dldCgpIGNvbnN0DQogICAgICB7DQogICAgICAgIGludF90 eXBlIF9fcmV0ID0gdHJhaXRzX3R5cGU6OmVvZigpOw0KICAgICAgICBpZiAoX01fc2J1ZikNCiAg ICAgICAgICB7DQogICAgICAgICAgICBpZiAoX01fYyAhPSBzdGF0aWNfY2FzdDxpbnRfdHlwZT4o LTIpKQ0KICAgICAgICAgICAgICBfX3JldCA9IF9NX2M7DQogICAgICAgICAgICBlbHNlDQogICAg ICAgICAgICAgIGlmICgoX19yZXQgPSBfTV9zYnVmLT5zZ2V0YygpKSA9PSB0cmFpdHNfdHlwZTo6 ZW9mKCkpDQogICAgICAgICAgICAgICAgX01fc2J1ZiA9IDA7DQogICAgICAgICAgfQ0KICAgICAg ICByZXR1cm4gX19yZXQ7DQogICAgICB9DQogICAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRvcj09 KGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19hLA0KICAgICAg ICAgICAgICAgY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX2Ip DQogICAgeyByZXR1cm4gX19hLmVxdWFsKF9fYik7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRvciE9 KGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19hLA0KICAgICAg ICAgICAgICAgY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX2Ip DQogICAgeyByZXR1cm4gIV9fYS5lcXVhbChfX2IpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0b3IN CiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2 b2lkLCB2b2lkPg0KICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo YXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsNCiAgICAgIHR5cGVk ZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gc3RyZWFtYnVmX3R5cGU7DQogICAg ICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBvc3RyZWFtX3R5cGU7DQoN CiAgICBwcml2YXRlOg0KICAgICAgc3RyZWFtYnVmX3R5cGUqIF9NX3NidWY7DQogICAgICBib29s IF9NX2ZhaWxlZDsNCg0KICAgIHB1YmxpYzoNCiAgICAgIGlubGluZQ0KICAgICAgb3N0cmVhbWJ1 Zl9pdGVyYXRvcihvc3RyZWFtX3R5cGUmIF9fcykgdGhyb3cgKCkNCiAgICAgIDogX01fc2J1Zihf X3MucmRidWYoKSksIF9NX2ZhaWxlZCghX01fc2J1ZikgeyB9DQoNCiAgICAgIG9zdHJlYW1idWZf aXRlcmF0b3Ioc3RyZWFtYnVmX3R5cGUqIF9fcykgdGhyb3cgKCkNCiAgICAgIDogX01fc2J1Zihf X3MpLCBfTV9mYWlsZWQoIV9NX3NidWYpIHsgfQ0KDQogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9y Jg0KICAgICAgb3BlcmF0b3I9KF9DaGFyVCBfX2MpOw0KDQogICAgICBvc3RyZWFtYnVmX2l0ZXJh dG9yJg0KICAgICAgb3BlcmF0b3IqKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gKnRoaXM7IH0N Cg0KICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvciYNCiAgICAgIG9wZXJhdG9yKysoaW50KSB0aHJv dygpDQogICAgICB7IHJldHVybiAqdGhpczsgfQ0KDQogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9y Jg0KICAgICAgb3BlcmF0b3IrKygpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuICp0aGlzOyB9DQoN CiAgICAgIGJvb2wNCiAgICAgIGZhaWxlZCgpIGNvbnN0IHRocm93KCkNCiAgICAgIHsgcmV0dXJu IF9NX2ZhaWxlZDsgfQ0KICAgIH07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzPg0KICAgIGlubGluZSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1Ry YWl0cz4mDQogICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRv cj0oX0NoYXJUIF9fYykNCiAgICB7DQogICAgICBpZiAoIV9NX2ZhaWxlZCAmJg0KICAgICAgICAg IF9UcmFpdHM6OmVxX2ludF90eXBlKF9NX3NidWYtPnNwdXRjKF9fYyksIF9UcmFpdHM6OmVvZigp KSkNCiAgICAgICAgX01fZmFpbGVkID0gdHJ1ZTsNCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9 DQp9DQojIDQxICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2lv cy5oIiAyIDMNCiMgMSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9sb2Nh bGVfZmFjZXRzLmgiIDEgMw0KIyA0NCAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMv Yml0cy9sb2NhbGVfZmFjZXRzLmgiIDMNCg0KDQojIDEgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1 ZGUvZysrLXYzL2N3Y3R5cGUiIDEgMw0KIyA0OCAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9n KystdjMvY3djdHlwZSIgMw0KDQoNCg0KDQojIDEgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUv d2N0eXBlLmgiIDEgMw0KIyAzMiAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS93Y3R5cGUuaCIg Mw0KIyAxICJ0Oi9tc3lzLzEuMC9taW5ndy9saWIvZ2NjLWxpYi9pNjg2LXBjLW1pbmd3MzIvMy4x L2luY2x1ZGUvc3RkZGVmLmgiIDEgMw0KIyAzMyAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS93 Y3R5cGUuaCIgMiAzDQojIDU0ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL3djdHlwZS5oIiAz DQpleHRlcm4gIkMiIHsNCiMgNjcgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvd2N0eXBlLmgi IDMNCmludCBpc3dhbG51bSh3aW50X3QpOw0KaW50IGlzd2FscGhhKHdpbnRfdCk7DQppbnQgaXN3 YXNjaWkod2ludF90KTsNCmludCBpc3djbnRybCh3aW50X3QpOw0KaW50IGlzd2N0eXBlKHdpbnRf dCwgd2N0eXBlX3QpOw0KaW50IGlzX3djdHlwZSh3aW50X3QsIHdjdHlwZV90KTsNCmludCBpc3dk aWdpdCh3aW50X3QpOw0KaW50IGlzd2dyYXBoKHdpbnRfdCk7DQppbnQgaXN3bG93ZXIod2ludF90 KTsNCmludCBpc3dwcmludCh3aW50X3QpOw0KaW50IGlzd3B1bmN0KHdpbnRfdCk7DQppbnQgaXN3 c3BhY2Uod2ludF90KTsNCmludCBpc3d1cHBlcih3aW50X3QpOw0KaW50IGlzd3hkaWdpdCh3aW50 X3QpOw0KDQp3Y2hhcl90IHRvd2xvd2VyKHdjaGFyX3QpOw0Kd2NoYXJfdCB0b3d1cHBlcih3Y2hh cl90KTsNCg0KaW50IGlzbGVhZGJ5dGUgKGludCk7DQoNCnR5cGVkZWYgd2NoYXJfdCB3Y3RyYW5z X3Q7DQp3aW50X3QgdG93Y3RyYW5zKHdpbnRfdCwgd2N0cmFuc190KTsNCndjdHJhbnNfdCB3Y3Ry YW5zKGNvbnN0IGNoYXIqKTsNCndjdHlwZV90IHdjdHlwZShjb25zdCBjaGFyKik7DQoNCg0KfQ0K IyA1MyAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvY3djdHlwZSIgMiAzDQojIDQ3 ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIg MiAzDQojIDEgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2lvcyIgMSAzDQojIDQ4 ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIg MiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCiMgNjAgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUv ZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAzDQojIDEgInQ6L21zeXMvMS4wL21pbmd3L2lu Y2x1ZGUvZysrLXYzL2k2ODYtcGMtbWluZ3czMi9iaXRzL2N0eXBlX2Jhc2UuaCIgMSAzDQojIDM2 ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9pNjg2LXBjLW1pbmd3MzIvYml0cy9j dHlwZV9iYXNlLmgiIDMNCiAgc3RydWN0IGN0eXBlX2Jhc2UNCiAgew0KDQogICAgdHlwZWRlZiBj b25zdCBpbnQqIF9fdG9fdHlwZTsNCg0KDQoNCiAgICB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IG1h c2s7DQogICAgc3RhdGljIGNvbnN0IG1hc2sgdXBwZXIgPSAweDAwMDE7DQogICAgc3RhdGljIGNv bnN0IG1hc2sgbG93ZXIgPSAweDAwMDI7DQogICAgc3RhdGljIGNvbnN0IG1hc2sgYWxwaGEgPSAw eDAxMDM7DQogICAgc3RhdGljIGNvbnN0IG1hc2sgZGlnaXQgPSAweDAwMDQ7DQogICAgc3RhdGlj IGNvbnN0IG1hc2sgeGRpZ2l0ID0gMHgwMDgwOw0KICAgIHN0YXRpYyBjb25zdCBtYXNrIHNwYWNl ID0gMHgwMDA4Ow0KICAgIHN0YXRpYyBjb25zdCBtYXNrIHByaW50ID0gKDB4MDA0MCB8IDB4MDAx MHwgMHgwMTAzIHwgMHgwMDA0KTsNCiAgICBzdGF0aWMgY29uc3QgbWFzayBncmFwaCA9ICgweDAw MTAgfCAweDAxMDMgfCAweDAwMDQpOw0KICAgIHN0YXRpYyBjb25zdCBtYXNrIGNudHJsID0gMHgw MDIwOw0KICAgIHN0YXRpYyBjb25zdCBtYXNrIHB1bmN0ID0gMHgwMDEwOw0KICAgIHN0YXRpYyBj b25zdCBtYXNrIGFsbnVtID0gKDB4MDEwMyB8IDB4MDAwNCk7DQogIH07DQojIDYxICJ0Oi9tc3lz LzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzDQoNCg0K ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgY2xhc3MgX19jdHlwZV9hYnN0cmFjdF9i YXNlIDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBjdHlwZV9iYXNlDQogICAgew0KICAg IHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KDQogICAgICBib29s DQogICAgICBpcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3QNCiAgICAgIHsgcmV0dXJu IHRoaXMtPmRvX2lzKF9fbSwgX19jKTsgfQ0KDQogICAgICBjb25zdCBjaGFyX3R5cGUqDQogICAg ICBpcyhjb25zdCBjaGFyX3R5cGUgKl9fbG8sIGNvbnN0IGNoYXJfdHlwZSAqX19oaSwgbWFzayAq X192ZWMpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb19pcyhfX2xvLCBfX2hpLCBfX3Zl Yyk7IH0NCg0KICAgICAgY29uc3QgY2hhcl90eXBlKg0KICAgICAgc2Nhbl9pcyhtYXNrIF9fbSwg Y29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0DQogICAg ICB7IHJldHVybiB0aGlzLT5kb19zY2FuX2lzKF9fbSwgX19sbywgX19oaSk7IH0NCg0KICAgICAg Y29uc3QgY2hhcl90eXBlKg0KICAgICAgc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlw ZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhp cy0+ZG9fc2Nhbl9ub3QoX19tLCBfX2xvLCBfX2hpKTsgfQ0KDQogICAgICBjaGFyX3R5cGUNCiAg ICAgIHRvdXBwZXIoY2hhcl90eXBlIF9fYykgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv X3RvdXBwZXIoX19jKTsgfQ0KDQogICAgICBjb25zdCBjaGFyX3R5cGUqDQogICAgICB0b3VwcGVy KGNoYXJfdHlwZSAqX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdA0KICAgICAgeyBy ZXR1cm4gdGhpcy0+ZG9fdG91cHBlcihfX2xvLCBfX2hpKTsgfQ0KDQogICAgICBjaGFyX3R5cGUN CiAgICAgIHRvbG93ZXIoY2hhcl90eXBlIF9fYykgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMt PmRvX3RvbG93ZXIoX19jKTsgfQ0KDQogICAgICBjb25zdCBjaGFyX3R5cGUqDQogICAgICB0b2xv d2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdA0KICAgICAg eyByZXR1cm4gdGhpcy0+ZG9fdG9sb3dlcihfX2xvLCBfX2hpKTsgfQ0KDQogICAgICBjaGFyX3R5 cGUNCiAgICAgIHdpZGVuKGNoYXIgX19jKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f d2lkZW4oX19jKTsgfQ0KDQogICAgICBjb25zdCBjaGFyKg0KICAgICAgd2lkZW4oY29uc3QgY2hh ciogX19sbywgY29uc3QgY2hhciogX19oaSwgY2hhcl90eXBlKiBfX3RvKSBjb25zdA0KICAgICAg eyByZXR1cm4gdGhpcy0+ZG9fd2lkZW4oX19sbywgX19oaSwgX190byk7IH0NCg0KICAgICAgY2hh cg0KICAgICAgbmFycm93KGNoYXJfdHlwZSBfX2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0DQogICAg ICB7IHJldHVybiB0aGlzLT5kb19uYXJyb3coX19jLCBfX2RmYXVsdCk7IH0NCg0KICAgICAgY29u c3QgY2hhcl90eXBlKg0KICAgICAgbmFycm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3Qg Y2hhcl90eXBlKiBfX2hpLA0KICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyICpfX3Rv KSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbmFycm93KF9fbG8sIF9faGksIF9fZGZh dWx0LCBfX3RvKTsgfQ0KDQogICAgcHJvdGVjdGVkOg0KICAgICAgZXhwbGljaXQNCiAgICAgIF9f Y3R5cGVfYWJzdHJhY3RfYmFzZShzaXplX3QgX19yZWZzID0gMCk6IGxvY2FsZTo6ZmFjZXQoX19y ZWZzKSB7IH0NCg0KICAgICAgdmlydHVhbA0KICAgICAgfl9fY3R5cGVfYWJzdHJhY3RfYmFzZSgp IHsgfQ0KDQogICAgICB2aXJ0dWFsIGJvb2wNCiAgICAgIGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5 cGUgX19jKSBjb25zdCA9IDA7DQoNCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKg0KICAg ICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksDQog ICAgICAgICAgICBtYXNrKiBfX3ZlYykgY29uc3QgPSAwOw0KDQogICAgICB2aXJ0dWFsIGNvbnN0 IGNoYXJfdHlwZSoNCiAgICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSog X19sbywNCiAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7 DQoNCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKg0KICAgICAgZG9fc2Nhbl9ub3QobWFz ayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywNCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNo YXJfdHlwZSogX19oaSkgY29uc3QgPSAwOw0KDQogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQ0KICAg ICAgZG9fdG91cHBlcihjaGFyX3R5cGUpIGNvbnN0ID0gMDsNCg0KICAgICAgdmlydHVhbCBjb25z dCBjaGFyX3R5cGUqDQogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hh cl90eXBlKiBfX2hpKSBjb25zdCA9IDA7DQoNCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlDQogICAg ICBkb190b2xvd2VyKGNoYXJfdHlwZSkgY29uc3QgPSAwOw0KDQogICAgICB2aXJ0dWFsIGNvbnN0 IGNoYXJfdHlwZSoNCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFy X3R5cGUqIF9faGkpIGNvbnN0ID0gMDsNCg0KICAgICAgdmlydHVhbCBjaGFyX3R5cGUNCiAgICAg IGRvX3dpZGVuKGNoYXIpIGNvbnN0ID0gMDsNCg0KICAgICAgdmlydHVhbCBjb25zdCBjaGFyKg0K ICAgICAgZG9fd2lkZW4oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwNCiAgICAg ICAgICAgICAgIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdCA9IDA7DQoNCiAgICAgIHZpcnR1YWwg Y2hhcg0KICAgICAgZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3QgPSAw Ow0KDQogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIGRvX25hcnJvdyhjb25z dCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwNCiAgICAgICAgICAgICAg ICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdCA9IDA7DQogICAgfTsNCg0KDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBjbGFzcyBjdHlwZSA6IHB1YmxpYyBfX2N0 eXBlX2Fic3RyYWN0X2Jhc2U8X0NoYXJUPg0KICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAgIHR5 cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgY3R5cGU6Om1h c2sgbWFzazsNCg0KICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7DQoNCiAgICAgIGV4cGxpY2l0 DQogICAgICBjdHlwZShzaXplX3QgX19yZWZzID0gMCkgOiBfX2N0eXBlX2Fic3RyYWN0X2Jhc2U8 X0NoYXJUPihfX3JlZnMpIHsgfQ0KDQogICBwcm90ZWN0ZWQ6DQogICAgICB2aXJ0dWFsDQogICAg ICB+Y3R5cGUoKTsNCg0KICAgICAgdmlydHVhbCBib29sDQogICAgICBkb19pcyhtYXNrIF9fbSwg Y2hhcl90eXBlIF9fYykgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKg0K ICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGks IG1hc2sqIF9fdmVjKSBjb25zdDsNCg0KICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqDQog ICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNo YXJfdHlwZSogX19oaSkgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKg0K ICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywNCiAgICAg ICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7DQoNCiAgICAgIHZpcnR1 YWwgY2hhcl90eXBlDQogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSBfX2MpIGNvbnN0Ow0KDQog ICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBl KiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIGNo YXJfdHlwZQ0KICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUgX19jKSBjb25zdDsNCg0KICAgICAg dmlydHVhbCBjb25zdCBjaGFyX3R5cGUqDQogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSogX19s bywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsNCg0KICAgICAgdmlydHVhbCBjaGFyX3R5 cGUNCiAgICAgIGRvX3dpZGVuKGNoYXIgX19jKSBjb25zdDsNCg0KICAgICAgdmlydHVhbCBjb25z dCBjaGFyKg0KICAgICAgZG9fd2lkZW4oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19o aSwgY2hhcl90eXBlKiBfX2Rlc3QpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIGNoYXINCiAgICAg IGRvX25hcnJvdyhjaGFyX3R5cGUsIGNoYXIgX19kZmF1bHQpIGNvbnN0Ow0KDQogICAgICB2aXJ0 dWFsIGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIGRvX25hcnJvdyhjb25zdCBjaGFyX3R5cGUqIF9f bG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwNCiAgICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0 LCBjaGFyKiBfX2Rlc3QpIGNvbnN0Ow0KICAgIH07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJUPg0KICAgIGxvY2FsZTo6aWQgY3R5cGU8X0NoYXJUPjo6aWQ7DQoNCg0KICB0ZW1wbGF0ZTw+ DQogICAgY2xhc3MgY3R5cGU8Y2hhcj4gOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNlPGNo YXI+DQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsN Cg0KICAgIHByb3RlY3RlZDoNCg0KICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV9jdHlwZTsN CiAgICAgIGJvb2wgX01fZGVsOw0KICAgICAgX190b190eXBlIF9NX3RvdXBwZXI7DQogICAgICBf X3RvX3R5cGUgX01fdG9sb3dlcjsNCiAgICAgIGNvbnN0IG1hc2sqIF9NX3RhYmxlOw0KDQogICAg cHVibGljOg0KICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7DQogICAgICBzdGF0aWMgY29uc3Qg c2l6ZV90IHRhYmxlX3NpemUgPSAxICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oLTEpOw0K DQogICAgICBleHBsaWNpdA0KICAgICAgY3R5cGUoY29uc3QgbWFzayogX190YWJsZSA9IDAsIGJv b2wgX19kZWwgPSBmYWxzZSwgc2l6ZV90IF9fcmVmcyA9IDApOw0KDQogICAgICBleHBsaWNpdA0K ICAgICAgY3R5cGUoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IG1hc2sqIF9fdGFibGUgPSAwLCBi b29sIF9fZGVsID0gZmFsc2UsDQogICAgICAgICAgICBzaXplX3QgX19yZWZzID0gMCk7DQoNCiAg ICAgIGlubGluZSBib29sDQogICAgICBpcyhtYXNrIF9fbSwgY2hhciBfX2MpIGNvbnN0Ow0KDQog ICAgICBpbmxpbmUgY29uc3QgY2hhcioNCiAgICAgIGlzKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0 IGNoYXIqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdDsNCg0KICAgICAgaW5saW5lIGNvbnN0IGNo YXIqDQogICAgICBzY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFy KiBfX2hpKSBjb25zdDsNCg0KICAgICAgaW5saW5lIGNvbnN0IGNoYXIqDQogICAgICBzY2FuX25v dChtYXNrIF9fbSwgY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSkgY29uc3Q7DQoN CiAgICBwcm90ZWN0ZWQ6DQogICAgICBjb25zdCBtYXNrKg0KICAgICAgdGFibGUoKSBjb25zdCB0 aHJvdygpDQogICAgICB7IHJldHVybiBfTV90YWJsZTsgfQ0KDQogICAgICBzdGF0aWMgY29uc3Qg bWFzayoNCiAgICAgIGNsYXNzaWNfdGFibGUoKSB0aHJvdygpOw0KDQogICAgICB2aXJ0dWFsDQog ICAgICB+Y3R5cGUoKTsNCg0KICAgICAgdmlydHVhbCBib29sDQogICAgICBkb19pcyhtYXNrIF9f bSwgY2hhcl90eXBlIF9fYykgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBl Kg0KICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9f aGksIG1hc2sqIF9fdmVjKSBjb25zdDsNCg0KICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUq DQogICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0 IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBl Kg0KICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywNCiAg ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7DQoNCiAgICAgIHZp cnR1YWwgY2hhcl90eXBlDQogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSkgY29uc3Q7DQoNCiAg ICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKg0KICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUq IF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwgY2hh cl90eXBlDQogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSkgY29uc3Q7DQoNCiAgICAgIHZpcnR1 YWwgY29uc3QgY2hhcl90eXBlKg0KICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNv bnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlDQog ICAgICBkb193aWRlbihjaGFyKSBjb25zdDsNCg0KICAgICAgdmlydHVhbCBjb25zdCBjaGFyKg0K ICAgICAgZG9fd2lkZW4oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgY2hhcl90 eXBlKiBfX2Rlc3QpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIGNoYXINCiAgICAgIGRvX25hcnJv dyhjaGFyX3R5cGUsIGNoYXIgX19kZmF1bHQpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIGNvbnN0 IGNoYXJfdHlwZSoNCiAgICAgIGRvX25hcnJvdyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0 IGNoYXJfdHlwZSogX19oaSwNCiAgICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBf X2Rlc3QpIGNvbnN0Ow0KICAgIH07DQoNCiAgdGVtcGxhdGU8Pg0KICAgIGNvbnN0IGN0eXBlPGNo YXI+Jg0KICAgIHVzZV9mYWNldDxjdHlwZTxjaGFyPiA+KGNvbnN0IGxvY2FsZSYgX19sb2MpOw0K IyAzOTcgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0 cy5oIiAzDQojIDEgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbWlu Z3czMi9iaXRzL2N0eXBlX2lubGluZS5oIiAxIDMNCiMgMzggInQ6L21zeXMvMS4wL21pbmd3L2lu Y2x1ZGUvZysrLXYzL2k2ODYtcGMtbWluZ3czMi9iaXRzL2N0eXBlX2lubGluZS5oIiAzDQogIGJv b2wNCiAgY3R5cGU8Y2hhcj46Og0KICBpcyhtYXNrIF9fbSwgY2hhciBfX2MpIGNvbnN0DQogIHsN CiAgICAgICAgcmV0dXJuIChfTV90YWJsZVtzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX2Mp IF0gJiBfX20pOw0KICB9DQoNCg0KICBjb25zdCBjaGFyKg0KICBjdHlwZTxjaGFyPjo6DQogIGlz KGNvbnN0IGNoYXIqIF9fbG93LCBjb25zdCBjaGFyKiBfX2hpZ2gsIG1hc2sqIF9fdmVjKSBjb25z dA0KICB7DQogICAgd2hpbGUgKF9fbG93IDwgX19oaWdoKQ0KICAgICAgKl9fdmVjKysgPSBfTV90 YWJsZVtzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqX19sb3crKyldOw0KICAgIHJldHVybiBf X2hpZ2g7DQogIH0NCg0KICBjb25zdCBjaGFyKg0KICBjdHlwZTxjaGFyPjo6DQogIHNjYW5faXMo bWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG93LCBjb25zdCBjaGFyKiBfX2hpZ2gpIGNvbnN0DQog IHsNCiAgICB3aGlsZSAoX19sb3cgPCBfX2hpZ2ggJiYgIXRoaXMtPmlzKF9fbSwgKl9fbG93KSkN CiAgICAgICsrX19sb3c7DQogICAgcmV0dXJuIF9fbG93Ow0KICB9DQoNCiAgY29uc3QgY2hhcioN CiAgY3R5cGU8Y2hhcj46Og0KICBzY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhciogX19sb3cs IGNvbnN0IGNoYXIqIF9faGlnaCkgY29uc3QNCiAgew0KICAgIHdoaWxlIChfX2xvdyA8IF9faGln aCAmJiB0aGlzLT5pcyhfX20sICpfX2xvdykgIT0gMCkNCiAgICAgICsrX19sb3c7DQogICAgcmV0 dXJuIF9fbG93Ow0KICB9DQojIDM5OCAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMv Yml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMw0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU Pg0KICAgIGNsYXNzIGN0eXBlX2J5bmFtZSA6IHB1YmxpYyBjdHlwZTxfQ2hhclQ+DQogICAgew0K ICAgIHB1YmxpYzoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCg0KICAgICAgZXhw bGljaXQNCiAgICAgIGN0eXBlX2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMg PSAwKTsNCg0KICAgIHByb3RlY3RlZDoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5jdHlwZV9ieW5h bWUoKSB7IH07DQogICAgfTsNCg0KDQogIHRlbXBsYXRlPD4NCiAgICBjdHlwZV9ieW5hbWU8Y2hh cj46OmN0eXBlX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IHJlZnMpOw0KDQogIHRlbXBsYXRl PD4NCiAgICBjdHlwZV9ieW5hbWU8d2NoYXJfdD46OmN0eXBlX2J5bmFtZShjb25zdCBjaGFyKiwg c2l6ZV90IHJlZnMpOw0KDQoNCiMgMSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMv Yml0cy9jb2RlY3Z0LmgiIDEgMw0KIyA0NSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKyst djMvYml0cy9jb2RlY3Z0LmgiIDMNCg0KDQogIGNsYXNzIGNvZGVjdnRfYmFzZQ0KICB7DQogIHB1 YmxpYzoNCiAgICBlbnVtIHJlc3VsdA0KICAgIHsNCiAgICAgIG9rLA0KICAgICAgcGFydGlhbCwN CiAgICAgIGVycm9yLA0KICAgICAgbm9jb252DQogICAgfTsNCiAgfTsNCg0KDQoNCg0KDQogIHRl bXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0 YXRlVD4NCiAgICBjbGFzcyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZQ0KICAgIDogcHVibGljIGxv Y2FsZTo6ZmFjZXQsIHB1YmxpYyBjb2RlY3Z0X2Jhc2UNCiAgICB7DQogICAgcHVibGljOg0KDQog ICAgICB0eXBlZGVmIGNvZGVjdnRfYmFzZTo6cmVzdWx0IHJlc3VsdDsNCiAgICAgIHR5cGVkZWYg X0ludGVyblQgaW50ZXJuX3R5cGU7DQogICAgICB0eXBlZGVmIF9FeHRlcm5UIGV4dGVybl90eXBl Ow0KICAgICAgdHlwZWRlZiBfU3RhdGVUIHN0YXRlX3R5cGU7DQoNCg0KICAgICAgcmVzdWx0DQog ICAgICBvdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwN CiAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5 cGUqJiBfX2Zyb21fbmV4dCwNCiAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5 cGUqIF9fdG9fZW5kLA0KICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdA0K ICAgICAgew0KICAgICAgICByZXR1cm4gdGhpcy0+ZG9fb3V0KF9fc3RhdGUsIF9fZnJvbSwgX19m cm9tX2VuZCwgX19mcm9tX25leHQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgX190bywg X190b19lbmQsIF9fdG9fbmV4dCk7DQogICAgICB9DQoNCiAgICAgIHJlc3VsdA0KICAgICAgdW5z aGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUq IF9fdG9fZW5kLA0KICAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QN CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Vuc2hpZnQoX19zdGF0ZSwgX190byxfX3RvX2VuZCxf X3RvX25leHQpOyB9DQoNCiAgICAgIHJlc3VsdA0KICAgICAgaW4oc3RhdGVfdHlwZSYgX19zdGF0 ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwNCiAgICAgICAgIGNvbnN0IGV4dGVybl90eXBl KiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LA0KICAgICAgICAg aW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwNCiAgICAgICAgIGludGVy bl90eXBlKiYgX190b19uZXh0KSBjb25zdA0KICAgICAgew0KICAgICAgICByZXR1cm4gdGhpcy0+ ZG9faW4oX19zdGF0ZSwgX19mcm9tLCBfX2Zyb21fZW5kLCBfX2Zyb21fbmV4dCwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fdG8sIF9fdG9fZW5kLCBfX3RvX25leHQpOw0KICAgICAgfQ0K DQogICAgICBpbnQNCiAgICAgIGVuY29kaW5nKCkgY29uc3QgdGhyb3coKQ0KICAgICAgeyByZXR1 cm4gdGhpcy0+ZG9fZW5jb2RpbmcoKTsgfQ0KDQogICAgICBib29sDQogICAgICBhbHdheXNfbm9j b252KCkgY29uc3QgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fYWx3YXlzX25vY29u digpOyB9DQoNCiAgICAgIGludA0KICAgICAgbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmIF9fc3Rh dGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sDQogICAgICAgICAgICAgY29uc3QgZXh0ZXJu X3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5k b19sZW5ndGgoX19zdGF0ZSwgX19mcm9tLCBfX2VuZCwgX19tYXgpOyB9DQoNCiAgICAgIGludA0K ICAgICAgbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv X21heF9sZW5ndGgoKTsgfQ0KDQogICAgcHJvdGVjdGVkOg0KICAgICAgZXhwbGljaXQNCiAgICAg IF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlKHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFj ZXQoX19yZWZzKSB7IH0NCg0KICAgICAgdmlydHVhbA0KICAgICAgfl9fY29kZWN2dF9hYnN0cmFj dF9iYXNlKCkgeyB9DQoNCiAgICAgIHZpcnR1YWwgcmVzdWx0DQogICAgICBkb19vdXQoc3RhdGVf dHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwNCiAgICAgICAgICAgICBj b25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21f bmV4dCwNCiAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9f ZW5kLA0KICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdCA9IDA7DQoN CiAgICAgIHZpcnR1YWwgcmVzdWx0DQogICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3Rh dGUsIGV4dGVybl90eXBlKiBfX3RvLA0KICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190 b19lbmQsIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdCA9IDA7DQoNCiAgICAgIHZpcnR1 YWwgcmVzdWx0DQogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5f dHlwZSogX19mcm9tLA0KICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQs IGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsDQogICAgICAgICAgICBpbnRlcm5fdHlw ZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLA0KICAgICAgICAgICAgaW50ZXJuX3R5cGUq JiBfX3RvX25leHQpIGNvbnN0ID0gMDsNCg0KICAgICAgdmlydHVhbCBpbnQNCiAgICAgIGRvX2Vu Y29kaW5nKCkgY29uc3QgdGhyb3coKSA9IDA7DQoNCiAgICAgIHZpcnR1YWwgYm9vbA0KICAgICAg ZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCkgPSAwOw0KDQogICAgICB2aXJ0dWFsIGlu dA0KICAgICAgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSog X19mcm9tLA0KICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90 IF9fbWF4KSBjb25zdCA9IDA7DQoNCiAgICAgIHZpcnR1YWwgaW50DQogICAgICBkb19tYXhfbGVu Z3RoKCkgY29uc3QgdGhyb3coKSA9IDA7DQogICAgfTsNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPg0KICAgIGNs YXNzIGNvZGVjdnQNCiAgICA6IHB1YmxpYyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxfSW50ZXJu VCwgX0V4dGVyblQsIF9TdGF0ZVQ+DQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRl ZiBjb2RlY3Z0X2Jhc2U6OnJlc3VsdCByZXN1bHQ7DQogICAgICB0eXBlZGVmIF9JbnRlcm5UIGlu dGVybl90eXBlOw0KICAgICAgdHlwZWRlZiBfRXh0ZXJuVCBleHRlcm5fdHlwZTsNCiAgICAgIHR5 cGVkZWYgX1N0YXRlVCBzdGF0ZV90eXBlOw0KDQoNCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlk Ow0KDQogICAgICBleHBsaWNpdA0KICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCkNCiAg ICAgIDogX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8X0ludGVyblQsX0V4dGVyblQsX1N0YXRlVD4g KF9fcmVmcykgeyB9DQoNCiAgICBwcm90ZWN0ZWQ6DQogICAgICB2aXJ0dWFsDQogICAgICB+Y29k ZWN2dCgpIHsgfQ0KDQogICAgICB2aXJ0dWFsIHJlc3VsdA0KICAgICAgZG9fb3V0KHN0YXRlX3R5 cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sDQogICAgICAgICAgICAgY29u c3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25l eHQsDQogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2Vu ZCwNCiAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7DQoNCiAgICAg IHZpcnR1YWwgcmVzdWx0DQogICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4 dGVybl90eXBlKiBfX3RvLA0KICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190b19lbmQs IGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsNCg0KICAgICAgdmlydHVhbCByZXN1bHQN CiAgICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zy b20sDQogICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0 ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwNCiAgICAgICAgICAgIGludGVybl90eXBlKiBfX3RvLCBp bnRlcm5fdHlwZSogX190b19lbmQsDQogICAgICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4 dCkgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwgaW50DQogICAgICBkb19lbmNvZGluZygpIGNvbnN0 IHRocm93KCk7DQoNCiAgICAgIHZpcnR1YWwgYm9vbA0KICAgICAgZG9fYWx3YXlzX25vY29udigp IGNvbnN0IHRocm93KCk7DQoNCiAgICAgIHZpcnR1YWwgaW50DQogICAgICBkb19sZW5ndGgoY29u c3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sDQogICAgICAgICAgICAg ICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0Ow0KDQogICAg ICB2aXJ0dWFsIGludA0KICAgICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7DQogICAg fTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5 cGVuYW1lIF9TdGF0ZVQ+DQogICAgbG9jYWxlOjppZCBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJu VCwgX1N0YXRlVD46OmlkOw0KDQoNCiAgdGVtcGxhdGU8Pg0KICAgIGNsYXNzIGNvZGVjdnQ8Y2hh ciwgY2hhciwgbWJzdGF0ZV90Pg0KICAgIDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNl PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD4NCiAgICB7DQogICAgcHVibGljOg0KDQogICAgICB0eXBl ZGVmIGNoYXIgaW50ZXJuX3R5cGU7DQogICAgICB0eXBlZGVmIGNoYXIgZXh0ZXJuX3R5cGU7DQog ICAgICB0eXBlZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBlOw0KDQoNCiAgICAgIHN0YXRpYyBsb2Nh bGU6OmlkIGlkOw0KDQogICAgICBleHBsaWNpdA0KICAgICAgY29kZWN2dChzaXplX3QgX19yZWZz ID0gMCk7DQoNCiAgICBwcm90ZWN0ZWQ6DQogICAgICB2aXJ0dWFsDQogICAgICB+Y29kZWN2dCgp Ow0KDQogICAgICB2aXJ0dWFsIHJlc3VsdA0KICAgICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3Rh dGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sDQogICAgICAgICAgICAgY29uc3QgaW50ZXJu X3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsDQogICAg ICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwNCiAgICAg ICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwg cmVzdWx0DQogICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90eXBl KiBfX3RvLA0KICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVybl90 eXBlKiYgX190b19uZXh0KSBjb25zdDsNCg0KICAgICAgdmlydHVhbCByZXN1bHQNCiAgICAgIGRv X2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sDQogICAg ICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUq JiBfX2Zyb21fbmV4dCwNCiAgICAgICAgICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlw ZSogX190b19lbmQsDQogICAgICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7 DQoNCiAgICAgIHZpcnR1YWwgaW50DQogICAgICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCk7 DQoNCiAgICAgIHZpcnR1YWwgYm9vbA0KICAgICAgZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRo cm93KCk7DQoNCiAgICAgIHZpcnR1YWwgaW50DQogICAgICBkb19sZW5ndGgoY29uc3Qgc3RhdGVf dHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sDQogICAgICAgICAgICAgICAgY29uc3Qg ZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFs IGludA0KICAgICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7DQogIH07DQojIDMxOCAi dDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9jb2RlY3Z0LmgiIDMNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3Rh dGVUPg0KICAgIGNsYXNzIGNvZGVjdnRfYnluYW1lIDogcHVibGljIGNvZGVjdnQ8X0ludGVyblQs IF9FeHRlcm5ULCBfU3RhdGVUPg0KICAgIHsNCiAgICBwdWJsaWM6DQogICAgICBleHBsaWNpdA0K ICAgICAgY29kZWN2dF9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMgPSAwKQ0KICAg ICAgOiBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4oX19yZWZzKSB7IH0NCiAg ICBwcm90ZWN0ZWQ6DQogICAgICB2aXJ0dWFsDQogICAgICB+Y29kZWN2dF9ieW5hbWUoKSB7IH0N CiAgICB9Ow0KIyA0MjMgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvbG9j YWxlX2ZhY2V0cy5oIiAyIDMNCg0KDQoNCiAgY2xhc3MgX19udW1fYmFzZQ0KICB7DQogIHByb3Rl Y3RlZDoNCg0KDQogICAgc3RhdGljIGNvbnN0IGNoYXIgX1NfYXRvbXNbXTsNCg0KICAgIGVudW0N CiAgICB7DQogICAgICBfTV96ZXJvLA0KICAgICAgX01fZSA9IF9NX3plcm8gKyAxMCwNCiAgICAg IF9NX0UgPSBfTV96ZXJvICsgMTEsDQogICAgICBfTV9zaXplID0gMjEgKyAxDQogICAgfTsNCg0K DQoNCiAgICBzdGF0aWMgYm9vbA0KICAgIF9TX2Zvcm1hdF9mbG9hdChjb25zdCBpb3NfYmFzZSYg X19pbywgY2hhciogX19mcHRyLCBjaGFyIF9fbW9kLA0KICAgICAgICAgICAgICAgICAgICBzdHJl YW1zaXplIF9fcHJlYyk7DQoNCg0KICAgIHN0YXRpYyB2b2lkDQogICAgX1NfZm9ybWF0X2ludChj b25zdCBpb3NfYmFzZSYgX19pbywgY2hhciogX19mcHRyLCBjaGFyIF9fbW9kLCBjaGFyIF9fbW9k bCk7DQogIH07DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgY2xhc3MgbnVt cHVuY3QgOiBwdWJsaWMgbG9jYWxlOjpmYWNldA0KICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAg IHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9D aGFyVD4gc3RyaW5nX3R5cGU7DQoNCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOw0KDQogICAg cHJpdmF0ZToNCiAgICAgIGNoYXJfdHlwZSBfTV9kZWNpbWFsX3BvaW50Ow0KICAgICAgY2hhcl90 eXBlIF9NX3Rob3VzYW5kc19zZXA7DQogICAgICBjb25zdCBjaGFyKiBfTV9ncm91cGluZzsNCiAg ICAgIGNvbnN0IGNoYXJfdHlwZSogX01fdHJ1ZW5hbWU7DQogICAgICBjb25zdCBjaGFyX3R5cGUq IF9NX2ZhbHNlbmFtZTsNCg0KICAgIHB1YmxpYzoNCiAgICAgIGV4cGxpY2l0DQogICAgICBudW1w dW5jdChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykNCiAgICAgIHsg X01faW5pdGlhbGl6ZV9udW1wdW5jdCgpOyB9DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICBudW1w dW5jdChfX2NfbG9jYWxlIF9fY2xvYywgc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNl dChfX3JlZnMpDQogICAgICB7IF9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jbG9jKTsgfQ0KDQog ICAgICBjaGFyX3R5cGUNCiAgICAgIGRlY2ltYWxfcG9pbnQoKSBjb25zdA0KICAgICAgeyByZXR1 cm4gdGhpcy0+ZG9fZGVjaW1hbF9wb2ludCgpOyB9DQoNCiAgICAgIGNoYXJfdHlwZQ0KICAgICAg dGhvdXNhbmRzX3NlcCgpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb190aG91c2FuZHNf c2VwKCk7IH0NCg0KICAgICAgc3RyaW5nDQogICAgICBncm91cGluZygpIGNvbnN0DQogICAgICB7 IHJldHVybiB0aGlzLT5kb19ncm91cGluZygpOyB9DQoNCiAgICAgIHN0cmluZ190eXBlDQogICAg ICB0cnVlbmFtZSgpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb190cnVlbmFtZSgpOyB9 DQoNCiAgICAgIHN0cmluZ190eXBlDQogICAgICBmYWxzZW5hbWUoKSBjb25zdA0KICAgICAgeyBy ZXR1cm4gdGhpcy0+ZG9fZmFsc2VuYW1lKCk7IH0NCg0KICAgIHByb3RlY3RlZDoNCiAgICAgIHZp cnR1YWwNCiAgICAgIH5udW1wdW5jdCgpOw0KDQogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQ0KICAg ICAgZG9fZGVjaW1hbF9wb2ludCgpIGNvbnN0DQogICAgICB7IHJldHVybiBfTV9kZWNpbWFsX3Bv aW50OyB9DQoNCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlDQogICAgICBkb190aG91c2FuZHNfc2Vw KCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX3Rob3VzYW5kc19zZXA7IH0NCg0KICAgICAgdmly dHVhbCBzdHJpbmcNCiAgICAgIGRvX2dyb3VwaW5nKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9N X2dyb3VwaW5nOyB9DQoNCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUNCiAgICAgIGRvX3RydWVu YW1lKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX3RydWVuYW1lOyB9DQoNCiAgICAgIHZpcnR1 YWwgc3RyaW5nX3R5cGUNCiAgICAgIGRvX2ZhbHNlbmFtZSgpIGNvbnN0DQogICAgICB7IHJldHVy biBfTV9mYWxzZW5hbWU7IH0NCg0KDQogICAgICB2b2lkDQogICAgICBfTV9pbml0aWFsaXplX251 bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jID0gX1NfY19sb2NhbGUpOw0KICAgIH07DQoNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGxvY2FsZTo6aWQgbnVtcHVuY3Q8X0NoYXJUPjo6 aWQ7DQoNCiAgdGVtcGxhdGU8Pg0KICAgIG51bXB1bmN0PGNoYXI+Ojp+bnVtcHVuY3QoKTsNCg0K ICB0ZW1wbGF0ZTw+DQogICAgdm9pZA0KICAgIG51bXB1bmN0PGNoYXI+OjpfTV9pbml0aWFsaXpl X251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKTsNCiMgNTQ3ICJ0Oi9tc3lzLzEuMC9taW5ndy9p bmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQ+DQogICAgY2xhc3MgbnVtcHVuY3RfYnluYW1lIDogcHVibGljIG51bXB1bmN0PF9D aGFyVD4NCiAgICB7DQoNCiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfbnVtcHVuY3Q7DQoN CiAgICBwdWJsaWM6DQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQogICAgICB0eXBl ZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOw0KDQogICAgICBleHBsaWNpdA0K ICAgICAgbnVtcHVuY3RfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDAp DQogICAgICA6IG51bXB1bmN0PF9DaGFyVD4oX19yZWZzKQ0KICAgICAgew0KICAgICAgICBfU19j cmVhdGVfY19sb2NhbGUoX01fY19sb2NhbGVfbnVtcHVuY3QsIF9fcyk7DQogICAgICAgIF9NX2lu aXRpYWxpemVfbnVtcHVuY3QoX01fY19sb2NhbGVfbnVtcHVuY3QpOw0KICAgICAgfQ0KDQogICAg cHJvdGVjdGVkOg0KICAgICAgdmlydHVhbA0KICAgICAgfm51bXB1bmN0X2J5bmFtZSgpDQogICAg ICB7IF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbnVtcHVuY3QpOyB9DQogICAgfTsN Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQogICAgY2xh c3MgbnVtX2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgX19udW1fYmFzZQ0KICAg IHsNCiAgICBwdWJsaWM6DQoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAg IHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7DQoNCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlk Ow0KDQogICAgICBleHBsaWNpdA0KICAgICAgbnVtX2dldChzaXplX3QgX19yZWZzID0gMCkgOiBs b2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAgICAgZ2V0KGl0 ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAg IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgYm9vbCYgX192KSBjb25zdA0KICAgICAgeyByZXR1 cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQ0KDQogICAg ICBpdGVyX3R5cGUNCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBp b3NfYmFzZSYgX19pbywNCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcm IF9fdikgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19p bywgX19lcnIsIF9fdik7IH0NCg0KICAgICAgaXRlcl90eXBlDQogICAgICBnZXQoaXRlcl90eXBl IF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sDQogICAgICAgICAgaW9zX2Jh c2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBzaG9ydCYgX192KSBjb25zdA0KICAgICAgeyBy ZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQ0KDQog ICAgICBpdGVyX3R5cGUNCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5k LCBpb3NfYmFzZSYgX19pbywNCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVu c2lnbmVkIGludCYgX192KSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4s IF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQ0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIGdl dChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywNCiAgICAg ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcmIF9fdikgY29uc3QN CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9f dik7IH0NCiMgNjIxICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL2xvY2Fs ZV9mYWNldHMuaCIgMw0KICAgICAgaXRlcl90eXBlDQogICAgICBnZXQoaXRlcl90eXBlIF9faW4s IGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sDQogICAgICAgICAgaW9zX2Jhc2U6Omlv c3RhdGUmIF9fZXJyLCBmbG9hdCYgX192KSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f Z2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQ0KDQogICAgICBpdGVyX3R5cGUN CiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19p bywNCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGRvdWJsZSYgX192KSBjb25z dA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2Vyciwg X192KTsgfQ0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRl cl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywNCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0 ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3YpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5k b19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9DQoNCiAgICAgIGl0ZXJfdHlw ZQ0KICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBf X2lvLA0KICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgdm9pZComIF9fdikgY29u c3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIs IF9fdik7IH0NCg0KICAgIHByb3RlY3RlZDoNCiAgICAgIHZpcnR1YWwgfm51bV9nZXQoKSB7IH0N Cg0KICAgICAgaXRlcl90eXBlDQogICAgICBfTV9leHRyYWN0X2Zsb2F0KGl0ZXJfdHlwZSwgaXRl cl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwNCiAgICAgICAgICAgICAgICAg ICAgICAgc3RyaW5nJiBfX3h0cmMpIGNvbnN0Ow0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIF9N X2V4dHJhY3RfaW50KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjpp b3N0YXRlJiwNCiAgICAgICAgICAgICAgICAgICAgIHN0cmluZyYgX194dHJjLCBpbnQmIF9fYmFz ZSkgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19nZXQoaXRlcl90 eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBib29sJikgY29u c3Q7DQoNCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19nZXQoaXRlcl90eXBlLCBp dGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBsb25nJikgY29uc3Q7DQoN CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5 cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLA0KICAgICAgICAgICAgICB1 bnNpZ25lZCBzaG9ydCYpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0KICAgICAg ZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRl JiBfX2VyciwNCiAgICAgICAgICAgICB1bnNpZ25lZCBpbnQmKSBjb25zdDsNCg0KICAgICAgdmly dHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jh c2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsDQogICAgICAgICAgICAgdW5zaWduZWQgbG9u ZyYpIGNvbnN0Ow0KIyA2ODAgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMv bG9jYWxlX2ZhY2V0cy5oIiAzDQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9fZ2V0 KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy ciwNCiAgICAgICAgICAgICBmbG9hdCYpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIGl0ZXJfdHlw ZQ0KICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNl Ojppb3N0YXRlJiBfX2VyciwNCiAgICAgICAgICAgICBkb3VibGUmKSBjb25zdDsNCg0KICAgICAg dmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9z X2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsDQogICAgICAgICAgICAgbG9uZyBkb3Vi bGUmKSBjb25zdDsNCg0KICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldChpdGVy X3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsDQog ICAgICAgICAgICAgdm9pZComKSBjb25zdDsNCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICBsb2NhbGU6OmlkIG51bV9nZXQ8X0NoYXJU LCBfSW5JdGVyPjo6aWQ7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf T3V0SXRlcj4NCiAgICBjbGFzcyBudW1fcHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1Ymxp YyBfX251bV9iYXNlDQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBfQ2hhclQg Y2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7DQoNCiAgICAgIHN0 YXRpYyBsb2NhbGU6OmlkIGlkOw0KDQogICAgICBleHBsaWNpdA0KICAgICAgbnVtX3B1dChzaXpl X3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9DQoNCiAgICAgIGl0ZXJf dHlwZQ0KICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBf X2ZpbGwsIGJvb2wgX192KSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywg X19mLCBfX2ZpbGwsIF9fdik7IH0NCg0KICAgICAgaXRlcl90eXBlDQogICAgICBwdXQoaXRlcl90 eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBfX3YpIGNvbnN0 DQogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQ0K DQogICAgICBpdGVyX3R5cGUNCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19m LCBjaGFyX3R5cGUgX19maWxsLA0KICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX192KSBjb25zdA0K ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0NCiMg NzM3ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMu aCIgMw0KICAgICAgaXRlcl90eXBlDQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2Um IF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgZG91YmxlIF9fdikgY29uc3QNCiAgICAgIHsgcmV0dXJu IHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9DQoNCiAgICAgIGl0ZXJfdHlw ZQ0KICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2Zp bGwsDQogICAgICAgICAgbG9uZyBkb3VibGUgX192KSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhp cy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0NCg0KICAgICAgaXRlcl90eXBlDQog ICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwN CiAgICAgICAgICBjb25zdCB2b2lkKiBfX3YpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5k b19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQ0KDQogICAgcHJvdGVjdGVkOg0KICAgICAg dGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlVD4NCiAgICAgICAgaXRlcl90eXBlDQogICAgICAgIF9N X2NvbnZlcnRfZmxvYXQoaXRlcl90eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmls bCwNCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIF9fbW9kLCBfVmFsdWVUIF9fdikgY29u c3Q7DQoNCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZVQ+DQogICAgICAgIGl0ZXJfdHlw ZQ0KICAgICAgICBfTV9jb252ZXJ0X2ludChpdGVyX3R5cGUsIGlvc19iYXNlJiBfX2lvLCBjaGFy X3R5cGUgX19maWxsLA0KICAgICAgICAgICAgICAgICAgICAgICBjaGFyIF9fbW9kLCBjaGFyIF9f bW9kbCwgX1ZhbHVlVCBfX3YpIGNvbnN0Ow0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIF9NX3dp ZGVuX2Zsb2F0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGNo YXIqIF9fY3MsDQogICAgICAgICAgICAgICAgICAgICBpbnQgX19sZW4pIGNvbnN0Ow0KDQogICAg ICBpdGVyX3R5cGUNCiAgICAgIF9NX3dpZGVuX2ludChpdGVyX3R5cGUsIGlvc19iYXNlJiBfX2lv LCBjaGFyX3R5cGUgX19maWxsLCBjaGFyKiBfX2NzLA0KICAgICAgICAgICAgICAgICAgIGludCBf X2xlbikgY29uc3Q7DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAgICAgX01faW5zZXJ0KGl0ZXJfdHlw ZSwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsDQogICAgICAgICAgICAgICAgY29u c3QgY2hhcl90eXBlKiBfX3dzLCBpbnQgX19sZW4pIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsDQog ICAgICB+bnVtX3B1dCgpIHsgfTsNCg0KICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRv X3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBfX3YpIGNv bnN0Ow0KDQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwg aW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIF9fdikgY29uc3Q7DQoNCiAgICAgIHZp cnR1YWwgaXRlcl90eXBlDQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJf dHlwZSBfX2ZpbGwsIHVuc2lnbmVkIGxvbmcpIGNvbnN0Ow0KIyA3OTQgInQ6L21zeXMvMS4wL21p bmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAzDQogICAgICB2aXJ0dWFs IGl0ZXJfdHlwZQ0KICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUg X19maWxsLCBkb3VibGUgX192KSBjb25zdDsNCg0KICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAg ICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBk b3VibGUgX192KSBjb25zdDsNCg0KICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX3B1 dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgY29uc3Qgdm9pZCogX192 KSBjb25zdDsNCiAgICB9Ow0KDQogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9PdXRJdGVyPg0KICAgIGxvY2FsZTo6aWQgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6aWQ7 DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgY2xhc3MgY29sbGF0ZSA6IHB1 YmxpYyBsb2NhbGU6OmZhY2V0DQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBf Q2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJp bmdfdHlwZTsNCg0KICAgIHByb3RlY3RlZDoNCg0KDQogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9j YWxlX2NvbGxhdGU7DQoNCiAgICBwdWJsaWM6DQogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsN Cg0KICAgICAgZXhwbGljaXQNCiAgICAgIGNvbGxhdGUoc2l6ZV90IF9fcmVmcyA9IDApDQogICAg ICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQ0KICAgICAgeyBfTV9jX2xvY2FsZV9jb2xsYXRlID0g X1NfY19sb2NhbGU7IH0NCg0KDQogICAgICBleHBsaWNpdA0KICAgICAgY29sbGF0ZShfX2NfbG9j YWxlIF9fY2xvYywgc2l6ZV90IF9fcmVmcyA9IDApDQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19y ZWZzKQ0KICAgICAgeyBfTV9jX2xvY2FsZV9jb2xsYXRlID0gX1NfY2xvbmVfY19sb2NhbGUoX19j bG9jKTsgfQ0KDQogICAgICBpbnQNCiAgICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwg Y29uc3QgX0NoYXJUKiBfX2hpMSwNCiAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2xvMiwg Y29uc3QgX0NoYXJUKiBfX2hpMikgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2NvbXBh cmUoX19sbzEsIF9faGkxLCBfX2xvMiwgX19oaTIpOyB9DQoNCiAgICAgIHN0cmluZ190eXBlDQog ICAgICB0cmFuc2Zvcm0oY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNv bnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb190cmFuc2Zvcm0oX19sbywgX19oaSk7IH0NCg0K ICAgICAgbG9uZw0KICAgICAgaGFzaChjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCog X19oaSkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2hhc2goX19sbywgX19oaSk7IH0N Cg0KDQogICAgICBpbnQNCiAgICAgIF9NX2NvbXBhcmUoY29uc3QgX0NoYXJUKiwgY29uc3QgX0No YXJUKikgY29uc3Q7DQoNCiAgICAgIHNpemVfdA0KICAgICAgX01fdHJhbnNmb3JtKF9DaGFyVCos IGNvbnN0IF9DaGFyVCosIHNpemVfdCkgY29uc3Q7DQoNCiAgcHJvdGVjdGVkOg0KICAgICAgdmly dHVhbA0KICAgICAgfmNvbGxhdGUoKQ0KICAgICAgew0KICAgICAgICBpZiAoX01fY19sb2NhbGVf Y29sbGF0ZSAhPSBfU19jX2xvY2FsZSkNCiAgICAgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9N X2NfbG9jYWxlX2NvbGxhdGUpOw0KICAgICAgfQ0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAg ZG9fY29tcGFyZShjb25zdCBfQ2hhclQqIF9fbG8xLCBjb25zdCBfQ2hhclQqIF9faGkxLA0KICAg ICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fbG8yLCBjb25zdCBfQ2hhclQqIF9faGkyKSBj b25zdDsNCg0KICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQ0KICAgICAgZG9fdHJhbnNmb3JtKGNv bnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdDsNCg0KICAgICAgdmly dHVhbCBsb25nDQogICAgICBkb19oYXNoKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJU KiBfX2hpKSBjb25zdDsNCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAg ICBsb2NhbGU6OmlkIGNvbGxhdGU8X0NoYXJUPjo6aWQ7DQoNCg0KICB0ZW1wbGF0ZTw+DQogICAg aW50DQogICAgY29sbGF0ZTxjaGFyPjo6X01fY29tcGFyZShjb25zdCBjaGFyKiwgY29uc3QgY2hh ciopIGNvbnN0Ow0KDQogIHRlbXBsYXRlPD4NCiAgICBzaXplX3QNCiAgICBjb2xsYXRlPGNoYXI+ OjpfTV90cmFuc2Zvcm0oY2hhciosIGNvbnN0IGNoYXIqLCBzaXplX3QpIGNvbnN0Ow0KIyA4OTYg InQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAz DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBjbGFzcyBjb2xsYXRlX2J5bmFtZSA6 IHB1YmxpYyBjb2xsYXRlPF9DaGFyVD4NCiAgICB7DQogICAgcHVibGljOg0KICAgICAgdHlwZWRl ZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBz dHJpbmdfdHlwZTsNCg0KICAgICAgZXhwbGljaXQNCiAgICAgIGNvbGxhdGVfYnluYW1lKGNvbnN0 IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApDQogICAgICA6IGNvbGxhdGU8X0NoYXJUPihf X3JlZnMpDQogICAgICB7DQogICAgICAgIGlmIChfTV9jX2xvY2FsZV9jb2xsYXRlICE9IF9TX2Nf bG9jYWxlKQ0KICAgICAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfY29sbGF0 ZSk7DQogICAgICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfTV9jX2xvY2FsZV9jb2xsYXRlLCBfX3Mp Ow0KICAgICAgfQ0KDQogICAgcHJvdGVjdGVkOg0KICAgICAgdmlydHVhbA0KICAgICAgfmNvbGxh dGVfYnluYW1lKCkgeyB9DQogICAgfTsNCg0KDQogIGNsYXNzIHRpbWVfYmFzZQ0KICB7DQogIHB1 YmxpYzoNCiAgICBlbnVtIGRhdGVvcmRlciB7IG5vX29yZGVyLCBkbXksIG1keSwgeW1kLCB5ZG0g fTsNCiAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgY2xhc3MgX190aW1l cHVuY3QgOiBwdWJsaWMgbG9jYWxlOjpmYWNldA0KICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAg IHR5cGVkZWYgX0NoYXJUIF9fY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8 X0NoYXJUPiBfX3N0cmluZ190eXBlOw0KDQogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsNCg0K DQogICAgICBzdGF0aWMgY29uc3QgX0NoYXJUKiBfU190aW1lem9uZXNbMTRdOw0KDQogICAgcHJv dGVjdGVkOg0KICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV90aW1lcHVuY3Q7DQogICAgICBj b25zdCBjaGFyKiBfTV9uYW1lX3RpbWVwdW5jdDsNCiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF0 ZV9mb3JtYXQ7DQogICAgICBjb25zdCBfQ2hhclQqIF9NX2RhdGVfZXJhX2Zvcm1hdDsNCiAgICAg IGNvbnN0IF9DaGFyVCogX01fdGltZV9mb3JtYXQ7DQogICAgICBjb25zdCBfQ2hhclQqIF9NX3Rp bWVfZXJhX2Zvcm1hdDsNCiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF0ZV90aW1lX2Zvcm1hdDsN CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF0ZV90aW1lX2VyYV9mb3JtYXQ7DQogICAgICBjb25z dCBfQ2hhclQqIF9NX2FtOw0KICAgICAgY29uc3QgX0NoYXJUKiBfTV9wbTsNCiAgICAgIGNvbnN0 IF9DaGFyVCogX01fYW1fcG1fZm9ybWF0Ow0KDQoNCiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5 MTsNCiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5MjsNCiAgICAgIGNvbnN0IF9DaGFyVCogX01f ZGF5MzsNCiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5NDsNCiAgICAgIGNvbnN0IF9DaGFyVCog X01fZGF5NTsNCiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5NjsNCiAgICAgIGNvbnN0IF9DaGFy VCogX01fZGF5NzsNCg0KDQogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheV9hMTsNCiAgICAgIGNv bnN0IF9DaGFyVCogX01fZGF5X2EyOw0KICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTM7DQog ICAgICBjb25zdCBfQ2hhclQqIF9NX2RheV9hNDsNCiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5 X2E1Ow0KICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTY7DQogICAgICBjb25zdCBfQ2hhclQq IF9NX2RheV9hNzsNCg0KDQogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDE7DQogICAgICBj b25zdCBfQ2hhclQqIF9NX21vbnRoMDI7DQogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDM7 DQogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDQ7DQogICAgICBjb25zdCBfQ2hhclQqIF9N X21vbnRoMDU7DQogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDY7DQogICAgICBjb25zdCBf Q2hhclQqIF9NX21vbnRoMDc7DQogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDg7DQogICAg ICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDk7DQogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRo MTA7DQogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMTE7DQogICAgICBjb25zdCBfQ2hhclQq IF9NX21vbnRoMTI7DQoNCg0KICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDE7DQogICAg ICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwMjsNCiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9u dGhfYTAzOw0KICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDQ7DQogICAgICBjb25zdCBf Q2hhclQqIF9NX21vbnRoX2EwNTsNCiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTA2Ow0K ICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDc7DQogICAgICBjb25zdCBfQ2hhclQqIF9N X21vbnRoX2EwODsNCiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTA5Ow0KICAgICAgY29u c3QgX0NoYXJUKiBfTV9tb250aF9hMTA7DQogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2Ex MTsNCiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTEyOw0KDQogICAgcHVibGljOg0KICAg ICAgZXhwbGljaXQNCiAgICAgIF9fdGltZXB1bmN0KHNpemVfdCBfX3JlZnMgPSAwKQ0KICAgICAg OiBsb2NhbGU6OmZhY2V0KF9fcmVmcyksIF9NX25hbWVfdGltZXB1bmN0KCJDIikNCiAgICAgIHsg X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoKTsgfQ0KDQogICAgICBleHBsaWNpdA0KICAgICAgX190 aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVm cyA9IDApDQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSwgX01fbmFtZV90aW1lcHVuY3Qo X19zKQ0KICAgICAgeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2Nsb2MpOyB9DQoNCiAgICAg IHZvaWQNCiAgICAgIF9NX3B1dChfQ2hhclQqIF9fcywgc2l6ZV90IF9fbWF4bGVuLCBjb25zdCBf Q2hhclQqIF9fZm9ybWF0LA0KICAgICAgICAgICAgIGNvbnN0IHRtKiBfX3RtKSBjb25zdDsNCg0K ICAgICAgdm9pZA0KICAgICAgX01fZGF0ZV9mb3JtYXRzKGNvbnN0IF9DaGFyVCoqIF9fZGF0ZSkg Y29uc3QNCiAgICAgIHsNCg0KICAgICAgICBfX2RhdGVbMF0gPSBfTV9kYXRlX2Zvcm1hdDsNCiAg ICAgICAgX19kYXRlWzFdID0gX01fZGF0ZV9lcmFfZm9ybWF0Ow0KICAgICAgfQ0KDQogICAgICB2 b2lkDQogICAgICBfTV90aW1lX2Zvcm1hdHMoY29uc3QgX0NoYXJUKiogX190aW1lKSBjb25zdA0K ICAgICAgew0KDQogICAgICAgIF9fdGltZVswXSA9IF9NX3RpbWVfZm9ybWF0Ow0KICAgICAgICBf X3RpbWVbMV0gPSBfTV90aW1lX2VyYV9mb3JtYXQ7DQogICAgICB9DQoNCiAgICAgIHZvaWQNCiAg ICAgIF9NX2FtcG0oY29uc3QgX0NoYXJUKiogX19hbXBtKSBjb25zdA0KICAgICAgew0KICAgICAg ICBfX2FtcG1bMF0gPSBfTV9hbTsNCiAgICAgICAgX19hbXBtWzFdID0gX01fcG07DQogICAgICB9 DQoNCiAgICAgIHZvaWQNCiAgICAgIF9NX2RhdGVfdGltZV9mb3JtYXRzKGNvbnN0IF9DaGFyVCoq IF9fZHQpIGNvbnN0DQogICAgICB7DQoNCiAgICAgICAgX19kdFswXSA9IF9NX2RhdGVfdGltZV9m b3JtYXQ7DQogICAgICAgIF9fZHRbMV0gPSBfTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdDsNCiAgICAg IH0NCg0KICAgICAgdm9pZA0KICAgICAgX01fZGF5cyhjb25zdCBfQ2hhclQqKiBfX2RheXMpIGNv bnN0DQogICAgICB7DQogICAgICAgIF9fZGF5c1swXSA9IF9NX2RheTE7DQogICAgICAgIF9fZGF5 c1sxXSA9IF9NX2RheTI7DQogICAgICAgIF9fZGF5c1syXSA9IF9NX2RheTM7DQogICAgICAgIF9f ZGF5c1szXSA9IF9NX2RheTQ7DQogICAgICAgIF9fZGF5c1s0XSA9IF9NX2RheTU7DQogICAgICAg IF9fZGF5c1s1XSA9IF9NX2RheTY7DQogICAgICAgIF9fZGF5c1s2XSA9IF9NX2RheTc7DQogICAg ICB9DQoNCiAgICAgIHZvaWQNCiAgICAgIF9NX2RheXNfYWJicmV2aWF0ZWQoY29uc3QgX0NoYXJU KiogX19kYXlzKSBjb25zdA0KICAgICAgew0KICAgICAgICBfX2RheXNbMF0gPSBfTV9kYXlfYTE7 DQogICAgICAgIF9fZGF5c1sxXSA9IF9NX2RheV9hMjsNCiAgICAgICAgX19kYXlzWzJdID0gX01f ZGF5X2EzOw0KICAgICAgICBfX2RheXNbM10gPSBfTV9kYXlfYTQ7DQogICAgICAgIF9fZGF5c1s0 XSA9IF9NX2RheV9hNTsNCiAgICAgICAgX19kYXlzWzVdID0gX01fZGF5X2E2Ow0KICAgICAgICBf X2RheXNbNl0gPSBfTV9kYXlfYTc7DQogICAgICB9DQoNCiAgICAgIHZvaWQNCiAgICAgIF9NX21v bnRocyhjb25zdCBfQ2hhclQqKiBfX21vbnRocykgY29uc3QNCiAgICAgIHsNCiAgICAgICAgX19t b250aHNbMF0gPSBfTV9tb250aDAxOw0KICAgICAgICBfX21vbnRoc1sxXSA9IF9NX21vbnRoMDI7 DQogICAgICAgIF9fbW9udGhzWzJdID0gX01fbW9udGgwMzsNCiAgICAgICAgX19tb250aHNbM10g PSBfTV9tb250aDA0Ow0KICAgICAgICBfX21vbnRoc1s0XSA9IF9NX21vbnRoMDU7DQogICAgICAg IF9fbW9udGhzWzVdID0gX01fbW9udGgwNjsNCiAgICAgICAgX19tb250aHNbNl0gPSBfTV9tb250 aDA3Ow0KICAgICAgICBfX21vbnRoc1s3XSA9IF9NX21vbnRoMDg7DQogICAgICAgIF9fbW9udGhz WzhdID0gX01fbW9udGgwOTsNCiAgICAgICAgX19tb250aHNbOV0gPSBfTV9tb250aDEwOw0KICAg ICAgICBfX21vbnRoc1sxMF0gPSBfTV9tb250aDExOw0KICAgICAgICBfX21vbnRoc1sxMV0gPSBf TV9tb250aDEyOw0KICAgICAgfQ0KDQogICAgICB2b2lkDQogICAgICBfTV9tb250aHNfYWJicmV2 aWF0ZWQoY29uc3QgX0NoYXJUKiogX19tb250aHMpIGNvbnN0DQogICAgICB7DQogICAgICAgIF9f bW9udGhzWzBdID0gX01fbW9udGhfYTAxOw0KICAgICAgICBfX21vbnRoc1sxXSA9IF9NX21vbnRo X2EwMjsNCiAgICAgICAgX19tb250aHNbMl0gPSBfTV9tb250aF9hMDM7DQogICAgICAgIF9fbW9u dGhzWzNdID0gX01fbW9udGhfYTA0Ow0KICAgICAgICBfX21vbnRoc1s0XSA9IF9NX21vbnRoX2Ew NTsNCiAgICAgICAgX19tb250aHNbNV0gPSBfTV9tb250aF9hMDY7DQogICAgICAgIF9fbW9udGhz WzZdID0gX01fbW9udGhfYTA3Ow0KICAgICAgICBfX21vbnRoc1s3XSA9IF9NX21vbnRoX2EwODsN CiAgICAgICAgX19tb250aHNbOF0gPSBfTV9tb250aF9hMDk7DQogICAgICAgIF9fbW9udGhzWzld ID0gX01fbW9udGhfYTEwOw0KICAgICAgICBfX21vbnRoc1sxMF0gPSBfTV9tb250aF9hMTE7DQog ICAgICAgIF9fbW9udGhzWzExXSA9IF9NX21vbnRoX2ExMjsNCiAgICAgIH0NCg0KICAgIHByb3Rl Y3RlZDoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5fX3RpbWVwdW5jdCgpOw0KDQoNCiAgICAgIHZv aWQNCiAgICAgIF9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jID0gX1Nf Y19sb2NhbGUpOw0KICAgIH07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGxv Y2FsZTo6aWQgX190aW1lcHVuY3Q8X0NoYXJUPjo6aWQ7DQoNCg0KICB0ZW1wbGF0ZTw+DQogICAg X190aW1lcHVuY3Q8Y2hhcj46On5fX3RpbWVwdW5jdCgpOw0KDQogIHRlbXBsYXRlPD4NCiAgICBj b25zdCBjaGFyKg0KICAgIF9fdGltZXB1bmN0PGNoYXI+OjpfU190aW1lem9uZXNbMTRdOw0KDQog IHRlbXBsYXRlPD4NCiAgICB2b2lkDQogICAgX190aW1lcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxp emVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKTsNCg0KICB0ZW1wbGF0ZTw+DQogICAgdm9p ZA0KICAgIF9fdGltZXB1bmN0PGNoYXI+OjpfTV9wdXQoY2hhciosIHNpemVfdCwgY29uc3QgY2hh ciosIGNvbnN0IHRtKikgY29uc3Q7DQojIDExNDcgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUv ZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VD4NCiAgICBjb25zdCBfQ2hhclQqIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9TX3RpbWV6b25lc1sx NF07DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQog ICAgY2xhc3MgdGltZV9nZXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIHRpbWVfYmFz ZQ0KICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsN CiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7DQogICAgICB0eXBlZGVmIGJhc2ljX3N0 cmluZzxfQ2hhclQ+IF9fc3RyaW5nX3R5cGU7DQoNCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlk Ow0KDQogICAgICBleHBsaWNpdA0KICAgICAgdGltZV9nZXQoc2l6ZV90IF9fcmVmcyA9IDApDQog ICAgICA6IGxvY2FsZTo6ZmFjZXQgKF9fcmVmcykgeyB9DQoNCiAgICAgIGRhdGVvcmRlcg0KICAg ICAgZGF0ZV9vcmRlcigpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb19kYXRlX29yZGVy KCk7IH0NCg0KICAgICAgaXRlcl90eXBlDQogICAgICBnZXRfdGltZShpdGVyX3R5cGUgX19iZWcs IGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sDQogICAgICAgICAgICAgICBpb3NfYmFz ZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ ZG9fZ2V0X3RpbWUoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSk7IH0NCg0KICAgICAg aXRlcl90eXBlDQogICAgICBnZXRfZGF0ZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2Vu ZCwgaW9zX2Jhc2UmIF9faW8sDQogICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l cnIsIHRtKiBfX3RtKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0X2RhdGUoX19i ZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSk7IH0NCg0KICAgICAgaXRlcl90eXBlDQogICAg ICBnZXRfd2Vla2RheShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2Um IF9faW8sDQogICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBf X3RtKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0X3dlZWtkYXkoX19iZWcsIF9f ZW5kLCBfX2lvLCBfX2VyciwgX190bSk7IH0NCg0KICAgICAgaXRlcl90eXBlDQogICAgICBnZXRf bW9udGhuYW1lKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19p bywNCiAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190 bSkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldF9tb250aG5hbWUoX19iZWcsIF9f ZW5kLCBfX2lvLCBfX2VyciwgX190bSk7IH0NCg0KICAgICAgaXRlcl90eXBlDQogICAgICBnZXRf eWVhcihpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sDQog ICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdA0K ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0X3llYXIoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2Vy ciwgX190bSk7IH0NCg0KICAgIHByb3RlY3RlZDoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH50aW1l X2dldCgpIHsgfQ0KDQogICAgICB2aXJ0dWFsIGRhdGVvcmRlcg0KICAgICAgZG9fZGF0ZV9vcmRl cigpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9fZ2V0X3RpbWUo aXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAg ICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3Q7DQoN CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19nZXRfZGF0ZShpdGVyX3R5cGUgX19i ZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sDQogICAgICAgICAgICAgICAgICBp b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdDsNCg0KICAgICAgdmlydHVh bCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldF93ZWVrZGF5KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90 eXBlIF9fZW5kLCBpb3NfYmFzZSYsDQogICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9z dGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdDsNCg0KICAgICAgdmlydHVhbCBpdGVyX3R5cGUN CiAgICAgIGRvX2dldF9tb250aG5hbWUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQs IGlvc19iYXNlJiwNCiAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f ZXJyLCB0bSogX190bSkgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBk b19nZXRfeWVhcihpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9f aW8sDQogICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3Rt KSBjb25zdDsNCg0KDQogICAgICB2b2lkDQogICAgICBfTV9leHRyYWN0X251bShpdGVyX3R5cGUm IF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBpbnQmIF9fbWVtYmVyLA0KICAgICAgICAgICAgICAg ICAgICAgaW50IF9fbWluLCBpbnQgX19tYXgsIHNpemVfdCBfX2xlbiwNCiAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUsDQogICAgICAgICAgICAgICAgICAg ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIpIGNvbnN0Ow0KDQoNCg0KICAgICAgdm9pZA0KICAg ICAgX01fZXh0cmFjdF9uYW1lKGl0ZXJfdHlwZSYgX19iZWcsIGl0ZXJfdHlwZSYgX19lbmQsIGlu dCYgX19tZW1iZXIsDQogICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiogX19uYW1l cywgc2l6ZV90IF9faW5kZXhsZW4sDQogICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlv c3RhdGUmIF9fZXJyKSBjb25zdDsNCg0KDQogICAgICB2b2lkDQogICAgICBfTV9leHRyYWN0X3Zp YV9mb3JtYXQoaXRlcl90eXBlJiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW9zX2Jhc2UmIF9f aW8sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy LCB0bSogX190bSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9f Zm9ybWF0KSBjb25zdDsNCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX0luSXRlcj4NCiAgICBsb2NhbGU6OmlkIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46 OmlkOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAg ICBjbGFzcyB0aW1lX2dldF9ieW5hbWUgOiBwdWJsaWMgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVy Pg0KICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsN CiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7DQoNCiAgICAgIGV4cGxpY2l0DQogICAg ICB0aW1lX2dldF9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMgPSAwKQ0KICAgICAg OiB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+KF9fcmVmcykgeyB9DQoNCiAgICBwcm90ZWN0ZWQ6 DQogICAgICB2aXJ0dWFsDQogICAgICB+dGltZV9nZXRfYnluYW1lKCkgeyB9DQogICAgfTsNCg0K ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPg0KICAgIGNsYXNz IHRpbWVfcHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyB0aW1lX2Jhc2UNCiAgICB7 DQogICAgcHVibGljOg0KDQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQogICAgICB0 eXBlZGVmIF9PdXRJdGVyIGl0ZXJfdHlwZTsNCg0KICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7 DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICB0aW1lX3B1dChzaXplX3QgX19yZWZzID0gMCkNCiAg ICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQ0KDQogICAgICBpdGVyX3R5cGUNCiAgICAg IHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgY29u c3QgdG0qIF9fdG0sDQogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2JlZywgY29uc3QgX0NoYXJU KiBfX2VuZCkgY29uc3Q7DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAgICAgcHV0KGl0ZXJfdHlwZSBf X3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLA0KICAgICAgICAgIGNvbnN0IHRt KiBfX3RtLCBjaGFyIF9fZm9ybWF0LCBjaGFyIF9fbW9kID0gMCkgY29uc3QNCiAgICAgIHsgcmV0 dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9faW8sIF9fZmlsbCwgX190bSwgX19mb3JtYXQsIF9fbW9k KTsgfQ0KDQogICAgcHJvdGVjdGVkOg0KICAgICAgdmlydHVhbA0KICAgICAgfnRpbWVfcHV0KCkN CiAgICAgIHsgfQ0KDQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9fcHV0KGl0ZXJf dHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBjb25zdCB0bSogX190 bSwNCiAgICAgICAgICAgICBjaGFyIF9fZm9ybWF0LCBjaGFyIF9fbW9kKSBjb25zdDsNCiAgICB9 Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+DQogICAg bG9jYWxlOjppZCB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6aWQ7DQoNCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBjbGFzcyB0aW1lX3B1dF9i eW5hbWUgOiBwdWJsaWMgdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj4NCiAgICB7DQogICAgcHVi bGljOg0KDQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQogICAgICB0eXBlZGVmIF9P dXRJdGVyIGl0ZXJfdHlwZTsNCg0KICAgICAgZXhwbGljaXQNCiAgICAgIHRpbWVfcHV0X2J5bmFt ZShjb25zdCBjaGFyKiAsIHNpemVfdCBfX3JlZnMgPSAwKQ0KICAgICAgOiB0aW1lX3B1dDxfQ2hh clQsIF9PdXRJdGVyPihfX3JlZnMpDQogICAgICB7IH07DQoNCiAgICBwcm90ZWN0ZWQ6DQogICAg ICB2aXJ0dWFsDQogICAgICB+dGltZV9wdXRfYnluYW1lKCkgeyB9DQogICAgfTsNCg0KDQogIGNs YXNzIG1vbmV5X2Jhc2UNCiAgew0KICBwdWJsaWM6DQogICAgZW51bSBwYXJ0IHsgbm9uZSwgc3Bh Y2UsIHN5bWJvbCwgc2lnbiwgdmFsdWUgfTsNCiAgICBzdHJ1Y3QgcGF0dGVybiB7IGNoYXIgZmll bGRbNF07IH07DQoNCiAgICBzdGF0aWMgY29uc3QgcGF0dGVybiBfU19kZWZhdWx0X3BhdHRlcm47 DQoNCg0KDQogICAgc3RhdGljIHBhdHRlcm4NCiAgICBfU19jb25zdHJ1Y3RfcGF0dGVybihjaGFy IF9fcHJlY2VkZXMsIGNoYXIgX19zcGFjZSwgY2hhciBfX3Bvc24pOw0KICB9Ow0KDQogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4NCiAgICBjbGFzcyBtb25leXB1bmN0IDog cHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBtb25leV9iYXNlDQogICAgew0KICAgIHB1Ymxp YzoNCg0KICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBiYXNp Y19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsNCg0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aW50bCA9IF9JbnRsOw0KICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7DQoNCiAgICBwcml2YXRl Og0KICAgICAgY29uc3QgY2hhciogX01fZ3JvdXBpbmc7DQogICAgICBjaGFyX3R5cGUgX01fZGVj aW1hbF9wb2ludDsNCiAgICAgIGNoYXJfdHlwZSBfTV90aG91c2FuZHNfc2VwOw0KICAgICAgY29u c3QgY2hhcl90eXBlKiBfTV9jdXJyX3N5bWJvbDsNCiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01f cG9zaXRpdmVfc2lnbjsNCiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01fbmVnYXRpdmVfc2lnbjsN CiAgICAgIGludCBfTV9mcmFjX2RpZ2l0czsNCiAgICAgIHBhdHRlcm4gX01fcG9zX2Zvcm1hdDsN CiAgICAgIHBhdHRlcm4gX01fbmVnX2Zvcm1hdDsNCg0KICAgIHB1YmxpYzoNCiAgICAgIGV4cGxp Y2l0DQogICAgICBtb25leXB1bmN0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQo X19yZWZzKQ0KICAgICAgeyBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoKTsgfQ0KDQogICAgICBl eHBsaWNpdA0KICAgICAgbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgc2l6ZV90IF9fcmVm cyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpDQogICAgICB7IF9NX2luaXRpYWxpemVfbW9u ZXlwdW5jdChfX2Nsb2MpOyB9DQoNCiAgICAgIGNoYXJfdHlwZQ0KICAgICAgZGVjaW1hbF9wb2lu dCgpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb19kZWNpbWFsX3BvaW50KCk7IH0NCg0K ICAgICAgY2hhcl90eXBlDQogICAgICB0aG91c2FuZHNfc2VwKCkgY29uc3QNCiAgICAgIHsgcmV0 dXJuIHRoaXMtPmRvX3Rob3VzYW5kc19zZXAoKTsgfQ0KDQogICAgICBzdHJpbmcNCiAgICAgIGdy b3VwaW5nKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dyb3VwaW5nKCk7IH0NCg0K ICAgICAgc3RyaW5nX3R5cGUNCiAgICAgIGN1cnJfc3ltYm9sKCkgY29uc3QNCiAgICAgIHsgcmV0 dXJuIHRoaXMtPmRvX2N1cnJfc3ltYm9sKCk7IH0NCg0KICAgICAgc3RyaW5nX3R5cGUNCiAgICAg IHBvc2l0aXZlX3NpZ24oKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcG9zaXRpdmVf c2lnbigpOyB9DQoNCiAgICAgIHN0cmluZ190eXBlDQogICAgICBuZWdhdGl2ZV9zaWduKCkgY29u c3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX25lZ2F0aXZlX3NpZ24oKTsgfQ0KDQogICAgICBp bnQNCiAgICAgIGZyYWNfZGlnaXRzKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2Zy YWNfZGlnaXRzKCk7IH0NCg0KICAgICAgcGF0dGVybg0KICAgICAgcG9zX2Zvcm1hdCgpIGNvbnN0 DQogICAgICB7IHJldHVybiB0aGlzLT5kb19wb3NfZm9ybWF0KCk7IH0NCg0KICAgICAgcGF0dGVy bg0KICAgICAgbmVnX2Zvcm1hdCgpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb19uZWdf Zm9ybWF0KCk7IH0NCg0KICAgIHByb3RlY3RlZDoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5tb25l eXB1bmN0KCk7DQoNCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlDQogICAgICBkb19kZWNpbWFsX3Bv aW50KCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX2RlY2ltYWxfcG9pbnQ7IH0NCg0KICAgICAg dmlydHVhbCBjaGFyX3R5cGUNCiAgICAgIGRvX3Rob3VzYW5kc19zZXAoKSBjb25zdA0KICAgICAg eyByZXR1cm4gX01fdGhvdXNhbmRzX3NlcDsgfQ0KDQogICAgICB2aXJ0dWFsIHN0cmluZw0KICAg ICAgZG9fZ3JvdXBpbmcoKSBjb25zdA0KICAgICAgeyByZXR1cm4gX01fZ3JvdXBpbmc7IH0NCg0K ICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQ0KICAgICAgZG9fY3Vycl9zeW1ib2woKSBjb25zdA0K ICAgICAgeyByZXR1cm4gX01fY3Vycl9zeW1ib2w7IH0NCg0KICAgICAgdmlydHVhbCBzdHJpbmdf dHlwZQ0KICAgICAgZG9fcG9zaXRpdmVfc2lnbigpIGNvbnN0DQogICAgICB7IHJldHVybiBfTV9w b3NpdGl2ZV9zaWduOyB9DQoNCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUNCiAgICAgIGRvX25l Z2F0aXZlX3NpZ24oKSBjb25zdA0KICAgICAgeyByZXR1cm4gX01fbmVnYXRpdmVfc2lnbjsgfQ0K DQogICAgICB2aXJ0dWFsIGludA0KICAgICAgZG9fZnJhY19kaWdpdHMoKSBjb25zdA0KICAgICAg eyByZXR1cm4gX01fZnJhY19kaWdpdHM7IH0NCg0KICAgICAgdmlydHVhbCBwYXR0ZXJuDQogICAg ICBkb19wb3NfZm9ybWF0KCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX3Bvc19mb3JtYXQ7IH0N Cg0KICAgICAgdmlydHVhbCBwYXR0ZXJuDQogICAgICBkb19uZWdfZm9ybWF0KCkgY29uc3QNCiAg ICAgIHsgcmV0dXJuIF9NX25lZ19mb3JtYXQ7IH0NCg0KDQogICAgICAgdm9pZA0KICAgICAgIF9N X2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYyA9IF9TX2NfbG9jYWxlKTsN CiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4NCiAgICBs b2NhbGU6OmlkIG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD46OmlkOw0KDQogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4NCiAgICBjb25zdCBib29sIG1vbmV5cHVuY3Q8X0No YXJULCBfSW50bD46OmludGw7DQoNCiAgdGVtcGxhdGU8Pg0KICAgIG1vbmV5cHVuY3Q8Y2hhciwg dHJ1ZT46On5tb25leXB1bmN0KCk7DQoNCiAgdGVtcGxhdGU8Pg0KICAgIG1vbmV5cHVuY3Q8Y2hh ciwgZmFsc2U+Ojp+bW9uZXlwdW5jdCgpOw0KDQogIHRlbXBsYXRlPD4NCiAgICB2b2lkDQogICAg bW9uZXlwdW5jdDxjaGFyLCB0cnVlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2Nh bGUgX19jbG9jKTsNCg0KICB0ZW1wbGF0ZTw+DQogICAgdm9pZA0KICAgIG1vbmV5cHVuY3Q8Y2hh ciwgZmFsc2U+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOw0K IyAxNDgwICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNl dHMuaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+DQogICAgY2xh c3MgbW9uZXlwdW5jdF9ieW5hbWUgOiBwdWJsaWMgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPg0K ICAgIHsNCiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfbW9uZXlwdW5jdDsNCg0KICAgIHB1 YmxpYzoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFz aWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7DQoNCiAgICAgIHN0YXRpYyBjb25zdCBib29s IGludGwgPSBfSW50bDsNCg0KICAgICAgZXhwbGljaXQNCiAgICAgIG1vbmV5cHVuY3RfYnluYW1l KGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApDQogICAgICA6IG1vbmV5cHVuY3Q8 X0NoYXJULCBfSW50bD4oX19yZWZzKQ0KICAgICAgew0KICAgICAgICBfU19jcmVhdGVfY19sb2Nh bGUoX01fY19sb2NhbGVfbW9uZXlwdW5jdCwgX19zKTsNCiAgICAgICAgX01faW5pdGlhbGl6ZV9t b25leXB1bmN0KF9NX2NfbG9jYWxlX21vbmV5cHVuY3QpOw0KICAgICAgfQ0KDQogICAgcHJvdGVj dGVkOg0KICAgICAgdmlydHVhbA0KICAgICAgfm1vbmV5cHVuY3RfYnluYW1lKCkNCiAgICAgIHsg X1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tb25leXB1bmN0KTsgfQ0KICAgIH07DQoN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPg0KICAgIGNvbnN0IGJvb2wg bW9uZXlwdW5jdF9ieW5hbWU8X0NoYXJULCBfSW50bD46OmludGw7DQoNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0KICAgIGNsYXNzIG1vbmV5X2dldCA6IHB1 YmxpYyBsb2NhbGU6OmZhY2V0DQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBf Q2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsNCiAgICAg IHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7DQoNCiAgICAgIHN0YXRp YyBsb2NhbGU6OmlkIGlkOw0KDQogICAgICBleHBsaWNpdA0KICAgICAgbW9uZXlfZ2V0KHNpemVf dCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0NCg0KICAgICAgaXRlcl90 eXBlDQogICAgICBnZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50 bCwgaW9zX2Jhc2UmIF9faW8sDQogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBs b25nIGRvdWJsZSYgX191bml0cykgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChf X3MsIF9fZW5kLCBfX2ludGwsIF9faW8sIF9fZXJyLCBfX3VuaXRzKTsgfQ0KDQogICAgICBpdGVy X3R5cGUNCiAgICAgIGdldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19p bnRsLCBpb3NfYmFzZSYgX19pbywNCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs IHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dl dChfX3MsIF9fZW5kLCBfX2ludGwsIF9faW8sIF9fZXJyLCBfX2RpZ2l0cyk7IH0NCg0KICAgIHBy b3RlY3RlZDoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5tb25leV9nZXQoKSB7IH0NCg0KICAgICAg dmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUg X19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywNCiAgICAgICAgICAgICBpb3NfYmFz ZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3VuaXRzKSBjb25zdDsNCg0KICAgICAg dmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUg X19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywNCiAgICAgICAgICAgICBpb3NfYmFz ZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3Q7DQogICAgfTsN Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQogICAgbG9j YWxlOjppZCBtb25leV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6aWQ7DQoNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBjbGFzcyBtb25leV9wdXQgOiBw dWJsaWMgbG9jYWxlOjpmYWNldA0KICAgIHsNCiAgICBwdWJsaWM6DQogICAgICB0eXBlZGVmIF9D aGFyVCBjaGFyX3R5cGU7DQogICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0ZXJfdHlwZTsNCiAgICAg IHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7DQoNCiAgICAgIHN0YXRp YyBsb2NhbGU6OmlkIGlkOw0KDQogICAgICBleHBsaWNpdA0KICAgICAgbW9uZXlfcHV0KHNpemVf dCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0NCg0KICAgICAgaXRlcl90 eXBlDQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lv LA0KICAgICAgICAgIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgZG91YmxlIF9fdW5pdHMpIGNvbnN0 DQogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2ludGwsIF9faW8sIF9fZmlsbCwg X191bml0cyk7IH0NCg0KICAgICAgaXRlcl90eXBlDQogICAgICBwdXQoaXRlcl90eXBlIF9fcywg Ym9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgIGNoYXJfdHlwZSBfX2ZpbGws IGNvbnN0IHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMt PmRvX3B1dChfX3MsIF9faW50bCwgX19pbywgX19maWxsLCBfX2RpZ2l0cyk7IH0NCg0KICAgIHBy b3RlY3RlZDoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5tb25leV9wdXQoKSB7IH0NCg0KICAgICAg dmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50 bCwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsDQogICAgICAgICAgICAgbG9uZyBk b3VibGUgX191bml0cykgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBk b19wdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5 cGUgX19maWxsLA0KICAgICAgICAgICAgIGNvbnN0IHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29u c3Q7DQogICAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJ dGVyPg0KICAgIGxvY2FsZTo6aWQgbW9uZXlfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjppZDsNCg0K DQogIHN0cnVjdCBtZXNzYWdlc19iYXNlDQogIHsNCiAgICB0eXBlZGVmIGludCBjYXRhbG9nOw0K ICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBjbGFzcyBtZXNzYWdlcyA6 IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgbWVzc2FnZXNfYmFzZQ0KICAgIHsNCiAgICBw dWJsaWM6DQoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYg YmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7DQoNCiAgICBwcm90ZWN0ZWQ6DQoNCg0K ICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV9tZXNzYWdlczsNCg0KDQogICAgICBjb25zdCBj aGFyKiBfTV9uYW1lX21lc3NhZ2VzOw0KDQoNCiAgICBwdWJsaWM6DQogICAgICBzdGF0aWMgbG9j YWxlOjppZCBpZDsNCg0KICAgICAgZXhwbGljaXQNCiAgICAgIG1lc3NhZ2VzKHNpemVfdCBfX3Jl ZnMgPSAwKQ0KICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcyksIF9NX25hbWVfbWVzc2FnZXMo IkMiKQ0KICAgICAgeyBfTV9jX2xvY2FsZV9tZXNzYWdlcyA9IF9TX2NfbG9jYWxlOyB9DQoNCg0K ICAgICAgZXhwbGljaXQNCiAgICAgIG1lc3NhZ2VzKF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBj aGFyKiBfX25hbWUsIHNpemVfdCBfX3JlZnMgPSAwKQ0KICAgICAgOiBsb2NhbGU6OmZhY2V0KF9f cmVmcykNCiAgICAgIHsNCiAgICAgICAgX01fbmFtZV9tZXNzYWdlcyA9IF9fbmFtZTsNCiAgICAg ICAgX01fY19sb2NhbGVfbWVzc2FnZXMgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOw0KICAg ICAgfQ0KDQogICAgICBjYXRhbG9nDQogICAgICBvcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFy PiYgX19zLCBjb25zdCBsb2NhbGUmIF9fbG9jKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ ZG9fb3BlbihfX3MsIF9fbG9jKTsgfQ0KDQoNCiAgICAgIGNhdGFsb2cNCiAgICAgIG9wZW4oY29u c3QgYmFzaWNfc3RyaW5nPGNoYXI+JiwgY29uc3QgbG9jYWxlJiwgY29uc3QgY2hhciopIGNvbnN0 Ow0KDQogICAgICBzdHJpbmdfdHlwZQ0KICAgICAgZ2V0KGNhdGFsb2cgX19jLCBpbnQgX19zZXQs IGludCBfX21zZ2lkLCBjb25zdCBzdHJpbmdfdHlwZSYgX19zKSBjb25zdA0KICAgICAgeyByZXR1 cm4gdGhpcy0+ZG9fZ2V0KF9fYywgX19zZXQsIF9fbXNnaWQsIF9fcyk7IH0NCg0KICAgICAgdm9p ZA0KICAgICAgY2xvc2UoY2F0YWxvZyBfX2MpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5k b19jbG9zZShfX2MpOyB9DQoNCiAgICBwcm90ZWN0ZWQ6DQogICAgICB2aXJ0dWFsDQogICAgICB+ bWVzc2FnZXMoKQ0KICAgICAgIHsNCiAgICAgICAgIGlmIChfTV9jX2xvY2FsZV9tZXNzYWdlcyAh PSBfU19jX2xvY2FsZSkNCiAgICAgICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2Fs ZV9tZXNzYWdlcyk7DQogICAgICAgfQ0KDQogICAgICB2aXJ0dWFsIGNhdGFsb2cNCiAgICAgIGRv X29wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiwgY29uc3QgbG9jYWxlJikgY29uc3Q7DQoN CiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUNCiAgICAgIGRvX2dldChjYXRhbG9nLCBpbnQsIGlu dCwgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGZhdWx0KSBjb25zdDsNCg0KICAgICAgdmlydHVhbCB2 b2lkDQogICAgICBkb19jbG9zZShjYXRhbG9nKSBjb25zdDsNCg0KDQogICAgICBjaGFyKg0KICAg ICAgX01fY29udmVydF90b19jaGFyKGNvbnN0IHN0cmluZ190eXBlJiBfX21zZykgY29uc3QNCiAg ICAgIHsNCg0KICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29uc3RfY2Fz dDxfQ2hhclQqPihfX21zZy5jX3N0cigpKSk7DQogICAgICB9DQoNCg0KICAgICAgc3RyaW5nX3R5 cGUNCiAgICAgIF9NX2NvbnZlcnRfZnJvbV9jaGFyKGNoYXIqIF9fbXNnKSBjb25zdA0KICAgICAg ew0KDQogICAgICAgIHNpemVfdCBfX2xlbiA9IGNoYXJfdHJhaXRzPGNoYXI+OjpsZW5ndGgoX19t c2cpIC0gMTsNCiMgMTcwNSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9s b2NhbGVfZmFjZXRzLmgiIDMNCiAgICAgICAgcmV0dXJuIHN0cmluZ190eXBlKCk7DQogICAgICB9 DQogICAgIH07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGxvY2FsZTo6aWQg bWVzc2FnZXM8X0NoYXJUPjo6aWQ7DQoNCg0KICB0ZW1wbGF0ZTw+DQogICAgc3RyaW5nDQogICAg bWVzc2FnZXM8Y2hhcj46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgc3RyaW5nJikg Y29uc3Q7DQoNCg0KIyAxICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9pNjg2LXBj LW1pbmd3MzIvYml0cy9tZXNzYWdlc19tZW1iZXJzLmgiIDEgMw0KIyAzNyAidDovbXN5cy8xLjAv bWluZ3cvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1taW5ndzMyL2JpdHMvbWVzc2FnZXNfbWVtYmVy cy5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICB0eXBlbmFtZSBtZXNzYWdl czxfQ2hhclQ+OjpjYXRhbG9nDQogICAgbWVzc2FnZXM8X0NoYXJUPjo6b3Blbihjb25zdCBiYXNp Y19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYywNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGNoYXIqKSBjb25zdA0KICAgIHsgcmV0dXJuIHRoaXMtPmRvX29w ZW4oX19zLCBfX2xvYyk7IH0NCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICB0 eXBlbmFtZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRhbG9nDQogICAgbWVzc2FnZXM8X0NoYXJUPjo6 ZG9fb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mLCBjb25zdCBsb2NhbGUmKSBjb25zdA0K ICAgIHsgcmV0dXJuIDA7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgdHlw ZW5hbWUgbWVzc2FnZXM8X0NoYXJUPjo6c3RyaW5nX3R5cGUNCiAgICBtZXNzYWdlczxfQ2hhclQ+ Ojpkb19nZXQoY2F0YWxvZywgaW50LCBpbnQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHN0cmluZ190eXBlJiBfX2RmYXVsdCkgY29uc3QNCiAgICB7IHJldHVybiBfX2RmYXVs dDsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICB2b2lkDQogICAgbWVzc2Fn ZXM8X0NoYXJUPjo6ZG9fY2xvc2UoY2F0YWxvZykgY29uc3QNCiAgICB7IH0NCiMgMTcxOSAidDov bXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMw0K DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBjbGFzcyBtZXNzYWdlc19ieW5hbWUg OiBwdWJsaWMgbWVzc2FnZXM8X0NoYXJUPg0KICAgIHsNCiAgICBwdWJsaWM6DQogICAgICB0eXBl ZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+ IHN0cmluZ190eXBlOw0KDQogICAgICBleHBsaWNpdA0KICAgICAgbWVzc2FnZXNfYnluYW1lKGNv bnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApDQogICAgICA6IG1lc3NhZ2VzPF9DaGFy VD4oX19yZWZzKQ0KICAgICAgew0KICAgICAgICBfTV9uYW1lX21lc3NhZ2VzID0gX19zOw0KICAg ICAgICBpZiAoX01fY19sb2NhbGVfbWVzc2FnZXMgIT0gX1NfY19sb2NhbGUpDQogICAgICAgICAg X1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7DQogICAgICAgIF9TX2Ny ZWF0ZV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcywgX19zKTsNCiAgICAgIH0NCg0KICAg IHByb3RlY3RlZDoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5tZXNzYWdlc19ieW5hbWUoKQ0KICAg ICAgeyB9DQogICAgfTsNCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0K ICAgIGlubGluZSBib29sDQogICAgaXNzcGFjZShfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9f bG9jKQ0KICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0 eXBlX2Jhc2U6OnNwYWNlLCBfX2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0K ICAgIGlubGluZSBib29sDQogICAgaXNwcmludChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9f bG9jKQ0KICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0 eXBlX2Jhc2U6OnByaW50LCBfX2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0K ICAgIGlubGluZSBib29sDQogICAgaXNjbnRybChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9f bG9jKQ0KICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0 eXBlX2Jhc2U6OmNudHJsLCBfX2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0K ICAgIGlubGluZSBib29sDQogICAgaXN1cHBlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9f bG9jKQ0KICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0 eXBlX2Jhc2U6OnVwcGVyLCBfX2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0K ICAgIGlubGluZSBib29sIGlzbG93ZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykN CiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9i YXNlOjpsb3dlciwgX19jKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBp bmxpbmUgYm9vbA0KICAgIGlzYWxwaGEoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykN CiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9i YXNlOjphbHBoYSwgX19jKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBp bmxpbmUgYm9vbA0KICAgIGlzZGlnaXQoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykN CiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9i YXNlOjpkaWdpdCwgX19jKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBp bmxpbmUgYm9vbA0KICAgIGlzcHVuY3QoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykN CiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9i YXNlOjpwdW5jdCwgX19jKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBp bmxpbmUgYm9vbA0KICAgIGlzeGRpZ2l0KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2Mp DQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVf YmFzZTo6eGRpZ2l0LCBfX2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAg IGlubGluZSBib29sDQogICAgaXNhbG51bShfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9j KQ0KICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBl X2Jhc2U6OmFsbnVtLCBfX2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAg IGlubGluZSBib29sDQogICAgaXNncmFwaChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9j KQ0KICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBl X2Jhc2U6OmdyYXBoLCBfX2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAg IGlubGluZSBfQ2hhclQNCiAgICB0b3VwcGVyKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19s b2MpDQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykudG91cHBl cihfX2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBfQ2hh clQNCiAgICB0b2xvd2VyKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpDQogICAgeyBy ZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykudG9sb3dlcihfX2MpOyB9DQp9 DQojIDQyICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2lvcy5o IiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4NCiAgICBjbGFzcyBiYXNpY19pb3MgOiBwdWJsaWMgaW9zX2Jhc2UN CiAgICB7DQogICAgcHVibGljOg0KDQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQog ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOw0KICAgICAg dHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsNCiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUgb2ZmX3R5cGU7DQogICAgICB0eXBlZGVmIF9U cmFpdHMgdHJhaXRzX3R5cGU7DQoNCg0KICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5 cGVfdHlwZTsNCiAgICAgIHR5cGVkZWYgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFp dHM+IF9fb3N0cmVhbWJ1Zl9pdGVyOw0KICAgICAgdHlwZWRlZiBudW1fcHV0PF9DaGFyVCwgX19v c3RyZWFtYnVmX2l0ZXI+IF9fbnVtcHV0X3R5cGU7DQogICAgICB0eXBlZGVmIGlzdHJlYW1idWZf aXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1idWZfaXRlcjsNCiAgICAgIHR5cGVk ZWYgbnVtX2dldDxfQ2hhclQsIF9faXN0cmVhbWJ1Zl9pdGVyPiBfX251bWdldF90eXBlOw0KDQoN CiAgICBwcm90ZWN0ZWQ6DQogICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qIF9N X3RpZTsNCiAgICAgIG11dGFibGUgY2hhcl90eXBlIF9NX2ZpbGw7DQogICAgICBtdXRhYmxlIGJv b2wgX01fZmlsbF9pbml0Ow0KICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4q IF9NX3N0cmVhbWJ1ZjsNCg0KDQogICAgICBjb25zdCBfX2N0eXBlX3R5cGUqIF9NX2ZjdHlwZTsN Cg0KICAgICAgY29uc3QgX19udW1wdXRfdHlwZSogX01fZm51bXB1dDsNCg0KICAgICAgY29uc3Qg X19udW1nZXRfdHlwZSogX01fZm51bWdldDsNCg0KICAgIHB1YmxpYzoNCiAgICAgIG9wZXJhdG9y IHZvaWQqKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmZhaWwoKSA/IDAgOiBjb25zdF9j YXN0PGJhc2ljX2lvcyo+KHRoaXMpOyB9DQoNCiAgICAgIGJvb2wNCiAgICAgIG9wZXJhdG9yISgp IGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5mYWlsKCk7IH0NCg0KICAgICAgaW9zdGF0ZQ0K ICAgICAgcmRzdGF0ZSgpIGNvbnN0DQogICAgICB7IHJldHVybiBfTV9zdHJlYW1idWZfc3RhdGU7 IH0NCg0KICAgICAgdm9pZA0KICAgICAgY2xlYXIoaW9zdGF0ZSBfX3N0YXRlID0gZ29vZGJpdCk7 DQoNCiAgICAgIHZvaWQNCiAgICAgIHNldHN0YXRlKGlvc3RhdGUgX19zdGF0ZSkNCiAgICAgIHsg dGhpcy0+Y2xlYXIodGhpcy0+cmRzdGF0ZSgpIHwgX19zdGF0ZSk7IH0NCg0KICAgICAgYm9vbA0K ICAgICAgZ29vZCgpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5yZHN0YXRlKCkgPT0gMDsg fQ0KDQogICAgICBib29sDQogICAgICBlb2YoKSBjb25zdA0KICAgICAgeyByZXR1cm4gKHRoaXMt PnJkc3RhdGUoKSAmIGVvZmJpdCkgIT0gMDsgfQ0KDQogICAgICBib29sDQogICAgICBmYWlsKCkg Y29uc3QNCiAgICAgIHsgcmV0dXJuICh0aGlzLT5yZHN0YXRlKCkgJiAoYmFkYml0IHwgZmFpbGJp dCkpICE9IDA7IH0NCg0KICAgICAgYm9vbA0KICAgICAgYmFkKCkgY29uc3QNCiAgICAgIHsgcmV0 dXJuICh0aGlzLT5yZHN0YXRlKCkgJiBiYWRiaXQpICE9IDA7IH0NCg0KICAgICAgaW9zdGF0ZQ0K ICAgICAgZXhjZXB0aW9ucygpIGNvbnN0DQogICAgICB7IHJldHVybiBfTV9leGNlcHRpb247IH0N Cg0KICAgICAgdm9pZA0KICAgICAgZXhjZXB0aW9ucyhpb3N0YXRlIF9fZXhjZXB0KQ0KICAgICAg ew0KICAgICAgICBfTV9leGNlcHRpb24gPSBfX2V4Y2VwdDsNCiAgICAgICAgdGhpcy0+Y2xlYXIo X01fc3RyZWFtYnVmX3N0YXRlKTsNCiAgICAgIH0NCg0KDQogICAgICBleHBsaWNpdA0KICAgICAg YmFzaWNfaW9zKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKSA6IGlvc19i YXNlKCkNCiAgICAgIHsgdGhpcy0+aW5pdChfX3NiKTsgfQ0KDQogICAgICB2aXJ0dWFsDQogICAg ICB+YmFzaWNfaW9zKCkgeyB9DQoNCg0KICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp dHM+Kg0KICAgICAgdGllKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX3RpZTsgfQ0KDQogICAg ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qDQogICAgICB0aWUoYmFzaWNfb3N0cmVh bTxfQ2hhclQsIF9UcmFpdHM+KiBfX3RpZXN0cikNCiAgICAgIHsNCiAgICAgICAgYmFzaWNfb3N0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+KiBfX29sZCA9IF9NX3RpZTsNCiAgICAgICAgX01fdGllID0g X190aWVzdHI7DQogICAgICAgIHJldHVybiBfX29sZDsNCiAgICAgIH0NCg0KICAgICAgYmFzaWNf c3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qDQogICAgICByZGJ1ZigpIGNvbnN0DQogICAgICB7 IHJldHVybiBfTV9zdHJlYW1idWY7IH0NCg0KICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwg X1RyYWl0cz4qDQogICAgICByZGJ1ZihiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiog X19zYik7DQoNCiAgICAgIGJhc2ljX2lvcyYNCiAgICAgIGNvcHlmbXQoY29uc3QgYmFzaWNfaW9z JiBfX3Jocyk7DQoNCiAgICAgIGNoYXJfdHlwZQ0KICAgICAgZmlsbCgpIGNvbnN0DQogICAgICB7 DQogICAgICAgIGlmICghX01fZmlsbF9pbml0KQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIF9N X2ZpbGwgPSB0aGlzLT53aWRlbignICcpOw0KICAgICAgICAgICAgX01fZmlsbF9pbml0ID0gdHJ1 ZTsNCiAgICAgICAgICB9DQogICAgICAgIHJldHVybiBfTV9maWxsOw0KICAgICAgfQ0KDQogICAg ICBjaGFyX3R5cGUNCiAgICAgIGZpbGwoY2hhcl90eXBlIF9fY2gpDQogICAgICB7DQogICAgICAg IGNoYXJfdHlwZSBfX29sZCA9IHRoaXMtPmZpbGwoKTsNCiAgICAgICAgX01fZmlsbCA9IF9fY2g7 DQogICAgICAgIHJldHVybiBfX29sZDsNCiAgICAgIH0NCg0KDQogICAgICBsb2NhbGUNCiAgICAg IGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpOw0KDQogICAgICBjaGFyDQogICAgICBuYXJyb3co Y2hhcl90eXBlIF9fYywgY2hhciBfX2RmYXVsdCkgY29uc3Q7DQoNCiAgICAgIGNoYXJfdHlwZQ0K ICAgICAgd2lkZW4oY2hhciBfX2MpIGNvbnN0Ow0KDQogICAgcHJvdGVjdGVkOg0KDQogICAgICBi YXNpY19pb3MoKSA6IGlvc19iYXNlKCkNCiAgICAgIHsgfQ0KDQogICAgICB2b2lkDQogICAgICBp bml0KGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKTsNCg0KICAgICAgYm9v bA0KICAgICAgX01fY2hlY2tfZmFjZXQoY29uc3QgbG9jYWxlOjpmYWNldCogX19mKSBjb25zdA0K ICAgICAgew0KICAgICAgICBpZiAoIV9fZikNCiAgICAgICAgICBfX3Rocm93X2JhZF9jYXN0KCk7 DQogICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgfQ0KDQogICAgICB2b2lkDQogICAgICBfTV9j YWNoZV9mYWNldHMoY29uc3QgbG9jYWxlJiBfX2xvYyk7DQogICAgfTsNCn0NCg0KDQoNCiMgMSAi dDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19pb3MudGNjIiAxIDMN CiMgMzQgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfaW9zLnRj YyIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4NCiAgICB2b2lkDQogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46 OmNsZWFyKGlvc3RhdGUgX19zdGF0ZSkNCiAgICB7DQogICAgICBpZiAodGhpcy0+cmRidWYoKSkN CiAgICAgICAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19zdGF0ZTsNCiAgICAgIGVsc2UNCiAgICAg ICAgICBfTV9zdHJlYW1idWZfc3RhdGUgPSBfX3N0YXRlIHwgYmFkYml0Ow0KICAgICAgaWYgKCh0 aGlzLT5yZHN0YXRlKCkgJiB0aGlzLT5leGNlcHRpb25zKCkpKQ0KICAgICAgICBfX3Rocm93X2lv c19mYWlsdXJlKCJiYXNpY19pb3M6OmNsZWFyKGlvc3RhdGUpIGNhdXNlZCBleGNlcHRpb24iKTsN CiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0K ICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+Kg0KICAgIGJhc2ljX2lvczxfQ2hh clQsIF9UcmFpdHM+OjpyZGJ1ZihiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19z YikNCiAgICB7DQogICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19vbGQg PSBfTV9zdHJlYW1idWY7DQogICAgICBfTV9zdHJlYW1idWYgPSBfX3NiOw0KICAgICAgdGhpcy0+ Y2xlYXIoKTsNCiAgICAgIHJldHVybiBfX29sZDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFp dHM+Jg0KICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+Ojpjb3B5Zm10KGNvbnN0IGJhc2lj X2lvcyYgX19yaHMpDQogICAgew0KDQoNCg0KDQogICAgICBfV29yZHMqIF9fd29yZHMgPSAoX19y aHMuX01fd29yZF9zaXplIDw9IF9TX2xvY2FsX3dvcmRfc2l6ZSkgPw0KICAgICAgICBfTV9sb2Nh bF93b3JkIDogbmV3IF9Xb3Jkc1tfX3Jocy5fTV93b3JkX3NpemVdOw0KDQoNCiAgICAgIF9DYWxs YmFja19saXN0KiBfX2NiID0gX19yaHMuX01fY2FsbGJhY2tzOw0KICAgICAgaWYgKF9fY2IpDQog ICAgICAgIF9fY2ItPl9NX2FkZF9yZWZlcmVuY2UoKTsNCiAgICAgIF9NX2NhbGxfY2FsbGJhY2tz KGVyYXNlX2V2ZW50KTsNCiAgICAgIGlmIChfTV93b3JkICE9IF9NX2xvY2FsX3dvcmQpDQogICAg ICAgIHsNCiAgICAgICAgICBkZWxldGUgW10gX01fd29yZDsNCiAgICAgICAgICBfTV93b3JkID0g MDsNCiAgICAgICAgfQ0KICAgICAgX01fZGlzcG9zZV9jYWxsYmFja3MoKTsNCg0KICAgICAgX01f Y2FsbGJhY2tzID0gX19jYjsNCiAgICAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8IF9fcmhzLl9N X3dvcmRfc2l6ZTsgKytfX2kpDQogICAgICAgIF9fd29yZHNbX19pXSA9IF9fcmhzLl9NX3dvcmRb X19pXTsNCiAgICAgIGlmIChfTV93b3JkICE9IF9NX2xvY2FsX3dvcmQpDQogICAgICAgIHsNCiAg ICAgICAgICBkZWxldGUgW10gX01fd29yZDsNCiAgICAgICAgICBfTV93b3JkID0gMDsNCiAgICAg ICAgfQ0KICAgICAgX01fd29yZCA9IF9fd29yZHM7DQogICAgICBfTV93b3JkX3NpemUgPSBfX3Jo cy5fTV93b3JkX3NpemU7DQoNCiAgICAgIHRoaXMtPmZsYWdzKF9fcmhzLmZsYWdzKCkpOw0KICAg ICAgdGhpcy0+d2lkdGgoX19yaHMud2lkdGgoKSk7DQogICAgICB0aGlzLT5wcmVjaXNpb24oX19y aHMucHJlY2lzaW9uKCkpOw0KICAgICAgdGhpcy0+dGllKF9fcmhzLnRpZSgpKTsNCiAgICAgIHRo aXMtPmZpbGwoX19yaHMuZmlsbCgpKTsNCg0KICAgICAgdGhpcy0+ZXhjZXB0aW9ucyhfX3Jocy5l eGNlcHRpb25zKCkpOw0KDQogICAgICBfTV9jYWxsX2NhbGxiYWNrcyhjb3B5Zm10X2V2ZW50KTsN CiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGNoYXINCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJh aXRzPjo6bmFycm93KGNoYXJfdHlwZSBfX2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0DQogICAgew0K ICAgICAgY2hhciBfX3JldCA9IF9fZGZhdWx0Ow0KICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9N X2ZjdHlwZSkpDQogICAgICAgIF9fcmV0ID0gX01fZmN0eXBlLT5uYXJyb3coX19jLCBfX2RmYXVs dCk7DQogICAgICByZXR1cm4gX19yZXQ7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBfQ2hhclQNCiAgICBiYXNpY19pb3M8X0NoYXJU LCBfVHJhaXRzPjo6d2lkZW4oY2hhciBfX2MpIGNvbnN0DQogICAgew0KICAgICAgY2hhcl90eXBl IF9fcmV0ID0gY2hhcl90eXBlKCk7DQogICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZmN0eXBl KSkNCiAgICAgICAgX19yZXQgPSBfTV9mY3R5cGUtPndpZGVuKF9fYyk7DQogICAgICByZXR1cm4g X19yZXQ7DQogICAgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzPg0KICAgIGxvY2FsZQ0KICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+OjppbWJ1 ZShjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAgIHsNCiAgICAgIGxvY2FsZSBfX29sZCh0aGlzLT5n ZXRsb2MoKSk7DQogICAgICBpb3NfYmFzZTo6aW1idWUoX19sb2MpOw0KICAgICAgX01fY2FjaGVf ZmFjZXRzKF9fbG9jKTsNCiAgICAgIGlmICh0aGlzLT5yZGJ1ZigpICE9IDApDQogICAgICAgIHRo aXMtPnJkYnVmKCktPnB1YmltYnVlKF9fbG9jKTsNCiAgICAgIHJldHVybiBfX29sZDsNCiAgICB9 DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIHZv aWQNCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6aW5pdChiYXNpY19zdHJlYW1idWY8 X0NoYXJULCBfVHJhaXRzPiogX19zYikNCiAgICB7DQoNCiAgICAgIGlvc19iYXNlOjpfTV9pbml0 KCk7DQogICAgICBfTV9jYWNoZV9mYWNldHMoX01faW9zX2xvY2FsZSk7DQogICAgICBfTV90aWUg PSAwOw0KIyAxNTkgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNf aW9zLnRjYyIgMw0KICAgICAgX01fZmlsbCA9IDA7DQogICAgICBfTV9maWxsX2luaXQgPSBmYWxz ZTsNCg0KICAgICAgX01fZXhjZXB0aW9uID0gZ29vZGJpdDsNCiAgICAgIF9NX3N0cmVhbWJ1ZiA9 IF9fc2I7DQogICAgICBfTV9zdHJlYW1idWZfc3RhdGUgPSBfX3NiID8gZ29vZGJpdCA6IGJhZGJp dDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz Pg0KICAgIHZvaWQNCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6X01fY2FjaGVfZmFj ZXRzKGNvbnN0IGxvY2FsZSYgX19sb2MpDQogICAgew0KICAgICAgaWYgKGhhc19mYWNldDxfX2N0 eXBlX3R5cGU+KF9fbG9jKSkNCiAgICAgICAgX01fZmN0eXBlID0gJnVzZV9mYWNldDxfX2N0eXBl X3R5cGU+KF9fbG9jKTsNCiAgICAgIGVsc2UNCiAgICAgICAgX01fZmN0eXBlID0gMDsNCg0KICAg ICAgaWYgKGhhc19mYWNldDxfX251bXB1dF90eXBlPihfX2xvYykpDQogICAgICAgIF9NX2ZudW1w dXQgPSAmdXNlX2ZhY2V0PF9fbnVtcHV0X3R5cGU+KF9fbG9jKTsNCiAgICAgIGVsc2UNCiAgICAg ICAgX01fZm51bXB1dCA9IDA7DQogICAgICBpZiAoaGFzX2ZhY2V0PF9fbnVtZ2V0X3R5cGU+KF9f bG9jKSkNCiAgICAgICAgX01fZm51bWdldCA9ICZ1c2VfZmFjZXQ8X19udW1nZXRfdHlwZT4oX19s b2MpOw0KICAgICAgZWxzZQ0KICAgICAgICBfTV9mbnVtZ2V0ID0gMDsNCiAgICB9DQoNCg0KDQoN CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2lvczxjaGFyPjsNCiAgZXh0ZXJuIHRlbXBs YXRlIGNsYXNzIGJhc2ljX2lvczx3Y2hhcl90PjsNCn0NCiMgMjA4ICJ0Oi9tc3lzLzEuMC9taW5n dy9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2lvcy5oIiAyIDMNCiMgNTIgInQ6L21zeXMvMS4w L21pbmd3L2luY2x1ZGUvZysrLXYzL2lvcyIgMiAzDQojIDQ2ICJ0Oi9tc3lzLzEuMC9taW5ndy9p bmNsdWRlL2crKy12My9vc3RyZWFtIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KDQogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBjbGFzcyBiYXNpY19v c3RyZWFtIDogdmlydHVhbCBwdWJsaWMgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4NCiAgICB7 DQogICAgcHVibGljOg0KDQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQogICAgICB0 eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOw0KICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUgb2ZmX3R5cGU7DQogICAgICB0eXBlZGVmIF9UcmFpdHMg dHJhaXRzX3R5cGU7DQoNCg0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBf VHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19pb3M8X0NoYXJU LCBfVHJhaXRzPiBfX2lvc190eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7DQogICAgICB0eXBlZGVmIG9zdHJlYW1idWZfaXRl cmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1idWZfaXRlcjsNCiAgICAgIHR5cGVkZWYg bnVtX3B1dDxfQ2hhclQsIF9fb3N0cmVhbWJ1Zl9pdGVyPiBfX251bXB1dF90eXBlOw0KICAgICAg dHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsNCg0KDQogICAgICBleHBsaWNpdA0K ICAgICAgYmFzaWNfb3N0cmVhbShfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKQ0KICAgICAgeyB0aGlz LT5pbml0KF9fc2IpOyB9DQoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5iYXNpY19vc3RyZWFtKCkg eyB9DQoNCg0KICAgICAgY2xhc3Mgc2VudHJ5Ow0KICAgICAgZnJpZW5kIGNsYXNzIHNlbnRyeTsN Cg0KDQoNCiAgICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I8PChfX29zdHJlYW1f dHlwZSYgKCpfX3BmKShfX29zdHJlYW1fdHlwZSYpKTsNCg0KICAgICAgX19vc3RyZWFtX3R5cGUm DQogICAgICBvcGVyYXRvcjw8KF9faW9zX3R5cGUmICgqX19wZikoX19pb3NfdHlwZSYpKTsNCg0K ICAgICAgX19vc3RyZWFtX3R5cGUmDQogICAgICBvcGVyYXRvcjw8KGlvc19iYXNlJiAoKl9fcGYp IChpb3NfYmFzZSYpKTsNCg0KDQogICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9y PDwobG9uZyBfX24pOw0KDQogICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPDwo dW5zaWduZWQgbG9uZyBfX24pOw0KDQogICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJh dG9yPDwoYm9vbCBfX24pOw0KDQogICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9y PDwoc2hvcnQgX19uKQ0KICAgICAgew0KICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQg PSB0aGlzLT5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsNCiAgICAgICAgaWYgKF9fZm10 ICYgaW9zX2Jhc2U6Om9jdCB8fCBfX2ZtdCAmIGlvc19iYXNlOjpoZXgpDQogICAgICAgICAgcmV0 dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4NCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KF9f bikpKTsNCiAgICAgICAgZWxzZQ0KICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0 YXRpY19jYXN0PGxvbmc+KF9fbikpOw0KICAgICAgfQ0KDQogICAgICBfX29zdHJlYW1fdHlwZSYN CiAgICAgIG9wZXJhdG9yPDwodW5zaWduZWQgc2hvcnQgX19uKQ0KICAgICAgeyByZXR1cm4gdGhp cy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihfX24pKTsgfQ0KDQogICAg ICBfX29zdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPDwoaW50IF9fbikNCiAgICAgIHsNCiAg ICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNl OjpiYXNlZmllbGQ7DQogICAgICAgIGlmIChfX2ZtdCAmIGlvc19iYXNlOjpvY3QgfHwgX19mbXQg JiBpb3NfYmFzZTo6aGV4KQ0KICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRp Y19jYXN0PHVuc2lnbmVkIGxvbmc+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oX19uKSkpOw0KICAgICAgICBlbHNlDQogICAgICAg ICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8bG9uZz4oX19uKSk7DQogICAg ICB9DQoNCiAgICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I8PCh1bnNpZ25lZCBp bnQgX19uKQ0KICAgICAgeyByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDx1bnNp Z25lZCBsb25nPihfX24pKTsgfQ0KIyAxNDAgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysr LXYzL29zdHJlYW0iIDMNCiAgICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I8PChk b3VibGUgX19mKTsNCg0KICAgICAgX19vc3RyZWFtX3R5cGUmDQogICAgICBvcGVyYXRvcjw8KGZs b2F0IF9fZikNCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8ZG91 YmxlPihfX2YpKTsgfQ0KDQogICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPDwo bG9uZyBkb3VibGUgX19mKTsNCg0KICAgICAgX19vc3RyZWFtX3R5cGUmDQogICAgICBvcGVyYXRv cjw8KGNvbnN0IHZvaWQqIF9fcCk7DQoNCiAgICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgb3Bl cmF0b3I8PChfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKTsNCg0KDQogICAgICBfX29zdHJlYW1fdHlw ZSYNCiAgICAgIHB1dChjaGFyX3R5cGUgX19jKTsNCg0KICAgICAgX19vc3RyZWFtX3R5cGUmDQog ICAgICB3cml0ZShjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOw0KDQogICAg ICBfX29zdHJlYW1fdHlwZSYNCiAgICAgIGZsdXNoKCk7DQoNCg0KICAgICAgcG9zX3R5cGUNCiAg ICAgIHRlbGxwKCk7DQoNCiAgICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgc2Vla3AocG9zX3R5 cGUpOw0KDQogICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAgIHNlZWtwKG9mZl90eXBlLCBpb3Nf YmFzZTo6c2Vla2Rpcik7DQogICAgfTsNCg0KDQogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHM+DQogICAgY2xhc3MgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp dHM+OjpzZW50cnkNCiAgICB7DQoNCiAgICAgIGJvb2wgX01fb2s7DQogICAgICBiYXNpY19vc3Ry ZWFtPF9DaGFyVCxfVHJhaXRzPiYgX01fb3M7DQoNCiAgICBwdWJsaWM6DQogICAgICBleHBsaWNp dA0KICAgICAgc2VudHJ5KGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX29zKTsNCg0K ICAgICAgfnNlbnRyeSgpDQogICAgICB7DQoNCiAgICAgICAgaWYgKF9NX29zLmZsYWdzKCkgJiBp b3NfYmFzZTo6dW5pdGJ1ZiAmJiAhdW5jYXVnaHRfZXhjZXB0aW9uKCkpDQogICAgICAgICAgew0K DQogICAgICAgICAgICBpZiAoX01fb3MucmRidWYoKSAmJiBfTV9vcy5yZGJ1ZigpLT5wdWJzeW5j KCkgPT0gLTEpDQogICAgICAgICAgICAgIF9NX29zLnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp Ow0KICAgICAgICAgIH0NCiAgICAgIH0NCg0KICAgICAgb3BlcmF0b3IgYm9vbCgpDQogICAgICB7 IHJldHVybiBfTV9vazsgfQ0KICAgIH07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAg ICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIF9DaGFy VCBfX2MpOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4N CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgb3BlcmF0b3I8PChiYXNp Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjaGFyIF9fYykNCiAgICB7IHJldHVy biAoX19vdXQgPDwgX19vdXQud2lkZW4oX19jKSk7IH0NCg0KDQogIHRlbXBsYXRlIDxjbGFzcyBf VHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mDQogICAgb3BlcmF0b3I8 PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY2hhciBfX2MpOw0KDQoNCiAg dGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+ Jg0KICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIHNp Z25lZCBjaGFyIF9fYykNCiAgICB7IHJldHVybiAoX19vdXQgPDwgc3RhdGljX2Nhc3Q8Y2hhcj4o X19jKSk7IH0NCg0KICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08 Y2hhciwgX1RyYWl0cz4mDQogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFp dHM+JiBfX291dCwgdW5zaWduZWQgY2hhciBfX2MpDQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHN0 YXRpY19jYXN0PGNoYXI+KF9fYykpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAg ICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0 IF9DaGFyVCogX19zKTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICYNCiAgICBvcGVyYXRv cjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9f cyk7DQoNCg0KICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08Y2hh ciwgX1RyYWl0cz4mDQogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+ JiBfX291dCwgY29uc3QgY2hhciogX19zKTsNCg0KDQogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+ DQogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcjw8KGJhc2lj X29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBzaWduZWQgY2hhciogX19zKQ0K ICAgIHsgcmV0dXJuIChfX291dCA8PCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihfX3Mp KTsgfQ0KDQogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxjaGFy LCBfVHJhaXRzPiAmDQogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+ JiBfX291dCwgY29uc3QgdW5zaWduZWQgY2hhciogX19zKQ0KICAgIHsgcmV0dXJuIChfX291dCA8 PCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihfX3MpKTsgfQ0KDQoNCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08X0No YXJULCBfVHJhaXRzPiYNCiAgICBlbmRsKGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYg X19vcykNCiAgICB7IHJldHVybiBmbHVzaChfX29zLnB1dChfX29zLndpZGVuKCdcbicpKSk7IH0N Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFz aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGVuZHMoYmFzaWNfb3N0cmVhbTxfQ2hh clQsIF9UcmFpdHM+JiBfX29zKQ0KICAgIHsgcmV0dXJuIF9fb3MucHV0KF9DaGFyVCgpKTsgfQ0K DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNp Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgZmx1c2goYmFzaWNfb3N0cmVhbTxfQ2hh clQsIF9UcmFpdHM+JiBfX29zKQ0KICAgIHsgcmV0dXJuIF9fb3MuZmx1c2goKTsgfQ0KDQp9DQoN Cg0KDQoNCg0KIyAxICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL29zdHJl YW0udGNjIiAxIDMNCiMgMzYgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMv b3N0cmVhbS50Y2MiIDMNCg0KIyAxICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9s b2NhbGUiIDEgMw0KIyA0MyAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvbG9jYWxl IiAzDQoNCg0KDQojIDEgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvbG9j YWxlX2ZhY2V0cy50Y2MiIDEgMw0KIyAzNyAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKyst djMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMw0KDQojIDEgInQ6L21zeXMvMS4wL21pbmd3L2lu Y2x1ZGUvZysrLXYzL2NlcnJubyIgMSAzDQojIDQ3ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRl L2crKy12My9jZXJybm8iIDMNCiMgMzkgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYz L2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMw0KDQoNCiMgMSAidDovbXN5cy8xLjAvbWluZ3cv aW5jbHVkZS9nKystdjMvY21hdGgiIDEgMw0KIyA0OCAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVk ZS9nKystdjMvY21hdGgiIDMNCg0KDQoNCiMgMSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9t YXRoLmgiIDEgMw0KIyA2NSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9tYXRoLmgiIDMNCmV4 dGVybiAiQyIgew0KIyA5MyAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9tYXRoLmgiIDMNCmV4 dGVybiBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBkb3VibGUgX0hVR0U7DQojIDEwMyAidDov bXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9tYXRoLmgiIDMNCnN0cnVjdCBfZXhjZXB0aW9uDQp7DQog ICAgICAgIGludCB0eXBlOw0KICAgICAgICBjaGFyICpuYW1lOw0KICAgICAgICBkb3VibGUgYXJn MTsNCiAgICAgICAgZG91YmxlIGFyZzI7DQogICAgICAgIGRvdWJsZSByZXR2YWw7DQp9Ow0KDQoN CmRvdWJsZSBzaW4gKGRvdWJsZSk7DQpkb3VibGUgY29zIChkb3VibGUpOw0KZG91YmxlIHRhbiAo ZG91YmxlKTsNCmRvdWJsZSBzaW5oIChkb3VibGUpOw0KZG91YmxlIGNvc2ggKGRvdWJsZSk7DQpk b3VibGUgdGFuaCAoZG91YmxlKTsNCmRvdWJsZSBhc2luIChkb3VibGUpOw0KZG91YmxlIGFjb3Mg KGRvdWJsZSk7DQpkb3VibGUgYXRhbiAoZG91YmxlKTsNCmRvdWJsZSBhdGFuMiAoZG91YmxlLCBk b3VibGUpOw0KZG91YmxlIGV4cCAoZG91YmxlKTsNCmRvdWJsZSBsb2cgKGRvdWJsZSk7DQpkb3Vi bGUgbG9nMTAgKGRvdWJsZSk7DQpkb3VibGUgcG93IChkb3VibGUsIGRvdWJsZSk7DQpkb3VibGUg c3FydCAoZG91YmxlKTsNCmRvdWJsZSBjZWlsIChkb3VibGUpOw0KZG91YmxlIGZsb29yIChkb3Vi bGUpOw0KZG91YmxlIGZhYnMgKGRvdWJsZSk7DQpkb3VibGUgbGRleHAgKGRvdWJsZSwgaW50KTsN CmRvdWJsZSBmcmV4cCAoZG91YmxlLCBpbnQqKTsNCmRvdWJsZSBtb2RmIChkb3VibGUsIGRvdWJs ZSopOw0KZG91YmxlIGZtb2QgKGRvdWJsZSwgZG91YmxlKTsNCg0KDQoNCg0KDQpzdHJ1Y3QgX2Nv bXBsZXgNCnsNCiAgICAgICAgZG91YmxlIHg7DQogICAgICAgIGRvdWJsZSB5Ow0KfTsNCg0KZG91 YmxlIF9jYWJzIChzdHJ1Y3QgX2NvbXBsZXgpOw0KZG91YmxlIF9oeXBvdCAoZG91YmxlLCBkb3Vi bGUpOw0KZG91YmxlIF9qMCAoZG91YmxlKTsNCmRvdWJsZSBfajEgKGRvdWJsZSk7DQpkb3VibGUg X2puIChpbnQsIGRvdWJsZSk7DQpkb3VibGUgX3kwIChkb3VibGUpOw0KZG91YmxlIF95MSAoZG91 YmxlKTsNCmRvdWJsZSBfeW4gKGludCwgZG91YmxlKTsNCmludCBfbWF0aGVyciAoc3RydWN0IF9l eGNlcHRpb24gKik7DQoNCg0KDQoNCg0KDQoNCmRvdWJsZSBjYWJzIChzdHJ1Y3QgX2NvbXBsZXgp Ow0KZG91YmxlIGh5cG90IChkb3VibGUsIGRvdWJsZSk7DQpkb3VibGUgajAgKGRvdWJsZSk7DQpk b3VibGUgajEgKGRvdWJsZSk7DQpkb3VibGUgam4gKGludCwgZG91YmxlKTsNCmRvdWJsZSB5MCAo ZG91YmxlKTsNCmRvdWJsZSB5MSAoZG91YmxlKTsNCmRvdWJsZSB5biAoaW50LCBkb3VibGUpOw0K DQoNCg0KDQoNCg0KfQ0KIyA1MiAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvY21h dGgiIDIgMw0KIyA3OSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvY21hdGgiIDMN Cm5hbWVzcGFjZSBzdGQNCnsNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gX1RwIF9fY21h dGhfcG93ZXIoX1RwLCB1bnNpZ25lZCBpbnQpOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4N CiAgaW5saW5lIF9UcA0KICAgIF9fY21hdGhfYWJzKF9UcCBfX3gpDQogICAgew0KICAgICAgcmV0 dXJuIF9feCA8IF9UcCgpID8gLV9feCA6IF9feDsNCiAgICB9DQoNCiAgaW5saW5lIGRvdWJsZQ0K ICBhYnMoZG91YmxlIF9feCkNCiAgeyByZXR1cm4gX19idWlsdGluX2ZhYnMoX194KTsgfQ0KDQog IGlubGluZSBmbG9hdA0KICBhYnMoZmxvYXQgX194KQ0KICB7IHJldHVybiBfX2J1aWx0aW5fZmFi c2YoX194KTsgfQ0KDQogIGlubGluZSBsb25nIGRvdWJsZQ0KICBhYnMobG9uZyBkb3VibGUgX194 KQ0KICB7IHJldHVybiBfX2J1aWx0aW5fZmFic2woX194KTsgfQ0KDQoNCg0KDQoNCiAgaW5saW5l IGZsb2F0DQogIGFjb3MoZmxvYXQgX194KSB7IHJldHVybiA6OmFjb3Moc3RhdGljX2Nhc3Q8ZG91 YmxlPihfX3gpKTsgfQ0KDQoNCiAgdXNpbmcgOjphY29zOw0KDQoNCg0KDQoNCiAgaW5saW5lIGxv bmcgZG91YmxlDQogIGFjb3MobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmFjb3Moc3RhdGlj X2Nhc3Q8ZG91YmxlPihfX3gpKTsgfQ0KDQoNCiAgdXNpbmcgOjphc2luOw0KDQoNCg0KDQoNCiAg aW5saW5lIGZsb2F0DQogIGFzaW4oZmxvYXQgX194KSB7IHJldHVybiA6OmFzaW4oc3RhdGljX2Nh c3Q8ZG91YmxlPihfX3gpKTsgfQ0KDQoNCg0KDQoNCg0KICBpbmxpbmUgbG9uZyBkb3VibGUNCiAg YXNpbihsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6YXNpbihzdGF0aWNfY2FzdDxkb3VibGU+ KF9feCkpOyB9DQoNCg0KICB1c2luZyA6OmF0YW47DQoNCg0KDQoNCg0KICBpbmxpbmUgZmxvYXQN CiAgYXRhbihmbG9hdCBfX3gpIHsgcmV0dXJuIDo6YXRhbihzdGF0aWNfY2FzdDxkb3VibGU+KF9f eCkpOyB9DQoNCg0KDQoNCg0KDQogIGlubGluZSBsb25nIGRvdWJsZQ0KICBhdGFuKGxvbmcgZG91 YmxlIF9feCkgeyByZXR1cm4gOjphdGFuKHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSk7IH0NCg0K DQogIHVzaW5nIDo6YXRhbjI7DQoNCg0KDQoNCg0KICBpbmxpbmUgZmxvYXQNCiAgYXRhbjIoZmxv YXQgX195LCBmbG9hdCBfX3gpDQogIHsgcmV0dXJuIDo6YXRhbjIoc3RhdGljX2Nhc3Q8ZG91Ymxl PihfX3kpLCBzdGF0aWNfY2FzdDxkb3VibGU+KF9feCkpOyB9DQoNCg0KDQoNCg0KDQogIGlubGlu ZSBsb25nIGRvdWJsZQ0KICBhdGFuMihsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkN CiAgeyByZXR1cm4gOjphdGFuMihzdGF0aWNfY2FzdDxkb3VibGU+KF9feSksIHN0YXRpY19jYXN0 PGRvdWJsZT4oX194KSk7IH0NCg0KDQogIHVzaW5nIDo6Y2VpbDsNCg0KDQoNCg0KDQogIGlubGlu ZSBmbG9hdA0KICBjZWlsKGZsb2F0IF9feCkgeyByZXR1cm4gOjpjZWlsKHN0YXRpY19jYXN0PGRv dWJsZT4oX194KSk7IH0NCg0KDQoNCg0KDQoNCiAgaW5saW5lIGxvbmcgZG91YmxlDQogIGNlaWwo bG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmNlaWwoc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gp KTsgfQ0KDQoNCiAgdXNpbmcgOjpjb3M7DQoNCiAgaW5saW5lIGZsb2F0DQogIGNvcyhmbG9hdCBf X3gpDQogIHsgcmV0dXJuIF9fYnVpbHRpbl9jb3NmKF9feCk7IH0NCg0KICBpbmxpbmUgbG9uZyBk b3VibGUNCiAgY29zKGxvbmcgZG91YmxlIF9feCkNCiAgeyByZXR1cm4gX19idWlsdGluX2Nvc2wo X194KTsgfQ0KDQogIHVzaW5nIDo6Y29zaDsNCg0KDQoNCg0KDQogIGlubGluZSBmbG9hdA0KICBj b3NoKGZsb2F0IF9feCkgeyByZXR1cm4gOjpjb3NoKHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSk7 IH0NCg0KDQoNCg0KDQoNCiAgaW5saW5lIGxvbmcgZG91YmxlDQogIGNvc2gobG9uZyBkb3VibGUg X194KSB7IHJldHVybiA6OmNvc2goc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpKTsgfQ0KDQoNCiAg dXNpbmcgOjpleHA7DQoNCg0KDQoNCg0KICBpbmxpbmUgZmxvYXQNCiAgZXhwKGZsb2F0IF9feCkg eyByZXR1cm4gOjpleHAoc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpKTsgfQ0KDQoNCg0KDQoNCg0K ICBpbmxpbmUgbG9uZyBkb3VibGUNCiAgZXhwKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpl eHAoc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpKTsgfQ0KDQoNCiAgdXNpbmcgOjpmYWJzOw0KDQog IGlubGluZSBmbG9hdA0KICBmYWJzKGZsb2F0IF9feCkNCiAgeyByZXR1cm4gX19idWlsdGluX2Zh YnNmKF9feCk7IH0NCg0KICBpbmxpbmUgbG9uZyBkb3VibGUNCiAgZmFicyhsb25nIGRvdWJsZSBf X3gpDQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzbChfX3gpOyB9DQoNCiAgdXNpbmcgOjpmbG9v cjsNCg0KDQoNCg0KDQogIGlubGluZSBmbG9hdA0KICBmbG9vcihmbG9hdCBfX3gpIHsgcmV0dXJu IDo6Zmxvb3Ioc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpKTsgfQ0KDQoNCg0KDQoNCg0KICBpbmxp bmUgbG9uZyBkb3VibGUNCiAgZmxvb3IobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmZsb29y KHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSk7IH0NCg0KDQogIHVzaW5nIDo6Zm1vZDsNCg0KDQoN Cg0KDQogIGlubGluZSBmbG9hdA0KICBmbW9kKGZsb2F0IF9feCwgZmxvYXQgX195KQ0KICB7IHJl dHVybiA6OmZtb2Qoc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpLCBzdGF0aWNfY2FzdDxkb3VibGU+ KF9feSkpOyB9DQoNCg0KDQoNCg0KDQogIGlubGluZSBsb25nIGRvdWJsZQ0KICBmbW9kKGxvbmcg ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KQ0KICB7IHJldHVybiA6OmZtb2Qoc3RhdGljX2Nh c3Q8ZG91YmxlPihfX3gpLCBzdGF0aWNfY2FzdDxkb3VibGU+KF9feSkpOyB9DQoNCg0KICB1c2lu ZyA6OmZyZXhwOw0KDQoNCg0KDQoNCiAgaW5saW5lIGZsb2F0DQogIGZyZXhwKGZsb2F0IF9feCwg aW50KiBfX2V4cCkgeyByZXR1cm4gOjpmcmV4cChfX3gsIF9fZXhwKTsgfQ0KDQoNCg0KDQoNCg0K ICBpbmxpbmUgbG9uZyBkb3VibGUNCiAgZnJleHAobG9uZyBkb3VibGUgX194LCBpbnQqIF9fZXhw KQ0KICB7IHJldHVybiA6OmZyZXhwKHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSwgX19leHApOyB9 DQoNCg0KICB1c2luZyA6OmxkZXhwOw0KDQoNCg0KDQoNCiAgaW5saW5lIGZsb2F0DQogIGxkZXhw KGZsb2F0IF9feCwgaW50IF9fZXhwKQ0KICB7IHJldHVybiA6OmxkZXhwKHN0YXRpY19jYXN0PGRv dWJsZT4oX194KSwgX19leHApOyB9DQoNCg0KDQoNCg0KDQogIGlubGluZSBsb25nIGRvdWJsZQ0K ICBsZGV4cChsb25nIGRvdWJsZSBfX3gsIGludCBfX2V4cCkNCiAgeyByZXR1cm4gOjpsZGV4cChz dGF0aWNfY2FzdDxkb3VibGU+KF9feCksIF9fZXhwKTsgfQ0KDQoNCiAgdXNpbmcgOjpsb2c7DQoN Cg0KDQoNCg0KICBpbmxpbmUgZmxvYXQgbG9nKGZsb2F0IF9feCkNCiAgeyByZXR1cm4gOjpsb2co c3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpKTsgfQ0KDQoNCg0KDQoNCg0KICBpbmxpbmUgbG9uZyBk b3VibGUNCiAgbG9nKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpsb2coc3RhdGljX2Nhc3Q8 ZG91YmxlPihfX3gpKTsgfQ0KDQoNCiAgdXNpbmcgOjpsb2cxMDsNCg0KDQoNCg0KDQogIGlubGlu ZSBmbG9hdA0KICBsb2cxMChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6bG9nMTAoc3RhdGljX2Nhc3Q8 ZG91YmxlPihfX3gpKTsgfQ0KDQoNCg0KDQoNCg0KICBpbmxpbmUgbG9uZyBkb3VibGUNCiAgbG9n MTAobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmxvZzEwKHN0YXRpY19jYXN0PGRvdWJsZT4o X194KSk7IH0NCg0KDQogIHVzaW5nIDo6bW9kZjsNCg0KDQoNCg0KDQogIGlubGluZSBmbG9hdA0K ICBtb2RmKGZsb2F0IF9feCwgZmxvYXQqIF9faXB0cikNCiAgew0KICAgIGRvdWJsZSBfX3RtcDsN CiAgICBkb3VibGUgX19yZXMgPSA6Om1vZGYoc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpLCAmX190 bXApOw0KICAgICpfX2lwdHIgPSBzdGF0aWNfY2FzdDxmbG9hdD4oX190bXApOw0KICAgIHJldHVy biBfX3JlczsNCiAgfQ0KDQoNCg0KDQoNCg0KICBpbmxpbmUgbG9uZyBkb3VibGUNCiAgbW9kZihs b25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlKiBfX2lwdHIpDQogIHsNCiAgICBkb3VibGUgX190 bXA7DQogICAgZG91YmxlIF9fcmVzID0gOjptb2RmKHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSwg Jl9fdG1wKTsNCiAgICAqIF9faXB0ciA9IHN0YXRpY19jYXN0PGxvbmcgZG91YmxlPihfX3RtcCk7 DQogICAgcmV0dXJuIF9fcmVzOw0KICB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQog ICAgaW5saW5lIF9UcA0KICAgIF9fcG93X2hlbHBlcihfVHAgX194LCBpbnQgX19uKQ0KICAgIHsN CiAgICAgIHJldHVybiBfX24gPCAwDQogICAgICAgID8gX1RwKDEpL19fY21hdGhfcG93ZXIoX194 LCAtX19uKQ0KICAgICAgICA6IF9fY21hdGhfcG93ZXIoX194LCBfX24pOw0KICAgIH0NCg0KICB1 c2luZyA6OnBvdzsNCg0KDQoNCg0KDQogIGlubGluZSBmbG9hdA0KICBwb3coZmxvYXQgX194LCBm bG9hdCBfX3kpDQogIHsgcmV0dXJuIDo6cG93KHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSwgc3Rh dGljX2Nhc3Q8ZG91YmxlPihfX3kpKTsgfQ0KDQoNCg0KDQoNCg0KICBpbmxpbmUgbG9uZyBkb3Vi bGUNCiAgcG93KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KQ0KICB7IHJldHVybiA6 OnBvdyhzdGF0aWNfY2FzdDxkb3VibGU+KF9feCksIHN0YXRpY19jYXN0PGRvdWJsZT4oX195KSk7 IH0NCg0KDQogIGlubGluZSBkb3VibGUNCiAgcG93KGRvdWJsZSBfX3gsIGludCBfX2kpDQogIHsg cmV0dXJuIF9fcG93X2hlbHBlcihfX3gsIF9faSk7IH0NCg0KICBpbmxpbmUgZmxvYXQNCiAgcG93 KGZsb2F0IF9feCwgaW50IF9fbikNCiAgeyByZXR1cm4gX19wb3dfaGVscGVyKF9feCwgX19uKTsg fQ0KDQogIGlubGluZSBsb25nIGRvdWJsZQ0KICBwb3cobG9uZyBkb3VibGUgX194LCBpbnQgX19u KQ0KICB7IHJldHVybiBfX3Bvd19oZWxwZXIoX194LCBfX24pOyB9DQoNCiAgdXNpbmcgOjpzaW47 DQoNCiAgaW5saW5lIGZsb2F0DQogIHNpbihmbG9hdCBfX3gpDQogIHsgcmV0dXJuIF9fYnVpbHRp bl9zaW5mKF9feCk7IH0NCg0KICBpbmxpbmUgbG9uZyBkb3VibGUNCiAgc2luKGxvbmcgZG91Ymxl IF9feCkNCiAgeyByZXR1cm4gX19idWlsdGluX3NpbmwoX194KTsgfQ0KDQogIHVzaW5nIDo6c2lu aDsNCg0KDQoNCg0KDQogIGlubGluZSBmbG9hdA0KICBzaW5oKGZsb2F0IF9feCkgeyByZXR1cm4g OjpzaW5oKHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSk7IH0NCg0KDQoNCg0KDQoNCiAgaW5saW5l IGxvbmcgZG91YmxlDQogIHNpbmgobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OnNpbmgoc3Rh dGljX2Nhc3Q8ZG91YmxlPihfX3gpKTsgfQ0KDQoNCiAgdXNpbmcgOjpzcXJ0Ow0KDQogIGlubGlu ZSBmbG9hdA0KICBzcXJ0KGZsb2F0IF9feCkNCiAgeyByZXR1cm4gX19idWlsdGluX3NxcnRmKF9f eCk7IH0NCg0KICBpbmxpbmUgbG9uZyBkb3VibGUNCiAgc3FydChsb25nIGRvdWJsZSBfX3gpDQog IHsgcmV0dXJuIF9fYnVpbHRpbl9zcXJ0bChfX3gpOyB9DQoNCiAgdXNpbmcgOjp0YW47DQoNCg0K DQoNCg0KICBpbmxpbmUgZmxvYXQNCiAgdGFuKGZsb2F0IF9feCkgeyByZXR1cm4gOjp0YW4oc3Rh dGljX2Nhc3Q8ZG91YmxlPihfX3gpKTsgfQ0KDQoNCg0KDQoNCg0KICBpbmxpbmUgbG9uZyBkb3Vi bGUNCiAgdGFuKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjp0YW4oc3RhdGljX2Nhc3Q8ZG91 YmxlPihfX3gpKTsgfQ0KDQoNCiAgdXNpbmcgOjp0YW5oOw0KDQoNCg0KDQoNCiAgaW5saW5lIGZs b2F0DQogIHRhbmgoZmxvYXQgX194KSB7IHJldHVybiA6OnRhbmgoc3RhdGljX2Nhc3Q8ZG91Ymxl PihfX3gpKTsgfQ0KDQoNCg0KDQoNCg0KICBpbmxpbmUgbG9uZyBkb3VibGUNCiAgdGFuaChsb25n IGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6dGFuaChzdGF0aWNfY2FzdDxkb3VibGU+KF9feCkpOyB9 DQoNCn0NCiMgNjYxICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9jbWF0aCIgMw0K IyAxICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL2NtYXRoLnRjYyIgMSAz DQojIDM1ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL2NtYXRoLnRjYyIg Mw0KbmFtZXNwYWNlIHN0ZA0Kew0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogICAgX1RwDQog ICAgX19jbWF0aF9wb3dlcihfVHAgX194LCB1bnNpZ25lZCBpbnQgX19uKQ0KICAgIHsNCiAgICAg IF9UcCBfX3kgPSBfX24gJSAyID8gX194IDogMTsNCg0KICAgICAgd2hpbGUgKF9fbiA+Pj0gMSkN CiAgICAgICAgew0KICAgICAgICAgIF9feCA9IF9feCAqIF9feDsNCiAgICAgICAgICBpZiAoX19u ICUgMikNCiAgICAgICAgICAgIF9feSA9IF9feSAqIF9feDsNCiAgICAgICAgfQ0KDQogICAgICBy ZXR1cm4gX195Ow0KICAgIH0NCn0NCiMgNjYyICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2cr Ky12My9jbWF0aCIgMiAzDQojIDQyICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9i aXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMNCg0KIyAxICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNs dWRlL2crKy12My9saW1pdHMiIDEgMw0KIyA0NyAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9n KystdjMvbGltaXRzIiAzDQoNCiMgMSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMv aTY4Ni1wYy1taW5ndzMyL2JpdHMvY3B1X2xpbWl0cy5oIiAxIDMNCiMgNDkgInQ6L21zeXMvMS4w L21pbmd3L2luY2x1ZGUvZysrLXYzL2xpbWl0cyIgMiAzDQojIDg4NyAidDovbXN5cy8xLjAvbWlu Z3cvaW5jbHVkZS9nKystdjMvbGltaXRzIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQogIGVudW0gZmxv YXRfcm91bmRfc3R5bGUNCiAgew0KICAgIHJvdW5kX2luZGV0ZXJtaW5hdGUgPSAtMSwNCiAgICBy b3VuZF90b3dhcmRfemVybyA9IDAsDQogICAgcm91bmRfdG9fbmVhcmVzdCA9IDEsDQogICAgcm91 bmRfdG93YXJkX2luZmluaXR5ID0gMiwNCiAgICByb3VuZF90b3dhcmRfbmVnX2luZmluaXR5ID0g Mw0KICB9Ow0KDQogIGVudW0gZmxvYXRfZGVub3JtX3N0eWxlDQogIHsNCiAgICBkZW5vcm1faW5k ZXRlcm1pbmF0ZSA9IC0xLA0KICAgIGRlbm9ybV9hYnNlbnQgPSAwLA0KICAgIGRlbm9ybV9wcmVz ZW50ID0gMQ0KICB9Ow0KDQoNCg0KDQogIHN0cnVjdCBfX251bWVyaWNfbGltaXRzX2Jhc2UNCiAg ew0KICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gZmFsc2U7DQoNCiAgICBz dGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDA7DQogICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMx MCA9IDA7DQogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7DQogICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOw0KICAgIHN0YXRpYyBjb25zdCBib29s IGlzX2V4YWN0ID0gZmFsc2U7DQogICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDA7DQoNCiAg ICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7DQogICAgc3RhdGljIGNvbnN0IGlu dCBtaW5fZXhwb25lbnQxMCA9IDA7DQogICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQg PSAwOw0KICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOw0KDQogICAgc3Rh dGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7DQogICAgc3RhdGljIGNvbnN0IGJv b2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOw0KICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWdu YWxpbmdfTmFOID0gZmFsc2U7DQogICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBo YXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsNCiAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVu b3JtX2xvc3MgPSBmYWxzZTsNCg0KICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZh bHNlOw0KICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSBmYWxzZTsNCiAgICBzdGF0 aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsNCg0KICAgIHN0YXRpYyBjb25zdCBib29s IHRyYXBzID0gZmFsc2U7DQogICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0g ZmFsc2U7DQogICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0g cm91bmRfdG93YXJkX3plcm87DQogIH07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAg IHN0cnVjdCBudW1lcmljX2xpbWl0cyA6IHB1YmxpYyBfX251bWVyaWNfbGltaXRzX2Jhc2UNCiAg ICB7DQogICAgICBzdGF0aWMgX1RwIG1pbigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8 X1RwPigwKTsgfQ0KICAgICAgc3RhdGljIF9UcCBtYXgoKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRp Y19jYXN0PF9UcD4oMCk7IH0NCiAgICAgIHN0YXRpYyBfVHAgZXBzaWxvbigpIHRocm93KCkgeyBy ZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQ0KICAgICAgc3RhdGljIF9UcCByb3VuZF9lcnJv cigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQ0KICAgICAgc3RhdGlj IF9UcCBpbmZpbml0eSgpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQ0K ICAgICAgc3RhdGljIF9UcCBxdWlldF9OYU4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0 PF9UcD4oMCk7IH0NCiAgICAgIHN0YXRpYyBfVHAgc2lnbmFsaW5nX05hTigpIHRocm93KCkgeyBy ZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQ0KICAgICAgc3RhdGljIF9UcCBkZW5vcm1fbWlu KCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9DQogICAgfTsNCg0KDQoN CiAgdGVtcGxhdGU8Pg0KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxib29sPg0KICAgIHsNCiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsNCg0KICAgICAgc3Rh dGljIGJvb2wgbWluKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gZmFsc2U7IH0NCg0KICAgICAg c3RhdGljIGJvb2wgbWF4KCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gdHJ1ZTsgfQ0KDQogICAg ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDE7DQogICAgICBzdGF0aWMgY29uc3QgaW50IGRp Z2l0czEwID0gMDsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOw0K ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7DQogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7DQogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4 ID0gMjsNCiAgICAgIHN0YXRpYyBib29sIGVwc2lsb24oKSB0aHJvdygpDQogICAgICB7IHJldHVy biBmYWxzZTsgfQ0KICAgICAgc3RhdGljIGJvb2wgcm91bmRfZXJyb3IoKSB0aHJvdygpDQogICAg ICB7IHJldHVybiBmYWxzZTsgfQ0KDQogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVu dCA9IDA7DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsNCiAgICAg IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsNCiAgICAgIHN0YXRpYyBjb25zdCBp bnQgbWF4X2V4cG9uZW50MTAgPSAwOw0KDQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5m aW5pdHkgPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBm YWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7 DQogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5v cm1fYWJzZW50Ow0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFs c2U7DQoNCiAgICAgIHN0YXRpYyBib29sIGluZmluaXR5KCkgdGhyb3coKQ0KICAgICAgeyByZXR1 cm4gZmFsc2U7IH0NCiAgICAgIHN0YXRpYyBib29sIHF1aWV0X05hTigpIHRocm93KCkNCiAgICAg IHsgcmV0dXJuIGZhbHNlOyB9DQogICAgICBzdGF0aWMgYm9vbCBzaWduYWxpbmdfTmFOKCkgdGhy b3coKQ0KICAgICAgeyByZXR1cm4gZmFsc2U7IH0NCiAgICAgIHN0YXRpYyBib29sIGRlbm9ybV9t aW4oKSB0aHJvdygpDQogICAgICB7IHJldHVybiBmYWxzZTsgfQ0KDQogICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2Jv dW5kZWQgPSB0cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7 DQoNCg0KDQoNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZQ0KICAgICAgICAg ICAgICAgfHwgdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9 IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxl ID0gcm91bmRfdG93YXJkX3plcm87DQogICAgfTsNCg0KDQoNCiAgdGVtcGxhdGU8Pg0KICAgIHN0 cnVjdCBudW1lcmljX2xpbWl0czxjaGFyPg0KICAgIHsNCiAgICAgIHN0YXRpYyBjb25zdCBib29s IGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsNCg0KICAgICAgc3RhdGljIGNoYXIgbWluKCkgdGhyb3co KQ0KICAgICAgeyByZXR1cm4gKGNoYXIpKC0xMjcgLSAxKTsgfQ0KICAgICAgc3RhdGljIGNoYXIg bWF4KCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gKGNoYXIpMTI3OyB9DQoNCiAgICAgIHN0YXRp YyBjb25zdCBpbnQgZGlnaXRzID0gNzsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAg PSA3Ow0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsNCiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaXNfZXhhY3QgPSB0cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7DQog ICAgICBzdGF0aWMgY2hhciBlcHNpbG9uKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gY2hhcigp OyB9DQogICAgICBzdGF0aWMgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkNCiAgICAgIHsgcmV0 dXJuIGNoYXIoKTsgfQ0KDQogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7 DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsNCiAgICAgIHN0YXRp YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4 X2V4cG9uZW50MTAgPSAwOw0KDQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkg PSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsN CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7DQogICAg ICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJz ZW50Ow0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7DQoN CiAgICAgIHN0YXRpYyBjaGFyIGluZmluaXR5KCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gY2hh cigpOyB9DQogICAgICBzdGF0aWMgY2hhciBxdWlldF9OYU4oKSB0aHJvdygpDQogICAgICB7IHJl dHVybiBjaGFyKCk7IH0NCiAgICAgIHN0YXRpYyBjaGFyIHNpZ25hbGluZ19OYU4oKSB0aHJvdygp DQogICAgICB7IHJldHVybiBjaGFyKCk7IH0NCiAgICAgIHN0YXRpYyBjaGFyIGRlbm9ybV9taW4o KSB0aHJvdygpDQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyPigwKTsgfQ0KDQogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9k dWxvID0gdHJ1ZTsNCg0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOw0KICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7DQogICAgICBzdGF0 aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVy bzsNCiAgICB9Ow0KIyAxMDcxICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9saW1p dHMiIDMNCiAgdGVtcGxhdGU8Pg0KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxzaWduZWQgY2hh cj4NCiAgICB7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7 DQoNCiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBtaW4oKSB0aHJvdygpDQogICAgICB7IHJldHVy biAoLTEyNyAtIDEpOyB9DQogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgbWF4KCkgdGhyb3coKQ0K ICAgICAgeyByZXR1cm4gMTI3OyB9DQoNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0g NzsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAyOw0KICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2lu dGVnZXIgPSB0cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOw0K ICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7DQogICAgICBzdGF0aWMgc2lnbmVkIGNo YXIgZXBzaWxvbigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIDA7IH0NCiAgICAgIHN0YXRpYyBz aWduZWQgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIDA7IH0NCg0K ICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOw0KICAgICAgc3RhdGljIGNv bnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9l eHBvbmVudCA9IDA7DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsN Cg0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7DQogICAgICBz dGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29u c3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGZs b2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsNCiAgICAgIHN0YXRp YyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOw0KDQogICAgICBzdGF0aWMgc2ln bmVkIGNoYXIgaW5maW5pdHkoKSB0aHJvdygpDQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxz aWduZWQgY2hhcj4oMCk7IH0NCiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBxdWlldF9OYU4oKSB0 aHJvdygpDQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0NCiAg ICAgIHN0YXRpYyBzaWduZWQgY2hhciBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQ0KICAgICAgeyBy ZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXI+KDApOyB9DQogICAgICBzdGF0aWMgc2lnbmVk IGNoYXIgZGVub3JtX21pbigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNp Z25lZCBjaGFyPigwKTsgfQ0KDQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBm YWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOw0KICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsNCg0KICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgdHJhcHMgPSB0cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVm b3JlID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRf c3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsNCiAgICB9Ow0KIyAxMTI4ICJ0Oi9tc3lzLzEuMC9t aW5ndy9pbmNsdWRlL2crKy12My9saW1pdHMiIDMNCiAgdGVtcGxhdGU8Pg0KICAgIHN0cnVjdCBu dW1lcmljX2xpbWl0czx1bnNpZ25lZCBjaGFyPg0KICAgIHsNCiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsNCg0KICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIg bWluKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gMDsgfQ0KICAgICAgc3RhdGljIHVuc2lnbmVk IGNoYXIgbWF4KCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gKDEyNyAqIDIgKyAxKTsgfQ0KDQog ICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDg7DQogICAgICBzdGF0aWMgY29uc3QgaW50 IGRpZ2l0czEwID0gMjsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNl Ow0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7DQogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7DQogICAgICBzdGF0aWMgY29uc3QgaW50IHJh ZGl4ID0gMjsNCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGVwc2lsb24oKSB0aHJvdygpDQog ICAgICB7IHJldHVybiAwOyB9DQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciByb3VuZF9lcnJv cigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIDA7IH0NCg0KICAgICAgc3RhdGljIGNvbnN0IGlu dCBtaW5fZXhwb25lbnQgPSAwOw0KICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQx MCA9IDA7DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7DQogICAgICBz dGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsNCg0KICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf cXVpZXRfTmFOID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5n X05hTiA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNf ZGVub3JtID0gZGVub3JtX2Fic2VudDsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5v cm1fbG9zcyA9IGZhbHNlOw0KDQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBpbmZpbml0eSgp IHRocm93KCkNCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDApOyB9 DQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBxdWlldF9OYU4oKSB0aHJvdygpDQogICAgICB7 IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigwKTsgfQ0KICAgICAgc3RhdGljIHVu c2lnbmVkIGNoYXIgc2lnbmFsaW5nX05hTigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIHN0YXRp Y19jYXN0PHVuc2lnbmVkIGNoYXI+KDApOyB9DQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBk ZW5vcm1fbWluKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQg Y2hhcj4oMCk7IH0NCg0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7 DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsNCiAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7DQoNCiAgICAgIHN0YXRpYyBjb25zdCBib29s IHRyYXBzID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9 IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxl ID0gcm91bmRfdG93YXJkX3plcm87DQogICAgfTsNCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8Pg0K ICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx3Y2hhcl90Pg0KICAgIHsNCiAgICAgIHN0YXRpYyBj b25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsNCg0KICAgICAgc3RhdGljIHdjaGFyX3Qg bWluKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gKHdjaGFyX3QpKC0yMTQ3NDgzNjQ3TCAtIDEp OyB9DQogICAgICBzdGF0aWMgd2NoYXJfdCBtYXgoKSB0aHJvdygpDQogICAgICB7IHJldHVybiAo d2NoYXJfdCkyMTQ3NDgzNjQ3TDsgfQ0KDQogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9 IDMxOw0KICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7DQogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf aW50ZWdlciA9IHRydWU7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7 DQogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsNCiAgICAgIHN0YXRpYyB3Y2hhcl90 IGVwc2lsb24oKSB0aHJvdygpDQogICAgICB7IHJldHVybiAwOyB9DQogICAgICBzdGF0aWMgd2No YXJfdCByb3VuZF9lcnJvcigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIDA7IH0NCg0KICAgICAg c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOw0KICAgICAgc3RhdGljIGNvbnN0IGlu dCBtaW5fZXhwb25lbnQxMCA9IDA7DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVu dCA9IDA7DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsNCg0KICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7DQogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgYm9v bCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rl bm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsNCiAgICAgIHN0YXRpYyBjb25z dCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOw0KDQogICAgICBzdGF0aWMgd2NoYXJfdCBp bmZpbml0eSgpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIHdjaGFyX3QoKTsgfQ0KICAgICAgc3Rh dGljIHdjaGFyX3QgcXVpZXRfTmFOKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gd2NoYXJfdCgp OyB9DQogICAgICBzdGF0aWMgd2NoYXJfdCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQ0KICAgICAg eyByZXR1cm4gd2NoYXJfdCgpOyB9DQogICAgICBzdGF0aWMgd2NoYXJfdCBkZW5vcm1fbWluKCkg dGhyb3coKQ0KICAgICAgeyByZXR1cm4gd2NoYXJfdCgpOyB9DQoNCiAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX2llYzU1OSA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91 bmRlZCA9IHRydWU7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOw0K DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7DQogICAgICBzdGF0aWMgY29u c3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBmbG9h dF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOw0KICAgIH07DQoj IDEyNDEgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2xpbWl0cyIgMw0KICB0ZW1w bGF0ZTw+DQogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHNob3J0Pg0KICAgIHsNCiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsNCg0KICAgICAgc3RhdGljIHNo b3J0IG1pbigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuICgtMzI3NjcgLSAxKTsgfQ0KICAgICAg c3RhdGljIHNob3J0IG1heCgpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIDMyNzY3OyB9DQoNCiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMTU7DQogICAgICBzdGF0aWMgY29uc3QgaW50 IGRpZ2l0czEwID0gNDsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7 DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsNCiAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFk aXggPSAyOw0KICAgICAgc3RhdGljIHNob3J0IGVwc2lsb24oKSB0aHJvdygpDQogICAgICB7IHJl dHVybiAwOyB9DQogICAgICBzdGF0aWMgc2hvcnQgcm91bmRfZXJyb3IoKSB0aHJvdygpDQogICAg ICB7IHJldHVybiAwOyB9DQoNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0g MDsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOw0KICAgICAgc3Rh dGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOw0KICAgICAgc3RhdGljIGNvbnN0IGludCBt YXhfZXhwb25lbnQxMCA9IDA7DQoNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0 eSA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNl Ow0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsNCiAg ICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9h YnNlbnQ7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsN Cg0KICAgICAgc3RhdGljIHNob3J0IGluZmluaXR5KCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4g c2hvcnQoKTsgfQ0KICAgICAgc3RhdGljIHNob3J0IHF1aWV0X05hTigpIHRocm93KCkNCiAgICAg IHsgcmV0dXJuIHNob3J0KCk7IH0NCiAgICAgIHN0YXRpYyBzaG9ydCBzaWduYWxpbmdfTmFOKCkg dGhyb3coKQ0KICAgICAgeyByZXR1cm4gc2hvcnQoKTsgfQ0KICAgICAgc3RhdGljIHNob3J0IGRl bm9ybV9taW4oKSB0aHJvdygpDQogICAgICB7IHJldHVybiBzaG9ydCgpOyB9DQoNCiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7DQogICAgICBzdGF0aWMgY29uc3QgYm9v bCBpc19ib3VuZGVkID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9 IHRydWU7DQoNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsNCiAgICAgIHN0 YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNv bnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87DQog ICAgfTsNCiMgMTI5OCAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvbGltaXRzIiAz DQogIHRlbXBsYXRlPD4NCiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgc2hvcnQ+ DQogICAgew0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOw0K DQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbWluKCkgdGhyb3coKQ0KICAgICAgeyByZXR1 cm4gMDsgfQ0KICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IG1heCgpIHRocm93KCkNCiAgICAg IHsgcmV0dXJuICgzMjc2NyAqIDIgKyAxKTsgfQ0KDQogICAgICBzdGF0aWMgY29uc3QgaW50IGRp Z2l0cyA9IDE2Ow0KICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDQ7DQogICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGlzX2ludGVnZXIgPSB0cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3Qg PSB0cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7DQogICAgICBzdGF0aWMg dW5zaWduZWQgc2hvcnQgZXBzaWxvbigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIDA7IH0NCiAg ICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCByb3VuZF9lcnJvcigpIHRocm93KCkNCiAgICAgIHsg cmV0dXJuIDA7IH0NCg0KICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOw0K ICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7DQogICAgICBzdGF0aWMg Y29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9l eHBvbmVudDEwID0gMDsNCg0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0g ZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7DQog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOw0KICAgICAg c3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2Vu dDsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOw0KDQog ICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgaW5maW5pdHkoKSB0aHJvdygpDQogICAgICB7IHJl dHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0NCiAgICAgIHN0YXRpYyB1bnNp Z25lZCBzaG9ydCBxdWlldF9OYU4oKSB0aHJvdygpDQogICAgICB7IHJldHVybiBzdGF0aWNfY2Fz dDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0NCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBzaWdu YWxpbmdfTmFOKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQg c2hvcnQ+KDApOyB9DQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZGVub3JtX21pbigpIHRo cm93KCkNCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQ0K DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOw0KICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp c19tb2R1bG8gPSB0cnVlOw0KDQogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7 DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsNCiAgICAg IHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2Fy ZF96ZXJvOw0KICAgIH07DQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPD4NCiAgICBzdHJ1Y3QgbnVt ZXJpY19saW1pdHM8aW50Pg0KICAgIHsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNp YWxpemVkID0gdHJ1ZTsNCg0KICAgICAgc3RhdGljIGludCBtaW4oKSB0aHJvdygpDQogICAgICB7 IHJldHVybiAoaW50KSgtMjE0NzQ4MzY0N0wgLSAxKTsgfQ0KICAgICAgc3RhdGljIGludCBtYXgo KSB0aHJvdygpDQogICAgICB7IHJldHVybiAoaW50KTIxNDc0ODM2NDdMOyB9DQoNCiAgICAgIHN0 YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzE7DQogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0 czEwID0gOTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7DQogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAy Ow0KICAgICAgc3RhdGljIGludCBlcHNpbG9uKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gMDsg fQ0KICAgICAgc3RhdGljIGludCByb3VuZF9lcnJvcigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJu IDA7IH0NCg0KICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOw0KICAgICAg c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7DQogICAgICBzdGF0aWMgY29uc3Qg aW50IG1heF9leHBvbmVudCA9IDA7DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVu dDEwID0gMDsNCg0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7 DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7DQogICAgICBz dGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOw0KICAgICAgc3RhdGlj IGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsNCiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOw0KDQogICAgICBz dGF0aWMgaW50IGluZmluaXR5KCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8 aW50PigwKTsgfQ0KICAgICAgc3RhdGljIGludCBxdWlldF9OYU4oKSB0aHJvdygpDQogICAgICB7 IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9DQogICAgICBzdGF0aWMgaW50IHNpZ25hbGlu Z19OYU4oKSB0aHJvdygpDQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9DQog ICAgICBzdGF0aWMgaW50IGRlbm9ybV9taW4oKSB0aHJvdygpDQogICAgICB7IHJldHVybiBzdGF0 aWNfY2FzdDxpbnQ+KDApOyB9DQoNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9 IHRydWU7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsNCiAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7DQoNCiAgICAgIHN0YXRpYyBjb25z dCBib29sIHRyYXBzID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2Jl Zm9yZSA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5k X3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87DQogICAgfTsNCiMgMTQxMCAidDovbXN5cy8xLjAv bWluZ3cvaW5jbHVkZS9nKystdjMvbGltaXRzIiAzDQogIHRlbXBsYXRlPD4NCiAgICBzdHJ1Y3Qg bnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pg0KICAgIHsNCiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsNCg0KICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBt aW4oKSB0aHJvdygpDQogICAgICB7IHJldHVybiAwOyB9DQogICAgICAgICAgc3RhdGljIHVuc2ln bmVkIGludCBtYXgoKSB0aHJvdygpDQogICAgICB7IHJldHVybiAodW5zaWduZWQpKDIxNDc0ODM2 NDdMICogMlUgKyAxKTsgfQ0KDQogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMyOw0K ICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7DQogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19zaWduZWQgPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVn ZXIgPSB0cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOw0KICAg ICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7DQogICAgICBzdGF0aWMgdW5zaWduZWQgaW50 IGVwc2lsb24oKSB0aHJvdygpDQogICAgICB7IHJldHVybiAwOyB9DQogICAgICBzdGF0aWMgdW5z aWduZWQgaW50IHJvdW5kX2Vycm9yKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gMDsgfQ0KDQog ICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7DQogICAgICBzdGF0aWMgY29u c3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4 cG9uZW50ID0gMDsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOw0K DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsNCiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25z dCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgZmxv YXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50Ow0KICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7DQoNCiAgICAgIHN0YXRpYyB1bnNp Z25lZCBpbnQgaW5maW5pdHkoKSB0aHJvdygpDQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1 bnNpZ25lZCBpbnQ+KDApOyB9DQogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IHF1aWV0X05hTigp IHRocm93KCkNCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0N CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2lnbmFsaW5nX05hTigpIHRocm93KCkNCiAgICAg IHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0NCiAgICAgIHN0YXRpYyB1 bnNpZ25lZCBpbnQgZGVub3JtX21pbigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIHN0YXRpY19j YXN0PHVuc2lnbmVkIGludD4oMCk7IH0NCg0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVj NTU5ID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOw0K ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsNCg0KICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5l c3NfYmVmb3JlID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUg cm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsNCiAgICB9Ow0KDQoNCg0KDQoNCg0KICB0 ZW1wbGF0ZTw+DQogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGxvbmc+DQogICAgew0KICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOw0KDQogICAgICBzdGF0aWMg bG9uZyBtaW4oKSB0aHJvdygpDQogICAgICB7IHJldHVybiAoLTIxNDc0ODM2NDdMIC0gMSk7IH0N CiAgICAgIHN0YXRpYyBsb25nIG1heCgpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIDIxNDc0ODM2 NDdMOyB9DQoNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzE7DQogICAgICBzdGF0 aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3Np Z25lZCA9IHRydWU7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsN CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBj b25zdCBpbnQgcmFkaXggPSAyOw0KICAgICAgc3RhdGljIGxvbmcgZXBzaWxvbigpIHRocm93KCkN CiAgICAgIHsgcmV0dXJuIDA7IH0NCiAgICAgIHN0YXRpYyBsb25nIHJvdW5kX2Vycm9yKCkgdGhy b3coKQ0KICAgICAgeyByZXR1cm4gMDsgfQ0KDQogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9l eHBvbmVudCA9IDA7DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsN CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsNCiAgICAgIHN0YXRpYyBj b25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOw0KDQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo YXNfaW5maW5pdHkgPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9O YU4gPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0g ZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0g PSBkZW5vcm1fYWJzZW50Ow0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3Nz ID0gZmFsc2U7DQoNCiAgICAgIHN0YXRpYyBsb25nIGluZmluaXR5KCkgdGhyb3coKQ0KICAgICAg eyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0NCiAgICAgIHN0YXRpYyBsb25nIHF1aWV0 X05hTigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDApOyB9DQog ICAgICBzdGF0aWMgbG9uZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4g c3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0NCiAgICAgIHN0YXRpYyBsb25nIGRlbm9ybV9taW4oKSB0 aHJvdygpDQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQ0KDQogICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaXNfYm91bmRlZCA9IHRydWU7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8g PSB0cnVlOw0KDQogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7DQogICAgICBz dGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBj b25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOw0K ICAgIH07DQojIDE1MjIgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2xpbWl0cyIg Mw0KICB0ZW1wbGF0ZTw+DQogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmc+ DQogICAgew0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOw0K DQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBtaW4oKSB0aHJvdygpDQogICAgICB7IHJldHVy biAwOyB9DQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBtYXgoKSB0aHJvdygpDQogICAgICB7 IHJldHVybiAoMjE0NzQ4MzY0N0wgKiAyVSArIDEpOyB9DQoNCiAgICAgIHN0YXRpYyBjb25zdCBp bnQgZGlnaXRzID0gMzI7DQogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsNCiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19l eGFjdCA9IHRydWU7DQogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsNCiAgICAgIHN0 YXRpYyB1bnNpZ25lZCBsb25nIGVwc2lsb24oKSB0aHJvdygpDQogICAgICB7IHJldHVybiAwOyB9 DQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyByb3VuZF9lcnJvcigpIHRocm93KCkNCiAgICAg IHsgcmV0dXJuIDA7IH0NCg0KICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAw Ow0KICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7DQogICAgICBzdGF0 aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1h eF9leHBvbmVudDEwID0gMDsNCg0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5 ID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7 DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOw0KICAg ICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fi c2VudDsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOw0K DQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBpbmZpbml0eSgpIHRocm93KCkNCiAgICAgIHsg cmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9DQogICAgICBzdGF0aWMgdW5z aWduZWQgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygpDQogICAgICB7IHJldHVybiBzdGF0aWNfY2Fz dDx1bnNpZ25lZCBsb25nPigwKTsgfQ0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2lnbmFs aW5nX05hTigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxv bmc+KDApOyB9DQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBkZW5vcm1fbWluKCkgdGhyb3co KQ0KICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0NCg0KICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9k dWxvID0gdHJ1ZTsNCg0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOw0KICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7DQogICAgICBzdGF0 aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVy bzsNCiAgICB9Ow0KDQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTw+DQogICAgc3RydWN0IG51bWVyaWNf bGltaXRzPGxvbmcgbG9uZz4NCiAgICB7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVj aWFsaXplZCA9IHRydWU7DQoNCiAgICAgIHN0YXRpYyBsb25nIGxvbmcgbWluKCkgdGhyb3coKQ0K ICAgICAgeyByZXR1cm4gKC05MjIzMzcyMDM2ODU0Nzc1ODA3TEwgLSAxKTsgfQ0KICAgICAgc3Rh dGljIGxvbmcgbG9uZyBtYXgoKSB0aHJvdygpDQogICAgICB7IHJldHVybiA5MjIzMzcyMDM2ODU0 Nzc1ODA3TEw7IH0NCg0KICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA2MzsNCiAgICAg IHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxODsNCiAgICAgIHN0YXRpYyBjb25zdCBib29s IGlzX3NpZ25lZCA9IHRydWU7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0g dHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsNCiAgICAgIHN0 YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOw0KICAgICAgc3RhdGljIGxvbmcgbG9uZyBlcHNpbG9u KCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gMDsgfQ0KICAgICAgc3RhdGljIGxvbmcgbG9uZyBy b3VuZF9lcnJvcigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIDA7IH0NCg0KICAgICAgc3RhdGlj IGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOw0KICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5f ZXhwb25lbnQxMCA9IDA7DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7 DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsNCg0KICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf c2lnbmFsaW5nX05hTiA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9z dHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsNCiAgICAgIHN0YXRpYyBjb25zdCBib29s IGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOw0KDQogICAgICBzdGF0aWMgbG9uZyBsb25nIGluZmlu aXR5KCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPigwKTsg fQ0KICAgICAgc3RhdGljIGxvbmcgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygpDQogICAgICB7IHJl dHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9DQogICAgICBzdGF0aWMgbG9uZyBsb25n IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpDQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25n IGxvbmc+KDApOyB9DQogICAgICBzdGF0aWMgbG9uZyBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygp DQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9DQoNCiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7DQogICAgICBzdGF0aWMgY29uc3QgYm9v bCBpc19ib3VuZGVkID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9 IHRydWU7DQoNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsNCiAgICAgIHN0 YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNv bnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87DQog ICAgfTsNCiMgMTYzNCAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvbGltaXRzIiAz DQogIHRlbXBsYXRlPD4NCiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgbG9uZyBs b25nPg0KICAgIHsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1 ZTsNCg0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBtaW4oKSB0aHJvdygpDQogICAg ICB7IHJldHVybiAwOyB9DQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIG1heCgpIHRo cm93KCkNCiAgICAgIHsgcmV0dXJuICg5MjIzMzcyMDM2ODU0Nzc1ODA3TEwgKiAyVUxMICsgMSk7 IH0NCg0KICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA2NDsNCiAgICAgIHN0YXRpYyBj b25zdCBpbnQgZGlnaXRzMTAgPSAxOTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25l ZCA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7DQog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7DQogICAgICBzdGF0aWMgY29u c3QgaW50IHJhZGl4ID0gMjsNCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgZXBzaWxv bigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIDA7IH0NCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBs b25nIGxvbmcgcm91bmRfZXJyb3IoKSB0aHJvdygpDQogICAgICB7IHJldHVybiAwOyB9DQoNCiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsNCiAgICAgIHN0YXRpYyBjb25z dCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOw0KICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhw b25lbnQgPSAwOw0KICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7DQoN CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOw0KICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBmbG9h dF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7DQogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsNCg0KICAgICAgc3RhdGljIHVuc2ln bmVkIGxvbmcgbG9uZyBpbmZpbml0eSgpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIHN0YXRpY19j YXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oMCk7IH0NCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25n IGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z aWduZWQgbG9uZyBsb25nPigwKTsgfQ0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBz aWduYWxpbmdfTmFOKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWdu ZWQgbG9uZyBsb25nPigwKTsgfQ0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBkZW5v cm1fbWluKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9u ZyBsb25nPigwKTsgfQ0KDQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVl Ow0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7DQogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOw0KDQogICAgICBzdGF0aWMgY29uc3QgYm9v bCB0cmFwcyA9IHRydWU7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUg PSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHls ZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOw0KICAgIH07DQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPD4N CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8ZmxvYXQ+DQogICAgew0KICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOw0KDQogICAgICBzdGF0aWMgZmxvYXQgbWlu KCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gMS4xNzU0OTQzNWUtMzhGOyB9DQogICAgICBzdGF0 aWMgZmxvYXQgbWF4KCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gMy40MDI4MjM0N2UrMzhGOyB9 DQoNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMjQ7DQogICAgICBzdGF0aWMgY29u c3QgaW50IGRpZ2l0czEwID0gNjsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9 IHRydWU7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7DQogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0 IGludCByYWRpeCA9IDI7DQogICAgICBzdGF0aWMgZmxvYXQgZXBzaWxvbigpIHRocm93KCkNCiAg ICAgIHsgcmV0dXJuIDEuMTkyMDkyOTBlLTA3RjsgfQ0KICAgICAgc3RhdGljIGZsb2F0IHJvdW5k X2Vycm9yKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gMS4wRjsgfQ0KDQogICAgICBzdGF0aWMg Y29uc3QgaW50IG1pbl9leHBvbmVudCA9IC0xMjU7DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1p bl9leHBvbmVudDEwID0gLTM3Ow0KICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQg PSAxMjg7DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMzg7DQoNCiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOw0KICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9k ZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7DQogICAgICBzdGF0aWMgY29u c3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsNCg0KICAgICAgc3RhdGljIGZsb2F0IGlu ZmluaXR5KCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gMC4wRjsgfQ0KICAgICAgc3RhdGljIGZs b2F0IHF1aWV0X05hTigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIDAuMEY7IH0NCiAgICAgIHN0 YXRpYyBmbG9hdCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gMC4wRjsg fQ0KICAgICAgc3RhdGljIGZsb2F0IGRlbm9ybV9taW4oKSB0aHJvdygpDQogICAgICB7IHJldHVy biAwLjBGOyB9DQoNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOw0K ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7DQogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsNCg0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wg dHJhcHMgPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9 IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxl ID0gcm91bmRfdG93YXJkX3plcm87DQogICAgfTsNCiMgMTc2NSAidDovbXN5cy8xLjAvbWluZ3cv aW5jbHVkZS9nKystdjMvbGltaXRzIiAzDQogIHRlbXBsYXRlPD4NCiAgICBzdHJ1Y3QgbnVtZXJp Y19saW1pdHM8ZG91YmxlPg0KICAgIHsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNp YWxpemVkID0gdHJ1ZTsNCg0KICAgICAgc3RhdGljIGRvdWJsZSBtaW4oKSB0aHJvdygpDQogICAg ICB7IHJldHVybiAyLjIyNTA3Mzg1ODUwNzIwMTRlLTMwODsgfQ0KICAgICAgc3RhdGljIGRvdWJs ZSBtYXgoKSB0aHJvdygpDQogICAgICB7IHJldHVybiAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwODsg fQ0KDQogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDUzOw0KICAgICAgc3RhdGljIGNv bnN0IGludCBkaWdpdHMxMCA9IDE1Ow0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVk ID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsNCiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29u c3QgaW50IHJhZGl4ID0gMjsNCiAgICAgIHN0YXRpYyBkb3VibGUgZXBzaWxvbigpIHRocm93KCkN CiAgICAgIHsgcmV0dXJuIDIuMjIwNDQ2MDQ5MjUwMzEzMWUtMTY7IH0NCiAgICAgIHN0YXRpYyBk b3VibGUgcm91bmRfZXJyb3IoKSB0aHJvdygpDQogICAgICB7IHJldHVybiAxLjA7IH0NCg0KICAg ICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAtMTAyMTsNCiAgICAgIHN0YXRpYyBj b25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAtMzA3Ow0KICAgICAgc3RhdGljIGNvbnN0IGludCBt YXhfZXhwb25lbnQgPSAxMDI0Ow0KICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQx MCA9IDMwODsNCg0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7 DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7DQogICAgICBz dGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOw0KICAgICAgc3RhdGlj IGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0NCiAgICAgICAgICAgICAgZGVu b3JtX2Fic2VudDsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZh bHNlOw0KDQogICAgICBzdGF0aWMgZG91YmxlIGluZmluaXR5KCkgdGhyb3coKQ0KICAgICAgeyBy ZXR1cm4gMC4wOyB9DQogICAgICBzdGF0aWMgZG91YmxlIHF1aWV0X05hTigpIHRocm93KCkNCiAg ICAgIHsgcmV0dXJuIDAuMDsgfQ0KICAgICAgc3RhdGljIGRvdWJsZSBzaWduYWxpbmdfTmFOKCkg dGhyb3coKQ0KICAgICAgeyByZXR1cm4gMC4wOyB9DQogICAgICBzdGF0aWMgZG91YmxlIGRlbm9y bV9taW4oKSB0aHJvdygpDQogICAgICB7IHJldHVybiAwLjA7IH0NCg0KICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19i b3VuZGVkID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNl Ow0KDQogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOw0KICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3Qg ZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPQ0KICAgICAgICAgICAgICByb3VuZF90b3dh cmRfemVybzsNCiAgICB9Ow0KIyAxODQ0ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12 My9saW1pdHMiIDMNCiAgdGVtcGxhdGU8Pg0KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxsb25n IGRvdWJsZT4NCiAgICB7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9 IHRydWU7DQoNCiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBtaW4oKSB0aHJvdygpDQogICAgICB7 IHJldHVybiAzLjM2MjEwMzE0MzExMjA5MzUwNjI2ZS00OTMyTDsgfQ0KICAgICAgc3RhdGljIGxv bmcgZG91YmxlIG1heCgpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIDEuMTg5NzMxNDk1MzU3MjMx NzY1MDJlKzQ5MzJMOyB9DQoNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNjQ7DQog ICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMTg7DQogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19zaWduZWQgPSB0cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdl ciA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsNCiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOw0KICAgICAgc3RhdGljIGxvbmcgZG91Ymxl IGVwc2lsb24oKSB0aHJvdygpDQogICAgICB7IHJldHVybiAxLjA4NDIwMjE3MjQ4NTUwNDQzNDAx ZS0xOUw7IH0NCiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSByb3VuZF9lcnJvcigpIHRocm93KCkN CiAgICAgIHsgcmV0dXJuIDEuMEw7IH0NCg0KICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhw b25lbnQgPSAtMTYzODE7DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0g LTQ5MzE7DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDE2Mzg0Ow0KICAg ICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDQ5MzI7DQoNCiAgICAgIHN0YXRp YyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3Np Z25hbGluZ19OYU4gPQ0KICAgICAgICAgICAgICAgIGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0 IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0NCiAgICAgICAgICAgICAgICBkZW5vcm1f YWJzZW50Ow0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0NCiAgICAg ICAgICAgICAgICBmYWxzZTsNCg0KICAgICAgc3RhdGljIGxvbmcgZG91YmxlIGluZmluaXR5KCkg dGhyb3coKQ0KICAgICAgeyByZXR1cm4gMC4wTDsgfQ0KICAgICAgc3RhdGljIGxvbmcgZG91Ymxl IHF1aWV0X05hTigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIDAuMEw7IH0NCiAgICAgIHN0YXRp YyBsb25nIGRvdWJsZSBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gMC4w TDsgfQ0KICAgICAgc3RhdGljIGxvbmcgZG91YmxlIGRlbm9ybV9taW4oKSB0aHJvdygpDQogICAg ICB7IHJldHVybiAwLjBMOyB9DQoNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9 IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7DQogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsNCg0KICAgICAgc3RhdGljIGNv bnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNz X2JlZm9yZSA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJv dW5kX3N0eWxlID0NCiAgICAgICAgcm91bmRfdG93YXJkX3plcm87DQogICAgfTsNCiMgMTkyNCAi dDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvbGltaXRzIiAzDQp9DQojIDQ0ICJ0Oi9t c3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMN Cg0KIyAxICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My90eXBlaW5mbyIgMSAzDQoj IDQwICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My90eXBlaW5mbyIgMw0KZXh0ZXJu ICJDKysiIHsNCg0KbmFtZXNwYWNlIF9fY3h4YWJpdjENCnsNCiAgY2xhc3MgX19jbGFzc190eXBl X2luZm87DQp9DQojIDU1ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My90eXBlaW5m byIgMw0KbmFtZXNwYWNlIHN0ZA0Kew0KDQoNCg0KICBjbGFzcyB0eXBlX2luZm8NCiAgew0KICBw dWJsaWM6DQoNCg0KDQoNCiAgICB2aXJ0dWFsIH50eXBlX2luZm8oKTsNCg0KICBwcml2YXRlOg0K DQogICAgdHlwZV9pbmZvJiBvcGVyYXRvcj0oY29uc3QgdHlwZV9pbmZvJik7DQogICAgdHlwZV9p bmZvKGNvbnN0IHR5cGVfaW5mbyYpOw0KDQogIHByb3RlY3RlZDoNCiAgICBjb25zdCBjaGFyICpf X25hbWU7DQoNCiAgcHJvdGVjdGVkOg0KICAgIGV4cGxpY2l0IHR5cGVfaW5mbyhjb25zdCBjaGFy ICpfX24pOiBfX25hbWUoX19uKSB7IH0NCg0KICBwdWJsaWM6DQoNCg0KDQogICAgY29uc3QgY2hh ciogbmFtZSgpIGNvbnN0DQogICAgeyByZXR1cm4gX19uYW1lOyB9DQojIDk4ICJ0Oi9tc3lzLzEu MC9taW5ndy9pbmNsdWRlL2crKy12My90eXBlaW5mbyIgMw0KICAgIGJvb2wgYmVmb3JlKGNvbnN0 IHR5cGVfaW5mbyYgX19hcmcpIGNvbnN0DQogICAgeyByZXR1cm4gX19uYW1lIDwgX19hcmcuX19u YW1lOyB9DQogICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHR5cGVfaW5mbyYgX19hcmcpIGNvbnN0 DQogICAgeyByZXR1cm4gX19uYW1lID09IF9fYXJnLl9fbmFtZTsgfQ0KDQogICAgYm9vbCBvcGVy YXRvciE9KGNvbnN0IHR5cGVfaW5mbyYgX19hcmcpIGNvbnN0DQogICAgeyByZXR1cm4gIW9wZXJh dG9yPT0oX19hcmcpOyB9DQoNCg0KICBwdWJsaWM6DQoNCiAgICB2aXJ0dWFsIGJvb2wgX19pc19w b2ludGVyX3AoKSBjb25zdDsNCg0KICAgIHZpcnR1YWwgYm9vbCBfX2lzX2Z1bmN0aW9uX3AoKSBj b25zdDsNCg0KDQoNCg0KDQoNCg0KICAgIHZpcnR1YWwgYm9vbCBfX2RvX2NhdGNoKGNvbnN0IHR5 cGVfaW5mbyAqX190aHJfdHlwZSwgdm9pZCAqKl9fdGhyX29iaiwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1bnNpZ25lZCBfX291dGVyKSBjb25zdDsNCg0KDQogICAgdmlydHVhbCBib29s IF9fZG9fdXBjYXN0KGNvbnN0IF9fY3h4YWJpdjE6Ol9fY2xhc3NfdHlwZV9pbmZvICpfX3Rhcmdl dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKl9fb2JqX3B0cikgY29uc3Q7 DQogIH07DQoNCg0KDQogIGNsYXNzIGJhZF9jYXN0IDogcHVibGljIGV4Y2VwdGlvbg0KICB7DQog IHB1YmxpYzoNCiAgICBiYWRfY2FzdCgpIHRocm93KCkgeyB9DQoNCg0KICAgIHZpcnR1YWwgfmJh ZF9jYXN0KCkgdGhyb3coKTsNCiAgfTsNCg0KDQogIGNsYXNzIGJhZF90eXBlaWQgOiBwdWJsaWMg ZXhjZXB0aW9uDQogIHsNCiAgcHVibGljOg0KICAgIGJhZF90eXBlaWQgKCkgdGhyb3coKSB7IH0N Cg0KDQogICAgdmlydHVhbCB+YmFkX3R5cGVpZCgpIHRocm93KCk7DQogIH07DQp9DQoNCn0NCiMg NDYgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50 Y2MiIDIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4N CiAgICBsb2NhbGUNCiAgICBsb2NhbGU6OmNvbWJpbmUoY29uc3QgbG9jYWxlJiBfX290aGVyKSBj b25zdA0KICAgIHsNCiAgICAgIF9JbXBsKiBfX3RtcCA9IG5ldyBfSW1wbCgqX01faW1wbCwgMSk7 DQogICAgICBfX3RtcC0+X01fcmVwbGFjZV9mYWNldChfX290aGVyLl9NX2ltcGwsICZfRmFjZXQ6 OmlkKTsNCiAgICAgIHJldHVybiBsb2NhbGUoX190bXApOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBi b29sDQogICAgbG9jYWxlOjpvcGVyYXRvcigpKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz4mIF9fczEsDQogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczIpIGNvbnN0DQogICAgew0KICAg ICAgdHlwZWRlZiBzdGQ6OmNvbGxhdGU8X0NoYXJUPiBfX2NvbGxhdGVfdHlwZTsNCiAgICAgIGNv bnN0IF9fY29sbGF0ZV90eXBlJiBfX2NvbGxhdGUgPSB1c2VfZmFjZXQ8X19jb2xsYXRlX3R5cGU+ KCp0aGlzKTsNCiAgICAgIHJldHVybiAoX19jb2xsYXRlLmNvbXBhcmUoX19zMS5kYXRhKCksIF9f czEuZGF0YSgpICsgX19zMS5sZW5ndGgoKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19zMi5kYXRhKCksIF9fczIuZGF0YSgpICsgX19zMi5sZW5ndGgoKSkgPCAwKTsNCiAgICB9 DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pg0KICAgIGNvbnN0IF9GYWNldCYNCiAgICB1 c2VfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYykNCiAgICB7DQogICAgICBzaXplX3QgX19pID0g X0ZhY2V0OjppZC5fTV9pZCgpOw0KICAgICAgbG9jYWxlOjpmYWNldCoqIF9fZmFjZXRzID0gX19s b2MuX01faW1wbC0+X01fZmFjZXRzOw0KICAgICAgaWYgKCEoX19pIDwgX19sb2MuX01faW1wbC0+ X01fZmFjZXRzX3NpemUgJiYgX19mYWNldHNbX19pXSkpDQogICAgICAgIF9fdGhyb3dfYmFkX2Nh c3QoKTsNCiAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBfRmFjZXQmPigqX19mYWNldHNb X19pXSk7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4NCiAgICBib29sDQog ICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYgX19sb2MpIHRocm93KCkNCiAgICB7DQogICAgICBz aXplX3QgX19pID0gX0ZhY2V0OjppZC5fTV9pZCgpOw0KICAgICAgbG9jYWxlOjpmYWNldCoqIF9f ZmFjZXRzID0gX19sb2MuX01faW1wbC0+X01fZmFjZXRzOw0KICAgICAgcmV0dXJuIChfX2kgPCBf X2xvYy5fTV9pbXBsLT5fTV9mYWNldHNfc2l6ZSAmJiBfX2ZhY2V0c1tfX2ldKTsNCiAgICB9DQoN Cg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICBf SW5JdGVyDQogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoNCiAgICBfTV9leHRyYWN0X2Zs b2F0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAg ICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmcmIF9feHRyYykg Y29uc3QNCiAgICB7DQogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOw0K ICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hh clQ+ID4oX19sb2MpOw0KICAgICAgY29uc3QgbnVtcHVuY3Q8X0NoYXJUPiYgX19ucCA9IHVzZV9m YWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOw0KDQoNCiAgICAgIGNvbnN0IGNoYXJfdHlw ZSBfX3BsdXMgPSBfX2N0eXBlLndpZGVuKCcrJyk7DQogICAgICBjb25zdCBjaGFyX3R5cGUgX19t aW51cyA9IF9fY3R5cGUud2lkZW4oJy0nKTsNCiAgICAgIGludCBfX3BvcyA9IDA7DQogICAgICBj aGFyX3R5cGUgX19jID0gKl9fYmVnOw0KICAgICAgaWYgKChfX2MgPT0gX19wbHVzIHx8IF9fYyA9 PSBfX21pbnVzKSAmJiBfX2JlZyAhPSBfX2VuZCkNCiAgICAgICAgew0KICAgICAgICAgIF9feHRy YyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7DQogICAgICAgICAgKytfX3BvczsNCiAg ICAgICAgICBfX2MgPSAqKCsrX19iZWcpOw0KICAgICAgICB9DQoNCg0KICAgICAgY29uc3QgY2hh cl90eXBlIF9femVybyA9IF9fY3R5cGUud2lkZW4oX1NfYXRvbXNbX01femVyb10pOw0KICAgICAg Ym9vbCBfX2ZvdW5kX3plcm8gPSBmYWxzZTsNCiAgICAgIHdoaWxlIChfX2MgPT0gX196ZXJvICYm IF9fYmVnICE9IF9fZW5kKQ0KICAgICAgICB7DQogICAgICAgICAgX19jID0gKigrK19fYmVnKTsN CiAgICAgICAgICBfX2ZvdW5kX3plcm8gPSB0cnVlOw0KICAgICAgICB9DQogICAgICBpZiAoX19m b3VuZF96ZXJvKQ0KICAgICAgICB7DQogICAgICAgICAgX194dHJjICs9IF9TX2F0b21zW19NX3pl cm9dOw0KICAgICAgICAgICsrX19wb3M7DQogICAgICAgIH0NCg0KDQogICAgICBjb25zdCBzaXpl X3QgX19sZW4gPSBfTV9FIC0gX01femVybyArIDE7DQogICAgICBjaGFyX3R5cGUgX193YXRvbXNb X19sZW5dOw0KICAgICAgX19jdHlwZS53aWRlbihfU19hdG9tcywgX1NfYXRvbXMgKyBfX2xlbiwg X193YXRvbXMpOw0KICAgICAgYm9vbCBfX2ZvdW5kX2RlYyA9IGZhbHNlOw0KICAgICAgYm9vbCBf X2ZvdW5kX3NjaSA9IGZhbHNlOw0KICAgICAgY29uc3QgY2hhcl90eXBlIF9fZGVjID0gX19ucC5k ZWNpbWFsX3BvaW50KCk7DQoNCiAgICAgIHN0cmluZyBfX2ZvdW5kX2dyb3VwaW5nOw0KICAgICAg Y29uc3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBfX25wLmdyb3VwaW5nKCk7DQogICAgICBib29sIF9f Y2hlY2tfZ3JvdXBpbmcgPSBfX2dyb3VwaW5nLnNpemUoKTsNCiAgICAgIGludCBfX3NlcF9wb3Mg PSAwOw0KICAgICAgY29uc3QgY2hhcl90eXBlIF9fc2VwID0gX19ucC50aG91c2FuZHNfc2VwKCk7 DQoNCiAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCkNCiAgICAgICAgew0KDQogICAgICAgICAg dHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7DQogICAgICAgICAgY29u c3QgY2hhcl90eXBlKiBfX3AgPSBfX3RyYWl0c190eXBlOjpmaW5kKF9fd2F0b21zLCAxMCwgX19j KTsNCg0KDQogICAgICAgICAgaWYgKF9fcCAmJiBfX2MpDQogICAgICAgICAgICB7DQoNCiAgICAg ICAgICAgICAgKytfX3BvczsNCiAgICAgICAgICAgICAgX194dHJjICs9IF9TX2F0b21zW19fcCAt IF9fd2F0b21zXTsNCiAgICAgICAgICAgICAgKytfX3NlcF9wb3M7DQogICAgICAgICAgICAgIF9f YyA9ICooKytfX2JlZyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgZWxzZSBpZiAoX19jID09 IF9fc2VwICYmIF9fY2hlY2tfZ3JvdXBpbmcgJiYgIV9fZm91bmRfZGVjKQ0KICAgICAgICAgICAg ew0KDQoNCiAgICAgICAgICAgICAgaWYgKF9fc2VwX3BvcykNCiAgICAgICAgICAgICAgICB7DQog ICAgICAgICAgICAgICAgICBfX2ZvdW5kX2dyb3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9f c2VwX3Bvcyk7DQogICAgICAgICAgICAgICAgICBfX3NlcF9wb3MgPSAwOw0KICAgICAgICAgICAg ICAgICAgX19jID0gKigrK19fYmVnKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg IGVsc2UNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3Nf YmFzZTo6ZmFpbGJpdDsNCiAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAg IH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICBlbHNlIGlmIChfX2MgPT0gX19kZWMgJiYgIV9f Zm91bmRfZGVjKQ0KICAgICAgICAgICAgew0KDQoNCg0KICAgICAgICAgICAgICBpZiAoX19mb3Vu ZF9ncm91cGluZy5zaXplKCkpDQogICAgICAgICAgICAgICAgX19mb3VuZF9ncm91cGluZyArPSBz dGF0aWNfY2FzdDxjaGFyPihfX3NlcF9wb3MpOw0KICAgICAgICAgICAgICArK19fcG9zOw0KICAg ICAgICAgICAgICBfX3h0cmMgKz0gJy4nOw0KICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcp Ow0KICAgICAgICAgICAgICBfX2ZvdW5kX2RlYyA9IHRydWU7DQogICAgICAgICAgICB9DQogICAg ICAgICAgZWxzZSBpZiAoKF9fYyA9PSBfX3dhdG9tc1tfTV9lXSB8fCBfX2MgPT0gX193YXRvbXNb X01fRV0pDQogICAgICAgICAgICAgICAgICAgJiYgIV9fZm91bmRfc2NpICYmIF9fcG9zKQ0KICAg ICAgICAgICAgew0KDQogICAgICAgICAgICAgICsrX19wb3M7DQogICAgICAgICAgICAgIF9feHRy YyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7DQogICAgICAgICAgICAgIF9fYyA9ICoo KytfX2JlZyk7DQoNCg0KICAgICAgICAgICAgICBpZiAoX19jID09IF9fcGx1cyB8fCBfX2MgPT0g X19taW51cykNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICArK19fcG9zOw0K ICAgICAgICAgICAgICAgICAgX194dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsN CiAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7DQogICAgICAgICAgICAgICAgfQ0K ICAgICAgICAgICAgICBfX2ZvdW5kX3NjaSA9IHRydWU7DQogICAgICAgICAgICB9DQogICAgICAg ICAgZWxzZQ0KDQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgfQ0KDQoNCg0KICAgICAgaWYg KF9fY2hlY2tfZ3JvdXBpbmcgJiYgX19mb3VuZF9ncm91cGluZy5zaXplKCkpDQogICAgICAgIHsN Cg0KICAgICAgICAgIGlmICghX19mb3VuZF9kZWMpDQogICAgICAgICAgICBfX2ZvdW5kX2dyb3Vw aW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7DQogICAgICAgICAgaWYgKCFfX3Zl cmlmeV9ncm91cGluZyhfX2dyb3VwaW5nLCBfX2ZvdW5kX2dyb3VwaW5nKSkNCiAgICAgICAgICAg IF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Ow0KICAgICAgICB9DQoNCg0KICAgICAgX194dHJj ICs9IGNoYXIoKTsNCiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkNCiAgICAgICAgX19lcnIgfD0g aW9zX2Jhc2U6OmVvZmJpdDsNCiAgICAgIHJldHVybiBfX2JlZzsNCiAgICB9DQoNCg0KICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQogICAgX0luSXRlcg0KICAg IG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6DQogICAgX01fZXh0cmFjdF9pbnQoX0luSXRlciBf X2JlZywgX0luSXRlciBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sDQogICAgICAgICAgICAgICAgICAg aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmcmIF9feHRyYywgaW50JiBfX2Jhc2UpIGNv bnN0DQogICAgew0KICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsNCiAg ICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJU PiA+KF9fbG9jKTsNCiAgICAgIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFj ZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsNCg0KDQogICAgICBpb3NfYmFzZTo6Zm10Zmxh Z3MgX19iYXNlZmllbGQgPSBfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOw0KICAg ICAgaWYgKF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpvY3QpDQogICAgICAgIF9fYmFzZSA9IDg7 DQogICAgICBlbHNlIGlmIChfX2Jhc2VmaWVsZCA9PSBpb3NfYmFzZTo6aGV4KQ0KICAgICAgICBf X2Jhc2UgPSAxNjsNCiAgICAgIGVsc2UNCiAgICAgICAgX19iYXNlID0gMTA7DQoNCg0KICAgICAg aW50IF9fcG9zID0gMDsNCiAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19iZWc7DQogICAgICBpZiAo KF9fYyA9PSBfX2N0eXBlLndpZGVuKCcrJykgfHwgX19jID09IF9fY3R5cGUud2lkZW4oJy0nKSkN CiAgICAgICAgICAmJiBfX2JlZyAhPSBfX2VuZCkNCiAgICAgICAgew0KICAgICAgICAgIF9feHRy YyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7DQogICAgICAgICAgKytfX3BvczsNCiAg ICAgICAgICBfX2MgPSAqKCsrX19iZWcpOw0KICAgICAgICB9DQoNCg0KICAgICAgY29uc3QgY2hh cl90eXBlIF9femVybyA9IF9fY3R5cGUud2lkZW4oX1NfYXRvbXNbX01femVyb10pOw0KICAgICAg Y29uc3QgY2hhcl90eXBlIF9feCA9IF9fY3R5cGUud2lkZW4oJ3gnKTsNCiAgICAgIGNvbnN0IGNo YXJfdHlwZSBfX1ggPSBfX2N0eXBlLndpZGVuKCdYJyk7DQogICAgICBpZiAoX19iYXNlID09IDEw KQ0KICAgICAgICB7DQogICAgICAgICAgYm9vbCBfX2ZvdW5kX3plcm8gPSBmYWxzZTsNCiAgICAg ICAgICB3aGlsZSAoX19jID09IF9femVybyAmJiBfX2JlZyAhPSBfX2VuZCkNCiAgICAgICAgICAg IHsNCiAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsNCiAgICAgICAgICAgICAgX19mb3Vu ZF96ZXJvID0gdHJ1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBpZiAoX19mb3VuZF96ZXJv KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBfX3h0cmMgKz0gX1NfYXRvbXNbX01femVy b107DQogICAgICAgICAgICAgICsrX19wb3M7DQogICAgICAgICAgICAgIGlmIChfX2Jhc2VmaWVs ZCA9PSAwKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIGlmICgoX19jID09 IF9feCB8fCBfX2MgPT0gX19YKSAmJiBfX2JlZyAhPSBfX2VuZCkNCiAgICAgICAgICAgICAgICAg ICAgew0KICAgICAgICAgICAgICAgICAgICAgIF9feHRyYyArPSBfX2N0eXBlLm5hcnJvdyhfX2Ms IGNoYXIoKSk7DQogICAgICAgICAgICAgICAgICAgICAgKytfX3BvczsNCiAgICAgICAgICAgICAg ICAgICAgICBfX2MgPSAqKCsrX19iZWcpOw0KICAgICAgICAgICAgICAgICAgICAgIF9fYmFzZSA9 IDE2Ow0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICBlbHNlDQogICAg ICAgICAgICAgICAgICAgIF9fYmFzZSA9IDg7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAg ICAgfQ0KICAgICAgICB9DQogICAgICBlbHNlIGlmIChfX2Jhc2UgPT0gMTYpDQogICAgICAgIHsN CiAgICAgICAgICBpZiAoX19jID09IF9femVybyAmJiBfX2JlZyAhPSBfX2VuZCkNCiAgICAgICAg ICAgIHsNCiAgICAgICAgICAgICAgX194dHJjICs9IF9TX2F0b21zW19NX3plcm9dOw0KICAgICAg ICAgICAgICArK19fcG9zOw0KICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOw0KICAgICAg ICAgICAgICBpZiAoKF9fYyA9PSBfX3ggfHwgX19jID09IF9fWCkgJiYgX19iZWcgIT0gX19lbmQp DQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgX194dHJjICs9IF9fY3R5cGUu bmFycm93KF9fYywgY2hhcigpKTsNCiAgICAgICAgICAgICAgICAgICsrX19wb3M7DQogICAgICAg ICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAg ICAgIH0NCiAgICAgICAgfQ0KDQoNCg0KICAgICAgc2l6ZV90IF9fbGVuOw0KICAgICAgaWYgKF9f YmFzZSA9PSAxNikNCiAgICAgICAgX19sZW4gPSBfTV9zaXplOw0KICAgICAgZWxzZQ0KICAgICAg ICBfX2xlbiA9IF9fYmFzZTsNCg0KDQogICAgICBjaGFyX3R5cGUgX193YXRvbXNbX01fc2l6ZV07 DQogICAgICBfX2N0eXBlLndpZGVuKF9TX2F0b21zLCBfU19hdG9tcyArIF9fbGVuLCBfX3dhdG9t cyk7DQogICAgICBzdHJpbmcgX19mb3VuZF9ncm91cGluZzsNCiAgICAgIGNvbnN0IHN0cmluZyBf X2dyb3VwaW5nID0gX19ucC5ncm91cGluZygpOw0KICAgICAgYm9vbCBfX2NoZWNrX2dyb3VwaW5n ID0gX19ncm91cGluZy5zaXplKCk7DQogICAgICBpbnQgX19zZXBfcG9zID0gMDsNCiAgICAgIGNv bnN0IGNoYXJfdHlwZSBfX3NlcCA9IF9fbnAudGhvdXNhbmRzX3NlcCgpOw0KICAgICAgd2hpbGUg KF9fYmVnICE9IF9fZW5kKQ0KICAgICAgICB7DQogICAgICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0 czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7DQogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3Ag PSBfX3RyYWl0c190eXBlOjpmaW5kKF9fd2F0b21zLCBfX2xlbiwgX19jKTsNCg0KDQogICAgICAg ICAgaWYgKF9fcCAmJiBfX2MpDQogICAgICAgICAgICB7DQoNCiAgICAgICAgICAgICAgX194dHJj ICs9IF9TX2F0b21zW19fcCAtIF9fd2F0b21zXTsNCiAgICAgICAgICAgICAgKytfX3BvczsNCiAg ICAgICAgICAgICAgKytfX3NlcF9wb3M7DQogICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7 DQogICAgICAgICAgICB9DQogICAgICAgICAgZWxzZSBpZiAoX19jID09IF9fc2VwICYmIF9fY2hl Y2tfZ3JvdXBpbmcpDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICBpZiAoX19zZXBf cG9zKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIF9fZm91bmRfZ3JvdXBp bmcgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsNCiAgICAgICAgICAgICAgICAgIF9f c2VwX3BvcyA9IDA7DQogICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOw0KICAgICAg ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgIHsNCiAgICAg ICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Ow0KICAgICAgICAgICAgICAg ICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGVs c2UNCg0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIH0NCg0KDQoNCiAgICAgIGlmIChfX2No ZWNrX2dyb3VwaW5nICYmIF9fZm91bmRfZ3JvdXBpbmcuc2l6ZSgpKQ0KICAgICAgICB7DQoNCiAg ICAgICAgICBfX2ZvdW5kX2dyb3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7 DQogICAgICAgICAgaWYgKCFfX3ZlcmlmeV9ncm91cGluZyhfX2dyb3VwaW5nLCBfX2ZvdW5kX2dy b3VwaW5nKSkNCiAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Ow0KICAgICAg ICB9DQoNCg0KICAgICAgX194dHJjICs9IGNoYXIoKTsNCiAgICAgIGlmIChfX2JlZyA9PSBfX2Vu ZCkNCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsNCiAgICAgIHJldHVybiBfX2Jl ZzsNCiAgICB9DQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0lu SXRlcj4NCiAgICBfSW5JdGVyDQogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoNCiAgICBk b19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0K ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGJvb2wmIF9fdikgY29uc3QNCiAg ICB7DQoNCiAgICAgIGlmICghKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpib29sYWxwaGEpKQ0K ICAgICAgICB7DQoNCg0KICAgICAgICAgIHN0cmluZyBfX3h0cmM7DQogICAgICAgICAgaW50IF9f YmFzZTsNCiAgICAgICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19p bywgX19lcnIsIF9feHRyYywgX19iYXNlKTsNCg0KICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX191 bDsNCiAgICAgICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX191bCwgX19lcnIs IF9TX2NfbG9jYWxlLCBfX2Jhc2UpOw0KICAgICAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6 OmZhaWxiaXQpICYmIF9fdWwgPD0gMSkNCiAgICAgICAgICAgIF9fdiA9IF9fdWw7DQogICAgICAg ICAgZWxzZQ0KICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7DQogICAgICAg IH0NCg0KDQogICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICB0eXBlZGVmIGJhc2ljX3N0 cmluZzxfQ2hhclQ+IF9fc3RyaW5nX3R5cGU7DQogICAgICAgICAgbG9jYWxlIF9fbG9jID0gX19p by5nZXRsb2MoKTsNCiAgICAgICAgICBjb25zdCBudW1wdW5jdDxfQ2hhclQ+JiBfX25wID0gdXNl X2ZhY2V0PG51bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7DQogICAgICAgICAgY29uc3QgX19zdHJp bmdfdHlwZSBfX3RydWUgPSBfX25wLnRydWVuYW1lKCk7DQogICAgICAgICAgY29uc3QgX19zdHJp bmdfdHlwZSBfX2ZhbHNlID0gX19ucC5mYWxzZW5hbWUoKTsNCiAgICAgICAgICBjb25zdCBjaGFy X3R5cGUqIF9fdHJ1ZXMgPSBfX3RydWUuY19zdHIoKTsNCiAgICAgICAgICBjb25zdCBjaGFyX3R5 cGUqIF9fZmFsc2VzID0gX19mYWxzZS5jX3N0cigpOw0KICAgICAgICAgIGNvbnN0IHNpemVfdCBf X3RydWVuID0gX190cnVlLnNpemUoKSAtIDE7DQogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fZmFs c2VuID0gX19mYWxzZS5zaXplKCkgLSAxOw0KDQogICAgICAgICAgZm9yIChzaXplX3QgX19uID0g MDsgX19iZWcgIT0gX19lbmQ7ICsrX19uKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBj aGFyX3R5cGUgX19jID0gKl9fYmVnKys7DQogICAgICAgICAgICAgIGJvb2wgX190ZXN0ZiA9IF9f biA8PSBfX2ZhbHNlbiA/IF9fYyA9PSBfX2ZhbHNlc1tfX25dIDogZmFsc2U7DQogICAgICAgICAg ICAgIGJvb2wgX190ZXN0dCA9IF9fbiA8PSBfX3RydWVuID8gX19jID09IF9fdHJ1ZXNbX19uXSA6 IGZhbHNlOw0KICAgICAgICAgICAgICBpZiAoIShfX3Rlc3RmIHx8IF9fdGVzdHQpKQ0KICAgICAg ICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0 Ow0KICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAg ICAgICBlbHNlIGlmIChfX3Rlc3RmICYmIF9fbiA9PSBfX2ZhbHNlbikNCiAgICAgICAgICAgICAg ICB7DQogICAgICAgICAgICAgICAgICBfX3YgPSAwOw0KICAgICAgICAgICAgICAgICAgYnJlYWs7 DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBlbHNlIGlmIChfX3Rlc3R0ICYmIF9f biA9PSBfX3RydWVuKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIF9fdiA9 IDE7DQogICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAg ICAgICB9DQogICAgICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQ0KICAgICAgICAgICAgX19lcnIg fD0gaW9zX2Jhc2U6OmVvZmJpdDsNCiAgICAgICAgfQ0KICAgICAgcmV0dXJuIF9fYmVnOw0KICAg IH0NCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAg ICBfSW5JdGVyDQogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoNCiAgICBkb19nZXQoaXRl cl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAg ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcmIF9fdikgY29uc3QNCiAgICB7DQogICAg ICBzdHJpbmcgX194dHJjOw0KICAgICAgaW50IF9fYmFzZTsNCiAgICAgIF9fYmVnID0gX01fZXh0 cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOw0KICAg ICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9jYWxl LCBfX2Jhc2UpOw0KICAgICAgcmV0dXJuIF9fYmVnOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQogICAgX0luSXRlcg0KICAgIG51bV9nZXQ8 X0NoYXJULCBfSW5JdGVyPjo6DQogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBl IF9fZW5kLCBpb3NfYmFzZSYgX19pbywNCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f ZXJyLCB1bnNpZ25lZCBzaG9ydCYgX192KSBjb25zdA0KICAgIHsNCiAgICAgIHN0cmluZyBfX3h0 cmM7DQogICAgICBpbnQgX19iYXNlOw0KICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2Jl ZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7DQogICAgICB1bnNpZ25lZCBs b25nIF9fdWw7DQogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX191bCwgX19l cnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOw0KICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6 ZmFpbGJpdCkNCiAgICAgICAgICAmJiBfX3VsIDw9IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIHNo b3J0Pjo6bWF4KCkpDQogICAgICAgIF9fdiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Pihf X3VsKTsNCiAgICAgIGVsc2UNCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7DQog ICAgICByZXR1cm4gX19iZWc7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX0luSXRlcj4NCiAgICBfSW5JdGVyDQogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0 ZXI+OjoNCiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i YXNlJiBfX2lvLA0KICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVk IGludCYgX192KSBjb25zdA0KICAgIHsNCiAgICAgIHN0cmluZyBfX3h0cmM7DQogICAgICBpbnQg X19iYXNlOw0KICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8s IF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7DQogICAgICB1bnNpZ25lZCBsb25nIF9fdWw7DQogICAg ICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX191bCwgX19lcnIsIF9TX2NfbG9jYWxl LCBfX2Jhc2UpOw0KICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkNCiAgICAg ICAgICAmJiBfX3VsIDw9IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpKQ0KICAg ICAgICBfX3YgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KF9fdWwpOw0KICAgICAgZWxzZQ0K ICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsNCiAgICAgIHJldHVybiBfX2JlZzsN CiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0K ICAgIF9Jbkl0ZXINCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46Og0KICAgIGRvX2dldChp dGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sDQogICAgICAg ICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyYgX192KSBjb25zdA0K ICAgIHsNCiAgICAgIHN0cmluZyBfX3h0cmM7DQogICAgICBpbnQgX19iYXNlOw0KICAgICAgX19i ZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9f YmFzZSk7DQogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2Vyciwg X1NfY19sb2NhbGUsIF9fYmFzZSk7DQogICAgICByZXR1cm4gX19iZWc7DQogICAgfQ0KIyA1Mjcg InQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2Mi IDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0KICAgIF9J bkl0ZXINCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46Og0KICAgIGRvX2dldChpdGVyX3R5 cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sDQogICAgICAgICAgIGlv c19iYXNlOjppb3N0YXRlJiBfX2VyciwgZmxvYXQmIF9fdikgY29uc3QNCiAgICB7DQogICAgICBz dHJpbmcgX194dHJjOw0KICAgICAgX194dHJjLnJlc2VydmUoMzIpOw0KICAgICAgX19iZWcgPSBf TV9leHRyYWN0X2Zsb2F0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYyk7DQogICAg ICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUp Ow0KICAgICAgcmV0dXJuIF9fYmVnOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQogICAgX0luSXRlcg0KICAgIG51bV9nZXQ8X0NoYXJULCBf SW5JdGVyPjo6DQogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBp b3NfYmFzZSYgX19pbywNCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBkb3Vi bGUmIF9fdikgY29uc3QNCiAgICB7DQogICAgICBzdHJpbmcgX194dHJjOw0KICAgICAgX194dHJj LnJlc2VydmUoMzIpOw0KICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2Zsb2F0KF9fYmVnLCBfX2Vu ZCwgX19pbywgX19lcnIsIF9feHRyYyk7DQogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19z dHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUpOw0KICAgICAgcmV0dXJuIF9fYmVnOw0KICAg IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQogICAg X0luSXRlcg0KICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6DQogICAgZG9fZ2V0KGl0ZXJf dHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywNCiAgICAgICAgICAg aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYgX192KSBjb25zdA0KICAgIHsN CiAgICAgIHN0cmluZyBfX3h0cmM7DQogICAgICBfX3h0cmMucmVzZXJ2ZSgzMik7DQogICAgICBf X2JlZyA9IF9NX2V4dHJhY3RfZmxvYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJj KTsNCiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19j X2xvY2FsZSk7DQogICAgICByZXR1cm4gX19iZWc7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICBfSW5JdGVyDQogICAgbnVtX2dldDxf Q2hhclQsIF9Jbkl0ZXI+OjoNCiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUg X19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l cnIsIHZvaWQqJiBfX3YpIGNvbnN0DQogICAgew0KDQogICAgICB0eXBlZGVmIGlvc19iYXNlOjpm bXRmbGFncyBmbXRmbGFnczsNCiAgICAgIGZtdGZsYWdzIF9fZm10ID0gX19pby5mbGFncygpOw0K ICAgICAgZm10ZmxhZ3MgX19mbXRtYXNrID0gfihpb3NfYmFzZTo6c2hvd3BvcyB8IGlvc19iYXNl OjpiYXNlZmllbGQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpb3NfYmFzZTo6dXBw ZXJjYXNlIHwgaW9zX2Jhc2U6OmludGVybmFsKTsNCiAgICAgIF9faW8uZmxhZ3MoX19mbXQgJiBf X2ZtdG1hc2sgfCAoaW9zX2Jhc2U6OmhleCB8IGlvc19iYXNlOjpzaG93YmFzZSkpOw0KDQogICAg ICBzdHJpbmcgX194dHJjOw0KICAgICAgaW50IF9fYmFzZTsNCiAgICAgIF9fYmVnID0gX01fZXh0 cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOw0KDQoN CiAgICAgIF9faW8uZmxhZ3MoX19mbXQpOw0KDQogICAgICB1bnNpZ25lZCBsb25nIF9fdWw7DQog ICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX191bCwgX19lcnIsIF9TX2NfbG9j YWxlLCBfX2Jhc2UpOw0KICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpDQog ICAgICAgIF9fdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KF9fdWwpOw0KICAgICAgZWxzZQ0K ICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsNCiAgICAgIHJldHVybiBfX2JlZzsN CiAgICB9DQojIDYwNCAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9sb2Nh bGVfZmFjZXRzLnRjYyIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9P dXRJdGVyPg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZVQ+DQogICAgICBfT3V0SXRlcg0K ICAgICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6DQogICAgICBfTV9jb252ZXJ0X2Zsb2F0 KF9PdXRJdGVyIF9fcywgaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsIGNoYXIgX19tb2Qs DQogICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVQgX192KSBjb25zdA0KICAgICAgew0KDQoN CiAgICAgICAgY29uc3QgaW50IF9fbWF4X2RpZ2l0cyA9IG51bWVyaWNfbGltaXRzPF9WYWx1ZVQ+ OjpkaWdpdHMxMCArIDE7DQogICAgICAgIHN0cmVhbXNpemUgX19wcmVjID0gX19pby5wcmVjaXNp b24oKTsNCg0KICAgICAgICBpZiAoX19wcmVjID4gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX19t YXhfZGlnaXRzKSkNCiAgICAgICAgICBfX3ByZWMgPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihf X21heF9kaWdpdHMpOw0KDQoNCiAgICAgICAgY2hhciBfX2ZidWZbMTZdOw0KDQoNCiAgICAgICAg aW50IF9fbGVuOw0KIyA2NTEgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2JpdHMv bG9jYWxlX2ZhY2V0cy50Y2MiIDMNCiAgICAgICAgY29uc3QgYm9vbCBfX2ZpeGVkID0gX19pby5m bGFncygpICYgaW9zX2Jhc2U6OmZpeGVkOw0KICAgICAgICBjb25zdCBpbnQgX19tYXhfZXhwID0g bnVtZXJpY19saW1pdHM8X1ZhbHVlVD46Om1heF9leHBvbmVudDEwOw0KDQoNCg0KDQoNCiAgICAg ICAgY29uc3QgaW50IF9fY3Nfc2l6ZSA9IF9fZml4ZWQgPyBfX21heF9leHAgKyBfX21heF9kaWdp dHMgKyA0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tYXhfZGln aXRzICogMzsNCiAgICAgICAgY2hhciogX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0 aW5fYWxsb2NhKF9fY3Nfc2l6ZSkpOw0KDQogICAgICAgIGlmIChfU19mb3JtYXRfZmxvYXQoX19p bywgX19mYnVmLCBfX21vZCwgX19wcmVjKSkNCiAgICAgICAgICBfX2xlbiA9IF9fY29udmVydF9m cm9tX3YoX19jcywgMCwgX19mYnVmLCBfX3YsIF9TX2NfbG9jYWxlLCBfX3ByZWMpOw0KICAgICAg ICBlbHNlDQogICAgICAgICAgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9fY3MsIDAsIF9fZmJ1 ZiwgX192LCBfU19jX2xvY2FsZSk7DQoNCiAgICAgICAgcmV0dXJuIF9NX3dpZGVuX2Zsb2F0KF9f cywgX19pbywgX19maWxsLCBfX2NzLCBfX2xlbik7DQogICAgICB9DQoNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4NCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf VmFsdWVUPg0KICAgICAgX091dEl0ZXINCiAgICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46 Og0KICAgICAgX01fY29udmVydF9pbnQoX091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0No YXJUIF9fZmlsbCwgY2hhciBfX21vZCwNCiAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19tb2Rs LCBfVmFsdWVUIF9fdikgY29uc3QNCiAgICAgIHsNCg0KDQoNCiAgICAgICAgY2hhciBfX2ZidWZb MTZdOw0KICAgICAgICBfU19mb3JtYXRfaW50KF9faW8sIF9fZmJ1ZiwgX19tb2QsIF9fbW9kbCk7 DQojIDY5OSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFj ZXRzLnRjYyIgMw0KICAgICAgICBjaGFyIF9fY3NbMTI4XTsNCiAgICAgICAgaW50IF9fbGVuID0g X19jb252ZXJ0X2Zyb21fdihfX2NzLCAwLCBfX2ZidWYsIF9fdiwgX1NfY19sb2NhbGUpOw0KDQog ICAgICAgIHJldHVybiBfTV93aWRlbl9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fY3MsIF9fbGVu KTsNCiAgICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJ dGVyPg0KICAgIF9PdXRJdGVyDQogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6DQogICAg X01fd2lkZW5fZmxvYXQoX091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmls bCwgY2hhciogX19jcywNCiAgICAgICAgICAgICAgICAgICBpbnQgX19sZW4pIGNvbnN0DQogICAg ew0KDQoNCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7DQogICAgICBj b25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihf X2xvYyk7DQogICAgICBfQ2hhclQqIF9fd3MgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0 aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICogX19sZW4pKTsNCg0KDQogICAgICBfQ2hhclQq IF9fd3MyID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0No YXJUKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKiBfX2xlbiAqIDIpKTsNCiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyAr IF9fbGVuLCBfX3dzKTsNCg0KDQogICAgICBjb25zdCBfQ2hhclQqIF9fcDsNCiAgICAgIGNvbnN0 IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9f bG9jKTsNCiAgICAgIGlmIChfX3AgPSBjaGFyX3RyYWl0czxfQ2hhclQ+OjpmaW5kKF9fd3MsIF9f bGVuLCBfX2N0eXBlLndpZGVuKCcuJykpKQ0KICAgICAgICBfX3dzW19fcCAtIF9fd3NdID0gX19u cC5kZWNpbWFsX3BvaW50KCk7DQoNCg0KDQoNCiAgICAgIGNvbnN0IHN0cmluZyBfX2dyb3VwaW5n ID0gX19ucC5ncm91cGluZygpOw0KICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fYmFzZWZpZWxk ID0gX19pby5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsNCiAgICAgIGlmIChfX2dyb3Vw aW5nLnNpemUoKSkNCiAgICAgICAgew0KICAgICAgICAgIF9DaGFyVCogX19wMjsNCiAgICAgICAg ICBpbnQgX19kZWNsZW4gPSBfX3AgPyBfX3AgLSBfX3dzIDogX19sZW47DQogICAgICAgICAgX19w MiA9IF9fYWRkX2dyb3VwaW5nKF9fd3MyLCBfX25wLnRob3VzYW5kc19zZXAoKSwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19ncm91cGluZy5jX3N0cigpLA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2dyb3VwaW5nLmNfc3RyKCkgKyBfX2dyb3VwaW5nLnNpemUo KSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX193cywgX193cyArIF9fZGVjbGVu KTsNCiAgICAgICAgICBpbnQgX19uZXdsZW4gPSBfX3AyIC0gX193czI7DQoNCg0KICAgICAgICAg IGlmIChfX3ApDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGNoYXJfdHJhaXRzPF9DaGFy VD46OmNvcHkoX19wMiwgX19wLCBfX2xlbiAtIF9fZGVjbGVuKTsNCiAgICAgICAgICAgICAgX19u ZXdsZW4gKz0gX19sZW4gLSBfX2RlY2xlbjsNCiAgICAgICAgICAgIH0NCg0KDQogICAgICAgICAg X193cyA9IF9fd3MyOw0KICAgICAgICAgIF9fbGVuID0gX19uZXdsZW47DQogICAgICAgIH0NCg0K ICAgICAgcmV0dXJuIF9NX2luc2VydChfX3MsIF9faW8sIF9fZmlsbCwgX193cywgX19sZW4pOw0K ICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPg0K ICAgIF9PdXRJdGVyDQogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6DQogICAgX01fd2lk ZW5faW50KF9PdXRJdGVyIF9fcywgaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsIGNoYXIq IF9fY3MsDQogICAgICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3QNCiAgICB7DQoNCg0KICAg ICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsNCiAgICAgIGNvbnN0IGN0eXBl PF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsNCiAg ICAgIF9DaGFyVCogX193cyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eo c2l6ZW9mKF9DaGFyVCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKiBfX2xlbikpOw0KDQoNCiAgICAgIF9DaGFyVCogX193czIgPSBz dGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq IF9fbGVuICogMikpOw0KICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgX19sZW4sIF9f d3MpOw0KDQoNCiAgICAgIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8 bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsNCiAgICAgIGNvbnN0IHN0cmluZyBfX2dyb3VwaW5n ID0gX19ucC5ncm91cGluZygpOw0KICAgICAgY29uc3QgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fYmFz ZWZpZWxkID0gX19pby5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsNCiAgICAgIGlmIChf X2dyb3VwaW5nLnNpemUoKSkNCiAgICAgICAgew0KDQoNCg0KICAgICAgICAgIHN0cmVhbXNpemUg X19vZmYgPSAwOw0KICAgICAgICAgIGlmIChfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2hvd2Jh c2UpDQogICAgICAgICAgICBpZiAoX19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6Om9jdCkNCiAgICAg ICAgICAgICAgew0KICAgICAgICAgICAgICAgIF9fb2ZmID0gMTsNCiAgICAgICAgICAgICAgICAq X193czIgPSAqX193czsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZSBpZiAoX19i YXNlZmllbGQgPT0gaW9zX2Jhc2U6OmhleCkNCiAgICAgICAgICAgICAgew0KICAgICAgICAgICAg ICAgIF9fb2ZmID0gMjsNCiAgICAgICAgICAgICAgICAqX193czIgPSAqX193czsNCiAgICAgICAg ICAgICAgICAqKF9fd3MyICsgMSkgPSAqKF9fd3MgKyAxKTsNCiAgICAgICAgICAgICAgfQ0KICAg ICAgICAgIF9DaGFyVCogX19wOw0KICAgICAgICAgIF9fcCA9IF9fYWRkX2dyb3VwaW5nKF9fd3My ICsgX19vZmYsIF9fbnAudGhvdXNhbmRzX3NlcCgpLA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fZ3JvdXBpbmcuY19zdHIoKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2dyb3VwaW5nLmNfc3RyKCkgKyBfX2dyb3VwaW5nLnNpemUoKSwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX3dzICsgX19vZmYsIF9fd3MgKyBfX2xlbik7DQogICAgICAgICAg X19sZW4gPSBfX3AgLSBfX3dzMjsNCg0KICAgICAgICAgIF9fd3MgPSBfX3dzMjsNCiAgICAgICAg fQ0KICAgICAgcmV0dXJuIF9NX2luc2VydChfX3MsIF9faW8sIF9fZmlsbCwgX193cywgX19sZW4p Ow0KICAgIH0NCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0 SXRlcj4NCiAgICBfT3V0SXRlcg0KICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46Og0KICAg IF9NX2luc2VydChfT3V0SXRlciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBj b25zdCBfQ2hhclQqIF9fd3MsDQogICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3QNCiAgICB7 DQoNCiAgICAgIHN0cmVhbXNpemUgX193ID0gX19pby53aWR0aCgpOw0KICAgICAgX0NoYXJUKiBf X3dzMiA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFy VCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICogX193KSk7DQogICAgICBpZiAoX193ID4gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4o X19sZW4pKQ0KICAgICAgICB7DQogICAgICAgICAgX19wYWQoX19pbywgX19maWxsLCBfX3dzMiwg X193cywgX193LCBfX2xlbiwgdHJ1ZSk7DQogICAgICAgICAgX19sZW4gPSBzdGF0aWNfY2FzdDxp bnQ+KF9fdyk7DQoNCiAgICAgICAgICBfX3dzID0gX193czI7DQogICAgICAgIH0NCiAgICAgIF9f aW8ud2lkdGgoMCk7DQoNCg0KDQogICAgICBmb3IgKGludCBfX2ogPSAwOyBfX2ogPCBfX2xlbjsg KytfX2osICsrX19zKQ0KICAgICAgICAqX19zID0gX193c1tfX2pdOw0KICAgICAgcmV0dXJuIF9f czsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRl cj4NCiAgICBfT3V0SXRlcg0KICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46Og0KICAgIGRv X3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgYm9v bCBfX3YpIGNvbnN0DQogICAgew0KICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBf X2lvLmZsYWdzKCk7DQogICAgICBpZiAoKF9fZmxhZ3MgJiBpb3NfYmFzZTo6Ym9vbGFscGhhKSA9 PSAwKQ0KICAgICAgICB7DQogICAgICAgICAgdW5zaWduZWQgbG9uZyBfX3V2ID0gX192Ow0KICAg ICAgICAgIF9fcyA9IF9NX2NvbnZlcnRfaW50KF9fcywgX19pbywgX19maWxsLCAndScsIGNoYXJf dHlwZSgpLCBfX3V2KTsNCiAgICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAg ICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBfX3N0cmluZ190eXBlOw0KICAgICAgICAg IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7DQogICAgICAgICAgY29uc3QgbnVtcHVuY3Q8 X0NoYXJUPiYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOw0KICAg ICAgICAgIF9fc3RyaW5nX3R5cGUgX19uYW1lOw0KICAgICAgICAgIGlmIChfX3YpDQogICAgICAg ICAgICBfX25hbWUgPSBfX25wLnRydWVuYW1lKCk7DQogICAgICAgICAgZWxzZQ0KICAgICAgICAg ICAgX19uYW1lID0gX19ucC5mYWxzZW5hbWUoKTsNCiAgICAgICAgICBfX3MgPSBfTV9pbnNlcnQo X19zLCBfX2lvLCBfX2ZpbGwsIF9fbmFtZS5jX3N0cigpLCBfX25hbWUuc2l6ZSgpKTsNCiAgICAg ICAgfQ0KICAgICAgcmV0dXJuIF9fczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBfT3V0SXRlcg0KICAgIG51bV9wdXQ8X0NoYXJU LCBfT3V0SXRlcj46Og0KICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywg Y2hhcl90eXBlIF9fZmlsbCwgbG9uZyBfX3YpIGNvbnN0DQogICAgeyByZXR1cm4gX01fY29udmVy dF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsICdkJywgY2hhcl90eXBlKCksIF9fdik7IH0NCg0KICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPg0KICAgIF9PdXRJdGVy DQogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6DQogICAgZG9fcHV0KGl0ZXJfdHlwZSBf X3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLA0KICAgICAgICAgICB1bnNpZ25l ZCBsb25nIF9fdikgY29uc3QNCiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2ludChfX3MsIF9faW8s IF9fZmlsbCwgJ3UnLCBjaGFyX3R5cGUoKSwgX192KTsgfQ0KIyA4OTMgInQ6L21zeXMvMS4wL21p bmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMNCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBfT3V0SXRlcg0KICAgIG51 bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46Og0KICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3Nf YmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgZG91YmxlIF9fdikgY29uc3QNCiAgICB7IHJl dHVybiBfTV9jb252ZXJ0X2Zsb2F0KF9fcywgX19pbywgX19maWxsLCBjaGFyX3R5cGUoKSwgX192 KTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+DQog ICAgX091dEl0ZXINCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoNCiAgICBkb19wdXQo aXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsDQogICAgICAg ICAgIGxvbmcgZG91YmxlIF9fdikgY29uc3QNCiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2Zsb2F0 KF9fcywgX19pbywgX19maWxsLCAnTCcsIF9fdik7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPg0KICAgIF9PdXRJdGVyDQogICAgbnVtX3B1dDxfQ2hh clQsIF9PdXRJdGVyPjo6DQogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lv LCBjaGFyX3R5cGUgX19maWxsLA0KICAgICAgICAgICBjb25zdCB2b2lkKiBfX3YpIGNvbnN0DQog ICAgew0KICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX2lvLmZsYWdzKCk7DQog ICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB+KGlvc19iYXNlOjpzaG93cG9zIHwgaW9z X2Jhc2U6OmJhc2VmaWVsZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlv c19iYXNlOjp1cHBlcmNhc2UgfCBpb3NfYmFzZTo6aW50ZXJuYWwpOw0KICAgICAgX19pby5mbGFn cyhfX2ZsYWdzICYgX19mbXQgfCAoaW9zX2Jhc2U6OmhleCB8IGlvc19iYXNlOjpzaG93YmFzZSkp Ow0KICAgICAgaWYgKHRydWUpDQogICAgICAgIHsNCiAgICAgICAgICBfX3MgPSBfTV9jb252ZXJ0 X2ludChfX3MsIF9faW8sIF9fZmlsbCwgJ3UnLCBjaGFyX3R5cGUoKSwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGxvbmc+KF9fdikpOw0K ICAgICAgICAgIF9faW8uZmxhZ3MoX19mbGFncyk7DQogICAgICAgIH0NCiAgICAgIGlmIChmYWxz ZSkNCiAgICAgICAgew0KICAgICAgICAgIF9faW8uZmxhZ3MoX19mbGFncyk7DQogICAgICAgICAg Ow0KICAgICAgICB9DQogICAgICByZXR1cm4gX19zOw0KICAgIH0NCg0KDQogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICBfSW5JdGVyDQogICAgbW9uZXlf Z2V0PF9DaGFyVCwgX0luSXRlcj46Og0KICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJf dHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICBpb3Nf YmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3VuaXRzKSBjb25zdA0KICAgIHsN CiAgICAgIHN0cmluZ190eXBlIF9fc3RyOw0KICAgICAgX19iZWcgPSB0aGlzLT5kb19nZXQoX19i ZWcsIF9fZW5kLCBfX2ludGwsIF9faW8sIF9fZXJyLCBfX3N0cik7DQoNCiAgICAgIGNvbnN0IGlu dCBfX24gPSBudW1lcmljX2xpbWl0czxsb25nIGRvdWJsZT46OmRpZ2l0czEwOw0KICAgICAgY2hh ciogX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fbikpOw0KICAg ICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsNCiAgICAgIGNvbnN0IGN0eXBl PF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsNCiAg ICAgIGNvbnN0IF9DaGFyVCogX193Y3MgPSBfX3N0ci5jX3N0cigpOw0KICAgICAgX19jdHlwZS5u YXJyb3coX193Y3MsIF9fd2NzICsgX19zdHIuc2l6ZSgpICsgMSwgY2hhcigpLCBfX2NzKTsNCiAg ICAgIF9fY29udmVydF90b192KF9fY3MsIF9fdW5pdHMsIF9fZXJyLCBfU19jX2xvY2FsZSk7DQog ICAgICByZXR1cm4gX19iZWc7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX0luSXRlcj4NCiAgICBfSW5JdGVyDQogICAgbW9uZXlfZ2V0PF9DaGFyVCwgX0lu SXRlcj46Og0KICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgYm9v bCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg X19lcnIsIHN0cmluZ190eXBlJiBfX3VuaXRzKSBjb25zdA0KICAgIHsNCg0KICAgICAgdHlwZWRl ZiBtb25leXB1bmN0PF9DaGFyVCwgdHJ1ZT4gX19tb25leV90cnVlOw0KICAgICAgdHlwZWRlZiBt b25leXB1bmN0PF9DaGFyVCwgZmFsc2U+IF9fbW9uZXlfZmFsc2U7DQogICAgICB0eXBlZGVmIG1v bmV5X2Jhc2U6OnBhcnQgcGFydDsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RyaW5nX3R5cGU6 OnNpemVfdHlwZSBzaXplX3R5cGU7DQoNCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8u Z2V0bG9jKCk7DQogICAgICBjb25zdCBfX21vbmV5X3RydWUmIF9fbXB0ID0gdXNlX2ZhY2V0PF9f bW9uZXlfdHJ1ZT4oX19sb2MpOw0KICAgICAgY29uc3QgX19tb25leV9mYWxzZSYgX19tcGYgPSB1 c2VfZmFjZXQ8X19tb25leV9mYWxzZT4oX19sb2MpOw0KICAgICAgY29uc3QgY3R5cGU8X0NoYXJU PiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOw0KDQogICAgICBj b25zdCBtb25leV9iYXNlOjpwYXR0ZXJuIF9fcCA9IF9faW50bCA/IF9fbXB0Lm5lZ19mb3JtYXQo KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5u ZWdfZm9ybWF0KCk7DQoNCiAgICAgIGNvbnN0IHN0cmluZ190eXBlIF9fcG9zX3NpZ24gPV9faW50 bCA/IF9fbXB0LnBvc2l0aXZlX3NpZ24oKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDogX19tcGYucG9zaXRpdmVfc2lnbigpOw0KICAgICAgY29uc3Qgc3RyaW5n X3R5cGUgX19uZWdfc2lnbiA9X19pbnRsID8gX19tcHQubmVnYXRpdmVfc2lnbigpDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5uZWdhdGl2ZV9zaWdu KCk7DQogICAgICBjb25zdCBjaGFyX3R5cGUgX19kID0gX19pbnRsID8gX19tcHQuZGVjaW1hbF9w b2ludCgpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYuZGVjaW1h bF9wb2ludCgpOw0KICAgICAgY29uc3QgY2hhcl90eXBlIF9fc2VwID0gX19pbnRsID8gX19tcHQu dGhvdXNhbmRzX3NlcCgpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBf X21wZi50aG91c2FuZHNfc2VwKCk7DQoNCiAgICAgIGNvbnN0IHN0cmluZyBfX2dyb3VwaW5nID0g X19pbnRsID8gX19tcHQuZ3JvdXBpbmcoKSA6IF9fbXBmLmdyb3VwaW5nKCk7DQoNCg0KICAgICAg c3RyaW5nX3R5cGUgX19zaWduOw0KDQogICAgICBzdHJpbmcgX19ncm91cGluZ190bXA7DQoNCiAg ICAgIGludCBfX3NlcF9wb3MgPSAwOw0KDQogICAgICBib29sIF9fdGVzdHZhbGlkID0gdHJ1ZTsN Cg0KICAgICAgYm9vbCBfX3Rlc3RkZWNmb3VuZCA9IGZhbHNlOw0KDQoNCiAgICAgIHN0cmluZ190 eXBlIF9fdGVtcF91bml0czsNCg0KICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsNCiAgICAg IGNoYXJfdHlwZSBfX2VvZiA9IHN0YXRpY19jYXN0PGNoYXJfdHlwZT4oY2hhcl90cmFpdHM8Y2hh cl90eXBlPjo6ZW9mKCkpOw0KICAgICAgZm9yIChpbnQgX19pID0gMDsgX19iZWcgIT0gX19lbmQg JiYgX19pIDwgNCAmJiBfX3Rlc3R2YWxpZDsgKytfX2kpDQogICAgICAgIHsNCiAgICAgICAgICBw YXJ0IF9fd2hpY2ggPSBzdGF0aWNfY2FzdDxwYXJ0PihfX3AuZmllbGRbX19pXSk7DQogICAgICAg ICAgc3dpdGNoIChfX3doaWNoKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBj YXNlIG1vbmV5X2Jhc2U6OnN5bWJvbDoNCiAgICAgICAgICAgICAgICAgIGlmIChfX2lvLmZsYWdz KCkgJiBpb3NfYmFzZTo6c2hvd2Jhc2UNCiAgICAgICAgICAgICAgICAgICAgICB8fCBfX2kgPCAy IHx8IF9fc2lnbi5zaXplKCkgPiAxDQogICAgICAgICAgICAgICAgICAgICAgfHwgKChzdGF0aWNf Y2FzdDxwYXJ0PihfX3AuZmllbGRbM10pICE9IG1vbmV5X2Jhc2U6Om5vbmUpDQogICAgICAgICAg ICAgICAgICAgICAgICAgICYmIF9faSA9PSAyKSkNCiAgICAgICAgICAgICAgICAgICAgew0KDQoN Cg0KDQoNCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX3N5bWJvbCA9 IF9faW50bCA/IF9fbXB0LmN1cnJfc3ltYm9sKCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYuY3Vycl9zeW1ib2woKTsNCiAg ICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBfX3N5bWJvbC5zaXplKCk7DQog ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9faiA9IDA7DQogICAgICAgICAgICAgICAg ICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICYmIF9faiA8IF9fbGVuICYmIF9fc3ltYm9sW19fal0gPT0gX19jKQ0KICAgICAgICAgICAgICAg ICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOw0K ICAgICAgICAgICAgICAgICAgICAgICAgICArK19fajsNCiAgICAgICAgICAgICAgICAgICAgICAg IH0NCg0KDQogICAgICAgICAgICAgICAgICAgICAgaWYgKF9faiAhPSBfX2xlbiAmJiAoX19pby5m bGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlKSkNCiAgICAgICAgICAgICAgICAgICAgICAgIF9f dGVzdHZhbGlkID0gZmFsc2U7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg ICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c2lnbjoNCg0KICAg ICAgICAgICAgICAgICAgaWYgKF9fcG9zX3NpZ24uc2l6ZSgpICYmIF9fbmVnX3NpZ24uc2l6ZSgp KQ0KICAgICAgICAgICAgICAgICAgew0KDQogICAgICAgICAgICAgICAgICAgIGlmIChfX2MgPT0g X19wb3Nfc2lnblswXSkNCiAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAg ICAgICAgICBfX3NpZ24gPSBfX3Bvc19zaWduOw0KICAgICAgICAgICAgICAgICAgICAgICAgX19j ID0gKigrK19fYmVnKTsNCiAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg ICAgIGVsc2UgaWYgKF9fYyA9PSBfX25lZ19zaWduWzBdKQ0KICAgICAgICAgICAgICAgICAgICAg IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIF9fc2lnbiA9IF9fbmVnX3NpZ247DQogICAgICAg ICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOw0KICAgICAgICAgICAgICAgICAgICAg IH0NCiAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgIF9fdGVz dHZhbGlkID0gZmFsc2U7DQogICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICBl bHNlIGlmIChfX3Bvc19zaWduLnNpemUoKSAmJiBfX2MgPT0gX19wb3Nfc2lnblswXSkNCiAgICAg ICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgIF9fc2lnbiA9IF9fcG9zX3Np Z247DQogICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsNCiAgICAgICAgICAg ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoX19uZWdfc2lnbi5zaXplKCkg JiYgX19jID09IF9fbmVnX3NpZ25bMF0pDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAg ICAgICAgICAgICAgICBfX3NpZ24gPSBfX25lZ19zaWduOw0KICAgICAgICAgICAgICAgICAgICAg IF9fYyA9ICooKytfX2JlZyk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg ICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6dmFsdWU6DQoNCg0K ICAgICAgICAgICAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kDQogICAgICAgICAgICAgICAg ICAgICAgICAgJiYgKF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6ZGlnaXQsIF9fYykNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfHwgKF9fYyA9PSBfX2QgJiYgIV9fdGVzdGRlY2ZvdW5kKQ0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBfX2MgPT0gX19zZXApKQ0KICAgICAgICAg ICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKF9fYyA9PSBfX2QpDQogICAg ICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ3JvdXBp bmdfdG1wICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7DQogICAgICAgICAgICAgICAg ICAgICAgICAgIF9fc2VwX3BvcyA9IDA7DQogICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGVz dGRlY2ZvdW5kID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg ICAgICAgICAgICBlbHNlIGlmIChfX2MgPT0gX19zZXApDQogICAgICAgICAgICAgICAgICAgICAg ICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfX2dyb3VwaW5nLnNpemUoKSkNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICB7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fZ3JvdXBpbmdfdG1wICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7DQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NlcF9wb3MgPSAwOw0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGVz dHZhbGlkID0gZmFsc2U7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQog ICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAg ICAgICAgICAgICAgICAgICAgICAgICBfX3RlbXBfdW5pdHMgKz0gX19jOw0KICAgICAgICAgICAg ICAgICAgICAgICAgICArK19fc2VwX3BvczsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAg ICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOw0KICAgICAgICAgICAgICAgICAg ICB9DQogICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5 X2Jhc2U6OnNwYWNlOg0KICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6bm9uZToNCg0K ICAgICAgICAgICAgICAgICAgaWYgKF9faSAhPSAzKQ0KICAgICAgICAgICAgICAgICAgICB3aGls ZSAoX19iZWcgIT0gX19lbmQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIF9fY3R5cGUu aXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYykpDQogICAgICAgICAgICAgICAgICAgICAgX19jID0g KigrK19fYmVnKTsNCiAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0N CiAgICAgICAgfQ0KDQoNCiAgICAgIGlmIChfX3NpZ24uc2l6ZSgpID4gMSkNCiAgICAgICAgew0K ICAgICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fc2lnbi5zaXplKCk7DQogICAgICAgICAgc2l6 ZV90eXBlIF9faSA9IDE7DQogICAgICAgICAgZm9yICg7IF9fYyAhPSBfX2VvZiAmJiBfX2kgPCBf X2xlbjsgKytfX2kpDQogICAgICAgICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQgJiYgX19jICE9 IF9fc2lnbltfX2ldKQ0KICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOw0KDQogICAgICAg ICAgaWYgKF9faSAhPSBfX2xlbikNCiAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7DQog ICAgICAgIH0NCg0KDQogICAgICB3aGlsZSAoX190ZW1wX3VuaXRzWzBdID09IF9fY3R5cGUud2lk ZW4oJzAnKSkNCiAgICAgICAgX190ZW1wX3VuaXRzLmVyYXNlKF9fdGVtcF91bml0cy5iZWdpbigp KTsNCg0KICAgICAgaWYgKF9fc2lnbi5zaXplKCkgJiYgX19zaWduID09IF9fbmVnX3NpZ24pDQog ICAgICAgIF9fdGVtcF91bml0cy5pbnNlcnQoX190ZW1wX3VuaXRzLmJlZ2luKCksIF9fY3R5cGUu d2lkZW4oJy0nKSk7DQoNCg0KICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6ZSgpICYmIF9fZ3JvdXBp bmdfdG1wLnNpemUoKSkNCiAgICAgICAgew0KICAgICAgICAgIGlmICghX192ZXJpZnlfZ3JvdXBp bmcoX19ncm91cGluZywgX19ncm91cGluZ190bXApKQ0KICAgICAgICAgICAgX190ZXN0dmFsaWQg PSBmYWxzZTsNCiAgICAgICAgfQ0KDQoNCiAgICAgIGlmIChfX2MgPT0gX19lb2YpDQogICAgICAg IF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7DQoNCg0KICAgICAgaWYgKCFfX3Rlc3R2YWxpZCB8 fCAhX190ZW1wX3VuaXRzLnNpemUoKSkNCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxi aXQ7DQogICAgICBlbHNlDQoNCiAgICAgICAgX190ZW1wX3VuaXRzLnN3YXAoX191bml0cyk7DQoN CiAgICAgIHJldHVybiBfX2JlZzsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBfT3V0SXRlcg0KICAgIG1vbmV5X3B1dDxfQ2hhclQs IF9PdXRJdGVyPjo6DQogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3Nf YmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwNCiAgICAgICAgICAgbG9uZyBkb3VibGUgX191 bml0cykgY29uc3QNCiAgICB7DQogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxv YygpOw0KICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlw ZTxfQ2hhclQ+ID4oX19sb2MpOw0KIyAxMTcxICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2cr Ky12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzDQogICAgICBjb25zdCBpbnQgX19jc19zaXpl ID0gbnVtZXJpY19saW1pdHM8bG9uZyBkb3VibGU+OjptYXhfZXhwb25lbnQxMCArIDU7DQogICAg ICBjaGFyKiBfX2NzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19jc19z aXplKSk7DQogICAgICBpbnQgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9fY3MsIDAsICIlLjAx TGYiLCBfX3VuaXRzLCBfU19jX2xvY2FsZSk7DQoNCiAgICAgIF9DaGFyVCogX193cyA9IHN0YXRp Y19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX2NzX3Np emUpKTsNCiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIF9fbGVuLCBfX3dzKTsNCiAg ICAgIHN0cmluZ190eXBlIF9fZGlnaXRzKF9fd3MpOw0KICAgICAgcmV0dXJuIHRoaXMtPmRvX3B1 dChfX3MsIF9faW50bCwgX19pbywgX19maWxsLCBfX2RpZ2l0cyk7DQogICAgfQ0KDQogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+DQogICAgX091dEl0ZXINCiAg ICBtb25leV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46Og0KICAgIGRvX3B1dChpdGVyX3R5cGUgX19z LCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsDQogICAgICAg ICAgIGNvbnN0IHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3QNCiAgICB7DQogICAgICB0eXBl ZGVmIHR5cGVuYW1lIHN0cmluZ190eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOw0KICAgICAgdHlw ZWRlZiBtb25leV9iYXNlOjpwYXJ0IHBhcnQ7DQoNCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9 IF9faW8uZ2V0bG9jKCk7DQogICAgICBjb25zdCBzaXplX3R5cGUgX193aWR0aCA9IHN0YXRpY19j YXN0PHNpemVfdHlwZT4oX19pby53aWR0aCgpKTsNCg0KDQogICAgICB0eXBlZGVmIG1vbmV5cHVu Y3Q8X0NoYXJULCB0cnVlPiBfX21vbmV5X3RydWU7DQogICAgICB0eXBlZGVmIG1vbmV5cHVuY3Q8 X0NoYXJULCBmYWxzZT4gX19tb25leV9mYWxzZTsNCiAgICAgIGNvbnN0IF9fbW9uZXlfdHJ1ZSYg X19tcHQgPSB1c2VfZmFjZXQ8X19tb25leV90cnVlPihfX2xvYyk7DQogICAgICBjb25zdCBfX21v bmV5X2ZhbHNlJiBfX21wZiA9IHVzZV9mYWNldDxfX21vbmV5X2ZhbHNlPihfX2xvYyk7DQogICAg ICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4g PihfX2xvYyk7DQoNCg0KDQogICAgICBjb25zdCBjaGFyX3R5cGUqIF9fYmVnID0gX19kaWdpdHMu ZGF0YSgpOw0KICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2VuZCA9IF9fYmVnICsgX19kaWdpdHMu c2l6ZSgpOw0KICAgICAgbW9uZXlfYmFzZTo6cGF0dGVybiBfX3A7DQogICAgICBzdHJpbmdfdHlw ZSBfX3NpZ247DQogICAgICBpZiAoKl9fYmVnICE9IF9fY3R5cGUud2lkZW4oJy0nKSkNCiAgICAg ICAgew0KICAgICAgICAgIF9fcCA9IF9faW50bCA/IF9fbXB0LnBvc19mb3JtYXQoKSA6IF9fbXBm LnBvc19mb3JtYXQoKTsNCiAgICAgICAgICBfX3NpZ24gPV9faW50bCA/IF9fbXB0LnBvc2l0aXZl X3NpZ24oKSA6IF9fbXBmLnBvc2l0aXZlX3NpZ24oKTsNCiAgICAgICAgfQ0KICAgICAgZWxzZQ0K ICAgICAgICB7DQogICAgICAgICAgX19wID0gX19pbnRsID8gX19tcHQubmVnX2Zvcm1hdCgpIDog X19tcGYubmVnX2Zvcm1hdCgpOw0KICAgICAgICAgIF9fc2lnbiA9X19pbnRsID8gX19tcHQubmVn YXRpdmVfc2lnbigpIDogX19tcGYubmVnYXRpdmVfc2lnbigpOw0KICAgICAgICAgICsrX19iZWc7 DQogICAgICAgIH0NCg0KDQogICAgICBfX2VuZCA9IF9fY3R5cGUuc2Nhbl9ub3QoY3R5cGVfYmFz ZTo6ZGlnaXQsIF9fYmVnLCBfX2VuZCk7DQogICAgICBpZiAoX19iZWcgIT0gX19lbmQpDQogICAg ICAgIHsNCg0KDQoNCiAgICAgICAgICBzdHJpbmdfdHlwZSBfX3JlczsNCiAgICAgICAgICBzdHJp bmdfdHlwZSBfX3ZhbHVlOw0KICAgICAgICAgIGNvbnN0IHN0cmluZ190eXBlIF9fc3ltYm9sID0g X19pbnRsID8gX19tcHQuY3Vycl9zeW1ib2woKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDogX19tcGYuY3Vycl9zeW1ib2woKTsNCg0KDQogICAgICAgICAg Y29uc3QgaW50IF9fZnJhYyA9IF9faW50bCA/IF9fbXB0LmZyYWNfZGlnaXRzKCkNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYuZnJhY19kaWdpdHMoKTsNCiAgICAg ICAgICBpZiAoX19mcmFjID4gMCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgY29uc3Qg Y2hhcl90eXBlIF9fZCA9IF9faW50bCA/IF9fbXB0LmRlY2ltYWxfcG9pbnQoKQ0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYuZGVjaW1hbF9wb2ludCgp Ow0KICAgICAgICAgICAgICBpZiAoX19lbmQgLSBfX2JlZyA+PSBfX2ZyYWMpDQogICAgICAgICAg ICAgICAgew0KICAgICAgICAgICAgICAgICAgX192YWx1ZSA9IHN0cmluZ190eXBlKF9fZW5kIC0g X19mcmFjLCBfX2VuZCk7DQogICAgICAgICAgICAgICAgICBfX3ZhbHVlLmluc2VydChfX3ZhbHVl LmJlZ2luKCksIF9fZCk7DQogICAgICAgICAgICAgICAgICBfX2VuZCAtPSBfX2ZyYWM7DQogICAg ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgew0KDQog ICAgICAgICAgICAgICAgICBfX3ZhbHVlID0gc3RyaW5nX3R5cGUoX19iZWcsIF9fZW5kKTsNCiAg ICAgICAgICAgICAgICAgIGludCBfX3BhZGRlYyA9IF9fZnJhYyAtIChfX2VuZCAtIF9fYmVnKTsN CiAgICAgICAgICAgICAgICAgIGNoYXJfdHlwZSBfX3plcm8gPSBfX2N0eXBlLndpZGVuKCcwJyk7 DQogICAgICAgICAgICAgICAgICBfX3ZhbHVlLmluc2VydChfX3ZhbHVlLmJlZ2luKCksIF9fcGFk ZGVjLCBfX3plcm8pOw0KICAgICAgICAgICAgICAgICAgX192YWx1ZS5pbnNlcnQoX192YWx1ZS5i ZWdpbigpLCBfX2QpOw0KICAgICAgICAgICAgICAgICAgX19iZWcgPSBfX2VuZDsNCiAgICAgICAg ICAgICAgICB9DQogICAgICAgICAgICB9DQoNCg0KDQogICAgICAgICAgaWYgKF9fYmVnICE9IF9f ZW5kKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBjb25zdCBzdHJpbmcgX19ncm91cGlu ZyA9IF9faW50bCA/IF9fbXB0Lmdyb3VwaW5nKCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5ncm91cGluZygpOw0KICAgICAgICAgICAgICBp ZiAoX19ncm91cGluZy5zaXplKCkpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAg ICAgY29uc3QgY2hhcl90eXBlIF9fc2VwID0gX19pbnRsID8gX19tcHQudGhvdXNhbmRzX3NlcCgp DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21w Zi50aG91c2FuZHNfc2VwKCk7DQogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2diZWcg PSBfX2dyb3VwaW5nLmNfc3RyKCk7DQogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2dl bmQgPSBfX2diZWcgKyBfX2dyb3VwaW5nLnNpemUoKTsNCiAgICAgICAgICAgICAgICAgIGNvbnN0 IGludCBfX24gPSAoX19lbmQgLSBfX2JlZykgKiAyOw0KICAgICAgICAgICAgICAgICAgX0NoYXJU KiBfX3dzMiA9DQogICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVp bHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX24pKTsNCiAgICAgICAgICAgICAgICAgIF9D aGFyVCogX193c19lbmQgPSBfX2FkZF9ncm91cGluZyhfX3dzMiwgX19zZXAsIF9fZ2JlZywNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dlbmQs IF9fYmVnLCBfX2VuZCk7DQogICAgICAgICAgICAgICAgICBfX3ZhbHVlLmluc2VydCgwLCBfX3dz MiwgX193c19lbmQgLSBfX3dzMik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBl bHNlDQogICAgICAgICAgICAgICAgX192YWx1ZS5pbnNlcnQoMCwgc3RyaW5nX3R5cGUoX19iZWcs IF9fZW5kKSk7DQogICAgICAgICAgICB9DQoNCg0KICAgICAgICAgIGlvc19iYXNlOjpmbXRmbGFn cyBfX2YgPSBfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6YWRqdXN0ZmllbGQ7DQogICAgICAgICAg c2l6ZV90eXBlIF9fbGVuID0gX192YWx1ZS5zaXplKCkgKyBfX3NpZ24uc2l6ZSgpOw0KICAgICAg ICAgIF9fbGVuICs9IChfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2hvd2Jhc2UpID8gX19zeW1i b2wuc2l6ZSgpIDogMDsNCiAgICAgICAgICBib29sIF9fdGVzdGlwYWQgPSBfX2YgPT0gaW9zX2Jh c2U6OmludGVybmFsICYmIF9fbGVuIDwgX193aWR0aDsNCg0KDQogICAgICAgICAgZm9yIChpbnQg X19pID0gMDsgX19pIDwgNDsgKytfX2kpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIHBh cnQgX193aGljaCA9IHN0YXRpY19jYXN0PHBhcnQ+KF9fcC5maWVsZFtfX2ldKTsNCiAgICAgICAg ICAgICAgc3dpdGNoIChfX3doaWNoKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAg ICBjYXNlIG1vbmV5X2Jhc2U6OnN5bWJvbDoNCiAgICAgICAgICAgICAgICAgIGlmIChfX2lvLmZs YWdzKCkgJiBpb3NfYmFzZTo6c2hvd2Jhc2UpDQogICAgICAgICAgICAgICAgICAgIF9fcmVzICs9 IF9fc3ltYm9sOw0KICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2Fz ZSBtb25leV9iYXNlOjpzaWduOg0KDQoNCg0KICAgICAgICAgICAgICAgICAgaWYgKF9fc2lnbi5z aXplKCkpDQogICAgICAgICAgICAgICAgICAgIF9fcmVzICs9IF9fc2lnblswXTsNCiAgICAgICAg ICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6dmFsdWU6 DQogICAgICAgICAgICAgICAgICBfX3JlcyArPSBfX3ZhbHVlOw0KICAgICAgICAgICAgICAgICAg YnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpzcGFjZToNCg0KDQoNCiAg ICAgICAgICAgICAgICAgIGlmIChfX3Rlc3RpcGFkKQ0KICAgICAgICAgICAgICAgICAgICBfX3Jl cyArPSBzdHJpbmdfdHlwZShfX3dpZHRoIC0gX19sZW4sIF9fZmlsbCk7DQogICAgICAgICAgICAg ICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgIF9fcmVzICs9IF9fY3R5cGUud2lkZW4oX19m aWxsKTsNCiAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgbW9u ZXlfYmFzZTo6bm9uZToNCiAgICAgICAgICAgICAgICAgIGlmIChfX3Rlc3RpcGFkKQ0KICAgICAg ICAgICAgICAgICAgICBfX3JlcyArPSBzdHJpbmdfdHlwZShfX3dpZHRoIC0gX19sZW4sIF9fZmls bCk7DQogICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAg ICAgICB9DQoNCg0KICAgICAgICAgIGlmIChfX3NpZ24uc2l6ZSgpID4gMSkNCiAgICAgICAgICAg IF9fcmVzICs9IHN0cmluZ190eXBlKF9fc2lnbi5iZWdpbigpICsgMSwgX19zaWduLmVuZCgpKTsN Cg0KDQogICAgICAgICAgX19sZW4gPSBfX3Jlcy5zaXplKCk7DQogICAgICAgICAgaWYgKF9fd2lk dGggPiBfX2xlbikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaWYgKF9fZiA9PSBpb3Nf YmFzZTo6bGVmdCkNCg0KICAgICAgICAgICAgICAgIF9fcmVzLmFwcGVuZChfX3dpZHRoIC0gX19s ZW4sIF9fZmlsbCk7DQogICAgICAgICAgICAgIGVsc2UNCg0KICAgICAgICAgICAgICAgIF9fcmVz Lmluc2VydCgwLCBzdHJpbmdfdHlwZShfX3dpZHRoIC0gX19sZW4sIF9fZmlsbCkpOw0KICAgICAg ICAgICAgICBfX2xlbiA9IF9fd2lkdGg7DQogICAgICAgICAgICB9DQoNCg0KICAgICAgICAgIGZv ciAoc2l6ZV90eXBlIF9faiA9IDA7IF9faiA8IF9fbGVuOyArK19faiwgKytfX3MpDQogICAgICAg ICAgICAqX19zID0gX19yZXNbX19qXTsNCiAgICAgICAgfQ0KICAgICAgX19pby53aWR0aCgwKTsN CiAgICAgIHJldHVybiBfX3M7DQogICAgfQ0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0KICAgIHRpbWVfYmFzZTo6ZGF0ZW9yZGVyDQogICAg dGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6ZG9fZGF0ZV9vcmRlcigpIGNvbnN0DQogICAgeyBy ZXR1cm4gdGltZV9iYXNlOjpub19vcmRlcjsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICB2b2lkDQogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5J dGVyPjo6DQogICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KGl0ZXJfdHlwZSYgX19iZWcsIGl0ZXJf dHlwZSYgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBp b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBfQ2hhclQqIF9fZm9ybWF0KSBjb25zdA0KICAgIHsNCiAgICAgIGxvY2FsZSBf X2xvYyA9IF9faW8uZ2V0bG9jKCk7DQogICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+IGNvbnN0JiBf X3RwID0gdXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7DQogICAgICBjb25z dCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xv Yyk7DQogICAgICBzaXplX3QgX19sZW4gPSBjaGFyX3RyYWl0czxfQ2hhclQ+OjpsZW5ndGgoX19m b3JtYXQpOw0KDQogICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2JlZyAhPSBfX2VuZCAmJiBf X2kgPCBfX2xlbiAmJiAhX19lcnI7ICsrX19pKQ0KICAgICAgICB7DQogICAgICAgICAgY2hhciBf X2MgPSBfX2Zvcm1hdFtfX2ldOw0KICAgICAgICAgIGlmIChfX2MgPT0gJyUnKQ0KICAgICAgICAg ICAgew0KDQogICAgICAgICAgICAgIF9fYyA9IF9fZm9ybWF0WysrX19pXTsNCiAgICAgICAgICAg ICAgY2hhciBfX21vZCA9IDA7DQogICAgICAgICAgICAgIGludCBfX21lbSA9IDA7DQogICAgICAg ICAgICAgIGlmIChfX2MgPT0gJ0UnIHx8IF9fYyA9PSAnTycpDQogICAgICAgICAgICAgICAgew0K ICAgICAgICAgICAgICAgICAgX19tb2QgPSBfX2M7DQogICAgICAgICAgICAgICAgICBfX2MgPSBf X2Zvcm1hdFsrK19faV07DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBzd2l0Y2gg KF9fYykNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBf X2NzOw0KICAgICAgICAgICAgICAgICAgX0NoYXJUIF9fd2NzWzEwXTsNCiAgICAgICAgICAgICAg ICBjYXNlICdhJzoNCg0KICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2RheXMx WzddOw0KICAgICAgICAgICAgICAgICAgX190cC5fTV9kYXlzX2FiYnJldmlhdGVkKF9fZGF5czEp Ow0KICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bS0+ dG1fd2RheSwgX19kYXlzMSwgNywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2Vycik7DQogICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdB JzoNCg0KICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2RheXMyWzddOw0KICAg ICAgICAgICAgICAgICAgX190cC5fTV9kYXlzKF9fZGF5czIpOw0KICAgICAgICAgICAgICAgICAg X01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fd2RheSwgX19kYXlzMiwgNywN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Vycik7DQogICAgICAgICAgICAg ICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdoJzoNCiAgICAgICAgICAgICAgICBj YXNlICdiJzoNCg0KICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX21vbnRoczFb MTJdOw0KICAgICAgICAgICAgICAgICAgX190cC5fTV9tb250aHNfYWJicmV2aWF0ZWQoX19tb250 aHMxKTsNCiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbmFtZShfX2JlZywgX19lbmQsIF9f dG0tPnRtX21vbiwgX19tb250aHMxLCAxMiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2Vycik7DQogICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBj YXNlICdCJzoNCg0KICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX21vbnRoczJb MTJdOw0KICAgICAgICAgICAgICAgICAgX190cC5fTV9tb250aHMoX19tb250aHMyKTsNCiAgICAg ICAgICAgICAgICAgIF9NX2V4dHJhY3RfbmFtZShfX2JlZywgX19lbmQsIF9fdG0tPnRtX21vbiwg X19tb250aHMyLCAxMiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Vycik7 DQogICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdjJzoNCg0K ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2R0WzJdOw0KICAgICAgICAgICAg ICAgICAgX190cC5fTV9kYXRlX3RpbWVfZm9ybWF0cyhfX2R0KTsNCiAgICAgICAgICAgICAgICAg IF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZHRbMF0pOw0KICAgICAg ICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAnZCc6DQoNCiAgICAgICAg ICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbWRheSwgMSwg MzEsIDIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7 DQogICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdEJzoNCg0K ICAgICAgICAgICAgICAgICAgX19jcyA9ICIlbS8lZC8leSI7DQogICAgICAgICAgICAgICAgICBf X2N0eXBlLndpZGVuKF9fY3MsIF9fY3MgKyA5LCBfX3djcyk7DQogICAgICAgICAgICAgICAgICBf TV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3djcyk7DQogICAgICAgICAg ICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdIJzoNCg0KICAgICAgICAgICAg ICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV9ob3VyLCAwLCAyMywg MiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsNCiAg ICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgJ0knOg0KDQogICAg ICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG0tPnRtX2hvdXIs IDEsIDEyLCAyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19l cnIpOw0KICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAnbSc6 DQoNCiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX19tZW0s IDEsIDEyLCAyLCBfX2N0eXBlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19l cnIpOw0KICAgICAgICAgICAgICAgICAgaWYgKCFfX2VycikNCiAgICAgICAgICAgICAgICAgICAg X190bS0+dG1fbW9uID0gX19tZW0gLSAxOw0KICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAg ICAgICAgICAgICAgY2FzZSAnTSc6DQoNCiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVt KF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbWluLCAwLCA1OSwgMiwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsNCiAgICAgICAgICAgICAgICAgIGJyZWFr Ow0KICAgICAgICAgICAgICAgIGNhc2UgJ24nOg0KICAgICAgICAgICAgICAgICAgaWYgKF9fY3R5 cGUubmFycm93KCpfX2JlZywgMCkgPT0gJ1xuJykNCiAgICAgICAgICAgICAgICAgICAgKytfX2Jl ZzsNCiAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgX19lcnIgfD0g aW9zX2Jhc2U6OmZhaWxiaXQ7DQogICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAg ICAgICBjYXNlICdSJzoNCg0KICAgICAgICAgICAgICAgICAgX19jcyA9ICIlSDolTSI7DQogICAg ICAgICAgICAgICAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3MgKyA2LCBfX3djcyk7DQogICAg ICAgICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBf X2VyciwgX190bSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3dj cyk7DQogICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdTJzoN Cg0KICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50 bV9zZWMsIDAsIDU5LCAyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlw ZSwgX19lcnIpOw0KICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2Fz ZSAndCc6DQogICAgICAgICAgICAgICAgICBpZiAoX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKSA9 PSAnXHQnKQ0KICAgICAgICAgICAgICAgICAgICArK19fYmVnOw0KICAgICAgICAgICAgICAgICAg ZWxzZQ0KICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Ow0KICAgICAg ICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAnVCc6DQoNCiAgICAgICAg ICAgICAgICAgIF9fY3MgPSAiJUg6JU06JVMiOw0KICAgICAgICAgICAgICAgICAgX19jdHlwZS53 aWRlbihfX2NzLCBfX2NzICsgOSwgX193Y3MpOw0KICAgICAgICAgICAgICAgICAgX01fZXh0cmFj dF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX193Y3MpOw0KICAgICAgICAgICAgICAgICAg YnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAneCc6DQoNCiAgICAgICAgICAgICAgICAgIGNv bnN0IGNoYXJfdHlwZSogX19kYXRlc1syXTsNCiAgICAgICAgICAgICAgICAgIF9fdHAuX01fZGF0 ZV9mb3JtYXRzKF9fZGF0ZXMpOw0KICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF92aWFfZm9y bWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19kYXRlc1swXSk7DQogICAgICAgICAgICAgICAgICBicmVh azsNCiAgICAgICAgICAgICAgICBjYXNlICdYJzoNCg0KICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhcl90eXBlKiBfX3RpbWVzWzJdOw0KICAgICAgICAgICAgICAgICAgX190cC5fTV90aW1lX2Zv cm1hdHMoX190aW1lcyk7DQogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQo X19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX3RpbWVzWzBdKTsNCiAgICAgICAgICAgICAgICAgIGJyZWFrOw0K ICAgICAgICAgICAgICAgIGNhc2UgJ3knOg0KDQogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0 X251bShfX2JlZywgX19lbmQsIF9fdG0tPnRtX3llYXIsIDAsIDk5LCAyLA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOw0KICAgICAgICAgICAgICAgICAg YnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAnWSc6DQoNCiAgICAgICAgICAgICAgICAgIF9N X2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX19tZW0sIDAsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSwgNCwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsNCiAgICAgICAgICAgICAgICAg IGlmICghX19lcnIpDQogICAgICAgICAgICAgICAgICAgIF9fdG0tPnRtX3llYXIgPSBfX21lbSAt IDE5MDA7DQogICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICda JzoNCg0KICAgICAgICAgICAgICAgICAgaWYgKF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6dXBwZXIs ICpfX2JlZykpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICBp bnQgX190bXA7DQogICAgICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBf X2VuZCwgX190bXAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGlt ZXB1bmN0PF9DaGFyVD46Ol9TX3RpbWV6b25lcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMTQsIF9fZXJyKTsNCg0KDQogICAgICAgICAgICAgICAgICAgICAgY2hhcl90 eXBlIF9fYyA9ICpfX2JlZzsNCiAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9fZXJyICYmIF9f dG1wID09IDANCiAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKF9fYyA9PSBfX2N0eXBlLndp ZGVuKCctJykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IF9fYyA9PSBfX2N0eXBl LndpZGVuKCcrJykpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAg ICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG1wLCAwLCAyMywgMiwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJy KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5k LCBfX3RtcCwgMCwgNTksIDIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2N0eXBlLCBfX2Vycik7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAg ICAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsNCiAgICAgICAgICAg ICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCg0KICAgICAg ICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Ow0KICAgICAgICAgICAg ICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBlbHNlDQogICAgICAg ICAgICAgICAgew0KDQogICAgICAgICAgICAgICAgICBpZiAoX19jID09IF9fY3R5cGUubmFycm93 KCpfX2JlZywgMCkpDQogICAgICAgICAgICAgICAgICAgICsrX19iZWc7DQogICAgICAgICAgICAg ICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0 Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQogICAgdm9pZA0KICAgIHRpbWVfZ2V0PF9D aGFyVCwgX0luSXRlcj46Og0KICAgIF9NX2V4dHJhY3RfbnVtKGl0ZXJfdHlwZSYgX19iZWcsIGl0 ZXJfdHlwZSYgX19lbmQsIGludCYgX19tZW1iZXIsDQogICAgICAgICAgICAgICAgICAgaW50IF9f bWluLCBpbnQgX19tYXgsIHNpemVfdCBfX2xlbiwNCiAgICAgICAgICAgICAgICAgICBjb25zdCBj dHlwZTxfQ2hhclQ+JiBfX2N0eXBlLA0KICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0 YXRlJiBfX2VycikgY29uc3QNCiAgICB7DQogICAgICBzaXplX3QgX19pID0gMDsNCiAgICAgIHN0 cmluZyBfX2RpZ2l0czsNCiAgICAgIGJvb2wgX190ZXN0dmFsaWQgPSB0cnVlOw0KICAgICAgY2hh cl90eXBlIF9fYyA9ICpfX2JlZzsNCiAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCAmJiBfX2kg PCBfX2xlbg0KICAgICAgICAgICAgICYmIF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6ZGlnaXQsIF9f YykpDQogICAgICAgIHsNCiAgICAgICAgICBfX2RpZ2l0cyArPSBfX2N0eXBlLm5hcnJvdyhfX2Ms IDApOw0KICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7DQogICAgICAgICAgKytfX2k7DQogICAg ICAgIH0NCiAgICAgIGlmIChfX2kgPT0gX19sZW4pDQogICAgICAgIHsNCiAgICAgICAgICBpbnQg X192YWx1ZSA9IGF0b2koX19kaWdpdHMuY19zdHIoKSk7DQogICAgICAgICAgaWYgKF9fbWluIDw9 IF9fdmFsdWUgJiYgX192YWx1ZSA8PSBfX21heCkNCiAgICAgICAgICAgIF9fbWVtYmVyID0gX192 YWx1ZTsNCiAgICAgICAgICBlbHNlDQogICAgICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOw0K ICAgICAgICB9DQogICAgICBlbHNlDQogICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7DQogICAg ICBpZiAoIV9fdGVzdHZhbGlkKQ0KICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsN CiAgICB9DQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRl cj4NCiAgICB2b2lkDQogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6DQogICAgX01fZXh0 cmFjdF9uYW1lKGl0ZXJfdHlwZSYgX19iZWcsIGl0ZXJfdHlwZSYgX19lbmQsIGludCYgX19tZW1i ZXIsDQogICAgICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCoqIF9fbmFtZXMsIHNpemVfdCBf X2luZGV4bGVuLA0KICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIp IGNvbnN0DQogICAgew0KICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxjaGFyX3R5cGU+IF9fdHJh aXRzX3R5cGU7DQogICAgICBpbnQqIF9fbWF0Y2hlcyA9IHN0YXRpY19jYXN0PGludCo+KF9fYnVp bHRpbl9hbGxvY2Eoc2l6ZW9mKGludCkgKiBfX2luZGV4bGVuKSk7DQogICAgICBzaXplX3QgX19u bWF0Y2hlcyA9IDA7DQogICAgICBzaXplX3QgX19wb3MgPSAwOw0KICAgICAgYm9vbCBfX3Rlc3R2 YWxpZCA9IHRydWU7DQogICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbmFtZTsNCg0KICAgICAgY2hh cl90eXBlIF9fYyA9ICpfX2JlZzsNCg0KICAgICAgZm9yIChzaXplX3QgX19pMSA9IDA7IF9faTEg PCBfX2luZGV4bGVuOyArK19faTEpDQogICAgICAgIGlmIChfX2MgPT0gX19uYW1lc1tfX2kxXVsw XSkNCiAgICAgICAgICBfX21hdGNoZXNbX19ubWF0Y2hlcysrXSA9IF9faTE7DQoNCiAgICAgIHdo aWxlKF9fbm1hdGNoZXMgPiAxKQ0KICAgICAgICB7DQoNCiAgICAgICAgICBzaXplX3QgX19taW5s ZW4gPSAxMDsNCiAgICAgICAgICBmb3IgKHNpemVfdCBfX2kyID0gMDsgX19pMiA8IF9fbm1hdGNo ZXM7ICsrX19pMikNCiAgICAgICAgICAgIF9fbWlubGVuID0gbWluKF9fbWlubGVuLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fbmFtZXNbX19tYXRj aGVzW19faTJdXSkpOw0KDQogICAgICAgICAgaWYgKF9fcG9zIDwgX19taW5sZW4gJiYgX19iZWcg IT0gX19lbmQpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICsrX19wb3M7DQogICAgICAg ICAgICAgIF9fYyA9ICooKytfX2JlZyk7DQogICAgICAgICAgICAgIGZvciAoc2l6ZV90IF9faTMg PSAwOyBfX2kzIDwgX19ubWF0Y2hlczsgKytfX2kzKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAg ICAgICAgICAgICAgIF9fbmFtZSA9IF9fbmFtZXNbX19tYXRjaGVzW19faTNdXTsNCiAgICAgICAg ICAgICAgICAgIGlmIChfX25hbWVbX19wb3NdICE9IF9fYykNCiAgICAgICAgICAgICAgICAgICAg X19tYXRjaGVzW19faTNdID0gX19tYXRjaGVzWy0tX19ubWF0Y2hlc107DQogICAgICAgICAgICAg ICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIGJyZWFrOw0K ICAgICAgICB9DQoNCiAgICAgIGlmIChfX25tYXRjaGVzID09IDEpDQogICAgICAgIHsNCg0KICAg ICAgICAgIF9fbmFtZSA9IF9fbmFtZXNbX19tYXRjaGVzWzBdXTsNCiAgICAgICAgICBjb25zdCBz aXplX3QgX19sZW4gPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19uYW1lKTsNCiAgICAgICAgICB3 aGlsZSAoX19wb3MgPCBfX2xlbiAmJiBfX2JlZyAhPSBfX2VuZCAmJiBfX25hbWVbX19wb3NdID09 ICpfX2JlZykNCiAgICAgICAgICAgICsrX19iZWcsICsrX19wb3M7DQoNCiAgICAgICAgICBpZiAo X19sZW4gPT0gX19wb3MpDQogICAgICAgICAgICBfX21lbWJlciA9IF9fbWF0Y2hlc1swXTsNCiAg ICAgICAgICBlbHNlDQogICAgICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOw0KICAgICAgICB9 DQogICAgICBlbHNlDQogICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7DQogICAgICBpZiAoIV9f dGVzdHZhbGlkKQ0KICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsNCiAgICB9DQoN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0KICAgIF9Jbkl0 ZXINCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoNCiAgICBkb19nZXRfdGltZShpdGVy X3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sDQogICAgICAgICAg ICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QNCiAgICB7DQog ICAgICBfQ2hhclQgX193Y3NbM107DQogICAgICBjb25zdCBjaGFyKiBfX2NzID0gIiVYIjsNCiAg ICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7DQogICAgICBjdHlwZTxfQ2hhclQ+IGNv bnN0JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7DQogICAgICBf X2N0eXBlLndpZGVuKF9fY3MsIF9fY3MgKyAzLCBfX3djcyk7DQogICAgICBfTV9leHRyYWN0X3Zp YV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwgX193Y3MpOw0KICAgICAg aWYgKF9fYmVnID09IF9fZW5kKQ0KICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0Ow0K ICAgICAgcmV0dXJuIF9fYmVnOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9Jbkl0ZXI+DQogICAgX0luSXRlcg0KICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0lu SXRlcj46Og0KICAgIGRvX2dldF9kYXRlKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5k LCBpb3NfYmFzZSYgX19pbywNCiAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l cnIsIHRtKiBfX3RtKSBjb25zdA0KICAgIHsNCiAgICAgIF9DaGFyVCBfX3djc1szXTsNCiAgICAg IGNvbnN0IGNoYXIqIF9fY3MgPSAiJXgiOw0KICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRs b2MoKTsNCiAgICAgIGN0eXBlPF9DaGFyVD4gY29uc3QmIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5 cGU8X0NoYXJUPiA+KF9fbG9jKTsNCiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIDMs IF9fd2NzKTsNCiAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8s IF9fZXJyLCBfX3RtLCBfX3djcyk7DQogICAgICBpZiAoX19iZWcgPT0gX19lbmQpDQogICAgICAg IF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7DQogICAgICByZXR1cm4gX19iZWc7DQogICAgfQ0K DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICBfSW5J dGVyDQogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6DQogICAgZG9fZ2V0X3dlZWtkYXko aXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAg ICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0DQog ICAgew0KICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxjaGFyX3R5cGU+IF9fdHJhaXRzX3R5cGU7 DQogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOw0KICAgICAgX190aW1lcHVuY3Q8 X0NoYXJUPiBjb25zdCYgX190cCA9IHVzZV9mYWNldDxfX3RpbWVwdW5jdDxfQ2hhclQ+ID4oX19s b2MpOw0KICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2RheXNbN107DQogICAgICBfX3RwLl9NX2Rh eXNfYWJicmV2aWF0ZWQoX19kYXlzKTsNCiAgICAgIGludCBfX3RtcHdkYXk7DQogICAgICBfTV9l eHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtcHdkYXksIF9fZGF5cywgNywgX19lcnIpOw0K DQoNCg0KDQoNCg0KDQogICAgICBpZiAoIV9fZXJyKQ0KICAgICAgICB7DQogICAgICAgICAgc2l6 ZV90IF9fcG9zID0gX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fZGF5c1tfX3RtcHdkYXldKTsNCiAg ICAgICAgICBfX3RwLl9NX2RheXMoX19kYXlzKTsNCiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUq IF9fbmFtZSA9IF9fZGF5c1tfX3RtcHdkYXldOw0KICAgICAgICAgIGlmIChfX25hbWVbX19wb3Nd ID09ICpfX2JlZykNCiAgICAgICAgICAgIHsNCg0KICAgICAgICAgICAgICBjb25zdCBzaXplX3Qg X19sZW4gPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19uYW1lKTsNCiAgICAgICAgICAgICAgd2hp bGUgKF9fcG9zIDwgX19sZW4gJiYgX19iZWcgIT0gX19lbmQNCiAgICAgICAgICAgICAgICAgICAg ICYmIF9fbmFtZVtfX3Bvc10gPT0gKl9fYmVnKQ0KICAgICAgICAgICAgICAgICsrX19iZWcsICsr X19wb3M7DQogICAgICAgICAgICAgIGlmIChfX2xlbiAhPSBfX3BvcykNCiAgICAgICAgICAgICAg ICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBp ZiAoIV9fZXJyKQ0KICAgICAgICAgICAgX190bS0+dG1fd2RheSA9IF9fdG1wd2RheTsNCiAgICAg ICAgfQ0KICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQ0KICAgICAgICBfX2VyciB8PSBpb3NfYmFz ZTo6ZW9mYml0Ow0KICAgICAgcmV0dXJuIF9fYmVnOw0KICAgICB9DQoNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0KICAgIF9Jbkl0ZXINCiAgICB0aW1lX2dl dDxfQ2hhclQsIF9Jbkl0ZXI+OjoNCiAgICBkb19nZXRfbW9udGhuYW1lKGl0ZXJfdHlwZSBfX2Jl ZywgaXRlcl90eXBlIF9fZW5kLA0KICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2UmIF9faW8s IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0DQogICAgew0KICAgICAg dHlwZWRlZiBjaGFyX3RyYWl0czxjaGFyX3R5cGU+IF9fdHJhaXRzX3R5cGU7DQogICAgICBsb2Nh bGUgX19sb2MgPSBfX2lvLmdldGxvYygpOw0KICAgICAgX190aW1lcHVuY3Q8X0NoYXJUPiBjb25z dCYgX190cCA9IHVzZV9mYWNldDxfX3RpbWVwdW5jdDxfQ2hhclQ+ID4oX19sb2MpOw0KICAgICAg Y29uc3QgY2hhcl90eXBlKiBfX21vbnRoc1sxMl07DQogICAgICBfX3RwLl9NX21vbnRoc19hYmJy ZXZpYXRlZChfX21vbnRocyk7DQogICAgICBpbnQgX190bXBtb247DQogICAgICBfTV9leHRyYWN0 X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtcG1vbiwgX19tb250aHMsIDEyLCBfX2Vycik7DQoNCg0K DQoNCg0KDQoNCiAgICAgIGlmICghX19lcnIpDQogICAgICAgIHsNCiAgICAgICAgICBzaXplX3Qg X19wb3MgPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19tb250aHNbX190bXBtb25dKTsNCiAgICAg ICAgICBfX3RwLl9NX21vbnRocyhfX21vbnRocyk7DQogICAgICAgICAgY29uc3QgY2hhcl90eXBl KiBfX25hbWUgPSBfX21vbnRoc1tfX3RtcG1vbl07DQogICAgICAgICAgaWYgKF9fbmFtZVtfX3Bv c10gPT0gKl9fYmVnKQ0KICAgICAgICAgICAgew0KDQogICAgICAgICAgICAgIGNvbnN0IHNpemVf dCBfX2xlbiA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX25hbWUpOw0KICAgICAgICAgICAgICB3 aGlsZSAoX19wb3MgPCBfX2xlbiAmJiBfX2JlZyAhPSBfX2VuZA0KICAgICAgICAgICAgICAgICAg ICAgJiYgX19uYW1lW19fcG9zXSA9PSAqX19iZWcpDQogICAgICAgICAgICAgICAgKytfX2JlZywg KytfX3BvczsNCiAgICAgICAgICAgICAgaWYgKF9fbGVuICE9IF9fcG9zKQ0KICAgICAgICAgICAg ICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAg IGlmICghX19lcnIpDQogICAgICAgICAgICBfX3RtLT50bV9tb24gPSBfX3RtcG1vbjsNCiAgICAg ICAgfQ0KDQogICAgICBpZiAoX19iZWcgPT0gX19lbmQpDQogICAgICAgIF9fZXJyIHw9IGlvc19i YXNlOjplb2ZiaXQ7DQogICAgICByZXR1cm4gX19iZWc7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICBfSW5JdGVyDQogICAgdGltZV9n ZXQ8X0NoYXJULCBfSW5JdGVyPjo6DQogICAgZG9fZ2V0X3llYXIoaXRlcl90eXBlIF9fYmVnLCBp dGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICAgICAgIGlvc19iYXNl Ojppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0DQogICAgew0KICAgICAgbG9jYWxlIF9f bG9jID0gX19pby5nZXRsb2MoKTsNCiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUg PSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsNCg0KICAgICAgY2hhcl90eXBlIF9f YyA9ICpfX2JlZzsNCiAgICAgIHNpemVfdCBfX2kgPSAwOw0KICAgICAgc3RyaW5nIF9fZGlnaXRz Ow0KICAgICAgd2hpbGUgKF9faSA8IDQgJiYgX19iZWcgIT0gX19lbmQgJiYgX19jdHlwZS5pcyhj dHlwZV9iYXNlOjpkaWdpdCwgX19jKSkNCiAgICAgICAgew0KICAgICAgICAgIF9fZGlnaXRzICs9 IF9fY3R5cGUubmFycm93KF9fYywgMCk7DQogICAgICAgICAgX19jID0gKigrK19fYmVnKTsNCiAg ICAgICAgICArK19faTsNCiAgICAgICAgfQ0KICAgICAgaWYgKF9faSA9PSAyIHx8IF9faSA9PSA0 KQ0KICAgICAgICB7DQogICAgICAgICAgbG9uZyBfX2w7DQogICAgICAgICAgX19jb252ZXJ0X3Rv X3YoX19kaWdpdHMuY19zdHIoKSwgX19sLCBfX2VyciwgX1NfY19sb2NhbGUpOw0KICAgICAgICAg IGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpICYmIF9fbCA8PSAyMTQ3NDgzNjQ3KQ0K ICAgICAgICAgICAgew0KICAgICAgICAgICAgICBfX2wgPSBfX2kgPT0gMiA/IF9fbCA6IF9fbCAt IDE5MDA7DQogICAgICAgICAgICAgIF9fdG0tPnRtX3llYXIgPSBzdGF0aWNfY2FzdDxpbnQ+KF9f bCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIGVsc2UNCiAgICAgICAgX19lcnIg fD0gaW9zX2Jhc2U6OmZhaWxiaXQ7DQogICAgICBpZiAoX19iZWcgPT0gX19lbmQpDQogICAgICAg IF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7DQogICAgICByZXR1cm4gX19iZWc7DQogICAgfQ0K DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+DQogICAgX091 dEl0ZXINCiAgICB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6DQogICAgcHV0KGl0ZXJfdHlw ZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUsIGNvbnN0IHRtKiBfX3RtLA0KICAgICAg ICBjb25zdCBfQ2hhclQqIF9fYmVnLCBjb25zdCBfQ2hhclQqIF9fZW5kKSBjb25zdA0KICAgIHsN CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7DQogICAgICBjdHlwZTxfQ2hhclQ+ IGNvbnN0JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7DQogICAg ICB3aGlsZSAoX19iZWcgIT0gX19lbmQpDQogICAgICAgIHsNCiAgICAgICAgICBjaGFyIF9fYyA9 IF9fY3R5cGUubmFycm93KCpfX2JlZywgMCk7DQogICAgICAgICAgKytfX2JlZzsNCiAgICAgICAg ICBpZiAoX19jID09ICclJykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgY2hhciBfX2Zv cm1hdDsNCiAgICAgICAgICAgICAgY2hhciBfX21vZCA9IDA7DQogICAgICAgICAgICAgIHNpemVf dCBfX2xlbiA9IDE7DQogICAgICAgICAgICAgIF9fYyA9IF9fY3R5cGUubmFycm93KCpfX2JlZywg MCk7DQogICAgICAgICAgICAgICsrX19iZWc7DQogICAgICAgICAgICAgIGlmIChfX2MgPT0gJ0Un IHx8IF9fYyA9PSAnTycpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgX19t b2QgPSBfX2M7DQogICAgICAgICAgICAgICAgICBfX2Zvcm1hdCA9IF9fY3R5cGUubmFycm93KCpf X2JlZywgMCk7DQogICAgICAgICAgICAgICAgICArK19fYmVnOw0KICAgICAgICAgICAgICAgIH0N CiAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgIF9fZm9ybWF0ID0gX19jOw0KICAg ICAgICAgICAgICBfX3MgPSB0aGlzLT5kb19wdXQoX19zLCBfX2lvLCBjaGFyX3R5cGUoKSwgX190 bSwgX19mb3JtYXQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21vZCk7DQog ICAgICAgICAgICB9DQogICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAg ICAqX19zID0gX19jOw0KICAgICAgICAgICAgICArK19fczsNCiAgICAgICAgICAgIH0NCiAgICAg ICAgfQ0KICAgICAgcmV0dXJuIF9fczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBfT3V0SXRlcg0KICAgIHRpbWVfcHV0PF9DaGFy VCwgX091dEl0ZXI+OjoNCiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8s IGNoYXJfdHlwZSwgY29uc3QgdG0qIF9fdG0sDQogICAgICAgICAgIGNoYXIgX19mb3JtYXQsIGNo YXIgX19tb2QpIGNvbnN0DQogICAgew0KICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2Mo KTsNCiAgICAgIGN0eXBlPF9DaGFyVD4gY29uc3QmIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8 X0NoYXJUPiA+KF9fbG9jKTsNCiAgICAgIF9fdGltZXB1bmN0PF9DaGFyVD4gY29uc3QmIF9fdHAg PSB1c2VfZmFjZXQ8X190aW1lcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsNCg0KDQoNCiAgICAgIGNv bnN0IHNpemVfdCBfX21heGxlbiA9IDY0Ow0KICAgICAgY2hhcl90eXBlKiBfX3JlcyA9DQogICAg ICAgIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKGNoYXJf dHlwZSkgKiBfX21heGxlbikpOw0KDQoNCg0KDQoNCg0KICAgICAgY2hhcl90eXBlIF9fZm10WzRd Ow0KICAgICAgX19mbXRbMF0gPSBfX2N0eXBlLndpZGVuKCclJyk7DQogICAgICBpZiAoIV9fbW9k KQ0KICAgICAgICB7DQogICAgICAgICAgX19mbXRbMV0gPSBfX2Zvcm1hdDsNCiAgICAgICAgICBf X2ZtdFsyXSA9IGNoYXJfdHlwZSgpOw0KICAgICAgICB9DQogICAgICBlbHNlDQogICAgICAgIHsN CiAgICAgICAgICBfX2ZtdFsxXSA9IF9fbW9kOw0KICAgICAgICAgIF9fZm10WzJdID0gX19mb3Jt YXQ7DQogICAgICAgICAgX19mbXRbM10gPSBjaGFyX3R5cGUoKTsNCiAgICAgICAgfQ0KDQogICAg ICBfX3RwLl9NX3B1dChfX3JlcywgX19tYXhsZW4sIF9fZm10LCBfX3RtKTsNCg0KDQogICAgICBz aXplX3QgX19sZW4gPSBjaGFyX3RyYWl0czxjaGFyX3R5cGU+OjpsZW5ndGgoX19yZXMpOw0KICAg ICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19sZW47ICsrX19pLCArK19fcykNCiAgICAg ICAgKl9fcyA9IF9fcmVzW19faV07DQogICAgICByZXR1cm4gX19zOw0KICAgIH0NCg0KDQoNCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGludA0KICAgIGNvbGxhdGU8X0NoYXJUPjo6 X01fY29tcGFyZShjb25zdCBfQ2hhclQqLCBjb25zdCBfQ2hhclQqKSBjb25zdA0KICAgIHsgcmV0 dXJuIDA7IH0NCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBzaXplX3QNCiAg ICBjb2xsYXRlPF9DaGFyVD46Ol9NX3RyYW5zZm9ybShfQ2hhclQqLCBjb25zdCBfQ2hhclQqLCBz aXplX3QpIGNvbnN0DQogICAgeyByZXR1cm4gMDsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVD4NCiAgICBpbnQNCiAgICBjb2xsYXRlPF9DaGFyVD46Og0KICAgIGRvX2NvbXBhcmUoY29u c3QgX0NoYXJUKiBfX2xvMSwgY29uc3QgX0NoYXJUKiBfX2hpMSwNCiAgICAgICAgICAgICAgIGNv bnN0IF9DaGFyVCogX19sbzIsIGNvbnN0IF9DaGFyVCogX19oaTIpIGNvbnN0DQogICAgew0KICAg ICAgY29uc3Qgc3RyaW5nX3R5cGUgX19vbmUoX19sbzEsIF9faGkxKTsNCiAgICAgIGNvbnN0IHN0 cmluZ190eXBlIF9fdHdvKF9fbG8yLCBfX2hpMik7DQogICAgICByZXR1cm4gX01fY29tcGFyZShf X29uZS5jX3N0cigpLCBfX3R3by5jX3N0cigpKTsNCiAgICB9DQoNCiB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQ+DQogICAgdHlwZW5hbWUgY29sbGF0ZTxfQ2hhclQ+OjpzdHJpbmdfdHlwZQ0KICAg IGNvbGxhdGU8X0NoYXJUPjo6DQogICAgZG9fdHJhbnNmb3JtKGNvbnN0IF9DaGFyVCogX19sbywg Y29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdA0KICAgIHsNCiAgICAgIHNpemVfdCBfX2xlbiA9IChf X2hpIC0gX19sbykgKiAyOw0KDQogICAgICBfQ2hhclQqIF9fYyA9DQogICAgICAgIHN0YXRpY19j YXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX2xlbikpOw0K ICAgICAgc2l6ZV90IF9fcmVzID0gX01fdHJhbnNmb3JtKF9fYywgX19sbywgX19sZW4pOw0KDQog ICAgICBpZiAoX19yZXMgPj0gX19sZW4pDQogICAgICAgIHsNCiAgICAgICAgICBfX2MgPQ0KICAg ICAgICAgICAgc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0No YXJUKSAqIChfX3JlcyArIDEpKSk7DQogICAgICAgICAgX01fdHJhbnNmb3JtKF9fYywgX19sbywg X19yZXMgKyAxKTsNCiAgICAgICAgfQ0KICAgICAgcmV0dXJuIHN0cmluZ190eXBlKF9fYyk7DQog ICAgfQ0KDQogdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGxvbmcNCiAgICBjb2xsYXRl PF9DaGFyVD46Og0KICAgIGRvX2hhc2goY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQq IF9faGkpIGNvbnN0DQogICAgew0KICAgICAgdW5zaWduZWQgbG9uZyBfX3ZhbCA9IDA7DQogICAg ICBmb3IgKDsgX19sbyA8IF9faGk7ICsrX19sbykNCiAgICAgICAgX192YWwgPSAqX19sbyArICgo X192YWwgPDwgNykgfA0KICAgICAgICAgICAgICAgICAgICAgICAoX192YWwgPj4gKG51bWVyaWNf bGltaXRzPHVuc2lnbmVkIGxvbmc+OjpkaWdpdHMgLSA3KSkpOw0KICAgICAgcmV0dXJuIHN0YXRp Y19jYXN0PGxvbmc+KF9fdmFsKTsNCiAgICB9DQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1R2Pg0KICAgIHZvaWQNCiAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX2luLCBfVHYm IF9fb3V0LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsDQogICAgICAgICAgICAgICAgICAgY29u c3QgX19jX2xvY2FsZSYgX19jbG9jLCBpbnQgX19iYXNlID0gMTApOw0KIyAxOTcxICJ0Oi9tc3lz LzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzDQogIHRl bXBsYXRlPHR5cGVuYW1lIF9Udj4NCiAgICBpbnQNCiAgICBfX2NvbnZlcnRfZnJvbV92KGNoYXIq IF9fb3V0LCBjb25zdCBpbnQsIGNvbnN0IGNoYXIqIF9fZm10LCBfVHYgX192LA0KICAgICAgICAg ICAgICAgICAgICAgY29uc3QgX19jX2xvY2FsZSYsIGludCBfX3ByZWMgPSAtMSkNCiAgICB7DQog ICAgICBpbnQgX19yZXQ7DQogICAgICBjb25zdCBjaGFyKiBfX29sZCA9IHNldGxvY2FsZSgwLCAi QyIpOw0KICAgICAgaWYgKF9fcHJlYyA+PSAwKQ0KICAgICAgICBfX3JldCA9IHNwcmludGYoX19v dXQsIF9fZm10LCBfX3ByZWMsIF9fdik7DQogICAgICBlbHNlDQogICAgICAgIF9fcmV0ID0gc3By aW50ZihfX291dCwgX19mbXQsIF9fdik7DQogICAgICBzZXRsb2NhbGUoMCwgX19vbGQpOw0KICAg ICAgcmV0dXJuIF9fcmV0Ow0KICAgIH0NCiMgMTk5NSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVk ZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgdm9pZA0KICAgIF9fcGFkKGlvc19iYXNlJiBf X2lvLCBfQ2hhclQgX19maWxsLCBfQ2hhclQqIF9fbmV3cywgY29uc3QgX0NoYXJUKiBfX29sZHMs DQogICAgICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX25ld2xlbiwgY29uc3Qgc3RyZWFtc2l6ZSBf X29sZGxlbiwNCiAgICAgICAgICBjb25zdCBib29sIF9fbnVtKQ0KICAgIHsNCiAgICAgIHR5cGVk ZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsN CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBlIGludF90eXBlOw0K DQogICAgICBpbnRfdHlwZSBfX3BsZW4gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KF9fbmV3bGVuIC0g X19vbGRsZW4pOw0KICAgICAgY2hhcl90eXBlKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxjaGFyX3R5 cGUqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihjaGFyX3R5cGUpICogX19wbGVuKSk7DQogICAg ICB0cmFpdHNfdHlwZTo6YXNzaWduKF9fcGFkcywgX19wbGVuLCBfX2ZpbGwpOw0KDQogICAgICBj aGFyX3R5cGUqIF9fYmVnOw0KICAgICAgY2hhcl90eXBlKiBfX2VuZDsNCiAgICAgIHNpemVfdCBf X21vZCA9IDA7DQogICAgICBzaXplX3QgX19iZWdsZW47DQogICAgICBpb3NfYmFzZTo6Zm10Zmxh Z3MgX19hZGp1c3QgPSBfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6YWRqdXN0ZmllbGQ7DQoNCiAg ICAgIGlmIChfX2FkanVzdCA9PSBpb3NfYmFzZTo6bGVmdCkNCiAgICAgICAgew0KDQogICAgICAg ICAgX19iZWcgPSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+KF9fb2xkcyk7DQogICAgICAgICAgX19i ZWdsZW4gPSBfX29sZGxlbjsNCiAgICAgICAgICBfX2VuZCA9IF9fcGFkczsNCiAgICAgICAgfQ0K ICAgICAgZWxzZSBpZiAoX19hZGp1c3QgPT0gaW9zX2Jhc2U6OmludGVybmFsICYmIF9fbnVtKQ0K ICAgICAgICB7DQoNCg0KDQogICAgICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsN CiAgICAgICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBl PF9DaGFyVD4gPihfX2xvYyk7DQogICAgICAgICAgY29uc3QgY2hhcl90eXBlIF9fbWludXMgPSBf X2N0eXBlLndpZGVuKCctJyk7DQogICAgICAgICAgY29uc3QgY2hhcl90eXBlIF9fcGx1cyA9IF9f Y3R5cGUud2lkZW4oJysnKTsNCiAgICAgICAgICBib29sIF9fdGVzdHNpZ24gPSBfX29sZHNbMF0g PT0gX19taW51cyB8fCBfX29sZHNbMF0gPT0gX19wbHVzOw0KICAgICAgICAgIGJvb2wgX190ZXN0 aGV4ID0gX19jdHlwZS53aWRlbignMCcpID09IF9fb2xkc1swXQ0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgJiYgKF9fY3R5cGUud2lkZW4oJ3gnKSA9PSBfX29sZHNbMV0NCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8fCBfX2N0eXBlLndpZGVuKCdYJykgPT0gX19vbGRzWzFdKTsN CiAgICAgICAgICBpZiAoX190ZXN0aGV4KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBf X25ld3NbMF0gPSBfX29sZHNbMF07DQogICAgICAgICAgICAgIF9fbmV3c1sxXSA9IF9fb2xkc1sx XTsNCiAgICAgICAgICAgICAgX19tb2QgKz0gMjsNCiAgICAgICAgICAgICAgX19uZXdzICs9IDI7 DQogICAgICAgICAgICAgIF9fYmVnID0gX19wYWRzOw0KICAgICAgICAgICAgICBfX2JlZ2xlbiA9 IF9fcGxlbjsNCiAgICAgICAgICAgICAgX19lbmQgPSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+KF9f b2xkcyArIF9fbW9kKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBlbHNlIGlmIChfX3Rlc3Rz aWduKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBfX25ld3NbMF0gPSBfX29sZHNbMF0g PT0gX19wbHVzID8gX19wbHVzIDogX19taW51czsNCiAgICAgICAgICAgICAgKytfX21vZDsNCiAg ICAgICAgICAgICAgKytfX25ld3M7DQogICAgICAgICAgICAgIF9fYmVnID0gX19wYWRzOw0KICAg ICAgICAgICAgICBfX2JlZ2xlbiA9IF9fcGxlbjsNCiAgICAgICAgICAgICAgX19lbmQgPSBjb25z dF9jYXN0PGNoYXJfdHlwZSo+KF9fb2xkcyArIF9fbW9kKTsNCiAgICAgICAgICAgIH0NCiAgICAg ICAgICBlbHNlDQogICAgICAgICAgICB7DQoNCiAgICAgICAgICAgICAgX19iZWcgPSBfX3BhZHM7 DQogICAgICAgICAgICAgIF9fYmVnbGVuID0gX19wbGVuOw0KICAgICAgICAgICAgICBfX2VuZCA9 IGNvbnN0X2Nhc3Q8Y2hhcl90eXBlKj4oX19vbGRzKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAg fQ0KICAgICAgZWxzZQ0KICAgICAgICB7DQoNCiAgICAgICAgICBfX2JlZyA9IF9fcGFkczsNCiAg ICAgICAgICBfX2JlZ2xlbiA9IF9fcGxlbjsNCiAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8 Y2hhcl90eXBlKj4oX19vbGRzKTsNCiAgICAgICAgfQ0KICAgICAgdHJhaXRzX3R5cGU6OmNvcHko X19uZXdzLCBfX2JlZywgX19iZWdsZW4pOw0KICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19uZXdz ICsgX19iZWdsZW4sIF9fZW5kLCBfX25ld2xlbiAtIF9fYmVnbGVuIC0gX19tb2QpOw0KICAgIH0N Cg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgdm9pZA0KICAgIF9fcGFk KGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBfQ2hhclQqIF9fbmV3cywgY29uc3QgX0No YXJUKiBfX29sZHMsDQogICAgICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX25ld2xlbiwgY29uc3Qg c3RyZWFtc2l6ZSBfX29sZGxlbiwNCiAgICAgICAgICBjb25zdCBib29sIF9fbnVtKQ0KICAgIHsN CiAgICAgIHJldHVybiBfX3BhZDxfQ2hhclQsIGNoYXJfdHJhaXRzPF9DaGFyVD4gPihfX2lvLCBf X2ZpbGwsIF9fbmV3cywgX19vbGRzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fbmV3bGVuLCBfX29sZGxlbiwgX19udW0pOw0KICAgIH0NCiMgMjA5 NCAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRj YyIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgYm9vbA0KICAgIF9fdmVyaWZ5 X2dyb3VwaW5nKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQ+JiBfX2dyb3VwaW5nLA0KICAgICAg ICAgICAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQ+JiBfX2dyb3VwaW5nX3RtcCkNCiAg ICB7DQogICAgICBpbnQgX19pID0gMDsNCiAgICAgIGludCBfX2ogPSAwOw0KICAgICAgY29uc3Qg aW50IF9fbGVuID0gX19ncm91cGluZy5zaXplKCk7DQogICAgICBjb25zdCBpbnQgX19uID0gX19n cm91cGluZ190bXAuc2l6ZSgpOw0KICAgICAgYm9vbCBfX3Rlc3QgPSB0cnVlOw0KDQoNCg0KDQog ICAgICB3aGlsZSAoX190ZXN0ICYmIF9faSA8IF9fbiAtIDEpDQogICAgICAgIGZvciAoX19qID0g MDsgX190ZXN0ICYmIF9faiA8IF9fbGVuICYmIF9faSA8IF9fbiAtIDE7ICsrX19qLCsrX19pKQ0K ICAgICAgICAgIF9fdGVzdCAmPSBfX2dyb3VwaW5nW19fal0gPT0gX19ncm91cGluZ190bXBbX19u IC0gX19pIC0gMV07DQoNCg0KICAgICAgX19qID09IF9fbGVuID8gX19qID0gMCA6IF9fajsNCiAg ICAgIF9fdGVzdCAmPSBfX2dyb3VwaW5nW19fal0gPj0gX19ncm91cGluZ190bXBbX19uIC0gX19p IC0gMV07DQogICAgICByZXR1cm4gX190ZXN0Ow0KICAgIH0NCg0KDQoNCg0KDQoNCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIF9DaGFyVCoNCiAgICBfX2FkZF9ncm91cGluZyhfQ2hh clQqIF9fcywgX0NoYXJUIF9fc2VwLA0KICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9f Z2JlZywgY29uc3QgY2hhciogX19nZW5kLA0KICAgICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFy VCogX19maXJzdCwgY29uc3QgX0NoYXJUKiBfX2xhc3QpDQogICAgew0KICAgICAgaWYgKF9fbGFz dCAtIF9fZmlyc3QgPiAqX19nYmVnKQ0KICAgICAgICB7DQogICAgICAgICAgX19zID0gX19hZGRf Z3JvdXBpbmcoX19zLCBfX3NlcCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19n YmVnICsgMSA9PSBfX2dlbmQgPyBfX2diZWcgOiBfX2diZWcgKyAxKSwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2dlbmQsIF9fZmlyc3QsIF9fbGFzdCAtICpfX2diZWcpOw0KICAg ICAgICAgIF9fZmlyc3QgPSBfX2xhc3QgLSAqX19nYmVnOw0KICAgICAgICAgICpfX3MrKyA9IF9f c2VwOw0KICAgICAgICB9DQogICAgICBkbw0KICAgICAgICAqX19zKysgPSAqX19maXJzdCsrOw0K ICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KTsNCiAgICAgIHJldHVybiBfX3M7DQogICAg fQ0KDQoNCg0KDQogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0PGNoYXIsIGZhbHNl PjsNCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT47DQogIGV4 dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTxjaGFyLCBmYWxzZT47DQogIGV4 dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTxjaGFyLCB0cnVlPjsNCiAgZXh0 ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5X2dldDxjaGFyPjsNCiAgZXh0ZXJuIHRlbXBsYXRlIGNs YXNzIG1vbmV5X3B1dDxjaGFyPjsNCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3Q8 d2NoYXJfdCwgZmFsc2U+Ow0KICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdDx3Y2hh cl90LCB0cnVlPjsNCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lPHdj aGFyX3QsIGZhbHNlPjsNCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1l PHdjaGFyX3QsIHRydWU+Ow0KICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlfZ2V0PHdjaGFy X3Q+Ow0KICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlfcHV0PHdjaGFyX3Q+Ow0KICBleHRl cm4gdGVtcGxhdGUgY2xhc3MgbnVtcHVuY3Q8Y2hhcj47DQogIGV4dGVybiB0ZW1wbGF0ZSBjbGFz cyBudW1wdW5jdF9ieW5hbWU8Y2hhcj47DQogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1fZ2V0 PGNoYXI+Ow0KICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVtX3B1dDxjaGFyPjsNCiAgZXh0ZXJu IHRlbXBsYXRlIGNsYXNzIG51bXB1bmN0PHdjaGFyX3Q+Ow0KICBleHRlcm4gdGVtcGxhdGUgY2xh c3MgbnVtcHVuY3RfYnluYW1lPHdjaGFyX3Q+Ow0KICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVt X2dldDx3Y2hhcl90PjsNCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bV9wdXQ8d2NoYXJfdD47 DQogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBfX3RpbWVwdW5jdDxjaGFyPjsNCiAgZXh0ZXJuIHRl bXBsYXRlIGNsYXNzIHRpbWVfcHV0PGNoYXI+Ow0KICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGlt ZV9wdXRfYnluYW1lPGNoYXI+Ow0KICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9nZXQ8Y2hh cj47DQogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX2dldF9ieW5hbWU8Y2hhcj47DQogIGV4 dGVybiB0ZW1wbGF0ZSBjbGFzcyBfX3RpbWVwdW5jdDx3Y2hhcl90PjsNCiAgZXh0ZXJuIHRlbXBs YXRlIGNsYXNzIHRpbWVfcHV0PHdjaGFyX3Q+Ow0KICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGlt ZV9wdXRfYnluYW1lPHdjaGFyX3Q+Ow0KICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9nZXQ8 d2NoYXJfdD47DQogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX2dldF9ieW5hbWU8d2NoYXJf dD47DQogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtZXNzYWdlczxjaGFyPjsNCiAgZXh0ZXJuIHRl bXBsYXRlIGNsYXNzIG1lc3NhZ2VzX2J5bmFtZTxjaGFyPjsNCiAgZXh0ZXJuIHRlbXBsYXRlIGNs YXNzIG1lc3NhZ2VzPHdjaGFyX3Q+Ow0KICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbWVzc2FnZXNf YnluYW1lPHdjaGFyX3Q+Ow0KICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY3R5cGVfYnluYW1lPGNo YXI+Ow0KICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY3R5cGVfYnluYW1lPHdjaGFyX3Q+Ow0KICBl eHRlcm4gdGVtcGxhdGUgY2xhc3MgY29kZWN2dF9ieW5hbWU8Y2hhciwgY2hhciwgbWJzdGF0ZV90 PjsNCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNvZGVjdnRfYnluYW1lPHdjaGFyX3QsIGNoYXIs IG1ic3RhdGVfdD47DQogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjb2xsYXRlPGNoYXI+Ow0KICBl eHRlcm4gdGVtcGxhdGUgY2xhc3MgY29sbGF0ZV9ieW5hbWU8Y2hhcj47DQogIGV4dGVybiB0ZW1w bGF0ZSBjbGFzcyBjb2xsYXRlPHdjaGFyX3Q+Ow0KICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29s bGF0ZV9ieW5hbWU8d2NoYXJfdD47DQoNCiAgZXh0ZXJuIHRlbXBsYXRlDQogICAgY29uc3QgY29k ZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+Jg0KICAgIHVzZV9mYWNldDxjb2RlY3Z0PGNoYXIs IGNoYXIsIG1ic3RhdGVfdD4gPihjb25zdCBsb2NhbGUmKTsNCg0KICBleHRlcm4gdGVtcGxhdGUN CiAgICBjb25zdCBjb2xsYXRlPGNoYXI+Jg0KICAgIHVzZV9mYWNldDxjb2xsYXRlPGNoYXI+ID4o Y29uc3QgbG9jYWxlJik7DQoNCiAgZXh0ZXJuIHRlbXBsYXRlDQogICAgY29uc3QgbnVtcHVuY3Q8 Y2hhcj4mDQogICAgdXNlX2ZhY2V0PG51bXB1bmN0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7DQoN CiAgZXh0ZXJuIHRlbXBsYXRlDQogICAgY29uc3QgbnVtX3B1dDxjaGFyPiYNCiAgICB1c2VfZmFj ZXQ8bnVtX3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOw0KDQogIGV4dGVybiB0ZW1wbGF0ZQ0K ICAgIGNvbnN0IG51bV9nZXQ8Y2hhcj4mDQogICAgdXNlX2ZhY2V0PG51bV9nZXQ8Y2hhcj4gPihj b25zdCBsb2NhbGUmKTsNCg0KICBleHRlcm4gdGVtcGxhdGUNCiAgICBjb25zdCBtb25leXB1bmN0 PGNoYXIsIHRydWU+Jg0KICAgIHVzZV9mYWNldDxtb25leXB1bmN0PGNoYXIsIHRydWU+ID4oY29u c3QgbG9jYWxlJik7DQoNCiAgZXh0ZXJuIHRlbXBsYXRlDQogICAgY29uc3QgbW9uZXlwdW5jdDxj aGFyLCBmYWxzZT4mDQogICAgdXNlX2ZhY2V0PG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+ID4oY29u c3QgbG9jYWxlJik7DQoNCiAgZXh0ZXJuIHRlbXBsYXRlDQogICAgY29uc3QgbW9uZXlfcHV0PGNo YXI+Jg0KICAgIHVzZV9mYWNldDxtb25leV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsNCg0K ICBleHRlcm4gdGVtcGxhdGUNCiAgICBjb25zdCBtb25leV9nZXQ8Y2hhcj4mDQogICAgdXNlX2Zh Y2V0PG1vbmV5X2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOw0KDQogIGV4dGVybiB0ZW1wbGF0 ZQ0KICAgIGNvbnN0IF9fdGltZXB1bmN0PGNoYXI+Jg0KICAgIHVzZV9mYWNldDxfX3RpbWVwdW5j dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOw0KDQogIGV4dGVybiB0ZW1wbGF0ZQ0KICAgIGNvbnN0 IHRpbWVfcHV0PGNoYXI+Jg0KICAgIHVzZV9mYWNldDx0aW1lX3B1dDxjaGFyPiA+KGNvbnN0IGxv Y2FsZSYpOw0KDQogIGV4dGVybiB0ZW1wbGF0ZQ0KICAgIGNvbnN0IHRpbWVfZ2V0PGNoYXI+Jg0K ICAgIHVzZV9mYWNldDx0aW1lX2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOw0KDQogIGV4dGVy biB0ZW1wbGF0ZQ0KICAgIGNvbnN0IG1lc3NhZ2VzPGNoYXI+Jg0KICAgIHVzZV9mYWNldDxtZXNz YWdlczxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOw0KDQogIGV4dGVybiB0ZW1wbGF0ZQ0KICAgIGNv bnN0IGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90PiYNCiAgICB1c2VfZmFjZXQ8Y29k ZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+ID4obG9jYWxlIGNvbnN0Jik7DQoNCiAgZXh0 ZXJuIHRlbXBsYXRlDQogICAgY29uc3QgY29sbGF0ZTx3Y2hhcl90PiYNCiAgICB1c2VfZmFjZXQ8 Y29sbGF0ZTx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOw0KDQogIGV4dGVybiB0ZW1wbGF0ZQ0K ICAgIGNvbnN0IG51bXB1bmN0PHdjaGFyX3Q+Jg0KICAgIHVzZV9mYWNldDxudW1wdW5jdDx3Y2hh cl90PiA+KGNvbnN0IGxvY2FsZSYpOw0KDQogIGV4dGVybiB0ZW1wbGF0ZQ0KICAgIGNvbnN0IG51 bV9wdXQ8d2NoYXJfdD4mDQogICAgdXNlX2ZhY2V0PG51bV9wdXQ8d2NoYXJfdD4gPihjb25zdCBs b2NhbGUmKTsNCg0KICBleHRlcm4gdGVtcGxhdGUNCiAgICBjb25zdCBudW1fZ2V0PHdjaGFyX3Q+ Jg0KICAgIHVzZV9mYWNldDxudW1fZ2V0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7DQoNCiAg ZXh0ZXJuIHRlbXBsYXRlDQogICAgY29uc3QgbW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVlPiYNCiAg ICB1c2VfZmFjZXQ8bW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVlPiA+KGNvbnN0IGxvY2FsZSYpOw0K DQogIGV4dGVybiB0ZW1wbGF0ZQ0KICAgIGNvbnN0IG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+ Jg0KICAgIHVzZV9mYWNldDxtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPiA+KGNvbnN0IGxvY2Fs ZSYpOw0KDQogIGV4dGVybiB0ZW1wbGF0ZQ0KICAgIGNvbnN0IG1vbmV5X3B1dDx3Y2hhcl90PiYN CiAgICB1c2VfZmFjZXQ8bW9uZXlfcHV0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7DQoNCiAg ZXh0ZXJuIHRlbXBsYXRlDQogICAgY29uc3QgbW9uZXlfZ2V0PHdjaGFyX3Q+Jg0KICAgIHVzZV9m YWNldDxtb25leV9nZXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsNCg0KICBleHRlcm4gdGVt cGxhdGUNCiAgICBjb25zdCBfX3RpbWVwdW5jdDx3Y2hhcl90PiYNCiAgICB1c2VfZmFjZXQ8X190 aW1lcHVuY3Q8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsNCg0KICBleHRlcm4gdGVtcGxhdGUN CiAgICBjb25zdCB0aW1lX3B1dDx3Y2hhcl90PiYNCiAgICB1c2VfZmFjZXQ8dGltZV9wdXQ8d2No YXJfdD4gPihjb25zdCBsb2NhbGUmKTsNCg0KICBleHRlcm4gdGVtcGxhdGUNCiAgICBjb25zdCB0 aW1lX2dldDx3Y2hhcl90PiYNCiAgICB1c2VfZmFjZXQ8dGltZV9nZXQ8d2NoYXJfdD4gPihjb25z dCBsb2NhbGUmKTsNCg0KICBleHRlcm4gdGVtcGxhdGUNCiAgICBjb25zdCBtZXNzYWdlczx3Y2hh cl90PiYNCiAgICB1c2VfZmFjZXQ8bWVzc2FnZXM8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsN Cg0KDQogIGV4dGVybiB0ZW1wbGF0ZQ0KICAgIGJvb2wNCiAgICBoYXNfZmFjZXQ8Y3R5cGU8Y2hh cj4gPihjb25zdCBsb2NhbGUmKTsNCg0KICBleHRlcm4gdGVtcGxhdGUNCiAgICBib29sDQogICAg aGFzX2ZhY2V0PGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PiA+KGNvbnN0IGxvY2FsZSYp Ow0KDQogIGV4dGVybiB0ZW1wbGF0ZQ0KICAgIGJvb2wNCiAgICBoYXNfZmFjZXQ8Y29sbGF0ZTxj aGFyPiA+KGNvbnN0IGxvY2FsZSYpOw0KDQogIGV4dGVybiB0ZW1wbGF0ZQ0KICAgIGJvb2wNCiAg ICBoYXNfZmFjZXQ8bnVtcHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsNCg0KICBleHRlcm4g dGVtcGxhdGUNCiAgICBib29sDQogICAgaGFzX2ZhY2V0PG51bV9wdXQ8Y2hhcj4gPihjb25zdCBs b2NhbGUmKTsNCg0KICBleHRlcm4gdGVtcGxhdGUNCiAgICBib29sDQogICAgaGFzX2ZhY2V0PG51 bV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsNCg0KICBleHRlcm4gdGVtcGxhdGUNCiAgICBi b29sDQogICAgaGFzX2ZhY2V0PG1vbmV5cHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsNCg0K ICBleHRlcm4gdGVtcGxhdGUNCiAgICBib29sDQogICAgaGFzX2ZhY2V0PG1vbmV5X3B1dDxjaGFy PiA+KGNvbnN0IGxvY2FsZSYpOw0KDQogIGV4dGVybiB0ZW1wbGF0ZQ0KICAgIGJvb2wNCiAgICBo YXNfZmFjZXQ8bW9uZXlfZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7DQoNCiAgZXh0ZXJuIHRl bXBsYXRlDQogICAgYm9vbA0KICAgIGhhc19mYWNldDxfX3RpbWVwdW5jdDxjaGFyPiA+KGNvbnN0 IGxvY2FsZSYpOw0KDQogIGV4dGVybiB0ZW1wbGF0ZQ0KICAgIGJvb2wNCiAgICBoYXNfZmFjZXQ8 dGltZV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsNCg0KICBleHRlcm4gdGVtcGxhdGUNCiAg ICBib29sDQogICAgaGFzX2ZhY2V0PHRpbWVfZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7DQoN CiAgZXh0ZXJuIHRlbXBsYXRlDQogICAgYm9vbA0KICAgIGhhc19mYWNldDxtZXNzYWdlczxjaGFy PiA+KGNvbnN0IGxvY2FsZSYpOw0KDQogZXh0ZXJuIHRlbXBsYXRlDQogICAgYm9vbA0KICAgIGhh c19mYWNldDxjdHlwZTx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOw0KDQogIGV4dGVybiB0ZW1w bGF0ZQ0KICAgIGJvb2wNCiAgICBoYXNfZmFjZXQ8Y29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0 YXRlX3Q+ID4oY29uc3QgbG9jYWxlJik7DQoNCiAgZXh0ZXJuIHRlbXBsYXRlDQogICAgYm9vbA0K ICAgIGhhc19mYWNldDxjb2xsYXRlPHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7DQoNCiAgZXh0 ZXJuIHRlbXBsYXRlDQogICAgYm9vbA0KICAgIGhhc19mYWNldDxudW1wdW5jdDx3Y2hhcl90PiA+ KGNvbnN0IGxvY2FsZSYpOw0KDQogIGV4dGVybiB0ZW1wbGF0ZQ0KICAgIGJvb2wNCiAgICBoYXNf ZmFjZXQ8bnVtX3B1dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOw0KDQogIGV4dGVybiB0ZW1w bGF0ZQ0KICAgIGJvb2wNCiAgICBoYXNfZmFjZXQ8bnVtX2dldDx3Y2hhcl90PiA+KGNvbnN0IGxv Y2FsZSYpOw0KDQogIGV4dGVybiB0ZW1wbGF0ZQ0KICAgIGJvb2wNCiAgICBoYXNfZmFjZXQ8bW9u ZXlwdW5jdDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOw0KDQogIGV4dGVybiB0ZW1wbGF0ZQ0K ICAgIGJvb2wNCiAgICBoYXNfZmFjZXQ8bW9uZXlfcHV0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxl Jik7DQoNCiAgZXh0ZXJuIHRlbXBsYXRlDQogICAgYm9vbA0KICAgIGhhc19mYWNldDxtb25leV9n ZXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsNCg0KICBleHRlcm4gdGVtcGxhdGUNCiAgICBi b29sDQogICAgaGFzX2ZhY2V0PF9fdGltZXB1bmN0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7 DQoNCiAgZXh0ZXJuIHRlbXBsYXRlDQogICAgYm9vbA0KICAgIGhhc19mYWNldDx0aW1lX3B1dDx3 Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOw0KDQogIGV4dGVybiB0ZW1wbGF0ZQ0KICAgIGJvb2wN CiAgICBoYXNfZmFjZXQ8dGltZV9nZXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsNCg0KICBl eHRlcm4gdGVtcGxhdGUNCiAgICBib29sDQogICAgaGFzX2ZhY2V0PG1lc3NhZ2VzPHdjaGFyX3Q+ ID4oY29uc3QgbG9jYWxlJik7DQp9DQojIDQ3ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2cr Ky12My9sb2NhbGUiIDIgMw0KIyAzOCAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMv Yml0cy9vc3RyZWFtLnRjYyIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJU LCBfVHJhaXRzPjo6c2VudHJ5OjoNCiAgICBzZW50cnkoYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1Ry YWl0cz4mIF9fb3MpDQogICAgOiBfTV9vayhfX29zLmdvb2QoKSksIF9NX29zKF9fb3MpDQogICAg ew0KDQogICAgICBpZiAoX01fb2sgJiYgX19vcy50aWUoKSkNCiAgICAgICAgX19vcy50aWUoKS0+ Zmx1c2goKTsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19v c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIG9wZXJhdG9yPDwoX19vc3RyZWFtX3R5cGUm ICgqX19wZikoX19vc3RyZWFtX3R5cGUmKSkNCiAgICB7DQogICAgICBzZW50cnkgX19jZXJiKCp0 aGlzKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICBpZiAodHJ1ZSkN CiAgICAgICAgICAgIHsgX19wZigqdGhpcyk7IH0NCiAgICAgICAgICBpZiAoZmFsc2UpDQogICAg ICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk Yml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6 YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgIH0NCiAgICAgICAg fQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ Jg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgb3BlcmF0b3I8PChf X2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSkNCiAgICB7DQogICAgICBzZW50cnkgX19j ZXJiKCp0aGlzKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICBpZiAo dHJ1ZSkNCiAgICAgICAgICAgIHsgX19wZigqdGhpcyk7IH0NCiAgICAgICAgICBpZiAoZmFsc2Up DQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz ZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3Nf YmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgIH0NCiAg ICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U cmFpdHM+Jg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgb3BlcmF0 b3I8PChpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFzZSYpKQ0KICAgIHsNCiAgICAgIHNlbnRyeSBf X2NlcmIoKnRoaXMpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIGlm ICh0cnVlKQ0KICAgICAgICAgICAgeyBfX3BmKCp0aGlzKTsgfQ0KICAgICAgICAgIGlmIChmYWxz ZSkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i YXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlv c19iYXNlOjpiYWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgfQ0K ICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4mDQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8 KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JpbikNCiAgICB7DQogICAgICBzZW50cnkgX19jZXJiKCp0 aGlzKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICBpZiAodHJ1ZSkN CiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3h0cmN0ID0gMDsNCiAg ICAgICAgICAgICAgaWYgKF9fc2JpbikNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAg ICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3Nib3V0ID0gdGhpcy0+cmRidWYoKTsNCiAgICAgICAg ICAgICAgICAgIF9feHRyY3QgPSBfX2NvcHlfc3RyZWFtYnVmcygqdGhpcywgX19zYmluLCBfX3Ni b3V0KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAg ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYg KCFfX3h0cmN0KQ0KICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWls Yml0KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBpZiAoZmFsc2UpDQogICAgICAgICAgICB7 DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAg ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAh PSAwKQ0KICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAg cmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJh c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChib29sIF9fbikNCiAgICB7 DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAg IHsNCiAgICAgICAgICBpZiAodHJ1ZSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaWYg KF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQ0KICAgICAgICAgICAgICAgIGlmIChfTV9mbnVt cHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpDQogICAg ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAg ICAgIH0NCiAgICAgICAgICBpZiAoZmFsc2UpDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAg ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYg KCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAg ICAgICAgIDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0K ICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQog ICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX29zdHJlYW08X0No YXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChsb25nIF9fbikNCiAgICB7DQogICAgICBzZW50cnkg X19jZXJiKCp0aGlzKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICBp ZiAodHJ1ZSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgY2hhcl90eXBlIF9fYyA9IHRo aXMtPmZpbGwoKTsNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhp cy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7DQogICAgICAgICAgICAgIGlmIChfTV9j aGVja19mYWNldChfTV9mbnVtcHV0KSkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAg ICAgICBib29sIF9fYiA9IGZhbHNlOw0KICAgICAgICAgICAgICAgICAgaWYgKChfX2ZtdCAmIGlv c19iYXNlOjpvY3QpIHx8IChfX2ZtdCAmIGlvc19iYXNlOjpoZXgpKQ0KICAgICAgICAgICAgICAg ICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBfX2wgPSBzdGF0aWNf Y2FzdDx1bnNpZ25lZCBsb25nPihfX24pOw0KICAgICAgICAgICAgICAgICAgICAgIF9fYiA9IF9N X2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIF9fYywgX19sKS5mYWlsZWQoKTsNCiAgICAgICAg ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAg ICBfX2IgPSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2MsIF9fbikuZmFpbGVkKCk7 DQogICAgICAgICAgICAgICAgICBpZiAoX19iKQ0KICAgICAgICAgICAgICAgICAgICB0aGlzLT5z ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAg ICB9DQogICAgICAgICAgaWYgKGZhbHNlKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAg ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgo dGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAg ICAgICA7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAg ICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAg IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz46Om9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBfX24pDQogICAgew0KICAgICAg c2VudHJ5IF9fY2VyYigqdGhpcyk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAg ICAgICAgaWYgKHRydWUpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGlmIChfTV9jaGVj a19mYWNldChfTV9mbnVtcHV0KSkNCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0 KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQ0KICAgICAgICAgICAg ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICB9DQog ICAgICAgICAgaWYgKGZhbHNlKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhp cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICA7 DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoj IDMwMSAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9vc3RyZWFtLnRjYyIg Mw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFz aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf VHJhaXRzPjo6b3BlcmF0b3I8PChkb3VibGUgX19uKQ0KICAgIHsNCiAgICAgIHNlbnRyeSBfX2Nl cmIoKnRoaXMpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIGlmICh0 cnVlKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01f Zm51bXB1dCkpDQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRo aXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkNCiAgICAgICAgICAgICAgICAgIHRoaXMt PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGlm IChmYWxzZSkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl KGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMo KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAgOw0KICAgICAgICAg ICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVy YXRvcjw8KGxvbmcgZG91YmxlIF9fbikNCiAgICB7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlz KTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICBpZiAodHJ1ZSkNCiAg ICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQp KQ0KICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlz LT5maWxsKCksIF9fbikuZmFpbGVkKCkpDQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0 ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBpZiAoZmFsc2Up DQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz ZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3Nf YmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgIH0NCiAg ICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U cmFpdHM+Jg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChj b25zdCB2b2lkKiBfX24pDQogICAgew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7DQogICAg ICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgaWYgKHRydWUpDQogICAgICAgICAg ICB7DQogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkNCiAgICAg ICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgp LCBfX24pLmZhaWxlZCgpKQ0KICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh c2U6OmJhZGJpdCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgaWYgKGZhbHNlKQ0KICAgICAg ICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp dCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh ZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICB9DQogICAgICAgIH0N CiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYN CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnB1dChjaGFyX3R5cGUgX19jKQ0K ICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOw0KICAgICAgaWYgKF9fY2VyYikNCiAg ICAgICAgew0KICAgICAgICAgIGludF90eXBlIF9fcHV0ID0gcmRidWYoKS0+c3B1dGMoX19jKTsN CiAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fcHV0LCB0cmFpdHNfdHlw ZTo6ZW9mKCkpKQ0KICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7 DQogICAgICAgIH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJU LCBfVHJhaXRzPiYNCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OndyaXRlKGNv bnN0IF9DaGFyVCogX19zLCBzdHJlYW1zaXplIF9fbikNCiAgICB7DQogICAgICBzZW50cnkgX19j ZXJiKCp0aGlzKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICBzdHJl YW1zaXplIF9fcHV0ID0gdGhpcy0+cmRidWYoKS0+c3B1dG4oX19zLCBfX24pOw0KICAgICAgICAg IGlmICggX19wdXQgIT0gX19uKQ0KICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6 OmJhZGJpdCk7DQogICAgICAgIH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJl YW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46 OmZsdXNoKCkNCiAgICB7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsNCiAgICAgIGlmIChf X2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICBpZiAodGhpcy0+cmRidWYoKSAmJiB0aGlzLT5y ZGJ1ZigpLT5wdWJzeW5jKCkgPT0gLTEpDQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf YmFzZTo6YmFkYml0KTsNCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0K ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgdHlwZW5h bWUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojpwb3NfdHlwZQ0KICAgIGJhc2ljX29z dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6dGVsbHAoKQ0KICAgIHsNCiAgICAgIHBvc190eXBlIF9f cmV0ID0gcG9zX3R5cGUoLTEpOw0KICAgICAgaWYgKCF0aGlzLT5mYWlsKCkpDQogICAgICAgIF9f cmV0ID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29mZigwLCBpb3NfYmFzZTo6Y3VyLCBpb3NfYmFz ZTo6b3V0KTsNCiAgICAgIHJldHVybiBfX3JldDsNCiAgICB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs IF9UcmFpdHM+Jg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2Vla3AocG9z X3R5cGUgX19wb3MpDQogICAgew0KICAgICAgaWYgKCF0aGlzLT5mYWlsKCkpDQogICAgICAgIHsN Cg0KDQogICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrcG9z KF9fcG9zLCBpb3NfYmFzZTo6b3V0KTsNCg0KDQogICAgICAgICAgaWYgKF9fZXJyID09IHBvc190 eXBlKG9mZl90eXBlKC0xKSkpDQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6 ZmFpbGJpdCk7DQoNCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz Pjo6DQogICAgc2Vla3Aob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fZCkNCiAg ICB7DQogICAgICBpZiAoIXRoaXMtPmZhaWwoKSkNCiAgICAgICAgew0KDQoNCiAgICAgICAgICBw b3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYoX19vZmYsIF9fZCwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jh c2U6Om91dCk7DQoNCg0KICAgICAgICAgIGlmIChfX2VyciA9PSBwb3NfdHlwZShvZmZfdHlwZSgt MSkpKQ0KICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOw0KDQog ICAgICAgIH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs IF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ JiBfX291dCwgX0NoYXJUIF9fYykNCiAgICB7DQogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08 X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsNCiAgICAgIHR5cGVuYW1lIF9fb3N0cmVh bV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAg IHsNCiAgICAgICAgICBpZiAodHJ1ZSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgc3Ry ZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOw0KICAgICAgICAgICAgICBfQ2hhclQqIF9fcGFk cyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkg KiAoX193ICsgMSkpKTsNCiAgICAgICAgICAgICAgX19wYWRzWzBdID0gX19jOw0KICAgICAgICAg ICAgICBzdHJlYW1zaXplIF9fbGVuID0gMTsNCiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVu KQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIF9fcGFkKF9fb3V0LCBfX291 dC5maWxsKCksIF9fcGFkcywgJl9fYywgX193LCBfX2xlbiwgZmFsc2UpOw0KICAgICAgICAgICAg ICAgICAgX19sZW4gPSBfX3c7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBfX291 dC53cml0ZShfX3BhZHMsIF9fbGVuKTsNCiAgICAgICAgICAgICAgX19vdXQud2lkdGgoMCk7DQog ICAgICAgICAgICB9DQogICAgICAgICAgaWYgKGZhbHNlKQ0KICAgICAgICAgICAgew0KDQoNCiAg ICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAg ICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAg ICAgICAgICAgICAgICA7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiBf X291dDsNCiAgICB9DQoNCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RyYWl0cz4NCiAgICBiYXNpY19v c3RyZWFtPGNoYXIsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFy LCBfVHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgYmFzaWNf b3N0cmVhbTxjaGFyLCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsNCiAgICAgIHR5cGVuYW1lIF9f b3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsNCiAgICAgIGlmIChfX2NlcmIpDQog ICAgICAgIHsNCiAgICAgICAgICBpZiAodHJ1ZSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAg ICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOw0KICAgICAgICAgICAgICBjaGFyKiBf X3BhZHMgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX3cgKyAxKSk7DQog ICAgICAgICAgICAgIF9fcGFkc1swXSA9IF9fYzsNCiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBf X2xlbiA9IDE7DQogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikNCiAgICAgICAgICAgICAg ICB7DQogICAgICAgICAgICAgICAgICBfX3BhZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMs ICZfX2MsIF9fdywgX19sZW4sIGZhbHNlKTsNCiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193 Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19wYWRzLCBf X2xlbik7DQogICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOw0KICAgICAgICAgICAgfQ0KICAg ICAgICAgIGlmIChmYWxzZSkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAgIF9fb3V0 LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4 Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAgOw0K ICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gX19vdXQ7DQogICAgIH0NCg0K ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNf b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxf Q2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgX0NoYXJUKiBfX3MpDQogICAgew0KICAgICAg dHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7DQog ICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7DQogICAg ICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgaWYgKHRydWUpDQogICAgICAgICAg ICB7DQogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsNCiAgICAg ICAgICAgICAgX0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5f YWxsb2NhKHNpemVvZihfQ2hhclQpICogX193KSk7DQogICAgICAgICAgICAgIHN0cmVhbXNpemUg X19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfVHJhaXRzOjpsZW5ndGgoX19zKSk7DQog ICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikNCiAgICAgICAgICAgICAgICB7DQogICAgICAg ICAgICAgICAgICBfX3BhZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMsIF9fcywgX193LCBf X2xlbiwgZmFsc2UpOw0KICAgICAgICAgICAgICAgICAgX19zID0gX19wYWRzOw0KICAgICAgICAg ICAgICAgICAgX19sZW4gPSBfX3c7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBf X291dC53cml0ZShfX3MsIF9fbGVuKTsNCiAgICAgICAgICAgICAgX19vdXQud2lkdGgoMCk7DQog ICAgICAgICAgICB9DQogICAgICAgICAgaWYgKGZhbHNlKQ0KICAgICAgICAgICAgew0KDQoNCiAg ICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAg ICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAg ICAgICAgICAgICAgICA7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiBf X291dDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcjw8 KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcykN CiAgICB7DQogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29z dHJlYW1fdHlwZTsNCg0KDQoNCiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8Y2hhcj4gX19jdHJh aXRzX3R5cGU7DQoNCiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJi KF9fb3V0KTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICBzaXplX3Qg X19jbGVuID0gX19jdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpOw0KICAgICAgICAgIF9DaGFyVCog X193cyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFy VCkgKiAoX19jbGVuICsgMSkpKTsNCiAgICAgICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kg PD0gX19jbGVuOyArK19faSkNCiAgICAgICAgICAgIF9fd3NbX19pXSA9IF9fb3V0LndpZGVuKF9f c1tfX2ldKTsNCiAgICAgICAgICBfQ2hhclQqIF9fc3RyID0gX193czsNCg0KICAgICAgICAgIGlm ICh0cnVlKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0g c3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX19jbGVuKTsNCiAgICAgICAgICAgICAgc3RyZWFtc2l6 ZSBfX3cgPSBfX291dC53aWR0aCgpOw0KICAgICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0 YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cp KTsNCg0KICAgICAgICAgICAgICBpZiAoX193ID4gX19sZW4pDQogICAgICAgICAgICAgICAgew0K ICAgICAgICAgICAgICAgICAgX19wYWQoX19vdXQsIF9fb3V0LmZpbGwoKSwgX19wYWRzLCBfX3dz LCBfX3csIF9fbGVuLCBmYWxzZSk7DQogICAgICAgICAgICAgICAgICBfX3N0ciA9IF9fcGFkczsN CiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAg ICAgICAgICAgX19vdXQud3JpdGUoX19zdHIsIF9fbGVuKTsNCiAgICAgICAgICAgICAgX19vdXQu d2lkdGgoMCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgaWYgKGZhbHNlKQ0KICAgICAgICAg ICAgew0KDQoNCiAgICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7 DQogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJp dCkgIT0gMCkNCiAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAg ICAgIHJldHVybiBfX291dDsNCiAgICB9DQoNCg0KICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPg0K ICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mDQogICAgb3BlcmF0b3I8PChiYXNpY19v c3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgY2hhciogX19zKQ0KICAgIHsNCiAg ICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsN CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsNCiAg ICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICBpZiAodHJ1ZSkNCiAgICAgICAg ICAgIHsNCiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOw0KICAg ICAgICAgICAgICBjaGFyKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2Fs bG9jYShfX3cpKTsNCiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19jYXN0 PHN0cmVhbXNpemU+KF9UcmFpdHM6Omxlbmd0aChfX3MpKTsNCiAgICAgICAgICAgICAgaWYgKF9f dyA+IF9fbGVuKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIF9fcGFkKF9f b3V0LCBfX291dC5maWxsKCksIF9fcGFkcywgX19zLCBfX3csIF9fbGVuLCBmYWxzZSk7DQogICAg ICAgICAgICAgICAgICBfX3MgPSBfX3BhZHM7DQogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9f dzsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcywgX19s ZW4pOw0KICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsNCiAgICAgICAgICAgIH0NCiAgICAg ICAgICBpZiAoZmFsc2UpDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICBfX291dC5z ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNl cHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIDsNCiAg ICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuIF9fb3V0Ow0KICAgIH0NCg0KDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs bG9jPg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcjw8 KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsDQogICAgICAgICAgICAgICBj b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cikNCiAgICB7 DQogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1f dHlwZTsNCiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0 KTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICBjb25zdCBfQ2hhclQq IF9fcyA9IF9fc3RyLmRhdGEoKTsNCiAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0Lndp ZHRoKCk7DQogICAgICAgICAgX0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihf X2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogX193KSk7DQogICAgICAgICAgc3RyZWFt c2l6ZSBfX2xlbiA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fc3RyLnNpemUoKSk7DQoNCg0K DQogICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAg ICBfX3BhZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMsIF9fcywgX193LCBfX2xlbiwgZmFs c2UpOw0KICAgICAgICAgICAgICBfX3MgPSBfX3BhZHM7DQogICAgICAgICAgICAgIF9fbGVuID0g X193Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgIHN0cmVhbXNpemUgX19yZXMgPSBfX291dC5y ZGJ1ZigpLT5zcHV0bihfX3MsIF9fbGVuKTsNCiAgICAgICAgICBfX291dC53aWR0aCgwKTsNCiAg ICAgICAgICBpZiAoX19yZXMgIT0gX19sZW4pDQogICAgICAgICAgICBfX291dC5zZXRzdGF0ZShp b3NfYmFzZTo6ZmFpbGJpdCk7DQogICAgICAgIH0NCiAgICAgIHJldHVybiBfX291dDsNCiAgICB9 DQoNCg0KDQoNCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX29zdHJlYW08Y2hhcj47DQog IGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBlbmRsKG9zdHJlYW0mKTsNCiAgZXh0ZXJuIHRlbXBs YXRlIG9zdHJlYW0mIGVuZHMob3N0cmVhbSYpOw0KICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYg Zmx1c2gob3N0cmVhbSYpOw0KICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChv c3RyZWFtJiwgY2hhcik7DQogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9z dHJlYW0mLCB1bnNpZ25lZCBjaGFyKTsNCiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJh dG9yPDwob3N0cmVhbSYsIHNpZ25lZCBjaGFyKTsNCiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0m IG9wZXJhdG9yPDwob3N0cmVhbSYsIGNvbnN0IGNoYXIqKTsNCiAgZXh0ZXJuIHRlbXBsYXRlIG9z dHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIGNvbnN0IHVuc2lnbmVkIGNoYXIqKTsNCiAgZXh0 ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIGNvbnN0IHNpZ25lZCBj aGFyKik7DQoNCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX29zdHJlYW08d2NoYXJfdD47 DQogIGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVhbSYgZW5kbCh3b3N0cmVhbSYpOw0KICBleHRlcm4g dGVtcGxhdGUgd29zdHJlYW0mIGVuZHMod29zdHJlYW0mKTsNCiAgZXh0ZXJuIHRlbXBsYXRlIHdv c3RyZWFtJiBmbHVzaCh3b3N0cmVhbSYpOw0KICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIG9w ZXJhdG9yPDwod29zdHJlYW0mLCB3Y2hhcl90KTsNCiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFt JiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgY2hhcik7DQogIGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVh bSYgb3BlcmF0b3I8PCh3b3N0cmVhbSYsIGNvbnN0IHdjaGFyX3QqKTsNCiAgZXh0ZXJuIHRlbXBs YXRlIHdvc3RyZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgY29uc3QgY2hhciopOw0KfQ0KIyAy NzYgInQ6L21zeXMvMS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL29zdHJlYW0iIDIgMw0KIyA0NiAi dDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvaW9zdHJlYW0iIDIgMw0KIyAxICJ0Oi9t c3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9pc3RyZWFtIiAxIDMNCiMgNDMgInQ6L21zeXMv MS4wL21pbmd3L2luY2x1ZGUvZysrLXYzL2lzdHJlYW0iIDMNCg0KDQoNCg0KbmFtZXNwYWNlIHN0 ZA0Kew0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAg ICBjbGFzcyBiYXNpY19pc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgYmFzaWNfaW9zPF9DaGFyVCwg X1RyYWl0cz4NCiAgICB7DQogICAgcHVibGljOg0KDQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFy X3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBl Ow0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsNCiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUgb2ZmX3R5cGU7DQogICAgICB0 eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7DQoNCg0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJl YW1idWY8X0NoYXJULCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBlOw0KICAgICAgdHlwZWRlZiBi YXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiBfX2lvc190eXBlOw0KICAgICAgdHlwZWRlZiBiYXNp Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7DQogICAgICB0eXBlZGVm IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1idWZfaXRlcjsN CiAgICAgIHR5cGVkZWYgbnVtX2dldDxfQ2hhclQsIF9faXN0cmVhbWJ1Zl9pdGVyPiBfX251bWdl dF90eXBlOw0KICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsNCg0KICAg IHByb3RlY3RlZDoNCg0KICAgICAgc3RyZWFtc2l6ZSBfTV9nY291bnQ7DQoNCiAgICBwdWJsaWM6 DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICBiYXNpY19pc3RyZWFtKF9fc3RyZWFtYnVmX3R5cGUq IF9fc2IpDQogICAgICB7DQogICAgICAgIHRoaXMtPmluaXQoX19zYik7DQogICAgICAgIF9NX2dj b3VudCA9IHN0cmVhbXNpemUoMCk7DQogICAgICB9DQoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5i YXNpY19pc3RyZWFtKCkNCiAgICAgIHsgX01fZ2NvdW50ID0gc3RyZWFtc2l6ZSgwKTsgfQ0KDQoN CiAgICAgIGNsYXNzIHNlbnRyeTsNCiAgICAgIGZyaWVuZCBjbGFzcyBzZW50cnk7DQoNCg0KDQog ICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPj4oX19pc3RyZWFtX3R5cGUmICgq X19wZikoX19pc3RyZWFtX3R5cGUmKSk7DQoNCiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAg b3BlcmF0b3I+PihfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSk7DQoNCiAgICAgIF9f aXN0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I+Pihpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFz ZSYpKTsNCg0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPj4oYm9vbCYg X19uKTsNCg0KICAgICAgX19pc3RyZWFtX3R5cGUmDQogICAgICBvcGVyYXRvcj4+KHNob3J0JiBf X24pOw0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPj4odW5zaWduZWQg c2hvcnQmIF9fbik7DQoNCiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I+Pihp bnQmIF9fbik7DQoNCiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I+Pih1bnNp Z25lZCBpbnQmIF9fbik7DQoNCiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I+ Pihsb25nJiBfX24pOw0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPj4o dW5zaWduZWQgbG9uZyYgX19uKTsNCiMgMTMxICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2cr Ky12My9pc3RyZWFtIiAzDQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPj4o ZmxvYXQmIF9fZik7DQoNCiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I+Pihk b3VibGUmIF9fZik7DQoNCiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I+Pihs b25nIGRvdWJsZSYgX19mKTsNCg0KICAgICAgX19pc3RyZWFtX3R5cGUmDQogICAgICBvcGVyYXRv cj4+KHZvaWQqJiBfX3ApOw0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9y Pj4oX19zdHJlYW1idWZfdHlwZSogX19zYik7DQoNCg0KICAgICAgaW5saW5lIHN0cmVhbXNpemUN CiAgICAgIGdjb3VudCh2b2lkKSBjb25zdA0KICAgICAgeyByZXR1cm4gX01fZ2NvdW50OyB9DQoN CiAgICAgIGludF90eXBlDQogICAgICBnZXQodm9pZCk7DQoNCiAgICAgIF9faXN0cmVhbV90eXBl Jg0KICAgICAgZ2V0KGNoYXJfdHlwZSYgX19jKTsNCg0KICAgICAgX19pc3RyZWFtX3R5cGUmDQog ICAgICBnZXQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uLCBjaGFyX3R5cGUgX19kZWxp bSk7DQoNCiAgICAgIGlubGluZSBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIGdldChjaGFyX3R5cGUq IF9fcywgc3RyZWFtc2l6ZSBfX24pDQogICAgICB7IHJldHVybiB0aGlzLT5nZXQoX19zLCBfX24s IHRoaXMtPndpZGVuKCdcbicpKTsgfQ0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIGdl dChfX3N0cmVhbWJ1Zl90eXBlJiBfX3NiLCBjaGFyX3R5cGUgX19kZWxpbSk7DQoNCiAgICAgIGlu bGluZSBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIGdldChfX3N0cmVhbWJ1Zl90eXBlJiBfX3NiKQ0K ICAgICAgeyByZXR1cm4gdGhpcy0+Z2V0KF9fc2IsIHRoaXMtPndpZGVuKCdcbicpKTsgfQ0KDQog ICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIGdldGxpbmUoY2hhcl90eXBlKiBfX3MsIHN0cmVh bXNpemUgX19uLCBjaGFyX3R5cGUgX19kZWxpbSk7DQoNCiAgICAgIGlubGluZSBfX2lzdHJlYW1f dHlwZSYNCiAgICAgIGdldGxpbmUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQ0KICAg ICAgeyByZXR1cm4gdGhpcy0+Z2V0bGluZShfX3MsIF9fbiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9 DQoNCiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAgaWdub3JlKHN0cmVhbXNpemUgX19uID0g MSwgaW50X3R5cGUgX19kZWxpbSA9IHRyYWl0c190eXBlOjplb2YoKSk7DQoNCiAgICAgIGludF90 eXBlDQogICAgICBwZWVrKHZvaWQpOw0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIHJl YWQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsNCg0KICAgICAgc3RyZWFtc2l6ZQ0K ICAgICAgcmVhZHNvbWUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsNCg0KICAgICAg X19pc3RyZWFtX3R5cGUmDQogICAgICBwdXRiYWNrKGNoYXJfdHlwZSBfX2MpOw0KDQogICAgICBf X2lzdHJlYW1fdHlwZSYNCiAgICAgIHVuZ2V0KHZvaWQpOw0KDQogICAgICBpbnQNCiAgICAgIHN5 bmModm9pZCk7DQoNCiAgICAgIHBvc190eXBlDQogICAgICB0ZWxsZyh2b2lkKTsNCg0KICAgICAg X19pc3RyZWFtX3R5cGUmDQogICAgICBzZWVrZyhwb3NfdHlwZSk7DQoNCiAgICAgIF9faXN0cmVh bV90eXBlJg0KICAgICAgc2Vla2cob2ZmX3R5cGUsIGlvc19iYXNlOjpzZWVrZGlyKTsNCiAgICB9 Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBj bGFzcyBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeQ0KICAgIHsNCiAgICBw dWJsaWM6DQogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7DQogICAgICB0eXBlZGVm IGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IF9fc3RyZWFtYnVmX3R5cGU7DQogICAg ICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsN CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fY3R5cGVfdHlwZSBfX2N0 eXBlX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIF9faW50 X3R5cGU7DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICBzZW50cnkoYmFzaWNfaXN0cmVhbTxfQ2hh clQsIF9UcmFpdHM+JiBfX2lzLCBib29sIF9fbm9za2lwd3MgPSBmYWxzZSk7DQoNCiAgICAgIG9w ZXJhdG9yIGJvb2woKSB7IHJldHVybiBfTV9vazsgfQ0KDQogICAgcHJpdmF0ZToNCiAgICAgIGJv b2wgX01fb2s7DQogICAgfTsNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgb3Bl cmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCYgX19j KTsNCg0KICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08Y2hhciwg X1RyYWl0cz4mDQogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBf X2luLCB1bnNpZ25lZCBjaGFyJiBfX2MpDQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVpbnRlcnBy ZXRfY2FzdDxjaGFyJj4oX19jKSk7IH0NCg0KICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPg0KICAg IGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mDQogICAgb3BlcmF0b3I+PihiYXNpY19pc3Ry ZWFtPGNoYXIsIF9UcmFpdHM+JiBfX2luLCBzaWduZWQgY2hhciYgX19jKQ0KICAgIHsgcmV0dXJu IChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhciY+KF9fYykpOyB9DQoNCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0No YXJULCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh aXRzPiYgX19pbiwgX0NoYXJUKiBfX3MpOw0KDQogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+DQog ICAgYmFzaWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0 cmVhbTxjaGFyLF9UcmFpdHM+JiBfX2luLCB1bnNpZ25lZCBjaGFyKiBfX3MpDQogICAgeyByZXR1 cm4gKF9faW4gPj4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX19zKSk7IH0NCg0KICB0ZW1wbGF0 ZTxjbGFzcyBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08Y2hhcixfVHJhaXRzPiYNCiAgICBv cGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhcixfVHJhaXRzPiYgX19pbiwgc2lnbmVkIGNoYXIq IF9fcykNCiAgICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXIqPihfX3Mp KTsgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0K ICAgIGNsYXNzIGJhc2ljX2lvc3RyZWFtDQogICAgOiBwdWJsaWMgYmFzaWNfaXN0cmVhbTxfQ2hh clQsIF9UcmFpdHM+LA0KICAgICAgcHVibGljIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz Pg0KICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hh clQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7DQoNCiAgICAgIGV4cGxpY2l0DQogICAg ICBiYXNpY19pb3N0cmVhbShiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikN CiAgICAgIDogX19pc3RyZWFtX3R5cGUoX19zYiksIF9fb3N0cmVhbV90eXBlKF9fc2IpDQogICAg ICB7IH0NCg0KICAgICAgdmlydHVhbA0KICAgICAgfmJhc2ljX2lvc3RyZWFtKCkgeyB9DQogICAg fTsNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAg ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgd3MoYmFzaWNfaXN0cmVhbTxf Q2hhclQsIF9UcmFpdHM+JiBfX2lzKTsNCn0NCg0KDQoNCg0KDQojIDEgInQ6L21zeXMvMS4wL21p bmd3L2luY2x1ZGUvZysrLXYzL2JpdHMvaXN0cmVhbS50Y2MiIDEgMw0KIyAzNiAidDovbXN5cy8x LjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYml0cy9pc3RyZWFtLnRjYyIgMw0KDQoNCg0KDQpuYW1l c3BhY2Ugc3RkDQp7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeTo6DQogICAgc2Vu dHJ5KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgYm9vbCBfX25vc2tpcHdz KQ0KICAgIHsNCiAgICAgIGlmIChfX2luLmdvb2QoKSkNCiAgICAgICAgew0KICAgICAgICAgIGlm IChfX2luLnRpZSgpKQ0KICAgICAgICAgICAgX19pbi50aWUoKS0+Zmx1c2goKTsNCiAgICAgICAg ICBpZiAoIV9fbm9za2lwd3MgJiYgKF9faW4uZmxhZ3MoKSAmIGlvc19iYXNlOjpza2lwd3MpKQ0K ICAgICAgICAgICAgew0KICAgICAgICAgICAgICBjb25zdCBfX2ludF90eXBlIF9fZW9mID0gdHJh aXRzX3R5cGU6OmVvZigpOw0KICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0g X19pbi5yZGJ1ZigpOw0KICAgICAgICAgICAgICBfX2ludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRj KCk7DQoNCiAgICAgICAgICAgICAgaWYgKF9faW4uX01fY2hlY2tfZmFjZXQoX19pbi5fTV9mY3R5 cGUpKQ0KICAgICAgICAgICAgICAgIHdoaWxlIChfX2MgIT0gX19lb2YNCiAgICAgICAgICAgICAg ICAgICAgICAgJiYgX19pbi5fTV9mY3R5cGUtPmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpKQ0K ICAgICAgICAgICAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7DQoNCg0KDQogICAgICAgICAg ICAgIGlmIChfX2MgPT0gX19lb2YpDQogICAgICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3Nf YmFzZTo6ZW9mYml0KTsNCg0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgIGlmIChf X2luLmdvb2QoKSkNCiAgICAgICAgX01fb2sgPSB0cnVlOw0KICAgICAgZWxzZQ0KICAgICAgICB7 DQogICAgICAgICAgX01fb2sgPSBmYWxzZTsNCiAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19i YXNlOjpmYWlsYml0KTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp dHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgb3BlcmF0b3I+ PihfX2lzdHJlYW1fdHlwZSYgKCpfX3BmKShfX2lzdHJlYW1fdHlwZSYpKQ0KICAgIHsNCiAgICAg IF9fcGYoKnRoaXMpOw0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hh clQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAg b3BlcmF0b3I+PihfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSkNCiAgICB7DQogICAg ICBfX3BmKCp0aGlzKTsNCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0No YXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Og0KICAg IG9wZXJhdG9yPj4oaW9zX2Jhc2UmICgqX19wZikoaW9zX2Jhc2UmKSkNCiAgICB7DQogICAgICBf X3BmKCp0aGlzKTsNCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPiYNCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIG9w ZXJhdG9yPj4oYm9vbCYgX19uKQ0KICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZh bHNlKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICBpZiAodHJ1ZSkN CiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBp b3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7DQogICAgICAgICAgICAgIGlmIChf TV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkNCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5n ZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsNCiAgICAgICAgICAgICAgdGhpcy0+c2V0 c3RhdGUoX19lcnIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGlmIChmYWxzZSkNCiAgICAg ICAgICAgIHsNCg0KDQogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi aXQpOw0KICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi YWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9 DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBvcGVyYXRvcj4+KHNo b3J0JiBfX24pDQogICAgew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOw0KICAg ICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIGlmICh0cnVlKQ0KICAgICAgICAg ICAgew0KICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpp b3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsNCiAgICAgICAgICAgICAgbG9uZyBfX2w7DQogICAg ICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkNCiAgICAgICAgICAgICAg ICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19sKTsNCg0KDQogICAg ICAgICAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpDQogICAgICAgICAgICAg ICAgICAmJiAobnVtZXJpY19saW1pdHM8c2hvcnQ+OjptaW4oKSA8PSBfX2wNCiAgICAgICAgICAg ICAgICAgICAgICAmJiBfX2wgPD0gbnVtZXJpY19saW1pdHM8c2hvcnQ+OjptYXgoKSkpDQogICAg ICAgICAgICAgICAgX19uID0gX19sOw0KICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAg ICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7DQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0 c3RhdGUoX19lcnIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGlmIChmYWxzZSkNCiAgICAg ICAgICAgIHsNCg0KDQogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi aXQpOw0KICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi YWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9 DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBvcGVyYXRvcj4+KHVu c2lnbmVkIHNob3J0JiBfX24pDQogICAgew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFs c2UpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIGlmICh0cnVlKQ0K ICAgICAgICAgICAgew0KICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlv c19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsNCiAgICAgICAgICAgICAgaWYgKF9N X2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQ0KICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdl dCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOw0KICAgICAgICAgICAgICB0aGlzLT5zZXRz dGF0ZShfX2Vycik7DQogICAgICAgICAgICB9DQogICAgICAgICAgaWYgKGZhbHNlKQ0KICAgICAg ICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp dCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh ZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICB9DQogICAgICAgIH0N CiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYN CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIG9wZXJhdG9yPj4oaW50 JiBfX24pDQogICAgew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOw0KICAgICAg aWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIGlmICh0cnVlKQ0KICAgICAgICAgICAg ew0KICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0 YXRlKGlvc19iYXNlOjpnb29kYml0KTsNCiAgICAgICAgICAgICAgbG9uZyBfX2w7DQogICAgICAg ICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkNCiAgICAgICAgICAgICAgICBf TV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19sKTsNCg0KDQogICAgICAg ICAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpDQogICAgICAgICAgICAgICAg ICAmJiAobnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkgPD0gX19sDQogICAgICAgICAgICAgICAg ICAgICAgJiYgX19sIDw9IG51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSkNCiAgICAgICAgICAg ICAgICBfX24gPSBfX2w7DQogICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICBfX2Vy ciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShf X2Vycik7DQogICAgICAgICAgICB9DQogICAgICAgICAgaWYgKGZhbHNlKQ0KICAgICAgICAgICAg ew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQog ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg IT0gMCkNCiAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAg IHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBi YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIG9wZXJhdG9yPj4odW5zaWduZWQg aW50JiBfX24pDQogICAgew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOw0KICAg ICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIGlmICh0cnVlKQ0KICAgICAgICAg ICAgew0KICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpp b3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsNCiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2Zh Y2V0KF9NX2ZudW1nZXQpKQ0KICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywg MCwgKnRoaXMsIF9fZXJyLCBfX24pOw0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vy cik7DQogICAgICAgICAgICB9DQogICAgICAgICAgaWYgKGZhbHNlKQ0KICAgICAgICAgICAgew0K DQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAg ICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g MCkNCiAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJl dHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNp Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIG9wZXJhdG9yPj4obG9uZyYgX19uKQ0K ICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsNCiAgICAgIGlmIChfX2Nl cmIpDQogICAgICAgIHsNCiAgICAgICAgICBpZiAodHJ1ZSkNCiAgICAgICAgICAgIHsNCiAgICAg ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3Nf YmFzZTo6Z29vZGJpdCk7DQogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVt Z2V0KSkNCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBf X2VyciwgX19uKTsNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOw0KICAgICAg ICAgICAgfQ0KICAgICAgICAgIGlmIChmYWxzZSkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAg ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBp ZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAgICAg ICAgICAgICAgOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7 DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4N CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxf Q2hhclQsIF9UcmFpdHM+OjoNCiAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcmIF9fbikNCiAg ICB7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7DQogICAgICBpZiAoX19jZXJi KQ0KICAgICAgICB7DQogICAgICAgICAgaWYgKHRydWUpDQogICAgICAgICAgICB7DQogICAgICAg ICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jh c2U6Omdvb2RiaXQpOw0KICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdl dCkpDQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19l cnIsIF9fbik7DQogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsNCiAgICAgICAg ICAgIH0NCiAgICAgICAgICBpZiAoZmFsc2UpDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAg ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYg KCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAg ICAgICAgIDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0K ICAgIH0NCiMgMzcwICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12My9iaXRzL2lzdHJl YW0udGNjIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4N CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxf Q2hhclQsIF9UcmFpdHM+OjoNCiAgICBvcGVyYXRvcj4+KGZsb2F0JiBfX24pDQogICAgew0KICAg ICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAg ICAgew0KICAgICAgICAgIGlmICh0cnVlKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBp b3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29k Yml0KTsNCiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQ0KICAg ICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24p Ow0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7DQogICAgICAgICAgICB9DQog ICAgICAgICAgaWYgKGZhbHNlKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhp cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICA7 DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2lj X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz46Og0KICAgIG9wZXJhdG9yPj4oZG91YmxlJiBfX24pDQogICAgew0KICAgICAgc2VudHJ5 IF9fY2VyYigqdGhpcywgZmFsc2UpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAg ICAgICAgIGlmICh0cnVlKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBpb3NfYmFzZTo6 aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsNCiAg ICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQ0KICAgICAgICAgICAg ICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOw0KICAgICAg ICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7DQogICAgICAgICAgICB9DQogICAgICAgICAg aWYgKGZhbHNlKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh dGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9u cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICA7DQogICAgICAg ICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Og0K ICAgIG9wZXJhdG9yPj4obG9uZyBkb3VibGUmIF9fbikNCiAgICB7DQogICAgICBzZW50cnkgX19j ZXJiKCp0aGlzLCBmYWxzZSk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAgICAg ICAgaWYgKHRydWUpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0 YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOw0KICAgICAg ICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpDQogICAgICAgICAgICAgICAg X01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7DQogICAgICAgICAg ICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBpZiAo ZmFsc2UpDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp b3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAg IH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hh clQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAg b3BlcmF0b3I+Pih2b2lkKiYgX19uKQ0KICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMs IGZhbHNlKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICBpZiAodHJ1 ZSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIg PSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7DQogICAgICAgICAgICAgIGlm IChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkNCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0 LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsNCiAgICAgICAgICAgICAgdGhpcy0+ c2V0c3RhdGUoX19lcnIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGlmIChmYWxzZSkNCiAg ICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi YWRiaXQpOw0KICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNl OjpiYWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgfQ0KICAgICAg ICB9DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBvcGVyYXRvcj4+ KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JvdXQpDQogICAgew0KICAgICAgIHNlbnRyeSBfX2NlcmIo KnRoaXMsIGZhbHNlKTsNCiAgICAgICBpZiAoX19jZXJiKQ0KICAgICAgICAgew0KICAgICAgICAg ICBpZiAodHJ1ZSkNCiAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICBzdHJlYW1zaXplIF9f eHRyY3QgPSAwOw0KICAgICAgICAgICAgICAgaWYgKF9fc2JvdXQpDQogICAgICAgICAgICAgICAg IHsNCiAgICAgICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4gPSB0aGlzLT5y ZGJ1ZigpOw0KICAgICAgICAgICAgICAgICAgIF9feHRyY3QgPSBfX2NvcHlfc3RyZWFtYnVmcygq dGhpcywgX19zYmluLCBfX3Nib3V0KTsNCiAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg ICAgaWYgKCFfX3Nib3V0IHx8ICFfX3h0cmN0KQ0KICAgICAgICAgICAgICAgICB0aGlzLT5zZXRz dGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7DQogICAgICAgICAgICAgfQ0KICAgICAgICAgICBpZiAo ZmFsc2UpDQogICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl KGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25z KCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgICA7DQogICAgICAg ICAgICAgfQ0KICAgICAgICAgfQ0KICAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIHR5cGVuYW1lIGJh c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUNCiAgICBiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIGdldCh2b2lkKQ0KICAgIHsNCiAgICAgIGNvbnN0IGlu dF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOw0KICAgICAgaW50X3R5cGUgX19jID0g X19lb2Y7DQogICAgICBfTV9nY291bnQgPSAwOw0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywg dHJ1ZSk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgaWYgKHRydWUp DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIF9fYyA9IHRoaXMtPnJkYnVmKCktPnNidW1w YygpOw0KDQogICAgICAgICAgICAgIGlmIChfX2MgIT0gX19lb2YpDQogICAgICAgICAgICAgICAg X01fZ2NvdW50ID0gMTsNCiAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgIHRoaXMt PnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQgfCBpb3NfYmFzZTo6ZmFpbGJpdCk7DQogICAgICAg ICAgICB9DQogICAgICAgICAgaWYgKGZhbHNlKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAg ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlm ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAg ICAgICAgICA7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiBfX2M7DQog ICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAg ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hh clQsIF9UcmFpdHM+OjoNCiAgICBnZXQoY2hhcl90eXBlJiBfX2MpDQogICAgew0KICAgICAgX01f Z2NvdW50ID0gMDsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOw0KICAgICAgaWYg KF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIGlmICh0cnVlKQ0KICAgICAgICAgICAgew0K ICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsN CiAgICAgICAgICAgICAgaW50X3R5cGUgX19idWZ2YWwgPSB0aGlzLT5yZGJ1ZigpLT5zYnVtcGMo KTsNCg0KICAgICAgICAgICAgICBpZiAoX19idWZ2YWwgIT0gX19lb2YpDQogICAgICAgICAgICAg ICAgew0KICAgICAgICAgICAgICAgICAgX01fZ2NvdW50ID0gMTsNCiAgICAgICAgICAgICAgICAg IF9fYyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19idWZ2YWwpOw0KICAgICAgICAgICAg ICAgIH0NCiAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl KGlvc19iYXNlOjplb2ZiaXQgfCBpb3NfYmFzZTo6ZmFpbGJpdCk7DQogICAgICAgICAgICB9DQog ICAgICAgICAgaWYgKGZhbHNlKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhp cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICA7 DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoN CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2lj X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz46Og0KICAgIGdldChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlw ZSBfX2RlbGltKQ0KICAgIHsNCiAgICAgIF9NX2djb3VudCA9IDA7DQogICAgICBzZW50cnkgX19j ZXJiKCp0aGlzLCB0cnVlKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAg ICBpZiAodHJ1ZSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUg X19pZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7DQogICAgICAgICAg ICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOw0KICAgICAgICAg ICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsNCiAgICAgICAgICAg ICAgaW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsNCg0KICAgICAgICAgICAgICB3aGlsZSAo X01fZ2NvdW50ICsgMSA8IF9fbiAmJiBfX2MgIT0gX19lb2YgJiYgX19jICE9IF9faWRlbGltKQ0K ICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICpfX3MrKyA9IHRyYWl0c190eXBl Ojp0b19jaGFyX3R5cGUoX19jKTsNCiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0 YygpOw0KICAgICAgICAgICAgICAgICAgKytfTV9nY291bnQ7DQogICAgICAgICAgICAgICAgfQ0K ICAgICAgICAgICAgICBpZiAoX19jID09IF9fZW9mKQ0KICAgICAgICAgICAgICAgIHRoaXMtPnNl dHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGlmIChm YWxzZSkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv c19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAm IGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAg fQ0KICAgICAgICB9DQogICAgICAqX19zID0gY2hhcl90eXBlKCk7DQogICAgICBpZiAoIV9NX2dj b3VudCkNCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAgICAg cmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJh c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUm IF9fc2IsIGNoYXJfdHlwZSBfX2RlbGltKQ0KICAgIHsNCiAgICAgIF9NX2djb3VudCA9IDA7DQog ICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAg ICAgIHsNCiAgICAgICAgICBpZiAodHJ1ZSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAg Y29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxp bSk7DQogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVv ZigpOw0KICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3RoaXNfc2IgPSB0aGlzLT5y ZGJ1ZigpOw0KICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3RoaXNfc2ItPnNnZXRjKCk7 DQoNCiAgICAgICAgICAgICAgd2hpbGUgKF9fYyAhPSBfX2VvZiAmJiBfX2MgIT0gX19pZGVsaW0N CiAgICAgICAgICAgICAgICAgICAgICYmIChfX3NiLnNwdXRjKHRyYWl0c190eXBlOjp0b19jaGFy X3R5cGUoX19jKSkgIT0gX19lb2YpKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAg ICAgICsrX01fZ2NvdW50Ow0KICAgICAgICAgICAgICAgICAgX19jID0gX190aGlzX3NiLT5zbmV4 dGMoKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGlmIChfX2MgPT0gX19lb2Yp DQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7DQogICAg ICAgICAgICB9DQogICAgICAgICAgaWYgKGZhbHNlKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAg ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAg IGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAg ICAgICAgICAgICA7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIGlmICghX01fZ2Nv dW50KQ0KICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7DQogICAgICBy ZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFz aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBnZXRsaW5lKGNoYXJfdHlwZSogX19z LCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pDQogICAgew0KICAgICAgX01fZ2Nv dW50ID0gMDsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOw0KICAgICAgaWYgKF9f Y2VyYikNCiAgICAgICAgew0KICAgICAgICAgIGlmICh0cnVlKQ0KICAgICAgICAgICAgew0KICAg ICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2lkZWxpbSA9IHRyYWl0c190eXBlOjp0b19pbnRf dHlwZShfX2RlbGltKTsNCiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFp dHNfdHlwZTo6ZW9mKCk7DQogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0 aGlzLT5yZGJ1ZigpOw0KICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0Yygp Ow0KDQogICAgICAgICAgICAgIHdoaWxlIChfTV9nY291bnQgKyAxIDwgX19uICYmIF9fYyAhPSBf X2VvZiAmJiBfX2MgIT0gX19pZGVsaW0pDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAg ICAgICAgKl9fcysrID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOw0KICAgICAgICAg ICAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7DQogICAgICAgICAgICAgICAgICArK19NX2dj b3VudDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGlmIChfX2MgPT0gX19lb2Yp DQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7DQogICAg ICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICBpZiAo X19jID09IF9faWRlbGltKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAg ICAgICAgX19zYi0+c25leHRjKCk7DQogICAgICAgICAgICAgICAgICAgICAgKytfTV9nY291bnQ7 DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAg ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAgICAgICAg ICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICBpZiAoZmFsc2UpDQogICAgICAgICAg ICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsN CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0 KSAhPSAwKQ0KICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAg ICAgKl9fcyA9IGNoYXJfdHlwZSgpOw0KICAgICAgaWYgKCFfTV9nY291bnQpDQogICAgICAgIHRo aXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsNCiAgICAgIHJldHVybiAqdGhpczsNCiAg ICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAg IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz46Og0KICAgIGlnbm9yZShzdHJlYW1zaXplIF9fbiwgaW50X3R5cGUgX19kZWxp bSkNCiAgICB7DQogICAgICBfTV9nY291bnQgPSAwOw0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhp cywgdHJ1ZSk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgaWYgKHRy dWUpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0g dHJhaXRzX3R5cGU6OmVvZigpOw0KICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3Ni ID0gdGhpcy0+cmRidWYoKTsNCiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX19zYi0+c2dl dGMoKTsNCg0KICAgICAgICAgICAgICBfX24gPSBtaW4oX19uLCBudW1lcmljX2xpbWl0czxzdHJl YW1zaXplPjo6bWF4KCkpOw0KICAgICAgICAgICAgICB3aGlsZSAoX01fZ2NvdW50IDwgX19uICYm IF9fYyAhPV9fZW9mICYmIF9fYyAhPSBfX2RlbGltKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAg ICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOw0KICAgICAgICAgICAgICAgICAgKytf TV9nY291bnQ7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBpZiAoX19jID09IF9f ZW9mKQ0KICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOw0K ICAgICAgICAgICAgICBlbHNlIGlmIChfX2MgPT0gX19kZWxpbSkNCiAgICAgICAgICAgICAgICB7 DQogICAgICAgICAgICAgICAgICBfX3NiLT5zbmV4dGMoKTsNCiAgICAgICAgICAgICAgICAgICsr X01fZ2NvdW50Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICBp ZiAoZmFsc2UpDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0 ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25z KCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIDsNCiAgICAgICAg ICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgdHlwZW5hbWUgYmFzaWNf aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQ0KICAgIGJhc2ljX2lzdHJlYW08X0No YXJULCBfVHJhaXRzPjo6DQogICAgcGVlayh2b2lkKQ0KICAgIHsNCiAgICAgIGludF90eXBlIF9f YyA9IHRyYWl0c190eXBlOjplb2YoKTsNCiAgICAgIF9NX2djb3VudCA9IDA7DQogICAgICBzZW50 cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAg ICAgICAgICBpZiAodHJ1ZSkNCiAgICAgICAgICAgIHsgX19jID0gdGhpcy0+cmRidWYoKS0+c2dl dGMoKTsgfQ0KICAgICAgICAgIGlmIChmYWxzZSkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAg ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBp ZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAgICAg ICAgICAgICAgOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gX19jOw0K ICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQog ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0No YXJULCBfVHJhaXRzPjo6DQogICAgcmVhZChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24p DQogICAgew0KICAgICAgX01fZ2NvdW50ID0gMDsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMs IHRydWUpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIGlmICh0cnVl KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBfTV9nY291bnQgPSB0aGlzLT5yZGJ1Zigp LT5zZ2V0bihfX3MsIF9fbik7DQogICAgICAgICAgICAgIGlmIChfTV9nY291bnQgIT0gX19uKQ0K ICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQgfCBpb3NfYmFz ZTo6ZmFpbGJpdCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgaWYgKGZhbHNlKQ0KICAgICAg ICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp dCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh ZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICB9DQogICAgICAgIH0N CiAgICAgIGVsc2UNCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOw0K ICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHM+DQogICAgc3RyZWFtc2l6ZQ0KICAgIGJhc2ljX2lzdHJlYW08X0No YXJULCBfVHJhaXRzPjo6DQogICAgcmVhZHNvbWUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUg X19uKQ0KICAgIHsNCiAgICAgIF9NX2djb3VudCA9IDA7DQogICAgICBzZW50cnkgX19jZXJiKCp0 aGlzLCB0cnVlKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICBpZiAo dHJ1ZSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2Yg PSB0cmFpdHNfdHlwZTo6ZW9mKCk7DQogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19udW0gPSB0 aGlzLT5yZGJ1ZigpLT5pbl9hdmFpbCgpOw0KICAgICAgICAgICAgICBpZiAoX19udW0gIT0gc3Rh dGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX19lb2YpKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAg ICAgICAgICAgIF9fbnVtID0gbWluKF9fbnVtLCBfX24pOw0KICAgICAgICAgICAgICAgICAgaWYg KF9fbnVtKQ0KICAgICAgICAgICAgICAgICAgICBfTV9nY291bnQgPSB0aGlzLT5yZGJ1ZigpLT5z Z2V0bihfX3MsIF9fbnVtKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGVsc2UN CiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsNCiAgICAg ICAgICAgIH0NCiAgICAgICAgICBpZiAoZmFsc2UpDQogICAgICAgICAgICB7DQoNCg0KICAgICAg ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAg aWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAg ICAgICAgICAgIDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAg ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7DQogICAgICByZXR1cm4gX01fZ2Nv dW50Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJl YW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgcHV0YmFjayhjaGFyX3R5cGUgX19jKQ0KICAgIHsN CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOw0KICAgICAgaWYgKF9fY2VyYikNCiAg ICAgICAgew0KICAgICAgICAgIGlmICh0cnVlKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAg ICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsNCiAgICAgICAgICAg ICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7DQogICAgICAgICAgICAg IGlmICghX19zYiB8fCBfX3NiLT5zcHV0YmFja2MoX19jKSA9PSBfX2VvZikNCiAgICAgICAgICAg ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgIH0NCiAg ICAgICAgICBpZiAoZmFsc2UpDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlz LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIDsN CiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgICB0aGlzLT5zZXRz dGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19p c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp dHM+OjoNCiAgICB1bmdldCh2b2lkKQ0KICAgIHsNCiAgICAgIF9NX2djb3VudCA9IDA7DQogICAg ICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAg IHsNCiAgICAgICAgICBpZiAodHJ1ZSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgY29u c3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7DQogICAgICAgICAgICAgIF9f c3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOw0KICAgICAgICAgICAgICBpZiAo IV9fc2IgfHwgX19lb2YgPT0gX19zYi0+c3VuZ2V0YygpKQ0KICAgICAgICAgICAgICAgIHRoaXMt PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGlm IChmYWxzZSkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl KGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMo KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAgOw0KICAgICAgICAg ICAgfQ0KICAgICAgICB9DQogICAgICBlbHNlDQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i YXNlOjpmYWlsYml0KTsNCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGludA0KICAgIGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgc3luYyh2b2lkKQ0KICAgIHsNCiAgICAgIGlu dCBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsNCiAgICAgIF9NX2djb3VudCA9IDA7DQogICAg ICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAg IHsNCiAgICAgICAgICBpZiAodHJ1ZSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgX19z dHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7DQogICAgICAgICAgICAgIGlmICgh X19zYiB8fCBfX3JldCA9PSBfX3NiLT5wdWJzeW5jKCkpDQogICAgICAgICAgICAgICAgdGhpcy0+ c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGVsc2UNCiAgICAgICAg ICAgICAgICBfX3JldCA9IDA7DQogICAgICAgICAgICB9DQogICAgICAgICAgaWYgKGZhbHNlKQ0K ICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6 OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jh c2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICB9DQogICAg ICAgIH0NCiAgICAgIHJldHVybiBfX3JldDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIHR5cGVuYW1lIGJhc2ljX2lzdHJlYW08X0No YXJULCBfVHJhaXRzPjo6cG9zX3R5cGUNCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz46Og0KICAgIHRlbGxnKHZvaWQpDQogICAgew0KICAgICAgcG9zX3R5cGUgX19yZXQgPSBwb3Nf dHlwZSgtMSk7DQogICAgICBfTV9nY291bnQgPSAwOw0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhp cywgdHJ1ZSk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgaWYgKHRy dWUpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgX19yZXQgPSB0aGlzLT5yZGJ1ZigpLT5w dWJzZWVrb2ZmKDAsIGlvc19iYXNlOjpjdXIsIGlvc19iYXNlOjppbik7DQogICAgICAgICAgICB9 DQogICAgICAgICAgaWYgKGZhbHNlKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAg dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhp cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAg ICA7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiBfX3JldDsNCiAgICB9 DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAg YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPjo6DQogICAgc2Vla2cocG9zX3R5cGUgX19wb3MpDQogICAgew0KICAgICAgX01f Z2NvdW50ID0gMDsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOw0KICAgICAgaWYg KF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIGlmICh0cnVlKQ0KICAgICAgICAgICAgew0K DQoNCiAgICAgICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVr cG9zKF9fcG9zLCBpb3NfYmFzZTo6aW4pOw0KDQoNCiAgICAgICAgICAgICAgaWYgKF9fZXJyID09 IHBvc190eXBlKG9mZl90eXBlKC0xKSkpDQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo aW9zX2Jhc2U6OmZhaWxiaXQpOw0KDQogICAgICAgICAgICB9DQogICAgICAgICAgaWYgKGZhbHNl KQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh c2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9z X2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICB9DQog ICAgICAgIH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf VHJhaXRzPiYNCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIHNlZWtn KG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX2RpcikNCiAgICB7DQogICAgICBf TV9nY291bnQgPSAwOw0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7DQogICAgICBp ZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgaWYgKHRydWUpDQogICAgICAgICAgICB7 DQoNCg0KICAgICAgICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNl ZWtvZmYoX19vZmYsIF9fZGlyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6OmluKTsNCg0KDQogICAgICAgICAgICAgIGlm IChfX2VyciA9PSBwb3NfdHlwZShvZmZfdHlwZSgtMSkpKQ0KICAgICAgICAgICAgICAgIHRoaXMt PnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsNCg0KICAgICAgICAgICAgfQ0KICAgICAgICAg IGlmIChmYWxzZSkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAgIHRoaXMtPnNldHN0 YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlv bnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAgOw0KICAgICAg ICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQoNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJl YW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPiYgX19pbiwgX0NoYXJUJiBfX2MpDQogICAgew0KICAgICAgdHlwZWRlZiBiYXNp Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7DQogICAgICB0eXBlbmFt ZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCBmYWxzZSk7DQogICAgICBpZiAo X19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgaWYgKHRydWUpDQogICAgICAgICAgICB7IF9f aW4uZ2V0KF9fYyk7IH0NCiAgICAgICAgICBpZiAoZmFsc2UpDQogICAgICAgICAgICB7DQoNCg0K ICAgICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAg ICAgICBpZiAoKF9faW4uZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAg ICAgICAgICAgICAgICA7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIGVsc2UNCiAg ICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7DQogICAgICByZXR1cm4gX19p bjsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz Pg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcj4+KGJh c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgX0NoYXJUKiBfX3MpDQogICAgew0K ICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5 cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90 eXBlIF9fc3RyZWFtYnVmX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Omlu dF90eXBlIGludF90eXBlOw0KICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAg dHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsNCiAgICAgIHN0cmVhbXNpemUgX19l eHRyYWN0ZWQgPSAwOw0KDQogICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9f Y2VyYihfX2luLCBmYWxzZSk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAgICAg ICAgaWYgKHRydWUpDQogICAgICAgICAgICB7DQoNCiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBf X251bSA9IF9faW4ud2lkdGgoKTsNCiAgICAgICAgICAgICAgaWYgKF9fbnVtID09IDApDQogICAg ICAgICAgICAgICAgX19udW0gPSBudW1lcmljX2xpbWl0czxzdHJlYW1zaXplPjo6bWF4KCk7DQoN CiAgICAgICAgICAgICAgY29uc3QgX19jdHlwZV90eXBlJiBfX2N0eXBlID0gdXNlX2ZhY2V0PF9f Y3R5cGVfdHlwZT4oX19pbi5nZXRsb2MoKSk7DQogICAgICAgICAgICAgIGNvbnN0IGludF90eXBl IF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7DQogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUq IF9fc2IgPSBfX2luLnJkYnVmKCk7DQogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fc2It PnNnZXRjKCk7DQoNCiAgICAgICAgICAgICAgd2hpbGUgKF9fZXh0cmFjdGVkIDwgX19udW0gLSAx DQogICAgICAgICAgICAgICAgICAgICAmJiBfX2MgIT0gX19lb2YgJiYgIV9fY3R5cGUuaXMoY3R5 cGVfYmFzZTo6c3BhY2UsIF9fYykpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAg ICAgKl9fcysrID0gX19jOw0KICAgICAgICAgICAgICAgICAgKytfX2V4dHJhY3RlZDsNCiAgICAg ICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOw0KICAgICAgICAgICAgICAgIH0NCiAg ICAgICAgICAgICAgaWYgKF9fYyA9PSBfX2VvZikNCiAgICAgICAgICAgICAgICBfX2luLnNldHN0 YXRlKGlvc19iYXNlOjplb2ZiaXQpOw0KDQoNCg0KICAgICAgICAgICAgICAqX19zID0gY2hhcl90 eXBlKCk7DQoNCiAgICAgICAgICAgICAgX19pbi53aWR0aCgwKTsNCiAgICAgICAgICAgIH0NCiAg ICAgICAgICBpZiAoZmFsc2UpDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICBfX2lu LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAoKF9faW4uZXhj ZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICA7DQog ICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIGlmICghX19leHRyYWN0ZWQpDQogICAgICAg IF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAgICAgcmV0dXJuIF9faW47DQog ICAgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0K ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+Jg0KICAgIHdzKGJhc2ljX2lzdHJlYW08 X0NoYXJULF9UcmFpdHM+JiBfX2luKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOw0KICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVf dHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OmludF90eXBlIF9f aW50X3R5cGU7DQoNCiAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSYgX19jdHlwZSA9IHVzZV9mYWNl dDxfX2N0eXBlX3R5cGU+KF9faW4uZ2V0bG9jKCkpOw0KICAgICAgY29uc3QgX19pbnRfdHlwZSBf X2VvZiA9IF9UcmFpdHM6OmVvZigpOw0KICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9f aW4ucmRidWYoKTsNCiAgICAgIF9faW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsNCg0KICAg ICAgd2hpbGUgKF9fYyAhPSBfX2VvZiAmJiBfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBf X2MpKQ0KICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsNCiAgICAgIGlmIChfX2MgPT0gX19l b2YpDQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7DQoNCiAgICAgIHJl dHVybiBfX2luOw0KICAgIH0NCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf VHJhaXRzPiYNCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYg X19pbiwNCiAgICAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz4mIF9fc3RyKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U cmFpdHM+IF9faXN0cmVhbV90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1f dHlwZTo6aW50X3R5cGUgX19pbnRfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3Ry ZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1idWZfdHlwZTsNCiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fY3R5cGVfdHlwZSBfX2N0eXBlX3R5cGU7DQog ICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJp bmdfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBl IF9fc2l6ZV90eXBlOw0KICAgICAgX19zaXplX3R5cGUgX19leHRyYWN0ZWQgPSAwOw0KDQogICAg ICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCBmYWxzZSk7DQog ICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgX19zdHIuZXJhc2UoKTsNCiAg ICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9faW4ud2lkdGgoKTsNCiAgICAgICAgICBfX3NpemVf dHlwZSBfX247DQogICAgICAgICAgX19uID0gX193ID4gMCA/IHN0YXRpY19jYXN0PF9fc2l6ZV90 eXBlPihfX3cpIDogX19zdHIubWF4X3NpemUoKTsNCg0KICAgICAgICAgIGNvbnN0IF9fY3R5cGVf dHlwZSYgX19jdHlwZSA9IHVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9faW4uZ2V0bG9jKCkpOw0K ICAgICAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsNCiAgICAg ICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1ZigpOw0KICAgICAgICAgIF9f aW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsNCg0KICAgICAgICAgIHdoaWxlIChfX2V4dHJh Y3RlZCA8IF9fbg0KICAgICAgICAgICAgICAgICAmJiBfX2MgIT0gX19lb2YgJiYgIV9fY3R5cGUu aXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYykpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAg IF9fc3RyICs9IF9UcmFpdHM6OnRvX2NoYXJfdHlwZShfX2MpOw0KICAgICAgICAgICAgICArK19f ZXh0cmFjdGVkOw0KICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsNCiAgICAgICAg ICAgIH0NCiAgICAgICAgICBpZiAoX19jID09IF9fZW9mKQ0KICAgICAgICAgICAgX19pbi5zZXRz dGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsNCiAgICAgICAgICBfX2luLndpZHRoKDApOw0KICAgICAg ICB9DQoNCg0KICAgICAgaWYgKCFfX2V4dHJhY3RlZCkNCiAgICAgICAgX19pbi5zZXRzdGF0ZSAo aW9zX2Jhc2U6OmZhaWxiaXQpOw0KDQogICAgICByZXR1cm4gX19pbjsNCiAgICB9DQoNCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+ DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGdldGxpbmUoYmFzaWNf aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLA0KICAgICAgICAgICAgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIsIF9DaGFyVCBfX2RlbGltKQ0KICAgIHsN CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90 eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19p bnRfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFt YnVmX3R5cGUgX19zdHJlYW1idWZfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3Ry ZWFtX3R5cGU6Ol9fY3R5cGVfdHlwZSBfX2N0eXBlX3R5cGU7DQogICAgICB0eXBlZGVmIGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsNCiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOw0KDQog ICAgICBfX3NpemVfdHlwZSBfX2V4dHJhY3RlZCA9IDA7DQogICAgICBib29sIF9fdGVzdGRlbGlt ID0gZmFsc2U7DQogICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihf X2luLCB0cnVlKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICBfX3N0 ci5lcmFzZSgpOw0KICAgICAgICAgIF9fc2l6ZV90eXBlIF9fbiA9IF9fc3RyLm1heF9zaXplKCk7 DQoNCiAgICAgICAgICBfX2ludF90eXBlIF9faWRlbGltID0gX1RyYWl0czo6dG9faW50X3R5cGUo X19kZWxpbSk7DQogICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYo KTsNCiAgICAgICAgICBfX2ludF90eXBlIF9fYyA9IF9fc2ItPnNidW1wYygpOw0KICAgICAgICAg IGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsNCiAgICAgICAgICBfX3Rl c3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsNCg0KICAgICAgICAgIHdoaWxlIChfX2V4dHJhY3Rl ZCA8PSBfX24gJiYgX19jICE9IF9fZW9mICYmICFfX3Rlc3RkZWxpbSkNCiAgICAgICAgICAgIHsN CiAgICAgICAgICAgICAgX19zdHIgKz0gX1RyYWl0czo6dG9fY2hhcl90eXBlKF9fYyk7DQogICAg ICAgICAgICAgICsrX19leHRyYWN0ZWQ7DQogICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNidW1w YygpOw0KICAgICAgICAgICAgICBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsNCiAgICAg ICAgICAgIH0NCiAgICAgICAgICBpZiAoX19jID09IF9fZW9mKQ0KICAgICAgICAgICAgX19pbi5z ZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsNCiAgICAgICAgfQ0KICAgICAgaWYgKCFfX2V4dHJh Y3RlZCAmJiAhX190ZXN0ZGVsaW0pDQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZh aWxiaXQpOw0KICAgICAgcmV0dXJuIF9faW47DQogICAgfQ0KDQogIHRlbXBsYXRlPGNsYXNzIF9D aGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPg0KICAgIGlubGluZSBiYXNpY19pc3Ry ZWFtPF9DaGFyVCxfVHJhaXRzPiYNCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBf VHJhaXRzPiYgX19pbiwNCiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxf QWxsb2M+JiBfX3N0cikNCiAgICB7IHJldHVybiBnZXRsaW5lKF9faW4sIF9fc3RyLCBfX2luLndp ZGVuKCdcbicpKTsgfQ0KDQoNCg0KDQogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pc3Ry ZWFtPGNoYXI+Ow0KICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgd3MoaXN0cmVhbSYpOw0KICBl eHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgY2hhciYpOw0KICBl eHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgY2hhciopOw0KICBl eHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgdW5zaWduZWQgY2hh ciYpOw0KICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgc2ln bmVkIGNoYXImKTsNCiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVh bSYsIHVuc2lnbmVkIGNoYXIqKTsNCiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9y Pj4oaXN0cmVhbSYsIHNpZ25lZCBjaGFyKik7DQoNCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJh c2ljX2lzdHJlYW08d2NoYXJfdD47DQogIGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgd3Mod2lz dHJlYW0mKTsNCiAgZXh0ZXJuIHRlbXBsYXRlIHdpc3RyZWFtJiBvcGVyYXRvcj4+KHdpc3RyZWFt Jiwgd2NoYXJfdCYpOw0KICBleHRlcm4gdGVtcGxhdGUgd2lzdHJlYW0mIG9wZXJhdG9yPj4od2lz dHJlYW0mLCB3Y2hhcl90Kik7DQp9DQojIDI4OCAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9n KystdjMvaXN0cmVhbSIgMiAzDQojIDQ3ICJ0Oi9tc3lzLzEuMC9taW5ndy9pbmNsdWRlL2crKy12 My9pb3N0cmVhbSIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCiAgZXh0ZXJuIGlzdHJlYW0gY2lu Ow0KICBleHRlcm4gb3N0cmVhbSBjb3V0Ow0KICBleHRlcm4gb3N0cmVhbSBjZXJyOw0KICBleHRl cm4gb3N0cmVhbSBjbG9nOw0KIyA2MiAidDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMv aW9zdHJlYW0iIDMNCiAgc3RhdGljIGlvc19iYXNlOjpJbml0IF9faW9pbml0Ow0KfQ0KIyAzMyAi dDovbXN5cy8xLjAvbWluZ3cvaW5jbHVkZS9nKystdjMvYmFja3dhcmQvaW9zdHJlYW0uaCIgMiAz DQoNCnVzaW5nIHN0ZDo6aW9zdHJlYW07DQp1c2luZyBzdGQ6Om9zdHJlYW07DQp1c2luZyBzdGQ6 OmlzdHJlYW07DQp1c2luZyBzdGQ6OmlvczsNCnVzaW5nIHN0ZDo6c3RyZWFtYnVmOw0KDQp1c2lu ZyBzdGQ6OmNvdXQ7DQp1c2luZyBzdGQ6OmNpbjsNCnVzaW5nIHN0ZDo6Y2VycjsNCnVzaW5nIHN0 ZDo6Y2xvZzsNCg0KDQoNCg0KDQoNCg0KdXNpbmcgc3RkOjp3czsNCnVzaW5nIHN0ZDo6ZW5kbDsN CnVzaW5nIHN0ZDo6ZW5kczsNCnVzaW5nIHN0ZDo6Zmx1c2g7DQojIDM0ICIuLi8uLi9pbmNsdWRl L3d4L21lbW9yeS5oIiAyDQojIDQzICIuLi8uLi9pbmNsdWRlL3d4L21lbW9yeS5oIg0Kdm9pZCAq IHd4RGVidWdBbGxvYyhzaXplX3Qgc2l6ZSwgY2hhciAqIGZpbGVOYW1lLCBpbnQgbGluZU51bSwg Ym9vbCBpc09iamVjdCwgYm9vbCBpc1ZlY3QgPSAwKTsNCnZvaWQgd3hEZWJ1Z0ZyZWUodm9pZCAq IGJ1ZiwgYm9vbCBpc1ZlY3QgPSAwKTsNCiMgOTQgIi4uLy4uL2luY2x1ZGUvd3gvbWVtb3J5Lmgi DQp0eXBlZGVmIHVuc2lnbmVkIGludCB3eE1hcmtlclR5cGU7DQoNCg0KDQoNCg0KDQpjbGFzcyBf X2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eE1lbVN0cnVjdCB7DQoNCmZyaWVuZCBjbGFzcyBf X2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eERlYnVnQ29udGV4dDsNCg0KcHVibGljOg0KcHVi bGljOg0KICAgIGludCBBc3NlcnRMaXN0ICgpOw0KDQogICAgc2l6ZV90IFJlcXVlc3RTaXplICgp IHsgcmV0dXJuIG1fcmVxU2l6ZTsgfQ0KICAgIHd4TWFya2VyVHlwZSBNYXJrZXIgKCkgeyByZXR1 cm4gbV9maXJzdE1hcmtlcjsgfQ0KDQoNCiAgICBpbmxpbmUgdm9pZCBTZXREZWxldGVkICgpOw0K ICAgIGlubGluZSBpbnQgSXNEZWxldGVkICgpOw0KDQogICAgaW50IEFwcGVuZCAoKTsNCiAgICBp bnQgVW5saW5rICgpOw0KDQoNCg0KICAgIGludCBBc3NlcnRJdCAoKTsNCg0KDQogICAgaW50IFZh bGlkYXRlTm9kZSAoKTsNCg0KDQogICAgaW50IENoZWNrQmxvY2sgKCk7DQogICAgaW50IENoZWNr QWxsUHJldmlvdXMgKCk7DQoNCg0KICAgIHZvaWQgUHJpbnROb2RlICgpOw0KDQoNCiAgICB2b2lk IEVycm9yTXNnIChjb25zdCBjaGFyICopOw0KICAgIHZvaWQgRXJyb3JNc2cgKCk7DQoNCiAgICBp bmxpbmUgdm9pZCAqR2V0QWN0dWFsRGF0YSh2b2lkKSBjb25zdCB7IHJldHVybiBtX2FjdHVhbERh dGE7IH0NCg0KICAgIHZvaWQgRHVtcCh2b2lkKTsNCg0KcHVibGljOg0KDQoNCiAgICB3eE1hcmtl clR5cGUgbV9maXJzdE1hcmtlcjsNCg0KDQogICAgY2hhciogbV9maWxlTmFtZTsNCiAgICBpbnQg bV9saW5lTnVtOw0KDQoNCiAgICBzaXplX3QgbV9yZXFTaXplOw0KDQoNCg0KDQogICAgd3hNYXJr ZXJUeXBlIG1faWQ7DQoNCiAgICB3eE1lbVN0cnVjdCAqIG1fcHJldjsNCiAgICB3eE1lbVN0cnVj dCAqIG1fbmV4dDsNCg0KICAgIHZvaWQgKiBtX2FjdHVhbERhdGE7DQogICAgYm9vbCBtX2lzT2Jq ZWN0Ow0KfTsNCg0KDQp0eXBlZGVmIHZvaWQgKHd4TWVtU3RydWN0OjoqUG1TRlYpICgpOw0KIyAx NzkgIi4uLy4uL2luY2x1ZGUvd3gvbWVtb3J5LmgiDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxp bXBvcnQpKSB3eERlYnVnQ29udGV4dCB7DQoNCnByb3RlY3RlZDoNCg0KICAgIHN0YXRpYyBzaXpl X3QgQ2FsY0FsaWdubWVudCAoKTsNCg0KDQoNCg0KICAgIHN0YXRpYyBzaXplX3QgR2V0UGFkZGlu ZyAoY29uc3Qgc2l6ZV90IHNpemUpIDsNCg0KDQogICAgc3RhdGljIHZvaWQgVHJhdmVyc2VMaXN0 IChQbVNGViwgd3hNZW1TdHJ1Y3QgKmZyb20gPSBfX251bGwpOw0KDQogICAgc3RhdGljIHN0cmVh bWJ1ZiAqbV9zdHJlYW1CdWY7DQogICAgc3RhdGljIG9zdHJlYW0gKm1fZGVidWdTdHJlYW07DQoN CiAgICBzdGF0aWMgaW50IGRlYnVnTGV2ZWw7DQogICAgc3RhdGljIGJvb2wgZGVidWdPbjsNCg0K ICAgICAgICBzdGF0aWMgaW50IG1fYmFsaWduOw0KICAgICAgICBzdGF0aWMgaW50IG1fYmFsaWdu bWFzazsNCnB1YmxpYzoNCg0KDQogICAgc3RhdGljIHd4TWVtU3RydWN0ICpjaGVja1BvaW50Ow0K DQogICAgd3hEZWJ1Z0NvbnRleHQodm9pZCk7DQogICAgfnd4RGVidWdDb250ZXh0KHZvaWQpOw0K DQogICAgc3RhdGljIGJvb2wgSGFzU3RyZWFtKHZvaWQpIHsgcmV0dXJuIChtX2RlYnVnU3RyZWFt ICE9IF9fbnVsbCk7IH07DQogICAgc3RhdGljIG9zdHJlYW0mIEdldFN0cmVhbSh2b2lkKSB7IHJl dHVybiAqbV9kZWJ1Z1N0cmVhbTsgfQ0KICAgIHN0YXRpYyBzdHJlYW1idWYgKkdldFN0cmVhbUJ1 Zih2b2lkKSB7IHJldHVybiBtX3N0cmVhbUJ1ZjsgfQ0KICAgIHN0YXRpYyB2b2lkIFNldFN0cmVh bShvc3RyZWFtICpzdHJlYW0sIHN0cmVhbWJ1ZiAqYnVmID0gX19udWxsKTsNCiAgICBzdGF0aWMg Ym9vbCBTZXRGaWxlKGNvbnN0IHd4U3RyaW5nJiBmaWxlKTsNCiAgICBzdGF0aWMgYm9vbCBTZXRT dGFuZGFyZEVycm9yKHZvaWQpOw0KDQogICAgc3RhdGljIGludCBHZXRMZXZlbCh2b2lkKSB7IHJl dHVybiBkZWJ1Z0xldmVsOyB9DQogICAgc3RhdGljIHZvaWQgU2V0TGV2ZWwoaW50IGxldmVsKSB7 IGRlYnVnTGV2ZWwgPSBsZXZlbDsgfQ0KDQogICAgc3RhdGljIGJvb2wgR2V0RGVidWdNb2RlKHZv aWQpIHsgcmV0dXJuIGRlYnVnT247IH0NCiAgICBzdGF0aWMgdm9pZCBTZXREZWJ1Z01vZGUoYm9v bCBmbGFnKSB7IGRlYnVnT24gPSBmbGFnOyB9DQoNCiAgICBzdGF0aWMgdm9pZCBTZXRDaGVja3Bv aW50KGJvb2wgYWxsID0gMCk7DQogICAgc3RhdGljIHd4TWVtU3RydWN0ICpHZXRDaGVja3BvaW50 KHZvaWQpIHsgcmV0dXJuIGNoZWNrUG9pbnQ7IH0NCg0KDQoNCiAgICBzdGF0aWMgc2l6ZV90IFBh ZGRlZFNpemUgKGNvbnN0IHNpemVfdCByZXFTaXplKTsNCg0KDQoNCiAgICBzdGF0aWMgc2l6ZV90 IFRvdFNpemUgKGNvbnN0IHNpemVfdCByZXFTaXplKTsNCg0KDQogICAgc3RhdGljIGNoYXIgKiBT dHJ1Y3RQb3MgKGNvbnN0IGNoYXIgKiBidWYpOw0KICAgIHN0YXRpYyBjaGFyICogTWlkTWFya2Vy UG9zIChjb25zdCBjaGFyICogYnVmKTsNCiAgICBzdGF0aWMgY2hhciAqIENhbGxlck1lbVBvcyAo Y29uc3QgY2hhciAqIGJ1Zik7DQogICAgc3RhdGljIGNoYXIgKiBFbmRNYXJrZXJQb3MgKGNvbnN0 IGNoYXIgKiBidWYsIGNvbnN0IHNpemVfdCBzaXplKTsNCg0KDQoNCiAgICBzdGF0aWMgY2hhciAq IFN0YXJ0UG9zIChjb25zdCBjaGFyICogY2FsbGVyKTsNCg0KDQogICAgc3RhdGljIHd4TWVtU3Ry dWN0ICogR2V0SGVhZCAoKSB7IHJldHVybiBtX2hlYWQ7IH0NCiAgICBzdGF0aWMgd3hNZW1TdHJ1 Y3QgKiBHZXRUYWlsICgpIHsgcmV0dXJuIG1fdGFpbDsgfQ0KDQoNCiAgICBzdGF0aWMgd3hNZW1T dHJ1Y3QgKiBTZXRIZWFkICh3eE1lbVN0cnVjdCAqIHN0KSB7IHJldHVybiAobV9oZWFkID0gc3Qp OyB9DQogICAgc3RhdGljIHd4TWVtU3RydWN0ICogU2V0VGFpbCAod3hNZW1TdHJ1Y3QgKiBzdCkg eyByZXR1cm4gKG1fdGFpbCA9IHN0KTsgfQ0KDQoNCg0KICAgIHN0YXRpYyBib29sIEdldENoZWNr UHJldmlvdXMgKCkgeyByZXR1cm4gbV9jaGVja1ByZXZpb3VzOyB9DQogICAgc3RhdGljIHZvaWQg U2V0Q2hlY2tQcmV2aW91cyAoYm9vbCB2YWx1ZSkgeyBtX2NoZWNrUHJldmlvdXMgPSB2YWx1ZTsg fQ0KDQoNCiAgICBzdGF0aWMgaW50IENoZWNrKGJvb2wgY2hlY2tBbGwgPSAwKTsNCg0KDQogICAg c3RhdGljIGJvb2wgUHJpbnRMaXN0KHZvaWQpOw0KDQoNCiAgICBzdGF0aWMgYm9vbCBEdW1wKHZv aWQpOw0KDQoNCiAgICBzdGF0aWMgYm9vbCBQcmludFN0YXRpc3RpY3MoYm9vbCBkZXRhaWxlZCA9 IDEpOw0KDQoNCiAgICBzdGF0aWMgYm9vbCBQcmludENsYXNzZXModm9pZCk7DQoNCg0KDQogICAg c3RhdGljIGludCBDb3VudE9iamVjdHNMZWZ0KGJvb2wgc2luY2VDaGVja3BvaW50ID0gMCk7DQoN CnByaXZhdGU6DQoNCg0KICAgIHN0YXRpYyB3eE1lbVN0cnVjdCogbV9oZWFkOw0KICAgIHN0YXRp YyB3eE1lbVN0cnVjdCogbV90YWlsOw0KDQoNCg0KICAgIHN0YXRpYyBib29sIG1fY2hlY2tQcmV2 aW91czsNCn07DQoNCg0Kdm9pZCBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eFRyYWNlKGNv bnN0IGNoYXIgKmZtdCAuLi4pOw0Kdm9pZCBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eFRy YWNlTGV2ZWwoaW50IGxldmVsLCBjb25zdCBjaGFyICpmbXQgLi4uKTsNCiMgMzA0ICIuLi8uLi9p bmNsdWRlL3d4L21lbW9yeS5oIg0KIyAxICIuLi8uLi9pbmNsdWRlL3d4L21zdy93aW51bmRlZi5o IiAxDQojIDMyICIuLi8uLi9pbmNsdWRlL3d4L21zdy93aW51bmRlZi5oIg0KICAgaW5saW5lIEJP T0wgR2V0Q2hhcldpZHRoKEhEQyBkYywgVUlOVCBmaXJzdCwgVUlOVCBsYXN0LCBMUElOVCBidWZm ZXIpDQogICB7DQoNCg0KDQogICAgICByZXR1cm4gR2V0Q2hhcldpZHRoQShkYywgZmlyc3QsIGxh c3QsIGJ1ZmZlcik7DQoNCiAgIH0NCiMgNTIgIi4uLy4uL2luY2x1ZGUvd3gvbXN3L3dpbnVuZGVm LmgiDQogICBpbmxpbmUgSFdORCBGaW5kV2luZG93KExQQ1NUUiBjbGFzc25hbWUsIExQQ1NUUiB3 aW5kb3duYW1lKQ0KICAgew0KICAgICAgcmV0dXJuIEZpbmRXaW5kb3dBKGNsYXNzbmFtZSwgd2lu ZG93bmFtZSk7DQogICB9DQojIDY5ICIuLi8uLi9pbmNsdWRlL3d4L21zdy93aW51bmRlZi5oIg0K ICAgaW5saW5lIGludCBHZXRDbGFzc05hbWUoSFdORCBoLCBMUFNUUiBjbGFzc25hbWUsIGludCBt YXhjb3VudCkNCiAgIHsNCiAgICAgIHJldHVybiBHZXRDbGFzc05hbWVBKGgsIGNsYXNzbmFtZSwg bWF4Y291bnQpOw0KICAgfQ0KIyA4NiAiLi4vLi4vaW5jbHVkZS93eC9tc3cvd2ludW5kZWYuaCIN CiAgIGlubGluZSBCT09MIEdldENsYXNzSW5mbyhISU5TVEFOQ0UgaCwgTFBDU1RSIG5hbWUsIExQ V05EQ0xBU1NBIHdpbmNsYXNzKQ0KICAgew0KICAgICAgcmV0dXJuIEdldENsYXNzSW5mb0EoaCwg bmFtZSwgd2luY2xhc3MpOw0KICAgfQ0KIyAxMDMgIi4uLy4uL2luY2x1ZGUvd3gvbXN3L3dpbnVu ZGVmLmgiDQogICBpbmxpbmUgSEFDQ0VMIExvYWRBY2NlbGVyYXRvcnMoSElOU1RBTkNFIGgsIExQ Q1NUUiBuYW1lKQ0KICAgew0KICAgICAgcmV0dXJuIExvYWRBY2NlbGVyYXRvcnNBKGgsIG5hbWUp Ow0KICAgfQ0KIyAxMjAgIi4uLy4uL2luY2x1ZGUvd3gvbXN3L3dpbnVuZGVmLmgiDQogICBpbmxp bmUgaW50IERyYXdUZXh0KEhEQyBoLCBMUENTVFIgc3RyLCBpbnQgY291bnQsIExQUkVDVCByZWN0 LCBVSU5UIGZvcm1hdCkNCiAgIHsNCiAgICAgIHJldHVybiBEcmF3VGV4dEEoaCwgc3RyLCBjb3Vu dCwgcmVjdCwgZm9ybWF0KTsNCiAgIH0NCiMgMTQxICIuLi8uLi9pbmNsdWRlL3d4L21zdy93aW51 bmRlZi5oIg0KICAgaW5saW5lIGludCBTdGFydERvYyhIREMgaCwgY29uc3QgRE9DSU5GTyogaW5m bykNCiAgIHsNCiAgICAgIHJldHVybiBTdGFydERvY0EoaCwgaW5mbyk7DQogICB9DQoNCg0KDQoN Cg0KDQoNCiAgIGlubGluZSBpbnQgR2V0T2JqZWN0KEhHRElPQkogaCwgaW50IGksIExQVk9JRCBi dWZmZXIpDQogICB7DQoNCg0KDQogICAgICByZXR1cm4gR2V0T2JqZWN0QShoLCBpLCBidWZmZXIp Ow0KDQogICB9DQoNCg0KDQoNCg0KDQogICBpbmxpbmUgaW50IEdldE1lc3NhZ2UoTFBNU0cgbHBN c2csIEhXTkQgaFduZCwgVUlOVCB3TXNnRmlsdGVyTWluLCBVSU5UIHdNc2dGaWx0ZXJNYXgpDQog ICB7DQoNCg0KDQogICAgICByZXR1cm4gR2V0TWVzc2FnZUEobHBNc2csIGhXbmQsIHdNc2dGaWx0 ZXJNaW4sIHdNc2dGaWx0ZXJNYXgpOw0KDQogICB9DQojIDE4NiAiLi4vLi4vaW5jbHVkZS93eC9t c3cvd2ludW5kZWYuaCINCiAgICBpbmxpbmUgSElOU1RBTkNFIExvYWRMaWJyYXJ5KExQQ1NUUiBs cExpYkZpbGVOYW1lKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuIExvYWRMaWJyYXJ5QShscExpYkZp bGVOYW1lKTsNCiAgICB9DQojIDIwMiAiLi4vLi4vaW5jbHVkZS93eC9tc3cvd2ludW5kZWYuaCIN CiAgICBpbmxpbmUgSFJTUkMgRmluZFJlc291cmNlKEhNT0RVTEUgaE1vZHVsZSwgTFBDU1RSIGxw TmFtZSwgTFBDU1RSIGxwVHlwZSkNCiAgICB7DQogICAgICAgIHJldHVybiBGaW5kUmVzb3VyY2VB KGhNb2R1bGUsIGxwTmFtZSwgbHBUeXBlKTsNCiAgICB9DQojIDMwNSAiLi4vLi4vaW5jbHVkZS93 eC9tZW1vcnkuaCIgMg0KIyAyMSAiLi4vLi4vaW5jbHVkZS93eC9vYmplY3QuaCIgMg0KDQpjbGFz cyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eE9iamVjdDsNCiMgMzUgIi4uLy4uL2luY2x1 ZGUvd3gvb2JqZWN0LmgiDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eENsYXNz SW5mbzsNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4SW5wdXRTdHJlYW07DQpj bGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eE91dHB1dFN0cmVhbTsNCmNsYXNzIF9f YXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4T2JqZWN0SW5wdXRTdHJlYW07DQpjbGFzcyBfX2F0 dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eE9iamVjdE91dHB1dFN0cmVhbTsNCmNsYXNzIF9fYXR0 cmlidXRlX18oKGRsbGltcG9ydCkpIHd4SGFzaFRhYmxlOw0KY2xhc3MgX19hdHRyaWJ1dGVfXygo ZGxsaW1wb3J0KSkgd3hPYmplY3RfU2VyaWFsaXplOw0KIyA1MSAiLi4vLi4vaW5jbHVkZS93eC9v YmplY3QuaCINCnR5cGVkZWYgd3hPYmplY3QgKiAoKnd4T2JqZWN0Q29uc3RydWN0b3JGbikgKHZv aWQpOw0KDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eENsYXNzSW5mbw0Kew0K IHB1YmxpYzoNCiAgIHd4Q2xhc3NJbmZvKGNoYXIgKmNOYW1lLCBjaGFyICpiYXNlTmFtZTEsIGNo YXIgKmJhc2VOYW1lMiwgaW50IHN6LCB3eE9iamVjdENvbnN0cnVjdG9yRm4gZm4pOw0KDQogICB3 eE9iamVjdCAqQ3JlYXRlT2JqZWN0KHZvaWQpOw0KDQogICBpbmxpbmUgY2hhciAqR2V0Q2xhc3NO YW1lKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1fY2xhc3NOYW1lOyB9DQogICBpbmxpbmUgY2hhciAq R2V0QmFzZUNsYXNzTmFtZTEodm9pZCkgY29uc3QgeyByZXR1cm4gbV9iYXNlQ2xhc3NOYW1lMTsg fQ0KICAgaW5saW5lIGNoYXIgKkdldEJhc2VDbGFzc05hbWUyKHZvaWQpIGNvbnN0IHsgcmV0dXJu IG1fYmFzZUNsYXNzTmFtZTI7IH0NCiAgIGlubGluZSB3eENsYXNzSW5mbyogR2V0QmFzZUNsYXNz MSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZUluZm8xOyB9DQogICBpbmxpbmUgd3hDbGFzc0luZm8q IEdldEJhc2VDbGFzczIoKSBjb25zdCB7IHJldHVybiBtX2Jhc2VJbmZvMjsgfQ0KICAgaW5saW5l IGludCBHZXRTaXplKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0U2l6ZTsgfQ0KICAgaW5s aW5lIHd4T2JqZWN0Q29uc3RydWN0b3JGbiBHZXRDb25zdHJ1Y3RvcigpIGNvbnN0IHsgcmV0dXJu IG1fb2JqZWN0Q29uc3RydWN0b3I7IH0NCiAgIHN0YXRpYyBpbmxpbmUgd3hDbGFzc0luZm8qIEdl dEZpcnN0KCkgeyByZXR1cm4gc21fZmlyc3Q7IH0NCiAgIGlubGluZSB3eENsYXNzSW5mbyogR2V0 TmV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dDsgfQ0KICAgYm9vbCBJc0tpbmRPZih3eENsYXNz SW5mbyAqaW5mbykgY29uc3Q7DQoNCiAgIHN0YXRpYyB3eENsYXNzSW5mbyAqRmluZENsYXNzKGNo YXIgKmMpOw0KDQoNCiAgIHN0YXRpYyB2b2lkIEluaXRpYWxpemVDbGFzc2VzKHZvaWQpOw0KDQoN CiAgIHN0YXRpYyB2b2lkIENsZWFuVXBDbGFzc2VzKHZvaWQpOw0KDQpwdWJsaWM6DQogICBjaGFy KiBtX2NsYXNzTmFtZTsNCiAgIGNoYXIqIG1fYmFzZUNsYXNzTmFtZTE7DQogICBjaGFyKiBtX2Jh c2VDbGFzc05hbWUyOw0KICAgaW50IG1fb2JqZWN0U2l6ZTsNCiAgIHd4T2JqZWN0Q29uc3RydWN0 b3JGbiBtX29iamVjdENvbnN0cnVjdG9yOw0KDQoNCg0KICAgd3hDbGFzc0luZm8qIG1fYmFzZUlu Zm8xOw0KICAgd3hDbGFzc0luZm8qIG1fYmFzZUluZm8yOw0KDQogICBzdGF0aWMgd3hDbGFzc0lu Zm8qIHNtX2ZpcnN0Ow0KICAgd3hDbGFzc0luZm8qIG1fbmV4dDsNCg0KICAgc3RhdGljIHd4SGFz aFRhYmxlKiBzbV9jbGFzc1RhYmxlOw0KfTsNCg0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkg d3hPYmplY3QqIHd4Q3JlYXRlRHluYW1pY09iamVjdChjb25zdCBjaGFyICpuYW1lKTsNCiMgMTc2 ICIuLi8uLi9pbmNsdWRlL3d4L29iamVjdC5oIg0KICAgIGlubGluZSB2b2lkIHd4Q2hlY2tDYXN0 KHZvaWQgKnB0cikNCiAgICB7DQogICAgICAgIGlmICggIShwdHIpICkgd3hPbkFzc2VydCgiLi4v Li4vaW5jbHVkZS93eC9vYmplY3QuaCIsIDE3OCwgInd4U3RhdGljQ2FzdCgpIHVzZWQgaW5jb3Jy ZWN0bHkiKTsNCiAgICB9DQojIDE5NyAiLi4vLi4vaW5jbHVkZS93eC9vYmplY3QuaCINCmNsYXNz IF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4T2JqZWN0UmVmRGF0YTsNCg0KY2xhc3MgX19h dHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hPYmplY3QNCnsNCiBwdWJsaWM6DQoNCg0KICBzdGF0 aWMgd3hDbGFzc0luZm8gc21fY2xhc3N3eE9iamVjdDsNCg0KICB3eE9iamVjdCh2b2lkKTsNCiAg dmlydHVhbCB+d3hPYmplY3Qodm9pZCk7DQoNCiAgdmlydHVhbCB3eENsYXNzSW5mbyAqR2V0Q2xh c3NJbmZvKHZvaWQpIGNvbnN0IHsgcmV0dXJuICZzbV9jbGFzc3d4T2JqZWN0OyB9DQogIHd4T2Jq ZWN0ICpDbG9uZSh2b2lkKSBjb25zdDsNCiAgdmlydHVhbCB2b2lkIENvcHlPYmplY3Qod3hPYmpl Y3QmIG9iamVjdF9kZXN0KSBjb25zdDsNCg0KICBib29sIElzS2luZE9mKHd4Q2xhc3NJbmZvICpp bmZvKSBjb25zdDsNCiMgMjQ4ICIuLi8uLi9pbmNsdWRlL3d4L29iamVjdC5oIg0KICB2b2lkIFJl Zihjb25zdCB3eE9iamVjdCYgY2xvbmUpOw0KDQoNCiAgdm9pZCBVblJlZih2b2lkKTsNCg0KICBp bmxpbmUgd3hPYmplY3RSZWZEYXRhICpHZXRSZWZEYXRhKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1f cmVmRGF0YTsgfQ0KICBpbmxpbmUgdm9pZCBTZXRSZWZEYXRhKHd4T2JqZWN0UmVmRGF0YSAqZGF0 YSkgeyBtX3JlZkRhdGEgPSBkYXRhOyB9DQoNCnByb3RlY3RlZDoNCiAgd3hPYmplY3RSZWZEYXRh KiBtX3JlZkRhdGE7DQoNCg0KDQp9Ow0KDQoNCg0KDQoNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRs bGltcG9ydCkpIHd4T2JqZWN0UmVmRGF0YSB7DQoNCiAgICBmcmllbmQgY2xhc3Mgd3hPYmplY3Q7 DQoNCnB1YmxpYzoNCiAgICB3eE9iamVjdFJlZkRhdGEodm9pZCk7DQogICAgdmlydHVhbCB+d3hP YmplY3RSZWZEYXRhKHZvaWQpOw0KDQogICAgaW5saW5lIGludCBHZXRSZWZDb3VudCh2b2lkKSBj b25zdCB7IHJldHVybiBtX2NvdW50OyB9DQpwcml2YXRlOg0KICAgIGludCBtX2NvdW50Ow0KfTsN CiMgMTcgIi4uLy4uL2luY2x1ZGUvd3gvd3guaCIgMg0KIyAxICIuLi8uLi9pbmNsdWRlL3d4L2R5 bmFycmF5LmgiIDENCiMgMTYgIi4uLy4uL2luY2x1ZGUvd3gvZHluYXJyYXkuaCINCiNwcmFnbWEg aW50ZXJmYWNlICJkeW5hcnJheS5oIg0KIyA0NSAiLi4vLi4vaW5jbHVkZS93eC9keW5hcnJheS5o Ig0KdHlwZWRlZiBpbnQgKCAqQ01QRlVOQykoY29uc3Qgdm9pZCogcEl0ZW0xLCBjb25zdCB2b2lk KiBwSXRlbTIpOw0KIyA2MCAiLi4vLi4vaW5jbHVkZS93eC9keW5hcnJheS5oIg0KY2xhc3MgX19h dHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hCYXNlQXJyYXkNCnsNCnB1YmxpYzoNCg0KDQoNCiAg d3hCYXNlQXJyYXkoKTsNCg0KICB3eEJhc2VBcnJheShjb25zdCB3eEJhc2VBcnJheSYgYXJyYXkp Ow0KDQogIHd4QmFzZUFycmF5JiBvcGVyYXRvcj0oY29uc3Qgd3hCYXNlQXJyYXkmIHNyYyk7DQoN Cg0KDQogdmlydHVhbA0KDQogIH53eEJhc2VBcnJheSgpOw0KDQoNCg0KDQoNCiAgdm9pZCBFbXB0 eSgpIHsgbV9uQ291bnQgPSAwOyB9DQoNCiAgdm9pZCBDbGVhcigpOw0KDQogIHZvaWQgQWxsb2Mo c2l6ZV90IHVpU2l6ZSk7DQoNCiAgdm9pZCBTaHJpbmsoKTsNCg0KDQoNCg0KDQogIHNpemVfdCBD b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbkNvdW50OyB9DQogIHNpemVfdCBHZXRDb3VudCgpIGNv bnN0IHsgcmV0dXJuIG1fbkNvdW50OyB9DQoNCiAgYm9vbCBJc0VtcHR5KCkgY29uc3QgeyByZXR1 cm4gbV9uQ291bnQgPT0gMDsgfQ0KDQoNCnByb3RlY3RlZDoNCg0KDQoNCg0KDQoNCg0KICBsb25n JiBJdGVtKHNpemVfdCB1aUluZGV4KSBjb25zdA0KICAgIHsgaWYgKCAhKHVpSW5kZXggPCBtX25D b3VudCkgKSB3eE9uQXNzZXJ0KCIuLi8uLi9pbmNsdWRlL3d4L2R5bmFycmF5LmgiLCAxMDkpOyBy ZXR1cm4gbV9wSXRlbXNbdWlJbmRleF07IH0NCg0KICBsb25nJiBvcGVyYXRvcltdKHNpemVfdCB1 aUluZGV4KSBjb25zdCB7IHJldHVybiBJdGVtKHVpSW5kZXgpOyB9DQojIDEyMiAiLi4vLi4vaW5j bHVkZS93eC9keW5hcnJheS5oIg0KICBpbnQgSW5kZXgobG9uZyBsSXRlbSwgYm9vbCBiRnJvbUVu ZCA9IDApIGNvbnN0Ow0KDQogIGludCBJbmRleChsb25nIGxJdGVtLCBDTVBGVU5DIGZuQ29tcGFy ZSkgY29uc3Q7DQoNCiAgdm9pZCBBZGQobG9uZyBsSXRlbSk7DQoNCiAgdm9pZCBBZGQobG9uZyBs SXRlbSwgQ01QRlVOQyBmbkNvbXBhcmUpOw0KDQogIHZvaWQgSW5zZXJ0KGxvbmcgbEl0ZW0sIHNp emVfdCB1aUluZGV4KTsNCg0KICB2b2lkIFJlbW92ZShsb25nIGxJdGVtKTsNCg0KICB2b2lkIFJl bW92ZUF0KHNpemVfdCB1aUluZGV4KTsNCg0KDQoNCiAgdm9pZCBTb3J0KENNUEZVTkMgZm5Db21w YXJlKTsNCg0KcHJpdmF0ZToNCiAgdm9pZCBHcm93KCk7DQoNCiAgc2l6ZV90IG1fblNpemUsDQog ICAgICAgICAgbV9uQ291bnQ7DQoNCiAgbG9uZyAqbV9wSXRlbXM7DQp9Ow0KIyA0MzkgIi4uLy4u L2luY2x1ZGUvd3gvZHluYXJyYXkuaCINCnR5cGVkZWYgaW50IF9Bd3hBcnJheUludDsgdHlwZWRl ZiBpbnQgKCAqQ01QRlVOQ19Bd3hBcnJheUludCkoX0F3eEFycmF5SW50ICpwSXRlbTEsIF9Bd3hB cnJheUludCAqcEl0ZW0yKTsgY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hBcnJh eUludCA6IHB1YmxpYyB3eEJhc2VBcnJheSB7IHB1YmxpYzogd3hBcnJheUludCgpIHsgc2l6ZV90 IHR5cGUgPSBzaXplb2YoX0F3eEFycmF5SW50KTsgc2l6ZV90IHNpemVsb25nID0gc2l6ZW9mKGxv bmcpOyBpZiAoIHR5cGUgPiBzaXplbG9uZyApIHsgaWYgKCAhKHd4RmFsc2UpICkgd3hPbkFzc2Vy dCgiLi4vLi4vaW5jbHVkZS93eC9keW5hcnJheS5oIiwgNDM5LCAiaWxsZWdhbCB1c2Ugb2YgREVG SU5FX0FSUkFZIik7IH0gfSB3eEFycmF5SW50JiBvcGVyYXRvcj0oY29uc3Qgd3hBcnJheUludCYg c3JjKSB7IHd4QmFzZUFycmF5KiB0ZW1wID0gKHd4QmFzZUFycmF5KikgdGhpczsgKCp0ZW1wKSA9 ICgoY29uc3Qgd3hCYXNlQXJyYXkmKXNyYyk7IHJldHVybiAqdGhpczsgfSBfQXd4QXJyYXlJbnQm IG9wZXJhdG9yW10oc2l6ZV90IHVpSW5kZXgpIGNvbnN0IHsgcmV0dXJuIChfQXd4QXJyYXlJbnQm KSh3eEJhc2VBcnJheTo6SXRlbSh1aUluZGV4KSk7IH0gX0F3eEFycmF5SW50JiBJdGVtKHNpemVf dCB1aUluZGV4KSBjb25zdCB7IHJldHVybiAoX0F3eEFycmF5SW50Jikod3hCYXNlQXJyYXk6Okl0 ZW0odWlJbmRleCkpOyB9IF9Bd3hBcnJheUludCYgTGFzdCgpIGNvbnN0IHsgcmV0dXJuIChfQXd4 QXJyYXlJbnQmKSh3eEJhc2VBcnJheTo6SXRlbShDb3VudCgpIC0gMSkpOyB9IGludCBJbmRleChf QXd4QXJyYXlJbnQgSXRlbSwgYm9vbCBiRnJvbUVuZCA9IDApIGNvbnN0IHsgcmV0dXJuIHd4QmFz ZUFycmF5OjpJbmRleCgobG9uZylJdGVtLCBiRnJvbUVuZCk7IH0gdm9pZCBBZGQoX0F3eEFycmF5 SW50IEl0ZW0pIHsgd3hCYXNlQXJyYXk6OkFkZCgobG9uZylJdGVtKTsgfSB2b2lkIEluc2VydChf QXd4QXJyYXlJbnQgSXRlbSwgc2l6ZV90IHVpSW5kZXgpIHsgd3hCYXNlQXJyYXk6Okluc2VydCgo bG9uZylJdGVtLCB1aUluZGV4KSA7IH0gdm9pZCBSZW1vdmUoc2l6ZV90IHVpSW5kZXgpIHsgUmVt b3ZlQXQodWlJbmRleCk7IH0gdm9pZCBSZW1vdmVBdChzaXplX3QgdWlJbmRleCkgeyB3eEJhc2VB cnJheTo6UmVtb3ZlQXQodWlJbmRleCk7IH0gdm9pZCBSZW1vdmUoX0F3eEFycmF5SW50IEl0ZW0p IHsgaW50IGlJbmRleCA9IEluZGV4KEl0ZW0pOyBpZiAoIShpSW5kZXggIT0gKC0xKSkpIHtpZiAo ICEod3hGYWxzZSkgKSB3eE9uQXNzZXJ0KCIuLi8uLi9pbmNsdWRlL3d4L2R5bmFycmF5LmgiLCA0 MzksICJyZW1vdmluZyBpbmV4aXN0aW5nIGVsZW1lbnQgaW4gd3hBcnJheTo6UmVtb3ZlIik7IHJl dHVybjsgfTsgd3hCYXNlQXJyYXk6OlJlbW92ZUF0KChzaXplX3QpaUluZGV4KTsgfSB2b2lkIFNv cnQoQ01QRlVOQ19Bd3hBcnJheUludCBmQ21wKSB7IHd4QmFzZUFycmF5OjpTb3J0KChDTVBGVU5D KWZDbXApOyB9IH07DQoNCnR5cGVkZWYgbG9uZyBfQXd4QXJyYXlMb25nOyB0eXBlZGVmIGludCAo ICpDTVBGVU5DX0F3eEFycmF5TG9uZykoX0F3eEFycmF5TG9uZyAqcEl0ZW0xLCBfQXd4QXJyYXlM b25nICpwSXRlbTIpOyBjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eEFycmF5TG9u ZyA6IHB1YmxpYyB3eEJhc2VBcnJheSB7IHB1YmxpYzogd3hBcnJheUxvbmcoKSB7IHNpemVfdCB0 eXBlID0gc2l6ZW9mKF9Bd3hBcnJheUxvbmcpOyBzaXplX3Qgc2l6ZWxvbmcgPSBzaXplb2YobG9u Zyk7IGlmICggdHlwZSA+IHNpemVsb25nICkgeyBpZiAoICEod3hGYWxzZSkgKSB3eE9uQXNzZXJ0 KCIuLi8uLi9pbmNsdWRlL3d4L2R5bmFycmF5LmgiLCA0NDEsICJpbGxlZ2FsIHVzZSBvZiBERUZJ TkVfQVJSQVkiKTsgfSB9IHd4QXJyYXlMb25nJiBvcGVyYXRvcj0oY29uc3Qgd3hBcnJheUxvbmcm IHNyYykgeyB3eEJhc2VBcnJheSogdGVtcCA9ICh3eEJhc2VBcnJheSopIHRoaXM7ICgqdGVtcCkg PSAoKGNvbnN0IHd4QmFzZUFycmF5JilzcmMpOyByZXR1cm4gKnRoaXM7IH0gX0F3eEFycmF5TG9u ZyYgb3BlcmF0b3JbXShzaXplX3QgdWlJbmRleCkgY29uc3QgeyByZXR1cm4gKF9Bd3hBcnJheUxv bmcmKSh3eEJhc2VBcnJheTo6SXRlbSh1aUluZGV4KSk7IH0gX0F3eEFycmF5TG9uZyYgSXRlbShz aXplX3QgdWlJbmRleCkgY29uc3QgeyByZXR1cm4gKF9Bd3hBcnJheUxvbmcmKSh3eEJhc2VBcnJh eTo6SXRlbSh1aUluZGV4KSk7IH0gX0F3eEFycmF5TG9uZyYgTGFzdCgpIGNvbnN0IHsgcmV0dXJu IChfQXd4QXJyYXlMb25nJikod3hCYXNlQXJyYXk6Okl0ZW0oQ291bnQoKSAtIDEpKTsgfSBpbnQg SW5kZXgoX0F3eEFycmF5TG9uZyBJdGVtLCBib29sIGJGcm9tRW5kID0gMCkgY29uc3QgeyByZXR1 cm4gd3hCYXNlQXJyYXk6OkluZGV4KChsb25nKUl0ZW0sIGJGcm9tRW5kKTsgfSB2b2lkIEFkZChf QXd4QXJyYXlMb25nIEl0ZW0pIHsgd3hCYXNlQXJyYXk6OkFkZCgobG9uZylJdGVtKTsgfSB2b2lk IEluc2VydChfQXd4QXJyYXlMb25nIEl0ZW0sIHNpemVfdCB1aUluZGV4KSB7IHd4QmFzZUFycmF5 OjpJbnNlcnQoKGxvbmcpSXRlbSwgdWlJbmRleCkgOyB9IHZvaWQgUmVtb3ZlKHNpemVfdCB1aUlu ZGV4KSB7IFJlbW92ZUF0KHVpSW5kZXgpOyB9IHZvaWQgUmVtb3ZlQXQoc2l6ZV90IHVpSW5kZXgp IHsgd3hCYXNlQXJyYXk6OlJlbW92ZUF0KHVpSW5kZXgpOyB9IHZvaWQgUmVtb3ZlKF9Bd3hBcnJh eUxvbmcgSXRlbSkgeyBpbnQgaUluZGV4ID0gSW5kZXgoSXRlbSk7IGlmICghKGlJbmRleCAhPSAo LTEpKSkge2lmICggISh3eEZhbHNlKSApIHd4T25Bc3NlcnQoIi4uLy4uL2luY2x1ZGUvd3gvZHlu YXJyYXkuaCIsIDQ0MSwgInJlbW92aW5nIGluZXhpc3RpbmcgZWxlbWVudCBpbiB3eEFycmF5OjpS ZW1vdmUiKTsgcmV0dXJuOyB9OyB3eEJhc2VBcnJheTo6UmVtb3ZlQXQoKHNpemVfdClpSW5kZXgp OyB9IHZvaWQgU29ydChDTVBGVU5DX0F3eEFycmF5TG9uZyBmQ21wKSB7IHd4QmFzZUFycmF5OjpT b3J0KChDTVBGVU5DKWZDbXApOyB9IH07DQoNCnR5cGVkZWYgdm9pZCAqIF9Bd3hBcnJheVB0clZv aWQ7IHR5cGVkZWYgaW50ICggKkNNUEZVTkNfQXd4QXJyYXlQdHJWb2lkKShfQXd4QXJyYXlQdHJW b2lkICpwSXRlbTEsIF9Bd3hBcnJheVB0clZvaWQgKnBJdGVtMik7IGNsYXNzIF9fYXR0cmlidXRl X18oKGRsbGltcG9ydCkpIHd4QXJyYXlQdHJWb2lkIDogcHVibGljIHd4QmFzZUFycmF5IHsgcHVi bGljOiB3eEFycmF5UHRyVm9pZCgpIHsgc2l6ZV90IHR5cGUgPSBzaXplb2YoX0F3eEFycmF5UHRy Vm9pZCk7IHNpemVfdCBzaXplbG9uZyA9IHNpemVvZihsb25nKTsgaWYgKCB0eXBlID4gc2l6ZWxv bmcgKSB7IGlmICggISh3eEZhbHNlKSApIHd4T25Bc3NlcnQoIi4uLy4uL2luY2x1ZGUvd3gvZHlu YXJyYXkuaCIsIDQ0MywgImlsbGVnYWwgdXNlIG9mIERFRklORV9BUlJBWSIpOyB9IH0gd3hBcnJh eVB0clZvaWQmIG9wZXJhdG9yPShjb25zdCB3eEFycmF5UHRyVm9pZCYgc3JjKSB7IHd4QmFzZUFy cmF5KiB0ZW1wID0gKHd4QmFzZUFycmF5KikgdGhpczsgKCp0ZW1wKSA9ICgoY29uc3Qgd3hCYXNl QXJyYXkmKXNyYyk7IHJldHVybiAqdGhpczsgfSBfQXd4QXJyYXlQdHJWb2lkJiBvcGVyYXRvcltd KHNpemVfdCB1aUluZGV4KSBjb25zdCB7IHJldHVybiAoX0F3eEFycmF5UHRyVm9pZCYpKHd4QmFz ZUFycmF5OjpJdGVtKHVpSW5kZXgpKTsgfSBfQXd4QXJyYXlQdHJWb2lkJiBJdGVtKHNpemVfdCB1 aUluZGV4KSBjb25zdCB7IHJldHVybiAoX0F3eEFycmF5UHRyVm9pZCYpKHd4QmFzZUFycmF5OjpJ dGVtKHVpSW5kZXgpKTsgfSBfQXd4QXJyYXlQdHJWb2lkJiBMYXN0KCkgY29uc3QgeyByZXR1cm4g KF9Bd3hBcnJheVB0clZvaWQmKSh3eEJhc2VBcnJheTo6SXRlbShDb3VudCgpIC0gMSkpOyB9IGlu dCBJbmRleChfQXd4QXJyYXlQdHJWb2lkIEl0ZW0sIGJvb2wgYkZyb21FbmQgPSAwKSBjb25zdCB7 IHJldHVybiB3eEJhc2VBcnJheTo6SW5kZXgoKGxvbmcpSXRlbSwgYkZyb21FbmQpOyB9IHZvaWQg QWRkKF9Bd3hBcnJheVB0clZvaWQgSXRlbSkgeyB3eEJhc2VBcnJheTo6QWRkKChsb25nKUl0ZW0p OyB9IHZvaWQgSW5zZXJ0KF9Bd3hBcnJheVB0clZvaWQgSXRlbSwgc2l6ZV90IHVpSW5kZXgpIHsg d3hCYXNlQXJyYXk6Okluc2VydCgobG9uZylJdGVtLCB1aUluZGV4KSA7IH0gdm9pZCBSZW1vdmUo c2l6ZV90IHVpSW5kZXgpIHsgUmVtb3ZlQXQodWlJbmRleCk7IH0gdm9pZCBSZW1vdmVBdChzaXpl X3QgdWlJbmRleCkgeyB3eEJhc2VBcnJheTo6UmVtb3ZlQXQodWlJbmRleCk7IH0gdm9pZCBSZW1v dmUoX0F3eEFycmF5UHRyVm9pZCBJdGVtKSB7IGludCBpSW5kZXggPSBJbmRleChJdGVtKTsgaWYg KCEoaUluZGV4ICE9ICgtMSkpKSB7aWYgKCAhKHd4RmFsc2UpICkgd3hPbkFzc2VydCgiLi4vLi4v aW5jbHVkZS93eC9keW5hcnJheS5oIiwgNDQzLCAicmVtb3ZpbmcgaW5leGlzdGluZyBlbGVtZW50 IGluIHd4QXJyYXk6OlJlbW92ZSIpOyByZXR1cm47IH07IHd4QmFzZUFycmF5OjpSZW1vdmVBdCgo c2l6ZV90KWlJbmRleCk7IH0gdm9pZCBTb3J0KENNUEZVTkNfQXd4QXJyYXlQdHJWb2lkIGZDbXAp IHsgd3hCYXNlQXJyYXk6OlNvcnQoKENNUEZVTkMpZkNtcCk7IH0gfTsNCiMgMTggIi4uLy4uL2lu Y2x1ZGUvd3gvd3guaCIgMg0KIyAxICIuLi8uLi9pbmNsdWRlL3d4L2xpc3QuaCIgMQ0KIyAzMCAi Li4vLi4vaW5jbHVkZS93eC9saXN0LmgiDQojcHJhZ21hIGludGVyZmFjZSAibGlzdC5oIg0KIyA0 MyAiLi4vLi4vaW5jbHVkZS93eC9saXN0LmgiDQpleHRlcm4gX19hdHRyaWJ1dGVfXygoZGxsaW1w b3J0KSkgY2hhciogY29weXN0cmluZyhjb25zdCBjaGFyICpzKTsNCg0KY2xhc3MgX19hdHRyaWJ1 dGVfXygoZGxsaW1wb3J0KSkgd3hPYmplY3RMaXN0Tm9kZTsNCnR5cGVkZWYgd3hPYmplY3RMaXN0 Tm9kZSB3eE5vZGU7DQoNCg0KDQoNCg0KDQoNCmVudW0gd3hLZXlUeXBlDQp7DQogICAgd3hLRVlf Tk9ORSwNCiAgICB3eEtFWV9JTlRFR0VSLA0KICAgIHd4S0VZX1NUUklORw0KfTsNCiMgNjggIi4u Ly4uL2luY2x1ZGUvd3gvbGlzdC5oIg0KdHlwZWRlZiBpbnQgKCogd3hTb3J0Q29tcGFyZUZ1bmN0 aW9uKShjb25zdCB2b2lkICplbGVtMSwgY29uc3Qgdm9pZCAqZWxlbTIpOw0KDQoNCnR5cGVkZWYg aW50ICgqIHd4TGlzdEl0ZXJhdGVGdW5jdGlvbikodm9pZCAqY3VycmVudCk7DQoNCg0KDQoNCg0K dW5pb24gd3hMaXN0S2V5VmFsdWUNCnsNCiAgICBsb25nIGludGVnZXI7DQogICAgY2hhciAqc3Ry aW5nOw0KfTsNCg0KDQoNCg0KDQoNCg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkg d3hMaXN0S2V5DQp7DQpwdWJsaWM6DQoNCiAgICB3eExpc3RLZXkoKQ0KICAgICAgICB7IG1fa2V5 VHlwZSA9IHd4S0VZX05PTkU7IH0NCiAgICB3eExpc3RLZXkobG9uZyBpKQ0KICAgICAgICB7IG1f a2V5VHlwZSA9IHd4S0VZX0lOVEVHRVI7IG1fa2V5LmludGVnZXIgPSBpOyB9DQogICAgd3hMaXN0 S2V5KGNvbnN0IGNoYXIgKnMpDQogICAgICAgIHsgbV9rZXlUeXBlID0gd3hLRVlfU1RSSU5HOyBt X2tleS5zdHJpbmcgPSBzdHJkdXAocyk7IH0NCiAgICB3eExpc3RLZXkoY29uc3Qgd3hTdHJpbmcm IHMpDQogICAgICAgIHsgbV9rZXlUeXBlID0gd3hLRVlfU1RSSU5HOyBtX2tleS5zdHJpbmcgPSBz dHJkdXAocy5jX3N0cigpKTsgfQ0KDQoNCiAgICB3eEtleVR5cGUgR2V0S2V5VHlwZSgpIGNvbnN0 IHsgcmV0dXJuIG1fa2V5VHlwZTsgfQ0KICAgIGNvbnN0IGNoYXIgKkdldFN0cmluZygpIGNvbnN0 DQogICAgICAgIHsgaWYgKCAhKG1fa2V5VHlwZSA9PSB3eEtFWV9TVFJJTkcpICkgd3hPbkFzc2Vy dCgiLi4vLi4vaW5jbHVkZS93eC9saXN0LmgiLCAxMDUpOyByZXR1cm4gbV9rZXkuc3RyaW5nOyB9 DQogICAgbG9uZyBHZXROdW1iZXIoKSBjb25zdA0KICAgICAgICB7IGlmICggIShtX2tleVR5cGUg PT0gd3hLRVlfSU5URUdFUikgKSB3eE9uQXNzZXJ0KCIuLi8uLi9pbmNsdWRlL3d4L2xpc3QuaCIs IDEwNyk7IHJldHVybiBtX2tleS5pbnRlZ2VyOyB9DQoNCg0KDQoNCiAgICBib29sIG9wZXJhdG9y PT0od3hMaXN0S2V5VmFsdWUgdmFsdWUpIGNvbnN0IDsNCg0KDQogICAgfnd4TGlzdEtleSgpDQog ICAgew0KICAgICAgICBpZiAoIG1fa2V5VHlwZSA9PSB3eEtFWV9TVFJJTkcgKQ0KICAgICAgICAg ICAgZnJlZShtX2tleS5zdHJpbmcpOw0KICAgIH0NCg0KcHJpdmF0ZToNCiAgICB3eEtleVR5cGUg bV9rZXlUeXBlOw0KICAgIHd4TGlzdEtleVZhbHVlIG1fa2V5Ow0KfTsNCg0KDQoNCg0KDQpfX2F0 dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBleHRlcm4gd3hMaXN0S2V5IHd4RGVmYXVsdExpc3RLZXk7 DQoNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4Tm9kZUJhc2UNCnsNCmZyaWVu ZCBjbGFzcyB3eExpc3RCYXNlOw0KcHVibGljOg0KDQogICAgd3hOb2RlQmFzZSh3eExpc3RCYXNl ICpsaXN0ID0gKHd4TGlzdEJhc2UgKilfX251bGwsDQogICAgICAgICAgICAgICB3eE5vZGVCYXNl ICpwcmV2aW91cyA9ICh3eE5vZGVCYXNlICopX19udWxsLA0KICAgICAgICAgICAgICAgd3hOb2Rl QmFzZSAqbmV4dCA9ICh3eE5vZGVCYXNlICopX19udWxsLA0KICAgICAgICAgICAgICAgdm9pZCAq ZGF0YSA9IF9fbnVsbCwNCiAgICAgICAgICAgICAgIGNvbnN0IHd4TGlzdEtleSYga2V5ID0gd3hE ZWZhdWx0TGlzdEtleSk7DQoNCiAgICB2aXJ0dWFsIH53eE5vZGVCYXNlKCk7DQoNCg0KICAgIGNv bnN0IGNoYXIgKkdldEtleVN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1fa2V5LnN0cmluZzsgfQ0K ICAgIGxvbmcgR2V0S2V5SW50ZWdlcigpIGNvbnN0IHsgcmV0dXJuIG1fa2V5LmludGVnZXI7IH0N Cg0KDQogICAgdm9pZCBTZXRLZXlTdHJpbmcoY2hhciogcykgeyBtX2tleS5zdHJpbmcgPSBzOyB9 DQogICAgdm9pZCBTZXRLZXlJbnRlZ2VyKGxvbmcgaSkgeyBtX2tleS5pbnRlZ2VyID0gaTsgfQ0K DQoNCg0KICAgIHd4Tm9kZSAqTmV4dCgpIGNvbnN0IHsgcmV0dXJuICh3eE5vZGUgKilHZXROZXh0 KCk7IH0NCiAgICB3eE5vZGUgKlByZXZpb3VzKCkgY29uc3QgeyByZXR1cm4gKHd4Tm9kZSAqKUdl dFByZXZpb3VzKCk7IH0NCiAgICB3eE9iamVjdCAqRGF0YSgpIGNvbnN0IHsgcmV0dXJuICh3eE9i amVjdCAqKUdldERhdGEoKTsgfQ0KDQoNCnByb3RlY3RlZDoNCg0KICAgIHd4Tm9kZUJhc2UgKkdl dE5leHQoKSBjb25zdCB7IHJldHVybiBtX25leHQ7IH0NCiAgICB3eE5vZGVCYXNlICpHZXRQcmV2 aW91cygpIGNvbnN0IHsgcmV0dXJuIG1fcHJldmlvdXM7IH0NCg0KICAgIHZvaWQgKkdldERhdGEo KSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0NCiAgICB2b2lkIFNldERhdGEodm9pZCAqZGF0YSkg eyBtX2RhdGEgPSBkYXRhOyB9DQoNCg0KICAgIGludCBJbmRleE9mKCkgY29uc3Q7DQoNCiAgICB2 aXJ0dWFsIHZvaWQgRGVsZXRlRGF0YSgpIHsgfQ0KDQpwcml2YXRlOg0KDQogICAgd3hMaXN0S2V5 VmFsdWUgbV9rZXk7DQoNCiAgICB2b2lkICptX2RhdGE7DQogICAgd3hOb2RlQmFzZSAqbV9uZXh0 LA0KICAgICAgICAgICAgICAgICptX3ByZXZpb3VzOw0KDQogICAgd3hMaXN0QmFzZSAqbV9saXN0 Ow0KfTsNCg0KDQoNCg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hMaXN0QmFz ZSA6IHB1YmxpYyB3eE9iamVjdA0Kew0KZnJpZW5kIGNsYXNzIHd4Tm9kZUJhc2U7DQpmcmllbmQg Y2xhc3Mgd3hIYXNoVGFibGVCYXNlOw0KcHVibGljOg0KDQogICAgd3hMaXN0QmFzZSh3eEtleVR5 cGUga2V5VHlwZSA9IHd4S0VZX05PTkUpIHsgSW5pdChrZXlUeXBlKTsgfQ0KICAgIHZpcnR1YWwg fnd4TGlzdEJhc2UoKTsNCg0KDQoNCiAgICBzaXplX3QgR2V0Q291bnQoKSBjb25zdCB7IHJldHVy biBtX2NvdW50OyB9DQoNCg0KDQoNCiAgICB2b2lkIENsZWFyKCk7DQoNCg0KICAgIHZvaWQgRGVs ZXRlQ29udGVudHMoYm9vbCBkZXN0cm95KSB7IG1fZGVzdHJveSA9IGRlc3Ryb3k7IH0NCg0KDQog ICAgYm9vbCBHZXREZWxldGVDb250ZW50cygpIGNvbnN0DQogICAgICAgIHsgcmV0dXJuIG1fZGVz dHJveTsgfQ0KDQoNCiAgICB3eEtleVR5cGUgR2V0S2V5VHlwZSgpIGNvbnN0DQogICAgICAgIHsg cmV0dXJuIG1fa2V5VHlwZTsgfQ0KDQoNCiAgICB2b2lkIFNldEtleVR5cGUod3hLZXlUeXBlIGtl eVR5cGUpDQogICAgICAgIHsgaWYgKCAhKG1fY291bnQ9PTApICkgd3hPbkFzc2VydCgiLi4vLi4v aW5jbHVkZS93eC9saXN0LmgiLCAyMTgpOyBtX2tleVR5cGUgPSBrZXlUeXBlOyB9DQoNCg0KICAg IGludCBOdW1iZXIoKSBjb25zdCB7IHJldHVybiBHZXRDb3VudCgpOyB9DQogICAgd3hOb2RlICpG aXJzdCgpIGNvbnN0IHsgcmV0dXJuICh3eE5vZGUgKilHZXRGaXJzdCgpOyB9DQogICAgd3hOb2Rl ICpMYXN0KCkgY29uc3QgeyByZXR1cm4gKHd4Tm9kZSAqKUdldExhc3QoKTsgfQ0KICAgIHd4Tm9k ZSAqTnRoKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gKHd4Tm9kZSAqKUl0ZW0oaW5kZXgp OyB9DQoNCg0KcHJvdGVjdGVkOg0KDQoNCg0KDQoNCiAgICB2aXJ0dWFsIHd4Tm9kZUJhc2UgKkNy ZWF0ZU5vZGUod3hOb2RlQmFzZSAqcHJldiwgd3hOb2RlQmFzZSAqbmV4dCwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3Qgd3hMaXN0S2V5JiBrZXkgPSB3eERlZmF1bHRMaXN0S2V5KSA9 IDA7DQojIDI0NCAiLi4vLi4vaW5jbHVkZS93eC9saXN0LmgiDQogICAgd3hMaXN0QmFzZShzaXpl X3QgY291bnQsIHZvaWQgKmVsZW1lbnRzW10pOw0KDQogICAgd3hMaXN0QmFzZSh2b2lkICpvYmpl Y3QsIC4uLiApOw0KDQpwcm90ZWN0ZWQ6DQoNCiAgICB3eExpc3RCYXNlJiBvcGVyYXRvcj0oY29u c3Qgd3hMaXN0QmFzZSYgbGlzdCkNCiAgICAgICAgeyBDbGVhcigpOyBEb0NvcHkobGlzdCk7IHJl dHVybiAqdGhpczsgfQ0KDQoNCiAgICB3eE5vZGVCYXNlICpHZXRGaXJzdCgpIGNvbnN0IHsgcmV0 dXJuIG1fbm9kZUZpcnN0OyB9DQogICAgd3hOb2RlQmFzZSAqR2V0TGFzdCgpIGNvbnN0IHsgcmV0 dXJuIG1fbm9kZUxhc3Q7IH0NCg0KDQogICAgd3hOb2RlQmFzZSAqSXRlbShzaXplX3QgaW5kZXgp IGNvbnN0Ow0KDQoNCiAgICB2b2lkICpvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QNCiAg ICAgICAgeyB3eE5vZGVCYXNlICpub2RlID0gSXRlbShpbmRleCk7IHJldHVybiBub2RlID8gbm9k ZS0+R2V0RGF0YSgpIDogKHd4Tm9kZUJhc2UqKV9fbnVsbDsgfQ0KDQoNCg0KICAgIHd4Tm9kZUJh c2UgKkFwcGVuZCh2b2lkICpvYmplY3QpOw0KDQogICAgd3hOb2RlQmFzZSAqSW5zZXJ0KHZvaWQg Km9iamVjdCkgeyByZXR1cm4gSW5zZXJ0KCAod3hOb2RlQmFzZSopX19udWxsLCBvYmplY3QpOyB9 DQoNCiAgICB3eE5vZGVCYXNlICpJbnNlcnQoc2l6ZV90IHBvcywgdm9pZCAqb2JqZWN0KQ0KICAg ICAgICB7IHJldHVybiBwb3MgPT0gR2V0Q291bnQoKSA/IEFwcGVuZChvYmplY3QpDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogSW5zZXJ0KEl0ZW0ocG9zKSwgb2JqZWN0KTsg fQ0KDQogICAgd3hOb2RlQmFzZSAqSW5zZXJ0KHd4Tm9kZUJhc2UgKnByZXYsIHZvaWQgKm9iamVj dCk7DQoNCg0KICAgIHd4Tm9kZUJhc2UgKkFwcGVuZChsb25nIGtleSwgdm9pZCAqb2JqZWN0KTsN CiAgICB3eE5vZGVCYXNlICpBcHBlbmQoY29uc3QgY2hhciAqa2V5LCB2b2lkICpvYmplY3QpOw0K DQoNCg0KICAgIHd4Tm9kZUJhc2UgKkRldGFjaE5vZGUod3hOb2RlQmFzZSAqbm9kZSk7DQoNCiAg ICBib29sIERlbGV0ZU5vZGUod3hOb2RlQmFzZSAqbm9kZSk7DQoNCg0KICAgIGJvb2wgRGVsZXRl T2JqZWN0KHZvaWQgKm9iamVjdCk7DQoNCg0KDQogICAgd3hOb2RlQmFzZSAqRmluZCh2b2lkICpv YmplY3QpIGNvbnN0Ow0KDQoNCiAgICB3eE5vZGVCYXNlICpGaW5kKGNvbnN0IHd4TGlzdEtleSYg a2V5KSBjb25zdDsNCg0KDQogICAgaW50IEluZGV4T2YoIHZvaWQgKm9iamVjdCApIGNvbnN0Ow0K DQoNCg0KICAgIHZvaWQgU29ydChjb25zdCB3eFNvcnRDb21wYXJlRnVuY3Rpb24gY29tcGZ1bmMp Ow0KDQoNCiAgICB2b2lkICpGaXJzdFRoYXQod3hMaXN0SXRlcmF0ZUZ1bmN0aW9uIGZ1bmMpOw0K ICAgIHZvaWQgRm9yRWFjaCh3eExpc3RJdGVyYXRlRnVuY3Rpb24gZnVuYyk7DQogICAgdm9pZCAq TGFzdFRoYXQod3hMaXN0SXRlcmF0ZUZ1bmN0aW9uIGZ1bmMpOw0KDQpwcml2YXRlOg0KDQoNCiAg ICB2b2lkIEluaXQod3hLZXlUeXBlIGtleVR5cGUgPSB3eEtFWV9OT05FKTsNCg0KICAgIHZvaWQg RG9Db3B5KGNvbnN0IHd4TGlzdEJhc2UmIGxpc3QpOw0KDQogICAgd3hOb2RlQmFzZSAqQXBwZW5k Q29tbW9uKHd4Tm9kZUJhc2UgKm5vZGUpOw0KDQogICAgdm9pZCBEb0RlbGV0ZU5vZGUod3hOb2Rl QmFzZSAqbm9kZSk7DQoNCiAgICBzaXplX3QgbV9jb3VudDsNCiAgICBib29sIG1fZGVzdHJveTsN CiAgICB3eE5vZGVCYXNlICptX25vZGVGaXJzdCwNCiAgICAgICAgICAgICAgICptX25vZGVMYXN0 Ow0KDQogICAgd3hLZXlUeXBlIG1fa2V5VHlwZTsNCg0KcHJvdGVjdGVkOg0KDQogICAgd3hMaXN0 QmFzZShjb25zdCB3eExpc3RCYXNlJiBsaXN0KSA6IHd4T2JqZWN0KCkNCiAgICAgICAgeyBJbml0 KCk7IERvQ29weShsaXN0KTsgfQ0KfTsNCiMgNDg1ICIuLi8uLi9pbmNsdWRlL3d4L2xpc3QuaCIN CnR5cGVkZWYgaW50ICgqd3hTb3J0RnVuY0Zvcl93eE9iamVjdExpc3QpKGNvbnN0IHd4T2JqZWN0 ICoqLCBjb25zdCB3eE9iamVjdCAqKik7IGNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkp IHd4T2JqZWN0TGlzdE5vZGUgOiBwdWJsaWMgd3hOb2RlQmFzZSB7IHB1YmxpYzogd3hPYmplY3RM aXN0Tm9kZSh3eExpc3RCYXNlICpsaXN0ID0gKHd4TGlzdEJhc2UgKilfX251bGwsIHd4T2JqZWN0 TGlzdE5vZGUgKnByZXZpb3VzID0gKHd4T2JqZWN0TGlzdE5vZGUgKilfX251bGwsIHd4T2JqZWN0 TGlzdE5vZGUgKm5leHQgPSAod3hPYmplY3RMaXN0Tm9kZSAqKV9fbnVsbCwgd3hPYmplY3QgKmRh dGEgPSAod3hPYmplY3QgKilfX251bGwsIGNvbnN0IHd4TGlzdEtleSYga2V5ID0gd3hEZWZhdWx0 TGlzdEtleSkgOiB3eE5vZGVCYXNlKGxpc3QsIHByZXZpb3VzLCBuZXh0LCBkYXRhLCBrZXkpIHsg fSB3eE9iamVjdExpc3ROb2RlICpHZXROZXh0KCkgY29uc3QgeyByZXR1cm4gKHd4T2JqZWN0TGlz dE5vZGUgKil3eE5vZGVCYXNlOjpHZXROZXh0KCk7IH0gd3hPYmplY3RMaXN0Tm9kZSAqR2V0UHJl dmlvdXMoKSBjb25zdCB7IHJldHVybiAod3hPYmplY3RMaXN0Tm9kZSAqKXd4Tm9kZUJhc2U6Okdl dFByZXZpb3VzKCk7IH0gd3hPYmplY3QgKkdldERhdGEoKSBjb25zdCB7IHJldHVybiAod3hPYmpl Y3QgKil3eE5vZGVCYXNlOjpHZXREYXRhKCk7IH0gdm9pZCBTZXREYXRhKHd4T2JqZWN0ICpkYXRh KSB7IHd4Tm9kZUJhc2U6OlNldERhdGEoZGF0YSk7IH0gdmlydHVhbCB2b2lkIERlbGV0ZURhdGEo KTsgfTsgY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hPYmplY3RMaXN0IDogcHVi bGljIHd4TGlzdEJhc2UgeyBwdWJsaWM6IHR5cGVkZWYgd3hPYmplY3RMaXN0Tm9kZSBOb2RlOyB3 eE9iamVjdExpc3Qod3hLZXlUeXBlIGtleVR5cGUgPSB3eEtFWV9OT05FKSA6IHd4TGlzdEJhc2Uo a2V5VHlwZSkgeyB9IHd4T2JqZWN0TGlzdChzaXplX3QgY291bnQsIHd4T2JqZWN0ICplbGVtZW50 c1tdKSA6IHd4TGlzdEJhc2UoY291bnQsICh2b2lkICoqKWVsZW1lbnRzKSB7IH0gd3hPYmplY3RM aXN0JiBvcGVyYXRvcj0oY29uc3Qgd3hPYmplY3RMaXN0JiBsaXN0KSB7IHJldHVybiAod3hPYmpl Y3RMaXN0Jil3eExpc3RCYXNlOjpvcGVyYXRvcj0obGlzdCk7IH0gd3hPYmplY3RMaXN0Tm9kZSAq R2V0Rmlyc3QoKSBjb25zdCB7IHJldHVybiAod3hPYmplY3RMaXN0Tm9kZSAqKXd4TGlzdEJhc2U6 OkdldEZpcnN0KCk7IH0gd3hPYmplY3RMaXN0Tm9kZSAqR2V0TGFzdCgpIGNvbnN0IHsgcmV0dXJu ICh3eE9iamVjdExpc3ROb2RlICopd3hMaXN0QmFzZTo6R2V0TGFzdCgpOyB9IHd4T2JqZWN0TGlz dE5vZGUgKkl0ZW0oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiAod3hPYmplY3RMaXN0Tm9k ZSAqKXd4TGlzdEJhc2U6Okl0ZW0oaW5kZXgpOyB9IHd4T2JqZWN0ICpvcGVyYXRvcltdKHNpemVf dCBpbmRleCkgY29uc3QgeyB3eE9iamVjdExpc3ROb2RlICpub2RlID0gSXRlbShpbmRleCk7IHJl dHVybiBub2RlID8gKHd4T2JqZWN0Kikobm9kZS0+R2V0RGF0YSgpKSA6ICh3eE9iamVjdCopX19u dWxsOyB9IHd4T2JqZWN0TGlzdE5vZGUgKkFwcGVuZCh3eE9iamVjdCAqb2JqZWN0KSB7IHJldHVy biAod3hPYmplY3RMaXN0Tm9kZSAqKXd4TGlzdEJhc2U6OkFwcGVuZChvYmplY3QpOyB9IHd4T2Jq ZWN0TGlzdE5vZGUgKkluc2VydCh3eE9iamVjdCAqb2JqZWN0KSB7IHJldHVybiAod3hPYmplY3RM aXN0Tm9kZSAqKUluc2VydCgod3hPYmplY3RMaXN0Tm9kZSopX19udWxsLCBvYmplY3QpOyB9IHd4 T2JqZWN0TGlzdE5vZGUgKkluc2VydChzaXplX3QgcG9zLCB3eE9iamVjdCAqb2JqZWN0KSB7IHJl dHVybiAod3hPYmplY3RMaXN0Tm9kZSAqKXd4TGlzdEJhc2U6Okluc2VydChwb3MsIG9iamVjdCk7 IH0gd3hPYmplY3RMaXN0Tm9kZSAqSW5zZXJ0KHd4T2JqZWN0TGlzdE5vZGUgKnByZXYsIHd4T2Jq ZWN0ICpvYmplY3QpIHsgcmV0dXJuICh3eE9iamVjdExpc3ROb2RlICopd3hMaXN0QmFzZTo6SW5z ZXJ0KHByZXYsIG9iamVjdCk7IH0gd3hPYmplY3RMaXN0Tm9kZSAqQXBwZW5kKGxvbmcga2V5LCB2 b2lkICpvYmplY3QpIHsgcmV0dXJuICh3eE9iamVjdExpc3ROb2RlICopd3hMaXN0QmFzZTo6QXBw ZW5kKGtleSwgb2JqZWN0KTsgfSB3eE9iamVjdExpc3ROb2RlICpBcHBlbmQoY29uc3QgY2hhciAq a2V5LCB2b2lkICpvYmplY3QpIHsgcmV0dXJuICh3eE9iamVjdExpc3ROb2RlICopd3hMaXN0QmFz ZTo6QXBwZW5kKGtleSwgb2JqZWN0KTsgfSB3eE9iamVjdExpc3ROb2RlICpEZXRhY2hOb2RlKHd4 T2JqZWN0TGlzdE5vZGUgKm5vZGUpIHsgcmV0dXJuICh3eE9iamVjdExpc3ROb2RlICopd3hMaXN0 QmFzZTo6RGV0YWNoTm9kZShub2RlKTsgfSBib29sIERlbGV0ZU5vZGUod3hPYmplY3RMaXN0Tm9k ZSAqbm9kZSkgeyByZXR1cm4gd3hMaXN0QmFzZTo6RGVsZXRlTm9kZShub2RlKTsgfSBib29sIERl bGV0ZU9iamVjdCh3eE9iamVjdCAqb2JqZWN0KSB7IHJldHVybiB3eExpc3RCYXNlOjpEZWxldGVP YmplY3Qob2JqZWN0KTsgfSB3eE9iamVjdExpc3ROb2RlICpGaW5kKHd4T2JqZWN0ICpvYmplY3Qp IGNvbnN0IHsgcmV0dXJuICh3eE9iamVjdExpc3ROb2RlICopd3hMaXN0QmFzZTo6RmluZChvYmpl Y3QpOyB9IHZpcnR1YWwgd3hPYmplY3RMaXN0Tm9kZSAqRmluZChjb25zdCB3eExpc3RLZXkmIGtl eSkgY29uc3QgeyByZXR1cm4gKHd4T2JqZWN0TGlzdE5vZGUgKil3eExpc3RCYXNlOjpGaW5kKGtl eSk7IH0gaW50IEluZGV4T2Yod3hPYmplY3QgKm9iamVjdCkgY29uc3QgeyByZXR1cm4gd3hMaXN0 QmFzZTo6SW5kZXhPZihvYmplY3QpOyB9IHZvaWQgU29ydCh3eFNvcnRGdW5jRm9yX3d4T2JqZWN0 TGlzdCBmdW5jKSB7IHd4TGlzdEJhc2U6OlNvcnQoKHd4U29ydENvbXBhcmVGdW5jdGlvbilmdW5j KTsgfSBwcm90ZWN0ZWQ6IHd4Tm9kZUJhc2UgKkNyZWF0ZU5vZGUod3hOb2RlQmFzZSAqcHJldiwg d3hOb2RlQmFzZSAqbmV4dCwgdm9pZCAqZGF0YSwgY29uc3Qgd3hMaXN0S2V5JiBrZXkgPSB3eERl ZmF1bHRMaXN0S2V5KSB7IHJldHVybiBuZXcgd3hPYmplY3RMaXN0Tm9kZSh0aGlzLCAod3hPYmpl Y3RMaXN0Tm9kZSAqKXByZXYsICh3eE9iamVjdExpc3ROb2RlICopbmV4dCwgKHd4T2JqZWN0ICop ZGF0YSwga2V5KTsgfSB9Ow0KDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eExp c3QgOiBwdWJsaWMgd3hPYmplY3RMaXN0DQp7DQpwdWJsaWM6DQogICAgd3hMaXN0KGludCBrZXlf dHlwZSA9IHd4S0VZX05PTkUpIDogd3hPYmplY3RMaXN0KCh3eEtleVR5cGUpa2V5X3R5cGUpIHsg fQ0KDQogICAgd3hMaXN0JiBvcGVyYXRvcj0oY29uc3Qgd3hMaXN0JiBsaXN0KQ0KICAgICAgICB7 IHJldHVybiAod3hMaXN0Jil3eExpc3RCYXNlOjpvcGVyYXRvcj0obGlzdCk7IH0NCg0KDQogICAg dm9pZCBTb3J0KHd4U29ydENvbXBhcmVGdW5jdGlvbiBjb21wZnVuYykgeyB3eExpc3RCYXNlOjpT b3J0KGNvbXBmdW5jKTsgfQ0KDQogICAgd3hOb2RlICpNZW1iZXIod3hPYmplY3QgKm9iamVjdCkg Y29uc3QgeyByZXR1cm4gKHd4Tm9kZSAqKUZpbmQob2JqZWN0KTsgfQ0KfTsNCg0KDQoNCg0KDQp0 eXBlZGVmIGludCAoKnd4U29ydEZ1bmNGb3Jfd3hTdHJpbmdMaXN0QmFzZSkoY29uc3QgY2hhciAq KiwgY29uc3QgY2hhciAqKik7IGNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4U3Ry aW5nTGlzdE5vZGUgOiBwdWJsaWMgd3hOb2RlQmFzZSB7IHB1YmxpYzogd3hTdHJpbmdMaXN0Tm9k ZSh3eExpc3RCYXNlICpsaXN0ID0gKHd4TGlzdEJhc2UgKilfX251bGwsIHd4U3RyaW5nTGlzdE5v ZGUgKnByZXZpb3VzID0gKHd4U3RyaW5nTGlzdE5vZGUgKilfX251bGwsIHd4U3RyaW5nTGlzdE5v ZGUgKm5leHQgPSAod3hTdHJpbmdMaXN0Tm9kZSAqKV9fbnVsbCwgY2hhciAqZGF0YSA9IChjaGFy ICopX19udWxsLCBjb25zdCB3eExpc3RLZXkmIGtleSA9IHd4RGVmYXVsdExpc3RLZXkpIDogd3hO b2RlQmFzZShsaXN0LCBwcmV2aW91cywgbmV4dCwgZGF0YSwga2V5KSB7IH0gd3hTdHJpbmdMaXN0 Tm9kZSAqR2V0TmV4dCgpIGNvbnN0IHsgcmV0dXJuICh3eFN0cmluZ0xpc3ROb2RlICopd3hOb2Rl QmFzZTo6R2V0TmV4dCgpOyB9IHd4U3RyaW5nTGlzdE5vZGUgKkdldFByZXZpb3VzKCkgY29uc3Qg eyByZXR1cm4gKHd4U3RyaW5nTGlzdE5vZGUgKil3eE5vZGVCYXNlOjpHZXRQcmV2aW91cygpOyB9 IGNoYXIgKkdldERhdGEoKSBjb25zdCB7IHJldHVybiAoY2hhciAqKXd4Tm9kZUJhc2U6OkdldERh dGEoKTsgfSB2b2lkIFNldERhdGEoY2hhciAqZGF0YSkgeyB3eE5vZGVCYXNlOjpTZXREYXRhKGRh dGEpOyB9IHZpcnR1YWwgdm9pZCBEZWxldGVEYXRhKCk7IH07IGNsYXNzIF9fYXR0cmlidXRlX18o KGRsbGltcG9ydCkpIHd4U3RyaW5nTGlzdEJhc2UgOiBwdWJsaWMgd3hMaXN0QmFzZSB7IHB1Ymxp YzogdHlwZWRlZiB3eFN0cmluZ0xpc3ROb2RlIE5vZGU7IHd4U3RyaW5nTGlzdEJhc2Uod3hLZXlU eXBlIGtleVR5cGUgPSB3eEtFWV9OT05FKSA6IHd4TGlzdEJhc2Uoa2V5VHlwZSkgeyB9IHd4U3Ry aW5nTGlzdEJhc2Uoc2l6ZV90IGNvdW50LCBjaGFyICplbGVtZW50c1tdKSA6IHd4TGlzdEJhc2Uo Y291bnQsICh2b2lkICoqKWVsZW1lbnRzKSB7IH0gd3hTdHJpbmdMaXN0QmFzZSYgb3BlcmF0b3I9 KGNvbnN0IHd4U3RyaW5nTGlzdEJhc2UmIGxpc3QpIHsgcmV0dXJuICh3eFN0cmluZ0xpc3RCYXNl Jil3eExpc3RCYXNlOjpvcGVyYXRvcj0obGlzdCk7IH0gd3hTdHJpbmdMaXN0Tm9kZSAqR2V0Rmly c3QoKSBjb25zdCB7IHJldHVybiAod3hTdHJpbmdMaXN0Tm9kZSAqKXd4TGlzdEJhc2U6OkdldEZp cnN0KCk7IH0gd3hTdHJpbmdMaXN0Tm9kZSAqR2V0TGFzdCgpIGNvbnN0IHsgcmV0dXJuICh3eFN0 cmluZ0xpc3ROb2RlICopd3hMaXN0QmFzZTo6R2V0TGFzdCgpOyB9IHd4U3RyaW5nTGlzdE5vZGUg Kkl0ZW0oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiAod3hTdHJpbmdMaXN0Tm9kZSAqKXd4 TGlzdEJhc2U6Okl0ZW0oaW5kZXgpOyB9IGNoYXIgKm9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBj b25zdCB7IHd4U3RyaW5nTGlzdE5vZGUgKm5vZGUgPSBJdGVtKGluZGV4KTsgcmV0dXJuIG5vZGUg PyAoY2hhciopKG5vZGUtPkdldERhdGEoKSkgOiAoY2hhciopX19udWxsOyB9IHd4U3RyaW5nTGlz dE5vZGUgKkFwcGVuZChjaGFyICpvYmplY3QpIHsgcmV0dXJuICh3eFN0cmluZ0xpc3ROb2RlICop d3hMaXN0QmFzZTo6QXBwZW5kKG9iamVjdCk7IH0gd3hTdHJpbmdMaXN0Tm9kZSAqSW5zZXJ0KGNo YXIgKm9iamVjdCkgeyByZXR1cm4gKHd4U3RyaW5nTGlzdE5vZGUgKilJbnNlcnQoKHd4U3RyaW5n TGlzdE5vZGUqKV9fbnVsbCwgb2JqZWN0KTsgfSB3eFN0cmluZ0xpc3ROb2RlICpJbnNlcnQoc2l6 ZV90IHBvcywgY2hhciAqb2JqZWN0KSB7IHJldHVybiAod3hTdHJpbmdMaXN0Tm9kZSAqKXd4TGlz dEJhc2U6Okluc2VydChwb3MsIG9iamVjdCk7IH0gd3hTdHJpbmdMaXN0Tm9kZSAqSW5zZXJ0KHd4 U3RyaW5nTGlzdE5vZGUgKnByZXYsIGNoYXIgKm9iamVjdCkgeyByZXR1cm4gKHd4U3RyaW5nTGlz dE5vZGUgKil3eExpc3RCYXNlOjpJbnNlcnQocHJldiwgb2JqZWN0KTsgfSB3eFN0cmluZ0xpc3RO b2RlICpBcHBlbmQobG9uZyBrZXksIHZvaWQgKm9iamVjdCkgeyByZXR1cm4gKHd4U3RyaW5nTGlz dE5vZGUgKil3eExpc3RCYXNlOjpBcHBlbmQoa2V5LCBvYmplY3QpOyB9IHd4U3RyaW5nTGlzdE5v ZGUgKkFwcGVuZChjb25zdCBjaGFyICprZXksIHZvaWQgKm9iamVjdCkgeyByZXR1cm4gKHd4U3Ry aW5nTGlzdE5vZGUgKil3eExpc3RCYXNlOjpBcHBlbmQoa2V5LCBvYmplY3QpOyB9IHd4U3RyaW5n TGlzdE5vZGUgKkRldGFjaE5vZGUod3hTdHJpbmdMaXN0Tm9kZSAqbm9kZSkgeyByZXR1cm4gKHd4 U3RyaW5nTGlzdE5vZGUgKil3eExpc3RCYXNlOjpEZXRhY2hOb2RlKG5vZGUpOyB9IGJvb2wgRGVs ZXRlTm9kZSh3eFN0cmluZ0xpc3ROb2RlICpub2RlKSB7IHJldHVybiB3eExpc3RCYXNlOjpEZWxl dGVOb2RlKG5vZGUpOyB9IGJvb2wgRGVsZXRlT2JqZWN0KGNoYXIgKm9iamVjdCkgeyByZXR1cm4g d3hMaXN0QmFzZTo6RGVsZXRlT2JqZWN0KG9iamVjdCk7IH0gd3hTdHJpbmdMaXN0Tm9kZSAqRmlu ZChjaGFyICpvYmplY3QpIGNvbnN0IHsgcmV0dXJuICh3eFN0cmluZ0xpc3ROb2RlICopd3hMaXN0 QmFzZTo6RmluZChvYmplY3QpOyB9IHZpcnR1YWwgd3hTdHJpbmdMaXN0Tm9kZSAqRmluZChjb25z dCB3eExpc3RLZXkmIGtleSkgY29uc3QgeyByZXR1cm4gKHd4U3RyaW5nTGlzdE5vZGUgKil3eExp c3RCYXNlOjpGaW5kKGtleSk7IH0gaW50IEluZGV4T2YoY2hhciAqb2JqZWN0KSBjb25zdCB7IHJl dHVybiB3eExpc3RCYXNlOjpJbmRleE9mKG9iamVjdCk7IH0gdm9pZCBTb3J0KHd4U29ydEZ1bmNG b3Jfd3hTdHJpbmdMaXN0QmFzZSBmdW5jKSB7IHd4TGlzdEJhc2U6OlNvcnQoKHd4U29ydENvbXBh cmVGdW5jdGlvbilmdW5jKTsgfSBwcm90ZWN0ZWQ6IHd4Tm9kZUJhc2UgKkNyZWF0ZU5vZGUod3hO b2RlQmFzZSAqcHJldiwgd3hOb2RlQmFzZSAqbmV4dCwgdm9pZCAqZGF0YSwgY29uc3Qgd3hMaXN0 S2V5JiBrZXkgPSB3eERlZmF1bHRMaXN0S2V5KSB7IHJldHVybiBuZXcgd3hTdHJpbmdMaXN0Tm9k ZSh0aGlzLCAod3hTdHJpbmdMaXN0Tm9kZSAqKXByZXYsICh3eFN0cmluZ0xpc3ROb2RlICopbmV4 dCwgKGNoYXIgKilkYXRhLCBrZXkpOyB9IH07DQoNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGlt cG9ydCkpIHd4U3RyaW5nTGlzdCA6IHB1YmxpYyB3eFN0cmluZ0xpc3RCYXNlDQp7DQpwdWJsaWM6 DQoNCg0KICAgIHd4U3RyaW5nTGlzdCgpIHsgRGVsZXRlQ29udGVudHMoMSk7IH0NCiAgICB3eFN0 cmluZ0xpc3QoY29uc3QgY2hhciAqZmlyc3QgLi4uKTsNCg0KDQoNCiAgICB3eFN0cmluZ0xpc3Qo Y29uc3Qgd3hTdHJpbmdMaXN0JiBvdGhlcikgOiB3eFN0cmluZ0xpc3RCYXNlKCkNCiAgICAgICAg eyBEZWxldGVDb250ZW50cygxKTsgRG9Db3B5KG90aGVyKTsgfQ0KICAgIHd4U3RyaW5nTGlzdCYg b3BlcmF0b3I9KGNvbnN0IHd4U3RyaW5nTGlzdCYgb3RoZXIpDQogICAgICAgIHsgQ2xlYXIoKTsg RG9Db3B5KG90aGVyKTsgcmV0dXJuICp0aGlzOyB9DQoNCg0KDQogICAgd3hOb2RlICpBZGQoY29u c3QgY2hhciAqcykNCiAgICAgICAgeyByZXR1cm4gKHd4Tm9kZSAqKXd4U3RyaW5nTGlzdEJhc2U6 OkFwcGVuZChjb3B5c3RyaW5nKHMpKTsgfQ0KDQogICAgYm9vbCBEZWxldGUoY29uc3QgY2hhciAq cyk7DQoNCiAgICBjaGFyICoqTGlzdFRvQXJyYXkoYm9vbCBuZXdfY29waWVzID0gMCkgY29uc3Q7 DQogICAgYm9vbCBNZW1iZXIoY29uc3QgY2hhciAqcykgY29uc3Q7DQoNCg0KICAgIHZvaWQgU29y dCgpOw0KDQpwcml2YXRlOg0KICAgIHZvaWQgRG9Db3B5KGNvbnN0IHd4U3RyaW5nTGlzdCYpOw0K fTsNCiMgMTkgIi4uLy4uL2luY2x1ZGUvd3gvd3guaCIgMg0KIyAxICIuLi8uLi9pbmNsdWRlL3d4 L2hhc2guaCIgMQ0KIyAxNiAiLi4vLi4vaW5jbHVkZS93eC9oYXNoLmgiDQojcHJhZ21hIGludGVy ZmFjZSAiaGFzaC5oIg0KIyAzNyAiLi4vLi4vaW5jbHVkZS93eC9oYXNoLmgiDQpjbGFzcyBfX2F0 dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eEhhc2hUYWJsZUJhc2UgOiBwdWJsaWMgd3hPYmplY3QN CnsNCnB1YmxpYzoNCiAgICB3eEhhc2hUYWJsZUJhc2UoKTsNCg0KICAgIHZvaWQgQ3JlYXRlKHd4 S2V5VHlwZSBrZXlUeXBlID0gd3hLRVlfSU5URUdFUiwNCiAgICAgICAgICAgICAgICBzaXplX3Qg c2l6ZSA9ICgxMDAwKSk7DQogICAgdm9pZCBEZXN0cm95KCk7DQoNCiAgICBzaXplX3QgR2V0U2l6 ZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzaFNpemU7IH0NCiAgICBzaXplX3QgR2V0Q291bnQoKSBj b25zdCB7IHJldHVybiBtX2NvdW50OyB9DQoNCiAgICB2b2lkIERlbGV0ZUNvbnRlbnRzKGJvb2wg ZmxhZyk7DQoNCnByb3RlY3RlZDoNCg0KICAgIHd4Tm9kZUJhc2UgKkdldE5vZGUobG9uZyBrZXks IGxvbmcgdmFsdWUpIGNvbnN0Ow0KDQoNCiAgICB3eExpc3RCYXNlICoqbV9oYXNoVGFibGU7DQoN Cg0KICAgIHNpemVfdCBtX2hhc2hTaXplOw0KDQoNCiAgICB3eEtleVR5cGUgbV9rZXlUeXBlOw0K DQoNCiAgICBzaXplX3QgbV9jb3VudDsNCg0KDQogICAgYm9vbCBtX2RlbGV0ZUNvbnRlbnRzOw0K DQpwcml2YXRlOg0KDQogICAgcHJpdmF0ZTogd3hIYXNoVGFibGVCYXNlKGNvbnN0IHd4SGFzaFRh YmxlQmFzZSYpOyB3eEhhc2hUYWJsZUJhc2UmIG9wZXJhdG9yPShjb25zdCB3eEhhc2hUYWJsZUJh c2UmKTsNCn07DQoNCg0KDQoNCg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hI YXNoVGFibGVMb25nIDogcHVibGljIHd4T2JqZWN0DQp7DQpwdWJsaWM6DQogICAgd3hIYXNoVGFi bGVMb25nKHNpemVfdCBzaXplID0gKDEwMDApKSB7IEluaXQoc2l6ZSk7IH0NCiAgICB2aXJ0dWFs IH53eEhhc2hUYWJsZUxvbmcoKTsNCg0KICAgIHZvaWQgQ3JlYXRlKHNpemVfdCBzaXplID0gKDEw MDApKTsNCiAgICB2b2lkIERlc3Ryb3koKTsNCg0KICAgIHNpemVfdCBHZXRTaXplKCkgY29uc3Qg eyByZXR1cm4gbV9oYXNoU2l6ZTsgfQ0KICAgIHNpemVfdCBHZXRDb3VudCgpIGNvbnN0IHsgcmV0 dXJuIG1fY291bnQ7IH0NCg0KICAgIHZvaWQgUHV0KGxvbmcga2V5LCBsb25nIHZhbHVlKTsNCiAg ICBsb25nIEdldChsb25nIGtleSkgY29uc3Q7DQogICAgbG9uZyBEZWxldGUobG9uZyBrZXkpOw0K DQpwcm90ZWN0ZWQ6DQogICAgdm9pZCBJbml0KHNpemVfdCBzaXplKTsNCg0KcHJpdmF0ZToNCiAg ICB3eEFycmF5TG9uZyAqKm1fdmFsdWVzLA0KICAgICAgICAgICAgICAgICoqbV9rZXlzOw0KDQoN CiAgICBzaXplX3QgbV9oYXNoU2l6ZTsNCg0KDQogICAgc2l6ZV90IG1fY291bnQ7DQoNCg0KICAg IHByaXZhdGU6IHd4SGFzaFRhYmxlTG9uZyhjb25zdCB3eEhhc2hUYWJsZUxvbmcmKTsgd3hIYXNo VGFibGVMb25nJiBvcGVyYXRvcj0oY29uc3Qgd3hIYXNoVGFibGVMb25nJik7DQp9Ow0KDQoNCg0K DQoNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4SGFzaFRhYmxlIDogcHVibGlj IHd4T2JqZWN0DQp7DQpwdWJsaWM6DQogICAgaW50IG47DQogICAgaW50IGN1cnJlbnRfcG9zaXRp b247DQogICAgd3hOb2RlICpjdXJyZW50X25vZGU7DQoNCiAgICB1bnNpZ25lZCBpbnQga2V5X3R5 cGU7DQogICAgd3hMaXN0ICoqaGFzaF90YWJsZTsNCg0KICAgIHd4SGFzaFRhYmxlKGludCB0aGVf a2V5X3R5cGUgPSB3eEtFWV9JTlRFR0VSLA0KICAgICAgICAgICAgICAgIGludCBzaXplID0gKDEw MDApKTsNCiAgICB+d3hIYXNoVGFibGUoKTsNCg0KDQogICAgd3hIYXNoVGFibGUoY29uc3Qgd3hI YXNoVGFibGUmIHRhYmxlKSA6IHd4T2JqZWN0KCkgeyBEb0NvcHkodGFibGUpOyB9DQogICAgd3hI YXNoVGFibGUmIG9wZXJhdG9yPShjb25zdCB3eEhhc2hUYWJsZSYgdGFibGUpDQogICAgICAgIHsg Q2xlYXIoKTsgRG9Db3B5KHRhYmxlKTsgcmV0dXJuICp0aGlzOyB9DQoNCiAgICB2b2lkIERvQ29w eShjb25zdCB3eEhhc2hUYWJsZSYgdGFibGUpOw0KDQogICAgdm9pZCBEZXN0cm95KCk7DQoNCiAg ICBib29sIENyZWF0ZShpbnQgdGhlX2tleV90eXBlID0gd3hLRVlfSU5URUdFUiwNCiAgICAgICAg ICAgICAgICBpbnQgc2l6ZSA9ICgxMDAwKSk7DQojIDE1NSAiLi4vLi4vaW5jbHVkZS93eC9oYXNo LmgiDQogICAgdm9pZCBQdXQobG9uZyBrZXksIGxvbmcgdmFsdWUsIHd4T2JqZWN0ICpvYmplY3Qp Ow0KICAgIHZvaWQgUHV0KGxvbmcga2V5LCBjb25zdCBjaGFyICp2YWx1ZSwgd3hPYmplY3QgKm9i amVjdCk7DQoNCg0KICAgIHZvaWQgUHV0KGxvbmcgdmFsdWUsIHd4T2JqZWN0ICpvYmplY3QpOw0K ICAgIHZvaWQgUHV0KGNvbnN0IGNoYXIgKnZhbHVlLCB3eE9iamVjdCAqb2JqZWN0KTsNCg0KDQog ICAgd3hPYmplY3QgKkdldChsb25nIGtleSwgbG9uZyB2YWx1ZSkgY29uc3Q7DQogICAgd3hPYmpl Y3QgKkdldChsb25nIGtleSwgY29uc3QgY2hhciAqdmFsdWUpIGNvbnN0Ow0KDQoNCiAgICB3eE9i amVjdCAqR2V0KGxvbmcgdmFsdWUpIGNvbnN0Ow0KICAgIHd4T2JqZWN0ICpHZXQoY29uc3QgY2hh ciAqdmFsdWUpIGNvbnN0Ow0KDQoNCiAgICB3eE9iamVjdCAqRGVsZXRlKGxvbmcga2V5KTsNCiAg ICB3eE9iamVjdCAqRGVsZXRlKGNvbnN0IGNoYXIgKmtleSk7DQoNCiAgICB3eE9iamVjdCAqRGVs ZXRlKGxvbmcga2V5LCBpbnQgdmFsdWUpOw0KICAgIHd4T2JqZWN0ICpEZWxldGUobG9uZyBrZXks IGNvbnN0IGNoYXIgKnZhbHVlKTsNCg0KDQoNCiAgICBsb25nIE1ha2VLZXkoY29uc3QgY2hhciAq c3RyaW5nKSBjb25zdDsNCg0KDQoNCg0KDQogICAgdm9pZCBCZWdpbkZpbmQoKTsNCiAgICB3eE5v ZGUgKk5leHQoKTsNCg0KICAgIHZvaWQgRGVsZXRlQ29udGVudHMoYm9vbCBmbGFnKTsNCiAgICB2 b2lkIENsZWFyKCk7DQoNCg0KICAgIHNpemVfdCBHZXRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1f Y291bnQ7IH0NCg0KcHJpdmF0ZToNCiAgICBzaXplX3QgbV9jb3VudDsNCiAgICBib29sIG1fZGVs ZXRlQ29udGVudHM7DQoNCiAgICBwdWJsaWM6IHN0YXRpYyB3eENsYXNzSW5mbyBzbV9jbGFzc3d4 SGFzaFRhYmxlOyB3eENsYXNzSW5mbyAqR2V0Q2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnd4 SGFzaFRhYmxlOjpzbV9jbGFzc3d4SGFzaFRhYmxlOyB9DQp9Ow0KIyAyMCAiLi4vLi4vaW5jbHVk ZS93eC93eC5oIiAyDQoNCiMgMSAiLi4vLi4vaW5jbHVkZS93eC9pbnRsLmgiIDENCiMgMTYgIi4u Ly4uL2luY2x1ZGUvd3gvaW50bC5oIg0KI3ByYWdtYSBpbnRlcmZhY2UgImludGwuaCINCiMgNDUg Ii4uLy4uL2luY2x1ZGUvd3gvaW50bC5oIg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0 KSkgd3hMb2NhbGU7DQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eE1zZ0NhdGFs b2c7DQojIDU2ICIuLi8uLi9pbmNsdWRlL3d4L2ludGwuaCINCmNsYXNzIF9fYXR0cmlidXRlX18o KGRsbGltcG9ydCkpIHd4TG9jYWxlDQp7DQpwdWJsaWM6DQoNCg0KDQoNCiAgICB3eExvY2FsZSgp Ow0KDQogICAgd3hMb2NhbGUoY29uc3QgY2hhciAqc3pOYW1lLA0KICAgICAgICAgICAgIGNvbnN0 IGNoYXIgKnN6U2hvcnQgPSAoY29uc3QgY2hhciAqKSBfX251bGwsDQogICAgICAgICAgICAgY29u c3QgY2hhciAqc3pMb2NhbGUgPSAoY29uc3QgY2hhciAqKSBfX251bGwsDQogICAgICAgICAgICAg Ym9vbCBiTG9hZERlZmF1bHQgPSAxLA0KICAgICAgICAgICAgIGJvb2wgYkNvbnZlcnRFbmNvZGlu ZyA9IDApDQogICAgICAgIHsgSW5pdChzek5hbWUsIHN6U2hvcnQsIHN6TG9jYWxlLCBiTG9hZERl ZmF1bHQsIGJDb252ZXJ0RW5jb2RpbmcpOyB9DQoNCiAgICBib29sIEluaXQoY29uc3QgY2hhciAq c3pOYW1lLA0KICAgICAgICAgICAgICBjb25zdCBjaGFyICpzelNob3J0ID0gKGNvbnN0IGNoYXIg KikgX19udWxsLA0KICAgICAgICAgICAgICBjb25zdCBjaGFyICpzekxvY2FsZSA9IChjb25zdCBj aGFyICopIF9fbnVsbCwNCiAgICAgICAgICAgICAgYm9vbCBiTG9hZERlZmF1bHQgPSAxLA0KICAg ICAgICAgICAgICBib29sIGJDb252ZXJ0RW5jb2RpbmcgPSAwKTsNCg0KICAgIH53eExvY2FsZSgp Ow0KDQoNCiAgICBib29sIElzT2soKSBjb25zdCB7IHJldHVybiBtX3Bzek9sZExvY2FsZSAhPSBf X251bGw7IH0NCg0KDQogICAgY29uc3QgY2hhciAqR2V0TG9jYWxlKCkgY29uc3QgeyByZXR1cm4g bV9zdHJMb2NhbGU7IH0NCg0KDQoNCg0KDQoNCiAgICBzdGF0aWMgdm9pZCBBZGRDYXRhbG9nTG9v a3VwUGF0aFByZWZpeChjb25zdCB3eFN0cmluZyYgcHJlZml4KTsNCiMgMTAwICIuLi8uLi9pbmNs dWRlL3d4L2ludGwuaCINCiAgICBib29sIEFkZENhdGFsb2coY29uc3QgY2hhciAqc3pEb21haW4p Ow0KDQoNCiAgICBib29sIElzTG9hZGVkKGNvbnN0IGNoYXIgKnN6RG9tYWluKSBjb25zdDsNCiMg MTE1ICIuLi8uLi9pbmNsdWRlL3d4L2ludGwuaCINCiAgICBjb25zdCBjaGFyKiBHZXRTdHJpbmco Y29uc3QgY2hhciAqc3pPcmlnU3RyaW5nLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGNoYXIgKnN6RG9tYWluID0gKGNvbnN0IGNoYXIgKikgX19udWxsKSBjb25zdDsNCg0K DQogICAgY29uc3Qgd3hTdHJpbmcmIEdldE5hbWUoKSBjb25zdCB7IHJldHVybiBtX3N0clNob3J0 OyB9DQoNCnByaXZhdGU6DQoNCiAgICB3eE1zZ0NhdGFsb2cgKkZpbmRDYXRhbG9nKGNvbnN0IGNo YXIgKnN6RG9tYWluKSBjb25zdDsNCg0KICAgIHd4U3RyaW5nIG1fc3RyTG9jYWxlLA0KICAgICAg ICAgICAgICAgICAgIG1fc3RyU2hvcnQ7DQoNCiAgICBjb25zdCBjaGFyICptX3Bzek9sZExvY2Fs ZTsNCiAgICB3eExvY2FsZSAqbV9wT2xkTG9jYWxlOw0KDQogICAgd3hNc2dDYXRhbG9nICptX3BN c2dDYXQ7DQoNCiAgICBib29sIG1fYkNvbnZlcnRFbmNvZGluZzsNCn07DQoNCg0KDQoNCg0KDQpl eHRlcm4gX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hMb2NhbGUqIHd4R2V0TG9jYWxlKCk7 DQoNCg0KaW5saW5lIGNvbnN0IGNoYXIqIHd4R2V0VHJhbnNsYXRpb24oY29uc3QgY2hhciAqc3op DQp7DQogICAgd3hMb2NhbGUgKnBMb2MgPSB3eEdldExvY2FsZSgpOw0KICAgIGlmIChwTG9jKQ0K ICAgICAgICByZXR1cm4gcExvYy0+R2V0U3RyaW5nKHN6KTsNCiAgICBlbHNlDQogICAgICAgIHJl dHVybiAoY29uc3QgY2hhciopc3o7DQp9DQojIDIyICIuLi8uLi9pbmNsdWRlL3d4L3d4LmgiIDIN CiMgMSAiLi4vLi4vaW5jbHVkZS93eC9sb2cuaCIgMQ0KIyAxNiAiLi4vLi4vaW5jbHVkZS93eC9s b2cuaCINCiNwcmFnbWEgaW50ZXJmYWNlICJsb2cuaCINCiMgMjYgIi4uLy4uL2luY2x1ZGUvd3gv bG9nLmgiDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eFRleHRDdHJsOw0KY2xh c3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hMb2dGcmFtZTsNCmNsYXNzIF9fYXR0cmli dXRlX18oKGRsbGltcG9ydCkpIHd4RnJhbWU7DQoNCg0KDQoNCg0KdHlwZWRlZiB1bnNpZ25lZCBs b25nIHd4VHJhY2VNYXNrOw0KdHlwZWRlZiB1bnNpZ25lZCBsb25nIHd4TG9nTGV2ZWw7DQojIDUy ICIuLi8uLi9pbmNsdWRlL3d4L2xvZy5oIg0KZW51bQ0Kew0KICAgIHd4TE9HX0ZhdGFsRXJyb3Is DQogICAgd3hMT0dfRXJyb3IsDQogICAgd3hMT0dfV2FybmluZywNCiAgICB3eExPR19NZXNzYWdl LA0KICAgIHd4TE9HX0luZm8sDQogICAgd3hMT0dfU3RhdHVzLA0KICAgIHd4TE9HX0RlYnVnLA0K ICAgIHd4TE9HX1RyYWNlLA0KICAgIHd4TE9HX1Byb2dyZXNzLA0KICAgIHd4TE9HX1VzZXIgPSAx MDANCn07DQojIDkzICIuLi8uLi9pbmNsdWRlL3d4L2xvZy5oIg0KIyAxICIuLi8uLi9pbmNsdWRl L3d4L2lvc3dyYXAuaCIgMQ0KIyA5NCAiLi4vLi4vaW5jbHVkZS93eC9sb2cuaCIgMg0KDQoNCg0K DQoNCg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hMb2cNCnsNCnB1YmxpYzoN Cg0KICAgIHd4TG9nKCk7DQoNCg0KDQogICAgc3RhdGljIGJvb2wgSXNFbmFibGVkKCkgeyByZXR1 cm4gbXNfZG9Mb2c7IH0NCg0KICAgIHN0YXRpYyBib29sIEVuYWJsZUxvZ2dpbmcoYm9vbCBkb0l0 ID0gMSkNCiAgICAgICAgeyBib29sIGRvTG9nT2xkID0gbXNfZG9Mb2c7IG1zX2RvTG9nID0gZG9J dDsgcmV0dXJuIGRvTG9nT2xkOyB9DQoNCg0KDQogICAgc3RhdGljIHZvaWQgT25Mb2cod3hMb2dM ZXZlbCBsZXZlbCwgY29uc3QgY2hhciAqc3pTdHJpbmcsIHRpbWVfdCB0KQ0KICAgIHsNCiAgICAg ICAgaWYgKCBJc0VuYWJsZWQoKSApIHsNCiAgICAgICAgICAgIHd4TG9nICpwTG9nZ2VyID0gR2V0 QWN0aXZlVGFyZ2V0KCk7DQogICAgICAgICAgICBpZiAoIHBMb2dnZXIgKQ0KICAgICAgICAgICAg ICAgIHBMb2dnZXItPkRvTG9nKGxldmVsLCBzelN0cmluZywgdCk7DQogICAgICAgIH0NCiAgICB9 DQoNCg0KDQoNCg0KICAgIHZpcnR1YWwgdm9pZCBGbHVzaCgpOw0KDQoNCg0KICAgIGJvb2wgSGFz UGVuZGluZ01lc3NhZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9iSGFzTWVzc2FnZXM7IH0NCg0KDQoN CiAgICBzdGF0aWMgdm9pZCBGbHVzaEFjdGl2ZSgpDQogICAgew0KICAgICAgICBpZiAoICFtc19z dXNwZW5kQ291bnQgKQ0KICAgICAgICB7DQogICAgICAgICAgICB3eExvZyAqbG9nID0gR2V0QWN0 aXZlVGFyZ2V0KCk7DQogICAgICAgICAgICBpZiAoIGxvZyAmJiBsb2ctPkhhc1BlbmRpbmdNZXNz YWdlcygpICkNCiAgICAgICAgICAgICAgICBsb2ctPkZsdXNoKCk7DQogICAgICAgIH0NCiAgICB9 DQoNCg0KICAgIHN0YXRpYyB3eExvZyAqR2V0QWN0aXZlVGFyZ2V0KCk7DQoNCiAgICBzdGF0aWMg d3hMb2cgKlNldEFjdGl2ZVRhcmdldCh3eExvZyAqcExvZ2dlcik7DQoNCg0KDQoNCiAgICBzdGF0 aWMgdm9pZCBTdXNwZW5kKCkgeyBtc19zdXNwZW5kQ291bnQrKzsgfQ0KDQogICAgc3RhdGljIHZv aWQgUmVzdW1lKCkgeyBtc19zdXNwZW5kQ291bnQtLTsgfQ0KDQoNCg0KDQogICAgdm9pZCBTZXRW ZXJib3NlKGJvb2wgYlZlcmJvc2UgPSAxKSB7IG1fYlZlcmJvc2UgPSBiVmVyYm9zZTsgfQ0KDQoN CiAgICBzdGF0aWMgdm9pZCBEb250Q3JlYXRlT25EZW1hbmQoKSB7IG1zX2JBdXRvQ3JlYXRlID0g MDsgfQ0KDQoNCiAgICBzdGF0aWMgdm9pZCBTZXRUcmFjZU1hc2sod3hUcmFjZU1hc2sgdWxNYXNr KSB7IG1zX3VsVHJhY2VNYXNrID0gdWxNYXNrOyB9DQoNCiAgICBzdGF0aWMgdm9pZCBBZGRUcmFj ZU1hc2soY29uc3Qgd3hTdHJpbmcmIHN0cikgeyBtc19hVHJhY2VNYXNrcy5BZGQoc3RyKTsgfQ0K DQogICAgc3RhdGljIHZvaWQgUmVtb3ZlVHJhY2VNYXNrKGNvbnN0IHd4U3RyaW5nJiBzdHIpOw0K DQoNCg0KDQogICAgc3RhdGljIHZvaWQgU2V0VGltZXN0YW1wKGNvbnN0IGNoYXIgKnRzKSB7IG1z X3RpbWVzdGFtcCA9IHRzOyB9DQoNCg0KDQogICAgYm9vbCBHZXRWZXJib3NlKCkgY29uc3QgeyBy ZXR1cm4gbV9iVmVyYm9zZTsgfQ0KDQogICAgc3RhdGljIHd4VHJhY2VNYXNrIEdldFRyYWNlTWFz aygpIHsgcmV0dXJuIG1zX3VsVHJhY2VNYXNrOyB9DQoNCiAgICBzdGF0aWMgYm9vbCBJc0FsbG93 ZWRUcmFjZU1hc2soY29uc3QgY2hhciAqbWFzaykNCiAgICAgICAgeyByZXR1cm4gbXNfYVRyYWNl TWFza3MuSW5kZXgobWFzaykgIT0gKC0xKTsgfQ0KDQoNCiAgICBzdGF0aWMgY29uc3QgY2hhciAq R2V0VGltZXN0YW1wKCkgeyByZXR1cm4gbXNfdGltZXN0YW1wOyB9DQoNCg0KDQoNCiAgICBzdGF0 aWMgdm9pZCBUaW1lU3RhbXAod3hTdHJpbmcgKnN0cik7DQoNCg0KICAgIHZpcnR1YWwgfnd4TG9n KCkgeyB9DQoNCnByb3RlY3RlZDoNCiAgICBib29sIG1fYkhhc01lc3NhZ2VzOw0KICAgIGJvb2wg bV9iVmVyYm9zZTsNCg0KDQoNCg0KICAgIHZpcnR1YWwgdm9pZCBEb0xvZyh3eExvZ0xldmVsIGxl dmVsLCBjb25zdCBjaGFyICpzelN0cmluZywgdGltZV90IHQpOw0KDQoNCiAgICB2aXJ0dWFsIHZv aWQgRG9Mb2dTdHJpbmcoY29uc3QgY2hhciAqc3pTdHJpbmcsIHRpbWVfdCB0KTsNCg0KcHJpdmF0 ZToNCg0KDQoNCiAgICBzdGF0aWMgd3hMb2cgKm1zX3BMb2dnZXI7DQogICAgc3RhdGljIGJvb2wg bXNfZG9Mb2c7DQogICAgc3RhdGljIGJvb2wgbXNfYkF1dG9DcmVhdGU7DQoNCiAgICBzdGF0aWMg c2l6ZV90IG1zX3N1c3BlbmRDb3VudDsNCg0KDQoNCiAgICBzdGF0aWMgY29uc3QgY2hhciAqbXNf dGltZXN0YW1wOw0KDQogICAgc3RhdGljIHd4VHJhY2VNYXNrIG1zX3VsVHJhY2VNYXNrOw0KICAg IHN0YXRpYyB3eEFycmF5U3RyaW5nIG1zX2FUcmFjZU1hc2tzOw0KfTsNCg0KDQoNCg0KDQoNCmNs YXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4TG9nU3RkZXJyIDogcHVibGljIHd4TG9n DQp7DQpwdWJsaWM6DQoNCiAgICB3eExvZ1N0ZGVycihGSUxFICpmcCA9IChGSUxFICopIF9fbnVs bCk7DQoNCnByaXZhdGU6DQoNCiAgICB2aXJ0dWFsIHZvaWQgRG9Mb2dTdHJpbmcoY29uc3QgY2hh ciAqc3pTdHJpbmcsIHRpbWVfdCB0KTsNCg0KICAgIEZJTEUgKm1fZnA7DQp9Ow0KIyAyNzAgIi4u Ly4uL2luY2x1ZGUvd3gvbG9nLmgiDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3 eExvZ1RleHRDdHJsIDogcHVibGljIHd4TG9nDQp7DQpwdWJsaWM6DQogICAgd3hMb2dUZXh0Q3Ry bCh3eFRleHRDdHJsICpwVGV4dEN0cmwpOw0KDQpwcml2YXRlOg0KDQogICAgdmlydHVhbCB2b2lk IERvTG9nU3RyaW5nKGNvbnN0IGNoYXIgKnN6U3RyaW5nLCB0aW1lX3QgdCk7DQoNCg0KICAgIHd4 VGV4dEN0cmwgKm1fcFRleHRDdHJsOw0KfTsNCg0KDQoNCg0KY2xhc3MgX19hdHRyaWJ1dGVfXygo ZGxsaW1wb3J0KSkgd3hMb2dHdWkgOiBwdWJsaWMgd3hMb2cNCnsNCnB1YmxpYzoNCg0KICAgIHd4 TG9nR3VpKCk7DQoNCg0KICAgIHZpcnR1YWwgdm9pZCBGbHVzaCgpOw0KDQpwcm90ZWN0ZWQ6DQog ICAgdmlydHVhbCB2b2lkIERvTG9nKHd4TG9nTGV2ZWwgbGV2ZWwsIGNvbnN0IGNoYXIgKnN6U3Ry aW5nLCB0aW1lX3QgdCk7DQoNCg0KICAgIHZvaWQgQ2xlYXIoKTsNCg0KICAgIHd4QXJyYXlTdHJp bmcgbV9hTWVzc2FnZXM7DQogICAgd3hBcnJheUludCBtX2FTZXZlcml0eTsNCiAgICB3eEFycmF5 TG9uZyBtX2FUaW1lczsNCiAgICBib29sIG1fYkVycm9ycywNCiAgICAgICAgICAgICAgICAgIG1f Yldhcm5pbmdzOw0KfTsNCg0KDQoNCg0KDQoNCg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1w b3J0KSkgd3hMb2dXaW5kb3cgOiBwdWJsaWMgd3hMb2cNCnsNCnB1YmxpYzoNCiAgICB3eExvZ1dp bmRvdyh3eEZyYW1lICpwUGFyZW50LA0KICAgICAgICAgICAgY29uc3QgY2hhciAqc3pUaXRsZSwN CiAgICAgICAgICAgIGJvb2wgYlNob3cgPSAxLA0KICAgICAgICAgICAgYm9vbCBiUGFzc1RvT2xk ID0gMSk7DQogICAgfnd4TG9nV2luZG93KCk7DQoNCg0KDQogICAgdm9pZCBTaG93KGJvb2wgYlNo b3cgPSAxKTsNCg0KICAgIHd4RnJhbWUgKkdldEZyYW1lKCkgY29uc3Q7DQoNCg0KDQogICAgd3hM b2cgKkdldE9sZExvZygpIGNvbnN0IHsgcmV0dXJuIG1fcE9sZExvZzsgfQ0KDQogICAgYm9vbCBJ c1Bhc3NpbmdNZXNzYWdlcygpIGNvbnN0IHsgcmV0dXJuIG1fYlBhc3NNZXNzYWdlczsgfQ0KDQoN Cg0KDQogICAgdm9pZCBQYXNzTWVzc2FnZXMoYm9vbCBiRG9QYXNzKSB7IG1fYlBhc3NNZXNzYWdl cyA9IGJEb1Bhc3M7IH0NCg0KDQoNCiAgICB2aXJ0dWFsIHZvaWQgRmx1c2goKTsNCg0KDQoNCg0K ICAgIHZpcnR1YWwgdm9pZCBPbkZyYW1lQ3JlYXRlKHd4RnJhbWUgKmZyYW1lKTsNCg0KDQoNCg0K ICAgIHZpcnR1YWwgYm9vbCBPbkZyYW1lQ2xvc2Uod3hGcmFtZSAqZnJhbWUpOw0KDQoNCiAgICB2 aXJ0dWFsIHZvaWQgT25GcmFtZURlbGV0ZSh3eEZyYW1lICpmcmFtZSk7DQoNCnByb3RlY3RlZDoN CiAgICB2aXJ0dWFsIHZvaWQgRG9Mb2cod3hMb2dMZXZlbCBsZXZlbCwgY29uc3QgY2hhciAqc3pT dHJpbmcsIHRpbWVfdCB0KTsNCiAgICB2aXJ0dWFsIHZvaWQgRG9Mb2dTdHJpbmcoY29uc3QgY2hh ciAqc3pTdHJpbmcsIHRpbWVfdCB0KTsNCg0KcHJpdmF0ZToNCiAgICBib29sIG1fYlBhc3NNZXNz YWdlczsNCiAgICB3eExvZyAqbV9wT2xkTG9nOw0KICAgIHd4TG9nRnJhbWUgKm1fcExvZ0ZyYW1l Ow0KfTsNCiMgMzg2ICIuLi8uLi9pbmNsdWRlL3d4L2xvZy5oIg0KY2xhc3MgX19hdHRyaWJ1dGVf XygoZGxsaW1wb3J0KSkgd3hMb2dOdWxsDQp7DQpwdWJsaWM6DQogICAgd3hMb2dOdWxsKCkgeyBt X2ZsYWdPbGQgPSB3eExvZzo6RW5hYmxlTG9nZ2luZygwKTsgfQ0KICAgIH53eExvZ051bGwoKSB7 ICh2b2lkKXd4TG9nOjpFbmFibGVMb2dnaW5nKG1fZmxhZ09sZCk7IH0NCg0KcHJpdmF0ZToNCiAg ICBib29sIG1fZmxhZ09sZDsNCn07DQojIDQwOSAiLi4vLi4vaW5jbHVkZS93eC9sb2cuaCINCl9f YXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGV4dGVybiBib29sIGdfYlZlcmJvc2U7DQoNCg0KDQoN Cg0KDQpfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB1bnNpZ25lZCBsb25nIHd4U3lzRXJyb3JD b2RlKCk7DQoNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGNvbnN0IGNoYXIqIHd4U3lzRXJy b3JNc2codW5zaWduZWQgbG9uZyBuRXJyQ29kZSA9IDApOw0KIyA0MzkgIi4uLy4uL2luY2x1ZGUv d3gvbG9nLmgiDQpleHRlcm4gdm9pZCBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eExvZ0dl bmVyaWMod3hMb2dMZXZlbCBsZXZlbCwgY29uc3QgY2hhciAqc3pGb3JtYXQsIC4uLik7DQoNCg0K ZXh0ZXJuIHZvaWQgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hMb2dGYXRhbEVycm9yKGNv bnN0IGNoYXIgKnN6Rm9ybWF0LCAuLi4pOw0KZXh0ZXJuIHZvaWQgX19hdHRyaWJ1dGVfXygoZGxs aW1wb3J0KSkgd3hMb2dFcnJvcihjb25zdCBjaGFyICpzekZvcm1hdCwgLi4uKTsNCmV4dGVybiB2 b2lkIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4TG9nV2FybmluZyhjb25zdCBjaGFyICpz ekZvcm1hdCwgLi4uKTsNCmV4dGVybiB2b2lkIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4 TG9nTWVzc2FnZShjb25zdCBjaGFyICpzekZvcm1hdCwgLi4uKTsNCmV4dGVybiB2b2lkIF9fYXR0 cmlidXRlX18oKGRsbGltcG9ydCkpIHd4TG9nSW5mbyhjb25zdCBjaGFyICpzekZvcm1hdCwgLi4u KTsNCmV4dGVybiB2b2lkIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4TG9nVmVyYm9zZShj b25zdCBjaGFyICpzekZvcm1hdCwgLi4uKTsNCg0KDQoNCmV4dGVybiB2b2lkIF9fYXR0cmlidXRl X18oKGRsbGltcG9ydCkpIHd4TG9nU3RhdHVzKGNvbnN0IGNoYXIgKnN6Rm9ybWF0LCAuLi4pOw0K DQoNCg0KZXh0ZXJuIHZvaWQgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hMb2dTdGF0dXMo d3hGcmFtZSAqcEZyYW1lLCBjb25zdCBjaGFyICpzekZvcm1hdCwgLi4uKTsNCg0KDQoNCmV4dGVy biB2b2lkIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4TG9nU3lzRXJyb3IoY29uc3QgY2hh ciAqc3pGb3JtYXQsIC4uLik7DQoNCg0KDQpleHRlcm4gdm9pZCBfX2F0dHJpYnV0ZV9fKChkbGxp bXBvcnQpKSB3eExvZ1N5c0Vycm9yKGxvbmcgbEVyckNvZGUsIGNvbnN0IGNoYXIgKnN6Rm9ybWF0 LCAuLi4pOw0KDQoNCg0KICAgIGV4dGVybiB2b2lkIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkp IHd4TG9nRGVidWcoY29uc3QgY2hhciAqc3pGb3JtYXQsIC4uLik7DQoNCg0KICAgIGV4dGVybiB2 b2lkIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4TG9nVHJhY2UoY29uc3QgY2hhciAqc3pG b3JtYXQsIC4uLik7DQoNCg0KDQogICAgZXh0ZXJuIHZvaWQgX19hdHRyaWJ1dGVfXygoZGxsaW1w b3J0KSkgd3hMb2dUcmFjZShjb25zdCBjaGFyICptYXNrLCBjb25zdCBjaGFyICpzekZvcm1hdCwg Li4uKTsNCg0KDQoNCg0KICAgIGV4dGVybiB2b2lkIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkp IHd4TG9nVHJhY2Uod3hUcmFjZU1hc2sgbWFzaywgY29uc3QgY2hhciAqc3pGb3JtYXQsIC4uLik7 DQojIDIzICIuLi8uLi9pbmNsdWRlL3d4L3d4LmgiIDINCiMgMSAiLi4vLi4vaW5jbHVkZS93eC9l dmVudC5oIiAxDQojIDE2ICIuLi8uLi9pbmNsdWRlL3d4L2V2ZW50LmgiDQojcHJhZ21hIGludGVy ZmFjZSAiZXZlbnQuaCINCg0KDQoNCg0KDQoNCiMgMSAiLi4vLi4vaW5jbHVkZS93eC9nZGljbW4u aCIgMQ0KIyAyMCAiLi4vLi4vaW5jbHVkZS93eC9nZGljbW4uaCINCiNwcmFnbWEgaW50ZXJmYWNl ICJnZGljbW4uaCINCg0KDQoNCg0KDQoNCg0KIyAxICIuLi8uLi9pbmNsdWRlL3d4L2NvbG91ci5o IiAxDQoNCg0KDQoNCiMgMSAiLi4vLi4vaW5jbHVkZS93eC9tc3cvY29sb3VyLmgiIDENCiMgMTYg Ii4uLy4uL2luY2x1ZGUvd3gvbXN3L2NvbG91ci5oIg0KI3ByYWdtYSBpbnRlcmZhY2UgImNvbG91 ci5oIg0KDQoNCg0KDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eENvbG91cjog cHVibGljIHd4T2JqZWN0DQp7DQpwdWJsaWM6DQoNCg0KICB3eENvbG91cigpOw0KDQogIHd4Q29s b3VyKCB1bnNpZ25lZCBjaGFyIHJlZCwgdW5zaWduZWQgY2hhciBncmVlbiwgdW5zaWduZWQgY2hh ciBibHVlICk7DQogIHd4Q29sb3VyKCB1bnNpZ25lZCBsb25nIGNvbFJHQiApIHsgU2V0KGNvbFJH Qik7IH0NCg0KDQogIHd4Q29sb3VyKCBjb25zdCB3eFN0cmluZyAmY29sb3VyTmFtZSApIHsgSW5p dEZyb21OYW1lKGNvbG91ck5hbWUpOyB9DQogIHd4Q29sb3VyKCBjb25zdCBjaGFyICpjb2xvdXJO YW1lICkgeyBJbml0RnJvbU5hbWUoY29sb3VyTmFtZSk7IH0NCg0KDQoNCiAgd3hDb2xvdXIoIGNv bnN0IHd4Q29sb3VyJiBjb2wgKTsNCg0KICB3eENvbG91ciYgb3BlcmF0b3IgPSAoIGNvbnN0IHd4 Q29sb3VyJiBjb2wgKTsNCg0KDQogIH53eENvbG91cigpOw0KDQoNCiAgdm9pZCBTZXQoIHVuc2ln bmVkIGNoYXIgcmVkLCB1bnNpZ25lZCBjaGFyIGdyZWVuLCB1bnNpZ25lZCBjaGFyIGJsdWUgKTsN CiAgdm9pZCBTZXQodW5zaWduZWQgbG9uZyBjb2xSR0IpDQogIHsNCg0KDQogICAgU2V0KCh1bnNp Z25lZCBjaGFyKWNvbFJHQiwNCiAgICAgICAgKHVuc2lnbmVkIGNoYXIpKGNvbFJHQiA+PiA4KSwN CiAgICAgICAgKHVuc2lnbmVkIGNoYXIpKGNvbFJHQiA+PiAxNikpOw0KICB9DQoNCg0KICBib29s IE9rKCkgY29uc3Qge3JldHVybiBtX2lzSW5pdDsgfQ0KDQoNCg0KDQoNCg0KICB1bnNpZ25lZCBj aGFyIFJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVkOyB9DQogIHVuc2lnbmVkIGNoYXIgR3JlZW4o KSBjb25zdCB7IHJldHVybiBtX2dyZWVuOyB9DQogIHVuc2lnbmVkIGNoYXIgQmx1ZSgpIGNvbnN0 IHsgcmV0dXJuIG1fYmx1ZTsgfQ0KDQoNCiAgYm9vbCBvcGVyYXRvciA9PSAoY29uc3Qgd3hDb2xv dXImIGNvbG91cikgY29uc3QNCiAgew0KICAgIHJldHVybiAobV9yZWQgPT0gY29sb3VyLm1fcmVk ICYmDQogICAgICAgICAgICBtX2dyZWVuID09IGNvbG91ci5tX2dyZWVuICYmDQogICAgICAgICAg ICBtX2JsdWUgPT0gY29sb3VyLm1fYmx1ZSk7DQogIH0NCiAgYm9vbCBvcGVyYXRvciAhPSAoY29u c3Qgd3hDb2xvdXImIGNvbG91cikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBjb2xvdXIpOyB9 DQoNCiAgV1hDT0xPUlJFRiBHZXRQaXhlbCgpIGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWw7IH07DQoN CnB1YmxpYzoNCiAgV1hDT0xPUlJFRiBtX3BpeGVsOw0KDQpwcml2YXRlOg0KICBib29sIG1faXNJ bml0Ow0KICB1bnNpZ25lZCBjaGFyIG1fcmVkOw0KICB1bnNpZ25lZCBjaGFyIG1fYmx1ZTsNCiAg dW5zaWduZWQgY2hhciBtX2dyZWVuOw0KDQoNCiAgdm9pZCBJbml0RnJvbU5hbWUoY29uc3Qgd3hT dHJpbmcmIGNvbG91ck5hbWUpOw0KDQpwcml2YXRlOg0KICBwdWJsaWM6IHN0YXRpYyB3eENsYXNz SW5mbyBzbV9jbGFzc3d4Q29sb3VyOyB3eENsYXNzSW5mbyAqR2V0Q2xhc3NJbmZvKCkgY29uc3Qg eyByZXR1cm4gJnd4Q29sb3VyOjpzbV9jbGFzc3d4Q29sb3VyOyB9DQp9Ow0KIyA2ICIuLi8uLi9p bmNsdWRlL3d4L2NvbG91ci5oIiAyDQojIDI5ICIuLi8uLi9pbmNsdWRlL3d4L2dkaWNtbi5oIiAy DQojIDEgIi4uLy4uL2luY2x1ZGUvd3gvZm9udC5oIiAxDQojIDE2ICIuLi8uLi9pbmNsdWRlL3d4 L2ZvbnQuaCINCiNwcmFnbWEgaW50ZXJmYWNlICJmb250YmFzZS5oIg0KDQoNCg0KDQoNCg0KDQoj IDEgIi4uLy4uL2luY2x1ZGUvd3gvZm9udGVuYy5oIiAxDQojIDE2ICIuLi8uLi9pbmNsdWRlL3d4 L2ZvbnRlbmMuaCINCmVudW0gd3hGb250RW5jb2RpbmcNCnsNCiAgICB3eEZPTlRFTkNPRElOR19T WVNURU0gPSAtMSwNCiAgICB3eEZPTlRFTkNPRElOR19ERUZBVUxULA0KDQoNCiAgICB3eEZPTlRF TkNPRElOR19JU084ODU5XzEsDQogICAgd3hGT05URU5DT0RJTkdfSVNPODg1OV8yLA0KICAgIHd4 Rk9OVEVOQ09ESU5HX0lTTzg4NTlfMywNCiAgICB3eEZPTlRFTkNPRElOR19JU084ODU5XzQsDQog ICAgd3hGT05URU5DT0RJTkdfSVNPODg1OV81LA0KICAgIHd4Rk9OVEVOQ09ESU5HX0lTTzg4NTlf NiwNCiAgICB3eEZPTlRFTkNPRElOR19JU084ODU5XzcsDQogICAgd3hGT05URU5DT0RJTkdfSVNP ODg1OV84LA0KICAgIHd4Rk9OVEVOQ09ESU5HX0lTTzg4NTlfOSwNCiAgICB3eEZPTlRFTkNPRElO R19JU084ODU5XzEwLA0KICAgIHd4Rk9OVEVOQ09ESU5HX0lTTzg4NTlfMTEsDQogICAgd3hGT05U RU5DT0RJTkdfSVNPODg1OV8xMiwNCg0KDQogICAgd3hGT05URU5DT0RJTkdfSVNPODg1OV8xMywN CiAgICB3eEZPTlRFTkNPRElOR19JU084ODU5XzE0LA0KICAgIHd4Rk9OVEVOQ09ESU5HX0lTTzg4 NTlfMTUsDQogICAgd3hGT05URU5DT0RJTkdfSVNPODg1OV9NQVgsDQoNCg0KICAgIHd4Rk9OVEVO Q09ESU5HX0tPSTgsDQogICAgd3hGT05URU5DT0RJTkdfQUxURVJOQVRJVkUsDQogICAgd3hGT05U RU5DT0RJTkdfQlVMR0FSSUFOLA0KDQoNCg0KICAgIHd4Rk9OVEVOQ09ESU5HX0NQNDM3LA0KICAg IHd4Rk9OVEVOQ09ESU5HX0NQODUwLA0KICAgIHd4Rk9OVEVOQ09ESU5HX0NQODUyLA0KICAgIHd4 Rk9OVEVOQ09ESU5HX0NQODU1LA0KICAgIHd4Rk9OVEVOQ09ESU5HX0NQODY2LA0KDQogICAgd3hG T05URU5DT0RJTkdfQ1A4NzQsDQogICAgd3hGT05URU5DT0RJTkdfQ1AxMjUwLA0KICAgIHd4Rk9O VEVOQ09ESU5HX0NQMTI1MSwNCiAgICB3eEZPTlRFTkNPRElOR19DUDEyNTIsDQogICAgd3hGT05U RU5DT0RJTkdfQ1AxMjUzLA0KICAgIHd4Rk9OVEVOQ09ESU5HX0NQMTI1NCwNCiAgICB3eEZPTlRF TkNPRElOR19DUDEyNTUsDQogICAgd3hGT05URU5DT0RJTkdfQ1AxMjU2LA0KICAgIHd4Rk9OVEVO Q09ESU5HX0NQMTI1NywNCiAgICB3eEZPTlRFTkNPRElOR19DUDEyX01BWCwNCg0KICAgIHd4Rk9O VEVOQ09ESU5HX1VOSUNPREUsDQoNCg0KICAgIHd4Rk9OVEVOQ09ESU5HX01BWA0KfTsNCiMgMjUg Ii4uLy4uL2luY2x1ZGUvd3gvZm9udC5oIiAyDQojIDEgIi4uLy4uL2luY2x1ZGUvd3gvZ2Rpb2Jq LmgiIDENCg0KDQoNCg0KIyAxICIuLi8uLi9pbmNsdWRlL3d4L21zdy9nZGlvYmouaCIgMQ0KIyAx NiAiLi4vLi4vaW5jbHVkZS93eC9tc3cvZ2Rpb2JqLmgiDQojcHJhZ21hIGludGVyZmFjZSAiZ2Rp b2JqLmgiDQojIDI3ICIuLi8uLi9pbmNsdWRlL3d4L21zdy9nZGlvYmouaCINCmNsYXNzIF9fYXR0 cmlidXRlX18oKGRsbGltcG9ydCkpIHd4R0RJUmVmRGF0YSA6IHB1YmxpYyB3eE9iamVjdFJlZkRh dGENCnsNCg0KfTsNCg0KDQoNCg0KDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3 eEdESU9iamVjdCA6IHB1YmxpYyB3eE9iamVjdA0Kew0KcHVibGljOg0KICAgIHd4R0RJT2JqZWN0 KCkgeyBtX3Zpc2libGUgPSAwOyB9Ow0KDQoNCiAgICB2aXJ0dWFsIGJvb2wgUmVhbGl6ZVJlc291 cmNlKCkgeyByZXR1cm4gMDsgfTsNCg0KDQogICAgdmlydHVhbCBib29sIEZyZWVSZXNvdXJjZShi b29sID0gMCkgeyByZXR1cm4gMDsgfQ0KDQogICAgdmlydHVhbCBib29sIElzRnJlZSgpIGNvbnN0 IHsgcmV0dXJuIDA7IH0NCg0KICAgIGJvb2wgSXNOdWxsKCkgY29uc3QgeyByZXR1cm4gKG1fcmVm RGF0YSA9PSAwKTsgfQ0KDQoNCiAgICB2aXJ0dWFsIFdYSEFORExFIEdldFJlc291cmNlSGFuZGxl KCkgeyByZXR1cm4gMDsgfQ0KDQogICAgdmlydHVhbCBib29sIEdldFZpc2libGUoKSB7IHJldHVy biBtX3Zpc2libGU7IH0NCiAgICB2aXJ0dWFsIHZvaWQgU2V0VmlzaWJsZShib29sIHYpIHsgbV92 aXNpYmxlID0gdjsgfQ0KDQpwcm90ZWN0ZWQ6DQogICAgYm9vbCBtX3Zpc2libGU7DQoNCnByaXZh dGU6DQogICAgcHVibGljOiBzdGF0aWMgd3hDbGFzc0luZm8gc21fY2xhc3N3eEdESU9iamVjdDsg d3hDbGFzc0luZm8gKkdldENsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZ3eEdESU9iamVjdDo6 c21fY2xhc3N3eEdESU9iamVjdDsgfQ0KfTsNCiMgNiAiLi4vLi4vaW5jbHVkZS93eC9nZGlvYmou aCIgMg0KIyAyNiAiLi4vLi4vaW5jbHVkZS93eC9mb250LmgiIDINCg0KDQoNCg0KDQpjbGFzcyBf X2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eEZvbnREYXRhOw0KY2xhc3MgX19hdHRyaWJ1dGVf XygoZGxsaW1wb3J0KSkgd3hGb250QmFzZTsNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9y dCkpIHd4Rm9udDsNCg0KDQoNCg0KDQoNCmVudW0gd3hGb250RmFtaWx5DQp7DQogICAgd3hGT05U RkFNSUxZX0RFRkFVTFQgPSB3eERFRkFVTFQsDQogICAgd3hGT05URkFNSUxZX0RFQ09SQVRJVkUg PSB3eERFQ09SQVRJVkUsDQogICAgd3hGT05URkFNSUxZX1JPTUFOID0gd3hST01BTiwNCiAgICB3 eEZPTlRGQU1JTFlfU0NSSVBUID0gd3hTQ1JJUFQsDQogICAgd3hGT05URkFNSUxZX1NXSVNTID0g d3hTV0lTUywNCiAgICB3eEZPTlRGQU1JTFlfTU9ERVJOID0gd3hNT0RFUk4sDQogICAgd3hGT05U RkFNSUxZX1RFTEVUWVBFID0gd3hURUxFVFlQRSwNCiAgICB3eEZPTlRGQU1JTFlfTUFYDQp9Ow0K DQoNCmVudW0gd3hGb250U3R5bGUNCnsNCiAgICB3eEZPTlRTVFlMRV9OT1JNQUwgPSB3eE5PUk1B TCwNCiAgICB3eEZPTlRTVFlMRV9JVEFMSUMgPSB3eElUQUxJQywNCiAgICB3eEZPTlRTVFlMRV9T TEFOVCA9IHd4U0xBTlQsDQogICAgd3hGT05UU1RZTEVfTUFYDQp9Ow0KDQoNCmVudW0gd3hGb250 V2VpZ2h0DQp7DQogICAgd3hGT05UV0VJR0hUX05PUk1BTCA9IHd4Tk9STUFMLA0KICAgIHd4Rk9O VFdFSUdIVF9MSUdIVCA9IHd4TElHSFQsDQogICAgd3hGT05UV0VJR0hUX0JPTEQgPSB3eEJPTEQs DQogICAgd3hGT05UV0VJR0hUX01BWA0KfTsNCg0KDQoNCg0KDQpjbGFzcyBfX2F0dHJpYnV0ZV9f KChkbGxpbXBvcnQpKSB3eEZvbnRSZWZEYXRhOw0KDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxp bXBvcnQpKSB3eEZvbnRCYXNlIDogcHVibGljIHd4R0RJT2JqZWN0DQp7DQpwdWJsaWM6DQoNCiAg ICBzdGF0aWMgd3hGb250ICpOZXcoDQogICAgICAgIGludCBwb2ludFNpemUsDQogICAgICAgIGlu dCBmYW1pbHksDQogICAgICAgIGludCBzdHlsZSwNCiAgICAgICAgaW50IHdlaWdodCwNCiAgICAg ICAgYm9vbCB1bmRlcmxpbmVkID0gMCwNCiAgICAgICAgY29uc3Qgd3hTdHJpbmcmIGZhY2UgPSB3 eEVtcHR5U3RyaW5nLA0KICAgICAgICB3eEZvbnRFbmNvZGluZyBlbmNvZGluZyA9IHd4Rk9OVEVO Q09ESU5HX0RFRkFVTFQpOw0KDQoNCiAgICBib29sIE9rKCkgY29uc3QgeyByZXR1cm4gbV9yZWZE YXRhICE9IF9fbnVsbDsgfQ0KDQoNCiAgICBib29sIG9wZXJhdG9yID09IChjb25zdCB3eEZvbnQm IGZvbnQpIGNvbnN0Ow0KICAgIGJvb2wgb3BlcmF0b3IgIT0gKGNvbnN0IHd4Rm9udCYgZm9udCkg Y29uc3Q7DQoNCg0KICAgIHZpcnR1YWwgaW50IEdldFBvaW50U2l6ZSgpIGNvbnN0ID0gMDsNCiAg ICB2aXJ0dWFsIGludCBHZXRGYW1pbHkoKSBjb25zdCA9IDA7DQogICAgdmlydHVhbCBpbnQgR2V0 U3R5bGUoKSBjb25zdCA9IDA7DQogICAgdmlydHVhbCBpbnQgR2V0V2VpZ2h0KCkgY29uc3QgPSAw Ow0KICAgIHZpcnR1YWwgYm9vbCBHZXRVbmRlcmxpbmVkKCkgY29uc3QgPSAwOw0KICAgIHZpcnR1 YWwgd3hTdHJpbmcgR2V0RmFjZU5hbWUoKSBjb25zdCA9IDA7DQogICAgdmlydHVhbCB3eEZvbnRF bmNvZGluZyBHZXRFbmNvZGluZygpIGNvbnN0ID0gMDsNCg0KDQogICAgdmlydHVhbCB2b2lkIFNl dFBvaW50U2l6ZSggaW50IHBvaW50U2l6ZSApID0gMDsNCiAgICB2aXJ0dWFsIHZvaWQgU2V0RmFt aWx5KCBpbnQgZmFtaWx5ICkgPSAwOw0KICAgIHZpcnR1YWwgdm9pZCBTZXRTdHlsZSggaW50IHN0 eWxlICkgPSAwOw0KICAgIHZpcnR1YWwgdm9pZCBTZXRXZWlnaHQoIGludCB3ZWlnaHQgKSA9IDA7 DQogICAgdmlydHVhbCB2b2lkIFNldEZhY2VOYW1lKCBjb25zdCB3eFN0cmluZyYgZmFjZU5hbWUg KSA9IDA7DQogICAgdmlydHVhbCB2b2lkIFNldFVuZGVybGluZWQoIGJvb2wgdW5kZXJsaW5lZCAp ID0gMDsNCiAgICB2aXJ0dWFsIHZvaWQgU2V0RW5jb2Rpbmcod3hGb250RW5jb2RpbmcgZW5jb2Rp bmcpID0gMDsNCg0KDQoNCiAgICB3eFN0cmluZyBHZXRGYW1pbHlTdHJpbmcoKSBjb25zdDsNCiAg ICB3eFN0cmluZyBHZXRTdHlsZVN0cmluZygpIGNvbnN0Ow0KICAgIHd4U3RyaW5nIEdldFdlaWdo dFN0cmluZygpIGNvbnN0Ow0KDQoNCg0KICAgIHN0YXRpYyB3eEZvbnRFbmNvZGluZyBHZXREZWZh dWx0RW5jb2RpbmcoKQ0KICAgICAgICB7IHJldHVybiBtc19lbmNvZGluZ0RlZmF1bHQ7IH0NCiAg ICBzdGF0aWMgdm9pZCBTZXREZWZhdWx0RW5jb2Rpbmcod3hGb250RW5jb2RpbmcgZW5jb2Rpbmcp DQogICAgICAgIHsgbXNfZW5jb2RpbmdEZWZhdWx0ID0gZW5jb2Rpbmc7IH0NCg0KcHJvdGVjdGVk Og0KDQogICAgd3hGb250UmVmRGF0YSAqR2V0Rm9udERhdGEoKSBjb25zdA0KICAgICAgICB7IHJl dHVybiAod3hGb250UmVmRGF0YSAqKW1fcmVmRGF0YTsgfQ0KDQpwcml2YXRlOg0KDQoNCg0KDQog ICAgc3RhdGljIHd4Rm9udEVuY29kaW5nIG1zX2VuY29kaW5nRGVmYXVsdDsNCn07DQoNCg0KDQoj IDEgIi4uLy4uL2luY2x1ZGUvd3gvbXN3L2ZvbnQuaCIgMQ0KIyAxNiAiLi4vLi4vaW5jbHVkZS93 eC9tc3cvZm9udC5oIg0KI3ByYWdtYSBpbnRlcmZhY2UgImZvbnQuaCINCg0KDQoNCg0KDQoNCmNs YXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4Rm9udCA6IHB1YmxpYyB3eEZvbnRCYXNl DQp7DQpwdWJsaWM6DQoNCiAgICB3eEZvbnQoKSB7IEluaXQoKTsgfQ0KICAgIHd4Rm9udChjb25z dCB3eEZvbnQmIGZvbnQpIHsgSW5pdCgpOyBSZWYoZm9udCk7IH0NCg0KICAgIHd4Rm9udChpbnQg c2l6ZSwNCiAgICAgICAgICAgaW50IGZhbWlseSwNCiAgICAgICAgICAgaW50IHN0eWxlLA0KICAg ICAgICAgICBpbnQgd2VpZ2h0LA0KICAgICAgICAgICBib29sIHVuZGVybGluZWQgPSAwLA0KICAg ICAgICAgICBjb25zdCB3eFN0cmluZyYgZmFjZSA9IHd4RW1wdHlTdHJpbmcsDQogICAgICAgICAg IHd4Rm9udEVuY29kaW5nIGVuY29kaW5nID0gd3hGT05URU5DT0RJTkdfREVGQVVMVCkNCiAgICB7 DQogICAgICAgIEluaXQoKTsNCg0KICAgICAgICAodm9pZClDcmVhdGUoc2l6ZSwgZmFtaWx5LCBz dHlsZSwgd2VpZ2h0LCB1bmRlcmxpbmVkLCBmYWNlLCBlbmNvZGluZyk7DQogICAgfQ0KDQogICAg Ym9vbCBDcmVhdGUoaW50IHNpemUsDQogICAgICAgICAgICAgICAgaW50IGZhbWlseSwNCiAgICAg ICAgICAgICAgICBpbnQgc3R5bGUsDQogICAgICAgICAgICAgICAgaW50IHdlaWdodCwNCiAgICAg ICAgICAgICAgICBib29sIHVuZGVybGluZWQgPSAwLA0KICAgICAgICAgICAgICAgIGNvbnN0IHd4 U3RyaW5nJiBmYWNlID0gd3hFbXB0eVN0cmluZywNCiAgICAgICAgICAgICAgICB3eEZvbnRFbmNv ZGluZyBlbmNvZGluZyA9IHd4Rk9OVEVOQ09ESU5HX0RFRkFVTFQpOw0KDQogICAgdmlydHVhbCB+ d3hGb250KCk7DQoNCg0KICAgIHd4Rm9udCYgb3BlcmF0b3I9KGNvbnN0IHd4Rm9udCYgZm9udCk7 DQoNCg0KICAgIHZpcnR1YWwgaW50IEdldFBvaW50U2l6ZSgpIGNvbnN0Ow0KICAgIHZpcnR1YWwg aW50IEdldEZhbWlseSgpIGNvbnN0Ow0KICAgIHZpcnR1YWwgaW50IEdldFN0eWxlKCkgY29uc3Q7 DQogICAgdmlydHVhbCBpbnQgR2V0V2VpZ2h0KCkgY29uc3Q7DQogICAgdmlydHVhbCBib29sIEdl dFVuZGVybGluZWQoKSBjb25zdDsNCiAgICB2aXJ0dWFsIHd4U3RyaW5nIEdldEZhY2VOYW1lKCkg Y29uc3Q7DQogICAgdmlydHVhbCB3eEZvbnRFbmNvZGluZyBHZXRFbmNvZGluZygpIGNvbnN0Ow0K DQogICAgdmlydHVhbCB2b2lkIFNldFBvaW50U2l6ZShpbnQgcG9pbnRTaXplKTsNCiAgICB2aXJ0 dWFsIHZvaWQgU2V0RmFtaWx5KGludCBmYW1pbHkpOw0KICAgIHZpcnR1YWwgdm9pZCBTZXRTdHls ZShpbnQgc3R5bGUpOw0KICAgIHZpcnR1YWwgdm9pZCBTZXRXZWlnaHQoaW50IHdlaWdodCk7DQog ICAgdmlydHVhbCB2b2lkIFNldEZhY2VOYW1lKGNvbnN0IHd4U3RyaW5nJiBmYWNlTmFtZSk7DQog ICAgdmlydHVhbCB2b2lkIFNldFVuZGVybGluZWQoYm9vbCB1bmRlcmxpbmVkKTsNCiAgICB2aXJ0 dWFsIHZvaWQgU2V0RW5jb2Rpbmcod3hGb250RW5jb2RpbmcgZW5jb2RpbmcpOw0KDQoNCg0KDQog ICAgaW50IEdldEZvbnRJZCgpIGNvbnN0Ow0KICAgIHZpcnR1YWwgYm9vbCBJc0ZyZWUoKSBjb25z dDsNCiAgICB2aXJ0dWFsIGJvb2wgUmVhbGl6ZVJlc291cmNlKCk7DQogICAgdmlydHVhbCBXWEhB TkRMRSBHZXRSZXNvdXJjZUhhbmRsZSgpOw0KICAgIHZpcnR1YWwgYm9vbCBGcmVlUmVzb3VyY2Uo Ym9vbCBmb3JjZSA9IDApOw0KDQoNCg0KICAgIFdYSEZPTlQgR2V0SEZPTlQoKSBjb25zdDsNCg0K DQoNCg0KDQoNCnByb3RlY3RlZDoNCg0KICAgIHZvaWQgSW5pdCgpOw0KDQogICAgdm9pZCBVbnNo YXJlKCk7DQoNCnByaXZhdGU6DQogICAgcHVibGljOiBzdGF0aWMgd3hDbGFzc0luZm8gc21fY2xh c3N3eEZvbnQ7IHd4Q2xhc3NJbmZvICpHZXRDbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmd3hG b250OjpzbV9jbGFzc3d4Rm9udDsgfQ0KfTsNCiMgMTQzICIuLi8uLi9pbmNsdWRlL3d4L2ZvbnQu aCIgMg0KIyAzMCAiLi4vLi4vaW5jbHVkZS93eC9nZGljbW4uaCIgMg0KDQoNCg0KDQoNCmNsYXNz IF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4Qml0bWFwOw0KY2xhc3MgX19hdHRyaWJ1dGVf XygoZGxsaW1wb3J0KSkgd3hCcnVzaDsNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkp IHd4Q29sb3VyOw0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hDdXJzb3I7DQpj bGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eEZvbnQ7DQpjbGFzcyBfX2F0dHJpYnV0 ZV9fKChkbGxpbXBvcnQpKSB3eEljb247DQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQp KSB3eFBhbGV0dGU7DQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eFBlbjsNCmNs YXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4UmVnaW9uOw0KY2xhc3MgX19hdHRyaWJ1 dGVfXygoZGxsaW1wb3J0KSkgd3hTdHJpbmc7DQoNCg0KDQoNCg0KDQplbnVtDQp7DQogICAgd3hC SVRNQVBfVFlQRV9JTlZBTElELA0KICAgIHd4QklUTUFQX1RZUEVfQk1QLA0KICAgIHd4QklUTUFQ X1RZUEVfQk1QX1JFU09VUkNFLA0KICAgIHd4QklUTUFQX1RZUEVfUkVTT1VSQ0UgPSB3eEJJVE1B UF9UWVBFX0JNUF9SRVNPVVJDRSwNCiAgICB3eEJJVE1BUF9UWVBFX0lDTywNCiAgICB3eEJJVE1B UF9UWVBFX0lDT19SRVNPVVJDRSwNCiAgICB3eEJJVE1BUF9UWVBFX0NVUiwNCiAgICB3eEJJVE1B UF9UWVBFX0NVUl9SRVNPVVJDRSwNCiAgICB3eEJJVE1BUF9UWVBFX1hCTSwNCiAgICB3eEJJVE1B UF9UWVBFX1hCTV9EQVRBLA0KICAgIHd4QklUTUFQX1RZUEVfWFBNLA0KICAgIHd4QklUTUFQX1RZ UEVfWFBNX0RBVEEsDQogICAgd3hCSVRNQVBfVFlQRV9USUYsDQogICAgd3hCSVRNQVBfVFlQRV9U SUZfUkVTT1VSQ0UsDQogICAgd3hCSVRNQVBfVFlQRV9HSUYsDQogICAgd3hCSVRNQVBfVFlQRV9H SUZfUkVTT1VSQ0UsDQogICAgd3hCSVRNQVBfVFlQRV9QTkcsDQogICAgd3hCSVRNQVBfVFlQRV9Q TkdfUkVTT1VSQ0UsDQogICAgd3hCSVRNQVBfVFlQRV9KUEVHLA0KICAgIHd4QklUTUFQX1RZUEVf SlBFR19SRVNPVVJDRSwNCiAgICB3eEJJVE1BUF9UWVBFX1BOTSwNCiAgICB3eEJJVE1BUF9UWVBF X1BOTV9SRVNPVVJDRSwNCiAgICB3eEJJVE1BUF9UWVBFX1BDWCwNCiAgICB3eEJJVE1BUF9UWVBF X1BDWF9SRVNPVVJDRSwNCiAgICB3eEJJVE1BUF9UWVBFX1BJQ1QsDQogICAgd3hCSVRNQVBfVFlQ RV9QSUNUX1JFU09VUkNFLA0KICAgIHd4QklUTUFQX1RZUEVfSUNPTiwNCiAgICB3eEJJVE1BUF9U WVBFX0lDT05fUkVTT1VSQ0UsDQogICAgd3hCSVRNQVBfVFlQRV9NQUNDVVJTT1IsDQogICAgd3hC SVRNQVBfVFlQRV9NQUNDVVJTT1JfUkVTT1VSQ0UsDQogICAgd3hCSVRNQVBfVFlQRV9BTlkgPSA1 MA0KfTsNCg0KDQplbnVtIHd4U3RvY2tDdXJzb3INCnsNCiAgICB3eENVUlNPUl9OT05FLA0KICAg IHd4Q1VSU09SX0FSUk9XLA0KICAgIHd4Q1VSU09SX0JVTExTRVlFLA0KICAgIHd4Q1VSU09SX0NI QVIsDQogICAgd3hDVVJTT1JfQ1JPU1MsDQogICAgd3hDVVJTT1JfSEFORCwNCiAgICB3eENVUlNP Ul9JQkVBTSwNCiAgICB3eENVUlNPUl9MRUZUX0JVVFRPTiwNCiAgICB3eENVUlNPUl9NQUdOSUZJ RVIsDQogICAgd3hDVVJTT1JfTUlERExFX0JVVFRPTiwNCiAgICB3eENVUlNPUl9OT19FTlRSWSwN CiAgICB3eENVUlNPUl9QQUlOVF9CUlVTSCwNCiAgICB3eENVUlNPUl9QRU5DSUwsDQogICAgd3hD VVJTT1JfUE9JTlRfTEVGVCwNCiAgICB3eENVUlNPUl9QT0lOVF9SSUdIVCwNCiAgICB3eENVUlNP Ul9RVUVTVElPTl9BUlJPVywNCiAgICB3eENVUlNPUl9SSUdIVF9CVVRUT04sDQogICAgd3hDVVJT T1JfU0laRU5FU1csDQogICAgd3hDVVJTT1JfU0laRU5TLA0KICAgIHd4Q1VSU09SX1NJWkVOV1NF LA0KICAgIHd4Q1VSU09SX1NJWkVXRSwNCiAgICB3eENVUlNPUl9TSVpJTkcsDQogICAgd3hDVVJT T1JfU1BSQVlDQU4sDQogICAgd3hDVVJTT1JfV0FJVCwNCiAgICB3eENVUlNPUl9XQVRDSCwNCiAg ICB3eENVUlNPUl9CTEFOSywNCiMgMTI2ICIuLi8uLi9pbmNsdWRlL3d4L2dkaWNtbi5oIg0KICAg IHd4Q1VSU09SX01BWA0KfTsNCiMgMTg0ICIuLi8uLi9pbmNsdWRlL3d4L2dkaWNtbi5oIg0KY2xh c3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hTaXplDQp7DQpwdWJsaWM6DQoNCg0KDQog ICAgaW50IHgsIHk7DQoNCg0KICAgIHd4U2l6ZSgpIHsgeCA9IHkgPSAwOyB9DQogICAgd3hTaXpl KGludCB4eCwgaW50IHl5KSB7IFNldCh4eCwgeXkpOyB9DQoNCg0KICAgIGJvb2wgb3BlcmF0b3I9 PShjb25zdCB3eFNpemUmIHN6KSBjb25zdCB7IHJldHVybiB4ID09IHN6LnggJiYgeSA9PSBzei55 OyB9DQoNCg0KICAgIHd4U2l6ZSBvcGVyYXRvcisoY29uc3Qgd3hTaXplJiBzeikgeyByZXR1cm4g d3hTaXplKHggKyBzei54LCB5ICsgc3oueSk7IH0NCiAgICB3eFNpemUgb3BlcmF0b3ItKGNvbnN0 IHd4U2l6ZSYgc3opIHsgcmV0dXJuIHd4U2l6ZSh4IC0gc3oueCwgeSAtIHN6LnkpOyB9DQoNCg0K ICAgIHZvaWQgU2V0KGludCB4eCwgaW50IHl5KSB7IHggPSB4eDsgeSA9IHl5OyB9DQogICAgdm9p ZCBTZXRXaWR0aChpbnQgdykgeyB4ID0gdzsgfQ0KICAgIHZvaWQgU2V0SGVpZ2h0KGludCBoKSB7 IHkgPSBoOyB9DQoNCiAgICBpbnQgR2V0V2lkdGgoKSBjb25zdCB7IHJldHVybiB4OyB9DQogICAg aW50IEdldEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIHk7IH0NCg0KDQogICAgaW50IEdldFgoKSBj b25zdCB7IHJldHVybiB4OyB9DQogICAgaW50IEdldFkoKSBjb25zdCB7IHJldHVybiB5OyB9DQp9 Ow0KDQoNCg0KDQoNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4UmVhbFBvaW50 DQp7DQpwdWJsaWM6DQogICAgZG91YmxlIHg7DQogICAgZG91YmxlIHk7DQoNCiAgICB3eFJlYWxQ b2ludCgpIHsgeCA9IHkgPSAwLjA7IH07DQogICAgd3hSZWFsUG9pbnQoZG91YmxlIHh4LCBkb3Vi bGUgeXkpIHsgeCA9IHh4OyB5ID0geXk7IH07DQoNCiAgICB3eFJlYWxQb2ludCBvcGVyYXRvciso Y29uc3Qgd3hSZWFsUG9pbnQmIHB0KSBjb25zdCB7IHJldHVybiB3eFJlYWxQb2ludCh4ICsgcHQu eCwgeSArIHB0LnkpOyB9DQogICAgd3hSZWFsUG9pbnQgb3BlcmF0b3ItKGNvbnN0IHd4UmVhbFBv aW50JiBwdCkgY29uc3QgeyByZXR1cm4gd3hSZWFsUG9pbnQoeCAtIHB0LngsIHkgLSBwdC55KTsg fQ0KDQogICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHd4UmVhbFBvaW50JiBwdCkgY29uc3QgeyBy ZXR1cm4geCA9PSBwdC54ICYmIHkgPT0gcHQueTsgfQ0KfTsNCg0KY2xhc3MgX19hdHRyaWJ1dGVf XygoZGxsaW1wb3J0KSkgd3hQb2ludA0Kew0KcHVibGljOg0KICAgIGludCB4LCB5Ow0KDQogICAg d3hQb2ludCgpIHsgeCA9IHkgPSAwOyB9Ow0KICAgIHd4UG9pbnQoaW50IHh4LCBpbnQgeXkpIHsg eCA9IHh4OyB5ID0geXk7IH07DQoNCg0KDQoNCiAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qgd3hQ b2ludCYgcCkgY29uc3QgeyByZXR1cm4geCA9PSBwLnggJiYgeSA9PSBwLnk7IH0NCiAgICBib29s IG9wZXJhdG9yIT0oY29uc3Qgd3hQb2ludCYgcCkgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBw KTsgfQ0KDQoNCiAgICB3eFBvaW50IG9wZXJhdG9yKyhjb25zdCB3eFBvaW50JiBwKSBjb25zdCB7 IHJldHVybiB3eFBvaW50KHggKyBwLngsIHkgKyBwLnkpOyB9DQogICAgd3hQb2ludCBvcGVyYXRv ci0oY29uc3Qgd3hQb2ludCYgcCkgY29uc3QgeyByZXR1cm4gd3hQb2ludCh4IC0gcC54LCB5IC0g cC55KTsgfQ0KDQogICAgd3hQb2ludCYgb3BlcmF0b3IrPShjb25zdCB3eFBvaW50JiBwKSB7IHgg Kz0gcC54OyB5ICs9IHAueTsgcmV0dXJuICp0aGlzOyB9DQogICAgd3hQb2ludCYgb3BlcmF0b3It PShjb25zdCB3eFBvaW50JiBwKSB7IHggLT0gcC54OyB5IC09IHAueTsgcmV0dXJuICp0aGlzOyB9 DQp9Ow0KIyAyNjYgIi4uLy4uL2luY2x1ZGUvd3gvZ2RpY21uLmgiDQpjbGFzcyBfX2F0dHJpYnV0 ZV9fKChkbGxpbXBvcnQpKSB3eFJlY3QNCnsNCnB1YmxpYzoNCiAgICB3eFJlY3QoKSB7IHggPSB5 ID0gd2lkdGggPSBoZWlnaHQgPSAwOyB9DQogICAgd3hSZWN0KGludCB4eCwgaW50IHl5LCBpbnQg d3csIGludCBoaCkNCiAgICAgICAgeyB4ID0geHg7IHkgPSB5eTsgd2lkdGggPSB3dzsgaGVpZ2h0 ID0gaGg7IH0NCiAgICB3eFJlY3QoY29uc3Qgd3hQb2ludCYgdG9wTGVmdCwgY29uc3Qgd3hQb2lu dCYgYm90dG9tUmlnaHQpOw0KICAgIHd4UmVjdChjb25zdCB3eFBvaW50JiBwb3MsIGNvbnN0IHd4 U2l6ZSYgc2l6ZSk7DQoNCg0KDQogICAgaW50IEdldFgoKSBjb25zdCB7IHJldHVybiB4OyB9DQog ICAgdm9pZCBTZXRYKGludCB4eCkgeyB4ID0geHg7IH0NCg0KICAgIGludCBHZXRZKCkgY29uc3Qg eyByZXR1cm4geTsgfQ0KICAgIHZvaWQgU2V0WShpbnQgeXkpIHsgeSA9IHl5OyB9DQoNCiAgICBp bnQgR2V0V2lkdGgoKSBjb25zdCB7IHJldHVybiB3aWR0aDsgfQ0KICAgIHZvaWQgU2V0V2lkdGgo aW50IHcpIHsgd2lkdGggPSB3OyB9DQoNCiAgICBpbnQgR2V0SGVpZ2h0KCkgY29uc3QgeyByZXR1 cm4gaGVpZ2h0OyB9DQogICAgdm9pZCBTZXRIZWlnaHQoaW50IGgpIHsgaGVpZ2h0ID0gaDsgfQ0K DQogICAgd3hQb2ludCBHZXRQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIHd4UG9pbnQoeCwgeSk7 IH0NCiAgICB3eFNpemUgR2V0U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHd4U2l6ZSh3aWR0aCwgaGVp Z2h0KTsgfQ0KDQogICAgaW50IEdldExlZnQoKSBjb25zdCB7IHJldHVybiB4OyB9DQogICAgaW50 IEdldFRvcCgpIGNvbnN0IHsgcmV0dXJuIHk7IH0NCiAgICBpbnQgR2V0Qm90dG9tKCkgY29uc3Qg eyByZXR1cm4geSArIGhlaWdodCAtIDE7IH0NCiAgICBpbnQgR2V0UmlnaHQoKSBjb25zdCB7IHJl dHVybiB4ICsgd2lkdGggLSAxOyB9DQoNCiAgICB2b2lkIFNldExlZnQoaW50IGxlZnQpIHsgeCA9 IGxlZnQ7IH0NCiAgICB2b2lkIFNldFJpZ2h0KGludCByaWdodCkgeyB3aWR0aCA9IHJpZ2h0IC0g eCArIDE7IH0NCiAgICB2b2lkIFNldFRvcChpbnQgdG9wKSB7IHkgPSB0b3A7IH0NCiAgICB2b2lk IFNldEJvdHRvbShpbnQgYm90dG9tKSB7IGhlaWdodCA9IGJvdHRvbSAtIHkgKyAxOyB9DQoNCiAg ICB2b2lkIEluZmxhdGUod3hDb29yZCBkeCwgd3hDb29yZCBkeSkNCiAgICB7DQogICAgICAgIHgg LT0gZHg7DQogICAgICAgIHkgLT0gZHk7DQogICAgICAgIHdpZHRoICs9IDIqZHg7DQogICAgICAg IGhlaWdodCArPSAyKmR5Ow0KICAgIH0NCg0KICAgIHZvaWQgSW5mbGF0ZSh3eENvb3JkIGQpIHsg SW5mbGF0ZShkLCBkKTsgfQ0KDQogICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHd4UmVjdCYgcmVj dCkgY29uc3Q7DQogICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHd4UmVjdCYgcmVjdCkgY29uc3Qg eyByZXR1cm4gISgqdGhpcyA9PSByZWN0KTsgfQ0KDQogICAgYm9vbCBJbnNpZGUoaW50IGN4LCBp bnQgY3kpIGNvbnN0Ow0KICAgIHd4UmVjdCBvcGVyYXRvcisoY29uc3Qgd3hSZWN0JiByZWN0KSBj b25zdDsNCiAgICB3eFJlY3QmIG9wZXJhdG9yKz0oY29uc3Qgd3hSZWN0JiByZWN0KTsNCg0KcHVi bGljOg0KICAgIGludCB4LCB5LCB3aWR0aCwgaGVpZ2h0Ow0KfTsNCg0KDQoNCg0KDQp0eXBlZGVm IGNoYXIgc2lnbmVkIHd4RGFzaDsNCg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkg d3hQZW5MaXN0IDogcHVibGljIHd4TGlzdA0Kew0KICAgIHB1YmxpYzogc3RhdGljIHd4Q2xhc3NJ bmZvIHNtX2NsYXNzd3hQZW5MaXN0OyB3eENsYXNzSW5mbyAqR2V0Q2xhc3NJbmZvKCkgY29uc3Qg eyByZXR1cm4gJnd4UGVuTGlzdDo6c21fY2xhc3N3eFBlbkxpc3Q7IH0NCg0KcHVibGljOg0KICAg IHd4UGVuTGlzdCgpIHsgfQ0KICAgIH53eFBlbkxpc3QoKTsNCg0KICAgIHZvaWQgQWRkUGVuKHd4 UGVuICpwZW4pOw0KICAgIHZvaWQgUmVtb3ZlUGVuKHd4UGVuICpwZW4pOw0KICAgIHd4UGVuICpG aW5kT3JDcmVhdGVQZW4oY29uc3Qgd3hDb2xvdXImIGNvbG91ciwgaW50IHdpZHRoLCBpbnQgc3R5 bGUpOw0KfTsNCg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hCcnVzaExpc3Qg OiBwdWJsaWMgd3hMaXN0DQp7DQogICAgcHVibGljOiBzdGF0aWMgd3hDbGFzc0luZm8gc21fY2xh c3N3eEJydXNoTGlzdDsgd3hDbGFzc0luZm8gKkdldENsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJu ICZ3eEJydXNoTGlzdDo6c21fY2xhc3N3eEJydXNoTGlzdDsgfQ0KDQpwdWJsaWM6DQogICAgd3hC cnVzaExpc3QoKSB7IH0NCiAgICB+d3hCcnVzaExpc3QoKTsNCg0KICAgIHZvaWQgQWRkQnJ1c2go d3hCcnVzaCAqYnJ1c2gpOw0KICAgIHZvaWQgUmVtb3ZlQnJ1c2god3hCcnVzaCAqYnJ1c2gpOw0K ICAgIHd4QnJ1c2ggKkZpbmRPckNyZWF0ZUJydXNoKGNvbnN0IHd4Q29sb3VyJiBjb2xvdXIsIGlu dCBzdHlsZSk7DQp9Ow0KDQpfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBleHRlcm4gY29uc3Qg Y2hhciogd3hFbXB0eVN0cmluZzsNCg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkg d3hGb250TGlzdCA6IHB1YmxpYyB3eExpc3QNCnsNCiAgICBwdWJsaWM6IHN0YXRpYyB3eENsYXNz SW5mbyBzbV9jbGFzc3d4Rm9udExpc3Q7IHd4Q2xhc3NJbmZvICpHZXRDbGFzc0luZm8oKSBjb25z dCB7IHJldHVybiAmd3hGb250TGlzdDo6c21fY2xhc3N3eEZvbnRMaXN0OyB9DQoNCnB1YmxpYzoN CiAgICB3eEZvbnRMaXN0KCkgeyB9DQogICAgfnd4Rm9udExpc3QoKTsNCg0KICAgIHZvaWQgQWRk Rm9udCh3eEZvbnQgKmZvbnQpOw0KICAgIHZvaWQgUmVtb3ZlRm9udCh3eEZvbnQgKmZvbnQpOw0K ICAgIHd4Rm9udCAqRmluZE9yQ3JlYXRlRm9udChpbnQgcG9pbnRTaXplLCBpbnQgZmFtaWx5LCBp bnQgc3R5bGUsIGludCB3ZWlnaHQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg dW5kZXJsaW5lID0gMCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd3hTdHJp bmcmIGZhY2UgPSB3eEVtcHR5U3RyaW5nLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3 eEZvbnRFbmNvZGluZyBlbmNvZGluZyA9IHd4Rk9OVEVOQ09ESU5HX0RFRkFVTFQpOw0KfTsNCg0K Y2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hDb2xvdXJEYXRhYmFzZSA6IHB1Ymxp YyB3eExpc3QNCnsNCiAgICBwdWJsaWM6IHN0YXRpYyB3eENsYXNzSW5mbyBzbV9jbGFzc3d4Q29s b3VyRGF0YWJhc2U7IHd4Q2xhc3NJbmZvICpHZXRDbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAm d3hDb2xvdXJEYXRhYmFzZTo6c21fY2xhc3N3eENvbG91ckRhdGFiYXNlOyB9DQoNCnB1YmxpYzoN CiAgICB3eENvbG91ckRhdGFiYXNlKGludCB0eXBlKTsNCiAgICB+d3hDb2xvdXJEYXRhYmFzZSgp IDsNCg0KDQogICAgd3hDb2xvdXIgKkZpbmRDb2xvdXIoY29uc3Qgd3hTdHJpbmcmIGNvbG91cikg Ow0KICAgIHd4U3RyaW5nIEZpbmROYW1lKGNvbnN0IHd4Q29sb3VyJiBjb2xvdXIpIGNvbnN0Ow0K ICAgIHZvaWQgSW5pdGlhbGl6ZSgpOw0KfTsNCg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1w b3J0KSkgd3hCaXRtYXBMaXN0IDogcHVibGljIHd4TGlzdA0Kew0KICAgIHB1YmxpYzogc3RhdGlj IHd4Q2xhc3NJbmZvIHNtX2NsYXNzd3hCaXRtYXBMaXN0OyB3eENsYXNzSW5mbyAqR2V0Q2xhc3NJ bmZvKCkgY29uc3QgeyByZXR1cm4gJnd4Qml0bWFwTGlzdDo6c21fY2xhc3N3eEJpdG1hcExpc3Q7 IH0NCg0KcHVibGljOg0KICAgIHd4Qml0bWFwTGlzdCgpOw0KICAgIH53eEJpdG1hcExpc3QoKTsN Cg0KICAgIHZvaWQgQWRkQml0bWFwKHd4Qml0bWFwICpiaXRtYXApOw0KICAgIHZvaWQgUmVtb3Zl Qml0bWFwKHd4Qml0bWFwICpiaXRtYXApOw0KfTsNCg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxs aW1wb3J0KSkgd3hSZXNvdXJjZUNhY2hlOiBwdWJsaWMgd3hMaXN0DQp7DQpwdWJsaWM6DQogICAg d3hSZXNvdXJjZUNhY2hlKCkgeyB9DQogICAgd3hSZXNvdXJjZUNhY2hlKGNvbnN0IHVuc2lnbmVk IGludCBrZXlUeXBlKSA6IHd4TGlzdChrZXlUeXBlKSB7IH0NCiAgICB+d3hSZXNvdXJjZUNhY2hl KCk7DQoNCnByaXZhdGU6DQogICAgcHVibGljOiBzdGF0aWMgd3hDbGFzc0luZm8gc21fY2xhc3N3 eFJlc291cmNlQ2FjaGU7IHd4Q2xhc3NJbmZvICpHZXRDbGFzc0luZm8oKSBjb25zdCB7IHJldHVy biAmd3hSZXNvdXJjZUNhY2hlOjpzbV9jbGFzc3d4UmVzb3VyY2VDYWNoZTsgfQ0KfTsNCg0KDQoN Cg0KDQoNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGV4dGVybiB3eFBlbkxpc3QqIHd4VGhl UGVuTGlzdDsNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGV4dGVybiB3eEJydXNoTGlzdCog d3hUaGVCcnVzaExpc3Q7DQpfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBleHRlcm4gd3hGb250 TGlzdCogd3hUaGVGb250TGlzdDsNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGV4dGVybiB3 eEJpdG1hcExpc3QqIHd4VGhlQml0bWFwTGlzdDsNCg0KDQpfX2F0dHJpYnV0ZV9fKChkbGxpbXBv cnQpKSBleHRlcm4gd3hGb250KiB3eE5PUk1BTF9GT05UOw0KX19hdHRyaWJ1dGVfXygoZGxsaW1w b3J0KSkgZXh0ZXJuIHd4Rm9udCogd3hTTUFMTF9GT05UOw0KX19hdHRyaWJ1dGVfXygoZGxsaW1w b3J0KSkgZXh0ZXJuIHd4Rm9udCogd3hJVEFMSUNfRk9OVDsNCl9fYXR0cmlidXRlX18oKGRsbGlt cG9ydCkpIGV4dGVybiB3eEZvbnQqIHd4U1dJU1NfRk9OVDsNCg0KX19hdHRyaWJ1dGVfXygoZGxs aW1wb3J0KSkgZXh0ZXJuIHd4UGVuKiB3eFJFRF9QRU47DQpfX2F0dHJpYnV0ZV9fKChkbGxpbXBv cnQpKSBleHRlcm4gd3hQZW4qIHd4Q1lBTl9QRU47DQpfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQp KSBleHRlcm4gd3hQZW4qIHd4R1JFRU5fUEVOOw0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkg ZXh0ZXJuIHd4UGVuKiB3eEJMQUNLX1BFTjsNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGV4 dGVybiB3eFBlbiogd3hXSElURV9QRU47DQpfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBleHRl cm4gd3hQZW4qIHd4VFJBTlNQQVJFTlRfUEVOOw0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkg ZXh0ZXJuIHd4UGVuKiB3eEJMQUNLX0RBU0hFRF9QRU47DQpfX2F0dHJpYnV0ZV9fKChkbGxpbXBv cnQpKSBleHRlcm4gd3hQZW4qIHd4R1JFWV9QRU47DQpfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQp KSBleHRlcm4gd3hQZW4qIHd4TUVESVVNX0dSRVlfUEVOOw0KX19hdHRyaWJ1dGVfXygoZGxsaW1w b3J0KSkgZXh0ZXJuIHd4UGVuKiB3eExJR0hUX0dSRVlfUEVOOw0KDQpfX2F0dHJpYnV0ZV9fKChk bGxpbXBvcnQpKSBleHRlcm4gd3hCcnVzaCogd3hCTFVFX0JSVVNIOw0KX19hdHRyaWJ1dGVfXygo ZGxsaW1wb3J0KSkgZXh0ZXJuIHd4QnJ1c2gqIHd4R1JFRU5fQlJVU0g7DQpfX2F0dHJpYnV0ZV9f KChkbGxpbXBvcnQpKSBleHRlcm4gd3hCcnVzaCogd3hXSElURV9CUlVTSDsNCl9fYXR0cmlidXRl X18oKGRsbGltcG9ydCkpIGV4dGVybiB3eEJydXNoKiB3eEJMQUNLX0JSVVNIOw0KX19hdHRyaWJ1 dGVfXygoZGxsaW1wb3J0KSkgZXh0ZXJuIHd4QnJ1c2gqIHd4R1JFWV9CUlVTSDsNCl9fYXR0cmli dXRlX18oKGRsbGltcG9ydCkpIGV4dGVybiB3eEJydXNoKiB3eE1FRElVTV9HUkVZX0JSVVNIOw0K X19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgZXh0ZXJuIHd4QnJ1c2gqIHd4TElHSFRfR1JFWV9C UlVTSDsNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGV4dGVybiB3eEJydXNoKiB3eFRSQU5T UEFSRU5UX0JSVVNIOw0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgZXh0ZXJuIHd4QnJ1c2gq IHd4Q1lBTl9CUlVTSDsNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGV4dGVybiB3eEJydXNo KiB3eFJFRF9CUlVTSDsNCg0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgZXh0ZXJuIHd4Q29s b3VyKiB3eEJMQUNLOw0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgZXh0ZXJuIHd4Q29sb3Vy KiB3eFdISVRFOw0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgZXh0ZXJuIHd4Q29sb3VyKiB3 eFJFRDsNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGV4dGVybiB3eENvbG91ciogd3hCTFVF Ow0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgZXh0ZXJuIHd4Q29sb3VyKiB3eEdSRUVOOw0K X19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgZXh0ZXJuIHd4Q29sb3VyKiB3eENZQU47DQpfX2F0 dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBleHRlcm4gd3hDb2xvdXIqIHd4TElHSFRfR1JFWTsNCg0K DQpfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBleHRlcm4gd3hCaXRtYXAgd3hOdWxsQml0bWFw Ow0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgZXh0ZXJuIHd4SWNvbiB3eE51bGxJY29uOw0K X19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgZXh0ZXJuIHd4Q3Vyc29yIHd4TnVsbEN1cnNvcjsN Cl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGV4dGVybiB3eFBlbiB3eE51bGxQZW47DQpfX2F0 dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBleHRlcm4gd3hCcnVzaCB3eE51bGxCcnVzaDsNCl9fYXR0 cmlidXRlX18oKGRsbGltcG9ydCkpIGV4dGVybiB3eFBhbGV0dGUgd3hOdWxsUGFsZXR0ZTsNCl9f YXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGV4dGVybiB3eEZvbnQgd3hOdWxsRm9udDsNCl9fYXR0 cmlidXRlX18oKGRsbGltcG9ydCkpIGV4dGVybiB3eENvbG91ciB3eE51bGxDb2xvdXI7DQoNCg0K X19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgZXh0ZXJuIHd4Q3Vyc29yKiB3eFNUQU5EQVJEX0NV UlNPUjsNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGV4dGVybiB3eEN1cnNvciogd3hIT1VS R0xBU1NfQ1VSU09SOw0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgZXh0ZXJuIHd4Q3Vyc29y KiB3eENST1NTX0NVUlNPUjsNCg0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgZXh0ZXJuIHd4 Q29sb3VyRGF0YWJhc2UqIHd4VGhlQ29sb3VyRGF0YWJhc2U7DQoNCl9fYXR0cmlidXRlX18oKGRs bGltcG9ydCkpIGV4dGVybiBjb25zdCBjaGFyKiB3eFBhbmVsTmFtZVN0cjsNCg0KX19hdHRyaWJ1 dGVfXygoZGxsaW1wb3J0KSkgZXh0ZXJuIGNvbnN0IHd4U2l6ZSB3eERlZmF1bHRTaXplOw0KX19h dHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgZXh0ZXJuIGNvbnN0IHd4UG9pbnQgd3hEZWZhdWx0UG9z aXRpb247DQoNCg0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgZXh0ZXJuIHd4TGlzdCB3eFBl bmRpbmdEZWxldGU7DQoNCg0KDQoNCg0KDQpleHRlcm4gdm9pZCBfX2F0dHJpYnV0ZV9fKChkbGxp bXBvcnQpKSB3eEluaXRpYWxpemVTdG9ja09iamVjdHMoKTsNCmV4dGVybiB2b2lkIF9fYXR0cmli dXRlX18oKGRsbGltcG9ydCkpIHd4SW5pdGlhbGl6ZVN0b2NrTGlzdHMoKTsNCmV4dGVybiB2b2lk IF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4RGVsZXRlU3RvY2tPYmplY3RzKCk7DQpleHRl cm4gdm9pZCBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eERlbGV0ZVN0b2NrTGlzdHMoKTsN Cg0KDQpleHRlcm4gYm9vbCBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eENvbG91ckRpc3Bs YXkoKTsNCg0KDQpleHRlcm4gaW50IF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4RGlzcGxh eURlcHRoKCk7DQoNCg0KDQpleHRlcm4gdm9pZCBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3 eERpc3BsYXlTaXplKGludCAqd2lkdGgsIGludCAqaGVpZ2h0KTsNCmV4dGVybiB3eFNpemUgX19h dHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hHZXREaXNwbGF5U2l6ZSgpOw0KDQoNCmV4dGVybiB2 b2lkIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4U2V0Q3Vyc29yKGNvbnN0IHd4Q3Vyc29y JiBjdXJzb3IpOw0KIyAyNCAiLi4vLi4vaW5jbHVkZS93eC9ldmVudC5oIiAyDQojIDEgIi4uLy4u L2luY2x1ZGUvd3gvY3Vyc29yLmgiIDENCg0KDQoNCg0KIyAxICIuLi8uLi9pbmNsdWRlL3d4L21z dy9jdXJzb3IuaCIgMQ0KIyAxNiAiLi4vLi4vaW5jbHVkZS93eC9tc3cvY3Vyc29yLmgiDQojcHJh Z21hIGludGVyZmFjZSAiY3Vyc29yLmgiDQojIDMxICIuLi8uLi9pbmNsdWRlL3d4L21zdy9jdXJz b3IuaCINCiMgMSAiLi4vLi4vaW5jbHVkZS93eC9tc3cvZ2RpaW1hZ2UuaCIgMQ0KIyAyMCAiLi4v Li4vaW5jbHVkZS93eC9tc3cvZ2RpaW1hZ2UuaCINCiNwcmFnbWEgaW50ZXJmYWNlICJnZGlpbWFn ZS5oIg0KDQoNCg0KDQoNCg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hHRElJ bWFnZVJlZkRhdGE7DQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eEdESUltYWdl SGFuZGxlcjsNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4R0RJSW1hZ2U7DQoN Cg0KDQoNCg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hHRElJbWFnZVJlZkRh dGEgOiBwdWJsaWMgd3hHRElSZWZEYXRhDQp7DQpwdWJsaWM6DQogICAgd3hHRElJbWFnZVJlZkRh dGEoKQ0KICAgIHsNCiAgICAgICAgbV93aWR0aCA9IG1faGVpZ2h0ID0gbV9kZXB0aCA9IDA7DQoN CiAgICAgICAgbV9oYW5kbGUgPSAwOw0KDQoNCg0KDQogICAgfQ0KDQoNCiAgICBib29sIElzT2so KSBjb25zdCB7IHJldHVybiBtX2hhbmRsZSAhPSAwOyB9DQoNCiAgICB2b2lkIFNldFNpemUoaW50 IHcsIGludCBoKSB7IG1fd2lkdGggPSB3OyBtX2hlaWdodCA9IGg7IH0NCg0KDQogICAgdmlydHVh bCB2b2lkIEZyZWUoKSA9IDA7DQoNCg0KDQoNCiAgICBpbnQgbV93aWR0aCwgbV9oZWlnaHQ7DQoN Cg0KICAgIGludCBtX2RlcHRoOw0KDQoNCiAgICB1bmlvbg0KICAgIHsNCiAgICAgICAgV1hIQU5E TEUgbV9oYW5kbGU7DQogICAgICAgIFdYSEJJVE1BUCBtX2hCaXRtYXA7DQogICAgICAgIFdYSElD T04gbV9oSWNvbjsNCiAgICAgICAgV1hIQ1VSU09SIG1faEN1cnNvcjsNCiAgICB9Ow0KIyA4MSAi Li4vLi4vaW5jbHVkZS93eC9tc3cvZ2RpaW1hZ2UuaCINCn07DQoNCg0KDQoNCg0KY2xhc3MgX19h dHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hHRElJbWFnZUhhbmRsZXIgOiBwdWJsaWMgd3hPYmpl Y3QNCnsNCnB1YmxpYzoNCg0KICAgIHd4R0RJSW1hZ2VIYW5kbGVyKCkgeyBtX3R5cGUgPSB3eEJJ VE1BUF9UWVBFX0lOVkFMSUQ7IH0NCiAgICB3eEdESUltYWdlSGFuZGxlcihjb25zdCB3eFN0cmlu ZyYgbmFtZSwNCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3eFN0cmluZyYgZXh0LA0KICAg ICAgICAgICAgICAgICAgICAgIGxvbmcgdHlwZSkNCiAgICAgICAgOiBtX25hbWUobmFtZSksIG1f ZXh0ZW5zaW9uKGV4dCkNCiAgICB7DQogICAgICAgIG1fdHlwZSA9IHR5cGU7DQogICAgfQ0KDQoN CiAgICB2b2lkIFNldE5hbWUoY29uc3Qgd3hTdHJpbmcmIG5hbWUpIHsgbV9uYW1lID0gbmFtZTsg fQ0KICAgIHZvaWQgU2V0RXh0ZW5zaW9uKGNvbnN0IHd4U3RyaW5nJiBleHQpIHsgbV9leHRlbnNp b24gPSBleHQ7IH0NCiAgICB2b2lkIFNldFR5cGUobG9uZyB0eXBlKSB7IG1fdHlwZSA9IHR5cGU7 IH0NCg0KICAgIHd4U3RyaW5nIEdldE5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0NCiAg ICB3eFN0cmluZyBHZXRFeHRlbnNpb24oKSBjb25zdCB7IHJldHVybiBtX2V4dGVuc2lvbjsgfQ0K ICAgIGxvbmcgR2V0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQ0KDQoNCiAgICB2aXJ0 dWFsIGJvb2wgQ3JlYXRlKHd4R0RJSW1hZ2UgKmltYWdlLA0KICAgICAgICAgICAgICAgICAgICAg ICAgdm9pZCAqZGF0YSwNCiAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MsDQogICAg ICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBkZXB0aCA9IDEp ID0gMDsNCiAgICB2aXJ0dWFsIGJvb2wgTG9hZCh3eEdESUltYWdlICppbWFnZSwNCiAgICAgICAg ICAgICAgICAgICAgICBjb25zdCB3eFN0cmluZyYgbmFtZSwNCiAgICAgICAgICAgICAgICAgICAg ICBsb25nIGZsYWdzLA0KICAgICAgICAgICAgICAgICAgICAgIGludCBkZXNpcmVkV2lkdGgsIGlu dCBkZXNpcmVkSGVpZ2h0KSA9IDA7DQogICAgdmlydHVhbCBib29sIFNhdmUod3hHRElJbWFnZSAq aW1hZ2UsDQogICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd3hTdHJpbmcmIG5hbWUsDQogICAg ICAgICAgICAgICAgICAgICAgaW50IHR5cGUpID0gMDsNCg0KcHJvdGVjdGVkOg0KICAgIHd4U3Ry aW5nIG1fbmFtZTsNCiAgICB3eFN0cmluZyBtX2V4dGVuc2lvbjsNCiAgICBsb25nIG1fdHlwZTsN Cn07DQoNCg0KDQoNCg0KDQoNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4R0RJ SW1hZ2UgOiBwdWJsaWMgd3hHRElPYmplY3QNCnsNCnB1YmxpYzoNCg0KICAgIHN0YXRpYyB3eExp c3QmIEdldEhhbmRsZXJzKCkgeyByZXR1cm4gbXNfaGFuZGxlcnM7IH0NCg0KICAgIHN0YXRpYyB2 b2lkIEFkZEhhbmRsZXIod3hHRElJbWFnZUhhbmRsZXIgKmhhbmRsZXIpOw0KICAgIHN0YXRpYyB2 b2lkIEluc2VydEhhbmRsZXIod3hHRElJbWFnZUhhbmRsZXIgKmhhbmRsZXIpOw0KICAgIHN0YXRp YyBib29sIFJlbW92ZUhhbmRsZXIoY29uc3Qgd3hTdHJpbmcmIG5hbWUpOw0KDQogICAgc3RhdGlj IHd4R0RJSW1hZ2VIYW5kbGVyICpGaW5kSGFuZGxlcihjb25zdCB3eFN0cmluZyYgbmFtZSk7DQog ICAgc3RhdGljIHd4R0RJSW1hZ2VIYW5kbGVyICpGaW5kSGFuZGxlcihjb25zdCB3eFN0cmluZyYg ZXh0ZW5zaW9uLCBsb25nIHR5cGUpOw0KICAgIHN0YXRpYyB3eEdESUltYWdlSGFuZGxlciAqRmlu ZEhhbmRsZXIobG9uZyB0eXBlKTsNCg0KICAgIHN0YXRpYyB2b2lkIEluaXRTdGFuZGFyZEhhbmRs ZXJzKCk7DQogICAgc3RhdGljIHZvaWQgQ2xlYW5VcEhhbmRsZXJzKCk7DQoNCg0KICAgIHd4R0RJ SW1hZ2VSZWZEYXRhICpHZXRHRElJbWFnZURhdGEoKSBjb25zdA0KICAgICAgICB7IHJldHVybiAo d3hHRElJbWFnZVJlZkRhdGEgKiltX3JlZkRhdGE7IH0NCg0KDQogICAgdm9pZCBFbnN1cmVIYXNE YXRhKCkgeyBpZiAoIElzTnVsbCgpICkgbV9yZWZEYXRhID0gQ3JlYXRlRGF0YSgpOyB9DQoNCg0K ICAgIFdYSEFORExFIEdldEhhbmRsZSgpIGNvbnN0DQogICAgICAgIHsgcmV0dXJuIElzTnVsbCgp ID8gMCA6IEdldEdESUltYWdlRGF0YSgpLT5tX2hhbmRsZTsgfQ0KICAgIHZvaWQgU2V0SGFuZGxl KFdYSEFORExFIGhhbmRsZSkNCiAgICAgICAgeyBFbnN1cmVIYXNEYXRhKCk7IEdldEdESUltYWdl RGF0YSgpLT5tX2hhbmRsZSA9IGhhbmRsZTsgfQ0KDQogICAgYm9vbCBPaygpIGNvbnN0IHsgcmV0 dXJuIEdldEhhbmRsZSgpICE9IDA7IH0NCg0KICAgIGludCBHZXRXaWR0aCgpIGNvbnN0IHsgcmV0 dXJuIElzTnVsbCgpID8gMCA6IEdldEdESUltYWdlRGF0YSgpLT5tX3dpZHRoOyB9DQogICAgaW50 IEdldEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIElzTnVsbCgpID8gMCA6IEdldEdESUltYWdlRGF0 YSgpLT5tX2hlaWdodDsgfQ0KICAgIGludCBHZXREZXB0aCgpIGNvbnN0IHsgcmV0dXJuIElzTnVs bCgpID8gMCA6IEdldEdESUltYWdlRGF0YSgpLT5tX2RlcHRoOyB9DQoNCiAgICB2b2lkIFNldFdp ZHRoKGludCB3KSB7IEVuc3VyZUhhc0RhdGEoKTsgR2V0R0RJSW1hZ2VEYXRhKCktPm1fd2lkdGgg PSB3OyB9DQogICAgdm9pZCBTZXRIZWlnaHQoaW50IGgpIHsgRW5zdXJlSGFzRGF0YSgpOyBHZXRH RElJbWFnZURhdGEoKS0+bV9oZWlnaHQgPSBoOyB9DQogICAgdm9pZCBTZXREZXB0aChpbnQgZCkg eyBFbnN1cmVIYXNEYXRhKCk7IEdldEdESUltYWdlRGF0YSgpLT5tX2RlcHRoID0gZDsgfQ0KDQog ICAgdm9pZCBTZXRTaXplKGludCB3LCBpbnQgaCkNCiAgICB7DQogICAgICAgIEVuc3VyZUhhc0Rh dGEoKTsNCiAgICAgICAgR2V0R0RJSW1hZ2VEYXRhKCktPlNldFNpemUodywgaCk7DQogICAgfQ0K ICAgIHZvaWQgU2V0U2l6ZShjb25zdCB3eFNpemUmIHNpemUpIHsgU2V0U2l6ZShzaXplLngsIHNp emUueSk7IH0NCg0KDQogICAgYm9vbCBGcmVlUmVzb3VyY2UoYm9vbCBmb3JjZSA9IDApOw0KICAg IHZpcnR1YWwgV1hIQU5ETEUgR2V0UmVzb3VyY2VIYW5kbGUoKTsNCg0KcHJvdGVjdGVkOg0KDQog ICAgdmlydHVhbCB3eEdESUltYWdlUmVmRGF0YSAqQ3JlYXRlRGF0YSgpIGNvbnN0ID0gMDsNCg0K ICAgIHN0YXRpYyB3eExpc3QgbXNfaGFuZGxlcnM7DQp9Ow0KIyAzMiAiLi4vLi4vaW5jbHVkZS93 eC9tc3cvY3Vyc29yLmgiIDINCg0KDQoNCg0KDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBv cnQpKSB3eEN1cnNvclJlZkRhdGEgOiBwdWJsaWMgd3hHRElJbWFnZVJlZkRhdGENCnsNCnB1Ymxp YzoNCiAgICB3eEN1cnNvclJlZkRhdGEoKTsNCiAgICB2aXJ0dWFsIH53eEN1cnNvclJlZkRhdGEo KSB7IEZyZWUoKTsgfQ0KDQogICAgdmlydHVhbCB2b2lkIEZyZWUoKTsNCg0KDQpwdWJsaWM6DQog ICAgYm9vbCBtX2Rlc3Ryb3lDdXJzb3I7DQp9Ow0KDQoNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRs bGltcG9ydCkpIHd4Q3Vyc29yIDogcHVibGljIHd4R0RJSW1hZ2UNCnsNCnB1YmxpYzoNCiAgICB3 eEN1cnNvcigpOw0KDQoNCiAgICB3eEN1cnNvcihjb25zdCB3eEN1cnNvciYgY3Vyc29yKSB7IFJl ZihjdXJzb3IpOyB9DQoNCiAgICB3eEN1cnNvcihjb25zdCBjaGFyIGJpdHNbXSwgaW50IHdpZHRo LCBpbnQgaGVpZ2h0LA0KICAgICAgICAgICAgIGludCBob3RTcG90WCA9IC0xLCBpbnQgaG90U3Bv dFkgPSAtMSwNCiAgICAgICAgICAgICBjb25zdCBjaGFyIG1hc2tCaXRzW10gPSBfX251bGwpOw0K ICAgIHd4Q3Vyc29yKGNvbnN0IHd4U3RyaW5nJiBuYW1lLA0KICAgICAgICAgICAgIGxvbmcgZmxh Z3MgPSB3eEJJVE1BUF9UWVBFX0NVUl9SRVNPVVJDRSwNCiAgICAgICAgICAgICBpbnQgaG90U3Bv dFggPSAwLCBpbnQgaG90U3BvdFkgPSAwKTsNCiAgICB3eEN1cnNvcihpbnQgY3Vyc29yX3R5cGUp Ow0KICAgIHZpcnR1YWwgfnd4Q3Vyc29yKCk7DQoNCiAgICB3eEN1cnNvciYgb3BlcmF0b3IgPSAo Y29uc3Qgd3hDdXJzb3ImIGN1cnNvcikgeyBpZiAoKnRoaXMgPT0gY3Vyc29yKSByZXR1cm4gKCp0 aGlzKTsgUmVmKGN1cnNvcik7IHJldHVybiAqdGhpczsgfQ0KICAgIGJvb2wgb3BlcmF0b3IgPT0g KGNvbnN0IHd4Q3Vyc29yJiBjdXJzb3IpIGNvbnN0IHsgcmV0dXJuIG1fcmVmRGF0YSA9PSBjdXJz b3IubV9yZWZEYXRhOyB9DQogICAgYm9vbCBvcGVyYXRvciAhPSAoY29uc3Qgd3hDdXJzb3ImIGN1 cnNvcikgY29uc3QgeyByZXR1cm4gbV9yZWZEYXRhICE9IGN1cnNvci5tX3JlZkRhdGE7IH0NCg0K ICAgIHZvaWQgU2V0SENVUlNPUihXWEhDVVJTT1IgY3Vyc29yKSB7IFNldEhhbmRsZSgoV1hIQU5E TEUpY3Vyc29yKTsgfQ0KICAgIFdYSENVUlNPUiBHZXRIQ1VSU09SKCkgY29uc3QgeyByZXR1cm4g KFdYSENVUlNPUilHZXRIYW5kbGUoKTsgfQ0KDQpwcm90ZWN0ZWQ6DQogICAgdmlydHVhbCB3eEdE SUltYWdlUmVmRGF0YSAqQ3JlYXRlRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG5ldyB3eEN1cnNvclJl ZkRhdGE7IH0NCg0KcHJpdmF0ZToNCiAgICBwdWJsaWM6IHN0YXRpYyB3eENsYXNzSW5mbyBzbV9j bGFzc3d4Q3Vyc29yOyB3eENsYXNzSW5mbyAqR2V0Q2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4g Jnd4Q3Vyc29yOjpzbV9jbGFzc3d4Q3Vyc29yOyB9DQp9Ow0KIyA2ICIuLi8uLi9pbmNsdWRlL3d4 L2N1cnNvci5oIiAyDQojIDIwICIuLi8uLi9pbmNsdWRlL3d4L2N1cnNvci5oIg0KIyAxICIuLi8u Li9pbmNsdWRlL3d4L3V0aWxzLmgiIDENCiMgMjAgIi4uLy4uL2luY2x1ZGUvd3gvdXRpbHMuaCIN CiNwcmFnbWEgaW50ZXJmYWNlICJ1dGlscy5oIg0KDQoNCg0KDQoNCiMgMSAiLi4vLi4vaW5jbHVk ZS93eC9maWxlZm4uaCIgMQ0KIyAxNiAiLi4vLi4vaW5jbHVkZS93eC9maWxlZm4uaCINCiNwcmFn bWEgaW50ZXJmYWNlICJmaWxlZm4uaCINCiMgNTEgIi4uLy4uL2luY2x1ZGUvd3gvZmlsZWZuLmgi DQpjb25zdCBvZmZfdCB3eEludmFsaWRPZmZzZXQgPSAob2ZmX3QpLTE7DQoNCg0KZW51bSB3eFNl ZWtNb2RlDQp7DQogIHd4RnJvbVN0YXJ0LA0KICB3eEZyb21DdXJyZW50LA0KICB3eEZyb21FbmQN Cn07DQoNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGV4dGVybiBjb25zdCBjaGFyKiB3eEVt cHR5U3RyaW5nOw0KIyAxNDAgIi4uLy4uL2luY2x1ZGUvd3gvZmlsZWZuLmgiDQpfX2F0dHJpYnV0 ZV9fKChkbGxpbXBvcnQpKSBib29sIHd4RmlsZUV4aXN0cyhjb25zdCB3eFN0cmluZyYgZmlsZW5h bWUpOw0KDQoNCg0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgYm9vbCB3eFBhdGhFeGlzdHMo Y29uc3QgY2hhciAqcHN6UGF0aE5hbWUpOw0KDQoNCg0KDQpfX2F0dHJpYnV0ZV9fKChkbGxpbXBv cnQpKSBib29sIHd4SXNBYnNvbHV0ZVBhdGgoY29uc3Qgd3hTdHJpbmcmIGZpbGVuYW1lKTsNCg0K DQoNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGNoYXIqIHd4RmlsZU5hbWVGcm9tUGF0aChj aGFyICpwYXRoKTsNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4U3RyaW5nIHd4RmlsZU5h bWVGcm9tUGF0aChjb25zdCB3eFN0cmluZyYgcGF0aCk7DQoNCg0KDQpfX2F0dHJpYnV0ZV9fKChk bGxpbXBvcnQpKSB3eFN0cmluZyB3eFBhdGhPbmx5KGNvbnN0IHd4U3RyaW5nJiBwYXRoKTsNCg0K DQoNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4U3RyaW5nIHd4UmVhbFBhdGgoY29uc3Qg d3hTdHJpbmcmIHBhdGgpOw0KDQpfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB2b2lkIHd4RG9z MlVuaXhGaWxlbmFtZShjaGFyICpzKTsNCg0KDQpfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB2 b2lkIHd4VW5peDJEb3NGaWxlbmFtZShjaGFyICpzKTsNCiMgMTgwICIuLi8uLi9pbmNsdWRlL3d4 L2ZpbGVmbi5oIg0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgdm9pZCB3eFN0cmlwRXh0ZW5z aW9uKGNoYXIgKmJ1ZmZlcik7DQpfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB2b2lkIHd4U3Ry aXBFeHRlbnNpb24od3hTdHJpbmcmIGJ1ZmZlcik7DQoNCg0KX19hdHRyaWJ1dGVfXygoZGxsaW1w b3J0KSkgY2hhciogd3hHZXRUZW1wRmlsZU5hbWUoY29uc3Qgd3hTdHJpbmcmIHByZWZpeCwgY2hh ciAqYnVmID0gKGNoYXIgKikgX19udWxsKTsNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGJv b2wgd3hHZXRUZW1wRmlsZU5hbWUoY29uc3Qgd3hTdHJpbmcmIHByZWZpeCwgd3hTdHJpbmcmIGJ1 Zik7DQoNCg0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgY2hhciogd3hFeHBhbmRQYXRoKGNo YXIgKmRlc3QsIGNvbnN0IGNoYXIgKnBhdGgpOw0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkg Ym9vbCB3eEV4cGFuZFBhdGgod3hTdHJpbmcmIGRlc3QsIGNvbnN0IGNoYXIgKnBhdGgpOw0KDQoN Cg0KDQpfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBjaGFyKiB3eENvbnRyYWN0UGF0aChjb25z dCB3eFN0cmluZyYgZmlsZW5hbWUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHd4U3RyaW5nJiBlbnZuYW1lID0gd3hFbXB0eVN0cmluZywNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd3hTdHJpbmcmIHVzZXIgPSB3eEVtcHR5U3RyaW5n KTsNCg0KDQpfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBjaGFyKiB3eFJlYWxQYXRoKGNoYXIg KnBhdGgpOw0KDQoNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGNoYXIqIHd4Q29weUFic29s dXRlUGF0aChjb25zdCB3eFN0cmluZyYgcGF0aCk7DQoNCg0KDQoNCg0KX19hdHRyaWJ1dGVfXygo ZGxsaW1wb3J0KSkgd3hTdHJpbmcgd3hGaW5kRmlyc3RGaWxlKGNvbnN0IGNoYXIgKnNwZWMsIGlu dCBmbGFncyA9IDEpOw0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hTdHJpbmcgd3hGaW5k TmV4dEZpbGUoKTsNCg0KDQpfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBib29sIHd4SXNXaWxk KGNvbnN0IHd4U3RyaW5nJiBwYXR0ZXJuKTsNCg0KDQoNCg0KX19hdHRyaWJ1dGVfXygoZGxsaW1w b3J0KSkgYm9vbCB3eE1hdGNoV2lsZChjb25zdCB3eFN0cmluZyYgcGF0dGVybiwgY29uc3Qgd3hT dHJpbmcmIHRleHQsIGJvb2wgZG90X3NwZWNpYWwgPSAxKTsNCg0KDQpfX2F0dHJpYnV0ZV9fKChk bGxpbXBvcnQpKSBib29sIHd4Q29uY2F0RmlsZXMoY29uc3Qgd3hTdHJpbmcmIGZpbGUxLCBjb25z dCB3eFN0cmluZyYgZmlsZTIsIGNvbnN0IHd4U3RyaW5nJiBmaWxlMyk7DQoNCg0KX19hdHRyaWJ1 dGVfXygoZGxsaW1wb3J0KSkgYm9vbCB3eENvcHlGaWxlKGNvbnN0IHd4U3RyaW5nJiBmaWxlMSwg Y29uc3Qgd3hTdHJpbmcmIGZpbGUyKTsNCg0KDQpfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBi b29sIHd4UmVtb3ZlRmlsZShjb25zdCB3eFN0cmluZyYgZmlsZSk7DQoNCg0KX19hdHRyaWJ1dGVf XygoZGxsaW1wb3J0KSkgYm9vbCB3eFJlbmFtZUZpbGUoY29uc3Qgd3hTdHJpbmcmIGZpbGUxLCBj b25zdCB3eFN0cmluZyYgZmlsZTIpOw0KDQoNCg0KDQoNCg0KX19hdHRyaWJ1dGVfXygoZGxsaW1w b3J0KSkgY2hhciogd3hHZXRXb3JraW5nRGlyZWN0b3J5KGNoYXIgKmJ1ZiA9IChjaGFyICopIF9f bnVsbCwgaW50IHN6ID0gMTAwMCk7DQoNCg0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hT dHJpbmcgd3hHZXRDd2QoKTsNCg0KDQpfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBib29sIHd4 U2V0V29ya2luZ0RpcmVjdG9yeShjb25zdCB3eFN0cmluZyYgZCk7DQoNCg0KX19hdHRyaWJ1dGVf XygoZGxsaW1wb3J0KSkgYm9vbCB3eE1rZGlyKGNvbnN0IHd4U3RyaW5nJiBkaXIsIGludCBwZXJt ID0gMDc3Nyk7DQoNCg0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgYm9vbCB3eFJtZGlyKGNv bnN0IHd4U3RyaW5nJiBkaXIsIGludCBmbGFncyA9IDApOw0KIyAyNzkgIi4uLy4uL2luY2x1ZGUv d3gvZmlsZWZuLmgiDQppbmxpbmUgYm9vbCB3eElzUGF0aFNlcGFyYXRvcihjaGFyIGMpDQogIHsg cmV0dXJuIGMgPT0gJ1xcJyB8fCBjID09ICcvJzsgfQ0KDQoNCl9fYXR0cmlidXRlX18oKGRsbGlt cG9ydCkpIGJvb2wgd3hFbmRzV2l0aFBhdGhTZXBhcmF0b3IoY29uc3QgY2hhciAqcHN6RmlsZU5h bWUpOw0KDQoNCg0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgdm9pZCB3eFNwbGl0UGF0aChj b25zdCBjaGFyICpwc3pGaWxlTmFtZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3hT dHJpbmcgKnBzdHJQYXRoLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3eFN0cmluZyAq cHN0ck5hbWUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHd4U3RyaW5nICpwc3RyRXh0 KTsNCg0KDQpfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBib29sIHd4RmluZEZpbGVJblBhdGgo d3hTdHJpbmcgKnBTdHIsIGNvbnN0IGNoYXIgKnBzelBhdGgsIGNvbnN0IGNoYXIgKnBzekZpbGUp Ow0KDQoNCg0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hTdHJpbmcgd3hHZXRPU0RpcmVj dG9yeSgpOw0KDQoNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHRpbWVfdCB3eEZpbGVNb2Rp ZmljYXRpb25UaW1lKGNvbnN0IHd4U3RyaW5nJiBmaWxlbmFtZSk7DQoNCg0KDQoNCg0KDQpjbGFz cyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eFBhdGhMaXN0IDogcHVibGljIHd4U3RyaW5n TGlzdA0Kew0KcHVibGljOg0KDQogICAgdm9pZCBBZGRFbnZMaXN0KGNvbnN0IHd4U3RyaW5nJiBl bnZWYXJpYWJsZSk7DQoNCiAgICB2b2lkIEFkZChjb25zdCB3eFN0cmluZyYgcGF0aCk7DQoNCiAg ICB3eE5vZGUgKkFkZChjb25zdCBjaGFyICpzKSB7IHJldHVybiB3eFN0cmluZ0xpc3Q6OkFkZChz KTsgfQ0KDQogICAgd3hTdHJpbmcgRmluZFZhbGlkUGF0aChjb25zdCB3eFN0cmluZyYgZmlsZW5h bWUpOw0KDQoNCiAgICB3eFN0cmluZyBGaW5kQWJzb2x1dGVWYWxpZFBhdGgoY29uc3Qgd3hTdHJp bmcmIGZpbGVuYW1lKTsNCg0KICAgIHZvaWQgRW5zdXJlRmlsZUFjY2Vzc2libGUoY29uc3Qgd3hT dHJpbmcmIHBhdGgpOw0KDQogICAgYm9vbCBNZW1iZXIoY29uc3Qgd3hTdHJpbmcmIHBhdGgpOw0K DQpwcml2YXRlOg0KICAgIHB1YmxpYzogc3RhdGljIHd4Q2xhc3NJbmZvIHNtX2NsYXNzd3hQYXRo TGlzdDsgd3hDbGFzc0luZm8gKkdldENsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZ3eFBhdGhM aXN0OjpzbV9jbGFzc3d4UGF0aExpc3Q7IH0NCn07DQojIDI3ICIuLi8uLi9pbmNsdWRlL3d4L3V0 aWxzLmgiIDINCiMgMzkgIi4uLy4uL2luY2x1ZGUvd3gvdXRpbHMuaCINCmNsYXNzIF9fYXR0cmli dXRlX18oKGRsbGltcG9ydCkpIHd4UHJvY2VzczsNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGlt cG9ydCkpIHd4RnJhbWU7DQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eFdpbmRv dzsNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4V2luZG93TGlzdDsNCiMgNjIg Ii4uLy4uL2luY2x1ZGUvd3gvdXRpbHMuaCINCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGV4 dGVybiBjaGFyKiB3eEJ1ZmZlcjsNCg0KDQpfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBjaGFy KiBjb3B5c3RyaW5nKGNvbnN0IGNoYXIgKnMpOw0KDQoNCl9fYXR0cmlidXRlX18oKGRsbGltcG9y dCkpIGJvb2wgU3RyaW5nTWF0Y2goY2hhciAqb25lLCBjaGFyICp0d28sIGJvb2wgc3ViU3RyaW5n ID0gMSwgYm9vbCBleGFjdCA9IDApOw0KIyA3OCAiLi4vLi4vaW5jbHVkZS93eC91dGlscy5oIg0K X19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgdm9pZCB3eEJlbGwoKTsNCg0KDQpfX2F0dHJpYnV0 ZV9fKChkbGxpbXBvcnQpKSB3eFN0cmluZyB3eEdldE9zRGVzY3JpcHRpb24oKTsNCg0KDQpfX2F0 dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBpbnQgd3hHZXRPc1ZlcnNpb24oaW50ICptYWpvclZzbiA9 IChpbnQgKikgX19udWxsLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbWlu b3JWc24gPSAoaW50ICopIF9fbnVsbCk7DQoNCg0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkg d3hTdHJpbmcgd3hOb3coKTsNCg0KDQoNCg0KDQpfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBi b29sIHd4U2V0RGV0ZWN0YWJsZUF1dG9SZXBlYXQoIGJvb2wgZmxhZyApOw0KDQoNCg0KDQoNCg0K X19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgbG9uZyB3eE5ld0lkKCk7DQoNCg0KDQoNCg0KX19h dHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgdm9pZCB3eFJlZ2lzdGVySWQobG9uZyBpZCk7DQoNCg0K DQoNCg0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgbG9uZyB3eEdldEN1cnJlbnRJZCgpOw0K DQoNCg0KDQoNCg0KDQpfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBleHRlcm4gY29uc3QgY2hh ciogd3hGbG9hdFRvU3RyaW5nU3RyOw0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgZXh0ZXJu IGNvbnN0IGNoYXIqIHd4RG91YmxlVG9TdHJpbmdTdHI7DQoNCl9fYXR0cmlidXRlX18oKGRsbGlt cG9ydCkpIHZvaWQgU3RyaW5nVG9GbG9hdChjaGFyICpzLCBmbG9hdCAqbnVtYmVyKTsNCl9fYXR0 cmlidXRlX18oKGRsbGltcG9ydCkpIGNoYXIqIEZsb2F0VG9TdHJpbmcoZmxvYXQgbnVtYmVyLCBj b25zdCBjaGFyICpmbXQgPSB3eEZsb2F0VG9TdHJpbmdTdHIpOw0KX19hdHRyaWJ1dGVfXygoZGxs aW1wb3J0KSkgdm9pZCBTdHJpbmdUb0RvdWJsZShjaGFyICpzLCBkb3VibGUgKm51bWJlcik7DQpf X2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBjaGFyKiBEb3VibGVUb1N0cmluZyhkb3VibGUgbnVt YmVyLCBjb25zdCBjaGFyICpmbXQgPSB3eERvdWJsZVRvU3RyaW5nU3RyKTsNCl9fYXR0cmlidXRl X18oKGRsbGltcG9ydCkpIHZvaWQgU3RyaW5nVG9JbnQoY2hhciAqcywgaW50ICpudW1iZXIpOw0K X19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgdm9pZCBTdHJpbmdUb0xvbmcoY2hhciAqcywgbG9u ZyAqbnVtYmVyKTsNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGNoYXIqIEludFRvU3RyaW5n KGludCBudW1iZXIpOw0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgY2hhciogTG9uZ1RvU3Ry aW5nKGxvbmcgbnVtYmVyKTsNCg0KDQpfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBpbnQgd3hI ZXhUb0RlYyhjb25zdCB3eFN0cmluZyYgYnVmKTsNCg0KDQpfX2F0dHJpYnV0ZV9fKChkbGxpbXBv cnQpKSB2b2lkIHd4RGVjVG9IZXgoaW50IGRlYywgY2hhciAqYnVmKTsNCl9fYXR0cmlidXRlX18o KGRsbGltcG9ydCkpIHd4U3RyaW5nIHd4RGVjVG9IZXgoaW50IGRlYyk7DQoNCg0KDQoNCg0KDQpf X2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBsb25nIHd4RXhlY3V0ZShjaGFyICoqYXJndiwgYm9v bCBzeW5jID0gMCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHd4UHJvY2VzcyAqcHJvY2Vz cyA9ICh3eFByb2Nlc3MgKikgX19udWxsKTsNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGxv bmcgd3hFeGVjdXRlKGNvbnN0IHd4U3RyaW5nJiBjb21tYW5kLCBib29sIHN5bmMgPSAwLA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgd3hQcm9jZXNzICpwcm9jZXNzID0gKHd4UHJvY2VzcyAq KSBfX251bGwpOw0KDQoNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGxvbmcgd3hFeGVjdXRl KGNvbnN0IHd4U3RyaW5nJiBjb21tYW5kLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgd3hB cnJheVN0cmluZyYgb3V0cHV0KTsNCg0KDQpfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBsb25n IHd4RXhlY3V0ZShjb25zdCB3eFN0cmluZyYgY29tbWFuZCwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIHd4QXJyYXlTdHJpbmcmIG91dHB1dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg IHd4QXJyYXlTdHJpbmcmIGVycm9yKTsNCg0KZW51bSB3eFNpZ25hbA0Kew0KICAgIHd4U0lHTk9O RSA9IDAsDQogICAgd3hTSUdIVVAsDQogICAgd3hTSUdJTlQsDQogICAgd3hTSUdRVUlULA0KICAg IHd4U0lHSUxMLA0KICAgIHd4U0lHVFJBUCwNCiAgICB3eFNJR0FCUlQsDQogICAgd3hTSUdJT1Qg PSB3eFNJR0FCUlQsDQogICAgd3hTSUdFTVQsDQogICAgd3hTSUdGUEUsDQogICAgd3hTSUdLSUxM LA0KICAgIHd4U0lHQlVTLA0KICAgIHd4U0lHU0VHViwNCiAgICB3eFNJR1NZUywNCiAgICB3eFNJ R1BJUEUsDQogICAgd3hTSUdBTFJNLA0KICAgIHd4U0lHVEVSTQ0KDQoNCn07DQoNCg0KX19hdHRy aWJ1dGVfXygoZGxsaW1wb3J0KSkgaW50IHd4S2lsbChsb25nIHBpZCwgd3hTaWduYWwgc2lnID0g d3hTSUdURVJNKTsNCg0KDQoNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGJvb2wgd3hTaGVs bChjb25zdCB3eFN0cmluZyYgY29tbWFuZCA9IHd4RW1wdHlTdHJpbmcpOw0KDQoNCg0KX19hdHRy aWJ1dGVfXygoZGxsaW1wb3J0KSkgYm9vbCB3eFNoZWxsKGNvbnN0IHd4U3RyaW5nJiBjb21tYW5k LCB3eEFycmF5U3RyaW5nJiBvdXRwdXQpOw0KDQoNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkp IHZvaWQgd3hTbGVlcChpbnQgblNlY3MpOw0KDQoNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkp IHZvaWQgd3hVc2xlZXAodW5zaWduZWQgbG9uZyBtaWxsaXNlY29uZHMpOw0KDQoNCl9fYXR0cmli dXRlX18oKGRsbGltcG9ydCkpIGxvbmcgd3hHZXRGcmVlTWVtb3J5KCk7DQoNCg0KX19hdHRyaWJ1 dGVfXygoZGxsaW1wb3J0KSkgYm9vbCB3eEhhbmRsZUZhdGFsRXhjZXB0aW9ucyhib29sIGRvaXQg PSAxKTsNCiMgMjEyICIuLi8uLi9pbmNsdWRlL3d4L3V0aWxzLmgiDQpfX2F0dHJpYnV0ZV9fKChk bGxpbXBvcnQpKSBib29sIHd4R2V0RW1haWxBZGRyZXNzKGNoYXIgKmJ1ZiwgaW50IG1heFNpemUp Ow0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hTdHJpbmcgd3hHZXRFbWFpbEFkZHJlc3Mo KTsNCg0KDQpfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBib29sIHd4R2V0SG9zdE5hbWUoY2hh ciAqYnVmLCBpbnQgbWF4U2l6ZSk7DQpfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eFN0cmlu ZyB3eEdldEhvc3ROYW1lKCk7DQoNCg0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hTdHJp bmcgd3hHZXRGdWxsSG9zdE5hbWUoKTsNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGJvb2wg d3hHZXRGdWxsSG9zdE5hbWUoY2hhciAqYnVmLCBpbnQgbWF4U2l6ZSk7DQoNCg0KX19hdHRyaWJ1 dGVfXygoZGxsaW1wb3J0KSkgYm9vbCB3eEdldFVzZXJJZChjaGFyICpidWYsIGludCBtYXhTaXpl KTsNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4U3RyaW5nIHd4R2V0VXNlcklkKCk7DQoN Cg0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgYm9vbCB3eEdldFVzZXJOYW1lKGNoYXIgKmJ1 ZiwgaW50IG1heFNpemUpOw0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hTdHJpbmcgd3hH ZXRVc2VyTmFtZSgpOw0KDQoNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4U3RyaW5nIHd4 R2V0SG9tZURpcigpOw0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgY29uc3QgY2hhciogd3hH ZXRIb21lRGlyKHd4U3RyaW5nICpwc3RyKTsNCg0KDQoNCg0KDQoNCl9fYXR0cmlidXRlX18oKGRs bGltcG9ydCkpIGNoYXIqIHd4R2V0VXNlckhvbWUoY29uc3Qgd3hTdHJpbmcmIHVzZXIgPSB3eEVt cHR5U3RyaW5nKTsNCiMgMjQ5ICIuLi8uLi9pbmNsdWRlL3d4L3V0aWxzLmgiDQpfX2F0dHJpYnV0 ZV9fKChkbGxpbXBvcnQpKSBjaGFyKiB3eFN0cmlwTWVudUNvZGVzKGNoYXIgKmluLCBjaGFyICpv dXQgPSAoY2hhciAqKSBfX251bGwpOw0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hTdHJp bmcgd3hTdHJpcE1lbnVDb2Rlcyhjb25zdCB3eFN0cmluZyYgc3RyKTsNCg0KDQpjbGFzcyBfX2F0 dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eEFjY2VsZXJhdG9yRW50cnk7DQpfX2F0dHJpYnV0ZV9f KChkbGxpbXBvcnQpKSB3eEFjY2VsZXJhdG9yRW50cnkgKnd4R2V0QWNjZWxGcm9tU3RyaW5nKGNv bnN0IHd4U3RyaW5nJiBsYWJlbCk7DQojIDI2NCAiLi4vLi4vaW5jbHVkZS93eC91dGlscy5oIg0K X19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hXaW5kb3cqIHd4RmluZFdpbmRvd0J5TGFiZWwo Y29uc3Qgd3hTdHJpbmcmIHRpdGxlLCB3eFdpbmRvdyAqcGFyZW50ID0gKHd4V2luZG93ICopIF9f bnVsbCk7DQoNCg0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hXaW5kb3cqIHd4RmluZFdp bmRvd0J5TmFtZShjb25zdCB3eFN0cmluZyYgbmFtZSwgd3hXaW5kb3cgKnBhcmVudCA9ICh3eFdp bmRvdyAqKSBfX251bGwpOw0KDQoNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGludCB3eEZp bmRNZW51SXRlbUlkKHd4RnJhbWUgKmZyYW1lLCBjb25zdCB3eFN0cmluZyYgbWVudVN0cmluZywg Y29uc3Qgd3hTdHJpbmcmIGl0ZW1TdHJpbmcpOw0KDQoNCg0KDQoNCg0KX19hdHRyaWJ1dGVfXygo ZGxsaW1wb3J0KSkgYm9vbCB3eFlpZWxkKCk7DQoNCg0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0 KSkgYm9vbCB3eFlpZWxkSWZOZWVkZWQoKTsNCg0KDQpfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQp KSBib29sIHd4U2FmZVlpZWxkKHd4V2luZG93ICp3aW4gPSBfX251bGwpOw0KDQoNCl9fYXR0cmli dXRlX18oKGRsbGltcG9ydCkpIHZvaWQgd3hFbmFibGVUb3BMZXZlbFdpbmRvd3MoYm9vbCBlbmFi bGUgPSAxKTsNCg0KDQoNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGJvb2wgd3hDaGVja0Zv ckludGVycnVwdCh3eFdpbmRvdyAqd25kKTsNCg0KDQpfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQp KSB2b2lkIHd4Rmx1c2hFdmVudHMoKTsNCg0KDQoNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGlt cG9ydCkpIHd4V2luZG93RGlzYWJsZXINCnsNCnB1YmxpYzoNCiAgICB3eFdpbmRvd0Rpc2FibGVy KHd4V2luZG93ICp3aW5Ub1NraXAgPSAod3hXaW5kb3cgKilfX251bGwpOw0KICAgIH53eFdpbmRv d0Rpc2FibGVyKCk7DQoNCnByaXZhdGU6DQogICAgd3hXaW5kb3dMaXN0ICptX3dpbkRpc2FibGVk Ow0KDQoNCg0KICAgIHd4V2luZG93ICptX3dpblRvcDsNCg0KfTsNCg0KDQoNCg0KDQoNCmNsYXNz IF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4Q3Vyc29yOw0KX19hdHRyaWJ1dGVfXygoZGxs aW1wb3J0KSkgZXh0ZXJuIHd4Q3Vyc29yKiB3eEhPVVJHTEFTU19DVVJTT1I7DQpfX2F0dHJpYnV0 ZV9fKChkbGxpbXBvcnQpKSB2b2lkIHd4QmVnaW5CdXN5Q3Vyc29yKHd4Q3Vyc29yICpjdXJzb3Ig PSB3eEhPVVJHTEFTU19DVVJTT1IpOw0KDQoNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHZv aWQgd3hFbmRCdXN5Q3Vyc29yKCk7DQoNCg0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgYm9v bCB3eElzQnVzeSgpOw0KDQoNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4QnVz eUN1cnNvcg0Kew0KcHVibGljOg0KICAgIHd4QnVzeUN1cnNvcih3eEN1cnNvciogY3Vyc29yID0g d3hIT1VSR0xBU1NfQ1VSU09SKQ0KICAgICAgICB7IHd4QmVnaW5CdXN5Q3Vyc29yKGN1cnNvcik7 IH0NCiAgICB+d3hCdXN5Q3Vyc29yKCkNCiAgICAgICAgeyB3eEVuZEJ1c3lDdXJzb3IoKTsgfQ0K DQoNCg0KDQoNCg0KICAgIHN0YXRpYyBjb25zdCB3eEN1cnNvciAmR2V0U3RvcmVkQ3Vyc29yKCk7 DQogICAgc3RhdGljIGNvbnN0IHd4Q3Vyc29yIEdldEJ1c3lDdXJzb3IoKTsNCn07DQoNCg0KDQoN Cg0KDQoNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGJvb2wgd3hXcml0ZVJlc291cmNlKGNv bnN0IHd4U3RyaW5nJiBzZWN0aW9uLCBjb25zdCB3eFN0cmluZyYgZW50cnksIGNvbnN0IHd4U3Ry aW5nJiB2YWx1ZSwgY29uc3Qgd3hTdHJpbmcmIGZpbGUgPSB3eEVtcHR5U3RyaW5nKTsNCl9fYXR0 cmlidXRlX18oKGRsbGltcG9ydCkpIGJvb2wgd3hXcml0ZVJlc291cmNlKGNvbnN0IHd4U3RyaW5n JiBzZWN0aW9uLCBjb25zdCB3eFN0cmluZyYgZW50cnksIGZsb2F0IHZhbHVlLCBjb25zdCB3eFN0 cmluZyYgZmlsZSA9IHd4RW1wdHlTdHJpbmcpOw0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkg Ym9vbCB3eFdyaXRlUmVzb3VyY2UoY29uc3Qgd3hTdHJpbmcmIHNlY3Rpb24sIGNvbnN0IHd4U3Ry aW5nJiBlbnRyeSwgbG9uZyB2YWx1ZSwgY29uc3Qgd3hTdHJpbmcmIGZpbGUgPSB3eEVtcHR5U3Ry aW5nKTsNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGJvb2wgd3hXcml0ZVJlc291cmNlKGNv bnN0IHd4U3RyaW5nJiBzZWN0aW9uLCBjb25zdCB3eFN0cmluZyYgZW50cnksIGludCB2YWx1ZSwg Y29uc3Qgd3hTdHJpbmcmIGZpbGUgPSB3eEVtcHR5U3RyaW5nKTsNCg0KX19hdHRyaWJ1dGVfXygo ZGxsaW1wb3J0KSkgYm9vbCB3eEdldFJlc291cmNlKGNvbnN0IHd4U3RyaW5nJiBzZWN0aW9uLCBj b25zdCB3eFN0cmluZyYgZW50cnksIGNoYXIgKip2YWx1ZSwgY29uc3Qgd3hTdHJpbmcmIGZpbGUg PSB3eEVtcHR5U3RyaW5nKTsNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGJvb2wgd3hHZXRS ZXNvdXJjZShjb25zdCB3eFN0cmluZyYgc2VjdGlvbiwgY29uc3Qgd3hTdHJpbmcmIGVudHJ5LCBm bG9hdCAqdmFsdWUsIGNvbnN0IHd4U3RyaW5nJiBmaWxlID0gd3hFbXB0eVN0cmluZyk7DQpfX2F0 dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBib29sIHd4R2V0UmVzb3VyY2UoY29uc3Qgd3hTdHJpbmcm IHNlY3Rpb24sIGNvbnN0IHd4U3RyaW5nJiBlbnRyeSwgbG9uZyAqdmFsdWUsIGNvbnN0IHd4U3Ry aW5nJiBmaWxlID0gd3hFbXB0eVN0cmluZyk7DQpfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBi b29sIHd4R2V0UmVzb3VyY2UoY29uc3Qgd3hTdHJpbmcmIHNlY3Rpb24sIGNvbnN0IHd4U3RyaW5n JiBlbnRyeSwgaW50ICp2YWx1ZSwgY29uc3Qgd3hTdHJpbmcmIGZpbGUgPSB3eEVtcHR5U3RyaW5n KTsNCg0KDQp2b2lkIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4R2V0TW91c2VQb3NpdGlv biggaW50KiB4LCBpbnQqIHkgKTsNCg0KDQoNCg0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkg ZXh0ZXJuIGNvbnN0IGNoYXIqIHd4VXNlclJlc291cmNlU3RyOw0KX19hdHRyaWJ1dGVfXygoZGxs aW1wb3J0KSkgY2hhciogd3hMb2FkVXNlclJlc291cmNlKGNvbnN0IHd4U3RyaW5nJiByZXNvdXJj ZU5hbWUsIGNvbnN0IHd4U3RyaW5nJiByZXNvdXJjZVR5cGUgPSB3eFVzZXJSZXNvdXJjZVN0cik7 DQoNCg0KDQpfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB2b2lkIHd4UmVkaXJlY3RJT1RvQ29u c29sZSgpOw0KIyA0MzAgIi4uLy4uL2luY2x1ZGUvd3gvdXRpbHMuaCINCl9fYXR0cmlidXRlX18o KGRsbGltcG9ydCkpIHZvaWQgd3hEZWJ1Z01zZyhjb25zdCBjaGFyICpmbXQgLi4uKTsNCg0KDQpf X2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBleHRlcm4gY29uc3QgY2hhciogd3hJbnRlcm5hbEVy cm9yU3RyOw0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgdm9pZCB3eEVycm9yKGNvbnN0IHd4 U3RyaW5nJiBtc2csIGNvbnN0IHd4U3RyaW5nJiB0aXRsZSA9IHd4SW50ZXJuYWxFcnJvclN0cik7 DQoNCg0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgZXh0ZXJuIGNvbnN0IGNoYXIqIHd4RmF0 YWxFcnJvclN0cjsNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHZvaWQgd3hGYXRhbEVycm9y KGNvbnN0IHd4U3RyaW5nJiBtc2csIGNvbnN0IHd4U3RyaW5nJiB0aXRsZSA9IHd4RmF0YWxFcnJv clN0cik7DQojIDIxICIuLi8uLi9pbmNsdWRlL3d4L2N1cnNvci5oIiAyDQojIDM4ICIuLi8uLi9p bmNsdWRlL3d4L2N1cnNvci5oIg0KY2xhc3Mgd3hCdXN5Q3Vyc29yU3VzcGVuZGVyDQp7DQpwdWJs aWM6DQogICAgd3hCdXN5Q3Vyc29yU3VzcGVuZGVyKCkNCiAgICB7DQogICAgICAgIGlmKCB3eElz QnVzeSgpICkNCiAgICAgICAgew0KICAgICAgICAgICAgd3hTZXRDdXJzb3IoIHd4QnVzeUN1cnNv cjo6R2V0U3RvcmVkQ3Vyc29yKCkgKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICB+d3hCdXN5Q3Vy c29yU3VzcGVuZGVyKCkNCiAgICB7DQogICAgICAgIGlmKCB3eElzQnVzeSgpICkNCiAgICAgICAg ew0KICAgICAgICAgICAgd3hTZXRDdXJzb3IoIHd4QnVzeUN1cnNvcjo6R2V0QnVzeUN1cnNvcigp ICk7DQogICAgICAgIH0NCiAgICB9DQp9Ow0KIyAyNSAiLi4vLi4vaW5jbHVkZS93eC9ldmVudC5o IiAyDQoNCg0KIyAxICIuLi8uLi9pbmNsdWRlL3d4L3RocmVhZC5oIiAxDQojIDI3ICIuLi8uLi9p bmNsdWRlL3d4L3RocmVhZC5oIg0KI3ByYWdtYSBpbnRlcmZhY2UgInRocmVhZC5oIg0KDQoNCg0K IyAxICIuLi8uLi9pbmNsdWRlL3d4L21vZHVsZS5oIiAxDQojIDE2ICIuLi8uLi9pbmNsdWRlL3d4 L21vZHVsZS5oIg0KI3ByYWdtYSBpbnRlcmZhY2UgIm1vZHVsZS5oIg0KDQoNCg0KDQoNCg0KY2xh c3Mgd3hNb2R1bGU7DQp0eXBlZGVmIHd4TW9kdWxlIF9XWF9MSVNUX0lURU1fVFlQRV93eE1vZHVs ZUxpc3Q7IHR5cGVkZWYgaW50ICgqd3hTb3J0RnVuY0Zvcl93eE1vZHVsZUxpc3QpKGNvbnN0IHd4 TW9kdWxlICoqLCBjb25zdCB3eE1vZHVsZSAqKik7IGNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGlt cG9ydCkpIHd4d3hNb2R1bGVMaXN0Tm9kZSA6IHB1YmxpYyB3eE5vZGVCYXNlIHsgcHVibGljOiB3 eHd4TW9kdWxlTGlzdE5vZGUod3hMaXN0QmFzZSAqbGlzdCA9ICh3eExpc3RCYXNlICopX19udWxs LCB3eHd4TW9kdWxlTGlzdE5vZGUgKnByZXZpb3VzID0gKHd4d3hNb2R1bGVMaXN0Tm9kZSAqKV9f bnVsbCwgd3h3eE1vZHVsZUxpc3ROb2RlICpuZXh0ID0gKHd4d3hNb2R1bGVMaXN0Tm9kZSAqKV9f bnVsbCwgd3hNb2R1bGUgKmRhdGEgPSAod3hNb2R1bGUgKilfX251bGwsIGNvbnN0IHd4TGlzdEtl eSYga2V5ID0gd3hEZWZhdWx0TGlzdEtleSkgOiB3eE5vZGVCYXNlKGxpc3QsIHByZXZpb3VzLCBu ZXh0LCBkYXRhLCBrZXkpIHsgfSB3eHd4TW9kdWxlTGlzdE5vZGUgKkdldE5leHQoKSBjb25zdCB7 IHJldHVybiAod3h3eE1vZHVsZUxpc3ROb2RlICopd3hOb2RlQmFzZTo6R2V0TmV4dCgpOyB9IHd4 d3hNb2R1bGVMaXN0Tm9kZSAqR2V0UHJldmlvdXMoKSBjb25zdCB7IHJldHVybiAod3h3eE1vZHVs ZUxpc3ROb2RlICopd3hOb2RlQmFzZTo6R2V0UHJldmlvdXMoKTsgfSB3eE1vZHVsZSAqR2V0RGF0 YSgpIGNvbnN0IHsgcmV0dXJuICh3eE1vZHVsZSAqKXd4Tm9kZUJhc2U6OkdldERhdGEoKTsgfSB2 b2lkIFNldERhdGEod3hNb2R1bGUgKmRhdGEpIHsgd3hOb2RlQmFzZTo6U2V0RGF0YShkYXRhKTsg fSB2aXJ0dWFsIHZvaWQgRGVsZXRlRGF0YSgpOyB9OyBjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxp bXBvcnQpKSB3eE1vZHVsZUxpc3QgOiBwdWJsaWMgd3hMaXN0QmFzZSB7IHB1YmxpYzogdHlwZWRl ZiB3eHd4TW9kdWxlTGlzdE5vZGUgTm9kZTsgd3hNb2R1bGVMaXN0KHd4S2V5VHlwZSBrZXlUeXBl ID0gd3hLRVlfTk9ORSkgOiB3eExpc3RCYXNlKGtleVR5cGUpIHsgfSB3eE1vZHVsZUxpc3Qoc2l6 ZV90IGNvdW50LCB3eE1vZHVsZSAqZWxlbWVudHNbXSkgOiB3eExpc3RCYXNlKGNvdW50LCAodm9p ZCAqKillbGVtZW50cykgeyB9IHd4TW9kdWxlTGlzdCYgb3BlcmF0b3I9KGNvbnN0IHd4TW9kdWxl TGlzdCYgbGlzdCkgeyByZXR1cm4gKHd4TW9kdWxlTGlzdCYpd3hMaXN0QmFzZTo6b3BlcmF0b3I9 KGxpc3QpOyB9IHd4d3hNb2R1bGVMaXN0Tm9kZSAqR2V0Rmlyc3QoKSBjb25zdCB7IHJldHVybiAo d3h3eE1vZHVsZUxpc3ROb2RlICopd3hMaXN0QmFzZTo6R2V0Rmlyc3QoKTsgfSB3eHd4TW9kdWxl TGlzdE5vZGUgKkdldExhc3QoKSBjb25zdCB7IHJldHVybiAod3h3eE1vZHVsZUxpc3ROb2RlICop d3hMaXN0QmFzZTo6R2V0TGFzdCgpOyB9IHd4d3hNb2R1bGVMaXN0Tm9kZSAqSXRlbShzaXplX3Qg aW5kZXgpIGNvbnN0IHsgcmV0dXJuICh3eHd4TW9kdWxlTGlzdE5vZGUgKil3eExpc3RCYXNlOjpJ dGVtKGluZGV4KTsgfSB3eE1vZHVsZSAqb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsg d3h3eE1vZHVsZUxpc3ROb2RlICpub2RlID0gSXRlbShpbmRleCk7IHJldHVybiBub2RlID8gKHd4 TW9kdWxlKikobm9kZS0+R2V0RGF0YSgpKSA6ICh3eE1vZHVsZSopX19udWxsOyB9IHd4d3hNb2R1 bGVMaXN0Tm9kZSAqQXBwZW5kKHd4TW9kdWxlICpvYmplY3QpIHsgcmV0dXJuICh3eHd4TW9kdWxl TGlzdE5vZGUgKil3eExpc3RCYXNlOjpBcHBlbmQob2JqZWN0KTsgfSB3eHd4TW9kdWxlTGlzdE5v ZGUgKkluc2VydCh3eE1vZHVsZSAqb2JqZWN0KSB7IHJldHVybiAod3h3eE1vZHVsZUxpc3ROb2Rl ICopSW5zZXJ0KCh3eHd4TW9kdWxlTGlzdE5vZGUqKV9fbnVsbCwgb2JqZWN0KTsgfSB3eHd4TW9k dWxlTGlzdE5vZGUgKkluc2VydChzaXplX3QgcG9zLCB3eE1vZHVsZSAqb2JqZWN0KSB7IHJldHVy biAod3h3eE1vZHVsZUxpc3ROb2RlICopd3hMaXN0QmFzZTo6SW5zZXJ0KHBvcywgb2JqZWN0KTsg fSB3eHd4TW9kdWxlTGlzdE5vZGUgKkluc2VydCh3eHd4TW9kdWxlTGlzdE5vZGUgKnByZXYsIHd4 TW9kdWxlICpvYmplY3QpIHsgcmV0dXJuICh3eHd4TW9kdWxlTGlzdE5vZGUgKil3eExpc3RCYXNl OjpJbnNlcnQocHJldiwgb2JqZWN0KTsgfSB3eHd4TW9kdWxlTGlzdE5vZGUgKkFwcGVuZChsb25n IGtleSwgdm9pZCAqb2JqZWN0KSB7IHJldHVybiAod3h3eE1vZHVsZUxpc3ROb2RlICopd3hMaXN0 QmFzZTo6QXBwZW5kKGtleSwgb2JqZWN0KTsgfSB3eHd4TW9kdWxlTGlzdE5vZGUgKkFwcGVuZChj b25zdCBjaGFyICprZXksIHZvaWQgKm9iamVjdCkgeyByZXR1cm4gKHd4d3hNb2R1bGVMaXN0Tm9k ZSAqKXd4TGlzdEJhc2U6OkFwcGVuZChrZXksIG9iamVjdCk7IH0gd3h3eE1vZHVsZUxpc3ROb2Rl ICpEZXRhY2hOb2RlKHd4d3hNb2R1bGVMaXN0Tm9kZSAqbm9kZSkgeyByZXR1cm4gKHd4d3hNb2R1 bGVMaXN0Tm9kZSAqKXd4TGlzdEJhc2U6OkRldGFjaE5vZGUobm9kZSk7IH0gYm9vbCBEZWxldGVO b2RlKHd4d3hNb2R1bGVMaXN0Tm9kZSAqbm9kZSkgeyByZXR1cm4gd3hMaXN0QmFzZTo6RGVsZXRl Tm9kZShub2RlKTsgfSBib29sIERlbGV0ZU9iamVjdCh3eE1vZHVsZSAqb2JqZWN0KSB7IHJldHVy biB3eExpc3RCYXNlOjpEZWxldGVPYmplY3Qob2JqZWN0KTsgfSB3eHd4TW9kdWxlTGlzdE5vZGUg KkZpbmQod3hNb2R1bGUgKm9iamVjdCkgY29uc3QgeyByZXR1cm4gKHd4d3hNb2R1bGVMaXN0Tm9k ZSAqKXd4TGlzdEJhc2U6OkZpbmQob2JqZWN0KTsgfSB2aXJ0dWFsIHd4d3hNb2R1bGVMaXN0Tm9k ZSAqRmluZChjb25zdCB3eExpc3RLZXkmIGtleSkgY29uc3QgeyByZXR1cm4gKHd4d3hNb2R1bGVM aXN0Tm9kZSAqKXd4TGlzdEJhc2U6OkZpbmQoa2V5KTsgfSBpbnQgSW5kZXhPZih3eE1vZHVsZSAq b2JqZWN0KSBjb25zdCB7IHJldHVybiB3eExpc3RCYXNlOjpJbmRleE9mKG9iamVjdCk7IH0gdm9p ZCBTb3J0KHd4U29ydEZ1bmNGb3Jfd3hNb2R1bGVMaXN0IGZ1bmMpIHsgd3hMaXN0QmFzZTo6U29y dCgod3hTb3J0Q29tcGFyZUZ1bmN0aW9uKWZ1bmMpOyB9IHByb3RlY3RlZDogd3hOb2RlQmFzZSAq Q3JlYXRlTm9kZSh3eE5vZGVCYXNlICpwcmV2LCB3eE5vZGVCYXNlICpuZXh0LCB2b2lkICpkYXRh LCBjb25zdCB3eExpc3RLZXkmIGtleSA9IHd4RGVmYXVsdExpc3RLZXkpIHsgcmV0dXJuIG5ldyB3 eHd4TW9kdWxlTGlzdE5vZGUodGhpcywgKHd4d3hNb2R1bGVMaXN0Tm9kZSAqKXByZXYsICh3eHd4 TW9kdWxlTGlzdE5vZGUgKiluZXh0LCAod3hNb2R1bGUgKilkYXRhLCBrZXkpOyB9IH07DQoNCg0K DQoNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4TW9kdWxlIDogcHVibGljIHd4 T2JqZWN0DQp7DQpwdWJsaWM6DQogICAgd3hNb2R1bGUoKSB7fQ0KICAgIHZpcnR1YWwgfnd4TW9k dWxlKCkge30NCg0KDQogICAgYm9vbCBJbml0KCkgeyByZXR1cm4gT25Jbml0KCk7IH0NCiAgICB2 b2lkIEV4aXQoKSB7IE9uRXhpdCgpOyB9DQoNCg0KDQogICAgdmlydHVhbCBib29sIE9uSW5pdCgp ID0gMDsNCg0KDQogICAgdmlydHVhbCB2b2lkIE9uRXhpdCgpID0gMDsNCg0KICAgIHN0YXRpYyB2 b2lkIFJlZ2lzdGVyTW9kdWxlKHd4TW9kdWxlKiBtb2R1bGUpOw0KICAgIHN0YXRpYyB2b2lkIFJl Z2lzdGVyTW9kdWxlcygpOw0KICAgIHN0YXRpYyBib29sIEluaXRpYWxpemVNb2R1bGVzKCk7DQog ICAgc3RhdGljIHZvaWQgQ2xlYW5VcE1vZHVsZXMoKTsNCg0KcHJvdGVjdGVkOg0KICAgIHN0YXRp YyB3eE1vZHVsZUxpc3QgbV9tb2R1bGVzOw0KDQogICAgcHVibGljOiBzdGF0aWMgd3hDbGFzc0lu Zm8gc21fY2xhc3N3eE1vZHVsZTsgd3hDbGFzc0luZm8gKkdldENsYXNzSW5mbygpIGNvbnN0IHsg cmV0dXJuICZ3eE1vZHVsZTo6c21fY2xhc3N3eE1vZHVsZTsgfQ0KfTsNCiMgMzIgIi4uLy4uL2lu Y2x1ZGUvd3gvdGhyZWFkLmgiIDINCiMgNDIgIi4uLy4uL2luY2x1ZGUvd3gvdGhyZWFkLmgiDQpl bnVtIHd4TXV0ZXhFcnJvcg0Kew0KICAgIHd4TVVURVhfTk9fRVJST1IgPSAwLA0KICAgIHd4TVVU RVhfREVBRF9MT0NLLA0KICAgIHd4TVVURVhfQlVTWSwNCiAgICB3eE1VVEVYX1VOTE9DS0VELA0K ICAgIHd4TVVURVhfTUlTQ19FUlJPUg0KfTsNCg0KZW51bSB3eFRocmVhZEVycm9yDQp7DQogICAg d3hUSFJFQURfTk9fRVJST1IgPSAwLA0KICAgIHd4VEhSRUFEX05PX1JFU09VUkNFLA0KICAgIHd4 VEhSRUFEX1JVTk5JTkcsDQogICAgd3hUSFJFQURfTk9UX1JVTk5JTkcsDQogICAgd3hUSFJFQURf S0lMTEVELA0KICAgIHd4VEhSRUFEX01JU0NfRVJST1INCn07DQoNCmVudW0gd3hUaHJlYWRLaW5k DQp7DQogICAgd3hUSFJFQURfREVUQUNIRUQsDQogICAgd3hUSFJFQURfSk9JTkFCTEUNCn07DQoN Cg0KZW51bQ0Kew0KICAgIFdYVEhSRUFEX01JTl9QUklPUklUWSA9IDB1LA0KICAgIFdYVEhSRUFE X0RFRkFVTFRfUFJJT1JJVFkgPSA1MHUsDQogICAgV1hUSFJFQURfTUFYX1BSSU9SSVRZID0gMTAw dQ0KfTsNCiMgODQgIi4uLy4uL2luY2x1ZGUvd3gvdGhyZWFkLmgiDQpjbGFzcyBfX2F0dHJpYnV0 ZV9fKChkbGxpbXBvcnQpKSB3eE11dGV4SW50ZXJuYWw7DQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChk bGxpbXBvcnQpKSB3eE11dGV4DQp7DQpwdWJsaWM6DQoNCiAgICB3eE11dGV4KCk7DQogICAgfnd4 TXV0ZXgoKTsNCg0KDQogICAgd3hNdXRleEVycm9yIExvY2soKTsNCg0KICAgIHd4TXV0ZXhFcnJv ciBUcnlMb2NrKCk7DQoNCiAgICB3eE11dGV4RXJyb3IgVW5sb2NrKCk7DQoNCg0KICAgIGJvb2wg SXNMb2NrZWQoKSBjb25zdCB7IHJldHVybiAobV9sb2NrZWQgPiAwKTsgfQ0KDQpwcm90ZWN0ZWQ6 DQogICAgZnJpZW5kIGNsYXNzIHd4Q29uZGl0aW9uOw0KDQoNCiAgICB3eE11dGV4KGNvbnN0IHd4 TXV0ZXgmKTsNCiAgICB3eE11dGV4JiBvcGVyYXRvcj0oY29uc3Qgd3hNdXRleCYpOw0KDQogICAg aW50IG1fbG9ja2VkOw0KICAgIHd4TXV0ZXhJbnRlcm5hbCAqbV9pbnRlcm5hbDsNCn07DQoNCg0K DQoNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4TXV0ZXhMb2NrZXINCnsNCnB1 YmxpYzoNCg0KICAgIHd4TXV0ZXhMb2NrZXIod3hNdXRleCYgbXV0ZXgpIDogbV9tdXRleChtdXRl eCkNCiAgICAgICAgeyBtX2lzT2sgPSBtX211dGV4LkxvY2soKSA9PSB3eE1VVEVYX05PX0VSUk9S OyB9DQoNCg0KICAgIGJvb2wgSXNPaygpIGNvbnN0DQogICAgICAgIHsgcmV0dXJuIG1faXNPazsg fQ0KDQoNCiAgICB+d3hNdXRleExvY2tlcigpDQogICAgICAgIHsgaWYgKCBJc09rKCkgKSBtX211 dGV4LlVubG9jaygpOyB9DQoNCnByaXZhdGU6DQoNCiAgICB3eE11dGV4TG9ja2VyKGNvbnN0IHd4 TXV0ZXhMb2NrZXImKTsNCiAgICB3eE11dGV4TG9ja2VyJiBvcGVyYXRvcj0oY29uc3Qgd3hNdXRl eExvY2tlciYpOw0KDQogICAgYm9vbCBtX2lzT2s7DQogICAgd3hNdXRleCYgbV9tdXRleDsNCn07 DQojIDE1MCAiLi4vLi4vaW5jbHVkZS93eC90aHJlYWQuaCINCmNsYXNzIF9fYXR0cmlidXRlX18o KGRsbGltcG9ydCkpIHd4Q3JpdGljYWxTZWN0aW9uSW50ZXJuYWw7DQojIDE2NiAiLi4vLi4vaW5j bHVkZS93eC90aHJlYWQuaCINCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4Q3Jp dGljYWxTZWN0aW9uDQp7DQpwdWJsaWM6DQoNCiAgICB3eENyaXRpY2FsU2VjdGlvbigpOw0KICAg IH53eENyaXRpY2FsU2VjdGlvbigpOw0KDQoNCiAgICB2b2lkIEVudGVyKCk7DQoNCiAgICB2b2lk IExlYXZlKCk7DQoNCnByaXZhdGU6DQoNCiAgICB3eENyaXRpY2FsU2VjdGlvbihjb25zdCB3eENy aXRpY2FsU2VjdGlvbiYpOw0KICAgIHd4Q3JpdGljYWxTZWN0aW9uJiBvcGVyYXRvcj0oY29uc3Qg d3hDcml0aWNhbFNlY3Rpb24mKTsNCg0KDQoNCg0KDQoNCg0KICAgIGNoYXIgbV9idWZmZXJbMjRd Ow0KDQoNCg0KDQoNCn07DQoNCg0KDQoNCg0KDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBv cnQpKSB3eENyaXRpY2FsU2VjdGlvbkxvY2tlcg0Kew0KcHVibGljOg0KICAgIGlubGluZSB3eENy aXRpY2FsU2VjdGlvbkxvY2tlcih3eENyaXRpY2FsU2VjdGlvbiYgY3JpdHNlY3QpOw0KICAgIGlu bGluZSB+d3hDcml0aWNhbFNlY3Rpb25Mb2NrZXIoKTsNCg0KcHJpdmF0ZToNCg0KICAgIHd4Q3Jp dGljYWxTZWN0aW9uTG9ja2VyKGNvbnN0IHd4Q3JpdGljYWxTZWN0aW9uTG9ja2VyJik7DQogICAg d3hDcml0aWNhbFNlY3Rpb25Mb2NrZXImIG9wZXJhdG9yPShjb25zdCB3eENyaXRpY2FsU2VjdGlv bkxvY2tlciYpOw0KDQogICAgd3hDcml0aWNhbFNlY3Rpb24mIG1fY3JpdHNlY3Q7DQp9Ow0KDQoN Cg0KDQoNCg0KY2xhc3Mgd3hDb25kaXRpb25JbnRlcm5hbDsNCmNsYXNzIF9fYXR0cmlidXRlX18o KGRsbGltcG9ydCkpIHd4Q29uZGl0aW9uDQp7DQpwdWJsaWM6DQoNCiAgICB3eENvbmRpdGlvbigp Ow0KICAgIH53eENvbmRpdGlvbigpOw0KDQoNCg0KICAgIHZvaWQgV2FpdCgpOw0KDQogICAgYm9v bCBXYWl0KHVuc2lnbmVkIGxvbmcgc2VjLCB1bnNpZ25lZCBsb25nIG5zZWMpOw0KDQoNCg0KICAg IHZvaWQgU2lnbmFsKCk7DQoNCiAgICB2b2lkIEJyb2FkY2FzdCgpOw0KDQpwcml2YXRlOg0KICAg IHd4Q29uZGl0aW9uSW50ZXJuYWwgKm1faW50ZXJuYWw7DQp9Ow0KIyAyNTggIi4uLy4uL2luY2x1 ZGUvd3gvdGhyZWFkLmgiDQpjbGFzcyB3eFRocmVhZEludGVybmFsOw0KY2xhc3MgX19hdHRyaWJ1 dGVfXygoZGxsaW1wb3J0KSkgd3hUaHJlYWQNCnsNCnB1YmxpYzoNCg0KICAgIHR5cGVkZWYgdm9p ZCAqRXhpdENvZGU7DQoNCg0KDQoNCg0KDQoNCiAgICBzdGF0aWMgd3hUaHJlYWQgKlRoaXMoKTsN Cg0KDQogICAgc3RhdGljIGJvb2wgSXNNYWluKCk7DQoNCg0KICAgIHN0YXRpYyB2b2lkIFlpZWxk KCk7DQoNCg0KDQoNCiAgICBzdGF0aWMgdm9pZCBTbGVlcCh1bnNpZ25lZCBsb25nIG1pbGxpc2Vj b25kcyk7DQoNCg0KDQoNCg0KICAgIHN0YXRpYyBpbnQgR2V0Q1BVQ291bnQoKTsNCiMgMjk3ICIu Li8uLi9pbmNsdWRlL3d4L3RocmVhZC5oIg0KICAgIHN0YXRpYyBib29sIFNldENvbmN1cnJlbmN5 KHNpemVfdCBsZXZlbCk7DQoNCg0KDQogICAgd3hUaHJlYWQod3hUaHJlYWRLaW5kIGtpbmQgPSB3 eFRIUkVBRF9ERVRBQ0hFRCk7DQoNCg0KDQoNCg0KDQogICAgd3hUaHJlYWRFcnJvciBDcmVhdGUo KTsNCg0KDQoNCg0KICAgIHd4VGhyZWFkRXJyb3IgUnVuKCk7DQojIDMyNSAiLi4vLi4vaW5jbHVk ZS93eC90aHJlYWQuaCINCiAgICB3eFRocmVhZEVycm9yIERlbGV0ZShFeGl0Q29kZSAqcmMgPSAo RXhpdENvZGUgKilfX251bGwpOw0KDQoNCg0KDQoNCiAgICBFeGl0Q29kZSBXYWl0KCk7DQojIDM0 MSAiLi4vLi4vaW5jbHVkZS93eC90aHJlYWQuaCINCiAgICB3eFRocmVhZEVycm9yIEtpbGwoKTsN Cg0KDQoNCiAgICB3eFRocmVhZEVycm9yIFBhdXNlKCk7DQoNCg0KICAgIHd4VGhyZWFkRXJyb3Ig UmVzdW1lKCk7DQoNCg0KDQoNCg0KICAgIHZvaWQgU2V0UHJpb3JpdHkodW5zaWduZWQgaW50IHBy aW8pOw0KDQoNCiAgICB1bnNpZ25lZCBpbnQgR2V0UHJpb3JpdHkoKSBjb25zdDsNCg0KDQoNCiAg ICBib29sIElzQWxpdmUoKSBjb25zdDsNCg0KICAgIGJvb2wgSXNSdW5uaW5nKCkgY29uc3Q7DQoN CiAgICBib29sIElzUGF1c2VkKCkgY29uc3Q7DQoNCg0KICAgIGJvb2wgSXNEZXRhY2hlZCgpIGNv bnN0IHsgcmV0dXJuIG1faXNEZXRhY2hlZDsgfQ0KDQoNCg0KICAgIHVuc2lnbmVkIGxvbmcgR2V0 SWQoKSBjb25zdDsNCg0KDQoNCg0KICAgIHZpcnR1YWwgdm9pZCBPbkV4aXQoKSB7IH0NCg0KDQoN CiAgICB2aXJ0dWFsIH53eFRocmVhZCgpOw0KDQpwcm90ZWN0ZWQ6DQoNCg0KDQogICAgYm9vbCBU ZXN0RGVzdHJveSgpOw0KDQoNCiAgICB2b2lkIEV4aXQoRXhpdENvZGUgZXhpdGNvZGUgPSAwKTsN Cg0KDQoNCiAgICB2aXJ0dWFsIHZvaWQgKkVudHJ5KCkgPSAwOw0KDQpwcml2YXRlOg0KDQogICAg d3hUaHJlYWQoY29uc3Qgd3hUaHJlYWQmKTsNCiAgICB3eFRocmVhZCYgb3BlcmF0b3I9KGNvbnN0 IHd4VGhyZWFkJik7DQoNCiAgICBmcmllbmQgY2xhc3Mgd3hUaHJlYWRJbnRlcm5hbDsNCg0KDQog ICAgd3hUaHJlYWRJbnRlcm5hbCAqbV9pbnRlcm5hbDsNCg0KDQogICAgd3hDcml0aWNhbFNlY3Rp b24gbV9jcml0c2VjdDsNCg0KDQogICAgYm9vbCBtX2lzRGV0YWNoZWQ7DQp9Ow0KDQoNCg0KDQoN Cg0Kdm9pZCBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eE11dGV4R3VpRW50ZXIoKTsNCnZv aWQgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hNdXRleEd1aUxlYXZlKCk7DQojIDQ0NiAi Li4vLi4vaW5jbHVkZS93eC90aHJlYWQuaCINCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9y dCkpIHd4TXV0ZXhHdWlMb2NrZXINCnsNCnB1YmxpYzoNCiAgICB3eE11dGV4R3VpTG9ja2VyKCkg eyB3eE11dGV4R3VpRW50ZXIoKTsgfQ0KICAgfnd4TXV0ZXhHdWlMb2NrZXIoKSB7IHd4TXV0ZXhH dWlMZWF2ZSgpOyB9DQp9Ow0KIyA0NjMgIi4uLy4uL2luY2x1ZGUvd3gvdGhyZWFkLmgiDQogICAg ZXh0ZXJuIHZvaWQgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hNdXRleEd1aUxlYXZlT3JF bnRlcigpOw0KDQoNCiAgICBleHRlcm4gYm9vbCBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3 eEd1aU93bmVkQnlNYWluVGhyZWFkKCk7DQoNCg0KICAgIGV4dGVybiB2b2lkIF9fYXR0cmlidXRl X18oKGRsbGltcG9ydCkpIHd4V2FrZVVwTWFpblRocmVhZCgpOw0KDQoNCg0KICAgIGV4dGVybiBi b29sIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4SXNXYWl0aW5nRm9yVGhyZWFkKCk7DQoj IDUxMCAiLi4vLi4vaW5jbHVkZS93eC90aHJlYWQuaCINCiAgICBpbmxpbmUNCiAgICB3eENyaXRp Y2FsU2VjdGlvbkxvY2tlcjo6IHd4Q3JpdGljYWxTZWN0aW9uTG9ja2VyKHd4Q3JpdGljYWxTZWN0 aW9uJiBjcykNCiAgICAgICAgOiBtX2NyaXRzZWN0KGNzKSB7IG1fY3JpdHNlY3QuRW50ZXIoKTsg fQ0KICAgIGlubGluZQ0KICAgIHd4Q3JpdGljYWxTZWN0aW9uTG9ja2VyOjp+d3hDcml0aWNhbFNl Y3Rpb25Mb2NrZXIoKSB7IG1fY3JpdHNlY3QuTGVhdmUoKTsgfQ0KIyAyOCAiLi4vLi4vaW5jbHVk ZS93eC9ldmVudC5oIiAyDQoNCg0KDQoNCg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0 KSkgd3hMaXN0Ow0KDQoNCiAgICBjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eENs aWVudERhdGE7DQogICAgY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hEQzsNCiAg ICBjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eE1lbnU7DQogICAgY2xhc3MgX19h dHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hXaW5kb3c7DQojIDUyICIuLi8uLi9pbmNsdWRlL3d4 L2V2ZW50LmgiDQp0eXBlZGVmIGludCB3eEV2ZW50VHlwZTsNCiMgNjcgIi4uLy4uL2luY2x1ZGUv d3gvZXZlbnQuaCINCmVudW0NCnsNCiAgICB3eEVWVF9OVUxMID0gMCwNCiAgICB3eEVWVF9GSVJT VCA9IDEwMDAwLA0KDQogICAgd3hFVlRfQ09NTUFORF9CVVRUT05fQ0xJQ0tFRCA9IHd4RVZUX0ZJ UlNUICsgMSwNCiAgICB3eEVWVF9DT01NQU5EX0NIRUNLQk9YX0NMSUNLRUQgPSB3eEVWVF9GSVJT VCArIDIsDQogICAgd3hFVlRfQ09NTUFORF9DSE9JQ0VfU0VMRUNURUQgPSB3eEVWVF9GSVJTVCAr IDMsDQogICAgd3hFVlRfQ09NTUFORF9MSVNUQk9YX1NFTEVDVEVEID0gd3hFVlRfRklSU1QgKyA0 LA0KICAgIHd4RVZUX0NPTU1BTkRfTElTVEJPWF9ET1VCTEVDTElDS0VEID0gd3hFVlRfRklSU1Qg KyA1LA0KICAgIHd4RVZUX0NPTU1BTkRfQ0hFQ0tMSVNUQk9YX1RPR0dMRUQgPSB3eEVWVF9GSVJT VCArIDYsDQogICAgd3hFVlRfQ09NTUFORF9URVhUX1VQREFURUQgPSB3eEVWVF9GSVJTVCArIDcs DQogICAgd3hFVlRfQ09NTUFORF9URVhUX0VOVEVSID0gd3hFVlRfRklSU1QgKyA4LA0KICAgIHd4 RVZUX0NPTU1BTkRfTUVOVV9TRUxFQ1RFRCA9IHd4RVZUX0ZJUlNUICsgOSwNCiAgICB3eEVWVF9D T01NQU5EX1RPT0xfQ0xJQ0tFRCA9IHd4RVZUX0NPTU1BTkRfTUVOVV9TRUxFQ1RFRCwNCiAgICB3 eEVWVF9DT01NQU5EX1NMSURFUl9VUERBVEVEID0gd3hFVlRfRklSU1QgKyAxMCwNCiAgICB3eEVW VF9DT01NQU5EX1JBRElPQk9YX1NFTEVDVEVEID0gd3hFVlRfRklSU1QgKyAxMSwNCiAgICB3eEVW VF9DT01NQU5EX1JBRElPQlVUVE9OX1NFTEVDVEVEID0gd3hFVlRfRklSU1QgKyAxMiwNCg0KICAg IHd4RVZUX0NPTU1BTkRfU0NST0xMQkFSX1VQREFURUQgPSB3eEVWVF9GSVJTVCArIDEzLA0KICAg IHd4RVZUX0NPTU1BTkRfVkxCT1hfU0VMRUNURUQgPSB3eEVWVF9GSVJTVCArIDE0LA0KICAgIHd4 RVZUX0NPTU1BTkRfQ09NQk9CT1hfU0VMRUNURUQgPSB3eEVWVF9GSVJTVCArIDE1LA0KICAgIHd4 RVZUX0NPTU1BTkRfVE9PTF9SQ0xJQ0tFRCA9IHd4RVZUX0ZJUlNUICsgMTYsDQogICAgd3hFVlRf Q09NTUFORF9UT09MX0VOVEVSID0gd3hFVlRfRklSU1QgKyAxNywNCiAgICB3eEVWVF9DT01NQU5E X1NQSU5DVFJMX1VQREFURUQgPSB3eEVWVF9GSVJTVCArIDE4LA0KDQoNCiAgICB3eEVWVF9TT0NL RVQgPSB3eEVWVF9GSVJTVCArIDUwLA0KICAgIHd4RVZUX1RJTUVSID0gd3hFVlRfRklSU1QgKyA4 MCwNCg0KDQogICAgd3hFVlRfTEVGVF9ET1dOID0gd3hFVlRfRklSU1QgKyAxMDAsDQogICAgd3hF VlRfTEVGVF9VUCA9IHd4RVZUX0ZJUlNUICsgMTAxLA0KICAgIHd4RVZUX01JRERMRV9ET1dOID0g d3hFVlRfRklSU1QgKyAxMDIsDQogICAgd3hFVlRfTUlERExFX1VQID0gd3hFVlRfRklSU1QgKyAx MDMsDQogICAgd3hFVlRfUklHSFRfRE9XTiA9IHd4RVZUX0ZJUlNUICsgMTA0LA0KICAgIHd4RVZU X1JJR0hUX1VQID0gd3hFVlRfRklSU1QgKyAxMDUsDQogICAgd3hFVlRfTU9USU9OID0gd3hFVlRf RklSU1QgKyAxMDYsDQogICAgd3hFVlRfRU5URVJfV0lORE9XID0gd3hFVlRfRklSU1QgKyAxMDcs DQogICAgd3hFVlRfTEVBVkVfV0lORE9XID0gd3hFVlRfRklSU1QgKyAxMDgsDQogICAgd3hFVlRf TEVGVF9EQ0xJQ0sgPSB3eEVWVF9GSVJTVCArIDEwOSwNCiAgICB3eEVWVF9NSURETEVfRENMSUNL ID0gd3hFVlRfRklSU1QgKyAxMTAsDQogICAgd3hFVlRfUklHSFRfRENMSUNLID0gd3hFVlRfRklS U1QgKyAxMTEsDQogICAgd3hFVlRfU0VUX0ZPQ1VTID0gd3hFVlRfRklSU1QgKyAxMTIsDQogICAg d3hFVlRfS0lMTF9GT0NVUyA9IHd4RVZUX0ZJUlNUICsgMTEzLA0KDQoNCiAgICB3eEVWVF9OQ19M RUZUX0RPV04gPSB3eEVWVF9GSVJTVCArIDIwMCwNCiAgICB3eEVWVF9OQ19MRUZUX1VQID0gd3hF VlRfRklSU1QgKyAyMDEsDQogICAgd3hFVlRfTkNfTUlERExFX0RPV04gPSB3eEVWVF9GSVJTVCAr IDIwMiwNCiAgICB3eEVWVF9OQ19NSURETEVfVVAgPSB3eEVWVF9GSVJTVCArIDIwMywNCiAgICB3 eEVWVF9OQ19SSUdIVF9ET1dOID0gd3hFVlRfRklSU1QgKyAyMDQsDQogICAgd3hFVlRfTkNfUklH SFRfVVAgPSB3eEVWVF9GSVJTVCArIDIwNSwNCiAgICB3eEVWVF9OQ19NT1RJT04gPSB3eEVWVF9G SVJTVCArIDIwNiwNCiAgICB3eEVWVF9OQ19FTlRFUl9XSU5ET1cgPSB3eEVWVF9GSVJTVCArIDIw NywNCiAgICB3eEVWVF9OQ19MRUFWRV9XSU5ET1cgPSB3eEVWVF9GSVJTVCArIDIwOCwNCiAgICB3 eEVWVF9OQ19MRUZUX0RDTElDSyA9IHd4RVZUX0ZJUlNUICsgMjA5LA0KICAgIHd4RVZUX05DX01J RERMRV9EQ0xJQ0sgPSB3eEVWVF9GSVJTVCArIDIxMCwNCiAgICB3eEVWVF9OQ19SSUdIVF9EQ0xJ Q0sgPSB3eEVWVF9GSVJTVCArIDIxMSwNCg0KDQogICAgd3hFVlRfQ0hBUiA9IHd4RVZUX0ZJUlNU ICsgMjEyLA0KICAgIHd4RVZUX0NIQVJfSE9PSyA9IHd4RVZUX0ZJUlNUICsgMjEzLA0KICAgIHd4 RVZUX05BVklHQVRJT05fS0VZID0gd3hFVlRfRklSU1QgKyAyMTQsDQogICAgd3hFVlRfS0VZX0RP V04gPSB3eEVWVF9GSVJTVCArIDIxNSwNCiAgICB3eEVWVF9LRVlfVVAgPSB3eEVWVF9GSVJTVCAr IDIxNiwNCg0KDQogICAgd3hFVlRfU0VUX0NVUlNPUiA9IHd4RVZUX0ZJUlNUICsgMjMwLA0KDQoN Cg0KDQogICAgd3hFVlRfU0NST0xMX1RPUCA9IHd4RVZUX0ZJUlNUICsgMzAwLA0KICAgIHd4RVZU X1NDUk9MTF9CT1RUT00gPSB3eEVWVF9GSVJTVCArIDMwMSwNCiAgICB3eEVWVF9TQ1JPTExfTElO RVVQID0gd3hFVlRfRklSU1QgKyAzMDIsDQogICAgd3hFVlRfU0NST0xMX0xJTkVET1dOID0gd3hF VlRfRklSU1QgKyAzMDMsDQogICAgd3hFVlRfU0NST0xMX1BBR0VVUCA9IHd4RVZUX0ZJUlNUICsg MzA0LA0KICAgIHd4RVZUX1NDUk9MTF9QQUdFRE9XTiA9IHd4RVZUX0ZJUlNUICsgMzA1LA0KICAg IHd4RVZUX1NDUk9MTF9USFVNQlRSQUNLID0gd3hFVlRfRklSU1QgKyAzMDYsDQogICAgd3hFVlRf U0NST0xMX1RIVU1CUkVMRUFTRSA9IHd4RVZUX0ZJUlNUICsgMzA3LA0KDQoNCg0KDQogICAgd3hF VlRfU0NST0xMV0lOX1RPUCA9IHd4RVZUX0ZJUlNUICsgMzIwLA0KICAgIHd4RVZUX1NDUk9MTFdJ Tl9CT1RUT00gPSB3eEVWVF9GSVJTVCArIDMyMSwNCiAgICB3eEVWVF9TQ1JPTExXSU5fTElORVVQ ID0gd3hFVlRfRklSU1QgKyAzMjIsDQogICAgd3hFVlRfU0NST0xMV0lOX0xJTkVET1dOID0gd3hF VlRfRklSU1QgKyAzMjMsDQogICAgd3hFVlRfU0NST0xMV0lOX1BBR0VVUCA9IHd4RVZUX0ZJUlNU ICsgMzI0LA0KICAgIHd4RVZUX1NDUk9MTFdJTl9QQUdFRE9XTiA9IHd4RVZUX0ZJUlNUICsgMzI1 LA0KICAgIHd4RVZUX1NDUk9MTFdJTl9USFVNQlRSQUNLID0gd3hFVlRfRklSU1QgKyAzMjYsDQog ICAgd3hFVlRfU0NST0xMV0lOX1RIVU1CUkVMRUFTRSA9IHd4RVZUX0ZJUlNUICsgMzI3LA0KDQoN Cg0KDQogICAgd3hFVlRfU0laRSA9IHd4RVZUX0ZJUlNUICsgNDAwLA0KICAgIHd4RVZUX01PVkUg PSB3eEVWVF9GSVJTVCArIDQwMSwNCiAgICB3eEVWVF9DTE9TRV9XSU5ET1cgPSB3eEVWVF9GSVJT VCArIDQwMiwNCiAgICB3eEVWVF9FTkRfU0VTU0lPTiA9IHd4RVZUX0ZJUlNUICsgNDAzLA0KICAg IHd4RVZUX1FVRVJZX0VORF9TRVNTSU9OID0gd3hFVlRfRklSU1QgKyA0MDQsDQogICAgd3hFVlRf QUNUSVZBVEVfQVBQID0gd3hFVlRfRklSU1QgKyA0MDUsDQogICAgd3hFVlRfUE9XRVIgPSB3eEVW VF9GSVJTVCArIDQwNiwNCiAgICB3eEVWVF9BQ1RJVkFURSA9IHd4RVZUX0ZJUlNUICsgNDA5LA0K ICAgIHd4RVZUX0NSRUFURSA9IHd4RVZUX0ZJUlNUICsgNDEwLA0KICAgIHd4RVZUX0RFU1RST1kg PSB3eEVWVF9GSVJTVCArIDQxMSwNCiAgICB3eEVWVF9TSE9XID0gd3hFVlRfRklSU1QgKyA0MTIs DQogICAgd3hFVlRfSUNPTklaRSA9IHd4RVZUX0ZJUlNUICsgNDEzLA0KICAgIHd4RVZUX01BWElN SVpFID0gd3hFVlRfRklSU1QgKyA0MTQsDQogICAgd3hFVlRfTU9VU0VfQ0FQVFVSRV9DSEFOR0VE ID0gd3hFVlRfRklSU1QgKyA0MTUsDQogICAgd3hFVlRfUEFJTlQgPSB3eEVWVF9GSVJTVCArIDQx NiwNCiAgICB3eEVWVF9FUkFTRV9CQUNLR1JPVU5EID0gd3hFVlRfRklSU1QgKyA0MTcsDQogICAg d3hFVlRfTkNfUEFJTlQgPSB3eEVWVF9GSVJTVCArIDQxOCwNCiAgICB3eEVWVF9QQUlOVF9JQ09O ID0gd3hFVlRfRklSU1QgKyA0MTksDQogICAgd3hFVlRfTUVOVV9DSEFSID0gd3hFVlRfRklSU1Qg KyA0MjAsDQogICAgd3hFVlRfTUVOVV9JTklUID0gd3hFVlRfRklSU1QgKyA0MjEsDQogICAgd3hF VlRfTUVOVV9ISUdITElHSFQgPSB3eEVWVF9GSVJTVCArIDQyMiwNCiAgICB3eEVWVF9QT1BVUF9N RU5VX0lOSVQgPSB3eEVWVF9GSVJTVCArIDQyMywNCiAgICB3eEVWVF9DT05URVhUX01FTlUgPSB3 eEVWVF9GSVJTVCArIDQyNCwNCiAgICB3eEVWVF9TWVNfQ09MT1VSX0NIQU5HRUQgPSB3eEVWVF9G SVJTVCArIDQyNSwNCiAgICB3eEVWVF9TRVRUSU5HX0NIQU5HRUQgPSB3eEVWVF9GSVJTVCArIDQy NiwNCiAgICB3eEVWVF9RVUVSWV9ORVdfUEFMRVRURSA9IHd4RVZUX0ZJUlNUICsgNDI3LA0KICAg IHd4RVZUX1BBTEVUVEVfQ0hBTkdFRCA9IHd4RVZUX0ZJUlNUICsgNDI4LA0KICAgIHd4RVZUX0pP WV9CVVRUT05fRE9XTiA9IHd4RVZUX0ZJUlNUICsgNDI5LA0KICAgIHd4RVZUX0pPWV9CVVRUT05f VVAgPSB3eEVWVF9GSVJTVCArIDQzMCwNCiAgICB3eEVWVF9KT1lfTU9WRSA9IHd4RVZUX0ZJUlNU ICsgNDMxLA0KICAgIHd4RVZUX0pPWV9aTU9WRSA9IHd4RVZUX0ZJUlNUICsgNDMyLA0KICAgIHd4 RVZUX0RST1BfRklMRVMgPSB3eEVWVF9GSVJTVCArIDQzMywNCiAgICB3eEVWVF9EUkFXX0lURU0g PSB3eEVWVF9GSVJTVCArIDQzNCwNCiAgICB3eEVWVF9NRUFTVVJFX0lURU0gPSB3eEVWVF9GSVJT VCArIDQzNSwNCiAgICB3eEVWVF9DT01QQVJFX0lURU0gPSB3eEVWVF9GSVJTVCArIDQzNiwNCiAg ICB3eEVWVF9JTklUX0RJQUxPRyA9IHd4RVZUX0ZJUlNUICsgNDM3LA0KICAgIHd4RVZUX0lETEUg PSB3eEVWVF9GSVJTVCArIDQzOCwNCiAgICB3eEVWVF9VUERBVEVfVUkgPSB3eEVWVF9GSVJTVCAr IDQzOSwNCg0KDQogICAgd3hFVlRfRU5EX1BST0NFU1MgPSB3eEVWVF9GSVJTVCArIDQ0MCwNCg0K DQogICAgd3hFVlRfRElBTFVQX0NPTk5FQ1RFRCA9IHd4RVZUX0ZJUlNUICsgNDUwLA0KICAgIHd4 RVZUX0RJQUxVUF9ESVNDT05ORUNURUQgPSB3eEVWVF9GSVJTVCArIDQ1MSwNCg0KDQoNCiAgICB3 eEVWVF9DT01NQU5EX0xFRlRfQ0xJQ0sgPSB3eEVWVF9GSVJTVCArIDUwMCwNCiAgICB3eEVWVF9D T01NQU5EX0xFRlRfRENMSUNLID0gd3hFVlRfRklSU1QgKyA1MDEsDQogICAgd3hFVlRfQ09NTUFO RF9SSUdIVF9DTElDSyA9IHd4RVZUX0ZJUlNUICsgNTAyLA0KICAgIHd4RVZUX0NPTU1BTkRfUklH SFRfRENMSUNLID0gd3hFVlRfRklSU1QgKyA1MDMsDQogICAgd3hFVlRfQ09NTUFORF9TRVRfRk9D VVMgPSB3eEVWVF9GSVJTVCArIDUwNCwNCiAgICB3eEVWVF9DT01NQU5EX0tJTExfRk9DVVMgPSB3 eEVWVF9GSVJTVCArIDUwNSwNCiAgICB3eEVWVF9DT01NQU5EX0VOVEVSID0gd3hFVlRfRklSU1Qg KyA1MDYsDQoNCg0KICAgIHd4RVZUX0NPTU1BTkRfVFJFRV9CRUdJTl9EUkFHID0gd3hFVlRfRklS U1QgKyA2MDAsDQogICAgd3hFVlRfQ09NTUFORF9UUkVFX0JFR0lOX1JEUkFHID0gd3hFVlRfRklS U1QgKyA2MDEsDQogICAgd3hFVlRfQ09NTUFORF9UUkVFX0JFR0lOX0xBQkVMX0VESVQgPSB3eEVW VF9GSVJTVCArIDYwMiwNCiAgICB3eEVWVF9DT01NQU5EX1RSRUVfRU5EX0xBQkVMX0VESVQgPSB3 eEVWVF9GSVJTVCArIDYwMywNCiAgICB3eEVWVF9DT01NQU5EX1RSRUVfREVMRVRFX0lURU0gPSB3 eEVWVF9GSVJTVCArIDYwNCwNCiAgICB3eEVWVF9DT01NQU5EX1RSRUVfR0VUX0lORk8gPSB3eEVW VF9GSVJTVCArIDYwNSwNCiAgICB3eEVWVF9DT01NQU5EX1RSRUVfU0VUX0lORk8gPSB3eEVWVF9G SVJTVCArIDYwNiwNCiAgICB3eEVWVF9DT01NQU5EX1RSRUVfSVRFTV9FWFBBTkRFRCA9IHd4RVZU X0ZJUlNUICsgNjA3LA0KICAgIHd4RVZUX0NPTU1BTkRfVFJFRV9JVEVNX0VYUEFORElORyA9IHd4 RVZUX0ZJUlNUICsgNjA4LA0KICAgIHd4RVZUX0NPTU1BTkRfVFJFRV9JVEVNX0NPTExBUFNFRCA9 IHd4RVZUX0ZJUlNUICsgNjA5LA0KICAgIHd4RVZUX0NPTU1BTkRfVFJFRV9JVEVNX0NPTExBUFNJ TkcgPSB3eEVWVF9GSVJTVCArIDYxMCwNCiAgICB3eEVWVF9DT01NQU5EX1RSRUVfU0VMX0NIQU5H RUQgPSB3eEVWVF9GSVJTVCArIDYxMSwNCiAgICB3eEVWVF9DT01NQU5EX1RSRUVfU0VMX0NIQU5H SU5HID0gd3hFVlRfRklSU1QgKyA2MTIsDQogICAgd3hFVlRfQ09NTUFORF9UUkVFX0tFWV9ET1dO ID0gd3hFVlRfRklSU1QgKyA2MTMsDQogICAgd3hFVlRfQ09NTUFORF9UUkVFX0lURU1fQUNUSVZB VEVEID0gd3hFVlRfRklSU1QgKyA2MTQsDQogICAgd3hFVlRfQ09NTUFORF9UUkVFX0lURU1fUklH SFRfQ0xJQ0sgPSB3eEVWVF9GSVJTVCArIDYxNSwNCiAgICB3eEVWVF9DT01NQU5EX1RSRUVfSVRF TV9NSURETEVfQ0xJQ0sgPSB3eEVWVF9GSVJTVCArIDYxNiwNCiAgICB3eEVWVF9DT01NQU5EX1RS RUVfRU5EX0RSQUcgPSB3eEVWVF9GSVJTVCArIDYxNywNCg0KDQogICAgd3hFVlRfQ09NTUFORF9M SVNUX0JFR0lOX0RSQUcgPSB3eEVWVF9GSVJTVCArIDcwMCwNCiAgICB3eEVWVF9DT01NQU5EX0xJ U1RfQkVHSU5fUkRSQUcgPSB3eEVWVF9GSVJTVCArIDcwMSwNCiAgICB3eEVWVF9DT01NQU5EX0xJ U1RfQkVHSU5fTEFCRUxfRURJVCA9IHd4RVZUX0ZJUlNUICsgNzAyLA0KICAgIHd4RVZUX0NPTU1B TkRfTElTVF9FTkRfTEFCRUxfRURJVCA9IHd4RVZUX0ZJUlNUICsgNzAzLA0KICAgIHd4RVZUX0NP TU1BTkRfTElTVF9ERUxFVEVfSVRFTSA9IHd4RVZUX0ZJUlNUICsgNzA0LA0KICAgIHd4RVZUX0NP TU1BTkRfTElTVF9ERUxFVEVfQUxMX0lURU1TID0gd3hFVlRfRklSU1QgKyA3MDUsDQogICAgd3hF VlRfQ09NTUFORF9MSVNUX0dFVF9JTkZPID0gd3hFVlRfRklSU1QgKyA3MDYsDQogICAgd3hFVlRf Q09NTUFORF9MSVNUX1NFVF9JTkZPID0gd3hFVlRfRklSU1QgKyA3MDcsDQogICAgd3hFVlRfQ09N TUFORF9MSVNUX0lURU1fU0VMRUNURUQgPSB3eEVWVF9GSVJTVCArIDcwOCwNCiAgICB3eEVWVF9D T01NQU5EX0xJU1RfSVRFTV9ERVNFTEVDVEVEID0gd3hFVlRfRklSU1QgKyA3MDksDQogICAgd3hF VlRfQ09NTUFORF9MSVNUX0tFWV9ET1dOID0gd3hFVlRfRklSU1QgKyA3MTAsDQogICAgd3hFVlRf Q09NTUFORF9MSVNUX0lOU0VSVF9JVEVNID0gd3hFVlRfRklSU1QgKyA3MTEsDQogICAgd3hFVlRf Q09NTUFORF9MSVNUX0NPTF9DTElDSyA9IHd4RVZUX0ZJUlNUICsgNzEyLA0KICAgIHd4RVZUX0NP TU1BTkRfTElTVF9JVEVNX1JJR0hUX0NMSUNLID0gd3hFVlRfRklSU1QgKyA3MTMsDQogICAgd3hF VlRfQ09NTUFORF9MSVNUX0lURU1fTUlERExFX0NMSUNLID0gd3hFVlRfRklSU1QgKyA3MTQsDQog ICAgd3hFVlRfQ09NTUFORF9MSVNUX0lURU1fQUNUSVZBVEVEID0gd3hFVlRfRklSU1QgKyA3MTUs DQoNCg0KICAgIHd4RVZUX0NPTU1BTkRfVEFCX1NFTF9DSEFOR0VEID0gd3hFVlRfRklSU1QgKyA4 MDAsDQogICAgd3hFVlRfQ09NTUFORF9UQUJfU0VMX0NIQU5HSU5HID0gd3hFVlRfRklSU1QgKyA4 MDEsDQogICAgd3hFVlRfQ09NTUFORF9OT1RFQk9PS19QQUdFX0NIQU5HRUQgPSB3eEVWVF9GSVJT VCArIDgwMiwNCiAgICB3eEVWVF9DT01NQU5EX05PVEVCT09LX1BBR0VfQ0hBTkdJTkcgPSB3eEVW VF9GSVJTVCArIDgwMywNCg0KDQogICAgd3hFVlRfQ09NTUFORF9TUExJVFRFUl9TQVNIX1BPU19D SEFOR0VEID0gd3hFVlRfRklSU1QgKyA4NTAsDQogICAgd3hFVlRfQ09NTUFORF9TUExJVFRFUl9T QVNIX1BPU19DSEFOR0lORyA9IHd4RVZUX0ZJUlNUICsgODUxLA0KICAgIHd4RVZUX0NPTU1BTkRf U1BMSVRURVJfRE9VQkxFQ0xJQ0tFRCA9IHd4RVZUX0ZJUlNUICsgODUyLA0KICAgIHd4RVZUX0NP TU1BTkRfU1BMSVRURVJfVU5TUExJVCA9IHd4RVZUX0ZJUlNUICsgODUzLA0KDQoNCiAgICB3eEVW VF9XSVpBUkRfUEFHRV9DSEFOR0VEID0gd3hFVlRfRklSU1QgKyA5MDAsDQogICAgd3hFVlRfV0la QVJEX1BBR0VfQ0hBTkdJTkcgPSB3eEVWVF9GSVJTVCArIDkwMSwNCiAgICB3eEVWVF9XSVpBUkRf Q0FOQ0VMID0gd3hFVlRfRklSU1QgKyA5MDIsDQoNCg0KICAgIHd4RVZUX0NBTEVOREFSX1NFTF9D SEFOR0VEID0gd3hFVlRfRklSU1QgKyA5NTAsDQogICAgd3hFVlRfQ0FMRU5EQVJfREFZX0NIQU5H RUQgPSB3eEVWVF9GSVJTVCArIDk1MSwNCiAgICB3eEVWVF9DQUxFTkRBUl9NT05USF9DSEFOR0VE ID0gd3hFVlRfRklSU1QgKyA5NTIsDQogICAgd3hFVlRfQ0FMRU5EQVJfWUVBUl9DSEFOR0VEID0g d3hFVlRfRklSU1QgKyA5NTMsDQogICAgd3hFVlRfQ0FMRU5EQVJfRE9VQkxFQ0xJQ0tFRCA9IHd4 RVZUX0ZJUlNUICsgOTU0LA0KICAgIHd4RVZUX0NBTEVOREFSX1dFRUtEQVlfQ0xJQ0tFRCA9IHd4 RVZUX0ZJUlNUICsgOTU1LA0KDQoNCiAgICB3eEVWVF9QTE9UX1NFTF9DSEFOR0lORyA9IHd4RVZU X0ZJUlNUICsgMTAwMCwNCiAgICB3eEVWVF9QTE9UX1NFTF9DSEFOR0VEID0gd3hFVlRfRklSU1Qg KyAxMDAxLA0KICAgIHd4RVZUX1BMT1RfQ0xJQ0tFRCA9IHd4RVZUX0ZJUlNUICsgMTAwMiwNCiAg ICB3eEVWVF9QTE9UX0RPVUJMRUNMSUNLRUQgPSB3eEVWVF9GSVJTVCArIDEwMDMsDQogICAgd3hF VlRfUExPVF9aT09NX0lOID0gd3hFVlRfRklSU1QgKyAxMDA0LA0KICAgIHd4RVZUX1BMT1RfWk9P TV9PVVQgPSB3eEVWVF9GSVJTVCArIDEwMDUsDQogICAgd3hFVlRfUExPVF9WQUxVRV9TRUxfQ1JF QVRJTkcgPSB3eEVWVF9GSVJTVCArIDEwMTAsDQogICAgd3hFVlRfUExPVF9WQUxVRV9TRUxfQ1JF QVRFRCA9IHd4RVZUX0ZJUlNUICsgMTAxMSwNCiAgICB3eEVWVF9QTE9UX1ZBTFVFX1NFTF9DSEFO R0lORyA9IHd4RVZUX0ZJUlNUICsgMTAxMiwNCiAgICB3eEVWVF9QTE9UX1ZBTFVFX1NFTF9DSEFO R0VEID0gd3hFVlRfRklSU1QgKyAxMDEzLA0KICAgIHd4RVZUX1BMT1RfQVJFQV9TRUxfQ1JFQVRJ TkcgPSB3eEVWVF9GSVJTVCArIDEwMTQsDQogICAgd3hFVlRfUExPVF9BUkVBX1NFTF9DUkVBVEVE ID0gd3hFVlRfRklSU1QgKyAxMDE1LA0KICAgIHd4RVZUX1BMT1RfQVJFQV9TRUxfQ0hBTkdJTkcg PSB3eEVWVF9GSVJTVCArIDEwMTYsDQogICAgd3hFVlRfUExPVF9BUkVBX1NFTF9DSEFOR0VEID0g d3hFVlRfRklSU1QgKyAxMDE3LA0KICAgIHd4RVZUX1BMT1RfQkVHSU5fWF9MQUJFTF9FRElUID0g d3hFVlRfRklSU1QgKyAxMDIwLA0KICAgIHd4RVZUX1BMT1RfRU5EX1hfTEFCRUxfRURJVCA9IHd4 RVZUX0ZJUlNUICsgMTAyMSwNCiAgICB3eEVWVF9QTE9UX0JFR0lOX1lfTEFCRUxfRURJVCA9IHd4 RVZUX0ZJUlNUICsgMTAyMiwNCiAgICB3eEVWVF9QTE9UX0VORF9ZX0xBQkVMX0VESVQgPSB3eEVW VF9GSVJTVCArIDEwMjMsDQogICAgd3hFVlRfUExPVF9CRUdJTl9USVRMRV9FRElUID0gd3hFVlRf RklSU1QgKyAxMDI0LA0KICAgIHd4RVZUX1BMT1RfRU5EX1RJVExFX0VESVQgPSB3eEVWVF9GSVJT VCArIDEwMjUsDQogICAgd3hFVlRfUExPVF9BUkVBX0NSRUFURSA9IHd4RVZUX0ZJUlNUICsgMTAy NiwNCg0KICAgIHd4RVZUX1VTRVJfRklSU1QgPSB3eEVWVF9GSVJTVCArIDIwMDANCn07DQojIDM2 NiAiLi4vLi4vaW5jbHVkZS93eC9ldmVudC5oIg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1w b3J0KSkgd3hFdmVudCA6IHB1YmxpYyB3eE9iamVjdA0Kew0KICAgIHB1YmxpYzogc3RhdGljIHd4 Q2xhc3NJbmZvIHNtX2NsYXNzd3hFdmVudDsgd3hDbGFzc0luZm8gKkdldENsYXNzSW5mbygpIGNv bnN0IHsgcmV0dXJuICZ3eEV2ZW50OjpzbV9jbGFzc3d4RXZlbnQ7IH0NCg0KcHVibGljOg0KICAg IHd4RXZlbnQoaW50IGlkID0gMCk7DQogICAgfnd4RXZlbnQoKSB7fQ0KDQogICAgdm9pZCBTZXRF dmVudFR5cGUod3hFdmVudFR5cGUgdHlwKSB7IG1fZXZlbnRUeXBlID0gdHlwOyB9DQogICAgd3hF dmVudFR5cGUgR2V0RXZlbnRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9ldmVudFR5cGU7IH0NCiAg ICB3eE9iamVjdCAqR2V0RXZlbnRPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2V2ZW50T2JqZWN0 OyB9DQogICAgdm9pZCBTZXRFdmVudE9iamVjdCh3eE9iamVjdCAqb2JqKSB7IG1fZXZlbnRPYmpl Y3QgPSBvYmo7IH0NCiAgICBsb25nIEdldFRpbWVzdGFtcCgpIGNvbnN0IHsgcmV0dXJuIG1fdGlt ZVN0YW1wOyB9DQogICAgdm9pZCBTZXRUaW1lc3RhbXAobG9uZyB0cyA9IDApIHsgbV90aW1lU3Rh bXAgPSB0czsgfQ0KICAgIGludCBHZXRJZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0NCiAgICB2 b2lkIFNldElkKGludCBJZCkgeyBtX2lkID0gSWQ7IH0NCg0KDQoNCg0KDQogICAgdm9pZCBTa2lw KGJvb2wgc2tpcCA9IDEpIHsgbV9za2lwcGVkID0gc2tpcDsgfQ0KICAgIGJvb2wgR2V0U2tpcHBl ZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2tpcHBlZDsgfTsNCg0KDQoNCiAgICBib29sIElzQ29tbWFu ZEV2ZW50KCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbW1hbmRFdmVudDsgfQ0KDQogICAgdm9pZCBD b3B5T2JqZWN0KHd4T2JqZWN0JiBvYmplY3RfZGVzdCkgY29uc3Q7DQoNCnB1YmxpYzoNCiAgICB3 eE9iamVjdCogbV9ldmVudE9iamVjdDsNCiAgICB3eEV2ZW50VHlwZSBtX2V2ZW50VHlwZTsNCiAg ICBsb25nIG1fdGltZVN0YW1wOw0KICAgIGludCBtX2lkOw0KICAgIHd4T2JqZWN0KiBtX2NhbGxi YWNrVXNlckRhdGE7DQogICAgYm9vbCBtX3NraXBwZWQ7DQoNCg0KDQogICAgYm9vbCBtX2lzQ29t bWFuZEV2ZW50Ow0KfTsNCiMgNDI5ICIuLi8uLi9pbmNsdWRlL3d4L2V2ZW50LmgiDQpjbGFzcyBf X2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eENvbW1hbmRFdmVudCA6IHB1YmxpYyB3eEV2ZW50 DQp7DQogICAgcHVibGljOiBzdGF0aWMgd3hDbGFzc0luZm8gc21fY2xhc3N3eENvbW1hbmRFdmVu dDsgd3hDbGFzc0luZm8gKkdldENsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZ3eENvbW1hbmRF dmVudDo6c21fY2xhc3N3eENvbW1hbmRFdmVudDsgfQ0KDQpwdWJsaWM6DQogICAgd3hDb21tYW5k RXZlbnQod3hFdmVudFR5cGUgY29tbWFuZFR5cGUgPSB3eEVWVF9OVUxMLCBpbnQgaWQgPSAwKTsN CiAgICB+d3hDb21tYW5kRXZlbnQoKSB7fQ0KDQoNCg0KDQoNCg0KDQogICAgdm9pZCBTZXRDbGll bnREYXRhKHZvaWQqIGNsaWVudERhdGEpIHsgbV9jbGllbnREYXRhID0gY2xpZW50RGF0YTsgfQ0K ICAgIHZvaWQgKkdldENsaWVudERhdGEoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudERhdGE7IH0N Cg0KDQogICAgdm9pZCBTZXRDbGllbnRPYmplY3Qod3hDbGllbnREYXRhKiBjbGllbnRPYmplY3Qp IHsgbV9jbGllbnRPYmplY3QgPSBjbGllbnRPYmplY3Q7IH0NCiAgICB2b2lkICpHZXRDbGllbnRP YmplY3QoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudE9iamVjdDsgfQ0KDQoNCiAgICBpbnQgR2V0 U2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb21tYW5kSW50OyB9DQoNCg0KICAgIHZvaWQg U2V0U3RyaW5nKGNvbnN0IHd4U3RyaW5nJiBzKSB7IG1fY29tbWFuZFN0cmluZyA9IHM7IH0NCiAg ICB3eFN0cmluZyBHZXRTdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX2NvbW1hbmRTdHJpbmc7IH0N Cg0KDQogICAgYm9vbCBJc0NoZWNrZWQoKSBjb25zdCB7IHJldHVybiBtX2NvbW1hbmRJbnQgIT0g MDsgfQ0KDQoNCiAgICBib29sIElzU2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gKG1fZXh0cmFM b25nICE9IDApOyB9DQoNCiAgICB2b2lkIFNldEV4dHJhTG9uZyhsb25nIGV4dHJhTG9uZykgeyBt X2V4dHJhTG9uZyA9IGV4dHJhTG9uZzsgfQ0KICAgIGxvbmcgR2V0RXh0cmFMb25nKCkgY29uc3Qg eyByZXR1cm4gbV9leHRyYUxvbmcgOyB9DQoNCiAgICB2b2lkIFNldEludChpbnQgaSkgeyBtX2Nv bW1hbmRJbnQgPSBpOyB9DQogICAgbG9uZyBHZXRJbnQoKSBjb25zdCB7IHJldHVybiBtX2NvbW1h bmRJbnQgOyB9DQoNCiAgICB2b2lkIENvcHlPYmplY3Qod3hPYmplY3QmIG9iaikgY29uc3Q7DQoN Cg0KDQoNCg0KcHVibGljOg0KICAgIHd4U3RyaW5nIG1fY29tbWFuZFN0cmluZzsNCiAgICBpbnQg bV9jb21tYW5kSW50Ow0KICAgIGxvbmcgbV9leHRyYUxvbmc7DQogICAgdm9pZCogbV9jbGllbnRE YXRhOw0KICAgIHd4Q2xpZW50RGF0YSogbV9jbGllbnRPYmplY3Q7DQp9Ow0KDQoNCg0KY2xhc3Mg X19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hOb3RpZnlFdmVudCA6IHB1YmxpYyB3eENvbW1h bmRFdmVudA0Kew0KcHVibGljOg0KICAgIHd4Tm90aWZ5RXZlbnQod3hFdmVudFR5cGUgY29tbWFu ZFR5cGUgPSB3eEVWVF9OVUxMLCBpbnQgaWQgPSAwKQ0KICAgICAgICAgICAgICAgIDogd3hDb21t YW5kRXZlbnQoY29tbWFuZFR5cGUsIGlkKSB7IG1fYkFsbG93ID0gMTsgfQ0KDQoNCiAgICB2b2lk IFZldG8oKSB7IG1fYkFsbG93ID0gMDsgfQ0KDQoNCiAgICB2b2lkIEFsbG93KCkgeyBtX2JBbGxv dyA9IDE7IH0NCg0KDQogICAgYm9vbCBJc0FsbG93ZWQoKSBjb25zdCB7IHJldHVybiBtX2JBbGxv dzsgfQ0KDQoNCg0KICAgIHZvaWQgQ29weU9iamVjdCh3eE9iamVjdCYgb2JqKSBjb25zdDsNCg0K cHJpdmF0ZToNCiAgICBib29sIG1fYkFsbG93Ow0KDQogICAgcHVibGljOiBzdGF0aWMgd3hDbGFz c0luZm8gc21fY2xhc3N3eE5vdGlmeUV2ZW50OyB3eENsYXNzSW5mbyAqR2V0Q2xhc3NJbmZvKCkg Y29uc3QgeyByZXR1cm4gJnd4Tm90aWZ5RXZlbnQ6OnNtX2NsYXNzd3hOb3RpZnlFdmVudDsgfQ0K fTsNCiMgNTIzICIuLi8uLi9pbmNsdWRlL3d4L2V2ZW50LmgiDQpjbGFzcyBfX2F0dHJpYnV0ZV9f KChkbGxpbXBvcnQpKSB3eFNjcm9sbEV2ZW50IDogcHVibGljIHd4Q29tbWFuZEV2ZW50DQp7DQog ICAgcHVibGljOiBzdGF0aWMgd3hDbGFzc0luZm8gc21fY2xhc3N3eFNjcm9sbEV2ZW50OyB3eENs YXNzSW5mbyAqR2V0Q2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnd4U2Nyb2xsRXZlbnQ6OnNt X2NsYXNzd3hTY3JvbGxFdmVudDsgfQ0KDQpwdWJsaWM6DQogICAgd3hTY3JvbGxFdmVudCh3eEV2 ZW50VHlwZSBjb21tYW5kVHlwZSA9IHd4RVZUX05VTEwsDQogICAgICAgICAgICAgICAgICBpbnQg aWQgPSAwLCBpbnQgcG9zID0gMCwgaW50IG9yaWVudCA9IDApOw0KICAgIH53eFNjcm9sbEV2ZW50 KCkge30NCg0KDQoNCg0KDQoNCiAgICBpbnQgR2V0T3JpZW50YXRpb24oKSBjb25zdCB7IHJldHVy biAoaW50KSBtX2V4dHJhTG9uZyA7IH0NCiAgICBpbnQgR2V0UG9zaXRpb24oKSBjb25zdCB7IHJl dHVybiBtX2NvbW1hbmRJbnQgOyB9DQogICAgdm9pZCBTZXRPcmllbnRhdGlvbihpbnQgb3JpZW50 KSB7IG1fZXh0cmFMb25nID0gKGxvbmcpIG9yaWVudDsgfQ0KICAgIHZvaWQgU2V0UG9zaXRpb24o aW50IHBvcykgeyBtX2NvbW1hbmRJbnQgPSBwb3M7IH0NCn07DQojIDU1NiAiLi4vLi4vaW5jbHVk ZS93eC9ldmVudC5oIg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hTY3JvbGxX aW5FdmVudCA6IHB1YmxpYyB3eEV2ZW50DQp7DQogICAgcHVibGljOiBzdGF0aWMgd3hDbGFzc0lu Zm8gc21fY2xhc3N3eFNjcm9sbFdpbkV2ZW50OyB3eENsYXNzSW5mbyAqR2V0Q2xhc3NJbmZvKCkg Y29uc3QgeyByZXR1cm4gJnd4U2Nyb2xsV2luRXZlbnQ6OnNtX2NsYXNzd3hTY3JvbGxXaW5FdmVu dDsgfQ0KDQpwdWJsaWM6DQogICAgd3hTY3JvbGxXaW5FdmVudCh3eEV2ZW50VHlwZSBjb21tYW5k VHlwZSA9IHd4RVZUX05VTEwsDQogICAgICAgICAgICAgICAgICAgICBpbnQgcG9zID0gMCwgaW50 IG9yaWVudCA9IDApOw0KICAgIH53eFNjcm9sbFdpbkV2ZW50KCkge30NCg0KDQoNCg0KDQogICAg aW50IEdldE9yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gKGludCkgbV9leHRyYUxvbmcgOyB9 DQogICAgaW50IEdldFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jb21tYW5kSW50IDsgfQ0K ICAgIHZvaWQgU2V0T3JpZW50YXRpb24oaW50IG9yaWVudCkgeyBtX2V4dHJhTG9uZyA9IChsb25n KSBvcmllbnQ7IH0NCiAgICB2b2lkIFNldFBvc2l0aW9uKGludCBwb3MpIHsgbV9jb21tYW5kSW50 ID0gcG9zOyB9DQoNCiAgICB2b2lkIENvcHlPYmplY3Qod3hPYmplY3QmIG9iamVjdF9kZXN0KSBj b25zdDsNCnB1YmxpYzoNCiAgICBpbnQgbV9jb21tYW5kSW50Ow0KICAgIGxvbmcgbV9leHRyYUxv bmc7DQp9Ow0KIyA2MDkgIi4uLy4uL2luY2x1ZGUvd3gvZXZlbnQuaCINCmNsYXNzIF9fYXR0cmli dXRlX18oKGRsbGltcG9ydCkpIHd4TW91c2VFdmVudCA6IHB1YmxpYyB3eEV2ZW50DQp7DQogICAg cHVibGljOiBzdGF0aWMgd3hDbGFzc0luZm8gc21fY2xhc3N3eE1vdXNlRXZlbnQ7IHd4Q2xhc3NJ bmZvICpHZXRDbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmd3hNb3VzZUV2ZW50OjpzbV9jbGFz c3d4TW91c2VFdmVudDsgfQ0KDQpwdWJsaWM6DQogICAgd3hNb3VzZUV2ZW50KHd4RXZlbnRUeXBl IG1vdXNlVHlwZSA9IHd4RVZUX05VTEwpOw0KDQoNCiAgICBib29sIElzQnV0dG9uKCkgY29uc3Qg eyByZXR1cm4gQnV0dG9uKC0xKTsgfQ0KDQoNCiAgICBib29sIEJ1dHRvbkRvd24oaW50IGJ1dCA9 IC0xKSBjb25zdDsNCg0KDQogICAgYm9vbCBCdXR0b25EQ2xpY2soaW50IGJ1dCA9IC0xKSBjb25z dDsNCg0KDQogICAgYm9vbCBCdXR0b25VcChpbnQgYnV0ID0gLTEpIGNvbnN0Ow0KDQoNCiAgICBi b29sIEJ1dHRvbihpbnQgYnV0KSBjb25zdDsNCg0KDQogICAgYm9vbCBCdXR0b25Jc0Rvd24oaW50 IGJ1dCkgY29uc3Q7DQoNCg0KICAgIGJvb2wgQ29udHJvbERvd24oKSBjb25zdCB7IHJldHVybiBt X2NvbnRyb2xEb3duOyB9DQogICAgYm9vbCBNZXRhRG93bigpIGNvbnN0IHsgcmV0dXJuIG1fbWV0 YURvd247IH0NCiAgICBib29sIEFsdERvd24oKSBjb25zdCB7IHJldHVybiBtX2FsdERvd247IH0N CiAgICBib29sIFNoaWZ0RG93bigpIGNvbnN0IHsgcmV0dXJuIG1fc2hpZnREb3duOyB9DQoNCg0K ICAgIGJvb2wgTGVmdERvd24oKSBjb25zdCB7IHJldHVybiAobV9ldmVudFR5cGUgPT0gd3hFVlRf TEVGVF9ET1dOKTsgfQ0KICAgIGJvb2wgTWlkZGxlRG93bigpIGNvbnN0IHsgcmV0dXJuIChtX2V2 ZW50VHlwZSA9PSB3eEVWVF9NSURETEVfRE9XTik7IH0NCiAgICBib29sIFJpZ2h0RG93bigpIGNv bnN0IHsgcmV0dXJuIChtX2V2ZW50VHlwZSA9PSB3eEVWVF9SSUdIVF9ET1dOKTsgfQ0KDQogICAg Ym9vbCBMZWZ0VXAoKSBjb25zdCB7IHJldHVybiAobV9ldmVudFR5cGUgPT0gd3hFVlRfTEVGVF9V UCk7IH0NCiAgICBib29sIE1pZGRsZVVwKCkgY29uc3QgeyByZXR1cm4gKG1fZXZlbnRUeXBlID09 IHd4RVZUX01JRERMRV9VUCk7IH0NCiAgICBib29sIFJpZ2h0VXAoKSBjb25zdCB7IHJldHVybiAo bV9ldmVudFR5cGUgPT0gd3hFVlRfUklHSFRfVVApOyB9DQoNCiAgICBib29sIExlZnREQ2xpY2so KSBjb25zdCB7IHJldHVybiAobV9ldmVudFR5cGUgPT0gd3hFVlRfTEVGVF9EQ0xJQ0spOyB9DQog ICAgYm9vbCBNaWRkbGVEQ2xpY2soKSBjb25zdCB7IHJldHVybiAobV9ldmVudFR5cGUgPT0gd3hF VlRfTUlERExFX0RDTElDSyk7IH0NCiAgICBib29sIFJpZ2h0RENsaWNrKCkgY29uc3QgeyByZXR1 cm4gKG1fZXZlbnRUeXBlID09IHd4RVZUX1JJR0hUX0RDTElDSyk7IH0NCg0KDQoNCiAgICBib29s IExlZnRJc0Rvd24oKSBjb25zdCB7IHJldHVybiBtX2xlZnREb3duOyB9DQogICAgYm9vbCBNaWRk bGVJc0Rvd24oKSBjb25zdCB7IHJldHVybiBtX21pZGRsZURvd247IH0NCiAgICBib29sIFJpZ2h0 SXNEb3duKCkgY29uc3QgeyByZXR1cm4gbV9yaWdodERvd247IH0NCg0KDQogICAgYm9vbCBEcmFn Z2luZygpIGNvbnN0DQogICAgew0KICAgICAgICByZXR1cm4gKChtX2V2ZW50VHlwZSA9PSB3eEVW VF9NT1RJT04pICYmDQogICAgICAgICAgICAgICAgKExlZnRJc0Rvd24oKSB8fCBNaWRkbGVJc0Rv d24oKSB8fCBSaWdodElzRG93bigpKSk7DQogICAgfQ0KDQoNCiAgICBib29sIE1vdmluZygpIGNv bnN0IHsgcmV0dXJuIChtX2V2ZW50VHlwZSA9PSB3eEVWVF9NT1RJT04pOyB9DQoNCg0KICAgIGJv b2wgRW50ZXJpbmcoKSBjb25zdCB7IHJldHVybiAobV9ldmVudFR5cGUgPT0gd3hFVlRfRU5URVJf V0lORE9XKTsgfQ0KDQoNCiAgICBib29sIExlYXZpbmcoKSBjb25zdCB7IHJldHVybiAobV9ldmVu dFR5cGUgPT0gd3hFVlRfTEVBVkVfV0lORE9XKTsgfQ0KDQoNCiAgICB2b2lkIEdldFBvc2l0aW9u KHd4Q29vcmQgKnhwb3MsIHd4Q29vcmQgKnlwb3MpIGNvbnN0DQogICAgew0KICAgICAgICBpZiAo eHBvcykNCiAgICAgICAgICAgICp4cG9zID0gbV94Ow0KICAgICAgICBpZiAoeXBvcykNCiAgICAg ICAgICAgICp5cG9zID0gbV95Ow0KICAgIH0NCg0KDQogICAgdm9pZCBHZXRQb3NpdGlvbihsb25n ICp4cG9zLCBsb25nICp5cG9zKSBjb25zdA0KICAgIHsNCiAgICAgICAgaWYgKHhwb3MpDQogICAg ICAgICAgICAqeHBvcyA9IChsb25nKW1feDsNCiAgICAgICAgaWYgKHlwb3MpDQogICAgICAgICAg ICAqeXBvcyA9IChsb25nKW1feTsNCiAgICB9DQoNCg0KDQogICAgd3hQb2ludCBHZXRQb3NpdGlv bigpIGNvbnN0IHsgcmV0dXJuIHd4UG9pbnQobV94LCBtX3kpOyB9DQoNCg0KICAgIHd4UG9pbnQg R2V0TG9naWNhbFBvc2l0aW9uKGNvbnN0IHd4REMmIGRjKSBjb25zdCA7DQojIDcxNyAiLi4vLi4v aW5jbHVkZS93eC9ldmVudC5oIg0KICAgIHd4Q29vcmQgR2V0WCgpIGNvbnN0IHsgcmV0dXJuIG1f eDsgfQ0KDQoNCiAgICB3eENvb3JkIEdldFkoKSBjb25zdCB7IHJldHVybiBtX3k7IH0NCg0KICAg IHZvaWQgQ29weU9iamVjdCh3eE9iamVjdCYgb2JqKSBjb25zdDsNCg0KcHVibGljOg0KICAgIHd4 Q29vcmQgbV94LCBtX3k7DQoNCiAgICBib29sIG1fbGVmdERvd247DQogICAgYm9vbCBtX21pZGRs ZURvd247DQogICAgYm9vbCBtX3JpZ2h0RG93bjsNCg0KICAgIGJvb2wgbV9jb250cm9sRG93bjsN CiAgICBib29sIG1fc2hpZnREb3duOw0KICAgIGJvb2wgbV9hbHREb3duOw0KICAgIGJvb2wgbV9t ZXRhRG93bjsNCn07DQoNCg0KDQoNCg0KDQoNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9y dCkpIHd4U2V0Q3Vyc29yRXZlbnQgOiBwdWJsaWMgd3hFdmVudA0Kew0KcHVibGljOg0KICAgIHd4 U2V0Q3Vyc29yRXZlbnQod3hDb29yZCB4LCB3eENvb3JkIHkpDQogICAgew0KICAgICAgICBtX2V2 ZW50VHlwZSA9IHd4RVZUX1NFVF9DVVJTT1I7DQoNCiAgICAgICAgbV94ID0geDsNCiAgICAgICAg bV95ID0geTsNCiAgICB9DQoNCiAgICB3eENvb3JkIEdldFgoKSBjb25zdCB7IHJldHVybiBtX3g7 IH0NCiAgICB3eENvb3JkIEdldFkoKSBjb25zdCB7IHJldHVybiBtX3k7IH0NCg0KICAgIHZvaWQg U2V0Q3Vyc29yKGNvbnN0IHd4Q3Vyc29yJiBjdXJzb3IpIHsgbV9jdXJzb3IgPSBjdXJzb3I7IH0N CiAgICBjb25zdCB3eEN1cnNvciYgR2V0Q3Vyc29yKCkgY29uc3QgeyByZXR1cm4gbV9jdXJzb3I7 IH0NCiAgICBib29sIEhhc0N1cnNvcigpIGNvbnN0IHsgcmV0dXJuIG1fY3Vyc29yLk9rKCk7IH0N Cg0KcHJpdmF0ZToNCiAgICB3eENvb3JkIG1feCwgbV95Ow0KICAgIHd4Q3Vyc29yIG1fY3Vyc29y Ow0KfTsNCiMgNzc1ICIuLi8uLi9pbmNsdWRlL3d4L2V2ZW50LmgiDQpjbGFzcyBfX2F0dHJpYnV0 ZV9fKChkbGxpbXBvcnQpKSB3eEtleUV2ZW50IDogcHVibGljIHd4RXZlbnQNCnsNCiAgICBwdWJs aWM6IHN0YXRpYyB3eENsYXNzSW5mbyBzbV9jbGFzc3d4S2V5RXZlbnQ7IHd4Q2xhc3NJbmZvICpH ZXRDbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmd3hLZXlFdmVudDo6c21fY2xhc3N3eEtleUV2 ZW50OyB9DQoNCnB1YmxpYzoNCiAgICB3eEtleUV2ZW50KHd4RXZlbnRUeXBlIGtleVR5cGUgPSB3 eEVWVF9OVUxMKTsNCg0KDQogICAgYm9vbCBDb250cm9sRG93bigpIGNvbnN0IHsgcmV0dXJuIG1f Y29udHJvbERvd247IH0NCiAgICBib29sIE1ldGFEb3duKCkgY29uc3QgeyByZXR1cm4gbV9tZXRh RG93bjsgfQ0KICAgIGJvb2wgQWx0RG93bigpIGNvbnN0IHsgcmV0dXJuIG1fYWx0RG93bjsgfQ0K ICAgIGJvb2wgU2hpZnREb3duKCkgY29uc3QgeyByZXR1cm4gbV9zaGlmdERvd247IH0NCg0KICAg IGJvb2wgSGFzTW9kaWZpZXJzKCkgY29uc3QgeyByZXR1cm4gQ29udHJvbERvd24oKSB8fCBBbHRE b3duKCkgfHwgTWV0YURvd24oKTsgfQ0KDQoNCiAgICBpbnQgR2V0S2V5Q29kZSgpIGNvbnN0IHsg cmV0dXJuIChpbnQpbV9rZXlDb2RlOyB9DQoNCg0KICAgIHZvaWQgR2V0UG9zaXRpb24od3hDb29y ZCAqeHBvcywgd3hDb29yZCAqeXBvcykgY29uc3QNCiAgICB7DQogICAgICAgIGlmICh4cG9zKSAq eHBvcyA9IG1feDsNCiAgICAgICAgaWYgKHlwb3MpICp5cG9zID0gbV95Ow0KICAgIH0NCg0KDQog ICAgdm9pZCBHZXRQb3NpdGlvbihsb25nICp4cG9zLCBsb25nICp5cG9zKSBjb25zdA0KICAgIHsN CiAgICAgICAgaWYgKHhwb3MpICp4cG9zID0gKGxvbmcpbV94Ow0KICAgICAgICBpZiAoeXBvcykg Knlwb3MgPSAobG9uZyltX3k7DQogICAgfQ0KDQoNCiAgICB3eFBvaW50IEdldFBvc2l0aW9uKCkg Y29uc3QNCiAgICAgICAgeyByZXR1cm4gd3hQb2ludChtX3gsIG1feSk7IH0NCg0KDQogICAgd3hD b29yZCBHZXRYKCkgY29uc3QgeyByZXR1cm4gbV94OyB9DQoNCg0KICAgIHd4Q29vcmQgR2V0WSgp IGNvbnN0IHsgcmV0dXJuIG1feTsgfQ0KDQogICAgdm9pZCBDb3B5T2JqZWN0KHd4T2JqZWN0JiBv YmopIGNvbnN0Ow0KDQoNCiAgICBsb25nIEtleUNvZGUoKSBjb25zdCB7IHJldHVybiBtX2tleUNv ZGU7IH0NCg0KcHVibGljOg0KICAgIHd4Q29vcmQgbV94LCBtX3k7DQoNCiAgICBsb25nIG1fa2V5 Q29kZTsNCg0KICAgIGJvb2wgbV9jb250cm9sRG93bjsNCiAgICBib29sIG1fc2hpZnREb3duOw0K ICAgIGJvb2wgbV9hbHREb3duOw0KICAgIGJvb2wgbV9tZXRhRG93bjsNCiAgICBib29sIG1fc2Nh bkNvZGU7DQp9Ow0KDQoNCg0KDQoNCg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkg d3hTaXplRXZlbnQgOiBwdWJsaWMgd3hFdmVudA0Kew0KICAgIHB1YmxpYzogc3RhdGljIHd4Q2xh c3NJbmZvIHNtX2NsYXNzd3hTaXplRXZlbnQ7IHd4Q2xhc3NJbmZvICpHZXRDbGFzc0luZm8oKSBj b25zdCB7IHJldHVybiAmd3hTaXplRXZlbnQ6OnNtX2NsYXNzd3hTaXplRXZlbnQ7IH0NCg0KcHVi bGljOg0KICAgIHd4U2l6ZSBtX3NpemU7DQoNCiAgICB3eFNpemVFdmVudCgpIHsgbV9ldmVudFR5 cGUgPSB3eEVWVF9TSVpFOyB9DQogICAgd3hTaXplRXZlbnQoY29uc3Qgd3hTaXplJiBzeiwgaW50 IGlkID0gMCkNCiAgICAgICAgOiBtX3NpemUoc3opDQogICAgICAgIHsgbV9ldmVudFR5cGUgPSB3 eEVWVF9TSVpFOyBtX2lkID0gaWQ7IH0NCg0KICAgIHd4U2l6ZSBHZXRTaXplKCkgY29uc3QgeyBy ZXR1cm4gbV9zaXplOyB9DQoNCiAgICB2b2lkIENvcHlPYmplY3Qod3hPYmplY3QmIG9iaikgY29u c3Q7DQp9Ow0KDQoNCg0KDQoNCg0KDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3 eE1vdmVFdmVudCA6IHB1YmxpYyB3eEV2ZW50DQp7DQogICAgcHVibGljOiBzdGF0aWMgd3hDbGFz c0luZm8gc21fY2xhc3N3eE1vdmVFdmVudDsgd3hDbGFzc0luZm8gKkdldENsYXNzSW5mbygpIGNv bnN0IHsgcmV0dXJuICZ3eE1vdmVFdmVudDo6c21fY2xhc3N3eE1vdmVFdmVudDsgfQ0KDQpwdWJs aWM6DQogICAgd3hQb2ludCBtX3BvczsNCg0KICAgIHd4TW92ZUV2ZW50KCkgeyBtX2V2ZW50VHlw ZSA9IHd4RVZUX01PVkU7IH0NCiAgICB3eE1vdmVFdmVudChjb25zdCB3eFBvaW50JiBwb3MsIGlu dCBpZCA9IDApDQogICAgICAgIDogbV9wb3MocG9zKQ0KICAgICAgICB7IG1fZXZlbnRUeXBlID0g d3hFVlRfTU9WRTsgbV9pZCA9IGlkOyB9DQoNCiAgICB3eFBvaW50IEdldFBvc2l0aW9uKCkgY29u c3QgeyByZXR1cm4gbV9wb3M7IH0NCg0KICAgIHZvaWQgQ29weU9iamVjdCh3eE9iamVjdCYgb2Jq KSBjb25zdDsNCn07DQojIDg4OCAiLi4vLi4vaW5jbHVkZS93eC9ldmVudC5oIg0KICAgIGV4dGVy biBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBpbnQgZ19pc1BhaW50aW5nOw0KDQoNCmNsYXNz IF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4UGFpbnRFdmVudCA6IHB1YmxpYyB3eEV2ZW50 DQp7DQogICAgcHVibGljOiBzdGF0aWMgd3hDbGFzc0luZm8gc21fY2xhc3N3eFBhaW50RXZlbnQ7 IHd4Q2xhc3NJbmZvICpHZXRDbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmd3hQYWludEV2ZW50 OjpzbV9jbGFzc3d4UGFpbnRFdmVudDsgfQ0KDQpwdWJsaWM6DQogICAgd3hQYWludEV2ZW50KGlu dCBJZCA9IDApDQogICAgew0KICAgICAgICBtX2V2ZW50VHlwZSA9IHd4RVZUX1BBSU5UOw0KICAg ICAgICBtX2lkID0gSWQ7DQoNCg0KDQogICAgICAgIGdfaXNQYWludGluZysrOw0KDQogICAgfQ0K DQoNCiAgICB+d3hQYWludEV2ZW50KCkNCiAgICB7DQogICAgICAgIGdfaXNQYWludGluZy0tOw0K ICAgIH0NCg0KfTsNCg0KDQoNCg0KDQoNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkp IHd4RXJhc2VFdmVudCA6IHB1YmxpYyB3eEV2ZW50DQp7DQogICAgcHVibGljOiBzdGF0aWMgd3hD bGFzc0luZm8gc21fY2xhc3N3eEVyYXNlRXZlbnQ7IHd4Q2xhc3NJbmZvICpHZXRDbGFzc0luZm8o KSBjb25zdCB7IHJldHVybiAmd3hFcmFzZUV2ZW50OjpzbV9jbGFzc3d4RXJhc2VFdmVudDsgfQ0K DQpwdWJsaWM6DQogICAgd3hEQyAqbV9kYzsNCg0KICAgIHd4RXJhc2VFdmVudChpbnQgSWQgPSAw LCB3eERDICpkYyA9ICh3eERDICopIF9fbnVsbCkNCiAgICAgICAgeyBtX2V2ZW50VHlwZSA9IHd4 RVZUX0VSQVNFX0JBQ0tHUk9VTkQ7IG1faWQgPSBJZDsgbV9kYyA9IGRjOyB9DQogICAgd3hEQyAq R2V0REMoKSBjb25zdCB7IHJldHVybiBtX2RjOyB9DQoNCiAgICB2b2lkIENvcHlPYmplY3Qod3hP YmplY3QmIG9iaikgY29uc3Q7DQp9Ow0KDQoNCg0KDQoNCg0KDQpjbGFzcyBfX2F0dHJpYnV0ZV9f KChkbGxpbXBvcnQpKSB3eEZvY3VzRXZlbnQgOiBwdWJsaWMgd3hFdmVudA0Kew0KICAgIHB1Ymxp Yzogc3RhdGljIHd4Q2xhc3NJbmZvIHNtX2NsYXNzd3hGb2N1c0V2ZW50OyB3eENsYXNzSW5mbyAq R2V0Q2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnd4Rm9jdXNFdmVudDo6c21fY2xhc3N3eEZv Y3VzRXZlbnQ7IH0NCg0KcHVibGljOg0KICAgIHd4Rm9jdXNFdmVudCh3eEV2ZW50VHlwZSB0eXBl ID0gd3hFVlRfTlVMTCwgaW50IElkID0gMCkNCiAgICAgICAgeyBtX2V2ZW50VHlwZSA9IHR5cGU7 IG1faWQgPSBJZDsgfQ0KfTsNCg0KDQoNCg0KDQoNCg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxs aW1wb3J0KSkgd3hBY3RpdmF0ZUV2ZW50IDogcHVibGljIHd4RXZlbnQNCnsNCiAgICBwdWJsaWM6 IHN0YXRpYyB3eENsYXNzSW5mbyBzbV9jbGFzc3d4QWN0aXZhdGVFdmVudDsgd3hDbGFzc0luZm8g KkdldENsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZ3eEFjdGl2YXRlRXZlbnQ6OnNtX2NsYXNz d3hBY3RpdmF0ZUV2ZW50OyB9DQoNCnB1YmxpYzoNCiAgICB3eEFjdGl2YXRlRXZlbnQod3hFdmVu dFR5cGUgdHlwZSA9IHd4RVZUX05VTEwsIGJvb2wgYWN0aXZlID0gMSwgaW50IElkID0gMCkNCiAg ICAgICAgeyBtX2V2ZW50VHlwZSA9IHR5cGU7IG1fYWN0aXZlID0gYWN0aXZlOyBtX2lkID0gSWQ7 IH0NCiAgICBib29sIEdldEFjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlOyB9DQoNCiAg ICB2b2lkIENvcHlPYmplY3Qod3hPYmplY3QmIG9iaikgY29uc3Q7DQoNCnByaXZhdGU6DQogICAg Ym9vbCBtX2FjdGl2ZTsNCn07DQoNCg0KDQoNCg0KDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxp bXBvcnQpKSB3eEluaXREaWFsb2dFdmVudCA6IHB1YmxpYyB3eEV2ZW50DQp7DQogICAgcHVibGlj OiBzdGF0aWMgd3hDbGFzc0luZm8gc21fY2xhc3N3eEluaXREaWFsb2dFdmVudDsgd3hDbGFzc0lu Zm8gKkdldENsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZ3eEluaXREaWFsb2dFdmVudDo6c21f Y2xhc3N3eEluaXREaWFsb2dFdmVudDsgfQ0KDQpwdWJsaWM6DQogICAgd3hJbml0RGlhbG9nRXZl bnQoaW50IElkID0gMCkNCiAgICAgICAgeyBtX2V2ZW50VHlwZSA9IHd4RVZUX0lOSVRfRElBTE9H OyBtX2lkID0gSWQ7IH0NCn07DQojIDk5MyAiLi4vLi4vaW5jbHVkZS93eC9ldmVudC5oIg0KY2xh c3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hNZW51RXZlbnQgOiBwdWJsaWMgd3hFdmVu dA0Kew0KICAgIHB1YmxpYzogc3RhdGljIHd4Q2xhc3NJbmZvIHNtX2NsYXNzd3hNZW51RXZlbnQ7 IHd4Q2xhc3NJbmZvICpHZXRDbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmd3hNZW51RXZlbnQ6 OnNtX2NsYXNzd3hNZW51RXZlbnQ7IH0NCg0KcHVibGljOg0KICAgIHd4TWVudUV2ZW50KHd4RXZl bnRUeXBlIHR5cGUgPSB3eEVWVF9OVUxMLCBpbnQgaWQgPSAwKQ0KICAgICAgeyBtX2V2ZW50VHlw ZSA9IHR5cGU7IG1fbWVudUlkID0gaWQ7IG1faWQgPSBpZDsgfQ0KDQogICAgaW50IEdldE1lbnVJ ZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWVudUlkOyB9DQoNCiAgICB2b2lkIENvcHlPYmplY3Qod3hP YmplY3QmIG9iaikgY29uc3Q7DQpwcml2YXRlOg0KICAgIGludCBtX21lbnVJZDsNCn07DQojIDEw MTUgIi4uLy4uL2luY2x1ZGUvd3gvZXZlbnQuaCINCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGlt cG9ydCkpIHd4Q2xvc2VFdmVudCA6IHB1YmxpYyB3eEV2ZW50DQp7DQogICAgcHVibGljOiBzdGF0 aWMgd3hDbGFzc0luZm8gc21fY2xhc3N3eENsb3NlRXZlbnQ7IHd4Q2xhc3NJbmZvICpHZXRDbGFz c0luZm8oKSBjb25zdCB7IHJldHVybiAmd3hDbG9zZUV2ZW50OjpzbV9jbGFzc3d4Q2xvc2VFdmVu dDsgfQ0KDQpwdWJsaWM6DQogICAgd3hDbG9zZUV2ZW50KHd4RXZlbnRUeXBlIHR5cGUgPSB3eEVW VF9OVUxMLCBpbnQgaWQgPSAwKQ0KICAgIHsNCiAgICAgICAgbV9ldmVudFR5cGUgPSB0eXBlOw0K ICAgICAgICBtX2xvZ2dpbmdPZmYgPSAxOw0KICAgICAgICBtX3ZldG8gPSAwOw0KICAgICAgICBt X2lkID0gaWQ7DQoNCg0KDQogICAgICAgIG1fY2FuVmV0byA9IDE7DQogICAgfQ0KDQogICAgdm9p ZCBTZXRMb2dnaW5nT2ZmKGJvb2wgbG9nT2ZmKSB7IG1fbG9nZ2luZ09mZiA9IGxvZ09mZjsgfQ0K ICAgIGJvb2wgR2V0TG9nZ2luZ09mZigpIGNvbnN0IHsgcmV0dXJuIG1fbG9nZ2luZ09mZjsgfQ0K DQogICAgdm9pZCBWZXRvKGJvb2wgdmV0byA9IDEpDQogICAgew0KDQogICAgICAgIGlmICghKG1f Y2FuVmV0bykpIHtpZiAoICEod3hGYWxzZSkgKSB3eE9uQXNzZXJ0KCIuLi8uLi9pbmNsdWRlL3d4 L2V2ZW50LmgiLCAxMDM5LCAiY2FsbCB0byBWZXRvKCkgaWdub3JlZCAoY2FuJ3QgdmV0byB0aGlz IGV2ZW50KSIpOyByZXR1cm47IH07DQoNCg0KICAgICAgICBtX3ZldG8gPSB2ZXRvOw0KICAgIH0N CiAgICB2b2lkIFNldENhblZldG8oYm9vbCBjYW5WZXRvKSB7IG1fY2FuVmV0byA9IGNhblZldG87 IH0NCg0KICAgIGJvb2wgQ2FuVmV0bygpIGNvbnN0IHsgcmV0dXJuIG1fY2FuVmV0bzsgfQ0KICAg IGJvb2wgR2V0VmV0bygpIGNvbnN0IHsgcmV0dXJuIG1fY2FuVmV0byAmJiBtX3ZldG87IH0NCiMg MTA1NiAiLi4vLi4vaW5jbHVkZS93eC9ldmVudC5oIg0KICAgIHZvaWQgQ29weU9iamVjdCh3eE9i amVjdCYgb2JqKSBjb25zdDsNCg0KcHJvdGVjdGVkOg0KICAgIGJvb2wgbV9sb2dnaW5nT2ZmOw0K ICAgIGJvb2wgbV92ZXRvLCBtX2NhblZldG87DQoNCg0KDQoNCn07DQoNCg0KDQoNCg0KY2xhc3Mg X19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hTaG93RXZlbnQgOiBwdWJsaWMgd3hFdmVudA0K ew0KICAgIHB1YmxpYzogc3RhdGljIHd4Q2xhc3NJbmZvIHNtX2NsYXNzd3hTaG93RXZlbnQ7IHd4 Q2xhc3NJbmZvICpHZXRDbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmd3hTaG93RXZlbnQ6OnNt X2NsYXNzd3hTaG93RXZlbnQ7IH0NCg0KcHVibGljOg0KDQogICAgd3hTaG93RXZlbnQoaW50IGlk ID0gMCwgYm9vbCBzaG93ID0gMCkNCiAgICAgICAgeyBtX2V2ZW50VHlwZSA9IHd4RVZUX1NIT1c7 IG1faWQgPSBpZDsgbV9zaG93ID0gc2hvdzsgfQ0KDQogICAgdm9pZCBTZXRTaG93KGJvb2wgc2hv dykgeyBtX3Nob3cgPSBzaG93OyB9DQogICAgYm9vbCBHZXRTaG93KCkgY29uc3QgeyByZXR1cm4g bV9zaG93OyB9DQoNCiAgICB2b2lkIENvcHlPYmplY3Qod3hPYmplY3QmIG9iaikgY29uc3Q7DQoN CnByb3RlY3RlZDoNCiAgICBib29sIG1fc2hvdzsNCn07DQoNCg0KDQoNCg0KY2xhc3MgX19hdHRy aWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hJY29uaXplRXZlbnQgOiBwdWJsaWMgd3hFdmVudA0Kew0K ICAgIHB1YmxpYzogc3RhdGljIHd4Q2xhc3NJbmZvIHNtX2NsYXNzd3hJY29uaXplRXZlbnQ7IHd4 Q2xhc3NJbmZvICpHZXRDbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmd3hJY29uaXplRXZlbnQ6 OnNtX2NsYXNzd3hJY29uaXplRXZlbnQ7IH0NCg0KcHVibGljOg0KICAgIHd4SWNvbml6ZUV2ZW50 KGludCBpZCA9IDApDQogICAgICAgIHsgbV9ldmVudFR5cGUgPSB3eEVWVF9JQ09OSVpFOyBtX2lk ID0gaWQ7IH0NCn07DQoNCg0KDQoNCg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkg d3hNYXhpbWl6ZUV2ZW50IDogcHVibGljIHd4RXZlbnQNCnsNCiAgICBwdWJsaWM6IHN0YXRpYyB3 eENsYXNzSW5mbyBzbV9jbGFzc3d4TWF4aW1pemVFdmVudDsgd3hDbGFzc0luZm8gKkdldENsYXNz SW5mbygpIGNvbnN0IHsgcmV0dXJuICZ3eE1heGltaXplRXZlbnQ6OnNtX2NsYXNzd3hNYXhpbWl6 ZUV2ZW50OyB9DQoNCnB1YmxpYzoNCiAgd3hNYXhpbWl6ZUV2ZW50KGludCBpZCA9IDApDQogICAg ICB7IG1fZXZlbnRUeXBlID0gd3hFVlRfTUFYSU1JWkU7IG1faWQgPSBpZDsgfQ0KfTsNCiMgMTEz NCAiLi4vLi4vaW5jbHVkZS93eC9ldmVudC5oIg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1w b3J0KSkgd3hKb3lzdGlja0V2ZW50IDogcHVibGljIHd4RXZlbnQNCnsNCiAgICBwdWJsaWM6IHN0 YXRpYyB3eENsYXNzSW5mbyBzbV9jbGFzc3d4Sm95c3RpY2tFdmVudDsgd3hDbGFzc0luZm8gKkdl dENsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZ3eEpveXN0aWNrRXZlbnQ6OnNtX2NsYXNzd3hK b3lzdGlja0V2ZW50OyB9DQoNCnB1YmxpYzoNCiAgICB3eFBvaW50IG1fcG9zOw0KICAgIGludCBt X3pQb3NpdGlvbjsNCiAgICBpbnQgbV9idXR0b25DaGFuZ2U7DQogICAgaW50IG1fYnV0dG9uU3Rh dGU7DQogICAgaW50IG1fam95U3RpY2s7DQoNCiAgICB3eEpveXN0aWNrRXZlbnQod3hFdmVudFR5 cGUgdHlwZSA9IHd4RVZUX05VTEwsDQogICAgICAgICAgICAgICAgICAgIGludCBzdGF0ZSA9IDAs DQogICAgICAgICAgICAgICAgICAgIGludCBqb3lzdGljayA9IDAsDQogICAgICAgICAgICAgICAg ICAgIGludCBjaGFuZ2UgPSAwKQ0KICAgIHsNCiAgICAgICAgbV9ldmVudFR5cGUgPSB0eXBlOw0K ICAgICAgICBtX2J1dHRvblN0YXRlID0gc3RhdGU7DQogICAgICAgIG1fcG9zID0gd3hQb2ludCgw LDApOw0KICAgICAgICBtX3pQb3NpdGlvbiA9IDA7DQogICAgICAgIG1fam95U3RpY2sgPSBqb3lz dGljazsNCiAgICAgICAgbV9idXR0b25DaGFuZ2UgPSBjaGFuZ2U7DQogICAgfQ0KDQogICAgd3hQ b2ludCBHZXRQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zOyB9DQogICAgaW50IEdldFpQ b3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1felBvc2l0aW9uOyB9DQogICAgaW50IEdldEJ1dHRv blN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9idXR0b25TdGF0ZTsgfQ0KICAgIGludCBHZXRCdXR0 b25DaGFuZ2UoKSBjb25zdCB7IHJldHVybiBtX2J1dHRvbkNoYW5nZTsgfQ0KICAgIGludCBHZXRK b3lzdGljaygpIGNvbnN0IHsgcmV0dXJuIG1fam95U3RpY2s7IH0NCg0KICAgIHZvaWQgU2V0Sm95 c3RpY2soaW50IHN0aWNrKSB7IG1fam95U3RpY2sgPSBzdGljazsgfQ0KICAgIHZvaWQgU2V0QnV0 dG9uU3RhdGUoaW50IHN0YXRlKSB7IG1fYnV0dG9uU3RhdGUgPSBzdGF0ZTsgfQ0KICAgIHZvaWQg U2V0QnV0dG9uQ2hhbmdlKGludCBjaGFuZ2UpIHsgbV9idXR0b25DaGFuZ2UgPSBjaGFuZ2U7IH0N CiAgICB2b2lkIFNldFBvc2l0aW9uKGNvbnN0IHd4UG9pbnQmIHBvcykgeyBtX3BvcyA9IHBvczsg fQ0KICAgIHZvaWQgU2V0WlBvc2l0aW9uKGludCB6UG9zKSB7IG1felBvc2l0aW9uID0gelBvczsg fQ0KDQoNCiAgICBib29sIElzQnV0dG9uKCkgY29uc3QgeyByZXR1cm4gKChHZXRFdmVudFR5cGUo KSA9PSB3eEVWVF9KT1lfQlVUVE9OX0RPV04pIHx8DQogICAgICAgICAgICAoR2V0RXZlbnRUeXBl KCkgPT0gd3hFVlRfSk9ZX0JVVFRPTl9VUCkpOyB9DQoNCg0KICAgIGJvb2wgSXNNb3ZlKCkgY29u c3QgeyByZXR1cm4gKEdldEV2ZW50VHlwZSgpID09IHd4RVZUX0pPWV9NT1ZFKSA7IH0NCg0KDQog ICAgYm9vbCBJc1pNb3ZlKCkgY29uc3QgeyByZXR1cm4gKEdldEV2ZW50VHlwZSgpID09IHd4RVZU X0pPWV9aTU9WRSkgOyB9DQoNCg0KICAgIGJvb2wgQnV0dG9uRG93bihpbnQgYnV0ID0gLTEpIGNv bnN0DQogICAgeyByZXR1cm4gKChHZXRFdmVudFR5cGUoKSA9PSB3eEVWVF9KT1lfQlVUVE9OX0RP V04pICYmDQogICAgICAgICAgICAoKGJ1dCA9PSAtMSkgfHwgKGJ1dCA9PSBtX2J1dHRvbkNoYW5n ZSkpKTsgfQ0KDQoNCiAgICBib29sIEJ1dHRvblVwKGludCBidXQgPSAtMSkgY29uc3QNCiAgICB7 IHJldHVybiAoKEdldEV2ZW50VHlwZSgpID09IHd4RVZUX0pPWV9CVVRUT05fVVApICYmDQogICAg ICAgICAgICAoKGJ1dCA9PSAtMSkgfHwgKGJ1dCA9PSBtX2J1dHRvbkNoYW5nZSkpKTsgfQ0KDQoN CiAgICBib29sIEJ1dHRvbklzRG93bihpbnQgYnV0ID0gLTEpIGNvbnN0DQogICAgeyByZXR1cm4g KCgoYnV0ID09IC0xKSAmJiAobV9idXR0b25TdGF0ZSAhPSAwKSkgfHwNCiAgICAgICAgICAgICgo bV9idXR0b25TdGF0ZSAmIGJ1dCkgPT0gYnV0KSk7IH0NCg0KICAgIHZvaWQgQ29weU9iamVjdCh3 eE9iamVjdCYgb2JqKSBjb25zdDsNCn07DQoNCg0KDQoNCg0KDQpjbGFzcyBfX2F0dHJpYnV0ZV9f KChkbGxpbXBvcnQpKSB3eERyb3BGaWxlc0V2ZW50IDogcHVibGljIHd4RXZlbnQNCnsNCiAgICBw dWJsaWM6IHN0YXRpYyB3eENsYXNzSW5mbyBzbV9jbGFzc3d4RHJvcEZpbGVzRXZlbnQ7IHd4Q2xh c3NJbmZvICpHZXRDbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmd3hEcm9wRmlsZXNFdmVudDo6 c21fY2xhc3N3eERyb3BGaWxlc0V2ZW50OyB9DQoNCnB1YmxpYzoNCiAgICBpbnQgbV9ub0ZpbGVz Ow0KICAgIHd4UG9pbnQgbV9wb3M7DQogICAgd3hTdHJpbmcqIG1fZmlsZXM7DQoNCiAgICB3eERy b3BGaWxlc0V2ZW50KHd4RXZlbnRUeXBlIHR5cGUgPSB3eEVWVF9OVUxMLA0KICAgICAgICAgICAg ICAgICAgICAgaW50IG5vRmlsZXMgPSAwLA0KICAgICAgICAgICAgICAgICAgICAgd3hTdHJpbmcg KmZpbGVzID0gKHd4U3RyaW5nICopIF9fbnVsbCkNCiAgICAgICAgeyBtX2V2ZW50VHlwZSA9IHR5 cGU7IG1fbm9GaWxlcyA9IG5vRmlsZXM7IG1fZmlsZXMgPSBmaWxlczsgfQ0KDQogICAgd3hQb2lu dCBHZXRQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zOyB9DQogICAgaW50IEdldE51bWJl ck9mRmlsZXMoKSBjb25zdCB7IHJldHVybiBtX25vRmlsZXM7IH0NCiAgICB3eFN0cmluZyAqR2V0 RmlsZXMoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVzOyB9DQoNCiAgICB2b2lkIENvcHlPYmplY3Qo d3hPYmplY3QmIG9iaikgY29uc3Q7DQp9Ow0KDQoNCg0KDQoNCg0KY2xhc3MgX19hdHRyaWJ1dGVf XygoZGxsaW1wb3J0KSkgd3hVcGRhdGVVSUV2ZW50IDogcHVibGljIHd4Q29tbWFuZEV2ZW50DQp7 DQogICAgcHVibGljOiBzdGF0aWMgd3hDbGFzc0luZm8gc21fY2xhc3N3eFVwZGF0ZVVJRXZlbnQ7 IHd4Q2xhc3NJbmZvICpHZXRDbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmd3hVcGRhdGVVSUV2 ZW50OjpzbV9jbGFzc3d4VXBkYXRlVUlFdmVudDsgfQ0KDQpwdWJsaWM6DQogICAgd3hVcGRhdGVV SUV2ZW50KHd4V2luZG93SUQgY29tbWFuZElkID0gMCkNCiAgICB7DQogICAgICAgIG1fZXZlbnRU eXBlID0gd3hFVlRfVVBEQVRFX1VJOw0KICAgICAgICBtX2lkID0gY29tbWFuZElkOw0KICAgICAg ICBtX2NoZWNrZWQgPSAwOw0KICAgICAgICBtX3NldENoZWNrZWQgPSAwOw0KICAgICAgICBtX2Vu YWJsZWQgPSAwOw0KICAgICAgICBtX3NldEVuYWJsZWQgPSAwOw0KICAgICAgICBtX3NldFRleHQg PSAwOw0KICAgICAgICBtX3RleHQgPSAiIjsNCiAgICB9DQoNCiAgICBib29sIEdldENoZWNrZWQo KSBjb25zdCB7IHJldHVybiBtX2NoZWNrZWQ7IH0NCiAgICBib29sIEdldEVuYWJsZWQoKSBjb25z dCB7IHJldHVybiBtX2VuYWJsZWQ7IH0NCiAgICB3eFN0cmluZyBHZXRUZXh0KCkgY29uc3QgeyBy ZXR1cm4gbV90ZXh0OyB9DQogICAgYm9vbCBHZXRTZXRUZXh0KCkgY29uc3QgeyByZXR1cm4gbV9z ZXRUZXh0OyB9DQogICAgYm9vbCBHZXRTZXRDaGVja2VkKCkgY29uc3QgeyByZXR1cm4gbV9zZXRD aGVja2VkOyB9DQogICAgYm9vbCBHZXRTZXRFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9zZXRF bmFibGVkOyB9DQoNCiAgICB2b2lkIENoZWNrKGJvb2wgY2hlY2spIHsgbV9jaGVja2VkID0gY2hl Y2s7IG1fc2V0Q2hlY2tlZCA9IDE7IH0NCiAgICB2b2lkIEVuYWJsZShib29sIGVuYWJsZSkgeyBt X2VuYWJsZWQgPSBlbmFibGU7IG1fc2V0RW5hYmxlZCA9IDE7IH0NCiAgICB2b2lkIFNldFRleHQo Y29uc3Qgd3hTdHJpbmcmIHRleHQpIHsgbV90ZXh0ID0gdGV4dDsgbV9zZXRUZXh0ID0gMTsgfQ0K DQogICAgdm9pZCBDb3B5T2JqZWN0KHd4T2JqZWN0JiBvYmopIGNvbnN0Ow0KDQpwcm90ZWN0ZWQ6 DQogICAgYm9vbCBtX2NoZWNrZWQ7DQogICAgYm9vbCBtX2VuYWJsZWQ7DQogICAgYm9vbCBtX3Nl dEVuYWJsZWQ7DQogICAgYm9vbCBtX3NldFRleHQ7DQogICAgYm9vbCBtX3NldENoZWNrZWQ7DQog ICAgd3hTdHJpbmcgbV90ZXh0Ow0KfTsNCg0KDQoNCg0KDQoNCmNsYXNzIF9fYXR0cmlidXRlX18o KGRsbGltcG9ydCkpIHd4U3lzQ29sb3VyQ2hhbmdlZEV2ZW50IDogcHVibGljIHd4RXZlbnQNCnsN CiAgICBwdWJsaWM6IHN0YXRpYyB3eENsYXNzSW5mbyBzbV9jbGFzc3d4U3lzQ29sb3VyQ2hhbmdl ZEV2ZW50OyB3eENsYXNzSW5mbyAqR2V0Q2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnd4U3lz Q29sb3VyQ2hhbmdlZEV2ZW50OjpzbV9jbGFzc3d4U3lzQ29sb3VyQ2hhbmdlZEV2ZW50OyB9DQoN CnB1YmxpYzoNCiAgICB3eFN5c0NvbG91ckNoYW5nZWRFdmVudCgpDQogICAgICAgIHsgbV9ldmVu dFR5cGUgPSB3eEVWVF9TWVNfQ09MT1VSX0NIQU5HRUQ7IH0NCn07DQoNCg0KDQoNCg0KY2xhc3Mg X19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hQYWxldHRlQ2hhbmdlZEV2ZW50IDogcHVibGlj IHd4RXZlbnQNCnsNCiAgICBwdWJsaWM6IHN0YXRpYyB3eENsYXNzSW5mbyBzbV9jbGFzc3d4UGFs ZXR0ZUNoYW5nZWRFdmVudDsgd3hDbGFzc0luZm8gKkdldENsYXNzSW5mbygpIGNvbnN0IHsgcmV0 dXJuICZ3eFBhbGV0dGVDaGFuZ2VkRXZlbnQ6OnNtX2NsYXNzd3hQYWxldHRlQ2hhbmdlZEV2ZW50 OyB9DQoNCnB1YmxpYzoNCiAgICB3eFBhbGV0dGVDaGFuZ2VkRXZlbnQod3hXaW5kb3dJRCBpZCA9 IDApIDogd3hFdmVudChpZCkNCiAgICB7DQogICAgICAgIG1fZXZlbnRUeXBlID0gd3hFVlRfUEFM RVRURV9DSEFOR0VEOw0KICAgICAgICBtX2NoYW5nZWRXaW5kb3cgPSAod3hXaW5kb3cgKikgX19u dWxsOw0KICAgIH0NCg0KICAgIHZvaWQgU2V0Q2hhbmdlZFdpbmRvdyh3eFdpbmRvdyogd2luKSB7 IG1fY2hhbmdlZFdpbmRvdyA9IHdpbjsgfQ0KICAgIHd4V2luZG93KiBHZXRDaGFuZ2VkV2luZG93 KCkgY29uc3QgeyByZXR1cm4gbV9jaGFuZ2VkV2luZG93OyB9DQoNCiAgICB2b2lkIENvcHlPYmpl Y3Qod3hPYmplY3QmIG9iaikgY29uc3Q7DQoNCnByb3RlY3RlZDoNCiAgICB3eFdpbmRvdyogbV9j aGFuZ2VkV2luZG93Ow0KfTsNCg0KDQoNCg0KDQoNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGlt cG9ydCkpIHd4UXVlcnlOZXdQYWxldHRlRXZlbnQgOiBwdWJsaWMgd3hFdmVudA0Kew0KICAgIHB1 YmxpYzogc3RhdGljIHd4Q2xhc3NJbmZvIHNtX2NsYXNzd3hRdWVyeU5ld1BhbGV0dGVFdmVudDsg d3hDbGFzc0luZm8gKkdldENsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZ3eFF1ZXJ5TmV3UGFs ZXR0ZUV2ZW50OjpzbV9jbGFzc3d4UXVlcnlOZXdQYWxldHRlRXZlbnQ7IH0NCg0KcHVibGljOg0K ICAgIHd4UXVlcnlOZXdQYWxldHRlRXZlbnQod3hXaW5kb3dJRCBpZCA9IDApOiB3eEV2ZW50KGlk KQ0KICAgICAgICB7IG1fZXZlbnRUeXBlID0gd3hFVlRfUVVFUllfTkVXX1BBTEVUVEU7IG1fcGFs ZXR0ZVJlYWxpemVkID0gMDsgfQ0KDQoNCiAgICB2b2lkIFNldFBhbGV0dGVSZWFsaXplZChib29s IHJlYWxpemVkKSB7IG1fcGFsZXR0ZVJlYWxpemVkID0gcmVhbGl6ZWQ7IH0NCiAgICBib29sIEdl dFBhbGV0dGVSZWFsaXplZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFsZXR0ZVJlYWxpemVkOyB9DQoN CiAgICB2b2lkIENvcHlPYmplY3Qod3hPYmplY3QmIG9iaikgY29uc3Q7DQoNCnByb3RlY3RlZDoN CiAgICBib29sIG1fcGFsZXR0ZVJlYWxpemVkOw0KfTsNCg0KDQoNCg0KDQoNCmNsYXNzIF9fYXR0 cmlidXRlX18oKGRsbGltcG9ydCkpIHd4TmF2aWdhdGlvbktleUV2ZW50IDogcHVibGljIHd4RXZl bnQNCnsNCnB1YmxpYzoNCiAgICB3eE5hdmlnYXRpb25LZXlFdmVudCgpDQogICAgew0KICAgICAg ICBTZXRFdmVudFR5cGUod3hFVlRfTkFWSUdBVElPTl9LRVkpOw0KDQogICAgICAgIG1fZmxhZ3Mg PSBJc0ZvcndhcmQgfCBQcm9wYWdhdGU7DQogICAgICAgIG1fZm9jdXMgPSAod3hXaW5kb3cgKilf X251bGw7DQogICAgfQ0KDQoNCiAgICBib29sIEdldERpcmVjdGlvbigpIGNvbnN0DQogICAgICAg IHsgcmV0dXJuIChtX2ZsYWdzICYgSXNGb3J3YXJkKSAhPSAwOyB9DQogICAgdm9pZCBTZXREaXJl Y3Rpb24oYm9vbCBiRm9yd2FyZCkNCiAgICAgICAgeyBpZiAoIGJGb3J3YXJkICkgbV9mbGFncyB8 PSBJc0ZvcndhcmQ7IGVsc2UgbV9mbGFncyAmPSB+SXNGb3J3YXJkOyB9DQoNCg0KDQogICAgYm9v bCBJc1dpbmRvd0NoYW5nZSgpIGNvbnN0DQogICAgICAgIHsgcmV0dXJuIChtX2ZsYWdzICYgV2lu Q2hhbmdlKSAhPSAwOyB9DQogICAgdm9pZCBTZXRXaW5kb3dDaGFuZ2UoYm9vbCBiSXMpDQogICAg ICAgIHsgaWYgKCBiSXMgKSBtX2ZsYWdzIHw9IFdpbkNoYW5nZTsgZWxzZSBtX2ZsYWdzICY9IH5X aW5DaGFuZ2U7IH0NCg0KDQoNCg0KICAgIGJvb2wgU2hvdWxkUHJvcGFnYXRlKCkgY29uc3QNCiAg ICAgICAgeyByZXR1cm4gKG1fZmxhZ3MgJiBQcm9wYWdhdGUpICE9IDA7IH0NCiAgICB2b2lkIFNl dFByb3BhZ2F0ZShib29sIGJEb0l0KQ0KICAgICAgICB7IGlmICggYkRvSXQgKSBtX2ZsYWdzIHw9 IFByb3BhZ2F0ZTsgZWxzZSBtX2ZsYWdzICY9IH5Qcm9wYWdhdGU7IH0NCg0KDQoNCiAgICB3eFdp bmRvdyogR2V0Q3VycmVudEZvY3VzKCkgY29uc3QgeyByZXR1cm4gbV9mb2N1czsgfQ0KICAgIHZv aWQgU2V0Q3VycmVudEZvY3VzKHd4V2luZG93ICp3aW4pIHsgbV9mb2N1cyA9IHdpbjsgfQ0KDQpw cml2YXRlOg0KICAgIGVudW0NCiAgICB7DQogICAgICAgIElzRm9yd2FyZCA9IDB4MDAwMSwNCiAg ICAgICAgV2luQ2hhbmdlID0gMHgwMDAyLA0KICAgICAgICBQcm9wYWdhdGUgPSAweDAwMDQNCiAg ICB9Ow0KDQogICAgbG9uZyBtX2ZsYWdzOw0KICAgIHd4V2luZG93ICptX2ZvY3VzOw0KDQogICAg cHVibGljOiBzdGF0aWMgd3hDbGFzc0luZm8gc21fY2xhc3N3eE5hdmlnYXRpb25LZXlFdmVudDsg d3hDbGFzc0luZm8gKkdldENsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZ3eE5hdmlnYXRpb25L ZXlFdmVudDo6c21fY2xhc3N3eE5hdmlnYXRpb25LZXlFdmVudDsgfQ0KfTsNCiMgMTM5NSAiLi4v Li4vaW5jbHVkZS93eC9ldmVudC5oIg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkg d3hXaW5kb3dDcmVhdGVFdmVudCA6IHB1YmxpYyB3eENvbW1hbmRFdmVudA0Kew0KICAgIHB1Ymxp Yzogc3RhdGljIHd4Q2xhc3NJbmZvIHNtX2NsYXNzd3hXaW5kb3dDcmVhdGVFdmVudDsgd3hDbGFz c0luZm8gKkdldENsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZ3eFdpbmRvd0NyZWF0ZUV2ZW50 OjpzbV9jbGFzc3d4V2luZG93Q3JlYXRlRXZlbnQ7IH0NCg0KcHVibGljOg0KICAgIHd4V2luZG93 Q3JlYXRlRXZlbnQod3hXaW5kb3cgKndpbiA9IF9fbnVsbCk7DQoNCiAgICB3eFdpbmRvdyAqR2V0 V2luZG93KCkgY29uc3QgeyByZXR1cm4gKHd4V2luZG93ICopR2V0RXZlbnRPYmplY3QoKTsgfQ0K fTsNCg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hXaW5kb3dEZXN0cm95RXZl bnQgOiBwdWJsaWMgd3hDb21tYW5kRXZlbnQNCnsNCiAgICBwdWJsaWM6IHN0YXRpYyB3eENsYXNz SW5mbyBzbV9jbGFzc3d4V2luZG93RGVzdHJveUV2ZW50OyB3eENsYXNzSW5mbyAqR2V0Q2xhc3NJ bmZvKCkgY29uc3QgeyByZXR1cm4gJnd4V2luZG93RGVzdHJveUV2ZW50OjpzbV9jbGFzc3d4V2lu ZG93RGVzdHJveUV2ZW50OyB9DQoNCnB1YmxpYzoNCiAgICB3eFdpbmRvd0Rlc3Ryb3lFdmVudCh3 eFdpbmRvdyAqd2luID0gX19udWxsKTsNCg0KICAgIHd4V2luZG93ICpHZXRXaW5kb3coKSBjb25z dCB7IHJldHVybiAod3hXaW5kb3cgKilHZXRFdmVudE9iamVjdCgpOyB9DQp9Ow0KIyAxNDIyICIu Li8uLi9pbmNsdWRlL3d4L2V2ZW50LmgiDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQp KSB3eElkbGVFdmVudCA6IHB1YmxpYyB3eEV2ZW50DQp7DQogICAgcHVibGljOiBzdGF0aWMgd3hD bGFzc0luZm8gc21fY2xhc3N3eElkbGVFdmVudDsgd3hDbGFzc0luZm8gKkdldENsYXNzSW5mbygp IGNvbnN0IHsgcmV0dXJuICZ3eElkbGVFdmVudDo6c21fY2xhc3N3eElkbGVFdmVudDsgfQ0KDQpw dWJsaWM6DQogICAgd3hJZGxlRXZlbnQoKQ0KICAgICAgICB7IG1fZXZlbnRUeXBlID0gd3hFVlRf SURMRTsgbV9yZXF1ZXN0TW9yZSA9IDA7IH0NCg0KICAgIHZvaWQgUmVxdWVzdE1vcmUoYm9vbCBu ZWVkTW9yZSA9IDEpIHsgbV9yZXF1ZXN0TW9yZSA9IG5lZWRNb3JlOyB9DQogICAgYm9vbCBNb3Jl UmVxdWVzdGVkKCkgY29uc3QgeyByZXR1cm4gbV9yZXF1ZXN0TW9yZTsgfQ0KDQogICAgdm9pZCBD b3B5T2JqZWN0KHd4T2JqZWN0JiBvYmopIGNvbnN0Ow0KDQpwcm90ZWN0ZWQ6DQogICAgYm9vbCBt X3JlcXVlc3RNb3JlOw0KfTsNCiMgMTQ1NCAiLi4vLi4vaW5jbHVkZS93eC9ldmVudC5oIg0KdHlw ZWRlZiB2b2lkICh3eE9iamVjdDo6Knd4T2JqZWN0RXZlbnRGdW5jdGlvbikod3hFdmVudCYpOw0K DQpzdHJ1Y3QgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hFdmVudFRhYmxlRW50cnkNCnsN Cg0KICAgIGludCBtX2V2ZW50VHlwZTsNCiAgICBpbnQgbV9pZDsNCiAgICBpbnQgbV9sYXN0SWQ7 DQogICAgd3hPYmplY3RFdmVudEZ1bmN0aW9uIG1fZm47DQoNCg0KICAgIHd4T2JqZWN0KiBtX2Nh bGxiYWNrVXNlckRhdGE7DQp9Ow0KDQpzdHJ1Y3QgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkg d3hFdmVudFRhYmxlDQp7DQogICAgY29uc3Qgd3hFdmVudFRhYmxlICpiYXNlVGFibGU7DQogICAg Y29uc3Qgd3hFdmVudFRhYmxlRW50cnkgKmVudHJpZXM7DQp9Ow0KDQpjbGFzcyBfX2F0dHJpYnV0 ZV9fKChkbGxpbXBvcnQpKSB3eEV2dEhhbmRsZXIgOiBwdWJsaWMgd3hPYmplY3QNCnsNCiAgICBw dWJsaWM6IHN0YXRpYyB3eENsYXNzSW5mbyBzbV9jbGFzc3d4RXZ0SGFuZGxlcjsgd3hDbGFzc0lu Zm8gKkdldENsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZ3eEV2dEhhbmRsZXI6OnNtX2NsYXNz d3hFdnRIYW5kbGVyOyB9DQoNCnB1YmxpYzoNCiAgICB3eEV2dEhhbmRsZXIoKTsNCiAgICB+d3hF dnRIYW5kbGVyKCk7DQoNCiAgICB3eEV2dEhhbmRsZXIgKkdldE5leHRIYW5kbGVyKCkgY29uc3Qg eyByZXR1cm4gbV9uZXh0SGFuZGxlcjsgfQ0KICAgIHd4RXZ0SGFuZGxlciAqR2V0UHJldmlvdXNI YW5kbGVyKCkgY29uc3QgeyByZXR1cm4gbV9wcmV2aW91c0hhbmRsZXI7IH0NCiAgICB2b2lkIFNl dE5leHRIYW5kbGVyKHd4RXZ0SGFuZGxlciAqaGFuZGxlcikgeyBtX25leHRIYW5kbGVyID0gaGFu ZGxlcjsgfQ0KICAgIHZvaWQgU2V0UHJldmlvdXNIYW5kbGVyKHd4RXZ0SGFuZGxlciAqaGFuZGxl cikgeyBtX3ByZXZpb3VzSGFuZGxlciA9IGhhbmRsZXI7IH0NCg0KICAgIHZvaWQgU2V0RXZ0SGFu ZGxlckVuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fZW5hYmxlZCA9IGVuYWJsZWQ7IH0NCiAgICBi b29sIEdldEV2dEhhbmRsZXJFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9lbmFibGVkOyB9DQoN Cg0KICAgIHZpcnR1YWwgYm9vbCBQcm9jZXNzRXZlbnQod3hFdmVudCYgZXZlbnQpOw0KDQoNCiAg ICB2b2lkIEFkZFBlbmRpbmdFdmVudCh3eEV2ZW50JiBldmVudCk7DQoNCg0KICAgIHZvaWQgUHJv Y2Vzc1BlbmRpbmdFdmVudHMoKTsNCg0KDQoNCiAgICBib29sIFByb2Nlc3NUaHJlYWRFdmVudCh3 eEV2ZW50JiBldmVudCk7DQoNCg0KDQoNCiAgICB2b2lkIENvbm5lY3QoIGludCBpZCwgaW50IGxh c3RJZCwgd3hFdmVudFR5cGUgZXZlbnRUeXBlLA0KICAgICAgICAgICAgICAgICAgd3hPYmplY3RF dmVudEZ1bmN0aW9uIGZ1bmMsDQogICAgICAgICAgICAgICAgICB3eE9iamVjdCAqdXNlckRhdGEg PSAod3hPYmplY3QgKikgX19udWxsICk7DQoNCg0KICAgIHZvaWQgQ29ubmVjdCggaW50IGlkLCB3 eEV2ZW50VHlwZSBldmVudFR5cGUsDQogICAgICAgICAgICAgICAgICB3eE9iamVjdEV2ZW50RnVu Y3Rpb24gZnVuYywNCiAgICAgICAgICAgICAgICAgIHd4T2JqZWN0ICp1c2VyRGF0YSA9ICh3eE9i amVjdCAqKSBfX251bGwgKQ0KICAgICAgICB7IENvbm5lY3QoaWQsIC0xLCBldmVudFR5cGUsIGZ1 bmMsIHVzZXJEYXRhKTsgfQ0KDQogICAgYm9vbCBEaXNjb25uZWN0KCBpbnQgaWQsIGludCBsYXN0 SWQgPSAtMSwgd3hFdmVudFR5cGUgZXZlbnRUeXBlID0gd3hFVlRfTlVMTCwNCiAgICAgICAgICAg ICAgICAgIHd4T2JqZWN0RXZlbnRGdW5jdGlvbiBmdW5jID0gX19udWxsLA0KICAgICAgICAgICAg ICAgICAgd3hPYmplY3QgKnVzZXJEYXRhID0gKHd4T2JqZWN0ICopIF9fbnVsbCApOw0KDQoNCiAg ICBib29sIERpc2Nvbm5lY3QoIGludCBpZCwgd3hFdmVudFR5cGUgZXZlbnRUeXBlID0gd3hFVlRf TlVMTCwNCiAgICAgICAgICAgICAgICAgIHd4T2JqZWN0RXZlbnRGdW5jdGlvbiBmdW5jID0gX19u dWxsLA0KICAgICAgICAgICAgICAgICAgd3hPYmplY3QgKnVzZXJEYXRhID0gKHd4T2JqZWN0ICop IF9fbnVsbCApDQogICAgICAgIHsgcmV0dXJuIERpc2Nvbm5lY3QoaWQsIC0xLCBldmVudFR5cGUs IGZ1bmMsIHVzZXJEYXRhKTsgfQ0KDQoNCiAgICB2aXJ0dWFsIGJvb2wgU2VhcmNoRXZlbnRUYWJs ZSh3eEV2ZW50VGFibGUmIHRhYmxlLCB3eEV2ZW50JiBldmVudCk7DQogICAgYm9vbCBTZWFyY2hE eW5hbWljRXZlbnRUYWJsZSggd3hFdmVudCYgZXZlbnQgKTsNCg0KDQogICAgdm9pZCBDbGVhckV2 ZW50TG9ja2VyKCkNCiAgIHsNCg0KICAgICAgZGVsZXRlIG1fZXZlbnRzTG9ja2VyOw0KICAgICAg bV9ldmVudHNMb2NrZXIgPSBfX251bGw7DQoNCiAgIH07DQojIDE1NTggIi4uLy4uL2luY2x1ZGUv d3gvZXZlbnQuaCINCnByaXZhdGU6DQogICAgc3RhdGljIGNvbnN0IHd4RXZlbnRUYWJsZUVudHJ5 IHNtX2V2ZW50VGFibGVFbnRyaWVzW107DQoNCnByb3RlY3RlZDoNCiAgICBzdGF0aWMgY29uc3Qg d3hFdmVudFRhYmxlIHNtX2V2ZW50VGFibGU7DQoNCiAgICB2aXJ0dWFsIGNvbnN0IHd4RXZlbnRU YWJsZSAqR2V0RXZlbnRUYWJsZSgpIGNvbnN0Ow0KDQpwcm90ZWN0ZWQ6DQogICAgd3hFdnRIYW5k bGVyKiBtX25leHRIYW5kbGVyOw0KICAgIHd4RXZ0SGFuZGxlciogbV9wcmV2aW91c0hhbmRsZXI7 DQogICAgd3hMaXN0KiBtX2R5bmFtaWNFdmVudHM7DQogICAgd3hMaXN0KiBtX3BlbmRpbmdFdmVu dHM7DQoNCg0KDQoNCiAgICB3eENyaXRpY2FsU2VjdGlvbiogbV9ldmVudHNMb2NrZXI7DQoNCg0K DQoNCg0KICAgIGJvb2wgbV9pc1dpbmRvdzsNCg0KDQogICAgYm9vbCBtX2VuYWJsZWQ7DQp9Ow0K DQp0eXBlZGVmIHZvaWQgKHd4RXZ0SGFuZGxlcjo6Knd4RXZlbnRGdW5jdGlvbikod3hFdmVudCYp Ow0KDQp0eXBlZGVmIHZvaWQgKHd4RXZ0SGFuZGxlcjo6Knd4Q29tbWFuZEV2ZW50RnVuY3Rpb24p KHd4Q29tbWFuZEV2ZW50Jik7DQp0eXBlZGVmIHZvaWQgKHd4RXZ0SGFuZGxlcjo6Knd4U2Nyb2xs RXZlbnRGdW5jdGlvbikod3hTY3JvbGxFdmVudCYpOw0KdHlwZWRlZiB2b2lkICh3eEV2dEhhbmRs ZXI6Oip3eFNjcm9sbFdpbkV2ZW50RnVuY3Rpb24pKHd4U2Nyb2xsV2luRXZlbnQmKTsNCnR5cGVk ZWYgdm9pZCAod3hFdnRIYW5kbGVyOjoqd3hTaXplRXZlbnRGdW5jdGlvbikod3hTaXplRXZlbnQm KTsNCnR5cGVkZWYgdm9pZCAod3hFdnRIYW5kbGVyOjoqd3hNb3ZlRXZlbnRGdW5jdGlvbikod3hN b3ZlRXZlbnQmKTsNCnR5cGVkZWYgdm9pZCAod3hFdnRIYW5kbGVyOjoqd3hQYWludEV2ZW50RnVu Y3Rpb24pKHd4UGFpbnRFdmVudCYpOw0KdHlwZWRlZiB2b2lkICh3eEV2dEhhbmRsZXI6Oip3eEVy YXNlRXZlbnRGdW5jdGlvbikod3hFcmFzZUV2ZW50Jik7DQp0eXBlZGVmIHZvaWQgKHd4RXZ0SGFu ZGxlcjo6Knd4TW91c2VFdmVudEZ1bmN0aW9uKSh3eE1vdXNlRXZlbnQmKTsNCnR5cGVkZWYgdm9p ZCAod3hFdnRIYW5kbGVyOjoqd3hDaGFyRXZlbnRGdW5jdGlvbikod3hLZXlFdmVudCYpOw0KdHlw ZWRlZiB2b2lkICh3eEV2dEhhbmRsZXI6Oip3eEZvY3VzRXZlbnRGdW5jdGlvbikod3hGb2N1c0V2 ZW50Jik7DQp0eXBlZGVmIHZvaWQgKHd4RXZ0SGFuZGxlcjo6Knd4QWN0aXZhdGVFdmVudEZ1bmN0 aW9uKSh3eEFjdGl2YXRlRXZlbnQmKTsNCnR5cGVkZWYgdm9pZCAod3hFdnRIYW5kbGVyOjoqd3hN ZW51RXZlbnRGdW5jdGlvbikod3hNZW51RXZlbnQmKTsNCnR5cGVkZWYgdm9pZCAod3hFdnRIYW5k bGVyOjoqd3hKb3lzdGlja0V2ZW50RnVuY3Rpb24pKHd4Sm95c3RpY2tFdmVudCYpOw0KdHlwZWRl ZiB2b2lkICh3eEV2dEhhbmRsZXI6Oip3eERyb3BGaWxlc0V2ZW50RnVuY3Rpb24pKHd4RHJvcEZp bGVzRXZlbnQmKTsNCnR5cGVkZWYgdm9pZCAod3hFdnRIYW5kbGVyOjoqd3hJbml0RGlhbG9nRXZl bnRGdW5jdGlvbikod3hJbml0RGlhbG9nRXZlbnQmKTsNCnR5cGVkZWYgdm9pZCAod3hFdnRIYW5k bGVyOjoqd3hTeXNDb2xvdXJDaGFuZ2VkRnVuY3Rpb24pKHd4U3lzQ29sb3VyQ2hhbmdlZEV2ZW50 Jik7DQp0eXBlZGVmIHZvaWQgKHd4RXZ0SGFuZGxlcjo6Knd4VXBkYXRlVUlFdmVudEZ1bmN0aW9u KSh3eFVwZGF0ZVVJRXZlbnQmKTsNCnR5cGVkZWYgdm9pZCAod3hFdnRIYW5kbGVyOjoqd3hJZGxl RXZlbnRGdW5jdGlvbikod3hJZGxlRXZlbnQmKTsNCnR5cGVkZWYgdm9pZCAod3hFdnRIYW5kbGVy Ojoqd3hDbG9zZUV2ZW50RnVuY3Rpb24pKHd4Q2xvc2VFdmVudCYpOw0KdHlwZWRlZiB2b2lkICh3 eEV2dEhhbmRsZXI6Oip3eFNob3dFdmVudEZ1bmN0aW9uKSh3eFNob3dFdmVudCYpOw0KdHlwZWRl ZiB2b2lkICh3eEV2dEhhbmRsZXI6Oip3eEljb25pemVFdmVudEZ1bmN0aW9uKSh3eFNob3dFdmVu dCYpOw0KdHlwZWRlZiB2b2lkICh3eEV2dEhhbmRsZXI6Oip3eE1heGltaXplRXZlbnRGdW5jdGlv bikod3hTaG93RXZlbnQmKTsNCnR5cGVkZWYgdm9pZCAod3hFdnRIYW5kbGVyOjoqd3hOYXZpZ2F0 aW9uS2V5RXZlbnRGdW5jdGlvbikod3hOYXZpZ2F0aW9uS2V5RXZlbnQmKTsNCnR5cGVkZWYgdm9p ZCAod3hFdnRIYW5kbGVyOjoqd3hQYWxldHRlQ2hhbmdlZEV2ZW50RnVuY3Rpb24pKHd4UGFsZXR0 ZUNoYW5nZWRFdmVudCYpOw0KdHlwZWRlZiB2b2lkICh3eEV2dEhhbmRsZXI6Oip3eFF1ZXJ5TmV3 UGFsZXR0ZUV2ZW50RnVuY3Rpb24pKHd4UXVlcnlOZXdQYWxldHRlRXZlbnQmKTsNCnR5cGVkZWYg dm9pZCAod3hFdnRIYW5kbGVyOjoqd3hXaW5kb3dDcmVhdGVFdmVudEZ1bmN0aW9uKSh3eFdpbmRv d0NyZWF0ZUV2ZW50Jik7DQp0eXBlZGVmIHZvaWQgKHd4RXZ0SGFuZGxlcjo6Knd4V2luZG93RGVz dHJveUV2ZW50RnVuY3Rpb24pKHd4V2luZG93RGVzdHJveUV2ZW50Jik7DQp0eXBlZGVmIHZvaWQg KHd4RXZ0SGFuZGxlcjo6Knd4U2V0Q3Vyc29yRXZlbnRGdW5jdGlvbikod3hTZXRDdXJzb3JFdmVu dCYpOw0KdHlwZWRlZiB2b2lkICh3eEV2dEhhbmRsZXI6Oip3eE5vdGlmeUV2ZW50RnVuY3Rpb24p KHd4Tm90aWZ5RXZlbnQmKTsNCiMgMTgzOSAiLi4vLi4vaW5jbHVkZS93eC9ldmVudC5oIg0KZXh0 ZXJuIHd4TGlzdCAqd3hQZW5kaW5nRXZlbnRzOw0KDQogICAgZXh0ZXJuIHd4Q3JpdGljYWxTZWN0 aW9uICp3eFBlbmRpbmdFdmVudHNMb2NrZXI7DQojIDE4NTIgIi4uLy4uL2luY2x1ZGUvd3gvZXZl bnQuaCINCnd4V2luZG93KiB3eEZpbmRGb2N1c0Rlc2NlbmRhbnQod3hXaW5kb3cqIGFuY2VzdG9y KTsNCiMgMjQgIi4uLy4uL2luY2x1ZGUvd3gvd3guaCIgMg0KIyAxICIuLi8uLi9pbmNsdWRlL3d4 L2FwcC5oIiAxDQojIDE3ICIuLi8uLi9pbmNsdWRlL3d4L2FwcC5oIg0KI3ByYWdtYSBpbnRlcmZh Y2UgImFwcGJhc2UuaCINCg0KDQoNCg0KDQoNCg0KICAgIGNsYXNzIF9fYXR0cmlidXRlX18oKGRs bGltcG9ydCkpIHd4QXBwOw0KICAgIHR5cGVkZWYgd3hBcHAqICgqd3hBcHBJbml0aWFsaXplckZ1 bmN0aW9uKSgpOw0KIyA0MSAiLi4vLi4vaW5jbHVkZS93eC9hcHAuaCINCiMgMSAiLi4vLi4vaW5j bHVkZS93eC93aW5kb3cuaCIgMQ0KIyAxNiAiLi4vLi4vaW5jbHVkZS93eC93aW5kb3cuaCINCiNw cmFnbWEgaW50ZXJmYWNlICJ3aW5kb3diYXNlLmgiDQojIDMwICIuLi8uLi9pbmNsdWRlL3d4L3dp bmRvdy5oIg0KIyAxICIuLi8uLi9pbmNsdWRlL3d4L3JlZ2lvbi5oIiAxDQoNCg0KDQoNCiMgMSAi Li4vLi4vaW5jbHVkZS93eC9tc3cvcmVnaW9uLmgiIDENCiMgMTYgIi4uLy4uL2luY2x1ZGUvd3gv bXN3L3JlZ2lvbi5oIg0KI3ByYWdtYSBpbnRlcmZhY2UgInJlZ2lvbi5oIg0KDQoNCg0KDQoNCg0K Y2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hSZWN0Ow0KY2xhc3MgX19hdHRyaWJ1 dGVfXygoZGxsaW1wb3J0KSkgd3hQb2ludDsNCg0KZW51bSB3eFJlZ2lvbkNvbnRhaW4gew0KICAg ICAgICB3eE91dFJlZ2lvbiA9IDAsIHd4UGFydFJlZ2lvbiA9IDEsIHd4SW5SZWdpb24gPSAyDQp9 Ow0KDQoNCmVudW0gd3hSZWdpb25PcCB7DQp3eFJHTl9BTkQsDQp3eFJHTl9DT1BZLA0Kd3hSR05f RElGRiwNCnd4UkdOX09SLA0Kd3hSR05fWE9SDQp9Ow0KDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChk bGxpbXBvcnQpKSB3eFJlZ2lvbiA6IHB1YmxpYyB3eEdESU9iamVjdCB7DQpwdWJsaWM6IHN0YXRp YyB3eENsYXNzSW5mbyBzbV9jbGFzc3d4UmVnaW9uOyB3eENsYXNzSW5mbyAqR2V0Q2xhc3NJbmZv KCkgY29uc3QgeyByZXR1cm4gJnd4UmVnaW9uOjpzbV9jbGFzc3d4UmVnaW9uOyB9Ow0KICAgICAg ICBmcmllbmQgY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hSZWdpb25JdGVyYXRv cjsNCnB1YmxpYzoNCiAgICB3eFJlZ2lvbih3eENvb3JkIHgsIHd4Q29vcmQgeSwgd3hDb29yZCB3 LCB3eENvb3JkIGgpOw0KICAgIHd4UmVnaW9uKGNvbnN0IHd4UG9pbnQmIHRvcExlZnQsIGNvbnN0 IHd4UG9pbnQmIGJvdHRvbVJpZ2h0KTsNCiAgICB3eFJlZ2lvbihjb25zdCB3eFJlY3QmIHJlY3Qp Ow0KICAgIHd4UmVnaW9uKFdYSFJHTiBoUmVnaW9uKTsNCg0KICAgICAgICB3eFJlZ2lvbih2b2lk KTsNCiAgICAgICAgfnd4UmVnaW9uKHZvaWQpOw0KDQoNCiAgICAgICAgaW5saW5lIHd4UmVnaW9u KGNvbnN0IHd4UmVnaW9uJiByKQ0KICAgICAgICAgICAgICAgIHsgUmVmKHIpOyB9DQogICAgICAg IGlubGluZSB3eFJlZ2lvbiYgb3BlcmF0b3IgPSAoY29uc3Qgd3hSZWdpb24mIHIpDQogICAgICAg ICAgICAgICAgeyBSZWYocik7IHJldHVybiAoKnRoaXMpOyB9DQoNCg0KDQogICAgICAgIHZvaWQg Q2xlYXIodm9pZCk7DQoNCg0KICAgICAgICBpbmxpbmUgYm9vbCBVbmlvbih3eENvb3JkIHgsIHd4 Q29vcmQgeSwgd3hDb29yZCB3aWR0aCwgd3hDb29yZCBoZWlnaHQpIHsgcmV0dXJuIENvbWJpbmUo eCwgeSwgd2lkdGgsIGhlaWdodCwgd3hSR05fT1IpOyB9DQogICAgICAgIGlubGluZSBib29sIFVu aW9uKGNvbnN0IHd4UmVjdCYgcmVjdCkgeyByZXR1cm4gQ29tYmluZShyZWN0LCB3eFJHTl9PUik7 IH0NCiAgICAgICAgaW5saW5lIGJvb2wgVW5pb24oY29uc3Qgd3hSZWdpb24mIHJlZ2lvbikgeyBy ZXR1cm4gQ29tYmluZShyZWdpb24sIHd4UkdOX09SKTsgfQ0KDQoNCiAgICAgICAgaW5saW5lIGJv b2wgSW50ZXJzZWN0KHd4Q29vcmQgeCwgd3hDb29yZCB5LCB3eENvb3JkIHdpZHRoLCB3eENvb3Jk IGhlaWdodCkgeyByZXR1cm4gQ29tYmluZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCB3eFJHTl9BTkQp OyB9DQogICAgICAgIGlubGluZSBib29sIEludGVyc2VjdChjb25zdCB3eFJlY3QmIHJlY3QpIHsg cmV0dXJuIENvbWJpbmUocmVjdCwgd3hSR05fQU5EKTsgfQ0KICAgICAgICBpbmxpbmUgYm9vbCBJ bnRlcnNlY3QoY29uc3Qgd3hSZWdpb24mIHJlZ2lvbikgeyByZXR1cm4gQ29tYmluZShyZWdpb24s IHd4UkdOX0FORCk7IH0NCg0KDQoNCiAgICAgICAgaW5saW5lIGJvb2wgU3VidHJhY3Qod3hDb29y ZCB4LCB3eENvb3JkIHksIHd4Q29vcmQgd2lkdGgsIHd4Q29vcmQgaGVpZ2h0KSB7IHJldHVybiBD b21iaW5lKHgsIHksIHdpZHRoLCBoZWlnaHQsIHd4UkdOX0RJRkYpOyB9DQogICAgICAgIGlubGlu ZSBib29sIFN1YnRyYWN0KGNvbnN0IHd4UmVjdCYgcmVjdCkgeyByZXR1cm4gQ29tYmluZShyZWN0 LCB3eFJHTl9ESUZGKTsgfQ0KICAgICAgICBpbmxpbmUgYm9vbCBTdWJ0cmFjdChjb25zdCB3eFJl Z2lvbiYgcmVnaW9uKSB7IHJldHVybiBDb21iaW5lKHJlZ2lvbiwgd3hSR05fRElGRik7IH0NCg0K DQogICAgICAgIGlubGluZSBib29sIFhvcih3eENvb3JkIHgsIHd4Q29vcmQgeSwgd3hDb29yZCB3 aWR0aCwgd3hDb29yZCBoZWlnaHQpIHsgcmV0dXJuIENvbWJpbmUoeCwgeSwgd2lkdGgsIGhlaWdo dCwgd3hSR05fWE9SKTsgfQ0KICAgICAgICBpbmxpbmUgYm9vbCBYb3IoY29uc3Qgd3hSZWN0JiBy ZWN0KSB7IHJldHVybiBDb21iaW5lKHJlY3QsIHd4UkdOX1hPUik7IH0NCiAgICAgICAgaW5saW5l IGJvb2wgWG9yKGNvbnN0IHd4UmVnaW9uJiByZWdpb24pIHsgcmV0dXJuIENvbWJpbmUocmVnaW9u LCB3eFJHTl9YT1IpOyB9DQoNCg0KDQogICAgICAgIHZvaWQgR2V0Qm94KHd4Q29vcmQmIHgsIHd4 Q29vcmQmIHksIHd4Q29vcmQmdywgd3hDb29yZCAmaCkgY29uc3Q7DQogICAgICAgIHd4UmVjdCBH ZXRCb3godm9pZCkgY29uc3QgOw0KDQoNCiAgICAgICAgYm9vbCBFbXB0eSh2b2lkKSBjb25zdDsN CiAgICBpbmxpbmUgYm9vbCBJc0VtcHR5KHZvaWQpIGNvbnN0IHsgcmV0dXJuIEVtcHR5KCk7IH0N Cg0KDQoNCiAgICAgICAgd3hSZWdpb25Db250YWluIENvbnRhaW5zKHd4Q29vcmQgeCwgd3hDb29y ZCB5KSBjb25zdDsNCg0KICAgICAgICB3eFJlZ2lvbkNvbnRhaW4gQ29udGFpbnMoY29uc3Qgd3hQ b2ludCYgcHQpIGNvbnN0Ow0KDQogICAgICAgIHd4UmVnaW9uQ29udGFpbiBDb250YWlucyh3eENv b3JkIHgsIHd4Q29vcmQgeSwgd3hDb29yZCB3LCB3eENvb3JkIGgpIGNvbnN0Ow0KDQogICAgICAg IHd4UmVnaW9uQ29udGFpbiBDb250YWlucyhjb25zdCB3eFJlY3QmIHJlY3QpIGNvbnN0Ow0KDQoN CiAgICAgICAgYm9vbCBDb21iaW5lKHd4Q29vcmQgeCwgd3hDb29yZCB5LCB3eENvb3JkIHdpZHRo LCB3eENvb3JkIGhlaWdodCwgd3hSZWdpb25PcCBvcCk7DQogICAgICAgIGJvb2wgQ29tYmluZShj b25zdCB3eFJlZ2lvbiYgcmVnaW9uLCB3eFJlZ2lvbk9wIG9wKTsNCiAgICAgICAgYm9vbCBDb21i aW5lKGNvbnN0IHd4UmVjdCYgcmVjdCwgd3hSZWdpb25PcCBvcCk7DQoNCg0KICAgIFdYSFJHTiBH ZXRIUkdOKCkgY29uc3Q7DQp9Ow0KDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3 eFJlZ2lvbkl0ZXJhdG9yIDogcHVibGljIHd4T2JqZWN0IHsNCnB1YmxpYzogc3RhdGljIHd4Q2xh c3NJbmZvIHNtX2NsYXNzd3hSZWdpb25JdGVyYXRvcjsgd3hDbGFzc0luZm8gKkdldENsYXNzSW5m bygpIGNvbnN0IHsgcmV0dXJuICZ3eFJlZ2lvbkl0ZXJhdG9yOjpzbV9jbGFzc3d4UmVnaW9uSXRl cmF0b3I7IH07DQpwdWJsaWM6DQogICAgICAgIHd4UmVnaW9uSXRlcmF0b3Iodm9pZCk7DQogICAg ICAgIHd4UmVnaW9uSXRlcmF0b3IoY29uc3Qgd3hSZWdpb24mIHJlZ2lvbik7DQogICAgICAgIH53 eFJlZ2lvbkl0ZXJhdG9yKHZvaWQpOw0KDQogICAgICAgIHZvaWQgUmVzZXQodm9pZCkgeyBtX2N1 cnJlbnQgPSAwOyB9DQogICAgICAgIHZvaWQgUmVzZXQoY29uc3Qgd3hSZWdpb24mIHJlZ2lvbik7 DQoNCg0KICAgICAgICBvcGVyYXRvciBib29sICh2b2lkKSBjb25zdCB7IHJldHVybiAobV9jdXJy ZW50IDwgbV9udW1SZWN0cyk7IH0NCg0KDQogICAgICAgIGJvb2wgSGF2ZVJlY3RzKHZvaWQpIGNv bnN0IHsgcmV0dXJuIChtX2N1cnJlbnQgPCBtX251bVJlY3RzKTsgfQ0KDQogICAgICAgIHZvaWQg b3BlcmF0b3IgKysgKHZvaWQpOw0KICAgICAgICB2b2lkIG9wZXJhdG9yICsrIChpbnQpOw0KDQog ICAgICAgIHd4Q29vcmQgR2V0WCh2b2lkKSBjb25zdDsNCiAgICAgICAgd3hDb29yZCBHZXRZKHZv aWQpIGNvbnN0Ow0KICAgICAgICB3eENvb3JkIEdldFcodm9pZCkgY29uc3Q7DQogICAgICAgIHd4 Q29vcmQgR2V0V2lkdGgodm9pZCkgY29uc3QgeyByZXR1cm4gR2V0VygpOyB9DQogICAgICAgIHd4 Q29vcmQgR2V0SCh2b2lkKSBjb25zdDsNCiAgICAgICAgd3hDb29yZCBHZXRIZWlnaHQodm9pZCkg Y29uc3QgeyByZXR1cm4gR2V0SCgpOyB9DQogICAgd3hSZWN0IEdldFJlY3QoKSBjb25zdCB7IHJl dHVybiB3eFJlY3QoR2V0WCgpLCBHZXRZKCksIEdldFdpZHRoKCksIEdldEhlaWdodCgpKTsgfQ0K DQpwcml2YXRlOg0KICAgICAgICBsb25nIG1fY3VycmVudDsNCiAgICAgICAgbG9uZyBtX251bVJl Y3RzOw0KICAgICAgICB3eFJlZ2lvbiBtX3JlZ2lvbjsNCiAgICB3eFJlY3QqIG1fcmVjdHM7DQp9 Ow0KIyA2ICIuLi8uLi9pbmNsdWRlL3d4L3JlZ2lvbi5oIiAyDQojIDMxICIuLi8uLi9pbmNsdWRl L3d4L3dpbmRvdy5oIiAyDQoNCg0KIyAxICIuLi8uLi9pbmNsdWRlL3d4L3ZhbGlkYXRlLmgiIDEN CiMgMTYgIi4uLy4uL2luY2x1ZGUvd3gvdmFsaWRhdGUuaCINCiNwcmFnbWEgaW50ZXJmYWNlICJ2 YWxpZGF0ZS5oIg0KIyAzMCAiLi4vLi4vaW5jbHVkZS93eC92YWxpZGF0ZS5oIg0KY2xhc3MgX19h dHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hXaW5kb3c7DQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChk bGxpbXBvcnQpKSB3eFdpbmRvd0Jhc2U7DQojIDQ1ICIuLi8uLi9pbmNsdWRlL3d4L3ZhbGlkYXRl LmgiDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eFZhbGlkYXRvciA6IHB1Ymxp YyB3eEV2dEhhbmRsZXINCnsNCnB1YmxpYzoNCiAgICB3eFZhbGlkYXRvcigpOw0KICAgIHZpcnR1 YWwgfnd4VmFsaWRhdG9yKCk7DQoNCg0KDQoNCg0KICAgIHZpcnR1YWwgd3hPYmplY3QgKkNsb25l KCkgY29uc3QNCiAgICAgICAgeyByZXR1cm4gKHd4VmFsaWRhdG9yICopX19udWxsOyB9DQogICAg Ym9vbCBDb3B5KGNvbnN0IHd4VmFsaWRhdG9yJiB2YWwpDQogICAgICAgIHsgbV92YWxpZGF0b3JX aW5kb3cgPSB2YWwubV92YWxpZGF0b3JXaW5kb3c7IHJldHVybiAxOyB9DQoNCg0KDQogICAgdmly dHVhbCBib29sIFZhbGlkYXRlKHd4V2luZG93ICopIHsgcmV0dXJuIDA7IH07DQoNCg0KICAgIHZp cnR1YWwgYm9vbCBUcmFuc2ZlclRvV2luZG93KCkgeyByZXR1cm4gMDsgfQ0KDQoNCiAgICB2aXJ0 dWFsIGJvb2wgVHJhbnNmZXJGcm9tV2luZG93KCkgeyByZXR1cm4gMDsgfTsNCg0KDQogICAgd3hX aW5kb3cgKkdldFdpbmRvdygpIGNvbnN0IHsgcmV0dXJuICh3eFdpbmRvdyAqKW1fdmFsaWRhdG9y V2luZG93OyB9DQogICAgdm9pZCBTZXRXaW5kb3cod3hXaW5kb3dCYXNlICp3aW4pIHsgbV92YWxp ZGF0b3JXaW5kb3cgPSB3aW47IH0NCg0KDQoNCiAgICBzdGF0aWMgYm9vbCBJc1NpbGVudCgpIHsg cmV0dXJuIG1zX2lzU2lsZW50OyB9DQogICAgc3RhdGljIHZvaWQgU2V0QmVsbE9uRXJyb3IoYm9v bCBkb0l0ID0gMSkgeyBtc19pc1NpbGVudCA9IGRvSXQ7IH0NCg0KcHJvdGVjdGVkOg0KICAgIHd4 V2luZG93QmFzZSAqbV92YWxpZGF0b3JXaW5kb3c7DQoNCnByaXZhdGU6DQogICAgc3RhdGljIGJv b2wgbXNfaXNTaWxlbnQ7DQoNCiAgICBwdWJsaWM6IHN0YXRpYyB3eENsYXNzSW5mbyBzbV9jbGFz c3d4VmFsaWRhdG9yOyB3eENsYXNzSW5mbyAqR2V0Q2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4g Jnd4VmFsaWRhdG9yOjpzbV9jbGFzc3d4VmFsaWRhdG9yOyB9DQp9Ow0KDQpfX2F0dHJpYnV0ZV9f KChkbGxpbXBvcnQpKSBleHRlcm4gY29uc3Qgd3hWYWxpZGF0b3Igd3hEZWZhdWx0VmFsaWRhdG9y Ow0KIyAzNCAiLi4vLi4vaW5jbHVkZS93eC93aW5kb3cuaCIgMg0KDQoNCiMgMSAiLi4vLi4vaW5j bHVkZS93eC9hY2NlbC5oIiAxDQoNCg0KDQoNCiMgMSAiLi4vLi4vaW5jbHVkZS93eC9tc3cvYWNj ZWwuaCIgMQ0KIyAxNiAiLi4vLi4vaW5jbHVkZS93eC9tc3cvYWNjZWwuaCINCiNwcmFnbWEgaW50 ZXJmYWNlICJhY2NlbC5oIg0KDQoNCg0KDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQp KSB3eEFjY2VsZXJhdG9yVGFibGU7DQojIDQzICIuLi8uLi9pbmNsdWRlL3d4L21zdy9hY2NlbC5o Ig0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hBY2NlbGVyYXRvckVudHJ5DQp7 DQpwdWJsaWM6DQogICAgd3hBY2NlbGVyYXRvckVudHJ5KGludCBmbGFncyA9IDAsIGludCBrZXlD b2RlID0gMCwgaW50IGNtZCA9IDApDQogICAgew0KICAgICAgICBTZXQoZmxhZ3MsIGtleUNvZGUs IGNtZCk7DQogICAgfQ0KDQogICAgdm9pZCBTZXQoaW50IGZsYWdzLCBpbnQga2V5Q29kZSwgaW50 IGNtZCkNCiAgICB7DQogICAgICAgIG1fZmxhZ3MgPSBmbGFnczsgbV9rZXlDb2RlID0ga2V5Q29k ZTsgbV9jb21tYW5kID0gY21kOw0KICAgIH0NCg0KICAgIGludCBHZXRGbGFncygpIGNvbnN0IHsg cmV0dXJuIG1fZmxhZ3M7IH0NCiAgICBpbnQgR2V0S2V5Q29kZSgpIGNvbnN0IHsgcmV0dXJuIG1f a2V5Q29kZTsgfQ0KICAgIGludCBHZXRDb21tYW5kKCkgY29uc3QgeyByZXR1cm4gbV9jb21tYW5k OyB9DQoNCg0KICAgIGludCBtX2ZsYWdzOw0KICAgIGludCBtX2tleUNvZGU7DQogICAgaW50IG1f Y29tbWFuZDsNCn07DQoNCg0KDQoNCg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkg d3hBY2NlbGVyYXRvclRhYmxlIDogcHVibGljIHd4T2JqZWN0DQp7DQpwdWJsaWM6IHN0YXRpYyB3 eENsYXNzSW5mbyBzbV9jbGFzc3d4QWNjZWxlcmF0b3JUYWJsZTsgd3hDbGFzc0luZm8gKkdldENs YXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZ3eEFjY2VsZXJhdG9yVGFibGU6OnNtX2NsYXNzd3hB Y2NlbGVyYXRvclRhYmxlOyB9DQpwdWJsaWM6DQogICAgd3hBY2NlbGVyYXRvclRhYmxlKCk7DQog ICAgd3hBY2NlbGVyYXRvclRhYmxlKGNvbnN0IHd4U3RyaW5nJiByZXNvdXJjZSk7DQogICAgd3hB Y2NlbGVyYXRvclRhYmxlKGludCBuLCBjb25zdCB3eEFjY2VsZXJhdG9yRW50cnkgZW50cmllc1td KTsNCg0KDQogICAgaW5saW5lIHd4QWNjZWxlcmF0b3JUYWJsZShjb25zdCB3eEFjY2VsZXJhdG9y VGFibGUmIGFjY2VsKSB7IFJlZihhY2NlbCk7IH0NCiAgICBpbmxpbmUgd3hBY2NlbGVyYXRvclRh YmxlKGNvbnN0IHd4QWNjZWxlcmF0b3JUYWJsZSogYWNjZWwpIHsgaWYgKGFjY2VsKSBSZWYoKmFj Y2VsKTsgfQ0KDQogICAgfnd4QWNjZWxlcmF0b3JUYWJsZSgpOw0KDQogICAgaW5saW5lIHd4QWNj ZWxlcmF0b3JUYWJsZSYgb3BlcmF0b3IgPSAoY29uc3Qgd3hBY2NlbGVyYXRvclRhYmxlJiBhY2Nl bCkgeyBpZiAoICp0aGlzICE9IGFjY2VsICkgUmVmKGFjY2VsKTsgcmV0dXJuICp0aGlzOyB9DQog ICAgaW5saW5lIGJvb2wgb3BlcmF0b3IgPT0gKGNvbnN0IHd4QWNjZWxlcmF0b3JUYWJsZSYgYWNj ZWwpIGNvbnN0IHsgcmV0dXJuIG1fcmVmRGF0YSA9PSBhY2NlbC5tX3JlZkRhdGE7IH0NCiAgICBp bmxpbmUgYm9vbCBvcGVyYXRvciAhPSAoY29uc3Qgd3hBY2NlbGVyYXRvclRhYmxlJiBhY2NlbCkg Y29uc3QgeyByZXR1cm4gbV9yZWZEYXRhICE9IGFjY2VsLm1fcmVmRGF0YTsgfQ0KDQogICAgYm9v bCBPaygpIGNvbnN0Ow0KICAgIHZvaWQgU2V0SEFDQ0VMKFdYSEFDQ0VMIGhBY2NlbCk7DQogICAg V1hIQUNDRUwgR2V0SEFDQ0VMKCkgY29uc3Q7DQoNCg0KICAgIGJvb2wgVHJhbnNsYXRlKHd4V2lu ZG93ICp3aW5kb3csIFdYTVNHICptc2cpIGNvbnN0Ow0KfTsNCg0KX19hdHRyaWJ1dGVfXygoZGxs aW1wb3J0KSkgZXh0ZXJuIHd4QWNjZWxlcmF0b3JUYWJsZSB3eE51bGxBY2NlbGVyYXRvclRhYmxl Ow0KIyA2ICIuLi8uLi9pbmNsdWRlL3d4L2FjY2VsLmgiIDINCiMgMzcgIi4uLy4uL2luY2x1ZGUv d3gvd2luZG93LmgiIDINCg0KDQoNCg0KDQoNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9y dCkpIHd4Q2FyZXQ7DQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eENsaWVudERh dGE7DQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eENvbnRyb2w7DQpjbGFzcyBf X2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eEN1cnNvcjsNCmNsYXNzIF9fYXR0cmlidXRlX18o KGRsbGltcG9ydCkpIHd4REM7DQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eERy b3BUYXJnZXQ7DQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eEl0ZW1SZXNvdXJj ZTsNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4TGF5b3V0Q29uc3RyYWludHM7 DQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eFJlc291cmNlVGFibGU7DQpjbGFz cyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eFNpemVyOw0KY2xhc3MgX19hdHRyaWJ1dGVf XygoZGxsaW1wb3J0KSkgd3hUb29sVGlwOw0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0 KSkgd3hXaW5kb3dCYXNlOw0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hXaW5k b3c7DQoNCg0KDQoNCg0KdHlwZWRlZiBpbnQgKCp3eFNvcnRGdW5jRm9yX3d4V2luZG93TGlzdCko Y29uc3Qgd3hXaW5kb3cgKiosIGNvbnN0IHd4V2luZG93ICoqKTsgY2xhc3MgX19hdHRyaWJ1dGVf XygoZGxsaW1wb3J0KSkgd3hXaW5kb3dMaXN0Tm9kZSA6IHB1YmxpYyB3eE5vZGVCYXNlIHsgcHVi bGljOiB3eFdpbmRvd0xpc3ROb2RlKHd4TGlzdEJhc2UgKmxpc3QgPSAod3hMaXN0QmFzZSAqKV9f bnVsbCwgd3hXaW5kb3dMaXN0Tm9kZSAqcHJldmlvdXMgPSAod3hXaW5kb3dMaXN0Tm9kZSAqKV9f bnVsbCwgd3hXaW5kb3dMaXN0Tm9kZSAqbmV4dCA9ICh3eFdpbmRvd0xpc3ROb2RlICopX19udWxs LCB3eFdpbmRvdyAqZGF0YSA9ICh3eFdpbmRvdyAqKV9fbnVsbCwgY29uc3Qgd3hMaXN0S2V5JiBr ZXkgPSB3eERlZmF1bHRMaXN0S2V5KSA6IHd4Tm9kZUJhc2UobGlzdCwgcHJldmlvdXMsIG5leHQs IGRhdGEsIGtleSkgeyB9IHd4V2luZG93TGlzdE5vZGUgKkdldE5leHQoKSBjb25zdCB7IHJldHVy biAod3hXaW5kb3dMaXN0Tm9kZSAqKXd4Tm9kZUJhc2U6OkdldE5leHQoKTsgfSB3eFdpbmRvd0xp c3ROb2RlICpHZXRQcmV2aW91cygpIGNvbnN0IHsgcmV0dXJuICh3eFdpbmRvd0xpc3ROb2RlICop d3hOb2RlQmFzZTo6R2V0UHJldmlvdXMoKTsgfSB3eFdpbmRvdyAqR2V0RGF0YSgpIGNvbnN0IHsg cmV0dXJuICh3eFdpbmRvdyAqKXd4Tm9kZUJhc2U6OkdldERhdGEoKTsgfSB2b2lkIFNldERhdGEo d3hXaW5kb3cgKmRhdGEpIHsgd3hOb2RlQmFzZTo6U2V0RGF0YShkYXRhKTsgfSB2aXJ0dWFsIHZv aWQgRGVsZXRlRGF0YSgpOyB9OyBjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eFdp bmRvd0xpc3QgOiBwdWJsaWMgd3hMaXN0QmFzZSB7IHB1YmxpYzogdHlwZWRlZiB3eFdpbmRvd0xp c3ROb2RlIE5vZGU7IHd4V2luZG93TGlzdCh3eEtleVR5cGUga2V5VHlwZSA9IHd4S0VZX05PTkUp IDogd3hMaXN0QmFzZShrZXlUeXBlKSB7IH0gd3hXaW5kb3dMaXN0KHNpemVfdCBjb3VudCwgd3hX aW5kb3cgKmVsZW1lbnRzW10pIDogd3hMaXN0QmFzZShjb3VudCwgKHZvaWQgKiopZWxlbWVudHMp IHsgfSB3eFdpbmRvd0xpc3QmIG9wZXJhdG9yPShjb25zdCB3eFdpbmRvd0xpc3QmIGxpc3QpIHsg cmV0dXJuICh3eFdpbmRvd0xpc3QmKXd4TGlzdEJhc2U6Om9wZXJhdG9yPShsaXN0KTsgfSB3eFdp bmRvd0xpc3ROb2RlICpHZXRGaXJzdCgpIGNvbnN0IHsgcmV0dXJuICh3eFdpbmRvd0xpc3ROb2Rl ICopd3hMaXN0QmFzZTo6R2V0Rmlyc3QoKTsgfSB3eFdpbmRvd0xpc3ROb2RlICpHZXRMYXN0KCkg Y29uc3QgeyByZXR1cm4gKHd4V2luZG93TGlzdE5vZGUgKil3eExpc3RCYXNlOjpHZXRMYXN0KCk7 IH0gd3hXaW5kb3dMaXN0Tm9kZSAqSXRlbShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuICh3 eFdpbmRvd0xpc3ROb2RlICopd3hMaXN0QmFzZTo6SXRlbShpbmRleCk7IH0gd3hXaW5kb3cgKm9w ZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7IHd4V2luZG93TGlzdE5vZGUgKm5vZGUgPSBJ dGVtKGluZGV4KTsgcmV0dXJuIG5vZGUgPyAod3hXaW5kb3cqKShub2RlLT5HZXREYXRhKCkpIDog KHd4V2luZG93KilfX251bGw7IH0gd3hXaW5kb3dMaXN0Tm9kZSAqQXBwZW5kKHd4V2luZG93QmFz ZSAqb2JqZWN0KSB7IHJldHVybiAod3hXaW5kb3dMaXN0Tm9kZSAqKXd4TGlzdEJhc2U6OkFwcGVu ZChvYmplY3QpOyB9IHd4V2luZG93TGlzdE5vZGUgKkluc2VydCh3eFdpbmRvd0Jhc2UgKm9iamVj dCkgeyByZXR1cm4gKHd4V2luZG93TGlzdE5vZGUgKilJbnNlcnQoKHd4V2luZG93TGlzdE5vZGUq KV9fbnVsbCwgb2JqZWN0KTsgfSB3eFdpbmRvd0xpc3ROb2RlICpJbnNlcnQoc2l6ZV90IHBvcywg d3hXaW5kb3dCYXNlICpvYmplY3QpIHsgcmV0dXJuICh3eFdpbmRvd0xpc3ROb2RlICopd3hMaXN0 QmFzZTo6SW5zZXJ0KHBvcywgb2JqZWN0KTsgfSB3eFdpbmRvd0xpc3ROb2RlICpJbnNlcnQod3hX aW5kb3dMaXN0Tm9kZSAqcHJldiwgd3hXaW5kb3dCYXNlICpvYmplY3QpIHsgcmV0dXJuICh3eFdp bmRvd0xpc3ROb2RlICopd3hMaXN0QmFzZTo6SW5zZXJ0KHByZXYsIG9iamVjdCk7IH0gd3hXaW5k b3dMaXN0Tm9kZSAqQXBwZW5kKGxvbmcga2V5LCB2b2lkICpvYmplY3QpIHsgcmV0dXJuICh3eFdp bmRvd0xpc3ROb2RlICopd3hMaXN0QmFzZTo6QXBwZW5kKGtleSwgb2JqZWN0KTsgfSB3eFdpbmRv d0xpc3ROb2RlICpBcHBlbmQoY29uc3QgY2hhciAqa2V5LCB2b2lkICpvYmplY3QpIHsgcmV0dXJu ICh3eFdpbmRvd0xpc3ROb2RlICopd3hMaXN0QmFzZTo6QXBwZW5kKGtleSwgb2JqZWN0KTsgfSB3 eFdpbmRvd0xpc3ROb2RlICpEZXRhY2hOb2RlKHd4V2luZG93TGlzdE5vZGUgKm5vZGUpIHsgcmV0 dXJuICh3eFdpbmRvd0xpc3ROb2RlICopd3hMaXN0QmFzZTo6RGV0YWNoTm9kZShub2RlKTsgfSBi b29sIERlbGV0ZU5vZGUod3hXaW5kb3dMaXN0Tm9kZSAqbm9kZSkgeyByZXR1cm4gd3hMaXN0QmFz ZTo6RGVsZXRlTm9kZShub2RlKTsgfSBib29sIERlbGV0ZU9iamVjdCh3eFdpbmRvd0Jhc2UgKm9i amVjdCkgeyByZXR1cm4gd3hMaXN0QmFzZTo6RGVsZXRlT2JqZWN0KG9iamVjdCk7IH0gd3hXaW5k b3dMaXN0Tm9kZSAqRmluZCh3eFdpbmRvd0Jhc2UgKm9iamVjdCkgY29uc3QgeyByZXR1cm4gKHd4 V2luZG93TGlzdE5vZGUgKil3eExpc3RCYXNlOjpGaW5kKG9iamVjdCk7IH0gdmlydHVhbCB3eFdp bmRvd0xpc3ROb2RlICpGaW5kKGNvbnN0IHd4TGlzdEtleSYga2V5KSBjb25zdCB7IHJldHVybiAo d3hXaW5kb3dMaXN0Tm9kZSAqKXd4TGlzdEJhc2U6OkZpbmQoa2V5KTsgfSBpbnQgSW5kZXhPZih3 eFdpbmRvd0Jhc2UgKm9iamVjdCkgY29uc3QgeyByZXR1cm4gd3hMaXN0QmFzZTo6SW5kZXhPZihv YmplY3QpOyB9IHZvaWQgU29ydCh3eFNvcnRGdW5jRm9yX3d4V2luZG93TGlzdCBmdW5jKSB7IHd4 TGlzdEJhc2U6OlNvcnQoKHd4U29ydENvbXBhcmVGdW5jdGlvbilmdW5jKTsgfSBwcm90ZWN0ZWQ6 IHd4Tm9kZUJhc2UgKkNyZWF0ZU5vZGUod3hOb2RlQmFzZSAqcHJldiwgd3hOb2RlQmFzZSAqbmV4 dCwgdm9pZCAqZGF0YSwgY29uc3Qgd3hMaXN0S2V5JiBrZXkgPSB3eERlZmF1bHRMaXN0S2V5KSB7 IHJldHVybiBuZXcgd3hXaW5kb3dMaXN0Tm9kZSh0aGlzLCAod3hXaW5kb3dMaXN0Tm9kZSAqKXBy ZXYsICh3eFdpbmRvd0xpc3ROb2RlICopbmV4dCwgKHd4V2luZG93ICopZGF0YSwga2V5KTsgfSB9 Ow0KDQoNCg0KDQoNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGV4dGVybiB3eFdpbmRvd0xp c3Qgd3hUb3BMZXZlbFdpbmRvd3M7DQoNCg0KDQoNCg0KDQoNCmNsYXNzIHd4Q2xpZW50RGF0YQ0K ew0KcHVibGljOg0KICAgIHd4Q2xpZW50RGF0YSgpIHsgfQ0KICAgIHZpcnR1YWwgfnd4Q2xpZW50 RGF0YSgpIHsgfQ0KfTsNCg0KY2xhc3Mgd3hTdHJpbmdDbGllbnREYXRhIDogcHVibGljIHd4Q2xp ZW50RGF0YQ0Kew0KcHVibGljOg0KICAgIHd4U3RyaW5nQ2xpZW50RGF0YSgpIHsgfQ0KICAgIHd4 U3RyaW5nQ2xpZW50RGF0YSggY29uc3Qgd3hTdHJpbmcgJmRhdGEgKSA6IG1fZGF0YShkYXRhKSB7 IH0NCiAgICB2b2lkIFNldERhdGEoIGNvbnN0IHd4U3RyaW5nICZkYXRhICkgeyBtX2RhdGEgPSBk YXRhOyB9DQogICAgY29uc3Qgd3hTdHJpbmcmIEdldERhdGEoKSBjb25zdCB7IHJldHVybiBtX2Rh dGE7IH0NCg0KcHJpdmF0ZToNCiAgICB3eFN0cmluZyBtX2RhdGE7DQp9Ow0KIyAxMDUgIi4uLy4u L2luY2x1ZGUvd3gvd2luZG93LmgiDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3 eFdpbmRvd0Jhc2UgOiBwdWJsaWMgd3hFdnRIYW5kbGVyDQp7DQogICAgcHVibGljOiBzdGF0aWMg d3hDbGFzc0luZm8gc21fY2xhc3N3eFdpbmRvd0Jhc2U7IHd4Q2xhc3NJbmZvICpHZXRDbGFzc0lu Zm8oKSBjb25zdCB7IHJldHVybiAmd3hXaW5kb3dCYXNlOjpzbV9jbGFzc3d4V2luZG93QmFzZTsg fTsNCg0KcHVibGljOg0KDQoNCg0KDQogICAgd3hXaW5kb3dCYXNlKCkgeyBJbml0QmFzZSgpOyB9 DQoNCg0KICAgIGJvb2wgQ3JlYXRlQmFzZSh3eFdpbmRvd0Jhc2UgKnBhcmVudCwNCiAgICAgICAg ICAgICAgICAgICAgd3hXaW5kb3dJRCBpZCwNCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd3hQ b2ludCYgcG9zID0gd3hEZWZhdWx0UG9zaXRpb24sDQogICAgICAgICAgICAgICAgICAgIGNvbnN0 IHd4U2l6ZSYgc2l6ZSA9IHd4RGVmYXVsdFNpemUsDQogICAgICAgICAgICAgICAgICAgIGxvbmcg c3R5bGUgPSAwLA0KICAgICAgICAgICAgICAgICAgICBjb25zdCB3eFZhbGlkYXRvciYgdmFsaWRh dG9yID0gd3hEZWZhdWx0VmFsaWRhdG9yLA0KICAgICAgICAgICAgICAgICAgICBjb25zdCB3eFN0 cmluZyYgbmFtZSA9IHd4UGFuZWxOYW1lU3RyKTsNCg0KICAgIHZpcnR1YWwgfnd4V2luZG93QmFz ZSgpOw0KDQoNCg0KICAgIHZpcnR1YWwgYm9vbCBMb2FkRnJvbVJlc291cmNlKHd4V2luZG93ICpw YXJlbnQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd3hTdHJpbmcm IHJlc291cmNlTmFtZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3 eFJlc291cmNlVGFibGUgKnRhYmxlID0gKGNvbnN0IHd4UmVzb3VyY2VUYWJsZSAqKSBfX251bGwp Ow0KICAgIHZpcnR1YWwgd3hDb250cm9sICpDcmVhdGVJdGVtKGNvbnN0IHd4SXRlbVJlc291cmNl KiBjaGlsZFJlc291cmNlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHd4SXRlbVJlc291cmNlKiBwYXJlbnRSZXNvdXJjZSwNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCB3eFJlc291cmNlVGFibGUgKnRhYmxlID0gKGNvbnN0IHd4UmVzb3Vy Y2VUYWJsZSAqKSBfX251bGwpOw0KDQoNCg0KDQoNCg0KDQogICAgYm9vbCBDbG9zZSggYm9vbCBm b3JjZSA9IDAgKTsNCg0KDQoNCg0KDQoNCiAgICB2aXJ0dWFsIGJvb2wgRGVzdHJveSgpOw0KDQog ICAgYm9vbCBEZXN0cm95Q2hpbGRyZW4oKTsNCg0KDQogICAgYm9vbCBJc0JlaW5nRGVsZXRlZCgp IGNvbnN0IHsgcmV0dXJuIG1faXNCZWluZ0RlbGV0ZWQ7IH0NCg0KDQoNCg0KDQoNCiAgICB2aXJ0 dWFsIHZvaWQgU2V0VGl0bGUoIGNvbnN0IHd4U3RyaW5nICYgKSB7IH0NCiAgICB2aXJ0dWFsIHd4 U3RyaW5nIEdldFRpdGxlKCkgY29uc3QgeyByZXR1cm4gIiI7IH0NCg0KDQoNCiAgICB2aXJ0dWFs IHZvaWQgU2V0TGFiZWwoY29uc3Qgd3hTdHJpbmcmIGxhYmVsKSB7IFNldFRpdGxlKGxhYmVsKTsg fQ0KICAgIHZpcnR1YWwgd3hTdHJpbmcgR2V0TGFiZWwoKSBjb25zdCB7IHJldHVybiBHZXRUaXRs ZSgpOyB9DQoNCg0KDQogICAgdmlydHVhbCB2b2lkIFNldE5hbWUoIGNvbnN0IHd4U3RyaW5nICZu YW1lICkgeyBtX3dpbmRvd05hbWUgPSBuYW1lOyB9DQogICAgdmlydHVhbCB3eFN0cmluZyBHZXRO YW1lKCkgY29uc3QgeyByZXR1cm4gbV93aW5kb3dOYW1lOyB9DQoNCg0KDQogICAgdm9pZCBTZXRJ ZCggd3hXaW5kb3dJRCBpZCApIHsgbV93aW5kb3dJZCA9IGlkOyB9DQogICAgd3hXaW5kb3dJRCBH ZXRJZCgpIGNvbnN0IHsgcmV0dXJuIG1fd2luZG93SWQ7IH0NCg0KDQoNCiAgICBzdGF0aWMgaW50 IE5ld0NvbnRyb2xJZCgpIHsgcmV0dXJuIC0tbXNfbGFzdENvbnRyb2xJZDsgfQ0KDQoNCiAgICBz dGF0aWMgaW50IE5leHRDb250cm9sSWQoaW50IGlkKSB7IHJldHVybiBpZCAtIDE7IH0NCg0KDQog ICAgc3RhdGljIGludCBQcmV2Q29udHJvbElkKGludCBpZCkgeyByZXR1cm4gaWQgKyAxOyB9DQoN Cg0KDQoNCg0KICAgIHZvaWQgU2V0U2l6ZSggaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBo ZWlnaHQsDQogICAgICAgICAgICAgICAgICBpbnQgc2l6ZUZsYWdzID0gKDB4MDAwMXwweDAwMDIp ICkNCiAgICAgICAgeyBEb1NldFNpemUoeCwgeSwgd2lkdGgsIGhlaWdodCwgc2l6ZUZsYWdzKTsg fQ0KDQogICAgdm9pZCBTZXRTaXplKCBpbnQgd2lkdGgsIGludCBoZWlnaHQgKQ0KICAgICAgICB7 IERvU2V0U2l6ZSggLTEsIC0xLCB3aWR0aCwgaGVpZ2h0LCAweDAwMDAgKTsgfQ0KDQogICAgdm9p ZCBTZXRTaXplKCBjb25zdCB3eFNpemUmIHNpemUgKQ0KICAgICAgICB7IFNldFNpemUoIHNpemUu eCwgc2l6ZS55KTsgfQ0KDQogICAgdm9pZCBTZXRTaXplKGNvbnN0IHd4UmVjdCYgcmVjdCwgaW50 IHNpemVGbGFncyA9ICgweDAwMDF8MHgwMDAyKSkNCiAgICAgICAgeyBEb1NldFNpemUocmVjdC54 LCByZWN0LnksIHJlY3Qud2lkdGgsIHJlY3QuaGVpZ2h0LCBzaXplRmxhZ3MpOyB9DQoNCiAgICB2 b2lkIE1vdmUoIGludCB4LCBpbnQgeSApDQogICAgICAgIHsgRG9TZXRTaXplKCB4LCB5LCAtMSwg LTEsIDB4MDAwMCApOyB9DQoNCiAgICB2b2lkIE1vdmUoY29uc3Qgd3hQb2ludCYgcHQpDQogICAg ICAgIHsgTW92ZShwdC54LCBwdC55KTsgfQ0KDQoNCiAgICB2aXJ0dWFsIHZvaWQgUmFpc2UoKSA9 IDA7DQogICAgdmlydHVhbCB2b2lkIExvd2VyKCkgPSAwOw0KDQoNCiAgICB2b2lkIFNldENsaWVu dFNpemUoIGludCB3aWR0aCwgaW50IGhlaWdodCApDQogICAgICAgIHsgRG9TZXRDbGllbnRTaXpl KHdpZHRoLCBoZWlnaHQpOyB9DQoNCiAgICB2b2lkIFNldENsaWVudFNpemUoIGNvbnN0IHd4U2l6 ZSYgc2l6ZSApDQogICAgICAgIHsgRG9TZXRDbGllbnRTaXplKHNpemUueCwgc2l6ZS55KTsgfQ0K DQogICAgdm9pZCBTZXRDbGllbnRTaXplKGNvbnN0IHd4UmVjdCYgcmVjdCkNCiAgICAgICAgeyBT ZXRDbGllbnRTaXplKCByZWN0LndpZHRoLCByZWN0LmhlaWdodCApOyB9DQoNCg0KICAgIHZvaWQg R2V0UG9zaXRpb24oIGludCAqeCwgaW50ICp5ICkgY29uc3QgeyBEb0dldFBvc2l0aW9uKHgsIHkp OyB9DQogICAgd3hQb2ludCBHZXRQb3NpdGlvbigpIGNvbnN0DQogICAgew0KICAgICAgICBpbnQg dywgaDsNCiAgICAgICAgRG9HZXRQb3NpdGlvbigmdywgJmgpOw0KDQogICAgICAgIHJldHVybiB3 eFBvaW50KHcsIGgpOw0KICAgIH0NCg0KICAgIHZvaWQgR2V0U2l6ZSggaW50ICp3LCBpbnQgKmgg KSBjb25zdCB7IERvR2V0U2l6ZSh3LCBoKTsgfQ0KICAgIHd4U2l6ZSBHZXRTaXplKCkgY29uc3QN CiAgICB7DQogICAgICAgIGludCB3LCBoOw0KICAgICAgICBEb0dldFNpemUoJiB3LCAmIGgpOw0K ICAgICAgICByZXR1cm4gd3hTaXplKHcsIGgpOw0KICAgIH0NCg0KICAgIHd4UmVjdCBHZXRSZWN0 KCkgY29uc3QNCiAgICB7DQogICAgICAgIGludCB4LCB5LCB3LCBoOw0KICAgICAgICBHZXRQb3Np dGlvbigmIHgsICYgeSk7DQogICAgICAgIEdldFNpemUoJiB3LCAmIGgpOw0KDQogICAgICAgIHJl dHVybiB3eFJlY3QoeCwgeSwgdywgaCk7DQogICAgfQ0KDQogICAgdm9pZCBHZXRDbGllbnRTaXpl KCBpbnQgKncsIGludCAqaCApIGNvbnN0IHsgRG9HZXRDbGllbnRTaXplKHcsIGgpOyB9DQogICAg d3hTaXplIEdldENsaWVudFNpemUoKSBjb25zdA0KICAgIHsNCiAgICAgICAgaW50IHcsIGg7DQog ICAgICAgIERvR2V0Q2xpZW50U2l6ZSgmIHcsICYgaCk7DQoNCiAgICAgICAgcmV0dXJuIHd4U2l6 ZSh3LCBoKTsNCiAgICB9DQoNCg0KDQogICAgd3hTaXplIEdldEJlc3RTaXplKCkgY29uc3QgeyBy ZXR1cm4gRG9HZXRCZXN0U2l6ZSgpOyB9DQogICAgdm9pZCBHZXRCZXN0U2l6ZShpbnQgKncsIGlu dCAqaCkgY29uc3QNCiAgICB7DQogICAgICAgIHd4U2l6ZSBzID0gRG9HZXRCZXN0U2l6ZSgpOw0K ICAgICAgICBpZiAoIHcgKQ0KICAgICAgICAgICAgKncgPSBzLng7DQogICAgICAgIGlmICggaCAp DQogICAgICAgICAgICAqaCA9IHMueTsNCiAgICB9DQoNCg0KDQoNCiAgICB2b2lkIENlbnRyZSgg aW50IGRpcmVjdGlvbiA9IHd4Qk9USCApOw0KICAgIHZvaWQgQ2VudGVyKCBpbnQgZGlyZWN0aW9u ID0gd3hCT1RIICkgeyBDZW50cmUoZGlyZWN0aW9uKTsgfQ0KDQoNCiAgICB2b2lkIENlbnRyZU9u U2NyZWVuKGludCBkaXIgPSB3eEJPVEgpIHsgQ2VudHJlKGRpciB8IDB4MDAwMik7IH0NCiAgICB2 b2lkIENlbnRlck9uU2NyZWVuKGludCBkaXIgPSB3eEJPVEgpIHsgQ2VudHJlT25TY3JlZW4oZGly KTsgfQ0KDQoNCiAgICB2b2lkIENlbnRyZU9uUGFyZW50KGludCBkaXIgPSB3eEJPVEgpIHsgQ2Vu dHJlKGRpciB8IDB4MDAwMCk7IH0NCiAgICB2b2lkIENlbnRlck9uUGFyZW50KGludCBkaXIgPSB3 eEJPVEgpIHsgQ2VudHJlT25QYXJlbnQoZGlyKTsgfQ0KDQoNCiAgICB2aXJ0dWFsIHZvaWQgRml0 KCk7DQoNCg0KICAgIHZpcnR1YWwgdm9pZCBTZXRTaXplSGludHMoIGludCBtaW5XLCBpbnQgbWlu SCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWF4VyA9IC0xLCBpbnQgbWF4 SCA9IC0xLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbmNXID0gLTEsIGlu dCBpbmNIID0gLTEgKTsNCg0KICAgIGludCBHZXRNaW5XaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1f bWluV2lkdGg7IH0NCiAgICBpbnQgR2V0TWluSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9taW5I ZWlnaHQ7IH0NCiAgICBpbnQgR2V0TWF4V2lkdGgoKSBjb25zdCB7IHJldHVybiBtX21heFdpZHRo OyB9DQogICAgaW50IEdldE1heEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4SGVpZ2h0OyB9 DQoNCg0KDQoNCg0KDQogICAgdmlydHVhbCBib29sIFNob3coIGJvb2wgc2hvdyA9IDEgKTsNCiAg ICBib29sIEhpZGUoKSB7IHJldHVybiBTaG93KDApOyB9DQoNCg0KICAgIHZpcnR1YWwgYm9vbCBF bmFibGUoIGJvb2wgZW5hYmxlID0gMSApOw0KICAgIGJvb2wgRGlzYWJsZSgpIHsgcmV0dXJuIEVu YWJsZSgwKTsgfQ0KDQogICAgYm9vbCBJc1Nob3duKCkgY29uc3QgeyByZXR1cm4gbV9pc1Nob3du OyB9DQogICAgYm9vbCBJc0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzRW5hYmxlZDsgfQ0K DQoNCg0KICAgIHZpcnR1YWwgdm9pZCBTZXRXaW5kb3dTdHlsZUZsYWcoIGxvbmcgc3R5bGUgKSB7 IG1fd2luZG93U3R5bGUgPSBzdHlsZTsgfQ0KICAgIHZpcnR1YWwgbG9uZyBHZXRXaW5kb3dTdHls ZUZsYWcoKSBjb25zdCB7IHJldHVybiBtX3dpbmRvd1N0eWxlOyB9DQoNCg0KICAgIHZvaWQgU2V0 V2luZG93U3R5bGUoIGxvbmcgc3R5bGUgKSB7IFNldFdpbmRvd1N0eWxlRmxhZyhzdHlsZSk7IH0N CiAgICBsb25nIEdldFdpbmRvd1N0eWxlKCkgY29uc3QgeyByZXR1cm4gR2V0V2luZG93U3R5bGVG bGFnKCk7IH0NCg0KICAgIGJvb2wgSGFzRmxhZyhpbnQgZmxhZykgY29uc3QgeyByZXR1cm4gKG1f d2luZG93U3R5bGUgJiBmbGFnKSAhPSAwOyB9DQogICAgdmlydHVhbCBib29sIElzUmV0YWluZWQo KSBjb25zdCB7IHJldHVybiBIYXNGbGFnKDB4MDAwMjAwMDApOyB9DQoNCg0KDQogICAgdm9pZCBT ZXRFeHRyYVN0eWxlKGxvbmcgZXhTdHlsZSkgeyBtX2V4U3R5bGUgPSBleFN0eWxlOyB9DQogICAg bG9uZyBHZXRFeHRyYVN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9leFN0eWxlOyB9DQoNCg0KICAg IHZpcnR1YWwgdm9pZCBNYWtlTW9kYWwoYm9vbCBtb2RhbCA9IDEpOw0KDQoNCg0KDQoNCiAgICB2 aXJ0dWFsIHZvaWQgU2V0Rm9jdXMoKSA9IDA7DQoNCg0KICAgIHN0YXRpYyB3eFdpbmRvdyAqRmlu ZEZvY3VzKCkgOw0KDQoNCiAgICB2aXJ0dWFsIGJvb2wgQWNjZXB0c0ZvY3VzKCkgY29uc3QgeyBy ZXR1cm4gSXNTaG93bigpICYmIElzRW5hYmxlZCgpOyB9DQoNCg0KDQoNCg0KICAgIGNvbnN0IHd4 V2luZG93TGlzdCYgR2V0Q2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVuOyB9DQog ICAgd3hXaW5kb3dMaXN0JiBHZXRDaGlsZHJlbigpIHsgcmV0dXJuIG1fY2hpbGRyZW47IH0NCg0K DQogICAgd3hXaW5kb3cgKkdldFBhcmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50OyB9DQog ICAgaW5saW5lIHd4V2luZG93ICpHZXRHcmFuZFBhcmVudCgpIGNvbnN0Ow0KDQoNCiAgICB2aXJ0 dWFsIGJvb2wgSXNUb3BMZXZlbCgpIGNvbnN0Ow0KDQoNCiAgICB2b2lkIFNldFBhcmVudCggd3hX aW5kb3dCYXNlICpwYXJlbnQgKSB7IG1fcGFyZW50ID0gKHd4V2luZG93ICopcGFyZW50OyB9DQoN Cg0KICAgIHZpcnR1YWwgYm9vbCBSZXBhcmVudCggd3hXaW5kb3dCYXNlICpuZXdQYXJlbnQgKTsN Cg0KDQoNCiAgICB3eFdpbmRvdyAqRmluZFdpbmRvdyggbG9uZyBpZCApOw0KICAgIHd4V2luZG93 ICpGaW5kV2luZG93KCBjb25zdCB3eFN0cmluZyYgbmFtZSApOw0KDQoNCiAgICB2aXJ0dWFsIHZv aWQgQWRkQ2hpbGQoIHd4V2luZG93QmFzZSAqY2hpbGQgKTsNCiAgICB2aXJ0dWFsIHZvaWQgUmVt b3ZlQ2hpbGQoIHd4V2luZG93QmFzZSAqY2hpbGQgKTsNCg0KDQoNCg0KDQogICAgd3hFdnRIYW5k bGVyICpHZXRFdmVudEhhbmRsZXIoKSBjb25zdCB7IHJldHVybiBtX2V2ZW50SGFuZGxlcjsgfQ0K DQoNCg0KICAgIHZvaWQgU2V0RXZlbnRIYW5kbGVyKCB3eEV2dEhhbmRsZXIgKmhhbmRsZXIgKSB7 IG1fZXZlbnRIYW5kbGVyID0gaGFuZGxlcjsgfQ0KDQoNCg0KICAgIHZvaWQgUHVzaEV2ZW50SGFu ZGxlciggd3hFdnRIYW5kbGVyICpoYW5kbGVyICk7DQogICAgd3hFdnRIYW5kbGVyICpQb3BFdmVu dEhhbmRsZXIoIGJvb2wgZGVsZXRlSGFuZGxlciA9IDAgKTsNCg0KDQoNCg0KDQoNCg0KICAgIHZp cnR1YWwgdm9pZCBTZXRWYWxpZGF0b3IoIGNvbnN0IHd4VmFsaWRhdG9yICZ2YWxpZGF0b3IgKTsN CiAgICB2aXJ0dWFsIHd4VmFsaWRhdG9yICpHZXRWYWxpZGF0b3IoKSB7IHJldHVybiBtX3dpbmRv d1ZhbGlkYXRvcjsgfQ0KDQoNCg0KDQoNCg0KICAgIHZvaWQgU2V0Q2xpZW50T2JqZWN0KCB3eENs aWVudERhdGEgKmRhdGEgKSB7IERvU2V0Q2xpZW50T2JqZWN0KGRhdGEpOyB9DQogICAgd3hDbGll bnREYXRhICpHZXRDbGllbnRPYmplY3QoKSBjb25zdCB7IHJldHVybiBEb0dldENsaWVudE9iamVj dCgpOyB9DQoNCiAgICB2b2lkIFNldENsaWVudERhdGEoIHZvaWQgKmRhdGEgKSB7IERvU2V0Q2xp ZW50RGF0YShkYXRhKTsgfQ0KICAgIHZvaWQgKkdldENsaWVudERhdGEoKSBjb25zdCB7IHJldHVy biBEb0dldENsaWVudERhdGEoKTsgfQ0KDQoNCg0KDQoNCiAgICB2aXJ0dWFsIGJvb2wgVmFsaWRh dGUoKTsNCg0KDQogICAgdmlydHVhbCBib29sIFRyYW5zZmVyRGF0YVRvV2luZG93KCk7DQogICAg dmlydHVhbCBib29sIFRyYW5zZmVyRGF0YUZyb21XaW5kb3coKTsNCg0KICAgIHZpcnR1YWwgdm9p ZCBJbml0RGlhbG9nKCk7DQoNCg0KDQoNCiAgICB2aXJ0dWFsIHZvaWQgU2V0QWNjZWxlcmF0b3JU YWJsZSggY29uc3Qgd3hBY2NlbGVyYXRvclRhYmxlJiBhY2NlbCApDQogICAgICAgIHsgbV9hY2Nl bGVyYXRvclRhYmxlID0gYWNjZWw7IH0NCiAgICB3eEFjY2VsZXJhdG9yVGFibGUgKkdldEFjY2Vs ZXJhdG9yVGFibGUoKQ0KICAgICAgICB7IHJldHVybiAmbV9hY2NlbGVyYXRvclRhYmxlOyB9DQoN Cg0KDQoNCg0KICAgIHd4UG9pbnQgQ29udmVydFBpeGVsc1RvRGlhbG9nKCBjb25zdCB3eFBvaW50 JiBwdCApOw0KICAgIHd4UG9pbnQgQ29udmVydERpYWxvZ1RvUGl4ZWxzKCBjb25zdCB3eFBvaW50 JiBwdCApOw0KICAgIHd4U2l6ZSBDb252ZXJ0UGl4ZWxzVG9EaWFsb2coIGNvbnN0IHd4U2l6ZSYg c3ogKQ0KICAgIHsNCiAgICAgICAgd3hQb2ludCBwdChDb252ZXJ0UGl4ZWxzVG9EaWFsb2cod3hQ b2ludChzei54LCBzei55KSkpOw0KDQogICAgICAgIHJldHVybiB3eFNpemUocHQueCwgcHQueSk7 DQogICAgfQ0KDQogICAgd3hTaXplIENvbnZlcnREaWFsb2dUb1BpeGVscyggY29uc3Qgd3hTaXpl JiBzeiApDQogICAgew0KICAgICAgICB3eFBvaW50IHB0KENvbnZlcnREaWFsb2dUb1BpeGVscyh3 eFBvaW50KHN6LngsIHN6LnkpKSk7DQoNCiAgICAgICAgcmV0dXJuIHd4U2l6ZShwdC54LCBwdC55 KTsNCiAgICB9DQoNCg0KDQoNCg0KICAgIHZpcnR1YWwgdm9pZCBXYXJwUG9pbnRlcihpbnQgeCwg aW50IHkpID0gMDsNCg0KDQogICAgdmlydHVhbCB2b2lkIENhcHR1cmVNb3VzZSgpID0gMDsNCiAg ICB2aXJ0dWFsIHZvaWQgUmVsZWFzZU1vdXNlKCkgPSAwOw0KDQoNCg0KDQoNCg0KICAgIHZpcnR1 YWwgdm9pZCBSZWZyZXNoKCBib29sIGVyYXNlQmFja2dyb3VuZCA9IDEsDQogICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IHd4UmVjdCAqcmVjdCA9IChjb25zdCB3eFJlY3QgKikgX19udWxs ICkgPSAwOw0KDQogICAgdmlydHVhbCB2b2lkIENsZWFyKCkgPSAwOw0KDQoNCiAgICB2aXJ0dWFs IHZvaWQgUHJlcGFyZURDKCB3eERDICYgKSB7IH0NCg0KDQoNCiAgICBjb25zdCB3eFJlZ2lvbiYg R2V0VXBkYXRlUmVnaW9uKCkgY29uc3QgeyByZXR1cm4gbV91cGRhdGVSZWdpb247IH0NCiAgICB3 eFJlZ2lvbiYgR2V0VXBkYXRlUmVnaW9uKCkgeyByZXR1cm4gbV91cGRhdGVSZWdpb247IH0NCg0K DQoNCiAgICBib29sIElzRXhwb3NlZCggaW50IHgsIGludCB5ICkgY29uc3Q7DQogICAgYm9vbCBJ c0V4cG9zZWQoIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoICkgY29uc3Q7DQoNCiAgICBib29s IElzRXhwb3NlZCggY29uc3Qgd3hQb2ludCYgcHQgKSBjb25zdA0KICAgICAgICB7IHJldHVybiBJ c0V4cG9zZWQocHQueCwgcHQueSk7IH0NCiAgICBib29sIElzRXhwb3NlZCggY29uc3Qgd3hSZWN0 JiByZWN0ICkgY29uc3QNCiAgICAgICAgeyByZXR1cm4gSXNFeHBvc2VkKHJlY3QueCwgcmVjdC55 LCByZWN0LndpZHRoLCByZWN0LmhlaWdodCk7IH0NCg0KDQoNCg0KDQoNCiAgICB2aXJ0dWFsIGJv b2wgU2V0QmFja2dyb3VuZENvbG91ciggY29uc3Qgd3hDb2xvdXIgJmNvbG91ciApOw0KICAgIHZp cnR1YWwgYm9vbCBTZXRGb3JlZ3JvdW5kQ29sb3VyKCBjb25zdCB3eENvbG91ciAmY29sb3VyICk7 DQoNCiAgICB3eENvbG91ciBHZXRCYWNrZ3JvdW5kQ29sb3VyKCkgY29uc3QgeyByZXR1cm4gbV9i YWNrZ3JvdW5kQ29sb3VyOyB9DQogICAgd3hDb2xvdXIgR2V0Rm9yZWdyb3VuZENvbG91cigpIGNv bnN0IHsgcmV0dXJuIG1fZm9yZWdyb3VuZENvbG91cjsgfQ0KDQoNCg0KICAgIHZpcnR1YWwgYm9v bCBTZXRDdXJzb3IoIGNvbnN0IHd4Q3Vyc29yICZjdXJzb3IgKTsNCiAgICBjb25zdCB3eEN1cnNv ciYgR2V0Q3Vyc29yKCkgY29uc3QgeyByZXR1cm4gbV9jdXJzb3I7IH0NCiAgICB3eEN1cnNvciYg R2V0Q3Vyc29yKCkgeyByZXR1cm4gbV9jdXJzb3I7IH0NCg0KDQoNCiAgICB2aXJ0dWFsIGJvb2wg U2V0Rm9udCggY29uc3Qgd3hGb250ICZmb250ICkgPSAwOw0KICAgIGNvbnN0IHd4Rm9udCYgR2V0 Rm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udDsgfQ0KICAgIHd4Rm9udCYgR2V0Rm9udCgpIHsg cmV0dXJuIG1fZm9udDsgfQ0KDQoNCg0KICAgIHZvaWQgU2V0Q2FyZXQod3hDYXJldCAqY2FyZXQp Ow0KDQogICAgd3hDYXJldCAqR2V0Q2FyZXQoKSBjb25zdCB7IHJldHVybiBtX2NhcmV0OyB9DQoN Cg0KDQogICAgdmlydHVhbCBpbnQgR2V0Q2hhckhlaWdodCgpIGNvbnN0ID0gMDsNCiAgICB2aXJ0 dWFsIGludCBHZXRDaGFyV2lkdGgoKSBjb25zdCA9IDA7DQoNCg0KDQogICAgdmlydHVhbCB2b2lk IEdldFRleHRFeHRlbnQoY29uc3Qgd3hTdHJpbmcmIHN0cmluZywNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgKngsIGludCAqeSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgKmRlc2NlbnQgPSAoaW50ICopIF9fbnVsbCwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgKmV4dGVybmFsTGVhZGluZyA9IChpbnQgKikgX19udWxsLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHd4Rm9udCAqdGhlRm9udCA9IChjb25zdCB3 eEZvbnQgKikgX19udWxsKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0ID0g MDsNCg0KDQogICAgdm9pZCBDbGllbnRUb1NjcmVlbiggaW50ICp4LCBpbnQgKnkgKSBjb25zdA0K ICAgICAgICB7IERvQ2xpZW50VG9TY3JlZW4oeCwgeSk7IH0NCiAgICB2b2lkIFNjcmVlblRvQ2xp ZW50KCBpbnQgKngsIGludCAqeSApIGNvbnN0DQogICAgICAgIHsgRG9TY3JlZW5Ub0NsaWVudCh4 LCB5KTsgfQ0KICAgIHd4UG9pbnQgQ2xpZW50VG9TY3JlZW4oY29uc3Qgd3hQb2ludCYgcHQpIGNv bnN0DQogICAgew0KICAgICAgICBpbnQgeCA9IHB0LngsIHkgPSBwdC55Ow0KICAgICAgICBEb0Ns aWVudFRvU2NyZWVuKCZ4LCAmeSk7DQoNCiAgICAgICAgcmV0dXJuIHd4UG9pbnQoeCwgeSk7DQog ICAgfQ0KDQogICAgd3hQb2ludCBTY3JlZW5Ub0NsaWVudChjb25zdCB3eFBvaW50JiBwdCkgY29u c3QNCiAgICB7DQogICAgICAgIGludCB4ID0gcHQueCwgeSA9IHB0Lnk7DQogICAgICAgIERvU2Ny ZWVuVG9DbGllbnQoJngsICZ5KTsNCg0KICAgICAgICByZXR1cm4gd3hQb2ludCh4LCB5KTsNCiAg ICB9DQoNCg0KDQoNCiAgICB2b2lkIFVwZGF0ZVdpbmRvd1VJKCk7DQoNCiAgICBib29sIFBvcHVw TWVudSggd3hNZW51ICptZW51LCBjb25zdCB3eFBvaW50JiBwb3MgKQ0KICAgICAgICB7IHJldHVy biBEb1BvcHVwTWVudShtZW51LCBwb3MueCwgcG9zLnkpOyB9DQogICAgYm9vbCBQb3B1cE1lbnUo IHd4TWVudSAqbWVudSwgaW50IHgsIGludCB5ICkNCiAgICAgICAgeyByZXR1cm4gRG9Qb3B1cE1l bnUobWVudSwgeCwgeSk7IH0NCg0KDQoNCg0KDQogICAgdmlydHVhbCB2b2lkIFNldFNjcm9sbGJh ciggaW50IG9yaWVudCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9zLA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0aHVtYlZpc2libGUsDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJhbmdlLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJvb2wgcmVmcmVzaCA9IDEgKSA9IDA7DQogICAgdmlydHVhbCB2b2lkIFNldFNj cm9sbFBvcyggaW50IG9yaWVudCwgaW50IHBvcywgYm9vbCByZWZyZXNoID0gMSApID0gMDsNCiAg ICB2aXJ0dWFsIGludCBHZXRTY3JvbGxQb3MoIGludCBvcmllbnQgKSBjb25zdCA9IDA7DQogICAg dmlydHVhbCBpbnQgR2V0U2Nyb2xsVGh1bWIoIGludCBvcmllbnQgKSBjb25zdCA9IDA7DQogICAg dmlydHVhbCBpbnQgR2V0U2Nyb2xsUmFuZ2UoIGludCBvcmllbnQgKSBjb25zdCA9IDA7DQoNCg0K ICAgIHZpcnR1YWwgdm9pZCBTY3JvbGxXaW5kb3coIGludCBkeCwgaW50IGR5LA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHd4UmVjdCogcmVjdCA9ICh3eFJlY3QgKikgX19u dWxsICkgPSAwOw0KDQoNCg0KDQoNCiAgICB2b2lkIFNldFRvb2xUaXAoIGNvbnN0IHd4U3RyaW5n ICZ0aXAgKTsNCg0KICAgIHZvaWQgU2V0VG9vbFRpcCggd3hUb29sVGlwICp0aXAgKSB7IERvU2V0 VG9vbFRpcCh0aXApOyB9DQoNCiAgICB3eFRvb2xUaXAqIEdldFRvb2xUaXAoKSBjb25zdCB7IHJl dHVybiBtX3Rvb2x0aXA7IH0NCg0KDQoNCg0KDQoNCg0KICAgIHZpcnR1YWwgdm9pZCBTZXREcm9w VGFyZ2V0KCB3eERyb3BUYXJnZXQgKmRyb3BUYXJnZXQgKSA9IDA7DQogICAgdmlydHVhbCB3eERy b3BUYXJnZXQgKkdldERyb3BUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtX2Ryb3BUYXJnZXQ7IH0N Cg0KDQoNCg0KDQoNCiAgICB2b2lkIFNldENvbnN0cmFpbnRzKCB3eExheW91dENvbnN0cmFpbnRz ICpjb25zdHJhaW50cyApOw0KICAgIHd4TGF5b3V0Q29uc3RyYWludHMgKkdldENvbnN0cmFpbnRz KCkgY29uc3QgeyByZXR1cm4gbV9jb25zdHJhaW50czsgfQ0KDQoNCg0KDQogICAgdm9pZCBTZXRB dXRvTGF5b3V0KCBib29sIGF1dG9MYXlvdXQgKSB7IG1fYXV0b0xheW91dCA9IGF1dG9MYXlvdXQ7 IH0NCiAgICBib29sIEdldEF1dG9MYXlvdXQoKSBjb25zdCB7IHJldHVybiBtX2F1dG9MYXlvdXQ7 IH0NCg0KDQogICAgdmlydHVhbCBib29sIExheW91dCgpOw0KDQoNCiAgICB2b2lkIFVuc2V0Q29u c3RyYWludHMod3hMYXlvdXRDb25zdHJhaW50cyAqYyk7DQogICAgd3hXaW5kb3dMaXN0ICpHZXRD b25zdHJhaW50c0ludm9sdmVkSW4oKSBjb25zdA0KICAgICAgICB7IHJldHVybiBtX2NvbnN0cmFp bnRzSW52b2x2ZWRJbjsgfQ0KICAgIHZvaWQgQWRkQ29uc3RyYWludFJlZmVyZW5jZSh3eFdpbmRv d0Jhc2UgKm90aGVyV2luKTsNCiAgICB2b2lkIFJlbW92ZUNvbnN0cmFpbnRSZWZlcmVuY2Uod3hX aW5kb3dCYXNlICpvdGhlcldpbik7DQogICAgdm9pZCBEZWxldGVSZWxhdGVkQ29uc3RyYWludHMo KTsNCiAgICB2b2lkIFJlc2V0Q29uc3RyYWludHMoKTsNCg0KDQogICAgdmlydHVhbCB2b2lkIFNl dENvbnN0cmFpbnRTaXplcyhib29sIHJlY3Vyc2UgPSAxKTsNCiAgICB2aXJ0dWFsIGJvb2wgTGF5 b3V0UGhhc2UxKGludCAqbm9DaGFuZ2VzKTsNCiAgICB2aXJ0dWFsIGJvb2wgTGF5b3V0UGhhc2Uy KGludCAqbm9DaGFuZ2VzKTsNCiAgICB2aXJ0dWFsIGJvb2wgRG9QaGFzZShpbnQgcGhhc2UpOw0K DQoNCiAgICB2aXJ0dWFsIHZvaWQgU2V0U2l6ZUNvbnN0cmFpbnQoaW50IHgsIGludCB5LCBpbnQg dywgaW50IGgpOw0KICAgIHZpcnR1YWwgdm9pZCBNb3ZlQ29uc3RyYWludChpbnQgeCwgaW50IHkp Ow0KICAgIHZpcnR1YWwgdm9pZCBHZXRTaXplQ29uc3RyYWludChpbnQgKncsIGludCAqaCkgY29u c3QgOw0KICAgIHZpcnR1YWwgdm9pZCBHZXRDbGllbnRTaXplQ29uc3RyYWludChpbnQgKncsIGlu dCAqaCkgY29uc3QgOw0KICAgIHZpcnR1YWwgdm9pZCBHZXRQb3NpdGlvbkNvbnN0cmFpbnQoaW50 ICp4LCBpbnQgKnkpIGNvbnN0IDsNCg0KDQoNCiAgICB2b2lkIFNldFNpemVyKCB3eFNpemVyICpz aXplciApOw0KICAgIHd4U2l6ZXIgKkdldFNpemVyKCkgY29uc3QgeyByZXR1cm4gbV93aW5kb3dT aXplcjsgfQ0KIyA2NjEgIi4uLy4uL2luY2x1ZGUvd3gvd2luZG93LmgiDQogICAgdm9pZCBPblN5 c0NvbG91ckNoYW5nZWQoIHd4U3lzQ29sb3VyQ2hhbmdlZEV2ZW50JiBldmVudCApOw0KICAgIHZv aWQgT25Jbml0RGlhbG9nKCB3eEluaXREaWFsb2dFdmVudCAmZXZlbnQgKTsNCiAgICB2b2lkIE9u TWlkZGxlQ2xpY2soIHd4TW91c2VFdmVudCYgZXZlbnQgKTsNCg0KDQoNCg0KICAgIHZpcnR1YWwg V1hXaWRnZXQgR2V0SGFuZGxlKCkgY29uc3QgPSAwOw0KDQpwcm90ZWN0ZWQ6DQoNCg0KICAgIHd4 V2luZG93SUQgbV93aW5kb3dJZDsNCg0KDQoNCiAgICB3eFdpbmRvdyAqbV9wYXJlbnQ7DQogICAg d3hXaW5kb3dMaXN0IG1fY2hpbGRyZW47DQoNCg0KDQogICAgaW50IG1fbWluV2lkdGgsIG1fbWlu SGVpZ2h0LCBtX21heFdpZHRoLCBtX21heEhlaWdodDsNCg0KDQoNCiAgICB3eEV2dEhhbmRsZXIg Km1fZXZlbnRIYW5kbGVyOw0KDQoNCg0KICAgIHd4VmFsaWRhdG9yICptX3dpbmRvd1ZhbGlkYXRv cjsNCg0KDQoNCiAgICB3eERyb3BUYXJnZXQgKm1fZHJvcFRhcmdldDsNCg0KDQoNCiAgICB3eEN1 cnNvciBtX2N1cnNvcjsNCiAgICB3eEZvbnQgbV9mb250Ow0KICAgIHd4Q29sb3VyIG1fYmFja2dy b3VuZENvbG91ciwgbV9mb3JlZ3JvdW5kQ29sb3VyOw0KDQoNCiAgICB3eENhcmV0ICptX2NhcmV0 Ow0KDQoNCg0KICAgIHd4UmVnaW9uIG1fdXBkYXRlUmVnaW9uOw0KDQoNCg0KDQogICAgd3hBY2Nl bGVyYXRvclRhYmxlIG1fYWNjZWxlcmF0b3JUYWJsZTsNCg0KDQoNCg0KDQoNCg0KICAgIHVuaW9u DQogICAgew0KICAgICAgICB3eENsaWVudERhdGEgKm1fY2xpZW50T2JqZWN0Ow0KICAgICAgICB2 b2lkICptX2NsaWVudERhdGE7DQogICAgfTsNCg0KDQoNCiAgICB3eFRvb2xUaXAgKm1fdG9vbHRp cDsNCg0KDQoNCg0KDQogICAgd3hMYXlvdXRDb25zdHJhaW50cyAqbV9jb25zdHJhaW50czsNCg0K DQogICAgd3hXaW5kb3dMaXN0ICptX2NvbnN0cmFpbnRzSW52b2x2ZWRJbjsNCg0KDQoNCiAgICB3 eFNpemVyICptX3dpbmRvd1NpemVyOw0KICAgIHd4V2luZG93QmFzZSAqbV9zaXplclBhcmVudDsN Cg0KDQogICAgYm9vbCBtX2F1dG9MYXlvdXQ6MTsNCg0KDQoNCiAgICBib29sIG1faXNTaG93bjox Ow0KICAgIGJvb2wgbV9pc0VuYWJsZWQ6MTsNCiAgICBib29sIG1faXNCZWluZ0RlbGV0ZWQ6MTsN Cg0KDQogICAgbG9uZyBtX3dpbmRvd1N0eWxlLA0KICAgICAgICAgICAgICAgICAgICAgICAgIG1f ZXhTdHlsZTsNCiAgICB3eFN0cmluZyBtX3dpbmRvd05hbWU7DQoNCnByb3RlY3RlZDoNCg0KDQog ICAgdm9pZCBJbml0QmFzZSgpOw0KDQoNCg0KICAgIHN0YXRpYyBpbnQgV2lkdGhEZWZhdWx0KGlu dCB3KSB7IHJldHVybiB3ID09IC0xID8gMjAgOiB3OyB9DQogICAgc3RhdGljIGludCBIZWlnaHRE ZWZhdWx0KGludCBoKSB7IHJldHVybiBoID09IC0xID8gMjAgOiBoOyB9DQoNCg0KDQoNCg0KDQoN CiAgICB2b2lkIFNldFNpemVPckRlZmF1bHQoY29uc3Qgd3hTaXplJiBzaXplID0gd3hEZWZhdWx0 U2l6ZSkNCiAgICB7DQogICAgICAgIGlmICggc2l6ZS54ID09IC0xIHx8IHNpemUueSA9PSAtMSAp DQogICAgICAgIHsNCiAgICAgICAgICAgIHd4U2l6ZSBzaXplRGVmID0gR2V0QmVzdFNpemUoKTsN CiAgICAgICAgICAgIFNldFNpemUoIHNpemUueCA9PSAtMSA/IHNpemVEZWYueCA6IHNpemUueCwN CiAgICAgICAgICAgICAgICAgICAgIHNpemUueSA9PSAtMSA/IHNpemVEZWYueSA6IHNpemUueSk7 DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICBTZXRTaXpl KHNpemUpOw0KICAgICAgICB9DQogICAgfQ0KIyA4MDEgIi4uLy4uL2luY2x1ZGUvd3gvd2luZG93 LmgiDQogICAgdmlydHVhbCB2b2lkIERvQ2xpZW50VG9TY3JlZW4oIGludCAqeCwgaW50ICp5ICkg Y29uc3QgPSAwOw0KICAgIHZpcnR1YWwgdm9pZCBEb1NjcmVlblRvQ2xpZW50KCBpbnQgKngsIGlu dCAqeSApIGNvbnN0ID0gMDsNCg0KDQogICAgdmlydHVhbCB2b2lkIERvR2V0UG9zaXRpb24oIGlu dCAqeCwgaW50ICp5ICkgY29uc3QgPSAwOw0KICAgIHZpcnR1YWwgdm9pZCBEb0dldFNpemUoIGlu dCAqd2lkdGgsIGludCAqaGVpZ2h0ICkgY29uc3QgPSAwOw0KICAgIHZpcnR1YWwgdm9pZCBEb0dl dENsaWVudFNpemUoIGludCAqd2lkdGgsIGludCAqaGVpZ2h0ICkgY29uc3QgPSAwOw0KDQoNCg0K DQogICAgdmlydHVhbCB3eFNpemUgRG9HZXRCZXN0U2l6ZSgpIGNvbnN0Ow0KDQoNCg0KDQogICAg dmlydHVhbCB2b2lkIERvU2V0U2l6ZShpbnQgeCwgaW50IHksDQogICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsDQogICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgc2l6ZUZsYWdzID0gKDB4MDAwMXwweDAwMDIpKSA9IDA7DQoNCg0KICAgIHZpcnR1YWwg dm9pZCBEb1NldENsaWVudFNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSA9IDA7DQoNCg0KDQoN Cg0KICAgIHZpcnR1YWwgdm9pZCBEb01vdmVXaW5kb3coaW50IHgsIGludCB5LCBpbnQgd2lkdGgs IGludCBoZWlnaHQpID0gMDsNCg0KDQogICAgdmlydHVhbCB2b2lkIERvU2V0VG9vbFRpcCggd3hU b29sVGlwICp0aXAgKTsNCg0KDQogICAgdmlydHVhbCBib29sIERvUG9wdXBNZW51KCB3eE1lbnUg Km1lbnUsIGludCB4LCBpbnQgeSApID0gMDsNCg0KDQogICAgdmlydHVhbCB2b2lkIERvU2V0Q2xp ZW50T2JqZWN0KCB3eENsaWVudERhdGEgKmRhdGEgKTsNCiAgICB2aXJ0dWFsIHd4Q2xpZW50RGF0 YSAqRG9HZXRDbGllbnRPYmplY3QoKSBjb25zdDsNCg0KICAgIHZpcnR1YWwgdm9pZCBEb1NldENs aWVudERhdGEoIHZvaWQgKmRhdGEgKTsNCiAgICB2aXJ0dWFsIHZvaWQgKkRvR2V0Q2xpZW50RGF0 YSgpIGNvbnN0Ow0KDQoNCiAgICBlbnVtIHd4Q2xpZW50RGF0YVR5cGUNCiAgICB7DQogICAgICAg IENsaWVudERhdGFfTm9uZSwNCiAgICAgICAgQ2xpZW50RGF0YV9PYmplY3QsDQogICAgICAgIENs aWVudERhdGFfVm9pZA0KICAgIH0gbV9jbGllbnREYXRhVHlwZTsNCg0KcHJpdmF0ZToNCg0KICAg IHN0YXRpYyBpbnQgbXNfbGFzdENvbnRyb2xJZDsNCg0KICAgIHByaXZhdGU6IHd4V2luZG93QmFz ZShjb25zdCB3eFdpbmRvd0Jhc2UmKTsgd3hXaW5kb3dCYXNlJiBvcGVyYXRvcj0oY29uc3Qgd3hX aW5kb3dCYXNlJik7DQogICAgcHJpdmF0ZTogc3RhdGljIGNvbnN0IHd4RXZlbnRUYWJsZUVudHJ5 IHNtX2V2ZW50VGFibGVFbnRyaWVzW107cHJvdGVjdGVkOiBzdGF0aWMgY29uc3Qgd3hFdmVudFRh YmxlIHNtX2V2ZW50VGFibGU7IHZpcnR1YWwgY29uc3Qgd3hFdmVudFRhYmxlKiBHZXRFdmVudFRh YmxlKCkgY29uc3Q7DQp9Ow0KDQoNCg0KDQoNCg0KIyAxICIuLi8uLi9pbmNsdWRlL3d4L21zdy93 aW5kb3cuaCIgMQ0KIyAyMCAiLi4vLi4vaW5jbHVkZS93eC9tc3cvd2luZG93LmgiDQojcHJhZ21h IGludGVyZmFjZSAid2luZG93LmgiDQojIDM2ICIuLi8uLi9pbmNsdWRlL3d4L21zdy93aW5kb3cu aCINCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4QnV0dG9uOw0KDQoNCg0KDQoN Cg0KZW51bQ0Kew0KICAgIHd4S0VZX1NISUZUID0gMSwNCiAgICB3eEtFWV9DVFJMID0gMg0KfTsN Cg0KDQoNCg0KDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eFdpbmRvdyA6IHB1 YmxpYyB3eFdpbmRvd0Jhc2UNCnsNCnB1YmxpYzoNCiAgICB3eFdpbmRvdygpIHsgSW5pdCgpOyB9 DQoNCiAgICB3eFdpbmRvdyh3eFdpbmRvdyAqcGFyZW50LA0KICAgICAgICAgICAgIHd4V2luZG93 SUQgaWQsDQogICAgICAgICAgICAgY29uc3Qgd3hQb2ludCYgcG9zID0gd3hEZWZhdWx0UG9zaXRp b24sDQogICAgICAgICAgICAgY29uc3Qgd3hTaXplJiBzaXplID0gd3hEZWZhdWx0U2l6ZSwNCiAg ICAgICAgICAgICBsb25nIHN0eWxlID0gMCwNCiAgICAgICAgICAgICBjb25zdCB3eFN0cmluZyYg bmFtZSA9IHd4UGFuZWxOYW1lU3RyKQ0KICAgIHsNCiAgICAgICAgSW5pdCgpOw0KICAgICAgICBD cmVhdGUocGFyZW50LCBpZCwgcG9zLCBzaXplLCBzdHlsZSwgbmFtZSk7DQogICAgfQ0KDQogICAg dmlydHVhbCB+d3hXaW5kb3coKTsNCg0KICAgIGJvb2wgQ3JlYXRlKHd4V2luZG93ICpwYXJlbnQs DQogICAgICAgICAgICAgICAgd3hXaW5kb3dJRCBpZCwNCiAgICAgICAgICAgICAgICBjb25zdCB3 eFBvaW50JiBwb3MgPSB3eERlZmF1bHRQb3NpdGlvbiwNCiAgICAgICAgICAgICAgICBjb25zdCB3 eFNpemUmIHNpemUgPSB3eERlZmF1bHRTaXplLA0KICAgICAgICAgICAgICAgIGxvbmcgc3R5bGUg PSAwLA0KICAgICAgICAgICAgICAgIGNvbnN0IHd4U3RyaW5nJiBuYW1lID0gd3hQYW5lbE5hbWVT dHIpOw0KDQoNCiAgICB2aXJ0dWFsIHZvaWQgU2V0VGl0bGUoIGNvbnN0IHd4U3RyaW5nJiB0aXRs ZSk7DQogICAgdmlydHVhbCB3eFN0cmluZyBHZXRUaXRsZSgpIGNvbnN0Ow0KDQogICAgdmlydHVh bCB2b2lkIFJhaXNlKCk7DQogICAgdmlydHVhbCB2b2lkIExvd2VyKCk7DQoNCiAgICB2aXJ0dWFs IGJvb2wgU2hvdyggYm9vbCBzaG93ID0gMSApOw0KICAgIHZpcnR1YWwgYm9vbCBFbmFibGUoIGJv b2wgZW5hYmxlID0gMSApOw0KDQogICAgdmlydHVhbCB2b2lkIFNldEZvY3VzKCk7DQoNCiAgICB2 aXJ0dWFsIGJvb2wgUmVwYXJlbnQoIHd4V2luZG93ICpuZXdQYXJlbnQgKTsNCg0KICAgIHZpcnR1 YWwgdm9pZCBXYXJwUG9pbnRlcihpbnQgeCwgaW50IHkpOw0KICAgIHZpcnR1YWwgdm9pZCBDYXB0 dXJlTW91c2UoKTsNCiAgICB2aXJ0dWFsIHZvaWQgUmVsZWFzZU1vdXNlKCk7DQoNCiAgICB2aXJ0 dWFsIHZvaWQgUmVmcmVzaCggYm9vbCBlcmFzZUJhY2tncm91bmQgPSAxLA0KICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCB3eFJlY3QgKnJlY3QgPSAoY29uc3Qgd3hSZWN0ICopIF9fbnVs bCApOw0KICAgIHZpcnR1YWwgdm9pZCBDbGVhcigpOw0KDQogICAgdmlydHVhbCBib29sIFNldEN1 cnNvciggY29uc3Qgd3hDdXJzb3IgJmN1cnNvciApOw0KICAgIHZpcnR1YWwgYm9vbCBTZXRGb250 KCBjb25zdCB3eEZvbnQgJmZvbnQgKTsNCg0KICAgIHZpcnR1YWwgaW50IEdldENoYXJIZWlnaHQo KSBjb25zdDsNCiAgICB2aXJ0dWFsIGludCBHZXRDaGFyV2lkdGgoKSBjb25zdDsNCiAgICB2aXJ0 dWFsIHZvaWQgR2V0VGV4dEV4dGVudChjb25zdCB3eFN0cmluZyYgc3RyaW5nLA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCAqeCwgaW50ICp5LA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCAqZGVzY2VudCA9IChpbnQgKikgX19udWxsLA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCAqZXh0ZXJuYWxMZWFkaW5nID0gKGludCAqKSBfX251bGws DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd3hGb250ICp0aGVGb250ID0g KGNvbnN0IHd4Rm9udCAqKSBfX251bGwpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3Q7DQoNCiAgICB2aXJ0dWFsIGJvb2wgRG9Qb3B1cE1lbnUoIHd4TWVudSAqbWVudSwgaW50 IHgsIGludCB5ICk7DQoNCiAgICB2aXJ0dWFsIHZvaWQgU2V0U2Nyb2xsYmFyKCBpbnQgb3JpZW50 LCBpbnQgcG9zLCBpbnQgdGh1bWJWaXNpYmxlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCByYW5nZSwgYm9vbCByZWZyZXNoID0gMSApOw0KICAgIHZpcnR1YWwgdm9pZCBTZXRT Y3JvbGxQb3MoIGludCBvcmllbnQsIGludCBwb3MsIGJvb2wgcmVmcmVzaCA9IDEgKTsNCiAgICB2 aXJ0dWFsIGludCBHZXRTY3JvbGxQb3MoIGludCBvcmllbnQgKSBjb25zdDsNCiAgICB2aXJ0dWFs IGludCBHZXRTY3JvbGxUaHVtYiggaW50IG9yaWVudCApIGNvbnN0Ow0KICAgIHZpcnR1YWwgaW50 IEdldFNjcm9sbFJhbmdlKCBpbnQgb3JpZW50ICkgY29uc3Q7DQogICAgdmlydHVhbCB2b2lkIFNj cm9sbFdpbmRvdyggaW50IGR4LCBpbnQgZHksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3Qgd3hSZWN0KiByZWN0ID0gKHd4UmVjdCAqKSBfX251bGwgKTsNCg0KDQogICAgdmly dHVhbCB2b2lkIFNldERyb3BUYXJnZXQoIHd4RHJvcFRhcmdldCAqZHJvcFRhcmdldCApOw0KDQoN Cg0KICAgIHZpcnR1YWwgdm9pZCBEcmFnQWNjZXB0RmlsZXMoYm9vbCBhY2NlcHQpOw0KIyAxNTkg Ii4uLy4uL2luY2x1ZGUvd3gvbXN3L3dpbmRvdy5oIg0KICAgIHZpcnR1YWwgYm9vbCBMb2FkTmF0 aXZlRGlhbG9nKHd4V2luZG93KiBwYXJlbnQsIHd4V2luZG93SUQmIGlkKTsNCiAgICB2aXJ0dWFs IGJvb2wgTG9hZE5hdGl2ZURpYWxvZyh3eFdpbmRvdyogcGFyZW50LCBjb25zdCB3eFN0cmluZyYg bmFtZSk7DQogICAgd3hXaW5kb3cqIEdldFdpbmRvd0NoaWxkMSh3eFdpbmRvd0lEIGlkKTsNCiAg ICB3eFdpbmRvdyogR2V0V2luZG93Q2hpbGQod3hXaW5kb3dJRCBpZCk7DQoNCg0KDQogICAgdm9p ZCBTZW5kU2l6ZUV2ZW50KCk7DQoNCg0KDQoNCg0KDQoNCiAgICBXWEhXTkQgR2V0SFdORCgpIGNv bnN0IHsgcmV0dXJuIG1faFduZDsgfQ0KICAgIHZvaWQgU2V0SFdORChXWEhXTkQgaFduZCkgeyBt X2hXbmQgPSBoV25kOyB9DQogICAgdmlydHVhbCBXWFdpZGdldCBHZXRIYW5kbGUoKSBjb25zdCB7 IHJldHVybiBHZXRIV05EKCk7IH0NCg0KICAgIGJvb2wgR2V0VXNlQ3RsM0QoKSBjb25zdCB7IHJl dHVybiBtX3VzZUN0bDNEOyB9DQogICAgYm9vbCBHZXRUcmFuc3BhcmVudEJhY2tncm91bmQoKSBj b25zdCB7IHJldHVybiBtX2JhY2tncm91bmRUcmFuc3BhcmVudDsgfQ0KICAgIHZvaWQgU2V0VHJh bnNwYXJlbnQoYm9vbCB0ID0gMSkgeyBtX2JhY2tncm91bmRUcmFuc3BhcmVudCA9IHQ7IH0NCg0K DQoNCg0KICAgIHZvaWQgT25TZXRGb2N1cyh3eEZvY3VzRXZlbnQmIGV2ZW50KTsNCiAgICB2b2lk IE9uRXJhc2VCYWNrZ3JvdW5kKHd4RXJhc2VFdmVudCYgZXZlbnQpOw0KICAgIHZvaWQgT25JZGxl KHd4SWRsZUV2ZW50JiBldmVudCk7DQoNCnB1YmxpYzoNCg0KDQogICAgdmlydHVhbCB3eFBvaW50 IEdldENsaWVudEFyZWFPcmlnaW4oKSBjb25zdDsNCg0KDQoNCiAgICB2aXJ0dWFsIHZvaWQgQWRq dXN0Rm9yUGFyZW50Q2xpZW50T3JpZ2luKGludCYgeCwgaW50JiB5LCBpbnQgc2l6ZUZsYWdzKTsN Cg0KDQogICAgdm9pZCBTdWJjbGFzc1dpbihXWEhXTkQgaFduZCk7DQogICAgdm9pZCBVbnN1YmNs YXNzV2luKCk7DQoNCiAgICBXWEZBUlBST0MgTVNXR2V0T2xkV25kUHJvYygpIGNvbnN0IHsgcmV0 dXJuIG1fb2xkV25kUHJvYzsgfQ0KICAgIHZvaWQgTVNXU2V0T2xkV25kUHJvYyhXWEZBUlBST0Mg cHJvYykgeyBtX29sZFduZFByb2MgPSBwcm9jOyB9DQoNCiAgICB3eFdpbmRvdyAqRmluZEl0ZW0o bG9uZyBpZCkgY29uc3Q7DQogICAgd3hXaW5kb3cgKkZpbmRJdGVtQnlIV05EKFdYSFdORCBoV25k LCBib29sIGNvbnRyb2xPbmx5ID0gMCkgY29uc3Q7DQoNCg0KICAgIHN0YXRpYyBXWERXT1JEIE1h a2VFeHRlbmRlZFN0eWxlKGxvbmcgc3R5bGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYm9vbCBlbGltaW5hdGVCb3JkZXJzID0gMSk7DQoNCiAgICBXWERXT1JEIERldGVy bWluZTNERWZmZWN0cyhXWERXT1JEIGRlZmF1bHRCb3JkZXJTdHlsZSwgYm9vbCAqd2FudDNEKSBj b25zdDsNCg0KDQogICAgdmlydHVhbCBib29sIENvbnRhaW5zSFdORChXWEhXTkQgKSBjb25zdCB7 IHJldHVybiAwOyB9Ow0KDQoNCiAgICBib29sIE1TV0NyZWF0ZShpbnQgaWQsDQogICAgICAgICAg ICAgICAgICAgd3hXaW5kb3cgKnBhcmVudCwNCiAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy ICp3Y2xhc3MsDQogICAgICAgICAgICAgICAgICAgd3hXaW5kb3cgKnd4X3dpbiwNCiAgICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyICp0aXRsZSwNCiAgICAgICAgICAgICAgICAgICBpbnQgeCwg aW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwNCiAgICAgICAgICAgICAgICAgICBXWERXT1JE IHN0eWxlLA0KICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRpYWxvZ190ZW1wbGF0ZSA9 IF9fbnVsbCwNCiAgICAgICAgICAgICAgICAgICBXWERXT1JEIGV4ZW5kZWRTdHlsZSA9IDApOw0K ICAgIHZpcnR1YWwgYm9vbCBNU1dDb21tYW5kKFdYVUlOVCBwYXJhbSwgV1hXT1JEIGlkKTsNCg0K DQoNCg0KDQoNCg0KICAgIHZpcnR1YWwgd3hXaW5kb3cqIENyZWF0ZVdpbmRvd0Zyb21IV05EKHd4 V2luZG93KiBwYXJlbnQsIFdYSFdORCBoV25kKTsNCg0KDQogICAgdmlydHVhbCB2b2lkIEFkb3B0 QXR0cmlidXRlc0Zyb21IV05EKCk7DQoNCg0KICAgIHZpcnR1YWwgdm9pZCBTZXR1cENvbG91cnMo KTsNCg0KDQoNCg0KDQoNCg0KICAgIHZvaWQgVW5wYWNrQ29tbWFuZChXWFdQQVJBTSB3UGFyYW0s IFdYTFBBUkFNIGxQYXJhbSwNCiAgICAgICAgICAgICAgICAgICAgICAgV1hXT1JEICppZCwgV1hI V05EICpod25kLCBXWFdPUkQgKmNtZCk7DQogICAgdm9pZCBVbnBhY2tBY3RpdmF0ZShXWFdQQVJB TSB3UGFyYW0sIFdYTFBBUkFNIGxQYXJhbSwNCiAgICAgICAgICAgICAgICAgICAgICAgIFdYV09S RCAqc3RhdGUsIFdYV09SRCAqbWluaW1pemVkLCBXWEhXTkQgKmh3bmQpOw0KICAgIHZvaWQgVW5w YWNrU2Nyb2xsKFdYV1BBUkFNIHdQYXJhbSwgV1hMUEFSQU0gbFBhcmFtLA0KICAgICAgICAgICAg ICAgICAgICAgIFdYV09SRCAqY29kZSwgV1hXT1JEICpwb3MsIFdYSFdORCAqaHduZCk7DQogICAg dm9pZCBVbnBhY2tDdGxDb2xvcihXWFdQQVJBTSB3UGFyYW0sIFdYTFBBUkFNIGxQYXJhbSwNCiAg ICAgICAgICAgICAgICAgICAgICAgIFdYV09SRCAqbkN0bENvbG9yLCBXWEhEQyAqaGRjLCBXWEhX TkQgKmh3bmQpOw0KICAgIHZvaWQgVW5wYWNrTWVudVNlbGVjdChXWFdQQVJBTSB3UGFyYW0sIFdY TFBBUkFNIGxQYXJhbSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgV1hXT1JEICppdGVtLCBX WFdPUkQgKmZsYWdzLCBXWEhNRU5VICpobWVudSk7DQojIDI3MyAiLi4vLi4vaW5jbHVkZS93eC9t c3cvd2luZG93LmgiDQogICAgdmlydHVhbCBib29sIE1TV09uU2Nyb2xsKGludCBvcmllbnRhdGlv biwgV1hXT1JEIG5TQkNvZGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdYV09SRCBw b3MsIFdYSFdORCBjb250cm9sKTsNCg0KDQoNCiAgICB2aXJ0dWFsIGJvb2wgTVNXT25Ob3RpZnko aW50IGlkQ3RybCwgV1hMUEFSQU0gbFBhcmFtLCBXWExQQVJBTSAqcmVzdWx0KTsNCg0KDQoNCiAg ICB2aXJ0dWFsIGJvb2wgTVNXT25EcmF3SXRlbShpbnQgaWQsIFdYRFJBV0lURU1TVFJVQ1QgKml0 ZW0pOw0KICAgIHZpcnR1YWwgYm9vbCBNU1dPbk1lYXN1cmVJdGVtKGludCBpZCwgV1hNRUFTVVJF SVRFTVNUUlVDVCAqaXRlbSk7DQoNCg0KICAgIGJvb2wgSGFuZGxlQ3JlYXRlKFdYTFBDUkVBVEVT VFJVQ1QgY3MsIGJvb2wgKm1heUNyZWF0ZSk7DQogICAgYm9vbCBIYW5kbGVJbml0RGlhbG9nKFdY SFdORCBoV25kRm9jdXMpOw0KICAgIGJvb2wgSGFuZGxlRGVzdHJveSgpOw0KDQogICAgYm9vbCBI YW5kbGVQYWludCgpOw0KICAgIGJvb2wgSGFuZGxlRXJhc2VCa2duZChXWEhEQyBwREMpOw0KDQog ICAgYm9vbCBIYW5kbGVNaW5pbWl6ZSgpOw0KICAgIGJvb2wgSGFuZGxlTWF4aW1pemUoKTsNCiAg ICBib29sIEhhbmRsZVNpemUoaW50IHgsIGludCB5LCBXWFVJTlQgZmxhZyk7DQogICAgYm9vbCBI YW5kbGVHZXRNaW5NYXhJbmZvKHZvaWQgKm1tSW5mbyk7DQoNCiAgICBib29sIEhhbmRsZVNob3co Ym9vbCBzaG93LCBpbnQgc3RhdHVzKTsNCiAgICBib29sIEhhbmRsZUFjdGl2YXRlKGludCBmbGFn LCBib29sIG1pbmltaXplZCwgV1hIV05EIGFjdGl2YXRlKTsNCg0KICAgIGJvb2wgSGFuZGxlQ29t bWFuZChXWFdPUkQgaWQsIFdYV09SRCBjbWQsIFdYSFdORCBjb250cm9sKTsNCiAgICBib29sIEhh bmRsZVN5c0NvbW1hbmQoV1hXUEFSQU0gd1BhcmFtLCBXWExQQVJBTSBsUGFyYW0pOw0KDQogICAg Ym9vbCBIYW5kbGVDdGxDb2xvcihXWEhCUlVTSCAqaEJydXNoLA0KICAgICAgICAgICAgICAgICAg ICAgICAgV1hIREMgaGRjLA0KICAgICAgICAgICAgICAgICAgICAgICAgV1hIV05EIGhXbmQsDQog ICAgICAgICAgICAgICAgICAgICAgICBXWFVJTlQgbkN0bENvbG9yLA0KICAgICAgICAgICAgICAg ICAgICAgICAgV1hVSU5UIG1lc3NhZ2UsDQogICAgICAgICAgICAgICAgICAgICAgICBXWFdQQVJB TSB3UGFyYW0sDQogICAgICAgICAgICAgICAgICAgICAgICBXWExQQVJBTSBsUGFyYW0pOw0KDQog ICAgYm9vbCBIYW5kbGVQYWxldHRlQ2hhbmdlZChXWEhXTkQgaFduZFBhbENoYW5nZSk7DQogICAg Ym9vbCBIYW5kbGVRdWVyeU5ld1BhbGV0dGUoKTsNCiAgICBib29sIEhhbmRsZVN5c0NvbG9yQ2hh bmdlKCk7DQoNCiAgICBib29sIEhhbmRsZVF1ZXJ5RW5kU2Vzc2lvbihsb25nIGxvZ09mZiwgYm9v bCAqbWF5RW5kKTsNCiAgICBib29sIEhhbmRsZUVuZFNlc3Npb24oYm9vbCBlbmRTZXNzaW9uLCBs b25nIGxvZ09mZik7DQoNCiAgICBib29sIEhhbmRsZVNldEZvY3VzKFdYSFdORCB3bmQpOw0KICAg IGJvb2wgSGFuZGxlS2lsbEZvY3VzKFdYSFdORCB3bmQpOw0KDQogICAgYm9vbCBIYW5kbGVEcm9w RmlsZXMoV1hXUEFSQU0gd1BhcmFtKTsNCg0KICAgIGJvb2wgSGFuZGxlTW91c2VFdmVudChXWFVJ TlQgbXNnLCBpbnQgeCwgaW50IHksIFdYVUlOVCBmbGFncyk7DQogICAgYm9vbCBIYW5kbGVNb3Vz ZU1vdmUoaW50IHgsIGludCB5LCBXWFVJTlQgZmxhZ3MpOw0KDQogICAgYm9vbCBIYW5kbGVDaGFy KFdYV09SRCB3UGFyYW0sIFdYTFBBUkFNIGxQYXJhbSwgYm9vbCBpc0FTQ0lJID0gMCk7DQogICAg Ym9vbCBIYW5kbGVLZXlEb3duKFdYV09SRCB3UGFyYW0sIFdYTFBBUkFNIGxQYXJhbSk7DQogICAg Ym9vbCBIYW5kbGVLZXlVcChXWFdPUkQgd1BhcmFtLCBXWExQQVJBTSBsUGFyYW0pOw0KDQogICAg Ym9vbCBIYW5kbGVRdWVyeURyYWdJY29uKFdYSElDT04gKmhJY29uKTsNCg0KICAgIGJvb2wgSGFu ZGxlU2V0Q3Vyc29yKFdYSFdORCBoV25kLCBzaG9ydCBuSGl0VGVzdCwgaW50IG1vdXNlTXNnKTsN Cg0KDQogICAgdmlydHVhbCBsb25nIE1TV1dpbmRvd1Byb2MoV1hVSU5UIG5Nc2csIFdYV1BBUkFN IHdQYXJhbSwgV1hMUEFSQU0gbFBhcmFtKTsNCg0KDQogICAgdmlydHVhbCBsb25nIE1TV0RlZldp bmRvd1Byb2MoV1hVSU5UIG5Nc2csIFdYV1BBUkFNIHdQYXJhbSwgV1hMUEFSQU0gbFBhcmFtKTsN CiAgICB2aXJ0dWFsIGJvb2wgTVNXUHJvY2Vzc01lc3NhZ2UoV1hNU0cqIHBNc2cpOw0KICAgIHZp cnR1YWwgYm9vbCBNU1dUcmFuc2xhdGVNZXNzYWdlKFdYTVNHKiBwTXNnKTsNCiAgICB2aXJ0dWFs IHZvaWQgTVNXRGVzdHJveVdpbmRvdygpOw0KDQoNCiAgICB2b2lkIE1TV0RldGFjaFdpbmRvd01l bnUoKTsNCg0KDQoNCiAgICB2aXJ0dWFsIFdYSEJSVVNIIE9uQ3RsQ29sb3IoV1hIREMgaERDLA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXWEhXTkQgaFduZCwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgV1hVSU5UIG5DdGxDb2xvciwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgV1hVSU5UIG1lc3NhZ2UsDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFdYV1BBUkFNIHdQYXJhbSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg V1hMUEFSQU0gbFBhcmFtKTsNCg0KDQoNCg0KDQoNCg0KICAgIHZvaWQgT25TeXNDb2xvdXJDaGFu Z2VkKHd4U3lzQ29sb3VyQ2hhbmdlZEV2ZW50JiBldmVudCk7DQoNCg0KICAgIHZvaWQgSW5pdE1v dXNlRXZlbnQod3hNb3VzZUV2ZW50JiBldmVudCwgaW50IHgsIGludCB5LCBXWFVJTlQgZmxhZ3Mp Ow0KDQpwcm90ZWN0ZWQ6DQoNCiAgICBXWEhXTkQgbV9oV25kOw0KDQoNCiAgICBXWEZBUlBST0Mg bV9vbGRXbmRQcm9jOw0KDQoNCiAgICBib29sIG1fdXNlQ3RsM0Q6MTsNCiAgICBib29sIG1fYmFj a2dyb3VuZFRyYW5zcGFyZW50OjE7DQogICAgYm9vbCBtX21vdXNlSW5XaW5kb3c6MTsNCiAgICBi b29sIG1fZG91YmxlQ2xpY2tBbGxvd2VkOjE7DQogICAgYm9vbCBtX3dpbkNhcHR1cmVkOjE7DQoN Cg0KICAgIGludCBtX3hUaHVtYlNpemU7DQogICAgaW50IG1feVRodW1iU2l6ZTsNCiMgMzkyICIu Li8uLi9pbmNsdWRlL3d4L21zdy93aW5kb3cuaCINCiAgICBXWEhNRU5VIG1faE1lbnU7DQoNCg0K ICAgIGxvbmcgbV9sRGxnQ29kZTsNCg0KDQogICAgdmlydHVhbCB2b2lkIERvQ2xpZW50VG9TY3Jl ZW4oIGludCAqeCwgaW50ICp5ICkgY29uc3Q7DQogICAgdmlydHVhbCB2b2lkIERvU2NyZWVuVG9D bGllbnQoIGludCAqeCwgaW50ICp5ICkgY29uc3Q7DQogICAgdmlydHVhbCB2b2lkIERvR2V0UG9z aXRpb24oIGludCAqeCwgaW50ICp5ICkgY29uc3Q7DQogICAgdmlydHVhbCB2b2lkIERvR2V0U2l6 ZSggaW50ICp3aWR0aCwgaW50ICpoZWlnaHQgKSBjb25zdDsNCiAgICB2aXJ0dWFsIHZvaWQgRG9H ZXRDbGllbnRTaXplKCBpbnQgKndpZHRoLCBpbnQgKmhlaWdodCApIGNvbnN0Ow0KICAgIHZpcnR1 YWwgdm9pZCBEb1NldFNpemUoaW50IHgsIGludCB5LA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IHNpemVGbGFncyA9ICgweDAwMDF8MHgwMDAyKSk7DQogICAgdmlydHVhbCB2b2lkIERvU2V0Q2xp ZW50U2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOw0KDQoNCg0KDQoNCiAgICB2aXJ0dWFsIHZv aWQgRG9Nb3ZlV2luZG93KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsNCg0K DQogICAgdmlydHVhbCB2b2lkIERvU2V0VG9vbFRpcCggd3hUb29sVGlwICp0aXAgKTsNCg0KDQpw cml2YXRlOg0KDQogICAgdm9pZCBJbml0KCk7DQoNCg0KICAgIGJvb2wgSGFuZGxlTW92ZShpbnQg eCwgaW50IHkpOw0KICAgIGJvb2wgSGFuZGxlSm95c3RpY2tFdmVudChXWFVJTlQgbXNnLCBpbnQg eCwgaW50IHksIFdYVUlOVCBmbGFncyk7DQoNCg0KICAgIGJvb2wgSGFuZGxlTm90aWZ5KGludCBp ZEN0cmwsIFdYTFBBUkFNIGxQYXJhbSwgV1hMUEFSQU0gKnJlc3VsdCk7DQoNCg0KDQogICAgd3hL ZXlFdmVudCBDcmVhdGVLZXlFdmVudCh3eEV2ZW50VHlwZSBldlR5cGUsIGludCBpZCwgV1hMUEFS QU0gbHApIGNvbnN0Ow0KDQogICAgcHVibGljOiBzdGF0aWMgd3hDbGFzc0luZm8gc21fY2xhc3N3 eFdpbmRvdzsgd3hDbGFzc0luZm8gKkdldENsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZ3eFdp bmRvdzo6c21fY2xhc3N3eFdpbmRvdzsgfTsNCiAgICBwcml2YXRlOiB3eFdpbmRvdyhjb25zdCB3 eFdpbmRvdyYpOyB3eFdpbmRvdyYgb3BlcmF0b3I9KGNvbnN0IHd4V2luZG93Jik7DQogICAgcHJp dmF0ZTogc3RhdGljIGNvbnN0IHd4RXZlbnRUYWJsZUVudHJ5IHNtX2V2ZW50VGFibGVFbnRyaWVz W107cHJvdGVjdGVkOiBzdGF0aWMgY29uc3Qgd3hFdmVudFRhYmxlIHNtX2V2ZW50VGFibGU7IHZp cnR1YWwgY29uc3Qgd3hFdmVudFRhYmxlKiBHZXRFdmVudFRhYmxlKCkgY29uc3Q7DQp9Ow0KDQoN Cg0KDQoNCg0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgaW50IHd4Q2hhckNvZGVNU1dUb1dY KGludCBrZXlTeW0pOw0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgaW50IHd4Q2hhckNvZGVX WFRvTVNXKGludCBpZCwgYm9vbCAqSXNWaXJ0dWFsKTsNCiMgODY1ICIuLi8uLi9pbmNsdWRlL3d4 L3dpbmRvdy5oIiAyDQojIDg4MiAiLi4vLi4vaW5jbHVkZS93eC93aW5kb3cuaCINCmlubGluZSB3 eFdpbmRvdyAqd3hXaW5kb3dCYXNlOjpHZXRHcmFuZFBhcmVudCgpIGNvbnN0DQp7DQogICAgcmV0 dXJuIG1fcGFyZW50ID8gbV9wYXJlbnQtPkdldFBhcmVudCgpIDogKHd4V2luZG93ICopX19udWxs Ow0KfQ0KDQoNCg0KDQoNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGV4dGVybiB3eFdpbmRv dyogd3hHZXRBY3RpdmVXaW5kb3coKTsNCg0KDQppbmxpbmUgX19hdHRyaWJ1dGVfXygoZGxsaW1w b3J0KSkgaW50IE5ld0NvbnRyb2xJZCgpIHsgcmV0dXJuIHd4V2luZG93QmFzZTo6TmV3Q29udHJv bElkKCk7IH0NCiMgNDIgIi4uLy4uL2luY2x1ZGUvd3gvYXBwLmgiIDINCiMgNTIgIi4uLy4uL2lu Y2x1ZGUvd3gvYXBwLmgiDQpzdGF0aWMgY29uc3QgaW50IHd4UFJJTlRfV0lORE9XUyA9IDE7DQpz dGF0aWMgY29uc3QgaW50IHd4UFJJTlRfUE9TVFNDUklQVCA9IDI7DQoNCg0KDQoNCg0KY2xhc3Mg X19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hBcHBCYXNlIDogcHVibGljIHd4RXZ0SGFuZGxl cg0Kew0KcHVibGljOg0KIyA3MSAiLi4vLi4vaW5jbHVkZS93eC9hcHAuaCINCiAgICB2aXJ0dWFs IGJvb2wgT25Jbml0KCkgeyByZXR1cm4gMDsgfTsNCiMgODEgIi4uLy4uL2luY2x1ZGUvd3gvYXBw LmgiDQogICAgdmlydHVhbCBib29sIE9uSW5pdEd1aSgpIHsgcmV0dXJuIDE7IH0NCiMgOTIgIi4u Ly4uL2luY2x1ZGUvd3gvYXBwLmgiDQogICAgdmlydHVhbCBpbnQgT25SdW4oKSB7IHJldHVybiBN YWluTG9vcCgpOyB9Ow0KIyAxMDMgIi4uLy4uL2luY2x1ZGUvd3gvYXBwLmgiDQogICAgdmlydHVh bCBpbnQgT25FeGl0KCk7DQojIDExMyAiLi4vLi4vaW5jbHVkZS93eC9hcHAuaCINCiAgICB2aXJ0 dWFsIHZvaWQgT25GYXRhbEV4Y2VwdGlvbigpIHsgfQ0KDQoNCg0KDQoNCg0KICAgIHZpcnR1YWwg aW50IE1haW5Mb29wKCkgPSAwOw0KDQoNCg0KICAgIHZpcnR1YWwgdm9pZCBFeGl0TWFpbkxvb3Ao KSA9IDA7DQoNCg0KICAgIHZpcnR1YWwgYm9vbCBJbml0aWFsaXplZCgpID0gMDsNCg0KDQogICAg dmlydHVhbCBib29sIFBlbmRpbmcoKSA9IDA7DQoNCg0KDQogICAgdmlydHVhbCB2b2lkIERpc3Bh dGNoKCkgPSAwOw0KIyAxNDUgIi4uLy4uL2luY2x1ZGUvd3gvYXBwLmgiDQogICAgd3hTdHJpbmcg R2V0QXBwTmFtZSgpIGNvbnN0DQogICAgew0KICAgICAgICBpZiAoICFtX2FwcE5hbWUgKQ0KICAg ICAgICAgICAgcmV0dXJuIG1fY2xhc3NOYW1lOw0KICAgICAgICBlbHNlDQogICAgICAgICAgICBy ZXR1cm4gbV9hcHBOYW1lOw0KICAgIH0NCiAgICB2b2lkIFNldEFwcE5hbWUoY29uc3Qgd3hTdHJp bmcmIG5hbWUpIHsgbV9hcHBOYW1lID0gbmFtZTsgfQ0KDQoNCiAgICB3eFN0cmluZyBHZXRDbGFz c05hbWUoKSBjb25zdCB7IHJldHVybiBtX2NsYXNzTmFtZTsgfQ0KICAgIHZvaWQgU2V0Q2xhc3NO YW1lKGNvbnN0IHd4U3RyaW5nJiBuYW1lKSB7IG1fY2xhc3NOYW1lID0gbmFtZTsgfQ0KDQoNCiAg ICBjb25zdCB3eFN0cmluZyYgR2V0VmVuZG9yTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVuZG9y TmFtZTsgfQ0KICAgIHZvaWQgU2V0VmVuZG9yTmFtZShjb25zdCB3eFN0cmluZyYgbmFtZSkgeyBt X3ZlbmRvck5hbWUgPSBuYW1lOyB9DQoNCg0KDQoNCg0KDQogICAgdm9pZCBTZXRUb3BXaW5kb3co d3hXaW5kb3cgKndpbikgeyBtX3RvcFdpbmRvdyA9IHdpbjsgfQ0KDQoNCg0KDQogICAgd3hXaW5k b3cgKkdldFRvcFdpbmRvdygpIGNvbnN0DQogICAgew0KICAgICAgICBpZiAobV90b3BXaW5kb3cp DQogICAgICAgICAgICByZXR1cm4gbV90b3BXaW5kb3c7DQogICAgICAgIGVsc2UgaWYgKHd4VG9w TGV2ZWxXaW5kb3dzLkdldENvdW50KCkgPiAwKQ0KICAgICAgICAgICAgcmV0dXJuIHd4VG9wTGV2 ZWxXaW5kb3dzLkdldEZpcnN0KCktPkdldERhdGEoKTsNCiAgICAgICAgZWxzZQ0KICAgICAgICAg ICAgcmV0dXJuICh3eFdpbmRvdyAqKV9fbnVsbDsNCiAgICB9DQoNCg0KDQoNCg0KDQogICAgdm9p ZCBTZXRFeGl0T25GcmFtZURlbGV0ZShib29sIGZsYWcpIHsgbV9leGl0T25GcmFtZURlbGV0ZSA9 IGZsYWc7IH0NCiAgICBib29sIEdldEV4aXRPbkZyYW1lRGVsZXRlKCkgY29uc3QgeyByZXR1cm4g bV9leGl0T25GcmFtZURlbGV0ZTsgfQ0KIyAyMDAgIi4uLy4uL2luY2x1ZGUvd3gvYXBwLmgiDQog ICAgdmlydHVhbCB3eExvZyAqQ3JlYXRlTG9nVGFyZ2V0KCkNCg0KICAgICAgICB7IHJldHVybiBu ZXcgd3hMb2dHdWk7IH0NCiMgMjEyICIuLi8uLi9pbmNsdWRlL3d4L2FwcC5oIg0KICAgIHZpcnR1 YWwgd3hJY29uIEdldFN0ZEljb24oaW50IHdoaWNoKSBjb25zdCA9IDA7DQoNCg0KICAgIHZvaWQg U2V0V2FudERlYnVnT3V0cHV0KCBib29sIGZsYWcgKSB7IG1fd2FudERlYnVnT3V0cHV0ID0gZmxh ZzsgfQ0KICAgIGJvb2wgR2V0V2FudERlYnVnT3V0cHV0KCkgY29uc3QgeyByZXR1cm4gbV93YW50 RGVidWdPdXRwdXQ7IH0NCg0KDQogICAgdm9pZCBTZXRVc2VCZXN0VmlzdWFsKCBib29sIGZsYWcg KSB7IG1fdXNlQmVzdFZpc3VhbCA9IGZsYWc7IH0NCiAgICBib29sIEdldFVzZUJlc3RWaXN1YWwo KSBjb25zdCB7IHJldHVybiBtX3VzZUJlc3RWaXN1YWw7IH0NCg0KDQoNCg0KDQogICAgdmlydHVh bCB2b2lkIFNldFByaW50TW9kZShpbnQgKSB7IH0NCiAgICBpbnQgR2V0UHJpbnRNb2RlKCkgY29u c3QgeyByZXR1cm4gd3hQUklOVF9QT1NUU0NSSVBUOyB9DQoNCg0KDQoNCg0KDQogICAgc3RhdGlj IHZvaWQgU2V0SW5pdGlhbGl6ZXJGdW5jdGlvbih3eEFwcEluaXRpYWxpemVyRnVuY3Rpb24gZm4p DQogICAgICAgIHsgbV9hcHBJbml0Rm4gPSBmbjsgfQ0KICAgIHN0YXRpYyB3eEFwcEluaXRpYWxp emVyRnVuY3Rpb24gR2V0SW5pdGlhbGl6ZXJGdW5jdGlvbigpDQogICAgICAgIHsgcmV0dXJuIG1f YXBwSW5pdEZuOyB9DQoNCg0KICAgIHZpcnR1YWwgdm9pZCBQcm9jZXNzUGVuZGluZ0V2ZW50cygp Ow0KDQoNCiAgICBpbnQgYXJnYzsNCiAgICBjaGFyICoqYXJndjsNCg0KDQpwcm90ZWN0ZWQ6DQoN CiAgICBzdGF0aWMgd3hBcHBJbml0aWFsaXplckZ1bmN0aW9uIG1fYXBwSW5pdEZuOw0KDQoNCiAg ICB3eFN0cmluZyBtX3ZlbmRvck5hbWUsDQogICAgICAgICAgICAgbV9hcHBOYW1lLA0KICAgICAg ICAgICAgIG1fY2xhc3NOYW1lOw0KDQoNCiAgICBib29sIG1fZXhpdE9uRnJhbWVEZWxldGU7DQoN Cg0KICAgIGJvb2wgbV93YW50RGVidWdPdXRwdXQ7DQoNCg0KDQogICAgYm9vbCBtX3VzZUJlc3RW aXN1YWw7DQoNCg0KDQogICAgd3hXaW5kb3cgKm1fdG9wV2luZG93Ow0KDQp9Ow0KDQoNCg0KDQoN Cg0KDQojIDEgIi4uLy4uL2luY2x1ZGUvd3gvbXN3L2FwcC5oIiAxDQojIDE2ICIuLi8uLi9pbmNs dWRlL3d4L21zdy9hcHAuaCINCiNwcmFnbWEgaW50ZXJmYWNlICJhcHAuaCINCg0KDQoNCiMgMSAi Li4vLi4vaW5jbHVkZS93eC9pY29uLmgiIDENCiMgMTEgIi4uLy4uL2luY2x1ZGUvd3gvaWNvbi5o Ig0KIyAxICIuLi8uLi9pbmNsdWRlL3d4L21zdy9pY29uLmgiIDENCiMgMTYgIi4uLy4uL2luY2x1 ZGUvd3gvbXN3L2ljb24uaCINCiNwcmFnbWEgaW50ZXJmYWNlICJpY29uLmgiDQojIDQ3ICIuLi8u Li9pbmNsdWRlL3d4L21zdy9pY29uLmgiDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQp KSB3eEljb25SZWZEYXRhIDogcHVibGljIHd4R0RJSW1hZ2VSZWZEYXRhDQp7DQpwdWJsaWM6DQog ICAgd3hJY29uUmVmRGF0YSgpIHsgfQ0KICAgIHZpcnR1YWwgfnd4SWNvblJlZkRhdGEoKSB7IEZy ZWUoKTsgfQ0KDQogICAgdmlydHVhbCB2b2lkIEZyZWUoKTsNCn07DQoNCg0KDQoNCg0KY2xhc3Mg X19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hJY29uIDogcHVibGljIHd4R0RJSW1hZ2UNCnsN CnB1YmxpYzoNCg0KDQogICAgd3hJY29uKCkgeyB9DQoNCg0KICAgIHd4SWNvbihjb25zdCB3eElj b24mIGljb24pIHsgUmVmKGljb24pOyB9DQoNCg0KICAgIHd4SWNvbihjb25zdCBjaGFyIGJpdHNb XSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsNCg0KICAgIHd4SWNvbihjb25zdCBjaGFyICoqZGF0 YSkgeyBDcmVhdGVJY29uRnJvbVhwbShkYXRhKTsgfQ0KICAgIHd4SWNvbihjaGFyICoqZGF0YSkg eyBDcmVhdGVJY29uRnJvbVhwbSgoY29uc3QgY2hhciAqKilkYXRhKTsgfQ0KDQogICAgd3hJY29u KGNvbnN0IHd4U3RyaW5nJiBuYW1lLA0KICAgICAgICAgICBsb25nIHR5cGUgPSB3eEJJVE1BUF9U WVBFX0lDT19SRVNPVVJDRSwNCiAgICAgICAgICAgaW50IGRlc2lyZWRXaWR0aCA9IC0xLCBpbnQg ZGVzaXJlZEhlaWdodCA9IC0xKTsNCg0KICAgIHZpcnR1YWwgfnd4SWNvbigpOw0KDQogICAgdmly dHVhbCBib29sIExvYWRGaWxlKGNvbnN0IHd4U3RyaW5nJiBuYW1lLA0KICAgICAgICAgICAgICAg ICAgICAgICAgICBsb25nIHR5cGUgPSB3eEJJVE1BUF9UWVBFX0lDT19SRVNPVVJDRSwNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IGRlc2lyZWRXaWR0aCA9IC0xLCBpbnQgZGVzaXJlZEhl aWdodCA9IC0xKTsNCg0KICAgIHd4SWNvbiYgb3BlcmF0b3IgPSAoY29uc3Qgd3hJY29uJiBpY29u KQ0KICAgICAgICB7IGlmICggKnRoaXMgIT0gaWNvbiApIFJlZihpY29uKTsgcmV0dXJuICp0aGlz OyB9DQogICAgYm9vbCBvcGVyYXRvciA9PSAoY29uc3Qgd3hJY29uJiBpY29uKSBjb25zdA0KICAg ICAgICB7IHJldHVybiBtX3JlZkRhdGEgPT0gaWNvbi5tX3JlZkRhdGE7IH0NCiAgICBib29sIG9w ZXJhdG9yICE9IChjb25zdCB3eEljb24mIGljb24pIGNvbnN0DQogICAgICAgIHsgcmV0dXJuIG1f cmVmRGF0YSAhPSBpY29uLm1fcmVmRGF0YTsgfQ0KDQoNCiAgICB3eEljb25SZWZEYXRhICpHZXRJ Y29uRGF0YSgpIGNvbnN0IHsgcmV0dXJuICh3eEljb25SZWZEYXRhICopbV9yZWZEYXRhOyB9DQoN CiAgICB2b2lkIFNldEhJQ09OKFdYSElDT04gaWNvbikgeyBTZXRIYW5kbGUoKFdYSEFORExFKWlj b24pOyB9DQogICAgV1hISUNPTiBHZXRISUNPTigpIGNvbnN0IHsgcmV0dXJuIChXWEhJQ09OKUdl dEhhbmRsZSgpOyB9DQoNCg0KDQoNCiAgICB2b2lkIENvcHlGcm9tQml0bWFwKGNvbnN0IHd4Qml0 bWFwJiBibXApOw0KDQpwcm90ZWN0ZWQ6DQogICAgdmlydHVhbCB3eEdESUltYWdlUmVmRGF0YSAq Q3JlYXRlRGF0YSgpIGNvbnN0DQogICAgew0KICAgICAgICByZXR1cm4gbmV3IHd4SWNvblJlZkRh dGE7DQogICAgfQ0KDQoNCiAgICB2b2lkIENyZWF0ZUljb25Gcm9tWHBtKGNvbnN0IGNoYXIgKipk YXRhKTsNCg0KcHJpdmF0ZToNCiAgICBwdWJsaWM6IHN0YXRpYyB3eENsYXNzSW5mbyBzbV9jbGFz c3d4SWNvbjsgd3hDbGFzc0luZm8gKkdldENsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZ3eElj b246OnNtX2NsYXNzd3hJY29uOyB9DQp9Ow0KIyAxMiAiLi4vLi4vaW5jbHVkZS93eC9pY29uLmgi IDINCiMgMjEgIi4uLy4uL2luY2x1ZGUvd3gvbXN3L2FwcC5oIiAyDQoNCmNsYXNzIF9fYXR0cmli dXRlX18oKGRsbGltcG9ydCkpIHd4RnJhbWU7DQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBv cnQpKSB3eFdpbmRvdzsNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4QXBwIDsN CmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4S2V5RXZlbnQ7DQpjbGFzcyBfX2F0 dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eExvZzsNCg0KDQoNCmNsYXNzIF9fYXR0cmlidXRlX18o KGRsbGltcG9ydCkpIHd4QXBwIDogcHVibGljIHd4QXBwQmFzZQ0Kew0KICAgIHB1YmxpYzogc3Rh dGljIHd4Q2xhc3NJbmZvIHNtX2NsYXNzd3hBcHA7IHd4Q2xhc3NJbmZvICpHZXRDbGFzc0luZm8o KSBjb25zdCB7IHJldHVybiAmd3hBcHA6OnNtX2NsYXNzd3hBcHA7IH0NCg0KcHVibGljOg0KICAg IHd4QXBwKCk7DQogICAgdmlydHVhbCB+d3hBcHAoKTsNCg0KDQogICAgdmlydHVhbCBpbnQgTWFp bkxvb3AoKTsNCiAgICB2aXJ0dWFsIHZvaWQgRXhpdE1haW5Mb29wKCk7DQogICAgdmlydHVhbCBi b29sIEluaXRpYWxpemVkKCk7DQogICAgdmlydHVhbCBib29sIFBlbmRpbmcoKSA7DQogICAgdmly dHVhbCB2b2lkIERpc3BhdGNoKCkgOw0KDQogICAgdmlydHVhbCB3eEljb24gR2V0U3RkSWNvbihp bnQgd2hpY2gpIGNvbnN0Ow0KDQogICAgdmlydHVhbCB2b2lkIFNldFByaW50TW9kZShpbnQgbW9k ZSkgeyBtX3ByaW50TW9kZSA9IG1vZGU7IH0NCiAgICB2aXJ0dWFsIGludCBHZXRQcmludE1vZGUo KSBjb25zdCB7IHJldHVybiBtX3ByaW50TW9kZTsgfQ0KDQoNCiAgICB2b2lkIE9uSWRsZSh3eElk bGVFdmVudCYgZXZlbnQpOw0KICAgIHZvaWQgT25FbmRTZXNzaW9uKHd4Q2xvc2VFdmVudCYgZXZl bnQpOw0KICAgIHZvaWQgT25RdWVyeUVuZFNlc3Npb24od3hDbG9zZUV2ZW50JiBldmVudCk7DQoN Cg0KDQogICAgYm9vbCBTZW5kSWRsZUV2ZW50cygpOw0KDQoNCg0KICAgIGJvb2wgU2VuZElkbGVF dmVudHMod3hXaW5kb3cqIHdpbik7DQoNCiAgICB2b2lkIFNldEF1dG8zRChib29sIGZsYWcpIHsg bV9hdXRvM0QgPSBmbGFnOyB9DQogICAgYm9vbCBHZXRBdXRvM0QoKSBjb25zdCB7IHJldHVybiBt X2F1dG8zRDsgfQ0KDQpwcm90ZWN0ZWQ6DQogICAgYm9vbCBtX3Nob3dPbkluaXQ7DQogICAgaW50 IG1fcHJpbnRNb2RlOw0KICAgIGJvb2wgbV9hdXRvM0QgOw0KDQoNCg0KcHVibGljOg0KDQoNCiAg ICBzdGF0aWMgYm9vbCBJbml0aWFsaXplKCk7DQogICAgc3RhdGljIHZvaWQgQ2xlYW5VcCgpOw0K DQogICAgc3RhdGljIGJvb2wgUmVnaXN0ZXJXaW5kb3dDbGFzc2VzKCk7DQoNCiAgICB2b2lkIENv bnZlcnRUb1N0YW5kYXJkQ29tbWFuZEFyZ3MoY2hhciogcCk7DQoNCiAgICAgICAgICAgICAgICB2 b2lkIERvTWVzc2FnZShXWE1TRyAqcE1zZyk7DQogICAgdmlydHVhbCBib29sIERvTWVzc2FnZSgp Ow0KDQogICAgdmlydHVhbCBib29sIFByb2Nlc3NNZXNzYWdlKFdYTVNHKiBwTXNnKTsNCiAgICB2 b2lkIERlbGV0ZVBlbmRpbmdPYmplY3RzKCk7DQogICAgYm9vbCBQcm9jZXNzSWRsZSgpOw0KDQoN Cg0KDQogICAgc3RhdGljIGJvb2wgSW5pdFJpY2hFZGl0KGludCB2ZXJzaW9uID0gMik7DQoNCg0K DQoNCiAgICBzdGF0aWMgaW50IEdldENvbUN0bDMyVmVyc2lvbigpOw0KDQpwdWJsaWM6DQogICAg aW50IG1fbkNtZFNob3c7DQoNCnByb3RlY3RlZDoNCiAgICBib29sIG1fa2VlcEdvaW5nIDsNCg0K ICAgIHByaXZhdGU6IHN0YXRpYyBjb25zdCB3eEV2ZW50VGFibGVFbnRyeSBzbV9ldmVudFRhYmxl RW50cmllc1tdO3Byb3RlY3RlZDogc3RhdGljIGNvbnN0IHd4RXZlbnRUYWJsZSBzbV9ldmVudFRh YmxlOyB2aXJ0dWFsIGNvbnN0IHd4RXZlbnRUYWJsZSogR2V0RXZlbnRUYWJsZSgpIGNvbnN0Ow0K fTsNCg0KDQppbnQgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hFbnRyeShXWEhJTlNUQU5D RSBoSW5zdGFuY2UsIFdYSElOU1RBTkNFIGhQcmV2SW5zdGFuY2UsDQogICAgICAgICAgICAgICAg ICAgICAgICBjaGFyICpscHN6Q21kTGluZSwgaW50IG5DbWRTaG93LCBib29sIGVudGVyTG9vcCA9 IDEpOw0KIyAyNzkgIi4uLy4uL2luY2x1ZGUvd3gvYXBwLmgiIDINCiMgMzA3ICIuLi8uLi9pbmNs dWRlL3d4L2FwcC5oIg0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgZXh0ZXJuIHd4QXBwKiB3 eFRoZUFwcDsNCiMgMzE3ICIuLi8uLi9pbmNsdWRlL3d4L2FwcC5oIg0KZXh0ZXJuIHZvaWQgX19h dHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hFeGl0KCk7DQoNCg0KZXh0ZXJuIGJvb2wgX19hdHRy aWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hZaWVsZCgpOw0KDQoNCmV4dGVybiB2b2lkIF9fYXR0cmli dXRlX18oKGRsbGltcG9ydCkpIHd4V2FrZVVwSWRsZSgpOw0KDQoNCg0KaW5saW5lIHZvaWQgX19h dHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hQb3N0RXZlbnQod3hFdnRIYW5kbGVyICpkZXN0LCB3 eEV2ZW50JiBldmVudCkNCnsNCiAgICBpZiAoIShkZXN0KSkge2lmICggISh3eEZhbHNlKSApIHd4 T25Bc3NlcnQoIi4uLy4uL2luY2x1ZGUvd3gvYXBwLmgiLCAzMjksICJuZWVkIGFuIG9iamVjdCB0 byBwb3N0IGV2ZW50IHRvIGluIHd4UG9zdEV2ZW50Iik7IHJldHVybjsgfTsNCg0KDQogICAgZGVz dC0+QWRkUGVuZGluZ0V2ZW50KGV2ZW50KTsNCg0KDQoNCn0NCiMgMzYyICIuLi8uLi9pbmNsdWRl L3d4L2FwcC5oIg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hBcHBJbml0aWFs aXplcg0Kew0KcHVibGljOg0KICAgIHd4QXBwSW5pdGlhbGl6ZXIod3hBcHBJbml0aWFsaXplckZ1 bmN0aW9uIGZuKQ0KICAgICAgICB7IHd4QXBwOjpTZXRJbml0aWFsaXplckZ1bmN0aW9uKGZuKTsg fQ0KfTsNCiMgMzg0ICIuLi8uLi9pbmNsdWRlL3d4L2FwcC5oIg0KIyAxICIuLi8uLi9pbmNsdWRl L3d4L21zdy93aW51bmRlZi5oIiAxDQojIDM4NSAiLi4vLi4vaW5jbHVkZS93eC9hcHAuaCIgMg0K IyAyNSAiLi4vLi4vaW5jbHVkZS93eC93eC5oIiAyDQoNCg0KDQoNCg0KIyAxICIuLi8uLi9pbmNs dWRlL3d4L3BhbmVsLmgiIDENCg0KDQoNCiMgMSAiLi4vLi4vaW5jbHVkZS93eC9nZW5lcmljL3Bh bmVsZy5oIiAxDQojIDE2ICIuLi8uLi9pbmNsdWRlL3d4L2dlbmVyaWMvcGFuZWxnLmgiDQojcHJh Z21hIGludGVyZmFjZSAicGFuZWxnLmgiDQojIDI1ICIuLi8uLi9pbmNsdWRlL3d4L2dlbmVyaWMv cGFuZWxnLmgiDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eEJ1dHRvbjsNCg0K X19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgZXh0ZXJuIGNvbnN0IGNoYXIqIHd4UGFuZWxOYW1l U3RyOw0KDQoNCg0KDQoNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4UGFuZWwg OiBwdWJsaWMgd3hXaW5kb3cNCnsNCnB1YmxpYzoNCiAgICB3eFBhbmVsKCkgeyBJbml0KCk7IH0N Cg0KDQoNCiAgICB3eFBhbmVsKHd4V2luZG93ICpwYXJlbnQsDQogICAgICAgICAgICBpbnQgeCwg aW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwNCiAgICAgICAgICAgIGxvbmcgc3R5bGUgPSAw eDAwMDgwMDAwIHwgMHgwMDIwMDAwMCwNCiAgICAgICAgICAgIGNvbnN0IHd4U3RyaW5nJiBuYW1l ID0gd3hQYW5lbE5hbWVTdHIpDQogICAgew0KICAgICAgICBJbml0KCk7DQoNCiAgICAgICAgQ3Jl YXRlKHBhcmVudCwgLTEsIHd4UG9pbnQoeCwgeSksIHd4U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgc3R5 bGUsIG5hbWUpOw0KICAgIH0NCg0KDQogICAgd3hQYW5lbCh3eFdpbmRvdyAqcGFyZW50LA0KICAg ICAgICAgICAgd3hXaW5kb3dJRCBpZCA9IC0xLA0KICAgICAgICAgICAgY29uc3Qgd3hQb2ludCYg cG9zID0gd3hEZWZhdWx0UG9zaXRpb24sDQogICAgICAgICAgICBjb25zdCB3eFNpemUmIHNpemUg PSB3eERlZmF1bHRTaXplLA0KICAgICAgICAgICAgbG9uZyBzdHlsZSA9IDB4MDAwODAwMDAgfCAw eDAwMjAwMDAwLA0KICAgICAgICAgICAgY29uc3Qgd3hTdHJpbmcmIG5hbWUgPSB3eFBhbmVsTmFt ZVN0cikNCiAgICB7DQogICAgICAgIEluaXQoKTsNCg0KICAgICAgICBDcmVhdGUocGFyZW50LCBp ZCwgcG9zLCBzaXplLCBzdHlsZSwgbmFtZSk7DQogICAgfQ0KDQoNCiAgICBib29sIENyZWF0ZSh3 eFdpbmRvdyAqcGFyZW50LCB3eFdpbmRvd0lEIGlkLA0KICAgICAgICAgICAgICAgIGNvbnN0IHd4 UG9pbnQmIHBvcyA9IHd4RGVmYXVsdFBvc2l0aW9uLA0KICAgICAgICAgICAgICAgIGNvbnN0IHd4 U2l6ZSYgc2l6ZSA9IHd4RGVmYXVsdFNpemUsDQogICAgICAgICAgICAgICAgbG9uZyBzdHlsZSA9 IDB4MDAwODAwMDAgfCAweDAwMjAwMDAwLA0KICAgICAgICAgICAgICAgIGNvbnN0IHd4U3RyaW5n JiBuYW1lID0gd3hQYW5lbE5hbWVTdHIpOw0KDQoNCg0KICAgIHZpcnR1YWwgdm9pZCBJbml0RGlh bG9nKCk7DQoNCg0KICAgIHd4QnV0dG9uICpHZXREZWZhdWx0SXRlbSgpIGNvbnN0IHsgcmV0dXJu IG1fYnRuRGVmYXVsdDsgfQ0KICAgIHZvaWQgU2V0RGVmYXVsdEl0ZW0od3hCdXR0b24gKmJ0bikg eyBtX2J0bkRlZmF1bHQgPSBidG47IH0NCg0KDQoNCg0KDQogICAgdm9pZCBPblN5c0NvbG91ckNo YW5nZWQod3hTeXNDb2xvdXJDaGFuZ2VkRXZlbnQmIGV2ZW50KTsNCg0KDQogICAgdm9pZCBPbk5h dmlnYXRpb25LZXkod3hOYXZpZ2F0aW9uS2V5RXZlbnQmIGV2ZW50KTsNCg0KDQogICAgdm9pZCBP bkZvY3VzKHd4Rm9jdXNFdmVudCYgZXZlbnQpOw0KDQoNCiAgICB2b2lkIE9uU2l6ZSh3eFNpemVF dmVudCYgZXZlbnQpOw0KDQoNCiAgICB2aXJ0dWFsIHZvaWQgU2V0Rm9jdXMoKTsNCg0KDQogICAg dm9pZCBTZXRMYXN0Rm9jdXMod3hXaW5kb3cgKndpbikgeyBtX3dpbkxhc3RGb2N1c2VkID0gd2lu OyB9DQogICAgd3hXaW5kb3cgKkdldExhc3RGb2N1cygpIGNvbnN0IHsgcmV0dXJuIG1fd2luTGFz dEZvY3VzZWQ7IH0NCg0KcHJvdGVjdGVkOg0KDQogICAgdm9pZCBJbml0KCk7DQoNCg0KICAgIGJv b2wgU2V0Rm9jdXNUb0NoaWxkKCk7DQoNCg0KICAgIHd4V2luZG93ICptX3dpbkxhc3RGb2N1c2Vk Ow0KDQoNCiAgICB3eEJ1dHRvbiAqbV9idG5EZWZhdWx0Ow0KDQpwcml2YXRlOg0KICAgIHB1Ymxp Yzogc3RhdGljIHd4Q2xhc3NJbmZvIHNtX2NsYXNzd3hQYW5lbDsgd3hDbGFzc0luZm8gKkdldENs YXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZ3eFBhbmVsOjpzbV9jbGFzc3d4UGFuZWw7IH0NCiAg ICBwcml2YXRlOiBzdGF0aWMgY29uc3Qgd3hFdmVudFRhYmxlRW50cnkgc21fZXZlbnRUYWJsZUVu dHJpZXNbXTtwcm90ZWN0ZWQ6IHN0YXRpYyBjb25zdCB3eEV2ZW50VGFibGUgc21fZXZlbnRUYWJs ZTsgdmlydHVhbCBjb25zdCB3eEV2ZW50VGFibGUqIEdldEV2ZW50VGFibGUoKSBjb25zdDsNCn07 DQoNCg0KZXh0ZXJuIGJvb2wgd3hTZXRGb2N1c1RvQ2hpbGQod3hXaW5kb3cgKndpbiwgd3hXaW5k b3cgKipjaGlsZCk7DQojIDUgIi4uLy4uL2luY2x1ZGUvd3gvcGFuZWwuaCIgMg0KIyAzMSAiLi4v Li4vaW5jbHVkZS93eC93eC5oIiAyDQojIDEgIi4uLy4uL2luY2x1ZGUvd3gvZnJhbWUuaCIgMQ0K IyAyMCAiLi4vLi4vaW5jbHVkZS93eC9mcmFtZS5oIg0KI3ByYWdtYSBpbnRlcmZhY2UgImZyYW1l YmFzZS5oIg0KDQoNCg0KDQoNCg0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgZXh0ZXJuIGNv bnN0IGNoYXIqIHd4RnJhbWVOYW1lU3RyOw0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgZXh0 ZXJuIGNvbnN0IGNoYXIqIHd4U3RhdHVzTGluZU5hbWVTdHI7DQpfX2F0dHJpYnV0ZV9fKChkbGxp bXBvcnQpKSBleHRlcm4gY29uc3QgY2hhciogd3hUb29sQmFyTmFtZVN0cjsNCl9fYXR0cmlidXRl X18oKGRsbGltcG9ydCkpIGV4dGVybiB3eFdpbmRvdyogd3hXbmRIb29rOw0KDQpjbGFzcyBfX2F0 dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eE1lbnVCYXI7DQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChk bGxpbXBvcnQpKSB3eFN0YXR1c0JhcjsNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkp IHd4VG9vbEJhcjsNCiMgNTYgIi4uLy4uL2luY2x1ZGUvd3gvZnJhbWUuaCINCmNsYXNzIF9fYXR0 cmlidXRlX18oKGRsbGltcG9ydCkpIHd4RnJhbWVCYXNlIDogcHVibGljIHd4V2luZG93DQp7DQpw dWJsaWM6DQoNCiAgICB3eEZyYW1lQmFzZSgpOw0KDQogICAgd3hGcmFtZSAqTmV3KHd4V2luZG93 ICpwYXJlbnQsDQogICAgICAgICAgICAgICAgIHd4V2luZG93SUQgaWQsDQogICAgICAgICAgICAg ICAgIGNvbnN0IHd4U3RyaW5nJiB0aXRsZSwNCiAgICAgICAgICAgICAgICAgY29uc3Qgd3hQb2lu dCYgcG9zID0gd3hEZWZhdWx0UG9zaXRpb24sDQogICAgICAgICAgICAgICAgIGNvbnN0IHd4U2l6 ZSYgc2l6ZSA9IHd4RGVmYXVsdFNpemUsDQogICAgICAgICAgICAgICAgIGxvbmcgc3R5bGUgPSAo MHgwODAwIHwgMHgwMDQwIHwgMHgwNDAwIHwgMHgwMjAwIHwgMHgyMDAwMDAwMCB8IDB4MDA0MDAw MDApLA0KICAgICAgICAgICAgICAgICBjb25zdCB3eFN0cmluZyYgbmFtZSA9IHd4RnJhbWVOYW1l U3RyKTsNCg0KDQoNCg0KDQogICAgdmlydHVhbCB2b2lkIE1heGltaXplKGJvb2wgbWF4aW1pemUg PSAxKSA9IDA7DQoNCg0KICAgIHZpcnR1YWwgdm9pZCBSZXN0b3JlKCkgPSAwOw0KDQoNCiAgICB2 aXJ0dWFsIHZvaWQgSWNvbml6ZShib29sIGljb25pemUgPSAxKSA9IDA7DQoNCg0KICAgIHZpcnR1 YWwgYm9vbCBJc01heGltaXplZCgpIGNvbnN0ID0gMDsNCg0KDQogICAgdmlydHVhbCBib29sIElz SWNvbml6ZWQoKSBjb25zdCA9IDA7DQoNCg0KICAgIGNvbnN0IHd4SWNvbiYgR2V0SWNvbigpIGNv bnN0IHsgcmV0dXJuIG1faWNvbjsgfQ0KDQoNCiAgICB2aXJ0dWFsIHZvaWQgU2V0SWNvbihjb25z dCB3eEljb24mIGljb24pIHsgbV9pY29uID0gaWNvbjsgfQ0KDQoNCiAgICB2aXJ0dWFsIHZvaWQg TWFrZU1vZGFsKGJvb2wgbW9kYWwgPSAxKTsNCg0KDQoNCiAgICB2aXJ0dWFsIHd4UG9pbnQgR2V0 Q2xpZW50QXJlYU9yaWdpbigpIGNvbnN0Ow0KDQoNCg0KDQogICAgdmlydHVhbCB2b2lkIFNldE1l bnVCYXIod3hNZW51QmFyICptZW51YmFyKSA9IDA7DQogICAgdmlydHVhbCB3eE1lbnVCYXIgKkdl dE1lbnVCYXIoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lTWVudUJhcjsgfQ0KDQoNCiAgICBib29s IENvbW1hbmQoaW50IGlkKSB7IHJldHVybiBQcm9jZXNzQ29tbWFuZChpZCk7IH0NCg0KDQogICAg Ym9vbCBQcm9jZXNzQ29tbWFuZChpbnQgaWQpOw0KDQoNCg0KDQoNCiAgICB2aXJ0dWFsIHd4U3Rh dHVzQmFyKiBDcmVhdGVTdGF0dXNCYXIoaW50IG51bWJlciA9IDEsDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc3R5bGUgPSAweDAwMTAsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHd4V2luZG93SUQgaWQgPSAwLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3eFN0cmluZyYgbmFtZSA9 DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHd4U3RhdHVzTGlu ZU5hbWVTdHIpOw0KDQogICAgdmlydHVhbCB3eFN0YXR1c0JhciAqT25DcmVhdGVTdGF0dXNCYXIo aW50IG51bWJlciwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs b25nIHN0eWxlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHd4 V2luZG93SUQgaWQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3Qgd3hTdHJpbmcmIG5hbWUpOw0KDQogICAgdmlydHVhbCB3eFN0YXR1c0JhciAqR2V0U3Rh dHVzQmFyKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVN0YXR1c0JhcjsgfQ0KDQoNCiAgICB2b2lk IFNldFN0YXR1c0Jhcih3eFN0YXR1c0JhciAqc3RhdEJhcikgeyBtX2ZyYW1lU3RhdHVzQmFyID0g c3RhdEJhcjsgfQ0KDQoNCiAgICB2aXJ0dWFsIHZvaWQgU2V0U3RhdHVzVGV4dChjb25zdCB3eFN0 cmluZyAmdGV4dCwgaW50IG51bWJlciA9IDApOw0KICAgIHZpcnR1YWwgdm9pZCBTZXRTdGF0dXNX aWR0aHMoaW50IG4sIGNvbnN0IGludCB3aWR0aHNfZmllbGRbXSk7DQoNCg0KDQoNCg0KDQogICAg dmlydHVhbCB3eFRvb2xCYXIqIENyZWF0ZVRvb2xCYXIobG9uZyBzdHlsZSA9IDB4MDAyMDAwMDB8 d3hIT1JJWk9OVEFMLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHd4V2lu ZG93SUQgaWQgPSAtMSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCB3eFN0cmluZyYgbmFtZSA9IHd4VG9vbEJhck5hbWVTdHIpOw0KDQogICAgdmlydHVhbCB3eFRv b2xCYXIgKk9uQ3JlYXRlVG9vbEJhcihsb25nIHN0eWxlLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgd3hXaW5kb3dJRCBpZCwNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHd4U3RyaW5nJiBuYW1lICk7DQoNCg0KICAgIHZpcnR1YWwg d3hUb29sQmFyICpHZXRUb29sQmFyKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVRvb2xCYXI7IH0N CiAgICB2aXJ0dWFsIHZvaWQgU2V0VG9vbEJhcih3eFRvb2xCYXIgKnRvb2xiYXIpIHsgbV9mcmFt ZVRvb2xCYXIgPSB0b29sYmFyOyB9DQojIDE2NCAiLi4vLi4vaW5jbHVkZS93eC9mcmFtZS5oIg0K ICAgIHZpcnR1YWwgYm9vbCBEZXN0cm95KCk7DQogICAgdmlydHVhbCBib29sIElzVG9wTGV2ZWwo KSBjb25zdCB7IHJldHVybiAxOyB9DQoNCg0KICAgIHZvaWQgT25JZGxlKHd4SWRsZUV2ZW50JiBl dmVudCk7DQogICAgdm9pZCBPbkNsb3NlV2luZG93KHd4Q2xvc2VFdmVudCYgZXZlbnQpOw0KICAg IHZvaWQgT25NZW51SGlnaGxpZ2h0KHd4TWVudUV2ZW50JiBldmVudCk7DQogICAgdm9pZCBPblNp emUod3hTaXplRXZlbnQmIGV2ZW50KTsNCg0KDQogICAgdm9pZCBPbkFjdGl2YXRlKHd4QWN0aXZh dGVFdmVudCAmKSB7IH0NCg0KDQogICAgdm9pZCBEb01lbnVVcGRhdGVzKCk7DQogICAgdm9pZCBE b01lbnVVcGRhdGVzKHd4TWVudSogbWVudSwgd3hXaW5kb3cqIGZvY3VzV2luKTsNCg0KcHJvdGVj dGVkOg0KDQoNCg0KDQoNCiAgICB2b2lkIERlbGV0ZUFsbEJhcnMoKTsNCg0KICAgIHd4TWVudUJh ciAqbV9mcmFtZU1lbnVCYXI7DQoNCg0KDQoNCiAgICB2aXJ0dWFsIHZvaWQgUG9zaXRpb25TdGF0 dXNCYXIoKSB7IH0NCg0KDQoNCiAgICBib29sIFNob3dNZW51SGVscCh3eFN0YXR1c0JhciAqc3Rh dGJhciwgaW50IGlkKTsNCg0KICAgIHd4U3RhdHVzQmFyICptX2ZyYW1lU3RhdHVzQmFyOw0KDQoN Cg0KDQoNCiAgICB2aXJ0dWFsIHZvaWQgUG9zaXRpb25Ub29sQmFyKCkgeyB9DQoNCiAgICB3eFRv b2xCYXIgKm1fZnJhbWVUb29sQmFyOw0KDQoNCg0KDQogICAgdmlydHVhbCB2b2lkIERvQ2xpZW50 VG9TY3JlZW4oaW50ICp4LCBpbnQgKnkpIGNvbnN0Ow0KICAgIHZpcnR1YWwgdm9pZCBEb1NjcmVl blRvQ2xpZW50KGludCAqeCwgaW50ICp5KSBjb25zdDsNCg0KDQogICAgd3hJY29uIG1faWNvbjsN Cg0KICAgIHByaXZhdGU6IHN0YXRpYyBjb25zdCB3eEV2ZW50VGFibGVFbnRyeSBzbV9ldmVudFRh YmxlRW50cmllc1tdO3Byb3RlY3RlZDogc3RhdGljIGNvbnN0IHd4RXZlbnRUYWJsZSBzbV9ldmVu dFRhYmxlOyB2aXJ0dWFsIGNvbnN0IHd4RXZlbnRUYWJsZSogR2V0RXZlbnRUYWJsZSgpIGNvbnN0 Ow0KfTsNCg0KDQoNCiMgMSAiLi4vLi4vaW5jbHVkZS93eC9tc3cvZnJhbWUuaCIgMQ0KIyAxNiAi Li4vLi4vaW5jbHVkZS93eC9tc3cvZnJhbWUuaCINCiNwcmFnbWEgaW50ZXJmYWNlICJmcmFtZS5o Ig0KDQoNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4RnJhbWUgOiBwdWJsaWMg d3hGcmFtZUJhc2UNCnsNCnB1YmxpYzoNCg0KICAgIHd4RnJhbWUoKSB7IEluaXQoKTsgfQ0KICAg IHd4RnJhbWUod3hXaW5kb3cgKnBhcmVudCwNCiAgICAgICAgICAgIHd4V2luZG93SUQgaWQsDQog ICAgICAgICAgICBjb25zdCB3eFN0cmluZyYgdGl0bGUsDQogICAgICAgICAgICBjb25zdCB3eFBv aW50JiBwb3MgPSB3eERlZmF1bHRQb3NpdGlvbiwNCiAgICAgICAgICAgIGNvbnN0IHd4U2l6ZSYg c2l6ZSA9IHd4RGVmYXVsdFNpemUsDQogICAgICAgICAgICBsb25nIHN0eWxlID0gKDB4MDgwMCB8 IDB4MDA0MCB8IDB4MDQwMCB8IDB4MDIwMCB8IDB4MjAwMDAwMDAgfCAweDAwNDAwMDAwKSwNCiAg ICAgICAgICAgIGNvbnN0IHd4U3RyaW5nJiBuYW1lID0gd3hGcmFtZU5hbWVTdHIpDQogICAgew0K ICAgICAgICBJbml0KCk7DQoNCiAgICAgICAgQ3JlYXRlKHBhcmVudCwgaWQsIHRpdGxlLCBwb3Ms IHNpemUsIHN0eWxlLCBuYW1lKTsNCiAgICB9DQoNCiAgICBib29sIENyZWF0ZSh3eFdpbmRvdyAq cGFyZW50LA0KICAgICAgICAgICAgICAgIHd4V2luZG93SUQgaWQsDQogICAgICAgICAgICAgICAg Y29uc3Qgd3hTdHJpbmcmIHRpdGxlLA0KICAgICAgICAgICAgICAgIGNvbnN0IHd4UG9pbnQmIHBv cyA9IHd4RGVmYXVsdFBvc2l0aW9uLA0KICAgICAgICAgICAgICAgIGNvbnN0IHd4U2l6ZSYgc2l6 ZSA9IHd4RGVmYXVsdFNpemUsDQogICAgICAgICAgICAgICAgbG9uZyBzdHlsZSA9ICgweDA4MDAg fCAweDAwNDAgfCAweDA0MDAgfCAweDAyMDAgfCAweDIwMDAwMDAwIHwgMHgwMDQwMDAwMCksDQog ICAgICAgICAgICAgICAgY29uc3Qgd3hTdHJpbmcmIG5hbWUgPSB3eEZyYW1lTmFtZVN0cik7DQoN CiAgICB2aXJ0dWFsIH53eEZyYW1lKCk7DQoNCg0KICAgIHZpcnR1YWwgdm9pZCBNYXhpbWl6ZShi b29sIG1heGltaXplID0gMSk7DQogICAgdmlydHVhbCBib29sIElzTWF4aW1pemVkKCkgY29uc3Q7 DQogICAgdmlydHVhbCB2b2lkIEljb25pemUoYm9vbCBpY29uaXplID0gMSk7DQogICAgdmlydHVh bCBib29sIElzSWNvbml6ZWQoKSBjb25zdDsNCiAgICB2aXJ0dWFsIHZvaWQgUmVzdG9yZSgpOw0K ICAgIHZpcnR1YWwgdm9pZCBTZXRNZW51QmFyKHd4TWVudUJhciAqbWVudWJhcik7DQogICAgdmly dHVhbCB2b2lkIFNldEljb24oY29uc3Qgd3hJY29uJiBpY29uKTsNCiAgICB2aXJ0dWFsIGJvb2wg U2hvd0Z1bGxTY3JlZW4oYm9vbCBzaG93LCBsb25nIHN0eWxlID0gKDB4MDEgfCAweDAyIHwgMHgw NCB8IDB4MDggfCAweDEwKSk7DQogICAgdmlydHVhbCBib29sIElzRnVsbFNjcmVlbigpIGNvbnN0 IHsgcmV0dXJuIG1fZnNJc1Nob3dpbmc7IH07DQoNCg0KDQoNCg0KICAgIHZpcnR1YWwgYm9vbCBT aG93KGJvb2wgc2hvdyA9IDEpOw0KDQoNCiAgICB2b2lkIE9uQWN0aXZhdGUod3hBY3RpdmF0ZUV2 ZW50JiBldmVudCk7DQogICAgdm9pZCBPblN5c0NvbG91ckNoYW5nZWQod3hTeXNDb2xvdXJDaGFu Z2VkRXZlbnQmIGV2ZW50KTsNCg0KDQoNCiAgICB2aXJ0dWFsIHd4VG9vbEJhciogQ3JlYXRlVG9v bEJhcihsb25nIHN0eWxlID0gMHgwMDIwMDAwMCB8IHd4SE9SSVpPTlRBTCB8IDB4MDAyMCwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3eFdpbmRvd0lEIGlkID0gLTEsDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd3hTdHJpbmcmIG5hbWUg PSB3eFRvb2xCYXJOYW1lU3RyKTsNCg0KICAgIHZpcnR1YWwgdm9pZCBQb3NpdGlvblRvb2xCYXIo KTsNCg0KDQoNCg0KICAgIHZpcnR1YWwgd3hTdGF0dXNCYXIqIE9uQ3JlYXRlU3RhdHVzQmFyKGlu dCBudW1iZXIgPSAxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGxvbmcgc3R5bGUgPSAweDAwMTAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgd3hXaW5kb3dJRCBpZCA9IDAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3Qgd3hTdHJpbmcmIG5hbWUgPSB3eFN0YXR1c0xpbmVOYW1lU3Ry KTsNCg0KICAgIHZpcnR1YWwgdm9pZCBQb3NpdGlvblN0YXR1c0JhcigpOw0KDQoNCg0KDQoNCg0K ICAgIHN0YXRpYyB2b2lkIFVzZU5hdGl2ZVN0YXR1c0Jhcihib29sIHVzZU5hdGl2ZSkNCiAgICAg ICAgeyBtX3VzZU5hdGl2ZVN0YXR1c0JhciA9IHVzZU5hdGl2ZTsgfTsNCiAgICBzdGF0aWMgYm9v bCBVc2VzTmF0aXZlU3RhdHVzQmFyKCkNCiAgICAgICAgeyByZXR1cm4gbV91c2VOYXRpdmVTdGF0 dXNCYXI7IH07DQoNCg0KICAgIFdYSE1FTlUgR2V0V2luTWVudSgpIGNvbnN0IHsgcmV0dXJuIG1f aE1lbnU7IH0NCg0KICAgIHZpcnR1YWwgdm9pZCBSZW1vdmVDaGlsZCh3eFdpbmRvd0Jhc2UgKmNo aWxkKTsNCg0KDQogICAgYm9vbCBIYW5kbGVQYWludCgpOw0KICAgIGJvb2wgSGFuZGxlU2l6ZShp bnQgeCwgaW50IHksIFdYVUlOVCBmbGFnKTsNCiAgICBib29sIEhhbmRsZUNvbW1hbmQoV1hXT1JE IGlkLCBXWFdPUkQgY21kLCBXWEhXTkQgY29udHJvbCk7DQogICAgYm9vbCBIYW5kbGVNZW51U2Vs ZWN0KFdYV09SRCBuSXRlbSwgV1hXT1JEIG5GbGFncywgV1hITUVOVSBoTWVudSk7DQoNCiAgICBi b29sIE1TV0NyZWF0ZShpbnQgaWQsIHd4V2luZG93ICpwYXJlbnQsIGNvbnN0IGNoYXIgKndjbGFz cywNCiAgICAgICAgICAgICAgICAgICB3eFdpbmRvdyAqd3hfd2luLCBjb25zdCBjaGFyICp0aXRs ZSwNCiAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdo dCwgbG9uZyBzdHlsZSk7DQoNCg0KDQogICAgV1hIV05EIEdldFRvb2xUaXBDdHJsKCkgY29uc3Qg eyByZXR1cm4gbV9od25kVG9vbFRpcDsgfQ0KICAgIHZvaWQgU2V0VG9vbFRpcEN0cmwoV1hIV05E IGh3bmRUVCkgeyBtX2h3bmRUb29sVGlwID0gaHduZFRUOyB9DQoNCg0KcHJvdGVjdGVkOg0KDQog ICAgdm9pZCBJbml0KCk7DQoNCg0KICAgIHZvaWQgRG9TaG93V2luZG93KGludCBuU2hvd0NtZCk7 DQoNCg0KICAgIHZpcnR1YWwgdm9pZCBEb0dldENsaWVudFNpemUoaW50ICp3aWR0aCwgaW50ICpo ZWlnaHQpIGNvbnN0Ow0KICAgIHZpcnR1YWwgdm9pZCBEb0dldFNpemUoaW50ICp3aWR0aCwgaW50 ICpoZWlnaHQpIGNvbnN0Ow0KICAgIHZpcnR1YWwgdm9pZCBEb0dldFBvc2l0aW9uKGludCAqeCwg aW50ICp5KSBjb25zdDsNCg0KICAgIHZpcnR1YWwgdm9pZCBEb1NldENsaWVudFNpemUoaW50IHdp ZHRoLCBpbnQgaGVpZ2h0KTsNCg0KDQogICAgdm9pZCBEZXRhY2hNZW51QmFyKCk7DQoNCg0KDQog ICAgdmlydHVhbCB2b2lkIEludGVybmFsU2V0TWVudUJhcigpOw0KDQoNCiAgICB2b2lkIEljb25p emVDaGlsZEZyYW1lcyhib29sIGJJY29uaXplKTsNCg0KDQogICAgYm9vbCBNU1dUcmFuc2xhdGVN ZXNzYWdlKFdYTVNHKiBwTXNnKTsNCg0KDQogICAgbG9uZyBNU1dXaW5kb3dQcm9jKFdYVUlOVCBt ZXNzYWdlLCBXWFdQQVJBTSB3UGFyYW0sIFdYTFBBUkFNIGxQYXJhbSk7DQoNCiAgICBib29sIG1f aWNvbml6ZWQ7DQogICAgV1hISUNPTiBtX2RlZmF1bHRJY29uOw0KDQoNCiAgICBzdGF0aWMgYm9v bCBtX3VzZU5hdGl2ZVN0YXR1c0JhcjsNCg0KDQoNCiAgICB3eFdpbmRvdyAqbV93aW5MYXN0Rm9j dXNlZDsNCg0KDQogICAgbG9uZyBtX2ZzU3R5bGU7DQogICAgd3hSZWN0IG1fZnNPbGRTaXplOw0K ICAgIGxvbmcgbV9mc09sZFdpbmRvd1N0eWxlOw0KICAgIGludCBtX2ZzU3RhdHVzQmFyRmllbGRz Ow0KICAgIGludCBtX2ZzU3RhdHVzQmFySGVpZ2h0Ow0KICAgIGludCBtX2ZzVG9vbEJhckhlaWdo dDsNCg0KICAgIGJvb2wgbV9mc0lzTWF4aW1pemVkOw0KICAgIGJvb2wgbV9mc0lzU2hvd2luZzsN Cg0KcHJpdmF0ZToNCg0KICAgIFdYSFdORCBtX2h3bmRUb29sVGlwOw0KDQoNCiAgICBwcml2YXRl OiBzdGF0aWMgY29uc3Qgd3hFdmVudFRhYmxlRW50cnkgc21fZXZlbnRUYWJsZUVudHJpZXNbXTtw cm90ZWN0ZWQ6IHN0YXRpYyBjb25zdCB3eEV2ZW50VGFibGUgc21fZXZlbnRUYWJsZTsgdmlydHVh bCBjb25zdCB3eEV2ZW50VGFibGUqIEdldEV2ZW50VGFibGUoKSBjb25zdDsNCiAgICBwdWJsaWM6 IHN0YXRpYyB3eENsYXNzSW5mbyBzbV9jbGFzc3d4RnJhbWU7IHd4Q2xhc3NJbmZvICpHZXRDbGFz c0luZm8oKSBjb25zdCB7IHJldHVybiAmd3hGcmFtZTo6c21fY2xhc3N3eEZyYW1lOyB9DQp9Ow0K IyAyMjQgIi4uLy4uL2luY2x1ZGUvd3gvZnJhbWUuaCIgMg0KIyAzMiAiLi4vLi4vaW5jbHVkZS93 eC93eC5oIiAyDQojIDEgIi4uLy4uL2luY2x1ZGUvd3gvZGMuaCIgMQ0KIyAxNiAiLi4vLi4vaW5j bHVkZS93eC9kYy5oIg0KI3ByYWdtYSBpbnRlcmZhY2UgImRjYmFzZS5oIg0KIyAyOCAiLi4vLi4v aW5jbHVkZS93eC9kYy5oIg0KIyAxICIuLi8uLi9pbmNsdWRlL3d4L2JydXNoLmgiIDENCg0KDQoN Cg0KIyAxICIuLi8uLi9pbmNsdWRlL3d4L21zdy9icnVzaC5oIiAxDQojIDE2ICIuLi8uLi9pbmNs dWRlL3d4L21zdy9icnVzaC5oIg0KI3ByYWdtYSBpbnRlcmZhY2UgImJydXNoLmgiDQoNCg0KDQoN CiMgMSAiLi4vLi4vaW5jbHVkZS93eC9iaXRtYXAuaCIgMQ0KDQoNCg0KDQojIDEgIi4uLy4uL2lu Y2x1ZGUvd3gvbXN3L2JpdG1hcC5oIiAxDQojIDE2ICIuLi8uLi9pbmNsdWRlL3d4L21zdy9iaXRt YXAuaCINCiNwcmFnbWEgaW50ZXJmYWNlICJiaXRtYXAuaCINCg0KDQoNCg0KIyAxICIuLi8uLi9p bmNsdWRlL3d4L3BhbGV0dGUuaCIgMQ0KDQoNCg0KDQojIDEgIi4uLy4uL2luY2x1ZGUvd3gvbXN3 L3BhbGV0dGUuaCIgMQ0KIyAxNiAiLi4vLi4vaW5jbHVkZS93eC9tc3cvcGFsZXR0ZS5oIg0KI3By YWdtYSBpbnRlcmZhY2UgInBhbGV0dGUuaCINCg0KDQoNCg0KY2xhc3MgX19hdHRyaWJ1dGVfXygo ZGxsaW1wb3J0KSkgd3hQYWxldHRlOw0KDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQp KSB3eFBhbGV0dGVSZWZEYXRhOiBwdWJsaWMgd3hHRElSZWZEYXRhDQp7DQogICAgZnJpZW5kIGNs YXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4UGFsZXR0ZTsNCnB1YmxpYzoNCiAgICB3 eFBhbGV0dGVSZWZEYXRhKHZvaWQpOw0KICAgIH53eFBhbGV0dGVSZWZEYXRhKHZvaWQpOw0KcHJv dGVjdGVkOg0KIFdYSFBBTEVUVEUgbV9oUGFsZXR0ZTsNCn07DQoNCg0KDQpjbGFzcyBfX2F0dHJp YnV0ZV9fKChkbGxpbXBvcnQpKSB3eFBhbGV0dGU6IHB1YmxpYyB3eEdESU9iamVjdA0Kew0KICBw dWJsaWM6IHN0YXRpYyB3eENsYXNzSW5mbyBzbV9jbGFzc3d4UGFsZXR0ZTsgd3hDbGFzc0luZm8g KkdldENsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZ3eFBhbGV0dGU6OnNtX2NsYXNzd3hQYWxl dHRlOyB9DQoNCnB1YmxpYzoNCiAgd3hQYWxldHRlKHZvaWQpOw0KICBpbmxpbmUgd3hQYWxldHRl KGNvbnN0IHd4UGFsZXR0ZSYgcGFsZXR0ZSkgeyBSZWYocGFsZXR0ZSk7IH0NCg0KICB3eFBhbGV0 dGUoaW50IG4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJlZCwgY29uc3QgdW5zaWduZWQgY2hhciAq Z3JlZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJsdWUpOw0KICB+d3hQYWxldHRlKHZvaWQpOw0K ICBib29sIENyZWF0ZShpbnQgbiwgY29uc3QgdW5zaWduZWQgY2hhciAqcmVkLCBjb25zdCB1bnNp Z25lZCBjaGFyICpncmVlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqYmx1ZSk7DQogIGludCBHZXRQ aXhlbChjb25zdCB1bnNpZ25lZCBjaGFyIHJlZCwgY29uc3QgdW5zaWduZWQgY2hhciBncmVlbiwg Y29uc3QgdW5zaWduZWQgY2hhciBibHVlKSBjb25zdDsNCiAgYm9vbCBHZXRSR0IoaW50IHBpeGVs LCB1bnNpZ25lZCBjaGFyICpyZWQsIHVuc2lnbmVkIGNoYXIgKmdyZWVuLCB1bnNpZ25lZCBjaGFy ICpibHVlKSBjb25zdDsNCg0KICB2aXJ0dWFsIGJvb2wgT2sodm9pZCkgY29uc3QgeyByZXR1cm4g KG1fcmVmRGF0YSAhPSBfX251bGwpIDsgfQ0KDQogIGlubGluZSB3eFBhbGV0dGUmIG9wZXJhdG9y ID0gKGNvbnN0IHd4UGFsZXR0ZSYgcGFsZXR0ZSkgeyBpZiAoKnRoaXMgPT0gcGFsZXR0ZSkgcmV0 dXJuICgqdGhpcyk7IFJlZihwYWxldHRlKTsgcmV0dXJuICp0aGlzOyB9DQogIGlubGluZSBib29s IG9wZXJhdG9yID09IChjb25zdCB3eFBhbGV0dGUmIHBhbGV0dGUpIGNvbnN0IHsgcmV0dXJuIG1f cmVmRGF0YSA9PSBwYWxldHRlLm1fcmVmRGF0YTsgfQ0KICBpbmxpbmUgYm9vbCBvcGVyYXRvciAh PSAoY29uc3Qgd3hQYWxldHRlJiBwYWxldHRlKSBjb25zdCB7IHJldHVybiBtX3JlZkRhdGEgIT0g cGFsZXR0ZS5tX3JlZkRhdGE7IH0NCg0KICB2aXJ0dWFsIGJvb2wgRnJlZVJlc291cmNlKGJvb2wg Zm9yY2UgPSAwKTsNCg0KICBpbmxpbmUgV1hIUEFMRVRURSBHZXRIUEFMRVRURSh2b2lkKSBjb25z dCB7IHJldHVybiAoKCh3eFBhbGV0dGVSZWZEYXRhICopbV9yZWZEYXRhKSA/ICgod3hQYWxldHRl UmVmRGF0YSAqKW1fcmVmRGF0YSktPm1faFBhbGV0dGUgOiAwKTsgfQ0KICB2b2lkIFNldEhQQUxF VFRFKFdYSFBBTEVUVEUgcGFsKTsNCn07DQojIDYgIi4uLy4uL2luY2x1ZGUvd3gvcGFsZXR0ZS5o IiAyDQojIDIyICIuLi8uLi9pbmNsdWRlL3d4L21zdy9iaXRtYXAuaCIgMg0KDQpjbGFzcyBfX2F0 dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eERDOw0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1w b3J0KSkgd3hDb250cm9sOw0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hCaXRt YXA7DQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eEJpdG1hcEhhbmRsZXI7DQpj bGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eEljb247DQpjbGFzcyBfX2F0dHJpYnV0 ZV9fKChkbGxpbXBvcnQpKSB3eE1hc2s7DQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQp KSB3eEN1cnNvcjsNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4Q29udHJvbDsN CiMgMzkgIi4uLy4uL2luY2x1ZGUvd3gvbXN3L2JpdG1hcC5oIg0KY2xhc3MgX19hdHRyaWJ1dGVf XygoZGxsaW1wb3J0KSkgd3hCaXRtYXBSZWZEYXRhIDogcHVibGljIHd4R0RJSW1hZ2VSZWZEYXRh DQp7DQpwdWJsaWM6DQogICAgd3hCaXRtYXBSZWZEYXRhKCk7DQogICAgdmlydHVhbCB+d3hCaXRt YXBSZWZEYXRhKCkgeyBGcmVlKCk7IH0NCg0KICAgIHZpcnR1YWwgdm9pZCBGcmVlKCk7DQoNCnB1 YmxpYzoNCiAgICBpbnQgbV9udW1Db2xvcnM7DQogICAgd3hQYWxldHRlIG1fYml0bWFwUGFsZXR0 ZTsNCiAgICBpbnQgbV9xdWFsaXR5Ow0KDQoNCg0KDQoNCg0KDQogICAgd3hEQyAqbV9zZWxlY3Rl ZEludG87DQoNCg0KICAgIHd4TWFzayAqbV9iaXRtYXBNYXNrOw0KfTsNCg0KDQoNCg0KDQpjbGFz cyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eEJpdG1hcCA6IHB1YmxpYyB3eEdESUltYWdl DQp7DQpwdWJsaWM6DQoNCiAgICB3eEJpdG1hcCgpIHsgSW5pdCgpOyB9DQoNCg0KICAgIHd4Qml0 bWFwKGNvbnN0IHd4Qml0bWFwJiBiaXRtYXApIHsgSW5pdCgpOyBSZWYoYml0bWFwKTsgfQ0KDQoN CiAgICB3eEJpdG1hcChjb25zdCBjaGFyIGJpdHNbXSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBp bnQgZGVwdGggPSAxKTsNCg0KDQogICAgd3hCaXRtYXAoY29uc3QgY2hhciAqKmRhdGEpIHsgQ3Jl YXRlRnJvbVhwbShkYXRhKTsgfQ0KICAgIHd4Qml0bWFwKGNoYXIgKipkYXRhKSB7IENyZWF0ZUZy b21YcG0oKGNvbnN0IGNoYXIgKiopZGF0YSk7IH0NCg0KDQogICAgd3hCaXRtYXAoY29uc3Qgd3hT dHJpbmcmIG5hbWUsIGxvbmcgdHlwZSA9IHd4QklUTUFQX1RZUEVfQk1QX1JFU09VUkNFKTsNCg0K DQogICAgd3hCaXRtYXAodm9pZCAqZGF0YSwgbG9uZyB0eXBlLCBpbnQgd2lkdGgsIGludCBoZWln aHQsIGludCBkZXB0aCA9IDEpOw0KDQoNCiAgICB3eEJpdG1hcChpbnQgd2lkdGgsIGludCBoZWln aHQsIGludCBkZXB0aCA9IC0xKTsNCg0KDQoNCiAgICB3eEJpdG1hcChjb25zdCB3eEljb24mIGlj b24pIHsgSW5pdCgpOyBDb3B5RnJvbUljb24oaWNvbik7IH0NCg0KICAgIHd4Qml0bWFwJiBvcGVy YXRvcj0oY29uc3Qgd3hCaXRtYXAmIGJpdG1hcCkNCiAgICB7DQogICAgICAgIGlmICggbV9yZWZE YXRhICE9IGJpdG1hcC5tX3JlZkRhdGEgKQ0KICAgICAgICAgICAgUmVmKGJpdG1hcCk7DQogICAg ICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgICB3eEJpdG1hcCYgb3BlcmF0b3I9KGNvbnN0 IHd4SWNvbiYgaWNvbikNCiAgICB7DQogICAgICAgICh2b2lkKUNvcHlGcm9tSWNvbihpY29uKTsN Cg0KICAgICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogICAgd3hCaXRtYXAmIG9wZXJhdG9y PShjb25zdCB3eEN1cnNvciYgY3Vyc29yKQ0KICAgIHsNCiAgICAgICAgKHZvaWQpQ29weUZyb21D dXJzb3IoY3Vyc29yKTsNCg0KICAgICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogICAgdmly dHVhbCB+d3hCaXRtYXAoKTsNCg0KDQogICAgd3hCaXRtYXAgR2V0U3ViQml0bWFwKCBjb25zdCB3 eFJlY3QmIHJlY3QgKSBjb25zdDsNCg0KDQogICAgYm9vbCBDb3B5RnJvbUljb24oY29uc3Qgd3hJ Y29uJiBpY29uKTsNCg0KDQogICAgYm9vbCBDb3B5RnJvbUN1cnNvcihjb25zdCB3eEN1cnNvciYg Y3Vyc29yKTsNCg0KICAgIHZpcnR1YWwgYm9vbCBDcmVhdGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0 LCBpbnQgZGVwdGggPSAtMSk7DQogICAgdmlydHVhbCBib29sIENyZWF0ZSh2b2lkICpkYXRhLCBs b25nIHR5cGUsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGRlcHRoID0gMSk7DQogICAgdmly dHVhbCBib29sIExvYWRGaWxlKGNvbnN0IHd4U3RyaW5nJiBuYW1lLCBsb25nIHR5cGUgPSB3eEJJ VE1BUF9UWVBFX0JNUF9SRVNPVVJDRSk7DQogICAgdmlydHVhbCBib29sIFNhdmVGaWxlKGNvbnN0 IHd4U3RyaW5nJiBuYW1lLCBpbnQgdHlwZSwgY29uc3Qgd3hQYWxldHRlICpjbWFwID0gX19udWxs KTsNCg0KICAgIHd4Qml0bWFwUmVmRGF0YSAqR2V0Qml0bWFwRGF0YSgpIGNvbnN0IHsgcmV0dXJu ICh3eEJpdG1hcFJlZkRhdGEgKiltX3JlZkRhdGE7IH0NCg0KICAgIGludCBHZXRRdWFsaXR5KCkg Y29uc3QgeyByZXR1cm4gKEdldEJpdG1hcERhdGEoKSA/IEdldEJpdG1hcERhdGEoKS0+bV9xdWFs aXR5IDogMCk7IH0NCiAgICB2b2lkIFNldFF1YWxpdHkoaW50IHEpOw0KDQogICAgd3hQYWxldHRl KiBHZXRQYWxldHRlKCkgY29uc3QgeyByZXR1cm4gKEdldEJpdG1hcERhdGEoKSA/ICgmIEdldEJp dG1hcERhdGEoKS0+bV9iaXRtYXBQYWxldHRlKSA6ICh3eFBhbGV0dGUqKSBfX251bGwpOyB9DQog ICAgdm9pZCBTZXRQYWxldHRlKGNvbnN0IHd4UGFsZXR0ZSYgcGFsZXR0ZSk7DQoNCiAgICB3eE1h c2sgKkdldE1hc2soKSBjb25zdCB7IHJldHVybiAoR2V0Qml0bWFwRGF0YSgpID8gR2V0Qml0bWFw RGF0YSgpLT5tX2JpdG1hcE1hc2sgOiAod3hNYXNrKikgX19udWxsKTsgfQ0KICAgIHZvaWQgU2V0 TWFzayh3eE1hc2sgKm1hc2spIDsNCg0KICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCB3eEJpdG1h cCYgYml0bWFwKSBjb25zdCB7IHJldHVybiBtX3JlZkRhdGEgPT0gYml0bWFwLm1fcmVmRGF0YTsg fQ0KICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCB3eEJpdG1hcCYgYml0bWFwKSBjb25zdCB7IHJl dHVybiBtX3JlZkRhdGEgIT0gYml0bWFwLm1fcmVmRGF0YTsgfQ0KIyAxNTggIi4uLy4uL2luY2x1 ZGUvd3gvbXN3L2JpdG1hcC5oIg0KcHVibGljOg0KICAgIHZvaWQgU2V0SEJJVE1BUChXWEhCSVRN QVAgYm1wKSB7IFNldEhhbmRsZSgoV1hIQU5ETEUpYm1wKTsgfQ0KICAgIFdYSEJJVE1BUCBHZXRI QklUTUFQKCkgY29uc3QgeyByZXR1cm4gKFdYSEJJVE1BUClHZXRIYW5kbGUoKTsgfQ0KDQogICAg dm9pZCBTZXRTZWxlY3RlZEludG8od3hEQyAqZGMpIHsgaWYgKEdldEJpdG1hcERhdGEoKSkgR2V0 Qml0bWFwRGF0YSgpLT5tX3NlbGVjdGVkSW50byA9IGRjOyB9DQogICAgd3hEQyAqR2V0U2VsZWN0 ZWRJbnRvKCkgY29uc3QgeyByZXR1cm4gKEdldEJpdG1hcERhdGEoKSA/IEdldEJpdG1hcERhdGEo KS0+bV9zZWxlY3RlZEludG8gOiAod3hEQyopIF9fbnVsbCk7IH0NCiMgMTc3ICIuLi8uLi9pbmNs dWRlL3d4L21zdy9iaXRtYXAuaCINCiAgICB3eEJpdG1hcCBHZXRCaXRtYXBGb3JEQyh3eERDJiBk YykgY29uc3Q7DQoNCnByb3RlY3RlZDoNCg0KICAgIHZvaWQgSW5pdCgpOw0KDQogICAgdmlydHVh bCB3eEdESUltYWdlUmVmRGF0YSAqQ3JlYXRlRGF0YSgpIGNvbnN0DQogICAgICAgIHsgcmV0dXJu IG5ldyB3eEJpdG1hcFJlZkRhdGE7IH0NCg0KDQogICAgYm9vbCBDcmVhdGVGcm9tWHBtKGNvbnN0 IGNoYXIgKipiaXRzKTsNCg0KcHJpdmF0ZToNCg0KDQogICAgYm9vbCBDb3B5RnJvbUljb25PckN1 cnNvcihjb25zdCB3eEdESUltYWdlJiBpY29uKTsNCg0KDQogICAgcHVibGljOiBzdGF0aWMgd3hD bGFzc0luZm8gc21fY2xhc3N3eEJpdG1hcDsgd3hDbGFzc0luZm8gKkdldENsYXNzSW5mbygpIGNv bnN0IHsgcmV0dXJuICZ3eEJpdG1hcDo6c21fY2xhc3N3eEJpdG1hcDsgfQ0KfTsNCg0KDQoNCg0K DQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eE1hc2sgOiBwdWJsaWMgd3hPYmpl Y3QNCnsNCnB1YmxpYzoNCiAgICB3eE1hc2soKTsNCg0KDQoNCiAgICB3eE1hc2soY29uc3Qgd3hC aXRtYXAmIGJpdG1hcCwgY29uc3Qgd3hDb2xvdXImIGNvbG91cik7DQoNCg0KDQogICAgd3hNYXNr KGNvbnN0IHd4Qml0bWFwJiBiaXRtYXAsIGludCBwYWxldHRlSW5kZXgpOw0KDQoNCiAgICB3eE1h c2soY29uc3Qgd3hCaXRtYXAmIGJpdG1hcCk7DQoNCg0KICAgIHd4TWFzayhXWEhCSVRNQVAgaGJt cCkgeyBtX21hc2tCaXRtYXAgPSBoYm1wOyB9DQoNCiAgICB2aXJ0dWFsIH53eE1hc2soKTsNCg0K ICAgIGJvb2wgQ3JlYXRlKGNvbnN0IHd4Qml0bWFwJiBiaXRtYXAsIGNvbnN0IHd4Q29sb3VyJiBj b2xvdXIpOw0KICAgIGJvb2wgQ3JlYXRlKGNvbnN0IHd4Qml0bWFwJiBiaXRtYXAsIGludCBwYWxl dHRlSW5kZXgpOw0KICAgIGJvb2wgQ3JlYXRlKGNvbnN0IHd4Qml0bWFwJiBiaXRtYXApOw0KDQoN CiAgICBXWEhCSVRNQVAgR2V0TWFza0JpdG1hcCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFza0JpdG1h cDsgfQ0KICAgIHZvaWQgU2V0TWFza0JpdG1hcChXWEhCSVRNQVAgYm1wKSB7IG1fbWFza0JpdG1h cCA9IGJtcDsgfQ0KDQpwcm90ZWN0ZWQ6DQogICAgV1hIQklUTUFQIG1fbWFza0JpdG1hcDsNCg0K ICAgIHB1YmxpYzogc3RhdGljIHd4Q2xhc3NJbmZvIHNtX2NsYXNzd3hNYXNrOyB3eENsYXNzSW5m byAqR2V0Q2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnd4TWFzazo6c21fY2xhc3N3eE1hc2s7 IH0NCn07DQoNCg0KDQoNCg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hCaXRt YXBIYW5kbGVyIDogcHVibGljIHd4R0RJSW1hZ2VIYW5kbGVyDQp7DQpwdWJsaWM6DQogICAgd3hC aXRtYXBIYW5kbGVyKCkgeyBtX3R5cGUgPSB3eEJJVE1BUF9UWVBFX0lOVkFMSUQ7IH0NCiAgICB3 eEJpdG1hcEhhbmRsZXIoY29uc3Qgd3hTdHJpbmcmIG5hbWUsIGNvbnN0IHd4U3RyaW5nJiBleHQs IGxvbmcgdHlwZSkNCiAgICAgICAgOiB3eEdESUltYWdlSGFuZGxlcihuYW1lLCBleHQsIHR5cGUp DQogICAgew0KICAgIH0NCg0KDQoNCiAgICB2aXJ0dWFsIGJvb2wgQ3JlYXRlKHd4Qml0bWFwICpi aXRtYXAsDQogICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhLA0KICAgICAgICAgICAg ICAgICAgICAgICAgbG9uZyBmbGFncywNCiAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0 aCwgaW50IGhlaWdodCwgaW50IGRlcHRoID0gMSk7DQogICAgdmlydHVhbCBib29sIExvYWRGaWxl KHd4Qml0bWFwICpiaXRtYXAsDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHd4U3Ry aW5nJiBuYW1lLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGZsYWdzLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgZGVzaXJlZFdpZHRoLCBpbnQgZGVzaXJlZEhlaWdodCk7 DQogICAgdmlydHVhbCBib29sIFNhdmVGaWxlKHd4Qml0bWFwICpiaXRtYXAsDQogICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHd4U3RyaW5nJiBuYW1lLA0KICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgdHlwZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd3hQYWxl dHRlICpwYWxldHRlID0gX19udWxsKTsNCg0KICAgIHZpcnR1YWwgYm9vbCBDcmVhdGUod3hHRElJ bWFnZSAqaW1hZ2UsDQogICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhLA0KICAgICAg ICAgICAgICAgICAgICAgICAgbG9uZyBmbGFncywNCiAgICAgICAgICAgICAgICAgICAgICAgIGlu dCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGRlcHRoID0gMSk7DQogICAgdmlydHVhbCBib29sIExv YWQod3hHRElJbWFnZSAqaW1hZ2UsDQogICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd3hTdHJp bmcmIG5hbWUsDQogICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFncywNCiAgICAgICAgICAg ICAgICAgICAgICBpbnQgZGVzaXJlZFdpZHRoLCBpbnQgZGVzaXJlZEhlaWdodCk7DQogICAgdmly dHVhbCBib29sIFNhdmUod3hHRElJbWFnZSAqaW1hZ2UsDQogICAgICAgICAgICAgICAgICAgICAg Y29uc3Qgd3hTdHJpbmcmIG5hbWUsDQogICAgICAgICAgICAgICAgICAgICAgaW50IHR5cGUpOw0K DQpwcml2YXRlOg0KICAgIHB1YmxpYzogc3RhdGljIHd4Q2xhc3NJbmZvIHNtX2NsYXNzd3hCaXRt YXBIYW5kbGVyOyB3eENsYXNzSW5mbyAqR2V0Q2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnd4 Qml0bWFwSGFuZGxlcjo6c21fY2xhc3N3eEJpdG1hcEhhbmRsZXI7IH0NCn07DQojIDYgIi4uLy4u L2luY2x1ZGUvd3gvYml0bWFwLmgiIDINCiMgMjIgIi4uLy4uL2luY2x1ZGUvd3gvbXN3L2JydXNo LmgiIDINCg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hCcnVzaDsNCg0KY2xh c3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hCcnVzaFJlZkRhdGE6IHB1YmxpYyB3eEdE SVJlZkRhdGENCnsNCiAgICBmcmllbmQgY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkg d3hCcnVzaDsNCnB1YmxpYzoNCiAgICB3eEJydXNoUmVmRGF0YSh2b2lkKTsNCiAgICB3eEJydXNo UmVmRGF0YShjb25zdCB3eEJydXNoUmVmRGF0YSYgZGF0YSk7DQogICAgfnd4QnJ1c2hSZWZEYXRh KHZvaWQpOw0KDQpwcm90ZWN0ZWQ6DQogIGludCBtX3N0eWxlOw0KICB3eEJpdG1hcCBtX3N0aXBw bGUgOw0KICB3eENvbG91ciBtX2NvbG91cjsNCiAgV1hIQlJVU0ggbV9oQnJ1c2g7DQp9Ow0KDQoN Cg0KDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eEJydXNoOiBwdWJsaWMgd3hH RElPYmplY3QNCnsNCiAgcHVibGljOiBzdGF0aWMgd3hDbGFzc0luZm8gc21fY2xhc3N3eEJydXNo OyB3eENsYXNzSW5mbyAqR2V0Q2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnd4QnJ1c2g6OnNt X2NsYXNzd3hCcnVzaDsgfQ0KDQpwdWJsaWM6DQogIHd4QnJ1c2godm9pZCk7DQogIHd4QnJ1c2go Y29uc3Qgd3hDb2xvdXImIGNvbCwgaW50IHN0eWxlKTsNCiAgd3hCcnVzaChjb25zdCB3eEJpdG1h cCYgc3RpcHBsZSk7DQogIGlubGluZSB3eEJydXNoKGNvbnN0IHd4QnJ1c2gmIGJydXNoKSB7IFJl ZihicnVzaCk7IH0NCiAgfnd4QnJ1c2godm9pZCk7DQoNCiAgdmlydHVhbCB2b2lkIFNldENvbG91 cihjb25zdCB3eENvbG91ciYgY29sKSA7DQogIHZpcnR1YWwgdm9pZCBTZXRDb2xvdXIodW5zaWdu ZWQgY2hhciByLCB1bnNpZ25lZCBjaGFyIGcsIHVuc2lnbmVkIGNoYXIgYikgOw0KICB2aXJ0dWFs IHZvaWQgU2V0U3R5bGUoaW50IHN0eWxlKSA7DQogIHZpcnR1YWwgdm9pZCBTZXRTdGlwcGxlKGNv bnN0IHd4Qml0bWFwJiBzdGlwcGxlKSA7DQoNCiAgaW5saW5lIHd4QnJ1c2gmIG9wZXJhdG9yID0g KGNvbnN0IHd4QnJ1c2gmIGJydXNoKSB7IGlmICgqdGhpcyA9PSBicnVzaCkgcmV0dXJuICgqdGhp cyk7IFJlZihicnVzaCk7IHJldHVybiAqdGhpczsgfQ0KICBpbmxpbmUgYm9vbCBvcGVyYXRvciA9 PSAoY29uc3Qgd3hCcnVzaCYgYnJ1c2gpIGNvbnN0IHsgcmV0dXJuIG1fcmVmRGF0YSA9PSBicnVz aC5tX3JlZkRhdGE7IH0NCiAgaW5saW5lIGJvb2wgb3BlcmF0b3IgIT0gKGNvbnN0IHd4QnJ1c2gm IGJydXNoKSBjb25zdCB7IHJldHVybiBtX3JlZkRhdGEgIT0gYnJ1c2gubV9yZWZEYXRhOyB9DQoN CiAgaW5saW5lIHd4Q29sb3VyJiBHZXRDb2xvdXIodm9pZCkgY29uc3QgeyByZXR1cm4gKCgod3hC cnVzaFJlZkRhdGEgKiltX3JlZkRhdGEpID8gKCh3eEJydXNoUmVmRGF0YSAqKW1fcmVmRGF0YSkt Pm1fY29sb3VyIDogd3hOdWxsQ29sb3VyKTsgfTsNCiAgaW5saW5lIGludCBHZXRTdHlsZSh2b2lk KSBjb25zdCB7IHJldHVybiAoKCh3eEJydXNoUmVmRGF0YSAqKW1fcmVmRGF0YSkgPyAoKHd4QnJ1 c2hSZWZEYXRhICopbV9yZWZEYXRhKS0+bV9zdHlsZSA6IDApOyB9Ow0KICBpbmxpbmUgd3hCaXRt YXAgKkdldFN0aXBwbGUodm9pZCkgY29uc3QgeyByZXR1cm4gKCgod3hCcnVzaFJlZkRhdGEgKilt X3JlZkRhdGEpID8gJiAoKHd4QnJ1c2hSZWZEYXRhICopbV9yZWZEYXRhKS0+bV9zdGlwcGxlIDog MCk7IH07DQoNCiAgdmlydHVhbCBib29sIE9rKHZvaWQpIGNvbnN0IHsgcmV0dXJuIChtX3JlZkRh dGEgIT0gX19udWxsKSA7IH0NCg0KDQogIGJvb2wgUmVhbGl6ZVJlc291cmNlKHZvaWQpOw0KICBX WEhBTkRMRSBHZXRSZXNvdXJjZUhhbmRsZSh2b2lkKSA7DQogIGJvb2wgRnJlZVJlc291cmNlKGJv b2wgZm9yY2UgPSAwKTsNCiAgYm9vbCBJc0ZyZWUoKSBjb25zdDsNCiAgdm9pZCBVbnNoYXJlKCk7 DQp9Ow0KIyA2ICIuLi8uLi9pbmNsdWRlL3d4L2JydXNoLmgiIDINCiMgMjkgIi4uLy4uL2luY2x1 ZGUvd3gvZGMuaCIgMg0KIyAxICIuLi8uLi9pbmNsdWRlL3d4L3Blbi5oIiAxDQoNCg0KDQoNCiMg MSAiLi4vLi4vaW5jbHVkZS93eC9tc3cvcGVuLmgiIDENCiMgMTYgIi4uLy4uL2luY2x1ZGUvd3gv bXN3L3Blbi5oIg0KI3ByYWdtYSBpbnRlcmZhY2UgInBlbi5oIg0KDQoNCg0KDQoNCnR5cGVkZWYg V1hEV09SRCB3eE1TV0Rhc2g7DQoNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4 UGVuOw0KDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eFBlblJlZkRhdGE6IHB1 YmxpYyB3eEdESVJlZkRhdGENCnsNCiAgICBmcmllbmQgY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxs aW1wb3J0KSkgd3hQZW47DQpwdWJsaWM6DQogICAgd3hQZW5SZWZEYXRhKCk7DQogICAgd3hQZW5S ZWZEYXRhKGNvbnN0IHd4UGVuUmVmRGF0YSYgZGF0YSk7DQogICAgfnd4UGVuUmVmRGF0YSgpOw0K DQpwcm90ZWN0ZWQ6DQogIGludCBtX3dpZHRoOw0KICBpbnQgbV9zdHlsZTsNCiAgaW50IG1fam9p biA7DQogIGludCBtX2NhcCA7DQogIHd4Qml0bWFwIG1fc3RpcHBsZSA7DQogIGludCBtX25iRGFz aCA7DQogIHd4TVNXRGFzaCAqIG1fZGFzaCA7DQogIHd4Q29sb3VyIG1fY29sb3VyOw0KICBXWEhQ RU4gbV9oUGVuOw0KfTsNCg0KDQoNCg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkg d3hQZW46IHB1YmxpYyB3eEdESU9iamVjdA0Kew0KICBwdWJsaWM6IHN0YXRpYyB3eENsYXNzSW5m byBzbV9jbGFzc3d4UGVuOyB3eENsYXNzSW5mbyAqR2V0Q2xhc3NJbmZvKCkgY29uc3QgeyByZXR1 cm4gJnd4UGVuOjpzbV9jbGFzc3d4UGVuOyB9DQpwdWJsaWM6DQogIHd4UGVuKCk7DQogIHd4UGVu KGNvbnN0IHd4Q29sb3VyJiBjb2wsIGludCB3aWR0aCwgaW50IHN0eWxlKTsNCiAgd3hQZW4oY29u c3Qgd3hCaXRtYXAmIHN0aXBwbGUsIGludCB3aWR0aCk7DQogIGlubGluZSB3eFBlbihjb25zdCB3 eFBlbiYgcGVuKSB7IFJlZihwZW4pOyB9DQogIH53eFBlbigpOw0KDQogIGlubGluZSB3eFBlbiYg b3BlcmF0b3IgPSAoY29uc3Qgd3hQZW4mIHBlbikgeyBpZiAoKnRoaXMgPT0gcGVuKSByZXR1cm4g KCp0aGlzKTsgUmVmKHBlbik7IHJldHVybiAqdGhpczsgfQ0KICBpbmxpbmUgYm9vbCBvcGVyYXRv ciA9PSAoY29uc3Qgd3hQZW4mIHBlbikgY29uc3QgeyByZXR1cm4gbV9yZWZEYXRhID09IHBlbi5t X3JlZkRhdGE7IH0NCiAgaW5saW5lIGJvb2wgb3BlcmF0b3IgIT0gKGNvbnN0IHd4UGVuJiBwZW4p IGNvbnN0IHsgcmV0dXJuIG1fcmVmRGF0YSAhPSBwZW4ubV9yZWZEYXRhOyB9DQoNCiAgdmlydHVh bCBib29sIE9rKCkgY29uc3QgeyByZXR1cm4gKG1fcmVmRGF0YSAhPSBfX251bGwpIDsgfQ0KDQoN CiAgdm9pZCBTZXRDb2xvdXIoY29uc3Qgd3hDb2xvdXImIGNvbCkgOw0KICB2b2lkIFNldENvbG91 cih1bnNpZ25lZCBjaGFyIHIsIHVuc2lnbmVkIGNoYXIgZywgdW5zaWduZWQgY2hhciBiKTsNCg0K ICB2b2lkIFNldFdpZHRoKGludCB3aWR0aCkgOw0KICB2b2lkIFNldFN0eWxlKGludCBzdHlsZSkg Ow0KICB2b2lkIFNldFN0aXBwbGUoY29uc3Qgd3hCaXRtYXAmIHN0aXBwbGUpIDsNCiAgdm9pZCBT ZXREYXNoZXMoaW50IG5iX2Rhc2hlcywgY29uc3Qgd3hEYXNoICpkYXNoKSA7DQogIHZvaWQgU2V0 Sm9pbihpbnQgam9pbikgOw0KICB2b2lkIFNldENhcChpbnQgY2FwKSA7DQoNCiAgaW5saW5lIHd4 Q29sb3VyJiBHZXRDb2xvdXIoKSBjb25zdCB7IHJldHVybiAoKCh3eFBlblJlZkRhdGEgKiltX3Jl ZkRhdGEpID8gKCh3eFBlblJlZkRhdGEgKiltX3JlZkRhdGEpLT5tX2NvbG91ciA6IHd4TnVsbENv bG91cik7IH07DQogIGlubGluZSBpbnQgR2V0V2lkdGgoKSBjb25zdCB7IHJldHVybiAoKCh3eFBl blJlZkRhdGEgKiltX3JlZkRhdGEpID8gKCh3eFBlblJlZkRhdGEgKiltX3JlZkRhdGEpLT5tX3dp ZHRoIDogMCk7IH07DQogIGlubGluZSBpbnQgR2V0U3R5bGUoKSBjb25zdCB7IHJldHVybiAoKCh3 eFBlblJlZkRhdGEgKiltX3JlZkRhdGEpID8gKCh3eFBlblJlZkRhdGEgKiltX3JlZkRhdGEpLT5t X3N0eWxlIDogMCk7IH07DQogIGlubGluZSBpbnQgR2V0Sm9pbigpIGNvbnN0IHsgcmV0dXJuICgo KHd4UGVuUmVmRGF0YSAqKW1fcmVmRGF0YSkgPyAoKHd4UGVuUmVmRGF0YSAqKW1fcmVmRGF0YSkt Pm1fam9pbiA6IDApOyB9Ow0KICBpbmxpbmUgaW50IEdldENhcCgpIGNvbnN0IHsgcmV0dXJuICgo KHd4UGVuUmVmRGF0YSAqKW1fcmVmRGF0YSkgPyAoKHd4UGVuUmVmRGF0YSAqKW1fcmVmRGF0YSkt Pm1fY2FwIDogMCk7IH07DQogIGlubGluZSBpbnQgR2V0RGFzaGVzKHd4RGFzaCAqKnB0cikgY29u c3QNCiAgew0KICAgICpwdHIgPSAoKCh3eFBlblJlZkRhdGEgKiltX3JlZkRhdGEpID8gKHd4RGFz aCopKCh3eFBlblJlZkRhdGEgKiltX3JlZkRhdGEpLT5tX2Rhc2ggOiAod3hEYXNoKikgX19udWxs KTsNCiAgICByZXR1cm4gKCgod3hQZW5SZWZEYXRhICopbV9yZWZEYXRhKSA/ICgod3hQZW5SZWZE YXRhICopbV9yZWZEYXRhKS0+bV9uYkRhc2ggOiAwKTsNCiAgfQ0KDQogIGlubGluZSB3eEJpdG1h cCAqR2V0U3RpcHBsZSgpIGNvbnN0IHsgcmV0dXJuICgoKHd4UGVuUmVmRGF0YSAqKW1fcmVmRGF0 YSkgPyAoJiAoKHd4UGVuUmVmRGF0YSAqKW1fcmVmRGF0YSktPm1fc3RpcHBsZSkgOiAod3hCaXRt YXAqKSBfX251bGwpOyB9Ow0KDQoNCiAgYm9vbCBSZWFsaXplUmVzb3VyY2UoKTsNCiAgYm9vbCBG cmVlUmVzb3VyY2UoYm9vbCBmb3JjZSA9IDApOw0KICBXWEhBTkRMRSBHZXRSZXNvdXJjZUhhbmRs ZSgpIDsNCiAgYm9vbCBJc0ZyZWUoKSBjb25zdDsNCiAgdm9pZCBVbnNoYXJlKCk7DQp9Ow0KDQpp bnQgd3gybXNQZW5TdHlsZShpbnQgd3hfc3R5bGUpOw0KIyA2ICIuLi8uLi9pbmNsdWRlL3d4L3Bl bi5oIiAyDQojIDMwICIuLi8uLi9pbmNsdWRlL3d4L2RjLmgiIDINCiMgMzggIi4uLy4uL2luY2x1 ZGUvd3gvZGMuaCINCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGV4dGVybiBpbnQgd3hQYWdl TnVtYmVyOw0KDQoNCg0KDQoNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4RENC YXNlIDogcHVibGljIHd4T2JqZWN0DQp7DQpwdWJsaWM6DQogICAgd3hEQ0Jhc2UoKQ0KICAgIHsN CiAgICAgICAgbV9jbGlwcGluZyA9IDA7DQogICAgICAgIG1fb2sgPSAxOw0KDQogICAgICAgIFJl c2V0Qm91bmRpbmdCb3goKTsNCg0KICAgICAgICBtX3NpZ25YID0gbV9zaWduWSA9IDE7DQoNCiAg ICAgICAgbV9sb2dpY2FsT3JpZ2luWCA9IG1fbG9naWNhbE9yaWdpblkgPQ0KICAgICAgICBtX2Rl dmljZU9yaWdpblggPSBtX2RldmljZU9yaWdpblkgPSAwOw0KDQogICAgICAgIG1fbG9naWNhbFNj YWxlWCA9IG1fbG9naWNhbFNjYWxlWSA9DQogICAgICAgIG1fdXNlclNjYWxlWCA9IG1fdXNlclNj YWxlWSA9DQogICAgICAgIG1fc2NhbGVYID0gbV9zY2FsZVkgPSAxLjA7DQoNCiAgICAgICAgbV9s b2dpY2FsRnVuY3Rpb24gPSB3eENPUFk7DQoNCiAgICAgICAgbV9iYWNrZ3JvdW5kTW9kZSA9IHd4 VFJBTlNQQVJFTlQ7DQoNCiAgICAgICAgbV9tYXBwaW5nTW9kZSA9IDE7DQoNCiAgICAgICAgbV9i YWNrZ3JvdW5kQnJ1c2ggPSAqd3hUUkFOU1BBUkVOVF9CUlVTSDsNCg0KICAgICAgICBtX3RleHRG b3JlZ3JvdW5kQ29sb3VyID0gKnd4QkxBQ0s7DQogICAgICAgIG1fdGV4dEJhY2tncm91bmRDb2xv dXIgPSAqd3hXSElURTsNCg0KICAgICAgICBtX2NvbG91ciA9IHd4Q29sb3VyRGlzcGxheSgpOw0K ICAgIH0NCg0KICAgIH53eERDQmFzZSgpIHsgfQ0KDQogICAgdmlydHVhbCB2b2lkIEJlZ2luRHJh d2luZygpIHsgfQ0KICAgIHZpcnR1YWwgdm9pZCBFbmREcmF3aW5nKCkgeyB9DQoNCg0KDQoNCiAg ICB2b2lkIEZsb29kRmlsbCh3eENvb3JkIHgsIHd4Q29vcmQgeSwgY29uc3Qgd3hDb2xvdXImIGNv bCwNCiAgICAgICAgICAgICAgICAgICBpbnQgc3R5bGUgPSAxKQ0KICAgICAgICB7IERvRmxvb2RG aWxsKHgsIHksIGNvbCwgc3R5bGUpOyB9DQogICAgdm9pZCBGbG9vZEZpbGwoY29uc3Qgd3hQb2lu dCYgcHQsIGNvbnN0IHd4Q29sb3VyJiBjb2wsDQogICAgICAgICAgICAgICAgICAgaW50IHN0eWxl ID0gMSkNCiAgICAgICAgeyBEb0Zsb29kRmlsbChwdC54LCBwdC55LCBjb2wsIHN0eWxlKTsgfQ0K DQogICAgYm9vbCBHZXRQaXhlbCh3eENvb3JkIHgsIHd4Q29vcmQgeSwgd3hDb2xvdXIgKmNvbCkg Y29uc3QNCiAgICAgICAgeyByZXR1cm4gRG9HZXRQaXhlbCh4LCB5LCBjb2wpOyB9DQogICAgYm9v bCBHZXRQaXhlbChjb25zdCB3eFBvaW50JiBwdCwgd3hDb2xvdXIgKmNvbCkgY29uc3QNCiAgICAg ICAgeyByZXR1cm4gRG9HZXRQaXhlbChwdC54LCBwdC55LCBjb2wpOyB9DQoNCiAgICB2b2lkIERy YXdMaW5lKHd4Q29vcmQgeDEsIHd4Q29vcmQgeTEsIHd4Q29vcmQgeDIsIHd4Q29vcmQgeTIpDQog ICAgICAgIHsgRG9EcmF3TGluZSh4MSwgeTEsIHgyLCB5Mik7IH0NCiAgICB2b2lkIERyYXdMaW5l KGNvbnN0IHd4UG9pbnQmIHB0MSwgY29uc3Qgd3hQb2ludCYgcHQyKQ0KICAgICAgICB7IERvRHJh d0xpbmUocHQxLngsIHB0MS55LCBwdDIueCwgcHQyLnkpOyB9DQoNCiAgICB2b2lkIENyb3NzSGFp cih3eENvb3JkIHgsIHd4Q29vcmQgeSkNCiAgICAgICAgeyBEb0Nyb3NzSGFpcih4LCB5KTsgfQ0K ICAgIHZvaWQgQ3Jvc3NIYWlyKGNvbnN0IHd4UG9pbnQmIHB0KQ0KICAgICAgICB7IERvQ3Jvc3NI YWlyKHB0LngsIHB0LnkpOyB9DQoNCiAgICB2b2lkIERyYXdBcmMod3hDb29yZCB4MSwgd3hDb29y ZCB5MSwgd3hDb29yZCB4Miwgd3hDb29yZCB5MiwNCiAgICAgICAgICAgICAgICAgd3hDb29yZCB4 Yywgd3hDb29yZCB5YykNCiAgICAgICAgeyBEb0RyYXdBcmMoeDEsIHkxLCB4MiwgeTIsIHhjLCB5 Yyk7IH0NCiAgICB2b2lkIERyYXdBcmMoY29uc3Qgd3hQb2ludCYgcHQxLCBjb25zdCB3eFBvaW50 JiBwdDIsIGNvbnN0IHd4UG9pbnQmIGNlbnRyZSkNCiAgICAgICAgeyBEb0RyYXdBcmMocHQxLngs IHB0MS55LCBwdDIueCwgcHQyLnksIGNlbnRyZS54LCBjZW50cmUueSk7IH0NCg0KICAgIHZvaWQg RHJhd0NoZWNrTWFyayh3eENvb3JkIHgsIHd4Q29vcmQgeSwNCiAgICAgICAgICAgICAgICAgICAg ICAgd3hDb29yZCB3aWR0aCwgd3hDb29yZCBoZWlnaHQpDQogICAgICAgIHsgRG9EcmF3Q2hlY2tN YXJrKHgsIHksIHdpZHRoLCBoZWlnaHQpOyB9DQogICAgdm9pZCBEcmF3Q2hlY2tNYXJrKGNvbnN0 IHd4UmVjdCYgcmVjdCkNCiAgICAgICAgeyBEb0RyYXdDaGVja01hcmsocmVjdC54LCByZWN0Lnks IHJlY3Qud2lkdGgsIHJlY3QuaGVpZ2h0KTsgfQ0KDQogICAgdm9pZCBEcmF3RWxsaXB0aWNBcmMo d3hDb29yZCB4LCB3eENvb3JkIHksIHd4Q29vcmQgdywgd3hDb29yZCBoLA0KICAgICAgICAgICAg ICAgICAgICAgICAgIGRvdWJsZSBzYSwgZG91YmxlIGVhKQ0KICAgICAgICB7IERvRHJhd0VsbGlw dGljQXJjKHgsIHksIHcsIGgsIHNhLCBlYSk7IH0NCiAgICB2b2lkIERyYXdFbGxpcHRpY0FyYyhj b25zdCB3eFBvaW50JiBwdCwgY29uc3Qgd3hTaXplJiBzeiwNCiAgICAgICAgICAgICAgICAgICAg ICAgICBkb3VibGUgc2EsIGRvdWJsZSBlYSkNCiAgICAgICAgeyBEb0RyYXdFbGxpcHRpY0FyYyhw dC54LCBwdC55LCBzei54LCBzei55LCBzYSwgZWEpOyB9DQoNCiAgICB2b2lkIERyYXdQb2ludCh3 eENvb3JkIHgsIHd4Q29vcmQgeSkNCiAgICAgICAgeyBEb0RyYXdQb2ludCh4LCB5KTsgfQ0KICAg IHZvaWQgRHJhd1BvaW50KGNvbnN0IHd4UG9pbnQmIHB0KQ0KICAgICAgICB7IERvRHJhd1BvaW50 KHB0LngsIHB0LnkpOyB9DQoNCiAgICB2b2lkIERyYXdMaW5lcyhpbnQgbiwgd3hQb2ludCBwb2lu dHNbXSwNCiAgICAgICAgICAgICAgICAgICB3eENvb3JkIHhvZmZzZXQgPSAwLCB3eENvb3JkIHlv ZmZzZXQgPSAwKQ0KICAgICAgICB7IERvRHJhd0xpbmVzKG4sIHBvaW50cywgeG9mZnNldCwgeW9m ZnNldCk7IH0NCiAgICB2b2lkIERyYXdMaW5lcyhjb25zdCB3eExpc3QgKmxpc3QsDQogICAgICAg ICAgICAgICAgICAgd3hDb29yZCB4b2Zmc2V0ID0gMCwgd3hDb29yZCB5b2Zmc2V0ID0gMCk7DQoN CiAgICB2b2lkIERyYXdQb2x5Z29uKGludCBuLCB3eFBvaW50IHBvaW50c1tdLA0KICAgICAgICAg ICAgICAgICAgICAgd3hDb29yZCB4b2Zmc2V0ID0gMCwgd3hDb29yZCB5b2Zmc2V0ID0gMCwNCiAg ICAgICAgICAgICAgICAgICAgIGludCBmaWxsU3R5bGUgPSAxKQ0KICAgICAgICB7IERvRHJhd1Bv bHlnb24obiwgcG9pbnRzLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmaWxsU3R5bGUpOyB9DQoNCiAgICB2 b2lkIERyYXdQb2x5Z29uKGNvbnN0IHd4TGlzdCAqbGlzdCwNCiAgICAgICAgICAgICAgICAgICAg IHd4Q29vcmQgeG9mZnNldCA9IDAsIHd4Q29vcmQgeW9mZnNldCA9IDAsDQogICAgICAgICAgICAg ICAgICAgICBpbnQgZmlsbFN0eWxlID0gMSk7DQoNCiAgICB2b2lkIERyYXdSZWN0YW5nbGUod3hD b29yZCB4LCB3eENvb3JkIHksIHd4Q29vcmQgd2lkdGgsIHd4Q29vcmQgaGVpZ2h0KQ0KICAgICAg ICB7IERvRHJhd1JlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsgfQ0KICAgIHZvaWQgRHJh d1JlY3RhbmdsZShjb25zdCB3eFBvaW50JiBwdCwgY29uc3Qgd3hTaXplJiBzeikNCiAgICAgICAg eyBEb0RyYXdSZWN0YW5nbGUocHQueCwgcHQueSwgc3oueCwgc3oueSk7IH0NCiAgICB2b2lkIERy YXdSZWN0YW5nbGUoY29uc3Qgd3hSZWN0JiByZWN0KQ0KICAgICAgICB7IERvRHJhd1JlY3Rhbmds ZShyZWN0LngsIHJlY3QueSwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpOyB9DQoNCiAgICB2b2lk IERyYXdSb3VuZGVkUmVjdGFuZ2xlKHd4Q29vcmQgeCwgd3hDb29yZCB5LCB3eENvb3JkIHdpZHRo LCB3eENvb3JkIGhlaWdodCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBy YWRpdXMpDQogICAgICAgIHsgRG9EcmF3Um91bmRlZFJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVp Z2h0LCByYWRpdXMpOyB9DQogICAgdm9pZCBEcmF3Um91bmRlZFJlY3RhbmdsZShjb25zdCB3eFBv aW50JiBwdCwgY29uc3Qgd3hTaXplJiBzeiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZG91YmxlIHJhZGl1cykNCiAgICAgICAgeyBEb0RyYXdSb3VuZGVkUmVjdGFuZ2xlKHB0LngsIHB0 LnksIHN6LngsIHN6LnksIHJhZGl1cyk7IH0NCiAgICB2b2lkIERyYXdSb3VuZGVkUmVjdGFuZ2xl KGNvbnN0IHd4UmVjdCYgciwgZG91YmxlIHJhZGl1cykNCiAgICAgICAgeyBEb0RyYXdSb3VuZGVk UmVjdGFuZ2xlKHIueCwgci55LCByLndpZHRoLCByLmhlaWdodCwgcmFkaXVzKTsgfQ0KDQogICAg dm9pZCBEcmF3Q2lyY2xlKHd4Q29vcmQgeCwgd3hDb29yZCB5LCB3eENvb3JkIHJhZGl1cykNCiAg ICAgICAgeyBEb0RyYXdFbGxpcHNlKHggLSByYWRpdXMsIHkgLSByYWRpdXMsIDIqcmFkaXVzLCAy KnJhZGl1cyk7IH0NCiAgICB2b2lkIERyYXdFbGxpcHNlKHd4Q29vcmQgeCwgd3hDb29yZCB5LCB3 eENvb3JkIHdpZHRoLCB3eENvb3JkIGhlaWdodCkNCiAgICAgICAgeyBEb0RyYXdFbGxpcHNlKHgs IHksIHdpZHRoLCBoZWlnaHQpOyB9DQogICAgdm9pZCBEcmF3RWxsaXBzZShjb25zdCB3eFBvaW50 JiBwdCwgY29uc3Qgd3hTaXplJiBzeikNCiAgICAgICAgeyBEb0RyYXdFbGxpcHNlKHB0LngsIHB0 LnksIHN6LngsIHN6LnkpOyB9DQogICAgdm9pZCBEcmF3RWxsaXBzZShjb25zdCB3eFJlY3QmIHJl Y3QpDQogICAgICAgIHsgRG9EcmF3RWxsaXBzZShyZWN0LngsIHJlY3QueSwgcmVjdC53aWR0aCwg cmVjdC5oZWlnaHQpOyB9DQoNCiAgICB2b2lkIERyYXdJY29uKGNvbnN0IHd4SWNvbiYgaWNvbiwg d3hDb29yZCB4LCB3eENvb3JkIHkpDQogICAgICAgIHsgRG9EcmF3SWNvbihpY29uLCB4LCB5KTsg fQ0KICAgIHZvaWQgRHJhd0ljb24oY29uc3Qgd3hJY29uJiBpY29uLCBjb25zdCB3eFBvaW50JiBw dCkNCiAgICAgICAgeyBEb0RyYXdJY29uKGljb24sIHB0LngsIHB0LnkpOyB9DQoNCiAgICB2b2lk IERyYXdCaXRtYXAoY29uc3Qgd3hCaXRtYXAgJmJtcCwgd3hDb29yZCB4LCB3eENvb3JkIHksDQog ICAgICAgICAgICAgICAgICAgIGJvb2wgdXNlTWFzayA9IDApDQogICAgICAgIHsgRG9EcmF3Qml0 bWFwKGJtcCwgeCwgeSwgdXNlTWFzayk7IH0NCiAgICB2b2lkIERyYXdCaXRtYXAoY29uc3Qgd3hC aXRtYXAgJmJtcCwgY29uc3Qgd3hQb2ludCYgcHQsDQogICAgICAgICAgICAgICAgICAgIGJvb2wg dXNlTWFzayA9IDApDQogICAgICAgIHsgRG9EcmF3Qml0bWFwKGJtcCwgcHQueCwgcHQueSwgdXNl TWFzayk7IH0NCg0KICAgIHZvaWQgRHJhd1RleHQoY29uc3Qgd3hTdHJpbmcmIHRleHQsIHd4Q29v cmQgeCwgd3hDb29yZCB5KQ0KICAgICAgICB7IERvRHJhd1RleHQodGV4dCwgeCwgeSk7IH0NCiAg ICB2b2lkIERyYXdUZXh0KGNvbnN0IHd4U3RyaW5nJiB0ZXh0LCBjb25zdCB3eFBvaW50JiBwdCkN CiAgICAgICAgeyBEb0RyYXdUZXh0KHRleHQsIHB0LngsIHB0LnkpOyB9DQoNCiAgICB2b2lkIERy YXdSb3RhdGVkVGV4dChjb25zdCB3eFN0cmluZyYgdGV4dCwgd3hDb29yZCB4LCB3eENvb3JkIHks IGRvdWJsZSBhbmdsZSkNCiAgICAgICAgeyBEb0RyYXdSb3RhdGVkVGV4dCh0ZXh0LCB4LCB5LCBh bmdsZSk7IH0NCiAgICB2b2lkIERyYXdSb3RhdGVkVGV4dChjb25zdCB3eFN0cmluZyYgdGV4dCwg Y29uc3Qgd3hQb2ludCYgcHQsIGRvdWJsZSBhbmdsZSkNCiAgICAgICAgeyBEb0RyYXdSb3RhdGVk VGV4dCh0ZXh0LCBwdC54LCBwdC55LCBhbmdsZSk7IH0NCg0KICAgIGJvb2wgQmxpdCh3eENvb3Jk IHhkZXN0LCB3eENvb3JkIHlkZXN0LCB3eENvb3JkIHdpZHRoLCB3eENvb3JkIGhlaWdodCwNCiAg ICAgICAgICAgICAgd3hEQyAqc291cmNlLCB3eENvb3JkIHhzcmMsIHd4Q29vcmQgeXNyYywNCiAg ICAgICAgICAgICAgaW50IHJvcCA9IHd4Q09QWSwgYm9vbCB1c2VNYXNrID0gMCkNCiAgICB7DQog ICAgICAgIHJldHVybiBEb0JsaXQoeGRlc3QsIHlkZXN0LCB3aWR0aCwgaGVpZ2h0LA0KICAgICAg ICAgICAgICAgICAgICAgIHNvdXJjZSwgeHNyYywgeXNyYywgcm9wLCB1c2VNYXNrKTsNCiAgICB9 DQogICAgYm9vbCBCbGl0KGNvbnN0IHd4UG9pbnQmIGRlc3RQdCwgY29uc3Qgd3hTaXplJiBzeiwN CiAgICAgICAgICAgICAgd3hEQyAqc291cmNlLCBjb25zdCB3eFBvaW50JiBzcmNQdCwNCiAgICAg ICAgICAgICAgaW50IHJvcCA9IHd4Q09QWSwgYm9vbCB1c2VNYXNrID0gMCkNCiAgICB7DQogICAg ICAgIHJldHVybiBEb0JsaXQoZGVzdFB0LngsIGRlc3RQdC55LCBzei54LCBzei55LA0KICAgICAg ICAgICAgICAgICAgICAgIHNvdXJjZSwgc3JjUHQueCwgc3JjUHQueSwgcm9wLCB1c2VNYXNrKTsN CiAgICB9DQoNCg0KDQogICAgdm9pZCBEcmF3U3BsaW5lKHd4Q29vcmQgeDEsIHd4Q29vcmQgeTEs DQogICAgICAgICAgICAgICAgICAgIHd4Q29vcmQgeDIsIHd4Q29vcmQgeTIsDQogICAgICAgICAg ICAgICAgICAgIHd4Q29vcmQgeDMsIHd4Q29vcmQgeTMpOw0KICAgIHZvaWQgRHJhd1NwbGluZShp bnQgbiwgd3hQb2ludCBwb2ludHNbXSk7DQoNCiAgICB2b2lkIERyYXdTcGxpbmUod3hMaXN0ICpw b2ludHMpIHsgRG9EcmF3U3BsaW5lKHBvaW50cyk7IH0NCg0KDQoNCg0KDQogICAgdmlydHVhbCB2 b2lkIENsZWFyKCkgPSAwOw0KDQogICAgdmlydHVhbCBib29sIFN0YXJ0RG9jKGNvbnN0IHd4U3Ry aW5nJiApIHsgcmV0dXJuIDE7IH0NCiAgICB2aXJ0dWFsIHZvaWQgRW5kRG9jKCkgeyB9DQoNCiAg ICB2aXJ0dWFsIHZvaWQgU3RhcnRQYWdlKCkgeyB9DQogICAgdmlydHVhbCB2b2lkIEVuZFBhZ2Uo KSB7IH0NCg0KDQoNCg0KICAgIHZpcnR1YWwgdm9pZCBTZXRGb250KGNvbnN0IHd4Rm9udCYgZm9u dCkgPSAwOw0KICAgIHZpcnR1YWwgdm9pZCBTZXRQZW4oY29uc3Qgd3hQZW4mIHBlbikgPSAwOw0K ICAgIHZpcnR1YWwgdm9pZCBTZXRCcnVzaChjb25zdCB3eEJydXNoJiBicnVzaCkgPSAwOw0KICAg IHZpcnR1YWwgdm9pZCBTZXRCYWNrZ3JvdW5kKGNvbnN0IHd4QnJ1c2gmIGJydXNoKSA9IDA7DQog ICAgdmlydHVhbCB2b2lkIFNldEJhY2tncm91bmRNb2RlKGludCBtb2RlKSA9IDA7DQogICAgdmly dHVhbCB2b2lkIFNldFBhbGV0dGUoY29uc3Qgd3hQYWxldHRlJiBwYWxldHRlKSA9IDA7DQoNCg0K DQoNCiAgICB2b2lkIFNldENsaXBwaW5nUmVnaW9uKHd4Q29vcmQgeCwgd3hDb29yZCB5LCB3eENv b3JkIHdpZHRoLCB3eENvb3JkIGhlaWdodCkNCiAgICAgICAgeyBEb1NldENsaXBwaW5nUmVnaW9u KHgsIHksIHdpZHRoLCBoZWlnaHQpOyB9DQogICAgdm9pZCBTZXRDbGlwcGluZ1JlZ2lvbihjb25z dCB3eFBvaW50JiBwdCwgY29uc3Qgd3hTaXplJiBzeikNCiAgICAgICAgeyBEb1NldENsaXBwaW5n UmVnaW9uKHB0LngsIHB0LnksIHN6LngsIHN6LnkpOyB9DQogICAgdm9pZCBTZXRDbGlwcGluZ1Jl Z2lvbihjb25zdCB3eFJlY3QmIHJlY3QpDQogICAgICAgIHsgRG9TZXRDbGlwcGluZ1JlZ2lvbihy ZWN0LngsIHJlY3QueSwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpOyB9DQogICAgdm9pZCBTZXRD bGlwcGluZ1JlZ2lvbihjb25zdCB3eFJlZ2lvbiYgcmVnaW9uKQ0KICAgICAgICB7IERvU2V0Q2xp cHBpbmdSZWdpb25Bc1JlZ2lvbihyZWdpb24pOyB9DQoNCiAgICB2aXJ0dWFsIHZvaWQgRGVzdHJv eUNsaXBwaW5nUmVnaW9uKCkgPSAwOw0KDQogICAgdm9pZCBHZXRDbGlwcGluZ0JveCh3eENvb3Jk ICp4LCB3eENvb3JkICp5LCB3eENvb3JkICp3LCB3eENvb3JkICpoKSBjb25zdA0KICAgICAgICB7 IERvR2V0Q2xpcHBpbmdCb3goeCwgeSwgdywgaCk7IH0NCiAgICB2b2lkIEdldENsaXBwaW5nQm94 KHd4UmVjdCYgcmVjdCkgY29uc3QNCiAgICAgICAgew0KDQogICAgICAgICAgd3hDb29yZCB4LCB5 LCB3LCBoOw0KICAgICAgICAgIERvR2V0Q2xpcHBpbmdCb3goJngsICZ5LCAmdywgJmgpOw0KICAg ICAgICAgIHJlY3QueCA9IHg7IHJlY3QueSA9IHk7IHJlY3Qud2lkdGggPSB3OyByZWN0LmhlaWdo dCA9IGg7DQogICAgICAgIH0NCg0KDQoNCg0KICAgIHZpcnR1YWwgd3hDb29yZCBHZXRDaGFySGVp Z2h0KCkgY29uc3QgPSAwOw0KICAgIHZpcnR1YWwgd3hDb29yZCBHZXRDaGFyV2lkdGgoKSBjb25z dCA9IDA7DQoNCiAgICB2b2lkIEdldFRleHRFeHRlbnQoY29uc3Qgd3hTdHJpbmcmIHN0cmluZywN CiAgICAgICAgICAgICAgICAgICAgICAgd3hDb29yZCAqeCwgd3hDb29yZCAqeSwNCiAgICAgICAg ICAgICAgICAgICAgICAgd3hDb29yZCAqZGVzY2VudCA9IF9fbnVsbCwNCiAgICAgICAgICAgICAg ICAgICAgICAgd3hDb29yZCAqZXh0ZXJuYWxMZWFkaW5nID0gX19udWxsLA0KICAgICAgICAgICAg ICAgICAgICAgICB3eEZvbnQgKnRoZUZvbnQgPSBfX251bGwpIGNvbnN0DQogICAgICAgIHsgRG9H ZXRUZXh0RXh0ZW50KHN0cmluZywgeCwgeSwgZGVzY2VudCwgZXh0ZXJuYWxMZWFkaW5nLCB0aGVG b250KTsgfQ0KDQoNCg0KDQoNCiAgICB2b2lkIEdldFNpemUoaW50ICp3aWR0aCwgaW50ICpoZWln aHQpIGNvbnN0DQogICAgICAgIHsgRG9HZXRTaXplKHdpZHRoLCBoZWlnaHQpOyB9DQogICAgd3hT aXplIEdldFNpemUoKSBjb25zdA0KICAgIHsNCiAgICAgICAgaW50IHcsIGg7DQogICAgICAgIERv R2V0U2l6ZSgmdywgJmgpOw0KDQogICAgICAgIHJldHVybiB3eFNpemUodywgaCk7DQogICAgfQ0K DQoNCiAgICB2b2lkIEdldFNpemVNTShpbnQqIHdpZHRoLCBpbnQqIGhlaWdodCkgY29uc3QNCiAg ICAgICAgeyBEb0dldFNpemVNTSh3aWR0aCwgaGVpZ2h0KTsgfQ0KICAgIHd4U2l6ZSBHZXRTaXpl TU0oKSBjb25zdA0KICAgIHsNCiAgICAgICAgaW50IHcsIGg7DQogICAgICAgIERvR2V0U2l6ZU1N KCZ3LCAmaCk7DQoNCiAgICAgICAgcmV0dXJuIHd4U2l6ZSh3LCBoKTsNCiAgICB9DQoNCg0KDQoN Cg0KDQogICAgd3hDb29yZCBEZXZpY2VUb0xvZ2ljYWxYKHd4Q29vcmQgeCkgY29uc3Q7DQogICAg d3hDb29yZCBEZXZpY2VUb0xvZ2ljYWxZKHd4Q29vcmQgeSkgY29uc3Q7DQogICAgd3hDb29yZCBE ZXZpY2VUb0xvZ2ljYWxYUmVsKHd4Q29vcmQgeCkgY29uc3Q7DQogICAgd3hDb29yZCBEZXZpY2VU b0xvZ2ljYWxZUmVsKHd4Q29vcmQgeSkgY29uc3Q7DQogICAgd3hDb29yZCBMb2dpY2FsVG9EZXZp Y2VYKHd4Q29vcmQgeCkgY29uc3Q7DQogICAgd3hDb29yZCBMb2dpY2FsVG9EZXZpY2VZKHd4Q29v cmQgeSkgY29uc3Q7DQogICAgd3hDb29yZCBMb2dpY2FsVG9EZXZpY2VYUmVsKHd4Q29vcmQgeCkg Y29uc3Q7DQogICAgd3hDb29yZCBMb2dpY2FsVG9EZXZpY2VZUmVsKHd4Q29vcmQgeSkgY29uc3Q7 DQoNCg0KDQoNCiAgICB2aXJ0dWFsIGJvb2wgQ2FuRHJhd0JpdG1hcCgpIGNvbnN0ID0gMDsNCiAg ICB2aXJ0dWFsIGJvb2wgQ2FuR2V0VGV4dEV4dGVudCgpIGNvbnN0ID0gMDsNCg0KDQogICAgdmly dHVhbCBpbnQgR2V0RGVwdGgoKSBjb25zdCA9IDA7DQoNCg0KICAgIHZpcnR1YWwgd3hTaXplIEdl dFBQSSgpIGNvbnN0ID0gMDsNCg0KICAgIHZpcnR1YWwgYm9vbCBPaygpIGNvbnN0IHsgcmV0dXJu IG1fb2s7IH0NCg0KDQoNCg0KDQogICAgaW50IEdldEJhY2tncm91bmRNb2RlKCkgY29uc3QgeyBy ZXR1cm4gbV9iYWNrZ3JvdW5kTW9kZTsgfQ0KICAgIGNvbnN0IHd4QnJ1c2gmIEdldEJhY2tncm91 bmQoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRCcnVzaDsgfQ0KICAgIGNvbnN0IHd4QnJ1 c2gmIEdldEJydXNoKCkgY29uc3QgeyByZXR1cm4gbV9icnVzaDsgfQ0KICAgIGNvbnN0IHd4Rm9u dCYgR2V0Rm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udDsgfQ0KICAgIGNvbnN0IHd4UGVuJiBH ZXRQZW4oKSBjb25zdCB7IHJldHVybiBtX3BlbjsgfQ0KICAgIGNvbnN0IHd4Q29sb3VyJiBHZXRU ZXh0QmFja2dyb3VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dEJhY2tncm91bmRDb2xvdXI7IH0N CiAgICBjb25zdCB3eENvbG91ciYgR2V0VGV4dEZvcmVncm91bmQoKSBjb25zdCB7IHJldHVybiBt X3RleHRGb3JlZ3JvdW5kQ29sb3VyOyB9DQoNCg0KICAgIHd4QnJ1c2gmIEdldEJhY2tncm91bmQo KSB7IHJldHVybiBtX2JhY2tncm91bmRCcnVzaDsgfQ0KICAgIHd4QnJ1c2gmIEdldEJydXNoKCkg eyByZXR1cm4gbV9icnVzaDsgfQ0KICAgIHd4Rm9udCYgR2V0Rm9udCgpIHsgcmV0dXJuIG1fZm9u dDsgfQ0KICAgIHd4UGVuJiBHZXRQZW4oKSB7IHJldHVybiBtX3BlbjsgfQ0KICAgIHd4Q29sb3Vy JiBHZXRUZXh0QmFja2dyb3VuZCgpIHsgcmV0dXJuIG1fdGV4dEJhY2tncm91bmRDb2xvdXI7IH0N CiAgICB3eENvbG91ciYgR2V0VGV4dEZvcmVncm91bmQoKSB7IHJldHVybiBtX3RleHRGb3JlZ3Jv dW5kQ29sb3VyOyB9DQoNCiAgICB2aXJ0dWFsIHZvaWQgU2V0VGV4dEZvcmVncm91bmQoY29uc3Qg d3hDb2xvdXImIGNvbG91cikNCiAgICAgICAgeyBtX3RleHRGb3JlZ3JvdW5kQ29sb3VyID0gY29s b3VyOyB9DQogICAgdmlydHVhbCB2b2lkIFNldFRleHRCYWNrZ3JvdW5kKGNvbnN0IHd4Q29sb3Vy JiBjb2xvdXIpDQogICAgICAgIHsgbV90ZXh0QmFja2dyb3VuZENvbG91ciA9IGNvbG91cjsgfQ0K DQogICAgaW50IEdldE1hcE1vZGUoKSBjb25zdCB7IHJldHVybiBtX21hcHBpbmdNb2RlOyB9DQog ICAgdmlydHVhbCB2b2lkIFNldE1hcE1vZGUoaW50IG1vZGUpID0gMDsNCg0KICAgIHZpcnR1YWwg dm9pZCBHZXRVc2VyU2NhbGUoZG91YmxlICp4LCBkb3VibGUgKnkpIGNvbnN0DQogICAgew0KICAg ICAgICBpZiAoIHggKSAqeCA9IG1fdXNlclNjYWxlWDsNCiAgICAgICAgaWYgKCB5ICkgKnkgPSBt X3VzZXJTY2FsZVk7DQogICAgfQ0KICAgIHZpcnR1YWwgdm9pZCBTZXRVc2VyU2NhbGUoZG91Ymxl IHgsIGRvdWJsZSB5KSA9IDA7DQoNCiAgICB2aXJ0dWFsIHZvaWQgR2V0TG9naWNhbFNjYWxlKGRv dWJsZSAqeCwgZG91YmxlICp5KQ0KICAgIHsNCiAgICAgICAgaWYgKCB4ICkgKnggPSBtX2xvZ2lj YWxTY2FsZVg7DQogICAgICAgIGlmICggeSApICp5ID0gbV9sb2dpY2FsU2NhbGVZOw0KICAgIH0N CiAgICB2aXJ0dWFsIHZvaWQgU2V0TG9naWNhbFNjYWxlKGRvdWJsZSB4LCBkb3VibGUgeSkNCiAg ICB7DQogICAgICAgIG1fbG9naWNhbFNjYWxlWCA9IHg7DQogICAgICAgIG1fbG9naWNhbFNjYWxl WSA9IHk7DQogICAgfQ0KDQogICAgdm9pZCBHZXRMb2dpY2FsT3JpZ2luKHd4Q29vcmQgKngsIHd4 Q29vcmQgKnkpIGNvbnN0DQogICAgICAgIHsgRG9HZXRMb2dpY2FsT3JpZ2luKHgsIHkpOyB9DQog ICAgd3hQb2ludCBHZXRMb2dpY2FsT3JpZ2luKCkgY29uc3QNCiAgICAgICAgeyB3eENvb3JkIHgs IHk7IERvR2V0TG9naWNhbE9yaWdpbigmeCwgJnkpOyByZXR1cm4gd3hQb2ludCh4LCB5KTsgfQ0K ICAgIHZpcnR1YWwgdm9pZCBTZXRMb2dpY2FsT3JpZ2luKHd4Q29vcmQgeCwgd3hDb29yZCB5KSA9 IDA7DQoNCiAgICB2b2lkIEdldERldmljZU9yaWdpbih3eENvb3JkICp4LCB3eENvb3JkICp5KSBj b25zdA0KICAgICAgICB7IERvR2V0RGV2aWNlT3JpZ2luKHgsIHkpOyB9DQogICAgd3hQb2ludCBH ZXREZXZpY2VPcmlnaW4oKSBjb25zdA0KICAgICAgICB7IHd4Q29vcmQgeCwgeTsgRG9HZXREZXZp Y2VPcmlnaW4oJngsICZ5KTsgcmV0dXJuIHd4UG9pbnQoeCwgeSk7IH0NCiAgICB2aXJ0dWFsIHZv aWQgU2V0RGV2aWNlT3JpZ2luKHd4Q29vcmQgeCwgd3hDb29yZCB5KSA9IDA7DQoNCiAgICB2aXJ0 dWFsIHZvaWQgU2V0QXhpc09yaWVudGF0aW9uKGJvb2wgeExlZnRSaWdodCwgYm9vbCB5Qm90dG9t VXApID0gMDsNCg0KICAgIGludCBHZXRMb2dpY2FsRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBt X2xvZ2ljYWxGdW5jdGlvbjsgfQ0KICAgIHZpcnR1YWwgdm9pZCBTZXRMb2dpY2FsRnVuY3Rpb24o aW50IGZ1bmN0aW9uKSA9IDA7DQoNCg0KDQoNCg0KICAgIHZpcnR1YWwgdm9pZCBTZXRPcHRpbWl6 YXRpb24oYm9vbCApIHsgfQ0KICAgIHZpcnR1YWwgYm9vbCBHZXRPcHRpbWl6YXRpb24oKSB7IHJl dHVybiAwOyB9DQoNCg0KDQoNCiAgICB2aXJ0dWFsIHZvaWQgQ2FsY0JvdW5kaW5nQm94KHd4Q29v cmQgeCwgd3hDb29yZCB5KQ0KICAgIHsNCiAgICAgIGlmICggbV9pc0JCb3hWYWxpZCApDQogICAg ICB7DQogICAgICAgICBpZiAoIHggPCBtX21pblggKSBtX21pblggPSB4Ow0KICAgICAgICAgaWYg KCB5IDwgbV9taW5ZICkgbV9taW5ZID0geTsNCiAgICAgICAgIGlmICggeCA+IG1fbWF4WCApIG1f bWF4WCA9IHg7DQogICAgICAgICBpZiAoIHkgPiBtX21heFkgKSBtX21heFkgPSB5Ow0KICAgICAg fQ0KICAgICAgZWxzZQ0KICAgICAgew0KICAgICAgICAgbV9pc0JCb3hWYWxpZCA9IDE7DQoNCiAg ICAgICAgIG1fbWluWCA9IHg7DQogICAgICAgICBtX21pblkgPSB5Ow0KICAgICAgICAgbV9tYXhY ID0geDsNCiAgICAgICAgIG1fbWF4WSA9IHk7DQogICAgICB9DQogICAgfQ0KDQogICAgdm9pZCBS ZXNldEJvdW5kaW5nQm94KCkNCiAgICB7DQogICAgICAgIG1faXNCQm94VmFsaWQgPSAwOw0KDQog ICAgICAgIG1fbWluWCA9IG1fbWF4WCA9IG1fbWluWSA9IG1fbWF4WSA9IDA7DQogICAgfQ0KDQoN CiAgICB3eENvb3JkIE1pblgoKSBjb25zdCB7IHJldHVybiBtX21pblg7IH0NCiAgICB3eENvb3Jk IE1heFgoKSBjb25zdCB7IHJldHVybiBtX21heFg7IH0NCiAgICB3eENvb3JkIE1pblkoKSBjb25z dCB7IHJldHVybiBtX21pblk7IH0NCiAgICB3eENvb3JkIE1heFkoKSBjb25zdCB7IHJldHVybiBt X21heFk7IH0NCg0KDQoNCg0KDQoNCiAgICB2b2lkIEdldFRleHRFeHRlbnQoY29uc3Qgd3hTdHJp bmcmIHN0cmluZywNCiAgICAgICAgICAgICAgICAgICAgICAgbG9uZyAqeCwgbG9uZyAqeSwNCiAg ICAgICAgICAgICAgICAgICAgICAgbG9uZyAqZGVzY2VudCA9IF9fbnVsbCwNCiAgICAgICAgICAg ICAgICAgICAgICAgbG9uZyAqZXh0ZXJuYWxMZWFkaW5nID0gX19udWxsLA0KICAgICAgICAgICAg ICAgICAgICAgICB3eEZvbnQgKnRoZUZvbnQgPSBfX251bGwpIGNvbnN0DQogICAgew0KICAgICAg ICB3eENvb3JkIHgyLCB5MiwgZGVzY2VudDIsIGV4dGVybmFsTGVhZGluZzI7DQogICAgICAgIERv R2V0VGV4dEV4dGVudChzdHJpbmcsICZ4MiwgJnkyLA0KICAgICAgICAgICAgICAgICAgICAgICAg JmRlc2NlbnQyLCAmZXh0ZXJuYWxMZWFkaW5nMiwNCiAgICAgICAgICAgICAgICAgICAgICAgIHRo ZUZvbnQpOw0KICAgICAgICBpZiAoIHggKQ0KICAgICAgICAgICAgKnggPSB4MjsNCiAgICAgICAg aWYgKCB5ICkNCiAgICAgICAgICAgICp5ID0geTI7DQogICAgICAgIGlmICggZGVzY2VudCApDQog ICAgICAgICAgICAqZGVzY2VudCA9IGRlc2NlbnQyOw0KICAgICAgICBpZiAoIGV4dGVybmFsTGVh ZGluZyApDQogICAgICAgICAgICAqZXh0ZXJuYWxMZWFkaW5nID0gZXh0ZXJuYWxMZWFkaW5nMjsN CiAgICB9DQoNCiAgICB2b2lkIEdldExvZ2ljYWxPcmlnaW4obG9uZyAqeCwgbG9uZyAqeSkgY29u c3QNCiAgICB7DQogICAgICAgIHd4Q29vcmQgeDIsIHkyOw0KICAgICAgICBEb0dldExvZ2ljYWxP cmlnaW4oJngyLCAmeTIpOw0KICAgICAgICBpZiAoIHggKQ0KICAgICAgICAgICAgKnggPSB4MjsN CiAgICAgICAgaWYgKCB5ICkNCiAgICAgICAgICAgICp5ID0geTI7DQogICAgfQ0KDQogICAgdm9p ZCBHZXREZXZpY2VPcmlnaW4obG9uZyAqeCwgbG9uZyAqeSkgY29uc3QNCiAgICB7DQogICAgICAg IHd4Q29vcmQgeDIsIHkyOw0KICAgICAgICBEb0dldERldmljZU9yaWdpbigmeDIsICZ5Mik7DQog ICAgICAgIGlmICggeCApDQogICAgICAgICAgICAqeCA9IHgyOw0KICAgICAgICBpZiAoIHkgKQ0K ICAgICAgICAgICAgKnkgPSB5MjsNCiAgICB9DQogICAgdm9pZCBHZXRDbGlwcGluZ0JveChsb25n ICp4LCBsb25nICp5LCBsb25nICp3LCBsb25nICpoKSBjb25zdA0KICAgIHsNCiAgICAgICAgd3hD b29yZCB4eCx5eSx3dyxoaDsNCiAgICAgICAgRG9HZXRDbGlwcGluZ0JveCgmeHgsICZ5eSwgJnd3 LCAmaGgpOw0KICAgICAgICBpZiAoeCkgKnggPSB4eDsNCiAgICAgICAgaWYgKHkpICp5ID0geXk7 DQogICAgICAgIGlmICh3KSAqdyA9IHd3Ow0KICAgICAgICBpZiAoaCkgKmggPSBoaDsNCiAgICB9 DQojIDQ5OSAiLi4vLi4vaW5jbHVkZS93eC9kYy5oIg0KcHJvdGVjdGVkOg0KDQogICAgdmlydHVh bCB2b2lkIERvRmxvb2RGaWxsKHd4Q29vcmQgeCwgd3hDb29yZCB5LCBjb25zdCB3eENvbG91ciYg Y29sLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3R5bGUgPSAxKSA9IDA7DQoN CiAgICB2aXJ0dWFsIGJvb2wgRG9HZXRQaXhlbCh3eENvb3JkIHgsIHd4Q29vcmQgeSwgd3hDb2xv dXIgKmNvbCkgY29uc3QgPSAwOw0KDQogICAgdmlydHVhbCB2b2lkIERvRHJhd1BvaW50KHd4Q29v cmQgeCwgd3hDb29yZCB5KSA9IDA7DQogICAgdmlydHVhbCB2b2lkIERvRHJhd0xpbmUod3hDb29y ZCB4MSwgd3hDb29yZCB5MSwgd3hDb29yZCB4Miwgd3hDb29yZCB5MikgPSAwOw0KDQogICAgdmly dHVhbCB2b2lkIERvRHJhd0FyYyh3eENvb3JkIHgxLCB3eENvb3JkIHkxLA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgd3hDb29yZCB4Miwgd3hDb29yZCB5MiwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIHd4Q29vcmQgeGMsIHd4Q29vcmQgeWMpID0gMDsNCiAgICB2aXJ0dWFsIHZvaWQg RG9EcmF3Q2hlY2tNYXJrKHd4Q29vcmQgeCwgd3hDb29yZCB5LA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgd3hDb29yZCB3aWR0aCwgd3hDb29yZCBoZWlnaHQpOw0KICAgIHZpcnR1 YWwgdm9pZCBEb0RyYXdFbGxpcHRpY0FyYyh3eENvb3JkIHgsIHd4Q29vcmQgeSwgd3hDb29yZCB3 LCB3eENvb3JkIGgsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBz YSwgZG91YmxlIGVhKSA9IDA7DQoNCiAgICB2aXJ0dWFsIHZvaWQgRG9EcmF3UmVjdGFuZ2xlKHd4 Q29vcmQgeCwgd3hDb29yZCB5LCB3eENvb3JkIHdpZHRoLCB3eENvb3JkIGhlaWdodCkgPSAwOw0K ICAgIHZpcnR1YWwgdm9pZCBEb0RyYXdSb3VuZGVkUmVjdGFuZ2xlKHd4Q29vcmQgeCwgd3hDb29y ZCB5LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHd4Q29vcmQgd2lk dGgsIHd4Q29vcmQgaGVpZ2h0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGRvdWJsZSByYWRpdXMpID0gMDsNCiAgICB2aXJ0dWFsIHZvaWQgRG9EcmF3RWxsaXBzZSh3 eENvb3JkIHgsIHd4Q29vcmQgeSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3eENv b3JkIHdpZHRoLCB3eENvb3JkIGhlaWdodCkgPSAwOw0KDQogICAgdmlydHVhbCB2b2lkIERvQ3Jv c3NIYWlyKHd4Q29vcmQgeCwgd3hDb29yZCB5KSA9IDA7DQoNCiAgICB2aXJ0dWFsIHZvaWQgRG9E cmF3SWNvbihjb25zdCB3eEljb24mIGljb24sIHd4Q29vcmQgeCwgd3hDb29yZCB5KSA9IDA7DQog ICAgdmlydHVhbCB2b2lkIERvRHJhd0JpdG1hcChjb25zdCB3eEJpdG1hcCAmYm1wLCB3eENvb3Jk IHgsIHd4Q29vcmQgeSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdXNlTWFz ayA9IDApID0gMDsNCg0KICAgIHZpcnR1YWwgdm9pZCBEb0RyYXdUZXh0KGNvbnN0IHd4U3RyaW5n JiB0ZXh0LCB3eENvb3JkIHgsIHd4Q29vcmQgeSkgPSAwOw0KICAgIHZpcnR1YWwgdm9pZCBEb0Ry YXdSb3RhdGVkVGV4dChjb25zdCB3eFN0cmluZyYgdGV4dCwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgd3hDb29yZCB4LCB3eENvb3JkIHksIGRvdWJsZSBhbmdsZSkgPSAwOw0K DQogICAgdmlydHVhbCBib29sIERvQmxpdCh3eENvb3JkIHhkZXN0LCB3eENvb3JkIHlkZXN0LA0K ICAgICAgICAgICAgICAgICAgICAgICAgd3hDb29yZCB3aWR0aCwgd3hDb29yZCBoZWlnaHQsDQog ICAgICAgICAgICAgICAgICAgICAgICB3eERDICpzb3VyY2UsIHd4Q29vcmQgeHNyYywgd3hDb29y ZCB5c3JjLA0KICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJvcCA9IHd4Q09QWSwgYm9vbCB1 c2VNYXNrID0gMCkgPSAwOw0KDQogICAgdmlydHVhbCB2b2lkIERvR2V0U2l6ZShpbnQgKndpZHRo LCBpbnQgKmhlaWdodCkgY29uc3QgPSAwOw0KICAgIHZpcnR1YWwgdm9pZCBEb0dldFNpemVNTShp bnQqIHdpZHRoLCBpbnQqIGhlaWdodCkgY29uc3QgPSAwOw0KDQogICAgdmlydHVhbCB2b2lkIERv RHJhd0xpbmVzKGludCBuLCB3eFBvaW50IHBvaW50c1tdLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB3eENvb3JkIHhvZmZzZXQsIHd4Q29vcmQgeW9mZnNldCkgPSAwOw0KICAgIHZpcnR1 YWwgdm9pZCBEb0RyYXdQb2x5Z29uKGludCBuLCB3eFBvaW50IHBvaW50c1tdLA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHd4Q29vcmQgeG9mZnNldCwgd3hDb29yZCB5b2Zmc2V0LA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmaWxsU3R5bGUgPSAxKSA9IDA7DQoN CiAgICB2aXJ0dWFsIHZvaWQgRG9TZXRDbGlwcGluZ1JlZ2lvbkFzUmVnaW9uKGNvbnN0IHd4UmVn aW9uJiByZWdpb24pID0gMDsNCiAgICB2aXJ0dWFsIHZvaWQgRG9TZXRDbGlwcGluZ1JlZ2lvbih3 eENvb3JkIHgsIHd4Q29vcmQgeSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB3eENvb3JkIHdpZHRoLCB3eENvb3JkIGhlaWdodCkgPSAwOw0KDQoNCiAgICB2aXJ0dWFsIHZv aWQgRG9HZXRDbGlwcGluZ1JlZ2lvbih3eENvb3JkICp4LCB3eENvb3JkICp5LA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHd4Q29vcmQgKncsIHd4Q29vcmQgKmgpDQogICAg ICAgIHsgRG9HZXRDbGlwcGluZ0JveCh4LCB5LCB3LCBoKTsgfQ0KICAgIHZpcnR1YWwgdm9pZCBE b0dldENsaXBwaW5nQm94KHd4Q29vcmQgKngsIHd4Q29vcmQgKnksDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgd3hDb29yZCAqdywgd3hDb29yZCAqaCkgY29uc3QNCiAgICB7DQog ICAgICAgIGlmICggbV9jbGlwcGluZyApDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmICggeCAp ICp4ID0gbV9jbGlwWDE7DQogICAgICAgICAgICBpZiAoIHkgKSAqeSA9IG1fY2xpcFkxOw0KICAg ICAgICAgICAgaWYgKCB3ICkgKncgPSBtX2NsaXBYMiAtIG1fY2xpcFgxOw0KICAgICAgICAgICAg aWYgKCBoICkgKmggPSBtX2NsaXBZMiAtIG1fY2xpcFkxOw0KICAgICAgICB9DQogICAgICAgIGVs c2UNCiAgICAgICAgew0KICAgICAgICAgICAgKnggPSAqeSA9ICp3ID0gKmggPSAwOw0KICAgICAg ICB9DQogICAgfQ0KDQogICAgdmlydHVhbCB2b2lkIERvR2V0TG9naWNhbE9yaWdpbih3eENvb3Jk ICp4LCB3eENvb3JkICp5KSBjb25zdA0KICAgIHsNCiAgICAgICAgaWYgKCB4ICkgKnggPSBtX2xv Z2ljYWxPcmlnaW5YOw0KICAgICAgICBpZiAoIHkgKSAqeSA9IG1fbG9naWNhbE9yaWdpblk7DQog ICAgfQ0KDQogICAgdmlydHVhbCB2b2lkIERvR2V0RGV2aWNlT3JpZ2luKHd4Q29vcmQgKngsIHd4 Q29vcmQgKnkpIGNvbnN0DQogICAgew0KICAgICAgICBpZiAoIHggKSAqeCA9IG1fZGV2aWNlT3Jp Z2luWDsNCiAgICAgICAgaWYgKCB5ICkgKnkgPSBtX2RldmljZU9yaWdpblk7DQogICAgfQ0KDQog ICAgdmlydHVhbCB2b2lkIERvR2V0VGV4dEV4dGVudChjb25zdCB3eFN0cmluZyYgc3RyaW5nLA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3hDb29yZCAqeCwgd3hDb29yZCAqeSwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHd4Q29vcmQgKmRlc2NlbnQgPSBfX251 bGwsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3eENvb3JkICpleHRlcm5hbExl YWRpbmcgPSBfX251bGwsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3eEZvbnQg KnRoZUZvbnQgPSBfX251bGwpIGNvbnN0ID0gMDsNCg0KDQogICAgdmlydHVhbCB2b2lkIERvRHJh d1NwbGluZSh3eExpc3QgKnBvaW50cykgPSAwOw0KDQoNCnByb3RlY3RlZDoNCg0KICAgIGJvb2wg bV9jb2xvdXI6MTsNCiAgICBib29sIG1fb2s6MTsNCiAgICBib29sIG1fY2xpcHBpbmc6MTsNCiAg ICBib29sIG1faXNJbnRlcmFjdGl2ZToxOw0KICAgIGJvb2wgbV9pc0JCb3hWYWxpZDoxOw0KDQoN Cg0KDQoNCiAgICB3eENvb3JkIG1fbG9naWNhbE9yaWdpblgsIG1fbG9naWNhbE9yaWdpblk7DQog ICAgd3hDb29yZCBtX2RldmljZU9yaWdpblgsIG1fZGV2aWNlT3JpZ2luWTsNCg0KICAgIGRvdWJs ZSBtX2xvZ2ljYWxTY2FsZVgsIG1fbG9naWNhbFNjYWxlWTsNCiAgICBkb3VibGUgbV91c2VyU2Nh bGVYLCBtX3VzZXJTY2FsZVk7DQogICAgZG91YmxlIG1fc2NhbGVYLCBtX3NjYWxlWTsNCg0KDQog ICAgaW50IG1fc2lnblgsIG1fc2lnblk7DQoNCg0KICAgIHd4Q29vcmQgbV9taW5YLCBtX21pblks IG1fbWF4WCwgbV9tYXhZOw0KICAgIHd4Q29vcmQgbV9jbGlwWDEsIG1fY2xpcFkxLCBtX2NsaXBY MiwgbV9jbGlwWTI7DQoNCiAgICBpbnQgbV9sb2dpY2FsRnVuY3Rpb247DQogICAgaW50IG1fYmFj a2dyb3VuZE1vZGU7DQogICAgaW50IG1fbWFwcGluZ01vZGU7DQoNCg0KICAgIHd4UGVuIG1fcGVu Ow0KICAgIHd4QnJ1c2ggbV9icnVzaDsNCiAgICB3eEJydXNoIG1fYmFja2dyb3VuZEJydXNoOw0K ICAgIHd4Q29sb3VyIG1fdGV4dEZvcmVncm91bmRDb2xvdXI7DQogICAgd3hDb2xvdXIgbV90ZXh0 QmFja2dyb3VuZENvbG91cjsNCiAgICB3eEZvbnQgbV9mb250Ow0KICAgIHd4UGFsZXR0ZSBtX3Bh bGV0dGU7DQoNCnByaXZhdGU6DQogICAgcHJpdmF0ZTogd3hEQ0Jhc2UoY29uc3Qgd3hEQ0Jhc2Um KTsgd3hEQ0Jhc2UmIG9wZXJhdG9yPShjb25zdCB3eERDQmFzZSYpOw0KICAgIHB1YmxpYzogc3Rh dGljIHd4Q2xhc3NJbmZvIHNtX2NsYXNzd3hEQ0Jhc2U7IHd4Q2xhc3NJbmZvICpHZXRDbGFzc0lu Zm8oKSBjb25zdCB7IHJldHVybiAmd3hEQ0Jhc2U6OnNtX2NsYXNzd3hEQ0Jhc2U7IH0NCn07DQoN Cg0KDQoNCg0KDQojIDEgIi4uLy4uL2luY2x1ZGUvd3gvbXN3L2RjLmgiIDENCiMgMTYgIi4uLy4u L2luY2x1ZGUvd3gvbXN3L2RjLmgiDQojcHJhZ21hIGludGVyZmFjZSAiZGMuaCINCg0KDQoNCiMg MSAiLi4vLi4vaW5jbHVkZS93eC9kYy5oIiAxDQojIDIxICIuLi8uLi9pbmNsdWRlL3d4L21zdy9k Yy5oIiAyDQojIDc0ICIuLi8uLi9pbmNsdWRlL3d4L21zdy9kYy5oIg0KY2xhc3MgX19hdHRyaWJ1 dGVfXygoZGxsaW1wb3J0KSkgd3hEQyA6IHB1YmxpYyB3eERDQmFzZQ0Kew0KICAgIHB1YmxpYzog c3RhdGljIHd4Q2xhc3NJbmZvIHNtX2NsYXNzd3hEQzsgd3hDbGFzc0luZm8gKkdldENsYXNzSW5m bygpIGNvbnN0IHsgcmV0dXJuICZ3eERDOjpzbV9jbGFzc3d4REM7IH0NCg0KcHVibGljOg0KICAg IHd4REMoKTsNCiAgICB+d3hEQygpOw0KDQoNCg0KDQogICAgdmlydHVhbCB2b2lkIENsZWFyKCk7 DQoNCiAgICB2aXJ0dWFsIGJvb2wgU3RhcnREb2MoY29uc3Qgd3hTdHJpbmcmIG1lc3NhZ2UpOw0K ICAgIHZpcnR1YWwgdm9pZCBFbmREb2MoKTsNCg0KICAgIHZpcnR1YWwgdm9pZCBTdGFydFBhZ2Uo KTsNCiAgICB2aXJ0dWFsIHZvaWQgRW5kUGFnZSgpOw0KDQogICAgdmlydHVhbCB2b2lkIFNldEZv bnQoY29uc3Qgd3hGb250JiBmb250KTsNCiAgICB2aXJ0dWFsIHZvaWQgU2V0UGVuKGNvbnN0IHd4 UGVuJiBwZW4pOw0KICAgIHZpcnR1YWwgdm9pZCBTZXRCcnVzaChjb25zdCB3eEJydXNoJiBicnVz aCk7DQogICAgdmlydHVhbCB2b2lkIFNldEJhY2tncm91bmQoY29uc3Qgd3hCcnVzaCYgYnJ1c2gp Ow0KICAgIHZpcnR1YWwgdm9pZCBTZXRCYWNrZ3JvdW5kTW9kZShpbnQgbW9kZSk7DQogICAgdmly dHVhbCB2b2lkIFNldFBhbGV0dGUoY29uc3Qgd3hQYWxldHRlJiBwYWxldHRlKTsNCg0KICAgIHZp cnR1YWwgdm9pZCBEZXN0cm95Q2xpcHBpbmdSZWdpb24oKTsNCg0KICAgIHZpcnR1YWwgd3hDb29y ZCBHZXRDaGFySGVpZ2h0KCkgY29uc3Q7DQogICAgdmlydHVhbCB3eENvb3JkIEdldENoYXJXaWR0 aCgpIGNvbnN0Ow0KICAgIHZpcnR1YWwgdm9pZCBEb0dldFRleHRFeHRlbnQoY29uc3Qgd3hTdHJp bmcmIHN0cmluZywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHd4Q29vcmQgKngs IHd4Q29vcmQgKnksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3eENvb3JkICpk ZXNjZW50ID0gX19udWxsLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3hDb29y ZCAqZXh0ZXJuYWxMZWFkaW5nID0gX19udWxsLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgd3hGb250ICp0aGVGb250ID0gX19udWxsKSBjb25zdDsNCg0KICAgIHZpcnR1YWwgYm9v bCBDYW5EcmF3Qml0bWFwKCkgY29uc3Q7DQogICAgdmlydHVhbCBib29sIENhbkdldFRleHRFeHRl bnQoKSBjb25zdDsNCiAgICB2aXJ0dWFsIGludCBHZXREZXB0aCgpIGNvbnN0Ow0KICAgIHZpcnR1 YWwgd3hTaXplIEdldFBQSSgpIGNvbnN0Ow0KDQogICAgdmlydHVhbCB2b2lkIFNldE1hcE1vZGUo aW50IG1vZGUpOw0KICAgIHZpcnR1YWwgdm9pZCBTZXRVc2VyU2NhbGUoZG91YmxlIHgsIGRvdWJs ZSB5KTsNCiAgICB2aXJ0dWFsIHZvaWQgU2V0U3lzdGVtU2NhbGUoZG91YmxlIHgsIGRvdWJsZSB5 KTsNCiAgICB2aXJ0dWFsIHZvaWQgU2V0TG9naWNhbFNjYWxlKGRvdWJsZSB4LCBkb3VibGUgeSk7 DQogICAgdmlydHVhbCB2b2lkIFNldExvZ2ljYWxPcmlnaW4od3hDb29yZCB4LCB3eENvb3JkIHkp Ow0KICAgIHZpcnR1YWwgdm9pZCBTZXREZXZpY2VPcmlnaW4od3hDb29yZCB4LCB3eENvb3JkIHkp Ow0KICAgIHZpcnR1YWwgdm9pZCBTZXRBeGlzT3JpZW50YXRpb24oYm9vbCB4TGVmdFJpZ2h0LCBi b29sIHlCb3R0b21VcCk7DQogICAgdmlydHVhbCB2b2lkIFNldExvZ2ljYWxGdW5jdGlvbihpbnQg ZnVuY3Rpb24pOw0KDQoNCg0KDQogICAgdmlydHVhbCB2b2lkIFNldFJvcChXWEhEQyBjZGMpOw0K ICAgIHZpcnR1YWwgdm9pZCBTZWxlY3RPbGRPYmplY3RzKFdYSERDIGRjKTsNCg0KICAgIHd4V2lu ZG93ICpHZXRXaW5kb3coKSBjb25zdCB7IHJldHVybiBtX2NhbnZhczsgfQ0KICAgIHZvaWQgU2V0 V2luZG93KHd4V2luZG93ICp3aW4pIHsgbV9jYW52YXMgPSB3aW47IH0NCg0KICAgIFdYSERDIEdl dEhEQygpIGNvbnN0IHsgcmV0dXJuIG1faERDOyB9DQogICAgdm9pZCBTZXRIREMoV1hIREMgZGMs IGJvb2wgYk93bnNEQyA9IDApDQogICAgew0KICAgICAgICBtX2hEQyA9IGRjOw0KICAgICAgICBt X2JPd25zREMgPSBiT3duc0RDOw0KICAgIH0NCg0KICAgIGNvbnN0IHd4Qml0bWFwJiBHZXRTZWxl Y3RlZEJpdG1hcCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0ZWRCaXRtYXA7IH0NCiAgICB3eEJp dG1hcCYgR2V0U2VsZWN0ZWRCaXRtYXAoKSB7IHJldHVybiBtX3NlbGVjdGVkQml0bWFwOyB9DQoN CnByb3RlY3RlZDoNCiAgICB2aXJ0dWFsIHZvaWQgRG9GbG9vZEZpbGwod3hDb29yZCB4LCB3eENv b3JkIHksIGNvbnN0IHd4Q29sb3VyJiBjb2wsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCBzdHlsZSA9IDEpOw0KDQogICAgdmlydHVhbCBib29sIERvR2V0UGl4ZWwod3hDb29yZCB4 LCB3eENvb3JkIHksIHd4Q29sb3VyICpjb2wpIGNvbnN0Ow0KDQogICAgdmlydHVhbCB2b2lkIERv RHJhd1BvaW50KHd4Q29vcmQgeCwgd3hDb29yZCB5KTsNCiAgICB2aXJ0dWFsIHZvaWQgRG9EcmF3 TGluZSh3eENvb3JkIHgxLCB3eENvb3JkIHkxLCB3eENvb3JkIHgyLCB3eENvb3JkIHkyKTsNCg0K ICAgIHZpcnR1YWwgdm9pZCBEb0RyYXdBcmMod3hDb29yZCB4MSwgd3hDb29yZCB5MSwNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIHd4Q29vcmQgeDIsIHd4Q29vcmQgeTIsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICB3eENvb3JkIHhjLCB3eENvb3JkIHljKTsNCiAgICB2aXJ0dWFsIHZv aWQgRG9EcmF3Q2hlY2tNYXJrKHd4Q29vcmQgeCwgd3hDb29yZCB5LA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgd3hDb29yZCB3aWR0aCwgd3hDb29yZCBoZWlnaHQpOw0KICAgIHZp cnR1YWwgdm9pZCBEb0RyYXdFbGxpcHRpY0FyYyh3eENvb3JkIHgsIHd4Q29vcmQgeSwgd3hDb29y ZCB3LCB3eENvb3JkIGgsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJs ZSBzYSwgZG91YmxlIGVhKTsNCg0KICAgIHZpcnR1YWwgdm9pZCBEb0RyYXdSZWN0YW5nbGUod3hD b29yZCB4LCB3eENvb3JkIHksIHd4Q29vcmQgd2lkdGgsIHd4Q29vcmQgaGVpZ2h0KTsNCiAgICB2 aXJ0dWFsIHZvaWQgRG9EcmF3Um91bmRlZFJlY3RhbmdsZSh3eENvb3JkIHgsIHd4Q29vcmQgeSwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3eENvb3JkIHdpZHRoLCB3 eENvb3JkIGhlaWdodCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk b3VibGUgcmFkaXVzKTsNCiAgICB2aXJ0dWFsIHZvaWQgRG9EcmF3RWxsaXBzZSh3eENvb3JkIHgs IHd4Q29vcmQgeSwgd3hDb29yZCB3aWR0aCwgd3hDb29yZCBoZWlnaHQpOw0KDQogICAgdmlydHVh bCB2b2lkIERvQ3Jvc3NIYWlyKHd4Q29vcmQgeCwgd3hDb29yZCB5KTsNCg0KICAgIHZpcnR1YWwg dm9pZCBEb0RyYXdJY29uKGNvbnN0IHd4SWNvbiYgaWNvbiwgd3hDb29yZCB4LCB3eENvb3JkIHkp Ow0KICAgIHZpcnR1YWwgdm9pZCBEb0RyYXdCaXRtYXAoY29uc3Qgd3hCaXRtYXAgJmJtcCwgd3hD b29yZCB4LCB3eENvb3JkIHksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHVz ZU1hc2sgPSAwKTsNCg0KICAgIHZpcnR1YWwgdm9pZCBEb0RyYXdUZXh0KGNvbnN0IHd4U3RyaW5n JiB0ZXh0LCB3eENvb3JkIHgsIHd4Q29vcmQgeSk7DQogICAgdmlydHVhbCB2b2lkIERvRHJhd1Jv dGF0ZWRUZXh0KGNvbnN0IHd4U3RyaW5nJiB0ZXh0LCB3eENvb3JkIHgsIHd4Q29vcmQgeSwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGFuZ2xlKTsNCg0KICAgIHZp cnR1YWwgYm9vbCBEb0JsaXQod3hDb29yZCB4ZGVzdCwgd3hDb29yZCB5ZGVzdCwgd3hDb29yZCB3 aWR0aCwgd3hDb29yZCBoZWlnaHQsDQogICAgICAgICAgICAgICAgICAgICAgICB3eERDICpzb3Vy Y2UsIHd4Q29vcmQgeHNyYywgd3hDb29yZCB5c3JjLA0KICAgICAgICAgICAgICAgICAgICAgICAg aW50IHJvcCA9IHd4Q09QWSwgYm9vbCB1c2VNYXNrID0gMCk7DQoNCg0KDQogICAgdmlydHVhbCB2 b2lkIERvU2V0Q2xpcHBpbmdSZWdpb25Bc1JlZ2lvbihjb25zdCB3eFJlZ2lvbiYgcmVnaW9uKTsN CiAgICB2aXJ0dWFsIHZvaWQgRG9TZXRDbGlwcGluZ1JlZ2lvbih3eENvb3JkIHgsIHd4Q29vcmQg eSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3eENvb3JkIHdpZHRoLCB3 eENvb3JkIGhlaWdodCk7DQogICAgdmlydHVhbCB2b2lkIERvR2V0Q2xpcHBpbmdSZWdpb24od3hD b29yZCAqeCwgd3hDb29yZCAqeSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB3eENvb3JkICp3aWR0aCwgd3hDb29yZCAqaGVpZ2h0KQ0KICAgIHsNCiAgICAgICAgR2V0Q2xp cHBpbmdCb3goeCwgeSwgd2lkdGgsIGhlaWdodCk7DQogICAgfQ0KDQogICAgdmlydHVhbCB2b2lk IERvR2V0U2l6ZShpbnQgKndpZHRoLCBpbnQgKmhlaWdodCkgY29uc3Q7DQogICAgdmlydHVhbCB2 b2lkIERvR2V0U2l6ZU1NKGludCogd2lkdGgsIGludCogaGVpZ2h0KSBjb25zdDsNCg0KICAgIHZp cnR1YWwgdm9pZCBEb0RyYXdMaW5lcyhpbnQgbiwgd3hQb2ludCBwb2ludHNbXSwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgd3hDb29yZCB4b2Zmc2V0LCB3eENvb3JkIHlvZmZzZXQpOw0K ICAgIHZpcnR1YWwgdm9pZCBEb0RyYXdQb2x5Z29uKGludCBuLCB3eFBvaW50IHBvaW50c1tdLA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHd4Q29vcmQgeG9mZnNldCwgd3hDb29yZCB5 b2Zmc2V0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmaWxsU3R5bGUgPSAx KTsNCg0KDQogICAgdmlydHVhbCB2b2lkIERvRHJhd1NwbGluZSh3eExpc3QgKnBvaW50cyk7DQoN Cg0KDQogICAgdm9pZCBEcmF3QW55VGV4dChjb25zdCB3eFN0cmluZyYgdGV4dCwgd3hDb29yZCB4 LCB3eENvb3JkIHkpOw0KDQoNCiAgICBpbnQgbV93aW5kb3dFeHRYOw0KICAgIGludCBtX3dpbmRv d0V4dFk7DQoNCg0KICAgIHd4V2luZG93ICptX2NhbnZhczsNCg0KICAgIHd4Qml0bWFwIG1fc2Vs ZWN0ZWRCaXRtYXA7DQoNCg0KICAgIGJvb2wgbV9iT3duc0RDOjE7DQoNCg0KDQogICAgV1hIREMg bV9oREM7DQogICAgaW50IG1faERDQ291bnQ7DQoNCg0KDQoNCiAgICBXWEhCSVRNQVAgbV9vbGRC aXRtYXA7DQogICAgV1hIUEVOIG1fb2xkUGVuOw0KICAgIFdYSEJSVVNIIG1fb2xkQnJ1c2g7DQog ICAgV1hIRk9OVCBtX29sZEZvbnQ7DQogICAgV1hIUEFMRVRURSBtX29sZFBhbGV0dGU7DQp9Ow0K IyA2NDQgIi4uLy4uL2luY2x1ZGUvd3gvZGMuaCIgMg0KIyAzMyAiLi4vLi4vaW5jbHVkZS93eC93 eC5oIiAyDQojIDEgIi4uLy4uL2luY2x1ZGUvd3gvZGNjbGllbnQuaCIgMQ0KDQoNCg0KDQojIDEg Ii4uLy4uL2luY2x1ZGUvd3gvbXN3L2RjY2xpZW50LmgiIDENCiMgMjAgIi4uLy4uL2luY2x1ZGUv d3gvbXN3L2RjY2xpZW50LmgiDQojcHJhZ21hIGludGVyZmFjZSAiZGNjbGllbnQuaCINCiMgMzEg Ii4uLy4uL2luY2x1ZGUvd3gvbXN3L2RjY2xpZW50LmgiDQpzdHJ1Y3QgX19hdHRyaWJ1dGVfXygo ZGxsaW1wb3J0KSkgd3hQYWludERDSW5mbzsNCg0KdHlwZWRlZiB3eFBhaW50RENJbmZvIF9Md3hB cnJheURDSW5mbzsgdHlwZWRlZiBpbnQgKCAqQ01QRlVOQ19Md3hBcnJheURDSW5mbykoX0x3eEFy cmF5RENJbmZvKiogcEl0ZW0xLCBfTHd4QXJyYXlEQ0luZm8qKiBwSXRlbTIpOyBjbGFzcyBfX2F0 dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eEFycmF5RENJbmZvIDogcHVibGljIHd4QmFzZUFycmF5 IHsgcHVibGljOiB3eEFycmF5RENJbmZvKCkgeyB9IHd4QXJyYXlEQ0luZm8oY29uc3Qgd3hBcnJh eURDSW5mbyYgc3JjKTsgd3hBcnJheURDSW5mbyYgb3BlcmF0b3I9KGNvbnN0IHd4QXJyYXlEQ0lu Zm8mIHNyYyk7IH53eEFycmF5RENJbmZvKCk7IF9Md3hBcnJheURDSW5mbyYgb3BlcmF0b3JbXShz aXplX3QgdWlJbmRleCkgY29uc3QgeyByZXR1cm4gKihfTHd4QXJyYXlEQ0luZm8qKXd4QmFzZUFy cmF5OjpJdGVtKHVpSW5kZXgpOyB9IF9Md3hBcnJheURDSW5mbyYgSXRlbShzaXplX3QgdWlJbmRl eCkgY29uc3QgeyByZXR1cm4gKihfTHd4QXJyYXlEQ0luZm8qKXd4QmFzZUFycmF5OjpJdGVtKHVp SW5kZXgpOyB9IF9Md3hBcnJheURDSW5mbyYgTGFzdCgpIGNvbnN0IHsgcmV0dXJuICooX0x3eEFy cmF5RENJbmZvKikod3hCYXNlQXJyYXk6Okl0ZW0oQ291bnQoKSAtIDEpKTsgfSBpbnQgSW5kZXgo Y29uc3QgX0x3eEFycmF5RENJbmZvJiBJdGVtLCBib29sIGJGcm9tRW5kID0gMCkgY29uc3Q7IHZv aWQgQWRkKGNvbnN0IF9Md3hBcnJheURDSW5mbyYgSXRlbSk7IHZvaWQgQWRkKGNvbnN0IF9Md3hB cnJheURDSW5mbyogcEl0ZW0pIHsgd3hCYXNlQXJyYXk6OkFkZCgobG9uZylwSXRlbSk7IH0gdm9p ZCBJbnNlcnQoY29uc3QgX0x3eEFycmF5RENJbmZvJiBJdGVtLCBzaXplX3QgdWlJbmRleCk7IHZv aWQgSW5zZXJ0KGNvbnN0IF9Md3hBcnJheURDSW5mbyogcEl0ZW0sIHNpemVfdCB1aUluZGV4KSB7 IHd4QmFzZUFycmF5OjpJbnNlcnQoKGxvbmcpcEl0ZW0sIHVpSW5kZXgpOyB9IHZvaWQgRW1wdHko KSB7IERvRW1wdHkoKTsgd3hCYXNlQXJyYXk6OkVtcHR5KCk7IH0gdm9pZCBDbGVhcigpIHsgRG9F bXB0eSgpOyB3eEJhc2VBcnJheTo6Q2xlYXIoKTsgfSBfTHd4QXJyYXlEQ0luZm8qIERldGFjaChz aXplX3QgdWlJbmRleCkgeyBfTHd4QXJyYXlEQ0luZm8qIHAgPSAoX0x3eEFycmF5RENJbmZvKil3 eEJhc2VBcnJheTo6SXRlbSh1aUluZGV4KTsgd3hCYXNlQXJyYXk6OlJlbW92ZUF0KHVpSW5kZXgp OyByZXR1cm4gcDsgfSB2b2lkIFJlbW92ZShzaXplX3QgdWlJbmRleCkgeyBSZW1vdmVBdCh1aUlu ZGV4KTsgfSB2b2lkIFJlbW92ZUF0KHNpemVfdCB1aUluZGV4KTsgdm9pZCBTb3J0KENNUEZVTkNf THd4QXJyYXlEQ0luZm8gZkNtcCkgeyB3eEJhc2VBcnJheTo6U29ydCgoQ01QRlVOQylmQ21wKTsg fSBwcml2YXRlOiB2b2lkIERvRW1wdHkoKTsgdm9pZCBEb0NvcHkoY29uc3Qgd3hBcnJheURDSW5m byYgc3JjKTsgfTsNCg0KDQoNCg0KDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3 eFdpbmRvd0RDIDogcHVibGljIHd4REMNCnsNCiAgICBwdWJsaWM6IHN0YXRpYyB3eENsYXNzSW5m byBzbV9jbGFzc3d4V2luZG93REM7IHd4Q2xhc3NJbmZvICpHZXRDbGFzc0luZm8oKSBjb25zdCB7 IHJldHVybiAmd3hXaW5kb3dEQzo6c21fY2xhc3N3eFdpbmRvd0RDOyB9DQoNCnB1YmxpYzoNCiAg ICB3eFdpbmRvd0RDKCk7DQoNCg0KICAgIHd4V2luZG93REMod3hXaW5kb3cgKndpbik7DQoNCiAg ICB2aXJ0dWFsIH53eFdpbmRvd0RDKCk7DQp9Ow0KDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxp bXBvcnQpKSB3eENsaWVudERDIDogcHVibGljIHd4V2luZG93REMNCnsNCiAgICBwdWJsaWM6IHN0 YXRpYyB3eENsYXNzSW5mbyBzbV9jbGFzc3d4Q2xpZW50REM7IHd4Q2xhc3NJbmZvICpHZXRDbGFz c0luZm8oKSBjb25zdCB7IHJldHVybiAmd3hDbGllbnREQzo6c21fY2xhc3N3eENsaWVudERDOyB9 DQoNCnB1YmxpYzoNCiAgICB3eENsaWVudERDKCk7DQoNCg0KICAgIHd4Q2xpZW50REMod3hXaW5k b3cgKndpbik7DQoNCiAgICB2aXJ0dWFsIH53eENsaWVudERDKCk7DQp9Ow0KDQpjbGFzcyBfX2F0 dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eFBhaW50REMgOiBwdWJsaWMgd3hXaW5kb3dEQw0Kew0K ICAgIHB1YmxpYzogc3RhdGljIHd4Q2xhc3NJbmZvIHNtX2NsYXNzd3hQYWludERDOyB3eENsYXNz SW5mbyAqR2V0Q2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnd4UGFpbnREQzo6c21fY2xhc3N3 eFBhaW50REM7IH0NCg0KcHVibGljOg0KICAgIHd4UGFpbnREQygpOw0KDQoNCiAgICB3eFBhaW50 REMod3hXaW5kb3cgKndpbik7DQoNCiAgICB2aXJ0dWFsIH53eFBhaW50REMoKTsNCg0KcHJvdGVj dGVkOg0KICAgIHN0YXRpYyB3eEFycmF5RENJbmZvIG1zX2NhY2hlOw0KDQoNCiAgICB3eFBhaW50 RENJbmZvICpGaW5kSW5DYWNoZShzaXplX3QgKmluZGV4ID0gX19udWxsKSBjb25zdDsNCn07DQoj IDYgIi4uLy4uL2luY2x1ZGUvd3gvZGNjbGllbnQuaCIgMg0KIyAzNCAiLi4vLi4vaW5jbHVkZS93 eC93eC5oIiAyDQojIDEgIi4uLy4uL2luY2x1ZGUvd3gvZGNtZW1vcnkuaCIgMQ0KDQoNCg0KDQoj IDEgIi4uLy4uL2luY2x1ZGUvd3gvbXN3L2RjbWVtb3J5LmgiIDENCiMgMTYgIi4uLy4uL2luY2x1 ZGUvd3gvbXN3L2RjbWVtb3J5LmgiDQojcHJhZ21hIGludGVyZmFjZSAiZGNtZW1vcnkuaCINCg0K DQoNCg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hNZW1vcnlEQyA6IHB1Ymxp YyB3eERDDQp7DQpwdWJsaWM6DQogICAgd3hNZW1vcnlEQygpOw0KICAgIHd4TWVtb3J5REMod3hE QyAqZGMpOw0KDQogICAgfnd4TWVtb3J5REMoKTsNCg0KICAgIHZpcnR1YWwgdm9pZCBEb0RyYXdS ZWN0YW5nbGUod3hDb29yZCB4LCB3eENvb3JkIHksIHd4Q29vcmQgd2lkdGgsIHd4Q29vcmQgaGVp Z2h0KTsNCiAgICB2aXJ0dWFsIHZvaWQgU2VsZWN0T2JqZWN0KGNvbnN0IHd4Qml0bWFwJiBiaXRt YXApOw0KDQogICAgdmlydHVhbCB2b2lkIERvR2V0U2l6ZShpbnQqIHdpZHRoLCBpbnQqIGhlaWdo dCkgY29uc3Q7DQoNCnByaXZhdGU6DQogICAgcHVibGljOiBzdGF0aWMgd3hDbGFzc0luZm8gc21f Y2xhc3N3eE1lbW9yeURDOyB3eENsYXNzSW5mbyAqR2V0Q2xhc3NJbmZvKCkgY29uc3QgeyByZXR1 cm4gJnd4TWVtb3J5REM6OnNtX2NsYXNzd3hNZW1vcnlEQzsgfQ0KfTsNCiMgNiAiLi4vLi4vaW5j bHVkZS93eC9kY21lbW9yeS5oIiAyDQojIDM1ICIuLi8uLi9pbmNsdWRlL3d4L3d4LmgiIDINCiMg MSAiLi4vLi4vaW5jbHVkZS93eC9kY3ByaW50LmgiIDENCg0KDQoNCg0KIyAxICIuLi8uLi9pbmNs dWRlL3d4L21zdy9kY3ByaW50LmgiIDENCiMgMTYgIi4uLy4uL2luY2x1ZGUvd3gvbXN3L2RjcHJp bnQuaCINCiNwcmFnbWEgaW50ZXJmYWNlICJkY3ByaW50LmgiDQoNCg0KDQoNCg0KIyAxICIuLi8u Li9pbmNsdWRlL3d4L2NtbmRhdGEuaCIgMQ0KIyAxNiAiLi4vLi4vaW5jbHVkZS93eC9jbW5kYXRh LmgiDQojcHJhZ21hIGludGVyZmFjZSAiY21uZGF0YS5oIg0KDQoNCg0KDQojIDEgIi4uLy4uL2lu Y2x1ZGUvd3gvZm9udHV0aWwuaCIgMQ0KIyAyMCAiLi4vLi4vaW5jbHVkZS93eC9mb250dXRpbC5o Ig0KI3ByYWdtYSBpbnRlcmZhY2UgImZvbnR1dGlsLmgiDQojIDUyICIuLi8uLi9pbmNsdWRlL3d4 L2ZvbnR1dGlsLmgiDQpzdHJ1Y3QgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hOYXRpdmVF bmNvZGluZ0luZm8NCnsNCiAgICB3eFN0cmluZyBmYWNlbmFtZTsNCiAgICB3eEZvbnRFbmNvZGlu ZyBlbmNvZGluZzsNCg0KDQogICAgd3hOYXRpdmVFbmNvZGluZ0luZm8oKSB7IGNoYXJzZXQgPSAw OyB9DQoNCiAgICBpbnQgY2hhcnNldDsNCiMgNzAgIi4uLy4uL2luY2x1ZGUvd3gvZm9udHV0aWwu aCINCiAgICBib29sIEZyb21TdHJpbmcoY29uc3Qgd3hTdHJpbmcmIHMpOw0KICAgIHd4U3RyaW5n IFRvU3RyaW5nKCkgY29uc3Q7DQp9Ow0KIyA4MSAiLi4vLi4vaW5jbHVkZS93eC9mb250dXRpbC5o Ig0KZXh0ZXJuIGJvb2wgd3hHZXROYXRpdmVGb250RW5jb2Rpbmcod3hGb250RW5jb2RpbmcgZW5j b2RpbmcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3eE5hdGl2ZUVuY29k aW5nSW5mbyAqaW5mbyk7DQoNCg0KDQpleHRlcm4gYm9vbCB3eFRlc3RGb250RW5jb2RpbmcoY29u c3Qgd3hOYXRpdmVFbmNvZGluZ0luZm8mIGluZm8pOw0KIyAyMiAiLi4vLi4vaW5jbHVkZS93eC9j bW5kYXRhLmgiIDINCg0KDQoNCg0KDQoNCg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0 KSkgd3hDb2xvdXJEYXRhOiBwdWJsaWMgd3hPYmplY3QNCnsNCiAgICBwdWJsaWM6IHN0YXRpYyB3 eENsYXNzSW5mbyBzbV9jbGFzc3d4Q29sb3VyRGF0YTsgd3hDbGFzc0luZm8gKkdldENsYXNzSW5m bygpIGNvbnN0IHsgcmV0dXJuICZ3eENvbG91ckRhdGE6OnNtX2NsYXNzd3hDb2xvdXJEYXRhOyB9 DQpwdWJsaWM6DQogICAgd3hDb2xvdXJEYXRhKCk7DQogICAgd3hDb2xvdXJEYXRhKGNvbnN0IHd4 Q29sb3VyRGF0YSYgZGF0YSk7DQogICAgfnd4Q29sb3VyRGF0YSgpOw0KDQogICAgdm9pZCBTZXRD aG9vc2VGdWxsKGJvb2wgZmxhZykgeyBjaG9vc2VGdWxsID0gZmxhZzsgfQ0KICAgIGJvb2wgR2V0 Q2hvb3NlRnVsbCgpIGNvbnN0IHsgcmV0dXJuIGNob29zZUZ1bGw7IH0NCiAgICB2b2lkIFNldENv bG91cih3eENvbG91ciYgY29sb3VyKSB7IGRhdGFDb2xvdXIgPSBjb2xvdXI7IH0NCiAgICB3eENv bG91ciAmR2V0Q29sb3VyKCkgeyByZXR1cm4gZGF0YUNvbG91cjsgfQ0KDQoNCiAgICB2b2lkIFNl dEN1c3RvbUNvbG91cihpbnQgaSwgd3hDb2xvdXImIGNvbG91cik7DQogICAgd3hDb2xvdXIgR2V0 Q3VzdG9tQ29sb3VyKGludCBpKTsNCg0KICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IHd4Q29sb3Vy RGF0YSYgZGF0YSk7DQoNCnB1YmxpYzoNCiAgICB3eENvbG91ciBkYXRhQ29sb3VyOw0KICAgIHd4 Q29sb3VyIGN1c3RDb2xvdXJzWzE2XTsNCiAgICBib29sIGNob29zZUZ1bGw7DQp9Ow0KDQpjbGFz cyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eEZvbnREYXRhOiBwdWJsaWMgd3hPYmplY3QN CnsNCiAgICBwdWJsaWM6IHN0YXRpYyB3eENsYXNzSW5mbyBzbV9jbGFzc3d4Rm9udERhdGE7IHd4 Q2xhc3NJbmZvICpHZXRDbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmd3hGb250RGF0YTo6c21f Y2xhc3N3eEZvbnREYXRhOyB9DQpwdWJsaWM6DQogICAgd3hGb250RGF0YSgpOw0KICAgIH53eEZv bnREYXRhKCk7DQoNCiAgICB2b2lkIFNldEFsbG93U3ltYm9scyhib29sIGZsYWcpIHsgYWxsb3dT eW1ib2xzID0gZmxhZzsgfQ0KICAgIGJvb2wgR2V0QWxsb3dTeW1ib2xzKCkgY29uc3QgeyByZXR1 cm4gYWxsb3dTeW1ib2xzOyB9DQoNCiAgICB2b2lkIFNldENvbG91cihjb25zdCB3eENvbG91ciYg Y29sb3VyKSB7IGZvbnRDb2xvdXIgPSBjb2xvdXI7IH0NCiAgICB3eENvbG91ciAmR2V0Q29sb3Vy KCkgeyByZXR1cm4gZm9udENvbG91cjsgfQ0KDQogICAgdm9pZCBTZXRTaG93SGVscChib29sIGZs YWcpIHsgc2hvd0hlbHAgPSBmbGFnOyB9DQogICAgYm9vbCBHZXRTaG93SGVscCgpIGNvbnN0IHsg cmV0dXJuIHNob3dIZWxwOyB9DQoNCiAgICB2b2lkIEVuYWJsZUVmZmVjdHMoYm9vbCBmbGFnKSB7 IGVuYWJsZUVmZmVjdHMgPSBmbGFnOyB9DQogICAgYm9vbCBHZXRFbmFibGVFZmZlY3RzKCkgY29u c3QgeyByZXR1cm4gZW5hYmxlRWZmZWN0czsgfQ0KDQogICAgdm9pZCBTZXRJbml0aWFsRm9udChj b25zdCB3eEZvbnQmIGZvbnQpIHsgaW5pdGlhbEZvbnQgPSBmb250OyB9DQogICAgd3hGb250IEdl dEluaXRpYWxGb250KCkgY29uc3QgeyByZXR1cm4gaW5pdGlhbEZvbnQ7IH0NCg0KICAgIHZvaWQg U2V0Q2hvc2VuRm9udChjb25zdCB3eEZvbnQmIGZvbnQpIHsgY2hvc2VuRm9udCA9IGZvbnQ7IH0N CiAgICB3eEZvbnQgR2V0Q2hvc2VuRm9udCgpIGNvbnN0IHsgcmV0dXJuIGNob3NlbkZvbnQ7IH0N Cg0KICAgIHZvaWQgU2V0UmFuZ2UoaW50IG1pblJhbmdlLCBpbnQgbWF4UmFuZ2UpIHsgbWluU2l6 ZSA9IG1pblJhbmdlOyBtYXhTaXplID0gbWF4UmFuZ2U7IH0NCg0KDQoNCg0KICAgIHd4Rm9udEVu Y29kaW5nIEdldEVuY29kaW5nKCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGluZzsgfQ0KICAgIHZv aWQgU2V0RW5jb2Rpbmcod3hGb250RW5jb2RpbmcgZW5jb2RpbmcpIHsgbV9lbmNvZGluZyA9IGVu Y29kaW5nOyB9DQoNCiAgICB3eE5hdGl2ZUVuY29kaW5nSW5mbyYgRW5jb2RpbmdJbmZvKCkgeyBy ZXR1cm4gbV9lbmNvZGluZ0luZm87IH0NCg0KcHVibGljOg0KICAgIHd4Q29sb3VyIGZvbnRDb2xv dXI7DQogICAgYm9vbCBzaG93SGVscDsNCiAgICBib29sIGFsbG93U3ltYm9sczsNCiAgICBib29s IGVuYWJsZUVmZmVjdHM7DQogICAgd3hGb250IGluaXRpYWxGb250Ow0KICAgIHd4Rm9udCBjaG9z ZW5Gb250Ow0KICAgIGludCBtaW5TaXplOw0KICAgIGludCBtYXhTaXplOw0KDQpwcml2YXRlOg0K ICAgIHd4Rm9udEVuY29kaW5nIG1fZW5jb2Rpbmc7DQogICAgd3hOYXRpdmVFbmNvZGluZ0luZm8g bV9lbmNvZGluZ0luZm87DQp9Ow0KDQoNCg0KDQoNCg0KDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChk bGxpbXBvcnQpKSB3eFByaW50RGF0YTogcHVibGljIHd4T2JqZWN0DQp7DQogICAgcHVibGljOiBz dGF0aWMgd3hDbGFzc0luZm8gc21fY2xhc3N3eFByaW50RGF0YTsgd3hDbGFzc0luZm8gKkdldENs YXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZ3eFByaW50RGF0YTo6c21fY2xhc3N3eFByaW50RGF0 YTsgfQ0KDQogICAgd3hQcmludERhdGEoKTsNCiAgICB3eFByaW50RGF0YShjb25zdCB3eFByaW50 RGF0YSYgcHJpbnREYXRhKTsNCiAgICB+d3hQcmludERhdGEoKTsNCg0KICAgIGludCBHZXROb0Nv cGllcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbnROb0NvcGllczsgfTsNCiAgICBib29sIEdldENv bGxhdGUoKSBjb25zdCB7IHJldHVybiBtX3ByaW50Q29sbGF0ZTsgfTsNCiAgICBpbnQgR2V0T3Jp ZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBtX3ByaW50T3JpZW50YXRpb247IH07DQoNCiAgICBj b25zdCB3eFN0cmluZyYgR2V0UHJpbnRlck5hbWUoKSBjb25zdCB7IHJldHVybiBtX3ByaW50ZXJO YW1lOyB9DQogICAgYm9vbCBHZXRDb2xvdXIoKSBjb25zdCB7IHJldHVybiBtX2NvbG91cjsgfQ0K ICAgIHd4RHVwbGV4TW9kZSBHZXREdXBsZXgoKSBjb25zdCB7IHJldHVybiBtX2R1cGxleE1vZGU7 IH0NCiAgICB3eFBhcGVyU2l6ZSBHZXRQYXBlcklkKCkgY29uc3QgeyByZXR1cm4gbV9wYXBlcklk OyB9DQogICAgY29uc3Qgd3hTaXplJiBHZXRQYXBlclNpemUoKSBjb25zdCB7IHJldHVybiBtX3Bh cGVyU2l6ZTsgfQ0KDQogICAgd3hQcmludFF1YWxpdHkgR2V0UXVhbGl0eSgpIGNvbnN0IHsgcmV0 dXJuIG1fcHJpbnRRdWFsaXR5OyB9DQoNCiAgICB2b2lkIFNldE5vQ29waWVzKGludCB2KSB7IG1f cHJpbnROb0NvcGllcyA9IHY7IH07DQogICAgdm9pZCBTZXRDb2xsYXRlKGJvb2wgZmxhZykgeyBt X3ByaW50Q29sbGF0ZSA9IGZsYWc7IH07DQogICAgdm9pZCBTZXRPcmllbnRhdGlvbihpbnQgb3Jp ZW50KSB7IG1fcHJpbnRPcmllbnRhdGlvbiA9IG9yaWVudDsgfTsNCg0KICAgIHZvaWQgU2V0UHJp bnRlck5hbWUoY29uc3Qgd3hTdHJpbmcmIG5hbWUpIHsgbV9wcmludGVyTmFtZSA9IG5hbWU7IH0N CiAgICB2b2lkIFNldENvbG91cihib29sIGNvbG91cikgeyBtX2NvbG91ciA9IGNvbG91cjsgfQ0K ICAgIHZvaWQgU2V0RHVwbGV4KHd4RHVwbGV4TW9kZSBkdXBsZXgpIHsgbV9kdXBsZXhNb2RlID0g ZHVwbGV4OyB9DQogICAgdm9pZCBTZXRQYXBlcklkKHd4UGFwZXJTaXplIHNpemVJZCkgeyBtX3Bh cGVySWQgPSBzaXplSWQ7IH0NCiAgICB2b2lkIFNldFBhcGVyU2l6ZShjb25zdCB3eFNpemUmIHN6 KSB7IG1fcGFwZXJTaXplID0gc3o7IH0NCiAgICB2b2lkIFNldFF1YWxpdHkod3hQcmludFF1YWxp dHkgcXVhbGl0eSkgeyBtX3ByaW50UXVhbGl0eSA9IHF1YWxpdHk7IH0NCg0KDQogICAgY29uc3Qg d3hTdHJpbmcmIEdldFByaW50ZXJDb21tYW5kKCkgY29uc3QgeyByZXR1cm4gbV9wcmludGVyQ29t bWFuZDsgfQ0KICAgIGNvbnN0IHd4U3RyaW5nJiBHZXRQcmludGVyT3B0aW9ucygpIGNvbnN0IHsg cmV0dXJuIG1fcHJpbnRlck9wdGlvbnM7IH0NCiAgICBjb25zdCB3eFN0cmluZyYgR2V0UHJldmll d0NvbW1hbmQoKSBjb25zdCB7IHJldHVybiBtX3ByZXZpZXdDb21tYW5kOyB9DQogICAgY29uc3Qg d3hTdHJpbmcmIEdldEZpbGVuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9maWxlbmFtZTsgfQ0KICAg IGNvbnN0IHd4U3RyaW5nJiBHZXRGb250TWV0cmljUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYWZt UGF0aDsgfQ0KICAgIGRvdWJsZSBHZXRQcmludGVyU2NhbGVYKCkgY29uc3QgeyByZXR1cm4gbV9w cmludGVyU2NhbGVYOyB9DQogICAgZG91YmxlIEdldFByaW50ZXJTY2FsZVkoKSBjb25zdCB7IHJl dHVybiBtX3ByaW50ZXJTY2FsZVk7IH0NCiAgICBsb25nIEdldFByaW50ZXJUcmFuc2xhdGVYKCkg Y29uc3QgeyByZXR1cm4gbV9wcmludGVyVHJhbnNsYXRlWDsgfQ0KICAgIGxvbmcgR2V0UHJpbnRl clRyYW5zbGF0ZVkoKSBjb25zdCB7IHJldHVybiBtX3ByaW50ZXJUcmFuc2xhdGVZOyB9DQogICAg d3hQcmludE1vZGUgR2V0UHJpbnRNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9wcmludE1vZGU7IH0N Cg0KICAgIHZvaWQgU2V0UHJpbnRlckNvbW1hbmQoY29uc3Qgd3hTdHJpbmcmIGNvbW1hbmQpIHsg bV9wcmludGVyQ29tbWFuZCA9IGNvbW1hbmQ7IH0NCiAgICB2b2lkIFNldFByaW50ZXJPcHRpb25z KGNvbnN0IHd4U3RyaW5nJiBvcHRpb25zKSB7IG1fcHJpbnRlck9wdGlvbnMgPSBvcHRpb25zOyB9 DQogICAgdm9pZCBTZXRQcmV2aWV3Q29tbWFuZChjb25zdCB3eFN0cmluZyYgY29tbWFuZCkgeyBt X3ByZXZpZXdDb21tYW5kID0gY29tbWFuZDsgfQ0KICAgIHZvaWQgU2V0RmlsZW5hbWUoY29uc3Qg d3hTdHJpbmcmIGZpbGVuYW1lKSB7IG1fZmlsZW5hbWUgPSBmaWxlbmFtZTsgfQ0KICAgIHZvaWQg U2V0Rm9udE1ldHJpY1BhdGgoY29uc3Qgd3hTdHJpbmcmIHBhdGgpIHsgbV9hZm1QYXRoID0gcGF0 aDsgfQ0KICAgIHZvaWQgU2V0UHJpbnRlclNjYWxlWChkb3VibGUgeCkgeyBtX3ByaW50ZXJTY2Fs ZVggPSB4OyB9DQogICAgdm9pZCBTZXRQcmludGVyU2NhbGVZKGRvdWJsZSB5KSB7IG1fcHJpbnRl clNjYWxlWSA9IHk7IH0NCiAgICB2b2lkIFNldFByaW50ZXJTY2FsaW5nKGRvdWJsZSB4LCBkb3Vi bGUgeSkgeyBtX3ByaW50ZXJTY2FsZVggPSB4OyBtX3ByaW50ZXJTY2FsZVkgPSB5OyB9DQogICAg dm9pZCBTZXRQcmludGVyVHJhbnNsYXRlWChsb25nIHgpIHsgbV9wcmludGVyVHJhbnNsYXRlWCA9 IHg7IH0NCiAgICB2b2lkIFNldFByaW50ZXJUcmFuc2xhdGVZKGxvbmcgeSkgeyBtX3ByaW50ZXJU cmFuc2xhdGVZID0geTsgfQ0KICAgIHZvaWQgU2V0UHJpbnRlclRyYW5zbGF0aW9uKGxvbmcgeCwg bG9uZyB5KSB7IG1fcHJpbnRlclRyYW5zbGF0ZVggPSB4OyBtX3ByaW50ZXJUcmFuc2xhdGVZID0g eTsgfQ0KICAgIHZvaWQgU2V0UHJpbnRNb2RlKHd4UHJpbnRNb2RlIHByaW50TW9kZSkgeyBtX3By aW50TW9kZSA9IHByaW50TW9kZTsgfQ0KDQogICAgdm9pZCBvcGVyYXRvcj0oY29uc3Qgd3hQcmlu dERhdGEmIGRhdGEpOw0KIyAxNzUgIi4uLy4uL2luY2x1ZGUvd3gvY21uZGF0YS5oIg0KICAgIHZv aWQgQ29udmVydFRvTmF0aXZlKCk7DQogICAgdm9pZCBDb252ZXJ0RnJvbU5hdGl2ZSgpOw0KICAg IHZvaWQqIEdldE5hdGl2ZURhdGEoKSBjb25zdCB7IHJldHVybiBtX2Rldk1vZGU7IH0NCiAgICB2 b2lkIFNldE5hdGl2ZURhdGEodm9pZCogZGF0YSkgeyBtX2Rldk1vZGUgPSBkYXRhOyB9DQogICAg dm9pZCogR2V0TmF0aXZlRGF0YURldk5hbWVzKCkgY29uc3QgeyByZXR1cm4gbV9kZXZOYW1lczsg fQ0KICAgIHZvaWQgU2V0TmF0aXZlRGF0YURldk5hbWVzKHZvaWQqIGRhdGEpIHsgbV9kZXZOYW1l cyA9IGRhdGE7IH0NCg0KDQoNCg0KDQpwdWJsaWM6DQoNCiAgICB2b2lkKiBtX2Rldk1vZGU7DQog ICAgdm9pZCogbV9kZXZOYW1lczsNCg0KDQoNCg0KcHJpdmF0ZToNCg0KICAgIGludCBtX3ByaW50 Tm9Db3BpZXM7DQogICAgaW50IG1fcHJpbnRPcmllbnRhdGlvbjsNCiAgICBib29sIG1fcHJpbnRD b2xsYXRlOw0KDQoNCiAgICB3eFN0cmluZyBtX3ByaW50ZXJOYW1lOw0KICAgIGJvb2wgbV9jb2xv dXI7DQogICAgd3hEdXBsZXhNb2RlIG1fZHVwbGV4TW9kZTsNCiAgICB3eFByaW50UXVhbGl0eSBt X3ByaW50UXVhbGl0eTsNCiAgICB3eFBhcGVyU2l6ZSBtX3BhcGVySWQ7DQogICAgd3hTaXplIG1f cGFwZXJTaXplOw0KDQoNCiAgICB3eFN0cmluZyBtX3ByaW50ZXJDb21tYW5kOw0KICAgIHd4U3Ry aW5nIG1fcHJldmlld0NvbW1hbmQ7DQogICAgd3hTdHJpbmcgbV9wcmludGVyT3B0aW9uczsNCiAg ICB3eFN0cmluZyBtX2ZpbGVuYW1lOw0KICAgIHd4U3RyaW5nIG1fYWZtUGF0aDsNCiAgICBkb3Vi bGUgbV9wcmludGVyU2NhbGVYOw0KICAgIGRvdWJsZSBtX3ByaW50ZXJTY2FsZVk7DQogICAgbG9u ZyBtX3ByaW50ZXJUcmFuc2xhdGVYOw0KICAgIGxvbmcgbV9wcmludGVyVHJhbnNsYXRlWTsNCiAg ICB3eFByaW50TW9kZSBtX3ByaW50TW9kZTsNCn07DQojIDIyOCAiLi4vLi4vaW5jbHVkZS93eC9j bW5kYXRhLmgiDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eFByaW50RGlhbG9n RGF0YTogcHVibGljIHd4T2JqZWN0DQp7DQogICAgcHVibGljOiBzdGF0aWMgd3hDbGFzc0luZm8g c21fY2xhc3N3eFByaW50RGlhbG9nRGF0YTsgd3hDbGFzc0luZm8gKkdldENsYXNzSW5mbygpIGNv bnN0IHsgcmV0dXJuICZ3eFByaW50RGlhbG9nRGF0YTo6c21fY2xhc3N3eFByaW50RGlhbG9nRGF0 YTsgfQ0KDQogICAgd3hQcmludERpYWxvZ0RhdGEoKTsNCiAgICB3eFByaW50RGlhbG9nRGF0YShj b25zdCB3eFByaW50RGlhbG9nRGF0YSYgZGlhbG9nRGF0YSk7DQogICAgd3hQcmludERpYWxvZ0Rh dGEoY29uc3Qgd3hQcmludERhdGEmIHByaW50RGF0YSk7DQogICAgfnd4UHJpbnREaWFsb2dEYXRh KCk7DQoNCiAgICBpbnQgR2V0RnJvbVBhZ2UoKSBjb25zdCB7IHJldHVybiBtX3ByaW50RnJvbVBh Z2U7IH07DQogICAgaW50IEdldFRvUGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbnRUb1BhZ2U7 IH07DQogICAgaW50IEdldE1pblBhZ2UoKSBjb25zdCB7IHJldHVybiBtX3ByaW50TWluUGFnZTsg fTsNCiAgICBpbnQgR2V0TWF4UGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbnRNYXhQYWdlOyB9 Ow0KICAgIGludCBHZXROb0NvcGllcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbnROb0NvcGllczsg fTsNCiAgICBib29sIEdldEFsbFBhZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9wcmludEFsbFBhZ2Vz OyB9Ow0KICAgIGJvb2wgR2V0U2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wcmludFNlbGVj dGlvbjsgfTsNCiAgICBib29sIEdldENvbGxhdGUoKSBjb25zdCB7IHJldHVybiBtX3ByaW50Q29s bGF0ZTsgfTsNCiAgICBib29sIEdldFByaW50VG9GaWxlKCkgY29uc3QgeyByZXR1cm4gbV9wcmlu dFRvRmlsZTsgfTsNCiAgICBib29sIEdldFNldHVwRGlhbG9nKCkgY29uc3QgeyByZXR1cm4gbV9w cmludFNldHVwRGlhbG9nOyB9Ow0KDQogICAgdm9pZCBTZXRGcm9tUGFnZShpbnQgdikgeyBtX3By aW50RnJvbVBhZ2UgPSB2OyB9Ow0KICAgIHZvaWQgU2V0VG9QYWdlKGludCB2KSB7IG1fcHJpbnRU b1BhZ2UgPSB2OyB9Ow0KICAgIHZvaWQgU2V0TWluUGFnZShpbnQgdikgeyBtX3ByaW50TWluUGFn ZSA9IHY7IH07DQogICAgdm9pZCBTZXRNYXhQYWdlKGludCB2KSB7IG1fcHJpbnRNYXhQYWdlID0g djsgfTsNCiAgICB2b2lkIFNldE5vQ29waWVzKGludCB2KSB7IG1fcHJpbnROb0NvcGllcyA9IHY7 IH07DQogICAgdm9pZCBTZXRBbGxQYWdlcyhib29sIGZsYWcpIHsgbV9wcmludEFsbFBhZ2VzID0g ZmxhZzsgfTsNCiAgICB2b2lkIFNldFNlbGVjdGlvbihib29sIGZsYWcpIHsgbV9wcmludFNlbGVj dGlvbiA9IGZsYWc7IH07DQogICAgdm9pZCBTZXRDb2xsYXRlKGJvb2wgZmxhZykgeyBtX3ByaW50 Q29sbGF0ZSA9IGZsYWc7IH07DQogICAgdm9pZCBTZXRQcmludFRvRmlsZShib29sIGZsYWcpIHsg bV9wcmludFRvRmlsZSA9IGZsYWc7IH07DQogICAgdm9pZCBTZXRTZXR1cERpYWxvZyhib29sIGZs YWcpIHsgbV9wcmludFNldHVwRGlhbG9nID0gZmxhZzsgfTsNCg0KICAgIHZvaWQgRW5hYmxlUHJp bnRUb0ZpbGUoYm9vbCBmbGFnKSB7IG1fcHJpbnRFbmFibGVQcmludFRvRmlsZSA9IGZsYWc7IH07 DQogICAgdm9pZCBFbmFibGVTZWxlY3Rpb24oYm9vbCBmbGFnKSB7IG1fcHJpbnRFbmFibGVTZWxl Y3Rpb24gPSBmbGFnOyB9Ow0KICAgIHZvaWQgRW5hYmxlUGFnZU51bWJlcnMoYm9vbCBmbGFnKSB7 IG1fcHJpbnRFbmFibGVQYWdlTnVtYmVycyA9IGZsYWc7IH07DQogICAgdm9pZCBFbmFibGVIZWxw KGJvb2wgZmxhZykgeyBtX3ByaW50RW5hYmxlSGVscCA9IGZsYWc7IH07DQoNCiAgICBib29sIEdl dEVuYWJsZVByaW50VG9GaWxlKCkgY29uc3QgeyByZXR1cm4gbV9wcmludEVuYWJsZVByaW50VG9G aWxlOyB9Ow0KICAgIGJvb2wgR2V0RW5hYmxlU2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9w cmludEVuYWJsZVNlbGVjdGlvbjsgfTsNCiAgICBib29sIEdldEVuYWJsZVBhZ2VOdW1iZXJzKCkg Y29uc3QgeyByZXR1cm4gbV9wcmludEVuYWJsZVBhZ2VOdW1iZXJzOyB9Ow0KICAgIGJvb2wgR2V0 RW5hYmxlSGVscCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbnRFbmFibGVIZWxwOyB9Ow0KDQogICAg d3hQcmludERhdGEmIEdldFByaW50RGF0YSgpIHsgcmV0dXJuIG1fcHJpbnREYXRhOyB9DQogICAg dm9pZCBTZXRQcmludERhdGEoY29uc3Qgd3hQcmludERhdGEmIHByaW50RGF0YSkgeyBtX3ByaW50 RGF0YSA9IHByaW50RGF0YTsgfQ0KDQogICAgdm9pZCBvcGVyYXRvcj0oY29uc3Qgd3hQcmludERp YWxvZ0RhdGEmIGRhdGEpOw0KICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IHd4UHJpbnREYXRhJiBk YXRhKTsNCg0KDQoNCiAgICB2b2lkIENvbnZlcnRUb05hdGl2ZSgpOw0KICAgIHZvaWQgQ29udmVy dEZyb21OYXRpdmUoKTsNCiAgICB2b2lkIFNldE93bmVyV2luZG93KHd4V2luZG93KiB3aW4pOw0K ICAgIHZvaWQqIEdldE5hdGl2ZURhdGEoKSBjb25zdCB7IHJldHVybiBtX3ByaW50RGxnRGF0YTsg fQ0KDQoNCg0KDQoNCg0KICAgIHZvaWQqIG1fcHJpbnREbGdEYXRhOw0KDQoNCg0KDQpwcml2YXRl Og0KDQogICAgaW50IG1fcHJpbnRGcm9tUGFnZTsNCiAgICBpbnQgbV9wcmludFRvUGFnZTsNCiAg ICBpbnQgbV9wcmludE1pblBhZ2U7DQogICAgaW50IG1fcHJpbnRNYXhQYWdlOw0KICAgIGludCBt X3ByaW50Tm9Db3BpZXM7DQogICAgYm9vbCBtX3ByaW50QWxsUGFnZXM7DQogICAgYm9vbCBtX3By aW50Q29sbGF0ZTsNCiAgICBib29sIG1fcHJpbnRUb0ZpbGU7DQogICAgYm9vbCBtX3ByaW50U2Vs ZWN0aW9uOw0KICAgIGJvb2wgbV9wcmludEVuYWJsZVNlbGVjdGlvbjsNCiAgICBib29sIG1fcHJp bnRFbmFibGVQYWdlTnVtYmVyczsNCiAgICBib29sIG1fcHJpbnRFbmFibGVIZWxwOw0KICAgIGJv b2wgbV9wcmludEVuYWJsZVByaW50VG9GaWxlOw0KICAgIGJvb2wgbV9wcmludFNldHVwRGlhbG9n Ow0KDQogICAgd3hQcmludERhdGEgbV9wcmludERhdGE7DQp9Ow0KIyAzMTkgIi4uLy4uL2luY2x1 ZGUvd3gvY21uZGF0YS5oIg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hQYWdl U2V0dXBEaWFsb2dEYXRhOiBwdWJsaWMgd3hPYmplY3QNCnsNCiAgICBwdWJsaWM6IHN0YXRpYyB3 eENsYXNzSW5mbyBzbV9jbGFzc3d4UGFnZVNldHVwRGlhbG9nRGF0YTsgd3hDbGFzc0luZm8gKkdl dENsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZ3eFBhZ2VTZXR1cERpYWxvZ0RhdGE6OnNtX2Ns YXNzd3hQYWdlU2V0dXBEaWFsb2dEYXRhOyB9DQoNCnB1YmxpYzoNCiAgICB3eFBhZ2VTZXR1cERp YWxvZ0RhdGEoKTsNCiAgICB3eFBhZ2VTZXR1cERpYWxvZ0RhdGEoY29uc3Qgd3hQYWdlU2V0dXBE aWFsb2dEYXRhJiBkaWFsb2dEYXRhKTsNCiAgICB3eFBhZ2VTZXR1cERpYWxvZ0RhdGEoY29uc3Qg d3hQcmludERhdGEmIHByaW50RGF0YSk7DQogICAgfnd4UGFnZVNldHVwRGlhbG9nRGF0YSgpOw0K DQogICAgd3hTaXplIEdldFBhcGVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFwZXJTaXplOyB9 Ow0KICAgIHd4UGFwZXJTaXplIEdldFBhcGVySWQoKSBjb25zdCB7IHJldHVybiBtX3ByaW50RGF0 YS5HZXRQYXBlcklkKCk7IH07DQogICAgd3hQb2ludCBHZXRNaW5NYXJnaW5Ub3BMZWZ0KCkgY29u c3QgeyByZXR1cm4gbV9taW5NYXJnaW5Ub3BMZWZ0OyB9Ow0KICAgIHd4UG9pbnQgR2V0TWluTWFy Z2luQm90dG9tUmlnaHQoKSBjb25zdCB7IHJldHVybiBtX21pbk1hcmdpbkJvdHRvbVJpZ2h0OyB9 Ow0KICAgIHd4UG9pbnQgR2V0TWFyZ2luVG9wTGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFyZ2lu VG9wTGVmdDsgfTsNCiAgICB3eFBvaW50IEdldE1hcmdpbkJvdHRvbVJpZ2h0KCkgY29uc3QgeyBy ZXR1cm4gbV9tYXJnaW5Cb3R0b21SaWdodDsgfTsNCg0KICAgIGJvb2wgR2V0RGVmYXVsdE1pbk1h cmdpbnMoKSBjb25zdCB7IHJldHVybiBtX2RlZmF1bHRNaW5NYXJnaW5zOyB9Ow0KICAgIGJvb2wg R2V0RW5hYmxlTWFyZ2lucygpIGNvbnN0IHsgcmV0dXJuIG1fZW5hYmxlTWFyZ2luczsgfTsNCiAg ICBib29sIEdldEVuYWJsZU9yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9lbmFibGVPcmll bnRhdGlvbjsgfTsNCiAgICBib29sIEdldEVuYWJsZVBhcGVyKCkgY29uc3QgeyByZXR1cm4gbV9l bmFibGVQYXBlcjsgfTsNCiAgICBib29sIEdldEVuYWJsZVByaW50ZXIoKSBjb25zdCB7IHJldHVy biBtX2VuYWJsZVByaW50ZXI7IH07DQogICAgYm9vbCBHZXREZWZhdWx0SW5mbygpIGNvbnN0IHsg cmV0dXJuIG1fZ2V0RGVmYXVsdEluZm87IH07DQogICAgYm9vbCBHZXRFbmFibGVIZWxwKCkgY29u c3QgeyByZXR1cm4gbV9lbmFibGVIZWxwOyB9Ow0KDQoNCg0KICAgIHZvaWQgU2V0UGFwZXJTaXpl KGNvbnN0IHd4U2l6ZSYgc3opOw0KDQogICAgdm9pZCBTZXRQYXBlcklkKHd4UGFwZXJTaXplJiBp ZCkgeyBtX3ByaW50RGF0YS5TZXRQYXBlcklkKGlkKTsgfTsNCg0KDQogICAgdm9pZCBTZXRQYXBl clNpemUod3hQYXBlclNpemUgaWQpOw0KDQogICAgdm9pZCBTZXRNaW5NYXJnaW5Ub3BMZWZ0KGNv bnN0IHd4UG9pbnQmIHB0KSB7IG1fbWluTWFyZ2luVG9wTGVmdCA9IHB0OyB9Ow0KICAgIHZvaWQg U2V0TWluTWFyZ2luQm90dG9tUmlnaHQoY29uc3Qgd3hQb2ludCYgcHQpIHsgbV9taW5NYXJnaW5C b3R0b21SaWdodCA9IHB0OyB9Ow0KICAgIHZvaWQgU2V0TWFyZ2luVG9wTGVmdChjb25zdCB3eFBv aW50JiBwdCkgeyBtX21hcmdpblRvcExlZnQgPSBwdDsgfTsNCiAgICB2b2lkIFNldE1hcmdpbkJv dHRvbVJpZ2h0KGNvbnN0IHd4UG9pbnQmIHB0KSB7IG1fbWFyZ2luQm90dG9tUmlnaHQgPSBwdDsg fTsNCiAgICB2b2lkIFNldERlZmF1bHRNaW5NYXJnaW5zKGJvb2wgZmxhZykgeyBtX2RlZmF1bHRN aW5NYXJnaW5zID0gZmxhZzsgfTsNCiAgICB2b2lkIFNldERlZmF1bHRJbmZvKGJvb2wgZmxhZykg eyBtX2dldERlZmF1bHRJbmZvID0gZmxhZzsgfTsNCg0KICAgIHZvaWQgRW5hYmxlTWFyZ2lucyhi b29sIGZsYWcpIHsgbV9lbmFibGVNYXJnaW5zID0gZmxhZzsgfTsNCiAgICB2b2lkIEVuYWJsZU9y aWVudGF0aW9uKGJvb2wgZmxhZykgeyBtX2VuYWJsZU9yaWVudGF0aW9uID0gZmxhZzsgfTsNCiAg ICB2b2lkIEVuYWJsZVBhcGVyKGJvb2wgZmxhZykgeyBtX2VuYWJsZVBhcGVyID0gZmxhZzsgfTsN CiAgICB2b2lkIEVuYWJsZVByaW50ZXIoYm9vbCBmbGFnKSB7IG1fZW5hYmxlUHJpbnRlciA9IGZs YWc7IH07DQogICAgdm9pZCBFbmFibGVIZWxwKGJvb2wgZmxhZykgeyBtX2VuYWJsZUhlbHAgPSBm bGFnOyB9Ow0KDQoNCg0KICAgIHZvaWQgQ29udmVydFRvTmF0aXZlKCk7DQogICAgdm9pZCBDb252 ZXJ0RnJvbU5hdGl2ZSgpOw0KICAgIHZvaWQgU2V0T3duZXJXaW5kb3cod3hXaW5kb3cqIHdpbik7 DQogICAgdm9pZCogR2V0TmF0aXZlRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZVNldHVwRGF0 YTsgfQ0KDQoNCg0KDQoNCg0KDQogICAgdm9pZCBDYWxjdWxhdGVJZEZyb21QYXBlclNpemUoKTsN Cg0KDQogICAgdm9pZCBDYWxjdWxhdGVQYXBlclNpemVGcm9tSWQoKTsNCg0KICAgIHZvaWQgb3Bl cmF0b3I9KGNvbnN0IHd4UGFnZVNldHVwRGlhbG9nRGF0YSYgZGF0YSk7DQogICAgdm9pZCBvcGVy YXRvcj0oY29uc3Qgd3hQcmludERhdGEmIGRhdGEpOw0KDQogICAgd3hQcmludERhdGEmIEdldFBy aW50RGF0YSgpIHsgcmV0dXJuIG1fcHJpbnREYXRhOyB9DQogICAgdm9pZCBTZXRQcmludERhdGEo Y29uc3Qgd3hQcmludERhdGEmIHByaW50RGF0YSkgeyBtX3ByaW50RGF0YSA9IHByaW50RGF0YTsg fQ0KDQoNCiAgICB2b2lkKiBtX3BhZ2VTZXR1cERhdGE7DQoNCg0KDQoNCnByaXZhdGU6DQoNCiAg ICB3eFNpemUgbV9wYXBlclNpemU7DQogICAgd3hQb2ludCBtX21pbk1hcmdpblRvcExlZnQ7DQog ICAgd3hQb2ludCBtX21pbk1hcmdpbkJvdHRvbVJpZ2h0Ow0KICAgIHd4UG9pbnQgbV9tYXJnaW5U b3BMZWZ0Ow0KICAgIHd4UG9pbnQgbV9tYXJnaW5Cb3R0b21SaWdodDsNCg0KDQogICAgYm9vbCBt X2RlZmF1bHRNaW5NYXJnaW5zOw0KICAgIGJvb2wgbV9lbmFibGVNYXJnaW5zOw0KICAgIGJvb2wg bV9lbmFibGVPcmllbnRhdGlvbjsNCiAgICBib29sIG1fZW5hYmxlUGFwZXI7DQogICAgYm9vbCBt X2VuYWJsZVByaW50ZXI7DQogICAgYm9vbCBtX2dldERlZmF1bHRJbmZvOw0KICAgIGJvb2wgbV9l bmFibGVIZWxwOw0KDQogICAgd3hQcmludERhdGEgbV9wcmludERhdGE7DQp9Ow0KIyAyMyAiLi4v Li4vaW5jbHVkZS93eC9tc3cvZGNwcmludC5oIiAyDQoNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRs bGltcG9ydCkpIHd4UHJpbnRlckRDOiBwdWJsaWMgd3hEQw0Kew0KcHVibGljOg0KcHVibGljOiBz dGF0aWMgd3hDbGFzc0luZm8gc21fY2xhc3N3eFByaW50ZXJEQzsgd3hDbGFzc0luZm8gKkdldENs YXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZ3eFByaW50ZXJEQzo6c21fY2xhc3N3eFByaW50ZXJE QzsgfQ0KDQoNCiAgICB3eFByaW50ZXJEQyhjb25zdCB3eFN0cmluZyYgZHJpdmVyLCBjb25zdCB3 eFN0cmluZyYgZGV2aWNlLCBjb25zdCB3eFN0cmluZyYgb3V0cHV0LCBib29sIGludGVyYWN0aXZl ID0gMSwgaW50IG9yaWVudGF0aW9uID0gMSk7DQoNCg0KICAgIHd4UHJpbnRlckRDKGNvbnN0IHd4 UHJpbnREYXRhJiBkYXRhKTsNCg0KICAgIHd4UHJpbnRlckRDKFdYSERDIHRoZURDKTsNCg0KICAg IH53eFByaW50ZXJEQyh2b2lkKTsNCg0KDQogICAgdmlydHVhbCBib29sIFN0YXJ0RG9jKGNvbnN0 IHd4U3RyaW5nJiBtZXNzYWdlKTsNCiAgICB2aXJ0dWFsIHZvaWQgRW5kRG9jKCk7DQogICAgdmly dHVhbCB2b2lkIFN0YXJ0UGFnZSgpOw0KICAgIHZpcnR1YWwgdm9pZCBFbmRQYWdlKCk7DQoNCnBy b3RlY3RlZDoNCiAgICB2aXJ0dWFsIHZvaWQgRG9EcmF3Qml0bWFwKGNvbnN0IHd4Qml0bWFwICZi bXAsIHd4Q29vcmQgeCwgd3hDb29yZCB5LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ym9vbCB1c2VNYXNrID0gMCk7DQogICAgdmlydHVhbCBib29sIERvQmxpdCh3eENvb3JkIHhkZXN0 LCB3eENvb3JkIHlkZXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgd3hDb29yZCB3aWR0aCwg d3hDb29yZCBoZWlnaHQsDQogICAgICAgICAgICAgICAgICAgICAgICB3eERDICpzb3VyY2UsIHd4 Q29vcmQgeHNyYywgd3hDb29yZCB5c3JjLA0KICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJv cCA9IHd4Q09QWSwgYm9vbCB1c2VNYXNrID0gMCk7DQoNCiAgICB3eFByaW50RGF0YSBtX3ByaW50 RGF0YTsNCn07DQoNCg0KDQoNCg0KV1hIREMgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hH ZXRQcmludGVyREMoY29uc3Qgd3hQcmludERhdGEmIGRhdGEpOw0KIyA2ICIuLi8uLi9pbmNsdWRl L3d4L2RjcHJpbnQuaCIgMg0KIyAzNiAiLi4vLi4vaW5jbHVkZS93eC93eC5oIiAyDQojIDEgIi4u Ly4uL2luY2x1ZGUvd3gvZGNzY3JlZW4uaCIgMQ0KDQoNCg0KDQojIDEgIi4uLy4uL2luY2x1ZGUv d3gvbXN3L2Rjc2NyZWVuLmgiIDENCiMgMTYgIi4uLy4uL2luY2x1ZGUvd3gvbXN3L2Rjc2NyZWVu LmgiDQojcHJhZ21hIGludGVyZmFjZSAiZGNzY3JlZW4uaCINCg0KDQoNCg0KY2xhc3MgX19hdHRy aWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hTY3JlZW5EQzogcHVibGljIHd4V2luZG93REMNCnsNCiAg cHVibGljOiBzdGF0aWMgd3hDbGFzc0luZm8gc21fY2xhc3N3eFNjcmVlbkRDOyB3eENsYXNzSW5m byAqR2V0Q2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnd4U2NyZWVuREM6OnNtX2NsYXNzd3hT Y3JlZW5EQzsgfQ0KDQogcHVibGljOg0KDQogIHd4U2NyZWVuREModm9pZCk7DQogIH53eFNjcmVl bkRDKHZvaWQpOw0KDQoNCg0KICBzdGF0aWMgYm9vbCBTdGFydERyYXdpbmdPblRvcCh3eFdpbmRv dyogKSB7IHJldHVybiAxOyB9DQogIHN0YXRpYyBib29sIFN0YXJ0RHJhd2luZ09uVG9wKHd4UmVj dCogPSBfX251bGwpIHsgcmV0dXJuIDE7IH0NCiAgc3RhdGljIGJvb2wgRW5kRHJhd2luZ09uVG9w KHZvaWQpIHsgcmV0dXJuIDE7IH0NCn07DQojIDYgIi4uLy4uL2luY2x1ZGUvd3gvZGNzY3JlZW4u aCIgMg0KIyAzNyAiLi4vLi4vaW5jbHVkZS93eC93eC5oIiAyDQojIDEgIi4uLy4uL2luY2x1ZGUv d3gvYnV0dG9uLmgiIDENCg0KDQoNCg0KIyAxICIuLi8uLi9pbmNsdWRlL3d4L21zdy9idXR0b24u aCIgMQ0KIyAxNiAiLi4vLi4vaW5jbHVkZS93eC9tc3cvYnV0dG9uLmgiDQojcHJhZ21hIGludGVy ZmFjZSAiYnV0dG9uLmgiDQoNCg0KIyAxICIuLi8uLi9pbmNsdWRlL3d4L2NvbnRyb2wuaCIgMQ0K IyAyMCAiLi4vLi4vaW5jbHVkZS93eC9jb250cm9sLmgiDQojcHJhZ21hIGludGVyZmFjZSAiY29u dHJvbGJhc2UuaCINCiMgMjkgIi4uLy4uL2luY2x1ZGUvd3gvY29udHJvbC5oIg0KY2xhc3MgX19h dHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hDb250cm9sQmFzZSA6IHB1YmxpYyB3eFdpbmRvdw0K ew0KcHVibGljOg0KDQoNCiAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZCh3eENvbW1hbmRFdmVudCAm ZXZlbnQpOw0KDQpwcm90ZWN0ZWQ6DQoNCg0KICAgIGJvb2wgQ3JlYXRlQ29udHJvbCh3eFdpbmRv d0Jhc2UgKnBhcmVudCwNCiAgICAgICAgICAgICAgICAgICAgICAgd3hXaW5kb3dJRCBpZCwNCiAg ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd3hQb2ludCYgcG9zLA0KICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCB3eFNpemUmIHNpemUsDQogICAgICAgICAgICAgICAgICAgICAgIGxvbmcg c3R5bGUsDQogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHd4VmFsaWRhdG9yJiB2YWxpZGF0 b3IsDQogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHd4U3RyaW5nJiBuYW1lKTsNCg0KDQog ICAgdm9pZCBJbmhlcml0QXR0cmlidXRlcygpOw0KDQoNCiAgICB2b2lkIEluaXRDb21tYW5kRXZl bnQod3hDb21tYW5kRXZlbnQmIGV2ZW50KSBjb25zdDsNCn07DQoNCg0KDQoNCg0KDQojIDEgIi4u Ly4uL2luY2x1ZGUvd3gvbXN3L2NvbnRyb2wuaCIgMQ0KIyAxNiAiLi4vLi4vaW5jbHVkZS93eC9t c3cvY29udHJvbC5oIg0KI3ByYWdtYSBpbnRlcmZhY2UgImNvbnRyb2wuaCINCg0KDQoNCg0KX19h dHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgZXh0ZXJuIGNvbnN0IGNoYXIqIHd4Q29udHJvbE5hbWVT dHI7DQoNCg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hDb250cm9sIDogcHVi bGljIHd4Q29udHJvbEJhc2UNCnsNCiAgICBwdWJsaWM6IHN0YXRpYyB3eENsYXNzSW5mbyBzbV9j bGFzc3d4Q29udHJvbDsgd3hDbGFzc0luZm8gKkdldENsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJu ICZ3eENvbnRyb2w6OnNtX2NsYXNzd3hDb250cm9sOyB9DQoNCnB1YmxpYzoNCiAgIHd4Q29udHJv bCgpOw0KICAgd3hDb250cm9sKHd4V2luZG93ICpwYXJlbnQsIHd4V2luZG93SUQgaWQsDQogICAg ICAgICAgICAgY29uc3Qgd3hQb2ludCYgcG9zID0gd3hEZWZhdWx0UG9zaXRpb24sDQogICAgICAg ICAgICAgY29uc3Qgd3hTaXplJiBzaXplID0gd3hEZWZhdWx0U2l6ZSwgbG9uZyBzdHlsZSA9IDAs DQogICAgICAgICAgICAgY29uc3Qgd3hWYWxpZGF0b3ImIHZhbGlkYXRvciA9IHd4RGVmYXVsdFZh bGlkYXRvciwNCiAgICAgICAgICAgICBjb25zdCB3eFN0cmluZyYgbmFtZSA9IHd4Q29udHJvbE5h bWVTdHIpDQogICAgew0KICAgICAgICBDcmVhdGUocGFyZW50LCBpZCwgcG9zLCBzaXplLCBzdHls ZSwgdmFsaWRhdG9yLCBuYW1lKTsNCiAgICB9DQoNCiAgICBib29sIENyZWF0ZSh3eFdpbmRvdyAq cGFyZW50LCB3eFdpbmRvd0lEIGlkLA0KICAgICAgICAgICAgY29uc3Qgd3hQb2ludCYgcG9zID0g d3hEZWZhdWx0UG9zaXRpb24sDQogICAgICAgICAgICBjb25zdCB3eFNpemUmIHNpemUgPSB3eERl ZmF1bHRTaXplLCBsb25nIHN0eWxlID0gMCwNCiAgICAgICAgICAgIGNvbnN0IHd4VmFsaWRhdG9y JiB2YWxpZGF0b3IgPSB3eERlZmF1bHRWYWxpZGF0b3IsDQogICAgICAgICAgICBjb25zdCB3eFN0 cmluZyYgbmFtZSA9IHd4Q29udHJvbE5hbWVTdHIpOw0KDQogICAgdmlydHVhbCB+d3hDb250cm9s KCk7DQoNCg0KICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKHd4Q29tbWFuZEV2ZW50JiBldmVudCkg eyBQcm9jZXNzQ29tbWFuZChldmVudCk7IH0NCg0KDQoNCg0KDQogICAgYm9vbCBQcm9jZXNzQ29t bWFuZCh3eENvbW1hbmRFdmVudCYgZXZlbnQpOw0KDQoNCg0KICAgIHZpcnR1YWwgYm9vbCBNU1dP bk5vdGlmeShpbnQgaWRDdHJsLCBXWExQQVJBTSBsUGFyYW0sIFdYTFBBUkFNICpyZXN1bHQpOw0K DQoNCg0KICAgIHZpcnR1YWwgYm9vbCBNU1dPbkRyYXcoV1hEUkFXSVRFTVNUUlVDVCAqKSB7IHJl dHVybiAwOyB9Ow0KICAgIHZpcnR1YWwgYm9vbCBNU1dPbk1lYXN1cmUoV1hNRUFTVVJFSVRFTVNU UlVDVCAqKSB7IHJldHVybiAwOyB9Ow0KDQogICAgd3hBcnJheUxvbmcgR2V0U3ViY29udHJvbHMo KSB7IHJldHVybiBtX3N1YkNvbnRyb2xzOyB9DQoNCiAgICB2b2lkIE9uRXJhc2VCYWNrZ3JvdW5k KHd4RXJhc2VFdmVudCYgZXZlbnQpOw0KDQogICAgdmlydHVhbCBXWEhCUlVTSCBPbkN0bENvbG9y KFdYSERDIHBEQywgV1hIV05EIHBXbmQsIFdYVUlOVCBuQ3RsQ29sb3IsDQogICAgICAgICAgICBX WFVJTlQgbWVzc2FnZSwgV1hXUEFSQU0gd1BhcmFtLCBXWExQQVJBTSBsUGFyYW0pOw0KIyA5MCAi Li4vLi4vaW5jbHVkZS93eC9tc3cvY29udHJvbC5oIg0KcHJvdGVjdGVkOg0KDQoNCiAgICB3eEFy cmF5TG9uZyBtX3N1YkNvbnRyb2xzOw0KDQogICAgdmlydHVhbCB3eFNpemUgRG9HZXRCZXN0U2l6 ZSgpIGNvbnN0Ow0KIyAxMDUgIi4uLy4uL2luY2x1ZGUvd3gvbXN3L2NvbnRyb2wuaCINCiAgICBi b29sIE1TV0NyZWF0ZUNvbnRyb2woY29uc3QgY2hhciAqY2xhc3NuYW1lLA0KICAgICAgICAgICAg V1hEV09SRCBzdHlsZSwNCiAgICAgICAgICAgIGNvbnN0IHd4UG9pbnQmIHBvcyA9IHd4RGVmYXVs dFBvc2l0aW9uLA0KICAgICAgICAgICAgY29uc3Qgd3hTaXplJiBzaXplID0gd3hEZWZhdWx0U2l6 ZSwNCiAgICAgICAgICAgIGNvbnN0IHd4U3RyaW5nJiBsYWJlbCA9IHd4RW1wdHlTdHJpbmcsDQog ICAgICAgICAgICBXWERXT1JEIGV4c3R5bGUgPSAoV1hEV09SRCktMSk7DQoNCg0KDQogICAgV1hE V09SRCBHZXRFeFN0eWxlKFdYRFdPUkQmIHN0eWxlLCBib29sICp3YW50M0QpIGNvbnN0Ow0KDQpw cml2YXRlOg0KICAgIHByaXZhdGU6IHN0YXRpYyBjb25zdCB3eEV2ZW50VGFibGVFbnRyeSBzbV9l dmVudFRhYmxlRW50cmllc1tdO3Byb3RlY3RlZDogc3RhdGljIGNvbnN0IHd4RXZlbnRUYWJsZSBz bV9ldmVudFRhYmxlOyB2aXJ0dWFsIGNvbnN0IHd4RXZlbnRUYWJsZSogR2V0RXZlbnRUYWJsZSgp IGNvbnN0Ow0KfTsNCiMgNjAgIi4uLy4uL2luY2x1ZGUvd3gvY29udHJvbC5oIiAyDQojIDIwICIu Li8uLi9pbmNsdWRlL3d4L21zdy9idXR0b24uaCIgMg0KDQpfX2F0dHJpYnV0ZV9fKChkbGxpbXBv cnQpKSBleHRlcm4gY29uc3QgY2hhciogd3hCdXR0b25OYW1lU3RyOw0KDQoNCg0KDQoNCmNsYXNz IF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4QnV0dG9uIDogcHVibGljIHd4Q29udHJvbA0K ew0KcHVibGljOiBzdGF0aWMgd3hDbGFzc0luZm8gc21fY2xhc3N3eEJ1dHRvbjsgd3hDbGFzc0lu Zm8gKkdldENsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZ3eEJ1dHRvbjo6c21fY2xhc3N3eEJ1 dHRvbjsgfQ0KDQpwdWJsaWM6DQogICAgd3hCdXR0b24oKSB7IH0NCiAgICB3eEJ1dHRvbih3eFdp bmRvdyAqcGFyZW50LCB3eFdpbmRvd0lEIGlkLCBjb25zdCB3eFN0cmluZyYgbGFiZWwsDQogICAg ICAgICAgICBjb25zdCB3eFBvaW50JiBwb3MgPSB3eERlZmF1bHRQb3NpdGlvbiwNCiAgICAgICAg ICAgIGNvbnN0IHd4U2l6ZSYgc2l6ZSA9IHd4RGVmYXVsdFNpemUsIGxvbmcgc3R5bGUgPSAwLA0K ICAgICAgICAgICAgY29uc3Qgd3hWYWxpZGF0b3ImIHZhbGlkYXRvciA9IHd4RGVmYXVsdFZhbGlk YXRvciwNCiAgICAgICAgICAgIGNvbnN0IHd4U3RyaW5nJiBuYW1lID0gd3hCdXR0b25OYW1lU3Ry KQ0KICAgIHsNCiAgICAgICAgQ3JlYXRlKHBhcmVudCwgaWQsIGxhYmVsLCBwb3MsIHNpemUsIHN0 eWxlLCB2YWxpZGF0b3IsIG5hbWUpOw0KICAgIH0NCg0KICAgIGJvb2wgQ3JlYXRlKHd4V2luZG93 ICpwYXJlbnQsIHd4V2luZG93SUQgaWQsIGNvbnN0IHd4U3RyaW5nJiBsYWJlbCwNCiAgICAgICAg ICAgIGNvbnN0IHd4UG9pbnQmIHBvcyA9IHd4RGVmYXVsdFBvc2l0aW9uLA0KICAgICAgICAgICAg Y29uc3Qgd3hTaXplJiBzaXplID0gd3hEZWZhdWx0U2l6ZSwgbG9uZyBzdHlsZSA9IDAsDQogICAg ICAgICAgICBjb25zdCB3eFZhbGlkYXRvciYgdmFsaWRhdG9yID0gd3hEZWZhdWx0VmFsaWRhdG9y LA0KICAgICAgICAgICAgY29uc3Qgd3hTdHJpbmcmIG5hbWUgPSB3eEJ1dHRvbk5hbWVTdHIpOw0K DQogICAgdmlydHVhbCB+d3hCdXR0b24oKTsNCg0KICAgIHZpcnR1YWwgdm9pZCBTZXREZWZhdWx0 KCk7DQoNCiAgICBzdGF0aWMgd3hTaXplIEdldERlZmF1bHRTaXplKCk7DQoNCg0KICAgIHZpcnR1 YWwgdm9pZCBDb21tYW5kKHd4Q29tbWFuZEV2ZW50JiBldmVudCk7DQogICAgdmlydHVhbCBsb25n IE1TV1dpbmRvd1Byb2MoV1hVSU5UIG5Nc2csIFdYV1BBUkFNIHdQYXJhbSwgV1hMUEFSQU0gbFBh cmFtKTsNCiAgICB2aXJ0dWFsIGJvb2wgTVNXQ29tbWFuZChXWFVJTlQgcGFyYW0sIFdYV09SRCBp ZCk7DQoNCg0KDQogICAgdmlydHVhbCBib29sIFNldEJhY2tncm91bmRDb2xvdXIoY29uc3Qgd3hD b2xvdXIgJmNvbG91cik7DQogICAgdmlydHVhbCBib29sIFNldEZvcmVncm91bmRDb2xvdXIoY29u c3Qgd3hDb2xvdXIgJmNvbG91cik7DQoNCiAgICB2aXJ0dWFsIGJvb2wgTVNXT25EcmF3KFdYRFJB V0lURU1TVFJVQ1QgKml0ZW0pOw0KDQpwcml2YXRlOg0KICAgIHZvaWQgTWFrZU93bmVyRHJhd24o KTsNCg0KDQpwcm90ZWN0ZWQ6DQoNCiAgICBib29sIFNlbmRDbGlja0V2ZW50KCk7DQoNCiAgICB2 aXJ0dWFsIHd4U2l6ZSBEb0dldEJlc3RTaXplKCkgY29uc3Q7DQp9Ow0KIyA2ICIuLi8uLi9pbmNs dWRlL3d4L2J1dHRvbi5oIiAyDQojIDM4ICIuLi8uLi9pbmNsdWRlL3d4L3d4LmgiIDINCiMgMSAi Li4vLi4vaW5jbHVkZS93eC9tZW51LmgiIDENCiMgMTYgIi4uLy4uL2luY2x1ZGUvd3gvbWVudS5o Ig0KI3ByYWdtYSBpbnRlcmZhY2UgIm1lbnViYXNlLmgiDQojIDI4ICIuLi8uLi9pbmNsdWRlL3d4 L21lbnUuaCINCiMgMSAiLi4vLi4vaW5jbHVkZS93eC9tZW51aXRlbS5oIiAxDQojIDI1ICIuLi8u Li9pbmNsdWRlL3d4L21lbnVpdGVtLmgiDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQp KSB3eEFjY2VsZXJhdG9yRW50cnk7DQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3 eE1lbnVJdGVtOw0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hNZW51Ow0KDQoN Cg0KDQoNCg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hNZW51SXRlbUJhc2Ug OiBwdWJsaWMgd3hPYmplY3QNCnsNCnB1YmxpYzoNCg0KICAgIHN0YXRpYyB3eE1lbnVJdGVtICpO ZXcod3hNZW51ICpwYXJlbnRNZW51ID0gKHd4TWVudSAqKV9fbnVsbCwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBpZCA9ICgtMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCB3eFN0cmluZyYgdGV4dCA9IHd4RW1wdHlTdHJpbmcsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCB3eFN0cmluZyYgaGVscCA9IHd4RW1wdHlTdHJpbmcsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICBib29sIGlzQ2hlY2thYmxlID0gMCwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIHd4TWVudSAqc3ViTWVudSA9ICh3eE1lbnUgKilfX251bGwpOw0KDQoNCiAgICB2 aXJ0dWFsIH53eE1lbnVJdGVtQmFzZSgpOw0KDQoNCiAgICB3eE1lbnUgKkdldE1lbnUoKSBjb25z dCB7IHJldHVybiBtX3BhcmVudE1lbnU7IH0NCg0KDQogICAgdm9pZCBTZXRJZChpbnQgaWQpIHsg bV9pZCA9IGlkOyB9DQogICAgaW50IEdldElkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQ0KICAg IGJvb2wgSXNTZXBhcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX2lkID09ICgtMSk7IH0NCg0KDQoN Cg0KDQoNCg0KICAgIHZpcnR1YWwgdm9pZCBTZXRUZXh0KGNvbnN0IHd4U3RyaW5nJiBzdHIpIHsg bV90ZXh0ID0gc3RyOyB9DQogICAgd3hTdHJpbmcgR2V0TGFiZWwoKSBjb25zdCB7IHJldHVybiBH ZXRMYWJlbEZyb21UZXh0KG1fdGV4dCk7IH0NCiAgICBjb25zdCB3eFN0cmluZyYgR2V0VGV4dCgp IGNvbnN0IHsgcmV0dXJuIG1fdGV4dDsgfQ0KDQoNCiAgICBzdGF0aWMgd3hTdHJpbmcgR2V0TGFi ZWxGcm9tVGV4dChjb25zdCB3eFN0cmluZyYgdGV4dCk7DQoNCg0KICAgIHZpcnR1YWwgdm9pZCBT ZXRDaGVja2FibGUoYm9vbCBjaGVja2FibGUpIHsgbV9pc0NoZWNrYWJsZSA9IGNoZWNrYWJsZTsg fQ0KICAgIGJvb2wgSXNDaGVja2FibGUoKSBjb25zdCB7IHJldHVybiBtX2lzQ2hlY2thYmxlOyB9 DQoNCiAgICBib29sIElzU3ViTWVudSgpIGNvbnN0IHsgcmV0dXJuIG1fc3ViTWVudSAhPSBfX251 bGw7IH0NCiAgICB2b2lkIFNldFN1Yk1lbnUod3hNZW51ICptZW51KSB7IG1fc3ViTWVudSA9IG1l bnU7IH0NCiAgICB3eE1lbnUgKkdldFN1Yk1lbnUoKSBjb25zdCB7IHJldHVybiBtX3N1Yk1lbnU7 IH0NCg0KDQogICAgdmlydHVhbCB2b2lkIEVuYWJsZShib29sIGVuYWJsZSA9IDEpIHsgbV9pc0Vu YWJsZWQgPSBlbmFibGU7IH0NCiAgICB2aXJ0dWFsIGJvb2wgSXNFbmFibGVkKCkgY29uc3QgeyBy ZXR1cm4gbV9pc0VuYWJsZWQ7IH0NCg0KICAgIHZpcnR1YWwgdm9pZCBDaGVjayhib29sIGNoZWNr ID0gMSkgeyBtX2lzQ2hlY2tlZCA9IGNoZWNrOyB9DQogICAgdmlydHVhbCBib29sIElzQ2hlY2tl ZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNDaGVja2VkOyB9DQogICAgdm9pZCBUb2dnbGUoKSB7IENo ZWNrKCFtX2lzQ2hlY2tlZCk7IH0NCg0KDQogICAgdm9pZCBTZXRIZWxwKGNvbnN0IHd4U3RyaW5n JiBzdHIpIHsgbV9oZWxwID0gc3RyOyB9DQogICAgY29uc3Qgd3hTdHJpbmcmIEdldEhlbHAoKSBj b25zdCB7IHJldHVybiBtX2hlbHA7IH0NCg0KDQoNCiAgICB2aXJ0dWFsIHd4QWNjZWxlcmF0b3JF bnRyeSAqR2V0QWNjZWwoKSBjb25zdCB7IHJldHVybiBfX251bGw7IH0NCg0KDQoNCiAgICB2aXJ0 dWFsIHZvaWQgU2V0QWNjZWwod3hBY2NlbGVyYXRvckVudHJ5ICphY2NlbCk7DQoNCg0KDQogICAg dm9pZCBTZXROYW1lKGNvbnN0IHd4U3RyaW5nJiBzdHIpIHsgU2V0VGV4dChzdHIpOyB9DQogICAg Y29uc3Qgd3hTdHJpbmcmIEdldE5hbWUoKSBjb25zdCB7IHJldHVybiBHZXRUZXh0KCk7IH0NCg0K cHJvdGVjdGVkOg0KICAgIGludCBtX2lkOw0KICAgIHd4TWVudSAqbV9wYXJlbnRNZW51LA0KICAg ICAgICAgICAgICAgICAqbV9zdWJNZW51Ow0KICAgIHd4U3RyaW5nIG1fdGV4dCwNCiAgICAgICAg ICAgICAgICAgIG1faGVscDsNCiAgICBib29sIG1faXNDaGVja2FibGU7DQogICAgYm9vbCBtX2lz Q2hlY2tlZDsNCiAgICBib29sIG1faXNFbmFibGVkOw0KDQoNCiAgICB3eE1lbnVJdGVtQmFzZSgp IHsgfQ0KDQpwcml2YXRlOg0KDQoNCiAgICB3eE1lbnVJdGVtQmFzZShjb25zdCB3eE1lbnVJdGVt QmFzZSYgaXRlbSk7DQogICAgd3hNZW51SXRlbUJhc2UmIG9wZXJhdG9yPShjb25zdCB3eE1lbnVJ dGVtQmFzZSYgaXRlbSk7DQp9Ow0KIyAxMzAgIi4uLy4uL2luY2x1ZGUvd3gvbWVudWl0ZW0uaCIN CiMgMSAiLi4vLi4vaW5jbHVkZS93eC9tc3cvbWVudWl0ZW0uaCIgMQ0KIyAxNiAiLi4vLi4vaW5j bHVkZS93eC9tc3cvbWVudWl0ZW0uaCINCiNwcmFnbWEgaW50ZXJmYWNlICJtZW51aXRlbS5oIg0K DQoNCg0KDQoNCg0KDQojIDEgIi4uLy4uL2luY2x1ZGUvd3gvb3duZXJkcncuaCIgMQ0KIyAxOCAi Li4vLi4vaW5jbHVkZS93eC9vd25lcmRydy5oIg0KI3ByYWdtYSBpbnRlcmZhY2UgIm93bmVyZHJ3 LmgiDQojIDM0ICIuLi8uLi9pbmNsdWRlL3d4L293bmVyZHJ3LmgiDQpjbGFzcyBfX2F0dHJpYnV0 ZV9fKChkbGxpbXBvcnQpKSB3eE93bmVyRHJhd24NCnsNCnB1YmxpYzoNCg0KICB3eE93bmVyRHJh d24oY29uc3Qgd3hTdHJpbmcmIHN0ciA9IHd4RW1wdHlTdHJpbmcsDQogICAgICAgICAgICAgICBi b29sIGJDaGVja2FibGUgPSAwLA0KICAgICAgICAgICAgICAgYm9vbCBiTWVudUl0ZW0gPSAwKTsN CiAgdmlydHVhbCB+d3hPd25lckRyYXduKCkgeyB9DQoNCg0KICB2b2lkIFNldEZvbnQoY29uc3Qg d3hGb250JiBmb250KQ0KICAgICAgeyBtX2ZvbnQgPSBmb250OyBtX2JPd25lckRyYXduID0gMTsg fQ0KDQogIHd4Rm9udCYgR2V0Rm9udCgpIGNvbnN0IHsgcmV0dXJuICh3eEZvbnQgJiltX2ZvbnQ7 IH0NCg0KICB2b2lkIFNldFRleHRDb2xvdXIoY29uc3Qgd3hDb2xvdXImIGNvbFRleHQpDQogICAg ICB7IG1fY29sVGV4dCA9IGNvbFRleHQ7IG1fYk93bmVyRHJhd24gPSAxOyB9DQoNCiAgd3hDb2xv dXImIEdldFRleHRDb2xvdXIoKSBjb25zdCB7IHJldHVybiAod3hDb2xvdXImKSBtX2NvbFRleHQ7 IH0NCg0KICB2b2lkIFNldEJhY2tncm91bmRDb2xvdXIoY29uc3Qgd3hDb2xvdXImIGNvbEJhY2sp DQogICAgICB7IG1fY29sQmFjayA9IGNvbEJhY2s7IG1fYk93bmVyRHJhd24gPSAxOyB9DQoNCiAg d3hDb2xvdXImIEdldEJhY2tncm91bmRDb2xvdXIoKSBjb25zdA0KICAgICAgeyByZXR1cm4gKHd4 Q29sb3VyJikgbV9jb2xCYWNrIDsgfQ0KDQogIHZvaWQgU2V0Qml0bWFwcyhjb25zdCB3eEJpdG1h cCYgYm1wQ2hlY2tlZCwNCiAgICAgICAgICAgICAgICAgIGNvbnN0IHd4Qml0bWFwJiBibXBVbmNo ZWNrZWQgPSB3eE51bGxCaXRtYXApDQogICAgICB7IG1fYm1wQ2hlY2tlZCA9IGJtcENoZWNrZWQ7 DQogICAgICAgIG1fYm1wVW5jaGVja2VkID0gYm1wVW5jaGVja2VkOw0KICAgICAgICBtX2JPd25l ckRyYXduID0gMTsgfQ0KDQogIGNvbnN0IHd4Qml0bWFwJiBHZXRCaXRtYXAoYm9vbCBiQ2hlY2tl ZCA9IDEpIGNvbnN0DQogICAgICB7IHJldHVybiAoYkNoZWNrZWQgPyBtX2JtcENoZWNrZWQgOiBt X2JtcFVuY2hlY2tlZCk7IH0NCg0KDQoNCg0KDQoNCg0KICB2b2lkIFNldE1hcmdpbldpZHRoKGlu dCBuV2lkdGgpDQogIHsNCiAgICAgIG1zX25MYXN0TWFyZ2luV2lkdGggPSBtX25NYXJnaW5XaWR0 aCA9IChzaXplX3QpIG5XaWR0aDsNCiAgICAgIGlmICggKChzaXplX3QpIG5XaWR0aCkgIT0gbXNf bkRlZmF1bHRNYXJnaW5XaWR0aCApDQogICAgICAgICAgbV9iT3duZXJEcmF3biA9IDE7DQogIH0N Cg0KICBpbnQgR2V0TWFyZ2luV2lkdGgoKSBjb25zdCB7IHJldHVybiAoaW50KSBtX25NYXJnaW5X aWR0aDsgfQ0KICBzdGF0aWMgaW50IEdldERlZmF1bHRNYXJnaW5XaWR0aCgpIHsgcmV0dXJuIChp bnQpIG1zX25EZWZhdWx0TWFyZ2luV2lkdGg7IH0NCg0KDQogIHZvaWQgU2V0TmFtZShjb25zdCB3 eFN0cmluZyYgc3RyTmFtZSkgeyBtX3N0ck5hbWUgPSBzdHJOYW1lOyB9DQogIGNvbnN0IHd4U3Ry aW5nJiBHZXROYW1lKCkgY29uc3QgeyByZXR1cm4gbV9zdHJOYW1lOyB9DQogIHZvaWQgU2V0Q2hl Y2thYmxlKGJvb2wgY2hlY2thYmxlKSB7IG1fYkNoZWNrYWJsZSA9IGNoZWNrYWJsZTsgfQ0KICBi b29sIElzQ2hlY2thYmxlKCkgY29uc3QgeyByZXR1cm4gbV9iQ2hlY2thYmxlOyB9DQoNCg0KDQoN Cg0KDQogIGJvb2wgSXNPd25lckRyYXduKCkgY29uc3QgeyByZXR1cm4gbV9iT3duZXJEcmF3bjsg fQ0KICB2b2lkIFJlc2V0T3duZXJEcmF3bigpIHsgbV9iT3duZXJEcmF3biA9IDA7IH0NCg0KcHVi bGljOg0KDQoNCiAgZW51bSB3eE9EQWN0aW9uDQogIHsNCiAgICB3eE9ERHJhd0FsbCA9IDB4MDAw MSwNCiAgICB3eE9EU2VsZWN0Q2hhbmdlZCA9IDB4MDAwMiwNCiAgICB3eE9ERm9jdXNDaGFuZ2Vk ID0gMHgwMDA0DQogIH07DQoNCiAgZW51bSB3eE9EU3RhdHVzDQogIHsNCiAgICB3eE9EU2VsZWN0 ZWQgPSAweDAwMDEsDQogICAgd3hPREdyYXllZCA9IDB4MDAwMiwNCiAgICB3eE9ERGlzYWJsZWQg PSAweDAwMDQsDQogICAgd3hPRENoZWNrZWQgPSAweDAwMDgsDQogICAgd3hPREhhc0ZvY3VzID0g MHgwMDEwLA0KICAgIHd4T0REZWZhdWx0ID0gMHgwMDIwDQogIH07DQoNCg0KICB2aXJ0dWFsIGJv b2wgT25NZWFzdXJlSXRlbShzaXplX3QgKnB3aWR0aCwgc2l6ZV90ICpwaGVpZ2h0KTsNCiAgdmly dHVhbCBib29sIE9uRHJhd0l0ZW0od3hEQyYgZGMsIGNvbnN0IHd4UmVjdCYgcmMsIHd4T0RBY3Rp b24gYWN0LCB3eE9EU3RhdHVzIHN0YXQpOw0KDQpwcm90ZWN0ZWQ6DQogIHd4U3RyaW5nIG1fc3Ry TmFtZTsNCg0KcHJpdmF0ZToNCiAgc3RhdGljIHNpemVfdCBtc19uRGVmYXVsdE1hcmdpbldpZHRo Ow0KICBzdGF0aWMgc2l6ZV90IG1zX25MYXN0TWFyZ2luV2lkdGg7DQoNCiAgYm9vbCBtX2JDaGVj a2FibGUsDQogICAgICAgICAgICBtX2JPd25lckRyYXduOw0KDQogIHd4Rm9udCBtX2ZvbnQ7DQog IHd4Q29sb3VyIG1fY29sVGV4dCwNCiAgICAgICAgICAgIG1fY29sQmFjazsNCiAgd3hCaXRtYXAg bV9ibXBDaGVja2VkLA0KICAgICAgICAgICAgbV9ibXBVbmNoZWNrZWQ7DQoNCiAgc2l6ZV90IG1f bkhlaWdodCwNCiAgICAgICAgICAgIG1fbk1hcmdpbldpZHRoOw0KfTsNCiMgMjUgIi4uLy4uL2lu Y2x1ZGUvd3gvbXN3L21lbnVpdGVtLmgiIDINCg0KDQoNCg0KDQoNCmNsYXNzIF9fYXR0cmlidXRl X18oKGRsbGltcG9ydCkpIHd4TWVudUl0ZW0gOiBwdWJsaWMgd3hNZW51SXRlbUJhc2UNCg0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyB3eE93bmVyRHJhd24NCg0Kew0KcHVi bGljOg0KDQogICAgd3hNZW51SXRlbSh3eE1lbnUgKnBhcmVudE1lbnUgPSAod3hNZW51ICopX19u dWxsLA0KICAgICAgICAgICAgICAgaW50IGlkID0gKC0xKSwNCiAgICAgICAgICAgICAgIGNvbnN0 IHd4U3RyaW5nJiBuYW1lID0gd3hFbXB0eVN0cmluZywNCiAgICAgICAgICAgICAgIGNvbnN0IHd4 U3RyaW5nJiBoZWxwID0gd3hFbXB0eVN0cmluZywNCiAgICAgICAgICAgICAgIGJvb2wgaXNDaGVj a2FibGUgPSAwLA0KICAgICAgICAgICAgICAgd3hNZW51ICpzdWJNZW51ID0gKHd4TWVudSAqKV9f bnVsbCk7DQogICAgdmlydHVhbCB+d3hNZW51SXRlbSgpOw0KDQoNCiAgICB2aXJ0dWFsIHZvaWQg U2V0VGV4dChjb25zdCB3eFN0cmluZyYgc3RyTmFtZSk7DQogICAgdmlydHVhbCB2b2lkIFNldENo ZWNrYWJsZShib29sIGNoZWNrYWJsZSk7DQoNCiAgICB2aXJ0dWFsIHZvaWQgRW5hYmxlKGJvb2wg YkRvRW5hYmxlID0gMSk7DQogICAgdmlydHVhbCB2b2lkIENoZWNrKGJvb2wgYkRvQ2hlY2sgPSAx KTsNCiAgICB2aXJ0dWFsIGJvb2wgSXNDaGVja2VkKCkgY29uc3Q7DQoNCg0KICAgIHZpcnR1YWwg d3hBY2NlbGVyYXRvckVudHJ5ICpHZXRBY2NlbCgpIGNvbnN0Ow0KDQoNCg0KDQogICAgYm9vbCBJ c0NoZWNrYWJsZSgpIGNvbnN0IHsgcmV0dXJuIHd4TWVudUl0ZW1CYXNlOjpJc0NoZWNrYWJsZSgp OyB9DQoNCg0KDQoNCiAgICBpbnQgR2V0UmVhbElkKCkgY29uc3Q7DQoNCnByaXZhdGU6DQogICAg cHVibGljOiBzdGF0aWMgd3hDbGFzc0luZm8gc21fY2xhc3N3eE1lbnVJdGVtOyB3eENsYXNzSW5m byAqR2V0Q2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnd4TWVudUl0ZW06OnNtX2NsYXNzd3hN ZW51SXRlbTsgfQ0KfTsNCiMgMTMxICIuLi8uLi9pbmNsdWRlL3d4L21lbnVpdGVtLmgiIDINCiMg MjkgIi4uLy4uL2luY2x1ZGUvd3gvbWVudS5oIiAyDQoNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRs bGltcG9ydCkpIHd4TWVudTsNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4TWVu dUJhcjsNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4TWVudUl0ZW07DQoNCg0K dHlwZWRlZiB3eE1lbnUgX1dYX0xJU1RfSVRFTV9UWVBFX3d4TWVudUxpc3Q7IHR5cGVkZWYgaW50 ICgqd3hTb3J0RnVuY0Zvcl93eE1lbnVMaXN0KShjb25zdCB3eE1lbnUgKiosIGNvbnN0IHd4TWVu dSAqKik7IGNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4d3hNZW51TGlzdE5vZGUg OiBwdWJsaWMgd3hOb2RlQmFzZSB7IHB1YmxpYzogd3h3eE1lbnVMaXN0Tm9kZSh3eExpc3RCYXNl ICpsaXN0ID0gKHd4TGlzdEJhc2UgKilfX251bGwsIHd4d3hNZW51TGlzdE5vZGUgKnByZXZpb3Vz ID0gKHd4d3hNZW51TGlzdE5vZGUgKilfX251bGwsIHd4d3hNZW51TGlzdE5vZGUgKm5leHQgPSAo d3h3eE1lbnVMaXN0Tm9kZSAqKV9fbnVsbCwgd3hNZW51ICpkYXRhID0gKHd4TWVudSAqKV9fbnVs bCwgY29uc3Qgd3hMaXN0S2V5JiBrZXkgPSB3eERlZmF1bHRMaXN0S2V5KSA6IHd4Tm9kZUJhc2Uo bGlzdCwgcHJldmlvdXMsIG5leHQsIGRhdGEsIGtleSkgeyB9IHd4d3hNZW51TGlzdE5vZGUgKkdl dE5leHQoKSBjb25zdCB7IHJldHVybiAod3h3eE1lbnVMaXN0Tm9kZSAqKXd4Tm9kZUJhc2U6Okdl dE5leHQoKTsgfSB3eHd4TWVudUxpc3ROb2RlICpHZXRQcmV2aW91cygpIGNvbnN0IHsgcmV0dXJu ICh3eHd4TWVudUxpc3ROb2RlICopd3hOb2RlQmFzZTo6R2V0UHJldmlvdXMoKTsgfSB3eE1lbnUg KkdldERhdGEoKSBjb25zdCB7IHJldHVybiAod3hNZW51ICopd3hOb2RlQmFzZTo6R2V0RGF0YSgp OyB9IHZvaWQgU2V0RGF0YSh3eE1lbnUgKmRhdGEpIHsgd3hOb2RlQmFzZTo6U2V0RGF0YShkYXRh KTsgfSB2aXJ0dWFsIHZvaWQgRGVsZXRlRGF0YSgpOyB9OyBjbGFzcyBfX2F0dHJpYnV0ZV9fKChk bGxpbXBvcnQpKSB3eE1lbnVMaXN0IDogcHVibGljIHd4TGlzdEJhc2UgeyBwdWJsaWM6IHR5cGVk ZWYgd3h3eE1lbnVMaXN0Tm9kZSBOb2RlOyB3eE1lbnVMaXN0KHd4S2V5VHlwZSBrZXlUeXBlID0g d3hLRVlfTk9ORSkgOiB3eExpc3RCYXNlKGtleVR5cGUpIHsgfSB3eE1lbnVMaXN0KHNpemVfdCBj b3VudCwgd3hNZW51ICplbGVtZW50c1tdKSA6IHd4TGlzdEJhc2UoY291bnQsICh2b2lkICoqKWVs ZW1lbnRzKSB7IH0gd3hNZW51TGlzdCYgb3BlcmF0b3I9KGNvbnN0IHd4TWVudUxpc3QmIGxpc3Qp IHsgcmV0dXJuICh3eE1lbnVMaXN0Jil3eExpc3RCYXNlOjpvcGVyYXRvcj0obGlzdCk7IH0gd3h3 eE1lbnVMaXN0Tm9kZSAqR2V0Rmlyc3QoKSBjb25zdCB7IHJldHVybiAod3h3eE1lbnVMaXN0Tm9k ZSAqKXd4TGlzdEJhc2U6OkdldEZpcnN0KCk7IH0gd3h3eE1lbnVMaXN0Tm9kZSAqR2V0TGFzdCgp IGNvbnN0IHsgcmV0dXJuICh3eHd4TWVudUxpc3ROb2RlICopd3hMaXN0QmFzZTo6R2V0TGFzdCgp OyB9IHd4d3hNZW51TGlzdE5vZGUgKkl0ZW0oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiAo d3h3eE1lbnVMaXN0Tm9kZSAqKXd4TGlzdEJhc2U6Okl0ZW0oaW5kZXgpOyB9IHd4TWVudSAqb3Bl cmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgd3h3eE1lbnVMaXN0Tm9kZSAqbm9kZSA9IEl0 ZW0oaW5kZXgpOyByZXR1cm4gbm9kZSA/ICh3eE1lbnUqKShub2RlLT5HZXREYXRhKCkpIDogKHd4 TWVudSopX19udWxsOyB9IHd4d3hNZW51TGlzdE5vZGUgKkFwcGVuZCh3eE1lbnUgKm9iamVjdCkg eyByZXR1cm4gKHd4d3hNZW51TGlzdE5vZGUgKil3eExpc3RCYXNlOjpBcHBlbmQob2JqZWN0KTsg fSB3eHd4TWVudUxpc3ROb2RlICpJbnNlcnQod3hNZW51ICpvYmplY3QpIHsgcmV0dXJuICh3eHd4 TWVudUxpc3ROb2RlICopSW5zZXJ0KCh3eHd4TWVudUxpc3ROb2RlKilfX251bGwsIG9iamVjdCk7 IH0gd3h3eE1lbnVMaXN0Tm9kZSAqSW5zZXJ0KHNpemVfdCBwb3MsIHd4TWVudSAqb2JqZWN0KSB7 IHJldHVybiAod3h3eE1lbnVMaXN0Tm9kZSAqKXd4TGlzdEJhc2U6Okluc2VydChwb3MsIG9iamVj dCk7IH0gd3h3eE1lbnVMaXN0Tm9kZSAqSW5zZXJ0KHd4d3hNZW51TGlzdE5vZGUgKnByZXYsIHd4 TWVudSAqb2JqZWN0KSB7IHJldHVybiAod3h3eE1lbnVMaXN0Tm9kZSAqKXd4TGlzdEJhc2U6Oklu c2VydChwcmV2LCBvYmplY3QpOyB9IHd4d3hNZW51TGlzdE5vZGUgKkFwcGVuZChsb25nIGtleSwg dm9pZCAqb2JqZWN0KSB7IHJldHVybiAod3h3eE1lbnVMaXN0Tm9kZSAqKXd4TGlzdEJhc2U6OkFw cGVuZChrZXksIG9iamVjdCk7IH0gd3h3eE1lbnVMaXN0Tm9kZSAqQXBwZW5kKGNvbnN0IGNoYXIg KmtleSwgdm9pZCAqb2JqZWN0KSB7IHJldHVybiAod3h3eE1lbnVMaXN0Tm9kZSAqKXd4TGlzdEJh c2U6OkFwcGVuZChrZXksIG9iamVjdCk7IH0gd3h3eE1lbnVMaXN0Tm9kZSAqRGV0YWNoTm9kZSh3 eHd4TWVudUxpc3ROb2RlICpub2RlKSB7IHJldHVybiAod3h3eE1lbnVMaXN0Tm9kZSAqKXd4TGlz dEJhc2U6OkRldGFjaE5vZGUobm9kZSk7IH0gYm9vbCBEZWxldGVOb2RlKHd4d3hNZW51TGlzdE5v ZGUgKm5vZGUpIHsgcmV0dXJuIHd4TGlzdEJhc2U6OkRlbGV0ZU5vZGUobm9kZSk7IH0gYm9vbCBE ZWxldGVPYmplY3Qod3hNZW51ICpvYmplY3QpIHsgcmV0dXJuIHd4TGlzdEJhc2U6OkRlbGV0ZU9i amVjdChvYmplY3QpOyB9IHd4d3hNZW51TGlzdE5vZGUgKkZpbmQod3hNZW51ICpvYmplY3QpIGNv bnN0IHsgcmV0dXJuICh3eHd4TWVudUxpc3ROb2RlICopd3hMaXN0QmFzZTo6RmluZChvYmplY3Qp OyB9IHZpcnR1YWwgd3h3eE1lbnVMaXN0Tm9kZSAqRmluZChjb25zdCB3eExpc3RLZXkmIGtleSkg Y29uc3QgeyByZXR1cm4gKHd4d3hNZW51TGlzdE5vZGUgKil3eExpc3RCYXNlOjpGaW5kKGtleSk7 IH0gaW50IEluZGV4T2Yod3hNZW51ICpvYmplY3QpIGNvbnN0IHsgcmV0dXJuIHd4TGlzdEJhc2U6 OkluZGV4T2Yob2JqZWN0KTsgfSB2b2lkIFNvcnQod3hTb3J0RnVuY0Zvcl93eE1lbnVMaXN0IGZ1 bmMpIHsgd3hMaXN0QmFzZTo6U29ydCgod3hTb3J0Q29tcGFyZUZ1bmN0aW9uKWZ1bmMpOyB9IHBy b3RlY3RlZDogd3hOb2RlQmFzZSAqQ3JlYXRlTm9kZSh3eE5vZGVCYXNlICpwcmV2LCB3eE5vZGVC YXNlICpuZXh0LCB2b2lkICpkYXRhLCBjb25zdCB3eExpc3RLZXkmIGtleSA9IHd4RGVmYXVsdExp c3RLZXkpIHsgcmV0dXJuIG5ldyB3eHd4TWVudUxpc3ROb2RlKHRoaXMsICh3eHd4TWVudUxpc3RO b2RlICopcHJldiwgKHd4d3hNZW51TGlzdE5vZGUgKiluZXh0LCAod3hNZW51ICopZGF0YSwga2V5 KTsgfSB9Ow0KdHlwZWRlZiB3eE1lbnVJdGVtIF9XWF9MSVNUX0lURU1fVFlQRV93eE1lbnVJdGVt TGlzdDsgdHlwZWRlZiBpbnQgKCp3eFNvcnRGdW5jRm9yX3d4TWVudUl0ZW1MaXN0KShjb25zdCB3 eE1lbnVJdGVtICoqLCBjb25zdCB3eE1lbnVJdGVtICoqKTsgY2xhc3MgX19hdHRyaWJ1dGVfXygo ZGxsaW1wb3J0KSkgd3h3eE1lbnVJdGVtTGlzdE5vZGUgOiBwdWJsaWMgd3hOb2RlQmFzZSB7IHB1 YmxpYzogd3h3eE1lbnVJdGVtTGlzdE5vZGUod3hMaXN0QmFzZSAqbGlzdCA9ICh3eExpc3RCYXNl ICopX19udWxsLCB3eHd4TWVudUl0ZW1MaXN0Tm9kZSAqcHJldmlvdXMgPSAod3h3eE1lbnVJdGVt TGlzdE5vZGUgKilfX251bGwsIHd4d3hNZW51SXRlbUxpc3ROb2RlICpuZXh0ID0gKHd4d3hNZW51 SXRlbUxpc3ROb2RlICopX19udWxsLCB3eE1lbnVJdGVtICpkYXRhID0gKHd4TWVudUl0ZW0gKilf X251bGwsIGNvbnN0IHd4TGlzdEtleSYga2V5ID0gd3hEZWZhdWx0TGlzdEtleSkgOiB3eE5vZGVC YXNlKGxpc3QsIHByZXZpb3VzLCBuZXh0LCBkYXRhLCBrZXkpIHsgfSB3eHd4TWVudUl0ZW1MaXN0 Tm9kZSAqR2V0TmV4dCgpIGNvbnN0IHsgcmV0dXJuICh3eHd4TWVudUl0ZW1MaXN0Tm9kZSAqKXd4 Tm9kZUJhc2U6OkdldE5leHQoKTsgfSB3eHd4TWVudUl0ZW1MaXN0Tm9kZSAqR2V0UHJldmlvdXMo KSBjb25zdCB7IHJldHVybiAod3h3eE1lbnVJdGVtTGlzdE5vZGUgKil3eE5vZGVCYXNlOjpHZXRQ cmV2aW91cygpOyB9IHd4TWVudUl0ZW0gKkdldERhdGEoKSBjb25zdCB7IHJldHVybiAod3hNZW51 SXRlbSAqKXd4Tm9kZUJhc2U6OkdldERhdGEoKTsgfSB2b2lkIFNldERhdGEod3hNZW51SXRlbSAq ZGF0YSkgeyB3eE5vZGVCYXNlOjpTZXREYXRhKGRhdGEpOyB9IHZpcnR1YWwgdm9pZCBEZWxldGVE YXRhKCk7IH07IGNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4TWVudUl0ZW1MaXN0 IDogcHVibGljIHd4TGlzdEJhc2UgeyBwdWJsaWM6IHR5cGVkZWYgd3h3eE1lbnVJdGVtTGlzdE5v ZGUgTm9kZTsgd3hNZW51SXRlbUxpc3Qod3hLZXlUeXBlIGtleVR5cGUgPSB3eEtFWV9OT05FKSA6 IHd4TGlzdEJhc2Uoa2V5VHlwZSkgeyB9IHd4TWVudUl0ZW1MaXN0KHNpemVfdCBjb3VudCwgd3hN ZW51SXRlbSAqZWxlbWVudHNbXSkgOiB3eExpc3RCYXNlKGNvdW50LCAodm9pZCAqKillbGVtZW50 cykgeyB9IHd4TWVudUl0ZW1MaXN0JiBvcGVyYXRvcj0oY29uc3Qgd3hNZW51SXRlbUxpc3QmIGxp c3QpIHsgcmV0dXJuICh3eE1lbnVJdGVtTGlzdCYpd3hMaXN0QmFzZTo6b3BlcmF0b3I9KGxpc3Qp OyB9IHd4d3hNZW51SXRlbUxpc3ROb2RlICpHZXRGaXJzdCgpIGNvbnN0IHsgcmV0dXJuICh3eHd4 TWVudUl0ZW1MaXN0Tm9kZSAqKXd4TGlzdEJhc2U6OkdldEZpcnN0KCk7IH0gd3h3eE1lbnVJdGVt TGlzdE5vZGUgKkdldExhc3QoKSBjb25zdCB7IHJldHVybiAod3h3eE1lbnVJdGVtTGlzdE5vZGUg Kil3eExpc3RCYXNlOjpHZXRMYXN0KCk7IH0gd3h3eE1lbnVJdGVtTGlzdE5vZGUgKkl0ZW0oc2l6 ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiAod3h3eE1lbnVJdGVtTGlzdE5vZGUgKil3eExpc3RC YXNlOjpJdGVtKGluZGV4KTsgfSB3eE1lbnVJdGVtICpvcGVyYXRvcltdKHNpemVfdCBpbmRleCkg Y29uc3QgeyB3eHd4TWVudUl0ZW1MaXN0Tm9kZSAqbm9kZSA9IEl0ZW0oaW5kZXgpOyByZXR1cm4g bm9kZSA/ICh3eE1lbnVJdGVtKikobm9kZS0+R2V0RGF0YSgpKSA6ICh3eE1lbnVJdGVtKilfX251 bGw7IH0gd3h3eE1lbnVJdGVtTGlzdE5vZGUgKkFwcGVuZCh3eE1lbnVJdGVtICpvYmplY3QpIHsg cmV0dXJuICh3eHd4TWVudUl0ZW1MaXN0Tm9kZSAqKXd4TGlzdEJhc2U6OkFwcGVuZChvYmplY3Qp OyB9IHd4d3hNZW51SXRlbUxpc3ROb2RlICpJbnNlcnQod3hNZW51SXRlbSAqb2JqZWN0KSB7IHJl dHVybiAod3h3eE1lbnVJdGVtTGlzdE5vZGUgKilJbnNlcnQoKHd4d3hNZW51SXRlbUxpc3ROb2Rl KilfX251bGwsIG9iamVjdCk7IH0gd3h3eE1lbnVJdGVtTGlzdE5vZGUgKkluc2VydChzaXplX3Qg cG9zLCB3eE1lbnVJdGVtICpvYmplY3QpIHsgcmV0dXJuICh3eHd4TWVudUl0ZW1MaXN0Tm9kZSAq KXd4TGlzdEJhc2U6Okluc2VydChwb3MsIG9iamVjdCk7IH0gd3h3eE1lbnVJdGVtTGlzdE5vZGUg Kkluc2VydCh3eHd4TWVudUl0ZW1MaXN0Tm9kZSAqcHJldiwgd3hNZW51SXRlbSAqb2JqZWN0KSB7 IHJldHVybiAod3h3eE1lbnVJdGVtTGlzdE5vZGUgKil3eExpc3RCYXNlOjpJbnNlcnQocHJldiwg b2JqZWN0KTsgfSB3eHd4TWVudUl0ZW1MaXN0Tm9kZSAqQXBwZW5kKGxvbmcga2V5LCB2b2lkICpv YmplY3QpIHsgcmV0dXJuICh3eHd4TWVudUl0ZW1MaXN0Tm9kZSAqKXd4TGlzdEJhc2U6OkFwcGVu ZChrZXksIG9iamVjdCk7IH0gd3h3eE1lbnVJdGVtTGlzdE5vZGUgKkFwcGVuZChjb25zdCBjaGFy ICprZXksIHZvaWQgKm9iamVjdCkgeyByZXR1cm4gKHd4d3hNZW51SXRlbUxpc3ROb2RlICopd3hM aXN0QmFzZTo6QXBwZW5kKGtleSwgb2JqZWN0KTsgfSB3eHd4TWVudUl0ZW1MaXN0Tm9kZSAqRGV0 YWNoTm9kZSh3eHd4TWVudUl0ZW1MaXN0Tm9kZSAqbm9kZSkgeyByZXR1cm4gKHd4d3hNZW51SXRl bUxpc3ROb2RlICopd3hMaXN0QmFzZTo6RGV0YWNoTm9kZShub2RlKTsgfSBib29sIERlbGV0ZU5v ZGUod3h3eE1lbnVJdGVtTGlzdE5vZGUgKm5vZGUpIHsgcmV0dXJuIHd4TGlzdEJhc2U6OkRlbGV0 ZU5vZGUobm9kZSk7IH0gYm9vbCBEZWxldGVPYmplY3Qod3hNZW51SXRlbSAqb2JqZWN0KSB7IHJl dHVybiB3eExpc3RCYXNlOjpEZWxldGVPYmplY3Qob2JqZWN0KTsgfSB3eHd4TWVudUl0ZW1MaXN0 Tm9kZSAqRmluZCh3eE1lbnVJdGVtICpvYmplY3QpIGNvbnN0IHsgcmV0dXJuICh3eHd4TWVudUl0 ZW1MaXN0Tm9kZSAqKXd4TGlzdEJhc2U6OkZpbmQob2JqZWN0KTsgfSB2aXJ0dWFsIHd4d3hNZW51 SXRlbUxpc3ROb2RlICpGaW5kKGNvbnN0IHd4TGlzdEtleSYga2V5KSBjb25zdCB7IHJldHVybiAo d3h3eE1lbnVJdGVtTGlzdE5vZGUgKil3eExpc3RCYXNlOjpGaW5kKGtleSk7IH0gaW50IEluZGV4 T2Yod3hNZW51SXRlbSAqb2JqZWN0KSBjb25zdCB7IHJldHVybiB3eExpc3RCYXNlOjpJbmRleE9m KG9iamVjdCk7IH0gdm9pZCBTb3J0KHd4U29ydEZ1bmNGb3Jfd3hNZW51SXRlbUxpc3QgZnVuYykg eyB3eExpc3RCYXNlOjpTb3J0KCh3eFNvcnRDb21wYXJlRnVuY3Rpb24pZnVuYyk7IH0gcHJvdGVj dGVkOiB3eE5vZGVCYXNlICpDcmVhdGVOb2RlKHd4Tm9kZUJhc2UgKnByZXYsIHd4Tm9kZUJhc2Ug Km5leHQsIHZvaWQgKmRhdGEsIGNvbnN0IHd4TGlzdEtleSYga2V5ID0gd3hEZWZhdWx0TGlzdEtl eSkgeyByZXR1cm4gbmV3IHd4d3hNZW51SXRlbUxpc3ROb2RlKHRoaXMsICh3eHd4TWVudUl0ZW1M aXN0Tm9kZSAqKXByZXYsICh3eHd4TWVudUl0ZW1MaXN0Tm9kZSAqKW5leHQsICh3eE1lbnVJdGVt ICopZGF0YSwga2V5KTsgfSB9Ow0KIyA1NyAiLi4vLi4vaW5jbHVkZS93eC9tZW51LmgiDQpjbGFz cyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eE1lbnVCYXNlIDogcHVibGljIHd4RXZ0SGFu ZGxlcg0Kew0KcHVibGljOg0KDQogICAgc3RhdGljIHd4TWVudSAqTmV3KGNvbnN0IHd4U3RyaW5n JiB0aXRsZSA9IHd4RW1wdHlTdHJpbmcsIGxvbmcgc3R5bGUgPSAwKTsNCg0KDQogICAgd3hNZW51 QmFzZShjb25zdCB3eFN0cmluZyYgdGl0bGUsIGxvbmcgc3R5bGUgPSAwKSA6IG1fdGl0bGUodGl0 bGUpDQogICAgICAgIHsgSW5pdChzdHlsZSk7IH0NCiAgICB3eE1lbnVCYXNlKGxvbmcgc3R5bGUg PSAwKQ0KICAgICAgICB7IEluaXQoc3R5bGUpOyB9DQoNCg0KICAgIHZpcnR1YWwgfnd4TWVudUJh c2UoKTsNCg0KDQoNCg0KDQogICAgdm9pZCBBcHBlbmQoaW50IGlkLA0KICAgICAgICAgICAgICAg IGNvbnN0IHd4U3RyaW5nJiB0ZXh0LA0KICAgICAgICAgICAgICAgIGNvbnN0IHd4U3RyaW5nJiBo ZWxwID0gd3hFbXB0eVN0cmluZywNCiAgICAgICAgICAgICAgICBib29sIGlzQ2hlY2thYmxlID0g MCkNCiAgICB7DQogICAgICAgIERvQXBwZW5kKHd4TWVudUl0ZW06Ok5ldygod3hNZW51ICopdGhp cywgaWQsIHRleHQsIGhlbHAsIGlzQ2hlY2thYmxlKSk7DQogICAgfQ0KDQoNCiAgICB2b2lkIEFw cGVuZFNlcGFyYXRvcigpIHsgQXBwZW5kKCgtMSksIHd4RW1wdHlTdHJpbmcpOyB9DQoNCg0KICAg IHZvaWQgQXBwZW5kKGludCBpZCwNCiAgICAgICAgICAgICAgICBjb25zdCB3eFN0cmluZyYgdGV4 dCwNCiAgICAgICAgICAgICAgICB3eE1lbnUgKnN1Ym1lbnUsDQogICAgICAgICAgICAgICAgY29u c3Qgd3hTdHJpbmcmIGhlbHAgPSB3eEVtcHR5U3RyaW5nKQ0KICAgIHsNCiAgICAgICAgRG9BcHBl bmQod3hNZW51SXRlbTo6TmV3KCh3eE1lbnUgKil0aGlzLCBpZCwgdGV4dCwgaGVscCwgMCwgc3Vi bWVudSkpOw0KICAgIH0NCg0KDQogICAgdm9pZCBBcHBlbmQod3hNZW51SXRlbSAqaXRlbSkgeyBE b0FwcGVuZChpdGVtKTsgfQ0KDQoNCg0KICAgIHZpcnR1YWwgdm9pZCBCcmVhaygpIHsgfQ0KDQoN CiAgICBib29sIEluc2VydChzaXplX3QgcG9zLCB3eE1lbnVJdGVtICppdGVtKTsNCiAgICB2b2lk IEluc2VydChzaXplX3QgcG9zLA0KICAgICAgICAgICAgICAgIGludCBpZCwNCiAgICAgICAgICAg ICAgICBjb25zdCB3eFN0cmluZyYgdGV4dCwNCiAgICAgICAgICAgICAgICBjb25zdCB3eFN0cmlu ZyYgaGVscCA9IHd4RW1wdHlTdHJpbmcsDQogICAgICAgICAgICAgICAgYm9vbCBpc0NoZWNrYWJs ZSA9IDApDQogICAgew0KICAgICAgICBJbnNlcnQocG9zLCB3eE1lbnVJdGVtOjpOZXcoKHd4TWVu dSAqKXRoaXMsIGlkLCB0ZXh0LCBoZWxwLCBpc0NoZWNrYWJsZSkpOw0KICAgIH0NCg0KDQogICAg dm9pZCBJbnNlcnRTZXBhcmF0b3Ioc2l6ZV90IHBvcykNCiAgICB7DQogICAgICAgIEluc2VydChw b3MsIHd4TWVudUl0ZW06Ok5ldygod3hNZW51ICopdGhpcykpOw0KICAgIH0NCg0KDQogICAgdm9p ZCBJbnNlcnQoc2l6ZV90IHBvcywNCiAgICAgICAgICAgICAgICBpbnQgaWQsDQogICAgICAgICAg ICAgICAgY29uc3Qgd3hTdHJpbmcmIHRleHQsDQogICAgICAgICAgICAgICAgd3hNZW51ICpzdWJt ZW51LA0KICAgICAgICAgICAgICAgIGNvbnN0IHd4U3RyaW5nJiBoZWxwID0gd3hFbXB0eVN0cmlu ZykNCiAgICB7DQogICAgICAgIEluc2VydChwb3MsIHd4TWVudUl0ZW06Ok5ldygod3hNZW51ICop dGhpcywgaWQsIHRleHQsIGhlbHAsIDAsIHN1Ym1lbnUpKTsNCiAgICB9DQoNCg0KICAgIHZvaWQg UHJlcGVuZCh3eE1lbnVJdGVtICppdGVtKQ0KICAgIHsNCiAgICAgICAgSW5zZXJ0KDB1LCBpdGVt KTsNCiAgICB9DQoNCiAgICB2b2lkIFByZXBlbmQoaW50IGlkLA0KICAgICAgICAgICAgICAgICBj b25zdCB3eFN0cmluZyYgdGV4dCwNCiAgICAgICAgICAgICAgICAgY29uc3Qgd3hTdHJpbmcmIGhl bHAgPSB3eEVtcHR5U3RyaW5nLA0KICAgICAgICAgICAgICAgICBib29sIGlzQ2hlY2thYmxlID0g MCkNCiAgICB7DQogICAgICAgIEluc2VydCgwdSwgaWQsIHRleHQsIGhlbHAsIGlzQ2hlY2thYmxl KTsNCiAgICB9DQoNCg0KICAgIHZvaWQgUHJlcGVuZFNlcGFyYXRvcigpDQogICAgew0KICAgICAg ICBJbnNlcnRTZXBhcmF0b3IoMHUpOw0KICAgIH0NCg0KDQogICAgdm9pZCBQcmVwZW5kKGludCBp ZCwNCiAgICAgICAgICAgICAgICAgY29uc3Qgd3hTdHJpbmcmIHRleHQsDQogICAgICAgICAgICAg ICAgIHd4TWVudSAqc3VibWVudSwNCiAgICAgICAgICAgICAgICAgY29uc3Qgd3hTdHJpbmcmIGhl bHAgPSB3eEVtcHR5U3RyaW5nKQ0KICAgIHsNCiAgICAgICAgSW5zZXJ0KDB1LCBpZCwgdGV4dCwg c3VibWVudSwgaGVscCk7DQogICAgfQ0KDQoNCg0KDQogICAgd3hNZW51SXRlbSAqUmVtb3ZlKGlu dCBpZCkgeyByZXR1cm4gUmVtb3ZlKEZpbmRDaGlsZEl0ZW0oaWQpKTsgfQ0KICAgIHd4TWVudUl0 ZW0gKlJlbW92ZSh3eE1lbnVJdGVtICppdGVtKTsNCg0KDQoNCiAgICBib29sIERlbGV0ZShpbnQg aWQpIHsgcmV0dXJuIERlbGV0ZShGaW5kQ2hpbGRJdGVtKGlkKSk7IH0NCiAgICBib29sIERlbGV0 ZSh3eE1lbnVJdGVtICppdGVtKTsNCg0KDQogICAgYm9vbCBEZXN0cm95KGludCBpZCkgeyByZXR1 cm4gRGVzdHJveShGaW5kQ2hpbGRJdGVtKGlkKSk7IH0NCiAgICBib29sIERlc3Ryb3kod3hNZW51 SXRlbSAqaXRlbSk7DQoNCg0KDQoNCg0KICAgIHNpemVfdCBHZXRNZW51SXRlbUNvdW50KCkgY29u c3QgeyByZXR1cm4gbV9pdGVtcy5HZXRDb3VudCgpOyB9DQoNCiAgICBjb25zdCB3eE1lbnVJdGVt TGlzdCYgR2V0TWVudUl0ZW1zKCkgY29uc3QgeyByZXR1cm4gbV9pdGVtczsgfQ0KICAgIHd4TWVu dUl0ZW1MaXN0JiBHZXRNZW51SXRlbXMoKSB7IHJldHVybiBtX2l0ZW1zOyB9DQoNCg0KICAgIHZp cnR1YWwgaW50IEZpbmRJdGVtKGNvbnN0IHd4U3RyaW5nJiBpdGVtU3RyaW5nKSBjb25zdDsNCiAg ICB3eE1lbnVJdGVtKiBGaW5kSXRlbShpbnQgaWQsIHd4TWVudSAqKm1lbnUgPSBfX251bGwpIGNv bnN0Ow0KDQoNCiAgICB2b2lkIEVuYWJsZShpbnQgaWQsIGJvb2wgZW5hYmxlKTsNCiAgICBib29s IElzRW5hYmxlZChpbnQgaWQpIGNvbnN0Ow0KDQogICAgdm9pZCBDaGVjayhpbnQgaWQsIGJvb2wg Y2hlY2spOw0KICAgIGJvb2wgSXNDaGVja2VkKGludCBpZCkgY29uc3Q7DQoNCiAgICB2b2lkIFNl dExhYmVsKGludCBpZCwgY29uc3Qgd3hTdHJpbmcmIGxhYmVsKTsNCiAgICB3eFN0cmluZyBHZXRM YWJlbChpbnQgaWQpIGNvbnN0Ow0KDQogICAgdmlydHVhbCB2b2lkIFNldEhlbHBTdHJpbmcoaW50 IGlkLCBjb25zdCB3eFN0cmluZyYgaGVscFN0cmluZyk7DQogICAgdmlydHVhbCB3eFN0cmluZyBH ZXRIZWxwU3RyaW5nKGludCBpZCkgY29uc3Q7DQoNCg0KDQoNCg0KICAgIHZpcnR1YWwgdm9pZCBT ZXRUaXRsZShjb25zdCB3eFN0cmluZyYgdGl0bGUpIHsgbV90aXRsZSA9IHRpdGxlOyB9DQogICAg Y29uc3Qgd3hTdHJpbmcgR2V0VGl0bGUoKSBjb25zdCB7IHJldHVybiBtX3RpdGxlOyB9DQoNCg0K ICAgIHZvaWQgU2V0Q2xpZW50RGF0YSh2b2lkKiBjbGllbnREYXRhKSB7IG1fY2xpZW50RGF0YSA9 IGNsaWVudERhdGE7IH0NCiAgICB2b2lkKiBHZXRDbGllbnREYXRhKCkgY29uc3QgeyByZXR1cm4g bV9jbGllbnREYXRhOyB9DQoNCg0KICAgIHZvaWQgU2V0RXZlbnRIYW5kbGVyKHd4RXZ0SGFuZGxl ciAqaGFuZGxlcikgeyBtX2V2ZW50SGFuZGxlciA9IGhhbmRsZXI7IH0NCiAgICB3eEV2dEhhbmRs ZXIgKkdldEV2ZW50SGFuZGxlcigpIGNvbnN0IHsgcmV0dXJuIG1fZXZlbnRIYW5kbGVyOyB9DQoN Cg0KICAgIHZvaWQgU2V0SW52b2tpbmdXaW5kb3cod3hXaW5kb3cgKndpbikgeyBtX2ludm9raW5n V2luZG93ID0gd2luOyB9DQogICAgd3hXaW5kb3cgKkdldEludm9raW5nV2luZG93KCkgY29uc3Qg eyByZXR1cm4gbV9pbnZva2luZ1dpbmRvdzsgfQ0KDQoNCiAgICBsb25nIEdldFN0eWxlKCkgY29u c3QgeyByZXR1cm4gbV9zdHlsZTsgfQ0KDQoNCg0KDQoNCg0KDQogICAgdm9pZCBVcGRhdGVVSSh3 eEV2dEhhbmRsZXIqIHNvdXJjZSA9ICh3eEV2dEhhbmRsZXIqKV9fbnVsbCk7DQoNCg0KICAgIGJv b2wgSXNBdHRhY2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWVudUJhciAhPSBfX251bGw7IH0NCg0K DQogICAgdm9pZCBTZXRQYXJlbnQod3hNZW51ICpwYXJlbnQpIHsgbV9tZW51UGFyZW50ID0gcGFy ZW50OyB9DQogICAgd3hNZW51ICpHZXRQYXJlbnQoKSBjb25zdCB7IHJldHVybiBtX21lbnVQYXJl bnQ7IH0NCiMgMjU5ICIuLi8uLi9pbmNsdWRlL3d4L21lbnUuaCINCiAgICB3eE1lbnVJdGVtICpG aW5kQ2hpbGRJdGVtKGludCBpZCwgc2l6ZV90ICpwb3MgPSBfX251bGwpIGNvbnN0Ow0KDQpwcm90 ZWN0ZWQ6DQoNCg0KDQogICAgdmlydHVhbCBib29sIERvQXBwZW5kKHd4TWVudUl0ZW0gKml0ZW0p Ow0KICAgIHZpcnR1YWwgYm9vbCBEb0luc2VydChzaXplX3QgcG9zLCB3eE1lbnVJdGVtICppdGVt KTsNCg0KICAgIHZpcnR1YWwgd3hNZW51SXRlbSAqRG9SZW1vdmUod3hNZW51SXRlbSAqaXRlbSk7 DQogICAgdmlydHVhbCBib29sIERvRGVsZXRlKHd4TWVudUl0ZW0gKml0ZW0pOw0KICAgIHZpcnR1 YWwgYm9vbCBEb0Rlc3Ryb3kod3hNZW51SXRlbSAqaXRlbSk7DQoNCg0KDQoNCg0KICAgIHZvaWQg SW5pdChsb25nIHN0eWxlKTsNCg0KcHJvdGVjdGVkOg0KICAgIHd4TWVudUJhciAqbV9tZW51QmFy Ow0KICAgIHd4TWVudSAqbV9tZW51UGFyZW50Ow0KDQogICAgd3hTdHJpbmcgbV90aXRsZTsNCiAg ICB3eE1lbnVJdGVtTGlzdCBtX2l0ZW1zOw0KDQogICAgd3hXaW5kb3cgKm1faW52b2tpbmdXaW5k b3c7DQogICAgdm9pZCAqbV9jbGllbnREYXRhOw0KDQogICAgbG9uZyBtX3N0eWxlOw0KDQogICAg d3hFdnRIYW5kbGVyICptX2V2ZW50SGFuZGxlcjsNCn07DQoNCg0KDQoNCg0KY2xhc3MgX19hdHRy aWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hNZW51QmFyQmFzZSA6IHB1YmxpYyB3eFdpbmRvdw0Kew0K cHVibGljOg0KDQogICAgd3hNZW51QmFyQmFzZSgpOw0KDQoNCiAgICB2aXJ0dWFsIH53eE1lbnVC YXJCYXNlKCk7DQoNCg0KDQoNCg0KICAgIHZpcnR1YWwgYm9vbCBBcHBlbmQod3hNZW51ICptZW51 LCBjb25zdCB3eFN0cmluZyYgdGl0bGUpOw0KDQoNCg0KICAgIHZpcnR1YWwgYm9vbCBJbnNlcnQo c2l6ZV90IHBvcywgd3hNZW51ICptZW51LCBjb25zdCB3eFN0cmluZyYgdGl0bGUpOw0KDQoNCg0K DQoNCiAgICBzaXplX3QgR2V0TWVudUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9tZW51cy5HZXRD b3VudCgpOyB9DQoNCg0KICAgIHd4TWVudSAqR2V0TWVudShzaXplX3QgcG9zKSBjb25zdDsNCg0K DQoNCiAgICB2aXJ0dWFsIHd4TWVudSAqUmVwbGFjZShzaXplX3QgcG9zLCB3eE1lbnUgKm1lbnUs IGNvbnN0IHd4U3RyaW5nJiB0aXRsZSk7DQoNCg0KDQogICAgdmlydHVhbCB3eE1lbnUgKlJlbW92 ZShzaXplX3QgcG9zKTsNCg0KDQogICAgdmlydHVhbCB2b2lkIEVuYWJsZVRvcChzaXplX3QgcG9z LCBib29sIGVuYWJsZSkgPSAwOw0KDQoNCiAgICB2aXJ0dWFsIHZvaWQgU2V0TGFiZWxUb3Aoc2l6 ZV90IHBvcywgY29uc3Qgd3hTdHJpbmcmIGxhYmVsKSA9IDA7DQogICAgdmlydHVhbCB3eFN0cmlu ZyBHZXRMYWJlbFRvcChzaXplX3QgcG9zKSBjb25zdCA9IDA7DQoNCg0KDQoNCg0KDQogICAgdmly dHVhbCBpbnQgRmluZE1lbnVJdGVtKGNvbnN0IHd4U3RyaW5nJiBtZW51U3RyaW5nLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3eFN0cmluZyYgaXRlbVN0cmluZykgY29uc3Qg PSAwOw0KDQoNCg0KDQogICAgdmlydHVhbCB3eE1lbnVJdGVtKiBGaW5kSXRlbShpbnQgaWQsIHd4 TWVudSAqKm1lbnUgPSBfX251bGwpIGNvbnN0ID0gMDsNCg0KDQogICAgaW50IEZpbmRNZW51KGNv bnN0IHd4U3RyaW5nJiB0aXRsZSkgY29uc3Q7DQojIDM2NSAiLi4vLi4vaW5jbHVkZS93eC9tZW51 LmgiDQogICAgdm9pZCBFbmFibGUoaW50IGlkLCBib29sIGVuYWJsZSk7DQogICAgdm9pZCBDaGVj ayhpbnQgaWQsIGJvb2wgY2hlY2spOw0KICAgIGJvb2wgSXNDaGVja2VkKGludCBpZCkgY29uc3Q7 DQogICAgYm9vbCBJc0VuYWJsZWQoaW50IGlkKSBjb25zdDsNCg0KICAgIHZvaWQgU2V0TGFiZWwo aW50IGlkLCBjb25zdCB3eFN0cmluZyAmbGFiZWwpOw0KICAgIHd4U3RyaW5nIEdldExhYmVsKGlu dCBpZCkgY29uc3Q7DQoNCiAgICB2b2lkIFNldEhlbHBTdHJpbmcoaW50IGlkLCBjb25zdCB3eFN0 cmluZyYgaGVscFN0cmluZyk7DQogICAgd3hTdHJpbmcgR2V0SGVscFN0cmluZyhpbnQgaWQpIGNv bnN0Ow0KDQoNCiAgICB2aXJ0dWFsIGJvb2wgRW5hYmxlKGJvb2wgZW5hYmxlID0gMSkgeyByZXR1 cm4gd3hXaW5kb3c6OkVuYWJsZShlbmFibGUpOyB9DQogICAgdmlydHVhbCB2b2lkIFNldExhYmVs KGNvbnN0IHd4U3RyaW5nJiBzKSB7IHd4V2luZG93OjpTZXRMYWJlbChzKTsgfQ0KICAgIHZpcnR1 YWwgd3hTdHJpbmcgR2V0TGFiZWwoKSBjb25zdCB7IHJldHVybiB3eFdpbmRvdzo6R2V0TGFiZWwo KTsgfQ0KIyAzOTMgIi4uLy4uL2luY2x1ZGUvd3gvbWVudS5oIg0KcHJvdGVjdGVkOg0KDQogICAg d3hNZW51TGlzdCBtX21lbnVzOw0KfTsNCiMgNDA2ICIuLi8uLi9pbmNsdWRlL3d4L21lbnUuaCIN CiMgMSAiLi4vLi4vaW5jbHVkZS93eC9tc3cvbWVudS5oIiAxDQojIDE2ICIuLi8uLi9pbmNsdWRl L3d4L21zdy9tZW51LmgiDQojcHJhZ21hIGludGVyZmFjZSAibWVudS5oIg0KDQoNCg0KDQoNCg0K ICAgIHR5cGVkZWYgd3hBY2NlbGVyYXRvckVudHJ5ICogX0F3eEFjY2VsZXJhdG9yQXJyYXk7IHR5 cGVkZWYgaW50ICggKkNNUEZVTkNfQXd4QWNjZWxlcmF0b3JBcnJheSkoX0F3eEFjY2VsZXJhdG9y QXJyYXkgKnBJdGVtMSwgX0F3eEFjY2VsZXJhdG9yQXJyYXkgKnBJdGVtMik7IGNsYXNzIF9fYXR0 cmlidXRlX18oKGRsbGltcG9ydCkpIHd4QWNjZWxlcmF0b3JBcnJheSA6IHB1YmxpYyB3eEJhc2VB cnJheSB7IHB1YmxpYzogd3hBY2NlbGVyYXRvckFycmF5KCkgeyBzaXplX3QgdHlwZSA9IHNpemVv ZihfQXd4QWNjZWxlcmF0b3JBcnJheSk7IHNpemVfdCBzaXplbG9uZyA9IHNpemVvZihsb25nKTsg aWYgKCB0eXBlID4gc2l6ZWxvbmcgKSB7IGlmICggISh3eEZhbHNlKSApIHd4T25Bc3NlcnQoIi4u Ly4uL2luY2x1ZGUvd3gvbXN3L21lbnUuaCIsIDIzLCAiaWxsZWdhbCB1c2Ugb2YgREVGSU5FX0FS UkFZIik7IH0gfSB3eEFjY2VsZXJhdG9yQXJyYXkmIG9wZXJhdG9yPShjb25zdCB3eEFjY2VsZXJh dG9yQXJyYXkmIHNyYykgeyB3eEJhc2VBcnJheSogdGVtcCA9ICh3eEJhc2VBcnJheSopIHRoaXM7 ICgqdGVtcCkgPSAoKGNvbnN0IHd4QmFzZUFycmF5JilzcmMpOyByZXR1cm4gKnRoaXM7IH0gX0F3 eEFjY2VsZXJhdG9yQXJyYXkmIG9wZXJhdG9yW10oc2l6ZV90IHVpSW5kZXgpIGNvbnN0IHsgcmV0 dXJuIChfQXd4QWNjZWxlcmF0b3JBcnJheSYpKHd4QmFzZUFycmF5OjpJdGVtKHVpSW5kZXgpKTsg fSBfQXd4QWNjZWxlcmF0b3JBcnJheSYgSXRlbShzaXplX3QgdWlJbmRleCkgY29uc3QgeyByZXR1 cm4gKF9Bd3hBY2NlbGVyYXRvckFycmF5Jikod3hCYXNlQXJyYXk6Okl0ZW0odWlJbmRleCkpOyB9 IF9Bd3hBY2NlbGVyYXRvckFycmF5JiBMYXN0KCkgY29uc3QgeyByZXR1cm4gKF9Bd3hBY2NlbGVy YXRvckFycmF5Jikod3hCYXNlQXJyYXk6Okl0ZW0oQ291bnQoKSAtIDEpKTsgfSBpbnQgSW5kZXgo X0F3eEFjY2VsZXJhdG9yQXJyYXkgSXRlbSwgYm9vbCBiRnJvbUVuZCA9IDApIGNvbnN0IHsgcmV0 dXJuIHd4QmFzZUFycmF5OjpJbmRleCgobG9uZylJdGVtLCBiRnJvbUVuZCk7IH0gdm9pZCBBZGQo X0F3eEFjY2VsZXJhdG9yQXJyYXkgSXRlbSkgeyB3eEJhc2VBcnJheTo6QWRkKChsb25nKUl0ZW0p OyB9IHZvaWQgSW5zZXJ0KF9Bd3hBY2NlbGVyYXRvckFycmF5IEl0ZW0sIHNpemVfdCB1aUluZGV4 KSB7IHd4QmFzZUFycmF5OjpJbnNlcnQoKGxvbmcpSXRlbSwgdWlJbmRleCkgOyB9IHZvaWQgUmVt b3ZlKHNpemVfdCB1aUluZGV4KSB7IFJlbW92ZUF0KHVpSW5kZXgpOyB9IHZvaWQgUmVtb3ZlQXQo c2l6ZV90IHVpSW5kZXgpIHsgd3hCYXNlQXJyYXk6OlJlbW92ZUF0KHVpSW5kZXgpOyB9IHZvaWQg UmVtb3ZlKF9Bd3hBY2NlbGVyYXRvckFycmF5IEl0ZW0pIHsgaW50IGlJbmRleCA9IEluZGV4KEl0 ZW0pOyBpZiAoIShpSW5kZXggIT0gKC0xKSkpIHtpZiAoICEod3hGYWxzZSkgKSB3eE9uQXNzZXJ0 KCIuLi8uLi9pbmNsdWRlL3d4L21zdy9tZW51LmgiLCAyMywgInJlbW92aW5nIGluZXhpc3Rpbmcg ZWxlbWVudCBpbiB3eEFycmF5OjpSZW1vdmUiKTsgcmV0dXJuOyB9OyB3eEJhc2VBcnJheTo6UmVt b3ZlQXQoKHNpemVfdClpSW5kZXgpOyB9IHZvaWQgU29ydChDTVBGVU5DX0F3eEFjY2VsZXJhdG9y QXJyYXkgZkNtcCkgeyB3eEJhc2VBcnJheTo6U29ydCgoQ01QRlVOQylmQ21wKTsgfSB9Ow0KDQoN CmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4RnJhbWU7DQoNCg0KDQoNCg0KY2xh c3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hNZW51IDogcHVibGljIHd4TWVudUJhc2UN CnsNCnB1YmxpYzoNCg0KICAgIHd4TWVudShjb25zdCB3eFN0cmluZyYgdGl0bGUsIGxvbmcgc3R5 bGUgPSAwKQ0KICAgICAgICA6IHd4TWVudUJhc2UodGl0bGUsIHN0eWxlKSB7IEluaXQoKTsgfQ0K DQogICAgd3hNZW51KGxvbmcgc3R5bGUgPSAwKSA6IHd4TWVudUJhc2Uoc3R5bGUpIHsgSW5pdCgp OyB9DQoNCiAgICB2aXJ0dWFsIH53eE1lbnUoKTsNCg0KDQogICAgdmlydHVhbCBib29sIERvQXBw ZW5kKHd4TWVudUl0ZW0gKml0ZW0pOw0KICAgIHZpcnR1YWwgYm9vbCBEb0luc2VydChzaXplX3Qg cG9zLCB3eE1lbnVJdGVtICppdGVtKTsNCiAgICB2aXJ0dWFsIHd4TWVudUl0ZW0gKkRvUmVtb3Zl KHd4TWVudUl0ZW0gKml0ZW0pOw0KDQogICAgdmlydHVhbCB2b2lkIEJyZWFrKCk7DQoNCiAgICB2 aXJ0dWFsIHZvaWQgU2V0VGl0bGUoY29uc3Qgd3hTdHJpbmcmIHRpdGxlKTsNCiMgNjQgIi4uLy4u L2luY2x1ZGUvd3gvbXN3L21lbnUuaCINCiAgICBib29sIFByb2Nlc3NDb21tYW5kKHd4Q29tbWFu ZEV2ZW50JiBldmVudCk7DQoNCg0KDQoNCiAgICBib29sIE1TV0NvbW1hbmQoV1hVSU5UIHBhcmFt LCBXWFdPUkQgaWQpOw0KDQoNCg0KICAgIHd4V2luZG93ICpHZXRXaW5kb3coKSBjb25zdDsNCg0K ICAgIFdYSE1FTlUgR2V0SE1lbnUoKSBjb25zdCB7IHJldHVybiBtX2hNZW51OyB9DQoNCg0KICAg IHZvaWQgQXR0YWNoKHd4TWVudUJhciAqbWVudWJhcik7DQogICAgdm9pZCBEZXRhY2goKTsNCg0K DQoNCiAgICBib29sIEhhc0FjY2VscygpIGNvbnN0IHsgcmV0dXJuICFtX2FjY2Vscy5Jc0VtcHR5 KCk7IH0NCiAgICBzaXplX3QgR2V0QWNjZWxDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZWxz LkdldENvdW50KCk7IH0NCiAgICBzaXplX3QgQ29weUFjY2Vscyh3eEFjY2VsZXJhdG9yRW50cnkg KmFjY2VscykgY29uc3Q7DQoNCg0KICAgIHZvaWQgVXBkYXRlQWNjZWwod3hNZW51SXRlbSAqaXRl bSk7DQoNCg0KICAgIGludCBGaW5kQWNjZWwoaW50IGlkKSBjb25zdDsNCg0KDQpwcml2YXRlOg0K DQogICAgdm9pZCBJbml0KCk7DQoNCg0KICAgIGJvb2wgRG9JbnNlcnRPckFwcGVuZCh3eE1lbnVJ dGVtICppdGVtLCBzaXplX3QgcG9zID0gKHNpemVfdCktMSk7DQoNCg0KICAgIGJvb2wgbV9kb0Jy ZWFrOw0KDQoNCiAgICBXWEhNRU5VIG1faE1lbnU7DQoNCg0KDQogICAgd3hBY2NlbGVyYXRvckFy cmF5IG1fYWNjZWxzOw0KDQoNCiAgICBwdWJsaWM6IHN0YXRpYyB3eENsYXNzSW5mbyBzbV9jbGFz c3d4TWVudTsgd3hDbGFzc0luZm8gKkdldENsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZ3eE1l bnU6OnNtX2NsYXNzd3hNZW51OyB9DQp9Ow0KDQoNCg0KDQoNCmNsYXNzIF9fYXR0cmlidXRlX18o KGRsbGltcG9ydCkpIHd4TWVudUJhciA6IHB1YmxpYyB3eE1lbnVCYXJCYXNlDQp7DQpwdWJsaWM6 DQoNCg0KICAgIHd4TWVudUJhcigpOw0KDQogICAgd3hNZW51QmFyKGxvbmcgc3R5bGUpOw0KDQog ICAgd3hNZW51QmFyKGludCBuLCB3eE1lbnUgKm1lbnVzW10sIGNvbnN0IHd4U3RyaW5nIHRpdGxl c1tdKTsNCiAgICB2aXJ0dWFsIH53eE1lbnVCYXIoKTsNCg0KDQogICAgdmlydHVhbCBib29sIEFw cGVuZCggd3hNZW51ICptZW51LCBjb25zdCB3eFN0cmluZyAmdGl0bGUgKTsNCiAgICB2aXJ0dWFs IGJvb2wgSW5zZXJ0KHNpemVfdCBwb3MsIHd4TWVudSAqbWVudSwgY29uc3Qgd3hTdHJpbmcmIHRp dGxlKTsNCiAgICB2aXJ0dWFsIHd4TWVudSAqUmVwbGFjZShzaXplX3QgcG9zLCB3eE1lbnUgKm1l bnUsIGNvbnN0IHd4U3RyaW5nJiB0aXRsZSk7DQogICAgdmlydHVhbCB3eE1lbnUgKlJlbW92ZShz aXplX3QgcG9zKTsNCg0KICAgIHZpcnR1YWwgaW50IEZpbmRNZW51SXRlbShjb25zdCB3eFN0cmlu ZyYgbWVudVN0cmluZywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd3hTdHJp bmcmIGl0ZW1TdHJpbmcpIGNvbnN0Ow0KICAgIHZpcnR1YWwgd3hNZW51SXRlbSogRmluZEl0ZW0o IGludCBpZCwgd3hNZW51ICoqbWVudSA9IF9fbnVsbCApIGNvbnN0Ow0KDQogICAgdmlydHVhbCB2 b2lkIEVuYWJsZVRvcCggc2l6ZV90IHBvcywgYm9vbCBmbGFnICk7DQogICAgdmlydHVhbCB2b2lk IFNldExhYmVsVG9wKCBzaXplX3QgcG9zLCBjb25zdCB3eFN0cmluZyYgbGFiZWwgKTsNCiAgICB2 aXJ0dWFsIHd4U3RyaW5nIEdldExhYmVsVG9wKCBzaXplX3QgcG9zICkgY29uc3Q7DQojIDE1NSAi Li4vLi4vaW5jbHVkZS93eC9tc3cvbWVudS5oIg0KICAgIFdYSE1FTlUgQ3JlYXRlKCk7DQogICAg dm9pZCBEZXRhY2goKTsNCg0KDQogICAgYm9vbCBJc0F0dGFjaGVkKCkgY29uc3QgeyByZXR1cm4g bV9tZW51QmFyRnJhbWUgIT0gX19udWxsOyB9DQoNCiAgICB3eEZyYW1lICpHZXRGcmFtZSgpIGNv bnN0IHsgcmV0dXJuIG1fbWVudUJhckZyYW1lOyB9DQoNCiAgICB2b2lkIEF0dGFjaCh3eEZyYW1l ICpmcmFtZSk7DQoNCg0KDQogICAgY29uc3Qgd3hBY2NlbGVyYXRvclRhYmxlJiBHZXRBY2NlbFRh YmxlKCkgY29uc3QgeyByZXR1cm4gbV9hY2NlbFRhYmxlOyB9DQoNCg0KICAgIHZvaWQgUmVidWls ZEFjY2VsVGFibGUoKTsNCg0KDQoNCiAgICBXWEhNRU5VIEdldEhNZW51KCkgY29uc3QgeyByZXR1 cm4gbV9oTWVudTsgfQ0KDQoNCg0KICAgIHZvaWQgUmVmcmVzaCgpOw0KDQpwcm90ZWN0ZWQ6DQoN CiAgICB2b2lkIEluaXQoKTsNCg0KDQoNCg0KDQogICAgd3hBcnJheVN0cmluZyBtX3RpdGxlczsN Cg0KICAgIHd4RnJhbWUgKm1fbWVudUJhckZyYW1lOw0KICAgIFdYSE1FTlUgbV9oTWVudTsNCg0K DQoNCiAgICB3eEFjY2VsZXJhdG9yVGFibGUgbV9hY2NlbFRhYmxlOw0KDQoNCnByaXZhdGU6DQog ICAgcHVibGljOiBzdGF0aWMgd3hDbGFzc0luZm8gc21fY2xhc3N3eE1lbnVCYXI7IHd4Q2xhc3NJ bmZvICpHZXRDbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmd3hNZW51QmFyOjpzbV9jbGFzc3d4 TWVudUJhcjsgfQ0KfTsNCiMgNDA3ICIuLi8uLi9pbmNsdWRlL3d4L21lbnUuaCIgMg0KIyAzOSAi Li4vLi4vaW5jbHVkZS93eC93eC5oIiAyDQoNCg0KDQoNCg0KIyAxICIuLi8uLi9pbmNsdWRlL3d4 L2RpYWxvZy5oIiAxDQojIDE2ICIuLi8uLi9pbmNsdWRlL3d4L2RpYWxvZy5oIg0KI3ByYWdtYSBp bnRlcmZhY2UgImRpYWxvZ2Jhc2UuaCINCg0KDQoNCg0KDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChk bGxpbXBvcnQpKSB3eERpYWxvZ0Jhc2UgOiBwdWJsaWMgd3hQYW5lbA0Kew0KcHVibGljOg0KDQoN CiAgICB2b2lkIFNldFJldHVybkNvZGUoaW50IHJldHVybkNvZGUpIHsgbV9yZXR1cm5Db2RlID0g cmV0dXJuQ29kZTsgfQ0KICAgIGludCBHZXRSZXR1cm5Db2RlKCkgY29uc3QgeyByZXR1cm4gbV9y ZXR1cm5Db2RlOyB9DQoNCg0KDQogICAgd3hTaXplciAqQ3JlYXRlVGV4dFNpemVyKCBjb25zdCB3 eFN0cmluZyAmbWVzc2FnZSApOw0KDQoNCiAgICB3eFNpemVyICpDcmVhdGVCdXR0b25TaXplcigg bG9uZyBmbGFncyApOw0KDQpwcm90ZWN0ZWQ6DQoNCiAgICBpbnQgbV9yZXR1cm5Db2RlOw0KfTsN Cg0KDQojIDEgIi4uLy4uL2luY2x1ZGUvd3gvbXN3L2RpYWxvZy5oIiAxDQojIDE2ICIuLi8uLi9p bmNsdWRlL3d4L21zdy9kaWFsb2cuaCINCiNwcmFnbWEgaW50ZXJmYWNlICJkaWFsb2cuaCINCg0K DQoNCg0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgZXh0ZXJuIGNvbnN0IGNoYXIqIHd4RGlh bG9nTmFtZVN0cjsNCg0KDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eERpYWxv ZyA6IHB1YmxpYyB3eERpYWxvZ0Jhc2UNCnsNCiAgICBwdWJsaWM6IHN0YXRpYyB3eENsYXNzSW5m byBzbV9jbGFzc3d4RGlhbG9nOyB3eENsYXNzSW5mbyAqR2V0Q2xhc3NJbmZvKCkgY29uc3QgeyBy ZXR1cm4gJnd4RGlhbG9nOjpzbV9jbGFzc3d4RGlhbG9nOyB9DQoNCnB1YmxpYzoNCiAgICB3eERp YWxvZygpOw0KDQoNCiAgICB3eERpYWxvZyh3eFdpbmRvdyAqcGFyZW50LA0KICAgICAgICAgICAg IGNvbnN0IHd4U3RyaW5nJiB0aXRsZSwgYm9vbCBtb2RhbCwNCiAgICAgICAgICAgICBpbnQgeCA9 IC0xLCBpbnQgeT0gLTEsIGludCB3aWR0aCA9IDUwMCwgaW50IGhlaWdodCA9IDUwMCwNCiAgICAg ICAgICAgICBsb25nIHN0eWxlID0gKDB4MDgwMCB8IDB4MjAwMDAwMDApLA0KICAgICAgICAgICAg IGNvbnN0IHd4U3RyaW5nJiBuYW1lID0gd3hEaWFsb2dOYW1lU3RyKQ0KICAgIHsNCiAgICAgICAg bG9uZyBtb2RhbFN0eWxlID0gbW9kYWwgPyAweDAwMjAgOiAweDAwMDAgOw0KICAgICAgICBDcmVh dGUocGFyZW50LCAtMSwgdGl0bGUsIHd4UG9pbnQoeCwgeSksIHd4U2l6ZSh3aWR0aCwgaGVpZ2h0 KSwNCiAgICAgICAgICAgICAgIHN0eWxlIHwgbW9kYWxTdHlsZSwgbmFtZSk7DQogICAgfQ0KDQoN CiAgICB3eERpYWxvZyh3eFdpbmRvdyAqcGFyZW50LCB3eFdpbmRvd0lEIGlkLA0KICAgICAgICAg ICAgIGNvbnN0IHd4U3RyaW5nJiB0aXRsZSwNCiAgICAgICAgICAgICBjb25zdCB3eFBvaW50JiBw b3MgPSB3eERlZmF1bHRQb3NpdGlvbiwNCiAgICAgICAgICAgICBjb25zdCB3eFNpemUmIHNpemUg PSB3eERlZmF1bHRTaXplLA0KICAgICAgICAgICAgIGxvbmcgc3R5bGUgPSAoMHgwODAwIHwgMHgy MDAwMDAwMCksDQogICAgICAgICAgICAgY29uc3Qgd3hTdHJpbmcmIG5hbWUgPSB3eERpYWxvZ05h bWVTdHIpDQogICAgew0KICAgICAgICBDcmVhdGUocGFyZW50LCBpZCwgdGl0bGUsIHBvcywgc2l6 ZSwgc3R5bGUsIG5hbWUpOw0KICAgIH0NCg0KICAgIGJvb2wgQ3JlYXRlKHd4V2luZG93ICpwYXJl bnQsIHd4V2luZG93SUQgaWQsDQogICAgICAgICAgICAgICAgY29uc3Qgd3hTdHJpbmcmIHRpdGxl LA0KICAgICAgICAgICAgICAgIGNvbnN0IHd4UG9pbnQmIHBvcyA9IHd4RGVmYXVsdFBvc2l0aW9u LA0KICAgICAgICAgICAgICAgIGNvbnN0IHd4U2l6ZSYgc2l6ZSA9IHd4RGVmYXVsdFNpemUsDQog ICAgICAgICAgICAgICAgbG9uZyBzdHlsZSA9ICgweDA4MDAgfCAweDIwMDAwMDAwKSwNCiAgICAg ICAgICAgICAgICBjb25zdCB3eFN0cmluZyYgbmFtZSA9IHd4RGlhbG9nTmFtZVN0cik7DQoNCiAg ICB+d3hEaWFsb2coKTsNCg0KDQogICAgdmlydHVhbCBib29sIERlc3Ryb3koKTsNCiAgICB2aXJ0 dWFsIGJvb2wgU2hvdyhib29sIHNob3cpOw0KICAgIHZpcnR1YWwgdm9pZCBJY29uaXplKGJvb2wg aWNvbml6ZSk7DQogICAgdmlydHVhbCBib29sIElzSWNvbml6ZWQoKSBjb25zdDsNCg0KICAgIHZp cnR1YWwgYm9vbCBJc1RvcExldmVsKCkgY29uc3QgeyByZXR1cm4gMTsgfQ0KDQogICAgdm9pZCBT ZXRNb2RhbChib29sIGZsYWcpOw0KICAgIHZpcnR1YWwgYm9vbCBJc01vZGFsKCkgY29uc3Q7DQoN Cg0KICAgIHZpcnR1YWwgaW50IFNob3dNb2RhbCgpOw0KDQoNCiAgICB2aXJ0dWFsIHZvaWQgRW5k TW9kYWwoaW50IHJldENvZGUpOw0KDQoNCiAgICBib29sIElzTW9kYWxTaG93aW5nKCkgY29uc3Q7 DQojIDkxICIuLi8uLi9pbmNsdWRlL3d4L21zdy9kaWFsb2cuaCINCiAgICBib29sIE9uQ2xvc2Uo KTsNCiAgICB2b2lkIE9uQ2hhckhvb2sod3hLZXlFdmVudCYgZXZlbnQpOw0KICAgIHZvaWQgT25D bG9zZVdpbmRvdyh3eENsb3NlRXZlbnQmIGV2ZW50KTsNCg0KDQogICAgdm9pZCBPbk9LKHd4Q29t bWFuZEV2ZW50JiBldmVudCk7DQogICAgdm9pZCBPbkFwcGx5KHd4Q29tbWFuZEV2ZW50JiBldmVu dCk7DQogICAgdm9pZCBPbkNhbmNlbCh3eENvbW1hbmRFdmVudCYgZXZlbnQpOw0KDQoNCiAgICB2 b2lkIE9uU3lzQ29sb3VyQ2hhbmdlZCh3eFN5c0NvbG91ckNoYW5nZWRFdmVudCYgZXZlbnQpOw0K DQoNCiAgICBsb25nIE1TV1dpbmRvd1Byb2MoV1hVSU5UIG1lc3NhZ2UsIFdYV1BBUkFNIHdQYXJh bSwgV1hMUEFSQU0gbFBhcmFtKTsNCg0KDQoNCg0KDQoNCnByb3RlY3RlZDoNCg0KICAgIHZpcnR1 YWwgdm9pZCBEb1NldENsaWVudFNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsNCiAgICB2aXJ0 dWFsIHZvaWQgRG9HZXRQb3NpdGlvbihpbnQgKngsIGludCAqeSkgY29uc3Q7DQoNCg0KICAgIHZv aWQgRG9TaG93TW9kYWwoKTsNCg0KcHJpdmF0ZToNCiAgICB3eFdpbmRvdyAqbV9vbGRGb2N1czsN Cg0KICAgIHByaXZhdGU6IHN0YXRpYyBjb25zdCB3eEV2ZW50VGFibGVFbnRyeSBzbV9ldmVudFRh YmxlRW50cmllc1tdO3Byb3RlY3RlZDogc3RhdGljIGNvbnN0IHd4RXZlbnRUYWJsZSBzbV9ldmVu dFRhYmxlOyB2aXJ0dWFsIGNvbnN0IHd4RXZlbnRUYWJsZSogR2V0RXZlbnRUYWJsZSgpIGNvbnN0 Ow0KfTsNCiMgNDQgIi4uLy4uL2luY2x1ZGUvd3gvZGlhbG9nLmgiIDINCiMgNDUgIi4uLy4uL2lu Y2x1ZGUvd3gvd3guaCIgMg0KIyAxICIuLi8uLi9pbmNsdWRlL3d4L3RpbWVyLmgiIDENCiMgMTcg Ii4uLy4uL2luY2x1ZGUvd3gvdGltZXIuaCINCiNwcmFnbWEgaW50ZXJmYWNlICJ0aW1lcmJhc2Uu aCINCg0KDQoNCg0KIyAxICIuLi8uLi9pbmNsdWRlL3d4L2xvbmdsb25nLmgiIDENCiMgMTcgIi4u Ly4uL2luY2x1ZGUvd3gvbG9uZ2xvbmcuaCINCiNwcmFnbWEgaW50ZXJmYWNlICJsb25nbG9uZy5o Ig0KDQoNCg0KDQoNCiMgMSAidDovbXN5cy8xLjAvbWluZ3cvbGliL2djYy1saWIvaTY4Ni1wYy1t aW5ndzMyLzMuMS9pbmNsdWRlL2xpbWl0cy5oIiAxIDMNCiMgMjQgIi4uLy4uL2luY2x1ZGUvd3gv bG9uZ2xvbmcuaCIgMg0KIyAxMDUgIi4uLy4uL2luY2x1ZGUvd3gvbG9uZ2xvbmcuaCINCiAgICBj bGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eExvbmdMb25nTmF0aXZlOw0KICAgIHR5 cGVkZWYgd3hMb25nTG9uZ05hdGl2ZSB3eExvbmdMb25nOw0KIyAxMTcgIi4uLy4uL2luY2x1ZGUv d3gvbG9uZ2xvbmcuaCINCiMgMSAiLi4vLi4vaW5jbHVkZS93eC9pb3N3cmFwLmgiIDENCiMgMTE4 ICIuLi8uLi9pbmNsdWRlL3d4L2xvbmdsb25nLmgiIDINCg0KDQoNCmNsYXNzIF9fYXR0cmlidXRl X18oKGRsbGltcG9ydCkpIHd4TG9uZ0xvbmdOYXRpdmUNCnsNCnB1YmxpYzoNCg0KDQogICAgd3hM b25nTG9uZ05hdGl2ZSgpIHsgbV9sbCA9IDA7IH0NCg0KICAgIHd4TG9uZ0xvbmdOYXRpdmUobG9u ZyBsb25nIGxsKSB7IG1fbGwgPSBsbDsgfQ0KDQogICAgd3hMb25nTG9uZ05hdGl2ZShsb25nIGhp LCB1bnNpZ25lZCBsb25nIGxvKQ0KICAgIHsNCg0KICAgICAgICBtX2xsID0gKChsb25nIGxvbmcp IGhpKSA8PCAzMjsNCiAgICAgICAgbV9sbCB8PSAobG9uZyBsb25nKSBsbzsNCiAgICB9DQoNCg0K DQoNCg0KDQoNCiAgICB3eExvbmdMb25nTmF0aXZlJiBvcGVyYXRvcj0obG9uZyBsb25nIGxsKQ0K ICAgICAgICB7IG1fbGwgPSBsbDsgcmV0dXJuICp0aGlzOyB9DQoNCg0KDQoNCiAgICB3eExvbmdM b25nTmF0aXZlJiBBc3NpZ24oZG91YmxlIGQpDQogICAgICAgIHsgbV9sbCA9IChsb25nIGxvbmcp ZDsgcmV0dXJuICp0aGlzOyB9DQoNCg0KDQoNCg0KICAgIGxvbmcgR2V0SGkoKSBjb25zdA0KICAg ICAgICB7IHJldHVybiAobG9uZykobV9sbCA+PiAzMik7IH0NCg0KICAgIHVuc2lnbmVkIGxvbmcg R2V0TG8oKSBjb25zdA0KICAgICAgICB7IHJldHVybiAodW5zaWduZWQgbG9uZyltX2xsOyB9DQoN Cg0KICAgIHd4TG9uZ0xvbmdOYXRpdmUgQWJzKCkgY29uc3QgeyByZXR1cm4gd3hMb25nTG9uZ05h dGl2ZSgqdGhpcykuQWJzKCk7IH0NCiAgICB3eExvbmdMb25nTmF0aXZlJiBBYnMoKSB7IGlmICgg bV9sbCA8IDAgKSBtX2xsID0gLW1fbGw7IHJldHVybiAqdGhpczsgfQ0KDQoNCiAgICBsb25nIGxv bmcgR2V0VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2xsOyB9DQoNCg0KICAgIGxvbmcgVG9Mb25n KCkgY29uc3QNCiAgICB7DQogICAgICAgIGlmICggISgobV9sbCA+PSAoLTIxNDc0ODM2NDdMIC0x KSkgJiYgKG1fbGwgPD0gMjE0NzQ4MzY0N0wpKSApIHd4T25Bc3NlcnQoIi4uLy4uL2luY2x1ZGUv d3gvbG9uZ2xvbmcuaCIsIDE3MywgInd4TG9uZ0xvbmcgdG8gbG9uZyBjb252ZXJzaW9uIGxvc3Mg b2YgcHJlY2lzaW9uIik7DQoNCg0KICAgICAgICByZXR1cm4gKGxvbmcpbV9sbDsNCiAgICB9DQoN Cg0KDQoNCg0KDQoNCiAgICB3eExvbmdMb25nTmF0aXZlIG9wZXJhdG9yKyhjb25zdCB3eExvbmdM b25nTmF0aXZlJiBsbCkgY29uc3QNCiAgICAgICAgeyByZXR1cm4gd3hMb25nTG9uZ05hdGl2ZSht X2xsICsgbGwubV9sbCk7IH0NCiAgICB3eExvbmdMb25nTmF0aXZlJiBvcGVyYXRvcis9KGNvbnN0 IHd4TG9uZ0xvbmdOYXRpdmUmIGxsKQ0KICAgICAgICB7IG1fbGwgKz0gbGwubV9sbDsgcmV0dXJu ICp0aGlzOyB9DQoNCiAgICB3eExvbmdMb25nTmF0aXZlIG9wZXJhdG9yKyhjb25zdCBsb25nIGxv bmcgbGwpIGNvbnN0DQogICAgICAgIHsgcmV0dXJuIHd4TG9uZ0xvbmdOYXRpdmUobV9sbCArIGxs KTsgfQ0KICAgIHd4TG9uZ0xvbmdOYXRpdmUmIG9wZXJhdG9yKz0oY29uc3QgbG9uZyBsb25nIGxs KQ0KICAgICAgICB7IG1fbGwgKz0gbGw7IHJldHVybiAqdGhpczsgfQ0KDQoNCiAgICB3eExvbmdM b25nTmF0aXZlJiBvcGVyYXRvcisrKCkNCiAgICAgICAgeyBtX2xsKys7IHJldHVybiAqdGhpczsg fQ0KDQoNCiAgICB3eExvbmdMb25nTmF0aXZlJiBvcGVyYXRvcisrKGludCkNCiAgICAgICAgeyBt X2xsKys7IHJldHVybiAqdGhpczsgfQ0KDQoNCiAgICB3eExvbmdMb25nTmF0aXZlIG9wZXJhdG9y LSgpIGNvbnN0DQogICAgICAgIHsgcmV0dXJuIHd4TG9uZ0xvbmdOYXRpdmUoLW1fbGwpOyB9DQoN Cg0KICAgIHd4TG9uZ0xvbmdOYXRpdmUgb3BlcmF0b3ItKGNvbnN0IHd4TG9uZ0xvbmdOYXRpdmUm IGxsKSBjb25zdA0KICAgICAgICB7IHJldHVybiB3eExvbmdMb25nTmF0aXZlKG1fbGwgLSBsbC5t X2xsKTsgfQ0KICAgIHd4TG9uZ0xvbmdOYXRpdmUmIG9wZXJhdG9yLT0oY29uc3Qgd3hMb25nTG9u Z05hdGl2ZSYgbGwpDQogICAgICAgIHsgbV9sbCAtPSBsbC5tX2xsOyByZXR1cm4gKnRoaXM7IH0N Cg0KICAgIHd4TG9uZ0xvbmdOYXRpdmUgb3BlcmF0b3ItKGNvbnN0IGxvbmcgbG9uZyBsbCkgY29u c3QNCiAgICAgICAgeyByZXR1cm4gd3hMb25nTG9uZ05hdGl2ZShtX2xsIC0gbGwpOyB9DQogICAg d3hMb25nTG9uZ05hdGl2ZSYgb3BlcmF0b3ItPShjb25zdCBsb25nIGxvbmcgbGwpDQogICAgICAg IHsgbV9sbCAtPSBsbDsgcmV0dXJuICp0aGlzOyB9DQoNCg0KICAgIHd4TG9uZ0xvbmdOYXRpdmUm IG9wZXJhdG9yLS0oKQ0KICAgICAgICB7IG1fbGwtLTsgcmV0dXJuICp0aGlzOyB9DQoNCg0KICAg IHd4TG9uZ0xvbmdOYXRpdmUmIG9wZXJhdG9yLS0oaW50KQ0KICAgICAgICB7IG1fbGwtLTsgcmV0 dXJuICp0aGlzOyB9DQoNCg0KDQogICAgd3hMb25nTG9uZ05hdGl2ZSBvcGVyYXRvcjw8KGludCBz aGlmdCkgY29uc3QNCiAgICAgICAgeyByZXR1cm4gd3hMb25nTG9uZ05hdGl2ZShtX2xsIDw8IHNo aWZ0KTs7IH0NCiAgICB3eExvbmdMb25nTmF0aXZlJiBvcGVyYXRvcjw8PShpbnQgc2hpZnQpDQog ICAgICAgIHsgbV9sbCA8PD0gc2hpZnQ7IHJldHVybiAqdGhpczsgfQ0KDQoNCiAgICB3eExvbmdM b25nTmF0aXZlIG9wZXJhdG9yPj4oaW50IHNoaWZ0KSBjb25zdA0KICAgICAgICB7IHJldHVybiB3 eExvbmdMb25nTmF0aXZlKG1fbGwgPj4gc2hpZnQpOzsgfQ0KICAgIHd4TG9uZ0xvbmdOYXRpdmUm IG9wZXJhdG9yPj49KGludCBzaGlmdCkNCiAgICAgICAgeyBtX2xsID4+PSBzaGlmdDsgcmV0dXJu ICp0aGlzOyB9DQoNCg0KICAgIHd4TG9uZ0xvbmdOYXRpdmUgb3BlcmF0b3ImKGNvbnN0IHd4TG9u Z0xvbmdOYXRpdmUmIGxsKSBjb25zdA0KICAgICAgICB7IHJldHVybiB3eExvbmdMb25nTmF0aXZl KG1fbGwgJiBsbC5tX2xsKTsgfQ0KICAgIHd4TG9uZ0xvbmdOYXRpdmUmIG9wZXJhdG9yJj0oY29u c3Qgd3hMb25nTG9uZ05hdGl2ZSYgbGwpDQogICAgICAgIHsgbV9sbCAmPSBsbC5tX2xsOyByZXR1 cm4gKnRoaXM7IH0NCg0KICAgIHd4TG9uZ0xvbmdOYXRpdmUgb3BlcmF0b3J8KGNvbnN0IHd4TG9u Z0xvbmdOYXRpdmUmIGxsKSBjb25zdA0KICAgICAgICB7IHJldHVybiB3eExvbmdMb25nTmF0aXZl KG1fbGwgfCBsbC5tX2xsKTsgfQ0KICAgIHd4TG9uZ0xvbmdOYXRpdmUmIG9wZXJhdG9yfD0oY29u c3Qgd3hMb25nTG9uZ05hdGl2ZSYgbGwpDQogICAgICAgIHsgbV9sbCB8PSBsbC5tX2xsOyByZXR1 cm4gKnRoaXM7IH0NCg0KICAgIHd4TG9uZ0xvbmdOYXRpdmUgb3BlcmF0b3JeKGNvbnN0IHd4TG9u Z0xvbmdOYXRpdmUmIGxsKSBjb25zdA0KICAgICAgICB7IHJldHVybiB3eExvbmdMb25nTmF0aXZl KG1fbGwgXiBsbC5tX2xsKTsgfQ0KICAgIHd4TG9uZ0xvbmdOYXRpdmUmIG9wZXJhdG9yXj0oY29u c3Qgd3hMb25nTG9uZ05hdGl2ZSYgbGwpDQogICAgICAgIHsgbV9sbCBePSBsbC5tX2xsOyByZXR1 cm4gKnRoaXM7IH0NCg0KDQogICAgd3hMb25nTG9uZ05hdGl2ZSBvcGVyYXRvciooY29uc3Qgd3hM b25nTG9uZ05hdGl2ZSYgbGwpIGNvbnN0DQogICAgICAgIHsgcmV0dXJuIHd4TG9uZ0xvbmdOYXRp dmUobV9sbCAqIGxsLm1fbGwpOyB9DQogICAgd3hMb25nTG9uZ05hdGl2ZSBvcGVyYXRvcioobG9u ZyBsKSBjb25zdA0KICAgICAgICB7IHJldHVybiB3eExvbmdMb25nTmF0aXZlKG1fbGwgKiBsKTsg fQ0KICAgIHd4TG9uZ0xvbmdOYXRpdmUmIG9wZXJhdG9yKj0oY29uc3Qgd3hMb25nTG9uZ05hdGl2 ZSYgbGwpDQogICAgICAgIHsgbV9sbCAqPSBsbC5tX2xsOyByZXR1cm4gKnRoaXM7IH0NCiAgICB3 eExvbmdMb25nTmF0aXZlJiBvcGVyYXRvcio9KGxvbmcgbCkNCiAgICAgICAgeyBtX2xsICo9IGw7 IHJldHVybiAqdGhpczsgfQ0KDQogICAgd3hMb25nTG9uZ05hdGl2ZSBvcGVyYXRvci8oY29uc3Qg d3hMb25nTG9uZ05hdGl2ZSYgbGwpIGNvbnN0DQogICAgICAgIHsgcmV0dXJuIHd4TG9uZ0xvbmdO YXRpdmUobV9sbCAvIGxsLm1fbGwpOyB9DQogICAgd3hMb25nTG9uZ05hdGl2ZSBvcGVyYXRvci8o bG9uZyBsKSBjb25zdA0KICAgICAgICB7IHJldHVybiB3eExvbmdMb25nTmF0aXZlKG1fbGwgLyBs KTsgfQ0KICAgIHd4TG9uZ0xvbmdOYXRpdmUmIG9wZXJhdG9yLz0oY29uc3Qgd3hMb25nTG9uZ05h dGl2ZSYgbGwpDQogICAgICAgIHsgbV9sbCAvPSBsbC5tX2xsOyByZXR1cm4gKnRoaXM7IH0NCiAg ICB3eExvbmdMb25nTmF0aXZlJiBvcGVyYXRvci89KGxvbmcgbCkNCiAgICAgICAgeyBtX2xsIC89 IGw7IHJldHVybiAqdGhpczsgfQ0KDQogICAgd3hMb25nTG9uZ05hdGl2ZSBvcGVyYXRvciUoY29u c3Qgd3hMb25nTG9uZ05hdGl2ZSYgbGwpIGNvbnN0DQogICAgICAgIHsgcmV0dXJuIHd4TG9uZ0xv bmdOYXRpdmUobV9sbCAlIGxsLm1fbGwpOyB9DQogICAgd3hMb25nTG9uZ05hdGl2ZSBvcGVyYXRv ciUobG9uZyBsKSBjb25zdA0KICAgICAgICB7IHJldHVybiB3eExvbmdMb25nTmF0aXZlKG1fbGwg JSBsKTsgfQ0KDQoNCiAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qgd3hMb25nTG9uZ05hdGl2ZSYg bGwpIGNvbnN0DQogICAgICAgIHsgcmV0dXJuIG1fbGwgPT0gbGwubV9sbDsgfQ0KICAgIGJvb2wg b3BlcmF0b3I9PShsb25nIGwpIGNvbnN0DQogICAgICAgIHsgcmV0dXJuIG1fbGwgPT0gbDsgfQ0K ICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCB3eExvbmdMb25nTmF0aXZlJiBsbCkgY29uc3QNCiAg ICAgICAgeyByZXR1cm4gbV9sbCAhPSBsbC5tX2xsOyB9DQogICAgYm9vbCBvcGVyYXRvciE9KGxv bmcgbCkgY29uc3QNCiAgICAgICAgeyByZXR1cm4gbV9sbCAhPSBsOyB9DQogICAgYm9vbCBvcGVy YXRvcjwoY29uc3Qgd3hMb25nTG9uZ05hdGl2ZSYgbGwpIGNvbnN0DQogICAgICAgIHsgcmV0dXJu IG1fbGwgPCBsbC5tX2xsOyB9DQogICAgYm9vbCBvcGVyYXRvcjwobG9uZyBsKSBjb25zdA0KICAg ICAgICB7IHJldHVybiBtX2xsIDwgbDsgfQ0KICAgIGJvb2wgb3BlcmF0b3I+KGNvbnN0IHd4TG9u Z0xvbmdOYXRpdmUmIGxsKSBjb25zdA0KICAgICAgICB7IHJldHVybiBtX2xsID4gbGwubV9sbDsg fQ0KICAgIGJvb2wgb3BlcmF0b3I+KGxvbmcgbCkgY29uc3QNCiAgICAgICAgeyByZXR1cm4gbV9s bCA+IGw7IH0NCiAgICBib29sIG9wZXJhdG9yPD0oY29uc3Qgd3hMb25nTG9uZ05hdGl2ZSYgbGwp IGNvbnN0DQogICAgICAgIHsgcmV0dXJuIG1fbGwgPD0gbGwubV9sbDsgfQ0KICAgIGJvb2wgb3Bl cmF0b3I8PShsb25nIGwpIGNvbnN0DQogICAgICAgIHsgcmV0dXJuIG1fbGwgPD0gbDsgfQ0KICAg IGJvb2wgb3BlcmF0b3I+PShjb25zdCB3eExvbmdMb25nTmF0aXZlJiBsbCkgY29uc3QNCiAgICAg ICAgeyByZXR1cm4gbV9sbCA+PSBsbC5tX2xsOyB9DQogICAgYm9vbCBvcGVyYXRvcj49KGxvbmcg bCkgY29uc3QNCiAgICAgICAgeyByZXR1cm4gbV9sbCA+PSBsOyB9DQoNCg0KDQogICAgdm9pZCAq YXNBcnJheSgpIGNvbnN0Ow0KDQoNCg0KDQoNCg0KcHJpdmF0ZToNCiAgICBsb25nIGxvbmcgbV9s bDsNCn07DQojIDUxOCAiLi4vLi4vaW5jbHVkZS93eC9sb25nbG9uZy5oIg0KaW5saW5lIGJvb2wg X19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgb3BlcmF0b3I8KGxvbmcgbCwgY29uc3Qgd3hMb25n TG9uZyYgbGwpIHsgcmV0dXJuIGxsID4gbDsgfQ0KaW5saW5lIGJvb2wgX19hdHRyaWJ1dGVfXygo ZGxsaW1wb3J0KSkgb3BlcmF0b3I+KGxvbmcgbCwgY29uc3Qgd3hMb25nTG9uZyYgbGwpIHsgcmV0 dXJuIGxsID4gbDsgfQ0KaW5saW5lIGJvb2wgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgb3Bl cmF0b3I8PShsb25nIGwsIGNvbnN0IHd4TG9uZ0xvbmcmIGxsKSB7IHJldHVybiBsbCA+IGw7IH0N CmlubGluZSBib29sIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIG9wZXJhdG9yPj0obG9uZyBs LCBjb25zdCB3eExvbmdMb25nJiBsbCkgeyByZXR1cm4gbGwgPiBsOyB9DQppbmxpbmUgYm9vbCBf X2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBvcGVyYXRvcj09KGxvbmcgbCwgY29uc3Qgd3hMb25n TG9uZyYgbGwpIHsgcmV0dXJuIGxsID4gbDsgfQ0KaW5saW5lIGJvb2wgX19hdHRyaWJ1dGVfXygo ZGxsaW1wb3J0KSkgb3BlcmF0b3IhPShsb25nIGwsIGNvbnN0IHd4TG9uZ0xvbmcmIGxsKSB7IHJl dHVybiBsbCA+IGw7IH0NCg0KaW5saW5lIHd4TG9uZ0xvbmcgX19hdHRyaWJ1dGVfXygoZGxsaW1w b3J0KSkgb3BlcmF0b3IrKGxvbmcgbCwgY29uc3Qgd3hMb25nTG9uZyYgbGwpIHsgcmV0dXJuIGxs ICsgbDsgfQ0KaW5saW5lIHd4TG9uZ0xvbmcgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgb3Bl cmF0b3ItKGxvbmcgbCwgY29uc3Qgd3hMb25nTG9uZyYgbGwpIHsgcmV0dXJuIGxsIC0gbDsgfQ0K IyAyMyAiLi4vLi4vaW5jbHVkZS93eC90aW1lci5oIiAyDQojIDMyICIuLi8uLi9pbmNsdWRlL3d4 L3RpbWVyLmgiDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eFRpbWVyQmFzZSA6 IHB1YmxpYyB3eE9iamVjdA0Kew0KcHVibGljOg0KDQoNCg0KDQoNCiAgICB3eFRpbWVyQmFzZSgp IHsgSW5pdCgpOyBTZXRPd25lcihfX251bGwpOyB9DQoNCg0KDQoNCiAgICB3eFRpbWVyQmFzZSh3 eEV2dEhhbmRsZXIgKm93bmVyLCBpbnQgaWQgPSAtMSkNCiAgICAgICAgeyBJbml0KCk7IFNldE93 bmVyKG93bmVyLCBpZCk7IH0NCg0KDQogICAgdm9pZCBTZXRPd25lcih3eEV2dEhhbmRsZXIgKm93 bmVyLCBpbnQgaWQgPSAtMSkNCiAgICAgICAgeyBtX293bmVyID0gb3duZXI7IG1faWRUaW1lciA9 IGlkOyB9DQoNCg0KDQoNCg0KDQogICAgdmlydHVhbCBib29sIFN0YXJ0KGludCBtaWxsaXNlY29u ZHMgPSAtMSwgYm9vbCBvbmVTaG90ID0gMCkNCiAgICB7DQogICAgICAgIGlmICggbWlsbGlzZWNv bmRzICE9IC0xICkNCiAgICAgICAgew0KICAgICAgICAgICAgbV9taWxsaSA9IG1pbGxpc2Vjb25k czsNCiAgICAgICAgfQ0KDQogICAgICAgIG1fb25lU2hvdCA9IG9uZVNob3Q7DQoNCiAgICAgICAg cmV0dXJuIDE7DQogICAgfQ0KDQoNCg0KICAgIHZpcnR1YWwgdm9pZCBTdG9wKCkgPSAwOw0KDQoN Cg0KICAgIHZpcnR1YWwgdm9pZCBOb3RpZnkoKTsNCg0KDQoNCg0KDQogICAgdmlydHVhbCBib29s IElzUnVubmluZygpIGNvbnN0ID0gMDsNCg0KDQogICAgaW50IEdldEludGVydmFsKCkgY29uc3Qg eyByZXR1cm4gbV9taWxsaTsgfQ0KDQoNCiAgICBib29sIElzT25lU2hvdCgpIGNvbnN0IHsgcmV0 dXJuIG1fb25lU2hvdDsgfQ0KDQoNCg0KDQoNCg0KDQpwcm90ZWN0ZWQ6DQoNCiAgICB2b2lkIElu aXQoKSB7IG1fb25lU2hvdCA9IDA7IG1fbWlsbGkgPSAwOyB9DQoNCiAgICB3eEV2dEhhbmRsZXIg Km1fb3duZXI7DQogICAgaW50IG1faWRUaW1lcjsNCg0KICAgIGludCBtX21pbGxpOw0KICAgIGJv b2wgbV9vbmVTaG90Ow0KfTsNCg0KDQoNCg0KDQoNCiMgMSAiLi4vLi4vaW5jbHVkZS93eC9tc3cv dGltZXIuaCIgMQ0KIyAxNiAiLi4vLi4vaW5jbHVkZS93eC9tc3cvdGltZXIuaCINCiNwcmFnbWEg aW50ZXJmYWNlICJ0aW1lci5oIg0KDQoNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkp IHd4VGltZXIgOiBwdWJsaWMgd3hUaW1lckJhc2UNCnsNCmZyaWVuZCB2b2lkIHd4UHJvY2Vzc1Rp bWVyKHd4VGltZXImIHRpbWVyKTsNCg0KcHVibGljOg0KICAgIHd4VGltZXIoKSB7IEluaXQoKTsg fQ0KICAgIHd4VGltZXIod3hFdnRIYW5kbGVyICpvd25lciwgaW50IGlkID0gLTEpIDogd3hUaW1l ckJhc2Uob3duZXIsIGlkKQ0KICAgICAgICB7IEluaXQoKTsgfQ0KICAgIH53eFRpbWVyKCk7DQoN CiAgICB2aXJ0dWFsIGJvb2wgU3RhcnQoaW50IG1pbGxpc2Vjb25kcyA9IC0xLCBib29sIG9uZVNo b3QgPSAwKTsNCiAgICB2aXJ0dWFsIHZvaWQgU3RvcCgpOw0KDQogICAgdmlydHVhbCBib29sIElz UnVubmluZygpIGNvbnN0IHsgcmV0dXJuIG1faWQgIT0gMDsgfQ0KDQpwcm90ZWN0ZWQ6DQogICAg dm9pZCBJbml0KCk7DQoNCiAgICBsb25nIG1faWQ7DQoNCnByaXZhdGU6DQogICAgcHVibGljOiBz dGF0aWMgd3hDbGFzc0luZm8gc21fY2xhc3N3eFRpbWVyOyB3eENsYXNzSW5mbyAqR2V0Q2xhc3NJ bmZvKCkgY29uc3QgeyByZXR1cm4gJnd4VGltZXI6OnNtX2NsYXNzd3hUaW1lcjsgfQ0KfTsNCiMg MTEyICIuLi8uLi9pbmNsdWRlL3d4L3RpbWVyLmgiIDINCiMgMTMwICIuLi8uLi9pbmNsdWRlL3d4 L3RpbWVyLmgiDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eFRpbWVyUnVubmVy DQp7DQpwdWJsaWM6DQogICAgd3hUaW1lclJ1bm5lcih3eFRpbWVyJiB0aW1lcikgOiBtX3RpbWVy KHRpbWVyKSB7IH0NCiAgICB3eFRpbWVyUnVubmVyKHd4VGltZXImIHRpbWVyLCBpbnQgbWlsbGks IGJvb2wgb25lU2hvdCA9IDApDQogICAgICAgIDogbV90aW1lcih0aW1lcikNCiAgICB7DQogICAg ICAgIG1fdGltZXIuU3RhcnQobWlsbGksIG9uZVNob3QpOw0KICAgIH0NCg0KICAgIHZvaWQgU3Rh cnQoaW50IG1pbGxpLCBib29sIG9uZVNob3QgPSAwKQ0KICAgIHsNCiAgICAgICAgbV90aW1lci5T dGFydChtaWxsaSwgb25lU2hvdCk7DQogICAgfQ0KDQogICAgfnd4VGltZXJSdW5uZXIoKQ0KICAg IHsNCiAgICAgICAgaWYgKCBtX3RpbWVyLklzUnVubmluZygpICkNCiAgICAgICAgew0KICAgICAg ICAgICAgbV90aW1lci5TdG9wKCk7DQogICAgICAgIH0NCiAgICB9DQoNCnByaXZhdGU6DQogICAg d3hUaW1lciYgbV90aW1lcjsNCn07DQoNCg0KDQoNCg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxs aW1wb3J0KSkgd3hUaW1lckV2ZW50IDogcHVibGljIHd4RXZlbnQNCnsNCnB1YmxpYzoNCiAgICB3 eFRpbWVyRXZlbnQoaW50IGlkID0gMCwgaW50IGludGVydmFsID0gMCkgOiB3eEV2ZW50KGlkKQ0K ICAgIHsNCiAgICAgICAgbV9ldmVudFR5cGUgPSB3eEVWVF9USU1FUjsNCg0KICAgICAgICBtX2lu dGVydmFsID0gaW50ZXJ2YWw7DQogICAgfQ0KDQoNCiAgICBpbnQgR2V0SW50ZXJ2YWwoKSBjb25z dCB7IHJldHVybiBtX2ludGVydmFsOyB9DQoNCnByaXZhdGU6DQogICAgaW50IG1faW50ZXJ2YWw7 DQoNCiAgICBwdWJsaWM6IHN0YXRpYyB3eENsYXNzSW5mbyBzbV9jbGFzc3d4VGltZXJFdmVudDsg d3hDbGFzc0luZm8gKkdldENsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZ3eFRpbWVyRXZlbnQ6 OnNtX2NsYXNzd3hUaW1lckV2ZW50OyB9DQp9Ow0KDQp0eXBlZGVmIHZvaWQgKHd4RXZ0SGFuZGxl cjo6Knd4VGltZXJFdmVudEZ1bmN0aW9uKSh3eFRpbWVyRXZlbnQmKTsNCiMgMTkwICIuLi8uLi9p bmNsdWRlL3d4L3RpbWVyLmgiDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eFN0 b3BXYXRjaA0Kew0KcHVibGljOg0KDQogICAgd3hTdG9wV2F0Y2goKSB7IFN0YXJ0KCk7IH0NCiAg ICB2b2lkIFN0YXJ0KGxvbmcgdCA9IDApOw0KICAgIHZvaWQgUGF1c2UoKSB7IG1fcGF1c2UgPSBH ZXRFbGFwc2VkVGltZSgpOyB9DQogICAgdm9pZCBSZXN1bWUoKSB7IFN0YXJ0KG1fcGF1c2UpOyB9 DQoNCg0KICAgIGxvbmcgVGltZSgpIGNvbnN0Ow0KDQpwcm90ZWN0ZWQ6DQoNCiAgICBsb25nIEdl dEVsYXBzZWRUaW1lKCkgY29uc3Q7DQoNCnByaXZhdGU6DQogICAgd3hMb25nTG9uZyBtX3QwOw0K ICAgIGxvbmcgbV9wYXVzZTsNCn07DQoNCg0KDQoNCnZvaWQgX19hdHRyaWJ1dGVfXygoZGxsaW1w b3J0KSkgd3hTdGFydFRpbWVyKCk7DQoNCg0KDQpsb25nIF9fYXR0cmlidXRlX18oKGRsbGltcG9y dCkpIHd4R2V0RWxhcHNlZFRpbWUoYm9vbCByZXNldFRpbWVyID0gMSk7DQoNCg0KDQoNCg0KDQpl eHRlcm4gbG9uZyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eEdldExvY2FsVGltZSgpOw0K DQoNCmV4dGVybiBsb25nIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4R2V0VVRDVGltZSgp Ow0KDQoNCmV4dGVybiB3eExvbmdMb25nIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4R2V0 TG9jYWxUaW1lTWlsbGlzKCk7DQojIDQ2ICIuLi8uLi9pbmNsdWRlL3d4L3d4LmgiIDINCiMgMSAi Li4vLi4vaW5jbHVkZS93eC9zZXR0aW5ncy5oIiAxDQojIDExMCAiLi4vLi4vaW5jbHVkZS93eC9z ZXR0aW5ncy5oIg0KIyAxICIuLi8uLi9pbmNsdWRlL3d4L21zdy9zZXR0aW5ncy5oIiAxDQojIDE2 ICIuLi8uLi9pbmNsdWRlL3d4L21zdy9zZXR0aW5ncy5oIg0KI3ByYWdtYSBpbnRlcmZhY2UgInNl dHRpbmdzLmgiDQoNCg0KDQoNCg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hT eXN0ZW1TZXR0aW5ncyA6IHB1YmxpYyB3eE9iamVjdA0Kew0KcHVibGljOg0KICAgIHd4U3lzdGVt U2V0dGluZ3MoKSB7IH0NCg0KDQogICAgc3RhdGljIHd4Q29sb3VyIEdldFN5c3RlbUNvbG91cihp bnQgaW5kZXgpOw0KDQoNCiAgICBzdGF0aWMgd3hGb250IEdldFN5c3RlbUZvbnQoaW50IGluZGV4 KTsNCg0KDQogICAgc3RhdGljIGludCBHZXRTeXN0ZW1NZXRyaWMoaW50IGluZGV4KTsNCn07DQoj IDExMSAiLi4vLi4vaW5jbHVkZS93eC9zZXR0aW5ncy5oIiAyDQojIDQ3ICIuLi8uLi9pbmNsdWRl L3d4L3d4LmgiIDINCiMgMSAiLi4vLi4vaW5jbHVkZS93eC9tc2dkbGcuaCIgMQ0KDQoNCg0KDQoj IDEgIi4uLy4uL2luY2x1ZGUvd3gvbXN3L21zZ2RsZy5oIiAxDQojIDE2ICIuLi8uLi9pbmNsdWRl L3d4L21zdy9tc2dkbGcuaCINCiNwcmFnbWEgaW50ZXJmYWNlICJtc2dkbGcuaCINCiMgMjYgIi4u Ly4uL2luY2x1ZGUvd3gvbXN3L21zZ2RsZy5oIg0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkg ZXh0ZXJuIGNvbnN0IGNoYXIqIHd4TWVzc2FnZUJveENhcHRpb25TdHI7DQoNCmNsYXNzIF9fYXR0 cmlidXRlX18oKGRsbGltcG9ydCkpIHd4TWVzc2FnZURpYWxvZzogcHVibGljIHd4RGlhbG9nDQp7 DQpwdWJsaWM6IHN0YXRpYyB3eENsYXNzSW5mbyBzbV9jbGFzc3d4TWVzc2FnZURpYWxvZzsgd3hD bGFzc0luZm8gKkdldENsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZ3eE1lc3NhZ2VEaWFsb2c6 OnNtX2NsYXNzd3hNZXNzYWdlRGlhbG9nOyB9DQpwcm90ZWN0ZWQ6DQogICAgd3hTdHJpbmcgbV9j YXB0aW9uOw0KICAgIHd4U3RyaW5nIG1fbWVzc2FnZTsNCiAgICBsb25nIG1fZGlhbG9nU3R5bGU7 DQogICAgd3hXaW5kb3cgKiBtX3BhcmVudDsNCnB1YmxpYzoNCiAgICB3eE1lc3NhZ2VEaWFsb2co d3hXaW5kb3cgKnBhcmVudCwgY29uc3Qgd3hTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IHd4U3RyaW5n JiBjYXB0aW9uID0gd3hNZXNzYWdlQm94Q2FwdGlvblN0ciwNCiAgICAgICAgbG9uZyBzdHlsZSA9 IDB4MDAwMDAwMDR8d3hDRU5UUkUsIGNvbnN0IHd4UG9pbnQmIHBvcyA9IHd4RGVmYXVsdFBvc2l0 aW9uKTsNCg0KICAgIGludCBTaG93TW9kYWwodm9pZCk7DQp9Ow0KDQoNCmludCBfX2F0dHJpYnV0 ZV9fKChkbGxpbXBvcnQpKSB3eE1lc3NhZ2VCb3goY29uc3Qgd3hTdHJpbmcmIG1lc3NhZ2UsIGNv bnN0IHd4U3RyaW5nJiBjYXB0aW9uID0gd3hNZXNzYWdlQm94Q2FwdGlvblN0ciwNCiAgbG9uZyBz dHlsZSA9IDB4MDAwMDAwMDR8d3hDRU5UUkUsDQogIHd4V2luZG93ICpwYXJlbnQgPSBfX251bGws IGludCB4ID0gLTEsIGludCB5ID0gLTEpOw0KIyA2ICIuLi8uLi9pbmNsdWRlL3d4L21zZ2RsZy5o IiAyDQojIDQ4ICIuLi8uLi9pbmNsdWRlL3d4L3d4LmgiIDINCg0KDQojIDEgIi4uLy4uL2luY2x1 ZGUvd3gvYm1wYnV0dG4uaCIgMQ0KDQoNCg0KDQojIDEgIi4uLy4uL2luY2x1ZGUvd3gvbXN3L2Jt cGJ1dHRuLmgiIDENCiMgMTYgIi4uLy4uL2luY2x1ZGUvd3gvbXN3L2JtcGJ1dHRuLmgiDQojcHJh Z21hIGludGVyZmFjZSAiYm1wYnV0dG4uaCINCg0KDQoNCg0KDQpfX2F0dHJpYnV0ZV9fKChkbGxp bXBvcnQpKSBleHRlcm4gY29uc3QgY2hhciogd3hCdXR0b25OYW1lU3RyOw0KDQoNCg0KY2xhc3Mg X19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hCaXRtYXBCdXR0b246IHB1YmxpYyB3eEJ1dHRv bg0Kew0KICAgIHB1YmxpYzogc3RhdGljIHd4Q2xhc3NJbmZvIHNtX2NsYXNzd3hCaXRtYXBCdXR0 b247IHd4Q2xhc3NJbmZvICpHZXRDbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmd3hCaXRtYXBC dXR0b246OnNtX2NsYXNzd3hCaXRtYXBCdXR0b247IH0NCg0KcHVibGljOg0KICAgIHd4Qml0bWFw QnV0dG9uKCkgeyBtX21hcmdpblggPSA0OyBtX21hcmdpblkgPSA0OyB9DQogICAgd3hCaXRtYXBC dXR0b24od3hXaW5kb3cgKnBhcmVudCwgd3hXaW5kb3dJRCBpZCwgY29uc3Qgd3hCaXRtYXAmIGJp dG1hcCwNCiAgICAgICAgICAgIGNvbnN0IHd4UG9pbnQmIHBvcyA9IHd4RGVmYXVsdFBvc2l0aW9u LA0KICAgICAgICAgICAgY29uc3Qgd3hTaXplJiBzaXplID0gd3hEZWZhdWx0U2l6ZSwgbG9uZyBz dHlsZSA9IDB4MDAwNCwNCiAgICAgICAgICAgIGNvbnN0IHd4VmFsaWRhdG9yJiB2YWxpZGF0b3Ig PSB3eERlZmF1bHRWYWxpZGF0b3IsDQogICAgICAgICAgICBjb25zdCB3eFN0cmluZyYgbmFtZSA9 IHd4QnV0dG9uTmFtZVN0cikNCiAgICB7DQogICAgICAgIENyZWF0ZShwYXJlbnQsIGlkLCBiaXRt YXAsIHBvcywgc2l6ZSwgc3R5bGUsIHZhbGlkYXRvciwgbmFtZSk7DQogICAgfQ0KDQogICAgYm9v bCBDcmVhdGUod3hXaW5kb3cgKnBhcmVudCwgd3hXaW5kb3dJRCBpZCwgY29uc3Qgd3hCaXRtYXAm IGJpdG1hcCwNCiAgICAgICAgICAgIGNvbnN0IHd4UG9pbnQmIHBvcyA9IHd4RGVmYXVsdFBvc2l0 aW9uLA0KICAgICAgICAgICAgY29uc3Qgd3hTaXplJiBzaXplID0gd3hEZWZhdWx0U2l6ZSwgbG9u ZyBzdHlsZSA9IDB4MDAwNCwNCiAgICAgICAgICAgIGNvbnN0IHd4VmFsaWRhdG9yJiB2YWxpZGF0 b3IgPSB3eERlZmF1bHRWYWxpZGF0b3IsDQogICAgICAgICAgICBjb25zdCB3eFN0cmluZyYgbmFt ZSA9IHd4QnV0dG9uTmFtZVN0cik7DQoNCiAgICB2aXJ0dWFsIHZvaWQgU2V0TGFiZWwoY29uc3Qg d3hCaXRtYXAmIGJpdG1hcCkNCiAgICB7DQogICAgICAgIFNldEJpdG1hcExhYmVsKGJpdG1hcCk7 DQogICAgfQ0KDQogICAgdmlydHVhbCB2b2lkIFNldEJpdG1hcExhYmVsKGNvbnN0IHd4Qml0bWFw JiBiaXRtYXApOw0KDQoNCg0KDQoNCiAgICB3eEJpdG1hcCYgR2V0Qml0bWFwTGFiZWwoKSBjb25z dCB7IHJldHVybiAod3hCaXRtYXAmKSBtX2J1dHRvbkJpdG1hcDsgfQ0KICAgIHd4Qml0bWFwJiBH ZXRCaXRtYXBTZWxlY3RlZCgpIGNvbnN0IHsgcmV0dXJuICh3eEJpdG1hcCYpIG1fYnV0dG9uQml0 bWFwU2VsZWN0ZWQ7IH0NCiAgICB3eEJpdG1hcCYgR2V0Qml0bWFwRm9jdXMoKSBjb25zdCB7IHJl dHVybiAod3hCaXRtYXAmKSBtX2J1dHRvbkJpdG1hcEZvY3VzOyB9DQogICAgd3hCaXRtYXAmIEdl dEJpdG1hcERpc2FibGVkKCkgY29uc3QgeyByZXR1cm4gKHd4Qml0bWFwJikgbV9idXR0b25CaXRt YXBEaXNhYmxlZDsgfQ0KDQogICAgdm9pZCBTZXRCaXRtYXBTZWxlY3RlZChjb25zdCB3eEJpdG1h cCYgc2VsKSB7IG1fYnV0dG9uQml0bWFwU2VsZWN0ZWQgPSBzZWw7IH07DQogICAgdm9pZCBTZXRC aXRtYXBGb2N1cyhjb25zdCB3eEJpdG1hcCYgZm9jdXMpIHsgbV9idXR0b25CaXRtYXBGb2N1cyA9 IGZvY3VzOyB9Ow0KICAgIHZvaWQgU2V0Qml0bWFwRGlzYWJsZWQoY29uc3Qgd3hCaXRtYXAmIGRp c2FibGVkKSB7IG1fYnV0dG9uQml0bWFwRGlzYWJsZWQgPSBkaXNhYmxlZDsgfTsNCg0KICAgIHZv aWQgU2V0TWFyZ2lucyhpbnQgeCwgaW50IHkpIHsgbV9tYXJnaW5YID0geDsgbV9tYXJnaW5ZID0g eTsgfQ0KICAgIGludCBHZXRNYXJnaW5YKCkgY29uc3QgeyByZXR1cm4gbV9tYXJnaW5YOyB9DQog ICAgaW50IEdldE1hcmdpblkoKSBjb25zdCB7IHJldHVybiBtX21hcmdpblk7IH0NCg0KDQogICAg dmlydHVhbCB2b2lkIFNldERlZmF1bHQoKTsNCiAgICB2aXJ0dWFsIGJvb2wgTVNXT25EcmF3KFdY RFJBV0lURU1TVFJVQ1QgKml0ZW0pOw0KICAgIHZpcnR1YWwgdm9pZCBEcmF3RmFjZSggV1hIREMg ZGMsIGludCBsZWZ0LCBpbnQgdG9wLCBpbnQgcmlnaHQsIGludCBib3R0b20sIGJvb2wgc2VsICk7 DQogICAgdmlydHVhbCB2b2lkIERyYXdCdXR0b25Gb2N1cyggV1hIREMgZGMsIGludCBsZWZ0LCBp bnQgdG9wLCBpbnQgcmlnaHQsIGludCBib3R0b20sIGJvb2wgc2VsICk7DQogICAgdmlydHVhbCB2 b2lkIERyYXdCdXR0b25EaXNhYmxlKCBXWEhEQyBkYywgaW50IGxlZnQsIGludCB0b3AsIGludCBy aWdodCwgaW50IGJvdHRvbSwgYm9vbCB3aXRoX21hcmcgKTsNCg0KcHJvdGVjdGVkOg0KICAgIHd4 Qml0bWFwIG1fYnV0dG9uQml0bWFwOw0KICAgIHd4Qml0bWFwIG1fYnV0dG9uQml0bWFwU2VsZWN0 ZWQ7DQogICAgd3hCaXRtYXAgbV9idXR0b25CaXRtYXBGb2N1czsNCiAgICB3eEJpdG1hcCBtX2J1 dHRvbkJpdG1hcERpc2FibGVkOw0KICAgIGludCBtX21hcmdpblg7DQogICAgaW50IG1fbWFyZ2lu WTsNCn07DQojIDYgIi4uLy4uL2luY2x1ZGUvd3gvYm1wYnV0dG4uaCIgMg0KIyA1MSAiLi4vLi4v aW5jbHVkZS93eC93eC5oIiAyDQojIDEgIi4uLy4uL2luY2x1ZGUvd3gvY2hlY2tib3guaCIgMQ0K DQoNCg0KDQojIDEgIi4uLy4uL2luY2x1ZGUvd3gvbXN3L2NoZWNrYm94LmgiIDENCiMgMTYgIi4u Ly4uL2luY2x1ZGUvd3gvbXN3L2NoZWNrYm94LmgiDQojcHJhZ21hIGludGVyZmFjZSAiY2hlY2ti b3guaCINCg0KDQoNCg0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgZXh0ZXJuIGNvbnN0IGNo YXIqIHd4Q2hlY2tCb3hOYW1lU3RyOw0KDQoNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9y dCkpIHd4Qml0bWFwOw0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hDaGVja0Jv eCA6IHB1YmxpYyB3eENvbnRyb2wNCnsNCnB1YmxpYzogc3RhdGljIHd4Q2xhc3NJbmZvIHNtX2Ns YXNzd3hDaGVja0JveDsgd3hDbGFzc0luZm8gKkdldENsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJu ICZ3eENoZWNrQm94OjpzbV9jbGFzc3d4Q2hlY2tCb3g7IH0NCg0KcHVibGljOg0KICAgIHd4Q2hl Y2tCb3goKSB7IH0NCiAgICB3eENoZWNrQm94KHd4V2luZG93ICpwYXJlbnQsIHd4V2luZG93SUQg aWQsIGNvbnN0IHd4U3RyaW5nJiBsYWJlbCwNCiAgICAgICAgICAgIGNvbnN0IHd4UG9pbnQmIHBv cyA9IHd4RGVmYXVsdFBvc2l0aW9uLA0KICAgICAgICAgICAgY29uc3Qgd3hTaXplJiBzaXplID0g d3hEZWZhdWx0U2l6ZSwgbG9uZyBzdHlsZSA9IDAsDQogICAgICAgICAgICBjb25zdCB3eFZhbGlk YXRvciYgdmFsaWRhdG9yID0gd3hEZWZhdWx0VmFsaWRhdG9yLA0KICAgICAgICAgICAgY29uc3Qg d3hTdHJpbmcmIG5hbWUgPSB3eENoZWNrQm94TmFtZVN0cikNCiAgICB7DQogICAgICAgIENyZWF0 ZShwYXJlbnQsIGlkLCBsYWJlbCwgcG9zLCBzaXplLCBzdHlsZSwgdmFsaWRhdG9yLCBuYW1lKTsN CiAgICB9DQoNCiAgICBib29sIENyZWF0ZSh3eFdpbmRvdyAqcGFyZW50LCB3eFdpbmRvd0lEIGlk LCBjb25zdCB3eFN0cmluZyYgbGFiZWwsDQogICAgICAgICAgICBjb25zdCB3eFBvaW50JiBwb3Mg PSB3eERlZmF1bHRQb3NpdGlvbiwNCiAgICAgICAgICAgIGNvbnN0IHd4U2l6ZSYgc2l6ZSA9IHd4 RGVmYXVsdFNpemUsIGxvbmcgc3R5bGUgPSAwLA0KICAgICAgICAgICAgY29uc3Qgd3hWYWxpZGF0 b3ImIHZhbGlkYXRvciA9IHd4RGVmYXVsdFZhbGlkYXRvciwNCiAgICAgICAgICAgIGNvbnN0IHd4 U3RyaW5nJiBuYW1lID0gd3hDaGVja0JveE5hbWVTdHIpOw0KDQogICAgdmlydHVhbCB2b2lkIFNl dFZhbHVlKGJvb2wgdmFsdWUpOw0KICAgIHZpcnR1YWwgYm9vbCBHZXRWYWx1ZSgpIGNvbnN0IDsN Cg0KICAgIHZpcnR1YWwgYm9vbCBNU1dDb21tYW5kKFdYVUlOVCBwYXJhbSwgV1hXT1JEIGlkKTsN CiAgICB2aXJ0dWFsIHZvaWQgU2V0TGFiZWwoY29uc3Qgd3hTdHJpbmcmIGxhYmVsKTsNCiAgICB2 aXJ0dWFsIHZvaWQgQ29tbWFuZCh3eENvbW1hbmRFdmVudCYgZXZlbnQpOw0KDQpwcm90ZWN0ZWQ6 DQogICAgdmlydHVhbCB3eFNpemUgRG9HZXRCZXN0U2l6ZSgpIGNvbnN0Ow0KfTsNCg0KY2xhc3Mg X19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hCaXRtYXBDaGVja0JveDogcHVibGljIHd4Q2hl Y2tCb3gNCnsNCnB1YmxpYzogc3RhdGljIHd4Q2xhc3NJbmZvIHNtX2NsYXNzd3hCaXRtYXBDaGVj a0JveDsgd3hDbGFzc0luZm8gKkdldENsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZ3eEJpdG1h cENoZWNrQm94OjpzbV9jbGFzc3d4Qml0bWFwQ2hlY2tCb3g7IH0NCg0KcHVibGljOg0KICAgIGlu dCBjaGVja1dpZHRoIDsNCiAgICBpbnQgY2hlY2tIZWlnaHQgOw0KDQogICAgd3hCaXRtYXBDaGVj a0JveCgpIHsgY2hlY2tXaWR0aCA9IC0xOyBjaGVja0hlaWdodCA9IC0xOyB9DQogICAgd3hCaXRt YXBDaGVja0JveCh3eFdpbmRvdyAqcGFyZW50LCB3eFdpbmRvd0lEIGlkLCBjb25zdCB3eEJpdG1h cCAqbGFiZWwsDQogICAgICAgICAgICBjb25zdCB3eFBvaW50JiBwb3MgPSB3eERlZmF1bHRQb3Np dGlvbiwNCiAgICAgICAgICAgIGNvbnN0IHd4U2l6ZSYgc2l6ZSA9IHd4RGVmYXVsdFNpemUsIGxv bmcgc3R5bGUgPSAwLA0KICAgICAgICAgICAgY29uc3Qgd3hWYWxpZGF0b3ImIHZhbGlkYXRvciA9 IHd4RGVmYXVsdFZhbGlkYXRvciwNCiAgICAgICAgICAgIGNvbnN0IHd4U3RyaW5nJiBuYW1lID0g d3hDaGVja0JveE5hbWVTdHIpDQogICAgew0KICAgICAgICBDcmVhdGUocGFyZW50LCBpZCwgbGFi ZWwsIHBvcywgc2l6ZSwgc3R5bGUsIHZhbGlkYXRvciwgbmFtZSk7DQogICAgfQ0KDQogICAgYm9v bCBDcmVhdGUod3hXaW5kb3cgKnBhcmVudCwgd3hXaW5kb3dJRCBpZCwgY29uc3Qgd3hCaXRtYXAg KmJpdG1hcCwNCiAgICAgICAgICAgIGNvbnN0IHd4UG9pbnQmIHBvcyA9IHd4RGVmYXVsdFBvc2l0 aW9uLA0KICAgICAgICAgICAgY29uc3Qgd3hTaXplJiBzaXplID0gd3hEZWZhdWx0U2l6ZSwgbG9u ZyBzdHlsZSA9IDAsDQogICAgICAgICAgICBjb25zdCB3eFZhbGlkYXRvciYgdmFsaWRhdG9yID0g d3hEZWZhdWx0VmFsaWRhdG9yLA0KICAgICAgICAgICAgY29uc3Qgd3hTdHJpbmcmIG5hbWUgPSB3 eENoZWNrQm94TmFtZVN0cik7DQoNCiAgICB2aXJ0dWFsIHZvaWQgU2V0TGFiZWwoY29uc3Qgd3hC aXRtYXAmIGJpdG1hcCk7DQp9Ow0KIyA2ICIuLi8uLi9pbmNsdWRlL3d4L2NoZWNrYm94LmgiIDIN CiMgNTIgIi4uLy4uL2luY2x1ZGUvd3gvd3guaCIgMg0KIyAxICIuLi8uLi9pbmNsdWRlL3d4L2No b2ljZS5oIiAxDQojIDIwICIuLi8uLi9pbmNsdWRlL3d4L2Nob2ljZS5oIg0KI3ByYWdtYSBpbnRl cmZhY2UgImNob2ljZWJhc2UuaCINCg0KDQojIDEgIi4uLy4uL2luY2x1ZGUvd3gvY3RybHN1Yi5o IiAxDQojIDE2ICIuLi8uLi9pbmNsdWRlL3d4L2N0cmxzdWIuaCINCiNwcmFnbWEgaW50ZXJmYWNl ICJjb250cm9sd2l0aGl0ZW1zLmgiDQojIDI4ICIuLi8uLi9pbmNsdWRlL3d4L2N0cmxzdWIuaCIN CmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4Q29udHJvbFdpdGhJdGVtcyA6IHB1 YmxpYyB3eENvbnRyb2wNCnsNCnB1YmxpYzoNCiAgICB3eENvbnRyb2xXaXRoSXRlbXMoKSB7IG1f Y2xpZW50RGF0YUl0ZW1zVHlwZSA9IENsaWVudERhdGFfTm9uZTsgfQ0KDQoNCg0KDQogICAgdm9p ZCBBcHBlbmQoY29uc3Qgd3hTdHJpbmcmIGl0ZW0pDQogICAgICAgIHsgRG9BcHBlbmQoaXRlbSk7 IH0NCiAgICB2b2lkIEFwcGVuZChjb25zdCB3eFN0cmluZyYgaXRlbSwgdm9pZCAqY2xpZW50RGF0 YSkNCiAgICAgICAgeyBpbnQgbiA9IERvQXBwZW5kKGl0ZW0pOyBTZXRDbGllbnREYXRhKG4sIGNs aWVudERhdGEpOyB9DQogICAgdm9pZCBBcHBlbmQoY29uc3Qgd3hTdHJpbmcmIGl0ZW0sIHd4Q2xp ZW50RGF0YSAqY2xpZW50RGF0YSkNCiAgICAgICAgeyBpbnQgbiA9IERvQXBwZW5kKGl0ZW0pOyBT ZXRDbGllbnRPYmplY3QobiwgY2xpZW50RGF0YSk7IH0NCg0KDQoNCg0KICAgIHZpcnR1YWwgdm9p ZCBDbGVhcigpID0gMDsNCiAgICB2aXJ0dWFsIHZvaWQgRGVsZXRlKGludCBuKSA9IDA7DQoNCg0K DQoNCiAgICB2aXJ0dWFsIGludCBHZXRDb3VudCgpIGNvbnN0ID0gMDsNCiAgICB2aXJ0dWFsIHd4 U3RyaW5nIEdldFN0cmluZyhpbnQgbikgY29uc3QgPSAwOw0KICAgIHZpcnR1YWwgdm9pZCBTZXRT dHJpbmcoaW50IG4sIGNvbnN0IHd4U3RyaW5nJiBzKSA9IDA7DQogICAgdmlydHVhbCBpbnQgRmlu ZFN0cmluZyhjb25zdCB3eFN0cmluZyYgcykgY29uc3QgPSAwOw0KDQoNCg0KDQogICAgdmlydHVh bCB2b2lkIFNlbGVjdChpbnQgbikgPSAwOw0KICAgIHZpcnR1YWwgaW50IEdldFNlbGVjdGlvbigp IGNvbnN0ID0gMDsNCg0KICAgIHd4U3RyaW5nIEdldFN0cmluZ1NlbGVjdGlvbigpIGNvbnN0Ow0K DQoNCg0KDQoNCiAgICB2b2lkIFNldENsaWVudERhdGEoaW50IG4sIHZvaWQqIGNsaWVudERhdGEp Ow0KICAgIHZvaWQqIEdldENsaWVudERhdGEoaW50IG4pIGNvbnN0Ow0KDQogICAgdm9pZCBTZXRD bGllbnRPYmplY3QoaW50IG4sIHd4Q2xpZW50RGF0YSogY2xpZW50RGF0YSk7DQogICAgd3hDbGll bnREYXRhKiBHZXRDbGllbnRPYmplY3QoaW50IG4pIGNvbnN0Ow0KDQogICAgYm9vbCBIYXNDbGll bnRPYmplY3REYXRhKCkgY29uc3QNCiAgICAgICAgeyByZXR1cm4gbV9jbGllbnREYXRhSXRlbXNU eXBlID09IENsaWVudERhdGFfT2JqZWN0OyB9DQogICAgYm9vbCBIYXNDbGllbnRVbnR5cGVkRGF0 YSgpIGNvbnN0DQogICAgICAgIHsgcmV0dXJuIG1fY2xpZW50RGF0YUl0ZW1zVHlwZSA9PSBDbGll bnREYXRhX1ZvaWQ7IH0NCg0KDQoNCiAgICBpbnQgTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gR2V0 Q291bnQoKTsgfQ0KDQpwcm90ZWN0ZWQ6DQogICAgdmlydHVhbCBpbnQgRG9BcHBlbmQoY29uc3Qg d3hTdHJpbmcmIGl0ZW0pID0gMDsNCg0KICAgIHZpcnR1YWwgdm9pZCBEb1NldEl0ZW1DbGllbnRE YXRhKGludCBuLCB2b2lkKiBjbGllbnREYXRhKSA9IDA7DQogICAgdmlydHVhbCB2b2lkKiBEb0dl dEl0ZW1DbGllbnREYXRhKGludCBuKSBjb25zdCA9IDA7DQogICAgdmlydHVhbCB2b2lkIERvU2V0 SXRlbUNsaWVudE9iamVjdChpbnQgbiwgd3hDbGllbnREYXRhKiBjbGllbnREYXRhKSA9IDA7DQog ICAgdmlydHVhbCB3eENsaWVudERhdGEqIERvR2V0SXRlbUNsaWVudE9iamVjdChpbnQgbikgY29u c3QgPSAwOw0KDQoNCiAgICB3eENsaWVudERhdGFUeXBlIG1fY2xpZW50RGF0YUl0ZW1zVHlwZTsN Cn07DQojIDI0ICIuLi8uLi9pbmNsdWRlL3d4L2Nob2ljZS5oIiAyDQoNCg0KDQoNCg0KX19hdHRy aWJ1dGVfXygoZGxsaW1wb3J0KSkgZXh0ZXJuIGNvbnN0IGNoYXIqIHd4Q2hvaWNlTmFtZVN0cjsN Cg0KDQoNCg0KDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eENob2ljZUJhc2Ug OiBwdWJsaWMgd3hDb250cm9sV2l0aEl0ZW1zDQp7DQpwdWJsaWM6DQoNCg0KDQogICAgdmlydHVh bCB2b2lkIFNldFNlbGVjdGlvbihpbnQgbikgPSAwOw0KICAgIHZpcnR1YWwgYm9vbCBTZXRTdHJp bmdTZWxlY3Rpb24oY29uc3Qgd3hTdHJpbmcmIHMpOw0KDQoNCiAgICB2aXJ0dWFsIHZvaWQgU2Vs ZWN0KGludCBuKSB7IFNldFNlbGVjdGlvbihuKTsgfQ0KDQoNCg0KICAgIHZpcnR1YWwgdm9pZCBT ZXRDb2x1bW5zKGludCA9IDEgKSB7IH0NCiAgICB2aXJ0dWFsIGludCBHZXRDb2x1bW5zKCkgY29u c3QgeyByZXR1cm4gMSA7IH0NCg0KDQogICAgdm9pZCBDb21tYW5kKHd4Q29tbWFuZEV2ZW50JiBl dmVudCk7DQoNCn07DQoNCg0KDQoNCg0KDQojIDEgIi4uLy4uL2luY2x1ZGUvd3gvbXN3L2Nob2lj ZS5oIiAxDQojIDE2ICIuLi8uLi9pbmNsdWRlL3d4L21zdy9jaG9pY2UuaCINCiNwcmFnbWEgaW50 ZXJmYWNlICJjaG9pY2UuaCINCg0KDQoNCg0KDQoNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGlt cG9ydCkpIHd4Q2hvaWNlIDogcHVibGljIHd4Q2hvaWNlQmFzZQ0Kew0KICAgIHB1YmxpYzogc3Rh dGljIHd4Q2xhc3NJbmZvIHNtX2NsYXNzd3hDaG9pY2U7IHd4Q2xhc3NJbmZvICpHZXRDbGFzc0lu Zm8oKSBjb25zdCB7IHJldHVybiAmd3hDaG9pY2U6OnNtX2NsYXNzd3hDaG9pY2U7IH0NCg0KcHVi bGljOg0KDQogICAgd3hDaG9pY2UoKSB7IH0NCiAgICB2aXJ0dWFsIH53eENob2ljZSgpOw0KDQog ICAgd3hDaG9pY2Uod3hXaW5kb3cgKnBhcmVudCwNCiAgICAgICAgICAgICB3eFdpbmRvd0lEIGlk LA0KICAgICAgICAgICAgIGNvbnN0IHd4UG9pbnQmIHBvcyA9IHd4RGVmYXVsdFBvc2l0aW9uLA0K ICAgICAgICAgICAgIGNvbnN0IHd4U2l6ZSYgc2l6ZSA9IHd4RGVmYXVsdFNpemUsDQogICAgICAg ICAgICAgaW50IG4gPSAwLCBjb25zdCB3eFN0cmluZyBjaG9pY2VzW10gPSBfX251bGwsDQogICAg ICAgICAgICAgbG9uZyBzdHlsZSA9IDAsDQogICAgICAgICAgICAgY29uc3Qgd3hWYWxpZGF0b3Im IHZhbGlkYXRvciA9IHd4RGVmYXVsdFZhbGlkYXRvciwNCiAgICAgICAgICAgICBjb25zdCB3eFN0 cmluZyYgbmFtZSA9IHd4Q2hvaWNlTmFtZVN0cikNCiAgICB7DQogICAgICAgIENyZWF0ZShwYXJl bnQsIGlkLCBwb3MsIHNpemUsIG4sIGNob2ljZXMsIHN0eWxlLCB2YWxpZGF0b3IsIG5hbWUpOw0K ICAgIH0NCg0KICAgIGJvb2wgQ3JlYXRlKHd4V2luZG93ICpwYXJlbnQsDQogICAgICAgICAgICAg ICAgd3hXaW5kb3dJRCBpZCwNCiAgICAgICAgICAgICAgICBjb25zdCB3eFBvaW50JiBwb3MgPSB3 eERlZmF1bHRQb3NpdGlvbiwNCiAgICAgICAgICAgICAgICBjb25zdCB3eFNpemUmIHNpemUgPSB3 eERlZmF1bHRTaXplLA0KICAgICAgICAgICAgICAgIGludCBuID0gMCwgY29uc3Qgd3hTdHJpbmcg Y2hvaWNlc1tdID0gX19udWxsLA0KICAgICAgICAgICAgICAgIGxvbmcgc3R5bGUgPSAwLA0KICAg ICAgICAgICAgICAgIGNvbnN0IHd4VmFsaWRhdG9yJiB2YWxpZGF0b3IgPSB3eERlZmF1bHRWYWxp ZGF0b3IsDQogICAgICAgICAgICAgICAgY29uc3Qgd3hTdHJpbmcmIG5hbWUgPSB3eENob2ljZU5h bWVTdHIpOw0KDQoNCiAgICB2aXJ0dWFsIGludCBEb0FwcGVuZChjb25zdCB3eFN0cmluZyYgaXRl bSk7DQogICAgdmlydHVhbCB2b2lkIERlbGV0ZShpbnQgbik7DQogICAgdmlydHVhbCB2b2lkIENs ZWFyKCk7DQoNCiAgICB2aXJ0dWFsIGludCBHZXRDb3VudCgpIGNvbnN0Ow0KICAgIHZpcnR1YWwg aW50IEdldFNlbGVjdGlvbigpIGNvbnN0Ow0KICAgIHZpcnR1YWwgdm9pZCBTZXRTZWxlY3Rpb24o aW50IG4pOw0KDQogICAgdmlydHVhbCBpbnQgRmluZFN0cmluZyhjb25zdCB3eFN0cmluZyYgcykg Y29uc3Q7DQogICAgdmlydHVhbCB3eFN0cmluZyBHZXRTdHJpbmcoaW50IG4pIGNvbnN0Ow0KICAg IHZpcnR1YWwgdm9pZCBTZXRTdHJpbmcoaW50IG4sIGNvbnN0IHd4U3RyaW5nJiBzKTsNCg0KDQog ICAgdmlydHVhbCBib29sIE1TV0NvbW1hbmQoV1hVSU5UIHBhcmFtLCBXWFdPUkQgaWQpOw0KICAg IGxvbmcgTVNXV2luZG93UHJvYyhXWFVJTlQgbk1zZywgV1hXUEFSQU0gd1BhcmFtLCBXWExQQVJB TSBsUGFyYW0pOw0KICAgIHZpcnR1YWwgV1hIQlJVU0ggT25DdGxDb2xvcihXWEhEQyBwREMsIFdY SFdORCBwV25kLCBXWFVJTlQgbkN0bENvbG9yLA0KICAgICAgICAgICAgV1hVSU5UIG1lc3NhZ2Us IFdYV1BBUkFNIHdQYXJhbSwgV1hMUEFSQU0gbFBhcmFtKTsNCg0KcHJvdGVjdGVkOg0KICAgIHZp cnR1YWwgdm9pZCBEb1NldEl0ZW1DbGllbnREYXRhKCBpbnQgbiwgdm9pZCogY2xpZW50RGF0YSAp Ow0KICAgIHZpcnR1YWwgdm9pZCogRG9HZXRJdGVtQ2xpZW50RGF0YSggaW50IG4gKSBjb25zdDsN CiAgICB2aXJ0dWFsIHZvaWQgRG9TZXRJdGVtQ2xpZW50T2JqZWN0KCBpbnQgbiwgd3hDbGllbnRE YXRhKiBjbGllbnREYXRhICk7DQogICAgdmlydHVhbCB3eENsaWVudERhdGEqIERvR2V0SXRlbUNs aWVudE9iamVjdCggaW50IG4gKSBjb25zdDsNCg0KDQogICAgdmlydHVhbCB3eFNpemUgRG9HZXRC ZXN0U2l6ZSgpIGNvbnN0Ow0KICAgIHZpcnR1YWwgdm9pZCBEb1NldFNpemUoaW50IHgsIGludCB5 LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNpemVGbGFncyA9ICgweDAwMDF8MHgwMDAyKSk7 DQoNCg0KICAgIHZvaWQgRnJlZSgpOw0KfTsNCiMgNjMgIi4uLy4uL2luY2x1ZGUvd3gvY2hvaWNl LmgiIDINCiMgNTMgIi4uLy4uL2luY2x1ZGUvd3gvd3guaCIgMg0KIyAxICIuLi8uLi9pbmNsdWRl L3d4L3Njcm9sYmFyLmgiIDENCg0KDQoNCg0KIyAxICIuLi8uLi9pbmNsdWRlL3d4L21zdy9zY3Jv bGJhci5oIiAxDQojIDE2ICIuLi8uLi9pbmNsdWRlL3d4L21zdy9zY3JvbGJhci5oIg0KI3ByYWdt YSBpbnRlcmZhY2UgInNjcm9sYmFyLmgiDQoNCg0KDQoNCl9fYXR0cmlidXRlX18oKGRsbGltcG9y dCkpIGV4dGVybiBjb25zdCBjaGFyKiB3eFNjcm9sbEJhck5hbWVTdHI7DQoNCg0KY2xhc3MgX19h dHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hTY3JvbGxCYXI6IHB1YmxpYyB3eENvbnRyb2wNCnsN CiAgICBwdWJsaWM6IHN0YXRpYyB3eENsYXNzSW5mbyBzbV9jbGFzc3d4U2Nyb2xsQmFyOyB3eENs YXNzSW5mbyAqR2V0Q2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnd4U2Nyb2xsQmFyOjpzbV9j bGFzc3d4U2Nyb2xsQmFyOyB9DQoNCnB1YmxpYzoNCiAgICB3eFNjcm9sbEJhcigpIHsgbV9wYWdl U2l6ZSA9IDA7IG1fdmlld1NpemUgPSAwOyBtX29iamVjdFNpemUgPSAwOyB9DQogICAgfnd4U2Ny b2xsQmFyKCk7DQoNCiAgICB3eFNjcm9sbEJhcih3eFdpbmRvdyAqcGFyZW50LCB3eFdpbmRvd0lE IGlkLA0KICAgICAgICAgICAgY29uc3Qgd3hQb2ludCYgcG9zID0gd3hEZWZhdWx0UG9zaXRpb24s DQogICAgICAgICAgICBjb25zdCB3eFNpemUmIHNpemUgPSB3eERlZmF1bHRTaXplLA0KICAgICAg ICAgICAgbG9uZyBzdHlsZSA9IHd4SE9SSVpPTlRBTCwNCiAgICAgICAgICAgIGNvbnN0IHd4VmFs aWRhdG9yJiB2YWxpZGF0b3IgPSB3eERlZmF1bHRWYWxpZGF0b3IsDQogICAgICAgICAgICBjb25z dCB3eFN0cmluZyYgbmFtZSA9IHd4U2Nyb2xsQmFyTmFtZVN0cikNCiAgICB7DQogICAgICAgIENy ZWF0ZShwYXJlbnQsIGlkLCBwb3MsIHNpemUsIHN0eWxlLCB2YWxpZGF0b3IsIG5hbWUpOw0KICAg IH0NCiAgICBib29sIENyZWF0ZSh3eFdpbmRvdyAqcGFyZW50LCB3eFdpbmRvd0lEIGlkLA0KICAg ICAgICAgICAgY29uc3Qgd3hQb2ludCYgcG9zID0gd3hEZWZhdWx0UG9zaXRpb24sDQogICAgICAg ICAgICBjb25zdCB3eFNpemUmIHNpemUgPSB3eERlZmF1bHRTaXplLA0KICAgICAgICAgICAgbG9u ZyBzdHlsZSA9IHd4SE9SSVpPTlRBTCwNCiAgICAgICAgICAgIGNvbnN0IHd4VmFsaWRhdG9yJiB2 YWxpZGF0b3IgPSB3eERlZmF1bHRWYWxpZGF0b3IsDQogICAgICAgICAgICBjb25zdCB3eFN0cmlu ZyYgbmFtZSA9IHd4U2Nyb2xsQmFyTmFtZVN0cik7DQoNCiAgICBpbnQgR2V0VGh1bWJQb3NpdGlv bigpIGNvbnN0IDsNCiAgICBpbnQgR2V0VGh1bWJTaXplKCkgY29uc3QgeyByZXR1cm4gbV9wYWdl U2l6ZTsgfQ0KICAgIGludCBHZXRQYWdlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmlld1NpemU7 IH0NCiAgICBpbnQgR2V0UmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX29iamVjdFNpemU7IH0NCg0K ICAgIHZpcnR1YWwgdm9pZCBTZXRUaHVtYlBvc2l0aW9uKGludCB2aWV3U3RhcnQpOw0KICAgIHZp cnR1YWwgdm9pZCBTZXRTY3JvbGxiYXIoaW50IHBvc2l0aW9uLCBpbnQgdGh1bWJTaXplLCBpbnQg cmFuZ2UsIGludCBwYWdlU2l6ZSwNCiAgICAgICAgICAgIGJvb2wgcmVmcmVzaCA9IDEpOw0KIyA3 MSAiLi4vLi4vaW5jbHVkZS93eC9tc3cvc2Nyb2xiYXIuaCINCiAgICB2b2lkIENvbW1hbmQod3hD b21tYW5kRXZlbnQmIGV2ZW50KTsNCiAgICB2aXJ0dWFsIFdYSEJSVVNIIE9uQ3RsQ29sb3IoV1hI REMgcERDLCBXWEhXTkQgcFduZCwgV1hVSU5UIG5DdGxDb2xvciwNCiAgICAgICAgICAgIFdYVUlO VCBtZXNzYWdlLCBXWFdQQVJBTSB3UGFyYW0sIFdYTFBBUkFNIGxQYXJhbSk7DQogICAgdmlydHVh bCBib29sIE1TV09uU2Nyb2xsKGludCBvcmllbnRhdGlvbiwgV1hXT1JEIHdQYXJhbSwNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgV1hXT1JEIHBvcywgV1hIV05EIGNvbnRyb2wpOw0KDQoN Cg0KDQoNCg0KcHJvdGVjdGVkOg0KICAgIGludCBtX3BhZ2VTaXplOw0KICAgIGludCBtX3ZpZXdT aXplOw0KICAgIGludCBtX29iamVjdFNpemU7DQoNCiAgICBwcml2YXRlOiBzdGF0aWMgY29uc3Qg d3hFdmVudFRhYmxlRW50cnkgc21fZXZlbnRUYWJsZUVudHJpZXNbXTtwcm90ZWN0ZWQ6IHN0YXRp YyBjb25zdCB3eEV2ZW50VGFibGUgc21fZXZlbnRUYWJsZTsgdmlydHVhbCBjb25zdCB3eEV2ZW50 VGFibGUqIEdldEV2ZW50VGFibGUoKSBjb25zdDsNCn07DQojIDYgIi4uLy4uL2luY2x1ZGUvd3gv c2Nyb2xiYXIuaCIgMg0KIyA1NCAiLi4vLi4vaW5jbHVkZS93eC93eC5oIiAyDQojIDEgIi4uLy4u L2luY2x1ZGUvd3gvc3RhdHRleHQuaCIgMQ0KDQoNCg0KDQojIDEgIi4uLy4uL2luY2x1ZGUvd3gv bXN3L3N0YXR0ZXh0LmgiIDENCiMgMTYgIi4uLy4uL2luY2x1ZGUvd3gvbXN3L3N0YXR0ZXh0Lmgi DQojcHJhZ21hIGludGVyZmFjZSAic3RhdHRleHQuaCINCg0KDQoNCg0KX19hdHRyaWJ1dGVfXygo ZGxsaW1wb3J0KSkgZXh0ZXJuIGNvbnN0IGNoYXIqIHd4U3RhdGljVGV4dE5hbWVTdHI7DQoNCmNs YXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4U3RhdGljVGV4dCA6IHB1YmxpYyB3eENv bnRyb2wNCnsNCnB1YmxpYzogc3RhdGljIHd4Q2xhc3NJbmZvIHNtX2NsYXNzd3hTdGF0aWNUZXh0 OyB3eENsYXNzSW5mbyAqR2V0Q2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnd4U3RhdGljVGV4 dDo6c21fY2xhc3N3eFN0YXRpY1RleHQ7IH0NCg0KcHVibGljOg0KICAgIHd4U3RhdGljVGV4dCgp IHsgfQ0KDQogICAgd3hTdGF0aWNUZXh0KHd4V2luZG93ICpwYXJlbnQsIHd4V2luZG93SUQgaWQs DQogICAgICAgIGNvbnN0IHd4U3RyaW5nJiBsYWJlbCwNCiAgICAgICAgY29uc3Qgd3hQb2ludCYg cG9zID0gd3hEZWZhdWx0UG9zaXRpb24sDQogICAgICAgIGNvbnN0IHd4U2l6ZSYgc2l6ZSA9IHd4 RGVmYXVsdFNpemUsDQogICAgICAgIGxvbmcgc3R5bGUgPSAwLA0KICAgICAgICBjb25zdCB3eFN0 cmluZyYgbmFtZSA9IHd4U3RhdGljVGV4dE5hbWVTdHIpDQogICAgew0KICAgICAgICBDcmVhdGUo cGFyZW50LCBpZCwgbGFiZWwsIHBvcywgc2l6ZSwgc3R5bGUsIG5hbWUpOw0KICAgIH0NCg0KICAg IGJvb2wgQ3JlYXRlKHd4V2luZG93ICpwYXJlbnQsIHd4V2luZG93SUQgaWQsDQogICAgICAgIGNv bnN0IHd4U3RyaW5nJiBsYWJlbCwNCiAgICAgICAgY29uc3Qgd3hQb2ludCYgcG9zID0gd3hEZWZh dWx0UG9zaXRpb24sDQogICAgICAgIGNvbnN0IHd4U2l6ZSYgc2l6ZSA9IHd4RGVmYXVsdFNpemUs DQogICAgICAgIGxvbmcgc3R5bGUgPSAwLA0KICAgICAgICBjb25zdCB3eFN0cmluZyYgbmFtZSA9 IHd4U3RhdGljVGV4dE5hbWVTdHIpOw0KDQoNCiAgICB2b2lkIFNldExhYmVsKGNvbnN0IHd4U3Ry aW5nJiBsYWJlbCk7DQoNCg0KICAgIHZpcnR1YWwgYm9vbCBBY2NlcHRzRm9jdXMoKSBjb25zdCB7 IHJldHVybiAwOyB9DQoNCg0KICAgIHZpcnR1YWwgbG9uZyBNU1dXaW5kb3dQcm9jKFdYVUlOVCBu TXNnLCBXWFdQQVJBTSB3UGFyYW0sIFdYTFBBUkFNIGxQYXJhbSk7DQoNCnByb3RlY3RlZDoNCiAg ICB2aXJ0dWFsIHd4U2l6ZSBEb0dldEJlc3RTaXplKCkgY29uc3Q7DQp9Ow0KIyA2ICIuLi8uLi9p bmNsdWRlL3d4L3N0YXR0ZXh0LmgiIDINCiMgNTUgIi4uLy4uL2luY2x1ZGUvd3gvd3guaCIgMg0K IyAxICIuLi8uLi9pbmNsdWRlL3d4L3N0YXRibXAuaCIgMQ0KDQoNCg0KDQojIDEgIi4uLy4uL2lu Y2x1ZGUvd3gvbXN3L3N0YXRibXAuaCIgMQ0KIyAxNiAiLi4vLi4vaW5jbHVkZS93eC9tc3cvc3Rh dGJtcC5oIg0KI3ByYWdtYSBpbnRlcmZhY2UgInN0YXRibXAuaCINCg0KDQoNCg0KDQoNCl9fYXR0 cmlidXRlX18oKGRsbGltcG9ydCkpIGV4dGVybiBjb25zdCBjaGFyKiB3eFN0YXRpY0JpdG1hcE5h bWVTdHI7DQoNCg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hTdGF0aWNCaXRt YXAgOiBwdWJsaWMgd3hDb250cm9sDQp7DQogICAgcHVibGljOiBzdGF0aWMgd3hDbGFzc0luZm8g c21fY2xhc3N3eFN0YXRpY0JpdG1hcDsgd3hDbGFzc0luZm8gKkdldENsYXNzSW5mbygpIGNvbnN0 IHsgcmV0dXJuICZ3eFN0YXRpY0JpdG1hcDo6c21fY2xhc3N3eFN0YXRpY0JpdG1hcDsgfQ0KDQpw dWJsaWM6DQogICAgd3hTdGF0aWNCaXRtYXAoKSB7IEluaXQoKTsgfQ0KDQogICAgd3hTdGF0aWNC aXRtYXAod3hXaW5kb3cgKnBhcmVudCwNCiAgICAgICAgICAgICAgICAgICB3eFdpbmRvd0lEIGlk LA0KICAgICAgICAgICAgICAgICAgIGNvbnN0IHd4R0RJSW1hZ2UmIGxhYmVsLA0KICAgICAgICAg ICAgICAgICAgIGNvbnN0IHd4UG9pbnQmIHBvcyA9IHd4RGVmYXVsdFBvc2l0aW9uLA0KICAgICAg ICAgICAgICAgICAgIGNvbnN0IHd4U2l6ZSYgc2l6ZSA9IHd4RGVmYXVsdFNpemUsDQogICAgICAg ICAgICAgICAgICAgbG9uZyBzdHlsZSA9IDAsDQogICAgICAgICAgICAgICAgICAgY29uc3Qgd3hT dHJpbmcmIG5hbWUgPSB3eFN0YXRpY0JpdG1hcE5hbWVTdHIpDQogICAgew0KICAgICAgICBDcmVh dGUocGFyZW50LCBpZCwgbGFiZWwsIHBvcywgc2l6ZSwgc3R5bGUsIG5hbWUpOw0KICAgIH0NCg0K ICAgIGJvb2wgQ3JlYXRlKHd4V2luZG93ICpwYXJlbnQsDQogICAgICAgICAgICAgICAgd3hXaW5k b3dJRCBpZCwNCiAgICAgICAgICAgICAgICBjb25zdCB3eEdESUltYWdlJiBsYWJlbCwNCiAgICAg ICAgICAgICAgICBjb25zdCB3eFBvaW50JiBwb3MgPSB3eERlZmF1bHRQb3NpdGlvbiwNCiAgICAg ICAgICAgICAgICBjb25zdCB3eFNpemUmIHNpemUgPSB3eERlZmF1bHRTaXplLA0KICAgICAgICAg ICAgICAgIGxvbmcgc3R5bGUgPSAwLA0KICAgICAgICAgICAgICAgIGNvbnN0IHd4U3RyaW5nJiBu YW1lID0gd3hTdGF0aWNCaXRtYXBOYW1lU3RyKTsNCg0KICAgIHZpcnR1YWwgfnd4U3RhdGljQml0 bWFwKCkgeyBGcmVlKCk7IH0NCg0KICAgIHZvaWQgU2V0SWNvbihjb25zdCB3eEljb24mIGljb24p IHsgU2V0SW1hZ2UoJmljb24pOyB9DQogICAgdm9pZCBTZXRCaXRtYXAoY29uc3Qgd3hCaXRtYXAm IGJpdG1hcCkgeyBTZXRJbWFnZSgmYml0bWFwKTsgfQ0KDQoNCg0KICAgIGNvbnN0IHd4SWNvbiYg R2V0SWNvbigpIGNvbnN0DQogICAgICAgIHsgaWYgKCAhKG1faXNJY29uKSApIHd4T25Bc3NlcnQo Ii4uLy4uL2luY2x1ZGUvd3gvbXN3L3N0YXRibXAuaCIsIDYwKTsgcmV0dXJuICood3hJY29uICop bV9pbWFnZTsgfQ0KICAgIGNvbnN0IHd4Qml0bWFwJiBHZXRCaXRtYXAoKSBjb25zdA0KICAgICAg ICB7IGlmICggISghbV9pc0ljb24pICkgd3hPbkFzc2VydCgiLi4vLi4vaW5jbHVkZS93eC9tc3cv c3RhdGJtcC5oIiwgNjIpOyByZXR1cm4gKih3eEJpdG1hcCAqKW1faW1hZ2U7IH0NCg0KDQogICAg dmlydHVhbCBib29sIEFjY2VwdHNGb2N1cygpIGNvbnN0IHsgcmV0dXJuIDA7IH0NCg0KDQoNCg0K DQogICAgdmlydHVhbCBsb25nIE1TV1dpbmRvd1Byb2MoV1hVSU5UIG5Nc2csIFdYV1BBUkFNIHdQ YXJhbSwgV1hMUEFSQU0gbFBhcmFtKTsNCg0KcHJvdGVjdGVkOg0KICAgIHZpcnR1YWwgd3hTaXpl IERvR2V0QmVzdFNpemUoKSBjb25zdDsNCg0KICAgIHZvaWQgSW5pdCgpIHsgbV9pc0ljb24gPSAx OyBtX2ltYWdlID0gX19udWxsOyB9DQogICAgdm9pZCBGcmVlKCk7DQoNCg0KICAgIGJvb2wgSW1h Z2VJc09rKCkgY29uc3Q7DQoNCiAgICB2b2lkIFNldEltYWdlKGNvbnN0IHd4R0RJSW1hZ2UqIGlt YWdlKTsNCg0KDQogICAgYm9vbCBtX2lzSWNvbjsNCiAgICB3eEdESUltYWdlICptX2ltYWdlOw0K fTsNCiMgNiAiLi4vLi4vaW5jbHVkZS93eC9zdGF0Ym1wLmgiIDINCiMgNTYgIi4uLy4uL2luY2x1 ZGUvd3gvd3guaCIgMg0KIyAxICIuLi8uLi9pbmNsdWRlL3d4L3N0YXRib3guaCIgMQ0KDQoNCg0K DQojIDEgIi4uLy4uL2luY2x1ZGUvd3gvbXN3L3N0YXRib3guaCIgMQ0KIyAxNiAiLi4vLi4vaW5j bHVkZS93eC9tc3cvc3RhdGJveC5oIg0KI3ByYWdtYSBpbnRlcmZhY2UgInN0YXRib3guaCINCg0K DQoNCg0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgZXh0ZXJuIGNvbnN0IGNoYXIqIHd4U3Rh dGljQm94TmFtZVN0cjsNCg0KDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eFN0 YXRpY0JveCA6IHB1YmxpYyB3eENvbnRyb2wNCnsNCnB1YmxpYzogc3RhdGljIHd4Q2xhc3NJbmZv IHNtX2NsYXNzd3hTdGF0aWNCb3g7IHd4Q2xhc3NJbmZvICpHZXRDbGFzc0luZm8oKSBjb25zdCB7 IHJldHVybiAmd3hTdGF0aWNCb3g6OnNtX2NsYXNzd3hTdGF0aWNCb3g7IH0NCg0KcHVibGljOg0K ICAgIHd4U3RhdGljQm94KCkgeyB9DQoNCiAgICB3eFN0YXRpY0JveCh3eFdpbmRvdyAqcGFyZW50 LCB3eFdpbmRvd0lEIGlkLA0KICAgICAgICAgICAgICAgIGNvbnN0IHd4U3RyaW5nJiBsYWJlbCwN CiAgICAgICAgICAgICAgICBjb25zdCB3eFBvaW50JiBwb3MgPSB3eERlZmF1bHRQb3NpdGlvbiwN CiAgICAgICAgICAgICAgICBjb25zdCB3eFNpemUmIHNpemUgPSB3eERlZmF1bHRTaXplLA0KICAg ICAgICAgICAgICAgIGxvbmcgc3R5bGUgPSAwLA0KICAgICAgICAgICAgICAgIGNvbnN0IHd4U3Ry aW5nJiBuYW1lID0gd3hTdGF0aWNCb3hOYW1lU3RyKQ0KICAgIHsNCiAgICAgICAgQ3JlYXRlKHBh cmVudCwgaWQsIGxhYmVsLCBwb3MsIHNpemUsIHN0eWxlLCBuYW1lKTsNCiAgICB9DQoNCiAgICBi b29sIENyZWF0ZSh3eFdpbmRvdyAqcGFyZW50LCB3eFdpbmRvd0lEIGlkLA0KICAgICAgICAgICAg ICAgIGNvbnN0IHd4U3RyaW5nJiBsYWJlbCwNCiAgICAgICAgICAgICAgICBjb25zdCB3eFBvaW50 JiBwb3MgPSB3eERlZmF1bHRQb3NpdGlvbiwNCiAgICAgICAgICAgICAgICBjb25zdCB3eFNpemUm IHNpemUgPSB3eERlZmF1bHRTaXplLA0KICAgICAgICAgICAgICAgIGxvbmcgc3R5bGUgPSAwLA0K ICAgICAgICAgICAgICAgIGNvbnN0IHd4U3RyaW5nJiBuYW1lID0gd3hTdGF0aWNCb3hOYW1lU3Ry KTsNCg0KDQoNCg0KICAgIHZpcnR1YWwgbG9uZyBNU1dXaW5kb3dQcm9jKFdYVUlOVCBuTXNnLCBX WFdQQVJBTSB3UGFyYW0sIFdYTFBBUkFNIGxQYXJhbSk7DQoNCg0KICAgIHZpcnR1YWwgYm9vbCBB Y2NlcHRzRm9jdXMoKSBjb25zdCB7IHJldHVybiAwOyB9DQoNCnByb3RlY3RlZDoNCiAgICB2aXJ0 dWFsIHd4U2l6ZSBEb0dldEJlc3RTaXplKCkgY29uc3Q7DQp9Ow0KIyA2ICIuLi8uLi9pbmNsdWRl L3d4L3N0YXRib3guaCIgMg0KIyA1NyAiLi4vLi4vaW5jbHVkZS93eC93eC5oIiAyDQojIDEgIi4u Ly4uL2luY2x1ZGUvd3gvbGlzdGJveC5oIiAxDQojIDIwICIuLi8uLi9pbmNsdWRlL3d4L2xpc3Ri b3guaCINCiNwcmFnbWEgaW50ZXJmYWNlICJsaXN0Ym94YmFzZS5oIg0KIyAzMCAiLi4vLi4vaW5j bHVkZS93eC9saXN0Ym94LmgiDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eEFy cmF5SW50Ow0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hBcnJheVN0cmluZzsN Cg0KDQoNCg0KDQpfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBleHRlcm4gY29uc3QgY2hhciog d3hMaXN0Qm94TmFtZVN0cjsNCg0KDQoNCg0KDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBv cnQpKSB3eExpc3RCb3hCYXNlIDogcHVibGljIHd4Q29udHJvbFdpdGhJdGVtcw0Kew0KcHVibGlj Og0KDQoNCg0KICAgIHZvaWQgSW5zZXJ0KGNvbnN0IHd4U3RyaW5nJiBpdGVtLCBpbnQgcG9zKQ0K ICAgICAgICB7IERvSW5zZXJ0KGl0ZW0sIHBvcyk7IH0NCiAgICB2b2lkIEluc2VydChjb25zdCB3 eFN0cmluZyYgaXRlbSwgaW50IHBvcywgdm9pZCAqY2xpZW50RGF0YSkNCiAgICAgICAgeyBEb0lu c2VydChpdGVtLCBwb3MpOyBTZXRDbGllbnREYXRhKHBvcywgY2xpZW50RGF0YSk7IH0NCiAgICB2 b2lkIEluc2VydChjb25zdCB3eFN0cmluZyYgaXRlbSwgaW50IHBvcywgd3hDbGllbnREYXRhICpj bGllbnREYXRhKQ0KICAgICAgICB7IERvSW5zZXJ0KGl0ZW0sIHBvcyk7IFNldENsaWVudE9iamVj dChwb3MsIGNsaWVudERhdGEpOyB9DQoNCiAgICB2b2lkIEluc2VydEl0ZW1zKGludCBuSXRlbXMs IGNvbnN0IHd4U3RyaW5nICppdGVtcywgaW50IHBvcyk7DQogICAgdm9pZCBJbnNlcnRJdGVtcyhj b25zdCB3eEFycmF5U3RyaW5nJiBpdGVtcywgaW50IHBvcykNCiAgICAgICAgeyBEb0luc2VydEl0 ZW1zKGl0ZW1zLCBwb3MpOyB9DQoNCiAgICB2b2lkIFNldChpbnQgbiwgY29uc3Qgd3hTdHJpbmcq IGl0ZW1zLCB2b2lkICoqY2xpZW50RGF0YSA9IF9fbnVsbCk7DQogICAgdm9pZCBTZXQoY29uc3Qg d3hBcnJheVN0cmluZyYgaXRlbXMsIHZvaWQgKipjbGllbnREYXRhID0gX19udWxsKQ0KICAgICAg ICB7IERvU2V0SXRlbXMoaXRlbXMsIGNsaWVudERhdGEpOyB9DQoNCg0KICAgIHZpcnR1YWwgYm9v bCBJc1NlbGVjdGVkKGludCBuKSBjb25zdCA9IDA7DQogICAgdmlydHVhbCB2b2lkIFNldFNlbGVj dGlvbihpbnQgbiwgYm9vbCBzZWxlY3QgPSAxKSA9IDA7DQogICAgdmlydHVhbCB2b2lkIFNlbGVj dChpbnQgbikgeyBTZXRTZWxlY3Rpb24obiwgMSk7IH0NCiAgICB2b2lkIERlc2VsZWN0KGludCBu KSB7IFNldFNlbGVjdGlvbihuLCAwKTsgfQ0KDQogICAgdmlydHVhbCBib29sIFNldFN0cmluZ1Nl bGVjdGlvbihjb25zdCB3eFN0cmluZyYgcywgYm9vbCBzZWxlY3QgPSAxKTsNCg0KDQoNCiAgICB2 aXJ0dWFsIGludCBHZXRTZWxlY3Rpb25zKHd4QXJyYXlJbnQmIGFTZWxlY3Rpb25zKSBjb25zdCA9 IDA7DQoNCg0KDQogICAgdm9pZCBTZXRGaXJzdEl0ZW0oaW50IG4pIHsgRG9TZXRGaXJzdEl0ZW0o bik7IH0NCiAgICB2b2lkIFNldEZpcnN0SXRlbShjb25zdCB3eFN0cmluZyYgcyk7DQoNCg0KDQog ICAgdm9pZCBDb21tYW5kKHd4Q29tbWFuZEV2ZW50JiBldmVudCk7DQoNCg0KDQogICAgYm9vbCBT ZWxlY3RlZChpbnQgbikgY29uc3QgeyByZXR1cm4gSXNTZWxlY3RlZChuKTsgfQ0KDQpwcm90ZWN0 ZWQ6DQoNCg0KICAgIHZvaWQgRG9JbnNlcnQoY29uc3Qgd3hTdHJpbmcmIGl0ZW0sIGludCBwb3Mp DQogICAgICAgIHsgSW5zZXJ0SXRlbXMoMSwgJml0ZW0sIHBvcyk7IH0NCg0KDQogICAgdmlydHVh bCB2b2lkIERvSW5zZXJ0SXRlbXMoY29uc3Qgd3hBcnJheVN0cmluZyYgaXRlbXMsIGludCBwb3Mp ID0gMDsNCiAgICB2aXJ0dWFsIHZvaWQgRG9TZXRJdGVtcyhjb25zdCB3eEFycmF5U3RyaW5nJiBp dGVtcywgdm9pZCAqKmNsaWVudERhdGEpID0gMDsNCg0KICAgIHZpcnR1YWwgdm9pZCBEb1NldEZp cnN0SXRlbShpbnQgbikgPSAwOw0KfTsNCg0KDQoNCg0KDQoNCiMgMSAiLi4vLi4vaW5jbHVkZS93 eC9tc3cvbGlzdGJveC5oIiAxDQojIDE2ICIuLi8uLi9pbmNsdWRlL3d4L21zdy9saXN0Ym94Lmgi DQojcHJhZ21hIGludGVyZmFjZSAibGlzdGJveC5oIg0KDQoNCg0KDQoNCg0KDQogIGNsYXNzIF9f YXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4T3duZXJEcmF3bjsNCg0KDQoNCg0KICB0eXBlZGVm IHd4T3duZXJEcmF3biAqIF9Bd3hMaXN0Qm94SXRlbXNBcnJheTsgdHlwZWRlZiBpbnQgKCAqQ01Q RlVOQ19Bd3hMaXN0Qm94SXRlbXNBcnJheSkoX0F3eExpc3RCb3hJdGVtc0FycmF5ICpwSXRlbTEs IF9Bd3hMaXN0Qm94SXRlbXNBcnJheSAqcEl0ZW0yKTsgY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxs aW1wb3J0KSkgd3hMaXN0Qm94SXRlbXNBcnJheSA6IHB1YmxpYyB3eEJhc2VBcnJheSB7IHB1Ymxp Yzogd3hMaXN0Qm94SXRlbXNBcnJheSgpIHsgc2l6ZV90IHR5cGUgPSBzaXplb2YoX0F3eExpc3RC b3hJdGVtc0FycmF5KTsgc2l6ZV90IHNpemVsb25nID0gc2l6ZW9mKGxvbmcpOyBpZiAoIHR5cGUg PiBzaXplbG9uZyApIHsgaWYgKCAhKHd4RmFsc2UpICkgd3hPbkFzc2VydCgiLi4vLi4vaW5jbHVk ZS93eC9tc3cvbGlzdGJveC5oIiwgMjksICJpbGxlZ2FsIHVzZSBvZiBERUZJTkVfQVJSQVkiKTsg fSB9IHd4TGlzdEJveEl0ZW1zQXJyYXkmIG9wZXJhdG9yPShjb25zdCB3eExpc3RCb3hJdGVtc0Fy cmF5JiBzcmMpIHsgd3hCYXNlQXJyYXkqIHRlbXAgPSAod3hCYXNlQXJyYXkqKSB0aGlzOyAoKnRl bXApID0gKChjb25zdCB3eEJhc2VBcnJheSYpc3JjKTsgcmV0dXJuICp0aGlzOyB9IF9Bd3hMaXN0 Qm94SXRlbXNBcnJheSYgb3BlcmF0b3JbXShzaXplX3QgdWlJbmRleCkgY29uc3QgeyByZXR1cm4g KF9Bd3hMaXN0Qm94SXRlbXNBcnJheSYpKHd4QmFzZUFycmF5OjpJdGVtKHVpSW5kZXgpKTsgfSBf QXd4TGlzdEJveEl0ZW1zQXJyYXkmIEl0ZW0oc2l6ZV90IHVpSW5kZXgpIGNvbnN0IHsgcmV0dXJu IChfQXd4TGlzdEJveEl0ZW1zQXJyYXkmKSh3eEJhc2VBcnJheTo6SXRlbSh1aUluZGV4KSk7IH0g X0F3eExpc3RCb3hJdGVtc0FycmF5JiBMYXN0KCkgY29uc3QgeyByZXR1cm4gKF9Bd3hMaXN0Qm94 SXRlbXNBcnJheSYpKHd4QmFzZUFycmF5OjpJdGVtKENvdW50KCkgLSAxKSk7IH0gaW50IEluZGV4 KF9Bd3hMaXN0Qm94SXRlbXNBcnJheSBJdGVtLCBib29sIGJGcm9tRW5kID0gMCkgY29uc3QgeyBy ZXR1cm4gd3hCYXNlQXJyYXk6OkluZGV4KChsb25nKUl0ZW0sIGJGcm9tRW5kKTsgfSB2b2lkIEFk ZChfQXd4TGlzdEJveEl0ZW1zQXJyYXkgSXRlbSkgeyB3eEJhc2VBcnJheTo6QWRkKChsb25nKUl0 ZW0pOyB9IHZvaWQgSW5zZXJ0KF9Bd3hMaXN0Qm94SXRlbXNBcnJheSBJdGVtLCBzaXplX3QgdWlJ bmRleCkgeyB3eEJhc2VBcnJheTo6SW5zZXJ0KChsb25nKUl0ZW0sIHVpSW5kZXgpIDsgfSB2b2lk IFJlbW92ZShzaXplX3QgdWlJbmRleCkgeyBSZW1vdmVBdCh1aUluZGV4KTsgfSB2b2lkIFJlbW92 ZUF0KHNpemVfdCB1aUluZGV4KSB7IHd4QmFzZUFycmF5OjpSZW1vdmVBdCh1aUluZGV4KTsgfSB2 b2lkIFJlbW92ZShfQXd4TGlzdEJveEl0ZW1zQXJyYXkgSXRlbSkgeyBpbnQgaUluZGV4ID0gSW5k ZXgoSXRlbSk7IGlmICghKGlJbmRleCAhPSAoLTEpKSkge2lmICggISh3eEZhbHNlKSApIHd4T25B c3NlcnQoIi4uLy4uL2luY2x1ZGUvd3gvbXN3L2xpc3Rib3guaCIsIDI5LCAicmVtb3ZpbmcgaW5l eGlzdGluZyBlbGVtZW50IGluIHd4QXJyYXk6OlJlbW92ZSIpOyByZXR1cm47IH07IHd4QmFzZUFy cmF5OjpSZW1vdmVBdCgoc2l6ZV90KWlJbmRleCk7IH0gdm9pZCBTb3J0KENNUEZVTkNfQXd4TGlz dEJveEl0ZW1zQXJyYXkgZkNtcCkgeyB3eEJhc2VBcnJheTo6U29ydCgoQ01QRlVOQylmQ21wKTsg fSB9Ow0KDQoNCg0KY2xhc3Mgd3hBcnJheUludDsNCg0KDQoNCg0KDQpjbGFzcyBfX2F0dHJpYnV0 ZV9fKChkbGxpbXBvcnQpKSB3eExpc3RCb3ggOiBwdWJsaWMgd3hMaXN0Qm94QmFzZQ0Kew0KcHVi bGljOg0KDQogICAgd3hMaXN0Qm94KCk7DQogICAgd3hMaXN0Qm94KHd4V2luZG93ICpwYXJlbnQs IHd4V2luZG93SUQgaWQsDQogICAgICAgICAgICBjb25zdCB3eFBvaW50JiBwb3MgPSB3eERlZmF1 bHRQb3NpdGlvbiwNCiAgICAgICAgICAgIGNvbnN0IHd4U2l6ZSYgc2l6ZSA9IHd4RGVmYXVsdFNp emUsDQogICAgICAgICAgICBpbnQgbiA9IDAsIGNvbnN0IHd4U3RyaW5nIGNob2ljZXNbXSA9IF9f bnVsbCwNCiAgICAgICAgICAgIGxvbmcgc3R5bGUgPSAwLA0KICAgICAgICAgICAgY29uc3Qgd3hW YWxpZGF0b3ImIHZhbGlkYXRvciA9IHd4RGVmYXVsdFZhbGlkYXRvciwNCiAgICAgICAgICAgIGNv bnN0IHd4U3RyaW5nJiBuYW1lID0gd3hMaXN0Qm94TmFtZVN0cikNCiAgICB7DQogICAgICAgIENy ZWF0ZShwYXJlbnQsIGlkLCBwb3MsIHNpemUsIG4sIGNob2ljZXMsIHN0eWxlLCB2YWxpZGF0b3Is IG5hbWUpOw0KICAgIH0NCg0KICAgIGJvb2wgQ3JlYXRlKHd4V2luZG93ICpwYXJlbnQsIHd4V2lu ZG93SUQgaWQsDQogICAgICAgICAgICAgICAgY29uc3Qgd3hQb2ludCYgcG9zID0gd3hEZWZhdWx0 UG9zaXRpb24sDQogICAgICAgICAgICAgICAgY29uc3Qgd3hTaXplJiBzaXplID0gd3hEZWZhdWx0 U2l6ZSwNCiAgICAgICAgICAgICAgICBpbnQgbiA9IDAsIGNvbnN0IHd4U3RyaW5nIGNob2ljZXNb XSA9IF9fbnVsbCwNCiAgICAgICAgICAgICAgICBsb25nIHN0eWxlID0gMCwNCiAgICAgICAgICAg ICAgICBjb25zdCB3eFZhbGlkYXRvciYgdmFsaWRhdG9yID0gd3hEZWZhdWx0VmFsaWRhdG9yLA0K ICAgICAgICAgICAgICAgIGNvbnN0IHd4U3RyaW5nJiBuYW1lID0gd3hMaXN0Qm94TmFtZVN0cik7 DQoNCiAgICB2aXJ0dWFsIH53eExpc3RCb3goKTsNCg0KDQogICAgdmlydHVhbCB2b2lkIENsZWFy KCk7DQogICAgdmlydHVhbCB2b2lkIERlbGV0ZShpbnQgbik7DQoNCiAgICB2aXJ0dWFsIGludCBH ZXRDb3VudCgpIGNvbnN0Ow0KICAgIHZpcnR1YWwgd3hTdHJpbmcgR2V0U3RyaW5nKGludCBuKSBj b25zdDsNCiAgICB2aXJ0dWFsIHZvaWQgU2V0U3RyaW5nKGludCBuLCBjb25zdCB3eFN0cmluZyYg cyk7DQogICAgdmlydHVhbCBpbnQgRmluZFN0cmluZyhjb25zdCB3eFN0cmluZyYgcykgY29uc3Q7 DQoNCiAgICB2aXJ0dWFsIGJvb2wgSXNTZWxlY3RlZChpbnQgbikgY29uc3Q7DQogICAgdmlydHVh bCB2b2lkIFNldFNlbGVjdGlvbihpbnQgbiwgYm9vbCBzZWxlY3QgPSAxKTsNCiAgICB2aXJ0dWFs IGludCBHZXRTZWxlY3Rpb24oKSBjb25zdDsNCiAgICB2aXJ0dWFsIGludCBHZXRTZWxlY3Rpb25z KHd4QXJyYXlJbnQmIGFTZWxlY3Rpb25zKSBjb25zdDsNCg0KICAgIHZpcnR1YWwgaW50IERvQXBw ZW5kKGNvbnN0IHd4U3RyaW5nJiBpdGVtKTsNCiAgICB2aXJ0dWFsIHZvaWQgRG9JbnNlcnRJdGVt cyhjb25zdCB3eEFycmF5U3RyaW5nJiBpdGVtcywgaW50IHBvcyk7DQogICAgdmlydHVhbCB2b2lk IERvU2V0SXRlbXMoY29uc3Qgd3hBcnJheVN0cmluZyYgaXRlbXMsIHZvaWQgKipjbGllbnREYXRh KTsNCg0KICAgIHZpcnR1YWwgdm9pZCBEb1NldEZpcnN0SXRlbShpbnQgbik7DQoNCiAgICB2aXJ0 dWFsIHZvaWQgRG9TZXRJdGVtQ2xpZW50RGF0YShpbnQgbiwgdm9pZCogY2xpZW50RGF0YSk7DQog ICAgdmlydHVhbCB2b2lkKiBEb0dldEl0ZW1DbGllbnREYXRhKGludCBuKSBjb25zdDsNCiAgICB2 aXJ0dWFsIHZvaWQgRG9TZXRJdGVtQ2xpZW50T2JqZWN0KGludCBuLCB3eENsaWVudERhdGEqIGNs aWVudERhdGEpOw0KICAgIHZpcnR1YWwgd3hDbGllbnREYXRhKiBEb0dldEl0ZW1DbGllbnRPYmpl Y3QoaW50IG4pIGNvbnN0Ow0KDQoNCg0KICAgIGJvb2wgTVNXT25NZWFzdXJlKFdYTUVBU1VSRUlU RU1TVFJVQ1QgKml0ZW0pOw0KICAgIGJvb2wgTVNXT25EcmF3KFdYRFJBV0lURU1TVFJVQ1QgKml0 ZW0pOw0KDQoNCiAgICB2aXJ0dWFsIHd4T3duZXJEcmF3biAqQ3JlYXRlSXRlbShzaXplX3Qgbik7 DQoNCg0KICAgIHd4T3duZXJEcmF3biAqR2V0SXRlbShzaXplX3QgbikgY29uc3QgeyByZXR1cm4g bV9hSXRlbXNbbl07IH0NCg0KDQogICAgaW50IEdldEl0ZW1JbmRleCh3eE93bmVyRHJhd24gKml0 ZW0pIGNvbnN0IHsgcmV0dXJuIG1fYUl0ZW1zLkluZGV4KGl0ZW0pOyB9DQoNCg0KDQoNCg0KICAg IHZpcnR1YWwgdm9pZCBTZXRIb3Jpem9udGFsRXh0ZW50KGNvbnN0IHd4U3RyaW5nJiBzID0gd3hF bXB0eVN0cmluZyk7DQoNCg0KICAgIGJvb2wgTVNXQ29tbWFuZChXWFVJTlQgcGFyYW0sIFdYV09S RCBpZCk7DQoNCiAgICB2aXJ0dWFsIHZvaWQgU2V0dXBDb2xvdXJzKCk7DQoNCnByb3RlY3RlZDoN Cg0KICAgIGJvb2wgSGFzTXVsdGlwbGVTZWxlY3Rpb24oKSBjb25zdDsNCg0KDQogICAgdm9pZCBG cmVlKCk7DQoNCiAgICBpbnQgbV9ub0l0ZW1zOw0KICAgIGludCBtX3NlbGVjdGVkOw0KDQogICAg dmlydHVhbCB3eFNpemUgRG9HZXRCZXN0U2l6ZSgpIGNvbnN0Ow0KDQoNCg0KICAgIHd4TGlzdEJv eEl0ZW1zQXJyYXkgbV9hSXRlbXM7DQoNCg0KcHJpdmF0ZToNCiAgICBwdWJsaWM6IHN0YXRpYyB3 eENsYXNzSW5mbyBzbV9jbGFzc3d4TGlzdEJveDsgd3hDbGFzc0luZm8gKkdldENsYXNzSW5mbygp IGNvbnN0IHsgcmV0dXJuICZ3eExpc3RCb3g6OnNtX2NsYXNzd3hMaXN0Qm94OyB9DQp9Ow0KIyAx MDggIi4uLy4uL2luY2x1ZGUvd3gvbGlzdGJveC5oIiAyDQojIDU4ICIuLi8uLi9pbmNsdWRlL3d4 L3d4LmgiIDINCiMgMSAiLi4vLi4vaW5jbHVkZS93eC9yYWRpb2JveC5oIiAxDQoNCg0KDQoNCiMg MSAiLi4vLi4vaW5jbHVkZS93eC9tc3cvcmFkaW9ib3guaCIgMQ0KIyAxNiAiLi4vLi4vaW5jbHVk ZS93eC9tc3cvcmFkaW9ib3guaCINCiNwcmFnbWEgaW50ZXJmYWNlICJyYWRpb2JveC5oIg0KDQoN Cg0KDQpfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBleHRlcm4gY29uc3QgY2hhciogd3hSYWRp b0JveE5hbWVTdHI7DQoNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4Qml0bWFw Ow0KDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eFJhZGlvQm94IDogcHVibGlj IHd4Q29udHJvbA0Kew0KICAgIHB1YmxpYzogc3RhdGljIHd4Q2xhc3NJbmZvIHNtX2NsYXNzd3hS YWRpb0JveDsgd3hDbGFzc0luZm8gKkdldENsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZ3eFJh ZGlvQm94OjpzbV9jbGFzc3d4UmFkaW9Cb3g7IH0NCg0KcHVibGljOg0KICAgIHd4UmFkaW9Cb3go KTsNCg0KICAgIHd4UmFkaW9Cb3god3hXaW5kb3cgKnBhcmVudCwgd3hXaW5kb3dJRCBpZCwgY29u c3Qgd3hTdHJpbmcmIHRpdGxlLA0KICAgICAgICAgICAgY29uc3Qgd3hQb2ludCYgcG9zID0gd3hE ZWZhdWx0UG9zaXRpb24sIGNvbnN0IHd4U2l6ZSYgc2l6ZSA9IHd4RGVmYXVsdFNpemUsDQogICAg ICAgICAgICBpbnQgbiA9IDAsIGNvbnN0IHd4U3RyaW5nIGNob2ljZXNbXSA9IF9fbnVsbCwNCiAg ICAgICAgICAgIGludCBtYWpvckRpbSA9IDAsIGxvbmcgc3R5bGUgPSB3eEhPUklaT05UQUwsDQog ICAgICAgICAgICBjb25zdCB3eFZhbGlkYXRvciYgdmFsID0gd3hEZWZhdWx0VmFsaWRhdG9yLCBj b25zdCB3eFN0cmluZyYgbmFtZSA9IHd4UmFkaW9Cb3hOYW1lU3RyKQ0KICAgIHsNCiAgICAgICAg Q3JlYXRlKHBhcmVudCwgaWQsIHRpdGxlLCBwb3MsIHNpemUsIG4sIGNob2ljZXMsIG1ham9yRGlt LCBzdHlsZSwgdmFsLCBuYW1lKTsNCiAgICB9DQoNCiAgICB+d3hSYWRpb0JveCgpOw0KDQogICAg Ym9vbCBDcmVhdGUod3hXaW5kb3cgKnBhcmVudCwgd3hXaW5kb3dJRCBpZCwgY29uc3Qgd3hTdHJp bmcmIHRpdGxlLA0KICAgICAgICAgICAgY29uc3Qgd3hQb2ludCYgcG9zID0gd3hEZWZhdWx0UG9z aXRpb24sIGNvbnN0IHd4U2l6ZSYgc2l6ZSA9IHd4RGVmYXVsdFNpemUsDQogICAgICAgICAgICBp bnQgbiA9IDAsIGNvbnN0IHd4U3RyaW5nIGNob2ljZXNbXSA9IF9fbnVsbCwNCiAgICAgICAgICAg IGludCBtYWpvckRpbSA9IDAsIGxvbmcgc3R5bGUgPSB3eEhPUklaT05UQUwsDQogICAgICAgICAg ICBjb25zdCB3eFZhbGlkYXRvciYgdmFsID0gd3hEZWZhdWx0VmFsaWRhdG9yLCBjb25zdCB3eFN0 cmluZyYgbmFtZSA9IHd4UmFkaW9Cb3hOYW1lU3RyKTsNCg0KICAgIHZpcnR1YWwgYm9vbCBNU1dD b21tYW5kKFdYVUlOVCBwYXJhbSwgV1hXT1JEIGlkKTsNCg0KICAgIGludCBGaW5kU3RyaW5nKGNv bnN0IHd4U3RyaW5nJiBzKSBjb25zdDsNCiAgICB2b2lkIFNldFNlbGVjdGlvbihpbnQgTik7DQog ICAgaW50IEdldFNlbGVjdGlvbigpIGNvbnN0Ow0KICAgIHd4U3RyaW5nIEdldFN0cmluZyhpbnQg TikgY29uc3Q7DQoNCiAgICB2b2lkIEdldFNpemUoaW50ICp4LCBpbnQgKnkpIGNvbnN0Ow0KICAg IHZvaWQgR2V0UG9zaXRpb24oaW50ICp4LCBpbnQgKnkpIGNvbnN0Ow0KDQogICAgdm9pZCBTZXRM YWJlbChpbnQgaXRlbSwgY29uc3Qgd3hTdHJpbmcmIGxhYmVsKTsNCiAgICB2b2lkIFNldExhYmVs KGludCBpdGVtLCB3eEJpdG1hcCAqYml0bWFwKTsNCiAgICB3eFN0cmluZyBHZXRMYWJlbChpbnQg aXRlbSkgY29uc3Q7DQogICAgYm9vbCBTaG93KGJvb2wgc2hvdyk7DQogICAgdm9pZCBTZXRGb2N1 cygpOw0KICAgIGJvb2wgRW5hYmxlKGJvb2wgZW5hYmxlKTsNCiAgICB2b2lkIEVuYWJsZShpbnQg aXRlbSwgYm9vbCBlbmFibGUpOw0KICAgIHZvaWQgU2hvdyhpbnQgaXRlbSwgYm9vbCBzaG93KTsN CiAgICB2b2lkIFNldExhYmVsRm9udChjb25zdCB3eEZvbnQmICkge307DQogICAgdm9pZCBTZXRC dXR0b25Gb250KGNvbnN0IHd4Rm9udCYgZm9udCkgeyBTZXRGb250KGZvbnQpOyB9DQoNCiAgICB2 aXJ0dWFsIHd4U3RyaW5nIEdldFN0cmluZ1NlbGVjdGlvbigpIGNvbnN0Ow0KICAgIHZpcnR1YWwg Ym9vbCBTZXRTdHJpbmdTZWxlY3Rpb24oY29uc3Qgd3hTdHJpbmcmIHMpOw0KICAgIHZpcnR1YWwg aW50IE51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fbm9JdGVtczsgfTsNCiAgICB2b2lkIENvbW1h bmQod3hDb21tYW5kRXZlbnQmIGV2ZW50KTsNCg0KICAgIGludCBHZXROdW1iZXJPZlJvd3NPckNv bHMoKSBjb25zdCB7IHJldHVybiBtX25vUm93c09yQ29sczsgfQ0KICAgIHZvaWQgU2V0TnVtYmVy T2ZSb3dzT3JDb2xzKGludCBuKSB7IG1fbm9Sb3dzT3JDb2xzID0gbjsgfQ0KDQoNCg0KDQogICAg dmlydHVhbCBib29sIFNldEZvbnQoY29uc3Qgd3hGb250JiBmb250KTsNCg0KICAgIGxvbmcgTVNX V2luZG93UHJvYyhXWFVJTlQgbk1zZywgV1hXUEFSQU0gd1BhcmFtLCBXWExQQVJBTSBsUGFyYW0p Ow0KICAgIHZpcnR1YWwgV1hIQlJVU0ggT25DdGxDb2xvcihXWEhEQyBwREMsIFdYSFdORCBwV25k LCBXWFVJTlQgbkN0bENvbG9yLA0KICAgICAgICAgICAgV1hVSU5UIG1lc3NhZ2UsIFdYV1BBUkFN IHdQYXJhbSwgV1hMUEFSQU0gbFBhcmFtKTsNCiAgICBXWEhXTkQgKkdldFJhZGlvQnV0dG9ucygp IGNvbnN0IHsgcmV0dXJuIG1fcmFkaW9CdXR0b25zOyB9DQogICAgYm9vbCBDb250YWluc0hXTkQo V1hIV05EIGhXbmQpIGNvbnN0Ow0KICAgIHZvaWQgU2VuZE5vdGlmaWNhdGlvbkV2ZW50KCk7DQoN Cg0KICAgIGludCBHZXROdW1WZXIoKSBjb25zdDsNCiAgICBpbnQgR2V0TnVtSG9yKCkgY29uc3Q7 DQojIDEwMiAiLi4vLi4vaW5jbHVkZS93eC9tc3cvcmFkaW9ib3guaCINCnByb3RlY3RlZDoNCg0K ICAgIHZvaWQgU3ViY2xhc3NSYWRpb0J1dHRvbihXWEhXTkQgaFduZEJ0bik7DQoNCg0KICAgIHd4 U2l6ZSBHZXRNYXhCdXR0b25TaXplKCkgY29uc3Q7DQoNCg0KICAgIHd4U2l6ZSBHZXRUb3RhbEJ1 dHRvblNpemUoY29uc3Qgd3hTaXplJiBzaXplQnRuKSBjb25zdDsNCg0KICAgIFdYSFdORCAqIG1f cmFkaW9CdXR0b25zOw0KICAgIGludCBtX21ham9yRGltOw0KICAgIGludCAqIG1fcmFkaW9XaWR0 aDsNCiAgICBpbnQgKiBtX3JhZGlvSGVpZ2h0Ow0KDQogICAgaW50IG1fbm9JdGVtczsNCiAgICBp bnQgbV9ub1Jvd3NPckNvbHM7DQogICAgaW50IG1fc2VsZWN0ZWRCdXR0b247DQoNCiAgICB2aXJ0 dWFsIHZvaWQgRG9TZXRTaXplKGludCB4LCBpbnQgeSwNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCB3aWR0aCwgaW50IGhlaWdodCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBzaXplRmxhZ3MgPSAoMHgwMDAxfDB4MDAwMikpOw0KICAgIHZpcnR1YWwgd3hTaXplIERvR2V0 QmVzdFNpemUoKSBjb25zdDsNCn07DQojIDYgIi4uLy4uL2luY2x1ZGUvd3gvcmFkaW9ib3guaCIg Mg0KIyA1OSAiLi4vLi4vaW5jbHVkZS93eC93eC5oIiAyDQojIDEgIi4uLy4uL2luY2x1ZGUvd3gv cmFkaW9idXQuaCIgMQ0KDQoNCg0KDQojIDEgIi4uLy4uL2luY2x1ZGUvd3gvbXN3L3JhZGlvYnV0 LmgiIDENCiMgMTYgIi4uLy4uL2luY2x1ZGUvd3gvbXN3L3JhZGlvYnV0LmgiDQojcHJhZ21hIGlu dGVyZmFjZSAicmFkaW9idXQuaCINCg0KDQoNCg0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkg ZXh0ZXJuIGNvbnN0IGNoYXIqIHd4UmFkaW9CdXR0b25OYW1lU3RyOw0KDQpjbGFzcyBfX2F0dHJp YnV0ZV9fKChkbGxpbXBvcnQpKSB3eFJhZGlvQnV0dG9uOiBwdWJsaWMgd3hDb250cm9sDQp7DQog IHB1YmxpYzogc3RhdGljIHd4Q2xhc3NJbmZvIHNtX2NsYXNzd3hSYWRpb0J1dHRvbjsgd3hDbGFz c0luZm8gKkdldENsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZ3eFJhZGlvQnV0dG9uOjpzbV9j bGFzc3d4UmFkaW9CdXR0b247IH0NCiBwcm90ZWN0ZWQ6DQogcHVibGljOg0KICBpbmxpbmUgd3hS YWRpb0J1dHRvbih2b2lkKSB7fQ0KICBpbmxpbmUgd3hSYWRpb0J1dHRvbih3eFdpbmRvdyAqcGFy ZW50LCB3eFdpbmRvd0lEIGlkLA0KICAgICAgICAgICBjb25zdCB3eFN0cmluZyYgbGFiZWwsDQog ICAgICAgICAgIGNvbnN0IHd4UG9pbnQmIHBvcyA9IHd4RGVmYXVsdFBvc2l0aW9uLA0KICAgICAg ICAgICBjb25zdCB3eFNpemUmIHNpemUgPSB3eERlZmF1bHRTaXplLCBsb25nIHN0eWxlID0gMCwN CiAgICAgICAgICAgY29uc3Qgd3hWYWxpZGF0b3ImIHZhbGlkYXRvciA9IHd4RGVmYXVsdFZhbGlk YXRvciwNCiAgICAgICAgICAgY29uc3Qgd3hTdHJpbmcmIG5hbWUgPSB3eFJhZGlvQnV0dG9uTmFt ZVN0cikNCiAgew0KICAgICAgQ3JlYXRlKHBhcmVudCwgaWQsIGxhYmVsLCBwb3MsIHNpemUsIHN0 eWxlLCB2YWxpZGF0b3IsIG5hbWUpOw0KICB9DQoNCiAgYm9vbCBDcmVhdGUod3hXaW5kb3cgKnBh cmVudCwgd3hXaW5kb3dJRCBpZCwNCiAgICAgICAgICAgY29uc3Qgd3hTdHJpbmcmIGxhYmVsLA0K ICAgICAgICAgICBjb25zdCB3eFBvaW50JiBwb3MgPSB3eERlZmF1bHRQb3NpdGlvbiwNCiAgICAg ICAgICAgY29uc3Qgd3hTaXplJiBzaXplID0gd3hEZWZhdWx0U2l6ZSwgbG9uZyBzdHlsZSA9IDAs DQogICAgICAgICAgIGNvbnN0IHd4VmFsaWRhdG9yJiB2YWxpZGF0b3IgPSB3eERlZmF1bHRWYWxp ZGF0b3IsDQogICAgICAgICAgIGNvbnN0IHd4U3RyaW5nJiBuYW1lID0gd3hSYWRpb0J1dHRvbk5h bWVTdHIpOw0KDQogIHZpcnR1YWwgdm9pZCBTZXRMYWJlbChjb25zdCB3eFN0cmluZyYgbGFiZWwp Ow0KICB2aXJ0dWFsIHZvaWQgU2V0VmFsdWUoYm9vbCB2YWwpOw0KICB2aXJ0dWFsIGJvb2wgR2V0 VmFsdWUodm9pZCkgY29uc3QgOw0KDQogIGJvb2wgTVNXQ29tbWFuZChXWFVJTlQgcGFyYW0sIFdY V09SRCBpZCk7DQogIHZpcnR1YWwgV1hIQlJVU0ggT25DdGxDb2xvcihXWEhEQyBwREMsIFdYSFdO RCBwV25kLCBXWFVJTlQgbkN0bENvbG9yLA0KICAgICAgICAgICAgV1hVSU5UIG1lc3NhZ2UsIFdY V1BBUkFNIHdQYXJhbSwgV1hMUEFSQU0gbFBhcmFtKTsNCg0KICB2b2lkIENvbW1hbmQod3hDb21t YW5kRXZlbnQmIGV2ZW50KTsNCn07DQojIDYgIi4uLy4uL2luY2x1ZGUvd3gvcmFkaW9idXQuaCIg Mg0KIyA2MCAiLi4vLi4vaW5jbHVkZS93eC93eC5oIiAyDQojIDEgIi4uLy4uL2luY2x1ZGUvd3gv dGV4dGN0cmwuaCIgMQ0KIyAxOSAiLi4vLi4vaW5jbHVkZS93eC90ZXh0Y3RybC5oIg0KI3ByYWdt YSBpbnRlcmZhY2UgInRleHRjdHJsYmFzZS5oIg0KIyA0MiAiLi4vLi4vaW5jbHVkZS93eC90ZXh0 Y3RybC5oIg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hUZXh0Q3RybDsNCg0K DQoNCg0KDQpfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBleHRlcm4gY29uc3QgY2hhciogd3hU ZXh0Q3RybE5hbWVTdHI7DQpfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBleHRlcm4gY29uc3Qg Y2hhciogd3hFbXB0eVN0cmluZzsNCg0KDQoNCg0KDQoNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRs bGltcG9ydCkpIHd4VGV4dEN0cmxCYXNlIDogcHVibGljIHd4Q29udHJvbA0KDQoNCg0KDQp7DQpw dWJsaWM6DQoNCg0KDQogICAgd3hUZXh0Q3RybEJhc2UoKTsNCiAgICB+d3hUZXh0Q3RybEJhc2Uo KTsNCg0KDQoNCg0KICAgIHZpcnR1YWwgd3hTdHJpbmcgR2V0VmFsdWUoKSBjb25zdCA9IDA7DQog ICAgdmlydHVhbCB2b2lkIFNldFZhbHVlKGNvbnN0IHd4U3RyaW5nJiB2YWx1ZSkgPSAwOw0KDQog ICAgdmlydHVhbCBpbnQgR2V0TGluZUxlbmd0aChsb25nIGxpbmVObykgY29uc3QgPSAwOw0KICAg IHZpcnR1YWwgd3hTdHJpbmcgR2V0TGluZVRleHQobG9uZyBsaW5lTm8pIGNvbnN0ID0gMDsNCiAg ICB2aXJ0dWFsIGludCBHZXROdW1iZXJPZkxpbmVzKCkgY29uc3QgPSAwOw0KDQogICAgdmlydHVh bCBib29sIElzTW9kaWZpZWQoKSBjb25zdCA9IDA7DQogICAgdmlydHVhbCBib29sIElzRWRpdGFi bGUoKSBjb25zdCA9IDA7DQoNCg0KICAgIHZpcnR1YWwgdm9pZCBHZXRTZWxlY3Rpb24obG9uZyog ZnJvbSwgbG9uZyogdG8pIGNvbnN0ID0gMDsNCg0KDQoNCg0KDQogICAgdmlydHVhbCB2b2lkIENs ZWFyKCkgPSAwOw0KICAgIHZpcnR1YWwgdm9pZCBSZXBsYWNlKGxvbmcgZnJvbSwgbG9uZyB0bywg Y29uc3Qgd3hTdHJpbmcmIHZhbHVlKSA9IDA7DQogICAgdmlydHVhbCB2b2lkIFJlbW92ZShsb25n IGZyb20sIGxvbmcgdG8pID0gMDsNCg0KDQogICAgdmlydHVhbCBib29sIExvYWRGaWxlKGNvbnN0 IHd4U3RyaW5nJiBmaWxlKTsNCiAgICB2aXJ0dWFsIGJvb2wgU2F2ZUZpbGUoY29uc3Qgd3hTdHJp bmcmIGZpbGUgPSB3eEVtcHR5U3RyaW5nKTsNCg0KDQogICAgdmlydHVhbCB2b2lkIERpc2NhcmRF ZGl0cygpID0gMDsNCg0KDQoNCiAgICB2aXJ0dWFsIHZvaWQgV3JpdGVUZXh0KGNvbnN0IHd4U3Ry aW5nJiB0ZXh0KSA9IDA7DQogICAgdmlydHVhbCB2b2lkIEFwcGVuZFRleHQoY29uc3Qgd3hTdHJp bmcmIHRleHQpID0gMDsNCg0KDQoNCg0KICAgIHZpcnR1YWwgbG9uZyBYWVRvUG9zaXRpb24obG9u ZyB4LCBsb25nIHkpIGNvbnN0ID0gMDsNCiAgICB2aXJ0dWFsIGJvb2wgUG9zaXRpb25Ub1hZKGxv bmcgcG9zLCBsb25nICp4LCBsb25nICp5KSBjb25zdCA9IDA7DQoNCiAgICB2aXJ0dWFsIHZvaWQg U2hvd1Bvc2l0aW9uKGxvbmcgcG9zKSA9IDA7DQoNCg0KICAgIHZpcnR1YWwgdm9pZCBDb3B5KCkg PSAwOw0KICAgIHZpcnR1YWwgdm9pZCBDdXQoKSA9IDA7DQogICAgdmlydHVhbCB2b2lkIFBhc3Rl KCkgPSAwOw0KDQogICAgdmlydHVhbCBib29sIENhbkNvcHkoKSBjb25zdCA9IDA7DQogICAgdmly dHVhbCBib29sIENhbkN1dCgpIGNvbnN0ID0gMDsNCiAgICB2aXJ0dWFsIGJvb2wgQ2FuUGFzdGUo KSBjb25zdCA9IDA7DQoNCg0KICAgIHZpcnR1YWwgdm9pZCBVbmRvKCkgPSAwOw0KICAgIHZpcnR1 YWwgdm9pZCBSZWRvKCkgPSAwOw0KDQogICAgdmlydHVhbCBib29sIENhblVuZG8oKSBjb25zdCA9 IDA7DQogICAgdmlydHVhbCBib29sIENhblJlZG8oKSBjb25zdCA9IDA7DQoNCg0KICAgIHZpcnR1 YWwgdm9pZCBTZXRJbnNlcnRpb25Qb2ludChsb25nIHBvcykgPSAwOw0KICAgIHZpcnR1YWwgdm9p ZCBTZXRJbnNlcnRpb25Qb2ludEVuZCgpID0gMDsNCiAgICB2aXJ0dWFsIGxvbmcgR2V0SW5zZXJ0 aW9uUG9pbnQoKSBjb25zdCA9IDA7DQogICAgdmlydHVhbCBsb25nIEdldExhc3RQb3NpdGlvbigp IGNvbnN0ID0gMDsNCg0KICAgIHZpcnR1YWwgdm9pZCBTZXRTZWxlY3Rpb24obG9uZyBmcm9tLCBs b25nIHRvKSA9IDA7DQogICAgdmlydHVhbCB2b2lkIFNldEVkaXRhYmxlKGJvb2wgZWRpdGFibGUp ID0gMDsNCiMgMTQ3ICIuLi8uLi9pbmNsdWRlL3d4L3RleHRjdHJsLmgiDQogICAgd3hUZXh0Q3Ry bCYgb3BlcmF0b3I8PChjb25zdCB3eFN0cmluZyYgcyk7DQogICAgd3hUZXh0Q3RybCYgb3BlcmF0 b3I8PChpbnQgaSk7DQogICAgd3hUZXh0Q3RybCYgb3BlcmF0b3I8PChsb25nIGkpOw0KICAgIHd4 VGV4dEN0cmwmIG9wZXJhdG9yPDwoZmxvYXQgZik7DQogICAgd3hUZXh0Q3RybCYgb3BlcmF0b3I8 PChkb3VibGUgZCk7DQogICAgd3hUZXh0Q3RybCYgb3BlcmF0b3I8PChjb25zdCBjaGFyIGMpOw0K DQoNCg0KDQoNCg0KcHJvdGVjdGVkOg0KDQoNCiAgICB3eFN0cmluZyBtX2ZpbGVuYW1lOw0KDQpw cml2YXRlOg0KDQoNCg0KDQoNCn07DQoNCg0KDQoNCg0KDQojIDEgIi4uLy4uL2luY2x1ZGUvd3gv bXN3L3RleHRjdHJsLmgiIDENCiMgMTYgIi4uLy4uL2luY2x1ZGUvd3gvbXN3L3RleHRjdHJsLmgi DQojcHJhZ21hIGludGVyZmFjZSAidGV4dGN0cmwuaCINCg0KDQpjbGFzcyBfX2F0dHJpYnV0ZV9f KChkbGxpbXBvcnQpKSB3eFRleHRDdHJsIDogcHVibGljIHd4VGV4dEN0cmxCYXNlDQp7DQpwdWJs aWM6DQoNCg0KDQogICAgd3hUZXh0Q3RybCgpOw0KICAgIHd4VGV4dEN0cmwod3hXaW5kb3cgKnBh cmVudCwgd3hXaW5kb3dJRCBpZCwNCiAgICAgICAgICAgICAgIGNvbnN0IHd4U3RyaW5nJiB2YWx1 ZSA9IHd4RW1wdHlTdHJpbmcsDQogICAgICAgICAgICAgICBjb25zdCB3eFBvaW50JiBwb3MgPSB3 eERlZmF1bHRQb3NpdGlvbiwNCiAgICAgICAgICAgICAgIGNvbnN0IHd4U2l6ZSYgc2l6ZSA9IHd4 RGVmYXVsdFNpemUsDQogICAgICAgICAgICAgICBsb25nIHN0eWxlID0gMCwNCiAgICAgICAgICAg ICAgIGNvbnN0IHd4VmFsaWRhdG9yJiB2YWxpZGF0b3IgPSB3eERlZmF1bHRWYWxpZGF0b3IsDQog ICAgICAgICAgICAgICBjb25zdCB3eFN0cmluZyYgbmFtZSA9IHd4VGV4dEN0cmxOYW1lU3RyKQ0K ICAgIHsNCiAgICAgICAgQ3JlYXRlKHBhcmVudCwgaWQsIHZhbHVlLCBwb3MsIHNpemUsIHN0eWxl LCB2YWxpZGF0b3IsIG5hbWUpOw0KICAgIH0NCg0KICAgIGJvb2wgQ3JlYXRlKHd4V2luZG93ICpw YXJlbnQsIHd4V2luZG93SUQgaWQsDQogICAgICAgICAgICAgICAgY29uc3Qgd3hTdHJpbmcmIHZh bHVlID0gd3hFbXB0eVN0cmluZywNCiAgICAgICAgICAgICAgICBjb25zdCB3eFBvaW50JiBwb3Mg PSB3eERlZmF1bHRQb3NpdGlvbiwNCiAgICAgICAgICAgICAgICBjb25zdCB3eFNpemUmIHNpemUg PSB3eERlZmF1bHRTaXplLA0KICAgICAgICAgICAgICAgIGxvbmcgc3R5bGUgPSAwLA0KICAgICAg ICAgICAgICAgIGNvbnN0IHd4VmFsaWRhdG9yJiB2YWxpZGF0b3IgPSB3eERlZmF1bHRWYWxpZGF0 b3IsDQogICAgICAgICAgICAgICAgY29uc3Qgd3hTdHJpbmcmIG5hbWUgPSB3eFRleHRDdHJsTmFt ZVN0cik7DQoNCg0KDQoNCiAgICB2aXJ0dWFsIHd4U3RyaW5nIEdldFZhbHVlKCkgY29uc3Q7DQog ICAgdmlydHVhbCB2b2lkIFNldFZhbHVlKGNvbnN0IHd4U3RyaW5nJiB2YWx1ZSk7DQoNCiAgICB2 aXJ0dWFsIGludCBHZXRMaW5lTGVuZ3RoKGxvbmcgbGluZU5vKSBjb25zdDsNCiAgICB2aXJ0dWFs IHd4U3RyaW5nIEdldExpbmVUZXh0KGxvbmcgbGluZU5vKSBjb25zdDsNCiAgICB2aXJ0dWFsIGlu dCBHZXROdW1iZXJPZkxpbmVzKCkgY29uc3Q7DQoNCiAgICB2aXJ0dWFsIGJvb2wgSXNNb2RpZmll ZCgpIGNvbnN0Ow0KICAgIHZpcnR1YWwgYm9vbCBJc0VkaXRhYmxlKCkgY29uc3Q7DQoNCg0KICAg IHZpcnR1YWwgdm9pZCBHZXRTZWxlY3Rpb24obG9uZyogZnJvbSwgbG9uZyogdG8pIGNvbnN0Ow0K DQoNCg0KDQoNCiAgICB2aXJ0dWFsIHZvaWQgQ2xlYXIoKTsNCiAgICB2aXJ0dWFsIHZvaWQgUmVw bGFjZShsb25nIGZyb20sIGxvbmcgdG8sIGNvbnN0IHd4U3RyaW5nJiB2YWx1ZSk7DQogICAgdmly dHVhbCB2b2lkIFJlbW92ZShsb25nIGZyb20sIGxvbmcgdG8pOw0KDQoNCiAgICB2aXJ0dWFsIGJv b2wgTG9hZEZpbGUoY29uc3Qgd3hTdHJpbmcmIGZpbGUpOw0KDQoNCiAgICB2aXJ0dWFsIHZvaWQg RGlzY2FyZEVkaXRzKCk7DQoNCg0KDQogICAgdmlydHVhbCB2b2lkIFdyaXRlVGV4dChjb25zdCB3 eFN0cmluZyYgdGV4dCk7DQogICAgdmlydHVhbCB2b2lkIEFwcGVuZFRleHQoY29uc3Qgd3hTdHJp bmcmIHRleHQpOw0KDQoNCg0KDQogICAgdmlydHVhbCBsb25nIFhZVG9Qb3NpdGlvbihsb25nIHgs IGxvbmcgeSkgY29uc3Q7DQogICAgdmlydHVhbCBib29sIFBvc2l0aW9uVG9YWShsb25nIHBvcywg bG9uZyAqeCwgbG9uZyAqeSkgY29uc3Q7DQoNCiAgICB2aXJ0dWFsIHZvaWQgU2hvd1Bvc2l0aW9u KGxvbmcgcG9zKTsNCg0KDQogICAgdmlydHVhbCB2b2lkIENvcHkoKTsNCiAgICB2aXJ0dWFsIHZv aWQgQ3V0KCk7DQogICAgdmlydHVhbCB2b2lkIFBhc3RlKCk7DQoNCiAgICB2aXJ0dWFsIGJvb2wg Q2FuQ29weSgpIGNvbnN0Ow0KICAgIHZpcnR1YWwgYm9vbCBDYW5DdXQoKSBjb25zdDsNCiAgICB2 aXJ0dWFsIGJvb2wgQ2FuUGFzdGUoKSBjb25zdDsNCg0KDQogICAgdmlydHVhbCB2b2lkIFVuZG8o KTsNCiAgICB2aXJ0dWFsIHZvaWQgUmVkbygpOw0KDQogICAgdmlydHVhbCBib29sIENhblVuZG8o KSBjb25zdDsNCiAgICB2aXJ0dWFsIGJvb2wgQ2FuUmVkbygpIGNvbnN0Ow0KDQoNCiAgICB2aXJ0 dWFsIHZvaWQgU2V0SW5zZXJ0aW9uUG9pbnQobG9uZyBwb3MpOw0KICAgIHZpcnR1YWwgdm9pZCBT ZXRJbnNlcnRpb25Qb2ludEVuZCgpOw0KICAgIHZpcnR1YWwgbG9uZyBHZXRJbnNlcnRpb25Qb2lu dCgpIGNvbnN0Ow0KICAgIHZpcnR1YWwgbG9uZyBHZXRMYXN0UG9zaXRpb24oKSBjb25zdDsNCg0K ICAgIHZpcnR1YWwgdm9pZCBTZXRTZWxlY3Rpb24obG9uZyBmcm9tLCBsb25nIHRvKTsNCiAgICB2 aXJ0dWFsIHZvaWQgU2V0RWRpdGFibGUoYm9vbCBlZGl0YWJsZSk7DQoNCg0KDQoNCiAgICB2aXJ0 dWFsIHZvaWQgQ29tbWFuZCh3eENvbW1hbmRFdmVudCYgZXZlbnQpOw0KICAgIHZpcnR1YWwgYm9v bCBNU1dDb21tYW5kKFdYVUlOVCBwYXJhbSwgV1hXT1JEIGlkKTsNCiAgICB2aXJ0dWFsIFdYSEJS VVNIIE9uQ3RsQ29sb3IoV1hIREMgcERDLCBXWEhXTkQgcFduZCwgV1hVSU5UIG5DdGxDb2xvciwN CiAgICAgICAgICAgIFdYVUlOVCBtZXNzYWdlLCBXWFdQQVJBTSB3UGFyYW0sIFdYTFBBUkFNIGxQ YXJhbSk7DQojIDEyOCAiLi4vLi4vaW5jbHVkZS93eC9tc3cvdGV4dGN0cmwuaCINCiAgICBib29s IElzUmljaCgpIGNvbnN0IHsgcmV0dXJuIG1faXNSaWNoOyB9DQogICAgdm9pZCBTZXRSaWNoRWRp dChib29sIGlzUmljaCkgeyBtX2lzUmljaCA9IGlzUmljaDsgfQ0KDQoNCg0KICAgIHZpcnR1YWwg Ym9vbCBTZXRCYWNrZ3JvdW5kQ29sb3VyKGNvbnN0IHd4Q29sb3VyJiBjb2xvdXIpOw0KICAgIHZp cnR1YWwgYm9vbCBTZXRGb3JlZ3JvdW5kQ29sb3VyKGNvbnN0IHd4Q29sb3VyJiBjb2xvdXIpOw0K DQoNCiAgICB2aXJ0dWFsIHZvaWQgQWRvcHRBdHRyaWJ1dGVzRnJvbUhXTkQoKTsNCiAgICB2aXJ0 dWFsIHZvaWQgU2V0dXBDb2xvdXJzKCk7DQoNCiAgICB2aXJ0dWFsIGJvb2wgQWNjZXB0c0ZvY3Vz KCkgY29uc3Q7DQoNCg0KICAgIHZvaWQgT25Ecm9wRmlsZXMod3hEcm9wRmlsZXNFdmVudCYgZXZl bnQpOw0KICAgIHZvaWQgT25DaGFyKHd4S2V5RXZlbnQmIGV2ZW50KTsNCg0KICAgIHZvaWQgT25D dXQod3hDb21tYW5kRXZlbnQmIGV2ZW50KTsNCiAgICB2b2lkIE9uQ29weSh3eENvbW1hbmRFdmVu dCYgZXZlbnQpOw0KICAgIHZvaWQgT25QYXN0ZSh3eENvbW1hbmRFdmVudCYgZXZlbnQpOw0KICAg IHZvaWQgT25VbmRvKHd4Q29tbWFuZEV2ZW50JiBldmVudCk7DQogICAgdm9pZCBPblJlZG8od3hD b21tYW5kRXZlbnQmIGV2ZW50KTsNCg0KICAgIHZvaWQgT25VcGRhdGVDdXQod3hVcGRhdGVVSUV2 ZW50JiBldmVudCk7DQogICAgdm9pZCBPblVwZGF0ZUNvcHkod3hVcGRhdGVVSUV2ZW50JiBldmVu dCk7DQogICAgdm9pZCBPblVwZGF0ZVBhc3RlKHd4VXBkYXRlVUlFdmVudCYgZXZlbnQpOw0KICAg IHZvaWQgT25VcGRhdGVVbmRvKHd4VXBkYXRlVUlFdmVudCYgZXZlbnQpOw0KICAgIHZvaWQgT25V cGRhdGVSZWRvKHd4VXBkYXRlVUlFdmVudCYgZXZlbnQpOw0KDQpwcm90ZWN0ZWQ6DQoNCiAgICBi b29sIG1faXNSaWNoOw0KDQoNCg0KDQogICAgdm9pZCBBZGp1c3RTcGFjZUxpbWl0KCk7DQoNCiAg ICB2aXJ0dWFsIHd4U2l6ZSBEb0dldEJlc3RTaXplKCkgY29uc3Q7DQoNCnByaXZhdGU6DQogICAg cHJpdmF0ZTogc3RhdGljIGNvbnN0IHd4RXZlbnRUYWJsZUVudHJ5IHNtX2V2ZW50VGFibGVFbnRy aWVzW107cHJvdGVjdGVkOiBzdGF0aWMgY29uc3Qgd3hFdmVudFRhYmxlIHNtX2V2ZW50VGFibGU7 IHZpcnR1YWwgY29uc3Qgd3hFdmVudFRhYmxlKiBHZXRFdmVudFRhYmxlKCkgY29uc3Q7DQogICAg cHVibGljOiBzdGF0aWMgd3hDbGFzc0luZm8gc21fY2xhc3N3eFRleHRDdHJsOyB3eENsYXNzSW5m byAqR2V0Q2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnd4VGV4dEN0cmw6OnNtX2NsYXNzd3hU ZXh0Q3RybDsgfQ0KfTsNCiMgMTc4ICIuLi8uLi9pbmNsdWRlL3d4L3RleHRjdHJsLmgiIDINCiMg NjEgIi4uLy4uL2luY2x1ZGUvd3gvd3guaCIgMg0KIyAxICIuLi8uLi9pbmNsdWRlL3d4L3NsaWRl ci5oIiAxDQoNCg0KDQoNCiMgMSAiLi4vLi4vaW5jbHVkZS93eC9tc3cvc2xpZGVyLmgiIDENCiMg MTYgIi4uLy4uL2luY2x1ZGUvd3gvbXN3L3NsaWRlci5oIg0KI3ByYWdtYSBpbnRlcmZhY2UgInNs aWRlci5oIg0KDQoNCg0KIyAxICIuLi8uLi9pbmNsdWRlL3d4L21zdy9zbGlkZXI5NS5oIiAxDQoj IDE2ICIuLi8uLi9pbmNsdWRlL3d4L21zdy9zbGlkZXI5NS5oIg0KI3ByYWdtYSBpbnRlcmZhY2Ug InNsaWRlcjk1LmgiDQoNCg0KDQoNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGV4dGVybiBj b25zdCBjaGFyKiB3eFNsaWRlck5hbWVTdHI7DQoNCg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxs aW1wb3J0KSkgd3hTbGlkZXI5NSA6IHB1YmxpYyB3eENvbnRyb2wNCnsNCiAgICBwdWJsaWM6IHN0 YXRpYyB3eENsYXNzSW5mbyBzbV9jbGFzc3d4U2xpZGVyOTU7IHd4Q2xhc3NJbmZvICpHZXRDbGFz c0luZm8oKSBjb25zdCB7IHJldHVybiAmd3hTbGlkZXI5NTo6c21fY2xhc3N3eFNsaWRlcjk1OyB9 DQoNCnB1YmxpYzoNCiAgICB3eFNsaWRlcjk1KCk7DQoNCiAgICB3eFNsaWRlcjk1KHd4V2luZG93 ICpwYXJlbnQsIHd4V2luZG93SUQgaWQsDQogICAgICAgICAgICBpbnQgdmFsdWUsIGludCBtaW5W YWx1ZSwgaW50IG1heFZhbHVlLA0KICAgICAgICAgICAgY29uc3Qgd3hQb2ludCYgcG9zID0gd3hE ZWZhdWx0UG9zaXRpb24sDQogICAgICAgICAgICBjb25zdCB3eFNpemUmIHNpemUgPSB3eERlZmF1 bHRTaXplLA0KICAgICAgICAgICAgbG9uZyBzdHlsZSA9IHd4SE9SSVpPTlRBTCwNCiAgICAgICAg ICAgIGNvbnN0IHd4VmFsaWRhdG9yJiB2YWxpZGF0b3IgPSB3eERlZmF1bHRWYWxpZGF0b3IsDQog ICAgICAgICAgICBjb25zdCB3eFN0cmluZyYgbmFtZSA9IHd4U2xpZGVyTmFtZVN0cikNCiAgICB7 DQogICAgICAgIENyZWF0ZShwYXJlbnQsIGlkLCB2YWx1ZSwgbWluVmFsdWUsIG1heFZhbHVlLCBw b3MsIHNpemUsIHN0eWxlLCB2YWxpZGF0b3IsIG5hbWUpOw0KICAgIH0NCg0KICAgIH53eFNsaWRl cjk1KCk7DQoNCiAgICBib29sIENyZWF0ZSh3eFdpbmRvdyAqcGFyZW50LCB3eFdpbmRvd0lEIGlk LA0KICAgICAgICAgICAgaW50IHZhbHVlLCBpbnQgbWluVmFsdWUsIGludCBtYXhWYWx1ZSwNCiAg ICAgICAgICAgIGNvbnN0IHd4UG9pbnQmIHBvcyA9IHd4RGVmYXVsdFBvc2l0aW9uLA0KICAgICAg ICAgICAgY29uc3Qgd3hTaXplJiBzaXplID0gd3hEZWZhdWx0U2l6ZSwNCiAgICAgICAgICAgIGxv bmcgc3R5bGUgPSB3eEhPUklaT05UQUwsDQogICAgICAgICAgICBjb25zdCB3eFZhbGlkYXRvciYg dmFsaWRhdG9yID0gd3hEZWZhdWx0VmFsaWRhdG9yLA0KICAgICAgICAgICAgY29uc3Qgd3hTdHJp bmcmIG5hbWUgPSB3eFNsaWRlck5hbWVTdHIpOw0KDQogICAgdmlydHVhbCBpbnQgR2V0VmFsdWUo KSBjb25zdCA7DQogICAgdmlydHVhbCB2b2lkIFNldFZhbHVlKGludCk7DQoNCiAgICB2b2lkIEdl dFNpemUoaW50ICp4LCBpbnQgKnkpIGNvbnN0IDsNCiAgICB2b2lkIEdldFBvc2l0aW9uKGludCAq eCwgaW50ICp5KSBjb25zdCA7DQoNCiAgICBib29sIFNob3coYm9vbCBzaG93KTsNCg0KICAgIHZv aWQgU2V0UmFuZ2UoaW50IG1pblZhbHVlLCBpbnQgbWF4VmFsdWUpOw0KDQogICAgaW50IEdldE1p bigpIGNvbnN0IHsgcmV0dXJuIG1fcmFuZ2VNaW47IH0NCiAgICBpbnQgR2V0TWF4KCkgY29uc3Qg eyByZXR1cm4gbV9yYW5nZU1heDsgfQ0KDQoNCiAgICB2b2lkIFNldFRpY2tGcmVxKGludCBuLCBp bnQgcG9zKTsNCiAgICBpbnQgR2V0VGlja0ZyZXEoKSBjb25zdCB7IHJldHVybiBtX3RpY2tGcmVx OyB9DQogICAgdm9pZCBTZXRQYWdlU2l6ZShpbnQgcGFnZVNpemUpOw0KICAgIGludCBHZXRQYWdl U2l6ZSgpIGNvbnN0IDsNCiAgICB2b2lkIENsZWFyU2VsKCkgOw0KICAgIHZvaWQgQ2xlYXJUaWNr cygpIDsNCiAgICB2b2lkIFNldExpbmVTaXplKGludCBsaW5lU2l6ZSk7DQogICAgaW50IEdldExp bmVTaXplKCkgY29uc3QgOw0KICAgIGludCBHZXRTZWxFbmQoKSBjb25zdCA7DQogICAgaW50IEdl dFNlbFN0YXJ0KCkgY29uc3QgOw0KICAgIHZvaWQgU2V0U2VsZWN0aW9uKGludCBtaW5Qb3MsIGlu dCBtYXhQb3MpOw0KICAgIHZvaWQgU2V0VGh1bWJMZW5ndGgoaW50IGxlbikgOw0KICAgIGludCBH ZXRUaHVtYkxlbmd0aCgpIGNvbnN0IDsNCiAgICB2b2lkIFNldFRpY2soaW50IHRpY2tQb3MpIDsN Cg0KDQogICAgV1hIV05EIEdldFN0YXRpY01pbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGljTWlu OyB9DQogICAgV1hIV05EIEdldFN0YXRpY01heCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGljTWF4 OyB9DQogICAgV1hIV05EIEdldEVkaXRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGljVmFs dWU7IH0NCiAgICB2aXJ0dWFsIGJvb2wgQ29udGFpbnNIV05EKFdYSFdORCBoV25kKSBjb25zdDsN Cg0KICAgIHZvaWQgQ29tbWFuZCh3eENvbW1hbmRFdmVudCYgZXZlbnQpOw0KICAgIHZpcnR1YWwg V1hIQlJVU0ggT25DdGxDb2xvcihXWEhEQyBwREMsIFdYSFdORCBwV25kLCBXWFVJTlQgbkN0bENv bG9yLA0KICAgICAgICAgICAgV1hVSU5UIG1lc3NhZ2UsIFdYV1BBUkFNIHdQYXJhbSwgV1hMUEFS QU0gbFBhcmFtKTsNCiAgICB2aXJ0dWFsIGJvb2wgTVNXT25TY3JvbGwoaW50IG9yaWVudGF0aW9u LCBXWFdPUkQgd1BhcmFtLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXWFdPUkQgcG9z LCBXWEhXTkQgY29udHJvbCk7DQoNCnByb3RlY3RlZDoNCiAgICBXWEhXTkQgbV9zdGF0aWNNaW47 DQogICAgV1hIV05EIG1fc3RhdGljTWF4Ow0KICAgIFdYSFdORCBtX3N0YXRpY1ZhbHVlOw0KICAg IGludCBtX3JhbmdlTWluOw0KICAgIGludCBtX3JhbmdlTWF4Ow0KICAgIGludCBtX3BhZ2VTaXpl Ow0KICAgIGludCBtX2xpbmVTaXplOw0KICAgIGludCBtX3RpY2tGcmVxOw0KDQogICAgdmlydHVh bCB2b2lkIERvU2V0U2l6ZShpbnQgeCwgaW50IHksDQogICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgd2lkdGgsIGludCBoZWlnaHQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg c2l6ZUZsYWdzID0gKDB4MDAwMXwweDAwMDIpKTsNCn07DQojIDIxICIuLi8uLi9pbmNsdWRlL3d4 L21zdy9zbGlkZXIuaCIgMg0KIyA2ICIuLi8uLi9pbmNsdWRlL3d4L3NsaWRlci5oIiAyDQojIDYy ICIuLi8uLi9pbmNsdWRlL3d4L3d4LmgiIDINCiMgMSAiLi4vLi4vaW5jbHVkZS93eC9nYXVnZS5o IiAxDQoNCg0KDQoNCiMgMSAiLi4vLi4vaW5jbHVkZS93eC9tc3cvZ2F1Z2UuaCIgMQ0KIyAxNiAi Li4vLi4vaW5jbHVkZS93eC9tc3cvZ2F1Z2UuaCINCiNwcmFnbWEgaW50ZXJmYWNlICJnYXVnZS5o Ig0KDQoNCg0KIyAxICIuLi8uLi9pbmNsdWRlL3d4L21zdy9nYXVnZTk1LmgiIDENCiMgMTYgIi4u Ly4uL2luY2x1ZGUvd3gvbXN3L2dhdWdlOTUuaCINCiNwcmFnbWEgaW50ZXJmYWNlICJnYXVnZTk1 LmgiDQoNCg0KDQoNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGV4dGVybiBjb25zdCBjaGFy KiB3eEdhdWdlTmFtZVN0cjsNCg0KDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3 eEdhdWdlOTUgOiBwdWJsaWMgd3hDb250cm9sDQp7DQogICAgcHVibGljOiBzdGF0aWMgd3hDbGFz c0luZm8gc21fY2xhc3N3eEdhdWdlOTU7IHd4Q2xhc3NJbmZvICpHZXRDbGFzc0luZm8oKSBjb25z dCB7IHJldHVybiAmd3hHYXVnZTk1OjpzbV9jbGFzc3d4R2F1Z2U5NTsgfQ0KDQpwdWJsaWM6DQog ICAgd3hHYXVnZTk1KHZvaWQpIHsgbV9yYW5nZU1heCA9IDA7IG1fZ2F1Z2VQb3MgPSAwOyB9DQoN CiAgICB3eEdhdWdlOTUod3hXaW5kb3cgKnBhcmVudCwgd3hXaW5kb3dJRCBpZCwNCiAgICAgICAg ICAgIGludCByYW5nZSwNCiAgICAgICAgICAgIGNvbnN0IHd4UG9pbnQmIHBvcyA9IHd4RGVmYXVs dFBvc2l0aW9uLA0KICAgICAgICAgICAgY29uc3Qgd3hTaXplJiBzaXplID0gd3hEZWZhdWx0U2l6 ZSwNCiAgICAgICAgICAgIGxvbmcgc3R5bGUgPSB3eEhPUklaT05UQUwsDQogICAgICAgICAgICBj b25zdCB3eFZhbGlkYXRvciYgdmFsaWRhdG9yID0gd3hEZWZhdWx0VmFsaWRhdG9yLA0KICAgICAg ICAgICAgY29uc3Qgd3hTdHJpbmcmIG5hbWUgPSB3eEdhdWdlTmFtZVN0cikNCiAgICB7DQogICAg ICAgIENyZWF0ZShwYXJlbnQsIGlkLCByYW5nZSwgcG9zLCBzaXplLCBzdHlsZSwgdmFsaWRhdG9y LCBuYW1lKTsNCiAgICB9DQoNCiAgICBib29sIENyZWF0ZSh3eFdpbmRvdyAqcGFyZW50LCB3eFdp bmRvd0lEIGlkLA0KICAgICAgICAgICAgaW50IHJhbmdlLA0KICAgICAgICAgICAgY29uc3Qgd3hQ b2ludCYgcG9zID0gd3hEZWZhdWx0UG9zaXRpb24sDQogICAgICAgICAgICBjb25zdCB3eFNpemUm IHNpemUgPSB3eERlZmF1bHRTaXplLA0KICAgICAgICAgICAgbG9uZyBzdHlsZSA9IHd4SE9SSVpP TlRBTCwNCiAgICAgICAgICAgIGNvbnN0IHd4VmFsaWRhdG9yJiB2YWxpZGF0b3IgPSB3eERlZmF1 bHRWYWxpZGF0b3IsDQogICAgICAgICAgICBjb25zdCB3eFN0cmluZyYgbmFtZSA9IHd4R2F1Z2VO YW1lU3RyKTsNCg0KICAgIHZvaWQgU2V0U2hhZG93V2lkdGgoaW50IHcpOw0KICAgIHZvaWQgU2V0 QmV6ZWxGYWNlKGludCB3KTsNCiAgICB2b2lkIFNldFJhbmdlKGludCByKTsNCiAgICB2b2lkIFNl dFZhbHVlKGludCBwb3MpOw0KDQogICAgaW50IEdldFNoYWRvd1dpZHRoKHZvaWQpIGNvbnN0IDsN CiAgICBpbnQgR2V0QmV6ZWxGYWNlKHZvaWQpIGNvbnN0IDsNCiAgICBpbnQgR2V0UmFuZ2Uodm9p ZCkgY29uc3QgOw0KICAgIGludCBHZXRWYWx1ZSh2b2lkKSBjb25zdCA7DQoNCiAgICBib29sIFNl dEZvcmVncm91bmRDb2xvdXIoY29uc3Qgd3hDb2xvdXImIGNvbCk7DQogICAgYm9vbCBTZXRCYWNr Z3JvdW5kQ29sb3VyKGNvbnN0IHd4Q29sb3VyJiBjb2wpOw0KDQoNCiAgICB2aXJ0dWFsIGJvb2wg QWNjZXB0c0ZvY3VzKCkgY29uc3QgeyByZXR1cm4gMDsgfQ0KDQoNCg0KDQoNCg0KICAgIHZpcnR1 YWwgdm9pZCBDb21tYW5kKHd4Q29tbWFuZEV2ZW50JiApIHt9IDsNCg0KcHJvdGVjdGVkOg0KICAg IGludCBtX3JhbmdlTWF4Ow0KICAgIGludCBtX2dhdWdlUG9zOw0KfTsNCiMgMjEgIi4uLy4uL2lu Y2x1ZGUvd3gvbXN3L2dhdWdlLmgiIDINCiMgNiAiLi4vLi4vaW5jbHVkZS93eC9nYXVnZS5oIiAy DQojIDYzICIuLi8uLi9pbmNsdWRlL3d4L3d4LmgiIDINCiMgMSAiLi4vLi4vaW5jbHVkZS93eC9j b21ib2JveC5oIiAxDQoNCg0KDQoNCiMgMSAiLi4vLi4vaW5jbHVkZS93eC9tc3cvY29tYm9ib3gu aCIgMQ0KIyAxNiAiLi4vLi4vaW5jbHVkZS93eC9tc3cvY29tYm9ib3guaCINCiNwcmFnbWEgaW50 ZXJmYWNlICJjb21ib2JveC5oIg0KDQoNCg0KDQoNCg0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0 KSkgZXh0ZXJuIGNvbnN0IGNoYXIqIHd4Q29tYm9Cb3hOYW1lU3RyOw0KX19hdHRyaWJ1dGVfXygo ZGxsaW1wb3J0KSkgZXh0ZXJuIGNvbnN0IGNoYXIqIHd4RW1wdHlTdHJpbmc7DQoNCg0KDQoNCg0K Y2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hDb21ib0JveDogcHVibGljIHd4Q2hv aWNlDQp7DQogICAgcHVibGljOiBzdGF0aWMgd3hDbGFzc0luZm8gc21fY2xhc3N3eENvbWJvQm94 OyB3eENsYXNzSW5mbyAqR2V0Q2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnd4Q29tYm9Cb3g6 OnNtX2NsYXNzd3hDb21ib0JveDsgfQ0KDQpwdWJsaWM6DQogICAgd3hDb21ib0JveCgpIHsgfQ0K DQogICAgd3hDb21ib0JveCh3eFdpbmRvdyAqcGFyZW50LCB3eFdpbmRvd0lEIGlkLA0KICAgICAg ICAgICAgY29uc3Qgd3hTdHJpbmcmIHZhbHVlID0gd3hFbXB0eVN0cmluZywNCiAgICAgICAgICAg IGNvbnN0IHd4UG9pbnQmIHBvcyA9IHd4RGVmYXVsdFBvc2l0aW9uLA0KICAgICAgICAgICAgY29u c3Qgd3hTaXplJiBzaXplID0gd3hEZWZhdWx0U2l6ZSwNCiAgICAgICAgICAgIGludCBuID0gMCwg Y29uc3Qgd3hTdHJpbmcgY2hvaWNlc1tdID0gX19udWxsLA0KICAgICAgICAgICAgbG9uZyBzdHls ZSA9IDAsDQogICAgICAgICAgICBjb25zdCB3eFZhbGlkYXRvciYgdmFsaWRhdG9yID0gd3hEZWZh dWx0VmFsaWRhdG9yLA0KICAgICAgICAgICAgY29uc3Qgd3hTdHJpbmcmIG5hbWUgPSB3eENvbWJv Qm94TmFtZVN0cikNCiAgICB7DQogICAgICAgIENyZWF0ZShwYXJlbnQsIGlkLCB2YWx1ZSwgcG9z LCBzaXplLCBuLCBjaG9pY2VzLCBzdHlsZSwgdmFsaWRhdG9yLCBuYW1lKTsNCiAgICB9DQoNCiAg ICBib29sIENyZWF0ZSh3eFdpbmRvdyAqcGFyZW50LA0KICAgICAgICAgICAgICAgIHd4V2luZG93 SUQgaWQsDQogICAgICAgICAgICAgICAgY29uc3Qgd3hTdHJpbmcmIHZhbHVlID0gd3hFbXB0eVN0 cmluZywNCiAgICAgICAgICAgICAgICBjb25zdCB3eFBvaW50JiBwb3MgPSB3eERlZmF1bHRQb3Np dGlvbiwNCiAgICAgICAgICAgICAgICBjb25zdCB3eFNpemUmIHNpemUgPSB3eERlZmF1bHRTaXpl LA0KICAgICAgICAgICAgICAgIGludCBuID0gMCwNCiAgICAgICAgICAgICAgICBjb25zdCB3eFN0 cmluZyBjaG9pY2VzW10gPSBfX251bGwsDQogICAgICAgICAgICAgICAgbG9uZyBzdHlsZSA9IDAs DQogICAgICAgICAgICAgICAgY29uc3Qgd3hWYWxpZGF0b3ImIHZhbGlkYXRvciA9IHd4RGVmYXVs dFZhbGlkYXRvciwNCiAgICAgICAgICAgICAgICBjb25zdCB3eFN0cmluZyYgbmFtZSA9IHd4Q29t Ym9Cb3hOYW1lU3RyKTsNCg0KDQoNCg0KICAgIHd4U3RyaW5nIEdldFZhbHVlKCkgY29uc3QgeyBy ZXR1cm4gR2V0TGFiZWwoKTsgfQ0KICAgIHZpcnR1YWwgdm9pZCBTZXRWYWx1ZShjb25zdCB3eFN0 cmluZyYgdmFsdWUpOw0KDQoNCiAgICB2aXJ0dWFsIHZvaWQgQ29weSgpOw0KICAgIHZpcnR1YWwg dm9pZCBDdXQoKTsNCiAgICB2aXJ0dWFsIHZvaWQgUGFzdGUoKTsNCiAgICB2aXJ0dWFsIHZvaWQg U2V0SW5zZXJ0aW9uUG9pbnQobG9uZyBwb3MpOw0KICAgIHZpcnR1YWwgdm9pZCBTZXRJbnNlcnRp b25Qb2ludEVuZCgpOw0KICAgIHZpcnR1YWwgbG9uZyBHZXRJbnNlcnRpb25Qb2ludCgpIGNvbnN0 Ow0KICAgIHZpcnR1YWwgbG9uZyBHZXRMYXN0UG9zaXRpb24oKSBjb25zdDsNCiAgICB2aXJ0dWFs IHZvaWQgUmVwbGFjZShsb25nIGZyb20sIGxvbmcgdG8sIGNvbnN0IHd4U3RyaW5nJiB2YWx1ZSk7 DQogICAgdmlydHVhbCB2b2lkIFJlbW92ZShsb25nIGZyb20sIGxvbmcgdG8pOw0KICAgIHZpcnR1 YWwgdm9pZCBTZXRTZWxlY3Rpb24oaW50IG4pIHsgd3hDaG9pY2U6OlNldFNlbGVjdGlvbihuKTsg fQ0KICAgIHZpcnR1YWwgdm9pZCBTZXRTZWxlY3Rpb24obG9uZyBmcm9tLCBsb25nIHRvKTsNCiAg ICB2aXJ0dWFsIHZvaWQgU2V0RWRpdGFibGUoYm9vbCBlZGl0YWJsZSk7DQoNCg0KICAgIHZpcnR1 YWwgYm9vbCBNU1dDb21tYW5kKFdYVUlOVCBwYXJhbSwgV1hXT1JEIGlkKTsNCiAgICBib29sIE1T V1Byb2Nlc3NFZGl0TXNnKFdYVUlOVCBtc2csIFdYV1BBUkFNIHdQYXJhbSwgV1hMUEFSQU0gbFBh cmFtKTsNCiAgICB2aXJ0dWFsIFdYSEJSVVNIIE9uQ3RsQ29sb3IoV1hIREMgcERDLCBXWEhXTkQg cFduZCwgV1hVSU5UIG5DdGxDb2xvciwNCiAgICAgICAgICAgIFdYVUlOVCBtZXNzYWdlLCBXWFdQ QVJBTSB3UGFyYW0sIFdYTFBBUkFNIGxQYXJhbSk7DQoNCiAgICBXWEhXTkQgR2V0RWRpdEhXTkQo KSBjb25zdDsNCg0KcHJvdGVjdGVkOg0KICAgIHZpcnR1YWwgdm9pZCBEb01vdmVXaW5kb3coaW50 IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOw0KICAgIHZpcnR1YWwgd3hTaXplIERv R2V0QmVzdFNpemUoKSBjb25zdDsNCn07DQojIDYgIi4uLy4uL2luY2x1ZGUvd3gvY29tYm9ib3gu aCIgMg0KIyA2NCAiLi4vLi4vaW5jbHVkZS93eC93eC5oIiAyDQojIDEgIi4uLy4uL2luY2x1ZGUv d3gvbGF5b3V0LmgiIDENCiMgMjAgIi4uLy4uL2luY2x1ZGUvd3gvbGF5b3V0LmgiDQojcHJhZ21h IGludGVyZmFjZSAibGF5b3V0LmgiDQojIDM3ICIuLi8uLi9pbmNsdWRlL3d4L2xheW91dC5oIg0K Y2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hXaW5kb3dCYXNlOw0KY2xhc3MgX19h dHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hMYXlvdXRDb25zdHJhaW50czsNCg0KDQoNCg0KDQoN Cg0KZW51bSB3eEVkZ2UNCnsNCiAgICB3eExlZnQsIHd4VG9wLCB3eFJpZ2h0LCB3eEJvdHRvbSwg d3hXaWR0aCwgd3hIZWlnaHQsDQogICAgd3hDZW50cmUsIHd4Q2VudGVyID0gd3hDZW50cmUsIHd4 Q2VudHJlWCwgd3hDZW50cmVZDQp9Ow0KDQplbnVtIHd4UmVsYXRpb25zaGlwDQp7DQogICAgd3hV bmNvbnN0cmFpbmVkID0gMCwNCiAgICB3eEFzSXMsDQogICAgd3hQZXJjZW50T2YsDQogICAgd3hB Ym92ZSwNCiAgICB3eEJlbG93LA0KICAgIHd4TGVmdE9mLA0KICAgIHd4UmlnaHRPZiwNCiAgICB3 eFNhbWVBcywNCiAgICB3eEFic29sdXRlDQp9Ow0KDQoNCg0KDQoNCmNsYXNzIF9fYXR0cmlidXRl X18oKGRsbGltcG9ydCkpIHd4SW5kaXZpZHVhbExheW91dENvbnN0cmFpbnQgOiBwdWJsaWMgd3hP YmplY3QNCnsNCiAgICBwdWJsaWM6IHN0YXRpYyB3eENsYXNzSW5mbyBzbV9jbGFzc3d4SW5kaXZp ZHVhbExheW91dENvbnN0cmFpbnQ7IHd4Q2xhc3NJbmZvICpHZXRDbGFzc0luZm8oKSBjb25zdCB7 IHJldHVybiAmd3hJbmRpdmlkdWFsTGF5b3V0Q29uc3RyYWludDo6c21fY2xhc3N3eEluZGl2aWR1 YWxMYXlvdXRDb25zdHJhaW50OyB9DQoNCnByb3RlY3RlZDoNCg0KICAgIGZyaWVuZCBjbGFzcyB3 eEluZGl2aWR1YWxMYXlvdXRDb25zdHJhaW50X1NlcmlhbGl6ZTsNCg0KDQogICAgd3hXaW5kb3dC YXNlICpvdGhlcldpbjsNCg0KICAgIHd4RWRnZSBteUVkZ2U7DQogICAgd3hSZWxhdGlvbnNoaXAg cmVsYXRpb25zaGlwOw0KICAgIGludCBtYXJnaW47DQogICAgaW50IHZhbHVlOw0KICAgIGludCBw ZXJjZW50Ow0KICAgIHd4RWRnZSBvdGhlckVkZ2U7DQogICAgYm9vbCBkb25lOw0KDQpwdWJsaWM6 DQogICAgd3hJbmRpdmlkdWFsTGF5b3V0Q29uc3RyYWludCgpOw0KICAgIH53eEluZGl2aWR1YWxM YXlvdXRDb25zdHJhaW50KCk7DQoNCiAgICB2b2lkIFNldCh3eFJlbGF0aW9uc2hpcCByZWwsIHd4 V2luZG93QmFzZSAqb3RoZXJXLCB3eEVkZ2Ugb3RoZXJFLCBpbnQgdmFsID0gMCwgaW50IG1hcmcg PSAwKTsNCg0KDQoNCg0KICAgIHZvaWQgTGVmdE9mKHd4V2luZG93QmFzZSAqc2libGluZywgaW50 IG1hcmcgPSAwKTsNCiAgICB2b2lkIFJpZ2h0T2Yod3hXaW5kb3dCYXNlICpzaWJsaW5nLCBpbnQg bWFyZyA9IDApOw0KICAgIHZvaWQgQWJvdmUod3hXaW5kb3dCYXNlICpzaWJsaW5nLCBpbnQgbWFy ZyA9IDApOw0KICAgIHZvaWQgQmVsb3cod3hXaW5kb3dCYXNlICpzaWJsaW5nLCBpbnQgbWFyZyA9 IDApOw0KDQoNCg0KDQogICAgdm9pZCBTYW1lQXMod3hXaW5kb3dCYXNlICpvdGhlclcsIHd4RWRn ZSBlZGdlLCBpbnQgbWFyZyA9IDApOw0KDQoNCiAgICB2b2lkIFBlcmNlbnRPZih3eFdpbmRvd0Jh c2UgKm90aGVyVywgd3hFZGdlIHdoLCBpbnQgcGVyKTsNCg0KDQoNCg0KICAgIHZvaWQgQWJzb2x1 dGUoaW50IHZhbCk7DQoNCg0KDQoNCiAgICB2b2lkIFVuY29uc3RyYWluZWQoKSB7IHJlbGF0aW9u c2hpcCA9IHd4VW5jb25zdHJhaW5lZDsgfQ0KDQoNCg0KDQogICAgdm9pZCBBc0lzKCkgeyByZWxh dGlvbnNoaXAgPSB3eEFzSXM7IH0NCg0KDQoNCg0KICAgIHd4V2luZG93QmFzZSAqR2V0T3RoZXJX aW5kb3coKSB7IHJldHVybiBvdGhlcldpbjsgfQ0KICAgIHd4RWRnZSBHZXRNeUVkZ2UoKSBjb25z dCB7IHJldHVybiBteUVkZ2U7IH0NCiAgICB2b2lkIFNldEVkZ2Uod3hFZGdlIHdoaWNoKSB7IG15 RWRnZSA9IHdoaWNoOyB9DQogICAgdm9pZCBTZXRWYWx1ZShpbnQgdikgeyB2YWx1ZSA9IHY7IH0N CiAgICBpbnQgR2V0TWFyZ2luKCkgeyByZXR1cm4gbWFyZ2luOyB9DQogICAgdm9pZCBTZXRNYXJn aW4oaW50IG0pIHsgbWFyZ2luID0gbTsgfQ0KICAgIGludCBHZXRWYWx1ZSgpIGNvbnN0IHsgcmV0 dXJuIHZhbHVlOyB9DQogICAgaW50IEdldFBlcmNlbnQoKSBjb25zdCB7IHJldHVybiBwZXJjZW50 OyB9DQogICAgaW50IEdldE90aGVyRWRnZSgpIGNvbnN0IHsgcmV0dXJuIG90aGVyRWRnZTsgfQ0K ICAgIGJvb2wgR2V0RG9uZSgpIGNvbnN0IHsgcmV0dXJuIGRvbmU7IH0NCiAgICB2b2lkIFNldERv bmUoYm9vbCBkKSB7IGRvbmUgPSBkOyB9DQogICAgd3hSZWxhdGlvbnNoaXAgR2V0UmVsYXRpb25z aGlwKCkgeyByZXR1cm4gcmVsYXRpb25zaGlwOyB9DQogICAgdm9pZCBTZXRSZWxhdGlvbnNoaXAo d3hSZWxhdGlvbnNoaXAgcikgeyByZWxhdGlvbnNoaXAgPSByOyB9DQoNCg0KICAgIGJvb2wgUmVz ZXRJZldpbih3eFdpbmRvd0Jhc2UgKm90aGVyVyk7DQoNCg0KICAgIGJvb2wgU2F0aXNmeUNvbnN0 cmFpbnQod3hMYXlvdXRDb25zdHJhaW50cyAqY29uc3RyYWludHMsIHd4V2luZG93QmFzZSAqd2lu KTsNCg0KDQoNCiAgICBpbnQgR2V0RWRnZSh3eEVkZ2Ugd2hpY2gsIHd4V2luZG93QmFzZSAqdGhp c1dpbiwgd3hXaW5kb3dCYXNlICpvdGhlcikgY29uc3Q7DQp9Ow0KDQoNCg0KDQoNCmNsYXNzIF9f YXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4TGF5b3V0Q29uc3RyYWludHMgOiBwdWJsaWMgd3hP YmplY3QNCnsNCiAgICBwdWJsaWM6IHN0YXRpYyB3eENsYXNzSW5mbyBzbV9jbGFzc3d4TGF5b3V0 Q29uc3RyYWludHM7IHd4Q2xhc3NJbmZvICpHZXRDbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAm d3hMYXlvdXRDb25zdHJhaW50czo6c21fY2xhc3N3eExheW91dENvbnN0cmFpbnRzOyB9DQoNCnB1 YmxpYzoNCg0KICAgIHd4SW5kaXZpZHVhbExheW91dENvbnN0cmFpbnQgbGVmdDsNCiAgICB3eElu ZGl2aWR1YWxMYXlvdXRDb25zdHJhaW50IHRvcDsNCiAgICB3eEluZGl2aWR1YWxMYXlvdXRDb25z dHJhaW50IHJpZ2h0Ow0KICAgIHd4SW5kaXZpZHVhbExheW91dENvbnN0cmFpbnQgYm90dG9tOw0K DQogICAgd3hJbmRpdmlkdWFsTGF5b3V0Q29uc3RyYWludCB3aWR0aDsNCiAgICB3eEluZGl2aWR1 YWxMYXlvdXRDb25zdHJhaW50IGhlaWdodDsNCg0KICAgIHd4SW5kaXZpZHVhbExheW91dENvbnN0 cmFpbnQgY2VudHJlWDsNCiAgICB3eEluZGl2aWR1YWxMYXlvdXRDb25zdHJhaW50IGNlbnRyZVk7 DQoNCiAgICB3eExheW91dENvbnN0cmFpbnRzKCk7DQogICAgfnd4TGF5b3V0Q29uc3RyYWludHMo KTsNCg0KICAgIGJvb2wgU2F0aXNmeUNvbnN0cmFpbnRzKHd4V2luZG93QmFzZSAqd2luLCBpbnQg Km5vQ2hhbmdlcyk7DQogICAgYm9vbCBBcmVTYXRpc2ZpZWQoKSBjb25zdA0KICAgIHsNCiAgICAg ICAgcmV0dXJuIGxlZnQuR2V0RG9uZSgpICYmIHRvcC5HZXREb25lKCkgJiYNCiAgICAgICAgICAg ICAgIHdpZHRoLkdldERvbmUoKSAmJiBoZWlnaHQuR2V0RG9uZSgpOw0KICAgIH0NCn07DQojIDY1 ICIuLi8uLi9pbmNsdWRlL3d4L3d4LmgiIDINCiMgMSAiLi4vLi4vaW5jbHVkZS93eC9zaXplci5o IiAxDQojIDE2ICIuLi8uLi9pbmNsdWRlL3d4L3NpemVyLmgiDQojcHJhZ21hIGludGVyZmFjZSAi c2l6ZXIuaCINCiMgMjkgIi4uLy4uL2luY2x1ZGUvd3gvc2l6ZXIuaCINCmNsYXNzIHd4U3RhdGlj Qm94Ow0KY2xhc3Mgd3hOb3RlYm9vazsNCg0KY2xhc3Mgd3hTaXplckl0ZW07DQpjbGFzcyB3eFNp emVyOw0KY2xhc3Mgd3hCb3hTaXplcjsNCmNsYXNzIHd4U3RhdGljQm94U2l6ZXI7DQoNCg0KDQoN Cg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hTaXplckl0ZW06IHB1YmxpYyB3 eE9iamVjdA0Kew0KICAgIHB1YmxpYzogc3RhdGljIHd4Q2xhc3NJbmZvIHNtX2NsYXNzd3hTaXpl ckl0ZW07IHd4Q2xhc3NJbmZvICpHZXRDbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmd3hTaXpl ckl0ZW06OnNtX2NsYXNzd3hTaXplckl0ZW07IH07DQpwdWJsaWM6DQoNCiAgICB3eFNpemVySXRl bSggaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgb3B0aW9uLCBpbnQgZmxhZywgaW50IGJvcmRl ciwgd3hPYmplY3QqIHVzZXJEYXRhKTsNCg0KDQogICAgd3hTaXplckl0ZW0oIHd4V2luZG93ICp3 aW5kb3csIGludCBvcHRpb24sIGludCBmbGFnLCBpbnQgYm9yZGVyLCB3eE9iamVjdCogdXNlckRh dGEgKTsNCg0KDQogICAgd3hTaXplckl0ZW0oIHd4U2l6ZXIgKnNpemVyLCBpbnQgb3B0aW9uLCBp bnQgZmxhZywgaW50IGJvcmRlciwgd3hPYmplY3QqIHVzZXJEYXRhICk7DQoNCiAgICB+d3hTaXpl ckl0ZW0oKTsNCg0KICAgIHZpcnR1YWwgd3hTaXplIEdldFNpemUoKTsNCiAgICB2aXJ0dWFsIHd4 U2l6ZSBDYWxjTWluKCk7DQogICAgdmlydHVhbCB2b2lkIFNldERpbWVuc2lvbiggd3hQb2ludCBw b3MsIHd4U2l6ZSBzaXplICk7DQoNCiAgICB3eFNpemUgR2V0TWluU2l6ZSgpDQogICAgICAgIHsg cmV0dXJuIG1fbWluU2l6ZTsgfQ0KDQogICAgdm9pZCBTZXRSYXRpbyggaW50IHdpZHRoLCBpbnQg aGVpZ2h0ICkNCg0KDQogICAgICAgIHsgbV9yYXRpbyA9ICh3aWR0aCAmJiBoZWlnaHQpID8gKChm bG9hdCkgd2lkdGggLyAoZmxvYXQpIGhlaWdodCkgOiAxOyB9DQogICAgdm9pZCBTZXRSYXRpbygg d3hTaXplIHNpemUgKQ0KICAgICAgICB7IG1fcmF0aW8gPSAoc2l6ZS54ICYmIHNpemUueSkgPyAo KGZsb2F0KSBzaXplLnggLyAoZmxvYXQpIHNpemUueSkgOiAxOyB9DQogICAgdm9pZCBTZXRSYXRp byggZmxvYXQgcmF0aW8gKQ0KICAgICAgICB7IG1fcmF0aW8gPSByYXRpbzsgfQ0KICAgIGZsb2F0 IEdldFJhdGlvKCkgY29uc3QNCiAgICAgICAgeyByZXR1cm4gbV9yYXRpbzsgfQ0KDQogICAgYm9v bCBJc1dpbmRvdygpOw0KICAgIGJvb2wgSXNTaXplcigpOw0KICAgIGJvb2wgSXNTcGFjZXIoKTsN Cg0KICAgIHZvaWQgU2V0SW5pdFNpemUoIGludCB4LCBpbnQgeSApDQogICAgICAgIHsgbV9taW5T aXplLnggPSB4OyBtX21pblNpemUueSA9IHk7IH0NCiAgICB2b2lkIFNldE9wdGlvbiggaW50IG9w dGlvbiApDQogICAgICAgIHsgbV9vcHRpb24gPSBvcHRpb247IH0NCiAgICB2b2lkIFNldEZsYWco IGludCBmbGFnICkNCiAgICAgICAgeyBtX2ZsYWcgPSBmbGFnOyB9DQogICAgdm9pZCBTZXRCb3Jk ZXIoIGludCBib3JkZXIgKQ0KICAgICAgICB7IG1fYm9yZGVyID0gYm9yZGVyOyB9DQoNCiAgICB3 eFdpbmRvdyAqR2V0V2luZG93KCkgY29uc3QNCiAgICAgICAgeyByZXR1cm4gbV93aW5kb3c7IH0N CiAgICB2b2lkIFNldFdpbmRvdyggd3hXaW5kb3cgKndpbmRvdyApDQogICAgICAgIHsgbV93aW5k b3cgPSB3aW5kb3c7IH0NCiAgICB3eFNpemVyICpHZXRTaXplcigpIGNvbnN0DQogICAgICAgIHsg cmV0dXJuIG1fc2l6ZXI7IH0NCiAgICB2b2lkIFNldFNpemVyKCB3eFNpemVyICpzaXplciApDQog ICAgICAgIHsgbV9zaXplciA9IHNpemVyOyB9DQogICAgaW50IEdldE9wdGlvbigpIGNvbnN0DQog ICAgICAgIHsgcmV0dXJuIG1fb3B0aW9uOyB9DQogICAgaW50IEdldEZsYWcoKSBjb25zdA0KICAg ICAgICB7IHJldHVybiBtX2ZsYWc7IH0NCiAgICBpbnQgR2V0Qm9yZGVyKCkgY29uc3QNCiAgICAg ICAgeyByZXR1cm4gbV9ib3JkZXI7IH0NCiAgICB3eE9iamVjdCogR2V0VXNlckRhdGEoKQ0KICAg ICAgICB7IHJldHVybiBtX3VzZXJEYXRhOyB9DQogICAgd3hQb2ludCBHZXRQb3NpdGlvbigpDQog ICAgICAgIHsgcmV0dXJuIG1fcG9zOyB9DQoNCnByb3RlY3RlZDoNCiAgICB3eFdpbmRvdyAqbV93 aW5kb3c7DQogICAgd3hTaXplciAqbV9zaXplcjsNCiAgICB3eFNpemUgbV9zaXplOw0KICAgIHd4 UG9pbnQgbV9wb3M7DQogICAgd3hTaXplIG1fbWluU2l6ZTsNCiAgICBpbnQgbV9vcHRpb247DQog ICAgaW50IG1fYm9yZGVyOw0KICAgIGludCBtX2ZsYWc7DQoNCg0KDQoNCiAgICBmbG9hdCBtX3Jh dGlvOw0KDQoNCiAgICB3eE9iamVjdCAqbV91c2VyRGF0YTsNCn07DQoNCg0KDQoNCg0KY2xhc3Mg X19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hTaXplcjogcHVibGljIHd4T2JqZWN0DQp7DQpw dWJsaWM6DQogICAgd3hTaXplcigpOw0KICAgIH53eFNpemVyKCk7DQoNCg0KICAgIHZpcnR1YWwg dm9pZCBBZGQoIHd4V2luZG93ICp3aW5kb3csIGludCBvcHRpb24gPSAwLCBpbnQgZmxhZyA9IDAs IGludCBib3JkZXIgPSAwLCB3eE9iamVjdCogdXNlckRhdGEgPSBfX251bGwgKTsNCiAgICB2aXJ0 dWFsIHZvaWQgQWRkKCB3eFNpemVyICpzaXplciwgaW50IG9wdGlvbiA9IDAsIGludCBmbGFnID0g MCwgaW50IGJvcmRlciA9IDAsIHd4T2JqZWN0KiB1c2VyRGF0YSA9IF9fbnVsbCApOw0KICAgIHZp cnR1YWwgdm9pZCBBZGQoIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG9wdGlvbiA9IDAsIGlu dCBmbGFnID0gMCwgaW50IGJvcmRlciA9IDAsIHd4T2JqZWN0KiB1c2VyRGF0YSA9IF9fbnVsbCAp Ow0KDQogICAgdmlydHVhbCB2b2lkIEluc2VydCggaW50IGJlZm9yZSwgd3hXaW5kb3cgKndpbmRv dywgaW50IG9wdGlvbiA9IDAsIGludCBmbGFnID0gMCwgaW50IGJvcmRlciA9IDAsIHd4T2JqZWN0 KiB1c2VyRGF0YSA9IF9fbnVsbCApOw0KICAgIHZpcnR1YWwgdm9pZCBJbnNlcnQoIGludCBiZWZv cmUsIHd4U2l6ZXIgKnNpemVyLCBpbnQgb3B0aW9uID0gMCwgaW50IGZsYWcgPSAwLCBpbnQgYm9y ZGVyID0gMCwgd3hPYmplY3QqIHVzZXJEYXRhID0gX19udWxsICk7DQogICAgdmlydHVhbCB2b2lk IEluc2VydCggaW50IGJlZm9yZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgb3B0aW9uID0g MCwgaW50IGZsYWcgPSAwLCBpbnQgYm9yZGVyID0gMCwgd3hPYmplY3QqIHVzZXJEYXRhID0gX19u dWxsICk7DQoNCiAgICB2aXJ0dWFsIHZvaWQgUHJlcGVuZCggd3hXaW5kb3cgKndpbmRvdywgaW50 IG9wdGlvbiA9IDAsIGludCBmbGFnID0gMCwgaW50IGJvcmRlciA9IDAsIHd4T2JqZWN0KiB1c2Vy RGF0YSA9IF9fbnVsbCApOw0KICAgIHZpcnR1YWwgdm9pZCBQcmVwZW5kKCB3eFNpemVyICpzaXpl ciwgaW50IG9wdGlvbiA9IDAsIGludCBmbGFnID0gMCwgaW50IGJvcmRlciA9IDAsIHd4T2JqZWN0 KiB1c2VyRGF0YSA9IF9fbnVsbCApOw0KICAgIHZpcnR1YWwgdm9pZCBQcmVwZW5kKCBpbnQgd2lk dGgsIGludCBoZWlnaHQsIGludCBvcHRpb24gPSAwLCBpbnQgZmxhZyA9IDAsIGludCBib3JkZXIg PSAwLCB3eE9iamVjdCogdXNlckRhdGEgPSBfX251bGwgKTsNCg0KICAgIHZpcnR1YWwgYm9vbCBS ZW1vdmUoIHd4V2luZG93ICp3aW5kb3cgKTsNCiAgICB2aXJ0dWFsIGJvb2wgUmVtb3ZlKCB3eFNp emVyICpzaXplciApOw0KICAgIHZpcnR1YWwgYm9vbCBSZW1vdmUoIGludCBwb3MgKTsNCg0KICAg IHZvaWQgU2V0TWluU2l6ZSggaW50IHdpZHRoLCBpbnQgaGVpZ2h0ICkNCiAgICAgICAgeyBEb1Nl dE1pblNpemUoIHdpZHRoLCBoZWlnaHQgKTsgfQ0KICAgIHZvaWQgU2V0TWluU2l6ZSggd3hTaXpl IHNpemUgKQ0KICAgICAgICB7IERvU2V0TWluU2l6ZSggc2l6ZS54LCBzaXplLnkgKTsgfQ0KDQoN CiAgICBib29sIFNldEl0ZW1NaW5TaXplKCB3eFdpbmRvdyAqd2luZG93LCBpbnQgd2lkdGgsIGlu dCBoZWlnaHQgKQ0KICAgICAgICB7IHJldHVybiBEb1NldEl0ZW1NaW5TaXplKCB3aW5kb3csIHdp ZHRoLCBoZWlnaHQgKTsgfQ0KICAgIGJvb2wgU2V0SXRlbU1pblNpemUoIHd4V2luZG93ICp3aW5k b3csIHd4U2l6ZSBzaXplICkNCiAgICAgICAgeyByZXR1cm4gRG9TZXRJdGVtTWluU2l6ZSggd2lu ZG93LCBzaXplLngsIHNpemUueSApOyB9DQoNCg0KICAgIGJvb2wgU2V0SXRlbU1pblNpemUoIHd4 U2l6ZXIgKnNpemVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQgKQ0KICAgICAgICB7IHJldHVybiBE b1NldEl0ZW1NaW5TaXplKCBzaXplciwgd2lkdGgsIGhlaWdodCApOyB9DQogICAgYm9vbCBTZXRJ dGVtTWluU2l6ZSggd3hTaXplciAqc2l6ZXIsIHd4U2l6ZSBzaXplICkNCiAgICAgICAgeyByZXR1 cm4gRG9TZXRJdGVtTWluU2l6ZSggc2l6ZXIsIHNpemUueCwgc2l6ZS55ICk7IH0NCg0KICAgIGJv b2wgU2V0SXRlbU1pblNpemUoIGludCBwb3MsIGludCB3aWR0aCwgaW50IGhlaWdodCApDQogICAg ICAgIHsgcmV0dXJuIERvU2V0SXRlbU1pblNpemUoIHBvcywgd2lkdGgsIGhlaWdodCApOyB9DQog ICAgYm9vbCBTZXRJdGVtTWluU2l6ZSggaW50IHBvcywgd3hTaXplIHNpemUgKQ0KICAgICAgICB7 IHJldHVybiBEb1NldEl0ZW1NaW5TaXplKCBwb3MsIHNpemUueCwgc2l6ZS55ICk7IH0NCg0KICAg IHd4U2l6ZSBHZXRTaXplKCkNCiAgICAgICAgeyByZXR1cm4gbV9zaXplOyB9DQogICAgd3hQb2lu dCBHZXRQb3NpdGlvbigpDQogICAgICAgIHsgcmV0dXJuIG1fcG9zaXRpb247IH0NCg0KDQogICAg d3hTaXplIEdldE1pblNpemUoKTsNCg0KICAgIHZpcnR1YWwgdm9pZCBSZWNhbGNTaXplcygpID0g MDsNCiAgICB2aXJ0dWFsIHd4U2l6ZSBDYWxjTWluKCkgPSAwOw0KDQogICAgdmlydHVhbCB2b2lk IExheW91dCgpOw0KDQogICAgdm9pZCBGaXQoIHd4V2luZG93ICp3aW5kb3cgKTsNCiAgICB2b2lk IFNldFNpemVIaW50cyggd3hXaW5kb3cgKndpbmRvdyApOw0KDQogICAgd3hMaXN0JiBHZXRDaGls ZHJlbigpDQogICAgICAgIHsgcmV0dXJuIG1fY2hpbGRyZW47IH0NCg0KICAgIHZvaWQgU2V0RGlt ZW5zaW9uKCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCApOw0KDQpwcm90ZWN0 ZWQ6DQogICAgd3hTaXplIG1fc2l6ZTsNCiAgICB3eFNpemUgbV9taW5TaXplOw0KICAgIHd4UG9p bnQgbV9wb3NpdGlvbjsNCiAgICB3eExpc3QgbV9jaGlsZHJlbjsNCg0KICAgIHd4U2l6ZSBHZXRN aW5XaW5kb3dTaXplKCB3eFdpbmRvdyAqd2luZG93ICk7DQoNCiAgICB2aXJ0dWFsIHZvaWQgRG9T ZXRNaW5TaXplKCBpbnQgd2lkdGgsIGludCBoZWlnaHQgKTsNCiAgICB2aXJ0dWFsIGJvb2wgRG9T ZXRJdGVtTWluU2l6ZSggd3hXaW5kb3cgKndpbmRvdywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0ICk7 DQogICAgdmlydHVhbCBib29sIERvU2V0SXRlbU1pblNpemUoIHd4U2l6ZXIgKnNpemVyLCBpbnQg d2lkdGgsIGludCBoZWlnaHQgKTsNCiAgICB2aXJ0dWFsIGJvb2wgRG9TZXRJdGVtTWluU2l6ZSgg aW50IHBvcywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0ICk7DQoNCnByaXZhdGU6DQogICAgcHVibGlj OiBzdGF0aWMgd3hDbGFzc0luZm8gc21fY2xhc3N3eFNpemVyOyB3eENsYXNzSW5mbyAqR2V0Q2xh c3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnd4U2l6ZXI6OnNtX2NsYXNzd3hTaXplcjsgfTsNCn07 DQoNCg0KDQoNCg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hHcmlkU2l6ZXI6 IHB1YmxpYyB3eFNpemVyDQp7DQpwdWJsaWM6DQogICAgd3hHcmlkU2l6ZXIoIGludCByb3dzLCBp bnQgY29scywgaW50IHZnYXAsIGludCBoZ2FwICk7DQogICAgd3hHcmlkU2l6ZXIoIGludCBjb2xz LCBpbnQgdmdhcCA9IDAsIGludCBoZ2FwID0gMCApOw0KDQogICAgdm9pZCBSZWNhbGNTaXplcygp Ow0KICAgIHd4U2l6ZSBDYWxjTWluKCk7DQoNCiAgICB2b2lkIFNldENvbHMoIGludCBjb2xzICkg eyBtX2NvbHMgPSBjb2xzOyB9DQogICAgdm9pZCBTZXRSb3dzKCBpbnQgcm93cyApIHsgbV9yb3dz ID0gcm93czsgfQ0KICAgIHZvaWQgU2V0VkdhcCggaW50IGdhcCApIHsgbV92Z2FwID0gZ2FwOyB9 DQogICAgdm9pZCBTZXRIR2FwKCBpbnQgZ2FwICkgeyBtX2hnYXAgPSBnYXA7IH0NCiAgICBpbnQg R2V0Q29scygpIHsgcmV0dXJuIG1fY29sczsgfQ0KICAgIGludCBHZXRSb3dzKCkgeyByZXR1cm4g bV9yb3dzOyB9DQogICAgaW50IEdldFZHYXAoKSB7IHJldHVybiBtX3ZnYXA7IH0NCiAgICBpbnQg R2V0SEdhcCgpIHsgcmV0dXJuIG1faGdhcDsgfQ0KDQpwcm90ZWN0ZWQ6DQogICAgaW50IG1fcm93 czsNCiAgICBpbnQgbV9jb2xzOw0KICAgIGludCBtX3ZnYXA7DQogICAgaW50IG1faGdhcDsNCg0K ICAgIHZvaWQgU2V0SXRlbUJvdW5kcyggd3hTaXplckl0ZW0gKml0ZW0sIGludCB4LCBpbnQgeSwg aW50IHcsIGludCBoICk7DQoNCnByaXZhdGU6DQogICAgcHVibGljOiBzdGF0aWMgd3hDbGFzc0lu Zm8gc21fY2xhc3N3eEdyaWRTaXplcjsgd3hDbGFzc0luZm8gKkdldENsYXNzSW5mbygpIGNvbnN0 IHsgcmV0dXJuICZ3eEdyaWRTaXplcjo6c21fY2xhc3N3eEdyaWRTaXplcjsgfTsNCn07DQoNCg0K DQoNCg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hGbGV4R3JpZFNpemVyOiBw dWJsaWMgd3hHcmlkU2l6ZXINCnsNCnB1YmxpYzoNCiAgICB3eEZsZXhHcmlkU2l6ZXIoIGludCBy b3dzLCBpbnQgY29scywgaW50IHZnYXAsIGludCBoZ2FwICk7DQogICAgd3hGbGV4R3JpZFNpemVy KCBpbnQgY29scywgaW50IHZnYXAgPSAwLCBpbnQgaGdhcCA9IDAgKTsNCiAgICB+d3hGbGV4R3Jp ZFNpemVyKCk7DQoNCiAgICB2b2lkIFJlY2FsY1NpemVzKCk7DQogICAgd3hTaXplIENhbGNNaW4o KTsNCg0KICAgIHZvaWQgQWRkR3Jvd2FibGVSb3coIHNpemVfdCBpZHggKTsNCiAgICB2b2lkIFJl bW92ZUdyb3dhYmxlUm93KCBzaXplX3QgaWR4ICk7DQogICAgdm9pZCBBZGRHcm93YWJsZUNvbCgg c2l6ZV90IGlkeCApOw0KICAgIHZvaWQgUmVtb3ZlR3Jvd2FibGVDb2woIHNpemVfdCBpZHggKTsN Cg0KcHJvdGVjdGVkOg0KICAgIGludCAqbV9yb3dIZWlnaHRzOw0KICAgIGludCAqbV9jb2xXaWR0 aHM7DQogICAgd3hBcnJheUludCBtX2dyb3dhYmxlUm93czsNCiAgICB3eEFycmF5SW50IG1fZ3Jv d2FibGVDb2xzOw0KDQogICAgdm9pZCBDcmVhdGVBcnJheXMoKTsNCg0KcHJpdmF0ZToNCiAgICBw dWJsaWM6IHN0YXRpYyB3eENsYXNzSW5mbyBzbV9jbGFzc3d4RmxleEdyaWRTaXplcjsgd3hDbGFz c0luZm8gKkdldENsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZ3eEZsZXhHcmlkU2l6ZXI6OnNt X2NsYXNzd3hGbGV4R3JpZFNpemVyOyB9Ow0KfTsNCg0KDQoNCg0KDQpjbGFzcyBfX2F0dHJpYnV0 ZV9fKChkbGxpbXBvcnQpKSB3eEJveFNpemVyOiBwdWJsaWMgd3hTaXplcg0Kew0KcHVibGljOg0K ICAgIHd4Qm94U2l6ZXIoIGludCBvcmllbnQgKTsNCg0KICAgIHZvaWQgUmVjYWxjU2l6ZXMoKTsN CiAgICB3eFNpemUgQ2FsY01pbigpOw0KDQogICAgaW50IEdldE9yaWVudGF0aW9uKCkNCiAgICAg ICAgeyByZXR1cm4gbV9vcmllbnQ7IH0NCg0KcHJvdGVjdGVkOg0KICAgIGludCBtX29yaWVudDsN CiAgICBpbnQgbV9zdHJldGNoYWJsZTsNCiAgICBpbnQgbV9taW5XaWR0aDsNCiAgICBpbnQgbV9t aW5IZWlnaHQ7DQogICAgaW50IG1fZml4ZWRXaWR0aDsNCiAgICBpbnQgbV9maXhlZEhlaWdodDsN Cg0KcHJpdmF0ZToNCiAgICBwdWJsaWM6IHN0YXRpYyB3eENsYXNzSW5mbyBzbV9jbGFzc3d4Qm94 U2l6ZXI7IHd4Q2xhc3NJbmZvICpHZXRDbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmd3hCb3hT aXplcjo6c21fY2xhc3N3eEJveFNpemVyOyB9Ow0KfTsNCg0KDQoNCg0KDQpjbGFzcyBfX2F0dHJp YnV0ZV9fKChkbGxpbXBvcnQpKSB3eFN0YXRpY0JveFNpemVyOiBwdWJsaWMgd3hCb3hTaXplcg0K ew0KcHVibGljOg0KICAgIHd4U3RhdGljQm94U2l6ZXIoIHd4U3RhdGljQm94ICpib3gsIGludCBv cmllbnQgKTsNCg0KICAgIHZvaWQgUmVjYWxjU2l6ZXMoKTsNCiAgICB3eFNpemUgQ2FsY01pbigp Ow0KDQogICAgd3hTdGF0aWNCb3ggKkdldFN0YXRpY0JveCgpDQogICAgICAgIHsgcmV0dXJuIG1f c3RhdGljQm94OyB9DQoNCnByb3RlY3RlZDoNCiAgICB3eFN0YXRpY0JveCAqbV9zdGF0aWNCb3g7 DQoNCnByaXZhdGU6DQogICAgcHVibGljOiBzdGF0aWMgd3hDbGFzc0luZm8gc21fY2xhc3N3eFN0 YXRpY0JveFNpemVyOyB3eENsYXNzSW5mbyAqR2V0Q2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4g Jnd4U3RhdGljQm94U2l6ZXI6OnNtX2NsYXNzd3hTdGF0aWNCb3hTaXplcjsgfTsNCn07DQoNCg0K DQoNCg0KDQoNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4Tm90ZWJvb2tTaXpl cjogcHVibGljIHd4U2l6ZXINCnsNCnB1YmxpYzoNCiAgICB3eE5vdGVib29rU2l6ZXIoIHd4Tm90 ZWJvb2sgKm5iICk7DQoNCiAgICB2b2lkIFJlY2FsY1NpemVzKCk7DQogICAgd3hTaXplIENhbGNN aW4oKTsNCg0KICAgIHd4Tm90ZWJvb2sgKkdldE5vdGVib29rKCkNCiAgICAgICAgeyByZXR1cm4g bV9ub3RlYm9vazsgfQ0KDQpwcm90ZWN0ZWQ6DQogICAgd3hOb3RlYm9vayAqbV9ub3RlYm9vazsN Cg0KcHJpdmF0ZToNCiAgICBwdWJsaWM6IHN0YXRpYyB3eENsYXNzSW5mbyBzbV9jbGFzc3d4Tm90 ZWJvb2tTaXplcjsgd3hDbGFzc0luZm8gKkdldENsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZ3 eE5vdGVib29rU2l6ZXI6OnNtX2NsYXNzd3hOb3RlYm9va1NpemVyOyB9Ow0KfTsNCiMgNjYgIi4u Ly4uL2luY2x1ZGUvd3gvd3guaCIgMg0KDQojIDEgIi4uLy4uL2luY2x1ZGUvd3gvbWRpLmgiIDEN CiMgOSAiLi4vLi4vaW5jbHVkZS93eC9tZGkuaCINCiMgMSAiLi4vLi4vaW5jbHVkZS93eC9tc3cv bWRpLmgiIDENCiMgMTYgIi4uLy4uL2luY2x1ZGUvd3gvbXN3L21kaS5oIg0KI3ByYWdtYSBpbnRl cmZhY2UgIm1kaS5oIg0KDQoNCg0KDQpfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBleHRlcm4g Y29uc3QgY2hhciogd3hGcmFtZU5hbWVTdHI7DQpfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBl eHRlcm4gY29uc3QgY2hhciogd3hTdGF0dXNMaW5lTmFtZVN0cjsNCg0KY2xhc3MgX19hdHRyaWJ1 dGVfXygoZGxsaW1wb3J0KSkgd3hNRElDbGllbnRXaW5kb3c7DQpjbGFzcyBfX2F0dHJpYnV0ZV9f KChkbGxpbXBvcnQpKSB3eE1ESUNoaWxkRnJhbWU7DQoNCg0KDQoNCg0KY2xhc3MgX19hdHRyaWJ1 dGVfXygoZGxsaW1wb3J0KSkgd3hNRElQYXJlbnRGcmFtZSA6IHB1YmxpYyB3eEZyYW1lDQp7DQog ICAgcHVibGljOiBzdGF0aWMgd3hDbGFzc0luZm8gc21fY2xhc3N3eE1ESVBhcmVudEZyYW1lOyB3 eENsYXNzSW5mbyAqR2V0Q2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnd4TURJUGFyZW50RnJh bWU6OnNtX2NsYXNzd3hNRElQYXJlbnRGcmFtZTsgfQ0KDQpwdWJsaWM6DQogICAgd3hNRElQYXJl bnRGcmFtZSgpOw0KICAgIHd4TURJUGFyZW50RnJhbWUod3hXaW5kb3cgKnBhcmVudCwNCiAgICAg ICAgICAgICAgICAgICAgIHd4V2luZG93SUQgaWQsDQogICAgICAgICAgICAgICAgICAgICBjb25z dCB3eFN0cmluZyYgdGl0bGUsDQogICAgICAgICAgICAgICAgICAgICBjb25zdCB3eFBvaW50JiBw b3MgPSB3eERlZmF1bHRQb3NpdGlvbiwNCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHd4U2l6 ZSYgc2l6ZSA9IHd4RGVmYXVsdFNpemUsDQogICAgICAgICAgICAgICAgICAgICBsb25nIHN0eWxl ID0gKDB4MDgwMCB8IDB4MDA0MCB8IDB4MDQwMCB8IDB4MDIwMCB8IDB4MjAwMDAwMDAgfCAweDAw NDAwMDAwKSB8IDB4ODAwMDAwMDAgfCAweDQwMDAwMDAwLA0KICAgICAgICAgICAgICAgICAgICAg Y29uc3Qgd3hTdHJpbmcmIG5hbWUgPSB3eEZyYW1lTmFtZVN0cikNCiAgICB7DQogICAgICAgIENy ZWF0ZShwYXJlbnQsIGlkLCB0aXRsZSwgcG9zLCBzaXplLCBzdHlsZSwgbmFtZSk7DQogICAgfQ0K DQogICAgfnd4TURJUGFyZW50RnJhbWUoKTsNCg0KICAgIGJvb2wgQ3JlYXRlKHd4V2luZG93ICpw YXJlbnQsDQogICAgICAgICAgICAgICAgd3hXaW5kb3dJRCBpZCwNCiAgICAgICAgICAgICAgICBj b25zdCB3eFN0cmluZyYgdGl0bGUsDQogICAgICAgICAgICAgICAgY29uc3Qgd3hQb2ludCYgcG9z ID0gd3hEZWZhdWx0UG9zaXRpb24sDQogICAgICAgICAgICAgICAgY29uc3Qgd3hTaXplJiBzaXpl ID0gd3hEZWZhdWx0U2l6ZSwNCiAgICAgICAgICAgICAgICBsb25nIHN0eWxlID0gKDB4MDgwMCB8 IDB4MDA0MCB8IDB4MDQwMCB8IDB4MDIwMCB8IDB4MjAwMDAwMDAgfCAweDAwNDAwMDAwKSB8IDB4 ODAwMDAwMDAgfCAweDQwMDAwMDAwLA0KICAgICAgICAgICAgICAgIGNvbnN0IHd4U3RyaW5nJiBu YW1lID0gd3hGcmFtZU5hbWVTdHIpOw0KDQoNCg0KDQoNCiAgICB3eE1ESUNoaWxkRnJhbWUgKkdl dEFjdGl2ZUNoaWxkKCkgY29uc3Q7DQoNCg0KICAgIHd4TURJQ2xpZW50V2luZG93ICpHZXRDbGll bnRXaW5kb3coKSBjb25zdCB7IHJldHVybiBtX2NsaWVudFdpbmRvdzsgfQ0KDQoNCg0KICAgIHZp cnR1YWwgd3hNRElDbGllbnRXaW5kb3cgKk9uQ3JlYXRlQ2xpZW50KHZvaWQpOw0KDQoNCiAgICB3 eE1lbnUqIEdldFdpbmRvd01lbnUoKSBjb25zdCB7IHJldHVybiBtX3dpbmRvd01lbnU7IH07DQog ICAgdm9pZCBTZXRXaW5kb3dNZW51KHd4TWVudSogbWVudSkgOw0KDQoNCg0KICAgIHZpcnR1YWwg dm9pZCBDYXNjYWRlKCk7DQogICAgdmlydHVhbCB2b2lkIFRpbGUoKTsNCiAgICB2aXJ0dWFsIHZv aWQgQXJyYW5nZUljb25zKCk7DQogICAgdmlydHVhbCB2b2lkIEFjdGl2YXRlTmV4dCgpOw0KICAg IHZpcnR1YWwgdm9pZCBBY3RpdmF0ZVByZXZpb3VzKCk7DQoNCg0KDQoNCg0KICAgIHZvaWQgT25T eXNDb2xvdXJDaGFuZ2VkKHd4U3lzQ29sb3VyQ2hhbmdlZEV2ZW50JiBldmVudCk7DQoNCiAgICB2 b2lkIE9uU2l6ZSh3eFNpemVFdmVudCYgZXZlbnQpOw0KDQogICAgYm9vbCBIYW5kbGVBY3RpdmF0 ZShpbnQgc3RhdGUsIGJvb2wgbWluaW1pemVkLCBXWEhXTkQgYWN0aXZhdGUpOw0KICAgIGJvb2wg SGFuZGxlQ29tbWFuZChXWFdPUkQgaWQsIFdYV09SRCBjbWQsIFdYSFdORCBjb250cm9sKTsNCg0K DQogICAgdmlydHVhbCBsb25nIE1TV1dpbmRvd1Byb2MoV1hVSU5UIG5Nc2csIFdYV1BBUkFNIHdQ YXJhbSwgV1hMUEFSQU0gbFBhcmFtKTsNCg0KICAgIHZpcnR1YWwgbG9uZyBNU1dEZWZXaW5kb3dQ cm9jKFdYVUlOVCwgV1hXUEFSQU0sIFdYTFBBUkFNKTsNCiAgICB2aXJ0dWFsIGJvb2wgTVNXVHJh bnNsYXRlTWVzc2FnZShXWE1TRyogbXNnKTsNCg0KcHJvdGVjdGVkOg0KICAgIHZpcnR1YWwgdm9p ZCBJbnRlcm5hbFNldE1lbnVCYXIoKTsNCg0KICAgIHd4TURJQ2xpZW50V2luZG93ICogbV9jbGll bnRXaW5kb3c7DQogICAgd3hNRElDaGlsZEZyYW1lICogbV9jdXJyZW50Q2hpbGQ7DQoNCiAgICB3 eE1lbnUqIG1fd2luZG93TWVudTsNCg0KDQogICAgYm9vbCBtX3BhcmVudEZyYW1lQWN0aXZlOw0K DQpwcml2YXRlOg0KICAgIGZyaWVuZCBjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3 eE1ESUNoaWxkRnJhbWU7DQoNCiAgICBwcml2YXRlOiBzdGF0aWMgY29uc3Qgd3hFdmVudFRhYmxl RW50cnkgc21fZXZlbnRUYWJsZUVudHJpZXNbXTtwcm90ZWN0ZWQ6IHN0YXRpYyBjb25zdCB3eEV2 ZW50VGFibGUgc21fZXZlbnRUYWJsZTsgdmlydHVhbCBjb25zdCB3eEV2ZW50VGFibGUqIEdldEV2 ZW50VGFibGUoKSBjb25zdDsNCn07DQoNCg0KDQoNCg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxs aW1wb3J0KSkgd3hNRElDaGlsZEZyYW1lIDogcHVibGljIHd4RnJhbWUNCnsNCnB1YmxpYzoNCiAg ICB3eE1ESUNoaWxkRnJhbWUoKSB7IEluaXQoKTsgfQ0KICAgIHd4TURJQ2hpbGRGcmFtZSh3eE1E SVBhcmVudEZyYW1lICpwYXJlbnQsDQogICAgICAgICAgICAgICAgICAgIHd4V2luZG93SUQgaWQs DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IHd4U3RyaW5nJiB0aXRsZSwNCiAgICAgICAgICAg ICAgICAgICAgY29uc3Qgd3hQb2ludCYgcG9zID0gd3hEZWZhdWx0UG9zaXRpb24sDQogICAgICAg ICAgICAgICAgICAgIGNvbnN0IHd4U2l6ZSYgc2l6ZSA9IHd4RGVmYXVsdFNpemUsDQogICAgICAg ICAgICAgICAgICAgIGxvbmcgc3R5bGUgPSAoMHgwODAwIHwgMHgwMDQwIHwgMHgwNDAwIHwgMHgw MjAwIHwgMHgyMDAwMDAwMCB8IDB4MDA0MDAwMDApLA0KICAgICAgICAgICAgICAgICAgICBjb25z dCB3eFN0cmluZyYgbmFtZSA9IHd4RnJhbWVOYW1lU3RyKQ0KICAgIHsNCiAgICAgICAgSW5pdCgp Ow0KDQogICAgICAgIENyZWF0ZShwYXJlbnQsIGlkLCB0aXRsZSwgcG9zLCBzaXplLCBzdHlsZSwg bmFtZSk7DQogICAgfQ0KDQogICAgfnd4TURJQ2hpbGRGcmFtZSgpOw0KDQogICAgYm9vbCBDcmVh dGUod3hNRElQYXJlbnRGcmFtZSAqcGFyZW50LA0KICAgICAgICAgICAgICAgIHd4V2luZG93SUQg aWQsDQogICAgICAgICAgICAgICAgY29uc3Qgd3hTdHJpbmcmIHRpdGxlLA0KICAgICAgICAgICAg ICAgIGNvbnN0IHd4UG9pbnQmIHBvcyA9IHd4RGVmYXVsdFBvc2l0aW9uLA0KICAgICAgICAgICAg ICAgIGNvbnN0IHd4U2l6ZSYgc2l6ZSA9IHd4RGVmYXVsdFNpemUsDQogICAgICAgICAgICAgICAg bG9uZyBzdHlsZSA9ICgweDA4MDAgfCAweDAwNDAgfCAweDA0MDAgfCAweDAyMDAgfCAweDIwMDAw MDAwIHwgMHgwMDQwMDAwMCksDQogICAgICAgICAgICAgICAgY29uc3Qgd3hTdHJpbmcmIG5hbWUg PSB3eEZyYW1lTmFtZVN0cik7DQoNCiAgICB2aXJ0dWFsIGJvb2wgSXNUb3BMZXZlbCgpIGNvbnN0 IHsgcmV0dXJuIDA7IH0NCg0KDQogICAgdmlydHVhbCB2b2lkIE1heGltaXplKGJvb2wgbWF4aW1p emUgPSAxKTsNCiAgICB2aXJ0dWFsIHZvaWQgUmVzdG9yZSgpOw0KICAgIHZpcnR1YWwgdm9pZCBB Y3RpdmF0ZSgpOw0KDQoNCg0KDQoNCiAgICBib29sIEhhbmRsZU1ESUFjdGl2YXRlKGxvbmcgYkFj dGl2YXRlLCBXWEhXTkQsIFdYSFdORCk7DQogICAgYm9vbCBIYW5kbGVXaW5kb3dQb3NDaGFuZ2lu Zyh2b2lkICpscFBvcyk7DQogICAgYm9vbCBIYW5kbGVDb21tYW5kKFdYV09SRCBpZCwgV1hXT1JE IGNtZCwgV1hIV05EIGNvbnRyb2wpOw0KDQogICAgdmlydHVhbCBsb25nIE1TV1dpbmRvd1Byb2Mo V1hVSU5UIG1lc3NhZ2UsIFdYV1BBUkFNIHdQYXJhbSwgV1hMUEFSQU0gbFBhcmFtKTsNCiAgICB2 aXJ0dWFsIGxvbmcgTVNXRGVmV2luZG93UHJvYyhXWFVJTlQgbWVzc2FnZSwgV1hXUEFSQU0gd1Bh cmFtLCBXWExQQVJBTSBsUGFyYW0pOw0KICAgIHZpcnR1YWwgYm9vbCBNU1dUcmFuc2xhdGVNZXNz YWdlKFdYTVNHICptc2cpOw0KDQogICAgdmlydHVhbCB2b2lkIE1TV0Rlc3Ryb3lXaW5kb3coKTsN Cg0KICAgIGJvb2wgUmVzZXRXaW5kb3dTdHlsZSh2b2lkICp2cmVjdCk7DQoNCiAgICB2b2lkIE9u SWRsZSh3eElkbGVFdmVudCYgZXZlbnQpOw0KDQpwcm90ZWN0ZWQ6DQogICAgdmlydHVhbCB2b2lk IERvR2V0UG9zaXRpb24oaW50ICp4LCBpbnQgKnkpIGNvbnN0Ow0KICAgIHZpcnR1YWwgdm9pZCBE b1NldENsaWVudFNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsNCiAgICB2aXJ0dWFsIHZvaWQg SW50ZXJuYWxTZXRNZW51QmFyKCk7DQoNCg0KICAgIHZvaWQgSW5pdCgpOw0KDQpwcml2YXRlOg0K ICAgIGJvb2wgbV9uZWVkc1Jlc2l6ZTsNCg0KICAgIHByaXZhdGU6IHN0YXRpYyBjb25zdCB3eEV2 ZW50VGFibGVFbnRyeSBzbV9ldmVudFRhYmxlRW50cmllc1tdO3Byb3RlY3RlZDogc3RhdGljIGNv bnN0IHd4RXZlbnRUYWJsZSBzbV9ldmVudFRhYmxlOyB2aXJ0dWFsIGNvbnN0IHd4RXZlbnRUYWJs ZSogR2V0RXZlbnRUYWJsZSgpIGNvbnN0Ow0KICAgIHB1YmxpYzogc3RhdGljIHd4Q2xhc3NJbmZv IHNtX2NsYXNzd3hNRElDaGlsZEZyYW1lOyB3eENsYXNzSW5mbyAqR2V0Q2xhc3NJbmZvKCkgY29u c3QgeyByZXR1cm4gJnd4TURJQ2hpbGRGcmFtZTo6c21fY2xhc3N3eE1ESUNoaWxkRnJhbWU7IH0N Cn07DQoNCg0KDQoNCg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hNRElDbGll bnRXaW5kb3cgOiBwdWJsaWMgd3hXaW5kb3cNCnsNCnB1YmxpYzoNCiAgICB3eE1ESUNsaWVudFdp bmRvdygpIHsgSW5pdCgpOyB9DQogICAgd3hNRElDbGllbnRXaW5kb3cod3hNRElQYXJlbnRGcmFt ZSAqcGFyZW50LCBsb25nIHN0eWxlID0gMCkNCiAgICB7DQogICAgICAgIEluaXQoKTsNCg0KICAg ICAgICBDcmVhdGVDbGllbnQocGFyZW50LCBzdHlsZSk7DQogICAgfQ0KDQoNCiAgICB2aXJ0dWFs IGJvb2wgQ3JlYXRlQ2xpZW50KHd4TURJUGFyZW50RnJhbWUgKnBhcmVudCwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGxvbmcgc3R5bGUgPSAweDgwMDAwMDAwIHwgMHg0MDAwMDAwMCk7 DQoNCg0KICAgIHZvaWQgT25TY3JvbGwod3hTY3JvbGxFdmVudCYgZXZlbnQpOw0KDQogICAgdmly dHVhbCB2b2lkIERvU2V0U2l6ZShpbnQgeCwgaW50IHksDQogICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgc2l6ZUZsYWdzID0gKDB4MDAwMXwweDAwMDIpKTsNCnByb3RlY3RlZDoNCiAgICB2b2lkIElu aXQoKSB7IG1fc2Nyb2xsWCA9IG1fc2Nyb2xsWSA9IDA7IH0NCg0KICAgIGludCBtX3Njcm9sbFgs IG1fc2Nyb2xsWTsNCg0KcHJpdmF0ZToNCiAgICBwcml2YXRlOiBzdGF0aWMgY29uc3Qgd3hFdmVu dFRhYmxlRW50cnkgc21fZXZlbnRUYWJsZUVudHJpZXNbXTtwcm90ZWN0ZWQ6IHN0YXRpYyBjb25z dCB3eEV2ZW50VGFibGUgc21fZXZlbnRUYWJsZTsgdmlydHVhbCBjb25zdCB3eEV2ZW50VGFibGUq IEdldEV2ZW50VGFibGUoKSBjb25zdDsNCiAgICBwdWJsaWM6IHN0YXRpYyB3eENsYXNzSW5mbyBz bV9jbGFzc3d4TURJQ2xpZW50V2luZG93OyB3eENsYXNzSW5mbyAqR2V0Q2xhc3NJbmZvKCkgY29u c3QgeyByZXR1cm4gJnd4TURJQ2xpZW50V2luZG93OjpzbV9jbGFzc3d4TURJQ2xpZW50V2luZG93 OyB9DQp9Ow0KIyAxMCAiLi4vLi4vaW5jbHVkZS93eC9tZGkuaCIgMg0KIyA2OCAiLi4vLi4vaW5j bHVkZS93eC93eC5oIiAyDQojIDEgIi4uLy4uL2luY2x1ZGUvd3gvc2Nyb2x3aW4uaCIgMQ0KDQoN Cg0KIyAxICIuLi8uLi9pbmNsdWRlL3d4L2dlbmVyaWMvc2Nyb2x3aW4uaCIgMQ0KIyAxNiAiLi4v Li4vaW5jbHVkZS93eC9nZW5lcmljL3Njcm9sd2luLmgiDQojcHJhZ21hIGludGVyZmFjZSAic2Ny b2x3aW4uaCINCiMgMjYgIi4uLy4uL2luY2x1ZGUvd3gvZ2VuZXJpYy9zY3JvbHdpbi5oIg0KX19h dHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgZXh0ZXJuIGNvbnN0IGNoYXIqIHd4UGFuZWxOYW1lU3Ry Ow0KIyAzNSAiLi4vLi4vaW5jbHVkZS93eC9nZW5lcmljL3Njcm9sd2luLmgiDQpjbGFzcyBfX2F0 dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eFNjcm9sbGVkV2luZG93IDogcHVibGljIHd4UGFuZWwN CnsNCnB1YmxpYzoNCiAgICB3eFNjcm9sbGVkV2luZG93KCk7DQogICAgd3hTY3JvbGxlZFdpbmRv dyh3eFdpbmRvdyAqcGFyZW50LA0KICAgICAgICAgICAgICAgICAgICAgd3hXaW5kb3dJRCBpZCA9 IC0xLA0KICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd3hQb2ludCYgcG9zID0gd3hEZWZhdWx0 UG9zaXRpb24sDQogICAgICAgICAgICAgICAgICAgICBjb25zdCB3eFNpemUmIHNpemUgPSB3eERl ZmF1bHRTaXplLA0KICAgICAgICAgICAgICAgICAgICAgbG9uZyBzdHlsZSA9ICgweDQwMDAwMDAw IHwgMHg4MDAwMDAwMCksDQogICAgICAgICAgICAgICAgICAgICBjb25zdCB3eFN0cmluZyYgbmFt ZSA9IHd4UGFuZWxOYW1lU3RyKQ0KICAgIHsNCiAgICAgICAgQ3JlYXRlKHBhcmVudCwgaWQsIHBv cywgc2l6ZSwgc3R5bGUsIG5hbWUpOw0KICAgIH0NCg0KICAgIH53eFNjcm9sbGVkV2luZG93KCk7 DQoNCiAgICBib29sIENyZWF0ZSh3eFdpbmRvdyAqcGFyZW50LA0KICAgICAgICAgICAgICAgIHd4 V2luZG93SUQgaWQsDQogICAgICAgICAgICAgICAgY29uc3Qgd3hQb2ludCYgcG9zID0gd3hEZWZh dWx0UG9zaXRpb24sDQogICAgICAgICAgICAgICAgY29uc3Qgd3hTaXplJiBzaXplID0gd3hEZWZh dWx0U2l6ZSwNCiAgICAgICAgICAgICAgICBsb25nIHN0eWxlID0gKDB4NDAwMDAwMDAgfCAweDgw MDAwMDAwKSwNCiAgICAgICAgICAgICAgICBjb25zdCB3eFN0cmluZyYgbmFtZSA9IHd4UGFuZWxO YW1lU3RyKTsNCg0KDQoNCg0KDQoNCiAgICB2aXJ0dWFsIHZvaWQgU2V0VGFyZ2V0V2luZG93KCB3 eFdpbmRvdyAqdGFyZ2V0ICk7DQogICAgdmlydHVhbCB3eFdpbmRvdyAqR2V0VGFyZ2V0V2luZG93 KCk7DQoNCg0KDQoNCiAgICB2aXJ0dWFsIHZvaWQgU2V0U2Nyb2xsYmFycyhpbnQgcGl4ZWxzUGVy VW5pdFgsIGludCBwaXhlbHNQZXJVbml0WSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50IG5vVW5pdHNYLCBpbnQgbm9Vbml0c1ksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCB4UG9zID0gMCwgaW50IHlQb3MgPSAwLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBib29sIG5vUmVmcmVzaCA9IDAgKTsNCg0KDQogICAgdmlydHVhbCB2b2lkIFNjcm9sbChpbnQg eF9wb3MsIGludCB5X3Bvcyk7DQoNCg0KDQoNCg0KDQogICAgaW50IEdldFNjcm9sbFBhZ2VTaXpl KGludCBvcmllbnQpIGNvbnN0Ow0KICAgIHZvaWQgU2V0U2Nyb2xsUGFnZVNpemUoaW50IG9yaWVu dCwgaW50IHBhZ2VTaXplKTsNCg0KICAgIHZpcnR1YWwgdm9pZCBHZXRTY3JvbGxQaXhlbHNQZXJV bml0KGludCAqeF91bml0LCBpbnQgKnlfdW5pdCkgY29uc3Q7DQoNCg0KDQoNCg0KDQoNCiAgICB2 aXJ0dWFsIHZvaWQgRW5hYmxlU2Nyb2xsaW5nKGJvb2wgeF9zY3JvbGxpbmcsIGJvb2wgeV9zY3Jv bGxpbmcpOw0KDQoNCiAgICB2aXJ0dWFsIHZvaWQgR2V0Vmlld1N0YXJ0KGludCAqeCwgaW50ICp5 KSBjb25zdDsNCg0KICAgIHZvaWQgVmlld1N0YXJ0KGludCAqeCwgaW50ICp5KSBjb25zdA0KICAg ICAgIHsgR2V0Vmlld1N0YXJ0KCB4LCB5ICk7IH0NCg0KDQogICAgdmlydHVhbCB2b2lkIEdldFZp cnR1YWxTaXplKGludCAqeCwgaW50ICp5KSBjb25zdDsNCg0KDQogICAgdm9pZCBTZXRTY2FsZShk b3VibGUgeHMsIGRvdWJsZSB5cykgeyBtX3NjYWxlWCA9IHhzOyBtX3NjYWxlWSA9IHlzOyB9DQog ICAgZG91YmxlIEdldFNjYWxlWCgpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGVYOyB9DQogICAgZG91 YmxlIEdldFNjYWxlWSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGVZOyB9DQoNCiAgICB2aXJ0dWFs IHZvaWQgQ2FsY1Njcm9sbGVkUG9zaXRpb24oaW50IHgsIGludCB5LCBpbnQgKnh4LCBpbnQgKnl5 KSBjb25zdDsNCiAgICB2aXJ0dWFsIHZvaWQgQ2FsY1Vuc2Nyb2xsZWRQb3NpdGlvbihpbnQgeCwg aW50IHksIGludCAqeHgsIGludCAqeXkpIGNvbnN0Ow0KDQoNCiAgICB2aXJ0dWFsIHZvaWQgQWRq dXN0U2Nyb2xsYmFycyh2b2lkKTsNCg0KDQogICAgdmlydHVhbCB2b2lkIE9uRHJhdyh3eERDJiAp IHt9Ow0KDQoNCg0KICAgIHZpcnR1YWwgdm9pZCBQcmVwYXJlREMod3hEQyYgZGMpOw0KDQoNCiAg ICB2b2lkIE9uU2Nyb2xsKHd4U2Nyb2xsV2luRXZlbnQmIGV2ZW50KTsNCiAgICB2b2lkIE9uU2l6 ZSh3eFNpemVFdmVudCYgZXZlbnQpOw0KICAgIHZvaWQgT25QYWludCh3eFBhaW50RXZlbnQmIGV2 ZW50KTsNCiAgICB2b2lkIE9uQ2hhcih3eEtleUV2ZW50JiBldmVudCk7DQoNCg0KICAgIHZpcnR1 YWwgaW50IENhbGNTY3JvbGxJbmMod3hTY3JvbGxXaW5FdmVudCYgZXZlbnQpOw0KDQpwcm90ZWN0 ZWQ6DQogICAgd3hXaW5kb3cgKm1fdGFyZ2V0V2luZG93Ow0KICAgIGludCBtX3hTY3JvbGxQaXhl bHNQZXJMaW5lOw0KICAgIGludCBtX3lTY3JvbGxQaXhlbHNQZXJMaW5lOw0KICAgIGJvb2wgbV94 U2Nyb2xsaW5nRW5hYmxlZDsNCiAgICBib29sIG1feVNjcm9sbGluZ0VuYWJsZWQ7DQogICAgaW50 IG1feFNjcm9sbFBvc2l0aW9uOw0KICAgIGludCBtX3lTY3JvbGxQb3NpdGlvbjsNCiAgICBpbnQg bV94U2Nyb2xsTGluZXM7DQogICAgaW50IG1feVNjcm9sbExpbmVzOw0KICAgIGludCBtX3hTY3Jv bGxMaW5lc1BlclBhZ2U7DQogICAgaW50IG1feVNjcm9sbExpbmVzUGVyUGFnZTsNCiAgICBkb3Vi bGUgbV9zY2FsZVg7DQogICAgZG91YmxlIG1fc2NhbGVZOw0KDQpwcml2YXRlOg0KICAgIHByaXZh dGU6IHN0YXRpYyBjb25zdCB3eEV2ZW50VGFibGVFbnRyeSBzbV9ldmVudFRhYmxlRW50cmllc1td O3Byb3RlY3RlZDogc3RhdGljIGNvbnN0IHd4RXZlbnRUYWJsZSBzbV9ldmVudFRhYmxlOyB2aXJ0 dWFsIGNvbnN0IHd4RXZlbnRUYWJsZSogR2V0RXZlbnRUYWJsZSgpIGNvbnN0Ow0KICAgIHB1Ymxp Yzogc3RhdGljIHd4Q2xhc3NJbmZvIHNtX2NsYXNzd3hTY3JvbGxlZFdpbmRvdzsgd3hDbGFzc0lu Zm8gKkdldENsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZ3eFNjcm9sbGVkV2luZG93OjpzbV9j bGFzc3d4U2Nyb2xsZWRXaW5kb3c7IH0NCn07DQojIDUgIi4uLy4uL2luY2x1ZGUvd3gvc2Nyb2x3 aW4uaCIgMg0KIyA2OSAiLi4vLi4vaW5jbHVkZS93eC93eC5oIiAyDQojIDEgIi4uLy4uL2luY2x1 ZGUvd3gvc3RhdHVzYnIuaCIgMQ0KIyAyMSAiLi4vLi4vaW5jbHVkZS93eC9zdGF0dXNici5oIg0K Y2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hTdGF0dXNCYXJCYXNlIDogcHVibGlj IHd4V2luZG93DQp7DQpwdWJsaWM6DQogICAgd3hTdGF0dXNCYXJCYXNlKCkgeyBtX3N0YXR1c1dp ZHRocyA9IF9fbnVsbDsgfQ0KDQoNCiAgICB2aXJ0dWFsIHZvaWQgU2V0RmllbGRzQ291bnQoaW50 IG51bWJlciA9IDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCAq d2lkdGhzID0gKGNvbnN0IGludCAqKSBfX251bGwpID0gMDsNCiAgICBpbnQgR2V0RmllbGRzQ291 bnQoKSBjb25zdCB7IHJldHVybiBtX25GaWVsZHM7IH0NCg0KDQogICAgdmlydHVhbCB2b2lkIFNl dFN0YXR1c1RleHQoY29uc3Qgd3hTdHJpbmcmIHRleHQsIGludCBudW1iZXIgPSAwKSA9IDA7DQog ICAgdmlydHVhbCB3eFN0cmluZyBHZXRTdGF0dXNUZXh0KGludCBudW1iZXIgPSAwKSBjb25zdCA9 IDA7DQoNCg0KICAgIHZpcnR1YWwgdm9pZCBTZXRTdGF0dXNXaWR0aHMoaW50IG4sIGNvbnN0IGlu dCB3aWR0aHNbXSkgPSAwOw0KDQoNCiAgICB2aXJ0dWFsIGJvb2wgR2V0RmllbGRSZWN0KGludCBp LCB3eFJlY3QmIHJlY3QpIGNvbnN0ID0gMDsNCg0KDQogICAgdmlydHVhbCB2b2lkIFNldE1pbkhl aWdodChpbnQgaGVpZ2h0KSA9IDA7DQoNCg0KICAgIHZpcnR1YWwgaW50IEdldEJvcmRlclgoKSBj b25zdCA9IDA7DQogICAgdmlydHVhbCBpbnQgR2V0Qm9yZGVyWSgpIGNvbnN0ID0gMDsNCg0KcHJv dGVjdGVkOg0KICAgIGludCBtX25GaWVsZHM7DQogICAgaW50ICptX3N0YXR1c1dpZHRoczsNCn07 DQoNCg0KIyAxICIuLi8uLi9pbmNsdWRlL3d4L21zdy9zdGF0YnI5NS5oIiAxDQojIDE2ICIuLi8u Li9pbmNsdWRlL3d4L21zdy9zdGF0YnI5NS5oIg0KI3ByYWdtYSBpbnRlcmZhY2UgInN0YXRicjk1 LmgiDQoNCg0KDQoNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4U3RhdHVzQmFy OTUgOiBwdWJsaWMgd3hTdGF0dXNCYXJCYXNlDQp7DQpwdWJsaWM6DQoNCiAgICB3eFN0YXR1c0Jh cjk1KCk7DQogICAgd3hTdGF0dXNCYXI5NSh3eFdpbmRvdyAqcGFyZW50LA0KICAgICAgICAgICAg ICAgICAgd3hXaW5kb3dJRCBpZCA9IC0xLA0KICAgICAgICAgICAgICAgICAgbG9uZyBzdHlsZSA9 IDB4MDAxMCwNCiAgICAgICAgICAgICAgICAgIGNvbnN0IHd4U3RyaW5nJiBuYW1lID0gd3hFbXB0 eVN0cmluZykNCiAgICB7DQogICAgICAgICh2b2lkKUNyZWF0ZShwYXJlbnQsIGlkLCBzdHlsZSwg bmFtZSk7DQogICAgfQ0KDQogICAgYm9vbCBDcmVhdGUod3hXaW5kb3cgKnBhcmVudCwNCiAgICAg ICAgICAgICAgICB3eFdpbmRvd0lEIGlkID0gLTEsDQogICAgICAgICAgICAgICAgbG9uZyBzdHls ZSA9IDB4MDAxMCwNCiAgICAgICAgICAgICAgICBjb25zdCB3eFN0cmluZyYgbmFtZSA9IHd4RW1w dHlTdHJpbmcpOw0KDQogICAgdmlydHVhbCB+d3hTdGF0dXNCYXI5NSgpOw0KDQoNCiAgICB2aXJ0 dWFsIHZvaWQgU2V0RmllbGRzQ291bnQoaW50IG51bWJlciA9IDEsIGNvbnN0IGludCAqd2lkdGhz ID0gX19udWxsKTsNCg0KDQogICAgdmlydHVhbCB2b2lkIFNldFN0YXR1c1RleHQoY29uc3Qgd3hT dHJpbmcmIHRleHQsIGludCBudW1iZXIgPSAwKTsNCiAgICB2aXJ0dWFsIHd4U3RyaW5nIEdldFN0 YXR1c1RleHQoaW50IG51bWJlciA9IDApIGNvbnN0Ow0KDQoNCiAgICB2aXJ0dWFsIHZvaWQgU2V0 U3RhdHVzV2lkdGhzKGludCBuLCBjb25zdCBpbnQgd2lkdGhzX2ZpZWxkW10pOw0KDQoNCiAgICB2 aXJ0dWFsIHZvaWQgU2V0TWluSGVpZ2h0KGludCBoZWlnaHQpOw0KDQoNCiAgICB2aXJ0dWFsIGJv b2wgR2V0RmllbGRSZWN0KGludCBpLCB3eFJlY3QmIHJlY3QpIGNvbnN0Ow0KDQoNCiAgICB2aXJ0 dWFsIGludCBHZXRCb3JkZXJYKCkgY29uc3Q7DQogICAgdmlydHVhbCBpbnQgR2V0Qm9yZGVyWSgp IGNvbnN0Ow0KDQpwcm90ZWN0ZWQ6DQogICAgdm9pZCBDb3B5RmllbGRzV2lkdGgoY29uc3QgaW50 IHdpZHRoc1tdKTsNCiAgICB2b2lkIFNldEZpZWxkc1dpZHRoKCk7DQoNCg0KICAgIHZvaWQgRG9N b3ZlV2luZG93KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsNCg0KcHJpdmF0 ZToNCiAgICBwdWJsaWM6IHN0YXRpYyB3eENsYXNzSW5mbyBzbV9jbGFzc3d4U3RhdHVzQmFyOTU7 IHd4Q2xhc3NJbmZvICpHZXRDbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmd3hTdGF0dXNCYXI5 NTo6c21fY2xhc3N3eFN0YXR1c0Jhcjk1OyB9Ow0KfTsNCiMgNTUgIi4uLy4uL2luY2x1ZGUvd3gv c3RhdHVzYnIuaCIgMg0KDQogICAgdHlwZWRlZiB3eFN0YXR1c0Jhcjk1IHd4U3RhdHVzQmFyUmVh bDsNCiMgNjYgIi4uLy4uL2luY2x1ZGUvd3gvc3RhdHVzYnIuaCINCmNsYXNzIF9fYXR0cmlidXRl X18oKGRsbGltcG9ydCkpIHd4U3RhdHVzQmFyIDogcHVibGljIHd4U3RhdHVzQmFyUmVhbA0Kew0K cHVibGljOg0KICAgIHd4U3RhdHVzQmFyKCkgeyB9DQogICAgd3hTdGF0dXNCYXIod3hXaW5kb3cg KnBhcmVudCwNCiAgICAgICAgICAgICAgICB3eFdpbmRvd0lEIGlkLA0KICAgICAgICAgICAgICAg IGNvbnN0IHd4UG9pbnQmID0gd3hEZWZhdWx0UG9zaXRpb24sDQogICAgICAgICAgICAgICAgY29u c3Qgd3hTaXplJiA9IHd4RGVmYXVsdFNpemUsDQogICAgICAgICAgICAgICAgbG9uZyBzdHlsZSA9 IDB4MDAxMCwNCiAgICAgICAgICAgICAgICBjb25zdCB3eFN0cmluZyYgbmFtZSA9IHd4UGFuZWxO YW1lU3RyKQ0KICAgIHsNCiAgICAgICAgQ3JlYXRlKHBhcmVudCwgaWQsIHN0eWxlLCBuYW1lKTsN CiAgICB9DQogICAgd3hTdGF0dXNCYXIod3hXaW5kb3cgKnBhcmVudCwNCiAgICAgICAgICAgICAg ICB3eFdpbmRvd0lEIGlkLA0KICAgICAgICAgICAgICAgIGxvbmcgc3R5bGUsDQogICAgICAgICAg ICAgICAgY29uc3Qgd3hTdHJpbmcmIG5hbWUgPSB3eFBhbmVsTmFtZVN0cikNCiAgICB7DQogICAg ICAgIENyZWF0ZShwYXJlbnQsIGlkLCBzdHlsZSwgbmFtZSk7DQogICAgfQ0KDQpwcml2YXRlOg0K ICAgIHB1YmxpYzogc3RhdGljIHd4Q2xhc3NJbmZvIHNtX2NsYXNzd3hTdGF0dXNCYXI7IHd4Q2xh c3NJbmZvICpHZXRDbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmd3hTdGF0dXNCYXI6OnNtX2Ns YXNzd3hTdGF0dXNCYXI7IH0NCn07DQojIDcwICIuLi8uLi9pbmNsdWRlL3d4L3d4LmgiIDINCg0K IyAxICIuLi8uLi9pbmNsdWRlL3d4L2Nob2ljZGxnLmgiIDENCg0KDQoNCiMgMSAiLi4vLi4vaW5j bHVkZS93eC9nZW5lcmljL2Nob2ljZGdnLmgiIDENCiMgMTYgIi4uLy4uL2luY2x1ZGUvd3gvZ2Vu ZXJpYy9jaG9pY2RnZy5oIg0KI3ByYWdtYSBpbnRlcmZhY2UgImNob2ljZGdnLmgiDQoNCg0KDQoN CmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4TGlzdEJveDsNCg0KDQoNCg0KDQoN CmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4U2luZ2xlQ2hvaWNlRGlhbG9nOiBw dWJsaWMgd3hEaWFsb2cNCnsNCiAgICBwdWJsaWM6IHN0YXRpYyB3eENsYXNzSW5mbyBzbV9jbGFz c3d4U2luZ2xlQ2hvaWNlRGlhbG9nOyB3eENsYXNzSW5mbyAqR2V0Q2xhc3NJbmZvKCkgY29uc3Qg eyByZXR1cm4gJnd4U2luZ2xlQ2hvaWNlRGlhbG9nOjpzbV9jbGFzc3d4U2luZ2xlQ2hvaWNlRGlh bG9nOyB9DQoNCnB1YmxpYzoNCiAgICB3eFNpbmdsZUNob2ljZURpYWxvZyh3eFdpbmRvdyAqcGFy ZW50LA0KICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHd4U3RyaW5nJiBtZXNzYWdlLA0K ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHd4U3RyaW5nJiBjYXB0aW9uLA0KICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBuLA0KICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHd4U3RyaW5nICpjaG9pY2VzLA0KICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipjbGll bnREYXRhID0gKGNoYXIgKiopX19udWxsLA0KICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcg c3R5bGUgPSAoKDB4MDgwMCB8IDB4MjAwMDAwMDApfDB4MDAwMDAwMDQgfCAweDAwMDAwMDEwIHwg d3hDRU5UUkUpLA0KICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHd4UG9pbnQmIHBvcyA9 IHd4RGVmYXVsdFBvc2l0aW9uKTsNCg0KICAgIHd4U2luZ2xlQ2hvaWNlRGlhbG9nKHd4V2luZG93 ICpwYXJlbnQsDQogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd3hTdHJpbmcmIG1lc3Nh Z2UsDQogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd3hTdHJpbmcmIGNhcHRpb24sDQog ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd3hTdHJpbmdMaXN0JiBjaG9pY2VzLA0KICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipjbGllbnREYXRhID0gKGNoYXIgKiopX19udWxs LA0KICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc3R5bGUgPSAoKDB4MDgwMCB8IDB4MjAw MDAwMDApfDB4MDAwMDAwMDQgfCAweDAwMDAwMDEwIHwgd3hDRU5UUkUpLA0KICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IHd4UG9pbnQmIHBvcyA9IHd4RGVmYXVsdFBvc2l0aW9uKTsNCg0K ICAgIGJvb2wgQ3JlYXRlKHd4V2luZG93ICpwYXJlbnQsDQogICAgICAgICAgICAgICAgY29uc3Qg d3hTdHJpbmcmIG1lc3NhZ2UsDQogICAgICAgICAgICAgICAgY29uc3Qgd3hTdHJpbmcmIGNhcHRp b24sDQogICAgICAgICAgICAgICAgaW50IG4sDQogICAgICAgICAgICAgICAgY29uc3Qgd3hTdHJp bmcgKmNob2ljZXMsDQogICAgICAgICAgICAgICAgY2hhciAqKmNsaWVudERhdGEgPSAoY2hhciAq KilfX251bGwsDQogICAgICAgICAgICAgICAgbG9uZyBzdHlsZSA9ICgoMHgwODAwIHwgMHgyMDAw MDAwMCl8MHgwMDAwMDAwNCB8IDB4MDAwMDAwMTAgfCB3eENFTlRSRSksDQogICAgICAgICAgICAg ICAgY29uc3Qgd3hQb2ludCYgcG9zID0gd3hEZWZhdWx0UG9zaXRpb24pOw0KDQogICAgYm9vbCBD cmVhdGUod3hXaW5kb3cgKnBhcmVudCwNCiAgICAgICAgICAgICAgICBjb25zdCB3eFN0cmluZyYg bWVzc2FnZSwNCiAgICAgICAgICAgICAgICBjb25zdCB3eFN0cmluZyYgY2FwdGlvbiwNCiAgICAg ICAgICAgICAgICBjb25zdCB3eFN0cmluZ0xpc3QmIGNob2ljZXMsDQogICAgICAgICAgICAgICAg Y2hhciAqKmNsaWVudERhdGEgPSAoY2hhciAqKilfX251bGwsDQogICAgICAgICAgICAgICAgbG9u ZyBzdHlsZSA9ICgoMHgwODAwIHwgMHgyMDAwMDAwMCl8MHgwMDAwMDAwNCB8IDB4MDAwMDAwMTAg fCB3eENFTlRSRSksDQogICAgICAgICAgICAgICAgY29uc3Qgd3hQb2ludCYgcG9zID0gd3hEZWZh dWx0UG9zaXRpb24pOw0KDQogICAgdm9pZCBTZXRTZWxlY3Rpb24oaW50IHNlbCk7DQogICAgaW50 IEdldFNlbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uOyB9DQogICAgd3hTdHJp bmcgR2V0U3RyaW5nU2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmdTZWxlY3Rpb247 IH0NCg0KDQogICAgY2hhciAqR2V0U2VsZWN0aW9uQ2xpZW50RGF0YSgpIGNvbnN0IHsgcmV0dXJu IChjaGFyICopbV9jbGllbnREYXRhOyB9DQoNCg0KICAgIHZvaWQgT25PSyh3eENvbW1hbmRFdmVu dCYgZXZlbnQpOw0KICAgIHZvaWQgT25MaXN0Qm94RENsaWNrKHd4Q29tbWFuZEV2ZW50JiBldmVu dCk7DQoNCnByb3RlY3RlZDoNCiAgICBpbnQgbV9zZWxlY3Rpb247DQogICAgbG9uZyBtX2RpYWxv Z1N0eWxlOw0KICAgIHd4U3RyaW5nIG1fc3RyaW5nU2VsZWN0aW9uOw0KICAgIHd4TGlzdEJveCAq bV9saXN0Ym94Ow0KDQpwcml2YXRlOg0KICAgIHByaXZhdGU6IHN0YXRpYyBjb25zdCB3eEV2ZW50 VGFibGVFbnRyeSBzbV9ldmVudFRhYmxlRW50cmllc1tdO3Byb3RlY3RlZDogc3RhdGljIGNvbnN0 IHd4RXZlbnRUYWJsZSBzbV9ldmVudFRhYmxlOyB2aXJ0dWFsIGNvbnN0IHd4RXZlbnRUYWJsZSog R2V0RXZlbnRUYWJsZSgpIGNvbnN0Ow0KfTsNCg0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkg d3hTdHJpbmcgd3hHZXRTaW5nbGVDaG9pY2UoY29uc3Qgd3hTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0 IHd4U3RyaW5nJiBjYXB0aW9uLA0KICAgICAgICAgICAgICAgICAgICAgICAgaW50IG4sIGNvbnN0 IHd4U3RyaW5nICpjaG9pY2VzLCB3eFdpbmRvdyAqcGFyZW50ID0gKHd4V2luZG93ICopIF9fbnVs bCwNCiAgICAgICAgICAgICAgICAgICAgICAgIGludCB4ID0gLTEsIGludCB5ID0gLTEsIGJvb2wg Y2VudHJlID0gMSwNCiAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCA9IDIwMCwgaW50 IGhlaWdodCA9IDE1MCk7DQoNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4U3RyaW5nIHd4 R2V0U2luZ2xlQ2hvaWNlKGNvbnN0IHd4U3RyaW5nJiBtZXNzYWdlLCBjb25zdCB3eFN0cmluZyYg Y2FwdGlvbiwNCiAgICAgICAgICAgICAgICAgICAgICAgIGludCBuLCBjaGFyICpjaG9pY2VzW10s IHd4V2luZG93ICpwYXJlbnQgPSAod3hXaW5kb3cgKikgX19udWxsLA0KICAgICAgICAgICAgICAg ICAgICAgICAgaW50IHggPSAtMSwgaW50IHkgPSAtMSwgYm9vbCBjZW50cmUgPSAxLA0KICAgICAg ICAgICAgICAgICAgICAgICAgaW50IHdpZHRoID0gMjAwLCBpbnQgaGVpZ2h0ID0gMTUwKTsNCg0K DQoNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGludCB3eEdldFNpbmdsZUNob2ljZUluZGV4 KGNvbnN0IHd4U3RyaW5nJiBtZXNzYWdlLCBjb25zdCB3eFN0cmluZyYgY2FwdGlvbiwNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBuLCBjb25zdCB3eFN0cmluZyAqY2hvaWNlcywgd3hX aW5kb3cgKnBhcmVudCA9ICh3eFdpbmRvdyAqKSBfX251bGwsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgeCA9IC0xLCBpbnQgeSA9IC0xLCBib29sIGNlbnRyZSA9IDEsDQogICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGggPSAyMDAsIGludCBoZWlnaHQgPSAxNTApOw0K DQpfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBpbnQgd3hHZXRTaW5nbGVDaG9pY2VJbmRleChj b25zdCB3eFN0cmluZyYgbWVzc2FnZSwgY29uc3Qgd3hTdHJpbmcmIGNhcHRpb24sDQogICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgbiwgY2hhciAqY2hvaWNlc1tdLCB3eFdpbmRvdyAqcGFy ZW50ID0gKHd4V2luZG93ICopIF9fbnVsbCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCB4ID0gLTEsIGludCB5ID0gLTEsIGJvb2wgY2VudHJlID0gMSwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCB3aWR0aCA9IDIwMCwgaW50IGhlaWdodCA9IDE1MCk7DQoNCg0KX19hdHRy aWJ1dGVfXygoZGxsaW1wb3J0KSkgdm9pZCogd3hHZXRTaW5nbGVDaG9pY2VEYXRhKGNvbnN0IHd4 U3RyaW5nJiBtZXNzYWdlLCBjb25zdCB3eFN0cmluZyYgY2FwdGlvbiwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgbiwgY29uc3Qgd3hTdHJpbmcgKmNob2ljZXMsIHZvaWQgKipjbGll bnRfZGF0YSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3eFdpbmRvdyAqcGFyZW50ID0g KHd4V2luZG93ICopIF9fbnVsbCwgaW50IHggPSAtMSwgaW50IHkgPSAtMSwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBib29sIGNlbnRyZSA9IDEsDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IHdpZHRoID0gMjAwLCBpbnQgaGVpZ2h0ID0gMTUwKTsNCg0KX19hdHRyaWJ1dGVf XygoZGxsaW1wb3J0KSkgdm9pZCogd3hHZXRTaW5nbGVDaG9pY2VEYXRhKGNvbnN0IHd4U3RyaW5n JiBtZXNzYWdlLCBjb25zdCB3eFN0cmluZyYgY2FwdGlvbiwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgbiwgY2hhciAqY2hvaWNlc1tdLCB2b2lkICoqY2xpZW50X2RhdGEsDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgd3hXaW5kb3cgKnBhcmVudCA9ICh3eFdpbmRvdyAqKSBf X251bGwsIGludCB4ID0gLTEsIGludCB5ID0gLTEsDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgYm9vbCBjZW50cmUgPSAxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0 aCA9IDIwMCwgaW50IGhlaWdodCA9IDE1MCk7DQojIDUgIi4uLy4uL2luY2x1ZGUvd3gvY2hvaWNk bGcuaCIgMg0KIyA3MiAiLi4vLi4vaW5jbHVkZS93eC93eC5oIiAyDQojIDEgIi4uLy4uL2luY2x1 ZGUvd3gvdGV4dGRsZy5oIiAxDQoNCg0KDQojIDEgIi4uLy4uL2luY2x1ZGUvd3gvZ2VuZXJpYy90 ZXh0ZGxnZy5oIiAxDQojIDE2ICIuLi8uLi9pbmNsdWRlL3d4L2dlbmVyaWMvdGV4dGRsZ2cuaCIN CiNwcmFnbWEgaW50ZXJmYWNlICJ0ZXh0ZGxnZy5oIg0KDQoNCg0KDQoNCg0KY2xhc3MgX19hdHRy aWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hUZXh0Q3RybDsNCg0KX19hdHRyaWJ1dGVfXygoZGxsaW1w b3J0KSkgZXh0ZXJuIGNvbnN0IGNoYXIqIHd4R2V0VGV4dEZyb21Vc2VyUHJvbXB0U3RyOw0KX19h dHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgZXh0ZXJuIGNvbnN0IGNoYXIqIHd4RW1wdHlTdHJpbmc7 DQoNCg0KDQoNCg0KDQoNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4VGV4dEVu dHJ5RGlhbG9nIDogcHVibGljIHd4RGlhbG9nDQp7DQpwdWJsaWM6DQogICAgd3hUZXh0RW50cnlE aWFsb2cod3hXaW5kb3cgKnBhcmVudCwNCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3eFN0 cmluZyYgbWVzc2FnZSwNCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3eFN0cmluZyYgY2Fw dGlvbiA9IHd4R2V0VGV4dEZyb21Vc2VyUHJvbXB0U3RyLA0KICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHd4U3RyaW5nJiB2YWx1ZSA9IHd4RW1wdHlTdHJpbmcsDQogICAgICAgICAgICAgICAg ICAgICAgbG9uZyBzdHlsZSA9ICgweDAwMDAwMDA0IHwgMHgwMDAwMDAxMCB8IHd4Q0VOVFJFKSwN CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3eFBvaW50JiBwb3MgPSB3eERlZmF1bHRQb3Np dGlvbik7DQoNCiAgICB2b2lkIFNldFZhbHVlKGNvbnN0IHd4U3RyaW5nJiB2YWwpIHsgbV92YWx1 ZSA9IHZhbDsgfQ0KICAgIHd4U3RyaW5nIEdldFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1 ZTsgfQ0KDQoNCiAgICB2b2lkIE9uT0sod3hDb21tYW5kRXZlbnQmIGV2ZW50KTsNCg0KcHJvdGVj dGVkOg0KICAgIHd4VGV4dEN0cmwgKm1fdGV4dGN0cmw7DQogICAgd3hTdHJpbmcgbV92YWx1ZTsN CiAgICBsb25nIG1fZGlhbG9nU3R5bGU7DQoNCnByaXZhdGU6DQogICAgcHJpdmF0ZTogc3RhdGlj IGNvbnN0IHd4RXZlbnRUYWJsZUVudHJ5IHNtX2V2ZW50VGFibGVFbnRyaWVzW107cHJvdGVjdGVk OiBzdGF0aWMgY29uc3Qgd3hFdmVudFRhYmxlIHNtX2V2ZW50VGFibGU7IHZpcnR1YWwgY29uc3Qg d3hFdmVudFRhYmxlKiBHZXRFdmVudFRhYmxlKCkgY29uc3Q7DQogICAgcHVibGljOiBzdGF0aWMg d3hDbGFzc0luZm8gc21fY2xhc3N3eFRleHRFbnRyeURpYWxvZzsgd3hDbGFzc0luZm8gKkdldENs YXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZ3eFRleHRFbnRyeURpYWxvZzo6c21fY2xhc3N3eFRl eHRFbnRyeURpYWxvZzsgfQ0KfTsNCg0KDQoNCg0KDQp3eFN0cmluZyBfX2F0dHJpYnV0ZV9fKChk bGxpbXBvcnQpKQ0Kd3hHZXRUZXh0RnJvbVVzZXIoY29uc3Qgd3hTdHJpbmcmIG1lc3NhZ2UsDQog ICAgICAgICAgICAgICAgICBjb25zdCB3eFN0cmluZyYgY2FwdGlvbiA9IHd4R2V0VGV4dEZyb21V c2VyUHJvbXB0U3RyLA0KICAgICAgICAgICAgICAgICAgY29uc3Qgd3hTdHJpbmcmIGRlZmF1bHRf dmFsdWUgPSB3eEVtcHR5U3RyaW5nLA0KICAgICAgICAgICAgICAgICAgd3hXaW5kb3cgKnBhcmVu dCA9ICh3eFdpbmRvdyAqKSBfX251bGwsDQogICAgICAgICAgICAgICAgICBpbnQgeCA9IC0xLA0K ICAgICAgICAgICAgICAgICAgaW50IHkgPSAtMSwNCiAgICAgICAgICAgICAgICAgIGJvb2wgY2Vu dHJlID0gMSk7DQoNCnd4U3RyaW5nIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpDQp3eEdldFBh c3N3b3JkRnJvbVVzZXIoY29uc3Qgd3hTdHJpbmcmIG1lc3NhZ2UsDQogICAgICAgICAgICAgICAg ICAgICAgY29uc3Qgd3hTdHJpbmcmIGNhcHRpb24gPSB3eEdldFRleHRGcm9tVXNlclByb21wdFN0 ciwNCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3eFN0cmluZyYgZGVmYXVsdF92YWx1ZSA9 IHd4RW1wdHlTdHJpbmcsDQogICAgICAgICAgICAgICAgICAgICAgd3hXaW5kb3cgKnBhcmVudCA9 ICh3eFdpbmRvdyAqKSBfX251bGwpOw0KIyA1ICIuLi8uLi9pbmNsdWRlL3d4L3RleHRkbGcuaCIg Mg0KDQoNCg0KDQoNCmxvbmcgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkNCnd4R2V0TnVtYmVy RnJvbVVzZXIoY29uc3Qgd3hTdHJpbmcmIG1lc3NhZ2UsDQogICAgICAgICAgICAgICAgICAgIGNv bnN0IHd4U3RyaW5nJiBwcm9tcHQsDQogICAgICAgICAgICAgICAgICAgIGNvbnN0IHd4U3RyaW5n JiBjYXB0aW9uLA0KICAgICAgICAgICAgICAgICAgICBsb25nIHZhbHVlID0gMCwNCiAgICAgICAg ICAgICAgICAgICAgbG9uZyBtaW4gPSAwLA0KICAgICAgICAgICAgICAgICAgICBsb25nIG1heCA9 IDEwMCwNCiAgICAgICAgICAgICAgICAgICAgd3hXaW5kb3cgKnBhcmVudCA9ICh3eFdpbmRvdyAq KV9fbnVsbCwNCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd3hQb2ludCYgcG9zID0gd3hEZWZh dWx0UG9zaXRpb24pOw0KIyA3MyAiLi4vLi4vaW5jbHVkZS93eC93eC5oIiAyDQojIDEgIi4uLy4u L2luY2x1ZGUvd3gvZmlsZWRsZy5oIiAxDQoNCg0KDQplbnVtDQp7DQogICAgd3hPUEVOID0gMSwN CiAgICB3eFNBVkUgPSAyLA0KICAgIHd4T1ZFUldSSVRFX1BST01QVCA9IDQsDQogICAgd3hISURF X1JFQURPTkxZID0gOCwNCiAgICB3eEZJTEVfTVVTVF9FWElTVCA9IDE2LA0KICAgIHd4TVVMVElQ TEUgPSAzMg0KfTsNCg0KDQojIDEgIi4uLy4uL2luY2x1ZGUvd3gvbXN3L2ZpbGVkbGcuaCIgMQ0K IyAxNiAiLi4vLi4vaW5jbHVkZS93eC9tc3cvZmlsZWRsZy5oIg0KI3ByYWdtYSBpbnRlcmZhY2Ug ImZpbGVkbGcuaCINCiMgMjUgIi4uLy4uL2luY2x1ZGUvd3gvbXN3L2ZpbGVkbGcuaCINCl9fYXR0 cmlidXRlX18oKGRsbGltcG9ydCkpIGV4dGVybiBjb25zdCBjaGFyKiB3eEZpbGVTZWxlY3RvclBy b21wdFN0cjsNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGV4dGVybiBjb25zdCBjaGFyKiB3 eEZpbGVTZWxlY3RvckRlZmF1bHRXaWxkY2FyZFN0cjsNCg0KY2xhc3MgX19hdHRyaWJ1dGVfXygo ZGxsaW1wb3J0KSkgd3hGaWxlRGlhbG9nOiBwdWJsaWMgd3hEaWFsb2cNCnsNCnB1YmxpYzoNCiAg ICB3eEZpbGVEaWFsb2cod3hXaW5kb3cgKnBhcmVudCwgY29uc3Qgd3hTdHJpbmcmIG1lc3NhZ2Ug PSB3eEZpbGVTZWxlY3RvclByb21wdFN0ciwNCiAgICAgICAgY29uc3Qgd3hTdHJpbmcmIGRlZmF1 bHREaXIgPSB3eEVtcHR5U3RyaW5nLCBjb25zdCB3eFN0cmluZyYgZGVmYXVsdEZpbGUgPSB3eEVt cHR5U3RyaW5nLCBjb25zdCB3eFN0cmluZyYgd2lsZENhcmQgPSB3eEZpbGVTZWxlY3RvckRlZmF1 bHRXaWxkY2FyZFN0ciwNCiAgICAgICAgbG9uZyBzdHlsZSA9IDAsIGNvbnN0IHd4UG9pbnQmIHBv cyA9IHd4RGVmYXVsdFBvc2l0aW9uKTsNCg0KICAgIHZvaWQgU2V0TWVzc2FnZShjb25zdCB3eFN0 cmluZyYgbWVzc2FnZSkgeyBtX21lc3NhZ2UgPSBtZXNzYWdlOyB9DQogICAgdm9pZCBTZXRQYXRo KGNvbnN0IHd4U3RyaW5nJiBwYXRoKSB7IG1fcGF0aCA9IHBhdGg7IH0NCiAgICB2b2lkIFNldERp cmVjdG9yeShjb25zdCB3eFN0cmluZyYgZGlyKSB7IG1fZGlyID0gZGlyOyB9DQogICAgdm9pZCBT ZXRGaWxlbmFtZShjb25zdCB3eFN0cmluZyYgbmFtZSkgeyBtX2ZpbGVOYW1lID0gbmFtZTsgfQ0K ICAgIHZvaWQgU2V0V2lsZGNhcmQoY29uc3Qgd3hTdHJpbmcmIHdpbGRDYXJkKSB7IG1fd2lsZENh cmQgPSB3aWxkQ2FyZDsgfQ0KICAgIHZvaWQgU2V0U3R5bGUobG9uZyBzdHlsZSkgeyBtX2RpYWxv Z1N0eWxlID0gc3R5bGU7IH0NCiAgICB2b2lkIFNldEZpbHRlckluZGV4KGludCBmaWx0ZXJJbmRl eCkgeyBtX2ZpbHRlckluZGV4ID0gZmlsdGVySW5kZXg7IH0NCg0KICAgIHd4U3RyaW5nIEdldE1l c3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX21lc3NhZ2U7IH0NCiAgICB3eFN0cmluZyBHZXRQYXRo KCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9DQogICAgdm9pZCBHZXRQYXRocyh3eEFycmF5U3Ry aW5nJiBwYXRocykgY29uc3Q7DQogICAgd3hTdHJpbmcgR2V0RGlyZWN0b3J5KCkgY29uc3QgeyBy ZXR1cm4gbV9kaXI7IH0NCiAgICB3eFN0cmluZyBHZXRGaWxlbmFtZSgpIGNvbnN0IHsgcmV0dXJu IG1fZmlsZU5hbWU7IH0NCiAgICB2b2lkIEdldEZpbGVuYW1lcyh3eEFycmF5U3RyaW5nJiBmaWxl cykgY29uc3QgeyBmaWxlcyA9IG1fZmlsZU5hbWVzOyB9DQogICAgd3hTdHJpbmcgR2V0V2lsZGNh cmQoKSBjb25zdCB7IHJldHVybiBtX3dpbGRDYXJkOyB9DQogICAgbG9uZyBHZXRTdHlsZSgpIGNv bnN0IHsgcmV0dXJuIG1fZGlhbG9nU3R5bGU7IH0NCiAgICBpbnQgR2V0RmlsdGVySW5kZXgoKSBj b25zdCB7IHJldHVybiBtX2ZpbHRlckluZGV4IDsgfQ0KDQogICAgaW50IFNob3dNb2RhbCgpOw0K DQpwcm90ZWN0ZWQ6DQogICAgd3hTdHJpbmcgbV9tZXNzYWdlOw0KICAgIGxvbmcgbV9kaWFsb2dT dHlsZTsNCiAgICB3eFdpbmRvdyAqIG1fcGFyZW50Ow0KICAgIHd4U3RyaW5nIG1fZGlyOw0KICAg IHd4U3RyaW5nIG1fcGF0aDsNCiAgICB3eFN0cmluZyBtX2ZpbGVOYW1lOw0KICAgIHd4QXJyYXlT dHJpbmcgbV9maWxlTmFtZXM7DQogICAgd3hTdHJpbmcgbV93aWxkQ2FyZDsNCiAgICBpbnQgbV9m aWx0ZXJJbmRleDsNCg0KcHJpdmF0ZToNCiAgICBwdWJsaWM6IHN0YXRpYyB3eENsYXNzSW5mbyBz bV9jbGFzc3d4RmlsZURpYWxvZzsgd3hDbGFzc0luZm8gKkdldENsYXNzSW5mbygpIGNvbnN0IHsg cmV0dXJuICZ3eEZpbGVEaWFsb2c6OnNtX2NsYXNzd3hGaWxlRGlhbG9nOyB9DQp9Ow0KDQoNCl9f YXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4U3RyaW5nDQp3eEZpbGVTZWxlY3Rvcihjb25zdCBj aGFyICptZXNzYWdlID0gd3hGaWxlU2VsZWN0b3JQcm9tcHRTdHIsDQogICAgICAgICAgICAgICBj b25zdCBjaGFyICpkZWZhdWx0X3BhdGggPSBfX251bGwsDQogICAgICAgICAgICAgICBjb25zdCBj aGFyICpkZWZhdWx0X2ZpbGVuYW1lID0gX19udWxsLA0KICAgICAgICAgICAgICAgY29uc3QgY2hh ciAqZGVmYXVsdF9leHRlbnNpb24gPSBfX251bGwsDQogICAgICAgICAgICAgICBjb25zdCBjaGFy ICp3aWxkY2FyZCA9IHd4RmlsZVNlbGVjdG9yRGVmYXVsdFdpbGRjYXJkU3RyLA0KICAgICAgICAg ICAgICAgaW50IGZsYWdzID0gMCwNCiAgICAgICAgICAgICAgIHd4V2luZG93ICpwYXJlbnQgPSBf X251bGwsDQogICAgICAgICAgICAgICBpbnQgeCA9IC0xLCBpbnQgeSA9IC0xKTsNCg0KDQpfX2F0 dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eFN0cmluZw0Kd3hGaWxlU2VsZWN0b3JFeChjb25zdCBj aGFyICptZXNzYWdlID0gd3hGaWxlU2VsZWN0b3JQcm9tcHRTdHIsDQogICAgICAgICAgICAgICAg IGNvbnN0IGNoYXIgKmRlZmF1bHRfcGF0aCA9IF9fbnVsbCwNCiAgICAgICAgICAgICAgICAgY29u c3QgY2hhciAqZGVmYXVsdF9maWxlbmFtZSA9IF9fbnVsbCwNCiAgICAgICAgICAgICAgICAgaW50 ICppbmRleERlZmF1bHRFeHRlbnNpb24gPSBfX251bGwsDQogICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIgKndpbGRjYXJkID0gd3hGaWxlU2VsZWN0b3JEZWZhdWx0V2lsZGNhcmRTdHIsDQogICAg ICAgICAgICAgICAgIGludCBmbGFncyA9IDAsDQogICAgICAgICAgICAgICAgIHd4V2luZG93ICpw YXJlbnQgPSBfX251bGwsDQogICAgICAgICAgICAgICAgIGludCB4ID0gLTEsIGludCB5ID0gLTEp Ow0KDQoNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4U3RyaW5nDQp3eExvYWRGaWxlU2Vs ZWN0b3IoY29uc3QgY2hhciAqd2hhdCwNCiAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpl eHRlbnNpb24sDQogICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGVmYXVsdF9uYW1lID0g KGNvbnN0IGNoYXIgKilfX251bGwsDQogICAgICAgICAgICAgICAgICAgd3hXaW5kb3cgKnBhcmVu dCA9ICh3eFdpbmRvdyAqKSBfX251bGwpOw0KDQoNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkp IHd4U3RyaW5nDQp3eFNhdmVGaWxlU2VsZWN0b3IoY29uc3QgY2hhciAqd2hhdCwNCiAgICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyICpleHRlbnNpb24sDQogICAgICAgICAgICAgICAgICAgY29u c3QgY2hhciAqZGVmYXVsdF9uYW1lID0gKGNvbnN0IGNoYXIgKikgX19udWxsLA0KICAgICAgICAg ICAgICAgICAgIHd4V2luZG93ICpwYXJlbnQgPSAod3hXaW5kb3cgKikgX19udWxsKTsNCiMgMTYg Ii4uLy4uL2luY2x1ZGUvd3gvZmlsZWRsZy5oIiAyDQojIDc0ICIuLi8uLi9pbmNsdWRlL3d4L3d4 LmgiIDINCiMgMSAiLi4vLi4vaW5jbHVkZS93eC9kaXJkbGcuaCIgMQ0KDQoNCg0KDQoNCg0KDQpf X2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBleHRlcm4gY29uc3QgY2hhciogd3hEaXJEaWFsb2dO YW1lU3RyOw0KX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgZXh0ZXJuIGNvbnN0IGNoYXIqIHd4 RGlyRGlhbG9nRGVmYXVsdEZvbGRlclN0cjsNCl9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGV4 dGVybiBjb25zdCBjaGFyKiB3eEVtcHR5U3RyaW5nOw0KDQoNCg0KDQoNCiMgMSAiLi4vLi4vaW5j bHVkZS93eC9tc3cvZGlyZGxnLmgiIDENCiMgMTYgIi4uLy4uL2luY2x1ZGUvd3gvbXN3L2RpcmRs Zy5oIg0KI3ByYWdtYSBpbnRlcmZhY2UgImRpcmRsZy5oIg0KDQoNCg0KDQpfX2F0dHJpYnV0ZV9f KChkbGxpbXBvcnQpKSBleHRlcm4gY29uc3QgY2hhciogd3hGaWxlU2VsZWN0b3JQcm9tcHRTdHI7 DQoNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4RGlyRGlhbG9nOiBwdWJsaWMg d3hEaWFsb2cNCnsNCnB1YmxpYzogc3RhdGljIHd4Q2xhc3NJbmZvIHNtX2NsYXNzd3hEaXJEaWFs b2c7IHd4Q2xhc3NJbmZvICpHZXRDbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmd3hEaXJEaWFs b2c6OnNtX2NsYXNzd3hEaXJEaWFsb2c7IH0NCnB1YmxpYzoNCiAgICB3eERpckRpYWxvZyh3eFdp bmRvdyAqcGFyZW50LCBjb25zdCB3eFN0cmluZyYgbWVzc2FnZSA9IHd4RmlsZVNlbGVjdG9yUHJv bXB0U3RyLA0KICAgICAgICBjb25zdCB3eFN0cmluZyYgZGVmYXVsdFBhdGggPSB3eEVtcHR5U3Ry aW5nLA0KICAgICAgICBsb25nIHN0eWxlID0gMCwgY29uc3Qgd3hQb2ludCYgcG9zID0gd3hEZWZh dWx0UG9zaXRpb24pOw0KDQogICAgaW5saW5lIHZvaWQgU2V0TWVzc2FnZShjb25zdCB3eFN0cmlu ZyYgbWVzc2FnZSkgeyBtX21lc3NhZ2UgPSBtZXNzYWdlOyB9DQogICAgaW5saW5lIHZvaWQgU2V0 UGF0aChjb25zdCB3eFN0cmluZyYgcGF0aCkgeyBtX3BhdGggPSBwYXRoOyB9DQogICAgaW5saW5l IHZvaWQgU2V0U3R5bGUobG9uZyBzdHlsZSkgeyBtX2RpYWxvZ1N0eWxlID0gc3R5bGU7IH0NCg0K ICAgIGlubGluZSB3eFN0cmluZyBHZXRNZXNzYWdlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1fbWVz c2FnZTsgfQ0KICAgIGlubGluZSB3eFN0cmluZyBHZXRQYXRoKHZvaWQpIGNvbnN0IHsgcmV0dXJu IG1fcGF0aDsgfQ0KICAgIGlubGluZSBsb25nIEdldFN0eWxlKHZvaWQpIGNvbnN0IHsgcmV0dXJu IG1fZGlhbG9nU3R5bGU7IH0NCg0KICAgIGludCBTaG93TW9kYWwodm9pZCk7DQoNCnByb3RlY3Rl ZDoNCiAgICB3eFN0cmluZyBtX21lc3NhZ2U7DQogICAgbG9uZyBtX2RpYWxvZ1N0eWxlOw0KICAg IHd4V2luZG93ICogbV9wYXJlbnQ7DQogICAgd3hTdHJpbmcgbV9wYXRoOw0KfTsNCiMgMTcgIi4u Ly4uL2luY2x1ZGUvd3gvZGlyZGxnLmgiIDINCiMgNzUgIi4uLy4uL2luY2x1ZGUvd3gvd3guaCIg Mg0KIyAxICIuLi8uLi9pbmNsdWRlL3d4L3Rvb2xiYXIuaCIgMQ0KIyAxNSAiLi4vLi4vaW5jbHVk ZS93eC90b29sYmFyLmgiDQojIDEgIi4uLy4uL2luY2x1ZGUvd3gvdGJhcmJhc2UuaCIgMQ0KIyAy MCAiLi4vLi4vaW5jbHVkZS93eC90YmFyYmFzZS5oIg0KI3ByYWdtYSBpbnRlcmZhY2UgInRiYXJi YXNlLmgiDQojIDI5ICIuLi8uLi9pbmNsdWRlL3d4L3RiYXJiYXNlLmgiDQpjbGFzcyBfX2F0dHJp YnV0ZV9fKChkbGxpbXBvcnQpKSB3eFRvb2xCYXJCYXNlOw0KY2xhc3MgX19hdHRyaWJ1dGVfXygo ZGxsaW1wb3J0KSkgd3hUb29sQmFyVG9vbEJhc2U7DQoNCg0KDQoNCg0KX19hdHRyaWJ1dGVfXygo ZGxsaW1wb3J0KSkgZXh0ZXJuIGNvbnN0IGNoYXIqIHd4VG9vbEJhck5hbWVTdHI7DQpfX2F0dHJp YnV0ZV9fKChkbGxpbXBvcnQpKSBleHRlcm4gY29uc3Qgd3hTaXplIHd4RGVmYXVsdFNpemU7DQpf X2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBleHRlcm4gY29uc3Qgd3hQb2ludCB3eERlZmF1bHRQ b3NpdGlvbjsNCg0KZW51bSB3eFRvb2xCYXJUb29sU3R5bGUNCnsNCiAgICB3eFRPT0xfU1RZTEVf QlVUVE9OID0gMSwNCiAgICB3eFRPT0xfU1RZTEVfU0VQQVJBVE9SID0gMiwNCiAgICB3eFRPT0xf U1RZTEVfQ09OVFJPTA0KfTsNCiMgNTggIi4uLy4uL2luY2x1ZGUvd3gvdGJhcmJhc2UuaCINCmNs YXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4VG9vbEJhclRvb2xCYXNlIDogcHVibGlj IHd4T2JqZWN0DQp7DQpwdWJsaWM6DQoNCg0KDQogICAgd3hUb29sQmFyVG9vbEJhc2Uod3hUb29s QmFyQmFzZSAqdGJhciA9ICh3eFRvb2xCYXJCYXNlICopX19udWxsLA0KICAgICAgICAgICAgICAg ICAgICAgIGludCBpZCA9ICgtMSksDQogICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd3hCaXRt YXAmIGJpdG1hcDEgPSB3eE51bGxCaXRtYXAsDQogICAgICAgICAgICAgICAgICAgICAgY29uc3Qg d3hCaXRtYXAmIGJpdG1hcDIgPSB3eE51bGxCaXRtYXAsDQogICAgICAgICAgICAgICAgICAgICAg Ym9vbCB0b2dnbGUgPSAwLA0KICAgICAgICAgICAgICAgICAgICAgIHd4T2JqZWN0ICpjbGllbnRE YXRhID0gKHd4T2JqZWN0ICopIF9fbnVsbCwNCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3 eFN0cmluZyYgc2hvcnRIZWxwU3RyaW5nID0gd3hFbXB0eVN0cmluZywNCiAgICAgICAgICAgICAg ICAgICAgICBjb25zdCB3eFN0cmluZyYgbG9uZ0hlbHBTdHJpbmcgPSB3eEVtcHR5U3RyaW5nKQ0K ICAgICAgICA6IG1fc2hvcnRIZWxwU3RyaW5nKHNob3J0SGVscFN0cmluZyksDQogICAgICAgICAg bV9sb25nSGVscFN0cmluZyhsb25nSGVscFN0cmluZykNCiAgICB7DQogICAgICAgIG1fdGJhciA9 IHRiYXI7DQogICAgICAgIG1faWQgPSBpZDsNCiAgICAgICAgbV9jbGllbnREYXRhID0gY2xpZW50 RGF0YTsNCg0KICAgICAgICBtX2JpdG1hcDEgPSBiaXRtYXAxOw0KICAgICAgICBtX2JpdG1hcDIg PSBiaXRtYXAyOw0KDQogICAgICAgIG1faXNUb2dnbGUgPSB0b2dnbGU7DQogICAgICAgIG1fZW5h YmxlZCA9IDE7DQogICAgICAgIG1fdG9nZ2xlZCA9IDA7DQoNCiAgICAgICAgbV90b29sU3R5bGUg PSBpZCA9PSAoLTEpID8gd3hUT09MX1NUWUxFX1NFUEFSQVRPUg0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDogd3hUT09MX1NUWUxFX0JVVFRPTjsNCiAgICB9DQoN CiAgICB3eFRvb2xCYXJUb29sQmFzZSh3eFRvb2xCYXJCYXNlICp0YmFyLCB3eENvbnRyb2wgKmNv bnRyb2wpDQogICAgew0KICAgICAgICBtX3RiYXIgPSB0YmFyOw0KICAgICAgICBtX2NvbnRyb2wg PSBjb250cm9sOw0KICAgICAgICBtX2lkID0gY29udHJvbC0+R2V0SWQoKTsNCg0KICAgICAgICBt X2lzVG9nZ2xlID0gMDsNCiAgICAgICAgbV9lbmFibGVkID0gMTsNCiAgICAgICAgbV90b2dnbGVk ID0gMDsNCg0KICAgICAgICBtX3Rvb2xTdHlsZSA9IHd4VE9PTF9TVFlMRV9DT05UUk9MOw0KICAg IH0NCg0KICAgIH53eFRvb2xCYXJUb29sQmFzZSgpOw0KDQoNCg0KDQoNCiAgICBpbnQgR2V0SWQo KSBjb25zdCB7IHJldHVybiBtX2lkOyB9DQoNCiAgICB3eENvbnRyb2wgKkdldENvbnRyb2woKSBj b25zdA0KICAgIHsNCiAgICAgICAgaWYgKCAhKElzQ29udHJvbCgpKSApIHd4T25Bc3NlcnQoIi4u Ly4uL2luY2x1ZGUvd3gvdGJhcmJhc2UuaCIsIDExMywgInRoaXMgdG9vbGJhciB0b29sIGlzIG5v dCBhIGNvbnRyb2wiKTsNCg0KICAgICAgICByZXR1cm4gbV9jb250cm9sOw0KICAgIH0NCg0KICAg IHd4VG9vbEJhckJhc2UgKkdldFRvb2xCYXIoKSBjb25zdCB7IHJldHVybiBtX3RiYXI7IH0NCg0K DQogICAgaW50IElzQnV0dG9uKCkgY29uc3QgeyByZXR1cm4gbV90b29sU3R5bGUgPT0gd3hUT09M X1NUWUxFX0JVVFRPTjsgfQ0KICAgIGludCBJc0NvbnRyb2woKSBjb25zdCB7IHJldHVybiBtX3Rv b2xTdHlsZSA9PSB3eFRPT0xfU1RZTEVfQ09OVFJPTDsgfQ0KICAgIGludCBJc1NlcGFyYXRvcigp IGNvbnN0IHsgcmV0dXJuIG1fdG9vbFN0eWxlID09IHd4VE9PTF9TVFlMRV9TRVBBUkFUT1I7IH0N CiAgICBpbnQgR2V0U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3Rvb2xTdHlsZTsgfQ0KDQoNCiAg ICBib29sIElzRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5hYmxlZDsgfQ0KICAgIGJvb2wg SXNUb2dnbGVkKCkgY29uc3QgeyByZXR1cm4gbV90b2dnbGVkOyB9DQogICAgYm9vbCBDYW5CZVRv Z2dsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzVG9nZ2xlOyB9DQoNCg0KICAgIGNvbnN0IHd4Qml0 bWFwJiBHZXRCaXRtYXAxKCkgY29uc3QgeyByZXR1cm4gbV9iaXRtYXAxOyB9DQogICAgY29uc3Qg d3hCaXRtYXAmIEdldEJpdG1hcDIoKSBjb25zdCB7IHJldHVybiBtX2JpdG1hcDI7IH0NCg0KICAg IGNvbnN0IHd4Qml0bWFwJiBHZXRCaXRtYXAoKSBjb25zdA0KICAgICAgICB7IHJldHVybiBJc1Rv Z2dsZWQoKSA/IG1fYml0bWFwMiA6IG1fYml0bWFwMTsgfQ0KDQogICAgd3hTdHJpbmcgR2V0U2hv cnRIZWxwKCkgY29uc3QgeyByZXR1cm4gbV9zaG9ydEhlbHBTdHJpbmc7IH0NCiAgICB3eFN0cmlu ZyBHZXRMb25nSGVscCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9uZ0hlbHBTdHJpbmc7IH0NCg0KICAg IHd4T2JqZWN0ICpHZXRDbGllbnREYXRhKCkgY29uc3QNCiAgICB7DQogICAgICAgIGlmICggbV90 b29sU3R5bGUgPT0gd3hUT09MX1NUWUxFX0NPTlRST0wgKQ0KICAgICAgICB7DQogICAgICAgICAg ICByZXR1cm4gKHd4T2JqZWN0KiltX2NvbnRyb2wtPkdldENsaWVudERhdGEoKTsNCiAgICAgICAg fQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAgIHJldHVybiBtX2NsaWVudERh dGE7DQogICAgICAgIH0NCiAgICB9DQoNCg0KICAgIGJvb2wgRW5hYmxlKGJvb2wgZW5hYmxlKTsN CiAgICBib29sIFRvZ2dsZShib29sIHRvZ2dsZSk7DQogICAgYm9vbCBTZXRUb2dnbGUoYm9vbCB0 b2dnbGUpOw0KICAgIGJvb2wgU2V0U2hvcnRIZWxwKGNvbnN0IHd4U3RyaW5nJiBoZWxwKTsNCiAg ICBib29sIFNldExvbmdIZWxwKGNvbnN0IHd4U3RyaW5nJiBoZWxwKTsNCg0KICAgIHZvaWQgVG9n Z2xlKCkgeyBUb2dnbGUoIUlzVG9nZ2xlZCgpKTsgfQ0KDQogICAgdm9pZCBTZXRCaXRtYXAxKGNv bnN0IHd4Qml0bWFwJiBibXApIHsgbV9iaXRtYXAxID0gYm1wOyB9DQogICAgdm9pZCBTZXRCaXRt YXAyKGNvbnN0IHd4Qml0bWFwJiBibXApIHsgbV9iaXRtYXAyID0gYm1wOyB9DQoNCiAgICB2b2lk IFNldENsaWVudERhdGEod3hPYmplY3QgKmNsaWVudERhdGEpDQogICAgew0KICAgICAgICBpZiAo IG1fdG9vbFN0eWxlID09IHd4VE9PTF9TVFlMRV9DT05UUk9MICkNCiAgICAgICAgew0KICAgICAg ICAgICAgbV9jb250cm9sLT5TZXRDbGllbnREYXRhKGNsaWVudERhdGEpOw0KICAgICAgICB9DQog ICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICAgbV9jbGllbnREYXRhID0gY2xpZW50 RGF0YTsNCiAgICAgICAgfQ0KICAgIH0NCg0KDQogICAgdmlydHVhbCB2b2lkIERldGFjaCgpIHsg bV90YmFyID0gKHd4VG9vbEJhckJhc2UgKilfX251bGw7IH0NCiAgICB2aXJ0dWFsIHZvaWQgQXR0 YWNoKHd4VG9vbEJhckJhc2UgKnRiYXIpIHsgbV90YmFyID0gdGJhcjsgfQ0KDQpwcm90ZWN0ZWQ6 DQogICAgd3hUb29sQmFyQmFzZSAqbV90YmFyOw0KDQogICAgaW50IG1fdG9vbFN0eWxlOw0KICAg IGludCBtX2lkOw0KDQoNCiAgICB1bmlvbg0KICAgIHsNCiAgICAgICAgd3hPYmplY3QgKm1fY2xp ZW50RGF0YTsNCiAgICAgICAgd3hDb250cm9sICptX2NvbnRyb2w7DQogICAgfTsNCg0KDQogICAg Ym9vbCBtX3RvZ2dsZWQ7DQogICAgYm9vbCBtX2lzVG9nZ2xlOw0KICAgIGJvb2wgbV9lbmFibGVk Ow0KDQoNCiAgICB3eEJpdG1hcCBtX2JpdG1hcDE7DQogICAgd3hCaXRtYXAgbV9iaXRtYXAyOw0K DQoNCiAgICB3eFN0cmluZyBtX3Nob3J0SGVscFN0cmluZzsNCiAgICB3eFN0cmluZyBtX2xvbmdI ZWxwU3RyaW5nOw0KfTsNCg0KDQp0eXBlZGVmIHd4VG9vbEJhclRvb2xCYXNlIF9XWF9MSVNUX0lU RU1fVFlQRV93eFRvb2xCYXJUb29sc0xpc3Q7IHR5cGVkZWYgaW50ICgqd3hTb3J0RnVuY0Zvcl93 eFRvb2xCYXJUb29sc0xpc3QpKGNvbnN0IHd4VG9vbEJhclRvb2xCYXNlICoqLCBjb25zdCB3eFRv b2xCYXJUb29sQmFzZSAqKik7IGNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHd4d3hU b29sQmFyVG9vbHNMaXN0Tm9kZSA6IHB1YmxpYyB3eE5vZGVCYXNlIHsgcHVibGljOiB3eHd4VG9v bEJhclRvb2xzTGlzdE5vZGUod3hMaXN0QmFzZSAqbGlzdCA9ICh3eExpc3RCYXNlICopX19udWxs LCB3eHd4VG9vbEJhclRvb2xzTGlzdE5vZGUgKnByZXZpb3VzID0gKHd4d3hUb29sQmFyVG9vbHNM aXN0Tm9kZSAqKV9fbnVsbCwgd3h3eFRvb2xCYXJUb29sc0xpc3ROb2RlICpuZXh0ID0gKHd4d3hU b29sQmFyVG9vbHNMaXN0Tm9kZSAqKV9fbnVsbCwgd3hUb29sQmFyVG9vbEJhc2UgKmRhdGEgPSAo d3hUb29sQmFyVG9vbEJhc2UgKilfX251bGwsIGNvbnN0IHd4TGlzdEtleSYga2V5ID0gd3hEZWZh dWx0TGlzdEtleSkgOiB3eE5vZGVCYXNlKGxpc3QsIHByZXZpb3VzLCBuZXh0LCBkYXRhLCBrZXkp IHsgfSB3eHd4VG9vbEJhclRvb2xzTGlzdE5vZGUgKkdldE5leHQoKSBjb25zdCB7IHJldHVybiAo d3h3eFRvb2xCYXJUb29sc0xpc3ROb2RlICopd3hOb2RlQmFzZTo6R2V0TmV4dCgpOyB9IHd4d3hU b29sQmFyVG9vbHNMaXN0Tm9kZSAqR2V0UHJldmlvdXMoKSBjb25zdCB7IHJldHVybiAod3h3eFRv b2xCYXJUb29sc0xpc3ROb2RlICopd3hOb2RlQmFzZTo6R2V0UHJldmlvdXMoKTsgfSB3eFRvb2xC YXJUb29sQmFzZSAqR2V0RGF0YSgpIGNvbnN0IHsgcmV0dXJuICh3eFRvb2xCYXJUb29sQmFzZSAq KXd4Tm9kZUJhc2U6OkdldERhdGEoKTsgfSB2b2lkIFNldERhdGEod3hUb29sQmFyVG9vbEJhc2Ug KmRhdGEpIHsgd3hOb2RlQmFzZTo6U2V0RGF0YShkYXRhKTsgfSB2aXJ0dWFsIHZvaWQgRGVsZXRl RGF0YSgpOyB9OyBjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSB3eFRvb2xCYXJUb29s c0xpc3QgOiBwdWJsaWMgd3hMaXN0QmFzZSB7IHB1YmxpYzogdHlwZWRlZiB3eHd4VG9vbEJhclRv b2xzTGlzdE5vZGUgTm9kZTsgd3hUb29sQmFyVG9vbHNMaXN0KHd4S2V5VHlwZSBrZXlUeXBlID0g d3hLRVlfTk9ORSkgOiB3eExpc3RCYXNlKGtleVR5cGUpIHsgfSB3eFRvb2xCYXJUb29sc0xpc3Qo c2l6ZV90IGNvdW50LCB3eFRvb2xCYXJUb29sQmFzZSAqZWxlbWVudHNbXSkgOiB3eExpc3RCYXNl KGNvdW50LCAodm9pZCAqKillbGVtZW50cykgeyB9IHd4VG9vbEJhclRvb2xzTGlzdCYgb3BlcmF0 b3I9KGNvbnN0IHd4VG9vbEJhclRvb2xzTGlzdCYgbGlzdCkgeyByZXR1cm4gKHd4VG9vbEJhclRv b2xzTGlzdCYpd3hMaXN0QmFzZTo6b3BlcmF0b3I9KGxpc3QpOyB9IHd4d3hUb29sQmFyVG9vbHNM aXN0Tm9kZSAqR2V0Rmlyc3QoKSBjb25zdCB7IHJldHVybiAod3h3eFRvb2xCYXJUb29sc0xpc3RO b2RlICopd3hMaXN0QmFzZTo6R2V0Rmlyc3QoKTsgfSB3eHd4VG9vbEJhclRvb2xzTGlzdE5vZGUg KkdldExhc3QoKSBjb25zdCB7IHJldHVybiAod3h3eFRvb2xCYXJUb29sc0xpc3ROb2RlICopd3hM aXN0QmFzZTo6R2V0TGFzdCgpOyB9IHd4d3hUb29sQmFyVG9vbHNMaXN0Tm9kZSAqSXRlbShzaXpl X3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuICh3eHd4VG9vbEJhclRvb2xzTGlzdE5vZGUgKil3eExp c3RCYXNlOjpJdGVtKGluZGV4KTsgfSB3eFRvb2xCYXJUb29sQmFzZSAqb3BlcmF0b3JbXShzaXpl X3QgaW5kZXgpIGNvbnN0IHsgd3h3eFRvb2xCYXJUb29sc0xpc3ROb2RlICpub2RlID0gSXRlbShp bmRleCk7IHJldHVybiBub2RlID8gKHd4VG9vbEJhclRvb2xCYXNlKikobm9kZS0+R2V0RGF0YSgp KSA6ICh3eFRvb2xCYXJUb29sQmFzZSopX19udWxsOyB9IHd4d3hUb29sQmFyVG9vbHNMaXN0Tm9k ZSAqQXBwZW5kKHd4VG9vbEJhclRvb2xCYXNlICpvYmplY3QpIHsgcmV0dXJuICh3eHd4VG9vbEJh clRvb2xzTGlzdE5vZGUgKil3eExpc3RCYXNlOjpBcHBlbmQob2JqZWN0KTsgfSB3eHd4VG9vbEJh clRvb2xzTGlzdE5vZGUgKkluc2VydCh3eFRvb2xCYXJUb29sQmFzZSAqb2JqZWN0KSB7IHJldHVy biAod3h3eFRvb2xCYXJUb29sc0xpc3ROb2RlICopSW5zZXJ0KCh3eHd4VG9vbEJhclRvb2xzTGlz dE5vZGUqKV9fbnVsbCwgb2JqZWN0KTsgfSB3eHd4VG9vbEJhclRvb2xzTGlzdE5vZGUgKkluc2Vy dChzaXplX3QgcG9zLCB3eFRvb2xCYXJUb29sQmFzZSAqb2JqZWN0KSB7IHJldHVybiAod3h3eFRv b2xCYXJUb29sc0xpc3ROb2RlICopd3hMaXN0QmFzZTo6SW5zZXJ0KHBvcywgb2JqZWN0KTsgfSB3 eHd4VG9vbEJhclRvb2xzTGlzdE5vZGUgKkluc2VydCh3eHd4VG9vbEJhclRvb2xzTGlzdE5vZGUg KnByZXYsIHd4VG9vbEJhclRvb2xCYXNlICpvYmplY3QpIHsgcmV0dXJuICh3eHd4VG9vbEJhclRv b2xzTGlzdE5vZGUgKil3eExpc3RCYXNlOjpJbnNlcnQocHJldiwgb2JqZWN0KTsgfSB3eHd4VG9v bEJhclRvb2xzTGlzdE5vZGUgKkFwcGVuZChsb25nIGtleSwgdm9pZCAqb2JqZWN0KSB7IHJldHVy biAod3h3eFRvb2xCYXJUb29sc0xpc3ROb2RlICopd3hMaXN0QmFzZTo6QXBwZW5kKGtleSwgb2Jq ZWN0KTsgfSB3eHd4VG9vbEJhclRvb2xzTGlzdE5vZGUgKkFwcGVuZChjb25zdCBjaGFyICprZXks IHZvaWQgKm9iamVjdCkgeyByZXR1cm4gKHd4d3hUb29sQmFyVG9vbHNMaXN0Tm9kZSAqKXd4TGlz dEJhc2U6OkFwcGVuZChrZXksIG9iamVjdCk7IH0gd3h3eFRvb2xCYXJUb29sc0xpc3ROb2RlICpE ZXRhY2hOb2RlKHd4d3hUb29sQmFyVG9vbHNMaXN0Tm9kZSAqbm9kZSkgeyByZXR1cm4gKHd4d3hU b29sQmFyVG9vbHNMaXN0Tm9kZSAqKXd4TGlzdEJhc2U6OkRldGFjaE5vZGUobm9kZSk7IH0gYm9v bCBEZWxldGVOb2RlKHd4d3hUb29sQmFyVG9vbHNMaXN0Tm9kZSAqbm9kZSkgeyByZXR1cm4gd3hM aXN0QmFzZTo6RGVsZXRlTm9kZShub2RlKTsgfSBib29sIERlbGV0ZU9iamVjdCh3eFRvb2xCYXJU b29sQmFzZSAqb2JqZWN0KSB7IHJldHVybiB3eExpc3RCYXNlOjpEZWxldGVPYmplY3Qob2JqZWN0 KTsgfSB3eHd4VG9vbEJhclRvb2xzTGlzdE5vZGUgKkZpbmQod3hUb29sQmFyVG9vbEJhc2UgKm9i amVjdCkgY29uc3QgeyByZXR1cm4gKHd4d3hUb29sQmFyVG9vbHNMaXN0Tm9kZSAqKXd4TGlzdEJh c2U6OkZpbmQob2JqZWN0KTsgfSB2aXJ0dWFsIHd4d3hUb29sQmFyVG9vbHNMaXN0Tm9kZSAqRmlu ZChjb25zdCB3eExpc3RLZXkmIGtleSkgY29uc3QgeyByZXR1cm4gKHd4d3hUb29sQmFyVG9vbHNM aXN0Tm9kZSAqKXd4TGlzdEJhc2U6OkZpbmQoa2V5KTsgfSBpbnQgSW5kZXhPZih3eFRvb2xCYXJU b29sQmFzZSAqb2JqZWN0KSBjb25zdCB7IHJldHVybiB3eExpc3RCYXNlOjpJbmRleE9mKG9iamVj dCk7IH0gdm9pZCBTb3J0KHd4U29ydEZ1bmNGb3Jfd3hUb29sQmFyVG9vbHNMaXN0IGZ1bmMpIHsg d3hMaXN0QmFzZTo6U29ydCgod3hTb3J0Q29tcGFyZUZ1bmN0aW9uKWZ1bmMpOyB9IHByb3RlY3Rl ZDogd3hOb2RlQmFzZSAqQ3JlYXRlTm9kZSh3eE5vZGVCYXNlICpwcmV2LCB3eE5vZGVCYXNlICpu ZXh0LCB2b2lkICpkYXRhLCBjb25zdCB3eExpc3RLZXkmIGtleSA9IHd4RGVmYXVsdExpc3RLZXkp IHsgcmV0dXJuIG5ldyB3eHd4VG9vbEJhclRvb2xzTGlzdE5vZGUodGhpcywgKHd4d3hUb29sQmFy VG9vbHNMaXN0Tm9kZSAqKXByZXYsICh3eHd4VG9vbEJhclRvb2xzTGlzdE5vZGUgKiluZXh0LCAo d3hUb29sQmFyVG9vbEJhc2UgKilkYXRhLCBrZXkpOyB9IH07DQoNCg0KDQoNCg0KY2xhc3MgX19h dHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hUb29sQmFyQmFzZSA6IHB1YmxpYyB3eENvbnRyb2wN CnsNCnB1YmxpYzoNCiAgICB3eFRvb2xCYXJCYXNlKCk7DQogICAgdmlydHVhbCB+d3hUb29sQmFy QmFzZSgpOw0KDQoNCg0KDQoNCiAgICB3eFRvb2xCYXJUb29sQmFzZSAqQWRkVG9vbChpbnQgaWQs DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd3hCaXRtYXAmIGJpdG1hcCwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3eFN0cmluZyYgc2hvcnRIZWxw U3RyaW5nID0gd3hFbXB0eVN0cmluZywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCB3eFN0cmluZyYgbG9uZ0hlbHBTdHJpbmcgPSB3eEVtcHR5U3RyaW5nKQ0KICAgIHsNCiAg ICAgICAgcmV0dXJuIEFkZFRvb2woaWQsIGJpdG1hcCwgd3hOdWxsQml0bWFwLCAwLCBfX251bGws DQogICAgICAgICAgICAgICAgICAgICAgIHNob3J0SGVscFN0cmluZywgbG9uZ0hlbHBTdHJpbmcp Ow0KICAgIH0NCg0KDQoNCg0KICAgIHd4VG9vbEJhclRvb2xCYXNlICpBZGRUb29sKGludCBpZCwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3eEJpdG1hcCYgYml0bWFwLA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHd4Qml0bWFwJiBwdXNoZWRCaXRt YXAgPSB3eE51bGxCaXRtYXAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB0 b2dnbGUgPSAwLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHd4T2JqZWN0ICpjbGll bnREYXRhID0gX19udWxsLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHd4 U3RyaW5nJiBzaG9ydEhlbHBTdHJpbmcgPSB3eEVtcHR5U3RyaW5nLA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHd4U3RyaW5nJiBsb25nSGVscFN0cmluZyA9IHd4RW1wdHlT dHJpbmcpDQogICAgew0KICAgICAgICByZXR1cm4gQWRkVG9vbChpZCwgYml0bWFwLCBwdXNoZWRC aXRtYXAsIHRvZ2dsZSwNCiAgICAgICAgICAgICAgICAgICAgICAgLTEsIC0xLCBjbGllbnREYXRh LCBzaG9ydEhlbHBTdHJpbmcsIGxvbmdIZWxwU3RyaW5nKTsNCiAgICB9DQoNCg0KICAgIHZpcnR1 YWwgd3hUb29sQmFyVG9vbEJhc2UgKkFkZFRvb2wNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpZCwNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd3hCaXRtYXAmIGJpdG1hcCwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd3hCaXRtYXAmIHB1c2hlZEJp dG1hcCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB0b2dnbGUsDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHd4Q29vcmQgeFBvcywNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgd3hDb29yZCB5UG9zID0gLTEsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHd4T2JqZWN0ICpjbGllbnREYXRhID0gX19udWxsLA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3eFN0cmluZyYgaGVscFN0 cmluZzEgPSB3eEVtcHR5U3RyaW5nLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCB3eFN0cmluZyYgaGVscFN0cmluZzIgPSB3eEVtcHR5U3RyaW5nDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsNCg0KDQoNCiAgICB2aXJ0dWFsIHd4VG9vbEJhclRvb2xC YXNlICpJbnNlcnRUb29sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHBvcywNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBpZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IHd4Qml0bWFwJiBiaXRtYXAsDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCB3eEJpdG1hcCYgcHVzaGVkQml0bWFwID0gd3hOdWxsQml0bWFw LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB0b2dnbGUgPSAwLA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3hPYmplY3QgKmNsaWVudERhdGEg PSBfX251bGwsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3eFN0 cmluZyYgaGVscDEgPSB3eEVtcHR5U3RyaW5nLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3Qgd3hTdHJpbmcmIGhlbHAyID0gd3hFbXB0eVN0cmluZw0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7DQoNCg0KDQoNCg0KDQogICAgdmlydHVhbCB3eFRvb2xC YXJUb29sQmFzZSAqQWRkQ29udHJvbCh3eENvbnRyb2wgKmNvbnRyb2wpOw0KICAgIHZpcnR1YWwg d3hUb29sQmFyVG9vbEJhc2UgKkluc2VydENvbnRyb2woc2l6ZV90IHBvcywgd3hDb250cm9sICpj b250cm9sKTsNCg0KDQogICAgdmlydHVhbCB3eFRvb2xCYXJUb29sQmFzZSAqQWRkU2VwYXJhdG9y KCk7DQogICAgdmlydHVhbCB3eFRvb2xCYXJUb29sQmFzZSAqSW5zZXJ0U2VwYXJhdG9yKHNpemVf dCBwb3MpOw0KDQoNCg0KICAgIHZpcnR1YWwgd3hUb29sQmFyVG9vbEJhc2UgKlJlbW92ZVRvb2wo aW50IGlkKTsNCg0KDQogICAgdmlydHVhbCBib29sIERlbGV0ZVRvb2xCeVBvcyhzaXplX3QgcG9z KTsNCiAgICB2aXJ0dWFsIGJvb2wgRGVsZXRlVG9vbChpbnQgaWQpOw0KDQoNCiAgICB2aXJ0dWFs IHZvaWQgQ2xlYXJUb29scygpOw0KDQoNCg0KICAgIHZpcnR1YWwgYm9vbCBSZWFsaXplKCk7DQoN Cg0KDQoNCiAgICB2aXJ0dWFsIHZvaWQgRW5hYmxlVG9vbChpbnQgaWQsIGJvb2wgZW5hYmxlKTsN CiAgICB2aXJ0dWFsIHZvaWQgVG9nZ2xlVG9vbChpbnQgaWQsIGJvb2wgdG9nZ2xlKTsNCg0KDQog ICAgdmlydHVhbCB2b2lkIFNldFRvZ2dsZShpbnQgaWQsIGJvb2wgdG9nZ2xlKTsNCg0KDQogICAg dmlydHVhbCB3eE9iamVjdCAqR2V0VG9vbENsaWVudERhdGEoaW50IGlkKSBjb25zdDsNCiAgICB2 aXJ0dWFsIHZvaWQgU2V0VG9vbENsaWVudERhdGEoaW50IGlkLCB3eE9iamVjdCAqY2xpZW50RGF0 YSk7DQoNCg0KICAgIHZpcnR1YWwgYm9vbCBHZXRUb29sU3RhdGUoaW50IGlkKSBjb25zdDsNCg0K ICAgIHZpcnR1YWwgYm9vbCBHZXRUb29sRW5hYmxlZChpbnQgaWQpIGNvbnN0Ow0KDQogICAgdmly dHVhbCB2b2lkIFNldFRvb2xTaG9ydEhlbHAoaW50IGlkLCBjb25zdCB3eFN0cmluZyYgaGVscFN0 cmluZyk7DQogICAgdmlydHVhbCB3eFN0cmluZyBHZXRUb29sU2hvcnRIZWxwKGludCBpZCkgY29u c3Q7DQogICAgdmlydHVhbCB2b2lkIFNldFRvb2xMb25nSGVscChpbnQgaWQsIGNvbnN0IHd4U3Ry aW5nJiBoZWxwU3RyaW5nKTsNCiAgICB2aXJ0dWFsIHd4U3RyaW5nIEdldFRvb2xMb25nSGVscChp bnQgaWQpIGNvbnN0Ow0KDQoNCg0KDQogICAgdmlydHVhbCB2b2lkIFNldE1hcmdpbnMoaW50IHgs IGludCB5KTsNCiAgICB2b2lkIFNldE1hcmdpbnMoY29uc3Qgd3hTaXplJiBzaXplKQ0KICAgICAg ICB7IFNldE1hcmdpbnMoKGludCkgc2l6ZS54LCAoaW50KSBzaXplLnkpOyB9DQogICAgdmlydHVh bCB2b2lkIFNldFRvb2xQYWNraW5nKGludCBwYWNraW5nKQ0KICAgICAgICB7IG1fdG9vbFBhY2tp bmcgPSBwYWNraW5nOyB9DQogICAgdmlydHVhbCB2b2lkIFNldFRvb2xTZXBhcmF0aW9uKGludCBz ZXBhcmF0aW9uKQ0KICAgICAgICB7IG1fdG9vbFNlcGFyYXRpb24gPSBzZXBhcmF0aW9uOyB9DQoN CiAgICB2aXJ0dWFsIHd4U2l6ZSBHZXRUb29sTWFyZ2lucygpIHsgcmV0dXJuIEdldE1hcmdpbnMo KTsgfQ0KICAgIHZpcnR1YWwgaW50IEdldFRvb2xQYWNraW5nKCkgeyByZXR1cm4gbV90b29sUGFj a2luZzsgfQ0KICAgIHZpcnR1YWwgaW50IEdldFRvb2xTZXBhcmF0aW9uKCkgeyByZXR1cm4gbV90 b29sU2VwYXJhdGlvbjsgfQ0KDQoNCiAgICB3eFNpemUgR2V0TWFyZ2lucygpIGNvbnN0IHsgcmV0 dXJuIHd4U2l6ZShtX3hNYXJnaW4sIG1feU1hcmdpbik7IH0NCg0KDQoNCg0KDQogICAgdmlydHVh bCB2b2lkIFNldFJvd3MoaW50IG5Sb3dzKTsNCg0KDQogICAgdm9pZCBTZXRNYXhSb3dzQ29scyhp bnQgcm93cywgaW50IGNvbHMpDQogICAgICAgIHsgbV9tYXhSb3dzID0gcm93czsgbV9tYXhDb2xz ID0gY29sczsgfQ0KICAgIGludCBHZXRNYXhSb3dzKCkgY29uc3QgeyByZXR1cm4gbV9tYXhSb3dz OyB9DQogICAgaW50IEdldE1heENvbHMoKSBjb25zdCB7IHJldHVybiBtX21heENvbHM7IH0NCg0K DQoNCiAgICB2aXJ0dWFsIHZvaWQgU2V0VG9vbEJpdG1hcFNpemUoY29uc3Qgd3hTaXplJiBzaXpl KQ0KICAgICAgICB7IG1fZGVmYXVsdFdpZHRoID0gc2l6ZS54OyBtX2RlZmF1bHRIZWlnaHQgPSBz aXplLnk7IH07DQogICAgdmlydHVhbCB3eFNpemUgR2V0VG9vbEJpdG1hcFNpemUoKSBjb25zdA0K ICAgICAgICB7IHJldHVybiB3eFNpemUobV9kZWZhdWx0V2lkdGgsIG1fZGVmYXVsdEhlaWdodCk7 IH0NCg0KDQoNCiAgICB2aXJ0dWFsIHd4U2l6ZSBHZXRUb29sU2l6ZSgpIGNvbnN0DQogICAgICAg IHsgcmV0dXJuIEdldFRvb2xCaXRtYXBTaXplKCk7IH0gOw0KDQoNCg0KICAgIHZpcnR1YWwgd3hU b29sQmFyVG9vbEJhc2UgKkZpbmRUb29sRm9yUG9zaXRpb24od3hDb29yZCB4LA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3hDb29yZCB5KSBjb25z dCA9IDA7DQoNCg0KDQoNCg0KDQoNCiAgICB2aXJ0dWFsIGJvb2wgT25MZWZ0Q2xpY2soaW50IGlk LCBib29sIHRvZ2dsZURvd24pOw0KDQoNCiAgICB2aXJ0dWFsIHZvaWQgT25SaWdodENsaWNrKGlu dCBpZCwgbG9uZyB4LCBsb25nIHkpOw0KDQoNCg0KICAgIHZpcnR1YWwgdm9pZCBPbk1vdXNlRW50 ZXIoaW50IGlkKTsNCiMgNDA2ICIuLi8uLi9pbmNsdWRlL3d4L3RiYXJiYXNlLmgiDQogICAgc2l6 ZV90IEdldFRvb2xzQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3Rvb2xzLkdldENvdW50KCk7IH0N Cg0KICAgIHZvaWQgT25JZGxlKHd4SWRsZUV2ZW50JiBldmVudCk7DQoNCg0KICAgIHZpcnR1YWwg dm9pZCBEb1Rvb2xiYXJVcGRhdGVzKCk7DQoNCg0KICAgIHZpcnR1YWwgYm9vbCBBY2NlcHRzRm9j dXMoKSBjb25zdCB7IHJldHVybiAwOyB9DQoNCnByb3RlY3RlZDoNCg0KDQoNCg0KDQogICAgdmly dHVhbCBib29sIERvSW5zZXJ0VG9vbChzaXplX3QgcG9zLCB3eFRvb2xCYXJUb29sQmFzZSAqdG9v bCkgPSAwOw0KDQoNCg0KICAgIHZpcnR1YWwgYm9vbCBEb0RlbGV0ZVRvb2woc2l6ZV90IHBvcywg d3hUb29sQmFyVG9vbEJhc2UgKnRvb2wpID0gMDsNCg0KDQogICAgdmlydHVhbCB2b2lkIERvRW5h YmxlVG9vbCh3eFRvb2xCYXJUb29sQmFzZSAqdG9vbCwgYm9vbCBlbmFibGUpID0gMDsNCg0KDQog ICAgdmlydHVhbCB2b2lkIERvVG9nZ2xlVG9vbCh3eFRvb2xCYXJUb29sQmFzZSAqdG9vbCwgYm9v bCB0b2dnbGUpID0gMDsNCg0KDQogICAgdmlydHVhbCB2b2lkIERvU2V0VG9nZ2xlKHd4VG9vbEJh clRvb2xCYXNlICp0b29sLCBib29sIHRvZ2dsZSkgPSAwOw0KDQoNCiAgICB2aXJ0dWFsIHd4VG9v bEJhclRvb2xCYXNlICpDcmVhdGVUb29sKGludCBpZCwNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IHd4Qml0bWFwJiBiaXRtYXAxLA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd3hCaXRtYXAmIGJpdG1hcDIsDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHRvZ2dsZSwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHd4T2JqZWN0ICpjbGllbnRE YXRhLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd3hT dHJpbmcmIHNob3J0SGVscFN0cmluZywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IHd4U3RyaW5nJiBsb25nSGVscFN0cmluZykgPSAwOw0KICAgIHZpcnR1 YWwgd3hUb29sQmFyVG9vbEJhc2UgKkNyZWF0ZVRvb2wod3hDb250cm9sICpjb250cm9sKSA9IDA7 DQoNCg0KDQoNCg0KICAgIHd4VG9vbEJhclRvb2xCYXNlICpGaW5kQnlJZChpbnQgaWQpIGNvbnN0 Ow0KDQoNCiAgICB3eFRvb2xCYXJUb29sc0xpc3QgbV90b29sczsNCg0KDQogICAgaW50IG1feE1h cmdpbjsNCiAgICBpbnQgbV95TWFyZ2luOw0KDQoNCiAgICBpbnQgbV9tYXhSb3dzOw0KICAgIGlu dCBtX21heENvbHM7DQoNCg0KICAgIGludCBtX3Rvb2xQYWNraW5nLA0KICAgICAgICBtX3Rvb2xT ZXBhcmF0aW9uOw0KDQoNCiAgICB3eENvb3JkIG1fZGVmYXVsdFdpZHRoLCBtX2RlZmF1bHRIZWln aHQ7DQoNCnByaXZhdGU6DQogICAgcHJpdmF0ZTogc3RhdGljIGNvbnN0IHd4RXZlbnRUYWJsZUVu dHJ5IHNtX2V2ZW50VGFibGVFbnRyaWVzW107cHJvdGVjdGVkOiBzdGF0aWMgY29uc3Qgd3hFdmVu dFRhYmxlIHNtX2V2ZW50VGFibGU7IHZpcnR1YWwgY29uc3Qgd3hFdmVudFRhYmxlKiBHZXRFdmVu dFRhYmxlKCkgY29uc3Q7DQp9Ow0KIyAxNiAiLi4vLi4vaW5jbHVkZS93eC90b29sYmFyLmgiIDIN CiMgMjUgIi4uLy4uL2luY2x1ZGUvd3gvdG9vbGJhci5oIg0KIyAxICIuLi8uLi9pbmNsdWRlL3d4 L21zdy90YmFyOTUuaCIgMQ0KIyAxNiAiLi4vLi4vaW5jbHVkZS93eC9tc3cvdGJhcjk1LmgiDQoj cHJhZ21hIGludGVyZmFjZSAidGJhcjk1LmgiDQoNCg0KDQoNCg0KDQpjbGFzcyBfX2F0dHJpYnV0 ZV9fKChkbGxpbXBvcnQpKSB3eFRvb2xCYXIgOiBwdWJsaWMgd3hUb29sQmFyQmFzZQ0Kew0KcHVi bGljOg0KDQogICAgd3hUb29sQmFyKCkgeyBJbml0KCk7IH0NCg0KICAgIHd4VG9vbEJhcih3eFdp bmRvdyAqcGFyZW50LA0KICAgICAgICAgICAgICAgIHd4V2luZG93SUQgaWQsDQogICAgICAgICAg ICAgICAgY29uc3Qgd3hQb2ludCYgcG9zID0gd3hEZWZhdWx0UG9zaXRpb24sDQogICAgICAgICAg ICAgICAgY29uc3Qgd3hTaXplJiBzaXplID0gd3hEZWZhdWx0U2l6ZSwNCiAgICAgICAgICAgICAg ICBsb25nIHN0eWxlID0gMHgwMDIwMDAwMCB8IHd4SE9SSVpPTlRBTCwNCiAgICAgICAgICAgICAg ICBjb25zdCB3eFN0cmluZyYgbmFtZSA9IHd4VG9vbEJhck5hbWVTdHIpDQogICAgew0KICAgICAg ICBJbml0KCk7DQoNCiAgICAgICAgQ3JlYXRlKHBhcmVudCwgaWQsIHBvcywgc2l6ZSwgc3R5bGUs IG5hbWUpOw0KICAgIH0NCg0KICAgIGJvb2wgQ3JlYXRlKHd4V2luZG93ICpwYXJlbnQsDQogICAg ICAgICAgICAgICAgd3hXaW5kb3dJRCBpZCwNCiAgICAgICAgICAgICAgICBjb25zdCB3eFBvaW50 JiBwb3MgPSB3eERlZmF1bHRQb3NpdGlvbiwNCiAgICAgICAgICAgICAgICBjb25zdCB3eFNpemUm IHNpemUgPSB3eERlZmF1bHRTaXplLA0KICAgICAgICAgICAgICAgIGxvbmcgc3R5bGUgPSAweDAw MjAwMDAwIHwgd3hIT1JJWk9OVEFMLA0KICAgICAgICAgICAgICAgIGNvbnN0IHd4U3RyaW5nJiBu YW1lID0gd3hUb29sQmFyTmFtZVN0cik7DQoNCiAgICB2aXJ0dWFsIH53eFRvb2xCYXIoKTsNCg0K DQogICAgdmlydHVhbCB3eFRvb2xCYXJUb29sQmFzZSAqRmluZFRvb2xGb3JQb3NpdGlvbih3eENv b3JkIHgsIHd4Q29vcmQgeSkgY29uc3Q7DQoNCiAgICB2aXJ0dWFsIGJvb2wgUmVhbGl6ZSgpOw0K DQogICAgdmlydHVhbCB2b2lkIFNldFRvb2xCaXRtYXBTaXplKGNvbnN0IHd4U2l6ZSYgc2l6ZSk7 DQogICAgdmlydHVhbCB3eFNpemUgR2V0VG9vbFNpemUoKSBjb25zdDsNCg0KICAgIHZpcnR1YWwg dm9pZCBTZXRSb3dzKGludCBuUm93cyk7DQoNCg0KDQoNCiAgICB2aXJ0dWFsIGJvb2wgTVNXQ29t bWFuZChXWFVJTlQgcGFyYW0sIFdYV09SRCBpZCk7DQogICAgdmlydHVhbCBib29sIE1TV09uTm90 aWZ5KGludCBpZEN0cmwsIFdYTFBBUkFNIGxQYXJhbSwgV1hMUEFSQU0gKnJlc3VsdCk7DQoNCiAg ICB2b2lkIE9uTW91c2VFdmVudCh3eE1vdXNlRXZlbnQmIGV2ZW50KTsNCiAgICB2b2lkIE9uU3lz Q29sb3VyQ2hhbmdlZCh3eFN5c0NvbG91ckNoYW5nZWRFdmVudCYgZXZlbnQpOw0KDQpwcm90ZWN0 ZWQ6DQoNCiAgICB2b2lkIEluaXQoKTsNCg0KDQogICAgdmlydHVhbCBib29sIERvSW5zZXJ0VG9v bChzaXplX3QgcG9zLCB3eFRvb2xCYXJUb29sQmFzZSAqdG9vbCk7DQogICAgdmlydHVhbCBib29s IERvRGVsZXRlVG9vbChzaXplX3QgcG9zLCB3eFRvb2xCYXJUb29sQmFzZSAqdG9vbCk7DQoNCiAg ICB2aXJ0dWFsIHZvaWQgRG9FbmFibGVUb29sKHd4VG9vbEJhclRvb2xCYXNlICp0b29sLCBib29s IGVuYWJsZSk7DQogICAgdmlydHVhbCB2b2lkIERvVG9nZ2xlVG9vbCh3eFRvb2xCYXJUb29sQmFz ZSAqdG9vbCwgYm9vbCB0b2dnbGUpOw0KICAgIHZpcnR1YWwgdm9pZCBEb1NldFRvZ2dsZSh3eFRv b2xCYXJUb29sQmFzZSAqdG9vbCwgYm9vbCB0b2dnbGUpOw0KDQogICAgdmlydHVhbCB3eFRvb2xC YXJUb29sQmFzZSAqQ3JlYXRlVG9vbChpbnQgaWQsDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCB3eEJpdG1hcCYgYml0bWFwMSwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHd4Qml0bWFwJiBiaXRtYXAyLA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB0b2dnbGUsDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3eE9iamVjdCAqY2xpZW50RGF0 YSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHd4U3Ry aW5nJiBzaG9ydEhlbHBTdHJpbmcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCB3eFN0cmluZyYgbG9uZ0hlbHBTdHJpbmcpOw0KICAgIHZpcnR1YWwgd3hU b29sQmFyVG9vbEJhc2UgKkNyZWF0ZVRvb2wod3hDb250cm9sICpjb250cm9sKTsNCg0KDQogICAg dm9pZCBVcGRhdGVTaXplKCk7DQoNCg0KICAgIHZpcnR1YWwgbG9uZyBNU1dXaW5kb3dQcm9jKFdY VUlOVCBuTXNnLCBXWFdQQVJBTSB3UGFyYW0sIFdYTFBBUkFNIGxQYXJhbSk7DQoNCg0KICAgIFdY SEJJVE1BUCBtX2hCaXRtYXA7DQoNCg0KICAgIHNpemVfdCBtX25CdXR0b25zOw0KDQpwcml2YXRl Og0KICAgIHByaXZhdGU6IHN0YXRpYyBjb25zdCB3eEV2ZW50VGFibGVFbnRyeSBzbV9ldmVudFRh YmxlRW50cmllc1tdO3Byb3RlY3RlZDogc3RhdGljIGNvbnN0IHd4RXZlbnRUYWJsZSBzbV9ldmVu dFRhYmxlOyB2aXJ0dWFsIGNvbnN0IHd4RXZlbnRUYWJsZSogR2V0RXZlbnRUYWJsZSgpIGNvbnN0 Ow0KICAgIHB1YmxpYzogc3RhdGljIHd4Q2xhc3NJbmZvIHNtX2NsYXNzd3hUb29sQmFyOyB3eENs YXNzSW5mbyAqR2V0Q2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnd4VG9vbEJhcjo6c21fY2xh c3N3eFRvb2xCYXI7IH0NCn07DQojIDI2ICIuLi8uLi9pbmNsdWRlL3d4L3Rvb2xiYXIuaCIgMg0K IyA3NiAiLi4vLi4vaW5jbHVkZS93eC93eC5oIiAyDQoNCg0KDQoNCiMgMSAiLi4vLi4vaW5jbHVk ZS93eC92YWx0ZXh0LmgiIDENCiMgMTYgIi4uLy4uL2luY2x1ZGUvd3gvdmFsdGV4dC5oIg0KI3By YWdtYSBpbnRlcmZhY2UgInZhbHRleHQuaCINCiMgMzMgIi4uLy4uL2luY2x1ZGUvd3gvdmFsdGV4 dC5oIg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgd3hUZXh0VmFsaWRhdG9yOiBw dWJsaWMgd3hWYWxpZGF0b3INCnsNCnB1YmxpYzogc3RhdGljIHd4Q2xhc3NJbmZvIHNtX2NsYXNz d3hUZXh0VmFsaWRhdG9yOyB3eENsYXNzSW5mbyAqR2V0Q2xhc3NJbmZvKCkgY29uc3QgeyByZXR1 cm4gJnd4VGV4dFZhbGlkYXRvcjo6c21fY2xhc3N3eFRleHRWYWxpZGF0b3I7IH0NCnB1YmxpYzoN CiAgd3hUZXh0VmFsaWRhdG9yKGxvbmcgc3R5bGUgPSAweDAwMDAsIHd4U3RyaW5nICp2YWwgPSAo d3hTdHJpbmcgKikgX19udWxsKTsNCiAgd3hUZXh0VmFsaWRhdG9yKGNvbnN0IHd4VGV4dFZhbGlk YXRvciYgdmFsKTsNCg0KICB+d3hUZXh0VmFsaWRhdG9yKCk7DQoNCg0KDQoNCg0KICB2aXJ0dWFs IHd4T2JqZWN0ICpDbG9uZSh2b2lkKSBjb25zdCB7IHJldHVybiBuZXcgd3hUZXh0VmFsaWRhdG9y KCp0aGlzKTsgfQ0KICBib29sIENvcHkoY29uc3Qgd3hUZXh0VmFsaWRhdG9yJiB2YWwpOw0KDQoN Cg0KICB2aXJ0dWFsIGJvb2wgVmFsaWRhdGUod3hXaW5kb3cgKnBhcmVudCk7DQoNCg0KICB2aXJ0 dWFsIGJvb2wgVHJhbnNmZXJUb1dpbmRvdyh2b2lkKTsNCg0KDQogIHZpcnR1YWwgYm9vbCBUcmFu c2ZlckZyb21XaW5kb3codm9pZCk7DQoNCg0KICBpbmxpbmUgbG9uZyBHZXRTdHlsZSh2b2lkKSBj b25zdCB7IHJldHVybiBtX3ZhbGlkYXRvclN0eWxlOyB9DQogIGlubGluZSB2b2lkIFNldFN0eWxl KGxvbmcgc3R5bGUpIHsgbV92YWxpZGF0b3JTdHlsZSA9IHN0eWxlOyB9DQoNCiAgdm9pZCBTZXRJ bmNsdWRlTGlzdChjb25zdCB3eFN0cmluZ0xpc3QmIGxpc3QpOw0KICBpbmxpbmUgd3hTdHJpbmdM aXN0JiBHZXRJbmNsdWRlTGlzdCh2b2lkKSB7IHJldHVybiBtX2luY2x1ZGVMaXN0OyB9DQoNCiAg dm9pZCBTZXRFeGNsdWRlTGlzdChjb25zdCB3eFN0cmluZ0xpc3QmIGxpc3QpOw0KICBpbmxpbmUg d3hTdHJpbmdMaXN0JiBHZXRFeGNsdWRlTGlzdCh2b2lkKSB7IHJldHVybiBtX2V4Y2x1ZGVMaXN0 OyB9DQoNCg0KICB2b2lkIE9uQ2hhcih3eEtleUV2ZW50JiBldmVudCk7DQoNCnByaXZhdGU6IHN0 YXRpYyBjb25zdCB3eEV2ZW50VGFibGVFbnRyeSBzbV9ldmVudFRhYmxlRW50cmllc1tdO3Byb3Rl Y3RlZDogc3RhdGljIGNvbnN0IHd4RXZlbnRUYWJsZSBzbV9ldmVudFRhYmxlOyB2aXJ0dWFsIGNv bnN0IHd4RXZlbnRUYWJsZSogR2V0RXZlbnRUYWJsZSgpIGNvbnN0Ow0KDQpwcm90ZWN0ZWQ6DQog ICAgbG9uZyBtX3ZhbGlkYXRvclN0eWxlOw0KICAgIHd4U3RyaW5nICogbV9zdHJpbmdWYWx1ZTsN CiAgICB3eFN0cmluZ0xpc3QgbV9pbmNsdWRlTGlzdDsNCiAgICB3eFN0cmluZ0xpc3QgbV9leGNs dWRlTGlzdDsNCn07DQojIDgxICIuLi8uLi9pbmNsdWRlL3d4L3d4LmgiIDINCiMgMTcgIm1pbmlt YWwyLmNwcCIgMg0K
next reply other threads:[~2002-05-16 3:16 UTC|newest] Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top 2002-05-15 20:16 ofv [this message] 2003-04-06 23:16 Giovanni Bajo 2003-04-06 23:36 Oscar Fuentes 2003-04-07 13:54 bangerth 2003-04-07 13:56 bangerth
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20020516031429.15515.qmail@sources.redhat.com \ --to=ofv@wanadoo.es \ --cc=gcc-gnats@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).