public inbox for gcc-prs@sourceware.org help / color / mirror / Atom feed
From: oldham@codesourcery.com To: gcc-gnats@gcc.gnu.org Subject: c++/9464: ICE on missing typename Date: Mon, 27 Jan 2003 19:56:00 -0000 [thread overview] Message-ID: <20030127195254.8825.qmail@sources.redhat.com> (raw) >Number: 9464 >Category: c++ >Synopsis: ICE on missing typename >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: ice-on-illegal-code >Submitter-Id: net >Arrival-Date: Mon Jan 27 19:56:00 UTC 2003 >Closed-Date: >Last-Modified: >Originator: Jeffrey D. Oldham >Release: head >Organization: >Environment: Red Hat Linux release 7.2 (Enigma) i686-pc-linux-gnu) >Description: ICE on code that is missing a 'typename'. Inclding the 'typename' obviates the problem. The program is small: // Compiling this program causes an internal_compilation_error. The // program is missing a 'typename'. Compiling with '-DAVOID_ERROR' // causes the missing 'typename' to be included and the compilation // succeeds. #include <vector> template<class T> struct CreateLeaf {}; template<class T> struct CreateLeaf<std::vector<T> > { #ifdef AVOID_ERROR typedef typename std::vector<T>::const_iterator Leaf_t; #else // erroneous typedef std::vector<T>::const_iterator Leaf_t; #endif // AVOID_ERROR }; >How-To-Repeat: /home/oldham/gcc-install/gcc1/lib/gcc-lib/i686-pc-linux-gnu/3.4/cc1plus -fpreprocessed goo.ii -quiet -dumpbase goo.C -auxbase goo -Wall -pedantic -version -o goo.s >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="goo.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="goo.ii" IyAxICJnb28uQyIKIyAxICI8YnVpbHQtaW4+IgojIDEgIjxjb21tYW5kIGxpbmU+IgojIDEgImdv by5DIgoKCgoKCiMgMSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysv My40L3ZlY3RvciIgMSAzCiMgNjUgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1 ZGUvYysrLzMuNC92ZWN0b3IiIDMKCiMgMSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEv aW5jbHVkZS9jKysvMy40L2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi9ob21lL29sZGhh bS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMK IyAxICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvZXhjZXB0 aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2lu Y2x1ZGUvYysrLzMuNC9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7Cgog IHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19i YWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9p ZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vy cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25z dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNo YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3Mp OwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9p ZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190 aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVy Zmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3df ZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNv bnN0IGNoYXIqIF9fcyk7Cn0KIyA2NyAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5j bHVkZS9jKysvMy40L3ZlY3RvciIgMiAzCiMgMSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2dj YzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2FsZ29iYXNlLmgiIDEgMwojIDY0ICIvaG9tZS9v bGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfYWxnb2Jhc2Uu aCIgMwojIDEgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9p Njg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAzNCAiL2hvbWUvb2xkaGFt L2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2k2ODYtcGMtbGludXgtZ251L2JpdHMv YysrY29uZmlnLmgiIDMKIyAxICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRl L2MrKy8zLjQvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9vc19kZWZpbmVzLmgiIDEgMwojIDM5ICIv aG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvaTY4Ni1wYy1saW51 eC1nbnUvYml0cy9vc19kZWZpbmVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIg MSAzIDQKIyAyODMgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzIDQKIyAxICIvdXNyL2luY2x1 ZGUvc3lzL2NkZWZzLmgiIDEgMyA0CiMgMjg0ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAz IDQKIyAzMTIgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUv Z251L3N0dWJzLmgiIDEgMyA0CiMgMzEzICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzIDQK IyA0MCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2k2ODYt cGMtbGludXgtZ251L2JpdHMvb3NfZGVmaW5lcy5oIiAyIDMKIyAzNSAiL2hvbWUvb2xkaGFtL2dj Yy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysr Y29uZmlnLmgiIDIgMwojIDY1ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRl L2MrKy8zLjQvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL2hvbWUvb2xkaGFtL2djYy1p bnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2NzdHJpbmciIDEgMwojIDQ4ICIvaG9tZS9vbGRo YW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvY3N0cmluZyIgMwoKIyAxICIvaG9t ZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvY3N0ZGRlZiIgMSAzCiMg NDcgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9jc3RkZGVm IiAzCgojIDEgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2xpYi9nY2MtbGliL2k2ODYt cGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDE1MSAiL2hvbWUvb2xk aGFtL2djYy1pbnN0YWxsL2djYzEvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2lu Y2x1ZGUvc3RkZGVmLmgiIDMgNAp0eXBlZGVmIGludCBwdHJkaWZmX3Q7CiMgMjEzICIvaG9tZS9v bGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQv aW5jbHVkZS9zdGRkZWYuaCIgMyA0CnR5cGVkZWYgdW5zaWduZWQgaW50IHNpemVfdDsKIyA0OSAi L2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2NzdGRkZWYiIDIg MwoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpwdHJkaWZmX3Q7CiAgdXNpbmcgOjpzaXplX3Q7 Cn0KIyA1MCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2Nz dHJpbmciIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMyA0CiMgMjggIi91c3Iv aW5jbHVkZS9zdHJpbmcuaCIgMyA0CmV4dGVybiAiQyIgewoKCgoKIyAxICIvaG9tZS9vbGRoYW0v Z2NjLWluc3RhbGwvZ2NjMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVk ZS9zdGRkZWYuaCIgMSAzIDQKIyAzNCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMgNAoKCgpl eHRlcm4gdm9pZCAqbWVtY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJv dyAoKTsKCgpleHRlcm4gdm9pZCAqbWVtbW92ZSAodm9pZCAqX19kZXN0LCBfX2NvbnN0IHZvaWQg Kl9fc3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkICptZW1j Y3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9f c3JjLAogICAgICAgICAgICAgICAgICAgICAgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICB0aHJv dyAoKTsKCgoKCmV4dGVybiB2b2lkICptZW1zZXQgKHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90 IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBtZW1jbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwg X19jb25zdCB2b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB2b2lkICptZW1jaHIgKF9fY29uc3Qgdm9pZCAqX19z LCBpbnQgX19jLCBzaXplX3QgX19uKQogICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w dXJlX18pKTsKCgoKCmV4dGVybiB2b2lkICpyYXdtZW1jaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBp bnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gdm9p ZCAqbWVtcmNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAg IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0 cmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X3NyYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHJuY3B5IChjaGFyICpfX3Jlc3Ry aWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnN0cmNhdCAoY2hh ciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAg ICB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHJuY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVz dCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLAogICAgICAgICAgICAgICAgICAgICAg c2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzdHJjbXAgKF9fY29uc3QgY2hhciAq X19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X3B1cmVfXykpOwoKZXh0ZXJuIGludCBzdHJuY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29u c3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19wdXJlX18pKTsKCgpleHRlcm4gaW50IHN0cmNvbGwgKF9fY29uc3QgY2hhciAqX19zMSwgX19j b25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp OwoKZXh0ZXJuIHNpemVfdCBzdHJ4ZnJtIChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBf X24pIHRocm93ICgpOwoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMSAzIDQKIyAy OCAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMyA0CnR5cGVkZWYgc3RydWN0IF9fbG9jYWxlX3N0 cnVjdAp7CgogIHN0cnVjdCBsb2NhbGVfZGF0YSAqX19sb2NhbGVzWzEzXTsKCgogIGNvbnN0IHVu c2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOwogIGNvbnN0IGludCAqX19jdHlwZV90b2xvd2Vy OwogIGNvbnN0IGludCAqX19jdHlwZV90b3VwcGVyOwp9ICpfX2xvY2FsZV90OwojIDEwOSAiL3Vz ci9pbmNsdWRlL3N0cmluZy5oIiAyIDMgNAoKCmV4dGVybiBpbnQgX19zdHJjb2xsX2wgKF9fY29u c3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBfX2xvY2FsZV90IF9fbCkKICAgICB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBzaXplX3QgX19zdHJ4 ZnJtX2wgKGNoYXIgKl9fZGVzdCwgX19jb25zdCBjaGFyICpfX3NyYywgc2l6ZV90IF9fbiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2wpIHRocm93ICgpOwoKCgoKZXh0 ZXJuIGNoYXIgKnN0cmR1cCAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX21hbGxvY19fKSk7CgoKCgoKCmV4dGVybiBjaGFyICpzdHJuZHVwIChfX2NvbnN0IGNo YXIgKl9fc3RyaW5nLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X21hbGxvY19fKSk7CiMgMTU1ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMgNApleHRlcm4gY2hh ciAqc3RyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3RycmNociAoX19jb25zdCBjaGFyICpf X3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0 ZXJuIGNoYXIgKnN0cmNocm51bCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJjc3BuIChf X2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX3JlamVjdCkKICAgICB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gc2l6ZV90IHN0cnNwbiAoX19jb25z dCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3RycGJyayAoX19jb25zdCBjaGFy ICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3Ryc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5 c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBjaGFyICpzdHJjYXNlc3RyIChfX2NvbnN0IGNoYXIg Kl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpCiAgICAgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBjaGFyICpzdHJ0b2sgKGNoYXIgKl9fcmVz dHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkKICAgICB0aHJvdyAo KTsKCgoKZXh0ZXJuIGNoYXIgKl9fc3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAg ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAg ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSB0aHJv dyAoKTsKCmV4dGVybiBjaGFyICpzdHJ0b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIg KipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gdm9pZCAqbWVt bWVtIChfX2NvbnN0IHZvaWQgKl9faGF5c3RhY2ssIHNpemVfdCBfX2hheXN0YWNrbGVuLAogICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fbmVlZGxlLCBzaXplX3QgX19uZWVkbGVs ZW4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiB2 b2lkICpfX21lbXBjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93 ICgpOwpleHRlcm4gdm9pZCAqbWVtcGNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBf X24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJsZW4gKF9fY29uc3QgY2hhciAqX19z KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBzaXplX3Qg c3RybmxlbiAoX19jb25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9fbWF4bGVuKQogICAgIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmVy cm9yIChpbnQgX19lcnJudW0pIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqc3RyZXJyb3JfciAo aW50IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKCgoK CmV4dGVybiB2b2lkIF9fYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoK CmV4dGVybiB2b2lkIGJjb3B5IChfX2NvbnN0IHZvaWQgKl9fc3JjLCB2b2lkICpfX2Rlc3QsIHNp emVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGJ6ZXJvICh2b2lkICpfX3MsIHNpemVf dCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgYmNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBf X2NvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywg aW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNo YXIgKnJpbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gaW50IGZmcyAoaW50IF9faSkgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBmZnNsIChsb25nIGlu dCBfX2wpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9u X18gZXh0ZXJuIGludCBmZnNsbCAobG9uZyBsb25nIGludCBfX2xsKQogICAgIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgc3RyY2FzZWNtcCAoX19j b25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCBzdHJuY2FzZWNtcCAoX19jb25zdCBj aGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIGludCBfX3N0cmNhc2VjbXBf bCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X3B1cmVfXykpOwoKZXh0ZXJuIGludCBfX3N0cm5jYXNlY21wX2wgKF9fY29uc3QgY2hhciAqX19z MSwgX19jb25zdCBjaGFyICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90 IF9fbiwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w dXJlX18pKTsKCgoKCgpleHRlcm4gY2hhciAqc3Ryc2VwIChjaGFyICoqX19yZXN0cmljdCBfX3N0 cmluZ3AsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Rl bGltKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc3RydmVyc2NtcCAoX19jb25zdCBjaGFyICpf X3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f cHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKnN0cnNpZ25hbCAoaW50IF9fc2lnKSB0aHJvdyAoKTsK CgpleHRlcm4gY2hhciAqX19zdHBjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpzdHBj cHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19z cmMpCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpfX3N0cG5jcHkgKGNoYXIgKl9fcmVz dHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwpleHRlcm4gY2hhciAqc3RwbmNweSAo Y2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBjaGFy ICpzdHJmcnkgKGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCAqbWVtZnJv YiAodm9pZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmJh c2VuYW1lIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIHRocm93ICgpOwojIDM2NCAiL3Vzci9p bmNsdWRlL3N0cmluZy5oIiAzIDQKfQojIDUyICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2Nj MS9pbmNsdWRlL2MrKy8zLjQvY3N0cmluZyIgMiAzCiMgNzcgIi9ob21lL29sZGhhbS9nY2MtaW5z dGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9jc3RyaW5nIiAzCm5hbWVzcGFjZSBzdGQKewogIHVz aW5nIDo6bWVtY3B5OwogIHVzaW5nIDo6bWVtbW92ZTsKICB1c2luZyA6OnN0cmNweTsKICB1c2lu ZyA6OnN0cm5jcHk7CiAgdXNpbmcgOjpzdHJjYXQ7CiAgdXNpbmcgOjpzdHJuY2F0OwogIHVzaW5n IDo6bWVtY21wOwogIHVzaW5nIDo6c3RyY21wOwogIHVzaW5nIDo6c3RyY29sbDsKICB1c2luZyA6 OnN0cm5jbXA7CiAgdXNpbmcgOjpzdHJ4ZnJtOwogIHVzaW5nIDo6c3RyY3NwbjsKICB1c2luZyA6 OnN0cnNwbjsKICB1c2luZyA6OnN0cnRvazsKICB1c2luZyA6Om1lbXNldDsKICB1c2luZyA6OnN0 cmVycm9yOwogIHVzaW5nIDo6c3RybGVuOwoKICB1c2luZyA6Om1lbWNocjsKCiAgaW5saW5lIHZv aWQqCiAgbWVtY2hyKHZvaWQqIF9fcCwgaW50IF9fYywgc2l6ZV90IF9fbikKICB7IHJldHVybiBt ZW1jaHIoY29uc3RfY2FzdDxjb25zdCB2b2lkKj4oX19wKSwgX19jLCBfX24pOyB9CgogIHVzaW5n IDo6c3RyY2hyOwoKICBpbmxpbmUgY2hhcioKICBzdHJjaHIoY2hhciogX19zMSwgaW50IF9fbikK ICB7IHJldHVybiBfX2J1aWx0aW5fc3RyY2hyKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEp LCBfX24pOyB9CgogIHVzaW5nIDo6c3RycGJyazsKCiAgaW5saW5lIGNoYXIqCiAgc3RycGJyayhj aGFyKiBfX3MxLCBjb25zdCBjaGFyKiBfX3MyKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJwYnJr KGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX3MyKTsgfQoKICB1c2luZyA6OnN0cnJj aHI7CgogIGlubGluZSBjaGFyKgogIHN0cnJjaHIoY2hhciogX19zMSwgaW50IF9fbikKICB7IHJl dHVybiBfX2J1aWx0aW5fc3RycmNocihjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19u KTsgfQoKICB1c2luZyA6OnN0cnN0cjsKCiAgaW5saW5lIGNoYXIqCiAgc3Ryc3RyKGNoYXIqIF9f czEsIGNvbnN0IGNoYXIqIF9fczIpCiAgeyByZXR1cm4gX19idWlsdGluX3N0cnN0cihjb25zdF9j YXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19zMik7IH0KfQojIDY2ICIvaG9tZS9vbGRoYW0vZ2Nj LWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMg MSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2NsaW1pdHMi IDEgMwojIDQ4ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQv Y2xpbWl0cyIgMwoKIyAxICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9saWIvZ2NjLWxp Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9saW1pdHMuaCIgMSAzIDQKIyAxMSAiL2hv bWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv My40L2luY2x1ZGUvbGltaXRzLmgiIDMgNAojIDEgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9n Y2MxL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3N5c2xpbWl0cy5o IiAxIDMgNAoKCgoKCgojIDEgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2xpYi9nY2Mt bGliL2k2ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRlL2xpbWl0cy5oIiAxIDMgNAojIDEyMiAi L2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n bnUvMy40L2luY2x1ZGUvbGltaXRzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIg MSAzIDQKIyAxNDQgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRl L2JpdHMvcG9zaXgxX2xpbS5oIiAxIDMgNAojIDEyNiAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgx X2xpbS5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMSAzIDQKIyAz NiAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9s aW51eC9saW1pdHMuaCIgMSAzIDQKIyAzNyAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgi IDIgMyA0CiMgMTI3ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDIgMyA0CiMgMTQ1 ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMyA0CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv cG9zaXgyX2xpbS5oIiAxIDMgNAojIDE0OSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMgNAoK CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAxIDMgNAojIDM0ICIvdXNyL2lu Y2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW9f bGltLmgiIDEgMyA0CiMgMzUgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAyIDMgNAoj IDE1MyAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMgNAojIDEyMyAiL2hvbWUvb2xkaGFtL2dj Yy1pbnN0YWxsL2djYzEvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUv bGltaXRzLmgiIDIgMyA0CiMgOCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvbGliL2dj Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvc3lzbGltaXRzLmgiIDIgMyA0CiMg MTIgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu dXgtZ251LzMuNC9pbmNsdWRlL2xpbWl0cy5oIiAyIDMgNAojIDUwICIvaG9tZS9vbGRoYW0vZ2Nj LWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvY2xpbWl0cyIgMiAzCiMgNjcgIi9ob21lL29s ZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdvYmFzZS5o IiAyIDMKIyAxICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQv Y3N0ZGxpYiIgMSAzCiMgNDggIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUv YysrLzMuNC9jc3RkbGliIiAzCgoKCgojIDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMSAzIDQK IyAzMyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKIyAxICIvaG9tZS9vbGRoYW0vZ2NjLWlu c3RhbGwvZ2NjMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9zdGRk ZWYuaCIgMSAzIDQKIyAzNCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMgNAoKZXh0ZXJuICJD IiB7CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2FpdGZsYWdzLmgiIDEgMyA0CiMgNDMg Ii91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93YWl0 c3RhdHVzLmgiIDEgMyA0CiMgNjMgIi91c3IvaW5jbHVkZS9iaXRzL3dhaXRzdGF0dXMuaCIgMyA0 CiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMgNAojIDM3ICIvdXNyL2luY2x1ZGUvZW5k aWFuLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2VuZGlhbi5oIiAxIDMgNAojIDM4ICIv dXNyL2luY2x1ZGUvZW5kaWFuLmgiIDIgMyA0CiMgNjQgIi91c3IvaW5jbHVkZS9iaXRzL3dhaXRz dGF0dXMuaCIgMiAzIDQKCnVuaW9uIHdhaXQKICB7CiAgICBpbnQgd19zdGF0dXM7CiAgICBzdHJ1 Y3QKICAgICAgewoKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3Rlcm1zaWc6NzsKICAgICAgICB1 bnNpZ25lZCBpbnQgX193X2NvcmVkdW1wOjE7CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19yZXRj b2RlOjg7CiAgICAgICAgdW5zaWduZWQgaW50OjE2OwoKCgoKCgoKICAgICAgfSBfX3dhaXRfdGVy bWluYXRlZDsKICAgIHN0cnVjdAogICAgICB7CgogICAgICAgIHVuc2lnbmVkIGludCBfX3dfc3Rv cHZhbDo4OwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfc3RvcHNpZzo4OwogICAgICAgIHVuc2ln bmVkIGludDoxNjsKCgoKCgoKICAgICAgfSBfX3dhaXRfc3RvcHBlZDsKICB9OwojIDQ0ICIvdXNy L2luY2x1ZGUvc3RkbGliLmgiIDIgMyA0CiMgOTQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0 CnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IHF1b3Q7CiAgICBpbnQgcmVtOwogIH0gZGl2X3Q7 CgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgbG9uZyBpbnQgcXVvdDsKICAgIGxvbmcgaW50IHJl bTsKICB9IGxkaXZfdDsKCgoKCgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc3RydWN0CiAgewogICAg bG9uZyBsb25nIGludCBxdW90OwogICAgbG9uZyBsb25nIGludCByZW07CiAgfSBsbGRpdl90Owoj IDEzMyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKZXh0ZXJuIHNpemVfdCBfX2N0eXBlX2dl dF9tYl9jdXJfbWF4ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBhdG9mIChfX2Nv bnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7Cgpl eHRlcm4gaW50IGF0b2kgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBsb25nIGludCBhdG9sIChfX2NvbnN0IGNoYXIgKl9f bnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCl9fZXh0ZW5zaW9u X18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQgYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRyKQogICAg IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gZG91YmxlIHN0 cnRvZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg ICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0 IHN0cnRvZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcg ZG91YmxlIHN0cnRvbGQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7 CgoKCmV4dGVybiBsb25nIGludCBzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w dHIsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBp bnQgX19iYXNlKSB0aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3VsIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhy b3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9xIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCl9fZXh0 ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91cSAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cg KCk7CgoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbCAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKX19l eHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VsbCAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRo cm93ICgpOwojIDIxNSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKZXh0ZXJuIGxvbmcgaW50 IF9fc3RydG9sX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoK ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fc3RydG91bF9sIChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg KipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKX19leHRlbnNpb25f XwpleHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jl c3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1 bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgp OwoKZXh0ZXJuIGRvdWJsZSBfX3N0cnRvZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy LCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IF9fc3RydG9m X2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cg KCk7CgpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xkX2wgKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz dHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVf dCBfX2xvYykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgX19zdHJ0b2RfaW50ZXJuYWwg KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0 aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipf X3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGxv bmcgZG91YmxlIF9fc3RydG9sZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz dHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBfX2dyb3VwKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGludCBfX3N0cnRvbF9pbnRlcm5hbCAo X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCmV4 dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3N0cnRvdWxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7 CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fc3RydG9sbF9pbnRlcm5h bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkg dGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQg X19zdHJ0b3VsbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICoKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry aWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKIyAzODQgIi91 c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CmV4dGVybiBjaGFyICpsNjRhIChsb25nIGludCBfX24p IHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBhNjRsIChfX2NvbnN0IGNoYXIgKl9fcykgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKIyAxICIvdXNyL2luY2x1ZGUvc3lz L3R5cGVzLmgiIDEgMyA0CiMgMjggIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CmV4dGVy biAiQyIgewoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMgNAojIDI5ICIvdXNy L2luY2x1ZGUvYml0cy90eXBlcy5oIiAzIDQKIyAxICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwv Z2NjMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9zdGRkZWYuaCIg MSAzIDQKIyAzMCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzIDQKCgp0eXBlZGVmIHVu c2lnbmVkIGNoYXIgX191X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191X3Nob3J0Owp0 eXBlZGVmIHVuc2lnbmVkIGludCBfX3VfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX191X2xv bmc7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VfcXVh ZF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIGludCBfX3F1YWRfdDsKIyA0OSAi L3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgc2lnbmVkIGNoYXIgX19pbnQ4 X3Q7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0 IGludCBfX2ludDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7CnR5 cGVkZWYgc2lnbmVkIGludCBfX2ludDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWludDMy X3Q7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19pbnQ2NF90 OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VpbnQ2NF90 OwoKdHlwZWRlZiBfX3F1YWRfdCAqX19xYWRkcl90OwoKdHlwZWRlZiBfX3VfcXVhZF90IF9fZGV2 X3Q7CnR5cGVkZWYgX191X2ludCBfX3VpZF90Owp0eXBlZGVmIF9fdV9pbnQgX19naWRfdDsKdHlw ZWRlZiBfX3VfbG9uZyBfX2lub190Owp0eXBlZGVmIF9fdV9pbnQgX19tb2RlX3Q7CnR5cGVkZWYg X191X2ludCBfX25saW5rX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19vZmZfdDsKdHlwZWRlZiBfX3F1 YWRfdCBfX2xvZmZfdDsKdHlwZWRlZiBpbnQgX19waWRfdDsKdHlwZWRlZiBpbnQgX19zc2l6ZV90 Owp0eXBlZGVmIF9fdV9sb25nIF9fcmxpbV90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19ybGltNjRf dDsKdHlwZWRlZiBfX3VfaW50IF9faWRfdDsKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IF9f dmFsWzJdOwogIH0gX19mc2lkX3Q7CgoKdHlwZWRlZiBpbnQgX19kYWRkcl90Owp0eXBlZGVmIGNo YXIgKl9fY2FkZHJfdDsKdHlwZWRlZiBsb25nIGludCBfX3RpbWVfdDsKdHlwZWRlZiB1bnNpZ25l ZCBpbnQgX191c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3VzZWNvbmRzX3Q7CnR5cGVk ZWYgbG9uZyBpbnQgX19zd2Jsa190OwoKdHlwZWRlZiBsb25nIGludCBfX2Nsb2NrX3Q7CgoKdHlw ZWRlZiBpbnQgX19jbG9ja2lkX3Q7CgoKdHlwZWRlZiBpbnQgX190aW1lcl90OwoKCgoKCgp0eXBl ZGVmIGludCBfX2tleV90OwoKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9faXBjX3BpZF90 OwoKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrc2l6ZV90OwoKCgoKdHlwZWRlZiBsb25nIGludCBf X2Jsa2NudF90Owp0eXBlZGVmIF9fcXVhZF90IF9fYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9s b25nIF9fZnNibGtjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoKCnR5 cGVkZWYgX191X2xvbmcgX19mc2ZpbGNudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNu dDY0X3Q7CgoKdHlwZWRlZiBfX3VfcXVhZF90IF9faW5vNjRfdDsKCgp0eXBlZGVmIF9fbG9mZl90 IF9fb2ZmNjRfdDsKCgp0eXBlZGVmIGxvbmcgaW50IF9fdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNp Z25lZCBsb25nIGludCBfX3RfdXNjYWxhcl90OwoKCnR5cGVkZWYgaW50IF9faW50cHRyX3Q7CgoK dHlwZWRlZiB1bnNpZ25lZCBpbnQgX19zb2NrbGVuX3Q7CgoKCgojIDEgIi91c3IvaW5jbHVkZS9i aXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMgNAojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFk dHlwZXMuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMSAzIDQKIyA2OCAi L3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMyA0CnN0cnVjdCBfX3NjaGVkX3BhcmFtCiAgewog ICAgaW50IF9fc2NoZWRfcHJpb3JpdHk7CiAgfTsKIyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRo cmVhZHR5cGVzLmgiIDIgMyA0CgoKc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrCnsKICBsb25nIGlu dCBfX3N0YXR1czsKICBpbnQgX19zcGlubG9jazsKCn07CgoKCnR5cGVkZWYgc3RydWN0IF9wdGhy ZWFkX2Rlc2NyX3N0cnVjdCAqX3B0aHJlYWRfZGVzY3I7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX19w dGhyZWFkX2F0dHJfcwp7CiAgaW50IF9fZGV0YWNoc3RhdGU7CiAgaW50IF9fc2NoZWRwb2xpY3k7 CiAgc3RydWN0IF9fc2NoZWRfcGFyYW0gX19zY2hlZHBhcmFtOwogIGludCBfX2luaGVyaXRzY2hl ZDsKICBpbnQgX19zY29wZTsKICBzaXplX3QgX19ndWFyZHNpemU7CiAgaW50IF9fc3RhY2thZGRy X3NldDsKICB2b2lkICpfX3N0YWNrYWRkcjsKICBzaXplX3QgX19zdGFja3NpemU7Cn0gcHRocmVh ZF9hdHRyX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sg X19jX2xvY2s7CiAgX3B0aHJlYWRfZGVzY3IgX19jX3dhaXRpbmc7Cn0gcHRocmVhZF9jb25kX3Q7 CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19kdW1teTsKfSBwdGhyZWFkX2NvbmRhdHRyX3Q7 CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgcHRocmVhZF9rZXlfdDsKCgoKCgp0eXBlZGVmIHN0cnVj dAp7CiAgaW50IF9fbV9yZXNlcnZlZDsKICBpbnQgX19tX2NvdW50OwogIF9wdGhyZWFkX2Rlc2Ny IF9fbV9vd25lcjsKICBpbnQgX19tX2tpbmQ7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9f bV9sb2NrOwp9IHB0aHJlYWRfbXV0ZXhfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX211 dGV4a2luZDsKfSBwdGhyZWFkX211dGV4YXR0cl90OwoKCgp0eXBlZGVmIGludCBwdGhyZWFkX29u Y2VfdDsKCgoKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX3J3bG9ja190CnsKICBzdHJ1Y3QgX3B0 aHJlYWRfZmFzdGxvY2sgX19yd19sb2NrOwogIGludCBfX3J3X3JlYWRlcnM7CiAgX3B0aHJlYWRf ZGVzY3IgX19yd193cml0ZXI7CiAgX3B0aHJlYWRfZGVzY3IgX19yd19yZWFkX3dhaXRpbmc7CiAg X3B0aHJlYWRfZGVzY3IgX19yd193cml0ZV93YWl0aW5nOwogIGludCBfX3J3X2tpbmQ7CiAgaW50 IF9fcndfcHNoYXJlZDsKfSBwdGhyZWFkX3J3bG9ja190OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAg aW50IF9fbG9ja2tpbmQ7CiAgaW50IF9fcHNoYXJlZDsKfSBwdGhyZWFkX3J3bG9ja2F0dHJfdDsK CgoKCnR5cGVkZWYgdm9sYXRpbGUgaW50IHB0aHJlYWRfc3BpbmxvY2tfdDsKCgp0eXBlZGVmIHN0 cnVjdCB7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fYmFfbG9jazsKICBpbnQgX19iYV9y ZXF1aXJlZDsKICBpbnQgX19iYV9wcmVzZW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fYmFfd2FpdGlu ZzsKfSBwdGhyZWFkX2JhcnJpZXJfdDsKCgp0eXBlZGVmIHN0cnVjdCB7CiAgaW50IF9fcHNoYXJl ZDsKfSBwdGhyZWFkX2JhcnJpZXJhdHRyX3Q7CgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGlu dCBwdGhyZWFkX3Q7CiMgMTQ0ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMgNAojIDMx ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0CgoKCnR5cGVkZWYgX191X2NoYXIgdV9j aGFyOwp0eXBlZGVmIF9fdV9zaG9ydCB1X3Nob3J0Owp0eXBlZGVmIF9fdV9pbnQgdV9pbnQ7CnR5 cGVkZWYgX191X2xvbmcgdV9sb25nOwp0eXBlZGVmIF9fcXVhZF90IHF1YWRfdDsKdHlwZWRlZiBf X3VfcXVhZF90IHVfcXVhZF90Owp0eXBlZGVmIF9fZnNpZF90IGZzaWRfdDsKCgoKCnR5cGVkZWYg X19sb2ZmX3QgbG9mZl90OwoKCgp0eXBlZGVmIF9faW5vX3QgaW5vX3Q7CgoKCgoKCnR5cGVkZWYg X19pbm82NF90IGlubzY0X3Q7CgoKCgp0eXBlZGVmIF9fZGV2X3QgZGV2X3Q7CgoKCgp0eXBlZGVm IF9fZ2lkX3QgZ2lkX3Q7CgoKCgp0eXBlZGVmIF9fbW9kZV90IG1vZGVfdDsKCgoKCnR5cGVkZWYg X19ubGlua190IG5saW5rX3Q7CgoKCgp0eXBlZGVmIF9fdWlkX3QgdWlkX3Q7CgoKCgoKdHlwZWRl ZiBfX29mZl90IG9mZl90OwoKCgoKCgp0eXBlZGVmIF9fb2ZmNjRfdCBvZmY2NF90OwoKCgoKdHlw ZWRlZiBfX3BpZF90IHBpZF90OwoKCgoKdHlwZWRlZiBfX2lkX3QgaWRfdDsKCgoKCnR5cGVkZWYg X19zc2l6ZV90IHNzaXplX3Q7CgoKCgoKdHlwZWRlZiBfX2RhZGRyX3QgZGFkZHJfdDsKdHlwZWRl ZiBfX2NhZGRyX3QgY2FkZHJfdDsKCgoKCgp0eXBlZGVmIF9fa2V5X3Qga2V5X3Q7CiMgMTMyICIv dXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEg MyA0CiMgNTkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNAp0eXBlZGVmIF9fY2xvY2tfdCBjbG9j a190OwojIDcwICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKdHlwZWRlZiBfX3RpbWVfdCB0aW1l X3Q7CiMgODIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNAp0eXBlZGVmIF9fY2xvY2tpZF90IGNs b2NraWRfdDsKIyA5NCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMyA0CnR5cGVkZWYgX190aW1lcl90 IHRpbWVyX3Q7CiMgMTMzICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0CgoKCnR5cGVk ZWYgX191c2Vjb25kc190IHVzZWNvbmRzX3Q7CgoKCnR5cGVkZWYgX19zdXNlY29uZHNfdCBzdXNl Y29uZHNfdDsKCgoKCgojIDEgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2xpYi9nY2Mt bGliL2k2ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDE0NyAi L3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMgNAoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcg aW50IHVsb25nOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1c2hvcnQ7CnR5cGVkZWYgdW5z aWduZWQgaW50IHVpbnQ7CiMgMTkwICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBl ZGVmIGludCBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1FJX18pKSk7CnR5cGVk ZWYgaW50IGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVk ZWYgaW50IGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVk ZWYgaW50IGludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7CgoKdHlw ZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1FJ X18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19t b2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQzMl90IF9fYXR0cmli dXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDY0 X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7Cgp0eXBlZGVmIGludCByZWdp c3Rlcl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX193b3JkX18pKSk7CiMgMjE1ICIvdXNy L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0Lmgi IDEgMyA0CiMgMzEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMgNAojIDEgIi91c3IvaW5j bHVkZS9iaXRzL3NlbGVjdC5oIiAxIDMgNAojIDMyICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5o IiAyIDMgNAoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDEgMyA0CiMgMjMgIi91 c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAzIDQKdHlwZWRlZiBpbnQgX19zaWdfYXRvbWljX3Q7 CgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdmFsWygxMDI0 IC8gKDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpXTsKICB9IF9fc2lnc2V0X3Q7CiMg MzUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMyA0CgoKCnR5cGVkZWYgX19zaWdzZXRf dCBzaWdzZXRfdDsKCgoKCgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMyA0CiMgMTA2ICIv dXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKc3RydWN0IHRpbWVzcGVjCiAgewogICAgX190aW1lX3Qg dHZfc2VjOwogICAgbG9uZyBpbnQgdHZfbnNlYzsKICB9OwojIDQ1ICIvdXNyL2luY2x1ZGUvc3lz L3NlbGVjdC5oIiAyIDMgNAoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDEgMyA0CiMg NjcgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMyA0CnN0cnVjdCB0aW1ldmFsCiAgewogICAg X190aW1lX3QgdHZfc2VjOwogICAgX19zdXNlY29uZHNfdCB0dl91c2VjOwogIH07CiMgNDcgIi91 c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMyA0CiMgNTUgIi91c3IvaW5jbHVkZS9zeXMvc2Vs ZWN0LmgiIDMgNAp0eXBlZGVmIGxvbmcgaW50IF9fZmRfbWFzazsKCgoKCgoKCnR5cGVkZWYgc3Ry dWN0CiAgewoKCgogICAgX19mZF9tYXNrIGZkc19iaXRzWzEwMjQgLyAoOCAqIHNpemVvZiAoX19m ZF9tYXNrKSldOwoKCgoKCiAgfSBmZF9zZXQ7CgoKCgoKCnR5cGVkZWYgX19mZF9tYXNrIGZkX21h c2s7CiMgOTUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMgNApleHRlcm4gIkMiIHsKCgoK CgoKZXh0ZXJuIGludCBzZWxlY3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmljdCBfX3Jl YWRmZHMsCiAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX193cml0ZWZkcywK ICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAg ICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICpfX3Jlc3RyaWN0IF9fdGltZW91dCkgdGhyb3cg KCk7CgoKCgoKZXh0ZXJuIGludCBwc2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQgKl9fcmVzdHJp Y3QgX19yZWFkZmRzLAogICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX3dy aXRlZmRzLAogICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZk cywKICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3Qg X190aW1lb3V0LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fc2lnc2V0X3QgKl9fcmVzdHJp Y3QgX19zaWdtYXNrKSB0aHJvdyAoKTsKCgp9CiMgMjE2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVz LmgiIDIgMyA0CgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3N5c21hY3Jvcy5oIiAxIDMgNAojIDIx OSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMgNAoKCgoKdHlwZWRlZiBfX2Jsa3NpemVf dCBibGtzaXplX3Q7CgoKCgoKCnR5cGVkZWYgX19ibGtjbnRfdCBibGtjbnRfdDsKCgoKdHlwZWRl ZiBfX2ZzYmxrY250X3QgZnNibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzZmlsY250X3QgZnNmaWxj bnRfdDsKIyAyNTcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgX19ibGtj bnQ2NF90IGJsa2NudDY0X3Q7CnR5cGVkZWYgX19mc2Jsa2NudDY0X3QgZnNibGtjbnQ2NF90Owp0 eXBlZGVmIF9fZnNmaWxjbnQ2NF90IGZzZmlsY250NjRfdDsKCgp9CiMgMzkxICIvdXNyL2luY2x1 ZGUvc3RkbGliLmgiIDIgMyA0CgoKCgoKCmV4dGVybiBsb25nIGludCByYW5kb20gKHZvaWQpIHRo cm93ICgpOwoKCmV4dGVybiB2b2lkIHNyYW5kb20gKHVuc2lnbmVkIGludCBfX3NlZWQpIHRocm93 ICgpOwoKCgoKCmV4dGVybiBjaGFyICppbml0c3RhdGUgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNo YXIgKl9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVu KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnNldHN0YXRlIChjaGFyICpfX3N0YXRlYnVmKSB0 aHJvdyAoKTsKCgoKCgoKCnN0cnVjdCByYW5kb21fZGF0YQogIHsKICAgIGludDMyX3QgKmZwdHI7 CiAgICBpbnQzMl90ICpycHRyOwogICAgaW50MzJfdCAqc3RhdGU7CiAgICBpbnQgcmFuZF90eXBl OwogICAgaW50IHJhbmRfZGVnOwogICAgaW50IHJhbmRfc2VwOwogICAgaW50MzJfdCAqZW5kX3B0 cjsKICB9OwoKZXh0ZXJuIGludCByYW5kb21fciAoc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3Ry aWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICpfX3Jlc3RyaWN0IF9fcmVz dWx0KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3JhbmRvbV9yICh1bnNpZ25lZCBpbnQgX19zZWVk LCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgaW5pdHN0 YXRlX3IgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fcmVzdHJpY3QgX19zdGF0ZWJ1ZiwK ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4sCiAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7 CgpleHRlcm4gaW50IHNldHN0YXRlX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zdGF0ZWJ1ZiwKICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYp IHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcmFuZCAodm9pZCkgdGhyb3cgKCk7CgpleHRlcm4g dm9pZCBzcmFuZCAodW5zaWduZWQgaW50IF9fc2VlZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg cmFuZF9yICh1bnNpZ25lZCBpbnQgKl9fc2VlZCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gZG91 YmxlIGRyYW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGVyYW5kNDggKHVuc2ln bmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgbHJh bmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGludCBucmFuZDQ4ICh1bnNpZ25lZCBz aG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IG1yYW5kNDgg KHZvaWQpIHRocm93ICgpOwpleHRlcm4gbG9uZyBpbnQganJhbmQ0OCAodW5zaWduZWQgc2hvcnQg aW50IF9feHN1YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNyYW5kNDggKGxvbmcgaW50 IF9fc2VlZHZhbCkgdGhyb3cgKCk7CmV4dGVybiB1bnNpZ25lZCBzaG9ydCBpbnQgKnNlZWQ0OCAo dW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSkgdGhyb3cgKCk7CmV4dGVybiB2b2lkIGxj b25nNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddKSB0aHJvdyAoKTsKCgoKCgpzdHJ1 Y3QgZHJhbmQ0OF9kYXRhCiAgewogICAgdW5zaWduZWQgc2hvcnQgaW50IF9feFszXTsKICAgIHVu c2lnbmVkIHNob3J0IGludCBfX29sZF94WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fYzsK ICAgIHVuc2lnbmVkIHNob3J0IGludCBfX2luaXQ7CiAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50 IF9fYTsKICB9OwoKCmV4dGVybiBpbnQgZHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpf X3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpfX3Jlc3Ry aWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBlcmFuZDQ4X3IgKHVuc2lnbmVkIHNo b3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhf ZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAq X19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBscmFuZDQ4X3IgKHN0 cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAg ICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQg bnJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAg ICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoK ZXh0ZXJuIGludCBtcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19i dWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3Vs dCkgdGhyb3cgKCk7CmV4dGVybiBpbnQganJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194 c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVz dHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmlj dCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzcmFuZDQ4X3IgKGxvbmcgaW50IF9f c2VlZHZhbCwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpCiAgICAgdGhyb3cgKCk7Cgpl eHRlcm4gaW50IHNlZWQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdLAogICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cgKCk7 CgpleHRlcm4gaW50IGxjb25nNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10sCiAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cg KCk7CiMgNTI3ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNApleHRlcm4gdm9pZCAqbWFsbG9j IChzaXplX3QgX19zaXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoK ZXh0ZXJuIHZvaWQgKmNhbGxvYyAoc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUpCiAgICAg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCgpleHRlcm4gdm9pZCAq cmVhbGxvYyAodm9pZCAqX19wdHIsIHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCBmcmVlICh2b2lkICpfX3B0cikgdGhyb3cg KCk7CgoKCmV4dGVybiB2b2lkIGNmcmVlICh2b2lkICpfX3B0cikgdGhyb3cgKCk7CgoKCiMgMSAi L3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAxIDMgNAojIDI1ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgi IDMgNAojIDEgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2xpYi9nY2MtbGliL2k2ODYt cGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDI2ICIvdXNyL2luY2x1 ZGUvYWxsb2NhLmgiIDIgMyA0CgpleHRlcm4gIkMiIHsKCgoKCgpleHRlcm4gdm9pZCAqYWxsb2Nh IChzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgoKCgp9CiMgNTQ3ICIvdXNyL2luY2x1ZGUvc3Rk bGliLmgiIDIgMyA0CgoKCgpleHRlcm4gdm9pZCAqdmFsbG9jIChzaXplX3QgX19zaXplKSB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKZXh0ZXJuIGludCBwb3NpeF9t ZW1hbGlnbiAodm9pZCAqKl9fbWVtcHRyLCBzaXplX3QgX19hbGlnbm1lbnQsIHNpemVfdCBfX3Np emUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKZXh0ZXJu IHZvaWQgYWJvcnQgKHZvaWQpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18p KTsKCgoKZXh0ZXJuIGludCBhdGV4aXQgKHZvaWQgKCpfX2Z1bmMpICh2b2lkKSkgdGhyb3cgKCk7 CgoKCgpleHRlcm4gaW50IG9uX2V4aXQgKHZvaWQgKCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZv aWQgKl9fYXJnKSwgdm9pZCAqX19hcmcpCiAgICAgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQg ZXhpdCAoaW50IF9fc3RhdHVzKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9f KSk7CgoKCgpleHRlcm4gdm9pZCBfRXhpdCAoaW50IF9fc3RhdHVzKSB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gY2hhciAqZ2V0ZW52IChfX2NvbnN0 IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpfX3NlY3VyZV9nZXRlbnYg KF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB1dGVudiAo Y2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgc2V0ZW52IChfX2NvbnN0 IGNoYXIgKl9fbmFtZSwgX19jb25zdCBjaGFyICpfX3ZhbHVlLCBpbnQgX19yZXBsYWNlKQogICAg IHRocm93ICgpOwoKCmV4dGVybiBpbnQgdW5zZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0 aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBjbGVhcmVudiAodm9pZCkgdGhyb3cgKCk7CiMgNjIz ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNApleHRlcm4gY2hhciAqbWt0ZW1wIChjaGFyICpf X3RlbXBsYXRlKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgbWtzdGVtcCAoY2hhciAqX190 ZW1wbGF0ZSkgdGhyb3cgKCk7CiMgNjQwICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNApleHRl cm4gaW50IG1rc3RlbXA2NCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CiMgNjUwICIvdXNy L2luY2x1ZGUvc3RkbGliLmgiIDMgNApleHRlcm4gY2hhciAqbWtkdGVtcCAoY2hhciAqX190ZW1w bGF0ZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHN5c3RlbSAoX19jb25zdCBjaGFyICpfX2Nv bW1hbmQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqY2Fub25pY2FsaXplX2ZpbGVfbmFt ZSAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwojIDY3MiAiL3Vzci9pbmNsdWRlL3N0 ZGxpYi5oIiAzIDQKZXh0ZXJuIGNoYXIgKnJlYWxwYXRoIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19yZXNv bHZlZCkgdGhyb3cgKCk7CgoKCgoKCnR5cGVkZWYgaW50ICgqX19jb21wYXJfZm5fdCkgKF9fY29u c3Qgdm9pZCAqLCBfX2NvbnN0IHZvaWQgKik7CgoKdHlwZWRlZiBfX2NvbXBhcl9mbl90IGNvbXBh cmlzb25fZm5fdDsKCgoKCgpleHRlcm4gdm9pZCAqYnNlYXJjaCAoX19jb25zdCB2b2lkICpfX2tl eSwgX19jb25zdCB2b2lkICpfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19u bWVtYiwgc2l6ZV90IF9fc2l6ZSwgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiB2 b2lkIHFzb3J0ICh2b2lkICpfX2Jhc2UsIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLAog ICAgICAgICAgICAgICAgICAgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiBpbnQg YWJzIChpbnQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVy biBsb25nIGludCBsYWJzIChsb25nIGludCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxhYnMgKGxv bmcgbG9uZyBpbnQgX194KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsKCgoKCgoKZXh0ZXJuIGRpdl90IGRpdiAoaW50IF9fbnVtZXIsIGludCBfX2Rlbm9tKQogICAg IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxkaXZfdCBsZGl2 IChsb25nIGludCBfX251bWVyLCBsb25nIGludCBfX2Rlbm9tKQogICAgIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxsZGl2X3QgbGxk aXYgKGxvbmcgbG9uZyBpbnQgX19udW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbG9uZyBsb25nIGludCBfX2Rlbm9tKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsKIyA3MjggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CmV4dGVybiBj aGFyICplY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3Qg X19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93 ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmZjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQs IGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3Ry aWN0IF9fc2lnbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZ2N2dCAoZG91YmxlIF9fdmFs dWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIg KnFlY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAg ICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRo cm93ICgpOwpleHRlcm4gY2hhciAqcWZjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25k aWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpf X3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpxZ2N2dCAobG9uZyBkb3Vi bGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRl cm4gaW50IGVjdnRfciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3Ry aWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBj aGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuKSB0 aHJvdyAoKTsKZXh0ZXJuIGludCBmY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQs IGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3Ry aWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgIHNp emVfdCBfX2xlbikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHFlY3Z0X3IgKGxvbmcgZG91YmxlIF9f dmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3Qg X19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwKICAgICAgICAgICAgICAgICAgICBjaGFy ICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwpleHRlcm4gaW50IHFm Y3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAg ICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwKICAg ICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIHRo cm93ICgpOwoKCgoKCgpleHRlcm4gaW50IG1ibGVuIChfX2NvbnN0IGNoYXIgKl9fcywgc2l6ZV90 IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBtYnRvd2MgKHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19wd2MsCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBz aXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHdjdG9tYiAoY2hhciAqX19zLCB3Y2hh cl90IF9fd2NoYXIpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IG1ic3Rvd2NzICh3Y2hhcl90 ICpfX3Jlc3RyaWN0IF9fcHdjcywKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgpleHRlcm4gc2l6ZV90IHdj c3RvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgX19j b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAo KTsKCgoKCgoKCmV4dGVybiBpbnQgcnBtYXRjaCAoX19jb25zdCBjaGFyICpfX3Jlc3BvbnNlKSB0 aHJvdyAoKTsKIyA4MDggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CmV4dGVybiBpbnQgZ2V0 c3Vib3B0IChjaGFyICoqX19yZXN0cmljdCBfX29wdGlvbnAsCiAgICAgICAgICAgICAgICAgICAg ICBjaGFyICpfX2NvbnN0ICpfX3Jlc3RyaWN0IF9fdG9rZW5zLAogICAgICAgICAgICAgICAgICAg ICAgY2hhciAqKl9fcmVzdHJpY3QgX192YWx1ZXApIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lk IHNldGtleSAoX19jb25zdCBjaGFyICpfX2tleSkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50 IHBvc2l4X29wZW5wdCAoaW50IF9fb2ZsYWcpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBn cmFudHB0IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdW5sb2NrcHQgKGludCBf X2ZkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpwdHNuYW1lIChpbnQgX19mZCkgdGhyb3cg KCk7CgoKCgoKCmV4dGVybiBpbnQgcHRzbmFtZV9yIChpbnQgX19mZCwgY2hhciAqX19idWYsIHNp emVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnZXRwdCAodm9pZCkgdGhyb3cg KCk7CgoKCgoKCmV4dGVybiBpbnQgZ2V0bG9hZGF2ZyAoZG91YmxlIF9fbG9hZGF2Z1tdLCBpbnQg X19uZWxlbSkgdGhyb3cgKCk7CgoKCgoKfQojIDUzICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwv Z2NjMS9pbmNsdWRlL2MrKy8zLjQvY3N0ZGxpYiIgMiAzCiMgODQgIi9ob21lL29sZGhhbS9nY2Mt aW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9jc3RkbGliIiAzCm5hbWVzcGFjZSBzdGQKewog IHVzaW5nIDo6ZGl2X3Q7CiAgdXNpbmcgOjpsZGl2X3Q7CgogIHVzaW5nIDo6YWJvcnQ7CiAgdXNp bmcgOjphYnM7CiAgdXNpbmcgOjphdGV4aXQ7CiAgdXNpbmcgOjphdG9mOwogIHVzaW5nIDo6YXRv aTsKICB1c2luZyA6OmF0b2w7CiAgdXNpbmcgOjpic2VhcmNoOwogIHVzaW5nIDo6Y2FsbG9jOwog IHVzaW5nIDo6ZGl2OwogIHVzaW5nIDo6ZXhpdDsKICB1c2luZyA6OmZyZWU7CiAgdXNpbmcgOjpn ZXRlbnY7CiAgdXNpbmcgOjpsYWJzOwogIHVzaW5nIDo6bGRpdjsKICB1c2luZyA6Om1hbGxvYzsK ICB1c2luZyA6Om1ibGVuOwogIHVzaW5nIDo6bWJzdG93Y3M7CiAgdXNpbmcgOjptYnRvd2M7CiAg dXNpbmcgOjpxc29ydDsKICB1c2luZyA6OnJhbmQ7CiAgdXNpbmcgOjpyZWFsbG9jOwogIHVzaW5n IDo6c3JhbmQ7CiAgdXNpbmcgOjpzdHJ0b2Q7CiAgdXNpbmcgOjpzdHJ0b2w7CiAgdXNpbmcgOjpz dHJ0b3VsOwogIHVzaW5nIDo6c3lzdGVtOwogIHVzaW5nIDo6d2NzdG9tYnM7CiAgdXNpbmcgOjp3 Y3RvbWI7CgogIGlubGluZSBsb25nCiAgYWJzKGxvbmcgX19pKSB7IHJldHVybiBsYWJzKF9faSk7 IH0KCiAgaW5saW5lIGxkaXZfdAogIGRpdihsb25nIF9faSwgbG9uZyBfX2opIHsgcmV0dXJuIGxk aXYoX19pLCBfX2opOyB9Cn0KIyAxMzYgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2lu Y2x1ZGUvYysrLzMuNC9jc3RkbGliIiAzCm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHVzaW5nIDo6 bGxkaXZfdDsKICB1c2luZyA6Ol9FeGl0OwoKICBpbmxpbmUgbG9uZyBsb25nCiAgYWJzKGxvbmcg bG9uZyBfX3gpIHsgcmV0dXJuIF9feCA+PSAwID8gX194IDogLV9feDsgfQoKICBpbmxpbmUgbG9u ZyBsb25nCiAgbGxhYnMobG9uZyBsb25nIF9feCkgeyByZXR1cm4gX194ID49IDAgPyBfX3ggOiAt X194OyB9CgogIGlubGluZSBsbGRpdl90CiAgZGl2KGxvbmcgbG9uZyBfX24sIGxvbmcgbG9uZyBf X2QpCiAgeyBsbGRpdl90IF9fcTsgX19xLnF1b3QgPSBfX24gLyBfX2Q7IF9fcS5yZW0gPSBfX24g JSBfX2Q7IHJldHVybiBfX3E7IH0KCiAgaW5saW5lIGxsZGl2X3QKICBsbGRpdihsb25nIGxvbmcg X19uLCBsb25nIGxvbmcgX19kKQogIHsgbGxkaXZfdCBfX3E7IF9fcS5xdW90ID0gX19uIC8gX19k OyBfX3EucmVtID0gX19uICUgX19kOyByZXR1cm4gX19xOyB9CgogIHVzaW5nIDo6YXRvbGw7CiAg dXNpbmcgOjpzdHJ0b2Y7CiAgdXNpbmcgOjpzdHJ0b2xsOwogIHVzaW5nIDo6c3RydG91bGw7CiAg dXNpbmcgOjpzdHJ0b2xkOwp9CgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyBfX2dudV9jeHg6Omxs ZGl2X3Q7CiAgdXNpbmcgX19nbnVfY3h4OjpfRXhpdDsKICB1c2luZyBfX2dudV9jeHg6OmFiczsK ICB1c2luZyBfX2dudV9jeHg6OmxsYWJzOwogIHVzaW5nIF9fZ251X2N4eDo6ZGl2OwogIHVzaW5n IF9fZ251X2N4eDo6bGxkaXY7CiAgdXNpbmcgX19nbnVfY3h4OjphdG9sbDsKICB1c2luZyBfX2du dV9jeHg6OnN0cnRvZjsKICB1c2luZyBfX2dudV9jeHg6OnN0cnRvbGw7CiAgdXNpbmcgX19nbnVf Y3h4OjpzdHJ0b3VsbDsKICB1c2luZyBfX2dudV9jeHg6OnN0cnRvbGQ7Cn0KIyA2OCAiL2hvbWUv b2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2FsZ29iYXNl LmgiIDIgMwoKIyAxICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8z LjQvbmV3IiAxIDMKIyA0MiAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9j KysvMy40L25ldyIgMwojIDEgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUv YysrLzMuNC9leGNlcHRpb24iIDEgMwojIDQwICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2Nj MS9pbmNsdWRlL2MrKy8zLjQvZXhjZXB0aW9uIiAzCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ug c3RkCnsKIyA1MiAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40 L2V4Y2VwdGlvbiIgMwogIGNsYXNzIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBleGNlcHRp b24oKSB0aHJvdygpIHsgfQogICAgdmlydHVhbCB+ZXhjZXB0aW9uKCkgdGhyb3coKTsKCgogICAg dmlydHVhbCBjb25zdCBjaGFyKiB3aGF0KCkgY29uc3QgdGhyb3coKTsKICB9OwoKCgogIGNsYXNz IGJhZF9leGNlcHRpb24gOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF9l eGNlcHRpb24oKSB0aHJvdygpIHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfZXhjZXB0aW9uKCkgdGhy b3coKTsKICB9OwoKCiAgdHlwZWRlZiB2b2lkICgqdGVybWluYXRlX2hhbmRsZXIpICgpOwoKICB0 eXBlZGVmIHZvaWQgKCp1bmV4cGVjdGVkX2hhbmRsZXIpICgpOwoKCiAgdGVybWluYXRlX2hhbmRs ZXIgc2V0X3Rlcm1pbmF0ZSh0ZXJtaW5hdGVfaGFuZGxlcikgdGhyb3coKTsKCgogIHZvaWQgdGVy bWluYXRlKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCiAgdW5leHBlY3RlZF9o YW5kbGVyIHNldF91bmV4cGVjdGVkKHVuZXhwZWN0ZWRfaGFuZGxlcikgdGhyb3coKTsKCgogIHZv aWQgdW5leHBlY3RlZCgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKIyAxMDAgIi9o b21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9leGNlcHRpb24iIDMK ICBib29sIHVuY2F1Z2h0X2V4Y2VwdGlvbigpIHRocm93KCk7Cn0KCm5hbWVzcGFjZSBfX2dudV9j eHgKewojIDExNSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40 L2V4Y2VwdGlvbiIgMwogIHZvaWQgX192ZXJib3NlX3Rlcm1pbmF0ZV9oYW5kbGVyICgpOwp9Cgp9 CiMgNDMgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9uZXci IDIgMwoKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQKewoKCgoKCiAgY2xhc3MgYmFkX2Fs bG9jIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfYWxsb2MoKSB0aHJv dygpIHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfYWxsb2MoKSB0aHJvdygpOwogIH07CgogIHN0cnVj dCBub3Rocm93X3QgeyB9OwogIGV4dGVybiBjb25zdCBub3Rocm93X3Qgbm90aHJvdzsKCgogIHR5 cGVkZWYgdm9pZCAoKm5ld19oYW5kbGVyKSgpOwoKICBuZXdfaGFuZGxlciBzZXRfbmV3X2hhbmRs ZXIobmV3X2hhbmRsZXIpIHRocm93KCk7Cn0KIyA4MiAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxs L2djYzEvaW5jbHVkZS9jKysvMy40L25ldyIgMwp2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXpl X3QpIHRocm93IChzdGQ6OmJhZF9hbGxvYyk7CnZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6 ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxsb2MpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKikg dGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkKikgdGhyb3coKTsKdm9pZCogb3Bl cmF0b3IgbmV3KHN0ZDo6c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZv aWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRo cm93KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYp IHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCosIGNvbnN0IHN0ZDo6bm90aHJv d190JikgdGhyb3coKTsKCgppbmxpbmUgdm9pZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90LCB2 b2lkKiBfX3ApIHRocm93KCkgeyByZXR1cm4gX19wOyB9CmlubGluZSB2b2lkKiBvcGVyYXRvciBu ZXdbXShzdGQ6OnNpemVfdCwgdm9pZCogX19wKSB0aHJvdygpIHsgcmV0dXJuIF9fcDsgfQoKCmlu bGluZSB2b2lkIG9wZXJhdG9yIGRlbGV0ZSAodm9pZCosIHZvaWQqKSB0aHJvdygpIHsgfQppbmxp bmUgdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkKiwgdm9pZCopIHRocm93KCkgeyB9Cgp9CiMg NzAgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0 bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNs dWRlL2MrKy8zLjQvaW9zZndkIiAxIDMKIyA0NCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2dj YzEvaW5jbHVkZS9jKysvMy40L2lvc2Z3ZCIgMwoKCiMgMSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0 YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrbG9jYWxl LmgiIDEgMwojIDQwICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8z LjQvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytsb2NhbGUuaCIgMwoKIyAxICIvaG9tZS9vbGRo YW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvY2xvY2FsZSIgMSAzCiMgNDggIi9o b21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9jbG9jYWxlIiAzCgoj IDEgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMSAzIDQKIyAyOSAiL3Vzci9pbmNsdWRlL2xvY2Fs ZS5oIiAzIDQKIyAxICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAzMCAiL3Vzci9p bmNsdWRlL2xvY2FsZS5oIiAyIDMgNAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsZS5oIiAx IDMgNAojIDI3ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbGUuaCIgMyA0CmVudW0KewogIF9fTENf Q1RZUEUgPSAwLAogIF9fTENfTlVNRVJJQyA9IDEsCiAgX19MQ19USU1FID0gMiwKICBfX0xDX0NP TExBVEUgPSAzLAogIF9fTENfTU9ORVRBUlkgPSA0LAogIF9fTENfTUVTU0FHRVMgPSA1LAogIF9f TENfQUxMID0gNiwKICBfX0xDX1BBUEVSID0gNywKICBfX0xDX05BTUUgPSA4LAogIF9fTENfQURE UkVTUyA9IDksCiAgX19MQ19URUxFUEhPTkUgPSAxMCwKICBfX0xDX01FQVNVUkVNRU5UID0gMTEs CiAgX19MQ19JREVOVElGSUNBVElPTiA9IDEyCn07CiMgMzEgIi91c3IvaW5jbHVkZS9sb2NhbGUu aCIgMiAzIDQKCmV4dGVybiAiQyIgewojIDUyICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMgNApz dHJ1Y3QgbGNvbnYKewoKCiAgY2hhciAqZGVjaW1hbF9wb2ludDsKICBjaGFyICp0aG91c2FuZHNf c2VwOwoKCgoKCiAgY2hhciAqZ3JvdXBpbmc7CgoKCgoKICBjaGFyICppbnRfY3Vycl9zeW1ib2w7 CiAgY2hhciAqY3VycmVuY3lfc3ltYm9sOwogIGNoYXIgKm1vbl9kZWNpbWFsX3BvaW50OwogIGNo YXIgKm1vbl90aG91c2FuZHNfc2VwOwogIGNoYXIgKm1vbl9ncm91cGluZzsKICBjaGFyICpwb3Np dGl2ZV9zaWduOwogIGNoYXIgKm5lZ2F0aXZlX3NpZ247CiAgY2hhciBpbnRfZnJhY19kaWdpdHM7 CiAgY2hhciBmcmFjX2RpZ2l0czsKCiAgY2hhciBwX2NzX3ByZWNlZGVzOwoKICBjaGFyIHBfc2Vw X2J5X3NwYWNlOwoKICBjaGFyIG5fY3NfcHJlY2VkZXM7CgogIGNoYXIgbl9zZXBfYnlfc3BhY2U7 CgoKCgoKCiAgY2hhciBwX3NpZ25fcG9zbjsKICBjaGFyIG5fc2lnbl9wb3NuOwoKCiAgY2hhciBp bnRfcF9jc19wcmVjZWRlczsKCiAgY2hhciBpbnRfcF9zZXBfYnlfc3BhY2U7CgogIGNoYXIgaW50 X25fY3NfcHJlY2VkZXM7CgogIGNoYXIgaW50X25fc2VwX2J5X3NwYWNlOwoKCgoKCgogIGNoYXIg aW50X3Bfc2lnbl9wb3NuOwogIGNoYXIgaW50X25fc2lnbl9wb3NuOwojIDExOSAiL3Vzci9pbmNs dWRlL2xvY2FsZS5oIiAzIDQKfTsKCgoKZXh0ZXJuIGNoYXIgKnNldGxvY2FsZSAoaW50IF9fY2F0 ZWdvcnksIF9fY29uc3QgY2hhciAqX19sb2NhbGUpIHRocm93ICgpOwoKCmV4dGVybiBzdHJ1Y3Qg bGNvbnYgKmxvY2FsZWNvbnYgKHZvaWQpIHRocm93ICgpOwojIDE0OSAiL3Vzci9pbmNsdWRlL2xv Y2FsZS5oIiAzIDQKZXh0ZXJuIF9fbG9jYWxlX3QgX19uZXdsb2NhbGUgKGludCBfX2NhdGVnb3J5 X21hc2ssIF9fY29uc3QgY2hhciAqX19sb2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2xvY2FsZV90IF9fYmFzZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBfX2xvY2FsZV90IF9f ZHVwbG9jYWxlIChfX2xvY2FsZV90IF9fZGF0YXNldCkgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lk IF9fZnJlZWxvY2FsZSAoX19sb2NhbGVfdCBfX2RhdGFzZXQpIHRocm93ICgpOwoKCn0KIyA1MCAi L2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2Nsb2NhbGUiIDIg MwoKCgoKCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6bGNvbnY7CiAgdXNpbmcgOjpzZXRsb2Nh bGU7CiAgdXNpbmcgOjpsb2NhbGVjb252Owp9CiMgNDIgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFs bC9nY2MxL2luY2x1ZGUvYysrLzMuNC9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2xvY2FsZS5o IiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMSAzIDQKIyAyNCAiL3Vzci9pbmNs dWRlL2xhbmdpbmZvLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9ubF90eXBlcy5oIiAxIDMgNAoj IDMxICIvdXNyL2luY2x1ZGUvbmxfdHlwZXMuaCIgMyA0CmV4dGVybiAiQyIgewoKCnR5cGVkZWYg dm9pZCAqbmxfY2F0ZDsKCgp0eXBlZGVmIGludCBubF9pdGVtOwoKCmV4dGVybiBubF9jYXRkIGNh dG9wZW4gKF9fY29uc3QgY2hhciAqX19jYXRfbmFtZSwgaW50IF9fZmxhZykgdGhyb3cgKCk7CgoK CmV4dGVybiBjaGFyICpjYXRnZXRzIChubF9jYXRkIF9fY2F0YWxvZywgaW50IF9fc2V0LCBpbnQg X19udW1iZXIsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fc3RyaW5nKSB0 aHJvdyAoKTsKCgpleHRlcm4gaW50IGNhdGNsb3NlIChubF9jYXRkIF9fY2F0YWxvZykgdGhyb3cg KCk7Cgp9CiMgMjUgIi91c3IvaW5jbHVkZS9sYW5naW5mby5oIiAyIDMgNAoKIyAxICIvdXNyL2lu Y2x1ZGUvYml0cy9sb2NhbGUuaCIgMSAzIDQKIyAyNyAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgi IDIgMyA0CgoKZXh0ZXJuICJDIiB7CiMgNDMgIi91c3IvaW5jbHVkZS9sYW5naW5mby5oIiAzIDQK ZW51bQp7CgoKCiAgQUJEQVlfMSA9ICgoKF9fTENfVElNRSkgPDwgMTYpIHwgKDApKSwKCiAgQUJE QVlfMiwKCiAgQUJEQVlfMywKCiAgQUJEQVlfNCwKCiAgQUJEQVlfNSwKCiAgQUJEQVlfNiwKCiAg QUJEQVlfNywKCgoKICBEQVlfMSwKCiAgREFZXzIsCgogIERBWV8zLAoKICBEQVlfNCwKCiAgREFZ XzUsCgogIERBWV82LAoKICBEQVlfNywKCgoKICBBQk1PTl8xLAoKICBBQk1PTl8yLAoKICBBQk1P Tl8zLAoKICBBQk1PTl80LAoKICBBQk1PTl81LAoKICBBQk1PTl82LAoKICBBQk1PTl83LAoKICBB Qk1PTl84LAoKICBBQk1PTl85LAoKICBBQk1PTl8xMCwKCiAgQUJNT05fMTEsCgogIEFCTU9OXzEy LAoKCgogIE1PTl8xLAoKICBNT05fMiwKCiAgTU9OXzMsCgogIE1PTl80LAoKICBNT05fNSwKCiAg TU9OXzYsCgogIE1PTl83LAoKICBNT05fOCwKCiAgTU9OXzksCgogIE1PTl8xMCwKCiAgTU9OXzEx LAoKICBNT05fMTIsCgoKICBBTV9TVFIsCgogIFBNX1NUUiwKCgogIERfVF9GTVQsCgogIERfRk1U LAoKICBUX0ZNVCwKCiAgVF9GTVRfQU1QTSwKCgogIEVSQSwKCiAgX19FUkFfWUVBUiwKCgoKICBF UkFfRF9GTVQsCgogIEFMVF9ESUdJVFMsCgogIEVSQV9EX1RfRk1ULAoKICBFUkFfVF9GTVQsCgoK ICBfTkxfVElNRV9FUkFfTlVNX0VOVFJJRVMsCiAgX05MX1RJTUVfRVJBX0VOVFJJRVMsCgogIF9O TF9XQUJEQVlfMSwKICBfTkxfV0FCREFZXzIsCiAgX05MX1dBQkRBWV8zLAogIF9OTF9XQUJEQVlf NCwKICBfTkxfV0FCREFZXzUsCiAgX05MX1dBQkRBWV82LAogIF9OTF9XQUJEQVlfNywKCgogIF9O TF9XREFZXzEsCiAgX05MX1dEQVlfMiwKICBfTkxfV0RBWV8zLAogIF9OTF9XREFZXzQsCiAgX05M X1dEQVlfNSwKICBfTkxfV0RBWV82LAogIF9OTF9XREFZXzcsCgoKICBfTkxfV0FCTU9OXzEsCiAg X05MX1dBQk1PTl8yLAogIF9OTF9XQUJNT05fMywKICBfTkxfV0FCTU9OXzQsCiAgX05MX1dBQk1P Tl81LAogIF9OTF9XQUJNT05fNiwKICBfTkxfV0FCTU9OXzcsCiAgX05MX1dBQk1PTl84LAogIF9O TF9XQUJNT05fOSwKICBfTkxfV0FCTU9OXzEwLAogIF9OTF9XQUJNT05fMTEsCiAgX05MX1dBQk1P Tl8xMiwKCgogIF9OTF9XTU9OXzEsCiAgX05MX1dNT05fMiwKICBfTkxfV01PTl8zLAogIF9OTF9X TU9OXzQsCiAgX05MX1dNT05fNSwKICBfTkxfV01PTl82LAogIF9OTF9XTU9OXzcsCiAgX05MX1dN T05fOCwKICBfTkxfV01PTl85LAogIF9OTF9XTU9OXzEwLAogIF9OTF9XTU9OXzExLAogIF9OTF9X TU9OXzEyLAoKICBfTkxfV0FNX1NUUiwKICBfTkxfV1BNX1NUUiwKCiAgX05MX1dEX1RfRk1ULAog IF9OTF9XRF9GTVQsCiAgX05MX1dUX0ZNVCwKICBfTkxfV1RfRk1UX0FNUE0sCgogIF9OTF9XRVJB X1lFQVIsCiAgX05MX1dFUkFfRF9GTVQsCiAgX05MX1dBTFRfRElHSVRTLAogIF9OTF9XRVJBX0Rf VF9GTVQsCiAgX05MX1dFUkFfVF9GTVQsCgogIF9OTF9USU1FX1dFRUtfTkRBWVMsCiAgX05MX1RJ TUVfV0VFS18xU1REQVksCiAgX05MX1RJTUVfV0VFS18xU1RXRUVLLAogIF9OTF9USU1FX0ZJUlNU X1dFRUtEQVksCiAgX05MX1RJTUVfRklSU1RfV09SS0RBWSwKICBfTkxfVElNRV9DQUxfRElSRUNU SU9OLAogIF9OTF9USU1FX1RJTUVaT05FLAoKICBfREFURV9GTVQsCgogIF9OTF9XX0RBVEVfRk1U LAoKICBfTkxfVElNRV9DT0RFU0VULAoKICBfTkxfTlVNX0xDX1RJTUUsCgoKCgogIF9OTF9DT0xM QVRFX05SVUxFUyA9ICgoKF9fTENfQ09MTEFURSkgPDwgMTYpIHwgKDApKSwKICBfTkxfQ09MTEFU RV9SVUxFU0VUUywKICBfTkxfQ09MTEFURV9UQUJMRU1CLAogIF9OTF9DT0xMQVRFX1dFSUdIVE1C LAogIF9OTF9DT0xMQVRFX0VYVFJBTUIsCiAgX05MX0NPTExBVEVfSU5ESVJFQ1RNQiwKICBfTkxf Q09MTEFURV9HQVAxLAogIF9OTF9DT0xMQVRFX0dBUDIsCiAgX05MX0NPTExBVEVfR0FQMywKICBf TkxfQ09MTEFURV9UQUJMRVdDLAogIF9OTF9DT0xMQVRFX1dFSUdIVFdDLAogIF9OTF9DT0xMQVRF X0VYVFJBV0MsCiAgX05MX0NPTExBVEVfSU5ESVJFQ1RXQywKICBfTkxfQ09MTEFURV9TWU1CX0hB U0hfU0laRU1CLAogIF9OTF9DT0xMQVRFX1NZTUJfVEFCTEVNQiwKICBfTkxfQ09MTEFURV9TWU1C X0VYVFJBTUIsCiAgX05MX0NPTExBVEVfQ09MTFNFUU1CLAogIF9OTF9DT0xMQVRFX0NPTExTRVFX QywKICBfTkxfQ09MTEFURV9DT0RFU0VULAogIF9OTF9OVU1fTENfQ09MTEFURSwKCgoKCiAgX05M X0NUWVBFX0NMQVNTID0gKCgoX19MQ19DVFlQRSkgPDwgMTYpIHwgKDApKSwKICBfTkxfQ1RZUEVf VE9VUFBFUiwKICBfTkxfQ1RZUEVfR0FQMSwKICBfTkxfQ1RZUEVfVE9MT1dFUiwKICBfTkxfQ1RZ UEVfR0FQMiwKICBfTkxfQ1RZUEVfQ0xBU1MzMiwKICBfTkxfQ1RZUEVfR0FQMywKICBfTkxfQ1RZ UEVfR0FQNCwKICBfTkxfQ1RZUEVfR0FQNSwKICBfTkxfQ1RZUEVfR0FQNiwKICBfTkxfQ1RZUEVf Q0xBU1NfTkFNRVMsCiAgX05MX0NUWVBFX01BUF9OQU1FUywKICBfTkxfQ1RZUEVfV0lEVEgsCiAg X05MX0NUWVBFX01CX0NVUl9NQVgsCiAgX05MX0NUWVBFX0NPREVTRVRfTkFNRSwKICBDT0RFU0VU ID0gX05MX0NUWVBFX0NPREVTRVRfTkFNRSwKCiAgX05MX0NUWVBFX1RPVVBQRVIzMiwKICBfTkxf Q1RZUEVfVE9MT1dFUjMyLAogIF9OTF9DVFlQRV9DTEFTU19PRkZTRVQsCiAgX05MX0NUWVBFX01B UF9PRkZTRVQsCiAgX05MX0NUWVBFX0lORElHSVRTX01CX0xFTiwKICBfTkxfQ1RZUEVfSU5ESUdJ VFMwX01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzFfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTMl9N QiwKICBfTkxfQ1RZUEVfSU5ESUdJVFMzX01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzRfTUIsCiAg X05MX0NUWVBFX0lORElHSVRTNV9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFM2X01CLAogIF9OTF9D VFlQRV9JTkRJR0lUUzdfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTOF9NQiwKICBfTkxfQ1RZUEVf SU5ESUdJVFM5X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUU19XQ19MRU4sCiAgX05MX0NUWVBFX0lO RElHSVRTMF9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFMxX1dDLAogIF9OTF9DVFlQRV9JTkRJR0lU UzJfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTM19XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFM0X1dD LAogIF9OTF9DVFlQRV9JTkRJR0lUUzVfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTNl9XQywKICBf TkxfQ1RZUEVfSU5ESUdJVFM3X1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzhfV0MsCiAgX05MX0NU WVBFX0lORElHSVRTOV9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQwX01CLAogIF9OTF9DVFlQRV9P VVRESUdJVDFfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUMl9NQiwKICBfTkxfQ1RZUEVfT1VURElH SVQzX01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDRfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUNV9N QiwKICBfTkxfQ1RZUEVfT1VURElHSVQ2X01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDdfTUIsCiAg X05MX0NUWVBFX09VVERJR0lUOF9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQ5X01CLAogIF9OTF9D VFlQRV9PVVRESUdJVDBfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUMV9XQywKICBfTkxfQ1RZUEVf T1VURElHSVQyX1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDNfV0MsCiAgX05MX0NUWVBFX09VVERJ R0lUNF9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ1X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDZf V0MsCiAgX05MX0NUWVBFX09VVERJR0lUN19XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ4X1dDLAog IF9OTF9DVFlQRV9PVVRESUdJVDlfV0MsCiAgX05MX0NUWVBFX1RSQU5TTElUX1RBQl9TSVpFLAog IF9OTF9DVFlQRV9UUkFOU0xJVF9GUk9NX0lEWCwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfRlJPTV9U QkwsCiAgX05MX0NUWVBFX1RSQU5TTElUX1RPX0lEWCwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfVE9f VEJMLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9ERUZBVUxUX01JU1NJTkdfTEVOLAogIF9OTF9DVFlQ RV9UUkFOU0xJVF9ERUZBVUxUX01JU1NJTkcsCiAgX05MX0NUWVBFX1RSQU5TTElUX0lHTk9SRV9M RU4sCiAgX05MX0NUWVBFX1RSQU5TTElUX0lHTk9SRSwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEs CiAgX05MX0NUWVBFX0VYVFJBX01BUF8yLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMywKICBfTkxf Q1RZUEVfRVhUUkFfTUFQXzQsCiAgX05MX0NUWVBFX0VYVFJBX01BUF81LAogIF9OTF9DVFlQRV9F WFRSQV9NQVBfNiwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzcsCiAgX05MX0NUWVBFX0VYVFJBX01B UF84LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfOSwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEwLAog IF9OTF9DVFlQRV9FWFRSQV9NQVBfMTEsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8xMiwKICBfTkxf Q1RZUEVfRVhUUkFfTUFQXzEzLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMTQsCiAgX05MX05VTV9M Q19DVFlQRSwKCgoKCiAgX19JTlRfQ1VSUl9TWU1CT0wgPSAoKChfX0xDX01PTkVUQVJZKSA8PCAx NikgfCAoMCkpLAoKCgogIF9fQ1VSUkVOQ1lfU1lNQk9MLAoKCgogIF9fTU9OX0RFQ0lNQUxfUE9J TlQsCgoKCiAgX19NT05fVEhPVVNBTkRTX1NFUCwKCgoKICBfX01PTl9HUk9VUElORywKCgoKICBf X1BPU0lUSVZFX1NJR04sCgoKCiAgX19ORUdBVElWRV9TSUdOLAoKCgogIF9fSU5UX0ZSQUNfRElH SVRTLAoKCgogIF9fRlJBQ19ESUdJVFMsCgoKCiAgX19QX0NTX1BSRUNFREVTLAoKCgogIF9fUF9T RVBfQllfU1BBQ0UsCgoKCiAgX19OX0NTX1BSRUNFREVTLAoKCgogIF9fTl9TRVBfQllfU1BBQ0Us CgoKCiAgX19QX1NJR05fUE9TTiwKCgoKICBfX05fU0lHTl9QT1NOLAoKCgogIF9OTF9NT05FVEFS WV9DUk5DWVNUUiwKCiAgX19JTlRfUF9DU19QUkVDRURFUywKCgoKICBfX0lOVF9QX1NFUF9CWV9T UEFDRSwKCgoKICBfX0lOVF9OX0NTX1BSRUNFREVTLAoKCgogIF9fSU5UX05fU0VQX0JZX1NQQUNF LAoKCgogIF9fSU5UX1BfU0lHTl9QT1NOLAoKCgogIF9fSU5UX05fU0lHTl9QT1NOLAoKCgogIF9O TF9NT05FVEFSWV9EVU9fSU5UX0NVUlJfU1lNQk9MLAogIF9OTF9NT05FVEFSWV9EVU9fQ1VSUkVO Q1lfU1lNQk9MLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX0ZSQUNfRElHSVRTLAogIF9OTF9NT05F VEFSWV9EVU9fRlJBQ19ESUdJVFMsCiAgX05MX01PTkVUQVJZX0RVT19QX0NTX1BSRUNFREVTLAog IF9OTF9NT05FVEFSWV9EVU9fUF9TRVBfQllfU1BBQ0UsCiAgX05MX01PTkVUQVJZX0RVT19OX0NT X1BSRUNFREVTLAogIF9OTF9NT05FVEFSWV9EVU9fTl9TRVBfQllfU1BBQ0UsCiAgX05MX01PTkVU QVJZX0RVT19JTlRfUF9DU19QUkVDRURFUywKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9QX1NFUF9C WV9TUEFDRSwKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9OX0NTX1BSRUNFREVTLAogIF9OTF9NT05F VEFSWV9EVU9fSU5UX05fU0VQX0JZX1NQQUNFLAogIF9OTF9NT05FVEFSWV9EVU9fUF9TSUdOX1BP U04sCiAgX05MX01PTkVUQVJZX0RVT19OX1NJR05fUE9TTiwKICBfTkxfTU9ORVRBUllfRFVPX0lO VF9QX1NJR05fUE9TTiwKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9OX1NJR05fUE9TTiwKICBfTkxf TU9ORVRBUllfVU5PX1ZBTElEX0ZST00sCiAgX05MX01PTkVUQVJZX1VOT19WQUxJRF9UTywKICBf TkxfTU9ORVRBUllfRFVPX1ZBTElEX0ZST00sCiAgX05MX01PTkVUQVJZX0RVT19WQUxJRF9UTywK ICBfTkxfTU9ORVRBUllfQ09OVkVSU0lPTl9SQVRFLAogIF9OTF9NT05FVEFSWV9ERUNJTUFMX1BP SU5UX1dDLAogIF9OTF9NT05FVEFSWV9USE9VU0FORFNfU0VQX1dDLAogIF9OTF9NT05FVEFSWV9D T0RFU0VULAogIF9OTF9OVU1fTENfTU9ORVRBUlksCgoKCiAgX19ERUNJTUFMX1BPSU5UID0gKCgo X19MQ19OVU1FUklDKSA8PCAxNikgfCAoMCkpLAoKCgogIFJBRElYQ0hBUiA9IF9fREVDSU1BTF9Q T0lOVCwKCiAgX19USE9VU0FORFNfU0VQLAoKCgogIFRIT1VTRVAgPSBfX1RIT1VTQU5EU19TRVAs CgogIF9fR1JPVVBJTkcsCgoKCiAgX05MX05VTUVSSUNfREVDSU1BTF9QT0lOVF9XQywKICBfTkxf TlVNRVJJQ19USE9VU0FORFNfU0VQX1dDLAogIF9OTF9OVU1FUklDX0NPREVTRVQsCiAgX05MX05V TV9MQ19OVU1FUklDLAoKICBfX1lFU0VYUFIgPSAoKChfX0xDX01FU1NBR0VTKSA8PCAxNikgfCAo MCkpLAoKICBfX05PRVhQUiwKCiAgX19ZRVNTVFIsCgoKCiAgX19OT1NUUiwKCgoKICBfTkxfTUVT U0FHRVNfQ09ERVNFVCwKICBfTkxfTlVNX0xDX01FU1NBR0VTLAoKICBfTkxfUEFQRVJfSEVJR0hU ID0gKCgoX19MQ19QQVBFUikgPDwgMTYpIHwgKDApKSwKICBfTkxfUEFQRVJfV0lEVEgsCiAgX05M X1BBUEVSX0NPREVTRVQsCiAgX05MX05VTV9MQ19QQVBFUiwKCiAgX05MX05BTUVfTkFNRV9GTVQg PSAoKChfX0xDX05BTUUpIDw8IDE2KSB8ICgwKSksCiAgX05MX05BTUVfTkFNRV9HRU4sCiAgX05M X05BTUVfTkFNRV9NUiwKICBfTkxfTkFNRV9OQU1FX01SUywKICBfTkxfTkFNRV9OQU1FX01JU1Ms CiAgX05MX05BTUVfTkFNRV9NUywKICBfTkxfTkFNRV9DT0RFU0VULAogIF9OTF9OVU1fTENfTkFN RSwKCiAgX05MX0FERFJFU1NfUE9TVEFMX0ZNVCA9ICgoKF9fTENfQUREUkVTUykgPDwgMTYpIHwg KDApKSwKICBfTkxfQUREUkVTU19DT1VOVFJZX05BTUUsCiAgX05MX0FERFJFU1NfQ09VTlRSWV9Q T1NULAogIF9OTF9BRERSRVNTX0NPVU5UUllfQUIyLAogIF9OTF9BRERSRVNTX0NPVU5UUllfQUIz LAogIF9OTF9BRERSRVNTX0NPVU5UUllfQ0FSLAogIF9OTF9BRERSRVNTX0NPVU5UUllfTlVNLAog IF9OTF9BRERSRVNTX0NPVU5UUllfSVNCTiwKICBfTkxfQUREUkVTU19MQU5HX05BTUUsCiAgX05M X0FERFJFU1NfTEFOR19BQiwKICBfTkxfQUREUkVTU19MQU5HX1RFUk0sCiAgX05MX0FERFJFU1Nf TEFOR19MSUIsCiAgX05MX0FERFJFU1NfQ09ERVNFVCwKICBfTkxfTlVNX0xDX0FERFJFU1MsCgog IF9OTF9URUxFUEhPTkVfVEVMX0lOVF9GTVQgPSAoKChfX0xDX1RFTEVQSE9ORSkgPDwgMTYpIHwg KDApKSwKICBfTkxfVEVMRVBIT05FX1RFTF9ET01fRk1ULAogIF9OTF9URUxFUEhPTkVfSU5UX1NF TEVDVCwKICBfTkxfVEVMRVBIT05FX0lOVF9QUkVGSVgsCiAgX05MX1RFTEVQSE9ORV9DT0RFU0VU LAogIF9OTF9OVU1fTENfVEVMRVBIT05FLAoKICBfTkxfTUVBU1VSRU1FTlRfTUVBU1VSRU1FTlQg PSAoKChfX0xDX01FQVNVUkVNRU5UKSA8PCAxNikgfCAoMCkpLAogIF9OTF9NRUFTVVJFTUVOVF9D T0RFU0VULAogIF9OTF9OVU1fTENfTUVBU1VSRU1FTlQsCgogIF9OTF9JREVOVElGSUNBVElPTl9U SVRMRSA9ICgoKF9fTENfSURFTlRJRklDQVRJT04pIDw8IDE2KSB8ICgwKSksCiAgX05MX0lERU5U SUZJQ0FUSU9OX1NPVVJDRSwKICBfTkxfSURFTlRJRklDQVRJT05fQUREUkVTUywKICBfTkxfSURF TlRJRklDQVRJT05fQ09OVEFDVCwKICBfTkxfSURFTlRJRklDQVRJT05fRU1BSUwsCiAgX05MX0lE RU5USUZJQ0FUSU9OX1RFTCwKICBfTkxfSURFTlRJRklDQVRJT05fRkFYLAogIF9OTF9JREVOVElG SUNBVElPTl9MQU5HVUFHRSwKICBfTkxfSURFTlRJRklDQVRJT05fVEVSUklUT1JZLAogIF9OTF9J REVOVElGSUNBVElPTl9BVURJRU5DRSwKICBfTkxfSURFTlRJRklDQVRJT05fQVBQTElDQVRJT04s CiAgX05MX0lERU5USUZJQ0FUSU9OX0FCQlJFVklBVElPTiwKICBfTkxfSURFTlRJRklDQVRJT05f UkVWSVNJT04sCiAgX05MX0lERU5USUZJQ0FUSU9OX0RBVEUsCiAgX05MX0lERU5USUZJQ0FUSU9O X0NBVEVHT1JZLAogIF9OTF9JREVOVElGSUNBVElPTl9DT0RFU0VULAogIF9OTF9OVU1fTENfSURF TlRJRklDQVRJT04sCgoKICBfTkxfTlVNCn07CiMgNTc1ICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8u aCIgMyA0CmV4dGVybiBjaGFyICpubF9sYW5naW5mbyAobmxfaXRlbSBfX2l0ZW0pIHRocm93ICgp OwojIDU4NiAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgiIDMgNApleHRlcm4gY2hhciAqX19ubF9s YW5naW5mb19sIChubF9pdGVtIF9faXRlbSwgX19sb2NhbGVfdCBsKTsKCgp9CiMgNDMgIi9ob21l L29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9pNjg2LXBjLWxpbnV4LWdu dS9iaXRzL2MrK2xvY2FsZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvaWNvbnYuaCIgMSAzIDQK IyAyNCAiL3Vzci9pbmNsdWRlL2ljb252LmgiIDMgNAojIDEgIi9ob21lL29sZGhhbS9nY2MtaW5z dGFsbC9nY2MxL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3N0ZGRl Zi5oIiAxIDMgNAojIDI1ICIvdXNyL2luY2x1ZGUvaWNvbnYuaCIgMiAzIDQKCgpleHRlcm4gIkMi IHsKCgp0eXBlZGVmIHZvaWQgKmljb252X3Q7CgoKCgpleHRlcm4gaWNvbnZfdCBpY29udl9vcGVu IChfX2NvbnN0IGNoYXIgKl9fdG9jb2RlLCBfX2NvbnN0IGNoYXIgKl9fZnJvbWNvZGUpCiAgICAg dGhyb3cgKCk7CgoKCgpleHRlcm4gc2l6ZV90IGljb252IChpY29udl90IF9fY2QsIGNoYXIgKipf X3Jlc3RyaWN0IF9faW5idWYsCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmlj dCBfX2luYnl0ZXNsZWZ0LAogICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf X291dGJ1ZiwKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fb3V0Ynl0 ZXNsZWZ0KTsKCgpleHRlcm4gaW50IGljb252X2Nsb3NlIChpY29udl90IF9fY2QpIHRocm93ICgp OwoKfQojIDQ0ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQv aTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytsb2NhbGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRl L2xpYmludGwuaCIgMSAzIDQKIyAzMCAiL3Vzci9pbmNsdWRlL2xpYmludGwuaCIgMyA0CmV4dGVy biAiQyIgewoKCgoKZXh0ZXJuIGNoYXIgKmdldHRleHQgKF9fY29uc3QgY2hhciAqX19tc2dpZCkg dGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpkZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX2RvbWFp bm5hbWUsIF9fY29uc3QgY2hhciAqX19tc2dpZCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIg Kl9fZGdldHRleHQgKF9fY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBfX2NvbnN0IGNoYXIgKl9f bXNnaWQpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgyKSkp OwoKCgpleHRlcm4gY2hhciAqZGNnZXR0ZXh0IChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwK ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX21zZ2lkLCBpbnQgX19jYXRl Z29yeSkgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpfX2RjZ2V0dGV4dCAoX19jb25zdCBjaGFyICpf X2RvbWFpbm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX21z Z2lkLCBpbnQgX19jYXRlZ29yeSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3Jt YXRfYXJnX18gKDIpKSk7CgoKCgpleHRlcm4gY2hhciAqbmdldHRleHQgKF9fY29uc3QgY2hhciAq X19tc2dpZDEsIF9fY29uc3QgY2hhciAqX19tc2dpZDIsCiAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgbG9uZyBpbnQgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zv cm1hdF9hcmdfXyAoMSkpKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfYXJnX18gKDIpKSk7CgoK CmV4dGVybiBjaGFyICpkbmdldHRleHQgKF9fY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBfX2Nv bnN0IGNoYXIgKl9fbXNnaWQxLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg Kl9fbXNnaWQyLCB1bnNpZ25lZCBsb25nIGludCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgyKSkpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9hcmdf XyAoMykpKTsKCgoKZXh0ZXJuIGNoYXIgKmRjbmdldHRleHQgKF9fY29uc3QgY2hhciAqX19kb21h aW5uYW1lLCBfX2NvbnN0IGNoYXIgKl9fbXNnaWQxLAogICAgICAgICAgICAgICAgICAgICAgICAg X19jb25zdCBjaGFyICpfX21zZ2lkMiwgdW5zaWduZWQgbG9uZyBpbnQgX19uLAogICAgICAgICAg ICAgICAgICAgICAgICAgaW50IF9fY2F0ZWdvcnkpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fZm9ybWF0X2FyZ19fICgyKSkpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9hcmdfXyAo MykpKTsKCgoKCgpleHRlcm4gY2hhciAqdGV4dGRvbWFpbiAoX19jb25zdCBjaGFyICpfX2RvbWFp bm5hbWUpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqYmluZHRleHRkb21haW4gKF9fY29uc3Qg Y2hhciAqX19kb21haW5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg Y2hhciAqX19kaXJuYW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmJpbmRfdGV4dGRvbWFp bl9jb2Rlc2V0IChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fY29kZXNldCkgdGhyb3cgKCk7CiMg MTE1ICIvdXNyL2luY2x1ZGUvbGliaW50bC5oIiAzIDQKfQojIDQ1ICIvaG9tZS9vbGRoYW0vZ2Nj LWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKyts b2NhbGUuaCIgMiAzCiMgNTcgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUv YysrLzMuNC9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2xvY2FsZS5oIiAzCm5hbWVzcGFjZSBz dGQKewogIHR5cGVkZWYgX19sb2NhbGVfdCBfX2NfbG9jYWxlOwoKCgoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1R2PgogICAgaW50CiAgICBfX2NvbnZlcnRfZnJvbV92KGNoYXIqIF9fb3V0LCBjb25z dCBpbnQgX19zaXplLCBjb25zdCBjaGFyKiBfX2ZtdCwKCgoKCgogICAgICAgICAgICAgICAgICAg ICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiwgaW50IF9fcHJlYyA9IC0xKQogICAgewogICAg ICBjaGFyKiBfX29sZCA9IHNldGxvY2FsZShfX0xDX0FMTCwgX19udWxsKTsKICAgICAgY2hhciog X19zYXYgPSBzdGF0aWNfY2FzdDxjaGFyKj4obWFsbG9jKHN0cmxlbihfX29sZCkgKyAxKSk7CiAg ICAgIGlmIChfX3NhdikKICAgICAgICBzdHJjcHkoX19zYXYsIF9fb2xkKTsKICAgICAgc2V0bG9j YWxlKF9fTENfQUxMLCAiQyIpOwoKCiAgICAgIGludCBfX3JldDsKCiAgICAgIGlmIChfX3ByZWMg Pj0gMCkKICAgICAgICBfX3JldCA9IHNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX3By ZWMsIF9fdik7CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9IHNucHJpbnRmKF9fb3V0LCBfX3Np emUsIF9fZm10LCBfX3YpOwojIDk4ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNs dWRlL2MrKy8zLjQvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytsb2NhbGUuaCIgMwogICAgICBz ZXRsb2NhbGUoX19MQ19BTEwsIF9fc2F2KTsKICAgICAgZnJlZShfX3Nhdik7CgogICAgICByZXR1 cm4gX19yZXQ7CiAgICB9Cn0KIyA0NyAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5j bHVkZS9jKysvMy40L2lvc2Z3ZCIgMiAzCiMgMSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2dj YzEvaW5jbHVkZS9jKysvMy40L2NjdHlwZSIgMSAzCiMgNDcgIi9ob21lL29sZGhhbS9nY2MtaW5z dGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9jY3R5cGUiIDMKCgojIDEgIi91c3IvaW5jbHVkZS9j dHlwZS5oIiAxIDMgNAojIDI5ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMyA0CmV4dGVybiAiQyIg ewojIDQ3ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMyA0CmVudW0KewogIF9JU3VwcGVyID0gKCgw KSA8IDggPyAoKDEgPDwgKDApKSA8PCA4KSA6ICgoMSA8PCAoMCkpID4+IDgpKSwKICBfSVNsb3dl ciA9ICgoMSkgPCA4ID8gKCgxIDw8ICgxKSkgPDwgOCkgOiAoKDEgPDwgKDEpKSA+PiA4KSksCiAg X0lTYWxwaGEgPSAoKDIpIDwgOCA/ICgoMSA8PCAoMikpIDw8IDgpIDogKCgxIDw8ICgyKSkgPj4g OCkpLAogIF9JU2RpZ2l0ID0gKCgzKSA8IDggPyAoKDEgPDwgKDMpKSA8PCA4KSA6ICgoMSA8PCAo MykpID4+IDgpKSwKICBfSVN4ZGlnaXQgPSAoKDQpIDwgOCA/ICgoMSA8PCAoNCkpIDw8IDgpIDog KCgxIDw8ICg0KSkgPj4gOCkpLAogIF9JU3NwYWNlID0gKCg1KSA8IDggPyAoKDEgPDwgKDUpKSA8 PCA4KSA6ICgoMSA8PCAoNSkpID4+IDgpKSwKICBfSVNwcmludCA9ICgoNikgPCA4ID8gKCgxIDw8 ICg2KSkgPDwgOCkgOiAoKDEgPDwgKDYpKSA+PiA4KSksCiAgX0lTZ3JhcGggPSAoKDcpIDwgOCA/ ICgoMSA8PCAoNykpIDw8IDgpIDogKCgxIDw8ICg3KSkgPj4gOCkpLAogIF9JU2JsYW5rID0gKCg4 KSA8IDggPyAoKDEgPDwgKDgpKSA8PCA4KSA6ICgoMSA8PCAoOCkpID4+IDgpKSwKICBfSVNjbnRy bCA9ICgoOSkgPCA4ID8gKCgxIDw8ICg5KSkgPDwgOCkgOiAoKDEgPDwgKDkpKSA+PiA4KSksCiAg X0lTcHVuY3QgPSAoKDEwKSA8IDggPyAoKDEgPDwgKDEwKSkgPDwgOCkgOiAoKDEgPDwgKDEwKSkg Pj4gOCkpLAogIF9JU2FsbnVtID0gKCgxMSkgPCA4ID8gKCgxIDw8ICgxMSkpIDw8IDgpIDogKCgx IDw8ICgxMSkpID4+IDgpKQp9OwojIDc1ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMyA0CmV4dGVy biBfX2NvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOwpleHRlcm4gX19jb25zdCBf X2ludDMyX3QgKl9fY3R5cGVfdG9sb3dlcjsKZXh0ZXJuIF9fY29uc3QgX19pbnQzMl90ICpfX2N0 eXBlX3RvdXBwZXI7CiMgOTEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzIDQKZXh0ZXJuIGludCBp c2FsbnVtIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzYWxwaGEgKGludCkgdGhyb3cgKCk7 CmV4dGVybiBpbnQgaXNjbnRybCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2RpZ2l0IChp bnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzbG93ZXIgKGludCkgdGhyb3cgKCk7CmV4dGVybiBp bnQgaXNncmFwaCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3ByaW50IChpbnQpIHRocm93 ICgpOwpleHRlcm4gaW50IGlzcHVuY3QgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNzcGFj ZSAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3VwcGVyIChpbnQpIHRocm93ICgpOwpleHRl cm4gaW50IGlzeGRpZ2l0IChpbnQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgaXNibGFuayAoaW50 KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgdG9sb3dlciAoaW50IF9fYykgdGhyb3cgKCk7CgoK ZXh0ZXJuIGludCB0b3VwcGVyIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBp c2FzY2lpIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB0b2FzY2lpIChpbnQgX19j KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfdG91cHBlciAoaW50KSB0aHJvdyAoKTsKZXh0ZXJu IGludCBfdG9sb3dlciAoaW50KSB0aHJvdyAoKTsKIyAyMjMgIi91c3IvaW5jbHVkZS9jdHlwZS5o IiAzIDQKZXh0ZXJuIGludCBfX2lzYWxudW1fbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsK ZXh0ZXJuIGludCBfX2lzYWxwaGFfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJu IGludCBfX2lzY250cmxfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBf X2lzZGlnaXRfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzbG93 ZXJfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzZ3JhcGhfbCAo aW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzcHJpbnRfbCAoaW50LCBf X2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzcHVuY3RfbCAoaW50LCBfX2xvY2Fs ZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzc3BhY2VfbCAoaW50LCBfX2xvY2FsZV90KSB0 aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzdXBwZXJfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAo KTsKZXh0ZXJuIGludCBfX2lzeGRpZ2l0X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7Cgpl eHRlcm4gaW50IF9faXNibGFua19sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwoKCgpleHRl cm4gaW50IF9fdG9sb3dlcl9sIChpbnQgX19jLCBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CgoK ZXh0ZXJuIGludCBfX3RvdXBwZXJfbCAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wpIHRocm93ICgp OwojIDI3NiAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMgNAp9CiMgNTAgIi9ob21lL29sZGhhbS9n Y2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9jY3R5cGUiIDIgMwojIDY2ICIvaG9tZS9v bGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvY2N0eXBlIiAzCm5hbWVzcGFj ZSBzdGQKewogIHVzaW5nIDo6aXNhbG51bTsKICB1c2luZyA6OmlzYWxwaGE7CiAgdXNpbmcgOjpp c2NudHJsOwogIHVzaW5nIDo6aXNkaWdpdDsKICB1c2luZyA6OmlzZ3JhcGg7CiAgdXNpbmcgOjpp c2xvd2VyOwogIHVzaW5nIDo6aXNwcmludDsKICB1c2luZyA6OmlzcHVuY3Q7CiAgdXNpbmcgOjpp c3NwYWNlOwogIHVzaW5nIDo6aXN1cHBlcjsKICB1c2luZyA6OmlzeGRpZ2l0OwogIHVzaW5nIDo6 dG9sb3dlcjsKICB1c2luZyA6OnRvdXBwZXI7Cn0KIyA0OCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0 YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2lvc2Z3ZCIgMiAzCiMgMSAiL2hvbWUvb2xkaGFtL2dj Yy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RyaW5nZndkLmgiIDEgMwojIDQz ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdHJp bmdmd2QuaCIgMwoKCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+ CiAgICBjbGFzcyBhbGxvY2F0b3I7CgogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4KICAgIHN0cnVj dCBjaGFyX3RyYWl0czsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBh bGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJpbmc7CgogIHRlbXBsYXRlPD4g c3RydWN0IGNoYXJfdHJhaXRzPGNoYXI+OwoKICB0eXBlZGVmIGJhc2ljX3N0cmluZzxjaGFyPiBz dHJpbmc7CgoKICB0ZW1wbGF0ZTw+IHN0cnVjdCBjaGFyX3RyYWl0czx3Y2hhcl90PjsKCiAgdHlw ZWRlZiBiYXNpY19zdHJpbmc8d2NoYXJfdD4gd3N0cmluZzsKCn0KIyA0OSAiL2hvbWUvb2xkaGFt L2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2lvc2Z3ZCIgMiAzCiMgMSAiL2hvbWUv b2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvZnBvcy5oIiAxIDMK IyA0MyAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMv ZnBvcy5oIiAzCgojIDEgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysr LzMuNC9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2lvLmgiIDEgMwojIDM1ICIvaG9tZS9vbGRo YW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvaTY4Ni1wYy1saW51eC1nbnUvYml0 cy9jKytpby5oIiAzCiMgMSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9j KysvMy40L2NzdGRpbyIgMSAzCiMgNDggIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2lu Y2x1ZGUvYysrLzMuNC9jc3RkaW8iIDMKCgoKCiMgMSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxs L2djYzEvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvc3RkaW8uaCIg MSAzIDQKIyAzOSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvbGliL2djYy1saWIvaTY4 Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiAiQyIgewoKCgoj IDEgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu dXgtZ251LzMuNC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDQ0ICIvaG9tZS9vbGRoYW0vZ2Nj LWluc3RhbGwvZ2NjMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9z dGRpby5oIiAyIDMgNAojIDU0ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9saWIvZ2Nj LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9zdGRpby5oIiAzIDQKdHlwZWRlZiBz dHJ1Y3QgX0lPX0ZJTEUgRklMRTsKIyA2NCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEv bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvc3RkaW8uaCIgMyA0CnR5 cGVkZWYgc3RydWN0IF9JT19GSUxFIF9fRklMRTsKIyA3NCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0 YWxsL2djYzEvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvc3RkaW8u aCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDEgMyA0CiMgMzIgIi91c3IvaW5jbHVk ZS9saWJpby5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDEgMyA0CiMgMTQg Ii91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMyA0CiMgMSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0 YWxsL2djYzEvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvc3RkZGVm LmgiIDEgMyA0CiMgMzU0ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9saWIvZ2NjLWxp Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CnR5cGVkZWYgdW5z aWduZWQgaW50IHdpbnRfdDsKIyAxNSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMgNAoj IDI0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS93Y2hh ci5oIiAxIDMgNAojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMyA0CiMgMSAiL2hvbWUvb2xk aGFtL2djYy1pbnN0YWxsL2djYzEvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2lu Y2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMgNAoK IyAxICIvdXNyL2luY2x1ZGUvYml0cy93Y2hhci5oIiAxIDMgNAojIDUxICIvdXNyL2luY2x1ZGUv d2NoYXIuaCIgMiAzIDQKIyA2NyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMgNAp0eXBlZGVmIHN0 cnVjdAp7CiAgaW50IF9fY291bnQ7CiAgdW5pb24KICB7CiAgICB3aW50X3QgX193Y2g7CiAgICBj aGFyIF9fd2NoYls0XTsKICB9IF9fdmFsdWU7Cn0gX19tYnN0YXRlX3Q7CiMgMjUgIi91c3IvaW5j bHVkZS9fR19jb25maWcuaCIgMiAzIDQKCnR5cGVkZWYgc3RydWN0CnsKICBfX29mZl90IF9fcG9z OwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0dfZnBvc190Owp0eXBlZGVmIHN0cnVjdAp7CiAg X19vZmY2NF90IF9fcG9zOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0dfZnBvczY0X3Q7CiMg NDQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2djb252 LmgiIDEgMyA0CiMgMjggIi91c3IvaW5jbHVkZS9nY29udi5oIiAzIDQKIyAxICIvdXNyL2luY2x1 ZGUvd2NoYXIuaCIgMSAzIDQKIyA0OCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMgNAojIDEgIi9o b21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251 LzMuNC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDQ5ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg MiAzIDQKIyAyOSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMyA0CgoKIyAxICIvaG9tZS9vbGRo YW0vZ2NjLWluc3RhbGwvZ2NjMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5j bHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAzMiAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMyA0CgoK CgoKZW51bQp7CiAgX19HQ09OVl9PSyA9IDAsCiAgX19HQ09OVl9OT0NPTlYsCiAgX19HQ09OVl9O T0RCLAogIF9fR0NPTlZfTk9NRU0sCgogIF9fR0NPTlZfRU1QVFlfSU5QVVQsCiAgX19HQ09OVl9G VUxMX09VVFBVVCwKICBfX0dDT05WX0lMTEVHQUxfSU5QVVQsCiAgX19HQ09OVl9JTkNPTVBMRVRF X0lOUFVULAoKICBfX0dDT05WX0lMTEVHQUxfREVTQ1JJUFRPUiwKICBfX0dDT05WX0lOVEVSTkFM X0VSUk9SCn07CgoKCmVudW0KewogIF9fR0NPTlZfSVNfTEFTVCA9IDB4MDAwMSwKICBfX0dDT05W X0lHTk9SRV9FUlJPUlMgPSAweDAwMDIKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcDsKc3RydWN0 IF9fZ2NvbnZfc3RlcF9kYXRhOwpzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0OwpzdHJ1Y3Qg X19nY29udl90cmFuc19kYXRhOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfZmN0KSAoc3RydWN0 IF9fZ2NvbnZfc3RlcCAqLCBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqKiwgX19jb25zdCB1bnNpZ25l ZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqLCBz aXplX3QgKiwgaW50LCBpbnQpOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl9pbml0X2ZjdCkgKHN0 cnVjdCBfX2djb252X3N0ZXAgKik7CnR5cGVkZWYgdm9pZCAoKl9fZ2NvbnZfZW5kX2ZjdCkgKHN0 cnVjdCBfX2djb252X3N0ZXAgKik7CgoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19mY3Qp IChzdHJ1Y3QgX19nY29udl9zdGVwICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwgdm9pZCAqLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hh ciAqKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKTsKCgp0eXBl ZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfY29udGV4dF9mY3QpICh2b2lkICosIF9fY29uc3QgdW5z aWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICopOwoKCnR5cGVkZWYgaW50 ICgqX19nY29udl90cmFuc19xdWVyeV9mY3QpIChfX2NvbnN0IGNoYXIgKiwgX19jb25zdCBjaGFy ICoqKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKTsK Cgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfaW5pdF9mY3QpICh2b2lkICoqLCBjb25zdCBj aGFyICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X3RyYW5zX2VuZF9mY3QpICh2b2lkICopOwoK c3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YQp7CgogIF9fZ2NvbnZfdHJhbnNfZmN0IF9fdHJhbnNf ZmN0OwogIF9fZ2NvbnZfdHJhbnNfY29udGV4dF9mY3QgX190cmFuc19jb250ZXh0X2ZjdDsKICBf X2djb252X3RyYW5zX2VuZF9mY3QgX190cmFuc19lbmRfZmN0OwogIHZvaWQgKl9fZGF0YTsKICBz dHJ1Y3QgX19nY29udl90cmFuc19kYXRhICpfX25leHQ7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0 ZXAKewogIHN0cnVjdCBfX2djb252X2xvYWRlZF9vYmplY3QgKl9fc2hsaWJfaGFuZGxlOwogIF9f Y29uc3QgY2hhciAqX19tb2RuYW1lOwoKICBpbnQgX19jb3VudGVyOwoKICBjaGFyICpfX2Zyb21f bmFtZTsKICBjaGFyICpfX3RvX25hbWU7CgogIF9fZ2NvbnZfZmN0IF9fZmN0OwogIF9fZ2NvbnZf aW5pdF9mY3QgX19pbml0X2ZjdDsKICBfX2djb252X2VuZF9mY3QgX19lbmRfZmN0OwoKCgogIGlu dCBfX21pbl9uZWVkZWRfZnJvbTsKICBpbnQgX19tYXhfbmVlZGVkX2Zyb207CiAgaW50IF9fbWlu X25lZWRlZF90bzsKICBpbnQgX19tYXhfbmVlZGVkX3RvOwoKCiAgaW50IF9fc3RhdGVmdWw7Cgog IHZvaWQgKl9fZGF0YTsKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhCnsKICB1bnNpZ25l ZCBjaGFyICpfX291dGJ1ZjsKICB1bnNpZ25lZCBjaGFyICpfX291dGJ1ZmVuZDsKCgoKICBpbnQg X19mbGFnczsKCgoKICBpbnQgX19pbnZvY2F0aW9uX2NvdW50ZXI7CgoKCiAgaW50IF9faW50ZXJu YWxfdXNlOwoKICBfX21ic3RhdGVfdCAqX19zdGF0ZXA7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsK CgoKICBzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhICpfX3RyYW5zOwp9OwoKCgp0eXBlZGVmIHN0 cnVjdCBfX2djb252X2luZm8KewogIHNpemVfdCBfX25zdGVwczsKICBzdHJ1Y3QgX19nY29udl9z dGVwICpfX3N0ZXBzOwogIF9fZXh0ZW5zaW9uX18gc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9f ZGF0YSBbXTsKfSAqX19nY29udl90OwojIDQ1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIg MyA0CnR5cGVkZWYgdW5pb24KewogIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICBzdHJ1Y3QK ICB7CiAgICBzdHJ1Y3QgX19nY29udl9pbmZvIF9fY2Q7CiAgICBzdHJ1Y3QgX19nY29udl9zdGVw X2RhdGEgX19kYXRhOwogIH0gX19jb21iaW5lZDsKfSBfR19pY29udl90OwoKdHlwZWRlZiBpbnQg X0dfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiBp bnQgX0dfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRl ZiB1bnNpZ25lZCBpbnQgX0dfdWludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJ X18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQzMl90IF9fYXR0cmlidXRlX18gKChf X21vZGVfXyAoX19TSV9fKSkpOwojIDMzICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzIDQKIyA1 MyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMgNAojIDEgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFs bC9nY2MxL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3N0ZGFyZy5o IiAxIDMgNAojIDQzICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9zdGRhcmcuaCIgMyA0CnR5cGVkZWYgX19idWls dGluX3ZhX2xpc3QgX19nbnVjX3ZhX2xpc3Q7CiMgNTQgIi91c3IvaW5jbHVkZS9saWJpby5oIiAy IDMgNAojIDE2MCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMgNApzdHJ1Y3QgX0lPX2p1bXBfdDsg c3RydWN0IF9JT19GSUxFOwojIDE3MCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMgNAp0eXBlZGVm IHZvaWQgX0lPX2xvY2tfdDsKCgoKCgpzdHJ1Y3QgX0lPX21hcmtlciB7CiAgc3RydWN0IF9JT19t YXJrZXIgKl9uZXh0OwogIHN0cnVjdCBfSU9fRklMRSAqX3NidWY7CgoKCiAgaW50IF9wb3M7CiMg MTkzICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMyA0Cn07CgoKZW51bSBfX2NvZGVjdnRfcmVzdWx0 CnsKICBfX2NvZGVjdnRfb2ssCiAgX19jb2RlY3Z0X3BhcnRpYWwsCiAgX19jb2RlY3Z0X2Vycm9y LAogIF9fY29kZWN2dF9ub2NvbnYKfTsKCgoKCnN0cnVjdCBfSU9fY29kZWN2dAp7CiAgdm9pZCAo Kl9fY29kZWN2dF9kZXN0cikgKHN0cnVjdCBfSU9fY29kZWN2dCAqKTsKICBlbnVtIF9fY29kZWN2 dF9yZXN1bHQgKCpfX2NvZGVjdnRfZG9fb3V0KSAoc3RydWN0IF9JT19jb2RlY3Z0ICosCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWJzdGF0ZV90ICosCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3Qg KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2No YXJfdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCB3Y2hhcl90ICoqLCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKiwgY2hhciAqKik7CiAgZW51bSBfX2NvZGVjdnRfcmVzdWx0ICgqX19j b2RlY3Z0X2RvX3Vuc2hpZnQpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWJzdGF0ZV90ICosIGNoYXIgKiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwg Y2hhciAqKik7CiAgZW51bSBfX2NvZGVjdnRfcmVzdWx0ICgqX19jb2RlY3Z0X2RvX2luKSAoc3Ry dWN0IF9JT19jb2RlY3Z0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19tYnN0YXRlX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqLCB3Y2hhcl90ICosCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqLCB3Y2hhcl90ICoq KTsKICBpbnQgKCpfX2NvZGVjdnRfZG9fZW5jb2RpbmcpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKik7 CiAgaW50ICgqX19jb2RlY3Z0X2RvX2Fsd2F5c19ub2NvbnYpIChzdHJ1Y3QgX0lPX2NvZGVjdnQg Kik7CiAgaW50ICgqX19jb2RlY3Z0X2RvX2xlbmd0aCkgKHN0cnVjdCBfSU9fY29kZWN2dCAqLCBf X21ic3RhdGVfdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICos IGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKICBpbnQgKCpfX2NvZGVjdnRfZG9fbWF4X2xlbmd0aCkg KHN0cnVjdCBfSU9fY29kZWN2dCAqKTsKCiAgX0dfaWNvbnZfdCBfX2NkX2luOwogIF9HX2ljb252 X3QgX19jZF9vdXQ7Cn07CgoKc3RydWN0IF9JT193aWRlX2RhdGEKewogIHdjaGFyX3QgKl9JT19y ZWFkX3B0cjsKICB3Y2hhcl90ICpfSU9fcmVhZF9lbmQ7CiAgd2NoYXJfdCAqX0lPX3JlYWRfYmFz ZTsKICB3Y2hhcl90ICpfSU9fd3JpdGVfYmFzZTsKICB3Y2hhcl90ICpfSU9fd3JpdGVfcHRyOwog IHdjaGFyX3QgKl9JT193cml0ZV9lbmQ7CiAgd2NoYXJfdCAqX0lPX2J1Zl9iYXNlOwogIHdjaGFy X3QgKl9JT19idWZfZW5kOwoKICB3Y2hhcl90ICpfSU9fc2F2ZV9iYXNlOwogIHdjaGFyX3QgKl9J T19iYWNrdXBfYmFzZTsKCiAgd2NoYXJfdCAqX0lPX3NhdmVfZW5kOwoKICBfX21ic3RhdGVfdCBf SU9fc3RhdGU7CiAgX19tYnN0YXRlX3QgX0lPX2xhc3Rfc3RhdGU7CiAgc3RydWN0IF9JT19jb2Rl Y3Z0IF9jb2RlY3Z0OwoKICB3Y2hhcl90IF9zaG9ydGJ1ZlsxXTsKCiAgc3RydWN0IF9JT19qdW1w X3QgKl93aWRlX3Z0YWJsZTsKfTsKCgpzdHJ1Y3QgX0lPX0ZJTEUgewogIGludCBfZmxhZ3M7CgoK CgogIGNoYXIqIF9JT19yZWFkX3B0cjsKICBjaGFyKiBfSU9fcmVhZF9lbmQ7CiAgY2hhciogX0lP X3JlYWRfYmFzZTsKICBjaGFyKiBfSU9fd3JpdGVfYmFzZTsKICBjaGFyKiBfSU9fd3JpdGVfcHRy OwogIGNoYXIqIF9JT193cml0ZV9lbmQ7CiAgY2hhciogX0lPX2J1Zl9iYXNlOwogIGNoYXIqIF9J T19idWZfZW5kOwoKICBjaGFyICpfSU9fc2F2ZV9iYXNlOwogIGNoYXIgKl9JT19iYWNrdXBfYmFz ZTsKICBjaGFyICpfSU9fc2F2ZV9lbmQ7CgogIHN0cnVjdCBfSU9fbWFya2VyICpfbWFya2VyczsK CiAgc3RydWN0IF9JT19GSUxFICpfY2hhaW47CgogIGludCBfZmlsZW5vOwogIGludCBfYmxrc2l6 ZTsKICBfX29mZl90IF9vbGRfb2Zmc2V0OwoKCgogIHVuc2lnbmVkIHNob3J0IF9jdXJfY29sdW1u OwogIHNpZ25lZCBjaGFyIF92dGFibGVfb2Zmc2V0OwogIGNoYXIgX3Nob3J0YnVmWzFdOwoKCgog IF9JT19sb2NrX3QgKl9sb2NrOwojIDMwNSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMgNAogIF9f b2ZmNjRfdCBfb2Zmc2V0OwoKCiAgc3RydWN0IF9JT19jb2RlY3Z0ICpfY29kZWN2dDsKICBzdHJ1 Y3QgX0lPX3dpZGVfZGF0YSAqX3dpZGVfZGF0YTsKCgoKCiAgaW50IF9tb2RlOwoKICBjaGFyIF91 bnVzZWQyWzE1ICogc2l6ZW9mIChpbnQpIC0gMiAqIHNpemVvZiAodm9pZCAqKV07Cgp9OwoKCgoK CnN0cnVjdCBfSU9fRklMRV9wbHVzOwoKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18y XzFfc3RkaW5fOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRvdXRfOwpl eHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRlcnJfOwojIDM0NCAiL3Vzci9p bmNsdWRlL2xpYmlvLmgiIDMgNAp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3JlYWRfZm4gKHZvaWQg Kl9fY29va2llLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzKTsKCgoKCgoKCnR5cGVkZWYg X19zc2l6ZV90IF9faW9fd3JpdGVfZm4gKHZvaWQgKl9fY29va2llLCBfX2NvbnN0IGNoYXIgKl9f YnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKTsKCgoKCgoK CnR5cGVkZWYgaW50IF9faW9fc2Vla19mbiAodm9pZCAqX19jb29raWUsIF9fb2ZmNjRfdCAqX19w b3MsIGludCBfX3cpOwoKCnR5cGVkZWYgaW50IF9faW9fY2xvc2VfZm4gKHZvaWQgKl9fY29va2ll KTsKCgoKCnR5cGVkZWYgX19pb19yZWFkX2ZuIGNvb2tpZV9yZWFkX2Z1bmN0aW9uX3Q7CnR5cGVk ZWYgX19pb193cml0ZV9mbiBjb29raWVfd3JpdGVfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX3Nl ZWtfZm4gY29va2llX3NlZWtfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX2Nsb3NlX2ZuIGNvb2tp ZV9jbG9zZV9mdW5jdGlvbl90OwoKCnR5cGVkZWYgc3RydWN0CnsKICBfX2lvX3JlYWRfZm4gKnJl YWQ7CiAgX19pb193cml0ZV9mbiAqd3JpdGU7CiAgX19pb19zZWVrX2ZuICpzZWVrOwogIF9faW9f Y2xvc2VfZm4gKmNsb3NlOwp9IF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3Q7CnR5cGVkZWYgX0lP X2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBjb29raWVfaW9fZnVuY3Rpb25zX3Q7CgpzdHJ1Y3QgX0lP X2Nvb2tpZV9maWxlOwoKCmV4dGVybiB2b2lkIF9JT19jb29raWVfaW5pdCAoc3RydWN0IF9JT19j b29raWVfZmlsZSAqX19jZmlsZSwgaW50IF9fcmVhZF93cml0ZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB2b2lkICpfX2Nvb2tpZSwgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBfX2Zu cyk7CgoKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50IF9fdW5kZXJmbG93IChfSU9fRklMRSAq KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX3VmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0 ZXJuIGludCBfX292ZXJmbG93IChfSU9fRklMRSAqLCBpbnQpIHRocm93ICgpOwpleHRlcm4gd2lu dF90IF9fd3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX193 dWZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd292ZXJmbG93IChf SU9fRklMRSAqLCB3aW50X3QpIHRocm93ICgpOwojIDQyNiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgi IDMgNApleHRlcm4gaW50IF9JT19nZXRjIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVy biBpbnQgX0lPX3B1dGMgKGludCBfX2MsIF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJu IGludCBfSU9fZmVvZiAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19m ZXJyb3IgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgX0lPX3BlZWtjX2xv Y2tlZCAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIF9JT19mbG9j a2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gdm9pZCBfSU9fZnVubG9ja2ZpbGUg KF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mdHJ5bG9ja2ZpbGUgKF9JT19G SUxFICopIHRocm93ICgpOwojIDQ1NiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMgNApleHRlcm4g aW50IF9JT192ZnNjYW5mIChfSU9fRklMRSAqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKiBfX3Jl c3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCwgaW50ICpfX3Jl c3RyaWN0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fdmZwcmludGYgKF9JT19GSUxFICpfX3Jl c3RyaWN0LCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAgICAg X19nbnVjX3ZhX2xpc3QpIHRocm93ICgpOwpleHRlcm4gX19zc2l6ZV90IF9JT19wYWRuIChfSU9f RklMRSAqLCBpbnQsIF9fc3NpemVfdCkgdGhyb3cgKCk7CmV4dGVybiBzaXplX3QgX0lPX3NnZXRu IChfSU9fRklMRSAqLCB2b2lkICosIHNpemVfdCkgdGhyb3cgKCk7CgpleHRlcm4gX19vZmY2NF90 IF9JT19zZWVrb2ZmIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCwgaW50KSB0aHJvdyAoKTsK ZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla3BvcyAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQp IHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfYmFja3VwX2FyZWEgKF9JT19GSUxFICop IHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgX0lPX2dldHdjIChfSU9fRklMRSAqX19mcCkgdGhy b3cgKCk7CmV4dGVybiB3aW50X3QgX0lPX3B1dHdjICh3Y2hhcl90IF9fd2MsIF9JT19GSUxFICpf X2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZndpZGUgKF9JT19GSUxFICpfX2ZwLCBpbnQg X19tb2RlKSB0aHJvdyAoKTsKIyA1MDUgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzIDQKZXh0ZXJu IGludCBfSU9fdmZ3c2NhbmYgKF9JT19GSUxFICogX19yZXN0cmljdCwgY29uc3Qgd2NoYXJfdCAq IF9fcmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCwgaW50 ICpfX3Jlc3RyaWN0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fdmZ3cHJpbnRmIChfSU9fRklM RSAqX19yZXN0cmljdCwgY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2dudWNfdmFfbGlzdCkgdGhyb3cgKCk7CmV4dGVybiBfX3NzaXplX3QgX0lP X3dwYWRuIChfSU9fRklMRSAqLCB3aW50X3QsIF9fc3NpemVfdCkgdGhyb3cgKCk7CmV4dGVybiB2 b2lkIF9JT19mcmVlX3diYWNrdXBfYXJlYSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CgoKCn0KIyA3 NSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvbGliL2djYy1saWIvaTY4Ni1wYy1saW51 eC1nbnUvMy40L2luY2x1ZGUvc3RkaW8uaCIgMiAzIDQKCgoKCnR5cGVkZWYgX19nbnVjX3ZhX2xp c3QgX19ub3RfdmFfbGlzdF9fOwojIDg5ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9s aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9zdGRpby5oIiAzIDQKdHlw ZWRlZiBfR19mcG9zX3QgZnBvc190OwoKCgoKdHlwZWRlZiBfR19mcG9zNjRfdCBmcG9zNjRfdDsK IyAxMzggIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2xpYi9nY2MtbGliL2k2ODYtcGMt bGludXgtZ251LzMuNC9pbmNsdWRlL3N0ZGlvLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9iaXRz L3N0ZGlvX2xpbS5oIiAxIDMgNAojIDEzOSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEv bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvc3RkaW8uaCIgMiAzIDQK CgoKZXh0ZXJuIEZJTEUgKnN0ZGluOwpleHRlcm4gRklMRSAqc3Rkb3V0OwpleHRlcm4gRklMRSAq c3RkZXJyOwojIDE1MyAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvbGliL2djYy1saWIv aTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiBpbnQgcmVt b3ZlIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIHRocm93ICgpOwoKZXh0ZXJuIGludCByZW5h bWUgKF9fY29uc3QgY2hhciAqX19vbGQsIF9fY29uc3QgY2hhciAqX19uZXcpIHRocm93ICgpOwoK CgoKZXh0ZXJuIEZJTEUgKnRtcGZpbGUgKHZvaWQpIHRocm93ICgpOwojIDE2OSAiL2hvbWUvb2xk aGFtL2djYy1pbnN0YWxsL2djYzEvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2lu Y2x1ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiBGSUxFICp0bXBmaWxlNjQgKHZvaWQpIHRocm93ICgp OwoKCmV4dGVybiBjaGFyICp0bXBuYW0gKGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgpleHRlcm4g Y2hhciAqdG1wbmFtX3IgKGNoYXIgKl9fcykgdGhyb3cgKCk7CiMgMTg5ICIvaG9tZS9vbGRoYW0v Z2NjLWluc3RhbGwvZ2NjMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVk ZS9zdGRpby5oIiAzIDQKZXh0ZXJuIGNoYXIgKnRlbXBuYW0gKF9fY29uc3QgY2hhciAqX19kaXIs IF9fY29uc3QgY2hhciAqX19wZngpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFs bG9jX18pKTsKCgoKCmV4dGVybiBpbnQgZmNsb3NlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7 CgpleHRlcm4gaW50IGZmbHVzaCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4g aW50IGZmbHVzaF91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJu IGludCBmY2xvc2VhbGwgKHZvaWQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBGSUxFICpmb3BlbiAo X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIHRocm93ICgpOwoKZXh0ZXJuIEZJTEUg KmZyZW9wZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAg ICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKIyAyMzMgIi9o b21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251 LzMuNC9pbmNsdWRlL3N0ZGlvLmgiIDMgNApleHRlcm4gRklMRSAqZm9wZW42NCAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcykgdGhyb3cgKCk7CmV4dGVybiBGSUxFICpmcmVvcGVu NjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAg ICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4g RklMRSAqZmRvcGVuIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsK CgoKCgpleHRlcm4gRklMRSAqZm9wZW5jb29raWUgKHZvaWQgKl9fcmVzdHJpY3QgX19tYWdpY19j b29raWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lPX2Nvb2tpZV9pb19mdW5jdGlv bnNfdCBfX2lvX2Z1bmNzKSB0aHJvdyAoKTsKCgpleHRlcm4gRklMRSAqZm1lbW9wZW4gKHZvaWQg Kl9fcywgc2l6ZV90IF9fbGVuLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRocm93ICgpOwoKCgoK ZXh0ZXJuIEZJTEUgKm9wZW5fbWVtc3RyZWFtIChjaGFyICoqX19yZXN0cmljdCBfX2J1ZmxvYywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19zaXplbG9j KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBzZXRidWYgKEZJTEUgKl9fcmVzdHJpY3QgX19z dHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHNl dHZidWYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYs CiAgICAgICAgICAgICAgICAgICAgaW50IF9fbW9kZXMsIHNpemVfdCBfX24pIHRocm93ICgpOwoK CgoKZXh0ZXJuIHZvaWQgc2V0YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFy ICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3NpemUp IHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNldGxpbmVidWYgKEZJTEUgKl9fc3RyZWFtKSB0aHJv dyAoKTsKCgoKCmV4dGVybiBpbnQgZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwK ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4u LikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzcHJpbnRmIChjaGFyICpfX3Jl c3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqX19y ZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAg ICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKZXh0ZXJuIGludCB2 cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0 IF9fYXJnKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCB2c3ByaW50ZiAoY2hhciAqX19yZXN0 cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAg ICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHNu cHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgNCkpKTsK CmV4dGVybiBpbnQgdnNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4 bGVuLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9y bWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKTsKCgoKCgpleHRlcm4gaW50IHZhc3ByaW50 ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Ys CiAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsKZXh0ZXJu IGludCBfX2FzcHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwKICAgICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKZXh0ZXJu IGludCBhc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsCiAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwoKCmV4dGVybiBp bnQgdmRwcmludGYgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsCiAg ICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpOwpleHRlcm4gaW50 IGRwcmludGYgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikK ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwg MykpKTsKCgoKCmV4dGVybiBpbnQgZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAog ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4p IHRocm93ICgpOwoKZXh0ZXJuIGludCBzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f Zm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzc2NhbmYgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdmZzY2FuZiAoRklMRSAq X19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAg ICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAyLCAwKSkpOwoKCmV4dGVybiBpbnQgdnNj YW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9f YXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18s IDEsIDApKSk7CgoKZXh0ZXJuIGludCB2c3NjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19zLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1h dCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f Zm9ybWF0X18gKF9fc2NhbmZfXywgMiwgMCkpKTsKCgoKCmV4dGVybiBpbnQgZmdldGMgKEZJTEUg Kl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBnZXRjIChGSUxFICpfX3N0cmVhbSkgdGhy b3cgKCk7CgoKZXh0ZXJuIGludCBnZXRjaGFyICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVy biBpbnQgZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50 IGdldGNoYXJfdW5sb2NrZWQgKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmZ2V0Y191 bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHV0YyAo aW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IHB1dGMgKGludCBf X2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB1dGNoYXIgKGludCBf X2MpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBmcHV0Y191bmxvY2tlZCAoaW50IF9fYywg RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdXRjX3VubG9ja2VkIChp bnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxv Y2tlZCAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXR3IChGSUxFICpfX3N0 cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdXR3IChpbnQgX193LCBGSUxFICpfX3N0cmVh bSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZmdldHMgKGNoYXIgKl9fcmVzdHJpY3QgX19z LCBpbnQgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRocm93ICgpOwoKCgpl eHRlcm4gY2hhciAqZmdldHNfdW5sb2NrZWQgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19u LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0p IHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmdldHMgKGNoYXIgKl9fcykgdGhyb3cgKCk7CiMg NDM3ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp bnV4LWdudS8zLjQvaW5jbHVkZS9zdGRpby5oIiAzIDQKZXh0ZXJuIF9fc3NpemVfdCBfX2dldGRl bGltIChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLCBpbnQgX19kZWxpbWl0ZXIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAo KTsKZXh0ZXJuIF9fc3NpemVfdCBnZXRkZWxpbSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sIGlu dCBfX2RlbGltaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3Ry aWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gX19zc2l6ZV90IGdldGxpbmUgKGNoYXIg KipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCAqX19yZXN0cmljdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jl c3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZnB1dHMgKF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX3MsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCiAgICAgdGhy b3cgKCk7CgoKCmV4dGVybiBpbnQgZnB1dHNfdW5sb2NrZWQgKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19z dHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB1dHMgKF9fY29uc3QgY2hhciAqX19zKSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB1bmdldGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBmcmVhZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwg c2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19y ZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gc2l6ZV90IGZ3cml0ZSAoX19jb25z dCB2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAg ICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3MpIHRocm93ICgpOwoKCgpleHRl cm4gc2l6ZV90IGZyZWFkX3VubG9ja2VkICh2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3Qg X19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpf X3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBmd3JpdGVfdW5sb2Nr ZWQgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19z dHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmc2VlayAoRklMRSAqX19zdHJlYW0sIGxv bmcgaW50IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgaW50IGZ0 ZWxsIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCByZXdpbmQgKEZJTEUg Kl9fc3RyZWFtKSB0aHJvdyAoKTsKIyA1MDAgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2Mx L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3N0ZGlvLmgiIDMgNApl eHRlcm4gaW50IGZzZWVrbyAoRklMRSAqX19zdHJlYW0sIF9fb2ZmX3QgX19vZmYsIGludCBfX3do ZW5jZSkgdGhyb3cgKCk7CgpleHRlcm4gX19vZmZfdCBmdGVsbG8gKEZJTEUgKl9fc3RyZWFtKSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmZ2V0cG9zIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFt LCBmcG9zX3QgKl9fcmVzdHJpY3QgX19wb3MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZz ZXRwb3MgKEZJTEUgKl9fc3RyZWFtLCBfX2NvbnN0IGZwb3NfdCAqX19wb3MpIHRocm93ICgpOwoj IDUzNCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvbGliL2djYy1saWIvaTY4Ni1wYy1s aW51eC1nbnUvMy40L2luY2x1ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiBpbnQgZnNlZWtvNjQgKEZJ TEUgKl9fc3RyZWFtLCBfX29mZjY0X3QgX19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CmV4 dGVybiBfX29mZjY0X3QgZnRlbGxvNjQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJu IGludCBmZ2V0cG9zNjQgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3M2NF90ICpfX3Jl c3RyaWN0IF9fcG9zKQogICAgIHRocm93ICgpOwpleHRlcm4gaW50IGZzZXRwb3M2NCAoRklMRSAq X19zdHJlYW0sIF9fY29uc3QgZnBvczY0X3QgKl9fcG9zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZv aWQgY2xlYXJlcnIgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmVvZiAo RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZXJyb3IgKEZJTEUgKl9fc3Ry ZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnJfdW5sb2NrZWQgKEZJTEUgKl9f c3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVh bSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmVycm9yX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkg dGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBwZXJyb3IgKF9fY29uc3QgY2hhciAqX19zKSB0aHJv dyAoKTsKCgoKCmV4dGVybiBpbnQgc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29u c3Qgc3lzX2Vycmxpc3RbXTsKCgpleHRlcm4gaW50IF9zeXNfbmVycjsKZXh0ZXJuIF9fY29uc3Qg Y2hhciAqX19jb25zdCBfc3lzX2Vycmxpc3RbXTsKCgoKCgpleHRlcm4gaW50IGZpbGVubyAoRklM RSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmaWxlbm9fdW5sb2NrZWQgKEZJ TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIEZJTEUgKnBvcGVuIChfX2NvbnN0 IGNoYXIgKl9fY29tbWFuZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgpleHRl cm4gaW50IHBjbG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFy ICpjdGVybWlkIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpjdXNlcmlk IChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKc3RydWN0IG9ic3RhY2s7CgoKZXh0ZXJuIGludCBv YnN0YWNrX3ByaW50ZiAoc3RydWN0IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0YWNrLAogICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQs IC4uLikgdGhyb3cgKCk7CmV4dGVybiBpbnQgb2JzdGFja192cHJpbnRmIChzdHJ1Y3Qgb2JzdGFj ayAqX19yZXN0cmljdCBfX29ic3RhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2dudWNfdmFfbGlzdCBfX2FyZ3MpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIHZvaWQgZmxv Y2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZnRyeWxvY2tm aWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgZnVubG9ja2ZpbGUg KEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKIyA2NDQgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFs bC9nY2MxL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3N0ZGlvLmgi IDMgNAp9CiMgNTMgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMu NC9jc3RkaW8iIDIgMwojIDk3ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRl L2MrKy8zLjQvY3N0ZGlvIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6RklMRTsKICB1c2lu ZyA6OmZwb3NfdDsKCiAgdXNpbmcgOjpjbGVhcmVycjsKICB1c2luZyA6OmZjbG9zZTsKICB1c2lu ZyA6OmZlb2Y7CiAgdXNpbmcgOjpmZXJyb3I7CiAgdXNpbmcgOjpmZmx1c2g7CiAgdXNpbmcgOjpm Z2V0YzsKICB1c2luZyA6OmZnZXRwb3M7CiAgdXNpbmcgOjpmZ2V0czsKICB1c2luZyA6OmZvcGVu OwogIHVzaW5nIDo6ZnByaW50ZjsKICB1c2luZyA6OmZwdXRjOwogIHVzaW5nIDo6ZnB1dHM7CiAg dXNpbmcgOjpmcmVhZDsKICB1c2luZyA6OmZyZW9wZW47CiAgdXNpbmcgOjpmc2NhbmY7CiAgdXNp bmcgOjpmc2VlazsKICB1c2luZyA6OmZzZXRwb3M7CiAgdXNpbmcgOjpmdGVsbDsKICB1c2luZyA6 OmZ3cml0ZTsKICB1c2luZyA6OmdldGM7CiAgdXNpbmcgOjpnZXRjaGFyOwogIHVzaW5nIDo6Z2V0 czsKICB1c2luZyA6OnBlcnJvcjsKICB1c2luZyA6OnByaW50ZjsKICB1c2luZyA6OnB1dGM7CiAg dXNpbmcgOjpwdXRjaGFyOwogIHVzaW5nIDo6cHV0czsKICB1c2luZyA6OnJlbW92ZTsKICB1c2lu ZyA6OnJlbmFtZTsKICB1c2luZyA6OnJld2luZDsKICB1c2luZyA6OnNjYW5mOwogIHVzaW5nIDo6 c2V0YnVmOwogIHVzaW5nIDo6c2V0dmJ1ZjsKICB1c2luZyA6OnNwcmludGY7CiAgdXNpbmcgOjpz c2NhbmY7CiAgdXNpbmcgOjp0bXBmaWxlOwogIHVzaW5nIDo6dG1wbmFtOwogIHVzaW5nIDo6dW5n ZXRjOwogIHVzaW5nIDo6dmZwcmludGY7CiAgdXNpbmcgOjp2cHJpbnRmOwogIHVzaW5nIDo6dnNw cmludGY7Cn0KIyAxNTMgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysr LzMuNC9jc3RkaW8iIDMKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdXNpbmcgOjpzbnByaW50ZjsK ICB1c2luZyA6OnZmc2NhbmY7CiAgdXNpbmcgOjp2c2NhbmY7CiAgdXNpbmcgOjp2c25wcmludGY7 CiAgdXNpbmcgOjp2c3NjYW5mOwp9CgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyBfX2dudV9jeHg6 OnNucHJpbnRmOwogIHVzaW5nIF9fZ251X2N4eDo6dmZzY2FuZjsKICB1c2luZyBfX2dudV9jeHg6 OnZzY2FuZjsKICB1c2luZyBfX2dudV9jeHg6OnZzbnByaW50ZjsKICB1c2luZyBfX2dudV9jeHg6 OnZzc2NhbmY7Cn0KIyAzNiAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9j KysvMy40L2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysraW8uaCIgMiAzCgojIDEgIi9ob21lL29s ZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9pNjg2LXBjLWxpbnV4LWdudS9i aXRzL2d0aHIuaCIgMSAzCiMgOTYgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1 ZGUvYysrLzMuNC9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHIuaCIgMwojIDEgIi9ob21lL29s ZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9pNjg2LXBjLWxpbnV4LWdudS9i aXRzL2d0aHItZGVmYXVsdC5oIiAxIDMKIyAzNyAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2dj YzEvaW5jbHVkZS9jKysvMy40L2k2ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci1kZWZhdWx0Lmgi IDMKIyAxICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9saWIvZ2NjLWxpYi9pNjg2LXBj LWxpbnV4LWdudS8zLjQvaW5jbHVkZS9wdGhyZWFkLmgiIDEgMyA0CiMgMjkgIi9ob21lL29sZGhh bS9nY2MtaW5zdGFsbC9nY2MxL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNC9pbmNs dWRlL3B0aHJlYWQuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDEgMyA0CiMgMjkg Ii91c3IvaW5jbHVkZS9zY2hlZC5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMg NAojIDMwICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMiAzIDQKCgojIDEgIi91c3IvaW5jbHVkZS9i aXRzL3NjaGVkLmgiIDEgMyA0CiMgNDcgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDMgNApz dHJ1Y3Qgc2NoZWRfcGFyYW0KICB7CiAgICBpbnQgX19zY2hlZF9wcmlvcml0eTsKICB9OwoKZXh0 ZXJuICJDIiB7CgoKCmV4dGVybiBpbnQgY2xvbmUgKGludCAoKl9fZm4pICh2b2lkICpfX2FyZyks IHZvaWQgKl9fY2hpbGRfc3RhY2ssCiAgICAgICAgICAgICAgICAgIGludCBfX2ZsYWdzLCB2b2lk ICpfX2FyZykgdGhyb3cgKCk7CgoKfQojIDMzICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMiAzIDQK CgoKCmV4dGVybiAiQyIgewoKCmV4dGVybiBpbnQgc2NoZWRfc2V0cGFyYW0gKF9fcGlkX3QgX19w aWQsIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKQogICAgIHRocm93ICgpOwoK CmV4dGVybiBpbnQgc2NoZWRfZ2V0cGFyYW0gKF9fcGlkX3QgX19waWQsIHN0cnVjdCBzY2hlZF9w YXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF9zZXRzY2hlZHVsZXIg KF9fcGlkX3QgX19waWQsIGludCBfX3BvbGljeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSB0aHJvdyAoKTsKCgpleHRl cm4gaW50IHNjaGVkX2dldHNjaGVkdWxlciAoX19waWRfdCBfX3BpZCkgdGhyb3cgKCk7CgoKZXh0 ZXJuIGludCBzY2hlZF95aWVsZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF9n ZXRfcHJpb3JpdHlfbWF4IChpbnQgX19hbGdvcml0aG0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQg c2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAoaW50IF9fYWxnb3JpdGhtKSB0aHJvdyAoKTsKCgpleHRl cm4gaW50IHNjaGVkX3JyX2dldF9pbnRlcnZhbCAoX19waWRfdCBfX3BpZCwgc3RydWN0IHRpbWVz cGVjICpfX3QpIHRocm93ICgpOwoKfQojIDMwICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2Nj MS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9wdGhyZWFkLmgiIDIg MyA0CiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzIDQKIyAzMCAiL3Vzci9pbmNsdWRlL3Rp bWUuaCIgMyA0CmV4dGVybiAiQyIgewoKCgoKCgoKIyAxICIvaG9tZS9vbGRoYW0vZ2NjLWluc3Rh bGwvZ2NjMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9zdGRkZWYu aCIgMSAzIDQKIyAzOSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzIDQKCgoKIyAxICIvdXNyL2lu Y2x1ZGUvYml0cy90aW1lLmgiIDEgMyA0CiMgNDMgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMyA0 CiMgMTE4ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKc3RydWN0IHRtCnsKICBpbnQgdG1fc2Vj OwogIGludCB0bV9taW47CiAgaW50IHRtX2hvdXI7CiAgaW50IHRtX21kYXk7CiAgaW50IHRtX21v bjsKICBpbnQgdG1feWVhcjsKICBpbnQgdG1fd2RheTsKICBpbnQgdG1feWRheTsKICBpbnQgdG1f aXNkc3Q7CgoKICBsb25nIGludCB0bV9nbXRvZmY7CiAgX19jb25zdCBjaGFyICp0bV96b25lOwoK CgoKfTsKCgoKCnN0cnVjdCBpdGltZXJzcGVjCiAgewogICAgc3RydWN0IHRpbWVzcGVjIGl0X2lu dGVydmFsOwogICAgc3RydWN0IHRpbWVzcGVjIGl0X3ZhbHVlOwogIH07CgoKc3RydWN0IHNpZ2V2 ZW50OwojIDE2MyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMyA0CmV4dGVybiBjbG9ja190IGNsb2Nr ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdGltZV90IHRpbWUgKHRpbWVfdCAqX190aW1lcikg dGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBkaWZmdGltZSAodGltZV90IF9fdGltZTEsIHRpbWVf dCBfX3RpbWUwKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpl eHRlcm4gdGltZV90IG1rdGltZSAoc3RydWN0IHRtICpfX3RwKSB0aHJvdyAoKTsKCgoKCgpleHRl cm4gc2l6ZV90IHN0cmZ0aW1lIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4c2l6 ZSwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9y bWF0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmlj dCBfX3RwKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpzdHJwdGltZSAoX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19mbXQsIHN0cnVjdCB0bSAqX190cCkKICAgICB0aHJvdyAoKTsKCgoKCgpleHRl cm4gc3RydWN0IHRtICpnbXRpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsK CgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikg dGhyb3cgKCk7CgoKCgpleHRlcm4gc3RydWN0IHRtICpnbXRpbWVfciAoX19jb25zdCB0aW1lX3Qg Kl9fcmVzdHJpY3QgX190aW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0 bSAqX19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0 aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgdGhyb3cgKCk7CgoK CgpleHRlcm4gY2hhciAqYXNjdGltZSAoX19jb25zdCBzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgp OwoKCmV4dGVybiBjaGFyICpjdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIpIHRocm93ICgp OwoKCgoKCgpleHRlcm4gY2hhciAqYXNjdGltZV9yIChfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0 cmljdCBfX3RwLAogICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVm KSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqY3RpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVz dHJpY3QgX190aW1lciwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19i dWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKl9fdHpuYW1lWzJdOwpleHRlcm4gaW50IF9f ZGF5bGlnaHQ7CmV4dGVybiBsb25nIGludCBfX3RpbWV6b25lOwoKCgoKZXh0ZXJuIGNoYXIgKnR6 bmFtZVsyXTsKCgoKZXh0ZXJuIHZvaWQgdHpzZXQgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4g aW50IGRheWxpZ2h0OwpleHRlcm4gbG9uZyBpbnQgdGltZXpvbmU7CgoKCgoKZXh0ZXJuIGludCBz dGltZSAoX19jb25zdCB0aW1lX3QgKl9fd2hlbikgdGhyb3cgKCk7CiMgMjcxICIvdXNyL2luY2x1 ZGUvdGltZS5oIiAzIDQKZXh0ZXJuIHRpbWVfdCB0aW1lZ20gKHN0cnVjdCB0bSAqX190cCkgdGhy b3cgKCk7CgoKZXh0ZXJuIHRpbWVfdCB0aW1lbG9jYWwgKHN0cnVjdCB0bSAqX190cCkgdGhyb3cg KCk7CgoKZXh0ZXJuIGludCBkeXNpemUgKGludCBfX3llYXIpIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gaW50IG5hbm9zbGVlcCAoX19jb25zdCBzdHJ1 Y3QgdGltZXNwZWMgKl9fcmVxdWVzdGVkX3RpbWUsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgdGltZXNwZWMgKl9fcmVtYWluaW5nKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBjbG9ja19n ZXRyZXMgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzKSB0aHJv dyAoKTsKCgpleHRlcm4gaW50IGNsb2NrX2dldHRpbWUgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBz dHJ1Y3QgdGltZXNwZWMgKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiBpbnQgY2xvY2tfc2V0dGlt ZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3RwKQog ICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGNsb2NrX25hbm9zbGVlcCAoY2xvY2tpZF90IF9f Y2xvY2tfaWQsIGludCBfX2ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z dCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IHRpbWVzcGVjICpfX3JlbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBjbG9ja19nZXRjcHVj bG9ja2lkIChwaWRfdCBfX3BpZCwgY2xvY2tpZF90ICpfX2Nsb2NrX2lkKSB0aHJvdyAoKTsKCgoK CmV4dGVybiBpbnQgdGltZXJfY3JlYXRlIChjbG9ja2lkX3QgX19jbG9ja19pZCwKICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBzaWdldmVudCAqX19yZXN0cmljdCBfX2V2cCwKICAgICAg ICAgICAgICAgICAgICAgICAgIHRpbWVyX3QgKl9fcmVzdHJpY3QgX190aW1lcmlkKSB0aHJvdyAo KTsKCgpleHRlcm4gaW50IHRpbWVyX2RlbGV0ZSAodGltZXJfdCBfX3RpbWVyaWQpIHRocm93ICgp OwoKCmV4dGVybiBpbnQgdGltZXJfc2V0dGltZSAodGltZXJfdCBfX3RpbWVyaWQsIGludCBfX2Zs YWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMg Kl9fcmVzdHJpY3QgX192YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXRp bWVyc3BlYyAqX19yZXN0cmljdCBfX292YWx1ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0aW1l cl9nZXR0aW1lICh0aW1lcl90IF9fdGltZXJpZCwgc3RydWN0IGl0aW1lcnNwZWMgKl9fdmFsdWUp CiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0aW1lcl9nZXRvdmVycnVuICh0aW1lcl90IF9f dGltZXJpZCkgdGhyb3cgKCk7CiMgMzQyICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKZXh0ZXJu IGludCBnZXRkYXRlX2VycjsKCgoKCgpleHRlcm4gc3RydWN0IHRtICpnZXRkYXRlIChfX2NvbnN0 IGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKIyAzNTcgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMg NApleHRlcm4gaW50IGdldGRhdGVfciAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3RyaW5n LAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fcmVzYnVmcCkg dGhyb3cgKCk7CgoKCn0KIyAzMSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvbGliL2dj Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvcHRocmVhZC5oIiAyIDMgNAoKCiMg MSAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAxIDMgNAojIDMxICIvdXNyL2luY2x1ZGUvc2lnbmFs LmgiIDMgNApleHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDEg MyA0CiMgMzQgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMiAzIDQKIyAzNzEgIi91c3IvaW5jbHVk ZS9zaWduYWwuaCIgMyA0Cn0KIyAzNCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvbGli L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvcHRocmVhZC5oIiAyIDMgNAoj IDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMgNAojIDM1ICIvaG9tZS9v bGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQv aW5jbHVkZS9wdGhyZWFkLmgiIDIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvaW5pdHNwaW4u aCIgMSAzIDQKIyAzNiAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvbGliL2djYy1saWIv aTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvcHRocmVhZC5oIiAyIDMgNAoKCmV4dGVybiAi QyIgewojIDY4ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9saWIvZ2NjLWxpYi9pNjg2 LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9wdGhyZWFkLmgiIDMgNAplbnVtCnsKICBQVEhSRUFE X0NSRUFURV9KT0lOQUJMRSwKCiAgUFRIUkVBRF9DUkVBVEVfREVUQUNIRUQKCn07CgplbnVtCnsK ICBQVEhSRUFEX0lOSEVSSVRfU0NIRUQsCgogIFBUSFJFQURfRVhQTElDSVRfU0NIRUQKCn07Cgpl bnVtCnsKICBQVEhSRUFEX1NDT1BFX1NZU1RFTSwKCiAgUFRIUkVBRF9TQ09QRV9QUk9DRVNTCgp9 OwoKZW51bQp7CiAgUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwKICBQVEhSRUFEX01VVEVYX1JFQ1VS U0lWRV9OUCwKICBQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0tfTlAsCiAgUFRIUkVBRF9NVVRFWF9B REFQVElWRV9OUAoKICAsCiAgUFRIUkVBRF9NVVRFWF9OT1JNQUwgPSBQVEhSRUFEX01VVEVYX1RJ TUVEX05QLAogIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFID0gUFRIUkVBRF9NVVRFWF9SRUNVUlNJ VkVfTlAsCiAgUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLID0gUFRIUkVBRF9NVVRFWF9FUlJPUkNI RUNLX05QLAogIFBUSFJFQURfTVVURVhfREVGQVVMVCA9IFBUSFJFQURfTVVURVhfTk9STUFMCgoK CiAgLCBQVEhSRUFEX01VVEVYX0ZBU1RfTlAgPSBQVEhSRUFEX01VVEVYX0FEQVBUSVZFX05QCgp9 OwoKZW51bQp7CiAgUFRIUkVBRF9QUk9DRVNTX1BSSVZBVEUsCgogIFBUSFJFQURfUFJPQ0VTU19T SEFSRUQKCn07CgoKZW51bQp7CiAgUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1JFQURFUl9OUCwKICBQ VEhSRUFEX1JXTE9DS19QUkVGRVJfV1JJVEVSX05QLAogIFBUSFJFQURfUldMT0NLX1BSRUZFUl9X UklURVJfTk9OUkVDVVJTSVZFX05QLAogIFBUSFJFQURfUldMT0NLX0RFRkFVTFRfTlAgPSBQVEhS RUFEX1JXTE9DS19QUkVGRVJfV1JJVEVSX05QCn07CiMgMTQwICIvaG9tZS9vbGRoYW0vZ2NjLWlu c3RhbGwvZ2NjMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9wdGhy ZWFkLmgiIDMgNApzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIKewogIHZvaWQgKCpfX3Jv dXRpbmUpICh2b2lkICopOwogIHZvaWQgKl9fYXJnOwogIGludCBfX2NhbmNlbHR5cGU7CiAgc3Ry dWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX3ByZXY7Cn07CgoKCmVudW0KewogIFBUSFJF QURfQ0FOQ0VMX0VOQUJMRSwKCiAgUFRIUkVBRF9DQU5DRUxfRElTQUJMRQoKfTsKZW51bQp7CiAg UFRIUkVBRF9DQU5DRUxfREVGRVJSRUQsCgogIFBUSFJFQURfQ0FOQ0VMX0FTWU5DSFJPTk9VUwoK fTsKIyAxNzIgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2xpYi9nY2MtbGliL2k2ODYt cGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3B0aHJlYWQuaCIgMyA0CmV4dGVybiBpbnQgcHRocmVh ZF9jcmVhdGUgKHB0aHJlYWRfdCAqX19yZXN0cmljdCBfX3RociwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdCBfX2F0dHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKigqX19zdGFydF9yb3V0aW5lKSAodm9pZCAqKSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19yZXN0cmljdCBfX2FyZykgdGhyb3cg KCk7CgoKZXh0ZXJuIHB0aHJlYWRfdCBwdGhyZWFkX3NlbGYgKHZvaWQpIHRocm93ICgpOwoKCmV4 dGVybiBpbnQgcHRocmVhZF9lcXVhbCAocHRocmVhZF90IF9fdGhyZWFkMSwgcHRocmVhZF90IF9f dGhyZWFkMikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgcHRocmVhZF9leGl0ICh2b2lkICpfX3Jl dHZhbCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpl eHRlcm4gaW50IHB0aHJlYWRfam9pbiAocHRocmVhZF90IF9fdGgsIHZvaWQgKipfX3RocmVhZF9y ZXR1cm4pIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9kZXRhY2ggKHB0aHJlYWRf dCBfX3RoKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2luaXQgKHB0 aHJlYWRfYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy X2Rlc3Ryb3kgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg cHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZGV0YWNoc3RhdGUpIHRo cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGRldGFjaHN0YXRlIChfX2NvbnN0 IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgKl9fZGV0YWNoc3RhdGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVh ZF9hdHRyX3NldHNjaGVkcGFyYW0gKHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3Qgc2No ZWRfcGFyYW0gKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19wYXJhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRw YXJhbSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19yZXN0cmljdCBfX3BhcmFtKQogICAg IHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcG9saWN5IChwdGhy ZWFkX2F0dHJfdCAqX19hdHRyLCBpbnQgX19wb2xpY3kpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwb2xpY3kgKF9fY29uc3QgcHRocmVhZF9hdHRyX3Qg Kl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0 ciwgaW50ICpfX3Jlc3RyaWN0IF9fcG9saWN5KQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQg cHRocmVhZF9hdHRyX3NldGluaGVyaXRzY2hlZCAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19pbmhlcml0KSB0aHJv dyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRpbmhlcml0c2NoZWQgKF9fY29uc3Qg cHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2F0dHIsIGludCAqX19yZXN0cmljdCBfX2luaGVyaXQpCiAgICAgdGhyb3cg KCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c2NvcGUgKHB0aHJlYWRfYXR0cl90ICpf X2F0dHIsIGludCBfX3Njb3BlKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9h dHRyX2dldHNjb3BlIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3Njb3Bl KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0Z3VhcmRzaXplIChwdGhy ZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVfdCBfX2d1YXJkc2l6ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJf Z2V0Z3VhcmRzaXplIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCBzaXplX3QgKl9fcmVzdHJpY3Qg X19ndWFyZHNpemUpCiAgICAgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy X3NldHN0YWNrYWRkciAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2b2lkICpfX3N0YWNrYWRkcikgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2thZGRyIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpf X3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCB2 b2lkICoqX19yZXN0cmljdCBfX3N0YWNrYWRkcikKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4g aW50IHB0aHJlYWRfYXR0cl9zZXRzdGFjayAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgdm9pZCAq X19zdGFja2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19z dGFja3NpemUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrIChf X2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHZvaWQgKipfX3Jlc3RyaWN0IF9fc3RhY2thZGRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fc3RhY2tzaXpl KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzdGFja3NpemUgKHB0 aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90IF9fc3RhY2tzaXplKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0 cl9nZXRzdGFja3NpemUgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIHNpemVfdCAqX19yZXN0cmlj dCBfX3N0YWNrc2l6ZSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2dldGF0 dHJfbnAgKHB0aHJlYWRfdCBfX3RoLCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsK CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldHNjaGVkcGFyYW0gKHB0aHJlYWRfdCBfX3Rhcmdl dF90aHJlYWQsIGludCBfX3BvbGljeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKQogICAgIHRocm93ICgpOwoKCmV4 dGVybiBpbnQgcHRocmVhZF9nZXRzY2hlZHBhcmFtIChwdGhyZWFkX3QgX190YXJnZXRfdGhyZWFk LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcG9s aWN5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjaGVkX3BhcmFt ICpfX3Jlc3RyaWN0IF9fcGFyYW0pCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVh ZF9nZXRjb25jdXJyZW5jeSAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3Nl dGNvbmN1cnJlbmN5IChpbnQgX19sZXZlbCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHB0 aHJlYWRfeWllbGQgKHZvaWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0 ZXhfaW5pdCAocHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fcmVzdHJp Y3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbXV0ZXhfYXR0cikgdGhyb3cgKCk7 CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhfdCAqX19t dXRleCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X3RyeWxvY2sgKHB0aHJl YWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4 X2xvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg cHRocmVhZF9tdXRleF90aW1lZGxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211 dGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0 aW1lc3BlYyAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2Fic3RpbWUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdW5sb2NrIChw dGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0aHJl YWRfbXV0ZXhhdHRyX2luaXQgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7 CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95IChwdGhyZWFkX211dGV4YXR0 cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0 cHNoYXJlZCAoX19jb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wc2hhcmVkKSB0aHJv dyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRf bXV0ZXhhdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0 ZXhhdHRyX3NldHR5cGUgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0ciwgaW50IF9fa2luZCkK ICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHR5cGUgKF9f Y29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fYXR0ciwgaW50ICpfX3Jlc3RyaWN0IF9fa2luZCkgdGhyb3cg KCk7CgoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9pbml0IChwdGhyZWFkX2NvbmRfdCAq X19yZXN0cmljdCBfX2NvbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg cHRocmVhZF9jb25kYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29uZF9hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9kZXN0 cm95IChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJl YWRfY29uZF9zaWduYWwgKHB0aHJlYWRfY29uZF90ICpfX2NvbmQpIHRocm93ICgpOwoKCmV4dGVy biBpbnQgcHRocmVhZF9jb25kX2Jyb2FkY2FzdCAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgdGhy b3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3dhaXQgKHB0aHJlYWRfY29uZF90ICpf X3Jlc3RyaWN0IF9fY29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9t dXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRo cmVhZF9jb25kX3RpbWVkd2FpdCAocHRocmVhZF9jb25kX3QgKl9fcmVzdHJpY3QgX19jb25kLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0 cmljdCBfX211dGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg c3RydWN0IHRpbWVzcGVjICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19hYnN0aW1lKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0 cl9pbml0IChwdGhyZWFkX2NvbmRhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu dCBwdGhyZWFkX2NvbmRhdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfY29uZGF0dHJfdCAqX19hdHRyKSB0 aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJfZ2V0cHNoYXJlZCAoX19jb25z dCBwdGhyZWFkX2NvbmRhdHRyX3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IHB0aHJlYWRfY29uZGF0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19wc2hhcmVkKSB0 aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfaW5pdCAocHRocmVhZF9y d2xvY2tfdCAqX19yZXN0cmljdCBfX3J3bG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJl YWRfcndsb2NrX2Rlc3Ryb3kgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsK CgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3JkbG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19y d2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdHJ5cmRsb2NrIChw dGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVh ZF9yd2xvY2tfdGltZWRyZGxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcmVzdHJpY3QgX19yd2xv Y2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0 IHRpbWVzcGVjICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fYWJzdGltZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfd3Js b2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBw dGhyZWFkX3J3bG9ja190cnl3cmxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190aW1lZHdybG9jayAocHRocmVhZF9y d2xvY2tfdCAqX19yZXN0cmljdCBfX3J3bG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hYnN0aW1lKSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIGludCBwdGhyZWFkX3J3bG9ja191bmxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2Nr KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9pbml0IChwdGhy ZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRf cndsb2NrYXR0cl9kZXN0cm95IChwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyKSB0aHJvdyAo KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0IHB0 aHJlYWRfcndsb2NrYXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCmV4dGVybiBp bnQgcHRocmVhZF9yd2xvY2thdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpf X2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3Bz aGFyZWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2dldGtpbmRf bnAgKF9fY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3ByZWYpIHRocm93ICgpOwoKCmV4dGVy biBpbnQgcHRocmVhZF9yd2xvY2thdHRyX3NldGtpbmRfbnAgKHB0aHJlYWRfcndsb2NrYXR0cl90 ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBf X3ByZWYpIHRocm93ICgpOwojIDUxOCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvbGli L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvcHRocmVhZC5oIiAzIDQKZXh0 ZXJuIGludCBwdGhyZWFkX3NwaW5faW5pdCAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2ssIGlu dCBfX3BzaGFyZWQpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NwaW5fZGVz dHJveSAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQg cHRocmVhZF9zcGluX2xvY2sgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrKSB0aHJvdyAoKTsK CgpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl90cnlsb2NrIChwdGhyZWFkX3NwaW5sb2NrX3QgKl9f bG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NwaW5fdW5sb2NrIChwdGhyZWFk X3NwaW5sb2NrX3QgKl9fbG9jaykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfYmFy cmllcl9pbml0IChwdGhyZWFkX2JhcnJpZXJfdCAqX19yZXN0cmljdCBfX2JhcnJpZXIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgcHRocmVhZF9iYXJyaWVyYXR0cl90 ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwgdW5z aWduZWQgaW50IF9fY291bnQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJf ZGVzdHJveSAocHRocmVhZF9iYXJyaWVyX3QgKl9fYmFycmllcikgdGhyb3cgKCk7CgpleHRlcm4g aW50IHB0aHJlYWRfYmFycmllcmF0dHJfaW5pdCAocHRocmVhZF9iYXJyaWVyYXR0cl90ICpfX2F0 dHIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJhdHRyX2Rlc3Ryb3kgKHB0 aHJlYWRfYmFycmllcmF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVh ZF9iYXJyaWVyYXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0IHB0aHJlYWRfYmFycmllcmF0dHJfdCAq CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9f YXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19y ZXN0cmljdCBfX3BzaGFyZWQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJh dHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19hdHRyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcHNoYXJlZCkgdGhyb3cgKCk7 CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcl93YWl0IChwdGhyZWFkX2JhcnJpZXJfdCAqX19i YXJyaWVyKSB0aHJvdyAoKTsKIyA1NjUgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2xp Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3B0aHJlYWQuaCIgMyA0CmV4 dGVybiBpbnQgcHRocmVhZF9rZXlfY3JlYXRlIChwdGhyZWFkX2tleV90ICpfX2tleSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX2Rlc3RyX2Z1bmN0aW9uKSAodm9pZCAq KSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2tleV9kZWxldGUgKHB0aHJlYWRfa2V5 X3QgX19rZXkpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRzcGVjaWZpYyAocHRo cmVhZF9rZXlfdCBfX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IHZvaWQgKl9fcG9pbnRlcikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKnB0aHJlYWRfZ2V0c3Bl Y2lmaWMgKHB0aHJlYWRfa2V5X3QgX19rZXkpIHRocm93ICgpOwojIDU4NSAiL2hvbWUvb2xkaGFt L2djYy1pbnN0YWxsL2djYzEvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1 ZGUvcHRocmVhZC5oIiAzIDQKZXh0ZXJuIGludCBwdGhyZWFkX29uY2UgKHB0aHJlYWRfb25jZV90 ICpfX29uY2VfY29udHJvbCwKICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX2luaXRf cm91dGluZSkgKHZvaWQpKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNh bmNlbHN0YXRlIChpbnQgX19zdGF0ZSwgaW50ICpfX29sZHN0YXRlKSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIGludCBwdGhyZWFkX3NldGNhbmNlbHR5cGUgKGludCBfX3R5cGUsIGludCAqX19vbGR0eXBl KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY2FuY2VsIChwdGhyZWFkX3QgX190aHIp IHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgcHRocmVhZF90ZXN0Y2FuY2VsICh2b2lkKSB0aHJv dyAoKTsKIyA2MTkgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2xpYi9nY2MtbGliL2k2 ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3B0aHJlYWQuaCIgMyA0CmV4dGVybiB2b2lkIF9w dGhyZWFkX2NsZWFudXBfcHVzaCAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1 ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19yb3V0aW5l KSAodm9pZCAqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX2Fy ZykgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3BvcCAoc3Ry dWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBfX2V4ZWN1dGUpIHRocm93ICgpOwojIDY0MCAiL2hvbWUvb2xk aGFtL2djYy1pbnN0YWxsL2djYzEvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2lu Y2x1ZGUvcHRocmVhZC5oIiAzIDQKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wdXNoX2Rl ZmVyIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fYnVmZmVyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICop LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fYXJnKSB0 aHJvdyAoKTsKIyA2NTEgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2xpYi9nY2MtbGli L2k2ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3B0aHJlYWQuaCIgMyA0CmV4dGVybiB2b2lk IF9wdGhyZWFkX2NsZWFudXBfcG9wX3Jlc3RvcmUgKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1 ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCBfX2V4ZWN1dGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9nZXRjcHVj bG9ja2lkIChwdGhyZWFkX3QgX190aHJlYWRfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjbG9ja2lkX3QgKl9fY2xvY2tfaWQpIHRocm93ICgpOwoKCgoKIyAxICIvaG9tZS9v bGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQv aW5jbHVkZS9iaXRzL3NpZ3RocmVhZC5oIiAxIDMgNAojIDQwICIvaG9tZS9vbGRoYW0vZ2NjLWlu c3RhbGwvZ2NjMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9iaXRz L3NpZ3RocmVhZC5oIiAzIDQKZXh0ZXJuIGludCBwdGhyZWFkX3NpZ21hc2sgKGludCBfX2hvdywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgX19zaWdzZXRfdCAqX19yZXN0cmlj dCBfX25ld21hc2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NpZ3NldF90ICpfX3Jl c3RyaWN0IF9fb2xkbWFzayl0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfa2lsbCAocHRo cmVhZF90IF9fdGhyLCBpbnQgX19zaWdubykgdGhyb3cgKCk7CiMgNjY1ICIvaG9tZS9vbGRoYW0v Z2NjLWluc3RhbGwvZ2NjMS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVk ZS9wdGhyZWFkLmgiIDIgMyA0CiMgNjgwICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9s aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9wdGhyZWFkLmgiIDMgNApl eHRlcm4gaW50IHB0aHJlYWRfYXRmb3JrICh2b2lkICgqX19wcmVwYXJlKSAodm9pZCksCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX3BhcmVudCkgKHZvaWQpLAogICAgICAgICAg ICAgICAgICAgICAgICAgICB2b2lkICgqX19jaGlsZCkgKHZvaWQpKSB0aHJvdyAoKTsKCgoKCmV4 dGVybiB2b2lkIHB0aHJlYWRfa2lsbF9vdGhlcl90aHJlYWRzX25wICh2b2lkKSB0aHJvdyAoKTsK Cn0KIyAzOCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2k2 ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDIgMwojIDEgIi91c3IvaW5jbHVk ZS91bmlzdGQuaCIgMSAzIDQKIyAyOCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzIDQKZXh0ZXJu ICJDIiB7CiMgMTc1ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMgNAojIDEgIi91c3IvaW5jbHVk ZS9iaXRzL3Bvc2l4X29wdC5oIiAxIDMgNAojIDE3NiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAy IDMgNAoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2Vudmlyb25tZW50cy5oIiAxIDMgNAojIDIz ICIvdXNyL2luY2x1ZGUvYml0cy9lbnZpcm9ubWVudHMuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRl L2JpdHMvd29yZHNpemUuaCIgMSAzIDQKIyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMvZW52aXJvbm1l bnRzLmgiIDIgMyA0CiMgMTgwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMyA0CiMgMTk5ICIv dXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMgNAojIDEgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9n Y2MxL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3N0ZGRlZi5oIiAx IDMgNAojIDIwMCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMgNAojIDI0MCAiL3Vzci9pbmNs dWRlL3VuaXN0ZC5oIiAzIDQKdHlwZWRlZiBfX2ludHB0cl90IGludHB0cl90OwoKCgoKCgp0eXBl ZGVmIF9fc29ja2xlbl90IHNvY2tsZW5fdDsKIyAyNjAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIg MyA0CmV4dGVybiBpbnQgYWNjZXNzIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgaW50IF9fdHlwZSkg dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGV1aWRhY2Nlc3MgKF9fY29uc3QgY2hhciAqX19uYW1l LCBpbnQgX190eXBlKSB0aHJvdyAoKTsKIyAyOTAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0 CmV4dGVybiBfX29mZl90IGxzZWVrIChpbnQgX19mZCwgX19vZmZfdCBfX29mZnNldCwgaW50IF9f d2hlbmNlKSB0aHJvdyAoKTsKIyAzMDIgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CmV4dGVy biBfX29mZjY0X3QgbHNlZWs2NCAoaW50IF9fZmQsIF9fb2ZmNjRfdCBfX29mZnNldCwgaW50IF9f d2hlbmNlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBjbG9zZSAoaW50IF9fZmQpIHRocm93ICgp OwoKCgpleHRlcm4gc3NpemVfdCByZWFkIChpbnQgX19mZCwgdm9pZCAqX19idWYsIHNpemVfdCBf X25ieXRlcykgdGhyb3cgKCk7CgoKZXh0ZXJuIHNzaXplX3Qgd3JpdGUgKGludCBfX2ZkLCBfX2Nv bnN0IHZvaWQgKl9fYnVmLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNzaXplX3Qg cHJlYWQgKGludCBfX2ZkLCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzLCBfX29mZl90IF9f b2Zmc2V0KQogICAgIHRocm93ICgpOwpleHRlcm4gc3NpemVfdCBwd3JpdGUgKGludCBfX2ZkLCBf X2NvbnN0IHZvaWQgKl9fYnVmLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgIF9f b2ZmX3QgX19vZmZzZXQpIHRocm93ICgpOwojIDM0MCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAz IDQKZXh0ZXJuIHNzaXplX3QgcHJlYWQ2NCAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3Qg X19uYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fb2ZmNjRfdCBfX29mZnNldCkgdGhy b3cgKCk7CgoKZXh0ZXJuIHNzaXplX3QgcHdyaXRlNjQgKGludCBfX2ZkLCBfX2NvbnN0IHZvaWQg Kl9fYnVmLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgX19vZmY2NF90IF9f b2Zmc2V0KSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcGlwZSAoaW50IF9fcGlwZWRlc1sy XSkgdGhyb3cgKCk7CiMgMzYyICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMgNApleHRlcm4gdW5z aWduZWQgaW50IGFsYXJtICh1bnNpZ25lZCBpbnQgX19zZWNvbmRzKSB0aHJvdyAoKTsKIyAzNzEg Ii91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CmV4dGVybiB1bnNpZ25lZCBpbnQgc2xlZXAgKHVu c2lnbmVkIGludCBfX3NlY29uZHMpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gX191c2Vjb25kc190 IHVhbGFybSAoX191c2Vjb25kc190IF9fdmFsdWUsIF9fdXNlY29uZHNfdCBfX2ludGVydmFsKQog ICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVzbGVlcCAoX191c2Vjb25kc190IF9fdXNlY29u ZHMpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcGF1c2UgKHZvaWQpIHRocm93ICgpOwoKCgpl eHRlcm4gaW50IGNob3duIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX191aWRfdCBfX293bmVyLCBf X2dpZF90IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZmNob3duIChpbnQg X19mZCwgX191aWRfdCBfX293bmVyLCBfX2dpZF90IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKZXh0 ZXJuIGludCBsY2hvd24gKF9fY29uc3QgY2hhciAqX19maWxlLCBfX3VpZF90IF9fb3duZXIsIF9f Z2lkX3QgX19ncm91cCkKICAgICB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgY2hkaXIgKF9fY29u c3QgY2hhciAqX19wYXRoKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmY2hkaXIgKGludCBfX2Zk KSB0aHJvdyAoKTsKIyA0MjMgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CmV4dGVybiBjaGFy ICpnZXRjd2QgKGNoYXIgKl9fYnVmLCBzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgoKCgpleHRl cm4gY2hhciAqZ2V0X2N1cnJlbnRfZGlyX25hbWUgKHZvaWQpIHRocm93ICgpOwoKCgoKCgpleHRl cm4gY2hhciAqZ2V0d2QgKGNoYXIgKl9fYnVmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZHVw IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBkdXAyIChpbnQgX19mZCwgaW50IF9f ZmQyKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqKl9fZW52aXJvbjsKCmV4dGVybiBjaGFyICoq ZW52aXJvbjsKCgoKCgpleHRlcm4gaW50IGV4ZWN2ZSAoX19jb25zdCBjaGFyICpfX3BhdGgsIGNo YXIgKl9fY29uc3QgX19hcmd2W10sCiAgICAgICAgICAgICAgICAgICBjaGFyICpfX2NvbnN0IF9f ZW52cFtdKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmV4ZWN2ZSAoaW50IF9fZmQsIGNoYXIg Kl9fY29uc3QgX19hcmd2W10sIGNoYXIgKl9fY29uc3QgX19lbnZwW10pCiAgICAgdGhyb3cgKCk7 CgoKCgpleHRlcm4gaW50IGV4ZWN2IChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgY2hhciAqX19jb25z dCBfX2FyZ3ZbXSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZXhlY2xlIChfX2NvbnN0IGNoYXIg Kl9fcGF0aCwgX19jb25zdCBjaGFyICpfX2FyZywgLi4uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu dCBleGVjbCAoX19jb25zdCBjaGFyICpfX3BhdGgsIF9fY29uc3QgY2hhciAqX19hcmcsIC4uLikg dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZXhlY3ZwIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgY2hh ciAqX19jb25zdCBfX2FyZ3ZbXSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGV4ZWNscCAoX19j b25zdCBjaGFyICpfX2ZpbGUsIF9fY29uc3QgY2hhciAqX19hcmcsIC4uLikgdGhyb3cgKCk7CgoK CgpleHRlcm4gaW50IG5pY2UgKGludCBfX2luYykgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBf ZXhpdCAoaW50IF9fc3RhdHVzKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgoK IyAxICIvdXNyL2luY2x1ZGUvYml0cy9jb25mbmFtZS5oIiAxIDMgNAojIDI1ICIvdXNyL2luY2x1 ZGUvYml0cy9jb25mbmFtZS5oIiAzIDQKZW51bQogIHsKICAgIF9QQ19MSU5LX01BWCwKCiAgICBf UENfTUFYX0NBTk9OLAoKICAgIF9QQ19NQVhfSU5QVVQsCgogICAgX1BDX05BTUVfTUFYLAoKICAg IF9QQ19QQVRIX01BWCwKCiAgICBfUENfUElQRV9CVUYsCgogICAgX1BDX0NIT1dOX1JFU1RSSUNU RUQsCgogICAgX1BDX05PX1RSVU5DLAoKICAgIF9QQ19WRElTQUJMRSwKCiAgICBfUENfU1lOQ19J TywKCiAgICBfUENfQVNZTkNfSU8sCgogICAgX1BDX1BSSU9fSU8sCgogICAgX1BDX1NPQ0tfTUFY QlVGLAoKICAgIF9QQ19GSUxFU0laRUJJVFMsCgogICAgX1BDX1JFQ19JTkNSX1hGRVJfU0laRSwK CiAgICBfUENfUkVDX01BWF9YRkVSX1NJWkUsCgogICAgX1BDX1JFQ19NSU5fWEZFUl9TSVpFLAoK ICAgIF9QQ19SRUNfWEZFUl9BTElHTiwKCiAgICBfUENfQUxMT0NfU0laRV9NSU4sCgogICAgX1BD X1NZTUxJTktfTUFYCgogIH07CgoKZW51bQogIHsKICAgIF9TQ19BUkdfTUFYLAoKICAgIF9TQ19D SElMRF9NQVgsCgogICAgX1NDX0NMS19UQ0ssCgogICAgX1NDX05HUk9VUFNfTUFYLAoKICAgIF9T Q19PUEVOX01BWCwKCiAgICBfU0NfU1RSRUFNX01BWCwKCiAgICBfU0NfVFpOQU1FX01BWCwKCiAg ICBfU0NfSk9CX0NPTlRST0wsCgogICAgX1NDX1NBVkVEX0lEUywKCiAgICBfU0NfUkVBTFRJTUVf U0lHTkFMUywKCiAgICBfU0NfUFJJT1JJVFlfU0NIRURVTElORywKCiAgICBfU0NfVElNRVJTLAoK ICAgIF9TQ19BU1lOQ0hST05PVVNfSU8sCgogICAgX1NDX1BSSU9SSVRJWkVEX0lPLAoKICAgIF9T Q19TWU5DSFJPTklaRURfSU8sCgogICAgX1NDX0ZTWU5DLAoKICAgIF9TQ19NQVBQRURfRklMRVMs CgogICAgX1NDX01FTUxPQ0ssCgogICAgX1NDX01FTUxPQ0tfUkFOR0UsCgogICAgX1NDX01FTU9S WV9QUk9URUNUSU9OLAoKICAgIF9TQ19NRVNTQUdFX1BBU1NJTkcsCgogICAgX1NDX1NFTUFQSE9S RVMsCgogICAgX1NDX1NIQVJFRF9NRU1PUllfT0JKRUNUUywKCiAgICBfU0NfQUlPX0xJU1RJT19N QVgsCgogICAgX1NDX0FJT19NQVgsCgogICAgX1NDX0FJT19QUklPX0RFTFRBX01BWCwKCiAgICBf U0NfREVMQVlUSU1FUl9NQVgsCgogICAgX1NDX01RX09QRU5fTUFYLAoKICAgIF9TQ19NUV9QUklP X01BWCwKCiAgICBfU0NfVkVSU0lPTiwKCiAgICBfU0NfUEFHRVNJWkUsCgoKICAgIF9TQ19SVFNJ R19NQVgsCgogICAgX1NDX1NFTV9OU0VNU19NQVgsCgogICAgX1NDX1NFTV9WQUxVRV9NQVgsCgog ICAgX1NDX1NJR1FVRVVFX01BWCwKCiAgICBfU0NfVElNRVJfTUFYLAoKCgoKICAgIF9TQ19CQ19C QVNFX01BWCwKCiAgICBfU0NfQkNfRElNX01BWCwKCiAgICBfU0NfQkNfU0NBTEVfTUFYLAoKICAg IF9TQ19CQ19TVFJJTkdfTUFYLAoKICAgIF9TQ19DT0xMX1dFSUdIVFNfTUFYLAoKICAgIF9TQ19F UVVJVl9DTEFTU19NQVgsCgogICAgX1NDX0VYUFJfTkVTVF9NQVgsCgogICAgX1NDX0xJTkVfTUFY LAoKICAgIF9TQ19SRV9EVVBfTUFYLAoKICAgIF9TQ19DSEFSQ0xBU1NfTkFNRV9NQVgsCgoKICAg IF9TQ18yX1ZFUlNJT04sCgogICAgX1NDXzJfQ19CSU5ELAoKICAgIF9TQ18yX0NfREVWLAoKICAg IF9TQ18yX0ZPUlRfREVWLAoKICAgIF9TQ18yX0ZPUlRfUlVOLAoKICAgIF9TQ18yX1NXX0RFViwK CiAgICBfU0NfMl9MT0NBTEVERUYsCgoKICAgIF9TQ19QSUksCgogICAgX1NDX1BJSV9YVEksCgog ICAgX1NDX1BJSV9TT0NLRVQsCgogICAgX1NDX1BJSV9JTlRFUk5FVCwKCiAgICBfU0NfUElJX09T SSwKCiAgICBfU0NfUE9MTCwKCiAgICBfU0NfU0VMRUNULAoKICAgIF9TQ19VSU9fTUFYSU9WLAoK ICAgIF9TQ19JT1ZfTUFYID0gX1NDX1VJT19NQVhJT1YsCgogICAgX1NDX1BJSV9JTlRFUk5FVF9T VFJFQU0sCgogICAgX1NDX1BJSV9JTlRFUk5FVF9ER1JBTSwKCiAgICBfU0NfUElJX09TSV9DT1RT LAoKICAgIF9TQ19QSUlfT1NJX0NMVFMsCgogICAgX1NDX1BJSV9PU0lfTSwKCiAgICBfU0NfVF9J T1ZfTUFYLAoKCgogICAgX1NDX1RIUkVBRFMsCgogICAgX1NDX1RIUkVBRF9TQUZFX0ZVTkNUSU9O UywKCiAgICBfU0NfR0VUR1JfUl9TSVpFX01BWCwKCiAgICBfU0NfR0VUUFdfUl9TSVpFX01BWCwK CiAgICBfU0NfTE9HSU5fTkFNRV9NQVgsCgogICAgX1NDX1RUWV9OQU1FX01BWCwKCiAgICBfU0Nf VEhSRUFEX0RFU1RSVUNUT1JfSVRFUkFUSU9OUywKCiAgICBfU0NfVEhSRUFEX0tFWVNfTUFYLAoK ICAgIF9TQ19USFJFQURfU1RBQ0tfTUlOLAoKICAgIF9TQ19USFJFQURfVEhSRUFEU19NQVgsCgog ICAgX1NDX1RIUkVBRF9BVFRSX1NUQUNLQUREUiwKCiAgICBfU0NfVEhSRUFEX0FUVFJfU1RBQ0tT SVpFLAoKICAgIF9TQ19USFJFQURfUFJJT1JJVFlfU0NIRURVTElORywKCiAgICBfU0NfVEhSRUFE X1BSSU9fSU5IRVJJVCwKCiAgICBfU0NfVEhSRUFEX1BSSU9fUFJPVEVDVCwKCiAgICBfU0NfVEhS RUFEX1BST0NFU1NfU0hBUkVELAoKCiAgICBfU0NfTlBST0NFU1NPUlNfQ09ORiwKCiAgICBfU0Nf TlBST0NFU1NPUlNfT05MTiwKCiAgICBfU0NfUEhZU19QQUdFUywKCiAgICBfU0NfQVZQSFlTX1BB R0VTLAoKICAgIF9TQ19BVEVYSVRfTUFYLAoKICAgIF9TQ19QQVNTX01BWCwKCgogICAgX1NDX1hP UEVOX1ZFUlNJT04sCgogICAgX1NDX1hPUEVOX1hDVV9WRVJTSU9OLAoKICAgIF9TQ19YT1BFTl9V TklYLAoKICAgIF9TQ19YT1BFTl9DUllQVCwKCiAgICBfU0NfWE9QRU5fRU5IX0kxOE4sCgogICAg X1NDX1hPUEVOX1NITSwKCgogICAgX1NDXzJfQ0hBUl9URVJNLAoKICAgIF9TQ18yX0NfVkVSU0lP TiwKCiAgICBfU0NfMl9VUEUsCgoKICAgIF9TQ19YT1BFTl9YUEcyLAoKICAgIF9TQ19YT1BFTl9Y UEczLAoKICAgIF9TQ19YT1BFTl9YUEc0LAoKCiAgICBfU0NfQ0hBUl9CSVQsCgogICAgX1NDX0NI QVJfTUFYLAoKICAgIF9TQ19DSEFSX01JTiwKCiAgICBfU0NfSU5UX01BWCwKCiAgICBfU0NfSU5U X01JTiwKCiAgICBfU0NfTE9OR19CSVQsCgogICAgX1NDX1dPUkRfQklULAoKICAgIF9TQ19NQl9M RU5fTUFYLAoKICAgIF9TQ19OWkVSTywKCiAgICBfU0NfU1NJWkVfTUFYLAoKICAgIF9TQ19TQ0hB Ul9NQVgsCgogICAgX1NDX1NDSEFSX01JTiwKCiAgICBfU0NfU0hSVF9NQVgsCgogICAgX1NDX1NI UlRfTUlOLAoKICAgIF9TQ19VQ0hBUl9NQVgsCgogICAgX1NDX1VJTlRfTUFYLAoKICAgIF9TQ19V TE9OR19NQVgsCgogICAgX1NDX1VTSFJUX01BWCwKCgogICAgX1NDX05MX0FSR01BWCwKCiAgICBf U0NfTkxfTEFOR01BWCwKCiAgICBfU0NfTkxfTVNHTUFYLAoKICAgIF9TQ19OTF9OTUFYLAoKICAg IF9TQ19OTF9TRVRNQVgsCgogICAgX1NDX05MX1RFWFRNQVgsCgoKICAgIF9TQ19YQlM1X0lMUDMy X09GRjMyLAoKICAgIF9TQ19YQlM1X0lMUDMyX09GRkJJRywKCiAgICBfU0NfWEJTNV9MUDY0X09G RjY0LAoKICAgIF9TQ19YQlM1X0xQQklHX09GRkJJRywKCgogICAgX1NDX1hPUEVOX0xFR0FDWSwK CiAgICBfU0NfWE9QRU5fUkVBTFRJTUUsCgogICAgX1NDX1hPUEVOX1JFQUxUSU1FX1RIUkVBRFMs CgoKICAgIF9TQ19BRFZJU09SWV9JTkZPLAoKICAgIF9TQ19CQVJSSUVSUywKCiAgICBfU0NfQkFT RSwKCiAgICBfU0NfQ19MQU5HX1NVUFBPUlQsCgogICAgX1NDX0NfTEFOR19TVVBQT1JUX1IsCgog ICAgX1NDX0NMT0NLX1NFTEVDVElPTiwKCiAgICBfU0NfQ1BVVElNRSwKCiAgICBfU0NfVEhSRUFE X0NQVVRJTUUsCgogICAgX1NDX0RFVklDRV9JTywKCiAgICBfU0NfREVWSUNFX1NQRUNJRklDLAoK ICAgIF9TQ19ERVZJQ0VfU1BFQ0lGSUNfUiwKCiAgICBfU0NfRkRfTUdNVCwKCiAgICBfU0NfRklG TywKCiAgICBfU0NfUElQRSwKCiAgICBfU0NfRklMRV9BVFRSSUJVVEVTLAoKICAgIF9TQ19GSUxF X0xPQ0tJTkcsCgogICAgX1NDX0ZJTEVfU1lTVEVNLAoKICAgIF9TQ19NT05PVE9OSUNfQ0xPQ0ss CgogICAgX1NDX01VTFRJX1BST0NFU1MsCgogICAgX1NDX1NJTkdMRV9QUk9DRVNTLAoKICAgIF9T Q19ORVRXT1JLSU5HLAoKICAgIF9TQ19SRUFERVJfV1JJVEVSX0xPQ0tTLAoKICAgIF9TQ19TUElO X0xPQ0tTLAoKICAgIF9TQ19SRUdFWFAsCgogICAgX1NDX1JFR0VYX1ZFUlNJT04sCgogICAgX1ND X1NIRUxMLAoKICAgIF9TQ19TSUdOQUxTLAoKICAgIF9TQ19TUEFXTiwKCiAgICBfU0NfU1BPUkFE SUNfU0VSVkVSLAoKICAgIF9TQ19USFJFQURfU1BPUkFESUNfU0VSVkVSLAoKICAgIF9TQ19TWVNU RU1fREFUQUJBU0UsCgogICAgX1NDX1NZU1RFTV9EQVRBQkFTRV9SLAoKICAgIF9TQ19USU1FT1VU UywKCiAgICBfU0NfVFlQRURfTUVNT1JZX09CSkVDVFMsCgogICAgX1NDX1VTRVJfR1JPVVBTLAoK ICAgIF9TQ19VU0VSX0dST1VQU19SLAoKICAgIF9TQ18yX1BCUywKCiAgICBfU0NfMl9QQlNfQUND T1VOVElORywKCiAgICBfU0NfMl9QQlNfTE9DQVRFLAoKICAgIF9TQ18yX1BCU19NRVNTQUdFLAoK ICAgIF9TQ18yX1BCU19UUkFDSywKCiAgICBfU0NfU1lNTE9PUF9NQVgsCgogICAgX1NDX1NUUkVB TVMsCgogICAgX1NDXzJfUEJTX0NIRUNLUE9JTlQsCgoKICAgIF9TQ19WNl9JTFAzMl9PRkYzMiwK CiAgICBfU0NfVjZfSUxQMzJfT0ZGQklHLAoKICAgIF9TQ19WNl9MUDY0X09GRjY0LAoKICAgIF9T Q19WNl9MUEJJR19PRkZCSUcsCgoKICAgIF9TQ19IT1NUX05BTUVfTUFYLAoKICAgIF9TQ19UUkFD RSwKCiAgICBfU0NfVFJBQ0VfRVZFTlRfRklMVEVSLAoKICAgIF9TQ19UUkFDRV9JTkhFUklULAoK ICAgIF9TQ19UUkFDRV9MT0cKCiAgfTsKCgoKCgplbnVtCiAgewogICAgX0NTX1BBVEgsCgoKCgog ICAgX0NTX0xGU19DRkxBR1MgPSAxMDAwLAoKICAgIF9DU19MRlNfTERGTEFHUywKCiAgICBfQ1Nf TEZTX0xJQlMsCgogICAgX0NTX0xGU19MSU5URkxBR1MsCgogICAgX0NTX0xGUzY0X0NGTEFHUywK CiAgICBfQ1NfTEZTNjRfTERGTEFHUywKCiAgICBfQ1NfTEZTNjRfTElCUywKCiAgICBfQ1NfTEZT NjRfTElOVEZMQUdTLAoKCgoKICAgIF9DU19YQlM1X0lMUDMyX09GRjMyX0NGTEFHUyA9IDExMDAs CgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGMzJfTERGTEFHUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9P RkYzMl9MSUJTLAoKICAgIF9DU19YQlM1X0lMUDMyX09GRjMyX0xJTlRGTEFHUywKCiAgICBfQ1Nf WEJTNV9JTFAzMl9PRkZCSUdfQ0ZMQUdTLAoKICAgIF9DU19YQlM1X0lMUDMyX09GRkJJR19MREZM QUdTLAoKICAgIF9DU19YQlM1X0lMUDMyX09GRkJJR19MSUJTLAoKICAgIF9DU19YQlM1X0lMUDMy X09GRkJJR19MSU5URkxBR1MsCgogICAgX0NTX1hCUzVfTFA2NF9PRkY2NF9DRkxBR1MsCgogICAg X0NTX1hCUzVfTFA2NF9PRkY2NF9MREZMQUdTLAoKICAgIF9DU19YQlM1X0xQNjRfT0ZGNjRfTElC UywKCiAgICBfQ1NfWEJTNV9MUDY0X09GRjY0X0xJTlRGTEFHUywKCiAgICBfQ1NfWEJTNV9MUEJJ R19PRkZCSUdfQ0ZMQUdTLAoKICAgIF9DU19YQlM1X0xQQklHX09GRkJJR19MREZMQUdTLAoKICAg IF9DU19YQlM1X0xQQklHX09GRkJJR19MSUJTLAoKICAgIF9DU19YQlM1X0xQQklHX09GRkJJR19M SU5URkxBR1MsCgoKCiAgICBfQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGMzJfQ0ZMQUdTLAoKICAgIF9D U19QT1NJWF9WNl9JTFAzMl9PRkYzMl9MREZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9JTFAzMl9P RkYzMl9MSUJTLAoKICAgIF9DU19QT1NJWF9WNl9JTFAzMl9PRkYzMl9MSU5URkxBR1MsCgogICAg X0NTX1BPU0lYX1Y2X0lMUDMyX09GRkJJR19DRkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2X0lMUDMy X09GRkJJR19MREZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9JTFAzMl9PRkZCSUdfTElCUywKCiAg ICBfQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGQklHX0xJTlRGTEFHUywKCiAgICBfQ1NfUE9TSVhfVjZf TFA2NF9PRkY2NF9DRkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2X0xQNjRfT0ZGNjRfTERGTEFHUywK CiAgICBfQ1NfUE9TSVhfVjZfTFA2NF9PRkY2NF9MSUJTLAoKICAgIF9DU19QT1NJWF9WNl9MUDY0 X09GRjY0X0xJTlRGTEFHUywKCiAgICBfQ1NfUE9TSVhfVjZfTFBCSUdfT0ZGQklHX0NGTEFHUywK CiAgICBfQ1NfUE9TSVhfVjZfTFBCSUdfT0ZGQklHX0xERkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2 X0xQQklHX09GRkJJR19MSUJTLAoKICAgIF9DU19QT1NJWF9WNl9MUEJJR19PRkZCSUdfTElOVEZM QUdTLAoKCgogICAgX0NTX1Y2X1dJRFRIX1JFU1RSSUNURURfRU5WUwoKICB9OwojIDUwMSAiL3Vz ci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMgNAoKCmV4dGVybiBsb25nIGludCBwYXRoY29uZiAoX19j b25zdCBjaGFyICpfX3BhdGgsIGludCBfX25hbWUpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGlu dCBmcGF0aGNvbmYgKGludCBfX2ZkLCBpbnQgX19uYW1lKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9u ZyBpbnQgc3lzY29uZiAoaW50IF9fbmFtZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3RfXykpOwoKCgpleHRlcm4gc2l6ZV90IGNvbmZzdHIgKGludCBfX25hbWUsIGNoYXIgKl9fYnVm LCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIF9fcGlkX3QgZ2V0cGlkICh2b2lk KSB0aHJvdyAoKTsKCgpleHRlcm4gX19waWRfdCBnZXRwcGlkICh2b2lkKSB0aHJvdyAoKTsKCgoK CmV4dGVybiBfX3BpZF90IGdldHBncnAgKHZvaWQpIHRocm93ICgpOwojIDUzNiAiL3Vzci9pbmNs dWRlL3VuaXN0ZC5oIiAzIDQKZXh0ZXJuIF9fcGlkX3QgX19nZXRwZ2lkIChfX3BpZF90IF9fcGlk KSB0aHJvdyAoKTsKCmV4dGVybiBfX3BpZF90IGdldHBnaWQgKF9fcGlkX3QgX19waWQpIHRocm93 ICgpOwoKCgoKCgpleHRlcm4gaW50IHNldHBnaWQgKF9fcGlkX3QgX19waWQsIF9fcGlkX3QgX19w Z2lkKSB0aHJvdyAoKTsKIyA1NjIgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CmV4dGVybiBp bnQgc2V0cGdycCAodm9pZCkgdGhyb3cgKCk7CiMgNTgwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgi IDMgNApleHRlcm4gX19waWRfdCBzZXRzaWQgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gX19w aWRfdCBnZXRzaWQgKF9fcGlkX3QgX19waWQpIHRocm93ICgpOwoKCgpleHRlcm4gX191aWRfdCBn ZXR1aWQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBfX3VpZF90IGdldGV1aWQgKHZvaWQpIHRo cm93ICgpOwoKCmV4dGVybiBfX2dpZF90IGdldGdpZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJu IF9fZ2lkX3QgZ2V0ZWdpZCAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGdldGdyb3Vw cyAoaW50IF9fc2l6ZSwgX19naWRfdCBfX2xpc3RbXSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg Z3JvdXBfbWVtYmVyIChfX2dpZF90IF9fZ2lkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBz ZXR1aWQgKF9fdWlkX3QgX191aWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzZXRyZXVpZCAo X191aWRfdCBfX3J1aWQsIF9fdWlkX3QgX19ldWlkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQg c2V0ZXVpZCAoX191aWRfdCBfX3VpZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgc2V0Z2lk IChfX2dpZF90IF9fZ2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc2V0cmVnaWQgKF9fZ2lk X3QgX19yZ2lkLCBfX2dpZF90IF9fZWdpZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHNldGVn aWQgKF9fZ2lkX3QgX19naWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gX19waWRfdCBmb3JrICh2 b2lkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIF9fcGlkX3QgdmZvcmsgKHZvaWQpIHRocm93ICgp OwoKCgoKCmV4dGVybiBjaGFyICp0dHluYW1lIChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCmV4dGVy biBpbnQgdHR5bmFtZV9yIChpbnQgX19mZCwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1Zmxlbikg dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaXNhdHR5IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCgoK ZXh0ZXJuIGludCB0dHlzbG90ICh2b2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgbGluayAo X19jb25zdCBjaGFyICpfX2Zyb20sIF9fY29uc3QgY2hhciAqX190bykgdGhyb3cgKCk7CgoKCmV4 dGVybiBpbnQgc3ltbGluayAoX19jb25zdCBjaGFyICpfX2Zyb20sIF9fY29uc3QgY2hhciAqX190 bykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHJlYWRsaW5rIChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19wYXRoLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAg ICBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVubGluayAoX19jb25zdCBj aGFyICpfX25hbWUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcm1kaXIgKF9fY29uc3QgY2hhciAq X19wYXRoKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIF9fcGlkX3QgdGNnZXRwZ3JwIChpbnQgX19mZCkg dGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0Y3NldHBncnAgKGludCBfX2ZkLCBfX3BpZF90IF9fcGdy cF9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpnZXRsb2dpbiAodm9pZCkgdGhyb3cgKCk7 CgoKCgpleHRlcm4gaW50IGdldGxvZ2luX3IgKGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9fbmFtZV9s ZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzZXRsb2dpbiAoX19jb25zdCBjaGFyICpfX25h bWUpIHRocm93ICgpOwojIDcyNiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzIDQKIyAxICIvdXNy L2luY2x1ZGUvZ2V0b3B0LmgiIDEgMyA0CiMgMzggIi91c3IvaW5jbHVkZS9nZXRvcHQuaCIgMyA0 CmV4dGVybiAiQyIgewojIDQ3ICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMgNApleHRlcm4gY2hh ciAqb3B0YXJnOwojIDYxICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMgNApleHRlcm4gaW50IG9w dGluZDsKCgoKCmV4dGVybiBpbnQgb3B0ZXJyOwoKCgpleHRlcm4gaW50IG9wdG9wdDsKIyAxNDUg Ii91c3IvaW5jbHVkZS9nZXRvcHQuaCIgMyA0CmV4dGVybiBpbnQgZ2V0b3B0IChpbnQgX19fYXJn YywgY2hhciAqY29uc3QgKl9fX2FyZ3YsIGNvbnN0IGNoYXIgKl9fc2hvcnRvcHRzKTsKIyAxNzUg Ii91c3IvaW5jbHVkZS9nZXRvcHQuaCIgMyA0Cn0KIyA3MjcgIi91c3IvaW5jbHVkZS91bmlzdGQu aCIgMiAzIDQKCgoKCgoKCmV4dGVybiBpbnQgZ2V0aG9zdG5hbWUgKGNoYXIgKl9fbmFtZSwgc2l6 ZV90IF9fbGVuKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBzZXRob3N0bmFtZSAoX19jb25z dCBjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgc2V0 aG9zdGlkIChsb25nIGludCBfX2lkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGdldGRvbWFp bm5hbWUgKGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBz ZXRkb21haW5uYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9fbGVuKSB0aHJvdyAo KTsKCgoKCgpleHRlcm4gaW50IHZoYW5ndXAgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg cmV2b2tlIChfX2NvbnN0IGNoYXIgKl9fZmlsZSkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50 IHByb2ZpbCAodW5zaWduZWQgc2hvcnQgaW50ICpfX3NhbXBsZV9idWZmZXIsIHNpemVfdCBfX3Np emUsCiAgICAgICAgICAgICAgICAgICBzaXplX3QgX19vZmZzZXQsIHVuc2lnbmVkIGludCBfX3Nj YWxlKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGFjY3QgKF9fY29uc3QgY2hhciAqX19uYW1l KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmdldHVzZXJzaGVsbCAodm9pZCkgdGhyb3cgKCk7 CmV4dGVybiB2b2lkIGVuZHVzZXJzaGVsbCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiB2b2lkIHNl dHVzZXJzaGVsbCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBkYWVtb24gKGludCBf X25vY2hkaXIsIGludCBfX25vY2xvc2UpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGNocm9v dCAoX19jb25zdCBjaGFyICpfX3BhdGgpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqZ2V0cGFz cyAoX19jb25zdCBjaGFyICpfX3Byb21wdCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBmc3lu YyAoaW50IF9fZmQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgZ2V0aG9zdGlkICh2 b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzeW5jICh2b2lkKSB0aHJvdyAoKTsKCgoKCmV4 dGVybiBpbnQgZ2V0cGFnZXNpemUgKHZvaWQpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv bnN0X18pKTsKCgoKCmV4dGVybiBpbnQgdHJ1bmNhdGUgKF9fY29uc3QgY2hhciAqX19maWxlLCBf X29mZl90IF9fbGVuZ3RoKSB0aHJvdyAoKTsKIyA4MzYgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIg MyA0CmV4dGVybiBpbnQgdHJ1bmNhdGU2NCAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fb2ZmNjRf dCBfX2xlbmd0aCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZ0cnVuY2F0ZSAoaW50IF9fZmQs IF9fb2ZmX3QgX19sZW5ndGgpIHRocm93ICgpOwojIDg1MSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5o IiAzIDQKZXh0ZXJuIGludCBmdHJ1bmNhdGU2NCAoaW50IF9fZmQsIF9fb2ZmNjRfdCBfX2xlbmd0 aCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXRkdGFibGVzaXplICh2b2lkKSB0aHJvdyAo KTsKIyA4NjYgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CmV4dGVybiBpbnQgYnJrICh2b2lk ICpfX2FkZHIpIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkICpzYnJrIChpbnRwdHJfdCBfX2Rl bHRhKSB0aHJvdyAoKTsKIyA4ODcgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CmV4dGVybiBs b25nIGludCBzeXNjYWxsIChsb25nIGludCBfX3N5c25vLCAuLi4pIHRocm93ICgpOwojIDkwNyAi L3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzIDQKZXh0ZXJuIGludCBsb2NrZiAoaW50IF9fZmQsIGlu dCBfX2NtZCwgX19vZmZfdCBfX2xlbikgdGhyb3cgKCk7CiMgOTE3ICIvdXNyL2luY2x1ZGUvdW5p c3RkLmgiIDMgNApleHRlcm4gaW50IGxvY2tmNjQgKGludCBfX2ZkLCBpbnQgX19jbWQsIF9fb2Zm NjRfdCBfX2xlbikgdGhyb3cgKCk7CiMgOTM4ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMgNApl eHRlcm4gaW50IGZkYXRhc3luYyAoaW50IF9fZmlsZGVzKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVy biBjaGFyICpjcnlwdCAoX19jb25zdCBjaGFyICpfX2tleSwgX19jb25zdCBjaGFyICpfX3NhbHQp IHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBlbmNyeXB0IChjaGFyICpfX2Jsb2NrLCBpbnQgX19l ZGZsYWcpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gdm9pZCBzd2FiIChfX2NvbnN0IHZvaWQgKl9f cmVzdHJpY3QgX19mcm9tLCB2b2lkICpfX3Jlc3RyaWN0IF9fdG8sCiAgICAgICAgICAgICAgICAg IHNzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBjaGFyICpjdGVybWlkIChjaGFy ICpfX3MpIHRocm93ICgpOwojIDk4MyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzIDQKZXh0ZXJu IGludCBwdGhyZWFkX2F0Zm9yayAodm9pZCAoKl9fcHJlcGFyZSkgKHZvaWQpLAogICAgICAgICAg ICAgICAgICAgICAgICAgICB2b2lkICgqX19wYXJlbnQpICh2b2lkKSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgdm9pZCAoKl9fY2hpbGQpICh2b2lkKSkgdGhyb3cgKCk7CgoKfQojIDM5ICIv aG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvaTY4Ni1wYy1saW51 eC1nbnUvYml0cy9ndGhyLWRlZmF1bHQuaCIgMiAzCgp0eXBlZGVmIHB0aHJlYWRfa2V5X3QgX19n dGhyZWFkX2tleV90Owp0eXBlZGVmIHB0aHJlYWRfb25jZV90IF9fZ3RocmVhZF9vbmNlX3Q7CnR5 cGVkZWYgcHRocmVhZF9tdXRleF90IF9fZ3RocmVhZF9tdXRleF90OwoKCgoKCgojcHJhZ21hIHdl YWsgcHRocmVhZF9vbmNlCiNwcmFnbWEgd2VhayBwdGhyZWFkX2tleV9jcmVhdGUKI3ByYWdtYSB3 ZWFrIHB0aHJlYWRfa2V5X2RlbGV0ZQojcHJhZ21hIHdlYWsgcHRocmVhZF9nZXRzcGVjaWZpYwoj cHJhZ21hIHdlYWsgcHRocmVhZF9zZXRzcGVjaWZpYwojcHJhZ21hIHdlYWsgcHRocmVhZF9jcmVh dGUKCiNwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4X2xvY2sKI3ByYWdtYSB3ZWFrIHB0aHJlYWRf bXV0ZXhfdHJ5bG9jawojcHJhZ21hIHdlYWsgcHRocmVhZF9tdXRleF91bmxvY2sKIyA4NyAiL2hv bWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2k2ODYtcGMtbGludXgt Z251L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDMKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX2Fj dGl2ZV9wICh2b2lkKQp7CiAgc3RhdGljIHZvaWQgKmNvbnN0IF9fZ3RocmVhZF9hY3RpdmVfcHRy ID0gKHZvaWQgKikgJnB0aHJlYWRfY3JlYXRlOwogIHJldHVybiBfX2d0aHJlYWRfYWN0aXZlX3B0 ciAhPSAwOwp9CiMgNDQ5ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2Mr Ky8zLjQvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLWRlZmF1bHQuaCIgMwpzdGF0aWMgaW5s aW5lIGludApfX2d0aHJlYWRfb25jZSAoX19ndGhyZWFkX29uY2VfdCAqb25jZSwgdm9pZCAoKmZ1 bmMpICh2b2lkKSkKewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1cm4gcHRo cmVhZF9vbmNlIChvbmNlLCBmdW5jKTsKICBlbHNlCiAgICByZXR1cm4gLTE7Cn0KCnN0YXRpYyBp bmxpbmUgaW50Cl9fZ3RocmVhZF9rZXlfY3JlYXRlIChfX2d0aHJlYWRfa2V5X3QgKmtleSwgdm9p ZCAoKmR0b3IpICh2b2lkICopKQp7CiAgcmV0dXJuIHB0aHJlYWRfa2V5X2NyZWF0ZSAoa2V5LCBk dG9yKTsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX2tleV9kZWxldGUgKF9fZ3RocmVh ZF9rZXlfdCBrZXkpCnsKICByZXR1cm4gcHRocmVhZF9rZXlfZGVsZXRlIChrZXkpOwp9CgpzdGF0 aWMgaW5saW5lIHZvaWQgKgpfX2d0aHJlYWRfZ2V0c3BlY2lmaWMgKF9fZ3RocmVhZF9rZXlfdCBr ZXkpCnsKICByZXR1cm4gcHRocmVhZF9nZXRzcGVjaWZpYyAoa2V5KTsKfQoKc3RhdGljIGlubGlu ZSBpbnQKX19ndGhyZWFkX3NldHNwZWNpZmljIChfX2d0aHJlYWRfa2V5X3Qga2V5LCBjb25zdCB2 b2lkICpwdHIpCnsKICByZXR1cm4gcHRocmVhZF9zZXRzcGVjaWZpYyAoa2V5LCBwdHIpOwp9Cgpz dGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfbXV0ZXhfbG9jayAoX19ndGhyZWFkX211dGV4X3Qg Km11dGV4KQp7CiAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKICAgIHJldHVybiBwdGhyZWFk X211dGV4X2xvY2sgKG11dGV4KTsKICBlbHNlCiAgICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGlu ZSBpbnQKX19ndGhyZWFkX211dGV4X3RyeWxvY2sgKF9fZ3RocmVhZF9tdXRleF90ICptdXRleCkK ewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1cm4gcHRocmVhZF9tdXRleF90 cnlsb2NrIChtdXRleCk7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50 Cl9fZ3RocmVhZF9tdXRleF91bmxvY2sgKF9fZ3RocmVhZF9tdXRleF90ICptdXRleCkKewogIGlm IChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1cm4gcHRocmVhZF9tdXRleF91bmxvY2sg KG11dGV4KTsKICBlbHNlCiAgICByZXR1cm4gMDsKfQojIDk3ICIvaG9tZS9vbGRoYW0vZ2NjLWlu c3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLmgi IDIgMwojIDM4ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQv aTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytpby5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB0 eXBlZGVmIGxvbmcgc3RyZWFtb2ZmOwogIHR5cGVkZWYgcHRyZGlmZl90IHN0cmVhbXNpemU7Cgog IHR5cGVkZWYgcHRyZGlmZl90IHdzdHJlYW1zaXplOwoKICB0eXBlZGVmIGZwb3NfdCBfX2Nfc3Ry ZWFtcG9zOwoKICB0eXBlZGVmIF9fZ3RocmVhZF9tdXRleF90IF9fY19sb2NrOwoKCiAgdHlwZWRl ZiBGSUxFIF9fY19maWxlOwoKCiAgc3RydWN0IF9faW9zX2ZsYWdzCiAgewogICAgdHlwZWRlZiBz aG9ydCBfX2ludF90eXBlOwoKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Jvb2xhbHBo YSA9IDB4MDAwMTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2RlYyA9IDB4MDAwMjsK ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2ZpeGVkID0gMHgwMDA0OwogICAgc3RhdGlj IGNvbnN0IF9faW50X3R5cGUgX1NfaGV4ID0gMHgwMDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50 X3R5cGUgX1NfaW50ZXJuYWwgPSAweDAwMTA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBf U19sZWZ0ID0gMHgwMDIwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfb2N0ID0gMHgw MDQwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfcmlnaHQgPSAweDAwODA7CiAgICBz dGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zY2llbnRpZmljID0gMHgwMTAwOwogICAgc3RhdGlj IGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd2Jhc2UgPSAweDAyMDA7CiAgICBzdGF0aWMgY29uc3Qg X19pbnRfdHlwZSBfU19zaG93cG9pbnQgPSAweDA0MDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRf dHlwZSBfU19zaG93cG9zID0gMHgwODAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf c2tpcHdzID0gMHgxMDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdW5pdGJ1ZiA9 IDB4MjAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3VwcGVyY2FzZSA9IDB4NDAw MDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2FkanVzdGZpZWxkID0gMHgwMDIwIHwg MHgwMDgwIHwgMHgwMDEwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYmFzZWZpZWxk ID0gMHgwMDAyIHwgMHgwMDQwIHwgMHgwMDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUg X1NfZmxvYXRmaWVsZCA9IDB4MDEwMCB8IDB4MDAwNDsKCgogICAgc3RhdGljIGNvbnN0IF9faW50 X3R5cGUgX1NfYmFkYml0ID0gMHgwMTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Vv ZmJpdCA9IDB4MDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19mYWlsYml0ID0gMHgw NDsKCgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYXBwID0gMHgwMTsKICAgIHN0YXRp YyBjb25zdCBfX2ludF90eXBlIF9TX2F0ZSA9IDB4MDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRf dHlwZSBfU19iaW4gPSAweDA0OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaW4gPSAw eDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfb3V0ID0gMHgxMDsKICAgIHN0YXRp YyBjb25zdCBfX2ludF90eXBlIF9TX3RydW5jID0gMHgyMDsKICB9Owp9CiMgNDUgIi9ob21lL29s ZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL2Zwb3MuaCIgMiAzCiMg MSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2N3Y2hhciIg MSAzCiMgNDggIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9j d2NoYXIiIDMKCgoKIyAxICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2Mr Ky8zLjQvY3RpbWUiIDEgMwojIDQ4ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNs dWRlL2MrKy8zLjQvY3RpbWUiIDMKIyA2NCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEv aW5jbHVkZS9jKysvMy40L2N0aW1lIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6Y2xvY2tf dDsKICB1c2luZyA6OnRpbWVfdDsKICB1c2luZyA6OnRtOwoKICB1c2luZyA6OmNsb2NrOwogIHVz aW5nIDo6ZGlmZnRpbWU7CiAgdXNpbmcgOjpta3RpbWU7CiAgdXNpbmcgOjp0aW1lOwogIHVzaW5n IDo6YXNjdGltZTsKICB1c2luZyA6OmN0aW1lOwogIHVzaW5nIDo6Z210aW1lOwogIHVzaW5nIDo6 bG9jYWx0aW1lOwogIHVzaW5nIDo6c3RyZnRpbWU7Cn0KIyA1MiAiL2hvbWUvb2xkaGFtL2djYy1p bnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2N3Y2hhciIgMiAzCgoKIyAxICIvdXNyL2luY2x1 ZGUvd2NoYXIuaCIgMSAzIDQKIyA0MCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMgNAojIDEgIi9o b21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251 LzMuNC9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMgNAojIDQxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg MiAzIDQKCgoKCgoKCiMgMSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvbGliL2djYy1s aWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgNDkgIi91 c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMgNAojIDg1ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMyA0 CnR5cGVkZWYgX19tYnN0YXRlX3QgbWJzdGF0ZV90OwojIDEwNSAiL3Vzci9pbmNsdWRlL3djaGFy LmgiIDMgNApzdHJ1Y3QgdG07CgoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIHdjaGFyX3QgKndjc2Nw eSAod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYykgdGhyb3cgKCk7CgpleHRlcm4gd2NoYXJf dCAqd2NzbmNweSAod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pCiAg ICAgdGhyb3cgKCk7CgoKZXh0ZXJuIHdjaGFyX3QgKndjc2NhdCAod2NoYXJfdCAqX19yZXN0cmlj dCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0 cmljdCBfX3NyYykgdGhyb3cgKCk7CgpleHRlcm4gd2NoYXJfdCAqd2NzbmNhdCAod2NoYXJfdCAq X19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFy X3QgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCB3Y3NjbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3My KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCB3 Y3NuY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwgc2l6 ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0 ZXJuIGludCB3Y3NjYXNlY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJf dCAqX19zMikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB3Y3NuY2FzZWNtcCAoX19jb25zdCB3Y2hh cl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAg IHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgX193Y3NjYXNlY21wX2wgKF9f Y29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgX193 Y3NuY2FzZWNtcF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19z MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIF9fbG9jYWxlX3QgX19s b2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCB3Y3Njb2xsIChfX2NvbnN0IHdjaGFyX3QgKl9f czEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMikgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3Qgd2Nz eGZybSAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAogICAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoK CgoKCmV4dGVybiBpbnQgX193Y3Njb2xsX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25z dCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9j KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBfX3djc3hmcm1fbCAod2NoYXJfdCAqX19zMSwg X19jb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg X19uLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgpleHRlcm4gd2NoYXJfdCAqd2NzZHVw IChfX2NvbnN0IHdjaGFyX3QgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9j X18pKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc2NociAoX19jb25zdCB3Y2hhcl90ICpfX3djcywg d2NoYXJfdCBfX3djKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK ZXh0ZXJuIHdjaGFyX3QgKndjc3JjaHIgKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIHdjaGFyX3Qg X193YykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVy biB3Y2hhcl90ICp3Y3NjaHJudWwgKF9fY29uc3Qgd2NoYXJfdCAqX19zLCB3Y2hhcl90IF9fd2Mp CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gc2l6 ZV90IHdjc2NzcG4gKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19y ZWplY3QpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJu IHNpemVfdCB3Y3NzcG4gKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAq X19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRl cm4gd2NoYXJfdCAqd2NzcGJyayAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgX19jb25zdCB3Y2hh cl90ICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK CmV4dGVybiB3Y2hhcl90ICp3Y3NzdHIgKF9fY29uc3Qgd2NoYXJfdCAqX19oYXlzdGFjaywgX19j b25zdCB3Y2hhcl90ICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w dXJlX18pKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc3djcyAoX19jb25zdCB3Y2hhcl90ICpfX2hh eXN0YWNrLCBfX2NvbnN0IHdjaGFyX3QgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gd2NoYXJfdCAqd2NzdG9rICh3Y2hhcl90ICpf X3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpf X3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jl c3RyaWN0IF9fcHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gc2l6ZV90IHdjc2xlbiAoX19jb25zdCB3 Y2hhcl90ICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRl cm4gc2l6ZV90IHdjc25sZW4gKF9fY29uc3Qgd2NoYXJfdCAqX19zLCBzaXplX3QgX19tYXhsZW4p CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gd2No YXJfdCAqd21lbWNociAoX19jb25zdCB3Y2hhcl90ICpfX3MsIHdjaGFyX3QgX19jLCBzaXplX3Qg X19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBp bnQgd21lbWNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAg ICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24pCiAg ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHdjaGFyX3Qg KndtZW1jcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwKICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKSB0aHJvdyAo KTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1tb3ZlICh3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdj aGFyX3QgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIHdjaGFyX3Qg KndtZW1zZXQgKHdjaGFyX3QgKl9fcywgd2NoYXJfdCBfX2MsIHNpemVfdCBfX24pIHRocm93ICgp OwoKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1wY3B5ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEs CiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f czIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHdpbnRfdCBidG93YyAo aW50IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgd2N0b2IgKHdpbnRfdCBfX2MpIHRocm93 ICgpOwoKCgpleHRlcm4gaW50IG1ic2luaXQgKF9fY29uc3QgbWJzdGF0ZV90ICpfX3BzKSB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIHNpemVfdCBtYnJ0b3dj ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLAogICAgICAgICAgICAgICAgICAgICAgIF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAg ICAgbWJzdGF0ZV90ICpfX3ApIHRocm93ICgpOwoKCmV4dGVybiBzaXplX3Qgd2NydG9tYiAoY2hh ciAqX19yZXN0cmljdCBfX3MsIHdjaGFyX3QgX193YywKICAgICAgICAgICAgICAgICAgICAgICBt YnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKZXh0ZXJuIHNpemVfdCBfX21i cmxlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKICAgICAgICAg ICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwpleHRl cm4gc2l6ZV90IG1icmxlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9f biwKICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJv dyAoKTsKIyAyOTcgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzIDQKZXh0ZXJuIHNpemVfdCBtYnNy dG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IGNoYXIgKipfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19sZW4sCiAgICAgICAg ICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoK CmV4dGVybiBzaXplX3Qgd2NzcnRvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAg ICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX3NyYywgc2l6 ZV90IF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0 IF9fcHMpIHRocm93ICgpOwoKCgoKCmV4dGVybiBzaXplX3QgbWJzbnJ0b3djcyAod2NoYXJfdCAq X19yZXN0cmljdCBfX2RzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg KipfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19ubWMsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90IF9fbGVuLCBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoK CmV4dGVybiBzaXplX3Qgd2NzbnJ0b21icyAoY2hhciAqX19yZXN0cmljdCBfX2RzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fc3JjLAog ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX253Yywgc2l6ZV90IF9fbGVuLAogICAg ICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAo KTsKCgoKCgoKZXh0ZXJuIGludCB3Y3dpZHRoICh3Y2hhcl90IF9fYykgdGhyb3cgKCk7CgoKCmV4 dGVybiBpbnQgd2Nzd2lkdGggKF9fY29uc3Qgd2NoYXJfdCAqX19zLCBzaXplX3QgX19uKSB0aHJv dyAoKTsKCgoKCgpleHRlcm4gZG91YmxlIHdjc3RvZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9f ZW5kcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHdjc3RvZiAoX19jb25zdCB3Y2hhcl90 ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVz dHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgd2NzdG9sZCAoX19j b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g bG9uZyBpbnQgd2NzdG9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg ICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9f YmFzZSkgdGhyb3cgKCk7CgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCB3Y3N0b3VsIChfX2Nv bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAg dGhyb3cgKCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHdjc3RvcSAo X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0 aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCB3 Y3N0b3VxIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cg KCk7CgoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCB3Y3N0b2xsIChfX2Nv bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJv dyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCB3Y3N0 b3VsbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cg KCk7CiMgNDEwICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMyA0CmV4dGVybiBsb25nIGludCBfX3dj c3RvbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2Us CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsK CmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3djc3RvdWxfbCAoX19jb25zdCB3Y2hhcl90ICpf X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3 Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0 ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX193Y3N0b2xsX2wgKF9fY29uc3Qgd2NoYXJf dCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3 Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKX19leHRlbnNp b25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3djc3RvdWxsX2wgKF9fY29uc3Qg d2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBf X2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgX193Y3N0b2RfbCAoX19jb25zdCB3 Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hh cl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAo KTsKCmV4dGVybiBmbG9hdCBfX3djc3RvZl9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19l bmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3Vi bGUgX193Y3N0b2xkX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cg KCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBfX3djc3RvZF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90 ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2No YXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQogICAgIHRocm93ICgpOwpl eHRlcm4gZmxvYXQgX193Y3N0b2ZfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVz dHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQogICAgIHRocm93ICgpOwpleHRlcm4gbG9uZyBk b3VibGUgX193Y3N0b2xkX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19u cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19y ZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50IF9fZ3JvdXApIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBfX3djc3RvbF9pbnRlcm5h bCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cg KCk7CgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3djc3RvdWxfaW50ZXJuYWwgKF9fY29u c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dy b3VwKSB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3dj c3RvbGxfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3Qg X19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f YmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNp Z25lZCBsb25nIGxvbmcgaW50IF9fd2NzdG91bGxfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAq CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVz dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB3Y2hhcl90ICoqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2dyb3VwKSB0aHJvdyAoKTsK IyA1MjggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzIDQKZXh0ZXJuIHdjaGFyX3QgKndjcGNweSAo d2NoYXJfdCAqX19kZXN0LCBfX2NvbnN0IHdjaGFyX3QgKl9fc3JjKSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIHdjaGFyX3QgKndjcG5jcHkgKHdjaGFyX3QgKl9fZGVzdCwgX19jb25zdCB3Y2hhcl90ICpf X3NyYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgZndpZGUg KF9fRklMRSAqX19mcCwgaW50IF9fbW9kZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZndwcmlu dGYgKF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAgICAgX19j b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoK ZXh0ZXJuIGludCB3cHJpbnRmIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQs IC4uLikKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHN3cHJpbnRmICh3Y2hhcl90ICpfX3Jl c3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hh cl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoKCmV4dGVybiBp bnQgdmZ3cHJpbnRmIChfX0ZJTEUgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAg ICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCB2 d3ByaW50ZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAg ICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgoKZXh0ZXJu IGludCB2c3dwcmludGYgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLAogICAg ICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAog ICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkg OwoKCgpleHRlcm4gaW50IGZ3c2NhbmYgKF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4u LikKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHdzY2FuZiAoX19jb25zdCB3Y2hhcl90ICpf X3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCBzd3Nj YW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAg IF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgp IDsKCgoKCmV4dGVybiBpbnQgdmZ3c2NhbmYgKF9fRklMRSAqX19yZXN0cmljdCBfX3MsCiAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAg ICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoK ZXh0ZXJuIGludCB2d3NjYW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQs CiAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkg OwoKZXh0ZXJuIGludCB2c3dzY2FuZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywK ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0 LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAo KSA7CgoKCgpleHRlcm4gd2ludF90IGZnZXR3YyAoX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7 CmV4dGVybiB3aW50X3QgZ2V0d2MgKF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVy biB3aW50X3QgZ2V0d2NoYXIgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gd2ludF90IGZwdXR3 YyAod2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRf dCBwdXR3YyAod2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRl cm4gd2ludF90IHB1dHdjaGFyICh3Y2hhcl90IF9fd2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHdj aGFyX3QgKmZnZXR3cyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLCBpbnQgX19uLAogICAgICAg ICAgICAgICAgICAgICAgICBfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoK CmV4dGVybiBpbnQgZnB1dHdzIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX193cywKICAg ICAgICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoK CmV4dGVybiB3aW50X3QgdW5nZXR3YyAod2ludF90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIHRo cm93ICgpOwoKCgoKCmV4dGVybiB3aW50X3QgZ2V0d2NfdW5sb2NrZWQgKF9fRklMRSAqX19zdHJl YW0pIHRocm93ICgpOwpleHRlcm4gd2ludF90IGdldHdjaGFyX3VubG9ja2VkICh2b2lkKSB0aHJv dyAoKTsKCgpleHRlcm4gd2ludF90IGZnZXR3Y191bmxvY2tlZCAoX19GSUxFICpfX3N0cmVhbSkg dGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCBmcHV0d2NfdW5sb2NrZWQgKHdjaGFyX3QgX193Yywg X19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiB3aW50X3QgcHV0d2NfdW5sb2Nr ZWQgKHdjaGFyX3QgX193YywgX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiB3aW50 X3QgcHV0d2NoYXJfdW5sb2NrZWQgKHdjaGFyX3QgX193YykgdGhyb3cgKCk7CgoKCmV4dGVybiB3 Y2hhcl90ICpmZ2V0d3NfdW5sb2NrZWQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX193cywgaW50IF9f biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19GSUxFICpfX3Jlc3RyaWN0IF9f c3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGZwdXR3c191bmxvY2tlZCAoX19jb25zdCB3 Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0ZJ TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gc2l6ZV90IHdj c2Z0aW1lICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4c2l6ZSwKICAgICAg ICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAog ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3Rw KSB0aHJvdyAoKTsKIyA2ODAgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzIDQKfQojIDU1ICIvaG9t ZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvY3djaGFyIiAyIDMKIyA2 OSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2N3Y2hhciIg MwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6Om1ic3RhdGVfdDsKfQojIDEzMyAiL2hvbWUvb2xk aGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2N3Y2hhciIgMwpuYW1lc3BhY2Ug c3RkCnsKICB1c2luZyA6OndpbnRfdDsKCiAgdXNpbmcgOjpidG93YzsKICB1c2luZyA6OmZnZXR3 YzsKICB1c2luZyA6OmZnZXR3czsKICB1c2luZyA6OmZwdXR3YzsKICB1c2luZyA6OmZwdXR3czsK ICB1c2luZyA6OmZ3aWRlOwogIHVzaW5nIDo6ZndwcmludGY7CiAgdXNpbmcgOjpmd3NjYW5mOwog IHVzaW5nIDo6Z2V0d2M7CiAgdXNpbmcgOjpnZXR3Y2hhcjsKICB1c2luZyA6Om1icmxlbjsKICB1 c2luZyA6Om1icnRvd2M7CiAgdXNpbmcgOjptYnNpbml0OwogIHVzaW5nIDo6bWJzcnRvd2NzOwog IHVzaW5nIDo6cHV0d2M7CiAgdXNpbmcgOjpwdXR3Y2hhcjsKICB1c2luZyA6OnN3cHJpbnRmOwog IHVzaW5nIDo6c3dzY2FuZjsKICB1c2luZyA6OnVuZ2V0d2M7CiAgdXNpbmcgOjp2ZndwcmludGY7 CiAgdXNpbmcgOjp2ZndzY2FuZjsKICB1c2luZyA6OnZzd3ByaW50ZjsKICB1c2luZyA6OnZzd3Nj YW5mOwogIHVzaW5nIDo6dndwcmludGY7CiAgdXNpbmcgOjp2d3NjYW5mOwogIHVzaW5nIDo6d2Ny dG9tYjsKICB1c2luZyA6Ondjc2NhdDsKICB1c2luZyA6Ondjc2NtcDsKICB1c2luZyA6Ondjc2Nv bGw7CiAgdXNpbmcgOjp3Y3NjcHk7CiAgdXNpbmcgOjp3Y3Njc3BuOwogIHVzaW5nIDo6d2NzZnRp bWU7CiAgdXNpbmcgOjp3Y3NsZW47CiAgdXNpbmcgOjp3Y3NuY2F0OwogIHVzaW5nIDo6d2NzbmNt cDsKICB1c2luZyA6Ondjc25jcHk7CiAgdXNpbmcgOjp3Y3NydG9tYnM7CiAgdXNpbmcgOjp3Y3Nz cG47CiAgdXNpbmcgOjp3Y3N0b2Q7CiAgdXNpbmcgOjp3Y3N0b2Y7CiAgdXNpbmcgOjp3Y3N0b2s7 CiAgdXNpbmcgOjp3Y3N0b2w7CiAgdXNpbmcgOjp3Y3N0b3VsOwogIHVzaW5nIDo6d2NzeGZybTsK ICB1c2luZyA6OndjdG9iOwogIHVzaW5nIDo6d21lbWNtcDsKICB1c2luZyA6OndtZW1jcHk7CiAg dXNpbmcgOjp3bWVtbW92ZTsKICB1c2luZyA6OndtZW1zZXQ7CiAgdXNpbmcgOjp3cHJpbnRmOwog IHVzaW5nIDo6d3NjYW5mOwoKICB1c2luZyA6Ondjc2NocjsKCiAgaW5saW5lIHdjaGFyX3QqCiAg d2NzY2hyKHdjaGFyX3QqIF9fcCwgd2NoYXJfdCBfX2MpCiAgeyByZXR1cm4gd2NzY2hyKGNvbnN0 X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fcCksIF9fYyk7IH0KCiAgdXNpbmcgOjp3Y3NwYnJrOwoK ICBpbmxpbmUgd2NoYXJfdCoKICB3Y3NwYnJrKHdjaGFyX3QqIF9fczEsIHdjaGFyX3QqIF9fczIp CiAgeyByZXR1cm4gd2NzcGJyayhjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3MxKSwgX19z Mik7IH0KCiAgdXNpbmcgOjp3Y3NyY2hyOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3Y3NyY2hyKHdj aGFyX3QqIF9fcCwgd2NoYXJfdCBfX2MpCiAgeyByZXR1cm4gd2NzcmNocihjb25zdF9jYXN0PGNv bnN0IHdjaGFyX3QqPihfX3ApLCBfX2MpOyB9CgogIHVzaW5nIDo6d2Nzc3RyOwoKICBpbmxpbmUg d2NoYXJfdCoKICB3Y3NzdHIod2NoYXJfdCogX19zMSwgd2NoYXJfdCogX19zMikKICB7IHJldHVy biB3Y3NzdHIoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19zMSksIF9fczIpOyB9CgogIHVz aW5nIDo6d21lbWNocjsKCiAgaW5saW5lIHdjaGFyX3QqCiAgd21lbWNocih3Y2hhcl90KiBfX3As IHdjaGFyX3QgX19jLCBzaXplX3QgX19uKQogIHsgcmV0dXJuIHdtZW1jaHIoY29uc3RfY2FzdDxj b25zdCB3Y2hhcl90Kj4oX19wKSwgX19jLCBfX24pOyB9Cn0KCgoKCgoKCm5hbWVzcGFjZSBfX2du dV9jeHgKewogIHVzaW5nIDo6d2NzdG9sZDsKICB1c2luZyA6Ondjc3RvbGw7CiAgdXNpbmcgOjp3 Y3N0b3VsbDsKfQoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4Ojp3Y3N0b2xkOwog IHVzaW5nIF9fZ251X2N4eDo6d2NzdG9sbDsKICB1c2luZyBfX2dudV9jeHg6Ondjc3RvdWxsOwp9 CiMgNDYgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRz L2Zwb3MuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf U3RhdGVUPgogICAgY2xhc3MgZnBvcwogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBf U3RhdGVUIF9fc3RhdGVfdHlwZTsKCiAgICBwcml2YXRlOgogICAgICBzdHJlYW1vZmYgX01fb2Zm OwogICAgICBfX3N0YXRlX3R5cGUgX01fc3Q7CgogICAgcHVibGljOgogICAgICBfX3N0YXRlX3R5 cGUKICAgICAgc3RhdGUoKSBjb25zdCB7IHJldHVybiBfTV9zdDsgfQoKICAgICAgdm9pZAogICAg ICBzdGF0ZShfX3N0YXRlX3R5cGUgX19zdCkgeyBfTV9zdCA9IF9fc3Q7IH0KCgoKICAgICAgZnBv cygpOiBfTV9vZmYoc3RyZWFtb2ZmKCkpLCBfTV9zdChfX3N0YXRlX3R5cGUoKSkgeyB9CgogICAg ICBmcG9zKHN0cmVhbW9mZiBfX29mZiwgX19zdGF0ZV90eXBlIF9fc3QgPSBfX3N0YXRlX3R5cGUo KSkKICAgICAgOiBfTV9vZmYoX19vZmYpLCBfTV9zdChfX3N0KSB7IH0KCiAgICAgIG9wZXJhdG9y IHN0cmVhbW9mZigpIGNvbnN0IHsgcmV0dXJuIF9NX29mZjsgfQoKICAgICAgZnBvcyYKICAgICAg b3BlcmF0b3IrPShzdHJlYW1vZmYgX19vZmYpIHsgX01fb2ZmICs9IF9fb2ZmOyByZXR1cm4gKnRo aXM7IH0KCiAgICAgIGZwb3MmCiAgICAgIG9wZXJhdG9yLT0oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9N X29mZiAtPSBfX29mZjsgcmV0dXJuICp0aGlzOyB9CgogICAgICBmcG9zCiAgICAgIG9wZXJhdG9y KyhzdHJlYW1vZmYgX19vZmYpCiAgICAgIHsKICAgICAgICBmcG9zIF9fdCgqdGhpcyk7CiAgICAg ICAgX190ICs9IF9fb2ZmOwogICAgICAgIHJldHVybiBfX3Q7CiAgICAgIH0KCiAgICAgIGZwb3MK ICAgICAgb3BlcmF0b3ItKHN0cmVhbW9mZiBfX29mZikKICAgICAgewogICAgICAgIGZwb3MgX190 KCp0aGlzKTsKICAgICAgICBfX3QgLT0gX19vZmY7CiAgICAgICAgcmV0dXJuIF9fdDsKICAgICAg fQoKICAgICAgYm9vbAogICAgICBvcGVyYXRvcj09KGNvbnN0IGZwb3MmIF9fcG9zKSBjb25zdAog ICAgICB7IHJldHVybiBfTV9vZmYgPT0gX19wb3MuX01fb2ZmOyB9CgogICAgICBib29sCiAgICAg IG9wZXJhdG9yIT0oY29uc3QgZnBvcyYgX19wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX29m ZiAhPSBfX3Bvcy5fTV9vZmY7IH0KCiAgICAgIHN0cmVhbW9mZgogICAgICBfTV9wb3NpdGlvbigp IGNvbnN0IHsgcmV0dXJuIF9NX29mZjsgfQoKICAgICAgdm9pZAogICAgICBfTV9wb3NpdGlvbihz dHJlYW1vZmYgX19vZmYpIHsgX01fb2ZmID0gX19vZmY7IH0KICAgIH07CgoKICB0eXBlZGVmIGZw b3M8bWJzdGF0ZV90PiBzdHJlYW1wb3M7CgoKICB0eXBlZGVmIGZwb3M8bWJzdGF0ZV90PiB3c3Ry ZWFtcG9zOwoKfQojIDUwICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2Mr Ky8zLjQvaW9zZndkIiAyIDMKIyAxICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNs dWRlL2MrKy8zLjQvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL2hvbWUvb2xkaGFtL2dj Yy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvZnVuY3RleGNlcHQuaCIgMwojIDEg Ii9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9leGNlcHRpb25f ZGVmaW5lcy5oIiAxIDMKIyAzNSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVk ZS9jKysvMy40L2JpdHMvZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9p ZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9h bGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAg X190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3Io Y29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNo YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciog X19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7Cgog IHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAg X190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93 X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93 X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJv cihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3Qg Y2hhciogX19zKTsKfQojIDUxICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRl L2MrKy8zLjQvaW9zZndkIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xh c3MgYmFzaWNfaW9zOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmVhbWJ1ZjsKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8 X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNz IGJhc2ljX29zdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaW9zdHJlYW07Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRz PF9DaGFyVD4sCiAgICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ ID4KICAgIGNsYXNzIGJhc2ljX3N0cmluZ2J1ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBl bmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pc3RyaW5n c3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBj aGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRv cjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX29zdHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAg ICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3Mg YmFzaWNfc3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2ZpbGVidWY7 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJh aXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaWZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAg Y2xhc3MgYmFzaWNfb2ZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfZnN0cmVh bTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90 cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9yOwoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ ID4KICAgIGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0b3I7CgoKCiAgY2xhc3MgaW9zX2Jhc2U7CiMg MTM2ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvaW9zZndk IiAzCiAgdHlwZWRlZiBiYXNpY19pb3M8Y2hhcj4gaW9zOwogIHR5cGVkZWYgYmFzaWNfc3RyZWFt YnVmPGNoYXI+IHN0cmVhbWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08Y2hhcj4gaXN0cmVh bTsKICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhcj4gb3N0cmVhbTsKICB0eXBlZGVmIGJhc2lj X2lvc3RyZWFtPGNoYXI+IGlvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPGNoYXI+ IHN0cmluZ2J1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJpbmdzdHJlYW08Y2hhcj4gaXN0cmluZ3N0 cmVhbTsKICB0eXBlZGVmIGJhc2ljX29zdHJpbmdzdHJlYW08Y2hhcj4gb3N0cmluZ3N0cmVhbTsK ICB0eXBlZGVmIGJhc2ljX3N0cmluZ3N0cmVhbTxjaGFyPiBzdHJpbmdzdHJlYW07CiAgdHlwZWRl ZiBiYXNpY19maWxlYnVmPGNoYXI+IGZpbGVidWY7CiAgdHlwZWRlZiBiYXNpY19pZnN0cmVhbTxj aGFyPiBpZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29mc3RyZWFtPGNoYXI+IG9mc3RyZWFtOwog IHR5cGVkZWYgYmFzaWNfZnN0cmVhbTxjaGFyPiBmc3RyZWFtOwoKCiAgdHlwZWRlZiBiYXNpY19p b3M8d2NoYXJfdD4gd2lvczsKICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1Zjx3Y2hhcl90PiB3c3Ry ZWFtYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiB3aXN0cmVhbTsKICB0eXBl ZGVmIGJhc2ljX29zdHJlYW08d2NoYXJfdD4gd29zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19pb3N0 cmVhbTx3Y2hhcl90PiB3aW9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdidWY8d2NoYXJf dD4gd3N0cmluZ2J1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJpbmdzdHJlYW08d2NoYXJfdD4gd2lz dHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdvc3Ry aW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdzdHJpbmdz dHJlYW07CiAgdHlwZWRlZiBiYXNpY19maWxlYnVmPHdjaGFyX3Q+IHdmaWxlYnVmOwogIHR5cGVk ZWYgYmFzaWNfaWZzdHJlYW08d2NoYXJfdD4gd2lmc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb2Zz dHJlYW08d2NoYXJfdD4gd29mc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZnN0cmVhbTx3Y2hhcl90 PiB3ZnN0cmVhbTsKCgp9CiMgNzEgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1 ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvaG9tZS9vbGRoYW0vZ2Nj LWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfcGFpci5oIiAxIDMKIyA2NCAi L2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX3Bh aXIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+ CnN0cnVjdCBwYWlyIHsKICB0eXBlZGVmIF9UMSBmaXJzdF90eXBlOwogIHR5cGVkZWYgX1QyIHNl Y29uZF90eXBlOwoKICBfVDEgZmlyc3Q7CiAgX1QyIHNlY29uZDsKCgoKCiAgcGFpcigpIDogZmly c3QoKSwgc2Vjb25kKCkge30KCgoKCiAgcGFpcihjb25zdCBfVDEmIF9fYSwgY29uc3QgX1QyJiBf X2IpIDogZmlyc3QoX19hKSwgc2Vjb25kKF9fYikge30KCgogIHRlbXBsYXRlIDxjbGFzcyBfVTEs IGNsYXNzIF9VMj4KICBwYWlyKGNvbnN0IHBhaXI8X1UxLCBfVTI+JiBfX3ApIDogZmlyc3QoX19w LmZpcnN0KSwgc2Vjb25kKF9fcC5zZWNvbmQpIHt9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwg Y2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBf X3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpCnsKICByZXR1cm4gX194LmZpcnN0ID09IF9f eS5maXJzdCAmJiBfX3guc2Vjb25kID09IF9feS5zZWNvbmQ7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3Mg X1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBwYWlyPF9UMSwgX1Qy PiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7CiAgcmV0dXJuIF9feC5maXJzdCA8 IF9feS5maXJzdCB8fAogICAgICAgICAoIShfX3kuZmlyc3QgPCBfX3guZmlyc3QpICYmIF9feC5z ZWNvbmQgPCBfX3kuc2Vjb25kKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4K aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBw YWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCgp0ZW1wbGF0 ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBwYWly PF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuIF9f eSA8IF9feDsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wg b3BlcmF0b3I8PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1Qy PiYgX195KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEs IGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBwYWlyPF9UMSwgX1QyPiYg X194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuICEoX194IDwgX195KTsK fQojIDE0MCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2Jp dHMvc3RsX3BhaXIuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CgoKaW5saW5l IHBhaXI8X1QxLCBfVDI+IG1ha2VfcGFpcihfVDEgX194LCBfVDIgX195KQoKCgp7CiAgcmV0dXJu IHBhaXI8X1QxLCBfVDI+KF9feCwgX195KTsKfQoKfQojIDcyICIvaG9tZS9vbGRoYW0vZ2NjLWlu c3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAi L2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvdHlwZV90 cmFpdHMuaCIgMSAzCiMgNTMgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUv YysrLzMuNC9iaXRzL3R5cGVfdHJhaXRzLmgiIDMKIyA5MCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0 YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvdHlwZV90cmFpdHMuaCIgMwpzdHJ1Y3QgX190 cnVlX3R5cGUge307CnN0cnVjdCBfX2ZhbHNlX3R5cGUge307Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw PgpzdHJ1Y3QgX190eXBlX3RyYWl0cyB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgdGhpc19kdW1t eV9tZW1iZXJfbXVzdF9iZV9maXJzdDsKIyAxMTMgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9n Y2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3R5cGVfdHJhaXRzLmgiIDMKICAgdHlwZWRlZiBfX2Zh bHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2Zh bHNlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNl X3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX2ZhbHNl X3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaXNf UE9EX3R5cGU7Cn07CgoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGJvb2w+IHsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxj aGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1 Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90 cmFpdHM8c2lnbmVkIGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k ZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Nv cHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdu bWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVj dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBz dHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh c190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz X3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsK fTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8d2NoYXJfdD4gewogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNf UE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNob3J0PiB7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5z aWduZWQgc2hvcnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0 X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29u c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9v cGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3Qg X190eXBlX3RyYWl0czxpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k ZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Nv cHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdu bWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVj dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBz dHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf dHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9 OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nPiB7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0Rf dHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZz4g ewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRz PGxvbmcgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRf Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25z dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w ZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBf X3R5cGVfdHJhaXRzPHVuc2lnbmVkIGxvbmcgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf dHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190 cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07 Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGZsb2F0PiB7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0Rf dHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8ZG91YmxlPiB7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBk b3VibGU+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0 cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRv cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3Ry dWN0IF9fdHlwZV90cmFpdHM8X1RwKj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2 aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp YWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9h c3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgoKdGVt cGxhdGUgPGNsYXNzIF9UcD4gc3RydWN0IF9Jc19pbnRlZ2VyIHsKICB0eXBlZGVmIF9fZmFsc2Vf dHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxib29sPiB7 CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBf SXNfaW50ZWdlcjxjaGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0 ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxzaWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190 cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5z aWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxh dGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8d2NoYXJfdD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUg X0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8c2hvcnQ+IHsKICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19p bnRlZ2VyPHVuc2lnbmVkIHNob3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7 Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2ln bmVkIGludD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8 PiBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVn cmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgbG9uZz4gewog IHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lz X2ludGVnZXI8bG9uZyBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07 Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4g c3RydWN0IF9Jc19ub3JtYWxfaXRlcmF0b3IgewogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfTm9y bWFsOwp9OwoKCm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVy YXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4gY2xhc3MgX19ub3JtYWxfaXRlcmF0b3I7Cn0KCnRl bXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4Kc3RydWN0IF9J c19ub3JtYWxfaXRlcmF0b3I8IF9fZ251X2N4eDo6X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9y LCBfQ29udGFpbmVyPiA+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBfTm9ybWFsOwp9OwojIDcz ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxf YWxnb2Jhc2UuaCIgMiAzCiMgMSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVk ZS9jKysvMy40L2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMSAzCiMgNjggIi9ob21l L29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9pdGVyYXRv cl9iYXNlX3R5cGVzLmgiIDMKCm5hbWVzcGFjZSBzdGQKewojIDgwICIvaG9tZS9vbGRoYW0vZ2Nj LWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBl cy5oIiAzCiAgc3RydWN0IGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsKCiAgc3RydWN0IG91dHB1dF9p dGVyYXRvcl90YWcge307CgogIHN0cnVjdCBmb3J3YXJkX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBp bnB1dF9pdGVyYXRvcl90YWcge307CgogIHN0cnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3Rh ZyA6IHB1YmxpYyBmb3J3YXJkX2l0ZXJhdG9yX3RhZyB7fTsKCiAgc3RydWN0IHJhbmRvbV9hY2Nl c3NfaXRlcmF0b3JfdGFnIDogcHVibGljIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIHt9Owoj IDEwMiAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMv c3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DYXRlZ29y eSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfRGlzdGFuY2UgPSBwdHJkaWZmX3QsCiAgICAgICAg ICAgdHlwZW5hbWUgX1BvaW50ZXIgPSBfVHAqLCB0eXBlbmFtZSBfUmVmZXJlbmNlID0gX1RwJj4K ICAgIHN0cnVjdCBpdGVyYXRvcgogICAgewoKICAgICAgdHlwZWRlZiBfQ2F0ZWdvcnkgaXRlcmF0 b3JfY2F0ZWdvcnk7CgogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoKICAgICAgdHlwZWRl ZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwoKICAgICAgdHlwZWRlZiBfUG9pbnRlciBwb2lu dGVyOwoKICAgICAgdHlwZWRlZiBfUmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIH07CgoKCgoKCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIHN0cnVjdCBpdGVyYXRvcl90cmFpdHMg ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRl cmF0b3JfY2F0ZWdvcnk7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjp2YWx1ZV90 eXBlIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpkaWZmZXJl bmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRv cjo6cG9pbnRlciBwb2ludGVyOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cmVm ZXJlbmNlIHJlZmVyZW5jZTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0 cnVjdCBpdGVyYXRvcl90cmFpdHM8X1RwKj4gewogICAgICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3Nf aXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90 eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVk ZWYgX1RwKiBwb2ludGVyOwogICAgICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwogICAgfTsKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxjb25zdCBf VHAqPiB7CiAgICAgIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3Jf Y2F0ZWdvcnk7CiAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRy ZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiBjb25zdCBfVHAqIHBvaW50ZXI7 CiAgICAgIHR5cGVkZWYgY29uc3QgX1RwJiByZWZlcmVuY2U7CiAgICB9OwoKCgoKCgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSXRlcj4KICAgIGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeQogICAgX19pdGVyYXRvcl9jYXRlZ29yeShjb25zdCBf SXRlciYpCiAgICB7IHJldHVybiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVy YXRvcl9jYXRlZ29yeSgpOyB9Cgp9CiMgNzQgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2Mx L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvaG9tZS9vbGRo YW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfaXRlcmF0b3JfYmFz ZV9mdW5jcy5oIiAxIDMKIyA2OCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVk ZS9jKysvMy40L2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMwojIDEgIi9ob21lL29s ZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL2NvbmNlcHRfY2hlY2su aCIgMSAzCiMgMzkgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMu NC9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMwojIDY5ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwv Z2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAyIDMK Cm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAg aW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVu Y2VfdHlwZQogICAgX19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVy YXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKICAgIHsKCiAg ICAgCgogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZm ZXJlbmNlX3R5cGUgX19uID0gMDsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAg ICAgICAgKytfX2ZpcnN0OyArK19fbjsKICAgICAgfQogICAgICByZXR1cm4gX19uOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAgICBpbmxpbmUgdHlw ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2Vf dHlwZQogICAgX19kaXN0YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRv bUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVy YXRvcl90YWcpCiAgICB7CgogICAgIAogICAgICByZXR1cm4gX19sYXN0IC0gX19maXJzdDsKICAg IH0KIyAxMDkgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9i aXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w dXRJdGVyYXRvcj4KICAgIGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRl cmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgIGRpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmly c3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgIHsKCiAgICAgIHJldHVybiBfX2Rpc3RhbmNl KF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIGlu bGluZSB2b2lkCiAgICBfX2FkdmFuY2UoX0lucHV0SXRlciYgX19pLCBfRGlzdGFuY2UgX19uLCBp bnB1dF9pdGVyYXRvcl90YWcpCiAgICB7CgogICAgIAogICAgICB3aGlsZSAoX19uLS0pICsrX19p OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCB0eXBl bmFtZSBfRGlzdGFuY2U+CiAgICBpbmxpbmUgdm9pZAogICAgX19hZHZhbmNlKF9CaWRpcmVjdGlv bmFsSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwKICAgICAgICAgICAgICBiaWRpcmVjdGlv bmFsX2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCgogICAgICBpZiAoX19uID4gMCkKICAgICAg ICB3aGlsZSAoX19uLS0pICsrX19pOwogICAgICBlbHNlCiAgICAgICAgd2hpbGUgKF9fbisrKSAt LV9faTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0 eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBpbmxpbmUgdm9pZAogICAgX19hZHZhbmNlKF9SYW5kb21B Y2Nlc3NJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uLAogICAgICAgICAgICAgIHJhbmRvbV9h Y2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKICAgICAgX19pICs9IF9fbjsKICAgIH0K IyAxNjIgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRz L3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ dGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgaW5saW5lIHZvaWQKICAgIGFkdmFuY2Uo X0lucHV0SXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbikKICAgIHsKCiAgICAgIF9fYWR2YW5j ZShfX2ksIF9fbiwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2kpKTsKICAgIH0KfQojIDc1ICIvaG9t ZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfYWxnb2Jh c2UuaCIgMiAzCiMgMSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysv My40L2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDEgMwojIDY4ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3Rh bGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwpuYW1lc3BhY2Ug c3RkCnsKIyA4OSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40 L2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAg ICBjbGFzcyByZXZlcnNlX2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjx0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnksCiAgICAgICAgICAg ICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6dmFsdWVfdHlw ZSwKICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0 b3I+OjpkaWZmZXJlbmNlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVy YXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciwKICAgICAgICAgICAgICAgICAgICAgIHR5 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2U+CiAgICB7CiAgICBw cm90ZWN0ZWQ6CiAgICAgIF9JdGVyYXRvciBjdXJyZW50OwoKICAgIHB1YmxpYzoKICAgICAgdHlw ZWRlZiBfSXRlcmF0b3IgaXRlcmF0b3JfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy YXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2Vf dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6 cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X0l0ZXJhdG9yPjo6cG9pbnRlciBwb2ludGVyOwoKICAgIHB1YmxpYzoKCgoKICAgICAgcmV2 ZXJzZV9pdGVyYXRvcigpIHsgfQoKCgoKICAgICAgZXhwbGljaXQKICAgICAgcmV2ZXJzZV9pdGVy YXRvcihpdGVyYXRvcl90eXBlIF9feCkgOiBjdXJyZW50KF9feCkgeyB9CgoKCgogICAgICByZXZl cnNlX2l0ZXJhdG9yKGNvbnN0IHJldmVyc2VfaXRlcmF0b3ImIF9feCkKICAgICAgOiBjdXJyZW50 KF9feC5jdXJyZW50KSB7IH0KCgoKCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4KICAg ICAgICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXI+JiBfX3gp CiAgICAgICAgOiBjdXJyZW50KF9feC5iYXNlKCkpIHsgfQoKCgoKICAgICAgaXRlcmF0b3JfdHlw ZQogICAgICBiYXNlKCkgY29uc3QgeyByZXR1cm4gY3VycmVudDsgfQoKCgoKCgogICAgICByZWZl cmVuY2UKICAgICAgb3BlcmF0b3IqKCkgY29uc3QKICAgICAgewogICAgICAgIF9JdGVyYXRvciBf X3RtcCA9IGN1cnJlbnQ7CiAgICAgICAgcmV0dXJuICotLV9fdG1wOwogICAgICB9CgoKCgoKCiAg ICAgIHBvaW50ZXIKICAgICAgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3Iq KCkpOyB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKQog ICAgICB7CiAgICAgICAgLS1jdXJyZW50OwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoK CgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50KQogICAgICB7 CiAgICAgICAgcmV2ZXJzZV9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgICAgIC0tY3VycmVu dDsKICAgICAgICByZXR1cm4gX190bXA7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVy YXRvciYKICAgICAgb3BlcmF0b3ItLSgpCiAgICAgIHsKICAgICAgICArK2N1cnJlbnQ7CiAgICAg ICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3Igb3Bl cmF0b3ItLShpbnQpCiAgICAgIHsKICAgICAgICByZXZlcnNlX2l0ZXJhdG9yIF9fdG1wID0gKnRo aXM7CiAgICAgICAgKytjdXJyZW50OwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoKCgoK CgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUg X19uKSBjb25zdAogICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGN1cnJlbnQgLSBfX24p OyB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKz0oZGlmZmVy ZW5jZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGN1cnJlbnQgLT0gX19uOwogICAgICAgIHJl dHVybiAqdGhpczsKICAgICAgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIG9w ZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdAogICAgICB7IHJldHVybiByZXZlcnNl X2l0ZXJhdG9yKGN1cnJlbnQgKyBfX24pOyB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3Im CiAgICAgIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGN1 cnJlbnQgKz0gX19uOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCgoKCgogICAgICBy ZWZlcmVuY2UKICAgICAgb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7IHJl dHVybiAqKCp0aGlzICsgX19uKTsgfQogICAgfTsKIyAyNjkgIi9ob21lL29sZGhhbS9nY2MtaW5z dGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29u c3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0 IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gX194LmJhc2Uo KSA9PSBfX3kuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlu bGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+ JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBf X3kpCiAgICB7IHJldHVybiBfX3kuYmFzZSgpIDwgX194LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBy ZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgcmV2 ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA9PSBfX3kp OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBv cGVyYXRvcj4oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAg ICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVy biBfX3kgPCBfX3g7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5l IGJvb2wKICAgIG9wZXJhdG9yPD0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBf X3gsCiAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9f eSkKICAgIHsgcmV0dXJuICEoX195IDwgX194KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRl cmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCByZXZlcnNlX2l0ZXJh dG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRv cjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA8IF9feSk7IH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0 b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICBvcGVyYXRvci0oY29uc3QgcmV2ZXJz ZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9p dGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiBfX3kuYmFzZSgpIC0gX194LmJh c2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgcmV2ZXJz ZV9pdGVyYXRvcjxfSXRlcmF0b3I+CiAgICBvcGVyYXRvcisodHlwZW5hbWUgcmV2ZXJzZV9pdGVy YXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uLAogICAgICAgICAgICAgIGNvbnN0 IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194KQogICAgeyByZXR1cm4gcmV2ZXJzZV9p dGVyYXRvcjxfSXRlcmF0b3I+KF9feC5iYXNlKCkgLSBfX24pOyB9CiMgMzI5ICIvaG9tZS9vbGRo YW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfaXRlcmF0b3IuaCIg MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBjbGFzcyBiYWNrX2luc2VydF9p dGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwg dm9pZCwgdm9pZCwgdm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0NvbnRhaW5lciog Y29udGFpbmVyOwoKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWlu ZXJfdHlwZTsKCgogICAgICBleHBsaWNpdAogICAgICBiYWNrX2luc2VydF9pdGVyYXRvcihfQ29u dGFpbmVyJiBfX3gpIDogY29udGFpbmVyKCZfX3gpIHsgfQojIDM1NSAiL2hvbWUvb2xkaGFtL2dj Yy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICAg ICAgYmFja19pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPSh0eXBlbmFtZSBfQ29udGFp bmVyOjpjb25zdF9yZWZlcmVuY2UgX192YWx1ZSkKICAgICAgewogICAgICAgIGNvbnRhaW5lci0+ cHVzaF9iYWNrKF9fdmFsdWUpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCiAgICAg IGJhY2tfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsg fQoKCiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkgeyByZXR1 cm4gKnRoaXM7IH0KCgogICAgICBiYWNrX2luc2VydF9pdGVyYXRvcgogICAgICBvcGVyYXRvcisr KGludCkgeyByZXR1cm4gKnRoaXM7IH0KICAgIH07CiMgMzg2ICIvaG9tZS9vbGRoYW0vZ2NjLWlu c3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBs YXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBpbmxpbmUgYmFja19pbnNlcnRfaXRlcmF0b3I8 X0NvbnRhaW5lcj4KICAgIGJhY2tfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KQogICAgeyByZXR1 cm4gYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsgfQojIDQwMSAiL2hvbWUv b2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2l0ZXJhdG9y LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgY2xhc3MgZnJvbnRfaW5z ZXJ0X2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2 b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfQ29udGFp bmVyKiBjb250YWluZXI7CgogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ29udGFpbmVyIGNv bnRhaW5lcl90eXBlOwoKCiAgICAgIGV4cGxpY2l0IGZyb250X2luc2VydF9pdGVyYXRvcihfQ29u dGFpbmVyJiBfX3gpIDogY29udGFpbmVyKCZfX3gpIHsgfQojIDQyNiAiL2hvbWUvb2xkaGFtL2dj Yy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICAg ICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0odHlwZW5hbWUgX0NvbnRh aW5lcjo6Y29uc3RfcmVmZXJlbmNlIF9fdmFsdWUpCiAgICAgIHsKICAgICAgICBjb250YWluZXIt PnB1c2hfZnJvbnQoX192YWx1ZSk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKICAg ICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhp czsgfQoKCiAgICAgIGZyb250X2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpIHsg cmV0dXJuICp0aGlzOyB9CgoKICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yCiAgICAgIG9wZXJh dG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQogICAgfTsKIyA0NTcgIi9ob21lL29sZGhhbS9n Y2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGlubGluZSBmcm9udF9pbnNlcnRfaXRl cmF0b3I8X0NvbnRhaW5lcj4KICAgIGZyb250X2luc2VydGVyKF9Db250YWluZXImIF9feCkKICAg IHsgcmV0dXJuIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOyB9CiMgNDc2 ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxf aXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBjbGFzcyBp bnNlcnRfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcs IHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9Db250 YWluZXIqIGNvbnRhaW5lcjsKICAgICAgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgaXRl cjsKCiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVyX3R5cGU7 CgoKCgoKICAgICAgaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCwgdHlwZW5hbWUgX0Nv bnRhaW5lcjo6aXRlcmF0b3IgX19pKQogICAgICA6IGNvbnRhaW5lcigmX194KSwgaXRlcihfX2kp IHt9CiMgNTE4ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQv Yml0cy9zdGxfaXRlcmF0b3IuaCIgMwogICAgICBpbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJh dG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjpjb25zdF9yZWZlcmVuY2UgX192YWx1ZSkK ICAgICAgewogICAgICAgIGl0ZXIgPSBjb250YWluZXItPmluc2VydChpdGVyLCBfX3ZhbHVlKTsK ICAgICAgICArK2l0ZXI7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKICAgICAgaW5z ZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAg IGluc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CgoK ICAgICAgaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRo aXM7IH0KICAgIH07CiMgNTUwICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRl L2MrKy8zLjQvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250 YWluZXIsIHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBpbnNlcnRfaXRlcmF0b3I8X0Nv bnRhaW5lcj4KICAgIGluc2VydGVyKF9Db250YWluZXImIF9feCwgX0l0ZXJhdG9yIF9faSkKICAg IHsKICAgICAgcmV0dXJuIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRl cmF0b3IoX19pKSk7CiAgICB9Cn0KCm5hbWVzcGFjZSBfX2dudV9jeHgKewoKCgoKCgoKICB1c2lu ZyBzdGQ6Oml0ZXJhdG9yX3RyYWl0czsKICB1c2luZyBzdGQ6Oml0ZXJhdG9yOwogIHRlbXBsYXRl PHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIF9fbm9y bWFsX2l0ZXJhdG9yCiAgICAgIDogcHVibGljIGl0ZXJhdG9yPHR5cGVuYW1lIGl0ZXJhdG9yX3Ry YWl0czxfSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSwKICAgICAgICAgICAgICAgICAgICAg ICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUsCiAgICAg ICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpk aWZmZXJlbmNlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9y X3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlPgogICAgewogICAgcHJv dGVjdGVkOgogICAgICBfSXRlcmF0b3IgX01fY3VycmVudDsKCiAgICBwdWJsaWM6CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlw ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIgcG9pbnRlcjsKCiAgICAg IF9fbm9ybWFsX2l0ZXJhdG9yKCkgOiBfTV9jdXJyZW50KF9JdGVyYXRvcigpKSB7IH0KCiAgICAg IGV4cGxpY2l0CiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9JdGVyYXRvciYgX19pKSA6 IF9NX2N1cnJlbnQoX19pKSB7IH0KCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4KICAg ICAgaW5saW5lIF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy LCBfQ29udGFpbmVyPiYgX19pKQogICAgICAgIDogX01fY3VycmVudChfX2kuYmFzZSgpKSB7IH0K CgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKl9NX2N1 cnJlbnQ7IH0KCiAgICAgIHBvaW50ZXIKICAgICAgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJu IF9NX2N1cnJlbnQ7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisr KCkgeyArK19NX2N1cnJlbnQ7IHJldHVybiAqdGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0 b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1 cnJlbnQrKyk7IH0KCgogICAgICBfX25vcm1hbF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3ItLSgp IHsgLS1fTV9jdXJyZW50OyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9y CiAgICAgIG9wZXJhdG9yLS0oaW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJy ZW50LS0pOyB9CgoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10oY29uc3QgZGlmZmVy ZW5jZV90eXBlJiBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2N1cnJlbnRbX19uXTsgfQoK ICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKz0oY29uc3QgZGlmZmVyZW5j ZV90eXBlJiBfX24pCiAgICAgIHsgX01fY3VycmVudCArPSBfX247IHJldHVybiAqdGhpczsgfQoK ICAgICAgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKGNvbnN0IGRpZmZlcmVuY2Vf dHlwZSYgX19uKSBjb25zdAogICAgICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJy ZW50ICsgX19uKTsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yLT0o Y29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pCiAgICAgIHsgX01fY3VycmVudCAtPSBfX247IHJl dHVybiAqdGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3ItKGNv bnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogICAgICB7IHJldHVybiBfX25vcm1hbF9p dGVyYXRvcihfTV9jdXJyZW50IC0gX19uKTsgfQoKICAgICAgY29uc3QgX0l0ZXJhdG9yJgogICAg ICBiYXNlKCkgY29uc3QgeyByZXR1cm4gX01fY3VycmVudDsgfQogICAgfTsKIyA2NTEgIi9ob21l L29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9pdGVyYXRv ci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9y UiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPT0oY29uc3Qg X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAg ICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9f cmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA9PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29s CiAgb3BlcmF0b3I9PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWlu ZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv ciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA9PSBfX3Jocy5i YXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJh dG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yIT0oY29u c3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAg ICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4m IF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSAhPSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBi b29sCiAgb3BlcmF0b3IhPShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250 YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy YXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSAhPSBfX3Jo cy5iYXNlKCk7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9J dGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcjwo Y29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAog ICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVy PiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpIDwgX19yaHMuYmFzZSgpOyB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUg Ym9vbAogIG9wZXJhdG9yPChjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250 YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy YXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8IF9fcmhz LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRl cmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I+KGNv bnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAg ICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4m IF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJv b2wKICBvcGVyYXRvcj4oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFp bmVyPiYgX19saHMsCiAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv ciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+IF9fcmhzLmJh c2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0 b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I8PShjb25z dCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAg ICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYg X19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpIDw9IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJv b2wKICBvcGVyYXRvcjw9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRh aW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh dG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpIDw9IF9fcmhz LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRl cmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I+PShj b25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAg ICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVy PiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpID49IF9fcmhzLmJhc2UoKTsgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5l IGJvb2wKICBvcGVyYXRvcj49KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0Nv bnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0 ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpID49IF9f cmhzLmJhc2UoKTsgfQoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5h bWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgdHlwZW5hbWUgX19u b3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj46OmRpZmZlcmVuY2VfdHlwZQog IG9wZXJhdG9yLShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVy PiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JS LCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpIC0gX19yaHMuYmFz ZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5l cj4KICBpbmxpbmUgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPgogIG9w ZXJhdG9yKyh0eXBlbmFtZSBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+ OjpkaWZmZXJlbmNlX3R5cGUgX19uLAogICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRv cjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2kpCiAgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0 b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPihfX2kuYmFzZSgpICsgX19uKTsgfQp9CiMgNzYgIi9o b21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdv YmFzZS5oIiAyIDMKCgpuYW1lc3BhY2Ugc3RkCnsKIyA5MSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0 YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAgaW5s aW5lIHZvaWQKICAgIGl0ZXJfc3dhcChfRm9yd2FyZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVyMiBf X2IpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJk SXRlcjE+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUxOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlMjsKCgog ICAgIAogICAgIAogICAgIAogICAgIAoKICAgICAgX1ZhbHVlVHlwZTEgX190bXAgPSAqX19hOwog ICAgICAqX19hID0gKl9fYjsKICAgICAgKl9fYiA9IF9fdG1wOwogICAgfQojIDExOCAiL2hvbWUv b2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2FsZ29iYXNl LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgc3dhcChf VHAmIF9fYSwgX1RwJiBfX2IpCiAgICB7CgogICAgIAoKICAgICAgX1RwIF9fdG1wID0gX19hOwog ICAgICBfX2EgPSBfX2I7CiAgICAgIF9fYiA9IF9fdG1wOwogICAgfQojIDE0NiAiL2hvbWUvb2xk aGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2FsZ29iYXNlLmgi IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAgbWlu KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikKICAgIHsKCiAgICAgCgogICAgICBpZiAo X19iIDwgX19hKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwogICAgfQojIDE2NiAiL2hvbWUvb2xk aGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2FsZ29iYXNlLmgi IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAgbWF4 KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikKICAgIHsKCiAgICAgCgogICAgICBpZiAo X19hIDwgX19iKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwogICAgfQojIDE4NiAiL2hvbWUvb2xk aGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2FsZ29iYXNlLmgi IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5l IGNvbnN0IF9UcCYKICAgIG1pbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIF9Db21w YXJlIF9fY29tcCkKICAgIHsKCiAgICAgIGlmIChfX2NvbXAoX19iLCBfX2EpKSByZXR1cm4gX19i OyByZXR1cm4gX19hOwogICAgfQojIDIwNCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEv aW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIGNvbnN0IF9UcCYKICAgIG1heChj b25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAg ICAgIGlmIChfX2NvbXAoX19hLCBfX2IpKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwogICAgfQoj IDIyMSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMv c3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFt ZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5KF9JbnB1dEl0 ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgX091dHB1dEl0ZXIgX19y ZXN1bHQsCiAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICBmb3IgKCA7 IF9fZmlyc3QgIT0gX19sYXN0OyArK19fcmVzdWx0LCArK19fZmlyc3QpCiAgICAgICAgKl9fcmVz dWx0ID0gKl9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5s aW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHkoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1Jh bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAog ICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB0eXBlZGVm IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2Vf dHlwZQogICAgICAgICAgX0Rpc3RhbmNlOwogICAgICBmb3IgKF9EaXN0YW5jZSBfX24gPSBfX2xh c3QgLSBfX2ZpcnN0OyBfX24gPiAwOyAtLV9fbikgewogICAgICAgICpfX3Jlc3VsdCA9ICpfX2Zp cnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgICArK19fcmVzdWx0OwogICAgICB9CiAgICAg IHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5s aW5lIF9UcCoKICAgIF9fY29weV90cml2aWFsKGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1Rw KiBfX2xhc3QsIF9UcCogX19yZXN1bHQpCiAgICB7CiAgICAgIG1lbW1vdmUoX19yZXN1bHQsIF9f Zmlyc3QsIHNpemVvZihfVHApICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICAgICAgcmV0dXJuIF9f cmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf SW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgog ICAgX19jb3B5X2F1eDIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IHJl dHVybiBfX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19pdGVyYXRvcl9jYXRlZ29y eShfX2ZpcnN0KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUg X091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9hdXgyKF9JbnB1 dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfT3V0cHV0 SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHkoX19maXJzdCwg X19sYXN0LCBfX3Jlc3VsdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcCoKICAgIF9fY29weV9hdXgyKF9UcCog X19maXJzdCwgX1RwKiBfX2xhc3QsCiAgICAgICAgICAgICAgICBfVHAqIF9fcmVzdWx0LCBfX3Ry dWVfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFzdCwgX19y ZXN1bHQpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAqCiAgICBf X2NvcHlfYXV4Mihjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LAogICAgICAg ICAgICAgICAgX1RwKiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHlf dHJpdmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRl cgogICAgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAog ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7CiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90 eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90 cmFpdHM8X1ZhbHVlVHlwZT46Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IKICAgICAg ICAgIF9Ucml2aWFsOwogICAgICByZXR1cm4gX091dHB1dEl0ZXIoX19jb3B5X2F1eDIoX19maXJz dCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQu YmFzZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RyaXZpYWwoKSkp OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0 SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25pMihfSW5wdXRJdGVyIF9f Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl c3VsdCwgX19mYWxzZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y X3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+OjpoYXNfdHJpdmlh bF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAgICBfVHJpdmlhbDsKICAgICAgcmV0dXJuIF9f Y29weV9hdXgyKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVz dWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgX1RyaXZpYWwoKSk7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5l IF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfbmkxKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl ciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlw ZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9PdXRw dXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9uaTIoX19maXJz dC5iYXNlKCksIF9fbGFzdC5iYXNlKCksIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBp bmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9uaTEoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w dXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFs c2VfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9y PF9PdXRwdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9uaTIo X19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9CiMgMzM5ICIvaG9t ZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfYWxnb2Jh c2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJ dGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBjb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwg X0lucHV0SXRlciBfX2xhc3QsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAg ICAKCgogICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9JbnB1dEl0 ZXI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICAgcmV0dXJuIF9fY29weV9uaTEoX19maXJzdCwg X19sYXN0LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjI+CiAg ICBpbmxpbmUgX0JpZGlyZWN0aW9uYWxJdGVyMgogICAgX19jb3B5X2JhY2t3YXJkKF9CaWRpcmVj dGlvbmFsSXRlcjEgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsCiAgICAgICAg ICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX3Jlc3VsdCwKICAgICAgICAgICAgICAg ICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgd2hpbGUgKF9fZmly c3QgIT0gX19sYXN0KQogICAgICAgICotLV9fcmVzdWx0ID0gKi0tX19sYXN0OwogICAgICByZXR1 cm4gX19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVy LCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICBpbmxpbmUgX0JpZGlyZWN0aW9uYWxJ dGVyCiAgICBfX2NvcHlfYmFja3dhcmQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRv bUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl ciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3Rh ZykKICAgIHsKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVy Pjo6ZGlmZmVyZW5jZV90eXBlIF9fbjsKICAgICAgZm9yIChfX24gPSBfX2xhc3QgLSBfX2ZpcnN0 OyBfX24gPiAwOyAtLV9fbikKICAgICAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsKICAgICAg cmV0dXJuIF9fcmVzdWx0OwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJl Y3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgIHR5 cGVuYW1lIF9Cb29sVHlwZT4KICAgIHN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2gKICAg IHsKICAgICAgc3RhdGljIF9CaWRpcmVjdGlvbmFsSXRlcjIKICAgICAgY29weShfQmlkaXJlY3Rp b25hbEl0ZXIxIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LAogICAgICAgICAg IF9CaWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQpCiAgICAgIHsKICAgICAgICByZXR1cm4gX19j b3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9j YXRlZ29yeShfX2ZpcnN0KSk7CiAgICAgIH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9U cD4KICAgIHN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVl X3R5cGU+CiAgICB7CiAgICAgIHN0YXRpYyBfVHAqCiAgICAgIGNvcHkoY29uc3QgX1RwKiBfX2Zp cnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkKICAgICAgewogICAgICAgIGNv bnN0IHB0cmRpZmZfdCBfTnVtID0gX19sYXN0IC0gX19maXJzdDsKICAgICAgICBtZW1tb3ZlKF9f cmVzdWx0IC0gX051bSwgX19maXJzdCwgc2l6ZW9mKF9UcCkgKiBfTnVtKTsKICAgICAgICByZXR1 cm4gX19yZXN1bHQgLSBfTnVtOwogICAgICB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf VHA+CiAgICBzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPGNvbnN0IF9UcCosIF9UcCos IF9fdHJ1ZV90eXBlPgogICAgewogICAgICBzdGF0aWMgX1RwKgogICAgICBjb3B5KGNvbnN0IF9U cCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpCiAgICAgIHsKICAg ICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1ZV90 eXBlPgogICAgICAgICAgOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwogICAgICB9 CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5s aW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9hdXgoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFz dCwgX0JJMiBfX3Jlc3VsdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJh aXRzPHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQkkyPjo6dmFsdWVfdHlwZT4KICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDo6aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvciBfVHJp dmlhbDsKICAgICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfQkkxLCBfQkkyLCBf VHJpdmlhbD4KICAgICAgICAgICAgICAgICAgOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1 bHQpOwogICAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAg IGlubGluZSBfQkkyCiAgICBfX2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihf QkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBfQkky KF9fY29weV9iYWNrd2FyZF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdC5iYXNlKCkpKTsg fQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAgIGlubGluZSBf QkkyCiAgICBfX2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmly c3QsIF9CSTEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0JJMiBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAgeyByZXR1cm4gX19jb3B5X2JhY2t3 YXJkX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQoKICB0ZW1wbGF0ZSA8dHlwZW5h bWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAgIGlubGluZSBfQkkyCiAgICBfX2NvcHlfYmFja3dh cmRfaW5wdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fdHJ1 ZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8 X0JJMj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfb3V0 cHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0LmJhc2UoKSwgX19sYXN0LmJhc2UoKSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0LCBf X05vcm1hbCgpKTsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9C STI+CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVy YXRvcihfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfQkkyPjo6X05vcm1hbCBfX05v cm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9y KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX05vcm1hbCgpKTsKICAgIH0KIyA0NzcgIi9ob21lL29s ZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdvYmFzZS5o IiAzCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUg X0JJMgogICAgY29weV9iYWNrd2FyZChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9f cmVzdWx0KQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9CSTE+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1 cm4gX19jb3B5X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0LCBfX2xhc3Qs IF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX05vcm1hbCgpKTsKICAgIH0KIyA1MDkgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9n Y2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBmaWxsKF9Gb3J3 YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsdWUp CiAgICB7CgogICAgIAoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0 KQogICAgICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKICAgIH0KIyA1MzEgIi9ob21lL29sZGhhbS9n Y2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAg dGVtcGxhdGU8dHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBf VHA+CiAgICBfT3V0cHV0SXRlcgogICAgZmlsbF9uKF9PdXRwdXRJdGVyIF9fZmlyc3QsIF9TaXpl IF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlKQogICAgewoKICAgICAKCiAgICAgIGZvciAoIDsgX19u ID4gMDsgLS1fX24sICsrX19maXJzdCkKICAgICAgICAqX19maXJzdCA9IF9fdmFsdWU7CiAgICAg IHJldHVybiBfX2ZpcnN0OwogICAgfQoKCgogIGlubGluZSB2b2lkCiAgZmlsbCh1bnNpZ25lZCBj aGFyKiBfX2ZpcnN0LCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QsIGNvbnN0IHVuc2lnbmVkIGNoYXIm IF9fYykKICB7CiAgICB1bnNpZ25lZCBjaGFyIF9fdG1wID0gX19jOwogICAgbWVtc2V0KF9fZmly c3QsIF9fdG1wLCBfX2xhc3QgLSBfX2ZpcnN0KTsKICB9CgogIGlubGluZSB2b2lkCiAgZmlsbChz aWduZWQgY2hhciogX19maXJzdCwgc2lnbmVkIGNoYXIqIF9fbGFzdCwgY29uc3Qgc2lnbmVkIGNo YXImIF9fYykKICB7CiAgICBzaWduZWQgY2hhciBfX3RtcCA9IF9fYzsKICAgIG1lbXNldChfX2Zp cnN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX3RtcCksIF9fbGFzdCAtIF9fZmlyc3Qp OwogIH0KCiAgaW5saW5lIHZvaWQKICBmaWxsKGNoYXIqIF9fZmlyc3QsIGNoYXIqIF9fbGFzdCwg Y29uc3QgY2hhciYgX19jKQogIHsKICAgIGNoYXIgX190bXAgPSBfX2M7CiAgICBtZW1zZXQoX19m aXJzdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX190bXApLCBfX2xhc3QgLSBfX2ZpcnN0 KTsKICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TaXplPgogICAgaW5saW5lIHVuc2lnbmVkIGNo YXIqCiAgICBmaWxsX24odW5zaWduZWQgY2hhciogX19maXJzdCwgX1NpemUgX19uLCBjb25zdCB1 bnNpZ25lZCBjaGFyJiBfX2MpCiAgICB7CiAgICAgIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9f biwgX19jKTsKICAgICAgcmV0dXJuIF9fZmlyc3QgKyBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9TaXplPgogICAgaW5saW5lIHNpZ25lZCBjaGFyKgogICAgZmlsbF9uKGNoYXIqIF9f Zmlyc3QsIF9TaXplIF9fbiwgY29uc3Qgc2lnbmVkIGNoYXImIF9fYykKICAgIHsKICAgICAgZmls bChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19uLCBfX2MpOwogICAgICByZXR1cm4gX19maXJzdCArIF9f bjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpemU+CiAgICBpbmxpbmUgY2hhcioKICAg IGZpbGxfbihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IGNoYXImIF9fYykKICAgIHsK ICAgICAgZmlsbChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19uLCBfX2MpOwogICAgICByZXR1cm4gX19m aXJzdCArIF9fbjsKICAgIH0KIyA2MDYgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2lu Y2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyPgogICAgcGFpcjxfSW5wdXRJdGVyMSwg X0lucHV0SXRlcjI+CiAgICBtaXNtYXRjaChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRl cjEgX19sYXN0MSwKICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyKQogICAgewoKICAg ICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEg JiYgKl9fZmlyc3QxID09ICpfX2ZpcnN0MikgewogICAgICAgICsrX19maXJzdDE7CiAgICAgICAg KytfX2ZpcnN0MjsKICAgICAgfQogICAgICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0 SXRlcjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7CiAgICB9CiMgNjQwICIvaG9tZS9vbGRoYW0vZ2Nj LWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRl bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5h bWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPgog ICAgbWlzbWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAg ICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwKICAgICAgICAgICAgIF9CaW5hcnlQcmVk aWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICB3aGlsZSAoX19m aXJzdDEgIT0gX19sYXN0MSAmJiBfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkg ewogICAgICAgICsrX19maXJzdDE7CiAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgfQogICAgICBy ZXR1cm4gcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7 CiAgICB9CiMgNjY4ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8z LjQvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIx LCB0eXBlbmFtZSBfSW5wdXRJdGVyMj4KICAgIGlubGluZSBib29sCiAgICBlcXVhbChfSW5wdXRJ dGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgIF9JbnB1dEl0ZXIy IF9fZmlyc3QyKQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKICAgICAgZm9yICggOyBfX2Zp cnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgICAgIGlmICghKCpf X2ZpcnN0MSA9PSAqX19maXJzdDIpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1 cm4gdHJ1ZTsKICAgIH0KIyA2OTkgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1 ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu cHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRl PgogICAgaW5saW5lIGJvb2wKICAgIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ dGVyMSBfX2xhc3QxLAogICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsCiAgICAgICAgICBf QmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKICAgICAg Zm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAg ICAgIGlmICghX19iaW5hcnlfcHJlZCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICBy ZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQojIDczMiAiL2hvbWUvb2xkaGFt L2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAg ICBib29sCiAgICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwg X0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0 ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQogICAgewoKICAgICAKICAgICAKICAg ICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3Qy ICE9IF9fbGFzdDIKICAgICAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7CiAgICAg ICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAgICAgICAgIHJldHVybiB0cnVlOwogICAg ICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg ICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19s YXN0MjsKICAgIH0KIyA3NjcgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUv YysrLzMuNC9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0 SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGJvb2wK ICAgIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ dGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19m aXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBf Q29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoKICAgICAgZm9yICggOyBfX2ZpcnN0 MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIKICAgICAgICAgICAgOyArK19fZmly c3QxLCArK19fZmlyc3QyKSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0 MikpCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0Miwg Kl9fZmlyc3QxKSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICByZXR1cm4g X19maXJzdDEgPT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwogICAgfQoKICBpbmxp bmUgYm9vbAogIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9f Zmlyc3QxLCBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QyLCBjb25zdCB1bnNpZ25lZCBjaGFy KiBfX2xhc3QyKQogIHsKICAgIGNvbnN0IHNpemVfdCBfX2xlbjEgPSBfX2xhc3QxIC0gX19maXJz dDE7CiAgICBjb25zdCBzaXplX3QgX19sZW4yID0gX19sYXN0MiAtIF9fZmlyc3QyOwogICAgY29u c3QgaW50IF9fcmVzdWx0ID0gbWVtY21wKF9fZmlyc3QxLCBfX2ZpcnN0Miwgc3RkOjptaW4oX19s ZW4xLCBfX2xlbjIpKTsKICAgIHJldHVybiBfX3Jlc3VsdCAhPSAwID8gX19yZXN1bHQgPCAwIDog X19sZW4xIDwgX19sZW4yOwogIH0KCiAgaW5saW5lIGJvb2wKICBsZXhpY29ncmFwaGljYWxfY29t cGFyZShjb25zdCBjaGFyKiBfX2ZpcnN0MSwgY29uc3QgY2hhciogX19sYXN0MSwKICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2ZpcnN0MiwgY29uc3QgY2hhciogX19sYXN0 MikKICB7CgogICAgcmV0dXJuIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKChjb25zdCBzaWduZWQg Y2hhciopIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25z dCBzaWduZWQgY2hhciopIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0Mik7CgoKCgoKCiAgfQoKfQoj IDY4ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvdmVjdG9y IiAyIDMKIyAxICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQv Yml0cy9zdGxfYWxsb2MuaCIgMSAzCiMgODQgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2Mx L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGxvYy5oIiAzCiMgMSAiL2hvbWUvb2xkaGFtL2dj Yy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2Nhc3NlcnQiIDEgMwojIDQ3ICIvaG9tZS9v bGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvY2Fzc2VydCIgMwoKIyAxICIv dXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDEgMyA0CiMgNjUgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIg MyA0CmV4dGVybiAiQyIgewoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X2ZhaWwgKF9fY29uc3QgY2hh ciAqX19hc3NlcnRpb24sIF9fY29uc3QgY2hhciAqX19maWxlLAogICAgICAgICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBpbnQgX19saW5lLCBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAg ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCmV4dGVybiB2b2lk IF9fYXNzZXJ0X3BlcnJvcl9mYWlsIChpbnQgX19lcnJudW0sIF9fY29uc3QgY2hhciAqX19maWxl LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19mdW5jdGlv bikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRl cm4gdm9pZCBfX2Fzc2VydCAoY29uc3QgY2hhciAqX19hc3NlcnRpb24sIGNvbnN0IGNoYXIgKl9f ZmlsZSwgaW50IF9fbGluZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVy bl9fKSk7CgoKfQojIDQ5ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2Mr Ky8zLjQvY2Fzc2VydCIgMiAzCiMgODUgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2lu Y2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKIyAxICIvaG9tZS9vbGRoYW0vZ2Nj LWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAz NCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvZnVu Y3RleGNlcHQuaCIgMwojIDEgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUv YysrLzMuNC9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL2hvbWUvb2xkaGFtL2djYy1p bnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1l c3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsKCgogIHZv aWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9jYXN0 KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9f dGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfZG9t YWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2ludmFsaWRfYXJn dW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNv bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFy KiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7 CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK ICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Ro cm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9pZAogIF9fdGhyb3df aW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDg2ICIvaG9tZS9vbGRoYW0vZ2NjLWlu c3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgMSAiL2hv bWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX3RocmVh ZHMuaCIgMSAzCiMgNTQgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysr LzMuNC9iaXRzL3N0bF90aHJlYWRzLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCgogIHN0cnVjdCBf UmVmY291bnRfQmFzZQogIHsKCiAgICB0eXBlZGVmIHNpemVfdCBfUkNfdDsKCgogICAgdm9sYXRp bGUgX1JDX3QgX01fcmVmX2NvdW50OwoKCiAgICBfX2d0aHJlYWRfbXV0ZXhfdCBfTV9yZWZfY291 bnRfbG9jazsKCiAgICBfUmVmY291bnRfQmFzZShfUkNfdCBfX24pIDogX01fcmVmX2NvdW50KF9f bikKICAgIHsKCiAgICAgIF9fZ3RocmVhZF9tdXRleF90IF9fdG1wID0gezAsIDAsIDAsIFBUSFJF QURfTVVURVhfVElNRURfTlAsIHsgMCwgMCB9fTsKICAgICAgX01fcmVmX2NvdW50X2xvY2sgPSBf X3RtcDsKCgoKCgogICAgfQoKICAgIHZvaWQKICAgIF9NX2luY3IoKQogICAgewogICAgICBfX2d0 aHJlYWRfbXV0ZXhfbG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogICAgICArK19NX3JlZl9jb3Vu dDsKICAgICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogICAg fQoKICAgIF9SQ190CiAgICBfTV9kZWNyKCkKICAgIHsKICAgICAgX19ndGhyZWFkX211dGV4X2xv Y2soJl9NX3JlZl9jb3VudF9sb2NrKTsKICAgICAgdm9sYXRpbGUgX1JDX3QgX190bXAgPSAtLV9N X3JlZl9jb3VudDsKICAgICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50X2xv Y2spOwogICAgICByZXR1cm4gX190bXA7CiAgICB9CiAgfTsKIyAxMDkgIi9ob21lL29sZGhhbS9n Y2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF90aHJlYWRzLmgiIDMKICB0 ZW1wbGF0ZTxpbnQgX19kdW1teT4KICAgIHN0cnVjdCBfU3dhcF9sb2NrX3N0cnVjdAogICAgeyBz dGF0aWMgX19ndGhyZWFkX211dGV4X3QgX1Nfc3dhcF9sb2NrOyB9OwoKICB0ZW1wbGF0ZTxpbnQg X19kdW1teT4KICAgIF9fZ3RocmVhZF9tdXRleF90CiAgICBfU3dhcF9sb2NrX3N0cnVjdDxfX2R1 bW15Pjo6X1Nfc3dhcF9sb2NrID0gezAsIDAsIDAsIFBUSFJFQURfTVVURVhfVElNRURfTlAsIHsg MCwgMCB9fTsKCgoKICBpbmxpbmUgdW5zaWduZWQgbG9uZwogIF9BdG9taWNfc3dhcCh1bnNpZ25l ZCBsb25nICogX19wLCB1bnNpZ25lZCBsb25nIF9fcSkKICB7CiAgICBfX2d0aHJlYWRfbXV0ZXhf bG9jaygmX1N3YXBfbG9ja19zdHJ1Y3Q8MD46Ol9TX3N3YXBfbG9jayk7CiAgICB1bnNpZ25lZCBs b25nIF9fcmVzdWx0ID0gKl9fcDsKICAgICpfX3AgPSBfX3E7CiAgICBfX2d0aHJlYWRfbXV0ZXhf dW5sb2NrKCZfU3dhcF9sb2NrX3N0cnVjdDwwPjo6X1Nfc3dhcF9sb2NrKTsKICAgIHJldHVybiBf X3Jlc3VsdDsKICB9Cgp9CiMgMTU1ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNs dWRlL2MrKy8zLjQvYml0cy9zdGxfdGhyZWFkcy5oIiAzCm5hbWVzcGFjZSBzdGQKewogIHN0cnVj dCBfU1RMX211dGV4X2xvY2sKICB7CgoKCgoKICAgIF9fZ3RocmVhZF9tdXRleF90IF9NX2xvY2s7 CgogICAgdm9pZAogICAgX01faW5pdGlhbGl6ZSgpCiAgICB7CiMgMTkyICIvaG9tZS9vbGRoYW0v Z2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAg ICB9CgogICAgdm9pZAogICAgX01fYWNxdWlyZV9sb2NrKCkKICAgIHsKCgoKICAgICAgX19ndGhy ZWFkX211dGV4X2xvY2soJl9NX2xvY2spOwogICAgfQoKICAgIHZvaWQKICAgIF9NX3JlbGVhc2Vf bG9jaygpCiAgICB7CgoKCiAgICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX2xvY2spOwog ICAgfQogIH07CiMgMjI4ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2Mr Ky8zLjQvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAgc3RydWN0IF9TVExfYXV0b19sb2NrCiAgewog ICAgX1NUTF9tdXRleF9sb2NrJiBfTV9sb2NrOwoKICAgIF9TVExfYXV0b19sb2NrKF9TVExfbXV0 ZXhfbG9jayYgX19sb2NrKSA6IF9NX2xvY2soX19sb2NrKQogICAgeyBfTV9sb2NrLl9NX2FjcXVp cmVfbG9jaygpOyB9CgogICAgfl9TVExfYXV0b19sb2NrKCkgeyBfTV9sb2NrLl9NX3JlbGVhc2Vf bG9jaygpOyB9CgogIHByaXZhdGU6CiAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBfU1RMX2F1dG9f bG9jayYpOwogICAgX1NUTF9hdXRvX2xvY2soY29uc3QgX1NUTF9hdXRvX2xvY2smKTsKICB9OwoK fQojIDg3ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0 cy9zdGxfYWxsb2MuaCIgMiAzCgojIDEgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2lu Y2x1ZGUvYysrLzMuNC9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2F0b21pY2l0eS5oIiAxIDMKIyAz MyAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2k2ODYtcGMt bGludXgtZ251L2JpdHMvYXRvbWljaXR5LmgiIDMKdHlwZWRlZiBpbnQgX0F0b21pY193b3JkOwoK c3RhdGljIGlubGluZSBfQXRvbWljX3dvcmQKX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQpf X2V4Y2hhbmdlX2FuZF9hZGQgKHZvbGF0aWxlIF9BdG9taWNfd29yZCAqX19tZW0sIGludCBfX3Zh bCkKewogIHJlZ2lzdGVyIF9BdG9taWNfd29yZCBfX3Jlc3VsdDsKICBfX2FzbV9fIF9fdm9sYXRp bGVfXyAoImxvY2s7IHhhZGRsICUwLCUxIgogICAgICAgICAgICAgICAgICAgICAgICA6ICI9ciIg KF9fcmVzdWx0KSwgIittIiAoKl9fbWVtKQogICAgICAgICAgICAgICAgICAgICAgICA6ICIwIiAo X192YWwpCiAgICAgICAgICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOwogIHJldHVybiBfX3Jl c3VsdDsKfQoKc3RhdGljIGlubGluZSB2b2lkCl9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkK X19hdG9taWNfYWRkICh2b2xhdGlsZSBfQXRvbWljX3dvcmQqIF9fbWVtLCBpbnQgX192YWwpCnsK ICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxvY2s7IGFkZGwgJTEsJTAiCiAgICAgICAgICAgICAg ICAgICAgICAgIDogIittIiAoKl9fbWVtKSA6ICJpciIgKF9fdmFsKSA6ICJtZW1vcnkiKTsKfQoj IDg5ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9z dGxfYWxsb2MuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKIyAxMDAgIi9ob21lL29sZGhhbS9nY2Mt aW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgY2xhc3Mg X19uZXdfYWxsb2MKICB7CiAgcHVibGljOgogICAgc3RhdGljIHZvaWQqCiAgICBhbGxvY2F0ZShz aXplX3QgX19uKQogICAgeyByZXR1cm4gOjpvcGVyYXRvciBuZXcoX19uKTsgfQoKICAgIHN0YXRp YyB2b2lkCiAgICBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90KQogICAgeyA6Om9wZXJhdG9y IGRlbGV0ZShfX3ApOyB9CiAgfTsKIyAxMjMgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2Mx L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGU8aW50IF9faW5z dD4KICAgIGNsYXNzIF9fbWFsbG9jX2FsbG9jCiAgICB7CiAgICBwcml2YXRlOgogICAgICBzdGF0 aWMgdm9pZCogX1Nfb29tX21hbGxvYyhzaXplX3QpOwogICAgICBzdGF0aWMgdm9pZCAoKiBfX21h bGxvY19hbGxvY19vb21faGFuZGxlcikoKTsKCiAgICBwdWJsaWM6CiAgICAgIHN0YXRpYyB2b2lk KgogICAgICBhbGxvY2F0ZShzaXplX3QgX19uKQogICAgICB7CiAgICAgICAgdm9pZCogX19yZXN1 bHQgPSBtYWxsb2MoX19uKTsKICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdChfX3Jlc3VsdCA9 PSAwLCAwKSkKICAgICAgICAgIF9fcmVzdWx0ID0gX1Nfb29tX21hbGxvYyhfX24pOwogICAgICAg IHJldHVybiBfX3Jlc3VsdDsKICAgICAgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgZGVhbGxv Y2F0ZSh2b2lkKiBfX3AsIHNpemVfdCApCiAgICAgIHsgZnJlZShfX3ApOyB9CgogICAgICBzdGF0 aWMgdm9pZCAoKiBfX3NldF9tYWxsb2NfaGFuZGxlcih2b2lkICgqX19mKSgpKSkoKQogICAgICB7 CiAgICAgICAgdm9pZCAoKiBfX29sZCkoKSA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwog ICAgICAgIF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyID0gX19mOwogICAgICAgIHJldHVybiBf X29sZDsKICAgICAgfQogICAgfTsKCgogIHRlbXBsYXRlPGludCBfX2luc3Q+CiAgICB2b2lkICgq IF9fbWFsbG9jX2FsbG9jPF9faW5zdD46Ol9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyKSgpID0g MDsKCiAgdGVtcGxhdGU8aW50IF9faW5zdD4KICAgIHZvaWQqCiAgICBfX21hbGxvY19hbGxvYzxf X2luc3Q+OjoKICAgIF9TX29vbV9tYWxsb2Moc2l6ZV90IF9fbikKICAgIHsKICAgICAgdm9pZCAo KiBfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICB2b2lkKiBfX3Jlc3VsdDsKCiAgICAgIGZv ciAoOzspCiAgICAgICAgewogICAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9j X2FsbG9jX29vbV9oYW5kbGVyOwogICAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QoX19teV9t YWxsb2NfaGFuZGxlciA9PSAwLCAwKSkKICAgICAgICAgICAgX190aHJvd19iYWRfYWxsb2MoKTsK ICAgICAgICAgICgqX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgICAgIF9fcmVzdWx0ID0g bWFsbG9jKF9fbik7CiAgICAgICAgICBpZiAoX19yZXN1bHQpCiAgICAgICAgICAgIHJldHVybiBf X3Jlc3VsdDsKICAgICAgICB9CiAgICB9CgoKICB0eXBlZGVmIF9fbmV3X2FsbG9jIF9fbWVtX2lu dGVyZmFjZTsKIyAxOTAgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysr LzMuNC9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICBjbGFzcyBfX3NpbXBsZV9hbGxvYwogICAgewogICAgcHVibGljOgogICAg ICBzdGF0aWMgX1RwKgogICAgICBhbGxvY2F0ZShzaXplX3QgX19uKQogICAgICB7CiAgICAgICAg X1RwKiBfX3JldCA9IDA7CiAgICAgICAgaWYgKF9fbikKICAgICAgICAgIF9fcmV0ID0gc3RhdGlj X2Nhc3Q8X1RwKj4oX0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpOwogICAgICAg IHJldHVybiBfX3JldDsKICAgICAgfQoKICAgICAgc3RhdGljIF9UcCoKICAgICAgYWxsb2NhdGUo KQogICAgICB7IHJldHVybiAoX1RwKikgX0FsbG9jOjphbGxvY2F0ZShzaXplb2YgKF9UcCkpOyB9 CgogICAgICBzdGF0aWMgdm9pZAogICAgICBkZWFsbG9jYXRlKF9UcCogX19wLCBzaXplX3QgX19u KQogICAgICB7IGlmICgwICE9IF9fbikgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6 ZW9mIChfVHApKTsgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgZGVhbGxvY2F0ZShfVHAqIF9f cCkKICAgICAgeyBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBzaXplb2YgKF9UcCkpOyB9CiAgICB9 OwojIDIzMSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2Jp dHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFzcyBf X2RlYnVnX2FsbG9jCiAgICB7CiAgICBwcml2YXRlOgoKCiAgICAgIGVudW0ge19TX2V4dHJhID0g OH07CgogICAgcHVibGljOgogICAgICBzdGF0aWMgdm9pZCoKICAgICAgYWxsb2NhdGUoc2l6ZV90 IF9fbikKICAgICAgewogICAgICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIqKV9BbGxvYzo6YWxs b2NhdGUoX19uICsgKGludCkgX1NfZXh0cmEpOwogICAgICAgICooc2l6ZV90KilfX3Jlc3VsdCA9 IF9fbjsKICAgICAgICByZXR1cm4gX19yZXN1bHQgKyAoaW50KSBfU19leHRyYTsKICAgICAgfQoK ICAgICAgc3RhdGljIHZvaWQKICAgICAgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX24p CiAgICAgIHsKICAgICAgICBjaGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSAoaW50KSBfU19l eHRyYTsKICAgICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gKCgqKHNpemVfdCopX19yZWFsX3AgPT0g X19uKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIiooc2l6ZV90KilfX3JlYWxfcCA9PSBfX24iLCAi L2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2Fs bG9jLmgiLCAyNTIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogICAgICAgIF9BbGxvYzo6 ZGVhbGxvY2F0ZShfX3JlYWxfcCwgX19uICsgKGludCkgX1NfZXh0cmEpOwogICAgICB9CiAgICB9 OwojIDI4OCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2Jp dHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4K ICAgIGNsYXNzIF9fcG9vbF9hbGxvYwogICAgewogICAgcHJpdmF0ZToKICAgICAgZW51bSB7X0FM SUdOID0gOH07CiAgICAgIGVudW0ge19NQVhfQllURVMgPSAxMjh9OwogICAgICBlbnVtIHtfTkZS RUVMSVNUUyA9IF9NQVhfQllURVMgLyBfQUxJR059OwoKICAgICAgdW5pb24gX09iagogICAgICB7 CiAgICAgICAgdW5pb24gX09iaiogX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgY2hhciBfTV9j bGllbnRfZGF0YVsxXTsKICAgICAgfTsKCiAgICAgIHN0YXRpYyBfT2JqKiB2b2xhdGlsZSBfU19m cmVlX2xpc3RbX05GUkVFTElTVFNdOwoKCiAgICAgIHN0YXRpYyBjaGFyKiBfU19zdGFydF9mcmVl OwogICAgICBzdGF0aWMgY2hhciogX1NfZW5kX2ZyZWU7CiAgICAgIHN0YXRpYyBzaXplX3QgX1Nf aGVhcF9zaXplOwoKICAgICAgc3RhdGljIF9TVExfbXV0ZXhfbG9jayBfU19sb2NrOwogICAgICBz dGF0aWMgX0F0b21pY193b3JkIF9TX2ZvcmNlX25ldzsKCiAgICAgIHN0YXRpYyBzaXplX3QKICAg ICAgX1Nfcm91bmRfdXAoc2l6ZV90IF9fYnl0ZXMpCiAgICAgIHsgcmV0dXJuICgoKF9fYnl0ZXMp ICsgKHNpemVfdCkgX0FMSUdOLTEpICYgfigoc2l6ZV90KSBfQUxJR04gLSAxKSk7IH0KCiAgICAg IHN0YXRpYyBzaXplX3QKICAgICAgX1NfZnJlZWxpc3RfaW5kZXgoc2l6ZV90IF9fYnl0ZXMpCiAg ICAgIHsgcmV0dXJuICgoKF9fYnl0ZXMpICsgKHNpemVfdClfQUxJR04gLSAxKS8oc2l6ZV90KV9B TElHTiAtIDEpOyB9CgoKCiAgICAgIHN0YXRpYyB2b2lkKgogICAgICBfU19yZWZpbGwoc2l6ZV90 IF9fbik7CgoKCiAgICAgIHN0YXRpYyBjaGFyKgogICAgICBfU19jaHVua19hbGxvYyhzaXplX3Qg X19zaXplLCBpbnQmIF9fbm9ianMpOwoKCgogICAgICBzdHJ1Y3QgX0xvY2sKICAgICAgewogICAg ICAgIF9Mb2NrKCkgeyBpZiAoX190aHJlYWRzKSBfU19sb2NrLl9NX2FjcXVpcmVfbG9jaygpOyB9 CiAgICAgICAgfl9Mb2NrKCkgeyBpZiAoX190aHJlYWRzKSBfU19sb2NrLl9NX3JlbGVhc2VfbG9j aygpOyB9CiAgICAgIH0gX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKTsKICAgICAgZnJpZW5k IHN0cnVjdCBfTG9jazsKCiAgICBwdWJsaWM6CgogICAgICBzdGF0aWMgdm9pZCoKICAgICAgYWxs b2NhdGUoc2l6ZV90IF9fbikKICAgICAgewogICAgICAgIHZvaWQqIF9fcmV0ID0gMDsKCgoKCiAg ICAgICAgaWYgKF9TX2ZvcmNlX25ldyA9PSAwKQogICAgICAgICAgewogICAgICAgICAgICBpZiAo Z2V0ZW52KCJHTElCQ1BQX0ZPUkNFX05FVyIpKQogICAgICAgICAgICAgIF9fYXRvbWljX2FkZCgm X1NfZm9yY2VfbmV3LCAxKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIF9fYXRvbWlj X2FkZCgmX1NfZm9yY2VfbmV3LCAtMSk7CgogICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4g KChfU19mb3JjZV9uZXcgIT0gMCkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJfU19mb3JjZV9uZXcg IT0gMCIsICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0 cy9zdGxfYWxsb2MuaCIsIDM1NiwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICAgICAg ICB9CgogICAgICAgIGlmICgoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykgfHwgKF9TX2ZvcmNl X25ldyA+IDApKQogICAgICAgICAgX19yZXQgPSBfX25ld19hbGxvYzo6YWxsb2NhdGUoX19uKTsK ICAgICAgICBlbHNlCiAgICAgICAgICB7CiAgICAgICAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215 X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdAogICAgICAgICAgICAgICsgX1NfZnJlZWxpc3RfaW5k ZXgoX19uKTsKCgoKICAgICAgICAgICAgX0xvY2sgX19sb2NrX2luc3RhbmNlOwogICAgICAgICAg ICBfT2JqKiBfX3Jlc3RyaWN0X18gX19yZXN1bHQgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICAg ICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KF9fcmVzdWx0ID09IDAsIDApKQogICAgICAgICAgICAg IF9fcmV0ID0gX1NfcmVmaWxsKF9TX3JvdW5kX3VwKF9fbikpOwogICAgICAgICAgICBlbHNlCiAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19yZXN1bHQg LT4gX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgICAgICAgICBfX3JldCA9IF9fcmVzdWx0Owog ICAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QoX19yZXQgPT0g MCwgMCkpCiAgICAgICAgICAgICAgX190aHJvd19iYWRfYWxsb2MoKTsKICAgICAgICAgIH0KICAg ICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCgogICAgICBzdGF0aWMgdm9pZAogICAgICBkZWFs bG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fbikKICAgICAgewogICAgICAgIGlmICgoX19uID4g KHNpemVfdCkgX01BWF9CWVRFUykgfHwgKF9TX2ZvcmNlX25ldyA+IDApKQogICAgICAgICAgX19u ZXdfYWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24pOwogICAgICAgIGVsc2UKICAgICAgICAgIHsK ICAgICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0 CiAgICAgICAgICAgICAgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwogICAgICAgICAgICBfT2Jq KiBfX3EgPSAoX09iaiopX19wOwoKCgoKICAgICAgICAgICAgX0xvY2sgX19sb2NrX2luc3RhbmNl OwogICAgICAgICAgICBfX3EgLT4gX01fZnJlZV9saXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7 CiAgICAgICAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcTsKICAgICAgICAgIH0KICAgICAgfQog ICAgfTsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+IF9BdG9taWNfd29y ZAogIF9fcG9vbF9hbGxvYzxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2ZvcmNlX25ldyA9IDA7Cgog IHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgaW5saW5lIGJvb2wKICAg IG9wZXJhdG9yPT0oY29uc3QgX19wb29sX2FsbG9jPF9fdGhyZWFkcyxfX2luc3Q+JiwKICAgICAg ICAgICAgICAgY29uc3QgX19wb29sX2FsbG9jPF9fdGhyZWFkcyxfX2luc3Q+JikKICAgIHsgcmV0 dXJuIHRydWU7IH0KCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBp bmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBfX3Bvb2xfYWxsb2M8X190aHJlYWRzLF9f aW5zdD4mLAogICAgICAgICAgICAgICBjb25zdCBfX3Bvb2xfYWxsb2M8X190aHJlYWRzLF9faW5z dD4mKQogICAgeyByZXR1cm4gZmFsc2U7IH0KCgoKCgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRz LCBpbnQgX19pbnN0PgogICAgY2hhcioKICAgIF9fcG9vbF9hbGxvYzxfX3RocmVhZHMsIF9faW5z dD46OgogICAgX1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpzKQogICAg ewogICAgICBjaGFyKiBfX3Jlc3VsdDsKICAgICAgc2l6ZV90IF9fdG90YWxfYnl0ZXMgPSBfX3Np emUgKiBfX25vYmpzOwogICAgICBzaXplX3QgX19ieXRlc19sZWZ0ID0gX1NfZW5kX2ZyZWUgLSBf U19zdGFydF9mcmVlOwoKICAgICAgaWYgKF9fYnl0ZXNfbGVmdCA+PSBfX3RvdGFsX2J5dGVzKQog ICAgICAgIHsKICAgICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsKICAgICAgICAgIF9T X3N0YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAgICAgIHJldHVybiBfX3Jlc3VsdCA7 CiAgICAgICAgfQogICAgICBlbHNlIGlmIChfX2J5dGVzX2xlZnQgPj0gX19zaXplKQogICAgICAg IHsKICAgICAgICAgIF9fbm9ianMgPSAoaW50KShfX2J5dGVzX2xlZnQvX19zaXplKTsKICAgICAg ICAgIF9fdG90YWxfYnl0ZXMgPSBfX3NpemUgKiBfX25vYmpzOwogICAgICAgICAgX19yZXN1bHQg PSBfU19zdGFydF9mcmVlOwogICAgICAgICAgX1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFsX2J5dGVz OwogICAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAg IHsKICAgICAgICAgIHNpemVfdCBfX2J5dGVzX3RvX2dldCA9CiAgICAgICAgICAgIDIgKiBfX3Rv dGFsX2J5dGVzICsgX1Nfcm91bmRfdXAoX1NfaGVhcF9zaXplID4+IDQpOwoKICAgICAgICAgIGlm IChfX2J5dGVzX2xlZnQgPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX09iaiogdm9s YXRpbGUqIF9fbXlfZnJlZV9saXN0ID0KICAgICAgICAgICAgICAgIF9TX2ZyZWVfbGlzdCArIF9T X2ZyZWVsaXN0X2luZGV4KF9fYnl0ZXNfbGVmdCk7CgogICAgICAgICAgICAgICgoX09iaiopX1Nf c3RhcnRfZnJlZSkgLT4gX01fZnJlZV9saXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAg ICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gKF9PYmoqKV9TX3N0YXJ0X2ZyZWU7CiAgICAgICAg ICAgIH0KICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopIF9fbmV3X2FsbG9jOjphbGxv Y2F0ZShfX2J5dGVzX3RvX2dldCk7CiAgICAgICAgICBpZiAoX1Nfc3RhcnRfZnJlZSA9PSAwKQog ICAgICAgICAgICB7CiAgICAgICAgICAgICAgc2l6ZV90IF9faTsKICAgICAgICAgICAgICBfT2Jq KiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICAgX09iaiogX19wOwoKCgog ICAgICAgICAgICAgIF9faSA9IF9fc2l6ZTsKICAgICAgICAgICAgICBmb3IgKDsgX19pIDw9IChz aXplX3QpIF9NQVhfQllURVM7IF9faSArPSAoc2l6ZV90KSBfQUxJR04pCiAgICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1Nf ZnJlZWxpc3RfaW5kZXgoX19pKTsKICAgICAgICAgICAgICAgICAgX19wID0gKl9fbXlfZnJlZV9s aXN0OwogICAgICAgICAgICAgICAgICBpZiAoX19wICE9IDApCiAgICAgICAgICAgICAgICAgICAg ewogICAgICAgICAgICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19wIC0+IF9NX2ZyZWVf bGlzdF9saW5rOwogICAgICAgICAgICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKilf X3A7CiAgICAgICAgICAgICAgICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBf X2k7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX1NfY2h1bmtfYWxsb2MoX19zaXplLCBf X25vYmpzKTsKCgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgICBfU19lbmRfZnJlZSA9IDA7CiAgICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChj aGFyKilfX25ld19hbGxvYzo6YWxsb2NhdGUoX19ieXRlc190b19nZXQpOwoKCiAgICAgICAgICAg IH0KICAgICAgICAgIF9TX2hlYXBfc2l6ZSArPSBfX2J5dGVzX3RvX2dldDsKICAgICAgICAgIF9T X2VuZF9mcmVlID0gX1Nfc3RhcnRfZnJlZSArIF9fYnl0ZXNfdG9fZ2V0OwogICAgICAgICAgcmV0 dXJuIF9TX2NodW5rX2FsbG9jKF9fc2l6ZSwgX19ub2Jqcyk7CiAgICAgICAgfQogICAgfQoKCgoK CiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICB2b2lkKgogICAgX19w b29sX2FsbG9jPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfcmVmaWxsKHNpemVfdCBfX24pCiAgICB7 CiAgICAgIGludCBfX25vYmpzID0gMjA7CiAgICAgIGNoYXIqIF9fY2h1bmsgPSBfU19jaHVua19h bGxvYyhfX24sIF9fbm9ianMpOwogICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3Q7 CiAgICAgIF9PYmoqIF9fcmVzdWx0OwogICAgICBfT2JqKiBfX2N1cnJlbnRfb2JqOwogICAgICBf T2JqKiBfX25leHRfb2JqOwogICAgICBpbnQgX19pOwoKICAgICAgaWYgKDEgPT0gX19ub2JqcykK ICAgICAgICByZXR1cm4gX19jaHVuazsKICAgICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xp c3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwoKCiAgICAgIF9fcmVzdWx0ID0gKF9PYmoqKV9f Y2h1bms7CiAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fbmV4dF9vYmogPSAoX09iaiopKF9fY2h1 bmsgKyBfX24pOwogICAgICBmb3IgKF9faSA9IDE7IDsgX19pKyspCiAgICAgICAgewogICAgICAg ICAgX19jdXJyZW50X29iaiA9IF9fbmV4dF9vYmo7CiAgICAgICAgICBfX25leHRfb2JqID0gKF9P YmoqKSgoY2hhciopX19uZXh0X29iaiArIF9fbik7CiAgICAgICAgICBpZiAoX19ub2JqcyAtIDEg PT0gX19pKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19jdXJyZW50X29iaiAtPiBfTV9m cmVlX2xpc3RfbGluayA9IDA7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAg ICAgICAgIGVsc2UKICAgICAgICAgICAgX19jdXJyZW50X29iaiAtPiBfTV9mcmVlX2xpc3RfbGlu ayA9IF9fbmV4dF9vYmo7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgoK ICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIF9TVExfbXV0ZXhfbG9j awogICAgX19wb29sX2FsbG9jPF9fdGhyZWFkcyxfX2luc3Q+OjpfU19sb2NrID0geyB7MCwgMCwg MCwgUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwgeyAwLCAwIH19IH07CgogIHRlbXBsYXRlPGJvb2wg X190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgY2hhciogX19wb29sX2FsbG9jPF9fdGhyZWFkcyxf X2luc3Q+OjpfU19zdGFydF9mcmVlID0gMDsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGlu dCBfX2luc3Q+CiAgICBjaGFyKiBfX3Bvb2xfYWxsb2M8X190aHJlYWRzLF9faW5zdD46Ol9TX2Vu ZF9mcmVlID0gMDsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBz aXplX3QgX19wb29sX2FsbG9jPF9fdGhyZWFkcyxfX2luc3Q+OjpfU19oZWFwX3NpemUgPSAwOwoK ICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIHR5cGVuYW1lIF9fcG9v bF9hbGxvYzxfX3RocmVhZHMsX19pbnN0Pjo6X09iaiogdm9sYXRpbGUKICAgIF9fcG9vbF9hbGxv YzxfX3RocmVhZHMsX19pbnN0Pjo6X1NfZnJlZV9saXN0W19ORlJFRUxJU1RTXTsKCiAgdHlwZWRl ZiBfX3Bvb2xfYWxsb2M8dHJ1ZSwwPiBfX2FsbG9jOwogIHR5cGVkZWYgX19wb29sX2FsbG9jPGZh bHNlLDA+IF9fc2luZ2xlX2NsaWVudF9hbGxvYzsKIyA1NjkgIi9ob21lL29sZGhhbS9nY2MtaW5z dGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1RwPgogICAgY2xhc3MgYWxsb2NhdG9yCiAgICB7CiAgICAgIHR5cGVkZWYgX19h bGxvYyBfQWxsb2M7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsK ICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIF9U cCogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgICAg IHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgY29uc3QgX1RwJiBjb25zdF9y ZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogICAgICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHAxPgogICAgICAgIHN0cnVjdCByZWJpbmQKICAgICAgICB7IHR5cGVkZWYgYWxs b2NhdG9yPF9UcDE+IG90aGVyOyB9OwoKICAgICAgYWxsb2NhdG9yKCkgdGhyb3coKSB7fQogICAg ICBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yJikgdGhyb3coKSB7fQogICAgICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHAxPgogICAgICAgIGFsbG9jYXRvcihjb25zdCBhbGxvY2F0b3I8X1RwMT4mKSB0 aHJvdygpIHt9CiAgICAgIH5hbGxvY2F0b3IoKSB0aHJvdygpIHt9CgogICAgICBwb2ludGVyCiAg ICAgIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQoKICAgICAg Y29uc3RfcG9pbnRlcgogICAgICBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsg cmV0dXJuICZfX3g7IH0KCgoKICAgICAgX1RwKgogICAgICBhbGxvY2F0ZShzaXplX3R5cGUgX19u LCBjb25zdCB2b2lkKiA9IDApCiAgICAgIHsKICAgICAgICBfVHAqIF9fcmV0ID0gMDsKICAgICAg ICBpZiAoX19uKQogICAgICAgICAgewogICAgICAgICAgICBpZiAoX19uIDw9IHRoaXMtPm1heF9z aXplKCkpCiAgICAgICAgICAgICAgX19yZXQgPSBzdGF0aWNfY2FzdDxfVHAqPihfQWxsb2M6OmFs bG9jYXRlKF9fbiAqIHNpemVvZihfVHApKSk7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg ICBfX3Rocm93X2JhZF9hbGxvYygpOwogICAgICAgICAgfQogICAgICAgIHJldHVybiBfX3JldDsK ICAgICAgfQoKCiAgICAgIHZvaWQKICAgICAgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90 eXBlIF9fbikKICAgICAgeyBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YoX1Rw KSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkgeyBy ZXR1cm4gc2l6ZV90KC0xKSAvIHNpemVvZihfVHApOyB9CgogICAgICB2b2lkIGNvbnN0cnVjdChw b2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192YWwpOyB9CiAg ICAgIHZvaWQgZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQogICAgfTsKCiAg dGVtcGxhdGU8PgogICAgY2xhc3MgYWxsb2NhdG9yPHZvaWQ+CiAgICB7CiAgICBwdWJsaWM6CiAg ICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlm ZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHZvaWQqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYg Y29uc3Qgdm9pZCogY29uc3RfcG9pbnRlcjsKICAgICAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7 CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogICAgICAgIHN0cnVjdCByZWJpbmQKICAg ICAgICB7IHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOyB9OwogICAgfTsKCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9UMSwgdHlwZW5hbWUgX1QyPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh dG9yPT0oY29uc3QgYWxsb2NhdG9yPF9UMT4mLCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpCiAgICB7 IHJldHVybiB0cnVlOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UMSwgdHlwZW5hbWUgX1QyPgog ICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgYWxsb2NhdG9yPF9UMT4mLCBjb25z dCBhbGxvY2F0b3I8X1QyPiYpCiAgICB7IHJldHVybiBmYWxzZTsgfQojIDY2NSAiL2hvbWUvb2xk aGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2FsbG9jLmgiIDMK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHN0cnVjdCBfX2Fs bG9jYXRvcgogICAgewogICAgICBfQWxsb2MgX191bmRlcmx5aW5nX2FsbG9jOwoKICAgICAgdHlw ZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNl X3R5cGU7CiAgICAgIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogICAgICB0eXBlZGVmIGNvbnN0IF9U cCogY29uc3RfcG9pbnRlcjsKICAgICAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKICAgICAgdHlw ZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICAgICAgdHlwZWRlZiBfVHAgdmFsdWVf dHlwZTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICAgICAgc3RydWN0IHJlYmlu ZAogICAgICAgIHsgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+IG90aGVyOyB9OwoK ICAgICAgX19hbGxvY2F0b3IoKSB0aHJvdygpIHt9CiAgICAgIF9fYWxsb2NhdG9yKGNvbnN0IF9f YWxsb2NhdG9yJiBfX2EpIHRocm93KCkKICAgICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9f dW5kZXJseWluZ19hbGxvYykge30KCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICAg ICAgX19hbGxvY2F0b3IoY29uc3QgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiYgX19hKSB0aHJv dygpCiAgICAgICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5kZXJseWluZ19hbGxvYykg e30KCiAgICAgIH5fX2FsbG9jYXRvcigpIHRocm93KCkge30KCiAgICAgIHBvaW50ZXIKICAgICAg YWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CgogICAgICBjb25z dF9wb2ludGVyCiAgICAgIGFkZHJlc3MoY29uc3RfcmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1 cm4gJl9feDsgfQoKCgogICAgICBfVHAqCiAgICAgIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNv bnN0IHZvaWQqID0gMCkKICAgICAgewogICAgICAgIF9UcCogX19yZXQgPSAwOwogICAgICAgIGlm IChfX24pCiAgICAgICAgICBfX3JldCA9IHN0YXRpY19jYXN0PF9UcCo+KF9BbGxvYzo6YWxsb2Nh dGUoX19uICogc2l6ZW9mKF9UcCkpKTsKICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCgog ICAgICB2b2lkCiAgICAgIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlwZSBfX24pCiAg ICAgIHsgX191bmRlcmx5aW5nX2FsbG9jLmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YoX1Rw KSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkgeyBy ZXR1cm4gc2l6ZV90KC0xKSAvIHNpemVvZihfVHApOyB9CgogICAgICB2b2lkCiAgICAgIGNvbnN0 cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192YWwp OyB9CgogICAgICB2b2lkCiAgICAgIGRlc3Ryb3kocG9pbnRlciBfX3ApIHsgX19wLT5+X1RwKCk7 IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KICAgIHN0cnVjdCBfX2FsbG9j YXRvcjx2b2lkLCBfQWxsb2M+CiAgICB7CiAgICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsK ICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHZv aWQqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3RfcG9pbnRlcjsKICAg ICAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAx PgogICAgICAgIHN0cnVjdCByZWJpbmQKICAgICAgICB7IHR5cGVkZWYgX19hbGxvY2F0b3I8X1Rw MSwgX0FsbG9jPiBvdGhlcjsgfTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlw ZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX19hbGxv Y2F0b3I8X1RwLF9BbGxvYz4mIF9fYTEsCiAgICAgICAgICAgICAgIGNvbnN0IF9fYWxsb2NhdG9y PF9UcCxfQWxsb2M+JiBfX2EyKQogICAgeyByZXR1cm4gX19hMS5fX3VuZGVybHlpbmdfYWxsb2Mg PT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBfX2Fs bG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEsCiAgICAgICAgICAgICAgIGNvbnN0IF9fYWxsb2Nh dG9yPF9UcCwgX0FsbG9jPiYgX19hMikKICAgIHsgcmV0dXJuIF9fYTEuX191bmRlcmx5aW5nX2Fs bG9jICE9IF9fYTIuX191bmRlcmx5aW5nX2FsbG9jOyB9CgoKCgoKCgogIHRlbXBsYXRlPGludCBp bnN0PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX19tYWxsb2NfYWxsb2M8 aW5zdD4mLAogICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxvYzxpbnN0PiYpCiAgICB7 IHJldHVybiB0cnVlOyB9CgogIHRlbXBsYXRlPGludCBfX2luc3Q+CiAgICBpbmxpbmUgYm9vbAog ICAgb3BlcmF0b3IhPShjb25zdCBfX21hbGxvY19hbGxvYzxfX2luc3Q+JiwKICAgICAgICAgICAg ICAgY29uc3QgX19tYWxsb2NfYWxsb2M8X19pbnN0PiYpCiAgICB7IHJldHVybiBmYWxzZTsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9 PShjb25zdCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4mLCBjb25zdCBfX2RlYnVnX2FsbG9jPF9BbGxv Yz4mKQogICAgeyByZXR1cm4gdHJ1ZTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CiAg ICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4m LCBjb25zdCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4mKQogICAgeyByZXR1cm4gZmFsc2U7IH0KIyA4 MTggIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0 bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2NhdG9y PgogICAgc3RydWN0IF9BbGxvY190cmFpdHMKICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg X1NfaW5zdGFuY2VsZXNzID0gZmFsc2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jYXRv cjo6dGVtcGxhdGUgcmViaW5kPF9UcD46Om90aGVyIGFsbG9jYXRvcl90eXBlOwogICAgfTsKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgogICAgY29uc3QgYm9v bCBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46Ol9TX2luc3RhbmNlbGVzczsKCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1RwMT4KICAgIHN0cnVjdCBfQWxsb2NfdHJh aXRzPF9UcCwgYWxsb2NhdG9yPF9UcDE+ID4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg X1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICAgICAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAs IF9fYWxsb2M+IF9BbGxvY190eXBlOwogICAgICB0eXBlZGVmIGFsbG9jYXRvcjxfVHA+IGFsbG9j YXRvcl90eXBlOwogICAgfTsKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBpbnQgX19pbnN0 PgogICAgc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX21hbGxvY19hbGxvYzxfX2luc3Q+ID4K ICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICAg ICAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9jPF9faW5zdD4gPiBf QWxsb2NfdHlwZTsKICAgICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFsbG9jX2FsbG9j PF9faW5zdD4gPiBhbGxvY2F0b3JfdHlwZTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9U cCwgYm9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBzdHJ1Y3QgX0FsbG9jX3RyYWl0czxf VHAsIF9fcG9vbF9hbGxvYzxfX3RocmVhZHMsIF9faW5zdD4gPgogICAgewogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogICAgICB0eXBlZGVmIF9fc2ltcGxl X2FsbG9jPF9UcCwgX19wb29sX2FsbG9jPF9fdGhyZWFkcywgX19pbnN0PiA+CiAgICAgIF9BbGxv Y190eXBlOwogICAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19wb29sX2FsbG9jPF9fdGhy ZWFkcywgX19pbnN0PiA+CiAgICAgIGFsbG9jYXRvcl90eXBlOwogICAgfTsKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBzdHJ1Y3QgX0FsbG9jX3RyYWl0czxf VHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29s IF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgICAgIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1Rw LCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPiBfQWxsb2NfdHlwZTsKICAgICAgdHlwZWRlZiBfX2Fs bG9jYXRvcjxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOwogICAg fTsKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1RwMSwgaW50IF9faW5z dD4KICAgIHN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwKICAgICAgICAgICAgICAgICAgICAgICAg IF9fYWxsb2NhdG9yPF9UcDEsIF9fbWFsbG9jX2FsbG9jPF9faW5zdD4gPiA+CiAgICB7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgICAgIHR5cGVkZWYg X19zaW1wbGVfYWxsb2M8X1RwLCBfX21hbGxvY19hbGxvYzxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7 CiAgICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvYzxfX2luc3Q+ID4g YWxsb2NhdG9yX3R5cGU7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1l IF9UcDEsIGJvb2wgX190aHIsIGludCBfX2luc3Q+CiAgICBzdHJ1Y3QgX0FsbG9jX3RyYWl0czxf VHAsIF9fYWxsb2NhdG9yPF9UcDEsIF9fcG9vbF9hbGxvYzxfX3RociwgX19pbnN0PiA+ID4KICAg IHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICAgICAg dHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fcG9vbF9hbGxvYzxfX3RocixfX2luc3Q+ID4K ICAgICAgX0FsbG9jX3R5cGU7CiAgICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX3Bvb2xf YWxsb2M8X190aHIsX19pbnN0PiA+CiAgICAgIGFsbG9jYXRvcl90eXBlOwogICAgfTsKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBz dHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fYWxsb2NhdG9yPF9UcDEsIF9fZGVidWdfYWxsb2M8 X0FsbG9jPiA+ID4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNz ID0gdHJ1ZTsKICAgICAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fZGVidWdfYWxsb2M8 X0FsbG9jPiA+IF9BbGxvY190eXBlOwogICAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19k ZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7CiAgICB9OwoKCgoKCiAgZXh0ZXJu IHRlbXBsYXRlIGNsYXNzIGFsbG9jYXRvcjxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg YWxsb2NhdG9yPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBfX3Bvb2xfYWxsb2M8 dHJ1ZSwwPjsKfQojIDY5ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2Mr Ky8zLjQvdmVjdG9yIiAyIDMKIyAxICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNs dWRlL2MrKy8zLjQvYml0cy9zdGxfY29uc3RydWN0LmgiIDEgMwojIDY3ICIvaG9tZS9vbGRoYW0v Z2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfY29uc3RydWN0LmgiIDMK bmFtZXNwYWNlIHN0ZAp7CgoKCgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgog ICAgaW5saW5lIHZvaWQKICAgIF9Db25zdHJ1Y3QoX1QxKiBfX3AsIGNvbnN0IF9UMiYgX192YWx1 ZSkKICAgIHsgbmV3IChzdGF0aWNfY2FzdDx2b2lkKj4oX19wKSkgX1QxKF9fdmFsdWUpOyB9CgoK CgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfVDE+CiAgICBpbmxpbmUgdm9pZAogICAgX0NvbnN0cnVj dChfVDEqIF9fcCkKICAgIHsgbmV3IChzdGF0aWNfY2FzdDx2b2lkKj4oX19wKSkgX1QxKCk7IH0K IyA5OCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMv c3RsX2NvbnN0cnVjdC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAg ICBpbmxpbmUgdm9pZAogICAgX19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3Qs IF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IGZvciAoIDsgX19m aXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkgX0Rlc3Ryb3koJipfX2ZpcnN0KTsgfQojIDExMiAi L2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX2Nv bnN0cnVjdC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICBpbmxp bmUgdm9pZAogICAgX19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yLCBfRm9yd2FyZEl0ZXJh dG9yLCBfX3RydWVfdHlwZSkKICAgIHsgfQoKCgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfVHA+CiAg ICBpbmxpbmUgdm9pZAogICAgX0Rlc3Ryb3koX1RwKiBfX3BvaW50ZXIpCiAgICB7IF9fcG9pbnRl ci0+fl9UcCgpOyB9CiMgMTM0ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRl L2MrKy8zLjQvYml0cy9zdGxfY29uc3RydWN0LmgiIDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh cmRJdGVyYXRvcj4KICAgIGlubGluZSB2b2lkCiAgICBfRGVzdHJveShfRm9yd2FyZEl0ZXJhdG9y IF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAg ICAgICAgICAgICAgICAgICAgIF9WYWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9f dHlwZV90cmFpdHM8X1ZhbHVlX3R5cGU+OjpoYXNfdHJpdmlhbF9kZXN0cnVjdG9yCiAgICAgICAg ICAgICAgICAgICAgICAgX0hhc190cml2aWFsX2Rlc3RydWN0b3I7CgogICAgICBfX2Rlc3Ryb3lf YXV4KF9fZmlyc3QsIF9fbGFzdCwgX0hhc190cml2aWFsX2Rlc3RydWN0b3IoKSk7CiAgICB9Cn0K IyA3MCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L3ZlY3Rv ciIgMiAzCiMgMSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40 L2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMSAzCiMgNjYgIi9ob21lL29sZGhhbS9nY2MtaW5z dGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMKbmFt ZXNwYWNlIHN0ZAp7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUg X0ZvcndhcmRJdGVyPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVk X2NvcHlfYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKQogICAgeyByZXR1cm4gY29weShfX2ZpcnN0LCBf X2xhc3QsIF9fcmVzdWx0KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBl bmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFsaXplZF9j b3B5X2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2N1 ciA9IF9fcmVzdWx0OwogICAgICB0cnkgewogICAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xh c3Q7ICsrX19maXJzdCwgKytfX2N1cikKICAgICAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgKl9f Zmlyc3QpOwogICAgICAgIHJldHVybiBfX2N1cjsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiAg ICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19yZXN1bHQsIF9fY3VyKTsKICAgICAgICAgIHRo cm93OwogICAgICAgIH0KICAgIH0KIyAxMDYgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2Mx L2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBpbmxpbmUgX0Zv cndhcmRJdGVyCiAgICB1bmluaXRpYWxpemVkX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w dXRJdGVyIF9fbGFzdCwgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KQogICAgewogICAgICB0eXBlZGVm IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1 ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVUeXBlPjo6 aXNfUE9EX3R5cGUgX0lzX1BPRDsKICAgICAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1 eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfSXNfUE9EKCkpOwogICAgfQoKICBpbmxpbmUg Y2hhcioKICB1bmluaXRpYWxpemVkX2NvcHkoY29uc3QgY2hhciogX19maXJzdCwgY29uc3QgY2hh ciogX19sYXN0LCBjaGFyKiBfX3Jlc3VsdCkKICB7CiAgICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2Zp cnN0LCBfX2xhc3QgLSBfX2ZpcnN0KTsKICAgIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBf X2ZpcnN0KTsKICB9CgogIGlubGluZSB3Y2hhcl90KgogIHVuaW5pdGlhbGl6ZWRfY29weShjb25z dCB3Y2hhcl90KiBfX2ZpcnN0LCBjb25zdCB3Y2hhcl90KiBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgICAgIHdjaGFyX3QqIF9fcmVzdWx0KQogIHsKICAgIG1lbW1vdmUoX19yZXN1bHQsIF9fZmly c3QsIHNpemVvZih3Y2hhcl90KSAqIChfX2xhc3QgLSBfX2ZpcnN0KSk7CiAgICByZXR1cm4gX19y ZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7CiAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9G b3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIF9fdW5pbml0aWFs aXplZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX190cnVlX3R5cGUp CiAgICB7IGZpbGwoX19maXJzdCwgX19sYXN0LCBfX3gpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAgX191bmluaXRpYWxpemVk X2ZpbGxfYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpCiAg ICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fZmlyc3Q7CiAgICAgIHRyeSB7CiAgICAg ICAgZm9yICggOyBfX2N1ciAhPSBfX2xhc3Q7ICsrX19jdXIpCiAgICAgICAgICBfQ29uc3RydWN0 KCYqX19jdXIsIF9feCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAg ICAgIF9EZXN0cm95KF9fZmlyc3QsIF9fY3VyKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0K ICAgIH0KIyAxNjQgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMu NC9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2Fy ZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSB2b2lkCiAgICB1bmluaXRpYWxpemVkX2Zp bGwoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYg X194KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2Fy ZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190 eXBlX3RyYWl0czxfVmFsdWVUeXBlPjo6aXNfUE9EX3R5cGUgX0lzX1BPRDsKICAgICAgX191bmlu aXRpYWxpemVkX2ZpbGxfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX194LCBfSXNfUE9EKCkpOwogICAg fQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5 cGVuYW1lIF9UcD4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFsaXplZF9m aWxsX25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX190cnVlX3R5cGUpCiAgICB7CiAgICAg IHJldHVybiBmaWxsX24oX19maXJzdCwgX19uLCBfX3gpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfVHA+CiAgICBfRm9y d2FyZEl0ZXIKICAgIF9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9Gb3J3YXJkSXRlciBfX2Zp cnN0LCBfU2l6ZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAm IF9feCwgX19mYWxzZV90eXBlKQogICAgewogICAgICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2Zp cnN0OwogICAgICB0cnkgewogICAgICAgIGZvciAoIDsgX19uID4gMDsgLS1fX24sICsrX19jdXIp CiAgICAgICAgICBfQ29uc3RydWN0KCYqX19jdXIsIF9feCk7CiAgICAgICAgcmV0dXJuIF9fY3Vy OwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJveShf X2ZpcnN0LCBfX2N1cik7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICB9CiMgMjEwICIv aG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfdW5p bml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFt ZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgogICAgdW5pbml0 aWFsaXplZF9maWxsX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1Rw JiBfX3gpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3 YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf X3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogICAgICByZXR1 cm4gX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX19maXJzdCwgX19uLCBfX3gsIF9Jc19QT0Qo KSk7CiAgICB9CiMgMjI3ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2Mr Ky8zLjQvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu cHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAg ICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9jb3B5KF9JbnB1 dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KQogICAgewog ICAgICBfRm9yd2FyZEl0ZXIgX19taWQgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9f bGFzdDEsIF9fcmVzdWx0KTsKICAgICAgdHJ5IHsKICAgICAgICByZXR1cm4gdW5pbml0aWFsaXpl ZF9jb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBfX21pZCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4u KQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fcmVzdWx0LCBfX21pZCk7CiAgICAgICAg ICB0aHJvdzsKICAgICAgICB9CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk SXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfSW5wdXRJdGVyPgogICAgaW5saW5lIF9Gb3J3 YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2ZpbGxfY29weShfRm9yd2FyZEl0ZXIgX19yZXN1 bHQsIF9Gb3J3YXJkSXRlciBfX21pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgX1RwJiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19m aXJzdCwgX0lucHV0SXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChf X3Jlc3VsdCwgX19taWQsIF9feCk7CiAgICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIHVuaW5pdGlh bGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fbWlkKTsKICAgICAgfQogICAgICBjYXRjaCgu Li4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19yZXN1bHQsIF9fbWlkKTsKICAgICAg ICAgIHRocm93OwogICAgICAgIH0KICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0 SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdm9p ZAogICAgX191bmluaXRpYWxpemVkX2NvcHlfZmlsbChfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5w dXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRl ciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IF9UcCYgX194KQogICAgewogICAgICBfRm9yd2FyZEl0ZXIgX19taWQyID0g dW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0Mik7CiAgICAgIHRy eSB7CiAgICAgICAgdW5pbml0aWFsaXplZF9maWxsKF9fbWlkMiwgX19sYXN0MiwgX194KTsKICAg ICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19maXJz dDIsIF9fbWlkMik7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICB9Cgp9CiMgNzEgIi9o b21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC92ZWN0b3IiIDIgMwoj IDEgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0 bF92ZWN0b3IuaCIgMSAzCiMgNjUgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1 ZGUvYysrLzMuNC9iaXRzL3N0bF92ZWN0b3IuaCIgMwojIDEgIi9ob21lL29sZGhhbS9nY2MtaW5z dGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIv aG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9mdW5jdGV4 Y2VwdC5oIiAzCiMgMSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysv My40L2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3Rh bGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVzcGFj ZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9pZAog IF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qodm9p ZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190aHJv d19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21haW5f ZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVu dChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3Qg Y2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9f cyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAg dm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9f dGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3df dW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19pb3Nf ZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgNjYgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFs bC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF92ZWN0b3IuaCIgMiAzCgoKbmFtZXNwYWNl IHN0ZAp7CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2NhdG9y LCBib29sIF9Jc1N0YXRpYz4KICAgIGNsYXNzIF9WZWN0b3JfYWxsb2NfYmFzZQogICAgewogICAg cHVibGljOgogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2Nh dG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgYWxsb2NhdG9yX3R5cGU7CgogICAgICBhbGxvY2F0 b3JfdHlwZQogICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YV9hbGxv Y2F0b3I7IH0KCiAgICAgIF9WZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYg X19hKQogICAgICA6IF9NX2RhdGFfYWxsb2NhdG9yKF9fYSksIF9NX3N0YXJ0KDApLCBfTV9maW5p c2goMCksIF9NX2VuZF9vZl9zdG9yYWdlKDApCiAgICAgIHsgfQoKICAgIHByb3RlY3RlZDoKICAg ICAgYWxsb2NhdG9yX3R5cGUgX01fZGF0YV9hbGxvY2F0b3I7CiAgICAgIF9UcCogX01fc3RhcnQ7 CiAgICAgIF9UcCogX01fZmluaXNoOwogICAgICBfVHAqIF9NX2VuZF9vZl9zdG9yYWdlOwoKICAg ICAgX1RwKgogICAgICBfTV9hbGxvY2F0ZShzaXplX3QgX19uKSB7IHJldHVybiBfTV9kYXRhX2Fs bG9jYXRvci5hbGxvY2F0ZShfX24pOyB9CgogICAgICB2b2lkCiAgICAgIF9NX2RlYWxsb2NhdGUo X1RwKiBfX3AsIHNpemVfdCBfX24pCiAgICAgIHsgaWYgKF9fcCkgX01fZGF0YV9hbGxvY2F0b3Iu ZGVhbGxvY2F0ZShfX3AsIF9fbik7IH0KICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAs IHR5cGVuYW1lIF9BbGxvY2F0b3I+CiAgICBjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBf QWxsb2NhdG9yLCB0cnVlPgogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIHR5cGVuYW1l IF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAg ICAgIGFsbG9jYXRvcl90eXBlOwoKICAgICAgYWxsb2NhdG9yX3R5cGUKICAgICAgZ2V0X2FsbG9j YXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0KCiAgICAgIF9WZWN0b3Jf YWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYpCiAgICAgIDogX01fc3RhcnQoMCksIF9N X2ZpbmlzaCgwKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkKICAgICAgeyB9CgogICAgcHJvdGVjdGVk OgogICAgICBfVHAqIF9NX3N0YXJ0OwogICAgICBfVHAqIF9NX2ZpbmlzaDsKICAgICAgX1RwKiBf TV9lbmRfb2Zfc3RvcmFnZTsKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxf VHAsIF9BbGxvY2F0b3I+OjpfQWxsb2NfdHlwZSBfQWxsb2NfdHlwZTsKCiAgICAgIF9UcCoKICAg ICAgX01fYWxsb2NhdGUoc2l6ZV90IF9fbikgeyByZXR1cm4gX0FsbG9jX3R5cGU6OmFsbG9jYXRl KF9fbik7IH0KCiAgICAgIHZvaWQKICAgICAgX01fZGVhbGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90 IF9fbikgeyBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfX3AsIF9fbik7fQogICAgfTsKCgoKCgoK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBzdHJ1Y3QgX1Zl Y3Rvcl9iYXNlCiAgICA6IHB1YmxpYyBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46 Ol9TX2luc3RhbmNlbGVzcz4KICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfVmVjdG9y X2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CiAgICAgICAgIF9C YXNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0 b3JfdHlwZTsKCiAgICAgIF9WZWN0b3JfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQog ICAgICA6IF9CYXNlKF9fYSkgeyB9CgogICAgICBfVmVjdG9yX2Jhc2Uoc2l6ZV90IF9fbiwgY29u c3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgICAgOiBfQmFzZShfX2EpCiAgICAgIHsKICAgICAg ICB0aGlzLT5fTV9zdGFydCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICAgICAgdGhpcy0+X01fZmlu aXNoID0gdGhpcy0+X01fc3RhcnQ7CiAgICAgICAgdGhpcy0+X01fZW5kX29mX3N0b3JhZ2UgPSB0 aGlzLT5fTV9zdGFydCArIF9fbjsKICAgICAgfQoKICAgICAgfl9WZWN0b3JfYmFzZSgpCiAgICAg IHsgX01fZGVhbGxvY2F0ZSh0aGlzLT5fTV9zdGFydCwKICAgICAgICAgICAgICAgICAgICAgIHRo aXMtPl9NX2VuZF9vZl9zdG9yYWdlIC0gdGhpcy0+X01fc3RhcnQpOyB9CiAgICB9OwojIDE4NSAi L2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX3Zl Y3Rvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2MgPSBhbGxv Y2F0b3I8X1RwPiA+CiAgICBjbGFzcyB2ZWN0b3IgOiBwcm90ZWN0ZWQgX1ZlY3Rvcl9iYXNlPF9U cCwgX0FsbG9jPgogICAgewoKICAgICAKCiAgICAgIHR5cGVkZWYgX1ZlY3Rvcl9iYXNlPF9UcCwg X0FsbG9jPiBfQmFzZTsKICAgICAgdHlwZWRlZiB2ZWN0b3I8X1RwLCBfQWxsb2M+IHZlY3Rvcl90 eXBlOwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICAgICAgdHlw ZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOwogICAgICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUq IGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgX19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRv cjxwb2ludGVyLCB2ZWN0b3JfdHlwZT4gaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgX19nbnVfY3h4 OjpfX25vcm1hbF9pdGVyYXRvcjxjb25zdF9wb2ludGVyLCB2ZWN0b3JfdHlwZT4KICAgICAgY29u c3RfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0 ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJz ZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiB2YWx1 ZV90eXBlJiByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3Rf cmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYg cHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6 YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgogICAgcHJvdGVjdGVkOgoKCgoKCgogICAg ICB1c2luZyBfQmFzZTo6X01fYWxsb2NhdGU7CiAgICAgIHVzaW5nIF9CYXNlOjpfTV9kZWFsbG9j YXRlOwogICAgICB1c2luZyBfQmFzZTo6X01fc3RhcnQ7CiAgICAgIHVzaW5nIF9CYXNlOjpfTV9m aW5pc2g7CiAgICAgIHVzaW5nIF9CYXNlOjpfTV9lbmRfb2Zfc3RvcmFnZTsKCiAgICBwdWJsaWM6 CgoKCgoKICAgICAgZXhwbGljaXQKICAgICAgdmVjdG9yKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBf X2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgICA6IF9CYXNlKF9fYSkgeyB9CiMgMjM5ICIvaG9t ZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfdmVjdG9y LmgiIDMKICAgICAgdmVjdG9yKHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFs dWUsCiAgICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5 cGUoKSkKICAgICAgOiBfQmFzZShfX24sIF9fYSkKICAgICAgeyB0aGlzLT5fTV9maW5pc2ggPSB1 bmluaXRpYWxpemVkX2ZpbGxfbih0aGlzLT5fTV9zdGFydCwgX19uLCBfX3ZhbHVlKTsgfQojIDI1 MSAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3Rs X3ZlY3Rvci5oIiAzCiAgICAgIGV4cGxpY2l0CiAgICAgIHZlY3RvcihzaXplX3R5cGUgX19uKQog ICAgICA6IF9CYXNlKF9fbiwgYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgeyB0aGlzLT5fTV9maW5p c2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbih0aGlzLT5fTV9zdGFydCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX24sIHZhbHVlX3R5cGUoKSk7IH0KIyAy NjYgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0 bF92ZWN0b3IuaCIgMwogICAgICB2ZWN0b3IoY29uc3QgdmVjdG9yJiBfX3gpCiAgICAgIDogX0Jh c2UoX194LnNpemUoKSwgX194LmdldF9hbGxvY2F0b3IoKSkKICAgICAgeyB0aGlzLT5fTV9maW5p c2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+X01fc3RhcnQpOwogICAg ICB9CiMgMjg2ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQv Yml0cy9zdGxfdmVjdG9yLmgiIDMKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0 b3I+CiAgICAgICAgdmVjdG9yKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9y IF9fbGFzdCwKICAgICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9j YXRvcl90eXBlKCkpCiAgICAgICAgOiBfQmFzZShfX2EpCiAgICAgICAgewoKICAgICAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0lu dGVncmFsOwogICAgICAgICAgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3Qs IF9JbnRlZ3JhbCgpKTsKICAgICAgICB9CgoKCgoKCiAgICAgIH52ZWN0b3IoKSB7IF9EZXN0cm95 KHRoaXMtPl9NX3N0YXJ0LCB0aGlzLT5fTV9maW5pc2gpOyB9CiMgMzExICIvaG9tZS9vbGRoYW0v Z2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfdmVjdG9yLmgiIDMKICAg ICAgdmVjdG9yJgogICAgICBvcGVyYXRvcj0oY29uc3QgdmVjdG9yJiBfX3gpOwojIDMyNCAiL2hv bWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX3ZlY3Rv ci5oIiAzCiAgICAgIHZvaWQKICAgICAgYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVl X3R5cGUmIF9fdmFsKQogICAgICB7IF9NX2ZpbGxfYXNzaWduKF9fbiwgX192YWwpOyB9CiMgMzQw ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxf dmVjdG9yLmgiIDMKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgICAg ICAgdm9pZAogICAgICAgIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVy YXRvciBfX2xhc3QpCiAgICAgICAgewoKICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2lu dGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICAgICAgX01f YXNzaWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAgICAgIH0K CgogICAgICBhbGxvY2F0b3JfdHlwZQogICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1 cm4gX0Jhc2U6OmdldF9hbGxvY2F0b3IoKTsgfQoKCgoKCgogICAgICBpdGVyYXRvcgogICAgICBi ZWdpbigpIHsgcmV0dXJuIGl0ZXJhdG9yICh0aGlzLT5fTV9zdGFydCk7IH0KCgoKCgoKICAgICAg Y29uc3RfaXRlcmF0b3IKICAgICAgYmVnaW4oKSBjb25zdCB7IHJldHVybiBjb25zdF9pdGVyYXRv ciAodGhpcy0+X01fc3RhcnQpOyB9CgoKCgoKCiAgICAgIGl0ZXJhdG9yCiAgICAgIGVuZCgpIHsg cmV0dXJuIGl0ZXJhdG9yICh0aGlzLT5fTV9maW5pc2gpOyB9CgoKCgoKICAgICAgY29uc3RfaXRl cmF0b3IKICAgICAgZW5kKCkgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IgKHRoaXMtPl9N X2ZpbmlzaCk7IH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICByYmVnaW4oKSB7 IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQoKCgoKCgogICAgICBjb25zdF9yZXZl cnNlX2l0ZXJhdG9yCiAgICAgIHJiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X3JldmVyc2Vf aXRlcmF0b3IoZW5kKCkpOyB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgcmVu ZCgpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KCgoKCgoKICAgICAgY29u c3RfcmV2ZXJzZV9pdGVyYXRvcgogICAgICByZW5kKCkgY29uc3QgeyByZXR1cm4gY29uc3RfcmV2 ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQoKCgogICAgICBzaXplX3R5cGUKICAgICAgc2l6ZSgp IGNvbnN0IHsgcmV0dXJuIHNpemVfdHlwZShlbmQoKSAtIGJlZ2luKCkpOyB9CgoKICAgICAgc2l6 ZV90eXBlCiAgICAgIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKC0xKSAvIHNp emVvZih2YWx1ZV90eXBlKTsgfQojIDQzNiAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEv aW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgICAgIHZvaWQKICAgICAgcmVz aXplKHNpemVfdHlwZSBfX25ld19zaXplLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCiAgICAgIHsK ICAgICAgICBpZiAoX19uZXdfc2l6ZSA8IHNpemUoKSkKICAgICAgICAgIGVyYXNlKGJlZ2luKCkg KyBfX25ld19zaXplLCBlbmQoKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgaW5zZXJ0KGVuZCgp LCBfX25ld19zaXplIC0gc2l6ZSgpLCBfX3gpOwogICAgICB9CiMgNDU1ICIvaG9tZS9vbGRoYW0v Z2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfdmVjdG9yLmgiIDMKICAg ICAgdm9pZAogICAgICByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUpIHsgcmVzaXplKF9fbmV3 X3NpemUsIHZhbHVlX3R5cGUoKSk7IH0KCgoKCgogICAgICBzaXplX3R5cGUKICAgICAgY2FwYWNp dHkoKSBjb25zdAogICAgICB7IHJldHVybiBzaXplX3R5cGUoY29uc3RfaXRlcmF0b3IodGhpcy0+ X01fZW5kX29mX3N0b3JhZ2UpIC0gYmVnaW4oKSk7IH0KCgoKCgogICAgICBib29sCiAgICAgIGVt cHR5KCkgY29uc3QgeyByZXR1cm4gYmVnaW4oKSA9PSBlbmQoKTsgfQojIDQ5MCAiL2hvbWUvb2xk aGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX3ZlY3Rvci5oIiAz CiAgICAgIHZvaWQKICAgICAgcmVzZXJ2ZShzaXplX3R5cGUgX19uKTsKIyA1MDQgIi9ob21lL29s ZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0bF92ZWN0b3IuaCIg MwogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKSB7IHJldHVy biAqKGJlZ2luKCkgKyBfX24pOyB9CiMgNTE4ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2Nj MS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfdmVjdG9yLmgiIDMKICAgICAgY29uc3RfcmVmZXJl bmNlCiAgICAgIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKihiZWdp bigpICsgX19uKTsgfQoKICAgIHByb3RlY3RlZDoKCiAgICAgIHZvaWQKICAgICAgX01fcmFuZ2Vf Y2hlY2soc2l6ZV90eXBlIF9fbikgY29uc3QKICAgICAgewogICAgICAgIGlmIChfX24gPj0gdGhp cy0+c2l6ZSgpKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoInZlY3RvciBbXSBhY2Nl c3Mgb3V0IG9mIHJhbmdlIik7CiAgICAgIH0KCiAgICBwdWJsaWM6CiMgNTQyICIvaG9tZS9vbGRo YW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfdmVjdG9yLmgiIDMK ICAgICAgcmVmZXJlbmNlCiAgICAgIGF0KHNpemVfdHlwZSBfX24pIHsgX01fcmFuZ2VfY2hlY2so X19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQojIDU1NiAiL2hvbWUvb2xkaGFtL2djYy1pbnN0 YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgICAgIGNvbnN0 X3JlZmVyZW5jZQogICAgICBhdChzaXplX3R5cGUgX19uKSBjb25zdCB7IF9NX3JhbmdlX2NoZWNr KF9fbik7IHJldHVybiAoKnRoaXMpW19fbl07IH0KCgoKCgogICAgICByZWZlcmVuY2UKICAgICAg ZnJvbnQoKSB7IHJldHVybiAqYmVnaW4oKTsgfQoKCgoKCiAgICAgIGNvbnN0X3JlZmVyZW5jZQog ICAgICBmcm9udCgpIGNvbnN0IHsgcmV0dXJuICpiZWdpbigpOyB9CgoKCgoKICAgICAgcmVmZXJl bmNlCiAgICAgIGJhY2soKSB7IHJldHVybiAqKGVuZCgpIC0gMSk7IH0KCgoKCgogICAgICBjb25z dF9yZWZlcmVuY2UKICAgICAgYmFjaygpIGNvbnN0IHsgcmV0dXJuICooZW5kKCkgLSAxKTsgfQoj IDU5OCAiL2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMv c3RsX3ZlY3Rvci5oIiAzCiAgICAgIHZvaWQKICAgICAgcHVzaF9iYWNrKGNvbnN0IHZhbHVlX3R5 cGUmIF9feCkKICAgICAgewogICAgICAgIGlmICh0aGlzLT5fTV9maW5pc2ggIT0gdGhpcy0+X01f ZW5kX29mX3N0b3JhZ2UpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9Db25zdHJ1Y3QodGhpcy0+ X01fZmluaXNoLCBfX3gpOwogICAgICAgICAgICArK3RoaXMtPl9NX2ZpbmlzaDsKICAgICAgICAg IH0KICAgICAgICBlbHNlCiAgICAgICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpLCBfX3gpOwogICAg ICB9CiMgNjE4ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQv Yml0cy9zdGxfdmVjdG9yLmgiIDMKICAgICAgdm9pZAogICAgICBwb3BfYmFjaygpCiAgICAgIHsK ICAgICAgICAtLXRoaXMtPl9NX2ZpbmlzaDsKICAgICAgICBfRGVzdHJveSh0aGlzLT5fTV9maW5p c2gpOwogICAgICB9CiMgNjM2ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRl L2MrKy8zLjQvYml0cy9zdGxfdmVjdG9yLmgiIDMKICAgICAgaXRlcmF0b3IKICAgICAgaW5zZXJ0 KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CiMgNjUyICIvaG9t ZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0cy9zdGxfdmVjdG9y LmgiIDMKICAgICAgdm9pZAogICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBf X24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKICAgICAgeyBfTV9maWxsX2luc2VydChfX3Bvcywg X19uLCBfX3gpOyB9CiMgNjcwICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRl L2MrKy8zLjQvYml0cy9zdGxfdmVjdG9yLmgiIDMKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu cHV0SXRlcmF0b3I+CiAgICAgICAgdm9pZAogICAgICAgIGluc2VydChpdGVyYXRvciBfX3Bvcywg X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgICAgIHsK CiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6 X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAgICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3Bvcywg X19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgICAgICAgfQojIDY5NCAiL2hvbWUvb2xk aGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX3ZlY3Rvci5oIiAz CiAgICAgIGl0ZXJhdG9yCiAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pOwojIDcxNSAi L2hvbWUvb2xkaGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX3Zl Y3Rvci5oIiAzCiAgICAgIGl0ZXJhdG9yCiAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0 ZXJhdG9yIF9fbGFzdCk7CiMgNzI3ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNs dWRlL2MrKy8zLjQvYml0cy9zdGxfdmVjdG9yLmgiIDMKICAgICAgdm9pZAogICAgICBzd2FwKHZl Y3RvciYgX194KQogICAgICB7CiAgICAgICAgc3RkOjpzd2FwKHRoaXMtPl9NX3N0YXJ0LCBfX3gu X01fc3RhcnQpOwogICAgICAgIHN0ZDo6c3dhcCh0aGlzLT5fTV9maW5pc2gsIF9feC5fTV9maW5p c2gpOwogICAgICAgIHN0ZDo6c3dhcCh0aGlzLT5fTV9lbmRfb2Zfc3RvcmFnZSwgX194Ll9NX2Vu ZF9vZl9zdG9yYWdlKTsKICAgICAgfQoKCgoKCgoKICAgICAgdm9pZAogICAgICBjbGVhcigpIHsg ZXJhc2UoYmVnaW4oKSwgZW5kKCkpOyB9CgogICAgcHJvdGVjdGVkOgoKCgoKCgogICAgICB0ZW1w bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgogICAgICAgIHBvaW50ZXIKICAgICAgICBf TV9hbGxvY2F0ZV9hbmRfY29weShzaXplX3R5cGUgX19uLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3Qp CiAgICAgICAgewogICAgICAgICAgcG9pbnRlciBfX3Jlc3VsdCA9IF9NX2FsbG9jYXRlKF9fbik7 CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHVuaW5pdGlhbGl6ZWRf Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICAgICAgICAgICAgICByZXR1cm4gX19y ZXN1bHQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKC4uLikKICAgICAgICAgICAgewog ICAgICAgICAgICAgIF9NX2RlYWxsb2NhdGUoX19yZXN1bHQsIF9fbik7CiAgICAgICAgICAgICAg dGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CgoKCgoKICAgICAgdGVtcGxhdGU8dHlwZW5h bWUgX0ludGVnZXI+CiAgICAgICAgdm9pZAogICAgICAgIF9NX2luaXRpYWxpemVfZGlzcGF0Y2go X0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbHVlLCBfX3RydWVfdHlwZSkKICAgICAgICB7CiAg ICAgICAgICB0aGlzLT5fTV9zdGFydCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICAgICAgICB0aGlz LT5fTV9lbmRfb2Zfc3RvcmFnZSA9IHRoaXMtPl9NX3N0YXJ0ICsgX19uOwogICAgICAgICAgdGhp cy0+X01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24odGhpcy0+X01fc3RhcnQsIF9fbiwg X192YWx1ZSk7CiAgICAgICAgfQoKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXI+ CiAgICAgICAgdm9pZAogICAgICAgIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0lucHV0SXRlciBf X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fZmFsc2VfdHlwZSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkKICAgICAgICAgICAgX0l0 ZXJDYXRlZ29yeTsKICAgICAgICAgIF9NX3JhbmdlX2luaXRpYWxpemUoX19maXJzdCwgX19sYXN0 LCBfSXRlckNhdGVnb3J5KCkpOwogICAgICAgIH0KCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf SW5wdXRJdGVyYXRvcj4KICAgICAgICB2b2lkCiAgICAgICAgX01fcmFuZ2VfaW5pdGlhbGl6ZShf SW5wdXRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0 SXRlcmF0b3IgX19sYXN0LCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICAgICAgewogICAgICAgICAg Zm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgICAgICBwdXNoX2Jh Y2soKl9fZmlyc3QpOwogICAgICAgIH0KCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2Fy ZEl0ZXJhdG9yPgogICAgICAgIHZvaWQKICAgICAgICBfTV9yYW5nZV9pbml0aWFsaXplKF9Gb3J3 YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJk SXRlcmF0b3IgX19sYXN0LCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgICAgICB7CiAgICAgICAg ICBzaXplX3R5cGUgX19uID0gc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAg ICAgdGhpcy0+X01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgICAgICAgdGhpcy0+X01f ZW5kX29mX3N0b3JhZ2UgPSB0aGlzLT5fTV9zdGFydCArIF9fbjsKICAgICAgICAgIHRoaXMtPl9N X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+X01fc3RhcnQpOwogICAg ICAgIH0KCgoKCgoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVnZXI+CiAgICAgICAgdm9p ZAogICAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFs LCBfX3RydWVfdHlwZSkKICAgICAgICB7CiAgICAgICAgICBfTV9maWxsX2Fzc2lnbihzdGF0aWNf Y2FzdDxzaXplX3R5cGU+KF9fbiksCiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz dDx2YWx1ZV90eXBlPihfX3ZhbCkpOwogICAgICAgIH0KCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW5wdXRJdGVyPgogICAgICAgIHZvaWQKICAgICAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX0lu cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX19mYWxzZV90eXBlKQogICAgICAg IHsKICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+ OjppdGVyYXRvcl9jYXRlZ29yeQogICAgICAgICAgICBfSXRlckNhdGVnb3J5OwogICAgICAgICAg X01fYXNzaWduX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9JdGVyQ2F0ZWdvcnkoKSk7CiAgICAgICAg fQoKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIHZvaWQK ICAgICAgICBfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJh dG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgoK ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcj4KICAgICAgICB2b2lkCiAg ICAgICAgX01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRl cmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcp OwoKCgogICAgICB2b2lkCiAgICAgIF9NX2ZpbGxfYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0 IHZhbHVlX3R5cGUmIF9fdmFsKTsKCgoKCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZWdl cj4KICAgICAgICB2b2lkCiAgICAgICAgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9z LCBfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsLAogICAgICAgICAgICAgICAgICAgICAgICAg ICBfX3RydWVfdHlwZSkKICAgICAgICB7CiAgICAgICAgICBfTV9maWxsX2luc2VydChfX3Bvcywg c3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfX24pLAogICAgICAgICAgICAgICAgICAgICAgICAgc3Rh dGljX2Nhc3Q8dmFsdWVfdHlwZT4oX192YWwpKTsKICAgICAgICB9CgoKICAgICAgdGVtcGxhdGU8 dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgdm9pZAogICAgICAgIF9NX2luc2VydF9k aXNwYXRjaChpdGVyYXRvciBfX3BvcywgX0lucHV0SXRlcmF0b3IgX19maXJzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBfX2ZhbHNlX3R5cGUpCiAg ICAgICAgewogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0 SXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeQogICAgICAgICAgICBfSXRlckNhdGVnb3J5Owog ICAgICAgICAgX01fcmFuZ2VfaW5zZXJ0KF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9JdGVyQ2F0 ZWdvcnkoKSk7CiAgICAgICAgfQoKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJh dG9yPgogICAgICAgIHZvaWQKICAgICAgICBfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3Ms IF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0 ZXJhdG9yIF9fbGFzdCwgaW5wdXRfaXRlcmF0b3JfdGFnKTsKCgogICAgICB0ZW1wbGF0ZTx0eXBl bmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgogICAgICAgIHZvaWQKICAgICAgICBfTV9yYW5nZV9pbnNl cnQoaXRlcmF0b3IgX19wb3MsIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIGZvcndhcmRfaXRlcmF0b3JfdGFn KTsKCgoKICAgICAgdm9pZAogICAgICBfTV9maWxsX2luc2VydChpdGVyYXRvciBfX3Bvcywgc2l6 ZV90eXBlIF9fbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KTsKCgogICAgICB2b2lkCiAgICAgIF9N X2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KTsK ICAgIH07CiMgOTEzICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8z LjQvYml0cy9zdGxfdmVjdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1l IF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IHZlY3RvcjxfVHAs X0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLF9BbGxvYz4mIF9feSkKICAgIHsKICAgICAg cmV0dXJuIF9feC5zaXplKCkgPT0gX195LnNpemUoKSAmJgogICAgICAgICAgICAgZXF1YWwoX194 LmJlZ2luKCksIF9feC5lbmQoKSwgX195LmJlZ2luKCkpOwogICAgfQojIDkzMiAiL2hvbWUvb2xk aGFtL2djYy1pbnN0YWxsL2djYzEvaW5jbHVkZS9jKysvMy40L2JpdHMvc3RsX3ZlY3Rvci5oIiAz CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9v bAogICAgb3BlcmF0b3I8KGNvbnN0IHZlY3RvcjxfVHAsX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0 b3I8X1RwLF9BbGxvYz4mIF9feSkKICAgIHsKICAgICAgcmV0dXJuIGxleGljb2dyYXBoaWNhbF9j b21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX3kuYmVnaW4oKSwgX195LmVuZCgpKTsKICAgIH0KCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9y IT0oY29uc3QgdmVjdG9yPF9UcCxfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsX0FsbG9j PiYgX195KQogICAgeyByZXR1cm4gIShfX3ggPT0gX195KTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+KGNv bnN0IHZlY3RvcjxfVHAsX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLF9BbGxvYz4mIF9f eSkKICAgIHsgcmV0dXJuIF9feSA8IF9feDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCB2ZWN0 b3I8X1RwLF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCxfQWxsb2M+JiBfX3kpCiAgICB7 IHJldHVybiAhKF9feSA8IF9feCk7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5h bWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgdmVjdG9yPF9U cCxfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsX0FsbG9jPiYgX195KQogICAgeyByZXR1 cm4gIShfX3ggPCBfX3kpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9B bGxvYz4KICAgIGlubGluZSB2b2lkCiAgICBzd2FwKHZlY3RvcjxfVHAsX0FsbG9jPiYgX194LCB2 ZWN0b3I8X1RwLF9BbGxvYz4mIF9feSkKICAgIHsgX194LnN3YXAoX195KTsgfQp9CiMgNzIgIi9o b21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC92ZWN0b3IiIDIgMwoj IDEgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9iaXRzL3N0 bF9idmVjdG9yLmgiIDEgMwojIDY0ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNs dWRlL2MrKy8zLjQvYml0cy9zdGxfYnZlY3Rvci5oIiAzCm5hbWVzcGFjZSBzdGQKewogIHR5cGVk ZWYgdW5zaWduZWQgbG9uZyBfQml0X3R5cGU7CiAgZW51bSB7IF9NX3dvcmRfYml0ID0gaW50KDgg KiBzaXplb2YoX0JpdF90eXBlKSkgfTsKCnN0cnVjdCBfQml0X3JlZmVyZW5jZSB7CgogIF9CaXRf dHlwZSAqIF9NX3A7CiAgX0JpdF90eXBlIF9NX21hc2s7CiAgX0JpdF9yZWZlcmVuY2UoX0JpdF90 eXBlICogX194LCBfQml0X3R5cGUgX195KQogICAgOiBfTV9wKF9feCksIF9NX21hc2soX195KSB7 fQoKcHVibGljOgogIF9CaXRfcmVmZXJlbmNlKCkgOiBfTV9wKDApLCBfTV9tYXNrKDApIHt9CiAg b3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhKCpfTV9wICYgX01fbWFzayk7IH0KICBf Qml0X3JlZmVyZW5jZSYgb3BlcmF0b3I9KGJvb2wgX194KQogIHsKICAgIGlmIChfX3gpICpfTV9w IHw9IF9NX21hc2s7CiAgICBlbHNlICpfTV9wICY9IH5fTV9tYXNrOwogICAgcmV0dXJuICp0aGlz OwogIH0KICBfQml0X3JlZmVyZW5jZSYgb3BlcmF0b3I9KGNvbnN0IF9CaXRfcmVmZXJlbmNlJiBf X3gpCiAgICB7IHJldHVybiAqdGhpcyA9IGJvb2woX194KTsgfQogIGJvb2wgb3BlcmF0b3I9PShj b25zdCBfQml0X3JlZmVyZW5jZSYgX194KSBjb25zdAogICAgeyByZXR1cm4gYm9vbCgqdGhpcykg PT0gYm9vbChfX3gpOyB9CiAgYm9vbCBvcGVyYXRvcjwoY29uc3QgX0JpdF9yZWZlcmVuY2UmIF9f eCkgY29uc3QKICAgIHsgcmV0dXJuICFib29sKCp0aGlzKSAmJiBib29sKF9feCk7IH0KICB2b2lk IGZsaXAoKSB7ICpfTV9wIF49IF9NX21hc2s7IH0KfTsKCnN0cnVjdCBfQml0X2l0ZXJhdG9yX2Jh c2UgOiBwdWJsaWMgaXRlcmF0b3I8cmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsIGJvb2w+CnsK ICBfQml0X3R5cGUgKiBfTV9wOwogIHVuc2lnbmVkIGludCBfTV9vZmZzZXQ7CgogIF9CaXRfaXRl cmF0b3JfYmFzZShfQml0X3R5cGUgKiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9NX3Ao X194KSwgX01fb2Zmc2V0KF9feSkge30KCiAgdm9pZCBfTV9idW1wX3VwKCkgewogICAgaWYgKF9N X29mZnNldCsrID09IF9NX3dvcmRfYml0IC0gMSkgewogICAgICBfTV9vZmZzZXQgPSAwOwogICAg ICArK19NX3A7CiAgICB9CiAgfQogIHZvaWQgX01fYnVtcF9kb3duKCkgewogICAgaWYgKF9NX29m ZnNldC0tID09IDApIHsKICAgICAgX01fb2Zmc2V0ID0gX01fd29yZF9iaXQgLSAxOwogICAgICAt LV9NX3A7CiAgICB9CiAgfQoKICB2b2lkIF9NX2luY3IocHRyZGlmZl90IF9faSkgewogICAgZGlm ZmVyZW5jZV90eXBlIF9fbiA9IF9faSArIF9NX29mZnNldDsKICAgIF9NX3AgKz0gX19uIC8gX01f d29yZF9iaXQ7CiAgICBfX24gPSBfX24gJSBfTV93b3JkX2JpdDsKICAgIGlmIChfX24gPCAwKSB7 CiAgICAgIF9NX29mZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9fbiArIF9NX3dvcmRfYml0OwogICAg ICAtLV9NX3A7CiAgICB9IGVsc2UKICAgICAgX01fb2Zmc2V0ID0gKHVuc2lnbmVkIGludCkgX19u OwogIH0KCiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBj b25zdCB7CiAgICByZXR1cm4gX01fcCA9PSBfX2kuX01fcCAmJiBfTV9vZmZzZXQgPT0gX19pLl9N X29mZnNldDsKICB9CiAgYm9vbCBvcGVyYXRvcjwoY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBf X2kpIGNvbnN0IHsKICAgIHJldHVybiBfTV9wIDwgX19pLl9NX3AgfHwgKF9NX3AgPT0gX19pLl9N X3AgJiYgX01fb2Zmc2V0IDwgX19pLl9NX29mZnNldCk7CiAgfQogIGJvb2wgb3BlcmF0b3IhPShj b25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuICEoKnRoaXMg PT0gX19pKTsKICB9CiAgYm9vbCBvcGVyYXRvcj4oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBf X2kpIGNvbnN0IHsKICAgIHJldHVybiBfX2kgPCAqdGhpczsKICB9CiAgYm9vbCBvcGVyYXRvcjw9 KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4gIShfX2kg PCAqdGhpcyk7CiAgfQogIGJvb2wgb3BlcmF0b3I+PShjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2Um IF9faSkgY29uc3QgewogICAgcmV0dXJuICEoKnRoaXMgPCBfX2kpOwogIH0KfTsKCmlubGluZSBw dHJkaWZmX3QKb3BlcmF0b3ItKGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX194LCBjb25zdCBf Qml0X2l0ZXJhdG9yX2Jhc2UmIF9feSkgewogIHJldHVybiBfTV93b3JkX2JpdCAqIChfX3guX01f cCAtIF9feS5fTV9wKSArIF9feC5fTV9vZmZzZXQgLSBfX3kuX01fb2Zmc2V0Owp9CgoKc3RydWN0 IF9CaXRfaXRlcmF0b3IgOiBwdWJsaWMgX0JpdF9pdGVyYXRvcl9iYXNlCnsKICB0eXBlZGVmIF9C aXRfcmVmZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlKiBwb2ludGVy OwogIHR5cGVkZWYgX0JpdF9pdGVyYXRvciBpdGVyYXRvcjsKCiAgX0JpdF9pdGVyYXRvcigpIDog X0JpdF9pdGVyYXRvcl9iYXNlKDAsIDApIHt9CiAgX0JpdF9pdGVyYXRvcihfQml0X3R5cGUgKiBf X3gsIHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9CaXRfaXRlcmF0b3JfYmFzZShfX3gsIF9feSkg e30KCiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIHJlZmVyZW5jZShfTV9w LCAxVUwgPDwgX01fb2Zmc2V0KTsgfQogIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkgewogICAgX01f YnVtcF91cCgpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpdGVyYXRvciBvcGVyYXRvcisrKGlu dCkgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIF9NX2J1bXBfdXAoKTsKICAgIHJl dHVybiBfX3RtcDsKICB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yLS0oKSB7CiAgICBfTV9idW1wX2Rv d24oKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpIHsK ICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICBfTV9idW1wX2Rvd24oKTsKICAgIHJldHVy biBfX3RtcDsKICB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9faSkg ewogICAgX01faW5jcihfX2kpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpdGVyYXRvciYgb3Bl cmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICAqdGhpcyArPSAtX19pOwogICAgcmV0 dXJuICp0aGlzOwogIH0KICBpdGVyYXRvciBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9faSkg Y29uc3QgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIHJldHVybiBfX3RtcCArPSBf X2k7CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7 CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wIC09IF9faTsKICB9 CgogIHJlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsgcmV0dXJuICoo KnRoaXMgKyBfX2kpOyB9Cn07CgppbmxpbmUgX0JpdF9pdGVyYXRvcgpvcGVyYXRvcisocHRyZGlm Zl90IF9fbiwgY29uc3QgX0JpdF9pdGVyYXRvciYgX194KSB7IHJldHVybiBfX3ggKyBfX247IH0K CgpzdHJ1Y3QgX0JpdF9jb25zdF9pdGVyYXRvciA6IHB1YmxpYyBfQml0X2l0ZXJhdG9yX2Jhc2UK ewogIHR5cGVkZWYgYm9vbCByZWZlcmVuY2U7CiAgdHlwZWRlZiBib29sIGNvbnN0X3JlZmVyZW5j ZTsKICB0eXBlZGVmIGNvbnN0IGJvb2wqIHBvaW50ZXI7CiAgdHlwZWRlZiBfQml0X2NvbnN0X2l0 ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwoKICBfQml0X2NvbnN0X2l0ZXJhdG9yKCkgOiBfQml0X2l0 ZXJhdG9yX2Jhc2UoMCwgMCkge30KICBfQml0X2NvbnN0X2l0ZXJhdG9yKF9CaXRfdHlwZSAqIF9f eCwgdW5zaWduZWQgaW50IF9feSkKICAgIDogX0JpdF9pdGVyYXRvcl9iYXNlKF9feCwgX195KSB7 fQogIF9CaXRfY29uc3RfaXRlcmF0b3IoY29uc3QgX0JpdF9pdGVyYXRvciYgX194KQogICAgOiBf Qml0X2l0ZXJhdG9yX2Jhc2UoX194Ll9NX3AsIF9feC5fTV9vZmZzZXQpIHt9CgogIGNvbnN0X3Jl ZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7CiAgICByZXR1cm4gX0JpdF9yZWZlcmVuY2UoX01f cCwgMVVMIDw8IF9NX29mZnNldCk7CiAgfQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvcisrKCkg ewogICAgX01fYnVtcF91cCgpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRv ciBvcGVyYXRvcisrKGludCkgewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAg IF9NX2J1bXBfdXAoKTsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9w ZXJhdG9yLS0oKSB7CiAgICBfTV9idW1wX2Rvd24oKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAg Y29uc3RfaXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpIHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1w ID0gKnRoaXM7CiAgICBfTV9idW1wX2Rvd24oKTsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgY29u c3RfaXRlcmF0b3ImIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAgX01faW5j cihfX2kpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0b3It PShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICAqdGhpcyArPSAtX19pOwogICAgcmV0dXJuICp0 aGlzOwogIH0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9faSkg Y29uc3QgewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIHJldHVybiBfX3Rt cCArPSBfX2k7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUg X19pKSBjb25zdCB7CiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJu IF9fdG1wIC09IF9faTsKICB9CiAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5j ZV90eXBlIF9faSkgewogICAgcmV0dXJuICooKnRoaXMgKyBfX2kpOwogIH0KfTsKCmlubGluZSBf Qml0X2NvbnN0X2l0ZXJhdG9yCm9wZXJhdG9yKyhwdHJkaWZmX3QgX19uLCBjb25zdCBfQml0X2Nv bnN0X2l0ZXJhdG9yJiBfX3gpIHsgcmV0dXJuIF9feCArIF9fbjsgfQoKCgoKCgp0ZW1wbGF0ZSA8 Y2xhc3MgX0FsbG9jYXRvciwgYm9vbCBfX2lzX3N0YXRpYz4KY2xhc3MgX0J2ZWN0b3JfYWxsb2Nf YmFzZSB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8Ym9vbCwgX0Fs bG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxv Y2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0 b3I7IH0KCiAgX0J2ZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQog ICAgOiBfTV9kYXRhX2FsbG9jYXRvcihfX2EpLCBfTV9zdGFydCgpLCBfTV9maW5pc2goKSwgX01f ZW5kX29mX3N0b3JhZ2UoMCkge30KCnByb3RlY3RlZDoKICBfQml0X3R5cGUgKiBfTV9iaXRfYWxs b2Moc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yLmFsbG9jYXRlKChf X24gKyBfTV93b3JkX2JpdCAtIDEpL19NX3dvcmRfYml0KTsgfQogIHZvaWQgX01fZGVhbGxvY2F0 ZSgpIHsKICAgIGlmIChfTV9zdGFydC5fTV9wKQogICAgICBfTV9kYXRhX2FsbG9jYXRvci5kZWFs bG9jYXRlKF9NX3N0YXJ0Ll9NX3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydC5fTV9wKTsKICB9CgogIHR5cGVuYW1lIF9BbGxv Y190cmFpdHM8X0JpdF90eXBlLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAg IF9NX2RhdGFfYWxsb2NhdG9yOwogIF9CaXRfaXRlcmF0b3IgX01fc3RhcnQ7CiAgX0JpdF9pdGVy YXRvciBfTV9maW5pc2g7CiAgX0JpdF90eXBlICogX01fZW5kX29mX3N0b3JhZ2U7Cn07CgoKdGVt cGxhdGUgPGNsYXNzIF9BbGxvY2F0b3I+CmNsYXNzIF9CdmVjdG9yX2FsbG9jX2Jhc2U8X0FsbG9j YXRvciwgdHJ1ZT4gewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPGJv b2wsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7 CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRv cl90eXBlKCk7IH0KCiAgX0J2ZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYp CiAgICA6IF9NX3N0YXJ0KCksIF9NX2ZpbmlzaCgpLCBfTV9lbmRfb2Zfc3RvcmFnZSgwKSB7fQoK cHJvdGVjdGVkOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfQml0X3R5cGUsIF9B bGxvY2F0b3I+OjpfQWxsb2NfdHlwZQogICAgICAgICAgX0FsbG9jX3R5cGU7CgogIF9CaXRfdHlw ZSAqIF9NX2JpdF9hbGxvYyhzaXplX3QgX19uKQogICAgeyByZXR1cm4gX0FsbG9jX3R5cGU6OmFs bG9jYXRlKChfX24gKyBfTV93b3JkX2JpdCAtIDEpL19NX3dvcmRfYml0KTsgfQogIHZvaWQgX01f ZGVhbGxvY2F0ZSgpIHsKICAgIGlmIChfTV9zdGFydC5fTV9wKQogICAgICBfQWxsb2NfdHlwZTo6 ZGVhbGxvY2F0ZShfTV9zdGFydC5fTV9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf TV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0Ll9NX3ApOwogIH0KCiAgX0JpdF9pdGVyYXRvciBf TV9zdGFydDsKICBfQml0X2l0ZXJhdG9yIF9NX2ZpbmlzaDsKICBfQml0X3R5cGUgKiBfTV9lbmRf b2Zfc3RvcmFnZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmNsYXNzIF9CdmVjdG9yX2Jh c2UKICA6IHB1YmxpYyBfQnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxvYywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jPjo6X1NfaW5zdGFuY2Vs ZXNzPgp7CiAgdHlwZWRlZiBfQnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxvYywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2M+OjpfU19pbnN0YW5j ZWxlc3M+CiAgICAgICAgICBfQmFzZTsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6 OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICBfQnZlY3Rvcl9iYXNlKGNvbnN0IGFs bG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7fQogIH5fQnZlY3Rvcl9iYXNlKCkgeyBf QmFzZTo6X01fZGVhbGxvY2F0ZSgpOyB9Cn07Cgp9CgoKCm5hbWVzcGFjZSBzdGQKewoKdGVtcGxh dGUgPHR5cGVuYW1lIF9BbGxvYz4KICBjbGFzcyB2ZWN0b3I8Ym9vbCwgX0FsbG9jPiA6IHB1Ymxp YyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4KICB7CiAgcHVibGljOgogICAgdHlwZWRlZiBib29sIHZh bHVlX3R5cGU7CiAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgICB0eXBlZGVmIHB0cmRp ZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlIHJlZmVyZW5j ZTsKICAgIHR5cGVkZWYgYm9vbCBjb25zdF9yZWZlcmVuY2U7CiAgICB0eXBlZGVmIF9CaXRfcmVm ZXJlbmNlKiBwb2ludGVyOwogICAgdHlwZWRlZiBjb25zdCBib29sKiBjb25zdF9wb2ludGVyOwoK ICAgIHR5cGVkZWYgX0JpdF9pdGVyYXRvciBpdGVyYXRvcjsKICAgIHR5cGVkZWYgX0JpdF9jb25z dF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKCiAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVy YXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICAgIHR5cGVkZWYg c3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwoKICAgIHR5 cGVkZWYgdHlwZW5hbWUgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjphbGxvY2F0b3JfdHlwZSBhbGxv Y2F0b3JfdHlwZTsKICAgIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7CiAg ICAgIHJldHVybiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46OmdldF9hbGxvY2F0b3IoKTsKICAgIH0K CiAgcHJvdGVjdGVkOgogICAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9iaXRfYWxs b2M7CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX2RlYWxsb2NhdGU7CiAgICB1 c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX3N0YXJ0OwogICAgdXNpbmcgX0J2ZWN0b3Jf YmFzZTxfQWxsb2M+OjpfTV9maW5pc2g7CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46 Ol9NX2VuZF9vZl9zdG9yYWdlOwoKICBwcm90ZWN0ZWQ6CiAgICB2b2lkIF9NX2luaXRpYWxpemUo c2l6ZV90eXBlIF9fbikgewogICAgICBfQml0X3R5cGUgKiBfX3EgPSBfTV9iaXRfYWxsb2MoX19u KTsKICAgICAgdGhpcy0+X01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19uICsgX01fd29yZF9i aXQgLSAxKS9fTV93b3JkX2JpdDsKICAgICAgdGhpcy0+X01fc3RhcnQgPSBpdGVyYXRvcihfX3Es IDApOwogICAgICB0aGlzLT5fTV9maW5pc2ggPSB0aGlzLT5fTV9zdGFydCArIGRpZmZlcmVuY2Vf dHlwZShfX24pOwogICAgfQogICAgdm9pZCBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRp b24sIGJvb2wgX194KSB7CiAgICAgIGlmICh0aGlzLT5fTV9maW5pc2guX01fcCAhPSB0aGlzLT5f TV9lbmRfb2Zfc3RvcmFnZSkgewogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgdGhp cy0+X01fZmluaXNoLCB0aGlzLT5fTV9maW5pc2ggKyAxKTsKICAgICAgICAqX19wb3NpdGlvbiA9 IF9feDsKICAgICAgICArK3RoaXMtPl9NX2ZpbmlzaDsKICAgICAgfQogICAgICBlbHNlIHsKICAg ICAgICBzaXplX3R5cGUgX19sZW4gPSBzaXplKCkKICAgICAgICAgICAgICAgICAgICAgICAgICA/ IDIgKiBzaXplKCkgOiBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9NX3dvcmRfYml0KTsKICAgICAg ICBfQml0X3R5cGUgKiBfX3EgPSBfTV9iaXRfYWxsb2MoX19sZW4pOwogICAgICAgIGl0ZXJhdG9y IF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAg ICAgKl9faSsrID0gX194OwogICAgICAgIHRoaXMtPl9NX2ZpbmlzaCA9IGNvcHkoX19wb3NpdGlv biwgZW5kKCksIF9faSk7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIHRoaXMtPl9N X2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbGVuICsgX01fd29yZF9iaXQgLSAxKS9fTV93b3Jk X2JpdDsKICAgICAgICB0aGlzLT5fTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAgIH0K ICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2lu aXRpYWxpemVfcmFuZ2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewog ICAgICB0aGlzLT5fTV9zdGFydCA9IGl0ZXJhdG9yKCk7CiAgICAgIHRoaXMtPl9NX2ZpbmlzaCA9 IGl0ZXJhdG9yKCk7CiAgICAgIHRoaXMtPl9NX2VuZF9vZl9zdG9yYWdlID0gMDsKICAgICAgZm9y ICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIHB1c2hfYmFjaygqX19m aXJzdCk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICB2 b2lkIF9NX2luaXRpYWxpemVfcmFuZ2UoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2Fy ZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0 ZXJhdG9yX3RhZykgewogICAgICBzaXplX3R5cGUgX19uID0gc3RkOjpkaXN0YW5jZShfX2ZpcnN0 LCBfX2xhc3QpOwogICAgICBfTV9pbml0aWFsaXplKF9fbik7CiAgICAgIGNvcHkoX19maXJzdCwg X19sYXN0LCB0aGlzLT5fTV9zdGFydCk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1 dEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbnNlcnRfcmFuZ2UoaXRlcmF0b3IgX19wb3MsCiAgICAg ICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRv ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsK ICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KSB7CiAgICAgICAgX19w b3MgPSBpbnNlcnQoX19wb3MsICpfX2ZpcnN0KTsKICAgICAgICArK19fcG9zOwogICAgICB9CiAg ICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICB2b2lkIF9NX2lu c2VydF9yYW5nZShpdGVyYXRvciBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAg X0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgICAgIGlmIChfX2Zp cnN0ICE9IF9fbGFzdCkgewogICAgICAgIHNpemVfdHlwZSBfX24gPSBzdGQ6OmRpc3RhbmNlKF9f Zmlyc3QsIF9fbGFzdCk7CiAgICAgICAgaWYgKGNhcGFjaXR5KCkgLSBzaXplKCkgPj0gX19uKSB7 CiAgICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIGVuZCgpLAogICAgICAgICAgICAg ICAgICAgICAgICB0aGlzLT5fTV9maW5pc2ggKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgICAg ICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3NpdGlvbik7CiAgICAgICAgICB0aGlzLT5f TV9maW5pc2ggKz0gZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgICAgICAgfQogICAgICAgIGVsc2Ug ewogICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgpICsgc3RkOjptYXgoc2l6ZSgpLCBf X24pOwogICAgICAgICAgX0JpdF90eXBlICogX19xID0gX01fYml0X2FsbG9jKF9fbGVuKTsKICAg ICAgICAgIGl0ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3Io X19xLCAwKSk7CiAgICAgICAgICBfX2kgPSBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19pKTsKICAg ICAgICAgIHRoaXMtPl9NX2ZpbmlzaCA9IGNvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9faSk7CiAg ICAgICAgICBfTV9kZWFsbG9jYXRlKCk7CiAgICAgICAgICB0aGlzLT5fTV9lbmRfb2Zfc3RvcmFn ZQogICAgICAgICAgICA9IF9fcSArIChfX2xlbiArIF9NX3dvcmRfYml0IC0gMSkvX01fd29yZF9i aXQ7CiAgICAgICAgICB0aGlzLT5fTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAgICAg fQogICAgICB9CiAgICB9CgogIHB1YmxpYzoKICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4g dGhpcy0+X01fc3RhcnQ7IH0KICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1 cm4gdGhpcy0+X01fc3RhcnQ7IH0KICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIHRoaXMtPl9N X2ZpbmlzaDsgfQogICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+ X01fZmluaXNoOyB9CgogICAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiByZXZl cnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQogICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4o KSBjb25zdCB7CiAgICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsKICAg IH0KICAgIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3Io YmVnaW4oKSk7IH0KICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsKICAg ICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7CiAgICB9CgogICAgc2l6 ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoZW5kKCkgLSBiZWdpbigpKTsg fQogICAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKC0xKTsg fQogICAgc2l6ZV90eXBlIGNhcGFjaXR5KCkgY29uc3QgewogICAgICByZXR1cm4gc2l6ZV90eXBl KGNvbnN0X2l0ZXJhdG9yKHRoaXMtPl9NX2VuZF9vZl9zdG9yYWdlLCAwKSAtIGJlZ2luKCkpOwog ICAgfQogICAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGJlZ2luKCkgPT0gZW5kKCk7IH0K CiAgICByZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKQogICAgICB7IHJldHVybiAq KGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBv cGVyYXRvcltdKHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuICooYmVnaW4oKSAr IGRpZmZlcmVuY2VfdHlwZShfX24pKTsgfQoKICAgIHZvaWQgX01fcmFuZ2VfY2hlY2soc2l6ZV90 eXBlIF9fbikgY29uc3QgewogICAgICBpZiAoX19uID49IHRoaXMtPnNpemUoKSkKICAgICAgICBf X3Rocm93X291dF9vZl9yYW5nZSgidmVjdG9yPGJvb2w+Iik7CiAgICB9CgogICAgcmVmZXJlbmNl IGF0KHNpemVfdHlwZSBfX24pCiAgICAgIHsgX01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgq dGhpcylbX19uXTsgfQogICAgY29uc3RfcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0 CiAgICAgIHsgX01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQoKICAg IGV4cGxpY2l0IHZlY3Rvcihjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5 cGUoKSkKICAgICAgOiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oX19hKSB7fQoKICAgIHZlY3Rvcihz aXplX3R5cGUgX19uLCBib29sIF9fdmFsdWUsCiAgICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9y X3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICAgIDogX0J2ZWN0b3JfYmFzZTxfQWxs b2M+KF9fYSkKICAgIHsKICAgICAgX01faW5pdGlhbGl6ZShfX24pOwogICAgICBmaWxsKHRoaXMt Pl9NX3N0YXJ0Ll9NX3AsIHRoaXMtPl9NX2VuZF9vZl9zdG9yYWdlLCBfX3ZhbHVlID8gfjAgOiAw KTsKICAgIH0KCiAgICBleHBsaWNpdCB2ZWN0b3Ioc2l6ZV90eXBlIF9fbikKICAgICAgOiBfQnZl Y3Rvcl9iYXNlPF9BbGxvYz4oYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsKICAgICAgX01faW5pdGlh bGl6ZShfX24pOwogICAgICBmaWxsKHRoaXMtPl9NX3N0YXJ0Ll9NX3AsIHRoaXMtPl9NX2VuZF9v Zl9zdG9yYWdlLCAwKTsKICAgIH0KCiAgICB2ZWN0b3IoY29uc3QgdmVjdG9yJiBfX3gpIDogX0J2 ZWN0b3JfYmFzZTxfQWxsb2M+KF9feC5nZXRfYWxsb2NhdG9yKCkpIHsKICAgICAgX01faW5pdGlh bGl6ZShfX3guc2l6ZSgpKTsKICAgICAgY29weShfX3guYmVnaW4oKSwgX194LmVuZCgpLCB0aGlz LT5fTV9zdGFydCk7CiAgICB9CgoKCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgICB2 b2lkIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsIF9f dHJ1ZV90eXBlKSB7CiAgICAgIF9NX2luaXRpYWxpemUoX19uKTsKICAgICAgZmlsbCh0aGlzLT5f TV9zdGFydC5fTV9wLCB0aGlzLT5fTV9lbmRfb2Zfc3RvcmFnZSwgX194ID8gfjAgOiAwKTsKICAg IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2luaXRp YWxpemVfZGlzcGF0Y2goX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogICAg ICBfTV9pbml0aWFsaXplX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29y eShfX2ZpcnN0KSk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgog ICAgdmVjdG9yKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwK ICAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgp KQogICAgICA6IF9CdmVjdG9yX2Jhc2U8X0FsbG9jPihfX2EpCiAgICB7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFs OwogICAgICBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFs KCkpOwogICAgfQoKICAgIH52ZWN0b3IoKSB7IH0KCiAgICB2ZWN0b3ImIG9wZXJhdG9yPShjb25z dCB2ZWN0b3ImIF9feCkgewogICAgICBpZiAoJl9feCA9PSB0aGlzKSByZXR1cm4gKnRoaXM7CiAg ICAgIGlmIChfX3guc2l6ZSgpID4gY2FwYWNpdHkoKSkgewogICAgICAgIF9NX2RlYWxsb2NhdGUo KTsKICAgICAgICBfTV9pbml0aWFsaXplKF9feC5zaXplKCkpOwogICAgICB9CiAgICAgIGNvcHko X194LmJlZ2luKCksIF9feC5lbmQoKSwgYmVnaW4oKSk7CiAgICAgIHRoaXMtPl9NX2ZpbmlzaCA9 IGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUoX194LnNpemUoKSk7CiAgICAgIHJldHVybiAqdGhp czsKICAgIH0KCgoKCgoKICAgIHZvaWQgX01fZmlsbF9hc3NpZ24oc2l6ZV90IF9fbiwgYm9vbCBf X3gpIHsKICAgICAgaWYgKF9fbiA+IHNpemUoKSkgewogICAgICAgIGZpbGwodGhpcy0+X01fc3Rh cnQuX01fcCwgdGhpcy0+X01fZW5kX29mX3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7CiAgICAgICAg aW5zZXJ0KGVuZCgpLCBfX24gLSBzaXplKCksIF9feCk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAg ICAgICAgZXJhc2UoYmVnaW4oKSArIF9fbiwgZW5kKCkpOwogICAgICAgIGZpbGwodGhpcy0+X01f c3RhcnQuX01fcCwgdGhpcy0+X01fZW5kX29mX3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7CiAgICAg IH0KICAgIH0KCiAgICB2b2lkIGFzc2lnbihzaXplX3QgX19uLCBib29sIF9feCkgeyBfTV9maWxs X2Fzc2lnbihfX24sIF9feCk7IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+ CiAgICB2b2lkIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf X2xhc3QpIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRv cj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0 LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVn ZXI+CiAgICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9f dmFsLCBfX3RydWVfdHlwZSkKICAgICAgeyBfTV9maWxsX2Fzc2lnbigoc2l6ZV90KSBfX24sIChi b29sKSBfX3ZhbCk7IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4KICAgIHZvaWQg X01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs IF9fZmFsc2VfdHlwZSkKICAgICAgeyBfTV9hc3NpZ25fYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19p dGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0 SXRlcmF0b3I+CiAgICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJzdCwg X0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJh dG9yX3RhZykgewogICAgICBpdGVyYXRvciBfX2N1ciA9IGJlZ2luKCk7CiAgICAgIGZvciAoIDsg X19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7ICsrX19jdXIsICsrX19maXJzdCkK ICAgICAgICAqX19jdXIgPSAqX19maXJzdDsKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQog ICAgICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7CiAgICAgIGVsc2UKICAgICAgICBpbnNlcnQoZW5k KCksIF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk SXRlcmF0b3I+CiAgICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0 LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJk X2l0ZXJhdG9yX3RhZykgewogICAgICBzaXplX3R5cGUgX19sZW4gPSBzdGQ6OmRpc3RhbmNlKF9f Zmlyc3QsIF9fbGFzdCk7CiAgICAgIGlmIChfX2xlbiA8IHNpemUoKSkKICAgICAgICBlcmFzZShj b3B5KF9fZmlyc3QsIF9fbGFzdCwgYmVnaW4oKSksIGVuZCgpKTsKICAgICAgZWxzZSB7CiAgICAg ICAgX0ZvcndhcmRJdGVyYXRvciBfX21pZCA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21p ZCwgc2l6ZSgpKTsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBiZWdpbigpKTsKICAgICAg ICBpbnNlcnQoZW5kKCksIF9fbWlkLCBfX2xhc3QpOwogICAgICB9CiAgICB9CgogICAgdm9pZCBy ZXNlcnZlKHNpemVfdHlwZSBfX24pIHsKICAgICAgaWYgKF9fbiA+IHRoaXMtPm1heF9zaXplKCkp CiAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoInZlY3Rvcjo6cmVzZXJ2ZSIpOwogICAgICBp ZiAodGhpcy0+Y2FwYWNpdHkoKSA8IF9fbikgewogICAgICAgIF9CaXRfdHlwZSAqIF9fcSA9IF9N X2JpdF9hbGxvYyhfX24pOwogICAgICAgIHRoaXMtPl9NX2ZpbmlzaCA9IGNvcHkoYmVnaW4oKSwg ZW5kKCksIGl0ZXJhdG9yKF9fcSwgMCkpOwogICAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAg ICB0aGlzLT5fTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAgICAgdGhpcy0+X01fZW5k X29mX3N0b3JhZ2UgPSBfX3EgKyAoX19uICsgX01fd29yZF9iaXQgLSAxKS9fTV93b3JkX2JpdDsK ICAgICAgfQogICAgfQoKICAgIHJlZmVyZW5jZSBmcm9udCgpIHsgcmV0dXJuICpiZWdpbigpOyB9 CiAgICBjb25zdF9yZWZlcmVuY2UgZnJvbnQoKSBjb25zdCB7IHJldHVybiAqYmVnaW4oKTsgfQog ICAgcmVmZXJlbmNlIGJhY2soKSB7IHJldHVybiAqKGVuZCgpIC0gMSk7IH0KICAgIGNvbnN0X3Jl ZmVyZW5jZSBiYWNrKCkgY29uc3QgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CiAgICB2b2lkIHB1 c2hfYmFjayhib29sIF9feCkgewogICAgICBpZiAodGhpcy0+X01fZmluaXNoLl9NX3AgIT0gdGhp cy0+X01fZW5kX29mX3N0b3JhZ2UpCiAgICAgICAgKnRoaXMtPl9NX2ZpbmlzaCsrID0gX194Owog ICAgICBlbHNlCiAgICAgICAgX01faW5zZXJ0X2F1eChlbmQoKSwgX194KTsKICAgIH0KICAgIHZv aWQgc3dhcCh2ZWN0b3I8Ym9vbCwgX0FsbG9jPiYgX194KSB7CiAgICAgIHN0ZDo6c3dhcCh0aGlz LT5fTV9zdGFydCwgX194Ll9NX3N0YXJ0KTsKICAgICAgc3RkOjpzd2FwKHRoaXMtPl9NX2Zpbmlz aCwgX194Ll9NX2ZpbmlzaCk7CiAgICAgIHN0ZDo6c3dhcCh0aGlzLT5fTV9lbmRfb2Zfc3RvcmFn ZSwgX194Ll9NX2VuZF9vZl9zdG9yYWdlKTsKICAgIH0KCgogICAgc3RhdGljIHZvaWQgc3dhcChy ZWZlcmVuY2UgX194LCByZWZlcmVuY2UgX195KSB7CiAgICAgIGJvb2wgX190bXAgPSBfX3g7CiAg ICAgIF9feCA9IF9feTsKICAgICAgX195ID0gX190bXA7CiAgICB9CgogICAgaXRlcmF0b3IgaW5z ZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGJvb2wgX194ID0gYm9vbCgpKSB7CiAgICAgIGRpZmZl cmVuY2VfdHlwZSBfX24gPSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsKICAgICAgaWYgKHRoaXMtPl9N X2ZpbmlzaC5fTV9wICE9IHRoaXMtPl9NX2VuZF9vZl9zdG9yYWdlCiAgICAgICAgICAmJiBfX3Bv c2l0aW9uID09IGVuZCgpKQogICAgICAgICp0aGlzLT5fTV9maW5pc2grKyA9IF9feDsKICAgICAg ZWxzZQogICAgICAgIF9NX2luc2VydF9hdXgoX19wb3NpdGlvbiwgX194KTsKICAgICAgcmV0dXJu IGJlZ2luKCkgKyBfX247CiAgICB9CgoKCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAg ICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywgX0ludGVnZXIgX19uLCBf SW50ZWdlciBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkgewog ICAgICBfTV9maWxsX2luc2VydChfX3BvcywgX19uLCBfX3gpOwogICAgfQoKICAgIHRlbXBsYXRl IDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJh dG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19m aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg X19mYWxzZV90eXBlKSB7CiAgICAgIF9NX2luc2VydF9yYW5nZShfX3BvcywgX19maXJzdCwgX19s YXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8 Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9u LAogICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3Ig X19sYXN0KSB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0 b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICBfTV9pbnNlcnRfZGlzcGF0Y2goX19wb3Np dGlvbiwgX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgICB9CgogICAgdm9pZCBfTV9m aWxsX2luc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCBib29sIF9feCkg ewogICAgICBpZiAoX19uID09IDApIHJldHVybjsKICAgICAgaWYgKGNhcGFjaXR5KCkgLSBzaXpl KCkgPj0gX19uKSB7CiAgICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBlbmQoKSwKICAg ICAgICAgICAgICAgICAgICAgIHRoaXMtPl9NX2ZpbmlzaCArIGRpZmZlcmVuY2VfdHlwZShfX24p KTsKICAgICAgICBmaWxsKF9fcG9zaXRpb24sIF9fcG9zaXRpb24gKyBkaWZmZXJlbmNlX3R5cGUo X19uKSwgX194KTsKICAgICAgICB0aGlzLT5fTV9maW5pc2ggKz0gZGlmZmVyZW5jZV90eXBlKF9f bik7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgp ICsgc3RkOjptYXgoc2l6ZSgpLCBfX24pOwogICAgICAgIF9CaXRfdHlwZSAqIF9fcSA9IF9NX2Jp dF9hbGxvYyhfX2xlbik7CiAgICAgICAgaXRlcmF0b3IgX19pID0gY29weShiZWdpbigpLCBfX3Bv c2l0aW9uLCBpdGVyYXRvcihfX3EsIDApKTsKICAgICAgICBmaWxsX24oX19pLCBfX24sIF9feCk7 CiAgICAgICAgdGhpcy0+X01fZmluaXNoID0gY29weShfX3Bvc2l0aW9uLCBlbmQoKSwgX19pICsg ZGlmZmVyZW5jZV90eXBlKF9fbikpOwogICAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAgICB0 aGlzLT5fTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9NX3dvcmRfYml0IC0gMSkv X01fd29yZF9iaXQ7CiAgICAgICAgdGhpcy0+X01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOwog ICAgICB9CiAgICB9CgogICAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90 eXBlIF9fbiwgYm9vbCBfX3gpIHsKICAgICAgX01fZmlsbF9pbnNlcnQoX19wb3NpdGlvbiwgX19u LCBfX3gpOwogICAgfQoKICAgIHZvaWQgcG9wX2JhY2soKSB7IC0tdGhpcy0+X01fZmluaXNoOyB9 CiAgICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7CiAgICAgIGlmIChfX3Bv c2l0aW9uICsgMSAhPSBlbmQoKSkKICAgICAgICBjb3B5KF9fcG9zaXRpb24gKyAxLCBlbmQoKSwg X19wb3NpdGlvbik7CiAgICAgICAgLS10aGlzLT5fTV9maW5pc2g7CiAgICAgIHJldHVybiBfX3Bv c2l0aW9uOwogICAgfQogICAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0 b3IgX19sYXN0KSB7CiAgICAgIHRoaXMtPl9NX2ZpbmlzaCA9IGNvcHkoX19sYXN0LCBlbmQoKSwg X19maXJzdCk7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQogICAgdm9pZCByZXNpemUoc2l6 ZV90eXBlIF9fbmV3X3NpemUsIGJvb2wgX194ID0gYm9vbCgpKSB7CiAgICAgIGlmIChfX25ld19z aXplIDwgc2l6ZSgpKQogICAgICAgIGVyYXNlKGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUoX19u ZXdfc2l6ZSksIGVuZCgpKTsKICAgICAgZWxzZQogICAgICAgIGluc2VydChlbmQoKSwgX19uZXdf c2l6ZSAtIHNpemUoKSwgX194KTsKICAgIH0KICAgIHZvaWQgZmxpcCgpIHsKICAgICAgZm9yIChf Qml0X3R5cGUgKiBfX3AgPSB0aGlzLT5fTV9zdGFydC5fTV9wOwogICAgICAgICAgIF9fcCAhPSB0 aGlzLT5fTV9lbmRfb2Zfc3RvcmFnZTsKICAgICAgICAgICArK19fcCkKICAgICAgICAqX19wID0g fipfX3A7CiAgICB9CgogICAgdm9pZCBjbGVhcigpIHsgZXJhc2UoYmVnaW4oKSwgZW5kKCkpOyB9 CiAgfTsKCgp0eXBlZGVmIHZlY3Rvcjxib29sLCBfX2FsbG9jPiBiaXRfdmVjdG9yOwoKfQojIDcz ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvdmVjdG9yIiAy IDMKCgojIDEgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1ZGUvYysrLzMuNC9i aXRzL3ZlY3Rvci50Y2MiIDEgMwojIDY0ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9p bmNsdWRlL2MrKy8zLjQvYml0cy92ZWN0b3IudGNjIiAzCm5hbWVzcGFjZSBzdGQKewogIHRlbXBs YXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgdmVjdG9yPF9U cCxfQWxsb2M+OjoKICAgIHJlc2VydmUoc2l6ZV90eXBlIF9fbikKICAgIHsKICAgICAgaWYgKF9f biA+IHRoaXMtPm1heF9zaXplKCkpCiAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoInZlY3Rv cjo6cmVzZXJ2ZSIpOwogICAgICBpZiAodGhpcy0+Y2FwYWNpdHkoKSA8IF9fbikKICAgICAgICB7 CiAgICAgICAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAgICAgICAg IHBvaW50ZXIgX190bXAgPSBfTV9hbGxvY2F0ZV9hbmRfY29weShfX24sCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+X01fc3RhcnQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+X01fZmluaXNoKTsK ICAgICAgICAgIF9EZXN0cm95KHRoaXMtPl9NX3N0YXJ0LCB0aGlzLT5fTV9maW5pc2gpOwogICAg ICAgICAgX01fZGVhbGxvY2F0ZSh0aGlzLT5fTV9zdGFydCwKICAgICAgICAgICAgICAgICAgICAg ICAgdGhpcy0+X01fZW5kX29mX3N0b3JhZ2UgLSB0aGlzLT5fTV9zdGFydCk7CiAgICAgICAgICB0 aGlzLT5fTV9zdGFydCA9IF9fdG1wOwogICAgICAgICAgdGhpcy0+X01fZmluaXNoID0gX190bXAg KyBfX29sZF9zaXplOwogICAgICAgICAgdGhpcy0+X01fZW5kX29mX3N0b3JhZ2UgPSB0aGlzLT5f TV9zdGFydCArIF9fbjsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwg dHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgdmVjdG9yPF9UcCxfQWxsb2M+OjppdGVyYXRv cgogICAgdmVjdG9yPF9UcCxfQWxsb2M+OjoKICAgIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9u LCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX24gPSBfX3Bv c2l0aW9uIC0gYmVnaW4oKTsKICAgICAgaWYgKHRoaXMtPl9NX2ZpbmlzaCAhPSB0aGlzLT5fTV9l bmRfb2Zfc3RvcmFnZSAmJiBfX3Bvc2l0aW9uID09IGVuZCgpKQogICAgICB7CiAgICAgICAgX0Nv bnN0cnVjdCh0aGlzLT5fTV9maW5pc2gsIF9feCk7CiAgICAgICAgKyt0aGlzLT5fTV9maW5pc2g7 CiAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9NX2luc2VydF9hdXgoX19wb3NpdGlvbiwgX194 KTsKICAgICAgcmV0dXJuIGJlZ2luKCkgKyBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgdmVjdG9yPF9UcCxfQWxsb2M+Ojpp dGVyYXRvcgogICAgdmVjdG9yPF9UcCxfQWxsb2M+OjoKICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9z aXRpb24pCiAgICB7CiAgICAgIGlmIChfX3Bvc2l0aW9uICsgMSAhPSBlbmQoKSkKICAgICAgICBj b3B5KF9fcG9zaXRpb24gKyAxLCBlbmQoKSwgX19wb3NpdGlvbik7CiAgICAgIC0tdGhpcy0+X01f ZmluaXNoOwogICAgICBfRGVzdHJveSh0aGlzLT5fTV9maW5pc2gpOwogICAgICByZXR1cm4gX19w b3NpdGlvbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICB0eXBlbmFtZSB2ZWN0b3I8X1RwLF9BbGxvYz46Oml0ZXJhdG9yCiAgICB2ZWN0b3I8X1Rw LF9BbGxvYz46OgogICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQog ICAgewogICAgICBpdGVyYXRvciBfX2koY29weShfX2xhc3QsIGVuZCgpLCBfX2ZpcnN0KSk7CiAg ICAgIF9EZXN0cm95KF9faSwgZW5kKCkpOwogICAgICB0aGlzLT5fTV9maW5pc2ggPSB0aGlzLT5f TV9maW5pc2ggLSAoX19sYXN0IC0gX19maXJzdCk7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZlY3Rvcjxf VHAsX0FsbG9jPiYKICAgIHZlY3RvcjxfVHAsX0FsbG9jPjo6CiAgICBvcGVyYXRvcj0oY29uc3Qg dmVjdG9yPF9UcCxfQWxsb2M+JiBfX3gpCiAgICB7CiAgICAgIGlmICgmX194ICE9IHRoaXMpCiAg ICAgIHsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX194bGVuID0gX194LnNpemUoKTsKICAgICAg ICBpZiAoX194bGVuID4gY2FwYWNpdHkoKSkKICAgICAgICB7CiAgICAgICAgICBwb2ludGVyIF9f dG1wID0gX01fYWxsb2NhdGVfYW5kX2NvcHkoX194bGVuLCBfX3guYmVnaW4oKSwgX194LmVuZCgp KTsKICAgICAgICAgIF9EZXN0cm95KHRoaXMtPl9NX3N0YXJ0LCB0aGlzLT5fTV9maW5pc2gpOwog ICAgICAgICAgX01fZGVhbGxvY2F0ZSh0aGlzLT5fTV9zdGFydCwKICAgICAgICAgICAgICAgICAg ICAgICAgdGhpcy0+X01fZW5kX29mX3N0b3JhZ2UgLSB0aGlzLT5fTV9zdGFydCk7CiAgICAgICAg ICB0aGlzLT5fTV9zdGFydCA9IF9fdG1wOwogICAgICAgICAgdGhpcy0+X01fZW5kX29mX3N0b3Jh Z2UgPSB0aGlzLT5fTV9zdGFydCArIF9feGxlbjsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAo c2l6ZSgpID49IF9feGxlbikKICAgICAgICB7CiAgICAgICAgICBpdGVyYXRvciBfX2koY29weShf X3guYmVnaW4oKSwgX194LmVuZCgpLCBiZWdpbigpKSk7CiAgICAgICAgICBfRGVzdHJveShfX2ks IGVuZCgpKTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIGNvcHko X194LmJlZ2luKCksIF9feC5iZWdpbigpICsgc2l6ZSgpLCB0aGlzLT5fTV9zdGFydCk7CiAgICAg ICAgICB1bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCkgKyBzaXplKCksIF9feC5lbmQoKSwg dGhpcy0+X01fZmluaXNoKTsKICAgICAgICB9CiAgICAgICAgdGhpcy0+X01fZmluaXNoID0gdGhp cy0+X01fc3RhcnQgKyBfX3hsZW47CiAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIHZl Y3RvcjxfVHAsX0FsbG9jPjo6CiAgICBfTV9maWxsX2Fzc2lnbihzaXplX3QgX19uLCBjb25zdCB2 YWx1ZV90eXBlJiBfX3ZhbCkKICAgIHsKICAgICAgaWYgKF9fbiA+IGNhcGFjaXR5KCkpCiAgICAg IHsKICAgICAgICB2ZWN0b3IgX190bXAoX19uLCBfX3ZhbCwgZ2V0X2FsbG9jYXRvcigpKTsKICAg ICAgICBfX3RtcC5zd2FwKCp0aGlzKTsKICAgICAgfQogICAgICBlbHNlIGlmIChfX24gPiBzaXpl KCkpCiAgICAgIHsKICAgICAgICBmaWxsKGJlZ2luKCksIGVuZCgpLCBfX3ZhbCk7CiAgICAgICAg dGhpcy0+X01fZmluaXNoCiAgICAgICAgICA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKHRoaXMtPl9N X2ZpbmlzaCwgX19uIC0gc2l6ZSgpLCBfX3ZhbCk7CiAgICAgIH0KICAgICAgZWxzZQogICAgICAg IGVyYXNlKGZpbGxfbihiZWdpbigpLCBfX24sIF9fdmFsKSwgZW5kKCkpOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4gdGVtcGxhdGU8dHlwZW5hbWUgX0lu cHV0SXRlcj4KICAgIHZvaWQKICAgIHZlY3RvcjxfVHAsX0FsbG9jPjo6CiAgICBfTV9hc3NpZ25f YXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9y X3RhZykKICAgIHsKICAgICAgaXRlcmF0b3IgX19jdXIoYmVnaW4oKSk7CiAgICAgIGZvciAoIDsg X19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7ICsrX19jdXIsICsrX19maXJzdCkK ICAgICAgICAqX19jdXIgPSAqX19maXJzdDsKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQog ICAgICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7CiAgICAgIGVsc2UKICAgICAgICBpbnNlcnQoZW5k KCksIF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlw ZW5hbWUgX0FsbG9jPiB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICB2b2lkCiAg ICB2ZWN0b3I8X1RwLF9BbGxvYz46OgogICAgX01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXIgX19m aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVy YXRvcl90YWcpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHN0ZDo6ZGlzdGFuY2UoX19m aXJzdCwgX19sYXN0KTsKCiAgICAgIGlmIChfX2xlbiA+IGNhcGFjaXR5KCkpCiAgICAgIHsKICAg ICAgICBwb2ludGVyIF9fdG1wKF9NX2FsbG9jYXRlX2FuZF9jb3B5KF9fbGVuLCBfX2ZpcnN0LCBf X2xhc3QpKTsKICAgICAgICBfRGVzdHJveSh0aGlzLT5fTV9zdGFydCwgdGhpcy0+X01fZmluaXNo KTsKICAgICAgICBfTV9kZWFsbG9jYXRlKHRoaXMtPl9NX3N0YXJ0LAogICAgICAgICAgICAgICAg ICAgICAgdGhpcy0+X01fZW5kX29mX3N0b3JhZ2UgLSB0aGlzLT5fTV9zdGFydCk7CiAgICAgICAg dGhpcy0+X01fc3RhcnQgPSBfX3RtcDsKICAgICAgICB0aGlzLT5fTV9lbmRfb2Zfc3RvcmFnZSA9 IHRoaXMtPl9NX2ZpbmlzaCA9IHRoaXMtPl9NX3N0YXJ0ICsgX19sZW47CiAgICAgIH0KICAgICAg ZWxzZSBpZiAoc2l6ZSgpID49IF9fbGVuKQogICAgICB7CiAgICAgICAgaXRlcmF0b3IgX19uZXdf ZmluaXNoKGNvcHkoX19maXJzdCwgX19sYXN0LCB0aGlzLT5fTV9zdGFydCkpOwogICAgICAgIF9E ZXN0cm95KF9fbmV3X2ZpbmlzaCwgZW5kKCkpOwogICAgICAgIHRoaXMtPl9NX2ZpbmlzaCA9IF9f bmV3X2ZpbmlzaC5iYXNlKCk7CiAgICAgIH0KICAgICAgZWxzZQogICAgICB7CiAgICAgICAgX0Zv cndhcmRJdGVyIF9fbWlkID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkLCBzaXplKCkp OwogICAgICAgIGNvcHkoX19maXJzdCwgX19taWQsIHRoaXMtPl9NX3N0YXJ0KTsKICAgICAgICB0 aGlzLT5fTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19taWQsIF9fbGFzdCwgdGhpcy0+ X01fZmluaXNoKTsKICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVu YW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIHZlY3RvcjxfVHAsX0FsbG9jPjo6CiAgICBfTV9pbnNl cnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYgX194KQogICAgewogICAgICBp ZiAodGhpcy0+X01fZmluaXNoICE9IHRoaXMtPl9NX2VuZF9vZl9zdG9yYWdlKQogICAgICB7CiAg ICAgICAgX0NvbnN0cnVjdCh0aGlzLT5fTV9maW5pc2gsICoodGhpcy0+X01fZmluaXNoIC0gMSkp OwogICAgICAgICsrdGhpcy0+X01fZmluaXNoOwogICAgICAgIF9UcCBfX3hfY29weSA9IF9feDsK ICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICBp dGVyYXRvcih0aGlzLT5fTV9maW5pc2gtMiksCiAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRv cih0aGlzLT5fTV9maW5pc2gtMSkpOwogICAgICAgICpfX3Bvc2l0aW9uID0gX194X2NvcHk7CiAg ICAgIH0KICAgICAgZWxzZQogICAgICB7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3Np emUgPSBzaXplKCk7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19vbGRfc2l6ZSAh PSAwID8gMiAqIF9fb2xkX3NpemUgOiAxOwogICAgICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0KF9N X2FsbG9jYXRlKF9fbGVuKSk7CiAgICAgICAgaXRlcmF0b3IgX19uZXdfZmluaXNoKF9fbmV3X3N0 YXJ0KTsKICAgICAgICB0cnkKICAgICAgICAgIHsKICAgICAgICAgICAgX19uZXdfZmluaXNoID0g dW5pbml0aWFsaXplZF9jb3B5KGl0ZXJhdG9yKHRoaXMtPl9NX3N0YXJ0KSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcG9zaXRpb24sCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19zdGFydCk7CiAgICAgICAg ICAgIF9Db25zdHJ1Y3QoX19uZXdfZmluaXNoLmJhc2UoKSwgX194KTsKICAgICAgICAgICAgKytf X25ld19maW5pc2g7CiAgICAgICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29w eShfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaXRlcmF0b3IodGhpcy0+X01fZmluaXNoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fbmV3X2ZpbmlzaCk7CiAgICAgICAgICB9CiAgICAgICAgY2F0 Y2goLi4uKQogICAgICAgICAgewogICAgICAgICAgICBfRGVzdHJveShfX25ld19zdGFydCxfX25l d19maW5pc2gpOwogICAgICAgICAgICBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LmJhc2UoKSxf X2xlbik7CiAgICAgICAgICAgIHRocm93OwogICAgICAgICAgfQogICAgICAgIF9EZXN0cm95KGJl Z2luKCksIGVuZCgpKTsKICAgICAgICBfTV9kZWFsbG9jYXRlKHRoaXMtPl9NX3N0YXJ0LAogICAg ICAgICAgICAgICAgICAgICAgdGhpcy0+X01fZW5kX29mX3N0b3JhZ2UgLSB0aGlzLT5fTV9zdGFy dCk7CiAgICAgICAgdGhpcy0+X01fc3RhcnQgPSBfX25ld19zdGFydC5iYXNlKCk7CiAgICAgICAg dGhpcy0+X01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICAgICAgICB0aGlzLT5fTV9l bmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0LmJhc2UoKSArIF9fbGVuOwogICAgICB9CiAgICB9 CiMgMzE2ICIvaG9tZS9vbGRoYW0vZ2NjLWluc3RhbGwvZ2NjMS9pbmNsdWRlL2MrKy8zLjQvYml0 cy92ZWN0b3IudGNjIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICB2b2lkCiAgICB2ZWN0b3I8X1RwLF9BbGxvYz46OgogICAgX01fZmlsbF9pbnNlcnQoaXRl cmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KQog ICAgewogICAgICBpZiAoX19uICE9IDApCiAgICAgIHsKICAgICAgICBpZiAoc2l6ZV90eXBlKHRo aXMtPl9NX2VuZF9vZl9zdG9yYWdlIC0gdGhpcy0+X01fZmluaXNoKSA+PSBfX24pCiAgICAgICAg ICB7CiAgICAgICAgICAgdmFsdWVfdHlwZSBfX3hfY29weSA9IF9feDsKICAgICAgICAgICBjb25z dCBzaXplX3R5cGUgX19lbGVtc19hZnRlciA9IGVuZCgpIC0gX19wb3NpdGlvbjsKICAgICAgICAg ICBpdGVyYXRvciBfX29sZF9maW5pc2godGhpcy0+X01fZmluaXNoKTsKICAgICAgICAgICBpZiAo X19lbGVtc19hZnRlciA+IF9fbikKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgdW5pbml0 aWFsaXplZF9jb3B5KHRoaXMtPl9NX2ZpbmlzaCAtIF9fbiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRoaXMtPl9NX2ZpbmlzaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRoaXMtPl9NX2ZpbmlzaCk7CiAgICAgICAgICAgICAgIHRoaXMtPl9NX2ZpbmlzaCAr PSBfX247CiAgICAgICAgICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX19vbGRfZmlu aXNoIC0gX19uLCBfX29sZF9maW5pc2gpOwogICAgICAgICAgICAgICBmaWxsKF9fcG9zaXRpb24s IF9fcG9zaXRpb24gKyBfX24sIF9feF9jb3B5KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICBl bHNlCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKHRo aXMtPl9NX2ZpbmlzaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19uIC0g X19lbGVtc19hZnRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX194X2Nv cHkpOwogICAgICAgICAgICAgICB0aGlzLT5fTV9maW5pc2ggKz0gX19uIC0gX19lbGVtc19hZnRl cjsKICAgICAgICAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIF9fb2xkX2Zp bmlzaCwgdGhpcy0+X01fZmluaXNoKTsKICAgICAgICAgICAgICAgdGhpcy0+X01fZmluaXNoICs9 IF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgICAgICAgIGZpbGwoX19wb3NpdGlvbiwgX19vbGRfZmlu aXNoLCBfX3hfY29weSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgZWxzZQog ICAgICAgICAgewogICAgICAgICAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUo KTsKICAgICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19vbGRfc2l6ZSArIHN0ZDo6 bWF4KF9fb2xkX3NpemUsIF9fbik7CiAgICAgICAgICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0KF9N X2FsbG9jYXRlKF9fbGVuKSk7CiAgICAgICAgICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25l d19zdGFydCk7CiAgICAgICAgICAgIHRyeQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg IF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShiZWdpbigpLCBfX3Bvc2l0aW9uLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X3N0 YXJ0KTsKICAgICAgICAgICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9u KF9fbmV3X2ZpbmlzaCwgX19uLCBfX3gpOwogICAgICAgICAgICAgICAgX19uZXdfZmluaXNoID0g dW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIGVuZCgpLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X2ZpbmlzaCk7CiAgICAgICAgICAg ICAgfQogICAgICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICAgICAgewogICAgICAgICAgICAg ICAgX0Rlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKTsKICAgICAgICAgICAgICAgIF9N X2RlYWxsb2NhdGUoX19uZXdfc3RhcnQuYmFzZSgpLF9fbGVuKTsKICAgICAgICAgICAgICAgIHRo cm93OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgX0Rlc3Ryb3kodGhpcy0+X01fc3RhcnQs IHRoaXMtPl9NX2ZpbmlzaCk7CiAgICAgICAgICAgIF9NX2RlYWxsb2NhdGUodGhpcy0+X01fc3Rh cnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+X01fZW5kX29mX3N0b3JhZ2UgLSB0 aGlzLT5fTV9zdGFydCk7CiAgICAgICAgICAgIHRoaXMtPl9NX3N0YXJ0ID0gX19uZXdfc3RhcnQu YmFzZSgpOwogICAgICAgICAgICB0aGlzLT5fTV9maW5pc2ggPSBfX25ld19maW5pc2guYmFzZSgp OwogICAgICAgICAgICB0aGlzLT5fTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0LmJhc2Uo KSArIF9fbGVuOwogICAgICAgICAgfQogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9UcCwgdHlwZW5hbWUgX0FsbG9jPiB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4K ICAgIHZvaWQKICAgIHZlY3RvcjxfVHAsX0FsbG9jPjo6CiAgICBfTV9yYW5nZV9pbnNlcnQoaXRl cmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwg X0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9y X3RhZykKICAgIHsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQog ICAgICB7CiAgICAgICAgX19wb3MgPSBpbnNlcnQoX19wb3MsICpfX2ZpcnN0KTsKICAgICAgICAr K19fcG9zOwogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUg X0FsbG9jPiB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgogICAgdm9pZAogICAg dmVjdG9yPF9UcCxfQWxsb2M+OjoKICAgIF9NX3JhbmdlX2luc2VydChpdGVyYXRvciBfX3Bvc2l0 aW9uLF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICBfRm9yd2Fy ZEl0ZXJhdG9yIF9fbGFzdCwgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGlmIChf X2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX24gPSBzdGQ6OmRp c3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgaWYgKHNpemVfdHlwZSh0aGlzLT5fTV9l bmRfb2Zfc3RvcmFnZSAtIHRoaXMtPl9NX2ZpbmlzaCkgPj0gX19uKQogICAgICAgIHsKICAgICAg ICAgIGNvbnN0IHNpemVfdHlwZSBfX2VsZW1zX2FmdGVyID0gZW5kKCkgLSBfX3Bvc2l0aW9uOwog ICAgICAgICAgaXRlcmF0b3IgX19vbGRfZmluaXNoKHRoaXMtPl9NX2ZpbmlzaCk7CiAgICAgICAg ICBpZiAoX19lbGVtc19hZnRlciA+IF9fbikKICAgICAgICAgIHsKICAgICAgICAgICAgdW5pbml0 aWFsaXplZF9jb3B5KHRoaXMtPl9NX2ZpbmlzaCAtIF9fbiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRoaXMtPl9NX2ZpbmlzaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRoaXMtPl9NX2ZpbmlzaCk7CiAgICAgICAgICAgIHRoaXMtPl9NX2ZpbmlzaCArPSBfX247CiAg ICAgICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBf X29sZF9maW5pc2gpOwogICAgICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3NpdGlv bik7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICB7CiAgICAgICAgICAgIF9G b3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2ZpcnN0OwogICAgICAgICAgICBhZHZhbmNlKF9fbWlk LCBfX2VsZW1zX2FmdGVyKTsKICAgICAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fbWlkLCBf X2xhc3QsIHRoaXMtPl9NX2ZpbmlzaCk7CiAgICAgICAgICAgIHRoaXMtPl9NX2ZpbmlzaCArPSBf X24gLSBfX2VsZW1zX2FmdGVyOwogICAgICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19wb3Np dGlvbiwgX19vbGRfZmluaXNoLCB0aGlzLT5fTV9maW5pc2gpOwogICAgICAgICAgICB0aGlzLT5f TV9maW5pc2ggKz0gX19lbGVtc19hZnRlcjsKICAgICAgICAgICAgY29weShfX2ZpcnN0LCBfX21p ZCwgX19wb3NpdGlvbik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAg ICB7CiAgICAgICAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAgICAg ICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgKyBzdGQ6Om1heChfX29sZF9z aXplLCBfX24pOwogICAgICAgICAgaXRlcmF0b3IgX19uZXdfc3RhcnQoX01fYWxsb2NhdGUoX19s ZW4pKTsKICAgICAgICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7CiAgICAg ICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5p dGlhbGl6ZWRfY29weShpdGVyYXRvcih0aGlzLT5fTV9zdGFydCksCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcG9zaXRpb24sIF9fbmV3X3N0YXJ0KTsK ICAgICAgICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwg X19sYXN0LCBfX25ld19maW5pc2gpOwogICAgICAgICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5p dGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpdGVyYXRvcih0aGlzLT5fTV9maW5pc2gpLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19maW5pc2gpOwogICAgICAg ICAgICB9CiAgICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBf RGVzdHJveShfX25ld19zdGFydCxfX25ld19maW5pc2gpOwogICAgICAgICAgICAgIF9NX2RlYWxs b2NhdGUoX19uZXdfc3RhcnQuYmFzZSgpLCBfX2xlbik7CiAgICAgICAgICAgICAgdGhyb3c7CiAg ICAgICAgICAgIH0KICAgICAgICAgIF9EZXN0cm95KHRoaXMtPl9NX3N0YXJ0LCB0aGlzLT5fTV9m aW5pc2gpOwogICAgICAgICAgX01fZGVhbGxvY2F0ZSh0aGlzLT5fTV9zdGFydCwKICAgICAgICAg ICAgICAgICAgICAgICAgdGhpcy0+X01fZW5kX29mX3N0b3JhZ2UgLSB0aGlzLT5fTV9zdGFydCk7 CiAgICAgICAgICB0aGlzLT5fTV9zdGFydCA9IF9fbmV3X3N0YXJ0LmJhc2UoKTsKICAgICAgICAg IHRoaXMtPl9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaC5iYXNlKCk7CiAgICAgICAgICB0aGlzLT5f TV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0LmJhc2UoKSArIF9fbGVuOwogICAgICAgIH0K ICAgICAgfQogICAgfQp9CiMgNzYgIi9ob21lL29sZGhhbS9nY2MtaW5zdGFsbC9nY2MxL2luY2x1 ZGUvYysrLzMuNC92ZWN0b3IiIDIgMwojIDcgImdvby5DIiAyCgp0ZW1wbGF0ZTxjbGFzcyBUPgpz dHJ1Y3QgQ3JlYXRlTGVhZiB7fTsKCnRlbXBsYXRlPGNsYXNzIFQ+CnN0cnVjdCBDcmVhdGVMZWFm PHN0ZDo6dmVjdG9yPFQ+ID4KewoKCgogIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VD46OmNvbnN0X2l0 ZXJhdG9yIExlYWZfdDsKCn07Cg==
reply other threads:[~2003-01-27 19:56 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20030127195254.8825.qmail@sources.redhat.com \ --to=oldham@codesourcery.com \ --cc=gcc-gnats@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).