From mboxrd@z Thu Jan 1 00:00:00 1970 From: tot@trema.com To: gcc-gnats@gcc.gnu.org Subject: c++/2914: gcc 3.0 crashes on xalan DoubleSupport.cpp Date: Wed, 23 May 2001 08:26:00 -0000 Message-id: <20010523151844.6532.qmail@sourceware.cygnus.com> X-SW-Source: 2001-05/msg00678.html List-Id: >Number: 2914 >Category: c++ >Synopsis: gcc 3.0 crashes on xalan DoubleSupport.cpp >Confidential: no >Severity: serious >Priority: high >Responsible: unassigned >State: open >Class: ice-on-legal-code >Submitter-Id: net >Arrival-Date: Wed May 23 08:26:00 PDT 2001 >Closed-Date: >Last-Modified: >Originator: Teemu Torma >Release: gcc-3.0-20010523 >Organization: >Environment: RedHat Linux i686 >Description: gcc crashes whilst compiling xalan source. This is regression from 2.95.2. >How-To-Repeat: Reading specs from /usr/local/gcc3/lib/gcc-lib/i686-pc-linux-gnu/3.0/specs Configured with: ../gcc-3.0-branch/configure --with-gcc-version-trigger=/work/tot/gcc/3.0/gcc-3.0-branch/gcc/version.c --host=i686-pc-linux-gnu --prefix=/usr/local/gcc3 --enable-version-specific-runtime-libs --enable-long-long Thread model: single gcc version 3.0 20010523 (prerelease) /usr/local/gcc3/lib/gcc-lib/i686-pc-linux-gnu/3.0/cc1plus -fpreprocessed bug-1.i -quiet -dumpbase bug-1.i -version -o /tmp/ccagZkzI.s GNU CPP version 3.0 20010523 (prerelease) (cpplib) (i386 Linux/ELF) GNU C++ version 3.0 20010523 (prerelease) (i686-pc-linux-gnu) compiled by GNU C version 3.0 20010523 (prerelease). PlatformSupport/DoubleSupport.cpp:686: Internal error: Segmentation fault Please submit a full bug report, with preprocessed source if appropriate. See for instructions. >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="bug-1.i" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="bug-1.i" IyA1NyAiUGxhdGZvcm1TdXBwb3J0L0RvdWJsZVN1cHBvcnQuY3BwIgojIDEgIlBsYXRmb3JtU3Vw cG9ydC9Eb3VibGVTdXBwb3J0LmhwcCIgMQojIDYzICJQbGF0Zm9ybVN1cHBvcnQvRG91YmxlU3Vw cG9ydC5ocHAiCiMgMSAiUGxhdGZvcm1TdXBwb3J0L1BsYXRmb3JtU3VwcG9ydERlZmluaXRpb25z LmhwcCIgMQojIDYyICJQbGF0Zm9ybVN1cHBvcnQvUGxhdGZvcm1TdXBwb3J0RGVmaW5pdGlvbnMu aHBwIgojIDEgIkluY2x1ZGUvUGxhdGZvcm1EZWZpbml0aW9ucy5ocHAiIDEKIyA2MyAiSW5jbHVk ZS9QbGF0Zm9ybURlZmluaXRpb25zLmhwcCIKIyAxICJJbmNsdWRlL0dDQ0RlZmluaXRpb25zLmhw cCIgMQojIDY0ICJJbmNsdWRlL1BsYXRmb3JtRGVmaW5pdGlvbnMuaHBwIiAyCiMgNjMgIlBsYXRm b3JtU3VwcG9ydC9QbGF0Zm9ybVN1cHBvcnREZWZpbml0aW9ucy5ocHAiIDIKIyA2NCAiUGxhdGZv cm1TdXBwb3J0L0RvdWJsZVN1cHBvcnQuaHBwIiAyCgoKCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xp Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9mdW5jdGlvbmFsIiAx IDMKCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu MC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9mdW5jdGlvbmFsLmgiIDEgMwojIDE5ICIvdXNyL2xvY2Fs L2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMv c3RkX2Z1bmN0aW9uYWwuaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2 LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytj b25maWcuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp bnV4LWdudS8zLjAvaW5jbHVkZS9nKysvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcu aCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z LjAvaW5jbHVkZS9nKysvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9vc19kZWZpbmVzLmgiIDEgMwoj IDM3ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu Y2x1ZGUvZysrL2k2ODYtcGMtbGludXgtZ251L2JpdHMvb3NfZGVmaW5lcy5oIiAzCiMgMSAiL3Vz ci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI1MCAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgi IDMKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2NkZWZzLmgiIDEgMwojIDI1MSAiL3Vzci9pbmNsdWRl L2ZlYXR1cmVzLmgiIDIgMwojIDI3OCAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKIyAxICIv dXNyL2luY2x1ZGUvZ251L3N0dWJzLmgiIDEgMwojIDI3OSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVz LmgiIDIgMwojIDM4ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n bnUvMy4wL2luY2x1ZGUvZysrL2k2ODYtcGMtbGludXgtZ251L2JpdHMvb3NfZGVmaW5lcy5oIiAy IDMKIyAzNSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu MC9pbmNsdWRlL2crKy9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAyIDMKIyAy MCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNs dWRlL2crKy9iaXRzL3N0ZF9mdW5jdGlvbmFsLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9s aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0 ZGRlZi5oIiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu dXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jc3RkZGVmLmgiIDMKIyAxICIvdXNyL2xv Y2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVm LmgiIDEgMwojIDE0NyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt Z251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgaW50IHB0cmRpZmZfdDsKIyAxOTkg Ii91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVk ZS9zdGRkZWYuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGludCBzaXplX3Q7CiMgNDEgIi91c3IvbG9j YWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0 cy9zdGRfY3N0ZGRlZi5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6cHRyZGlmZl90 OwogIHVzaW5nIDo6c2l6ZV90Owp9CiMgMjEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfZnVuY3Rpb25hbC5oIiAy IDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w L2luY2x1ZGUvZysrL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2dj YzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3Rs X2Z1bmN0aW9uLmgiIDMKbmFtZXNwYWNlIHN0ZAp7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xh c3MgX1Jlc3VsdD4Kc3RydWN0IHVuYXJ5X2Z1bmN0aW9uIHsKICB0eXBlZGVmIF9BcmcgYXJndW1l bnRfdHlwZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xh c3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgYmluYXJ5X2Z1bmN0 aW9uIHsKICB0eXBlZGVmIF9BcmcxIGZpcnN0X2FyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfQXJn MiBzZWNvbmRfYXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7Cn07 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgcGx1cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rp b248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3Qg X1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCArIF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNz IF9UcD4Kc3RydWN0IG1pbnVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4g ewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3Qg eyByZXR1cm4gX194IC0gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbXVs dGlwbGllcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3Bl cmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9f eCAqIF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGRpdmlkZXMgOiBwdWJs aWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3Qg X1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggLyBfX3k7IH0KfTsK CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4gaW5saW5lIF9UcCBpZGVudGl0eV9lbGVtZW50KHBsdXM8 X1RwPikgewogIHJldHVybiBfVHAoMCk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9UcD4gaW5saW5lIF9U cCBpZGVudGl0eV9lbGVtZW50KG11bHRpcGxpZXM8X1RwPikgewogIHJldHVybiBfVHAoMSk7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtb2R1bHVzIDogcHVibGljIGJpbmFyeV9mdW5j dGlvbjxfVHAsX1RwLF9UcD4KewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25z dCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICUgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xh c3MgX1RwPgpzdHJ1Y3QgbmVnYXRlIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfVHA+CnsK ICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gLV9feDsgfQp9 OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGVxdWFsX3RvIDogcHVibGljIGJpbmFyeV9m dW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gs IGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPT0gX195OyB9Cn07Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3Qgbm90X2VxdWFsX3RvIDogcHVibGljIGJpbmFyeV9mdW5jdGlv bjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0 IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggIT0gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xh c3MgX1RwPgpzdHJ1Y3QgZ3JlYXRlciA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxi b29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkg Y29uc3QgeyByZXR1cm4gX194ID4gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1 Y3QgbGVzcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBv cGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4g X194IDwgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZ3JlYXRlcl9lcXVh bCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRv cigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ID49 IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxlc3NfZXF1YWwgOiBwdWJs aWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25z dCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA8PSBfX3k7IH0K fTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX2FuZCA6IHB1YmxpYyBiaW5h cnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYg X194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICYmIF9feTsgfQp9OwoKdGVt cGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfb3IgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0 aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCB8fCBfX3k7IH0KfTsKCnRlbXBsYXRlIDxj bGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX25vdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAs Ym9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QgeyByZXR1cm4g IV9feDsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNsYXNzIHVuYXJ5X25lZ2F0 ZQogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3VtZW50 X3R5cGUsIGJvb2w+IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVibGljOgog IGV4cGxpY2l0IHVuYXJ5X25lZ2F0ZShjb25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChf X3gpIHt9CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3Vt ZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuICFfTV9wcmVkKF9feCk7CiAgfQp9OwoK dGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSB1bmFyeV9uZWdhdGU8X1ByZWRpY2F0 ZT4Kbm90MShjb25zdCBfUHJlZGljYXRlJiBfX3ByZWQpCnsKICByZXR1cm4gdW5hcnlfbmVnYXRl PF9QcmVkaWNhdGU+KF9fcHJlZCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgpjbGFz cyBiaW5hcnlfbmVnYXRlCiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9QcmVk aWNhdGU6OmZpcnN0X2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5 cGVuYW1lIF9QcmVkaWNhdGU6OnNlY29uZF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAg ICAgICAgICAgICBib29sPiB7CnByb3RlY3RlZDoKICBfUHJlZGljYXRlIF9NX3ByZWQ7CnB1Ymxp YzoKICBleHBsaWNpdCBiaW5hcnlfbmVnYXRlKGNvbnN0IF9QcmVkaWNhdGUmIF9feCkgOiBfTV9w cmVkKF9feCkge30KICBib29sIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6 Zmlyc3RfYXJndW1lbnRfdHlwZSYgX194LAogICAgICAgICAgICAgICAgICBjb25zdCB0eXBlbmFt ZSBfUHJlZGljYXRlOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX195KSBjb25zdAogIHsKICAgIHJl dHVybiAhX01fcHJlZChfX3gsIF9feSk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNh dGU+CmlubGluZSBiaW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+Cm5vdDIoY29uc3QgX1ByZWRpY2F0 ZSYgX19wcmVkKQp7CiAgcmV0dXJuIGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVkKTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24+CmNsYXNzIGJpbmRlcjFzdAogIDogcHVibGlj IHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBl LAogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90 eXBlPiB7CnByb3RlY3RlZDoKICBfT3BlcmF0aW9uIG9wOwogIHR5cGVuYW1lIF9PcGVyYXRpb246 OmZpcnN0X2FyZ3VtZW50X3R5cGUgdmFsdWU7CnB1YmxpYzoKICBiaW5kZXIxc3QoY29uc3QgX09w ZXJhdGlvbiYgX194LAogICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJz dF9hcmd1bWVudF90eXBlJiBfX3kpCiAgICAgIDogb3AoX194KSwgdmFsdWUoX195KSB7fQogIHR5 cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFt ZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1 cm4gb3AodmFsdWUsIF9feCk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24sIGNs YXNzIF9UcD4KaW5saW5lIGJpbmRlcjFzdDxfT3BlcmF0aW9uPgpiaW5kMXN0KGNvbnN0IF9PcGVy YXRpb24mIF9fZm4sIGNvbnN0IF9UcCYgX194KQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfT3BlcmF0 aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlIF9BcmcxX3R5cGU7CiAgcmV0dXJuIGJpbmRlcjFzdDxf T3BlcmF0aW9uPihfX2ZuLCBfQXJnMV90eXBlKF9feCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09w ZXJhdGlvbj4KY2xhc3MgYmluZGVyMm5kCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5h bWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6CiAgX09w ZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSB2 YWx1ZTsKcHVibGljOgogIGJpbmRlcjJuZChjb25zdCBfT3BlcmF0aW9uJiBfX3gsCiAgICAgICAg ICAgIGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3kp CiAgICAgIDogb3AoX194KSwgdmFsdWUoX195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJl c3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9h cmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcChfX3gsIHZhbHVlKTsKICB9 Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbiwgY2xhc3MgX1RwPgppbmxpbmUgYmluZGVy Mm5kPF9PcGVyYXRpb24+CmJpbmQybmQoY29uc3QgX09wZXJhdGlvbiYgX19mbiwgY29uc3QgX1Rw JiBfX3gpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90 eXBlIF9BcmcyX3R5cGU7CiAgcmV0dXJuIGJpbmRlcjJuZDxfT3BlcmF0aW9uPihfX2ZuLCBfQXJn Ml90eXBlKF9feCkpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uMSwgY2xhc3MgX09w ZXJhdGlvbjI+CmNsYXNzIHVuYXJ5X2NvbXBvc2UKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0 eXBlbmFtZSBfT3BlcmF0aW9uMjo6YXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uMTo6cmVzdWx0X3R5cGU+CnsKcHJvdGVjdGVkOgogIF9P cGVyYXRpb24xIF9NX2ZuMTsKICBfT3BlcmF0aW9uMiBfTV9mbjI7CnB1YmxpYzoKICB1bmFyeV9j b21wb3NlKGNvbnN0IF9PcGVyYXRpb24xJiBfX3gsIGNvbnN0IF9PcGVyYXRpb24yJiBfX3kpCiAg ICA6IF9NX2ZuMShfX3gpLCBfTV9mbjIoX195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRpb24xOjpy ZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjI6OmFyZ3Vt ZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX2ZuMShfTV9mbjIoX194KSk7CiAg fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24xLCBjbGFzcyBfT3BlcmF0aW9uMj4KaW5s aW5lIHVuYXJ5X2NvbXBvc2U8X09wZXJhdGlvbjEsX09wZXJhdGlvbjI+CmNvbXBvc2UxKGNvbnN0 IF9PcGVyYXRpb24xJiBfX2ZuMSwgY29uc3QgX09wZXJhdGlvbjImIF9fZm4yKQp7CiAgcmV0dXJu IHVuYXJ5X2NvbXBvc2U8X09wZXJhdGlvbjEsX09wZXJhdGlvbjI+KF9fZm4xLCBfX2ZuMik7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uMSwgY2xhc3MgX09wZXJhdGlvbjIsIGNsYXNzIF9P cGVyYXRpb24zPgpjbGFzcyBiaW5hcnlfY29tcG9zZQogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u PHR5cGVuYW1lIF9PcGVyYXRpb24yOjphcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAg ICAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb24xOjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6CiAg X09wZXJhdGlvbjEgX01fZm4xOwogIF9PcGVyYXRpb24yIF9NX2ZuMjsKICBfT3BlcmF0aW9uMyBf TV9mbjM7CnB1YmxpYzoKICBiaW5hcnlfY29tcG9zZShjb25zdCBfT3BlcmF0aW9uMSYgX194LCBj b25zdCBfT3BlcmF0aW9uMiYgX195LAogICAgICAgICAgICAgICAgIGNvbnN0IF9PcGVyYXRpb24z JiBfX3opCiAgICA6IF9NX2ZuMShfX3gpLCBfTV9mbjIoX195KSwgX01fZm4zKF9feikgeyB9CiAg dHlwZW5hbWUgX09wZXJhdGlvbjE6OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBl bmFtZSBfT3BlcmF0aW9uMjo6YXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4g X01fZm4xKF9NX2ZuMihfX3gpLCBfTV9mbjMoX194KSk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNz IF9PcGVyYXRpb24xLCBjbGFzcyBfT3BlcmF0aW9uMiwgY2xhc3MgX09wZXJhdGlvbjM+CmlubGlu ZSBiaW5hcnlfY29tcG9zZTxfT3BlcmF0aW9uMSwgX09wZXJhdGlvbjIsIF9PcGVyYXRpb24zPgpj b21wb3NlMihjb25zdCBfT3BlcmF0aW9uMSYgX19mbjEsIGNvbnN0IF9PcGVyYXRpb24yJiBfX2Zu MiwKICAgICAgICAgY29uc3QgX09wZXJhdGlvbjMmIF9fZm4zKQp7CiAgcmV0dXJuIGJpbmFyeV9j b21wb3NlPF9PcGVyYXRpb24xLF9PcGVyYXRpb24yLF9PcGVyYXRpb24zPgogICAgKF9fZm4xLCBf X2ZuMiwgX19mbjMpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4KY2xh c3MgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfQXJn LCBfUmVzdWx0PiB7CnByb3RlY3RlZDoKICBfUmVzdWx0ICgqX01fcHRyKShfQXJnKTsKcHVibGlj OgogIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24oKSB7fQogIGV4cGxpY2l0IHBvaW50ZXJfdG9f dW5hcnlfZnVuY3Rpb24oX1Jlc3VsdCAoKl9feCkoX0FyZykpIDogX01fcHRyKF9feCkge30KICBf UmVzdWx0IG9wZXJhdG9yKCkoX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX3B0cihfX3gpOyB9 Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4KaW5saW5lIHBvaW50ZXJf dG9fdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4gcHRyX2Z1bihfUmVzdWx0ICgqX194KShf QXJnKSkKewogIHJldHVybiBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+ KF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1 bHQ+CmNsYXNzIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uIDoKICBwdWJsaWMgYmluYXJ5X2Z1 bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+IHsKcHJvdGVjdGVkOgogICAgX1Jlc3VsdCAoKl9N X3B0cikoX0FyZzEsIF9BcmcyKTsKcHVibGljOgogICAgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rp b24oKSB7fQogICAgZXhwbGljaXQgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24oX1Jlc3VsdCAo Kl9feCkoX0FyZzEsIF9BcmcyKSkKICAgICAgOiBfTV9wdHIoX194KSB7fQogICAgX1Jlc3VsdCBv cGVyYXRvcigpKF9BcmcxIF9feCwgX0FyZzIgX195KSBjb25zdCB7CiAgICAgIHJldHVybiBfTV9w dHIoX194LCBfX3kpOwogICAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJn MiwgY2xhc3MgX1Jlc3VsdD4KaW5saW5lIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uPF9Bcmcx LF9BcmcyLF9SZXN1bHQ+CnB0cl9mdW4oX1Jlc3VsdCAoKl9feCkoX0FyZzEsIF9BcmcyKSkgewog IHJldHVybiBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0Pihf X3gpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9JZGVudGl0eSA6IHB1YmxpYyB1 bmFyeV9mdW5jdGlvbjxfVHAsX1RwPiB7CiAgX1RwJiBvcGVyYXRvcigpKF9UcCYgX194KSBjb25z dCB7IHJldHVybiBfX3g7IH0KICBjb25zdCBfVHAmIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gp IGNvbnN0IHsgcmV0dXJuIF9feDsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4gc3RydWN0IGlk ZW50aXR5IDogcHVibGljIF9JZGVudGl0eTxfVHA+IHt9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUGFp cj4Kc3RydWN0IF9TZWxlY3Qxc3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1BhaXIsIHR5cGVu YW1lIF9QYWlyOjpmaXJzdF90eXBlPiB7CiAgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGUmIG9w ZXJhdG9yKCkoX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5maXJzdDsKICB9CiAg Y29uc3QgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGUmIG9wZXJhdG9yKCkoY29uc3QgX1BhaXIm IF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5maXJzdDsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xh c3MgX1BhaXI+CnN0cnVjdCBfU2VsZWN0Mm5kIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9QYWly LCB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGU+CnsKICB0eXBlbmFtZSBfUGFpcjo6c2Vjb25k X3R5cGUmIG9wZXJhdG9yKCkoX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5zZWNv bmQ7CiAgfQogIGNvbnN0IHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZSYgb3BlcmF0b3IoKShj b25zdCBfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LnNlY29uZDsKICB9Cn07Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+IHN0cnVjdCBzZWxlY3Qxc3QgOiBwdWJsaWMgX1NlbGVjdDFz dDxfUGFpcj4ge307CnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4gc3RydWN0IHNlbGVjdDJuZCA6IHB1 YmxpYyBfU2VsZWN0Mm5kPF9QYWlyPiB7fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNz IF9BcmcyPgpzdHJ1Y3QgX1Byb2plY3Qxc3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9Bcmcx LCBfQXJnMiwgX0FyZzE+IHsKICBfQXJnMSBvcGVyYXRvcigpKGNvbnN0IF9BcmcxJiBfX3gsIGNv bnN0IF9BcmcyJikgY29uc3QgeyByZXR1cm4gX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Fy ZzEsIGNsYXNzIF9BcmcyPgpzdHJ1Y3QgX1Byb2plY3QybmQgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0 aW9uPF9BcmcxLCBfQXJnMiwgX0FyZzI+IHsKICBfQXJnMiBvcGVyYXRvcigpKGNvbnN0IF9Bcmcx JiwgY29uc3QgX0FyZzImIF9feSkgY29uc3QgeyByZXR1cm4gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyPgpzdHJ1Y3QgcHJvamVjdDFzdCA6IHB1YmxpYyBfUHJv amVjdDFzdDxfQXJnMSwgX0FyZzI+IHt9OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBf QXJnMj4Kc3RydWN0IHByb2plY3QybmQgOiBwdWJsaWMgX1Byb2plY3QybmQ8X0FyZzEsIF9Bcmcy PiB7fTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdD4Kc3RydWN0IF9Db25zdGFudF92b2lk X2Z1biB7CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOwogIHJlc3VsdF90eXBlIF9NX3Zh bDsKCiAgX0NvbnN0YW50X3ZvaWRfZnVuKGNvbnN0IHJlc3VsdF90eXBlJiBfX3YpIDogX01fdmFs KF9fdikge30KICBjb25zdCByZXN1bHRfdHlwZSYgb3BlcmF0b3IoKSgpIGNvbnN0IHsgcmV0dXJu IF9NX3ZhbDsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQsIGNsYXNzIF9Bcmd1bWVudD4K c3RydWN0IF9Db25zdGFudF91bmFyeV9mdW4gewogIHR5cGVkZWYgX0FyZ3VtZW50IGFyZ3VtZW50 X3R5cGU7CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOwogIHJlc3VsdF90eXBlIF9NX3Zh bDsKCiAgX0NvbnN0YW50X3VuYXJ5X2Z1bihjb25zdCByZXN1bHRfdHlwZSYgX192KSA6IF9NX3Zh bChfX3YpIHt9CiAgY29uc3QgcmVzdWx0X3R5cGUmIG9wZXJhdG9yKCkoY29uc3QgX0FyZ3VtZW50 JikgY29uc3QgeyByZXR1cm4gX01fdmFsOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdCwg Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyPgpzdHJ1Y3QgX0NvbnN0YW50X2JpbmFyeV9mdW4gewog IHR5cGVkZWYgX0FyZzEgZmlyc3RfYXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9BcmcyIHNlY29u ZF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKICBfUmVzdWx0 IF9NX3ZhbDsKCiAgX0NvbnN0YW50X2JpbmFyeV9mdW4oY29uc3QgX1Jlc3VsdCYgX192KSA6IF9N X3ZhbChfX3YpIHt9CiAgY29uc3QgcmVzdWx0X3R5cGUmIG9wZXJhdG9yKCkoY29uc3QgX0FyZzEm LCBjb25zdCBfQXJnMiYpIGNvbnN0IHsKICAgIHJldHVybiBfTV92YWw7CiAgfQp9OwoKdGVtcGxh dGUgPGNsYXNzIF9SZXN1bHQ+CnN0cnVjdCBjb25zdGFudF92b2lkX2Z1biA6IHB1YmxpYyBfQ29u c3RhbnRfdm9pZF9mdW48X1Jlc3VsdD4gewogIGNvbnN0YW50X3ZvaWRfZnVuKGNvbnN0IF9SZXN1 bHQmIF9fdikgOiBfQ29uc3RhbnRfdm9pZF9mdW48X1Jlc3VsdD4oX192KSB7fQp9OwoKCnRlbXBs YXRlIDxjbGFzcyBfUmVzdWx0LAogICAgICAgICAgY2xhc3MgX0FyZ3VtZW50ID0gX1Jlc3VsdD4K c3RydWN0IGNvbnN0YW50X3VuYXJ5X2Z1biA6IHB1YmxpYyBfQ29uc3RhbnRfdW5hcnlfZnVuPF9S ZXN1bHQsIF9Bcmd1bWVudD4KewogIGNvbnN0YW50X3VuYXJ5X2Z1bihjb25zdCBfUmVzdWx0JiBf X3YpCiAgICA6IF9Db25zdGFudF91bmFyeV9mdW48X1Jlc3VsdCwgX0FyZ3VtZW50PihfX3YpIHt9 Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQsCiAgICAgICAgICBjbGFzcyBfQXJnMSA9IF9S ZXN1bHQsCiAgICAgICAgICBjbGFzcyBfQXJnMiA9IF9BcmcxPgpzdHJ1Y3QgY29uc3RhbnRfYmlu YXJ5X2Z1bgogIDogcHVibGljIF9Db25zdGFudF9iaW5hcnlfZnVuPF9SZXN1bHQsIF9BcmcxLCBf QXJnMj4KewogIGNvbnN0YW50X2JpbmFyeV9mdW4oY29uc3QgX1Jlc3VsdCYgX192KQogICAgOiBf Q29uc3RhbnRfYmluYXJ5X2Z1bjxfUmVzdWx0LCBfQXJnMSwgX0FyZzI+KF9fdikge30KfTsKCnRl bXBsYXRlIDxjbGFzcyBfUmVzdWx0PgppbmxpbmUgY29uc3RhbnRfdm9pZF9mdW48X1Jlc3VsdD4g Y29uc3RhbnQwKGNvbnN0IF9SZXN1bHQmIF9fdmFsKQp7CiAgcmV0dXJuIGNvbnN0YW50X3ZvaWRf ZnVuPF9SZXN1bHQ+KF9fdmFsKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQ+CmlubGluZSBj b25zdGFudF91bmFyeV9mdW48X1Jlc3VsdCxfUmVzdWx0PiBjb25zdGFudDEoY29uc3QgX1Jlc3Vs dCYgX192YWwpCnsKICByZXR1cm4gY29uc3RhbnRfdW5hcnlfZnVuPF9SZXN1bHQsX1Jlc3VsdD4o X192YWwpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdD4KaW5saW5lIGNvbnN0YW50X2JpbmFy eV9mdW48X1Jlc3VsdCxfUmVzdWx0LF9SZXN1bHQ+CmNvbnN0YW50Mihjb25zdCBfUmVzdWx0JiBf X3ZhbCkKewogIHJldHVybiBjb25zdGFudF9iaW5hcnlfZnVuPF9SZXN1bHQsX1Jlc3VsdCxfUmVz dWx0PihfX3ZhbCk7Cn0KCgoKY2xhc3Mgc3VidHJhY3RpdmVfcm5nIDogcHVibGljIHVuYXJ5X2Z1 bmN0aW9uPHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50PiB7CnByaXZhdGU6CiAgdW5zaWduZWQg aW50IF9NX3RhYmxlWzU1XTsKICBzaXplX3QgX01faW5kZXgxOwogIHNpemVfdCBfTV9pbmRleDI7 CnB1YmxpYzoKICB1bnNpZ25lZCBpbnQgb3BlcmF0b3IoKSh1bnNpZ25lZCBpbnQgX19saW1pdCkg ewogICAgX01faW5kZXgxID0gKF9NX2luZGV4MSArIDEpICUgNTU7CiAgICBfTV9pbmRleDIgPSAo X01faW5kZXgyICsgMSkgJSA1NTsKICAgIF9NX3RhYmxlW19NX2luZGV4MV0gPSBfTV90YWJsZVtf TV9pbmRleDFdIC0gX01fdGFibGVbX01faW5kZXgyXTsKICAgIHJldHVybiBfTV90YWJsZVtfTV9p bmRleDFdICUgX19saW1pdDsKICB9CgogIHZvaWQgX01faW5pdGlhbGl6ZSh1bnNpZ25lZCBpbnQg X19zZWVkKQogIHsKICAgIHVuc2lnbmVkIGludCBfX2sgPSAxOwogICAgX01fdGFibGVbNTRdID0g X19zZWVkOwogICAgc2l6ZV90IF9faTsKICAgIGZvciAoX19pID0gMDsgX19pIDwgNTQ7IF9faSsr KSB7CiAgICAgICAgc2l6ZV90IF9faWkgPSAoMjEgKiAoX19pICsgMSkgJSA1NSkgLSAxOwogICAg ICAgIF9NX3RhYmxlW19faWldID0gX19rOwogICAgICAgIF9fayA9IF9fc2VlZCAtIF9fazsKICAg ICAgICBfX3NlZWQgPSBfTV90YWJsZVtfX2lpXTsKICAgIH0KICAgIGZvciAoaW50IF9fbG9vcCA9 IDA7IF9fbG9vcCA8IDQ7IF9fbG9vcCsrKSB7CiAgICAgICAgZm9yIChfX2kgPSAwOyBfX2kgPCA1 NTsgX19pKyspCiAgICAgICAgICAgIF9NX3RhYmxlW19faV0gPSBfTV90YWJsZVtfX2ldIC0gX01f dGFibGVbKDEgKyBfX2kgKyAzMCkgJSA1NV07CiAgICB9CiAgICBfTV9pbmRleDEgPSAwOwogICAg X01faW5kZXgyID0gMzE7CiAgfQoKICBzdWJ0cmFjdGl2ZV9ybmcodW5zaWduZWQgaW50IF9fc2Vl ZCkgeyBfTV9pbml0aWFsaXplKF9fc2VlZCk7IH0KICBzdWJ0cmFjdGl2ZV9ybmcoKSB7IF9NX2lu aXRpYWxpemUoMTYxODAzMzk4dSk7IH0KfTsKIyA1MTkgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2Nj LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfZnVuY3Rpb24u aCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3QgOiBw dWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwKixfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1f ZnVuX3QoX1JldCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRv cigpKF9UcCogX19wKSBjb25zdCB7IHJldHVybiAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgog IF9SZXQgKF9UcDo6Kl9NX2YpKCk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1Rw PgpjbGFzcyBjb25zdF9tZW1fZnVuX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248Y29uc3QgX1Rw KixfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3QoX1JldCAoX1RwOjoq X19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9U cCogX19wKSBjb25zdCB7IHJldHVybiAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQg KF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9U cD4KY2xhc3MgbWVtX2Z1bl9yZWZfdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1JldD4g ewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl9yZWZfdChfUmV0IChfVHA6OipfX3BmKSgpKSA6 IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1RwJiBfX3IpIGNvbnN0IHsgcmV0dXJu IChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpOwp9OwoKdGVt cGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl9yZWZfdCA6 IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29u c3RfbWVtX2Z1bl9yZWZfdChfUmV0IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikg e30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IpIGNvbnN0IHsgcmV0dXJuIChfX3Iu Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKdGVt cGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFf dCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwKixfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4 cGxpY2l0IG1lbV9mdW4xX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7 fQogIF9SZXQgb3BlcmF0b3IoKShfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChf X3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZyk7Cn07 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25z dF9tZW1fZnVuMV90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLF9BcmcsX1Jl dD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfdChfUmV0IChfVHA6OipfX3Bm KShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9U cCogX19wLCBfQXJnIF9feCkgY29uc3QKICAgIHsgcmV0dXJuIChfX3AtPipfTV9mKShfX3gpOyB9 CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZykgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV9yZWZfdCA6 IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGlj aXQgbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7 fQogIF9SZXQgb3BlcmF0b3IoKShfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChf X3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKTsKfTsK CnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0 X21lbV9mdW4xX3JlZl90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyxfUmV0PiB7 CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV9yZWZfdChfUmV0IChfVHA6OipfX3Bm KShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9U cCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoX194KTsgfQpwcml2 YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNz IF9UcD4KY2xhc3MgbWVtX2Z1bl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248 X1RwKix2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3Qodm9pZCAoX1RwOjoqX19w ZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCogX19wKSBjb25zdCB7 IChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKTsKfTsKCnRl bXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fdDx2b2lkLCBfVHA+IDogcHVi bGljIHVuYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQg Y29uc3RfbWVtX2Z1bl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7 fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCkgY29uc3QgeyAoX19wLT4qX01fZiko KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3JlZl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlf ZnVuY3Rpb248X1RwLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fcmVmX3Qodm9p ZCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCYg X19yKSBjb25zdCB7IChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9m KSgpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl9yZWZfdDx2 b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCx2b2lkPiB7CnB1YmxpYzoKICBl eHBsaWNpdCBjb25zdF9tZW1fZnVuX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDog X01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fcikgY29uc3QgeyAo X19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsK CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3Q8dm9pZCwg X1RwLCBfQXJnPiA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwKixfQXJnLHZvaWQ+IHsKcHVi bGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykpIDogX01f ZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsg KF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKTsK fTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4x X3Q8dm9pZCwgX1RwLCBfQXJnPgogIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxjb25zdCBfVHAq LF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfdCh2b2lkIChf VHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigp KGNvbnN0IF9UcCogX19wLCBfQXJnIF9feCkgY29uc3QgeyAoX19wLT4qX01fZikoX194KTsgfQpw cml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNs YXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfcmVmX3Q8dm9pZCwgX1RwLCBfQXJn PgogIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBl eHBsaWNpdCBtZW1fZnVuMV9yZWZfdCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9f cGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyAoX19y LipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoX0FyZyk7Cn07Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZf dDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLHZv aWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6 Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29u c3QgX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0 ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgoKCgoKCnRlbXBsYXRlIDxj bGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBtZW1fZnVuX3Q8X1JldCxfVHA+IG1lbV9mdW4o X1JldCAoX1RwOjoqX19mKSgpKQogIHsgcmV0dXJuIG1lbV9mdW5fdDxfUmV0LF9UcD4oX19mKTsg fQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0X21lbV9mdW5f dDxfUmV0LF9UcD4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKCkgY29uc3QpCiAgeyByZXR1cm4g Y29uc3RfbWVtX2Z1bl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwg Y2xhc3MgX1RwPgppbmxpbmUgbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4gbWVtX2Z1bl9yZWYoX1Jl dCAoX1RwOjoqX19mKSgpKQogIHsgcmV0dXJuIG1lbV9mdW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7 IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBjb25zdF9tZW1fZnVu X3JlZl90PF9SZXQsX1RwPiBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKCkgY29uc3QpCiAg eyByZXR1cm4gY29uc3RfbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUg PGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIG1lbV9mdW4xX3Q8X1Jl dCxfVHAsX0FyZz4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1l bV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNs YXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxfVHAsX0Fy Zz4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0 X21lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQs IGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9B cmc+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAgeyByZXR1cm4gbWVtX2Z1 bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNs YXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIGNvbnN0X21lbV9mdW4xX3JlZl90PF9SZXQsX1Rw LF9Bcmc+Cm1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykgY29uc3QpCiAgeyByZXR1 cm4gY29uc3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUg PGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIG1lbV9mdW4xX3Q8X1Jl dCxfVHAsX0FyZz4gbWVtX2Z1bjEoX1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVybiBt ZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBj bGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9B cmc+IG1lbV9mdW4xKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykgY29uc3QpCiAgeyByZXR1cm4gY29u c3RfbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jl dCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAs X0FyZz4gbWVtX2Z1bjFfcmVmKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAgeyByZXR1cm4gbWVt X2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQs IGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIGNvbnN0X21lbV9mdW4xX3JlZl90PF9SZXQs X1RwLF9Bcmc+Cm1lbV9mdW4xX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsg cmV0dXJuIGNvbnN0X21lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCn0KIyAy MiAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNs dWRlL2crKy9iaXRzL3N0ZF9mdW5jdGlvbmFsLmgiIDIgMwojIDMgIi91c3IvbG9jYWwvZ2NjMy9s aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvZnVuY3Rpb25hbCIg MiAzCiMgNjggIlBsYXRmb3JtU3VwcG9ydC9Eb3VibGVTdXBwb3J0LmhwcCIgMgoKCgojIDEgIlhh bGFuRE9NL1hhbGFuRE9NU3RyaW5nLmhwcCIgMQojIDYyICJYYWxhbkRPTS9YYWxhbkRPTVN0cmlu Zy5ocHAiCiMgMSAiWGFsYW5ET00vWGFsYW5ET01EZWZpbml0aW9ucy5ocHAiIDEKCgoKCgojIDEg IkluY2x1ZGUvUGxhdGZvcm1EZWZpbml0aW9ucy5ocHAiIDEKIyA3ICJYYWxhbkRPTS9YYWxhbkRP TURlZmluaXRpb25zLmhwcCIgMgojIDYzICJYYWxhbkRPTS9YYWxhbkRPTVN0cmluZy5ocHAiIDIK CgoKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w L2luY2x1ZGUvZysrL3ZlY3RvciIgMSAzCgojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxp Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfdmVjdG9yLmgiIDEg MwojIDMxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w L2luY2x1ZGUvZysrL2JpdHMvc3RkX3ZlY3Rvci5oIiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjMy9s aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9mdW5jdGV4 Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu dXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2xv Y2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2V4 Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIv aTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvZnVuY3RleGNlcHQuaCIgMiAz CgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsK CgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2Jh ZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9p ZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy b3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2ludmFs aWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vy cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5nZShjb25z dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIq IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7Cgog IHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK ICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9pZAogIF9f dGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDMzICIvdXNyL2xvY2FsL2dj YzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3Rk X3ZlY3Rvci5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1s aW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDEgMwojIDM1ICIv dXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUv ZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1s aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2k2ODYtcGMtbGludXgtZ251L2Jp dHMvYysrY29uZmlnLmgiIDEgMwojIDM2ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4 Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoK IyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu Y2x1ZGUvZysrL2JpdHMvc3RsX3BhaXIuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvZ2NjMy9saWIv Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfcGFpci5o IiAzCm5hbWVzcGFjZSBzdGQKewoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgpzdHJ1 Y3QgcGFpciB7CiAgdHlwZWRlZiBfVDEgZmlyc3RfdHlwZTsKICB0eXBlZGVmIF9UMiBzZWNvbmRf dHlwZTsKCiAgX1QxIGZpcnN0OwogIF9UMiBzZWNvbmQ7CiAgcGFpcigpIDogZmlyc3QoX1QxKCkp LCBzZWNvbmQoX1QyKCkpIHt9CiAgcGFpcihjb25zdCBfVDEmIF9fYSwgY29uc3QgX1QyJiBfX2Ip IDogZmlyc3QoX19hKSwgc2Vjb25kKF9fYikge30KCiAgdGVtcGxhdGUgPGNsYXNzIF9VMSwgY2xh c3MgX1UyPgogIHBhaXIoY29uc3QgcGFpcjxfVTEsIF9VMj4mIF9fcCkgOiBmaXJzdChfX3AuZmly c3QpLCBzZWNvbmQoX19wLnNlY29uZCkge30KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNz IF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBj b25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7CiAgcmV0dXJuIF9feC5maXJzdCA9PSBfX3kuZmly c3QgJiYgX194LnNlY29uZCA9PSBfX3kuc2Vjb25kOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBj bGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194 LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7CiAgcmV0dXJuIF9feC5maXJzdCA8IF9feS5m aXJzdCB8fAogICAgICAgICAoIShfX3kuZmlyc3QgPCBfX3guZmlyc3QpICYmIF9feC5zZWNvbmQg PCBfX3kuc2Vjb25kKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUg Ym9vbCBvcGVyYXRvciE9KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1Qx LCBfVDI+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNz IF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgcGFpcjxfVDEsIF9U Mj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8 PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7 CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1Qy PgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0 IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CgoKaW5saW5lIHBhaXI8X1QxLCBfVDI+IG1ha2VfcGFp cihjb25zdCBfVDEgX194LCBjb25zdCBfVDIgX195KQoKCgp7CiAgcmV0dXJuIHBhaXI8X1QxLCBf VDI+KF9feCwgX195KTsKfQoKfQojIDM4ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4 Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoK CiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9p bmNsdWRlL2crKy9iaXRzL3R5cGVfdHJhaXRzLmgiIDEgMwojIDE5ICIvdXNyL2xvY2FsL2djYzMv bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvdHlwZV90 cmFpdHMuaCIgMwoKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51 eC1nbnUvMy4wL2luY2x1ZGUvZysrL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgi IDEgMwojIDIxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv My4wL2luY2x1ZGUvZysrL2JpdHMvdHlwZV90cmFpdHMuaCIgMiAzCiMgNTcgIi91c3IvbG9jYWwv Z2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy90 eXBlX3RyYWl0cy5oIiAzCnRlbXBsYXRlIDxib29sIF9UcnV0aD4gc3RydWN0IF9Cb29sIHt9Owp0 eXBlZGVmIF9Cb29sPHRydWU+IF9fdHJ1ZV90eXBlOwp0eXBlZGVmIF9Cb29sPGZhbHNlPiBfX2Zh bHNlX3R5cGU7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX190eXBlX3RyYWl0cyB7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgdGhpc19kdW1teV9tZW1iZXJfbXVzdF9iZV9maXJzdDsKIyA4 MSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNs dWRlL2crKy9iaXRzL3R5cGVfdHJhaXRzLmgiIDMKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFz X3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFz X3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3Ry aXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3Ry aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaXNfUE9EX3R5cGU7Cn07 CgoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGJvb2w+IHsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl X3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BP RF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxjaGFyPiB7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8c2lnbmVk IGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0 cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRv cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBl X3RyYWl0czx1bnNpZ25lZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp YWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh bF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fz c2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVz dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRl PD4gc3RydWN0IF9fdHlwZV90cmFpdHM8d2NoYXJfdD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf dHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190 cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07 Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNob3J0PiB7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0Rf dHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgc2hvcnQ+ IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9y OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0 czxpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0 cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRv cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBl X3RyYWl0czx1bnNpZ25lZCBpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh bF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs X2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNz aWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0 cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8 PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz X3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf dHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2 aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp YWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRl bXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZz4gewogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNf UE9EX3R5cGU7Cn07CiMgMTk5ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1s aW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvdHlwZV90cmFpdHMuaCIgMwp0ZW1wbGF0ZTw+ IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGZsb2F0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz X3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf dHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2 aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp YWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRl bXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8ZG91YmxlPiB7CiAgIHR5cGVkZWYgX190cnVl X3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlw ZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBkb3VibGU+IHsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90 cmFpdHM8X1RwKj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRf Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25z dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w ZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgoKdGVtcGxhdGUgPGNsYXNz IF9UcD4gc3RydWN0IF9Jc19pbnRlZ2VyIHsKICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfSW50ZWdy YWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxib29sPiB7CiAgdHlwZWRlZiBf X3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxj aGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0 cnVjdCBfSXNfaW50ZWdlcjxzaWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0lu dGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgY2hhcj4g ewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3Qg X0lzX2ludGVnZXI8d2NoYXJfdD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9 OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8c2hvcnQ+IHsKICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2ln bmVkIHNob3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0 ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRl Z3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGludD4gewog IHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lz X2ludGVnZXI8bG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVt cGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgbG9uZz4gewogIHR5cGVkZWYgX190 cnVlX3R5cGUgX0ludGVncmFsOwp9OwojIDI5NiAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGli L2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3R5cGVfdHJhaXRzLmgiIDMK dGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBzdHJ1Y3QgX0lzX25vcm1hbF9pdGVyYXRvciB7CiAgIHR5 cGVkZWYgX19mYWxzZV90eXBlIF9Ob3JtYWw7Cn07CgoKbmFtZXNwYWNlIHN0ZCB7CiAgIHRlbXBs YXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4gY2xhc3MgX19ub3Jt YWxfaXRlcmF0b3I7Cn07Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9D b250YWluZXI+CnN0cnVjdCBfSXNfbm9ybWFsX2l0ZXJhdG9yPCBzdGQ6Ol9fbm9ybWFsX2l0ZXJh dG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4gPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgX05v cm1hbDsKfTsKIyA0MSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt Z251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMgMSAiL3Vzci9s b2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9i aXRzL3N0ZF9jc3RyaW5nLmgiIDEgMwojIDM5ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIv aTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdHJpbmcuaCIgMwoj IDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5j bHVkZS9nKysvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMgNDAgIi91 c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9n KysvYml0cy9zdGRfY3N0cmluZy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1s aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRkZWYuaCIg MSAzCiMgNDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z LjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0cmluZy5oIiAyIDMKIyA1MSAiL3Vzci9sb2NhbC9n Y2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0 ZF9jc3RyaW5nLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMwojIDI2ICIvdXNy L2luY2x1ZGUvc3RyaW5nLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMg MjcgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKCiMgMSAiL3Vz ci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0 ZGRlZi5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgoKZXh0ZXJuIHZv aWQgKiBtZW1jcHkgKHZvaWQgKiBfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCB2b2lkICogX19y ZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkICogbWVt bW92ZSAodm9pZCAqIF9fZGVzdCwgX19jb25zdCB2b2lkICogX19zcmMsIHNpemVfdCBfX24pIHRo cm93ICgpOwoKCgoKCgpleHRlcm4gdm9pZCAqIG1lbWNjcHkgKHZvaWQgKiBfX2Rlc3QsIF9fY29u c3Qgdm9pZCAqIF9fc3JjLCBpbnQgX19jLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgpleHRl cm4gdm9pZCAqIG1lbXNldCAodm9pZCAqIF9fcywgaW50IF9fYywgc2l6ZV90IF9fbikgdGhyb3cg KCk7CgoKZXh0ZXJuIGludCBtZW1jbXAgKF9fY29uc3Qgdm9pZCAqIF9fczEsIF9fY29uc3Qgdm9p ZCAqIF9fczIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCAqIF9fZ2xpYmNw cF9tZW1jaHIgKF9fY29uc3Qgdm9pZCAqIF9fcywgaW50IF9fYywgc2l6ZV90IF9fbikgdGhyb3cg KCk7CgoKCgpleHRlcm4gdm9pZCAqIHJhd21lbWNociAoX19jb25zdCB2b2lkICogX19zLCBpbnQg X19jKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpzdHJjcHkgKGNoYXIgKl9fcmVzdHJpY3Qg X19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpIHRocm93ICgpOwoKCmV4dGVy biBjaGFyICpzdHJuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnN0 cmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X3NyYykgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnN0cm5jYXQgKGNoYXIgKl9fcmVzdHJpY3Qg X19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93 ICgpOwoKCgpleHRlcm4gaW50IHN0cmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNo YXIgKl9fczIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBzdHJuY21wIChfX2NvbnN0IGNoYXIgKl9f czEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu dCBzdHJjb2xsIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikgdGhyb3cg KCk7CgpleHRlcm4gc2l6ZV90IHN0cnhmcm0gKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgoj IDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUveGxvY2Fs ZS5oIiAzCnR5cGVkZWYgc3RydWN0IF9fbG9jYWxlX3N0cnVjdAp7CiAgc3RydWN0IGxvY2FsZV9k YXRhICpfX2xvY2FsZXNbNl07CgoKICBjb25zdCB1bnNpZ25lZCBzaG9ydCBpbnQgKl9fY3R5cGVf YjsKICBjb25zdCBpbnQgKl9fY3R5cGVfdG9sb3dlcjsKICBjb25zdCBpbnQgKl9fY3R5cGVfdG91 cHBlcjsKfSAqX19sb2NhbGVfdDsKIyAxMDAgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoK ZXh0ZXJuIGludCBfX3N0cmNvbGxfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIg Kl9fczIsIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAoKTsKCgpleHRlcm4gc2l6ZV90IF9fc3RyeGZy bV9sIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19zcmMsIHNpemVfdCBfX24sIF9fbG9j YWxlX3QgX19sKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqX19zdHJkdXAgKF9fY29uc3Qg Y2hhciAqX19zKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnN0cmR1cCAoX19jb25zdCBjaGFyICpf X3MpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqc3RybmR1cCAoX19jb25zdCBjaGFyICpf X3N0cmluZywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CiMgMTQ2ICIvdXNyL2luY2x1ZGUvc3RyaW5n LmgiIDMKZXh0ZXJuIGNoYXIgKl9fZ2xpYmNwcF9zdHJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBp bnQgX19jKSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpfX2dsaWJjcHBfc3RycmNociAoX19jb25z dCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmNocm51 bCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHNpemVf dCBzdHJjc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX3JlamVjdCkgdGhy b3cgKCk7CgoKZXh0ZXJuIHNpemVfdCBzdHJzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0 IGNoYXIgKl9fYWNjZXB0KSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpfX2dsaWJjcHBfc3RycGJy ayAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpIHRocm93ICgpOwoK ZXh0ZXJuIGNoYXIgKl9fZ2xpYmNwcF9zdHJzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywg X19jb25zdCBjaGFyICpfX25lZWRsZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpfX3N0cmNh c2VzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkg dGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RyY2FzZXN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0 YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpz dHJ0b2sgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19k ZWxpbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqX19zdHJ0b2tfciAoY2hhciAqX19yZXN0 cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLCBjaGFyICoqX19yZXN0 cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cnRva19yIChjaGFy ICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sIGNoYXIg KipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIHRocm93ICgpOwojIDE5NCAiL3Vzci9pbmNsdWRlL3N0 cmluZy5oIiAzCmV4dGVybiB2b2lkICogbWVtbWVtIChfX2NvbnN0IHZvaWQgKiBfX2hheXN0YWNr LCBzaXplX3QgX19oYXlzdGFja2xlbiwgX19jb25zdCB2b2lkICogX19uZWVkbGUsIHNpemVfdCBf X25lZWRsZWxlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCAqIF9fbWVtcGNweSAodm9pZCAq IF9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IHZvaWQgKiBfX3Jlc3RyaWN0IF9fc3JjLCBzaXpl X3QgX19uKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkICogbWVtcGNweSAodm9pZCAqIF9fcmVzdHJp Y3QgX19kZXN0LCBfX2NvbnN0IHZvaWQgKiBfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0 aHJvdyAoKTsKCgoKCgpleHRlcm4gc2l6ZV90IHN0cmxlbiAoX19jb25zdCBjaGFyICpfX3MpIHRo cm93ICgpOwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJubGVuIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5n LCBzaXplX3QgX19tYXhsZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yIChp bnQgX19lcnJudW0pIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19zdHJlcnJvcl9yIChpbnQg X19lcnJudW0sIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIHRocm93ICgpOwpleHRlcm4g Y2hhciAqc3RyZXJyb3JfciAoaW50IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVm bGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIF9fYnplcm8gKHZvaWQgKiBfX3MsIHNpemVf dCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBiY29weSAoX19jb25zdCB2b2lkICogX19z cmMsIHZvaWQgKiBfX2Rlc3QsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGJ6 ZXJvICh2b2lkICogX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGJjbXAg KF9fY29uc3Qgdm9pZCAqIF9fczEsIF9fY29uc3Qgdm9pZCAqIF9fczIsIHNpemVfdCBfX24pIHRo cm93ICgpOwoKCmV4dGVybiBjaGFyICppbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2Mp IHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpyaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQg X19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2ZmcyAoaW50IF9faSkgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKGNvbnN0KSk7CmV4dGVybiBpbnQgZmZzIChpbnQgX19pKSB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKCgoKCmV4dGVybiBpbnQgZmZzbCAobG9uZyBpbnQgX19s KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJu IGludCBmZnNsbCAobG9uZyBsb25nIGludCBfX2xsKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRl X18gKChjb25zdCkpOwoKCgoKZXh0ZXJuIGludCBfX3N0cmNhc2VjbXAgKF9fY29uc3QgY2hhciAq X19zMSwgX19jb25zdCBjaGFyICpfX3MyKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBzdHJjYXNlY21w IChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikgdGhyb3cgKCk7CgoKZXh0 ZXJuIGludCBzdHJuY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9f czIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IF9fc3RyY2FzZWNtcF9s IChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgX19sb2NhbGVfdCBfX2xv YykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3N0cm5jYXNlY21wX2wgKF9fY29uc3QgY2hhciAq X19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKSB0 aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKnN0cnNlcCAoY2hhciAqKl9fcmVzdHJpY3QgX19z dHJpbmdwLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkgdGhyb3cgKCk7CgoKCgoK ZXh0ZXJuIGludCBzdHJ2ZXJzY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAq X19zMikgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnN0cnNpZ25hbCAoaW50IF9fc2lnKSB0aHJv dyAoKTsKCgpleHRlcm4gY2hhciAqX19zdHBjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0 cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X3NyYykgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqX19zdHBuY3B5IChjaGFyICpfX3Jlc3Ry aWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0 aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoK ZXh0ZXJuIGNoYXIgKnN0cmZyeSAoY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCmV4dGVybiB2 b2lkICogbWVtZnJvYiAodm9pZCAqIF9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCmV4 dGVybiBjaGFyICpiYXNlbmFtZSAoX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSB0aHJvdyAoKTsK IyAzNTAgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwp9CiMgNTIgIi91c3IvbG9jYWwvZ2NjMy9s aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0 cmluZy5oIiAyIDMKIyA3NyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu dXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jc3RyaW5nLmgiIDMKbmFtZXNwYWNlIHN0 ZAp7CiAgZXh0ZXJuICJDIiB2b2lkKiBtZW1jcHkodm9pZCosIGNvbnN0IHZvaWQqLCBzaXplX3Qp OwogIGV4dGVybiAiQyIgdm9pZCogbWVtbW92ZSh2b2lkKiwgY29uc3Qgdm9pZCosIHNpemVfdCk7 CiAgZXh0ZXJuICJDIiBjaGFyKiBzdHJjcHkoY2hhciosIGNvbnN0IGNoYXIqKTsKICBleHRlcm4g IkMiIGNoYXIqIHN0cm5jcHkoY2hhciosIGNvbnN0IGNoYXIqLCBzaXplX3QpOwogIGV4dGVybiAi QyIgY2hhciogc3RyY2F0KGNoYXIqLCBjb25zdCBjaGFyKik7CiAgZXh0ZXJuICJDIiBjaGFyKiBz dHJuY2F0KGNoYXIqLCBjb25zdCBjaGFyKiwgc2l6ZV90KTsKICBleHRlcm4gIkMiIGludCBtZW1j bXAoY29uc3Qgdm9pZCosIGNvbnN0IHZvaWQqLCBzaXplX3QpOwogIGV4dGVybiAiQyIgaW50IHN0 cmNtcChjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOwogIGV4dGVybiAiQyIgaW50IHN0cmNvbGwo Y29uc3QgY2hhciosIGNvbnN0IGNoYXIqKTsKICBleHRlcm4gIkMiIGludCBzdHJuY21wKGNvbnN0 IGNoYXIqLCBjb25zdCBjaGFyKiwgc2l6ZV90KTsKICBleHRlcm4gIkMiIHNpemVfdCBzdHJ4ZnJt KGNoYXIqLCBjb25zdCBjaGFyKiwgc2l6ZV90KTsKICBleHRlcm4gIkMiIGNvbnN0IHZvaWQqIG1l bWNocihjb25zdCB2b2lkKiwgaW50LCBzaXplX3QpOwogIGlubGluZSB2b2lkKgogIG1lbWNocih2 b2lkKiBfX3AsIGludCBfX2MsIHNpemVfdCBfX24pCiAgewogICAgcmV0dXJuIGNvbnN0X2Nhc3Q8 dm9pZCo+KG1lbWNocihjb25zdF9jYXN0PGNvbnN0IHZvaWQqPihfX3ApLCBfX2MsIF9fbikpOwog IH0KICBleHRlcm4gIkMiIGNvbnN0IGNoYXIqIHN0cmNocihjb25zdCBjaGFyKiwgaW50KTsKICBp bmxpbmUgY2hhcioKICBzdHJjaHIoY2hhciogX19zMSwgaW50IF9fbikKICB7CiAgICByZXR1cm4g Y29uc3RfY2FzdDxjaGFyKj4oc3RyY2hyKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBf X24pKTsKICB9CiAgZXh0ZXJuICJDIiBzaXplX3Qgc3RyY3Nwbihjb25zdCBjaGFyKiwgY29uc3Qg Y2hhciopOwogIGV4dGVybiAiQyIgY29uc3QgY2hhciogc3RycGJyayhjb25zdCBjaGFyKiwgY29u c3QgY2hhciopOwogIGlubGluZSBjaGFyKgogIHN0cnBicmsoY2hhciogX19zMSwgY29uc3QgY2hh ciogX19zMikKICB7CiAgICByZXR1cm4gY29uc3RfY2FzdDxjaGFyKj4oc3RycGJyayhjb25zdF9j YXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19zMikpOwogIH0KICBleHRlcm4gIkMiIGNvbnN0IGNo YXIqIHN0cnJjaHIoY29uc3QgY2hhciosIGludCk7CiAgaW5saW5lIGNoYXIqCiAgc3RycmNocihj aGFyKiBfX3MxLCBpbnQgX19uKQogIHsKICAgIHJldHVybiBjb25zdF9jYXN0PGNoYXIqPihzdHJy Y2hyKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX24pKTsKICB9CiAgZXh0ZXJuICJD IiBzaXplX3Qgc3Ryc3BuKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7CiAgZXh0ZXJuICJDIiBj b25zdCBjaGFyKiBzdHJzdHIoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKTsKICBpbmxpbmUgY2hh cioKICBzdHJzdHIoY2hhciogX19zMSwgY29uc3QgY2hhciogX19zMikKICB7CiAgICByZXR1cm4g Y29uc3RfY2FzdDxjaGFyKj4oc3Ryc3RyKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBf X3MyKSk7CiAgfQogIGV4dGVybiAiQyIgY2hhciogc3RydG9rKGNoYXIqLCBjb25zdCBjaGFyKik7 CiAgZXh0ZXJuICJDIiB2b2lkKiBtZW1zZXQodm9pZCosIGludCwgc2l6ZV90KTsKICBleHRlcm4g IkMiIGNoYXIqIHN0cmVycm9yKGludCk7CiAgZXh0ZXJuICJDIiBzaXplX3Qgc3RybGVuKGNvbnN0 IGNoYXIqKTsKfQojIDQzICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51 eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3Iv bG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysv Yml0cy9zdGRfY2xpbWl0cy5oIiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGli L2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jbGltaXRzLmgiIDMK IyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu Y2x1ZGUvbGltaXRzLmgiIDEgMwojIDExICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4 Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNyL2xvY2FsL2dj YzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3lzbGltaXRzLmgi IDEgMwoKCgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4 LWdudS8zLjAvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgMTMwICIvdXNyL2xvY2FsL2djYzMvbGli L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIv dXNyL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDMK IyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9saW1p dHMuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAxIDMKIyAx MjYgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9i aXRzL2xvY2FsX2xpbS5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgi IDMKIyAxICIvdXNyL2luY2x1ZGUvbGludXgvbGltaXRzLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1 ZGUvYml0cy9sb2NhbF9saW0uaCIgMiAzCiMgMTI3ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFf bGltLmgiIDIgMwojIDMxICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgojIDEgIi91c3Iv aW5jbHVkZS9iaXRzL3Bvc2l4Ml9saW0uaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9saW1pdHMu aCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDEgMwojIDM0ICIv dXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0 ZGlvX2xpbS5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDIgMwoj IDM5ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwojIDEzMSAiL3Vzci9sb2NhbC9nY2MzL2xp Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyA4 ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1 ZGUvc3lzbGltaXRzLmgiIDIgMwojIDEyICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4 Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvbGltaXRzLmgiIDIgMwojIDQxICIvdXNyL2xvY2Fs L2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMv c3RkX2NsaW1pdHMuaCIgMiAzCiMgNDQgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2 LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMg MSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNs dWRlL2crKy9iaXRzL3N0ZF9jc3RkbGliLmgiIDEgMwojIDM5ICIvdXNyL2xvY2FsL2djYzMvbGli L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRs aWIuaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu dS8zLjAvaW5jbHVkZS9nKysvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAz CiMgNDAgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAv aW5jbHVkZS9nKysvYml0cy9zdGRfY3N0ZGxpYi5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMv bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2Nz dGRkZWYuaCIgMSAzCiMgNDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp bnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0ZGxpYi5oIiAyIDMKIyA0MyAiL3Vz ci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2cr Ky9iaXRzL3N0ZF9jc3RkbGliLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDEgMwoj IDI1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMu aCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgoKCgojIDEgIi91c3Iv bG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRk ZWYuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgpleHRlcm4gIkMiIHsK CgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBxdW90OwogICAgaW50IHJlbTsKICB9IGRp dl90OwoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGlu dCByZW07CiAgfSBsZGl2X3Q7CgoKCgoKX19leHRlbnNpb25fXyB0eXBlZGVmIHN0cnVjdAogIHsK ICAgIGxvbmcgbG9uZyBpbnQgcXVvdDsKICAgIGxvbmcgbG9uZyBpbnQgcmVtOwogIH0gbGxkaXZf dDsKIyA4MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBzaXplX3QgX19jdHlwZV9n ZXRfbWJfY3VyX21heCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgYXRvZiAoX19j b25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBhdG9pIChfX2NvbnN0IGNo YXIgKl9fbnB0cikgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBpbnQgYXRvbCAoX19jb25zdCBjaGFy ICpfX25wdHIpIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcgaW50 IGF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUg c3RydG9kIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmlj dCBfX2VuZHB0cikgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgc3RydG9mIChfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cg KCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIHN0cnRvbGQgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKCmV4dGVy biBsb25nIGludCBzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIg KipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCgpleHRlcm4gdW5z aWduZWQgbG9uZyBpbnQgc3RydG91bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwg Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCgoKCl9f ZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9xIChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkg dGhyb3cgKCk7CgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBz dHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmlj dCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CiMgMTMyICIvdXNyL2luY2x1ZGUvc3Rk bGliLmgiIDMKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b2xsIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwg aW50IF9fYmFzZSkgdGhyb3cgKCk7CgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9u ZyBsb25nIGludCBzdHJ0b3VsbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hh ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwojIDE1NyAiL3Vz ci9pbmNsdWRlL3N0ZGxpYi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMSAzCiMg MTU4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0 b2xfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3Qg X19lbmRwdHIsIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgpleHRl cm4gdW5zaWduZWQgbG9uZyBpbnQgX19zdHJ0b3VsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBfX2xvY2Fs ZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGlu dCBfX3N0cnRvbGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9f cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgp OwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91 bGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3Qg X19lbmRwdHIsIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKCmV4 dGVybiBkb3VibGUgX19zdHJ0b2RfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwg Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoK CmV4dGVybiBmbG9hdCBfX3N0cnRvZl9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy LCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7 CgoKZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykg dGhyb3cgKCk7CiMgMTk2ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGRvdWJsZSBf X3N0cnRvZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAq Kl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgpleHRlcm4gZmxv YXQgX19zdHJ0b2ZfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNo YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgpleHRlcm4g bG9uZyBkb3VibGUgX19zdHJ0b2xkX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0 IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKSB0aHJvdyAo KTsKCgoKCmV4dGVybiBsb25nIGludCBfX3N0cnRvbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2Us IGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19z dHJ0b3VsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAq Kl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsK CgoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19zdHJ0b2xsX2ludGVy bmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBf X2VuZHB0ciwgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKCl9fZXh0ZW5z aW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0b3VsbF9pbnRlcm5hbCAo X19jb25zdCBjaGFyICogX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKiogX19yZXN0cmljdCBfX2Vu ZHB0ciwgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwojIDMzMyAiL3Vzci9pbmNs dWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpsNjRhIChsb25nIGludCBfX24pIHRocm93ICgp OwoKCmV4dGVybiBsb25nIGludCBhNjRsIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCk7CgoK IyAxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3lz L3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3Iv aW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgpleHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNsdWRl L2JpdHMvdHlwZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKIyAx ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9iaXRzL3R5 cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu dXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL2JpdHMv dHlwZXMuaCIgMiAzCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdV9jaGFyOwp0eXBlZGVmIHVu c2lnbmVkIHNob3J0IF9fdV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191X2ludDsKdHlw ZWRlZiB1bnNpZ25lZCBsb25nIF9fdV9sb25nOwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2ln bmVkIGxvbmcgbG9uZyBpbnQgX191X3F1YWRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcg bG9uZyBpbnQgX19xdWFkX3Q7CiMgNDkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKdHlw ZWRlZiBzaWduZWQgY2hhciBfX2ludDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdWludDhf dDsKdHlwZWRlZiBzaWduZWQgc2hvcnQgaW50IF9faW50MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBz aG9ydCBpbnQgX191aW50MTZfdDsKdHlwZWRlZiBzaWduZWQgaW50IF9faW50MzJfdDsKdHlwZWRl ZiB1bnNpZ25lZCBpbnQgX191aW50MzJfdDsKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBzaWduZWQg bG9uZyBsb25nIGludCBfX2ludDY0X3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBs b25nIGxvbmcgaW50IF9fdWludDY0X3Q7Cgp0eXBlZGVmIF9fcXVhZF90ICpfX3FhZGRyX3Q7Cgp0 eXBlZGVmIF9fdV9xdWFkX3QgX19kZXZfdDsKdHlwZWRlZiBfX3VfaW50IF9fdWlkX3Q7CnR5cGVk ZWYgX191X2ludCBfX2dpZF90Owp0eXBlZGVmIF9fdV9sb25nIF9faW5vX3Q7CnR5cGVkZWYgX191 X2ludCBfX21vZGVfdDsKdHlwZWRlZiBfX3VfaW50IF9fbmxpbmtfdDsKdHlwZWRlZiBsb25nIGlu dCBfX29mZl90Owp0eXBlZGVmIF9fcXVhZF90IF9fbG9mZl90Owp0eXBlZGVmIGludCBfX3BpZF90 Owp0eXBlZGVmIGludCBfX3NzaXplX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19ybGltX3Q7CnR5cGVk ZWYgX19xdWFkX3QgX19ybGltNjRfdDsKdHlwZWRlZiBfX3VfaW50IF9faWRfdDsKCnR5cGVkZWYg c3RydWN0CiAgewogICAgaW50IF9fdmFsWzJdOwogIH0gX19mc2lkX3Q7CgoKdHlwZWRlZiBpbnQg X19kYWRkcl90Owp0eXBlZGVmIGNoYXIgKl9fY2FkZHJfdDsKdHlwZWRlZiBsb25nIGludCBfX3Rp bWVfdDsKdHlwZWRlZiBsb25nIGludCBfX3N3YmxrX3Q7Cgp0eXBlZGVmIGxvbmcgaW50IF9fY2xv Y2tfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9fZmRfbWFzazsKIyAxMDAgIi91c3Iv aW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKICB7CgoKCiAgICBfX2ZkX21h c2sgZmRzX2JpdHNbMTAyNCAvICg4ICogc2l6ZW9mIChfX2ZkX21hc2spKV07CgoKCgoKICB9IF9f ZmRfc2V0OwoKCnR5cGVkZWYgaW50IF9fa2V5X3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBp bnQgX19pcGNfcGlkX3Q7CgoKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa2NudF90Owp0eXBlZGVm IF9fcXVhZF90IF9fYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNibGtjbnRfdDsK dHlwZWRlZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcgX19m c2ZpbGNudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNudDY0X3Q7CgoKdHlwZWRlZiBf X3VfbG9uZyBfX2lubzY0X3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBfX29mZjY0X3Q7CgoKdHlwZWRl ZiBsb25nIGludCBfX3Rfc2NhbGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX190X3Vz Y2FsYXJfdDsKCgp0eXBlZGVmIGludCBfX2ludHB0cl90OwoKCgoKIyAxICIvdXNyL2luY2x1ZGUv Yml0cy9wdGhyZWFkdHlwZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0 eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMSAzCiMgNjggIi91c3Iv aW5jbHVkZS9iaXRzL3NjaGVkLmgiIDMKc3RydWN0IF9fc2NoZWRfcGFyYW0KICB7CiAgICBpbnQg c2NoZWRfcHJpb3JpdHk7CiAgfTsKIyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVz LmgiIDIgMwoKCnN0cnVjdCBfcHRocmVhZF9mYXN0bG9jawp7CiAgbG9uZyBpbnQgX19zdGF0dXM7 CiAgaW50IF9fc3BpbmxvY2s7Cn07CgoKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX2Rlc2NyX3N0 cnVjdCAqX3B0aHJlYWRfZGVzY3I7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2RldGFj aHN0YXRlOwogIGludCBfX3NjaGVkcG9saWN5OwogIHN0cnVjdCBfX3NjaGVkX3BhcmFtIF9fc2No ZWRwYXJhbTsKICBpbnQgX19pbmhlcml0c2NoZWQ7CiAgaW50IF9fc2NvcGU7CiAgc2l6ZV90IF9f Z3VhcmRzaXplOwogIGludCBfX3N0YWNrYWRkcl9zZXQ7CiAgdm9pZCAqX19zdGFja2FkZHI7CiAg c2l6ZV90IF9fc3RhY2tzaXplOwp9IHB0aHJlYWRfYXR0cl90OwoKCgp0eXBlZGVmIHN0cnVjdAp7 CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fY19sb2NrOwogIF9wdGhyZWFkX2Rlc2NyIF9f Y193YWl0aW5nOwp9IHB0aHJlYWRfY29uZF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9f ZHVtbXk7Cn0gcHRocmVhZF9jb25kYXR0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHB0aHJl YWRfa2V5X3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX21fcmVzZXJ2ZWQ7CiAgaW50 IF9fbV9jb3VudDsKICBfcHRocmVhZF9kZXNjciBfX21fb3duZXI7CiAgaW50IF9fbV9raW5kOwog IHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX21fbG9jazsKfSBwdGhyZWFkX211dGV4X3Q7CgoK CnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tdXRleGtpbmQ7Cn0gcHRocmVhZF9tdXRleGF0dHJf dDsKCgoKdHlwZWRlZiBpbnQgcHRocmVhZF9vbmNlX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdCBfcHRo cmVhZF9yd2xvY2tfdAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fcndfbG9jazsKICBp bnQgX19yd19yZWFkZXJzOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3JpdGVyOwogIF9wdGhyZWFk X2Rlc2NyIF9fcndfcmVhZF93YWl0aW5nOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3JpdGVfd2Fp dGluZzsKICBpbnQgX19yd19raW5kOwogIGludCBfX3J3X3BzaGFyZWQ7Cn0gcHRocmVhZF9yd2xv Y2tfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2xvY2traW5kOwogIGludCBfX3BzaGFy ZWQ7Cn0gcHRocmVhZF9yd2xvY2thdHRyX3Q7CgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50 IHB0aHJlYWRfdDsKIyAxNTEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwojIDMxICIv dXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCnR5cGVkZWYgX191X2NoYXIgdV9jaGFyOwp0 eXBlZGVmIF9fdV9zaG9ydCB1X3Nob3J0Owp0eXBlZGVmIF9fdV9pbnQgdV9pbnQ7CnR5cGVkZWYg X191X2xvbmcgdV9sb25nOwp0eXBlZGVmIF9fcXVhZF90IHF1YWRfdDsKdHlwZWRlZiBfX3VfcXVh ZF90IHVfcXVhZF90Owp0eXBlZGVmIF9fZnNpZF90IGZzaWRfdDsKCgp0eXBlZGVmIF9fbG9mZl90 IGxvZmZfdDsKCgoKdHlwZWRlZiBfX2lub190IGlub190OwoKCgoKCgp0eXBlZGVmIF9faW5vNjRf dCBpbm82NF90OwoKCgoKdHlwZWRlZiBfX2Rldl90IGRldl90OwoKCgoKdHlwZWRlZiBfX2dpZF90 IGdpZF90OwoKCgoKdHlwZWRlZiBfX21vZGVfdCBtb2RlX3Q7CgoKCgp0eXBlZGVmIF9fbmxpbmtf dCBubGlua190OwoKCgoKdHlwZWRlZiBfX3VpZF90IHVpZF90OwoKCgoKCnR5cGVkZWYgX19vZmZf dCBvZmZfdDsKCgoKCgoKdHlwZWRlZiBfX29mZjY0X3Qgb2ZmNjRfdDsKCgoKCnR5cGVkZWYgX19w aWRfdCBwaWRfdDsKCgoKCnR5cGVkZWYgX19pZF90IGlkX3Q7CgoKCnR5cGVkZWYgX19zc2l6ZV90 IHNzaXplX3Q7CgoKCgp0eXBlZGVmIF9fZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVmIF9fY2FkZHJf dCBjYWRkcl90OwoKCgp0eXBlZGVmIF9fa2V5X3Qga2V5X3Q7CgoKCgoKCiMgMSAiL3Vzci9pbmNs dWRlL3RpbWUuaCIgMSAzCiMgNTcgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKIyAxICIvdXNyL2lu Y2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA1OCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoK dHlwZWRlZiBfX2Nsb2NrX3QgY2xvY2tfdDsKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv dHlwZXMuaCIgMSAzCiMgNjkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoKCnR5cGVkZWYgX190 aW1lX3QgdGltZV90OwojIDEyMyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgojIDEg Ii91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVk ZS9zdGRkZWYuaCIgMSAzCiMgMTI2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgp0 eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHVsb25nOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGlu dCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CiMgMTY5ICIvdXNyL2luY2x1ZGUv c3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBpbnQgaW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVf XyAoX19RSV9fKSkpOwp0eXBlZGVmIGludCBpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVf XyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVf XyAoX19TSV9fKSkpOwp0eXBlZGVmIGludCBpbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVf XyAoX19ESV9fKSkpOwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50OF90IF9fYXR0cmlidXRl X18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDE2X3Qg X19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50 IHVfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1 bnNpZ25lZCBpbnQgdV9pbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkp OwoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fd29y ZF9fKSkpOwojIDE5MSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNs dWRlL2VuZGlhbi5oIiAxIDMKIyAyMiAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAzCiMgMSAiL3Vz ci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDIg MwojIDM1ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9l bmRpYW4uaCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMiAzCiMgMTkyICIvdXNy L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3Qu aCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoK CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9z eXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDEgMwoj IDMyICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9i aXRzL3NpZ3NldC5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMKdHlw ZWRlZiBpbnQgX19zaWdfYXRvbWljX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIHVuc2ln bmVkIGxvbmcgaW50IF9fdmFsWygxMDI0IC8gKDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50 KSkpXTsKICB9IF9fc2lnc2V0X3Q7CiMgMzUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIg MwoKCgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDgzICIvdXNyL2luY2x1ZGUvdGlt ZS5oIiAzCnN0cnVjdCB0aW1lc3BlYwogIHsKICAgIGxvbmcgaW50IHR2X3NlYzsKICAgIGxvbmcg aW50IHR2X25zZWM7CiAgfTsKIyAzOSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgpl eHRlcm4gIkMiIHsKCgoKCgpzdHJ1Y3QgdGltZXZhbDsKCnR5cGVkZWYgX19mZF9tYXNrIGZkX21h c2s7CgoKdHlwZWRlZiBfX2ZkX3NldCBmZF9zZXQ7CiMgNzQgIi91c3IvaW5jbHVkZS9zeXMvc2Vs ZWN0LmgiIDMKZXh0ZXJuIGludCBfX3NlbGVjdCAoaW50IF9fbmZkcywgX19mZF9zZXQgKl9fcmVh ZGZkcywgX19mZF9zZXQgKl9fd3JpdGVmZHMsIF9fZmRfc2V0ICpfX2V4Y2VwdGZkcywgc3RydWN0 IHRpbWV2YWwgKl9fdGltZW91dCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzZWxlY3QgKGludCBf X25mZHMsIF9fZmRfc2V0ICpfX3JlYWRmZHMsIF9fZmRfc2V0ICpfX3dyaXRlZmRzLCBfX2ZkX3Nl dCAqX19leGNlcHRmZHMsIHN0cnVjdCB0aW1ldmFsICpfX3RpbWVvdXQpIHRocm93ICgpOwojIDg3 ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCmV4dGVybiBpbnQgcHNlbGVjdCAoaW50IF9f bmZkcywgX19mZF9zZXQgKl9fcmVhZGZkcywgX19mZF9zZXQgKl9fd3JpdGVmZHMsIF9fZmRfc2V0 ICpfX2V4Y2VwdGZkcywgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3RpbWVvdXQsIGNvbnN0IF9f c2lnc2V0X3QgKl9fc2lnbWFzaykgdGhyb3cgKCk7CgoKCgoKfQojIDE5NSAiL3Vzci9pbmNsdWRl L3N5cy90eXBlcy5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgiIDEg MwojIDE5OCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKCgp0eXBlZGVmIF9fYmxr Y250X3QgYmxrY250X3Q7CnR5cGVkZWYgX19mc2Jsa2NudF90IGZzYmxrY250X3Q7CnR5cGVkZWYg X19mc2ZpbGNudF90IGZzZmlsY250X3Q7CgoKCgoKCgp0eXBlZGVmIF9fYmxrY250NjRfdCBibGtj bnQ2NF90Owp0eXBlZGVmIF9fZnNibGtjbnQ2NF90IGZzYmxrY250NjRfdDsKdHlwZWRlZiBfX2Zz ZmlsY250NjRfdCBmc2ZpbGNudDY0X3Q7CgoKfQojIDM0MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5o IiAyIDMKCgoKCgoKZXh0ZXJuIGludDMyX3QgcmFuZG9tICh2b2lkKSB0aHJvdyAoKTsKCgpleHRl cm4gdm9pZCBzcmFuZG9tICh1bnNpZ25lZCBpbnQgX19zZWVkKSB0aHJvdyAoKTsKCgoKCgpleHRl cm4gdm9pZCAqIGluaXRzdGF0ZSAodW5zaWduZWQgaW50IF9fc2VlZCwgdm9pZCAqIF9fc3RhdGVi dWYsIHNpemVfdCBfX3N0YXRlbGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkICogc2V0c3Rh dGUgKHZvaWQgKiBfX3N0YXRlYnVmKSB0aHJvdyAoKTsKCgoKCgoKCnN0cnVjdCByYW5kb21fZGF0 YQogIHsKICAgIGludDMyX3QgKmZwdHI7CiAgICBpbnQzMl90ICpycHRyOwogICAgaW50MzJfdCAq c3RhdGU7CiAgICBpbnQgcmFuZF90eXBlOwogICAgaW50IHJhbmRfZGVnOwogICAgaW50IHJhbmRf c2VwOwogICAgaW50MzJfdCAqZW5kX3B0cjsKICB9OwoKZXh0ZXJuIGludCByYW5kb21fciAoc3Ry dWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmLCBpbnQzMl90ICpfX3Jlc3RyaWN0IF9f cmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNyYW5kb21fciAodW5zaWduZWQgaW50IF9f c2VlZCwgc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1ZikgdGhyb3cgKCk7CgpleHRlcm4gaW50IGlu aXRzdGF0ZV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCB2b2lkICogX19yZXN0cmljdCBfX3N0YXRl YnVmLCBzaXplX3QgX19zdGF0ZWxlbiwgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9f YnVmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc2V0c3RhdGVfciAodm9pZCAqIF9fcmVzdHJp Y3QgX19zdGF0ZWJ1Ziwgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJv dyAoKTsKCgoKCgoKZXh0ZXJuIGludCByYW5kICh2b2lkKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lk IHNyYW5kICh1bnNpZ25lZCBpbnQgX19zZWVkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCByYW5k X3IgKHVuc2lnbmVkIGludCAqX19zZWVkKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBkb3VibGUg ZHJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgZXJhbmQ0OCAodW5zaWduZWQg c2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBscmFuZDQ4 ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgaW50IG5yYW5kNDggKHVuc2lnbmVkIHNob3J0 IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgbXJhbmQ0OCAodm9p ZCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGludCBqcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQg X194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc3JhbmQ0OCAobG9uZyBpbnQgX19z ZWVkdmFsKSB0aHJvdyAoKTsKZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGludCAqc2VlZDQ4ICh1bnNp Z25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgbGNvbmc0 OCAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10pIHRocm93ICgpOwoKCnN0cnVjdCBkcmFu ZDQ4X2RhdGEKICB7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgeFszXTsKICAgIHVuc2lnbmVkIHNo b3J0IGludCBhWzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IGM7CiAgICB1bnNpZ25lZCBzaG9y dCBpbnQgb2xkX3hbM107CiAgICBpbnQgaW5pdDsKICB9OwoKCgpleHRlcm4gaW50IGRyYW5kNDhf ciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwgZG91YmxlICpfX3Jl c3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZXJhbmQ0OF9yICh1bnNpZ25l ZCBzaG9ydCBpbnQgX194c3ViaVszXSwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBf X2J1ZmZlciwgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgoKCmV4dGVy biBpbnQgbHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVy LCBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IG5y YW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sIHN0cnVjdCBkcmFuZDQ4X2Rh dGEgKl9fcmVzdHJpY3QgX19idWZmZXIsIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0 aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgbXJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpf X3Jlc3RyaWN0IF9fYnVmZmVyLCBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cg KCk7CgpleHRlcm4gaW50IGpyYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10s IHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsIGxvbmcgaW50ICpfX3Jl c3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc3JhbmQ0OF9yIChsb25n IGludCBfX3NlZWR2YWwsIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAoKTsK CmV4dGVybiBpbnQgc2VlZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10sIHN0 cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGxjb25n NDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10sIHN0cnVjdCBkcmFuZDQ4X2RhdGEg Kl9fYnVmZmVyKSB0aHJvdyAoKTsKIyA0NzQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRl cm4gdm9pZCAqIG1hbGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCAq IGNhbGxvYyAoc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCgoKCmV4 dGVybiB2b2lkICogcmVhbGxvYyAodm9pZCAqIF9fcHRyLCBzaXplX3QgX19zaXplKSB0aHJvdyAo KTsKCmV4dGVybiB2b2lkIGZyZWUgKHZvaWQgKiBfX3B0cikgdGhyb3cgKCk7CgoKCmV4dGVybiB2 b2lkIGNmcmVlICh2b2lkICogX19wdHIpIHRocm93ICgpOwoKCgojIDEgIi91c3IvaW5jbHVkZS9h bGxvY2EuaCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMwojIDEgIi91c3IvaW5j bHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAyIDMKCgoj IDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5j bHVkZS9zdGRkZWYuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMiAzCgpleHRl cm4gIkMiIHsKCgoKCgpleHRlcm4gdm9pZCAqIGFsbG9jYSAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cg KCk7CgoKCgoKfQojIDQ5MyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCmV4dGVybiB2 b2lkICogdmFsbG9jIChzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIGFi b3J0ICh2b2lkKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCmV4 dGVybiBpbnQgYXRleGl0ICh2b2lkICgqX19mdW5jKSAodm9pZCkpIHRocm93ICgpOwoKCgoKZXh0 ZXJuIGludCBfX29uX2V4aXQgKHZvaWQgKCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZvaWQgKiBf X2FyZyksIHZvaWQgKiBfX2FyZykgdGhyb3cgKCk7CgpleHRlcm4gaW50IG9uX2V4aXQgKHZvaWQg KCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZvaWQgKiBfX2FyZyksIHZvaWQgKiBfX2FyZykgdGhy b3cgKCk7CgoKCgoKCmV4dGVybiB2b2lkIGV4aXQgKGludCBfX3N0YXR1cykgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIHZvaWQgX0V4aXQgKGludCBf X3N0YXR1cykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0 ZXJuIGNoYXIgKmdldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgpleHRl cm4gY2hhciAqX19zZWN1cmVfZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7 CgoKCgoKZXh0ZXJuIGludCBwdXRlbnYgKGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKCgoKCgpl eHRlcm4gaW50IHNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192 YWx1ZSwgaW50IF9fcmVwbGFjZSkgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIHVuc2V0ZW52IChf X2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgY2xlYXJlbnYg KHZvaWQpIHRocm93ICgpOwojIDU2NiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBj aGFyICpta3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50 IG1rc3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzeXN0 ZW0gKF9fY29uc3QgY2hhciAqX19jb21tYW5kKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIg KmNhbm9uaWNhbGl6ZV9maWxlX25hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsK IyA1OTUgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqcmVhbHBhdGggKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsIGNoYXIgKl9fcmVzdHJpY3QgX19yZXNvbHZl ZCkgdGhyb3cgKCk7CgoKCgoKCgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2ZuX3QpIChfX2NvbnN0 IHZvaWQgKiwgX19jb25zdCB2b2lkICopOwoKCnR5cGVkZWYgX19jb21wYXJfZm5fdCBjb21wYXJp c29uX2ZuX3Q7CgoKCgoKZXh0ZXJuIHZvaWQgKiBic2VhcmNoIChfX2NvbnN0IHZvaWQgKiBfX2tl eSwgX19jb25zdCB2b2lkICogX19iYXNlLCBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwg X19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCgoKZXh0ZXJuIHZvaWQgcXNvcnQgKHZvaWQgKiBf X2Jhc2UsIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLCBfX2NvbXBhcl9mbl90IF9fY29t cGFyKTsKCgoKCmV4dGVybiBpbnQgYWJzIChpbnQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7CmV4dGVybiBsb25nIGludCBsYWJzIChsb25nIGludCBfX3gpIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxv bmcgbG9uZyBpbnQgbGxhYnMgKGxvbmcgbG9uZyBpbnQgX194KSB0aHJvdyAoKQogICAgIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoKZXh0ZXJuIGRpdl90IGRpdiAoaW50IF9fbnVt ZXIsIGludCBfX2Rlbm9tKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4 dGVybiBsZGl2X3QgbGRpdiAobG9uZyBpbnQgX19udW1lciwgbG9uZyBpbnQgX19kZW5vbSkgdGhy b3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4 dGVybiBsbGRpdl90IGxsZGl2IChsb25nIGxvbmcgaW50IF9fbnVtZXIsIGxvbmcgbG9uZyBpbnQg X19kZW5vbSkgdGhyb3cgKCkKCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDY1 MSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICplY3Z0IChkb3VibGUgX192 YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3Ry aWN0IF9fc2lnbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmZjdnQgKGRvdWJsZSBfX3Zh bHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJp Y3QgX19zaWduKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqZ2N2dCAoZG91YmxlIF9fdmFs dWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpx ZWN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3Qg X19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAq cWZjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0 IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIg KnFnY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSB0 aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGVjdnRfciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25k aWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNo YXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu dCBmY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBf X2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBz aXplX3QgX19sZW4pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHFlY3Z0X3IgKGxvbmcgZG91Ymxl IF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19y ZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgdGhy b3cgKCk7CgoKZXh0ZXJuIGludCBxZmN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19u ZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBj aGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwojIDY5NSAiL3Vz ci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBpbnQgbWJsZW4gKF9fY29uc3QgY2hhciAqX19z LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1idG93YyAod2NoYXJfdCAqX19y ZXN0cmljdCBfX3B3YywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikg dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgd2N0b21iIChjaGFyICpfX3MsIHdjaGFyX3QgX193Y2hh cikgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3QgbWJzdG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJp Y3QgX19wd2NzLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJv dyAoKTsKCgpleHRlcm4gc2l6ZV90IHdjc3RvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19j b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CiMg NzE4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGludCBycG1hdGNoIChfX2NvbnN0 IGNoYXIgKl9fcmVzcG9uc2UpIHRocm93ICgpOwojIDcyOSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5o IiAzCmV4dGVybiBpbnQgZ2V0c3Vib3B0IChjaGFyICoqX19yZXN0cmljdCBfX29wdGlvbnAsIF9f Y29uc3QgY2hhciAqX19jb25zdCAqX19yZXN0cmljdCBfX3Rva2VucywgY2hhciAqKl9fcmVzdHJp Y3QgX192YWx1ZXApIHRocm93ICgpOwojIDczOCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4 dGVybiB2b2lkIHNldGtleSAoX19jb25zdCBjaGFyICpfX2tleSkgdGhyb3cgKCk7CgoKCgoKCgpl eHRlcm4gaW50IGdyYW50cHQgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB1bmxv Y2twdCAoaW50IF9fZmQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnB0c25hbWUgKGludCBf X2ZkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdHNuYW1lX3IgKGludCBfX2ZkLCBjaGFy ICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGdldHB0ICh2 b2lkKSB0aHJvdyAoKTsKCgoKCgp9CiMgNDQgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0ZGxpYi5oIiAyIDMK IyA4MyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9p bmNsdWRlL2crKy9iaXRzL3N0ZF9jc3RkbGliLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcg OjpkaXZfdDsKICB1c2luZyA6OmxkaXZfdDsKCiAgZXh0ZXJuICJDIiBkb3VibGUgYXRvZihjb25z dCBjaGFyKik7CiAgZXh0ZXJuICJDIiBpbnQgYXRvaShjb25zdCBjaGFyKik7CiAgZXh0ZXJuICJD IiBsb25nIGludCBhdG9sKGNvbnN0IGNoYXIqKTsKICBleHRlcm4gIkMiIGRvdWJsZSBzdHJ0b2Qo Y29uc3QgY2hhciosIGNoYXIqKik7CiAgZXh0ZXJuICJDIiBmbG9hdCBzdHJ0b2YoY29uc3QgY2hh ciosIGNoYXIqKik7CiAgZXh0ZXJuICJDIiBsb25nIGludCBzdHJ0b2woY29uc3QgY2hhciosIGNo YXIqKiwgaW50KTsKICBleHRlcm4gIkMiIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwoY29uc3Qg Y2hhciosIGNoYXIqKiwgaW50KTsKICBleHRlcm4gIkMiIGludCByYW5kKHZvaWQpOwogIGV4dGVy biAiQyIgdm9pZCBzcmFuZCh1bnNpZ25lZCBpbnQpOwogIGV4dGVybiAiQyIgdm9pZCogY2FsbG9j KHNpemVfdCwgc2l6ZV90KTsKICBleHRlcm4gIkMiIHZvaWQgZnJlZSh2b2lkKik7CiAgZXh0ZXJu ICJDIiB2b2lkKiBtYWxsb2Moc2l6ZV90KTsKICBleHRlcm4gIkMiIHZvaWQqIHJlYWxsb2Modm9p ZCosIHNpemVfdCk7CiAgZXh0ZXJuICJDIiB2b2lkIGFib3J0KHZvaWQpOwogIGV4dGVybiAiQyIg aW50IGF0ZXhpdCh2b2lkICgqZnVuYykodm9pZCkpOwogIGV4dGVybiAiQyIgdm9pZCBleGl0KGlu dCk7CiAgZXh0ZXJuICJDIiB2b2lkIF9FeGl0KGludCk7CiAgZXh0ZXJuICJDIiBjaGFyKmdldGVu dihjb25zdCBjaGFyKik7CiAgZXh0ZXJuICJDIiBpbnQgc3lzdGVtKGNvbnN0IGNoYXIqKTsKICBl eHRlcm4gIkMiIHZvaWQqIGJzZWFyY2goY29uc3Qgdm9pZCosIGNvbnN0IHZvaWQqLCBzaXplX3Qs IHNpemVfdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqY29tcCkoY29uc3Qgdm9p ZCAqLCBjb25zdCB2b2lkICopKTsKICBleHRlcm4gIkMiIHZvaWQgcXNvcnQodm9pZCosIHNpemVf dCwgc2l6ZV90LAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpjb21wKShjb25zdCB2b2lk ICosIGNvbnN0IHZvaWQgKikpOwogIGV4dGVybiAiQyIgaW50IGFicyhpbnQpOwogIGV4dGVybiAi QyIgbG9uZyBpbnQgbGFicyhsb25nIGludCk7CiAgZXh0ZXJuICJDIiBkaXZfdCBkaXYoaW50LCBp bnQpOwogIGV4dGVybiAiQyIgbGRpdl90IGxkaXYobG9uZyBpbnQsIGxvbmcgaW50KTsKICBleHRl cm4gIkMiIGludCBtYmxlbihjb25zdCBjaGFyKiwgc2l6ZV90KTsKICBleHRlcm4gIkMiIGludCBt YnRvd2Mod2NoYXJfdCosIGNvbnN0IGNoYXIqLCBzaXplX3QpOwogIGV4dGVybiAiQyIgaW50IHdj dG9tYihjaGFyKiwgd2NoYXJfdCk7CiAgZXh0ZXJuICJDIiBzaXplX3QgbWJzdG93Y3Mod2NoYXJf dCosIGNvbnN0IGNoYXIqLCBzaXplX3QpOwogIGV4dGVybiAiQyIgc2l6ZV90IHdjc3RvbWJzKGNo YXIqLCBjb25zdCB3Y2hhcl90Kiwgc2l6ZV90KTsKCiAgaW5saW5lIGxvbmcKICBhYnMobG9uZyBf X2kpIHsgcmV0dXJuIDo6bGFicyhfX2kpOyB9CgogIGlubGluZSBsZGl2X3QKICBkaXYobG9uZyBf X2ksIGxvbmcgX19qKSB7IHJldHVybiA6OmxkaXYoX19pLCBfX2opOyB9Cn0KIyA0NSAiL3Vzci9s b2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9i aXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIv aTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAz CiMgNDYgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAv aW5jbHVkZS9nKysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2Mz L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9uZXciIDEgMwoj IDM0ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu Y2x1ZGUvZysrL25ldyIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBj LWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvY3N0ZGRlZiIgMSAzCiMgMzUgIi91c3IvbG9jYWwv Z2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvbmV3IiAy IDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w L2luY2x1ZGUvZysrL2V4Y2VwdGlvbiIgMSAzCiMgMzQgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2Nj LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvZXhjZXB0aW9uIiAzCmV4dGVy biAiQysrIiB7CgpuYW1lc3BhY2Ugc3RkCnsKICBjbGFzcyBleGNlcHRpb24KICB7CiAgcHVibGlj OgogICAgZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KICAgIHZpcnR1YWwgfmV4Y2VwdGlvbigpIHRo cm93KCk7CiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQoKSBjb25zdCB0aHJvdygpOwogIH07 CgogIGNsYXNzIGJhZF9leGNlcHRpb24gOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoK ICAgIGJhZF9leGNlcHRpb24oKSB0aHJvdygpIHsgfQogICAgdmlydHVhbCB+YmFkX2V4Y2VwdGlv bigpIHRocm93KCk7CiAgfTsKCiAgdHlwZWRlZiB2b2lkICgqdGVybWluYXRlX2hhbmRsZXIpICgp OwogIHR5cGVkZWYgdm9pZCAoKnVuZXhwZWN0ZWRfaGFuZGxlcikgKCk7CgogIHRlcm1pbmF0ZV9o YW5kbGVyIHNldF90ZXJtaW5hdGUodGVybWluYXRlX2hhbmRsZXIpIHRocm93KCk7CiAgdm9pZCB0 ZXJtaW5hdGUoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgogIHVuZXhwZWN0ZWRf aGFuZGxlciBzZXRfdW5leHBlY3RlZCh1bmV4cGVjdGVkX2hhbmRsZXIpIHRocm93KCk7CiAgdm9p ZCB1bmV4cGVjdGVkKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKICBib29sIHVu Y2F1Z2h0X2V4Y2VwdGlvbigpIHRocm93KCk7Cn0KCn0KIyAzNiAiL3Vzci9sb2NhbC9nY2MzL2xp Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9uZXciIDIgMwoKZXh0 ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQKewogIGNsYXNzIGJhZF9hbGxvYyA6IHB1YmxpYyBl eGNlcHRpb24KICB7CiAgcHVibGljOgogICAgYmFkX2FsbG9jKCkgdGhyb3coKSB7IH0KICAgIHZp cnR1YWwgfmJhZF9hbGxvYygpIHRocm93KCk7CiAgfTsKCiAgc3RydWN0IG5vdGhyb3dfdCB7IH07 CiAgZXh0ZXJuIGNvbnN0IG5vdGhyb3dfdCBub3Rocm93OwogIHR5cGVkZWYgdm9pZCAoKm5ld19o YW5kbGVyKSgpOwogIG5ld19oYW5kbGVyIHNldF9uZXdfaGFuZGxlcihuZXdfaGFuZGxlcik7Cn0K Cgp2b2lkICpvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QpIHRocm93IChzdGQ6OmJhZF9hbGxvYyk7 CnZvaWQgKm9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxsb2Mp Owp2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkICopIHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVs ZXRlW10odm9pZCAqKSB0aHJvdygpOwp2b2lkICpvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIGNv bnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCAqb3BlcmF0b3IgbmV3W10oc3RkOjpz aXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxl dGUodm9pZCAqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3BlcmF0b3Ig ZGVsZXRlW10odm9pZCAqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CgoKaW5saW5l IHZvaWQgKm9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCwgdm9pZCAqcGxhY2UpIHRocm93KCkgeyBy ZXR1cm4gcGxhY2U7IH0KaW5saW5lIHZvaWQgKm9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90LCB2 b2lkICpwbGFjZSkgdGhyb3coKSB7IHJldHVybiBwbGFjZTsgfQp9CiMgNDcgIi91c3IvbG9jYWwv Z2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9z dGxfYWxnb2Jhc2UuaCIgMiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2 LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfaW9zZndkLmgiIDEgMwojIDM4 ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1 ZGUvZysrL2JpdHMvc3RkX2lvc2Z3ZC5oIiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2Nj LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvaTY4Ni1wYy1saW51eC1nbnUv Yml0cy9jKytjb25maWcuaCIgMSAzCiMgNDAgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfaW9zZndkLmgiIDIgMwoj IDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5j bHVkZS9nKysvYml0cy9zdHJpbmdmd2QuaCIgMSAzCiMgMzggIi91c3IvbG9jYWwvZ2NjMy9saWIv Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdHJpbmdmd2Qu aCIgMwoKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv My4wL2luY2x1ZGUvZysrL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDEgMwoj IDQwICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu Y2x1ZGUvZysrL2JpdHMvc3RyaW5nZndkLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxh dGU8Y2xhc3MgX0NoYXJUPgogICAgc3RydWN0IGNoYXJfdHJhaXRzOwoKICB0ZW1wbGF0ZTw+IGNs YXNzIGNoYXJfdHJhaXRzPGNoYXI+OwoKICB0ZW1wbGF0ZTw+IGNsYXNzIGNoYXJfdHJhaXRzPHdj aGFyX3Q+OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgYWxsb2NhdG9y OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3Ry YWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hh clQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmluZzsKCiAgdHlwZWRlZiBiYXNpY19zdHJpbmc8Y2hh cj4gc3RyaW5nOwoKICB0eXBlZGVmIGJhc2ljX3N0cmluZzx3Y2hhcl90PiB3c3RyaW5nOwoKfQoj IDQxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu Y2x1ZGUvZysrL2JpdHMvc3RkX2lvc2Z3ZC5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGli L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvZnBvcy5oIiAx IDMKIyAzOCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu MC9pbmNsdWRlL2crKy9iaXRzL2Zwb3MuaCIgMwoKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2dj Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2k2ODYtcGMtbGludXgtZ251 L2JpdHMvYysraW8uaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2 LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytp by5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUv c3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyOCAiL3Vzci9p bmNsdWRlL3N0ZGlvLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCiMgMSAiL3Vzci9sb2NhbC9nY2Mz L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMK IyAzNCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgoKIyAxICIvdXNyL2xvY2FsL2djYzMv bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwoj IDQzICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu Y2x1ZGUvc3RkYXJnLmgiIDMKdHlwZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2dudWNfdmFfbGlz dDsKIyAxMTAgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z LjAvaW5jbHVkZS9zdGRhcmcuaCIgMwp0eXBlZGVmIF9fZ251Y192YV9saXN0IHZhX2xpc3Q7CiMg MzkgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlw ZXMuaCIgMSAzCiMgNDEgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKCgoKCnR5cGVkZWYg c3RydWN0IF9JT19GSUxFIEZJTEU7CiMgNTcgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAi L3Vzci9pbmNsdWRlL2xpYmlvLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwoj IDEgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMSAzCiMgOSAiL3Vzci9pbmNsdWRlL19HX2Nv bmZpZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMTAgIi91c3Iv aW5jbHVkZS9fR19jb25maWcuaCIgMiAzCgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2Nj LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzEyICIv dXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUv c3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgd2ludF90OwojIDE1ICIvdXNyL2luY2x1 ZGUvX0dfY29uZmlnLmgiIDIgMwojIDM1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKdHlw ZWRlZiBpbnQgX0dfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsK dHlwZWRlZiBpbnQgX0dfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykp KTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9k ZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQzMl90IF9fYXR0cmli dXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwojIDMxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIg MiAzCiMgNDggIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xp Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyA0 OSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwojIDE1NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgi IDMKc3RydWN0IF9JT19qdW1wX3Q7IHN0cnVjdCBfSU9fRklMRTsKCgoKCiMgMSAiL3Vzci9pbmNs dWRlL2JpdHMvc3RkaW8tbG9jay5oIiAxIDMKIyAyMCAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW8t bG9jay5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMSAzCiMgMTggIi91c3IvaW5j bHVkZS9wdGhyZWFkLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMTkg Ii91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIg MSAzCiMgMjMgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1 cmVzLmgiIDEgMwojIDI0ICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMiAzCgoKIyAxICIvdXNyL2lu Y2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDIgMwoK CiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9zY2hlZC5o IiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMwojIDQ3ICIvdXNyL2lu Y2x1ZGUvYml0cy9zY2hlZC5oIiAzCnN0cnVjdCBzY2hlZF9wYXJhbQogIHsKICAgIGludCBzY2hl ZF9wcmlvcml0eTsKICB9OwoKZXh0ZXJuICJDIiB7CgoKCmV4dGVybiBpbnQgY2xvbmUgKGludCAo Kl9fZm4pICh2b2lkICpfX2FyZyksIHZvaWQgKl9fY2hpbGRfc3RhY2ssIGludCBfX2ZsYWdzLCB2 b2lkICpfX2FyZykgdGhyb3cgKCk7CgoKCn0KIyAzMyAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDIg MwoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGludCBfX3NjaGVkX3NldHBhcmFtIChfX3BpZF90IF9f cGlkLCBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgpleHRl cm4gaW50IHNjaGVkX3NldHBhcmFtIChfX3BpZF90IF9fcGlkLCBfX2NvbnN0IHN0cnVjdCBzY2hl ZF9wYXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19zY2hlZF9nZXRwYXJh bSAoX19waWRfdCBfX3BpZCwgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSB0aHJvdyAoKTsK ZXh0ZXJuIGludCBzY2hlZF9nZXRwYXJhbSAoX19waWRfdCBfX3BpZCwgc3RydWN0IHNjaGVkX3Bh cmFtICpfX3BhcmFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9fc2NoZWRfc2V0c2NoZWR1bGVy IChfX3BpZF90IF9fcGlkLCBpbnQgX19wb2xpY3ksIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFt ICpfX3BhcmFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2NoZWRfc2V0c2NoZWR1bGVyIChfX3Bp ZF90IF9fcGlkLCBpbnQgX19wb2xpY3ksIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3Bh cmFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX3NjaGVkX2dldHNjaGVkdWxlciAoX19waWRf dCBfX3BpZCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgc2NoZWRfZ2V0c2NoZWR1bGVyIChfX3BpZF90 IF9fcGlkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9fc2NoZWRfeWllbGQgKHZvaWQpIHRocm93 ICgpOwpleHRlcm4gaW50IHNjaGVkX3lpZWxkICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IF9fc2NoZWRfZ2V0X3ByaW9yaXR5X21heCAoaW50IF9fYWxnb3JpdGhtKSB0aHJvdyAoKTsKZXh0 ZXJuIGludCBzY2hlZF9nZXRfcHJpb3JpdHlfbWF4IChpbnQgX19hbGdvcml0aG0pIHRocm93ICgp OwoKCmV4dGVybiBpbnQgX19zY2hlZF9nZXRfcHJpb3JpdHlfbWluIChpbnQgX19hbGdvcml0aG0p IHRocm93ICgpOwpleHRlcm4gaW50IHNjaGVkX2dldF9wcmlvcml0eV9taW4gKGludCBfX2FsZ29y aXRobSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3NjaGVkX3JyX2dldF9pbnRlcnZhbCAoX19w aWRfdCBfX3BpZCwgc3RydWN0IHRpbWVzcGVjICpfX3QpIHRocm93ICgpOwpleHRlcm4gaW50IHNj aGVkX3JyX2dldF9pbnRlcnZhbCAoX19waWRfdCBfX3BpZCwgc3RydWN0IHRpbWVzcGVjICpfX3Qp IHRocm93ICgpOwoKfQojIDIxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKIyAxICIvdXNy L2luY2x1ZGUvdGltZS5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAz CgpleHRlcm4gIkMiIHsKCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2 ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzOSAiL3Vzci9pbmNs dWRlL3RpbWUuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAxIDMKIyA0 MyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCiMgOTUgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMK c3RydWN0IHRtCnsKICBpbnQgdG1fc2VjOwogIGludCB0bV9taW47CiAgaW50IHRtX2hvdXI7CiAg aW50IHRtX21kYXk7CiAgaW50IHRtX21vbjsKICBpbnQgdG1feWVhcjsKICBpbnQgdG1fd2RheTsK ICBpbnQgdG1feWRheTsKICBpbnQgdG1faXNkc3Q7CgoKICBsb25nIGludCB0bV9nbXRvZmY7CiAg X19jb25zdCBjaGFyICp0bV96b25lOwoKCgoKfTsKCgoKCmV4dGVybiBjbG9ja190IGNsb2NrICh2 b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdGltZV90IHRpbWUgKHRpbWVfdCAqX190aW1lcikgdGhy b3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBkaWZmdGltZSAodGltZV90IF9fdGltZTEsIHRpbWVfdCBf X3RpbWUwKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRl cm4gdGltZV90IG1rdGltZSAoc3RydWN0IHRtICpfX3RwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g c2l6ZV90IHN0cmZ0aW1lIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4c2l6ZSwg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2NvbnN0IHN0cnVjdCB0bSAqX19y ZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKnN0cnB0aW1lIChfX2Nv bnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2ZtdCwgc3RydWN0IHRtICpfX3RwKSB0aHJv dyAoKTsKCgoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lIChfX2NvbnN0IHRpbWVfdCAqX190 aW1lcikgdGhyb3cgKCk7CgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2FsdGltZSAoX19jb25zdCB0 aW1lX3QgKl9fdGltZXIpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqX19nbXRpbWVf ciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwgc3RydWN0IHRtICpfX3Jlc3Ry aWN0IF9fdHApIHRocm93ICgpOwoKZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lX3IgKF9fY29uc3Qg dGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsIHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0 aHJvdyAoKTsKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2FsdGltZV9yIChfX2NvbnN0IHRpbWVf dCAqX19yZXN0cmljdCBfX3RpbWVyLCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgdGhyb3cg KCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmFzY3RpbWUgKF9fY29uc3Qgc3RydWN0IHRtICpfX3RwKSB0 aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqY3RpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSB0 aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmFzY3RpbWVfciAoX19jb25zdCBzdHJ1Y3QgdG0g Kl9fcmVzdHJpY3QgX190cCwgY2hhciAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCmV4 dGVybiBjaGFyICpjdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLCBj aGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqX190em5h bWVbMl07CmV4dGVybiBpbnQgX19kYXlsaWdodDsKZXh0ZXJuIGxvbmcgaW50IF9fdGltZXpvbmU7 CgoKCgpleHRlcm4gY2hhciAqdHpuYW1lWzJdOwoKCgpleHRlcm4gdm9pZCB0enNldCAodm9pZCkg dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZGF5bGlnaHQ7CmV4dGVybiBsb25nIGludCB0aW1lem9u ZTsKCgoKCgpleHRlcm4gaW50IHN0aW1lIChfX2NvbnN0IHRpbWVfdCAqX193aGVuKSB0aHJvdyAo KTsKIyAyMjggIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJuIHRpbWVfdCB0aW1lZ20gKHN0 cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHRpbWVfdCB0aW1lbG9jYWwgKHN0cnVj dCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBkeXNpemUgKGludCBfX3llYXIpIHRo cm93ICgpOwoKCgoKCmV4dGVybiBpbnQgbmFub3NsZWVwIChfX2NvbnN0IHN0cnVjdCB0aW1lc3Bl YyAqX19yZXF1ZXN0ZWRfdGltZSwgc3RydWN0IHRpbWVzcGVjICpfX3JlbWFpbmluZykgdGhyb3cg KCk7CiMgMjU3ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiBpbnQgZ2V0ZGF0ZV9lcnI7 CgoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqZ2V0ZGF0ZSAoX19jb25zdCBjaGFyICpfX3N0cmluZykg dGhyb3cgKCk7CiMgMjcyICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiBpbnQgZ2V0ZGF0 ZV9yIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zdHJpbmcsIHN0cnVjdCB0bSAqX19yZXN0 cmljdCBfX3Jlc2J1ZnApIHRocm93ICgpOwoKCgoKfQojIDIyICIvdXNyL2luY2x1ZGUvcHRocmVh ZC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMSAzCiMgMjkgIi91c3IvaW5j bHVkZS9zaWduYWwuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAzMCAi L3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAyIDMKCmV4dGVybiAiQyIgewoKIyAxICIvdXNyL2luY2x1 ZGUvYml0cy9zaWdzZXQuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMiAzCiMg NDkgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMwp0eXBlZGVmIF9fc2lnc2V0X3Qgc2lnc2V0X3Q7 CiMgMzYyICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMKfQojIDI1ICIvdXNyL2luY2x1ZGUvcHRo cmVhZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMSAzCiMg MjYgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwoKCmV4dGVybiAiQyIgewojIDQ5ICIvdXNy L2luY2x1ZGUvcHRocmVhZC5oIiAzCmVudW0KewogIFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFLAoK ICBQVEhSRUFEX0NSRUFURV9ERVRBQ0hFRAoKfTsKCmVudW0KewogIFBUSFJFQURfSU5IRVJJVF9T Q0hFRCwKCiAgUFRIUkVBRF9FWFBMSUNJVF9TQ0hFRAoKfTsKCmVudW0KewogIFBUSFJFQURfU0NP UEVfU1lTVEVNLAoKICBQVEhSRUFEX1NDT1BFX1BST0NFU1MKCn07CgplbnVtCnsKICBQVEhSRUFE X01VVEVYX0ZBU1RfTlAsCiAgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVfTlAsCiAgUFRIUkVBRF9N VVRFWF9FUlJPUkNIRUNLX05QCgogICwKICBQVEhSRUFEX01VVEVYX05PUk1BTCA9IFBUSFJFQURf TVVURVhfRkFTVF9OUCwKICBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSA9IFBUSFJFQURfTVVURVhf UkVDVVJTSVZFX05QLAogIFBUSFJFQURfTVVURVhfRVJST1JDSEVDSyA9IFBUSFJFQURfTVVURVhf RVJST1JDSEVDS19OUCwKICBQVEhSRUFEX01VVEVYX0RFRkFVTFQgPSBQVEhSRUFEX01VVEVYX05P Uk1BTAoKfTsKCmVudW0KewogIFBUSFJFQURfUFJPQ0VTU19QUklWQVRFLAoKICBQVEhSRUFEX1BS T0NFU1NfU0hBUkVECgp9OwoKCmVudW0KewogIFBUSFJFQURfUldMT0NLX1BSRUZFUl9SRUFERVJf TlAsCiAgUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1dSSVRFUl9OUCwKICBQVEhSRUFEX1JXTE9DS19Q UkVGRVJfV1JJVEVSX05PTlJFQ1VSU0lWRV9OUCwKICBQVEhSRUFEX1JXTE9DS19ERUZBVUxUX05Q ID0gUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1dSSVRFUl9OUAp9OwoKCgoKCgpzdHJ1Y3QgX3B0aHJl YWRfY2xlYW51cF9idWZmZXIKewogIHZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICopOwogIHZvaWQg Kl9fYXJnOwogIGludCBfX2NhbmNlbHR5cGU7CiAgc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVm ZmVyICpfX3ByZXY7Cn07CgoKCmVudW0KewogIFBUSFJFQURfQ0FOQ0VMX0VOQUJMRSwKCiAgUFRI UkVBRF9DQU5DRUxfRElTQUJMRQoKfTsKZW51bQp7CiAgUFRIUkVBRF9DQU5DRUxfREVGRVJSRUQs CgogIFBUSFJFQURfQ0FOQ0VMX0FTWU5DSFJPTk9VUwoKfTsKIyAxNDEgIi91c3IvaW5jbHVkZS9w dGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX2NyZWF0ZSAocHRocmVhZF90ICpfX3RocmVh ZCwgX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCB2b2lkICooKl9fc3RhcnRfcm91dGlu ZSkgKHZvaWQgKiksIHZvaWQgKl9fYXJnKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gcHRocmVhZF90 IHB0aHJlYWRfc2VsZiAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2VxdWFs IChwdGhyZWFkX3QgX190aHJlYWQxLCBwdGhyZWFkX3QgX190aHJlYWQyKSB0aHJvdyAoKTsKCgpl eHRlcm4gdm9pZCBwdGhyZWFkX2V4aXQgKHZvaWQgKl9fcmV0dmFsKSB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfam9pbiAocHRo cmVhZF90IF9fdGgsIHZvaWQgKipfX3RocmVhZF9yZXR1cm4pIHRocm93ICgpOwoKCgoKCmV4dGVy biBpbnQgcHRocmVhZF9kZXRhY2ggKHB0aHJlYWRfdCBfX3RoKSB0aHJvdyAoKTsKCgoKCgoKCmV4 dGVybiBpbnQgcHRocmVhZF9hdHRyX2luaXQgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpIHRocm93 ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfYXR0cl90ICpf X2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRl IChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBpbnQgX19kZXRhY2hzdGF0ZSkgdGhyb3cgKCk7CgoK CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGRldGFjaHN0YXRlIChfX2NvbnN0IHB0aHJlYWRf YXR0cl90ICpfX2F0dHIsIGludCAqX19kZXRhY2hzdGF0ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBp bnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcGFyYW0gKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIF9f Y29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu dCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwYXJhbSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19h dHRyLCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50 IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBvbGljeSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50 IF9fcG9saWN5KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRw b2xpY3kgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50ICpfX3BvbGljeSkgdGhy b3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGluaGVyaXRzY2hlZCAocHRocmVh ZF9hdHRyX3QgKl9fYXR0ciwgaW50IF9faW5oZXJpdCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg cHRocmVhZF9hdHRyX2dldGluaGVyaXRzY2hlZCAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19h dHRyLCBpbnQgKl9faW5oZXJpdCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy X3NldHNjb3BlIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBpbnQgX19zY29wZSkgdGhyb3cgKCk7 CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NvcGUgKF9fY29uc3QgcHRocmVhZF9hdHRy X3QgKl9fYXR0ciwgaW50ICpfX3Njb3BlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgcHRocmVh ZF9hdHRyX3NldGd1YXJkc2l6ZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgc2l6ZV90IF9fZ3Vh cmRzaXplKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0Z3VhcmRzaXpl IChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIHNpemVfdCAqX19ndWFyZHNpemUpIHRo cm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2thZGRyIChwdGhy ZWFkX2F0dHJfdCAqX19hdHRyLCB2b2lkICpfX3N0YWNrYWRkcikgdGhyb3cgKCk7CgoKCmV4dGVy biBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrYWRkciAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAq X19hdHRyLCB2b2lkICoqX19zdGFja2FkZHIpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRo cmVhZF9hdHRyX3NldHN0YWNrc2l6ZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgc2l6ZV90IF9f c3RhY2tzaXplKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2tz aXplIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIHNpemVfdCAqX19zdGFja3NpemUp IHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0c2NoZWRwYXJhbSAocHRocmVh ZF90IF9fdGFyZ2V0X3RocmVhZCwgaW50IF9fcG9saWN5LCBfX2NvbnN0IHN0cnVjdCBzY2hlZF9w YXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9nZXRzY2hlZHBh cmFtIChwdGhyZWFkX3QgX190YXJnZXRfdGhyZWFkLCBpbnQgKl9fcG9saWN5LCBzdHJ1Y3Qgc2No ZWRfcGFyYW0gKl9fcGFyYW0pIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9nZXRj b25jdXJyZW5jeSAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNvbmN1 cnJlbmN5IChpbnQgX19sZXZlbCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgX19wdGhyZWFk X211dGV4X2luaXQgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCwgX19jb25zdCBwdGhyZWFkX211 dGV4YXR0cl90ICpfX211dGV4X2F0dHIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX211 dGV4X2luaXQgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCwgX19jb25zdCBwdGhyZWFkX211dGV4 YXR0cl90ICpfX211dGV4X2F0dHIpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9fcHRocmVhZF9t dXRleF9kZXN0cm95IChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwpleHRlcm4g aW50IHB0aHJlYWRfbXV0ZXhfZGVzdHJveSAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJv dyAoKTsKCgpleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleF90cnlsb2NrIChwdGhyZWFkX211dGV4 X3QgKl9fbXV0ZXgpIHRocm93ICgpOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayAo cHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9fcHRocmVh ZF9tdXRleF9sb2NrIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwpleHRlcm4g aW50IHB0aHJlYWRfbXV0ZXhfbG9jayAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAo KTsKCgpleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleF91bmxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAq X19tdXRleCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF91bmxvY2sgKHB0aHJl YWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgX19wdGhyZWFk X211dGV4YXR0cl9pbml0IChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwpl eHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9f YXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3B0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kg KHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHRocmVh ZF9tdXRleGF0dHJfZGVzdHJveSAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyKSB0aHJvdyAo KTsKCgoKCgpleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSAocHRocmVhZF9t dXRleGF0dHJfdCAqX19hdHRyLCBpbnQgX19raW5kKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRo cmVhZF9tdXRleGF0dHJfc2V0dHlwZSAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyLCBpbnQg X19raW5kKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9nZXR0eXBl IChfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0ciwgaW50ICpfX2tpbmQpIHRocm93 ICgpOwojIDMyMyAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRf Y29uZF9pbml0IChwdGhyZWFkX2NvbmRfdCAqX19jb25kLCBfX2NvbnN0IHB0aHJlYWRfY29uZGF0 dHJfdCAqX19jb25kX2F0dHIpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9k ZXN0cm95IChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0 aHJlYWRfY29uZF9zaWduYWwgKHB0aHJlYWRfY29uZF90ICpfX2NvbmQpIHRocm93ICgpOwoKCmV4 dGVybiBpbnQgcHRocmVhZF9jb25kX2Jyb2FkY2FzdCAocHRocmVhZF9jb25kX3QgKl9fY29uZCkg dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3dhaXQgKHB0aHJlYWRfY29uZF90 ICpfX2NvbmQsIHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVy biBpbnQgcHRocmVhZF9jb25kX3RpbWVkd2FpdCAocHRocmVhZF9jb25kX3QgKl9fY29uZCwgcHRo cmVhZF9tdXRleF90ICpfX211dGV4LCBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19hYnN0aW1l KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2luaXQgKHB0aHJl YWRfY29uZGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29u ZGF0dHJfZGVzdHJveSAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCgoK CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19pbml0IChwdGhyZWFkX3J3bG9ja190ICpfX3J3 bG9jaywgX19jb25zdCBwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgoK ZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19kZXN0cm95IChwdGhyZWFkX3J3bG9ja190ICpfX3J3 bG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19yZGxvY2sgKHB0aHJl YWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcnds b2NrX3RyeXJkbG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCmV4 dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfd3Jsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9j aykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190cnl3cmxvY2sgKHB0aHJl YWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcnds b2NrX3VubG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCgoKCmV4 dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2luaXQgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpf X2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2Rlc3Ryb3kg KHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo cmVhZF9yd2xvY2thdHRyX2dldHBzaGFyZWQgKF9fY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3Qg Kl9fYXR0ciwgaW50ICpfX3BzaGFyZWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFk X3J3bG9ja2F0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwgaW50 IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2dl dGtpbmRfbnAgKF9fY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwgaW50ICpfX3By ZWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfc2V0a2luZF9u cCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwgaW50IF9fcHJlZikgdGhyb3cgKCk7CiMg NDIwICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgX19wdGhyZWFkX2tleV9j cmVhdGUgKHB0aHJlYWRfa2V5X3QgKl9fa2V5LCB2b2lkICgqX19kZXN0cl9mdW5jdGlvbikgKHZv aWQgKikpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2tleV9jcmVhdGUgKHB0aHJlYWRf a2V5X3QgKl9fa2V5LCB2b2lkICgqX19kZXN0cl9mdW5jdGlvbikgKHZvaWQgKikpIHRocm93ICgp OwoKCgpleHRlcm4gaW50IHB0aHJlYWRfa2V5X2RlbGV0ZSAocHRocmVhZF9rZXlfdCBfX2tleSkg dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3B0aHJlYWRfc2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5 X3QgX19rZXksIF9fY29uc3Qgdm9pZCAqX19wb2ludGVyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQg cHRocmVhZF9zZXRzcGVjaWZpYyAocHRocmVhZF9rZXlfdCBfX2tleSwgX19jb25zdCB2b2lkICpf X3BvaW50ZXIpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCAqX19wdGhyZWFkX2dldHNwZWNpZmlj IChwdGhyZWFkX2tleV90IF9fa2V5KSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgKnB0aHJlYWRfZ2V0 c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3QgX19rZXkpIHRocm93ICgpOwojIDQ0NSAiL3Vzci9pbmNs dWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IF9fcHRocmVhZF9vbmNlIChwdGhyZWFkX29uY2Vf dCAqX19vbmNlX2NvbnRyb2wsIHZvaWQgKCpfX2luaXRfcm91dGluZSkgKHZvaWQpKSB0aHJvdyAo KTsKCmV4dGVybiBpbnQgcHRocmVhZF9vbmNlIChwdGhyZWFkX29uY2VfdCAqX19vbmNlX2NvbnRy b2wsIHZvaWQgKCpfX2luaXRfcm91dGluZSkgKHZvaWQpKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVy biBpbnQgcHRocmVhZF9zZXRjYW5jZWxzdGF0ZSAoaW50IF9fc3RhdGUsIGludCAqX19vbGRzdGF0 ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRjYW5jZWx0eXBlIChpbnQgX190 eXBlLCBpbnQgKl9fb2xkdHlwZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NhbmNl bCAocHRocmVhZF90IF9fdGhyZWFkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHB0aHJlYWRf dGVzdGNhbmNlbCAodm9pZCkgdGhyb3cgKCk7CiMgNDgxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5o IiAzCmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcHVzaCAoc3RydWN0IF9wdGhyZWFkX2Ns ZWFudXBfYnVmZmVyICpfX2J1ZmZlciwgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQgKiksIHZvaWQg Kl9fYXJnKSB0aHJvdyAoKTsKIyA0OTEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJu IHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3AgKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZl ciAqX19idWZmZXIsIGludCBfX2V4ZWN1dGUpIHRocm93ICgpOwojIDUwMiAiL3Vzci9pbmNsdWRl L3B0aHJlYWQuaCIgMwpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3B1c2hfZGVmZXIgKHN0 cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsIHZvaWQgKCpfX3JvdXRpbmUp ICh2b2lkICopLCB2b2lkICpfX2FyZykgdGhyb3cgKCk7CiMgNTEzICIvdXNyL2luY2x1ZGUvcHRo cmVhZC5oIiAzCmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcG9wX3Jlc3RvcmUgKHN0cnVj dCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsIGludCBfX2V4ZWN1dGUpIHRocm93 ICgpOwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWd0aHJlYWQuaCIgMSAzCiMgMzEgIi91 c3IvaW5jbHVkZS9iaXRzL3NpZ3RocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9zaWdtYXNr IChpbnQgX19ob3csIF9fY29uc3QgX19zaWdzZXRfdCAqX19uZXdtYXNrLCBfX3NpZ3NldF90ICpf X29sZG1hc2spIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfa2lsbCAocHRocmVhZF90 IF9fdGhyZWFkLCBpbnQgX19zaWdubykgdGhyb3cgKCk7CiMgNTE5ICIvdXNyL2luY2x1ZGUvcHRo cmVhZC5oIiAyIDMKIyA1MzQgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIGludCBf X3B0aHJlYWRfYXRmb3JrICh2b2lkICgqX19wcmVwYXJlKSAodm9pZCksIHZvaWQgKCpfX3BhcmVu dCkgKHZvaWQpLCB2b2lkICgqX19jaGlsZCkgKHZvaWQpKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IHB0aHJlYWRfYXRmb3JrICh2b2lkICgqX19wcmVwYXJlKSAodm9pZCksIHZvaWQgKCpfX3BhcmVu dCkgKHZvaWQpLCB2b2lkICgqX19jaGlsZCkgKHZvaWQpKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJu IHZvaWQgcHRocmVhZF9raWxsX290aGVyX3RocmVhZHNfbnAgKHZvaWQpIHRocm93ICgpOwoKCgpl eHRlcm4gdm9pZCBfX3B0aHJlYWRfaW5pdGlhbGl6ZSAodm9pZCkgdGhyb3cgKCk7Cgp9CiMgMjEg Ii91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvLWxvY2suaCIgMiAzCgp0eXBlZGVmIHB0aHJlYWRfbXV0 ZXhfdCBfSU9fbG9ja190OwojIDE2MCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwojIDE3MCAi L3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKc3RydWN0IF9JT19tYXJrZXIgewogIHN0cnVjdCBfSU9f bWFya2VyICpfbmV4dDsKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOwoKCgogIGludCBfcG9zOwoj IDE4NyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKfTsKCnN0cnVjdCBfSU9fRklMRSB7CiAgaW50 IF9mbGFnczsKCgoKCiAgY2hhciogX0lPX3JlYWRfcHRyOwogIGNoYXIqIF9JT19yZWFkX2VuZDsK ICBjaGFyKiBfSU9fcmVhZF9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9iYXNlOwogIGNoYXIqIF9J T193cml0ZV9wdHI7CiAgY2hhciogX0lPX3dyaXRlX2VuZDsKICBjaGFyKiBfSU9fYnVmX2Jhc2U7 CiAgY2hhciogX0lPX2J1Zl9lbmQ7CgogIGNoYXIgKl9JT19zYXZlX2Jhc2U7CiAgY2hhciAqX0lP X2JhY2t1cF9iYXNlOwogIGNoYXIgKl9JT19zYXZlX2VuZDsKCiAgc3RydWN0IF9JT19tYXJrZXIg Kl9tYXJrZXJzOwoKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9jaGFpbjsKCiAgaW50IF9maWxlbm87CiAg aW50IF9ibGtzaXplOwogIF9fb2ZmX3QgX29sZF9vZmZzZXQ7CgoKCiAgdW5zaWduZWQgc2hvcnQg X2N1cl9jb2x1bW47CiAgc2lnbmVkIGNoYXIgX3Z0YWJsZV9vZmZzZXQ7CiAgY2hhciBfc2hvcnRi dWZbMV07CgoKCiAgX0lPX2xvY2tfdCAqX2xvY2s7CiMgMjMzICIvdXNyL2luY2x1ZGUvbGliaW8u aCIgMwogIF9fb2ZmNjRfdCBfb2Zmc2V0OwoKICBpbnQgX3VudXNlZDJbMTZdOwoKfTsKCgoKCgpz dHJ1Y3QgX0lPX0ZJTEVfcGx1czsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFf c3RkaW5fOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRvdXRfOwpleHRl cm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRlcnJfOwojIDI2MiAiL3Vzci9pbmNs dWRlL2xpYmlvLmgiIDMKdHlwZWRlZiBfX3NzaXplX3QgX19pb19yZWFkX2ZuICh2b2lkICogX19j b29raWUsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMpOwojIDI3MSAiL3Vzci9pbmNsdWRl L2xpYmlvLmgiIDMKdHlwZWRlZiBfX3NzaXplX3QgX19pb193cml0ZV9mbiAodm9pZCAqIF9fY29v a2llLCBfX2NvbnN0IGNoYXIgKl9fYnVmLCBzaXplX3QgX19uKTsKIyAyODAgIi91c3IvaW5jbHVk ZS9saWJpby5oIiAzCnR5cGVkZWYgaW50IF9faW9fc2Vla19mbiAodm9pZCAqIF9fY29va2llLCBf X29mZl90IF9fcG9zLCBpbnQgX193KTsKCgp0eXBlZGVmIGludCBfX2lvX2Nsb3NlX2ZuICh2b2lk ICogX19jb29raWUpOwoKCgoKdHlwZWRlZiBfX2lvX3JlYWRfZm4gY29va2llX3JlYWRfZnVuY3Rp b25fdDsKdHlwZWRlZiBfX2lvX3dyaXRlX2ZuIGNvb2tpZV93cml0ZV9mdW5jdGlvbl90Owp0eXBl ZGVmIF9faW9fc2Vla19mbiBjb29raWVfc2Vla19mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fY2xv c2VfZm4gY29va2llX2Nsb3NlX2Z1bmN0aW9uX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QKewogIF9faW9f cmVhZF9mbiAqcmVhZDsKICBfX2lvX3dyaXRlX2ZuICp3cml0ZTsKICBfX2lvX3NlZWtfZm4gKnNl ZWs7CiAgX19pb19jbG9zZV9mbiAqY2xvc2U7Cn0gX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdDsK dHlwZWRlZiBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IGNvb2tpZV9pb19mdW5jdGlvbnNfdDsK CgpzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlCnsKICBzdHJ1Y3QgX0lPX0ZJTEUgX19maWxlOwogIGNv bnN0IHZvaWQgKl9fdnRhYmxlOwogIHZvaWQgKl9fY29va2llOwogIF9JT19jb29raWVfaW9fZnVu Y3Rpb25zX3QgX19pb19mdW5jdGlvbnM7Cn07CgoKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50 IF9fdW5kZXJmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX3VmbG93IChf SU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX292ZXJmbG93IChfSU9fRklMRSAqLCBp bnQpIHRocm93ICgpOwojIDMzNyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBf SU9fZ2V0YyAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19wdXRjIChp bnQgX19jLCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2Zlb2YgKF9J T19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVycm9yIChfSU9fRklMRSAq X19mcCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2NrZWQgKF9JT19GSUxFICpf X2ZwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlIChfSU9fRklMRSAq KSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJv dyAoKTsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsK IyAzNjMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX3Zmc2NhbmYgKF9J T19GSUxFICogX19yZXN0cmljdCwgY29uc3QgY2hhciAqIF9fcmVzdHJpY3QsIF9fZ251Y192YV9s aXN0LCBpbnQgKl9fcmVzdHJpY3QpIHRocm93ICgpOwoKZXh0ZXJuIGludCBfSU9fdmZwcmludGYg KF9JT19GSUxFICpfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0LCBfX2dudWNfdmFf bGlzdCkgdGhyb3cgKCk7CgpleHRlcm4gX19zc2l6ZV90IF9JT19wYWRuIChfSU9fRklMRSAqLCBp bnQsIF9fc3NpemVfdCkgdGhyb3cgKCk7CmV4dGVybiBzaXplX3QgX0lPX3NnZXRuIChfSU9fRklM RSAqLCB2b2lkICosIHNpemVfdCkgdGhyb3cgKCk7CgpleHRlcm4gX19vZmY2NF90IF9JT19zZWVr b2ZmIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCwgaW50KSB0aHJvdyAoKTsKZXh0ZXJuIF9f b2ZmNjRfdCBfSU9fc2Vla3BvcyAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQpIHRocm93ICgp OwoKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfYmFja3VwX2FyZWEgKF9JT19GSUxFICopIHRocm93ICgp OwoKCn0KIyA1OCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgp0eXBlZGVmIF9fb2ZmX3Qg ZnBvc190OwoKCgoKdHlwZWRlZiBfX29mZjY0X3QgZnBvczY0X3Q7CiMgMTEwICIvdXNyL2luY2x1 ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMKIyAx MTEgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKZXh0ZXJuIEZJTEUgKnN0ZGluOwpleHRl cm4gRklMRSAqc3Rkb3V0OwpleHRlcm4gRklMRSAqc3RkZXJyOwoKCgoKCgoKZXh0ZXJuIGludCBy ZW1vdmUgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHJl bmFtZSAoX19jb25zdCBjaGFyICpfX29sZCwgX19jb25zdCBjaGFyICpfX25ldykgdGhyb3cgKCk7 CgoKCgpleHRlcm4gRklMRSAqdG1wZmlsZSAodm9pZCkgdGhyb3cgKCk7CiMgMTQwICIvdXNyL2lu Y2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gRklMRSAqdG1wZmlsZTY0ICh2b2lkKSB0aHJvdyAoKTsK CgpleHRlcm4gY2hhciAqdG1wbmFtIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNo YXIgKnRtcG5hbV9yIChjaGFyICpfX3MpIHRocm93ICgpOwojIDE2MCAiL3Vzci9pbmNsdWRlL3N0 ZGlvLmgiIDMKZXh0ZXJuIGNoYXIgKnRlbXBuYW0gKF9fY29uc3QgY2hhciAqX19kaXIsIF9fY29u c3QgY2hhciAqX19wZngpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmY2xvc2UgKEZJTEUgKl9f c3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmZsdXNoIChGSUxFICpfX3N0cmVhbSkgdGhy b3cgKCk7CgoKCmV4dGVybiBpbnQgZmZsdXNoX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhy b3cgKCk7CgoKCgpleHRlcm4gaW50IGZjbG9zZWFsbCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKZXh0 ZXJuIEZJTEUgKmZvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwgX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIHRocm93ICgpOwoKCmV4dGVybiBGSUxFICpm cmVvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwgX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fbW9kZXMsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgp OwojIDIwMyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIEZJTEUgKmZvcGVuNjQgKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19tb2RlcykgdGhyb3cgKCk7CgpleHRlcm4gRklMRSAqZnJlb3BlbjY0IChfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9k ZXMsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gRklM RSAqZmRvcGVuIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgoK CgpleHRlcm4gRklMRSAqZm9wZW5jb29raWUgKHZvaWQgKl9fcmVzdHJpY3QgX19tYWdpY19jb29r aWUsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLCBfSU9fY29va2llX2lvX2Z1bmN0 aW9uc190IF9faW9fZnVuY3MpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gRklMRSAqb3Blbl9tZW1z dHJlYW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fYnVmbG9jLCBzaXplX3QgKl9fcmVzdHJpY3QgX19z aXplbG9jKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmIChGSUxFICpfX3Jlc3Ry aWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKZXh0ZXJu IGludCBzZXR2YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0 IF9fYnVmLCBpbnQgX19tb2Rlcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZv aWQgc2V0YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0 IF9fYnVmLCBzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgc2V0bGluZWJ1 ZiAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHJpbnRmIChGSUxF ICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQs IC4uLikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3ByaW50ZiAoY2hhciAq X19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3MsIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRo cm93ICgpOwoKCgpleHRlcm4gaW50IHZwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdnNw cmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m b3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHNu cHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLCBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCkKCiAgICAgX19hdHRyaWJ1dGVf XyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDQpKSk7CgpleHRlcm4gaW50IF9fdnNucHJp bnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLCBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKQoKCiAg ICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDApKSk7CmV4dGVy biBpbnQgdnNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLCBf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKSB0 aHJvdyAoKQoKCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMs IDApKSk7CgoKCgoKZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRy LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mLCBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhy b3cgKCkKCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDAp KSk7CmV4dGVybiBpbnQgX19hc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsIF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKSB0aHJvdyAoKQoKICAgICBfX2F0dHJpYnV0 ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKZXh0ZXJuIGludCBhc3ByaW50 ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zt dCwgLi4uKSB0aHJvdyAoKQoKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmlu dGZfXywgMiwgMykpKTsKCgpleHRlcm4gaW50IHZkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fZm10LCBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCkKCiAg ICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7CmV4dGVy biBpbnQgZHByaW50ZiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwg Li4uKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9f LCAyLCAzKSkpOwoKCgoKZXh0ZXJuIGludCBmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl YW0sIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCgpl eHRlcm4gaW50IHNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikg dGhyb3cgKCk7CgpleHRlcm4gaW50IHNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f cywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKCgoK ZXh0ZXJuIGludCB2ZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCkKCgogICAg IF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSk7CgoKZXh0ZXJu IGludCB2c2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3Zh X2xpc3QgX19hcmcpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9f c2NhbmZfXywgMSwgMCkpKTsKCgpleHRlcm4gaW50IHZzc2NhbmYgKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3Zh X2xpc3QgX19hcmcpIHRocm93ICgpCgoKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAo X19zY2FuZl9fLCAyLCAwKSkpOwoKCgoKZXh0ZXJuIGludCBmZ2V0YyAoRklMRSAqX19zdHJlYW0p IHRocm93ICgpOwpleHRlcm4gaW50IGdldGMgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpl eHRlcm4gaW50IGdldGNoYXIgKHZvaWQpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBnZXRj X3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZ2V0Y2hhcl91 bmxvY2tlZCAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZnZXRjX3VubG9ja2VkIChG SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZwdXRjIChpbnQgX19jLCBG SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0YyAoaW50IF9fYywgRklMRSAq X19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHV0Y2hhciAoaW50IF9fYykgdGhyb3cg KCk7CgoKCgoKCgpleHRlcm4gaW50IGZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0 cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJ TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBwdXRjaGFyX3VubG9ja2VkIChpbnQg X19jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGdldHcgKEZJTEUgKl9fc3RyZWFtKSB0aHJv dyAoKTsKCgpleHRlcm4gaW50IHB1dHcgKGludCBfX3csIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo KTsKCgoKCmV4dGVybiBjaGFyICpmZ2V0cyAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBfX24s IEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmZn ZXRzX3VubG9ja2VkIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwgRklMRSAqX19yZXN0 cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmdldHMgKGNoYXIgKl9f cykgdGhyb3cgKCk7CiMgNDEzICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gX19zc2l6 ZV90IF9fZ2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwgc2l6ZV90ICpfX3Jl c3RyaWN0IF9fbiwgaW50IF9fZGVsaW1pdGVyLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0 aHJvdyAoKTsKCgpleHRlcm4gX19zc2l6ZV90IGdldGRlbGltIChjaGFyICoqX19yZXN0cmljdCBf X2xpbmVwdHIsIHNpemVfdCAqX19yZXN0cmljdCBfX24sIGludCBfX2RlbGltaXRlciwgRklMRSAq X19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gX19zc2l6ZV90IGdldGxp bmUgKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwg RklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgZnB1 dHMgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl YW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHV0c191bmxvY2tlZCAoX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fcywgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoK CgpleHRlcm4gaW50IHB1dHMgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKZXh0ZXJu IGludCB1bmdldGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJu IHNpemVfdCBmcmVhZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwgc2l6 ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHNp emVfdCBmd3JpdGUgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6 ZSwgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJu IHNpemVfdCBmcmVhZF91bmxvY2tlZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9f c2l6ZSwgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7Cgpl eHRlcm4gc2l6ZV90IGZ3cml0ZV91bmxvY2tlZCAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9f cHRyLCBzaXplX3QgX19zaXplLCBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFt KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBmc2VlayAoRklMRSAqX19zdHJlYW0sIGxvbmcg aW50IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgaW50IGZ0ZWxs IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCByZXdpbmQgKEZJTEUgKl9f c3RyZWFtKSB0aHJvdyAoKTsKIyA0OTMgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBp bnQgZnNlZWtvIChGSUxFICpfX3N0cmVhbSwgX19vZmZfdCBfX29mZiwgaW50IF9fd2hlbmNlKSB0 aHJvdyAoKTsKCmV4dGVybiBfX29mZl90IGZ0ZWxsbyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp OwoKCgpleHRlcm4gaW50IGZnZXRwb3MgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3Nf dCAqX19yZXN0cmljdCBfX3BvcykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBmc2V0cG9zIChGSUxF ICpfX3N0cmVhbSwgX19jb25zdCBmcG9zX3QgKl9fcG9zKSB0aHJvdyAoKTsKIyA1MjcgIi91c3Iv aW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgZnNlZWtvNjQgKEZJTEUgKl9fc3RyZWFtLCBf X29mZjY0X3QgX19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CmV4dGVybiBfX29mZjY0X3Qg ZnRlbGxvNjQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmdldHBvczY0 IChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBmcG9zNjRfdCAqX19yZXN0cmljdCBfX3Bvcykg dGhyb3cgKCk7CgpleHRlcm4gaW50IGZzZXRwb3M2NCAoRklMRSAqX19zdHJlYW0sIF9fY29uc3Qg ZnBvczY0X3QgKl9fcG9zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnIgKEZJTEUg Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmVvZiAoRklMRSAqX19zdHJlYW0pIHRo cm93ICgpOwoKZXh0ZXJuIGludCBmZXJyb3IgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoK ZXh0ZXJuIHZvaWQgY2xlYXJlcnJfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsK ZXh0ZXJuIGludCBmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVy biBpbnQgZmVycm9yX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRl cm4gdm9pZCBwZXJyb3IgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBp bnQgc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3Qgc3lzX2Vycmxpc3RbXTsK CgpleHRlcm4gaW50IF9zeXNfbmVycjsKZXh0ZXJuIF9fY29uc3QgY2hhciAqX19jb25zdCBfc3lz X2Vycmxpc3RbXTsKCgoKCgpleHRlcm4gaW50IGZpbGVubyAoRklMRSAqX19zdHJlYW0pIHRocm93 ICgpOwoKCgoKZXh0ZXJuIGludCBmaWxlbm9fdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJv dyAoKTsKCgoKCgoKZXh0ZXJuIEZJTEUgKnBvcGVuIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCwg X19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHBjbG9zZSAoRklM RSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpf X3MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpjdXNlcmlkIChjaGFyICpfX3MpIHRocm93 ICgpOwoKCgoKc3RydWN0IG9ic3RhY2s7CgoKZXh0ZXJuIGludCBvYnN0YWNrX3ByaW50ZiAoc3Ry dWN0IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IG9ic3RhY2tfdnByaW50ZiAo c3RydWN0IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJncykgdGhyb3cgKCk7CiMgNjE0ICIv dXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gdm9pZCBmbG9ja2ZpbGUgKEZJTEUgKl9fc3Ry ZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmdHJ5bG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFt KSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBmdW5sb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRo cm93ICgpOwojIDYzOCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKfQojIDM2ICIvdXNyL2xvY2Fs L2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2k2ODYt cGMtbGludXgtZ251L2JpdHMvYysraW8uaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9n Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNyAi L3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRl L2crKy9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2lvLmgiIDIgMwojIDEgIi91c3IvbG9jYWwv Z2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvaTY4Ni1w Yy1saW51eC1nbnUvYml0cy9jKyt0aHJlYWRzLmgiIDEgMwojIDQ4ICIvdXNyL2xvY2FsL2djYzMv bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2k2ODYtcGMtbGlu dXgtZ251L2JpdHMvYysrdGhyZWFkcy5oIiAzCm5hbWVzcGFjZSBzdGQgewoKICBzdHJ1Y3QgX19u dWxsX211dGV4dCB7IH07CiAgdHlwZWRlZiBfX251bGxfbXV0ZXh0IF9fbXV0ZXh0X3R5cGU7Cgp9 CiMgMzggIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAv aW5jbHVkZS9nKysvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytpby5oIiAyIDMKCm5hbWVzcGFj ZSBzdGQKewoKICB0eXBlZGVmIGxvbmcgc3RyZWFtb2ZmOwogIHR5cGVkZWYgcHRyZGlmZl90IHN0 cmVhbXNpemU7CgogIHR5cGVkZWYgcHRyZGlmZl90IHdzdHJlYW1zaXplOwoKICB0eXBlZGVmIGZw b3NfdCBfX2Nfc3RyZWFtcG9zOwoKCgoKICB0eXBlZGVmIGludCBfX2NfbG9jazsKCgoKCgogIHR5 cGVkZWYgRklMRSBfX2NfZmlsZV90eXBlOwoKCiAgc3RydWN0IF9faW9zX2ZsYWdzCiAgewogICAg dHlwZWRlZiBzaG9ydCBfX2ludF90eXBlOwoKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T X2Jvb2xhbHBoYSA9IDB4MDAwMTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2RlYyA9 IDB4MDAwMjsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2ZpeGVkID0gMHgwMDA0Owog ICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaGV4ID0gMHgwMDA4OwogICAgc3RhdGljIGNv bnN0IF9faW50X3R5cGUgX1NfaW50ZXJuYWwgPSAweDAwMTA7CiAgICBzdGF0aWMgY29uc3QgX19p bnRfdHlwZSBfU19sZWZ0ID0gMHgwMDIwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf b2N0ID0gMHgwMDQwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfcmlnaHQgPSAweDAw ODA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zY2llbnRpZmljID0gMHgwMTAwOwog ICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd2Jhc2UgPSAweDAyMDA7CiAgICBzdGF0 aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93cG9pbnQgPSAweDA0MDA7CiAgICBzdGF0aWMgY29u c3QgX19pbnRfdHlwZSBfU19zaG93cG9zID0gMHgwODAwOwogICAgc3RhdGljIGNvbnN0IF9faW50 X3R5cGUgX1Nfc2tpcHdzID0gMHgxMDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf dW5pdGJ1ZiA9IDB4MjAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3VwcGVyY2Fz ZSA9IDB4NDAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2FkanVzdGZpZWxkID0g MHgwMDIwIHwgMHgwMDgwIHwgMHgwMDEwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf YmFzZWZpZWxkID0gMHgwMDAyIHwgMHgwMDQwIHwgMHgwMDA4OwogICAgc3RhdGljIGNvbnN0IF9f aW50X3R5cGUgX1NfZmxvYXRmaWVsZCA9IDB4MDEwMCB8IDB4MDAwNDsKCgogICAgc3RhdGljIGNv bnN0IF9faW50X3R5cGUgX1NfYmFkYml0ID0gMHgwMTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90 eXBlIF9TX2VvZmJpdCA9IDB4MDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19mYWls Yml0ID0gMHgwNDsKCgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYXBwID0gMHgwMTsK ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2F0ZSA9IDB4MDI7CiAgICBzdGF0aWMgY29u c3QgX19pbnRfdHlwZSBfU19iaW4gPSAweDA0OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUg X1NfaW4gPSAweDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfb3V0ID0gMHgxMDsK ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3RydW5jID0gMHgyMDsKICB9Owp9CiMgNDAg Ii91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVk ZS9nKysvYml0cy9mcG9zLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3djaGFyLmgiIDEgMwoj IDM5ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu Y2x1ZGUvZysrL2JpdHMvc3RkX2N3Y2hhci5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9n Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9pNjg2LXBjLWxpbnV4LWdu dS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGli L2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jd2NoYXIuaCIgMiAz CiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9p bmNsdWRlL2crKy9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwojIDQxICIvdXNyL2xvY2FsL2djYzMv bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2N3 Y2hhci5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51 eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRpby5oIiAxIDMKIyAzOSAiL3Vzci9s b2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9i aXRzL3N0ZF9jc3RkaW8uaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2 LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytj b25maWcuaCIgMSAzCiMgNDAgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp bnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0ZGlvLmgiIDIgMwojIDEgIi91c3Iv bG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysv Yml0cy9zdGRfY3N0ZGFyZy5oIiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGli L2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jc3RkYXJnLmgiIDMK IyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu Y2x1ZGUvc3RkYXJnLmgiIDEgMwojIDQxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4 Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRhcmcuaCIgMiAzCgoK CgoKCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6dmFfbGlzdDsKfQojIDQxICIvdXNyL2xvY2Fs L2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMv c3RkX2NzdGRpby5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1w Yy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAzCiMgNDIg Ii91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVk ZS9nKysvYml0cy9zdGRfY3N0ZGlvLmgiIDIgMwojIDQ0ICIvdXNyL2xvY2FsL2djYzMvbGliL2dj Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRpby5o IiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDEgMwojIDQ1ICIvdXNyL2xvY2FsL2djYzMv bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2Nz dGRpby5oIiAyIDMKIyA5NCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu dXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jc3RkaW8uaCIgMwpuYW1lc3BhY2Ugc3Rk CnsKICB1c2luZyA6OkZJTEU7CiAgdXNpbmcgOjpmcG9zX3Q7CgogIGV4dGVybiAiQyIgaW50IHJl bW92ZShjb25zdCBjaGFyKik7CiAgZXh0ZXJuICJDIiBpbnQgcmVuYW1lKGNvbnN0IGNoYXIqLCBj b25zdCBjaGFyKik7CiAgZXh0ZXJuICJDIiBGSUxFKiB0bXBmaWxlKHZvaWQpOwogIGV4dGVybiAi QyIgY2hhciogdG1wbmFtKGNoYXIqKTsKICBleHRlcm4gIkMiIGludCBmY2xvc2UoRklMRSopOwog IGV4dGVybiAiQyIgaW50IGZmbHVzaChGSUxFKik7CiAgZXh0ZXJuICJDIiBGSUxFKiBmb3Blbihj b25zdCBjaGFyKiwgY29uc3QgY2hhciopOwogIGV4dGVybiAiQyIgRklMRSogZnJlb3Blbihjb25z dCBjaGFyKiwgY29uc3QgY2hhciosIEZJTEUqKTsKICBleHRlcm4gIkMiIHZvaWQgc2V0YnVmKEZJ TEUqLCBjaGFyKik7CiAgZXh0ZXJuICJDIiBpbnQgc2V0dmJ1ZihGSUxFKiwgY2hhciosIGludCwg c2l6ZV90KTsKICBleHRlcm4gIkMiIGludCBmcHJpbnRmKEZJTEUqLCBjb25zdCBjaGFyKiwgLi4u KTsKICBleHRlcm4gIkMiIGludCBmc2NhbmYoRklMRSosIGNvbnN0IGNoYXIqLCAuLi4pOwogIGV4 dGVybiAiQyIgaW50IHByaW50Zihjb25zdCBjaGFyKiwgLi4uKTsKICBleHRlcm4gIkMiIGludCBz Y2FuZihjb25zdCBjaGFyKiwgLi4uKTsKICBleHRlcm4gIkMiIGludCBzbnByaW50ZihjaGFyICos IHNpemVfdCwgY29uc3QgY2hhciosIC4uLik7CiAgZXh0ZXJuICJDIiBpbnQgc3ByaW50ZihjaGFy ICosIGNvbnN0IGNoYXIqLCAuLi4pOwogIGV4dGVybiAiQyIgaW50IHNzY2FuZihjb25zdCBjaGFy KiwgY29uc3QgY2hhciosIC4uLik7CiAgZXh0ZXJuICJDIiBpbnQgdmZwcmludGYoRklMRSosIGNv bnN0IGNoYXIqLCB2YV9saXN0KTsKICBleHRlcm4gIkMiIGludCB2ZnNjYW5mKEZJTEUqLCBjb25z dCBjaGFyKiwgdmFfbGlzdCk7CiAgZXh0ZXJuICJDIiBpbnQgdnByaW50Zihjb25zdCBjaGFyKiwg dmFfbGlzdCk7CiAgZXh0ZXJuICJDIiBpbnQgdnNjYW5mKGNvbnN0IGNoYXIqLCB2YV9saXN0KTsK ICBleHRlcm4gIkMiIGludCB2c25wcmludGYoY2hhciosIHNpemVfdCwgY29uc3QgY2hhciosIHZh X2xpc3QpOwogIGV4dGVybiAiQyIgaW50IHZzcHJpbnRmKGNoYXIqLCBjb25zdCBjaGFyKiwgdmFf bGlzdCk7CiAgZXh0ZXJuICJDIiBpbnQgdnNzY2FuZihjb25zdCBjaGFyKiwgY29uc3QgY2hhcios IHZhX2xpc3QpOwogIGV4dGVybiAiQyIgaW50IGZnZXRjKEZJTEUgKik7CiAgZXh0ZXJuICJDIiBj aGFyICpmZ2V0cyhjaGFyKiwgaW50LCBGSUxFKik7CiAgZXh0ZXJuICJDIiBpbnQgZnB1dGMoaW50 LCBGSUxFKik7CiAgZXh0ZXJuICJDIiBpbnQgZnB1dHMoY29uc3QgY2hhciosIEZJTEUqKTsKICBl eHRlcm4gIkMiIGludCBnZXRjKEZJTEUqKTsKICBleHRlcm4gIkMiIGludCBnZXRjaGFyKHZvaWQp OwogIGV4dGVybiAiQyIgY2hhciAqZ2V0cyhjaGFyKik7CiAgZXh0ZXJuICJDIiBpbnQgcHV0Yyhp bnQsIEZJTEUqKTsKICBleHRlcm4gIkMiIGludCBwdXRjaGFyKGludCk7CiAgZXh0ZXJuICJDIiBp bnQgcHV0cyhjb25zdCBjaGFyKik7CiAgZXh0ZXJuICJDIiBpbnQgdW5nZXRjKGludCwgRklMRSop OwogIGV4dGVybiAiQyIgc2l6ZV90IGZyZWFkKHZvaWQqLCBzaXplX3QsIHNpemVfdCwgRklMRSop OwogIGV4dGVybiAiQyIgc2l6ZV90IGZ3cml0ZShjb25zdCB2b2lkKiwgc2l6ZV90LCBzaXplX3Qs IEZJTEUqKTsKICBleHRlcm4gIkMiIGludCBmZ2V0cG9zKEZJTEUqLCBmcG9zX3QqKTsKICBleHRl cm4gIkMiIGludCBmc2VlayhGSUxFKiwgbG9uZyBpbnQsIGludCk7CiAgZXh0ZXJuICJDIiBpbnQg ZnNldHBvcyhGSUxFKiwgY29uc3QgZnBvc190Kik7CiAgZXh0ZXJuICJDIiBsb25nIGludCBmdGVs bChGSUxFKik7CiAgZXh0ZXJuICJDIiB2b2lkIHJld2luZChGSUxFKik7CiAgZXh0ZXJuICJDIiB2 b2lkIGNsZWFyZXJyKEZJTEUqKTsKICBleHRlcm4gIkMiIGludCBmZW9mKEZJTEUqKTsKICBleHRl cm4gIkMiIGludCBmZXJyb3IoRklMRSopOwogIGV4dGVybiAiQyIgdm9pZCBwZXJyb3IoY29uc3Qg Y2hhciopOwp9CiMgNDIgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4 LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3djaGFyLmgiIDIgMwojIDEgIi91c3IvbG9j YWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0 cy9zdGRfY3N0ZGFyZy5oIiAxIDMKIyA0MyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2 ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jd2NoYXIuaCIgMiAzCiMg NTMgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5j bHVkZS9nKysvYml0cy9zdGRfY3djaGFyLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg MSAzCiMgMjcgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1 cmVzLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCgoKCiMgMSAiL3Vzci9p bmNsdWRlL3N0ZGlvLmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCgoKCgoK CiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9p bmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzOSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDUz ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IGNvdW50Owog IHdpbnRfdCB2YWx1ZTsKfSBtYnN0YXRlX3Q7CiMgNzcgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAz CnN0cnVjdCB0bTsKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gd2NoYXJfdCAqd2NzY3B5ICh3Y2hh cl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3Jj KSB0aHJvdyAoKTsKCgpleHRlcm4gd2NoYXJfdCAqd2NzbmNweSAod2NoYXJfdCAqX19yZXN0cmlj dCBfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikg dGhyb3cgKCk7CgoKCmV4dGVybiB3Y2hhcl90ICp3Y3NjYXQgKHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19kZXN0LCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMpIHRocm93ICgpOwoKCmV4 dGVybiB3Y2hhcl90ICp3Y3NuY2F0ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25z dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIGludCB3Y3NjbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpf X3MyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgd2NzbmNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3Mx LCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJu IGludCB3Y3NjYXNlY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAq X19zMikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB3Y3NuY2FzZWNtcCAoX19jb25zdCB3Y2hhcl90 ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoK IyAxICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAxIDMKIyAxMTMgIi91c3IvaW5jbHVkZS93Y2hh ci5oIiAyIDMKCmV4dGVybiBpbnQgX193Y3NjYXNlY21wX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19z MSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgpl eHRlcm4gaW50IF9fd2NzbmNhc2VjbXBfbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0 IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24sIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoK CgoKCmV4dGVybiBpbnQgd2NzY29sbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdj aGFyX3QgKl9fczIpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc3hmcm0gKHdjaGFyX3Qg Kl9fcmVzdHJpY3QgX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVf dCBfX24pIHRocm93ICgpOwojIDEzNiAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKZXh0ZXJuIGlu dCBfX3djc2NvbGxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9f czIsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHNpemVfdCBfX3djc3hm cm1fbCAod2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLCBzaXplX3QgX19uLCBf X2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc2R1cCAoX19j b25zdCB3Y2hhcl90ICpfX3MpIHRocm93ICgpOwoKCgpleHRlcm4gd2NoYXJfdCAqX19nbGliY3Bw X3djc2NociAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgd2NoYXJfdCBfX3djKSB0aHJvdyAoKTsK CmV4dGVybiB3Y2hhcl90ICpfX2dsaWJjcHBfd2NzcmNociAoX19jb25zdCB3Y2hhcl90ICpfX3dj cywgd2NoYXJfdCBfX3djKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3Njc3BuIChfX2Nv bnN0IHdjaGFyX3QgKl9fd2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVqZWN0KSB0aHJvdyAoKTsK CgoKZXh0ZXJuIHNpemVfdCB3Y3NzcG4gKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIF9fY29uc3Qg d2NoYXJfdCAqX19hY2NlcHQpIHRocm93ICgpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3BicmsgKF9f Y29uc3Qgd2NoYXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19hY2NlcHQpIHRocm93ICgp OwoKCmV4dGVybiB3Y2hhcl90ICpfX2dsaWJjcHBfd2Nzc3RyIChfX2NvbnN0IHdjaGFyX3QgKl9f aGF5c3RhY2ssIF9fY29uc3Qgd2NoYXJfdCAqX19uZWVkbGUpIHRocm93ICgpOwojIDE3NCAiL3Vz ci9pbmNsdWRlL3djaGFyLmgiIDMKZXh0ZXJuIHdjaGFyX3QgKndjc3RvayAod2NoYXJfdCAqX19y ZXN0cmljdCBfX3MsIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2RlbGltLCB3Y2hhcl90 ICoqX19yZXN0cmljdCBfX3B0cikgdGhyb3cgKCk7CgoKCgpleHRlcm4gc2l6ZV90IF9fd2NzbGVu IChfX2NvbnN0IHdjaGFyX3QgKl9fcykgdGhyb3cgKCk7CmV4dGVybiBzaXplX3Qgd2NzbGVuIChf X2NvbnN0IHdjaGFyX3QgKl9fcykgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3Qgd2NzbmxlbiAo X19jb25zdCB3Y2hhcl90ICpfX3MsIHNpemVfdCBfX21heGxlbikgdGhyb3cgKCk7CgoKCgpleHRl cm4gd2NoYXJfdCAqX19nbGliY3BwX3dtZW1jaHIgKF9fY29uc3Qgd2NoYXJfdCAqX19zLCB3Y2hh cl90IF9fYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB3bWVtY21wIChfX2Nv bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0 IF9fczIsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gd2NoYXJfdCAqd21lbWNweSAo d2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19z Miwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gd2NoYXJfdCAqd21lbW1vdmUgKHdj aGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7 CgoKCmV4dGVybiB3Y2hhcl90ICp3bWVtc2V0ICh3Y2hhcl90ICpfX3MsIHdjaGFyX3QgX19jLCBz aXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB3aW50X3QgYnRvd2MgKGludCBfX2MpIHRo cm93ICgpOwoKCgpleHRlcm4gaW50IHdjdG9iICh3aW50X3QgX19jKSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIGludCBtYnNpbml0IChfX2NvbnN0IG1ic3RhdGVfdCAqX19wcykgdGhyb3cgKCk7CgoKCmV4 dGVybiBzaXplX3QgbWJydG93YyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3YywgX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwgbWJzdGF0ZV90ICpfX3ApIHRocm93ICgp OwoKCgoKZXh0ZXJuIHNpemVfdCB3Y3J0b21iIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgd2NoYXJf dCBfX3djLCBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKCmV4dGVybiBz aXplX3QgX19tYnJsZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24s IG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCmV4dGVybiBzaXplX3QgbWJy bGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLCBtYnN0YXRlX3Qg Kl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CiMgMjQ3ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg MwpleHRlcm4gc2l6ZV90IG1ic3J0b3djcyAod2NoYXJfdCAqX19yZXN0cmljdCBfX2RzdCwgX19j b25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbGVuLCBtYnN0YXRlX3QgKl9f cmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHNpemVfdCB3Y3NydG9tYnMgKGNo YXIgKl9fcmVzdHJpY3QgX19kc3QsIF9fY29uc3Qgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19zcmMs IHNpemVfdCBfX2xlbiwgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgoK CgoKZXh0ZXJuIHNpemVfdCBtYnNucnRvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZHN0LCBf X2NvbnN0IGNoYXIgKipfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19ubWMsIHNpemVfdCBfX2xl biwgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgoKCmV4dGVybiBzaXpl X3Qgd2NzbnJ0b21icyAoY2hhciAqX19yZXN0cmljdCBfX2RzdCwgX19jb25zdCB3Y2hhcl90ICoq X19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbndjLCBzaXplX3QgX19sZW4sIG1ic3RhdGVfdCAq X19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKIyAyNzcgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAz CmV4dGVybiBpbnQgd2N3aWR0aCAod2ludF90IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg d2Nzd2lkdGggKF9fY29uc3Qgd2NoYXJfdCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoK CgpleHRlcm4gZG91YmxlIHdjc3RvZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0 ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZs b2F0IHdjc3RvZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAq Kl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHdjc3Rv bGQgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3Ry aWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IHdjc3RvbCAoX19j b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19l bmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50 IHdjc3RvdWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKipf X3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCgoKCgoKX19leHRlbnNp b25fXwpleHRlcm4gbG9uZyBsb25nIGludCB3Y3N0b3EgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0 cmljdCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0 aHJvdyAoKTsKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQg d2NzdG91cSAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9f cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCgoKCgoKX19leHRlbnNp b25fXwpleHRlcm4gbG9uZyBsb25nIGludCB3Y3N0b2xsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVz dHJpY3QgX19ucHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkg dGhyb3cgKCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50 IHdjc3RvdWxsIChfX2NvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAq Kl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwojIDM1NSAiL3Vzci9p bmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAxIDMKIyAzNTYg Ii91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCgoKZXh0ZXJuIGxvbmcgaW50IF9fd2NzdG9sX2wg KF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fd2NzdG91bF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVz dHJpY3QgX19ucHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwg X19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcg bG9uZyBpbnQgX193Y3N0b2xsX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIs IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9f bG9jKSB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25n IGludCBfX3djc3RvdWxsX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsIHdj aGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9j KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZG91YmxlIF9fd2NzdG9kX2wgKF9fY29uc3Qgd2NoYXJf dCAqX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xv Y2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IF9fd2NzdG9mX2wgKF9fY29u c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5k cHRyLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIF9f d2NzdG9sZF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLCB3Y2hhcl90ICoq X19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCgoKCgpl eHRlcm4gZG91YmxlIF9fd2NzdG9kX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp Y3QgX19ucHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApIHRo cm93ICgpOwoKCmV4dGVybiBmbG9hdCBfX3djc3RvZl9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90 ICpfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBf X2dyb3VwKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgX193Y3N0b2xkX2ludGVybmFs IChfX2NvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0IF9fbnB0ciwgd2NoYXJfdCAqKl9fcmVzdHJp Y3QgX19lbmRwdHIsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBpbnQg X193Y3N0b2xfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsIHdj aGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhy b3cgKCk7CgoKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fd2NzdG91bF9pbnRlcm5hbCAo X19jb25zdCB3Y2hhcl90ICogX19yZXN0cmljdCBfX25wdHIsIHdjaGFyX3QgKiogX19yZXN0cmlj dCBfX2VuZHB0ciwgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKCgoKX19l eHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3djc3RvbGxfaW50ZXJuYWwgKF9fY29u c3Qgd2NoYXJfdCAqIF9fcmVzdHJpY3QgX19ucHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2Vu ZHB0ciwgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKCgpfX2V4dGVuc2lv bl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fd2NzdG91bGxfaW50ZXJuYWwgKF9f Y29uc3Qgd2NoYXJfdCAqIF9fcmVzdHJpY3QgX19ucHRyLCB3Y2hhcl90ICoqIF9fcmVzdHJpY3Qg X19lbmRwdHIsIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKIyA0ODIgIi91c3Iv aW5jbHVkZS93Y2hhci5oIiAzCmV4dGVybiB3Y2hhcl90ICp3Y3BjcHkgKHdjaGFyX3QgKl9fZGVz dCwgX19jb25zdCB3Y2hhcl90ICpfX3NyYykgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y2hhcl90ICp3 Y3BuY3B5ICh3Y2hhcl90ICpfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19zcmMsIHNpemVfdCBf X24pIHRocm93ICgpOwojIDUwMiAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKfQojIDU0ICIvdXNy L2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysr L2JpdHMvc3RkX2N3Y2hhci5oIiAyIDMKIyA2OCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGli L2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jd2NoYXIuaCIgMwpu YW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6Om1ic3RhdGVfdDsKfQojIDEyMCAiL3Vzci9sb2NhbC9n Y2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0 ZF9jd2NoYXIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OndpbnRfdDsKCiAgZXh0ZXJu ICJDIiB3aW50X3QgYnRvd2MoaW50KTsKICBleHRlcm4gIkMiIGludCB3Y3RvYih3aW50X3QpOwog IGV4dGVybiAiQyIgd2ludF90IGZnZXR3YyhGSUxFKik7CiAgZXh0ZXJuICJDIiB3Y2hhcl90KiBm Z2V0d3Mod2NoYXJfdCosIGludCwgRklMRSopOwogIGV4dGVybiAiQyIgd2ludF90IGZwdXR3Yyh3 Y2hhcl90LCBGSUxFKik7CiAgZXh0ZXJuICJDIiBpbnQgZnB1dHdzKGNvbnN0IHdjaGFyX3QqLCBG SUxFKik7CiAgZXh0ZXJuICJDIiBpbnQgZndpZGUoRklMRSosIGludCk7CiAgZXh0ZXJuICJDIiBp bnQgZndwcmludGYoRklMRSosIGNvbnN0IHdjaGFyX3QqLCAuLi4pOwogIGV4dGVybiAiQyIgaW50 IGZ3c2NhbmYoRklMRSosIGNvbnN0IHdjaGFyX3QqLCAuLi4pOwogIGV4dGVybiAiQyIgaW50IHN3 cHJpbnRmKHdjaGFyX3QqLCBzaXplX3QsIGNvbnN0IHdjaGFyX3QqLCAuLi4pOwogIGV4dGVybiAi QyIgaW50IHN3c2NhbmYoY29uc3Qgd2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqLCAuLi4pOwogIGV4 dGVybiAiQyIgaW50IHZmd3ByaW50ZihGSUxFKiwgY29uc3Qgd2NoYXJfdCosIHZhX2xpc3QpOwog IGV4dGVybiAiQyIgaW50IHZmd3NjYW5mKEZJTEUqLCBjb25zdCB3Y2hhcl90KiwgdmFfbGlzdCk7 CiAgZXh0ZXJuICJDIiBpbnQgdnN3cHJpbnRmKHdjaGFyX3QqLCBzaXplX3QsIGNvbnN0IHdjaGFy X3QqLCB2YV9saXN0KTsKICBleHRlcm4gIkMiIGludCB2c3dzY2FuZihjb25zdCB3Y2hhcl90Kiwg Y29uc3Qgd2NoYXJfdCosIHZhX2xpc3QpOwogIGV4dGVybiAiQyIgaW50IHZ3cHJpbnRmKGNvbnN0 IHdjaGFyX3QqLCB2YV9saXN0KTsKICBleHRlcm4gIkMiIGludCB2d3NjYW5mKGNvbnN0IHdjaGFy X3QqLCB2YV9saXN0KTsKICBleHRlcm4gIkMiIGludCB3cHJpbnRmKGNvbnN0IHdjaGFyX3QqLCAu Li4pOwogIGV4dGVybiAiQyIgaW50IHdzY2FuZihjb25zdCB3Y2hhcl90KiwgLi4uKTsKICBleHRl cm4gIkMiIHdpbnRfdCBnZXR3YyhGSUxFKiBzdHJlYW0pOwogIGV4dGVybiAiQyIgd2ludF90IGdl dHdjaGFyKHZvaWQpOwogIGV4dGVybiAiQyIgaW50IG1ic2luaXQoY29uc3QgbWJzdGF0ZV90Kik7 CiAgZXh0ZXJuICJDIiBzaXplX3QgbWJybGVuKGNvbnN0IGNoYXIqLCBzaXplX3QsIG1ic3RhdGVf dCopOwogIGV4dGVybiAiQyIgc2l6ZV90IG1icnRvd2Mod2NoYXJfdCosIGNvbnN0IGNoYXIqLCBz aXplX3QsIG1ic3RhdGVfdCopOwogIGV4dGVybiAiQyIgc2l6ZV90IG1ic3J0b3djcyh3Y2hhcl90 KiwgY29uc3QgY2hhcioqLCBzaXplX3QsIG1ic3RhdGVfdCopOwogIGV4dGVybiAiQyIgc2l6ZV90 IHdjc3J0b21icyhjaGFyKiwgY29uc3Qgd2NoYXJfdCAqKiwgc2l6ZV90LCBtYnN0YXRlX3QqKTsK ICBleHRlcm4gIkMiIHdpbnRfdCBwdXR3Yyh3Y2hhcl90LCBGSUxFKik7CiAgZXh0ZXJuICJDIiB3 aW50X3QgcHV0d2NoYXIod2NoYXJfdCk7CiAgZXh0ZXJuICJDIiB3aW50X3QgdW5nZXR3Yyh3aW50 X3QsIEZJTEUqKTsKICBleHRlcm4gIkMiIHNpemVfdCB3Y3J0b21iKGNoYXIqLCB3Y2hhcl90LCBt YnN0YXRlX3QqKTsKICBleHRlcm4gIkMiIGRvdWJsZSB3Y3N0b2QoY29uc3Qgd2NoYXJfdCosIHdj aGFyX3QqKik7CiAgZXh0ZXJuICJDIiBmbG9hdCB3Y3N0b2YoY29uc3Qgd2NoYXJfdCosIHdjaGFy X3QqKik7CiAgZXh0ZXJuICJDIiBsb25nIGludCB3Y3N0b2woY29uc3Qgd2NoYXJfdCosIHdjaGFy X3QqKiwgaW50KTsKICBleHRlcm4gIkMiIHVuc2lnbmVkIGxvbmcgaW50IHdjc3RvdWwoY29uc3Qg d2NoYXJfdCosIHdjaGFyX3QqKiwgaW50KTsKICBleHRlcm4gIkMiIHdjaGFyX3QqIHdjc2NweSh3 Y2hhcl90KiBzMSwgY29uc3Qgd2NoYXJfdCopOwogIGV4dGVybiAiQyIgd2NoYXJfdCogd2NzbmNw eSh3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCosIHNpemVfdCk7CiAgZXh0ZXJuICJDIiB3Y2hhcl90 KiB3Y3NjYXQod2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqKTsKICBleHRlcm4gIkMiIHdjaGFyX3Qq IHdjc25jYXQod2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqLCBzaXplX3QpOwogIGV4dGVybiAiQyIg aW50IHdjc2NtcChjb25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCopOwogIGV4dGVybiAiQyIg aW50IHdjc2NvbGwoY29uc3Qgd2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqKTsKICBleHRlcm4gIkMi IGludCB3Y3NuY21wKGNvbnN0IHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90Kiwgc2l6ZV90KTsKICBl eHRlcm4gIkMiIHNpemVfdCB3Y3N4ZnJtKHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90Kiwgc2l6ZV90 KTsKICBleHRlcm4gIkMiIGNvbnN0IHdjaGFyX3QqIHdjc2Nocihjb25zdCB3Y2hhcl90Kiwgd2No YXJfdCk7CiAgaW5saW5lIHdjaGFyX3QqCiAgd2NzY2hyKHdjaGFyX3QqIF9fcCwgd2NoYXJfdCBf X2MpCiAgewogICAgcmV0dXJuIGNvbnN0X2Nhc3Q8d2NoYXJfdCo+KHdjc2Nocihjb25zdF9jYXN0 PGNvbnN0IHdjaGFyX3QqPihfX3ApLCBfX2MpKTsKICB9CiAgZXh0ZXJuICJDIiBzaXplX3Qgd2Nz Y3Nwbihjb25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCopOwogIGV4dGVybiAiQyIgc2l6ZV90 IHdjc2xlbihjb25zdCB3Y2hhcl90Kik7CiAgZXh0ZXJuICJDIiBjb25zdCB3Y2hhcl90KiB3Y3Nw YnJrKGNvbnN0IHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90Kik7CiAgaW5saW5lIHdjaGFyX3QqCiAg d2NzcGJyayh3Y2hhcl90KiBfX3MxLCB3Y2hhcl90KiBfX3MyKQogIHsKICAgIHJldHVybiBjb25z dF9jYXN0PHdjaGFyX3QqPih3Y3NwYnJrKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fczEp LCBfX3MyKSk7CiAgfQogIGV4dGVybiAiQyIgY29uc3Qgd2NoYXJfdCogd2NzcmNocihjb25zdCB3 Y2hhcl90Kiwgd2NoYXJfdCk7CiAgaW5saW5lIHdjaGFyX3QqCiAgd2NzcmNocih3Y2hhcl90KiBf X3AsIHdjaGFyX3QgX19jKQogIHsKICAgIHJldHVybiBjb25zdF9jYXN0PHdjaGFyX3QqPih3Y3Ny Y2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fcCksIF9fYykpOwogIH0KICBleHRlcm4g IkMiIHNpemVfdCB3Y3NzcG4oY29uc3Qgd2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqKTsKICBleHRl cm4gIkMiIGNvbnN0IHdjaGFyX3QqIHdjc3N0cihjb25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJf dCopOwogIGlubGluZSB3Y2hhcl90KgogIHdjc3N0cih3Y2hhcl90KiBfX3MxLCB3Y2hhcl90KiBf X3MyKQogIHsKICAgIHJldHVybiBjb25zdF9jYXN0PHdjaGFyX3QqPih3Y3NzdHIoY29uc3RfY2Fz dDxjb25zdCB3Y2hhcl90Kj4oX19zMSksIF9fczIpKTsKICB9CiAgZXh0ZXJuICJDIiB3Y2hhcl90 KiB3Y3N0b2sod2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqLCB3Y2hhcl90KiopOwogIGV4dGVybiAi QyIgY29uc3Qgd2NoYXJfdCogd21lbWNocihjb25zdCB3Y2hhcl90Kiwgd2NoYXJfdCwgc2l6ZV90 KTsKICBpbmxpbmUgd2NoYXJfdCoKICB3bWVtY2hyKHdjaGFyX3QqIF9fcCwgd2NoYXJfdCBfX2Ms IHNpemVfdCBfX24pCiAgewogICAgcmV0dXJuIGNvbnN0X2Nhc3Q8d2NoYXJfdCo+KHdtZW1jaHIo Y29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19wKSwgX19jLCBfX24pKTsKICB9CiAgZXh0ZXJu ICJDIiBpbnQgd21lbWNtcChjb25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCosIHNpemVfdCk7 CiAgZXh0ZXJuICJDIiB3Y2hhcl90KiB3bWVtY3B5KHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90Kiwg c2l6ZV90KTsKICBleHRlcm4gIkMiIHdjaGFyX3QqIHdtZW1tb3ZlKHdjaGFyX3QqLCBjb25zdCB3 Y2hhcl90Kiwgc2l6ZV90KTsKICBleHRlcm4gIkMiIHdjaGFyX3QqIHdtZW1zZXQod2NoYXJfdCos IHdjaGFyX3QsIHNpemVfdCk7CiAgZXh0ZXJuICJDIiBzaXplX3Qgd2NzZnRpbWUod2NoYXJfdCos IHNpemVfdCwgY29uc3Qgd2NoYXJfdCosIGNvbnN0IHN0cnVjdCB0bSopOwp9CiMgNDEgIi91c3Iv bG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysv Yml0cy9mcG9zLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1N0YXRlVD4KICAgIGNsYXNzIGZwb3MKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYg X1N0YXRlVCBfX3N0YXRlX3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgX19zdGF0ZV90eXBlIF9N X3N0OwogICAgICBzdHJlYW1vZmYgX01fb2ZmOwoKICAgIHB1YmxpYzoKICAgICAgX19zdGF0ZV90 eXBlCiAgICAgIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gX01fc3Q7IH0KCiAgICAgIHZvaWQKICAg ICAgc3RhdGUoX19zdGF0ZV90eXBlIF9fc3QpIHsgX01fc3QgPSBfX3N0OyB9CgoKCiAgICAgIGZw b3MoKTogX01fc3QoX19zdGF0ZV90eXBlKCkpLCBfTV9vZmYoc3RyZWFtb2ZmKCkpIHsgfQoKICAg ICAgZnBvcyhzdHJlYW1vZmYgX19vZmYsIF9fc3RhdGVfdHlwZSBfX3N0ID0gX19zdGF0ZV90eXBl KCkpCiAgICAgIDogX01fc3QoX19zdCksIF9NX29mZihfX29mZikgeyB9CgogICAgICBvcGVyYXRv ciBzdHJlYW1vZmYoKSBjb25zdCB7IHJldHVybiBfTV9vZmY7IH0KCiAgICAgIGZwb3MmCiAgICAg IG9wZXJhdG9yKz0oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiArPSBfX29mZjsgcmV0dXJuICp0 aGlzOyB9CgogICAgICBmcG9zJgogICAgICBvcGVyYXRvci09KHN0cmVhbW9mZiBfX29mZikgeyBf TV9vZmYgLT0gX19vZmY7IHJldHVybiAqdGhpczsgfQoKICAgICAgZnBvcyYKICAgICAgb3BlcmF0 b3IrKHN0cmVhbW9mZiBfX29mZikKICAgICAgewogICAgICAgIGZwb3MgdCgqdGhpcyk7CiAgICAg ICAgcmV0dXJuIHQgKz0gX19vZmY7CiAgICAgIH0KCiAgICAgIGZwb3MmCiAgICAgIG9wZXJhdG9y LShzdHJlYW1vZmYgX19vZmYpCiAgICAgIHsKICAgICAgICBmcG9zIHQoKnRoaXMpOwogICAgICAg IHJldHVybiB0IC09IF9fb2ZmOwogICAgICB9CgogICAgICBib29sCiAgICAgIG9wZXJhdG9yPT0o Y29uc3QgZnBvcyYgX19wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX29mZiA9PSBfX3Bvcy5f TV9vZmY7IH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3IhPShjb25zdCBmcG9zJiBfX3Bvcykg Y29uc3QKICAgICAgeyByZXR1cm4gX01fb2ZmICE9IF9fcG9zLl9NX29mZjsgfQoKICAgICAgc3Ry ZWFtb2ZmCiAgICAgIF9NX3Bvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gX01fb2ZmOyB9CgogICAg ICB2b2lkCiAgICAgIF9NX3Bvc2l0aW9uKHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYgPSBfX29m ZjsgfQogICAgfTsKCgogIHR5cGVkZWYgZnBvczxtYnN0YXRlX3Q+IHN0cmVhbXBvczsKCiAgdHlw ZWRlZiBmcG9zPG1ic3RhdGVfdD4gd3N0cmVhbXBvczsKCn0KIyA0MiAiL3Vzci9sb2NhbC9nY2Mz L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9p b3Nmd2QuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu dXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIvdXNy L2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysr L2JpdHMvZnVuY3RleGNlcHQuaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAz CiMgMzUgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAv aW5jbHVkZS9nKysvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB2 b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFk X2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7CgogIHZvaWQK ICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19sb2dpY19lcnJv cihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21haW5fZXJyb3IoY29uc3Qg Y2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFy KiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hhciogX19zKTsK CiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK ICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy b3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3ZlcmZs b3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfdW5kZXJmbG93X2Vy cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19pb3NfZmFpbHVyZShjb25z dCBjaGFyKiBfX3MpOwp9CiMgNDMgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBj LWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfaW9zZndkLmgiIDIgMwoKbmFtZXNw YWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0g Y2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pb3M7CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgog ICAgY2xhc3MgYmFzaWNfc3RyZWFtYnVmOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lz dHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNo YXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfb3N0cmVhbTsKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+ CiAgICBjbGFzcyBiYXNpY19pb3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICAgdHlwZW5h bWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nYnVm OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3Ry YWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hh clQ+ID4KICAgIGNsYXNzIGJhc2ljX2lzdHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAg ICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNf b3N0cmluZ3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBh bGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJpbmdzdHJlYW07CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFy VD4gPgogICAgY2xhc3MgYmFzaWNfZmlsZWJ1ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNp Y19pZnN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz ID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19vZnN0cmVhbTsKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0No YXJUPiA+CiAgICBjbGFzcyBiYXNpY19mc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGlz dHJlYW1idWZfaXRlcmF0b3I7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3Mgb3N0cmVhbWJ1Zl9pdGVy YXRvcjsKCgoKICBjbGFzcyBpb3NfYmFzZTsKCgogIHR5cGVkZWYgYmFzaWNfaW9zPGNoYXI+IGlv czsKICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyPiBzdHJlYW1idWY7CiAgdHlwZWRlZiBi YXNpY19pc3RyZWFtPGNoYXI+IGlzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXI+ IG9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19pb3N0cmVhbTxjaGFyPiBpb3N0cmVhbTsKICB0eXBl ZGVmIGJhc2ljX3N0cmluZ2J1ZjxjaGFyPiBzdHJpbmdidWY7CiAgdHlwZWRlZiBiYXNpY19pc3Ry aW5nc3RyZWFtPGNoYXI+IGlzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyaW5nc3Ry ZWFtPGNoYXI+IG9zdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdzdHJlYW08Y2hh cj4gc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZmlsZWJ1ZjxjaGFyPiBmaWxlYnVmOwog IHR5cGVkZWYgYmFzaWNfaWZzdHJlYW08Y2hhcj4gaWZzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19v ZnN0cmVhbTxjaGFyPiBvZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZzdHJlYW08Y2hhcj4gZnN0 cmVhbTsKCgogIHR5cGVkZWYgYmFzaWNfaW9zPHdjaGFyX3Q+IHdpb3M7CiAgdHlwZWRlZiBiYXNp Y19zdHJlYW1idWY8d2NoYXJfdD4gd3N0cmVhbWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08 d2NoYXJfdD4gd2lzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPHdjaGFyX3Q+IHdvc3Ry ZWFtOwogIHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08d2NoYXJfdD4gd2lvc3RyZWFtOwogIHR5cGVk ZWYgYmFzaWNfc3RyaW5nYnVmPHdjaGFyX3Q+IHdzdHJpbmdidWY7CiAgdHlwZWRlZiBiYXNpY19p c3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdpc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0 cmluZ3N0cmVhbTx3Y2hhcl90PiB3b3N0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX3N0cmlu Z3N0cmVhbTx3Y2hhcl90PiB3c3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZmlsZWJ1Zjx3 Y2hhcl90PiB3ZmlsZWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lmc3RyZWFtPHdjaGFyX3Q+IHdpZnN0 cmVhbTsKICB0eXBlZGVmIGJhc2ljX29mc3RyZWFtPHdjaGFyX3Q+IHdvZnN0cmVhbTsKICB0eXBl ZGVmIGJhc2ljX2ZzdHJlYW08d2NoYXJfdD4gd2ZzdHJlYW07Cgp9CiMgNDkgIi91c3IvbG9jYWwv Z2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9z dGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYt cGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVz LmgiIDEgMwojIDQwICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n bnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMwoKbmFt ZXNwYWNlIHN0ZAp7CgpzdHJ1Y3QgaW5wdXRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3Qgb3V0cHV0 X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IGZvcndhcmRfaXRlcmF0b3JfdGFnIDogcHVibGljIGlu cHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIDog cHVibGljIGZvcndhcmRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3QgcmFuZG9tX2FjY2Vzc19pdGVy YXRvcl90YWcgOiBwdWJsaWMgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcge307CgoKCgoKCnRl bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGlucHV0X2l0ZXJhdG9y IHsKICB0eXBlZGVmIGlucHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBl ZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsK ICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwp9OwoKc3Ry dWN0IG91dHB1dF9pdGVyYXRvciB7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJh dG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBk aWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJl ZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0 IGZvcndhcmRfaXRlcmF0b3IgewogIHR5cGVkZWYgZm9yd2FyZF9pdGVyYXRvcl90YWcgaXRlcmF0 b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5j ZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAm IHJlZmVyZW5jZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0 cnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yIHsKICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRl cmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAg dHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVy OwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz cyBfRGlzdGFuY2U+IHN0cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yIHsKICB0eXBlZGVmIHJh bmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1Rw IHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVk ZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX0NhdGVnb3J5LCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZSA9IHB0cmRpZmZfdCwK ICAgICAgICAgIGNsYXNzIF9Qb2ludGVyID0gX1RwKiwgY2xhc3MgX1JlZmVyZW5jZSA9IF9UcCY+ CnN0cnVjdCBpdGVyYXRvciB7CiAgdHlwZWRlZiBfQ2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7 CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNl X3R5cGU7CiAgdHlwZWRlZiBfUG9pbnRlciBwb2ludGVyOwogIHR5cGVkZWYgX1JlZmVyZW5jZSBy ZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgpzdHJ1Y3QgaXRlcmF0b3Jf dHJhaXRzIHsKICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6aXRlcmF0b3JfY2F0ZWdvcnkg aXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnZhbHVlX3R5 cGUgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6ZGlmZmVyZW5jZV90 eXBlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cG9pbnRl ciBwb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpyZWZlcmVuY2UgcmVmZXJl bmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxfVHAq PiB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29y eTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVu Y2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNl Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxjb25zdCBf VHAqPiB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRl Z29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZl cmVuY2VfdHlwZTsKICB0eXBlZGVmIGNvbnN0IF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0 IF9UcCYgcmVmZXJlbmNlOwp9OwojIDE0MCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2 ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5 cGVzLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkKX19pdGVyYXRvcl9jYXRlZ29yeShjb25z dCBfSXRlciYpCnsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0 ZXJhdG9yX2NhdGVnb3J5IF9DYXRlZ29yeTsKICByZXR1cm4gX0NhdGVnb3J5KCk7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46 OmRpZmZlcmVuY2VfdHlwZSoKX19kaXN0YW5jZV90eXBlKGNvbnN0IF9JdGVyJikKewogIHJldHVy biBzdGF0aWNfY2FzdDx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNl X3R5cGUqPigwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSoKX192YWx1ZV90eXBlKGNvbnN0IF9JdGVy JikKewogIHJldHVybiBzdGF0aWNfY2FzdDx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+ Ojp2YWx1ZV90eXBlKj4oMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5Cml0ZXJhdG9yX2Nh dGVnb3J5KGNvbnN0IF9JdGVyJiBfX2kpIHsgcmV0dXJuIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19p KTsgfQoKCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry YWl0czxfSXRlcj46OmRpZmZlcmVuY2VfdHlwZSoKZGlzdGFuY2VfdHlwZShjb25zdCBfSXRlciYg X19pKSB7IHJldHVybiBfX2Rpc3RhbmNlX3R5cGUoX19pKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9J dGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSoK dmFsdWVfdHlwZShjb25zdCBfSXRlciYgX19pKSB7IHJldHVybiBfX3ZhbHVlX3R5cGUoX19pKTsg fQoKfQojIDUwICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv My4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwv Z2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9z dGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9n Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9pdGVyYXRv cl9iYXNlX2Z1bmNzLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1w Yy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvY29uY2VwdF9jaGVjay5oIiAxIDMKIyAz NCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNs dWRlL2crKy9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMwoKIyAxICIvdXNyL2xvY2FsL2djYzMvbGli L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2k2ODYtcGMtbGludXgt Z251L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDM2ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1s aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvY29uY2VwdF9jaGVjay5o IiAyIDMKIyA0MSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251 LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDIgMwoKbmFt ZXNwYWNlIHN0ZAp7CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBf RGlzdGFuY2U+CmlubGluZSB2b2lkIF9fZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwg X0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSYg X19uLCBpbnB1dF9pdGVyYXRvcl90YWcpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHdoaWxlIChfX2ZpcnN0 ICE9IF9fbGFzdCkgeyArK19fZmlyc3Q7ICsrX19uOyB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu ZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19kaXN0YW5j ZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICBf UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9EaXN0 YW5jZSYgX19uLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKICBfX24gKz0gX19sYXN0IC0gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNz IF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIGRpc3RhbmNlKF9J bnB1dEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9y IF9fbGFzdCwgX0Rpc3RhbmNlJiBfX24pCnsKCiAgX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3Qs IF9fbiwgaXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu cHV0SXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0 b3I+OjpkaWZmZXJlbmNlX3R5cGUKX19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf SW5wdXRJdGVyYXRvciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90 eXBlIF9fbiA9IDA7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICArK19fZmlyc3Q7 ICsrX19uOwogIH0KICByZXR1cm4gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vz c0l0ZXJhdG9yPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJ dGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpfX2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRv ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgIHJhbmRv bV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJl dHVybiBfX2xhc3QgLSBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+ CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJl bmNlX3R5cGUKZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3Ig X19sYXN0KQp7CgogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJh dG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkKICAgIF9DYXRlZ29yeTsKICByZXR1cm4gX19kaXN0YW5j ZShfX2ZpcnN0LCBfX2xhc3QsIF9DYXRlZ29yeSgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1 dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9JbnB1dEl0ZXIm IF9faSwgX0Rpc3RhbmNlIF9fbiwgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHdo aWxlIChfX24tLSkgKytfX2k7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXJh dG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fYWR2YW5jZShfQmlkaXJlY3Rpb25h bEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICBiaWRp cmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBp ZiAoX19uID4gMCkKICAgIHdoaWxlIChfX24tLSkgKytfX2k7CiAgZWxzZQogICAgd2hpbGUgKF9f bisrKSAtLV9faTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xh c3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y JiBfX2ksIF9EaXN0YW5jZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNz X2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBfX2kgKz0gX19u Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5s aW5lIHZvaWQgYWR2YW5jZShfSW5wdXRJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uKQp7Cgog IF9fYWR2YW5jZShfX2ksIF9fbiwgaXRlcmF0b3JfY2F0ZWdvcnkoX19pKSk7Cn0KCn0KIyA1MSAi L3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRl L2crKy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2dj Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2l0ZXJhdG9y LmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n bnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKbmFtZXNwYWNlIHN0ZAp7 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KY2xhc3MgYmFja19pbnNlcnRfaXRlcmF0b3Ig ewpwcm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29udGFpbmVyOwpwdWJsaWM6CiAgdHlwZWRlZiBf Q29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBp dGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZv aWQgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCBwb2ludGVyOwogIHR5cGVkZWYgdm9p ZCByZWZlcmVuY2U7CgogIGV4cGxpY2l0IGJhY2tfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXIm IF9feCkgOiBjb250YWluZXIoJl9feCkge30KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFp bmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYg X192YWx1ZSkgewogICAgY29udGFpbmVyLT5wdXNoX2JhY2soX192YWx1ZSk7CiAgICByZXR1cm4g KnRoaXM7CiAgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcioo KSB7IHJldHVybiAqdGhpczsgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBv cGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29u dGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9Cn07Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX0NvbnRhaW5lcj4KaW5saW5lIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+ IGJhY2tfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KSB7CiAgcmV0dXJuIGJhY2tfaW5zZXJ0X2l0 ZXJhdG9yPF9Db250YWluZXI+KF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpj bGFzcyBmcm9udF9pbnNlcnRfaXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29u dGFpbmVyOwpwdWJsaWM6CiAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwogIHR5 cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZv aWQgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYg dm9pZCBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7CgogIGV4cGxpY2l0IGZyb250 X2luc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVyKCZfX3gpIHt9CiAg ZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgogIG9wZXJhdG9yPShjb25zdCB0eXBl bmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKSB7CiAgICBjb250YWluZXItPnB1 c2hfZnJvbnQoX192YWx1ZSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGZyb250X2luc2VydF9p dGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICBmcm9u dF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhp czsgfQogIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQp IHsgcmV0dXJuICp0aGlzOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KaW5saW5l IGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBmcm9udF9pbnNlcnRlcihfQ29udGFp bmVyJiBfX3gpIHsKICByZXR1cm4gZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9f eCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpjbGFzcyBpbnNlcnRfaXRlcmF0b3Ig ewpwcm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29udGFpbmVyOwogIHR5cGVuYW1lIF9Db250YWlu ZXI6Oml0ZXJhdG9yIGl0ZXI7CnB1YmxpYzoKICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVy X3R5cGU7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Owog IHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7 CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsKCiAgaW5z ZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCwgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0 b3IgX19pKQogICAgOiBjb250YWluZXIoJl9feCksIGl0ZXIoX19pKSB7fQogIGluc2VydF9pdGVy YXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6 dmFsdWVfdHlwZSYgX192YWx1ZSkgewogICAgaXRlciA9IGNvbnRhaW5lci0+aW5zZXJ0KGl0ZXIs IF9fdmFsdWUpOwogICAgKytpdGVyOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpbnNlcnRfaXRl cmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CiAgaW5zZXJ0 X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBp bnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhp czsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXIsIGNsYXNzIF9JdGVyYXRvcj4KaW5s aW5lCmluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBpbnNlcnRlcihfQ29udGFpbmVyJiBfX3gs IF9JdGVyYXRvciBfX2kpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9y IF9faXRlcjsKICByZXR1cm4gaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCwgX19pdGVy KF9faSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgY2xhc3Mg X1RwLCBjbGFzcyBfUmVmZXJlbmNlID0gX1RwJiwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSA9 IHB0cmRpZmZfdD4KY2xhc3MgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yIHsKICB0eXBl ZGVmIHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXJhdG9y LCBfVHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JlZmVyZW5j ZSwgX0Rpc3RhbmNlPiBfU2VsZjsKcHJvdGVjdGVkOgogIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3Ig Y3VycmVudDsKcHVibGljOgogIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRl cmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0 YW5jZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBf UmVmZXJlbmNlIHJlZmVyZW5jZTsKCiAgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yKCkg e30KICBleHBsaWNpdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IoX0JpZGlyZWN0aW9u YWxJdGVyYXRvciBfX3gpCiAgICA6IGN1cnJlbnQoX194KSB7fQogIF9CaWRpcmVjdGlvbmFsSXRl cmF0b3IgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnQ7IH0KICBfUmVmZXJlbmNlIG9wZXJh dG9yKigpIGNvbnN0IHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX190bXAgPSBjdXJyZW50 OwogICAgcmV0dXJuICotLV9fdG1wOwogIH0KICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7 IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQogIF9TZWxmJiBvcGVyYXRvcisrKCkgewogICAgLS1j dXJyZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvcisrKGludCkgewog ICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIC0tY3VycmVudDsKICAgIHJldHVybiBfX3RtcDsK ICB9CiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gKnRo aXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yLS0oaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlz OwogICAgKytjdXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFz cyBfQmlJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWYsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5l IGJvb2wgb3BlcmF0b3I9PSgKICAgIGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRv cjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feCwKICAgIGNvbnN0IHJldmVyc2Vf YmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9f eSkKewogIHJldHVybiBfX3guYmFzZSgpID09IF9feS5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfQmlJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWYsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5l IGJvb2wgb3BlcmF0b3IhPSgKICAgIGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRv cjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feCwKICAgIGNvbnN0IHJldmVyc2Vf YmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9f eSkKewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9CiMgMTkzICIvdXNyL2xvY2FsL2djYzMvbGli L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2l0ZXJh dG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KY2xhc3MgcmV2ZXJzZV9pdGVyYXRv cgp7CnByb3RlY3RlZDoKICBfSXRlcmF0b3IgY3VycmVudDsKcHVibGljOgogIHR5cGVkZWYgdHlw ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5CiAgICAg ICAgICBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYg dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAg ICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz PF9JdGVyYXRvcj46OnBvaW50ZXIKICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlCiAgICAgICAgICByZWZlcmVu Y2U7CgogIHR5cGVkZWYgX0l0ZXJhdG9yIGl0ZXJhdG9yX3R5cGU7CiAgdHlwZWRlZiByZXZlcnNl X2l0ZXJhdG9yPF9JdGVyYXRvcj4gX1NlbGY7CgpwdWJsaWM6CiAgcmV2ZXJzZV9pdGVyYXRvcigp IHt9CiAgZXhwbGljaXQgcmV2ZXJzZV9pdGVyYXRvcihpdGVyYXRvcl90eXBlIF9feCkgOiBjdXJy ZW50KF9feCkge30KCiAgcmV2ZXJzZV9pdGVyYXRvcihjb25zdCBfU2VsZiYgX194KSA6IGN1cnJl bnQoX194LmN1cnJlbnQpIHt9CiAgdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgogIHJldmVyc2VfaXRl cmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcj4mIF9feCkKICAgIDogY3VycmVudChf X3guYmFzZSgpKSB7fQoKICBpdGVyYXRvcl90eXBlIGJhc2UoKSBjb25zdCB7IHJldHVybiBjdXJy ZW50OyB9CiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsKICAgIF9JdGVyYXRvciBfX3Rt cCA9IGN1cnJlbnQ7CiAgICByZXR1cm4gKi0tX190bXA7CiAgfQogIHBvaW50ZXIgb3BlcmF0b3It PigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgogIF9TZWxmJiBvcGVyYXRvcisr KCkgewogICAgLS1jdXJyZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRv cisrKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIC0tY3VycmVudDsKICAgIHJl dHVybiBfX3RtcDsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7CiAgICArK2N1cnJlbnQ7CiAg ICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yLS0oaW50KSB7CiAgICBfU2VsZiBf X3RtcCA9ICp0aGlzOwogICAgKytjdXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0KCiAgX1Nl bGYgb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsKICAgIHJldHVybiBfU2Vs ZihjdXJyZW50IC0gX19uKTsKICB9CiAgX1NlbGYmIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBl IF9fbikgewogICAgY3VycmVudCAtPSBfX247CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxm IG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7CiAgICByZXR1cm4gX1NlbGYo Y3VycmVudCArIF9fbik7CiAgfQogIF9TZWxmJiBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBf X24pIHsKICAgIGN1cnJlbnQgKz0gX19uOwogICAgcmV0dXJuICp0aGlzOwogIH0KICByZWZlcmVu Y2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7IHJldHVybiAqKCp0aGlz ICsgX19uKTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIGJvb2wgb3Bl cmF0b3I9PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewog IHJldHVybiBfX3guYmFzZSgpID09IF9feS5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRl cmF0b3I+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVy YXRvcj4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8 X0l0ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJuIF9feS5iYXNlKCkgPCBfX3guYmFzZSgpOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHJl dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJuICEoX194ID09 IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSBib29sIG9wZXJhdG9y Pihjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJu IF9feSA8IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIGJvb2wgb3Bl cmF0b3I8PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewog IHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGlu ZSBib29sIG9wZXJhdG9yPj0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gs CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4m IF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0 b3I+CmlubGluZSB0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVu Y2VfdHlwZQpvcGVyYXRvci0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gs CiAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJl dHVybiBfX3kuYmFzZSgpIC0gX194LmJhc2UoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRv cj4KaW5saW5lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPgpvcGVyYXRvcisodHlwZW5hbWUg cmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uLAogICAgICAg ICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gpIHsKICByZXR1cm4gcmV2 ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+KF9feC5iYXNlKCkgLSBfX24pOwp9CgoKdGVtcGxhdGUg PGNsYXNzIF9UcCwKICAgICAgICAgIGNsYXNzIF9DaGFyVCA9IGNoYXIsIGNsYXNzIF9UcmFpdHMg PSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgY2xhc3MgX0Rpc3QgPSBwdHJkaWZmX3Q+ CmNsYXNzIGlzdHJlYW1faXRlcmF0b3IgewpwdWJsaWM6CiAgdHlwZWRlZiBfQ2hhclQgY2hhcl90 eXBlOwogIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICB0eXBlZGVmIGJhc2ljX2lzdHJl YW08X0NoYXJULCBfVHJhaXRzPiBpc3RyZWFtX3R5cGU7CgogIHR5cGVkZWYgaW5wdXRfaXRlcmF0 b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlw ZWRlZiBfRGlzdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBjb25zdCBfVHAqIHBvaW50ZXI7 CiAgdHlwZWRlZiBjb25zdCBfVHAmIHJlZmVyZW5jZTsKCiAgaXN0cmVhbV9pdGVyYXRvcigpIDog X01fc3RyZWFtKDApLCBfTV9vayhmYWxzZSkge30KICBpc3RyZWFtX2l0ZXJhdG9yKGlzdHJlYW1f dHlwZSYgX19zKSA6IF9NX3N0cmVhbSgmX19zKSB7IF9NX3JlYWQoKTsgfQoKICByZWZlcmVuY2Ug b3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gX01fdmFsdWU7IH0KICBwb2ludGVyIG9wZXJhdG9y LT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKICBpc3RyZWFtX2l0ZXJhdG9y JiBvcGVyYXRvcisrKCkgewogICAgX01fcmVhZCgpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBp c3RyZWFtX2l0ZXJhdG9yIG9wZXJhdG9yKysoaW50KSB7CiAgICBpc3RyZWFtX2l0ZXJhdG9yIF9f dG1wID0gKnRoaXM7CiAgICBfTV9yZWFkKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQoKICBib29s IF9NX2VxdWFsKGNvbnN0IGlzdHJlYW1faXRlcmF0b3ImIF9feCkgY29uc3QKICAgIHsgcmV0dXJu IChfTV9vayA9PSBfX3guX01fb2spICYmICghX01fb2sgfHwgX01fc3RyZWFtID09IF9feC5fTV9z dHJlYW0pOyB9Cgpwcml2YXRlOgogIGlzdHJlYW1fdHlwZSogX01fc3RyZWFtOwogIF9UcCBfTV92 YWx1ZTsKICBib29sIF9NX29rOwoKICB2b2lkIF9NX3JlYWQoKSB7CiAgICBfTV9vayA9IChfTV9z dHJlYW0gJiYgKl9NX3N0cmVhbSkgPyB0cnVlIDogZmFsc2U7CiAgICBpZiAoX01fb2spIHsKICAg ICAgKl9NX3N0cmVhbSA+PiBfTV92YWx1ZTsKICAgICAgX01fb2sgPSAqX01fc3RyZWFtID8gdHJ1 ZSA6IGZhbHNlOwogICAgfQogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9DaGFy VCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0Rpc3Q+CmlubGluZSBib29sCm9wZXJhdG9yPT0oY29u c3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBfX3gsCiAg ICAgICAgICAgY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0cywgX0Rp c3Q+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX2VxdWFsKF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfVHAsIGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0Rpc3Q+CmlubGluZSBi b29sCm9wZXJhdG9yIT0oY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0 cywgX0Rpc3Q+JiBfX3gsCiAgICAgICAgICAgY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9D aGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBfX3kpIHsKICByZXR1cm4gIV9feC5fTV9lcXVhbChfX3kp Owp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwKICAgICAgICAgIGNsYXNzIF9DaGFyVCA9IGNoYXIs IGNsYXNzIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KY2xhc3Mgb3N0cmVhbV9pdGVy YXRvciB7CnB1YmxpYzoKICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgdHlwZWRlZiBfVHJh aXRzIHRyYWl0c190eXBlOwogIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ IG9zdHJlYW1fdHlwZTsKCiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2Nh dGVnb3J5OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJl bmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5j ZTsKCiAgb3N0cmVhbV9pdGVyYXRvcihvc3RyZWFtX3R5cGUmIF9fcykgOiBfTV9zdHJlYW0oJl9f cyksIF9NX3N0cmluZygwKSB7fQogIG9zdHJlYW1faXRlcmF0b3Iob3N0cmVhbV90eXBlJiBfX3Ms IGNvbnN0IF9DaGFyVCogX19jKQogICAgOiBfTV9zdHJlYW0oJl9fcyksIF9NX3N0cmluZyhfX2Mp IHt9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcj0oY29uc3QgX1RwJiBfX3ZhbHVl KSB7CiAgICAqX01fc3RyZWFtIDw8IF9fdmFsdWU7CiAgICBpZiAoX01fc3RyaW5nKSAqX01fc3Ry ZWFtIDw8IF9NX3N0cmluZzsKICAgIHJldHVybiAqdGhpczsKICB9CiAgb3N0cmVhbV9pdGVyYXRv cjxfVHA+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIG9zdHJlYW1faXRlcmF0b3I8 X1RwPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CiAgb3N0cmVhbV9pdGVyYXRvcjxf VHA+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KcHJpdmF0ZToKICBvc3RyZWFt X3R5cGUqIF9NX3N0cmVhbTsKICBjb25zdCBfQ2hhclQqIF9NX3N0cmluZzsKfTsKIyA0MTcgIi91 c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9n KysvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5 cGVuYW1lIF9Db250YWluZXI+CmNsYXNzIF9fbm9ybWFsX2l0ZXJhdG9yCiAgOiBwdWJsaWMgaXRl cmF0b3I8aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5LAogICAg ICAgICAgICAgICAgICAgIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAog ICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNl X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBv aW50ZXIsCiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJl ZmVyZW5jZT4KewoKcHJvdGVjdGVkOgogIF9JdGVyYXRvciBfTV9jdXJyZW50OwoKcHVibGljOgog IHR5cGVkZWYgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiBub3JtYWxf aXRlcmF0b3JfdHlwZTsKICB0eXBlZGVmIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+IF9fdHJh aXRzX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjppdGVyYXRvcl9jYXRl Z29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6 OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6 OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3Ry YWl0c190eXBlOjpwb2ludGVyIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190 eXBlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwoKICBfX25vcm1hbF9pdGVyYXRvcigpIDogX01fY3Vy cmVudChfSXRlcmF0b3IoKSkgeyB9CgogIGV4cGxpY2l0IF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0 IF9JdGVyYXRvciYgX19pKSA6IF9NX2N1cnJlbnQoX19pKSB7IH0KCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9JdGVyPgogIGlubGluZSBfX25vcm1hbF9pdGVyYXRvcihjb25zdCBfX25vcm1hbF9pdGVy YXRvcjxfSXRlciwgX0NvbnRhaW5lcj4mIF9faSkKICAgIDogX01fY3VycmVudChfX2kuYmFzZSgp KSB7IH0KCgogIHJlZmVyZW5jZQogIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpfTV9jdXJy ZW50OyB9CgogIHBvaW50ZXIKICBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gX01fY3VycmVu dDsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZSYKICBvcGVyYXRvcisrKCkgeyArK19NX2N1cnJl bnQ7IHJldHVybiAqdGhpczsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZQogIG9wZXJhdG9yKyso aW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50KyspOyB9CgoKICBub3Jt YWxfaXRlcmF0b3JfdHlwZSYKICBvcGVyYXRvci0tKCkgeyAtLV9NX2N1cnJlbnQ7IHJldHVybiAq dGhpczsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZQogIG9wZXJhdG9yLS0oaW50KSB7IHJldHVy biBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50LS0pOyB9CgoKICByZWZlcmVuY2UKICBvcGVy YXRvcltdKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogIHsgcmV0dXJuIF9NX2N1 cnJlbnRbX19uXTsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZSYKICBvcGVyYXRvcis9KGNvbnN0 IGRpZmZlcmVuY2VfdHlwZSYgX19uKQogIHsgX01fY3VycmVudCArPSBfX247IHJldHVybiAqdGhp czsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZQogIG9wZXJhdG9yKyhjb25zdCBkaWZmZXJlbmNl X3R5cGUmIF9fbikgY29uc3QKICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50 ICsgX19uKTsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZSYKICBvcGVyYXRvci09KGNvbnN0IGRp ZmZlcmVuY2VfdHlwZSYgX19uKQogIHsgX01fY3VycmVudCAtPSBfX247IHJldHVybiAqdGhpczsg fQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZQogIG9wZXJhdG9yLShjb25zdCBkaWZmZXJlbmNlX3R5 cGUmIF9fbikgY29uc3QKICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50IC0g X19uKTsgfQoKICBkaWZmZXJlbmNlX3R5cGUKICBvcGVyYXRvci0oY29uc3Qgbm9ybWFsX2l0ZXJh dG9yX3R5cGUmIF9faSkgY29uc3QKICB7IHJldHVybiBfTV9jdXJyZW50IC0gX19pLl9NX2N1cnJl bnQ7IH0KCiAgY29uc3QgX0l0ZXJhdG9yJgogIGJhc2UoKSBjb25zdCB7IHJldHVybiBfTV9jdXJy ZW50OyB9Cn07CgoKCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVy YXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CmlubGluZSBib29sCm9wZXJhdG9yPT0oY29uc3Qg X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAg ICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3Jo cykKeyByZXR1cm4gX19saHMuYmFzZSgpID09IF9fcmhzLmJhc2UoKTsgfQoKdGVtcGxhdGU8dHlw ZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5l cj4KaW5saW5lIGJvb2wKb3BlcmF0b3IhPShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0 b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0 b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQp7IHJldHVybiAhKF9fbGhzID09IF9f cmhzKTsgfQoKCgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0 b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgppbmxpbmUgYm9vbApvcGVyYXRvcjwoY29uc3QgX19u b3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAg Y29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQp7 IHJldHVybiBfX2xocy5iYXNlKCkgPCBfX3Jocy5iYXNlKCk7IH0KCnRlbXBsYXRlPHR5cGVuYW1l IF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+Cmlu bGluZSBib29sCm9wZXJhdG9yPihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBf Q29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRl cmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCnsgcmV0dXJuIF9fcmhzIDwgX19saHM7IH0KCnRl bXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1l IF9Db250YWluZXI+CmlubGluZSBib29sCm9wZXJhdG9yPD0oY29uc3QgX19ub3JtYWxfaXRlcmF0 b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgIGNvbnN0IF9fbm9y bWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKeyByZXR1cm4gIShf X3JocyA8IF9fbGhzKTsgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUg X0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+PShj b25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAg ICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4m IF9fcmhzKQp7IHJldHVybiAhKF9fbGhzIDwgX19yaHMpOyB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBf SXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CmlubGluZSBfX25vcm1hbF9pdGVyYXRvcjxf SXRlcmF0b3IsIF9Db250YWluZXI+Cm9wZXJhdG9yKyhfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0 b3IsIF9Db250YWluZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uLAogICAgICAgICAgY29uc3QgX19u b3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19pKQp7IHJldHVybiBfX25v cm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+KF9faS5iYXNlKCkgKyBfX24pOyB9 Cgp9CiMgNTIgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z LjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9n Y2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL2Nv bmNlcHRfY2hlY2suaCIgMSAzCiMgNTMgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2 LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgpu YW1lc3BhY2Ugc3RkCnsKCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9G b3J3YXJkSXRlcjIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgX19pdGVyX3N3YXAoX0ZvcndhcmRJ dGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIgX19iLCBfVHAqKQp7CiAgX1RwIF9fdG1wID0gKl9fYTsK ICAqX19hID0gKl9fYjsKICAqX19iID0gX190bXA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy ZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgppbmxpbmUgdm9pZCBpdGVyX3N3YXAoX0Zvcndh cmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIgX19iKQp7CgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBfX2l0ZXJfc3dhcChfX2Es IF9fYiwgX192YWx1ZV90eXBlKF9fYSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUg dm9pZCBzd2FwKF9UcCYgX19hLCBfVHAmIF9fYikKewoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBfVHAgX190bXAgPSBfX2E7CiAg X19hID0gX19iOwogIF9fYiA9IF9fdG1wOwp9CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpp bmxpbmUgY29uc3QgX1RwJiBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKSB7Cgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKCiAgaWYgKF9fYiA8IF9fYSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKfQoKdGVtcGxh dGUgPGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0IF9UcCYgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25z dCBfVHAmIF9fYikgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CgogIGlmIChfX2EgPCBfX2IpIHJldHVybiBfX2I7IHJldHVy biBfX2E7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgY29u c3QgX1RwJiBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2Nv bXApIHsKCiAgaWYgKF9fY29tcChfX2IsIF9fYSkpIHJldHVybiBfX2I7IHJldHVybiBfX2E7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgY29uc3QgX1RwJiBt YXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApIHsKCiAg aWYgKF9fY29tcChfX2EsIF9fYikpIHJldHVybiBfX2I7IHJldHVybiBfX2E7Cn0KIyAxMzcgIi91 c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9n KysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xh c3MgX091dHB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9PdXRwdXRJdGVyIF9fY29w eShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAg IGlucHV0X2l0ZXJhdG9yX3RhZywgX0Rpc3RhbmNlKikKewogIGZvciAoIDsgX19maXJzdCAhPSBf X2xhc3Q7ICsrX19yZXN1bHQsICsrX19maXJzdCkKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0Owog IHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBj bGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX091dHB1dEl0ZXIKX19j b3B5KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwK ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywg X0Rpc3RhbmNlKikKewogIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9f biA+IDA7IC0tX19uKSB7CiAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICsrX19maXJzdDsK ICAgICsrX19yZXN1bHQ7CiAgfQogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNz IF9UcD4KaW5saW5lIF9UcCoKX19jb3B5X3RyaXZpYWwoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25z dCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkKewogIG1lbW1vdmUoX19yZXN1bHQsIF9fZmly c3QsIHNpemVvZihfVHApICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICByZXR1cm4gX19yZXN1bHQg KyAoX19sYXN0IC0gX19maXJzdCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xh c3MgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHlfYXV4MihfSW5wdXRJdGVy IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKewogIHJldHVybiBfX2NvcHko X19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0 ZWdvcnkoX19maXJzdCksCiAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkp Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGlu ZSBfT3V0cHV0SXRlciBfX2NvcHlfYXV4MihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1 bHQsIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJuIF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz dWx0LAogICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSwKICAgICAg ICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf VHA+CmlubGluZSBfVHAqIF9fY29weV9hdXgyKF9UcCogX19maXJzdCwgX1RwKiBfX2xhc3QsIF9U cCogX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKQp7CiAgcmV0 dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwPgppbmxpbmUgX1RwKiBfX2NvcHlfYXV4Mihjb25zdCBfVHAqIF9fZmlyc3Qs IGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg ICBfX3RydWVfdHlwZSkKewogIHJldHVybiBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xhc3Qs IF9fcmVzdWx0KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0 SXRlciwgY2xhc3MgX1RwPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X2F1eChfSW5wdXRJdGVy IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1RwKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBl X3RyYWl0czxfVHA+OjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAgICBf VHJpdmlhbDsKICByZXR1cm4gX19jb3B5X2F1eDIoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwg X1RyaXZpYWwoKSk7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9P dXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmly c3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091 dHB1dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJuIF9PdXRwdXRJdGVyKF9f Y29weV9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdC5iYXNlKCksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpKSk7Cn0KCnRlbXBsYXRlPHR5 cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0 ZXIgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90 eXBlKQp7CiAgcmV0dXJuIF9fY29weV9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX192 YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlw ZW5hbWUgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHlfbmkxKF9JbnB1dEl0 ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCnsKICB0eXBlZGVmIHR5cGVu YW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X091dHB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFsOwog IHJldHVybiBfX2NvcHlfbmkyKF9fZmlyc3QuYmFzZSgpLCBfX2xhc3QuYmFzZSgpLCBfX3Jlc3Vs dCwgX19Ob3JtYWwoKSk7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1l IF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X25pMShfSW5wdXRJdGVyIF9f Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKewogIHR5cGVkZWYgdHlwZW5hbWUg X0lzX25vcm1hbF9pdGVyYXRvcjxfT3V0cHV0SXRlcj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgcmV0 dXJuIF9fY29weV9uaTIoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIF9P dXRwdXRJdGVyIGNvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCnsKCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CgoKICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9JbnB1dEl0ZXI+Ojpf Tm9ybWFsIF9fTm9ybWFsOwogICByZXR1cm4gX19jb3B5X25pMShfX2ZpcnN0LCBfX2xhc3QsIF9f cmVzdWx0LCBfX05vcm1hbCgpKTsKfQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFs SXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICBjbGFzcyBfRGlzdGFu Y2U+CmlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fY29weV9iYWNrd2FyZChfQmlkaXJlY3Rp b25hbEl0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y X3RhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5j ZSopCnsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCiAgICAqLS1fX3Jlc3VsdCA9ICotLV9f bGFzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNz SXRlciwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBf QmlkaXJlY3Rpb25hbEl0ZXIgX19jb3B5X2JhY2t3YXJkKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl c3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X0JpZGlyZWN0aW9uYWxJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKikKewogIGZvciAoX0Rpc3RhbmNl IF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKQogICAgKi0tX19yZXN1bHQg PSAqLS1fX2xhc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg X0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAg IGNsYXNzIF9Cb29sVHlwZT4Kc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaAp7CiAgdHlw ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyMT46Oml0ZXJh dG9yX2NhdGVnb3J5CiAgICAgICAgICBfQ2F0OwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcjE+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9E aXN0YW5jZTsKCiAgc3RhdGljIF9CaWRpcmVjdGlvbmFsSXRlcjIgY29weShfQmlkaXJlY3Rpb25h bEl0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJl Y3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9C aWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQpIHsKICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmQo X19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0NhdCgpLCAoX0Rpc3RhbmNlKikgMCk7CiAgfQp9 OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxf VHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KewogIHN0YXRpYyBfVHAqIGNvcHkoY29uc3QgX1RwKiBf X2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkgewogICAgY29uc3QgcHRy ZGlmZl90IF9OdW0gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgbWVtbW92ZShfX3Jlc3VsdCAtIF9O dW0sIF9fZmlyc3QsIHNpemVvZihfVHApICogX051bSk7CiAgICByZXR1cm4gX19yZXN1bHQgLSBf TnVtOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX2NvcHlfYmFja3dhcmRf ZGlzcGF0Y2g8Y29uc3QgX1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CnsKICBzdGF0aWMgX1RwKiBj b3B5KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQp IHsKICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVl X3R5cGU+CiAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICB9Cn07Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX0JJMSwgY2xhc3MgX0JJMj4KaW5saW5lIF9CSTIgX19jb3B5X2JhY2t3 YXJkX2F1eChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0KSB7CiAgdHlw ZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQkky Pjo6dmFsdWVfdHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAgOjpoYXNfdHJpdmlhbF9hc3Np Z25tZW50X29wZXJhdG9yCiAgICAgICAgICBfVHJpdmlhbDsKICByZXR1cm4gX19jb3B5X2JhY2t3 YXJkX2Rpc3BhdGNoPF9CSTEsIF9CSTIsIF9Ucml2aWFsPgogICAgICAgICAgICAgIDo6Y29weShf X2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5 cGVuYW1lIF9CSTI+CmlubGluZSBfQkkyIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0 ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKSB7 CiAgcmV0dXJuIF9CSTIoX19jb3B5X2JhY2t3YXJkX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz dWx0LmJhc2UoKSkpOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4K aW5saW5lIF9CSTIgX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBf X2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKXsKICByZXR1cm4gX19j b3B5X2JhY2t3YXJkX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUg PHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CmlubGluZSBfQkkyIF9fY29weV9iYWNrd2Fy ZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0 LCBfX3RydWVfdHlwZSkgewogIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxf QkkyPjo6X05vcm1hbCBfX05vcm1hbDsKICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX291dHB1dF9u b3JtYWxfaXRlcmF0b3IoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0LCBfX05vcm1hbCgp KTsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CmlubGluZSBfQkky IF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkx IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfQkkyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpIHsKICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19u b3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgcmV0dXJuIF9fY29weV9i YWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fTm9ybWFs KCkpOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KaW5saW5lIF9C STIgY29weV9iYWNrd2FyZChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0 KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIHR5cGVkZWYgdHlwZW5hbWUgX0lz X25vcm1hbF9pdGVyYXRvcjxfQkkxPjo6X05vcm1hbCBfX05vcm1hbDsKICByZXR1cm4gX19jb3B5 X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fTm9ybWFs KCkpOwp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNz IF9PdXRwdXRJdGVyPgpwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPiBfX2NvcHlfbihfSW5w dXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICBmb3IgKCA7IF9fY291bnQg PiAwOyAtLV9fY291bnQpIHsKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgKytfX2ZpcnN0 OwogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlciwgX091dHB1dEl0 ZXI+KF9fZmlyc3QsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SQUl0ZXIsIGNsYXNz IF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIHBhaXI8X1JBSXRlciwgX091dHB1dEl0 ZXI+Cl9fY29weV9uKF9SQUl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgX091 dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7 CiAgX1JBSXRlciBfX2xhc3QgPSBfX2ZpcnN0ICsgX19jb3VudDsKICByZXR1cm4gcGFpcjxfUkFJ dGVyLCBfT3V0cHV0SXRlcj4oX19sYXN0LCBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQp KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0 cHV0SXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+Cl9fY29weV9uKF9J bnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwgX091dHB1dEl0ZXIgX19yZXN1bHQpIHsK ICByZXR1cm4gX19jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQsCiAgICAgICAgICAg ICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgcGFpcjxf SW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4KY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUg X19jb3VudCwgX091dHB1dEl0ZXIgX19yZXN1bHQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICByZXR1cm4g X19jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQpOwp9CgoKCgoKdGVtcGxhdGUgPGNs YXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgp2b2lkIGZpbGwoX0ZvcndhcmRJdGVyIF9fZmly c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkKewoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAg Kl9fZmlyc3QgPSBfX3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX091dHB1dEl0ZXIsIGNsYXNz IF9TaXplLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIGZpbGxfbihfT3V0cHV0SXRlciBfX2ZpcnN0 LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSkKewoKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgZm9y ICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2ZpcnN0KQogICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwog IHJldHVybiBfX2ZpcnN0Owp9CgoKCmlubGluZSB2b2lkIGZpbGwodW5zaWduZWQgY2hhciogX19m aXJzdCwgdW5zaWduZWQgY2hhciogX19sYXN0LAogICAgICAgICAgICAgICAgIGNvbnN0IHVuc2ln bmVkIGNoYXImIF9fYykKewogIHVuc2lnbmVkIGNoYXIgX190bXAgPSBfX2M7CiAgbWVtc2V0KF9f Zmlyc3QsIF9fdG1wLCBfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKaW5saW5lIHZvaWQgZmlsbChzaWdu ZWQgY2hhciogX19maXJzdCwgc2lnbmVkIGNoYXIqIF9fbGFzdCwKICAgICAgICAgICAgICAgICBj b25zdCBzaWduZWQgY2hhciYgX19jKQp7CiAgc2lnbmVkIGNoYXIgX190bXAgPSBfX2M7CiAgbWVt c2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fdG1wKSwgX19sYXN0IC0g X19maXJzdCk7Cn0KCmlubGluZSB2b2lkIGZpbGwoY2hhciogX19maXJzdCwgY2hhciogX19sYXN0 LCBjb25zdCBjaGFyJiBfX2MpCnsKICBjaGFyIF9fdG1wID0gX19jOwogIG1lbXNldChfX2ZpcnN0 LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX3RtcCksIF9fbGFzdCAtIF9fZmlyc3QpOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1NpemU+CmlubGluZSB1bnNpZ25lZCBjaGFyKiBmaWxsX24odW5z aWduZWQgY2hhciogX19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXImIF9fYykKewogIGZpbGwoX19maXJzdCwgX19maXJzdCAr IF9fbiwgX19jKTsKICByZXR1cm4gX19maXJzdCArIF9fbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9T aXplPgppbmxpbmUgc2lnbmVkIGNoYXIqIGZpbGxfbihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24s CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpZ25lZCBjaGFyJiBfX2MpCnsKICBm aWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgcmV0dXJuIF9fZmlyc3QgKyBfX247 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfU2l6ZT4KaW5saW5lIGNoYXIqIGZpbGxfbihjaGFyKiBfX2Zp cnN0LCBfU2l6ZSBfX24sIGNvbnN0IGNoYXImIF9fYykKewogIGZpbGwoX19maXJzdCwgX19maXJz dCArIF9fbiwgX19jKTsKICByZXR1cm4gX19maXJzdCArIF9fbjsKfQoKCgoKCnRlbXBsYXRlIDxj bGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CnBhaXI8X0lucHV0SXRlcjEsIF9J bnB1dEl0ZXIyPiBtaXNtYXRjaChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikKewoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEg JiYgKl9fZmlyc3QxID09ICpfX2ZpcnN0MikgewogICAgKytfX2ZpcnN0MTsKICAgICsrX19maXJz dDI7CiAgfQogIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEs IF9fZmlyc3QyKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJ dGVyMiwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRl cjI+IG1pc21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVk KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYm IF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICArK19fZmlyc3QxOwog ICAgKytfX2ZpcnN0MjsKICB9CiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIy PihfX2ZpcnN0MSwgX19maXJzdDIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNs YXNzIF9JbnB1dEl0ZXIyPgppbmxpbmUgYm9vbCBlcXVhbChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwg X0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJz dDIpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBf X2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgaWYgKCEoKl9fZmlyc3QxID09ICpf X2ZpcnN0MikpCiAgICAgIHJldHVybiBmYWxzZTsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUg PGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0JpbmFyeVByZWRp Y2F0ZT4KaW5saW5lIGJvb2wgZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIx IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfQmluYXJ5 UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgZm9yICgg OyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgaWYgKCFf X2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgcmV0dXJuIGZhbHNlOwog IHJldHVybiB0cnVlOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBf SW5wdXRJdGVyMj4KYm9vbCBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2Zp cnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf SW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikKewoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwoKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmly c3QyICE9IF9fbGFzdDIKICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsKICAgIGlm ICgqX19maXJzdDEgPCAqX19maXJzdDIpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKCpfX2Zp cnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4gX19maXJz dDEgPT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBsZXhp Y29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19s YXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0Miwg X0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFy ZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBf X2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIKICAgICAgICA7ICsrX19maXJzdDEsICsrX19m aXJzdDIpIHsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICByZXR1 cm4gdHJ1ZTsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICByZXR1 cm4gZmFsc2U7CiAgfQogIHJldHVybiBfX2ZpcnN0MSA9PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9 IF9fbGFzdDI7Cn0KCmlubGluZSBib29sCmxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IHVu c2lnbmVkIGNoYXIqIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp Z25lZCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l ZCBjaGFyKiBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQg Y2hhciogX19sYXN0MikKewogIGNvbnN0IHNpemVfdCBfX2xlbjEgPSBfX2xhc3QxIC0gX19maXJz dDE7CiAgY29uc3Qgc2l6ZV90IF9fbGVuMiA9IF9fbGFzdDIgLSBfX2ZpcnN0MjsKICBjb25zdCBp bnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEsIF9fZmlyc3QyLCBtaW4oX19sZW4xLCBfX2xl bjIpKTsKICByZXR1cm4gX19yZXN1bHQgIT0gMCA/IF9fcmVzdWx0IDwgMCA6IF9fbGVuMSA8IF9f bGVuMjsKfQoKaW5saW5lIGJvb2wgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29uc3QgY2hhciog X19maXJzdDEsIGNvbnN0IGNoYXIqIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmlyc3QyLCBjb25zdCBjaGFyKiBfX2xhc3QyKQp7Cgog IHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZSgoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2Zp cnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFy KikgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25l ZCBjaGFyKikgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25z dCBzaWduZWQgY2hhciopIF9fbGFzdDIpOwoKCgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0 SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgppbnQgX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8z d2F5KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVy MiBfX2xhc3QyKQp7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0g X19sYXN0MikgewogICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAgICAgcmV0dXJuIC0x OwogICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgcmV0dXJuIDE7CiAgICArK19f Zmlyc3QxOwogICAgKytfX2ZpcnN0MjsKICB9CiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpIHsK ICAgIHJldHVybiAhKF9fZmlyc3QxID09IF9fbGFzdDEpOwogIH0KICBlbHNlIHsKICAgIHJldHVy biAtMTsKICB9Cn0KCmlubGluZSBpbnQKX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KGNv bnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MikKewogIGNvbnN0IHB0cmRp ZmZfdCBfX2xlbjEgPSBfX2xhc3QxIC0gX19maXJzdDE7CiAgY29uc3QgcHRyZGlmZl90IF9fbGVu MiA9IF9fbGFzdDIgLSBfX2ZpcnN0MjsKICBjb25zdCBpbnQgX19yZXN1bHQgPSBtZW1jbXAoX19m aXJzdDEsIF9fZmlyc3QyLCBtaW4oX19sZW4xLCBfX2xlbjIpKTsKICByZXR1cm4gX19yZXN1bHQg IT0gMCA/IF9fcmVzdWx0CiAgICAgICAgICAgICAgICAgICAgICAgOiAoX19sZW4xID09IF9fbGVu MiA/IDAgOiAoX19sZW4xIDwgX19sZW4yID8gLTEgOiAxKSk7Cn0KCmlubGluZSBpbnQKX19sZXhp Y29ncmFwaGljYWxfY29tcGFyZV8zd2F5KGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBjaGFy KiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19m aXJzdDIsIGNvbnN0IGNoYXIqIF9fbGFzdDIpCnsKCiAgcmV0dXJuIF9fbGV4aWNvZ3JhcGhpY2Fs X2NvbXBhcmVfM3dheSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2ln bmVkIGNoYXIqKSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29u c3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDIpOwoKCgoKCgp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgppbnQgbGV4aWNvZ3JhcGhpY2Fs X2NvbXBhcmVfM3dheShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9J bnB1dEl0ZXIyIF9fbGFzdDIpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHJl dHVybiBfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoX19maXJzdDEsIF9fbGFzdDEsIF9f Zmlyc3QyLCBfX2xhc3QyKTsKfQoKfQojIDM0ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIv aTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMK IyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu Y2x1ZGUvZysrL2JpdHMvc3RsX2FsbG9jLmgiIDEgMwojIDI4ICIvdXNyL2xvY2FsL2djYzMvbGli L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsbG9j LmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv My4wL2luY2x1ZGUvZysrL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwv Z2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9m dW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMt bGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAi L3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRl L2crKy9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBf X3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Mo dm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhy b3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0 IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBf X3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7 CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lk CiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy b3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5n ZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJv cihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29u c3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIq IF9fcyk7Cn0KIyAyOSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt Z251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKIyAxICIvdXNyL2xvY2Fs L2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMv c3RkX2NzdGRkZWYuaCIgMSAzCiMgMzAgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2 LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgMSAi L3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRl L2crKy9iaXRzL3N0ZF9jc3RkbGliLmgiIDEgMwojIDMxICIvdXNyL2xvY2FsL2djYzMvbGliL2dj Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsbG9jLmgi IDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z LjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0cmluZy5oIiAxIDMKIyAzMiAiL3Vzci9sb2NhbC9n Y2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0 bF9hbGxvYy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1s aW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2Nhc3NlcnQuaCIgMSAzCiMgMzcgIi91 c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9n KysvYml0cy9zdGRfY2Fzc2VydC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAxIDMK IyAzNSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVz LmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDIgMwojIDU4ICIvdXNyL2luY2x1 ZGUvYXNzZXJ0LmgiIDMKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIHZvaWQgX19hc3NlcnRfZmFpbCAo X19jb25zdCBjaGFyICpfX2Fzc2VydGlvbiwgX19jb25zdCBjaGFyICpfX2ZpbGUsIHVuc2lnbmVk IGludCBfX2xpbmUsIF9fY29uc3QgY2hhciAqX19mdW5jdGlvbikgdGhyb3cgKCkKCgoKICAgICBf X2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKZXh0ZXJuIHZvaWQgX19hc3NlcnRfcGVy cm9yX2ZhaWwgKGludCBfX2Vycm51bSwgX19jb25zdCBjaGFyICpfX2ZpbGUsIHVuc2lnbmVkIGlu dCBfX2xpbmUsIF9fY29uc3QgY2hhciAqX19mdW5jdGlvbikgdGhyb3cgKCkKCgoKICAgICBfX2F0 dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7Cgp9CiMgMzggIi91c3IvbG9jYWwvZ2NjMy9saWIv Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY2Fzc2Vy dC5oIiAyIDMKIyAzMyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt Z251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKCgoKCgojIDEgIi91c3Iv bG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysv Yml0cy9zdGxfdGhyZWFkcy5oIiAxIDMKIyAzOSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGli L2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF90aHJlYWRzLmgiIDMK bmFtZXNwYWNlIHN0ZAp7CiMgNTQgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBj LWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfdGhyZWFkcy5oIiAzCnN0cnVjdCBf UmVmY291bnRfQmFzZQp7CgoKCgogIHR5cGVkZWYgc2l6ZV90IF9SQ190OwoKCgogICB2b2xhdGls ZSBfUkNfdCBfTV9yZWZfY291bnQ7CiMgNzYgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAg X1JlZmNvdW50X0Jhc2UoX1JDX3QgX19uKSA6IF9NX3JlZl9jb3VudChfX24pIHt9CiMgMTExICIv dXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUv ZysrL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogIHZvaWQgX01faW5jcigpIHsgKytfTV9yZWZfY291 bnQ7IH0KICBfUkNfdCBfTV9kZWNyKCkgeyByZXR1cm4gLS1fTV9yZWZfY291bnQ7IH0KCn07CiMg MjAyICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu Y2x1ZGUvZysrL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogICAgc3RhdGljIGlubGluZSB1bnNpZ25l ZCBsb25nIF9BdG9taWNfc3dhcCh1bnNpZ25lZCBsb25nICogX19wLCB1bnNpZ25lZCBsb25nIF9f cSkgewogICAgICAgIHVuc2lnbmVkIGxvbmcgX19yZXN1bHQgPSAqX19wOwogICAgICAgICpfX3Ag PSBfX3E7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDIyMyAiL3Vzci9sb2NhbC9n Y2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0 bF90aHJlYWRzLmgiIDMKdGVtcGxhdGUgPGludCBfX2luc3Q+CnN0cnVjdCBfU1RMX211dGV4X3Nw aW4gewogIGVudW0geyBfX2xvd19tYXggPSAzMCwgX19oaWdoX21heCA9IDEwMDAgfTsKCgogIHN0 YXRpYyB1bnNpZ25lZCBfX21heDsKICBzdGF0aWMgdW5zaWduZWQgX19sYXN0Owp9OwoKdGVtcGxh dGUgPGludCBfX2luc3Q+CnVuc2lnbmVkIF9TVExfbXV0ZXhfc3BpbjxfX2luc3Q+OjpfX21heCA9 IF9TVExfbXV0ZXhfc3BpbjxfX2luc3Q+OjpfX2xvd19tYXg7Cgp0ZW1wbGF0ZSA8aW50IF9faW5z dD4KdW5zaWduZWQgX1NUTF9tdXRleF9zcGluPF9faW5zdD46Ol9fbGFzdCA9IDA7CgpzdHJ1Y3Qg X1NUTF9tdXRleF9sb2NrCnsKIyAzMjkgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2 LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAgdm9p ZCBfTV9pbml0aWFsaXplKCkge30KICB2b2lkIF9NX2FjcXVpcmVfbG9jaygpIHt9CiAgdm9pZCBf TV9yZWxlYXNlX2xvY2soKSB7fQoKfTsKIyAzNTUgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxp Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfdGhyZWFkcy5oIiAz CnN0cnVjdCBfU1RMX2F1dG9fbG9jawp7CiAgX1NUTF9tdXRleF9sb2NrJiBfTV9sb2NrOwoKICBf U1RMX2F1dG9fbG9jayhfU1RMX211dGV4X2xvY2smIF9fbG9jaykgOiBfTV9sb2NrKF9fbG9jaykK ICAgIHsgX01fbG9jay5fTV9hY3F1aXJlX2xvY2soKTsgfQogIH5fU1RMX2F1dG9fbG9jaygpIHsg X01fbG9jay5fTV9yZWxlYXNlX2xvY2soKTsgfQoKcHJpdmF0ZToKICB2b2lkIG9wZXJhdG9yPShj b25zdCBfU1RMX2F1dG9fbG9jayYpOwogIF9TVExfYXV0b19sb2NrKGNvbnN0IF9TVExfYXV0b19s b2NrJik7Cn07Cgp9CiMgMzkgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp bnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgNjggIi91c3Iv bG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysv Yml0cy9zdGxfYWxsb2MuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKdGVtcGxhdGUgPGludCBfX2lu c3Q+CmNsYXNzIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlIHsKCnByaXZhdGU6CgogIHN0YXRpYyB2 b2lkKiBfU19vb21fbWFsbG9jKHNpemVfdCk7CiAgc3RhdGljIHZvaWQqIF9TX29vbV9yZWFsbG9j KHZvaWQqLCBzaXplX3QpOwogIHN0YXRpYyB2b2lkICgqIF9fbWFsbG9jX2FsbG9jX29vbV9oYW5k bGVyKSgpOwoKcHVibGljOgoKICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICB7 CiAgICB2b2lkKiBfX3Jlc3VsdCA9IG1hbGxvYyhfX24pOwogICAgaWYgKDAgPT0gX19yZXN1bHQp IF9fcmVzdWx0ID0gX1Nfb29tX21hbGxvYyhfX24pOwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0K CiAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCApCiAgewogICAgZnJl ZShfX3ApOwogIH0KCiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3Qg LCBzaXplX3QgX19uZXdfc3opCiAgewogICAgdm9pZCogX19yZXN1bHQgPSByZWFsbG9jKF9fcCwg X19uZXdfc3opOwogICAgaWYgKDAgPT0gX19yZXN1bHQpIF9fcmVzdWx0ID0gX1Nfb29tX3JlYWxs b2MoX19wLCBfX25ld19zeik7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQoKICBzdGF0aWMgdm9p ZCAoKiBfX3NldF9tYWxsb2NfaGFuZGxlcih2b2lkICgqX19mKSgpKSkoKQogIHsKICAgIHZvaWQg KCogX19vbGQpKCkgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgIF9fbWFsbG9jX2Fs bG9jX29vbV9oYW5kbGVyID0gX19mOwogICAgcmV0dXJuKF9fb2xkKTsKICB9Cgp9OwoKCgp0ZW1w bGF0ZSA8aW50IF9faW5zdD4Kdm9pZCAoKiBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ OjpfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKSA9IDA7Cgp0ZW1wbGF0ZSA8aW50IF9faW5z dD4Kdm9pZCoKX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6X1Nfb29tX21hbGxvYyhz aXplX3QgX19uKQp7CiAgICB2b2lkICgqIF9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICB2b2lk KiBfX3Jlc3VsdDsKCiAgICBmb3IgKDs7KSB7CiAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9 IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAgICAgIGlmICgwID09IF9fbXlfbWFsbG9j X2hhbmRsZXIpIHsgc3RkOjpfX3Rocm93X2JhZF9hbGxvYygpOyB9CiAgICAgICAgKCpfX215X21h bGxvY19oYW5kbGVyKSgpOwogICAgICAgIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICAgICAg aWYgKF9fcmVzdWx0KSByZXR1cm4oX19yZXN1bHQpOwogICAgfQp9Cgp0ZW1wbGF0ZSA8aW50IF9f aW5zdD4Kdm9pZCogX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6X1Nfb29tX3JlYWxs b2Modm9pZCogX19wLCBzaXplX3QgX19uKQp7CiAgICB2b2lkICgqIF9fbXlfbWFsbG9jX2hhbmRs ZXIpKCk7CiAgICB2b2lkKiBfX3Jlc3VsdDsKCiAgICBmb3IgKDs7KSB7CiAgICAgICAgX19teV9t YWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAgICAgIGlmICgw ID09IF9fbXlfbWFsbG9jX2hhbmRsZXIpIHsgc3RkOjpfX3Rocm93X2JhZF9hbGxvYygpOyB9CiAg ICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAgIF9fcmVzdWx0ID0gcmVhbGxv YyhfX3AsIF9fbik7CiAgICAgICAgaWYgKF9fcmVzdWx0KSByZXR1cm4oX19yZXN1bHQpOwogICAg fQp9Cgp0eXBlZGVmIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPDA+IG1hbGxvY19hbGxvYzsKCnRl bXBsYXRlPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpjbGFzcyBzaW1wbGVfYWxsb2MgewoKcHVi bGljOgogICAgc3RhdGljIF9UcCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4g MCA9PSBfX24gPyAwIDogKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mIChfVHAp KTsgfQogICAgc3RhdGljIF9UcCogYWxsb2NhdGUodm9pZCkKICAgICAgeyByZXR1cm4gKF9UcCop IF9BbGxvYzo6YWxsb2NhdGUoc2l6ZW9mIChfVHApKTsgfQogICAgc3RhdGljIHZvaWQgZGVhbGxv Y2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAgICAgeyBpZiAoMCAhPSBfX24pIF9BbGxvYzo6 ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZiAoX1RwKSk7IH0KICAgIHN0YXRpYyB2b2lkIGRl YWxsb2NhdGUoX1RwKiBfX3ApCiAgICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgc2l6ZW9m IChfVHApKTsgfQp9OwoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpjbGFzcyBkZWJ1Z19h bGxvYyB7Cgpwcml2YXRlOgoKICBlbnVtIHtfU19leHRyYSA9IDh9OwoKCgpwdWJsaWM6CgogIHN0 YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3QgX19uKQogIHsKICAgIGNoYXIqIF9fcmVzdWx0ID0g KGNoYXIqKV9BbGxvYzo6YWxsb2NhdGUoX19uICsgKGludCkgX1NfZXh0cmEpOwogICAgKihzaXpl X3QqKV9fcmVzdWx0ID0gX19uOwogICAgcmV0dXJuIF9fcmVzdWx0ICsgKGludCkgX1NfZXh0cmE7 CiAgfQoKICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fbikKICB7 CiAgICBjaGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSAoaW50KSBfU19leHRyYTsKICAgICgo dm9pZCkgKCgqKHNpemVfdCopX19yZWFsX3AgPT0gX19uKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAo Iiooc2l6ZV90KilfX3JlYWxfcCA9PSBfX24iLCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGli L2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGxvYy5oIiwgMTkw LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICAgIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3Jl YWxfcCwgX19uICsgKGludCkgX1NfZXh0cmEpOwogIH0KCiAgc3RhdGljIHZvaWQqIHJlYWxsb2Nh dGUodm9pZCogX19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19zeikKICB7CiAgICBj aGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSAoaW50KSBfU19leHRyYTsKICAgICgodm9pZCkg KCgqKHNpemVfdCopX19yZWFsX3AgPT0gX19vbGRfc3opID8gMCA6IChfX2Fzc2VydF9mYWlsICgi KihzaXplX3QqKV9fcmVhbF9wID09IF9fb2xkX3N6IiwgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2Nj LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxsb2MuaCIs IDE5NywgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICBjaGFyKiBfX3Jlc3VsdCA9IChj aGFyKikKICAgICAgX0FsbG9jOjpyZWFsbG9jYXRlKF9fcmVhbF9wLCBfX29sZF9zeiArIChpbnQp IF9TX2V4dHJhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X3N6ICsg KGludCkgX1NfZXh0cmEpOwogICAgKihzaXplX3QqKV9fcmVzdWx0ID0gX19uZXdfc3o7CiAgICBy ZXR1cm4gX19yZXN1bHQgKyAoaW50KSBfU19leHRyYTsKICB9Cgp9OwoKCgoKdHlwZWRlZiBtYWxs b2NfYWxsb2MgYWxsb2M7CnR5cGVkZWYgbWFsbG9jX2FsbG9jIHNpbmdsZV9jbGllbnRfYWxsb2M7 CiMgNTI2ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w L2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsbG9jLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xh c3MgYWxsb2NhdG9yIHsKICB0eXBlZGVmIGFsbG9jIF9BbGxvYzsKcHVibGljOgogIHR5cGVkZWYg c2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAg dHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7 CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVm ZXJlbmNlOwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAx PiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOwogIH07 CgogIGFsbG9jYXRvcigpIHRocm93KCkge30KICBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yJikg dGhyb3coKSB7fQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBhbGxvY2F0b3IoY29uc3QgYWxsb2Nh dG9yPF9UcDE+JikgdGhyb3coKSB7fQogIH5hbGxvY2F0b3IoKSB0aHJvdygpIHt9CgogIHBvaW50 ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CiAgY29uc3Rf cG9pbnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7 IH0KCgoKICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewog ICAgcmV0dXJuIF9fbiAhPSAwID8gc3RhdGljX2Nhc3Q8X1RwKj4oX0FsbG9jOjphbGxvY2F0ZShf X24gKiBzaXplb2YoX1RwKSkpCiAgICAgICAgICAgICAgICAgICAgOiAwOwogIH0KCgogIHZvaWQg ZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKICAgIHsgX0FsbG9jOjpkZWFs bG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgp IGNvbnN0IHRocm93KCkKICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoK ICB2b2lkIGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19w KSBfVHAoX192YWwpOyB9CiAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgp OyB9Cn07Cgp0ZW1wbGF0ZTw+CmNsYXNzIGFsbG9jYXRvcjx2b2lkPiB7CnB1YmxpYzoKICB0eXBl ZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBl OwogIHR5cGVkZWYgdm9pZCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3Bv aW50ZXI7CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAx PiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOwogIH07 Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRv cj09KGNvbnN0IGFsbG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4mKQp7CiAgcmV0 dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wg b3BlcmF0b3IhPShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikK ewogIHJldHVybiBmYWxzZTsKfQojIDYwMiAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2 ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGxvYy5oIiAzCnRlbXBs YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9fYWxsb2NhdG9yIHsKICBfQWxs b2MgX191bmRlcmx5aW5nX2FsbG9jOwoKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlw ZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwog IHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVu Y2U7CiAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIF9UcCB2 YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0 eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7CiAgfTsKCiAgX19hbGxvY2F0 b3IoKSB0aHJvdygpIHt9CiAgX19hbGxvY2F0b3IoY29uc3QgX19hbGxvY2F0b3ImIF9fYSkgdGhy b3coKQogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5kZXJseWluZ19hbGxvYykge30K ICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4KICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRvcjxf VHAxLCBfQWxsb2M+JiBfX2EpIHRocm93KCkKICAgIDogX191bmRlcmx5aW5nX2FsbG9jKF9fYS5f X3VuZGVybHlpbmdfYWxsb2MpIHt9CiAgfl9fYWxsb2NhdG9yKCkgdGhyb3coKSB7fQoKICBwb2lu dGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQogIGNvbnN0 X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194 OyB9CgoKICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewog ICAgcmV0dXJuIF9fbiAhPSAwCiAgICAgICAgPyBzdGF0aWNfY2FzdDxfVHAqPihfX3VuZGVybHlp bmdfYWxsb2MuYWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKQogICAgICAgIDogMDsKICB9CgoK ICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlwZSBfX24pCiAgICB7IF9fdW5k ZXJseWluZ19hbGxvYy5kZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9CgogIHNp emVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkKICAgIHsgcmV0dXJuIHNpemVfdCgtMSkg LyBzaXplb2YoX1RwKTsgfQoKICB2b2lkIGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1Rw JiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192YWwpOyB9CiAgdm9pZCBkZXN0cm95KHBvaW50ZXIg X19wKSB7IF9fcC0+fl9UcCgpOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpjbGFzcyBf X2FsbG9jYXRvcjx2b2lkLCBfQWxsb2M+IHsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAg dHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCogcG9pbnRl cjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHZh bHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5 cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsKICB9Owp9OwoKdGVtcGxhdGUg PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9f YWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICByZXR1cm4gX19hMS5fX3VuZGVy bHlpbmdfYWxsb2MgPT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX2FsbG9j YXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19h bGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2EyKQp7CiAgcmV0dXJuIF9fYTEuX191bmRlcmx5aW5n X2FsbG9jICE9IF9fYTIuX191bmRlcmx5aW5nX2FsbG9jOwp9CgoKCgoKdGVtcGxhdGUgPGludCBp bnN0PgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRl PGluc3Q+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxvY190ZW1w bGF0ZTxpbnN0PiYpCnsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGludCBfX2luc3Q+Cmlu bGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0 PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8 X19pbnN0PiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+Cmlu bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsKICByZXR1cm4gdHJ1 ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25z dCBkZWJ1Z19hbGxvYzxfQWxsb2M+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWJ1 Z19hbGxvYzxfQWxsb2M+JikgewogIHJldHVybiBmYWxzZTsKfQojIDczMiAiL3Vzci9sb2NhbC9n Y2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0 bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3I+CnN0cnVj dCBfQWxsb2NfdHJhaXRzCnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSBm YWxzZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDxfVHA+ OjpvdGhlciBhbGxvY2F0b3JfdHlwZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B bGxvY2F0b3I+CmNvbnN0IGJvb2wgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjpfU19p bnN0YW5jZWxlc3M7CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDE+CnN0cnVjdCBf QWxsb2NfdHJhaXRzPF9UcCwgYWxsb2NhdG9yPF9UcDE+ID4KewogIHN0YXRpYyBjb25zdCBib29s IF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBhbGxv Yz4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwPiBhbGxvY2F0b3JfdHlwZTsK fTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFp dHM8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4KewogIHN0YXRpYyBjb25z dCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1Rw LCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRl ZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBhbGxv Y2F0b3JfdHlwZTsKfTsKIyA3NzQgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBj LWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxsb2MuaCIgMwp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgZGVidWdf YWxsb2M8X0FsbG9jPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0 cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9B bGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAx LCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsCiAgICAgICAgICAgICAgICAg ICAgIF9fYWxsb2NhdG9yPF9UcDEsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiA+ CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYg c2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IF9BbGxv Y190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0 ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CiMgODA4ICIvdXNyL2xvY2FsL2djYzMvbGli L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsbG9j LmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwgY2xhc3MgX0FsbG9jPgpzdHJ1 Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fYWxsb2NhdG9yPF9UcDEsIGRlYnVnX2FsbG9jPF9BbGxv Yz4gPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5 cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9BbGxvY190eXBl OwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2Nh dG9yX3R5cGU7Cn07Cgp9CiMgMzUgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBj LWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfdmVjdG9yLmgiIDIgMwojIDEgIi91 c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9n KysvYml0cy9zdGxfY29uc3RydWN0LmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2djYzMvbGliL2dj Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2NvbnN0cnVj dC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251 LzMuMC9pbmNsdWRlL2crKy9uZXciIDEgMwojIDM1ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1s aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2NvbnN0cnVjdC5o IiAyIDMKCm5hbWVzcGFjZSBzdGQKewojIDQ3ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIv aTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAz CnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIHZvaWQgX0NvbnN0cnVjdChf VDEqIF9fcCwgY29uc3QgX1QyJiBfX3ZhbHVlKSB7Cm5ldyAoKHZvaWQqKSBfX3ApIF9UMShfX3Zh bHVlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMT4KaW5saW5lIHZvaWQgX0NvbnN0cnVjdChfVDEq IF9fcCkgewogIG5ldyAoKHZvaWQqKSBfX3ApIF9UMSgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw PgppbmxpbmUgdm9pZCBfRGVzdHJveShfVHAqIF9fcG9pbnRlcikgewogIF9fcG9pbnRlci0+fl9U cCgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4Kdm9pZApfX2Rlc3Ryb3lf YXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIF9f ZmFsc2VfdHlwZSkKewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAg IGRlc3Ryb3koJipfX2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+ CmlubGluZSB2b2lkIF9fZGVzdHJveV9hdXgoX0ZvcndhcmRJdGVyYXRvciwgX0ZvcndhcmRJdGVy YXRvciwgX190cnVlX3R5cGUpIHt9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwg Y2xhc3MgX1RwPgppbmxpbmUgdm9pZApfX2Rlc3Ryb3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0 LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgX1RwKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190 eXBlX3RyYWl0czxfVHA+OjpoYXNfdHJpdmlhbF9kZXN0cnVjdG9yCiAgICAgICAgICBfVHJpdmlh bF9kZXN0cnVjdG9yOwogIF9fZGVzdHJveV9hdXgoX19maXJzdCwgX19sYXN0LCBfVHJpdmlhbF9k ZXN0cnVjdG9yKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KaW5saW5l IHZvaWQgX0Rlc3Ryb3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9y IF9fbGFzdCkgewogIF9fZGVzdHJveShfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWVfdHlwZShfX2Zp cnN0KSk7Cn0KCmlubGluZSB2b2lkIF9EZXN0cm95KGNoYXIqLCBjaGFyKikge30KaW5saW5lIHZv aWQgX0Rlc3Ryb3koaW50KiwgaW50Kikge30KaW5saW5lIHZvaWQgX0Rlc3Ryb3kobG9uZyosIGxv bmcqKSB7fQppbmxpbmUgdm9pZCBfRGVzdHJveShmbG9hdCosIGZsb2F0Kikge30KaW5saW5lIHZv aWQgX0Rlc3Ryb3koZG91YmxlKiwgZG91YmxlKikge30KaW5saW5lIHZvaWQgX0Rlc3Ryb3kod2No YXJfdCosIHdjaGFyX3QqKSB7fQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgpp bmxpbmUgdm9pZCBjb25zdHJ1Y3QoX1QxKiBfX3AsIGNvbnN0IF9UMiYgX192YWx1ZSkgewogIF9D b25zdHJ1Y3QoX19wLCBfX3ZhbHVlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMT4KaW5saW5lIHZv aWQgY29uc3RydWN0KF9UMSogX19wKSB7CiAgX0NvbnN0cnVjdChfX3ApOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwPgppbmxpbmUgdm9pZCBkZXN0cm95KF9UcCogX19wb2ludGVyKSB7CiAgX0Rlc3Ry b3koX19wb2ludGVyKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CmlubGlu ZSB2b2lkIGRlc3Ryb3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9y IF9fbGFzdCkgewogIF9EZXN0cm95KF9fZmlyc3QsIF9fbGFzdCk7Cn0KCn0KIyAzNiAiL3Vzci9s b2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9i aXRzL3N0ZF92ZWN0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2 ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgi IDEgMwojIDM0ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv My4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwojIDEgIi91c3IvbG9j YWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0 cy9zdGRfY3N0cmluZy5oIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2 ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgi IDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs YXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfY29w eV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAg ICAgIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJuIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs dCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9G b3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBf SW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBf X3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkKewogIF9Gb3J3 YXJkSXRlciBfX2N1ciA9IF9fcmVzdWx0OwogIHRyeSB7CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0g X19sYXN0OyArK19fZmlyc3QsICsrX19jdXIpCiAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgKl9f Zmlyc3QpOwogICAgcmV0dXJuIF9fY3VyOwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3koX19y ZXN1bHQsIF9fY3VyKTsgdGhyb3c7IH07Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwg Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBfRm9yd2FyZEl0ZXIKX191bmlu aXRpYWxpemVkX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LCBfVHAqKQp7CiAgdHlwZWRl ZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgcmV0 dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBf SXNfUE9EKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJ dGVyPgppbmxpbmUgX0ZvcndhcmRJdGVyCiAgdW5pbml0aWFsaXplZF9jb3B5KF9JbnB1dEl0ZXIg X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJk SXRlciBfX3Jlc3VsdCkKewogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBf X2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5 cGUoX19yZXN1bHQpKTsKfQoKaW5saW5lIGNoYXIqIHVuaW5pdGlhbGl6ZWRfY29weShjb25zdCBj aGFyKiBfX2ZpcnN0LCBjb25zdCBjaGFyKiBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2hhciogX19yZXN1bHQpIHsKICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBf X2xhc3QgLSBfX2ZpcnN0KTsKICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7 Cn0KCmlubGluZSB3Y2hhcl90Kgp1bmluaXRpYWxpemVkX2NvcHkoY29uc3Qgd2NoYXJfdCogX19m aXJzdCwgY29uc3Qgd2NoYXJfdCogX19sYXN0LAogICAgICAgICAgICAgICAgICAgd2NoYXJfdCog X19yZXN1bHQpCnsKICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBzaXplb2Yod2NoYXJfdCkg KiAoX19sYXN0IC0gX19maXJzdCkpOwogIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2Zp cnN0KTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNz IF9Gb3J3YXJkSXRlcj4KcGFpcjxfSW5wdXRJdGVyLCBfRm9yd2FyZEl0ZXI+Cl9fdW5pbml0aWFs aXplZF9jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICAg ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAg ICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX3Jlc3VsdDsK ICB0cnkgewogICAgZm9yICggOyBfX2NvdW50ID4gMCA7IC0tX19jb3VudCwgKytfX2ZpcnN0LCAr K19fY3VyKQogICAgICBfQ29uc3RydWN0KCYqX19jdXIsICpfX2ZpcnN0KTsKICAgIHJldHVybiBw YWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19jdXIpOwogIH0KICBjYXRj aCguLi4pIHsgX0Rlc3Ryb3koX19yZXN1bHQsIF9fY3VyKTsgdGhyb3c7IH07Cn0KCnRlbXBsYXRl IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRl cj4KaW5saW5lIHBhaXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9Gb3J3YXJkSXRlcj4KX191bmluaXRp YWxpemVkX2NvcHlfbihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAog ICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAg ICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIF9SYW5kb21BY2Nlc3NJ dGVyIF9fbGFzdCA9IF9fZmlyc3QgKyBfX2NvdW50OwogIHJldHVybiBwYWlyPF9SYW5kb21BY2Nl c3NJdGVyLCBfRm9yd2FyZEl0ZXI+KAogICAgICAgICAgICAgICAgIF9fbGFzdCwKICAgICAgICAg ICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCkpOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJk SXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwgX0ZvcndhcmRJdGVyPgpfX3VuaW5pdGlhbGl6 ZWRfY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgICAg ICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXpl ZF9jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxj bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUg cGFpcjxfSW5wdXRJdGVyLCBfRm9yd2FyZEl0ZXI+CnVuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1 dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgICAgICAgICAgICAgX0Zvcndh cmRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X24oX19maXJz dCwgX19jb3VudCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19p dGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk SXRlciwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZApfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0Zv cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBfVHAmIF9feCwgX190cnVlX3R5cGUpCnsKICBmaWxsKF9fZmlyc3QsIF9f bGFzdCwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgp2 b2lkCl9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zvcndh cmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBf X2ZhbHNlX3R5cGUpCnsKICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogIHRyeSB7CiAg ICBmb3IgKCA7IF9fY3VyICE9IF9fbGFzdDsgKytfX2N1cikKICAgICAgX0NvbnN0cnVjdCgmKl9f Y3VyLCBfX3gpOwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3koX19maXJzdCwgX19jdXIpOyB0 aHJvdzsgfTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFz cyBfVHAxPgppbmxpbmUgdm9pZCBfX3VuaW5pdGlhbGl6ZWRfZmlsbChfRm9yd2FyZEl0ZXIgX19m aXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFz dCwgY29uc3QgX1RwJiBfX3gsIF9UcDEqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJh aXRzPF9UcDE+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogIF9fdW5pbml0aWFsaXplZF9maWxsX2F1 eChfX2ZpcnN0LCBfX2xhc3QsIF9feCwgX0lzX1BPRCgpKTsKCn0KCnRlbXBsYXRlIDxjbGFzcyBf Rm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgdW5pbml0aWFsaXplZF9maWxsKF9G b3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zvcndh cmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYg X194KQp7CiAgX191bmluaXRpYWxpemVkX2ZpbGwoX19maXJzdCwgX19sYXN0LCBfX3gsIF9fdmFs dWVfdHlwZShfX2ZpcnN0KSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xh c3MgX1NpemUsIGNsYXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRf ZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX190cnVlX3R5cGUpCnsKICByZXR1cm4gZmls bF9uKF9fZmlyc3QsIF9fbiwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg Y2xhc3MgX1NpemUsIGNsYXNzIF9UcD4KX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9maWxs X25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpCnsKICBfRm9yd2FyZEl0ZXIg X19jdXIgPSBfX2ZpcnN0OwogIHRyeSB7CiAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19f Y3VyKQogICAgICBfQ29uc3RydWN0KCYqX19jdXIsIF9feCk7CiAgICByZXR1cm4gX19jdXI7CiAg fQogIGNhdGNoKC4uLikgeyBfRGVzdHJveShfX2ZpcnN0LCBfX2N1cik7IHRocm93OyB9Owp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwLCBjbGFz cyBfVHAxPgppbmxpbmUgX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9maWxsX24oX0Zvcndh cmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3gsIF9UcDEqKQp7CiAgdHlw ZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcDE+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwog IHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfX2ZpcnN0LCBfX24sIF9feCwgX0lz X1BPRCgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNs YXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRlcgp1bmluaXRpYWxpemVkX2ZpbGxfbihfRm9yd2Fy ZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9feCkKewogIHJldHVybiBfX3Vu aW5pdGlhbGl6ZWRfZmlsbF9uKF9fZmlyc3QsIF9fbiwgX194LCBfX3ZhbHVlX3R5cGUoX19maXJz dCkpOwp9CiMgMjMxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n bnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwp0ZW1wbGF0ZSA8 Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+ CmlubGluZSBfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2NvcHlfY29weShfSW5wdXRJdGVy MSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAg ICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAg ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpCnsKICBfRm9yd2FyZEl0ZXIgX19t aWQgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICB0 cnkgewogICAgcmV0dXJuIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MiwgX19sYXN0MiwgX19t aWQpOwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3koX19yZXN1bHQsIF9fbWlkKTsgdGhyb3c7 IH07Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3Mg X0lucHV0SXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9jb3B5 KF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwgX0ZvcndhcmRJdGVyIF9fbWlkLAogICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9J bnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QpCnsKICB1bmluaXRpYWxpemVkX2Zp bGwoX19yZXN1bHQsIF9fbWlkLCBfX3gpOwogIHRyeSB7CiAgICByZXR1cm4gdW5pbml0aWFsaXpl ZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19taWQpOwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ry b3koX19yZXN1bHQsIF9fbWlkKTsgdGhyb3c7IH07Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5w dXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQKX191bmlu aXRpYWxpemVkX2NvcHlfZmlsbChfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFz dDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9y d2FyZEl0ZXIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9f eCkKewogIF9Gb3J3YXJkSXRlciBfX21pZDIgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEs IF9fbGFzdDEsIF9fZmlyc3QyKTsKICB0cnkgewogICAgdW5pbml0aWFsaXplZF9maWxsKF9fbWlk MiwgX19sYXN0MiwgX194KTsKICB9CiAgY2F0Y2goLi4uKSB7IF9EZXN0cm95KF9fZmlyc3QyLCBf X21pZDIpOyB0aHJvdzsgfTsKfQoKfQojIDM3ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIv aTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMK IyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu Y2x1ZGUvZysrL2JpdHMvc3RsX3ZlY3Rvci5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9nY2MzL2xp Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF92ZWN0 b3IuaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu dS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAxIDMKIyAz NSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNs dWRlL2crKy9iaXRzL3N0bF92ZWN0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9n Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL2Z1bmN0ZXhjZXB0 LmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n bnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvZnVuY3RleGNlcHQuaCIgMwojIDEgIi91c3IvbG9jYWwv Z2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvZXhjZXB0 aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2 LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5h bWVzcGFjZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAg dm9pZAogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nh c3Qodm9pZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAg X190aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19k b21haW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9h cmd1bWVudChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3Io Y29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNo YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19z KTsKCiAgdm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9p ZAogIF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9f dGhyb3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJv d19pb3NfZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgMzYgIi91c3IvbG9jYWwvZ2NjMy9s aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfdmVj dG9yLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4 LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9jb25jZXB0X2NoZWNrLmgiIDEgMwojIDM3ICIvdXNy L2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysr L2JpdHMvc3RsX3ZlY3Rvci5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewojIDQ4ICIvdXNyL2xvY2Fs L2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMv c3RsX3ZlY3Rvci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3IsIGJv b2wgX0lzU3RhdGljPgpjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2UgewpwdWJsaWM6CiAgdHlwZWRl ZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBl CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9y KCkgY29uc3QgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3I7IH0KCiAgX1ZlY3Rvcl9hbGxvY19i YXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9NX2RhdGFfYWxsb2NhdG9yKF9f YSksIF9NX3N0YXJ0KDApLCBfTV9maW5pc2goMCksIF9NX2VuZF9vZl9zdG9yYWdlKDApCiAge30K CnByb3RlY3RlZDoKICBhbGxvY2F0b3JfdHlwZSBfTV9kYXRhX2FsbG9jYXRvcjsKICBfVHAqIF9N X3N0YXJ0OwogIF9UcCogX01fZmluaXNoOwogIF9UcCogX01fZW5kX29mX3N0b3JhZ2U7CgogIF9U cCogX01fYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9y LmFsbG9jYXRlKF9fbik7IH0KICB2b2lkIF9NX2RlYWxsb2NhdGUoX1RwKiBfX3AsIHNpemVfdCBf X24pCiAgICB7IGlmIChfX3ApIF9NX2RhdGFfYWxsb2NhdG9yLmRlYWxsb2NhdGUoX19wLCBfX24p OyB9Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3I+CmNsYXNzIF9W ZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxvY2F0b3IsIHRydWU+IHsKcHVibGljOgogIHR5cGVk ZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlw ZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRv cigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0KCiAgX1ZlY3Rvcl9hbGxvY19i YXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikKICAgIDogX01fc3RhcnQoMCksIF9NX2ZpbmlzaCgw KSwgX01fZW5kX29mX3N0b3JhZ2UoMCkKICB7fQoKcHJvdGVjdGVkOgogIF9UcCogX01fc3RhcnQ7 CiAgX1RwKiBfTV9maW5pc2g7CiAgX1RwKiBfTV9lbmRfb2Zfc3RvcmFnZTsKCiAgdHlwZWRlZiB0 eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46Ol9BbGxvY190eXBlIF9BbGxv Y190eXBlOwogIF9UcCogX01fYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9BbGxv Y190eXBlOjphbGxvY2F0ZShfX24pOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlKF9UcCogX19wLCBz aXplX3QgX19uKQogICAgeyBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfX3AsIF9fbik7fQp9OwoK dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX1ZlY3Rvcl9iYXNlCiAg OiBwdWJsaWMgX1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNz Pgp7CiAgdHlwZWRlZiBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNl bGVzcz4KICAgICAgICAgIF9CYXNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRv cl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICBfVmVjdG9yX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5 cGUmIF9fYSkgOiBfQmFzZShfX2EpIHt9CiAgX1ZlY3Rvcl9iYXNlKHNpemVfdCBfX24sIGNvbnN0 IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7CiAgICBfTV9zdGFydCA9IF9NX2Fs bG9jYXRlKF9fbik7CiAgICBfTV9maW5pc2ggPSBfTV9zdGFydDsKICAgIF9NX2VuZF9vZl9zdG9y YWdlID0gX01fc3RhcnQgKyBfX247CiAgfQoKICB+X1ZlY3Rvcl9iYXNlKCkgeyBfTV9kZWFsbG9j YXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsgfQp9OwoKCnRlbXBs YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjxfVHA+ID4KY2xhc3MgdmVj dG9yIDogcHJvdGVjdGVkIF9WZWN0b3JfYmFzZTxfVHAsIF9BbGxvYz4KewoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKcHJpdmF0ZToKICB0 eXBlZGVmIF9WZWN0b3JfYmFzZTxfVHAsIF9BbGxvYz4gX0Jhc2U7CiAgdHlwZWRlZiB2ZWN0b3I8 X1RwLCBfQWxsb2M+IHZlY3Rvcl90eXBlOwpwdWJsaWM6CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlw ZTsKICB0eXBlZGVmIHZhbHVlX3R5cGUqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90 eXBlKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgX19ub3JtYWxfaXRlcmF0b3I8cG9pbnRlciwg dmVjdG9yX3R5cGU+IGl0ZXJhdG9yOwogIHR5cGVkZWYgX19ub3JtYWxfaXRlcmF0b3I8Y29uc3Rf cG9pbnRlciwgdmVjdG9yX3R5cGU+IGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgdmFsdWVfdHlw ZSYgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNl OwogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJl bmNlX3R5cGU7CgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9j YXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVy biBfQmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9CgogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxj b25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHJldmVyc2Vf aXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7Cgpwcm90ZWN0ZWQ6CiAgdXNpbmcg X0Jhc2U6Ol9NX2FsbG9jYXRlOwogIHVzaW5nIF9CYXNlOjpfTV9kZWFsbG9jYXRlOwogIHVzaW5n IF9CYXNlOjpfTV9zdGFydDsKICB1c2luZyBfQmFzZTo6X01fZmluaXNoOwogIHVzaW5nIF9CYXNl OjpfTV9lbmRfb2Zfc3RvcmFnZTsKCnByb3RlY3RlZDoKICB2b2lkIF9NX2luc2VydF9hdXgoaXRl cmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpOwogIHZvaWQgX01faW5zZXJ0X2F1eChp dGVyYXRvciBfX3Bvc2l0aW9uKTsKCnB1YmxpYzoKICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJu IGl0ZXJhdG9yIChfTV9zdGFydCk7IH0KICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0CiAg ICB7IHJldHVybiBjb25zdF9pdGVyYXRvciAoX01fc3RhcnQpOyB9CiAgaXRlcmF0b3IgZW5kKCkg eyByZXR1cm4gaXRlcmF0b3IgKF9NX2ZpbmlzaCk7IH0KICBjb25zdF9pdGVyYXRvciBlbmQoKSBj b25zdCB7IHJldHVybiBjb25zdF9pdGVyYXRvciAoX01fZmluaXNoKTsgfQoKICByZXZlcnNlX2l0 ZXJhdG9yIHJiZWdpbigpCiAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQog IGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0 X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkKICAg IHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0 ZXJhdG9yIHJlbmQoKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihi ZWdpbigpKTsgfQoKICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0CiAgICB7IHJldHVybiBzaXplX3R5 cGUoZW5kKCkgLSBiZWdpbigpKTsgfQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0CiAgICB7 IHJldHVybiBzaXplX3R5cGUoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KICBzaXplX3R5cGUgY2FwYWNp dHkoKSBjb25zdAogICAgeyByZXR1cm4gc2l6ZV90eXBlKGNvbnN0X2l0ZXJhdG9yKF9NX2VuZF9v Zl9zdG9yYWdlKSAtIGJlZ2luKCkpOyB9CiAgYm9vbCBlbXB0eSgpIGNvbnN0CiAgICB7IHJldHVy biBiZWdpbigpID09IGVuZCgpOyB9CgogIHJlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBf X24pIHsgcmV0dXJuICooYmVnaW4oKSArIF9fbik7IH0KICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0 b3JbXShzaXplX3R5cGUgX19uKSBjb25zdCB7IHJldHVybiAqKGJlZ2luKCkgKyBfX24pOyB9Cgog IHZvaWQgX01fcmFuZ2VfY2hlY2soc2l6ZV90eXBlIF9fbikgY29uc3QgewogICAgaWYgKF9fbiA+ PSB0aGlzLT5zaXplKCkpCiAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJ2ZWN0b3IiKTsKICB9 CgogIHJlZmVyZW5jZSBhdChzaXplX3R5cGUgX19uKQogICAgeyBfTV9yYW5nZV9jaGVjayhfX24p OyByZXR1cm4gKCp0aGlzKVtfX25dOyB9CiAgY29uc3RfcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBf X24pIGNvbnN0CiAgICB7IF9NX3JhbmdlX2NoZWNrKF9fbik7IHJldHVybiAoKnRoaXMpW19fbl07 IH0KCiAgZXhwbGljaXQgdmVjdG9yKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0 b3JfdHlwZSgpKQogICAgOiBfQmFzZShfX2EpIHt9CgogIHZlY3RvcihzaXplX3R5cGUgX19uLCBj b25zdCBfVHAmIF9fdmFsdWUsCiAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBh bGxvY2F0b3JfdHlwZSgpKQogICAgOiBfQmFzZShfX24sIF9fYSkKICAgIHsgX01fZmluaXNoID0g dW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX192YWx1ZSk7IH0KCiAgZXhwbGlj aXQgdmVjdG9yKHNpemVfdHlwZSBfX24pCiAgICA6IF9CYXNlKF9fbiwgYWxsb2NhdG9yX3R5cGUo KSkKICAgIHsgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwg X1RwKCkpOyB9CgogIHZlY3Rvcihjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpCiAgICA6 IF9CYXNlKF9feC5zaXplKCksIF9feC5nZXRfYWxsb2NhdG9yKCkpCiAgICB7IF9NX2ZpbmlzaCA9 IHVuaW5pdGlhbGl6ZWRfY29weShfX3guYmVnaW4oKSwgX194LmVuZCgpLCBfTV9zdGFydCk7IH0K CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2ZWN0b3IoX0lucHV0SXRlcmF0 b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICBjb25zdCBhbGxvY2F0 b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkgOiBfQmFzZShfX2EpIHsKICAgIHR5cGVk ZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVn cmFsOwogICAgX01faW5pdGlhbGl6ZV9hdXgoX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7 CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9pbml0aWFsaXplX2F1 eChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsdWUsIF9fdHJ1ZV90eXBlKSB7CiAgICBfTV9z dGFydCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0 ICsgX19uOwogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9f biwgX192YWx1ZSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9p ZCBfTV9pbml0aWFsaXplX2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRv ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsKICAgIF9N X3JhbmdlX2luaXRpYWxpemUoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9f Zmlyc3QpKTsKICB9CgogIH52ZWN0b3IoKSB7IGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7 IH0KCiAgdmVjdG9yPF9UcCwgX0FsbG9jPiYgb3BlcmF0b3I9KGNvbnN0IHZlY3RvcjxfVHAsIF9B bGxvYz4mIF9feCk7CiAgdm9pZCByZXNlcnZlKHNpemVfdHlwZSBfX24pIHsKICAgIGlmIChjYXBh Y2l0eSgpIDwgX19uKSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgp OwogICAgICBwb2ludGVyIF9fdG1wID0gX01fYWxsb2NhdGVfYW5kX2NvcHkoX19uLCBfTV9zdGFy dCwgX01fZmluaXNoKTsKICAgICAgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgICAg X01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAg ICAgIF9NX3N0YXJ0ID0gX190bXA7CiAgICAgIF9NX2ZpbmlzaCA9IF9fdG1wICsgX19vbGRfc2l6 ZTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsKICAgIH0KICB9CgoK CgoKCiAgdm9pZCBhc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCkgeyBfTV9m aWxsX2Fzc2lnbihfX24sIF9fdmFsKTsgfQogIHZvaWQgX01fZmlsbF9hc3NpZ24oc2l6ZV90eXBl IF9fbiwgY29uc3QgX1RwJiBfX3ZhbCk7CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRv cj4KICB2b2lkIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf X2xhc3QpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+ OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgX01fYXNzaWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9f bGFzdCwgX0ludGVncmFsKCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZv aWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1 ZV90eXBlKQogICAgeyBfTV9maWxsX2Fzc2lnbigoc2l6ZV90eXBlKSBfX24sIChfVHApIF9fdmFs KTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4KICB2b2lkIF9NX2Fzc2lnbl9kaXNw YXRjaChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfX2ZhbHNlX3R5cGUp CiAgICB7IF9NX2Fzc2lnbl9hdXgoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5 KF9fZmlyc3QpKTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBf TV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFz dCwKICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsKCiAgdGVtcGxhdGUg PGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9hc3NpZ25fYXV4KF9Gb3J3YXJkSXRl cmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg ICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKTsKCiAgcmVmZXJlbmNlIGZyb250KCkgeyByZXR1cm4g KmJlZ2luKCk7IH0KICBjb25zdF9yZWZlcmVuY2UgZnJvbnQoKSBjb25zdCB7IHJldHVybiAqYmVn aW4oKTsgfQogIHJlZmVyZW5jZSBiYWNrKCkgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CiAgY29u c3RfcmVmZXJlbmNlIGJhY2soKSBjb25zdCB7IHJldHVybiAqKGVuZCgpIC0gMSk7IH0KCiAgdm9p ZCBwdXNoX2JhY2soY29uc3QgX1RwJiBfX3gpIHsKICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5k X29mX3N0b3JhZ2UpIHsKICAgICAgY29uc3RydWN0KF9NX2ZpbmlzaCwgX194KTsKICAgICAgKytf TV9maW5pc2g7CiAgICB9CiAgICBlbHNlCiAgICAgIF9NX2luc2VydF9hdXgoZW5kKCksIF9feCk7 CiAgfQogIHZvaWQgcHVzaF9iYWNrKCkgewogICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zf c3RvcmFnZSkgewogICAgICBjb25zdHJ1Y3QoX01fZmluaXNoKTsKICAgICAgKytfTV9maW5pc2g7 CiAgICB9CiAgICBlbHNlCiAgICAgIF9NX2luc2VydF9hdXgoZW5kKCkpOwogIH0KICB2b2lkIHN3 YXAodmVjdG9yPF9UcCwgX0FsbG9jPiYgX194KSB7CiAgICBzdGQ6OnN3YXAoX01fc3RhcnQsIF9f eC5fTV9zdGFydCk7CiAgICBzdGQ6OnN3YXAoX01fZmluaXNoLCBfX3guX01fZmluaXNoKTsKICAg IHN0ZDo6c3dhcChfTV9lbmRfb2Zfc3RvcmFnZSwgX194Ll9NX2VuZF9vZl9zdG9yYWdlKTsKICB9 CgogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkg ewogICAgc2l6ZV90eXBlIF9fbiA9IF9fcG9zaXRpb24gLSBiZWdpbigpOwogICAgaWYgKF9NX2Zp bmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSAmJiBfX3Bvc2l0aW9uID09IGVuZCgpKSB7CiAgICAg IGNvbnN0cnVjdChfTV9maW5pc2gsIF9feCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAg ZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yKF9fcG9zaXRpb24pLCBfX3gpOwogICAg cmV0dXJuIGJlZ2luKCkgKyBfX247CiAgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBfX3Bv c2l0aW9uKSB7CiAgICBzaXplX3R5cGUgX19uID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7CiAgICBp ZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRpb24gPT0gZW5kKCkp IHsKICAgICAgY29uc3RydWN0KF9NX2ZpbmlzaCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQog ICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yKF9fcG9zaXRpb24pKTsKICAgIHJl dHVybiBiZWdpbigpICsgX19uOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y PgogIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf SW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8 X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgX01faW5zZXJ0X2Rpc3Bh dGNoKF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICB9CgogIHRlbXBsYXRl IDxjbGFzcyBfSW50ZWdlcj4KICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3Bv cywgX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAg ICBfX3RydWVfdHlwZSkKICAgIHsgX01fZmlsbF9pbnNlcnQoX19wb3MsIChzaXplX3R5cGUpIF9f biwgKF9UcCkgX192YWwpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2 b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAg ICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAgICBfTV9yYW5nZV9pbnNl cnQoX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7 CiAgfQoKICB2b2lkIGluc2VydCAoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0 IF9UcCYgX194KQogICAgeyBfTV9maWxsX2luc2VydChfX3BvcywgX19uLCBfX3gpOyB9CgogIHZv aWQgX01fZmlsbF9pbnNlcnQgKGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBf VHAmIF9feCk7CgogIHZvaWQgcG9wX2JhY2soKSB7CiAgICAtLV9NX2ZpbmlzaDsKICAgIGRlc3Ry b3koX01fZmluaXNoKTsKICB9CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikg ewogICAgaWYgKF9fcG9zaXRpb24gKyAxICE9IGVuZCgpKQogICAgICBjb3B5KF9fcG9zaXRpb24g KyAxLCBlbmQoKSwgX19wb3NpdGlvbik7CiAgICAtLV9NX2ZpbmlzaDsKICAgIGRlc3Ryb3koX01f ZmluaXNoKTsKICAgIHJldHVybiBfX3Bvc2l0aW9uOwogIH0KICBpdGVyYXRvciBlcmFzZShpdGVy YXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpIHsKICAgIGl0ZXJhdG9yIF9faShjb3B5KF9f bGFzdCwgZW5kKCksIF9fZmlyc3QpKTsKICAgIGRlc3Ryb3koX19pLCBlbmQoKSk7CiAgICBfTV9m aW5pc2ggPSBfTV9maW5pc2ggLSAoX19sYXN0IC0gX19maXJzdCk7CiAgICByZXR1cm4gX19maXJz dDsKICB9CgogIHZvaWQgcmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplLCBjb25zdCBfVHAmIF9f eCkgewogICAgaWYgKF9fbmV3X3NpemUgPCBzaXplKCkpCiAgICAgIGVyYXNlKGJlZ2luKCkgKyBf X25ld19zaXplLCBlbmQoKSk7CiAgICBlbHNlCiAgICAgIGluc2VydChlbmQoKSwgX19uZXdfc2l6 ZSAtIHNpemUoKSwgX194KTsKICB9CiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUp IHsgcmVzaXplKF9fbmV3X3NpemUsIF9UcCgpKTsgfQogIHZvaWQgY2xlYXIoKSB7IGVyYXNlKGJl Z2luKCksIGVuZCgpKTsgfQoKcHJvdGVjdGVkOgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ dGVyYXRvcj4KICBwb2ludGVyIF9NX2FsbG9jYXRlX2FuZF9jb3B5KHNpemVfdHlwZSBfX24sIF9G b3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkKICB7CiAgICBwb2ludGVyIF9f cmVzdWx0ID0gX01fYWxsb2NhdGUoX19uKTsKICAgIHRyeSB7CiAgICAgIHVuaW5pdGlhbGl6ZWRf Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICAgICAgcmV0dXJuIF9fcmVzdWx0Owog ICAgfQogICAgY2F0Y2goLi4uKSB7IF9NX2RlYWxsb2NhdGUoX19yZXN1bHQsIF9fbik7IHRocm93 OyB9OwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01fcmFu Z2VfaW5pdGlhbGl6ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9yX3RhZykKICB7CiAg ICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgIHB1c2hfYmFjaygq X19maXJzdCk7CiAgfQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9p ZCBfTV9yYW5nZV9pbml0aWFsaXplKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIGZvcndhcmRfaXRlcmF0 b3JfdGFnKQogIHsKICAgIHNpemVfdHlwZSBfX24gPSAwOwogICAgZGlzdGFuY2UoX19maXJzdCwg X19sYXN0LCBfX24pOwogICAgX01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgX01fZW5k X29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsKICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6 ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9NX3N0YXJ0KTsKICB9CgogIHRlbXBsYXRlIDxjbGFz cyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luc2VydChpdGVyYXRvciBfX3BvcywK ICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVy YXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsK CiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbnNl cnQoaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRv ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg ICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf QWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPT0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYg X194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICByZXR1cm4gX194LnNpemUo KSA9PSBfX3kuc2l6ZSgpICYmCiAgICAgICAgIGVxdWFsKF9feC5iZWdpbigpLCBfX3guZW5kKCks IF9feS5iZWdpbigpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxp bmUgYm9vbApvcGVyYXRvcjwoY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2 ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBh cmUoX194LmJlZ2luKCksIF9feC5lbmQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX195LmJlZ2luKCksIF9feS5lbmQoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz IF9BbGxvYz4KaW5saW5lIHZvaWQgc3dhcCh2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIHZlY3Rv cjxfVHAsIF9BbGxvYz4mIF9feSkKewogIF9feC5zd2FwKF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3IhPShjb25zdCB2ZWN0b3I8 X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJl dHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+ CmlubGluZSBib29sCm9wZXJhdG9yPihjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNv bnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRl bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I8PShj b25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4m IF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs YXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I+PShjb25zdCB2ZWN0b3I8X1RwLCBfQWxs b2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9f eCA8IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KdmVjdG9yPF9U cCxfQWxsb2M+Jgp2ZWN0b3I8X1RwLF9BbGxvYz46Om9wZXJhdG9yPShjb25zdCB2ZWN0b3I8X1Rw LCBfQWxsb2M+JiBfX3gpCnsKICBpZiAoJl9feCAhPSB0aGlzKSB7CiAgICBjb25zdCBzaXplX3R5 cGUgX194bGVuID0gX194LnNpemUoKTsKICAgIGlmIChfX3hsZW4gPiBjYXBhY2l0eSgpKSB7CiAg ICAgIHBvaW50ZXIgX190bXAgPSBfTV9hbGxvY2F0ZV9hbmRfY29weShfX3hsZW4sIF9feC5iZWdp bigpLCBfX3guZW5kKCkpOwogICAgICBkZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAg ICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsK ICAgICAgX01fc3RhcnQgPSBfX3RtcDsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFy dCArIF9feGxlbjsKICAgIH0KICAgIGVsc2UgaWYgKHNpemUoKSA+PSBfX3hsZW4pIHsKICAgICAg aXRlcmF0b3IgX19pKGNvcHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwgYmVnaW4oKSkpOwogICAg ICBkZXN0cm95KF9faSwgZW5kKCkpOwogICAgfQogICAgZWxzZSB7CiAgICAgIGNvcHkoX194LmJl Z2luKCksIF9feC5iZWdpbigpICsgc2l6ZSgpLCBfTV9zdGFydCk7CiAgICAgIHVuaW5pdGlhbGl6 ZWRfY29weShfX3guYmVnaW4oKSArIHNpemUoKSwgX194LmVuZCgpLCBfTV9maW5pc2gpOwogICAg fQogICAgX01fZmluaXNoID0gX01fc3RhcnQgKyBfX3hsZW47CiAgfQogIHJldHVybiAqdGhpczsK fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIHZlY3RvcjxfVHAsIF9B bGxvYz46Ol9NX2ZpbGxfYXNzaWduKHNpemVfdCBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFs KQp7CiAgaWYgKF9fbiA+IGNhcGFjaXR5KCkpIHsKICAgIHZlY3RvcjxfVHAsIF9BbGxvYz4gX190 bXAoX19uLCBfX3ZhbCwgZ2V0X2FsbG9jYXRvcigpKTsKICAgIF9fdG1wLnN3YXAoKnRoaXMpOwog IH0KICBlbHNlIGlmIChfX24gPiBzaXplKCkpIHsKICAgIGZpbGwoYmVnaW4oKSwgZW5kKCksIF9f dmFsKTsKICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2ZpbmlzaCwgX19u IC0gc2l6ZSgpLCBfX3ZhbCk7CiAgfQogIGVsc2UKICAgIGVyYXNlKGZpbGxfbihiZWdpbigpLCBf X24sIF9fdmFsKSwgZW5kKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+ IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPgp2b2lkIHZlY3RvcjxfVHAsIF9BbGxvYz46Ol9N X2Fzc2lnbl9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewog IGl0ZXJhdG9yIF9fY3VyKGJlZ2luKCkpOwogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYg X19jdXIgIT0gZW5kKCk7ICsrX19jdXIsICsrX19maXJzdCkKICAgICpfX2N1ciA9ICpfX2ZpcnN0 OwogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7CiAgZWxz ZQogICAgaW5zZXJ0KGVuZCgpLCBfX2ZpcnN0LCBfX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+CnZvaWQKdmVj dG9yPF9UcCwgX0FsbG9jPjo6X01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv cndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3 YXJkX2l0ZXJhdG9yX3RhZykgewogIHNpemVfdHlwZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19m aXJzdCwgX19sYXN0LCBfX2xlbik7CgogIGlmIChfX2xlbiA+IGNhcGFjaXR5KCkpIHsKICAgIHBv aW50ZXIgX190bXAoX01fYWxsb2NhdGVfYW5kX2NvcHkoX19sZW4sIF9fZmlyc3QsIF9fbGFzdCkp OwogICAgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgIF9NX2RlYWxsb2NhdGUoX01f c3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgX01fc3RhcnQgPSBfX3Rt cDsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fZmluaXNoID0gX01fc3RhcnQgKyBfX2xlbjsK ICB9CiAgZWxzZSBpZiAoc2l6ZSgpID49IF9fbGVuKSB7CiAgICBpdGVyYXRvciBfX25ld19maW5p c2goY29weShfX2ZpcnN0LCBfX2xhc3QsIF9NX3N0YXJ0KSk7CiAgICBkZXN0cm95KF9fbmV3X2Zp bmlzaCwgZW5kKCkpOwogICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICB9CiAg ZWxzZSB7CiAgICBfRm9yd2FyZEl0ZXIgX19taWQgPSBfX2ZpcnN0OwogICAgYWR2YW5jZShfX21p ZCwgc2l6ZSgpKTsKICAgIGNvcHkoX19maXJzdCwgX19taWQsIF9NX3N0YXJ0KTsKICAgIF9NX2Zp bmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX21pZCwgX19sYXN0LCBfTV9maW5pc2gpOwogIH0K fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkCnZlY3RvcjxfVHAsIF9B bGxvYz46Ol9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gp CnsKICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICBjb25zdHJ1Y3Qo X01fZmluaXNoLCAqKF9NX2ZpbmlzaCAtIDEpKTsKICAgICsrX01fZmluaXNoOwogICAgX1RwIF9f eF9jb3B5ID0gX194OwogICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBpdGVyYXRvcihfTV9m aW5pc2ggLSAyKSwgaXRlcmF0b3IoX01fZmluaXNoLSAxKSk7CiAgICAqX19wb3NpdGlvbiA9IF9f eF9jb3B5OwogIH0KICBlbHNlIHsKICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6 ZSgpOwogICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19vbGRfc2l6ZSAhPSAwID8gMiAqIF9f b2xkX3NpemUgOiAxOwogICAgaXRlcmF0b3IgX19uZXdfc3RhcnQoX01fYWxsb2NhdGUoX19sZW4p KTsKICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7CiAgICB0cnkgewogICAg ICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoaXRlcmF0b3IoX01fc3RhcnQpLCBf X3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdf c3RhcnQpOwogICAgICBjb25zdHJ1Y3QoX19uZXdfZmluaXNoLmJhc2UoKSwgX194KTsKICAgICAg KytfX25ld19maW5pc2g7CiAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShf X3Bvc2l0aW9uLCBpdGVyYXRvcihfTV9maW5pc2gpLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19uZXdfZmluaXNoKTsKICAgIH0KICAgIGNhdGNoKC4uLikgeyAoZGVz dHJveShfX25ld19zdGFydCxfX25ld19maW5pc2gpLCBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0 LmJhc2UoKSxfX2xlbikpOyB0aHJvdzsgfTsKCiAgICBkZXN0cm95KGJlZ2luKCksIGVuZCgpKTsK ICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQp OwogICAgX01fc3RhcnQgPSBfX25ld19zdGFydC5iYXNlKCk7CiAgICBfTV9maW5pc2ggPSBfX25l d19maW5pc2guYmFzZSgpOwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydC5iYXNl KCkgKyBfX2xlbjsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9p ZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24p CnsKICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICBjb25zdHJ1Y3Qo X01fZmluaXNoLCAqKF9NX2ZpbmlzaCAtIDEpKTsKICAgICsrX01fZmluaXNoOwogICAgY29weV9i YWNrd2FyZChfX3Bvc2l0aW9uLCBpdGVyYXRvcihfTV9maW5pc2ggLSAyKSwKICAgICAgICAgICAg ICAgICAgaXRlcmF0b3IoX01fZmluaXNoIC0gMSkpOwogICAgKl9fcG9zaXRpb24gPSBfVHAoKTsK ICB9CiAgZWxzZSB7CiAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAg IGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgIT0gMCA/IDIgKiBfX29sZF9zaXpl IDogMTsKICAgIHBvaW50ZXIgX19uZXdfc3RhcnQgPSBfTV9hbGxvY2F0ZShfX2xlbik7CiAgICBw b2ludGVyIF9fbmV3X2ZpbmlzaCA9IF9fbmV3X3N0YXJ0OwogICAgdHJ5IHsKICAgICAgX19uZXdf ZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGl0ZXJhdG9yKF9NX3N0YXJ0KSwgX19wb3NpdGlv biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X3N0YXJ0KTsK ICAgICAgY29uc3RydWN0KF9fbmV3X2ZpbmlzaCk7CiAgICAgICsrX19uZXdfZmluaXNoOwogICAg ICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgaXRlcmF0b3Io X01fZmluaXNoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3 X2ZpbmlzaCk7CiAgICB9CiAgICBjYXRjaCguLi4pIHsgKGRlc3Ryb3koX19uZXdfc3RhcnQsX19u ZXdfZmluaXNoKSwgX01fZGVhbGxvY2F0ZShfX25ld19zdGFydCxfX2xlbikpOyB0aHJvdzsgfTsK CiAgICBkZXN0cm95KGJlZ2luKCksIGVuZCgpKTsKICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQs IF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgX01fc3RhcnQgPSBfX25ld19zdGFy dDsKICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0g X19uZXdfc3RhcnQgKyBfX2xlbjsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B bGxvYz4Kdm9pZCB2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9maWxsX2luc2VydChpdGVyYXRvciBf X3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IF9UcCYgX194KQp7CiAgaWYgKF9fbiAhPSAwKSB7CiAgICBpZiAoc2l6 ZV90eXBlKF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fZmluaXNoKSA+PSBfX24pIHsKICAgICAgX1Rw IF9feF9jb3B5ID0gX194OwogICAgICBjb25zdCBzaXplX3R5cGUgX19lbGVtc19hZnRlciA9IGVu ZCgpIC0gX19wb3NpdGlvbjsKICAgICAgaXRlcmF0b3IgX19vbGRfZmluaXNoKF9NX2ZpbmlzaCk7 CiAgICAgIGlmIChfX2VsZW1zX2FmdGVyID4gX19uKSB7CiAgICAgICAgdW5pbml0aWFsaXplZF9j b3B5KF9NX2ZpbmlzaCAtIF9fbiwgX01fZmluaXNoLCBfTV9maW5pc2gpOwogICAgICAgIF9NX2Zp bmlzaCArPSBfX247CiAgICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBfX29sZF9maW5p c2ggLSBfX24sIF9fb2xkX2ZpbmlzaCk7CiAgICAgICAgZmlsbChfX3Bvc2l0aW9uLCBfX3Bvc2l0 aW9uICsgX19uLCBfX3hfY29weSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgdW5pbml0 aWFsaXplZF9maWxsX24oX01fZmluaXNoLCBfX24gLSBfX2VsZW1zX2FmdGVyLCBfX3hfY29weSk7 CiAgICAgICAgX01fZmluaXNoICs9IF9fbiAtIF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgdW5pbml0 aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAg ICBfTV9maW5pc2ggKz0gX19lbGVtc19hZnRlcjsKICAgICAgICBmaWxsKF9fcG9zaXRpb24sIF9f b2xkX2ZpbmlzaCwgX194X2NvcHkpOwogICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgY29u c3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBf X2xlbiA9IF9fb2xkX3NpemUgKyBtYXgoX19vbGRfc2l6ZSwgX19uKTsKICAgICAgaXRlcmF0b3Ig X19uZXdfc3RhcnQoX01fYWxsb2NhdGUoX19sZW4pKTsKICAgICAgaXRlcmF0b3IgX19uZXdfZmlu aXNoKF9fbmV3X3N0YXJ0KTsKICAgICAgdHJ5IHsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmlu aXRpYWxpemVkX2NvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQpOwogICAgICAg IF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9fbmV3X2ZpbmlzaCwgX19uLCBf X3gpOwogICAgICAgIF9fbmV3X2ZpbmlzaAogICAgICAgICAgPSB1bmluaXRpYWxpemVkX2NvcHko X19wb3NpdGlvbiwgZW5kKCksIF9fbmV3X2ZpbmlzaCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4u KSB7IChkZXN0cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCksIF9NX2RlYWxsb2NhdGUoX19u ZXdfc3RhcnQuYmFzZSgpLF9fbGVuKSk7IHRocm93OyB9OwoKICAgICAgZGVzdHJveShfTV9zdGFy dCwgX01fZmluaXNoKTsKICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0 b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQuYmFzZSgpOwog ICAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2guYmFzZSgpOwogICAgICBfTV9lbmRfb2Zfc3Rv cmFnZSA9IF9fbmV3X3N0YXJ0LmJhc2UoKSArIF9fbGVuOwogICAgfQogIH0KfQoKdGVtcGxhdGUg PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+ CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9z LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19m aXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9y IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJh dG9yX3RhZykKewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkgewogICAg X19wb3MgPSBpbnNlcnQoX19wb3MsICpfX2ZpcnN0KTsKICAgICsrX19wb3M7CiAgfQp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0 ZXJhdG9yPgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX3JhbmdlX2luc2VydChpdGVyYXRv ciBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zvcndh cmRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKewogIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewog ICAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbik7 CiAgICBpZiAoc2l6ZV90eXBlKF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fZmluaXNoKSA+PSBfX24p IHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fZWxlbXNfYWZ0ZXIgPSBlbmQoKSAtIF9fcG9zaXRp b247CiAgICAgIGl0ZXJhdG9yIF9fb2xkX2ZpbmlzaChfTV9maW5pc2gpOwogICAgICBpZiAoX19l bGVtc19hZnRlciA+IF9fbikgewogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfTV9maW5pc2gg LSBfX24sIF9NX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uOwog ICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBfX29s ZF9maW5pc2gpOwogICAgICAgIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Bvc2l0aW9uKTsKICAg ICAgfQogICAgICBlbHNlIHsKICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkID0gX19maXJz dDsKICAgICAgICBhZHZhbmNlKF9fbWlkLCBfX2VsZW1zX2FmdGVyKTsKICAgICAgICB1bmluaXRp YWxpemVkX2NvcHkoX19taWQsIF9fbGFzdCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2gg Kz0gX19uIC0gX19lbGVtc19hZnRlcjsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19wb3Np dGlvbiwgX19vbGRfZmluaXNoLCBfTV9maW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX2Vs ZW1zX2FmdGVyOwogICAgICAgIGNvcHkoX19maXJzdCwgX19taWQsIF9fcG9zaXRpb24pOwogICAg ICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBz aXplKCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgKyBtYXgoX19v bGRfc2l6ZSwgX19uKTsKICAgICAgaXRlcmF0b3IgX19uZXdfc3RhcnQoX01fYWxsb2NhdGUoX19s ZW4pKTsKICAgICAgaXRlcmF0b3IgX19uZXdfZmluaXNoKF9fbmV3X3N0YXJ0KTsKICAgICAgdHJ5 IHsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoaXRlcmF0b3IoX01f c3RhcnQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Bvc2l0 aW9uLCBfX25ld19zdGFydCk7CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9j b3B5KF9fZmlyc3QsIF9fbGFzdCwgX19uZXdfZmluaXNoKTsKICAgICAgICBfX25ld19maW5pc2gK ICAgICAgICAgID0gdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9NX2Zp bmlzaCksIF9fbmV3X2ZpbmlzaCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKSB7IChkZXN0cm95 KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCksIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQuYmFz ZSgpLF9fbGVuKSk7IHRocm93OyB9OwoKICAgICAgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNo KTsKICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9z dGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQuYmFzZSgpOwogICAgICBfTV9maW5p c2ggPSBfX25ld19maW5pc2guYmFzZSgpOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3 X3N0YXJ0LmJhc2UoKSArIF9fbGVuOwogICAgfQogIH0KfQoKfQojIDM4ICIvdXNyL2xvY2FsL2dj YzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3Rk X3ZlY3Rvci5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1s aW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2J2ZWN0b3IuaCIgMSAzCiMgMzQgIi91 c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9n KysvYml0cy9zdGxfYnZlY3Rvci5oIiAzCm5hbWVzcGFjZSBzdGQKewoKc3RhdGljIGNvbnN0IGlu dCBfX1dPUkRfQklUID0gaW50KDgqc2l6ZW9mKHVuc2lnbmVkIGludCkpOwoKc3RydWN0IF9CaXRf cmVmZXJlbmNlIHsKICB1bnNpZ25lZCBpbnQqIF9NX3A7CiAgdW5zaWduZWQgaW50IF9NX21hc2s7 CiAgX0JpdF9yZWZlcmVuY2UodW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAg ICA6IF9NX3AoX194KSwgX01fbWFzayhfX3kpIHt9CgpwdWJsaWM6CiAgX0JpdF9yZWZlcmVuY2Uo KSA6IF9NX3AoMCksIF9NX21hc2soMCkge30KICBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1 cm4gISghKCpfTV9wICYgX01fbWFzaykpOyB9CiAgX0JpdF9yZWZlcmVuY2UmIG9wZXJhdG9yPShi b29sIF9feCkKICB7CiAgICBpZiAoX194KSAqX01fcCB8PSBfTV9tYXNrOwogICAgZWxzZSAqX01f cCAmPSB+X01fbWFzazsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX0JpdF9yZWZlcmVuY2UmIG9w ZXJhdG9yPShjb25zdCBfQml0X3JlZmVyZW5jZSYgX194KQogICAgeyByZXR1cm4gKnRoaXMgPSBi b29sKF9feCk7IH0KICBib29sIG9wZXJhdG9yPT0oY29uc3QgX0JpdF9yZWZlcmVuY2UmIF9feCkg Y29uc3QKICAgIHsgcmV0dXJuIGJvb2woKnRoaXMpID09IGJvb2woX194KTsgfQogIGJvb2wgb3Bl cmF0b3I8KGNvbnN0IF9CaXRfcmVmZXJlbmNlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiAhYm9v bCgqdGhpcykgJiYgYm9vbChfX3gpOwogIH0KICB2b2lkIGZsaXAoKSB7ICpfTV9wIF49IF9NX21h c2s7IH0KfTsKCmlubGluZSB2b2lkIHN3YXAoX0JpdF9yZWZlcmVuY2UgX194LCBfQml0X3JlZmVy ZW5jZSBfX3kpCnsKICBib29sIF9fdG1wID0gX194OwogIF9feCA9IF9feTsKICBfX3kgPSBfX3Rt cDsKfQoKc3RydWN0IF9CaXRfaXRlcmF0b3JfYmFzZSA6IHB1YmxpYyByYW5kb21fYWNjZXNzX2l0 ZXJhdG9yPGJvb2wsIHB0cmRpZmZfdD4KewogIHVuc2lnbmVkIGludCogX01fcDsKICB1bnNpZ25l ZCBpbnQgX01fb2Zmc2V0OwoKICBfQml0X2l0ZXJhdG9yX2Jhc2UodW5zaWduZWQgaW50KiBfX3gs IHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9NX3AoX194KSwgX01fb2Zmc2V0KF9feSkge30KCiAg dm9pZCBfTV9idW1wX3VwKCkgewogICAgaWYgKF9NX29mZnNldCsrID09IF9fV09SRF9CSVQgLSAx KSB7CiAgICAgIF9NX29mZnNldCA9IDA7CiAgICAgICsrX01fcDsKICAgIH0KICB9CiAgdm9pZCBf TV9idW1wX2Rvd24oKSB7CiAgICBpZiAoX01fb2Zmc2V0LS0gPT0gMCkgewogICAgICBfTV9vZmZz ZXQgPSBfX1dPUkRfQklUIC0gMTsKICAgICAgLS1fTV9wOwogICAgfQogIH0KCiAgdm9pZCBfTV9p bmNyKHB0cmRpZmZfdCBfX2kpIHsKICAgIGRpZmZlcmVuY2VfdHlwZSBfX24gPSBfX2kgKyBfTV9v ZmZzZXQ7CiAgICBfTV9wICs9IF9fbiAvIF9fV09SRF9CSVQ7CiAgICBfX24gPSBfX24gJSBfX1dP UkRfQklUOwogICAgaWYgKF9fbiA8IDApIHsKICAgICAgX01fb2Zmc2V0ID0gKHVuc2lnbmVkIGlu dCkgX19uICsgX19XT1JEX0JJVDsKICAgICAgLS1fTV9wOwogICAgfSBlbHNlCiAgICAgIF9NX29m ZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9fbjsKICB9CgogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBf Qml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuIF9NX3AgPT0gX19pLl9N X3AgJiYgX01fb2Zmc2V0ID09IF9faS5fTV9vZmZzZXQ7CiAgfQogIGJvb2wgb3BlcmF0b3I8KGNv bnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4gX01fcCA8IF9f aS5fTV9wIHx8IChfTV9wID09IF9faS5fTV9wICYmIF9NX29mZnNldCA8IF9faS5fTV9vZmZzZXQp OwogIH0KICBib29sIG9wZXJhdG9yIT0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNv bnN0IHsKICAgIHJldHVybiAhKCp0aGlzID09IF9faSk7CiAgfQogIGJvb2wgb3BlcmF0b3I+KGNv bnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4gX19pIDwgKnRo aXM7CiAgfQogIGJvb2wgb3BlcmF0b3I8PShjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkg Y29uc3QgewogICAgcmV0dXJuICEoX19pIDwgKnRoaXMpOwogIH0KICBib29sIG9wZXJhdG9yPj0o Y29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiAhKCp0aGlz IDwgX19pKTsKICB9Cn07CgppbmxpbmUgcHRyZGlmZl90Cm9wZXJhdG9yLShjb25zdCBfQml0X2l0 ZXJhdG9yX2Jhc2UmIF9feCwgY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX3kpIHsKICByZXR1 cm4gX19XT1JEX0JJVCAqIChfX3guX01fcCAtIF9feS5fTV9wKSArIF9feC5fTV9vZmZzZXQgLSBf X3kuX01fb2Zmc2V0Owp9CgoKc3RydWN0IF9CaXRfaXRlcmF0b3IgOiBwdWJsaWMgX0JpdF9pdGVy YXRvcl9iYXNlCnsKICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBlZGVm IF9CaXRfcmVmZXJlbmNlKiBwb2ludGVyOwogIHR5cGVkZWYgX0JpdF9pdGVyYXRvciBpdGVyYXRv cjsKCiAgX0JpdF9pdGVyYXRvcigpIDogX0JpdF9pdGVyYXRvcl9iYXNlKDAsIDApIHt9CiAgX0Jp dF9pdGVyYXRvcih1bnNpZ25lZCBpbnQqIF9feCwgdW5zaWduZWQgaW50IF9feSkKICAgIDogX0Jp dF9pdGVyYXRvcl9iYXNlKF9feCwgX195KSB7fQoKICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29u c3QgeyByZXR1cm4gcmVmZXJlbmNlKF9NX3AsIDFVIDw8IF9NX29mZnNldCk7IH0KICBpdGVyYXRv ciYgb3BlcmF0b3IrKygpIHsKICAgIF9NX2J1bXBfdXAoKTsKICAgIHJldHVybiAqdGhpczsKICB9 CiAgaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpIHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7 CiAgICBfTV9idW1wX3VwKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGl0ZXJhdG9yJiBvcGVy YXRvci0tKCkgewogICAgX01fYnVtcF9kb3duKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0 ZXJhdG9yIG9wZXJhdG9yLS0oaW50KSB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAg X01fYnVtcF9kb3duKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGl0ZXJhdG9yJiBvcGVyYXRv cis9KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgIF9NX2luY3IoX19pKTsKICAgIHJldHVybiAq dGhpczsKICB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIF9faSkgewog ICAgKnRoaXMgKz0gLV9faTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0b3Igb3BlcmF0 b3IrKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRo aXM7CiAgICByZXR1cm4gX190bXAgKz0gX19pOwogIH0KICBpdGVyYXRvciBvcGVyYXRvci0oZGlm ZmVyZW5jZV90eXBlIF9faSkgY29uc3QgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAg IHJldHVybiBfX3RtcCAtPSBfX2k7CiAgfQoKICByZWZlcmVuY2Ugb3BlcmF0b3JbXShkaWZmZXJl bmNlX3R5cGUgX19pKSB7IHJldHVybiAqKCp0aGlzICsgX19pKTsgfQp9OwoKaW5saW5lIF9CaXRf aXRlcmF0b3IKb3BlcmF0b3IrKHB0cmRpZmZfdCBfX24sIGNvbnN0IF9CaXRfaXRlcmF0b3ImIF9f eCkgeyByZXR1cm4gX194ICsgX19uOyB9CgoKc3RydWN0IF9CaXRfY29uc3RfaXRlcmF0b3IgOiBw dWJsaWMgX0JpdF9pdGVyYXRvcl9iYXNlCnsKICB0eXBlZGVmIGJvb2wgcmVmZXJlbmNlOwogIHR5 cGVkZWYgYm9vbCBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBib29sKiBwb2ludGVy OwogIHR5cGVkZWYgX0JpdF9jb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKCiAgX0JpdF9j b25zdF9pdGVyYXRvcigpIDogX0JpdF9pdGVyYXRvcl9iYXNlKDAsIDApIHt9CiAgX0JpdF9jb25z dF9pdGVyYXRvcih1bnNpZ25lZCBpbnQqIF9feCwgdW5zaWduZWQgaW50IF9feSkKICAgIDogX0Jp dF9pdGVyYXRvcl9iYXNlKF9feCwgX195KSB7fQogIF9CaXRfY29uc3RfaXRlcmF0b3IoY29uc3Qg X0JpdF9pdGVyYXRvciYgX194KQogICAgOiBfQml0X2l0ZXJhdG9yX2Jhc2UoX194Ll9NX3AsIF9f eC5fTV9vZmZzZXQpIHt9CgogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7CiAg ICByZXR1cm4gX0JpdF9yZWZlcmVuY2UoX01fcCwgMVUgPDwgX01fb2Zmc2V0KTsKICB9CiAgY29u c3RfaXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7CiAgICBfTV9idW1wX3VwKCk7CiAgICByZXR1cm4g KnRoaXM7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yKysoaW50KSB7CiAgICBjb25zdF9p dGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgX01fYnVtcF91cCgpOwogICAgcmV0dXJuIF9fdG1w OwogIH0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0b3ItLSgpIHsKICAgIF9NX2J1bXBfZG93bigp OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvci0tKGludCkg ewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIF9NX2J1bXBfZG93bigpOwog ICAgcmV0dXJuIF9fdG1wOwogIH0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0b3IrPShkaWZmZXJl bmNlX3R5cGUgX19pKSB7CiAgICBfTV9pbmNyKF9faSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQog IGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgICp0 aGlzICs9IC1fX2k7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJh dG9yKyhkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7CiAgICBjb25zdF9pdGVyYXRvciBfX3Rt cCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wICs9IF9faTsKICB9CiAgY29uc3RfaXRlcmF0b3Ig b3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsKICAgIGNvbnN0X2l0ZXJhdG9y IF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgLT0gX19pOwogIH0KICBjb25zdF9yZWZl cmVuY2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICByZXR1cm4gKigqdGhp cyArIF9faSk7CiAgfQp9OwoKaW5saW5lIF9CaXRfY29uc3RfaXRlcmF0b3IKb3BlcmF0b3IrKHB0 cmRpZmZfdCBfX24sIGNvbnN0IF9CaXRfY29uc3RfaXRlcmF0b3ImIF9feCkgeyByZXR1cm4gX194 ICsgX19uOyB9CgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2NhdG9yLCBib29sIF9faXNfc3Rh dGljPgpjbGFzcyBfQnZlY3Rvcl9hbGxvY19iYXNlIHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5h bWUgX0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAg ICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25z dCB7IHJldHVybiBfTV9kYXRhX2FsbG9jYXRvcjsgfQoKICBfQnZlY3Rvcl9hbGxvY19iYXNlKGNv bnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9NX2RhdGFfYWxsb2NhdG9yKF9fYSksIF9N X3N0YXJ0KCksIF9NX2ZpbmlzaCgpLCBfTV9lbmRfb2Zfc3RvcmFnZSgwKSB7fQoKcHJvdGVjdGVk OgogIHVuc2lnbmVkIGludCogX01fYml0X2FsbG9jKHNpemVfdCBfX24pCiAgICB7IHJldHVybiBf TV9kYXRhX2FsbG9jYXRvci5hbGxvY2F0ZSgoX19uICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9C SVQpOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlKCkgewogICAgaWYgKF9NX3N0YXJ0Ll9NX3ApCiAg ICAgIF9NX2RhdGFfYWxsb2NhdG9yLmRlYWxsb2NhdGUoX01fc3RhcnQuX01fcCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0Ll9N X3ApOwogIH0KCiAgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czx1bnNpZ25lZCBpbnQsIF9BbGxvY2F0 b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgX01fZGF0YV9hbGxvY2F0b3I7CiAgX0JpdF9p dGVyYXRvciBfTV9zdGFydDsKICBfQml0X2l0ZXJhdG9yIF9NX2ZpbmlzaDsKICB1bnNpZ25lZCBp bnQqIF9NX2VuZF9vZl9zdG9yYWdlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2NhdG9yPgpj bGFzcyBfQnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxvY2F0b3IsIHRydWU+IHsKcHVibGljOgogIHR5 cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9y X3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxv Y2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0b3JfdHlwZSgpOyB9CgogIF9CdmVjdG9yX2Fs bG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmKQogICAgOiBfTV9zdGFydCgpLCBfTV9maW5p c2goKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkge30KCnByb3RlY3RlZDoKICB0eXBlZGVmIHR5cGVu YW1lIF9BbGxvY190cmFpdHM8dW5zaWduZWQgaW50LCBfQWxsb2NhdG9yPjo6X0FsbG9jX3R5cGUK ICAgICAgICAgIF9BbGxvY190eXBlOwoKICB1bnNpZ25lZCBpbnQqIF9NX2JpdF9hbGxvYyhzaXpl X3QgX19uKQogICAgeyByZXR1cm4gX0FsbG9jX3R5cGU6OmFsbG9jYXRlKChfX24gKyBfX1dPUkRf QklUIC0gMSkvX19XT1JEX0JJVCk7IH0KICB2b2lkIF9NX2RlYWxsb2NhdGUoKSB7CiAgICBpZiAo X01fc3RhcnQuX01fcCkKICAgICAgX0FsbG9jX3R5cGU6OmRlYWxsb2NhdGUoX01fc3RhcnQuX01f cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9z dGFydC5fTV9wKTsKICB9CgogIF9CaXRfaXRlcmF0b3IgX01fc3RhcnQ7CiAgX0JpdF9pdGVyYXRv ciBfTV9maW5pc2g7CiAgdW5zaWduZWQgaW50KiBfTV9lbmRfb2Zfc3RvcmFnZTsKfTsKCnRlbXBs YXRlIDxjbGFzcyBfQWxsb2M+CmNsYXNzIF9CdmVjdG9yX2Jhc2UKICA6IHB1YmxpYyBfQnZlY3Rv cl9hbGxvY19iYXNlPF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxv Y190cmFpdHM8Ym9vbCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgp7CiAgdHlwZWRlZiBfQnZl Y3Rvcl9hbGxvY19iYXNlPF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Fs bG9jX3RyYWl0czxib29sLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CiAgICAgICAgICBfQmFz ZTsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9j YXRvcl90eXBlOwoKICBfQnZlY3Rvcl9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDog X0Jhc2UoX19hKSB7fQogIH5fQnZlY3Rvcl9iYXNlKCkgeyBfQmFzZTo6X01fZGVhbGxvY2F0ZSgp OyB9Cn07Cgp9CgoKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51 eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX3ZlY3Rvci5oIiAxIDMKIyAzMTggIi91c3Iv bG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysv Yml0cy9zdGxfYnZlY3Rvci5oIiAyIDMKbmFtZXNwYWNlIHN0ZAp7Cgp0ZW1wbGF0ZSA8dHlwZW5h bWUgX0FsbG9jPgogIGNsYXNzIHZlY3Rvcjxib29sLCBfQWxsb2M+IDogcHVibGljIF9CdmVjdG9y X2Jhc2U8X0FsbG9jPgogIHsKICBwdWJsaWM6CiAgICB0eXBlZGVmIGJvb2wgdmFsdWVfdHlwZTsK ICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZl cmVuY2VfdHlwZTsKICAgIHR5cGVkZWYgX0JpdF9yZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgdHlw ZWRlZiBib29sIGNvbnN0X3JlZmVyZW5jZTsKICAgIHR5cGVkZWYgX0JpdF9yZWZlcmVuY2UqIHBv aW50ZXI7CiAgICB0eXBlZGVmIGNvbnN0IGJvb2wqIGNvbnN0X3BvaW50ZXI7CgogICAgdHlwZWRl ZiBfQml0X2l0ZXJhdG9yIGl0ZXJhdG9yOwogICAgdHlwZWRlZiBfQml0X2NvbnN0X2l0ZXJhdG9y IGNvbnN0X2l0ZXJhdG9yOwoKICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVy YXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRv cjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9CdmVj dG9yX2Jhc2U8X0FsbG9jPjo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgICBhbGxv Y2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgewogICAgICByZXR1cm4gX0J2ZWN0b3Jf YmFzZTxfQWxsb2M+OjpnZXRfYWxsb2NhdG9yKCk7CiAgICB9CgogIHByb3RlY3RlZDoKICAgIHVz aW5nIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6X01fYml0X2FsbG9jOwogICAgdXNpbmcgX0J2ZWN0 b3JfYmFzZTxfQWxsb2M+OjpfTV9kZWFsbG9jYXRlOwogICAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxf QWxsb2M+OjpfTV9zdGFydDsKICAgIHVzaW5nIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6X01fZmlu aXNoOwogICAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9lbmRfb2Zfc3RvcmFnZTsK CiAgcHJvdGVjdGVkOgogICAgdm9pZCBfTV9pbml0aWFsaXplKHNpemVfdHlwZSBfX24pIHsKICAg ICAgdW5zaWduZWQgaW50KiBfX3EgPSBfTV9iaXRfYWxsb2MoX19uKTsKICAgICAgX01fZW5kX29m X3N0b3JhZ2UgPSBfX3EgKyAoX19uICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7CiAgICAg IF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgICAgX01fZmluaXNoID0gX01fc3RhcnQg KyBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICAgIH0KICAgIHZvaWQgX01faW5zZXJ0X2F1eChpdGVy YXRvciBfX3Bvc2l0aW9uLCBib29sIF9feCkgewogICAgICBpZiAoX01fZmluaXNoLl9NX3AgIT0g X01fZW5kX29mX3N0b3JhZ2UpIHsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9N X2ZpbmlzaCwgX01fZmluaXNoICsgMSk7CiAgICAgICAgKl9fcG9zaXRpb24gPSBfX3g7CiAgICAg ICAgKytfTV9maW5pc2g7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgc2l6ZV90eXBlIF9f bGVuID0gc2l6ZSgpID8gMiAqIHNpemUoKSA6IF9fV09SRF9CSVQ7CiAgICAgICAgdW5zaWduZWQg aW50KiBfX3EgPSBfTV9iaXRfYWxsb2MoX19sZW4pOwogICAgICAgIGl0ZXJhdG9yIF9faSA9IGNv cHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgICAgKl9faSsr ID0gX194OwogICAgICAgIF9NX2ZpbmlzaCA9IGNvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9faSk7 CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19x ICsgKF9fbGVuICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7CiAgICAgICAgX01fc3RhcnQg PSBpdGVyYXRvcihfX3EsIDApOwogICAgICB9CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9J bnB1dEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbml0aWFsaXplX3JhbmdlKF9JbnB1dEl0ZXJhdG9y IF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcigpOwog ICAgICBfTV9maW5pc2ggPSBpdGVyYXRvcigpOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IDA7 CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBwdXNo X2JhY2soKl9fZmlyc3QpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJh dG9yPgogICAgdm9pZCBfTV9pbml0aWFsaXplX3JhbmdlKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJz dCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Zm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICAgICAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgICAgIGRp c3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uKTsKICAgICAgX01faW5pdGlhbGl6ZShfX24pOwog ICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01fc3RhcnQpOwogICAgfQoKICAgIHRlbXBsYXRl IDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5zZXJ0X3JhbmdlKGl0ZXJhdG9y IF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwg X0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRl cmF0b3JfdGFnKSB7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkg ewogICAgICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9zLCAqX19maXJzdCk7CiAgICAgICAgKytfX3Bv czsKICAgICAgfQogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgog ICAgdm9pZCBfTV9pbnNlcnRfcmFuZ2UoaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAgICAg ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBf X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewog ICAgICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBzaXplX3R5cGUgX19uID0gMDsK ICAgICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbik7CiAgICAgICAgaWYgKGNhcGFj aXR5KCkgLSBzaXplKCkgPj0gX19uKSB7CiAgICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRp b24sIGVuZCgpLCBfTV9maW5pc2ggKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgICAgICAgICBj b3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3NpdGlvbik7CiAgICAgICAgICBfTV9maW5pc2ggKz0g ZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAg c2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgpICsgbWF4KHNpemUoKSwgX19uKTsKICAgICAgICAgIHVu c2lnbmVkIGludCogX19xID0gX01fYml0X2FsbG9jKF9fbGVuKTsKICAgICAgICAgIGl0ZXJhdG9y IF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAg ICAgICBfX2kgPSBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19pKTsKICAgICAgICAgIF9NX2Zpbmlz aCA9IGNvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9faSk7CiAgICAgICAgICBfTV9kZWFsbG9jYXRl KCk7CiAgICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9fV09SRF9C SVQgLSAxKS9fX1dPUkRfQklUOwogICAgICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDAp OwogICAgICAgIH0KICAgICAgfQogICAgfQoKICBwdWJsaWM6CiAgICBpdGVyYXRvciBiZWdpbigp IHsgcmV0dXJuIF9NX3N0YXJ0OyB9CiAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsg cmV0dXJuIF9NX3N0YXJ0OyB9CiAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBfTV9maW5pc2g7 IH0KICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX2ZpbmlzaDsgfQoK ICAgIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihl bmQoKSk7IH0KICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgewogICAg ICByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7CiAgICB9CiAgICByZXZlcnNl X2l0ZXJhdG9yIHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CiAg ICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7CiAgICAgIHJldHVybiBjb25z dF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOwogICAgfQoKICAgIHNpemVfdHlwZSBzaXplKCkg Y29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKGVuZCgpIC0gYmVnaW4oKSk7IH0KICAgIHNpemVfdHlw ZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfdHlwZSgtMSk7IH0KICAgIHNpemVfdHlw ZSBjYXBhY2l0eSgpIGNvbnN0IHsKICAgICAgcmV0dXJuIHNpemVfdHlwZShjb25zdF9pdGVyYXRv cihfTV9lbmRfb2Zfc3RvcmFnZSwgMCkgLSBiZWdpbigpKTsKICAgIH0KICAgIGJvb2wgZW1wdHko KSBjb25zdCB7IHJldHVybiBiZWdpbigpID09IGVuZCgpOyB9CgogICAgcmVmZXJlbmNlIG9wZXJh dG9yW10oc2l6ZV90eXBlIF9fbikKICAgICAgeyByZXR1cm4gKihiZWdpbigpICsgZGlmZmVyZW5j ZV90eXBlKF9fbikpOyB9CiAgICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUg X19uKSBjb25zdAogICAgICB7IHJldHVybiAqKGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUoX19u KSk7IH0KCiAgICB2b2lkIF9NX3JhbmdlX2NoZWNrKHNpemVfdHlwZSBfX24pIGNvbnN0IHsKICAg ICAgaWYgKF9fbiA+PSB0aGlzLT5zaXplKCkpCiAgICAgICAgX190aHJvd19yYW5nZV9lcnJvcigi dmVjdG9yPGJvb2w+Iik7CiAgICB9CgogICAgcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pCiAg ICAgIHsgX01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQogICAgY29u c3RfcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsgX01fcmFuZ2VfY2hl Y2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQoKICAgIGV4cGxpY2l0IHZlY3Rvcihjb25z dCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgOiBfQnZlY3Rv cl9iYXNlPF9BbGxvYz4oX19hKSB7fQoKICAgIHZlY3RvcihzaXplX3R5cGUgX19uLCBib29sIF9f dmFsdWUsCiAgICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRv cl90eXBlKCkpCiAgICAgIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9fYSkKICAgIHsKICAgICAg X01faW5pdGlhbGl6ZShfX24pOwogICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9z dG9yYWdlLCBfX3ZhbHVlID8gfjAgOiAwKTsKICAgIH0KCiAgICBleHBsaWNpdCB2ZWN0b3Ioc2l6 ZV90eXBlIF9fbikKICAgICAgOiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oYWxsb2NhdG9yX3R5cGUo KSkKICAgIHsKICAgICAgX01faW5pdGlhbGl6ZShfX24pOwogICAgICBmaWxsKF9NX3N0YXJ0Ll9N X3AsIF9NX2VuZF9vZl9zdG9yYWdlLCAwKTsKICAgIH0KCiAgICB2ZWN0b3IoY29uc3QgdmVjdG9y JiBfX3gpIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9feC5nZXRfYWxsb2NhdG9yKCkpIHsKICAg ICAgX01faW5pdGlhbGl6ZShfX3guc2l6ZSgpKTsKICAgICAgY29weShfX3guYmVnaW4oKSwgX194 LmVuZCgpLCBfTV9zdGFydCk7CiAgICB9CgoKCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+ CiAgICB2b2lkIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBf X3gsIF9fdHJ1ZV90eXBlKSB7CiAgICAgIF9NX2luaXRpYWxpemUoX19uKTsKICAgICAgZmlsbChf TV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgX194ID8gfjAgOiAwKTsKICAgIH0KCiAg ICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2luaXRpYWxpemVf ZGlzcGF0Y2goX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogICAgICBfTV9p bml0aWFsaXplX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2Zp cnN0KSk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdmVj dG9yKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAg ICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAg ICA6IF9CdmVjdG9yX2Jhc2U8X0FsbG9jPihfX2EpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAg ICBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwog ICAgfQoKICAgIH52ZWN0b3IoKSB7IH0KCiAgICB2ZWN0b3ImIG9wZXJhdG9yPShjb25zdCB2ZWN0 b3ImIF9feCkgewogICAgICBpZiAoJl9feCA9PSB0aGlzKSByZXR1cm4gKnRoaXM7CiAgICAgIGlm IChfX3guc2l6ZSgpID4gY2FwYWNpdHkoKSkgewogICAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAg ICAgICBfTV9pbml0aWFsaXplKF9feC5zaXplKCkpOwogICAgICB9CiAgICAgIGNvcHkoX194LmJl Z2luKCksIF9feC5lbmQoKSwgYmVnaW4oKSk7CiAgICAgIF9NX2ZpbmlzaCA9IGJlZ2luKCkgKyBk aWZmZXJlbmNlX3R5cGUoX194LnNpemUoKSk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgoK CgoKICAgIHZvaWQgX01fZmlsbF9hc3NpZ24oc2l6ZV90IF9fbiwgYm9vbCBfX3gpIHsKICAgICAg aWYgKF9fbiA+IHNpemUoKSkgewogICAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29m X3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7CiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX24gLSBzaXpl KCksIF9feCk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgZXJhc2UoYmVnaW4oKSArIF9f biwgZW5kKCkpOwogICAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2Us IF9feCA/IH4wIDogMCk7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIGFzc2lnbihzaXplX3QgX19u LCBib29sIF9feCkgeyBfTV9maWxsX2Fzc2lnbihfX24sIF9feCk7IH0KCiAgICB0ZW1wbGF0ZSA8 Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2Zp cnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNf aW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgIF9NX2Fz c2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0KCiAgICB0 ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW50 ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsLCBfX3RydWVfdHlwZSkKICAgICAgeyBfTV9maWxsX2Fz c2lnbigoc2l6ZV90KSBfX24sIChib29sKSBfX3ZhbCk7IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3Mg X0lucHV0SXRlcj4KICAgIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXIgX19maXJz dCwgX0lucHV0SXRlciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAgICAgeyBfTV9hc3NpZ25fYXV4 KF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgICB0 ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0lu cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewogICAgICBpdGVyYXRvciBfX2N1ciA9IGJl Z2luKCk7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7 ICsrX19jdXIsICsrX19maXJzdCkKICAgICAgICAqX19jdXIgPSAqX19maXJzdDsKICAgICAgaWYg KF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7CiAgICAgIGVs c2UKICAgICAgICBpbnNlcnQoZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9CgogICAgdGVt cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0Zv cndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgICBzaXplX3R5cGUgX19s ZW4gPSAwOwogICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsKICAgICAgaWYg KF9fbGVuIDwgc2l6ZSgpKQogICAgICAgIGVyYXNlKGNvcHkoX19maXJzdCwgX19sYXN0LCBiZWdp bigpKSwgZW5kKCkpOwogICAgICBlbHNlIHsKICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlk ID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkLCBzaXplKCkpOwogICAgICAgIGNvcHko X19maXJzdCwgX19taWQsIGJlZ2luKCkpOwogICAgICAgIGluc2VydChlbmQoKSwgX19taWQsIF9f bGFzdCk7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIHJlc2VydmUoc2l6ZV90eXBlIF9fbikgewog ICAgICBpZiAoY2FwYWNpdHkoKSA8IF9fbikgewogICAgICAgIHVuc2lnbmVkIGludCogX19xID0g X01fYml0X2FsbG9jKF9fbik7CiAgICAgICAgX01fZmluaXNoID0gY29weShiZWdpbigpLCBlbmQo KSwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIF9N X3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9f cSArIChfX24gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVDsKICAgICAgfQogICAgfQoKICAg IHJlZmVyZW5jZSBmcm9udCgpIHsgcmV0dXJuICpiZWdpbigpOyB9CiAgICBjb25zdF9yZWZlcmVu Y2UgZnJvbnQoKSBjb25zdCB7IHJldHVybiAqYmVnaW4oKTsgfQogICAgcmVmZXJlbmNlIGJhY2so KSB7IHJldHVybiAqKGVuZCgpIC0gMSk7IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkgY29u c3QgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CiAgICB2b2lkIHB1c2hfYmFjayhib29sIF9feCkg ewogICAgICBpZiAoX01fZmluaXNoLl9NX3AgIT0gX01fZW5kX29mX3N0b3JhZ2UpCiAgICAgICAg Kl9NX2ZpbmlzaCsrID0gX194OwogICAgICBlbHNlCiAgICAgICAgX01faW5zZXJ0X2F1eChlbmQo KSwgX194KTsKICAgIH0KICAgIHZvaWQgc3dhcCh2ZWN0b3I8Ym9vbCwgX0FsbG9jPiYgX194KSB7 CiAgICAgIHN0ZDo6c3dhcChfTV9zdGFydCwgX194Ll9NX3N0YXJ0KTsKICAgICAgc3RkOjpzd2Fw KF9NX2ZpbmlzaCwgX194Ll9NX2ZpbmlzaCk7CiAgICAgIHN0ZDo6c3dhcChfTV9lbmRfb2Zfc3Rv cmFnZSwgX194Ll9NX2VuZF9vZl9zdG9yYWdlKTsKICAgIH0KICAgIGl0ZXJhdG9yIGluc2VydChp dGVyYXRvciBfX3Bvc2l0aW9uLCBib29sIF9feCA9IGJvb2woKSkgewogICAgICBkaWZmZXJlbmNl X3R5cGUgX19uID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7CiAgICAgIGlmIChfTV9maW5pc2guX01f cCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSAmJiBfX3Bvc2l0aW9uID09IGVuZCgpKQogICAgICAgICpf TV9maW5pc2grKyA9IF9feDsKICAgICAgZWxzZQogICAgICAgIF9NX2luc2VydF9hdXgoX19wb3Np dGlvbiwgX194KTsKICAgICAgcmV0dXJuIGJlZ2luKCkgKyBfX247CiAgICB9CgoKCiAgICB0ZW1w bGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRv ciBfX3BvcywgX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX3RydWVfdHlwZSkgewogICAgICBfTV9maWxsX2luc2VydChfX3BvcywgX19uLCBf X3gpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQg X01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAgICAgIF9NX2luc2VydF9y YW5nZShfX3BvcywgX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3Qp KTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIGlu c2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3Ig X19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg X0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICBf TV9pbnNlcnRfZGlzcGF0Y2goX19wb3NpdGlvbiwgX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwo KSk7CiAgICB9CgogICAgdm9pZCBfTV9maWxsX2luc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBz aXplX3R5cGUgX19uLCBib29sIF9feCkgewogICAgICBpZiAoX19uID09IDApIHJldHVybjsKICAg ICAgaWYgKGNhcGFjaXR5KCkgLSBzaXplKCkgPj0gX19uKSB7CiAgICAgICAgY29weV9iYWNrd2Fy ZChfX3Bvc2l0aW9uLCBlbmQoKSwgX01fZmluaXNoICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOwog ICAgICAgIGZpbGwoX19wb3NpdGlvbiwgX19wb3NpdGlvbiArIGRpZmZlcmVuY2VfdHlwZShfX24p LCBfX3gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICAgICAg fQogICAgICBlbHNlIHsKICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBzaXplKCkgKyBtYXgoc2l6 ZSgpLCBfX24pOwogICAgICAgIHVuc2lnbmVkIGludCogX19xID0gX01fYml0X2FsbG9jKF9fbGVu KTsKICAgICAgICBpdGVyYXRvciBfX2kgPSBjb3B5KGJlZ2luKCksIF9fcG9zaXRpb24sIGl0ZXJh dG9yKF9fcSwgMCkpOwogICAgICAgIGZpbGxfbihfX2ksIF9fbiwgX194KTsKICAgICAgICBfTV9m aW5pc2ggPSBjb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX2kgKyBkaWZmZXJlbmNlX3R5cGUoX19u KSk7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0g X19xICsgKF9fbGVuICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7CiAgICAgICAgX01fc3Rh cnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAgICB9CiAgICB9CgogICAgdm9pZCBpbnNlcnQoaXRl cmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwgYm9vbCBfX3gpIHsKICAgICAgX01fZmls bF9pbnNlcnQoX19wb3NpdGlvbiwgX19uLCBfX3gpOwogICAgfQoKICAgIHZvaWQgcG9wX2JhY2so KSB7IC0tX01fZmluaXNoOyB9CiAgICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9u KSB7CiAgICAgIGlmIChfX3Bvc2l0aW9uICsgMSAhPSBlbmQoKSkKICAgICAgICBjb3B5KF9fcG9z aXRpb24gKyAxLCBlbmQoKSwgX19wb3NpdGlvbik7CiAgICAgICAgLS1fTV9maW5pc2g7CiAgICAg IHJldHVybiBfX3Bvc2l0aW9uOwogICAgfQogICAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19m aXJzdCwgaXRlcmF0b3IgX19sYXN0KSB7CiAgICAgIF9NX2ZpbmlzaCA9IGNvcHkoX19sYXN0LCBl bmQoKSwgX19maXJzdCk7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQogICAgdm9pZCByZXNp emUoc2l6ZV90eXBlIF9fbmV3X3NpemUsIGJvb2wgX194ID0gYm9vbCgpKSB7CiAgICAgIGlmIChf X25ld19zaXplIDwgc2l6ZSgpKQogICAgICAgIGVyYXNlKGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5 cGUoX19uZXdfc2l6ZSksIGVuZCgpKTsKICAgICAgZWxzZQogICAgICAgIGluc2VydChlbmQoKSwg X19uZXdfc2l6ZSAtIHNpemUoKSwgX194KTsKICAgIH0KICAgIHZvaWQgZmxpcCgpIHsKICAgICAg Zm9yICh1bnNpZ25lZCBpbnQqIF9fcCA9IF9NX3N0YXJ0Ll9NX3A7IF9fcCAhPSBfTV9lbmRfb2Zf c3RvcmFnZTsgKytfX3ApCiAgICAgICAgKl9fcCA9IH4qX19wOwogICAgfQoKICAgIHZvaWQgY2xl YXIoKSB7IGVyYXNlKGJlZ2luKCksIGVuZCgpKTsgfQogIH07CgoKdHlwZWRlZiB2ZWN0b3I8Ym9v bCwgYWxsb2M+IGJpdF92ZWN0b3I7Cgp9CiMgMzkgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxp Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfdmVjdG9yLmgiIDIg MwojIDMgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAv aW5jbHVkZS9nKysvdmVjdG9yIiAyIDMKIyA2NyAiWGFsYW5ET00vWGFsYW5ET01TdHJpbmcuaHBw IiAyCgoKCgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IFhhbGFuRE9NQ2hhcjsKCgoKCgoKCiMgMSAi L3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRl L2crKy9jYXNzZXJ0IiAxIDMKCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYt cGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jYXNzZXJ0LmgiIDEgMwojIDM3 ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1 ZGUvZysrL2JpdHMvc3RkX2Nhc3NlcnQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIg MSAzCiMgMzUgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0 dXJlcy5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAyIDMKIyA1OCAiL3Vzci9p bmNsdWRlL2Fzc2VydC5oIiAzCmV4dGVybiAiQyIgewoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X2Zh aWwgKF9fY29uc3QgY2hhciAqX19hc3NlcnRpb24sIF9fY29uc3QgY2hhciAqX19maWxlLCB1bnNp Z25lZCBpbnQgX19saW5lLCBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pIHRocm93ICgpCgoKCiAg ICAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0 X3BlcnJvcl9mYWlsIChpbnQgX19lcnJudW0sIF9fY29uc3QgY2hhciAqX19maWxlLCB1bnNpZ25l ZCBpbnQgX19saW5lLCBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pIHRocm93ICgpCgoKCiAgICAg X19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKfQojIDM4ICIvdXNyL2xvY2FsL2djYzMv bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2Nh c3NlcnQuaCIgMiAzCiMgMyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu dXgtZ251LzMuMC9pbmNsdWRlL2crKy9jYXNzZXJ0IiAyIDMKIyA4MCAiWGFsYW5ET00vWGFsYW5E T01TdHJpbmcuaHBwIiAyCgoKCmNsYXNzIFhhbGFuRE9NU3RyaW5nCnsKcHVibGljOgoKCgoKCgog ICAgICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8WGFsYW5ET01DaGFyPiBYYWxhbkRPTUNoYXJWZWN0 b3JUeXBlOwogICAgICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8Y2hhcj4gQ2hhclZlY3RvclR5cGU7 CiAgICAgICAgdHlwZWRlZiBzdGQ6OnZlY3Rvcjx3Y2hhcl90PiBXaWRlQ2hhclZlY3RvclR5cGU7 CgoKICAgICAgICB0eXBlZGVmIFhhbGFuRE9NQ2hhciB2YWx1ZV90eXBlOwogICAgICAgIHR5cGVk ZWYgWGFsYW5ET01DaGFyJiByZWZlcmVuY2U7CiAgICAgICAgdHlwZWRlZiBjb25zdCBYYWxhbkRP TUNoYXImIGNvbnN0X3JlZmVyZW5jZTsKCiAgICAgICAgdHlwZWRlZiBYYWxhbkRPTUNoYXJWZWN0 b3JUeXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwoKICAgICAgICB0eXBlZGVmIFhhbGFuRE9NQ2hh clZlY3RvclR5cGU6Oml0ZXJhdG9yIGl0ZXJhdG9yOwogICAgICAgIHR5cGVkZWYgWGFsYW5ET01D aGFyVmVjdG9yVHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgICAgICAgdHlw ZWRlZiBYYWxhbkRPTUNoYXJWZWN0b3JUeXBlOjpyZXZlcnNlX2l0ZXJhdG9yIHJldmVyc2VfaXRl cmF0b3I7CiAgICAgICAgdHlwZWRlZiBYYWxhbkRPTUNoYXJWZWN0b3JUeXBlOjpjb25zdF9yZXZl cnNlX2l0ZXJhdG9yIGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CgogICAgICAgIGVudW0geyBucG9z ID0gLTEgfTsKCiAgICAgICAgZXhwbGljaXQKICAgICAgICBYYWxhbkRPTVN0cmluZygpOwoKICAg ICAgICBleHBsaWNpdAogICAgICAgIFhhbGFuRE9NU3RyaW5nKAogICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyKiB0aGVTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf dHlwZSB0aGVDb3VudCA9IHNpemVfdHlwZShucG9zKSk7CgogICAgICAgIFhhbGFuRE9NU3RyaW5n KAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlU291cmNl LAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgdGhlU3RhcnRQb3NpdGlvbiA9IDAs CiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSB0aGVDb3VudCA9IHNpemVfdHlwZShu cG9zKSk7CgogICAgICAgIGV4cGxpY2l0CiAgICAgICAgWGFsYW5ET01TdHJpbmcoCiAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlU3RyaW5nLAogICAgICAgICAg ICAgICAgICAgICAgICBzaXplX3R5cGUgdGhlQ291bnQgPSBzaXplX3R5cGUobnBvcykpOwoKICAg ICAgICBYYWxhbkRPTVN0cmluZygKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIHRo ZUNvdW50LAogICAgICAgICAgICAgICAgICAgICAgICBYYWxhbkRPTUNoYXIgdGhlQ2hhcik7Cgog ICAgICAgIH5YYWxhbkRPTVN0cmluZygpCiAgICAgICAgewogICAgICAgIH0KCiAgICAgICAgWGFs YW5ET01TdHJpbmcmCiAgICAgICAgb3BlcmF0b3I9KGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVS SFMpCiAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKCZ0aGVSSFMgIT0gdGhpcykKICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgbV9kYXRhID0gdGhlUkhTLm1fZGF0 YTsKCgoKCiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaW52YXJpYW50cygpOwoK ICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CgogICAgICAgIFhhbGFuRE9N U3RyaW5nJgogICAgICAgIG9wZXJhdG9yPShjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVJIUyk7Cgog ICAgICAgIFhhbGFuRE9NU3RyaW5nJgogICAgICAgIG9wZXJhdG9yPShYYWxhbkRPTUNoYXIgdGhl UkhTKQogICAgICAgIHsKICAgICAgICAgICAgICAgIG1fZGF0YS5yZXNpemUoMik7CgogICAgICAg ICAgICAgICAgbV9kYXRhWzBdID0gdGhlUkhTOwogICAgICAgICAgICAgICAgbV9kYXRhWzFdID0g WGFsYW5ET01DaGFyKDApOwoKCgoKCiAgICAgICAgICAgICAgICBpbnZhcmlhbnRzKCk7CgogICAg ICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KCiAgICAgICAgaXRlcmF0b3IKICAg ICAgICBiZWdpbigpCiAgICAgICAgewogICAgICAgICAgICAgICAgaW52YXJpYW50cygpOwoKICAg ICAgICAgICAgICAgIHJldHVybiBtX2RhdGEuYmVnaW4oKTsKICAgICAgICB9CgogICAgICAgIGNv bnN0X2l0ZXJhdG9yCiAgICAgICAgYmVnaW4oKSBjb25zdAogICAgICAgIHsKICAgICAgICAgICAg ICAgIGludmFyaWFudHMoKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gbV9kYXRhLmJlZ2luKCk7 CiAgICAgICAgfQoKICAgICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgICAgcmJlZ2luKCkKICAg ICAgICB7CiAgICAgICAgICAgICAgICBpbnZhcmlhbnRzKCk7CgogICAgICAgICAgICAgICAgcmV0 dXJuIG1fZGF0YS5yYmVnaW4oKTsKICAgICAgICB9CgogICAgICAgIGNvbnN0X3JldmVyc2VfaXRl cmF0b3IKICAgICAgICByYmVnaW4oKSBjb25zdAogICAgICAgIHsKICAgICAgICAgICAgICAgIGlu dmFyaWFudHMoKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gbV9kYXRhLnJiZWdpbigpOwogICAg ICAgIH0KCiAgICAgICAgc2l6ZV90eXBlCiAgICAgICAgc2l6ZSgpIGNvbnN0CiAgICAgICAgewog ICAgICAgICAgICAgICAgaW52YXJpYW50cygpOwoKCgoKICAgICAgICAgICAgICAgIHJldHVybiBt X2RhdGEuZW1wdHkoKSA9PSB0cnVlID8gMCA6IG1fZGF0YS5zaXplKCkgLSAxOwoKICAgICAgICB9 CgogICAgICAgIHNpemVfdHlwZQogICAgICAgIGxlbmd0aCgpIGNvbnN0CiAgICAgICAgewogICAg ICAgICAgICAgICAgaW52YXJpYW50cygpOwoKICAgICAgICAgICAgICAgIHJldHVybiBzaXplKCk7 CiAgICAgICAgfQoKICAgICAgICBzaXplX3R5cGUKICAgICAgICBtYXhfc2l6ZSgpIGNvbnN0CiAg ICAgICAgewogICAgICAgICAgICAgICAgaW52YXJpYW50cygpOwoKICAgICAgICAgICAgICAgIHJl dHVybiBzaXplX3R5cGUofjApOwogICAgICAgIH0KCiAgICAgICAgdm9pZAogICAgICAgIHJlc2l6 ZSgKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIHRoZUNvdW50LAogICAgICAgICAg ICAgICAgICAgICAgICBYYWxhbkRPTUNoYXIgdGhlQ2hhcikKICAgICAgICB7CiAgICAgICAgICAg ICAgICBpbnZhcmlhbnRzKCk7CgogICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIHRoZU9s ZFNpemUgPSBzaXplKCk7CgogICAgICAgICAgICAgICAgaWYgKHRoZU9sZFNpemUgPT0gMCkKICAg ICAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgICAgICAgICAgICBtX2RhdGEucmVzaXplKHRo ZUNvdW50ICsgMSwgdGhlQ2hhcik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBl bHNlCiAgICAgICAgICAgICAgICB7CgoKCiAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YS5y ZXNpemUodGhlQ291bnQsIHRoZUNoYXIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgbV9kYXRh W3RoZU9sZFNpemVdID0gdGhlQ2hhcjsKICAgICAgICAgICAgICAgIH0KCgoKCgoKICAgICAgICAg ICAgICAgIG1fZGF0YS5iYWNrKCkgPSAwOwoKICAgICAgICAgICAgICAgIGludmFyaWFudHMoKTsK ICAgICAgICB9CgogICAgICAgIHZvaWQKICAgICAgICByZXNpemUoc2l6ZV90eXBlIHRoZUNvdW50 KQogICAgICAgIHsKICAgICAgICAgICAgICAgIGludmFyaWFudHMoKTsKCiAgICAgICAgICAgICAg ICByZXNpemUodGhlQ291bnQsIFhhbGFuRE9NQ2hhcigwKSk7CiAgICAgICAgfQoKICAgICAgICBz aXplX3R5cGUKICAgICAgICBjYXBhY2l0eSgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgICAg ICAgaW52YXJpYW50cygpOwoKICAgICAgICAgICAgICAgIHJldHVybiBtX2RhdGEuY2FwYWNpdHko KSAtIDE7CiAgICAgICAgfQoKICAgICAgICB2b2lkCiAgICAgICAgcmVzZXJ2ZShzaXplX3R5cGUg dGhlQ291bnQgPSAwKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGludmFyaWFudHMoKTsKCiAg ICAgICAgICAgICAgICBtX2RhdGEucmVzZXJ2ZSh0aGVDb3VudCArIDEpOwogICAgICAgIH0KCiAg ICAgICAgdm9pZAogICAgICAgIGNsZWFyKCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnZh cmlhbnRzKCk7CgogICAgICAgICAgICAgICAgbV9kYXRhLmVyYXNlKG1fZGF0YS5iZWdpbigpLCBt X2RhdGEuZW5kKCkpOwoKCgoKCiAgICAgICAgICAgICAgICBpbnZhcmlhbnRzKCk7CiAgICAgICAg fQoKICAgICAgICB2b2lkCiAgICAgICAgZXJhc2UoCiAgICAgICAgICAgICAgICAgICAgICAgIHNp emVfdHlwZSB0aGVTdGFydFBvc2l0aW9uID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90eXBlIHRoZUNvdW50ID0gc2l6ZV90eXBlKG5wb3MpKQogICAgICAgIHsKICAgICAgICAgICAg ICAgIGludmFyaWFudHMoKTsKCiAgICAgICAgICAgICAgICBjb25zdCBzaXplX3R5cGUgdGhlQWN0 dWFsQ291bnQgPQogICAgICAgICAgICAgICAgICAgICAgICB0aGVDb3VudCA9PSBzaXplX3R5cGUo bnBvcykgPyBsZW5ndGgoKSA6IHRoZUNvdW50OwoKICAgICAgICAgICAgICAgIGlmICh0aGVTdGFy dFBvc2l0aW9uID09IDAgJiYgdGhlQ291bnQgPT0gc2l6ZSgpKQogICAgICAgICAgICAgICAgewog ICAgICAgICAgICAgICAgICAgICAgICBtX2RhdGEuZXJhc2UobV9kYXRhLmJlZ2luKCksIG1fZGF0 YS5lbmQoKSk7CgoKCgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQogICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVyYXRvciBpID0g Z2V0SXRlcmF0b3JGb3JQb3NpdGlvbih0aGVTdGFydFBvc2l0aW9uKTsKCiAgICAgICAgICAgICAg ICAgICAgICAgIG1fZGF0YS5lcmFzZShpLCBpICsgKHRoZUFjdHVhbENvdW50KSk7CgoKCgogICAg ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGludmFyaWFudHMoKTsKICAgICAgICB9Cgog ICAgICAgIGJvb2wKICAgICAgICBlbXB0eSgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgICAg ICAgaW52YXJpYW50cygpOwoKICAgICAgICAgICAgICAgIHJldHVybiBtX2RhdGEuc2l6ZSgpIDwg MiA/IHRydWUgOiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIGNvbnN0X3JlZmVyZW5jZQogICAg ICAgIG9wZXJhdG9yW10oc2l6ZV90eXBlIHRoZUluZGV4KSBjb25zdAogICAgICAgIHsKICAgICAg ICAgICAgICAgIGludmFyaWFudHMoKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gbV9kYXRhW3Ro ZUluZGV4XTsKICAgICAgICB9CgogICAgICAgIHJlZmVyZW5jZQogICAgICAgIG9wZXJhdG9yW10o c2l6ZV90eXBlIHRoZUluZGV4KQogICAgICAgIHsKICAgICAgICAgICAgICAgIGludmFyaWFudHMo KTsKCiAgICAgICAgICAgICAgICByZXR1cm4gbV9kYXRhW3RoZUluZGV4XTsKICAgICAgICB9CiMg MzgyICJYYWxhbkRPTS9YYWxhbkRPTVN0cmluZy5ocHAiCiAgICAgICAgY29uc3QgWGFsYW5ET01D aGFyKgogICAgICAgIGNfc3RyKCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnZh cmlhbnRzKCk7CgoKCgoKICAgICAgICAgICAgICAgIHJldHVybiBtX2RhdGEuc2l6ZSgpID09IDAg PyAmc19lbXB0eSA6ICZtX2RhdGFbMF07CiAgICAgICAgfQoKICAgICAgICBjb25zdCBYYWxhbkRP TUNoYXIqCiAgICAgICAgZGF0YSgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgICAgICAgaW52 YXJpYW50cygpOwoKICAgICAgICAgICAgICAgIHJldHVybiBjX3N0cigpOwogICAgICAgIH0KCiAg ICAgICAgdm9pZAogICAgICAgIHN3YXAoWGFsYW5ET01TdHJpbmcmIHRoZU90aGVyKQogICAgICAg IHsKICAgICAgICAgICAgICAgIGludmFyaWFudHMoKTsKCiAgICAgICAgICAgICAgICBtX2RhdGEu c3dhcCh0aGVPdGhlci5tX2RhdGEpOwojIDQxNiAiWGFsYW5ET00vWGFsYW5ET01TdHJpbmcuaHBw IgogICAgICAgIH0KCiAgICAgICAgWGFsYW5ET01TdHJpbmcmCiAgICAgICAgb3BlcmF0b3IrPShj b25zdCBYYWxhbkRPTVN0cmluZyYgdGhlU291cmNlKQogICAgICAgIHsKICAgICAgICAgICAgICAg IGludmFyaWFudHMoKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gYXBwZW5kKHRoZVNvdXJjZSk7 CiAgICAgICAgfQoKICAgICAgICBYYWxhbkRPTVN0cmluZyYKICAgICAgICBvcGVyYXRvcis9KGNv bnN0IFhhbGFuRE9NQ2hhciogdGhlU3RyaW5nKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGlu dmFyaWFudHMoKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gYXBwZW5kKHRoZVN0cmluZyk7CiAg ICAgICAgfQoKICAgICAgICBYYWxhbkRPTVN0cmluZyYKICAgICAgICBvcGVyYXRvcis9KFhhbGFu RE9NQ2hhciB0aGVDaGFyKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGludmFyaWFudHMoKTsK CiAgICAgICAgICAgICAgICBhcHBlbmQoMSwgdGhlQ2hhcik7CgogICAgICAgICAgICAgICAgcmV0 dXJuICp0aGlzOwogICAgICAgIH0KCiAgICAgICAgWGFsYW5ET01TdHJpbmcmCiAgICAgICAgYXNz aWduKGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlU291cmNlKQogICAgICAgIHsKICAgICAgICAgICAg ICAgIGludmFyaWFudHMoKTsKCiAgICAgICAgICAgICAgICBlcmFzZSgpOwoKICAgICAgICAgICAg ICAgIGludmFyaWFudHMoKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gYXBwZW5kKHRoZVNvdXJj ZSk7CgogICAgICAgICAgICAgICAgaW52YXJpYW50cygpOwogICAgICAgIH0KCiAgICAgICAgWGFs YW5ET01TdHJpbmcmCiAgICAgICAgYXNzaWduKAogICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBYYWxhbkRPTUNoYXIqIHRoZVNvdXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90 eXBlIHRoZUNvdW50KQogICAgICAgIHsKICAgICAgICAgICAgICAgIGludmFyaWFudHMoKTsKCiAg ICAgICAgICAgICAgICBlcmFzZSgpOwoKICAgICAgICAgICAgICAgIGludmFyaWFudHMoKTsKCiAg ICAgICAgICAgICAgICByZXR1cm4gYXBwZW5kKHRoZVNvdXJjZSwgdGhlQ291bnQpOwogICAgICAg IH0KCiAgICAgICAgWGFsYW5ET01TdHJpbmcmCiAgICAgICAgYXNzaWduKAogICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlU291cmNlLAogICAgICAgICAgICAg ICAgICAgICAgICBzaXplX3R5cGUgdGhlUG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAg IHNpemVfdHlwZSB0aGVDb3VudCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnZhcmlhbnRz KCk7CgogICAgICAgICAgICAgICAgZXJhc2UoKTsKCiAgICAgICAgICAgICAgICBpbnZhcmlhbnRz KCk7CgogICAgICAgICAgICAgICAgcmV0dXJuIGFwcGVuZCh0aGVTb3VyY2UsIHRoZVBvc2l0aW9u LCB0aGVDb3VudCk7CiAgICAgICAgfQoKICAgICAgICBYYWxhbkRPTVN0cmluZyYKICAgICAgICBh c3NpZ24oY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZVNvdXJjZSkKICAgICAgICB7CiAgICAgICAg ICAgICAgICBpbnZhcmlhbnRzKCk7CgogICAgICAgICAgICAgICAgbV9kYXRhID0gdGhlU291cmNl Lm1fZGF0YTsKCiAgICAgICAgICAgICAgICBpbnZhcmlhbnRzKCk7CgogICAgICAgICAgICAgICAg cmV0dXJuICp0aGlzOwogICAgICAgIH0KCiAgICAgICAgWGFsYW5ET01TdHJpbmcmCiAgICAgICAg YXNzaWduKAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgdGhlQ291bnQsCiAgICAg ICAgICAgICAgICAgICAgICAgIFhhbGFuRE9NQ2hhciB0aGVDaGFyKQogICAgICAgIHsKICAgICAg ICAgICAgICAgIGludmFyaWFudHMoKTsKCiAgICAgICAgICAgICAgICBlcmFzZSgpOwoKICAgICAg ICAgICAgICAgIGludmFyaWFudHMoKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gYXBwZW5kKHRo ZUNvdW50LCB0aGVDaGFyKTsKICAgICAgICB9CgogICAgICAgIFhhbGFuRE9NU3RyaW5nJgogICAg ICAgIGFzc2lnbigKICAgICAgICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yIHRoZUZpcnN0UG9zaXRp b24sCiAgICAgICAgICAgICAgICBjb25zdF9pdGVyYXRvciB0aGVMYXN0UG9zaXRpb24pCiAgICAg ICAgewogICAgICAgICAgICAgICAgaW52YXJpYW50cygpOwoKICAgICAgICAgICAgICAgIGVyYXNl KCk7CgogICAgICAgICAgICAgICAgaW52YXJpYW50cygpOwoKICAgICAgICAgICAgICAgIGluc2Vy dChiZWdpbigpLCB0aGVGaXJzdFBvc2l0aW9uLCB0aGVMYXN0UG9zaXRpb24pOwoKICAgICAgICAg ICAgICAgIGludmFyaWFudHMoKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAg ICAgfQoKICAgICAgICBYYWxhbkRPTVN0cmluZyYKICAgICAgICBhcHBlbmQoY29uc3QgWGFsYW5E T01TdHJpbmcmIHRoZVNvdXJjZSkKICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnZhcmlhbnRz KCk7CgogICAgICAgICAgICAgICAgcmV0dXJuIGFwcGVuZCh0aGVTb3VyY2UuY19zdHIoKSwgdGhl U291cmNlLmxlbmd0aCgpKTsKICAgICAgICB9CgogICAgICAgIFhhbGFuRE9NU3RyaW5nJgogICAg ICAgIGFwcGVuZCgKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcm IHRoZVNvdXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIHRoZVBvc2l0aW9u LAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgdGhlQ291bnQpCiAgICAgICAgewog ICAgICAgICAgICAgICAgaW52YXJpYW50cygpOwoKICAgICAgICAgICAgICAgIHJldHVybiBhcHBl bmQodGhlU291cmNlLmNfc3RyKCkgKyB0aGVQb3NpdGlvbiwgdGhlQ291bnQpOwogICAgICAgIH0K CiAgICAgICAgWGFsYW5ET01TdHJpbmcmCiAgICAgICAgYXBwZW5kKAogICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0cmluZywKICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZV90eXBlIHRoZUNvdW50KTsKCiAgICAgICAgWGFsYW5ET01TdHJpbmcmCiAgICAg ICAgYXBwZW5kKGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlU3RyaW5nKQogICAgICAgIHsKICAgICAg ICAgICAgICAgICgodm9pZCkgKCh0aGVTdHJpbmcgIT0gMCkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwg KCJ0aGVTdHJpbmcgIT0gMCIsICJYYWxhbkRPTS9YYWxhbkRPTVN0cmluZy5ocHAiLCA1NTgsIF9f UFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwoKICAgICAgICAgICAgICAgIGludmFyaWFudHMoKTsK CiAgICAgICAgICAgICAgICByZXR1cm4gYXBwZW5kKHRoZVN0cmluZywgbGVuZ3RoKHRoZVN0cmlu ZykpOwogICAgICAgIH0KCiAgICAgICAgWGFsYW5ET01TdHJpbmcmCiAgICAgICAgYXBwZW5kKAog ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgdGhlQ291bnQsCiAgICAgICAgICAgICAg ICAgICAgICAgIFhhbGFuRE9NQ2hhciB0aGVDaGFyKTsKCiAgICAgICAgdm9pZAogICAgICAgIHB1 c2hfYmFjayhYYWxhbkRPTUNoYXIgdGhlQ2hhcikKICAgICAgICB7CiAgICAgICAgICAgICAgICBp bnZhcmlhbnRzKCk7CgogICAgICAgICAgICAgICAgYXBwZW5kKDEsIHRoZUNoYXIpOwoKICAgICAg ICAgICAgICAgIGludmFyaWFudHMoKTsKICAgICAgICB9CgogICAgICAgIFhhbGFuRE9NU3RyaW5n JgogICAgICAgIGluc2VydCgKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIHRoZVBv c2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhl U3RyaW5nKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGludmFyaWFudHMoKTsKCiAgICAgICAg ICAgICAgICByZXR1cm4gaW5zZXJ0KHRoZVBvc2l0aW9uLCB0aGVTdHJpbmcuY19zdHIoKSwgdGhl U3RyaW5nLmxlbmd0aCgpKTsKICAgICAgICB9CgogICAgICAgIFhhbGFuRE9NU3RyaW5nJgogICAg ICAgIGluc2VydCgKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIHRoZVBvc2l0aW9u MSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZVN0cmlu ZywKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIHRoZVBvc2l0aW9uMiwKICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIHRoZUNvdW50KQogICAgICAgIHsKICAgICAgICAg ICAgICAgIGludmFyaWFudHMoKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gaW5zZXJ0KHRoZVBv c2l0aW9uMSwgdGhlU3RyaW5nLmNfc3RyKCkgKyB0aGVQb3NpdGlvbjIsIHRoZUNvdW50KTsKICAg ICAgICB9CgogICAgICAgIFhhbGFuRE9NU3RyaW5nJgogICAgICAgIGluc2VydCgKICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZV90eXBlIHRoZVBvc2l0aW9uLAogICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0cmluZywKICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90eXBlIHRoZUNvdW50KTsKCiAgICAgICAgWGFsYW5ET01TdHJpbmcmCiAgICAgICAg aW5zZXJ0KAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgdGhlUG9zaXRpb24sCiAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlU3RyaW5nKQogICAg ICAgIHsKICAgICAgICAgICAgICAgIGludmFyaWFudHMoKTsKCiAgICAgICAgICAgICAgICByZXR1 cm4gaW5zZXJ0KHRoZVBvc2l0aW9uLCB0aGVTdHJpbmcsIGxlbmd0aCh0aGVTdHJpbmcpKTsKICAg ICAgICB9CgogICAgICAgIFhhbGFuRE9NU3RyaW5nJgogICAgICAgIGluc2VydCgKICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZV90eXBlIHRoZVBvc2l0aW9uLAogICAgICAgICAgICAgICAgICAg ICAgICBzaXplX3R5cGUgdGhlQ291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFuRE9N Q2hhciB0aGVDaGFyKTsKCiAgICAgICAgaXRlcmF0b3IKICAgICAgICBpbnNlcnQoCiAgICAgICAg ICAgICAgICAgICAgICAgIGl0ZXJhdG9yIHRoZVBvc2l0aW9uLAogICAgICAgICAgICAgICAgICAg ICAgICBYYWxhbkRPTUNoYXIgdGhlQ2hhcik7CgogICAgICAgIHZvaWQKICAgICAgICBpbnNlcnQo CiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yIHRoZVBvc2l0aW9uLAogICAgICAgICAg ICAgICAgICAgICAgICBzaXplX3R5cGUgdGhlQ291bnQsCiAgICAgICAgICAgICAgICAgICAgICAg IFhhbGFuRE9NQ2hhciB0aGVDaGFyKTsKCiAgICAgICAgdm9pZAogICAgICAgIGluc2VydCgKICAg ICAgICAgICAgICAgIGl0ZXJhdG9yIHRoZUluc2VydFBvc2l0aW9uLAogICAgICAgICAgICAgICAg Y29uc3RfaXRlcmF0b3IgdGhlRmlyc3RQb3NpdGlvbiwKICAgICAgICAgICAgICAgIGNvbnN0X2l0 ZXJhdG9yIHRoZUxhc3RQb3NpdGlvbik7CgogICAgICAgIFhhbGFuRE9NU3RyaW5nCiAgICAgICAg c3Vic3RyKAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgdGhlUG9zaXRpb24gPSAw LAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgdGhlQ291bnQgPSBzaXplX3R5cGUo bnBvcykpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgICAgICAgKCh2b2lkKSAoKHRoZUNvdW50 ID09IHNpemVfdHlwZShucG9zKSAmJiB0aGVQb3NpdGlvbiA8IGxlbmd0aCgpIHx8IHRoZVBvc2l0 aW9uICsgdGhlQ291bnQgPD0gbGVuZ3RoKCkpID8gMCA6IChfX2Fzc2VydF9mYWlsICgidGhlQ291 bnQgPT0gc2l6ZV90eXBlKG5wb3MpICYmIHRoZVBvc2l0aW9uIDwgbGVuZ3RoKCkgfHwgdGhlUG9z aXRpb24gKyB0aGVDb3VudCA8PSBsZW5ndGgoKSIsICJYYWxhbkRPTS9YYWxhbkRPTVN0cmluZy5o cHAiLCA2NDYsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwoKCiAgICAgICAgICAgICAgICBp bnZhcmlhbnRzKCk7CgogICAgICAgICAgICAgICAgcmV0dXJuIFhhbGFuRE9NU3RyaW5nKCp0aGlz LCB0aGVQb3NpdGlvbiwgdGhlQ291bnQpOwogICAgICAgIH0KCiAgICAgICAgaW50CiAgICAgICAg Y29tcGFyZShjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlU3RyaW5nKSBjb25zdAogICAgICAgIHsK ICAgICAgICAgICAgICAgIGludmFyaWFudHMoKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY29t cGFyZSh0aGVTdHJpbmcuY19zdHIoKSk7CiAgICAgICAgfQoKICAgICAgICBpbnQKICAgICAgICBj b21wYXJlKAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgdGhlUG9zaXRpb24xLAog ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgdGhlQ291bnQxLAogICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlU3RyaW5nKSBjb25zdAogICAgICAg IHsKICAgICAgICAgICAgICAgIGludmFyaWFudHMoKTsKCiAgICAgICAgICAgICAgICByZXR1cm4g Y29tcGFyZSh0aGVQb3NpdGlvbjEsIHRoZUNvdW50MSwgdGhlU3RyaW5nLmNfc3RyKCksIHRoZVN0 cmluZy5sZW5ndGgoKSk7CiAgICAgICAgfQoKICAgICAgICBpbnQKICAgICAgICBjb21wYXJlKAog ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgdGhlUG9zaXRpb24xLAogICAgICAgICAg ICAgICAgICAgICAgICBzaXplX3R5cGUgdGhlQ291bnQxLAogICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAg ICBzaXplX3R5cGUgdGhlUG9zaXRpb24yLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5 cGUgdGhlQ291bnQyKSBjb25zdAogICAgICAgIHsKICAgICAgICAgICAgICAgIGludmFyaWFudHMo KTsKCiAgICAgICAgICAgICAgICByZXR1cm4gY29tcGFyZSh0aGVQb3NpdGlvbjEsIHRoZUNvdW50 MSwgdGhlU3RyaW5nLmNfc3RyKCkgKyB0aGVQb3NpdGlvbjIsIHRoZUNvdW50Mik7CiAgICAgICAg fQoKICAgICAgICBpbnQKICAgICAgICBjb21wYXJlKGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlU3Ry aW5nKSBjb25zdDsKCiAgICAgICAgaW50CiAgICAgICAgY29tcGFyZSgKICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90eXBlIHRoZVBvc2l0aW9uMSwKICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90eXBlIHRoZUNvdW50MSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5E T01DaGFyKiB0aGVTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSB0aGVD b3VudDIgPSBzaXplX3R5cGUobnBvcykpIGNvbnN0OwoKICAgICAgICBpbnQKICAgICAgICBjb21w YXJlKGNvbnN0IGNoYXIqIHRoZVN0cmluZykgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgICAg ICBpbnZhcmlhbnRzKCk7CgogICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmUoWGFsYW5ET01T dHJpbmcodGhlU3RyaW5nKSk7CiAgICAgICAgfQoKICAgICAgICBpbnQKICAgICAgICBjb21wYXJl KAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgdGhlUG9zaXRpb24xLAogICAgICAg ICAgICAgICAgICAgICAgICBzaXplX3R5cGUgdGhlQ291bnQxLAogICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyKiB0aGVTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf dHlwZSB0aGVDb3VudDIgPSBzaXplX3R5cGUobnBvcykpIGNvbnN0CiAgICAgICAgewogICAgICAg ICAgICAgICAgaW52YXJpYW50cygpOwoKICAgICAgICAgICAgICAgIHJldHVybiBjb21wYXJlKHRo ZVBvc2l0aW9uMSwgdGhlQ291bnQxLCBYYWxhbkRPTVN0cmluZyh0aGVTdHJpbmcsIHRoZUNvdW50 MikpOwogICAgICAgIH0KCiAgICAgICAgQ2hhclZlY3RvclR5cGUKICAgICAgICB0cmFuc2NvZGUo KSBjb25zdDsKCiAgICAgICAgc3RhdGljIGJvb2wKICAgICAgICBlcXVhbHMoCiAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlTEhTLAogICAgICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBpbnQgdGhlTEhTTGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVJIUywKICAgICAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgaW50IHRoZVJIU0xlbmd0aCk7CgogICAgICAgIHN0YXRpYyBib29sCiAgICAgICAgZXF1 YWxzKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZUxIUywK ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVSSFMpCiAgICAg ICAgewogICAgICAgICAgICAgICAgcmV0dXJuIGVxdWFscyh0aGVMSFMsIGxlbmd0aCh0aGVMSFMp LCB0aGVSSFMsIGxlbmd0aCh0aGVSSFMpKTsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBib29s CiAgICAgICAgZXF1YWxzKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0 cmluZyYgdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmlu ZyYgdGhlUkhTKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCB0 aGVMSFNMZW5ndGggPSB0aGVMSFMuc2l6ZSgpOwogICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu ZWQgaW50IHRoZVJIU0xlbmd0aCA9IHRoZVJIUy5zaXplKCk7CgogICAgICAgICAgICAgICAgaWYg KHRoZUxIU0xlbmd0aCAhPSB0aGVSSFNMZW5ndGgpCiAgICAgICAgICAgICAgICB7CiAgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIGVxdWFscyh0aGVMSFMuY19zdHIoKSwgdGhlTEhTTGVuZ3RoLCB0aGVSSFMuY19zdHIoKSwg dGhlUkhTTGVuZ3RoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHN0YXRp YyBib29sCiAgICAgICAgZXF1YWxzKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxh bkRPTVN0cmluZyYgdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRP TUNoYXIqIHRoZVJIUykKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gZXF1YWxzKHRo ZUxIUy5jX3N0cigpLCB0aGVSSFMpOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljIGJvb2wKICAg ICAgICBlcXVhbHMoCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciog dGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhl UkhTKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBlcXVhbHModGhlTEhTLCB0aGVS SFMuY19zdHIoKSk7CiAgICAgICAgfQojIDc3NSAiWGFsYW5ET00vWGFsYW5ET01TdHJpbmcuaHBw IgogICAgICAgIHN0YXRpYyBzaXplX3R5cGUKICAgICAgICBsZW5ndGgoY29uc3QgWGFsYW5ET01D aGFyKiB0aGVTdHJpbmcpOwoKcHJvdGVjdGVkOgoKCgoKCgogICAgICAgIHZvaWQKICAgICAgICBp bnZhcmlhbnRzKCkgY29uc3QKICAgICAgICB7CgoKCgoKCiAgICAgICAgICAgICAgICAoKHZvaWQp ICgobV9kYXRhLnNpemUoKSA9PSAwIHx8IG1fZGF0YS5iYWNrKCkgPT0gMCkgPyAwIDogKF9fYXNz ZXJ0X2ZhaWwgKCJtX2RhdGEuc2l6ZSgpID09IDAgfHwgbV9kYXRhLmJhY2soKSA9PSAwIiwgIlhh bGFuRE9NL1hhbGFuRE9NU3RyaW5nLmhwcCIsIDc5NCwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDAp KSk7CgogICAgICAgIH0KCgoKCgoKICAgICAgICBpdGVyYXRvcgogICAgICAgIGdldEJhY2tJbnNl cnRJdGVyYXRvcigpCiAgICAgICAgewogICAgICAgICAgICAgICAgaW52YXJpYW50cygpOwoKICAg ICAgICAgICAgICAgIHJldHVybiBtX2RhdGEuc2l6ZSgpID09IDAgPyBtX2RhdGEuZW5kKCkgOiBt X2RhdGEuZW5kKCkgLSAxOwogICAgICAgIH0KCiAgICAgICAgY29uc3RfaXRlcmF0b3IKICAgICAg ICBnZXRCYWNrSW5zZXJ0SXRlcmF0b3IoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgICAgICAg IGludmFyaWFudHMoKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gbV9kYXRhLnNpemUoKSA9PSAw ID8gbV9kYXRhLmVuZCgpIDogbV9kYXRhLmVuZCgpIC0gMTsKICAgICAgICB9CgogICAgICAgIGl0 ZXJhdG9yCiAgICAgICAgZ2V0SXRlcmF0b3JGb3JQb3NpdGlvbihzaXplX3R5cGUgdGhlUG9zaXRp b24pCiAgICAgICAgewogICAgICAgICAgICAgICAgaW52YXJpYW50cygpOwoKICAgICAgICAgICAg ICAgIHJldHVybiBtX2RhdGEuYmVnaW4oKSArIHRoZVBvc2l0aW9uOwogICAgICAgIH0KCiAgICAg ICAgY29uc3RfaXRlcmF0b3IKICAgICAgICBnZXRJdGVyYXRvckZvclBvc2l0aW9uKHNpemVfdHlw ZSB0aGVQb3NpdGlvbikgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnZhcmlhbnRz KCk7CgogICAgICAgICAgICAgICAgcmV0dXJuIG1fZGF0YS5iZWdpbigpICsgdGhlUG9zaXRpb247 CiAgICAgICAgfQoKcHJpdmF0ZToKCiAgICAgICAgWGFsYW5ET01DaGFyVmVjdG9yVHlwZSBtX2Rh dGE7CgoKCgoKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIHNfZW1wdHk7Cn07CgoK CmlubGluZSBib29sCm9wZXJhdG9yPT0oCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhh bGFuRE9NU3RyaW5nJiB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFu RE9NU3RyaW5nJiB0aGVSSFMpCnsKICAgICAgICByZXR1cm4gWGFsYW5ET01TdHJpbmc6OmVxdWFs cyh0aGVMSFMsIHRoZVJIUyk7Cn0KCgoKaW5saW5lIGJvb2wKb3BlcmF0b3I9PSgKICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZUxIUywKICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVSSFMpCnsKICAgICAgICByZXR1cm4g WGFsYW5ET01TdHJpbmc6OmVxdWFscyh0aGVMSFMsIHRoZVJIUyk7Cn0KCgoKaW5saW5lIGJvb2wK b3BlcmF0b3I9PSgKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0 aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVS SFMpCnsKCiAgICAgICAgcmV0dXJuIFhhbGFuRE9NU3RyaW5nOjplcXVhbHModGhlTEhTLCB0aGVS SFMpOwp9CgoKCmlubGluZSBib29sCm9wZXJhdG9yIT0oCiAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVSSFMpCnsKICAgICAgICByZXR1cm4gISh0aGVMSFMgPT0g dGhlUkhTKTsKfQoKCgppbmxpbmUgYm9vbApvcGVyYXRvciE9KAogICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZUxIUywKICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZVJIUykKewogICAgICAgIHJldHVybiAhKHRoZUxIUyA9 PSB0aGVSSFMpOwp9CgoKCmlubGluZSBib29sCm9wZXJhdG9yIT0oCiAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlUkhTKQp7CiAgICAgICAgcmV0dXJuICEodGhlUkhT ID09IHRoZUxIUyk7Cn0KCgoKaW5saW5lIFhhbGFuRE9NU3RyaW5nCm9wZXJhdG9yKygKICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZUxIUywKICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZVJIUykKewogICAgICAgIFhh bGFuRE9NU3RyaW5nIHRoZVRlbXAodGhlTEhTKTsKCiAgICAgICAgcmV0dXJuIHRoZVRlbXAgKz0g dGhlUkhTOwp9CgoKCmlubGluZSBYYWxhbkRPTVN0cmluZwpvcGVyYXRvcisoCiAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVMSFMsCiAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlUkhTKQp7CiAgICAgICAgWGFsYW5ET01T dHJpbmcgdGhlVGVtcCh0aGVMSFMpOwoKICAgICAgICByZXR1cm4gdGhlVGVtcCArPSB0aGVSSFM7 Cn0KCgoKaW5saW5lIFhhbGFuRE9NU3RyaW5nCm9wZXJhdG9yKygKICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVSSFMpCnsKICAgICAgICBYYWxhbkRPTVN0cmluZyB0 aGVUZW1wKHRoZUxIUyk7CgogICAgICAgIHJldHVybiB0aGVUZW1wICs9IHRoZVJIUzsKfQoKCgpp bmxpbmUgY29uc3QgWGFsYW5ET01TdHJpbmcKb3BlcmF0b3IrKAogICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyKiB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhh bGFuRE9NU3RyaW5nJiB0aGVSSFMpCnsKICAgICAgICByZXR1cm4gWGFsYW5ET01TdHJpbmcodGhl TEhTKSArIHRoZVJIUzsKfQoKCgppbmxpbmUgY29uc3QgWGFsYW5ET01TdHJpbmcKb3BlcmF0b3Ir KAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlTEhTLAog ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB0aGVSSFMpCnsKICAgICAgICByZXR1 cm4gdGhlTEhTICsgWGFsYW5ET01TdHJpbmcodGhlUkhTKTsKfQojIDk3MSAiWGFsYW5ET00vWGFs YW5ET01TdHJpbmcuaHBwIgp0eXBlZGVmIHN0ZDo6dmVjdG9yPFhhbGFuRE9NQ2hhcj4gWGFsYW5E T01DaGFyVmVjdG9yVHlwZTsKCnR5cGVkZWYgc3RkOjp2ZWN0b3I8Y2hhcj4gQ2hhclZlY3RvclR5 cGU7CiMgOTg5ICJYYWxhbkRPTS9YYWxhbkRPTVN0cmluZy5ocHAiCmJvb2wKVHJhbnNjb2RlVG9M b2NhbENvZGVQYWdlKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIq IHRoZVNvdXJjZVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHRo ZVNvdXJjZVN0cmluZ0xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhclZlY3RvclR5 cGUmIHRhcmdldFZlY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB0ZXJtaW5hdGUg PSBmYWxzZSk7CiMgMTAwOCAiWGFsYW5ET00vWGFsYW5ET01TdHJpbmcuaHBwIgpib29sClRyYW5z Y29kZVRvTG9jYWxDb2RlUGFnZSgKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5E T01DaGFyKiB0aGVTb3VyY2VTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYXJWZWN0 b3JUeXBlJiB0YXJnZXRWZWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdGVybWlu YXRlID0gZmFsc2UpOwojIDEwMjQgIlhhbGFuRE9NL1hhbGFuRE9NU3RyaW5nLmhwcCIKaW5saW5l IGNvbnN0IENoYXJWZWN0b3JUeXBlClRyYW5zY29kZVRvTG9jYWxDb2RlUGFnZShjb25zdCBYYWxh bkRPTUNoYXIqIHRoZVNvdXJjZVN0cmluZykKewogICAgICAgIENoYXJWZWN0b3JUeXBlIHRoZVJl c3VsdDsKCiAgICAgICAgVHJhbnNjb2RlVG9Mb2NhbENvZGVQYWdlKHRoZVNvdXJjZVN0cmluZywg dGhlUmVzdWx0LCB0cnVlKTsKCiAgICAgICAgcmV0dXJuIHRoZVJlc3VsdDsKfQojIDEwNDUgIlhh bGFuRE9NL1hhbGFuRE9NU3RyaW5nLmhwcCIKaW5saW5lIGJvb2wKVHJhbnNjb2RlVG9Mb2NhbENv ZGVQYWdlKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhl U291cmNlU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICBDaGFyVmVjdG9yVHlwZSYgdGFy Z2V0VmVjdG9yLAogICAgICAgICAgICAgICAgICAgICAgICBib29sIHRlcm1pbmF0ZSA9IGZhbHNl KQp7CiAgICAgICAgcmV0dXJuIFRyYW5zY29kZVRvTG9jYWxDb2RlUGFnZSh0aGVTb3VyY2VTdHJp bmcuY19zdHIoKSwgdGFyZ2V0VmVjdG9yLCB0ZXJtaW5hdGUpOwp9CiMgMTA2NCAiWGFsYW5ET00v WGFsYW5ET01TdHJpbmcuaHBwIgppbmxpbmUgY29uc3QgQ2hhclZlY3RvclR5cGUKVHJhbnNjb2Rl VG9Mb2NhbENvZGVQYWdlKGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVTb3VyY2VTdHJpbmcpCnsK ICAgICAgICBDaGFyVmVjdG9yVHlwZSB0aGVSZXN1bHQ7CgogICAgICAgIFRyYW5zY29kZVRvTG9j YWxDb2RlUGFnZSh0aGVTb3VyY2VTdHJpbmcsIHRoZVJlc3VsdCwgdHJ1ZSk7CgogICAgICAgIHJl dHVybiB0aGVSZXN1bHQ7Cn0KIyAxMDg0ICJYYWxhbkRPTS9YYWxhbkRPTVN0cmluZy5ocHAiCmlu bGluZSBjb25zdCBYYWxhbkRPTVN0cmluZwpUcmFuc2NvZGVGcm9tTG9jYWxDb2RlUGFnZSgKICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdGhlU291cmNlU3RyaW5nLAogICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdGhlU291cmNlU3RyaW5nTGVuZ3RoID0gdW5z aWduZWQoLTEpKQp7CiAgICAgICAgcmV0dXJuIFhhbGFuRE9NU3RyaW5nKHRoZVNvdXJjZVN0cmlu ZywgdGhlU291cmNlU3RyaW5nTGVuZ3RoKTsKfQojIDExMDUgIlhhbGFuRE9NL1hhbGFuRE9NU3Ry aW5nLmhwcCIKYm9vbApUcmFuc2NvZGVGcm9tTG9jYWxDb2RlUGFnZSgKICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgY2hhciogdGhlU291cmNlU3RyaW5nLAogICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBpbnQgdGhlU291cmNlU3RyaW5nTGVuZ3RoLAogICAgICAgICAgICAgICAg ICAgICAgICBYYWxhbkRPTUNoYXJWZWN0b3JUeXBlJiB0aGVUYXJnZXRWZWN0b3IsCiAgICAgICAg ICAgICAgICAgICAgICAgIGJvb2wgdGVybWluYXRlID0gZmFsc2UpOwojIDExMjQgIlhhbGFuRE9N L1hhbGFuRE9NU3RyaW5nLmhwcCIKYm9vbApUcmFuc2NvZGVGcm9tTG9jYWxDb2RlUGFnZSgKICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdGhlU291cmNlU3RyaW5nLAogICAgICAg ICAgICAgICAgICAgICAgICBYYWxhbkRPTUNoYXJWZWN0b3JUeXBlJiB0aGVUYXJnZXRWZWN0b3Is CiAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdGVybWluYXRlID0gZmFsc2UpOwojIDExMzkg IlhhbGFuRE9NL1hhbGFuRE9NU3RyaW5nLmhwcCIKaW5saW5lIGNvbnN0IFhhbGFuRE9NU3RyaW5n ClRyYW5zY29kZUZyb21Mb2NhbENvZGVQYWdlKGNvbnN0IENoYXJWZWN0b3JUeXBlJiB0aGVTb3Vy Y2VTdHJpbmcpCnsKICAgICAgICBjb25zdCBDaGFyVmVjdG9yVHlwZTo6c2l6ZV90eXBlIHRoZVNp emUgPSB0aGVTb3VyY2VTdHJpbmcuc2l6ZSgpOwoKICAgICAgICBpZiAodGhlU291cmNlU3RyaW5n W3RoZVNpemUgLSAxXSA9PSBDaGFyVmVjdG9yVHlwZTo6dmFsdWVfdHlwZSgwKSkKICAgICAgICB7 CiAgICAgICAgICAgICAgICByZXR1cm4gVHJhbnNjb2RlRnJvbUxvY2FsQ29kZVBhZ2UoJip0aGVT b3VyY2VTdHJpbmcuYmVnaW4oKSwgdGhlU2l6ZSAtIDEpOwogICAgICAgIH0KICAgICAgICBlbHNl CiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIFRyYW5zY29kZUZyb21Mb2NhbENvZGVQ YWdlKCYqdGhlU291cmNlU3RyaW5nLmJlZ2luKCksIHRoZVNpemUpOwogICAgICAgIH0KfQojIDcy ICJQbGF0Zm9ybVN1cHBvcnQvRG91YmxlU3VwcG9ydC5ocHAiIDIKCgoKCmNsYXNzIERvdWJsZVN1 cHBvcnQKewpwdWJsaWM6CiMgOTEgIlBsYXRmb3JtU3VwcG9ydC9Eb3VibGVTdXBwb3J0LmhwcCIK ICAgICAgICBzdGF0aWMgYm9vbAogICAgICAgIGlzTmFOKGRvdWJsZSB0aGVOdW1iZXIpCiAgICAg ICAgewoKICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcqIGNvbnN0IHRoZUZpcnN0 RFdPUkQgPQoKCgogICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0 IHVuc2lnbmVkIGxvbmcqPigmdGhlTnVtYmVyKTsKCgogICAgICAgICAgICAgICAgY29uc3QgdW5z aWduZWQgbG9uZyogY29uc3QgdGhlU2Vjb25kRFdPUkQgPQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZUZpcnN0RFdPUkQgKyAxOwoKICAg ICAgICAgICAgICAgIHJldHVybiAqdGhlRmlyc3REV09SRCA9PSAqc19OYU5GaXJzdERXT1JEICYm CiAgICAgICAgICAgICAgICAgICAgICAgICAgICp0aGVTZWNvbmREV09SRCA9PSAqc19OYU5TZWNv bmREV09SRDsKICAgICAgICB9CgoKCgoKCgogICAgICAgIHN0YXRpYyBib29sCiAgICAgICAgaXNQ b3NpdGl2ZUluZmluaXR5KGRvdWJsZSB0aGVOdW1iZXIpCiAgICAgICAgewogICAgICAgICAgICAg ICAgcmV0dXJuICFpc05hTih0aGVOdW1iZXIpICYmIHRoZU51bWJlciA9PSBzX3Bvc2l0aXZlSW5m aW5pdHk7CiAgICAgICAgfQoKCgoKCgoKICAgICAgICBzdGF0aWMgYm9vbAogICAgICAgIGlzTmVn YXRpdmVJbmZpbml0eShkb3VibGUgdGhlTnVtYmVyKQogICAgICAgIHsKICAgICAgICAgICAgICAg IHJldHVybiAhaXNOYU4odGhlTnVtYmVyKSAmJiB0aGVOdW1iZXIgPT0gc19uZWdhdGl2ZUluZmlu aXR5OwogICAgICAgIH0KCgoKCgoKCiAgICAgICAgc3RhdGljIGJvb2wKICAgICAgICBpc1Bvc2l0 aXZlWmVybyhkb3VibGUgdGhlTnVtYmVyKQogICAgICAgIHsKCiAgICAgICAgICAgICAgICBjb25z dCB1bnNpZ25lZCBsb25nKiBjb25zdCB0aGVGaXJzdERXT1JEID0KCgoKICAgICAgICAgICAgICAg ICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBsb25nKj4oJnRoZU51bWJl cik7CgoKICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcqIGNvbnN0IHRoZVNlY29u ZERXT1JEID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0aGVGaXJzdERXT1JEICsgMTsKCiAgICAgICAgICAgICAgICByZXR1cm4gKnRoZUZp cnN0RFdPUkQgPT0gKnNfcG9zaXRpdmVaZXJvRmlyc3REV09SRCAmJgogICAgICAgICAgICAgICAg ICAgICAgICAgICAqdGhlU2Vjb25kRFdPUkQgPT0gKnNfcG9zaXRpdmVaZXJvU2Vjb25kRFdPUkQ7 CiAgICAgICAgfQoKCgoKCgoKICAgICAgICBzdGF0aWMgYm9vbAogICAgICAgIGlzTmVnYXRpdmVa ZXJvKGRvdWJsZSB0aGVOdW1iZXIpCiAgICAgICAgewoKICAgICAgICAgICAgICAgIGNvbnN0IHVu c2lnbmVkIGxvbmcqIGNvbnN0IHRoZUZpcnN0RFdPUkQgPQoKCgogICAgICAgICAgICAgICAgICAg ICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGxvbmcqPigmdGhlTnVtYmVyKTsK CgogICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyogY29uc3QgdGhlU2Vjb25kRFdP UkQgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRoZUZpcnN0RFdPUkQgKyAxOwoKICAgICAgICAgICAgICAgIHJldHVybiAqdGhlRmlyc3RE V09SRCA9PSAqc19uZWdhdGl2ZVplcm9GaXJzdERXT1JEICYmCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICp0aGVTZWNvbmREV09SRCA9PSAqc19uZWdhdGl2ZVplcm9TZWNvbmREV09SRDsKICAg ICAgICB9CiMgMTkxICJQbGF0Zm9ybVN1cHBvcnQvRG91YmxlU3VwcG9ydC5ocHAiCiAgICAgICAg c3RhdGljIGRvdWJsZQogICAgICAgIGdldE5hTigpCiAgICAgICAgewogICAgICAgICAgICAgICAg cmV0dXJuIHNfTmFOOwogICAgICAgIH0KCgoKCgoKICAgICAgICBzdGF0aWMgZG91YmxlCiAgICAg ICAgZ2V0UG9zaXRpdmVJbmZpbml0eSgpCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJu IHNfcG9zaXRpdmVJbmZpbml0eTsKICAgICAgICB9CgoKCgoKCiAgICAgICAgc3RhdGljIGRvdWJs ZQogICAgICAgIGdldE5lZ2F0aXZlSW5maW5pdHkoKQogICAgICAgIHsKICAgICAgICAgICAgICAg IHJldHVybiBzX25lZ2F0aXZlSW5maW5pdHk7CiAgICAgICAgfQojIDIyNyAiUGxhdGZvcm1TdXBw b3J0L0RvdWJsZVN1cHBvcnQuaHBwIgogICAgICAgIHN0YXRpYyBib29sCiAgICAgICAgZXF1YWwo CiAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB0aGVMSFMsCiAgICAgICAgICAgICAgICAg ICAgICAgIGRvdWJsZSB0aGVSSFMpOwojIDI0MCAiUGxhdGZvcm1TdXBwb3J0L0RvdWJsZVN1cHBv cnQuaHBwIgogICAgICAgIHN0YXRpYyBib29sCiAgICAgICAgbm90RXF1YWwoCiAgICAgICAgICAg ICAgICAgICAgICAgIGRvdWJsZSB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJs ZSB0aGVSSFMpOwojIDI1MyAiUGxhdGZvcm1TdXBwb3J0L0RvdWJsZVN1cHBvcnQuaHBwIgogICAg ICAgIHN0YXRpYyBib29sCiAgICAgICAgbGVzc1RoYW4oCiAgICAgICAgICAgICAgICAgICAgICAg IGRvdWJsZSB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB0aGVSSFMpOwoj IDI2NiAiUGxhdGZvcm1TdXBwb3J0L0RvdWJsZVN1cHBvcnQuaHBwIgogICAgICAgIHN0YXRpYyBi b29sCiAgICAgICAgbGVzc1RoYW5PckVxdWFsKAogICAgICAgICAgICAgICAgICAgICAgICBkb3Vi bGUgdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdGhlUkhTKTsKIyAyNzkg IlBsYXRmb3JtU3VwcG9ydC9Eb3VibGVTdXBwb3J0LmhwcCIKICAgICAgICBzdGF0aWMgYm9vbAog ICAgICAgIGdyZWF0ZXJUaGFuKAogICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdGhlTEhT LAogICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdGhlUkhTKTsKIyAyOTIgIlBsYXRmb3Jt U3VwcG9ydC9Eb3VibGVTdXBwb3J0LmhwcCIKICAgICAgICBzdGF0aWMgYm9vbAogICAgICAgIGdy ZWF0ZXJUaGFuT3JFcXVhbCgKICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHRoZUxIUywK ICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHRoZVJIUyk7CiMgMzA1ICJQbGF0Zm9ybVN1 cHBvcnQvRG91YmxlU3VwcG9ydC5ocHAiCiAgICAgICAgc3RhdGljIGRvdWJsZQogICAgICAgIGFk ZCgKICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHRoZUxIUywKICAgICAgICAgICAgICAg ICAgICAgICAgZG91YmxlIHRoZVJIUyk7CiMgMzE4ICJQbGF0Zm9ybVN1cHBvcnQvRG91YmxlU3Vw cG9ydC5ocHAiCiAgICAgICAgc3RhdGljIGRvdWJsZQogICAgICAgIHN1YnRyYWN0KAogICAgICAg ICAgICAgICAgICAgICAgICBkb3VibGUgdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICBk b3VibGUgdGhlUkhTKTsKIyAzMzEgIlBsYXRmb3JtU3VwcG9ydC9Eb3VibGVTdXBwb3J0LmhwcCIK ICAgICAgICBzdGF0aWMgZG91YmxlCiAgICAgICAgbXVsdGlwbHkoCiAgICAgICAgICAgICAgICAg ICAgICAgIGRvdWJsZSB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB0aGVS SFMpOwojIDM0NCAiUGxhdGZvcm1TdXBwb3J0L0RvdWJsZVN1cHBvcnQuaHBwIgogICAgICAgIHN0 YXRpYyBkb3VibGUKICAgICAgICBkaXZpZGUoCiAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJs ZSB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB0aGVSSFMpOwojIDM1OCAi UGxhdGZvcm1TdXBwb3J0L0RvdWJsZVN1cHBvcnQuaHBwIgogICAgICAgIHN0YXRpYyBkb3VibGUK ICAgICAgICBtb2R1bHVzKAogICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdGhlTEhTLAog ICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdGhlUkhTKTsKIyAzNzEgIlBsYXRmb3JtU3Vw cG9ydC9Eb3VibGVTdXBwb3J0LmhwcCIKICAgICAgICBzdGF0aWMgZG91YmxlCiAgICAgICAgbmVn YXRpdmUoZG91YmxlIHRoZURvdWJsZSk7CgoKCgoKCiAgICAgICAgc3RydWN0IGVxdWFsRnVuY3Rp b24gOiBwdWJsaWMgc3RkOjpiaW5hcnlfZnVuY3Rpb248Y29uc3QgZG91YmxlJiwgY29uc3QgZG91 YmxlJiwgYm9vbD4KCiAgICAgICAgewogICAgICAgICAgICAgICAgcmVzdWx0X3R5cGUKICAgICAg ICAgICAgICAgIG9wZXJhdG9yKCkoCiAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0X2FyZ3Vt ZW50X3R5cGUgdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRfYXJndW1lbnRf dHlwZSB0aGVSSFMpIGNvbnN0CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybiBlcXVhbCh0aGVMSFMsIHRoZVJIUyk7CiAgICAgICAgICAgICAgICB9CiAgICAg ICAgfTsKCgoKCiAgICAgICAgc3RydWN0IG5vdEVxdWFsRnVuY3Rpb24gOiBwdWJsaWMgc3RkOjpi aW5hcnlfZnVuY3Rpb248Y29uc3QgZG91YmxlJiwgY29uc3QgZG91YmxlJiwgYm9vbD4KCiAgICAg ICAgewogICAgICAgICAgICAgICAgcmVzdWx0X3R5cGUKICAgICAgICAgICAgICAgIG9wZXJhdG9y KCkoCiAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0X2FyZ3VtZW50X3R5cGUgdGhlTEhTLAog ICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRfYXJndW1lbnRfdHlwZSB0aGVSSFMpIGNvbnN0 CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub3RFcXVh bCh0aGVMSFMsIHRoZVJIUyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfTsKCgoKCiAgICAg ICAgc3RydWN0IGxlc3NUaGFuRnVuY3Rpb24gOiBwdWJsaWMgc3RkOjpiaW5hcnlfZnVuY3Rpb248 Y29uc3QgZG91YmxlJiwgY29uc3QgZG91YmxlJiwgYm9vbD4KCiAgICAgICAgewogICAgICAgICAg ICAgICAgcmVzdWx0X3R5cGUKICAgICAgICAgICAgICAgIG9wZXJhdG9yKCkoCiAgICAgICAgICAg ICAgICAgICAgICAgIGZpcnN0X2FyZ3VtZW50X3R5cGUgdGhlTEhTLAogICAgICAgICAgICAgICAg ICAgICAgICBzZWNvbmRfYXJndW1lbnRfdHlwZSB0aGVSSFMpIGNvbnN0CiAgICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsZXNzVGhhbih0aGVMSFMsIHRoZVJI Uyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfTsKCgoKCiAgICAgICAgc3RydWN0IGxlc3NU aGFuT3JFcXVhbEZ1bmN0aW9uIDogcHVibGljIHN0ZDo6YmluYXJ5X2Z1bmN0aW9uPGNvbnN0IGRv dWJsZSYsIGNvbnN0IGRvdWJsZSYsIGJvb2w+CgogICAgICAgIHsKICAgICAgICAgICAgICAgIHJl c3VsdF90eXBlCiAgICAgICAgICAgICAgICBvcGVyYXRvcigpKAogICAgICAgICAgICAgICAgICAg ICAgICBmaXJzdF9hcmd1bWVudF90eXBlIHRoZUxIUywKICAgICAgICAgICAgICAgICAgICAgICAg c2Vjb25kX2FyZ3VtZW50X3R5cGUgdGhlUkhTKSBjb25zdAogICAgICAgICAgICAgICAgewogICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGVzc1RoYW5PckVxdWFsKHRoZUxIUywgdGhlUkhT KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9OwoKCgoKICAgICAgICBzdHJ1Y3QgZ3JlYXRl clRoYW5GdW5jdGlvbiA6IHB1YmxpYyBzdGQ6OmJpbmFyeV9mdW5jdGlvbjxjb25zdCBkb3VibGUm LCBjb25zdCBkb3VibGUmLCBib29sPgoKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXN1bHRf dHlwZQogICAgICAgICAgICAgICAgb3BlcmF0b3IoKSgKICAgICAgICAgICAgICAgICAgICAgICAg Zmlyc3RfYXJndW1lbnRfdHlwZSB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgIHNlY29u ZF9hcmd1bWVudF90eXBlIHRoZVJIUykgY29uc3QKICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIGdyZWF0ZXJUaGFuKHRoZUxIUywgdGhlUkhTKTsKICAgICAg ICAgICAgICAgIH0KICAgICAgICB9OwoKCgoKICAgICAgICBzdHJ1Y3QgZ3JlYXRlclRoYW5PckVx dWFsRnVuY3Rpb24gOiBwdWJsaWMgc3RkOjpiaW5hcnlfZnVuY3Rpb248Y29uc3QgZG91YmxlJiwg Y29uc3QgZG91YmxlJiwgYm9vbD4KCiAgICAgICAgewogICAgICAgICAgICAgICAgcmVzdWx0X3R5 cGUKICAgICAgICAgICAgICAgIG9wZXJhdG9yKCkoCiAgICAgICAgICAgICAgICAgICAgICAgIGZp cnN0X2FyZ3VtZW50X3R5cGUgdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRf YXJndW1lbnRfdHlwZSB0aGVSSFMpIGNvbnN0CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAgICAgICAgIHJldHVybiBncmVhdGVyVGhhbk9yRXF1YWwodGhlTEhTLCB0aGVSSFMpOwog ICAgICAgICAgICAgICAgfQogICAgICAgIH07CgoKCgogICAgICAgIHN0cnVjdCBhZGRGdW5jdGlv biA6IHB1YmxpYyBzdGQ6OmJpbmFyeV9mdW5jdGlvbjxjb25zdCBkb3VibGUmLCBjb25zdCBkb3Vi bGUmLCBkb3VibGU+CgogICAgICAgIHsKICAgICAgICAgICAgICAgIHJlc3VsdF90eXBlCiAgICAg ICAgICAgICAgICBvcGVyYXRvcigpKAogICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF9hcmd1 bWVudF90eXBlIHRoZUxIUywKICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kX2FyZ3VtZW50 X3R5cGUgdGhlUkhTKSBjb25zdAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4gYWRkKHRoZUxIUywgdGhlUkhTKTsKICAgICAgICAgICAgICAgIH0KICAgICAg ICB9OwoKCgoKICAgICAgICBzdHJ1Y3Qgc3VidHJhY3RGdW5jdGlvbiA6IHB1YmxpYyBzdGQ6OmJp bmFyeV9mdW5jdGlvbjxjb25zdCBkb3VibGUmLCBjb25zdCBkb3VibGUmLCBkb3VibGU+CgogICAg ICAgIHsKICAgICAgICAgICAgICAgIHJlc3VsdF90eXBlCiAgICAgICAgICAgICAgICBvcGVyYXRv cigpKAogICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF9hcmd1bWVudF90eXBlIHRoZUxIUywK ICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kX2FyZ3VtZW50X3R5cGUgdGhlUkhTKSBjb25z dAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VidHJh Y3QodGhlTEhTLCB0aGVSSFMpOwogICAgICAgICAgICAgICAgfQogICAgICAgIH07CgoKCgogICAg ICAgIHN0cnVjdCBtdWx0aXBseUZ1bmN0aW9uIDogcHVibGljIHN0ZDo6YmluYXJ5X2Z1bmN0aW9u PGNvbnN0IGRvdWJsZSYsIGNvbnN0IGRvdWJsZSYsIGRvdWJsZT4KCiAgICAgICAgewogICAgICAg ICAgICAgICAgcmVzdWx0X3R5cGUKICAgICAgICAgICAgICAgIG9wZXJhdG9yKCkoCiAgICAgICAg ICAgICAgICAgICAgICAgIGZpcnN0X2FyZ3VtZW50X3R5cGUgdGhlTEhTLAogICAgICAgICAgICAg ICAgICAgICAgICBzZWNvbmRfYXJndW1lbnRfdHlwZSB0aGVSSFMpIGNvbnN0CiAgICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtdWx0aXBseSh0aGVMSFMsIHRo ZVJIUyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfTsKCgoKCiAgICAgICAgc3RydWN0IGRp dmlkZUZ1bmN0aW9uIDogcHVibGljIHN0ZDo6YmluYXJ5X2Z1bmN0aW9uPGNvbnN0IGRvdWJsZSYs IGNvbnN0IGRvdWJsZSYsIGRvdWJsZT4KCiAgICAgICAgewogICAgICAgICAgICAgICAgcmVzdWx0 X3R5cGUKICAgICAgICAgICAgICAgIG9wZXJhdG9yKCkoCiAgICAgICAgICAgICAgICAgICAgICAg IGZpcnN0X2FyZ3VtZW50X3R5cGUgdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICBzZWNv bmRfYXJndW1lbnRfdHlwZSB0aGVSSFMpIGNvbnN0CiAgICAgICAgICAgICAgICB7CiAgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybiBkaXZpZGUodGhlTEhTLCB0aGVSSFMpOwogICAgICAgICAg ICAgICAgfQogICAgICAgIH07CgoKCgogICAgICAgIHN0cnVjdCBtb2R1bHVzRnVuY3Rpb24gOiBw dWJsaWMgc3RkOjpiaW5hcnlfZnVuY3Rpb248Y29uc3QgZG91YmxlJiwgY29uc3QgZG91YmxlJiwg ZG91YmxlPgoKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXN1bHRfdHlwZQogICAgICAgICAg ICAgICAgb3BlcmF0b3IoKSgKICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RfYXJndW1lbnRf dHlwZSB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZF9hcmd1bWVudF90eXBl IHRoZVJIUykgY29uc3QKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuIG1vZHVsdXModGhlTEhTLCB0aGVSSFMpOwogICAgICAgICAgICAgICAgfQogICAgICAg IH07CgoKCgogICAgICAgIHN0cnVjdCBuZWdhdGl2ZUZ1bmN0aW9uIDogcHVibGljIHN0ZDo6dW5h cnlfZnVuY3Rpb248Y29uc3QgZG91YmxlJiwgZG91YmxlPgoKICAgICAgICB7CiAgICAgICAgICAg ICAgICByZXN1bHRfdHlwZQogICAgICAgICAgICAgICAgb3BlcmF0b3IoKShhcmd1bWVudF90eXBl IHRoZURvdWJsZSkgY29uc3QKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIG5lZ2F0aXZlKHRoZURvdWJsZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg fTsKIyA1NjEgIlBsYXRmb3JtU3VwcG9ydC9Eb3VibGVTdXBwb3J0LmhwcCIKICAgICAgICBzdGF0 aWMgYm9vbAogICAgICAgIGlzVmFsaWQoY29uc3QgWGFsYW5ET01TdHJpbmcgdGhlU3RyaW5nKTsK IyA1NzEgIlBsYXRmb3JtU3VwcG9ydC9Eb3VibGVTdXBwb3J0LmhwcCIKICAgICAgICBzdGF0aWMg Ym9vbAogICAgICAgIGlzVmFsaWQoY29uc3QgWGFsYW5ET01DaGFyKiB0aGVTdHJpbmcpOwojIDU4 MiAiUGxhdGZvcm1TdXBwb3J0L0RvdWJsZVN1cHBvcnQuaHBwIgogICAgICAgIHN0YXRpYyBkb3Vi bGUKICAgICAgICB0b0RvdWJsZShjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlU3RyaW5nKTsKIyA1 OTMgIlBsYXRmb3JtU3VwcG9ydC9Eb3VibGVTdXBwb3J0LmhwcCIKICAgICAgICBzdGF0aWMgZG91 YmxlCiAgICAgICAgdG9Eb3VibGUoY29uc3QgWGFsYW5ET01DaGFyKiB0aGVTdHJpbmcpOwojIDYw MyAiUGxhdGZvcm1TdXBwb3J0L0RvdWJsZVN1cHBvcnQuaHBwIgogICAgICAgIHN0YXRpYyBkb3Vi bGUKICAgICAgICByb3VuZChkb3VibGUgdGhlVmFsdWUpOwoKcHJpdmF0ZToKCiAgICAgICAgc3Rh dGljIGNvbnN0IGRvdWJsZSBzX05hTjsKICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIHNfcG9z aXRpdmVJbmZpbml0eTsKICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIHNfbmVnYXRpdmVJbmZp bml0eTsKICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIHNfcG9zaXRpdmVaZXJvOwogICAgICAg IHN0YXRpYyBjb25zdCBkb3VibGUgc19uZWdhdGl2ZVplcm87CgogICAgICAgIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBsb25nKiBzX05hTkZpcnN0RFdPUkQ7CiAgICAgICAgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGxvbmcqIHNfTmFOU2Vjb25kRFdPUkQ7CgogICAgICAgIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBsb25nKiBzX3Bvc2l0aXZlWmVyb0ZpcnN0RFdPUkQ7CiAgICAgICAgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGxvbmcqIHNfcG9zaXRpdmVaZXJvU2Vjb25kRFdPUkQ7CgogICAgICAgIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBsb25nKiBzX25lZ2F0aXZlWmVyb0ZpcnN0RFdPUkQ7CiAgICAgICAg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcqIHNfbmVnYXRpdmVaZXJvU2Vjb25kRFdPUkQ7Cn07 CiMgNTggIlBsYXRmb3JtU3VwcG9ydC9Eb3VibGVTdXBwb3J0LmNwcCIgMgoKCgojIDEgIi91c3Iv bG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysv Y21hdGgiIDEgMwoKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51 eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NtYXRoLmgiIDEgMwojIDM5ICIvdXNyL2xv Y2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2Jp dHMvc3RkX2NtYXRoLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1w Yy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29u ZmlnLmgiIDEgMwojIDQwICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51 eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NtYXRoLmgiIDIgMwojIDEgIi91c3IvbG9j YWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0 cy9zdGRfY3N0ZGxpYi5oIiAxIDMKIyA0MSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2 ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jbWF0aC5oIiAyIDMKIyA0 MyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNs dWRlL2crKy9iaXRzL3N0ZF9jbWF0aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMSAz CiMgMjcgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMu aCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCiMg MSAiL3Vzci9pbmNsdWRlL2JpdHMvaHVnZV92YWwuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9i aXRzL2h1Z2VfdmFsLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjYg Ii91c3IvaW5jbHVkZS9iaXRzL2h1Z2VfdmFsLmgiIDIgMwojIDM0ICIvdXNyL2luY2x1ZGUvbWF0 aC5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9uYW4uaCIgMSAzCiMgMzggIi91c3Iv aW5jbHVkZS9tYXRoLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGRlZi5oIiAx IDMKIyAyOSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGRlZi5oIiAzCnR5cGVkZWYgbG9uZyBkb3Vi bGUgZmxvYXRfdDsKCnR5cGVkZWYgbG9uZyBkb3VibGUgZG91YmxlX3Q7CiMgNDEgIi91c3IvaW5j bHVkZS9tYXRoLmgiIDIgMwojIDYzICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9p bmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMwojIDU0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRo Y2FsbHMuaCIgMwpleHRlcm4gZG91YmxlIGFjb3MgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91Ymxl IF9fYWNvcyAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIGFzaW4gKGRvdWJsZSBfX3gpOyBl eHRlcm4gZG91YmxlIF9fYXNpbiAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIGF0YW4gKGRv dWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fYXRhbiAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91 YmxlIGF0YW4yIChkb3VibGUgX195LCBkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW4y IChkb3VibGUgX195LCBkb3VibGUgX194KTsKCgpleHRlcm4gZG91YmxlIGNvcyAoZG91YmxlIF9f eCk7IGV4dGVybiBkb3VibGUgX19jb3MgKGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGRvdWJsZSBzaW4g KGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fc2luIChkb3VibGUgX194KTsKCmV4dGVybiBk b3VibGUgdGFuIChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX3RhbiAoZG91YmxlIF9feCk7 CgoKCmV4dGVybiB2b2lkIHNpbmNvcyAoZG91YmxlIF9feCwgZG91YmxlICpfX3NpbngsIGRvdWJs ZSAqX19jb3N4KTsgZXh0ZXJuIHZvaWQgX19zaW5jb3MgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19z aW54LCBkb3VibGUgKl9fY29zeCk7CgoKCgoKCmV4dGVybiBkb3VibGUgY29zaCAoZG91YmxlIF9f eCk7IGV4dGVybiBkb3VibGUgX19jb3NoIChkb3VibGUgX194KTsKCmV4dGVybiBkb3VibGUgc2lu aCAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19zaW5oIChkb3VibGUgX194KTsKCmV4dGVy biBkb3VibGUgdGFuaCAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX190YW5oIChkb3VibGUg X194KTsKCgoKZXh0ZXJuIGRvdWJsZSBhY29zaCAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUg X19hY29zaCAoZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIGFzaW5oIChkb3VibGUgX194KTsg ZXh0ZXJuIGRvdWJsZSBfX2FzaW5oIChkb3VibGUgX194KTsKCmV4dGVybiBkb3VibGUgYXRhbmgg KGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fYXRhbmggKGRvdWJsZSBfX3gpOwoKCgoKCmV4 dGVybiBkb3VibGUgZXhwIChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX2V4cCAoZG91Ymxl IF9feCk7CgoKCmV4dGVybiBkb3VibGUgZXhwMTAgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91Ymxl IF9fZXhwMTAgKGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGRvdWJsZSBwb3cxMCAoZG91YmxlIF9feCk7 IGV4dGVybiBkb3VibGUgX19wb3cxMCAoZG91YmxlIF9feCk7CgoKCmV4dGVybiBkb3VibGUgZnJl eHAgKGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCk7IGV4dGVybiBkb3VibGUgX19mcmV4cCAo ZG91YmxlIF9feCwgaW50ICpfX2V4cG9uZW50KTsKCgpleHRlcm4gZG91YmxlIGxkZXhwIChkb3Vi bGUgX194LCBpbnQgX19leHBvbmVudCk7IGV4dGVybiBkb3VibGUgX19sZGV4cCAoZG91YmxlIF9f eCwgaW50IF9fZXhwb25lbnQpOwoKCmV4dGVybiBkb3VibGUgbG9nIChkb3VibGUgX194KTsgZXh0 ZXJuIGRvdWJsZSBfX2xvZyAoZG91YmxlIF9feCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cxMCAoZG91 YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19sb2cxMCAoZG91YmxlIF9feCk7CgoKZXh0ZXJuIGRv dWJsZSBtb2RmIChkb3VibGUgX194LCBkb3VibGUgKl9faXB0cik7IGV4dGVybiBkb3VibGUgX19t b2RmIChkb3VibGUgX194LCBkb3VibGUgKl9faXB0cik7CgoKCmV4dGVybiBkb3VibGUgZXhwbTEg KGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fZXhwbTEgKGRvdWJsZSBfX3gpOwoKCmV4dGVy biBkb3VibGUgbG9nMXAgKGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fbG9nMXAgKGRvdWJs ZSBfX3gpOwoKCmV4dGVybiBkb3VibGUgbG9nYiAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUg X19sb2diIChkb3VibGUgX194KTsKCgoKCmV4dGVybiBkb3VibGUgZXhwMiAoZG91YmxlIF9feCk7 IGV4dGVybiBkb3VibGUgX19leHAyIChkb3VibGUgX194KTsKCgpleHRlcm4gZG91YmxlIGxvZzIg KGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fbG9nMiAoZG91YmxlIF9feCk7CgoKCgoKCmV4 dGVybiBkb3VibGUgcG93IChkb3VibGUgX194LCBkb3VibGUgX195KTsgZXh0ZXJuIGRvdWJsZSBf X3BvdyAoZG91YmxlIF9feCwgZG91YmxlIF9feSk7CgoKZXh0ZXJuIGRvdWJsZSBzcXJ0IChkb3Vi bGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX3NxcnQgKGRvdWJsZSBfX3gpOwoKCgpleHRlcm4gZG91 YmxlIGh5cG90IChkb3VibGUgX194LCBkb3VibGUgX195KTsgZXh0ZXJuIGRvdWJsZSBfX2h5cG90 IChkb3VibGUgX194LCBkb3VibGUgX195KTsKCgoKCmV4dGVybiBkb3VibGUgY2JydCAoZG91Ymxl IF9feCk7IGV4dGVybiBkb3VibGUgX19jYnJ0IChkb3VibGUgX194KTsKCgoKCgoKZXh0ZXJuIGRv dWJsZSBjZWlsIChkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX2NlaWwgKGRvdWJsZSBfX3gp OwoKCmV4dGVybiBkb3VibGUgZmFicyAoZG91YmxlIF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3RfXykpOyBleHRlcm4gZG91YmxlIF9fZmFicyAoZG91YmxlIF9feCkgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUgZmxvb3IgKGRvdWJsZSBfX3gpOyBleHRlcm4g ZG91YmxlIF9fZmxvb3IgKGRvdWJsZSBfX3gpOwoKCmV4dGVybiBkb3VibGUgZm1vZCAoZG91Ymxl IF9feCwgZG91YmxlIF9feSk7IGV4dGVybiBkb3VibGUgX19mbW9kIChkb3VibGUgX194LCBkb3Vi bGUgX195KTsKCgoKCmV4dGVybiBpbnQgX19pc2luZiAoZG91YmxlIF9fdmFsdWUpIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fZmluaXRlIChkb3VibGUgX192YWx1 ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBpc2luZiAoZG91 YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IGZp bml0ZSAoZG91YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoK CmV4dGVybiBkb3VibGUgaW5mbmFuIChpbnQgX19lcnJvcikgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3RfXykpOyBleHRlcm4gZG91YmxlIF9faW5mbmFuIChpbnQgX19lcnJvcikgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUgZHJlbSAoZG91YmxlIF9feCwgZG91Ymxl IF9feSk7IGV4dGVybiBkb3VibGUgX19kcmVtIChkb3VibGUgX194LCBkb3VibGUgX195KTsKCgoK ZXh0ZXJuIGRvdWJsZSBzaWduaWZpY2FuZCAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19z aWduaWZpY2FuZCAoZG91YmxlIF9feCk7CgoKCgpleHRlcm4gZG91YmxlIGNvcHlzaWduIChkb3Vi bGUgX194LCBkb3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBk b3VibGUgX19jb3B5c2lnbiAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGRvdWJsZSBuYW4gKF9fY29uc3QgY2hhciAqX190YWdi KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19uYW4gKF9fY29u c3QgY2hhciAqX190YWdiKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4g aW50IF9faXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 CgoKCmV4dGVybiBpbnQgaXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBqMCAoZG91YmxlKTsgZXh0ZXJuIGRvdWJsZSBfX2ow IChkb3VibGUpOwpleHRlcm4gZG91YmxlIGoxIChkb3VibGUpOyBleHRlcm4gZG91YmxlIF9fajEg KGRvdWJsZSk7CmV4dGVybiBkb3VibGUgam4gKGludCwgZG91YmxlKTsgZXh0ZXJuIGRvdWJsZSBf X2puIChpbnQsIGRvdWJsZSk7CmV4dGVybiBkb3VibGUgeTAgKGRvdWJsZSk7IGV4dGVybiBkb3Vi bGUgX195MCAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSB5MSAoZG91YmxlKTsgZXh0ZXJuIGRvdWJs ZSBfX3kxIChkb3VibGUpOwpleHRlcm4gZG91YmxlIHluIChpbnQsIGRvdWJsZSk7IGV4dGVybiBk b3VibGUgX195biAoaW50LCBkb3VibGUpOwoKCgoKCmV4dGVybiBkb3VibGUgZXJmIChkb3VibGUp OyBleHRlcm4gZG91YmxlIF9fZXJmIChkb3VibGUpOwpleHRlcm4gZG91YmxlIGVyZmMgKGRvdWJs ZSk7IGV4dGVybiBkb3VibGUgX19lcmZjIChkb3VibGUpOwpleHRlcm4gZG91YmxlIGxnYW1tYSAo ZG91YmxlKTsgZXh0ZXJuIGRvdWJsZSBfX2xnYW1tYSAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSB0 Z2FtbWEgKGRvdWJsZSk7IGV4dGVybiBkb3VibGUgX190Z2FtbWEgKGRvdWJsZSk7CgoKCgpleHRl cm4gZG91YmxlIGdhbW1hIChkb3VibGUpOyBleHRlcm4gZG91YmxlIF9fZ2FtbWEgKGRvdWJsZSk7 CgoKCgoKCmV4dGVybiBkb3VibGUgbGdhbW1hX3IgKGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKTsg ZXh0ZXJuIGRvdWJsZSBfX2xnYW1tYV9yIChkb3VibGUsIGludCAqX19zaWduZ2FtcCk7CgoKCgoK CmV4dGVybiBkb3VibGUgcmludCAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19yaW50IChk b3VibGUgX194KTsKCgpleHRlcm4gZG91YmxlIG5leHRhZnRlciAoZG91YmxlIF9feCwgZG91Ymxl IF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmV4dGFm dGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 CgpleHRlcm4gZG91YmxlIG5leHR0b3dhcmQgKGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkg X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmV4dHRvd2FyZCAo ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 CgoKCmV4dGVybiBkb3VibGUgcmVtYWluZGVyIChkb3VibGUgX194LCBkb3VibGUgX195KTsgZXh0 ZXJuIGRvdWJsZSBfX3JlbWFpbmRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSk7CgoKCmV4dGVy biBkb3VibGUgc2NhbGIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX24pOyBleHRlcm4gZG91YmxlIF9f c2NhbGIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX24pOwoKCgpleHRlcm4gZG91YmxlIHNjYWxibiAo ZG91YmxlIF9feCwgaW50IF9fbik7IGV4dGVybiBkb3VibGUgX19zY2FsYm4gKGRvdWJsZSBfX3gs IGludCBfX24pOwoKCmV4dGVybiBpbnQgaWxvZ2IgKGRvdWJsZSBfX3gpOyBleHRlcm4gaW50IF9f aWxvZ2IgKGRvdWJsZSBfX3gpOwoKCgoKZXh0ZXJuIGRvdWJsZSBzY2FsYmxuIChkb3VibGUgX194 LCBsb25nIGludCBfX24pOyBleHRlcm4gZG91YmxlIF9fc2NhbGJsbiAoZG91YmxlIF9feCwgbG9u ZyBpbnQgX19uKTsKCgoKZXh0ZXJuIGRvdWJsZSBuZWFyYnlpbnQgKGRvdWJsZSBfX3gpOyBleHRl cm4gZG91YmxlIF9fbmVhcmJ5aW50IChkb3VibGUgX194KTsKCgoKZXh0ZXJuIGRvdWJsZSByb3Vu ZCAoZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19yb3VuZCAoZG91YmxlIF9feCk7CgoKCmV4 dGVybiBkb3VibGUgdHJ1bmMgKGRvdWJsZSBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsgZXh0ZXJuIGRvdWJsZSBfX3RydW5jIChkb3VibGUgX194KSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7CgoKCgpleHRlcm4gZG91YmxlIHJlbXF1byAoZG91YmxlIF9feCwgZG91YmxlIF9f eSwgaW50ICpfX3F1byk7IGV4dGVybiBkb3VibGUgX19yZW1xdW8gKGRvdWJsZSBfX3gsIGRvdWJs ZSBfX3ksIGludCAqX19xdW8pOwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgbHJpbnQgKGRvdWJsZSBf X3gpOyBleHRlcm4gbG9uZyBpbnQgX19scmludCAoZG91YmxlIF9feCk7CmV4dGVybiBsb25nIGxv bmcgaW50IGxscmludCAoZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyaW50 IChkb3VibGUgX194KTsKCgoKZXh0ZXJuIGxvbmcgaW50IGxyb3VuZCAoZG91YmxlIF9feCk7IGV4 dGVybiBsb25nIGludCBfX2xyb3VuZCAoZG91YmxlIF9feCk7CmV4dGVybiBsb25nIGxvbmcgaW50 IGxscm91bmQgKGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscm91bmQgKGRv dWJsZSBfX3gpOwoKCgpleHRlcm4gZG91YmxlIGZkaW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kp OyBleHRlcm4gZG91YmxlIF9fZmRpbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSk7CgoKZXh0ZXJu IGRvdWJsZSBmbWF4IChkb3VibGUgX194LCBkb3VibGUgX195KTsgZXh0ZXJuIGRvdWJsZSBfX2Zt YXggKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpOwoKCmV4dGVybiBkb3VibGUgZm1pbiAoZG91Ymxl IF9feCwgZG91YmxlIF9feSk7IGV4dGVybiBkb3VibGUgX19mbWluIChkb3VibGUgX194LCBkb3Vi bGUgX195KTsKCgoKZXh0ZXJuIGludCBfX2ZwY2xhc3NpZnkgKGRvdWJsZSBfX3ZhbHVlKQogICAg IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fc2lnbmJpdCAoZG91 YmxlIF9fdmFsdWUpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4g ZG91YmxlIGZtYSAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgZG91YmxlIF9feik7IGV4dGVybiBk b3VibGUgX19mbWEgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3ksIGRvdWJsZSBfX3opOwojIDY0ICIv dXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA4MiAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEg Ii91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMKIyA1NCAiL3Vzci9pbmNsdWRlL2Jp dHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGZsb2F0IGFjb3NmIChmbG9hdCBfX3gpOyBleHRlcm4g ZmxvYXQgX19hY29zZiAoZmxvYXQgX194KTsKCmV4dGVybiBmbG9hdCBhc2luZiAoZmxvYXQgX194 KTsgZXh0ZXJuIGZsb2F0IF9fYXNpbmYgKGZsb2F0IF9feCk7CgpleHRlcm4gZmxvYXQgYXRhbmYg KGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX2F0YW5mIChmbG9hdCBfX3gpOwoKZXh0ZXJuIGZs b2F0IGF0YW4yZiAoZmxvYXQgX195LCBmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19hdGFuMmYg KGZsb2F0IF9feSwgZmxvYXQgX194KTsKCgpleHRlcm4gZmxvYXQgY29zZiAoZmxvYXQgX194KTsg ZXh0ZXJuIGZsb2F0IF9fY29zZiAoZmxvYXQgX194KTsKCmV4dGVybiBmbG9hdCBzaW5mIChmbG9h dCBfX3gpOyBleHRlcm4gZmxvYXQgX19zaW5mIChmbG9hdCBfX3gpOwoKZXh0ZXJuIGZsb2F0IHRh bmYgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX3RhbmYgKGZsb2F0IF9feCk7CgoKCmV4dGVy biB2b2lkIHNpbmNvc2YgKGZsb2F0IF9feCwgZmxvYXQgKl9fc2lueCwgZmxvYXQgKl9fY29zeCk7 IGV4dGVybiB2b2lkIF9fc2luY29zZiAoZmxvYXQgX194LCBmbG9hdCAqX19zaW54LCBmbG9hdCAq X19jb3N4KTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGNvc2hmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxv YXQgX19jb3NoZiAoZmxvYXQgX194KTsKCmV4dGVybiBmbG9hdCBzaW5oZiAoZmxvYXQgX194KTsg ZXh0ZXJuIGZsb2F0IF9fc2luaGYgKGZsb2F0IF9feCk7CgpleHRlcm4gZmxvYXQgdGFuaGYgKGZs b2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX3RhbmhmIChmbG9hdCBfX3gpOwoKCgpleHRlcm4gZmxv YXQgYWNvc2hmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19hY29zaGYgKGZsb2F0IF9feCk7 CgpleHRlcm4gZmxvYXQgYXNpbmhmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19hc2luaGYg KGZsb2F0IF9feCk7CgpleHRlcm4gZmxvYXQgYXRhbmhmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxv YXQgX19hdGFuaGYgKGZsb2F0IF9feCk7CgoKCgoKZXh0ZXJuIGZsb2F0IGV4cGYgKGZsb2F0IF9f eCk7IGV4dGVybiBmbG9hdCBfX2V4cGYgKGZsb2F0IF9feCk7CgoKCmV4dGVybiBmbG9hdCBleHAx MGYgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX2V4cDEwZiAoZmxvYXQgX194KTsKCmV4dGVy biBmbG9hdCBwb3cxMGYgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX3BvdzEwZiAoZmxvYXQg X194KTsKCgoKZXh0ZXJuIGZsb2F0IGZyZXhwZiAoZmxvYXQgX194LCBpbnQgKl9fZXhwb25lbnQp OyBleHRlcm4gZmxvYXQgX19mcmV4cGYgKGZsb2F0IF9feCwgaW50ICpfX2V4cG9uZW50KTsKCgpl eHRlcm4gZmxvYXQgbGRleHBmIChmbG9hdCBfX3gsIGludCBfX2V4cG9uZW50KTsgZXh0ZXJuIGZs b2F0IF9fbGRleHBmIChmbG9hdCBfX3gsIGludCBfX2V4cG9uZW50KTsKCgpleHRlcm4gZmxvYXQg bG9nZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fbG9nZiAoZmxvYXQgX194KTsKCgpleHRl cm4gZmxvYXQgbG9nMTBmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19sb2cxMGYgKGZsb2F0 IF9feCk7CgoKZXh0ZXJuIGZsb2F0IG1vZGZmIChmbG9hdCBfX3gsIGZsb2F0ICpfX2lwdHIpOyBl eHRlcm4gZmxvYXQgX19tb2RmZiAoZmxvYXQgX194LCBmbG9hdCAqX19pcHRyKTsKCgoKZXh0ZXJu IGZsb2F0IGV4cG0xZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fZXhwbTFmIChmbG9hdCBf X3gpOwoKCmV4dGVybiBmbG9hdCBsb2cxcGYgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX2xv ZzFwZiAoZmxvYXQgX194KTsKCgpleHRlcm4gZmxvYXQgbG9nYmYgKGZsb2F0IF9feCk7IGV4dGVy biBmbG9hdCBfX2xvZ2JmIChmbG9hdCBfX3gpOwoKCgoKZXh0ZXJuIGZsb2F0IGV4cDJmIChmbG9h dCBfX3gpOyBleHRlcm4gZmxvYXQgX19leHAyZiAoZmxvYXQgX194KTsKCgpleHRlcm4gZmxvYXQg bG9nMmYgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX2xvZzJmIChmbG9hdCBfX3gpOwoKCgoK CgpleHRlcm4gZmxvYXQgcG93ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpOyBleHRlcm4gZmxvYXQg X19wb3dmIChmbG9hdCBfX3gsIGZsb2F0IF9feSk7CgoKZXh0ZXJuIGZsb2F0IHNxcnRmIChmbG9h dCBfX3gpOyBleHRlcm4gZmxvYXQgX19zcXJ0ZiAoZmxvYXQgX194KTsKCgoKZXh0ZXJuIGZsb2F0 IGh5cG90ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpOyBleHRlcm4gZmxvYXQgX19oeXBvdGYgKGZs b2F0IF9feCwgZmxvYXQgX195KTsKCgoKCmV4dGVybiBmbG9hdCBjYnJ0ZiAoZmxvYXQgX194KTsg ZXh0ZXJuIGZsb2F0IF9fY2JydGYgKGZsb2F0IF9feCk7CgoKCgoKCmV4dGVybiBmbG9hdCBjZWls ZiAoZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fY2VpbGYgKGZsb2F0IF9feCk7CgoKZXh0ZXJu IGZsb2F0IGZhYnNmIChmbG9hdCBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0 ZXJuIGZsb2F0IF9fZmFic2YgKGZsb2F0IF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp OwoKCmV4dGVybiBmbG9hdCBmbG9vcmYgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX2Zsb29y ZiAoZmxvYXQgX194KTsKCgpleHRlcm4gZmxvYXQgZm1vZGYgKGZsb2F0IF9feCwgZmxvYXQgX195 KTsgZXh0ZXJuIGZsb2F0IF9fZm1vZGYgKGZsb2F0IF9feCwgZmxvYXQgX195KTsKCgoKCmV4dGVy biBpbnQgX19pc2luZmYgKGZsb2F0IF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsKCgpleHRlcm4gaW50IF9fZmluaXRlZiAoZmxvYXQgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBpc2luZmYgKGZsb2F0IF9fdmFsdWUpIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IGZpbml0ZWYgKGZsb2F0IF9fdmFs dWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoKCmV4dGVybiBmbG9hdCBpbmZu YW5mIChpbnQgX19lcnJvcikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxv YXQgX19pbmZuYW5mIChpbnQgX19lcnJvcikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK CmV4dGVybiBmbG9hdCBkcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpOyBleHRlcm4gZmxvYXQg X19kcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpOwoKCgpleHRlcm4gZmxvYXQgc2lnbmlmaWNh bmRmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19zaWduaWZpY2FuZGYgKGZsb2F0IF9feCk7 CgoKCgpleHRlcm4gZmxvYXQgY29weXNpZ25mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19jb3B5c2lnbmYgKGZsb2F0IF9f eCwgZmxvYXQgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gZmxv YXQgbmFuZiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsgZXh0ZXJuIGZsb2F0IF9fbmFuZiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIF9fYXR0cmlidXRl X18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgX19pc25hbmYgKGZsb2F0IF9fdmFsdWUp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGludCBpc25hbmYgKGZsb2F0 IF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZmxvYXQgajBm IChmbG9hdCk7IGV4dGVybiBmbG9hdCBfX2owZiAoZmxvYXQpOwpleHRlcm4gZmxvYXQgajFmIChm bG9hdCk7IGV4dGVybiBmbG9hdCBfX2oxZiAoZmxvYXQpOwpleHRlcm4gZmxvYXQgam5mIChpbnQs IGZsb2F0KTsgZXh0ZXJuIGZsb2F0IF9fam5mIChpbnQsIGZsb2F0KTsKZXh0ZXJuIGZsb2F0IHkw ZiAoZmxvYXQpOyBleHRlcm4gZmxvYXQgX195MGYgKGZsb2F0KTsKZXh0ZXJuIGZsb2F0IHkxZiAo ZmxvYXQpOyBleHRlcm4gZmxvYXQgX195MWYgKGZsb2F0KTsKZXh0ZXJuIGZsb2F0IHluZiAoaW50 LCBmbG9hdCk7IGV4dGVybiBmbG9hdCBfX3luZiAoaW50LCBmbG9hdCk7CgoKCgoKZXh0ZXJuIGZs b2F0IGVyZmYgKGZsb2F0KTsgZXh0ZXJuIGZsb2F0IF9fZXJmZiAoZmxvYXQpOwpleHRlcm4gZmxv YXQgZXJmY2YgKGZsb2F0KTsgZXh0ZXJuIGZsb2F0IF9fZXJmY2YgKGZsb2F0KTsKZXh0ZXJuIGZs b2F0IGxnYW1tYWYgKGZsb2F0KTsgZXh0ZXJuIGZsb2F0IF9fbGdhbW1hZiAoZmxvYXQpOwpleHRl cm4gZmxvYXQgdGdhbW1hZiAoZmxvYXQpOyBleHRlcm4gZmxvYXQgX190Z2FtbWFmIChmbG9hdCk7 CgoKCgpleHRlcm4gZmxvYXQgZ2FtbWFmIChmbG9hdCk7IGV4dGVybiBmbG9hdCBfX2dhbW1hZiAo ZmxvYXQpOwoKCgoKCgpleHRlcm4gZmxvYXQgbGdhbW1hZl9yIChmbG9hdCwgaW50ICpfX3NpZ25n YW1wKTsgZXh0ZXJuIGZsb2F0IF9fbGdhbW1hZl9yIChmbG9hdCwgaW50ICpfX3NpZ25nYW1wKTsK CgoKCgoKZXh0ZXJuIGZsb2F0IHJpbnRmIChmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19yaW50 ZiAoZmxvYXQgX194KTsKCgpleHRlcm4gZmxvYXQgbmV4dGFmdGVyZiAoZmxvYXQgX194LCBmbG9h dCBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmV4dGFm dGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK CmV4dGVybiBmbG9hdCBuZXh0dG93YXJkZiAoZmxvYXQgX194LCBsb25nIGRvdWJsZSBfX3kpIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmV4dHRvd2FyZGYgKGZs b2F0IF9feCwgbG9uZyBkb3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK CmV4dGVybiBmbG9hdCByZW1haW5kZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSk7IGV4dGVybiBm bG9hdCBfX3JlbWFpbmRlcmYgKGZsb2F0IF9feCwgZmxvYXQgX195KTsKCgoKZXh0ZXJuIGZsb2F0 IHNjYWxiZiAoZmxvYXQgX194LCBmbG9hdCBfX24pOyBleHRlcm4gZmxvYXQgX19zY2FsYmYgKGZs b2F0IF9feCwgZmxvYXQgX19uKTsKCgoKZXh0ZXJuIGZsb2F0IHNjYWxibmYgKGZsb2F0IF9feCwg aW50IF9fbik7IGV4dGVybiBmbG9hdCBfX3NjYWxibmYgKGZsb2F0IF9feCwgaW50IF9fbik7CgoK ZXh0ZXJuIGludCBpbG9nYmYgKGZsb2F0IF9feCk7IGV4dGVybiBpbnQgX19pbG9nYmYgKGZsb2F0 IF9feCk7CgoKCgpleHRlcm4gZmxvYXQgc2NhbGJsbmYgKGZsb2F0IF9feCwgbG9uZyBpbnQgX19u KTsgZXh0ZXJuIGZsb2F0IF9fc2NhbGJsbmYgKGZsb2F0IF9feCwgbG9uZyBpbnQgX19uKTsKCgoK ZXh0ZXJuIGZsb2F0IG5lYXJieWludGYgKGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX25lYXJi eWludGYgKGZsb2F0IF9feCk7CgoKCmV4dGVybiBmbG9hdCByb3VuZGYgKGZsb2F0IF9feCk7IGV4 dGVybiBmbG9hdCBfX3JvdW5kZiAoZmxvYXQgX194KTsKCgoKZXh0ZXJuIGZsb2F0IHRydW5jZiAo ZmxvYXQgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX3Ry dW5jZiAoZmxvYXQgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4g ZmxvYXQgcmVtcXVvZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGludCAqX19xdW8pOyBleHRlcm4g ZmxvYXQgX19yZW1xdW9mIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgaW50ICpfX3F1byk7CgoKCgoK CmV4dGVybiBsb25nIGludCBscmludGYgKGZsb2F0IF9feCk7IGV4dGVybiBsb25nIGludCBfX2xy aW50ZiAoZmxvYXQgX194KTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyaW50ZiAoZmxvYXQgX194 KTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJpbnRmIChmbG9hdCBfX3gpOwoKCgpleHRlcm4g bG9uZyBpbnQgbHJvdW5kZiAoZmxvYXQgX194KTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJvdW5kZiAo ZmxvYXQgX194KTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyb3VuZGYgKGZsb2F0IF9feCk7IGV4 dGVybiBsb25nIGxvbmcgaW50IF9fbGxyb3VuZGYgKGZsb2F0IF9feCk7CgoKCmV4dGVybiBmbG9h dCBmZGltZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpOyBleHRlcm4gZmxvYXQgX19mZGltZiAoZmxv YXQgX194LCBmbG9hdCBfX3kpOwoKCmV4dGVybiBmbG9hdCBmbWF4ZiAoZmxvYXQgX194LCBmbG9h dCBfX3kpOyBleHRlcm4gZmxvYXQgX19mbWF4ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpOwoKCmV4 dGVybiBmbG9hdCBmbWluZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpOyBleHRlcm4gZmxvYXQgX19m bWluZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpOwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeWYg KGZsb2F0IF9fdmFsdWUpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVy biBpbnQgX19zaWduYml0ZiAoZmxvYXQgX192YWx1ZSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7CgoKCmV4dGVybiBmbG9hdCBmbWFmIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgZmxv YXQgX196KTsgZXh0ZXJuIGZsb2F0IF9fZm1hZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGZsb2F0 IF9feik7CiMgODMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDk5ICIvdXNyL2luY2x1ZGUv bWF0aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMwojIDU0ICIv dXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gbG9uZyBkb3VibGUgYWNvc2wg KGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Fjb3NsIChsb25nIGRvdWJs ZSBfX3gpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGFzaW5sIChsb25nIGRvdWJsZSBfX3gpOyBleHRl cm4gbG9uZyBkb3VibGUgX19hc2lubCAobG9uZyBkb3VibGUgX194KTsKCmV4dGVybiBsb25nIGRv dWJsZSBhdGFubCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbmwg KGxvbmcgZG91YmxlIF9feCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXRhbjJsIChsb25nIGRvdWJs ZSBfX3ksIGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0YW4ybCAobG9u ZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBjb3Ns IChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19jb3NsIChsb25nIGRvdWJs ZSBfX3gpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHNpbmwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVy biBsb25nIGRvdWJsZSBfX3NpbmwgKGxvbmcgZG91YmxlIF9feCk7CgpleHRlcm4gbG9uZyBkb3Vi bGUgdGFubCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGFubCAobG9u ZyBkb3VibGUgX194KTsKCgoKZXh0ZXJuIHZvaWQgc2luY29zbCAobG9uZyBkb3VibGUgX194LCBs b25nIGRvdWJsZSAqX19zaW54LCBsb25nIGRvdWJsZSAqX19jb3N4KTsgZXh0ZXJuIHZvaWQgX19z aW5jb3NsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX3NpbngsIGxvbmcgZG91Ymxl ICpfX2Nvc3gpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgY29zaGwgKGxvbmcgZG91YmxlIF9f eCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Nvc2hsIChsb25nIGRvdWJsZSBfX3gpOwoKZXh0ZXJu IGxvbmcgZG91YmxlIHNpbmhsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUg X19zaW5obCAobG9uZyBkb3VibGUgX194KTsKCmV4dGVybiBsb25nIGRvdWJsZSB0YW5obCAobG9u ZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGFuaGwgKGxvbmcgZG91YmxlIF9f eCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBhY29zaGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVy biBsb25nIGRvdWJsZSBfX2Fjb3NobCAobG9uZyBkb3VibGUgX194KTsKCmV4dGVybiBsb25nIGRv dWJsZSBhc2luaGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2FzaW5o bCAobG9uZyBkb3VibGUgX194KTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFuaGwgKGxvbmcgZG91 YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0YW5obCAobG9uZyBkb3VibGUgX194KTsK CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwbCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxv bmcgZG91YmxlIF9fZXhwbCAobG9uZyBkb3VibGUgX194KTsKCgoKZXh0ZXJuIGxvbmcgZG91Ymxl IGV4cDEwbCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwMTBsIChs b25nIGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHBvdzEwbCAobG9uZyBkb3VibGUg X194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcG93MTBsIChsb25nIGRvdWJsZSBfX3gpOwoKCgpl eHRlcm4gbG9uZyBkb3VibGUgZnJleHBsIChsb25nIGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVu dCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZyZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgKl9f ZXhwb25lbnQpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsZGV4cGwgKGxvbmcgZG91YmxlIF9feCwg aW50IF9fZXhwb25lbnQpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZGV4cGwgKGxvbmcgZG91Ymxl IF9feCwgaW50IF9fZXhwb25lbnQpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2dsIChsb25nIGRv dWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2dsIChsb25nIGRvdWJsZSBfX3gpOwoK CmV4dGVybiBsb25nIGRvdWJsZSBsb2cxMGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25n IGRvdWJsZSBfX2xvZzEwbCAobG9uZyBkb3VibGUgX194KTsKCgpleHRlcm4gbG9uZyBkb3VibGUg bW9kZmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9faXB0cik7IGV4dGVybiBsb25n IGRvdWJsZSBfX21vZGZsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX2lwdHIpOwoK CgpleHRlcm4gbG9uZyBkb3VibGUgZXhwbTFsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9u ZyBkb3VibGUgX19leHBtMWwgKGxvbmcgZG91YmxlIF9feCk7CgoKZXh0ZXJuIGxvbmcgZG91Ymxl IGxvZzFwbCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMXBsIChs b25nIGRvdWJsZSBfX3gpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2dibCAobG9uZyBkb3VibGUg X194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nYmwgKGxvbmcgZG91YmxlIF9feCk7CgoKCgpl eHRlcm4gbG9uZyBkb3VibGUgZXhwMmwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRv dWJsZSBfX2V4cDJsIChsb25nIGRvdWJsZSBfX3gpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2cy bCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMmwgKGxvbmcgZG91 YmxlIF9feCk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBwb3dsIChsb25nIGRvdWJsZSBfX3gs IGxvbmcgZG91YmxlIF9feSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Bvd2wgKGxvbmcgZG91Ymxl IF9feCwgbG9uZyBkb3VibGUgX195KTsKCgpleHRlcm4gbG9uZyBkb3VibGUgc3FydGwgKGxvbmcg ZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NxcnRsIChsb25nIGRvdWJsZSBfX3gp OwoKCgpleHRlcm4gbG9uZyBkb3VibGUgaHlwb3RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91 YmxlIF9feSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2h5cG90bCAobG9uZyBkb3VibGUgX194LCBs b25nIGRvdWJsZSBfX3kpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNicnRsIChsb25nIGRvdWJs ZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19jYnJ0bCAobG9uZyBkb3VibGUgX194KTsKCgoK CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNlaWxsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9u ZyBkb3VibGUgX19jZWlsbCAobG9uZyBkb3VibGUgX194KTsKCgpleHRlcm4gbG9uZyBkb3VibGUg ZmFic2wgKGxvbmcgZG91YmxlIF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRl cm4gbG9uZyBkb3VibGUgX19mYWJzbCAobG9uZyBkb3VibGUgX194KSBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZsb29ybCAobG9uZyBkb3VibGUgX194 KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpOwoKCmV4dGVy biBsb25nIGRvdWJsZSBmbW9kbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpOyBl eHRlcm4gbG9uZyBkb3VibGUgX19mbW9kbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBf X3kpOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mbCAobG9uZyBkb3VibGUgX192YWx1ZSkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5pdGVsIChsb25nIGRvdWJs ZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGlz aW5mbCAobG9uZyBkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK CmV4dGVybiBpbnQgZmluaXRlbCAobG9uZyBkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOwoKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGluZm5hbmwgKGludCBfX2Vy cm9yKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2lu Zm5hbmwgKGludCBfX2Vycm9yKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJu IGxvbmcgZG91YmxlIGRyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7IGV4 dGVybiBsb25nIGRvdWJsZSBfX2RyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9f eSk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBzaWduaWZpY2FuZGwgKGxvbmcgZG91YmxlIF9feCk7 IGV4dGVybiBsb25nIGRvdWJsZSBfX3NpZ25pZmljYW5kbCAobG9uZyBkb3VibGUgX194KTsKCgoK CmV4dGVybiBsb25nIGRvdWJsZSBjb3B5c2lnbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3Vi bGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBf X2NvcHlzaWdubCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIF9fYXR0cmlidXRl X18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBuYW5sIChfX2NvbnN0IGNo YXIgKl9fdGFnYikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3Vi bGUgX19uYW5sIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOwoKCgoKZXh0ZXJuIGludCBfX2lzbmFubCAobG9uZyBkb3VibGUgX192YWx1ZSkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gaW50IGlzbmFubCAobG9uZyBkb3VibGUg X192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJs ZSBqMGwgKGxvbmcgZG91YmxlKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fajBsIChsb25nIGRvdWJs ZSk7CmV4dGVybiBsb25nIGRvdWJsZSBqMWwgKGxvbmcgZG91YmxlKTsgZXh0ZXJuIGxvbmcgZG91 YmxlIF9fajFsIChsb25nIGRvdWJsZSk7CmV4dGVybiBsb25nIGRvdWJsZSBqbmwgKGludCwgbG9u ZyBkb3VibGUpOyBleHRlcm4gbG9uZyBkb3VibGUgX19qbmwgKGludCwgbG9uZyBkb3VibGUpOwpl eHRlcm4gbG9uZyBkb3VibGUgeTBsIChsb25nIGRvdWJsZSk7IGV4dGVybiBsb25nIGRvdWJsZSBf X3kwbCAobG9uZyBkb3VibGUpOwpleHRlcm4gbG9uZyBkb3VibGUgeTFsIChsb25nIGRvdWJsZSk7 IGV4dGVybiBsb25nIGRvdWJsZSBfX3kxbCAobG9uZyBkb3VibGUpOwpleHRlcm4gbG9uZyBkb3Vi bGUgeW5sIChpbnQsIGxvbmcgZG91YmxlKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9feW5sIChpbnQs IGxvbmcgZG91YmxlKTsKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXJmbCAobG9uZyBkb3VibGUp OyBleHRlcm4gbG9uZyBkb3VibGUgX19lcmZsIChsb25nIGRvdWJsZSk7CmV4dGVybiBsb25nIGRv dWJsZSBlcmZjbCAobG9uZyBkb3VibGUpOyBleHRlcm4gbG9uZyBkb3VibGUgX19lcmZjbCAobG9u ZyBkb3VibGUpOwpleHRlcm4gbG9uZyBkb3VibGUgbGdhbW1hbCAobG9uZyBkb3VibGUpOyBleHRl cm4gbG9uZyBkb3VibGUgX19sZ2FtbWFsIChsb25nIGRvdWJsZSk7CmV4dGVybiBsb25nIGRvdWJs ZSB0Z2FtbWFsIChsb25nIGRvdWJsZSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3RnYW1tYWwgKGxv bmcgZG91YmxlKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBnYW1tYWwgKGxvbmcgZG91YmxlKTsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9fZ2FtbWFsIChsb25nIGRvdWJsZSk7CgoKCgoKCmV4dGVybiBs b25nIGRvdWJsZSBsZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApOyBleHRl cm4gbG9uZyBkb3VibGUgX19sZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXAp OwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmludGwgKGxvbmcgZG91YmxlIF9feCk7IGV4dGVy biBsb25nIGRvdWJsZSBfX3JpbnRsIChsb25nIGRvdWJsZSBfX3gpOwoKCmV4dGVybiBsb25nIGRv dWJsZSBuZXh0YWZ0ZXJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uZXh0YWZ0ZXJsIChs b25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIG5leHR0b3dhcmRsIChsb25nIGRvdWJsZSBfX3gsIGxv bmcgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBk b3VibGUgX19uZXh0dG93YXJkbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJlbWFpbmRl cmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KTsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9fcmVtYWluZGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpOwoKCgpleHRl cm4gbG9uZyBkb3VibGUgc2NhbGJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9fbik7 IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJs ZSBfX24pOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgc2NhbGJubCAobG9uZyBkb3VibGUgX194LCBp bnQgX19uKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2NhbGJubCAobG9uZyBkb3VibGUgX194LCBp bnQgX19uKTsKCgpleHRlcm4gaW50IGlsb2dibCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGlu dCBfX2lsb2dibCAobG9uZyBkb3VibGUgX194KTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBzY2Fs YmxubCAobG9uZyBkb3VibGUgX194LCBsb25nIGludCBfX24pOyBleHRlcm4gbG9uZyBkb3VibGUg X19zY2FsYmxubCAobG9uZyBkb3VibGUgX194LCBsb25nIGludCBfX24pOwoKCgpleHRlcm4gbG9u ZyBkb3VibGUgbmVhcmJ5aW50bCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9fbmVhcmJ5aW50bCAobG9uZyBkb3VibGUgX194KTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJv dW5kbCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcm91bmRsIChsb25n IGRvdWJsZSBfX3gpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgdHJ1bmNsIChsb25nIGRvdWJsZSBf X3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdHJ1 bmNsIChsb25nIGRvdWJsZSBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4 dGVybiBsb25nIGRvdWJsZSByZW1xdW9sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9f eSwgaW50ICpfX3F1byk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JlbXF1b2wgKGxvbmcgZG91Ymxl IF9feCwgbG9uZyBkb3VibGUgX195LCBpbnQgKl9fcXVvKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50 IGxyaW50bCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJpbnRsIChsb25n IGRvdWJsZSBfX3gpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJpbnRsIChsb25nIGRvdWJsZSBf X3gpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscmludGwgKGxvbmcgZG91YmxlIF9feCk7CgoK CmV4dGVybiBsb25nIGludCBscm91bmRsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBp bnQgX19scm91bmRsIChsb25nIGRvdWJsZSBfX3gpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJv dW5kbCAobG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJvdW5kbCAo bG9uZyBkb3VibGUgX194KTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZkaW1sIChsb25nIGRvdWJs ZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZkaW1sIChsb25n IGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZtYXhs IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7IGV4dGVybiBsb25nIGRvdWJsZSBf X2ZtYXhsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7CgoKZXh0ZXJuIGxvbmcg ZG91YmxlIGZtaW5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7IGV4dGVybiBs b25nIGRvdWJsZSBfX2ZtaW5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7CgoK CmV4dGVybiBpbnQgX19mcGNsYXNzaWZ5bCAobG9uZyBkb3VibGUgX192YWx1ZSkKICAgICBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX3NpZ25iaXRsIChsb25nIGRv dWJsZSBfX3ZhbHVlKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJu IGxvbmcgZG91YmxlIGZtYWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBsb25n IGRvdWJsZSBfX3opOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbWFsIChsb25nIGRvdWJsZSBfX3gs IGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX196KTsKIyAxMDAgIi91c3IvaW5jbHVkZS9t YXRoLmgiIDIgMwojIDExMyAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwpleHRlcm4gaW50IHNpZ25n YW07CiMgMTU0ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCmVudW0KICB7CiAgICBGUF9OQU4sCgog ICAgRlBfSU5GSU5JVEUsCgogICAgRlBfWkVSTywKCiAgICBGUF9TVUJOT1JNQUwsCgogICAgRlBf Tk9STUFMCgogIH07CiMgMjM2ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCnR5cGVkZWYgZW51bQp7 CiAgX0lFRUVfID0gLTEsCiAgX1NWSURfLAogIF9YT1BFTl8sCiAgX1BPU0lYXywKICBfSVNPQ18K fSBfTElCX1ZFUlNJT05fVFlQRTsKCgoKCmV4dGVybiBfTElCX1ZFUlNJT05fVFlQRSBfTElCX1ZF UlNJT047CiMgMjU5ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCnN0cnVjdCBfX2V4Y2VwdGlvbgoK CgogIHsKICAgIGludCB0eXBlOwogICAgY2hhciAqbmFtZTsKICAgIGRvdWJsZSBhcmcxOwogICAg ZG91YmxlIGFyZzI7CiAgICBkb3VibGUgcmV0dmFsOwogIH07CgoKZXh0ZXJuIGludCBtYXRoZXJy IChzdHJ1Y3QgX19leGNlcHRpb24gKl9fZXhjKSB0aHJvdyAoKTsKIyAyODkgIi91c3IvaW5jbHVk ZS9tYXRoLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51 eC1nbnUvMy4wL2luY2x1ZGUvZmxvYXQuaCIgMSAzCiMgMjkwICIvdXNyL2luY2x1ZGUvbWF0aC5o IiAyIDMKIyA0MDkgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKfQojIDQ0ICIvdXNyL2xvY2FsL2dj YzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3Rk X2NtYXRoLmgiIDIgMwojIDcwICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1s aW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NtYXRoLmgiIDMKbmFtZXNwYWNlIHN0 ZAp7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IF9UcCBfX2NtYXRoX3Bvd2VyKF9UcCwgdW5z aWduZWQgaW50KTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIGlubGluZSBfVHAKICAgIF9f Y21hdGhfYWJzKF9UcCBfX3gpCiAgICB7CiAgICAgIHJldHVybiBfX3ggPCBfVHAoKSA/IC1fX3gg OiBfX3g7CiAgICB9CgoKICBpbmxpbmUgZmxvYXQKICBhYnMoZmxvYXQgX194KSB7IHJldHVybiBf X2J1aWx0aW5fZmFic2YoX194KTsgfQojIDk1ICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIv aTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NtYXRoLmgiIDMKICBp bmxpbmUgZmxvYXQKICBhY29zKGZsb2F0IF9feCkgeyByZXR1cm4gOjphY29zZihfX3gpOyB9CgoK CgoKCiAgaW5saW5lIGZsb2F0CiAgYXNpbihmbG9hdCBfX3gpIHsgcmV0dXJuIDo6YXNpbmYoX194 KTsgfQoKCgoKCgogIGlubGluZSBmbG9hdAogIGF0YW4oZmxvYXQgX194KSB7IHJldHVybiA6OmF0 YW5mKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgZmxvYXQKICBhdGFuMihmbG9hdCBfX3ksIGZsb2F0 IF9feCkgeyByZXR1cm4gOjphdGFuMmYoX195LCBfX3gpOyB9CgoKCgoKCgogIGlubGluZSBmbG9h dAogIGNlaWwoZmxvYXQgX194KSB7IHJldHVybiA6OmNlaWxmKF9feCk7IH0KIyAxMzkgIi91c3Iv bG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysv Yml0cy9zdGRfY21hdGguaCIgMwogIGlubGluZSBmbG9hdAogIGNvcyhmbG9hdCBfX3gpIHsgcmV0 dXJuIDo6Y29zZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGZsb2F0CiAgY29zaChmbG9hdCBfX3gp IHsgcmV0dXJuIDo6Y29zaGYoX194KTsgfQoKCgoKCgogIGlubGluZSBmbG9hdAogIGV4cChmbG9h dCBfX3gpIHsgcmV0dXJuIDo6ZXhwZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGZsb2F0CiAgZmFi cyhmbG9hdCBfX3gpIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZihfX3gpOyB9CiMgMTc0ICIvdXNy L2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysr L2JpdHMvc3RkX2NtYXRoLmgiIDMKICBpbmxpbmUgZmxvYXQKICBmbG9vcihmbG9hdCBfX3gpIHsg cmV0dXJuIDo6Zmxvb3JmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgZmxvYXQKICBmbW9kKGZsb2F0 IF9feCwgZmxvYXQgX195KSB7IHJldHVybiA6OmZtb2RmKF9feCwgX195KTsgfQoKCgoKCgoKICBp bmxpbmUgZmxvYXQKICBmcmV4cChmbG9hdCBfX3gsIGludCogX19leHApIHsgcmV0dXJuIDo6ZnJl eHBmKF9feCwgX19leHApOyB9CgoKCgoKCiAgaW5saW5lIGZsb2F0CiAgbGRleHAoZmxvYXQgX194 LCBpbnQgX19leHApIHsgcmV0dXJuIDo6bGRleHBmKF9feCwgX19leHApOyB9CgoKCgoKCgogIGlu bGluZSBmbG9hdAogIGxvZyhmbG9hdCBfX3gpIHsgcmV0dXJuIDo6bG9nZihfX3gpOyB9CgoKCgoK CiAgaW5saW5lIGZsb2F0CiAgbG9nMTAoZmxvYXQgX194KSB7IHJldHVybiA6OmxvZzEwZihfX3gp OyB9CgoKCgoKCiAgaW5saW5lIGZsb2F0CiAgbW9kZihmbG9hdCBfX3gsIGZsb2F0KiBfX2lwdHIp IHsgcmV0dXJuIDo6bW9kZmYoX194LCBfX2lwdHIpOyB9CiMgMjM3ICIvdXNyL2xvY2FsL2djYzMv bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2Nt YXRoLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX1RwCiAgICBfX3Bv d19oZWxwZXIoX1RwIF9feCwgaW50IF9fbikKICAgIHsKICAgICAgcmV0dXJuIF9fbiA8IDAKICAg ICAgICA/IF9UcCgxKS9fX2NtYXRoX3Bvd2VyKF9feCwgLV9fbikKICAgICAgICA6IF9fY21hdGhf cG93ZXIoX194LCBfX24pOwogICAgfQoKCiAgaW5saW5lIGZsb2F0CiAgcG93KGZsb2F0IF9feCwg ZmxvYXQgX195KSB7IHJldHVybiA6OnBvd2YoX194LCBfX3kpOyB9CgoKCgoKCiAgaW5saW5lIGZs b2F0CiAgcG93KGZsb2F0IF9feCwgaW50IF9fbikKICB7CiAgICByZXR1cm4gX19wb3dfaGVscGVy KF9feCwgX19uKTsKICB9CgoKCgoKICBpbmxpbmUgZmxvYXQKICBzaW4oZmxvYXQgX194KSB7IHJl dHVybiA6OnNpbmYoX194KTsgfQoKCgoKCgogIGlubGluZSBmbG9hdAogIHNpbmgoZmxvYXQgX194 KSB7IHJldHVybiA6OnNpbmhmKF9feCk7IH0KIyAyODQgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2Nj LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY21hdGguaCIg MwogIGlubGluZSBmbG9hdAogIHNxcnQoZmxvYXQgX194KSB7IHJldHVybiA6OnNxcnRmKF9feCk7 IH0KCgoKCgoKICBpbmxpbmUgZmxvYXQKICB0YW4oZmxvYXQgX194KSB7IHJldHVybiA6OnRhbmYo X194KTsgfQoKCgoKCgogIGlubGluZSBmbG9hdAogIHRhbmgoZmxvYXQgX194KSB7IHJldHVybiA6 OnRhbmhmKF9feCk7IH0KCgoKCgoKICBleHRlcm4gIkMiIGRvdWJsZSBhY29zKGRvdWJsZSBfX3gp OwoKICBleHRlcm4gIkMiIGRvdWJsZSBhc2luKGRvdWJsZSBfX3gpOwoKICBleHRlcm4gIkMiIGRv dWJsZSBhdGFuKGRvdWJsZSBfX3gpOwoKICBleHRlcm4gIkMiIGRvdWJsZSBhdGFuMihkb3VibGUg X195LCBkb3VibGUgX194KTsKCiAgZXh0ZXJuICJDIiBkb3VibGUgY2VpbChkb3VibGUgX194KTsK CgoKCgogIGV4dGVybiAiQyIgZG91YmxlIGNvcyhkb3VibGUgX194KTsKCgogIGV4dGVybiAiQyIg ZG91YmxlIGNvc2goZG91YmxlIF9feCk7CgogIGV4dGVybiAiQyIgZG91YmxlIGV4cChkb3VibGUg X194KTsKCgogIGlubGluZSBkb3VibGUKICBmYWJzKGRvdWJsZSBfX3gpIHsgcmV0dXJuIF9fYnVp bHRpbl9mYWJzKF9feCk7IH0KCgoKCgogIGlubGluZSBkb3VibGUKICBhYnMoZG91YmxlIF9feCkg eyByZXR1cm4gX19idWlsdGluX2ZhYnMoX194KTsgfQoKCgoKCiAgZXh0ZXJuICJDIiBkb3VibGUg Zmxvb3IoZG91YmxlIF9feCk7CgogIGV4dGVybiAiQyIgZG91YmxlIGZtb2QoZG91YmxlIF9feCwg ZG91YmxlIF9feSk7CgogIGV4dGVybiAiQyIgZG91YmxlIGZyZXhwKGRvdWJsZSBfX3gsIGludCog X19leHApOwoKICBleHRlcm4gIkMiIGRvdWJsZSBsZGV4cChkb3VibGUgX194LCBpbnQgX19leHAp OwoKICBleHRlcm4gIkMiIGRvdWJsZSBsb2coZG91YmxlIF9feCk7CgogIGV4dGVybiAiQyIgZG91 YmxlIGxvZzEwKGRvdWJsZSBfX3gpOwoKICBleHRlcm4gIkMiIGRvdWJsZSBtb2RmKGRvdWJsZSBf X3gsIGRvdWJsZSogX19pcHRyKTsKCiAgZXh0ZXJuICJDIiBkb3VibGUgcG93KGRvdWJsZSBfX3gs IGRvdWJsZSBfX3kpOwoKICBpbmxpbmUgZG91YmxlCiAgcG93KGRvdWJsZSBfX3gsIGludCBfX2kp CiAgewogICAgcmV0dXJuIF9fcG93X2hlbHBlcihfX3gsIF9faSk7CiAgfQoKCgoKCiAgZXh0ZXJu ICJDIiBkb3VibGUgc2luKGRvdWJsZSBfX3gpOwoKCiAgZXh0ZXJuICJDIiBkb3VibGUgc2luaChk b3VibGUgX194KTsKCgoKCgogIGV4dGVybiAiQyIgZG91YmxlIHNxcnQoZG91YmxlIF9feCk7CgoK ICBleHRlcm4gIkMiIGRvdWJsZSB0YW4oZG91YmxlIF9feCk7CgogIGV4dGVybiAiQyIgZG91Ymxl IHRhbmgoZG91YmxlIF9feCk7CgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYWJzKGxvbmcgZG91 YmxlIF9feCkgeyByZXR1cm4gX19idWlsdGluX2ZhYnNsKF9feCk7IH0KIyAzOTkgIi91c3IvbG9j YWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvYml0 cy9zdGRfY21hdGguaCIgMwogIGlubGluZSBsb25nIGRvdWJsZQogIGFjb3MobG9uZyBkb3VibGUg X194KSB7IHJldHVybiA6OmFjb3NsKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUK ICBhc2luKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjphc2lubChfX3gpOyB9CgoKCgoKCiAg aW5saW5lIGxvbmcgZG91YmxlCiAgYXRhbihsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6YXRh bmwoX194KTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGF0YW4yKGxvbmcgZG91Ymxl IF9feSwgbG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmF0YW4ybChfX3ksIF9feCk7IH0KCgoK CgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgY2VpbChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJu IDo6Y2VpbGwoX194KTsgfQojIDQ0MyAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYt cGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jbWF0aC5oIiAzCiAgaW5saW5l IGxvbmcgZG91YmxlCiAgY29zKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpjb3NsKF9feCk7 IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBjb3NoKGxvbmcgZG91YmxlIF9feCkgeyBy ZXR1cm4gOjpjb3NobChfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgZXhwKGxv bmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpleHBsKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9u ZyBkb3VibGUKICBmYWJzKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gX19idWlsdGluX2ZhYnNs KF9feCk7IH0KIyA0NzggIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4 LWdudS8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY21hdGguaCIgMwogIGlubGluZSBsb25nIGRv dWJsZQogIGZsb29yKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpmbG9vcmwoX194KTsgfQoK CgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGZtb2QobG9uZyBkb3VibGUgX194LCBsb25nIGRv dWJsZSBfX3kpIHsgcmV0dXJuIDo6Zm1vZGwoX194LCBfX3kpOyB9CgoKCgoKCgogIGlubGluZSBs b25nIGRvdWJsZQogIGZyZXhwKGxvbmcgZG91YmxlIF9feCwgaW50KiBfX2V4cCkgeyByZXR1cm4g OjpmcmV4cGwoX194LCBfX2V4cCk7IH0KCgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgbGRl eHAobG9uZyBkb3VibGUgX194LCBpbnQgX19leHApIHsgcmV0dXJuIDo6bGRleHBsKF9feCwgX19l eHApOyB9CgoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGxvZyhsb25nIGRvdWJsZSBfX3gp IHsgcmV0dXJuIDo6bG9nbChfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgbG9n MTAobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmxvZzEwbChfX3gpOyB9CgoKCgoKCiAgaW5s aW5lIGxvbmcgZG91YmxlCiAgbW9kZihsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlKiBfX2lw dHIpIHsgcmV0dXJuIDo6bW9kZmwoX194LCBfX2lwdHIpOyB9CiMgNTQzICIvdXNyL2xvY2FsL2dj YzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3Rk X2NtYXRoLmgiIDMKICBpbmxpbmUgbG9uZyBkb3VibGUKICBwb3cobG9uZyBkb3VibGUgX194LCBs b25nIGRvdWJsZSBfX3kpIHsgcmV0dXJuIDo6cG93bChfX3gsIF9feSk7IH0KCgoKCgoKICBpbmxp bmUgbG9uZyBkb3VibGUKICBwb3cobG9uZyBkb3VibGUgX194LCBpbnQgX19uKQogIHsKICAgIHJl dHVybiBfX3Bvd19oZWxwZXIoX194LCBfX24pOwogIH0KCgoKCgogIGlubGluZSBsb25nIGRvdWJs ZQogIHNpbihsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6c2lubChfX3gpOyB9CgoKCgoKCiAg aW5saW5lIGxvbmcgZG91YmxlCiAgc2luaChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6c2lu aGwoX194KTsgfQojIDU4MCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu dXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jbWF0aC5oIiAzCiAgaW5saW5lIGxvbmcg ZG91YmxlCiAgc3FydChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6c3FydGwoX194KTsgfQoK CgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIHRhbihsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJu IDo6dGFubChfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgdGFuaChsb25nIGRv dWJsZSBfX3gpIHsgcmV0dXJuIDo6dGFuaGwoX194KTsgfQoKCgoKfQojIDc1MyAiL3Vzci9sb2Nh bC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRz L3N0ZF9jbWF0aC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMt bGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL2NtYXRoLnRjYyIgMSAzCiMgMzUgIi91c3Iv bG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysv Yml0cy9jbWF0aC50Y2MiIDMKbmFtZXNwYWNlIHN0ZCB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVu YW1lIF9UcD4KICAgIF9UcAogICAgX19jbWF0aF9wb3dlcihfVHAgX194LCB1bnNpZ25lZCBpbnQg X19uKQogICAgewogICAgICBfVHAgX195ID0gX19uICUgMiA/IF9feCA6IDE7CgogICAgICB3aGls ZSAoX19uID4+PSAxKQogICAgICAgIHsKICAgICAgICAgIF9feCA9IF9feCAqIF9feDsKICAgICAg ICAgIGlmIChfX24gJSAyKQogICAgICAgICAgICBfX3kgPSBfX3kgKiBfX3g7CiAgICAgICAgfQoK ICAgICAgcmV0dXJuIF9feTsKICAgIH0KfQojIDc1NCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2Mt bGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jbWF0aC5oIiAy IDMKIyAzICIvdXNyL2xvY2FsL2djYzMvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w L2luY2x1ZGUvZysrL2NtYXRoIiAyIDMKIyA2MiAiUGxhdGZvcm1TdXBwb3J0L0RvdWJsZVN1cHBv cnQuY3BwIiAyCgoKCiMgMSAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiIDEK IyA2MyAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCiMgMSAiUGxhdGZvcm1T dXBwb3J0L1BsYXRmb3JtU3VwcG9ydERlZmluaXRpb25zLmhwcCIgMQojIDY0ICJQbGF0Zm9ybVN1 cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIgMgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjMy9saWIv Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9nKysvY2Fzc2VydCIgMSAzCgoj IDEgIi91c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5j bHVkZS9nKysvYml0cy9zdGRfY2Fzc2VydC5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9nY2MzL2xp Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jYXNz ZXJ0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDEgMwojIDM1ICIvdXNyL2luY2x1 ZGUvYXNzZXJ0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMzYgIi91 c3IvaW5jbHVkZS9hc3NlcnQuaCIgMiAzCiMgNTggIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwpl eHRlcm4gIkMiIHsKCgpleHRlcm4gdm9pZCBfX2Fzc2VydF9mYWlsIChfX2NvbnN0IGNoYXIgKl9f YXNzZXJ0aW9uLCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwgdW5zaWduZWQgaW50IF9fbGluZSwgX19j b25zdCBjaGFyICpfX2Z1bmN0aW9uKSB0aHJvdyAoKQoKCgogICAgIF9fYXR0cmlidXRlX18gKChf X25vcmV0dXJuX18pKTsKCgpleHRlcm4gdm9pZCBfX2Fzc2VydF9wZXJyb3JfZmFpbCAoaW50IF9f ZXJybnVtLCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwgdW5zaWduZWQgaW50IF9fbGluZSwgX19jb25z dCBjaGFyICpfX2Z1bmN0aW9uKSB0aHJvdyAoKQoKCgogICAgIF9fYXR0cmlidXRlX18gKChfX25v cmV0dXJuX18pKTsKCn0KIyAzOCAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMt bGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jYXNzZXJ0LmgiIDIgMwojIDMgIi91 c3IvbG9jYWwvZ2NjMy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9n KysvY2Fzc2VydCIgMiAzCiMgNjggIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBw IiAyCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu MC9pbmNsdWRlL2crKy9mdW5jdGlvbmFsIiAxIDMKIyA2OSAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0 cmluZ0hlbHBlci5ocHAiIDIKCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGli L2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2crKy9pb3Nmd2QiIDEgMwojIDc3ICJQbGF0 Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIgMgoKIyAxICIvdXNyL2xvY2FsL2djYzMv bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZysrL3ZlY3RvciIgMSAz CiMgNzkgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIiAyCiMgODcgIlBsYXRm b3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgojIDEgIi91c3IvaW5jbHVkZS93Y3R5cGUu aCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9m ZWF0dXJlcy5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAyIDMKIyAxICIvdXNy L2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAy IDMKCgoKCiMgMSAiL3Vzci9sb2NhbC9nY2MzL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251 LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAy IDMKIyA2MSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBp bnQgd2N0eXBlX3Q7CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyA2OSAi L3Vzci9pbmNsdWRlL3djdHlwZS5oIiAyIDMKCgoKCgoKCmVudW0KewogIF9JU3d1cHBlciA9ICgo MCkgPCA4ID8gKGludCkgKDFVTCA8PCAoMCkgPDwgMjQpIDogKGludCkgKDFVTCA8PCAoKDApICsg OCkpKSwKICBfSVN3bG93ZXIgPSAoKDEpIDwgOCA/IChpbnQpICgxVUwgPDwgKDEpIDw8IDI0KSA6 IChpbnQpICgxVUwgPDwgKCgxKSArIDgpKSksCiAgX0lTd2FscGhhID0gKCgyKSA8IDggPyAoaW50 KSAoMVVMIDw8ICgyKSA8PCAyNCkgOiAoaW50KSAoMVVMIDw8ICgoMikgKyA4KSkpLAogIF9JU3dk aWdpdCA9ICgoMykgPCA4ID8gKGludCkgKDFVTCA8PCAoMykgPDwgMjQpIDogKGludCkgKDFVTCA8 PCAoKDMpICsgOCkpKSwKICBfSVN3eGRpZ2l0ID0gKCg0KSA8IDggPyAoaW50KSAoMVVMIDw8ICg0 KSA8PCAyNCkgOiAoaW50KSAoMVVMIDw8ICgoNCkgKyA4KSkpLAogIF9JU3dzcGFjZSA9ICgoNSkg PCA4ID8gKGludCkgKDFVTCA8PCAoNSkgPDwgMjQpIDogKGludCkgKDFVTCA8PCAoKDUpICsgOCkp KSwKICBfSVN3cHJpbnQgPSAoKDYpIDwgOCA/IChpbnQpICgxVUwgPDwgKDYpIDw8IDI0KSA6IChp bnQpICgxVUwgPDwgKCg2KSArIDgpKSksCiAgX0lTd2dyYXBoID0gKCg3KSA8IDggPyAoaW50KSAo MVVMIDw8ICg3KSA8PCAyNCkgOiAoaW50KSAoMVVMIDw8ICgoNykgKyA4KSkpLAogIF9JU3dibGFu ayA9ICgoOCkgPCA4ID8gKGludCkgKDFVTCA8PCAoOCkgPDwgMjQpIDogKGludCkgKDFVTCA8PCAo KDgpICsgOCkpKSwKICBfSVN3Y250cmwgPSAoKDkpIDwgOCA/IChpbnQpICgxVUwgPDwgKDkpIDw8 IDI0KSA6IChpbnQpICgxVUwgPDwgKCg5KSArIDgpKSksCiAgX0lTd3B1bmN0ID0gKCgxMCkgPCA4 ID8gKGludCkgKDFVTCA8PCAoMTApIDw8IDI0KSA6IChpbnQpICgxVUwgPDwgKCgxMCkgKyA4KSkp LAogIF9JU3dhbG51bSA9ICgoMTEpIDwgOCA/IChpbnQpICgxVUwgPDwgKDExKSA8PCAyNCkgOiAo aW50KSAoMVVMIDw8ICgoMTEpICsgOCkpKQp9OwoKCgpleHRlcm4gIkMiIHsKCgoKCgoKCmV4dGVy biBpbnQgaXN3YWxudW0gKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGlz d2FscGhhICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBpc3djbnRybCAod2lu dF90IF9fd2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlzd2RpZ2l0ICh3aW50X3QgX193Yykg dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaXN3Z3JhcGggKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsK CgoKCmV4dGVybiBpbnQgaXN3bG93ZXIgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgpleHRlcm4g aW50IGlzd3ByaW50ICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd3B1 bmN0ICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd3NwYWNlICh3aW50 X3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd3VwcGVyICh3aW50X3QgX193Yykg dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd3hkaWdpdCAod2ludF90IF9fd2MpIHRocm93ICgp OwoKCgoKCmV4dGVybiBpbnQgaXN3YmxhbmsgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKIyAxNjIg Ii91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwpleHRlcm4gd2N0eXBlX3QgX193Y3R5cGUgKF9fY29u c3QgY2hhciAqX19wcm9wZXJ0eSkgdGhyb3cgKCk7CmV4dGVybiB3Y3R5cGVfdCB3Y3R5cGUgKF9f Y29uc3QgY2hhciAqX19wcm9wZXJ0eSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19pc3djdHlw ZSAod2ludF90IF9fd2MsIHdjdHlwZV90IF9fZGVzYykgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXN3 Y3R5cGUgKHdpbnRfdCBfX3djLCB3Y3R5cGVfdCBfX2Rlc2MpIHRocm93ICgpOwojIDIyNyAiL3Vz ci9pbmNsdWRlL3djdHlwZS5oIiAzCnR5cGVkZWYgX19jb25zdCBfX2ludDMyX3QgKndjdHJhbnNf dDsKCgpleHRlcm4gd2ludF90IHRvd2xvd2VyICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKZXh0 ZXJuIHdpbnRfdCB0b3d1cHBlciAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCmV4dGVybiB3aW50 X3QgX190b3djdHJhbnMgKHdpbnRfdCBfX3djLCB3Y3RyYW5zX3QgX19kZXNjKSB0aHJvdyAoKTsK Cn0KIyAyNTEgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwpleHRlcm4gIkMiIHsKCgoKZXh0ZXJu IHdjdHJhbnNfdCB3Y3RyYW5zIChfX2NvbnN0IGNoYXIgKl9fcHJvcGVydHkpIHRocm93ICgpOwoK CmV4dGVybiB3aW50X3QgdG93Y3RyYW5zICh3aW50X3QgX193Yywgd2N0cmFuc190IF9fZGVzYykg dGhyb3cgKCk7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMSAzCiMgMjYzICIvdXNy L2luY2x1ZGUvd2N0eXBlLmgiIDIgMwoKCgpleHRlcm4gaW50IF9faXN3YWxudW1fbCAod2ludF90 IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgX19p c3dhbHBoYV9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoK ZXh0ZXJuIGludCBfX2lzd2NudHJsX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxl KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2lzd2RpZ2l0X2wgKHdpbnRfdCBfX3djLCBfX2xv Y2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2lzd2dyYXBoX2wgKHdp bnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQg X19pc3dsb3dlcl9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7 CgoKZXh0ZXJuIGludCBfX2lzd3ByaW50X2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9j YWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc3dwdW5jdF9sICh3aW50X3QgX193Yywg X19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXN3c3BhY2Vf bCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKZXh0ZXJu IGludCBfX2lzd3VwcGVyX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJv dyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc3d4ZGlnaXRfbCAod2ludF90IF9fd2MsIF9fbG9jYWxl X3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzd2JsYW5rX2wgKHdpbnRf dCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjdHlwZV90 IF9fd2N0eXBlX2wgKF9fY29uc3QgY2hhciAqX19wcm9wZXJ0eSwgX19sb2NhbGVfdCBfX2xvY2Fs ZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXN3Y3R5cGVfbCAod2ludF90IF9fd2MsIHdj dHlwZV90IF9fZGVzYywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CiMgMzM0ICIvdXNy L2luY2x1ZGUvd2N0eXBlLmgiIDMKZXh0ZXJuIHdpbnRfdCBfX3Rvd2xvd2VyX2wgKHdpbnRfdCBf X3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IF9fdG93 dXBwZXJfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCmV4 dGVybiB3aW50X3QgX190b3djdHJhbnNfbCAod2ludF90IF9fd2MsIHdjdHJhbnNfdCBfX2Rlc2Ms IF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKfQojIDg4ICJQbGF0Zm9ybVN1cHBv cnQvRE9NU3RyaW5nSGVscGVyLmhwcCIgMgoKCgojIDEgIlhhbGFuRE9NL1hhbGFuRE9NU3RyaW5n LmhwcCIgMQojIDkyICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIgMgoKCgoj IDEgIlBsYXRmb3JtU3VwcG9ydC9YYWxhblVuaWNvZGUuaHBwIiAxCiMgNjMgIlBsYXRmb3JtU3Vw cG9ydC9YYWxhblVuaWNvZGUuaHBwIgojIDEgIlBsYXRmb3JtU3VwcG9ydC9QbGF0Zm9ybVN1cHBv cnREZWZpbml0aW9ucy5ocHAiIDEKIyA2NCAiUGxhdGZvcm1TdXBwb3J0L1hhbGFuVW5pY29kZS5o cHAiIDIKCgoKIyAxICJYYWxhbkRPTS9YYWxhbkRPTVN0cmluZy5ocHAiIDEKIyA2OCAiUGxhdGZv cm1TdXBwb3J0L1hhbGFuVW5pY29kZS5ocHAiIDIKCgoKCgoKbmFtZXNwYWNlIFhhbGFuVW5pY29k ZQoKewojIDIwOSAiUGxhdGZvcm1TdXBwb3J0L1hhbGFuVW5pY29kZS5ocHAiCiAgICAgICAgc3Rh dGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFySFRhYiA9IDB4MDk7CiAgICAgICAgc3RhdGljIGNv bnN0IFhhbGFuRE9NQ2hhciBjaGFyTEYgPSAweDBBOwogICAgICAgIHN0YXRpYyBjb25zdCBYYWxh bkRPTUNoYXIgY2hhckNSID0gMHgwRDsKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFy IGNoYXJGRiA9IDB4MEM7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyU3Bh Y2UgPSAweDIwOwoKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJFeGNsYW1h dGlvbk1hcmsgPSAweDIxOwoKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJR dW90ZU1hcmsgPSAweDIyOwoKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJO dW1iZXJTaWduID0gMHgyMzsKCiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFy RG9sbGFyU2lnbiA9IDB4MjQ7CgogICAgICAgIHN0YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIgY2hh clBlcmNlbnRTaWduID0gMHgyNTsKCiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBj aGFyQW1wZXJzYW5kID0gMHgyNjsKCiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBj aGFyQXBvc3Ryb3BoZSA9IDB4Mjc7CgogICAgICAgIHN0YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIg Y2hhckxlZnRQYXJlbnRoZXNpcyA9IDB4Mjg7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9N Q2hhciBjaGFyUmlnaHRQYXJlbnRoZXNpcyA9IDB4Mjk7CgogICAgICAgIHN0YXRpYyBjb25zdCBY YWxhbkRPTUNoYXIgY2hhckFzdGVyaXNrID0gMHgyQTsKCiAgICAgICAgc3RhdGljIGNvbnN0IFhh bGFuRE9NQ2hhciBjaGFyUGx1c1NpZ24gPSAweDJCOwoKICAgICAgICBzdGF0aWMgY29uc3QgWGFs YW5ET01DaGFyIGNoYXJDb21tYSA9IDB4MkM7CgogICAgICAgIHN0YXRpYyBjb25zdCBYYWxhbkRP TUNoYXIgY2hhckh5cGhlbk1pbnVzID0gMHgyRDsKCiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFu RE9NQ2hhciBjaGFyRnVsbFN0b3AgPSAweDJFOwoKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5E T01DaGFyIGNoYXJTb2xpZHVzID0gMHgyRjsKCiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9N Q2hhciBjaGFyRGlnaXRfMCA9IDB4MzA7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hh ciBjaGFyRGlnaXRfMSA9IDB4MzE7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBj aGFyRGlnaXRfMiA9IDB4MzI7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFy RGlnaXRfMyA9IDB4MzM7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyRGln aXRfNCA9IDB4MzQ7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyRGlnaXRf NSA9IDB4MzU7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyRGlnaXRfNiA9 IDB4MzY7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyRGlnaXRfNyA9IDB4 Mzc7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyRGlnaXRfOCA9IDB4Mzg7 CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyRGlnaXRfOSA9IDB4Mzk7Cgog ICAgICAgIHN0YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIgY2hhckNvbG9uID0gMHgzQTsKICAgICAg ICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJTZW1pY29sb24gPSAweDNCOwoKICAgICAg ICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJMZXNzVGhhblNpZ24gPSAweDNDOwoKICAg ICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJFcXVhbHNTaWduID0gMHgzRDsKCiAg ICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyR3JlYXRlclRoYW5TaWduID0gMHgz RTsKCiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyUXVlc3Rpb25NYXJrID0g MHgzRjsKCiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyQ29tbWVyY2lhbEF0 ID0gMHg0MDsKCiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyTGV0dGVyX0Eg PSAweDQxOwogICAgICAgIHN0YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIgY2hhckxldHRlcl9CID0g MHg0MjsKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJMZXR0ZXJfQyA9IDB4 NDM7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyTGV0dGVyX0QgPSAweDQ0 OwogICAgICAgIHN0YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIgY2hhckxldHRlcl9FID0gMHg0NTsK ICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJMZXR0ZXJfRiA9IDB4NDY7CiAg ICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyTGV0dGVyX0cgPSAweDQ3OwogICAg ICAgIHN0YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIgY2hhckxldHRlcl9IID0gMHg0ODsKICAgICAg ICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJMZXR0ZXJfSSA9IDB4NDk7CiAgICAgICAg c3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyTGV0dGVyX0ogPSAweDRBOwogICAgICAgIHN0 YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIgY2hhckxldHRlcl9LID0gMHg0QjsKICAgICAgICBzdGF0 aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJMZXR0ZXJfTCA9IDB4NEM7CiAgICAgICAgc3RhdGlj IGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyTGV0dGVyX00gPSAweDREOwogICAgICAgIHN0YXRpYyBj b25zdCBYYWxhbkRPTUNoYXIgY2hhckxldHRlcl9OID0gMHg0RTsKICAgICAgICBzdGF0aWMgY29u c3QgWGFsYW5ET01DaGFyIGNoYXJMZXR0ZXJfTyA9IDB4NEY7CiAgICAgICAgc3RhdGljIGNvbnN0 IFhhbGFuRE9NQ2hhciBjaGFyTGV0dGVyX1AgPSAweDUwOwogICAgICAgIHN0YXRpYyBjb25zdCBY YWxhbkRPTUNoYXIgY2hhckxldHRlcl9RID0gMHg1MTsKICAgICAgICBzdGF0aWMgY29uc3QgWGFs YW5ET01DaGFyIGNoYXJMZXR0ZXJfUiA9IDB4NTI7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFu RE9NQ2hhciBjaGFyTGV0dGVyX1MgPSAweDUzOwogICAgICAgIHN0YXRpYyBjb25zdCBYYWxhbkRP TUNoYXIgY2hhckxldHRlcl9UID0gMHg1NDsKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01D aGFyIGNoYXJMZXR0ZXJfVSA9IDB4NTU7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hh ciBjaGFyTGV0dGVyX1YgPSAweDU2OwogICAgICAgIHN0YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIg Y2hhckxldHRlcl9XID0gMHg1NzsKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNo YXJMZXR0ZXJfWCA9IDB4NTg7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFy TGV0dGVyX1kgPSAweDU5OwogICAgICAgIHN0YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIgY2hhckxl dHRlcl9aID0gMHg1QTsKCiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyTGVm dFNxdWFyZUJyYWNrZXQgPSAweDVCOwoKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFy IGNoYXJSZXZlcnNlU29saWR1cyA9IDB4NUM7CgogICAgICAgIHN0YXRpYyBjb25zdCBYYWxhbkRP TUNoYXIgY2hhclJpZ2h0U3F1YXJlQnJhY2tldCA9IDB4NUQ7CgogICAgICAgIHN0YXRpYyBjb25z dCBYYWxhbkRPTUNoYXIgY2hhckNpcmN1bWZsZXhBY2NlbnQgPSAweDVFOwoKICAgICAgICBzdGF0 aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJMb3dMaW5lID0gMHg1RjsKCiAgICAgICAgc3RhdGlj IGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyTGV0dGVyX2EgPSAweDYxOwogICAgICAgIHN0YXRpYyBj b25zdCBYYWxhbkRPTUNoYXIgY2hhckxldHRlcl9iID0gMHg2MjsKICAgICAgICBzdGF0aWMgY29u c3QgWGFsYW5ET01DaGFyIGNoYXJMZXR0ZXJfYyA9IDB4NjM7CiAgICAgICAgc3RhdGljIGNvbnN0 IFhhbGFuRE9NQ2hhciBjaGFyTGV0dGVyX2QgPSAweDY0OwogICAgICAgIHN0YXRpYyBjb25zdCBY YWxhbkRPTUNoYXIgY2hhckxldHRlcl9lID0gMHg2NTsKICAgICAgICBzdGF0aWMgY29uc3QgWGFs YW5ET01DaGFyIGNoYXJMZXR0ZXJfZiA9IDB4NjY7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFu RE9NQ2hhciBjaGFyTGV0dGVyX2cgPSAweDY3OwogICAgICAgIHN0YXRpYyBjb25zdCBYYWxhbkRP TUNoYXIgY2hhckxldHRlcl9pID0gMHg2OTsKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01D aGFyIGNoYXJMZXR0ZXJfbCA9IDB4NkM7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hh ciBjaGFyTGV0dGVyX20gPSAweDZEOwogICAgICAgIHN0YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIg Y2hhckxldHRlcl9uID0gMHg2RTsKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNo YXJMZXR0ZXJfbyA9IDB4NkY7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFy TGV0dGVyX3AgPSAweDcwOwogICAgICAgIHN0YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIgY2hhckxl dHRlcl9xID0gMHg3MTsKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJMZXR0 ZXJfciA9IDB4NzI7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyTGV0dGVy X3MgPSAweDczOwogICAgICAgIHN0YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIgY2hhckxldHRlcl90 ID0gMHg3NDsKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJMZXR0ZXJfdSA9 IDB4NzU7CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyTGV0dGVyX3cgPSAw eDc3OwogICAgICAgIHN0YXRpYyBjb25zdCBYYWxhbkRPTUNoYXIgY2hhckxldHRlcl94ID0gMHg3 ODsKICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJMZXR0ZXJfeSA9IDB4Nzk7 CiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyTGV0dGVyX3ogPSAweDdBOwoK ICAgICAgICBzdGF0aWMgY29uc3QgWGFsYW5ET01DaGFyIGNoYXJMZWZ0Q3VybHlCcmFja2V0ID0g MHg3QjsKCiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyVmVydGljYWxMaW5l ID0gMHg3QzsKCiAgICAgICAgc3RhdGljIGNvbnN0IFhhbGFuRE9NQ2hhciBjaGFyUmlnaHRDdXJs eUJyYWNrZXQgPSAweDdEOwojIDM1MyAiUGxhdGZvcm1TdXBwb3J0L1hhbGFuVW5pY29kZS5ocHAi Cn07CiMgOTYgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIiAyCiMgMSAiUGxh dGZvcm1TdXBwb3J0L1hhbGFuWE1MQ2hhci5ocHAiIDEKIyA2MyAiUGxhdGZvcm1TdXBwb3J0L1hh bGFuWE1MQ2hhci5ocHAiCiMgMSAiUGxhdGZvcm1TdXBwb3J0L1BsYXRmb3JtU3VwcG9ydERlZmlu aXRpb25zLmhwcCIgMQojIDY0ICJQbGF0Zm9ybVN1cHBvcnQvWGFsYW5YTUxDaGFyLmhwcCIgMgoK CgojIDEgIlhhbGFuRE9NL1hhbGFuRE9NU3RyaW5nLmhwcCIgMQojIDY4ICJQbGF0Zm9ybVN1cHBv cnQvWGFsYW5YTUxDaGFyLmhwcCIgMgoKCgpzdHJ1Y3QgWGFsYW5YTUxDaGFyCnsKCnB1YmxpYzoK CiAgICAgICAgZW51bSBlVHlwZQogICAgICAgIHsKICAgICAgICAgICAgICAgIFhNTF9YWCA9IDAs CiAgICAgICAgICAgICAgICBYTUxfQkMgPSAxLAogICAgICAgICAgICAgICAgWE1MX0lEID0gMiwK ICAgICAgICAgICAgICAgIFhNTF9FWCA9IDMsCiAgICAgICAgICAgICAgICBYTUxfREkgPSA0LAog ICAgICAgICAgICAgICAgWE1MX0NDID0gNSwKICAgICAgICAgICAgICAgIFhNTF9XUyA9IDYKICAg ICAgICB9OwoKICAgIHN0YXRpYyBjb25zdCBjaGFyIHRoZVVuaWNvZGVUYWJsZVtdOwoKICAgICAg ICBzdGF0aWMgYm9vbAogICAgICAgIGlzQmFzZUNoYXIoWGFsYW5ET01DaGFyIGMpCiAgICAgICAg ewogICAgICAgICAgICAgICAgcmV0dXJuIHRoZVVuaWNvZGVUYWJsZVtjXSA9PSBYTUxfQkM7CiAg ICAgICAgfQoKICAgICAgICBzdGF0aWMgYm9vbAogICAgICAgIGlzSWRlb2dyYXBoaWMoWGFsYW5E T01DaGFyIGMpCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoZVVuaWNvZGVUYWJs ZVtjXSA9PSBYTUxfSUQ7CiAgICAgICAgfQoKICAgICAgICBzdGF0aWMgYm9vbAogICAgICAgIGlz RXh0ZW5kZXIoWGFsYW5ET01DaGFyIGMpCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJu IHRoZVVuaWNvZGVUYWJsZVtjXSA9PSBYTUxfRVg7CiAgICAgICAgfQoKICAgICAgICBzdGF0aWMg Ym9vbAogICAgICAgIGlzRGlnaXQoWGFsYW5ET01DaGFyIGMpCiAgICAgICAgewogICAgICAgICAg ICAgICAgcmV0dXJuIHRoZVVuaWNvZGVUYWJsZVtjXSA9PSBYTUxfREk7CiAgICAgICAgfQoKICAg ICAgICBzdGF0aWMgYm9vbAogICAgICAgIGlzQ29tYmluaW5nQ2hhcihYYWxhbkRPTUNoYXIgYykK ICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhlVW5pY29kZVRhYmxlW2NdID09IFhN TF9DQzsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBib29sCiAgICAgICAgaXNXaGl0ZXNwYWNl KFhhbGFuRE9NQ2hhciBjKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGVVbmlj b2RlVGFibGVbY10gPT0gWE1MX1dTOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljIGJvb2wKICAg ICAgICBpc0xldHRlcihYYWxhbkRPTUNoYXIgYykKICAgICAgICB7CiAgICAgICAgICAgICAgICBy ZXR1cm4gdGhlVW5pY29kZVRhYmxlW2NdID09IFhNTF9CQyB8fCB0aGVVbmljb2RlVGFibGVbY10g PT0gWE1MX0lEOwogICAgICAgIH0KCgp9OwojIDk3ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5n SGVscGVyLmhwcCIgMgoKCgpjbGFzcyBYYWxhbk91dHB1dFN0cmVhbTsKIyAxMzkgIlBsYXRmb3Jt U3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgY29uc3QgWGFsYW5ET01TdHJpbmcm ClN0YXRpY1N0cmluZ1RvRE9NU3RyaW5nKGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVTdHJpbmcp CnsKICAgICAgICByZXR1cm4gdGhlU3RyaW5nOwp9CiMgMTUzICJQbGF0Zm9ybVN1cHBvcnQvRE9N U3RyaW5nSGVscGVyLmhwcCIKdm9pZApET01TdHJpbmdIZWxwZXJJbml0aWFsaXplKCk7CgoKCgoK Cgp2b2lkCkRPTVN0cmluZ0hlbHBlclRlcm1pbmF0ZSgpOwojIDE3NCAiUGxhdGZvcm1TdXBwb3J0 L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSBjb25zdCBYYWxhbkRPTUNoYXIqCmNfd3N0cihj b25zdCBYYWxhbkRPTVN0cmluZyYgdGhlU3RyaW5nKQp7CiAgICAgICAgcmV0dXJuIHRoZVN0cmlu Zy5jX3N0cigpOwp9CiMgMTg5ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIK aW5saW5lIGNvbnN0IGNoYXIqCmNfc3RyKGNvbnN0IENoYXJWZWN0b3JUeXBlJiB0aGVTdHJpbmcp CnsKICAgICAgICBpZiAodGhlU3RyaW5nLnNpemUoKSA9PSAwKQogICAgICAgIHsKICAgICAgICAg ICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAg ICAgICAgICAgY29uc3QgY2hhciogY29uc3QgcHRyID0gJnRoZVN0cmluZ1swXTsKCiAgICAgICAg ICAgICAgICAoKHZvaWQpICgocHRyW3RoZVN0cmluZy5zaXplKCkgLSAxXSA9PSAnXDAnKSA/IDAg OiAoX19hc3NlcnRfZmFpbCAoInB0clt0aGVTdHJpbmcuc2l6ZSgpIC0gMV0gPT0gJ1xcMCciLCAi UGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiLCAyMDAsIF9fUFJFVFRZX0ZVTkNU SU9OX18pLCAwKSkpOwoKICAgICAgICAgICAgICAgIHJldHVybiBwdHI7CiAgICAgICAgfQp9CiMg MjIzICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIGNvbnN0IFhh bGFuRE9NQ2hhcioKY193c3RyKGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlU3RyaW5nKQp7CiAgICAg ICAgcmV0dXJuIHRoZVN0cmluZzsKfQojIDIzOCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hl bHBlci5ocHAiCmlubGluZSBjb25zdCBYYWxhbkRPTUNoYXIqCnRvQ2hhckFycmF5KGNvbnN0IFhh bGFuRE9NU3RyaW5nJiB0aGVTdHJpbmcpCnsKICAgICAgICByZXR1cm4gdGhlU3RyaW5nLmNfc3Ry KCk7Cn0KIyAyNTIgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUg Y29uc3QgWGFsYW5ET01DaGFyKgp0b0NoYXJBcnJheShjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0 cmluZykKewogICAgICAgIHJldHVybiB0aGVTdHJpbmc7Cn0KIyAyNjcgIlBsYXRmb3JtU3VwcG9y dC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgY29uc3QgY2hhcioKdG9DaGFyQXJyYXkoY29u c3QgQ2hhclZlY3RvclR5cGUmIHRoZVN0cmluZykKewogICAgICAgIHJldHVybiB0aGVTdHJpbmcu c2l6ZSgpID09IDAgPyAwIDogJnRoZVN0cmluZ1swXTsKfQojIDI4MiAiUGxhdGZvcm1TdXBwb3J0 L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSB2b2lkCnJlc2VydmUoCiAgICAgICAgICAgICAg ICAgICAgICAgIFhhbGFuRE9NU3RyaW5nJiB0aGVTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGludCB0aGVDb3VudCkKewogICAgICAgIHRoZVN0cmluZy5yZXNlcnZlKHRo ZUNvdW50KTsKfQojIDI5OCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlu bGluZSB1bnNpZ25lZCBpbnQKbGVuZ3RoKGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVTdHJpbmcp CnsKICAgICAgICByZXR1cm4gdGhlU3RyaW5nLmxlbmd0aCgpOwp9CiMgMzEzICJQbGF0Zm9ybVN1 cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIHVuc2lnbmVkIGludApsZW5ndGgoY29u c3QgWGFsYW5ET01DaGFyKiB0aGVTdHJpbmcpCnsKICAgICAgICAoKHZvaWQpICgodGhlU3RyaW5n ICE9IDApID8gMCA6IChfX2Fzc2VydF9mYWlsICgidGhlU3RyaW5nICE9IDAiLCAiUGxhdGZvcm1T dXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiLCAzMTYsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAw KSkpOwoKICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZUJ1ZmZlclBvaW50ZXIgPSB0aGVT dHJpbmc7CgogICAgICAgIHdoaWxlKCp0aGVCdWZmZXJQb2ludGVyICE9IDApCiAgICAgICAgewog ICAgICAgICAgICAgICAgdGhlQnVmZmVyUG9pbnRlcisrOwogICAgICAgIH0KCiAgICAgICAgcmV0 dXJuIHRoZUJ1ZmZlclBvaW50ZXIgLSB0aGVTdHJpbmc7Cn0KIyAzMzYgIlBsYXRmb3JtU3VwcG9y dC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgdW5zaWduZWQgaW50Cmxlbmd0aChjb25zdCBj aGFyKiB0aGVTdHJpbmcpCnsKICAgICAgICAoKHZvaWQpICgodGhlU3RyaW5nICE9IDApID8gMCA6 IChfX2Fzc2VydF9mYWlsICgidGhlU3RyaW5nICE9IDAiLCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0 cmluZ0hlbHBlci5ocHAiLCAzMzksIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwoKICAgICAg ICByZXR1cm4gc3RybGVuKHRoZVN0cmluZyk7Cn0KIyAzNTIgIlBsYXRmb3JtU3VwcG9ydC9ET01T dHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgYm9vbAppc0VtcHR5KGNvbnN0IFhhbGFuRE9NU3RyaW5n JiBzdHIpCnsKICAgICAgICByZXR1cm4gbGVuZ3RoKHN0cikgPT0gMCA/IHRydWUgOiBmYWxzZTsK fQojIDM2OSAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSB1bnNp Z25lZCBpbnQKaW5kZXhPZigKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01D aGFyKiB0aGVTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFuRE9NQ2hhciB0aGVD aGFyKQp7CiAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVQb2ludGVyID0gdGhlU3RyaW5n OwoKICAgICAgICB3aGlsZSgqdGhlUG9pbnRlciAhPSB0aGVDaGFyICYmICp0aGVQb2ludGVyICE9 IDApCiAgICAgICAgewogICAgICAgICAgICAgICAgKyt0aGVQb2ludGVyOwogICAgICAgIH0KCiAg ICAgICAgcmV0dXJuIHRoZVBvaW50ZXIgLSB0aGVTdHJpbmc7Cn0KIyAzOTUgIlBsYXRmb3JtU3Vw cG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgdW5zaWduZWQgaW50CmluZGV4T2YoCiAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVTdHJpbmcsCiAg ICAgICAgICAgICAgICAgICAgICAgIFhhbGFuRE9NQ2hhciB0aGVDaGFyKQp7CiAgICAgICAgaWYg KHRoZVN0cmluZy5sZW5ndGgoKSA9PSAwKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVy biAwOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0 dXJuIGluZGV4T2YoY193c3RyKHRoZVN0cmluZyksIHRoZUNoYXIpOwogICAgICAgIH0KfQojIDQy MSAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCnVuc2lnbmVkIGludAppbmRl eE9mKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0cmlu ZywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVTdWJzdHJp bmcpOwojIDQzNiAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCnVuc2lnbmVk IGludAppbmRleE9mKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmlu ZyYgdGhlU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmlu ZyYgdGhlU3Vic3RyaW5nKTsKIyA0NTMgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIu aHBwIgp1bnNpZ25lZCBpbnQKbGFzdEluZGV4T2YoCiAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IFhhbGFuRE9NQ2hhciogdGhlU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICBYYWxh bkRPTUNoYXIgdGhlQ2hhcik7CiMgNDY5ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVy LmhwcCIKaW5saW5lIHVuc2lnbmVkIGludApsYXN0SW5kZXhPZigKICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZVN0cmluZywKICAgICAgICAgICAgICAgICAg ICAgICAgWGFsYW5ET01DaGFyIHRoZUNoYXIpCnsKICAgICAgICByZXR1cm4gbGFzdEluZGV4T2Yo Y193c3RyKHRoZVN0cmluZyksIHRoZUNoYXIpOwp9CiMgNDg2ICJQbGF0Zm9ybVN1cHBvcnQvRE9N U3RyaW5nSGVscGVyLmhwcCIKYm9vbApzdGFydHNXaXRoKAogICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgWGFsYW5ET01DaGFyKiB0aGVTdWJzdHJpbmcpOwojIDUwMCAiUGxhdGZvcm1TdXBwb3J0 L0RPTVN0cmluZ0hlbHBlci5ocHAiCmJvb2wKc3RhcnRzV2l0aCgKICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVTdWJzdHJpbmcpOwojIDUxNCAiUGxhdGZvcm1T dXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmJvb2wKc3RhcnRzV2l0aCgKICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZVN0cmluZywKICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVTdWJzdHJpbmcpOwojIDUyOCAiUGxh dGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmJvb2wKc3RhcnRzV2l0aCgKICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZVN0cmluZywKICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZVN1YnN0cmluZyk7CiMg NTQyICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIGJvb2wKc3Rh cnRzV2l0aCgKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRo ZVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdGhlU3Vic3RyaW5n KQp7CiAgICAgICAgcmV0dXJuIHN0YXJ0c1dpdGgoCiAgICAgICAgICAgICAgICAgICAgICAgIHRo ZVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5ET01TdHJpbmcodGhlU3Vic3Ry aW5nKSk7Cn0KIyA1NjEgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgpib29s CmVuZHNXaXRoKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRo ZVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVT dWJzdHJpbmcpOwojIDU3NSAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlu bGluZSBib29sCmVuZHNXaXRoKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRP TVN0cmluZyYgdGhlRE9NU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxh bkRPTVN0cmluZyYgdGhlU3Vic3RyaW5nKQp7CiAgICAgICAgcmV0dXJuIGVuZHNXaXRoKGNfd3N0 cih0aGVET01TdHJpbmcpLCBjX3dzdHIodGhlU3Vic3RyaW5nKSk7Cn0KIyA1OTIgIlBsYXRmb3Jt U3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgpYYWxhbkRPTVN0cmluZyAmCkRvdWJsZVRvRE9N U3RyaW5nKAogICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdGhlVmFsdWUsCiAgICAgICAg ICAgICAgICAgICAgICAgIFhhbGFuRE9NU3RyaW5nJiB0aGVSZXN1bHQpOwojIDYwNSAiUGxhdGZv cm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSBjb25zdCBYYWxhbkRPTVN0cmlu ZwpEb3VibGVUb0RPTVN0cmluZyhkb3VibGUgdGhlVmFsdWUpCnsKICAgICAgICBYYWxhbkRPTVN0 cmluZyB0aGVSZXN1bHQ7CgogICAgICAgIERvdWJsZVRvRE9NU3RyaW5nKHRoZVZhbHVlLCB0aGVS ZXN1bHQpOwoKICAgICAgICByZXR1cm4gdGhlUmVzdWx0Owp9CiMgNjI1ICJQbGF0Zm9ybVN1cHBv cnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKWGFsYW5ET01TdHJpbmcgJgpMb25nVG9IZXhET01TdHJp bmcoCiAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdGhlVmFsdWUsCiAgICAgICAgICAgICAg ICAgICAgICAgIFhhbGFuRE9NU3RyaW5nJiB0aGVSZXN1bHQpOwojIDYzOSAiUGxhdGZvcm1TdXBw b3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSBjb25zdCBYYWxhbkRPTVN0cmluZwpMb25n VG9IZXhET01TdHJpbmcobG9uZyB0aGVWYWx1ZSkKewogICAgICAgIFhhbGFuRE9NU3RyaW5nIHRo ZVJlc3VsdDsKCiAgICAgICAgTG9uZ1RvSGV4RE9NU3RyaW5nKHRoZVZhbHVlLCB0aGVSZXN1bHQp OwoKICAgICAgICByZXR1cm4gdGhlUmVzdWx0Owp9CiMgNjU5ICJQbGF0Zm9ybVN1cHBvcnQvRE9N U3RyaW5nSGVscGVyLmhwcCIKWGFsYW5ET01TdHJpbmcgJgpVbnNpZ25lZExvbmdUb0hleERPTVN0 cmluZygKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB0aGVWYWx1ZSwKICAg ICAgICAgICAgICAgICAgICAgICAgWGFsYW5ET01TdHJpbmcmIHRoZVJlc3VsdCk7CiMgNjczICJQ bGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIGNvbnN0IFhhbGFuRE9N U3RyaW5nClVuc2lnbmVkTG9uZ1RvSGV4RE9NU3RyaW5nKHVuc2lnbmVkIGxvbmcgdGhlVmFsdWUp CnsKICAgICAgICBYYWxhbkRPTVN0cmluZyB0aGVSZXN1bHQ7CgogICAgICAgIFVuc2lnbmVkTG9u Z1RvSGV4RE9NU3RyaW5nKHRoZVZhbHVlLCB0aGVSZXN1bHQpOwoKICAgICAgICByZXR1cm4gdGhl UmVzdWx0Owp9CiMgNjkyICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKWGFs YW5ET01TdHJpbmcgJgpMb25nVG9ET01TdHJpbmcoCiAgICAgICAgICAgICAgICAgICAgICAgIGxv bmcgdGhlVmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFuRE9NU3RyaW5nJiB0aGVS ZXN1bHQpOwojIDcwNSAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGlu ZSBjb25zdCBYYWxhbkRPTVN0cmluZwpMb25nVG9ET01TdHJpbmcobG9uZyB0aGVWYWx1ZSkKewog ICAgICAgIFhhbGFuRE9NU3RyaW5nIHRoZVJlc3VsdDsKCiAgICAgICAgTG9uZ1RvRE9NU3RyaW5n KHRoZVZhbHVlLCB0aGVSZXN1bHQpOwoKICAgICAgICByZXR1cm4gdGhlUmVzdWx0Owp9CiMgNzI1 ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKWGFsYW5ET01TdHJpbmcgJgpV bnNpZ25lZExvbmdUb0RPTVN0cmluZygKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg bG9uZyB0aGVWYWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5ET01TdHJpbmcmIHRo ZVJlc3VsdCk7CiMgNzM4ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5s aW5lIGNvbnN0IFhhbGFuRE9NU3RyaW5nClVuc2lnbmVkTG9uZ1RvRE9NU3RyaW5nKHVuc2lnbmVk IGxvbmcgdGhlVmFsdWUpCnsKICAgICAgICBYYWxhbkRPTVN0cmluZyB0aGVSZXN1bHQ7CgogICAg ICAgIFVuc2lnbmVkTG9uZ1RvRE9NU3RyaW5nKHRoZVZhbHVlLCB0aGVSZXN1bHQpOwoKICAgICAg ICByZXR1cm4gdGhlUmVzdWx0Owp9CiMgNzU2ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVs cGVyLmhwcCIKaW50CldpZGVTdHJpbmdUb0ludChjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0cmlu Zyk7CiMgNzY3ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKbG9uZwpXaWRl U3RyaW5nVG9Mb25nKGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlU3RyaW5nKTsKIyA3NzggIlBsYXRm b3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgp1bnNpZ25lZCBsb25nCldpZGVTdHJpbmdU b1Vuc2lnbmVkTG9uZyhjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0cmluZyk7CiMgNzg5ICJQbGF0 Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKZG91YmxlCldpZGVTdHJpbmdUb0RvdWJs ZShjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0cmluZyk7CiMgODAwICJQbGF0Zm9ybVN1cHBvcnQv RE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIGludApET01TdHJpbmdUb0ludChjb25zdCBYYWxh bkRPTVN0cmluZyYgdGhlU3RyaW5nKQp7CiAgICAgICAgcmV0dXJuIFdpZGVTdHJpbmdUb0ludChj X3dzdHIodGhlU3RyaW5nKSk7Cn0KIyA4MTQgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxw ZXIuaHBwIgppbmxpbmUgbG9uZwpET01TdHJpbmdUb0xvbmcoY29uc3QgWGFsYW5ET01TdHJpbmcm IHRoZVN0cmluZykKewogICAgICAgIHJldHVybiBXaWRlU3RyaW5nVG9Mb25nKGNfd3N0cih0aGVT dHJpbmcpKTsKfQojIDgyOCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlu bGluZSB1bnNpZ25lZCBsb25nCkRPTVN0cmluZ1RvVW5zaWduZWRMb25nKGNvbnN0IFhhbGFuRE9N U3RyaW5nJiB0aGVTdHJpbmcpCnsKICAgICAgICByZXR1cm4gV2lkZVN0cmluZ1RvVW5zaWduZWRM b25nKGNfd3N0cih0aGVTdHJpbmcpKTsKfQojIDg0MiAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmlu Z0hlbHBlci5ocHAiCmlubGluZSBkb3VibGUKRE9NU3RyaW5nVG9Eb3VibGUoY29uc3QgWGFsYW5E T01TdHJpbmcmIHRoZVN0cmluZykKewogICAgICAgIHJldHVybiBXaWRlU3RyaW5nVG9Eb3VibGUo Y193c3RyKHRoZVN0cmluZykpOwp9CiMgODU3ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVs cGVyLmhwcCIKdm9pZApPdXRwdXRTdHJpbmcoCiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFu T3V0cHV0U3RyZWFtJiB0aGVTdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENo YXJWZWN0b3JUeXBlJiB0aGVTdHJpbmcpOwojIDg3MSAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmlu Z0hlbHBlci5ocHAiCnZvaWQKT3V0cHV0U3RyaW5nKAoKCgogICAgICAgICAgICAgICAgICAgICAg ICBzdGQ6Om9zdHJlYW0mIHRoZVN0cmVhbSwKCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IENoYXJWZWN0b3JUeXBlJiB0aGVTdHJpbmcpOwojIDg4OSAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0 cmluZ0hlbHBlci5ocHAiCnZvaWQKT3V0cHV0U3RyaW5nKAogICAgICAgICAgICAgICAgICAgICAg ICBYYWxhbk91dHB1dFN0cmVhbSYgdGhlU3RyZWFtLAogICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0cmluZyk7CiMgOTAzICJQbGF0Zm9ybVN1cHBvcnQvRE9N U3RyaW5nSGVscGVyLmhwcCIKdm9pZApPdXRwdXRTdHJpbmcoCgoKCiAgICAgICAgICAgICAgICAg ICAgICAgIHN0ZDo6b3N0cmVhbSYgdGhlU3RyZWFtLAoKICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgWGFsYW5ET01DaGFyKiB0aGVTdHJpbmcpOwojIDkyMSAiUGxhdGZvcm1TdXBwb3J0L0RP TVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSB2b2lkCk91dHB1dFN0cmluZygKICAgICAgICAgICAg ICAgICAgICAgICAgWGFsYW5PdXRwdXRTdHJlYW0mIHRoZVN0cmVhbSwKICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZVN0cmluZykKewogICAgICAgIGlmIChp c0VtcHR5KHRoZVN0cmluZykgPT0gZmFsc2UpCiAgICAgICAgewogICAgICAgICAgICAgICAgT3V0 cHV0U3RyaW5nKHRoZVN0cmVhbSwgY193c3RyKHRoZVN0cmluZykpOwogICAgICAgIH0KfQojIDk0 MSAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSB2b2lkCk91dHB1 dFN0cmluZygKCgoKICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpvc3RyZWFtJiB0aGVTdHJl YW0sCgogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlU3Ry aW5nKQp7CiAgICAgICAgT3V0cHV0U3RyaW5nKHRoZVN0cmVhbSwgY193c3RyKHRoZVN0cmluZykp Owp9CiMgOTYyICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIFhh bGFuT3V0cHV0U3RyZWFtJgpvcGVyYXRvcjw8KAogICAgICAgICAgICAgICAgICAgICAgICBYYWxh bk91dHB1dFN0cmVhbSYgdGhlU3RyZWFtLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBD aGFyVmVjdG9yVHlwZSYgdGhlU3RyaW5nKQp7CiAgICAgICAgT3V0cHV0U3RyaW5nKHRoZVN0cmVh bSwgdGhlU3RyaW5nKTsKCiAgICAgICAgcmV0dXJuIHRoZVN0cmVhbTsKfQojIDk4NiAiUGxhdGZv cm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSBzdGQ6Om9zdHJlYW0mCm9wZXJh dG9yPDwoCiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6b3N0cmVhbSYgdGhlU3RyZWFtLAoK ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ2hhclZlY3RvclR5cGUmIHRoZVN0cmluZykK ewogICAgICAgIE91dHB1dFN0cmluZyh0aGVTdHJlYW0sIHRoZVN0cmluZyk7CgogICAgICAgIHJl dHVybiB0aGVTdHJlYW07Cn0KIyAxMDA2ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVy LmhwcCIKaW5saW5lIFhhbGFuT3V0cHV0U3RyZWFtJgpvcGVyYXRvcjw8KAogICAgICAgICAgICAg ICAgICAgICAgICBYYWxhbk91dHB1dFN0cmVhbSYgdGhlU3RyZWFtLAogICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0cmluZykKewogICAgICAgIE91dHB1dFN0 cmluZyh0aGVTdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZVN0cmlu Zyk7CgogICAgICAgIHJldHVybiB0aGVTdHJlYW07Cn0KIyAxMDMxICJQbGF0Zm9ybVN1cHBvcnQv RE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIHN0ZDo6b3N0cmVhbSYKb3BlcmF0b3I8PCgKICAg ICAgICAgICAgICAgICAgICAgICAgc3RkOjpvc3RyZWFtJiB0aGVTdHJlYW0sCgogICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0cmluZykKewogICAgICAgIE91 dHB1dFN0cmluZyh0aGVTdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo ZVN0cmluZyk7CgogICAgICAgIHJldHVybiB0aGVTdHJlYW07Cn0KIyAxMDUyICJQbGF0Zm9ybVN1 cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIFhhbGFuT3V0cHV0U3RyZWFtJgpvcGVy YXRvcjw8KAogICAgICAgICAgICAgICAgICAgICAgICBYYWxhbk91dHB1dFN0cmVhbSYgdGhlU3Ry ZWFtLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlU3Ry aW5nKQp7CiAgICAgICAgT3V0cHV0U3RyaW5nKHRoZVN0cmVhbSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGhlU3RyaW5nKTsKCiAgICAgICAgcmV0dXJuIHRoZVN0cmVhbTsKfQoj IDEwNzcgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgc3RkOjpv c3RyZWFtJgpvcGVyYXRvcjw8KAogICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om9zdHJlYW0m IHRoZVN0cmVhbSwKCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5n JiB0aGVTdHJpbmcpCnsKICAgICAgICBPdXRwdXRTdHJpbmcodGhlU3RyZWFtLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0aGVTdHJpbmcpOwoKICAgICAgICByZXR1cm4gdGhlU3Ry ZWFtOwp9CiMgMTA5OCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGlu ZSBYYWxhbkRPTUNoYXIKY2hhckF0KAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxh bkRPTVN0cmluZyYgdGhlU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp bnQgdGhlSW5kZXgpCnsKICAgICAgICByZXR1cm4gdGhlU3RyaW5nW3RoZUluZGV4XTsKfQojIDEx MTQgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgYm9vbAppc1hN TFdoaXRlc3BhY2UoWGFsYW5ET01DaGFyIHRoZUNoYXIpCnsKICAgICAgICByZXR1cm4gWGFsYW5Y TUxDaGFyOjppc1doaXRlc3BhY2UodGhlQ2hhcik7Cn0KIyAxMTI4ICJQbGF0Zm9ybVN1cHBvcnQv RE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIGJvb2wKaXNYTUxEaWdpdChYYWxhbkRPTUNoYXIg dGhlQ2hhcikKewogICAgICAgIHJldHVybiBYYWxhblhNTENoYXI6OmlzRGlnaXQodGhlQ2hhcik7 Cn0KIyAxMTQyICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIGJv b2wKaXNYTUxMZXR0ZXJPckRpZ2l0KFhhbGFuRE9NQ2hhciB0aGVDaGFyKQp7CiAgICAgICAgcmV0 dXJuIFhhbGFuWE1MQ2hhcjo6aXNEaWdpdCh0aGVDaGFyKSB8fAogICAgICAgICAgICAgICAgICAg ICAgICBYYWxhblhNTENoYXI6OmlzTGV0dGVyKHRoZUNoYXIpOwp9CiMgMTE2MiAiUGxhdGZvcm1T dXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiClhhbGFuRE9NU3RyaW5nCnN1YnN0cmluZygKICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVTdHJpbmcsCiAgICAg ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB0aGVTdGFydEluZGV4LAogICAgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdGhlRW5kSW5kZXggPSB1bnNpZ25lZCgtMSkpOwoj IDExODEgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgpYYWxhbkRPTVN0cmlu ZwpzdWJzdHJpbmcoCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5n JiB0aGVTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB0aGVTdGFy dEluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdGhlRW5kSW5kZXgg PSB1bnNpZ25lZCgtMSkpOwojIDExOTYgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIu aHBwIgpYYWxhbkRPTVN0cmluZwp0b0xvd2VyQ2FzZShjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0 cmluZyk7CiMgMTIwOCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiClhhbGFu RE9NU3RyaW5nCnRvTG93ZXJDYXNlKGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVTdHJpbmcpOwoj IDEyMjAgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgpYYWxhbkRPTVN0cmlu Zwp0b1VwcGVyQ2FzZShjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0cmluZyk7CiMgMTIzMiAiUGxh dGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiClhhbGFuRE9NU3RyaW5nCnRvVXBwZXJD YXNlKGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVTdHJpbmcpOwojIDEyNDUgIlBsYXRmb3JtU3Vw cG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgWGFsYW5ET01DaGFyCnRvTG93ZXJBU0NJ SShYYWxhbkRPTUNoYXIgdGhlQ2hhcikKewogICAgICAgIGlmICh0aGVDaGFyID49IFhhbGFuVW5p Y29kZTo6Y2hhckxldHRlcl9BICYmIHRoZUNoYXIgPD0gWGFsYW5Vbmljb2RlOjpjaGFyTGV0dGVy X1opCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIFhhbGFuRE9NQ2hhcih0aGVDaGFy IC0gKFhhbGFuVW5pY29kZTo6Y2hhckxldHRlcl9BIC0gWGFsYW5Vbmljb2RlOjpjaGFyTGV0dGVy X2EpKTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJl dHVybiB0aGVDaGFyOwogICAgICAgIH0KfQojIDEyNjggIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJp bmdIZWxwZXIuaHBwIgppbmxpbmUgWGFsYW5ET01DaGFyCnRvVXBwZXJBU0NJSShYYWxhbkRPTUNo YXIgdGhlQ2hhcikKewogICAgICAgIGlmICh0aGVDaGFyID49IFhhbGFuVW5pY29kZTo6Y2hhckxl dHRlcl9hICYmIHRoZUNoYXIgPD0gWGFsYW5Vbmljb2RlOjpjaGFyTGV0dGVyX3opCiAgICAgICAg ewogICAgICAgICAgICAgICAgcmV0dXJuIFhhbGFuRE9NQ2hhcih0aGVDaGFyICsgKFhhbGFuVW5p Y29kZTo6Y2hhckxldHRlcl9BIC0gWGFsYW5Vbmljb2RlOjpjaGFyTGV0dGVyX2EpKTsKICAgICAg ICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGVDaGFy OwogICAgICAgIH0KfQojIDEyOTEgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBw IgpYYWxhbkRPTVN0cmluZwp0b0xvd2VyQ2FzZUFTQ0lJKGNvbnN0IFhhbGFuRE9NQ2hhciogdGhl U3RyaW5nKTsKIyAxMzA0ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKWGFs YW5ET01TdHJpbmcKdG9Mb3dlckNhc2VBU0NJSShjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlU3Ry aW5nKTsKIyAxMzE3ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKWGFsYW5E T01TdHJpbmcKdG9VcHBlckNhc2VBU0NJSShjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVN0cmluZyk7 CiMgMTMzMCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiClhhbGFuRE9NU3Ry aW5nCnRvVXBwZXJDYXNlQVNDSUkoY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZVN0cmluZyk7CiMg MTM0NyAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmludApjb21wYXJlKAog ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDaGFyVmVjdG9yVHlwZSYgdGhlTEhTLAogICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBDaGFyVmVjdG9yVHlwZSYgdGhlUkhTKTsKIyAxMzY3 ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW50CmNvbXBhcmUoCiAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlTEhTLAogICAgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdGhlTEhTTGVuZ3RoLAogICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVJIUywKICAgICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgaW50IHRoZVJIU0xlbmd0aCk7CiMgMTM4NyAiUGxhdGZvcm1TdXBwb3J0L0RP TVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSBpbnQKY29tcGFyZSgKICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlUkhTKQp7CiAgICAgICAgcmV0dXJuIGNvbXBhcmUodGhl TEhTLCBsZW5ndGgodGhlTEhTKSwgdGhlUkhTLCBsZW5ndGgodGhlUkhTKSk7Cn0KIyAxNDA3ICJQ bGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIGludApjb21wYXJlKAog ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlTEhTLAogICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlUkhTKQp7CiAgICAg ICAgcmV0dXJuIGNvbXBhcmUodG9DaGFyQXJyYXkodGhlTEhTKSwgbGVuZ3RoKHRoZUxIUyksIHRv Q2hhckFycmF5KHRoZVJIUyksIGxlbmd0aCh0aGVSSFMpKTsKfQojIDE0MjggIlBsYXRmb3JtU3Vw cG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgaW50CmNvbXBhcmUoCiAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlTEhTLAogICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlUkhTKQp7CiAgICAgICAgcmV0dXJuIGNv bXBhcmUodGhlTEhTLCBsZW5ndGgodGhlTEhTKSwgdG9DaGFyQXJyYXkodGhlUkhTKSwgbGVuZ3Ro KHRoZVJIUykpOwp9CiMgMTQ0OSAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAi CmlubGluZSBpbnQKY29tcGFyZSgKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5E T01TdHJpbmcmIHRoZUxIUywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01D aGFyKiB0aGVSSFMpCnsKICAgICAgICByZXR1cm4gY29tcGFyZSh0b0NoYXJBcnJheSh0aGVMSFMp LCBsZW5ndGgodGhlTEhTKSwgdGhlUkhTLCBsZW5ndGgodGhlUkhTKSk7Cn0KIyAxNDczICJQbGF0 Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW50CmNvbXBhcmVJZ25vcmVDYXNlKAog ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZUxIUywKICAgICAg ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHRoZUxIU0xlbmd0aCwKICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVSSFMsCiAgICAgICAgICAgICAgICAg ICAgICAgIHVuc2lnbmVkIGludCB0aGVSSFNMZW5ndGgpOwojIDE0OTQgIlBsYXRmb3JtU3VwcG9y dC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgaW50CmNvbXBhcmVJZ25vcmVDYXNlKAogICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZUxIUywKICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVSSFMpCnsKICAgICAgICByZXR1 cm4gY29tcGFyZUlnbm9yZUNhc2UodGhlTEhTLCBsZW5ndGgodGhlTEhTKSwgdGhlUkhTLCBsZW5n dGgodGhlUkhTKSk7Cn0KIyAxNTE1ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhw cCIKaW5saW5lIGludApjb21wYXJlSWdub3JlQ2FzZSgKICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZUxIUywKICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgWGFsYW5ET01TdHJpbmcmIHRoZVJIUykKewogICAgICAgIHJldHVybiBjb21wYXJlSWdub3Jl Q2FzZSh0b0NoYXJBcnJheSh0aGVMSFMpLCBsZW5ndGgodGhlTEhTKSwgdG9DaGFyQXJyYXkodGhl UkhTKSwgbGVuZ3RoKHRoZVJIUykpOwp9CiMgMTUzNyAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmlu Z0hlbHBlci5ocHAiCmlubGluZSBpbnQKY29tcGFyZUlnbm9yZUNhc2UoCiAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlTEhTLAogICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlUkhTKQp7CiAgICAgICAgcmV0dXJuIGNvbXBh cmVJZ25vcmVDYXNlKHRoZUxIUywgbGVuZ3RoKHRoZUxIUyksIHRvQ2hhckFycmF5KHRoZVJIUyks IGxlbmd0aCh0aGVSSFMpKTsKfQojIDE1NTkgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxw ZXIuaHBwIgppbmxpbmUgaW50CmNvbXBhcmVJZ25vcmVDYXNlKAogICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVJIUykKewogICAgICAgIHJldHVybiBjb21wYXJlSWdu b3JlQ2FzZSh0b0NoYXJBcnJheSh0aGVMSFMpLCBsZW5ndGgodGhlTEhTKSwgdGhlUkhTLCBsZW5n dGgodGhlUkhTKSk7Cn0KIyAxNTgxICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhw cCIKaW50CmNvbXBhcmVJZ25vcmVDYXNlQVNDSUkoCiAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IFhhbGFuRE9NQ2hhciogdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l ZCBpbnQgdGhlTEhTTGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRP TUNoYXIqIHRoZVJIUywKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHRoZVJI U0xlbmd0aCk7CiMgMTYwMCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlu bGluZSBpbnQKY29tcGFyZUlnbm9yZUNhc2VBU0NJSSgKICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgWGFsYW5ET01DaGFyKiB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IFhhbGFuRE9NQ2hhciogdGhlUkhTKQp7CiAgICAgICAgcmV0dXJuIGNvbXBhcmVJZ25vcmVDYXNl QVNDSUkodGhlTEhTLCBsZW5ndGgodGhlTEhTKSwgdGhlUkhTLCBsZW5ndGgodGhlUkhTKSk7Cn0K IyAxNjIyICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIGludApj b21wYXJlSWdub3JlQ2FzZUFTQ0lJKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxh bkRPTVN0cmluZyYgdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRP TVN0cmluZyYgdGhlUkhTKQp7CiAgICAgICAgcmV0dXJuIGNvbXBhcmVJZ25vcmVDYXNlQVNDSUko dG9DaGFyQXJyYXkodGhlTEhTKSwgbGVuZ3RoKHRoZUxIUyksIHRvQ2hhckFycmF5KHRoZVJIUyks IGxlbmd0aCh0aGVSSFMpKTsKfQojIDE2NDUgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxw ZXIuaHBwIgppbmxpbmUgaW50CmNvbXBhcmVJZ25vcmVDYXNlQVNDSUkoCiAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVMSFMsCiAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlUkhTKQp7CiAgICAgICAgcmV0dXJuIGNvbXBh cmVJZ25vcmVDYXNlQVNDSUkodG9DaGFyQXJyYXkodGhlTEhTKSwgbGVuZ3RoKHRoZUxIUyksIHRo ZVJIUywgbGVuZ3RoKHRoZVJIUykpOwp9CiMgMTY2OCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmlu Z0hlbHBlci5ocHAiCmlubGluZSBpbnQKY29tcGFyZUlnbm9yZUNhc2VBU0NJSSgKICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVMSFMsCiAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVSSFMpCnsKICAgICAgICByZXR1cm4g Y29tcGFyZUlnbm9yZUNhc2VBU0NJSSh0aGVMSFMsIGxlbmd0aCh0aGVMSFMpLCB0b0NoYXJBcnJh eSh0aGVSSFMpLCBsZW5ndGgodGhlUkhTKSk7Cn0KIyAxNjg4ICJQbGF0Zm9ybVN1cHBvcnQvRE9N U3RyaW5nSGVscGVyLmhwcCIKaW50CmNvbGxhdGlvbkNvbXBhcmUoCiAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAg ICB1bnNpZ25lZCBpbnQgdGhlTEhTTGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBYYWxhbkRPTUNoYXIqIHRoZVJIUywKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg aW50IHRoZVJIU0xlbmd0aCk7CiMgMTcwNyAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBl ci5ocHAiCmlubGluZSBpbnQKY29sbGF0aW9uQ29tcGFyZSgKICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IFhhbGFuRE9NQ2hhciogdGhlUkhTKQp7CiAgICAgICAgcmV0dXJuIGNvbGxhdGlvbkNvbXBh cmUodGhlTEhTLCBsZW5ndGgodGhlTEhTKSwgdGhlUkhTLCBsZW5ndGgodGhlUkhTKSk7Cn0KIyAx NzI3ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIGludApjb2xs YXRpb25Db21wYXJlKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmlu ZyYgdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYg dGhlUkhTKQp7CiAgICAgICAgcmV0dXJuIGNvbGxhdGlvbkNvbXBhcmUodG9DaGFyQXJyYXkodGhl TEhTKSwgbGVuZ3RoKHRoZUxIUyksIHRvQ2hhckFycmF5KHRoZVJIUyksIGxlbmd0aCh0aGVSSFMp KTsKfQojIDE3NDUgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUg aW50CmNvbGxhdGlvbkNvbXBhcmUoCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFu RE9NQ2hhciogdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0 cmluZyYgdGhlUkhTKQp7CiAgICAgICAgcmV0dXJuIGNvbGxhdGlvbkNvbXBhcmUodGhlTEhTLCBs ZW5ndGgodGhlTEhTKSwgdG9DaGFyQXJyYXkodGhlUkhTKSwgbGVuZ3RoKHRoZVJIUykpOwp9CiMg MTc2MyAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSBpbnQKY29s bGF0aW9uQ29tcGFyZSgKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJp bmcmIHRoZUxIUywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0 aGVSSFMpCnsKICAgICAgICByZXR1cm4gY29sbGF0aW9uQ29tcGFyZSh0b0NoYXJBcnJheSh0aGVM SFMpLCBsZW5ndGgodGhlTEhTKSwgdGhlUkhTLCBsZW5ndGgodGhlUkhTKSk7Cn0KIyAxNzgxICJQ bGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKYm9vbAplcXVhbHMoCiAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlTEhTLAogICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVJIUywKICAgICAgICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgaW50IHRoZUxlbmd0aCk7CiMgMTc5NiAiUGxhdGZvcm1TdXBwb3J0L0RP TVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSBib29sCmVxdWFscygKICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlUkhTKQp7CiAgICAgICAgY29uc3QgdW5zaWduZWQgaW50 IHRoZUxIU0xlbmd0aCA9IGxlbmd0aCh0aGVMSFMpOwoKICAgICAgICByZXR1cm4gdGhlTEhTTGVu Z3RoICE9IGxlbmd0aCh0aGVSSFMpID8gZmFsc2UgOiBlcXVhbHModGhlTEhTLCB0aGVSSFMsIHRo ZUxIU0xlbmd0aCk7Cn0KIyAxODE1ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhw cCIKaW5saW5lIGJvb2wKZXF1YWxzKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxh bkRPTVN0cmluZyYgdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRP TVN0cmluZyYgdGhlUkhTKQp7CiAgICAgICAgcmV0dXJuIHRoZUxIUyA9PSB0aGVSSFM7Cn0KIyAx ODMyICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIGJvb2wKZXF1 YWxzKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZUxIUywK ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZVJIUykKewog ICAgICAgICgodm9pZCkgKCh0aGVMSFMgIT0gMCkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJ0aGVM SFMgIT0gMCIsICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIsIDE4MzcsIF9f UFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwoKCiAgICAgICAgcmV0dXJuIHRoZVJIUyA9PSB0aGVM SFM7Cn0KIyAxODUyICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5l IGJvb2wKZXF1YWxzKGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVMSFMsCiAgICAgICAgICAgY29u c3QgWGFsYW5ET01DaGFyKiB0aGVSSFMpCnsKICAgICAgICByZXR1cm4gZXF1YWxzKHRoZVJIUywg dGhlTEhTKTsKfQojIDE4NjggIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgpp bmxpbmUgYm9vbAplcXVhbHMoY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZUxIUywKICAgICAgICAg ICBjb25zdCBjaGFyKiB0aGVSSFMpCnsKICAgICAgICAoKHZvaWQpICgodGhlUkhTICE9IDApID8g MCA6IChfX2Fzc2VydF9mYWlsICgidGhlUkhTICE9IDAiLCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0 cmluZ0hlbHBlci5ocHAiLCAxODcyLCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKCiAgICAg ICAgY29uc3QgdW5zaWduZWQgaW50IHRoZVJIU0xlbmd0aCA9IGxlbmd0aCh0aGVSSFMpOwoKICAg ICAgICBpZiAodGhlUkhTTGVuZ3RoICE9IGxlbmd0aCh0aGVMSFMpKQogICAgICAgIHsKICAgICAg ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsK ICAgICAgICAgICAgICAgIHJldHVybiB0aGVMSFMgPT0gWGFsYW5ET01TdHJpbmcodGhlUkhTLCB0 aGVSSFNMZW5ndGgpOwogICAgICAgIH0KfQojIDE4OTUgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJp bmdIZWxwZXIuaHBwIgppbmxpbmUgYm9vbAplcXVhbHMoY29uc3QgY2hhciogdGhlTEhTLAogICAg ICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVSSFMpCnsKICAgICAgICByZXR1cm4gZXF1 YWxzKHRoZVJIUywgdGhlTEhTKTsKfQojIDE5MTEgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdI ZWxwZXIuaHBwIgppbmxpbmUgYm9vbAplcXVhbHMoY29uc3QgWGFsYW5ET01DaGFyKiB0aGVMSFMs CiAgICAgICAgICAgY29uc3QgY2hhciogdGhlUkhTKQp7CiAgICAgICAgKCh2b2lkKSAoKHRoZUxI UyAhPSAwKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoInRoZUxIUyAhPSAwIiwgIlBsYXRmb3JtU3Vw cG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIiwgMTkxNSwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDAp KSk7CiAgICAgICAgKCh2b2lkKSAoKHRoZVJIUyAhPSAwKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAo InRoZVJIUyAhPSAwIiwgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIiwgMTkx NiwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CgogICAgICAgIGNvbnN0IHVuc2lnbmVkIGlu dCB0aGVSSFNMZW5ndGggPSBsZW5ndGgodGhlUkhTKTsKCiAgICAgICAgaWYgKHRoZVJIU0xlbmd0 aCAhPSBsZW5ndGgodGhlTEhTKSkKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFs c2U7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1 cm4gZXF1YWxzKFhhbGFuRE9NU3RyaW5nKHRoZVJIUywgdGhlUkhTTGVuZ3RoKSwgdGhlTEhTKTsK ICAgICAgICB9Cn0KIyAxOTM5ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIK aW5saW5lIGJvb2wKZXF1YWxzKGNvbnN0IGNoYXIqIHRoZUxIUywKICAgICAgICAgICBjb25zdCBY YWxhbkRPTUNoYXIqIHRoZVJIUykKewogICAgICAgIHJldHVybiBlcXVhbHModGhlUkhTLCB0aGVM SFMpOwp9CiMgMTk1NiAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmJvb2wK ZXF1YWxzSWdub3JlQ2FzZSgKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01D aGFyKiB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciog dGhlUkhTLAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdGhlTGVuZ3RoKTsK IyAxOTcxICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIGJvb2wK ZXF1YWxzSWdub3JlQ2FzZSgKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01D aGFyKiB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciog dGhlUkhTKQp7CiAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHRoZUxlbmd0aCA9IGxlbmd0aCh0 aGVMSFMpOwoKICAgICAgICByZXR1cm4gdGhlTGVuZ3RoICE9IGxlbmd0aCh0aGVSSFMpID8gZmFs c2UgOiBlcXVhbHNJZ25vcmVDYXNlKHRoZUxIUywgdGhlUkhTLCB0aGVMZW5ndGgpOwp9CiMgMTk5 MCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSBib29sCmVxdWFs c0lnbm9yZUNhc2UoCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5n JiB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0 aGVSSFMpCnsKICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgdGhlTEhTTGVuZ3RoID0gbGVuZ3Ro KHRoZUxIUyk7CgogICAgICAgIHJldHVybiB0aGVMSFNMZW5ndGggIT0gbGVuZ3RoKHRoZVJIUykg PyBmYWxzZSA6CiAgICAgICAgICAgICAgICBlcXVhbHNJZ25vcmVDYXNlKHRvQ2hhckFycmF5KHRo ZUxIUyksIHRvQ2hhckFycmF5KHRoZVJIUyksIHRoZUxIU0xlbmd0aCk7Cn0KIyAyMDEwICJQbGF0 Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIGJvb2wKZXF1YWxzSWdub3Jl Q2FzZSgKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVMSFMs CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVSSFMpCnsK ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgdGhlUkhTTGVuZ3RoID0gbGVuZ3RoKHRoZVJIUyk7 CgogICAgICAgIHJldHVybiB0aGVSSFNMZW5ndGggIT0gbGVuZ3RoKHRoZUxIUykgPyBmYWxzZSA6 CiAgICAgICAgICAgICAgICBlcXVhbHNJZ25vcmVDYXNlKHRoZUxIUywgdG9DaGFyQXJyYXkodGhl UkhTKSwgdGhlUkhTTGVuZ3RoKTsKfQojIDIwMzAgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdI ZWxwZXIuaHBwIgppbmxpbmUgYm9vbAplcXVhbHNJZ25vcmVDYXNlKAogICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlTEhTLAogICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVJIUykKewogICAgICAgIHJldHVybiBlcXVhbHNJ Z25vcmVDYXNlKHRoZVJIUywgdGhlTEhTKTsKfQojIDIwNDggIlBsYXRmb3JtU3VwcG9ydC9ET01T dHJpbmdIZWxwZXIuaHBwIgpib29sCmVxdWFsc0lnbm9yZUNhc2VBU0NJSSgKICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVMSFMsCiAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlUkhTLAogICAgICAgICAgICAgICAgICAgICAg ICB1bnNpZ25lZCBpbnQgdGhlTGVuZ3RoKTsKIyAyMDY0ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3Ry aW5nSGVscGVyLmhwcCIKaW5saW5lIGJvb2wKZXF1YWxzSWdub3JlQ2FzZUFTQ0lJKAogICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZUxIUywKICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVSSFMpCnsKICAgICAgICBjb25zdCB1 bnNpZ25lZCBpbnQgdGhlTGVuZ3RoID0gbGVuZ3RoKHRoZUxIUyk7CgogICAgICAgIHJldHVybiB0 aGVMZW5ndGggIT0gbGVuZ3RoKHRoZVJIUykgPyBmYWxzZSA6CiAgICAgICAgICAgICAgICBlcXVh bHNJZ25vcmVDYXNlQVNDSUkodGhlTEhTLCB0aGVSSFMsIHRoZUxlbmd0aCk7Cn0KIyAyMDg1ICJQ bGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIGJvb2wKZXF1YWxzSWdu b3JlQ2FzZUFTQ0lJKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmlu ZyYgdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYg dGhlUkhTKQp7CiAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHRoZUxlbmd0aCA9IGxlbmd0aCh0 aGVMSFMpOwoKICAgICAgICByZXR1cm4gdGhlTGVuZ3RoICE9IGxlbmd0aCh0aGVSSFMpID8gZmFs c2UgOgogICAgICAgICAgICAgICAgZXF1YWxzSWdub3JlQ2FzZUFTQ0lJKHRvQ2hhckFycmF5KHRo ZUxIUyksIHRvQ2hhckFycmF5KHRoZVJIUyksIHRoZUxlbmd0aCk7Cn0KIyAyMTA2ICJQbGF0Zm9y bVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIGJvb2wKZXF1YWxzSWdub3JlQ2Fz ZUFTQ0lJKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZUxI UywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZVJIUykK ewogICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCB0aGVSSFNMZW5ndGggPSBsZW5ndGgodGhlUkhT KTsKCiAgICAgICAgcmV0dXJuIHRoZVJIU0xlbmd0aCAhPSBsZW5ndGgodGhlTEhTKSA/IGZhbHNl IDoKICAgICAgICAgICAgICAgIGVxdWFsc0lnbm9yZUNhc2VBU0NJSSh0aGVMSFMsIHRvQ2hhckFy cmF5KHRoZVJIUyksIHRoZVJIU0xlbmd0aCk7Cn0KIyAyMTI3ICJQbGF0Zm9ybVN1cHBvcnQvRE9N U3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIGJvb2wKZXF1YWxzSWdub3JlQ2FzZUFTQ0lJKAogICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhlTEhTLAogICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIqIHRoZVJIUykKewogICAgICAgIHJl dHVybiBlcXVhbHNJZ25vcmVDYXNlQVNDSUkodGhlUkhTLCB0aGVMSFMpOwp9CiMgMjE0NiAiUGxh dGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSBib29sCm9wZXJhdG9yPCgK ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ2hhclZlY3RvclR5cGUmIHRoZUxIUywKICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ2hhclZlY3RvclR5cGUmIHRoZVJIUykKewogICAg ICAgIHJldHVybiBjb21wYXJlKHRoZUxIUywgdGhlUkhTKSA8IDAgPyB0cnVlIDogZmFsc2U7Cn0K IyAyMTY1ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIGJvb2wK b3BlcmF0b3I8KAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYg dGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTVN0cmluZyYgdGhl UkhTKQp7CiAgICAgICAgcmV0dXJuIGNvbXBhcmUodGhlTEhTLCB0aGVSSFMpIDwgMCA/IHRydWUg OiBmYWxzZTsKfQojIDIxODMgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgpp bmxpbmUgWGFsYW5ET01TdHJpbmcmCmFzc2lnbigKICAgICAgICAgICAgICAgICAgICAgICAgWGFs YW5ET01TdHJpbmcmIHRoZVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFs YW5ET01TdHJpbmcmIHRoZVN0cmluZ1RvQXNzaWduKQp7CiAgICAgICAgdGhlU3RyaW5nID0gdGhl U3RyaW5nVG9Bc3NpZ247CgogICAgICAgIHJldHVybiB0aGVTdHJpbmc7Cn0KIyAyMjAzICJQbGF0 Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIFhhbGFuRE9NU3RyaW5nJgph c3NpZ24oCiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFuRE9NU3RyaW5nJiB0aGVTdHJpbmcs CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciogdGhlU3RyaW5nVG9B c3NpZ24sCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB0aGVTdHJpbmdUb0Fz c2lnbkxlbmd0aCA9IHVuc2lnbmVkKC0xKSkKewogICAgICAgIGlmICh0aGVTdHJpbmdUb0Fzc2ln bkxlbmd0aCA9PSB1bnNpZ25lZCgtMSkpCiAgICAgICAgewogICAgICAgICAgICAgICAgdGhlU3Ry aW5nLmFzc2lnbih0aGVTdHJpbmdUb0Fzc2lnbik7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAg ICAgICB7CiAgICAgICAgICAgICAgICB0aGVTdHJpbmcuYXNzaWduKHRoZVN0cmluZ1RvQXNzaWdu LCB0aGVTdHJpbmdUb0Fzc2lnbkxlbmd0aCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdGhl U3RyaW5nOwp9CiMgMjIzMCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlu bGluZSBYYWxhbkRPTVN0cmluZyYKYXBwZW5kKAogICAgICAgICAgICAgICAgICAgICAgICBYYWxh bkRPTVN0cmluZyYgdGhlU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxh bkRPTVN0cmluZyYgdGhlU3RyaW5nVG9BcHBlbmQpCnsKICAgICAgICB0aGVTdHJpbmcuYXBwZW5k KHRoZVN0cmluZ1RvQXBwZW5kKTsKCiAgICAgICAgcmV0dXJuIHRoZVN0cmluZzsKfQojIDIyNTAg IlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgWGFsYW5ET01TdHJp bmcmCmFwcGVuZCgKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5ET01TdHJpbmcmIHRoZVN0 cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVTdHJp bmdUb0FwcGVuZCwKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHRoZVN0cmlu Z1RvQXBwZW5kTGVuZ3RoID0gdW5zaWduZWQoLTEpKQp7CiAgICAgICAgKCh2b2lkKSAoKHRoZVN0 cmluZ1RvQXBwZW5kICE9IDApID8gMCA6IChfX2Fzc2VydF9mYWlsICgidGhlU3RyaW5nVG9BcHBl bmQgIT0gMCIsICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIsIDIyNTYsIF9f UFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwoKICAgICAgICBpZiAodGhlU3RyaW5nVG9BcHBlbmRM ZW5ndGggPT0gdW5zaWduZWQoLTEpKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHRoZVN0cmlu Zy5hcHBlbmQodGhlU3RyaW5nVG9BcHBlbmQpOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAg ICAgewogICAgICAgICAgICAgICAgdGhlU3RyaW5nLmFwcGVuZCh0aGVTdHJpbmdUb0FwcGVuZCwg dGhlU3RyaW5nVG9BcHBlbmRMZW5ndGgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRoZVN0 cmluZzsKfQojIDIyODAgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxp bmUgWGFsYW5ET01TdHJpbmcmCmFwcGVuZCgKICAgICAgICAgICAgICAgICAgICAgICAgWGFsYW5E T01TdHJpbmcmIHRoZVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog dGhlU3RyaW5nVG9BcHBlbmQsCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB0 aGVTdHJpbmdUb0FwcGVuZExlbmd0aCA9IHVuc2lnbmVkKC0xKSkKewogICAgICAgIHRoZVN0cmlu Zy5hcHBlbmQoVHJhbnNjb2RlRnJvbUxvY2FsQ29kZVBhZ2UodGhlU3RyaW5nVG9BcHBlbmQsIHRo ZVN0cmluZ1RvQXBwZW5kTGVuZ3RoKSk7CgogICAgICAgIHJldHVybiB0aGVTdHJpbmc7Cn0KIyAy MzAwICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIFhhbGFuRE9N U3RyaW5nJgphcHBlbmQoCiAgICAgICAgICAgICAgICAgICAgICAgIFhhbGFuRE9NU3RyaW5nJiB0 aGVTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFuRE9NQ2hhciB0aGVD aGFyVG9BcHBlbmQpCnsKICAgICAgICB0aGVTdHJpbmcuYXBwZW5kKDEsIHRoZUNoYXJUb0FwcGVu ZCk7CgogICAgICAgIHJldHVybiB0aGVTdHJpbmc7Cn0KIyAyMzE5ICJQbGF0Zm9ybVN1cHBvcnQv RE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIFhhbGFuRE9NU3RyaW5nJgphcHBlbmQoCiAgICAg ICAgICAgICAgICAgICAgICAgIFhhbGFuRE9NU3RyaW5nJiB0aGVTdHJpbmcsCiAgICAgICAgICAg ICAgICAgICAgICAgIGNoYXIgdGhlQ2hhclRvQXBwZW5kKQp7CgogICAgICAgIGNoYXIgdGhlVGVt cEJ1ZmZlcltdID0geyB0aGVDaGFyVG9BcHBlbmQsICdcMCcgfTsKCiAgICAgICAgcmV0dXJuIGFw cGVuZCh0aGVTdHJpbmcsIHRoZVRlbXBCdWZmZXIpOwp9CiMgMjM0MCAiUGxhdGZvcm1TdXBwb3J0 L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSBYYWxhbkRPTVN0cmluZyYKaW5zZXJ0KAogICAg ICAgICAgICAgICAgICAgICAgICBYYWxhbkRPTVN0cmluZyYgdGhlU3RyaW5nLAogICAgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdGhlUG9zaXRpb24sCiAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVTdHJpbmdUb0luc2VydCkKewogICAgICAg IHRoZVN0cmluZy5pbnNlcnQodGhlUG9zaXRpb24sIHRoZVN0cmluZ1RvSW5zZXJ0KTsKCiAgICAg ICAgcmV0dXJuIHRoZVN0cmluZzsKfQojIDIzNjEgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdI ZWxwZXIuaHBwIgppbmxpbmUgWGFsYW5ET01TdHJpbmcmCmluc2VydCgKICAgICAgICAgICAgICAg ICAgICAgICAgWGFsYW5ET01TdHJpbmcmIHRoZVN0cmluZywKICAgICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgaW50IHRoZVBvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBYYWxhbkRPTUNoYXIqIHRoZVN0cmluZ1RvSW5zZXJ0KQp7CiAgICAgICAgdGhlU3RyaW5nLmlu c2VydCh0aGVQb3NpdGlvbiwgdGhlU3RyaW5nVG9JbnNlcnQpOwoKICAgICAgICByZXR1cm4gdGhl U3RyaW5nOwp9CiMgMjM4MCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiClhh bGFuRE9NU3RyaW5nCnRyaW0oY29uc3QgWGFsYW5ET01TdHJpbmcmIHRoZVN0cmluZyk7CiMgMjM5 MCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSB2b2lkCmNsZWFy KFhhbGFuRE9NU3RyaW5nJiB0aGVTdHJpbmcpCnsKICAgICAgICB0aGVTdHJpbmcuY2xlYXIoKTsK fQojIDI0MDMgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgppbmxpbmUgdm9p ZAplcmFzZShYYWxhbkRPTVN0cmluZyYgdGhlU3RyaW5nKQp7CiAgICAgICAgdGhlU3RyaW5nLmVy YXNlKCk7Cn0KIyAyNDE3ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5s aW5lIHZvaWQKcmVsZWFzZU1lbW9yeShYYWxhbkRPTVN0cmluZyYgdGhlU3RyaW5nKQp7CiAgICAg ICAgWGFsYW5ET01TdHJpbmcoKS5zd2FwKHRoZVN0cmluZyk7Cn0KCgoKdm9pZApDb3B5V2lkZVN0 cmluZ1RvVmVjdG9yKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIq IHRoZVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhclZlY3RvclR5cGUmIHRoZVZl Y3Rvcik7CgoKCnZvaWQKQ29weVN0cmluZ1RvVmVjdG9yKAogICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBjaGFyKiB0aGVTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYXJWZWN0 b3JUeXBlJiB0aGVWZWN0b3IpOwojIDI0NDcgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxw ZXIuaHBwIgpYYWxhbkRPTUNoYXJWZWN0b3JUeXBlCk1ha2VYYWxhbkRPTUNoYXJWZWN0b3IoCiAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGRhdGEsCiAgICAgICAgICAgICAgICAg ICAgICAgIGJvb2wgZlRyYW5zY29kZSA9IHRydWUpOwojIDI0NjEgIlBsYXRmb3JtU3VwcG9ydC9E T01TdHJpbmdIZWxwZXIuaHBwIgpYYWxhbkRPTUNoYXJWZWN0b3JUeXBlCk1ha2VYYWxhbkRPTUNo YXJWZWN0b3IoY29uc3QgWGFsYW5ET01DaGFyKiBkYXRhKTsKIyAyNDczICJQbGF0Zm9ybVN1cHBv cnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKaW5saW5lIFhhbGFuRE9NQ2hhclZlY3RvclR5cGUKTWFr ZVhhbGFuRE9NQ2hhclZlY3Rvcihjb25zdCBYYWxhbkRPTVN0cmluZyYgZGF0YSkKewogICAgICAg IHJldHVybiBNYWtlWGFsYW5ET01DaGFyVmVjdG9yKGNfd3N0cihkYXRhKSk7Cn0KCgoKCgoKc3Ry dWN0IGNfd3N0cl9mdW5jdG9yIDogcHVibGljIHN0ZDo6dW5hcnlfZnVuY3Rpb248WGFsYW5ET01T dHJpbmcsIGNvbnN0IFhhbGFuRE9NQ2hhcio+Cgp7CiAgICAgICAgcmVzdWx0X3R5cGUKICAgICAg ICBvcGVyYXRvcigpIChjb25zdCBhcmd1bWVudF90eXBlJiB0aGVTdHJpbmcpIGNvbnN0CiAgICAg ICAgewogICAgICAgICAgICAgICAgcmV0dXJuIGNfd3N0cih0aGVTdHJpbmcpOwogICAgICAgIH0K fTsKIyAyNTA1ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKc3RydWN0IERP TVN0cmluZ0hhc2hGdW5jdGlvbiA6IHB1YmxpYyBzdGQ6OnVuYXJ5X2Z1bmN0aW9uPGNvbnN0IFhh bGFuRE9NU3RyaW5nJiwgc2l6ZV90PgoKewogICAgICAgIHJlc3VsdF90eXBlCiAgICAgICAgb3Bl cmF0b3IoKSAoYXJndW1lbnRfdHlwZSB0aGVLZXkpIGNvbnN0CiAgICAgICAgewogICAgICAgICAg ICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVSYXdCdWZmZXIgPSBjX3dzdHIodGhlS2V5KTsK CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHRoZUhhc2hWYWx1ZSA9IDBMOwoKICAgICAg ICAgICAgICAgIGlmICh0aGVSYXdCdWZmZXIgIT0gMCkKICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICAgICAgICAgd2hpbGUgKCp0aGVSYXdCdWZmZXIpCiAgICAgICAgICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVIYXNoVmFsdWUgPSA1 ICogdGhlSGFzaFZhbHVlICsgKnRoZVJhd0J1ZmZlcjsKCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGhlUmF3QnVmZmVyKys7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0X3R5cGUodGhlSGFzaFZh bHVlKyspOwogICAgICAgIH0KfTsKIyAyNTQxICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVs cGVyLmhwcCIKc3RydWN0IERPTVN0cmluZ0VxdWFsc0Z1bmN0aW9uIDogcHVibGljIHN0ZDo6Ymlu YXJ5X2Z1bmN0aW9uPGNvbnN0IFhhbGFuRE9NU3RyaW5nJiwgY29uc3QgWGFsYW5ET01TdHJpbmcm LCBib29sPgoKewogICAgICAgIHJlc3VsdF90eXBlCiAgICAgICAgb3BlcmF0b3IoKSAoZmlyc3Rf YXJndW1lbnRfdHlwZSB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vj b25kX2FyZ3VtZW50X3R5cGUgdGhlUkhTKSBjb25zdAogICAgICAgIHsKICAgICAgICAgICAgICAg IHJldHVybiBlcXVhbHModGhlTEhTLCB0aGVSSFMpOwogICAgICAgIH0KfTsKIyAyNTY0ICJQbGF0 Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKc3RydWN0IERPTVN0cmluZ0VxdWFsc0ln bm9yZUNhc2VGdW5jdGlvbiA6IHB1YmxpYyBzdGQ6OmJpbmFyeV9mdW5jdGlvbjxjb25zdCBYYWxh bkRPTVN0cmluZyYsIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiwgYm9vbD4KCnsKICAgICAgICByZXN1 bHRfdHlwZQogICAgICAgIG9wZXJhdG9yKCkgKGZpcnN0X2FyZ3VtZW50X3R5cGUgdGhlTEhTLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZF9hcmd1bWVudF90eXBlIHRoZVJI UykgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gZXF1YWxzSWdub3JlQ2Fz ZSh0aGVMSFMsIHRoZVJIUyk7CiAgICAgICAgfQp9OwojIDI1ODcgIlBsYXRmb3JtU3VwcG9ydC9E T01TdHJpbmdIZWxwZXIuaHBwIgpzdHJ1Y3QgRE9NU3RyaW5nTm90RXF1YWxzRnVuY3Rpb24gOiBw dWJsaWMgc3RkOjpiaW5hcnlfZnVuY3Rpb248Y29uc3QgWGFsYW5ET01TdHJpbmcmLCBjb25zdCBY YWxhbkRPTVN0cmluZyYsIGJvb2w+Cgp7CiAgICAgICAgcmVzdWx0X3R5cGUKICAgICAgICBvcGVy YXRvcigpIChmaXJzdF9hcmd1bWVudF90eXBlIHRoZUxIUywKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzZWNvbmRfYXJndW1lbnRfdHlwZSB0aGVSSFMpIGNvbnN0CiAgICAgICAgewog ICAgICAgICAgICAgICAgcmV0dXJuICFlcXVhbHModGhlTEhTLCB0aGVSSFMpOwogICAgICAgIH0K fTsKIyAyNjEwICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKc3RydWN0IERP TVN0cmluZ0xlc3NUaGFuRnVuY3Rpb24gOiBwdWJsaWMgc3RkOjpiaW5hcnlfZnVuY3Rpb248Y29u c3QgWGFsYW5ET01TdHJpbmcmLCBjb25zdCBYYWxhbkRPTVN0cmluZyYsIGJvb2w+Cgp7CiAgICAg ICAgcmVzdWx0X3R5cGUKICAgICAgICBvcGVyYXRvcigpIChmaXJzdF9hcmd1bWVudF90eXBlIHRo ZUxIUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRfYXJndW1lbnRfdHlw ZSB0aGVSSFMpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmUo dGhlTEhTLCB0aGVSSFMpIDwgMCA/IHRydWUgOiBmYWxzZTsKICAgICAgICB9Cn07CiMgMjYzMyAi UGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCnN0cnVjdCBET01TdHJpbmdMZXNz VGhhbklnbm9yZUNhc2VGdW5jdGlvbiA6IHB1YmxpYyBzdGQ6OmJpbmFyeV9mdW5jdGlvbjxjb25z dCBYYWxhbkRPTVN0cmluZyYsIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiwgYm9vbD4KCnsKICAgICAg ICByZXN1bHRfdHlwZQogICAgICAgIG9wZXJhdG9yKCkgKGZpcnN0X2FyZ3VtZW50X3R5cGUgdGhl TEhTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZF9hcmd1bWVudF90eXBl IHRoZVJIUykgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gY29tcGFyZUln bm9yZUNhc2UodGhlTEhTLCB0aGVSSFMpIDwgMCA/IHRydWUgOiBmYWxzZTsKICAgICAgICB9Cn07 CiMgMjY1NiAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCnN0cnVjdCBET01T dHJpbmdMZXNzVGhhbklnbm9yZUNhc2VBU0NJSUZ1bmN0aW9uIDogcHVibGljIHN0ZDo6YmluYXJ5 X2Z1bmN0aW9uPGNvbnN0IFhhbGFuRE9NU3RyaW5nJiwgY29uc3QgWGFsYW5ET01TdHJpbmcmLCBi b29sPgoKewogICAgICAgIHJlc3VsdF90eXBlCiAgICAgICAgb3BlcmF0b3IoKSAoZmlyc3RfYXJn dW1lbnRfdHlwZSB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25k X2FyZ3VtZW50X3R5cGUgdGhlUkhTKSBjb25zdAogICAgICAgIHsKICAgICAgICAgICAgICAgIHJl dHVybiBjb21wYXJlSWdub3JlQ2FzZSh0aGVMSFMsIHRoZVJIUykgPCAwID8gdHJ1ZSA6IGZhbHNl OwogICAgICAgIH0KfTsKIyAyNjc5ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhw cCIKc3RydWN0IERPTVN0cmluZ0xlc3NUaGFuT3JFcXVhbEZ1bmN0aW9uIDogcHVibGljIHN0ZDo6 YmluYXJ5X2Z1bmN0aW9uPGNvbnN0IFhhbGFuRE9NU3RyaW5nJiwgY29uc3QgWGFsYW5ET01TdHJp bmcmLCBib29sPgoKewogICAgICAgIHJlc3VsdF90eXBlCiAgICAgICAgb3BlcmF0b3IoKSAoZmly c3RfYXJndW1lbnRfdHlwZSB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2Vjb25kX2FyZ3VtZW50X3R5cGUgdGhlUkhTKSBjb25zdAogICAgICAgIHsKICAgICAgICAgICAg ICAgIHJldHVybiBjb21wYXJlKHRoZUxIUywgdGhlUkhTKSA8PSAwID8gdHJ1ZSA6IGZhbHNlOwog ICAgICAgIH0KfTsKIyAyNzAyICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIK c3RydWN0IERPTVN0cmluZ0dyZWF0ZXJUaGFuRnVuY3Rpb24gOiBwdWJsaWMgc3RkOjpiaW5hcnlf ZnVuY3Rpb248Y29uc3QgWGFsYW5ET01TdHJpbmcmLCBjb25zdCBYYWxhbkRPTVN0cmluZyYsIGJv b2w+Cgp7CiAgICAgICAgcmVzdWx0X3R5cGUKICAgICAgICBvcGVyYXRvcigpIChmaXJzdF9hcmd1 bWVudF90eXBlIHRoZUxIUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRf YXJndW1lbnRfdHlwZSB0aGVSSFMpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0 dXJuIGNvbXBhcmUodGhlTEhTLCB0aGVSSFMpID4gMCA/IHRydWUgOiBmYWxzZTsKICAgICAgICB9 Cn07CiMgMjcyNSAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCnN0cnVjdCBE T01TdHJpbmdHcmVhdGVyVGhhbk9yRXF1YWxGdW5jdGlvbiA6IHB1YmxpYyBzdGQ6OmJpbmFyeV9m dW5jdGlvbjxjb25zdCBYYWxhbkRPTVN0cmluZyYsIGNvbnN0IFhhbGFuRE9NU3RyaW5nJiwgYm9v bD4KCnsKICAgICAgICByZXN1bHRfdHlwZQogICAgICAgIG9wZXJhdG9yKCkgKGZpcnN0X2FyZ3Vt ZW50X3R5cGUgdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZF9h cmd1bWVudF90eXBlIHRoZVJIUykgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1 cm4gY29tcGFyZSh0aGVMSFMsIHRoZVJIUykgPj0gMCA/IHRydWUgOiBmYWxzZTsKICAgICAgICB9 Cn07CiMgMjc0NiAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAiCnN0cnVjdCBs ZXNzX25vX2Nhc2VfYXNjaWlfd2lkZV9zdHJpbmcgOiBwdWJsaWMgc3RkOjpiaW5hcnlfZnVuY3Rp b248Y29uc3QgWGFsYW5ET01DaGFyKiwgY29uc3QgWGFsYW5ET01DaGFyKiwgYm9vbD4KCnsKIyAy NzU3ICJQbGF0Zm9ybVN1cHBvcnQvRE9NU3RyaW5nSGVscGVyLmhwcCIKICAgICAgICByZXN1bHRf dHlwZQogICAgICAgIG9wZXJhdG9yKCkoCiAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0X2Fy Z3VtZW50X3R5cGUgdGhlTEhTLAogICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRfYXJndW1l bnRfdHlwZSB0aGVSSFMpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIGNv bXBhcmVJZ25vcmVDYXNlQVNDSUkodGhlTEhTLCB0aGVSSFMpIDwgMCA/IHRydWUgOiBmYWxzZTsK ICAgICAgICB9Cn07CiMgMjc3NCAiUGxhdGZvcm1TdXBwb3J0L0RPTVN0cmluZ0hlbHBlci5ocHAi CmJvb2wKaXNYTUxXaGl0ZXNwYWNlKGNvbnN0IFhhbGFuRE9NU3RyaW5nJiBzdHJpbmcpOwojIDI3 ODcgIlBsYXRmb3JtU3VwcG9ydC9ET01TdHJpbmdIZWxwZXIuaHBwIgpib29sCmlzWE1MV2hpdGVz cGFjZSgKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyIGNoW10sCiAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzdGFydCwKICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgaW50IGxlbmd0aCk7CiMgMjgwMSAiUGxhdGZvcm1TdXBwb3J0L0RP TVN0cmluZ0hlbHBlci5ocHAiCmlubGluZSBib29sCmlzWE1MV2hpdGVzcGFjZShjb25zdCBYYWxh bkRPTUNoYXIqIHRoZVN0cmluZykKewogICAgICAgICgodm9pZCkgKCh0aGVTdHJpbmcgIT0gMCkg PyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJ0aGVTdHJpbmcgIT0gMCIsICJQbGF0Zm9ybVN1cHBvcnQv RE9NU3RyaW5nSGVscGVyLmhwcCIsIDI4MDQsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwoK ICAgICAgICByZXR1cm4gaXNYTUxXaGl0ZXNwYWNlKHRoZVN0cmluZywgMCwgbGVuZ3RoKHRoZVN0 cmluZykpOwp9CiMgNjYgIlBsYXRmb3JtU3VwcG9ydC9Eb3VibGVTdXBwb3J0LmNwcCIgMgojIDEg IlBsYXRmb3JtU3VwcG9ydC9YYWxhblVuaWNvZGUuaHBwIiAxCiMgNjcgIlBsYXRmb3JtU3VwcG9y dC9Eb3VibGVTdXBwb3J0LmNwcCIgMgoKCgpjb25zdCBkb3VibGUgRG91YmxlU3VwcG9ydDo6c19O YU4gPSBzcXJ0KC0yLjAxKTsKY29uc3QgZG91YmxlIERvdWJsZVN1cHBvcnQ6OnNfcG9zaXRpdmVJ bmZpbml0eSA9IChfX2V4dGVuc2lvbl9fICgodW5pb24geyB1bnNpZ25lZCBjaGFyIF9fY1s4XTsg ZG91YmxlIF9fZDsgfSkgeyBfX2M6IHsgMCwgMCwgMCwgMCwgMCwgMCwgMHhmMCwgMHg3ZiB9IH0p Ll9fZCk7CmNvbnN0IGRvdWJsZSBEb3VibGVTdXBwb3J0OjpzX25lZ2F0aXZlSW5maW5pdHkgPSAt RG91YmxlU3VwcG9ydDo6c19wb3NpdGl2ZUluZmluaXR5Owpjb25zdCBkb3VibGUgRG91YmxlU3Vw cG9ydDo6c19wb3NpdGl2ZVplcm8gPSAwLjA7CgoKY29uc3QgZG91YmxlIERvdWJsZVN1cHBvcnQ6 OnNfbmVnYXRpdmVaZXJvID0gLURvdWJsZVN1cHBvcnQ6OnNfcG9zaXRpdmVaZXJvOwojIDg3ICJQ bGF0Zm9ybVN1cHBvcnQvRG91YmxlU3VwcG9ydC5jcHAiCmNvbnN0IHVuc2lnbmVkIGxvbmcqIERv dWJsZVN1cHBvcnQ6OnNfTmFORmlyc3REV09SRCA9CgoKCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGxvbmcqPigm c19OYU4pOwoKCmNvbnN0IHVuc2lnbmVkIGxvbmcqIERvdWJsZVN1cHBvcnQ6OnNfTmFOU2Vjb25k RFdPUkQgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc19OYU5GaXJz dERXT1JEICsgMTsKCgpjb25zdCB1bnNpZ25lZCBsb25nKiBEb3VibGVTdXBwb3J0OjpzX3Bvc2l0 aXZlWmVyb0ZpcnN0RFdPUkQgPQoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBsb25nKj4oJnNfcG9zaXRpdmVa ZXJvKTsKCgpjb25zdCB1bnNpZ25lZCBsb25nKiBEb3VibGVTdXBwb3J0OjpzX3Bvc2l0aXZlWmVy b1NlY29uZERXT1JEID0gc19wb3NpdGl2ZVplcm9GaXJzdERXT1JEICsgMTsKCgpjb25zdCB1bnNp Z25lZCBsb25nKiBEb3VibGVTdXBwb3J0OjpzX25lZ2F0aXZlWmVyb0ZpcnN0RFdPUkQgPQoKCgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxj b25zdCB1bnNpZ25lZCBsb25nKj4oJnNfbmVnYXRpdmVaZXJvKTsKCgpjb25zdCB1bnNpZ25lZCBs b25nKiBEb3VibGVTdXBwb3J0OjpzX25lZ2F0aXZlWmVyb1NlY29uZERXT1JEID0gc19uZWdhdGl2 ZVplcm9GaXJzdERXT1JEICsgMTsKCgoKYm9vbApEb3VibGVTdXBwb3J0OjplcXVhbCgKICAgICAg ICAgICAgICAgICAgICAgICAgZG91YmxlIHRoZUxIUywKICAgICAgICAgICAgICAgICAgICAgICAg ZG91YmxlIHRoZVJIUykKewogICAgICAgIGlmIChpc05hTih0aGVMSFMpID09IHRydWUgfHwgaXNO YU4odGhlUkhTKSA9PSB0cnVlKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxz ZTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVy biB0aGVMSFMgPT0gdGhlUkhTOwogICAgICAgIH0KfQoKCgpib29sCkRvdWJsZVN1cHBvcnQ6Om5v dEVxdWFsKAogICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdGhlTEhTLAogICAgICAgICAg ICAgICAgICAgICAgICBkb3VibGUgdGhlUkhTKQp7CiAgICAgICAgcmV0dXJuICFlcXVhbCh0aGVM SFMsIHRoZVJIUyk7Cn0KCgoKYm9vbApEb3VibGVTdXBwb3J0OjpsZXNzVGhhbigKICAgICAgICAg ICAgICAgICAgICAgICAgZG91YmxlIHRoZUxIUywKICAgICAgICAgICAgICAgICAgICAgICAgZG91 YmxlIHRoZVJIUykKewogICAgICAgIGlmIChpc05hTih0aGVMSFMpID09IHRydWUgfHwgaXNOYU4o dGhlUkhTKSA9PSB0cnVlKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK ICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiB0 aGVMSFMgPCB0aGVSSFM7CiAgICAgICAgfQp9CgoKCmJvb2wKRG91YmxlU3VwcG9ydDo6bGVzc1Ro YW5PckVxdWFsKAogICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdGhlTEhTLAogICAgICAg ICAgICAgICAgICAgICAgICBkb3VibGUgdGhlUkhTKQp7CiAgICAgICAgaWYgKGlzTmFOKHRoZUxI UykgPT0gdHJ1ZSB8fCBpc05hTih0aGVSSFMpID09IHRydWUpCiAgICAgICAgewogICAgICAgICAg ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAg ICAgICAgICAgICAgcmV0dXJuIHRoZUxIUyA8PSB0aGVSSFM7CiAgICAgICAgfQp9CgoKCmJvb2wK RG91YmxlU3VwcG9ydDo6Z3JlYXRlclRoYW4oCiAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJs ZSB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB0aGVSSFMpCnsKICAgICAg ICBpZiAoaXNOYU4odGhlTEhTKSA9PSB0cnVlIHx8IGlzTmFOKHRoZVJIUykgPT0gdHJ1ZSkKICAg ICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGVs c2UKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhlTEhTID4gdGhlUkhTOwogICAg ICAgIH0KfQoKCgpib29sCkRvdWJsZVN1cHBvcnQ6OmdyZWF0ZXJUaGFuT3JFcXVhbCgKICAgICAg ICAgICAgICAgICAgICAgICAgZG91YmxlIHRoZUxIUywKICAgICAgICAgICAgICAgICAgICAgICAg ZG91YmxlIHRoZVJIUykKewogICAgICAgIGlmIChpc05hTih0aGVMSFMpID09IHRydWUgfHwgaXNO YU4odGhlUkhTKSA9PSB0cnVlKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxz ZTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVy biB0aGVMSFMgPj0gdGhlUkhTOwogICAgICAgIH0KfQoKCgpkb3VibGUKRG91YmxlU3VwcG9ydDo6 YWRkKAogICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdGhlTEhTLAogICAgICAgICAgICAg ICAgICAgICAgICBkb3VibGUgdGhlUkhTKQp7CiAgICAgICAgaWYgKGlzTmFOKHRoZUxIUykgPT0g dHJ1ZSkKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhlTEhTOwogICAgICAgIH0K ICAgICAgICBlbHNlIGlmIChpc05hTih0aGVSSFMpID09IHRydWUpCiAgICAgICAgewogICAgICAg ICAgICAgICAgcmV0dXJuIHRoZVJIUzsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsK ICAgICAgICAgICAgICAgIHJldHVybiB0aGVMSFMgKyB0aGVSSFM7CiAgICAgICAgfQp9CgoKCmRv dWJsZQpEb3VibGVTdXBwb3J0OjpzdWJ0cmFjdCgKICAgICAgICAgICAgICAgICAgICAgICAgZG91 YmxlIHRoZUxIUywKICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHRoZVJIUykKewogICAg ICAgIGlmIChpc05hTih0aGVMSFMpID09IHRydWUpCiAgICAgICAgewogICAgICAgICAgICAgICAg cmV0dXJuIHRoZUxIUzsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoaXNOYU4odGhlUkhTKSA9 PSB0cnVlKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGVSSFM7CiAgICAgICAg fQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhlTEhTIC0g dGhlUkhTOwogICAgICAgIH0KfQoKCgpkb3VibGUKRG91YmxlU3VwcG9ydDo6bXVsdGlwbHkoCiAg ICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB0aGVMSFMsCiAgICAgICAgICAgICAgICAgICAg ICAgIGRvdWJsZSB0aGVSSFMpCnsKICAgICAgICBpZiAoaXNOYU4odGhlTEhTKSA9PSB0cnVlKQog ICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGVMSFM7CiAgICAgICAgfQogICAgICAg IGVsc2UgaWYgKGlzTmFOKHRoZVJIUykgPT0gdHJ1ZSkKICAgICAgICB7CiAgICAgICAgICAgICAg ICByZXR1cm4gdGhlUkhTOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAg ICAgICAgICAgcmV0dXJuIHRoZUxIUyAqIHRoZVJIUzsKICAgICAgICB9Cn0KCgoKZG91YmxlCkRv dWJsZVN1cHBvcnQ6OmRpdmlkZSgKICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHRoZUxI UywKICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHRoZVJIUykKewogICAgICAgIGlmIChp c05hTih0aGVMSFMpID09IHRydWUpCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIHRo ZUxIUzsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoaXNOYU4odGhlUkhTKSA9PSB0cnVlKQog ICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGVSSFM7CiAgICAgICAgfQogICAgICAg IGVsc2UgaWYgKHRoZVJIUyAhPSAwLjBMKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVy biB0aGVMSFMgLyB0aGVSSFM7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CgoKICAg ICAgICAgICAgICAgIGlmICh0aGVMSFMgPT0gMC4wTCkKICAgICAgICAgICAgICAgIHsKCiAgICAg ICAgICAgICAgICAgICAgICAgIHJldHVybiBEb3VibGVTdXBwb3J0OjpnZXROYU4oKTsKICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoZUxIUyA+IDAuMEwgJiYKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNQb3NpdGl2ZVplcm8odGhlUkhTKSA9PSB0 cnVlKQogICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERv dWJsZVN1cHBvcnQ6OmdldFBvc2l0aXZlSW5maW5pdHkoKTsKICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybiBEb3VibGVTdXBwb3J0OjpnZXROZWdhdGl2ZUluZmluaXR5KCk7CiAgICAgICAg ICAgICAgICB9CiAgICAgICAgfQp9CgoKCmRvdWJsZQpEb3VibGVTdXBwb3J0Ojptb2R1bHVzKAog ICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdGhlTEhTLAogICAgICAgICAgICAgICAgICAg ICAgICBkb3VibGUgdGhlUkhTKQp7CiAgICAgICAgaWYgKGlzTmFOKHRoZUxIUykgPT0gdHJ1ZSkK ICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhlTEhTOwogICAgICAgIH0KICAgICAg ICBlbHNlIGlmIChpc05hTih0aGVSSFMpID09IHRydWUpCiAgICAgICAgewogICAgICAgICAgICAg ICAgcmV0dXJuIHRoZVJIUzsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAg ICAgICAgICAgIHJldHVybiBsb25nKHRoZUxIUykgJSBsb25nKHRoZVJIUyk7CiAgICAgICAgfQp9 CgoKCmRvdWJsZQpEb3VibGVTdXBwb3J0OjpuZWdhdGl2ZShkb3VibGUgdGhlRG91YmxlKQp7CiAg ICAgICAgaWYgKGlzTmFOKHRoZURvdWJsZSkgPT0gdHJ1ZSkKICAgICAgICB7CiAgICAgICAgICAg ICAgICByZXR1cm4gZ2V0TmFOKCk7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAg ICAgICAgICAgICAgICByZXR1cm4gLXRoZURvdWJsZTsKICAgICAgICB9Cn0KCgoKZG91YmxlCkRv dWJsZVN1cHBvcnQ6OnRvRG91YmxlKGNvbnN0IFhhbGFuRE9NU3RyaW5nJiB0aGVTdHJpbmcpCnsK ICAgICAgICByZXR1cm4gdG9Eb3VibGUoY193c3RyKHRoZVN0cmluZykpOwp9CgoKCnZvaWQKY29u c3VtZVdoaXRlc3BhY2UoY29uc3QgWGFsYW5ET01DaGFyKiYgdGhlU3RyaW5nKQp7CiAgICAgICAg d2hpbGUoKnRoZVN0cmluZyAhPSAwICYmCiAgICAgICAgICAgICAgICAgIGlzWE1MV2hpdGVzcGFj ZSgqdGhlU3RyaW5nKSkKICAgICAgICB7CiAgICAgICAgICAgICAgICArK3RoZVN0cmluZzsKICAg ICAgICB9Cn0KCgoKc3RhdGljIHZvaWQKY29uc3VtZU51bWJlcnMoY29uc3QgWGFsYW5ET01DaGFy KiYgdGhlU3RyaW5nKQp7CiAgICAgICAgd2hpbGUoKnRoZVN0cmluZyAmJgogICAgICAgICAgICAg ICAgICAqdGhlU3RyaW5nID49IFhhbGFuVW5pY29kZTo6Y2hhckRpZ2l0XzAgJiYKICAgICAgICAg ICAgICAgICAgKnRoZVN0cmluZyA8PSBYYWxhblVuaWNvZGU6OmNoYXJEaWdpdF85KQogICAgICAg IHsKICAgICAgICAgICAgICAgICAgICAgICAgKyt0aGVTdHJpbmc7CiAgICAgICAgfQp9CgoKCnN0 YXRpYyBib29sCmRvVmFsaWRhdGUoCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhhbGFu RE9NQ2hhciogdGhlU3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICBib29sJiBmR290RGVj aW1hbFBvaW50KQp7CiAgICAgICAgKCh2b2lkKSAoKHRoZVN0cmluZyAhPSAwKSA/IDAgOiAoX19h c3NlcnRfZmFpbCAoInRoZVN0cmluZyAhPSAwIiwgIlBsYXRmb3JtU3VwcG9ydC9Eb3VibGVTdXBw b3J0LmNwcCIsIDM5MywgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CgogICAgICAgIGJvb2wg ZkVycm9yID0gZmFsc2U7CiAgICAgICAgYm9vbCBmR290RGlnaXQgPSBmYWxzZTsKICAgICAgICBi b29sIGZHb3RNaW51cyA9IGZhbHNlOwogICAgICAgIGJvb2wgZkdvdFdoaXRlc3BhY2UgPSBmYWxz ZTsKCiAgICAgICAgY29uc3QgWGFsYW5ET01DaGFyKiB0aGVDdXJyZW50ID0gdGhlU3RyaW5nOwoK CiAgICAgICAgY29uc3VtZVdoaXRlc3BhY2UodGhlQ3VycmVudCk7CgogICAgICAgIHdoaWxlKCp0 aGVDdXJyZW50ICE9IDAgJiYgZkVycm9yID09IGZhbHNlKQogICAgICAgIHsKICAgICAgICAgICAg ICAgIHN3aXRjaCgqdGhlQ3VycmVudCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg IGNhc2UgWGFsYW5Vbmljb2RlOjpjaGFyRnVsbFN0b3A6CiAgICAgICAgICAgICAgICAgICAgICAg IGlmIChmR290RGVjaW1hbFBvaW50ID09IHRydWUgfHwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBmR290V2hpdGVzcGFjZSA9PSB0cnVlKQogICAgICAgICAgICAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZkVycm9yID0gdHJ1ZTsKICAgICAgICAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmR290RGVjaW1h bFBvaW50ID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyt0aGVDdXJy ZW50OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgWGFsYW5Vbmljb2RlOjpjaGFySHlwaGVuTWludXM6 CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmR290RGVjaW1hbFBvaW50ID09IHRydWUgfHwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmR290TWludXMgPT0gdHJ1ZSB8fAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZHb3REaWdpdCA9PSB0cnVlIHx8CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZkdvdFdoaXRlc3BhY2UgPT0gdHJ1ZSkKICAgICAgICAg ICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmRXJyb3Ig PSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGZHb3RNaW51cyA9IHRydWU7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICsrdGhlQ3VycmVudDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIFhhbGFuVW5pY29kZTo6Y2hhckRp Z2l0XzA6CiAgICAgICAgICAgICAgICBjYXNlIFhhbGFuVW5pY29kZTo6Y2hhckRpZ2l0XzE6CiAg ICAgICAgICAgICAgICBjYXNlIFhhbGFuVW5pY29kZTo6Y2hhckRpZ2l0XzI6CiAgICAgICAgICAg ICAgICBjYXNlIFhhbGFuVW5pY29kZTo6Y2hhckRpZ2l0XzM6CiAgICAgICAgICAgICAgICBjYXNl IFhhbGFuVW5pY29kZTo6Y2hhckRpZ2l0XzQ6CiAgICAgICAgICAgICAgICBjYXNlIFhhbGFuVW5p Y29kZTo6Y2hhckRpZ2l0XzU6CiAgICAgICAgICAgICAgICBjYXNlIFhhbGFuVW5pY29kZTo6Y2hh ckRpZ2l0XzY6CiAgICAgICAgICAgICAgICBjYXNlIFhhbGFuVW5pY29kZTo6Y2hhckRpZ2l0Xzc6 CiAgICAgICAgICAgICAgICBjYXNlIFhhbGFuVW5pY29kZTo6Y2hhckRpZ2l0Xzg6CiAgICAgICAg ICAgICAgICBjYXNlIFhhbGFuVW5pY29kZTo6Y2hhckRpZ2l0Xzk6CiAgICAgICAgICAgICAgICAg ICAgICAgIGlmIChmR290V2hpdGVzcGFjZSA9PSB0cnVlKQogICAgICAgICAgICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZkVycm9yID0gdHJ1ZTsKICAgICAg ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmR290RGln aXQgPSB0cnVlOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lTnVtYmVy cyh0aGVDdXJyZW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIFhhbGFuVW5pY29kZTo6Y2hhclNw YWNlOgogICAgICAgICAgICAgICAgY2FzZSBYYWxhblVuaWNvZGU6OmNoYXJDUjoKICAgICAgICAg ICAgICAgIGNhc2UgWGFsYW5Vbmljb2RlOjpjaGFySFRhYjoKICAgICAgICAgICAgICAgIGNhc2Ug WGFsYW5Vbmljb2RlOjpjaGFyTEY6CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmR290V2hp dGVzcGFjZSA9PSB0cnVlKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZkVycm9yID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIHsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmR290V2hpdGVzcGFjZSA9IHRydWU7Cgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVXaGl0ZXNwYWNlKHRoZUN1cnJl bnQpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOwoKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgIGZF cnJvciA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg ICAgfQogICAgICAgIH0KCgoKCiAgICAgICAgcmV0dXJuIGZFcnJvciA9PSBmYWxzZSA/IGZHb3RE aWdpdCA6IGZhbHNlOwp9CgoKCnN0YXRpYyBib29sCmRvVmFsaWRhdGUoY29uc3QgWGFsYW5ET01D aGFyKiB0aGVTdHJpbmcpCnsKICAgICAgICBib29sIGZEdW1teSA9IGZhbHNlOwoKICAgICAgICBy ZXR1cm4gZG9WYWxpZGF0ZSh0aGVTdHJpbmcsIGZEdW1teSk7Cn0KCgoKaW5saW5lIGRvdWJsZQpj b252ZXJ0SGVscGVyKAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBYYWxhbkRPTUNoYXIq IHRoZVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmR290RGVjaW1hbFBvaW50 KQp7CgoKCgogICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCB0aGVMb25nSGFja1RocmVzaG9sZCA9 IDExOwoKICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgdGhlTGVuZ3RoID0gbGVuZ3RoKHRoZVN0 cmluZyk7CgogICAgICAgIGlmIChmR290RGVjaW1hbFBvaW50ID09IGZhbHNlICYmIHRoZUxlbmd0 aCA8IHRoZUxvbmdIYWNrVGhyZXNob2xkKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVy biBkb3VibGUoV2lkZVN0cmluZ1RvTG9uZyh0aGVTdHJpbmcpKTsKICAgICAgICB9CiAgICAgICAg ZWxzZQogICAgICAgIHsKCiAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgdGhlQnVm ZmVyU2l6ZSA9IDIwMHU7CgogICAgICAgICAgICAgICAgaWYgKHRoZUxlbmd0aCA8IHRoZUJ1ZmZl clNpemUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgdGhl QnVmZmVyW3RoZUJ1ZmZlclNpemVdOwoKICAgICAgICAgICAgICAgICAgICAgICAgZm9yKHVuc2ln bmVkIGludCBpID0gMDsgaSA8IHRoZUxlbmd0aDsgKytpKQogICAgICAgICAgICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlQnVmZmVyW2ldID0gY2hhcih0 aGVTdHJpbmdbaV0pOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg ICAgICAgICB0aGVCdWZmZXJbdGhlTGVuZ3RoXSA9ICdcMCc7CgogICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4gYXRvZih0aGVCdWZmZXIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBDaGFy VmVjdG9yVHlwZSB0aGVWZWN0b3I7CgogICAgICAgICAgICAgICAgICAgICAgICB0aGVWZWN0b3Iu cmVzZXJ2ZSh0aGVMZW5ndGggKyAxKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIENvcHlXaWRl U3RyaW5nVG9WZWN0b3IodGhlU3RyaW5nLCB0aGVWZWN0b3IpOwoKICAgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIGF0b2YoJip0aGVWZWN0b3IuYmVnaW4oKSk7CiAgICAgICAgICAgICAgICB9 CiAgICAgICAgfQp9CgoKCmRvdWJsZQpkb0NvbnZlcnQoY29uc3QgWGFsYW5ET01DaGFyKiB0aGVT dHJpbmcpCnsKICAgICAgICAoKHZvaWQpICgodGhlU3RyaW5nICE9IDApID8gMCA6IChfX2Fzc2Vy dF9mYWlsICgidGhlU3RyaW5nICE9IDAiLCAiUGxhdGZvcm1TdXBwb3J0L0RvdWJsZVN1cHBvcnQu Y3BwIiwgNTU1LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICAgICAgICAoKHZvaWQpICgo KnRoZVN0cmluZyAhPSAwKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIip0aGVTdHJpbmcgIT0gMCIs ICJQbGF0Zm9ybVN1cHBvcnQvRG91YmxlU3VwcG9ydC5jcHAiLCA1NTYsIF9fUFJFVFRZX0ZVTkNU SU9OX18pLCAwKSkpOwojIDY2NCAiUGxhdGZvcm1TdXBwb3J0L0RvdWJsZVN1cHBvcnQuY3BwIgog ICAgICAgIGJvb2wgZkdvdERlY2ltYWxQb2ludCA9IGZhbHNlOwoKICAgICAgICBpZiAoZG9WYWxp ZGF0ZSh0aGVTdHJpbmcsIGZHb3REZWNpbWFsUG9pbnQpID09IGZhbHNlKQogICAgICAgIHsKICAg ICAgICAgICAgICAgIHJldHVybiBEb3VibGVTdXBwb3J0OjpnZXROYU4oKTsKICAgICAgICB9CiAg ICAgICAgZWxzZQogICAgICAgIHsKCgoKCgogICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRI ZWxwZXIodGhlU3RyaW5nLCBmR290RGVjaW1hbFBvaW50KTsKCiAgICAgICAgfQoKfQoKCgpkb3Vi bGUKRG91YmxlU3VwcG9ydDo6dG9Eb3VibGUoY29uc3QgWGFsYW5ET01DaGFyKiB0aGVTdHJpbmcp CnsKICAgICAgICBpZiAodGhlU3RyaW5nID09IDAgfHwKICAgICAgICAgICAgICAgICp0aGVTdHJp bmcgPT0gMCkKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0TmFOKCk7CiAgICAg ICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gZG9Db252 ZXJ0KHRoZVN0cmluZyk7CiAgICAgICAgfQp9CgoKCmJvb2wKRG91YmxlU3VwcG9ydDo6aXNWYWxp ZChjb25zdCBYYWxhbkRPTVN0cmluZyB0aGVTdHJpbmcpCnsKICAgICAgICByZXR1cm4gaXNWYWxp ZChjX3dzdHIodGhlU3RyaW5nKSk7Cn0KCgoKYm9vbApEb3VibGVTdXBwb3J0Ojppc1ZhbGlkKGNv bnN0IFhhbGFuRE9NQ2hhciogdGhlU3RyaW5nKQp7CiAgICAgICAgcmV0dXJuIGRvVmFsaWRhdGUo dGhlU3RyaW5nKTsKfQojIDg5NSAiUGxhdGZvcm1TdXBwb3J0L0RvdWJsZVN1cHBvcnQuY3BwIgpk b3VibGUKRG91YmxlU3VwcG9ydDo6cm91bmQoZG91YmxlIHRoZVZhbHVlKQp7CiAgICAgICAgaWYg KGlzTmFOKHRoZVZhbHVlKSkKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0TmFO KCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGlzUG9zaXRpdmVJbmZpbml0eSh0aGVWYWx1 ZSkpCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIGdldFBvc2l0aXZlSW5maW5pdHko KTsKICAgICAgICB9CiAgICAgICAgaWYgKGlzTmVnYXRpdmVJbmZpbml0eSh0aGVWYWx1ZSkpCiAg ICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIGdldE5lZ2F0aXZlSW5maW5pdHkoKTsKICAg ICAgICB9CiAgICAgICAgZWxzZSBpZiAodGhlVmFsdWUgPT0gMCkKICAgICAgICB7CiAgICAgICAg ICAgICAgICByZXR1cm4gMC4wOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICh0aGVWYWx1ZSA+ IDApCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIGxvbmcodGhlVmFsdWUgKyAwLjUp OwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewoKCgogICAgICAgICAgICAgICAgZG91 YmxlIGludFBhcnQgPSAwOwoKICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSBmcmFjUGFydCA9 IG1vZGYodGhlVmFsdWUsICZpbnRQYXJ0KTsKCiAgICAgICAgICAgICAgICBpZiAoZnJhY1BhcnQg PT0gLTAuNSkKICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biBsb25nKHRoZVZhbHVlICsgMC41KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg IGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxv bmcodGhlVmFsdWUgLSAwLjUpOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KfQo=