This is the mail archive of the gcc-prs@gcc.gnu.org mailing list for the GCC project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
>Number: 1504 >Category: c >Synopsis: Segmentation fault >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Sat Dec 23 19:56:01 PST 2000 >Closed-Date: >Last-Modified: >Originator: zome@iname.com >Release: gcc version 2.96 20000731 (Red Hat Linux 7.0) >Organization: >Environment: RedHat 7.0. Out of the box >Description: gcc -fPIC -I../../Pax -I/usr/include/python1.5 -I/usr/local/include -g -O2 -I/usr/include/python1.5 -I/usr/include/python1.5 -DHAVE_CONFIG_H -c ./curveobject.c ./curveobject.c: In function `add_bezier_rect': ./curveobject.c:781: Internal error: Segmentation fault. Please submit a full bug report. See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions. make: *** [curveobject.o] Error 1 >How-To-Repeat: Try to compile Sketch, the vector drawing program. http://sketch.sourceforge.net/ >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="curveobject.i" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="curveobject.i" IyAxICIuL2N1cnZlb2JqZWN0LmMiCiMgMjIgIi4vY3VydmVvYmplY3QuYyIKIyAyOCAiL3Vzci9p bmNsdWRlL21hdGguaCIgMSAzCiMgMjgzICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMg MzExICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDI4ICIvdXNyL2luY2x1ZGUvbWF0aC5o IiAyIDMKCgoKCgoKCgoKCgoKCiMgNjQgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyA1NCAiL3Vz ci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMwpleHRlcm4gZG91YmxlIGFjb3MgKCBkb3Vi bGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX2Fjb3MgKCBkb3VibGUgX194KTsKCmV4dGVybiBkb3Vi bGUgYXNpbiAoIGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fYXNpbiAoIGRvdWJsZSBfX3gp OwoKZXh0ZXJuIGRvdWJsZSBhdGFuICggZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19hdGFu ICggZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIGF0YW4yICggZG91YmxlIF9feSwgZG91Ymxl IF9feCk7IGV4dGVybiBkb3VibGUgX19hdGFuMiAoIGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gpOwoK CmV4dGVybiBkb3VibGUgY29zICggZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19jb3MgKCBk b3VibGUgX194KTsKCmV4dGVybiBkb3VibGUgc2luICggZG91YmxlIF9feCk7IGV4dGVybiBkb3Vi bGUgX19zaW4gKCBkb3VibGUgX194KTsKCmV4dGVybiBkb3VibGUgdGFuICggZG91YmxlIF9feCk7 IGV4dGVybiBkb3VibGUgX190YW4gKCBkb3VibGUgX194KTsKCiMgNzggIi91c3IvaW5jbHVkZS9i aXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBkb3VibGUgY29zaCAoIGRvdWJsZSBfX3gpOyBleHRl cm4gZG91YmxlIF9fY29zaCAoIGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGRvdWJsZSBzaW5oICggZG91 YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19zaW5oICggZG91YmxlIF9feCk7CgpleHRlcm4gZG91 YmxlIHRhbmggKCBkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX3RhbmggKCBkb3VibGUgX194 KTsKCgoKZXh0ZXJuIGRvdWJsZSBhY29zaCAoIGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9f YWNvc2ggKCBkb3VibGUgX194KTsKCmV4dGVybiBkb3VibGUgYXNpbmggKCBkb3VibGUgX194KTsg ZXh0ZXJuIGRvdWJsZSBfX2FzaW5oICggZG91YmxlIF9feCk7CgpleHRlcm4gZG91YmxlIGF0YW5o ICggZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19hdGFuaCAoIGRvdWJsZSBfX3gpOwoKCgoK CmV4dGVybiBkb3VibGUgZXhwICggZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19leHAgKCBk b3VibGUgX194KTsKCiMgMTA2ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRl cm4gZG91YmxlIGZyZXhwICggZG91YmxlIF9feCwgaW50ICpfX2V4cG9uZW50KTsgZXh0ZXJuIGRv dWJsZSBfX2ZyZXhwICggZG91YmxlIF9feCwgaW50ICpfX2V4cG9uZW50KTsKCgpleHRlcm4gZG91 YmxlIGxkZXhwICggZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQpOyBleHRlcm4gZG91YmxlIF9f bGRleHAgKCBkb3VibGUgX194LCBpbnQgX19leHBvbmVudCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cg KCBkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX2xvZyAoIGRvdWJsZSBfX3gpOwoKCmV4dGVy biBkb3VibGUgbG9nMTAgKCBkb3VibGUgX194KTsgZXh0ZXJuIGRvdWJsZSBfX2xvZzEwICggZG91 YmxlIF9feCk7CgoKZXh0ZXJuIGRvdWJsZSBtb2RmICggZG91YmxlIF9feCwgZG91YmxlICpfX2lw dHIpOyBleHRlcm4gZG91YmxlIF9fbW9kZiAoIGRvdWJsZSBfX3gsIGRvdWJsZSAqX19pcHRyKTsK CgoKZXh0ZXJuIGRvdWJsZSBleHBtMSAoIGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fZXhw bTEgKCBkb3VibGUgX194KTsKCgpleHRlcm4gZG91YmxlIGxvZzFwICggZG91YmxlIF9feCk7IGV4 dGVybiBkb3VibGUgX19sb2cxcCAoIGRvdWJsZSBfX3gpOwoKCmV4dGVybiBkb3VibGUgbG9nYiAo IGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fbG9nYiAoIGRvdWJsZSBfX3gpOwojIDE0MyAi L3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGRvdWJsZSBwb3cgKCBkb3Vi bGUgX194LCBkb3VibGUgX195KTsgZXh0ZXJuIGRvdWJsZSBfX3BvdyAoIGRvdWJsZSBfX3gsIGRv dWJsZSBfX3kpOwoKCmV4dGVybiBkb3VibGUgc3FydCAoIGRvdWJsZSBfX3gpOyBleHRlcm4gZG91 YmxlIF9fc3FydCAoIGRvdWJsZSBfX3gpOwoKCgpleHRlcm4gZG91YmxlIGh5cG90ICggZG91Ymxl IF9feCwgZG91YmxlIF9feSk7IGV4dGVybiBkb3VibGUgX19oeXBvdCAoIGRvdWJsZSBfX3gsIGRv dWJsZSBfX3kpOwoKCgoKZXh0ZXJuIGRvdWJsZSBjYnJ0ICggZG91YmxlIF9feCk7IGV4dGVybiBk b3VibGUgX19jYnJ0ICggZG91YmxlIF9feCk7CgoKCgoKCmV4dGVybiBkb3VibGUgY2VpbCAoIGRv dWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fY2VpbCAoIGRvdWJsZSBfX3gpOwoKCmV4dGVybiBk b3VibGUgZmFicyAoIGRvdWJsZSBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0 ZXJuIGRvdWJsZSBfX2ZhYnMgKCBkb3VibGUgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7CgoKZXh0ZXJuIGRvdWJsZSBmbG9vciAoIGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9f Zmxvb3IgKCBkb3VibGUgX194KTsKCgpleHRlcm4gZG91YmxlIGZtb2QgKCBkb3VibGUgX194LCBk b3VibGUgX195KTsgZXh0ZXJuIGRvdWJsZSBfX2Ztb2QgKCBkb3VibGUgX194LCBkb3VibGUgX195 KTsKCgoKCmV4dGVybiBpbnQgX19pc2luZiAoZG91YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fZmluaXRlIChkb3VibGUgX192YWx1ZSkgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBpc2luZiAoZG91YmxlIF9f dmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IGZpbml0ZSAo ZG91YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoKCmV4dGVy biBkb3VibGUgaW5mbmFuIChpbnQgX19lcnJvcikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp OyBleHRlcm4gZG91YmxlIF9faW5mbmFuIChpbnQgX19lcnJvcikgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUgZHJlbSAoIGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kp OyBleHRlcm4gZG91YmxlIF9fZHJlbSAoIGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpOwoKCgpleHRl cm4gZG91YmxlIHNpZ25pZmljYW5kICggZG91YmxlIF9feCk7IGV4dGVybiBkb3VibGUgX19zaWdu aWZpY2FuZCAoIGRvdWJsZSBfX3gpOwoKCgoKZXh0ZXJuIGRvdWJsZSBjb3B5c2lnbiAoIGRvdWJs ZSBfX3gsIGRvdWJsZSBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRv dWJsZSBfX2NvcHlzaWduICggZG91YmxlIF9feCwgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOwojIDIxNyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0 ZXJuIGludCBfX2lzbmFuIChkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOwoKCgpleHRlcm4gaW50IGlzbmFuIChkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUgajAgKCBkb3VibGUpOyBleHRlcm4gZG91Ymxl IF9fajAgKCBkb3VibGUpOwpleHRlcm4gZG91YmxlIGoxICggZG91YmxlKTsgZXh0ZXJuIGRvdWJs ZSBfX2oxICggZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBqbiAoaW50LCBkb3VibGUpOyBleHRlcm4g ZG91YmxlIF9fam4gKGludCwgZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSB5MCAoIGRvdWJsZSk7IGV4 dGVybiBkb3VibGUgX195MCAoIGRvdWJsZSk7CmV4dGVybiBkb3VibGUgeTEgKCBkb3VibGUpOyBl eHRlcm4gZG91YmxlIF9feTEgKCBkb3VibGUpOwpleHRlcm4gZG91YmxlIHluIChpbnQsIGRvdWJs ZSk7IGV4dGVybiBkb3VibGUgX195biAoaW50LCBkb3VibGUpOwoKCgoKCmV4dGVybiBkb3VibGUg ZXJmICggZG91YmxlKTsgZXh0ZXJuIGRvdWJsZSBfX2VyZiAoIGRvdWJsZSk7CmV4dGVybiBkb3Vi bGUgZXJmYyAoIGRvdWJsZSk7IGV4dGVybiBkb3VibGUgX19lcmZjICggZG91YmxlKTsKZXh0ZXJu IGRvdWJsZSBsZ2FtbWEgKCBkb3VibGUpOyBleHRlcm4gZG91YmxlIF9fbGdhbW1hICggZG91Ymxl KTsKIyAyNDYgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBkb3VibGUg Z2FtbWEgKCBkb3VibGUpOyBleHRlcm4gZG91YmxlIF9fZ2FtbWEgKCBkb3VibGUpOwoKCgoKCgpl eHRlcm4gZG91YmxlIGxnYW1tYV9yICggZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApOyBleHRlcm4g ZG91YmxlIF9fbGdhbW1hX3IgKCBkb3VibGUsIGludCAqX19zaWduZ2FtcCk7CgoKCgoKCmV4dGVy biBkb3VibGUgcmludCAoIGRvdWJsZSBfX3gpOyBleHRlcm4gZG91YmxlIF9fcmludCAoIGRvdWJs ZSBfX3gpOwoKCmV4dGVybiBkb3VibGUgbmV4dGFmdGVyICggZG91YmxlIF9feCwgZG91YmxlIF9f eSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmV4dGFmdGVy ICggZG91YmxlIF9feCwgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK CgoKCmV4dGVybiBkb3VibGUgcmVtYWluZGVyICggZG91YmxlIF9feCwgZG91YmxlIF9feSk7IGV4 dGVybiBkb3VibGUgX19yZW1haW5kZXIgKCBkb3VibGUgX194LCBkb3VibGUgX195KTsKCgoKZXh0 ZXJuIGRvdWJsZSBzY2FsYiAoIGRvdWJsZSBfX3gsIGRvdWJsZSBfX24pOyBleHRlcm4gZG91Ymxl IF9fc2NhbGIgKCBkb3VibGUgX194LCBkb3VibGUgX19uKTsKCgoKCmV4dGVybiBkb3VibGUgc2Nh bGJuICggZG91YmxlIF9feCwgaW50IF9fbik7IGV4dGVybiBkb3VibGUgX19zY2FsYm4gKCBkb3Vi bGUgX194LCBpbnQgX19uKTsKCgoKZXh0ZXJuIGludCBpbG9nYiAoZG91YmxlIF9feCk7IGV4dGVy biBpbnQgX19pbG9nYiAoZG91YmxlIF9feCk7CiMgNjQgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIg MwojIDgzICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgNTQgIi91c3IvaW5jbHVkZS9iaXRzL21h dGhjYWxscy5oIiAxIDMKZXh0ZXJuIGZsb2F0IGFjb3NmICggZmxvYXQgX194KTsgZXh0ZXJuIGZs b2F0IF9fYWNvc2YgKCBmbG9hdCBfX3gpOwoKZXh0ZXJuIGZsb2F0IGFzaW5mICggZmxvYXQgX194 KTsgZXh0ZXJuIGZsb2F0IF9fYXNpbmYgKCBmbG9hdCBfX3gpOwoKZXh0ZXJuIGZsb2F0IGF0YW5m ICggZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fYXRhbmYgKCBmbG9hdCBfX3gpOwoKZXh0ZXJu IGZsb2F0IGF0YW4yZiAoIGZsb2F0IF9feSwgZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fYXRh bjJmICggZmxvYXQgX195LCBmbG9hdCBfX3gpOwoKCmV4dGVybiBmbG9hdCBjb3NmICggZmxvYXQg X194KTsgZXh0ZXJuIGZsb2F0IF9fY29zZiAoIGZsb2F0IF9feCk7CgpleHRlcm4gZmxvYXQgc2lu ZiAoIGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX3NpbmYgKCBmbG9hdCBfX3gpOwoKZXh0ZXJu IGZsb2F0IHRhbmYgKCBmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX190YW5mICggZmxvYXQgX194 KTsKCiMgNzggIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBmbG9hdCBj b3NoZiAoIGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX2Nvc2hmICggZmxvYXQgX194KTsKCmV4 dGVybiBmbG9hdCBzaW5oZiAoIGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX3NpbmhmICggZmxv YXQgX194KTsKCmV4dGVybiBmbG9hdCB0YW5oZiAoIGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBf X3RhbmhmICggZmxvYXQgX194KTsKCgoKZXh0ZXJuIGZsb2F0IGFjb3NoZiAoIGZsb2F0IF9feCk7 IGV4dGVybiBmbG9hdCBfX2Fjb3NoZiAoIGZsb2F0IF9feCk7CgpleHRlcm4gZmxvYXQgYXNpbmhm ICggZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fYXNpbmhmICggZmxvYXQgX194KTsKCmV4dGVy biBmbG9hdCBhdGFuaGYgKCBmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19hdGFuaGYgKCBmbG9h dCBfX3gpOwoKCgoKCmV4dGVybiBmbG9hdCBleHBmICggZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0 IF9fZXhwZiAoIGZsb2F0IF9feCk7CgojIDEwNiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxz LmgiIDMKZXh0ZXJuIGZsb2F0IGZyZXhwZiAoIGZsb2F0IF9feCwgaW50ICpfX2V4cG9uZW50KTsg ZXh0ZXJuIGZsb2F0IF9fZnJleHBmICggZmxvYXQgX194LCBpbnQgKl9fZXhwb25lbnQpOwoKCmV4 dGVybiBmbG9hdCBsZGV4cGYgKCBmbG9hdCBfX3gsIGludCBfX2V4cG9uZW50KTsgZXh0ZXJuIGZs b2F0IF9fbGRleHBmICggZmxvYXQgX194LCBpbnQgX19leHBvbmVudCk7CgoKZXh0ZXJuIGZsb2F0 IGxvZ2YgKCBmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19sb2dmICggZmxvYXQgX194KTsKCgpl eHRlcm4gZmxvYXQgbG9nMTBmICggZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fbG9nMTBmICgg ZmxvYXQgX194KTsKCgpleHRlcm4gZmxvYXQgbW9kZmYgKCBmbG9hdCBfX3gsIGZsb2F0ICpfX2lw dHIpOyBleHRlcm4gZmxvYXQgX19tb2RmZiAoIGZsb2F0IF9feCwgZmxvYXQgKl9faXB0cik7CgoK CmV4dGVybiBmbG9hdCBleHBtMWYgKCBmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19leHBtMWYg KCBmbG9hdCBfX3gpOwoKCmV4dGVybiBmbG9hdCBsb2cxcGYgKCBmbG9hdCBfX3gpOyBleHRlcm4g ZmxvYXQgX19sb2cxcGYgKCBmbG9hdCBfX3gpOwoKCmV4dGVybiBmbG9hdCBsb2diZiAoIGZsb2F0 IF9feCk7IGV4dGVybiBmbG9hdCBfX2xvZ2JmICggZmxvYXQgX194KTsKIyAxNDMgIi91c3IvaW5j bHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBmbG9hdCBwb3dmICggZmxvYXQgX194LCBm bG9hdCBfX3kpOyBleHRlcm4gZmxvYXQgX19wb3dmICggZmxvYXQgX194LCBmbG9hdCBfX3kpOwoK CmV4dGVybiBmbG9hdCBzcXJ0ZiAoIGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX3NxcnRmICgg ZmxvYXQgX194KTsKCgoKZXh0ZXJuIGZsb2F0IGh5cG90ZiAoIGZsb2F0IF9feCwgZmxvYXQgX195 KTsgZXh0ZXJuIGZsb2F0IF9faHlwb3RmICggZmxvYXQgX194LCBmbG9hdCBfX3kpOwoKCgoKZXh0 ZXJuIGZsb2F0IGNicnRmICggZmxvYXQgX194KTsgZXh0ZXJuIGZsb2F0IF9fY2JydGYgKCBmbG9h dCBfX3gpOwoKCgoKCgpleHRlcm4gZmxvYXQgY2VpbGYgKCBmbG9hdCBfX3gpOyBleHRlcm4gZmxv YXQgX19jZWlsZiAoIGZsb2F0IF9feCk7CgoKZXh0ZXJuIGZsb2F0IGZhYnNmICggZmxvYXQgX194 KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX2ZhYnNmICggZmxv YXQgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGZsb29y ZiAoIGZsb2F0IF9feCk7IGV4dGVybiBmbG9hdCBfX2Zsb29yZiAoIGZsb2F0IF9feCk7CgoKZXh0 ZXJuIGZsb2F0IGZtb2RmICggZmxvYXQgX194LCBmbG9hdCBfX3kpOyBleHRlcm4gZmxvYXQgX19m bW9kZiAoIGZsb2F0IF9feCwgZmxvYXQgX195KTsKCgoKCmV4dGVybiBpbnQgX19pc2luZmYgKGZs b2F0IF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9f ZmluaXRlZiAoZmxvYXQgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoK ZXh0ZXJuIGludCBpc2luZmYgKGZsb2F0IF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0 X18pKTsKCgpleHRlcm4gaW50IGZpbml0ZWYgKGZsb2F0IF9fdmFsdWUpIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsKCgoKCgoKCmV4dGVybiBmbG9hdCBpbmZuYW5mIChpbnQgX19lcnJvcikg X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19pbmZuYW5mIChpbnQg X19lcnJvcikgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBmbG9hdCBkcmVt ZiAoIGZsb2F0IF9feCwgZmxvYXQgX195KTsgZXh0ZXJuIGZsb2F0IF9fZHJlbWYgKCBmbG9hdCBf X3gsIGZsb2F0IF9feSk7CgoKCmV4dGVybiBmbG9hdCBzaWduaWZpY2FuZGYgKCBmbG9hdCBfX3gp OyBleHRlcm4gZmxvYXQgX19zaWduaWZpY2FuZGYgKCBmbG9hdCBfX3gpOwoKCgoKZXh0ZXJuIGZs b2F0IGNvcHlzaWduZiAoIGZsb2F0IF9feCwgZmxvYXQgX195KSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX2NvcHlzaWduZiAoIGZsb2F0IF9feCwgZmxvYXQgX195 KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMgMjE3ICIvdXNyL2luY2x1ZGUvYml0cy9t YXRoY2FsbHMuaCIgMwpleHRlcm4gaW50IF9faXNuYW5mIChmbG9hdCBfX3ZhbHVlKSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBpbnQgaXNuYW5mIChmbG9hdCBfX3ZhbHVl KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGowZiAoIGZsb2F0 KTsgZXh0ZXJuIGZsb2F0IF9fajBmICggZmxvYXQpOwpleHRlcm4gZmxvYXQgajFmICggZmxvYXQp OyBleHRlcm4gZmxvYXQgX19qMWYgKCBmbG9hdCk7CmV4dGVybiBmbG9hdCBqbmYgKGludCwgZmxv YXQpOyBleHRlcm4gZmxvYXQgX19qbmYgKGludCwgZmxvYXQpOwpleHRlcm4gZmxvYXQgeTBmICgg ZmxvYXQpOyBleHRlcm4gZmxvYXQgX195MGYgKCBmbG9hdCk7CmV4dGVybiBmbG9hdCB5MWYgKCBm bG9hdCk7IGV4dGVybiBmbG9hdCBfX3kxZiAoIGZsb2F0KTsKZXh0ZXJuIGZsb2F0IHluZiAoaW50 LCBmbG9hdCk7IGV4dGVybiBmbG9hdCBfX3luZiAoaW50LCBmbG9hdCk7CgoKCgoKZXh0ZXJuIGZs b2F0IGVyZmYgKCBmbG9hdCk7IGV4dGVybiBmbG9hdCBfX2VyZmYgKCBmbG9hdCk7CmV4dGVybiBm bG9hdCBlcmZjZiAoIGZsb2F0KTsgZXh0ZXJuIGZsb2F0IF9fZXJmY2YgKCBmbG9hdCk7CmV4dGVy biBmbG9hdCBsZ2FtbWFmICggZmxvYXQpOyBleHRlcm4gZmxvYXQgX19sZ2FtbWFmICggZmxvYXQp OwojIDI0NiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGZsb2F0IGdh bW1hZiAoIGZsb2F0KTsgZXh0ZXJuIGZsb2F0IF9fZ2FtbWFmICggZmxvYXQpOwoKCgoKCgpleHRl cm4gZmxvYXQgbGdhbW1hZl9yICggZmxvYXQsIGludCAqX19zaWduZ2FtcCk7IGV4dGVybiBmbG9h dCBfX2xnYW1tYWZfciAoIGZsb2F0LCBpbnQgKl9fc2lnbmdhbXApOwoKCgoKCgpleHRlcm4gZmxv YXQgcmludGYgKCBmbG9hdCBfX3gpOyBleHRlcm4gZmxvYXQgX19yaW50ZiAoIGZsb2F0IF9feCk7 CgoKZXh0ZXJuIGZsb2F0IG5leHRhZnRlcmYgKCBmbG9hdCBfX3gsIGZsb2F0IF9feSkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19uZXh0YWZ0ZXJmICggZmxvYXQg X194LCBmbG9hdCBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4g ZmxvYXQgcmVtYWluZGVyZiAoIGZsb2F0IF9feCwgZmxvYXQgX195KTsgZXh0ZXJuIGZsb2F0IF9f cmVtYWluZGVyZiAoIGZsb2F0IF9feCwgZmxvYXQgX195KTsKCgoKZXh0ZXJuIGZsb2F0IHNjYWxi ZiAoIGZsb2F0IF9feCwgZmxvYXQgX19uKTsgZXh0ZXJuIGZsb2F0IF9fc2NhbGJmICggZmxvYXQg X194LCBmbG9hdCBfX24pOwoKCgoKZXh0ZXJuIGZsb2F0IHNjYWxibmYgKCBmbG9hdCBfX3gsIGlu dCBfX24pOyBleHRlcm4gZmxvYXQgX19zY2FsYm5mICggZmxvYXQgX194LCBpbnQgX19uKTsKCgoK ZXh0ZXJuIGludCBpbG9nYmYgKGZsb2F0IF9feCk7IGV4dGVybiBpbnQgX19pbG9nYmYgKGZsb2F0 IF9feCk7CiMgODMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDEwMCAiL3Vzci9pbmNsdWRl L21hdGguaCIgMwojIDU0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMSAzCmV4dGVy biBsb25nIGRvdWJsZSBhY29zbCAoIGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJs ZSBfX2Fjb3NsICggbG9uZyBkb3VibGUgX194KTsKCmV4dGVybiBsb25nIGRvdWJsZSBhc2lubCAo IGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2FzaW5sICggbG9uZyBkb3Vi bGUgX194KTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFubCAoIGxvbmcgZG91YmxlIF9feCk7IGV4 dGVybiBsb25nIGRvdWJsZSBfX2F0YW5sICggbG9uZyBkb3VibGUgX194KTsKCmV4dGVybiBsb25n IGRvdWJsZSBhdGFuMmwgKCBsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCk7IGV4dGVy biBsb25nIGRvdWJsZSBfX2F0YW4ybCAoIGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX194 KTsKCgpleHRlcm4gbG9uZyBkb3VibGUgY29zbCAoIGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBs b25nIGRvdWJsZSBfX2Nvc2wgKCBsb25nIGRvdWJsZSBfX3gpOwoKZXh0ZXJuIGxvbmcgZG91Ymxl IHNpbmwgKCBsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19zaW5sICggbG9u ZyBkb3VibGUgX194KTsKCmV4dGVybiBsb25nIGRvdWJsZSB0YW5sICggbG9uZyBkb3VibGUgX194 KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGFubCAoIGxvbmcgZG91YmxlIF9feCk7CgojIDc4ICIv dXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gbG9uZyBkb3VibGUgY29zaGwg KCBsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19jb3NobCAoIGxvbmcgZG91 YmxlIF9feCk7CgpleHRlcm4gbG9uZyBkb3VibGUgc2luaGwgKCBsb25nIGRvdWJsZSBfX3gpOyBl eHRlcm4gbG9uZyBkb3VibGUgX19zaW5obCAoIGxvbmcgZG91YmxlIF9feCk7CgpleHRlcm4gbG9u ZyBkb3VibGUgdGFuaGwgKCBsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX190 YW5obCAoIGxvbmcgZG91YmxlIF9feCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBhY29zaGwgKCBs b25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hY29zaGwgKCBsb25nIGRvdWJs ZSBfX3gpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGFzaW5obCAoIGxvbmcgZG91YmxlIF9feCk7IGV4 dGVybiBsb25nIGRvdWJsZSBfX2FzaW5obCAoIGxvbmcgZG91YmxlIF9feCk7CgpleHRlcm4gbG9u ZyBkb3VibGUgYXRhbmhsICggbG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f YXRhbmhsICggbG9uZyBkb3VibGUgX194KTsKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwbCAo IGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2V4cGwgKCBsb25nIGRvdWJs ZSBfX3gpOwoKIyAxMDYgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBs b25nIGRvdWJsZSBmcmV4cGwgKCBsb25nIGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCk7IGV4 dGVybiBsb25nIGRvdWJsZSBfX2ZyZXhwbCAoIGxvbmcgZG91YmxlIF9feCwgaW50ICpfX2V4cG9u ZW50KTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbGRleHBsICggbG9uZyBkb3VibGUgX194LCBpbnQg X19leHBvbmVudCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xkZXhwbCAoIGxvbmcgZG91YmxlIF9f eCwgaW50IF9fZXhwb25lbnQpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2dsICggbG9uZyBkb3Vi bGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nbCAoIGxvbmcgZG91YmxlIF9feCk7CgoK ZXh0ZXJuIGxvbmcgZG91YmxlIGxvZzEwbCAoIGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25n IGRvdWJsZSBfX2xvZzEwbCAoIGxvbmcgZG91YmxlIF9feCk7CgoKZXh0ZXJuIGxvbmcgZG91Ymxl IG1vZGZsICggbG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19pcHRyKTsgZXh0ZXJuIGxv bmcgZG91YmxlIF9fbW9kZmwgKCBsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX2lwdHIp OwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwbTFsICggbG9uZyBkb3VibGUgX194KTsgZXh0ZXJu IGxvbmcgZG91YmxlIF9fZXhwbTFsICggbG9uZyBkb3VibGUgX194KTsKCgpleHRlcm4gbG9uZyBk b3VibGUgbG9nMXBsICggbG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9n MXBsICggbG9uZyBkb3VibGUgX194KTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nYmwgKCBsb25n IGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2dibCAoIGxvbmcgZG91YmxlIF9f eCk7CiMgMTQzICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gbG9uZyBk b3VibGUgcG93bCAoIGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KTsgZXh0ZXJuIGxv bmcgZG91YmxlIF9fcG93bCAoIGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KTsKCgpl eHRlcm4gbG9uZyBkb3VibGUgc3FydGwgKCBsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBk b3VibGUgX19zcXJ0bCAoIGxvbmcgZG91YmxlIF9feCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBo eXBvdGwgKCBsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7IGV4dGVybiBsb25nIGRv dWJsZSBfX2h5cG90bCAoIGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KTsKCgoKCmV4 dGVybiBsb25nIGRvdWJsZSBjYnJ0bCAoIGxvbmcgZG91YmxlIF9feCk7IGV4dGVybiBsb25nIGRv dWJsZSBfX2NicnRsICggbG9uZyBkb3VibGUgX194KTsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91Ymxl IGNlaWxsICggbG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY2VpbGwgKCBs b25nIGRvdWJsZSBfX3gpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBmYWJzbCAoIGxvbmcgZG91Ymxl IF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19m YWJzbCAoIGxvbmcgZG91YmxlIF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4 dGVybiBsb25nIGRvdWJsZSBmbG9vcmwgKCBsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4gbG9uZyBk b3VibGUgX19mbG9vcmwgKCBsb25nIGRvdWJsZSBfX3gpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBm bW9kbCAoIGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KTsgZXh0ZXJuIGxvbmcgZG91 YmxlIF9fZm1vZGwgKCBsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7CgoKCgpleHRl cm4gaW50IF9faXNpbmZsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX2Zpbml0ZWwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgaXNpbmZsIChsb25nIGRv dWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBm aW5pdGVsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 CgoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgaW5mbmFubCAoaW50IF9fZXJyb3IpIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9faW5mbmFubCAoaW50IF9f ZXJyb3IpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUg ZHJlbWwgKCBsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7IGV4dGVybiBsb25nIGRv dWJsZSBfX2RyZW1sICggbG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpOwoKCgpleHRl cm4gbG9uZyBkb3VibGUgc2lnbmlmaWNhbmRsICggbG9uZyBkb3VibGUgX194KTsgZXh0ZXJuIGxv bmcgZG91YmxlIF9fc2lnbmlmaWNhbmRsICggbG9uZyBkb3VibGUgX194KTsKCgoKCmV4dGVybiBs b25nIGRvdWJsZSBjb3B5c2lnbmwgKCBsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkg X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19jb3B5c2ln bmwgKCBsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOwojIDIxNyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJu IGludCBfX2lzbmFubCAobG9uZyBkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3RfXykpOwoKCgpleHRlcm4gaW50IGlzbmFubCAobG9uZyBkb3VibGUgX192YWx1ZSkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBqMGwgKCBsb25nIGRv dWJsZSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2owbCAoIGxvbmcgZG91YmxlKTsKZXh0ZXJuIGxv bmcgZG91YmxlIGoxbCAoIGxvbmcgZG91YmxlKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fajFsICgg bG9uZyBkb3VibGUpOwpleHRlcm4gbG9uZyBkb3VibGUgam5sIChpbnQsIGxvbmcgZG91YmxlKTsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9fam5sIChpbnQsIGxvbmcgZG91YmxlKTsKZXh0ZXJuIGxvbmcg ZG91YmxlIHkwbCAoIGxvbmcgZG91YmxlKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9feTBsICggbG9u ZyBkb3VibGUpOwpleHRlcm4gbG9uZyBkb3VibGUgeTFsICggbG9uZyBkb3VibGUpOyBleHRlcm4g bG9uZyBkb3VibGUgX195MWwgKCBsb25nIGRvdWJsZSk7CmV4dGVybiBsb25nIGRvdWJsZSB5bmwg KGludCwgbG9uZyBkb3VibGUpOyBleHRlcm4gbG9uZyBkb3VibGUgX195bmwgKGludCwgbG9uZyBk b3VibGUpOwoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBlcmZsICggbG9uZyBkb3VibGUpOyBleHRl cm4gbG9uZyBkb3VibGUgX19lcmZsICggbG9uZyBkb3VibGUpOwpleHRlcm4gbG9uZyBkb3VibGUg ZXJmY2wgKCBsb25nIGRvdWJsZSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2VyZmNsICggbG9uZyBk b3VibGUpOwpleHRlcm4gbG9uZyBkb3VibGUgbGdhbW1hbCAoIGxvbmcgZG91YmxlKTsgZXh0ZXJu IGxvbmcgZG91YmxlIF9fbGdhbW1hbCAoIGxvbmcgZG91YmxlKTsKIyAyNDYgIi91c3IvaW5jbHVk ZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBsb25nIGRvdWJsZSBnYW1tYWwgKCBsb25nIGRv dWJsZSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2dhbW1hbCAoIGxvbmcgZG91YmxlKTsKCgoKCgoK ZXh0ZXJuIGxvbmcgZG91YmxlIGxnYW1tYWxfciAoIGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdh bXApOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZ2FtbWFsX3IgKCBsb25nIGRvdWJsZSwgaW50ICpf X3NpZ25nYW1wKTsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJpbnRsICggbG9uZyBkb3VibGUg X194KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmludGwgKCBsb25nIGRvdWJsZSBfX3gpOwoKCmV4 dGVybiBsb25nIGRvdWJsZSBuZXh0YWZ0ZXJsICggbG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJs ZSBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f bmV4dGFmdGVybCAoIGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJlbWFpbmRlcmwgKCBs b25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Jl bWFpbmRlcmwgKCBsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSk7CgoKCmV4dGVybiBs b25nIGRvdWJsZSBzY2FsYmwgKCBsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9fbik7IGV4 dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibCAoIGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg X19uKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBzY2FsYm5sICggbG9uZyBkb3VibGUgX194LCBp bnQgX19uKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2NhbGJubCAoIGxvbmcgZG91YmxlIF9feCwg aW50IF9fbik7CgoKCmV4dGVybiBpbnQgaWxvZ2JsIChsb25nIGRvdWJsZSBfX3gpOyBleHRlcm4g aW50IF9faWxvZ2JsIChsb25nIGRvdWJsZSBfX3gpOwojIDEwMCAiL3Vzci9pbmNsdWRlL21hdGgu aCIgMiAzCiMgMTEzICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCmV4dGVybiBpbnQgc2lnbmdhbTsK IyAyMzYgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKdHlwZWRlZiBlbnVtCnsKICBfSUVFRV8gPSAt MSwKICBfU1ZJRF8sCiAgX1hPUEVOXywKICBfUE9TSVhfLAogIF9JU09DXwp9IF9MSUJfVkVSU0lP Tl9UWVBFOwoKCgoKZXh0ZXJuIF9MSUJfVkVSU0lPTl9UWVBFIF9MSUJfVkVSU0lPTjsKIyAyNjEg Ii91c3IvaW5jbHVkZS9tYXRoLmgiIDMKc3RydWN0IGV4Y2VwdGlvbgoKICB7CiAgICBpbnQgdHlw ZTsKICAgIGNoYXIgKm5hbWU7CiAgICBkb3VibGUgYXJnMTsKICAgIGRvdWJsZSBhcmcyOwogICAg ZG91YmxlIHJldHZhbDsKICB9OwoKCgoKZXh0ZXJuIGludCBtYXRoZXJyIChzdHJ1Y3QgZXhjZXB0 aW9uICpfX2V4Yyk7CiMgMjkwICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgNzkgIi91c3IvbGli L2djYy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL2Zsb2F0LmgiIDEgMwp1bmlv biBfX2NvbnZlcnRfbG9uZ19kb3VibGUgewogIHVuc2lnbmVkIF9fY29udmVydF9sb25nX2RvdWJs ZV9pWzRdOwogIGxvbmcgZG91YmxlIF9fY29udmVydF9sb25nX2RvdWJsZV9kOwp9OwojIDI5MCAi L3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgMzQ5ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMg MjgxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDEgMwpleHRlcm4gX19pbmxpbmUg ZG91YmxlIF9fc2duIChkb3VibGUpOyBleHRlcm4gX19pbmxpbmUgZG91YmxlIF9fc2duIChkb3Vi bGUgX194KSB7IHJldHVybiBfX3ggPT0gMC4wID8gMC4wIDogKF9feCA+IDAuMCA/IDEuMCA6IC0x LjApOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBfX3NnbmYgKGZsb2F0KTsgZXh0ZXJuIF9faW5s aW5lIGZsb2F0IF9fc2duZiAoZmxvYXQgX194KSB7IHJldHVybiBfX3ggPT0gMC4wID8gMC4wIDog KF9feCA+IDAuMCA/IDEuMCA6IC0xLjApOyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBf X3NnbmwgKGxvbmcgZG91YmxlKTsgZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIF9fc2dubCAo bG9uZyBkb3VibGUgX194KSB7IHJldHVybiBfX3ggPT0gMC4wID8gMC4wIDogKF9feCA+IDAuMCA/ IDEuMCA6IC0xLjApOyB9CgoKCiMgNDY2ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgi IDMKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBhdGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9feCkg eyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcGF0 YW4iIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJzdCgxKSIpOyBy ZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgYXRhbjJmIChmbG9hdCBfX3ks IGZsb2F0IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0 aWxlX18gKCJmcGF0YW4iIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6 ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUg YXRhbjJsIChsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25n IGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcGF0YW4iIDogIj10IiAoX192 YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsg fQpleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgX19hdGFuMmwgKGxvbmcgZG91YmxlIF9feSwg bG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9f dm9sYXRpbGVfXyAoImZwYXRhbiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChf X3kpIDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9CgoKZXh0ZXJuIF9faW5saW5lIGRvdWJs ZSBmbW9kIChkb3VibGUgX194LCBkb3VibGUgX195KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9f dmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtXG5cdCIgImZuc3RzdwklJWF4XG5c dCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAo X195KSA6ICJheCIsICJjYyIpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgZmxv YXQgZm1vZGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9f dmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtXG5cdCIgImZuc3RzdwklJWF4XG5c dCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAo X195KSA6ICJheCIsICJjYyIpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgbG9u ZyBkb3VibGUgZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB7IHJlZ2lz dGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtXG5c dCIgImZuc3RzdwklJWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSkg OiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJheCIsICJjYyIpOyByZXR1cm4gX192YWx1ZTsgfQoj IDQ4MSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCmV4dGVybiBfX2lubGluZSBk b3VibGUgc3FydCAoZG91YmxlIF9feCkgeyByZWdpc3RlciBkb3VibGUgX19yZXN1bHQ7IF9fYXNt IF9fdm9sYXRpbGVfXyAoImZzcXJ0IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJl dHVybiBfX3Jlc3VsdDsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgc3FydGYgKGZsb2F0IF9feCkg eyByZWdpc3RlciBmbG9hdCBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZnNxcnQiIDog Ij10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9IGV4dGVybiBf X2lubGluZSBsb25nIGRvdWJsZSBzcXJ0bCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxv bmcgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc3FydCIgOiAiPXQiIChf X3Jlc3VsdCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0KZXh0ZXJuIF9faW5saW5l IGxvbmcgZG91YmxlIF9fc3FydGwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRv dWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZnNxcnQiIDogIj10IiAoX19yZXN1 bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9CgoKZXh0ZXJuIF9faW5saW5lIGRv dWJsZSBmYWJzIChkb3VibGUgX194KSB7IHJldHVybiBfX2J1aWx0aW5fZmFicyAoX194KTsgfQpl eHRlcm4gX19pbmxpbmUgZmxvYXQgZmFic2YgKGZsb2F0IF9feCkgeyByZXR1cm4gX19idWlsdGlu X2ZhYnNmIChfX3gpOyB9CmV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBmYWJzbCAobG9uZyBk b3VibGUgX194KSB7IHJldHVybiBfX2J1aWx0aW5fZmFic2wgKF9feCk7IH0KZXh0ZXJuIF9faW5s aW5lIGxvbmcgZG91YmxlIF9fZmFic2wgKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gX19idWls dGluX2ZhYnNsIChfX3gpOyB9CiMgNTA3ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgi IDMKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBhdGFuIChkb3VibGUgX194KSB7IHJlZ2lzdGVyIGRv dWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkMTsgZnBhdGFuIiA6ICI9dCIg KF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0gZXh0 ZXJuIF9faW5saW5lIGZsb2F0IGF0YW5mIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgZmxvYXQgX19y ZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZDE7IGZwYXRhbiIgOiAiPXQiIChfX3Jlc3Vs dCkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fcmVzdWx0OyB9IGV4dGVybiBfX2lu bGluZSBsb25nIGRvdWJsZSBhdGFubCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcg ZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGQxOyBmcGF0YW4iIDogIj10 IiAoX19yZXN1bHQpIDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3Jlc3VsdDsgfQoK ZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIF9fc2duMWwgKGxvbmcgZG91YmxlKTsgZXh0ZXJu IF9faW5saW5lIGxvbmcgZG91YmxlIF9fc2duMWwgKGxvbmcgZG91YmxlIF9feCkgeyBfX2V4dGVu c2lvbl9fIHVuaW9uIHsgbG9uZyBkb3VibGUgX194bGQ7IHVuc2lnbmVkIGludCBfX3hpWzNdOyB9 IF9fbiA9IHsgX194bGQ6IF9feCB9OyBfX24uX194aVsyXSA9IChfX24uX194aVsyXSAmIDB4ODAw MCkgfCAweDNmZmY7IF9fbi5fX3hpWzFdID0gMHg4MDAwMDAwMDsgX19uLl9feGlbMF0gPSAwOyBy ZXR1cm4gX19uLl9feGxkOyB9CiMgNTE4ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgi IDMKIyA1MzMgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpleHRlcm4gX19pbmxp bmUgZG91YmxlIGZsb29yIChkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFs dWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWdu ZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1t IiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAwOyBfX2FzbSBfX3Zv bGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGlsZSAo ImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxl ICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0gZXh0ZXJuIF9f aW5saW5lIGZsb2F0IGZsb29yZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9f dmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5z aWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDog Ij1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAwOyBfX2FzbSBf X3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGls ZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0 aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0gZXh0ZXJu IF9faW5saW5lIGxvbmcgZG91YmxlIGZsb29ybCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVy IGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7 IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUg KCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwg MHgwNDAwOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsg X19hc20gX192b2xhdGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkp OyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9f dmFsdWU7IH0KIyA1NDQgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpleHRlcm4g X19pbmxpbmUgZG91YmxlIGNlaWwgKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUg X192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192b2xhdGlsZSB1 bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIg OiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA4MDA7IF9fYXNt IF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0 aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9s YXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1ZTsgfSBleHRl cm4gX19pbmxpbmUgZmxvYXQgY2VpbGYgKGZsb2F0IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJs ZSBfX3ZhbHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBfX3ZvbGF0aWxl IHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUw IiA6ICI9bSIgKF9fY3cpKTsgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDgwMDsgX19h c20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9fYXNtIF9fdm9s YXRpbGUgKCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgX19hc20gX192 b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3ZhbHVlOyB9IGV4 dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBjZWlsbCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lz dGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9f Y3c7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRp bGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYp IHwgMHgwODAwOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXAp KTsgX19hc20gX192b2xhdGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9f eCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJu IF9fdmFsdWU7IH0KIyA1NTUgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwoKCgoK CgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZQpsZGV4cCAoZG91YmxlIF9feCwgaW50IF9feSkKewog IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzY2Fs ZSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiICgobG9uZyBkb3VibGUpIF9feSkp OyByZXR1cm4gX192YWx1ZTsKfQoKCgojIDU4MCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGlu ZS5oIiAzCmV4dGVybiBfX2lubGluZSBkb3VibGUgbG9nMXAgKGRvdWJsZSBfX3gpIHsgcmVnaXN0 ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgaWYgKF9fZmFic2wgKF9feCkgPj0gMS4wIC0gMC41ICog MS40MTQyMTM1NjIzNzMwOTUwNDg4MEwpIF9fdmFsdWUgPSBsb2dsICgxLjAgKyBfX3gpOyBlbHNl IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGxuMlxuXHQiICJmeGNoXG5cdCIgImZ5bDJ4cDEiIDog Ij10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0g ZXh0ZXJuIF9faW5saW5lIGZsb2F0IGxvZzFwZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGxvbmcg ZG91YmxlIF9fdmFsdWU7IGlmIChfX2ZhYnNsIChfX3gpID49IDEuMCAtIDAuNSAqIDEuNDE0MjEz NTYyMzczMDk1MDQ4ODBMKSBfX3ZhbHVlID0gbG9nbCAoMS4wICsgX194KTsgZWxzZSBfX2FzbSBf X3ZvbGF0aWxlX18gKCJmbGRsbjJcblx0IiAiZnhjaFxuXHQiICJmeWwyeHAxIiA6ICI9dCIgKF9f dmFsdWUpIDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBf X2lubGluZSBsb25nIGRvdWJsZSBsb2cxcGwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBs b25nIGRvdWJsZSBfX3ZhbHVlOyBpZiAoX19mYWJzbCAoX194KSA+PSAxLjAgLSAwLjUgKiAxLjQx NDIxMzU2MjM3MzA5NTA0ODgwTCkgX192YWx1ZSA9IGxvZ2wgKDEuMCArIF9feCk7IGVsc2UgX19h c20gX192b2xhdGlsZV9fICgiZmxkbG4yXG5cdCIgImZ4Y2hcblx0IiAiZnlsMnhwMSIgOiAiPXQi IChfX3ZhbHVlKSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfQojIDU5 NCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCmV4dGVybiBfX2lubGluZSBkb3Vi bGUgYXNpbmggKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX195ID0gX19mYWJz bCAoX194KTsgcmV0dXJuIChsb2cxcGwgKF9feSAqIF9feSAvIChfX3NxcnRsIChfX3kgKiBfX3kg KyAxLjApICsgMS4wKSArIF9feSkgKiBfX3NnbjFsIChfX3gpKTsgfSBleHRlcm4gX19pbmxpbmUg ZmxvYXQgYXNpbmhmIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX195ID0gX19m YWJzbCAoX194KTsgcmV0dXJuIChsb2cxcGwgKF9feSAqIF9feSAvIChfX3NxcnRsIChfX3kgKiBf X3kgKyAxLjApICsgMS4wKSArIF9feSkgKiBfX3NnbjFsIChfX3gpKTsgfSBleHRlcm4gX19pbmxp bmUgbG9uZyBkb3VibGUgYXNpbmhsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBk b3VibGUgX195ID0gX19mYWJzbCAoX194KTsgcmV0dXJuIChsb2cxcGwgKF9feSAqIF9feSAvIChf X3NxcnRsIChfX3kgKiBfX3kgKyAxLjApICsgMS4wKSArIF9feSkgKiBfX3NnbjFsIChfX3gpKTsg fQoKCgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBhY29zaCAoZG91YmxlIF9feCkgeyByZXR1cm4g bG9nbCAoX194ICsgX19zcXJ0bCAoX194IC0gMS4wKSAqIF9fc3FydGwgKF9feCArIDEuMCkpOyB9 IGV4dGVybiBfX2lubGluZSBmbG9hdCBhY29zaGYgKGZsb2F0IF9feCkgeyByZXR1cm4gbG9nbCAo X194ICsgX19zcXJ0bCAoX194IC0gMS4wKSAqIF9fc3FydGwgKF9feCArIDEuMCkpOyB9IGV4dGVy biBfX2lubGluZSBsb25nIGRvdWJsZSBhY29zaGwgKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4g bG9nbCAoX194ICsgX19zcXJ0bCAoX194IC0gMS4wKSAqIF9fc3FydGwgKF9feCArIDEuMCkpOyB9 CgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBhdGFuaCAoZG91YmxlIF9feCkgeyByZWdpc3RlciBs b25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gLTAuNSAqIGxvZzFwbCAoLShf X3kgKyBfX3kpIC8gKDEuMCArIF9feSkpICogX19zZ24xbCAoX194KTsgfSBleHRlcm4gX19pbmxp bmUgZmxvYXQgYXRhbmhmIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX195ID0g X19mYWJzbCAoX194KTsgcmV0dXJuIC0wLjUgKiBsb2cxcGwgKC0oX195ICsgX195KSAvICgxLjAg KyBfX3kpKSAqIF9fc2duMWwgKF9feCk7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGF0 YW5obCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9fZmFi c2wgKF9feCk7IHJldHVybiAtMC41ICogbG9nMXBsICgtKF9feSArIF9feSkgLyAoMS4wICsgX195 KSkgKiBfX3NnbjFsIChfX3gpOyB9CgoKCgpleHRlcm4gX19pbmxpbmUgZG91YmxlIGh5cG90IChk b3VibGUgX194LCBkb3VibGUgX195KSB7IHJldHVybiBfX3NxcnRsIChfX3ggKiBfX3ggKyBfX3kg KiBfX3kpOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBoeXBvdGYgKGZsb2F0IF9feCwgZmxvYXQg X195KSB7IHJldHVybiBfX3NxcnRsIChfX3ggKiBfX3ggKyBfX3kgKiBfX3kpOyB9IGV4dGVybiBf X2lubGluZSBsb25nIGRvdWJsZSBoeXBvdGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg X195KSB7IHJldHVybiBfX3NxcnRsIChfX3ggKiBfX3ggKyBfX3kgKiBfX3kpOyB9CgpleHRlcm4g X19pbmxpbmUgZG91YmxlIGxvZ2IgKGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUg X192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19qdW5rOyBfX2FzbSBfX3ZvbGF0aWxlX18g KCJmeHRyYWN0XG5cdCIgOiAiPXQiIChfX2p1bmspLCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAoX194 KSk7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBsb2diZiAoZmxvYXQg X194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl IF9fanVuazsgX19hc20gX192b2xhdGlsZV9fICgiZnh0cmFjdFxuXHQiIDogIj10IiAoX19qdW5r KSwgIj11IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4g X19pbmxpbmUgbG9uZyBkb3VibGUgbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBs b25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2p1bms7IF9fYXNtIF9f dm9sYXRpbGVfXyAoImZ4dHJhY3Rcblx0IiA6ICI9dCIgKF9fanVuayksICI9dSIgKF9fdmFsdWUp IDogIjAiIChfX3gpKTsgcmV0dXJuIF9fdmFsdWU7IH0KCgoKCgoKCiMgNjkzICIvdXNyL2luY2x1 ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBkcmVtIChkb3Vi bGUgX194LCBkb3VibGUgX195KSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBp bnQgX19jbG9iYmVyZWQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtMVxuXHQiICJmc3Rz dwklJWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSksICI9JmEiIChf X2Nsb2JiZXJlZCkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJjYyIpOyByZXR1cm4gX192YWx1 ZTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgZHJlbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB7 IHJlZ2lzdGVyIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBpbnQgX19jbG9iYmVyZWQ7IF9fYXNt IF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtMVxuXHQiICJmc3RzdwklJWF4XG5cdCIgInNhaGZcblx0 IiAianAJMWIiIDogIj10IiAoX192YWx1ZSksICI9JmEiIChfX2Nsb2JiZXJlZCkgOiAiMCIgKF9f eCksICJ1IiAoX195KSA6ICJjYyIpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUg bG9uZyBkb3VibGUgZHJlbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB7IHJl Z2lzdGVyIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBpbnQgX19jbG9iYmVyZWQ7IF9fYXNtIF9f dm9sYXRpbGVfXyAoIjE6CWZwcmVtMVxuXHQiICJmc3RzdwklJWF4XG5cdCIgInNhaGZcblx0IiAi anAJMWIiIDogIj10IiAoX192YWx1ZSksICI9JmEiIChfX2Nsb2JiZXJlZCkgOiAiMCIgKF9feCks ICJ1IiAoX195KSA6ICJjYyIpOyByZXR1cm4gX192YWx1ZTsgfQojIDcwNiAiL3Vzci9pbmNsdWRl L2JpdHMvbWF0aGlubGluZS5oIiAzCmV4dGVybiBfX2lubGluZSBpbnQKX19maW5pdGUgKGRvdWJs ZSBfX3gpCnsKICByZXR1cm4gKF9fZXh0ZW5zaW9uX18KICAgICAgICAgICgoKCgodW5pb24geyBk b3VibGUgX19kOyBpbnQgX19pWzJdOyB9KSB7X19kOiBfX3h9KS5fX2lbMV0KICAgICAgICAgICAg IHwgMHg4MDBmZmZmZnUpICsgMSkgPj4gMzEpKTsKfQoKCiMgMzQ5ICIvdXNyL2luY2x1ZGUvbWF0 aC5oIiAyIDMKIyA0MDkgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAyMiAiLi9jdXJ2ZW9iamVj dC5jIiAyCgoKIyAzOSAiL3Vzci9pbmNsdWRlL3B5dGhvbjEuNS9QeXRob24uaCIgMQoKIyA1OCAi L3Vzci9pbmNsdWRlL3B5dGhvbjEuNS9QeXRob24uaCIKIyAyOSAiL3Vzci9pbmNsdWRlL3N0ZGlv LmgiIDEgMwoKCgoKCiMgMTk5ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcmVkaGF0LWxpbnV4LzIu OTYvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCnR5cGVkZWYgdW5zaWduZWQgaW50IHNpemVfdDsKIyAz NCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgoKCiMgNDMgIi91c3IvbGliL2djYy1saWIv aTM4Ni1yZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKdHlwZWRlZiBfX2J1 aWx0aW5fdmFfbGlzdCBfX2dudWNfdmFfbGlzdDsKIyAzOSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgi IDIgMwoKCiMgMzAgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwoKCnR5cGVkZWYgdW5z aWduZWQgY2hhciBfX3VfY2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3Vfc2hvcnQ7CnR5 cGVkZWYgdW5zaWduZWQgaW50IF9fdV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3VfbG9u ZzsKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdV9xdWFk X3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBsb25nIGxvbmcgaW50IF9fcXVhZF90OwojIDQ5ICIv dXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCnR5cGVkZWYgc2lnbmVkIGNoYXIgX19pbnQ4X3Q7 CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0IGlu dCBfX2ludDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7CnR5cGVk ZWYgc2lnbmVkIGludCBfX2ludDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWludDMyX3Q7 CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19pbnQ2NF90Owpf X2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VpbnQ2NF90OwoK dHlwZWRlZiBfX3F1YWRfdCAqX19xYWRkcl90OwoKdHlwZWRlZiBfX3VfcXVhZF90IF9fZGV2X3Q7 CnR5cGVkZWYgX191X2ludCBfX3VpZF90Owp0eXBlZGVmIF9fdV9pbnQgX19naWRfdDsKdHlwZWRl ZiBfX3VfbG9uZyBfX2lub190Owp0eXBlZGVmIF9fdV9pbnQgX19tb2RlX3Q7CnR5cGVkZWYgX191 X2ludCBfX25saW5rX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19vZmZfdDsKdHlwZWRlZiBfX3F1YWRf dCBfX2xvZmZfdDsKdHlwZWRlZiBpbnQgX19waWRfdDsKdHlwZWRlZiBpbnQgX19zc2l6ZV90Owp0 eXBlZGVmIF9fdV9sb25nIF9fcmxpbV90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19ybGltNjRfdDsK dHlwZWRlZiBfX3VfaW50IF9faWRfdDsKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IF9fdmFs WzJdOwogIH0gX19mc2lkX3Q7CgoKdHlwZWRlZiBpbnQgX19kYWRkcl90Owp0eXBlZGVmIGNoYXIg Kl9fY2FkZHJfdDsKdHlwZWRlZiBsb25nIGludCBfX3RpbWVfdDsKdHlwZWRlZiB1bnNpZ25lZCBp bnQgX191c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3VzZWNvbmRzX3Q7CnR5cGVkZWYg bG9uZyBpbnQgX19zd2Jsa190OwoKdHlwZWRlZiBsb25nIGludCBfX2Nsb2NrX3Q7CgoKdHlwZWRl ZiBpbnQgX19jbG9ja2lkX3Q7CgoKdHlwZWRlZiBpbnQgX190aW1lcl90OwoKCgp0eXBlZGVmIHVu c2lnbmVkIGxvbmcgaW50IF9fZmRfbWFzazsKCgojIDEwOSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlw ZXMuaCIgMwp0eXBlZGVmIHN0cnVjdAogIHsKCgoKCgoKICAgIF9fZmRfbWFzayBfX2Zkc19iaXRz WzEwMjQgLyAoOCAqIHNpemVvZiAoX19mZF9tYXNrKSldOwoKCiAgfSBfX2ZkX3NldDsKCgp0eXBl ZGVmIGludCBfX2tleV90OwoKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9faXBjX3BpZF90 OwoKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrc2l6ZV90OwoKCgoKdHlwZWRlZiBsb25nIGludCBf X2Jsa2NudF90Owp0eXBlZGVmIF9fcXVhZF90IF9fYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9s b25nIF9fZnNibGtjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoKCnR5 cGVkZWYgX191X2xvbmcgX19mc2ZpbGNudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNu dDY0X3Q7CgoKdHlwZWRlZiBfX3VfcXVhZF90IF9faW5vNjRfdDsKCgp0eXBlZGVmIF9fbG9mZl90 IF9fb2ZmNjRfdDsKCgp0eXBlZGVmIGxvbmcgaW50IF9fdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNp Z25lZCBsb25nIGludCBfX3RfdXNjYWxhcl90OwoKCnR5cGVkZWYgaW50IF9faW50cHRyX3Q7CgoK dHlwZWRlZiB1bnNpZ25lZCBpbnQgX19zb2NrbGVuX3Q7CgoKCgoKIyAyNCAiL3Vzci9pbmNsdWRl L2JpdHMvcHRocmVhZHR5cGVzLmgiIDEgMwojIDY4ICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5o IiAxIDMKc3RydWN0IF9fc2NoZWRfcGFyYW0KICB7CiAgICBpbnQgc2NoZWRfcHJpb3JpdHk7CiAg fTsKIyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDIgMwoKCnN0cnVjdCBf cHRocmVhZF9mYXN0bG9jawp7CiAgbG9uZyBpbnQgX19zdGF0dXM7CiAgaW50IF9fc3BpbmxvY2s7 Cgp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9kZXNjcl9zdHJ1Y3QgKl9wdGhyZWFkX2Rl c2NyOwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19kZXRhY2hzdGF0ZTsKICBpbnQgX19z Y2hlZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hlZF9wYXJhbSBfX3NjaGVkcGFyYW07CiAgaW50IF9f aW5oZXJpdHNjaGVkOwogIGludCBfX3Njb3BlOwogIHNpemVfdCBfX2d1YXJkc2l6ZTsKICBpbnQg X19zdGFja2FkZHJfc2V0OwogIHZvaWQgKl9fc3RhY2thZGRyOwogIHNpemVfdCBfX3N0YWNrc2l6 ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIHN0cnVjdCBfcHRocmVh ZF9mYXN0bG9jayBfX2NfbG9jazsKICBfcHRocmVhZF9kZXNjciBfX2Nfd2FpdGluZzsKfSBwdGhy ZWFkX2NvbmRfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2R1bW15Owp9IHB0aHJlYWRf Y29uZGF0dHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBwdGhyZWFkX2tleV90OwoKCgoKCnR5 cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVkOwogIGludCBfX21fY291bnQ7CiAgX3B0 aHJlYWRfZGVzY3IgX19tX293bmVyOwogIGludCBfX21fa2luZDsKICBzdHJ1Y3QgX3B0aHJlYWRf ZmFzdGxvY2sgX19tX2xvY2s7Cn0gcHRocmVhZF9tdXRleF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7 CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CgoKCnR5cGVkZWYgaW50 IHB0aHJlYWRfb25jZV90OwoKCiMgMTQwICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMu aCIgMwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHB0aHJlYWRfdDsKCiMgMTY2ICIvdXNyL2lu Y2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKIyA0MSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoK CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgRklMRTsKCiMgNTggIi91c3IvaW5jbHVkZS9z dGRpby5oIiAzCiMgMzEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAxIDMKIyAxNSAiL3Vzci9pbmNs dWRlL19HX2NvbmZpZy5oIiAxIDMKIyAyODcgIi91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRoYXQt bGludXgvMi45Ni9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKdHlwZWRlZiBsb25nIGludCB3Y2hhcl90 OwojIDMxMiAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXJlZGhhdC1saW51eC8yLjk2L2luY2x1ZGUv c3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgd2ludF90OwojIDE1ICIvdXNyL2luY2x1 ZGUvX0dfY29uZmlnLmgiIDIgMwojIDI1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyA0 NiAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMwojIDYyICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg Mwp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fY291bnQ7CiAgdW5pb24KICB7CiAgICB3aW50X3Qg X193Y2g7CiAgICBjaGFyIF9fd2NoYls0XTsKICB9IF9fdmFsdWU7Cn0gX19tYnN0YXRlX3Q7CiMg MjUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCgp0eXBlZGVmIHN0cnVjdAp7CiAgX19v ZmZfdCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3NfdDsKdHlwZWRlZiBz dHJ1Y3QKewogIF9fb2ZmNjRfdCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zw b3M2NF90OwojIDQ1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAyOSAiL3Vzci9pbmNs dWRlL2djb252LmgiIDEgMwojIDQ2ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMgMjkgIi91 c3IvaW5jbHVkZS9nY29udi5oIiAyIDMKCgoKCgoKCmVudW0KewogIF9fR0NPTlZfT0sgPSAwLAog IF9fR0NPTlZfTk9DT05WLAogIF9fR0NPTlZfTk9EQiwKICBfX0dDT05WX05PTUVNLAoKICBfX0dD T05WX0VNUFRZX0lOUFVULAogIF9fR0NPTlZfRlVMTF9PVVRQVVQsCiAgX19HQ09OVl9JTExFR0FM X0lOUFVULAogIF9fR0NPTlZfSU5DT01QTEVURV9JTlBVVCwKCiAgX19HQ09OVl9JTExFR0FMX0RF U0NSSVBUT1IsCiAgX19HQ09OVl9JTlRFUk5BTF9FUlJPUgp9OwoKCgplbnVtCnsKICBfX0dDT05W X0lTX0xBU1QgPSAweDAwMDEsCiAgX19HQ09OVl9JR05PUkVfRVJST1JTID0gMHgwMDAyCn07CgoK CnN0cnVjdCBfX2djb252X3N0ZXA7CnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YTsKc3RydWN0IF9f Z2NvbnZfbG9hZGVkX29iamVjdDsKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YTsKCgoKdHlwZWRl ZiBpbnQgKCpfX2djb252X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKiwgc3RydWN0IF9fZ2Nv bnZfc3RlcF9kYXRhICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKiosIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgY2hhciAqKiwgc2l6ZV90ICosIGludCwgaW50KTsKCgp0eXBlZGVm IGludCAoKl9fZ2NvbnZfaW5pdF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICopOwp0eXBlZGVm IHZvaWQgKCpfX2djb252X2VuZF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICopOwoKCgp0eXBl ZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICos IHZvaWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWdu ZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNp Z25lZCBjaGFyICoqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1 bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiosCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplX3QgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2NvbnRl eHRfZmN0KSAoc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICos CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIg KiwgdW5zaWduZWQgY2hhciAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfcXVlcnlf ZmN0KSAoX19jb25zdCBjaGFyICosIF9fY29uc3QgY2hhciAqKiosCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252 X3RyYW5zX2luaXRfZmN0KSAodm9pZCAqKiwgY29uc3QgY2hhciAqKTsKdHlwZWRlZiB2b2lkICgq X19nY29udl90cmFuc19lbmRfZmN0KSAodm9pZCAqKTsKCnN0cnVjdCBfX2djb252X3RyYW5zX2Rh dGEKewoKICBfX2djb252X3RyYW5zX2ZjdCBfX3RyYW5zX2ZjdDsKICBfX2djb252X3RyYW5zX2Nv bnRleHRfZmN0IF9fdHJhbnNfY29udGV4dF9mY3Q7CiAgX19nY29udl90cmFuc19lbmRfZmN0IF9f dHJhbnNfZW5kX2ZjdDsKICB2b2lkICpfX2RhdGE7CiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0 YSAqX19uZXh0Owp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwCnsKICBzdHJ1Y3QgX19nY29udl9s b2FkZWRfb2JqZWN0ICpfX3NobGliX2hhbmRsZTsKICBfX2NvbnN0IGNoYXIgKl9fbW9kbmFtZTsK CiAgaW50IF9fY291bnRlcjsKCiAgX19jb25zdCBjaGFyICpfX2Zyb21fbmFtZTsKICBfX2NvbnN0 IGNoYXIgKl9fdG9fbmFtZTsKCiAgX19nY29udl9mY3QgX19mY3Q7CiAgX19nY29udl9pbml0X2Zj dCBfX2luaXRfZmN0OwogIF9fZ2NvbnZfZW5kX2ZjdCBfX2VuZF9mY3Q7CgoKCiAgaW50IF9fbWlu X25lZWRlZF9mcm9tOwogIGludCBfX21heF9uZWVkZWRfZnJvbTsKICBpbnQgX19taW5fbmVlZGVk X3RvOwogIGludCBfX21heF9uZWVkZWRfdG87CgoKICBpbnQgX19zdGF0ZWZ1bDsKCiAgdm9pZCAq X19kYXRhOwp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEKewogIHVuc2lnbmVkIGNoYXIg Kl9fb3V0YnVmOwogIHVuc2lnbmVkIGNoYXIgKl9fb3V0YnVmZW5kOwoKCgogIGludCBfX2ZsYWdz OwoKCgogIGludCBfX2ludm9jYXRpb25fY291bnRlcjsKCgoKICBpbnQgX19pbnRlcm5hbF91c2U7 CgogIF9fbWJzdGF0ZV90ICpfX3N0YXRlcDsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwoKCgogIHN0 cnVjdCBfX2djb252X3RyYW5zX2RhdGEgKl9fdHJhbnM7Cn07CgoKCnR5cGVkZWYgc3RydWN0IF9f Z2NvbnZfaW5mbwp7CiAgc2l6ZV90IF9fbnN0ZXBzOwogIHN0cnVjdCBfX2djb252X3N0ZXAgKl9f c3RlcHM7CiAgX19leHRlbnNpb25fXyBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRhWzBd Owp9ICpfX2djb252X3Q7CgojIDQ1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwp0eXBl ZGVmIHVuaW9uCnsKICBzdHJ1Y3QgX19nY29udl9pbmZvIF9fY2Q7CiAgc3RydWN0CiAgewogICAg c3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwogICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9f ZGF0YTsKICB9IF9fY29tYmluZWQ7Cn0gX0dfaWNvbnZfdDsKCnR5cGVkZWYgaW50IF9HX2ludDE2 X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgaW50IF9HX2lu dDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgdW5zaWdu ZWQgaW50IF9HX3VpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0 eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18g KF9fU0lfXykpKTsKCiMgMzEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKIyA1MiAiL3Vzci9p bmNsdWRlL2xpYmlvLmgiIDMKIyAxNTcgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnN0cnVjdCBf SU9fanVtcF90OyBzdHJ1Y3QgX0lPX0ZJTEU7CgoKCgoKCgoKCnR5cGVkZWYgdm9pZCBfSU9fbG9j a190OwoKCgoKCnN0cnVjdCBfSU9fbWFya2VyIHsKICBzdHJ1Y3QgX0lPX21hcmtlciAqX25leHQ7 CiAgc3RydWN0IF9JT19GSUxFICpfc2J1ZjsKCgoKICBpbnQgX3BvczsKIyAxOTAgIi91c3IvaW5j bHVkZS9saWJpby5oIiAzCn07CgoKZW51bSBfX2NvZGVjdnRfcmVzdWx0CnsKICBfX2NvZGVjdnRf b2ssCiAgX19jb2RlY3Z0X3BhcnRpYWwsCiAgX19jb2RlY3Z0X2Vycm9yLAogIF9fY29kZWN2dF9u b2NvbnYKfTsKCiMgMjYyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpzdHJ1Y3QgX0lPX0ZJTEUg ewogIGludCBfZmxhZ3M7CgoKCgogIGNoYXIqIF9JT19yZWFkX3B0cjsKICBjaGFyKiBfSU9fcmVh ZF9lbmQ7CiAgY2hhciogX0lPX3JlYWRfYmFzZTsKICBjaGFyKiBfSU9fd3JpdGVfYmFzZTsKICBj aGFyKiBfSU9fd3JpdGVfcHRyOwogIGNoYXIqIF9JT193cml0ZV9lbmQ7CiAgY2hhciogX0lPX2J1 Zl9iYXNlOwogIGNoYXIqIF9JT19idWZfZW5kOwoKICBjaGFyICpfSU9fc2F2ZV9iYXNlOwogIGNo YXIgKl9JT19iYWNrdXBfYmFzZTsKICBjaGFyICpfSU9fc2F2ZV9lbmQ7CgogIHN0cnVjdCBfSU9f bWFya2VyICpfbWFya2VyczsKCiAgc3RydWN0IF9JT19GSUxFICpfY2hhaW47CgogIGludCBfZmls ZW5vOwogIGludCBfYmxrc2l6ZTsKICBfX29mZl90IF9vbGRfb2Zmc2V0OwoKCgogIHVuc2lnbmVk IHNob3J0IF9jdXJfY29sdW1uOwogIHNpZ25lZCBjaGFyIF92dGFibGVfb2Zmc2V0OwogIGNoYXIg X3Nob3J0YnVmWzFdOwoKCgogIF9JT19sb2NrX3QgKl9sb2NrOwojIDMwNiAiL3Vzci9pbmNsdWRl L2xpYmlvLmgiIDMKICBfX29mZjY0X3QgX29mZnNldDsKCgoKCgogIHZvaWQgKl9fcGFkMTsKICB2 b2lkICpfX3BhZDI7CgogIGludCBfbW9kZTsKCiAgY2hhciBfdW51c2VkMlsxNSAqIHNpemVvZiAo aW50KSAtIDIgKiBzaXplb2YgKHZvaWQgKildOwoKfTsKCgp0eXBlZGVmIHN0cnVjdCBfSU9fRklM RSBfSU9fRklMRTsKCgpzdHJ1Y3QgX0lPX0ZJTEVfcGx1czsKCmV4dGVybiBzdHJ1Y3QgX0lPX0ZJ TEVfcGx1cyBfSU9fMl8xX3N0ZGluXzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18y XzFfc3Rkb3V0XzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3RkZXJyXzsK IyAzNDUgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnR5cGVkZWYgX19zc2l6ZV90IF9faW9fcmVh ZF9mbiAodm9pZCAqX19jb29raWUsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMpOwoKCgoK CgoKdHlwZWRlZiBfX3NzaXplX3QgX19pb193cml0ZV9mbiAodm9pZCAqX19jb29raWUsIF9fY29u c3QgY2hhciAqX19idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBf X24pOwoKCgoKCgoKdHlwZWRlZiBpbnQgX19pb19zZWVrX2ZuICh2b2lkICpfX2Nvb2tpZSwgX19v ZmY2NF90ICpfX3BvcywgaW50IF9fdyk7CgoKdHlwZWRlZiBpbnQgX19pb19jbG9zZV9mbiAodm9p ZCAqX19jb29raWUpOwoKCiMgMzk3ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50 IF9fdW5kZXJmbG93IChfSU9fRklMRSAqKTsKZXh0ZXJuIGludCBfX3VmbG93IChfSU9fRklMRSAq KTsKZXh0ZXJuIGludCBfX292ZXJmbG93IChfSU9fRklMRSAqLCBpbnQpOwpleHRlcm4gd2ludF90 IF9fd3VuZGVyZmxvdyAoX0lPX0ZJTEUgKik7CmV4dGVybiB3aW50X3QgX193dWZsb3cgKF9JT19G SUxFICopOwpleHRlcm4gd2ludF90IF9fd292ZXJmbG93IChfSU9fRklMRSAqLCB3aW50X3QpOwoK IyA0MjcgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX2dldGMgKF9JT19G SUxFICpfX2ZwKTsKZXh0ZXJuIGludCBfSU9fcHV0YyAoaW50IF9fYywgX0lPX0ZJTEUgKl9fZnAp OwpleHRlcm4gaW50IF9JT19mZW9mIChfSU9fRklMRSAqX19mcCk7CmV4dGVybiBpbnQgX0lPX2Zl cnJvciAoX0lPX0ZJTEUgKl9fZnApOwoKZXh0ZXJuIGludCBfSU9fcGVla2NfbG9ja2VkIChfSU9f RklMRSAqX19mcCk7CgoKCgoKZXh0ZXJuIHZvaWQgX0lPX2Zsb2NrZmlsZSAoX0lPX0ZJTEUgKik7 CmV4dGVybiB2b2lkIF9JT19mdW5sb2NrZmlsZSAoX0lPX0ZJTEUgKik7CmV4dGVybiBpbnQgX0lP X2Z0cnlsb2NrZmlsZSAoX0lPX0ZJTEUgKik7CgojIDQ1MyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgi IDMKZXh0ZXJuIGludCBfSU9fdmZzY2FuZiAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCBj aGFyICogX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3Qs IGludCAqX19yZXN0cmljdCk7CmV4dGVybiBpbnQgX0lPX3ZmcHJpbnRmIChfSU9fRklMRSAqX19y ZXN0cmljdCwgY29uc3QgY2hhciAqX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAg IF9fZ251Y192YV9saXN0KTsKZXh0ZXJuIF9fc3NpemVfdCBfSU9fcGFkbiAoX0lPX0ZJTEUgKiwg aW50LCBfX3NzaXplX3QpOwpleHRlcm4gc2l6ZV90IF9JT19zZ2V0biAoX0lPX0ZJTEUgKiwgdm9p ZCAqLCBzaXplX3QpOwoKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla29mZiAoX0lPX0ZJTEUgKiwg X19vZmY2NF90LCBpbnQsIGludCk7CmV4dGVybiBfX29mZjY0X3QgX0lPX3NlZWtwb3MgKF9JT19G SUxFICosIF9fb2ZmNjRfdCwgaW50KTsKCmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVh IChfSU9fRklMRSAqKTsKCiMgNTggIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKdHlwZWRl ZiBfR19mcG9zX3QgZnBvc190OwojIDExMSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKCgoKZXh0 ZXJuIEZJTEUgKnN0ZGluOwpleHRlcm4gRklMRSAqc3Rkb3V0OwpleHRlcm4gRklMRSAqc3RkZXJy OwoKCgoKCgpleHRlcm4gaW50IHJlbW92ZSAoX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKTsKCmV4 dGVybiBpbnQgcmVuYW1lIChfX2NvbnN0IGNoYXIgKl9fb2xkLCBfX2NvbnN0IGNoYXIgKl9fbmV3 KTsKCgoKCmV4dGVybiBGSUxFICp0bXBmaWxlICh2b2lkKTsKIyAxNDIgIi91c3IvaW5jbHVkZS9z dGRpby5oIiAzCmV4dGVybiBjaGFyICp0bXBuYW0gKGNoYXIgKl9fcyk7CgoKCgpleHRlcm4gY2hh ciAqdG1wbmFtX3IgKGNoYXIgKl9fcyk7CiMgMTU5ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpl eHRlcm4gY2hhciAqdGVtcG5hbSAoX19jb25zdCBjaGFyICpfX2RpciwgX19jb25zdCBjaGFyICpf X3BmeCkKIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpleHRlcm4gaW50IGZjbG9z ZSAoRklMRSAqX19zdHJlYW0pOwoKZXh0ZXJuIGludCBmZmx1c2ggKEZJTEUgKl9fc3RyZWFtKTsK CgoKZXh0ZXJuIGludCBmZmx1c2hfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKTsKIyAxODIgIi91 c3IvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBGSUxFICpmb3BlbiAoX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fbW9kZXMpOwoKZXh0ZXJuIEZJTEUgKmZyZW9wZW4gKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3Ry aWN0IF9fc3RyZWFtKTsKIyAyMTIgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBGSUxF ICpmZG9wZW4gKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpOwojIDIzNSAiL3Vzci9p bmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIHZvaWQgc2V0YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9f c3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKTsKCgoKZXh0ZXJuIGludCBzZXR2YnVmIChG SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAg ICAgICAgICAgICAgIGludCBfX21vZGVzLCBzaXplX3QgX19uKTsKCgoKCmV4dGVybiB2b2lkIHNl dGJ1ZmZlciAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1 ZiwKICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zaXplKTsKCgpleHRlcm4gdm9pZCBz ZXRsaW5lYnVmIChGSUxFICpfX3N0cmVhbSk7CgoKCgpleHRlcm4gaW50IGZwcmludGYgKEZJTEUg Kl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pOwoKZXh0ZXJuIGludCBwcmludGYgKF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKTsKCmV4dGVybiBpbnQgc3ByaW50ZiAoY2hhciAq X19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fZm9ybWF0LCAuLi4pOwoKCmV4dGVybiBpbnQgdmZwcmludGYgKEZJTEUgKl9fcmVzdHJp Y3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAg ICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKTsKCmV4dGVybiBpbnQgdnByaW50ZiAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKOwoKZXh0 ZXJuIGludCB2c3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19h cmcpOwoKCgpleHRlcm4gaW50IHNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90 IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19mb3JtYXQsIC4uLikKIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAz LCA0KSkpOwoKZXh0ZXJuIGludCBfX3ZzbnByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNp emVfdCBfX21heGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKIF9fYXR0cmlidXRlX18gKChf X2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCAwKSkpOwpleHRlcm4gaW50IHZzbnByaW50ZiAoY2hh ciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heGxlbiwKICAgICAgICAgICAgICAgICAgICAg IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcp CiBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKTsKIyAzMDkg Ii91c3IvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgZnNjYW5mIChGSUxFICpfX3Jlc3Ry aWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fZm9ybWF0LCAuLi4pOwoKZXh0ZXJuIGludCBzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fZm9ybWF0LCAuLi4pOwoKZXh0ZXJuIGludCBzc2NhbmYgKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19mb3JtYXQsIC4uLik7CgojIDMzNSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGlu dCBmZ2V0YyAoRklMRSAqX19zdHJlYW0pOwpleHRlcm4gaW50IGdldGMgKEZJTEUgKl9fc3RyZWFt KTsKCgpleHRlcm4gaW50IGdldGNoYXIgKHZvaWQpOwoKCgoKCgoKZXh0ZXJuIGludCBnZXRjX3Vu bG9ja2VkIChGSUxFICpfX3N0cmVhbSk7CmV4dGVybiBpbnQgZ2V0Y2hhcl91bmxvY2tlZCAodm9p ZCk7CgoKCgpleHRlcm4gaW50IGZnZXRjX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSk7CgoKCgpl eHRlcm4gaW50IGZwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSk7CmV4dGVybiBpbnQgcHV0 YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pOwoKCmV4dGVybiBpbnQgcHV0Y2hhciAoaW50IF9f Yyk7CgoKCgoKCgpleHRlcm4gaW50IGZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0 cmVhbSk7CgoKCgpleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3Ry ZWFtKTsKZXh0ZXJuIGludCBwdXRjaGFyX3VubG9ja2VkIChpbnQgX19jKTsKCgoKCgpleHRlcm4g aW50IGdldHcgKEZJTEUgKl9fc3RyZWFtKTsKCgpleHRlcm4gaW50IHB1dHcgKGludCBfX3csIEZJ TEUgKl9fc3RyZWFtKTsKCgoKCmV4dGVybiBjaGFyICpmZ2V0cyAoY2hhciAqX19yZXN0cmljdCBf X3MsIGludCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCjsKCiMgNDAxICIvdXNyL2lu Y2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gY2hhciAqZ2V0cyAoY2hhciAqX19zKTsKCgojIDQyNSAi L3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBmcHV0cyAoX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fcywgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkKOwoKCgoKCgoKCmV4dGVy biBpbnQgcHV0cyAoX19jb25zdCBjaGFyICpfX3MpOwoKCgpleHRlcm4gaW50IHVuZ2V0YyAoaW50 IF9fYywgRklMRSAqX19zdHJlYW0pOwoKCgpleHRlcm4gc2l6ZV90IGZyZWFkICh2b2lkICpfX3Jl c3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICBzaXplX3Qg X19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKTsKCmV4dGVybiBzaXplX3QgZndyaXRlIChf X2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAg ICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fcyk7CgoKCmV4dGVybiBz aXplX3QgZnJlYWRfdW5sb2NrZWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3Np emUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVz dHJpY3QgX19zdHJlYW0pOwpleHRlcm4gc2l6ZV90IGZ3cml0ZV91bmxvY2tlZCAoX19jb25zdCB2 b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSk7CgoKCgpl eHRlcm4gaW50IGZzZWVrIChGSUxFICpfX3N0cmVhbSwgbG9uZyBpbnQgX19vZmYsIGludCBfX3do ZW5jZSk7CgpleHRlcm4gbG9uZyBpbnQgZnRlbGwgKEZJTEUgKl9fc3RyZWFtKTsKCmV4dGVybiB2 b2lkIHJld2luZCAoRklMRSAqX19zdHJlYW0pOwoKCgoKCgoKCgp0eXBlZGVmIF9fb2ZmX3Qgb2Zm X3Q7CiMgNDk1ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZnZXRwb3MgKEZJ TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3NfdCAqX19yZXN0cmljdCBfX3BvcykKOwoKZXh0 ZXJuIGludCBmc2V0cG9zIChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zX3QgKl9fcG9zKTsK IyA1MzEgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiB2b2lkIGNsZWFyZXJyIChGSUxF ICpfX3N0cmVhbSk7CgpleHRlcm4gaW50IGZlb2YgKEZJTEUgKl9fc3RyZWFtKTsKCmV4dGVybiBp bnQgZmVycm9yIChGSUxFICpfX3N0cmVhbSk7CgoKCmV4dGVybiB2b2lkIGNsZWFyZXJyX3VubG9j a2VkIChGSUxFICpfX3N0cmVhbSk7CmV4dGVybiBpbnQgZmVvZl91bmxvY2tlZCAoRklMRSAqX19z dHJlYW0pOwpleHRlcm4gaW50IGZlcnJvcl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pOwoKCgoK ZXh0ZXJuIHZvaWQgcGVycm9yIChfX2NvbnN0IGNoYXIgKl9fcyk7CgoKCgpleHRlcm4gaW50IHN5 c19uZXJyOwpleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IHN5c19lcnJsaXN0W107CiMgNTYy ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZpbGVubyAoRklMRSAqX19zdHJl YW0pOwoKCgoKZXh0ZXJuIGludCBmaWxlbm9fdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKTsKCgoK CgoKZXh0ZXJuIEZJTEUgKnBvcGVuIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCwgX19jb25zdCBj aGFyICpfX21vZGVzKTsKCgpleHRlcm4gaW50IHBjbG9zZSAoRklMRSAqX19zdHJlYW0pOwoKCgoK CmV4dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpfX3MpOwojIDYwOSAiL3Vzci9pbmNsdWRlL3N0 ZGlvLmgiIDMKZXh0ZXJuIHZvaWQgZmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSk7CgoKCmV4dGVy biBpbnQgZnRyeWxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSk7CgoKZXh0ZXJuIHZvaWQgZnVubG9j a2ZpbGUgKEZJTEUgKl9fc3RyZWFtKTsKIyA2MzEgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCiMg MzIgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvLmgiIDEgMwpleHRlcm4gX19pbmxpbmUgaW50CnZw cmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgX19nbnVjX3ZhX2xpc3QgX19h cmcpCnsKICByZXR1cm4gdmZwcmludGYgKHN0ZG91dCwgX19mbXQsIF9fYXJnKTsKfQoKCmV4dGVy biBfX2lubGluZSBpbnQKZ2V0Y2hhciAodm9pZCkKewogIHJldHVybiBfSU9fZ2V0YyAoc3RkaW4p Owp9CgoKCgpleHRlcm4gX19pbmxpbmUgaW50CmdldGNfdW5sb2NrZWQgKEZJTEUgKl9fZnApCnsK ICByZXR1cm4gKChfX2ZwKS0+X0lPX3JlYWRfcHRyID49IChfX2ZwKS0+X0lPX3JlYWRfZW5kID8g X191ZmxvdyAoX19mcCkgOiAqKHVuc2lnbmVkIGNoYXIgKikgKF9fZnApLT5fSU9fcmVhZF9wdHIr Kyk7Cn0KCgpleHRlcm4gX19pbmxpbmUgaW50CmdldGNoYXJfdW5sb2NrZWQgKHZvaWQpCnsKICBy ZXR1cm4gKChzdGRpbiktPl9JT19yZWFkX3B0ciA+PSAoc3RkaW4pLT5fSU9fcmVhZF9lbmQgPyBf X3VmbG93IChzdGRpbikgOiAqKHVuc2lnbmVkIGNoYXIgKikgKHN0ZGluKS0+X0lPX3JlYWRfcHRy KyspOwp9CgoKCgpleHRlcm4gX19pbmxpbmUgaW50CnB1dGNoYXIgKGludCBfX2MpCnsKICByZXR1 cm4gX0lPX3B1dGMgKF9fYywgc3Rkb3V0KTsKfQoKCgoKZXh0ZXJuIF9faW5saW5lIGludApmcHV0 Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pCnsKICByZXR1cm4gKCgoX19zdHJl YW0pLT5fSU9fd3JpdGVfcHRyID49IChfX3N0cmVhbSktPl9JT193cml0ZV9lbmQpID8gX19vdmVy ZmxvdyAoX19zdHJlYW0sICh1bnNpZ25lZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQgY2hhcikg KCooX19zdHJlYW0pLT5fSU9fd3JpdGVfcHRyKysgPSAoX19jKSkpOwp9CgoKCgoKZXh0ZXJuIF9f aW5saW5lIGludApwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkKewogIHJl dHVybiAoKChfX3N0cmVhbSktPl9JT193cml0ZV9wdHIgPj0gKF9fc3RyZWFtKS0+X0lPX3dyaXRl X2VuZCkgPyBfX292ZXJmbG93IChfX3N0cmVhbSwgKHVuc2lnbmVkIGNoYXIpIChfX2MpKSA6ICh1 bnNpZ25lZCBjaGFyKSAoKihfX3N0cmVhbSktPl9JT193cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0K CgpleHRlcm4gX19pbmxpbmUgaW50CnB1dGNoYXJfdW5sb2NrZWQgKGludCBfX2MpCnsKICByZXR1 cm4gKCgoc3Rkb3V0KS0+X0lPX3dyaXRlX3B0ciA+PSAoc3Rkb3V0KS0+X0lPX3dyaXRlX2VuZCkg PyBfX292ZXJmbG93IChzdGRvdXQsICh1bnNpZ25lZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQg Y2hhcikgKCooc3Rkb3V0KS0+X0lPX3dyaXRlX3B0cisrID0gKF9fYykpKTsKfQojIDExMCAiL3Vz ci9pbmNsdWRlL2JpdHMvc3RkaW8uaCIgMwpleHRlcm4gX19pbmxpbmUgaW50CmZlb2ZfdW5sb2Nr ZWQgKEZJTEUgKl9fc3RyZWFtKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X2ZsYWdzICYgMHgx MCkgIT0gMCk7Cn0KCgpleHRlcm4gX19pbmxpbmUgaW50CmZlcnJvcl91bmxvY2tlZCAoRklMRSAq X19zdHJlYW0pCnsKICByZXR1cm4gKCgoX19zdHJlYW0pLT5fZmxhZ3MgJiAweDIwKSAhPSAwKTsK fQojIDYzMSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCiMgNTggIi91c3IvaW5jbHVkZS9w eXRob24xLjUvUHl0aG9uLmgiIDIKCiMgMjggIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzCgoK CgoKCgoKCmV4dGVybiB2b2lkICptZW1jcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBf X24pOwoKCmV4dGVybiB2b2lkICptZW1tb3ZlICh2b2lkICpfX2Rlc3QsIF9fY29uc3Qgdm9pZCAq X19zcmMsIHNpemVfdCBfX24pCjsKCgoKCgpleHRlcm4gdm9pZCAqbWVtY2NweSAodm9pZCAqX19y ZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAg ICAgICAgICAgICAgIGludCBfX2MsIHNpemVfdCBfX24pCjsKCgoKCmV4dGVybiB2b2lkICptZW1z ZXQgKHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbik7CgoKZXh0ZXJuIGludCBtZW1jbXAg KF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXplX3QgX19uKQogX19h dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHZvaWQgKm1lbWNociAoX19jb25zdCB2 b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pCiBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p KTsKCiMgNzcgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3RyY3B5IChj aGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQo7 CgpleHRlcm4gY2hhciAqc3RybmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24p OwoKCmV4dGVybiBjaGFyICpzdHJjYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCjsKCmV4dGVybiBjaGFyICpzdHJuY2F0IChjaGFyICpf X3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLAogICAgICAg ICAgICAgICAgICAgICAgc2l6ZV90IF9fbik7CgoKZXh0ZXJuIGludCBzdHJjbXAgKF9fY29uc3Qg Y2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f KSk7CgpleHRlcm4gaW50IHN0cm5jbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFy ICpfX3MyLCBzaXplX3QgX19uKQogX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJu IGludCBzdHJjb2xsIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKIF9f YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHNpemVfdCBzdHJ4ZnJtIChjaGFyICpf X3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pOwoKIyAxMjAgIi91c3IvaW5jbHVkZS9zdHJpbmcu aCIgMwpleHRlcm4gY2hhciAqc3RyZHVwIChfX2NvbnN0IGNoYXIgKl9fcykgX19hdHRyaWJ1dGVf XyAoKF9fbWFsbG9jX18pKTsKIyAxNTUgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4g Y2hhciAqc3RyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgX19hdHRyaWJ1dGVfXyAo KF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3RycmNociAoX19jb25zdCBjaGFyICpfX3MsIGlu dCBfX2MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKIyAxNjcgIi91c3IvaW5jbHVkZS9z dHJpbmcuaCIgMwpleHRlcm4gc2l6ZV90IHN0cmNzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2Nv bnN0IGNoYXIgKl9fcmVqZWN0KQogX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJu IHNpemVfdCBzdHJzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0 KQogX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3RycGJyayAoX19j b25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiBfX2F0dHJpYnV0ZV9fICgo X19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFj aywgX19jb25zdCBjaGFyICpfX25lZWRsZSkKIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK IyAxODkgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3RydG9rIChjaGFy ICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pCjsKCgoK ZXh0ZXJuIGNoYXIgKl9fc3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAg ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAg ICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKTsKCmV4dGVybiBj aGFyICpzdHJ0b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX2RlbGltLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9f c2F2ZV9wdHIpOwojIDIyMCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBzaXplX3Qg c3RybGVuIChfX2NvbnN0IGNoYXIgKl9fcykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7Cgoj IDIzMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJlcnJvciAoaW50 IF9fZXJybnVtKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc3RyZXJyb3JfciAoaW50IF9fZXJybnVtLCBj aGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKTsKZXh0ZXJuIGNoYXIgKnN0cmVycm9yX3IgKGlu dCBfX2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1Zmxlbik7CgoKCgpleHRlcm4gdm9p ZCBfX2J6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24pOwoKCgpleHRlcm4gdm9pZCBiY29weSAo X19jb25zdCB2b2lkICpfX3NyYywgdm9pZCAqX19kZXN0LCBzaXplX3QgX19uKTsKCgpleHRlcm4g dm9pZCBiemVybyAodm9pZCAqX19zLCBzaXplX3QgX19uKTsKCgpleHRlcm4gaW50IGJjbXAgKF9f Y29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXplX3QgX19uKQogX19hdHRy aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKmluZGV4IChfX2NvbnN0IGNoYXIg Kl9fcywgaW50IF9fYykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIg KnJpbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIF9fYXR0cmlidXRlX18gKChfX3B1 cmVfXykpOwoKCgpleHRlcm4gaW50IF9fZmZzIChpbnQgX19pKSBfX2F0dHJpYnV0ZV9fICgoY29u c3QpKTsKZXh0ZXJuIGludCBmZnMgKGludCBfX2kpIF9fYXR0cmlidXRlX18gKChjb25zdCkpOwoK CgojIDI3NiAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBpbnQgX19zdHJjYXNlY21w IChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwpleHRlcm4gaW50IHN0cmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwg X19jb25zdCBjaGFyICpfX3MyKQogX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJu IGludCBzdHJuY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIs IHNpemVfdCBfX24pCiBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKIyAzMDAgIi91c3IvaW5j bHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3Ryc2VwIChjaGFyICoqX19yZXN0cmljdCBf X3N0cmluZ3AsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X2RlbGltKTsKIyAzNjMgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCgojIDUzICIvdXNyL2lu Y2x1ZGUvYml0cy9zdHJpbmcyLmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDEg MwojIDUzICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDIgMwojIDM3MSAiL3Vzci9pbmNs dWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4dGVybiB2b2lkICpfX3Jhd21lbWNociAoY29uc3Qgdm9p ZCAqX19zLCBpbnQgX19jKTsKIyAzOTUgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwpl eHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJjcHlfc21hbGwgKGNoYXIgKiwgX191aW50MTZfdCwg X191aW50MTZfdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3VpbnQz Ml90LCBfX3VpbnQzMl90LCBzaXplX3QpOwpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3RyY3B5 X3NtYWxsIChjaGFyICpfX2Rlc3QsCiAgICAgICAgICAgICAgICBfX3VpbnQxNl90IF9fc3JjMF8y LCBfX3VpbnQxNl90IF9fc3JjNF8yLAogICAgICAgICAgICAgICAgX191aW50MzJfdCBfX3NyYzBf NCwgX191aW50MzJfdCBfX3NyYzRfNCwKICAgICAgICAgICAgICAgIHNpemVfdCBfX3NyY2xlbikK ewogIHVuaW9uIHsKICAgIF9fdWludDMyX3QgX191aTsKICAgIF9fdWludDE2X3QgX191c2k7CiAg ICB1bnNpZ25lZCBjaGFyIF9fdWM7CiAgfSAqX191ID0gKHZvaWQgKikgX19kZXN0OwogIHN3aXRj aCAoKHVuc2lnbmVkIGludCkgX19zcmNsZW4pCiAgICB7CiAgICBjYXNlIDE6CiAgICAgIF9fdS0+ X191YyA9ICdcMCc7CiAgICAgIGJyZWFrOwogICAgY2FzZSAyOgogICAgICBfX3UtPl9fdXNpID0g X19zcmMwXzI7CiAgICAgIGJyZWFrOwogICAgY2FzZSAzOgogICAgICBfX3UtPl9fdXNpID0gX19z cmMwXzI7CiAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDIpOwogICAg ICBfX3UtPl9fdWMgPSAnXDAnOwogICAgICBicmVhazsKICAgIGNhc2UgNDoKICAgICAgX191LT5f X3VpID0gX19zcmMwXzQ7CiAgICAgIGJyZWFrOwogICAgY2FzZSA1OgogICAgICBfX3UtPl9fdWkg PSBfX3NyYzBfNDsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7 CiAgICAgIF9fdS0+X191YyA9ICdcMCc7CiAgICAgIGJyZWFrOwogICAgY2FzZSA2OgogICAgICBf X3UtPl9fdWkgPSBfX3NyYzBfNDsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikg X191ICsgNCk7CiAgICAgIF9fdS0+X191c2kgPSBfX3NyYzRfMjsKICAgICAgYnJlYWs7CiAgICBj YXNlIDc6CiAgICAgIF9fdS0+X191aSA9IF9fc3JjMF80OwogICAgICBfX3UgPSBfX2V4dGVuc2lv bl9fICgodm9pZCAqKSBfX3UgKyA0KTsKICAgICAgX191LT5fX3VzaSA9IF9fc3JjNF8yOwogICAg ICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyAyKTsKICAgICAgX191LT5fX3Vj ID0gJ1wwJzsKICAgICAgYnJlYWs7CiAgICBjYXNlIDg6CiAgICAgIF9fdS0+X191aSA9IF9fc3Jj MF80OwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsKICAgICAg X191LT5fX3VpID0gX19zcmM0XzQ7CiAgICAgIGJyZWFrOwogICAgfQogIHJldHVybiBfX2Rlc3Q7 Cn0KIyA4NzIgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gX19pbmxpbmUg c2l6ZV90IF9fc3RyY3Nwbl9jMSAoX19jb25zdCBjaGFyICpfX3MsIGNoYXIgX19yZWplY3QpOwpl eHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9fc3RyY3Nwbl9jMSAoX19jb25zdCBjaGFyICpfX3MsIGNo YXIgX19yZWplY3QpCnsKICByZWdpc3RlciBzaXplX3QgX19yZXN1bHQgPSAwOwogIHdoaWxlIChf X3NbX19yZXN1bHRdICE9ICdcMCcgJiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVjdCkKICAgICsr X19yZXN1bHQ7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9f c3RyY3Nwbl9jMiAoX19jb25zdCBjaGFyICpfX3MsIGNoYXIgX19yZWplY3QxLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBfX3JlamVjdDIpOwpleHRlcm4gX19pbmxp bmUgc2l6ZV90Cl9fc3RyY3Nwbl9jMiAoX19jb25zdCBjaGFyICpfX3MsIGNoYXIgX19yZWplY3Qx LCBjaGFyIF9fcmVqZWN0MikKewogIHJlZ2lzdGVyIHNpemVfdCBfX3Jlc3VsdCA9IDA7CiAgd2hp bGUgKF9fc1tfX3Jlc3VsdF0gIT0gJ1wwJyAmJiBfX3NbX19yZXN1bHRdICE9IF9fcmVqZWN0MQog ICAgICAgICAmJiBfX3NbX19yZXN1bHRdICE9IF9fcmVqZWN0MikKICAgICsrX19yZXN1bHQ7CiAg cmV0dXJuIF9fcmVzdWx0Owp9CgpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9fc3RyY3Nwbl9jMyAo X19jb25zdCBjaGFyICpfX3MsIGNoYXIgX19yZWplY3QxLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2hhciBfX3JlamVjdDIsIGNoYXIgX19yZWplY3QzKTsKZXh0ZXJuIF9f aW5saW5lIHNpemVfdApfX3N0cmNzcG5fYzMgKF9fY29uc3QgY2hhciAqX19zLCBjaGFyIF9fcmVq ZWN0MSwgY2hhciBfX3JlamVjdDIsCiAgICAgICAgICAgICAgY2hhciBfX3JlamVjdDMpCnsKICBy ZWdpc3RlciBzaXplX3QgX19yZXN1bHQgPSAwOwogIHdoaWxlIChfX3NbX19yZXN1bHRdICE9ICdc MCcgJiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVjdDEKICAgICAgICAgJiYgX19zW19fcmVzdWx0 XSAhPSBfX3JlamVjdDIgJiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVjdDMpCiAgICArK19fcmVz dWx0OwogIHJldHVybiBfX3Jlc3VsdDsKfQojIDkyNyAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5n Mi5oIiAzCmV4dGVybiBfX2lubGluZSBzaXplX3QgX19zdHJzcG5fYzEgKF9fY29uc3QgY2hhciAq X19zLCBjaGFyIF9fYWNjZXB0KTsKZXh0ZXJuIF9faW5saW5lIHNpemVfdApfX3N0cnNwbl9jMSAo X19jb25zdCBjaGFyICpfX3MsIGNoYXIgX19hY2NlcHQpCnsKICByZWdpc3RlciBzaXplX3QgX19y ZXN1bHQgPSAwOwoKICB3aGlsZSAoX19zW19fcmVzdWx0XSA9PSBfX2FjY2VwdCkKICAgICsrX19y ZXN1bHQ7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9fc3Ry c3BuX2MyIChfX2NvbnN0IGNoYXIgKl9fcywgY2hhciBfX2FjY2VwdDEsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19hY2NlcHQyKTsKZXh0ZXJuIF9faW5saW5lIHNp emVfdApfX3N0cnNwbl9jMiAoX19jb25zdCBjaGFyICpfX3MsIGNoYXIgX19hY2NlcHQxLCBjaGFy IF9fYWNjZXB0MikKewogIHJlZ2lzdGVyIHNpemVfdCBfX3Jlc3VsdCA9IDA7CgogIHdoaWxlIChf X3NbX19yZXN1bHRdID09IF9fYWNjZXB0MSB8fCBfX3NbX19yZXN1bHRdID09IF9fYWNjZXB0MikK ICAgICsrX19yZXN1bHQ7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgpleHRlcm4gX19pbmxpbmUgc2l6 ZV90IF9fc3Ryc3BuX2MzIChfX2NvbnN0IGNoYXIgKl9fcywgY2hhciBfX2FjY2VwdDEsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19hY2NlcHQyLCBjaGFyIF9fYWNj ZXB0Myk7CmV4dGVybiBfX2lubGluZSBzaXplX3QKX19zdHJzcG5fYzMgKF9fY29uc3QgY2hhciAq X19zLCBjaGFyIF9fYWNjZXB0MSwgY2hhciBfX2FjY2VwdDIsIGNoYXIgX19hY2NlcHQzKQp7CiAg cmVnaXN0ZXIgc2l6ZV90IF9fcmVzdWx0ID0gMDsKCiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gPT0g X19hY2NlcHQxIHx8IF9fc1tfX3Jlc3VsdF0gPT0gX19hY2NlcHQyCiAgICAgICAgIHx8IF9fc1tf X3Jlc3VsdF0gPT0gX19hY2NlcHQzKQogICAgKytfX3Jlc3VsdDsKICByZXR1cm4gX19yZXN1bHQ7 Cn0KIyA5ODIgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gX19pbmxpbmUg Y2hhciAqX19zdHJwYnJrX2MyIChfX2NvbnN0IGNoYXIgKl9fcywgY2hhciBfX2FjY2VwdDEsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIF9fYWNjZXB0Mik7CmV4dGVy biBfX2lubGluZSBjaGFyICoKX19zdHJwYnJrX2MyIChfX2NvbnN0IGNoYXIgKl9fcywgY2hhciBf X2FjY2VwdDEsIGNoYXIgX19hY2NlcHQyKQp7CgogIHdoaWxlICgqX19zICE9ICdcMCcgJiYgKl9f cyAhPSBfX2FjY2VwdDEgJiYgKl9fcyAhPSBfX2FjY2VwdDIpCiAgICArK19fczsKICByZXR1cm4g Kl9fcyA9PSAnXDAnID8gKCh2b2lkICopMCkgOiAoY2hhciAqKSAoc2l6ZV90KSBfX3M7Cn0KCmV4 dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnBicmtfYzMgKF9fY29uc3QgY2hhciAqX19zLCBjaGFy IF9fYWNjZXB0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19h Y2NlcHQyLCBjaGFyIF9fYWNjZXB0Myk7CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJwYnJr X2MzIChfX2NvbnN0IGNoYXIgKl9fcywgY2hhciBfX2FjY2VwdDEsIGNoYXIgX19hY2NlcHQyLAog ICAgICAgICAgICAgIGNoYXIgX19hY2NlcHQzKQp7CgogIHdoaWxlICgqX19zICE9ICdcMCcgJiYg Kl9fcyAhPSBfX2FjY2VwdDEgJiYgKl9fcyAhPSBfX2FjY2VwdDIKICAgICAgICAgJiYgKl9fcyAh PSBfX2FjY2VwdDMpCiAgICArK19fczsKICByZXR1cm4gKl9fcyA9PSAnXDAnID8gKCh2b2lkICop MCkgOiAoY2hhciAqKSAoc2l6ZV90KSBfX3M7Cn0KIyAxMDQzICIvdXNyL2luY2x1ZGUvYml0cy9z dHJpbmcyLmgiIDMKZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3RydG9rX3JfMWMgKGNoYXIgKl9f cywgY2hhciBfX3NlcCwgY2hhciAqKl9fbmV4dHApOwpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9f c3RydG9rX3JfMWMgKGNoYXIgKl9fcywgY2hhciBfX3NlcCwgY2hhciAqKl9fbmV4dHApCnsKICBj aGFyICpfX3Jlc3VsdDsKICBpZiAoX19zID09ICgodm9pZCAqKTApKQogICAgX19zID0gKl9fbmV4 dHA7CiAgd2hpbGUgKCpfX3MgPT0gX19zZXApCiAgICArK19fczsKICBpZiAoKl9fcyA9PSAnXDAn KQogICAgX19yZXN1bHQgPSAoKHZvaWQgKikwKTsKICBlbHNlCiAgICB7CiAgICAgIF9fcmVzdWx0 ID0gX19zOwogICAgICB3aGlsZSAoKl9fcyAhPSAnXDAnICYmICpfX3MgIT0gX19zZXApCiAgICAg ICAgKytfX3M7CiAgICAgIGlmICgqX19zID09ICdcMCcpCiAgICAgICAgKl9fbmV4dHAgPSBfX3M7 CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAqX19zID0gJ1wwJzsKICAgICAgICAgICpf X25leHRwID0gX19zICsgMTsKICAgICAgICB9CiAgICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9CiMg MTA5MyAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4dGVybiBfX2lubGluZSBjaGFy ICpfX3N0cnNlcF8xYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVjdCk7CmV4dGVybiBfX2lubGlu ZSBjaGFyICoKX19zdHJzZXBfMWMgKGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QpCnsKICByZWdp c3RlciBjaGFyICpfX3JldHZhbCA9ICpfX3M7CiAgaWYgKF9fcmV0dmFsID09ICgodm9pZCAqKTAp KQogICAgcmV0dXJuICpfX3MgPSAoKHZvaWQgKikwKTsKICBpZiAoKl9fcmV0dmFsID09IF9fcmVq ZWN0KQogICAgKigqX19zKSsrID0gJ1wwJzsKICBlbHNlCiAgICBpZiAoKCpfX3MgPSAoX19leHRl bnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKF9fcmVqZWN0KSAmJiAoX19yZWplY3QpID09 ICdcMCcgPyAoY2hhciAqKSBfX3Jhd21lbWNociAoX19yZXR2YWwsIF9fcmVqZWN0KSA6IHN0cmNo ciAoX19yZXR2YWwsIF9fcmVqZWN0KSkpKSAhPSAoKHZvaWQgKikwKSkKICAgICAgKigqX19zKSsr ID0gJ1wwJzsKICAgIGVsc2UKICAgICAgKl9fcyA9ICgodm9pZCAqKTApOwogIHJldHVybiBfX3Jl dHZhbDsKfQoKZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3Ryc2VwXzJjIChjaGFyICoqX19zLCBj aGFyIF9fcmVqZWN0MSwgY2hhciBfX3JlamVjdDIpOwpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9f c3Ryc2VwXzJjIChjaGFyICoqX19zLCBjaGFyIF9fcmVqZWN0MSwgY2hhciBfX3JlamVjdDIpCnsK ICByZWdpc3RlciBjaGFyICpfX3JldHZhbCA9ICpfX3M7CiAgaWYgKF9fcmV0dmFsID09ICgodm9p ZCAqKTApKQogICAgcmV0dXJuICpfX3MgPSAoKHZvaWQgKikwKTsKICBpZiAoKl9fcmV0dmFsID09 IF9fcmVqZWN0MSB8fCAqX19yZXR2YWwgPT0gX19yZWplY3QyKQogICAgKigqX19zKSsrID0gJ1ww JzsKICBlbHNlCiAgICB7CiAgICAgIHJlZ2lzdGVyIGNoYXIgKl9fY3AgPSBfX3JldHZhbDsKICAg ICAgd2hpbGUgKCpfX2NwICE9ICdcMCcgJiYgKl9fY3AgIT0gX19yZWplY3QxICYmICpfX2NwICE9 IF9fcmVqZWN0MikKICAgICAgICArK19fY3A7CiAgICAgIGlmICgqX19jcCAhPSAnXDAnKQogICAg ICAgIHsKICAgICAgICAgICpfX3MgPSBfX2NwOwogICAgICAgICAgKigqX19zKSsrID0gJ1wwJzsK ICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICAqX19zID0gKCh2b2lkICopMCk7CiAgICB9CiAg cmV0dXJuIF9fcmV0dmFsOwp9CgpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJzZXBfM2MgKGNo YXIgKipfX3MsIGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0MiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjaGFyIF9fcmVqZWN0Myk7CmV4dGVybiBfX2lubGluZSBjaGFy ICoKX19zdHJzZXBfM2MgKGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0 MiwgY2hhciBfX3JlamVjdDMpCnsKICByZWdpc3RlciBjaGFyICpfX3JldHZhbCA9ICpfX3M7CiAg aWYgKF9fcmV0dmFsID09ICgodm9pZCAqKTApKQogICAgcmV0dXJuICpfX3MgPSAoKHZvaWQgKikw KTsKICBpZiAoKl9fcmV0dmFsID09IF9fcmVqZWN0MSB8fCAqX19yZXR2YWwgPT0gX19yZWplY3Qy CiAgICAgIHx8ICpfX3JldHZhbCA9PSBfX3JlamVjdDMpCiAgICAqKCpfX3MpKysgPSAnXDAnOwog IGVsc2UKICAgIHsKICAgICAgcmVnaXN0ZXIgY2hhciAqX19jcCA9IF9fcmV0dmFsOwogICAgICB3 aGlsZSAoKl9fY3AgIT0gJ1wwJyAmJiAqX19jcCAhPSBfX3JlamVjdDEgJiYgKl9fY3AgIT0gX19y ZWplY3QyCiAgICAgICAgICAgICAmJiAqX19jcCAhPSBfX3JlamVjdDMpCiAgICAgICAgKytfX2Nw OwogICAgICBpZiAoKl9fY3AgIT0gJ1wwJykKICAgICAgICB7CiAgICAgICAgICAqX19zID0gX19j cDsKICAgICAgICAgICooKl9fcykrKyA9ICdcMCc7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAg ICAgKl9fcyA9ICgodm9pZCAqKTApOwogICAgfQogIHJldHVybiBfX3JldHZhbDsKfQoKZXh0ZXJu IF9faW5saW5lIGNoYXIgKl9fc3Ryc2VwX2cgKGNoYXIgKipfX3MsIF9fY29uc3QgY2hhciAqX19y ZWplY3QpOwpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3Ryc2VwX2cgKGNoYXIgKipfX3MsIF9f Y29uc3QgY2hhciAqX19yZWplY3QpCnsKICByZWdpc3RlciBjaGFyICpfX3JldHZhbCA9ICpfX3M7 CiAgaWYgKF9fcmV0dmFsID09ICgodm9pZCAqKTApKQogICAgcmV0dXJuICgodm9pZCAqKTApOwog IGlmICgoKl9fcyA9IF9fZXh0ZW5zaW9uX18gKHsgY2hhciBfX2EwLCBfX2ExLCBfX2EyOyAoX19i dWlsdGluX2NvbnN0YW50X3AgKF9fcmVqZWN0KSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgo X19yZWplY3QpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKF9fcmVqZWN0KSA9PSAxKSA/ ICgoX19hMCA9ICgoX19jb25zdCBjaGFyICopIChfX3JlamVjdCkpWzBdLCBfX2EwID09ICdcMCcp ID8gKCh2b2lkICopMCkgOiAoKF9fYTEgPSAoKF9fY29uc3QgY2hhciAqKSAoX19yZWplY3QpKVsx XSwgX19hMSA9PSAnXDAnKSA/IChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAo X19hMCkgJiYgKF9fYTApID09ICdcMCcgPyAoY2hhciAqKSBfX3Jhd21lbWNociAoX19yZXR2YWws IF9fYTApIDogc3RyY2hyIChfX3JldHZhbCwgX19hMCkpKSA6ICgoX19hMiA9ICgoX19jb25zdCBj aGFyICopIChfX3JlamVjdCkpWzJdLCBfX2EyID09ICdcMCcpID8gX19zdHJwYnJrX2MyIChfX3Jl dHZhbCwgX19hMCwgX19hMSkgOiAoKChfX2NvbnN0IGNoYXIgKikgKF9fcmVqZWN0KSlbM10gPT0g J1wwJyA/IF9fc3RycGJya19jMyAoX19yZXR2YWwsIF9fYTAsIF9fYTEsIF9fYTIpIDogc3RycGJy ayAoX19yZXR2YWwsIF9fcmVqZWN0KSkpKSkgOiBzdHJwYnJrIChfX3JldHZhbCwgX19yZWplY3Qp KTsgfSkpICE9ICgodm9pZCAqKTApKQogICAgKigqX19zKSsrID0gJ1wwJzsKICByZXR1cm4gX19y ZXR2YWw7Cn0KIyAxMTg3ICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKIyAzNCAiL3Vz ci9pbmNsdWRlL3N0ZGxpYi5oIiAxIDMKCiMgNTI2ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMK ZXh0ZXJuIHZvaWQgKm1hbGxvYyAoc2l6ZV90IF9fc2l6ZSkgX19hdHRyaWJ1dGVfXyAoKF9fbWFs bG9jX18pKTsKCmV4dGVybiB2b2lkICpjYWxsb2MgKHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19z aXplKQogX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKIyA4NDYgIi91c3IvaW5jbHVkZS9z dGRsaWIuaCIgMwojIDExODcgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMiAzCgoKCgpl eHRlcm4gY2hhciAqX19zdHJkdXAgKF9fY29uc3QgY2hhciAqX19zdHJpbmcpIF9fYXR0cmlidXRl X18gKChfX21hbGxvY19fKSk7CiMgMTIxMCAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAz CmV4dGVybiBjaGFyICpfX3N0cm5kdXAgKF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBf X24pCiBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDM2NiAiL3Vzci9pbmNsdWRlL3N0 cmluZy5oIiAyIDMKCgoKIyA1OSAiL3Vzci9pbmNsdWRlL3B5dGhvbjEuNS9QeXRob24uaCIgMgoK IyAzMiAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDEgMwoKCgoKCiMgMjYgIi91c3IvaW5jbHVkZS9i aXRzL2Vycm5vLmgiIDEgMwojIDUgIi91c3IvaW5jbHVkZS9saW51eC9lcnJuby5oIiAxIDMKIyAy NiAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMiAzCiMgMzYgIi91c3IvaW5jbHVkZS9iaXRz L2Vycm5vLmgiIDMKZXh0ZXJuIGludCBlcnJubzsKCgpleHRlcm4gaW50ICpfX2Vycm5vX2xvY2F0 aW9uICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgojIDM3ICIvdXNyL2luY2x1 ZGUvZXJybm8uaCIgMiAzCiMgNTkgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAzCiMgNjAgIi91c3Iv aW5jbHVkZS9weXRob24xLjUvUHl0aG9uLmgiIDIKCgojIDM0ICIvdXNyL2luY2x1ZGUvc3RkbGli LmgiIDEgMwoKIyA5NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCnR5cGVkZWYgc3RydWN0CiAg ewogICAgaW50IHF1b3Q7CiAgICBpbnQgcmVtOwogIH0gZGl2X3Q7CgoKCnR5cGVkZWYgc3RydWN0 CiAgewogICAgbG9uZyBpbnQgcXVvdDsKICAgIGxvbmcgaW50IHJlbTsKICB9IGxkaXZfdDsKIyAx MzMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gc2l6ZV90IF9fY3R5cGVfZ2V0X21i X2N1cl9tYXggKHZvaWQpOwoKCgpleHRlcm4gZG91YmxlIGF0b2YgKF9fY29uc3QgY2hhciAqX19u cHRyKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgYXRvaSAoX19jb25z dCBjaGFyICpfX25wdHIpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGxvbmcg aW50IGF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRyKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p KTsKCgoKX19leHRlbnNpb25fXyBleHRlcm4gbG9uZyBsb25nIGludCBhdG9sbCAoX19jb25zdCBj aGFyICpfX25wdHIpCiBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGRvdWJs ZSBzdHJ0b2QgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cik7CgojIDE2MyAiL3Vzci9pbmNsdWRl L3N0ZGxpYi5oIiAzCmV4dGVybiBsb25nIGludCBzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9f ZW5kcHRyLCBpbnQgX19iYXNlKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3VsIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCjsKCgoKX19l eHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b3EgKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz dHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWdu ZWQgbG9uZyBsb25nIGludCBzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmlj dCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKOwoKCgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25n IGxvbmcgaW50IHN0cnRvbGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQg X19iYXNlKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3Ry dG91bGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9f YmFzZSkKOwojIDI1MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBkb3VibGUgX19z dHJ0b2RfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQg X19ncm91cCkKOwpleHRlcm4gZmxvYXQgX19zdHJ0b2ZfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq Kl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQo7CmV4dGVybiBsb25nIGRvdWJsZSBf X3N0cnRvbGRfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19ncm91cCk7 CgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f cmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IF9fYmFzZSwgaW50IF9fZ3JvdXApOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19zdHJ0 b3VsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu ZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f YmFzZSwgaW50IF9fZ3JvdXApOwoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGlu dCBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3Qg X19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f YmFzZSwgaW50IF9fZ3JvdXApOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25n IGxvbmcgaW50IF9fc3RydG91bGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19ucHRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApCjsKIyAyOTQgIi91c3Iv aW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gX19pbmxpbmUgZG91YmxlCnN0cnRvZCAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpCnsK ICByZXR1cm4gX19zdHJ0b2RfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOwp9CmV4dGVy biBfX2lubGluZSBsb25nIGludApzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w dHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgIGludCBfX2Jhc2UpCnsKICBy ZXR1cm4gX19zdHJ0b2xfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0K ZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgaW50CnN0cnRvdWwgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICBp bnQgX19iYXNlKQp7CiAgcmV0dXJuIF9fc3RydG91bF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0 ciwgX19iYXNlLCAwKTsKfQoKIyAzMjYgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpfX2V4dGVu c2lvbl9fIGV4dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRvcSAoX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAg aW50IF9fYmFzZSkKewogIHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRw dHIsIF9fYmFzZSwgMCk7Cn0KX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWduZWQg bG9uZyBsb25nIGludApzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBj aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkKewogIHJldHVy biBfX3N0cnRvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoK Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKc3RydG9sbCAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIs CiAgICAgICAgIGludCBfX2Jhc2UpCnsKICByZXR1cm4gX19zdHJ0b2xsX2ludGVybmFsIChfX25w dHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5l IHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKc3RydG91bGwgKF9fY29uc3QgY2hhciAqIF9fcmVzdHJp Y3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgIGludCBfX2Jh c2UpCnsKICByZXR1cm4gX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19i YXNlLCAwKTsKfQoKCmV4dGVybiBfX2lubGluZSBkb3VibGUKYXRvZiAoX19jb25zdCBjaGFyICpf X25wdHIpCnsKICByZXR1cm4gc3RydG9kIChfX25wdHIsIChjaGFyICoqKSAoKHZvaWQgKikwKSk7 Cn0KZXh0ZXJuIF9faW5saW5lIGludAphdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKewogIHJl dHVybiAoaW50KSBzdHJ0b2wgKF9fbnB0ciwgKGNoYXIgKiopICgodm9pZCAqKTApLCAxMCk7Cn0K ZXh0ZXJuIF9faW5saW5lIGxvbmcgaW50CmF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRyKQp7CiAg cmV0dXJuIHN0cnRvbCAoX19ucHRyLCAoY2hhciAqKikgKCh2b2lkICopMCksIDEwKTsKfQoKCl9f ZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKYXRvbGwgKF9fY29uc3Qg Y2hhciAqX19ucHRyKQp7CiAgcmV0dXJuIHN0cnRvbGwgKF9fbnB0ciwgKGNoYXIgKiopICgodm9p ZCAqKTApLCAxMCk7Cn0KIyAzODUgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hh ciAqbDY0YSAobG9uZyBpbnQgX19uKTsKCgpleHRlcm4gbG9uZyBpbnQgYTY0bCAoX19jb25zdCBj aGFyICpfX3MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgojIDI4ICIvdXNyL2luY2x1 ZGUvc3lzL3R5cGVzLmgiIDEgMwoKCgoKCnR5cGVkZWYgX191X2NoYXIgdV9jaGFyOwp0eXBlZGVm IF9fdV9zaG9ydCB1X3Nob3J0Owp0eXBlZGVmIF9fdV9pbnQgdV9pbnQ7CnR5cGVkZWYgX191X2xv bmcgdV9sb25nOwp0eXBlZGVmIF9fcXVhZF90IHF1YWRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IHVf cXVhZF90Owp0eXBlZGVmIF9fZnNpZF90IGZzaWRfdDsKCgp0eXBlZGVmIF9fbG9mZl90IGxvZmZf dDsKCgoKdHlwZWRlZiBfX2lub190IGlub190OwojIDU4ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVz LmgiIDMKdHlwZWRlZiBfX2Rldl90IGRldl90OwoKCgoKdHlwZWRlZiBfX2dpZF90IGdpZF90OwoK CgoKdHlwZWRlZiBfX21vZGVfdCBtb2RlX3Q7CgoKCgp0eXBlZGVmIF9fbmxpbmtfdCBubGlua190 OwoKCgoKdHlwZWRlZiBfX3VpZF90IHVpZF90OwojIDk2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVz LmgiIDMKdHlwZWRlZiBfX3BpZF90IHBpZF90OwoKCgoKdHlwZWRlZiBfX2lkX3QgaWRfdDsKCgoK CnR5cGVkZWYgX19zc2l6ZV90IHNzaXplX3Q7CgoKCgp0eXBlZGVmIF9fZGFkZHJfdCBkYWRkcl90 Owp0eXBlZGVmIF9fY2FkZHJfdCBjYWRkcl90OwoKCgp0eXBlZGVmIF9fa2V5X3Qga2V5X3Q7CiMg MTI3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyA3MSAiL3Vzci9pbmNsdWRlL3RpbWUu aCIgMSAzCnR5cGVkZWYgX190aW1lX3QgdGltZV90OwoKIyA4MiAiL3Vzci9pbmNsdWRlL3RpbWUu aCIgMwp0eXBlZGVmIF9fY2xvY2tpZF90IGNsb2NraWRfdDsKCiMgOTMgIi91c3IvaW5jbHVkZS90 aW1lLmgiIDMKdHlwZWRlZiBfX3RpbWVyX3QgdGltZXJfdDsKCiMgMTI3ICIvdXNyL2luY2x1ZGUv c3lzL3R5cGVzLmgiIDIgMwojIDE0MSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCgoKCnR5 cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50 IHVzaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKIyAxODQgIi91c3IvaW5jbHVkZS9z eXMvdHlwZXMuaCIgMwp0eXBlZGVmIGludCBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9f IChfX1FJX18pKSk7CnR5cGVkZWYgaW50IGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9f IChfX0hJX18pKSk7CnR5cGVkZWYgaW50IGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9f IChfX1NJX18pKSk7CnR5cGVkZWYgaW50IGludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9f IChfX0RJX18pKSk7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ4X3QgX19hdHRyaWJ1dGVf XyAoKF9fbW9kZV9fIChfX1FJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MTZfdCBf X2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQg dV9pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVu c2lnbmVkIGludCB1X2ludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7 Cgp0eXBlZGVmIGludCByZWdpc3Rlcl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX193b3Jk X18pKSk7CgoKCgojIDIxMCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgMzIgIi91c3Iv aW5jbHVkZS9zeXMvc2VsZWN0LmgiIDEgMwoKCgojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9zaWdz ZXQuaCIgMSAzCnR5cGVkZWYgaW50IF9fc2lnX2F0b21pY190OwoKCgoKdHlwZWRlZiBzdHJ1Y3QK ICB7CiAgICB1bnNpZ25lZCBsb25nIGludCBfX3ZhbFsoMTAyNCAvICg4ICogc2l6ZW9mICh1bnNp Z25lZCBsb25nIGludCkpKV07CiAgfSBfX3NpZ3NldF90OwoKIyAzNSAiL3Vzci9pbmNsdWRlL3N5 cy9zZWxlY3QuaCIgMiAzCgoKCgojIDEwNSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCnN0cnVj dCB0aW1lc3BlYwogIHsKICAgIGxvbmcgaW50IHR2X3NlYzsKICAgIGxvbmcgaW50IHR2X25zZWM7 CiAgfTsKCiMgMzkgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCgoKCgoKc3RydWN0 IHRpbWV2YWw7Cgp0eXBlZGVmIF9fZmRfbWFzayBmZF9tYXNrOwoKCnR5cGVkZWYgX19mZF9zZXQg ZmRfc2V0OwoKCiMgNzQgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKZXh0ZXJuIGludCBz ZWxlY3QgKGludCBfX25mZHMsIF9fZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywKICAgICAg ICAgICAgICAgICAgIF9fZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3JpdGVmZHMsCiAgICAgICAgICAg ICAgICAgICBfX2ZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAgICAgICAgICAg ICAgIHN0cnVjdCB0aW1ldmFsICpfX3Jlc3RyaWN0IF9fdGltZW91dCk7CgojIDkyICIvdXNyL2lu Y2x1ZGUvc3lzL3NlbGVjdC5oIiAzCiMgMjEwICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIg MwoKCgojIDIyNCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19ibGtjbnRf dCBibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzYmxrY250X3QgZnNibGtjbnRfdDsKCgoKdHlwZWRl ZiBfX2ZzZmlsY250X3QgZnNmaWxjbnRfdDsKIyAyNTYgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMu aCIgMwojIDM5MiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCgoKZXh0ZXJuIGludDMy X3QgcmFuZG9tICh2b2lkKTsKCgpleHRlcm4gdm9pZCBzcmFuZG9tICh1bnNpZ25lZCBpbnQgX19z ZWVkKTsKCgoKCgpleHRlcm4gY2hhciAqaW5pdHN0YXRlICh1bnNpZ25lZCBpbnQgX19zZWVkLCBj aGFyICpfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGF0ZWxl bik7CgoKCmV4dGVybiBjaGFyICpzZXRzdGF0ZSAoY2hhciAqX19zdGF0ZWJ1Zik7CgoKCgoKCgpz dHJ1Y3QgcmFuZG9tX2RhdGEKICB7CiAgICBpbnQzMl90ICpmcHRyOwogICAgaW50MzJfdCAqcnB0 cjsKICAgIGludDMyX3QgKnN0YXRlOwogICAgaW50IHJhbmRfdHlwZTsKICAgIGludCByYW5kX2Rl ZzsKICAgIGludCByYW5kX3NlcDsKICAgIGludDMyX3QgKmVuZF9wdHI7CiAgfTsKCmV4dGVybiBp bnQgcmFuZG9tX3IgKHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAg ICAgICAgICAgICAgICAgaW50MzJfdCAqX19yZXN0cmljdCBfX3Jlc3VsdCk7CgpleHRlcm4gaW50 IHNyYW5kb21fciAodW5zaWduZWQgaW50IF9fc2VlZCwgc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1 Zik7CgpleHRlcm4gaW50IGluaXRzdGF0ZV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpf X3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0 YXRlbGVuLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVz dHJpY3QgX19idWYpOwoKZXh0ZXJuIGludCBzZXRzdGF0ZV9yIChjaGFyICpfX3Jlc3RyaWN0IF9f c3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jl c3RyaWN0IF9fYnVmKTsKCgoKCgpleHRlcm4gaW50IHJhbmQgKHZvaWQpOwoKZXh0ZXJuIHZvaWQg c3JhbmQgKHVuc2lnbmVkIGludCBfX3NlZWQpOwoKCgpleHRlcm4gaW50IHJhbmRfciAodW5zaWdu ZWQgaW50ICpfX3NlZWQpOwoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4ICh2b2lkKTsKZXh0 ZXJuIGRvdWJsZSBlcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSk7CgoKZXh0 ZXJuIGxvbmcgaW50IGxyYW5kNDggKHZvaWQpOwpleHRlcm4gbG9uZyBpbnQgbnJhbmQ0OCAodW5z aWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pOwoKCmV4dGVybiBsb25nIGludCBtcmFuZDQ4ICh2 b2lkKTsKZXh0ZXJuIGxvbmcgaW50IGpyYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJp WzNdKTsKCgpleHRlcm4gdm9pZCBzcmFuZDQ4IChsb25nIGludCBfX3NlZWR2YWwpOwpleHRlcm4g dW5zaWduZWQgc2hvcnQgaW50ICpzZWVkNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZb M10pOwpleHRlcm4gdm9pZCBsY29uZzQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSk7 CgoKc3RydWN0IGRyYW5kNDhfZGF0YQogIHsKICAgIHVuc2lnbmVkIHNob3J0IGludCB4WzNdOwog ICAgdW5zaWduZWQgc2hvcnQgaW50IGFbM107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgYzsKICAg IHVuc2lnbmVkIHNob3J0IGludCBvbGRfeFszXTsKICAgIGludCBpbml0OwogIH07CgoKCmV4dGVy biBpbnQgZHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVy LAogICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KTsKZXh0 ZXJuIGludCBlcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwK ICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqX19yZXN0cmljdCBfX3Jlc3VsdCk7CgoKZXh0 ZXJuIGludCBscmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZm ZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCk7 CmV4dGVybiBpbnQgbnJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZm ZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCk7 CgoKZXh0ZXJuIGludCBtcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3Qg X19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jl c3VsdCk7CmV4dGVybiBpbnQganJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVsz XSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3Qg X19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jl c3VsdCk7CgoKZXh0ZXJuIGludCBzcmFuZDQ4X3IgKGxvbmcgaW50IF9fc2VlZHZhbCwgc3RydWN0 IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpCjsKCmV4dGVybiBpbnQgc2VlZDQ4X3IgKHVuc2lnbmVk IHNob3J0IGludCBfX3NlZWQxNnZbM10sCiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFu ZDQ4X2RhdGEgKl9fYnVmZmVyKTsKCmV4dGVybiBpbnQgbGNvbmc0OF9yICh1bnNpZ25lZCBzaG9y dCBpbnQgX19wYXJhbVs3XSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2Rh dGEgKl9fYnVmZmVyKTsKIyA1MzUgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gdm9p ZCAqcmVhbGxvYyAodm9pZCAqX19wdHIsIHNpemVfdCBfX3NpemUpIF9fYXR0cmlidXRlX18gKChf X21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCBmcmVlICh2b2lkICpfX3B0cik7CgoKCmV4dGVybiB2 b2lkIGNmcmVlICh2b2lkICpfX3B0cik7CgoKCgojIDI2ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgi IDEgMwoKCgoKCgoKZXh0ZXJuIHZvaWQgKmFsbG9jYSAoc2l6ZV90IF9fc2l6ZSk7CgoKCgoKIyA1 NDYgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgpleHRlcm4gdm9pZCAqdmFsbG9jIChz aXplX3QgX19zaXplKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDU2MCAiL3Vzci9p bmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiB2b2lkIGFib3J0ICh2b2lkKSBfX2F0dHJpYnV0ZV9f ICgoX19ub3JldHVybl9fKSk7CgoKCmV4dGVybiBpbnQgYXRleGl0ICh2b2lkICgqX19mdW5jKSAo dm9pZCkpOwoKCgoKZXh0ZXJuIGludCBfX29uX2V4aXQgKHZvaWQgKCpfX2Z1bmMpIChpbnQgX19z dGF0dXMsIHZvaWQgKl9fYXJnKSwgdm9pZCAqX19hcmcpCjsKZXh0ZXJuIGludCBvbl9leGl0ICh2 b2lkICgqX19mdW5jKSAoaW50IF9fc3RhdHVzLCB2b2lkICpfX2FyZyksIHZvaWQgKl9fYXJnKQo7 CgoKCgoKZXh0ZXJuIHZvaWQgZXhpdCAoaW50IF9fc3RhdHVzKSBfX2F0dHJpYnV0ZV9fICgoX19u b3JldHVybl9fKSk7CgojIDU4OCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFy ICpnZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc2VjdXJl X2dldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpOwoKCgoKCmV4dGVybiBpbnQgcHV0ZW52IChj aGFyICpfX3N0cmluZyk7CgoKCgoKZXh0ZXJuIGludCBzZXRlbnYgKF9fY29uc3QgY2hhciAqX19u YW1lLCBfX2NvbnN0IGNoYXIgKl9fdmFsdWUsIGludCBfX3JlcGxhY2UpCjsKCgpleHRlcm4gdm9p ZCB1bnNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpOwoKCgoKCgpleHRlcm4gaW50IGNsZWFy ZW52ICh2b2lkKTsKIyA2MjQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAq bWt0ZW1wIChjaGFyICpfX3RlbXBsYXRlKTsKCgoKCgoKZXh0ZXJuIGludCBta3N0ZW1wIChjaGFy ICpfX3RlbXBsYXRlKTsKIyA2NDAgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hh ciAqbWtkdGVtcCAoY2hhciAqX190ZW1wbGF0ZSk7CgoKCgpleHRlcm4gaW50IHN5c3RlbSAoX19j b25zdCBjaGFyICpfX2NvbW1hbmQpOwoKCiMgNjYyICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMK ZXh0ZXJuIGNoYXIgKnJlYWxwYXRoIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLAog ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19yZXNvbHZlZCk7CgoKCgoK CnR5cGVkZWYgaW50ICgqX19jb21wYXJfZm5fdCkgKF9fY29uc3Qgdm9pZCAqLCBfX2NvbnN0IHZv aWQgKik7CgoKCgoKCgoKZXh0ZXJuIHZvaWQgKmJzZWFyY2ggKF9fY29uc3Qgdm9pZCAqX19rZXks IF9fY29uc3Qgdm9pZCAqX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbm1l bWIsIHNpemVfdCBfX3NpemUsIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoKCgpleHRlcm4gdm9p ZCBxc29ydCAodm9pZCAqX19iYXNlLCBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwKICAg ICAgICAgICAgICAgICAgIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoKCgpleHRlcm4gaW50IGFi cyAoaW50IF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gbG9uZyBpbnQg bGFicyAobG9uZyBpbnQgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMgNzAwICIv dXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGRpdl90IGRpdiAoaW50IF9fbnVtZXIsIGlu dCBfX2Rlbm9tKQogX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gbGRpdl90IGxk aXYgKGxvbmcgaW50IF9fbnVtZXIsIGxvbmcgaW50IF9fZGVub20pCiBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7CiMgNzE4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIg KmVjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2Rl Y3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbik7CgoKCgpleHRl cm4gY2hhciAqZmN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3Ry aWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduKTsK CgoKCmV4dGVybiBjaGFyICpnY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFy ICpfX2J1Zik7CgoKZXh0ZXJuIGNoYXIgKnFlY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQg X19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGlu dCAqX19yZXN0cmljdCBfX3NpZ24pOwpleHRlcm4gY2hhciAqcWZjdnQgKGxvbmcgZG91YmxlIF9f dmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3Qg X19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbik7CmV4dGVybiBjaGFyICpxZ2N2dCAobG9u ZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1Zik7CgoKCgoKZXh0ZXJu IGludCBlY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmlj dCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hh ciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbik7CmV4 dGVybiBpbnQgZmN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVz dHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24s IGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4p OwoKZXh0ZXJuIGludCBxZWN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQs CiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0 cmljdCBfX3NpZ24sCiAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwg c2l6ZV90IF9fbGVuKTsKZXh0ZXJuIGludCBxZmN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBp bnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQs IGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0 cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKTsKCgoKCgoKZXh0ZXJuIGludCBtYmxlbiAoX19jb25z dCBjaGFyICpfX3MsIHNpemVfdCBfX24pOwoKCmV4dGVybiBpbnQgbWJ0b3djICh3Y2hhcl90ICpf X3Jlc3RyaWN0IF9fcHdjLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fcywgc2l6ZV90IF9fbik7CgoKZXh0ZXJuIGludCB3Y3RvbWIgKGNoYXIgKl9fcywgd2No YXJfdCBfX3djaGFyKTsKCgoKZXh0ZXJuIHNpemVfdCBtYnN0b3djcyAod2NoYXJfdCAqX19yZXN0 cmljdCBfX3B3Y3MsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX3MsIHNpemVfdCBfX24pOwoKZXh0ZXJuIHNpemVfdCB3Y3N0b21icyAoY2hhciAqX19y ZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19y ZXN0cmljdCBfX3B3Y3MsIHNpemVfdCBfX24pCjsKCgoKCgoKCmV4dGVybiBpbnQgcnBtYXRjaCAo X19jb25zdCBjaGFyICpfX3Jlc3BvbnNlKTsKIyA4NDAgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIg MwpleHRlcm4gaW50IGdldGxvYWRhdmcgKGRvdWJsZSBfX2xvYWRhdmdbXSwgaW50IF9fbmVsZW0p OwoKCgoKCiMgNjIgIi91c3IvaW5jbHVkZS9weXRob24xLjUvUHl0aG9uLmgiIDIKCgoKCgoKCgoK IyAxMTQgIi91c3IvaW5jbHVkZS9weXRob24xLjUvb2JqZWN0LmgiIDEKdHlwZWRlZiBzdHJ1Y3Qg X29iamVjdCB7CiAgICAgICAgaW50IG9iX3JlZmNudDsgc3RydWN0IF90eXBlb2JqZWN0ICpvYl90 eXBlOwp9IFB5T2JqZWN0OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGludCBvYl9yZWZjbnQ7 IHN0cnVjdCBfdHlwZW9iamVjdCAqb2JfdHlwZTsgaW50IG9iX3NpemU7Cn0gUHlWYXJPYmplY3Q7 CiMgMTM5ICIvdXNyL2luY2x1ZGUvcHl0aG9uMS41L29iamVjdC5oIgp0eXBlZGVmIFB5T2JqZWN0 ICogKCp1bmFyeWZ1bmMpIChQeU9iamVjdCAqKTsKdHlwZWRlZiBQeU9iamVjdCAqICgqYmluYXJ5 ZnVuYykgKFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOwp0eXBlZGVmIFB5T2JqZWN0ICogKCp0ZXJu YXJ5ZnVuYykgKFB5T2JqZWN0ICosIFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOwp0eXBlZGVmIGlu dCAoKmlucXVpcnkpIChQeU9iamVjdCAqKTsKdHlwZWRlZiBpbnQgKCpjb2VyY2lvbikgKFB5T2Jq ZWN0ICoqLCBQeU9iamVjdCAqKik7CnR5cGVkZWYgUHlPYmplY3QgKigqaW50YXJnZnVuYykgKFB5 T2JqZWN0ICosIGludCk7CnR5cGVkZWYgUHlPYmplY3QgKigqaW50aW50YXJnZnVuYykgKFB5T2Jq ZWN0ICosIGludCwgaW50KTsKdHlwZWRlZiBpbnQoKmludG9iamFyZ3Byb2MpIChQeU9iamVjdCAq LCBpbnQsIFB5T2JqZWN0ICopOwp0eXBlZGVmIGludCgqaW50aW50b2JqYXJncHJvYykgKFB5T2Jq ZWN0ICosIGludCwgaW50LCBQeU9iamVjdCAqKTsKdHlwZWRlZiBpbnQoKm9iam9iamFyZ3Byb2Mp IChQeU9iamVjdCAqLCBQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKdHlwZWRlZiBpbnQgKCpnZXRy ZWFkYnVmZmVycHJvYykgKFB5T2JqZWN0ICosIGludCwgdm9pZCAqKik7CnR5cGVkZWYgaW50ICgq Z2V0d3JpdGVidWZmZXJwcm9jKSAoUHlPYmplY3QgKiwgaW50LCB2b2lkICoqKTsKdHlwZWRlZiBp bnQgKCpnZXRzZWdjb3VudHByb2MpIChQeU9iamVjdCAqLCBpbnQgKik7CnR5cGVkZWYgaW50ICgq Z2V0Y2hhcmJ1ZmZlcnByb2MpIChQeU9iamVjdCAqLCBpbnQsIGNvbnN0IGNoYXIgKiopOwoKdHlw ZWRlZiBzdHJ1Y3QgewogICAgICAgIGJpbmFyeWZ1bmMgbmJfYWRkOwogICAgICAgIGJpbmFyeWZ1 bmMgbmJfc3VidHJhY3Q7CiAgICAgICAgYmluYXJ5ZnVuYyBuYl9tdWx0aXBseTsKICAgICAgICBi aW5hcnlmdW5jIG5iX2RpdmlkZTsKICAgICAgICBiaW5hcnlmdW5jIG5iX3JlbWFpbmRlcjsKICAg ICAgICBiaW5hcnlmdW5jIG5iX2Rpdm1vZDsKICAgICAgICB0ZXJuYXJ5ZnVuYyBuYl9wb3dlcjsK ICAgICAgICB1bmFyeWZ1bmMgbmJfbmVnYXRpdmU7CiAgICAgICAgdW5hcnlmdW5jIG5iX3Bvc2l0 aXZlOwogICAgICAgIHVuYXJ5ZnVuYyBuYl9hYnNvbHV0ZTsKICAgICAgICBpbnF1aXJ5IG5iX25v bnplcm87CiAgICAgICAgdW5hcnlmdW5jIG5iX2ludmVydDsKICAgICAgICBiaW5hcnlmdW5jIG5i X2xzaGlmdDsKICAgICAgICBiaW5hcnlmdW5jIG5iX3JzaGlmdDsKICAgICAgICBiaW5hcnlmdW5j IG5iX2FuZDsKICAgICAgICBiaW5hcnlmdW5jIG5iX3hvcjsKICAgICAgICBiaW5hcnlmdW5jIG5i X29yOwogICAgICAgIGNvZXJjaW9uIG5iX2NvZXJjZTsKICAgICAgICB1bmFyeWZ1bmMgbmJfaW50 OwogICAgICAgIHVuYXJ5ZnVuYyBuYl9sb25nOwogICAgICAgIHVuYXJ5ZnVuYyBuYl9mbG9hdDsK ICAgICAgICB1bmFyeWZ1bmMgbmJfb2N0OwogICAgICAgIHVuYXJ5ZnVuYyBuYl9oZXg7Cn0gUHlO dW1iZXJNZXRob2RzOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGlucXVpcnkgc3FfbGVuZ3Ro OwogICAgICAgIGJpbmFyeWZ1bmMgc3FfY29uY2F0OwogICAgICAgIGludGFyZ2Z1bmMgc3FfcmVw ZWF0OwogICAgICAgIGludGFyZ2Z1bmMgc3FfaXRlbTsKICAgICAgICBpbnRpbnRhcmdmdW5jIHNx X3NsaWNlOwogICAgICAgIGludG9iamFyZ3Byb2Mgc3FfYXNzX2l0ZW07CiAgICAgICAgaW50aW50 b2JqYXJncHJvYyBzcV9hc3Nfc2xpY2U7Cn0gUHlTZXF1ZW5jZU1ldGhvZHM7Cgp0eXBlZGVmIHN0 cnVjdCB7CiAgICAgICAgaW5xdWlyeSBtcF9sZW5ndGg7CiAgICAgICAgYmluYXJ5ZnVuYyBtcF9z dWJzY3JpcHQ7CiAgICAgICAgb2Jqb2JqYXJncHJvYyBtcF9hc3Nfc3Vic2NyaXB0Owp9IFB5TWFw cGluZ01ldGhvZHM7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgZ2V0cmVhZGJ1ZmZlcnByb2Mg YmZfZ2V0cmVhZGJ1ZmZlcjsKICAgICAgICBnZXR3cml0ZWJ1ZmZlcnByb2MgYmZfZ2V0d3JpdGVi dWZmZXI7CiAgICAgICAgZ2V0c2VnY291bnRwcm9jIGJmX2dldHNlZ2NvdW50OwogICAgICAgIGdl dGNoYXJidWZmZXJwcm9jIGJmX2dldGNoYXJidWZmZXI7Cn0gUHlCdWZmZXJQcm9jczsKCgp0eXBl ZGVmIHZvaWQgKCpkZXN0cnVjdG9yKSAoUHlPYmplY3QgKik7CnR5cGVkZWYgaW50ICgqcHJpbnRm dW5jKSAoUHlPYmplY3QgKiwgRklMRSAqLCBpbnQpOwp0eXBlZGVmIFB5T2JqZWN0ICooKmdldGF0 dHJmdW5jKSAoUHlPYmplY3QgKiwgY2hhciAqKTsKdHlwZWRlZiBQeU9iamVjdCAqKCpnZXRhdHRy b2Z1bmMpIChQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKdHlwZWRlZiBpbnQgKCpzZXRhdHRyZnVu YykgKFB5T2JqZWN0ICosIGNoYXIgKiwgUHlPYmplY3QgKik7CnR5cGVkZWYgaW50ICgqc2V0YXR0 cm9mdW5jKSAoUHlPYmplY3QgKiwgUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CnR5cGVkZWYgaW50 ICgqY21wZnVuYykgKFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOwp0eXBlZGVmIFB5T2JqZWN0ICoo KnJlcHJmdW5jKSAoUHlPYmplY3QgKik7CnR5cGVkZWYgbG9uZyAoKmhhc2hmdW5jKSAoUHlPYmpl Y3QgKik7Cgp0eXBlZGVmIHN0cnVjdCBfdHlwZW9iamVjdCB7CiAgICAgICAgaW50IG9iX3JlZmNu dDsgc3RydWN0IF90eXBlb2JqZWN0ICpvYl90eXBlOyBpbnQgb2Jfc2l6ZTsKICAgICAgICBjaGFy ICp0cF9uYW1lOwogICAgICAgIGludCB0cF9iYXNpY3NpemUsIHRwX2l0ZW1zaXplOwoKCgogICAg ICAgIGRlc3RydWN0b3IgdHBfZGVhbGxvYzsKICAgICAgICBwcmludGZ1bmMgdHBfcHJpbnQ7CiAg ICAgICAgZ2V0YXR0cmZ1bmMgdHBfZ2V0YXR0cjsKICAgICAgICBzZXRhdHRyZnVuYyB0cF9zZXRh dHRyOwogICAgICAgIGNtcGZ1bmMgdHBfY29tcGFyZTsKICAgICAgICByZXByZnVuYyB0cF9yZXBy OwoKCgogICAgICAgIFB5TnVtYmVyTWV0aG9kcyAqdHBfYXNfbnVtYmVyOwogICAgICAgIFB5U2Vx dWVuY2VNZXRob2RzICp0cF9hc19zZXF1ZW5jZTsKICAgICAgICBQeU1hcHBpbmdNZXRob2RzICp0 cF9hc19tYXBwaW5nOwoKCgogICAgICAgIGhhc2hmdW5jIHRwX2hhc2g7CiAgICAgICAgdGVybmFy eWZ1bmMgdHBfY2FsbDsKICAgICAgICByZXByZnVuYyB0cF9zdHI7CiAgICAgICAgZ2V0YXR0cm9m dW5jIHRwX2dldGF0dHJvOwogICAgICAgIHNldGF0dHJvZnVuYyB0cF9zZXRhdHRybzsKCgogICAg ICAgIFB5QnVmZmVyUHJvY3MgKnRwX2FzX2J1ZmZlcjsKCgogICAgICAgIGxvbmcgdHBfZmxhZ3M7 CgogICAgICAgIGNoYXIgKnRwX2RvYzsKCgogICAgICAgIGxvbmcgdHBfeHh4NTsKICAgICAgICBs b25nIHRwX3h4eDY7CiAgICAgICAgbG9uZyB0cF94eHg3OwogICAgICAgIGxvbmcgdHBfeHh4ODsK CgoKCgoKCgp9IFB5VHlwZU9iamVjdDsKCmV4dGVybiBQeVR5cGVPYmplY3QgUHlUeXBlX1R5cGU7 CgoKCgpleHRlcm4gaW50IFB5T2JqZWN0X1ByaW50IChQeU9iamVjdCAqLCBGSUxFICosIGludCk7 CmV4dGVybiBQeU9iamVjdCAqIFB5T2JqZWN0X1JlcHIgKFB5T2JqZWN0ICopOwpleHRlcm4gUHlP YmplY3QgKiBQeU9iamVjdF9TdHIgKFB5T2JqZWN0ICopOwpleHRlcm4gaW50IFB5T2JqZWN0X0Nv bXBhcmUgKFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOwpleHRlcm4gUHlPYmplY3QgKiBQeU9iamVj dF9HZXRBdHRyU3RyaW5nIChQeU9iamVjdCAqLCBjaGFyICopOwpleHRlcm4gaW50IFB5T2JqZWN0 X1NldEF0dHJTdHJpbmcgKFB5T2JqZWN0ICosIGNoYXIgKiwgUHlPYmplY3QgKik7CmV4dGVybiBp bnQgUHlPYmplY3RfSGFzQXR0clN0cmluZyAoUHlPYmplY3QgKiwgY2hhciAqKTsKZXh0ZXJuIFB5 T2JqZWN0ICogUHlPYmplY3RfR2V0QXR0ciAoUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CmV4dGVy biBpbnQgUHlPYmplY3RfU2V0QXR0ciAoUHlPYmplY3QgKiwgUHlPYmplY3QgKiwgUHlPYmplY3Qg Kik7CmV4dGVybiBpbnQgUHlPYmplY3RfSGFzQXR0ciAoUHlPYmplY3QgKiwgUHlPYmplY3QgKik7 CmV4dGVybiBsb25nIFB5T2JqZWN0X0hhc2ggKFB5T2JqZWN0ICopOwpleHRlcm4gaW50IFB5T2Jq ZWN0X0lzVHJ1ZSAoUHlPYmplY3QgKik7CmV4dGVybiBpbnQgUHlPYmplY3RfTm90IChQeU9iamVj dCAqKTsKZXh0ZXJuIGludCBQeUNhbGxhYmxlX0NoZWNrIChQeU9iamVjdCAqKTsKZXh0ZXJuIGlu dCBQeU51bWJlcl9Db2VyY2UgKFB5T2JqZWN0ICoqLCBQeU9iamVjdCAqKik7CmV4dGVybiBpbnQg UHlOdW1iZXJfQ29lcmNlRXggKFB5T2JqZWN0ICoqLCBQeU9iamVjdCAqKik7CgoKZXh0ZXJuIGlu dCBQeV9SZXByRW50ZXIgKFB5T2JqZWN0ICopOwpleHRlcm4gdm9pZCBQeV9SZXByTGVhdmUgKFB5 T2JqZWN0ICopOwoKCiMgNDM0ICIvdXNyL2luY2x1ZGUvcHl0aG9uMS41L29iamVjdC5oIgpleHRl cm4gUHlPYmplY3QgX1B5X05vbmVTdHJ1Y3Q7CgojIDcxICIvdXNyL2luY2x1ZGUvcHl0aG9uMS41 L1B5dGhvbi5oIiAyCgojIDU4ICIvdXNyL2luY2x1ZGUvcHl0aG9uMS41L29iamltcGwuaCIgMQpl eHRlcm4gUHlPYmplY3QgKiBfUHlPYmplY3RfTmV3IChQeVR5cGVPYmplY3QgKik7CmV4dGVybiBQ eVZhck9iamVjdCAqIF9QeU9iamVjdF9OZXdWYXIgKFB5VHlwZU9iamVjdCAqLCBpbnQpOwoKIyA3 MiAiL3Vzci9pbmNsdWRlL3B5dGhvbjEuNS9QeXRob24uaCIgMgoKCiMgMzggIi91c3IvaW5jbHVk ZS9weXRob24xLjUvcHlkZWJ1Zy5oIiAxCmV4dGVybiBpbnQgUHlfRGVidWdGbGFnOwpleHRlcm4g aW50IFB5X1ZlcmJvc2VGbGFnOwpleHRlcm4gaW50IFB5X0ludGVyYWN0aXZlRmxhZzsKZXh0ZXJu IGludCBQeV9PcHRpbWl6ZUZsYWc7CmV4dGVybiBpbnQgUHlfTm9TaXRlRmxhZzsKZXh0ZXJuIGlu dCBQeV9Vc2VDbGFzc0V4Y2VwdGlvbnNGbGFnOwpleHRlcm4gaW50IFB5X0Zyb3plbkZsYWc7CmV4 dGVybiBpbnQgUHlfVGFiY2hlY2tGbGFnOwoKdm9pZCBQeV9GYXRhbEVycm9yIChjaGFyICopOwoK IyA3NCAiL3Vzci9pbmNsdWRlL3B5dGhvbjEuNS9QeXRob24uaCIgMgoKCiMgNTUgIi91c3IvaW5j bHVkZS9weXRob24xLjUvaW50b2JqZWN0LmgiIDEKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGlu dCBvYl9yZWZjbnQ7IHN0cnVjdCBfdHlwZW9iamVjdCAqb2JfdHlwZTsKICAgICAgICBsb25nIG9i X2l2YWw7Cn0gUHlJbnRPYmplY3Q7CgpleHRlcm4gUHlUeXBlT2JqZWN0IFB5SW50X1R5cGU7CgoK CmV4dGVybiBQeU9iamVjdCAqIFB5SW50X0Zyb21Mb25nIChsb25nKTsKZXh0ZXJuIGxvbmcgUHlJ bnRfQXNMb25nIChQeU9iamVjdCAqKTsKZXh0ZXJuIGxvbmcgUHlJbnRfR2V0TWF4ICh2b2lkKTsK IyA4MCAiL3Vzci9pbmNsdWRlL3B5dGhvbjEuNS9pbnRvYmplY3QuaCIKZXh0ZXJuIFB5SW50T2Jq ZWN0IF9QeV9aZXJvU3RydWN0LCBfUHlfVHJ1ZVN0cnVjdDsKCiMgOTQgIi91c3IvaW5jbHVkZS9w eXRob24xLjUvaW50b2JqZWN0LmgiCmV4dGVybiB1bnNpZ25lZCBsb25nIFB5T1Nfc3RydG91bCAo Y2hhciAqLCBjaGFyICoqLCBpbnQpOwpleHRlcm4gbG9uZyBQeU9TX3N0cnRvbCAoY2hhciAqLCBj aGFyICoqLCBpbnQpOwoKIyA3NiAiL3Vzci9pbmNsdWRlL3B5dGhvbjEuNS9QeXRob24uaCIgMgoK IyA0MCAiL3Vzci9pbmNsdWRlL3B5dGhvbjEuNS9sb25nb2JqZWN0LmgiIDEKdHlwZWRlZiBzdHJ1 Y3QgX2xvbmdvYmplY3QgUHlMb25nT2JqZWN0OwoKZXh0ZXJuIFB5VHlwZU9iamVjdCBQeUxvbmdf VHlwZTsKCgoKZXh0ZXJuIFB5T2JqZWN0ICogUHlMb25nX0Zyb21Mb25nIChsb25nKTsKZXh0ZXJu IFB5T2JqZWN0ICogUHlMb25nX0Zyb21VbnNpZ25lZExvbmcgKHVuc2lnbmVkIGxvbmcpOwpleHRl cm4gUHlPYmplY3QgKiBQeUxvbmdfRnJvbURvdWJsZSAoZG91YmxlKTsKZXh0ZXJuIGxvbmcgUHlM b25nX0FzTG9uZyAoUHlPYmplY3QgKik7CmV4dGVybiB1bnNpZ25lZCBsb25nIFB5TG9uZ19Bc1Vu c2lnbmVkTG9uZyAoUHlPYmplY3QgKik7CmV4dGVybiBkb3VibGUgUHlMb25nX0FzRG91YmxlIChQ eU9iamVjdCAqKTsKZXh0ZXJuIFB5T2JqZWN0ICogUHlMb25nX0Zyb21Wb2lkUHRyICh2b2lkICop OwpleHRlcm4gdm9pZCAqIFB5TG9uZ19Bc1ZvaWRQdHIgKFB5T2JqZWN0ICopOwoKCgoKCiMgMTIg Ii91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL2xpbWl0cy5o IiAxIDMKIyA4ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcmVkaGF0LWxpbnV4LzIuOTYvaW5jbHVk ZS9zeXNsaW1pdHMuaCIgMSAzCiMgMTMxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcmVkaGF0LWxp bnV4LzIuOTYvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9saW1pdHMu aCIgMSAzCiMgMTI3ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDEgMwojIDM3ICIv dXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMSAzCiMgMTI3ICIvdXNyL2luY2x1ZGUvYml0 cy9wb3NpeDFfbGltLmgiIDIgMwojIDMxICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgoK IyAxMzEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL2xp bWl0cy5oIiAyIDMKIyA4ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcmVkaGF0LWxpbnV4LzIuOTYv aW5jbHVkZS9zeXNsaW1pdHMuaCIgMiAzCiMgMTIgIi91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRo YXQtbGludXgvMi45Ni9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyA1OSAiL3Vzci9pbmNsdWRlL3B5 dGhvbjEuNS9sb25nb2JqZWN0LmgiIDIKIyA3OCAiL3Vzci9pbmNsdWRlL3B5dGhvbjEuNS9sb25n b2JqZWN0LmgiCmV4dGVybiBQeU9iamVjdCAqIFB5TG9uZ19Gcm9tTG9uZ0xvbmcgKGxvbmcgbG9u Zyk7CmV4dGVybiBQeU9iamVjdCAqIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nTG9uZyAodW5zaWdu ZWQgbG9uZyBsb25nKTsKZXh0ZXJuIGxvbmcgbG9uZyBQeUxvbmdfQXNMb25nTG9uZyAoUHlPYmpl Y3QgKik7CmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgUHlMb25nX0FzVW5zaWduZWRMb25nTG9u ZyAoUHlPYmplY3QgKik7CgoKUHlPYmplY3QgKiBQeUxvbmdfRnJvbVN0cmluZyAoY2hhciAqLCBj aGFyICoqLCBpbnQpOwoKIyA3NyAiL3Vzci9pbmNsdWRlL3B5dGhvbjEuNS9QeXRob24uaCIgMgoK IyA0NCAiL3Vzci9pbmNsdWRlL3B5dGhvbjEuNS9mbG9hdG9iamVjdC5oIiAxCnR5cGVkZWYgc3Ry dWN0IHsKICAgICAgICBpbnQgb2JfcmVmY250OyBzdHJ1Y3QgX3R5cGVvYmplY3QgKm9iX3R5cGU7 CiAgICAgICAgZG91YmxlIG9iX2Z2YWw7Cn0gUHlGbG9hdE9iamVjdDsKCmV4dGVybiBQeVR5cGVP YmplY3QgUHlGbG9hdF9UeXBlOwoKCgpleHRlcm4gUHlPYmplY3QgKiBQeUZsb2F0X0Zyb21Eb3Vi bGUgKGRvdWJsZSk7CmV4dGVybiBkb3VibGUgUHlGbG9hdF9Bc0RvdWJsZSAoUHlPYmplY3QgKik7 CgoKIyA3OCAiL3Vzci9pbmNsdWRlL3B5dGhvbjEuNS9QeXRob24uaCIgMgoKCiMgOSAiL3Vzci9p bmNsdWRlL3B5dGhvbjEuNS9jb21wbGV4b2JqZWN0LmgiIDEKdHlwZWRlZiBzdHJ1Y3QgewogICBk b3VibGUgcmVhbDsKICAgZG91YmxlIGltYWc7Cn0gUHlfY29tcGxleDsKCgoKCgoKCgoKCmV4dGVy biBQeV9jb21wbGV4IF9QeV9jX3N1bSAoUHlfY29tcGxleCwgUHlfY29tcGxleCk7CmV4dGVybiBQ eV9jb21wbGV4IF9QeV9jX2RpZmYgKFB5X2NvbXBsZXgsIFB5X2NvbXBsZXgpOwpleHRlcm4gUHlf Y29tcGxleCBfUHlfY19uZWcgKFB5X2NvbXBsZXgpOwpleHRlcm4gUHlfY29tcGxleCBfUHlfY19w cm9kIChQeV9jb21wbGV4LCBQeV9jb21wbGV4KTsKZXh0ZXJuIFB5X2NvbXBsZXggX1B5X2NfcXVv dCAoUHlfY29tcGxleCwgUHlfY29tcGxleCk7CmV4dGVybiBQeV9jb21wbGV4IF9QeV9jX3BvdyAo UHlfY29tcGxleCwgUHlfY29tcGxleCk7CiMgMzggIi91c3IvaW5jbHVkZS9weXRob24xLjUvY29t cGxleG9iamVjdC5oIgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IG9iX3JlZmNudDsgc3Ry dWN0IF90eXBlb2JqZWN0ICpvYl90eXBlOwogICAgICAgIFB5X2NvbXBsZXggY3ZhbDsKfSBQeUNv bXBsZXhPYmplY3Q7CgpleHRlcm4gUHlUeXBlT2JqZWN0IFB5Q29tcGxleF9UeXBlOwoKCgpleHRl cm4gUHlPYmplY3QgKiBQeUNvbXBsZXhfRnJvbUNDb21wbGV4IChQeV9jb21wbGV4KTsKZXh0ZXJu IFB5T2JqZWN0ICogUHlDb21wbGV4X0Zyb21Eb3VibGVzIChkb3VibGUgcmVhbCwgZG91YmxlIGlt YWcpOwoKZXh0ZXJuIGRvdWJsZSBQeUNvbXBsZXhfUmVhbEFzRG91YmxlIChQeU9iamVjdCAqb3Ap OwpleHRlcm4gZG91YmxlIFB5Q29tcGxleF9JbWFnQXNEb3VibGUgKFB5T2JqZWN0ICpvcCk7CmV4 dGVybiBQeV9jb21wbGV4IFB5Q29tcGxleF9Bc0NDb21wbGV4IChQeU9iamVjdCAqb3ApOwoKIyA4 MCAiL3Vzci9pbmNsdWRlL3B5dGhvbjEuNS9QeXRob24uaCIgMgoKCiMgNDIgIi91c3IvaW5jbHVk ZS9weXRob24xLjUvcmFuZ2VvYmplY3QuaCIgMQpleHRlcm4gUHlUeXBlT2JqZWN0IFB5UmFuZ2Vf VHlwZTsKCgoKZXh0ZXJuIFB5T2JqZWN0ICogUHlSYW5nZV9OZXcgKGxvbmcsIGxvbmcsIGxvbmcs IGludCk7CiMgODIgIi91c3IvaW5jbHVkZS9weXRob24xLjUvUHl0aG9uLmgiIDIKCiMgNjkgIi91 c3IvaW5jbHVkZS9weXRob24xLjUvc3RyaW5nb2JqZWN0LmgiIDEKdHlwZWRlZiBzdHJ1Y3Qgewog ICAgICAgIGludCBvYl9yZWZjbnQ7IHN0cnVjdCBfdHlwZW9iamVjdCAqb2JfdHlwZTsgaW50IG9i X3NpemU7CgogICAgICAgIGxvbmcgb2Jfc2hhc2g7CgoKICAgICAgICBQeU9iamVjdCAqb2Jfc2lu dGVybmVkOwoKICAgICAgICBjaGFyIG9iX3N2YWxbMV07Cn0gUHlTdHJpbmdPYmplY3Q7CgpleHRl cm4gUHlUeXBlT2JqZWN0IFB5U3RyaW5nX1R5cGU7CgoKCmV4dGVybiBQeU9iamVjdCAqIFB5U3Ry aW5nX0Zyb21TdHJpbmdBbmRTaXplIChjb25zdCBjaGFyICosIGludCk7CmV4dGVybiBQeU9iamVj dCAqIFB5U3RyaW5nX0Zyb21TdHJpbmcgKGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgUHlTdHJp bmdfU2l6ZSAoUHlPYmplY3QgKik7CmV4dGVybiBjaGFyICogUHlTdHJpbmdfQXNTdHJpbmcgKFB5 T2JqZWN0ICopOwpleHRlcm4gdm9pZCBQeVN0cmluZ19Db25jYXQgKFB5T2JqZWN0ICoqLCBQeU9i amVjdCAqKTsKZXh0ZXJuIHZvaWQgUHlTdHJpbmdfQ29uY2F0QW5kRGVsIChQeU9iamVjdCAqKiwg UHlPYmplY3QgKik7CmV4dGVybiBpbnQgX1B5U3RyaW5nX1Jlc2l6ZSAoUHlPYmplY3QgKiosIGlu dCk7CmV4dGVybiBQeU9iamVjdCAqIFB5U3RyaW5nX0Zvcm1hdCAoUHlPYmplY3QgKiwgUHlPYmpl Y3QgKik7CgoKZXh0ZXJuIHZvaWQgUHlTdHJpbmdfSW50ZXJuSW5QbGFjZSAoUHlPYmplY3QgKiop OwpleHRlcm4gUHlPYmplY3QgKiBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nIChjb25zdCBjaGFy ICopOwojIDgzICIvdXNyL2luY2x1ZGUvcHl0aG9uMS41L1B5dGhvbi5oIiAyCgojIDQzICIvdXNy L2luY2x1ZGUvcHl0aG9uMS41L2J1ZmZlcm9iamVjdC5oIiAxCmV4dGVybiBQeVR5cGVPYmplY3Qg UHlCdWZmZXJfVHlwZTsKCgoKCgpleHRlcm4gUHlPYmplY3QgKiBQeUJ1ZmZlcl9Gcm9tT2JqZWN0 IChQeU9iamVjdCAqYmFzZSwgaW50IG9mZnNldCwgaW50IHNpemUpOwpleHRlcm4gUHlPYmplY3Qg KiBQeUJ1ZmZlcl9Gcm9tUmVhZFdyaXRlT2JqZWN0IChQeU9iamVjdCAqYmFzZSwgaW50IG9mZnNl dCwgaW50IHNpemUpOwoKZXh0ZXJuIFB5T2JqZWN0ICogUHlCdWZmZXJfRnJvbU1lbW9yeSAodm9p ZCAqcHRyLCBpbnQgc2l6ZSk7CmV4dGVybiBQeU9iamVjdCAqIFB5QnVmZmVyX0Zyb21SZWFkV3Jp dGVNZW1vcnkgKHZvaWQgKnB0ciwgaW50IHNpemUpOwoKZXh0ZXJuIFB5T2JqZWN0ICogUHlCdWZm ZXJfTmV3IChpbnQgc2l6ZSk7CgojIDg0ICIvdXNyL2luY2x1ZGUvcHl0aG9uMS41L1B5dGhvbi5o IiAyCgojIDU0ICIvdXNyL2luY2x1ZGUvcHl0aG9uMS41L3R1cGxlb2JqZWN0LmgiIDEKdHlwZWRl ZiBzdHJ1Y3QgewogICAgICAgIGludCBvYl9yZWZjbnQ7IHN0cnVjdCBfdHlwZW9iamVjdCAqb2Jf dHlwZTsgaW50IG9iX3NpemU7CiAgICAgICAgUHlPYmplY3QgKm9iX2l0ZW1bMV07Cn0gUHlUdXBs ZU9iamVjdDsKCmV4dGVybiBQeVR5cGVPYmplY3QgUHlUdXBsZV9UeXBlOwoKCgpleHRlcm4gUHlP YmplY3QgKiBQeVR1cGxlX05ldyAoaW50IHNpemUpOwpleHRlcm4gaW50IFB5VHVwbGVfU2l6ZSAo UHlPYmplY3QgKik7CmV4dGVybiBQeU9iamVjdCAqIFB5VHVwbGVfR2V0SXRlbSAoUHlPYmplY3Qg KiwgaW50KTsKZXh0ZXJuIGludCBQeVR1cGxlX1NldEl0ZW0gKFB5T2JqZWN0ICosIGludCwgUHlP YmplY3QgKik7CmV4dGVybiBQeU9iamVjdCAqIFB5VHVwbGVfR2V0U2xpY2UgKFB5T2JqZWN0ICos IGludCwgaW50KTsKZXh0ZXJuIGludCBfUHlUdXBsZV9SZXNpemUgKFB5T2JqZWN0ICoqLCBpbnQs IGludCk7CgoKIyA4NSAiL3Vzci9pbmNsdWRlL3B5dGhvbjEuNS9QeXRob24uaCIgMgoKIyA1NCAi L3Vzci9pbmNsdWRlL3B5dGhvbjEuNS9saXN0b2JqZWN0LmgiIDEKdHlwZWRlZiBzdHJ1Y3Qgewog ICAgICAgIGludCBvYl9yZWZjbnQ7IHN0cnVjdCBfdHlwZW9iamVjdCAqb2JfdHlwZTsgaW50IG9i X3NpemU7CiAgICAgICAgUHlPYmplY3QgKipvYl9pdGVtOwp9IFB5TGlzdE9iamVjdDsKCmV4dGVy biBQeVR5cGVPYmplY3QgUHlMaXN0X1R5cGU7CgoKCmV4dGVybiBQeU9iamVjdCAqIFB5TGlzdF9O ZXcgKGludCBzaXplKTsKZXh0ZXJuIGludCBQeUxpc3RfU2l6ZSAoUHlPYmplY3QgKik7CmV4dGVy biBQeU9iamVjdCAqIFB5TGlzdF9HZXRJdGVtIChQeU9iamVjdCAqLCBpbnQpOwpleHRlcm4gaW50 IFB5TGlzdF9TZXRJdGVtIChQeU9iamVjdCAqLCBpbnQsIFB5T2JqZWN0ICopOwpleHRlcm4gaW50 IFB5TGlzdF9JbnNlcnQgKFB5T2JqZWN0ICosIGludCwgUHlPYmplY3QgKik7CmV4dGVybiBpbnQg UHlMaXN0X0FwcGVuZCAoUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CmV4dGVybiBQeU9iamVjdCAq IFB5TGlzdF9HZXRTbGljZSAoUHlPYmplY3QgKiwgaW50LCBpbnQpOwpleHRlcm4gaW50IFB5TGlz dF9TZXRTbGljZSAoUHlPYmplY3QgKiwgaW50LCBpbnQsIFB5T2JqZWN0ICopOwpleHRlcm4gaW50 IFB5TGlzdF9Tb3J0IChQeU9iamVjdCAqKTsKZXh0ZXJuIGludCBQeUxpc3RfUmV2ZXJzZSAoUHlP YmplY3QgKik7CmV4dGVybiBQeU9iamVjdCAqIFB5TGlzdF9Bc1R1cGxlIChQeU9iamVjdCAqKTsK CgojIDg2ICIvdXNyL2luY2x1ZGUvcHl0aG9uMS41L1B5dGhvbi5oIiAyCgojIDQwICIvdXNyL2lu Y2x1ZGUvcHl0aG9uMS41L2RpY3RvYmplY3QuaCIgMQpleHRlcm4gUHlUeXBlT2JqZWN0IFB5RGlj dF9UeXBlOwoKCgpleHRlcm4gUHlPYmplY3QgKiBQeURpY3RfTmV3ICh2b2lkKTsKZXh0ZXJuIFB5 T2JqZWN0ICogUHlEaWN0X0dldEl0ZW0gKFB5T2JqZWN0ICptcCwgUHlPYmplY3QgKmtleSk7CmV4 dGVybiBpbnQgUHlEaWN0X1NldEl0ZW0gKFB5T2JqZWN0ICptcCwgUHlPYmplY3QgKmtleSwgUHlP YmplY3QgKml0ZW0pOwpleHRlcm4gaW50IFB5RGljdF9EZWxJdGVtIChQeU9iamVjdCAqbXAsIFB5 T2JqZWN0ICprZXkpOwpleHRlcm4gdm9pZCBQeURpY3RfQ2xlYXIgKFB5T2JqZWN0ICptcCk7CmV4 dGVybiBpbnQgUHlEaWN0X05leHQKICAgICAgICAoUHlPYmplY3QgKm1wLCBpbnQgKnBvcywgUHlP YmplY3QgKiprZXksIFB5T2JqZWN0ICoqdmFsdWUpOwpleHRlcm4gUHlPYmplY3QgKiBQeURpY3Rf S2V5cyAoUHlPYmplY3QgKm1wKTsKZXh0ZXJuIFB5T2JqZWN0ICogUHlEaWN0X1ZhbHVlcyAoUHlP YmplY3QgKm1wKTsKZXh0ZXJuIFB5T2JqZWN0ICogUHlEaWN0X0l0ZW1zIChQeU9iamVjdCAqbXAp OwpleHRlcm4gaW50IFB5RGljdF9TaXplIChQeU9iamVjdCAqbXApOwoKZXh0ZXJuIFB5T2JqZWN0 ICogUHlEaWN0X0dldEl0ZW1TdHJpbmcgKFB5T2JqZWN0ICpkcCwgY2hhciAqa2V5KTsKZXh0ZXJu IGludCBQeURpY3RfU2V0SXRlbVN0cmluZyAoUHlPYmplY3QgKmRwLCBjaGFyICprZXksIFB5T2Jq ZWN0ICppdGVtKTsKZXh0ZXJuIGludCBQeURpY3RfRGVsSXRlbVN0cmluZyAoUHlPYmplY3QgKmRw LCBjaGFyICprZXkpOwoKIyA4NyAiL3Vzci9pbmNsdWRlL3B5dGhvbjEuNS9QeXRob24uaCIgMgoK IyA0MCAiL3Vzci9pbmNsdWRlL3B5dGhvbjEuNS9tZXRob2RvYmplY3QuaCIgMQpleHRlcm4gUHlU eXBlT2JqZWN0IFB5Q0Z1bmN0aW9uX1R5cGU7CgoKCnR5cGVkZWYgUHlPYmplY3QgKigqUHlDRnVu Y3Rpb24pIChQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKdHlwZWRlZiBQeU9iamVjdCAqKCpQeUNG dW5jdGlvbldpdGhLZXl3b3JkcykKICAgICAgICAoUHlPYmplY3QgKiwgUHlPYmplY3QgKiwgUHlP YmplY3QgKik7CgpleHRlcm4gUHlDRnVuY3Rpb24gUHlDRnVuY3Rpb25fR2V0RnVuY3Rpb24gKFB5 T2JqZWN0ICopOwpleHRlcm4gUHlPYmplY3QgKiBQeUNGdW5jdGlvbl9HZXRTZWxmIChQeU9iamVj dCAqKTsKZXh0ZXJuIGludCBQeUNGdW5jdGlvbl9HZXRGbGFncyAoUHlPYmplY3QgKik7CgoKCgoK CgoKCgpzdHJ1Y3QgUHlNZXRob2REZWYgewogICAgICAgIGNoYXIgKm1sX25hbWU7CiAgICAgICAg UHlDRnVuY3Rpb24gbWxfbWV0aDsKICAgICAgICBpbnQgbWxfZmxhZ3M7CiAgICAgICAgY2hhciAq bWxfZG9jOwp9Owp0eXBlZGVmIHN0cnVjdCBQeU1ldGhvZERlZiBQeU1ldGhvZERlZjsKCmV4dGVy biBQeU9iamVjdCAqIFB5X0ZpbmRNZXRob2QKICAgICAgICAoUHlNZXRob2REZWZbXSwgUHlPYmpl Y3QgKiwgY2hhciAqKTsKCmV4dGVybiBQeU9iamVjdCAqIFB5Q0Z1bmN0aW9uX05ldwogICAgICAg IChQeU1ldGhvZERlZiAqLCBQeU9iamVjdCAqKTsKCgoKCgp0eXBlZGVmIHN0cnVjdCBQeU1ldGhv ZENoYWluIHsKICAgICAgICBQeU1ldGhvZERlZiAqbWV0aG9kczsKICAgICAgICBzdHJ1Y3QgUHlN ZXRob2RDaGFpbiAqbGluazsKfSBQeU1ldGhvZENoYWluOwoKZXh0ZXJuIFB5T2JqZWN0ICogUHlf RmluZE1ldGhvZEluQ2hhaW4KICAgICAgICAoUHlNZXRob2RDaGFpbiAqLCBQeU9iamVjdCAqLCBj aGFyICopOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGludCBvYl9yZWZjbnQ7IHN0cnVjdCBf dHlwZW9iamVjdCAqb2JfdHlwZTsKICAgICAgICBQeU1ldGhvZERlZiAqbV9tbDsKICAgICAgICBQ eU9iamVjdCAqbV9zZWxmOwp9IFB5Q0Z1bmN0aW9uT2JqZWN0OwoKIyA4OCAiL3Vzci9pbmNsdWRl L3B5dGhvbjEuNS9QeXRob24uaCIgMgoKIyA0MCAiL3Vzci9pbmNsdWRlL3B5dGhvbjEuNS9tb2R1 bGVvYmplY3QuaCIgMQpleHRlcm4gUHlUeXBlT2JqZWN0IFB5TW9kdWxlX1R5cGU7CgoKCmV4dGVy biBQeU9iamVjdCAqIFB5TW9kdWxlX05ldyAoY2hhciAqKTsKZXh0ZXJuIFB5T2JqZWN0ICogUHlN b2R1bGVfR2V0RGljdCAoUHlPYmplY3QgKik7CmV4dGVybiBjaGFyICogUHlNb2R1bGVfR2V0TmFt ZSAoUHlPYmplY3QgKik7CmV4dGVybiBjaGFyICogUHlNb2R1bGVfR2V0RmlsZW5hbWUgKFB5T2Jq ZWN0ICopOwpleHRlcm4gdm9pZCBfUHlNb2R1bGVfQ2xlYXIgKFB5T2JqZWN0ICopOwoKIyA4OSAi L3Vzci9pbmNsdWRlL3B5dGhvbjEuNS9QeXRob24uaCIgMgoKIyA0MCAiL3Vzci9pbmNsdWRlL3B5 dGhvbjEuNS9mdW5jb2JqZWN0LmgiIDEKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGludCBvYl9y ZWZjbnQ7IHN0cnVjdCBfdHlwZW9iamVjdCAqb2JfdHlwZTsKICAgICAgICBQeU9iamVjdCAqZnVu Y19jb2RlOwogICAgICAgIFB5T2JqZWN0ICpmdW5jX2dsb2JhbHM7CiAgICAgICAgUHlPYmplY3Qg KmZ1bmNfZGVmYXVsdHM7CiAgICAgICAgUHlPYmplY3QgKmZ1bmNfZG9jOwogICAgICAgIFB5T2Jq ZWN0ICpmdW5jX25hbWU7Cn0gUHlGdW5jdGlvbk9iamVjdDsKCmV4dGVybiBQeVR5cGVPYmplY3Qg UHlGdW5jdGlvbl9UeXBlOwoKCgpleHRlcm4gUHlPYmplY3QgKiBQeUZ1bmN0aW9uX05ldyAoUHlP YmplY3QgKiwgUHlPYmplY3QgKik7CmV4dGVybiBQeU9iamVjdCAqIFB5RnVuY3Rpb25fR2V0Q29k ZSAoUHlPYmplY3QgKik7CmV4dGVybiBQeU9iamVjdCAqIFB5RnVuY3Rpb25fR2V0R2xvYmFscyAo UHlPYmplY3QgKik7CmV4dGVybiBQeU9iamVjdCAqIFB5RnVuY3Rpb25fR2V0RGVmYXVsdHMgKFB5 T2JqZWN0ICopOwpleHRlcm4gaW50IFB5RnVuY3Rpb25fU2V0RGVmYXVsdHMgKFB5T2JqZWN0ICos IFB5T2JqZWN0ICopOwoKCgojIDkwICIvdXNyL2luY2x1ZGUvcHl0aG9uMS41L1B5dGhvbi5oIiAy CgojIDQyICIvdXNyL2luY2x1ZGUvcHl0aG9uMS41L2NsYXNzb2JqZWN0LmgiIDEKdHlwZWRlZiBz dHJ1Y3QgewogICAgICAgIGludCBvYl9yZWZjbnQ7IHN0cnVjdCBfdHlwZW9iamVjdCAqb2JfdHlw ZTsKICAgICAgICBQeU9iamVjdCAqY2xfYmFzZXM7CiAgICAgICAgUHlPYmplY3QgKmNsX2RpY3Q7 CiAgICAgICAgUHlPYmplY3QgKmNsX25hbWU7CgogICAgICAgIFB5T2JqZWN0ICpjbF9nZXRhdHRy OwogICAgICAgIFB5T2JqZWN0ICpjbF9zZXRhdHRyOwogICAgICAgIFB5T2JqZWN0ICpjbF9kZWxh dHRyOwp9IFB5Q2xhc3NPYmplY3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IG9iX3Jl ZmNudDsgc3RydWN0IF90eXBlb2JqZWN0ICpvYl90eXBlOwogICAgICAgIFB5Q2xhc3NPYmplY3Qg KmluX2NsYXNzOwogICAgICAgIFB5T2JqZWN0ICppbl9kaWN0Owp9IFB5SW5zdGFuY2VPYmplY3Q7 Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IG9iX3JlZmNudDsgc3RydWN0IF90eXBlb2Jq ZWN0ICpvYl90eXBlOwogICAgICAgIFB5T2JqZWN0ICppbV9mdW5jOwogICAgICAgIFB5T2JqZWN0 ICppbV9zZWxmOwogICAgICAgIFB5T2JqZWN0ICppbV9jbGFzczsKfSBQeU1ldGhvZE9iamVjdDsK CmV4dGVybiBQeVR5cGVPYmplY3QgUHlDbGFzc19UeXBlLCBQeUluc3RhbmNlX1R5cGUsIFB5TWV0 aG9kX1R5cGU7CgoKCgoKZXh0ZXJuIFB5T2JqZWN0ICogUHlDbGFzc19OZXcgKFB5T2JqZWN0ICos IFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOwpleHRlcm4gUHlPYmplY3QgKiBQeUluc3RhbmNlX05l dyAoUHlPYmplY3QgKiwgUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CmV4dGVybiBQeU9iamVjdCAq IFB5TWV0aG9kX05ldyAoUHlPYmplY3QgKiwgUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CgpleHRl cm4gUHlPYmplY3QgKiBQeU1ldGhvZF9GdW5jdGlvbiAoUHlPYmplY3QgKik7CmV4dGVybiBQeU9i amVjdCAqIFB5TWV0aG9kX1NlbGYgKFB5T2JqZWN0ICopOwpleHRlcm4gUHlPYmplY3QgKiBQeU1l dGhvZF9DbGFzcyAoUHlPYmplY3QgKik7CgoKCgoKCgoKCgpleHRlcm4gaW50IFB5Q2xhc3NfSXNT dWJjbGFzcyAoUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CgpleHRlcm4gUHlPYmplY3QgKiBQeUlu c3RhbmNlX0RvQmluT3AKCgogICAgICAgIChQeU9iamVjdCAqLCBQeU9iamVjdCAqLAojIDk0ICIv dXNyL2luY2x1ZGUvcHl0aG9uMS41L2NsYXNzb2JqZWN0LmgiCiAgICAgICAgICAgICAgICAgIGNo YXIgKiwgY2hhciAqLAojIDk0ICIvdXNyL2luY2x1ZGUvcHl0aG9uMS41L2NsYXNzb2JqZWN0Lmgi CiAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICogKCopIChQeU9iamVjdCAqLCBQeU9iamVjdCAq KSApOwoKIyA5MSAiL3Vzci9pbmNsdWRlL3B5dGhvbjEuNS9QeXRob24uaCIgMgoKIyA0MCAiL3Vz ci9pbmNsdWRlL3B5dGhvbjEuNS9maWxlb2JqZWN0LmgiIDEKZXh0ZXJuIFB5VHlwZU9iamVjdCBQ eUZpbGVfVHlwZTsKCgoKZXh0ZXJuIFB5T2JqZWN0ICogUHlGaWxlX0Zyb21TdHJpbmcgKGNoYXIg KiwgY2hhciAqKTsKZXh0ZXJuIHZvaWQgUHlGaWxlX1NldEJ1ZlNpemUgKFB5T2JqZWN0ICosIGlu dCk7CmV4dGVybiBQeU9iamVjdCAqIFB5RmlsZV9Gcm9tRmlsZQogICAgICAgIChGSUxFICosIGNo YXIgKiwgY2hhciAqLCBpbnQgKCopKEZJTEUgKikpOwpleHRlcm4gRklMRSAqIFB5RmlsZV9Bc0Zp bGUgKFB5T2JqZWN0ICopOwpleHRlcm4gUHlPYmplY3QgKiBQeUZpbGVfTmFtZSAoUHlPYmplY3Qg Kik7CmV4dGVybiBQeU9iamVjdCAqIFB5RmlsZV9HZXRMaW5lIChQeU9iamVjdCAqLCBpbnQpOwpl eHRlcm4gaW50IFB5RmlsZV9Xcml0ZU9iamVjdCAoUHlPYmplY3QgKiwgUHlPYmplY3QgKiwgaW50 KTsKZXh0ZXJuIGludCBQeUZpbGVfU29mdFNwYWNlIChQeU9iamVjdCAqLCBpbnQpOwpleHRlcm4g aW50IFB5RmlsZV9Xcml0ZVN0cmluZyAoY2hhciAqLCBQeU9iamVjdCAqKTsKCiMgOTIgIi91c3Iv aW5jbHVkZS9weXRob24xLjUvUHl0aG9uLmgiIDIKCiMgNDcgIi91c3IvaW5jbHVkZS9weXRob24x LjUvY29iamVjdC5oIiAxCmV4dGVybiBQeVR5cGVPYmplY3QgUHlDT2JqZWN0X1R5cGU7CgojIDU3 ICIvdXNyL2luY2x1ZGUvcHl0aG9uMS41L2NvYmplY3QuaCIKZXh0ZXJuIFB5T2JqZWN0ICoKUHlD T2JqZWN0X0Zyb21Wb2lkUHRyICh2b2lkICpjb2JqLCB2b2lkICgqZGVzdHJ1Y3QpKHZvaWQqKSk7 CgoKCgoKCgpleHRlcm4gUHlPYmplY3QgKgpQeUNPYmplY3RfRnJvbVZvaWRQdHJBbmREZXNjICh2 b2lkICpjb2JqLCB2b2lkICpkZXNjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB2b2lkICgqZGVzdHJ1Y3QpKHZvaWQqLHZvaWQqKSk7CgoKZXh0ZXJuIHZvaWQgKgpQeUNP YmplY3RfQXNWb2lkUHRyIChQeU9iamVjdCAqKTsKCgpleHRlcm4gdm9pZCAqClB5Q09iamVjdF9H ZXREZXNjIChQeU9iamVjdCAqKTsKCgpleHRlcm4gdm9pZCAqClB5Q09iamVjdF9JbXBvcnQgKGNo YXIgKm1vZHVsZV9uYW1lLCBjaGFyICpjb2JqZWN0X25hbWUpOwoKIyA5MyAiL3Vzci9pbmNsdWRl L3B5dGhvbjEuNS9QeXRob24uaCIgMgoKIyA0MCAiL3Vzci9pbmNsdWRlL3B5dGhvbjEuNS90cmFj ZWJhY2suaCIgMQpzdHJ1Y3QgX2ZyYW1lOwoKaW50IFB5VHJhY2VCYWNrX0hlcmUgKHN0cnVjdCBf ZnJhbWUgKik7ClB5T2JqZWN0ICogUHlUcmFjZUJhY2tfRmV0Y2ggKHZvaWQpOwppbnQgUHlUcmFj ZUJhY2tfU3RvcmUgKFB5T2JqZWN0ICopOwppbnQgUHlUcmFjZUJhY2tfUHJpbnQgKFB5T2JqZWN0 ICosIFB5T2JqZWN0ICopOwoKCmV4dGVybiBQeVR5cGVPYmplY3QgUHlUcmFjZUJhY2tfVHlwZTsK IyA5NCAiL3Vzci9pbmNsdWRlL3B5dGhvbjEuNS9QeXRob24uaCIgMgoKIyA5ICIvdXNyL2luY2x1 ZGUvcHl0aG9uMS41L3NsaWNlb2JqZWN0LmgiIDEKZXh0ZXJuIFB5T2JqZWN0IF9QeV9FbGxpcHNp c09iamVjdDsKCiMgMjIgIi91c3IvaW5jbHVkZS9weXRob24xLjUvc2xpY2VvYmplY3QuaCIKdHlw ZWRlZiBzdHJ1Y3QgewogICAgICAgIGludCBvYl9yZWZjbnQ7IHN0cnVjdCBfdHlwZW9iamVjdCAq b2JfdHlwZTsKICAgICAgICBQeU9iamVjdCAqc3RhcnQsICpzdG9wLCAqc3RlcDsKfSBQeVNsaWNl T2JqZWN0OwoKZXh0ZXJuIFB5VHlwZU9iamVjdCBQeVNsaWNlX1R5cGU7CgoKClB5T2JqZWN0ICog UHlTbGljZV9OZXcgKAogICAgICAgIFB5T2JqZWN0KiBzdGFydCwgUHlPYmplY3QqIHN0b3AsIFB5 T2JqZWN0KiBzdGVwKTsKaW50IFB5U2xpY2VfR2V0SW5kaWNlcyAoCiAgICAgICAgUHlTbGljZU9i amVjdCAqciwgaW50IGxlbmd0aCwgaW50ICpzdGFydCwgaW50ICpzdG9wLCBpbnQgKnN0ZXApOwoK IyA5NSAiL3Vzci9pbmNsdWRlL3B5dGhvbjEuNS9QeXRob24uaCIgMgoKCiMgNDAgIi91c3IvaW5j bHVkZS9weXRob24xLjUvcHllcnJvcnMuaCIgMQp2b2lkIFB5RXJyX1NldE5vbmUgKFB5T2JqZWN0 ICopOwp2b2lkIFB5RXJyX1NldE9iamVjdCAoUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CnZvaWQg UHlFcnJfU2V0U3RyaW5nIChQeU9iamVjdCAqLCBjb25zdCBjaGFyICopOwpQeU9iamVjdCAqIFB5 RXJyX09jY3VycmVkICh2b2lkKTsKdm9pZCBQeUVycl9DbGVhciAodm9pZCk7CnZvaWQgUHlFcnJf RmV0Y2ggKFB5T2JqZWN0ICoqLCBQeU9iamVjdCAqKiwgUHlPYmplY3QgKiopOwp2b2lkIFB5RXJy X1Jlc3RvcmUgKFB5T2JqZWN0ICosIFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOwoKCmludCBQeUVy cl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMgKFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOwppbnQgUHlF cnJfRXhjZXB0aW9uTWF0Y2hlcyAoUHlPYmplY3QgKik7CnZvaWQgUHlFcnJfTm9ybWFsaXplRXhj ZXB0aW9uIChQeU9iamVjdCoqLCBQeU9iamVjdCoqLCBQeU9iamVjdCoqKTsKCgoKCmV4dGVybiBQ eU9iamVjdCAqIFB5RXhjX0V4Y2VwdGlvbjsKZXh0ZXJuIFB5T2JqZWN0ICogUHlFeGNfU3RhbmRh cmRFcnJvcjsKZXh0ZXJuIFB5T2JqZWN0ICogUHlFeGNfQXJpdGhtZXRpY0Vycm9yOwpleHRlcm4g UHlPYmplY3QgKiBQeUV4Y19Mb29rdXBFcnJvcjsKCmV4dGVybiBQeU9iamVjdCAqIFB5RXhjX0Fz c2VydGlvbkVycm9yOwpleHRlcm4gUHlPYmplY3QgKiBQeUV4Y19BdHRyaWJ1dGVFcnJvcjsKZXh0 ZXJuIFB5T2JqZWN0ICogUHlFeGNfRU9GRXJyb3I7CmV4dGVybiBQeU9iamVjdCAqIFB5RXhjX0Zs b2F0aW5nUG9pbnRFcnJvcjsKZXh0ZXJuIFB5T2JqZWN0ICogUHlFeGNfRW52aXJvbm1lbnRFcnJv cjsKZXh0ZXJuIFB5T2JqZWN0ICogUHlFeGNfSU9FcnJvcjsKZXh0ZXJuIFB5T2JqZWN0ICogUHlF eGNfT1NFcnJvcjsKZXh0ZXJuIFB5T2JqZWN0ICogUHlFeGNfSW1wb3J0RXJyb3I7CmV4dGVybiBQ eU9iamVjdCAqIFB5RXhjX0luZGV4RXJyb3I7CmV4dGVybiBQeU9iamVjdCAqIFB5RXhjX0tleUVy cm9yOwpleHRlcm4gUHlPYmplY3QgKiBQeUV4Y19LZXlib2FyZEludGVycnVwdDsKZXh0ZXJuIFB5 T2JqZWN0ICogUHlFeGNfTWVtb3J5RXJyb3I7CmV4dGVybiBQeU9iamVjdCAqIFB5RXhjX05hbWVF cnJvcjsKZXh0ZXJuIFB5T2JqZWN0ICogUHlFeGNfT3ZlcmZsb3dFcnJvcjsKZXh0ZXJuIFB5T2Jq ZWN0ICogUHlFeGNfUnVudGltZUVycm9yOwpleHRlcm4gUHlPYmplY3QgKiBQeUV4Y19Ob3RJbXBs ZW1lbnRlZEVycm9yOwpleHRlcm4gUHlPYmplY3QgKiBQeUV4Y19TeW50YXhFcnJvcjsKZXh0ZXJu IFB5T2JqZWN0ICogUHlFeGNfU3lzdGVtRXJyb3I7CmV4dGVybiBQeU9iamVjdCAqIFB5RXhjX1N5 c3RlbUV4aXQ7CmV4dGVybiBQeU9iamVjdCAqIFB5RXhjX1R5cGVFcnJvcjsKZXh0ZXJuIFB5T2Jq ZWN0ICogUHlFeGNfVmFsdWVFcnJvcjsKZXh0ZXJuIFB5T2JqZWN0ICogUHlFeGNfWmVyb0Rpdmlz aW9uRXJyb3I7CgpleHRlcm4gUHlPYmplY3QgKiBQeUV4Y19NZW1vcnlFcnJvckluc3Q7CgoKCgpl eHRlcm4gaW50IFB5RXJyX0JhZEFyZ3VtZW50ICh2b2lkKTsKZXh0ZXJuIFB5T2JqZWN0ICogUHlF cnJfTm9NZW1vcnkgKHZvaWQpOwpleHRlcm4gUHlPYmplY3QgKiBQeUVycl9TZXRGcm9tRXJybm8g KFB5T2JqZWN0ICopOwpleHRlcm4gUHlPYmplY3QgKiBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmls ZW5hbWUgKFB5T2JqZWN0ICosIGNoYXIgKik7CmV4dGVybiBQeU9iamVjdCAqIFB5RXJyX0Zvcm1h dCAoUHlPYmplY3QgKiwgY29uc3QgY2hhciAqLCAuLi4pOwoKZXh0ZXJuIHZvaWQgUHlFcnJfQmFk SW50ZXJuYWxDYWxsICh2b2lkKTsKCgpQeU9iamVjdCAqIFB5RXJyX05ld0V4Y2VwdGlvbiAoY2hh ciAqbmFtZSwgUHlPYmplY3QgKmJhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB5T2JqZWN0ICpkaWN0KTsKCgpleHRlcm4gaW50IFB5RXJyX0NoZWNrU2lnbmFscyAo dm9pZCk7CmV4dGVybiB2b2lkIFB5RXJyX1NldEludGVycnVwdCAodm9pZCk7CgoKIyA5NyAiL3Vz ci9pbmNsdWRlL3B5dGhvbjEuNS9QeXRob24uaCIgMgoKIyAxMDkgIi91c3IvaW5jbHVkZS9weXRo b24xLjUvbXltYWxsb2MuaCIgMQpleHRlcm4gdm9pZCAqIFB5X01hbGxvYyAoc2l6ZV90KTsKZXh0 ZXJuIHZvaWQgKiBQeV9SZWFsbG9jICh2b2lkICosIHNpemVfdCk7CmV4dGVybiB2b2lkIFB5X0Zy ZWUgKHZvaWQgKik7CgoKZXh0ZXJuIHZvaWQgKiBQeU1lbV9NYWxsb2MgKHNpemVfdCk7CmV4dGVy biB2b2lkICogUHlNZW1fUmVhbGxvYyAodm9pZCAqLCBzaXplX3QpOwpleHRlcm4gdm9pZCBQeU1l bV9GcmVlICh2b2lkICopOwoKIyA5OCAiL3Vzci9pbmNsdWRlL3B5dGhvbjEuNS9QeXRob24uaCIg MgoKCiMgNDMgIi91c3IvaW5jbHVkZS9weXRob24xLjUvcHlzdGF0ZS5oIiAxCnN0cnVjdCBfdHM7 CnN0cnVjdCBfaXM7Cgp0eXBlZGVmIHN0cnVjdCBfaXMgewoKICAgICAgICBzdHJ1Y3QgX2lzICpu ZXh0OwogICAgICAgIHN0cnVjdCBfdHMgKnRzdGF0ZV9oZWFkOwoKICAgICAgICBQeU9iamVjdCAq bW9kdWxlczsKICAgICAgICBQeU9iamVjdCAqc3lzZGljdDsKICAgICAgICBQeU9iamVjdCAqYnVp bHRpbnM7CgogICAgICAgIGludCBjaGVja2ludGVydmFsOwoKfSBQeUludGVycHJldGVyU3RhdGU7 CgoKCgpzdHJ1Y3QgX2ZyYW1lOwoKdHlwZWRlZiBzdHJ1Y3QgX3RzIHsKCiAgICAgICAgc3RydWN0 IF90cyAqbmV4dDsKICAgICAgICBQeUludGVycHJldGVyU3RhdGUgKmludGVycDsKCiAgICAgICAg c3RydWN0IF9mcmFtZSAqZnJhbWU7CiAgICAgICAgaW50IHJlY3Vyc2lvbl9kZXB0aDsKICAgICAg ICBpbnQgdGlja2VyOwogICAgICAgIGludCB0cmFjaW5nOwoKICAgICAgICBQeU9iamVjdCAqc3lz X3Byb2ZpbGVmdW5jOwogICAgICAgIFB5T2JqZWN0ICpzeXNfdHJhY2VmdW5jOwoKICAgICAgICBQ eU9iamVjdCAqY3VyZXhjX3R5cGU7CiAgICAgICAgUHlPYmplY3QgKmN1cmV4Y192YWx1ZTsKICAg ICAgICBQeU9iamVjdCAqY3VyZXhjX3RyYWNlYmFjazsKCiAgICAgICAgUHlPYmplY3QgKmV4Y190 eXBlOwogICAgICAgIFB5T2JqZWN0ICpleGNfdmFsdWU7CiAgICAgICAgUHlPYmplY3QgKmV4Y190 cmFjZWJhY2s7CgogICAgICAgIFB5T2JqZWN0ICpkaWN0OwoKCgp9IFB5VGhyZWFkU3RhdGU7CgoK UHlJbnRlcnByZXRlclN0YXRlICogUHlJbnRlcnByZXRlclN0YXRlX05ldyAodm9pZCk7CnZvaWQg UHlJbnRlcnByZXRlclN0YXRlX0NsZWFyIChQeUludGVycHJldGVyU3RhdGUgKik7CnZvaWQgUHlJ bnRlcnByZXRlclN0YXRlX0RlbGV0ZSAoUHlJbnRlcnByZXRlclN0YXRlICopOwoKUHlUaHJlYWRT dGF0ZSAqIFB5VGhyZWFkU