From: "Justin R. Smith" Organization: Drexel University To: pgcc AT delorie DOT com Subject: Bug in pgcc Date: Sun, 28 Feb 1999 09:25:24 -0500 X-Mailer: KMail [version 1.0.17] Content-Type: Multipart/Mixed; boundary="Boundary-=_BbmQBhCDarzOwKkYHIDdqSCDXrJm" MIME-Version: 1.0 Message-Id: <99022809341601.18499@jsmith.org> Reply-To: pgcc AT delorie DOT com --Boundary-=_BbmQBhCDarzOwKkYHIDdqSCDXrJm Content-Type: text/plain Content-Transfer-Encoding: 8bit I am not on the mailing list, so please reply to me personally. I am running gcc version pgcc-2.91.60 19981201 (egcs-1.1.1 release) and trying to compile teTeX 0.9. Most of the compile ran fine, until it reached the end, at which point it died with ./../egcs-1.1.1/gcc/caller-save.c:657: Internal compiler error in function insert_save_restore The command line that created this error: gcc -DHAVE_CONFIG_H -I. -I. -I../../libs/libwww -I./../../libs/libwww -DHAVE_LIBWWW -DHAVE_WWWLIB_H -DPS_GS -DOmega -I.. -I./.. -g -O2 -c special.c The source file (with -E option passed to gcc) is attached. Thank you! -- ______________________________________________________________________ | Time blows wildly against my door | Justin R. Smith Stirring discarded sorrows | Department of Mathematics and Like dead leaves of summers past | Computer Science Memories of forgotten lore | Drexel University Making way for new tomorrows | Philadelphia, PA 19104 New hopes, new fears, | and new ways that last | Office: (215) 895-1847 | c Justin R. Smith, March 14, 1994 | Fax: (215) 895-1582 My home page: http://www.mcs.drexel.edu/~jsmith --Boundary-=_BbmQBhCDarzOwKkYHIDdqSCDXrJm Content-Type: text/plain; name="zz" Content-Transfer-Encoding: base64 Content-Description: Offending source file Content-Disposition: attachment; filename="zz" IyAxICJzcGVjaWFsLmMiCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCiMgMSAieGR2aS1jb25maWcuaCIgMQogCgoKCgoKCgogCiMgMSAiLi4v a3BhdGhzZWEvYy1hdXRvLmgiIDEKIAogCiAKCgoKCgogCgoKCiAKCiAKCgogCgoKCgoKCgoKCgog CiAKCiAKIAoKIAoKCiAKCgogCgoKCgoKIAoKCiAKCiAKCgoKIAoKCgoKCgoKIAoKCiAKCgogCgoK IAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgog CgoKIAoKCiAKCgogCiAKCiAKCgogCgoKIAoKCiAKIAoKIAogCgogCgoKIAoKCiMgMTAgInhkdmkt Y29uZmlnLmgiIDIKCiMgMSAiLi4va3BhdGhzZWEvY29uZmlnLmgiIDEKIAoKCgoKCgoKCgoKCgoK CgoKCgoKCgogCgoKCgogCgoKCgoKCgoKCgoKCiAKCgoKCiMgMSAiYy1hdXRvLmgiIDEKIAogCgog CiAKCiAKCgogCiAKCiAKCgogCiAKCiAKCgogCiAKCiAKCgogCiAKCiAKCiAKCiAKIAoKIAoKCiAK CgogCgoKCiAKCgoKIAoKCiAKIAoKIAoKCiAKCgogCgoKIAoKIAoKIAoKCgoKCgoKIAogCgogCgoK IAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKIAoKIAoKCiAKIAoKIAogCgogCiAKCiAKIAoK IAogCgogCiAKIyA0NiAiLi4va3BhdGhzZWEvY29uZmlnLmgiIDIKCgoKCgoKCgoKCgogCiAKCgoK CiMgMSAiLi4va3BhdGhzZWEvYy1zdGQuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCiAK CgojIDEgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK CgoKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoK CgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK CgoKCgoKCgoKCiAKCgoKCgogCgoKCiAKCgoKCgoKCiAKIyAxMTcgIi91c3IvaW5jbHVkZS9mZWF0 dXJlcy5oIiAzCgoKIAoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgogCgoKCgoKCgoKCgoKCiAKCiMgMSAiL3Vzci9p bmNsdWRlL3N5cy9jZGVmcy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9p bmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIyAyMjIgIi91c3IvaW5j bHVkZS9mZWF0dXJlcy5oIiAzCgojIDIyICIvdXNyL2luY2x1ZGUvc3lzL2NkZWZzLmgiIDIgMwoK CiAKCgoKCgoKCiMgNTQgIi91c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMwoKCiAKCgoKCgoKCiAK CgoKIyA4NiAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAzCgoKCiAKCgoKCgoKCgogCgoKCgoK CgojIDIwNSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwoKCgogCgogCgoKCgoKCgoKIyAx ICIvdXNyL2luY2x1ZGUvZ251L3N0dWJzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKIyAyMTkgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKCgoKCiMgMjcgIi91c3Iv aW5jbHVkZS9tYXRoLmgiIDIgMwoKCiAKCiAKCiMgMSAiL3Vzci9pbmNsdWRlL2h1Z2VfdmFsLmgi IDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgogCgojIDY4ICIv dXNyL2luY2x1ZGUvaHVnZV92YWwuaCIgMwoKCgoKIyAzMyAiL3Vzci9pbmNsdWRlL21hdGguaCIg MiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9tYXRoY2FsbHMu aCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgog CgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBhY29zICAgICAgICAgIChkb3VibGUgIF9feCkg ICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2Fjb3MgICAgICAgICAgKGRvdWJsZSAgX194 KSAgICAgIDsKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgYXNpbiAgICAgICAgICAoZG91Ymxl ICBfX3gpICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19hc2luICAgICAgICAgIChkb3Vi bGUgIF9feCkgICAgICA7CiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGF0YW4gICAgICAgICAg KGRvdWJsZSAgX194KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fYXRhbiAgICAgICAg ICAoZG91YmxlICBfX3gpICAgICAgOwogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBhdGFuMiAg ICAgICAgICAoZG91YmxlICBfX3ksIGRvdWJsZSAgX194KSAgICA7IGV4dGVybiAgIGRvdWJsZSAg ICAgICAgIF9fYXRhbjIgICAgICAgICAgKGRvdWJsZSAgX195LCBkb3VibGUgIF9feCkgICAgICA7 CgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBjb3MgICAgICAgICAgKGRvdWJsZSAgX194KSAg ICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fY29zICAgICAgICAgIChkb3VibGUgIF9feCkg ICAgICA7CiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIHNpbiAgICAgICAgICAoZG91YmxlICBf X3gpICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19zaW4gICAgICAgICAgKGRvdWJsZSAg X194KSAgICAgIDsKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgdGFuICAgICAgICAgIChkb3Vi bGUgIF9feCkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX3RhbiAgICAgICAgICAoZG91 YmxlICBfX3gpICAgICAgOwoKCiAKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGNvc2ggICAg ICAgICAgKGRvdWJsZSAgX194KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fY29zaCAg ICAgICAgICAoZG91YmxlICBfX3gpICAgICAgOwogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBz aW5oICAgICAgICAgIChkb3VibGUgIF9feCkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBf X3NpbmggICAgICAgICAgKGRvdWJsZSAgX194KSAgICAgIDsKIApleHRlcm4gICBkb3VibGUgICAg ICAgICAgdGFuaCAgICAgICAgICAoZG91YmxlICBfX3gpICAgIDsgZXh0ZXJuICAgZG91YmxlICAg ICAgICAgX190YW5oICAgICAgICAgIChkb3VibGUgIF9feCkgICAgICA7CgoKIApleHRlcm4gICBk b3VibGUgICAgICAgICAgYWNvc2ggICAgICAgICAgKGRvdWJsZSAgX194KSAgICA7IGV4dGVybiAg IGRvdWJsZSAgICAgICAgIF9fYWNvc2ggICAgICAgICAgKGRvdWJsZSAgX194KSAgICAgIDsKIApl eHRlcm4gICBkb3VibGUgICAgICAgICAgYXNpbmggICAgICAgICAgKGRvdWJsZSAgX194KSAgICA7 IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fYXNpbmggICAgICAgICAgKGRvdWJsZSAgX194KSAg ICAgIDsKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgYXRhbmggICAgICAgICAgKGRvdWJsZSAg X194KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fYXRhbmggICAgICAgICAgKGRvdWJs ZSAgX194KSAgICAgIDsKCgogCgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBleHAgICAgICAg ICAgKGRvdWJsZSAgX194KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fZXhwICAgICAg ICAgIChkb3VibGUgIF9feCkgICAgICA7CgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBmcmV4 cCAgICAgICAgICAoZG91YmxlICBfX3gsIGludCAqX19leHBvbmVudCkgICAgOyBleHRlcm4gICBk b3VibGUgICAgICAgICBfX2ZyZXhwICAgICAgICAgIChkb3VibGUgIF9feCwgaW50ICpfX2V4cG9u ZW50KSAgICAgIDsKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGxkZXhwICAgICAgICAgIChk b3VibGUgIF9feCwgaW50IF9fZXhwb25lbnQpICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAg X19sZGV4cCAgICAgICAgICAoZG91YmxlICBfX3gsIGludCBfX2V4cG9uZW50KSAgICAgIDsKCiAK ZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGxvZyAgICAgICAgICAoZG91YmxlICBfX3gpICAgIDsg ZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19sb2cgICAgICAgICAgKGRvdWJsZSAgX194KSAgICAg IDsKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGxvZzEwICAgICAgICAgIChkb3VibGUgIF9f eCkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2xvZzEwICAgICAgICAgIChkb3VibGUg IF9feCkgICAgICA7CgoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgZXhwbTEgICAgICAgICAg KGRvdWJsZSAgX194KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fZXhwbTEgICAgICAg ICAgKGRvdWJsZSAgX194KSAgICAgIDsKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGxvZzFw ICAgICAgICAgIChkb3VibGUgIF9feCkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2xv ZzFwICAgICAgICAgIChkb3VibGUgIF9feCkgICAgICA7CgogCmV4dGVybiAgIGRvdWJsZSAgICAg ICAgICBsb2diICAgICAgICAgIChkb3VibGUgIF9feCkgICAgOyBleHRlcm4gICBkb3VibGUgICAg ICAgICBfX2xvZ2IgICAgICAgICAgKGRvdWJsZSAgX194KSAgICAgIDsKCgogCmV4dGVybiAgIGRv dWJsZSAgICAgICAgICBtb2RmICAgICAgICAgIChkb3VibGUgIF9feCwgZG91YmxlICAqX19pcHRy KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fbW9kZiAgICAgICAgICAoZG91YmxlICBf X3gsIGRvdWJsZSAgKl9faXB0cikgICAgICA7CgoKIAoKIApleHRlcm4gICBkb3VibGUgICAgICAg ICAgcG93ICAgICAgICAgIChkb3VibGUgIF9feCwgZG91YmxlICBfX3kpICAgIDsgZXh0ZXJuICAg ZG91YmxlICAgICAgICAgX19wb3cgICAgICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUgIF9feSkg ICAgICA7CgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBzcXJ0ICAgICAgICAgIChkb3VibGUg IF9feCkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX3NxcnQgICAgICAgICAgKGRvdWJs ZSAgX194KSAgICAgIDsKCgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBjYnJ0ICAgICAgICAg IChkb3VibGUgIF9feCkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2NicnQgICAgICAg ICAgKGRvdWJsZSAgX194KSAgICAgIDsKCgoKIAoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAg Y2VpbCAgICAgICAgICAoZG91YmxlICBfX3gpICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAg X19jZWlsICAgICAgICAgIChkb3VibGUgIF9feCkgICAgICA7CgogCmV4dGVybiAgIGRvdWJsZSAg ICAgICAgICBmYWJzICAgICAgICAgIChkb3VibGUgIF9feCkgICAgOyBleHRlcm4gICBkb3VibGUg ICAgICAgICBfX2ZhYnMgICAgICAgICAgKGRvdWJsZSAgX194KSAgICAgIDsKCiAKZXh0ZXJuICAg ZG91YmxlICAgICAgICAgIGZsb29yICAgICAgICAgIChkb3VibGUgIF9feCkgICAgOyBleHRlcm4g ICBkb3VibGUgICAgICAgICBfX2Zsb29yICAgICAgICAgIChkb3VibGUgIF9feCkgICAgICA7Cgog CmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBmbW9kICAgICAgICAgIChkb3VibGUgIF9feCwgZG91 YmxlICBfX3kpICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19mbW9kICAgICAgICAgIChk b3VibGUgIF9feCwgZG91YmxlICBfX3kpICAgICAgOwoKCgoKIAoKZXh0ZXJuICAgaW50ICAgICAg ICBpc2luZiAgICAgICAgKGRvdWJsZSAgX192YWx1ZSkgICA7IGV4dGVybiAgIGludCAgICAgICAg X19pc2luZiAgICAgICAgKGRvdWJsZSAgX192YWx1ZSkgICAgOwoKIApleHRlcm4gICBpbnQgICAg ICAgIGZpbml0ZSAgICAgICAgKGRvdWJsZSAgX192YWx1ZSkgICA7IGV4dGVybiAgIGludCAgICAg ICAgX19maW5pdGUgICAgICAgIChkb3VibGUgIF9fdmFsdWUpICAgIDsKCiAKZXh0ZXJuICAgZG91 YmxlICAgICAgICAgIGNvcHlzaWduICAgICAgICAgIChkb3VibGUgIF9feCwgZG91YmxlICBfX3kp ICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19jb3B5c2lnbiAgICAgICAgICAoZG91Ymxl ICBfX3gsIGRvdWJsZSAgX195KSAgICAgIDsKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIHNj YWxibiAgICAgICAgICAoZG91YmxlICBfX3gsIGludCBfX24pICAgIDsgZXh0ZXJuICAgZG91Ymxl ICAgICAgICAgX19zY2FsYm4gICAgICAgICAgKGRvdWJsZSAgX194LCBpbnQgX19uKSAgICAgIDsK CiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGRyZW0gICAgICAgICAgKGRvdWJsZSAgX194LCBk b3VibGUgIF9feSkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2RyZW0gICAgICAgICAg KGRvdWJsZSAgX194LCBkb3VibGUgIF9feSkgICAgICA7CgogCmV4dGVybiAgIGRvdWJsZSAgICAg ICAgICBzaWduaWZpY2FuZCAgICAgICAgICAoZG91YmxlICBfX3gpICAgIDsgZXh0ZXJuICAgZG91 YmxlICAgICAgICAgX19zaWduaWZpY2FuZCAgICAgICAgICAoZG91YmxlICBfX3gpICAgICAgOwoK CgoKCiAKZXh0ZXJuICAgaW50ICAgICAgICBpc25hbiAgICAgICAgKGRvdWJsZSAgX192YWx1ZSkg ICA7IGV4dGVybiAgIGludCAgICAgICAgX19pc25hbiAgICAgICAgKGRvdWJsZSAgX192YWx1ZSkg ICAgOwoKIApleHRlcm4gICBpbnQgICAgICAgIGlsb2diICAgICAgICAoZG91YmxlICBfX3gpICAg OyBleHRlcm4gICBpbnQgICAgICAgIF9faWxvZ2IgICAgICAgIChkb3VibGUgIF9feCkgICAgOwoK IApleHRlcm4gICBkb3VibGUgICAgICAgICAgaHlwb3QgICAgICAgICAgKGRvdWJsZSAgX194LCBk b3VibGUgIF9feSkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2h5cG90ICAgICAgICAg IChkb3VibGUgIF9feCwgZG91YmxlICBfX3kpICAgICAgOwoKCiAKZXh0ZXJuICAgZG91YmxlICAg ICAgICAgIGVyZiAgICAgICAgICAoZG91YmxlICkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAg ICBfX2VyZiAgICAgICAgICAoZG91YmxlICkgICAgICA7CmV4dGVybiAgIGRvdWJsZSAgICAgICAg ICBlcmZjICAgICAgICAgIChkb3VibGUgKSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9f ZXJmYyAgICAgICAgICAoZG91YmxlICkgICAgICA7CmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBn YW1tYSAgICAgICAgICAoZG91YmxlICkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2dh bW1hICAgICAgICAgIChkb3VibGUgKSAgICAgIDsKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGow ICAgICAgICAgIChkb3VibGUgKSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fajAgICAg ICAgICAgKGRvdWJsZSApICAgICAgOwpleHRlcm4gICBkb3VibGUgICAgICAgICAgajEgICAgICAg ICAgKGRvdWJsZSApICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19qMSAgICAgICAgICAo ZG91YmxlICkgICAgICA7CmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBqbiAgICAgICAgICAoaW50 LCBkb3VibGUgKSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fam4gICAgICAgICAgKGlu dCwgZG91YmxlICkgICAgICA7CmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBsZ2FtbWEgICAgICAg ICAgKGRvdWJsZSApICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19sZ2FtbWEgICAgICAg ICAgKGRvdWJsZSApICAgICAgOwpleHRlcm4gICBkb3VibGUgICAgICAgICAgeTAgICAgICAgICAg KGRvdWJsZSApICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX195MCAgICAgICAgICAoZG91 YmxlICkgICAgICA7CmV4dGVybiAgIGRvdWJsZSAgICAgICAgICB5MSAgICAgICAgICAoZG91Ymxl ICkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX3kxICAgICAgICAgIChkb3VibGUgKSAg ICAgIDsKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIHluICAgICAgICAgIChpbnQsIGRvdWJsZSAp ICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX195biAgICAgICAgICAoaW50LCBkb3VibGUg KSAgICAgIDsKCgoKCiAKCgpleHRlcm4gICBkb3VibGUgICAgICAgICAgZ2FtbWFfciAgICAgICAg ICAgICAgKGRvdWJsZSAsIGludCAqKSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fZ2Ft bWFfciAgICAgICAgICAgICAgKGRvdWJsZSAsIGludCAqKSAgICAgIDsKZXh0ZXJuICAgZG91Ymxl ICAgICAgICAgIGxnYW1tYV9yICAgICAgICAgICAgICAoZG91YmxlICwgaW50ICopICAgIDsgZXh0 ZXJuICAgZG91YmxlICAgICAgICAgX19sZ2FtbWFfciAgICAgICAgICAgICAgKGRvdWJsZSAsIGlu dCAqKSAgICAgIDsKCgoKCgogCgpleHRlcm4gICBkb3VibGUgICAgICAgICAgcmludCAgICAgICAg ICAoZG91YmxlICBfX3gpICAgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19yaW50ICAgICAg ICAgIChkb3VibGUgIF9feCkgICAgICA7CgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBzY2Fs YiAgICAgICAgICAoZG91YmxlICBfX3gsIGRvdWJsZSAgX19uKSAgICA7IGV4dGVybiAgIGRvdWJs ZSAgICAgICAgIF9fc2NhbGIgICAgICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUgIF9fbikgICAg ICA7CgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBuZXh0YWZ0ZXIgICAgICAgICAgKGRvdWJs ZSAgX194LCBkb3VibGUgIF9feSkgICAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX25leHRh ZnRlciAgICAgICAgICAoZG91YmxlICBfX3gsIGRvdWJsZSAgX195KSAgICAgIDsKCiAKZXh0ZXJu ICAgZG91YmxlICAgICAgICAgIHJlbWFpbmRlciAgICAgICAgICAoZG91YmxlICBfX3gsIGRvdWJs ZSAgX195KSAgICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fcmVtYWluZGVyICAgICAgICAg IChkb3VibGUgIF9feCwgZG91YmxlICBfX3kpICAgICAgOwoKCgojIDU2ICIvdXNyL2luY2x1ZGUv bWF0aC5oIiAyIDMKCgoKCgoKCiAKCgoKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9tYXRoY2Fs bHMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgogCgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGFjb3NmICAgICAgICAgKGZsb2F0ICAgX194 KSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19hY29zZiAgICAgICAgIChmbG9hdCAgIF9f eCkgICAgICA7CiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgYXNpbmYgICAgICAgICAoZmxvYXQg ICBfX3gpICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2FzaW5mICAgICAgICAgKGZsb2F0 ICAgX194KSAgICAgIDsKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBhdGFuZiAgICAgICAgIChm bG9hdCAgIF9feCkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fYXRhbmYgICAgICAgICAo ZmxvYXQgICBfX3gpICAgICAgOwogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGF0YW4yZiAgICAg ICAgIChmbG9hdCAgIF9feSwgZmxvYXQgICBfX3gpICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAg ICBfX2F0YW4yZiAgICAgICAgIChmbG9hdCAgIF9feSwgZmxvYXQgICBfX3gpICAgICAgOwoKIApl eHRlcm4gICBmbG9hdCAgICAgICAgICBjb3NmICAgICAgICAgKGZsb2F0ICAgX194KSAgICA7IGV4 dGVybiAgIGZsb2F0ICAgICAgICAgX19jb3NmICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgIDsK IApleHRlcm4gICBmbG9hdCAgICAgICAgICBzaW5mICAgICAgICAgKGZsb2F0ICAgX194KSAgICA7 IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19zaW5mICAgICAgICAgKGZsb2F0ICAgX194KSAgICAg IDsKIApleHRlcm4gICBmbG9hdCAgICAgICAgICB0YW5mICAgICAgICAgKGZsb2F0ICAgX194KSAg ICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX190YW5mICAgICAgICAgKGZsb2F0ICAgX194KSAg ICAgIDsKCgogCgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGNvc2hmICAgICAgICAgKGZsb2F0 ICAgX194KSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19jb3NoZiAgICAgICAgIChmbG9h dCAgIF9feCkgICAgICA7CiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgc2luaGYgICAgICAgICAo ZmxvYXQgICBfX3gpICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX3NpbmhmICAgICAgICAg KGZsb2F0ICAgX194KSAgICAgIDsKIApleHRlcm4gICBmbG9hdCAgICAgICAgICB0YW5oZiAgICAg ICAgIChmbG9hdCAgIF9feCkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fdGFuaGYgICAg ICAgICAoZmxvYXQgICBfX3gpICAgICAgOwoKCiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgYWNv c2hmICAgICAgICAgKGZsb2F0ICAgX194KSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19h Y29zaGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgICAgOwogCmV4dGVybiAgIGZsb2F0ICAgICAg ICAgIGFzaW5oZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgOyBleHRlcm4gICBmbG9hdCAgICAg ICAgIF9fYXNpbmhmICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgIDsKIApleHRlcm4gICBmbG9h dCAgICAgICAgICBhdGFuaGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIDsgZXh0ZXJuICAgZmxv YXQgICAgICAgICBfX2F0YW5oZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgICA7CgoKIAoKIApl eHRlcm4gICBmbG9hdCAgICAgICAgICBleHBmICAgICAgICAgKGZsb2F0ICAgX194KSAgICA7IGV4 dGVybiAgIGZsb2F0ICAgICAgICAgX19leHBmICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgIDsK CiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgZnJleHBmICAgICAgICAgKGZsb2F0ICAgX194LCBp bnQgKl9fZXhwb25lbnQpICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2ZyZXhwZiAgICAg ICAgIChmbG9hdCAgIF9feCwgaW50ICpfX2V4cG9uZW50KSAgICAgIDsKCiAKZXh0ZXJuICAgZmxv YXQgICAgICAgICAgbGRleHBmICAgICAgICAgKGZsb2F0ICAgX194LCBpbnQgX19leHBvbmVudCkg ICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fbGRleHBmICAgICAgICAgKGZsb2F0ICAgX194 LCBpbnQgX19leHBvbmVudCkgICAgICA7CgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGxvZ2Yg ICAgICAgICAoZmxvYXQgICBfX3gpICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2xvZ2Yg ICAgICAgICAoZmxvYXQgICBfX3gpICAgICAgOwoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBs b2cxMGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBf X2xvZzEwZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgICA7CgoKIApleHRlcm4gICBmbG9hdCAg ICAgICAgICBleHBtMWYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIDsgZXh0ZXJuICAgZmxvYXQg ICAgICAgICBfX2V4cG0xZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgICA7CgogCmV4dGVybiAg IGZsb2F0ICAgICAgICAgIGxvZzFwZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgOyBleHRlcm4g ICBmbG9hdCAgICAgICAgIF9fbG9nMXBmICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgIDsKCiAK ZXh0ZXJuICAgZmxvYXQgICAgICAgICAgbG9nYmYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIDsg ZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2xvZ2JmICAgICAgICAgKGZsb2F0ICAgX194KSAgICAg IDsKCgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIG1vZGZmICAgICAgICAgKGZsb2F0ICAgX194 LCBmbG9hdCAgICpfX2lwdHIpICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX21vZGZmICAg ICAgICAgKGZsb2F0ICAgX194LCBmbG9hdCAgICpfX2lwdHIpICAgICAgOwoKCiAKCiAKZXh0ZXJu ICAgZmxvYXQgICAgICAgICAgcG93ZiAgICAgICAgIChmbG9hdCAgIF9feCwgZmxvYXQgICBfX3kp ICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX3Bvd2YgICAgICAgICAoZmxvYXQgICBfX3gs IGZsb2F0ICAgX195KSAgICAgIDsKCiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgc3FydGYgICAg ICAgICAoZmxvYXQgICBfX3gpICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX3NxcnRmICAg ICAgICAgKGZsb2F0ICAgX194KSAgICAgIDsKCgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGNi cnRmICAgICAgICAgKGZsb2F0ICAgX194KSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19j YnJ0ZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgICA7CgoKCiAKCiAKZXh0ZXJuICAgZmxvYXQg ICAgICAgICAgY2VpbGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIDsgZXh0ZXJuICAgZmxvYXQg ICAgICAgICBfX2NlaWxmICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgIDsKCiAKZXh0ZXJuICAg ZmxvYXQgICAgICAgICAgZmFic2YgICAgICAgICAoZmxvYXQgICBfX3gpICAgIDsgZXh0ZXJuICAg ZmxvYXQgICAgICAgICBfX2ZhYnNmICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgIDsKCiAKZXh0 ZXJuICAgZmxvYXQgICAgICAgICAgZmxvb3JmICAgICAgICAgKGZsb2F0ICAgX194KSAgICA7IGV4 dGVybiAgIGZsb2F0ICAgICAgICAgX19mbG9vcmYgICAgICAgICAoZmxvYXQgICBfX3gpICAgICAg OwoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBmbW9kZiAgICAgICAgIChmbG9hdCAgIF9feCwg ZmxvYXQgICBfX3kpICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2Ztb2RmICAgICAgICAg KGZsb2F0ICAgX194LCBmbG9hdCAgIF9feSkgICAgICA7CgoKCgogCgpleHRlcm4gICBpbnQgICAg ICAgaXNpbmZmICAgICAgIChmbG9hdCAgIF9fdmFsdWUpICAgOyBleHRlcm4gICBpbnQgICAgICAg X19pc2luZmYgICAgICAgKGZsb2F0ICAgX192YWx1ZSkgICAgOwoKIApleHRlcm4gICBpbnQgICAg ICAgZmluaXRlZiAgICAgICAoZmxvYXQgICBfX3ZhbHVlKSAgIDsgZXh0ZXJuICAgaW50ICAgICAg IF9fZmluaXRlZiAgICAgICAoZmxvYXQgICBfX3ZhbHVlKSAgICA7CgogCmV4dGVybiAgIGZsb2F0 ICAgICAgICAgIGNvcHlzaWduZiAgICAgICAgIChmbG9hdCAgIF9feCwgZmxvYXQgICBfX3kpICAg IDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2NvcHlzaWduZiAgICAgICAgIChmbG9hdCAgIF9f eCwgZmxvYXQgICBfX3kpICAgICAgOwoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBzY2FsYm5m ICAgICAgICAgKGZsb2F0ICAgX194LCBpbnQgX19uKSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAg ICAgX19zY2FsYm5mICAgICAgICAgKGZsb2F0ICAgX194LCBpbnQgX19uKSAgICAgIDsKCiAKZXh0 ZXJuICAgZmxvYXQgICAgICAgICAgZHJlbWYgICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0ICAg X195KSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19kcmVtZiAgICAgICAgIChmbG9hdCAg IF9feCwgZmxvYXQgICBfX3kpICAgICAgOwoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBzaWdu aWZpY2FuZGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAg ICBfX3NpZ25pZmljYW5kZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgICA7CgoKCgoKIApleHRl cm4gICBpbnQgICAgICAgaXNuYW5mICAgICAgIChmbG9hdCAgIF9fdmFsdWUpICAgOyBleHRlcm4g ICBpbnQgICAgICAgX19pc25hbmYgICAgICAgKGZsb2F0ICAgX192YWx1ZSkgICAgOwoKIApleHRl cm4gICBpbnQgICAgICAgaWxvZ2JmICAgICAgIChmbG9hdCAgIF9feCkgICA7IGV4dGVybiAgIGlu dCAgICAgICBfX2lsb2diZiAgICAgICAoZmxvYXQgICBfX3gpICAgIDsKCiAKZXh0ZXJuICAgZmxv YXQgICAgICAgICAgaHlwb3RmICAgICAgICAgKGZsb2F0ICAgX194LCBmbG9hdCAgIF9feSkgICAg OyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9faHlwb3RmICAgICAgICAgKGZsb2F0ICAgX194LCBm bG9hdCAgIF9feSkgICAgICA7CgoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBlcmZmICAgICAg ICAgKGZsb2F0ICApICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2VyZmYgICAgICAgICAo ZmxvYXQgICkgICAgICA7CmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGVyZmNmICAgICAgICAgKGZs b2F0ICApICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2VyZmNmICAgICAgICAgKGZsb2F0 ICApICAgICAgOwpleHRlcm4gICBmbG9hdCAgICAgICAgICBnYW1tYWYgICAgICAgICAoZmxvYXQg ICkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fZ2FtbWFmICAgICAgICAgKGZsb2F0ICAp ICAgICAgOwpleHRlcm4gICBmbG9hdCAgICAgICAgICBqMGYgICAgICAgICAoZmxvYXQgICkgICAg OyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fajBmICAgICAgICAgKGZsb2F0ICApICAgICAgOwpl eHRlcm4gICBmbG9hdCAgICAgICAgICBqMWYgICAgICAgICAoZmxvYXQgICkgICAgOyBleHRlcm4g ICBmbG9hdCAgICAgICAgIF9fajFmICAgICAgICAgKGZsb2F0ICApICAgICAgOwpleHRlcm4gICBm bG9hdCAgICAgICAgICBqbmYgICAgICAgICAoaW50LCBmbG9hdCAgKSAgICA7IGV4dGVybiAgIGZs b2F0ICAgICAgICAgX19qbmYgICAgICAgICAoaW50LCBmbG9hdCAgKSAgICAgIDsKZXh0ZXJuICAg ZmxvYXQgICAgICAgICAgbGdhbW1hZiAgICAgICAgIChmbG9hdCAgKSAgICA7IGV4dGVybiAgIGZs b2F0ICAgICAgICAgX19sZ2FtbWFmICAgICAgICAgKGZsb2F0ICApICAgICAgOwpleHRlcm4gICBm bG9hdCAgICAgICAgICB5MGYgICAgICAgICAoZmxvYXQgICkgICAgOyBleHRlcm4gICBmbG9hdCAg ICAgICAgIF9feTBmICAgICAgICAgKGZsb2F0ICApICAgICAgOwpleHRlcm4gICBmbG9hdCAgICAg ICAgICB5MWYgICAgICAgICAoZmxvYXQgICkgICAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9f eTFmICAgICAgICAgKGZsb2F0ICApICAgICAgOwpleHRlcm4gICBmbG9hdCAgICAgICAgICB5bmYg ICAgICAgICAoaW50LCBmbG9hdCAgKSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX195bmYg ICAgICAgICAoaW50LCBmbG9hdCAgKSAgICAgIDsKCgoKCiAKCgpleHRlcm4gICBmbG9hdCAgICAg ICAgICBnYW1tYWZfciAgICAgICAgICAgIChmbG9hdCAgLCBpbnQgKikgICAgOyBleHRlcm4gICBm bG9hdCAgICAgICAgIF9fZ2FtbWFmX3IgICAgICAgICAgICAoZmxvYXQgICwgaW50ICopICAgICAg OwpleHRlcm4gICBmbG9hdCAgICAgICAgICBsZ2FtbWFmX3IgICAgICAgICAgICAoZmxvYXQgICwg aW50ICopICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2xnYW1tYWZfciAgICAgICAgICAg IChmbG9hdCAgLCBpbnQgKikgICAgICA7CgoKCgoKIAoKZXh0ZXJuICAgZmxvYXQgICAgICAgICAg cmludGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBf X3JpbnRmICAgICAgICAgKGZsb2F0ICAgX194KSAgICAgIDsKCiAKZXh0ZXJuICAgZmxvYXQgICAg ICAgICAgc2NhbGJmICAgICAgICAgKGZsb2F0ICAgX194LCBmbG9hdCAgIF9fbikgICAgOyBleHRl cm4gICBmbG9hdCAgICAgICAgIF9fc2NhbGJmICAgICAgICAgKGZsb2F0ICAgX194LCBmbG9hdCAg IF9fbikgICAgICA7CgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIG5leHRhZnRlcmYgICAgICAg ICAoZmxvYXQgICBfX3gsIGZsb2F0ICAgX195KSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAg X19uZXh0YWZ0ZXJmICAgICAgICAgKGZsb2F0ICAgX194LCBmbG9hdCAgIF9feSkgICAgICA7Cgog CmV4dGVybiAgIGZsb2F0ICAgICAgICAgIHJlbWFpbmRlcmYgICAgICAgICAoZmxvYXQgICBfX3gs IGZsb2F0ICAgX195KSAgICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19yZW1haW5kZXJmICAg ICAgICAgKGZsb2F0ICAgX194LCBmbG9hdCAgIF9feSkgICAgICA7CgoKCiMgNzUgIi91c3IvaW5j bHVkZS9tYXRoLmgiIDIgMwoKCgoKIAoKCgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL21hdGhj YWxscy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCiAKCiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgYWNvc2wgICAgICAgICAobG9u ZyBkb3VibGUgICBfX3gpICAgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX2Fjb3Ns ICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICAgIDsKIApleHRlcm4gICBsb25nIGRvdWJs ZSAgICAgICAgICBhc2lubCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgOyBleHRlcm4g ICBsb25nIGRvdWJsZSAgICAgICAgIF9fYXNpbmwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gp ICAgICAgOwogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGF0YW5sICAgICAgICAgKGxv bmcgZG91YmxlICAgX194KSAgICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19hdGFu bCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgICA7CiAKZXh0ZXJuICAgbG9uZyBkb3Vi bGUgICAgICAgICAgYXRhbjJsICAgICAgICAgKGxvbmcgZG91YmxlICAgX195LCBsb25nIGRvdWJs ZSAgIF9feCkgICAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fYXRhbjJsICAgICAg ICAgKGxvbmcgZG91YmxlICAgX195LCBsb25nIGRvdWJsZSAgIF9feCkgICAgICA7CgogCmV4dGVy biAgIGxvbmcgZG91YmxlICAgICAgICAgIGNvc2wgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gp ICAgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX2Nvc2wgICAgICAgICAobG9uZyBk b3VibGUgICBfX3gpICAgICAgOwogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIHNpbmwg ICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAg ICAgICBfX3NpbmwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgICAgOwogCmV4dGVybiAg IGxvbmcgZG91YmxlICAgICAgICAgIHRhbmwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAg IDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX3RhbmwgICAgICAgICAobG9uZyBkb3Vi bGUgICBfX3gpICAgICAgOwoKCiAKCiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgY29z aGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUg ICAgICAgICBfX2Nvc2hsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICAgIDsKIApleHRl cm4gICBsb25nIGRvdWJsZSAgICAgICAgICBzaW5obCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9f eCkgICAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fc2luaGwgICAgICAgICAobG9u ZyBkb3VibGUgICBfX3gpICAgICAgOwogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIHRh bmhsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICA7IGV4dGVybiAgIGxvbmcgZG91Ymxl ICAgICAgICAgX190YW5obCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgICA7CgoKIApl eHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBhY29zaGwgICAgICAgICAobG9uZyBkb3VibGUg ICBfX3gpICAgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX2Fjb3NobCAgICAgICAg IChsb25nIGRvdWJsZSAgIF9feCkgICAgICA7CiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAg ICAgYXNpbmhsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICA7IGV4dGVybiAgIGxvbmcg ZG91YmxlICAgICAgICAgX19hc2luaGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgICAg OwogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGF0YW5obCAgICAgICAgIChsb25nIGRv dWJsZSAgIF9feCkgICAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fYXRhbmhsICAg ICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICAgIDsKCgogCgogCmV4dGVybiAgIGxvbmcgZG91 YmxlICAgICAgICAgIGV4cGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIDsgZXh0ZXJu ICAgbG9uZyBkb3VibGUgICAgICAgICBfX2V4cGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gp ICAgICAgOwoKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBmcmV4cGwgICAgICAgICAo bG9uZyBkb3VibGUgICBfX3gsIGludCAqX19leHBvbmVudCkgICAgOyBleHRlcm4gICBsb25nIGRv dWJsZSAgICAgICAgIF9fZnJleHBsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194LCBpbnQgKl9f ZXhwb25lbnQpICAgICAgOwoKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBsZGV4cGwg ICAgICAgICAobG9uZyBkb3VibGUgICBfX3gsIGludCBfX2V4cG9uZW50KSAgICA7IGV4dGVybiAg IGxvbmcgZG91YmxlICAgICAgICAgX19sZGV4cGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gs IGludCBfX2V4cG9uZW50KSAgICAgIDsKCiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAg bG9nbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgOyBleHRlcm4gICBsb25nIGRvdWJs ZSAgICAgICAgIF9fbG9nbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgICA7CgogCmV4 dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGxvZzEwbCAgICAgICAgIChsb25nIGRvdWJsZSAg IF9feCkgICAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fbG9nMTBsICAgICAgICAg KGxvbmcgZG91YmxlICAgX194KSAgICAgIDsKCgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAg ICAgIGV4cG0xbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgOyBleHRlcm4gICBsb25n IGRvdWJsZSAgICAgICAgIF9fZXhwbTFsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICAg IDsKCiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgbG9nMXBsICAgICAgICAgKGxvbmcg ZG91YmxlICAgX194KSAgICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19sb2cxcGwg ICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgICAgOwoKIApleHRlcm4gICBsb25nIGRvdWJs ZSAgICAgICAgICBsb2dibCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgOyBleHRlcm4g ICBsb25nIGRvdWJsZSAgICAgICAgIF9fbG9nYmwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gp ICAgICAgOwoKCiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgbW9kZmwgICAgICAgICAo bG9uZyBkb3VibGUgICBfX3gsIGxvbmcgZG91YmxlICAgKl9faXB0cikgICAgOyBleHRlcm4gICBs b25nIGRvdWJsZSAgICAgICAgIF9fbW9kZmwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gsIGxv bmcgZG91YmxlICAgKl9faXB0cikgICAgICA7CgoKIAoKIApleHRlcm4gICBsb25nIGRvdWJsZSAg ICAgICAgICBwb3dsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194LCBsb25nIGRvdWJsZSAgIF9f eSkgICAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fcG93bCAgICAgICAgIChsb25n IGRvdWJsZSAgIF9feCwgbG9uZyBkb3VibGUgICBfX3kpICAgICAgOwoKIApleHRlcm4gICBsb25n IGRvdWJsZSAgICAgICAgICBzcXJ0bCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgOyBl eHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fc3FydGwgICAgICAgICAobG9uZyBkb3VibGUg ICBfX3gpICAgICAgOwoKCiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgY2JydGwgICAg ICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAg ICBfX2NicnRsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICAgIDsKCgoKIAoKIApleHRl cm4gICBsb25nIGRvdWJsZSAgICAgICAgICBjZWlsbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9f eCkgICAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fY2VpbGwgICAgICAgICAobG9u ZyBkb3VibGUgICBfX3gpICAgICAgOwoKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBm YWJzbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgOyBleHRlcm4gICBsb25nIGRvdWJs ZSAgICAgICAgIF9fZmFic2wgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgICAgOwoKIApl eHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBmbG9vcmwgICAgICAgICAobG9uZyBkb3VibGUg ICBfX3gpICAgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX2Zsb29ybCAgICAgICAg IChsb25nIGRvdWJsZSAgIF9feCkgICAgICA7CgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAg ICAgIGZtb2RsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194LCBsb25nIGRvdWJsZSAgIF9feSkg ICAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fZm1vZGwgICAgICAgICAobG9uZyBk b3VibGUgICBfX3gsIGxvbmcgZG91YmxlICAgX195KSAgICAgIDsKCgoKCiAKCmV4dGVybiAgIGlu dCAgICAgICBpc2luZmwgICAgICAgKGxvbmcgZG91YmxlICAgX192YWx1ZSkgICA7IGV4dGVybiAg IGludCAgICAgICBfX2lzaW5mbCAgICAgICAobG9uZyBkb3VibGUgICBfX3ZhbHVlKSAgICA7Cgog CmV4dGVybiAgIGludCAgICAgICBmaW5pdGVsICAgICAgIChsb25nIGRvdWJsZSAgIF9fdmFsdWUp ICAgOyBleHRlcm4gICBpbnQgICAgICAgX19maW5pdGVsICAgICAgIChsb25nIGRvdWJsZSAgIF9f dmFsdWUpICAgIDsKCiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgY29weXNpZ25sICAg ICAgICAgKGxvbmcgZG91YmxlICAgX194LCBsb25nIGRvdWJsZSAgIF9feSkgICAgOyBleHRlcm4g ICBsb25nIGRvdWJsZSAgICAgICAgIF9fY29weXNpZ25sICAgICAgICAgKGxvbmcgZG91YmxlICAg X194LCBsb25nIGRvdWJsZSAgIF9feSkgICAgICA7CgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAg ICAgICAgIHNjYWxibmwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gsIGludCBfX24pICAgIDsg ZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX3NjYWxibmwgICAgICAgICAobG9uZyBkb3Vi bGUgICBfX3gsIGludCBfX24pICAgICAgOwoKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAg ICBkcmVtbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwgbG9uZyBkb3VibGUgICBfX3kpICAg IDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX2RyZW1sICAgICAgICAgKGxvbmcgZG91 YmxlICAgX194LCBsb25nIGRvdWJsZSAgIF9feSkgICAgICA7CgogCmV4dGVybiAgIGxvbmcgZG91 YmxlICAgICAgICAgIHNpZ25pZmljYW5kbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAg OyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fc2lnbmlmaWNhbmRsICAgICAgICAgKGxv bmcgZG91YmxlICAgX194KSAgICAgIDsKCgoKCgogCmV4dGVybiAgIGludCAgICAgICBpc25hbmwg ICAgICAgKGxvbmcgZG91YmxlICAgX192YWx1ZSkgICA7IGV4dGVybiAgIGludCAgICAgICBfX2lz bmFubCAgICAgICAobG9uZyBkb3VibGUgICBfX3ZhbHVlKSAgICA7CgogCmV4dGVybiAgIGludCAg ICAgICBpbG9nYmwgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgIDsgZXh0ZXJuICAgaW50ICAg ICAgIF9faWxvZ2JsICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgOwoKIApleHRlcm4gICBs b25nIGRvdWJsZSAgICAgICAgICBoeXBvdGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gsIGxv bmcgZG91YmxlICAgX195KSAgICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19oeXBv dGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gsIGxvbmcgZG91YmxlICAgX195KSAgICAgIDsK CgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGVyZmwgICAgICAgICAobG9uZyBkb3Vi bGUgICkgICAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fZXJmbCAgICAgICAgIChs b25nIGRvdWJsZSAgKSAgICAgIDsKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgZXJmY2wg ICAgICAgICAobG9uZyBkb3VibGUgICkgICAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAg IF9fZXJmY2wgICAgICAgICAobG9uZyBkb3VibGUgICkgICAgICA7CmV4dGVybiAgIGxvbmcgZG91 YmxlICAgICAgICAgIGdhbW1hbCAgICAgICAgIChsb25nIGRvdWJsZSAgKSAgICA7IGV4dGVybiAg IGxvbmcgZG91YmxlICAgICAgICAgX19nYW1tYWwgICAgICAgICAobG9uZyBkb3VibGUgICkgICAg ICA7CmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGowbCAgICAgICAgIChsb25nIGRvdWJs ZSAgKSAgICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19qMGwgICAgICAgICAobG9u ZyBkb3VibGUgICkgICAgICA7CmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGoxbCAgICAg ICAgIChsb25nIGRvdWJsZSAgKSAgICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19q MWwgICAgICAgICAobG9uZyBkb3VibGUgICkgICAgICA7CmV4dGVybiAgIGxvbmcgZG91YmxlICAg ICAgICAgIGpubCAgICAgICAgIChpbnQsIGxvbmcgZG91YmxlICApICAgIDsgZXh0ZXJuICAgbG9u ZyBkb3VibGUgICAgICAgICBfX2pubCAgICAgICAgIChpbnQsIGxvbmcgZG91YmxlICApICAgICAg OwpleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBsZ2FtbWFsICAgICAgICAgKGxvbmcgZG91 YmxlICApICAgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX2xnYW1tYWwgICAgICAg ICAobG9uZyBkb3VibGUgICkgICAgICA7CmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIHkw bCAgICAgICAgIChsb25nIGRvdWJsZSAgKSAgICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAg ICAgX195MGwgICAgICAgICAobG9uZyBkb3VibGUgICkgICAgICA7CmV4dGVybiAgIGxvbmcgZG91 YmxlICAgICAgICAgIHkxbCAgICAgICAgIChsb25nIGRvdWJsZSAgKSAgICA7IGV4dGVybiAgIGxv bmcgZG91YmxlICAgICAgICAgX195MWwgICAgICAgICAobG9uZyBkb3VibGUgICkgICAgICA7CmV4 dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIHlubCAgICAgICAgIChpbnQsIGxvbmcgZG91Ymxl ICApICAgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX3lubCAgICAgICAgIChpbnQs IGxvbmcgZG91YmxlICApICAgICAgOwoKCgoKIAoKCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAg ICAgIGdhbW1hbF9yICAgICAgICAgICAgKGxvbmcgZG91YmxlICAsIGludCAqKSAgICA7IGV4dGVy biAgIGxvbmcgZG91YmxlICAgICAgICAgX19nYW1tYWxfciAgICAgICAgICAgIChsb25nIGRvdWJs ZSAgLCBpbnQgKikgICAgICA7CmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGxnYW1tYWxf ciAgICAgICAgICAgIChsb25nIGRvdWJsZSAgLCBpbnQgKikgICAgOyBleHRlcm4gICBsb25nIGRv dWJsZSAgICAgICAgIF9fbGdhbW1hbF9yICAgICAgICAgICAgKGxvbmcgZG91YmxlICAsIGludCAq KSAgICAgIDsKCgoKCgogCgpleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICByaW50bCAgICAg ICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAg IF9fcmludGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgICAgOwoKIApleHRlcm4gICBs b25nIGRvdWJsZSAgICAgICAgICBzY2FsYmwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gsIGxv bmcgZG91YmxlICAgX19uKSAgICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19zY2Fs YmwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gsIGxvbmcgZG91YmxlICAgX19uKSAgICAgIDsK CiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgbmV4dGFmdGVybCAgICAgICAgIChsb25n IGRvdWJsZSAgIF9feCwgbG9uZyBkb3VibGUgICBfX3kpICAgIDsgZXh0ZXJuICAgbG9uZyBkb3Vi bGUgICAgICAgICBfX25leHRhZnRlcmwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gsIGxvbmcg ZG91YmxlICAgX195KSAgICAgIDsKCiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgcmVt YWluZGVybCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwgbG9uZyBkb3VibGUgICBfX3kpICAg IDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX3JlbWFpbmRlcmwgICAgICAgICAobG9u ZyBkb3VibGUgICBfX3gsIGxvbmcgZG91YmxlICAgX195KSAgICAgIDsKCgoKIyA5MSAiL3Vzci9p bmNsdWRlL21hdGguaCIgMiAzCgoKCgoKCgoKIApleHRlcm4gaW50IHNpZ25nYW07CgoKCgogCgp0 eXBlZGVmIGVudW0geyBfSUVFRV8gPSAtMSwgX1NWSURfLCBfWE9QRU5fLCBfUE9TSVhfIH0gX0xJ Ql9WRVJTSU9OX1RZUEU7CgogCgoKZXh0ZXJuIF9MSUJfVkVSU0lPTl9UWVBFIF9MSUJfVkVSU0lP TjsKCgoKCiAKCgoKCgoKCnN0cnVjdCBleGNlcHRpb24KCiAgewogICAgaW50IHR5cGU7CiAgICBj aGFyICpuYW1lOwogICAgZG91YmxlIGFyZzE7CiAgICBkb3VibGUgYXJnMjsKICAgIGRvdWJsZSBy ZXR2YWw7CiAgfTsKCgoKCgpleHRlcm4gaW50IF9fbWF0aGVyciAgKHN0cnVjdCBleGNlcHRpb24g KikgIDsKZXh0ZXJuIGludCBtYXRoZXJyICAoc3RydWN0IGV4Y2VwdGlvbiAqKSAgOwoKCgoKIAoK CgoKCgoKIAoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtbGludXgvcGdjYy0yLjkxLjYwL2lu Y2x1ZGUvZmxvYXQuaCIgMSAzCiAKCgoKIAoKICAgIAoKCiAgICAKCgogICAgCgoKICAgIAoKCiAg ICAKCgogICAgCgoKICAgIAoKCiAgICAKCgogICAgCgoKICAgIAoKCiAgICAKCgoKICAgIAoKCiAg ICAKCgogICAgCgoKICAgIAoKCiAgICAKCgogICAgCgoKICAgIAoKCiAgICAKCgogICAgCgoKCiAg ICAKCgogICAgCgoKICAgIAoKCgp1bmlvbiBfX2NvbnZlcnRfbG9uZ19kb3VibGUgewogIHVuc2ln bmVkIF9fY29udmVydF9sb25nX2RvdWJsZV9pWzRdOwogIGxvbmcgZG91YmxlIF9fY29udmVydF9s b25nX2RvdWJsZV9kOwp9OwoKCiAgICAKCgogICAgCgoKICAgIAoKCiAgICAKCgogICAgCgoKICAg IAoKCgoKIyAxNTUgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwoKCiMgMTY1ICIvdXNyL2luY2x1 ZGUvbWF0aC5oIiAzCgoKCiAKCgoKCgoKCgoKCgoKCgoKCiAKCgojIDIwMiAiL3Vzci9pbmNsdWRl L21hdGguaCIgMwoKCgogCgoKIyAxICIvdXNyL2luY2x1ZGUvX19tYXRoLmgiIDEgMwogCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuIF9faW5saW5lICBkb3VibGUg Y29zIChkb3VibGUpOwpleHRlcm4gX19pbmxpbmUgIGRvdWJsZSBzaW4gKGRvdWJsZSk7CgoKZXh0 ZXJuIF9faW5saW5lICBkb3VibGUgX19leHBtMSAoZG91YmxlIF9feCk7CmV4dGVybiBfX2lubGlu ZSAgZG91YmxlCl9fZXhwbTEgKGRvdWJsZSBfX3gpCnsKICByZWdpc3RlciBkb3VibGUgX192YWx1 ZSwgX19leHBvbmVudCwgX190ZW1wOwogIF9fYXNtIF9fdm9sYXRpbGVfXwogICAgKCJmbGRsMmUJ CQkjIGVeeCAtIDEgPSAyXih4ICogbG9nMihlKSkgLSAxXG5cdCIKICAgICAiZm11bAklJXN0KDEp CQkjIHggKiBsb2cyKGUpXG5cdCIKICAgICAiZnN0bAklJXN0KDEpXG5cdCIKICAgICAiZnJuZGlu dAkJCSMgaW50KHggKiBsb2cyKGUpKVxuXHQiCiAgICAgImZ4Y2hcblx0IgogICAgICJmc3ViCSUl c3QoMSkJCSMgZnJhY3QoeCAqIGxvZzIoZSkpXG5cdCIKICAgICAiZjJ4bTEJCQkjIDJeKGZyYWN0 KHggKiBsb2cyKGUpKSkgLSAxXG5cdCIKICAgICAiZnNjYWxlCQkJIyAyXih4ICogbG9nMihlKSkg LSAyXihpbnQoeCAqIGxvZzIoZSkpKVxuXHQiCiAgICAgOiAiPXQiIChfX3ZhbHVlKSwgIj11IiAo X19leHBvbmVudCkgOiAiMCIgKF9feCkpOwogIF9fYXNtIF9fdm9sYXRpbGVfXwogICAgKCJmc2Nh bGUJCQkjIDJeaW50KHggKiBsb2cyKGUpKVxuXHQiCiAgICAgOiAiPXQiIChfX3RlbXApIDogIjAi ICgxLjApLCAidSIgKF9fZXhwb25lbnQpKTsKICBfX3RlbXAgLT0gMS4wOwoKICByZXR1cm4gX190 ZW1wICsgX192YWx1ZTsKfQoKZXh0ZXJuIF9faW5saW5lICBkb3VibGUgX19zZ24xIChkb3VibGUg X194KTsKZXh0ZXJuIF9faW5saW5lICBkb3VibGUKX19zZ24xIChkb3VibGUgX194KQp7CiAgcmV0 dXJuIF9feCA+PSAwLjAgPyAxLjAgOiAtMS4wOwp9CgpleHRlcm4gX19pbmxpbmUgIGRvdWJsZSBz cXJ0IChkb3VibGUgX194KTsKZXh0ZXJuIF9faW5saW5lICBkb3VibGUKc3FydCAoZG91YmxlIF9f eCkKewogIHJlZ2lzdGVyIGRvdWJsZSBfX3ZhbHVlOwogIF9fYXNtIF9fdm9sYXRpbGVfXwogICAg KCJmc3FydCIKICAgICA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsKCiAgcmV0dXJuIF9f dmFsdWU7Cn0KCmV4dGVybiBfX2lubGluZSAgZG91YmxlIGZhYnMgKGRvdWJsZSBfX3gpOwpleHRl cm4gX19pbmxpbmUgIGRvdWJsZQpmYWJzIChkb3VibGUgX194KQp7CiAgcmVnaXN0ZXIgZG91Ymxl IF9fdmFsdWU7CiAgX19hc20gX192b2xhdGlsZV9fCiAgICAoImZhYnMiCiAgICAgOiAiPXQiIChf X3ZhbHVlKSA6ICIwIiAoX194KSk7CgogIHJldHVybiBfX3ZhbHVlOwp9CgpleHRlcm4gX19pbmxp bmUgIGRvdWJsZSBzaW4gKGRvdWJsZSBfX3gpOwpleHRlcm4gX19pbmxpbmUgIGRvdWJsZQpzaW4g KGRvdWJsZSBfX3gpCnsKICByZWdpc3RlciBkb3VibGUgX192YWx1ZTsKICBfX2FzbSBfX3ZvbGF0 aWxlX18KICAgICgiZnNpbiIKICAgICA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsKCiAg cmV0dXJuIF9fdmFsdWU7Cn0KCmV4dGVybiBfX2lubGluZSAgZG91YmxlIGNvcyAoZG91YmxlIF9f eCk7CmV4dGVybiBfX2lubGluZSAgZG91YmxlCmNvcyAoZG91YmxlIF9feCkKewogIHJlZ2lzdGVy IGRvdWJsZSBfX3ZhbHVlOwogIF9fYXNtIF9fdm9sYXRpbGVfXwogICAgKCJmY29zIgogICAgIDog Ij10IiAoX192YWx1ZSk6ICIwIiAoX194KSk7CgogIHJldHVybiBfX3ZhbHVlOwp9CgpleHRlcm4g X19pbmxpbmUgIGRvdWJsZSB0YW4gKGRvdWJsZSBfX3gpOwpleHRlcm4gX19pbmxpbmUgIGRvdWJs ZQp0YW4gKGRvdWJsZSBfX3gpCnsKICByZWdpc3RlciBkb3VibGUgX192YWx1ZTsKICByZWdpc3Rl ciBkb3VibGUgX192YWx1ZTIgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKTsKICBfX2FzbSBf X3ZvbGF0aWxlX18KICAgICgiZnB0YW4iCiAgICAgOiAiPXQiIChfX3ZhbHVlMiksICI9dSIgKF9f dmFsdWUpIDogIjAiIChfX3gpKTsKCiAgcmV0dXJuIF9fdmFsdWU7Cn0KCmV4dGVybiBfX2lubGlu ZSAgZG91YmxlIGF0YW4yIChkb3VibGUgX195LCBkb3VibGUgX194KTsKZXh0ZXJuIF9faW5saW5l ICBkb3VibGUKYXRhbjIgKGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gpCnsKICByZWdpc3RlciBkb3Vi bGUgX192YWx1ZTsKICBfX2FzbSBfX3ZvbGF0aWxlX18KICAgICgiZnBhdGFuXG5cdCIKICAgICA6 ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAic3QoMSkiKTsKCiAgcmV0 dXJuIF9fdmFsdWU7Cn0KCmV4dGVybiBfX2lubGluZSAgZG91YmxlIGFzaW4gKGRvdWJsZSBfX3gp OwpleHRlcm4gX19pbmxpbmUgIGRvdWJsZQphc2luIChkb3VibGUgX194KQp7CiAgcmV0dXJuIGF0 YW4yIChfX3gsIHNxcnQgKDEuMCAtIF9feCAqIF9feCkpOwp9CgpleHRlcm4gX19pbmxpbmUgIGRv dWJsZSBhY29zIChkb3VibGUgX194KTsKZXh0ZXJuIF9faW5saW5lICBkb3VibGUKYWNvcyAoZG91 YmxlIF9feCkKewogIHJldHVybiBhdGFuMiAoc3FydCAoMS4wIC0gX194ICogX194KSwgX194KTsK fQoKZXh0ZXJuIF9faW5saW5lICBkb3VibGUgYXRhbiAoZG91YmxlIF9feCk7CmV4dGVybiBfX2lu bGluZSAgZG91YmxlCmF0YW4gKGRvdWJsZSBfX3gpCnsKICByZWdpc3RlciBkb3VibGUgX192YWx1 ZTsKICBfX2FzbSBfX3ZvbGF0aWxlX18KICAgICgiZmxkMVxuXHQiCiAgICAgImZwYXRhbiIKICAg ICA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsKCiAgcmV0dXJuIF9fdmFsdWU7Cn0KCmV4 dGVybiBfX2lubGluZSAgZG91YmxlIGV4cCAoZG91YmxlIF9feCk7CmV4dGVybiBfX2lubGluZSAg ZG91YmxlCmV4cCAoZG91YmxlIF9feCkKewogIHJlZ2lzdGVyIGRvdWJsZSBfX3ZhbHVlLCBfX2V4 cG9uZW50OwogIF9fYXNtIF9fdm9sYXRpbGVfXwogICAgKCJmbGRsMmUJCQkjIGVeeCA9IDJeKHgg KiBsb2cyKGUpKVxuXHQiCiAgICAgImZtdWwJJSVzdCgxKQkJIyB4ICogbG9nMihlKVxuXHQiCiAg ICAgImZzdGwJJSVzdCgxKVxuXHQiCiAgICAgImZybmRpbnQJCQkjIGludCh4ICogbG9nMihlKSlc blx0IgogICAgICJmeGNoXG5cdCIKICAgICAiZnN1YgklJXN0KDEpCQkjIGZyYWN0KHggKiBsb2cy KGUpKVxuXHQiCiAgICAgImYyeG0xCQkJIyAyXihmcmFjdCh4ICogbG9nMihlKSkpIC0gMVxuXHQi CiAgICAgOiAiPXQiIChfX3ZhbHVlKSwgIj11IiAoX19leHBvbmVudCkgOiAiMCIgKF9feCkpOwog IF9fdmFsdWUgKz0gMS4wOwogIF9fYXNtIF9fdm9sYXRpbGVfXwogICAgKCJmc2NhbGUiCiAgICAg OiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX192YWx1ZSksICJ1IiAoX19leHBvbmVudCkpOwoKICBy ZXR1cm4gX192YWx1ZTsKfQoKZXh0ZXJuIF9faW5saW5lICBkb3VibGUgc2luaCAoZG91YmxlIF9f eCk7CmV4dGVybiBfX2lubGluZSAgZG91YmxlCnNpbmggKGRvdWJsZSBfX3gpCnsKICByZWdpc3Rl ciBkb3VibGUgX19leG0xID0gX19leHBtMSAoZmFicyAoX194KSk7CgogIHJldHVybiAwLjUgKiAo X19leG0xIC8gKF9fZXhtMSArIDEuMCkgKyBfX2V4bTEpICogX19zZ24xIChfX3gpOwp9CgpleHRl cm4gX19pbmxpbmUgIGRvdWJsZSBjb3NoIChkb3VibGUgX194KTsKZXh0ZXJuIF9faW5saW5lICBk b3VibGUKY29zaCAoZG91YmxlIF9feCkKewogIHJlZ2lzdGVyIGRvdWJsZSBfX2V4ID0gZXhwIChf X3gpOwoKICByZXR1cm4gMC41ICogKF9fZXggKyAxLjAgLyBfX2V4KTsKfQoKZXh0ZXJuIF9faW5s aW5lICBkb3VibGUgdGFuaCAoZG91YmxlIF9feCk7CmV4dGVybiBfX2lubGluZSAgZG91YmxlCnRh bmggKGRvdWJsZSBfX3gpCnsKICByZWdpc3RlciBkb3VibGUgX19leG0xID0gX19leHBtMSAoLWZh YnMgKF9feCArIF9feCkpOwoKICByZXR1cm4gX19leG0xIC8gKF9fZXhtMSArIDIuMCkgKiBfX3Nn bjEgKC1fX3gpOwp9CgpleHRlcm4gX19pbmxpbmUgIGRvdWJsZSBsb2cgKGRvdWJsZSBfX3gpOwpl eHRlcm4gX19pbmxpbmUgIGRvdWJsZQpsb2cgKGRvdWJsZSBfX3gpCnsKICByZWdpc3RlciBkb3Vi bGUgX192YWx1ZTsKICBfX2FzbSBfX3ZvbGF0aWxlX18KICAgICgiZmxkbG4yXG5cdCIKICAgICAi ZnhjaFxuXHQiCiAgICAgImZ5bDJ4IgogICAgIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkp OwoKICByZXR1cm4gX192YWx1ZTsKfQoKZXh0ZXJuIF9faW5saW5lICBkb3VibGUgbG9nMTAgKGRv dWJsZSBfX3gpOwpleHRlcm4gX19pbmxpbmUgIGRvdWJsZQpsb2cxMCAoZG91YmxlIF9feCkKewog IHJlZ2lzdGVyIGRvdWJsZSBfX3ZhbHVlOwogIF9fYXNtIF9fdm9sYXRpbGVfXwogICAgKCJmbGRs ZzJcblx0IgogICAgICJmeGNoXG5cdCIKICAgICAiZnlsMngiCiAgICAgOiAiPXQiIChfX3ZhbHVl KSA6ICIwIiAoX194KSk7CgogIHJldHVybiBfX3ZhbHVlOwp9CgpleHRlcm4gX19pbmxpbmUgIGRv dWJsZSBfX2xvZzIgKGRvdWJsZSBfX3gpOwpleHRlcm4gX19pbmxpbmUgIGRvdWJsZQpfX2xvZzIg KGRvdWJsZSBfX3gpCnsKICByZWdpc3RlciBkb3VibGUgX192YWx1ZTsKICBfX2FzbSBfX3ZvbGF0 aWxlX18KICAgICgiZmxkMVxuXHQiCiAgICAgImZ4Y2hcblx0IgogICAgICJmeWwyeCIKICAgICA6 ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsKCiAgcmV0dXJuIF9fdmFsdWU7Cn0KCmV4dGVy biBfX2lubGluZSAgZG91YmxlIGZtb2QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpOwpleHRlcm4g X19pbmxpbmUgIGRvdWJsZQpmbW9kIChkb3VibGUgX194LCBkb3VibGUgX195KQp7CiAgcmVnaXN0 ZXIgZG91YmxlIF9fdmFsdWU7CiAgX19hc20gX192b2xhdGlsZV9fCiAgICAoIjE6CWZwcmVtXG5c dCIKICAgICAiZnN0c3cJJSVheFxuXHQiCiAgICAgInNhaGZcblx0IgogICAgICJqcAkxYiIKICAg ICA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiYXgiLCAiY2MiKTsK CiAgcmV0dXJuIF9fdmFsdWU7Cn0KCmV4dGVybiBfX2lubGluZSAgZG91YmxlIGxkZXhwIChkb3Vi bGUgX194LCBpbnQgX195KTsKZXh0ZXJuIF9faW5saW5lICBkb3VibGUKbGRleHAgKGRvdWJsZSBf X3gsIGludCBfX3kpCnsKICByZWdpc3RlciBkb3VibGUgX192YWx1ZTsKICBfX2FzbSBfX3ZvbGF0 aWxlX18KICAgICgiZnNjYWxlIgogICAgIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1 IiAoKGRvdWJsZSkgX195KSk7CgogIHJldHVybiBfX3ZhbHVlOwp9CgpleHRlcm4gX19pbmxpbmUg IGRvdWJsZSBwb3cgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpOwpleHRlcm4gX19pbmxpbmUgIGRv dWJsZQpwb3cgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpCnsKICByZWdpc3RlciBkb3VibGUgX192 YWx1ZSwgX19leHBvbmVudDsKICBsb25nIGxvbmcgaW50IF9fcCA9IChsb25nIGxvbmcgaW50KSBf X3k7CgogIGlmIChfX3ggPT0gMC4wICYmIF9feSA+IDAuMCkKICAgIHJldHVybiAwLjA7CiAgaWYg KF9feSA9PSAoZG91YmxlKSBfX3ApCiAgICB7CiAgICAgIGRvdWJsZSBfX3IgPSAxLjA7CiAgICAg IGlmIChfX3AgPT0gMCkKCXJldHVybiAxLjA7CiAgICAgIGlmIChfX3AgPCAwKQoJewoJICBfX3Ag PSAtX19wOwoJICBfX3ggPSAxLjAgLyBfX3g7Cgl9CiAgICAgIHdoaWxlICgxKQoJewoJICBpZiAo X19wICYgMSkKCSAgICBfX3IgKj0gX194OwoJICBfX3AgPj49IDE7CgkgIGlmIChfX3AgPT0gMCkK CSAgICByZXR1cm4gX19yOwoJICBfX3ggKj0gX194OwoJfQogICAgICAgCiAgICB9CiAgX19hc20g X192b2xhdGlsZV9fCiAgICAoImZtdWwJJSVzdCgxKQkJIyB5ICogbG9nMih4KVxuXHQiCiAgICAg ImZzdGwJJSVzdCgxKVxuXHQiCiAgICAgImZybmRpbnQJCQkjIGludCh5ICogbG9nMih4KSlcblx0 IgogICAgICJmeGNoXG5cdCIKICAgICAiZnN1YgklJXN0KDEpCQkjIGZyYWN0KHkgKiBsb2cyKHgp KVxuXHQiCiAgICAgImYyeG0xCQkJIyAyXihmcmFjdCh5ICogbG9nMih4KSkpIC0gMVxuXHQiCiAg ICAgOiAiPXQiIChfX3ZhbHVlKSwgIj11IiAoX19leHBvbmVudCkgOiAgIjAiIChfX2xvZzIgKF9f eCkpLCAiMSIgKF9feSkpOwogIF9fdmFsdWUgKz0gMS4wOwogIF9fYXNtIF9fdm9sYXRpbGVfXwog ICAgKCJmc2NhbGUiCiAgICAgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX192YWx1ZSksICJ1IiAo X19leHBvbmVudCkpOwoKICByZXR1cm4gX192YWx1ZTsKfQoKZXh0ZXJuIF9faW5saW5lICBkb3Vi bGUgZmxvb3IgKGRvdWJsZSBfX3gpOwpleHRlcm4gX19pbmxpbmUgIGRvdWJsZQpmbG9vciAoZG91 YmxlIF9feCkKewogIHJlZ2lzdGVyIGRvdWJsZSBfX3ZhbHVlOwogIF9fdm9sYXRpbGUgdW5zaWdu ZWQgc2hvcnQgaW50IF9fY3csIF9fY3d0bXA7CgogIF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cg JTAiIDogIj1tIiAoX19jdykpOwogIF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA0MDA7 ICAKICBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsKICBf X2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7 CiAgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7CgogIHJldHVy biBfX3ZhbHVlOwp9CgpleHRlcm4gX19pbmxpbmUgIGRvdWJsZSBjZWlsIChkb3VibGUgX194KTsK ZXh0ZXJuIF9faW5saW5lICBkb3VibGUKY2VpbCAoZG91YmxlIF9feCkKewogIHJlZ2lzdGVyIGRv dWJsZSBfX3ZhbHVlOwogIF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3csIF9fY3d0 bXA7CgogIF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykpOwogIF9f Y3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA4MDA7ICAKICBfX2FzbSBfX3ZvbGF0aWxlICgi ZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsKICBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGlu dCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7CiAgX19hc20gX192b2xhdGlsZSAoImZs ZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7CgogIHJldHVybiBfX3ZhbHVlOwp9CgoKIAoKCmV4dGVy biBfX2lubGluZSAgZG91YmxlIGh5cG90IChkb3VibGUgX194LCBkb3VibGUgX195KTsKZXh0ZXJu IF9faW5saW5lICBkb3VibGUKaHlwb3QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpCnsKICByZXR1 cm4gc3FydCAoX194ICogX194ICsgX195ICogX195KTsKfQoKIAoKCgpleHRlcm4gX19pbmxpbmUg IGRvdWJsZSBsb2cxcCAoZG91YmxlIF9feCk7CmV4dGVybiBfX2lubGluZSAgZG91YmxlCmxvZzFw IChkb3VibGUgX194KQp7CiAgcmVnaXN0ZXIgZG91YmxlIF9fdmFsdWU7CgogIGlmIChmYWJzIChf X3gpID49IDEuMCAtIDAuNSAqIDEuNDE0MjEzNTYyMzczMDk1MDQ4ODBMICkKICAgIF9fdmFsdWUg PSBsb2cgKDEuMCArIF9feCk7CiAgZWxzZQogICAgX19hc20gX192b2xhdGlsZV9fCiAgICAgICgi ZmxkbG4yXG5cdCIKICAgICAgICJmeGNoXG5cdCIKICAgICAgICJmeWwyeHAxIgogICAgICAgOiAi PXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7CgogIHJldHVybiBfX3ZhbHVlOwp9CgpleHRlcm4g X19pbmxpbmUgIGRvdWJsZSBhc2luaCAoZG91YmxlIF9feCk7CmV4dGVybiBfX2lubGluZSAgZG91 YmxlCmFzaW5oIChkb3VibGUgX194KQp7CiAgcmVnaXN0ZXIgZG91YmxlIF9feSA9IGZhYnMgKF9f eCk7CgogIHJldHVybiBsb2cxcCAoKF9feSAqIF9feSAvIChzcXJ0IChfX3kgKiBfX3kgKyAxLjAp ICsgMS4wKSArIF9feSkKCQkqIF9fc2duMSAoX194KSk7Cn0KCmV4dGVybiBfX2lubGluZSAgZG91 YmxlIGFjb3NoIChkb3VibGUgX194KTsKZXh0ZXJuIF9faW5saW5lICBkb3VibGUKYWNvc2ggKGRv dWJsZSBfX3gpCnsKICByZXR1cm4gbG9nIChfX3ggKyBzcXJ0IChfX3ggLSAxLjApICogc3FydCAo X194ICsgMS4wKSk7Cn0KCmV4dGVybiBfX2lubGluZSAgZG91YmxlIGF0YW5oIChkb3VibGUgX194 KTsKZXh0ZXJuIF9faW5saW5lICBkb3VibGUKYXRhbmggKGRvdWJsZSBfX3gpCnsKICByZWdpc3Rl ciBkb3VibGUgX195ID0gZmFicyAoX194KTsKCiAgcmV0dXJuIC0wLjUgKiBfX2xvZzFwICgtKF9f eSArIF9feSkgLyAoMS4wICsgX195KSkgKiBfX3NnbjEgKF9feCk7Cn0KCmV4dGVybiBfX2lubGlu ZSAgZG91YmxlIGNvc2htMSAoZG91YmxlIF9feCk7CmV4dGVybiBfX2lubGluZSAgZG91YmxlCmNv c2htMSAoZG91YmxlIF9feCkKewogIHJlZ2lzdGVyIGRvdWJsZSBfX2V4bTEgPSBfX2V4cG0xIChm YWJzIChfX3gpKTsKCiAgcmV0dXJuIDAuNSAqIChfX2V4bTEgLyAoX19leG0xICsgMS4wKSkgKiBf X2V4bTE7Cn0KCmV4dGVybiBfX2lubGluZSAgZG91YmxlIGFjb3NoMXAgKGRvdWJsZSBfX3gpOwpl eHRlcm4gX19pbmxpbmUgIGRvdWJsZQphY29zaDFwIChkb3VibGUgX194KQp7CiAgcmV0dXJuIF9f bG9nMXAgKF9feCArIHNxcnQgKF9feCkgKiBzcXJ0IChfX3ggKyAyLjApKTsKfQoKZXh0ZXJuIF9f aW5saW5lICBkb3VibGUgbG9nYiAoZG91YmxlIF9feCk7CmV4dGVybiBfX2lubGluZSAgZG91Ymxl CmxvZ2IgKGRvdWJsZSBfX3gpCnsKICByZWdpc3RlciBkb3VibGUgX192YWx1ZSwgX19qdW5rOwog IF9fYXNtIF9fdm9sYXRpbGVfXwogICAgKCJmeHRyYWN0XG5cdCIKICAgICA6ICI9dCIgKF9fanVu ayksICI9dSIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsKCiAgcmV0dXJuIF9fdmFsdWU7Cn0KCmV4 dGVybiBfX2lubGluZSAgZG91YmxlIGRyZW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpOwpleHRl cm4gX19pbmxpbmUgIGRvdWJsZQpkcmVtIChkb3VibGUgX194LCBkb3VibGUgX195KQp7CiAgcmVn aXN0ZXIgZG91YmxlIF9fdmFsdWU7CiAgX19hc20gX192b2xhdGlsZV9fCiAgICAoIjE6CWZwcmVt MVxuXHQiCiAgICAgImZzdHN3CSUlYXhcblx0IgogICAgICJzYWhmXG5cdCIKICAgICAianAJMWIi CiAgICAgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImF4IiwgImNj Iik7CgogIHJldHVybiBfX3ZhbHVlOwp9CgpleHRlcm4gX19pbmxpbmUgIHZvaWQgc2luY29zIChk b3VibGUgX194LCBkb3VibGUgKl9fc2lueCwgZG91YmxlICpfX2Nvc3gpOwpleHRlcm4gX19pbmxp bmUgIHZvaWQKc2luY29zIChkb3VibGUgX194LCBkb3VibGUgKl9fc2lueCwgZG91YmxlICpfX2Nv c3gpCnsKICByZWdpc3RlciBkb3VibGUgX19jb3NyLCBfX3NpbnI7CiAgX19hc20gX192b2xhdGls ZV9fCiAgICAoImZzaW5jb3MiCiAgICAgOiAiPXQiIChfX2Nvc3IpLCAiPXUiIChfX3NpbnIpIDog IjAiIChfX3gpKTsKCiAgKl9fc2lueCA9IF9fc2lucjsKICAqX19jb3N4ID0gX19jb3NyOwp9Cgpl eHRlcm4gX19pbmxpbmUgIGRvdWJsZSBfX3NnbiAoZG91YmxlIF9feCk7CmV4dGVybiBfX2lubGlu ZSAgZG91YmxlCl9fc2duIChkb3VibGUgX194KQp7CiAgcmV0dXJuIChfX3ggPT0gMC4wID8gMC4w IDogKF9feCA+IDAuMCA/IDEuMCA6IC0xLjApKTsKfQoKZXh0ZXJuIF9faW5saW5lICBkb3VibGUg cG93MiAoZG91YmxlIF9feCk7CmV4dGVybiBfX2lubGluZSAgZG91YmxlCnBvdzIgKGRvdWJsZSBf X3gpCnsKICByZWdpc3RlciBkb3VibGUgX192YWx1ZSwgX19leHBvbmVudDsKICBpbnQgX19wID0g KGludCkgX194OwoKICBpZiAoX194ID09IChkb3VibGUpIF9fcCkKICAgIHJldHVybiBsZGV4cCAo MS4wLCBfX3ApOwoKICBfX2FzbSBfX3ZvbGF0aWxlX18KICAgICgiZmxkbAklJXN0KDApXG5cdCIK ICAgICAiZnJuZGludAkJCSMgaW50KHgpXG5cdCIKICAgICAiZnhjaFxuXHQiCiAgICAgImZzdWIJ JSVzdCgxKQkJIyBmcmFjdCh4KVxuXHQiCiAgICAgImYyeG0xCQkJIyAyXihmcmFjdCh4KSkgLSAx XG5cdCIKICAgICA6ICI9dCIgKF9fdmFsdWUpLCAiPXUiIChfX2V4cG9uZW50KSA6ICIwIiAoX194 KSk7CiAgX192YWx1ZSArPSAxLjA7CiAgX19hc20gX192b2xhdGlsZV9fCiAgICAoImZzY2FsZSIK ICAgICA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3ZhbHVlKSwgInUiIChfX2V4cG9uZW50KSk7 CgogIHJldHVybiBfX3ZhbHVlOwp9CgoKCgoKCgojIDIwOCAiL3Vzci9pbmNsdWRlL21hdGguaCIg MiAzCgoKCgogCgoKCiMgMjggIi4uL2twYXRoc2VhL2Mtc3RkLmgiIDIKCgojIDEgIi91c3IvaW5j bHVkZS9zdGRpby5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKIyAxICIvdXNy L2luY2x1ZGUvbGliaW8uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIyAx ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDEgMwogCgoKCgoKIAoKIyAxICIvdXNyL2luY2x1 ZGUvZ251L3R5cGVzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCnR5cGVkZWYgdW5z aWduZWQgY2hhciBfX3VfY2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3Vfc2hvcnQ7CnR5 cGVkZWYgdW5zaWduZWQgaW50IF9fdV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3VfbG9u ZzsKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VfcXVhZF90Owp0eXBlZGVmIGxv bmcgbG9uZyBpbnQgX19xdWFkX3Q7CiMgNDEgIi91c3IvaW5jbHVkZS9nbnUvdHlwZXMuaCIgMwoK dHlwZWRlZiBfX3F1YWRfdCAqX19xYWRkcl90OwoKdHlwZWRlZiBfX3VfcXVhZF90IF9fZGV2X3Q7 CQkgCnR5cGVkZWYgX191X2ludCBfX3VpZF90OwkJIAp0eXBlZGVmIF9fdV9pbnQgX19naWRfdDsJ CSAKdHlwZWRlZiBfX3VfbG9uZyBfX2lub190OwkJIAp0eXBlZGVmIF9fdV9pbnQgX19tb2RlX3Q7 CQkgCnR5cGVkZWYgX191X2ludCBfX25saW5rX3Q7IAkJIAp0eXBlZGVmIGxvbmcgaW50IF9fb2Zm X3Q7CQkgCnR5cGVkZWYgX19xdWFkX3QgX19sb2ZmX3Q7CQkgCnR5cGVkZWYgaW50IF9fcGlkX3Q7 CQkJIAp0eXBlZGVmIGludCBfX3NzaXplX3Q7CQkJIAoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBp bnQgX192YWxbMl07CiAgfSBfX2ZzaWRfdDsJCQkJIAoKIAp0eXBlZGVmIGludCBfX2RhZGRyX3Q7 CQkJIAp0eXBlZGVmIGNoYXIgKl9fY2FkZHJfdDsKdHlwZWRlZiBsb25nIGludCBfX3RpbWVfdDsK dHlwZWRlZiBsb25nIGludCBfX3N3YmxrX3Q7CQkgCgwKdHlwZWRlZiBsb25nIGludCBfX2Nsb2Nr X3Q7CgogCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX19mZF9tYXNrOwoKIAoKCiAKCgoKCiAK dHlwZWRlZiBzdHJ1Y3QKICB7CiAgICAgCiAgICBfX2ZkX21hc2sgZmRzX2JpdHNbMTAyNCAgLyAo OCAqIHNpemVvZiAoX19mZF9tYXNrKSkgXTsKICB9IF9fZmRfc2V0OwoKCnR5cGVkZWYgaW50IF9f a2V5X3Q7Cgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX2lwY19waWRfdDsKCgojIDkgIi91 c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTY4 Ni1saW51eC9wZ2NjLTIuOTEuNjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAKCgojIDE5 ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtbGludXgvcGdjYy0yLjkxLjYwL2luY2x1ZGUvc3RkZGVm LmgiIDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LWxpbnV4 L3BnY2MtMi45MS42MC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoK CgoKCgoKIAoKCgoKCiAKCiAKCiMgMTMxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtbGludXgvcGdj Yy0yLjkxLjYwL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBzaXplX3Q7CgoKCgoKCgoKCgoKCgoK CgoKCgoKCgogCgoKCgogCgojIDI3MSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LWxpbnV4L3BnY2Mt Mi45MS42MC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgaW50 ICB3aW50X3Q7CgoKCgogCgogCgojIDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LWxpbnV4L3Bn Y2MtMi45MS42MC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoK CiMgMTMgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCgoKCgoKCgoKCgoKCgoKCgoKdHlw ZWRlZiBpbnQgX0dfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsK dHlwZWRlZiBpbnQgX0dfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykp KTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9k ZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQzMl90IF9fYXR0cmli dXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwoKCgoKIAoKCgoKCgoKCgoKIAoKCgoKIAoKCgoK CgoKCgoKCgoKCiMgMzEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKCgoKCgoKCgoKCgoKCgog CgojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1saW51eC9wZ2NjLTIuOTEuNjAvaW5jbHVkZS9z dGRhcmcuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKdHlwZWRlZiB2b2lkICpfX2dudWNfdmFfbGlzdDsK CgoKIAoKIyAxMTYgIi91c3IvbGliL2djYy1saWIvaTY4Ni1saW51eC9wZ2NjLTIuOTEuNjAvaW5j bHVkZS9zdGRhcmcuaCIgMwoKCgoKCgoKCgoKCgoKCgoKCgoKIyAyMDIgIi91c3IvbGliL2djYy1s aWIvaTY4Ni1saW51eC9wZ2NjLTIuOTEuNjAvaW5jbHVkZS9zdGRhcmcuaCIgMwoKCgoKIyA0NyAi L3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwoKCgoKCgoKIyA2NCAiL3Vzci9pbmNsdWRlL2xpYmlv LmgiIDMKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyA5OCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgi IDMKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoK CgoKCnN0cnVjdCBfSU9fanVtcF90OyAgc3RydWN0IF9JT19GSUxFOwoKIAoKCgp0eXBlZGVmIHZv aWQgX0lPX2xvY2tfdDsKCgoKIAoKc3RydWN0IF9JT19tYXJrZXIgewogIHN0cnVjdCBfSU9fbWFy a2VyICpfbmV4dDsKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOwogICAKCiAgIAogIGludCBfcG9z OwojIDE4MiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKCn07CgpzdHJ1Y3QgX0lPX0ZJTEUgewog IGludCBfZmxhZ3M7CQkgCgoKICAgCiAgIAogIGNoYXIqIF9JT19yZWFkX3B0cjsJIAogIGNoYXIq IF9JT19yZWFkX2VuZDsJIAogIGNoYXIqIF9JT19yZWFkX2Jhc2U7CSAKICBjaGFyKiBfSU9fd3Jp dGVfYmFzZTsJIAogIGNoYXIqIF9JT193cml0ZV9wdHI7CSAKICBjaGFyKiBfSU9fd3JpdGVfZW5k OwkgCiAgY2hhciogX0lPX2J1Zl9iYXNlOwkgCiAgY2hhciogX0lPX2J1Zl9lbmQ7CSAKICAgCiAg Y2hhciAqX0lPX3NhdmVfYmFzZTsgIAogIGNoYXIgKl9JT19iYWNrdXBfYmFzZTsgICAKICBjaGFy ICpfSU9fc2F2ZV9lbmQ7ICAKCiAgc3RydWN0IF9JT19tYXJrZXIgKl9tYXJrZXJzOwoKICBzdHJ1 Y3QgX0lPX0ZJTEUgKl9jaGFpbjsKCiAgaW50IF9maWxlbm87CiAgaW50IF9ibGtzaXplOwogIF9f b2ZmX3QgICBfb2Zmc2V0OwoKCiAgIAogIHVuc2lnbmVkIHNob3J0IF9jdXJfY29sdW1uOwogIGNo YXIgX3VudXNlZDsKICBjaGFyIF9zaG9ydGJ1ZlsxXTsKCiAgIAoKICBfSU9fbG9ja190ICpfbG9j azsKfTsKCgp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBfSU9fRklMRTsKCgpzdHJ1Y3QgX0lPX0ZJ TEVfcGx1czsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT19zdGRpbl8sIF9JT19zdGRv dXRfLCBfSU9fc3RkZXJyXzsKCgoKCgogCnR5cGVkZWYgc3RydWN0CnsKICBfX3NzaXplX3QgICAo KnJlYWQpICAoc3RydWN0IF9JT19GSUxFICosIHZvaWQgKiwgX19zc2l6ZV90ICApICA7CiAgX19z c2l6ZV90ICAgKCp3cml0ZSkgIChzdHJ1Y3QgX0lPX0ZJTEUgKiwgY29uc3Qgdm9pZCAqLCBfX3Nz aXplX3QgICkgIDsKICBfX29mZl90ICAgKCpzZWVrKSAgKHN0cnVjdCBfSU9fRklMRSAqLCBfX29m Zl90ICAsIGludCkgIDsKICBpbnQgKCpjbG9zZSkgIChzdHJ1Y3QgX0lPX0ZJTEUgKikgIDsKfSBf SU9fY29va2llX2lvX2Z1bmN0aW9uc190OwoKIApzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlIHsKICBz dHJ1Y3QgX0lPX0ZJTEUgZmlsZTsKICBjb25zdCB2b2lkICp2dGFibGU7CiAgdm9pZCAqY29va2ll OwogIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgaW9fZnVuY3Rpb25zOwp9OwoKCgoKCgpleHRl cm4gaW50IF9fdW5kZXJmbG93ICAoX0lPX0ZJTEUqKSAgOwpleHRlcm4gaW50IF9fdWZsb3cgIChf SU9fRklMRSopICA7CmV4dGVybiBpbnQgX19vdmVyZmxvdyAgKF9JT19GSUxFKiwgaW50KSAgOwoK CgoKCgoKCgoKCgoKCgoKCmV4dGVybiBpbnQgX0lPX2dldGMgIChfSU9fRklMRSAqX19mcCkgIDsK ZXh0ZXJuIGludCBfSU9fcHV0YyAgKGludCBfX2MsIF9JT19GSUxFICpfX2ZwKSAgOwpleHRlcm4g aW50IF9JT19mZW9mICAoX0lPX0ZJTEUgKl9fZnApICA7CmV4dGVybiBpbnQgX0lPX2ZlcnJvciAg KF9JT19GSUxFICpfX2ZwKSAgOwoKZXh0ZXJuIGludCBfSU9fcGVla2NfbG9ja2VkICAoX0lPX0ZJ TEUgKl9fZnApICA7CgogCgoKCmV4dGVybiB2b2lkIF9JT19mbG9ja2ZpbGUgIChfSU9fRklMRSAq KSAgOwpleHRlcm4gdm9pZCBfSU9fZnVubG9ja2ZpbGUgIChfSU9fRklMRSAqKSAgOwpleHRlcm4g aW50IF9JT19mdHJ5bG9ja2ZpbGUgIChfSU9fRklMRSAqKSAgOwoKCgoKCgoKCgogCgoKCgoKCgoK CgoKCgoKCgpleHRlcm4gaW50IF9JT192ZnNjYW5mICAoX0lPX0ZJTEUqLCBjb25zdCBjaGFyKiwg X19nbnVjX3ZhX2xpc3QgLCBpbnQqKSAgOwpleHRlcm4gaW50IF9JT192ZnByaW50ZiAgKF9JT19G SUxFKiwgY29uc3QgY2hhciosIF9fZ251Y192YV9saXN0ICkgIDsKZXh0ZXJuIF9fc3NpemVfdCAg IF9JT19wYWRuICAoX0lPX0ZJTEUgKiwgaW50LCBfX3NzaXplX3QgICkgIDsKZXh0ZXJuIHNpemVf dCAgIF9JT19zZ2V0biAgKF9JT19GSUxFICosIHZvaWQqLCBzaXplX3QgICkgIDsKCmV4dGVybiBf X29mZl90ICAgX0lPX3NlZWtvZmYgIChfSU9fRklMRSosIF9fb2ZmX3QgICwgaW50LCBpbnQpICA7 CmV4dGVybiBfX29mZl90ICAgX0lPX3NlZWtwb3MgIChfSU9fRklMRSosIF9fb2ZmX3QgICwgaW50 KSAgOwoKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfYmFja3VwX2FyZWEgIChfSU9fRklMRSopICA7CgoK CgoKCiMgMjkgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCiAgCiMgNjkgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCgoKdHlwZWRlZiBzdHJ1Y3QgX0lP X0ZJTEUgRklMRTsKdHlwZWRlZiBfX29mZl90ICAgZnBvc190OwoKIyAxICIvdXNyL2luY2x1ZGUv c3RkaW9fbGltLmgiIDEgMwoKCgoKCgoKCgoKCgoKCgoKCiMgNzQgIi91c3IvaW5jbHVkZS9zdGRp by5oIiAyIDMKCgoKIAoKCgogCmV4dGVybiBGSUxFICpzdGRpbiwgKnN0ZG91dCwgKnN0ZGVycjsg IAoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiB2b2lkIGNsZWFyZXJyICAoRklMRSopICA7CmV4dGVy biBpbnQgZmNsb3NlICAoRklMRSopICA7CmV4dGVybiBpbnQgZmVvZiAgKEZJTEUqKSAgOwpleHRl cm4gaW50IGZlcnJvciAgKEZJTEUqKSAgOwpleHRlcm4gaW50IGZmbHVzaCAgKEZJTEUqKSAgOwpl eHRlcm4gaW50IGZnZXRjICAoRklMRSAqKSAgOwpleHRlcm4gaW50IGZnZXRwb3MgIChGSUxFKiBm cCwgZnBvc190ICpfX3BvcykgIDsKZXh0ZXJuIGNoYXIqIGZnZXRzICAoY2hhciosIGludCwgRklM RSopICA7CmV4dGVybiBGSUxFKiBmb3BlbiAgKF9fY29uc3QgY2hhciosIF9fY29uc3QgY2hhciop ICA7CmV4dGVybiBGSUxFKiBmb3BlbmNvb2tpZSAgKHZvaWQgKl9fY29va2llLCBfX2NvbnN0IGNo YXIgKl9fbW9kZSwKCQkJICAgICAgIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19pb19mdW5j dGlvbnMpICA7CmV4dGVybiBpbnQgZnByaW50ZiAgKEZJTEUqLCBfX2NvbnN0IGNoYXIqIF9fZm9y bWF0LCAuLi4pICA7CmV4dGVybiBpbnQgZnB1dGMgIChpbnQsIEZJTEUqKSAgOwpleHRlcm4gaW50 IGZwdXRzICAoX19jb25zdCBjaGFyICpfX3N0ciwgRklMRSAqX19mcCkgIDsKZXh0ZXJuIHNpemVf dCBmcmVhZCAgKHZvaWQqLCBzaXplX3QsIHNpemVfdCwgRklMRSopICA7CmV4dGVybiBGSUxFKiBm cmVvcGVuICAoX19jb25zdCBjaGFyKiwgX19jb25zdCBjaGFyKiwgRklMRSopICA7CmV4dGVybiBp bnQgZnNjYW5mICAoRklMRSAqX19mcCwgX19jb25zdCBjaGFyKiBfX2Zvcm1hdCwgLi4uKSAgOwpl eHRlcm4gaW50IGZzZWVrICAoRklMRSogX19mcCwgbG9uZyBpbnQgX19vZmZzZXQsIGludCBfX3do ZW5jZSkgIDsKZXh0ZXJuIGludCBmc2V0cG9zICAoRklMRSogX19mcCwgX19jb25zdCBmcG9zX3Qg Kl9fcG9zKSAgOwpleHRlcm4gbG9uZyBpbnQgZnRlbGwgIChGSUxFKiBfX2ZwKSAgOwpleHRlcm4g c2l6ZV90IGZ3cml0ZSAgKF9fY29uc3Qgdm9pZCosIHNpemVfdCwgc2l6ZV90LCBGSUxFKikgIDsK ZXh0ZXJuIGludCBnZXRjICAoRklMRSAqKSAgOwpleHRlcm4gaW50IGdldGNoYXIgICh2b2lkKSAg OwpleHRlcm4gY2hhciogZ2V0cyAgKGNoYXIqKSAgOwpleHRlcm4gdm9pZCBwZXJyb3IgIChfX2Nv bnN0IGNoYXIgKikgIDsKZXh0ZXJuIGludCBwcmludGYgIChfX2NvbnN0IGNoYXIqIF9fZm9ybWF0 LCAuLi4pICA7CmV4dGVybiBpbnQgcHV0YyAgKGludCwgRklMRSAqKSAgOwpleHRlcm4gaW50IHB1 dGNoYXIgIChpbnQpICA7CmV4dGVybiBpbnQgcHV0cyAgKF9fY29uc3QgY2hhciAqX19zdHIpICA7 CmV4dGVybiBpbnQgcmVtb3ZlICAoX19jb25zdCBjaGFyKikgIDsKZXh0ZXJuIGludCByZW5hbWUg IChfX2NvbnN0IGNoYXIqIF9fb2xkLCBfX2NvbnN0IGNoYXIqIF9fbmV3KSAgOwpleHRlcm4gdm9p ZCByZXdpbmQgIChGSUxFKikgIDsKZXh0ZXJuIGludCBzY2FuZiAgKF9fY29uc3QgY2hhciogZm9y bWF0LCAuLi4pICA7CmV4dGVybiB2b2lkIHNldGJ1ZiAgKEZJTEUqLCBjaGFyKikgIDsKZXh0ZXJu IHZvaWQgc2V0bGluZWJ1ZiAgKEZJTEUqKSAgOwpleHRlcm4gdm9pZCBzZXRidWZmZXIgIChGSUxF KiwgY2hhciosIGludCkgIDsKZXh0ZXJuIGludCBzZXR2YnVmICAoRklMRSosIGNoYXIqLCBpbnQg X19tb2RlLCBzaXplX3QgX19zaXplKSAgOwpleHRlcm4gaW50IHNwcmludGYgIChjaGFyKiwgX19j b25zdCBjaGFyKiBfX2Zvcm1hdCwgLi4uKSAgOwpleHRlcm4gaW50IHNzY2FuZiAgKF9fY29uc3Qg Y2hhciogc3RyaW5nLCBfX2NvbnN0IGNoYXIqIF9fZm9ybWF0LCAuLi4pICA7CmV4dGVybiBGSUxF KiB0bXBmaWxlICAodm9pZCkgIDsKZXh0ZXJuIGNoYXIqIHRtcG5hbSAgKGNoYXIqKSAgOwoKZXh0 ZXJuIGNoYXIqIHRtcG5hbV9yICAoY2hhciopICA7CgoKZXh0ZXJuIGNoYXIgKnRlbXBuYW0gIChf X2NvbnN0IGNoYXIgKl9fZGlyLCBfX2NvbnN0IGNoYXIgKl9fcGZ4KSAgOwoKZXh0ZXJuIGNoYXIg Kl9fc3RkaW9fZ2VuX3RlbXBuYW1lICAoY2hhciAqX19idWYsIHNpemVfdCBidWZzaXplLAoJCQkJ CV9fY29uc3QgY2hhciAqZGlyLCBfX2NvbnN0IGNoYXIgKnBmeCwKCQkJCQlpbnQgZGlyX3NlYXJj aCwgc2l6ZV90ICpsZW5wdHIsCgkJCQkJRklMRSAqKnN0cmVhbXB0cikgIDsKZXh0ZXJuIGludCB1 bmdldGMgIChpbnQgYywgRklMRSogZnApICA7CmV4dGVybiBpbnQgdmZwcmludGYgIChGSUxFICpm cCwgY2hhciBfX2NvbnN0ICpmbXQwLCBfX2dudWNfdmFfbGlzdCApICA7CmV4dGVybiBpbnQgdnBy aW50ZiAgKGNoYXIgX19jb25zdCAqZm10LCBfX2dudWNfdmFfbGlzdCApICA7CmV4dGVybiBpbnQg dnNwcmludGYgIChjaGFyKiBzdHJpbmcsIF9fY29uc3QgY2hhciogZm9ybWF0LCBfX2dudWNfdmFf bGlzdCApICA7CmV4dGVybiB2b2lkIF9fbGliY19mYXRhbCAgKF9fY29uc3QgY2hhciAqX19tZXNz YWdlKSAgCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCmV4dGVybiBpbnQg ZHByaW50ZiAgKGludCwgX19jb25zdCBjaGFyICosIC4uLikgIDsKZXh0ZXJuIGludCB2ZHByaW50 ZiAgKGludCwgX19jb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0ICkgIDsKZXh0ZXJuIGludCB2 ZnNjYW5mICAoRklMRSosIF9fY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCApICA7CmV4dGVy biBpbnQgX192ZnNjYW5mICAoRklMRSosIF9fY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCAp ICA7CmV4dGVybiBpbnQgdnNjYW5mICAoX19jb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0ICkg IDsKZXh0ZXJuIGludCB2c3NjYW5mICAoX19jb25zdCBjaGFyICosIF9fY29uc3QgY2hhciAqLCBf X2dudWNfdmFfbGlzdCApICA7CmV4dGVybiBpbnQgX192c3NjYW5mICAoX19jb25zdCBjaGFyICos IF9fY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCApICA7CgoKIyAxNzcgIi91c3IvaW5jbHVk ZS9zdGRpby5oIiAzCgoKCmV4dGVybiBGSUxFICpmZG9wZW4gIChpbnQsIF9fY29uc3QgY2hhciAq KSAgOwpleHRlcm4gaW50IGZpbGVubyAgKEZJTEUqKSAgOwpleHRlcm4gRklMRSogcG9wZW4gIChf X2NvbnN0IGNoYXIqLCBfX2NvbnN0IGNoYXIqKSAgOwpleHRlcm4gaW50IHBjbG9zZSAgKEZJTEUq KSAgOwoKCgoKIApleHRlcm4gY2hhciAqY3Rlcm1pZCAgKGNoYXIgKl9fYnVmKSAgOwoKIApleHRl cm4gY2hhciAqY3VzZXJpZCAgKGNoYXIgKiBfX2J1ZikgIDsKCgoKZXh0ZXJuIGludCBzbnByaW50 ZiAgKGNoYXIgKiwgc2l6ZV90LCBfX2NvbnN0IGNoYXIgKiwgLi4uKSAgOwpleHRlcm4gaW50IF9f c25wcmludGYgIChjaGFyICosIHNpemVfdCwgX19jb25zdCBjaGFyICosIC4uLikgIDsKZXh0ZXJu IGludCB2c25wcmludGYgIChjaGFyICosIHNpemVfdCwgX19jb25zdCBjaGFyICosIF9fZ251Y192 YV9saXN0ICkgIDsKZXh0ZXJuIGludCBfX3ZzbnByaW50ZiAgKGNoYXIgKiwgc2l6ZV90LCBfX2Nv bnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3QgKSAgOwoKCiMgMjE0ICIvdXNyL2luY2x1ZGUvc3Rk aW8uaCIgMwoKCmV4dGVybiBpbnQgX191bmRlcmZsb3cgIChzdHJ1Y3QgX0lPX0ZJTEUqKSAgOwpl eHRlcm4gaW50IF9fb3ZlcmZsb3cgIChzdHJ1Y3QgX0lPX0ZJTEUqLCBpbnQpICA7CgoKZXh0ZXJu IGludCBzeXNfbmVycjsKZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbnN0IHN5c19lcnJsaXN0W107CgoK CgoKCiAKCmV4dGVybiB2b2lkIGNsZWFyZXJyX2xvY2tlZCAgKEZJTEUgKikgIDsKZXh0ZXJuIHZv aWQgY2xlYXJlcnJfdW5sb2NrZWQgIChGSUxFICopICA7CmV4dGVybiBpbnQgZmVvZl9sb2NrZWQg IChGSUxFICopICA7CmV4dGVybiBpbnQgZmVvZl91bmxvY2tlZCAgKEZJTEUgKikgIDsKZXh0ZXJu IGludCBmZXJyb3JfbG9ja2VkICAoRklMRSopICA7CmV4dGVybiBpbnQgZmVycm9yX3VubG9ja2Vk ICAoRklMRSopICA7CmV4dGVybiBpbnQgZmlsZW5vX2xvY2tlZCAgKEZJTEUgKikgIDsKZXh0ZXJu IGludCBmaWxlbm9fdW5sb2NrZWQgIChGSUxFICopICA7CmV4dGVybiBpbnQgZmNsb3NlX3VubG9j a2VkICAoRklMRSAqKSAgOwpleHRlcm4gaW50IGZmbHVzaF9sb2NrZWQgIChGSUxFICopICA7CmV4 dGVybiBpbnQgZmZsdXNoX3VubG9ja2VkICAoRklMRSAqKSAgOwpleHRlcm4gc2l6ZV90IGZyZWFk X3VubG9ja2VkICAodm9pZCAqLCBzaXplX3QsIHNpemVfdCwgRklMRSAqKSAgOwpleHRlcm4gc2l6 ZV90IGZ3cml0ZV91bmxvY2tlZCAgKGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIEZJTEUg KikgIDsKCmV4dGVybiBpbnQgZnB1dGNfbG9ja2VkICAoaW50LCBGSUxFKikgIDsKZXh0ZXJuIGlu dCBmcHV0Y191bmxvY2tlZCAgKGludCwgRklMRSopICA7CmV4dGVybiBpbnQgZ2V0Y19sb2NrZWQg IChGSUxFICopICA7CmV4dGVybiBpbnQgZ2V0Y2hhcl9sb2NrZWQgICh2b2lkKSAgOwpleHRlcm4g aW50IHB1dGNfbG9ja2VkICAoaW50LCBGSUxFICopICA7CmV4dGVybiBpbnQgcHV0Y2hhcl9sb2Nr ZWQgIChpbnQpICA7CgoKCgoKCgoKCiAKZXh0ZXJuIHZvaWQgZmxvY2tmaWxlICAoRklMRSAqKSAg OwpleHRlcm4gdm9pZCBmdW5sb2NrZmlsZSAgKEZJTEUgKikgIDsKZXh0ZXJuIGludCBmdHJ5bG9j a2ZpbGUgIChGSUxFICopICA7CgpleHRlcm4gaW50IGdldGNfdW5sb2NrZWQgIChGSUxFICopICA7 CmV4dGVybiBpbnQgZ2V0Y2hhcl91bmxvY2tlZCAgKHZvaWQpICA7CmV4dGVybiBpbnQgcHV0Y191 bmxvY2tlZCAgKGludCwgRklMRSAqKSAgOwpleHRlcm4gaW50IHB1dGNoYXJfdW5sb2NrZWQgIChp bnQpICA7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDMwICIuLi9rcGF0aHNlYS9jLXN0ZC5oIiAy CgoKIAojIDEgIi4uL2twYXRoc2VhL2MtdW5pc3RkLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoK CgogCiMgMSAiLi4va3BhdGhzZWEvc3lzdHlwZXMuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgog CgoKCgoKCgoKIAoKCgoKdHlwZWRlZiBfX3VfY2hhciB1X2NoYXI7CnR5cGVkZWYgX191X3Nob3J0 IHVfc2hvcnQ7CnR5cGVkZWYgX191X2ludCB1X2ludDsKdHlwZWRlZiBfX3VfbG9uZyB1X2xvbmc7 CnR5cGVkZWYgX19xdWFkX3QgcXVhZF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgdV9xdWFkX3Q7CnR5 cGVkZWYgX19mc2lkX3QgZnNpZF90OwoKCnR5cGVkZWYgX19kZXZfdCBkZXZfdDsKdHlwZWRlZiBf X2dpZF90IGdpZF90Owp0eXBlZGVmIF9faW5vX3QgaW5vX3Q7CnR5cGVkZWYgX19tb2RlX3QgbW9k ZV90Owp0eXBlZGVmIF9fbmxpbmtfdCBubGlua190Owp0eXBlZGVmIF9fb2ZmX3Qgb2ZmX3Q7CnR5 cGVkZWYgX19sb2ZmX3QgbG9mZl90Owp0eXBlZGVmIF9fcGlkX3QgcGlkX3Q7CnR5cGVkZWYgX191 aWRfdCB1aWRfdDsKCgp0eXBlZGVmIF9fc3NpemVfdCBzc2l6ZV90OwoKCgoKdHlwZWRlZiBfX2Rh ZGRyX3QgZGFkZHJfdDsKdHlwZWRlZiBfX2NhZGRyX3QgY2FkZHJfdDsKCgoKdHlwZWRlZiBfX2tl eV90IGtleV90OwoKCgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwogCgoKCgoKCgoKCgoK CgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgNTYgIi91c3IvaW5jbHVkZS90aW1lLmgi IDMKCgoKIyA2OCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgoKCgoKCgogCnR5cGVkZWYgX190 aW1lX3QgdGltZV90OwoKCgoKCiMgOTcgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKCgojIDEy NSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgojIDI4MSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIg MwoKCgojIDY3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgojIDEgIi91c3IvbGli L2djYy1saWIvaTY4Ni1saW51eC9wZ2NjLTIuOTEuNjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCgoK CgoKCiAKCgojIDE5ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtbGludXgvcGdjYy0yLjkxLjYwL2lu Y2x1ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9saWIvZ2NjLWxp Yi9pNjg2LWxpbnV4L3BnY2MtMi45MS42MC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAK CgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCiMgMTMxICIvdXNyL2xpYi9nY2MtbGliL2k2 ODYtbGludXgvcGdjYy0yLjkxLjYwL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgogCgoKIyAxODgg Ii91c3IvbGliL2djYy1saWIvaTY4Ni1saW51eC9wZ2NjLTIuOTEuNjAvaW5jbHVkZS9zdGRkZWYu aCIgMwoKCgoKCiAKCgoKCiAKCiMgMjcxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtbGludXgvcGdj Yy0yLjkxLjYwL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgojIDI4MyAiL3Vzci9saWIvZ2NjLWxpYi9p Njg2LWxpbnV4L3BnY2MtMi45MS42MC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKIyAzMTcg Ii91c3IvbGliL2djYy1saWIvaTY4Ni1saW51eC9wZ2NjLTIuOTEuNjAvaW5jbHVkZS9zdGRkZWYu aCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDcwICIvdXNyL2luY2x1ZGUvc3lzL3R5 cGVzLmgiIDIgMwoKCgogCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVkZWYg dW5zaWduZWQgc2hvcnQgaW50IHVzaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKCgog CgojIDk1ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKCgogCgoKCgoKdHlwZWRlZiBpbnQg aW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoICBfX1FJX18gKSkpIDsKdHlwZWRlZiB1 bnNpZ25lZCBpbnQgdV9pbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fICggIF9fUUlfXyAp KSkgOwp0eXBlZGVmIGludCBpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoICBfX0hJ X18gKSkpIDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQxNl90IF9fYXR0cmlidXRlX18gKChf X21vZGVfXyAoICBfX0hJX18gKSkpIDsKdHlwZWRlZiBpbnQgaW50MzJfdCBfX2F0dHJpYnV0ZV9f ICgoX19tb2RlX18gKCAgX19TSV9fICkpKSA7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MzJf dCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKCAgX19TSV9fICkpKSA7CnR5cGVkZWYgaW50IGlu dDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fICggIF9fRElfXyApKSkgOwp0eXBlZGVmIHVu c2lnbmVkIGludCB1X2ludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fICggIF9fRElfXyAp KSkgOwoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9f d29yZF9fKSkpOwoKCiAKCgoKCgoKIAojIDEgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMSAzCiAK CgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgogCiMgMSAiL3Vzci9pbmNsdWRlL2J5dGVz ZXguaCIgMSAzCiAKCgojIDM0ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDIgMwoKCgoKCgoKCgoK IyAxMjMgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKIAojIDEgIi91c3IvaW5jbHVk ZS9zeXMvc2VsZWN0LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoKCiAKIyAx ICIvdXNyL2luY2x1ZGUvc2VsZWN0Yml0cy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKIyA1MCAiL3Vzci9pbmNsdWRlL3NlbGVjdGJpdHMuaCIgMwoKIyA2 NSAiL3Vzci9pbmNsdWRlL3NlbGVjdGJpdHMuaCIgMwoKCgojIDMxICIvdXNyL2luY2x1ZGUvc3lz L3NlbGVjdC5oIiAyIDMKCgogCgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwogCgoKCgoK CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgNTYgIi91c3IvaW5jbHVkZS90 aW1lLmgiIDMKCgoKIyA2OCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgojIDgwICIvdXNyL2lu Y2x1ZGUvdGltZS5oIiAzCgoKCgoKCgoKCiAKCnN0cnVjdCB0aW1lc3BlYwogIHsKICAgIGxvbmcg aW50IHR2X3NlYzsJCSAKICAgIGxvbmcgaW50IHR2X25zZWM7CQkgCiAgfTsKCgoKCgoKIyAxMjUg Ii91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKIyAyODEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMK CgoKIyAzNSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKIAoKIAoKCgpzdHJ1Y3Qg dGltZXZhbDsKCnR5cGVkZWYgX19mZF9tYXNrIGZkX21hc2s7CgogCnR5cGVkZWYgX19mZF9zZXQg ZmRfc2V0OwoKIAoKCgogCgoKCgogCgoKCgoKCiAKCgoKCmV4dGVybiBpbnQgX19zZWxlY3QgIChp bnQgX19uZmRzLCBfX2ZkX3NldCAqX19yZWFkZmRzLAoJCQkgIF9fZmRfc2V0ICpfX3dyaXRlZmRz LCBfX2ZkX3NldCAqX19leGNlcHRmZHMsCgkJCSAgc3RydWN0IHRpbWV2YWwgKl9fdGltZW91dCkg IDsKZXh0ZXJuIGludCBzZWxlY3QgIChpbnQgX19uZmRzLCBfX2ZkX3NldCAqX19yZWFkZmRzLAoJ CQlfX2ZkX3NldCAqX193cml0ZWZkcywgX19mZF9zZXQgKl9fZXhjZXB0ZmRzLAoJCQlzdHJ1Y3Qg dGltZXZhbCAqX190aW1lb3V0KSAgOwoKIAoKCmV4dGVybiBpbnQgX19wc2VsZWN0ICAoaW50IF9f bmZkcywgX19mZF9zZXQgKl9fcmVhZGZkcywKCQkJICAgX19mZF9zZXQgKl9fd3JpdGVmZHMsIF9f ZmRfc2V0ICpfX2V4Y2VwdGZkcywKCQkJICAgc3RydWN0IHRpbWVzcGVjICpfX3RpbWVvdXQpICA7 CmV4dGVybiBpbnQgcHNlbGVjdCAgKGludCBfX25mZHMsIF9fZmRfc2V0ICpfX3JlYWRmZHMsCgkJ CSBfX2ZkX3NldCAqX193cml0ZWZkcywgX19mZF9zZXQgKl9fZXhjZXB0ZmRzLAoJCQkgc3RydWN0 IHRpbWVzcGVjICpfX3RpbWVvdXQpICA7CgoKIAoKCiMgMTI2ICIvdXNyL2luY2x1ZGUvc3lzL3R5 cGVzLmgiIDIgMwoKCgoKIAoKCiMgMjQgIi4uL2twYXRoc2VhL3N5c3R5cGVzLmgiIDIKCgogCgoK CgojIDI0ICIuLi9rcGF0aHNlYS9jLXVuaXN0ZC5oIiAyCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3Vu aXN0ZC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgogCgogCgoKIAoKCgogCgoK CgogCgoKCiAKCgoKIAoKCgogCgoKCiAKCgogCgoKIAoKCgoKIAoKCiAKCgogCgoKCgogCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIv dXNyL2luY2x1ZGUvcG9zaXhfb3B0LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgog CgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgoKIAoKCiAKCgog CgoKIAoKCgogCgoKIAogCgoKIyAxMzcgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzCgoKCiAK CgoKCgogCgoKCgoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1saW51eC9wZ2NjLTIu OTEuNjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL2xpYi9nY2Mt bGliL2k2ODYtbGludXgvcGdjYy0yLjkxLjYwL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCiAK CgoKCgogCgoKIyA2MSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LWxpbnV4L3BnY2MtMi45MS42MC9p bmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAK CiAKCiMgMTMxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtbGludXgvcGdjYy0yLjkxLjYwL2luY2x1 ZGUvc3RkZGVmLmgiIDMKCgogCgogCgoKIyAxODggIi91c3IvbGliL2djYy1saWIvaTY4Ni1saW51 eC9wZ2NjLTIuOTEuNjAvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCiAKCgoKCiAKCiMgMjcxICIv dXNyL2xpYi9nY2MtbGliL2k2ODYtbGludXgvcGdjYy0yLjkxLjYwL2luY2x1ZGUvc3RkZGVmLmgi IDMKCgojIDI4MyAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LWxpbnV4L3BnY2MtMi45MS42MC9pbmNs dWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIvaTY4Ni1saW51 eC9wZ2NjLTIuOTEuNjAvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoKCgoK CgoKCgojIDE1NyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMKCgoKIAoKCgoKCgogCmV4dGVy biBpbnQgX19hY2Nlc3MgIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgaW50IF9fdHlwZSkgIDsKZXh0 ZXJuIGludCBhY2Nlc3MgIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgaW50IF9fdHlwZSkgIDsKCgoK CgoKCgoKIAoKCgoKCgoKIAoKCgoKCgogCgoKCgpleHRlcm4gX19vZmZfdCBfX2xzZWVrICAoaW50 IF9fZmQsIF9fb2ZmX3QgX19vZmZzZXQsIGludCBfX3doZW5jZSkgIDsKZXh0ZXJuIF9fb2ZmX3Qg bHNlZWsgIChpbnQgX19mZCwgX19vZmZfdCBfX29mZnNldCwgaW50IF9fd2hlbmNlKSAgOwoKIApl eHRlcm4gaW50IF9fY2xvc2UgIChpbnQgX19mZCkgIDsKZXh0ZXJuIGludCBjbG9zZSAgKGludCBf X2ZkKSAgOwoKIAoKZXh0ZXJuIHNzaXplX3QgIF9fcmVhZCAgKGludCBfX2ZkLCB2b2lkICogIF9f YnVmLCBzaXplX3QgX19uYnl0ZXMpICA7CmV4dGVybiBzc2l6ZV90ICByZWFkICAoaW50IF9fZmQs IHZvaWQgKiAgX19idWYsIHNpemVfdCBfX25ieXRlcykgIDsKCiAKZXh0ZXJuIHNzaXplX3QgIF9f d3JpdGUgIChpbnQgX19mZCwgX19jb25zdCB2b2lkICogIF9fYnVmLCBzaXplX3QgX19uKSAgOwpl eHRlcm4gc3NpemVfdCAgd3JpdGUgIChpbnQgX19mZCwgX19jb25zdCB2b2lkICogIF9fYnVmLCBz aXplX3QgX19uKSAgOwoKCiAKCgoKZXh0ZXJuIGludCBfX3BpcGUgIChpbnQgX19waXBlZGVzWzJd KSAgOwpleHRlcm4gaW50IHBpcGUgIChpbnQgX19waXBlZGVzWzJdKSAgOwoKIAoKCgoKCgpleHRl cm4gdW5zaWduZWQgaW50IGFsYXJtICAodW5zaWduZWQgaW50IF9fc2Vjb25kcykgIDsKCiAKCgoK CgoKZXh0ZXJuIHVuc2lnbmVkIGludCBzbGVlcCAgKHVuc2lnbmVkIGludCBfX3NlY29uZHMpICA7 CgoKIAoKCgpleHRlcm4gdW5zaWduZWQgaW50IHVhbGFybSAgKHVuc2lnbmVkIGludCBfX3ZhbHVl LAoJCQkJIHVuc2lnbmVkIGludCBfX2ludGVydmFsKSAgOwoKIAoKZXh0ZXJuIHZvaWQgdXNsZWVw ICAodW5zaWduZWQgaW50IF9fdXNlY29uZHMpICA7CgoKCiAKCmV4dGVybiBpbnQgcGF1c2UgICh2 b2lkKSAgOwoKCiAKZXh0ZXJuIGludCBfX2Nob3duICAoX19jb25zdCBjaGFyICpfX2ZpbGUsCgkJ CSBfX3VpZF90IF9fb3duZXIsIF9fZ2lkX3QgX19ncm91cCkgIDsKZXh0ZXJuIGludCBjaG93biAg KF9fY29uc3QgY2hhciAqX19maWxlLAoJCSAgICAgICBfX3VpZF90IF9fb3duZXIsIF9fZ2lkX3Qg X19ncm91cCkgIDsKCgogCmV4dGVybiBpbnQgX19mY2hvd24gIChpbnQgX19mZCwKCQkJICBfX3Vp ZF90IF9fb3duZXIsIF9fZ2lkX3QgX19ncm91cCkgIDsKZXh0ZXJuIGludCBmY2hvd24gIChpbnQg X19mZCwKCQkJX191aWRfdCBfX293bmVyLCBfX2dpZF90IF9fZ3JvdXApICA7CgoKIAoKZXh0ZXJu IGludCBfX2xjaG93biAgKF9fY29uc3QgY2hhciAqX19maWxlLCBfX3VpZF90IF9fb3duZXIsCgkJ CSAgX19naWRfdCBfX2dyb3VwKSAgOwpleHRlcm4gaW50IGxjaG93biAgKF9fY29uc3QgY2hhciAq X19maWxlLCBfX3VpZF90IF9fb3duZXIsCgkJCV9fZ2lkX3QgX19ncm91cCkgIDsKCgoKIApleHRl cm4gaW50IF9fY2hkaXIgIChfX2NvbnN0IGNoYXIgKl9fcGF0aCkgIDsKZXh0ZXJuIGludCBjaGRp ciAgKF9fY29uc3QgY2hhciAqX19wYXRoKSAgOwoKCiAKZXh0ZXJuIGludCBmY2hkaXIgIChpbnQg X19mZCkgIDsKCgogCgoKCgoKCmV4dGVybiBjaGFyICpfX2dldGN3ZCAgKGNoYXIgKl9fYnVmLCBz aXplX3QgX19zaXplKSAgOwpleHRlcm4gY2hhciAqZ2V0Y3dkICAoY2hhciAqX19idWYsIHNpemVf dCBfX3NpemUpICA7CgojIDMxNyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCgoKCiAKCgpleHRl cm4gY2hhciAqZ2V0d2QgIChjaGFyICpfX2J1ZikgIDsKCgoKIApleHRlcm4gaW50IF9fZHVwICAo aW50IF9fZmQpICA7CmV4dGVybiBpbnQgZHVwICAoaW50IF9fZmQpICA7CgogCmV4dGVybiBpbnQg X19kdXAyICAoaW50IF9fZmQsIGludCBfX2ZkMikgIDsKZXh0ZXJuIGludCBkdXAyICAoaW50IF9f ZmQsIGludCBfX2ZkMikgIDsKCiAKZXh0ZXJuIGNoYXIgKipfX2Vudmlyb247CgoKCgoKIAoKZXh0 ZXJuIGludCBfX2V4ZWN2ZSAgKF9fY29uc3QgY2hhciAqX19wYXRoLCBjaGFyICpfX2NvbnN0IF9f YXJndltdLAoJCQkgIGNoYXIgKl9fY29uc3QgX19lbnZwW10pICA7CmV4dGVybiBpbnQgZXhlY3Zl ICAoX19jb25zdCBjaGFyICpfX3BhdGgsIGNoYXIgKl9fY29uc3QgX19hcmd2W10sCgkJCWNoYXIg Kl9fY29uc3QgX19lbnZwW10pICA7CgoKCgoKCgoKCgogCmV4dGVybiBpbnQgZXhlY3YgIChfX2Nv bnN0IGNoYXIgKl9fcGF0aCwgY2hhciAqX19jb25zdCBfX2FyZ3ZbXSkgIDsKCiAKCmV4dGVybiBp bnQgZXhlY2xlICAoX19jb25zdCBjaGFyICpfX3BhdGgsIF9fY29uc3QgY2hhciAqX19hcmcsIC4u LikgIDsKCiAKCmV4dGVybiBpbnQgZXhlY2wgIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgX19jb25z dCBjaGFyICpfX2FyZywgLi4uKSAgOwoKIAoKZXh0ZXJuIGludCBleGVjdnAgIChfX2NvbnN0IGNo YXIgKl9fZmlsZSwgY2hhciAqX19jb25zdCBfX2FyZ3ZbXSkgIDsKCiAKCgpleHRlcm4gaW50IGV4 ZWNscCAgKF9fY29uc3QgY2hhciAqX19maWxlLCBfX2NvbnN0IGNoYXIgKl9fYXJnLCAuLi4pICA7 CgoKCiAKZXh0ZXJuIGludCBuaWNlICAoaW50IF9faW5jKSAgOwoKCgogCmV4dGVybiB2b2lkIF9l eGl0ICAoaW50IF9fc3RhdHVzKSAgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgog CgoKIyAxICIvdXNyL2luY2x1ZGUvY29uZm5hbWUuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoK IAplbnVtCiAgewogICAgX1BDX0xJTktfTUFYLAoKICAgIF9QQ19NQVhfQ0FOT04sCgogICAgX1BD X01BWF9JTlBVVCwKCiAgICBfUENfTkFNRV9NQVgsCgogICAgX1BDX1BBVEhfTUFYLAoKICAgIF9Q Q19QSVBFX0JVRiwKCiAgICBfUENfQ0hPV05fUkVTVFJJQ1RFRCwKCiAgICBfUENfTk9fVFJVTkMs CgogICAgX1BDX1ZESVNBQkxFLAoKICAgIF9QQ19TWU5DX0lPLAoKICAgIF9QQ19BU1lOQ19JTywK CiAgICBfUENfUFJJT19JTywKCiAgICBfUENfU09DS19NQVhCVUYKCiAgfTsKCiAKZW51bQogIHsK ICAgIF9TQ19BUkdfTUFYLAoKICAgIF9TQ19DSElMRF9NQVgsCgogICAgX1NDX0NMS19UQ0ssCgog ICAgX1NDX05HUk9VUFNfTUFYLAoKICAgIF9TQ19PUEVOX01BWCwKCiAgICBfU0NfU1RSRUFNX01B WCwKCiAgICBfU0NfVFpOQU1FX01BWCwKCiAgICBfU0NfSk9CX0NPTlRST0wsCgogICAgX1NDX1NB VkVEX0lEUywKCiAgICBfU0NfUkVBTFRJTUVfU0lHTkFMUywKCiAgICBfU0NfUFJJT1JJVFlfU0NI RURVTElORywKCiAgICBfU0NfVElNRVJTLAoKICAgIF9TQ19BU1lOQ0hST05PVVNfSU8sCgogICAg X1NDX1BSSU9SSVRJWkVEX0lPLAoKICAgIF9TQ19TWU5DSFJPTklaRURfSU8sCgogICAgX1NDX0ZT WU5DLAoKICAgIF9TQ19NQVBQRURfRklMRVMsCgogICAgX1NDX01FTUxPQ0ssCgogICAgX1NDX01F TUxPQ0tfUkFOR0UsCgogICAgX1NDX01FTU9SWV9QUk9URUNUSU9OLAoKICAgIF9TQ19NRVNTQUdF X1BBU1NJTkcsCgogICAgX1NDX1NFTUFQSE9SRVMsCgogICAgX1NDX1NIQVJFRF9NRU1PUllfT0JK RUNUUywKCiAgICBfU0NfQUlPX0xJU1RJT19NQVgsCgogICAgX1NDX0FJT19NQVgsCgogICAgX1ND X0FJT19QUklPX0RFTFRBX01BWCwKCiAgICBfU0NfREVMQVlUSU1FUl9NQVgsCgogICAgX1NDX01R X09QRU5fTUFYLAoKICAgIF9TQ19NUV9QUklPX01BWCwKCiAgICBfU0NfVkVSU0lPTiwKCiAgICBf U0NfUEFHRVNJWkUsCgoKICAgIF9TQ19SVFNJR19NQVgsCgogICAgX1NDX1NFTV9OU0VNU19NQVgs CgogICAgX1NDX1NFTV9WQUxVRV9NQVgsCgogICAgX1NDX1NJR1FVRVVFX01BWCwKCiAgICBfU0Nf VElNRVJfTUFYLAoKCiAgICAgCgogICAgX1NDX0JDX0JBU0VfTUFYLAoKICAgIF9TQ19CQ19ESU1f TUFYLAoKICAgIF9TQ19CQ19TQ0FMRV9NQVgsCgogICAgX1NDX0JDX1NUUklOR19NQVgsCgogICAg X1NDX0NPTExfV0VJR0hUU19NQVgsCgogICAgX1NDX0VRVUlWX0NMQVNTX01BWCwKCiAgICBfU0Nf RVhQUl9ORVNUX01BWCwKCiAgICBfU0NfTElORV9NQVgsCgogICAgX1NDX1JFX0RVUF9NQVgsCgog ICAgX1NDX0NIQVJDTEFTU19OQU1FX01BWCwKCgogICAgX1NDXzJfVkVSU0lPTiwKCiAgICBfU0Nf Ml9DX0JJTkQsCgogICAgX1NDXzJfQ19ERVYsCgogICAgX1NDXzJfRk9SVF9ERVYsCgogICAgX1ND XzJfRk9SVF9SVU4sCgogICAgX1NDXzJfU1dfREVWLAoKICAgIF9TQ18yX0xPQ0FMRURFRiwKCgog ICAgX1NDX1BJSSwKCiAgICBfU0NfUElJX1hUSSwKCiAgICBfU0NfUElJX1NPQ0tFVCwKCiAgICBf U0NfUElJX0lOVEVSTkVULAoKICAgIF9TQ19QSUlfT1NJLAoKICAgIF9TQ19QT0xMLAoKICAgIF9T Q19TRUxFQ1QsCgogICAgX1NDX1VJT19NQVhJT1YsCgogICAgX1NDX1BJSV9JTlRFUk5FVF9TVFJF QU0sCgogICAgX1NDX1BJSV9JTlRFUk5FVF9ER1JBTSwKCiAgICBfU0NfUElJX09TSV9DT1RTLAoK ICAgIF9TQ19QSUlfT1NJX0NMVFMsCgogICAgX1NDX1BJSV9PU0lfTSwKCiAgICBfU0NfVF9JT1Zf TUFYLAoKCiAgICAgCiAgICBfU0NfVEhSRUFEUywKCiAgICBfU0NfVEhSRUFEX1NBRkVfRlVOQ1RJ T05TLAoKICAgIF9TQ19HRVRHUl9SX1NJWkVfTUFYLAoKICAgIF9TQ19HRVRQV19SX1NJWkVfTUFY LAoKICAgIF9TQ19MT0dJTl9OQU1FX01BWCwKCiAgICBfU0NfVFRZX05BTUVfTUFYLAoKICAgIF9T Q19USFJFQURfREVTVFJVQ1RPUl9JVEVSQVRJT05TLAoKICAgIF9TQ19USFJFQURfS0VZU19NQVgs CgogICAgX1NDX1RIUkVBRF9TVEFDS19NSU4sCgogICAgX1NDX1RIUkVBRF9USFJFQURTX01BWCwK CiAgICBfU0NfVEhSRUFEX0FUVFJfU1RBQ0tBRERSLAoKICAgIF9TQ19USFJFQURfQVRUUl9TVEFD S1NJWkUsCgogICAgX1NDX1RIUkVBRF9QUklPUklUWV9TQ0hFRFVMSU5HLAoKICAgIF9TQ19USFJF QURfUFJJT19JTkhFUklULAoKICAgIF9TQ19USFJFQURfUFJJT19QUk9URUNULAoKICAgIF9TQ19U SFJFQURfUFJPQ0VTU19TSEFSRUQsCgoKICAgIF9TQ19OUFJPQ0VTU09SU19DT05GLAoKICAgIF9T Q19OUFJPQ0VTU09SU19PTkxOLAoKICAgIF9TQ19QSFlTX1BBR0VTLAoKICAgIF9TQ19BVlBIWVNf UEFHRVMsCgogICAgX1NDX0FURVhJVF9NQVgsCgogICAgX1NDX1BBU1NfTUFYLAoKCiAgICBfU0Nf WE9QRU5fVkVSU0lPTiwKCiAgICBfU0NfWE9QRU5fWENVX1ZFUlNJT04sCgogICAgX1NDX1hPUEVO X1VOSVgsCgogICAgX1NDX1hPUEVOX0NSWVBULAoKICAgIF9TQ19YT1BFTl9FTkhfSTE4TiwKCiAg ICBfU0NfWE9QRU5fU0hNLAoKCiAgICBfU0NfMl9DSEFSX1RFUk0sCgogICAgX1NDXzJfQ19WRVJT SU9OLAoKICAgIF9TQ18yX1VQRSwKCgogICAgX1NDX1hPUEVOX1hQRzIsCgogICAgX1NDX1hPUEVO X1hQRzMsCgogICAgX1NDX1hPUEVOX1hQRzQsCgoKICAgIF9TQ19DSEFSX0JJVCwKCiAgICBfU0Nf Q0hBUl9NQVgsCgogICAgX1NDX0NIQVJfTUlOLAoKICAgIF9TQ19JTlRfTUFYLAoKICAgIF9TQ19J TlRfTUlOLAoKICAgIF9TQ19MT05HX0JJVCwKCiAgICBfU0NfV09SRF9CSVQsCgogICAgX1NDX01C X0xFTl9NQVgsCgogICAgX1NDX05aRVJPLAoKICAgIF9TQ19TU0laRV9NQVgsCgogICAgX1NDX1ND SEFSX01BWCwKCiAgICBfU0NfU0NIQVJfTUlOLAoKICAgIF9TQ19TSFJUX01BWCwKCiAgICBfU0Nf U0hSVF9NSU4sCgogICAgX1NDX1VDSEFSX01BWCwKCiAgICBfU0NfVUlOVF9NQVgsCgogICAgX1ND X1VMT05HX01BWCwKCiAgICBfU0NfVVNIUlRfTUFYLAoKCiAgICBfU0NfTkxfQVJHTUFYLAoKICAg IF9TQ19OTF9MQU5HTUFYLAoKICAgIF9TQ19OTF9NU0dNQVgsCgogICAgX1NDX05MX05NQVgsCgog ICAgX1NDX05MX1NFVE1BWCwKCiAgICBfU0NfTkxfVEVYVE1BWAoKICB9OwoKCiAKZW51bQogIHsK ICAgIF9DU19QQVRICQkJIAoKICB9OwoKIyAzOTIgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAz CgoKIApleHRlcm4gbG9uZyBpbnQgX19wYXRoY29uZiAgKF9fY29uc3QgY2hhciAqX19wYXRoLCBp bnQgX19uYW1lKSAgOwpleHRlcm4gbG9uZyBpbnQgcGF0aGNvbmYgIChfX2NvbnN0IGNoYXIgKl9f cGF0aCwgaW50IF9fbmFtZSkgIDsKCiAKZXh0ZXJuIGxvbmcgaW50IF9fZnBhdGhjb25mICAoaW50 IF9fZmQsIGludCBfX25hbWUpICA7CmV4dGVybiBsb25nIGludCBmcGF0aGNvbmYgIChpbnQgX19m ZCwgaW50IF9fbmFtZSkgIDsKCiAKZXh0ZXJuIGxvbmcgaW50IF9fc3lzY29uZiAgKGludCBfX25h bWUpICA7CmV4dGVybiBsb25nIGludCBzeXNjb25mICAoaW50IF9fbmFtZSkgIDsKCgogCmV4dGVy biBzaXplX3QgY29uZnN0ciAgKGludCBfX25hbWUsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19sZW4p ICA7CgoKCiAKZXh0ZXJuIF9fcGlkX3QgX19nZXRwaWQgICh2b2lkKSAgOwpleHRlcm4gX19waWRf dCBnZXRwaWQgICh2b2lkKSAgOwoKIApleHRlcm4gX19waWRfdCBfX2dldHBwaWQgICh2b2lkKSAg OwpleHRlcm4gX19waWRfdCBnZXRwcGlkICAodm9pZCkgIDsKCiAKZXh0ZXJuIF9fcGlkX3QgZ2V0 cGdycCAgKHZvaWQpICA7CgogCgoKZXh0ZXJuIGludCBzZXRwZ2lkICAoX19waWRfdCBfX3BpZCwg X19waWRfdCBfX3BnaWQpICA7CgogCmV4dGVybiBfX3BpZF90IF9fZ2V0cGdpZCAgKF9fcGlkX3Qg X19waWQpICA7CgoKCgoKIAoKCgoKCgoKCgoKCiAKCmV4dGVybiBpbnQgc2V0cGdycCAgKHZvaWQp ICA7CgoKCgoKCgoKCiAKCgpleHRlcm4gX19waWRfdCBfX3NldHNpZCAgKHZvaWQpICA7CmV4dGVy biBfX3BpZF90IHNldHNpZCAgKHZvaWQpICA7CgoKCgoKCiAKZXh0ZXJuIF9fdWlkX3QgX19nZXR1 aWQgICh2b2lkKSAgOwpleHRlcm4gX191aWRfdCBnZXR1aWQgICh2b2lkKSAgOwoKIApleHRlcm4g X191aWRfdCBfX2dldGV1aWQgICh2b2lkKSAgOwpleHRlcm4gX191aWRfdCBnZXRldWlkICAodm9p ZCkgIDsKCiAKZXh0ZXJuIF9fZ2lkX3QgX19nZXRnaWQgICh2b2lkKSAgOwpleHRlcm4gX19naWRf dCBnZXRnaWQgICh2b2lkKSAgOwoKIApleHRlcm4gX19naWRfdCBfX2dldGVnaWQgICh2b2lkKSAg OwpleHRlcm4gX19naWRfdCBnZXRlZ2lkICAodm9pZCkgIDsKCiAKCgpleHRlcm4gaW50IF9fZ2V0 Z3JvdXBzICAoaW50IF9fc2l6ZSwgX19naWRfdCBfX2xpc3RbXSkgIDsKZXh0ZXJuIGludCBnZXRn cm91cHMgIChpbnQgX19zaXplLCBfX2dpZF90IF9fbGlzdFtdKSAgOwoKCgoKCgoKIAoKCgpleHRl cm4gaW50IF9fc2V0dWlkICAoX191aWRfdCBfX3VpZCkgIDsKZXh0ZXJuIGludCBzZXR1aWQgIChf X3VpZF90IF9fdWlkKSAgOwoKCiAKCmV4dGVybiBpbnQgX19zZXRyZXVpZCAgKF9fdWlkX3QgX19y dWlkLCBfX3VpZF90IF9fZXVpZCkgIDsKZXh0ZXJuIGludCBzZXRyZXVpZCAgKF9fdWlkX3QgX19y dWlkLCBfX3VpZF90IF9fZXVpZCkgIDsKCgoKIApleHRlcm4gaW50IHNldGV1aWQgIChfX3VpZF90 IF9fdWlkKSAgOwoKCiAKCgoKZXh0ZXJuIGludCBfX3NldGdpZCAgKF9fZ2lkX3QgX19naWQpICA7 CmV4dGVybiBpbnQgc2V0Z2lkICAoX19naWRfdCBfX2dpZCkgIDsKCgogCgpleHRlcm4gaW50IF9f c2V0cmVnaWQgIChfX2dpZF90IF9fcmdpZCwgX19naWRfdCBfX2VnaWQpICA7CmV4dGVybiBpbnQg c2V0cmVnaWQgIChfX2dpZF90IF9fcmdpZCwgX19naWRfdCBfX2VnaWQpICA7CgoKCiAKZXh0ZXJu IGludCBzZXRlZ2lkICAoX19naWRfdCBfX2dpZCkgIDsKCgoKIAoKCmV4dGVybiBfX3BpZF90IF9f Zm9yayAgKHZvaWQpICA7CmV4dGVybiBfX3BpZF90IGZvcmsgICh2b2lkKSAgOwoKCiAKCgoKZXh0 ZXJuIF9fcGlkX3QgX192Zm9yayAgKHZvaWQpICA7CmV4dGVybiBfX3BpZF90IHZmb3JrICAodm9p ZCkgIDsKCgoKIAoKZXh0ZXJuIGNoYXIgKnR0eW5hbWUgIChpbnQgX19mZCkgIDsKCiAKCmV4dGVy biBpbnQgX190dHluYW1lX3IgIChpbnQgX19mZCwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1Zmxl bikgIDsKZXh0ZXJuIGludCB0dHluYW1lX3IgIChpbnQgX19mZCwgY2hhciAqX19idWYsIHNpemVf dCBfX2J1ZmxlbikgIDsKCiAKCmV4dGVybiBpbnQgX19pc2F0dHkgIChpbnQgX19mZCkgIDsKZXh0 ZXJuIGludCBpc2F0dHkgIChpbnQgX19mZCkgIDsKCgogCgpleHRlcm4gaW50IHR0eXNsb3QgICh2 b2lkKSAgOwoKCgogCmV4dGVybiBpbnQgX19saW5rICAoX19jb25zdCBjaGFyICpfX2Zyb20sIF9f Y29uc3QgY2hhciAqX190bykgIDsKZXh0ZXJuIGludCBsaW5rICAoX19jb25zdCBjaGFyICpfX2Zy b20sIF9fY29uc3QgY2hhciAqX190bykgIDsKCgogCmV4dGVybiBpbnQgX19zeW1saW5rICAoX19j b25zdCBjaGFyICpfX2Zyb20sIF9fY29uc3QgY2hhciAqX190bykgIDsKZXh0ZXJuIGludCBzeW1s aW5rICAoX19jb25zdCBjaGFyICpfX2Zyb20sIF9fY29uc3QgY2hhciAqX190bykgIDsKCiAKCgpl eHRlcm4gaW50IF9fcmVhZGxpbmsgIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgY2hhciAqX19idWYs IHNpemVfdCBfX2xlbikgIDsKZXh0ZXJuIGludCByZWFkbGluayAgKF9fY29uc3QgY2hhciAqX19w YXRoLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fbGVuKSAgOwoKCiAKZXh0ZXJuIGludCBfX3VubGlu ayAgKF9fY29uc3QgY2hhciAqX19uYW1lKSAgOwpleHRlcm4gaW50IHVubGluayAgKF9fY29uc3Qg Y2hhciAqX19uYW1lKSAgOwoKIApleHRlcm4gaW50IF9fcm1kaXIgIChfX2NvbnN0IGNoYXIgKl9f cGF0aCkgIDsKZXh0ZXJuIGludCBybWRpciAgKF9fY29uc3QgY2hhciAqX19wYXRoKSAgOwoKCiAK ZXh0ZXJuIF9fcGlkX3QgdGNnZXRwZ3JwICAoaW50IF9fZmQpICA7CgogCmV4dGVybiBpbnQgdGNz ZXRwZ3JwICAoaW50IF9fZmQsIF9fcGlkX3QgX19wZ3JwX2lkKSAgOwoKCiAKZXh0ZXJuIGNoYXIg KmdldGxvZ2luICAodm9pZCkgIDsKCgoKCgoKCgogCmV4dGVybiBpbnQgc2V0bG9naW4gIChfX2Nv bnN0IGNoYXIgKl9fbmFtZSkgIDsKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJu IGludCBnZXRvcHQgIChpbnQgX19hcmdjLCBjaGFyICpfX2NvbnN0ICogX19hcmd2LAoJCQlfX2Nv bnN0IGNoYXIgKl9fb3B0cykgIDsKZXh0ZXJuIGludCBvcHRlcnI7CmV4dGVybiBpbnQgb3B0aW5k OwpleHRlcm4gaW50IG9wdG9wdDsKZXh0ZXJuIGNoYXIgKm9wdGFyZzsKCgoKCgogCgoKZXh0ZXJu IGludCBfX2dldGhvc3RuYW1lICAoY2hhciAqX19uYW1lLCBzaXplX3QgX19sZW4pICA7CmV4dGVy biBpbnQgZ2V0aG9zdG5hbWUgIChjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikgIDsKCiAKCmV4 dGVybiBpbnQgc2V0aG9zdG5hbWUgIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9fbGVu KSAgOwoKIAoKZXh0ZXJuIGludCBzZXRob3N0aWQgIChsb25nIGludCBfX2lkKSAgOwoKCiAKCgpl eHRlcm4gaW50IGdldGRvbWFpbm5hbWUgIChjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikgIDsK ZXh0ZXJuIGludCBzZXRkb21haW5uYW1lICAoX19jb25zdCBjaGFyICpfX25hbWUsIHNpemVfdCBf X2xlbikgIDsKCgogCmV4dGVybiBpbnQgZnN5bmMgIChpbnQgX19mZCkgIDsKCgogCgoKZXh0ZXJu IGludCB2aGFuZ3VwICAodm9pZCkgIDsKCiAKZXh0ZXJuIGludCByZXZva2UgIChfX2NvbnN0IGNo YXIgKl9fZmlsZSkgIDsKCgogCgoKCgpleHRlcm4gaW50IHByb2ZpbCAgKHVuc2lnbmVkIHNob3J0 IGludCAqX19zYW1wbGVfYnVmZmVyLCBzaXplX3QgX19zaXplLAoJCQlzaXplX3QgX19vZmZzZXQs IHVuc2lnbmVkIGludCBfX3NjYWxlKSAgOwoKCiAKCgpleHRlcm4gaW50IGFjY3QgIChfX2NvbnN0 IGNoYXIgKl9fbmFtZSkgIDsKCiAKCmV4dGVybiBpbnQgY2hyb290ICAoX19jb25zdCBjaGFyICpf X3BhdGgpICA7CgoKIApleHRlcm4gY2hhciAqZ2V0dXNlcnNoZWxsICAodm9pZCkgIDsKZXh0ZXJu IHZvaWQgZW5kdXNlcnNoZWxsICAodm9pZCkgIDsgIApleHRlcm4gdm9pZCBzZXR1c2Vyc2hlbGwg ICh2b2lkKSAgOyAgCgoKIAoKZXh0ZXJuIGNoYXIgKmdldHBhc3MgIChfX2NvbnN0IGNoYXIgKl9f cHJvbXB0KSAgOwoKIAoKCmV4dGVybiBpbnQgZGFlbW9uICAoaW50IF9fbm9jaGRpciwgaW50IF9f bm9jbG9zZSkgIDsKCgoKCgoKIApleHRlcm4gbG9uZyBpbnQgZ2V0aG9zdGlkICAodm9pZCkgIDsK CiAKZXh0ZXJuIGludCBzeW5jICAodm9pZCkgIDsKCgogCgpleHRlcm4gaW50IF9fZ2V0cGFnZXNp emUgICh2b2lkKSAgOwpleHRlcm4gaW50IGdldHBhZ2VzaXplICAodm9pZCkgIDsKCgogCmV4dGVy biBpbnQgdHJ1bmNhdGUgIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19vZmZfdCBfX2xlbmd0aCkg IDsKCiAKZXh0ZXJuIGludCBmdHJ1bmNhdGUgIChpbnQgX19mZCwgX19vZmZfdCBfX2xlbmd0aCkg IDsKCgogCgpleHRlcm4gaW50IF9fZ2V0ZHRhYmxlc2l6ZSAgKHZvaWQpICA7CmV4dGVybiBpbnQg Z2V0ZHRhYmxlc2l6ZSAgKHZvaWQpICA7CgoKCgoKCiAKCmV4dGVybiBpbnQgX19icmsgICh2b2lk ICogIF9fYWRkcikgIDsKZXh0ZXJuIGludCBicmsgICh2b2lkICogIF9fYWRkcikgIDsKCgojIDEg Ii91c3IvbGliL2djYy1saWIvaTY4Ni1saW51eC9wZ2NjLTIuOTEuNjAvaW5jbHVkZS9zdGRkZWYu aCIgMSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtbGludXgvcGdjYy0y LjkxLjYwL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9s aWIvZ2NjLWxpYi9pNjg2LWxpbnV4L3BnY2MtMi45MS42MC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoK IAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCgoKCgoKCgoKCgoKCgoKCgoK CgoKdHlwZWRlZiBpbnQgcHRyZGlmZl90OwoKCgoKCgoKCgogCgoKCgogCgogCgojIDE5MCAiL3Vz ci9saWIvZ2NjLWxpYi9pNjg2LWxpbnV4L3BnY2MtMi45MS42MC9pbmNsdWRlL3N0ZGRlZi5oIiAz CgoKCiAKCgoKCiAKCiMgMjcxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtbGludXgvcGdjYy0yLjkx LjYwL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgojIDI4MyAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LWxp bnV4L3BnY2MtMi45MS42MC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKIyAzMTcgIi91c3Iv bGliL2djYy1saWIvaTY4Ni1saW51eC9wZ2NjLTIuOTEuNjAvaW5jbHVkZS9zdGRkZWYuaCIgMwoK CgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDc2OCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAy IDMKCgogCgoKCmV4dGVybiB2b2lkICogIF9fc2JyayAgKHB0cmRpZmZfdCBfX2RlbHRhKSAgOwpl eHRlcm4gdm9pZCAqICBzYnJrICAocHRyZGlmZl90IF9fZGVsdGEpICA7CgoKCgogCgoKCgoKCgoK CmV4dGVybiBsb25nIGludCBzeXNjYWxsICAobG9uZyBpbnQgX19zeXNubywgLi4uKSAgOwoKCgoK CgogCgoKCiAKCgoKCgoKCgpleHRlcm4gaW50IGxvY2tmICAoaW50IF9fZmQsIGludCBfX2NtZCwg X19vZmZfdCBfX2xlbikgIDsKCgoKIyA4MzMgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwoKCgog CgpleHRlcm4gaW50IGZkYXRhc3luYyAgKGludCBfX2ZpbGRlcykgIDsKCgoKIAoKIyA4NjEgIi91 c3IvaW5jbHVkZS91bmlzdGQuaCIgMwoKCiAKCgojIDI3ICIuLi9rcGF0aHNlYS9jLXVuaXN0ZC5o IiAyCgoKCiMgMSAiLi4va3BhdGhzZWEvYy1zdGQuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKIyAx MDIgIi4uL2twYXRoc2VhL2Mtc3RkLmgiCgojIDMwICIuLi9rcGF0aHNlYS9jLXVuaXN0ZC5oIiAy CgoKIAoKCgoKCgogCgoKCgoKCgoKCgoKCgoKIyAzMyAiLi4va3BhdGhzZWEvYy1zdGQuaCIgMgoK CgojIDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoK CgoKCgoKIAoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1saW51eC9wZ2NjLTIuOTEuNjAv aW5jbHVkZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL2xpYi9nY2MtbGliL2k2 ODYtbGludXgvcGdjYy0yLjkxLjYwL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgog CgoKIyA2MSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LWxpbnV4L3BnY2MtMi45MS42MC9pbmNsdWRl L3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCiMg MTMxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtbGludXgvcGdjYy0yLjkxLjYwL2luY2x1ZGUvc3Rk ZGVmLmgiIDMKCgogCgogCgoKIyAxODggIi91c3IvbGliL2djYy1saWIvaTY4Ni1saW51eC9wZ2Nj LTIuOTEuNjAvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCiAKCgoKCiAKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBsb25nIGlu dCB3Y2hhcl90OwoKCgoKCgoKCgoKCgoKCgoKCiMgMjgzICIvdXNyL2xpYi9nY2MtbGliL2k2ODYt bGludXgvcGdjYy0yLjkxLjYwL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgogCgojIDMxNyAiL3Vz ci9saWIvZ2NjLWxpYi9pNjg2LWxpbnV4L3BnY2MtMi45MS42MC9pbmNsdWRlL3N0ZGRlZi5oIiAz CgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMzIgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIg MiAzCgoKIAoKIAp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBxdW90OwkJCSAKICAgIGludCBy ZW07CQkJIAogIH0gZGl2X3Q7CgogCnR5cGVkZWYgc3RydWN0CiAgewogICAgbG9uZyBpbnQgcXVv dDsJCSAKICAgIGxvbmcgaW50IHJlbTsJCSAKICB9IGxkaXZfdDsKCgoKCgoKCgoKCgogCgoKCiAK CgoKCgogCgpleHRlcm4gaW50IF9fY3R5cGVfZ2V0X21iX2N1cl9tYXggICh2b2lkKSAgOwoKCiAK ZXh0ZXJuIGRvdWJsZSBhdG9mICAoX19jb25zdCBjaGFyICpfX25wdHIpICA7CiAKZXh0ZXJuIGlu dCBhdG9pICAoX19jb25zdCBjaGFyICpfX25wdHIpICA7CiAKZXh0ZXJuIGxvbmcgaW50IGF0b2wg IChfX2NvbnN0IGNoYXIgKl9fbnB0cikgIDsKCgogCmV4dGVybiBsb25nIGxvbmcgaW50IGF0b2xs ICAoX19jb25zdCBjaGFyICpfX25wdHIpICA7CgoKIApleHRlcm4gZG91YmxlIHN0cnRvZCAgKF9f Y29uc3QgY2hhciAqX19ucHRyLCBjaGFyICoqX19lbmRwdHIpICA7CgoKCgoKCgogCmV4dGVybiBs b25nIGludCBzdHJ0b2wgIChfX2NvbnN0IGNoYXIgKl9fbnB0ciwgY2hhciAqKl9fZW5kcHRyLAoJ CQkgICAgIGludCBfX2Jhc2UpICA7CiAKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwg IChfX2NvbnN0IGNoYXIgKl9fbnB0ciwKCQkJCSAgICAgICBjaGFyICoqX19lbmRwdHIsIGludCBf X2Jhc2UpICA7CgoKIApleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b3EgIChfX2NvbnN0IGNoYXIg Kl9fbnB0ciwgY2hhciAqKl9fZW5kcHRyLAoJCQkJICBpbnQgX19iYXNlKSAgOwogCmV4dGVybiB1 bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdXEgIChfX2NvbnN0IGNoYXIgKl9fbnB0ciwKCQkJ CQkgICAgY2hhciAqKl9fZW5kcHRyLCBpbnQgX19iYXNlKSAgOwoKCgogCgogCmV4dGVybiBsb25n IGxvbmcgaW50IHN0cnRvbGwgIChfX2NvbnN0IGNoYXIgKl9fbnB0ciwgY2hhciAqKl9fZW5kcHRy LAoJCQkJICAgaW50IF9fYmFzZSkgIDsKIApleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBz dHJ0b3VsbCAgKF9fY29uc3QgY2hhciAqX19ucHRyLAoJCQkJCSAgICAgY2hhciAqKl9fZW5kcHRy LCBpbnQgX19iYXNlKSAgOwoKCgoKIAoKCmV4dGVybiBkb3VibGUgX19zdHJ0b2RfaW50ZXJuYWwg IChfX2NvbnN0IGNoYXIgKl9fbnB0ciwKCQkJCSAgICAgIGNoYXIgKipfX2VuZHB0ciwgaW50IF9f Z3JvdXApICA7CmV4dGVybiBmbG9hdCBfX3N0cnRvZl9pbnRlcm5hbCAgKF9fY29uc3QgY2hhciAq X19ucHRyLCBjaGFyICoqX19lbmRwdHIsCgkJCQkgICAgIGludCBfX2dyb3VwKSAgOwpleHRlcm4g bG9uZyBkb3VibGUgIF9fc3RydG9sZF9pbnRlcm5hbCAgKF9fY29uc3QgY2hhciAqX19ucHRyLAoJ CQkJCQljaGFyICoqX19lbmRwdHIsIGludCBfX2dyb3VwKSAgOwpleHRlcm4gbG9uZyBpbnQgX19z dHJ0b2xfaW50ZXJuYWwgIChfX2NvbnN0IGNoYXIgKl9fbnB0ciwgY2hhciAqKl9fZW5kcHRyLAoJ CQkJCWludCBfX2Jhc2UsIGludCBfX2dyb3VwKSAgOwpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQg X19zdHJ0b3VsX2ludGVybmFsICAoX19jb25zdCBjaGFyICpfX25wdHIsCgkJCQkJCSAgY2hhciAq Kl9fZW5kcHRyLCBpbnQgX19iYXNlLAoJCQkJCQkgIGludCBfX2dyb3VwKSAgOwoKZXh0ZXJuIGxv bmcgbG9uZyBpbnQgX19zdHJ0b3FfaW50ZXJuYWwgIChfX2NvbnN0IGNoYXIgKl9fbnB0ciwKCQkJ CQkgICAgIGNoYXIgKipfX2VuZHB0ciwgaW50IF9fYmFzZSwKCQkJCQkgICAgIGludCBfX2dyb3Vw KSAgOwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3N0cnRvdXFfaW50ZXJuYWwgIChf X2NvbnN0IGNoYXIgKl9fbnB0ciwKCQkJCQkJICAgICAgIGNoYXIgKipfX2VuZHB0ciwKCQkJCQkJ ICAgICAgIGludCBfX2Jhc2UsCgkJCQkJCSAgICAgICBpbnQgX19ncm91cCkgIDsKCgoKIAoKZXh0 ZXJuIF9faW5saW5lIGRvdWJsZSBzdHJ0b2QgKF9fY29uc3QgY2hhciAqX19ucHRyLCBjaGFyICoq X19lbmRwdHIpCnsgcmV0dXJuIF9fc3RydG9kX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAw KTsgfQpleHRlcm4gX19pbmxpbmUgbG9uZyBpbnQgc3RydG9sIChfX2NvbnN0IGNoYXIgKl9fbnB0 ciwKCQkJCSBjaGFyICoqX19lbmRwdHIsIGludCBfX2Jhc2UpCnsgcmV0dXJuIF9fc3RydG9sX2lu dGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOyB9CmV4dGVybiBfX2lubGluZSB1 bnNpZ25lZCBsb25nIGludCBzdHJ0b3VsIChfX2NvbnN0IGNoYXIgKl9fbnB0ciwKCQkJCQkgICBj aGFyICoqX19lbmRwdHIsIGludCBfX2Jhc2UpCnsgcmV0dXJuIF9fc3RydG91bF9pbnRlcm5hbCAo X19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsgfQoKCgoKCgoKCgpleHRlcm4gX19pbmxpbmUg bG9uZyBsb25nIGludCBzdHJ0b3EgKF9fY29uc3QgY2hhciAqX19ucHRyLCBjaGFyICoqX19lbmRw dHIsCgkJCQkgICAgICBpbnQgX19iYXNlKQp7IHJldHVybiBfX3N0cnRvcV9pbnRlcm5hbCAoX19u cHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsgfQpleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9u ZyBsb25nIGludCBzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fbnB0ciwKCQkJCQkJY2hhciAqKl9f ZW5kcHRyLCBpbnQgX19iYXNlKQp7IHJldHVybiBfX3N0cnRvdXFfaW50ZXJuYWwgKF9fbnB0ciwg X19lbmRwdHIsIF9fYmFzZSwgMCk7IH0KCgoKZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQg c3RydG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIsIGNoYXIgKipfX2VuZHB0ciwKCQkJCSAgICAg ICBpbnQgX19iYXNlKQp7IHJldHVybiBfX3N0cnRvcV9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0 ciwgX19iYXNlLCAwKTsgfQpleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGludCBz dHJ0b3VsbCAoX19jb25zdCBjaGFyICpfX25wdHIsCgkJCQkJCSBjaGFyICoqX19lbmRwdHIsIGlu dCBfX2Jhc2UpCnsgcmV0dXJuIF9fc3RydG91cV9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwg X19iYXNlLCAwKTsgfQoKCmV4dGVybiBfX2lubGluZSBkb3VibGUgYXRvZiAoX19jb25zdCBjaGFy ICpfX25wdHIpCnsgcmV0dXJuIHN0cnRvZCAoX19ucHRyLCAoY2hhciAqKikgKCh2b2lkICopMCkg KTsgfQpleHRlcm4gX19pbmxpbmUgaW50IGF0b2kgKF9fY29uc3QgY2hhciAqX19ucHRyKQp7IHJl dHVybiAoaW50KSBzdHJ0b2wgKF9fbnB0ciwgKGNoYXIgKiopICgodm9pZCAqKTApICwgMTApOyB9 CmV4dGVybiBfX2lubGluZSBsb25nIGludCBhdG9sIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKeyBy ZXR1cm4gc3RydG9sIChfX25wdHIsIChjaGFyICoqKSAoKHZvaWQgKikwKSAsIDEwKTsgfQoKCmV4 dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50IGF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikK eyByZXR1cm4gc3RydG9sbCAoX19ucHRyLCAoY2hhciAqKikgKCh2b2lkICopMCkgLCAxMCk7IH0K CgoKCgogCgoKZXh0ZXJuIGNoYXIgKmw2NGEgIChsb25nIGludCBfX24pICA7CgogCmV4dGVybiBs b25nIGludCBhNjRsICAoX19jb25zdCBjaGFyICpfX3MpICA7CgoKCgogCgoKCiAKZXh0ZXJuIGlu dDMyX3QgX19yYW5kb20gICh2b2lkKSAgOwpleHRlcm4gaW50MzJfdCByYW5kb20gICh2b2lkKSAg OwoKIApleHRlcm4gdm9pZCBfX3NyYW5kb20gICh1bnNpZ25lZCBpbnQgX19zZWVkKSAgOwpleHRl cm4gdm9pZCBzcmFuZG9tICAodW5zaWduZWQgaW50IF9fc2VlZCkgIDsKCiAKCgoKZXh0ZXJuIHZv aWQgKiAgX19pbml0c3RhdGUgICh1bnNpZ25lZCBpbnQgX19zZWVkLCB2b2lkICogIF9fc3RhdGVi dWYsCgkJCQkgc2l6ZV90IF9fc3RhdGVsZW4pICA7CmV4dGVybiB2b2lkICogIGluaXRzdGF0ZSAg KHVuc2lnbmVkIGludCBfX3NlZWQsIHZvaWQgKiAgX19zdGF0ZWJ1ZiwKCQkJICAgICAgIHNpemVf dCBfX3N0YXRlbGVuKSAgOwoKIAoKZXh0ZXJuIHZvaWQgKiAgX19zZXRzdGF0ZSAgKHZvaWQgKiAg X19zdGF0ZWJ1ZikgIDsKZXh0ZXJuIHZvaWQgKiAgc2V0c3RhdGUgICh2b2lkICogIF9fc3RhdGVi dWYpICA7CgoKCiAKCgoKc3RydWN0IHJhbmRvbV9kYXRhCiAgewogICAgaW50MzJfdCAqZnB0cjsJ CSAKICAgIGludDMyX3QgKnJwdHI7CQkgCiAgICBpbnQzMl90ICpzdGF0ZTsJCSAKICAgIGludCBy YW5kX3R5cGU7CQkgCiAgICBpbnQgcmFuZF9kZWc7CQkgCiAgICBpbnQgcmFuZF9zZXA7CQkgCiAg ICBpbnQzMl90ICplbmRfcHRyOwkJIAogIH07CgpleHRlcm4gaW50IF9fcmFuZG9tX3IgIChzdHJ1 Y3QgcmFuZG9tX2RhdGEgKl9fYnVmLCBpbnQzMl90ICpfX3Jlc3VsdCkgIDsKZXh0ZXJuIGludCBy YW5kb21fciAgKHN0cnVjdCByYW5kb21fZGF0YSAqX19idWYsIGludDMyX3QgKl9fcmVzdWx0KSAg OwoKZXh0ZXJuIGludCBfX3NyYW5kb21fciAgKHVuc2lnbmVkIGludCBfX3NlZWQsIHN0cnVjdCBy YW5kb21fZGF0YSAqX19idWYpICA7CmV4dGVybiBpbnQgc3JhbmRvbV9yICAodW5zaWduZWQgaW50 IF9fc2VlZCwgc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1ZikgIDsKCmV4dGVybiBpbnQgX19pbml0 c3RhdGVfciAgKHVuc2lnbmVkIGludCBfX3NlZWQsIHZvaWQgKiAgX19zdGF0ZWJ1ZiwKCQkJICAg ICAgIHNpemVfdCBfX3N0YXRlbGVuLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKSAgOwpleHRl cm4gaW50IGluaXRzdGF0ZV9yICAodW5zaWduZWQgaW50IF9fc2VlZCwgdm9pZCAqICBfX3N0YXRl YnVmLAoJCQkgICAgIHNpemVfdCBfX3N0YXRlbGVuLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVm KSAgOwoKZXh0ZXJuIGludCBfX3NldHN0YXRlX3IgICh2b2lkICogIF9fc3RhdGVidWYsIHN0cnVj dCByYW5kb21fZGF0YSAqX19idWYpICA7CmV4dGVybiBpbnQgc2V0c3RhdGVfciAgKHZvaWQgKiAg X19zdGF0ZWJ1Ziwgc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1ZikgIDsKCgoKCiAKZXh0ZXJuIGlu dCByYW5kICAodm9pZCkgIDsKIApleHRlcm4gdm9pZCBzcmFuZCAgKHVuc2lnbmVkIGludCBfX3Nl ZWQpICA7CgoKIApleHRlcm4gaW50IF9fcmFuZF9yICAodW5zaWduZWQgaW50ICpfX3NlZWQpICA7 CmV4dGVybiBpbnQgcmFuZF9yICAodW5zaWduZWQgaW50ICpfX3NlZWQpICA7CgoKCgogCgogCmV4 dGVybiBkb3VibGUgZHJhbmQ0OCAgKHZvaWQpICA7CmV4dGVybiBkb3VibGUgZXJhbmQ0OCAgKHVu c2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSAgOwoKIApleHRlcm4gbG9uZyBscmFuZDQ4ICAo dm9pZCkgIDsKZXh0ZXJuIGxvbmcgbnJhbmQ0OCAgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJp WzNdKSAgOwoKIApleHRlcm4gbG9uZyBtcmFuZDQ4ICAodm9pZCkgIDsKZXh0ZXJuIGxvbmcganJh bmQ0OCAgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSAgOwoKIApleHRlcm4gdm9pZCBz cmFuZDQ4ICAobG9uZyBfX3NlZWR2YWwpICA7CmV4dGVybiB1bnNpZ25lZCBzaG9ydCBpbnQgKnNl ZWQ0OCAgKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10pICA7CmV4dGVybiB2b2lkIGxj b25nNDggICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSkgIDsKCiAKc3RydWN0IGRyYW5k NDhfZGF0YQogIHsKICAgIHVuc2lnbmVkIHNob3J0IGludCB4WzNdOwkgCiAgICB1bnNpZ25lZCBz aG9ydCBpbnQgYVszXTsJIAogICAgdW5zaWduZWQgc2hvcnQgaW50IGM7CSAKICAgIHVuc2lnbmVk IHNob3J0IGludCBvbGRfeFszXTsgIAogICAgaW50IGluaXQ7CQkJIAogIH07CgoKIApleHRlcm4g aW50IGRyYW5kNDhfciAgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyLCBkb3VibGUgKl9f cmVzdWx0KSAgOwpleHRlcm4gaW50IGVyYW5kNDhfciAgKHVuc2lnbmVkIHNob3J0IGludCBfX3hz dWJpWzNdLAoJCQkgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlciwgZG91YmxlICpfX3Jl c3VsdCkgIDsKCiAKZXh0ZXJuIGludCBscmFuZDQ4X3IgIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpf X2J1ZmZlciwgbG9uZyAqX19yZXN1bHQpICA7CmV4dGVybiBpbnQgbnJhbmQ0OF9yICAodW5zaWdu ZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCgkJCSAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVm ZmVyLCBsb25nICpfX3Jlc3VsdCkgIDsKCiAKZXh0ZXJuIGludCBtcmFuZDQ4X3IgIChzdHJ1Y3Qg ZHJhbmQ0OF9kYXRhICpfX2J1ZmZlciwgbG9uZyAqX19yZXN1bHQpICA7CmV4dGVybiBpbnQganJh bmQ0OF9yICAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCgkJCSAgIHN0cnVjdCBkcmFu ZDQ4X2RhdGEgKl9fYnVmZmVyLCBsb25nICpfX3Jlc3VsdCkgIDsKCiAKZXh0ZXJuIGludCBzcmFu ZDQ4X3IgIChsb25nIF9fc2VlZHZhbCwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpICA7 CmV4dGVybiBpbnQgc2VlZDQ4X3IgICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdLAoJ CQkgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSAgOwpleHRlcm4gaW50IGxjb25nNDhf ciAgKHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddLAoJCQkgICBzdHJ1Y3QgZHJhbmQ0OF9k YXRhICpfX2J1ZmZlcikgIDsKCgogCmV4dGVybiBpbnQgX19kcmFuZDQ4X2l0ZXJhdGUgICh1bnNp Z25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKCQkJCSAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9f YnVmZmVyKSAgOwoKCgogCmV4dGVybiB2b2lkICogIG1hbGxvYyAgKHNpemVfdCBfX3NpemUpICA7 CiAKCmV4dGVybiB2b2lkICogIHJlYWxsb2MgICh2b2lkICogIF9fcHRyLCBzaXplX3QgX19zaXpl KSAgOwogCmV4dGVybiB2b2lkICogIGNhbGxvYyAgKHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19z aXplKSAgOwogCmV4dGVybiB2b2lkIGZyZWUgICh2b2lkICogIF9fcHRyKSAgOwoKCiAKZXh0ZXJu IHZvaWQgY2ZyZWUgICh2b2lkICogIF9fcHRyKSAgOwoKCgojIDEgIi91c3IvaW5jbHVkZS9hbGxv Y2EuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIv aTY4Ni1saW51eC9wZ2NjLTIuOTEuNjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAKCgoj IDE5ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtbGludXgvcGdjYy0yLjkxLjYwL2luY2x1ZGUvc3Rk ZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LWxp bnV4L3BnY2MtMi45MS42MC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoK CgoKCgoKCgoKIAoKCgoKCiAKCiAKCiMgMTMxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtbGludXgv cGdjYy0yLjkxLjYwL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgogCgoKIyAxODggIi91c3IvbGli L2djYy1saWIvaTY4Ni1saW51eC9wZ2NjLTIuOTEuNjAvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoK CiAKCgoKCiAKCiMgMjcxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtbGludXgvcGdjYy0yLjkxLjYw L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgojIDI4MyAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LWxpbnV4 L3BnY2MtMi45MS42MC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKIyAzMTcgIi91c3IvbGli L2djYy1saWIvaTY4Ni1saW51eC9wZ2NjLTIuOTEuNjAvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoK IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDI1ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDIgMwoK CiAKCiAKCgoKIApleHRlcm4gdm9pZCAqICBfX2FsbG9jYSAgKHNpemVfdCBfX3NpemUpICA7CmV4 dGVybiB2b2lkICogIGFsbG9jYSAgKHNpemVfdCBfX3NpemUpICA7CgoKCgoKCiAKCgojIDM2MCAi L3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCiAKZXh0ZXJuIHZvaWQgKiAgdmFsbG9jICAo c2l6ZV90IF9fc2l6ZSkgIDsKCgoKIApleHRlcm4gdm9pZCBhYm9ydCAgKHZvaWQpICAgX19hdHRy aWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCiAKZXh0ZXJuIGludCBhdGV4aXQgICh2b2lkICgq X19mdW5jKSAodm9pZCkpICA7CgoKIAoKZXh0ZXJuIGludCBfX29uX2V4aXQgICh2b2lkICgqX19m dW5jKSAoaW50IF9fc3RhdHVzLCB2b2lkICogIF9fYXJnKSwKCQkJICAgdm9pZCAqICBfX2FyZykg IDsKZXh0ZXJuIGludCBvbl9leGl0ICAodm9pZCAoKl9fZnVuYykgKGludCBfX3N0YXR1cywgdm9p ZCAqICBfX2FyZyksCgkJCSB2b2lkICogIF9fYXJnKSAgOwoKCiAKCgpleHRlcm4gdm9pZCBleGl0 ICAoaW50IF9fc3RhdHVzKSAgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgogCmV4 dGVybiBjaGFyICpnZXRlbnYgIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgIDsKCiAKCmV4dGVybiBj aGFyICpfX3NlY3VyZV9nZXRlbnYgIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgIDsKCgogCiAKCmV4 dGVybiBpbnQgcHV0ZW52ICAoX19jb25zdCBjaGFyICpfX3N0cmluZykgIDsKCgoKIAoKZXh0ZXJu IGludCBzZXRlbnYgIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgX19jb25zdCBjaGFyICpfX3ZhbHVl LAoJCQlpbnQgX19yZXBsYWNlKSAgOwoKIApleHRlcm4gdm9pZCB1bnNldGVudiAgKF9fY29uc3Qg Y2hhciAqX19uYW1lKSAgOwoKCgogCgoKZXh0ZXJuIGludCBfX2NsZWFyZW52ICAodm9pZCkgIDsK ZXh0ZXJuIGludCBjbGVhcmVudiAgKHZvaWQpICA7CgoKCgogCgoKCmV4dGVybiBjaGFyICpta3Rl bXAgIChjaGFyICpfX3RlbXBsYXRlKSAgOwoKIAoKCgoKZXh0ZXJuIGludCBta3N0ZW1wICAoY2hh ciAqX190ZW1wbGF0ZSkgIDsKCgoKIApleHRlcm4gaW50IHN5c3RlbSAgKF9fY29uc3QgY2hhciAq X19jb21tYW5kKSAgOwoKCgoKCgoKCgoKIAoKCgoKCmV4dGVybiBjaGFyICpyZWFscGF0aCAgKF9f Y29uc3QgY2hhciAqX19uYW1lLCBjaGFyICpfX3Jlc29sdmVkKSAgOwoKCgogCgoKdHlwZWRlZiBp bnQgKCpfX2NvbXBhcl9mbl90KSAgKF9fY29uc3Qgdm9pZCAqICwgX19jb25zdCB2b2lkICogKSAg OwoKCgoKCgogCgpleHRlcm4gdm9pZCAqICBic2VhcmNoICAoX19jb25zdCB2b2lkICogIF9fa2V5 LCBfX2NvbnN0IHZvaWQgKiAgX19iYXNlLAoJCQkgICAgIHNpemVfdCBfX25tZW1iLCBzaXplX3Qg X19zaXplLAoJCQkgICAgIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpICA7CgogCgpleHRlcm4gdm9p ZCBxc29ydCAgKHZvaWQgKiAgX19iYXNlLCBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwK CQkJX19jb21wYXJfZm5fdCBfX2NvbXBhcikgIDsKCgogCmV4dGVybiBpbnQgYWJzICAoaW50IF9f eCkgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsb25nIGludCBsYWJzICAo bG9uZyBpbnQgX194KSAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgogCgogCmV4 dGVybiBkaXZfdCBkaXYgIChpbnQgX19udW1lciwgaW50IF9fZGVub20pICAgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOwpleHRlcm4gbGRpdl90IGxkaXYgIChsb25nIGludCBfX251bWVyLCBs b25nIGludCBfX2Rlbm9tKSAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoKIAoK CiAKCgpleHRlcm4gY2hhciAqZWN2dCAgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGlu dCAqX19kZWNwdCwKCQkJaW50ICpfX3NpZ24pICA7CgogCgoKZXh0ZXJuIGNoYXIgKmZjdnQgIChk b3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fZGVjcHQsCgkJCWludCAqX19zaWdu KSAgOwoKIAoKCmV4dGVybiBjaGFyICpnY3Z0ICAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdp dCwgY2hhciAqX19idWYpICA7CgogCmV4dGVybiBjaGFyICpxZWN2dCAgKGxvbmcgZG91YmxlICBf X3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19kZWNwdCwKCQkJIGludCAqX19zaWduKSAgOwpl eHRlcm4gY2hhciAqcWZjdnQgIChsb25nIGRvdWJsZSAgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBp bnQgKl9fZGVjcHQsCgkJCSBpbnQgKl9fc2lnbikgIDsKZXh0ZXJuIGNoYXIgKnFnY3Z0ICAobG9u ZyBkb3VibGUgIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpICA7CgoKCiAKCmV4 dGVybiBpbnQgZWN2dF9yICAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX2Rl Y3B0LAoJCQlpbnQgKl9fc2lnbiwgY2hhciAqX19idWYsIHNpemVfdCBfX2xlbikgIDsKZXh0ZXJu IGludCBmY3Z0X3IgIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fZGVjcHQs CgkJCWludCAqX19zaWduLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fbGVuKSAgOwoKZXh0ZXJuIGlu dCBxZWN2dF9yICAobG9uZyBkb3VibGUgIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX2Rl Y3B0LAoJCQkgaW50ICpfX3NpZ24sIGNoYXIgKl9fYnVmLCBzaXplX3QgX19sZW4pICA7CmV4dGVy biBpbnQgcWZjdnRfciAgKGxvbmcgZG91YmxlICBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAq X19kZWNwdCwKCQkJIGludCAqX19zaWduLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fbGVuKSAgOwoK CgoKIAoKZXh0ZXJuIGludCBtYmxlbiAgKF9fY29uc3QgY2hhciAqX19zLCBzaXplX3QgX19uKSAg OwogCgpleHRlcm4gaW50IG1idG93YyAgKHdjaGFyX3QgKl9fcHdjLCBfX2NvbnN0IGNoYXIgKl9f cywgc2l6ZV90IF9fbikgIDsKIAoKZXh0ZXJuIGludCB3Y3RvbWIgIChjaGFyICpfX3MsIHdjaGFy X3QgX193Y2hhcikgIDsKCgogCmV4dGVybiBzaXplX3QgbWJzdG93Y3MgICh3Y2hhcl90ICpfX3B3 Y3MsIF9fY29uc3QgY2hhciAqX19zLCBzaXplX3QgX19uKSAgOwogCmV4dGVybiBzaXplX3Qgd2Nz dG9tYnMgIChjaGFyICpfX3MsIF9fY29uc3Qgd2NoYXJfdCAqX19wd2NzLCBzaXplX3QgX19uKSAg OwoKCgogCgoKCmV4dGVybiBpbnQgcnBtYXRjaCAgKF9fY29uc3QgY2hhciAqX19yZXNwb25zZSkg IDsKCgoKIyA1ODIgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwoKCgoKCgoKCgoKIAoKCiMgMzYg Ii4uL2twYXRoc2VhL2Mtc3RkLmgiIDIKCiAKCgoKCgoKCgoKCgojIDU4ICIuLi9rcGF0aHNlYS9j LXN0ZC5oIgoKCgogCgoKIyA3MiAiLi4va3BhdGhzZWEvYy1zdGQuaCIKCgogCiMgMSAiLi4va3Bh dGhzZWEvYy1tZW1zdHIuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgojIDEgIi91c3Iv aW5jbHVkZS9zdHJpbmcuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKIAoKIAoK CiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LWxpbnV4L3BnY2MtMi45MS42MC9pbmNsdWRlL3N0 ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkgIi91c3IvbGliL2djYy1saWIvaTY4Ni1saW51eC9w Z2NjLTIuOTEuNjAvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIv dXNyL2xpYi9nY2MtbGliL2k2ODYtbGludXgvcGdjYy0yLjkxLjYwL2luY2x1ZGUvc3RkZGVmLmgi IDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKIyAxMzEgIi91c3Iv bGliL2djYy1saWIvaTY4Ni1saW51eC9wZ2NjLTIuOTEuNjAvaW5jbHVkZS9zdGRkZWYuaCIgMwoK CiAKCiAKCgojIDE4OCAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LWxpbnV4L3BnY2MtMi45MS42MC9p bmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKIAoKCgoKIAoKIyAyNzEgIi91c3IvbGliL2djYy1saWIv aTY4Ni1saW51eC9wZ2NjLTIuOTEuNjAvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiMgMjgzICIvdXNy L2xpYi9nY2MtbGliL2k2ODYtbGludXgvcGdjYy0yLjkxLjYwL2luY2x1ZGUvc3RkZGVmLmgiIDMK CgogCgogCgojIDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LWxpbnV4L3BnY2MtMi45MS42MC9p bmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMzMgIi91c3Iv aW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKCiAKZXh0ZXJuIHZvaWQgKiAgbWVtY3B5ICAodm9pZCAq ICBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqICBfX3NyYywKCQkJICAgIHNpemVfdCBfX24pICA7CiAK CmV4dGVybiB2b2lkICogIG1lbW1vdmUgICh2b2lkICogIF9fZGVzdCwgX19jb25zdCB2b2lkICog IF9fc3JjLAoJCQkgICAgIHNpemVfdCBfX24pICA7CgogCgoKZXh0ZXJuIHZvaWQgKiAgX19tZW1j Y3B5ICAodm9pZCAqICBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqICBfX3NyYywKCQkJICAgICAgIGlu dCBfX2MsIHNpemVfdCBfX24pICA7CgpleHRlcm4gdm9pZCAqICBtZW1jY3B5ICAodm9pZCAqICBf X2Rlc3QsIF9fY29uc3Qgdm9pZCAqICBfX3NyYywKCQkJICAgICBpbnQgX19jLCBzaXplX3QgX19u KSAgOwoKCgogCmV4dGVybiB2b2lkICogIG1lbXNldCAgKHZvaWQgKiAgX19zLCBpbnQgX19jLCBz aXplX3QgX19uKSAgOwoKIApleHRlcm4gaW50IG1lbWNtcCAgKF9fY29uc3Qgdm9pZCAqICBfX3Mx LCBfX2NvbnN0IHZvaWQgKiAgX19zMiwKCQkJc2l6ZV90IF9fbikgIDsKCiAKZXh0ZXJuIHZvaWQg KiAgbWVtY2hyICAoX19jb25zdCB2b2lkICogIF9fcywgaW50IF9fYywgc2l6ZV90IF9fbikgIDsK CgogCmV4dGVybiBjaGFyICpzdHJjcHkgIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19z cmMpICA7CiAKZXh0ZXJuIGNoYXIgKnN0cm5jcHkgIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hh ciAqX19zcmMsIHNpemVfdCBfX24pICA7CgogCmV4dGVybiBjaGFyICpzdHJjYXQgIChjaGFyICpf X2Rlc3QsIF9fY29uc3QgY2hhciAqX19zcmMpICA7CiAKZXh0ZXJuIGNoYXIgKnN0cm5jYXQgIChj aGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19zcmMsIHNpemVfdCBfX24pICA7CgogCmV4dGVy biBpbnQgc3RyY21wICAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpICA7 CiAKZXh0ZXJuIGludCBzdHJuY21wICAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIg Kl9fczIsIHNpemVfdCBfX24pICA7CgogCmV4dGVybiBpbnQgc3RyY29sbCAgKF9fY29uc3QgY2hh ciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKSAgOwogCmV4dGVybiBzaXplX3Qgc3RyeGZybSAg KGNoYXIgKl9fZGVzdCwgX19jb25zdCBjaGFyICpfX3NyYywgc2l6ZV90IF9fbikgIDsKCgogCmV4 dGVybiBjaGFyICpfX3N0cmR1cCAgKF9fY29uc3QgY2hhciAqX19zKSAgOwpleHRlcm4gY2hhciAq c3RyZHVwICAoX19jb25zdCBjaGFyICpfX3MpICA7CgoKIAoKCmV4dGVybiBjaGFyICpfX3N0cm5k dXAgIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19uKSAgOwoKCgoKIyAxMjEgIi91 c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCiAKZXh0ZXJuIGNoYXIgKnN0cmNociAgKF9fY29uc3Qg Y2hhciAqX19zLCBpbnQgX19jKSAgOwogCmV4dGVybiBjaGFyICpzdHJyY2hyICAoX19jb25zdCBj aGFyICpfX3MsIGludCBfX2MpICA7CgogCgpleHRlcm4gc2l6ZV90IHN0cmNzcG4gIChfX2NvbnN0 IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX3JlamVjdCkgIDsKIAoKZXh0ZXJuIHNpemVfdCBz dHJzcG4gIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkgIDsKIApl eHRlcm4gY2hhciAqc3RycGJyayAgKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9f YWNjZXB0KSAgOwogCmV4dGVybiBjaGFyICpzdHJzdHIgIChfX2NvbnN0IGNoYXIgKl9faGF5c3Rh Y2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpICA7CiAKZXh0ZXJuIGNoYXIgKnN0cnRvayAgKGNo YXIgKl9fcywgX19jb25zdCBjaGFyICpfX2RlbGltKSAgOwoKCiAKCmV4dGVybiBjaGFyICpzdHJ0 b2tfciAgKGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2RlbGltLAoJCQkgICAgY2hhciAqKl9f c2F2ZV9wdHIpICA7CgoKCgoKCgoKCgoKIApleHRlcm4gc2l6ZV90IHN0cmxlbiAgKF9fY29uc3Qg Y2hhciAqX19zKSAgOwoKIyAxNzMgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCgogCmV4dGVy biBjaGFyICpzdHJlcnJvciAgKGludCBfX2Vycm51bSkgIDsKCiAKCmV4dGVybiBjaGFyICpfX3N0 cmVycm9yX3IgIChpbnQgX19lcnJudW0sIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pICA7 CmV4dGVybiBjaGFyICpzdHJlcnJvcl9yICAoaW50IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6 ZV90IF9fYnVmbGVuKSAgOwoKCgogCmV4dGVybiB2b2lkIGJjb3B5ICAoX19jb25zdCB2b2lkICog IF9fc3JjLCB2b2lkICogIF9fZGVzdCwgc2l6ZV90IF9fbikgIDsKCiAKZXh0ZXJuIHZvaWQgYnpl cm8gICh2b2lkICogIF9fcywgc2l6ZV90IF9fbikgIDsKCiAKZXh0ZXJuIGludCBiY21wICAoX19j b25zdCB2b2lkICogIF9fczEsIF9fY29uc3Qgdm9pZCAqICBfX3MyLCBzaXplX3QgX19uKSAgOwoK IApleHRlcm4gY2hhciAqaW5kZXggIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgIDsKCiAK ZXh0ZXJuIGNoYXIgKnJpbmRleCAgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSAgOwoKIAoK ZXh0ZXJuIGludCBmZnMgIChpbnQgX19pKSAgOwoKIApleHRlcm4gaW50IF9fc3RyY2FzZWNtcCAg KF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKSAgOwpleHRlcm4gaW50IHN0 cmNhc2VjbXAgIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikgIDsKCiAK ZXh0ZXJuIGludCBfX3N0cm5jYXNlY21wICAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNo YXIgKl9fczIsCgkJCSAgICAgICBzaXplX3QgX19uKSAgOwpleHRlcm4gaW50IHN0cm5jYXNlY21w ICAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsCgkJCSAgICAgc2l6ZV90 IF9fbikgIDsKCgoKIAoKZXh0ZXJuIGNoYXIgKl9fc3Ryc2VwICAoY2hhciAqKl9fc3RyaW5ncCwg X19jb25zdCBjaGFyICpfX2RlbGltKSAgOwpleHRlcm4gY2hhciAqc3Ryc2VwICAoY2hhciAqKl9f c3RyaW5ncCwgX19jb25zdCBjaGFyICpfX2RlbGltKSAgOwoKCiMgMjQxICIvdXNyL2luY2x1ZGUv c3RyaW5nLmgiIDMKCgoKIApleHRlcm4gY2hhciAqYmFzZW5hbWUgIChfX2NvbnN0IGNoYXIgKl9f ZmlsZW5hbWUpICA7CgoKIAoKCiMgMjYgIi4uL2twYXRoc2VhL2MtbWVtc3RyLmgiIDIKCgoKCgog CgoKCgogCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDc1 ICIuLi9rcGF0aHNlYS9jLXN0ZC5oIiAyCgoKIAojIDEgIi4uL2twYXRoc2VhL2MtZXJybm8uaCIg MQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMSAzCiAK CgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKCgoKCgogCgogCgojIDEgIi91c3IvaW5jbHVkZS9l cnJub3MuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2xp bnV4L2Vycm5vLmgiIDEgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9hc20vZXJybm8uaCIgMSAzCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCiMgNCAiL3Vzci9pbmNsdWRlL2xpbnV4L2Vycm5vLmgiIDIgMwoKCiMg MTQgIi91c3IvaW5jbHVkZS9saW51eC9lcnJuby5oIiAzCgoKCiMgMjQgIi91c3IvaW5jbHVkZS9l cnJub3MuaCIgMiAzCgoKCiAKZXh0ZXJuIGludCBlcnJubzsKCiAKZXh0ZXJuIGludCAqX19lcnJu b19sb2NhdGlvbiAgKHZvaWQpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKIyA0NCAi L3Vzci9pbmNsdWRlL2Vycm5vcy5oIiAzCgoKCiAKCgoKCgoKCgoKCgoKIyAzNiAiL3Vzci9pbmNs dWRlL2Vycm5vLmgiIDIgMwoKCgoKCiAKCgoKCgoKCgojIDYzICIvdXNyL2luY2x1ZGUvZXJybm8u aCIgMwoKCgogCgoKIyAyMiAiLi4va3BhdGhzZWEvYy1lcnJuby5oIiAyCgoKCgoKCiMgNzggIi4u L2twYXRoc2VhL2Mtc3RkLmgiIDIKCgogCiMgMSAiLi4va3BhdGhzZWEvYy1taW5tYXguaCIgMQog CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiLi4va3BhdGhzZWEvYy1saW1pdHMuaCIgMQogCgoK CgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LWxpbnV4L3BnY2Mt Mi45MS42MC9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIAoKCiAKCgoKCgogCiMgMSAiL3Vzci9saWIv Z2NjLWxpYi9pNjg2LWxpbnV4L3BnY2MtMi45MS42MC9pbmNsdWRlL3N5c2xpbWl0cy5oIiAxIDMK IAoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LWxpbnV4L3BnY2MtMi45MS42MC9pbmNs dWRlL2xpbWl0cy5oIiAxIDMKIAoKCiAKCiMgMTE0ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtbGlu dXgvcGdjYy0yLjkxLjYwL2luY2x1ZGUvbGltaXRzLmgiIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUv bGltaXRzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCiMgMSAiL3Vzci9pbmNs dWRlL3Bvc2l4MV9saW0uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKIAoKIAoK CiAKCgogCgoKIAoKCiAKCgoKIAoKCiAKCgogCgoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAK CgogCgoKCiAKCgogCgoKIAoKCgogCiMgMSAiL3Vzci9pbmNsdWRlL2xvY2FsX2xpbS5oIiAxIDMK IAoKCgoKCgoKCgoKCgoKCgoKCgogCiMgMSAiL3Vzci9pbmNsdWRlL2xpbnV4L2xpbWl0cy5oIiAx IDMKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjEgIi91c3IvaW5jbHVkZS9sb2NhbF9saW0uaCIgMiAz CgoKIAoKIAoKCiAKCiAKCgogCgogCgojIDkyICIvdXNyL2luY2x1ZGUvcG9zaXgxX2xpbS5oIiAy IDMKCgoKCgoKCgogCgoKCgoKCgojIDI3ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgoK IyAxICIvdXNyL2luY2x1ZGUvcG9zaXgyX2xpbS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKIAoKCiAKCgogCgoKIAoKCiAKCgoKCiAKCgoKCiAKCgoKIAoKCiAKCgoKIAoKCgoKIAoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDMxICIvdXNyL2luY2x1ZGUvbGltaXRz LmgiIDIgMwoKCgoKCgoKCgoKICAKIAogCiAKIAojIDUzICIvdXNyL2luY2x1ZGUvbGltaXRzLmgi IDMKCgojIDEyOSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAzCgojIDExNyAiL3Vzci9saWIvZ2Nj LWxpYi9pNjg2LWxpbnV4L3BnY2MtMi45MS42MC9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKCiMg NyAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LWxpbnV4L3BnY2MtMi45MS42MC9pbmNsdWRlL3N5c2xp bWl0cy5oIiAyIDMKCgojIDExICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtbGludXgvcGdjYy0yLjkx LjYwL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgoKCiAKCgoKIAoKCgogCgoKCgogCgoKCgoKIAoK CgogCgoKCgoKCgoKCgoKCiAKCiAKCgoKCiAKCgoKIAoKCgoKCgoKCiAKCgoKIAoKCgoKCgoKCgoK CgoKIAoKCgojIDEwNyAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LWxpbnV4L3BnY2MtMi45MS42MC9p bmNsdWRlL2xpbWl0cy5oIiAzCgoKCgogCgoKCgoKCgoKCiMgMjMgIi4uL2twYXRoc2VhL2MtbGlt aXRzLmgiIDIKCgoKCgoKCgogCgoKCgoKIyAyMyAiLi4va3BhdGhzZWEvYy1taW5tYXguaCIgMgoK CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoK CgoKCgoKIyA4MSAiLi4va3BhdGhzZWEvYy1zdGQuaCIgMgoKCiAKCiMgMSAiL3Vzci9pbmNsdWRl L2Fzc2VydC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKIyAzMiAiL3Vzci9pbmNsdWRl L2Fzc2VydC5oIiAzCgoKCgoKIAoKCgoKIyA1NiAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAzCgoK IAoKIApleHRlcm4gdm9pZCBfX2Fzc2VydF9mYWlsICAoX19jb25zdCBjaGFyICpfX2Fzc2VydGlv biwKCQkJCV9fY29uc3QgY2hhciAqX19maWxlLAoJCQkJdW5zaWduZWQgaW50IF9fbGluZSwKCQkJ CV9fY29uc3QgY2hhciAqX19mdW5jdGlvbikgIAogICAgIF9fYXR0cmlidXRlX18gKChfX25vcmV0 dXJuX18pKTsKCiAKZXh0ZXJuIHZvaWQgX19hc3NlcnRfcGVycm9yX2ZhaWwgIChpbnQgX19lcnJu dW0sCgkJCQkgICAgICAgX19jb25zdCBjaGFyICpfX2ZpbGUsCgkJCQkgICAgICAgdW5zaWduZWQg aW50IF9fbGluZSwKCQkJCSAgICAgICBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pICAKICAgICBf X2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgogCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoK CgoKIyA4NSAiLi4va3BhdGhzZWEvYy1zdGQuaCIgMgoKCgoKCgoKCgoKIAoKZXh0ZXJuIEZJTEUg KnBvcGVuICgpOwpleHRlcm4gaW50IHBjbG9zZSAoKTsKCgoKCiMgNjMgIi4uL2twYXRoc2VhL2Nv bmZpZy5oIiAyCgoKIyAxICIuLi9rcGF0aHNlYS9jLXByb3RvLmgiIDEKIAoKCgoKCgoKCgoKCgoK CgoKCgoKCiMgMzIgIi4uL2twYXRoc2VhL2MtcHJvdG8uaCIKCgoKCgogCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCiMgMTA0ICIuLi9rcGF0aHNlYS9jLXByb3RvLmgiCgoKCiMgNjUg Ii4uL2twYXRoc2VhL2NvbmZpZy5oIiAyCgoKIyAxICIuLi9rcGF0aHNlYS9kZWJ1Zy5oIiAxCiAK CgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgojIDEgIi4uL2twYXRoc2VhL3R5cGVzLmgiIDEKIAoK CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoKCnR5cGVkZWYgZW51bSB7IGZhbHNlID0gMCwg dHJ1ZSA9IDEgfSBib29sZWFuOwoKCgogCgoKCgoKCiAKdHlwZWRlZiBjaGFyICpzdHJpbmc7Cgog Cgp0eXBlZGVmIGNvbnN0IGNoYXIgKmNvbnN0X3N0cmluZzsKCiAKdHlwZWRlZiB2b2lkICphZGRy ZXNzOwoKCiMgMjcgIi4uL2twYXRoc2VhL2RlYnVnLmgiIDIKCgojIDUwICIuLi9rcGF0aHNlYS9k ZWJ1Zy5oIgoKCiAKCgogCmV4dGVybiAgIHVuc2lnbmVkIGtwYXRoc2VhX2RlYnVnOwoKIAoKCiAK CgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gICBGSUxFICoga3BzZV9mb3Blbl90 cmFjZSAgKCBjb25zdF9zdHJpbmcgZmlsZW5hbWUgLCAgIGNvbnN0X3N0cmluZyBtb2RlICkgOwoK CmV4dGVybiAgIGludCBrcHNlX2ZjbG9zZV90cmFjZSAgKCBGSUxFICogKSA7CgoKCgojIDY3ICIu Li9rcGF0aHNlYS9jb25maWcuaCIgMgoKIyAxICIuLi9rcGF0aHNlYS9saWIuaCIgMQogCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgogCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKIAoKCiAgICAgIAogCgoKCgoKCgoKCgoKIAoKCgoKIAoKCgwKIApleHRlcm4gICBzdHJp bmcgY29uY2F0ICggY29uc3Rfc3RyaW5nIHMxICwgICBjb25zdF9zdHJpbmcgczIgKSA7CmV4dGVy biAgIHN0cmluZyBjb25jYXQzICggY29uc3Rfc3RyaW5nICwgICBjb25zdF9zdHJpbmcgLCAgIGNv bnN0X3N0cmluZyApIDsKIAoKCiAKZXh0ZXJuICAgc3RyaW5nIHhzdHJkdXAgKCBjb25zdF9zdHJp bmcgcyApIDsKCiAKZXh0ZXJuICAgc3RyaW5nIHVwcGVyY2FzaWZ5ICggY29uc3Rfc3RyaW5nIHMg KSA7CgogCmV4dGVybiAgIHVuc2lnbmVkIGF0b3UgKCBjb25zdF9zdHJpbmcgKSA7CgogCgoKZXh0 ZXJuICAgYm9vbGVhbiBzYW1lX2ZpbGVfcCAoIGNvbnN0X3N0cmluZyBmaWxlbmFtZTEgLCAgCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Rfc3RyaW5nIGZpbGVu YW1lMiApIDsKCiAKCmV4dGVybiAgIGNvbnN0X3N0cmluZyB4YmFzZW5hbWUgKCBjb25zdF9zdHJp bmcgbmFtZSApIDsKCiAKZXh0ZXJuICAgc3RyaW5nIHhkaXJuYW1lICggY29uc3Rfc3RyaW5nIG5h bWUgKSA7CgoKCgoKIAoKZXh0ZXJuICAgc3RyaW5nIGZpbmRfc3VmZml4ICggY29uc3Rfc3RyaW5n IG5hbWUgKSA7CgogCmV4dGVybiAgIHN0cmluZyByZW1vdmVfc3VmZml4ICggY29uc3Rfc3RyaW5n IG5hbWUgKSA7CgogCgoKZXh0ZXJuICAgc3RyaW5nIG1ha2Vfc3VmZml4ICggY29uc3Rfc3RyaW5n IHMgLCAgICBjb25zdF9zdHJpbmcgc3VmZml4ICkgOwoKIAoKCmV4dGVybiAgIHN0cmluZyBtYWtl X3ByZWZpeCAoIHN0cmluZyBzdGVtX3ByZWZpeCAsICAgc3RyaW5nIG5hbWUgKSA7CgogCgpleHRl cm4gICBzdHJpbmcgZXh0ZW5kX2ZpbGVuYW1lICggY29uc3Rfc3RyaW5nIG5hbWUgLCAgCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Rfc3RyaW5nIHN1ZmZp eCApIDsKDAogCmV4dGVybiAgIHZvaWQgeHB1dGVudiAoIGNvbnN0X3N0cmluZyB2YXIgLCAgIGNv bnN0X3N0cmluZyB2YWx1ZSApIDsKZXh0ZXJuICAgdm9pZCB4cHV0ZW52X2ludCAoIGNvbnN0X3N0 cmluZyB2YXIgLCAgIGludCB2YWx1ZSApIDsKCiAKZXh0ZXJuICAgc3RyaW5nIHhnZXRjd2QgKCB2 b2lkICkgOwoKIApleHRlcm4gICBib29sZWFuIGRpcl9wICggY29uc3Rfc3RyaW5nIGZuICkgOwoK IAoKZXh0ZXJuICAgaW50IGRpcl9saW5rcyAoIGNvbnN0X3N0cmluZyBmbiApIDsKCiAKCmV4dGVy biAgIEZJTEUgKnhmb3BlbiAoIGNvbnN0X3N0cmluZyBmaWxlbmFtZSAsICAgY29uc3Rfc3RyaW5n IG1vZGUgKSA7CmV4dGVybiAgIHZvaWQgeGZjbG9zZSAoIEZJTEUgKiAsICAgY29uc3Rfc3RyaW5n IGZpbGVuYW1lICkgOwpleHRlcm4gICB2b2lkIHhmc2VlayAoIEZJTEUgKiAsICAgbG9uZyAsICAg aW50ICwgICBzdHJpbmcgZmlsZW5hbWUgKSA7CmV4dGVybiAgIHVuc2lnbmVkIGxvbmcgeGZ0ZWxs ICggRklMRSAqICwgICBzdHJpbmcgZmlsZW5hbWUgKSA7CgogCgoKZXh0ZXJuICAgYWRkcmVzcyB4 bWFsbG9jICggdW5zaWduZWQgc2l6ZSApIDsKZXh0ZXJuICAgYWRkcmVzcyB4cmVhbGxvYyAoIGFk ZHJlc3Mgb2xkX2FkZHJlc3MgLCAgIHVuc2lnbmVkIG5ld19zaXplICkgOwpleHRlcm4gICBhZGRy ZXNzIHhjYWxsb2MgKCB1bnNpZ25lZCBuZWxlbSAsICAgdW5zaWduZWQgZWxzaXplICkgOwoKIAoK CgoKCiMgNjggIi4uL2twYXRoc2VhL2NvbmZpZy5oIiAyCgoKIyAxICIuLi9rcGF0aHNlYS9wcm9n bmFtZS5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gICBzdHJpbmcgcHJvZ3Jh bV9pbnZvY2F0aW9uX25hbWU7CmV4dGVybiAgIHN0cmluZyBwcm9ncmFtX2ludm9jYXRpb25fc2hv cnRfbmFtZTsKZXh0ZXJuICAgc3RyaW5nIGtwc2VfcHJvZ3JhbV9uYW1lOwoKIAoKCgoKCmV4dGVy biAgIHZvaWQga3BzZV9zZXRfcHJvZ3JhbV9uYW1lICggY29uc3Rfc3RyaW5nIGFyZ3YwICwgIAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X3N0cmluZyBwcm9nbmFt ZSApIDsKCiAKCgoKCgogCgoKCgoKZXh0ZXJuICAgdm9pZCBrcHNlX3NldF9wcm9nbmFtZSAoIGNv bnN0X3N0cmluZyBhcmd2MCApIDsKCgojIDcwICIuLi9rcGF0aHNlYS9jb25maWcuaCIgMgoKCiAg IAogCgoKCgogCgoKCgoKCgoKCgoKCgojIDEwNSAiLi4va3BhdGhzZWEvY29uZmlnLmgiCgoKCiMg MTEgInhkdmktY29uZmlnLmgiIDIKCgojIDEgIi91c3IvaW5jbHVkZS9zZXRqbXAuaCIgMSAzCiAK CgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKIAoKIAojIDEgIi91c3IvaW5jbHVkZS9qbXBfYnVm LmgiIDEgMwogCgoKCgoKCgoKCgoKdHlwZWRlZiBpbnQgX19qbXBfYnVmWzZdOwoKCiAKCgoKIyAz MSAiL3Vzci9pbmNsdWRlL3NldGptcC5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL3NpZ3NldC5o IiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIGludCBfX3NpZ19hdG9taWNfdDsK CiAKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdmFsWygxMDI0 IC8gKDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpIF07CiAgfSBfX3NpZ3NldF90OwoK CgoKIAoKCgoKCiMgMTIzICIvdXNyL2luY2x1ZGUvc2lnc2V0LmgiIDMKCiMgMzIgIi91c3IvaW5j bHVkZS9zZXRqbXAuaCIgMiAzCgoKIAp0eXBlZGVmIHN0cnVjdCBfX2ptcF9idWZfdGFnCSAKICB7 CiAgICAgCgoKICAgIF9fam1wX2J1ZiBfX2ptcGJ1ZjsJCSAKICAgIGludCBfX21hc2tfd2FzX3Nh dmVkOwkgCiAgICBfX3NpZ3NldF90IF9fc2F2ZWRfbWFzazsJIAogIH0gam1wX2J1ZlsxXTsKCgog CgoKZXh0ZXJuIGludCBfX3NpZ3NldGptcCAgKGptcF9idWYgX19lbnYsIGludCBfX3NhdmVtYXNr KSAgOwoKCiAKCgoKCgoKCgoKCiAKCgoKCgogCgpleHRlcm4gdm9pZCBsb25nam1wICAoam1wX2J1 ZiBfX2VudiwgaW50IF9fdmFsKSAgCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykp OwoKIAoKCmV4dGVybiB2b2lkIF9sb25nam1wICAoam1wX2J1ZiBfX2VudiwgaW50IF9fdmFsKSAg CiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCiAKZXh0ZXJuIHZvaWQgX19s b25nam1wICAoX19qbXBfYnVmIF9fZW52LCBpbnQgX192YWwpICAKICAgICBfX2F0dHJpYnV0ZV9f ICgoX19ub3JldHVybl9fKSk7CgogCgoKCmV4dGVybiBpbnQgX19zaWdqbXBfc2F2ZSAgKGptcF9i dWYgX19lbnYsIGludCBfX3NhdmVtYXNrKSAgOwoKCgogCgoKdHlwZWRlZiBqbXBfYnVmIHNpZ2pt cF9idWY7CgogCgoKCiAKCgoKZXh0ZXJuIHZvaWQgc2lnbG9uZ2ptcCAgKHNpZ2ptcF9idWYgX19l bnYsIGludCBfX3ZhbCkgIAogICAgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgog CgoKIyAxMyAieGR2aS1jb25maWcuaCIgMgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKIAoK CgoKCgoKIAojIDEgInhkdmkuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK CgogCgoKCiMgMSAiYy1hdXRvLmgiIDEKIAogCgogCiAKCiAKCgogCiAKCiAKCgogCiAKCiAKCgog CiAKCiAKCgogCiAKCiAKCiAKCiAKIAoKIAoKCiAKCgogCgoKCiAKCgoKIAoKCiAKIAoKIAoKCiAK CgogCgoKIAoKIAoKIAoKCgoKCgoKIAogCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoK CiAKIAoKIAoKCiAKIAoKIAogCgogCiAKCiAKIAoKIAogCgogCiAKIyAzOSAieGR2aS5oIiAyCgoK CiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LWxpbnV4L3BnY2MtMi45MS42MC9pbmNsdWRlL3N0 ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCgoKCgoKIAoKIAoKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAi L3Vzci9saWIvZ2NjLWxpYi9pNjg2LWxpbnV4L3BnY2MtMi45MS42MC9pbmNsdWRlL3N0ZGRlZi5o IiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCgojIDEyNiAiL3Vz ci9saWIvZ2NjLWxpYi9pNjg2LWxpbnV4L3BnY2MtMi45MS42MC9pbmNsdWRlL3N0ZGRlZi5oIiAz CgoKIAoKCgoKIAoKIAoKCiMgMTg4ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtbGludXgvcGdjYy0y LjkxLjYwL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgogCgoKCgogCgoKIyAyNjkgIi91c3IvbGli L2djYy1saWIvaTY4Ni1saW51eC9wZ2NjLTIuOTEuNjAvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoK CgoKCgoKCgoKCgoKIAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIvaTY4Ni1saW51eC9wZ2Nj LTIuOTEuNjAvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoKIAoKCgoKCgoK IyA0MiAieGR2aS5oIiAyCgoKCSAKIyAxICIvdXNyL2luY2x1ZGUvWDExL1guaCIgMSAzCiAKCgoK IAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK IAoKIAoKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBYSUQ7CnR5cGVkZWYgdW5zaWduZWQgbG9u ZyBNYXNrOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgQXRvbTsKdHlwZWRlZiB1bnNpZ25lZCBsb25n IFZpc3VhbElEOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgVGltZTsKCgoKCgoKCgoKdHlwZWRlZiBY SUQgV2luZG93Owp0eXBlZGVmIFhJRCBEcmF3YWJsZTsKdHlwZWRlZiBYSUQgRm9udDsKdHlwZWRl ZiBYSUQgUGl4bWFwOwp0eXBlZGVmIFhJRCBDdXJzb3I7CnR5cGVkZWYgWElEIENvbG9ybWFwOwp0 eXBlZGVmIFhJRCBHQ29udGV4dDsKdHlwZWRlZiBYSUQgS2V5U3ltOwoKdHlwZWRlZiB1bnNpZ25l ZCBjaGFyIEtleUNvZGU7CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKIAoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCiAKCgoK CgoKCgoKIAoKCgoKCgoKCQkgICAgICAgCiAKCgoKCgoKCgoKCiAKCgoKCgogCgoKCgogCgoKCgoK IAoKCgoKIAoKCgoKIAoKCgoKIAoKCgoKCgoKIAoKCgoKCgoKCgoKIAoKCgoKCiAKCgoKCgoKCgoK CgoKCgojIDM0NSAiL3Vzci9pbmNsdWRlL1gxMS9YLmgiIDMKCgoKCgoKCgoKCgogCgoKCiAKIAoK CgoKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCiAKCgoKIAoK CgoKCiAKCgoKCgogCgoKCgogCgoKCgoKIAoKCgoKCgoKIAoKCgoKIAoKCgoKCiAKCgoKIAoKCgoK CgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKCgoKCgogCgoKCgoKIAoKCgoKCgogCgoKCgogCgoKCgog CgoKCgoKCiAKCgoKCiAKCgoKCgogCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAK CgoKIAoKCgoKCgogCgoKCiAKCgoKCgogCgoKCiAKCgoKCgogCgoKCgoKIAoKCgogCgoKCgoKIAoK CgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKIAoKCgoKIAoKCgog CgoKCgogCgoKCgogCgoKCgoKCgoKCgoKIAoKCgoKCiMgNDUgInhkdmkuaCIgMgoKCiMgMSAiL3Vz ci9pbmNsdWRlL1gxMS9Yb3NkZWZzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKICAKCgoKCgoK CgojIDkzICIvdXNyL2luY2x1ZGUvWDExL1hvc2RlZnMuaCIgMwoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgojIDQ3ICJ4ZHZpLmgiIDIKCgoKCgoKCgoKCiAKCgogCgoKCiMgMSAi L3Vzci9pbmNsdWRlL1gxMS9YbGliLmgiIDEgMwogCiAKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAojIDEgIi91c3IvaW5jbHVkZS9YMTEv WGZ1bmNwcm90by5oIiAxIDMKIAogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgNTkg Ii91c3IvaW5jbHVkZS9YMTEvWGxpYi5oIiAyIDMKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvbGli L2djYy1saWIvaTY4Ni1saW51eC9wZ2NjLTIuOTEuNjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg MzQyICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtbGludXgvcGdjYy0yLjkxLjYwL2luY2x1ZGUvc3Rk ZGVmLmgiIDMKCiMgNzMgIi91c3IvaW5jbHVkZS9YMTEvWGxpYi5oIiAyIDMKCgoKCgoKCgoKCgoK CgoKCgoKdHlwZWRlZiBjaGFyICpYUG9pbnRlcjsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCnR5cGVkZWYgc3Ry dWN0IF9YRXh0RGF0YSB7CglpbnQgbnVtYmVyOwkJIAoJc3RydWN0IF9YRXh0RGF0YSAqbmV4dDsJ IAoJaW50ICgqZnJlZV9wcml2YXRlKSgJIAoKCXN0cnVjdCBfWEV4dERhdGEgKmV4dGVuc2lvbgoK CSk7CglYUG9pbnRlciBwcml2YXRlX2RhdGE7CSAKfSBYRXh0RGF0YTsKCiAKCgp0eXBlZGVmIHN0 cnVjdCB7CQkgCglpbnQgZXh0ZW5zaW9uOwkJIAoJaW50IG1ham9yX29wY29kZTsJIAoJaW50IGZp cnN0X2V2ZW50OwkgCglpbnQgZmlyc3RfZXJyb3I7CSAKfSBYRXh0Q29kZXM7CgogCgoKCnR5cGVk ZWYgc3RydWN0IHsKICAgIGludCBkZXB0aDsKICAgIGludCBiaXRzX3Blcl9waXhlbDsKICAgIGlu dCBzY2FubGluZV9wYWQ7Cn0gWFBpeG1hcEZvcm1hdFZhbHVlczsKCgogCgoKdHlwZWRlZiBzdHJ1 Y3QgewoJaW50IGZ1bmN0aW9uOwkJIAoJdW5zaWduZWQgbG9uZyBwbGFuZV9tYXNrOyAKCXVuc2ln bmVkIGxvbmcgZm9yZWdyb3VuZDsgCgl1bnNpZ25lZCBsb25nIGJhY2tncm91bmQ7IAoJaW50IGxp bmVfd2lkdGg7CQkgCglpbnQgbGluZV9zdHlsZTsJIAkgCglpbnQgY2FwX3N0eWxlOwkgIAkgCgoJ aW50IGpvaW5fc3R5bGU7CSAJIAoJaW50IGZpbGxfc3R5bGU7CSAJIAoKCWludCBmaWxsX3J1bGU7 CSAgCSAKCWludCBhcmNfbW9kZTsJCSAKCVBpeG1hcCB0aWxlOwkJIAoJUGl4bWFwIHN0aXBwbGU7 CQkgCglpbnQgdHNfeF9vcmlnaW47CSAKCWludCB0c195X29yaWdpbjsKICAgICAgICBGb250IGZv bnQ7CSAgICAgICAgIAoJaW50IHN1YndpbmRvd19tb2RlOyAgICAgIAoJaW50ICBncmFwaGljc19l eHBvc3VyZXM7IAoJaW50IGNsaXBfeF9vcmlnaW47CSAKCWludCBjbGlwX3lfb3JpZ2luOwoJUGl4 bWFwIGNsaXBfbWFzazsJIAoJaW50IGRhc2hfb2Zmc2V0OwkgCgljaGFyIGRhc2hlczsKfSBYR0NW YWx1ZXM7CgogCgoKCgp0eXBlZGVmIHN0cnVjdCBfWEdDCgoKCgoKCgoqR0M7CgogCgoKdHlwZWRl ZiBzdHJ1Y3QgewoJWEV4dERhdGEgKmV4dF9kYXRhOwkgCglWaXN1YWxJRCB2aXN1YWxpZDsJIAoK CgoJaW50IGNsYXNzOwkJIAoKCXVuc2lnbmVkIGxvbmcgcmVkX21hc2ssIGdyZWVuX21hc2ssIGJs dWVfbWFzazsJIAoJaW50IGJpdHNfcGVyX3JnYjsJIAoJaW50IG1hcF9lbnRyaWVzOwkgCn0gVmlz dWFsOwoKIAoKCQp0eXBlZGVmIHN0cnVjdCB7CglpbnQgZGVwdGg7CQkgCglpbnQgbnZpc3VhbHM7 CQkgCglWaXN1YWwgKnZpc3VhbHM7CSAKfSBEZXB0aDsKCiAKCgoKCgpzdHJ1Y3QgX1hEaXNwbGF5 OwkJIAoKdHlwZWRlZiBzdHJ1Y3QgewoJWEV4dERhdGEgKmV4dF9kYXRhOwkgCglzdHJ1Y3QgX1hE aXNwbGF5ICpkaXNwbGF5OyAKCVdpbmRvdyByb290OwkJIAoJaW50IHdpZHRoLCBoZWlnaHQ7CSAK CWludCBtd2lkdGgsIG1oZWlnaHQ7CSAKCWludCBuZGVwdGhzOwkJIAoJRGVwdGggKmRlcHRoczsJ CSAKCWludCByb290X2RlcHRoOwkJIAoJVmlzdWFsICpyb290X3Zpc3VhbDsJIAoJR0MgZGVmYXVs dF9nYzsJCSAKCUNvbG9ybWFwIGNtYXA7CQkgCgl1bnNpZ25lZCBsb25nIHdoaXRlX3BpeGVsOwoJ dW5zaWduZWQgbG9uZyBibGFja19waXhlbDsJIAoJaW50IG1heF9tYXBzLCBtaW5fbWFwczsJIAoJ aW50IGJhY2tpbmdfc3RvcmU7CSAKCWludCAgc2F2ZV91bmRlcnM7CQoJbG9uZyByb290X2lucHV0 X21hc2s7CSAKfSBTY3JlZW47CgogCgoKdHlwZWRlZiBzdHJ1Y3QgewoJWEV4dERhdGEgKmV4dF9k YXRhOwkgCglpbnQgZGVwdGg7CQkgCglpbnQgYml0c19wZXJfcGl4ZWw7CSAKCWludCBzY2FubGlu ZV9wYWQ7CSAKfSBTY3JlZW5Gb3JtYXQ7CgogCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgUGl4bWFw IGJhY2tncm91bmRfcGl4bWFwOwkgCiAgICB1bnNpZ25lZCBsb25nIGJhY2tncm91bmRfcGl4ZWw7 CSAKICAgIFBpeG1hcCBib3JkZXJfcGl4bWFwOwkgCiAgICB1bnNpZ25lZCBsb25nIGJvcmRlcl9w aXhlbDsJIAogICAgaW50IGJpdF9ncmF2aXR5OwkJIAogICAgaW50IHdpbl9ncmF2aXR5OwkJIAog ICAgaW50IGJhY2tpbmdfc3RvcmU7CQkgCiAgICB1bnNpZ25lZCBsb25nIGJhY2tpbmdfcGxhbmVz OyAKICAgIHVuc2lnbmVkIGxvbmcgYmFja2luZ19waXhlbDsgCiAgICBpbnQgIHNhdmVfdW5kZXI7 CQkgCiAgICBsb25nIGV2ZW50X21hc2s7CQkgCiAgICBsb25nIGRvX25vdF9wcm9wYWdhdGVfbWFz azsJIAogICAgaW50ICBvdmVycmlkZV9yZWRpcmVjdDsJIAogICAgQ29sb3JtYXAgY29sb3JtYXA7 CQkgCiAgICBDdXJzb3IgY3Vyc29yOwkJIAp9IFhTZXRXaW5kb3dBdHRyaWJ1dGVzOwoKdHlwZWRl ZiBzdHJ1Y3QgewogICAgaW50IHgsIHk7CQkJIAogICAgaW50IHdpZHRoLCBoZWlnaHQ7CQkgCiAg ICBpbnQgYm9yZGVyX3dpZHRoOwkJIAogICAgaW50IGRlcHRoOyAgICAgICAgICAJIAogICAgVmlz dWFsICp2aXN1YWw7CQkgCiAgICBXaW5kb3cgcm9vdDsgICAgICAgIAkgCgoKCiAgICBpbnQgY2xh c3M7CQkJIAoKICAgIGludCBiaXRfZ3Jhdml0eTsJCSAKICAgIGludCB3aW5fZ3Jhdml0eTsJCSAK ICAgIGludCBiYWNraW5nX3N0b3JlOwkJIAogICAgdW5zaWduZWQgbG9uZyBiYWNraW5nX3BsYW5l czsgCiAgICB1bnNpZ25lZCBsb25nIGJhY2tpbmdfcGl4ZWw7IAogICAgaW50ICBzYXZlX3VuZGVy OwkJIAogICAgQ29sb3JtYXAgY29sb3JtYXA7CQkgCiAgICBpbnQgIG1hcF9pbnN0YWxsZWQ7CQkg CiAgICBpbnQgbWFwX3N0YXRlOwkJIAogICAgbG9uZyBhbGxfZXZlbnRfbWFza3M7CSAKICAgIGxv bmcgeW91cl9ldmVudF9tYXNrOwkgCiAgICBsb25nIGRvX25vdF9wcm9wYWdhdGVfbWFzazsgIAog ICAgaW50ICBvdmVycmlkZV9yZWRpcmVjdDsJIAogICAgU2NyZWVuICpzY3JlZW47CQkgCn0gWFdp bmRvd0F0dHJpYnV0ZXM7CgogCgoKCgp0eXBlZGVmIHN0cnVjdCB7CglpbnQgZmFtaWx5OwkJIAoJ aW50IGxlbmd0aDsJCSAKCWNoYXIgKmFkZHJlc3M7CQkgCn0gWEhvc3RBZGRyZXNzOwoKIAoKCnR5 cGVkZWYgc3RydWN0IF9YSW1hZ2UgewogICAgaW50IHdpZHRoLCBoZWlnaHQ7CQkgCiAgICBpbnQg eG9mZnNldDsJCSAKICAgIGludCBmb3JtYXQ7CQkJIAogICAgY2hhciAqZGF0YTsJCQkgCiAgICBp bnQgYnl0ZV9vcmRlcjsJCSAKICAgIGludCBiaXRtYXBfdW5pdDsJCSAKICAgIGludCBiaXRtYXBf Yml0X29yZGVyOwkgCiAgICBpbnQgYml0bWFwX3BhZDsJCSAKICAgIGludCBkZXB0aDsJCQkgCiAg ICBpbnQgYnl0ZXNfcGVyX2xpbmU7CQkgCiAgICBpbnQgYml0c19wZXJfcGl4ZWw7CQkgCiAgICB1 bnNpZ25lZCBsb25nIHJlZF9tYXNrOwkgCiAgICB1bnNpZ25lZCBsb25nIGdyZWVuX21hc2s7CiAg ICB1bnNpZ25lZCBsb25nIGJsdWVfbWFzazsKICAgIFhQb2ludGVyIG9iZGF0YTsJCSAKICAgIHN0 cnVjdCBmdW5jcyB7CQkgCgoJc3RydWN0IF9YSW1hZ2UgKigqY3JlYXRlX2ltYWdlKSgKCQlzdHJ1 Y3QgX1hEaXNwbGF5KiAgLAoJCVZpc3VhbCoJCSAsCgkJdW5zaWduZWQgaW50CSAsCgkJaW50CQkg LAoJCWludAkJICwKCQljaGFyKgkJICwKCQl1bnNpZ25lZCBpbnQJICwKCQl1bnNpZ25lZCBpbnQJ ICwKCQlpbnQJCSAsCgkJaW50CQkgKTsKCWludCAoKmRlc3Ryb3lfaW1hZ2UpICAgICAgICAoc3Ry dWN0IF9YSW1hZ2UgKik7Cgl1bnNpZ25lZCBsb25nICgqZ2V0X3BpeGVsKSAgKHN0cnVjdCBfWElt YWdlICosIGludCwgaW50KTsKCWludCAoKnB1dF9waXhlbCkgICAgICAgICAgICAoc3RydWN0IF9Y SW1hZ2UgKiwgaW50LCBpbnQsIHVuc2lnbmVkIGxvbmcpOwoJc3RydWN0IF9YSW1hZ2UgKigqc3Vi X2ltYWdlKShzdHJ1Y3QgX1hJbWFnZSAqLCBpbnQsIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25l ZCBpbnQpOwoJaW50ICgqYWRkX3BpeGVsKSAgICAgICAgICAgIChzdHJ1Y3QgX1hJbWFnZSAqLCBs b25nKTsKCgoKCgoKCgoJfSBmOwp9IFhJbWFnZTsKCiAKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBp bnQgeCwgeTsKICAgIGludCB3aWR0aCwgaGVpZ2h0OwogICAgaW50IGJvcmRlcl93aWR0aDsKICAg IFdpbmRvdyBzaWJsaW5nOwogICAgaW50IHN0YWNrX21vZGU7Cn0gWFdpbmRvd0NoYW5nZXM7Cgog CgoKdHlwZWRlZiBzdHJ1Y3QgewoJdW5zaWduZWQgbG9uZyBwaXhlbDsKCXVuc2lnbmVkIHNob3J0 IHJlZCwgZ3JlZW4sIGJsdWU7CgljaGFyIGZsYWdzOyAgIAoJY2hhciBwYWQ7Cn0gWENvbG9yOwoK IAoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgc2hvcnQgeDEsIHkxLCB4MiwgeTI7Cn0gWFNlZ21l bnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBzaG9ydCB4LCB5Owp9IFhQb2ludDsKICAgIAp0eXBl ZGVmIHN0cnVjdCB7CiAgICBzaG9ydCB4LCB5OwogICAgdW5zaWduZWQgc2hvcnQgd2lkdGgsIGhl aWdodDsKfSBYUmVjdGFuZ2xlOwogICAgCnR5cGVkZWYgc3RydWN0IHsKICAgIHNob3J0IHgsIHk7 CiAgICB1bnNpZ25lZCBzaG9ydCB3aWR0aCwgaGVpZ2h0OwogICAgc2hvcnQgYW5nbGUxLCBhbmds ZTI7Cn0gWEFyYzsKCgogCgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IGtleV9jbGlja19w ZXJjZW50OwogICAgICAgIGludCBiZWxsX3BlcmNlbnQ7CiAgICAgICAgaW50IGJlbGxfcGl0Y2g7 CiAgICAgICAgaW50IGJlbGxfZHVyYXRpb247CiAgICAgICAgaW50IGxlZDsKICAgICAgICBpbnQg bGVkX21vZGU7CiAgICAgICAgaW50IGtleTsKICAgICAgICBpbnQgYXV0b19yZXBlYXRfbW9kZTsg ICAgCn0gWEtleWJvYXJkQ29udHJvbDsKCiAKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQg a2V5X2NsaWNrX3BlcmNlbnQ7CglpbnQgYmVsbF9wZXJjZW50OwoJdW5zaWduZWQgaW50IGJlbGxf cGl0Y2gsIGJlbGxfZHVyYXRpb247Cgl1bnNpZ25lZCBsb25nIGxlZF9tYXNrOwoJaW50IGdsb2Jh bF9hdXRvX3JlcGVhdDsKCWNoYXIgYXV0b19yZXBlYXRzWzMyXTsKfSBYS2V5Ym9hcmRTdGF0ZTsK CiAKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBUaW1lIHRpbWU7CglzaG9ydCB4LCB5Owp9IFhU aW1lQ29vcmQ7CgogCgp0eXBlZGVmIHN0cnVjdCB7CiAJaW50IG1heF9rZXlwZXJtb2Q7CSAKIAlL ZXlDb2RlICptb2RpZmllcm1hcDsJIAp9IFhNb2RpZmllcktleW1hcDsKCgogCgoKCgoKdHlwZWRl ZiBzdHJ1Y3QgX1hEaXNwbGF5IERpc3BsYXk7CgoKc3RydWN0IF9YUHJpdmF0ZTsJCSAKc3RydWN0 IF9Ycm1IYXNoQnVja2V0UmVjOwoKdHlwZWRlZiBzdHJ1Y3QgCgoKCnsKCVhFeHREYXRhICpleHRf ZGF0YTsJIAoJc3RydWN0IF9YUHJpdmF0ZSAqcHJpdmF0ZTE7CglpbnQgZmQ7CQkJIAoJaW50IHBy aXZhdGUyOwoJaW50IHByb3RvX21ham9yX3ZlcnNpb247IAoJaW50IHByb3RvX21pbm9yX3ZlcnNp b247IAoJY2hhciAqdmVuZG9yOwkJIAogICAgICAgIFhJRCBwcml2YXRlMzsKCVhJRCBwcml2YXRl NDsKCVhJRCBwcml2YXRlNTsKCWludCBwcml2YXRlNjsKCVhJRCAoKnJlc291cmNlX2FsbG9jKSgJ IAoKCQlzdHJ1Y3QgX1hEaXNwbGF5KgoKCSk7CglpbnQgYnl0ZV9vcmRlcjsJCSAKCWludCBiaXRt YXBfdW5pdDsJIAoJaW50IGJpdG1hcF9wYWQ7CQkgCglpbnQgYml0bWFwX2JpdF9vcmRlcjsJIAoJ aW50IG5mb3JtYXRzOwkJIAoJU2NyZWVuRm9ybWF0ICpwaXhtYXBfZm9ybWF0OwkgCglpbnQgcHJp dmF0ZTg7CglpbnQgcmVsZWFzZTsJCSAKCXN0cnVjdCBfWFByaXZhdGUgKnByaXZhdGU5LCAqcHJp dmF0ZTEwOwoJaW50IHFsZW47CQkgCgl1bnNpZ25lZCBsb25nIGxhc3RfcmVxdWVzdF9yZWFkOyAg Cgl1bnNpZ25lZCBsb25nIHJlcXVlc3Q7CSAKCVhQb2ludGVyIHByaXZhdGUxMTsKCVhQb2ludGVy IHByaXZhdGUxMjsKCVhQb2ludGVyIHByaXZhdGUxMzsKCVhQb2ludGVyIHByaXZhdGUxNDsKCXVu c2lnbmVkIG1heF9yZXF1ZXN0X3NpemU7ICAKCXN0cnVjdCBfWHJtSGFzaEJ1Y2tldFJlYyAqZGI7 CglpbnQgKCpwcml2YXRlMTUpKAoKCQlzdHJ1Y3QgX1hEaXNwbGF5KgoKCQkpOwoJY2hhciAqZGlz cGxheV9uYW1lOwkgCglpbnQgZGVmYXVsdF9zY3JlZW47CSAKCWludCBuc2NyZWVuczsJCSAKCVNj cmVlbiAqc2NyZWVuczsJIAoJdW5zaWduZWQgbG9uZyBtb3Rpb25fYnVmZmVyOwkgCgl1bnNpZ25l ZCBsb25nIHByaXZhdGUxNjsKCWludCBtaW5fa2V5Y29kZTsJIAoJaW50IG1heF9rZXljb2RlOwkg CglYUG9pbnRlciBwcml2YXRlMTc7CglYUG9pbnRlciBwcml2YXRlMTg7CglpbnQgcHJpdmF0ZTE5 OwoJY2hhciAqeGRlZmF1bHRzOwkgCgkgCn0KCgoKKl9YUHJpdkRpc3BsYXk7CgoKCgoKIAoKCnR5 cGVkZWYgc3RydWN0IHsKCWludCB0eXBlOwkJIAoJdW5zaWduZWQgbG9uZyBzZXJpYWw7CSAKCWlu dCAgc2VuZF9ldmVudDsJIAoJRGlzcGxheSAqZGlzcGxheTsJIAoJV2luZG93IHdpbmRvdzsJICAg ICAgICAgCglXaW5kb3cgcm9vdDsJICAgICAgICAgCglXaW5kb3cgc3Vid2luZG93OwkgCglUaW1l IHRpbWU7CQkgCglpbnQgeCwgeTsJCSAKCWludCB4X3Jvb3QsIHlfcm9vdDsJIAoJdW5zaWduZWQg aW50IHN0YXRlOwkgCgl1bnNpZ25lZCBpbnQga2V5Y29kZTsJIAoJaW50ICBzYW1lX3NjcmVlbjsJ IAp9IFhLZXlFdmVudDsKdHlwZWRlZiBYS2V5RXZlbnQgWEtleVByZXNzZWRFdmVudDsKdHlwZWRl ZiBYS2V5RXZlbnQgWEtleVJlbGVhc2VkRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CglpbnQgdHlw ZTsJCSAKCXVuc2lnbmVkIGxvbmcgc2VyaWFsOwkgCglpbnQgIHNlbmRfZXZlbnQ7CSAKCURpc3Bs YXkgKmRpc3BsYXk7CSAKCVdpbmRvdyB3aW5kb3c7CSAgICAgICAgIAoJV2luZG93IHJvb3Q7CSAg ICAgICAgIAoJV2luZG93IHN1YndpbmRvdzsJIAoJVGltZSB0aW1lOwkJIAoJaW50IHgsIHk7CQkg CglpbnQgeF9yb290LCB5X3Jvb3Q7CSAKCXVuc2lnbmVkIGludCBzdGF0ZTsJIAoJdW5zaWduZWQg aW50IGJ1dHRvbjsJIAoJaW50ICBzYW1lX3NjcmVlbjsJIAp9IFhCdXR0b25FdmVudDsKdHlwZWRl ZiBYQnV0dG9uRXZlbnQgWEJ1dHRvblByZXNzZWRFdmVudDsKdHlwZWRlZiBYQnV0dG9uRXZlbnQg WEJ1dHRvblJlbGVhc2VkRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CglpbnQgdHlwZTsJCSAKCXVu c2lnbmVkIGxvbmcgc2VyaWFsOwkgCglpbnQgIHNlbmRfZXZlbnQ7CSAKCURpc3BsYXkgKmRpc3Bs YXk7CSAKCVdpbmRvdyB3aW5kb3c7CSAgICAgICAgIAoJV2luZG93IHJvb3Q7CSAgICAgICAgIAoJ V2luZG93IHN1YndpbmRvdzsJIAoJVGltZSB0aW1lOwkJIAoJaW50IHgsIHk7CQkgCglpbnQgeF9y b290LCB5X3Jvb3Q7CSAKCXVuc2lnbmVkIGludCBzdGF0ZTsJIAoJY2hhciBpc19oaW50OwkJIAoJ aW50ICBzYW1lX3NjcmVlbjsJIAp9IFhNb3Rpb25FdmVudDsKdHlwZWRlZiBYTW90aW9uRXZlbnQg WFBvaW50ZXJNb3ZlZEV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50IHR5cGU7CQkgCgl1bnNp Z25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5kX2V2ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5 OwkgCglXaW5kb3cgd2luZG93OwkgICAgICAgICAKCVdpbmRvdyByb290OwkgICAgICAgICAKCVdp bmRvdyBzdWJ3aW5kb3c7CSAKCVRpbWUgdGltZTsJCSAKCWludCB4LCB5OwkJIAoJaW50IHhfcm9v dCwgeV9yb290OwkgCglpbnQgbW9kZTsJCSAKCWludCBkZXRhaWw7CgkgCgoKCglpbnQgIHNhbWVf c2NyZWVuOwkgCglpbnQgIGZvY3VzOwkJIAoJdW5zaWduZWQgaW50IHN0YXRlOwkgCn0gWENyb3Nz aW5nRXZlbnQ7CnR5cGVkZWYgWENyb3NzaW5nRXZlbnQgWEVudGVyV2luZG93RXZlbnQ7CnR5cGVk ZWYgWENyb3NzaW5nRXZlbnQgWExlYXZlV2luZG93RXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7Cglp bnQgdHlwZTsJCSAKCXVuc2lnbmVkIGxvbmcgc2VyaWFsOwkgCglpbnQgIHNlbmRfZXZlbnQ7CSAK CURpc3BsYXkgKmRpc3BsYXk7CSAKCVdpbmRvdyB3aW5kb3c7CQkgCglpbnQgbW9kZTsJCSAKCWlu dCBkZXRhaWw7CgkgCgoKCgp9IFhGb2N1c0NoYW5nZUV2ZW50Owp0eXBlZGVmIFhGb2N1c0NoYW5n ZUV2ZW50IFhGb2N1c0luRXZlbnQ7CnR5cGVkZWYgWEZvY3VzQ2hhbmdlRXZlbnQgWEZvY3VzT3V0 RXZlbnQ7CgogCnR5cGVkZWYgc3RydWN0IHsKCWludCB0eXBlOwoJdW5zaWduZWQgbG9uZyBzZXJp YWw7CSAKCWludCAgc2VuZF9ldmVudDsJIAoJRGlzcGxheSAqZGlzcGxheTsJIAoJV2luZG93IHdp bmRvdzsKCWNoYXIga2V5X3ZlY3RvclszMl07Cn0gWEtleW1hcEV2ZW50OwkKCnR5cGVkZWYgc3Ry dWN0IHsKCWludCB0eXBlOwoJdW5zaWduZWQgbG9uZyBzZXJpYWw7CSAKCWludCAgc2VuZF9ldmVu dDsJIAoJRGlzcGxheSAqZGlzcGxheTsJIAoJV2luZG93IHdpbmRvdzsKCWludCB4LCB5OwoJaW50 IHdpZHRoLCBoZWlnaHQ7CglpbnQgY291bnQ7CQkgCn0gWEV4cG9zZUV2ZW50OwoKdHlwZWRlZiBz dHJ1Y3QgewoJaW50IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5kX2V2 ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5OwkgCglEcmF3YWJsZSBkcmF3YWJsZTsKCWludCB4LCB5 OwoJaW50IHdpZHRoLCBoZWlnaHQ7CglpbnQgY291bnQ7CQkgCglpbnQgbWFqb3JfY29kZTsJCSAK CWludCBtaW5vcl9jb2RlOwkJIAp9IFhHcmFwaGljc0V4cG9zZUV2ZW50OwoKdHlwZWRlZiBzdHJ1 Y3QgewoJaW50IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5kX2V2ZW50 OwkgCglEaXNwbGF5ICpkaXNwbGF5OwkgCglEcmF3YWJsZSBkcmF3YWJsZTsKCWludCBtYWpvcl9j b2RlOwkJIAoJaW50IG1pbm9yX2NvZGU7CQkgCn0gWE5vRXhwb3NlRXZlbnQ7Cgp0eXBlZGVmIHN0 cnVjdCB7CglpbnQgdHlwZTsKCXVuc2lnbmVkIGxvbmcgc2VyaWFsOwkgCglpbnQgIHNlbmRfZXZl bnQ7CSAKCURpc3BsYXkgKmRpc3BsYXk7CSAKCVdpbmRvdyB3aW5kb3c7CglpbnQgc3RhdGU7CQkg Cn0gWFZpc2liaWxpdHlFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKCWludCB0eXBlOwoJdW5zaWdu ZWQgbG9uZyBzZXJpYWw7CSAKCWludCAgc2VuZF9ldmVudDsJIAoJRGlzcGxheSAqZGlzcGxheTsJ IAoJV2luZG93IHBhcmVudDsJCSAKCVdpbmRvdyB3aW5kb3c7CQkgCglpbnQgeCwgeTsJCSAKCWlu dCB3aWR0aCwgaGVpZ2h0OwkgCglpbnQgYm9yZGVyX3dpZHRoOwkgCglpbnQgIG92ZXJyaWRlX3Jl ZGlyZWN0OwkgCn0gWENyZWF0ZVdpbmRvd0V2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50IHR5 cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5kX2V2ZW50OwkgCglEaXNwbGF5 ICpkaXNwbGF5OwkgCglXaW5kb3cgZXZlbnQ7CglXaW5kb3cgd2luZG93Owp9IFhEZXN0cm95V2lu ZG93RXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CglpbnQgdHlwZTsKCXVuc2lnbmVkIGxvbmcgc2Vy aWFsOwkgCglpbnQgIHNlbmRfZXZlbnQ7CSAKCURpc3BsYXkgKmRpc3BsYXk7CSAKCVdpbmRvdyBl dmVudDsKCVdpbmRvdyB3aW5kb3c7CglpbnQgIGZyb21fY29uZmlndXJlOwp9IFhVbm1hcEV2ZW50 OwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJ aW50ICBzZW5kX2V2ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5OwkgCglXaW5kb3cgZXZlbnQ7CglX aW5kb3cgd2luZG93OwoJaW50ICBvdmVycmlkZV9yZWRpcmVjdDsJIAp9IFhNYXBFdmVudDsKCnR5 cGVkZWYgc3RydWN0IHsKCWludCB0eXBlOwoJdW5zaWduZWQgbG9uZyBzZXJpYWw7CSAKCWludCAg c2VuZF9ldmVudDsJIAoJRGlzcGxheSAqZGlzcGxheTsJIAoJV2luZG93IHBhcmVudDsKCVdpbmRv dyB3aW5kb3c7Cn0gWE1hcFJlcXVlc3RFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKCWludCB0eXBl OwoJdW5zaWduZWQgbG9uZyBzZXJpYWw7CSAKCWludCAgc2VuZF9ldmVudDsJIAoJRGlzcGxheSAq ZGlzcGxheTsJIAoJV2luZG93IGV2ZW50OwoJV2luZG93IHdpbmRvdzsKCVdpbmRvdyBwYXJlbnQ7 CglpbnQgeCwgeTsKCWludCAgb3ZlcnJpZGVfcmVkaXJlY3Q7Cn0gWFJlcGFyZW50RXZlbnQ7Cgp0 eXBlZGVmIHN0cnVjdCB7CglpbnQgdHlwZTsKCXVuc2lnbmVkIGxvbmcgc2VyaWFsOwkgCglpbnQg IHNlbmRfZXZlbnQ7CSAKCURpc3BsYXkgKmRpc3BsYXk7CSAKCVdpbmRvdyBldmVudDsKCVdpbmRv dyB3aW5kb3c7CglpbnQgeCwgeTsKCWludCB3aWR0aCwgaGVpZ2h0OwoJaW50IGJvcmRlcl93aWR0 aDsKCVdpbmRvdyBhYm92ZTsKCWludCAgb3ZlcnJpZGVfcmVkaXJlY3Q7Cn0gWENvbmZpZ3VyZUV2 ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJ IAoJaW50ICBzZW5kX2V2ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5OwkgCglXaW5kb3cgZXZlbnQ7 CglXaW5kb3cgd2luZG93OwoJaW50IHgsIHk7Cn0gWEdyYXZpdHlFdmVudDsKCnR5cGVkZWYgc3Ry dWN0IHsKCWludCB0eXBlOwoJdW5zaWduZWQgbG9uZyBzZXJpYWw7CSAKCWludCAgc2VuZF9ldmVu dDsJIAoJRGlzcGxheSAqZGlzcGxheTsJIAoJV2luZG93IHdpbmRvdzsKCWludCB3aWR0aCwgaGVp Z2h0Owp9IFhSZXNpemVSZXF1ZXN0RXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CglpbnQgdHlwZTsK CXVuc2lnbmVkIGxvbmcgc2VyaWFsOwkgCglpbnQgIHNlbmRfZXZlbnQ7CSAKCURpc3BsYXkgKmRp c3BsYXk7CSAKCVdpbmRvdyBwYXJlbnQ7CglXaW5kb3cgd2luZG93OwoJaW50IHgsIHk7CglpbnQg d2lkdGgsIGhlaWdodDsKCWludCBib3JkZXJfd2lkdGg7CglXaW5kb3cgYWJvdmU7CglpbnQgZGV0 YWlsOwkJIAoJdW5zaWduZWQgbG9uZyB2YWx1ZV9tYXNrOwp9IFhDb25maWd1cmVSZXF1ZXN0RXZl bnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CglpbnQgdHlwZTsKCXVuc2lnbmVkIGxvbmcgc2VyaWFsOwkg CglpbnQgIHNlbmRfZXZlbnQ7CSAKCURpc3BsYXkgKmRpc3BsYXk7CSAKCVdpbmRvdyBldmVudDsK CVdpbmRvdyB3aW5kb3c7CglpbnQgcGxhY2U7CQkgCn0gWENpcmN1bGF0ZUV2ZW50OwoKdHlwZWRl ZiBzdHJ1Y3QgewoJaW50IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5k X2V2ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5OwkgCglXaW5kb3cgcGFyZW50OwoJV2luZG93IHdp bmRvdzsKCWludCBwbGFjZTsJCSAKfSBYQ2lyY3VsYXRlUmVxdWVzdEV2ZW50OwoKdHlwZWRlZiBz dHJ1Y3QgewoJaW50IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5kX2V2 ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5OwkgCglXaW5kb3cgd2luZG93OwoJQXRvbSBhdG9tOwoJ VGltZSB0aW1lOwoJaW50IHN0YXRlOwkJIAp9IFhQcm9wZXJ0eUV2ZW50OwoKdHlwZWRlZiBzdHJ1 Y3QgewoJaW50IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5kX2V2ZW50 OwkgCglEaXNwbGF5ICpkaXNwbGF5OwkgCglXaW5kb3cgd2luZG93OwoJQXRvbSBzZWxlY3Rpb247 CglUaW1lIHRpbWU7Cn0gWFNlbGVjdGlvbkNsZWFyRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7Cglp bnQgdHlwZTsKCXVuc2lnbmVkIGxvbmcgc2VyaWFsOwkgCglpbnQgIHNlbmRfZXZlbnQ7CSAKCURp c3BsYXkgKmRpc3BsYXk7CSAKCVdpbmRvdyBvd25lcjsKCVdpbmRvdyByZXF1ZXN0b3I7CglBdG9t IHNlbGVjdGlvbjsKCUF0b20gdGFyZ2V0OwoJQXRvbSBwcm9wZXJ0eTsKCVRpbWUgdGltZTsKfSBY U2VsZWN0aW9uUmVxdWVzdEV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50IHR5cGU7Cgl1bnNp Z25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5kX2V2ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5 OwkgCglXaW5kb3cgcmVxdWVzdG9yOwoJQXRvbSBzZWxlY3Rpb247CglBdG9tIHRhcmdldDsKCUF0 b20gcHJvcGVydHk7CQkgCglUaW1lIHRpbWU7Cn0gWFNlbGVjdGlvbkV2ZW50OwoKdHlwZWRlZiBz dHJ1Y3QgewoJaW50IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5kX2V2 ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5OwkgCglXaW5kb3cgd2luZG93OwoJQ29sb3JtYXAgY29s b3JtYXA7CSAKCgoKCWludCAgbmV3OwoKCWludCBzdGF0ZTsJCSAKfSBYQ29sb3JtYXBFdmVudDsK CnR5cGVkZWYgc3RydWN0IHsKCWludCB0eXBlOwoJdW5zaWduZWQgbG9uZyBzZXJpYWw7CSAKCWlu dCAgc2VuZF9ldmVudDsJIAoJRGlzcGxheSAqZGlzcGxheTsJIAoJV2luZG93IHdpbmRvdzsKCUF0 b20gbWVzc2FnZV90eXBlOwoJaW50IGZvcm1hdDsKCXVuaW9uIHsKCQljaGFyIGJbMjBdOwoJCXNo b3J0IHNbMTBdOwoJCWxvbmcgbFs1XTsKCQl9IGRhdGE7Cn0gWENsaWVudE1lc3NhZ2VFdmVudDsK CnR5cGVkZWYgc3RydWN0IHsKCWludCB0eXBlOwoJdW5zaWduZWQgbG9uZyBzZXJpYWw7CSAKCWlu dCAgc2VuZF9ldmVudDsJIAoJRGlzcGxheSAqZGlzcGxheTsJIAoJV2luZG93IHdpbmRvdzsJCSAK CWludCByZXF1ZXN0OwkJIAoKCWludCBmaXJzdF9rZXljb2RlOwkgCglpbnQgY291bnQ7CQkgCn0g WE1hcHBpbmdFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKCWludCB0eXBlOwoJRGlzcGxheSAqZGlz cGxheTsJIAoJWElEIHJlc291cmNlaWQ7CQkgCgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJdW5z aWduZWQgY2hhciBlcnJvcl9jb2RlOwkgCgl1bnNpZ25lZCBjaGFyIHJlcXVlc3RfY29kZTsJIAoJ dW5zaWduZWQgY2hhciBtaW5vcl9jb2RlOwkgCn0gWEVycm9yRXZlbnQ7Cgp0eXBlZGVmIHN0cnVj dCB7CglpbnQgdHlwZTsKCXVuc2lnbmVkIGxvbmcgc2VyaWFsOwkgCglpbnQgIHNlbmRfZXZlbnQ7 CSAKCURpc3BsYXkgKmRpc3BsYXk7IAoJV2luZG93IHdpbmRvdzsJIAp9IFhBbnlFdmVudDsKCiAK CgoKdHlwZWRlZiB1bmlvbiBfWEV2ZW50IHsKICAgICAgICBpbnQgdHlwZTsJCSAKCVhBbnlFdmVu dCB4YW55OwoJWEtleUV2ZW50IHhrZXk7CglYQnV0dG9uRXZlbnQgeGJ1dHRvbjsKCVhNb3Rpb25F dmVudCB4bW90aW9uOwoJWENyb3NzaW5nRXZlbnQgeGNyb3NzaW5nOwoJWEZvY3VzQ2hhbmdlRXZl bnQgeGZvY3VzOwoJWEV4cG9zZUV2ZW50IHhleHBvc2U7CglYR3JhcGhpY3NFeHBvc2VFdmVudCB4 Z3JhcGhpY3NleHBvc2U7CglYTm9FeHBvc2VFdmVudCB4bm9leHBvc2U7CglYVmlzaWJpbGl0eUV2 ZW50IHh2aXNpYmlsaXR5OwoJWENyZWF0ZVdpbmRvd0V2ZW50IHhjcmVhdGV3aW5kb3c7CglYRGVz dHJveVdpbmRvd0V2ZW50IHhkZXN0cm95d2luZG93OwoJWFVubWFwRXZlbnQgeHVubWFwOwoJWE1h cEV2ZW50IHhtYXA7CglYTWFwUmVxdWVzdEV2ZW50IHhtYXByZXF1ZXN0OwoJWFJlcGFyZW50RXZl bnQgeHJlcGFyZW50OwoJWENvbmZpZ3VyZUV2ZW50IHhjb25maWd1cmU7CglYR3Jhdml0eUV2ZW50 IHhncmF2aXR5OwoJWFJlc2l6ZVJlcXVlc3RFdmVudCB4cmVzaXplcmVxdWVzdDsKCVhDb25maWd1 cmVSZXF1ZXN0RXZlbnQgeGNvbmZpZ3VyZXJlcXVlc3Q7CglYQ2lyY3VsYXRlRXZlbnQgeGNpcmN1 bGF0ZTsKCVhDaXJjdWxhdGVSZXF1ZXN0RXZlbnQgeGNpcmN1bGF0ZXJlcXVlc3Q7CglYUHJvcGVy dHlFdmVudCB4cHJvcGVydHk7CglYU2VsZWN0aW9uQ2xlYXJFdmVudCB4c2VsZWN0aW9uY2xlYXI7 CglYU2VsZWN0aW9uUmVxdWVzdEV2ZW50IHhzZWxlY3Rpb25yZXF1ZXN0OwoJWFNlbGVjdGlvbkV2 ZW50IHhzZWxlY3Rpb247CglYQ29sb3JtYXBFdmVudCB4Y29sb3JtYXA7CglYQ2xpZW50TWVzc2Fn ZUV2ZW50IHhjbGllbnQ7CglYTWFwcGluZ0V2ZW50IHhtYXBwaW5nOwoJWEVycm9yRXZlbnQgeGVy cm9yOwoJWEtleW1hcEV2ZW50IHhrZXltYXA7Cglsb25nIHBhZFsyNF07Cn0gWEV2ZW50OwoKCgoK IAoKCnR5cGVkZWYgc3RydWN0IHsKICAgIHNob3J0CWxiZWFyaW5nOwkgCiAgICBzaG9ydAlyYmVh cmluZzsJIAogICAgc2hvcnQJd2lkdGg7CQkgCiAgICBzaG9ydAlhc2NlbnQ7CQkgCiAgICBzaG9y dAlkZXNjZW50OwkgCiAgICB1bnNpZ25lZCBzaG9ydCBhdHRyaWJ1dGVzOwkgCn0gWENoYXJTdHJ1 Y3Q7CgogCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIEF0b20gbmFtZTsKICAgIHVuc2lnbmVkIGxv bmcgY2FyZDMyOwp9IFhGb250UHJvcDsKCnR5cGVkZWYgc3RydWN0IHsKICAgIFhFeHREYXRhCSpl eHRfZGF0YTsJIAogICAgRm9udCAgICAgICAgZmlkOyAgICAgICAgICAgICAKICAgIHVuc2lnbmVk CWRpcmVjdGlvbjsJIAogICAgdW5zaWduZWQJbWluX2NoYXJfb3JfYnl0ZTI7IAogICAgdW5zaWdu ZWQJbWF4X2NoYXJfb3JfYnl0ZTI7IAogICAgdW5zaWduZWQJbWluX2J5dGUxOwkgCiAgICB1bnNp Z25lZAltYXhfYnl0ZTE7CSAKICAgIGludCAJYWxsX2NoYXJzX2V4aXN0OyAKICAgIHVuc2lnbmVk CWRlZmF1bHRfY2hhcjsJIAogICAgaW50ICAgICAgICAgbl9wcm9wZXJ0aWVzOyAgICAKICAgIFhG b250UHJvcAkqcHJvcGVydGllczsJIAogICAgWENoYXJTdHJ1Y3QJbWluX2JvdW5kczsJIAogICAg WENoYXJTdHJ1Y3QJbWF4X2JvdW5kczsJIAogICAgWENoYXJTdHJ1Y3QJKnBlcl9jaGFyOwkgCiAg ICBpbnQJCWFzY2VudDsJCSAKICAgIGludAkJZGVzY2VudDsJIAp9IFhGb250U3RydWN0OwoKIAoK CnR5cGVkZWYgc3RydWN0IHsKICAgIGNoYXIgKmNoYXJzOwkJIAogICAgaW50IG5jaGFyczsJCQkg CiAgICBpbnQgZGVsdGE7CQkJIAogICAgRm9udCBmb250OwkJCSAKfSBYVGV4dEl0ZW07Cgp0eXBl ZGVmIHN0cnVjdCB7CQkgCiAgICB1bnNpZ25lZCBjaGFyIGJ5dGUxOwogICAgdW5zaWduZWQgY2hh ciBieXRlMjsKfSBYQ2hhcjJiOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgWENoYXIyYiAqY2hhcnM7 CQkgCiAgICBpbnQgbmNoYXJzOwkJCSAKICAgIGludCBkZWx0YTsJCQkgCiAgICBGb250IGZvbnQ7 CQkJIAp9IFhUZXh0SXRlbTE2OwoKCnR5cGVkZWYgdW5pb24geyBEaXNwbGF5ICpkaXNwbGF5OwoJ CUdDIGdjOwoJCVZpc3VhbCAqdmlzdWFsOwoJCVNjcmVlbiAqc2NyZWVuOwoJCVNjcmVlbkZvcm1h dCAqcGl4bWFwX2Zvcm1hdDsKCQlYRm9udFN0cnVjdCAqZm9udDsgfSBYRURhdGFPYmplY3Q7Cgp0 eXBlZGVmIHN0cnVjdCB7CiAgICBYUmVjdGFuZ2xlICAgICAgbWF4X2lua19leHRlbnQ7CiAgICBY UmVjdGFuZ2xlICAgICAgbWF4X2xvZ2ljYWxfZXh0ZW50Owp9IFhGb250U2V0RXh0ZW50czsKCiAK CgoKdHlwZWRlZiBzdHJ1Y3QgX1hPTSAqWE9NOwp0eXBlZGVmIHN0cnVjdCBfWE9DICpYT0MsICpY Rm9udFNldDsKCnR5cGVkZWYgc3RydWN0IHsKICAgIGNoYXIgICAgICAgICAgICpjaGFyczsKICAg IGludCAgICAgICAgICAgICBuY2hhcnM7CiAgICBpbnQgICAgICAgICAgICAgZGVsdGE7CiAgICBY Rm9udFNldCAgICAgICAgZm9udF9zZXQ7Cn0gWG1iVGV4dEl0ZW07Cgp0eXBlZGVmIHN0cnVjdCB7 CiAgICB3Y2hhcl90ICAgICAgICAqY2hhcnM7CiAgICBpbnQgICAgICAgICAgICAgbmNoYXJzOwog ICAgaW50ICAgICAgICAgICAgIGRlbHRhOwogICAgWEZvbnRTZXQgICAgICAgIGZvbnRfc2V0Owp9 IFh3Y1RleHRJdGVtOwoKCgoKCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBpbnQgY2hhcnNl dF9jb3VudDsKICAgIGNoYXIgKipjaGFyc2V0X2xpc3Q7Cn0gWE9NQ2hhclNldExpc3Q7Cgp0eXBl ZGVmIGVudW0gewogICAgWE9NT3JpZW50YXRpb25fTFRSX1RUQiwKICAgIFhPTU9yaWVudGF0aW9u X1JUTF9UVEIsCiAgICBYT01PcmllbnRhdGlvbl9UVEJfTFRSLAogICAgWE9NT3JpZW50YXRpb25f VFRCX1JUTCwKICAgIFhPTU9yaWVudGF0aW9uX0NvbnRleHQKfSBYT3JpZW50YXRpb247Cgp0eXBl ZGVmIHN0cnVjdCB7CiAgICBpbnQgbnVtX29yaWVudGF0aW9uOwogICAgWE9yaWVudGF0aW9uICpv cmllbnRhdGlvbjsJIAp9IFhPTU9yaWVudGF0aW9uOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgaW50 IG51bV9mb250OwogICAgWEZvbnRTdHJ1Y3QgKipmb250X3N0cnVjdF9saXN0OwogICAgY2hhciAq KmZvbnRfbmFtZV9saXN0Owp9IFhPTUZvbnRJbmZvOwoKdHlwZWRlZiBzdHJ1Y3QgX1hJTSAqWElN Owp0eXBlZGVmIHN0cnVjdCBfWElDICpYSUM7Cgp0eXBlZGVmIHZvaWQgKCpYSU1Qcm9jKSgKCiAg ICBYSU0sCiAgICBYUG9pbnRlciwKICAgIFhQb2ludGVyCgopOwoKdHlwZWRlZiBpbnQgICgqWElD UHJvYykoCgogICAgWElDLAogICAgWFBvaW50ZXIsCiAgICBYUG9pbnRlcgoKKTsKCnR5cGVkZWYg dm9pZCAoKlhJRFByb2MpKAoKICAgIERpc3BsYXkqLAogICAgWFBvaW50ZXIsCiAgICBYUG9pbnRl cgoKKTsKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBYSU1TdHlsZTsKCnR5cGVkZWYgc3RydWN0IHsK ICAgIHVuc2lnbmVkIHNob3J0IGNvdW50X3N0eWxlczsKICAgIFhJTVN0eWxlICpzdXBwb3J0ZWRf c3R5bGVzOwp9IFhJTVN0eWxlczsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIHZvaWQgKlhWYU5lc3RlZExpc3Q7CgoK Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBYUG9pbnRlciBjbGllbnRfZGF0YTsKICAgIFhJTVByb2Mg Y2FsbGJhY2s7Cn0gWElNQ2FsbGJhY2s7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBYUG9pbnRlciBj bGllbnRfZGF0YTsKICAgIFhJQ1Byb2MgY2FsbGJhY2s7Cn0gWElDQ2FsbGJhY2s7Cgp0eXBlZGVm IHVuc2lnbmVkIGxvbmcgWElNRmVlZGJhY2s7CgoKCgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX1hJ TVRleHQgewogICAgdW5zaWduZWQgc2hvcnQgbGVuZ3RoOwogICAgWElNRmVlZGJhY2sgKmZlZWRi YWNrOwogICAgaW50ICBlbmNvZGluZ19pc193Y2hhcjsgCiAgICB1bmlvbiB7CgljaGFyICptdWx0 aV9ieXRlOwoJd2NoYXJfdCAqd2lkZV9jaGFyOwogICAgfSBzdHJpbmc7IAp9IFhJTVRleHQ7Cgp0 eXBlZGVmCXVuc2lnbmVkIGxvbmcJIFhJTVByZWVkaXRTdGF0ZTsKCgoKCgp0eXBlZGVmCXN0cnVj dAlfWElNUHJlZWRpdFN0YXRlTm90aWZ5Q2FsbGJhY2tTdHJ1Y3QgewogICAgWElNUHJlZWRpdFN0 YXRlIHN0YXRlOwp9IFhJTVByZWVkaXRTdGF0ZU5vdGlmeUNhbGxiYWNrU3RydWN0OwoKdHlwZWRl Zgl1bnNpZ25lZCBsb25nCSBYSU1SZXNldFN0YXRlOwoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25n IFhJTVN0cmluZ0NvbnZlcnNpb25GZWVkYmFjazsKCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBfWElN U3RyaW5nQ29udmVyc2lvblRleHQgewogICAgdW5zaWduZWQgc2hvcnQgbGVuZ3RoOwogICAgWElN U3RyaW5nQ29udmVyc2lvbkZlZWRiYWNrICpmZWVkYmFjazsKICAgIGludCAgZW5jb2RpbmdfaXNf d2NoYXI7IAogICAgdW5pb24gewoJY2hhciAqbWJzOwoJd2NoYXJfdCAqd2NzOwogICAgfSBzdHJp bmc7IAp9IFhJTVN0cmluZ0NvbnZlcnNpb25UZXh0OwoKdHlwZWRlZgl1bnNpZ25lZCBzaG9ydAlY SU1TdHJpbmdDb252ZXJzaW9uUG9zaXRpb247Cgp0eXBlZGVmCXVuc2lnbmVkIHNob3J0CVhJTVN0 cmluZ0NvbnZlcnNpb25UeXBlOwoKCgoKCgp0eXBlZGVmCXVuc2lnbmVkIHNob3J0CVhJTVN0cmlu Z0NvbnZlcnNpb25PcGVyYXRpb247CgoKCgp0eXBlZGVmIGVudW0gewogICAgWElNRm9yd2FyZENo YXIsIFhJTUJhY2t3YXJkQ2hhciwKICAgIFhJTUZvcndhcmRXb3JkLCBYSU1CYWNrd2FyZFdvcmQs CiAgICBYSU1DYXJldFVwLCBYSU1DYXJldERvd24sCiAgICBYSU1OZXh0TGluZSwgWElNUHJldmlv dXNMaW5lLAogICAgWElNTGluZVN0YXJ0LCBYSU1MaW5lRW5kLCAKICAgIFhJTUFic29sdXRlUG9z aXRpb24sCiAgICBYSU1Eb250Q2hhbmdlCn0gWElNQ2FyZXREaXJlY3Rpb247Cgp0eXBlZGVmIHN0 cnVjdCBfWElNU3RyaW5nQ29udmVyc2lvbkNhbGxiYWNrU3RydWN0IHsKICAgIFhJTVN0cmluZ0Nv bnZlcnNpb25Qb3NpdGlvbiBwb3NpdGlvbjsKICAgIFhJTUNhcmV0RGlyZWN0aW9uIGRpcmVjdGlv bjsKICAgIFhJTVN0cmluZ0NvbnZlcnNpb25PcGVyYXRpb24gb3BlcmF0aW9uOwogICAgdW5zaWdu ZWQgc2hvcnQgZmFjdG9yOwogICAgWElNU3RyaW5nQ29udmVyc2lvblRleHQgKnRleHQ7Cn0gWElN U3RyaW5nQ29udmVyc2lvbkNhbGxiYWNrU3RydWN0OwoKdHlwZWRlZiBzdHJ1Y3QgX1hJTVByZWVk aXREcmF3Q2FsbGJhY2tTdHJ1Y3QgewogICAgaW50IGNhcmV0OwkJIAogICAgaW50IGNoZ19maXJz dDsJIAogICAgaW50IGNoZ19sZW5ndGg7CSAKICAgIFhJTVRleHQgKnRleHQ7Cn0gWElNUHJlZWRp dERyYXdDYWxsYmFja1N0cnVjdDsKCnR5cGVkZWYgZW51bSB7CiAgICBYSU1Jc0ludmlzaWJsZSwJ ICAKICAgIFhJTUlzUHJpbWFyeSwJIAogICAgWElNSXNTZWNvbmRhcnkJIAp9IFhJTUNhcmV0U3R5 bGU7Cgp0eXBlZGVmIHN0cnVjdCBfWElNUHJlZWRpdENhcmV0Q2FsbGJhY2tTdHJ1Y3QgewogICAg aW50IHBvc2l0aW9uOwkJICAKICAgIFhJTUNhcmV0RGlyZWN0aW9uIGRpcmVjdGlvbjsgIAogICAg WElNQ2FyZXRTdHlsZSBzdHlsZTsJICAKfSBYSU1QcmVlZGl0Q2FyZXRDYWxsYmFja1N0cnVjdDsK CnR5cGVkZWYgZW51bSB7CiAgICBYSU1UZXh0VHlwZSwKICAgIFhJTUJpdG1hcFR5cGUKfSBYSU1T dGF0dXNEYXRhVHlwZTsKCQp0eXBlZGVmIHN0cnVjdCBfWElNU3RhdHVzRHJhd0NhbGxiYWNrU3Ry dWN0IHsKICAgIFhJTVN0YXR1c0RhdGFUeXBlIHR5cGU7CiAgICB1bmlvbiB7CglYSU1UZXh0ICp0 ZXh0OwoJUGl4bWFwICBiaXRtYXA7CiAgICB9IGRhdGE7Cn0gWElNU3RhdHVzRHJhd0NhbGxiYWNr U3RydWN0OwoKdHlwZWRlZiBzdHJ1Y3QgX1hJTUhvdEtleVRyaWdnZXIgewogICAgS2V5U3ltCSBr ZXlzeW07CiAgICBpbnQJCSBtb2RpZmllcjsKICAgIGludAkJIG1vZGlmaWVyX21hc2s7Cn0gWElN SG90S2V5VHJpZ2dlcjsKCnR5cGVkZWYgc3RydWN0IF9YSU1Ib3RLZXlUcmlnZ2VycyB7CiAgICBp bnQJCQkgbnVtX2hvdF9rZXk7CiAgICBYSU1Ib3RLZXlUcmlnZ2VyCSprZXk7Cn0gWElNSG90S2V5 VHJpZ2dlcnM7Cgp0eXBlZGVmCXVuc2lnbmVkIGxvbmcJIFhJTUhvdEtleVN0YXRlOwoKCgoKdHlw ZWRlZiBzdHJ1Y3QgewogICAgdW5zaWduZWQgc2hvcnQgY291bnRfdmFsdWVzOwogICAgY2hhciAq KnN1cHBvcnRlZF92YWx1ZXM7Cn0gWElNVmFsdWVzTGlzdDsKCiAKCgoKCgpleHRlcm4gaW50IF9Y ZGVidWc7CgpleHRlcm4gWEZvbnRTdHJ1Y3QgKlhMb2FkUXVlcnlGb250KAoKICAgIERpc3BsYXkq CQkgLAogICAgY29uc3QgIGNoYXIqCSAKCik7CgpleHRlcm4gWEZvbnRTdHJ1Y3QgKlhRdWVyeUZv bnQoCgogICAgRGlzcGxheSoJCSAsCiAgICBYSUQJCQkgCgopOwoKCmV4dGVybiBYVGltZUNvb3Jk ICpYR2V0TW90aW9uRXZlbnRzKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAg VGltZQkJICwKICAgIFRpbWUJCSAsCiAgICBpbnQqCQkgCgopOwoKZXh0ZXJuIFhNb2RpZmllcktl eW1hcCAqWERlbGV0ZU1vZGlmaWVybWFwRW50cnkoCgogICAgWE1vZGlmaWVyS2V5bWFwKgkgLAoK ICAgIHVuc2lnbmVkIGludAkgLAoKCgogICAgaW50CQkJIAoKKTsKCmV4dGVybiBYTW9kaWZpZXJL ZXltYXAJKlhHZXRNb2RpZmllck1hcHBpbmcoCgogICAgRGlzcGxheSoJCSAKCik7CgpleHRlcm4g WE1vZGlmaWVyS2V5bWFwCSpYSW5zZXJ0TW9kaWZpZXJtYXBFbnRyeSgKCiAgICBYTW9kaWZpZXJL ZXltYXAqCSAsCgogICAgdW5zaWduZWQgaW50CSAsCgoKCiAgICBpbnQJCQkgICAgIAoKKTsKCmV4 dGVybiBYTW9kaWZpZXJLZXltYXAgKlhOZXdNb2RpZmllcm1hcCgKCiAgICBpbnQJCQkgCgopOwoK ZXh0ZXJuIFhJbWFnZSAqWENyZWF0ZUltYWdlKAoKICAgIERpc3BsYXkqCQkgLAogICAgVmlzdWFs KgkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBj aGFyKgkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICBpbnQJ CQkgLAogICAgaW50CQkJIAoKKTsKZXh0ZXJuIGludCAgWEluaXRJbWFnZSgKCiAgICBYSW1hZ2Uq CQkgCgopOwpleHRlcm4gWEltYWdlICpYR2V0SW1hZ2UoCgogICAgRGlzcGxheSoJCSAsCiAgICBE cmF3YWJsZQkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgdW5zaWduZWQgaW50CSAs CiAgICB1bnNpZ25lZCBpbnQJICwKICAgIHVuc2lnbmVkIGxvbmcJICwKICAgIGludAkJCSAKCik7 CmV4dGVybiBYSW1hZ2UgKlhHZXRTdWJJbWFnZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdh YmxlCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAg IHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgbG9uZwkgLAogICAgaW50CQkJICwKICAgIFhJ bWFnZSoJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJIAoKKTsKCiAKCgpleHRlcm4gRGlzcGxh eSAqWE9wZW5EaXNwbGF5KAoKICAgIGNvbnN0ICBjaGFyKgkgCgopOwoKZXh0ZXJuIHZvaWQgWHJt SW5pdGlhbGl6ZSgKCiAgICB2b2lkCgopOwoKZXh0ZXJuIGNoYXIgKlhGZXRjaEJ5dGVzKAoKICAg IERpc3BsYXkqCQkgLAogICAgaW50KgkJIAoKKTsKZXh0ZXJuIGNoYXIgKlhGZXRjaEJ1ZmZlcigK CiAgICBEaXNwbGF5KgkJICwKICAgIGludCoJCSAsCiAgICBpbnQJCQkgCgopOwpleHRlcm4gY2hh ciAqWEdldEF0b21OYW1lKAoKICAgIERpc3BsYXkqCQkgLAogICAgQXRvbQkJIAoKKTsKZXh0ZXJu IGludCAgWEdldEF0b21OYW1lcygKCiAgICBEaXNwbGF5KgkJICwKICAgIEF0b20qCQkgLAogICAg aW50CQkJICwKICAgIGNoYXIqKgkJIAoKKTsKZXh0ZXJuIGNoYXIgKlhHZXREZWZhdWx0KAoKICAg IERpc3BsYXkqCQkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBjb25zdCAgY2hhcioJIAkJICAK Cik7CmV4dGVybiBjaGFyICpYRGlzcGxheU5hbWUoCgogICAgY29uc3QgIGNoYXIqCSAKCik7CmV4 dGVybiBjaGFyICpYS2V5c3ltVG9TdHJpbmcoCgogICAgS2V5U3ltCQkgCgopOwoKZXh0ZXJuIGlu dCAoKlhTeW5jaHJvbml6ZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIGludCAJCSAKCikpKAoKICAg IERpc3BsYXkqCQkgCgopOwpleHRlcm4gaW50ICgqWFNldEFmdGVyRnVuY3Rpb24oCgogICAgRGlz cGxheSoJCSAsCiAgICBpbnQgKCopICgKCgkgICAgIERpc3BsYXkqCSAKCiAgICAgICAgICAgICkJ CSAKCikpKAoKICAgIERpc3BsYXkqCQkgCgopOwpleHRlcm4gQXRvbSBYSW50ZXJuQXRvbSgKCiAg ICBEaXNwbGF5KgkJICwKICAgIGNvbnN0ICBjaGFyKgkgLAogICAgaW50IAkJIAkJIAoKKTsKZXh0 ZXJuIGludCAgWEludGVybkF0b21zKAoKICAgIERpc3BsYXkqCQkgLAogICAgY2hhcioqCQkgLAog ICAgaW50CQkJICwKICAgIGludCAJCSAsCiAgICBBdG9tKgkJIAoKKTsKZXh0ZXJuIENvbG9ybWFw IFhDb3B5Q29sb3JtYXBBbmRGcmVlKAoKICAgIERpc3BsYXkqCQkgLAogICAgQ29sb3JtYXAJCSAK Cik7CmV4dGVybiBDb2xvcm1hcCBYQ3JlYXRlQ29sb3JtYXAoCgogICAgRGlzcGxheSoJCSAsCiAg ICBXaW5kb3cJCSAsCiAgICBWaXN1YWwqCQkgLAogICAgaW50CQkJIAkJCSAKCik7CmV4dGVybiBD dXJzb3IgWENyZWF0ZVBpeG1hcEN1cnNvcigKCiAgICBEaXNwbGF5KgkJICwKICAgIFBpeG1hcAkJ ICwKICAgIFBpeG1hcAkJICwKICAgIFhDb2xvcioJCSAsCiAgICBYQ29sb3IqCQkgLAogICAgdW5z aWduZWQgaW50CSAsCiAgICB1bnNpZ25lZCBpbnQJIAkJCSAgIAoKKTsKZXh0ZXJuIEN1cnNvciBY Q3JlYXRlR2x5cGhDdXJzb3IoCgogICAgRGlzcGxheSoJCSAsCiAgICBGb250CQkgLAogICAgRm9u dAkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICBYQ29sb3Iq CQkgLAogICAgWENvbG9yKgkJIAoKKTsKZXh0ZXJuIEN1cnNvciBYQ3JlYXRlRm9udEN1cnNvcigK CiAgICBEaXNwbGF5KgkJICwKICAgIHVuc2lnbmVkIGludAkgCgopOwpleHRlcm4gRm9udCBYTG9h ZEZvbnQoCgogICAgRGlzcGxheSoJCSAsCiAgICBjb25zdCAgY2hhcioJIAoKKTsKZXh0ZXJuIEdD IFhDcmVhdGVHQygKCiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxlCQkgLAogICAgdW5zaWdu ZWQgbG9uZwkgLAogICAgWEdDVmFsdWVzKgkJIAoKKTsKZXh0ZXJuIEdDb250ZXh0IFhHQ29udGV4 dEZyb21HQygKCiAgICBHQwkJCSAKCik7CmV4dGVybiB2b2lkIFhGbHVzaEdDKAoKICAgIERpc3Bs YXkqCQkgLAogICAgR0MJCQkgCgopOwpleHRlcm4gUGl4bWFwIFhDcmVhdGVQaXhtYXAoCgogICAg RGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5z aWduZWQgaW50CSAsCiAgICB1bnNpZ25lZCBpbnQJIAkJICAgICAgICAKCik7CmV4dGVybiBQaXht YXAgWENyZWF0ZUJpdG1hcEZyb21EYXRhKAoKICAgIERpc3BsYXkqCQkgLAogICAgRHJhd2FibGUJ CSAsCiAgICBjb25zdCAgY2hhcioJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQg aW50CSAKCik7CmV4dGVybiBQaXhtYXAgWENyZWF0ZVBpeG1hcEZyb21CaXRtYXBEYXRhKAoKICAg IERpc3BsYXkqCQkgLAogICAgRHJhd2FibGUJCSAsCiAgICBjaGFyKgkJICwKICAgIHVuc2lnbmVk IGludAkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICB1bnNpZ25lZCBsb25nCSAsCiAgICB1bnNp Z25lZCBsb25nCSAsCiAgICB1bnNpZ25lZCBpbnQJIAoKKTsKZXh0ZXJuIFdpbmRvdyBYQ3JlYXRl U2ltcGxlV2luZG93KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgaW50CQkJ ICwKICAgIGludAkJCSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIHVuc2lnbmVkIGludAkgLAog ICAgdW5zaWduZWQgaW50CSAsCiAgICB1bnNpZ25lZCBsb25nCSAsCiAgICB1bnNpZ25lZCBsb25n CSAKCik7CmV4dGVybiBXaW5kb3cgWEdldFNlbGVjdGlvbk93bmVyKAoKICAgIERpc3BsYXkqCQkg LAogICAgQXRvbQkJIAoKKTsKZXh0ZXJuIFdpbmRvdyBYQ3JlYXRlV2luZG93KAoKICAgIERpc3Bs YXkqCQkgLAogICAgV2luZG93CQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICB1bnNp Z25lZCBpbnQJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICBp bnQJCQkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICBWaXN1YWwqCQkgLAogICAgdW5zaWduZWQg bG9uZwkgLAogICAgWFNldFdpbmRvd0F0dHJpYnV0ZXMqCSAKCik7IApleHRlcm4gQ29sb3JtYXAg KlhMaXN0SW5zdGFsbGVkQ29sb3JtYXBzKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkg LAogICAgaW50KgkJIAoKKTsKZXh0ZXJuIGNoYXIgKipYTGlzdEZvbnRzKAoKICAgIERpc3BsYXkq CQkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBpbnQJCQkgLAogICAgaW50KgkJIAoKKTsKZXh0 ZXJuIGNoYXIgKipYTGlzdEZvbnRzV2l0aEluZm8oCgogICAgRGlzcGxheSoJCSAsCiAgICBjb25z dCAgY2hhcioJICwKICAgIGludAkJCSAsCiAgICBpbnQqCQkgLAogICAgWEZvbnRTdHJ1Y3QqKgkg CgopOwpleHRlcm4gY2hhciAqKlhHZXRGb250UGF0aCgKCiAgICBEaXNwbGF5KgkJICwKICAgIGlu dCoJCSAKCik7CmV4dGVybiBjaGFyICoqWExpc3RFeHRlbnNpb25zKAoKICAgIERpc3BsYXkqCQkg LAogICAgaW50KgkJIAoKKTsKZXh0ZXJuIEF0b20gKlhMaXN0UHJvcGVydGllcygKCiAgICBEaXNw bGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIGludCoJCSAKCik7CmV4dGVybiBYSG9zdEFkZHJl c3MgKlhMaXN0SG9zdHMoCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQqCQkgLAogICAgaW50ICoJ CSAKCik7CmV4dGVybiBLZXlTeW0gWEtleWNvZGVUb0tleXN5bSgKCiAgICBEaXNwbGF5KgkJICwK CiAgICB1bnNpZ25lZCBpbnQJICwKCgoKICAgIGludAkJCSAKCik7CmV4dGVybiBLZXlTeW0gWExv b2t1cEtleXN5bSgKCiAgICBYS2V5RXZlbnQqCQkgLAogICAgaW50CQkJIAoKKTsKZXh0ZXJuIEtl eVN5bSAqWEdldEtleWJvYXJkTWFwcGluZygKCiAgICBEaXNwbGF5KgkJICwKCiAgICB1bnNpZ25l ZCBpbnQJICwKCgoKICAgIGludAkJCSAsCiAgICBpbnQqCQkgCgopOwpleHRlcm4gS2V5U3ltIFhT dHJpbmdUb0tleXN5bSgKCiAgICBjb25zdCAgY2hhcioJIAoKKTsKZXh0ZXJuIGxvbmcgWE1heFJl cXVlc3RTaXplKAoKICAgIERpc3BsYXkqCQkgCgopOwpleHRlcm4gbG9uZyBYRXh0ZW5kZWRNYXhS ZXF1ZXN0U2l6ZSgKCiAgICBEaXNwbGF5KgkJIAoKKTsKZXh0ZXJuIGNoYXIgKlhSZXNvdXJjZU1h bmFnZXJTdHJpbmcoCgogICAgRGlzcGxheSoJCSAKCik7CmV4dGVybiBjaGFyICpYU2NyZWVuUmVz b3VyY2VTdHJpbmcoCgoJU2NyZWVuKgkJIAoKKTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgWERpc3Bs YXlNb3Rpb25CdWZmZXJTaXplKAoKICAgIERpc3BsYXkqCQkgCgopOwpleHRlcm4gVmlzdWFsSUQg WFZpc3VhbElERnJvbVZpc3VhbCgKCiAgICBWaXN1YWwqCQkgCgopOwoKIAoKZXh0ZXJuIGludCAg WEluaXRUaHJlYWRzKAoKICAgIHZvaWQKCik7CgpleHRlcm4gdm9pZCBYTG9ja0Rpc3BsYXkoCgog ICAgRGlzcGxheSoJCSAKCik7CgpleHRlcm4gdm9pZCBYVW5sb2NrRGlzcGxheSgKCiAgICBEaXNw bGF5KgkJIAoKKTsKCiAKCmV4dGVybiBYRXh0Q29kZXMgKlhJbml0RXh0ZW5zaW9uKAoKICAgIERp c3BsYXkqCQkgLAogICAgY29uc3QgIGNoYXIqCSAKCik7CgpleHRlcm4gWEV4dENvZGVzICpYQWRk RXh0ZW5zaW9uKAoKICAgIERpc3BsYXkqCQkgCgopOwpleHRlcm4gWEV4dERhdGEgKlhGaW5kT25F eHRlbnNpb25MaXN0KAoKICAgIFhFeHREYXRhKioJCSAsCiAgICBpbnQJCQkgCgopOwpleHRlcm4g WEV4dERhdGEgKipYRUhlYWRPZkV4dGVuc2lvbkxpc3QoCgogICAgWEVEYXRhT2JqZWN0CSAKCik7 CgogCmV4dGVybiBXaW5kb3cgWFJvb3RXaW5kb3coCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQJ CQkgCgopOwpleHRlcm4gV2luZG93IFhEZWZhdWx0Um9vdFdpbmRvdygKCiAgICBEaXNwbGF5KgkJ IAoKKTsKZXh0ZXJuIFdpbmRvdyBYUm9vdFdpbmRvd09mU2NyZWVuKAoKICAgIFNjcmVlbioJCSAK Cik7CmV4dGVybiBWaXN1YWwgKlhEZWZhdWx0VmlzdWFsKAoKICAgIERpc3BsYXkqCQkgLAogICAg aW50CQkJIAoKKTsKZXh0ZXJuIFZpc3VhbCAqWERlZmF1bHRWaXN1YWxPZlNjcmVlbigKCiAgICBT Y3JlZW4qCQkgCgopOwpleHRlcm4gR0MgWERlZmF1bHRHQygKCiAgICBEaXNwbGF5KgkJICwKICAg IGludAkJCSAKCik7CmV4dGVybiBHQyBYRGVmYXVsdEdDT2ZTY3JlZW4oCgogICAgU2NyZWVuKgkJ IAoKKTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgWEJsYWNrUGl4ZWwoCgogICAgRGlzcGxheSoJCSAs CiAgICBpbnQJCQkgCgopOwpleHRlcm4gdW5zaWduZWQgbG9uZyBYV2hpdGVQaXhlbCgKCiAgICBE aXNwbGF5KgkJICwKICAgIGludAkJCSAKCik7CmV4dGVybiB1bnNpZ25lZCBsb25nIFhBbGxQbGFu ZXMoCgogICAgdm9pZAoKKTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgWEJsYWNrUGl4ZWxPZlNjcmVl bigKCiAgICBTY3JlZW4qCQkgCgopOwpleHRlcm4gdW5zaWduZWQgbG9uZyBYV2hpdGVQaXhlbE9m U2NyZWVuKAoKICAgIFNjcmVlbioJCSAKCik7CmV4dGVybiB1bnNpZ25lZCBsb25nIFhOZXh0UmVx dWVzdCgKCiAgICBEaXNwbGF5KgkJIAoKKTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgWExhc3RLbm93 blJlcXVlc3RQcm9jZXNzZWQoCgogICAgRGlzcGxheSoJCSAKCik7CmV4dGVybiBjaGFyICpYU2Vy dmVyVmVuZG9yKAoKICAgIERpc3BsYXkqCQkgCgopOwpleHRlcm4gY2hhciAqWERpc3BsYXlTdHJp bmcoCgogICAgRGlzcGxheSoJCSAKCik7CmV4dGVybiBDb2xvcm1hcCBYRGVmYXVsdENvbG9ybWFw KAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50CQkJIAoKKTsKZXh0ZXJuIENvbG9ybWFwIFhEZWZh dWx0Q29sb3JtYXBPZlNjcmVlbigKCiAgICBTY3JlZW4qCQkgCgopOwpleHRlcm4gRGlzcGxheSAq WERpc3BsYXlPZlNjcmVlbigKCiAgICBTY3JlZW4qCQkgCgopOwpleHRlcm4gU2NyZWVuICpYU2Ny ZWVuT2ZEaXNwbGF5KAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50CQkJIAoKKTsKZXh0ZXJuIFNj cmVlbiAqWERlZmF1bHRTY3JlZW5PZkRpc3BsYXkoCgogICAgRGlzcGxheSoJCSAKCik7CmV4dGVy biBsb25nIFhFdmVudE1hc2tPZlNjcmVlbigKCiAgICBTY3JlZW4qCQkgCgopOwoKZXh0ZXJuIGlu dCBYU2NyZWVuTnVtYmVyT2ZTY3JlZW4oCgogICAgU2NyZWVuKgkJIAoKKTsKCnR5cGVkZWYgaW50 ICgqWEVycm9ySGFuZGxlcikgKAkgICAgIAoKICAgIERpc3BsYXkqCQkgLAogICAgWEVycm9yRXZl bnQqCSAKCik7CgpleHRlcm4gWEVycm9ySGFuZGxlciBYU2V0RXJyb3JIYW5kbGVyICgKCiAgICBY RXJyb3JIYW5kbGVyCSAKCik7CgoKdHlwZWRlZiBpbnQgKCpYSU9FcnJvckhhbmRsZXIpICggICAg IAoKICAgIERpc3BsYXkqCQkgCgopOwoKZXh0ZXJuIFhJT0Vycm9ySGFuZGxlciBYU2V0SU9FcnJv ckhhbmRsZXIgKAoKICAgIFhJT0Vycm9ySGFuZGxlcgkgCgopOwoKCmV4dGVybiBYUGl4bWFwRm9y bWF0VmFsdWVzICpYTGlzdFBpeG1hcEZvcm1hdHMoCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQq CQkgCgopOwpleHRlcm4gaW50ICpYTGlzdERlcHRocygKCiAgICBEaXNwbGF5KgkJICwKICAgIGlu dAkJCSAsCiAgICBpbnQqCQkgCgopOwoKIAogCmV4dGVybiBpbnQgIFhSZWNvbmZpZ3VyZVdNV2lu ZG93KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgaW50CQkJICwKICAgIHVu c2lnbmVkIGludAkgLAogICAgWFdpbmRvd0NoYW5nZXMqCSAKCik7CgpleHRlcm4gaW50ICBYR2V0 V01Qcm90b2NvbHMoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBBdG9tKioJ CSAsCiAgICBpbnQqCQkgCgopOwpleHRlcm4gaW50ICBYU2V0V01Qcm90b2NvbHMoCgogICAgRGlz cGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBBdG9tKgkJICwKICAgIGludAkJCSAKCik7CmV4 dGVybiBpbnQgIFhJY29uaWZ5V2luZG93KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkg LAogICAgaW50CQkJIAoKKTsKZXh0ZXJuIGludCAgWFdpdGhkcmF3V2luZG93KAoKICAgIERpc3Bs YXkqCQkgLAogICAgV2luZG93CQkgLAogICAgaW50CQkJIAoKKTsKZXh0ZXJuIGludCAgWEdldENv bW1hbmQoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBjaGFyKioqCQkgLAog ICAgaW50KgkJIAoKKTsKZXh0ZXJuIGludCAgWEdldFdNQ29sb3JtYXBXaW5kb3dzKAoKICAgIERp c3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgV2luZG93KioJCSAsCiAgICBpbnQqCQkgCgop OwpleHRlcm4gaW50ICBYU2V0V01Db2xvcm1hcFdpbmRvd3MoCgogICAgRGlzcGxheSoJCSAsCiAg ICBXaW5kb3cJCSAsCiAgICBXaW5kb3cqCQkgLAogICAgaW50CQkJIAoKKTsKZXh0ZXJuIHZvaWQg WEZyZWVTdHJpbmdMaXN0KAoKICAgIGNoYXIqKgkJIAoKKTsKZXh0ZXJuIGludCBYU2V0VHJhbnNp ZW50Rm9ySGludCgKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIFdpbmRvdwkJ IAoKKTsKCiAKCmV4dGVybiBpbnQgWEFjdGl2YXRlU2NyZWVuU2F2ZXIoCgogICAgRGlzcGxheSoJ CSAKCik7CgpleHRlcm4gaW50IFhBZGRIb3N0KAoKICAgIERpc3BsYXkqCQkgLAogICAgWEhvc3RB ZGRyZXNzKgkgCgopOwoKZXh0ZXJuIGludCBYQWRkSG9zdHMoCgogICAgRGlzcGxheSoJCSAsCiAg ICBYSG9zdEFkZHJlc3MqCSAsCiAgICBpbnQJCQkgICAgIAoKKTsKCmV4dGVybiBpbnQgWEFkZFRv RXh0ZW5zaW9uTGlzdCgKCiAgICBzdHJ1Y3QgX1hFeHREYXRhKioJICwKICAgIFhFeHREYXRhKgkJ IAoKKTsKCmV4dGVybiBpbnQgWEFkZFRvU2F2ZVNldCgKCiAgICBEaXNwbGF5KgkJICwKICAgIFdp bmRvdwkJIAoKKTsKCmV4dGVybiBpbnQgIFhBbGxvY0NvbG9yKAoKICAgIERpc3BsYXkqCQkgLAog ICAgQ29sb3JtYXAJCSAsCiAgICBYQ29sb3IqCQkgCgopOwoKZXh0ZXJuIGludCAgWEFsbG9jQ29s b3JDZWxscygKCiAgICBEaXNwbGF5KgkJICwKICAgIENvbG9ybWFwCQkgLAogICAgaW50IAkgICAg ICAgICAsCiAgICB1bnNpZ25lZCBsb25nKgkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICB1bnNp Z25lZCBsb25nKgkgLAogICAgdW5zaWduZWQgaW50IAkgCgopOwoKZXh0ZXJuIGludCAgWEFsbG9j Q29sb3JQbGFuZXMoCgogICAgRGlzcGxheSoJCSAsCiAgICBDb2xvcm1hcAkJICwKICAgIGludCAJ CSAsCiAgICB1bnNpZ25lZCBsb25nKgkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBp bnQJCQkgLAogICAgaW50CQkJICwKICAgIHVuc2lnbmVkIGxvbmcqCSAsCiAgICB1bnNpZ25lZCBs b25nKgkgLAogICAgdW5zaWduZWQgbG9uZyoJIAoKKTsKCmV4dGVybiBpbnQgIFhBbGxvY05hbWVk Q29sb3IoCgogICAgRGlzcGxheSoJCSAsCiAgICBDb2xvcm1hcAkJICwKICAgIGNvbnN0ICBjaGFy KgkgLAogICAgWENvbG9yKgkJICwKICAgIFhDb2xvcioJCSAKCik7CgpleHRlcm4gaW50IFhBbGxv d0V2ZW50cygKCiAgICBEaXNwbGF5KgkJICwKICAgIGludAkJCSAsCiAgICBUaW1lCQkgCgopOwoK ZXh0ZXJuIGludCBYQXV0b1JlcGVhdE9mZigKCiAgICBEaXNwbGF5KgkJIAoKKTsKCmV4dGVybiBp bnQgWEF1dG9SZXBlYXRPbigKCiAgICBEaXNwbGF5KgkJIAoKKTsKCmV4dGVybiBpbnQgWEJlbGwo CgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYQml0bWFwQml0 T3JkZXIoCgogICAgRGlzcGxheSoJCSAKCik7CgpleHRlcm4gaW50IFhCaXRtYXBQYWQoCgogICAg RGlzcGxheSoJCSAKCik7CgpleHRlcm4gaW50IFhCaXRtYXBVbml0KAoKICAgIERpc3BsYXkqCQkg CgopOwoKZXh0ZXJuIGludCBYQ2VsbHNPZlNjcmVlbigKCiAgICBTY3JlZW4qCQkgCgopOwoKZXh0 ZXJuIGludCBYQ2hhbmdlQWN0aXZlUG9pbnRlckdyYWIoCgogICAgRGlzcGxheSoJCSAsCiAgICB1 bnNpZ25lZCBpbnQJICwKICAgIEN1cnNvcgkJICwKICAgIFRpbWUJCSAKCik7CgpleHRlcm4gaW50 IFhDaGFuZ2VHQygKCiAgICBEaXNwbGF5KgkJICwKICAgIEdDCQkJICwKICAgIHVuc2lnbmVkIGxv bmcJICwKICAgIFhHQ1ZhbHVlcyoJCSAKCik7CgpleHRlcm4gaW50IFhDaGFuZ2VLZXlib2FyZENv bnRyb2woCgogICAgRGlzcGxheSoJCSAsCiAgICB1bnNpZ25lZCBsb25nCSAsCiAgICBYS2V5Ym9h cmRDb250cm9sKgkgCgopOwoKZXh0ZXJuIGludCBYQ2hhbmdlS2V5Ym9hcmRNYXBwaW5nKAoKICAg IERpc3BsYXkqCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBLZXlTeW0qCQkgLAog ICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWENoYW5nZVBvaW50ZXJDb250cm9sKAoKICAgIERp c3BsYXkqCQkgLAogICAgaW50IAkJICwKICAgIGludCAJCSAsCiAgICBpbnQJCQkgLAogICAgaW50 CQkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhDaGFuZ2VQcm9wZXJ0eSgKCiAgICBE aXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIEF0b20JCSAsCiAgICBBdG9tCQkgLAogICAg aW50CQkJICwKICAgIGludAkJCSAsCiAgICBjb25zdCAgdW5zaWduZWQgY2hhcioJICwKICAgIGlu dAkJCSAKCik7CgpleHRlcm4gaW50IFhDaGFuZ2VTYXZlU2V0KAoKICAgIERpc3BsYXkqCQkgLAog ICAgV2luZG93CQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWENoYW5nZVdpbmRvd0F0 dHJpYnV0ZXMoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICB1bnNpZ25lZCBs b25nCSAsCiAgICBYU2V0V2luZG93QXR0cmlidXRlcyogIAoKKTsKCmV4dGVybiBpbnQgIFhDaGVj a0lmRXZlbnQoCgogICAgRGlzcGxheSoJCSAsCiAgICBYRXZlbnQqCQkgLAogICAgaW50ICAoKikg KAoKCSAgICAgICBEaXNwbGF5KgkJCSAsCiAgICAgICAgICAgICAgIFhFdmVudCoJCQkgLAogICAg ICAgICAgICAgICBYUG9pbnRlcgkJCSAKCiAgICAgICAgICAgICApCQkgLAogICAgWFBvaW50ZXIJ CSAKCik7CgpleHRlcm4gaW50ICBYQ2hlY2tNYXNrRXZlbnQoCgogICAgRGlzcGxheSoJCSAsCiAg ICBsb25nCQkgLAogICAgWEV2ZW50KgkJIAoKKTsKCmV4dGVybiBpbnQgIFhDaGVja1R5cGVkRXZl bnQoCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQJCQkgLAogICAgWEV2ZW50KgkJIAoKKTsKCmV4 dGVybiBpbnQgIFhDaGVja1R5cGVkV2luZG93RXZlbnQoCgogICAgRGlzcGxheSoJCSAsCiAgICBX aW5kb3cJCSAsCiAgICBpbnQJCQkgLAogICAgWEV2ZW50KgkJIAoKKTsKCmV4dGVybiBpbnQgIFhD aGVja1dpbmRvd0V2ZW50KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgbG9u ZwkJICwKICAgIFhFdmVudCoJCSAKCik7CgpleHRlcm4gaW50IFhDaXJjdWxhdGVTdWJ3aW5kb3dz KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVy biBpbnQgWENpcmN1bGF0ZVN1YndpbmRvd3NEb3duKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2lu ZG93CQkgCgopOwoKZXh0ZXJuIGludCBYQ2lyY3VsYXRlU3Vid2luZG93c1VwKAoKICAgIERpc3Bs YXkqCQkgLAogICAgV2luZG93CQkgCgopOwoKZXh0ZXJuIGludCBYQ2xlYXJBcmVhKAoKICAgIERp c3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICB1 bnNpZ25lZCBpbnQJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgaW50IAkJIAoKKTsKCmV4dGVy biBpbnQgWENsZWFyV2luZG93KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgCgopOwoK ZXh0ZXJuIGludCBYQ2xvc2VEaXNwbGF5KAoKICAgIERpc3BsYXkqCQkgCgopOwoKZXh0ZXJuIGlu dCBYQ29uZmlndXJlV2luZG93KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAg dW5zaWduZWQgaW50CSAsCiAgICBYV2luZG93Q2hhbmdlcyoJIAkJIAoKKTsKCmV4dGVybiBpbnQg WENvbm5lY3Rpb25OdW1iZXIoCgogICAgRGlzcGxheSoJCSAKCik7CgpleHRlcm4gaW50IFhDb252 ZXJ0U2VsZWN0aW9uKAoKICAgIERpc3BsYXkqCQkgLAogICAgQXRvbQkJICwKICAgIEF0b20gCQkg LAogICAgQXRvbQkJICwKICAgIFdpbmRvdwkJICwKICAgIFRpbWUJCSAKCik7CgpleHRlcm4gaW50 IFhDb3B5QXJlYSgKCiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxlCQkgLAogICAgRHJhd2Fi bGUJCSAsCiAgICBHQwkJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJICwKICAgIHVuc2lnbmVk IGludAkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJIAoKKTsK CmV4dGVybiBpbnQgWENvcHlHQygKCiAgICBEaXNwbGF5KgkJICwKICAgIEdDCQkJICwKICAgIHVu c2lnbmVkIGxvbmcJICwKICAgIEdDCQkJIAoKKTsKCmV4dGVybiBpbnQgWENvcHlQbGFuZSgKCiAg ICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxlCQkgLAogICAgRHJhd2FibGUJCSAsCiAgICBHQwkJ CSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5z aWduZWQgaW50CSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJICwKICAgIHVuc2lnbmVkIGxvbmcJ IAoKKTsKCmV4dGVybiBpbnQgWERlZmF1bHREZXB0aCgKCiAgICBEaXNwbGF5KgkJICwKICAgIGlu dAkJCSAKCik7CgpleHRlcm4gaW50IFhEZWZhdWx0RGVwdGhPZlNjcmVlbigKCiAgICBTY3JlZW4q CQkgCgopOwoKZXh0ZXJuIGludCBYRGVmYXVsdFNjcmVlbigKCiAgICBEaXNwbGF5KgkJIAoKKTsK CmV4dGVybiBpbnQgWERlZmluZUN1cnNvcigKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJ ICwKICAgIEN1cnNvcgkJIAoKKTsKCmV4dGVybiBpbnQgWERlbGV0ZVByb3BlcnR5KAoKICAgIERp c3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgQXRvbQkJIAoKKTsKCmV4dGVybiBpbnQgWERl c3Ryb3lXaW5kb3coCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAKCik7CgpleHRlcm4g aW50IFhEZXN0cm95U3Vid2luZG93cygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJIAoK KTsKCmV4dGVybiBpbnQgWERvZXNCYWNraW5nU3RvcmUoCgogICAgU2NyZWVuKgkJICAgICAKCik7 CgpleHRlcm4gaW50ICBYRG9lc1NhdmVVbmRlcnMoCgogICAgU2NyZWVuKgkJIAoKKTsKCmV4dGVy biBpbnQgWERpc2FibGVBY2Nlc3NDb250cm9sKAoKICAgIERpc3BsYXkqCQkgCgopOwoKCmV4dGVy biBpbnQgWERpc3BsYXlDZWxscygKCiAgICBEaXNwbGF5KgkJICwKICAgIGludAkJCSAKCik7Cgpl eHRlcm4gaW50IFhEaXNwbGF5SGVpZ2h0KAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50CQkJIAoK KTsKCmV4dGVybiBpbnQgWERpc3BsYXlIZWlnaHRNTSgKCiAgICBEaXNwbGF5KgkJICwKICAgIGlu dAkJCSAKCik7CgpleHRlcm4gaW50IFhEaXNwbGF5S2V5Y29kZXMoCgogICAgRGlzcGxheSoJCSAs CiAgICBpbnQqCQkgLAogICAgaW50KgkJIAoKKTsKCmV4dGVybiBpbnQgWERpc3BsYXlQbGFuZXMo CgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYRGlzcGxheVdp ZHRoKAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWERpc3Bs YXlXaWR0aE1NKAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQg WERyYXdBcmMoCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJICwKICAgIEdDCQkJICwK ICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICB1bnNpZ25l ZCBpbnQJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYRHJhd0Fy Y3MoCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJICwKICAgIEdDCQkJICwKICAgIFhB cmMqCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWERyYXdJbWFnZVN0cmluZygKCiAg ICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxlCQkgLAogICAgR0MJCQkgLAogICAgaW50CQkJICwK ICAgIGludAkJCSAsCiAgICBjb25zdCAgY2hhcioJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4g aW50IFhEcmF3SW1hZ2VTdHJpbmcxNigKCiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxlCQkg LAogICAgR0MJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBjb25zdCAgWENoYXIy YioJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhEcmF3TGluZSgKCiAgICBEaXNwbGF5 KgkJICwKICAgIERyYXdhYmxlCQkgLAogICAgR0MJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJ CSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWERyYXdMaW5lcygK CiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxlCQkgLAogICAgR0MJCQkgLAogICAgWFBvaW50 KgkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYRHJhd1BvaW50 KAoKICAgIERpc3BsYXkqCQkgLAogICAgRHJhd2FibGUJCSAsCiAgICBHQwkJCSAsCiAgICBpbnQJ CQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWERyYXdQb2ludHMoCgogICAgRGlzcGxh eSoJCSAsCiAgICBEcmF3YWJsZQkJICwKICAgIEdDCQkJICwKICAgIFhQb2ludCoJCSAsCiAgICBp bnQJCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWERyYXdSZWN0YW5nbGUoCgogICAg RGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJICwKICAgIEdDCQkJICwKICAgIGludAkJCSAsCiAg ICBpbnQJCQkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICB1bnNpZ25lZCBpbnQJIAoKKTsKCmV4 dGVybiBpbnQgWERyYXdSZWN0YW5nbGVzKAoKICAgIERpc3BsYXkqCQkgLAogICAgRHJhd2FibGUJ CSAsCiAgICBHQwkJCSAsCiAgICBYUmVjdGFuZ2xlKgkJICwKICAgIGludAkJCSAKCik7CgpleHRl cm4gaW50IFhEcmF3U2VnbWVudHMoCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJICwK ICAgIEdDCQkJICwKICAgIFhTZWdtZW50KgkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50 IFhEcmF3U3RyaW5nKAoKICAgIERpc3BsYXkqCQkgLAogICAgRHJhd2FibGUJCSAsCiAgICBHQwkJ CSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJICwKICAgIGNvbnN0ICBjaGFyKgkgLAogICAgaW50 CQkJIAoKKTsKCmV4dGVybiBpbnQgWERyYXdTdHJpbmcxNigKCiAgICBEaXNwbGF5KgkJICwKICAg IERyYXdhYmxlCQkgLAogICAgR0MJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBj b25zdCAgWENoYXIyYioJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhEcmF3VGV4dCgK CiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxlCQkgLAogICAgR0MJCQkgLAogICAgaW50CQkJ ICwKICAgIGludAkJCSAsCiAgICBYVGV4dEl0ZW0qCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVy biBpbnQgWERyYXdUZXh0MTYoCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJICwKICAg IEdDCQkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgWFRleHRJdGVtMTYqCSAsCiAg ICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYRW5hYmxlQWNjZXNzQ29udHJvbCgKCiAgICBEaXNw bGF5KgkJIAoKKTsKCmV4dGVybiBpbnQgWEV2ZW50c1F1ZXVlZCgKCiAgICBEaXNwbGF5KgkJICwK ICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50ICBYRmV0Y2hOYW1lKAoKICAgIERpc3BsYXkqCQkg LAogICAgV2luZG93CQkgLAogICAgY2hhcioqCQkgCgopOwoKZXh0ZXJuIGludCBYRmlsbEFyYygK CiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxlCQkgLAogICAgR0MJCQkgLAogICAgaW50CQkJ ICwKICAgIGludAkJCSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIHVuc2lnbmVkIGludAkgLAog ICAgaW50CQkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhGaWxsQXJjcygKCiAgICBE aXNwbGF5KgkJICwKICAgIERyYXdhYmxlCQkgLAogICAgR0MJCQkgLAogICAgWEFyYyoJCSAsCiAg ICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYRmlsbFBvbHlnb24oCgogICAgRGlzcGxheSoJCSAs CiAgICBEcmF3YWJsZQkJICwKICAgIEdDCQkJICwKICAgIFhQb2ludCoJCSAsCiAgICBpbnQJCQkg LAogICAgaW50CQkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhGaWxsUmVjdGFuZ2xl KAoKICAgIERpc3BsYXkqCQkgLAogICAgRHJhd2FibGUJCSAsCiAgICBHQwkJCSAsCiAgICBpbnQJ CQkgLAogICAgaW50CQkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAK Cik7CgpleHRlcm4gaW50IFhGaWxsUmVjdGFuZ2xlcygKCiAgICBEaXNwbGF5KgkJICwKICAgIERy YXdhYmxlCQkgLAogICAgR0MJCQkgLAogICAgWFJlY3RhbmdsZSoJCSAsCiAgICBpbnQJCQkgCgop OwoKZXh0ZXJuIGludCBYRmx1c2goCgogICAgRGlzcGxheSoJCSAKCik7CgpleHRlcm4gaW50IFhG b3JjZVNjcmVlblNhdmVyKAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVy biBpbnQgWEZyZWUoCgogICAgdm9pZCoJCSAKCik7CgpleHRlcm4gaW50IFhGcmVlQ29sb3JtYXAo CgogICAgRGlzcGxheSoJCSAsCiAgICBDb2xvcm1hcAkJIAoKKTsKCmV4dGVybiBpbnQgWEZyZWVD b2xvcnMoCgogICAgRGlzcGxheSoJCSAsCiAgICBDb2xvcm1hcAkJICwKICAgIHVuc2lnbmVkIGxv bmcqCSAsCiAgICBpbnQJCQkgLAogICAgdW5zaWduZWQgbG9uZwkgCgopOwoKZXh0ZXJuIGludCBY RnJlZUN1cnNvcigKCiAgICBEaXNwbGF5KgkJICwKICAgIEN1cnNvcgkJIAoKKTsKCmV4dGVybiBp bnQgWEZyZWVFeHRlbnNpb25MaXN0KAoKICAgIGNoYXIqKgkJICAgICAKCik7CgpleHRlcm4gaW50 IFhGcmVlRm9udCgKCiAgICBEaXNwbGF5KgkJICwKICAgIFhGb250U3RydWN0KgkgCgopOwoKZXh0 ZXJuIGludCBYRnJlZUZvbnRJbmZvKAoKICAgIGNoYXIqKgkJICwKICAgIFhGb250U3RydWN0Kgkg LAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWEZyZWVGb250TmFtZXMoCgogICAgY2hhcioq CQkgCgopOwoKZXh0ZXJuIGludCBYRnJlZUZvbnRQYXRoKAoKICAgIGNoYXIqKgkJIAoKKTsKCmV4 dGVybiBpbnQgWEZyZWVHQygKCiAgICBEaXNwbGF5KgkJICwKICAgIEdDCQkJIAoKKTsKCmV4dGVy biBpbnQgWEZyZWVNb2RpZmllcm1hcCgKCiAgICBYTW9kaWZpZXJLZXltYXAqCSAKCik7CgpleHRl cm4gaW50IFhGcmVlUGl4bWFwKAoKICAgIERpc3BsYXkqCQkgLAogICAgUGl4bWFwCQkgCgopOwoK ZXh0ZXJuIGludCBYR2VvbWV0cnkoCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQJCQkgLAogICAg Y29uc3QgIGNoYXIqCSAsCiAgICBjb25zdCAgY2hhcioJICwKICAgIHVuc2lnbmVkIGludAkgLAog ICAgdW5zaWduZWQgaW50CSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIGludAkJCSAsCiAgICBp bnQJCQkgLAogICAgaW50KgkJICwKICAgIGludCoJCSAsCiAgICBpbnQqCQkgLAogICAgaW50KgkJ IAoKKTsKCmV4dGVybiBpbnQgWEdldEVycm9yRGF0YWJhc2VUZXh0KAoKICAgIERpc3BsYXkqCQkg LAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBjb25zdCAgY2hhcioJICwKICAgIGNvbnN0ICBjaGFy KgkgLAogICAgY2hhcioJCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYR2V0RXJyb3JU ZXh0KAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50CQkJICwKICAgIGNoYXIqCQkgLAogICAgaW50 CQkJIAoKKTsKCmV4dGVybiBpbnQgIFhHZXRGb250UHJvcGVydHkoCgogICAgWEZvbnRTdHJ1Y3Qq CSAsCiAgICBBdG9tCQkgLAogICAgdW5zaWduZWQgbG9uZyoJIAoKKTsKCmV4dGVybiBpbnQgIFhH ZXRHQ1ZhbHVlcygKCiAgICBEaXNwbGF5KgkJICwKICAgIEdDCQkJICwKICAgIHVuc2lnbmVkIGxv bmcJICwKICAgIFhHQ1ZhbHVlcyoJCSAKCik7CgpleHRlcm4gaW50ICBYR2V0R2VvbWV0cnkoCgog ICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJICwKICAgIFdpbmRvdyoJCSAsCiAgICBpbnQq CQkgLAogICAgaW50KgkJICwKICAgIHVuc2lnbmVkIGludCoJICwKICAgIHVuc2lnbmVkIGludCoJ ICwKICAgIHVuc2lnbmVkIGludCoJICwKICAgIHVuc2lnbmVkIGludCoJIAoKKTsKCmV4dGVybiBp bnQgIFhHZXRJY29uTmFtZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIGNo YXIqKgkJIAoKKTsKCmV4dGVybiBpbnQgWEdldElucHV0Rm9jdXMoCgogICAgRGlzcGxheSoJCSAs CiAgICBXaW5kb3cqCQkgLAogICAgaW50KgkJIAoKKTsKCmV4dGVybiBpbnQgWEdldEtleWJvYXJk Q29udHJvbCgKCiAgICBEaXNwbGF5KgkJICwKICAgIFhLZXlib2FyZFN0YXRlKgkgCgopOwoKZXh0 ZXJuIGludCBYR2V0UG9pbnRlckNvbnRyb2woCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQqCQkg LAogICAgaW50KgkJICwKICAgIGludCoJCSAKCik7CgpleHRlcm4gaW50IFhHZXRQb2ludGVyTWFw cGluZygKCiAgICBEaXNwbGF5KgkJICwKICAgIHVuc2lnbmVkIGNoYXIqCSAsCiAgICBpbnQJCQkg CgopOwoKZXh0ZXJuIGludCBYR2V0U2NyZWVuU2F2ZXIoCgogICAgRGlzcGxheSoJCSAsCiAgICBp bnQqCQkgLAogICAgaW50KgkJICwKICAgIGludCoJCSAsCiAgICBpbnQqCQkgCgopOwoKZXh0ZXJu IGludCAgWEdldFRyYW5zaWVudEZvckhpbnQoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJ CSAsCiAgICBXaW5kb3cqCQkgCgopOwoKZXh0ZXJuIGludCBYR2V0V2luZG93UHJvcGVydHkoCgog ICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBBdG9tCQkgLAogICAgbG9uZwkJICwK ICAgIGxvbmcJCSAsCiAgICBpbnQgCQkgLAogICAgQXRvbQkJICwKICAgIEF0b20qCQkgLAogICAg aW50KgkJICwKICAgIHVuc2lnbmVkIGxvbmcqCSAsCiAgICB1bnNpZ25lZCBsb25nKgkgLAogICAg dW5zaWduZWQgY2hhcioqCSAKCik7CgpleHRlcm4gaW50ICBYR2V0V2luZG93QXR0cmlidXRlcygK CiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIFhXaW5kb3dBdHRyaWJ1dGVzKgkg CgopOwoKZXh0ZXJuIGludCBYR3JhYkJ1dHRvbigKCiAgICBEaXNwbGF5KgkJICwKICAgIHVuc2ln bmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICBXaW5kb3cJCSAsCiAgICBpbnQgCQkg LAogICAgdW5zaWduZWQgaW50CSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJICwKICAgIFdpbmRv dwkJICwKICAgIEN1cnNvcgkJIAoKKTsKCmV4dGVybiBpbnQgWEdyYWJLZXkoCgogICAgRGlzcGxh eSoJCSAsCiAgICBpbnQJCQkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICBXaW5kb3cJCSAsCiAg ICBpbnQgCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhHcmFi S2V5Ym9hcmQoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBpbnQgCQkgLAog ICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBUaW1lCQkgCgopOwoKZXh0ZXJuIGludCBYR3Jh YlBvaW50ZXIoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBpbnQgCQkgLAog ICAgdW5zaWduZWQgaW50CSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJICwKICAgIFdpbmRvdwkJ ICwKICAgIEN1cnNvcgkJICwKICAgIFRpbWUJCSAKCik7CgpleHRlcm4gaW50IFhHcmFiU2VydmVy KAoKICAgIERpc3BsYXkqCQkgCgopOwoKZXh0ZXJuIGludCBYSGVpZ2h0TU1PZlNjcmVlbigKCiAg ICBTY3JlZW4qCQkgCgopOwoKZXh0ZXJuIGludCBYSGVpZ2h0T2ZTY3JlZW4oCgogICAgU2NyZWVu KgkJIAoKKTsKCmV4dGVybiBpbnQgWElmRXZlbnQoCgogICAgRGlzcGxheSoJCSAsCiAgICBYRXZl bnQqCQkgLAogICAgaW50ICAoKikgKAoKCSAgICAgICBEaXNwbGF5KgkJCSAsCiAgICAgICAgICAg ICAgIFhFdmVudCoJCQkgLAogICAgICAgICAgICAgICBYUG9pbnRlcgkJCSAKCiAgICAgICAgICAg ICApCQkgLAogICAgWFBvaW50ZXIJCSAKCik7CgpleHRlcm4gaW50IFhJbWFnZUJ5dGVPcmRlcigK CiAgICBEaXNwbGF5KgkJIAoKKTsKCmV4dGVybiBpbnQgWEluc3RhbGxDb2xvcm1hcCgKCiAgICBE aXNwbGF5KgkJICwKICAgIENvbG9ybWFwCQkgCgopOwoKZXh0ZXJuIEtleUNvZGUgWEtleXN5bVRv S2V5Y29kZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIEtleVN5bQkJIAoKKTsKCmV4dGVybiBpbnQg WEtpbGxDbGllbnQoCgogICAgRGlzcGxheSoJCSAsCiAgICBYSUQJCQkgCgopOwoKZXh0ZXJuIGlu dCAgWExvb2t1cENvbG9yKAoKICAgIERpc3BsYXkqCQkgLAogICAgQ29sb3JtYXAJCSAsCiAgICBj b25zdCAgY2hhcioJICwKICAgIFhDb2xvcioJCSAsCiAgICBYQ29sb3IqCQkgCgopOwoKZXh0ZXJu IGludCBYTG93ZXJXaW5kb3coCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAKCik7Cgpl eHRlcm4gaW50IFhNYXBSYWlzZWQoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAKCik7 CgpleHRlcm4gaW50IFhNYXBTdWJ3aW5kb3dzKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93 CQkgCgopOwoKZXh0ZXJuIGludCBYTWFwV2luZG93KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2lu ZG93CQkgCgopOwoKZXh0ZXJuIGludCBYTWFza0V2ZW50KAoKICAgIERpc3BsYXkqCQkgLAogICAg bG9uZwkJICwKICAgIFhFdmVudCoJCSAKCik7CgpleHRlcm4gaW50IFhNYXhDbWFwc09mU2NyZWVu KAoKICAgIFNjcmVlbioJCSAKCik7CgpleHRlcm4gaW50IFhNaW5DbWFwc09mU2NyZWVuKAoKICAg IFNjcmVlbioJCSAKCik7CgpleHRlcm4gaW50IFhNb3ZlUmVzaXplV2luZG93KAoKICAgIERpc3Bs YXkqCQkgLAogICAgV2luZG93CQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICB1bnNp Z25lZCBpbnQJICwKICAgIHVuc2lnbmVkIGludAkgCgopOwoKZXh0ZXJuIGludCBYTW92ZVdpbmRv dygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIGludAkJCSAsCiAgICBpbnQJ CQkgCgopOwoKZXh0ZXJuIGludCBYTmV4dEV2ZW50KAoKICAgIERpc3BsYXkqCQkgLAogICAgWEV2 ZW50KgkJIAoKKTsKCmV4dGVybiBpbnQgWE5vT3AoCgogICAgRGlzcGxheSoJCSAKCik7CgpleHRl cm4gaW50ICBYUGFyc2VDb2xvcigKCiAgICBEaXNwbGF5KgkJICwKICAgIENvbG9ybWFwCQkgLAog ICAgY29uc3QgIGNoYXIqCSAsCiAgICBYQ29sb3IqCQkgCgopOwoKZXh0ZXJuIGludCBYUGFyc2VH ZW9tZXRyeSgKCiAgICBjb25zdCAgY2hhcioJICwKICAgIGludCoJCSAsCiAgICBpbnQqCQkgLAog ICAgdW5zaWduZWQgaW50KgkgLAogICAgdW5zaWduZWQgaW50KgkgCgopOwoKZXh0ZXJuIGludCBY UGVla0V2ZW50KAoKICAgIERpc3BsYXkqCQkgLAogICAgWEV2ZW50KgkJIAoKKTsKCmV4dGVybiBp bnQgWFBlZWtJZkV2ZW50KAoKICAgIERpc3BsYXkqCQkgLAogICAgWEV2ZW50KgkJICwKICAgIGlu dCAgKCopICgKCgkgICAgICAgRGlzcGxheSoJCSAsCiAgICAgICAgICAgICAgIFhFdmVudCoJCSAs CiAgICAgICAgICAgICAgIFhQb2ludGVyCQkgCgogICAgICAgICAgICAgKQkJICwKICAgIFhQb2lu dGVyCQkgCgopOwoKZXh0ZXJuIGludCBYUGVuZGluZygKCiAgICBEaXNwbGF5KgkJIAoKKTsKCmV4 dGVybiBpbnQgWFBsYW5lc09mU2NyZWVuKAoKICAgIFNjcmVlbioJCSAKICAgIAoKKTsKCmV4dGVy biBpbnQgWFByb3RvY29sUmV2aXNpb24oCgogICAgRGlzcGxheSoJCSAKCik7CgpleHRlcm4gaW50 IFhQcm90b2NvbFZlcnNpb24oCgogICAgRGlzcGxheSoJCSAKCik7CgoKZXh0ZXJuIGludCBYUHV0 QmFja0V2ZW50KAoKICAgIERpc3BsYXkqCQkgLAogICAgWEV2ZW50KgkJIAoKKTsKCmV4dGVybiBp bnQgWFB1dEltYWdlKAoKICAgIERpc3BsYXkqCQkgLAogICAgRHJhd2FibGUJCSAsCiAgICBHQwkJ CSAsCiAgICBYSW1hZ2UqCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkg LAogICAgaW50CQkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAJICAK Cik7CgpleHRlcm4gaW50IFhRTGVuZ3RoKAoKICAgIERpc3BsYXkqCQkgCgopOwoKZXh0ZXJuIGlu dCAgWFF1ZXJ5QmVzdEN1cnNvcigKCiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxlCQkgLAog ICAgdW5zaWduZWQgaW50ICAgICAgICAgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICB1bnNpZ25l ZCBpbnQqCSAsCiAgICB1bnNpZ25lZCBpbnQqCSAKCik7CgpleHRlcm4gaW50ICBYUXVlcnlCZXN0 U2l6ZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIGludAkJCSAsCiAgICBEcmF3YWJsZQkJICwKICAg IHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICB1bnNpZ25lZCBpbnQqCSAs CiAgICB1bnNpZ25lZCBpbnQqCSAKCik7CgpleHRlcm4gaW50ICBYUXVlcnlCZXN0U3RpcHBsZSgK CiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxlCQkgLAogICAgdW5zaWduZWQgaW50CSAsCiAg ICB1bnNpZ25lZCBpbnQJICwKICAgIHVuc2lnbmVkIGludCoJICwKICAgIHVuc2lnbmVkIGludCoJ IAoKKTsKCmV4dGVybiBpbnQgIFhRdWVyeUJlc3RUaWxlKAoKICAgIERpc3BsYXkqCQkgLAogICAg RHJhd2FibGUJCSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAg dW5zaWduZWQgaW50KgkgLAogICAgdW5zaWduZWQgaW50KgkgCgopOwoKZXh0ZXJuIGludCBYUXVl cnlDb2xvcigKCiAgICBEaXNwbGF5KgkJICwKICAgIENvbG9ybWFwCQkgLAogICAgWENvbG9yKgkJ IAoKKTsKCmV4dGVybiBpbnQgWFF1ZXJ5Q29sb3JzKAoKICAgIERpc3BsYXkqCQkgLAogICAgQ29s b3JtYXAJCSAsCiAgICBYQ29sb3IqCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgIFhR dWVyeUV4dGVuc2lvbigKCiAgICBEaXNwbGF5KgkJICwKICAgIGNvbnN0ICBjaGFyKgkgLAogICAg aW50KgkJICwKICAgIGludCoJCSAsCiAgICBpbnQqCQkgCgopOwoKZXh0ZXJuIGludCBYUXVlcnlL ZXltYXAoCgogICAgRGlzcGxheSoJCSAsCiAgICBjaGFyIFszMl0JCSAKCik7CgpleHRlcm4gaW50 ICBYUXVlcnlQb2ludGVyKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgV2lu ZG93KgkJICwKICAgIFdpbmRvdyoJCSAsCiAgICBpbnQqCQkgLAogICAgaW50KgkJICwKICAgIGlu dCoJCSAsCiAgICBpbnQqCQkgLAogICAgdW5zaWduZWQgaW50KiAgICAgICAgCgopOwoKZXh0ZXJu IGludCBYUXVlcnlUZXh0RXh0ZW50cygKCiAgICBEaXNwbGF5KgkJICwKICAgIFhJRAkJCSAsCiAg ICBjb25zdCAgY2hhcioJICwKICAgIGludAkJCSAsCiAgICBpbnQqCQkgLAogICAgaW50KgkJICwK ICAgIGludCoJCSAsCiAgICBYQ2hhclN0cnVjdCoJICAgICAKCik7CgpleHRlcm4gaW50IFhRdWVy eVRleHRFeHRlbnRzMTYoCgogICAgRGlzcGxheSoJCSAsCiAgICBYSUQJCQkgLAogICAgY29uc3Qg IFhDaGFyMmIqCSAsCiAgICBpbnQJCQkgLAogICAgaW50KgkJICwKICAgIGludCoJCSAsCiAgICBp bnQqCQkgLAogICAgWENoYXJTdHJ1Y3QqCSAKCik7CgpleHRlcm4gaW50ICBYUXVlcnlUcmVlKAoK ICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgV2luZG93KgkJICwKICAgIFdpbmRv dyoJCSAsCiAgICBXaW5kb3cqKgkJICwKICAgIHVuc2lnbmVkIGludCoJIAoKKTsKCmV4dGVybiBp bnQgWFJhaXNlV2luZG93KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgCgopOwoKZXh0 ZXJuIGludCBYUmVhZEJpdG1hcEZpbGUoCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZSAJ CSAsCiAgICBjb25zdCAgY2hhcioJICwKICAgIHVuc2lnbmVkIGludCoJICwKICAgIHVuc2lnbmVk IGludCoJICwKICAgIFBpeG1hcCoJCSAsCiAgICBpbnQqCQkgLAogICAgaW50KgkJIAoKKTsKCmV4 dGVybiBpbnQgWFJlYWRCaXRtYXBGaWxlRGF0YSgKCiAgICBjb25zdCAgY2hhcioJICwKICAgIHVu c2lnbmVkIGludCoJICwKICAgIHVuc2lnbmVkIGludCoJICwKICAgIHVuc2lnbmVkIGNoYXIqKgkg LAogICAgaW50KgkJICwKICAgIGludCoJCSAKCik7CgpleHRlcm4gaW50IFhSZWJpbmRLZXlzeW0o CgogICAgRGlzcGxheSoJCSAsCiAgICBLZXlTeW0JCSAsCiAgICBLZXlTeW0qCQkgLAogICAgaW50 CQkJICwKICAgIGNvbnN0ICB1bnNpZ25lZCBjaGFyKgkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVy biBpbnQgWFJlY29sb3JDdXJzb3IoCgogICAgRGlzcGxheSoJCSAsCiAgICBDdXJzb3IJCSAsCiAg ICBYQ29sb3IqCQkgLAogICAgWENvbG9yKgkJIAoKKTsKCmV4dGVybiBpbnQgWFJlZnJlc2hLZXli b2FyZE1hcHBpbmcoCgogICAgWE1hcHBpbmdFdmVudCoJICAgICAKCik7CgpleHRlcm4gaW50IFhS ZW1vdmVGcm9tU2F2ZVNldCgKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJIAoKKTsKCmV4 dGVybiBpbnQgWFJlbW92ZUhvc3QoCgogICAgRGlzcGxheSoJCSAsCiAgICBYSG9zdEFkZHJlc3Mq CSAKCik7CgpleHRlcm4gaW50IFhSZW1vdmVIb3N0cygKCiAgICBEaXNwbGF5KgkJICwKICAgIFhI b3N0QWRkcmVzcyoJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhSZXBhcmVudFdpbmRv dygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIFdpbmRvdwkJICwKICAgIGlu dAkJCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYUmVzZXRTY3JlZW5TYXZlcigKCiAg ICBEaXNwbGF5KgkJIAoKKTsKCmV4dGVybiBpbnQgWFJlc2l6ZVdpbmRvdygKCiAgICBEaXNwbGF5 KgkJICwKICAgIFdpbmRvdwkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgaW50 CSAKCik7CgpleHRlcm4gaW50IFhSZXN0YWNrV2luZG93cygKCiAgICBEaXNwbGF5KgkJICwKICAg IFdpbmRvdyoJCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYUm90YXRlQnVmZmVycygK CiAgICBEaXNwbGF5KgkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhSb3RhdGVXaW5k b3dQcm9wZXJ0aWVzKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgQXRvbSoJ CSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWFNjcmVlbkNvdW50 KAoKICAgIERpc3BsYXkqCQkgCgopOwoKZXh0ZXJuIGludCBYU2VsZWN0SW5wdXQoCgogICAgRGlz cGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBsb25nCQkgCgopOwoKZXh0ZXJuIGludCAgWFNl bmRFdmVudCgKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIGludCAJCSAsCiAg ICBsb25nCQkgLAogICAgWEV2ZW50KgkJIAoKKTsKCmV4dGVybiBpbnQgWFNldEFjY2Vzc0NvbnRy b2woCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYU2V0QXJj TW9kZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIEdDCQkJICwKICAgIGludAkJCSAKCik7CgpleHRl cm4gaW50IFhTZXRCYWNrZ3JvdW5kKAoKICAgIERpc3BsYXkqCQkgLAogICAgR0MJCQkgLAogICAg dW5zaWduZWQgbG9uZwkgCgopOwoKZXh0ZXJuIGludCBYU2V0Q2xpcE1hc2soCgogICAgRGlzcGxh eSoJCSAsCiAgICBHQwkJCSAsCiAgICBQaXhtYXAJCSAKCik7CgpleHRlcm4gaW50IFhTZXRDbGlw T3JpZ2luKAoKICAgIERpc3BsYXkqCQkgLAogICAgR0MJCQkgLAogICAgaW50CQkJICwKICAgIGlu dAkJCSAKCik7CgpleHRlcm4gaW50IFhTZXRDbGlwUmVjdGFuZ2xlcygKCiAgICBEaXNwbGF5KgkJ ICwKICAgIEdDCQkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgWFJlY3RhbmdsZSoJ CSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWFNldENsb3NlRG93 bk1vZGUoCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYU2V0 Q29tbWFuZCgKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIGNoYXIqKgkJICwK ICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhTZXREYXNoZXMoCgogICAgRGlzcGxheSoJCSAs CiAgICBHQwkJCSAsCiAgICBpbnQJCQkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBpbnQJCQkg CgopOwoKZXh0ZXJuIGludCBYU2V0RmlsbFJ1bGUoCgogICAgRGlzcGxheSoJCSAsCiAgICBHQwkJ CSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYU2V0RmlsbFN0eWxlKAoKICAgIERpc3Bs YXkqCQkgLAogICAgR0MJCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWFNldEZvbnQo CgogICAgRGlzcGxheSoJCSAsCiAgICBHQwkJCSAsCiAgICBGb250CQkgCgopOwoKZXh0ZXJuIGlu dCBYU2V0Rm9udFBhdGgoCgogICAgRGlzcGxheSoJCSAsCiAgICBjaGFyKioJCSAsCiAgICBpbnQJ CQkgCSAgICAgCgopOwoKZXh0ZXJuIGludCBYU2V0Rm9yZWdyb3VuZCgKCiAgICBEaXNwbGF5KgkJ ICwKICAgIEdDCQkJICwKICAgIHVuc2lnbmVkIGxvbmcJIAoKKTsKCmV4dGVybiBpbnQgWFNldEZ1 bmN0aW9uKAoKICAgIERpc3BsYXkqCQkgLAogICAgR0MJCQkgLAogICAgaW50CQkJIAoKKTsKCmV4 dGVybiBpbnQgWFNldEdyYXBoaWNzRXhwb3N1cmVzKAoKICAgIERpc3BsYXkqCQkgLAogICAgR0MJ CQkgLAogICAgaW50IAkJIAoKKTsKCmV4dGVybiBpbnQgWFNldEljb25OYW1lKAoKICAgIERpc3Bs YXkqCQkgLAogICAgV2luZG93CQkgLAogICAgY29uc3QgIGNoYXIqCSAKCik7CgpleHRlcm4gaW50 IFhTZXRJbnB1dEZvY3VzKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgaW50 CQkJICwKICAgIFRpbWUJCSAKCik7CgpleHRlcm4gaW50IFhTZXRMaW5lQXR0cmlidXRlcygKCiAg ICBEaXNwbGF5KgkJICwKICAgIEdDCQkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgaW50CQkJ ICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYU2V0TW9kaWZpZXJN YXBwaW5nKAoKICAgIERpc3BsYXkqCQkgLAogICAgWE1vZGlmaWVyS2V5bWFwKgkgCgopOwoKZXh0 ZXJuIGludCBYU2V0UGxhbmVNYXNrKAoKICAgIERpc3BsYXkqCQkgLAogICAgR0MJCQkgLAogICAg dW5zaWduZWQgbG9uZwkgCgopOwoKZXh0ZXJuIGludCBYU2V0UG9pbnRlck1hcHBpbmcoCgogICAg RGlzcGxheSoJCSAsCiAgICBjb25zdCAgdW5zaWduZWQgY2hhcioJICwKICAgIGludAkJCSAKCik7 CgpleHRlcm4gaW50IFhTZXRTY3JlZW5TYXZlcigKCiAgICBEaXNwbGF5KgkJICwKICAgIGludAkJ CSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50 IFhTZXRTZWxlY3Rpb25Pd25lcigKCiAgICBEaXNwbGF5KgkJICwKICAgIEF0b20JICAgICAgICAg LAogICAgV2luZG93CQkgLAogICAgVGltZQkJIAoKKTsKCmV4dGVybiBpbnQgWFNldFN0YXRlKAoK ICAgIERpc3BsYXkqCQkgLAogICAgR0MJCQkgLAogICAgdW5zaWduZWQgbG9uZyAJICwKICAgIHVu c2lnbmVkIGxvbmcJICwKICAgIGludAkJCSAsCiAgICB1bnNpZ25lZCBsb25nCSAKCik7CgpleHRl cm4gaW50IFhTZXRTdGlwcGxlKAoKICAgIERpc3BsYXkqCQkgLAogICAgR0MJCQkgLAogICAgUGl4 bWFwCQkgCgopOwoKZXh0ZXJuIGludCBYU2V0U3Vid2luZG93TW9kZSgKCiAgICBEaXNwbGF5KgkJ ICwKICAgIEdDCQkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhTZXRUU09yaWdpbigK CiAgICBEaXNwbGF5KgkJICwKICAgIEdDCQkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgCgop OwoKZXh0ZXJuIGludCBYU2V0VGlsZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIEdDCQkJICwKICAg IFBpeG1hcAkJIAoKKTsKCmV4dGVybiBpbnQgWFNldFdpbmRvd0JhY2tncm91bmQoCgogICAgRGlz cGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICB1bnNpZ25lZCBsb25nCSAKCik7CgpleHRlcm4g aW50IFhTZXRXaW5kb3dCYWNrZ3JvdW5kUGl4bWFwKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2lu ZG93CQkgLAogICAgUGl4bWFwCQkgCgopOwoKZXh0ZXJuIGludCBYU2V0V2luZG93Qm9yZGVyKAoK ICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgdW5zaWduZWQgbG9uZwkgCgopOwoK ZXh0ZXJuIGludCBYU2V0V2luZG93Qm9yZGVyUGl4bWFwKAoKICAgIERpc3BsYXkqCQkgLAogICAg V2luZG93CQkgLAogICAgUGl4bWFwCQkgCgopOwoKZXh0ZXJuIGludCBYU2V0V2luZG93Qm9yZGVy V2lkdGgoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICB1bnNpZ25lZCBpbnQJ IAoKKTsKCmV4dGVybiBpbnQgWFNldFdpbmRvd0NvbG9ybWFwKAoKICAgIERpc3BsYXkqCQkgLAog ICAgV2luZG93CQkgLAogICAgQ29sb3JtYXAJCSAKCik7CgpleHRlcm4gaW50IFhTdG9yZUJ1ZmZl cigKCiAgICBEaXNwbGF5KgkJICwKICAgIGNvbnN0ICBjaGFyKgkgLAogICAgaW50CQkJICwKICAg IGludAkJCSAKCik7CgpleHRlcm4gaW50IFhTdG9yZUJ5dGVzKAoKICAgIERpc3BsYXkqCQkgLAog ICAgY29uc3QgIGNoYXIqCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYU3RvcmVDb2xv cigKCiAgICBEaXNwbGF5KgkJICwKICAgIENvbG9ybWFwCQkgLAogICAgWENvbG9yKgkJIAoKKTsK CmV4dGVybiBpbnQgWFN0b3JlQ29sb3JzKAoKICAgIERpc3BsYXkqCQkgLAogICAgQ29sb3JtYXAJ CSAsCiAgICBYQ29sb3IqCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWFN0b3JlTmFt ZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIGNvbnN0ICBjaGFyKgkgCgop OwoKZXh0ZXJuIGludCBYU3RvcmVOYW1lZENvbG9yKAoKICAgIERpc3BsYXkqCQkgLAogICAgQ29s b3JtYXAJCSAsCiAgICBjb25zdCAgY2hhcioJICwKICAgIHVuc2lnbmVkIGxvbmcJICwKICAgIGlu dAkJCSAKCik7CgpleHRlcm4gaW50IFhTeW5jKAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50IAkJ IAoKKTsKCmV4dGVybiBpbnQgWFRleHRFeHRlbnRzKAoKICAgIFhGb250U3RydWN0KgkgLAogICAg Y29uc3QgIGNoYXIqCSAsCiAgICBpbnQJCQkgLAogICAgaW50KgkJICwKICAgIGludCoJCSAsCiAg ICBpbnQqCQkgLAogICAgWENoYXJTdHJ1Y3QqCSAKCik7CgpleHRlcm4gaW50IFhUZXh0RXh0ZW50 czE2KAoKICAgIFhGb250U3RydWN0KgkgLAogICAgY29uc3QgIFhDaGFyMmIqCSAsCiAgICBpbnQJ CQkgLAogICAgaW50KgkJICwKICAgIGludCoJCSAsCiAgICBpbnQqCQkgLAogICAgWENoYXJTdHJ1 Y3QqCSAKCik7CgpleHRlcm4gaW50IFhUZXh0V2lkdGgoCgogICAgWEZvbnRTdHJ1Y3QqCSAsCiAg ICBjb25zdCAgY2hhcioJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhUZXh0V2lkdGgx NigKCiAgICBYRm9udFN0cnVjdCoJICwKICAgIGNvbnN0ICBYQ2hhcjJiKgkgLAogICAgaW50CQkJ IAoKKTsKCmV4dGVybiBpbnQgIFhUcmFuc2xhdGVDb29yZGluYXRlcygKCiAgICBEaXNwbGF5KgkJ ICwKICAgIFdpbmRvdwkJICwKICAgIFdpbmRvdwkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkg LAogICAgaW50KgkJICwKICAgIGludCoJCSAsCiAgICBXaW5kb3cqCQkgCgopOwoKZXh0ZXJuIGlu dCBYVW5kZWZpbmVDdXJzb3IoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAKCik7Cgpl eHRlcm4gaW50IFhVbmdyYWJCdXR0b24oCgogICAgRGlzcGxheSoJCSAsCiAgICB1bnNpZ25lZCBp bnQJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgV2luZG93CQkgCgopOwoKZXh0ZXJuIGludCBY VW5ncmFiS2V5KAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50CQkJICwKICAgIHVuc2lnbmVkIGlu dAkgLAogICAgV2luZG93CQkgCgopOwoKZXh0ZXJuIGludCBYVW5ncmFiS2V5Ym9hcmQoCgogICAg RGlzcGxheSoJCSAsCiAgICBUaW1lCQkgCgopOwoKZXh0ZXJuIGludCBYVW5ncmFiUG9pbnRlcigK CiAgICBEaXNwbGF5KgkJICwKICAgIFRpbWUJCSAKCik7CgpleHRlcm4gaW50IFhVbmdyYWJTZXJ2 ZXIoCgogICAgRGlzcGxheSoJCSAKCik7CgpleHRlcm4gaW50IFhVbmluc3RhbGxDb2xvcm1hcCgK CiAgICBEaXNwbGF5KgkJICwKICAgIENvbG9ybWFwCQkgCgopOwoKZXh0ZXJuIGludCBYVW5sb2Fk Rm9udCgKCiAgICBEaXNwbGF5KgkJICwKICAgIEZvbnQJCSAKCik7CgpleHRlcm4gaW50IFhVbm1h cFN1YndpbmRvd3MoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAKCik7CgpleHRlcm4g aW50IFhVbm1hcFdpbmRvdygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJIAoKKTsKCmV4 dGVybiBpbnQgWFZlbmRvclJlbGVhc2UoCgogICAgRGlzcGxheSoJCSAKCik7CgpleHRlcm4gaW50 IFhXYXJwUG9pbnRlcigKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIFdpbmRv dwkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICB1 bnNpZ25lZCBpbnQJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgCSAgICAgCgopOwoKZXh0ZXJu IGludCBYV2lkdGhNTU9mU2NyZWVuKAoKICAgIFNjcmVlbioJCSAKCik7CgpleHRlcm4gaW50IFhX aWR0aE9mU2NyZWVuKAoKICAgIFNjcmVlbioJCSAKCik7CgpleHRlcm4gaW50IFhXaW5kb3dFdmVu dCgKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIGxvbmcJCSAsCiAgICBYRXZl bnQqCQkgCgopOwoKZXh0ZXJuIGludCBYV3JpdGVCaXRtYXBGaWxlKAoKICAgIERpc3BsYXkqCQkg LAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBQaXhtYXAJCSAsCiAgICB1bnNpZ25lZCBpbnQJICwK ICAgIHVuc2lnbmVkIGludAkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAJCSAgICAgCgopOwoK ZXh0ZXJuIGludCAgWFN1cHBvcnRzTG9jYWxlKAoKICAgIHZvaWQKCik7CgpleHRlcm4gY2hhciAq WFNldExvY2FsZU1vZGlmaWVycygKCiAgICBjb25zdCAgY2hhcioJIAoKKTsKCmV4dGVybiBYT00g WE9wZW5PTSgKCiAgICBEaXNwbGF5KgkJCSAsCiAgICBzdHJ1Y3QgX1hybUhhc2hCdWNrZXRSZWMq CSAsCiAgICBjb25zdCAgY2hhcioJCSAsCiAgICBjb25zdCAgY2hhcioJCSAKCik7CgpleHRlcm4g aW50ICBYQ2xvc2VPTSgKCiAgICBYT00JCQkgCgopOwoKZXh0ZXJuIGNoYXIgKlhTZXRPTVZhbHVl cygKCiAgICBYT00JCQkgLAogICAgLi4uCgopOwoKZXh0ZXJuIGNoYXIgKlhHZXRPTVZhbHVlcygK CiAgICBYT00JCQkgLAogICAgLi4uCgopOwoKZXh0ZXJuIERpc3BsYXkgKlhEaXNwbGF5T2ZPTSgK CiAgICBYT00JCQkgCgopOwoKZXh0ZXJuIGNoYXIgKlhMb2NhbGVPZk9NKAoKICAgIFhPTQkJCSAK Cik7CgpleHRlcm4gWE9DIFhDcmVhdGVPQygKCiAgICBYT00JCQkgLAogICAgLi4uCgopOwoKZXh0 ZXJuIHZvaWQgWERlc3Ryb3lPQygKCiAgICBYT0MJCQkgCgopOwoKZXh0ZXJuIFhPTSBYT01PZk9D KAoKICAgIFhPQwkJCSAKCik7CgpleHRlcm4gY2hhciAqWFNldE9DVmFsdWVzKAoKICAgIFhPQwkJ CSAsCiAgICAuLi4KCik7CgpleHRlcm4gY2hhciAqWEdldE9DVmFsdWVzKAoKICAgIFhPQwkJCSAs CiAgICAuLi4KCik7CgpleHRlcm4gWEZvbnRTZXQgWENyZWF0ZUZvbnRTZXQoCgogICAgRGlzcGxh eSoJCSAsCiAgICBjb25zdCAgY2hhcioJICwKICAgIGNoYXIqKioJCSAsCiAgICBpbnQqCQkgLAog ICAgY2hhcioqCQkgCgopOwoKZXh0ZXJuIHZvaWQgWEZyZWVGb250U2V0KAoKICAgIERpc3BsYXkq CQkgLAogICAgWEZvbnRTZXQJCSAKCik7CgpleHRlcm4gaW50IFhGb250c09mRm9udFNldCgKCiAg ICBYRm9udFNldAkJICwKICAgIFhGb250U3RydWN0KioqCSAsCiAgICBjaGFyKioqCQkgCgopOwoK ZXh0ZXJuIGNoYXIgKlhCYXNlRm9udE5hbWVMaXN0T2ZGb250U2V0KAoKICAgIFhGb250U2V0CQkg CgopOwoKZXh0ZXJuIGNoYXIgKlhMb2NhbGVPZkZvbnRTZXQoCgogICAgWEZvbnRTZXQJCSAKCik7 CgpleHRlcm4gaW50ICBYQ29udGV4dERlcGVuZGVudERyYXdpbmcoCgogICAgWEZvbnRTZXQJCSAK Cik7CgpleHRlcm4gaW50ICBYRGlyZWN0aW9uYWxEZXBlbmRlbnREcmF3aW5nKAoKICAgIFhGb250 U2V0CQkgCgopOwoKZXh0ZXJuIGludCAgWENvbnRleHR1YWxEcmF3aW5nKAoKICAgIFhGb250U2V0 CQkgCgopOwoKZXh0ZXJuIFhGb250U2V0RXh0ZW50cyAqWEV4dGVudHNPZkZvbnRTZXQoCgogICAg WEZvbnRTZXQJCSAKCik7CgpleHRlcm4gaW50IFhtYlRleHRFc2NhcGVtZW50KAoKICAgIFhGb250 U2V0CQkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBY d2NUZXh0RXNjYXBlbWVudCgKCiAgICBYRm9udFNldAkJICwKICAgIGNvbnN0ICB3Y2hhcl90Kgkg LAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWG1iVGV4dEV4dGVudHMoCgogICAgWEZvbnRT ZXQJCSAsCiAgICBjb25zdCAgY2hhcioJICwKICAgIGludAkJCSAsCiAgICBYUmVjdGFuZ2xlKgkJ ICwKICAgIFhSZWN0YW5nbGUqCQkgCgopOwoKZXh0ZXJuIGludCBYd2NUZXh0RXh0ZW50cygKCiAg ICBYRm9udFNldAkJICwKICAgIGNvbnN0ICB3Y2hhcl90KgkgLAogICAgaW50CQkJICwKICAgIFhS ZWN0YW5nbGUqCQkgLAogICAgWFJlY3RhbmdsZSoJCSAKCik7CgpleHRlcm4gaW50ICBYbWJUZXh0 UGVyQ2hhckV4dGVudHMoCgogICAgWEZvbnRTZXQJCSAsCiAgICBjb25zdCAgY2hhcioJICwKICAg IGludAkJCSAsCiAgICBYUmVjdGFuZ2xlKgkJICwKICAgIFhSZWN0YW5nbGUqCQkgLAogICAgaW50 CQkJICwKICAgIGludCoJCSAsCiAgICBYUmVjdGFuZ2xlKgkJICwKICAgIFhSZWN0YW5nbGUqCQkg CgopOwoKZXh0ZXJuIGludCAgWHdjVGV4dFBlckNoYXJFeHRlbnRzKAoKICAgIFhGb250U2V0CQkg LAogICAgY29uc3QgIHdjaGFyX3QqCSAsCiAgICBpbnQJCQkgLAogICAgWFJlY3RhbmdsZSoJCSAs CiAgICBYUmVjdGFuZ2xlKgkJICwKICAgIGludAkJCSAsCiAgICBpbnQqCQkgLAogICAgWFJlY3Rh bmdsZSoJCSAsCiAgICBYUmVjdGFuZ2xlKgkJIAoKKTsKCmV4dGVybiB2b2lkIFhtYkRyYXdUZXh0 KAoKICAgIERpc3BsYXkqCQkgLAogICAgRHJhd2FibGUJCSAsCiAgICBHQwkJCSAsCiAgICBpbnQJ CQkgLAogICAgaW50CQkJICwKICAgIFhtYlRleHRJdGVtKgkgLAogICAgaW50CQkJIAoKKTsKCmV4 dGVybiB2b2lkIFh3Y0RyYXdUZXh0KAoKICAgIERpc3BsYXkqCQkgLAogICAgRHJhd2FibGUJCSAs CiAgICBHQwkJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJICwKICAgIFh3Y1RleHRJdGVtKgkg LAogICAgaW50CQkJIAoKKTsKCmV4dGVybiB2b2lkIFhtYkRyYXdTdHJpbmcoCgogICAgRGlzcGxh eSoJCSAsCiAgICBEcmF3YWJsZQkJICwKICAgIFhGb250U2V0CQkgLAogICAgR0MJCQkgLAogICAg aW50CQkJICwKICAgIGludAkJCSAsCiAgICBjb25zdCAgY2hhcioJICwKICAgIGludAkJCSAKCik7 CgpleHRlcm4gdm9pZCBYd2NEcmF3U3RyaW5nKAoKICAgIERpc3BsYXkqCQkgLAogICAgRHJhd2Fi bGUJCSAsCiAgICBYRm9udFNldAkJICwKICAgIEdDCQkJICwKICAgIGludAkJCSAsCiAgICBpbnQJ CQkgLAogICAgY29uc3QgIHdjaGFyX3QqCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIHZvaWQg WG1iRHJhd0ltYWdlU3RyaW5nKAoKICAgIERpc3BsYXkqCQkgLAogICAgRHJhd2FibGUJCSAsCiAg ICBYRm9udFNldAkJICwKICAgIEdDCQkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAg Y29uc3QgIGNoYXIqCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHdjRHJhd0ltYWdl U3RyaW5nKAoKICAgIERpc3BsYXkqCQkgLAogICAgRHJhd2FibGUJCSAsCiAgICBYRm9udFNldAkJ ICwKICAgIEdDCQkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgY29uc3QgIHdjaGFy X3QqCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIFhJTSBYT3BlbklNKAoKICAgIERpc3BsYXkq CQkJICwKICAgIHN0cnVjdCBfWHJtSGFzaEJ1Y2tldFJlYyoJICwKICAgIGNoYXIqCQkJICwKICAg IGNoYXIqCQkJIAoKKTsKCmV4dGVybiBpbnQgIFhDbG9zZUlNKAoKICAgIFhJTSAgCgopOwoKZXh0 ZXJuIGNoYXIgKlhHZXRJTVZhbHVlcygKCiAgICBYSU0gICwgLi4uCgopOwoKZXh0ZXJuIERpc3Bs YXkgKlhEaXNwbGF5T2ZJTSgKCiAgICBYSU0gIAoKKTsKCmV4dGVybiBjaGFyICpYTG9jYWxlT2ZJ TSgKCiAgICBYSU0gIAoKKTsKCmV4dGVybiBYSUMgWENyZWF0ZUlDKAoKICAgIFhJTSAgLCAuLi4K Cik7CgpleHRlcm4gdm9pZCBYRGVzdHJveUlDKAoKICAgIFhJQyAgCgopOwoKZXh0ZXJuIHZvaWQg WFNldElDRm9jdXMoCgogICAgWElDICAKCik7CgpleHRlcm4gdm9pZCBYVW5zZXRJQ0ZvY3VzKAoK ICAgIFhJQyAgCgopOwoKZXh0ZXJuIHdjaGFyX3QgKlh3Y1Jlc2V0SUMoCgogICAgWElDICAKCik7 CgpleHRlcm4gY2hhciAqWG1iUmVzZXRJQygKCiAgICBYSUMgIAoKKTsKCmV4dGVybiBjaGFyICpY U2V0SUNWYWx1ZXMoCgogICAgWElDICAsIC4uLgoKKTsKCmV4dGVybiBjaGFyICpYR2V0SUNWYWx1 ZXMoCgogICAgWElDICAsIC4uLgoKKTsKCmV4dGVybiBYSU0gWElNT2ZJQygKCiAgICBYSUMgIAoK KTsKCmV4dGVybiBpbnQgIFhGaWx0ZXJFdmVudCgKCiAgICBYRXZlbnQqCSAsCiAgICBXaW5kb3cJ IAoKKTsKCmV4dGVybiBpbnQgWG1iTG9va3VwU3RyaW5nKAoKICAgIFhJQwkJCSAsCiAgICBYS2V5 UHJlc3NlZEV2ZW50KgkgLAogICAgY2hhcioJCSAsCiAgICBpbnQJCQkgLAogICAgS2V5U3ltKgkJ ICwKICAgIGludCAqCQkgCgopOwoKZXh0ZXJuIGludCBYd2NMb29rdXBTdHJpbmcoCgogICAgWElD CQkJICwKICAgIFhLZXlQcmVzc2VkRXZlbnQqCSAsCiAgICB3Y2hhcl90KgkJICwKICAgIGludAkJ CSAsCiAgICBLZXlTeW0qCQkgLAogICAgaW50ICoJCSAKCik7CgpleHRlcm4gWFZhTmVzdGVkTGlz dCBYVmFDcmVhdGVOZXN0ZWRMaXN0KAoKICAgIGludCAgLCAuLi4KCik7CgogCgpleHRlcm4gaW50 ICBYUmVnaXN0ZXJJTUluc3RhbnRpYXRlQ2FsbGJhY2soCgogICAgRGlzcGxheSoJCQkgLAogICAg c3RydWN0IF9Ycm1IYXNoQnVja2V0UmVjKgkgLAogICAgY2hhcioJCQkgLAogICAgY2hhcioJCQkg LAogICAgWElEUHJvYwkJCSAsCiAgICBYUG9pbnRlcgkJCSAKCik7CgpleHRlcm4gaW50ICBYVW5y ZWdpc3RlcklNSW5zdGFudGlhdGVDYWxsYmFjaygKCiAgICBEaXNwbGF5KgkJCSAsCiAgICBzdHJ1 Y3QgX1hybUhhc2hCdWNrZXRSZWMqCSAsCiAgICBjaGFyKgkJCSAsCiAgICBjaGFyKgkJCSAsCiAg ICBYSURQcm9jCQkJICwKICAgIFhQb2ludGVyCQkJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKlhDb25u ZWN0aW9uV2F0Y2hQcm9jKSgKCiAgICBEaXNwbGF5KgkJCSAsCiAgICBYUG9pbnRlcgkJCSAsCiAg ICBpbnQJCQkJICwKICAgIGludCAJCQkgLAkgIAogICAgWFBvaW50ZXIqCQkJICAgCgopOwogICAg CgpleHRlcm4gaW50ICBYSW50ZXJuYWxDb25uZWN0aW9uTnVtYmVycygKCiAgICBEaXNwbGF5KgkJ CSAsCiAgICBpbnQqKgkJCSAsCiAgICBpbnQqCQkJIAoKKTsKCmV4dGVybiB2b2lkIFhQcm9jZXNz SW50ZXJuYWxDb25uZWN0aW9uKAoKICAgIERpc3BsYXkqCQkJICwKICAgIGludAkJCQkgCgopOwoK ZXh0ZXJuIGludCAgWEFkZENvbm5lY3Rpb25XYXRjaCgKCiAgICBEaXNwbGF5KgkJCSAsCiAgICBY Q29ubmVjdGlvbldhdGNoUHJvYwkgLAogICAgWFBvaW50ZXIJCQkgCgopOwoKZXh0ZXJuIHZvaWQg WFJlbW92ZUNvbm5lY3Rpb25XYXRjaCgKCiAgICBEaXNwbGF5KgkJCSAsCiAgICBYQ29ubmVjdGlv bldhdGNoUHJvYwkgLAogICAgWFBvaW50ZXIJCQkgCgopOwoKIAoKCiMgNjQgInhkdmkuaCIgMgoK IyAxICIvdXNyL2luY2x1ZGUvWDExL1h1dGlsLmgiIDEgMwogCiAKCiAKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgogCgoKCgoKCgoKCgoKCiAKCgoK dHlwZWRlZiBzdHJ1Y3QgewogICAgCWxvbmcgZmxhZ3M7CSAKCWludCB4LCB5OwkJIAoJaW50IHdp ZHRoLCBoZWlnaHQ7CSAKCWludCBtaW5fd2lkdGgsIG1pbl9oZWlnaHQ7CglpbnQgbWF4X3dpZHRo LCBtYXhfaGVpZ2h0OwogICAgCWludCB3aWR0aF9pbmMsIGhlaWdodF9pbmM7CglzdHJ1Y3QgewoJ CWludCB4OwkgCgkJaW50IHk7CSAKCX0gbWluX2FzcGVjdCwgbWF4X2FzcGVjdDsKCWludCBiYXNl X3dpZHRoLCBiYXNlX2hlaWdodDsJCSAKCWludCB3aW5fZ3Jhdml0eTsJCQkgCn0gWFNpemVIaW50 czsKCiAKCgoKCiAKCgoKCgoKCgoKCgoKIAoKCgoKdHlwZWRlZiBzdHJ1Y3QgewoJbG9uZyBmbGFn czsJIAoJaW50ICBpbnB1dDsJIAoKCWludCBpbml0aWFsX3N0YXRlOwkgCglQaXhtYXAgaWNvbl9w aXhtYXA7CSAKCVdpbmRvdyBpY29uX3dpbmRvdzsgCSAKCWludCBpY29uX3gsIGljb25feTsgCSAK CVBpeG1hcCBpY29uX21hc2s7CSAKCVhJRCB3aW5kb3dfZ3JvdXA7CSAKCSAKfSBYV01IaW50czsK CiAKCgoKCgoKCgoKCgoKIAoKCgoKIAoKCgoKCgkJCSAKCgogCgoKCnR5cGVkZWYgc3RydWN0IHsK ICAgIHVuc2lnbmVkIGNoYXIgKnZhbHVlOwkJIAogICAgQXRvbSBlbmNvZGluZzsJCQkgCiAgICBp bnQgZm9ybWF0OwkJCQkgCiAgICB1bnNpZ25lZCBsb25nIG5pdGVtczsJCSAKfSBYVGV4dFByb3Bl cnR5OwoKCgoKCnR5cGVkZWYgZW51bSB7CiAgICBYU3RyaW5nU3R5bGUsCQkgCiAgICBYQ29tcG91 bmRUZXh0U3R5bGUsCQkgCiAgICBYVGV4dFN0eWxlLAkJCSAKICAgIFhTdGRJQ0NUZXh0U3R5bGUJ CSAKfSBYSUNDRW5jb2RpbmdTdHlsZTsKCnR5cGVkZWYgc3RydWN0IHsKCWludCBtaW5fd2lkdGgs IG1pbl9oZWlnaHQ7CglpbnQgbWF4X3dpZHRoLCBtYXhfaGVpZ2h0OwoJaW50IHdpZHRoX2luYywg aGVpZ2h0X2luYzsKfSBYSWNvblNpemU7Cgp0eXBlZGVmIHN0cnVjdCB7CgljaGFyICpyZXNfbmFt ZTsKCWNoYXIgKnJlc19jbGFzczsKfSBYQ2xhc3NIaW50OwoKIAoKCgoKCgoKCgoKCgoKCiAKCgp0 eXBlZGVmIHN0cnVjdCBfWENvbXBvc2VTdGF0dXMgewogICAgWFBvaW50ZXIgY29tcG9zZV9wdHI7 CSAKICAgIGludCBjaGFyc19tYXRjaGVkOwkJIAp9IFhDb21wb3NlU3RhdHVzOwoKIAoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgogCgoKdHlwZWRlZiBzdHJ1Y3QgX1hSZWdpb24gKlJlZ2lvbjsgCgog CiAKCgoKIAoKIAoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogIFZpc3VhbCAqdmlzdWFsOwogIFZpc3Vh bElEIHZpc3VhbGlkOwogIGludCBzY3JlZW47CiAgaW50IGRlcHRoOwoKCgogIGludCBjbGFzczsK CiAgdW5zaWduZWQgbG9uZyByZWRfbWFzazsKICB1bnNpZ25lZCBsb25nIGdyZWVuX21hc2s7CiAg dW5zaWduZWQgbG9uZyBibHVlX21hc2s7CiAgaW50IGNvbG9ybWFwX3NpemU7CiAgaW50IGJpdHNf cGVyX3JnYjsKfSBYVmlzdWFsSW5mbzsKCgoKCgoKCgoKCgoKCiAKCgoKdHlwZWRlZiBzdHJ1Y3Qg ewoJQ29sb3JtYXAgY29sb3JtYXA7Cgl1bnNpZ25lZCBsb25nIHJlZF9tYXg7Cgl1bnNpZ25lZCBs b25nIHJlZF9tdWx0OwoJdW5zaWduZWQgbG9uZyBncmVlbl9tYXg7Cgl1bnNpZ25lZCBsb25nIGdy ZWVuX211bHQ7Cgl1bnNpZ25lZCBsb25nIGJsdWVfbWF4OwoJdW5zaWduZWQgbG9uZyBibHVlX211 bHQ7Cgl1bnNpZ25lZCBsb25nIGJhc2VfcGl4ZWw7CglWaXN1YWxJRCB2aXN1YWxpZDsJCSAKCVhJ RCBraWxsaWQ7CQkJIAp9IFhTdGFuZGFyZENvbG9ybWFwOwoKCgoKIAoKCgoKCgoKIAoKCgoKCgog CgoKCgoKdHlwZWRlZiBpbnQgWENvbnRleHQ7CgoKCgogCgogCgpleHRlcm4gWENsYXNzSGludCAq WEFsbG9jQ2xhc3NIaW50ICgKCiAgICB2b2lkCgopOwoKZXh0ZXJuIFhJY29uU2l6ZSAqWEFsbG9j SWNvblNpemUgKAoKICAgIHZvaWQKCik7CgpleHRlcm4gWFNpemVIaW50cyAqWEFsbG9jU2l6ZUhp bnRzICgKCiAgICB2b2lkCgopOwoKZXh0ZXJuIFhTdGFuZGFyZENvbG9ybWFwICpYQWxsb2NTdGFu ZGFyZENvbG9ybWFwICgKCiAgICB2b2lkCgopOwoKZXh0ZXJuIFhXTUhpbnRzICpYQWxsb2NXTUhp bnRzICgKCiAgICB2b2lkCgopOwoKZXh0ZXJuIGludCBYQ2xpcEJveCgKCiAgICBSZWdpb24JCSAs CiAgICBYUmVjdGFuZ2xlKgkJIAoKKTsKCmV4dGVybiBSZWdpb24gWENyZWF0ZVJlZ2lvbigKCiAg ICB2b2lkCgopOwoKZXh0ZXJuIGNoYXIgKlhEZWZhdWx0U3RyaW5nKAoKICAgIHZvaWQKCik7Cgpl eHRlcm4gaW50IFhEZWxldGVDb250ZXh0KAoKICAgIERpc3BsYXkqCQkgLAogICAgWElECQkJICwK ICAgIFhDb250ZXh0CQkgCgopOwoKZXh0ZXJuIGludCBYRGVzdHJveVJlZ2lvbigKCiAgICBSZWdp b24JCSAKCik7CgpleHRlcm4gaW50IFhFbXB0eVJlZ2lvbigKCiAgICBSZWdpb24JCSAKCik7Cgpl eHRlcm4gaW50IFhFcXVhbFJlZ2lvbigKCiAgICBSZWdpb24JCSAsCiAgICBSZWdpb24JCSAKCik7 CgpleHRlcm4gaW50IFhGaW5kQ29udGV4dCgKCiAgICBEaXNwbGF5KgkJICwKICAgIFhJRAkJCSAs CiAgICBYQ29udGV4dAkJICwKICAgIFhQb2ludGVyKgkJIAoKKTsKCmV4dGVybiBpbnQgIFhHZXRD bGFzc0hpbnQoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBYQ2xhc3NIaW50 KgkJIAoKKTsKCmV4dGVybiBpbnQgIFhHZXRJY29uU2l6ZXMoCgogICAgRGlzcGxheSoJCSAsCiAg ICBXaW5kb3cJCSAsCiAgICBYSWNvblNpemUqKgkJICwKICAgIGludCoJCSAKCik7CgpleHRlcm4g aW50ICBYR2V0Tm9ybWFsSGludHMoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAg ICBYU2l6ZUhpbnRzKgkJIAoKKTsKCmV4dGVybiBpbnQgIFhHZXRSR0JDb2xvcm1hcHMoCgogICAg RGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBYU3RhbmRhcmRDb2xvcm1hcCoqICAsCiAg ICBpbnQqCQkgLAogICAgQXRvbQkJIAoKKTsKCmV4dGVybiBpbnQgIFhHZXRTaXplSGludHMoCgog ICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBYU2l6ZUhpbnRzKgkJICwKICAgIEF0 b20JCSAKCik7CgpleHRlcm4gaW50ICBYR2V0U3RhbmRhcmRDb2xvcm1hcCgKCiAgICBEaXNwbGF5 KgkJICwKICAgIFdpbmRvdwkJICwKICAgIFhTdGFuZGFyZENvbG9ybWFwKgkgLAogICAgQXRvbQkJ IAkJCSAgICAKCik7CgpleHRlcm4gaW50ICBYR2V0VGV4dFByb3BlcnR5KAoKICAgIERpc3BsYXkq CQkgLAogICAgV2luZG93CQkgLAogICAgWFRleHRQcm9wZXJ0eSoJICwKICAgIEF0b20JCSAKCik7 CgpleHRlcm4gWFZpc3VhbEluZm8gKlhHZXRWaXN1YWxJbmZvKAoKICAgIERpc3BsYXkqCQkgLAog ICAgbG9uZwkJICwKICAgIFhWaXN1YWxJbmZvKgkgLAogICAgaW50KgkJIAoKKTsKCmV4dGVybiBp bnQgIFhHZXRXTUNsaWVudE1hY2hpbmUoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAs CiAgICBYVGV4dFByb3BlcnR5KgkgCgopOwoKZXh0ZXJuIFhXTUhpbnRzICpYR2V0V01IaW50cygK CiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJIAkJICAgICAgCgopOwoKZXh0ZXJuIGludCAg WEdldFdNSWNvbk5hbWUoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBYVGV4 dFByb3BlcnR5KgkgCgopOwoKZXh0ZXJuIGludCAgWEdldFdNTmFtZSgKCiAgICBEaXNwbGF5KgkJ ICwKICAgIFdpbmRvdwkJICwKICAgIFhUZXh0UHJvcGVydHkqCSAKCik7CgpleHRlcm4gaW50ICBY R2V0V01Ob3JtYWxIaW50cygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIFhT aXplSGludHMqCQkgLAogICAgbG9uZyoJCSAgCgopOwoKZXh0ZXJuIGludCAgWEdldFdNU2l6ZUhp bnRzKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgWFNpemVIaW50cyoJCSAs CiAgICBsb25nKgkJICwKICAgIEF0b20JCSAKCik7CgpleHRlcm4gaW50ICBYR2V0Wm9vbUhpbnRz KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgWFNpemVIaW50cyoJCSAKCik7 CgpleHRlcm4gaW50IFhJbnRlcnNlY3RSZWdpb24oCgogICAgUmVnaW9uCQkgLAogICAgUmVnaW9u CQkgLAogICAgUmVnaW9uCQkgCgopOwoKZXh0ZXJuIHZvaWQgWENvbnZlcnRDYXNlKAoKICAgIEtl eVN5bQkJICwKICAgIEtleVN5bSoJCSAsCiAgICBLZXlTeW0qCQkgCgopOwoKZXh0ZXJuIGludCBY TG9va3VwU3RyaW5nKAoKICAgIFhLZXlFdmVudCoJCSAsCiAgICBjaGFyKgkJICwKICAgIGludAkJ CSAsCiAgICBLZXlTeW0qCQkgLAogICAgWENvbXBvc2VTdGF0dXMqCSAKCik7CgpleHRlcm4gaW50 ICBYTWF0Y2hWaXN1YWxJbmZvKAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50CQkJICwKICAgIGlu dAkJCSAsCiAgICBpbnQJCQkgLAogICAgWFZpc3VhbEluZm8qCSAKCik7CgpleHRlcm4gaW50IFhP ZmZzZXRSZWdpb24oCgogICAgUmVnaW9uCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAKCik7 CgpleHRlcm4gaW50ICBYUG9pbnRJblJlZ2lvbigKCiAgICBSZWdpb24JCSAsCiAgICBpbnQJCQkg LAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBSZWdpb24gWFBvbHlnb25SZWdpb24oCgogICAgWFBv aW50KgkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYUmVjdElu UmVnaW9uKAoKICAgIFJlZ2lvbgkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgdW5z aWduZWQgaW50CSAsCiAgICB1bnNpZ25lZCBpbnQJIAoKKTsKCmV4dGVybiBpbnQgWFNhdmVDb250 ZXh0KAoKICAgIERpc3BsYXkqCQkgLAogICAgWElECQkJICwKICAgIFhDb250ZXh0CQkgLAogICAg Y29uc3QgIGNoYXIqCSAKCik7CgpleHRlcm4gaW50IFhTZXRDbGFzc0hpbnQoCgogICAgRGlzcGxh eSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBYQ2xhc3NIaW50KgkJIAoKKTsKCmV4dGVybiBpbnQg WFNldEljb25TaXplcygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIFhJY29u U2l6ZSoJCSAsCiAgICBpbnQJCQkgICAgIAoKKTsKCmV4dGVybiBpbnQgWFNldE5vcm1hbEhpbnRz KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgWFNpemVIaW50cyoJCSAKCik7 CgpleHRlcm4gdm9pZCBYU2V0UkdCQ29sb3JtYXBzKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2lu ZG93CQkgLAogICAgWFN0YW5kYXJkQ29sb3JtYXAqCSAsCiAgICBpbnQJCQkgLAogICAgQXRvbQkJ IAoKKTsKCmV4dGVybiBpbnQgWFNldFNpemVIaW50cygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdp bmRvdwkJICwKICAgIFhTaXplSGludHMqCQkgLAogICAgQXRvbQkJIAoKKTsKCmV4dGVybiBpbnQg WFNldFN0YW5kYXJkUHJvcGVydGllcygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwK ICAgIGNvbnN0ICBjaGFyKgkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBQaXhtYXAJCSAsCiAg ICBjaGFyKioJCSAsCiAgICBpbnQJCQkgLAogICAgWFNpemVIaW50cyoJCSAKCik7CgpleHRlcm4g dm9pZCBYU2V0VGV4dFByb3BlcnR5KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAog ICAgWFRleHRQcm9wZXJ0eSoJICwKICAgIEF0b20JCSAKCik7CgpleHRlcm4gdm9pZCBYU2V0V01D bGllbnRNYWNoaW5lKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgWFRleHRQ cm9wZXJ0eSoJIAoKKTsKCmV4dGVybiBpbnQgWFNldFdNSGludHMoCgogICAgRGlzcGxheSoJCSAs CiAgICBXaW5kb3cJCSAsCiAgICBYV01IaW50cyoJCSAKCik7CgpleHRlcm4gdm9pZCBYU2V0V01J Y29uTmFtZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIFhUZXh0UHJvcGVy dHkqCSAKCik7CgpleHRlcm4gdm9pZCBYU2V0V01OYW1lKAoKICAgIERpc3BsYXkqCQkgLAogICAg V2luZG93CQkgLAogICAgWFRleHRQcm9wZXJ0eSoJIAoKKTsKCmV4dGVybiB2b2lkIFhTZXRXTU5v cm1hbEhpbnRzKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgWFNpemVIaW50 cyoJCSAKCik7CgpleHRlcm4gdm9pZCBYU2V0V01Qcm9wZXJ0aWVzKAoKICAgIERpc3BsYXkqCQkg LAogICAgV2luZG93CQkgLAogICAgWFRleHRQcm9wZXJ0eSoJICwKICAgIFhUZXh0UHJvcGVydHkq CSAsCiAgICBjaGFyKioJCSAsCiAgICBpbnQJCQkgLAogICAgWFNpemVIaW50cyoJCSAsCiAgICBY V01IaW50cyoJCSAsCiAgICBYQ2xhc3NIaW50KgkJIAoKKTsKCmV4dGVybiB2b2lkIFhtYlNldFdN UHJvcGVydGllcygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIGNvbnN0ICBj aGFyKgkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBjaGFyKioJCSAsCiAgICBpbnQJCQkgLAog ICAgWFNpemVIaW50cyoJCSAsCiAgICBYV01IaW50cyoJCSAsCiAgICBYQ2xhc3NIaW50KgkJIAoK KTsKCmV4dGVybiB2b2lkIFhTZXRXTVNpemVIaW50cygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdp bmRvdwkJICwKICAgIFhTaXplSGludHMqCQkgLAogICAgQXRvbQkJIAoKKTsKCmV4dGVybiBpbnQg WFNldFJlZ2lvbigKCiAgICBEaXNwbGF5KgkJICwKICAgIEdDCQkJICwKICAgIFJlZ2lvbgkJIAoK KTsKCmV4dGVybiB2b2lkIFhTZXRTdGFuZGFyZENvbG9ybWFwKAoKICAgIERpc3BsYXkqCQkgLAog ICAgV2luZG93CQkgLAogICAgWFN0YW5kYXJkQ29sb3JtYXAqCSAsCiAgICBBdG9tCQkgCgopOwoK ZXh0ZXJuIGludCBYU2V0Wm9vbUhpbnRzKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkg LAogICAgWFNpemVIaW50cyoJCSAKCik7CgpleHRlcm4gaW50IFhTaHJpbmtSZWdpb24oCgogICAg UmVnaW9uCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50ICBYU3Ry aW5nTGlzdFRvVGV4dFByb3BlcnR5KAoKICAgIGNoYXIqKgkJICwKICAgIGludAkJCSAsCiAgICBY VGV4dFByb3BlcnR5KgkgCgopOwoKZXh0ZXJuIGludCBYU3VidHJhY3RSZWdpb24oCgogICAgUmVn aW9uCQkgLAogICAgUmVnaW9uCQkgLAogICAgUmVnaW9uCQkgCgopOwoKZXh0ZXJuIGludCBYbWJU ZXh0TGlzdFRvVGV4dFByb3BlcnR5KAoKICAgIERpc3BsYXkqCQkgLAogICAgY2hhcioqCQkgLAog ICAgaW50CQkJICwKICAgIFhJQ0NFbmNvZGluZ1N0eWxlCSAsCiAgICBYVGV4dFByb3BlcnR5Kgkg CgopOwoKZXh0ZXJuIGludCBYd2NUZXh0TGlzdFRvVGV4dFByb3BlcnR5KAoKICAgIERpc3BsYXkq CQkgLAogICAgd2NoYXJfdCoqCQkgLAogICAgaW50CQkJICwKICAgIFhJQ0NFbmNvZGluZ1N0eWxl CSAsCiAgICBYVGV4dFByb3BlcnR5KgkgCgopOwoKZXh0ZXJuIHZvaWQgWHdjRnJlZVN0cmluZ0xp c3QoCgogICAgd2NoYXJfdCoqCQkgCgopOwoKZXh0ZXJuIGludCAgWFRleHRQcm9wZXJ0eVRvU3Ry aW5nTGlzdCgKCiAgICBYVGV4dFByb3BlcnR5KgkgLAogICAgY2hhcioqKgkJICwKICAgIGludCoJ CSAKCik7CgpleHRlcm4gaW50IFhtYlRleHRQcm9wZXJ0eVRvVGV4dExpc3QoCgogICAgRGlzcGxh eSoJCSAsCiAgICBYVGV4dFByb3BlcnR5KgkgLAogICAgY2hhcioqKgkJICwKICAgIGludCoJCSAK Cik7CgpleHRlcm4gaW50IFh3Y1RleHRQcm9wZXJ0eVRvVGV4dExpc3QoCgogICAgRGlzcGxheSoJ CSAsCiAgICBYVGV4dFByb3BlcnR5KgkgLAogICAgd2NoYXJfdCoqKgkJICwKICAgIGludCoJCSAK Cik7CgpleHRlcm4gaW50IFhVbmlvblJlY3RXaXRoUmVnaW9uKAoKICAgIFhSZWN0YW5nbGUqCQkg LAogICAgUmVnaW9uCQkgLAogICAgUmVnaW9uCQkgCgopOwoKZXh0ZXJuIGludCBYVW5pb25SZWdp b24oCgogICAgUmVnaW9uCQkgLAogICAgUmVnaW9uCQkgLAogICAgUmVnaW9uCQkgCgopOwoKZXh0 ZXJuIGludCBYV01HZW9tZXRyeSgKCiAgICBEaXNwbGF5KgkJICwKICAgIGludAkJCSAsCiAgICBj b25zdCAgY2hhcioJICwKICAgIGNvbnN0ICBjaGFyKgkgLAogICAgdW5zaWduZWQgaW50CSAsCiAg ICBYU2l6ZUhpbnRzKgkJICwKICAgIGludCoJCSAsCiAgICBpbnQqCQkgLAogICAgaW50KgkJICwK ICAgIGludCoJCSAsCiAgICBpbnQqCQkgCgopOwoKZXh0ZXJuIGludCBYWG9yUmVnaW9uKAoKICAg IFJlZ2lvbgkJICwKICAgIFJlZ2lvbgkJICwKICAgIFJlZ2lvbgkJIAoKKTsKCiAKCgojIDY1ICJ4 ZHZpLmgiIDIKCiMgMSAiL3Vzci9pbmNsdWRlL1gxMS9Yb3MuaCIgMSAzCiAKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgogCgoKCiMgNTQgIi91c3IvaW5jbHVkZS9YMTEv WG9zLmgiIDMKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMg MTE0ICIvdXNyL2luY2x1ZGUvWDExL1hvcy5oIiAzCgoKIAoKCgoKCgoKCgoKCiAKCgojIDE0MSAi L3Vzci9pbmNsdWRlL1gxMS9Yb3MuaCIgMwoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZmNudGwu aCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKIAogCgogCgojIDEgIi91c3IvaW5j bHVkZS9mY250bGJpdHMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKIAoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCiAKCgoKCiAKCgoKIAoKCgoKCgpzdHJ1Y3Qg ZmxvY2sKICB7CiAgICBzaG9ydCBpbnQgbF90eXBlOwogICAgc2hvcnQgaW50IGxfd2hlbmNlOwog ICAgX19vZmZfdCBsX3N0YXJ0OwogICAgX19vZmZfdCBsX2xlbjsKICAgIF9fcGlkX3QgbF9waWQ7 CiAgfTsKCgogCgoKCgoKCgoKCgojIDMzICIvdXNyL2luY2x1ZGUvZmNudGwuaCIgMiAzCgoKCgoK CgoKCgoKCgogCgpleHRlcm4gaW50IF9fZmNudGwgIChpbnQgX19mZCwgaW50IF9fY21kLCAuLi4p ICA7CmV4dGVybiBpbnQgZmNudGwgIChpbnQgX19mZCwgaW50IF9fY21kLCAuLi4pICA7CgogCgoK ZXh0ZXJuIGludCBfX29wZW4gIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgaW50IF9fb2ZsYWcsIC4u LikgIDsKZXh0ZXJuIGludCBvcGVuICAoX19jb25zdCBjaGFyICpfX2ZpbGUsIGludCBfX29mbGFn LCAuLi4pICA7CgogCgoKZXh0ZXJuIGludCBjcmVhdCAgKF9fY29uc3QgY2hhciAqX19maWxlLCBf X21vZGVfdCBfX21vZGUpICA7CgojIDc3ICIvdXNyL2luY2x1ZGUvZmNudGwuaCIgMwoKCiAKCgoj IDE0OCAiL3Vzci9pbmNsdWRlL1gxMS9Yb3MuaCIgMiAzCgoKCgoKCgoKCgogCgoKCiMgMTkxICIv dXNyL2luY2x1ZGUvWDExL1hvcy5oIiAzCgoKCgoKCgoKCgoKCgoKIyAyMjEgIi91c3IvaW5jbHVk ZS9YMTEvWG9zLmgiIDMKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIg MSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAz CiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgogCgoKCgogCgoKIyAxICIvdXNyL2xpYi9n Y2MtbGliL2k2ODYtbGludXgvcGdjYy0yLjkxLjYwL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoK CgogCgoKIyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LWxpbnV4L3BnY2MtMi45MS42MC9pbmNs dWRlL3N0ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi91c3IvbGliL2djYy1saWIv aTY4Ni1saW51eC9wZ2NjLTIuOTEuNjAvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoK CgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgogCgoKIyAxMjYgIi91c3IvbGliL2djYy1saWIvaTY4 Ni1saW51eC9wZ2NjLTIuOTEuNjAvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCiAKCiAKCgoj IDE4OCAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LWxpbnV4L3BnY2MtMi45MS42MC9pbmNsdWRlL3N0 ZGRlZi5oIiAzCgoKCgoKIAoKCgoKIAoKCiMgMjY5ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtbGlu dXgvcGdjYy0yLjkxLjYwL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgoKCgoKCgoKCgoKCiAKCiAK CiMgMzE3ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtbGludXgvcGdjYy0yLjkxLjYwL2luY2x1ZGUv c3RkZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCiMgMzggIi91c3IvaW5jbHVk ZS90aW1lLmgiIDIgMwoKCgoKCgoKIAoKIyAxICIvdXNyL2luY2x1ZGUvdGltZWJpdHMuaCIgMSAz CiAKCgoKCgoKCgoKCgoKCgoKCgoKIyAzMiAiL3Vzci9pbmNsdWRlL3RpbWViaXRzLmgiIDMKCgoK CgoKIAoKCiAKCgoKCiAKCgoKCiMgNDcgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoKCiAKCgoK CgoKCgoKCgoKCgoKIAp0eXBlZGVmIF9fY2xvY2tfdCBjbG9ja190OwoKCgoKIyA4MCAiL3Vzci9p bmNsdWRlL3RpbWUuaCIgMwoKCgoKIyA5NyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgoKCgog CnN0cnVjdCB0bQp7CiAgaW50IHRtX3NlYzsJCQkgCiAgaW50IHRtX21pbjsJCQkgCiAgaW50IHRt X2hvdXI7CQkJIAogIGludCB0bV9tZGF5OwkJCSAKICBpbnQgdG1fbW9uOwkJCSAKICBpbnQgdG1f eWVhcjsJCQkgCiAgaW50IHRtX3dkYXk7CQkJIAogIGludCB0bV95ZGF5OwkJCSAKICBpbnQgdG1f aXNkc3Q7CQkJIAoKCiAgbG9uZyBpbnQgdG1fZ210b2ZmOwkJIAogIF9fY29uc3QgY2hhciAqdG1f em9uZTsJIAoKCgoKfTsKCgoKCgogCgpleHRlcm4gY2xvY2tfdCBjbG9jayAgKHZvaWQpICA7Cgog CmV4dGVybiB0aW1lX3QgdGltZSAgKHRpbWVfdCAqX190aW1lcikgIDsKCiAKZXh0ZXJuIGRvdWJs ZSBkaWZmdGltZSAgKHRpbWVfdCBfX3RpbWUxLCB0aW1lX3QgX190aW1lMCkgIAogICAgIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsKCiAKZXh0ZXJuIHRpbWVfdCBta3RpbWUgIChzdHJ1Y3Qg dG0gKl9fdHApICA7CgogCgoKZXh0ZXJuIHRpbWVfdCBfX21rdGltZV9pbnRlcm5hbCAgKHN0cnVj dCB0bSAqX190cCwKCQkJCSAgICAgIHN0cnVjdCB0bSAqKCpfX2Z1bmMpIChjb25zdCB0aW1lX3Qg KiwKCQkJCQkJCSAgICBzdHJ1Y3QgdG0gKiksCgkJCQkgICAgICB0aW1lX3QgKl9fb2Zmc2V0KSAg OwoKCiAKCgpleHRlcm4gc2l6ZV90IHN0cmZ0aW1lICAoY2hhciAqX19zLCBzaXplX3QgX19tYXhz aXplLAoJCQkgICAgIF9fY29uc3QgY2hhciAqX19mb3JtYXQsIF9fY29uc3Qgc3RydWN0IHRtICpf X3RwKSAgOwoKCgoKCgoKCgogCgpleHRlcm4gc3RydWN0IHRtICpnbXRpbWUgIChfX2NvbnN0IHRp bWVfdCAqX190aW1lcikgIDsKCiAKCmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2FsdGltZSAgKF9fY29u c3QgdGltZV90ICpfX3RpbWVyKSAgOwoKCiAKCmV4dGVybiBzdHJ1Y3QgdG0gKl9fZ210aW1lX3Ig IChfX2NvbnN0IHRpbWVfdCAqX190aW1lciwKCQkJCSAgIHN0cnVjdCB0bSAqX190cCkgIDsKZXh0 ZXJuIHN0cnVjdCB0bSAqZ210aW1lX3IgIChfX2NvbnN0IHRpbWVfdCAqX190aW1lciwKCQkJCSBz dHJ1Y3QgdG0gKl9fdHApICA7CgogCgpleHRlcm4gc3RydWN0IHRtICpfX2xvY2FsdGltZV9yICAo X19jb25zdCB0aW1lX3QgKl9fdGltZXIsCgkJCQkgICAgICBzdHJ1Y3QgdG0gKl9fdHApICA7CmV4 dGVybiBzdHJ1Y3QgdG0gKmxvY2FsdGltZV9yICAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIsCgkJ CQkgICAgc3RydWN0IHRtICpfX3RwKSAgOwoKCiAKCgpleHRlcm4gaW50IF9fb2ZmdGltZSAgKF9f Y29uc3QgdGltZV90ICpfX3RpbWVyLAoJCQkgICBsb25nIGludCBfX29mZnNldCwKCQkJICAgc3Ry dWN0IHRtICpfX1RQKSAgOwoKIAoKZXh0ZXJuIGNoYXIgKmFzY3RpbWUgIChfX2NvbnN0IHN0cnVj dCB0bSAqX190cCkgIDsKCiAKZXh0ZXJuIGNoYXIgKmN0aW1lICAoX19jb25zdCB0aW1lX3QgKl9f dGltZXIpICA7CgoKIAoKIAoKZXh0ZXJuIGNoYXIgKl9fYXNjdGltZV9yICAoX19jb25zdCBzdHJ1 Y3QgdG0gKl9fdHAsIGNoYXIgKl9fYnVmKSAgOwpleHRlcm4gY2hhciAqYXNjdGltZV9yICAoX19j b25zdCBzdHJ1Y3QgdG0gKl9fdHAsIGNoYXIgKl9fYnVmKSAgOwoKIApleHRlcm4gY2hhciAqY3Rp bWVfciAgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyLCBjaGFyICpfX2J1ZikgIDsKCgoKIApleHRl cm4gY2hhciAqX190em5hbWVbMl07CSAKZXh0ZXJuIGludCBfX2RheWxpZ2h0OwkJIApleHRlcm4g bG9uZyBpbnQgX190aW1lem9uZTsJIAoKIAoKZXh0ZXJuIHZvaWQgX190enNldCAgKHZvaWQpICA7 CgoKIApleHRlcm4gY2hhciAqdHpuYW1lWzJdOwoKIAoKZXh0ZXJuIGxvbmcgaW50IF9fdHpuYW1l X21heCAgKHZvaWQpICA7CgpleHRlcm4gdm9pZCB0enNldCAgKHZvaWQpICA7CgoKCmV4dGVybiBp bnQgZGF5bGlnaHQ7CmV4dGVybiBsb25nIGludCB0aW1lem9uZTsKCgoKIAoKZXh0ZXJuIGludCBz dGltZSAgKF9fY29uc3QgdGltZV90ICpfX3doZW4pICA7CgoKCiAKCgoKCgoKIAoKCiAKZXh0ZXJu IHRpbWVfdCB0aW1lZ20gIChzdHJ1Y3QgdG0gKl9fdHApICA7CgogCmV4dGVybiB0aW1lX3QgdGlt ZWxvY2FsICAoc3RydWN0IHRtICpfX3RwKSAgOwoKIApleHRlcm4gaW50IGR5c2l6ZSAgKGludCBf X3llYXIpICA7CgoKCgogCmV4dGVybiBpbnQgX19uYW5vc2xlZXAgIChfX2NvbnN0IHN0cnVjdCB0 aW1lc3BlYyAqX19yZXF1ZXN0ZWRfdGltZSwKCQkJICAgICBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVt YWluaW5nKSAgOwpleHRlcm4gaW50IG5hbm9zbGVlcCAgKF9fY29uc3Qgc3RydWN0IHRpbWVzcGVj ICpfX3JlcXVlc3RlZF90aW1lLAoJCQkgICBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVtYWluaW5nKSAg OwoKCgogCgoKCgojIDI0ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMiAzCgoKCgojIDEgIi91 c3IvaW5jbHVkZS90aW1lYml0cy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKc3Ry dWN0IHRpbWV2YWwKICB7CiAgICB0aW1lX3QgdHZfc2VjOwkJIAogICAgdGltZV90IHR2X3VzZWM7 CQkgCiAgfTsKCgoKCiMgNTAgIi91c3IvaW5jbHVkZS90aW1lYml0cy5oIiAzCgojIDI4ICIvdXNy L2luY2x1ZGUvc3lzL3RpbWUuaCIgMiAzCgoKCiAKCiAKCgoKCgoKCgoKCiAKCnN0cnVjdCB0aW1l em9uZQogIHsKICAgIGludCB0el9taW51dGVzd2VzdDsJCSAKICAgIGludCB0el9kc3R0aW1lOwkJ IAogIH07CgogCgoKCgpleHRlcm4gaW50IF9fZ2V0dGltZW9mZGF5ICAoc3RydWN0IHRpbWV2YWwg Kl9fdHYsCgkJCQlzdHJ1Y3QgdGltZXpvbmUgKl9fdHopICA7CmV4dGVybiBpbnQgZ2V0dGltZW9m ZGF5ICAoc3RydWN0IHRpbWV2YWwgKl9fdHYsCgkJCSAgICAgIHN0cnVjdCB0aW1lem9uZSAqX190 eikgIDsKCiAKCmV4dGVybiBpbnQgX19zZXR0aW1lb2ZkYXkgIChfX2NvbnN0IHN0cnVjdCB0aW1l dmFsICpfX3R2LAoJCQkJX19jb25zdCBzdHJ1Y3QgdGltZXpvbmUgKl9fdHopICA7CmV4dGVybiBp bnQgc2V0dGltZW9mZGF5ICAoX19jb25zdCBzdHJ1Y3QgdGltZXZhbCAqX190diwKCQkJICAgICAg X19jb25zdCBzdHJ1Y3QgdGltZXpvbmUgKl9fdHopICA7CgogCgoKCmV4dGVybiBpbnQgX19hZGp0 aW1lICAoX19jb25zdCBzdHJ1Y3QgdGltZXZhbCAqX19kZWx0YSwKCQkJICAgc3RydWN0IHRpbWV2 YWwgKl9fb2xkZGVsdGEpICA7CmV4dGVybiBpbnQgYWRqdGltZSAgKF9fY29uc3Qgc3RydWN0IHRp bWV2YWwgKl9fZGVsdGEsCgkJCSBzdHJ1Y3QgdGltZXZhbCAqX19vbGRkZWx0YSkgIDsKCgogCmVu dW0gX19pdGltZXJfd2hpY2gKICB7CiAgICAgCiAgICBJVElNRVJfUkVBTCA9IDAsCgogICAgIAog ICAgSVRJTUVSX1ZJUlRVQUwgPSAxLAoKICAgICAKCiAgICBJVElNRVJfUFJPRiA9IDIKCiAgfTsK CiAKCnN0cnVjdCBpdGltZXJ2YWwKICB7CiAgICAgCiAgICBzdHJ1Y3QgdGltZXZhbCBpdF9pbnRl cnZhbDsKICAgICAKICAgIHN0cnVjdCB0aW1ldmFsIGl0X3ZhbHVlOwogIH07CgogCgpleHRlcm4g aW50IF9fZ2V0aXRpbWVyICAoZW51bSBfX2l0aW1lcl93aGljaCBfX3doaWNoLAoJCQkgICAgIHN0 cnVjdCBpdGltZXJ2YWwgKl9fdmFsdWUpICA7CmV4dGVybiBpbnQgZ2V0aXRpbWVyICAoZW51bSBf X2l0aW1lcl93aGljaCBfX3doaWNoLAoJCQkgICBzdHJ1Y3QgaXRpbWVydmFsICpfX3ZhbHVlKSAg OwoKIAoKCmV4dGVybiBpbnQgX19zZXRpdGltZXIgIChlbnVtIF9faXRpbWVyX3doaWNoIF9fd2hp Y2gsCgkJCSAgICAgX19jb25zdCBzdHJ1Y3QgaXRpbWVydmFsICpfX25ldywKCQkJICAgICBzdHJ1 Y3QgaXRpbWVydmFsICpfX29sZCkgIDsKZXh0ZXJuIGludCBzZXRpdGltZXIgIChlbnVtIF9faXRp bWVyX3doaWNoIF9fd2hpY2gsCgkJCSAgIF9fY29uc3Qgc3RydWN0IGl0aW1lcnZhbCAqX19uZXcs CgkJCSAgIHN0cnVjdCBpdGltZXJ2YWwgKl9fb2xkKSAgOwoKIAoKZXh0ZXJuIGludCBfX3V0aW1l cyAgKF9fY29uc3QgY2hhciAqX19maWxlLCBzdHJ1Y3QgdGltZXZhbCBfX3R2cFsyXSkgIDsKZXh0 ZXJuIGludCB1dGltZXMgIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgc3RydWN0IHRpbWV2YWwgX190 dnBbMl0pICA7CgoKIAoKCgoKCgoKCiMgMTQ1ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMwoK IyAxNTQgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzCgogCgoKIyAyMzMgIi91c3IvaW5jbHVk ZS9YMTEvWG9zLmgiIDIgMwoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgojIDI4NyAiL3Vzci9pbmNs dWRlL1gxMS9Yb3MuaCIgMwoKCgoKCgogCgoKCgoKCgoKCgojIDMxNSAiL3Vzci9pbmNsdWRlL1gx MS9Yb3MuaCIgMwoKCgojIDY2ICJ4ZHZpLmgiIDIKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL1gxMS9Y ZnVuY3MuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDk4ICIvdXNyL2lu Y2x1ZGUvWDExL1hmdW5jcy5oIiAzCgojIDcwICJ4ZHZpLmgiIDIKCgoKCgojIDEgIi91c3IvaW5j bHVkZS9YMTEvSW50cmluc2ljLmgiIDEgMwogCiAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL1gxMS9YcmVz b3VyY2UuaCIgMSAzCiAKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCiAKCiAKCgoKCgoKCgoKIAoKIAoKCgoKCmV4dGVybiBjaGFyICpYcGVybWFs bG9jKAoKICAgIHVuc2lnbmVkIGludAkgCgopOwoKIAoKCgoKCnR5cGVkZWYgaW50ICAgICBYcm1R dWFyaywgKlhybVF1YXJrTGlzdDsKCgp0eXBlZGVmIGNoYXIgKlhybVN0cmluZzsKCgogCmV4dGVy biBYcm1RdWFyayBYcm1TdHJpbmdUb1F1YXJrKAoKICAgIGNvbnN0ICBjaGFyKiAJIAoKKTsKCmV4 dGVybiBYcm1RdWFyayBYcm1QZXJtU3RyaW5nVG9RdWFyaygKCiAgICBjb25zdCAgY2hhciogCSAK Cik7CgogCmV4dGVybiBYcm1TdHJpbmcgWHJtUXVhcmtUb1N0cmluZygKCiAgICBYcm1RdWFyayAJ CSAKCik7CgpleHRlcm4gWHJtUXVhcmsgWHJtVW5pcXVlUXVhcmsoCgogICAgdm9pZAoKKTsKCgoK CiAKCgoKCgp0eXBlZGVmIGVudW0ge1hybUJpbmRUaWdodGx5LCBYcm1CaW5kTG9vc2VseX0gWHJt QmluZGluZywgKlhybUJpbmRpbmdMaXN0OwoKZXh0ZXJuIHZvaWQgWHJtU3RyaW5nVG9RdWFya0xp c3QoCgogICAgY29uc3QgIGNoYXIqCSAsCiAgICBYcm1RdWFya0xpc3QJIAoKKTsKCmV4dGVybiB2 b2lkIFhybVN0cmluZ1RvQmluZGluZ1F1YXJrTGlzdCgKCiAgICBjb25zdCAgY2hhcioJICwKICAg IFhybUJpbmRpbmdMaXN0CSAsCiAgICBYcm1RdWFya0xpc3QJIAoKKTsKCiAKCgoKCgp0eXBlZGVm IFhybVF1YXJrICAgICBYcm1OYW1lOwp0eXBlZGVmIFhybVF1YXJrTGlzdCBYcm1OYW1lTGlzdDsK CgoKCnR5cGVkZWYgWHJtUXVhcmsgICAgIFhybUNsYXNzOwp0eXBlZGVmIFhybVF1YXJrTGlzdCBY cm1DbGFzc0xpc3Q7CgoKCgoKCiAKCgoKCgp0eXBlZGVmIFhybVF1YXJrICAgICBYcm1SZXByZXNl bnRhdGlvbjsKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgdW5zaWduZWQgaW50ICAgIHNpemU7CiAg ICBYUG9pbnRlcgkgICAgYWRkcjsKfSBYcm1WYWx1ZSwgKlhybVZhbHVlUHRyOwoKCiAKCgoKCgp0 eXBlZGVmIHN0cnVjdCBfWHJtSGFzaEJ1Y2tldFJlYyAqWHJtSGFzaEJ1Y2tldDsKdHlwZWRlZiBY cm1IYXNoQnVja2V0ICpYcm1IYXNoVGFibGU7CnR5cGVkZWYgWHJtSGFzaFRhYmxlIFhybVNlYXJj aExpc3RbXTsKdHlwZWRlZiBzdHJ1Y3QgX1hybUhhc2hCdWNrZXRSZWMgKlhybURhdGFiYXNlOwoK CmV4dGVybiB2b2lkIFhybURlc3Ryb3lEYXRhYmFzZSgKCiAgICBYcm1EYXRhYmFzZQkJICAgICAK Cik7CgpleHRlcm4gdm9pZCBYcm1RUHV0UmVzb3VyY2UoCgogICAgWHJtRGF0YWJhc2UqCSAsCiAg ICBYcm1CaW5kaW5nTGlzdAkgLAogICAgWHJtUXVhcmtMaXN0CSAsCiAgICBYcm1SZXByZXNlbnRh dGlvbgkgLAogICAgWHJtVmFsdWUqCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHJtUHV0UmVzb3VyY2Uo CgogICAgWHJtRGF0YWJhc2UqCSAsCiAgICBjb25zdCAgY2hhcioJICwKICAgIGNvbnN0ICBjaGFy KgkgLAogICAgWHJtVmFsdWUqCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHJtUVB1dFN0cmluZ1Jlc291 cmNlKAoKICAgIFhybURhdGFiYXNlKgkgLAogICAgWHJtQmluZGluZ0xpc3QgICAgICAgLAogICAg WHJtUXVhcmtMaXN0CSAsCiAgICBjb25zdCAgY2hhcioJIAoKKTsKCmV4dGVybiB2b2lkIFhybVB1 dFN0cmluZ1Jlc291cmNlKAoKICAgIFhybURhdGFiYXNlKgkgLAogICAgY29uc3QgIGNoYXIqCSAs CiAgICBjb25zdCAgY2hhcioJIAoKKTsKCmV4dGVybiB2b2lkIFhybVB1dExpbmVSZXNvdXJjZSgK CiAgICBYcm1EYXRhYmFzZSoJICwKICAgIGNvbnN0ICBjaGFyKgkgCgopOwoKZXh0ZXJuIGludCAg WHJtUUdldFJlc291cmNlKAoKICAgIFhybURhdGFiYXNlCQkgLAogICAgWHJtTmFtZUxpc3QJCSAs CiAgICBYcm1DbGFzc0xpc3QJICwKICAgIFhybVJlcHJlc2VudGF0aW9uKgkgLAogICAgWHJtVmFs dWUqCQkgCgopOwoKZXh0ZXJuIGludCAgWHJtR2V0UmVzb3VyY2UoCgogICAgWHJtRGF0YWJhc2UJ CSAsCiAgICBjb25zdCAgY2hhcioJICwKICAgIGNvbnN0ICBjaGFyKgkgLAogICAgY2hhcioqCQkg LAogICAgWHJtVmFsdWUqCQkgCgopOwoKZXh0ZXJuIGludCAgWHJtUUdldFNlYXJjaExpc3QoCgog ICAgWHJtRGF0YWJhc2UJCSAsCiAgICBYcm1OYW1lTGlzdAkJICwKICAgIFhybUNsYXNzTGlzdAkg LAogICAgWHJtU2VhcmNoTGlzdAkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgIFhybVFH ZXRTZWFyY2hSZXNvdXJjZSgKCiAgICBYcm1TZWFyY2hMaXN0CSAsCiAgICBYcm1OYW1lCQkgLAog ICAgWHJtQ2xhc3MJCSAsCiAgICBYcm1SZXByZXNlbnRhdGlvbioJICwKICAgIFhybVZhbHVlKgkJ IAoKKTsKCiAKCgoKCgpleHRlcm4gdm9pZCBYcm1TZXREYXRhYmFzZSgKCiAgICBEaXNwbGF5KgkJ ICwKICAgIFhybURhdGFiYXNlCQkgCgopOwoKZXh0ZXJuIFhybURhdGFiYXNlIFhybUdldERhdGFi YXNlKAoKICAgIERpc3BsYXkqCQkgCgopOwoKZXh0ZXJuIFhybURhdGFiYXNlIFhybUdldEZpbGVE YXRhYmFzZSgKCiAgICBjb25zdCAgY2hhcioJIAoKKTsKCmV4dGVybiBpbnQgIFhybUNvbWJpbmVG aWxlRGF0YWJhc2UoCgogICAgY29uc3QgIGNoYXIqIAkgLAogICAgWHJtRGF0YWJhc2UqCSAsCiAg ICBpbnQgCQkgCgopOwoKZXh0ZXJuIFhybURhdGFiYXNlIFhybUdldFN0cmluZ0RhdGFiYXNlKAoK ICAgIGNvbnN0ICBjaGFyKgkgICAgCgopOwoKZXh0ZXJuIHZvaWQgWHJtUHV0RmlsZURhdGFiYXNl KAoKICAgIFhybURhdGFiYXNlCQkgLAogICAgY29uc3QgIGNoYXIqCSAKCik7CgpleHRlcm4gdm9p ZCBYcm1NZXJnZURhdGFiYXNlcygKCiAgICBYcm1EYXRhYmFzZQkJICwKICAgIFhybURhdGFiYXNl KgkgCgopOwoKZXh0ZXJuIHZvaWQgWHJtQ29tYmluZURhdGFiYXNlKAoKICAgIFhybURhdGFiYXNl CQkgLAogICAgWHJtRGF0YWJhc2UqCSAsCiAgICBpbnQgCQkgCgopOwoKCgoKZXh0ZXJuIGludCAg WHJtRW51bWVyYXRlRGF0YWJhc2UoCgogICAgWHJtRGF0YWJhc2UJCSAsCiAgICBYcm1OYW1lTGlz dAkJICwKICAgIFhybUNsYXNzTGlzdAkgLAogICAgaW50CQkJICwKICAgIGludCAgKCopKAoKCSAg ICAgWHJtRGF0YWJhc2UqCSAsCgkgICAgIFhybUJpbmRpbmdMaXN0CSAsCgkgICAgIFhybVF1YXJr TGlzdAkgLAoJICAgICBYcm1SZXByZXNlbnRhdGlvbioJICwKCSAgICAgWHJtVmFsdWUqCQkgLAoJ ICAgICBYUG9pbnRlcgkJIAoKCSAgICAgKQkJICwKICAgIFhQb2ludGVyCQkgCgopOwoKZXh0ZXJu IGNoYXIgKlhybUxvY2FsZU9mRGF0YWJhc2UoCgogICAgWHJtRGF0YWJhc2UgCSAKCik7CgoKIAoK CgoKCnR5cGVkZWYgZW51bSB7CiAgICBYcm1vcHRpb25Ob0FyZywJIAogICAgWHJtb3B0aW9uSXNB cmcsICAgICAgCiAgICBYcm1vcHRpb25TdGlja3lBcmcsICAKICAgIFhybW9wdGlvblNlcEFyZywg ICAgIAogICAgWHJtb3B0aW9uUmVzQXJnLAkgCiAgICBYcm1vcHRpb25Ta2lwQXJnLCAgICAKICAg IFhybW9wdGlvblNraXBMaW5lLCAgIAogICAgWHJtb3B0aW9uU2tpcE5BcmdzCSAKCn0gWHJtT3B0 aW9uS2luZDsKCnR5cGVkZWYgc3RydWN0IHsKICAgIGNoYXIJICAgICpvcHRpb247CSAgICAgCiAg ICBjaGFyCSAgICAqc3BlY2lmaWVyOyAgICAgIAogICAgWHJtT3B0aW9uS2luZCAgIGFyZ0tpbmQ7 CSAgICAgCiAgICBYUG9pbnRlcgkgICAgdmFsdWU7CSAgICAgCn0gWHJtT3B0aW9uRGVzY1JlYywg KlhybU9wdGlvbkRlc2NMaXN0OwoKCmV4dGVybiB2b2lkIFhybVBhcnNlQ29tbWFuZCgKCiAgICBY cm1EYXRhYmFzZSoJICwKICAgIFhybU9wdGlvbkRlc2NMaXN0CSAsCiAgICBpbnQJCQkgLAogICAg Y29uc3QgIGNoYXIqCSAsCiAgICBpbnQqCQkgLAogICAgY2hhcioqCQkgCQkgICAgIAoKKTsKCiAK CgogCiMgNTkgIi91c3IvaW5jbHVkZS9YMTEvSW50cmluc2ljLmgiIDIgMwoKCgoKCgoKCgoKCgoK CgoKCgoKdHlwZWRlZiBjaGFyICpTdHJpbmc7CgoKCiAKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgc3RydWN0IF9XaWRnZXRSZWMgKldpZGdldDsKdHlw ZWRlZiBXaWRnZXQgKldpZGdldExpc3Q7CnR5cGVkZWYgc3RydWN0IF9XaWRnZXRDbGFzc1JlYyAq V2lkZ2V0Q2xhc3M7CnR5cGVkZWYgc3RydWN0IF9Db21wb3NpdGVSZWMgKkNvbXBvc2l0ZVdpZGdl dDsKdHlwZWRlZiBzdHJ1Y3QgX1h0QWN0aW9uc1JlYyAqWHRBY3Rpb25MaXN0Owp0eXBlZGVmIHN0 cnVjdCBfWHRFdmVudFJlYyAqWHRFdmVudFRhYmxlOwoKdHlwZWRlZiBzdHJ1Y3QgX1h0QXBwU3Ry dWN0ICpYdEFwcENvbnRleHQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZwlYdFZhbHVlTWFzazsKdHlw ZWRlZiB1bnNpZ25lZCBsb25nCVh0SW50ZXJ2YWxJZDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nCVh0 SW5wdXRJZDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nCVh0V29ya1Byb2NJZDsKdHlwZWRlZiB1bnNp Z25lZCBsb25nCVh0U2lnbmFsSWQ7CnR5cGVkZWYgdW5zaWduZWQgaW50CVh0R2VvbWV0cnlNYXNr Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcJWHRHQ01hc2s7ICAgIAp0eXBlZGVmIHVuc2lnbmVkIGxv bmcJUGl4ZWw7CSAgICAgCnR5cGVkZWYgaW50CQlYdENhY2hlVHlwZTsKCgoKCgogCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIGNoYXIJCUJvb2xlYW47CnR5cGVkZWYgbG9uZwkJWHRB cmdWYWw7CnR5cGVkZWYgdW5zaWduZWQgY2hhcglYdEVudW07CgoKdHlwZWRlZiB1bnNpZ25lZCBp bnQJQ2FyZGluYWw7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQJRGltZW5zaW9uOyAgIAp0eXBlZGVm IHNob3J0CQlQb3NpdGlvbjsgICAgCgoKdHlwZWRlZiB2b2lkKgkJWHRQb2ludGVyOwoKCgoKIAog CnR5cGVkZWYgWHRQb2ludGVyCU9wYXF1ZTsKCiMgMSAiL3Vzci9pbmNsdWRlL1gxMS9Db3JlLmgi IDEgMwogCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX1dpZGdldENsYXNzUmVjICpDb3JlV2lkZ2V0Q2xhc3M7CnR5 cGVkZWYgc3RydWN0IF9XaWRnZXRSZWMgKkNvcmVXaWRnZXQ7CmV4dGVybiAgV2lkZ2V0Q2xhc3Mg Y29yZVdpZGdldENsYXNzOwoKCmV4dGVybiAgV2lkZ2V0Q2xhc3Mgd2lkZ2V0Q2xhc3M7CgoKCgog CiMgMTkyICIvdXNyL2luY2x1ZGUvWDExL0ludHJpbnNpYy5oIiAyIDMKCiMgMSAiL3Vzci9pbmNs dWRlL1gxMS9Db21wb3NpdGUuaCIgMSAzCiAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBfQ29tcG9zaXRlQ2xhc3NSZWMg KkNvbXBvc2l0ZVdpZGdldENsYXNzOwoKdHlwZWRlZiBDYXJkaW5hbCAoKlh0T3JkZXJQcm9jKSgK CiAgICBXaWRnZXQgCSAKCik7CgogCgpleHRlcm4gdm9pZCBYdE1hbmFnZUNoaWxkcmVuKAoKICAg IFdpZGdldExpc3QgCQkgLAogICAgQ2FyZGluYWwgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRNYW5h Z2VDaGlsZCgKCiAgICBXaWRnZXQgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRVbm1hbmFnZUNoaWxk cmVuKAoKICAgIFdpZGdldExpc3QgCQkgLAogICAgQ2FyZGluYWwgCQkgCgopOwoKZXh0ZXJuIHZv aWQgWHRVbm1hbmFnZUNoaWxkKAoKICAgIFdpZGdldCAJCSAKCik7Cgp0eXBlZGVmIHZvaWQgKCpY dERvQ2hhbmdlUHJvYykoCgogICAgV2lkZ2V0CQkgLAogICAgV2lkZ2V0TGlzdAkJICwKICAgIENh cmRpbmFsICoJCSAsCiAgICBXaWRnZXRMaXN0CQkgLAogICAgQ2FyZGluYWwgKgkJICwKICAgIFh0 UG9pbnRlcgkJIAoKKTsKCmV4dGVybiB2b2lkIFh0Q2hhbmdlTWFuYWdlZFNldCgKCiAgICBXaWRn ZXRMaXN0CQkgLAogICAgQ2FyZGluYWwJCSAsCiAgICBYdERvQ2hhbmdlUHJvYwkgLAogICAgWHRQ b2ludGVyCQkgLAogICAgV2lkZ2V0TGlzdAkJICwKICAgIENhcmRpbmFsCQkgCgopOwoKIAoKCmV4 dGVybiAgV2lkZ2V0Q2xhc3MgY29tcG9zaXRlV2lkZ2V0Q2xhc3M7CgoKCiAKIyAxOTMgIi91c3Iv aW5jbHVkZS9YMTEvSW50cmluc2ljLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvWDExL0NvbnN0 cmFpbnQuaCIgMSAzCiAKIAogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX0NvbnN0cmFpbnRDbGFzc1JlYyAqQ29uc3RyYWlu dFdpZGdldENsYXNzOwoKCmV4dGVybiAgV2lkZ2V0Q2xhc3MgY29uc3RyYWludFdpZGdldENsYXNz OwoKCgogCiMgMTk0ICIvdXNyL2luY2x1ZGUvWDExL0ludHJpbnNpYy5oIiAyIDMKCiMgMSAiL3Vz ci9pbmNsdWRlL1gxMS9PYmplY3QuaCIgMSAzCiAKIAogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX09iamVjdFJlYyAqT2Jq ZWN0Owp0eXBlZGVmIHN0cnVjdCBfT2JqZWN0Q2xhc3NSZWMgKk9iamVjdENsYXNzOwoKCmV4dGVy biAgV2lkZ2V0Q2xhc3Mgb2JqZWN0Q2xhc3M7CgoKIAojIDE5NSAiL3Vzci9pbmNsdWRlL1gxMS9J bnRyaW5zaWMuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9YMTEvUmVjdE9iai5oIiAxIDMKIAog CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBl ZGVmIHN0cnVjdCBfUmVjdE9ialJlYyAqUmVjdE9iajsKdHlwZWRlZiBzdHJ1Y3QgX1JlY3RPYmpD bGFzc1JlYyAqUmVjdE9iakNsYXNzOwoKCmV4dGVybiAgV2lkZ2V0Q2xhc3MgcmVjdE9iakNsYXNz OwoKCiAKIyAxOTYgIi91c3IvaW5jbHVkZS9YMTEvSW50cmluc2ljLmgiIDIgMwoKCnR5cGVkZWYg c3RydWN0IF9UcmFuc2xhdGlvbkRhdGEgKlh0VHJhbnNsYXRpb25zOwp0eXBlZGVmIHN0cnVjdCBf VHJhbnNsYXRpb25EYXRhICpYdEFjY2VsZXJhdG9yczsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgTW9k aWZpZXJzOwoKdHlwZWRlZiB2b2lkICgqWHRBY3Rpb25Qcm9jKSgKCiAgICBXaWRnZXQgCQkgLAog ICAgWEV2ZW50KgkJICwKICAgIFN0cmluZyoJCSAsCiAgICBDYXJkaW5hbCoJCSAKCik7Cgp0eXBl ZGVmIFh0QWN0aW9uUHJvYyogWHRCb3VuZEFjdGlvbnM7Cgp0eXBlZGVmIHN0cnVjdCBfWHRBY3Rp b25zUmVjewogICAgU3RyaW5nCSBzdHJpbmc7CiAgICBYdEFjdGlvblByb2MgcHJvYzsKfSBYdEFj dGlvbnNSZWM7Cgp0eXBlZGVmIGVudW0gewogCiAKICAgIFh0QWRkcmVzcywJCSAKICAgIFh0QmFz ZU9mZnNldCwJIAogICAgWHRJbW1lZGlhdGUsCSAKICAgIFh0UmVzb3VyY2VTdHJpbmcsCSAKICAg IFh0UmVzb3VyY2VRdWFyaywJIAogICAgWHRXaWRnZXRCYXNlT2Zmc2V0LAkgCiAgICBYdFByb2Nl ZHVyZUFyZwkgCn0gWHRBZGRyZXNzTW9kZTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIFh0QWRkcmVz c01vZGUgICBhZGRyZXNzX21vZGU7CiAgICBYdFBvaW50ZXIJICAgIGFkZHJlc3NfaWQ7CiAgICBD YXJkaW5hbAkgICAgc2l6ZTsKfSBYdENvbnZlcnRBcmdSZWMsICpYdENvbnZlcnRBcmdMaXN0OwoK dHlwZWRlZiB2b2lkICgqWHRDb252ZXJ0QXJnUHJvYykoCgogICAgV2lkZ2V0IAkJICwKICAgIENh cmRpbmFsKgkJICwKICAgIFhybVZhbHVlKgkJIAoKKTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIFh0 R2VvbWV0cnlNYXNrIHJlcXVlc3RfbW9kZTsKICAgIFBvc2l0aW9uIHgsIHk7CiAgICBEaW1lbnNp b24gd2lkdGgsIGhlaWdodCwgYm9yZGVyX3dpZHRoOwogICAgV2lkZ2V0IHNpYmxpbmc7CiAgICBp bnQgc3RhY2tfbW9kZTsgICAgCn0gWHRXaWRnZXRHZW9tZXRyeTsKCiAKCgogCgoKdHlwZWRlZiB2 b2lkICgqWHRDb252ZXJ0ZXIpKCAgCgogICAgWHJtVmFsdWUqCQkgLAogICAgQ2FyZGluYWwqCQkg LAogICAgWHJtVmFsdWUqCQkgLAogICAgWHJtVmFsdWUqCQkgCgopOwoKdHlwZWRlZiBCb29sZWFu ICgqWHRUeXBlQ29udmVydGVyKSgKCiAgICBEaXNwbGF5KgkJICwKICAgIFhybVZhbHVlKgkJICwK ICAgIENhcmRpbmFsKgkJICwKICAgIFhybVZhbHVlKgkJICwKICAgIFhybVZhbHVlKgkJICwKICAg IFh0UG9pbnRlcioJCSAKCik7Cgp0eXBlZGVmIHZvaWQgKCpYdERlc3RydWN0b3IpKAoKICAgIFh0 QXBwQ29udGV4dAkgLAogICAgWHJtVmFsdWUqCQkgLAogICAgWHRQb2ludGVyIAkJICwKICAgIFhy bVZhbHVlKgkJICwKICAgIENhcmRpbmFsKgkJIAoKKTsKCnR5cGVkZWYgT3BhcXVlIFh0Q2FjaGVS ZWY7Cgp0eXBlZGVmIE9wYXF1ZSBYdEFjdGlvbkhvb2tJZDsKCnR5cGVkZWYgdm9pZCAoKlh0QWN0 aW9uSG9va1Byb2MpKAoKICAgIFdpZGdldAkJICwKICAgIFh0UG9pbnRlcgkJICwKICAgIFN0cmlu ZwkJICwKICAgIFhFdmVudCoJCSAsCiAgICBTdHJpbmcqCQkgLAogICAgQ2FyZGluYWwqCQkgCgop OwoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIFh0QmxvY2tIb29rSWQ7Cgp0eXBlZGVmIHZvaWQgKCpY dEJsb2NrSG9va1Byb2MpKAoKICAgIFh0UG9pbnRlcgkJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKlh0 S2V5UHJvYykoCgogICAgRGlzcGxheSoJCSAsCiAgICB1bnNpZ25lZCBpbnQgIAkJICwKICAgIE1v ZGlmaWVycwkJICwKICAgIE1vZGlmaWVycyoJCSAsCiAgICBLZXlTeW0qCQkgCgopOwoKdHlwZWRl ZiB2b2lkICgqWHRDYXNlUHJvYykoCgogICAgRGlzcGxheSoJCSAsCiAgICBLZXlTeW0JCSAsCiAg ICBLZXlTeW0qCQkgLAogICAgS2V5U3ltKgkJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKlh0RXZlbnRI YW5kbGVyKSgKCiAgICBXaWRnZXQgCQkgLAogICAgWHRQb2ludGVyIAkJICwKICAgIFhFdmVudCoJ CSAsCiAgICBCb29sZWFuKgkJIAoKKTsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIEV2ZW50TWFzazsK CnR5cGVkZWYgZW51bSB7WHRMaXN0SGVhZCwgWHRMaXN0VGFpbCB9IFh0TGlzdFBvc2l0aW9uOwoK dHlwZWRlZiB1bnNpZ25lZCBsb25nCVh0SW5wdXRNYXNrOwoKCgoKCnR5cGVkZWYgdm9pZCAoKlh0 VGltZXJDYWxsYmFja1Byb2MpKAoKICAgIFh0UG9pbnRlciAJCSAsCiAgICBYdEludGVydmFsSWQq CSAKCik7Cgp0eXBlZGVmIHZvaWQgKCpYdElucHV0Q2FsbGJhY2tQcm9jKSgKCiAgICBYdFBvaW50 ZXIgCQkgLAogICAgaW50KgkJICwKICAgIFh0SW5wdXRJZCoJCSAKCik7Cgp0eXBlZGVmIHZvaWQg KCpYdFNpZ25hbENhbGxiYWNrUHJvYykoCgogICAgWHRQb2ludGVyCQkgLAogICAgWHRTaWduYWxJ ZCoJCSAKCik7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBTdHJpbmcJbmFtZTsKICAgIFh0QXJnVmFs CXZhbHVlOwp9IEFyZywgKkFyZ0xpc3Q7Cgp0eXBlZGVmIFh0UG9pbnRlcglYdFZhckFyZ3NMaXN0 OwoKdHlwZWRlZiB2b2lkICgqWHRDYWxsYmFja1Byb2MpKAoKICAgIFdpZGdldCAJCSAsCiAgICBY dFBvaW50ZXIgCQkgLAkgCiAgICBYdFBvaW50ZXIgCQkgCSAKCik7Cgp0eXBlZGVmIHN0cnVjdCBf WHRDYWxsYmFja1JlYyB7CiAgICBYdENhbGxiYWNrUHJvYyAgY2FsbGJhY2s7CiAgICBYdFBvaW50 ZXIJICAgIGNsb3N1cmU7Cn0gWHRDYWxsYmFja1JlYywgKlh0Q2FsbGJhY2tMaXN0OwoKdHlwZWRl ZiBlbnVtIHsKCVh0Q2FsbGJhY2tOb0xpc3QsCglYdENhbGxiYWNrSGFzTm9uZSwKCVh0Q2FsbGJh Y2tIYXNTb21lCn0gWHRDYWxsYmFja1N0YXR1czsKCnR5cGVkZWYgZW51bSAgewogICAgWHRHZW9t ZXRyeVllcywJICAgCiAgICBYdEdlb21ldHJ5Tm8sCSAgIAogICAgWHRHZW9tZXRyeUFsbW9zdCwJ ICAgCiAgICBYdEdlb21ldHJ5RG9uZQkgICAKfSBYdEdlb21ldHJ5UmVzdWx0OwoKdHlwZWRlZiBl bnVtIHtYdEdyYWJOb25lLCBYdEdyYWJOb25leGNsdXNpdmUsIFh0R3JhYkV4Y2x1c2l2ZX0gWHRH cmFiS2luZDsKCnR5cGVkZWYgc3RydWN0IHsKICAgIFdpZGdldCAgc2hlbGxfd2lkZ2V0OwogICAg V2lkZ2V0ICBlbmFibGVfd2lkZ2V0Owp9IFh0UG9wZG93bklEUmVjLCAqWHRQb3Bkb3duSUQ7Cgp0 eXBlZGVmIHN0cnVjdCBfWHRSZXNvdXJjZSB7CiAgICBTdHJpbmcJcmVzb3VyY2VfbmFtZTsJIAog ICAgU3RyaW5nCXJlc291cmNlX2NsYXNzOwkgCiAgICBTdHJpbmcJcmVzb3VyY2VfdHlwZTsJIAog ICAgQ2FyZGluYWwJcmVzb3VyY2Vfc2l6ZTsJIAogICAgQ2FyZGluYWwJcmVzb3VyY2Vfb2Zmc2V0 OyAKICAgIFN0cmluZwlkZWZhdWx0X3R5cGU7CSAKICAgIFh0UG9pbnRlcglkZWZhdWx0X2FkZHI7 CSAKfSBYdFJlc291cmNlLCAqWHRSZXNvdXJjZUxpc3Q7Cgp0eXBlZGVmIHZvaWQgKCpYdFJlc291 cmNlRGVmYXVsdFByb2MpKAoKICAgIFdpZGdldAkgLAogICAgaW50CQkgLAogICAgWHJtVmFsdWUq CSAKCik7Cgp0eXBlZGVmIFN0cmluZyAoKlh0TGFuZ3VhZ2VQcm9jKSgKCiAgICBEaXNwbGF5Kgkg LAogICAgU3RyaW5nCSAsCiAgICBYdFBvaW50ZXIJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKlh0RXJy b3JNc2dIYW5kbGVyKSgKCiAgICBTdHJpbmcgCQkgLAogICAgU3RyaW5nCQkgLAogICAgU3RyaW5n CQkgLAogICAgU3RyaW5nCQkgLAogICAgU3RyaW5nKgkJICwKICAgIENhcmRpbmFsKgkJIAoKKTsK CnR5cGVkZWYgdm9pZCAoKlh0RXJyb3JIYW5kbGVyKSgKCiAgU3RyaW5nCQkgCgopOwoKdHlwZWRl ZiB2b2lkICgqWHRDcmVhdGVQb3B1cENoaWxkUHJvYykoCgogICAgV2lkZ2V0CSAKCik7Cgp0eXBl ZGVmIEJvb2xlYW4gKCpYdFdvcmtQcm9jKSgKCiAgICBYdFBvaW50ZXIgCQkgCSAKCik7Cgp0eXBl ZGVmIHN0cnVjdCB7CiAgICBjaGFyIG1hdGNoOwogICAgU3RyaW5nIHN1YnN0aXR1dGlvbjsKfSBT dWJzdGl0dXRpb25SZWMsICpTdWJzdGl0dXRpb247Cgp0eXBlZGVmIEJvb2xlYW4gKCpYdEZpbGVQ cmVkaWNhdGUpKAoKICAgU3RyaW5nICAKCik7Cgp0eXBlZGVmIFh0UG9pbnRlciBYdFJlcXVlc3RJ ZDsKCnR5cGVkZWYgQm9vbGVhbiAoKlh0Q29udmVydFNlbGVjdGlvblByb2MpKAoKICAgIFdpZGdl dCAJCSAsCiAgICBBdG9tKgkJICwKICAgIEF0b20qCQkgLAogICAgQXRvbSoJCSAsCiAgICBYdFBv aW50ZXIqCQkgLAogICAgdW5zaWduZWQgbG9uZyoJICwKICAgIGludCoJCSAKCik7Cgp0eXBlZGVm IHZvaWQgKCpYdExvc2VTZWxlY3Rpb25Qcm9jKSgKCiAgICBXaWRnZXQgCQkgLAogICAgQXRvbSoJ CSAKCik7Cgp0eXBlZGVmIHZvaWQgKCpYdFNlbGVjdGlvbkRvbmVQcm9jKSgKCiAgICBXaWRnZXQg CQkgLAogICAgQXRvbSoJCSAsCiAgICBBdG9tKgkJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKlh0U2Vs ZWN0aW9uQ2FsbGJhY2tQcm9jKSgKCiAgICBXaWRnZXQgCQkgLAogICAgWHRQb2ludGVyIAkJICwK ICAgIEF0b20qCQkgLAogICAgQXRvbSoJCSAsCiAgICBYdFBvaW50ZXIgCQkgLAogICAgdW5zaWdu ZWQgbG9uZyoJICwKICAgIGludCoJCSAKCik7Cgp0eXBlZGVmIHZvaWQgKCpYdExvc2VTZWxlY3Rp b25JbmNyUHJvYykoCgogICAgV2lkZ2V0IAkJICwKICAgIEF0b20qCQkgLAogICAgWHRQb2ludGVy IAkJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKlh0U2VsZWN0aW9uRG9uZUluY3JQcm9jKSgKCiAgICBX aWRnZXQgCQkgLAogICAgQXRvbSoJCSAsCiAgICBBdG9tKgkJICwKICAgIFh0UmVxdWVzdElkKgkg LAogICAgWHRQb2ludGVyIAkJIAoKKTsKCnR5cGVkZWYgQm9vbGVhbiAoKlh0Q29udmVydFNlbGVj dGlvbkluY3JQcm9jKSgKCiAgICBXaWRnZXQgCQkgLAogICAgQXRvbSoJCSAsCiAgICBBdG9tKgkJ ICwKICAgIEF0b20qCQkgLAogICAgWHRQb2ludGVyKgkJICwKICAgIHVuc2lnbmVkIGxvbmcqCSAs CiAgICBpbnQqCQkgLAogICAgdW5zaWduZWQgbG9uZyoJICwKICAgIFh0UG9pbnRlciAJCSAsCiAg ICBYdFJlcXVlc3RJZCoJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKlh0Q2FuY2VsQ29udmVydFNlbGVj dGlvblByb2MpKAoKICAgIFdpZGdldCAJCSAsCiAgICBBdG9tKgkJICwKICAgIEF0b20qCQkgLAog ICAgWHRSZXF1ZXN0SWQqCSAsCiAgICBYdFBvaW50ZXIgCQkgCgopOwoKdHlwZWRlZiBCb29sZWFu ICgqWHRFdmVudERpc3BhdGNoUHJvYykoCgogICAgWEV2ZW50KgkJIAoKKTsKCnR5cGVkZWYgdm9p ZCAoKlh0RXh0ZW5zaW9uU2VsZWN0UHJvYykoCgogICAgV2lkZ2V0CQkgLAogICAgaW50KgkJICwK ICAgIFh0UG9pbnRlcioJCSAsCiAgICBpbnQJCQkgLAogICAgWHRQb2ludGVyCQkgCgopOwoKIAoK CgoKCiAKCmV4dGVybiBCb29sZWFuIFh0Q29udmVydEFuZFN0b3JlKAoKICAgIFdpZGdldCAJCSAs CiAgICBjb25zdCAgY2hhciogIAkgLAogICAgWHJtVmFsdWUqCQkgLAogICAgY29uc3QgIGNoYXIq ICAJICwKICAgIFhybVZhbHVlKgkJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q2FsbENvbnZlcnRl cigKCiAgICBEaXNwbGF5KgkJICwKICAgIFh0VHlwZUNvbnZlcnRlciAJICwKICAgIFhybVZhbHVl UHRyIAkgLAogICAgQ2FyZGluYWwgCQkgLAogICAgWHJtVmFsdWVQdHIgCSAsCiAgICBYcm1WYWx1 ZSoJCSAsCiAgICBYdENhY2hlUmVmKgkJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0RGlzcGF0Y2hF dmVudCgKCiAgICBYRXZlbnQqIAkJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q2FsbEFjY2VwdEZv Y3VzKAoKICAgIFdpZGdldCAJCSAsCiAgICBUaW1lKgkJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0 UGVla0V2ZW50KCAgCgogICAgWEV2ZW50KgkJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0QXBwUGVl a0V2ZW50KAoKICAgIFh0QXBwQ29udGV4dCAJICwKICAgIFhFdmVudCoJCSAKCik7CgpleHRlcm4g Qm9vbGVhbiBYdElzU3ViY2xhc3MoCgogICAgV2lkZ2V0IAkJICwKICAgIFdpZGdldENsYXNzIAkg CgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRJc09iamVjdCgKCiAgICBXaWRnZXQgCQkgCgopOwoKZXh0 ZXJuIEJvb2xlYW4gX1h0Q2hlY2tTdWJjbGFzc0ZsYWcoICAKCiAgICBXaWRnZXQJCSAsCiAgICB1 bnNpZ25lZCBpbnQgCQkgCgopOwoKZXh0ZXJuIEJvb2xlYW4gX1h0SXNTdWJjbGFzc09mKCAgCgog ICAgV2lkZ2V0CQkgLAogICAgV2lkZ2V0Q2xhc3MJCSAsCiAgICBXaWRnZXRDbGFzcwkJICwKICAg IHVuc2lnbmVkIGludCAJCSAKCik7CgpleHRlcm4gQm9vbGVhbiBYdElzTWFuYWdlZCgKCiAgICBX aWRnZXQgCQkgCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRJc1JlYWxpemVkKAoKICAgIFdpZGdldCAJ CSAKCik7CgpleHRlcm4gQm9vbGVhbiBYdElzU2Vuc2l0aXZlKAoKICAgIFdpZGdldCAJCSAKCik7 CgpleHRlcm4gQm9vbGVhbiBYdE93blNlbGVjdGlvbigKCiAgICBXaWRnZXQgCQkgLAogICAgQXRv bSAJCSAsCiAgICBUaW1lIAkJICwKICAgIFh0Q29udmVydFNlbGVjdGlvblByb2MgICwKICAgIFh0 TG9zZVNlbGVjdGlvblByb2MJICwKICAgIFh0U2VsZWN0aW9uRG9uZVByb2MgIAoKKTsKCmV4dGVy biBCb29sZWFuIFh0T3duU2VsZWN0aW9uSW5jcmVtZW50YWwoCgogICAgV2lkZ2V0IAkJICwKICAg IEF0b20gCQkgLAogICAgVGltZSAJCSAsCiAgICBYdENvbnZlcnRTZWxlY3Rpb25JbmNyUHJvYwkg LAogICAgWHRMb3NlU2VsZWN0aW9uSW5jclByb2MJICwKICAgIFh0U2VsZWN0aW9uRG9uZUluY3JQ cm9jCSAsCiAgICBYdENhbmNlbENvbnZlcnRTZWxlY3Rpb25Qcm9jICAsCiAgICBYdFBvaW50ZXIg CQkgCgopOwoKZXh0ZXJuIFh0R2VvbWV0cnlSZXN1bHQgWHRNYWtlUmVzaXplUmVxdWVzdCgKCiAg ICBXaWRnZXQgCQkgLAogICAgdW5zaWduZWQgaW50IAkgLAogICAgdW5zaWduZWQgaW50IAkgLAog ICAgRGltZW5zaW9uKgkJICwKICAgIERpbWVuc2lvbioJCSAKCik7CgpleHRlcm4gdm9pZCBYdFRy YW5zbGF0ZUNvb3JkcygKCiAgICBXaWRnZXQgCQkgLAogICAgaW50IAkJICwKICAgIGludCAJCSAs CiAgICBQb3NpdGlvbioJCSAsCiAgICBQb3NpdGlvbioJCSAKCik7CgpleHRlcm4gS2V5U3ltKiBY dEdldEtleXN5bVRhYmxlKAoKICAgIERpc3BsYXkqCQkgLAogICAgS2V5Q29kZSoJCSAsCiAgICBp bnQqCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRLZXlzeW1Ub0tleWNvZGVMaXN0KAoKICAgIERpc3Bs YXkqCQkgLAogICAgS2V5U3ltIAkJICwKICAgIEtleUNvZGUqKgkJICwKICAgIENhcmRpbmFsKgkJ IAoKKTsKCmV4dGVybiB2b2lkIFh0U3RyaW5nQ29udmVyc2lvbldhcm5pbmcoICAKCiAgICBjb25z dCAgY2hhciogCSAsCiAgICBjb25zdCAgY2hhciogCSAKCik7CgpleHRlcm4gdm9pZCBYdERpc3Bs YXlTdHJpbmdDb252ZXJzaW9uV2FybmluZygKCiAgICBEaXNwbGF5KgkgCSAsCiAgICBjb25zdCAg Y2hhciogCSAsCiAgICBjb25zdCAgY2hhciogCSAKCik7CgoKZXh0ZXJuICBYdENvbnZlcnRBcmdS ZWMgY29uc3QgY29sb3JDb252ZXJ0QXJnc1tdOwpleHRlcm4gIFh0Q29udmVydEFyZ1JlYyBjb25z dCBzY3JlZW5Db252ZXJ0QXJnW107CgoKCgoKZXh0ZXJuIHZvaWQgWHRBcHBBZGRDb252ZXJ0ZXIo ICAKCiAgICBYdEFwcENvbnRleHQJICwKICAgIGNvbnN0ICBjaGFyKiAJICwKICAgIGNvbnN0ICBj aGFyKiAJICwKICAgIFh0Q29udmVydGVyIAkgLAogICAgWHRDb252ZXJ0QXJnTGlzdAkgLAogICAg Q2FyZGluYWwgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRBZGRDb252ZXJ0ZXIoICAKCiAgICBjb25z dCAgY2hhciogCSAsCiAgICBjb25zdCAgY2hhciogIAkgLAogICAgWHRDb252ZXJ0ZXIgCSAsCiAg ICBYdENvbnZlcnRBcmdMaXN0IAkgLAogICAgQ2FyZGluYWwgCQkgCgopOwoKZXh0ZXJuIHZvaWQg WHRTZXRUeXBlQ29udmVydGVyKAoKICAgIGNvbnN0ICBjaGFyKiAgCSAsCiAgICBjb25zdCAgY2hh ciogIAkgLAogICAgWHRUeXBlQ29udmVydGVyIAkgLAogICAgWHRDb252ZXJ0QXJnTGlzdCAJICwK ICAgIENhcmRpbmFsIAkJICwKICAgIFh0Q2FjaGVUeXBlIAkgLAogICAgWHREZXN0cnVjdG9yIAkg CgopOwoKZXh0ZXJuIHZvaWQgWHRBcHBTZXRUeXBlQ29udmVydGVyKAoKICAgIFh0QXBwQ29udGV4 dCAJICwKICAgIGNvbnN0ICBjaGFyKiAgCSAsCiAgICBjb25zdCAgY2hhciogIAkgLAogICAgWHRU eXBlQ29udmVydGVyIAkgLAogICAgWHRDb252ZXJ0QXJnTGlzdCAJICwKICAgIENhcmRpbmFsIAkJ ICwKICAgIFh0Q2FjaGVUeXBlIAkgLAogICAgWHREZXN0cnVjdG9yIAkgCgopOwoKZXh0ZXJuIHZv aWQgWHRDb252ZXJ0KCAgCgogICAgV2lkZ2V0IAkJICwKICAgIGNvbnN0ICBjaGFyKiAgCSAsCiAg ICBYcm1WYWx1ZSoJCSAsCiAgICBjb25zdCAgY2hhciogIAkgLAogICAgWHJtVmFsdWUqCQkgCgop OwoKZXh0ZXJuIHZvaWQgWHREaXJlY3RDb252ZXJ0KCAgCgogICAgWHRDb252ZXJ0ZXIgCSAsCiAg ICBYcm1WYWx1ZVB0ciAJICwKICAgIENhcmRpbmFsIAkJICwKICAgIFhybVZhbHVlUHRyIAkgLAog ICAgWHJtVmFsdWUqCQkgCgopOwoKIAoKCgoKCmV4dGVybiBYdFRyYW5zbGF0aW9ucyBYdFBhcnNl VHJhbnNsYXRpb25UYWJsZSgKCiAgICBjb25zdCAgY2hhciogCSAKCik7CgpleHRlcm4gWHRBY2Nl bGVyYXRvcnMgWHRQYXJzZUFjY2VsZXJhdG9yVGFibGUoCgogICAgY29uc3QgIGNoYXIqIAkgCgop OwoKZXh0ZXJuIHZvaWQgWHRPdmVycmlkZVRyYW5zbGF0aW9ucygKCiAgICBXaWRnZXQgCQkgLAog ICAgWHRUcmFuc2xhdGlvbnMgCSAKCik7CgpleHRlcm4gdm9pZCBYdEF1Z21lbnRUcmFuc2xhdGlv bnMoCgogICAgV2lkZ2V0IAkJICwKICAgIFh0VHJhbnNsYXRpb25zIAkgCgopOwoKZXh0ZXJuIHZv aWQgWHRJbnN0YWxsQWNjZWxlcmF0b3JzKAoKICAgIFdpZGdldCAJCSAsCiAgICBXaWRnZXQJCSAK Cik7CgpleHRlcm4gdm9pZCBYdEluc3RhbGxBbGxBY2NlbGVyYXRvcnMoCgogICAgV2lkZ2V0IAkJ ICwKICAgIFdpZGdldAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0VW5pbnN0YWxsVHJhbnNsYXRpb25z KAoKICAgIFdpZGdldCAJCSAKCik7CgpleHRlcm4gdm9pZCBYdEFwcEFkZEFjdGlvbnMoCgogICAg WHRBcHBDb250ZXh0IAkgLAogICAgWHRBY3Rpb25MaXN0IAkgLAogICAgQ2FyZGluYWwgCQkgCgop OwoKZXh0ZXJuIHZvaWQgWHRBZGRBY3Rpb25zKCAgCgogICAgWHRBY3Rpb25MaXN0IAkgLAogICAg Q2FyZGluYWwgCQkgCgopOwoKZXh0ZXJuIFh0QWN0aW9uSG9va0lkIFh0QXBwQWRkQWN0aW9uSG9v aygKCiAgICBYdEFwcENvbnRleHQgCSAsCiAgICBYdEFjdGlvbkhvb2tQcm9jIAkgLAogICAgWHRQ b2ludGVyIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0UmVtb3ZlQWN0aW9uSG9vaygKCiAgICBYdEFj dGlvbkhvb2tJZCAJIAoKKTsKCmV4dGVybiB2b2lkIFh0R2V0QWN0aW9uTGlzdCgKCiAgICBXaWRn ZXRDbGFzcwkJICwKICAgIFh0QWN0aW9uTGlzdCoJICwKICAgIENhcmRpbmFsKgkJIAoKKTsKCmV4 dGVybiB2b2lkIFh0Q2FsbEFjdGlvblByb2MoCgogICAgV2lkZ2V0CQkgLAogICAgY29uc3QgIGNo YXIqIAkgLAogICAgWEV2ZW50KgkJICwKICAgIFN0cmluZyoJCSAsCiAgICBDYXJkaW5hbAkJIAoK KTsKCmV4dGVybiB2b2lkIFh0UmVnaXN0ZXJHcmFiQWN0aW9uKAoKICAgIFh0QWN0aW9uUHJvYyAJ ICwKICAgIGludCAgCQkgLAogICAgdW5zaWduZWQgaW50IAkgLAogICAgaW50CQkJICwKICAgIGlu dAkgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRTZXRNdWx0aUNsaWNrVGltZSgKCiAgICBEaXNwbGF5 KgkJICwKICAgIGludCAJCSAKCik7CgpleHRlcm4gaW50IFh0R2V0TXVsdGlDbGlja1RpbWUoCgog ICAgRGlzcGxheSoJCSAKCik7CgpleHRlcm4gS2V5U3ltIFh0R2V0QWN0aW9uS2V5c3ltKAoKICAg IFhFdmVudCoJCSAsCiAgICBNb2RpZmllcnMqCQkgCgopOwoKIAoKCgoKCmV4dGVybiB2b2lkIFh0 VHJhbnNsYXRlS2V5Y29kZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIHVuc2lnbmVkIGludCAgCQkg LAogICAgTW9kaWZpZXJzIAkJICwKICAgIE1vZGlmaWVycyoJCSAsCiAgICBLZXlTeW0qCQkgCgop OwoKZXh0ZXJuIHZvaWQgWHRUcmFuc2xhdGVLZXkoCgogICAgRGlzcGxheSoJCSAsCiAgICB1bnNp Z25lZCBpbnQgCQkgLAogICAgTW9kaWZpZXJzCQkgLAogICAgTW9kaWZpZXJzKgkJICwKICAgIEtl eVN5bSoJCSAKCik7CgpleHRlcm4gdm9pZCBYdFNldEtleVRyYW5zbGF0b3IoCgogICAgRGlzcGxh eSoJCSAsCiAgICBYdEtleVByb2MgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRSZWdpc3RlckNhc2VD b252ZXJ0ZXIoCgogICAgRGlzcGxheSoJCSAsCiAgICBYdENhc2VQcm9jIAkJICwKICAgIEtleVN5 bSAJCSAsCiAgICBLZXlTeW0gCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRDb252ZXJ0Q2FzZSgKCiAg ICBEaXNwbGF5KgkJICwKICAgIEtleVN5bSAJCSAsCiAgICBLZXlTeW0qCQkgLAogICAgS2V5U3lt KgkJIAoKKTsKCiAKCgoKCgogCgoKCgpleHRlcm4gdm9pZCBYdEFkZEV2ZW50SGFuZGxlcigKCiAg ICBXaWRnZXQgCQkgLAogICAgRXZlbnRNYXNrIAkJICwKICAgIGludCAgCQkgLAogICAgWHRFdmVu dEhhbmRsZXIgCSAsCiAgICBYdFBvaW50ZXIgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRSZW1vdmVF dmVudEhhbmRsZXIoCgogICAgV2lkZ2V0IAkJICwKICAgIEV2ZW50TWFzayAJCSAsCiAgICBpbnQg IAkJICwKICAgIFh0RXZlbnRIYW5kbGVyIAkgLAogICAgWHRQb2ludGVyIAkJIAoKKTsKCmV4dGVy biB2b2lkIFh0QWRkUmF3RXZlbnRIYW5kbGVyKAoKICAgIFdpZGdldCAJCSAsCiAgICBFdmVudE1h c2sgCQkgLAogICAgaW50ICAJCSAsCiAgICBYdEV2ZW50SGFuZGxlciAJICwKICAgIFh0UG9pbnRl ciAJCSAKCik7CgpleHRlcm4gdm9pZCBYdFJlbW92ZVJhd0V2ZW50SGFuZGxlcigKCiAgICBXaWRn ZXQgCQkgLAogICAgRXZlbnRNYXNrIAkJICwKICAgIGludCAgCQkgLAogICAgWHRFdmVudEhhbmRs ZXIgCSAsCiAgICBYdFBvaW50ZXIgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRJbnNlcnRFdmVudEhh bmRsZXIoCgogICAgV2lkZ2V0IAkJICwKICAgIEV2ZW50TWFzayAJCSAsCiAgICBpbnQgIAkJICwK ICAgIFh0RXZlbnRIYW5kbGVyIAkgLAogICAgWHRQb2ludGVyIAkJICwKICAgIFh0TGlzdFBvc2l0 aW9uIAkgCgopOwoKZXh0ZXJuIHZvaWQgWHRJbnNlcnRSYXdFdmVudEhhbmRsZXIoCgogICAgV2lk Z2V0IAkJICwKICAgIEV2ZW50TWFzayAJCSAsCiAgICBpbnQgIAkJICwKICAgIFh0RXZlbnRIYW5k bGVyIAkgLAogICAgWHRQb2ludGVyIAkJICwKICAgIFh0TGlzdFBvc2l0aW9uIAkgCgopOwoKZXh0 ZXJuIFh0RXZlbnREaXNwYXRjaFByb2MgWHRTZXRFdmVudERpc3BhdGNoZXIoCgogICAgRGlzcGxh eSoJCSAsCiAgICBpbnQJCQkgLAogICAgWHRFdmVudERpc3BhdGNoUHJvYwkgCgopOwoKZXh0ZXJu IEJvb2xlYW4gWHREaXNwYXRjaEV2ZW50VG9XaWRnZXQoCgogICAgV2lkZ2V0CQkgLAogICAgWEV2 ZW50KgkJIAoKKTsKCmV4dGVybiB2b2lkIFh0SW5zZXJ0RXZlbnRUeXBlSGFuZGxlcigKCiAgICBX aWRnZXQJCSAsCiAgICBpbnQJCQkgLAogICAgWHRQb2ludGVyCQkgLAogICAgWHRFdmVudEhhbmRs ZXIJICwKICAgIFh0UG9pbnRlcgkJICwKICAgIFh0TGlzdFBvc2l0aW9uCSAKCik7CgpleHRlcm4g dm9pZCBYdFJlbW92ZUV2ZW50VHlwZUhhbmRsZXIoCgogICAgV2lkZ2V0CQkgLAogICAgaW50CQkJ ICwKICAgIFh0UG9pbnRlcgkJICwKICAgIFh0RXZlbnRIYW5kbGVyCSAsCiAgICBYdFBvaW50ZXIJ CSAKCik7CgpleHRlcm4gRXZlbnRNYXNrIFh0QnVpbGRFdmVudE1hc2soCgogICAgV2lkZ2V0IAkJ IAoKKTsKCmV4dGVybiB2b2lkIFh0UmVnaXN0ZXJFeHRlbnNpb25TZWxlY3RvcigKCiAgICBEaXNw bGF5KgkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgWHRFeHRlbnNpb25TZWxlY3RQ cm9jICAsCiAgICBYdFBvaW50ZXIJCSAKCik7CgpleHRlcm4gdm9pZCBYdEFkZEdyYWIoCgogICAg V2lkZ2V0IAkJICwKICAgIGludCAgCQkgLAogICAgaW50ICAJCSAKCik7CgpleHRlcm4gdm9pZCBY dFJlbW92ZUdyYWIoCgogICAgV2lkZ2V0IAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0UHJvY2Vzc0V2 ZW50KCAgCgogICAgWHRJbnB1dE1hc2sgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRBcHBQcm9jZXNz RXZlbnQoCgogICAgWHRBcHBDb250ZXh0IAkJICwKICAgIFh0SW5wdXRNYXNrIAkJIAoKKTsKCmV4 dGVybiB2b2lkIFh0TWFpbkxvb3AoICAKCiAgICB2b2lkCgopOwoKZXh0ZXJuIHZvaWQgWHRBcHBN YWluTG9vcCgKCiAgICBYdEFwcENvbnRleHQgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRBZGRFeHBv c3VyZVRvUmVnaW9uKAoKICAgIFhFdmVudCoJCSAsCiAgICBSZWdpb24gCQkgCgopOwoKZXh0ZXJu IHZvaWQgWHRTZXRLZXlib2FyZEZvY3VzKAoKICAgIFdpZGdldAkJICwKICAgIFdpZGdldCAJCSAK Cik7CgpleHRlcm4gV2lkZ2V0IFh0R2V0S2V5Ym9hcmRGb2N1c1dpZGdldCgKCiAgICBXaWRnZXQJ CSAKCik7CgpleHRlcm4gWEV2ZW50KiBYdExhc3RFdmVudFByb2Nlc3NlZCgKCiAgICBEaXNwbGF5 KgkJIAoKKTsKCmV4dGVybiBUaW1lIFh0TGFzdFRpbWVzdGFtcFByb2Nlc3NlZCgKCiAgICBEaXNw bGF5KgkJIAoKKTsKCiAKCgoKCgpleHRlcm4gWHRJbnRlcnZhbElkIFh0QWRkVGltZU91dCggIAoK ICAgIHVuc2lnbmVkIGxvbmcgCSAsCiAgICBYdFRpbWVyQ2FsbGJhY2tQcm9jICAsCiAgICBYdFBv aW50ZXIgCQkgCgopOwoKZXh0ZXJuIFh0SW50ZXJ2YWxJZCBYdEFwcEFkZFRpbWVPdXQoCgogICAg WHRBcHBDb250ZXh0IAkgLAogICAgdW5zaWduZWQgbG9uZyAJICwKICAgIFh0VGltZXJDYWxsYmFj a1Byb2MgICwKICAgIFh0UG9pbnRlciAJCSAKCik7CgpleHRlcm4gdm9pZCBYdFJlbW92ZVRpbWVP dXQoCgogICAgWHRJbnRlcnZhbElkIAkgCgopOwoKZXh0ZXJuIFh0SW5wdXRJZCBYdEFkZElucHV0 KCAgCgogICAgaW50IAkJICwKICAgIFh0UG9pbnRlciAJCSAsCiAgICBYdElucHV0Q2FsbGJhY2tQ cm9jICAsCiAgICBYdFBvaW50ZXIgCQkgCgopOwoKZXh0ZXJuIFh0SW5wdXRJZCBYdEFwcEFkZElu cHV0KAoKICAgIFh0QXBwQ29udGV4dCAgICAgICAJICwKICAgIGludCAJCSAsCiAgICBYdFBvaW50 ZXIgCQkgLAogICAgWHRJbnB1dENhbGxiYWNrUHJvYyAgLAogICAgWHRQb2ludGVyIAkJIAoKKTsK CmV4dGVybiB2b2lkIFh0UmVtb3ZlSW5wdXQoCgogICAgWHRJbnB1dElkIAkJIAoKKTsKCmV4dGVy biBYdFNpZ25hbElkIFh0QXBwQWRkU2lnbmFsKAoKICAgIFh0QXBwQ29udGV4dCAgICAgICAJICwK ICAgIFh0U2lnbmFsQ2FsbGJhY2tQcm9jICAsCiAgICBYdFBvaW50ZXIgCQkgCgopOwoKZXh0ZXJu IHZvaWQgWHRSZW1vdmVTaWduYWwoCgogICAgWHRTaWduYWxJZCAJCSAKCik7CgpleHRlcm4gdm9p ZCBYdE5vdGljZVNpZ25hbCgKCiAgICBYdFNpZ25hbElkCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRO ZXh0RXZlbnQoICAKCiAgICBYRXZlbnQqIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0QXBwTmV4dEV2 ZW50KAoKICAgIFh0QXBwQ29udGV4dCAJICwKICAgIFhFdmVudCoJCSAKCik7CgoKCgoKCgpleHRl cm4gWHRJbnB1dE1hc2sgWHRQZW5kaW5nKCAgCgogICAgdm9pZAoKKTsKCmV4dGVybiBYdElucHV0 TWFzayBYdEFwcFBlbmRpbmcoCgogICAgWHRBcHBDb250ZXh0IAkgCgopOwoKZXh0ZXJuIFh0Qmxv Y2tIb29rSWQgWHRBcHBBZGRCbG9ja0hvb2soCgogICAgWHRBcHBDb250ZXh0IAkgLAogICAgWHRC bG9ja0hvb2tQcm9jIAkgLAogICAgWHRQb2ludGVyIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0UmVt b3ZlQmxvY2tIb29rKAoKICAgIFh0QmxvY2tIb29rSWQgCSAKCik7CgogCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgpleHRlcm4gdm9pZCBYdFJlYWxpemVXaWRnZXQoCgogICAgV2lkZ2V0IAkJ IAoKKTsKCnZvaWQgWHRVbnJlYWxpemVXaWRnZXQoCgogICAgV2lkZ2V0IAkJIAoKKTsKCmV4dGVy biB2b2lkIFh0RGVzdHJveVdpZGdldCgKCiAgICBXaWRnZXQgCQkgCgopOwoKZXh0ZXJuIHZvaWQg WHRTZXRTZW5zaXRpdmUoCgogICAgV2lkZ2V0IAkJICwKICAgIGludCAgCQkgCgopOwoKZXh0ZXJu IHZvaWQgWHRTZXRNYXBwZWRXaGVuTWFuYWdlZCgKCiAgICBXaWRnZXQgCQkgLAogICAgaW50ICAJ CSAKCik7CgpleHRlcm4gV2lkZ2V0IFh0TmFtZVRvV2lkZ2V0KAoKICAgIFdpZGdldCAJCSAsCiAg ICBjb25zdCAgY2hhciogCSAKCik7CgpleHRlcm4gV2lkZ2V0IFh0V2luZG93VG9XaWRnZXQoCgog ICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cgCQkgCgopOwoKZXh0ZXJuIFh0UG9pbnRlciBYdEdl dENsYXNzRXh0ZW5zaW9uKAoKICAgIFdpZGdldENsYXNzCQkgLAogICAgQ2FyZGluYWwJCSAsCiAg ICBYcm1RdWFyawkJICwKICAgIGxvbmcJCSAsCiAgICBDYXJkaW5hbAkJIAoKKTsKCiAKCgoKCgoK CgoKZXh0ZXJuIEFyZ0xpc3QgWHRNZXJnZUFyZ0xpc3RzKAoKICAgIEFyZ0xpc3QgCQkgLAogICAg Q2FyZGluYWwgCQkgLAogICAgQXJnTGlzdCAJCSAsCiAgICBDYXJkaW5hbCAJCSAKCik7CgogCgoK CgoKCgoKZXh0ZXJuIFh0VmFyQXJnc0xpc3QgWHRWYUNyZWF0ZUFyZ3NMaXN0KAoKICAgIFh0UG9p bnRlcgkJICwgLi4uCgopOwoKIAoKCgoKCgoKIAoKZXh0ZXJuIERpc3BsYXkgKlh0RGlzcGxheSgK CiAgICBXaWRnZXQgCQkgCgopOwoKZXh0ZXJuIERpc3BsYXkgKlh0RGlzcGxheU9mT2JqZWN0KAoK ICAgIFdpZGdldCAJCSAKCik7CgpleHRlcm4gU2NyZWVuICpYdFNjcmVlbigKCiAgICBXaWRnZXQg CQkgCgopOwoKZXh0ZXJuIFNjcmVlbiAqWHRTY3JlZW5PZk9iamVjdCgKCiAgICBXaWRnZXQgCQkg CgopOwoKZXh0ZXJuIFdpbmRvdyBYdFdpbmRvdygKCiAgICBXaWRnZXQgCQkgCgopOwoKZXh0ZXJu IFdpbmRvdyBYdFdpbmRvd09mT2JqZWN0KAoKICAgIFdpZGdldCAJCSAKCik7CgpleHRlcm4gU3Ry aW5nIFh0TmFtZSgKCiAgICBXaWRnZXQgCQkgCgopOwoKZXh0ZXJuIFdpZGdldENsYXNzIFh0U3Vw ZXJjbGFzcygKCiAgICBXaWRnZXQgCQkgCgopOwoKZXh0ZXJuIFdpZGdldENsYXNzIFh0Q2xhc3Mo CgogICAgV2lkZ2V0IAkJIAoKKTsKCmV4dGVybiBXaWRnZXQgWHRQYXJlbnQoCgogICAgV2lkZ2V0 IAkJIAoKKTsKCgoKCgoKCmV4dGVybiB2b2lkIFh0QWRkQ2FsbGJhY2soCgogICAgV2lkZ2V0IAkJ ICwKICAgIGNvbnN0ICBjaGFyKiAgCSAsCiAgICBYdENhbGxiYWNrUHJvYyAJICwKICAgIFh0UG9p bnRlciAJCSAKCik7CgpleHRlcm4gdm9pZCBYdFJlbW92ZUNhbGxiYWNrKAoKICAgIFdpZGdldCAJ CSAsCiAgICBjb25zdCAgY2hhciogIAkgLAogICAgWHRDYWxsYmFja1Byb2MgCSAsCiAgICBYdFBv aW50ZXIgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRBZGRDYWxsYmFja3MoCgogICAgV2lkZ2V0IAkJ ICwKICAgIGNvbnN0ICBjaGFyKiAJICwKICAgIFh0Q2FsbGJhY2tMaXN0IAkgCgopOwoKZXh0ZXJu IHZvaWQgWHRSZW1vdmVDYWxsYmFja3MoCgogICAgV2lkZ2V0IAkJICwKICAgIGNvbnN0ICBjaGFy KiAgCSAsCiAgICBYdENhbGxiYWNrTGlzdCAJIAoKKTsKCmV4dGVybiB2b2lkIFh0UmVtb3ZlQWxs Q2FsbGJhY2tzKAoKICAgIFdpZGdldCAJCSAsCiAgICBjb25zdCAgY2hhciogIAkgCgopOwoKCmV4 dGVybiB2b2lkIFh0Q2FsbENhbGxiYWNrcygKCiAgICBXaWRnZXQgCQkgLAogICAgY29uc3QgIGNo YXIqICAJICwKICAgIFh0UG9pbnRlciAJCSAKCik7CgpleHRlcm4gdm9pZCBYdENhbGxDYWxsYmFj a0xpc3QoCgogICAgV2lkZ2V0CQkgLAogICAgWHRDYWxsYmFja0xpc3QgCSAsCiAgICBYdFBvaW50 ZXIgCQkgCgopOwoKZXh0ZXJuIFh0Q2FsbGJhY2tTdGF0dXMgWHRIYXNDYWxsYmFja3MoCgogICAg V2lkZ2V0IAkJICwKICAgIGNvbnN0ICBjaGFyKiAgCSAKCik7CgogCgoKCgoKCmV4dGVybiBYdEdl b21ldHJ5UmVzdWx0IFh0TWFrZUdlb21ldHJ5UmVxdWVzdCgKCiAgICBXaWRnZXQgCQkgLAogICAg WHRXaWRnZXRHZW9tZXRyeSoJICwKICAgIFh0V2lkZ2V0R2VvbWV0cnkqCSAKCik7CgpleHRlcm4g WHRHZW9tZXRyeVJlc3VsdCBYdFF1ZXJ5R2VvbWV0cnkoCgogICAgV2lkZ2V0IAkJICwKICAgIFh0 V2lkZ2V0R2VvbWV0cnkqCSAsCiAgICBYdFdpZGdldEdlb21ldHJ5KgkgCgopOwoKZXh0ZXJuIFdp ZGdldCBYdENyZWF0ZVBvcHVwU2hlbGwoCgogICAgY29uc3QgIGNoYXIqIAkgLAogICAgV2lkZ2V0 Q2xhc3MgCSAsCiAgICBXaWRnZXQgCQkgLAogICAgQXJnTGlzdCAJCSAsCiAgICBDYXJkaW5hbCAJ CSAKCik7CgpleHRlcm4gV2lkZ2V0IFh0VmFDcmVhdGVQb3B1cFNoZWxsKAoKICAgIGNvbnN0ICBj aGFyKiAJICwKICAgIFdpZGdldENsYXNzCQkgLAogICAgV2lkZ2V0CQkgLAogICAgLi4uCgopOwoK ZXh0ZXJuIHZvaWQgWHRQb3B1cCgKCiAgICBXaWRnZXQgCQkgLAogICAgWHRHcmFiS2luZCAJCSAK Cik7CgpleHRlcm4gdm9pZCBYdFBvcHVwU3ByaW5nTG9hZGVkKAoKICAgIFdpZGdldCAJCSAKCik7 CgpleHRlcm4gdm9pZCBYdENhbGxiYWNrTm9uZSgKCiAgICBXaWRnZXQgCQkgLAogICAgWHRQb2lu dGVyIAkJICwKICAgIFh0UG9pbnRlciAJCSAKCik7CgpleHRlcm4gdm9pZCBYdENhbGxiYWNrTm9u ZXhjbHVzaXZlKAoKICAgIFdpZGdldCAJCSAsCiAgICBYdFBvaW50ZXIgCQkgLAogICAgWHRQb2lu dGVyIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0Q2FsbGJhY2tFeGNsdXNpdmUoCgogICAgV2lkZ2V0 IAkJICwKICAgIFh0UG9pbnRlciAJCSAsCiAgICBYdFBvaW50ZXIgCQkgCgopOwoKZXh0ZXJuIHZv aWQgWHRQb3Bkb3duKAoKICAgIFdpZGdldCAJCSAKCik7CgpleHRlcm4gdm9pZCBYdENhbGxiYWNr UG9wZG93bigKCiAgICBXaWRnZXQgCQkgLAogICAgWHRQb2ludGVyIAkJICwKICAgIFh0UG9pbnRl ciAJCSAKCik7CgpleHRlcm4gdm9pZCBYdE1lbnVQb3B1cEFjdGlvbigKCiAgICBXaWRnZXQgCQkg LAogICAgWEV2ZW50KgkJICwKICAgIFN0cmluZyoJCSAsCiAgICBDYXJkaW5hbCoJCSAKCik7Cgpl eHRlcm4gV2lkZ2V0IFh0Q3JlYXRlV2lkZ2V0KAoKICAgIGNvbnN0ICBjaGFyKiAgCSAsCiAgICBX aWRnZXRDbGFzcyAJICwKICAgIFdpZGdldCAJCSAsCiAgICBBcmdMaXN0IAkJICwKICAgIENhcmRp bmFsIAkJIAoKKTsKCmV4dGVybiBXaWRnZXQgWHRDcmVhdGVNYW5hZ2VkV2lkZ2V0KAoKICAgIGNv bnN0ICBjaGFyKiAgCSAsCiAgICBXaWRnZXRDbGFzcyAJICwKICAgIFdpZGdldCAJCSAsCiAgICBB cmdMaXN0IAkJICwKICAgIENhcmRpbmFsIAkJIAoKKTsKCmV4dGVybiBXaWRnZXQgWHRWYUNyZWF0 ZVdpZGdldCgKCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBXaWRnZXRDbGFzcwkJICwKICAgIFdp ZGdldAkJICwKICAgIC4uLgoKKTsKCmV4dGVybiBXaWRnZXQgWHRWYUNyZWF0ZU1hbmFnZWRXaWRn ZXQoCgogICAgY29uc3QgIGNoYXIqIAkgLAogICAgV2lkZ2V0Q2xhc3MJCSAsCiAgICBXaWRnZXQJ CSAsCiAgICAuLi4KCik7CgpleHRlcm4gV2lkZ2V0IFh0Q3JlYXRlQXBwbGljYXRpb25TaGVsbCgg IAoKICAgIGNvbnN0ICBjaGFyKiAgCSAsCiAgICBXaWRnZXRDbGFzcyAJICwKICAgIEFyZ0xpc3Qg CQkgLAogICAgQ2FyZGluYWwgCQkgCgopOwoKZXh0ZXJuIFdpZGdldCBYdEFwcENyZWF0ZVNoZWxs KAoKICAgIGNvbnN0ICBjaGFyKiAJICwKICAgIGNvbnN0ICBjaGFyKiAJICwKICAgIFdpZGdldENs YXNzIAkgLAogICAgRGlzcGxheSoJCSAsCiAgICBBcmdMaXN0IAkJICwKICAgIENhcmRpbmFsIAkJ IAoKKTsKCmV4dGVybiBXaWRnZXQgWHRWYUFwcENyZWF0ZVNoZWxsKAoKICAgIGNvbnN0ICBjaGFy KiAJICwKICAgIGNvbnN0ICBjaGFyKiAJICwKICAgIFdpZGdldENsYXNzCQkgLAogICAgRGlzcGxh eSoJCSAsCiAgICAuLi4KCik7CgogCgoKCgoKZXh0ZXJuIHZvaWQgWHRUb29sa2l0SW5pdGlhbGl6 ZSgKCiAgICB2b2lkCgopOwoKZXh0ZXJuIFh0TGFuZ3VhZ2VQcm9jIFh0U2V0TGFuZ3VhZ2VQcm9j KAoKICAgIFh0QXBwQ29udGV4dAkgLAogICAgWHRMYW5ndWFnZVByb2MJICwKICAgIFh0UG9pbnRl cgkJIAoKKTsKCmV4dGVybiB2b2lkIFh0RGlzcGxheUluaXRpYWxpemUoCgogICAgWHRBcHBDb250 ZXh0IAkgLAogICAgRGlzcGxheSoJCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBjb25zdCAg Y2hhciogCSAsCiAgICBYcm1PcHRpb25EZXNjUmVjKiAJICwKICAgIENhcmRpbmFsIAkJICwKICAg IGludCoJCSAsCiAgICBjaGFyKioJCSAKCik7CgpleHRlcm4gV2lkZ2V0IFh0T3BlbkFwcGxpY2F0 aW9uKAoKICAgIFh0QXBwQ29udGV4dCoJICwKICAgIGNvbnN0ICBjaGFyKiAJICwKICAgIFhybU9w dGlvbkRlc2NMaXN0IAkgLAogICAgQ2FyZGluYWwgCQkgLAogICAgaW50KgkJICwKICAgIFN0cmlu ZyoJCSAsCiAgICBTdHJpbmcqCQkgLAogICAgV2lkZ2V0Q2xhc3MJCSAsCiAgICBBcmdMaXN0IAkJ ICwKICAgIENhcmRpbmFsIAkJIAoKKTsKCmV4dGVybiBXaWRnZXQgWHRWYU9wZW5BcHBsaWNhdGlv bigKCiAgICBYdEFwcENvbnRleHQqCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBYcm1PcHRp b25EZXNjTGlzdAkgLAogICAgQ2FyZGluYWwJCSAsCiAgICBpbnQqCQkgLAogICAgU3RyaW5nKgkJ ICwKICAgIFN0cmluZyoJCSAsCiAgICBXaWRnZXRDbGFzcwkJICwKICAgIC4uLgoKKTsKCmV4dGVy biBXaWRnZXQgWHRBcHBJbml0aWFsaXplKCAgCgogICAgWHRBcHBDb250ZXh0KgkgLAogICAgY29u c3QgIGNoYXIqIAkgLAogICAgWHJtT3B0aW9uRGVzY0xpc3QgCSAsCiAgICBDYXJkaW5hbCAJCSAs CiAgICBpbnQqCQkgLAogICAgU3RyaW5nKgkJICwKICAgIFN0cmluZyoJCSAsCiAgICBBcmdMaXN0 IAkJICwKICAgIENhcmRpbmFsIAkJIAoKKTsKCmV4dGVybiBXaWRnZXQgWHRWYUFwcEluaXRpYWxp emUoICAKCiAgICBYdEFwcENvbnRleHQqCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBYcm1P cHRpb25EZXNjTGlzdAkgLAogICAgQ2FyZGluYWwJCSAsCiAgICBpbnQqCQkgLAogICAgU3RyaW5n KgkJICwKICAgIFN0cmluZyoJCSAsCiAgICAuLi4KCik7CgpleHRlcm4gV2lkZ2V0IFh0SW5pdGlh bGl6ZSggIAoKICAgIGNvbnN0ICBjaGFyKiAgCSAsCiAgICBjb25zdCAgY2hhciogIAkgLAogICAg WHJtT3B0aW9uRGVzY1JlYyogCSAsCiAgICBDYXJkaW5hbCAJCSAsCiAgICBpbnQqCQkgLAogICAg Y2hhcioqCQkgCgopOwoKZXh0ZXJuIERpc3BsYXkgKlh0T3BlbkRpc3BsYXkoCgogICAgWHRBcHBD b250ZXh0IAkgLAogICAgY29uc3QgIGNoYXIqIAkgLAogICAgY29uc3QgIGNoYXIqIAkgLAogICAg Y29uc3QgIGNoYXIqIAkgLAogICAgWHJtT3B0aW9uRGVzY1JlYyoJICwKICAgIENhcmRpbmFsIAkJ ICwKICAgIGludCoJCSAsCiAgICBjaGFyKioJCSAKCik7CgpleHRlcm4gWHRBcHBDb250ZXh0IFh0 Q3JlYXRlQXBwbGljYXRpb25Db250ZXh0KAoKICAgIHZvaWQKCik7CgpleHRlcm4gdm9pZCBYdEFw cFNldEZhbGxiYWNrUmVzb3VyY2VzKAoKICAgIFh0QXBwQ29udGV4dCAJICwKICAgIFN0cmluZyoJ CSAKCik7CgpleHRlcm4gdm9pZCBYdERlc3Ryb3lBcHBsaWNhdGlvbkNvbnRleHQoCgogICAgWHRB cHBDb250ZXh0IAkgCgopOwoKZXh0ZXJuIHZvaWQgWHRJbml0aWFsaXplV2lkZ2V0Q2xhc3MoCgog ICAgV2lkZ2V0Q2xhc3MgCSAKCik7CgpleHRlcm4gWHRBcHBDb250ZXh0IFh0V2lkZ2V0VG9BcHBs aWNhdGlvbkNvbnRleHQoCgogICAgV2lkZ2V0IAkJIAoKKTsKCmV4dGVybiBYdEFwcENvbnRleHQg WHREaXNwbGF5VG9BcHBsaWNhdGlvbkNvbnRleHQoCgogICAgRGlzcGxheSoJCSAKCik7CgpleHRl cm4gWHJtRGF0YWJhc2UgWHREYXRhYmFzZSgKCiAgICBEaXNwbGF5KgkJIAoKKTsKCmV4dGVybiBY cm1EYXRhYmFzZSBYdFNjcmVlbkRhdGFiYXNlKAoKICAgIFNjcmVlbioJCSAKCik7CgpleHRlcm4g dm9pZCBYdENsb3NlRGlzcGxheSgKCiAgICBEaXNwbGF5KgkJIAoKKTsKCmV4dGVybiB2b2lkIFh0 R2V0QXBwbGljYXRpb25SZXNvdXJjZXMoCgogICAgV2lkZ2V0IAkJICwKICAgIFh0UG9pbnRlciAJ CSAsCiAgICBYdFJlc291cmNlTGlzdCAJICwKICAgIENhcmRpbmFsIAkJICwKICAgIEFyZ0xpc3Qg CQkgLAogICAgQ2FyZGluYWwgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRWYUdldEFwcGxpY2F0aW9u UmVzb3VyY2VzKAoKICAgIFdpZGdldAkJICwKICAgIFh0UG9pbnRlcgkJICwKICAgIFh0UmVzb3Vy Y2VMaXN0CSAsCiAgICBDYXJkaW5hbAkJICwKICAgIC4uLgoKKTsKCmV4dGVybiB2b2lkIFh0R2V0 U3VicmVzb3VyY2VzKAoKICAgIFdpZGdldCAJCSAsCiAgICBYdFBvaW50ZXIgCQkgLAogICAgY29u c3QgIGNoYXIqICAJICwKICAgIGNvbnN0ICBjaGFyKiAgCSAsCiAgICBYdFJlc291cmNlTGlzdCAJ ICwKICAgIENhcmRpbmFsIAkJICwKICAgIEFyZ0xpc3QgCQkgLAogICAgQ2FyZGluYWwgCQkgCgop OwoKZXh0ZXJuIHZvaWQgWHRWYUdldFN1YnJlc291cmNlcygKCiAgICBXaWRnZXQJCSAsCiAgICBY dFBvaW50ZXIJCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAg ICBYdFJlc291cmNlTGlzdAkgLAogICAgQ2FyZGluYWwJCSAsCiAgICAuLi4KCik7CgpleHRlcm4g dm9pZCBYdFNldFZhbHVlcygKCiAgICBXaWRnZXQgCQkgLAogICAgQXJnTGlzdCAJCSAsCiAgICBD YXJkaW5hbCAJCSAKCik7CgpleHRlcm4gdm9pZCBYdFZhU2V0VmFsdWVzKAoKICAgIFdpZGdldAkJ ICwKICAgIC4uLgoKKTsKCmV4dGVybiB2b2lkIFh0R2V0VmFsdWVzKAoKICAgIFdpZGdldCAJCSAs CiAgICBBcmdMaXN0IAkJICwKICAgIENhcmRpbmFsIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0VmFH ZXRWYWx1ZXMoCgogICAgV2lkZ2V0CQkgLAogICAgLi4uCgopOwoKZXh0ZXJuIHZvaWQgWHRTZXRT dWJ2YWx1ZXMoCgogICAgWHRQb2ludGVyIAkJICwKICAgIFh0UmVzb3VyY2VMaXN0IAkgLAogICAg Q2FyZGluYWwgCQkgLAogICAgQXJnTGlzdCAJCSAsCiAgICBDYXJkaW5hbCAJCSAKCik7CgpleHRl cm4gdm9pZCBYdFZhU2V0U3VidmFsdWVzKAoKICAgIFh0UG9pbnRlcgkJICwKICAgIFh0UmVzb3Vy Y2VMaXN0CSAsCiAgICBDYXJkaW5hbAkJICwKICAgIC4uLgoKKTsKCmV4dGVybiB2b2lkIFh0R2V0 U3VidmFsdWVzKAoKICAgIFh0UG9pbnRlciAJCSAsCiAgICBYdFJlc291cmNlTGlzdCAJICwKICAg IENhcmRpbmFsIAkJICwKICAgIEFyZ0xpc3QgCQkgLAogICAgQ2FyZGluYWwgCQkgCgopOwoKZXh0 ZXJuIHZvaWQgWHRWYUdldFN1YnZhbHVlcygKCiAgICBYdFBvaW50ZXIJCSAsCiAgICBYdFJlc291 cmNlTGlzdAkgLAogICAgQ2FyZGluYWwJCSAsCiAgICAuLi4KCik7CgpleHRlcm4gdm9pZCBYdEdl dFJlc291cmNlTGlzdCgKCiAgICBXaWRnZXRDbGFzcyAJICwKICAgIFh0UmVzb3VyY2VMaXN0Kgkg LAogICAgQ2FyZGluYWwqCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRHZXRDb25zdHJhaW50UmVzb3Vy Y2VMaXN0KAoKICAgIFdpZGdldENsYXNzIAkgLAogICAgWHRSZXNvdXJjZUxpc3QqCSAsCiAgICBD YXJkaW5hbCoJCSAKCik7CgoKCgoKCgoKCgoKIyAyMDc2ICIvdXNyL2luY2x1ZGUvWDExL0ludHJp bnNpYy5oIiAzCgoKCgoKCgoKCgoKCgogCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX1h0Q2hlY2twb2lu dFRva2VuUmVjIHsKICAgIGludAkJc2F2ZV90eXBlOwogICAgaW50CQlpbnRlcmFjdF9zdHlsZTsK ICAgIEJvb2xlYW4Jc2h1dGRvd247CiAgICBCb29sZWFuCWZhc3Q7CiAgICBCb29sZWFuCWNhbmNl bF9zaHV0ZG93bjsKICAgIGludAkJcGhhc2U7CiAgICBpbnQJCWludGVyYWN0X2RpYWxvZ190eXBl OwkgCiAgICBCb29sZWFuCXJlcXVlc3RfY2FuY2VsOwkJIAogICAgQm9vbGVhbglyZXF1ZXN0X25l eHRfcGhhc2U7CSAKICAgIEJvb2xlYW4Jc2F2ZV9zdWNjZXNzOwkJIAogICAgaW50CQl0eXBlOwkJ IAogICAgV2lkZ2V0CXdpZGdldDsJCSAKfSBYdENoZWNrcG9pbnRUb2tlblJlYywgKlh0Q2hlY2tw b2ludFRva2VuOwoKWHRDaGVja3BvaW50VG9rZW4gWHRTZXNzaW9uR2V0VG9rZW4oCgogICAgV2lk Z2V0CQkgCgopOwoKdm9pZCBYdFNlc3Npb25SZXR1cm5Ub2tlbigKCiAgICBYdENoZWNrcG9pbnRU b2tlbgkgCgopOwoKIAoKCgoKCmV4dGVybiBYdEVycm9yTXNnSGFuZGxlciBYdEFwcFNldEVycm9y TXNnSGFuZGxlcigKCiAgICBYdEFwcENvbnRleHQgCSAsCiAgICBYdEVycm9yTXNnSGFuZGxlciAJ IAoKKTsKCmV4dGVybiB2b2lkIFh0U2V0RXJyb3JNc2dIYW5kbGVyKCAgCgogICAgWHRFcnJvck1z Z0hhbmRsZXIgCSAKCik7CgpleHRlcm4gWHRFcnJvck1zZ0hhbmRsZXIgWHRBcHBTZXRXYXJuaW5n TXNnSGFuZGxlcigKCiAgICBYdEFwcENvbnRleHQgCSAsCiAgICBYdEVycm9yTXNnSGFuZGxlciAJ IAoKKTsKCmV4dGVybiB2b2lkIFh0U2V0V2FybmluZ01zZ0hhbmRsZXIoICAKCiAgICBYdEVycm9y TXNnSGFuZGxlciAJIAoKKTsKCmV4dGVybiB2b2lkIFh0QXBwRXJyb3JNc2coCgogICAgWHRBcHBD b250ZXh0IAkgLAogICAgY29uc3QgIGNoYXIqICAJICwKICAgIGNvbnN0ICBjaGFyKiAJICwKICAg IGNvbnN0ICBjaGFyKiAJICwKICAgIGNvbnN0ICBjaGFyKiAJICwKICAgIFN0cmluZyoJCSAsCiAg ICBDYXJkaW5hbCoJCSAKCik7CgpleHRlcm4gdm9pZCBYdEVycm9yTXNnKCAgCgogICAgY29uc3Qg IGNoYXIqICAJICwKICAgIGNvbnN0ICBjaGFyKiAJICwKICAgIGNvbnN0ICBjaGFyKiAJICwKICAg IGNvbnN0ICBjaGFyKiAJICwKICAgIFN0cmluZyoJCSAsCiAgICBDYXJkaW5hbCoJCSAKCik7Cgpl eHRlcm4gdm9pZCBYdEFwcFdhcm5pbmdNc2coCgogICAgWHRBcHBDb250ZXh0IAkgLAogICAgY29u c3QgIGNoYXIqICAJICwKICAgIGNvbnN0ICBjaGFyKiAgCSAsCiAgICBjb25zdCAgY2hhciogIAkg LAogICAgY29uc3QgIGNoYXIqICAJICwKICAgIFN0cmluZyoJCSAsCiAgICBDYXJkaW5hbCoJCSAK Cik7CgpleHRlcm4gdm9pZCBYdFdhcm5pbmdNc2coICAKCiAgICBjb25zdCAgY2hhciogCSAsCiAg ICBjb25zdCAgY2hhciogCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBjb25zdCAgY2hhciog CSAsCiAgICBTdHJpbmcqCQkgLAogICAgQ2FyZGluYWwqCQkgCgopOwoKZXh0ZXJuIFh0RXJyb3JI YW5kbGVyIFh0QXBwU2V0RXJyb3JIYW5kbGVyKAoKICAgIFh0QXBwQ29udGV4dCAJICwKICAgIFh0 RXJyb3JIYW5kbGVyIAkgCgopOwoKZXh0ZXJuIHZvaWQgWHRTZXRFcnJvckhhbmRsZXIoICAKCiAg ICBYdEVycm9ySGFuZGxlciAJIAoKKTsKCmV4dGVybiBYdEVycm9ySGFuZGxlciBYdEFwcFNldFdh cm5pbmdIYW5kbGVyKAoKICAgIFh0QXBwQ29udGV4dCAJICwKICAgIFh0RXJyb3JIYW5kbGVyIAkg CgopOwoKZXh0ZXJuIHZvaWQgWHRTZXRXYXJuaW5nSGFuZGxlciggIAoKICAgIFh0RXJyb3JIYW5k bGVyIAkgCgopOwoKZXh0ZXJuIHZvaWQgWHRBcHBFcnJvcigKCiAgICBYdEFwcENvbnRleHQgCSAs CiAgICBjb25zdCAgY2hhciogCSAKCik7CgpleHRlcm4gdm9pZCBYdEVycm9yKCAgCgogICAgY29u c3QgIGNoYXIqIAkgCgopOwoKZXh0ZXJuIHZvaWQgWHRBcHBXYXJuaW5nKAoKICAgIFh0QXBwQ29u dGV4dCAJICwKICAgIGNvbnN0ICBjaGFyKiAJIAoKKTsKCmV4dGVybiB2b2lkIFh0V2FybmluZygg IAoKICAgIGNvbnN0ICBjaGFyKiAJIAoKKTsKCmV4dGVybiBYcm1EYXRhYmFzZSAqWHRBcHBHZXRF cnJvckRhdGFiYXNlKAoKICAgIFh0QXBwQ29udGV4dCAJIAoKKTsKCmV4dGVybiBYcm1EYXRhYmFz ZSAqWHRHZXRFcnJvckRhdGFiYXNlKCAgCgogICAgdm9pZAoKKTsKCmV4dGVybiB2b2lkIFh0QXBw R2V0RXJyb3JEYXRhYmFzZVRleHQoCgogICAgWHRBcHBDb250ZXh0IAkgLAogICAgY29uc3QgIGNo YXIqIAkgLAogICAgY29uc3QgIGNoYXIqIAkgLAogICAgY29uc3QgIGNoYXIqIAkgLAogICAgY29u c3QgIGNoYXIqICAJICwKICAgIFN0cmluZyAJCSAsCiAgICBpbnQgCQkgLAogICAgWHJtRGF0YWJh c2UgCSAKCik7CgpleHRlcm4gdm9pZCBYdEdldEVycm9yRGF0YWJhc2VUZXh0KCAgCgogICAgY29u c3QgIGNoYXIqIAkgLAogICAgY29uc3QgIGNoYXIqIAkgLAogICAgY29uc3QgIGNoYXIqIAkgLAog ICAgY29uc3QgIGNoYXIqICAJICwKICAgIFN0cmluZyAJCSAsCiAgICBpbnQgCQkgCgopOwoKIAoK CgoKCmV4dGVybiBjaGFyICpYdE1hbGxvYygKCiAgICBDYXJkaW5hbCAJCSAKCik7CgpleHRlcm4g Y2hhciAqWHRDYWxsb2MoCgogICAgQ2FyZGluYWwJCSAsCiAgICBDYXJkaW5hbCAJCSAKCik7Cgpl eHRlcm4gY2hhciAqWHRSZWFsbG9jKAoKICAgIGNoYXIqIAkJICwKICAgIENhcmRpbmFsIAkJIAoK KTsKCmV4dGVybiB2b2lkIFh0RnJlZSgKCiAgICBjaGFyKgkJIAoKKTsKCiMgMjM1OSAiL3Vzci9p bmNsdWRlL1gxMS9JbnRyaW5zaWMuaCIgMwoKCgoKCgogCgoKCgoKZXh0ZXJuIFh0V29ya1Byb2NJ ZCBYdEFkZFdvcmtQcm9jKCAgCgogICAgWHRXb3JrUHJvYyAJCSAsCiAgICBYdFBvaW50ZXIgCQkg CgopOwoKZXh0ZXJuIFh0V29ya1Byb2NJZCBYdEFwcEFkZFdvcmtQcm9jKAoKICAgIFh0QXBwQ29u dGV4dCAJICwKICAgIFh0V29ya1Byb2MgCQkgLAogICAgWHRQb2ludGVyIAkJIAoKKTsKCmV4dGVy biB2b2lkICBYdFJlbW92ZVdvcmtQcm9jKAoKICAgIFh0V29ya1Byb2NJZCAJIAoKKTsKCgogCgoK CgpleHRlcm4gR0MgWHRHZXRHQygKCiAgICBXaWRnZXQgCQkgLAogICAgWHRHQ01hc2sgCQkgLAog ICAgWEdDVmFsdWVzKiAJCSAKCik7CgpleHRlcm4gR0MgWHRBbGxvY2F0ZUdDKAoKICAgIFdpZGdl dCAJCSAsCiAgICBDYXJkaW5hbAkJICwKICAgIFh0R0NNYXNrIAkJICwKICAgIFhHQ1ZhbHVlcyog CQkgLAogICAgWHRHQ01hc2sJCSAsCiAgICBYdEdDTWFzawkJIAoKKTsKCiAKCgoKZXh0ZXJuIHZv aWQgWHREZXN0cm95R0MoICAKCiAgICBHQyAJCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRSZWxlYXNl R0MoCgogICAgV2lkZ2V0IAkJICwKICAgIEdDIAkJCSAKCik7CgoKCmV4dGVybiB2b2lkIFh0QXBw UmVsZWFzZUNhY2hlUmVmcygKCiAgICBYdEFwcENvbnRleHQJICwKICAgIFh0Q2FjaGVSZWYqCQkg CgopOwoKZXh0ZXJuIHZvaWQgWHRDYWxsYmFja1JlbGVhc2VDYWNoZVJlZigKCiAgICBXaWRnZXQg CQkgLAogICAgWHRQb2ludGVyIAkJICwJIAogICAgWHRQb2ludGVyIAkJIAoKKTsKCmV4dGVybiB2 b2lkIFh0Q2FsbGJhY2tSZWxlYXNlQ2FjaGVSZWZMaXN0KAoKICAgIFdpZGdldCAJCSAsCiAgICBY dFBvaW50ZXIgCQkgLAkgCiAgICBYdFBvaW50ZXIgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRTZXRX TUNvbG9ybWFwV2luZG93cygKCiAgICBXaWRnZXQgCQkgLAogICAgV2lkZ2V0KgkJICwKICAgIENh cmRpbmFsCQkgCgopOwoKZXh0ZXJuIFN0cmluZyBYdEZpbmRGaWxlKAoKICAgIGNvbnN0ICBjaGFy KiAJICwKICAgIFN1YnN0aXR1dGlvbgkgLAogICAgQ2FyZGluYWwgCQkgLAogICAgWHRGaWxlUHJl ZGljYXRlCSAKCik7CgpleHRlcm4gU3RyaW5nIFh0UmVzb2x2ZVBhdGhuYW1lKAoKICAgIERpc3Bs YXkqCQkgLAogICAgY29uc3QgIGNoYXIqIAkgLAogICAgY29uc3QgIGNoYXIqIAkgLAogICAgY29u c3QgIGNoYXIqIAkgLAogICAgY29uc3QgIGNoYXIqIAkgLAogICAgU3Vic3RpdHV0aW9uCSAsCiAg ICBDYXJkaW5hbAkJICwKICAgIFh0RmlsZVByZWRpY2F0ZSAJIAoKKTsKCiAKCgoKCgoKICAgIApl eHRlcm4gdm9pZCBYdERpc293blNlbGVjdGlvbigKCiAgICBXaWRnZXQgCQkgLAogICAgQXRvbSAJ CSAsCiAgICBUaW1lIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0R2V0U2VsZWN0aW9uVmFsdWUoCgog ICAgV2lkZ2V0IAkJICwKICAgIEF0b20gCQkgLAogICAgQXRvbSAJCSAsCiAgICBYdFNlbGVjdGlv bkNhbGxiYWNrUHJvYyAgLAogICAgWHRQb2ludGVyIAkJICwKICAgIFRpbWUgCQkgCgopOwoKZXh0 ZXJuIHZvaWQgWHRHZXRTZWxlY3Rpb25WYWx1ZXMoCgogICAgV2lkZ2V0IAkJICwKICAgIEF0b20g CQkgLAogICAgQXRvbSoJCSAsCiAgICBpbnQgCQkgLAogICAgWHRTZWxlY3Rpb25DYWxsYmFja1By b2MgICwKICAgIFh0UG9pbnRlcioJCSAsCiAgICBUaW1lIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0 QXBwU2V0U2VsZWN0aW9uVGltZW91dCgKCiAgICBYdEFwcENvbnRleHQgCSAsCiAgICB1bnNpZ25l ZCBsb25nIAkgCgopOwoKZXh0ZXJuIHZvaWQgWHRTZXRTZWxlY3Rpb25UaW1lb3V0KCAgCgogICAg dW5zaWduZWQgbG9uZyAJIAoKKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIFh0QXBwR2V0U2VsZWN0 aW9uVGltZW91dCgKCiAgICBYdEFwcENvbnRleHQgCSAKCik7CgpleHRlcm4gdW5zaWduZWQgbG9u ZyBYdEdldFNlbGVjdGlvblRpbWVvdXQoICAKCiAgICB2b2lkCgopOwoKZXh0ZXJuIFhTZWxlY3Rp b25SZXF1ZXN0RXZlbnQgKlh0R2V0U2VsZWN0aW9uUmVxdWVzdCgKCiAgICBXaWRnZXQgCQkgLAog ICAgQXRvbSAJCSAsCiAgICBYdFJlcXVlc3RJZCAJIAoKKTsKCmV4dGVybiB2b2lkIFh0R2V0U2Vs ZWN0aW9uVmFsdWVJbmNyZW1lbnRhbCgKCiAgICBXaWRnZXQgCQkgLAogICAgQXRvbSAJCSAsCiAg ICBBdG9tIAkJICwKICAgIFh0U2VsZWN0aW9uQ2FsbGJhY2tQcm9jICAsCiAgICBYdFBvaW50ZXIg CQkgLAogICAgVGltZSAJCSAKCik7CgpleHRlcm4gdm9pZCBYdEdldFNlbGVjdGlvblZhbHVlc0lu Y3JlbWVudGFsKAoKICAgIFdpZGdldCAJCSAsCiAgICBBdG9tIAkJICwKICAgIEF0b20qCQkgLAog ICAgaW50IAkJICwKICAgIFh0U2VsZWN0aW9uQ2FsbGJhY2tQcm9jICAsCiAgICBYdFBvaW50ZXIq CQkgLAogICAgVGltZSAJCSAKCik7CgpleHRlcm4gdm9pZCBYdFNldFNlbGVjdGlvblBhcmFtZXRl cnMoCgogICAgV2lkZ2V0CQkgLAogICAgQXRvbQkJICwKICAgIEF0b20JCSAsCiAgICBYdFBvaW50 ZXIJCSAsCiAgICB1bnNpZ25lZCBsb25nCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIHZvaWQg WHRHZXRTZWxlY3Rpb25QYXJhbWV0ZXJzKAoKICAgIFdpZGdldAkJICwKICAgIEF0b20JCSAsCiAg ICBYdFJlcXVlc3RJZAkJICwKICAgIEF0b20qCQkgLAogICAgWHRQb2ludGVyKgkJICwKICAgIHVu c2lnbmVkIGxvbmcqCSAsCiAgICBpbnQqCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRDcmVhdGVTZWxl Y3Rpb25SZXF1ZXN0KAoKICAgIFdpZGdldAkJICwKICAgIEF0b20JCSAKCik7CgpleHRlcm4gdm9p ZCBYdFNlbmRTZWxlY3Rpb25SZXF1ZXN0KAoKICAgIFdpZGdldAkJICwKICAgIEF0b20JCSAsCiAg ICBUaW1lCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRDYW5jZWxTZWxlY3Rpb25SZXF1ZXN0KAoKICAg IFdpZGdldAkJICwKICAgIEF0b20JCSAKCik7CgpleHRlcm4gQXRvbSBYdFJlc2VydmVQcm9wZXJ0 eUF0b20oCgogICAgV2lkZ2V0CQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRSZWxlYXNlUHJvcGVydHlB dG9tKAoKICAgIFdpZGdldAkJICwKICAgIEF0b20JCSAKCik7CgpleHRlcm4gdm9pZCBYdEdyYWJL ZXkoCgogICAgV2lkZ2V0IAkJICwKICAgIHVuc2lnbmVkIGludCAgCQkgLAogICAgTW9kaWZpZXJz CSAJICwKICAgIGludCAgCQkgLAogICAgaW50IAkJICwKICAgIGludCAJCSAKCik7CgpleHRlcm4g dm9pZCBYdFVuZ3JhYktleSgKCiAgICBXaWRnZXQgCQkgLAogICAgdW5zaWduZWQgaW50ICAJCSAs CiAgICBNb2RpZmllcnMJIAkgCgopOwoKZXh0ZXJuIGludCBYdEdyYWJLZXlib2FyZCgKCiAgICBX aWRnZXQgCQkgLAogICAgaW50ICAJCSAsCiAgICBpbnQgCQkgLAogICAgaW50IAkJICwKICAgIFRp bWUgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRVbmdyYWJLZXlib2FyZCgKCiAgICBXaWRnZXQgCQkg LAogICAgVGltZSAJCSAKCik7CgpleHRlcm4gdm9pZCBYdEdyYWJCdXR0b24oCgogICAgV2lkZ2V0 IAkJICwKICAgIGludCAJCSAsCiAgICBNb2RpZmllcnMJIAkgLAogICAgaW50ICAJCSAsCiAgICB1 bnNpZ25lZCBpbnQJICwKICAgIGludCAJCSAsCiAgICBpbnQgCQkgLAogICAgV2luZG93IAkJICwK ICAgIEN1cnNvciAJCSAKCik7CgpleHRlcm4gdm9pZCBYdFVuZ3JhYkJ1dHRvbigKCiAgICBXaWRn ZXQgCQkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICBNb2RpZmllcnMJIAkgCgopOwoKZXh0ZXJu IGludCBYdEdyYWJQb2ludGVyKAoKICAgIFdpZGdldCAJCSAsCiAgICBpbnQgIAkJICwKICAgIHVu c2lnbmVkIGludAkgLAogICAgaW50IAkJICwKICAgIGludCAJCSAsCiAgICBXaW5kb3cgCQkgLAog ICAgQ3Vyc29yIAkJICwKICAgIFRpbWUgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRVbmdyYWJQb2lu dGVyKAoKICAgIFdpZGdldCAJCSAsCiAgICBUaW1lIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0R2V0 QXBwbGljYXRpb25OYW1lQW5kQ2xhc3MoCgogICAgRGlzcGxheSoJCSAsCiAgICBTdHJpbmcqCQkg LAogICAgU3RyaW5nKgkJIAoKKTsKCmV4dGVybiB2b2lkIFh0UmVnaXN0ZXJEcmF3YWJsZSgKCiAg ICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxlCQkgLAogICAgV2lkZ2V0CQkgCgopOwoKZXh0ZXJu IHZvaWQgWHRVbnJlZ2lzdGVyRHJhd2FibGUoCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJs ZQkJIAoKKTsKCmV4dGVybiBXaWRnZXQgWHRIb29rc09mRGlzcGxheSgKCiAgICBEaXNwbGF5KgkJ IAoKKTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIFN0cmluZyB0eXBlOwogICAgV2lkZ2V0IHdpZGdl dDsKICAgIEFyZ0xpc3QgYXJnczsKICAgIENhcmRpbmFsIG51bV9hcmdzOwp9IFh0Q3JlYXRlSG9v a0RhdGFSZWMsICpYdENyZWF0ZUhvb2tEYXRhOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgU3RyaW5n IHR5cGU7CiAgICBXaWRnZXQgd2lkZ2V0OwogICAgWHRQb2ludGVyIGV2ZW50X2RhdGE7CiAgICBD YXJkaW5hbCBudW1fZXZlbnRfZGF0YTsKfSBYdENoYW5nZUhvb2tEYXRhUmVjLCAqWHRDaGFuZ2VI b29rRGF0YTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIFdpZGdldCBvbGQsIHJlcTsKICAgIEFyZ0xp c3QgYXJnczsKICAgIENhcmRpbmFsIG51bV9hcmdzOwp9IFh0Q2hhbmdlSG9va1NldFZhbHVlc0Rh dGFSZWMsICpYdENoYW5nZUhvb2tTZXRWYWx1ZXNEYXRhOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAg U3RyaW5nIHR5cGU7CiAgICBXaWRnZXQgd2lkZ2V0OwogICAgWHRHZW9tZXRyeU1hc2sgY2hhbmdl TWFzazsKICAgIFhXaW5kb3dDaGFuZ2VzIGNoYW5nZXM7Cn0gWHRDb25maWd1cmVIb29rRGF0YVJl YywgKlh0Q29uZmlndXJlSG9va0RhdGE7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBTdHJpbmcgdHlw ZTsKICAgIFdpZGdldCB3aWRnZXQ7CiAgICBYdFdpZGdldEdlb21ldHJ5KiByZXF1ZXN0OwogICAg WHRXaWRnZXRHZW9tZXRyeSogcmVwbHk7CiAgICBYdEdlb21ldHJ5UmVzdWx0IHJlc3VsdDsKfSBY dEdlb21ldHJ5SG9va0RhdGFSZWMsICpYdEdlb21ldHJ5SG9va0RhdGE7Cgp0eXBlZGVmIHN0cnVj dCB7CiAgICBTdHJpbmcgdHlwZTsKICAgIFdpZGdldCB3aWRnZXQ7Cn0gWHREZXN0cm95SG9va0Rh dGFSZWMsICpYdERlc3Ryb3lIb29rRGF0YTsKCmV4dGVybiB2b2lkIFh0R2V0RGlzcGxheXMoCgog ICAgWHRBcHBDb250ZXh0CSAsCiAgICBEaXNwbGF5KioqCQkgLAogICAgQ2FyZGluYWwqCQkgCgop OwoKZXh0ZXJuIEJvb2xlYW4gWHRUb29sa2l0VGhyZWFkSW5pdGlhbGl6ZSgKCiAgICB2b2lkCgop OwoKZXh0ZXJuIHZvaWQgWHRBcHBTZXRFeGl0RmxhZygKCiAgICBYdEFwcENvbnRleHQJIAoKKTsK CmV4dGVybiBCb29sZWFuIFh0QXBwR2V0RXhpdEZsYWcoCgogICAgWHRBcHBDb250ZXh0CSAKCik7 CgpleHRlcm4gdm9pZCBYdEFwcExvY2soCgogICAgWHRBcHBDb250ZXh0CSAKCik7CgpleHRlcm4g dm9pZCBYdEFwcFVubG9jaygKCiAgICBYdEFwcENvbnRleHQJIAoKKTsKCiAKCgoKCiAKCmV4dGVy biBCb29sZWFuIFh0Q3Z0U3RyaW5nVG9BY2NlbGVyYXRvclRhYmxlKAoKICAgIERpc3BsYXkqCSAs CiAgICBYcm1WYWx1ZVB0ciAgLAkgCiAgICBDYXJkaW5hbCogICAgLAkKICAgIFhybVZhbHVlUHRy CSAsCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHRQb2ludGVyKgkgCgopOwoKZXh0ZXJuIEJvb2xl YW4gWHRDdnRTdHJpbmdUb0F0b20oCgogICAgRGlzcGxheSoJICwKICAgIFhybVZhbHVlUHRyICAs CSAKICAgIENhcmRpbmFsKiAgICAsCQogICAgWHJtVmFsdWVQdHIJICwKICAgIFhybVZhbHVlUHRy CSAsCiAgICBYdFBvaW50ZXIqCSAKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1RvQm9v bCgKCiAgICBEaXNwbGF5KgkgLAogICAgWHJtVmFsdWVQdHIgICwJIAogICAgQ2FyZGluYWwqICAg ICwJCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHJtVmFsdWVQdHIJICwKICAgIFh0UG9pbnRlcioJ IAoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0U3RyaW5nVG9Cb29sZWFuKAoKICAgIERpc3BsYXkq CSAsCiAgICBYcm1WYWx1ZVB0ciAgLAkgCiAgICBDYXJkaW5hbCogICAgLAkKICAgIFhybVZhbHVl UHRyCSAsCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHRQb2ludGVyKgkgCgopOwoKZXh0ZXJuIEJv b2xlYW4gWHRDdnRTdHJpbmdUb0NvbW1hbmRBcmdBcnJheSgKCiAgICBEaXNwbGF5KgkgLAogICAg WHJtVmFsdWVQdHIgICwJIAogICAgQ2FyZGluYWwqICAgICwJCiAgICBYcm1WYWx1ZVB0cgkgLAog ICAgWHJtVmFsdWVQdHIJICwKICAgIFh0UG9pbnRlcioJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0 Q3Z0U3RyaW5nVG9DdXJzb3IoCgogICAgRGlzcGxheSoJICwKICAgIFhybVZhbHVlUHRyICAsCSAK ICAgIENhcmRpbmFsKiAgICAsCQogICAgWHJtVmFsdWVQdHIJICwKICAgIFhybVZhbHVlUHRyCSAs CiAgICBYdFBvaW50ZXIqCSAKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1RvRGltZW5z aW9uKAoKICAgIERpc3BsYXkqCSAsCiAgICBYcm1WYWx1ZVB0ciAgLAkgCiAgICBDYXJkaW5hbCog ICAgLAkKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHRQb2ludGVy KgkgCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRTdHJpbmdUb0RpcmVjdG9yeVN0cmluZygKCiAg ICBEaXNwbGF5KgkgLAogICAgWHJtVmFsdWVQdHIgICwJIAogICAgQ2FyZGluYWwqICAgICwJCiAg ICBYcm1WYWx1ZVB0cgkgLAogICAgWHJtVmFsdWVQdHIJICwKICAgIFh0UG9pbnRlcioJIAoKKTsK CmV4dGVybiBCb29sZWFuIFh0Q3Z0U3RyaW5nVG9EaXNwbGF5KAoKICAgIERpc3BsYXkqCSAsCiAg ICBYcm1WYWx1ZVB0ciAgLAkgCiAgICBDYXJkaW5hbCogICAgLAkKICAgIFhybVZhbHVlUHRyCSAs CiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHRQb2ludGVyKgkgCgopOwoKZXh0ZXJuIEJvb2xlYW4g WHRDdnRTdHJpbmdUb0ZpbGUoCgogICAgRGlzcGxheSoJICwKICAgIFhybVZhbHVlUHRyICAsCSAK ICAgIENhcmRpbmFsKiAgICAsCQogICAgWHJtVmFsdWVQdHIJICwKICAgIFhybVZhbHVlUHRyCSAs CiAgICBYdFBvaW50ZXIqCSAKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1RvRmxvYXQo CgogICAgRGlzcGxheSoJICwKICAgIFhybVZhbHVlUHRyICAsCSAKICAgIENhcmRpbmFsKiAgICAs CQogICAgWHJtVmFsdWVQdHIJICwKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYdFBvaW50ZXIqCSAK Cik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1RvRm9udCgKCiAgICBEaXNwbGF5KgkgLAog ICAgWHJtVmFsdWVQdHIgICwJIAogICAgQ2FyZGluYWwqICAgICwJCiAgICBYcm1WYWx1ZVB0cgkg LAogICAgWHJtVmFsdWVQdHIJICwKICAgIFh0UG9pbnRlcioJIAoKKTsKCmV4dGVybiBCb29sZWFu IFh0Q3Z0U3RyaW5nVG9Gb250U2V0KAoKICAgIERpc3BsYXkqCSAsCiAgICBYcm1WYWx1ZVB0ciAg LAkgCiAgICBDYXJkaW5hbCogICAgLAkKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYcm1WYWx1ZVB0 cgkgLAogICAgWHRQb2ludGVyKgkgCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRTdHJpbmdUb0Zv bnRTdHJ1Y3QoCgogICAgRGlzcGxheSoJICwKICAgIFhybVZhbHVlUHRyICAsCSAKICAgIENhcmRp bmFsKiAgICAsCQogICAgWHJtVmFsdWVQdHIJICwKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYdFBv aW50ZXIqCSAKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1RvR3Jhdml0eSgKCiAgICBE aXNwbGF5KgkgLAogICAgWHJtVmFsdWVQdHIgICwKICAgIENhcmRpbmFsKiAgICAsCQogICAgWHJt VmFsdWVQdHIJICwKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYdFBvaW50ZXIqCSAKCik7CgpleHRl cm4gQm9vbGVhbiBYdEN2dFN0cmluZ1RvSW5pdGlhbFN0YXRlKAoKICAgIERpc3BsYXkqCSAsCiAg ICBYcm1WYWx1ZVB0ciAgLAkgCiAgICBDYXJkaW5hbCogICAgLAkKICAgIFhybVZhbHVlUHRyCSAs CiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHRQb2ludGVyKgkgCgopOwoKZXh0ZXJuIEJvb2xlYW4g WHRDdnRTdHJpbmdUb0ludCgKCiAgICBEaXNwbGF5KgkgLAogICAgWHJtVmFsdWVQdHIgICwJIAog ICAgQ2FyZGluYWwqICAgICwJCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHJtVmFsdWVQdHIJICwK ICAgIFh0UG9pbnRlcioJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0U3RyaW5nVG9QaXhlbCgK CiAgICBEaXNwbGF5KgkgLAogICAgWHJtVmFsdWVQdHIgICwJIAogICAgQ2FyZGluYWwqICAgICwJ CiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHJtVmFsdWVQdHIJICwKICAgIFh0UG9pbnRlcioJIAoK KTsKCgoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRTdHJpbmdUb1Jlc3RhcnRTdHlsZSgKCiAgICBEaXNw bGF5KgkgLAogICAgWHJtVmFsdWVQdHIgICwJIAogICAgQ2FyZGluYWwqICAgICwJCiAgICBYcm1W YWx1ZVB0cgkgLAogICAgWHJtVmFsdWVQdHIJICwKICAgIFh0UG9pbnRlcioJIAoKKTsKCmV4dGVy biBCb29sZWFuIFh0Q3Z0U3RyaW5nVG9TaG9ydCgKCiAgICBEaXNwbGF5KgkgLAogICAgWHJtVmFs dWVQdHIgICwJIAogICAgQ2FyZGluYWwqICAgICwJCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHJt VmFsdWVQdHIJICwKICAgIFh0UG9pbnRlcioJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0U3Ry aW5nVG9UcmFuc2xhdGlvblRhYmxlKAoKICAgIERpc3BsYXkqCSAsCiAgICBYcm1WYWx1ZVB0ciAg LAkgCiAgICBDYXJkaW5hbCogICAgLAkKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYcm1WYWx1ZVB0 cgkgLAogICAgWHRQb2ludGVyKgkgCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRTdHJpbmdUb1Vu c2lnbmVkQ2hhcigKCiAgICBEaXNwbGF5KgkgLAogICAgWHJtVmFsdWVQdHIgICwJIAogICAgQ2Fy ZGluYWwqICAgICwJCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHJtVmFsdWVQdHIJICwKICAgIFh0 UG9pbnRlcioJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0U3RyaW5nVG9WaXN1YWwoCgogICAg RGlzcGxheSoJICwKICAgIFhybVZhbHVlUHRyICAsCSAKICAgIENhcmRpbmFsKiAgICAsCQogICAg WHJtVmFsdWVQdHIJICwKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYdFBvaW50ZXIqCSAKCik7Cgog CgpleHRlcm4gQm9vbGVhbiBYdEN2dEludFRvQm9vbCgKCiAgICBEaXNwbGF5KgkgLAogICAgWHJt VmFsdWVQdHIgICwJIAogICAgQ2FyZGluYWwqICAgICwJCiAgICBYcm1WYWx1ZVB0cgkgLAogICAg WHJtVmFsdWVQdHIJICwKICAgIFh0UG9pbnRlcioJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0 SW50VG9Cb29sZWFuKAoKICAgIERpc3BsYXkqCSAsCiAgICBYcm1WYWx1ZVB0ciAgLAkgCiAgICBD YXJkaW5hbCogICAgLAkKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYcm1WYWx1ZVB0cgkgLAogICAg WHRQb2ludGVyKgkgCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRJbnRUb0NvbG9yKAoKICAgIERp c3BsYXkqCSAsCiAgICBYcm1WYWx1ZVB0ciAgLAkgCiAgICBDYXJkaW5hbCogICAgLAkKICAgIFhy bVZhbHVlUHRyCSAsCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHRQb2ludGVyKgkgCgopOwoKCgpl eHRlcm4gQm9vbGVhbiBYdEN2dEludFRvRmxvYXQoCgogICAgRGlzcGxheSoJICwKICAgIFhybVZh bHVlUHRyICAsCSAKICAgIENhcmRpbmFsKiAgICAsCQogICAgWHJtVmFsdWVQdHIJICwKICAgIFhy bVZhbHVlUHRyCSAsCiAgICBYdFBvaW50ZXIqCSAKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dElu dFRvRm9udCgKCiAgICBEaXNwbGF5KgkgLAogICAgWHJtVmFsdWVQdHIgICwJIAogICAgQ2FyZGlu YWwqICAgICwJCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHJtVmFsdWVQdHIJICwKICAgIFh0UG9p bnRlcioJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0SW50VG9QaXhlbCgKCiAgICBEaXNwbGF5 KgkgLAogICAgWHJtVmFsdWVQdHIgICwJIAogICAgQ2FyZGluYWwqICAgICwJCiAgICBYcm1WYWx1 ZVB0cgkgLAogICAgWHJtVmFsdWVQdHIJICwKICAgIFh0UG9pbnRlcioJIAoKKTsKCmV4dGVybiBC b29sZWFuIFh0Q3Z0SW50VG9QaXhtYXAoCgogICAgRGlzcGxheSoJICwKICAgIFhybVZhbHVlUHRy ICAsCSAKICAgIENhcmRpbmFsKiAgICAsCQogICAgWHJtVmFsdWVQdHIJICwKICAgIFhybVZhbHVl UHRyCSAsCiAgICBYdFBvaW50ZXIqCSAKCik7CgoKCmV4dGVybiBCb29sZWFuIFh0Q3Z0SW50VG9T aG9ydCgKCiAgICBEaXNwbGF5KgkgLAogICAgWHJtVmFsdWVQdHIgICwJIAogICAgQ2FyZGluYWwq ICAgICwJCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHJtVmFsdWVQdHIJICwKICAgIFh0UG9pbnRl cioJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0SW50VG9VbnNpZ25lZENoYXIoCgogICAgRGlz cGxheSoJICwKICAgIFhybVZhbHVlUHRyICAsCSAKICAgIENhcmRpbmFsKiAgICAsCQogICAgWHJt VmFsdWVQdHIJICwKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYdFBvaW50ZXIqCSAKCik7CgogCgpl eHRlcm4gQm9vbGVhbiBYdEN2dENvbG9yVG9QaXhlbCgKCiAgICBEaXNwbGF5KgkgLAogICAgWHJt VmFsdWVQdHIgICwJIAogICAgQ2FyZGluYWwqICAgICwJCiAgICBYcm1WYWx1ZVB0cgkgLAogICAg WHJtVmFsdWVQdHIJICwKICAgIFh0UG9pbnRlcioJIAoKKTsKCiAKCgoKCiAKCgogCiMgNzUgInhk dmkuaCIgMgoKCgoKCgojIDkyICJ4ZHZpLmgiCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmCWNoYXIJ CUJvb2wzOwkJIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9kaXJlbnQu aCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKIAoKCgogCgoKCgoKCgoKCgoKCgoK IyAxICIvdXNyL2luY2x1ZGUvZGlyZW50cnkuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgpz dHJ1Y3QgZGlyZW50CiAgewogICAgbG9uZyBpbnQgZF9pbm87CiAgICBfX29mZl90IGRfb2ZmOwog ICAgdW5zaWduZWQgc2hvcnQgaW50IGRfcmVjbGVuOwogICAgdW5zaWduZWQgY2hhciBkX3R5cGU7 CiAgICBjaGFyIGRfbmFtZVsyNTZdOwkJIAogIH07CgoKCgoKCgoKIyA0NyAiL3Vzci9pbmNsdWRl L2RpcmVudC5oIiAyIDMKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAplbnVt CiAgewogICAgRFRfVU5LTk9XTiA9IDAsCgogICAgRFRfRklGTyA9IDEsCgogICAgRFRfQ0hSID0g MiwKCiAgICBEVF9ESVIgPSA0LAoKICAgIERUX0JMSyA9IDYsCgogICAgRFRfUkVHID0gOCwKCiAg ICBEVF9MTksgPSAxMCwKCiAgICBEVF9TT0NLID0gMTIKCiAgfTsKCiAKCgoKCgogCgp0eXBlZGVm IHN0cnVjdCBfX2RpcnN0cmVhbSBESVI7CgogCgpleHRlcm4gRElSICpfX29wZW5kaXIgIChfX2Nv bnN0IGNoYXIgKl9fbmFtZSkgIDsKZXh0ZXJuIERJUiAqb3BlbmRpciAgKF9fY29uc3QgY2hhciAq X19uYW1lKSAgOwoKIAoKZXh0ZXJuIGludCBfX2Nsb3NlZGlyICAoRElSICpfX2RpcnApICA7CmV4 dGVybiBpbnQgY2xvc2VkaXIgIChESVIgKl9fZGlycCkgIDsKCiAKCgoKZXh0ZXJuIHN0cnVjdCBk aXJlbnQgKl9fcmVhZGRpciAgKERJUiAqX19kaXJwKSAgOwpleHRlcm4gc3RydWN0IGRpcmVudCAq cmVhZGRpciAgKERJUiAqX19kaXJwKSAgOwoKCiAKCmV4dGVybiBpbnQgX19yZWFkZGlyX3IgIChE SVIgKl9fZGlycCwgc3RydWN0IGRpcmVudCAqX19lbnRyeSwKCQkJICAgICBzdHJ1Y3QgZGlyZW50 ICoqX19yZXN1bHQpICA7CmV4dGVybiBpbnQgcmVhZGRpcl9yICAoRElSICpfX2RpcnAsIHN0cnVj dCBkaXJlbnQgKl9fZW50cnksCgkJCSAgIHN0cnVjdCBkaXJlbnQgKipfX3Jlc3VsdCkgIDsKCgog CmV4dGVybiB2b2lkIHJld2luZGRpciAgKERJUiAqX19kaXJwKSAgOwoKCgogCmV4dGVybiBpbnQg ZGlyZmQgIChESVIgKl9fZGlycCkgIDsKCgoKCgoKIAoKCiAKCgoKCgoKCgoKIyAxICIvdXNyL2xp Yi9nY2MtbGliL2k2ODYtbGludXgvcGdjYy0yLjkxLjYwL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoK CgoKCgogCgoKIyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LWxpbnV4L3BnY2MtMi45MS42MC9p bmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi91c3IvbGliL2djYy1s aWIvaTY4Ni1saW51eC9wZ2NjLTIuOTEuNjAvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgog CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgogCgoKIyAxMjYgIi91c3IvbGliL2djYy1saWIv aTY4Ni1saW51eC9wZ2NjLTIuOTEuNjAvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCiAKCiAK CgojIDE4OCAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LWxpbnV4L3BnY2MtMi45MS42MC9pbmNsdWRl L3N0ZGRlZi5oIiAzCgoKCgoKIAoKCgoKIAoKCiMgMjY5ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYt bGludXgvcGdjYy0yLjkxLjYwL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgoKCgoKCgoKCgoKCiAK CiAKCiMgMzE3ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtbGludXgvcGdjYy0yLjkxLjYwL2luY2x1 ZGUvc3RkZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCiMgMTY1ICIvdXNyL2lu Y2x1ZGUvZGlyZW50LmgiIDIgMwoKCiAKZXh0ZXJuIHZvaWQgc2Vla2RpciAgKERJUiAqX19kaXJw LCBfX29mZl90IF9fcG9zKSAgOwoKIApleHRlcm4gX19vZmZfdCB0ZWxsZGlyICAoRElSICpfX2Rp cnApICA7CgogCgoKCmV4dGVybiBpbnQgc2NhbmRpciAgKF9fY29uc3QgY2hhciAqX19kaXIsCgkJ CSBzdHJ1Y3QgZGlyZW50ICoqKl9fbmFtZWxpc3QsCgkJCSBpbnQgKCpfX3NlbGVjdG9yKSAgKHN0 cnVjdCBkaXJlbnQgKikgICwKCQkJIGludCAoKl9fY21wKSAgKF9fY29uc3Qgdm9pZCAqICwKCQkJ CQkgICAgX19jb25zdCB2b2lkICogKSAgKSAgOwoKIApleHRlcm4gaW50IGFscGhhc29ydCAgKF9f Y29uc3Qgdm9pZCAqICwgX19jb25zdCB2b2lkICogKSAgOwoKCiAKCgoKZXh0ZXJuIF9fc3NpemVf dCBfX2dldGRpcmVudHJpZXMgIChpbnQgX19mZCwgY2hhciAqX19idWYsCgkJCQkgICAgICAgc2l6 ZV90IF9fbmJ5dGVzLCBfX29mZl90ICpfX2Jhc2VwKSAgOwpleHRlcm4gX19zc2l6ZV90IGdldGRp cmVudHJpZXMgIChpbnQgX19mZCwgY2hhciAqX19idWYsCgkJCQkgICAgIHNpemVfdCBfX25ieXRl cywgX19vZmZfdCAqX19iYXNlcCkgIDsKCgoKCiAKCgojIDEzMCAieGR2aS5oIiAyCgoKIyAxNDQg InhkdmkuaCIKCgogCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiMgMTkzICJ4ZHZpLmgiCgoKCgoK CiMgMSAiLi4va3BhdGhzZWEvYy12YXJhcmcuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoK CgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1saW51eC9wZ2NjLTIuOTEuNjAvaW5jbHVk ZS9zdGRhcmcuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCiAKCgoKIAoKCgoKCgoKCgoKCgoKCnZv aWQgdmFfZW5kIChfX2dudWNfdmFfbGlzdCk7CQkgCgoKIAoKCgogCgoKCgoKCgoKCgoKCiAKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCiAKIAoKCgoKCgoKCgoKCgoKIyAxNjggIi91c3IvbGliL2djYy1s aWIvaTY4Ni1saW51eC9wZ2NjLTIuOTEuNjAvaW5jbHVkZS9zdGRhcmcuaCIgMwoKCiAKCgoKCiAK CiAKCiAKCnR5cGVkZWYgX19nbnVjX3ZhX2xpc3QgdmFfbGlzdDsKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKIyAyOSAiLi4va3BhdGhzZWEvYy12YXJhcmcuaCIgMgoKCgoKCgoKCgoKCgoKIyA1OSAi Li4va3BhdGhzZWEvYy12YXJhcmcuaCIKCgoKIyAxOTkgInhkdmkuaCIgMgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmNoYXIgKnVybG9jYWxp emUgIChjb25zdCAgY2hhciAqZmlsZW5hbWUpICA7CmludCBsYXN0d3d3b3BlbjsKCgogCgoKCgoK CgoKCgp0eXBlZGVmCXVuc2lnbmVkIGNoYXIJdWJ5dGU7CgoKdHlwZWRlZgl1bnNpZ25lZCBpbnQJ d2lkZV91Ynl0ZTsKdHlwZWRlZglpbnQJCXdpZGVfYm9vbDsKCgoKCgoKCgoKCgogCgoKCgoKCgoK CgoKCgoKCgoKZXh0ZXJuCXVuc2lnbmVkIGludCAgCWJpdF9tYXNrc1soOCAqIDQgKSAgKyAxXTsK CnN0cnVjdCBmcmFtZSB7CglzdHJ1Y3QgZnJhbWVkYXRhIHsKCQlsb25nIGR2aV9oLCBkdmlfdiwg dywgeCwgeSwgejsKCQlpbnQgcHhsX3Y7Cgl9IGRhdGE7CglzdHJ1Y3QgZnJhbWUgKm5leHQsICpw cmV2Owp9OwoKCgoKdHlwZWRlZgl2b2lkCSgqc2V0X2NoYXJfcHJvYykgICh3aWRlX3VieXRlLCB3 aWRlX3VieXRlKSAgOwoKCnN0cnVjdCBkcmF3aW5mIHsJIAoJc3RydWN0IGZyYW1lZGF0YSBkYXRh OwoJc3RydWN0IGZvbnQJKmZvbnRwOwoJc2V0X2NoYXJfcHJvYwlzZXRfY2hhcl9wOwoJaW50CQl0 bl90YWJsZV9sZW47CglzdHJ1Y3QgZm9udAkqKnRuX3RhYmxlOwoJc3RydWN0IHRuCSp0bl9oZWFk OwoJdWJ5dGUJCSpwb3MsICplbmQ7CglzdHJ1Y3QgZm9udAkqdmlydHVhbDsKCglpbnQJCWRpcjsK Cn07CgpleHRlcm4gCXN0cnVjdCBkcmF3aW5mCWN1cnJpbmY7CgogCgoKCgoKCgoKCgoKCmV4dGVy biAJaW50CWN1cnJlbnRfcGFnZTsKZXh0ZXJuIAlpbnQJdG90YWxfcGFnZXM7CmV4dGVybiAJaW50 CXBhZ2Vub19jb3JyZWN0CSA7CmV4dGVybiAJbG9uZwltYWduaWZpY2F0aW9uOwpleHRlcm4gCWRv dWJsZQlkaW1jb252OwpleHRlcm4gCWRvdWJsZQl0cGljX2NvbnY7CmV4dGVybiAJaW50CW5fZmls ZXNfbGVmdDsJIApleHRlcm4gCXRpbWVfdAlkdmlfdGltZTsJCSAKZXh0ZXJuIAl1bnNpZ25lZCBp bnQJcGFnZV93LCBwYWdlX2g7CgoKCgoKCgoKCgoKCmV4dGVybiAJaW50CXNjYW5uZWRfcGFnZTsJ CSAKZXh0ZXJuIAlpbnQJc2Nhbm5lZF9wYWdlX2JhazsJIApleHRlcm4gCWludAlzY2FubmVkX3Bh Z2VfcmVzZXQ7CSAKCgogCgoKCmV4dGVybiAJbG9uZwkqcGFnZV9vZmZzZXQ7CgogCgoKZXh0ZXJu IAlCb29sZWFuCXdhcm5fc3BlY19ub3c7CgogCgoKZXh0ZXJuIAlCb29sZWFuCXBzZmlnX2JlZ3Vu CSA7CgoKIAoKCnN0cnVjdCBiaXRtYXAgewoJdW5zaWduZWQgc2hvcnQJdywgaDsJCSAKCXNob3J0 CQlieXRlc193aWRlOwkgCgljaGFyCQkqYml0czsJCSAKfTsKCiAKCgoKCgoKc3RydWN0IGdseXBo IHsKCWxvbmcgYWRkcjsJCSAKCWxvbmcgZHZpX2FkdjsJCSAKCXNob3J0IHgsIHk7CQkgCglzdHJ1 Y3QgYml0bWFwIGJpdG1hcDsJIAoJc2hvcnQgeDIsIHkyOwkJIAoKCVhJbWFnZSAqaW1hZ2UyOwoJ Y2hhciAqcGl4bWFwMjsKCWNoYXIgKnBpeG1hcDJfdDsKCglzdHJ1Y3QgYml0bWFwIGJpdG1hcDI7 CSAKfTsKCiAKCgpzdHJ1Y3QgbWFjcm8gewoJdWJ5dGUJKnBvczsJCSAKCXVieXRlCSplbmQ7CQkg Cglsb25nCWR2aV9hZHY7CSAKCUJvb2xlYW4JZnJlZV9tZTsJIAoJCQkJIAp9OwoKIAoKCgoKCgoK CgoKCgoKCnR5cGVkZWYJdm9pZCAoKnJlYWRfY2hhcl9wcm9jKSAgKHJlZ2lzdGVyIHN0cnVjdCBm b250ICosIHdpZGVfdWJ5dGUpICA7CgpzdHJ1Y3QgZm9udCB7CglzdHJ1Y3QgZm9udCAqbmV4dDsJ CSAKCWNoYXIgKmZvbnRuYW1lOwkJCSAKCWZsb2F0IGZzaXplOwkJCSAKCWludCBtYWdzdGVwdmFs OwkJCSAKCUZJTEUgKmZpbGU7CQkJIAoJY2hhciAqZmlsZW5hbWU7CQkJIAoJbG9uZyBjaGVja3N1 bTsJCQkgCgl1bnNpZ25lZCBzaG9ydCB0aW1lc3RhbXA7CSAKCXVieXRlIGZsYWdzOwkJCSAKCgl3 aWRlX3VieXRlIG1heGNoYXI7CQkJIAoKCgoJZG91YmxlIGRpbWNvbnY7CQkJIAoJc2V0X2NoYXJf cHJvYyBzZXRfY2hhcl9wOwkgCgkJIAoJcmVhZF9jaGFyX3Byb2MgcmVhZF9jaGFyOwkgCglzdHJ1 Y3QgZ2x5cGggKmdseXBoOwoJCSAKCXN0cnVjdCBmb250ICoqdmZfdGFibGU7CQkgCglzdHJ1Y3Qg dG4gKnZmX2NoYWluOwkJIAoJc3RydWN0IGZvbnQgKmZpcnN0X2ZvbnQ7CSAKCXN0cnVjdCBtYWNy byAqbWFjcm87CgkJIAoJCSAKfTsKCgoKCgoKCgpzdHJ1Y3QgdG4gewoJc3RydWN0IHRuICpuZXh0 OwkJIAoJaW50IFRlWG51bWJlcjsJCQkgCglzdHJ1Y3QgZm9udCAqZm9udHA7CQkgCn07CgpleHRl cm4gCXN0cnVjdCBmb250CSp0bl90YWJsZVszMCBdOwpleHRlcm4gCXN0cnVjdCBmb250CSpmb250 X2hlYWQJIDsKZXh0ZXJuIAlzdHJ1Y3QgdG4JKnRuX2hlYWQJIDsKCmV4dGVybiAJd2lkZV91Ynl0 ZQkJbWF4Y2hhcjsKCgoKZXh0ZXJuIAl1bnNpZ25lZCBzaG9ydAljdXJyZW50X3RpbWVzdGFtcCAg OwoKIAoKCgpleHRlcm4Jc3RydWN0IF9yZXNvdXJjZSB7CgoKCgoJaW50CQlzaHJpbmtmYWN0b3I7 CgoJaW50CQlfZGVuc2l0eTsKCglmbG9hdAkJX2dhbW1hOwoKCWludAkJX3BpeGVsc19wZXJfaW5j aDsKCUJvb2xlYW4JCV9kZWxheV9ydWxlcnM7CglpbnQJCV90aWNrX2xlbmd0aDsKCWNoYXIJCSpf dGlja191bml0czsKCWNvbnN0IAljaGFyCSpzaWRlbWFyZ2luOwoJY29uc3QgCWNoYXIJKnRvcG1h cmdpbjsKCWNvbnN0IAljaGFyCSp4b2Zmc2V0OwoJY29uc3QgCWNoYXIJKnlvZmZzZXQ7Cgljb25z dCAJY2hhcgkqcGFwZXI7Cgljb25zdCAJY2hhcgkqX2FsdF9mb250OwoJQm9vbGVhbgkJbWFrZXBr OwoJY29uc3QgCWNoYXIJKm1mbW9kZTsKCUJvb2xlYW4JCV9saXN0X2ZvbnRzOwoJQm9vbGVhbgkJ cmV2ZXJzZTsKCUJvb2xlYW4JCV93YXJuX3NwZWM7CglCb29sZWFuCQlfaHVzaF9jaGFyczsKCUJv b2xlYW4JCV9odXNoX2NoazsKCUJvb2xlYW4JCXNhZmVyOwoKCgoKCVBpeGVsCQlfZm9yZV9QaXhl bDsKCVBpeGVsCQlfYmFja19QaXhlbDsKCglQaXhlbAkJX2JyZHJfUGl4ZWw7CglQaXhlbAkJX2hs X1BpeGVsOwoJUGl4ZWwJCV9jcl9QaXhlbDsKCgljb25zdCAJY2hhcgkqaWNvbl9nZW9tZXRyeTsK CUJvb2xlYW4JCWtlZXBfZmxhZzsKCUJvb2xlYW4JCWNvcHk7CglCb29sZWFuCQl0aG9yb3VnaDsK CgkgCgoJQm9vbGVhbgkJX3Bvc3RzY3JpcHQ7CglCb29sZWFuCQlwcmVzY2FuOwoJQm9vbGVhbgkJ YWxsb3dfc2hlbGw7CgoKCgoKCgoJQm9vbGVhbgkJdXNlR1M7CglCb29sZWFuCQlnc19zYWZlcjsK CUJvb2xlYW4JCWdzX2FscGhhOwoJY29uc3QgCWNoYXIJKmdzX3BhdGg7Cgljb25zdCAJY2hhcgkq Z3NfcGFsZXR0ZTsKCgoJY29uc3QgCWNoYXIJKmRlYnVnX2FyZzsKCUJvb2xlYW4JCXZlcnNpb25f ZmxhZzsKCglCb29sZWFuCQlleHBlcnQ7CglpbnQJCXNocmlua2J1dHRvbls0XTsKCgljb25zdCAJ Y2hhcgkqbWdfYXJnWzVdOwoKCUJvb2xlYW4JCV91c2VfZ3JleTsKCUJvb2wzCQlpbnN0YWxsOwoK CglpbnQgX2dyaWRfbW9kZTsKCWNoYXIgKmdyaWQxX2NvbG9yLCAqZ3JpZDJfY29sb3IsICpncmlk M19jb2xvcjsKCglQaXhlbAlfZ3JpZDFfUGl4ZWwsIF9ncmlkMl9QaXhlbCwgX2dyaWQzX1BpeGVs OwoKCgoJQm9vbGVhbglfdW5kZXJsaW5lX2xpbms7CgljaGFyCSpfYnJvd3NlcjsKCWNoYXIJKl9V UkxiYXNlOwoJY2hhcgkqX3Njcm9sbF9wYWdlczsKCn0gcmVzb3VyY2U7CgogCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiAJUGl4ZWwJCXBsYW5lX21hc2tzWzRdOwpl eHRlcm4gCVhDb2xvcgkJZm9yZV9jb2xvcl9kYXRhLCBiYWNrX2NvbG9yX2RhdGE7CgoKZXh0ZXJu CXN0cnVjdAltZ19zaXplX3JlYyB7CglpbnQJCXc7CglpbnQJCWg7Cn0KCW1nX3NpemVbNV07Cgpl eHRlcm4gCWludAkJZGVidWcJCSA7CgoKCgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuIAlpbnQJCW9m ZnNldF94LCBvZmZzZXRfeTsKZXh0ZXJuIAl1bnNpZ25lZCBpbnQJdW5zaHJ1bmtfcGFwZXJfdywg dW5zaHJ1bmtfcGFwZXJfaDsKZXh0ZXJuIAl1bnNpZ25lZCBpbnQJdW5zaHJ1bmtfcGFnZV93LCB1 bnNocnVua19wYWdlX2g7CgpleHRlcm4gICB1bnNpZ25lZCBpbnQJdW5zaHJ1bmtfcGFwZXJfdW5p dDsKCgoKZXh0ZXJuIAlpbnQJSFRlWG5leHRfZXh0ZXJuOyAgCmV4dGVybiAJY2hhcgkqdGVtcG9y YXJ5X2RpcgkgOwpleHRlcm4gCWNoYXIJKmFuY2hvcl9uYW1lCSA7CmV4dGVybiAJQm9vbGVhbglV UkxfYXdhcmUJIDsKZXh0ZXJuIAlCb29sZWFuCWhpZ2hsaWdodAkgOwpleHRlcm4gaW50IEhUZVhB bmVzdGxldmVsOwkgCmV4dGVybiBpbnQgSFRlWHJlZmxldmVsOwkgCgoKZXh0ZXJuIAljaGFyCQkq ZHZpX25hbWUJIDsKZXh0ZXJuIAlGSUxFCQkqZHZpX2ZpbGU7CQkgCmV4dGVybiAJY29uc3QgIGNo YXIJKnByb2c7CmV4dGVybiAJaW50CQliYWtfc2hyaW5rOwkJIApleHRlcm4gCURpbWVuc2lvbgl3 aW5kb3dfdywgd2luZG93X2g7CmV4dGVybiAJWEltYWdlCQkqaW1hZ2U7CmV4dGVybiAJaW50CQli YWNraW5nX3N0b3JlOwpleHRlcm4gCWludAkJaG9tZV94LCBob21lX3k7CgpleHRlcm4gCURpc3Bs YXkJCSpESVNQOwpleHRlcm4gCVNjcmVlbgkJKlNDUk47CgpleHRlcm4gCWludAkJc2NyZWVuX251 bWJlcjsKZXh0ZXJuIAlWaXN1YWwJCSpvdXJfdmlzdWFsOwpleHRlcm4gCXVuc2lnbmVkIGludAlv dXJfZGVwdGg7CmV4dGVybiAJQ29sb3JtYXAJb3VyX2NvbG9ybWFwOwpleHRlcm4gCUdDCQljb3B5 R0M7CgoKCgoKCmV4dGVybiAJR0MJCXJ1bGVHQzsKZXh0ZXJuIAlHQwkJZm9yZUdDLCBoaWdoR0M7 CmV4dGVybiAJR0MJCWZvcmVHQzI7CgpleHRlcm4gICBHQyAgICAgIGdyaWQxR0MsIGdyaWQyR0Ms IGdyaWQzR0M7CgpleHRlcm4gCUJvb2xlYW4JCWNvcHk7CgpleHRlcm4gCUN1cnNvcgkJcmVkcmF3 X2N1cnNvciwgcmVhZHlfY3Vyc29yOwoKCmV4dGVybiAJUGl4ZWwJCSpwaXhlbHRibDsKZXh0ZXJu IAlQaXhlbAkJKnBpeGVsdGJsX3Q7CgoKZXh0ZXJuIAlCb29sZWFuCQljYW5pdAkJIDsKZXh0ZXJu IAlqbXBfYnVmCQljYW5pdF9lbnY7CmV4dGVybiAJdm9sYXRpbGUgIHNob3J0CWV2ZW50X2NvdW50 ZXIJIDsKCnN0cnVjdAlXaW5kb3dSZWMgewoJV2luZG93CQl3aW47CglpbnQJCXNocmlua2ZhY3Rv cjsKCWludAkJYmFzZV94LCBiYXNlX3k7Cgl1bnNpZ25lZCBpbnQJd2lkdGgsIGhlaWdodDsKCWlu dAltaW5feCwgbWF4X3gsIG1pbl95LCBtYXhfeTsJIAp9OwoKZXh0ZXJuCXN0cnVjdCBXaW5kb3dS ZWMgbWFuZSwgYWx0LCBjdXJyd2luOwpleHRlcm4gCWludAkJbWluX3gsIG1heF94LCBtaW5feSwg bWF4X3k7CgoKCgpleHRlcm4gCVdpZGdldAkJdG9wX2xldmVsLCB2cG9ydF93aWRnZXQsIGRyYXdf d2lkZ2V0LCBjbGlwX3dpZGdldDsKCmV4dGVybiAJV2lkZ2V0CXBhbmVfd2lkZ2V0LCBhbmNob3Jf c2VhcmNoLCBhbmNob3JfaW5mbzsKCgoKCgoKCgoKCgpleHRlcm4gCVdpZGdldAlmb3JtX3dpZGdl dDsKCgoKCgoKCgpleHRlcm4gCWptcF9idWYJCWR2aV9lbnY7CSAKZXh0ZXJuIAljb25zdCAJY2hh cgkqZHZpX29vcHNfbXNnOwkgCgpleHRlcm4gCWNoYXIJKmZmbGluZQkgOwkgCgkJCQkJIAoJCQkJ CSAKCQkJCQkgCmV4dGVybiAJaW50CWZmbGluZV9sZW4gIDsJIAoKCgoKCgoKCgoKCgoKCgkKZXh0 ZXJuCXN0cnVjdCBwc3Byb2NzCXsKCXZvaWQJKCp0b2dnbGUpICAodm9pZCkgIDsKCXZvaWQJKCpk ZXN0cm95KSAgKHZvaWQpICA7Cgl2b2lkCSgqaW50ZXJydXB0KSAgKHZvaWQpICA7Cgl2b2lkCSgq ZW5kcGFnZSkgICh2b2lkKSAgOwoJdm9pZAkoKmRyYXdiZWdpbikgIChpbnQsIGludCwgY29uc3Qg IGNoYXIgKikgIDsKCXZvaWQJKCpkcmF3cmF3KSAgKGNvbnN0ICBjaGFyICopICA7Cgl2b2lkCSgq ZHJhd2ZpbGUpICAoY29uc3QgIGNoYXIgKiwgRklMRSAqKSAgOwoJdm9pZAkoKmRyYXdlbmQpICAo Y29uc3QgIGNoYXIgKikgIDsKCXZvaWQJKCpiZWdpbmhlYWRlcikgICh2b2lkKSAgOwoJdm9pZAko KmVuZGhlYWRlcikgICh2b2lkKSAgOwoJdm9pZAkoKm5ld2RvYykgICh2b2lkKSAgOwp9CXBzcCwg bm9fcHNfcHJvY3M7CgoKCiAKCgoKIAoKZXh0ZXJuCXZvaWQJY3JlYXRlX2J1dHRvbnMgIChYdEFy Z1ZhbCkgIDsKCgpleHRlcm4Jdm9pZAlpbml0X3BsYW5lX21hc2tzICAodm9pZCkgIDsKCmV4dGVy bgl2b2lkCWluaXRfY29sb3JzICAodm9pZCkgIDsKZXh0ZXJuCXZvaWQJcmVjb25maWcgICh2b2lk KSAgOwoKZXh0ZXJuCXZvaWQJaGFuZGxlX2tleSAgKFdpZGdldCwgWHRQb2ludGVyLCBYRXZlbnQg KiwgQm9vbGVhbiAqKSAgOwpleHRlcm4Jdm9pZAloYW5kbGVfcmVzaXplICAoV2lkZ2V0LCBYdFBv aW50ZXIsIFhFdmVudCAqLCBCb29sZWFuICopICA7CmV4dGVybgl2b2lkCWhhbmRsZV9idXR0b24g IChXaWRnZXQsIFh0UG9pbnRlciwgWEV2ZW50ICosIEJvb2xlYW4gKikgIDsKZXh0ZXJuCXZvaWQJ aGFuZGxlX21vdGlvbiAgKFdpZGdldCwgWHRQb2ludGVyLCBYRXZlbnQgKiwgQm9vbGVhbiAqKSAg OwpleHRlcm4Jdm9pZAloYW5kbGVfcmVsZWFzZSAgKFdpZGdldCwgWHRQb2ludGVyLCBYRXZlbnQg KiwgQm9vbGVhbiAqKSAgOwpleHRlcm4Jdm9pZAloYW5kbGVfZXhwICAoV2lkZ2V0LCBYdFBvaW50 ZXIsIFhFdmVudCAqLCBCb29sZWFuICopICA7CgoKCgoKCgpleHRlcm4Jdm9pZAlzaG93bWVzc2Fn ZSAgKGNvbnN0ICBjaGFyICopICA7CgpleHRlcm4Jdm9pZAlwc19yZWFkX2V2ZW50cyAgKHdpZGVf Ym9vbCwgd2lkZV9ib29sKSAgOwoKCgoKZXh0ZXJuCXZvaWQJcmVkcmF3X3BhZ2UgICh2b2lkKSAg OwpleHRlcm4Jdm9pZAlkb19wYWdlcyAgKHZvaWQpICA7CmV4dGVybgl2b2lkCXJlc2V0X2ZvbnRz ICAodm9pZCkgIDsKZXh0ZXJuCXZvaWQJcmVhbGxvY19mb250ICAoc3RydWN0IGZvbnQgKiwgd2lk ZV91Ynl0ZSkgIDsKZXh0ZXJuCXZvaWQJcmVhbGxvY192aXJ0dWFsX2ZvbnQgIChzdHJ1Y3QgZm9u dCAqLCB3aWRlX3VieXRlKSAgOwpleHRlcm4JQm9vbGVhbglsb2FkX2ZvbnQgIChzdHJ1Y3QgZm9u dCAqKSAgOwpleHRlcm4Jc3RydWN0IGZvbnQJKmRlZmluZV9mb250ICAoRklMRSAqLCB3aWRlX3Vi eXRlLAoJCQlzdHJ1Y3QgZm9udCAqLCBzdHJ1Y3QgZm9udCAqKiwgdW5zaWduZWQgaW50LAoJCQlz dHJ1Y3QgdG4gKiopICA7CmV4dGVybgl2b2lkCWluaXRfcGFnZSAgKHZvaWQpICA7CmV4dGVybgl2 b2lkCW9wZW5fZHZpX2ZpbGUgICh2b2lkKSAgOwpleHRlcm4JQm9vbGVhbgljaGVja19kdmlfZmls ZSAgKHZvaWQpICA7CgpleHRlcm4Jdm9pZAlwdXRfZ3JpZCAgKGludCwgaW50LCB1bnNpZ25lZCBp bnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCBHQywgR0MsIEdDKSAgOwoKCgoKCgpleHRl cm4Jdm9pZAlzZXRfY2hhciAgKHdpZGVfdWJ5dGUsIHdpZGVfdWJ5dGUpICA7CmV4dGVybgl2b2lk CWxvYWRfbl9zZXRfY2hhciAgKHdpZGVfdWJ5dGUsIHdpZGVfdWJ5dGUpICA7CmV4dGVybgl2b2lk CXNldF92Zl9jaGFyICAod2lkZV91Ynl0ZSwgd2lkZV91Ynl0ZSkgIDsKCmV4dGVybgl2b2lkCWRy YXdfcGFnZSAgKHZvaWQpICA7CgoKCgoKCgoKZXh0ZXJuCXZvaWQJaW5pdF9mb250X29wZW4gICh2 b2lkKSAgOwpleHRlcm4JRklMRQkqZm9udF9vcGVuICAoY29uc3QgIGNoYXIgKiwgY2hhciAqKiwg ZG91YmxlLCBpbnQgKiwgaW50LAoJCQljaGFyICoqKSAgOwoKZXh0ZXJuCXZvaWQJcHNfbmV3ZG9j ICAodm9pZCkgIDsKZXh0ZXJuCXZvaWQJcHNfZGVzdHJveSAgKHZvaWQpICA7CgpleHRlcm4Jdm9p ZAlhcHBsaWNhdGlvbkRvU3BlY2lhbCAgKGNoYXIgKikgIDsKCmV4dGVybgl2b2lkCXNjYW5fc3Bl Y2lhbCAgKGNoYXIgKikgIDsKCmV4dGVybgl2b2xhdGlsZSAgdm9pZAlvb3BzICAoY29uc3QgIGNo YXIgKm1lc3NhZ2UsIC4uLikgIDsKCgoKCgoKZXh0ZXJuCXZvaWQJZXhwYW5kbGluZSAgKGludCkg IDsKZXh0ZXJuCXZvaWQJYWxsb2NfYml0bWFwICAoc3RydWN0IGJpdG1hcCAqKSAgOwoKCgpleHRl cm4JaW50CW1lbWljbXAgIChjb25zdCAgY2hhciAqLCBjb25zdCAgY2hhciAqLCBzaXplX3QpICA7 CmV4dGVybglGSUxFCSogeGR2aV94Zm9wZW4gICAoY29uc3QgIGNoYXIgKiwgY29uc3QgIGNoYXIg KiApICA7CgpleHRlcm4JRklMRQkqeGZvcGVuX2xvY2FsICAoY29uc3QgIGNoYXIgKiwgY29uc3Qg IGNoYXIgKiApICA7CgoKCmV4dGVybglpbnQJeHBpcGUgIChpbnQgKikgIDsKZXh0ZXJuCURJUgkq eGR2aV94b3BlbmRpciAgKGNvbnN0ICBjaGFyICopICA7CmV4dGVybgljb25zdCAJc3RydWN0IHBh c3N3ZCAqZmZfZ2V0cHcgIChjb25zdCAgY2hhciAqKiwgY29uc3QgIGNoYXIgKikgIDsKZXh0ZXJu CXVuc2lnbmVkIGxvbmcJbnVtICAoRklMRSAqLCBpbnQpICA7CmV4dGVybglsb25nCXNudW0gIChG SUxFICosIGludCkgIDsKZXh0ZXJuCXZvaWQJcmVhZF9QS19pbmRleCAgKHN0cnVjdCBmb250ICos IHdpZGVfYm9vbCkgIDsKZXh0ZXJuCXZvaWQJcmVhZF9HRl9pbmRleCAgKHN0cnVjdCBmb250ICos IHdpZGVfYm9vbCkgIDsKCmV4dGVybgl1bnNpZ25lZCBsb25nIHJlYWRfVkZfaW5kZXggIChzdHJ1 Y3QgZm9udCAqLCB3aWRlX2Jvb2wpICA7CgoKCgoKZXh0ZXJuCXZvaWQJZHJhd2JlZ2luX25vbmUg IChpbnQsIGludCwgY29uc3QgIGNoYXIgKikgIDsKZXh0ZXJuCXZvaWQJZHJhd19iYm94ICAodm9p ZCkgIDsKZXh0ZXJuCXZvaWQJTnVsbFByb2MgICh2b2lkKSAgOwoKCgoKCgoKZXh0ZXJuCUJvb2xl YW4JaW5pdEdTICAodm9pZCkgIDsKCgoKZXh0ZXJuCWludAlvcGVuX3d3d19maWxlICAodm9pZCkg IDsKZXh0ZXJuCXZvaWQJY2xlYW51cF9hbmRfZXhpdCAgKGludCkgIDsKZXh0ZXJuCXZvaWQJaHRl eF9jYW5faXQgICh2b2lkKSAgOwpleHRlcm4Jdm9pZAlzZWFyY2hfY2FsbGJhY2sgIChXaWRnZXQs IFh0UG9pbnRlciwgWHRQb2ludGVyKSAgOwpleHRlcm4Jdm9pZAlkZXRhY2hfYW5jaG9yICAodm9p ZCkgIDsKZXh0ZXJuCUZJTEUJKnhmb3Blbl9sb2NhbCAgKGNvbnN0ICBjaGFyICosIGNvbnN0ICBj aGFyICogKSAgOwpleHRlcm4JY2hhcgkqTXlTdHJBbGxvY0NvcHkgIChjaGFyICoqLCBjaGFyICop ICA7CmV4dGVybglpbnQJcG9pbnRlcmxvY2F0ZSAgKGludCAqLCBpbnQgKikgIDsKZXh0ZXJuCXZv aWQJaHRleF9yZWNvcmRiaXRzICAoaW50LCBpbnQsIGludCwgaW50KSAgOwpleHRlcm4Jdm9pZAlo dGV4X2luaXRwYWdlICAodm9pZCkgIDsKZXh0ZXJuCXZvaWQJaHRleF9kb25lcGFnZSAgKGludCwg aW50KSAgOwpleHRlcm4Jdm9pZAlodGV4X3BhcnNlcGFnZXMgICh2b2lkKSAgOwpleHRlcm4Jdm9p ZAlodGV4X3BhcnNlX3BhZ2UgIChpbnQpICA7CmV4dGVybgl2b2lkCWh0ZXhfc2NhbnBhZ2UgIChp bnQpICA7CmV4dGVybgl2b2lkCWh0ZXhfc2NhbnBhZ2UgIChpbnQpICA7CmV4dGVybgl2b2lkCWh0 ZXhfZG9zcGVjaWFsICAobG9uZywgaW50KSAgOwpleHRlcm4Jdm9pZAlodGV4X3JlaW5pdCAgKHZv aWQpICA7CmV4dGVybgl2b2lkCWh0ZXhfZG9fbG9jICAoY2hhciAqKSAgOwpleHRlcm4Jdm9pZAlh ZGRfc2VhcmNoICAoY2hhciAqLCBpbnQpICA7CmV4dGVybglpbnQJaHRleF9oYW5kbGVyZWYgIChp bnQsIGludCwgaW50KSAgOwpleHRlcm4Jdm9pZAlodGV4X2Rpc3BsYXlhbmNob3IgIChpbnQsIGlu dCwgaW50KSAgOwpleHRlcm4Jdm9pZAlodGV4X2dvYmFjayAgKHZvaWQpICA7CmV4dGVybglpbnQJ Y2hlY2tIeXBlclRlWCAgKGNoYXIgKiwgaW50KSAgOwpleHRlcm4Jdm9pZAlodGV4X2hhbmRsZXRh ZyAgKGNoYXIgKiwgaW50KSAgOwpleHRlcm4Jdm9pZAlodGV4X2FuY2hvciAgKGludCwgY2hhciAq LCBpbnQpICA7CmV4dGVybgl2b2lkCWh0ZXhfZG9ocmVmICAoY2hhciAqKSAgOwpleHRlcm4Jdm9p ZAlodGV4X2RyYXdib3hlcyAgKHZvaWQpICA7CmV4dGVybgl2b2lkCWh0ZXhfdG9fcGFnZSAgKGlu dCkgIDsKZXh0ZXJuCXZvaWQJaHRleF90b19hbmNob3IgIChpbnQsIGludCkgIDsKZXh0ZXJuCWlu dAlodGV4X2lzX3VybCAgKGNvbnN0IGNoYXIgKikgIDsKZXh0ZXJuCXZvaWQJaHRleF9kb191cmwg IChjaGFyICopICA7CmV4dGVybiAgdm9pZCAJcGFpbnRfYW5jaG9yICAoY2hhciAqKSAgOwpleHRl cm4JaW50CWZldGNoX3JlbGF0aXZlX3VybCAgKGNoYXIgKiwgY29uc3QgY2hhciAqLCBjaGFyICop ICA7CmV4dGVybgl2b2lkCXdhaXRfZm9yX3VybHMgICh2b2lkKSAgOwpjaGFyICpmaWd1cmVfbWlt ZV90eXBlICAoY2hhciAqKSAgOwoKCgoKCgogCgoKCgoKCgoKCiAKIAp0eXBlZGVmIHN0cnVjdCB7 CgljaGFyICp1cmw7ICAgICAKCWNoYXIgKmZpbGU7ICAgIAp9IEZpbGV0b1VSTGNvbnY7CgoKZXh0 ZXJuICBGaWxldG9VUkxjb252ICpmaWxlbGlzdCAgOwpleHRlcm4gIGludCBuVVJMcyAgOwoKCgoK CiMgNDkgInhkdmktY29uZmlnLmgiIDIKCgoKIyA1NiAic3BlY2lhbC5jIiAyCgojIDEgIi4uL2tw YXRoc2VhL2MtZm9wZW4uaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgog CgoKCgoKCgoKIAoKCgoKCgoKCgoKCgogCgoKCgoKCgoKIAoKCgojIDgwICIuLi9rcGF0aHNlYS9j LWZvcGVuLmgiCgoKCgoKCgoKIyA1NyAic3BlY2lhbC5jIiAyCgojIDEgIi4uL2twYXRoc2VhL2Mt Y3R5cGUuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvY3R5cGUu aCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKIAoKCiAKCgoKCgoKCgoKCgoKCgpl bnVtCnsKICBfSVN1cHBlciA9ICggMCAgPCA4ID8gKCgxIDw8ICAwICkgPDwgOCkgOiAoKDEgPDwg IDAgKSA+PiA4KSkgLAkgCiAgX0lTbG93ZXIgPSAoIDEgIDwgOCA/ICgoMSA8PCAgMSApIDw8IDgp IDogKCgxIDw8ICAxICkgPj4gOCkpICwJIAogIF9JU2FscGhhID0gKCAyICA8IDggPyAoKDEgPDwg IDIgKSA8PCA4KSA6ICgoMSA8PCAgMiApID4+IDgpKSAsCSAKICBfSVNkaWdpdCA9ICggMyAgPCA4 ID8gKCgxIDw8ICAzICkgPDwgOCkgOiAoKDEgPDwgIDMgKSA+PiA4KSkgLAkgCiAgX0lTeGRpZ2l0 ID0gKCA0ICA8IDggPyAoKDEgPDwgIDQgKSA8PCA4KSA6ICgoMSA8PCAgNCApID4+IDgpKSAsCSAK ICBfSVNzcGFjZSA9ICggNSAgPCA4ID8gKCgxIDw8ICA1ICkgPDwgOCkgOiAoKDEgPDwgIDUgKSA+ PiA4KSkgLAkgCiAgX0lTcHJpbnQgPSAoIDYgIDwgOCA/ICgoMSA8PCAgNiApIDw8IDgpIDogKCgx IDw8ICA2ICkgPj4gOCkpICwJIAogIF9JU2dyYXBoID0gKCA3ICA8IDggPyAoKDEgPDwgIDcgKSA8 PCA4KSA6ICgoMSA8PCAgNyApID4+IDgpKSAsCSAKICBfSVNibGFuayA9ICggOCAgPCA4ID8gKCgx IDw8ICA4ICkgPDwgOCkgOiAoKDEgPDwgIDggKSA+PiA4KSkgLAkgCiAgX0lTY250cmwgPSAoIDkg IDwgOCA/ICgoMSA8PCAgOSApIDw8IDgpIDogKCgxIDw8ICA5ICkgPj4gOCkpICwJIAogIF9JU3B1 bmN0ID0gKCAxMCAgPCA4ID8gKCgxIDw8ICAxMCApIDw8IDgpIDogKCgxIDw8ICAxMCApID4+IDgp KSAsCSAKICBfSVNhbG51bSA9ICggMTEgIDwgOCA/ICgoMSA8PCAgMTEgKSA8PCA4KSA6ICgoMSA8 PCAgMTEgKSA+PiA4KSkgCSAKfTsKCgogCgoKCgoKCgoKCgpleHRlcm4gX19jb25zdCB1bnNpZ25l ZCBzaG9ydCBpbnQgKl9fY3R5cGVfYjsJIApleHRlcm4gX19jb25zdCBpbnQgKl9fY3R5cGVfdG9s b3dlcjsgIApleHRlcm4gX19jb25zdCBpbnQgKl9fY3R5cGVfdG91cHBlcjsgIAoKCgoKCgoKCgoK CgogCgoKCmV4dGVybiBpbnQgIGlzYWxudW0gICAoaW50KSAgIDsKZXh0ZXJuIGludCAgaXNhbHBo YSAgIChpbnQpICAgOwpleHRlcm4gaW50ICBpc2NudHJsICAgKGludCkgICA7CmV4dGVybiBpbnQg IGlzZGlnaXQgICAoaW50KSAgIDsKZXh0ZXJuIGludCAgaXNsb3dlciAgIChpbnQpICAgOwpleHRl cm4gaW50ICBpc2dyYXBoICAgKGludCkgICA7CmV4dGVybiBpbnQgIGlzcHJpbnQgICAoaW50KSAg IDsKZXh0ZXJuIGludCAgaXNwdW5jdCAgIChpbnQpICAgOwpleHRlcm4gaW50ICBpc3NwYWNlICAg KGludCkgICA7CmV4dGVybiBpbnQgIGlzdXBwZXIgICAoaW50KSAgIDsKZXh0ZXJuIGludCAgaXN4 ZGlnaXQgICAoaW50KSAgIDsKCgoKCgoKIApleHRlcm4gaW50IHRvbG93ZXIgIChpbnQgX19jKSAg OwoKIApleHRlcm4gaW50IHRvdXBwZXIgIChpbnQgX19jKSAgOwoKCgoKIAoKZXh0ZXJuIGludCBp c2FzY2lpICAoaW50IF9fYykgIDsKCiAKCmV4dGVybiBpbnQgdG9hc2NpaSAgKGludCBfX2MpICA7 CgoKCgogCmV4dGVybiBpbnQgIF90b3VwcGVyICAgKGludCkgICA7CmV4dGVybiBpbnQgIF90b2xv d2VyICAgKGludCkgICA7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCiMgMjIgIi4u L2twYXRoc2VhL2MtY3R5cGUuaCIgMgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgog CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogIAoKIyA1OCAic3BlY2lhbC5jIiAyCgojIDEg Ii4uL2twYXRoc2VhL2Mtc3RhdC5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNy L2luY2x1ZGUvc3lzL3N0YXQuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgog CgojIDEgIi91c3IvaW5jbHVkZS9zdGF0YnVmLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoK IAoKCgoKCiAKCgoKCgpzdHJ1Y3Qgc3RhdAogIHsKICAgIF9fZGV2X3Qgc3RfZGV2OwkJCSAKICAg IHVuc2lnbmVkIHNob3J0IGludCBfX3BhZDE7CiAgICBfX2lub190IHN0X2lubzsJCQkgCiAgICBf X21vZGVfdCBzdF9tb2RlOwkJCSAKICAgIF9fbmxpbmtfdCBzdF9ubGluazsJCQkgCiAgICBfX3Vp ZF90IHN0X3VpZDsJCQkgCiAgICBfX2dpZF90IHN0X2dpZDsJCQkgCiAgICBfX2Rldl90IHN0X3Jk ZXY7CQkJIAogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fcGFkMjsKICAgIF9fb2ZmX3Qgc3Rfc2l6 ZTsJCQkgCiAgICB1bnNpZ25lZCBsb25nIGludCBzdF9ibGtzaXplOwkgCgoKICAgIHVuc2lnbmVk IGxvbmcgaW50IHN0X2Jsb2NrczsJIAogICAgX190aW1lX3Qgc3RfYXRpbWU7CQkJIAogICAgdW5z aWduZWQgbG9uZyBpbnQgX191bnVzZWQxOwogICAgX190aW1lX3Qgc3RfbXRpbWU7CQkJIAogICAg dW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQyOwogICAgX190aW1lX3Qgc3RfY3RpbWU7CQkJIAog ICAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQzOwogICAgdW5zaWduZWQgbG9uZyBpbnQgX191 bnVzZWQ0OwogICAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQ1OwogIH07CgogCgoKCiAKCgoK CgoKIAoKCgogCgoKCgoKCgoKCiMgMzIgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAyIDMKCgoK CgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCgoKCgoKIAoK CgoKCgoKCgoKCiAKCgoKCgogCgoKCgogCgoKCgoKCgoKIApleHRlcm4gaW50IF9fc3RhdCAgKF9f Y29uc3QgY2hhciAqX19maWxlLCBzdHJ1Y3Qgc3RhdCAqX19idWYpICA7CmV4dGVybiBpbnQgc3Rh dCAgKF9fY29uc3QgY2hhciAqX19maWxlLCBzdHJ1Y3Qgc3RhdCAqX19idWYpICA7CgogCgpleHRl cm4gaW50IF9fZnN0YXQgIChpbnQgX19mZCwgc3RydWN0IHN0YXQgKl9fYnVmKSAgOwpleHRlcm4g aW50IGZzdGF0ICAoaW50IF9fZmQsIHN0cnVjdCBzdGF0ICpfX2J1ZikgIDsKCiAKCmV4dGVybiBp bnQgX19sc3RhdCAgKF9fY29uc3QgY2hhciAqX19maWxlLCBzdHJ1Y3Qgc3RhdCAqX19idWYpICA7 CgpleHRlcm4gaW50IGxzdGF0ICAoX19jb25zdCBjaGFyICpfX2ZpbGUsIHN0cnVjdCBzdGF0ICpf X2J1ZikgIDsKCgogCgoKZXh0ZXJuIGludCBfX2NobW9kICAoX19jb25zdCBjaGFyICpfX2ZpbGUs IF9fbW9kZV90IF9fbW9kZSkgIDsKZXh0ZXJuIGludCBjaG1vZCAgKF9fY29uc3QgY2hhciAqX19m aWxlLCBfX21vZGVfdCBfX21vZGUpICA7CgogCmV4dGVybiBpbnQgX19mY2htb2QgIChpbnQgX19m ZCwgX19tb2RlX3QgX19tb2RlKSAgOwoKZXh0ZXJuIGludCBmY2htb2QgIChpbnQgX19mZCwgX19t b2RlX3QgX19tb2RlKSAgOwoKCgogCgpleHRlcm4gX19tb2RlX3QgX191bWFzayAgKF9fbW9kZV90 IF9fbWFzaykgIDsKZXh0ZXJuIF9fbW9kZV90IHVtYXNrICAoX19tb2RlX3QgX19tYXNrKSAgOwoK CgoKCgoKIApleHRlcm4gaW50IF9fbWtkaXIgIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgX19tb2Rl X3QgX19tb2RlKSAgOwpleHRlcm4gaW50IG1rZGlyICAoX19jb25zdCBjaGFyICpfX3BhdGgsIF9f bW9kZV90IF9fbW9kZSkgIDsKCiAKCgpleHRlcm4gaW50IF9fbWtub2QgIChfX2NvbnN0IGNoYXIg Kl9fcGF0aCwKCQkJIF9fbW9kZV90IF9fbW9kZSwgX19kZXZfdCBfX2RldikgIDsKCmV4dGVybiBp bnQgbWtub2QgIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwKCQkgICAgICAgX19tb2RlX3QgX19tb2Rl LCBfX2Rldl90IF9fZGV2KSAgOwoKCgogCmV4dGVybiBpbnQgbWtmaWZvICAoX19jb25zdCBjaGFy ICpfX3BhdGgsIF9fbW9kZV90IF9fbW9kZSkgIDsKDAogCgoKCgoKCgoKCgoKCgoKCgoKCgoKIApl eHRlcm4gaW50IF9fZnhzdGF0ICAoaW50IF9fdmVyLCBpbnQgX19maWxkZXMsCgkJCSAgc3RydWN0 IHN0YXQgKl9fc3RhdF9idWYpICA7CmV4dGVybiBpbnQgX194c3RhdCAgKGludCBfX3ZlciwgX19j b25zdCBjaGFyICpfX2ZpbGVuYW1lLAoJCQkgc3RydWN0IHN0YXQgKl9fc3RhdF9idWYpICA7CmV4 dGVybiBpbnQgX19seHN0YXQgIChpbnQgX192ZXIsIF9fY29uc3QgY2hhciAqX19maWxlbmFtZSwK CQkJICBzdHJ1Y3Qgc3RhdCAqX19zdGF0X2J1ZikgIDsKZXh0ZXJuIGludCBfX3hta25vZCAgKGlu dCBfX3ZlciwgX19jb25zdCBjaGFyICpfX3BhdGgsCgkJCSAgX19tb2RlX3QgX19tb2RlLCBfX2Rl dl90ICpfX2RldikgIDsKCgogCgpleHRlcm4gX19pbmxpbmVfXyBpbnQgX19zdGF0IChfX2NvbnN0 IGNoYXIgKl9fcGF0aCwgc3RydWN0IHN0YXQgKl9fc3RhdGJ1ZikKeyByZXR1cm4gX194c3RhdCAo MyAgLCBfX3BhdGgsIF9fc3RhdGJ1Zik7IH0KZXh0ZXJuIF9faW5saW5lX18gaW50IHN0YXQgKF9f Y29uc3QgY2hhciAqX19wYXRoLCBzdHJ1Y3Qgc3RhdCAqX19zdGF0YnVmKQp7IHJldHVybiBfX3hz dGF0ICgzICAsIF9fcGF0aCwgX19zdGF0YnVmKTsgfQoKZXh0ZXJuIF9faW5saW5lX18gaW50IF9f bHN0YXQoX19jb25zdCBjaGFyICpfX3BhdGgsIHN0cnVjdCBzdGF0ICpfX3N0YXRidWYpCnsgcmV0 dXJuIF9fbHhzdGF0ICgzICAsIF9fcGF0aCwgX19zdGF0YnVmKTsgfQoKZXh0ZXJuIF9faW5saW5l X18gaW50IGxzdGF0KF9fY29uc3QgY2hhciAqX19wYXRoLCBzdHJ1Y3Qgc3RhdCAqX19zdGF0YnVm KQp7IHJldHVybiBfX2x4c3RhdCAoMyAgLCBfX3BhdGgsIF9fc3RhdGJ1Zik7IH0KCgpleHRlcm4g X19pbmxpbmVfXyBpbnQgX19mc3RhdCAoaW50IF9fZmQsIHN0cnVjdCBzdGF0ICpfX3N0YXRidWYp CnsgcmV0dXJuIF9fZnhzdGF0ICgzICAsIF9fZmQsIF9fc3RhdGJ1Zik7IH0KZXh0ZXJuIF9faW5s aW5lX18gaW50IGZzdGF0IChpbnQgX19mZCwgc3RydWN0IHN0YXQgKl9fc3RhdGJ1ZikKeyByZXR1 cm4gX19meHN0YXQgKDMgICwgX19mZCwgX19zdGF0YnVmKTsgfQoKZXh0ZXJuIF9faW5saW5lX18g aW50IF9fbWtub2QgKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX21vZGVfdCBfX21vZGUsCgkJCSAg ICAgICBfX2Rldl90IF9fZGV2KQp7IHJldHVybiBfX3hta25vZCAoMSAgLCBfX3BhdGgsIF9fbW9k ZSwgJl9fZGV2KTsgfQoKZXh0ZXJuIF9faW5saW5lX18gaW50IG1rbm9kIChfX2NvbnN0IGNoYXIg Kl9fcGF0aCwgX19tb2RlX3QgX19tb2RlLAoJCQkgICAgIF9fZGV2X3QgX19kZXYpCnsgcmV0dXJu IF9feG1rbm9kICgxICAsIF9fcGF0aCwgX19tb2RlLCAmX19kZXYpOyB9CgoKCgogCgoKCiMgMjMg Ii4uL2twYXRoc2VhL2Mtc3RhdC5oIiAyCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCiMgNTkgInNwZWNpYWwuYyIgMgoKIyAxICIuLi9rcGF0aHNlYS9saW5lLmgiIDEKIAoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKZXh0ZXJuICAgc3RyaW5nIHJlYWRfbGluZSAoIEZJ TEUgKmYgKSA7CgoKIyA2MCAic3BlY2lhbC5jIiAyCgojIDEgIi4uL2twYXRoc2VhL3RleC1maWxl LmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCmV4dGVybiBjb25zdF9zdHJpbmcga3Bz ZV9mYWxsYmFja19mb250OwoKCiAKCgpleHRlcm4gICBjb25zdF9zdHJpbmcga3BzZV9mYWxsYmFj a19yZXNvbHV0aW9uc19zdHJpbmc7CgogCgpleHRlcm4gdW5zaWduZWQgKmtwc2VfZmFsbGJhY2tf cmVzb2x1dGlvbnM7CgogCgoKZXh0ZXJuIHZvaWQga3BzZV9pbml0X2ZhbGxiYWNrX3Jlc29sdXRp b25zICggc3RyaW5nIGVudnZhciApIDsKDAogCgoKdHlwZWRlZiBlbnVtCnsKICBrcHNlX2dmX2Zv cm1hdCwKICBrcHNlX3BrX2Zvcm1hdCwKICBrcHNlX2FueV9nbHlwaF9mb3JtYXQsCSAKICBrcHNl X3RmbV9mb3JtYXQsIAogIGtwc2VfYWZtX2Zvcm1hdCwgCiAga3BzZV9iYXNlX2Zvcm1hdCwgCiAg a3BzZV9iaWJfZm9ybWF0LCAKICBrcHNlX2JzdF9mb3JtYXQsIAogIGtwc2VfY25mX2Zvcm1hdCwK ICBrcHNlX2RiX2Zvcm1hdCwKICBrcHNlX2ZtdF9mb3JtYXQsCiAga3BzZV9mb250bWFwX2Zvcm1h dCwKICBrcHNlX21lbV9mb3JtYXQsCiAga3BzZV9tZl9mb3JtYXQsIAogIGtwc2VfbWZwb29sX2Zv cm1hdCwgCiAga3BzZV9tZnRfZm9ybWF0LCAKICBrcHNlX21wX2Zvcm1hdCwgCiAga3BzZV9tcHBv b2xfZm9ybWF0LCAKICBrcHNlX21wc3VwcG9ydF9mb3JtYXQsCiAga3BzZV9vY3BfZm9ybWF0LAog IGtwc2Vfb2ZtX2Zvcm1hdCwgCiAga3BzZV9vcGxfZm9ybWF0LAogIGtwc2Vfb3RwX2Zvcm1hdCwK ICBrcHNlX292Zl9mb3JtYXQsCiAga3BzZV9vdnBfZm9ybWF0LAogIGtwc2VfcGljdF9mb3JtYXQs CiAga3BzZV90ZXhfZm9ybWF0LAogIGtwc2VfdGV4ZG9jX2Zvcm1hdCwKICBrcHNlX3RleHBvb2xf Zm9ybWF0LAogIGtwc2VfdGV4c291cmNlX2Zvcm1hdCwKICBrcHNlX3RleF9wc19oZWFkZXJfZm9y bWF0LAogIGtwc2VfdHJvZmZfZm9udF9mb3JtYXQsCiAga3BzZV90eXBlMV9mb3JtYXQsIAogIGtw c2VfdmZfZm9ybWF0LAogIGtwc2VfZHZpcHNfY29uZmlnX2Zvcm1hdCwKICBrcHNlX2lzdF9mb3Jt YXQsCiAga3BzZV90cnVldHlwZV9mb3JtYXQsCiAga3BzZV90eXBlNDJfZm9ybWF0LAogIGtwc2Vf d2ViMmNfZm9ybWF0LAogIGtwc2VfcHJvZ3JhbV90ZXh0X2Zvcm1hdCwKICBrcHNlX3Byb2dyYW1f YmluYXJ5X2Zvcm1hdCwKICBrcHNlX2xhc3RfZm9ybWF0ICAKfSBrcHNlX2ZpbGVfZm9ybWF0X3R5 cGU7CgoKIAoKdHlwZWRlZiBlbnVtCnsKICBrcHNlX3NyY19pbXBsaWNpdCwgICAgCiAga3BzZV9z cmNfY29tcGlsZSwgICAgIAogIGtwc2Vfc3JjX3RleG1mX2NuZiwgICAKICBrcHNlX3NyY19jbGll bnRfY25mLCAgCiAga3BzZV9zcmNfZW52LCAgICAgICAgIAogIGtwc2Vfc3JjX3gsICAgICAgICAg ICAKICBrcHNlX3NyY19jbWRsaW5lICAgICAgCn0ga3BzZV9zcmNfdHlwZTsKCgogCgoKCgoKCnR5 cGVkZWYgc3RydWN0CnsKICBjb25zdF9zdHJpbmcgdHlwZTsJCSAKICBjb25zdF9zdHJpbmcgcGF0 aDsJCSAKICBjb25zdF9zdHJpbmcgcmF3X3BhdGg7CSAKICBjb25zdF9zdHJpbmcgcGF0aF9zb3Vy Y2U7CSAKICBjb25zdF9zdHJpbmcgb3ZlcnJpZGVfcGF0aDsJIAogIGNvbnN0X3N0cmluZyBjbGll bnRfcGF0aDsJIAogIGNvbnN0X3N0cmluZyBjbmZfcGF0aDsJIAogIGNvbnN0X3N0cmluZyBkZWZh dWx0X3BhdGg7CSAKICBjb25zdF9zdHJpbmcgKnN1ZmZpeDsJCSAKICBjb25zdF9zdHJpbmcgKmFs dF9zdWZmaXg7CSAKICBib29sZWFuIHN1ZmZpeF9zZWFyY2hfb25seTsJIAogIGNvbnN0X3N0cmlu ZyBwcm9ncmFtOwkJIAogIGNvbnN0X3N0cmluZyBwcm9ncmFtX2FyZ3M7CSAKICBib29sZWFuIHBy b2dyYW1fZW5hYmxlZF9wOwkgCiAga3BzZV9zcmNfdHlwZSBwcm9ncmFtX2VuYWJsZV9sZXZlbDsg IAogIGJvb2xlYW4gYmlubW9kZTsgICAgICAgICAgICAgICAKfSBrcHNlX2Zvcm1hdF9pbmZvX3R5 cGU7CgogCgpleHRlcm4gICBrcHNlX2Zvcm1hdF9pbmZvX3R5cGUga3BzZV9mb3JtYXRfaW5mb1tr cHNlX2xhc3RfZm9ybWF0XTsKCgogCgpleHRlcm4gICB2b2lkIGtwc2Vfc2V0X3Byb2dyYW1fZW5h YmxlZCAoIGtwc2VfZmlsZV9mb3JtYXRfdHlwZSBmbXQgLCAgCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiB2YWx1ZSAsICAga3BzZV9zcmNfdHlwZSBsZXZl bCApIDsKIAoKZXh0ZXJuICAgdm9pZCBrcHNlX21ha2V0ZXhfb3B0aW9uICggY29uc3Rfc3RyaW5n IGZtdG5hbWUgLCAgICBib29sZWFuIHZhbHVlICkgOwoKIAoKCmV4dGVybiAgIGNvbnN0X3N0cmlu ZyBrcHNlX2luaXRfZm9ybWF0ICgga3BzZV9maWxlX2Zvcm1hdF90eXBlICkgOwoKIAoKCmV4dGVy biAgIHN0cmluZyBrcHNlX2ZpbmRfZmlsZSAoIGNvbnN0X3N0cmluZyBuYW1lICwgICAgCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBrcHNlX2ZpbGVfZm9ybWF0X3R5cGUgZm9ybWF0ICwgICAg Ym9vbGVhbiBtdXN0X2V4aXN0ICkgOwoKIAoKCgoKCgoKIAoKCgoKCiAKZXh0ZXJuICAgRklMRSAq a3BzZV9vcGVuX2ZpbGUgKCBjb25zdF9zdHJpbmcgLCAgIGtwc2VfZmlsZV9mb3JtYXRfdHlwZSAp IDsKCiAKCgoKZXh0ZXJuICAgdm9pZCBrcHNlX3Jlc2V0X3Byb2dyYW1fbmFtZSAoIGNvbnN0X3N0 cmluZyBwcm9nbmFtZSApIDsKCgojIDYxICJzcGVjaWFsLmMiIDIKCgoKCgoKCgoKIyAxICIvdXNy L2luY2x1ZGUvc3lzL3dhaXQuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKIAoK CgogCgojIDEgIi91c3IvaW5jbHVkZS93YWl0ZmxhZ3MuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCiAKCgoKCgoKIyAzNCAiL3Vzci9pbmNsdWRlL3N5cy93YWl0LmgiIDIgMwoKCgoKIAoK CgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKIyA3MSAiL3Vzci9pbmNsdWRlL3N5cy93YWl0LmgiIDMK CgoKCgoKCgoKCiAKIyAxICIvdXNyL2luY2x1ZGUvd2FpdHN0YXR1cy5oIiAxIDMKIAoKCgoKCgoK CgoKCgoKCgoKCgogCgoKCgogCgoKIAoKCiAKCgogCgoKIAoKCgoKCgoKCiAKCgogCgoKIAoKCgoK CgoKCgp1bmlvbiB3YWl0CiAgewogICAgaW50IHdfc3RhdHVzOwogICAgc3RydWN0CiAgICAgIHsK Cgl1bnNpZ25lZCBpbnQgX193X3Rlcm1zaWc6NzsgIAoJdW5zaWduZWQgaW50IF9fd19jb3JlZHVt cDoxOyAgCgl1bnNpZ25lZCBpbnQgX193X3JldGNvZGU6ODsgIAoJdW5zaWduZWQgaW50OjE2OwoK CgoKCgoKICAgICAgfSBfX3dhaXRfdGVybWluYXRlZDsKICAgIHN0cnVjdAogICAgICB7CgoJdW5z aWduZWQgaW50IF9fd19zdG9wdmFsOjg7ICAKCXVuc2lnbmVkIGludCBfX3dfc3RvcHNpZzo4OyAg Cgl1bnNpZ25lZCBpbnQ6MTY7CgoKCgoKCiAgICAgIH0gX193YWl0X3N0b3BwZWQ7CiAgfTsKCgoK CgoKCgoKCgojIDgyICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMiAzCgoKCgoKCgoKCgoKCgoK CgoKIAoKZXh0ZXJuIF9fcGlkX3QgX193YWl0ICAodm9pZCAqICAgX19zdGF0X2xvYykgIDsKZXh0 ZXJuIF9fcGlkX3Qgd2FpdCAgKHZvaWQgKiAgIF9fc3RhdF9sb2MpICA7CgoKIAoKCgoKIAoKCgoK CgoKCgoKCmV4dGVybiBfX3BpZF90IF9fd2FpdHBpZCAgKF9fcGlkX3QgX19waWQsIGludCAqX19z dGF0X2xvYywKCQkJICAgICAgIGludCBfX29wdGlvbnMpICA7CmV4dGVybiBfX3BpZF90IHdhaXRw aWQgIChfX3BpZF90IF9fcGlkLCBpbnQgKl9fc3RhdF9sb2MsCgkJCSAgICAgaW50IF9fb3B0aW9u cykgIDsKCgogCgpzdHJ1Y3QgcnVzYWdlOwoKIAoKCgoKZXh0ZXJuIF9fcGlkX3QgX193YWl0MyAg KHZvaWQgKiAgIF9fc3RhdF9sb2MsCgkJCSAgICAgaW50IF9fb3B0aW9ucywgc3RydWN0IHJ1c2Fn ZSAqIF9fdXNhZ2UpICA7CmV4dGVybiBfX3BpZF90IHdhaXQzICAodm9pZCAqICAgX19zdGF0X2xv YywKCQkJICAgaW50IF9fb3B0aW9ucywgc3RydWN0IHJ1c2FnZSAqIF9fdXNhZ2UpICA7CgoKCiAK CnN0cnVjdCBydXNhZ2U7CgogCmV4dGVybiBfX3BpZF90IF9fd2FpdDQgIChfX3BpZF90IF9fcGlk LCB2b2lkICogICBfX3N0YXRfbG9jLAoJCQkgICAgIGludCBfX29wdGlvbnMsIHN0cnVjdCBydXNh Z2UgKl9fdXNhZ2UpICA7CmV4dGVybiBfX3BpZF90IHdhaXQ0ICAoX19waWRfdCBfX3BpZCwgdm9p ZCAqICAgX19zdGF0X2xvYywKCQkJICAgaW50IF9fb3B0aW9ucywgc3RydWN0IHJ1c2FnZSAqX191 c2FnZSkgIDsKCgoKIAoKCiMgNzAgInNwZWNpYWwuYyIgMgoKCgoKCgoKCgoKCgoKZXh0ZXJuCWRv dWJsZQlmbG9vciAgKGRvdWJsZSkgIDsKCgpzdGF0aWMJaW50CXh4WzMwMCBdLCB5eVszMDAgXTsJ IApzdGF0aWMJaW50CXBhdGhfbGVuID0gMDsJIApzdGF0aWMJaW50CXBlbl9zaXplID0gMTsJIAoK c3RhdGljCUJvb2xlYW4Jd2hpdGVuID0gMCA7CnN0YXRpYwlCb29sZWFuCXNoYWRlID0gMCA7CnN0 YXRpYwlCb29sZWFuCWJsYWNrZW4gPSAwIDsKCiAKCgoKCgoKCiAKCgoKc3RhdGljCXZvaWQKV2Fy bmluZyhmbXQsIG1zZykKCWNoYXIJKmZtdCwgKm1zZzsKewoJKHZvaWQpIGZwcmludGYgKCgoX0lP X0ZJTEUqKSgmX0lPX3N0ZGVycl8pKSAgLCAiJXM6ICIsIHByb2cpOwoJKHZvaWQpIGZwcmludGYg KCgoX0lPX0ZJTEUqKSgmX0lPX3N0ZGVycl8pKSAgLCBmbXQsIG1zZyk7Cgkodm9pZCkgZnB1dGMo J1xuJywgKChfSU9fRklMRSopKCZfSU9fc3RkZXJyXykpICApOwp9CgoKIAoKCgoKCgoKIAoKCgpz dGF0aWMJdm9pZApsaW5lX2J0dyhmeCwgZnksIHR4LCB0eSkKaW50IGZ4LCBmeSwgdHgsIHR5Owp7 CglyZWdpc3RlciBpbnQJZmN4ID0gKCgoaW50KSAoKCB0cGljX2NvbnYqKCBmeCApICkgKyAwLjUp KSAvIGN1cnJ3aW4uc2hyaW5rZmFjdG9yICArICgoaW50KSAoKCBjdXJyaW5mLmRhdGEuZHZpX2gg KSAvIGN1cnJ3aW4uc2hyaW5rZmFjdG9yICA+PiAxNikpICApICwKCQkJdGN4ID0gKCgoaW50KSAo KCB0cGljX2NvbnYqKCB0eCApICkgKyAwLjUpKSAvIGN1cnJ3aW4uc2hyaW5rZmFjdG9yICArICgo aW50KSAoKCBjdXJyaW5mLmRhdGEuZHZpX2ggKSAvIGN1cnJ3aW4uc2hyaW5rZmFjdG9yICA+PiAx NikpICApICwKCQkJZmN5ID0gKCgoaW50KSAoKCB0cGljX2NvbnYqKCBmeSApICkgKyAwLjUpKSAv IGN1cnJ3aW4uc2hyaW5rZmFjdG9yICArIGN1cnJpbmYuZGF0YS5weGxfdiApICwKCQkJdGN5ID0g KCgoaW50KSAoKCB0cGljX2NvbnYqKCB0eSApICkgKyAwLjUpKSAvIGN1cnJ3aW4uc2hyaW5rZmFj dG9yICArIGN1cnJpbmYuZGF0YS5weGxfdiApIDsKCglpZiAoKGZjeCA8IG1heF94IHx8IHRjeCA8 IG1heF94KSAmJiAoZmN4ID49IG1pbl94IHx8IHRjeCA+PSBtaW5feCkgJiYKCSAgICAoZmN5IDwg bWF4X3kgfHwgdGN5IDwgbWF4X3kpICYmIChmY3kgPj0gbWluX3kgfHwgdGN5ID49IG1pbl95KSkK CQlYRHJhd0xpbmUoRElTUCwgY3Vycndpbi53aW4sIHJ1bGVHQywKCQkgICAgZmN4IC0gY3Vycndp bi5iYXNlX3gsIGZjeSAtIGN1cnJ3aW4uYmFzZV95LAoJCSAgICB0Y3ggLSBjdXJyd2luLmJhc2Vf eCwgdGN5IC0gY3Vycndpbi5iYXNlX3kpOwp9CgogCgoKc3RhdGljCXZvaWQKZG90X2F0KHgsIHkp CglpbnQJeCwgeTsKewoJcmVnaXN0ZXIgaW50CWN4ID0gKCgoaW50KSAoKCB0cGljX2NvbnYqKCB4 ICkgKSArIDAuNSkpIC8gY3Vycndpbi5zaHJpbmtmYWN0b3IgICsgKChpbnQpICgoIGN1cnJpbmYu ZGF0YS5kdmlfaCApIC8gY3Vycndpbi5zaHJpbmtmYWN0b3IgID4+IDE2KSkgICkgLAoJCQljeSA9 ICgoKGludCkgKCggdHBpY19jb252KiggeSApICkgKyAwLjUpKSAvIGN1cnJ3aW4uc2hyaW5rZmFj dG9yICArIGN1cnJpbmYuZGF0YS5weGxfdiApIDsKCglpZiAoY3ggPCBtYXhfeCAmJiBjeCA+PSBt aW5feCAmJiBjeSA8IG1heF95ICYmIGN5ID49IG1pbl95KQoJICAgIFhEcmF3UG9pbnQoRElTUCwg Y3Vycndpbi53aW4sIHJ1bGVHQywKCQljeCAtIGN1cnJ3aW4uYmFzZV94LCBjeSAtIGN1cnJ3aW4u YmFzZV95KTsKfQoKIAoKCgoKCSAKc3RhdGljCXZvaWQKZG9fYXR0cmlidXRlX3BhdGgobGFzdF9t aW5feCwgbGFzdF9tYXhfeCwgbGFzdF9taW5feSwgbGFzdF9tYXhfeSkKaW50IGxhc3RfbWluX3gs IGxhc3RfbWF4X3gsIGxhc3RfbWluX3ksIGxhc3RfbWF4X3k7CnsKfQoKIAoKCgogCnN0YXRpYwl2 b2lkCnNldF9wZW5fc2l6ZShjcCkKCWNoYXIJKmNwOwp7CglpbnQJcHM7CgoJaWYgKHNzY2FuZihj cCwgIiAlZCAiLCAmcHMpICE9IDEpIHsKCSAgICBXYXJuaW5nKCJpbnZhbGlkIC5wcyBjb21tYW5k IGZvcm1hdDogJXMiLCBjcCk7CgkgICAgcmV0dXJuOwoJfQoJcGVuX3NpemUgPSAocHMgKiAoKHJl c291cmNlLl9waXhlbHNfcGVyX2luY2ggLyBjdXJyd2luLnNocmlua2ZhY3RvciApICArIChyZXNv dXJjZS5fcGl4ZWxzX3Blcl9pbmNoIC8gY3Vycndpbi5zaHJpbmtmYWN0b3IgKSApICsgMTAwMCkg LyAyMDAwOwoJaWYgKHBlbl9zaXplIDwgMSkgcGVuX3NpemUgPSAxOwoJZWxzZSBpZiAocGVuX3Np emUgPiA3ICkgcGVuX3NpemUgPSA3IDsKfQoKCiAKCgoKc3RhdGljCXZvaWQKZmx1c2hfcGF0aCgp CnsKCXJlZ2lzdGVyIGludCBpOwoJaW50CWxhc3RfbWluX3gsIGxhc3RfbWF4X3gsIGxhc3RfbWlu X3ksIGxhc3RfbWF4X3k7CgoJbGFzdF9taW5feCA9IDMwMDAwOwoJbGFzdF9taW5feSA9IDMwMDAw OwoJbGFzdF9tYXhfeCA9IC0zMDAwMDsKCWxhc3RfbWF4X3kgPSAtMzAwMDA7Cglmb3IgKGkgPSAx OyBpIDwgcGF0aF9sZW47IGkrKykgewoJICAgIGlmICh4eFtpXSA+IGxhc3RfbWF4X3gpIGxhc3Rf bWF4X3ggPSB4eFtpXTsKCSAgICBpZiAoeHhbaV0gPCBsYXN0X21pbl94KSBsYXN0X21pbl94ID0g eHhbaV07CgkgICAgaWYgKHl5W2ldID4gbGFzdF9tYXhfeSkgbGFzdF9tYXhfeSA9IHl5W2ldOwoJ ICAgIGlmICh5eVtpXSA8IGxhc3RfbWluX3kpIGxhc3RfbWluX3kgPSB5eVtpXTsKCSAgICBsaW5l X2J0dyh4eFtpXSwgeXlbaV0sIHh4W2krMV0sIHl5W2krMV0pOwoJfQoJaWYgKHh4W3BhdGhfbGVu XSA+IGxhc3RfbWF4X3gpIGxhc3RfbWF4X3ggPSB4eFtwYXRoX2xlbl07CglpZiAoeHhbcGF0aF9s ZW5dIDwgbGFzdF9taW5feCkgbGFzdF9taW5feCA9IHh4W3BhdGhfbGVuXTsKCWlmICh5eVtwYXRo X2xlbl0gPiBsYXN0X21heF95KSBsYXN0X21heF95ID0geXlbcGF0aF9sZW5dOwoJaWYgKHl5W3Bh dGhfbGVuXSA8IGxhc3RfbWluX3kpIGxhc3RfbWluX3kgPSB5eVtwYXRoX2xlbl07CglwYXRoX2xl biA9IDA7Cglkb19hdHRyaWJ1dGVfcGF0aChsYXN0X21pbl94LCBsYXN0X21heF94LCBsYXN0X21p bl95LCBsYXN0X21heF95KTsKfQoKCiAKCgoKCnN0YXRpYwl2b2lkCmZsdXNoX2Rhc2hlZChjcCwg ZG90dGVkKQoJY2hhcgkqY3A7CglCb29sZWFuCWRvdHRlZDsKewoJaW50CWk7CglpbnQJbnVtZG90 czsKCWludAlseDAsIGx5MCwgbHgxLCBseTE7CglpbnQJY3gwLCBjeTAsIGN4MSwgY3kxOwoJZmxv YXQJaW5jaGVzcGVyZGFzaDsKCWRvdWJsZQlkLCBzcGFjZXNpemUsIGEsIGIsIGR4LCBkeSwgbWls bGlwZXJkYXNoOwoKCWlmIChzc2NhbmYoY3AsICIgJWYgIiwgJmluY2hlc3BlcmRhc2gpICE9IDEp IHsKCSAgICBXYXJuaW5nKCJpbnZhbGlkIGZvcm1hdCBmb3IgZG90dGVkL2Rhc2hlZCBsaW5lOiAl cyIsIGNwKTsKCSAgICByZXR1cm47Cgl9CglpZiAocGF0aF9sZW4gPD0gMSB8fCBpbmNoZXNwZXJk YXNoIDw9IDAuMCkgewoJICAgIFdhcm5pbmcoImludmFsaWQgY29uZGl0aW9ucyBmb3IgZG90dGVk L2Rhc2hlZCBsaW5lIiwgIiIpOwoJICAgIHJldHVybjsKCX0KCW1pbGxpcGVyZGFzaCA9IGluY2hl c3BlcmRhc2ggKiAxMDAwLjA7CglseDAgPSB4eFsxXTsJbHkwID0geXlbMV07CglseDEgPSB4eFsy XTsJbHkxID0geXlbMl07CglkeCA9IGx4MSAtIGx4MDsKCWR5ID0gbHkxIC0gbHkwOwoJaWYgKGRv dHRlZCkgewoJICAgIG51bWRvdHMgPSBzcXJ0KGR4KmR4ICsgZHkqZHkpIC8gbWlsbGlwZXJkYXNo ICsgMC41OwoJICAgIGlmIChudW1kb3RzID09IDApIG51bWRvdHMgPSAxOwoJICAgIGZvciAoaSA9 IDA7IGkgPD0gbnVtZG90czsgaSsrKSB7CgkJYSA9IChmbG9hdCkgaSAvIChmbG9hdCkgbnVtZG90 czsKCQljeDAgPSBseDAgKyBhICogZHggKyAwLjU7CgkJY3kwID0gbHkwICsgYSAqIGR5ICsgMC41 OwoJCWRvdF9hdChjeDAsIGN5MCk7CgkgICAgfQoJfQoJZWxzZSB7CgkgICAgZCA9IHNxcnQoZHgq ZHggKyBkeSpkeSk7CgkgICAgbnVtZG90cyA9IGQgLyAoMi4wICogbWlsbGlwZXJkYXNoKSArIDEu MDsKCSAgICBpZiAobnVtZG90cyA8PSAxKQoJCWxpbmVfYnR3KGx4MCwgbHkwLCBseDEsIGx5MSk7 CgkgICAgZWxzZSB7CgkJc3BhY2VzaXplID0gKGQgLSBudW1kb3RzICogbWlsbGlwZXJkYXNoKSAv IChudW1kb3RzIC0gMSk7CgkJZm9yIChpID0gMDsgaSA8IG51bWRvdHMgLSAxOyBpKyspIHsKCQkg ICAgYSA9IGkgKiAobWlsbGlwZXJkYXNoICsgc3BhY2VzaXplKSAvIGQ7CgkJICAgIGIgPSBhICsg bWlsbGlwZXJkYXNoIC8gZDsKCQkgICAgY3gwID0gbHgwICsgYSAqIGR4ICsgMC41OwoJCSAgICBj eTAgPSBseTAgKyBhICogZHkgKyAwLjU7CgkJICAgIGN4MSA9IGx4MCArIGIgKiBkeCArIDAuNTsK CQkgICAgY3kxID0gbHkwICsgYiAqIGR5ICsgMC41OwoJCSAgICBsaW5lX2J0dyhjeDAsIGN5MCwg Y3gxLCBjeTEpOwoJCSAgICBiICs9IHNwYWNlc2l6ZSAvIGQ7CgkJfQoJCWN4MCA9IGx4MCArIGIg KiBkeCArIDAuNTsKCQljeTAgPSBseTAgKyBiICogZHkgKyAwLjU7CgkJbGluZV9idHcoY3gwLCBj eTAsIGx4MSwgbHkxKTsKCSAgICB9Cgl9CglwYXRoX2xlbiA9IDA7Cn0KCgogCgoKCnN0YXRpYwl2 b2lkCmFkZF9wYXRoKGNwKQoJY2hhcgkqY3A7CnsKCWludAlwYXRoeCwgcGF0aHk7CgoJaWYgKCsr cGF0aF9sZW4gPj0gMzAwICkgb29wcygiVG9vIG1hbnkgcG9pbnRzIik7CglpZiAoc3NjYW5mKGNw LCAiICVkICVkICIsICZwYXRoeCwgJnBhdGh5KSAhPSAyKQoJICAgIG9vcHMoIk1hbGZvcm1lZCBw YXRoIGNvbW1hbmQiKTsKCXh4W3BhdGhfbGVuXSA9IHBhdGh4OwoJeXlbcGF0aF9sZW5dID0gcGF0 aHk7Cn0KCgogCgoKCnN0YXRpYyB2b2lkCmltX2ZkcmF3KHgsIHkpCglkb3VibGUJeCx5Owp7Cglp ZiAoKytwYXRoX2xlbiA+PSAzMDAgKSBvb3BzKCJUb28gbWFueSBhcmMgcG9pbnRzIik7Cgl4eFtw YXRoX2xlbl0gPSB4ICsgMC41OwoJeXlbcGF0aF9sZW5dID0geSArIDAuNTsKfQoKCiAKCgoKc3Rh dGljCXZvaWQKZHJhd19lbGxpcHNlKHhjLCB5YywgeHIsIHlyKQoJaW50CXhjLCB5YywgeHIsIHly Owp7Cglkb3VibGUJYW5nbGUsIHRoZXRhOwoJaW50CW47CglpbnQJcHgwLCBweTAsIHB4MSwgcHkx OwoKCWFuZ2xlID0gKHhyICsgeXIpIC8gMi4wOwoJdGhldGEgPSBzcXJ0KDEuMCAvIGFuZ2xlKTsK CW4gPSAoMy4xNDE1OTI2NTM1OSAqIDIuMCkgIC8gdGhldGEgKyAwLjU7CglpZiAobiA8IDEyKSBu ID0gMTI7CgllbHNlIGlmIChuID4gODApIG4gPSA4MDsKCW4gLz0gMjsKCXRoZXRhID0gKDMuMTQx NTkyNjUzNTkgKiAyLjApICAvIG47CgoJYW5nbGUgPSAwLjA7CglweDAgPSB4YyArIHhyOwkJIAoJ cHkwID0geWM7CQkgCgl3aGlsZSAoKGFuZ2xlICs9IHRoZXRhKSA8PSAoMy4xNDE1OTI2NTM1OSAq IDIuMCkgKSB7CgkgICAgcHgxID0geGMgKyB4cipjb3MoYW5nbGUpICsgMC41OwoJICAgIHB5MSA9 IHljICsgeXIqc2luKGFuZ2xlKSArIDAuNTsKCSAgICBsaW5lX2J0dyhweDAsIHB5MCwgcHgxLCBw eTEpOwoJICAgIHB4MCA9IHB4MTsKCSAgICBweTAgPSBweTE7Cgl9CglsaW5lX2J0dyhweDAsIHB5 MCwgeGMgKyB4ciwgeWMpOwp9CgogCgoKCnN0YXRpYwl2b2lkCmFyYyhjcCwgaW52aXMpCgljaGFy CSpjcDsKCUJvb2xlYW4JaW52aXM7CnsKCWludAl4YywgeWMsIHhyYWQsIHlyYWQsIG47CglmbG9h dAlzdGFydF9hbmdsZSwgZW5kX2FuZ2xlLCBhbmdsZSwgdGhldGEsIHI7Cglkb3VibGUJeHJhZGl1 cywgeXJhZGl1cywgeGNlbnRlciwgeWNlbnRlcjsKCglpZiAoc3NjYW5mKGNwLCAiICVkICVkICVk ICVkICVmICVmICIsICZ4YywgJnljLCAmeHJhZCwgJnlyYWQsCgkJJnN0YXJ0X2FuZ2xlLCAmZW5k X2FuZ2xlKSAhPSA2KSB7CgkgICAgV2FybmluZygiaW52YWxpZCBhcmMgc3BlY2lmaWNhdGlvbjog JXMiLCBjcCk7CgkgICAgcmV0dXJuOwoJfQoKCWlmIChpbnZpcykgcmV0dXJuOwoKCSAKCWlmIChz dGFydF9hbmdsZSA8PSAwLjAgJiYgZW5kX2FuZ2xlID49IDYuMjgyKSB7CgkgICAgZHJhd19lbGxp cHNlKHhjLCB5YywgeHJhZCwgeXJhZCk7CgkgICAgcmV0dXJuOwoJfQoJeGNlbnRlciA9IHhjOwoJ eWNlbnRlciA9IHljOwoJeHJhZGl1cyA9IHhyYWQ7Cgl5cmFkaXVzID0geXJhZDsKCXIgPSAoeHJh ZGl1cyArIHlyYWRpdXMpIC8gMi4wOwoJdGhldGEgPSBzcXJ0KDEuMCAvIHIpOwoJbiA9IDAuMyAq ICgzLjE0MTU5MjY1MzU5ICogMi4wKSAgLyB0aGV0YSArIDAuNTsKCWlmIChuIDwgMTIpIG4gPSAx MjsKCWVsc2UgaWYgKG4gPiA4MCkgbiA9IDgwOwoJbiAvPSAyOwoJdGhldGEgPSAoMy4xNDE1OTI2 NTM1OSAqIDIuMCkgIC8gbjsKCWZsdXNoX3BhdGgoKTsKCWltX2ZkcmF3KHhjZW50ZXIgKyB4cmFk aXVzICogY29zKHN0YXJ0X2FuZ2xlKSwKCSAgICB5Y2VudGVyICsgeXJhZGl1cyAqIHNpbihzdGFy dF9hbmdsZSkpOwoJYW5nbGUgPSBzdGFydF9hbmdsZSArIHRoZXRhOwoJaWYgKGVuZF9hbmdsZSA8 IHN0YXJ0X2FuZ2xlKSBlbmRfYW5nbGUgKz0gKDMuMTQxNTkyNjUzNTkgKiAyLjApIDsKCXdoaWxl IChhbmdsZSA8IGVuZF9hbmdsZSkgewoJICAgIGltX2ZkcmF3KHhjZW50ZXIgKyB4cmFkaXVzICog Y29zKGFuZ2xlKSwKCQl5Y2VudGVyICsgeXJhZGl1cyAqIHNpbihhbmdsZSkpOwoJICAgIGFuZ2xl ICs9IHRoZXRhOwoJfQoJaW1fZmRyYXcoeGNlbnRlciArIHhyYWRpdXMgKiBjb3MoZW5kX2FuZ2xl KSwKCSAgICB5Y2VudGVyICsgeXJhZGl1cyAqIHNpbihlbmRfYW5nbGUpKTsKCWZsdXNoX3BhdGgo KTsKfQoKCiAKCgoKCgoKIAoKCgpzdGF0aWMJdm9pZApmbHVzaF9zcGxpbmUoKQp7CglpbnQJeHAs IHlwOwoJaW50CU47CglpbnQJbGFzdHgsIGxhc3R5OwoJQm9vbGVhbglsYXN0dmFsaWQgPSAwIDsK CWludAl0MSwgdDIsIHQzOwoJaW50CXN0ZXBzOwoJaW50CWo7CglyZWdpc3RlciBpbnQgaSwgdzsK CgoKCglOID0gcGF0aF9sZW4gKyAxOwoJeHhbMF0gPSB4eFsxXTsKCXl5WzBdID0geXlbMV07Cgl4 eFtOXSA9IHh4W04tMV07Cgl5eVtOXSA9IHl5W04tMV07Cglmb3IgKGkgPSAwOyBpIDwgTiAtIDE7 IGkrKykgewkgCgkgICAgc3RlcHMgPSAoKGFicyggeHhbaV0gIC0gICB4eFtpKzFdICkgKyBhYnMo ICB5eVtpXSAgLSAgIHl5W2krMV0gKSkgICsKCQkoYWJzKCB4eFtpKzFdICAtICAgeHhbaSsyXSAp ICsgYWJzKCAgeXlbaSsxXSAgLSAgIHl5W2krMl0gKSkgKSAvIDgwOwoJICAgIGZvciAoaiA9IDA7 IGogPCBzdGVwczsgaisrKSB7CSAKCQl3ID0gKGogKiAxMDAwICsgNTAwKSAvIHN0ZXBzOwoJCXQx ID0gdyAqIHcgLyAyMDsKCQl3IC09IDUwMDsKCQl0MiA9ICg3NTAwMDAgLSB3ICogdykgLyAxMDsK CQl3IC09IDUwMDsKCQl0MyA9IHcgKiB3IC8gMjA7CgkJeHAgPSAodDEqeHhbaSsyXSArIHQyKnh4 W2krMV0gKyB0Myp4eFtpXSArIDUwMDAwKSAvIDEwMDAwMDsKCQl5cCA9ICh0MSp5eVtpKzJdICsg dDIqeXlbaSsxXSArIHQzKnl5W2ldICsgNTAwMDApIC8gMTAwMDAwOwoJCWlmIChsYXN0dmFsaWQp IGxpbmVfYnR3KGxhc3R4LCBsYXN0eSwgeHAsIHlwKTsKCQlsYXN0eCA9IHhwOwoJCWxhc3R5ID0g eXA7CgkJbGFzdHZhbGlkID0gMSA7CgkgICAgfQoJfQoJcGF0aF9sZW4gPSAwOwp9CgoKIAoKCgpz dGF0aWMJdm9pZApzaGFkZV9sYXN0KCkKewoJYmxhY2tlbiA9IHdoaXRlbiA9IDAgOwoJc2hhZGUg PSAxIDsKfQoKCiAKCgoKc3RhdGljCXZvaWQKd2hpdGVuX2xhc3QoKQp7Cgl3aGl0ZW4gPSAxIDsK CWJsYWNrZW4gPSBzaGFkZSA9IDAgOwp9CgoKIAoKCgpzdGF0aWMJdm9pZApibGFja2VuX2xhc3Qo KQp7CglibGFja2VuID0gMSA7Cgl3aGl0ZW4gPSBzaGFkZSA9IDAgOwp9CgoKIAoKCgoKCiAKCgoK c3RhdGljCWNvbnN0IAljaGFyCW5vX2Zfc3RyX3BzW10JPSAiLyVmIjsKCnN0YXRpYwl2b2lkCXBz X3N0YXJ0dXAgIChpbnQsIGludCwgY29uc3QgIGNoYXIgKikgIDsKc3RhdGljCXZvaWQJcHNfc3Rh cnR1cDIgICh2b2lkKSAgOwp2b2lkCU51bGxQcm9jICAodm9pZCkgICB7fQogCnN0YXRpYwl2b2lk CU51bGxQcm9jMiAgKGNvbnN0ICBjaGFyICopICA7CgpzdHJ1Y3QgcHNwcm9jcwlwc3AgPSB7CQkg CgkgCQlOdWxsUHJvYywKCSAJCU51bGxQcm9jLAoJIAkJTnVsbFByb2MsCgkgCQlOdWxsUHJvYywK CSAJCXBzX3N0YXJ0dXAsCgkgCQlOdWxsUHJvYzIsCgkgCQkoKHZvaWQgKikwKSAsCgkgCQlOdWxs UHJvYzIsCgkgCXBzX3N0YXJ0dXAyLAoJIAkJTnVsbFByb2MsCgkgCQlOdWxsUHJvY307CgpzdHJ1 Y3QgcHNwcm9jcwlub19wc19wcm9jcyA9IHsJCSAKCSAJCU51bGxQcm9jLAoJIAkJTnVsbFByb2Ms CgkgCQlOdWxsUHJvYywKCSAJCU51bGxQcm9jLAoJIAkJZHJhd2JlZ2luX25vbmUsCgkgCQlOdWxs UHJvYzIsCgkgCQkoKHZvaWQgKikwKSAsCgkgCQlOdWxsUHJvYzIsCgkgCU51bGxQcm9jLAoJIAkJ TnVsbFByb2MsCgkgCQlOdWxsUHJvY307CgoKCnN0YXRpYwlCb29sZWFuCQliYm94X3ZhbGlkOwpz dGF0aWMJdW5zaWduZWQgaW50CWJib3hfd2lkdGg7CnN0YXRpYwl1bnNpZ25lZCBpbnQJYmJveF9o ZWlnaHQ7CnN0YXRpYwlpbnQJCWJib3hfYW5nbGU7CnN0YXRpYwlpbnQJCWJib3hfdm9mZnNldDsK CnZvaWQKZHJhd19iYm94KCkKewoJaW50CXhjb3JuZXIsIHljb3JuZXI7CgoJaWYgKGJib3hfdmFs aWQpIHsKCgkgICAgeGNvcm5lciA9ICgoaW50KSAoKCBjdXJyaW5mLmRhdGEuZHZpX2ggKSAvIGN1 cnJ3aW4uc2hyaW5rZmFjdG9yICA+PiAxNikpICAgLSBjdXJyd2luLmJhc2VfeDsKCSAgICB5Y29y bmVyID0gY3VycmluZi5kYXRhLnB4bF92ICAtIGN1cnJ3aW4uYmFzZV95OwoKCSAgICBpZiAoYmJv eF9hbmdsZSA9PSAwKSB7CgkJeWNvcm5lciAtPSBiYm94X3ZvZmZzZXQ7CgkJWERyYXdMaW5lKERJ U1AsIGN1cnJ3aW4ud2luLCBydWxlR0MsCgkJICB4Y29ybmVyLCB5Y29ybmVyLAoJCSAgeGNvcm5l ciArIGJib3hfd2lkdGgsIHljb3JuZXIpOwoJCVhEcmF3TGluZShESVNQLCBjdXJyd2luLndpbiwg cnVsZUdDLAoJCSAgeGNvcm5lciArIGJib3hfd2lkdGgsIHljb3JuZXIsCgkJICB4Y29ybmVyICsg YmJveF93aWR0aCwgeWNvcm5lciArIGJib3hfaGVpZ2h0KTsKCQlYRHJhd0xpbmUoRElTUCwgY3Vy cndpbi53aW4sIHJ1bGVHQywKCQkgIHhjb3JuZXIgKyBiYm94X3dpZHRoLCB5Y29ybmVyICsgYmJv eF9oZWlnaHQsCgkJICB4Y29ybmVyLCB5Y29ybmVyICsgYmJveF9oZWlnaHQpOwoJCVhEcmF3TGlu ZShESVNQLCBjdXJyd2luLndpbiwgcnVsZUdDLAoJCSAgeGNvcm5lciwgeWNvcm5lciArIGJib3hf aGVpZ2h0LAoJCSAgeGNvcm5lciwgeWNvcm5lcik7CgkgICAgfQoJICAgIGVsc2UgewoJCWZsb2F0 CXNpbl9hCT0gc2luKGJib3hfYW5nbGUgKiAoKDMuMTQxNTkyNjUzNTkgKiAyLjApICAvIDM2MCkp OwoJCWZsb2F0CWNvc19hCT0gY29zKGJib3hfYW5nbGUgKiAoKDMuMTQxNTkyNjUzNTkgKiAyLjAp ICAvIDM2MCkpOwoJCWZsb2F0CWEsIGIsIGMsIGQ7CgoJCWEgPSBjb3NfYSAqIGJib3hfd2lkdGg7 CgkJYiA9IC1zaW5fYSAqIGJib3hfd2lkdGg7CgkJYyA9IC1zaW5fYSAqIGJib3hfaGVpZ2h0OwoJ CWQgPSAtY29zX2EgKiBiYm94X2hlaWdodDsKCgkJWERyYXdMaW5lKERJU1AsIGN1cnJ3aW4ud2lu LCBydWxlR0MsCgkJICB4Y29ybmVyLCB5Y29ybmVyLAoJCSAgeGNvcm5lciArIChpbnQpIGZsb29y KCggYSApICsgMC41KSAsIHljb3JuZXIgKyAoaW50KSBmbG9vcigoIGIgKSArIDAuNSkgKTsKCQlY RHJhd0xpbmUoRElTUCwgY3Vycndpbi53aW4sIHJ1bGVHQywKCQkgIHhjb3JuZXIgKyAoaW50KSBm bG9vcigoIGEgKSArIDAuNSkgLCB5Y29ybmVyICsgKGludCkgZmxvb3IoKCBiICkgKyAwLjUpICwK CQkgIHhjb3JuZXIgKyAoaW50KSBmbG9vcigoIGEgKyBjICkgKyAwLjUpICwgeWNvcm5lciArIChp bnQpIGZsb29yKCggYiArIGQgKSArIDAuNSkgKTsKCQlYRHJhd0xpbmUoRElTUCwgY3Vycndpbi53 aW4sIHJ1bGVHQywKCQkgIHhjb3JuZXIgKyAoaW50KSBmbG9vcigoIGEgKyBjICkgKyAwLjUpICwg eWNvcm5lciArIChpbnQpIGZsb29yKCggYiArIGQgKSArIDAuNSkgLAoJCSAgeGNvcm5lciArIChp bnQpIGZsb29yKCggYyApICsgMC41KSAsIHljb3JuZXIgKyAoaW50KSBmbG9vcigoIGQgKSArIDAu NSkgKTsKCQlYRHJhd0xpbmUoRElTUCwgY3Vycndpbi53aW4sIHJ1bGVHQywKCQkgIHhjb3JuZXIg KyAoaW50KSBmbG9vcigoIGMgKSArIDAuNSkgLCB5Y29ybmVyICsgKGludCkgZmxvb3IoKCBkICkg KyAwLjUpICwKCQkgIHhjb3JuZXIsIHljb3JuZXIpOwoJICAgIH0KCSAgICBiYm94X3ZhbGlkID0g MCA7Cgl9Cn0KCgoKc3RhdGljCXZvaWQKYWN0dWFsX3N0YXJ0dXAoKQp7CgkgCgoKCgoKCglpZiAo ISgKCgoKCgoKCgoKCgoKCgoKCSAgICAocmVzb3VyY2UudXNlR1MgJiYgaW5pdEdTKCkpCgoKCSAg ICApKQoJICAgIHBzcCA9IG5vX3BzX3Byb2NzOwp9CgpzdGF0aWMJdm9pZApwc19zdGFydHVwKHh1 bCwgeXVsLCBjcCkKCWludAkJeHVsLCB5dWw7Cgljb25zdCAJY2hhcgkqY3A7CnsKCWlmICghcmVz b3VyY2UuX3Bvc3RzY3JpcHQpIHsKCSAgICBwc3AudG9nZ2xlID0gYWN0dWFsX3N0YXJ0dXA7Cgkg ICAgZHJhd19iYm94KCk7CgkgICAgcmV0dXJuOwoJfQoJYWN0dWFsX3N0YXJ0dXAoKTsKCXBzcC5k cmF3YmVnaW4oeHVsLCB5dWwsIGNwKTsKfQoKc3RhdGljCXZvaWQKcHNfc3RhcnR1cDIoKQp7Cglh Y3R1YWxfc3RhcnR1cCgpOwoJcHNwLmJlZ2luaGVhZGVyKCk7Cn0KCiAKc3RhdGljCXZvaWQKTnVs bFByb2MyKGNwKQoJY29uc3QgCWNoYXIJKmNwOwp7fQoKc3RhdGljCXZvaWQKcHNfcGFyc2VyYXco UG9zdFNjcmlwdF9jbWQpCgljb25zdCAJY2hhcgkqUG9zdFNjcmlwdF9jbWQ7CnsKCWNvbnN0IAlj aGFyCSpwOwoKCSAKCWJib3hfYW5nbGUgPSAwOwoJcCA9IHN0cnN0cihQb3N0U2NyaXB0X2NtZCwg InJvdGF0ZSIpOwoJaWYgKHAgIT0gKCh2b2lkICopMCkgKSB7CgkgICAgd2hpbGUgKCpwICE9ICdc MCcgJiYgISAoX19jdHlwZV9iWyhpbnQpICggKCAqcCApICldICYgKHVuc2lnbmVkIHNob3J0IGlu dCkgICBfSVNkaWdpdCApICApIC0tcDsKCSAgICB3aGlsZSAoKnAgIT0gJ1wwJyAmJiAoX19jdHlw ZV9iWyhpbnQpICggKCAqcCApICldICYgKHVuc2lnbmVkIHNob3J0IGludCkgICBfSVNkaWdpdCAp ICApIC0tcDsKCSAgICBpZiAoKnAgIT0gJysnICYmICpwICE9ICctJykgKytwOwoJICAgIHNzY2Fu ZihwLCAiJWQgbmVnIHJvdGF0ZSIsICZiYm94X2FuZ2xlKTsKCX0KfQoKCiAKdm9pZAoKZHJhd2Jl Z2luX25vbmUoaW50IHh1bCwgaW50IHl1bCwgY29uc3QgIGNoYXIgKmNwKQoKCgoKCnsKCWRyYXdf YmJveCgpOwp9CgoKc3RydWN0IHRpY2tyZWMgewoJc3RydWN0IHRpY2tyZWMJKm5leHQ7CglpbnQJ CXBhZ2VubzsKCWNoYXIJKmNvbW1hbmQ7Cgljb25zdCAgY2hhcgkqdG1wbmFtZTsKfTsKCnN0YXRp YwlzdHJ1Y3QgdGlja3JlYwkqdGlja2hlYWQJPSAoKHZvaWQgKikwKSA7CSAKCQkJCQkJIApzdGF0 aWMJaW50CQludGlja3MJCT0gMDsJIAoKCgoKCnN0YXRpYwlzdHJ1Y3QgdGlja3JlYyAqCmNhY2hl dGljayhmaWxlbmFtZSwgcGF0aGluZm8sIGZwKQoJY29uc3QgIGNoYXIJKmZpbGVuYW1lOwoJa3Bz ZV9maWxlX2Zvcm1hdF90eXBlIHBhdGhpbmZvOwoJRklMRQkJKipmcDsKewoJc3RydWN0IHRpY2ty ZWMJKipsaW5rcDsKCXN0cnVjdCB0aWNrcmVjCSp0aWtwOwoJc3RydWN0IHRpY2tyZWMJKipmcmVl cmVjcDsKCglsaW5rcCA9ICZ0aWNraGVhZDsKCWZyZWVyZWNwID0gKCh2b2lkICopMCkgOwoJZm9y ICg7OykgewkJIAoJICAgIHRpa3AgPSAqbGlua3A7CgkgICAgaWYgKHRpa3AgPT0gKCh2b2lkICop MCkgKSB7CSAKCQlpZiAobnRpY2tzID49IDMgICYmIGZyZWVyZWNwICE9ICgodm9pZCAqKTApICkg ewoJCSAgICB0aWtwID0gKmZyZWVyZWNwOwoJCSAgICAqZnJlZXJlY3AgPSB0aWtwLT5uZXh0OwoJ CSAgICBmcmVlKHRpa3AtPmNvbW1hbmQpOwoJCX0KCQllbHNlIHsKCQkgICAgdGlrcCA9IChzdHJ1 Y3QgdGlja3JlYyAqKQoJCQl4bWFsbG9jKHNpemVvZihzdHJ1Y3QgdGlja3JlYykpOwoJCSAgICB0 aWtwLT50bXBuYW1lID0gdGVtcG5hbSh0ZW1wb3JhcnlfZGlyLCAieGR2aWsiKTsKCQkgICAgdGlr cC0+cGFnZW5vID0gLTE7CgkJICAgIGlmICh0aWtwLT50bXBuYW1lID09ICgodm9pZCAqKTApICkg ewoJCQkodm9pZCkgZnB1dHMgKCJDYW5ub3QgY3JlYXRlIHRlbXBvcmFyeSBmaWxlIG5hbWUuXG4i LCAoKF9JT19GSUxFKikoJl9JT19zdGRlcnJfKSkgICk7CgkJCWZyZWUoKGNoYXIgKikgdGlrcCk7 CgkJCXJldHVybiAoKHZvaWQgKikwKSA7CgkJICAgIH0KCQkgICAgKytudGlja3M7CgkJfQoJCXRp a3AtPmNvbW1hbmQgPSB4bWFsbG9jKCh1bnNpZ25lZCkgc3RybGVuKGZpbGVuYW1lKSArIDEpOwoJ CSh2b2lkKSBzdHJjcHkgKHRpa3AtPmNvbW1hbmQsIGZpbGVuYW1lKTsKCQkqZnAgPSAoKHZvaWQg KikwKSA7CgkJYnJlYWs7CgkgICAgfQoJICAgIGlmIChzdHJjbXAoZmlsZW5hbWUsIHRpa3AtPmNv bW1hbmQpID09IDApIHsJIAoJCSpsaW5rcCA9IHRpa3AtPm5leHQ7CSAKCQkqZnAgPSB4ZHZpX3hm b3BlbiAodGlrcC0+dG1wbmFtZSwgInIiICApOwoJCWlmICgqZnAgPT0gKCh2b2lkICopMCkgKSBw ZXJyb3IodGlrcC0+dG1wbmFtZSk7CgkJYnJlYWs7CgkgICAgfQoJICAgIGlmICh0aWtwLT5wYWdl bm8gIT0gY3VycmVudF9wYWdlKSBmcmVlcmVjcCA9IGxpbmtwOwoJICAgIGxpbmtwID0gJnRpa3At Pm5leHQ7Cgl9Cgl0aWtwLT5uZXh0ID0gdGlja2hlYWQ7CQkgCgl0aWNraGVhZCA9IHRpa3A7Cgl0 aWtwLT5wYWdlbm8gPSAKCSAgcGF0aGluZm8gIT0ga3BzZV90ZXhfcHNfaGVhZGVyX2Zvcm1hdCA/ IGN1cnJlbnRfcGFnZSA6IC0xOwoJcmV0dXJuIHRpa3A7Cn0KCgoKCgoKCgoKCgoKCnN0YXRpYwl2 b2lkCnNlbmRmaWxlKGZpbGVuYW1lLCBwYXRoaW5mbykKCWNvbnN0ICBjaGFyCSpmaWxlbmFtZTsK CWtwc2VfZmlsZV9mb3JtYXRfdHlwZSBwYXRoaW5mbzsKewoJRklMRQkJKmY7CglzdGF0aWMgY29u c3QgIGNoYXIgKmFyZ3ZbXQk9IHsoKHZvaWQgKikwKSAsICItYyIsICgodm9pZCAqKTApICwgKCh2 b2lkICopMCkgfTsKCWNvbnN0ICBjaGFyCSpidWZwOwoJc3RydWN0IHRpY2tyZWMJKnRpa3A7Cglp bnQJCWxlbjsKCWNoYXIJCW1hZ2ljMSwgbWFnaWMyLCBtYWdpYzM7CgoJaWYgKHBzcC5kcmF3Zmls ZSA9PSAoKHZvaWQgKikwKSAgfHwgIXJlc291cmNlLl9wb3N0c2NyaXB0KSByZXR1cm47CgoKCglm aWxlbmFtZT11cmxvY2FsaXplKGZpbGVuYW1lKTsKCQoJaWYgKCgocmVzb3VyY2UuX1VSTGJhc2Ug ICE9ICgodm9pZCAqKTApICkgJiYgaHRleF9pc191cmwodXJsb2NhbGl6ZShyZXNvdXJjZS5fVVJM YmFzZSApKSkgfHwKCSAgICAoaHRleF9pc191cmwoZmlsZW5hbWUpKSkgewoJICAgCgkgIFVSTF9h d2FyZT0xOwoJICBmID0geGR2aV94Zm9wZW4gKGZpbGVuYW1lLCAiciIgICk7CgkgIGJ1ZnA9Zmls ZWxpc3RbbGFzdHd3d29wZW5dLmZpbGU7CgkgIFVSTF9hd2FyZT0wOwoJfSBlbHNlCgoJaWYgKGZp bGVuYW1lWzBdID09ICdgJykgewoJICAgIGlmICghcmVzb3VyY2UuYWxsb3dfc2hlbGwpIHsKCQlp ZiAod2Fybl9zcGVjX25vdykKCQkgICAgKHZvaWQpIGZwcmludGYgKCgoX0lPX0ZJTEUqKSgmX0lP X3N0ZGVycl8pKSAgLAoJCQkiJXM6IHNoZWxsIGVzY2FwZSBkaXNhbGxvd2VkIGZvciBzcGVjaWFs IFwiJXNcIlxuIiwKCQkJcHJvZywgZmlsZW5hbWUpOwoJCXJldHVybjsKCSAgICB9CgoJICAgIHRp a3AgPSBjYWNoZXRpY2soZmlsZW5hbWUsIHBhdGhpbmZvLCAmZik7CgkgICAgaWYgKHRpa3AgPT0g KCh2b2lkICopMCkgKQoJCXJldHVybjsKCSAgICBpZiAoZiA9PSAoKHZvaWQgKikwKSApIHsKCQls ZW4gPSBzdHJsZW4oZmlsZW5hbWUpICsgc3RybGVuKHRpa3AtPnRtcG5hbWUpICsgKDQgLSAxKTsK CQlpZiAobGVuID4gZmZsaW5lX2xlbikKCQkgICAgZXhwYW5kbGluZShsZW4pOwoJCSh2b2lkKSBz cHJpbnRmIChmZmxpbmUsICIlcyA+ICVzIiwgZmlsZW5hbWUgKyAxLCB0aWtwLT50bXBuYW1lKTsK CQkodm9pZCkgc3lzdGVtKGZmbGluZSk7CgkJZiA9IHhkdmlfeGZvcGVuICh0aWtwLT50bXBuYW1l LCAiciIgICk7CgkJaWYgKGYgPT0gKCh2b2lkICopMCkgKSB7CgkJICAgIHBlcnJvcih0aWtwLT50 bXBuYW1lKTsKCQkgICAgcmV0dXJuOwoJCX0KCSAgICB9CgkgICAgYnVmcCA9IHRpa3AtPnRtcG5h bWU7Cgl9CgllbHNlIHsKCgkgICAgYnVmcCA9IGtwc2VfZmluZF9maWxlIChmaWxlbmFtZSwgcGF0 aGluZm8sIHRydWUpOwogICAgICAgICAgICBmID0gYnVmcCA/IHhkdmlfeGZvcGVuICAoYnVmcCwg InIiICApIDogKCh2b2lkICopMCkgOwogICAKCSAgICAgCgkgICAgaWYgKGYgPT0gKCh2b2lkICop MCkgKSB7CgkJKHZvaWQpIGZwcmludGYgKCgoX0lPX0ZJTEUqKSgmX0lPX3N0ZGVycl8pKSAgLCAi JXM6IGNhbm5vdCBmaW5kIFBTIGZpbGUgYCVzJy5cbiIsCgkJICAgIHByb2csIGZpbGVuYW1lKTsK CQlkcmF3X2Jib3goKTsKCQlyZXR1cm47CgkgICAgfQoKCSAgICAgCgkgICAgbGVuID0gc3RybGVu KGZpbGVuYW1lKTsKCSAgICBtYWdpYzEgPSAnXDAzNyc7CgkgICAgbWFnaWMzID0gJ1wwJzsKCSAg ICBpZiAoKGxlbiA+IDIgJiYgc3RyY21wKGZpbGVuYW1lICsgbGVuIC0gMiwgIi5aIikgPT0gMAoJ CSAgICAgICYmIChhcmd2WzBdID0gInVuY29tcHJlc3MiICwgbWFnaWMyID0gJ1wyMzUnLCAxICkp CgkJICAgIHx8IChsZW4gPiAzICYmIHN0cmNtcChmaWxlbmFtZSArIGxlbiAtIDMsICIuZ3oiKSA9 PSAwCgkJICAgICAgJiYgKGFyZ3ZbMF0gPSAiZ3VuemlwIiAsIG1hZ2ljMiA9ICdcMjEzJywgMSAp KQoJCSAgICB8fCAobGVuID4gNCAmJiBzdHJjbXAoZmlsZW5hbWUgKyBsZW4gLSA0LCAiLmJ6MiIp ID09IDAKCQkgICAgICAmJiAoYXJndlswXSA9ICJidW56aXAyIiAsIG1hZ2ljMSA9ICdCJywgbWFn aWMyID0gJ1onLAoJCQltYWdpYzMgPSAnaCcsIDEgKSkpIHsKCQlpZiAoX0lPX2dldGMgKCAgZiAg KSAgICE9IG1hZ2ljMSB8fCAoY2hhcikgX0lPX2dldGMgKCAgZiAgKSAgICE9IG1hZ2ljMgoJCSAg fHwgKG1hZ2ljMyAhPSAnXDAnICYmIF9JT19nZXRjICggIGYgICkgICAhPSBtYWdpYzMpKQoJCSAg ICByZXdpbmQoZik7CgkJZWxzZSB7CgkJICAgICh2b2lkKSBrcHNlX2ZjbG9zZV90cmFjZSAgKGYp OwoJCSAgICArK25fZmlsZXNfbGVmdDsKCQkgICAgdGlrcCA9IGNhY2hldGljayhmaWxlbmFtZSwg cGF0aGluZm8sICZmKTsKCQkgICAgaWYgKHRpa3AgPT0gKCh2b2lkICopMCkgKQoJCQlyZXR1cm47 CgkJICAgIGlmIChmID09ICgodm9pZCAqKTApICkgewoJCQlwaWRfdAlwaWQ7CgkJCWludAloYW5k bGU7CgkJCWludAlzdGF0dXM7CgoJCQlhcmd2WzJdID0gYnVmcDsKCQkJaGFuZGxlID0gb3Blbih0 aWtwLT50bXBuYW1lLCAwMjAwICB8IDAxMDAgIHwgCgkJCQkgICAgICAwMiAgfCAwMTAwMCAsIAoJ CQkJICAgICAgMDQwMCAgIHwgMDIwMCAgKTsKCQkJaWYgKGhhbmRsZSA9PSAtMSkgewoJCQkgICAg cGVycm9yKHRpa3AtPnRtcG5hbWUpOwoJCQkgICAgcmV0dXJuOwoJCQl9CgkJCSh2b2lkKSBmZmx1 c2ggKCgoX0lPX0ZJTEUqKSgmX0lPX3N0ZGVycl8pKSAgKTsJIAoJCQlwaWQgPSB2Zm9yaygpOwoJ CQlpZiAocGlkID09IDApIHsJIAoJCQkgICAgKHZvaWQpIGR1cDIoaGFuZGxlLCAxKTsKCQkJICAg ICh2b2lkKSBleGVjdnAoYXJndlswXSwgKGNoYXIgKiopIGFyZ3YpOwoJCQkgICAgKHZvaWQpIGZw cmludGYgKCgoX0lPX0ZJTEUqKSgmX0lPX3N0ZGVycl8pKSAgLCAiRXhlY3ZwIG9mICVzIGZhaWxl ZC5cbiIsIGFyZ3ZbMF0pOwoJCQkgICAgKHZvaWQpIGZmbHVzaCAoKChfSU9fRklMRSopKCZfSU9f c3RkZXJyXykpICApOwoJCQkgICAgX2V4aXQoMSk7CgkJCX0KCQkJKHZvaWQpIGNsb3NlKGhhbmRs ZSk7CgkJCWZvciAoOzspIHsKCgkJCSAgICBpZiAod2FpdHBpZChwaWQsICZzdGF0dXMsIDApICE9 IC0xKSBicmVhazsKIyA4OTcgInNwZWNpYWwuYyIKCgkJCSAgICBpZiAoKCpfX2Vycm5vX2xvY2F0 aW9uICgpKSAgPT0gNCApIGNvbnRpbnVlOwoJCQkgICAgcGVycm9yKCJbeGR2aWtdIHdhaXRwaWQi KTsKCQkJICAgIHJldHVybjsKCQkJfQoJCQlmID0geGR2aV94Zm9wZW4gKHRpa3AtPnRtcG5hbWUs ICJyIiAgKTsKCQkJaWYgKGYgPT0gKCh2b2lkICopMCkgKSB7CgkJCSAgICBwZXJyb3IodGlrcC0+ dG1wbmFtZSk7CgkJCSAgICByZXR1cm47CgkJCX0KCQkgICAgfQoJCSAgICBidWZwID0gdGlrcC0+ dG1wbmFtZTsKCQl9CgkgICAgfQoJfQoKCSAKCXBzcC5kcmF3ZmlsZShidWZwLCBmKTsJIAp9CgoK dm9pZApwc19uZXdkb2MoKQp7CglzdHJ1Y3QgdGlja3JlYwkqdGlrcDsKCglzY2FubmVkX3BhZ2Ug PSBzY2FubmVkX3BhZ2VfYmFrID0gc2Nhbm5lZF9wYWdlX3Jlc2V0ID0KCSAgICByZXNvdXJjZS5w cmVzY2FuID8gLTEgOiB0b3RhbF9wYWdlczsKCWZvciAodGlrcCA9IHRpY2toZWFkOyB0aWtwICE9 ICgodm9pZCAqKTApIDsgdGlrcCA9IHRpa3AtPm5leHQpCgkgICAgdGlrcC0+cGFnZW5vID0gLTE7 Cglwc3AubmV3ZG9jKCk7Cn0KCgp2b2lkCnBzX2Rlc3Ryb3koKQp7CglzdHJ1Y3QgdGlja3JlYwkq dGlrcDsKCglwc3AuZGVzdHJveSgpOwoJZm9yICh0aWtwID0gdGlja2hlYWQ7IHRpa3AgIT0gKCh2 b2lkICopMCkgOyB0aWtwID0gdGlrcC0+bmV4dCkKCSAgICBpZiAodW5saW5rKHRpa3AtPnRtcG5h bWUpIDwgMCkKCQlwZXJyb3IodGlrcC0+dG1wbmFtZSk7Cn0KCgoKCnN0YXRpYwl2b2lkCnBzZmln X3NwZWNpYWwoY3ApCgljaGFyCSpjcDsKewoJY2hhcgkqZmlsZW5hbWU7CglpbnQJcmF3dywgcmF3 aDsKCglpZiAoc3RybmNtcChjcCwgIjpbYmVnaW5dIiwgOCkgPT0gMCkgewoJICAgIGNwICs9IDg7 CgkgICAgYmJveF92YWxpZCA9IDAgOwoJICAgIGJib3hfYW5nbGUgPSAwOwoJICAgIGlmIChzc2Nh bmYoY3AsIiVkICVkXG4iLCAmcmF3dywgJnJhd2gpID49IDIpIHsKCQliYm94X3ZhbGlkID0gMSA7 CgkJYmJveF93aWR0aCA9ICgoaW50KSAoKCAoKGxvbmcpICggIHJhd3cgICAqICAgZGltY29udiAp KSAgICkgLyBjdXJyd2luLnNocmlua2ZhY3RvciAgPj4gMTYpKSA7CgkJYmJveF9oZWlnaHQgPSAo KGludCkgKCggKChsb25nKSAoICByYXdoICAgKiAgIGRpbWNvbnYgKSkgICApIC8gY3Vycndpbi5z aHJpbmtmYWN0b3IgID4+IDE2KSkgOwoJCWJib3hfdm9mZnNldCA9IDA7CgkgICAgfQoJICAgIGlm IChjdXJyd2luLndpbiA9PSBtYW5lLndpbikKCgkJcHNwLmRyYXdiZWdpbigoKGludCkgKCggY3Vy cmluZi5kYXRhLmR2aV9oICkgLyBjdXJyd2luLnNocmlua2ZhY3RvciAgPj4gMTYpKSAgIC0gY3Vy cndpbi5iYXNlX3gsIGN1cnJpbmYuZGF0YS5weGxfdiAgLSBjdXJyd2luLmJhc2VfeSwKCQkgICAg Y3ApOwoKCgoJICAgIHBzZmlnX2JlZ3VuID0gMSA7Cgl9IGVsc2UgaWYgKHN0cm5jbXAoY3AsICIg cGxvdGZpbGUgIiwgMTApID09IDApIHsKCSAgICBjcCArPSAxMDsKCSAgICB3aGlsZSAoKF9fY3R5 cGVfYlsoaW50KSAoICggKmNwICkgKV0gJiAodW5zaWduZWQgc2hvcnQgaW50KSAgIF9JU3NwYWNl ICkgICkgY3ArKzsKCSAgICAgCgkgICAgaWYgKCpjcCA9PSAnIicpIHsKCQljcCsrOwoJCWZvciAo ZmlsZW5hbWUgPSBjcDsgKmNwICYmICgqY3AgIT0gJyInKTsgKytjcCk7CgkgICAgfSBlbHNlIHsK CQlmb3IgKGZpbGVuYW1lID0gY3A7ICpjcCAmJiAhIChfX2N0eXBlX2JbKGludCkgKCAoICpjcCAp ICldICYgKHVuc2lnbmVkIHNob3J0IGludCkgICBfSVNzcGFjZSApICA7ICsrY3ApOwoJICAgIH0K CSAgICAqY3AgPSAnXDAnOwoKCSAgICBpZiAoY3Vycndpbi53aW4gPT0gbWFuZS53aW4pIHNlbmRm aWxlKGZpbGVuYW1lLCBrcHNlX3BpY3RfZm9ybWF0KTsKCgl9IGVsc2UgaWYgKHN0cm5jbXAoY3As ICI6W2VuZF0iLCA2KSA9PSAwKSB7CgkgICAgY3AgKz0gNjsKCgkgICAgaWYgKGN1cnJ3aW4ud2lu ID09IG1hbmUud2luKSBwc3AuZHJhd2VuZChjcCk7CgoJICAgIGJib3hfdmFsaWQgPSAwIDsKCSAg ICBwc2ZpZ19iZWd1biA9IDAgOwoJfSBlbHNlIHsgIAoJICBpZiAoKmNwID09ICc6JykKCSAgICAr K2NwOwkgCgoJICAgIGlmIChjdXJyd2luLndpbiA9PSBtYW5lLndpbikgewoJCXBzX3BhcnNlcmF3 KGNwKTsKCQlpZiAocHNmaWdfYmVndW4pIHBzcC5kcmF3cmF3KGNwKTsKCQllbHNlIHsKCQkgICAg cHNwLmRyYXdiZWdpbigoKGludCkgKCggY3VycmluZi5kYXRhLmR2aV9oICkgLyBjdXJyd2luLnNo cmlua2ZhY3RvciAgPj4gMTYpKSAgIC0gY3Vycndpbi5iYXNlX3gsCgkJCWN1cnJpbmYuZGF0YS5w eGxfdiAgLSBjdXJyd2luLmJhc2VfeSwgY3ApOwoJCSAgICBwc3AuZHJhd2VuZCgiIik7CgkJfQoJ ICAgIH0KCgl9Cn0KCgogCgpzdGF0aWMJY29uc3QgCWNoYXIJKmtleXRhYltdCT0geyJjbGlwIiwK CQkJCQkgICAibGx4IiwKCQkJCQkgICAibGx5IiwKCQkJCQkgICAidXJ4IiwKCQkJCQkgICAidXJ5 IiwKCQkJCQkgICAicndpIiwKCQkJCQkgICAicmhpIiwKCQkJCQkgICAiaHNpemUiLAoJCQkJCSAg ICJ2c2l6ZSIsCgkJCQkJICAgImhvZmZzZXQiLAoJCQkJCSAgICJ2b2Zmc2V0IiwKCQkJCQkgICAi aHNjYWxlIiwKCQkJCQkgICAidnNjYWxlIiwKCQkJCQkgICAiYW5nbGUifTsKCgoKCgoKCgoKCgpz dGF0aWMJdm9pZAplcHNmX3NwZWNpYWwoY3ApCgljaGFyCSpjcDsKewoJY2hhcgkqZmlsZW5hbWU7 CglzdGF0aWMJY2hhcgkJKmJ1ZmZlcjsKCXN0YXRpYwl1bnNpZ25lZCBpbnQJYnVmbGVuCT0gMDsK CXVuc2lnbmVkIGludAkJbGVuOwoJY2hhcgkqcTsKCWludAlmbGFncwk9IDA7Cglkb3VibGUJa2V5 dmFsWzZdOwoKCWZpbGVuYW1lID0gY3A7CglpZiAoKmNwID09ICdcJycgfHwgKmNwID09ICciJykg ewoJICAgIGRvICsrY3A7CgkgICAgd2hpbGUgKCpjcCAhPSAnXDAnICYmICpjcCAhPSAqZmlsZW5h bWUpOwoJICAgICsrZmlsZW5hbWU7Cgl9CgllbHNlCgkgICAgd2hpbGUgKCpjcCAhPSAnXDAnICYm ICpjcCAhPSAnICcgJiYgKmNwICE9ICdcdCcpICsrY3A7CglpZiAoKmNwICE9ICdcMCcpICpjcCsr ID0gJ1wwJzsKCXdoaWxlICgqY3AgPT0gJyAnIHx8ICpjcCA9PSAnXHQnKSArK2NwOwoJbGVuID0g c3RybGVuKGNwKSArIChzaXplb2Yoa2V5dGFiKS9zaXplb2YoKmtleXRhYikpICArIDMwOwoJaWYg KGJ1ZmxlbiA8IGxlbikgewoJICAgIGlmIChidWZsZW4gIT0gMCkgZnJlZShidWZmZXIpOwoJICAg IGJ1ZmxlbiA9IGxlbjsKCSAgICBidWZmZXIgPSB4bWFsbG9jKGJ1Zmxlbik7Cgl9Cgkodm9pZCkg c3RyY3B5IChidWZmZXIsICJAYmVnaW5zcGVjaWFsIik7CglxID0gYnVmZmVyICsgc3RybGVuKGJ1 ZmZlcik7Cgl3aGlsZSAoKmNwICE9ICdcMCcpIHsKCSAgICBjaGFyICpwMSA9IGNwOwoJICAgIGlu dCBrZXlubzsKCgkgICAgd2hpbGUgKCpwMSAhPSAnPScgJiYgISAoX19jdHlwZV9iWyhpbnQpICgg KCAqcDEgKSApXSAmICh1bnNpZ25lZCBzaG9ydCBpbnQpICAgX0lTc3BhY2UgKSAgICYmICpwMSAh PSAnXDAnKSArK3AxOwoJICAgIGZvciAoa2V5bm8gPSAwOzsgKytrZXlubykgewoJCWlmIChrZXlu byA+PSAoc2l6ZW9mKGtleXRhYikvc2l6ZW9mKCprZXl0YWIpKSApIHsKCQkgICAgaWYgKHdhcm5f c3BlY19ub3cpCgkJCSh2b2lkKSBmcHJpbnRmICgoKF9JT19GSUxFKikoJl9JT19zdGRlcnJfKSkg ICwKCQkJICAgICIlczogdW5rbm93biBrZXl3b3JkICglKnMpIGluIFxcc3BlY2lhbCB3aWxsIGJl IGlnbm9yZWRcbiIsCgkJCSAgICBwcm9nLCAoaW50KSAocDEgLSBjcCksIGNwKTsKCQkgICAgYnJl YWs7CgkJfQoJCWlmIChtZW1jbXAoY3AsIGtleXRhYltrZXlub10sIHAxIC0gY3ApID09IDApIHsK CQkgICAgaWYgKGtleW5vID49IDEgKSB7CgkJCXdoaWxlICgoX19jdHlwZV9iWyhpbnQpICggKCAq cDEgKSApXSAmICh1bnNpZ25lZCBzaG9ydCBpbnQpICAgX0lTc3BhY2UgKSAgKSArK3AxOwoJCQlp ZiAoKnAxID09ICc9JykgewoJCQkgICAgKytwMTsKCQkJICAgIHdoaWxlICgoX19jdHlwZV9iWyhp bnQpICggKCAqcDEgKSApXSAmICh1bnNpZ25lZCBzaG9ydCBpbnQpICAgX0lTc3BhY2UgKSAgKSAr K3AxOwoJCQl9CgkJCWlmIChrZXlubyA8IDEgICsgNikgewoJCQkgICAga2V5dmFsW2tleW5vIC0g MSBdID0gYXRvZihwMSk7CgkJCSAgICBmbGFncyB8PSAoMSA8PCAoa2V5bm8gLSAxICkpOwoJCQl9 CgkJCSpxKysgPSAnICc7CgkJCXdoaWxlICghIChfX2N0eXBlX2JbKGludCkgKCAoICpwMSApICld ICYgKHVuc2lnbmVkIHNob3J0IGludCkgICBfSVNzcGFjZSApICAgJiYgKnAxICE9ICdcMCcpICpx KysgPSAqcDErKzsKCQkgICAgfQoJCSAgICAqcSsrID0gJyAnOwoJCSAgICAqcSsrID0gJ0AnOwoJ CSAgICAodm9pZCkgc3RyY3B5IChxLCBrZXl0YWJba2V5bm9dKTsKCQkgICAgcSArPSBzdHJsZW4o cSk7CgkJICAgIGJyZWFrOwoJCX0KCSAgICB9CgkgICAgY3AgPSBwMTsKCSAgICB3aGlsZSAoISAo X19jdHlwZV9iWyhpbnQpICggKCAqY3AgKSApXSAmICh1bnNpZ25lZCBzaG9ydCBpbnQpICAgX0lT c3BhY2UgKSAgICYmICpjcCAhPSAnXDAnKSArK2NwOwoJICAgIHdoaWxlICgoX19jdHlwZV9iWyhp bnQpICggKCAqY3AgKSApXSAmICh1bnNpZ25lZCBzaG9ydCBpbnQpICAgX0lTc3BhY2UgKSAgKSAr K2NwOwoJfQoJKHZvaWQpIHN0cmNweSAocSwgIiBAc2V0c3BlY2lhbFxuIik7CgoJYmJveF92YWxp ZCA9IDAgOwoJaWYgKChmbGFncyAmIDB4MzApID09IDB4MzAgfHwgKChmbGFncyAmIDB4MzApICYm IChmbGFncyAmIDB4ZikgPT0gMHhmKSl7CgkgICAgYmJveF92YWxpZCA9IDEgOwoJICAgIGJib3hf d2lkdGggPSAwLjEgKiAoKGZsYWdzICYgMHgxMCkgPyBrZXl2YWxbNF0gCgkJOiBrZXl2YWxbNV0g ICogKGtleXZhbFsyXSAgLSBrZXl2YWxbMF0gKSAvIChrZXl2YWxbM10gIC0ga2V5dmFsWzFdICkp CgkJKiBkaW1jb252IC8gY3Vycndpbi5zaHJpbmtmYWN0b3IgICsgMC41OwoJICAgIGJib3hfdm9m ZnNldCA9IGJib3hfaGVpZ2h0ID0gMC4xICogKChmbGFncyAmIDB4MjApID8ga2V5dmFsWzVdIAoJ CToga2V5dmFsWzRdICAqIChrZXl2YWxbM10gIC0ga2V5dmFsWzFdICkgLyAoa2V5dmFsWzJdICAt IGtleXZhbFswXSApKQoJCSogZGltY29udiAvIGN1cnJ3aW4uc2hyaW5rZmFjdG9yICArIDAuNTsK CX0KCglpZiAoZmlsZW5hbWUgJiYgY3Vycndpbi53aW4gPT0gbWFuZS53aW4pIHsKCgkgICAgcHNw LmRyYXdiZWdpbigoKGludCkgKCggY3VycmluZi5kYXRhLmR2aV9oICkgLyBjdXJyd2luLnNocmlu a2ZhY3RvciAgPj4gMTYpKSAgIC0gY3Vycndpbi5iYXNlX3gsIGN1cnJpbmYuZGF0YS5weGxfdiAg LSBjdXJyd2luLmJhc2VfeSwKCQlidWZmZXIpOwoJICAgICAKCSAgICBzZW5kZmlsZShmaWxlbmFt ZSwga3BzZV9waWN0X2Zvcm1hdCk7CgkgICAgcHNwLmRyYXdlbmQoIiBAZW5kc3BlY2lhbCIpOwoK CgoJfQoJYmJveF92YWxpZCA9IDAgOwp9CgoKc3RhdGljCXZvaWQKcXVvdGVfc3BlY2lhbChjcCkK CWNoYXIJKmNwOwp7CgliYm94X3ZhbGlkID0gMCA7CgoKCWlmIChjdXJyd2luLndpbiA9PSBtYW5l LndpbikgewoJICAgIHBzcC5kcmF3YmVnaW4oKChpbnQpICgoIGN1cnJpbmYuZGF0YS5kdmlfaCAp IC8gY3Vycndpbi5zaHJpbmtmYWN0b3IgID4+IDE2KSkgICAtIGN1cnJ3aW4uYmFzZV94LCBjdXJy aW5mLmRhdGEucHhsX3YgIC0gY3Vycndpbi5iYXNlX3ksCgkJIkBiZWdpbnNwZWNpYWwgQHNldHNw ZWNpYWwgIik7CgkgICAgIAoJICAgIHBzcC5kcmF3cmF3KGNwICsgMSk7CgkgICAgcHNwLmRyYXdl bmQoIiBAZW5kc3BlY2lhbCIpOwoJfQoKCgkgCn0KCgoKc3RhdGljCXZvaWQKc2Nhbl9oZWFkZXIo Y3ApCgljaGFyCSpjcDsKewoJY2hhcgkqZmlsZW5hbWU7CgoJZmlsZW5hbWUgPSBjcDsKCWlmICgq Y3AgPT0gJ1wnJyB8fCAqY3AgPT0gJyInKSB7CgkgICAgZG8gKytjcDsKCSAgICB3aGlsZSAoKmNw ICE9ICdcMCcgJiYgKmNwICE9ICpmaWxlbmFtZSk7CgkgICAgKmNwID0gJ1wwJzsKCSAgICArK2Zp bGVuYW1lOwoJfQoKCXBzcC5iZWdpbmhlYWRlcigpOwoJc2VuZGZpbGUoZmlsZW5hbWUsIGtwc2Vf dGV4X3BzX2hlYWRlcl9mb3JtYXQpOwp9CgpzdGF0aWMJdm9pZApzY2FuX2JhbmcoY3ApCgljaGFy CSpjcDsKewoJcHNwLmJlZ2luaGVhZGVyKCk7Cglwc3AuZHJhd3JhdyhjcCArIDEpOwp9CgoKCiAK CgoKIAoKCgoKCgoKCgoKCgoKCiAKCgoKCgpzdGF0aWMJY2hhciAqCmVuZG9mY29tbWFuZChjcCkK CWNoYXIJKmNwOwp7Cgl3aGlsZSAoKF9fY3R5cGVfYlsoaW50KSAoICggKmNwICkgKV0gJiAodW5z aWduZWQgc2hvcnQgaW50KSAgIF9JU3NwYWNlICkgICkgKytjcDsKCWlmICgqY3AgIT0gJz0nKSBy ZXR1cm4gKCh2b2lkICopMCkgOwoJZG8gKytjcDsgd2hpbGUgKChfX2N0eXBlX2JbKGludCkgKCAo ICpjcCApICldICYgKHVuc2lnbmVkIHNob3J0IGludCkgICBfSVNzcGFjZSApICApOwoJcmV0dXJu IGNwOwp9CgoKCnZvaWQKYXBwbGljYXRpb25Eb1NwZWNpYWwoY3ApCgljaGFyCSpjcDsKewoJY2hh cgkqcDsKICAKCSAKCXdoaWxlICgqY3AgPT0gJyAnIHx8ICpjcCA9PSAnXHQnKSArK2NwOwoKCSAK CglpZiAoKmNwID09ICciJykgewoJICAgIHF1b3RlX3NwZWNpYWwoY3ApOwoJICAgIHJldHVybjsK CX0KCWlmIChtZW1pY21wKGNwLCAicHM6IiwgMykgPT0gMCkgewoJICAgIHBzZmlnX3NwZWNpYWwo Y3AgKyAzKTsKCSAgICByZXR1cm47Cgl9CglpZiAobWVtaWNtcChjcCwgInBzZmlsZSIsIDYpID09 IDAKCQkmJiAocCA9IGVuZG9mY29tbWFuZChjcCArIDYpKSAhPSAoKHZvaWQgKikwKSApIHsKCSAg ICBlcHNmX3NwZWNpYWwocCk7CgkgICAgcmV0dXJuOwoJfQoKCSAKCglpZiAoKmNwID09ICchJwoJ ICB8fCAobWVtaWNtcChjcCwgImhlYWRlciIsIDYpID09IDAgJiYgZW5kb2Zjb21tYW5kKGNwICsg NikgIT0gKCh2b2lkICopMCkgKSkgewoKCSAgICBpZiAocmVzb3VyY2UuX3Bvc3RzY3JpcHQgJiYg c2Nhbm5lZF9wYWdlX3Jlc2V0ID49IDApIHsKCQkgCgkJc2Nhbm5lZF9wYWdlID0gc2Nhbm5lZF9w YWdlX2JhayA9IHNjYW5uZWRfcGFnZV9yZXNldCA9IC0xOwoJCXBzcC5pbnRlcnJ1cHQoKTsKCQlj YW5pdCA9IDEgOwoJCWxvbmdqbXAoY2FuaXRfZW52LCAxKTsKCSAgICB9CgoJICAgIHJldHVybjsK CX0KCgoJaWYgKGNoZWNrSHlwZXJUZVgoY3AsIGN1cnJlbnRfcGFnZSkpIHJldHVybjsKCgoJIAoK CWlmICgqY3AgPj0gJ2EnICYmICpjcCA8PSAneicgJiYgY3BbMV0gPj0gJ2EnICYmIGNwWzFdIDw9 ICd6JyAmJgoJCSgoX19jdHlwZV9iWyhpbnQpICggKCBjcFsyXSApICldICYgKHVuc2lnbmVkIHNo b3J0IGludCkgICBfSVNzcGFjZSApICAgfHwgY3BbMl0gPT0gJ1wwJykpIHsKCSAgICBzd2l0Y2gg KCgoICpjcCApIDw8IDggfCAoICBjcFsxXSApKSApIHsKCQljYXNlICgoICdwJyApIDw8IDggfCAo ICduJyApKSA6IHNldF9wZW5fc2l6ZShjcCArIDIpOyByZXR1cm47CgkJY2FzZSAoKCAnZicgKSA8 PCA4IHwgKCAncCcgKSkgOiBmbHVzaF9wYXRoKCk7IHJldHVybjsKCQljYXNlICgoICdkJyApIDw8 IDggfCAoICdhJyApKSA6IGZsdXNoX2Rhc2hlZChjcCArIDIsIDAgKTsgcmV0dXJuOwoJCWNhc2Ug KCggJ2QnICkgPDwgOCB8ICggJ3QnICkpIDogZmx1c2hfZGFzaGVkKGNwICsgMiwgMSApOyByZXR1 cm47CgkJY2FzZSAoKCAncCcgKSA8PCA4IHwgKCAnYScgKSkgOiBhZGRfcGF0aChjcCArIDIpOyBy ZXR1cm47CgkJY2FzZSAoKCAnYScgKSA8PCA4IHwgKCAncicgKSkgOiBhcmMoY3AgKyAyLCAwICk7 IHJldHVybjsKCQljYXNlICgoICdpJyApIDw8IDggfCAoICdhJyApKSA6IGFyYyhjcCArIDIsIDEg KTsgcmV0dXJuOwoJCWNhc2UgKCggJ3MnICkgPDwgOCB8ICggJ3AnICkpIDogZmx1c2hfc3BsaW5l KCk7IHJldHVybjsKCQljYXNlICgoICdzJyApIDw8IDggfCAoICdoJyApKSA6IHNoYWRlX2xhc3Qo KTsgcmV0dXJuOwoJCWNhc2UgKCggJ3cnICkgPDwgOCB8ICggJ2gnICkpIDogd2hpdGVuX2xhc3Qo KTsgcmV0dXJuOwoJCWNhc2UgKCggJ2InICkgPDwgOCB8ICggJ2snICkpIDogYmxhY2tlbl9sYXN0 KCk7IHJldHVybjsKCQljYXNlICgoICdpJyApIDw8IDggfCAoICdwJyApKSA6ICAKCQkgICAgcGF0 aF9sZW4gPSAwOyByZXR1cm47CgkgICAgfQoJfQoKCWlmICh3YXJuX3NwZWNfbm93KQoJICAgICh2 b2lkKSBmcHJpbnRmICgoKF9JT19GSUxFKikoJl9JT19zdGRlcnJfKSkgICwgIiVzOiAgc3BlY2lh bCBcIiVzXCIgbm90IGltcGxlbWVudGVkXG4iLCBwcm9nLCBjcCk7Cn0KCgoKCnZvaWQKc2Nhbl9z cGVjaWFsKGNwKQoJY2hhcgkqY3A7CnsKCWNoYXIJKnA7CgoJIAoJd2hpbGUgKCpjcCA9PSAnICcg fHwgKmNwID09ICdcdCcpICsrY3A7CgoJaWYgKGRlYnVnICYgNjQgKQoJICAgICh2b2lkKSBwcmlu dGYgKCJTY2FubmluZyBzcGVjaWFsIGAlcycuXG4iLCBjcCk7CgoJaWYgKCpjcCA9PSAnIScpCgkg ICAgc2Nhbl9iYW5nKGNwKTsKCWVsc2UgaWYgKG1lbWljbXAoY3AsICJoZWFkZXIiLCA2KSA9PSAw CgkgICYmIChwID0gZW5kb2Zjb21tYW5kKGNwICsgNikpICE9ICgodm9pZCAqKTApICkKCSAgICBz Y2FuX2hlYWRlcihwKTsKfQoK --Boundary-=_BbmQBhCDarzOwKkYHIDdqSCDXrJm--