Subject: Re: [Pljava-dev] Build Fails on Windows 7 References: <56C41C5B.9000809@lucee.org> <56C4D516.9010403@hogranch.com> <56C4D8C4.4010809@anastigmatix.net> <56C50E87.4070008@lucee.org> <56C51150.1070708@anastigmatix.net> <56C54EE0.2080905@lucee.org> <56C553C3.40408@lucee.org> <56C556BD.1010907@anastigmatix.net> <56C55824.1060502@lucee.org> <56C564F4.1050909@anastigmatix.net> <56C5E1B3.8090204@lucee.org> <56C5E795.4080405@anastigmatix.net> From: "Igal @ Lucee.org" Message-ID: <56C5F11F.9050709@lucee.org> Date: Thu, 18 Feb 2016 08:28:15 -0800 MIME-Version: 1.0 In-Reply-To: <56C5E795.4080405@anastigmatix.net> Content-Type: multipart/mixed; boundary="------------060905020505000106000506" This is a multi-part message in MIME format. --------------060905020505000106000506 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit On 2/18/2016 7:47 AM, Chapman Flack wrote: > #2 The build appears to have succeeded (as far as Maven thinks, > anyway). I didn't realize earlier, but I do have jar files in pljava/target. I was looking earlier only at the top target directory > #3 There are curious warnings. Most are from the printf format > checker, which seems to think jint and int are different > widths, likewise jlong and long. This makes me uneasy. > The other curious warnings are about the signal handlers > not getting defined in Backend.c. That also bears looking > into (which I won't have time for until later). > > You might, cautiously, load it into your PostgreSQL database > and see what it does. I would not (ahem) do this on a production > instance at this stage. :) > > Could you reply with whatever is in your Java installation's > include/jni.h and include/*/jni_md.h files pertaining to the > declarations of jint and jlong? > > -Chap I renamed jni.h to jni.h.txt (as I'm sure that some email clients will not like the .h extension) and attached here. The ${java}/include/win32/jni_md.h is inline below: #ifndef _JAVASOFT_JNI_MD_H_ #define _JAVASOFT_JNI_MD_H_ #define JNIEXPORT __declspec(dllexport) #define JNIIMPORT __declspec(dllimport) #define JNICALL __stdcall typedef long jint; typedef __int64 jlong; typedef signed char jbyte; #endif /* !_JAVASOFT_JNI_MD_H_ */ I must say that I'm impressed with your knowledge. I've been writing Java code for a very long time now, and never even knew that there are .h files in ${java}/include Igal --------------060905020505000106000506 Content-Type: text/plain; charset=UTF-8; name="jni.h.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="jni.h.txt" LyoKICogQ29weXJpZ2h0IChjKSAxOTk2LCAyMDEzLCBPcmFjbGUgYW5kL29yIGl0cyBhZmZp bGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKiBPUkFDTEUgUFJPUFJJRVRBUlkvQ09O RklERU5USUFMLiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zLgogKgogKgogKgog KgogKgogKgogKgogKgogKgogKgogKgogKgogKgogKgogKgogKgogKgogKgogKgogKgogKi8K Ci8qCiAqIFdlIHVzZWQgcGFydCBvZiBOZXRzY2FwZSdzIEphdmEgUnVudGltZSBJbnRlcmZh Y2UgKEpSSSkgYXMgdGhlIHN0YXJ0aW5nCiAqIHBvaW50IG9mIG91ciBkZXNpZ24gYW5kIGlt cGxlbWVudGF0aW9uLgogKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogSmF2YSBS dW50aW1lIEludGVyZmFjZQogKiBDb3B5cmlnaHQgKGMpIDE5OTYgTmV0c2NhcGUgQ29tbXVu aWNhdGlvbnMgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KCiNpZm5kZWYgX0pBVkFTT0ZUX0pOSV9IXwojZGVmaW5lIF9KQVZB U09GVF9KTklfSF8KCiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RkYXJnLmg+Cgov KiBqbmlfbWQuaCBjb250YWlucyB0aGUgbWFjaGluZS1kZXBlbmRlbnQgdHlwZWRlZnMgZm9y IGpieXRlLCBqaW50CiAgIGFuZCBqbG9uZyAqLwoKI2luY2x1ZGUgImpuaV9tZC5oIgoKI2lm ZGVmIF9fY3BsdXNwbHVzCmV4dGVybiAiQyIgewojZW5kaWYKCi8qCiAqIEpOSSBUeXBlcwog Ki8KCiNpZm5kZWYgSk5JX1RZUEVTX0FMUkVBRFlfREVGSU5FRF9JTl9KTklfTURfSAoKdHlw ZWRlZiB1bnNpZ25lZCBjaGFyICAgamJvb2xlYW47CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQg IGpjaGFyOwp0eXBlZGVmIHNob3J0ICAgICAgICAgICBqc2hvcnQ7CnR5cGVkZWYgZmxvYXQg ICAgICAgICAgIGpmbG9hdDsKdHlwZWRlZiBkb3VibGUgICAgICAgICAgamRvdWJsZTsKCnR5 cGVkZWYgamludCAgICAgICAgICAgIGpzaXplOwoKI2lmZGVmIF9fY3BsdXNwbHVzCgpjbGFz cyBfam9iamVjdCB7fTsKY2xhc3MgX2pjbGFzcyA6IHB1YmxpYyBfam9iamVjdCB7fTsKY2xh c3MgX2p0aHJvd2FibGUgOiBwdWJsaWMgX2pvYmplY3Qge307CmNsYXNzIF9qc3RyaW5nIDog cHVibGljIF9qb2JqZWN0IHt9OwpjbGFzcyBfamFycmF5IDogcHVibGljIF9qb2JqZWN0IHt9 OwpjbGFzcyBfamJvb2xlYW5BcnJheSA6IHB1YmxpYyBfamFycmF5IHt9OwpjbGFzcyBfamJ5 dGVBcnJheSA6IHB1YmxpYyBfamFycmF5IHt9OwpjbGFzcyBfamNoYXJBcnJheSA6IHB1Ymxp YyBfamFycmF5IHt9OwpjbGFzcyBfanNob3J0QXJyYXkgOiBwdWJsaWMgX2phcnJheSB7fTsK Y2xhc3MgX2ppbnRBcnJheSA6IHB1YmxpYyBfamFycmF5IHt9OwpjbGFzcyBfamxvbmdBcnJh eSA6IHB1YmxpYyBfamFycmF5IHt9OwpjbGFzcyBfamZsb2F0QXJyYXkgOiBwdWJsaWMgX2ph cnJheSB7fTsKY2xhc3MgX2pkb3VibGVBcnJheSA6IHB1YmxpYyBfamFycmF5IHt9OwpjbGFz cyBfam9iamVjdEFycmF5IDogcHVibGljIF9qYXJyYXkge307Cgp0eXBlZGVmIF9qb2JqZWN0 ICpqb2JqZWN0Owp0eXBlZGVmIF9qY2xhc3MgKmpjbGFzczsKdHlwZWRlZiBfanRocm93YWJs ZSAqanRocm93YWJsZTsKdHlwZWRlZiBfanN0cmluZyAqanN0cmluZzsKdHlwZWRlZiBfamFy cmF5ICpqYXJyYXk7CnR5cGVkZWYgX2pib29sZWFuQXJyYXkgKmpib29sZWFuQXJyYXk7CnR5 cGVkZWYgX2pieXRlQXJyYXkgKmpieXRlQXJyYXk7CnR5cGVkZWYgX2pjaGFyQXJyYXkgKmpj aGFyQXJyYXk7CnR5cGVkZWYgX2pzaG9ydEFycmF5ICpqc2hvcnRBcnJheTsKdHlwZWRlZiBf amludEFycmF5ICpqaW50QXJyYXk7CnR5cGVkZWYgX2psb25nQXJyYXkgKmpsb25nQXJyYXk7 CnR5cGVkZWYgX2pmbG9hdEFycmF5ICpqZmxvYXRBcnJheTsKdHlwZWRlZiBfamRvdWJsZUFy cmF5ICpqZG91YmxlQXJyYXk7CnR5cGVkZWYgX2pvYmplY3RBcnJheSAqam9iamVjdEFycmF5 OwoKI2Vsc2UKCnN0cnVjdCBfam9iamVjdDsKCnR5cGVkZWYgc3RydWN0IF9qb2JqZWN0ICpq b2JqZWN0Owp0eXBlZGVmIGpvYmplY3QgamNsYXNzOwp0eXBlZGVmIGpvYmplY3QganRocm93 YWJsZTsKdHlwZWRlZiBqb2JqZWN0IGpzdHJpbmc7CnR5cGVkZWYgam9iamVjdCBqYXJyYXk7 CnR5cGVkZWYgamFycmF5IGpib29sZWFuQXJyYXk7CnR5cGVkZWYgamFycmF5IGpieXRlQXJy YXk7CnR5cGVkZWYgamFycmF5IGpjaGFyQXJyYXk7CnR5cGVkZWYgamFycmF5IGpzaG9ydEFy cmF5Owp0eXBlZGVmIGphcnJheSBqaW50QXJyYXk7CnR5cGVkZWYgamFycmF5IGpsb25nQXJy YXk7CnR5cGVkZWYgamFycmF5IGpmbG9hdEFycmF5Owp0eXBlZGVmIGphcnJheSBqZG91Ymxl QXJyYXk7CnR5cGVkZWYgamFycmF5IGpvYmplY3RBcnJheTsKCiNlbmRpZgoKdHlwZWRlZiBq b2JqZWN0IGp3ZWFrOwoKdHlwZWRlZiB1bmlvbiBqdmFsdWUgewogICAgamJvb2xlYW4gejsK ICAgIGpieXRlICAgIGI7CiAgICBqY2hhciAgICBjOwogICAganNob3J0ICAgczsKICAgIGpp bnQgICAgIGk7CiAgICBqbG9uZyAgICBqOwogICAgamZsb2F0ICAgZjsKICAgIGpkb3VibGUg IGQ7CiAgICBqb2JqZWN0ICBsOwp9IGp2YWx1ZTsKCnN0cnVjdCBfamZpZWxkSUQ7CnR5cGVk ZWYgc3RydWN0IF9qZmllbGRJRCAqamZpZWxkSUQ7CgpzdHJ1Y3QgX2ptZXRob2RJRDsKdHlw ZWRlZiBzdHJ1Y3QgX2ptZXRob2RJRCAqam1ldGhvZElEOwoKLyogUmV0dXJuIHZhbHVlcyBm cm9tIGpvYmplY3RSZWZUeXBlICovCnR5cGVkZWYgZW51bSBfam9iamVjdFR5cGUgewogICAg IEpOSUludmFsaWRSZWZUeXBlICAgID0gMCwKICAgICBKTklMb2NhbFJlZlR5cGUgICAgICA9 IDEsCiAgICAgSk5JR2xvYmFsUmVmVHlwZSAgICAgPSAyLAogICAgIEpOSVdlYWtHbG9iYWxS ZWZUeXBlID0gMwp9IGpvYmplY3RSZWZUeXBlOwoKCiNlbmRpZiAvKiBKTklfVFlQRVNfQUxS RUFEWV9ERUZJTkVEX0lOX0pOSV9NRF9IICovCgovKgogKiBqYm9vbGVhbiBjb25zdGFudHMK ICovCgojZGVmaW5lIEpOSV9GQUxTRSAwCiNkZWZpbmUgSk5JX1RSVUUgMQoKLyoKICogcG9z c2libGUgcmV0dXJuIHZhbHVlcyBmb3IgSk5JIGZ1bmN0aW9ucy4KICovCgojZGVmaW5lIEpO SV9PSyAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgLyogc3VjY2VzcyAqLwojZGVmaW5l IEpOSV9FUlIgICAgICAgICAgKC0xKSAgICAgICAgICAgICAgLyogdW5rbm93biBlcnJvciAq LwojZGVmaW5lIEpOSV9FREVUQUNIRUQgICAgKC0yKSAgICAgICAgICAgICAgLyogdGhyZWFk IGRldGFjaGVkIGZyb20gdGhlIFZNICovCiNkZWZpbmUgSk5JX0VWRVJTSU9OICAgICAoLTMp ICAgICAgICAgICAgICAvKiBKTkkgdmVyc2lvbiBlcnJvciAqLwojZGVmaW5lIEpOSV9FTk9N RU0gICAgICAgKC00KSAgICAgICAgICAgICAgLyogbm90IGVub3VnaCBtZW1vcnkgKi8KI2Rl ZmluZSBKTklfRUVYSVNUICAgICAgICgtNSkgICAgICAgICAgICAgIC8qIFZNIGFscmVhZHkg Y3JlYXRlZCAqLwojZGVmaW5lIEpOSV9FSU5WQUwgICAgICAgKC02KSAgICAgICAgICAgICAg LyogaW52YWxpZCBhcmd1bWVudHMgKi8KCi8qCiAqIHVzZWQgaW4gUmVsZWFzZVNjYWxhckFy cmF5RWxlbWVudHMKICovCgojZGVmaW5lIEpOSV9DT01NSVQgMQojZGVmaW5lIEpOSV9BQk9S VCAyCgovKgogKiB1c2VkIGluIFJlZ2lzdGVyTmF0aXZlcyB0byBkZXNjcmliZSBuYXRpdmUg bWV0aG9kIG5hbWUsIHNpZ25hdHVyZSwKICogYW5kIGZ1bmN0aW9uIHBvaW50ZXIuCiAqLwoK dHlwZWRlZiBzdHJ1Y3QgewogICAgY2hhciAqbmFtZTsKICAgIGNoYXIgKnNpZ25hdHVyZTsK ICAgIHZvaWQgKmZuUHRyOwp9IEpOSU5hdGl2ZU1ldGhvZDsKCi8qCiAqIEpOSSBOYXRpdmUg TWV0aG9kIEludGVyZmFjZS4KICovCgpzdHJ1Y3QgSk5JTmF0aXZlSW50ZXJmYWNlXzsKCnN0 cnVjdCBKTklFbnZfOwoKI2lmZGVmIF9fY3BsdXNwbHVzCnR5cGVkZWYgSk5JRW52XyBKTklF bnY7CiNlbHNlCnR5cGVkZWYgY29uc3Qgc3RydWN0IEpOSU5hdGl2ZUludGVyZmFjZV8gKkpO SUVudjsKI2VuZGlmCgovKgogKiBKTkkgSW52b2NhdGlvbiBJbnRlcmZhY2UuCiAqLwoKc3Ry dWN0IEpOSUludm9rZUludGVyZmFjZV87CgpzdHJ1Y3QgSmF2YVZNXzsKCiNpZmRlZiBfX2Nw bHVzcGx1cwp0eXBlZGVmIEphdmFWTV8gSmF2YVZNOwojZWxzZQp0eXBlZGVmIGNvbnN0IHN0 cnVjdCBKTklJbnZva2VJbnRlcmZhY2VfICpKYXZhVk07CiNlbmRpZgoKc3RydWN0IEpOSU5h dGl2ZUludGVyZmFjZV8gewogICAgdm9pZCAqcmVzZXJ2ZWQwOwogICAgdm9pZCAqcmVzZXJ2 ZWQxOwogICAgdm9pZCAqcmVzZXJ2ZWQyOwoKICAgIHZvaWQgKnJlc2VydmVkMzsKICAgIGpp bnQgKEpOSUNBTEwgKkdldFZlcnNpb24pKEpOSUVudiAqZW52KTsKCiAgICBqY2xhc3MgKEpO SUNBTEwgKkRlZmluZUNsYXNzKQogICAgICAoSk5JRW52ICplbnYsIGNvbnN0IGNoYXIgKm5h bWUsIGpvYmplY3QgbG9hZGVyLCBjb25zdCBqYnl0ZSAqYnVmLAogICAgICAganNpemUgbGVu KTsKICAgIGpjbGFzcyAoSk5JQ0FMTCAqRmluZENsYXNzKQogICAgICAoSk5JRW52ICplbnYs IGNvbnN0IGNoYXIgKm5hbWUpOwoKICAgIGptZXRob2RJRCAoSk5JQ0FMTCAqRnJvbVJlZmxl Y3RlZE1ldGhvZCkKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG1ldGhvZCk7CiAgICBq ZmllbGRJRCAoSk5JQ0FMTCAqRnJvbVJlZmxlY3RlZEZpZWxkKQogICAgICAoSk5JRW52ICpl bnYsIGpvYmplY3QgZmllbGQpOwoKICAgIGpvYmplY3QgKEpOSUNBTEwgKlRvUmVmbGVjdGVk TWV0aG9kKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbHMsIGptZXRob2RJRCBtZXRo b2RJRCwgamJvb2xlYW4gaXNTdGF0aWMpOwoKICAgIGpjbGFzcyAoSk5JQ0FMTCAqR2V0U3Vw ZXJjbGFzcykKICAgICAgKEpOSUVudiAqZW52LCBqY2xhc3Mgc3ViKTsKICAgIGpib29sZWFu IChKTklDQUxMICpJc0Fzc2lnbmFibGVGcm9tKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFz cyBzdWIsIGpjbGFzcyBzdXApOwoKICAgIGpvYmplY3QgKEpOSUNBTEwgKlRvUmVmbGVjdGVk RmllbGQpCiAgICAgIChKTklFbnYgKmVudiwgamNsYXNzIGNscywgamZpZWxkSUQgZmllbGRJ RCwgamJvb2xlYW4gaXNTdGF0aWMpOwoKICAgIGppbnQgKEpOSUNBTEwgKlRocm93KQogICAg ICAoSk5JRW52ICplbnYsIGp0aHJvd2FibGUgb2JqKTsKICAgIGppbnQgKEpOSUNBTEwgKlRo cm93TmV3KQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgY29uc3QgY2hhciAq bXNnKTsKICAgIGp0aHJvd2FibGUgKEpOSUNBTEwgKkV4Y2VwdGlvbk9jY3VycmVkKQogICAg ICAoSk5JRW52ICplbnYpOwogICAgdm9pZCAoSk5JQ0FMTCAqRXhjZXB0aW9uRGVzY3JpYmUp CiAgICAgIChKTklFbnYgKmVudik7CiAgICB2b2lkIChKTklDQUxMICpFeGNlcHRpb25DbGVh cikKICAgICAgKEpOSUVudiAqZW52KTsKICAgIHZvaWQgKEpOSUNBTEwgKkZhdGFsRXJyb3Ip CiAgICAgIChKTklFbnYgKmVudiwgY29uc3QgY2hhciAqbXNnKTsKCiAgICBqaW50IChKTklD QUxMICpQdXNoTG9jYWxGcmFtZSkKICAgICAgKEpOSUVudiAqZW52LCBqaW50IGNhcGFjaXR5 KTsKICAgIGpvYmplY3QgKEpOSUNBTEwgKlBvcExvY2FsRnJhbWUpCiAgICAgIChKTklFbnYg KmVudiwgam9iamVjdCByZXN1bHQpOwoKICAgIGpvYmplY3QgKEpOSUNBTEwgKk5ld0dsb2Jh bFJlZikKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IGxvYmopOwogICAgdm9pZCAoSk5J Q0FMTCAqRGVsZXRlR2xvYmFsUmVmKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3QgZ3Jl Zik7CiAgICB2b2lkIChKTklDQUxMICpEZWxldGVMb2NhbFJlZikKICAgICAgKEpOSUVudiAq ZW52LCBqb2JqZWN0IG9iaik7CiAgICBqYm9vbGVhbiAoSk5JQ0FMTCAqSXNTYW1lT2JqZWN0 KQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqMSwgam9iamVjdCBvYmoyKTsKICAg IGpvYmplY3QgKEpOSUNBTEwgKk5ld0xvY2FsUmVmKQogICAgICAoSk5JRW52ICplbnYsIGpv YmplY3QgcmVmKTsKICAgIGppbnQgKEpOSUNBTEwgKkVuc3VyZUxvY2FsQ2FwYWNpdHkpCiAg ICAgIChKTklFbnYgKmVudiwgamludCBjYXBhY2l0eSk7CgogICAgam9iamVjdCAoSk5JQ0FM TCAqQWxsb2NPYmplY3QpCiAgICAgIChKTklFbnYgKmVudiwgamNsYXNzIGNsYXp6KTsKICAg IGpvYmplY3QgKEpOSUNBTEwgKk5ld09iamVjdCkKICAgICAgKEpOSUVudiAqZW52LCBqY2xh c3MgY2xhenosIGptZXRob2RJRCBtZXRob2RJRCwgLi4uKTsKICAgIGpvYmplY3QgKEpOSUNB TEwgKk5ld09iamVjdFYpCiAgICAgIChKTklFbnYgKmVudiwgamNsYXNzIGNsYXp6LCBqbWV0 aG9kSUQgbWV0aG9kSUQsIHZhX2xpc3QgYXJncyk7CiAgICBqb2JqZWN0IChKTklDQUxMICpO ZXdPYmplY3RBKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgam1ldGhvZElE IG1ldGhvZElELCBjb25zdCBqdmFsdWUgKmFyZ3MpOwoKICAgIGpjbGFzcyAoSk5JQ0FMTCAq R2V0T2JqZWN0Q2xhc3MpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmopOwogICAg amJvb2xlYW4gKEpOSUNBTEwgKklzSW5zdGFuY2VPZikKICAgICAgKEpOSUVudiAqZW52LCBq b2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6KTsKCiAgICBqbWV0aG9kSUQgKEpOSUNBTEwgKkdl dE1ldGhvZElEKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgY29uc3QgY2hh ciAqbmFtZSwgY29uc3QgY2hhciAqc2lnKTsKCiAgICBqb2JqZWN0IChKTklDQUxMICpDYWxs T2JqZWN0TWV0aG9kKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqbWV0aG9k SUQgbWV0aG9kSUQsIC4uLik7CiAgICBqb2JqZWN0IChKTklDQUxMICpDYWxsT2JqZWN0TWV0 aG9kVikKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhv ZElELCB2YV9saXN0IGFyZ3MpOwogICAgam9iamVjdCAoSk5JQ0FMTCAqQ2FsbE9iamVjdE1l dGhvZEEpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRo b2RJRCwgY29uc3QganZhbHVlICogYXJncyk7CgogICAgamJvb2xlYW4gKEpOSUNBTEwgKkNh bGxCb29sZWFuTWV0aG9kKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqbWV0 aG9kSUQgbWV0aG9kSUQsIC4uLik7CiAgICBqYm9vbGVhbiAoSk5JQ0FMTCAqQ2FsbEJvb2xl YW5NZXRob2RWKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQg bWV0aG9kSUQsIHZhX2xpc3QgYXJncyk7CiAgICBqYm9vbGVhbiAoSk5JQ0FMTCAqQ2FsbEJv b2xlYW5NZXRob2RBKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqbWV0aG9k SUQgbWV0aG9kSUQsIGNvbnN0IGp2YWx1ZSAqIGFyZ3MpOwoKICAgIGpieXRlIChKTklDQUxM ICpDYWxsQnl0ZU1ldGhvZCkKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgam1l dGhvZElEIG1ldGhvZElELCAuLi4pOwogICAgamJ5dGUgKEpOSUNBTEwgKkNhbGxCeXRlTWV0 aG9kVikKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhv ZElELCB2YV9saXN0IGFyZ3MpOwogICAgamJ5dGUgKEpOSUNBTEwgKkNhbGxCeXRlTWV0aG9k QSkKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElE LCBjb25zdCBqdmFsdWUgKmFyZ3MpOwoKICAgIGpjaGFyIChKTklDQUxMICpDYWxsQ2hhck1l dGhvZCkKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhv ZElELCAuLi4pOwogICAgamNoYXIgKEpOSUNBTEwgKkNhbGxDaGFyTWV0aG9kVikKICAgICAg KEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCB2YV9saXN0 IGFyZ3MpOwogICAgamNoYXIgKEpOSUNBTEwgKkNhbGxDaGFyTWV0aG9kQSkKICAgICAgKEpO SUVudiAqZW52LCBqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCBjb25zdCBqdmFs dWUgKmFyZ3MpOwoKICAgIGpzaG9ydCAoSk5JQ0FMTCAqQ2FsbFNob3J0TWV0aG9kKQogICAg ICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsIC4uLik7 CiAgICBqc2hvcnQgKEpOSUNBTEwgKkNhbGxTaG9ydE1ldGhvZFYpCiAgICAgIChKTklFbnYg KmVudiwgam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwgdmFfbGlzdCBhcmdzKTsK ICAgIGpzaG9ydCAoSk5JQ0FMTCAqQ2FsbFNob3J0TWV0aG9kQSkKICAgICAgKEpOSUVudiAq ZW52LCBqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCBjb25zdCBqdmFsdWUgKmFy Z3MpOwoKICAgIGppbnQgKEpOSUNBTEwgKkNhbGxJbnRNZXRob2QpCiAgICAgIChKTklFbnYg KmVudiwgam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwgLi4uKTsKICAgIGppbnQg KEpOSUNBTEwgKkNhbGxJbnRNZXRob2RWKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qg b2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsIHZhX2xpc3QgYXJncyk7CiAgICBqaW50IChKTklD QUxMICpDYWxsSW50TWV0aG9kQSkKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwg am1ldGhvZElEIG1ldGhvZElELCBjb25zdCBqdmFsdWUgKmFyZ3MpOwoKICAgIGpsb25nIChK TklDQUxMICpDYWxsTG9uZ01ldGhvZCkKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9i aiwgam1ldGhvZElEIG1ldGhvZElELCAuLi4pOwogICAgamxvbmcgKEpOSUNBTEwgKkNhbGxM b25nTWV0aG9kVikKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgam1ldGhvZElE IG1ldGhvZElELCB2YV9saXN0IGFyZ3MpOwogICAgamxvbmcgKEpOSUNBTEwgKkNhbGxMb25n TWV0aG9kQSkKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1l dGhvZElELCBjb25zdCBqdmFsdWUgKmFyZ3MpOwoKICAgIGpmbG9hdCAoSk5JQ0FMTCAqQ2Fs bEZsb2F0TWV0aG9kKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqbWV0aG9k SUQgbWV0aG9kSUQsIC4uLik7CiAgICBqZmxvYXQgKEpOSUNBTEwgKkNhbGxGbG9hdE1ldGhv ZFYpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJ RCwgdmFfbGlzdCBhcmdzKTsKICAgIGpmbG9hdCAoSk5JQ0FMTCAqQ2FsbEZsb2F0TWV0aG9k QSkKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElE LCBjb25zdCBqdmFsdWUgKmFyZ3MpOwoKICAgIGpkb3VibGUgKEpOSUNBTEwgKkNhbGxEb3Vi bGVNZXRob2QpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGptZXRob2RJRCBt ZXRob2RJRCwgLi4uKTsKICAgIGpkb3VibGUgKEpOSUNBTEwgKkNhbGxEb3VibGVNZXRob2RW KQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQs IHZhX2xpc3QgYXJncyk7CiAgICBqZG91YmxlIChKTklDQUxMICpDYWxsRG91YmxlTWV0aG9k QSkKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElE LCBjb25zdCBqdmFsdWUgKmFyZ3MpOwoKICAgIHZvaWQgKEpOSUNBTEwgKkNhbGxWb2lkTWV0 aG9kKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9k SUQsIC4uLik7CiAgICB2b2lkIChKTklDQUxMICpDYWxsVm9pZE1ldGhvZFYpCiAgICAgIChK TklFbnYgKmVudiwgam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwgdmFfbGlzdCBh cmdzKTsKICAgIHZvaWQgKEpOSUNBTEwgKkNhbGxWb2lkTWV0aG9kQSkKICAgICAgKEpOSUVu diAqZW52LCBqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELCBjb25zdCBqdmFsdWUg KiBhcmdzKTsKCiAgICBqb2JqZWN0IChKTklDQUxMICpDYWxsTm9udmlydHVhbE9iamVjdE1l dGhvZCkKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6LCBq bWV0aG9kSUQgbWV0aG9kSUQsIC4uLik7CiAgICBqb2JqZWN0IChKTklDQUxMICpDYWxsTm9u dmlydHVhbE9iamVjdE1ldGhvZFYpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmos IGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhvZElELAogICAgICAgdmFfbGlzdCBhcmdz KTsKICAgIGpvYmplY3QgKEpOSUNBTEwgKkNhbGxOb252aXJ0dWFsT2JqZWN0TWV0aG9kQSkK ICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6LCBqbWV0aG9k SUQgbWV0aG9kSUQsCiAgICAgICBjb25zdCBqdmFsdWUgKiBhcmdzKTsKCiAgICBqYm9vbGVh biAoSk5JQ0FMTCAqQ2FsbE5vbnZpcnR1YWxCb29sZWFuTWV0aG9kKQogICAgICAoSk5JRW52 ICplbnYsIGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xhenosIGptZXRob2RJRCBtZXRob2RJRCwg Li4uKTsKICAgIGpib29sZWFuIChKTklDQUxMICpDYWxsTm9udmlydHVhbEJvb2xlYW5NZXRo b2RWKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xhenosIGpt ZXRob2RJRCBtZXRob2RJRCwKICAgICAgIHZhX2xpc3QgYXJncyk7CiAgICBqYm9vbGVhbiAo Sk5JQ0FMTCAqQ2FsbE5vbnZpcnR1YWxCb29sZWFuTWV0aG9kQSkKICAgICAgKEpOSUVudiAq ZW52LCBqb2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQsCiAg ICAgICBjb25zdCBqdmFsdWUgKiBhcmdzKTsKCiAgICBqYnl0ZSAoSk5JQ0FMTCAqQ2FsbE5v bnZpcnR1YWxCeXRlTWV0aG9kKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBq Y2xhc3MgY2xhenosIGptZXRob2RJRCBtZXRob2RJRCwgLi4uKTsKICAgIGpieXRlIChKTklD QUxMICpDYWxsTm9udmlydHVhbEJ5dGVNZXRob2RWKQogICAgICAoSk5JRW52ICplbnYsIGpv YmplY3Qgb2JqLCBqY2xhc3MgY2xhenosIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAgIHZh X2xpc3QgYXJncyk7CiAgICBqYnl0ZSAoSk5JQ0FMTCAqQ2FsbE5vbnZpcnR1YWxCeXRlTWV0 aG9kQSkKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6LCBq bWV0aG9kSUQgbWV0aG9kSUQsCiAgICAgICBjb25zdCBqdmFsdWUgKmFyZ3MpOwoKICAgIGpj aGFyIChKTklDQUxMICpDYWxsTm9udmlydHVhbENoYXJNZXRob2QpCiAgICAgIChKTklFbnYg KmVudiwgam9iamVjdCBvYmosIGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhvZElELCAu Li4pOwogICAgamNoYXIgKEpOSUNBTEwgKkNhbGxOb252aXJ0dWFsQ2hhck1ldGhvZFYpCiAg ICAgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGpjbGFzcyBjbGF6eiwgam1ldGhvZElE IG1ldGhvZElELAogICAgICAgdmFfbGlzdCBhcmdzKTsKICAgIGpjaGFyIChKTklDQUxMICpD YWxsTm9udmlydHVhbENoYXJNZXRob2RBKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qg b2JqLCBqY2xhc3MgY2xhenosIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAgIGNvbnN0IGp2 YWx1ZSAqYXJncyk7CgogICAganNob3J0IChKTklDQUxMICpDYWxsTm9udmlydHVhbFNob3J0 TWV0aG9kKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xhenos IGptZXRob2RJRCBtZXRob2RJRCwgLi4uKTsKICAgIGpzaG9ydCAoSk5JQ0FMTCAqQ2FsbE5v bnZpcnR1YWxTaG9ydE1ldGhvZFYpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmos IGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhvZElELAogICAgICAgdmFfbGlzdCBhcmdz KTsKICAgIGpzaG9ydCAoSk5JQ0FMTCAqQ2FsbE5vbnZpcnR1YWxTaG9ydE1ldGhvZEEpCiAg ICAgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGpjbGFzcyBjbGF6eiwgam1ldGhvZElE IG1ldGhvZElELAogICAgICAgY29uc3QganZhbHVlICphcmdzKTsKCiAgICBqaW50IChKTklD QUxMICpDYWxsTm9udmlydHVhbEludE1ldGhvZCkKICAgICAgKEpOSUVudiAqZW52LCBqb2Jq ZWN0IG9iaiwgamNsYXNzIGNsYXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQsIC4uLik7CiAgICBq aW50IChKTklDQUxMICpDYWxsTm9udmlydHVhbEludE1ldGhvZFYpCiAgICAgIChKTklFbnYg KmVudiwgam9iamVjdCBvYmosIGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhvZElELAog ICAgICAgdmFfbGlzdCBhcmdzKTsKICAgIGppbnQgKEpOSUNBTEwgKkNhbGxOb252aXJ0dWFs SW50TWV0aG9kQSkKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgamNsYXNzIGNs YXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQsCiAgICAgICBjb25zdCBqdmFsdWUgKmFyZ3MpOwoK ICAgIGpsb25nIChKTklDQUxMICpDYWxsTm9udmlydHVhbExvbmdNZXRob2QpCiAgICAgIChK TklFbnYgKmVudiwgam9iamVjdCBvYmosIGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhv ZElELCAuLi4pOwogICAgamxvbmcgKEpOSUNBTEwgKkNhbGxOb252aXJ0dWFsTG9uZ01ldGhv ZFYpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGpjbGFzcyBjbGF6eiwgam1l dGhvZElEIG1ldGhvZElELAogICAgICAgdmFfbGlzdCBhcmdzKTsKICAgIGpsb25nIChKTklD QUxMICpDYWxsTm9udmlydHVhbExvbmdNZXRob2RBKQogICAgICAoSk5JRW52ICplbnYsIGpv YmplY3Qgb2JqLCBqY2xhc3MgY2xhenosIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAgIGNv bnN0IGp2YWx1ZSAqYXJncyk7CgogICAgamZsb2F0IChKTklDQUxMICpDYWxsTm9udmlydHVh bEZsb2F0TWV0aG9kKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqY2xhc3Mg Y2xhenosIGptZXRob2RJRCBtZXRob2RJRCwgLi4uKTsKICAgIGpmbG9hdCAoSk5JQ0FMTCAq Q2FsbE5vbnZpcnR1YWxGbG9hdE1ldGhvZFYpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVj dCBvYmosIGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhvZElELAogICAgICAgdmFfbGlz dCBhcmdzKTsKICAgIGpmbG9hdCAoSk5JQ0FMTCAqQ2FsbE5vbnZpcnR1YWxGbG9hdE1ldGhv ZEEpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGpjbGFzcyBjbGF6eiwgam1l dGhvZElEIG1ldGhvZElELAogICAgICAgY29uc3QganZhbHVlICphcmdzKTsKCiAgICBqZG91 YmxlIChKTklDQUxMICpDYWxsTm9udmlydHVhbERvdWJsZU1ldGhvZCkKICAgICAgKEpOSUVu diAqZW52LCBqb2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQs IC4uLik7CiAgICBqZG91YmxlIChKTklDQUxMICpDYWxsTm9udmlydHVhbERvdWJsZU1ldGhv ZFYpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGpjbGFzcyBjbGF6eiwgam1l dGhvZElEIG1ldGhvZElELAogICAgICAgdmFfbGlzdCBhcmdzKTsKICAgIGpkb3VibGUgKEpO SUNBTEwgKkNhbGxOb252aXJ0dWFsRG91YmxlTWV0aG9kQSkKICAgICAgKEpOSUVudiAqZW52 LCBqb2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQsCiAgICAg ICBjb25zdCBqdmFsdWUgKmFyZ3MpOwoKICAgIHZvaWQgKEpOSUNBTEwgKkNhbGxOb252aXJ0 dWFsVm9pZE1ldGhvZCkKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgamNsYXNz IGNsYXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQsIC4uLik7CiAgICB2b2lkIChKTklDQUxMICpD YWxsTm9udmlydHVhbFZvaWRNZXRob2RWKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qg b2JqLCBqY2xhc3MgY2xhenosIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAgIHZhX2xpc3Qg YXJncyk7CiAgICB2b2lkIChKTklDQUxMICpDYWxsTm9udmlydHVhbFZvaWRNZXRob2RBKQog ICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xhenosIGptZXRob2RJ RCBtZXRob2RJRCwKICAgICAgIGNvbnN0IGp2YWx1ZSAqIGFyZ3MpOwoKICAgIGpmaWVsZElE IChKTklDQUxMICpHZXRGaWVsZElEKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6 eiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnKTsKCiAgICBqb2JqZWN0IChK TklDQUxMICpHZXRPYmplY3RGaWVsZCkKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9i aiwgamZpZWxkSUQgZmllbGRJRCk7CiAgICBqYm9vbGVhbiAoSk5JQ0FMTCAqR2V0Qm9vbGVh bkZpZWxkKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqZmllbGRJRCBmaWVs ZElEKTsKICAgIGpieXRlIChKTklDQUxMICpHZXRCeXRlRmllbGQpCiAgICAgIChKTklFbnYg KmVudiwgam9iamVjdCBvYmosIGpmaWVsZElEIGZpZWxkSUQpOwogICAgamNoYXIgKEpOSUNB TEwgKkdldENoYXJGaWVsZCkKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgamZp ZWxkSUQgZmllbGRJRCk7CiAgICBqc2hvcnQgKEpOSUNBTEwgKkdldFNob3J0RmllbGQpCiAg ICAgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGpmaWVsZElEIGZpZWxkSUQpOwogICAg amludCAoSk5JQ0FMTCAqR2V0SW50RmllbGQpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVj dCBvYmosIGpmaWVsZElEIGZpZWxkSUQpOwogICAgamxvbmcgKEpOSUNBTEwgKkdldExvbmdG aWVsZCkKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaiwgamZpZWxkSUQgZmllbGRJ RCk7CiAgICBqZmxvYXQgKEpOSUNBTEwgKkdldEZsb2F0RmllbGQpCiAgICAgIChKTklFbnYg KmVudiwgam9iamVjdCBvYmosIGpmaWVsZElEIGZpZWxkSUQpOwogICAgamRvdWJsZSAoSk5J Q0FMTCAqR2V0RG91YmxlRmllbGQpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVjdCBvYmos IGpmaWVsZElEIGZpZWxkSUQpOwoKICAgIHZvaWQgKEpOSUNBTEwgKlNldE9iamVjdEZpZWxk KQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqZmllbGRJRCBmaWVsZElELCBq b2JqZWN0IHZhbCk7CiAgICB2b2lkIChKTklDQUxMICpTZXRCb29sZWFuRmllbGQpCiAgICAg IChKTklFbnYgKmVudiwgam9iamVjdCBvYmosIGpmaWVsZElEIGZpZWxkSUQsIGpib29sZWFu IHZhbCk7CiAgICB2b2lkIChKTklDQUxMICpTZXRCeXRlRmllbGQpCiAgICAgIChKTklFbnYg KmVudiwgam9iamVjdCBvYmosIGpmaWVsZElEIGZpZWxkSUQsIGpieXRlIHZhbCk7CiAgICB2 b2lkIChKTklDQUxMICpTZXRDaGFyRmllbGQpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVj dCBvYmosIGpmaWVsZElEIGZpZWxkSUQsIGpjaGFyIHZhbCk7CiAgICB2b2lkIChKTklDQUxM ICpTZXRTaG9ydEZpZWxkKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqZmll bGRJRCBmaWVsZElELCBqc2hvcnQgdmFsKTsKICAgIHZvaWQgKEpOSUNBTEwgKlNldEludEZp ZWxkKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2JqLCBqZmllbGRJRCBmaWVsZElE LCBqaW50IHZhbCk7CiAgICB2b2lkIChKTklDQUxMICpTZXRMb25nRmllbGQpCiAgICAgIChK TklFbnYgKmVudiwgam9iamVjdCBvYmosIGpmaWVsZElEIGZpZWxkSUQsIGpsb25nIHZhbCk7 CiAgICB2b2lkIChKTklDQUxMICpTZXRGbG9hdEZpZWxkKQogICAgICAoSk5JRW52ICplbnYs IGpvYmplY3Qgb2JqLCBqZmllbGRJRCBmaWVsZElELCBqZmxvYXQgdmFsKTsKICAgIHZvaWQg KEpOSUNBTEwgKlNldERvdWJsZUZpZWxkKQogICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qg b2JqLCBqZmllbGRJRCBmaWVsZElELCBqZG91YmxlIHZhbCk7CgogICAgam1ldGhvZElEIChK TklDQUxMICpHZXRTdGF0aWNNZXRob2RJRCkKICAgICAgKEpOSUVudiAqZW52LCBqY2xhc3Mg Y2xhenosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZyk7CgogICAgam9iamVj dCAoSk5JQ0FMTCAqQ2FsbFN0YXRpY09iamVjdE1ldGhvZCkKICAgICAgKEpOSUVudiAqZW52 LCBqY2xhc3MgY2xhenosIGptZXRob2RJRCBtZXRob2RJRCwgLi4uKTsKICAgIGpvYmplY3Qg KEpOSUNBTEwgKkNhbGxTdGF0aWNPYmplY3RNZXRob2RWKQogICAgICAoSk5JRW52ICplbnYs IGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhvZElELCB2YV9saXN0IGFyZ3MpOwogICAg am9iamVjdCAoSk5JQ0FMTCAqQ2FsbFN0YXRpY09iamVjdE1ldGhvZEEpCiAgICAgIChKTklF bnYgKmVudiwgamNsYXNzIGNsYXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQsIGNvbnN0IGp2YWx1 ZSAqYXJncyk7CgogICAgamJvb2xlYW4gKEpOSUNBTEwgKkNhbGxTdGF0aWNCb29sZWFuTWV0 aG9kKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhv ZElELCAuLi4pOwogICAgamJvb2xlYW4gKEpOSUNBTEwgKkNhbGxTdGF0aWNCb29sZWFuTWV0 aG9kVikKICAgICAgKEpOSUVudiAqZW52LCBqY2xhc3MgY2xhenosIGptZXRob2RJRCBtZXRo b2RJRCwgdmFfbGlzdCBhcmdzKTsKICAgIGpib29sZWFuIChKTklDQUxMICpDYWxsU3RhdGlj Qm9vbGVhbk1ldGhvZEEpCiAgICAgIChKTklFbnYgKmVudiwgamNsYXNzIGNsYXp6LCBqbWV0 aG9kSUQgbWV0aG9kSUQsIGNvbnN0IGp2YWx1ZSAqYXJncyk7CgogICAgamJ5dGUgKEpOSUNB TEwgKkNhbGxTdGF0aWNCeXRlTWV0aG9kKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBj bGF6eiwgam1ldGhvZElEIG1ldGhvZElELCAuLi4pOwogICAgamJ5dGUgKEpOSUNBTEwgKkNh bGxTdGF0aWNCeXRlTWV0aG9kVikKICAgICAgKEpOSUVudiAqZW52LCBqY2xhc3MgY2xhenos IGptZXRob2RJRCBtZXRob2RJRCwgdmFfbGlzdCBhcmdzKTsKICAgIGpieXRlIChKTklDQUxM ICpDYWxsU3RhdGljQnl0ZU1ldGhvZEEpCiAgICAgIChKTklFbnYgKmVudiwgamNsYXNzIGNs YXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQsIGNvbnN0IGp2YWx1ZSAqYXJncyk7CgogICAgamNo YXIgKEpOSUNBTEwgKkNhbGxTdGF0aWNDaGFyTWV0aG9kKQogICAgICAoSk5JRW52ICplbnYs IGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhvZElELCAuLi4pOwogICAgamNoYXIgKEpO SUNBTEwgKkNhbGxTdGF0aWNDaGFyTWV0aG9kVikKICAgICAgKEpOSUVudiAqZW52LCBqY2xh c3MgY2xhenosIGptZXRob2RJRCBtZXRob2RJRCwgdmFfbGlzdCBhcmdzKTsKICAgIGpjaGFy IChKTklDQUxMICpDYWxsU3RhdGljQ2hhck1ldGhvZEEpCiAgICAgIChKTklFbnYgKmVudiwg amNsYXNzIGNsYXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQsIGNvbnN0IGp2YWx1ZSAqYXJncyk7 CgogICAganNob3J0IChKTklDQUxMICpDYWxsU3RhdGljU2hvcnRNZXRob2QpCiAgICAgIChK TklFbnYgKmVudiwgamNsYXNzIGNsYXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQsIC4uLik7CiAg ICBqc2hvcnQgKEpOSUNBTEwgKkNhbGxTdGF0aWNTaG9ydE1ldGhvZFYpCiAgICAgIChKTklF bnYgKmVudiwgamNsYXNzIGNsYXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQsIHZhX2xpc3QgYXJn cyk7CiAgICBqc2hvcnQgKEpOSUNBTEwgKkNhbGxTdGF0aWNTaG9ydE1ldGhvZEEpCiAgICAg IChKTklFbnYgKmVudiwgamNsYXNzIGNsYXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQsIGNvbnN0 IGp2YWx1ZSAqYXJncyk7CgogICAgamludCAoSk5JQ0FMTCAqQ2FsbFN0YXRpY0ludE1ldGhv ZCkKICAgICAgKEpOSUVudiAqZW52LCBqY2xhc3MgY2xhenosIGptZXRob2RJRCBtZXRob2RJ RCwgLi4uKTsKICAgIGppbnQgKEpOSUNBTEwgKkNhbGxTdGF0aWNJbnRNZXRob2RWKQogICAg ICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhvZElELCB2YV9s aXN0IGFyZ3MpOwogICAgamludCAoSk5JQ0FMTCAqQ2FsbFN0YXRpY0ludE1ldGhvZEEpCiAg ICAgIChKTklFbnYgKmVudiwgamNsYXNzIGNsYXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQsIGNv bnN0IGp2YWx1ZSAqYXJncyk7CgogICAgamxvbmcgKEpOSUNBTEwgKkNhbGxTdGF0aWNMb25n TWV0aG9kKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1l dGhvZElELCAuLi4pOwogICAgamxvbmcgKEpOSUNBTEwgKkNhbGxTdGF0aWNMb25nTWV0aG9k VikKICAgICAgKEpOSUVudiAqZW52LCBqY2xhc3MgY2xhenosIGptZXRob2RJRCBtZXRob2RJ RCwgdmFfbGlzdCBhcmdzKTsKICAgIGpsb25nIChKTklDQUxMICpDYWxsU3RhdGljTG9uZ01l dGhvZEEpCiAgICAgIChKTklFbnYgKmVudiwgamNsYXNzIGNsYXp6LCBqbWV0aG9kSUQgbWV0 aG9kSUQsIGNvbnN0IGp2YWx1ZSAqYXJncyk7CgogICAgamZsb2F0IChKTklDQUxMICpDYWxs U3RhdGljRmxvYXRNZXRob2QpCiAgICAgIChKTklFbnYgKmVudiwgamNsYXNzIGNsYXp6LCBq bWV0aG9kSUQgbWV0aG9kSUQsIC4uLik7CiAgICBqZmxvYXQgKEpOSUNBTEwgKkNhbGxTdGF0 aWNGbG9hdE1ldGhvZFYpCiAgICAgIChKTklFbnYgKmVudiwgamNsYXNzIGNsYXp6LCBqbWV0 aG9kSUQgbWV0aG9kSUQsIHZhX2xpc3QgYXJncyk7CiAgICBqZmxvYXQgKEpOSUNBTEwgKkNh bGxTdGF0aWNGbG9hdE1ldGhvZEEpCiAgICAgIChKTklFbnYgKmVudiwgamNsYXNzIGNsYXp6 LCBqbWV0aG9kSUQgbWV0aG9kSUQsIGNvbnN0IGp2YWx1ZSAqYXJncyk7CgogICAgamRvdWJs ZSAoSk5JQ0FMTCAqQ2FsbFN0YXRpY0RvdWJsZU1ldGhvZCkKICAgICAgKEpOSUVudiAqZW52 LCBqY2xhc3MgY2xhenosIGptZXRob2RJRCBtZXRob2RJRCwgLi4uKTsKICAgIGpkb3VibGUg KEpOSUNBTEwgKkNhbGxTdGF0aWNEb3VibGVNZXRob2RWKQogICAgICAoSk5JRW52ICplbnYs IGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhvZElELCB2YV9saXN0IGFyZ3MpOwogICAg amRvdWJsZSAoSk5JQ0FMTCAqQ2FsbFN0YXRpY0RvdWJsZU1ldGhvZEEpCiAgICAgIChKTklF bnYgKmVudiwgamNsYXNzIGNsYXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQsIGNvbnN0IGp2YWx1 ZSAqYXJncyk7CgogICAgdm9pZCAoSk5JQ0FMTCAqQ2FsbFN0YXRpY1ZvaWRNZXRob2QpCiAg ICAgIChKTklFbnYgKmVudiwgamNsYXNzIGNscywgam1ldGhvZElEIG1ldGhvZElELCAuLi4p OwogICAgdm9pZCAoSk5JQ0FMTCAqQ2FsbFN0YXRpY1ZvaWRNZXRob2RWKQogICAgICAoSk5J RW52ICplbnYsIGpjbGFzcyBjbHMsIGptZXRob2RJRCBtZXRob2RJRCwgdmFfbGlzdCBhcmdz KTsKICAgIHZvaWQgKEpOSUNBTEwgKkNhbGxTdGF0aWNWb2lkTWV0aG9kQSkKICAgICAgKEpO SUVudiAqZW52LCBqY2xhc3MgY2xzLCBqbWV0aG9kSUQgbWV0aG9kSUQsIGNvbnN0IGp2YWx1 ZSAqIGFyZ3MpOwoKICAgIGpmaWVsZElEIChKTklDQUxMICpHZXRTdGF0aWNGaWVsZElEKQog ICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgY29uc3QgY2hhciAqbmFtZSwgY29u c3QgY2hhciAqc2lnKTsKICAgIGpvYmplY3QgKEpOSUNBTEwgKkdldFN0YXRpY09iamVjdEZp ZWxkKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgamZpZWxkSUQgZmllbGRJ RCk7CiAgICBqYm9vbGVhbiAoSk5JQ0FMTCAqR2V0U3RhdGljQm9vbGVhbkZpZWxkKQogICAg ICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgamZpZWxkSUQgZmllbGRJRCk7CiAgICBq Ynl0ZSAoSk5JQ0FMTCAqR2V0U3RhdGljQnl0ZUZpZWxkKQogICAgICAoSk5JRW52ICplbnYs IGpjbGFzcyBjbGF6eiwgamZpZWxkSUQgZmllbGRJRCk7CiAgICBqY2hhciAoSk5JQ0FMTCAq R2V0U3RhdGljQ2hhckZpZWxkKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwg amZpZWxkSUQgZmllbGRJRCk7CiAgICBqc2hvcnQgKEpOSUNBTEwgKkdldFN0YXRpY1Nob3J0 RmllbGQpCiAgICAgIChKTklFbnYgKmVudiwgamNsYXNzIGNsYXp6LCBqZmllbGRJRCBmaWVs ZElEKTsKICAgIGppbnQgKEpOSUNBTEwgKkdldFN0YXRpY0ludEZpZWxkKQogICAgICAoSk5J RW52ICplbnYsIGpjbGFzcyBjbGF6eiwgamZpZWxkSUQgZmllbGRJRCk7CiAgICBqbG9uZyAo Sk5JQ0FMTCAqR2V0U3RhdGljTG9uZ0ZpZWxkKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFz cyBjbGF6eiwgamZpZWxkSUQgZmllbGRJRCk7CiAgICBqZmxvYXQgKEpOSUNBTEwgKkdldFN0 YXRpY0Zsb2F0RmllbGQpCiAgICAgIChKTklFbnYgKmVudiwgamNsYXNzIGNsYXp6LCBqZmll bGRJRCBmaWVsZElEKTsKICAgIGpkb3VibGUgKEpOSUNBTEwgKkdldFN0YXRpY0RvdWJsZUZp ZWxkKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgamZpZWxkSUQgZmllbGRJ RCk7CgogICAgdm9pZCAoSk5JQ0FMTCAqU2V0U3RhdGljT2JqZWN0RmllbGQpCiAgICAgIChK TklFbnYgKmVudiwgamNsYXNzIGNsYXp6LCBqZmllbGRJRCBmaWVsZElELCBqb2JqZWN0IHZh bHVlKTsKICAgIHZvaWQgKEpOSUNBTEwgKlNldFN0YXRpY0Jvb2xlYW5GaWVsZCkKICAgICAg KEpOSUVudiAqZW52LCBqY2xhc3MgY2xhenosIGpmaWVsZElEIGZpZWxkSUQsIGpib29sZWFu IHZhbHVlKTsKICAgIHZvaWQgKEpOSUNBTEwgKlNldFN0YXRpY0J5dGVGaWVsZCkKICAgICAg KEpOSUVudiAqZW52LCBqY2xhc3MgY2xhenosIGpmaWVsZElEIGZpZWxkSUQsIGpieXRlIHZh bHVlKTsKICAgIHZvaWQgKEpOSUNBTEwgKlNldFN0YXRpY0NoYXJGaWVsZCkKICAgICAgKEpO SUVudiAqZW52LCBqY2xhc3MgY2xhenosIGpmaWVsZElEIGZpZWxkSUQsIGpjaGFyIHZhbHVl KTsKICAgIHZvaWQgKEpOSUNBTEwgKlNldFN0YXRpY1Nob3J0RmllbGQpCiAgICAgIChKTklF bnYgKmVudiwgamNsYXNzIGNsYXp6LCBqZmllbGRJRCBmaWVsZElELCBqc2hvcnQgdmFsdWUp OwogICAgdm9pZCAoSk5JQ0FMTCAqU2V0U3RhdGljSW50RmllbGQpCiAgICAgIChKTklFbnYg KmVudiwgamNsYXNzIGNsYXp6LCBqZmllbGRJRCBmaWVsZElELCBqaW50IHZhbHVlKTsKICAg IHZvaWQgKEpOSUNBTEwgKlNldFN0YXRpY0xvbmdGaWVsZCkKICAgICAgKEpOSUVudiAqZW52 LCBqY2xhc3MgY2xhenosIGpmaWVsZElEIGZpZWxkSUQsIGpsb25nIHZhbHVlKTsKICAgIHZv aWQgKEpOSUNBTEwgKlNldFN0YXRpY0Zsb2F0RmllbGQpCiAgICAgIChKTklFbnYgKmVudiwg amNsYXNzIGNsYXp6LCBqZmllbGRJRCBmaWVsZElELCBqZmxvYXQgdmFsdWUpOwogICAgdm9p ZCAoSk5JQ0FMTCAqU2V0U3RhdGljRG91YmxlRmllbGQpCiAgICAgIChKTklFbnYgKmVudiwg amNsYXNzIGNsYXp6LCBqZmllbGRJRCBmaWVsZElELCBqZG91YmxlIHZhbHVlKTsKCiAgICBq c3RyaW5nIChKTklDQUxMICpOZXdTdHJpbmcpCiAgICAgIChKTklFbnYgKmVudiwgY29uc3Qg amNoYXIgKnVuaWNvZGUsIGpzaXplIGxlbik7CiAgICBqc2l6ZSAoSk5JQ0FMTCAqR2V0U3Ry aW5nTGVuZ3RoKQogICAgICAoSk5JRW52ICplbnYsIGpzdHJpbmcgc3RyKTsKICAgIGNvbnN0 IGpjaGFyICooSk5JQ0FMTCAqR2V0U3RyaW5nQ2hhcnMpCiAgICAgIChKTklFbnYgKmVudiwg anN0cmluZyBzdHIsIGpib29sZWFuICppc0NvcHkpOwogICAgdm9pZCAoSk5JQ0FMTCAqUmVs ZWFzZVN0cmluZ0NoYXJzKQogICAgICAoSk5JRW52ICplbnYsIGpzdHJpbmcgc3RyLCBjb25z dCBqY2hhciAqY2hhcnMpOwoKICAgIGpzdHJpbmcgKEpOSUNBTEwgKk5ld1N0cmluZ1VURikK ICAgICAgKEpOSUVudiAqZW52LCBjb25zdCBjaGFyICp1dGYpOwogICAganNpemUgKEpOSUNB TEwgKkdldFN0cmluZ1VURkxlbmd0aCkKICAgICAgKEpOSUVudiAqZW52LCBqc3RyaW5nIHN0 cik7CiAgICBjb25zdCBjaGFyKiAoSk5JQ0FMTCAqR2V0U3RyaW5nVVRGQ2hhcnMpCiAgICAg IChKTklFbnYgKmVudiwganN0cmluZyBzdHIsIGpib29sZWFuICppc0NvcHkpOwogICAgdm9p ZCAoSk5JQ0FMTCAqUmVsZWFzZVN0cmluZ1VURkNoYXJzKQogICAgICAoSk5JRW52ICplbnYs IGpzdHJpbmcgc3RyLCBjb25zdCBjaGFyKiBjaGFycyk7CgoKICAgIGpzaXplIChKTklDQUxM ICpHZXRBcnJheUxlbmd0aCkKICAgICAgKEpOSUVudiAqZW52LCBqYXJyYXkgYXJyYXkpOwoK ICAgIGpvYmplY3RBcnJheSAoSk5JQ0FMTCAqTmV3T2JqZWN0QXJyYXkpCiAgICAgIChKTklF bnYgKmVudiwganNpemUgbGVuLCBqY2xhc3MgY2xhenosIGpvYmplY3QgaW5pdCk7CiAgICBq b2JqZWN0IChKTklDQUxMICpHZXRPYmplY3RBcnJheUVsZW1lbnQpCiAgICAgIChKTklFbnYg KmVudiwgam9iamVjdEFycmF5IGFycmF5LCBqc2l6ZSBpbmRleCk7CiAgICB2b2lkIChKTklD QUxMICpTZXRPYmplY3RBcnJheUVsZW1lbnQpCiAgICAgIChKTklFbnYgKmVudiwgam9iamVj dEFycmF5IGFycmF5LCBqc2l6ZSBpbmRleCwgam9iamVjdCB2YWwpOwoKICAgIGpib29sZWFu QXJyYXkgKEpOSUNBTEwgKk5ld0Jvb2xlYW5BcnJheSkKICAgICAgKEpOSUVudiAqZW52LCBq c2l6ZSBsZW4pOwogICAgamJ5dGVBcnJheSAoSk5JQ0FMTCAqTmV3Qnl0ZUFycmF5KQogICAg ICAoSk5JRW52ICplbnYsIGpzaXplIGxlbik7CiAgICBqY2hhckFycmF5IChKTklDQUxMICpO ZXdDaGFyQXJyYXkpCiAgICAgIChKTklFbnYgKmVudiwganNpemUgbGVuKTsKICAgIGpzaG9y dEFycmF5IChKTklDQUxMICpOZXdTaG9ydEFycmF5KQogICAgICAoSk5JRW52ICplbnYsIGpz aXplIGxlbik7CiAgICBqaW50QXJyYXkgKEpOSUNBTEwgKk5ld0ludEFycmF5KQogICAgICAo Sk5JRW52ICplbnYsIGpzaXplIGxlbik7CiAgICBqbG9uZ0FycmF5IChKTklDQUxMICpOZXdM b25nQXJyYXkpCiAgICAgIChKTklFbnYgKmVudiwganNpemUgbGVuKTsKICAgIGpmbG9hdEFy cmF5IChKTklDQUxMICpOZXdGbG9hdEFycmF5KQogICAgICAoSk5JRW52ICplbnYsIGpzaXpl IGxlbik7CiAgICBqZG91YmxlQXJyYXkgKEpOSUNBTEwgKk5ld0RvdWJsZUFycmF5KQogICAg ICAoSk5JRW52ICplbnYsIGpzaXplIGxlbik7CgogICAgamJvb2xlYW4gKiAoSk5JQ0FMTCAq R2V0Qm9vbGVhbkFycmF5RWxlbWVudHMpCiAgICAgIChKTklFbnYgKmVudiwgamJvb2xlYW5B cnJheSBhcnJheSwgamJvb2xlYW4gKmlzQ29weSk7CiAgICBqYnl0ZSAqIChKTklDQUxMICpH ZXRCeXRlQXJyYXlFbGVtZW50cykKICAgICAgKEpOSUVudiAqZW52LCBqYnl0ZUFycmF5IGFy cmF5LCBqYm9vbGVhbiAqaXNDb3B5KTsKICAgIGpjaGFyICogKEpOSUNBTEwgKkdldENoYXJB cnJheUVsZW1lbnRzKQogICAgICAoSk5JRW52ICplbnYsIGpjaGFyQXJyYXkgYXJyYXksIGpi b29sZWFuICppc0NvcHkpOwogICAganNob3J0ICogKEpOSUNBTEwgKkdldFNob3J0QXJyYXlF bGVtZW50cykKICAgICAgKEpOSUVudiAqZW52LCBqc2hvcnRBcnJheSBhcnJheSwgamJvb2xl YW4gKmlzQ29weSk7CiAgICBqaW50ICogKEpOSUNBTEwgKkdldEludEFycmF5RWxlbWVudHMp CiAgICAgIChKTklFbnYgKmVudiwgamludEFycmF5IGFycmF5LCBqYm9vbGVhbiAqaXNDb3B5 KTsKICAgIGpsb25nICogKEpOSUNBTEwgKkdldExvbmdBcnJheUVsZW1lbnRzKQogICAgICAo Sk5JRW52ICplbnYsIGpsb25nQXJyYXkgYXJyYXksIGpib29sZWFuICppc0NvcHkpOwogICAg amZsb2F0ICogKEpOSUNBTEwgKkdldEZsb2F0QXJyYXlFbGVtZW50cykKICAgICAgKEpOSUVu diAqZW52LCBqZmxvYXRBcnJheSBhcnJheSwgamJvb2xlYW4gKmlzQ29weSk7CiAgICBqZG91 YmxlICogKEpOSUNBTEwgKkdldERvdWJsZUFycmF5RWxlbWVudHMpCiAgICAgIChKTklFbnYg KmVudiwgamRvdWJsZUFycmF5IGFycmF5LCBqYm9vbGVhbiAqaXNDb3B5KTsKCiAgICB2b2lk IChKTklDQUxMICpSZWxlYXNlQm9vbGVhbkFycmF5RWxlbWVudHMpCiAgICAgIChKTklFbnYg KmVudiwgamJvb2xlYW5BcnJheSBhcnJheSwgamJvb2xlYW4gKmVsZW1zLCBqaW50IG1vZGUp OwogICAgdm9pZCAoSk5JQ0FMTCAqUmVsZWFzZUJ5dGVBcnJheUVsZW1lbnRzKQogICAgICAo Sk5JRW52ICplbnYsIGpieXRlQXJyYXkgYXJyYXksIGpieXRlICplbGVtcywgamludCBtb2Rl KTsKICAgIHZvaWQgKEpOSUNBTEwgKlJlbGVhc2VDaGFyQXJyYXlFbGVtZW50cykKICAgICAg KEpOSUVudiAqZW52LCBqY2hhckFycmF5IGFycmF5LCBqY2hhciAqZWxlbXMsIGppbnQgbW9k ZSk7CiAgICB2b2lkIChKTklDQUxMICpSZWxlYXNlU2hvcnRBcnJheUVsZW1lbnRzKQogICAg ICAoSk5JRW52ICplbnYsIGpzaG9ydEFycmF5IGFycmF5LCBqc2hvcnQgKmVsZW1zLCBqaW50 IG1vZGUpOwogICAgdm9pZCAoSk5JQ0FMTCAqUmVsZWFzZUludEFycmF5RWxlbWVudHMpCiAg ICAgIChKTklFbnYgKmVudiwgamludEFycmF5IGFycmF5LCBqaW50ICplbGVtcywgamludCBt b2RlKTsKICAgIHZvaWQgKEpOSUNBTEwgKlJlbGVhc2VMb25nQXJyYXlFbGVtZW50cykKICAg ICAgKEpOSUVudiAqZW52LCBqbG9uZ0FycmF5IGFycmF5LCBqbG9uZyAqZWxlbXMsIGppbnQg bW9kZSk7CiAgICB2b2lkIChKTklDQUxMICpSZWxlYXNlRmxvYXRBcnJheUVsZW1lbnRzKQog ICAgICAoSk5JRW52ICplbnYsIGpmbG9hdEFycmF5IGFycmF5LCBqZmxvYXQgKmVsZW1zLCBq aW50IG1vZGUpOwogICAgdm9pZCAoSk5JQ0FMTCAqUmVsZWFzZURvdWJsZUFycmF5RWxlbWVu dHMpCiAgICAgIChKTklFbnYgKmVudiwgamRvdWJsZUFycmF5IGFycmF5LCBqZG91YmxlICpl bGVtcywgamludCBtb2RlKTsKCiAgICB2b2lkIChKTklDQUxMICpHZXRCb29sZWFuQXJyYXlS ZWdpb24pCiAgICAgIChKTklFbnYgKmVudiwgamJvb2xlYW5BcnJheSBhcnJheSwganNpemUg c3RhcnQsIGpzaXplIGwsIGpib29sZWFuICpidWYpOwogICAgdm9pZCAoSk5JQ0FMTCAqR2V0 Qnl0ZUFycmF5UmVnaW9uKQogICAgICAoSk5JRW52ICplbnYsIGpieXRlQXJyYXkgYXJyYXks IGpzaXplIHN0YXJ0LCBqc2l6ZSBsZW4sIGpieXRlICpidWYpOwogICAgdm9pZCAoSk5JQ0FM TCAqR2V0Q2hhckFycmF5UmVnaW9uKQogICAgICAoSk5JRW52ICplbnYsIGpjaGFyQXJyYXkg YXJyYXksIGpzaXplIHN0YXJ0LCBqc2l6ZSBsZW4sIGpjaGFyICpidWYpOwogICAgdm9pZCAo Sk5JQ0FMTCAqR2V0U2hvcnRBcnJheVJlZ2lvbikKICAgICAgKEpOSUVudiAqZW52LCBqc2hv cnRBcnJheSBhcnJheSwganNpemUgc3RhcnQsIGpzaXplIGxlbiwganNob3J0ICpidWYpOwog ICAgdm9pZCAoSk5JQ0FMTCAqR2V0SW50QXJyYXlSZWdpb24pCiAgICAgIChKTklFbnYgKmVu diwgamludEFycmF5IGFycmF5LCBqc2l6ZSBzdGFydCwganNpemUgbGVuLCBqaW50ICpidWYp OwogICAgdm9pZCAoSk5JQ0FMTCAqR2V0TG9uZ0FycmF5UmVnaW9uKQogICAgICAoSk5JRW52 ICplbnYsIGpsb25nQXJyYXkgYXJyYXksIGpzaXplIHN0YXJ0LCBqc2l6ZSBsZW4sIGpsb25n ICpidWYpOwogICAgdm9pZCAoSk5JQ0FMTCAqR2V0RmxvYXRBcnJheVJlZ2lvbikKICAgICAg KEpOSUVudiAqZW52LCBqZmxvYXRBcnJheSBhcnJheSwganNpemUgc3RhcnQsIGpzaXplIGxl biwgamZsb2F0ICpidWYpOwogICAgdm9pZCAoSk5JQ0FMTCAqR2V0RG91YmxlQXJyYXlSZWdp b24pCiAgICAgIChKTklFbnYgKmVudiwgamRvdWJsZUFycmF5IGFycmF5LCBqc2l6ZSBzdGFy dCwganNpemUgbGVuLCBqZG91YmxlICpidWYpOwoKICAgIHZvaWQgKEpOSUNBTEwgKlNldEJv b2xlYW5BcnJheVJlZ2lvbikKICAgICAgKEpOSUVudiAqZW52LCBqYm9vbGVhbkFycmF5IGFy cmF5LCBqc2l6ZSBzdGFydCwganNpemUgbCwgY29uc3QgamJvb2xlYW4gKmJ1Zik7CiAgICB2 b2lkIChKTklDQUxMICpTZXRCeXRlQXJyYXlSZWdpb24pCiAgICAgIChKTklFbnYgKmVudiwg amJ5dGVBcnJheSBhcnJheSwganNpemUgc3RhcnQsIGpzaXplIGxlbiwgY29uc3QgamJ5dGUg KmJ1Zik7CiAgICB2b2lkIChKTklDQUxMICpTZXRDaGFyQXJyYXlSZWdpb24pCiAgICAgIChK TklFbnYgKmVudiwgamNoYXJBcnJheSBhcnJheSwganNpemUgc3RhcnQsIGpzaXplIGxlbiwg Y29uc3QgamNoYXIgKmJ1Zik7CiAgICB2b2lkIChKTklDQUxMICpTZXRTaG9ydEFycmF5UmVn aW9uKQogICAgICAoSk5JRW52ICplbnYsIGpzaG9ydEFycmF5IGFycmF5LCBqc2l6ZSBzdGFy dCwganNpemUgbGVuLCBjb25zdCBqc2hvcnQgKmJ1Zik7CiAgICB2b2lkIChKTklDQUxMICpT ZXRJbnRBcnJheVJlZ2lvbikKICAgICAgKEpOSUVudiAqZW52LCBqaW50QXJyYXkgYXJyYXks IGpzaXplIHN0YXJ0LCBqc2l6ZSBsZW4sIGNvbnN0IGppbnQgKmJ1Zik7CiAgICB2b2lkIChK TklDQUxMICpTZXRMb25nQXJyYXlSZWdpb24pCiAgICAgIChKTklFbnYgKmVudiwgamxvbmdB cnJheSBhcnJheSwganNpemUgc3RhcnQsIGpzaXplIGxlbiwgY29uc3QgamxvbmcgKmJ1Zik7 CiAgICB2b2lkIChKTklDQUxMICpTZXRGbG9hdEFycmF5UmVnaW9uKQogICAgICAoSk5JRW52 ICplbnYsIGpmbG9hdEFycmF5IGFycmF5LCBqc2l6ZSBzdGFydCwganNpemUgbGVuLCBjb25z dCBqZmxvYXQgKmJ1Zik7CiAgICB2b2lkIChKTklDQUxMICpTZXREb3VibGVBcnJheVJlZ2lv bikKICAgICAgKEpOSUVudiAqZW52LCBqZG91YmxlQXJyYXkgYXJyYXksIGpzaXplIHN0YXJ0 LCBqc2l6ZSBsZW4sIGNvbnN0IGpkb3VibGUgKmJ1Zik7CgogICAgamludCAoSk5JQ0FMTCAq UmVnaXN0ZXJOYXRpdmVzKQogICAgICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eiwgY29u c3QgSk5JTmF0aXZlTWV0aG9kICptZXRob2RzLAogICAgICAgamludCBuTWV0aG9kcyk7CiAg ICBqaW50IChKTklDQUxMICpVbnJlZ2lzdGVyTmF0aXZlcykKICAgICAgKEpOSUVudiAqZW52 LCBqY2xhc3MgY2xhenopOwoKICAgIGppbnQgKEpOSUNBTEwgKk1vbml0b3JFbnRlcikKICAg ICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaik7CiAgICBqaW50IChKTklDQUxMICpNb25p dG9yRXhpdCkKICAgICAgKEpOSUVudiAqZW52LCBqb2JqZWN0IG9iaik7CgogICAgamludCAo Sk5JQ0FMTCAqR2V0SmF2YVZNKQogICAgICAoSk5JRW52ICplbnYsIEphdmFWTSAqKnZtKTsK CiAgICB2b2lkIChKTklDQUxMICpHZXRTdHJpbmdSZWdpb24pCiAgICAgIChKTklFbnYgKmVu diwganN0cmluZyBzdHIsIGpzaXplIHN0YXJ0LCBqc2l6ZSBsZW4sIGpjaGFyICpidWYpOwog ICAgdm9pZCAoSk5JQ0FMTCAqR2V0U3RyaW5nVVRGUmVnaW9uKQogICAgICAoSk5JRW52ICpl bnYsIGpzdHJpbmcgc3RyLCBqc2l6ZSBzdGFydCwganNpemUgbGVuLCBjaGFyICpidWYpOwoK ICAgIHZvaWQgKiAoSk5JQ0FMTCAqR2V0UHJpbWl0aXZlQXJyYXlDcml0aWNhbCkKICAgICAg KEpOSUVudiAqZW52LCBqYXJyYXkgYXJyYXksIGpib29sZWFuICppc0NvcHkpOwogICAgdm9p ZCAoSk5JQ0FMTCAqUmVsZWFzZVByaW1pdGl2ZUFycmF5Q3JpdGljYWwpCiAgICAgIChKTklF bnYgKmVudiwgamFycmF5IGFycmF5LCB2b2lkICpjYXJyYXksIGppbnQgbW9kZSk7CgogICAg Y29uc3QgamNoYXIgKiAoSk5JQ0FMTCAqR2V0U3RyaW5nQ3JpdGljYWwpCiAgICAgIChKTklF bnYgKmVudiwganN0cmluZyBzdHJpbmcsIGpib29sZWFuICppc0NvcHkpOwogICAgdm9pZCAo Sk5JQ0FMTCAqUmVsZWFzZVN0cmluZ0NyaXRpY2FsKQogICAgICAoSk5JRW52ICplbnYsIGpz dHJpbmcgc3RyaW5nLCBjb25zdCBqY2hhciAqY3N0cmluZyk7CgogICAgandlYWsgKEpOSUNB TEwgKk5ld1dlYWtHbG9iYWxSZWYpCiAgICAgICAoSk5JRW52ICplbnYsIGpvYmplY3Qgb2Jq KTsKICAgIHZvaWQgKEpOSUNBTEwgKkRlbGV0ZVdlYWtHbG9iYWxSZWYpCiAgICAgICAoSk5J RW52ICplbnYsIGp3ZWFrIHJlZik7CgogICAgamJvb2xlYW4gKEpOSUNBTEwgKkV4Y2VwdGlv bkNoZWNrKQogICAgICAgKEpOSUVudiAqZW52KTsKCiAgICBqb2JqZWN0IChKTklDQUxMICpO ZXdEaXJlY3RCeXRlQnVmZmVyKQogICAgICAgKEpOSUVudiogZW52LCB2b2lkKiBhZGRyZXNz LCBqbG9uZyBjYXBhY2l0eSk7CiAgICB2b2lkKiAoSk5JQ0FMTCAqR2V0RGlyZWN0QnVmZmVy QWRkcmVzcykKICAgICAgIChKTklFbnYqIGVudiwgam9iamVjdCBidWYpOwogICAgamxvbmcg KEpOSUNBTEwgKkdldERpcmVjdEJ1ZmZlckNhcGFjaXR5KQogICAgICAgKEpOSUVudiogZW52 LCBqb2JqZWN0IGJ1Zik7CgogICAgLyogTmV3IEpOSSAxLjYgRmVhdHVyZXMgKi8KCiAgICBq b2JqZWN0UmVmVHlwZSAoSk5JQ0FMTCAqR2V0T2JqZWN0UmVmVHlwZSkKICAgICAgICAoSk5J RW52KiBlbnYsIGpvYmplY3Qgb2JqKTsKfTsKCi8qCiAqIFdlIHVzZSBpbmxpbmVkIGZ1bmN0 aW9ucyBmb3IgQysrIHNvIHRoYXQgcHJvZ3JhbW1lcnMgY2FuIHdyaXRlOgogKgogKiAgICBl bnYtPkZpbmRDbGFzcygiamF2YS9sYW5nL1N0cmluZyIpCiAqCiAqIGluIEMrKyByYXRoZXIg dGhhbjoKICoKICogICAgKCplbnYpLT5GaW5kQ2xhc3MoZW52LCAiamF2YS9sYW5nL1N0cmlu ZyIpCiAqCiAqIGluIEMuCiAqLwoKc3RydWN0IEpOSUVudl8gewogICAgY29uc3Qgc3RydWN0 IEpOSU5hdGl2ZUludGVyZmFjZV8gKmZ1bmN0aW9uczsKI2lmZGVmIF9fY3BsdXNwbHVzCgog ICAgamludCBHZXRWZXJzaW9uKCkgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkdldFZl cnNpb24odGhpcyk7CiAgICB9CiAgICBqY2xhc3MgRGVmaW5lQ2xhc3MoY29uc3QgY2hhciAq bmFtZSwgam9iamVjdCBsb2FkZXIsIGNvbnN0IGpieXRlICpidWYsCiAgICAgICAgICAgICAg ICAgICAgICAganNpemUgbGVuKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+RGVmaW5l Q2xhc3ModGhpcywgbmFtZSwgbG9hZGVyLCBidWYsIGxlbik7CiAgICB9CiAgICBqY2xhc3Mg RmluZENsYXNzKGNvbnN0IGNoYXIgKm5hbWUpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25z LT5GaW5kQ2xhc3ModGhpcywgbmFtZSk7CiAgICB9CiAgICBqbWV0aG9kSUQgRnJvbVJlZmxl Y3RlZE1ldGhvZChqb2JqZWN0IG1ldGhvZCkgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMt PkZyb21SZWZsZWN0ZWRNZXRob2QodGhpcyxtZXRob2QpOwogICAgfQogICAgamZpZWxkSUQg RnJvbVJlZmxlY3RlZEZpZWxkKGpvYmplY3QgZmllbGQpIHsKICAgICAgICByZXR1cm4gZnVu Y3Rpb25zLT5Gcm9tUmVmbGVjdGVkRmllbGQodGhpcyxmaWVsZCk7CiAgICB9CgogICAgam9i amVjdCBUb1JlZmxlY3RlZE1ldGhvZChqY2xhc3MgY2xzLCBqbWV0aG9kSUQgbWV0aG9kSUQs IGpib29sZWFuIGlzU3RhdGljKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+VG9SZWZs ZWN0ZWRNZXRob2QodGhpcywgY2xzLCBtZXRob2RJRCwgaXNTdGF0aWMpOwogICAgfQoKICAg IGpjbGFzcyBHZXRTdXBlcmNsYXNzKGpjbGFzcyBzdWIpIHsKICAgICAgICByZXR1cm4gZnVu Y3Rpb25zLT5HZXRTdXBlcmNsYXNzKHRoaXMsIHN1Yik7CiAgICB9CiAgICBqYm9vbGVhbiBJ c0Fzc2lnbmFibGVGcm9tKGpjbGFzcyBzdWIsIGpjbGFzcyBzdXApIHsKICAgICAgICByZXR1 cm4gZnVuY3Rpb25zLT5Jc0Fzc2lnbmFibGVGcm9tKHRoaXMsIHN1Yiwgc3VwKTsKICAgIH0K CiAgICBqb2JqZWN0IFRvUmVmbGVjdGVkRmllbGQoamNsYXNzIGNscywgamZpZWxkSUQgZmll bGRJRCwgamJvb2xlYW4gaXNTdGF0aWMpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5U b1JlZmxlY3RlZEZpZWxkKHRoaXMsY2xzLGZpZWxkSUQsaXNTdGF0aWMpOwogICAgfQoKICAg IGppbnQgVGhyb3coanRocm93YWJsZSBvYmopIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25z LT5UaHJvdyh0aGlzLCBvYmopOwogICAgfQogICAgamludCBUaHJvd05ldyhqY2xhc3MgY2xh enosIGNvbnN0IGNoYXIgKm1zZykgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPlRocm93 TmV3KHRoaXMsIGNsYXp6LCBtc2cpOwogICAgfQogICAganRocm93YWJsZSBFeGNlcHRpb25P Y2N1cnJlZCgpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5FeGNlcHRpb25PY2N1cnJl ZCh0aGlzKTsKICAgIH0KICAgIHZvaWQgRXhjZXB0aW9uRGVzY3JpYmUoKSB7CiAgICAgICAg ZnVuY3Rpb25zLT5FeGNlcHRpb25EZXNjcmliZSh0aGlzKTsKICAgIH0KICAgIHZvaWQgRXhj ZXB0aW9uQ2xlYXIoKSB7CiAgICAgICAgZnVuY3Rpb25zLT5FeGNlcHRpb25DbGVhcih0aGlz KTsKICAgIH0KICAgIHZvaWQgRmF0YWxFcnJvcihjb25zdCBjaGFyICptc2cpIHsKICAgICAg ICBmdW5jdGlvbnMtPkZhdGFsRXJyb3IodGhpcywgbXNnKTsKICAgIH0KCiAgICBqaW50IFB1 c2hMb2NhbEZyYW1lKGppbnQgY2FwYWNpdHkpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25z LT5QdXNoTG9jYWxGcmFtZSh0aGlzLGNhcGFjaXR5KTsKICAgIH0KICAgIGpvYmplY3QgUG9w TG9jYWxGcmFtZShqb2JqZWN0IHJlc3VsdCkgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMt PlBvcExvY2FsRnJhbWUodGhpcyxyZXN1bHQpOwogICAgfQoKICAgIGpvYmplY3QgTmV3R2xv YmFsUmVmKGpvYmplY3QgbG9iaikgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPk5ld0ds b2JhbFJlZih0aGlzLGxvYmopOwogICAgfQogICAgdm9pZCBEZWxldGVHbG9iYWxSZWYoam9i amVjdCBncmVmKSB7CiAgICAgICAgZnVuY3Rpb25zLT5EZWxldGVHbG9iYWxSZWYodGhpcyxn cmVmKTsKICAgIH0KICAgIHZvaWQgRGVsZXRlTG9jYWxSZWYoam9iamVjdCBvYmopIHsKICAg ICAgICBmdW5jdGlvbnMtPkRlbGV0ZUxvY2FsUmVmKHRoaXMsIG9iaik7CiAgICB9CgogICAg amJvb2xlYW4gSXNTYW1lT2JqZWN0KGpvYmplY3Qgb2JqMSwgam9iamVjdCBvYmoyKSB7CiAg ICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+SXNTYW1lT2JqZWN0KHRoaXMsb2JqMSxvYmoyKTsK ICAgIH0KCiAgICBqb2JqZWN0IE5ld0xvY2FsUmVmKGpvYmplY3QgcmVmKSB7CiAgICAgICAg cmV0dXJuIGZ1bmN0aW9ucy0+TmV3TG9jYWxSZWYodGhpcyxyZWYpOwogICAgfQogICAgamlu dCBFbnN1cmVMb2NhbENhcGFjaXR5KGppbnQgY2FwYWNpdHkpIHsKICAgICAgICByZXR1cm4g ZnVuY3Rpb25zLT5FbnN1cmVMb2NhbENhcGFjaXR5KHRoaXMsY2FwYWNpdHkpOwogICAgfQoK ICAgIGpvYmplY3QgQWxsb2NPYmplY3QoamNsYXNzIGNsYXp6KSB7CiAgICAgICAgcmV0dXJu IGZ1bmN0aW9ucy0+QWxsb2NPYmplY3QodGhpcyxjbGF6eik7CiAgICB9CiAgICBqb2JqZWN0 IE5ld09iamVjdChqY2xhc3MgY2xhenosIGptZXRob2RJRCBtZXRob2RJRCwgLi4uKSB7CiAg ICAgICAgdmFfbGlzdCBhcmdzOwogICAgICAgIGpvYmplY3QgcmVzdWx0OwogICAgICAgIHZh X3N0YXJ0KGFyZ3MsIG1ldGhvZElEKTsKICAgICAgICByZXN1bHQgPSBmdW5jdGlvbnMtPk5l d09iamVjdFYodGhpcyxjbGF6eixtZXRob2RJRCxhcmdzKTsKICAgICAgICB2YV9lbmQoYXJn cyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGpvYmplY3QgTmV3T2JqZWN0 VihqY2xhc3MgY2xhenosIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAgICAgICAgICAgICAg ICAgICB2YV9saXN0IGFyZ3MpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5OZXdPYmpl Y3RWKHRoaXMsY2xhenosbWV0aG9kSUQsYXJncyk7CiAgICB9CiAgICBqb2JqZWN0IE5ld09i amVjdEEoamNsYXNzIGNsYXp6LCBqbWV0aG9kSUQgbWV0aG9kSUQsCiAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QganZhbHVlICphcmdzKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9u cy0+TmV3T2JqZWN0QSh0aGlzLGNsYXp6LG1ldGhvZElELGFyZ3MpOwogICAgfQoKICAgIGpj bGFzcyBHZXRPYmplY3RDbGFzcyhqb2JqZWN0IG9iaikgewogICAgICAgIHJldHVybiBmdW5j dGlvbnMtPkdldE9iamVjdENsYXNzKHRoaXMsb2JqKTsKICAgIH0KICAgIGpib29sZWFuIElz SW5zdGFuY2VPZihqb2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6KSB7CiAgICAgICAgcmV0dXJu IGZ1bmN0aW9ucy0+SXNJbnN0YW5jZU9mKHRoaXMsb2JqLGNsYXp6KTsKICAgIH0KCiAgICBq bWV0aG9kSUQgR2V0TWV0aG9kSUQoamNsYXNzIGNsYXp6LCBjb25zdCBjaGFyICpuYW1lLAog ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnNpZykgewogICAgICAgIHJl dHVybiBmdW5jdGlvbnMtPkdldE1ldGhvZElEKHRoaXMsY2xhenosbmFtZSxzaWcpOwogICAg fQoKICAgIGpvYmplY3QgQ2FsbE9iamVjdE1ldGhvZChqb2JqZWN0IG9iaiwgam1ldGhvZElE IG1ldGhvZElELCAuLi4pIHsKICAgICAgICB2YV9saXN0IGFyZ3M7CiAgICAgICAgam9iamVj dCByZXN1bHQ7CiAgICAgICAgdmFfc3RhcnQoYXJncyxtZXRob2RJRCk7CiAgICAgICAgcmVz dWx0ID0gZnVuY3Rpb25zLT5DYWxsT2JqZWN0TWV0aG9kVih0aGlzLG9iaixtZXRob2RJRCxh cmdzKTsKICAgICAgICB2YV9lbmQoYXJncyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg IH0KICAgIGpvYmplY3QgQ2FsbE9iamVjdE1ldGhvZFYoam9iamVjdCBvYmosIGptZXRob2RJ RCBtZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCBhcmdzKSB7CiAg ICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+Q2FsbE9iamVjdE1ldGhvZFYodGhpcyxvYmosbWV0 aG9kSUQsYXJncyk7CiAgICB9CiAgICBqb2JqZWN0IENhbGxPYmplY3RNZXRob2RBKGpvYmpl Y3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IGp2YWx1ZSAqIGFyZ3MpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5DYWxsT2Jq ZWN0TWV0aG9kQSh0aGlzLG9iaixtZXRob2RJRCxhcmdzKTsKICAgIH0KCiAgICBqYm9vbGVh biBDYWxsQm9vbGVhbk1ldGhvZChqb2JqZWN0IG9iaiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwgLi4uKSB7CiAgICAgICAgdmFfbGlzdCBh cmdzOwogICAgICAgIGpib29sZWFuIHJlc3VsdDsKICAgICAgICB2YV9zdGFydChhcmdzLG1l dGhvZElEKTsKICAgICAgICByZXN1bHQgPSBmdW5jdGlvbnMtPkNhbGxCb29sZWFuTWV0aG9k Vih0aGlzLG9iaixtZXRob2RJRCxhcmdzKTsKICAgICAgICB2YV9lbmQoYXJncyk7CiAgICAg ICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGpib29sZWFuIENhbGxCb29sZWFuTWV0aG9k Vihqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHZhX2xpc3QgYXJncykgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMt PkNhbGxCb29sZWFuTWV0aG9kVih0aGlzLG9iaixtZXRob2RJRCxhcmdzKTsKICAgIH0KICAg IGpib29sZWFuIENhbGxCb29sZWFuTWV0aG9kQShqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1l dGhvZElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGp2YWx1ZSAq IGFyZ3MpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5DYWxsQm9vbGVhbk1ldGhvZEEo dGhpcyxvYmosbWV0aG9kSUQsIGFyZ3MpOwogICAgfQoKICAgIGpieXRlIENhbGxCeXRlTWV0 aG9kKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsIC4uLikgewogICAgICAgIHZh X2xpc3QgYXJnczsKICAgICAgICBqYnl0ZSByZXN1bHQ7CiAgICAgICAgdmFfc3RhcnQoYXJn cyxtZXRob2RJRCk7CiAgICAgICAgcmVzdWx0ID0gZnVuY3Rpb25zLT5DYWxsQnl0ZU1ldGhv ZFYodGhpcyxvYmosbWV0aG9kSUQsYXJncyk7CiAgICAgICAgdmFfZW5kKGFyZ3MpOwogICAg ICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBqYnl0ZSBDYWxsQnl0ZU1ldGhvZFYoam9i amVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAg ICB2YV9saXN0IGFyZ3MpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5DYWxsQnl0ZU1l dGhvZFYodGhpcyxvYmosbWV0aG9kSUQsYXJncyk7CiAgICB9CiAgICBqYnl0ZSBDYWxsQnl0 ZU1ldGhvZEEoam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBqdmFsdWUgKiBhcmdzKSB7CiAgICAgICAgcmV0dXJuIGZ1 bmN0aW9ucy0+Q2FsbEJ5dGVNZXRob2RBKHRoaXMsb2JqLG1ldGhvZElELGFyZ3MpOwogICAg fQoKICAgIGpjaGFyIENhbGxDaGFyTWV0aG9kKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0 aG9kSUQsIC4uLikgewogICAgICAgIHZhX2xpc3QgYXJnczsKICAgICAgICBqY2hhciByZXN1 bHQ7CiAgICAgICAgdmFfc3RhcnQoYXJncyxtZXRob2RJRCk7CiAgICAgICAgcmVzdWx0ID0g ZnVuY3Rpb25zLT5DYWxsQ2hhck1ldGhvZFYodGhpcyxvYmosbWV0aG9kSUQsYXJncyk7CiAg ICAgICAgdmFfZW5kKGFyZ3MpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBq Y2hhciBDYWxsQ2hhck1ldGhvZFYoam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwK ICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0IGFyZ3MpIHsKICAgICAgICByZXR1 cm4gZnVuY3Rpb25zLT5DYWxsQ2hhck1ldGhvZFYodGhpcyxvYmosbWV0aG9kSUQsYXJncyk7 CiAgICB9CiAgICBqY2hhciBDYWxsQ2hhck1ldGhvZEEoam9iamVjdCBvYmosIGptZXRob2RJ RCBtZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBqdmFsdWUgKiBh cmdzKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+Q2FsbENoYXJNZXRob2RBKHRoaXMs b2JqLG1ldGhvZElELGFyZ3MpOwogICAgfQoKICAgIGpzaG9ydCBDYWxsU2hvcnRNZXRob2Qo am9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwgLi4uKSB7CiAgICAgICAgdmFfbGlz dCBhcmdzOwogICAgICAgIGpzaG9ydCByZXN1bHQ7CiAgICAgICAgdmFfc3RhcnQoYXJncyxt ZXRob2RJRCk7CiAgICAgICAgcmVzdWx0ID0gZnVuY3Rpb25zLT5DYWxsU2hvcnRNZXRob2RW KHRoaXMsb2JqLG1ldGhvZElELGFyZ3MpOwogICAgICAgIHZhX2VuZChhcmdzKTsKICAgICAg ICByZXR1cm4gcmVzdWx0OwogICAgfQogICAganNob3J0IENhbGxTaG9ydE1ldGhvZFYoam9i amVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHZhX2xpc3QgYXJncykgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkNhbGxTaG9y dE1ldGhvZFYodGhpcyxvYmosbWV0aG9kSUQsYXJncyk7CiAgICB9CiAgICBqc2hvcnQgQ2Fs bFNob3J0TWV0aG9kQShqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QganZhbHVlICogYXJncykgewogICAgICAgIHJl dHVybiBmdW5jdGlvbnMtPkNhbGxTaG9ydE1ldGhvZEEodGhpcyxvYmosbWV0aG9kSUQsYXJn cyk7CiAgICB9CgogICAgamludCBDYWxsSW50TWV0aG9kKGpvYmplY3Qgb2JqLCBqbWV0aG9k SUQgbWV0aG9kSUQsIC4uLikgewogICAgICAgIHZhX2xpc3QgYXJnczsKICAgICAgICBqaW50 IHJlc3VsdDsKICAgICAgICB2YV9zdGFydChhcmdzLG1ldGhvZElEKTsKICAgICAgICByZXN1 bHQgPSBmdW5jdGlvbnMtPkNhbGxJbnRNZXRob2RWKHRoaXMsb2JqLG1ldGhvZElELGFyZ3Mp OwogICAgICAgIHZhX2VuZChhcmdzKTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfQog ICAgamludCBDYWxsSW50TWV0aG9kVihqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElE LAogICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0IGFyZ3MpIHsKICAgICAgICByZXR1 cm4gZnVuY3Rpb25zLT5DYWxsSW50TWV0aG9kVih0aGlzLG9iaixtZXRob2RJRCxhcmdzKTsK ICAgIH0KICAgIGppbnQgQ2FsbEludE1ldGhvZEEoam9iamVjdCBvYmosIGptZXRob2RJRCBt ZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QganZhbHVlICogYXJncykg ewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkNhbGxJbnRNZXRob2RBKHRoaXMsb2JqLG1l dGhvZElELGFyZ3MpOwogICAgfQoKICAgIGpsb25nIENhbGxMb25nTWV0aG9kKGpvYmplY3Qg b2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsIC4uLikgewogICAgICAgIHZhX2xpc3QgYXJnczsK ICAgICAgICBqbG9uZyByZXN1bHQ7CiAgICAgICAgdmFfc3RhcnQoYXJncyxtZXRob2RJRCk7 CiAgICAgICAgcmVzdWx0ID0gZnVuY3Rpb25zLT5DYWxsTG9uZ01ldGhvZFYodGhpcyxvYmos bWV0aG9kSUQsYXJncyk7CiAgICAgICAgdmFfZW5kKGFyZ3MpOwogICAgICAgIHJldHVybiBy ZXN1bHQ7CiAgICB9CiAgICBqbG9uZyBDYWxsTG9uZ01ldGhvZFYoam9iamVjdCBvYmosIGpt ZXRob2RJRCBtZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0IGFy Z3MpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5DYWxsTG9uZ01ldGhvZFYodGhpcyxv YmosbWV0aG9kSUQsYXJncyk7CiAgICB9CiAgICBqbG9uZyBDYWxsTG9uZ01ldGhvZEEoam9i amVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBqdmFsdWUgKiBhcmdzKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+Q2Fs bExvbmdNZXRob2RBKHRoaXMsb2JqLG1ldGhvZElELGFyZ3MpOwogICAgfQoKICAgIGpmbG9h dCBDYWxsRmxvYXRNZXRob2Qoam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwgLi4u KSB7CiAgICAgICAgdmFfbGlzdCBhcmdzOwogICAgICAgIGpmbG9hdCByZXN1bHQ7CiAgICAg ICAgdmFfc3RhcnQoYXJncyxtZXRob2RJRCk7CiAgICAgICAgcmVzdWx0ID0gZnVuY3Rpb25z LT5DYWxsRmxvYXRNZXRob2RWKHRoaXMsb2JqLG1ldGhvZElELGFyZ3MpOwogICAgICAgIHZh X2VuZChhcmdzKTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgamZsb2F0IENh bGxGbG9hdE1ldGhvZFYoam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QgYXJncykgewogICAgICAgIHJldHVybiBm dW5jdGlvbnMtPkNhbGxGbG9hdE1ldGhvZFYodGhpcyxvYmosbWV0aG9kSUQsYXJncyk7CiAg ICB9CiAgICBqZmxvYXQgQ2FsbEZsb2F0TWV0aG9kQShqb2JqZWN0IG9iaiwgam1ldGhvZElE IG1ldGhvZElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QganZhbHVlICog YXJncykgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkNhbGxGbG9hdE1ldGhvZEEodGhp cyxvYmosbWV0aG9kSUQsYXJncyk7CiAgICB9CgogICAgamRvdWJsZSBDYWxsRG91YmxlTWV0 aG9kKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWV0aG9kSUQsIC4uLikgewogICAgICAgIHZh X2xpc3QgYXJnczsKICAgICAgICBqZG91YmxlIHJlc3VsdDsKICAgICAgICB2YV9zdGFydChh cmdzLG1ldGhvZElEKTsKICAgICAgICByZXN1bHQgPSBmdW5jdGlvbnMtPkNhbGxEb3VibGVN ZXRob2RWKHRoaXMsb2JqLG1ldGhvZElELGFyZ3MpOwogICAgICAgIHZhX2VuZChhcmdzKTsK ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgamRvdWJsZSBDYWxsRG91YmxlTWV0 aG9kVihqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1ldGhvZElELAogICAgICAgICAgICAgICAg ICAgICAgICB2YV9saXN0IGFyZ3MpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5DYWxs RG91YmxlTWV0aG9kVih0aGlzLG9iaixtZXRob2RJRCxhcmdzKTsKICAgIH0KICAgIGpkb3Vi bGUgQ2FsbERvdWJsZU1ldGhvZEEoam9iamVjdCBvYmosIGptZXRob2RJRCBtZXRob2RJRCwK ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QganZhbHVlICogYXJncykgewogICAgICAg IHJldHVybiBmdW5jdGlvbnMtPkNhbGxEb3VibGVNZXRob2RBKHRoaXMsb2JqLG1ldGhvZElE LGFyZ3MpOwogICAgfQoKICAgIHZvaWQgQ2FsbFZvaWRNZXRob2Qoam9iamVjdCBvYmosIGpt ZXRob2RJRCBtZXRob2RJRCwgLi4uKSB7CiAgICAgICAgdmFfbGlzdCBhcmdzOwogICAgICAg IHZhX3N0YXJ0KGFyZ3MsbWV0aG9kSUQpOwogICAgICAgIGZ1bmN0aW9ucy0+Q2FsbFZvaWRN ZXRob2RWKHRoaXMsb2JqLG1ldGhvZElELGFyZ3MpOwogICAgICAgIHZhX2VuZChhcmdzKTsK ICAgIH0KICAgIHZvaWQgQ2FsbFZvaWRNZXRob2RWKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQg bWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0IGFyZ3MpIHsKICAg ICAgICBmdW5jdGlvbnMtPkNhbGxWb2lkTWV0aG9kVih0aGlzLG9iaixtZXRob2RJRCxhcmdz KTsKICAgIH0KICAgIHZvaWQgQ2FsbFZvaWRNZXRob2RBKGpvYmplY3Qgb2JqLCBqbWV0aG9k SUQgbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBqdmFsdWUgKiBh cmdzKSB7CiAgICAgICAgZnVuY3Rpb25zLT5DYWxsVm9pZE1ldGhvZEEodGhpcyxvYmosbWV0 aG9kSUQsYXJncyk7CiAgICB9CgogICAgam9iamVjdCBDYWxsTm9udmlydHVhbE9iamVjdE1l dGhvZChqb2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBqbWV0aG9kSUQgbWV0aG9kSUQsIC4uLikgewogICAgICAgIHZh X2xpc3QgYXJnczsKICAgICAgICBqb2JqZWN0IHJlc3VsdDsKICAgICAgICB2YV9zdGFydChh cmdzLG1ldGhvZElEKTsKICAgICAgICByZXN1bHQgPSBmdW5jdGlvbnMtPkNhbGxOb252aXJ0 dWFsT2JqZWN0TWV0aG9kVih0aGlzLG9iaixjbGF6eiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RJRCxhcmdzKTsKICAg ICAgICB2YV9lbmQoYXJncyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGpv YmplY3QgQ2FsbE5vbnZpcnR1YWxPYmplY3RNZXRob2RWKGpvYmplY3Qgb2JqLCBqY2xhc3Mg Y2xhenosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9k SUQgbWV0aG9kSUQsIHZhX2xpc3QgYXJncykgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMt PkNhbGxOb252aXJ0dWFsT2JqZWN0TWV0aG9kVih0aGlzLG9iaixjbGF6eiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kSUQs YXJncyk7CiAgICB9CiAgICBqb2JqZWN0IENhbGxOb252aXJ0dWFsT2JqZWN0TWV0aG9kQShq b2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgam1ldGhvZElEIG1ldGhvZElELCBjb25zdCBqdmFsdWUgKiBhcmdzKSB7 CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+Q2FsbE5vbnZpcnR1YWxPYmplY3RNZXRob2RB KHRoaXMsb2JqLGNsYXp6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBtZXRob2RJRCxhcmdzKTsKICAgIH0KCiAgICBqYm9vbGVhbiBD YWxsTm9udmlydHVhbEJvb2xlYW5NZXRob2Qoam9iamVjdCBvYmosIGpjbGFzcyBjbGF6eiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQgbWV0 aG9kSUQsIC4uLikgewogICAgICAgIHZhX2xpc3QgYXJnczsKICAgICAgICBqYm9vbGVhbiBy ZXN1bHQ7CiAgICAgICAgdmFfc3RhcnQoYXJncyxtZXRob2RJRCk7CiAgICAgICAgcmVzdWx0 ID0gZnVuY3Rpb25zLT5DYWxsTm9udmlydHVhbEJvb2xlYW5NZXRob2RWKHRoaXMsb2JqLGNs YXp6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBtZXRob2RJRCxhcmdzKTsKICAgICAgICB2YV9lbmQoYXJncyk7CiAgICAgICAg cmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGpib29sZWFuIENhbGxOb252aXJ0dWFsQm9vbGVh bk1ldGhvZFYoam9iamVjdCBvYmosIGpjbGFzcyBjbGF6eiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgam1ldGhvZElEIG1ldGhvZElELCB2YV9saXN0IGFy Z3MpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5DYWxsTm9udmlydHVhbEJvb2xlYW5N ZXRob2RWKHRoaXMsb2JqLGNsYXp6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kSUQsYXJncyk7CiAgICB9CiAgICBqYm9v bGVhbiBDYWxsTm9udmlydHVhbEJvb2xlYW5NZXRob2RBKGpvYmplY3Qgb2JqLCBqY2xhc3Mg Y2xhenosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRo b2RJRCBtZXRob2RJRCwgY29uc3QganZhbHVlICogYXJncykgewogICAgICAgIHJldHVybiBm dW5jdGlvbnMtPkNhbGxOb252aXJ0dWFsQm9vbGVhbk1ldGhvZEEodGhpcyxvYmosY2xhenos CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBtZXRob2RJRCwgYXJncyk7CiAgICB9CgogICAgamJ5dGUgQ2FsbE5vbnZpcnR1YWxCeXRl TWV0aG9kKGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xhenosCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgam1ldGhvZElEIG1ldGhvZElELCAuLi4pIHsKICAgICAgICB2YV9s aXN0IGFyZ3M7CiAgICAgICAgamJ5dGUgcmVzdWx0OwogICAgICAgIHZhX3N0YXJ0KGFyZ3Ms bWV0aG9kSUQpOwogICAgICAgIHJlc3VsdCA9IGZ1bmN0aW9ucy0+Q2FsbE5vbnZpcnR1YWxC eXRlTWV0aG9kVih0aGlzLG9iaixjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kSUQsYXJncyk7CiAgICAgICAgdmFf ZW5kKGFyZ3MpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBqYnl0ZSBDYWxs Tm9udmlydHVhbEJ5dGVNZXRob2RWKGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xhenosCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwgdmFf bGlzdCBhcmdzKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+Q2FsbE5vbnZpcnR1YWxC eXRlTWV0aG9kVih0aGlzLG9iaixjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZElELGFyZ3MpOwogICAgfQogICAgamJ5 dGUgQ2FsbE5vbnZpcnR1YWxCeXRlTWV0aG9kQShqb2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQgbWV0aG9k SUQsIGNvbnN0IGp2YWx1ZSAqIGFyZ3MpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5D YWxsTm9udmlydHVhbEJ5dGVNZXRob2RBKHRoaXMsb2JqLGNsYXp6LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kSUQsYXJncyk7 CiAgICB9CgogICAgamNoYXIgQ2FsbE5vbnZpcnR1YWxDaGFyTWV0aG9kKGpvYmplY3Qgb2Jq LCBqY2xhc3MgY2xhenosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1l dGhvZElEIG1ldGhvZElELCAuLi4pIHsKICAgICAgICB2YV9saXN0IGFyZ3M7CiAgICAgICAg amNoYXIgcmVzdWx0OwogICAgICAgIHZhX3N0YXJ0KGFyZ3MsbWV0aG9kSUQpOwogICAgICAg IHJlc3VsdCA9IGZ1bmN0aW9ucy0+Q2FsbE5vbnZpcnR1YWxDaGFyTWV0aG9kVih0aGlzLG9i aixjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbWV0aG9kSUQsYXJncyk7CiAgICAgICAgdmFfZW5kKGFyZ3MpOwogICAgICAg IHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBqY2hhciBDYWxsTm9udmlydHVhbENoYXJNZXRo b2RWKGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xhenosCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwgdmFfbGlzdCBhcmdzKSB7CiAgICAg ICAgcmV0dXJuIGZ1bmN0aW9ucy0+Q2FsbE5vbnZpcnR1YWxDaGFyTWV0aG9kVih0aGlzLG9i aixjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG1ldGhvZElELGFyZ3MpOwogICAgfQogICAgamNoYXIgQ2FsbE5vbnZpcnR1YWxD aGFyTWV0aG9kQShqb2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQgbWV0aG9kSUQsIGNvbnN0IGp2YWx1ZSAq IGFyZ3MpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5DYWxsTm9udmlydHVhbENoYXJN ZXRob2RBKHRoaXMsb2JqLGNsYXp6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbWV0aG9kSUQsYXJncyk7CiAgICB9CgogICAganNob3J0 IENhbGxOb252aXJ0dWFsU2hvcnRNZXRob2Qoam9iamVjdCBvYmosIGpjbGFzcyBjbGF6eiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJ RCwgLi4uKSB7CiAgICAgICAgdmFfbGlzdCBhcmdzOwogICAgICAgIGpzaG9ydCByZXN1bHQ7 CiAgICAgICAgdmFfc3RhcnQoYXJncyxtZXRob2RJRCk7CiAgICAgICAgcmVzdWx0ID0gZnVu Y3Rpb25zLT5DYWxsTm9udmlydHVhbFNob3J0TWV0aG9kVih0aGlzLG9iaixjbGF6eiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1l dGhvZElELGFyZ3MpOwogICAgICAgIHZhX2VuZChhcmdzKTsKICAgICAgICByZXR1cm4gcmVz dWx0OwogICAgfQogICAganNob3J0IENhbGxOb252aXJ0dWFsU2hvcnRNZXRob2RWKGpvYmpl Y3Qgb2JqLCBqY2xhc3MgY2xhenosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgam1ldGhvZElEIG1ldGhvZElELCB2YV9saXN0IGFyZ3MpIHsKICAgICAgICByZXR1 cm4gZnVuY3Rpb25zLT5DYWxsTm9udmlydHVhbFNob3J0TWV0aG9kVih0aGlzLG9iaixjbGF6 eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBtZXRob2RJRCxhcmdzKTsKICAgIH0KICAgIGpzaG9ydCBDYWxsTm9udmlydHVhbFNob3J0 TWV0aG9kQShqb2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwgY29uc3QganZhbHVlICog YXJncykgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkNhbGxOb252aXJ0dWFsU2hvcnRN ZXRob2RBKHRoaXMsb2JqLGNsYXp6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZElELGFyZ3MpOwogICAgfQoKICAgIGppbnQg Q2FsbE5vbnZpcnR1YWxJbnRNZXRob2Qoam9iamVjdCBvYmosIGpjbGFzcyBjbGF6eiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1ldGhvZElEIG1ldGhvZElELCAuLi4p IHsKICAgICAgICB2YV9saXN0IGFyZ3M7CiAgICAgICAgamludCByZXN1bHQ7CiAgICAgICAg dmFfc3RhcnQoYXJncyxtZXRob2RJRCk7CiAgICAgICAgcmVzdWx0ID0gZnVuY3Rpb25zLT5D YWxsTm9udmlydHVhbEludE1ldGhvZFYodGhpcyxvYmosY2xhenosCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kSUQsYXJncyk7 CiAgICAgICAgdmFfZW5kKGFyZ3MpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAg ICBqaW50IENhbGxOb252aXJ0dWFsSW50TWV0aG9kVihqb2JqZWN0IG9iaiwgamNsYXNzIGNs YXp6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1ldGhvZElEIG1ldGhv ZElELCB2YV9saXN0IGFyZ3MpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5DYWxsTm9u dmlydHVhbEludE1ldGhvZFYodGhpcyxvYmosY2xhenosCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZElELGFyZ3MpOwogICAgfQog ICAgamludCBDYWxsTm9udmlydHVhbEludE1ldGhvZEEoam9iamVjdCBvYmosIGpjbGFzcyBj bGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCBtZXRo b2RJRCwgY29uc3QganZhbHVlICogYXJncykgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMt PkNhbGxOb252aXJ0dWFsSW50TWV0aG9kQSh0aGlzLG9iaixjbGF6eiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kSUQsYXJncyk7 CiAgICB9CgogICAgamxvbmcgQ2FsbE5vbnZpcnR1YWxMb25nTWV0aG9kKGpvYmplY3Qgb2Jq LCBqY2xhc3MgY2xhenosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1l dGhvZElEIG1ldGhvZElELCAuLi4pIHsKICAgICAgICB2YV9saXN0IGFyZ3M7CiAgICAgICAg amxvbmcgcmVzdWx0OwogICAgICAgIHZhX3N0YXJ0KGFyZ3MsbWV0aG9kSUQpOwogICAgICAg IHJlc3VsdCA9IGZ1bmN0aW9ucy0+Q2FsbE5vbnZpcnR1YWxMb25nTWV0aG9kVih0aGlzLG9i aixjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbWV0aG9kSUQsYXJncyk7CiAgICAgICAgdmFfZW5kKGFyZ3MpOwogICAgICAg IHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBqbG9uZyBDYWxsTm9udmlydHVhbExvbmdNZXRo b2RWKGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xhenosCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwgdmFfbGlzdCBhcmdzKSB7CiAgICAg ICAgcmV0dXJuIGZ1bmN0aW9ucy0+Q2FsbE5vbnZpcnR1YWxMb25nTWV0aG9kVih0aGlzLG9i aixjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG1ldGhvZElELGFyZ3MpOwogICAgfQogICAgamxvbmcgQ2FsbE5vbnZpcnR1YWxM b25nTWV0aG9kQShqb2JqZWN0IG9iaiwgamNsYXNzIGNsYXp6LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQgbWV0aG9kSUQsIGNvbnN0IGp2YWx1ZSAq IGFyZ3MpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5DYWxsTm9udmlydHVhbExvbmdN ZXRob2RBKHRoaXMsb2JqLGNsYXp6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbWV0aG9kSUQsYXJncyk7CiAgICB9CgogICAgamZsb2F0 IENhbGxOb252aXJ0dWFsRmxvYXRNZXRob2Qoam9iamVjdCBvYmosIGpjbGFzcyBjbGF6eiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJ RCwgLi4uKSB7CiAgICAgICAgdmFfbGlzdCBhcmdzOwogICAgICAgIGpmbG9hdCByZXN1bHQ7 CiAgICAgICAgdmFfc3RhcnQoYXJncyxtZXRob2RJRCk7CiAgICAgICAgcmVzdWx0ID0gZnVu Y3Rpb25zLT5DYWxsTm9udmlydHVhbEZsb2F0TWV0aG9kVih0aGlzLG9iaixjbGF6eiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1l dGhvZElELGFyZ3MpOwogICAgICAgIHZhX2VuZChhcmdzKTsKICAgICAgICByZXR1cm4gcmVz dWx0OwogICAgfQogICAgamZsb2F0IENhbGxOb252aXJ0dWFsRmxvYXRNZXRob2RWKGpvYmpl Y3Qgb2JqLCBqY2xhc3MgY2xhenosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgam1ldGhvZElEIG1ldGhvZElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZhX2xpc3QgYXJncykgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkNh bGxOb252aXJ0dWFsRmxvYXRNZXRob2RWKHRoaXMsb2JqLGNsYXp6LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZElELGFyZ3Mp OwogICAgfQogICAgamZsb2F0IENhbGxOb252aXJ0dWFsRmxvYXRNZXRob2RBKGpvYmplY3Qg b2JqLCBqY2xhc3MgY2xhenosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgam1ldGhvZElEIG1ldGhvZElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGp2YWx1ZSAqIGFyZ3MpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25z LT5DYWxsTm9udmlydHVhbEZsb2F0TWV0aG9kQSh0aGlzLG9iaixjbGF6eiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RJRCxh cmdzKTsKICAgIH0KCiAgICBqZG91YmxlIENhbGxOb252aXJ0dWFsRG91YmxlTWV0aG9kKGpv YmplY3Qgb2JqLCBqY2xhc3MgY2xhenosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwgLi4uKSB7CiAgICAgICAgdmFfbGlzdCBh cmdzOwogICAgICAgIGpkb3VibGUgcmVzdWx0OwogICAgICAgIHZhX3N0YXJ0KGFyZ3MsbWV0 aG9kSUQpOwogICAgICAgIHJlc3VsdCA9IGZ1bmN0aW9ucy0+Q2FsbE5vbnZpcnR1YWxEb3Vi bGVNZXRob2RWKHRoaXMsb2JqLGNsYXp6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZElELGFyZ3MpOwogICAgICAgIHZh X2VuZChhcmdzKTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgamRvdWJsZSBD YWxsTm9udmlydHVhbERvdWJsZU1ldGhvZFYoam9iamVjdCBvYmosIGpjbGFzcyBjbGF6eiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCBtZXRo b2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3Qg YXJncykgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkNhbGxOb252aXJ0dWFsRG91Ymxl TWV0aG9kVih0aGlzLG9iaixjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kSUQsYXJncyk7CiAgICB9CiAgICBqZG91 YmxlIENhbGxOb252aXJ0dWFsRG91YmxlTWV0aG9kQShqb2JqZWN0IG9iaiwgamNsYXNzIGNs YXp6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1ldGhvZElE IG1ldGhvZElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QganZhbHVlICogYXJncykgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkNhbGxOb252 aXJ0dWFsRG91YmxlTWV0aG9kQSh0aGlzLG9iaixjbGF6eiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kSUQsYXJncyk7CiAg ICB9CgogICAgdm9pZCBDYWxsTm9udmlydHVhbFZvaWRNZXRob2Qoam9iamVjdCBvYmosIGpj bGFzcyBjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJ RCBtZXRob2RJRCwgLi4uKSB7CiAgICAgICAgdmFfbGlzdCBhcmdzOwogICAgICAgIHZhX3N0 YXJ0KGFyZ3MsbWV0aG9kSUQpOwogICAgICAgIGZ1bmN0aW9ucy0+Q2FsbE5vbnZpcnR1YWxW b2lkTWV0aG9kVih0aGlzLG9iaixjbGF6eixtZXRob2RJRCxhcmdzKTsKICAgICAgICB2YV9l bmQoYXJncyk7CiAgICB9CiAgICB2b2lkIENhbGxOb252aXJ0dWFsVm9pZE1ldGhvZFYoam9i amVjdCBvYmosIGpjbGFzcyBjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBqbWV0aG9kSUQgbWV0aG9kSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdmFfbGlzdCBhcmdzKSB7CiAgICAgICAgZnVuY3Rpb25zLT5DYWxsTm9udmlydHVh bFZvaWRNZXRob2RWKHRoaXMsb2JqLGNsYXp6LG1ldGhvZElELGFyZ3MpOwogICAgfQogICAg dm9pZCBDYWxsTm9udmlydHVhbFZvaWRNZXRob2RBKGpvYmplY3Qgb2JqLCBqY2xhc3MgY2xh enosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1ldGhvZElEIG1ldGhv ZElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGp2YWx1ZSAq IGFyZ3MpIHsKICAgICAgICBmdW5jdGlvbnMtPkNhbGxOb252aXJ0dWFsVm9pZE1ldGhvZEEo dGhpcyxvYmosY2xhenosbWV0aG9kSUQsYXJncyk7CiAgICB9CgogICAgamZpZWxkSUQgR2V0 RmllbGRJRChqY2xhc3MgY2xhenosIGNvbnN0IGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGNoYXIgKnNpZykgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMt PkdldEZpZWxkSUQodGhpcyxjbGF6eixuYW1lLHNpZyk7CiAgICB9CgogICAgam9iamVjdCBH ZXRPYmplY3RGaWVsZChqb2JqZWN0IG9iaiwgamZpZWxkSUQgZmllbGRJRCkgewogICAgICAg IHJldHVybiBmdW5jdGlvbnMtPkdldE9iamVjdEZpZWxkKHRoaXMsb2JqLGZpZWxkSUQpOwog ICAgfQogICAgamJvb2xlYW4gR2V0Qm9vbGVhbkZpZWxkKGpvYmplY3Qgb2JqLCBqZmllbGRJ RCBmaWVsZElEKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+R2V0Qm9vbGVhbkZpZWxk KHRoaXMsb2JqLGZpZWxkSUQpOwogICAgfQogICAgamJ5dGUgR2V0Qnl0ZUZpZWxkKGpvYmpl Y3Qgb2JqLCBqZmllbGRJRCBmaWVsZElEKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+ R2V0Qnl0ZUZpZWxkKHRoaXMsb2JqLGZpZWxkSUQpOwogICAgfQogICAgamNoYXIgR2V0Q2hh ckZpZWxkKGpvYmplY3Qgb2JqLCBqZmllbGRJRCBmaWVsZElEKSB7CiAgICAgICAgcmV0dXJu IGZ1bmN0aW9ucy0+R2V0Q2hhckZpZWxkKHRoaXMsb2JqLGZpZWxkSUQpOwogICAgfQogICAg anNob3J0IEdldFNob3J0RmllbGQoam9iamVjdCBvYmosIGpmaWVsZElEIGZpZWxkSUQpIHsK ICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5HZXRTaG9ydEZpZWxkKHRoaXMsb2JqLGZpZWxk SUQpOwogICAgfQogICAgamludCBHZXRJbnRGaWVsZChqb2JqZWN0IG9iaiwgamZpZWxkSUQg ZmllbGRJRCkgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkdldEludEZpZWxkKHRoaXMs b2JqLGZpZWxkSUQpOwogICAgfQogICAgamxvbmcgR2V0TG9uZ0ZpZWxkKGpvYmplY3Qgb2Jq LCBqZmllbGRJRCBmaWVsZElEKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+R2V0TG9u Z0ZpZWxkKHRoaXMsb2JqLGZpZWxkSUQpOwogICAgfQogICAgamZsb2F0IEdldEZsb2F0Rmll bGQoam9iamVjdCBvYmosIGpmaWVsZElEIGZpZWxkSUQpIHsKICAgICAgICByZXR1cm4gZnVu Y3Rpb25zLT5HZXRGbG9hdEZpZWxkKHRoaXMsb2JqLGZpZWxkSUQpOwogICAgfQogICAgamRv dWJsZSBHZXREb3VibGVGaWVsZChqb2JqZWN0IG9iaiwgamZpZWxkSUQgZmllbGRJRCkgewog ICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkdldERvdWJsZUZpZWxkKHRoaXMsb2JqLGZpZWxk SUQpOwogICAgfQoKICAgIHZvaWQgU2V0T2JqZWN0RmllbGQoam9iamVjdCBvYmosIGpmaWVs ZElEIGZpZWxkSUQsIGpvYmplY3QgdmFsKSB7CiAgICAgICAgZnVuY3Rpb25zLT5TZXRPYmpl Y3RGaWVsZCh0aGlzLG9iaixmaWVsZElELHZhbCk7CiAgICB9CiAgICB2b2lkIFNldEJvb2xl YW5GaWVsZChqb2JqZWN0IG9iaiwgamZpZWxkSUQgZmllbGRJRCwKICAgICAgICAgICAgICAg ICAgICAgICAgIGpib29sZWFuIHZhbCkgewogICAgICAgIGZ1bmN0aW9ucy0+U2V0Qm9vbGVh bkZpZWxkKHRoaXMsb2JqLGZpZWxkSUQsdmFsKTsKICAgIH0KICAgIHZvaWQgU2V0Qnl0ZUZp ZWxkKGpvYmplY3Qgb2JqLCBqZmllbGRJRCBmaWVsZElELAogICAgICAgICAgICAgICAgICAg ICAgamJ5dGUgdmFsKSB7CiAgICAgICAgZnVuY3Rpb25zLT5TZXRCeXRlRmllbGQodGhpcyxv YmosZmllbGRJRCx2YWwpOwogICAgfQogICAgdm9pZCBTZXRDaGFyRmllbGQoam9iamVjdCBv YmosIGpmaWVsZElEIGZpZWxkSUQsCiAgICAgICAgICAgICAgICAgICAgICBqY2hhciB2YWwp IHsKICAgICAgICBmdW5jdGlvbnMtPlNldENoYXJGaWVsZCh0aGlzLG9iaixmaWVsZElELHZh bCk7CiAgICB9CiAgICB2b2lkIFNldFNob3J0RmllbGQoam9iamVjdCBvYmosIGpmaWVsZElE IGZpZWxkSUQsCiAgICAgICAgICAgICAgICAgICAgICAganNob3J0IHZhbCkgewogICAgICAg IGZ1bmN0aW9ucy0+U2V0U2hvcnRGaWVsZCh0aGlzLG9iaixmaWVsZElELHZhbCk7CiAgICB9 CiAgICB2b2lkIFNldEludEZpZWxkKGpvYmplY3Qgb2JqLCBqZmllbGRJRCBmaWVsZElELAog ICAgICAgICAgICAgICAgICAgICBqaW50IHZhbCkgewogICAgICAgIGZ1bmN0aW9ucy0+U2V0 SW50RmllbGQodGhpcyxvYmosZmllbGRJRCx2YWwpOwogICAgfQogICAgdm9pZCBTZXRMb25n RmllbGQoam9iamVjdCBvYmosIGpmaWVsZElEIGZpZWxkSUQsCiAgICAgICAgICAgICAgICAg ICAgICBqbG9uZyB2YWwpIHsKICAgICAgICBmdW5jdGlvbnMtPlNldExvbmdGaWVsZCh0aGlz LG9iaixmaWVsZElELHZhbCk7CiAgICB9CiAgICB2b2lkIFNldEZsb2F0RmllbGQoam9iamVj dCBvYmosIGpmaWVsZElEIGZpZWxkSUQsCiAgICAgICAgICAgICAgICAgICAgICAgamZsb2F0 IHZhbCkgewogICAgICAgIGZ1bmN0aW9ucy0+U2V0RmxvYXRGaWVsZCh0aGlzLG9iaixmaWVs ZElELHZhbCk7CiAgICB9CiAgICB2b2lkIFNldERvdWJsZUZpZWxkKGpvYmplY3Qgb2JqLCBq ZmllbGRJRCBmaWVsZElELAogICAgICAgICAgICAgICAgICAgICAgICBqZG91YmxlIHZhbCkg ewogICAgICAgIGZ1bmN0aW9ucy0+U2V0RG91YmxlRmllbGQodGhpcyxvYmosZmllbGRJRCx2 YWwpOwogICAgfQoKICAgIGptZXRob2RJRCBHZXRTdGF0aWNNZXRob2RJRChqY2xhc3MgY2xh enosIGNvbnN0IGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgY2hhciAqc2lnKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+R2V0U3RhdGlj TWV0aG9kSUQodGhpcyxjbGF6eixuYW1lLHNpZyk7CiAgICB9CgogICAgam9iamVjdCBDYWxs U3RhdGljT2JqZWN0TWV0aG9kKGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhvZElELAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikgewogICAgICAgIHZhX2xpc3QgYXJn czsKICAgICAgICBqb2JqZWN0IHJlc3VsdDsKICAgICAgICB2YV9zdGFydChhcmdzLG1ldGhv ZElEKTsKICAgICAgICByZXN1bHQgPSBmdW5jdGlvbnMtPkNhbGxTdGF0aWNPYmplY3RNZXRo b2RWKHRoaXMsY2xhenosbWV0aG9kSUQsYXJncyk7CiAgICAgICAgdmFfZW5kKGFyZ3MpOwog ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBqb2JqZWN0IENhbGxTdGF0aWNPYmpl Y3RNZXRob2RWKGpjbGFzcyBjbGF6eiwgam1ldGhvZElEIG1ldGhvZElELAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2YV9saXN0IGFyZ3MpIHsKICAgICAgICByZXR1cm4gZnVu Y3Rpb25zLT5DYWxsU3RhdGljT2JqZWN0TWV0aG9kVih0aGlzLGNsYXp6LG1ldGhvZElELGFy Z3MpOwogICAgfQogICAgam9iamVjdCBDYWxsU3RhdGljT2JqZWN0TWV0aG9kQShqY2xhc3Mg Y2xhenosIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QganZhbHVlICphcmdzKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+Q2Fs bFN0YXRpY09iamVjdE1ldGhvZEEodGhpcyxjbGF6eixtZXRob2RJRCxhcmdzKTsKICAgIH0K CiAgICBqYm9vbGVhbiBDYWxsU3RhdGljQm9vbGVhbk1ldGhvZChqY2xhc3MgY2xhenosCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQgbWV0aG9kSUQs IC4uLikgewogICAgICAgIHZhX2xpc3QgYXJnczsKICAgICAgICBqYm9vbGVhbiByZXN1bHQ7 CiAgICAgICAgdmFfc3RhcnQoYXJncyxtZXRob2RJRCk7CiAgICAgICAgcmVzdWx0ID0gZnVu Y3Rpb25zLT5DYWxsU3RhdGljQm9vbGVhbk1ldGhvZFYodGhpcyxjbGF6eixtZXRob2RJRCxh cmdzKTsKICAgICAgICB2YV9lbmQoYXJncyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg IH0KICAgIGpib29sZWFuIENhbGxTdGF0aWNCb29sZWFuTWV0aG9kVihqY2xhc3MgY2xhenos CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1ldGhvZElEIG1ldGhv ZElELCB2YV9saXN0IGFyZ3MpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5DYWxsU3Rh dGljQm9vbGVhbk1ldGhvZFYodGhpcyxjbGF6eixtZXRob2RJRCxhcmdzKTsKICAgIH0KICAg IGpib29sZWFuIENhbGxTdGF0aWNCb29sZWFuTWV0aG9kQShqY2xhc3MgY2xhenosCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1ldGhvZElEIG1ldGhvZElELCBj b25zdCBqdmFsdWUgKmFyZ3MpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5DYWxsU3Rh dGljQm9vbGVhbk1ldGhvZEEodGhpcyxjbGF6eixtZXRob2RJRCxhcmdzKTsKICAgIH0KCiAg ICBqYnl0ZSBDYWxsU3RhdGljQnl0ZU1ldGhvZChqY2xhc3MgY2xhenosCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQgbWV0aG9kSUQsIC4uLikgewogICAgICAg IHZhX2xpc3QgYXJnczsKICAgICAgICBqYnl0ZSByZXN1bHQ7CiAgICAgICAgdmFfc3RhcnQo YXJncyxtZXRob2RJRCk7CiAgICAgICAgcmVzdWx0ID0gZnVuY3Rpb25zLT5DYWxsU3RhdGlj Qnl0ZU1ldGhvZFYodGhpcyxjbGF6eixtZXRob2RJRCxhcmdzKTsKICAgICAgICB2YV9lbmQo YXJncyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGpieXRlIENhbGxTdGF0 aWNCeXRlTWV0aG9kVihqY2xhc3MgY2xhenosCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgam1ldGhvZElEIG1ldGhvZElELCB2YV9saXN0IGFyZ3MpIHsKICAgICAgICByZXR1 cm4gZnVuY3Rpb25zLT5DYWxsU3RhdGljQnl0ZU1ldGhvZFYodGhpcyxjbGF6eixtZXRob2RJ RCxhcmdzKTsKICAgIH0KICAgIGpieXRlIENhbGxTdGF0aWNCeXRlTWV0aG9kQShqY2xhc3Mg Y2xhenosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1ldGhvZElEIG1ldGhv ZElELCBjb25zdCBqdmFsdWUgKmFyZ3MpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5D YWxsU3RhdGljQnl0ZU1ldGhvZEEodGhpcyxjbGF6eixtZXRob2RJRCxhcmdzKTsKICAgIH0K CiAgICBqY2hhciBDYWxsU3RhdGljQ2hhck1ldGhvZChqY2xhc3MgY2xhenosCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQgbWV0aG9kSUQsIC4uLikgewogICAg ICAgIHZhX2xpc3QgYXJnczsKICAgICAgICBqY2hhciByZXN1bHQ7CiAgICAgICAgdmFfc3Rh cnQoYXJncyxtZXRob2RJRCk7CiAgICAgICAgcmVzdWx0ID0gZnVuY3Rpb25zLT5DYWxsU3Rh dGljQ2hhck1ldGhvZFYodGhpcyxjbGF6eixtZXRob2RJRCxhcmdzKTsKICAgICAgICB2YV9l bmQoYXJncyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGpjaGFyIENhbGxT dGF0aWNDaGFyTWV0aG9kVihqY2xhc3MgY2xhenosCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgam1ldGhvZElEIG1ldGhvZElELCB2YV9saXN0IGFyZ3MpIHsKICAgICAgICBy ZXR1cm4gZnVuY3Rpb25zLT5DYWxsU3RhdGljQ2hhck1ldGhvZFYodGhpcyxjbGF6eixtZXRo b2RJRCxhcmdzKTsKICAgIH0KICAgIGpjaGFyIENhbGxTdGF0aWNDaGFyTWV0aG9kQShqY2xh c3MgY2xhenosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1ldGhvZElEIG1l dGhvZElELCBjb25zdCBqdmFsdWUgKmFyZ3MpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25z LT5DYWxsU3RhdGljQ2hhck1ldGhvZEEodGhpcyxjbGF6eixtZXRob2RJRCxhcmdzKTsKICAg IH0KCiAgICBqc2hvcnQgQ2FsbFN0YXRpY1Nob3J0TWV0aG9kKGpjbGFzcyBjbGF6eiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1ldGhvZElEIG1ldGhvZElELCAuLi4p IHsKICAgICAgICB2YV9saXN0IGFyZ3M7CiAgICAgICAganNob3J0IHJlc3VsdDsKICAgICAg ICB2YV9zdGFydChhcmdzLG1ldGhvZElEKTsKICAgICAgICByZXN1bHQgPSBmdW5jdGlvbnMt PkNhbGxTdGF0aWNTaG9ydE1ldGhvZFYodGhpcyxjbGF6eixtZXRob2RJRCxhcmdzKTsKICAg ICAgICB2YV9lbmQoYXJncyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGpz aG9ydCBDYWxsU3RhdGljU2hvcnRNZXRob2RWKGpjbGFzcyBjbGF6eiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwgdmFfbGlzdCBhcmdz KSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+Q2FsbFN0YXRpY1Nob3J0TWV0aG9kVih0 aGlzLGNsYXp6LG1ldGhvZElELGFyZ3MpOwogICAgfQogICAganNob3J0IENhbGxTdGF0aWNT aG9ydE1ldGhvZEEoamNsYXNzIGNsYXp6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgam1ldGhvZElEIG1ldGhvZElELCBjb25zdCBqdmFsdWUgKmFyZ3MpIHsKICAgICAg ICByZXR1cm4gZnVuY3Rpb25zLT5DYWxsU3RhdGljU2hvcnRNZXRob2RBKHRoaXMsY2xhenos bWV0aG9kSUQsYXJncyk7CiAgICB9CgogICAgamludCBDYWxsU3RhdGljSW50TWV0aG9kKGpj bGFzcyBjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQgbWV0 aG9kSUQsIC4uLikgewogICAgICAgIHZhX2xpc3QgYXJnczsKICAgICAgICBqaW50IHJlc3Vs dDsKICAgICAgICB2YV9zdGFydChhcmdzLG1ldGhvZElEKTsKICAgICAgICByZXN1bHQgPSBm dW5jdGlvbnMtPkNhbGxTdGF0aWNJbnRNZXRob2RWKHRoaXMsY2xhenosbWV0aG9kSUQsYXJn cyk7CiAgICAgICAgdmFfZW5kKGFyZ3MpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9 CiAgICBqaW50IENhbGxTdGF0aWNJbnRNZXRob2RWKGpjbGFzcyBjbGF6eiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgam1ldGhvZElEIG1ldGhvZElELCB2YV9saXN0IGFyZ3Mp IHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5DYWxsU3RhdGljSW50TWV0aG9kVih0aGlz LGNsYXp6LG1ldGhvZElELGFyZ3MpOwogICAgfQogICAgamludCBDYWxsU3RhdGljSW50TWV0 aG9kQShqY2xhc3MgY2xhenosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRo b2RJRCBtZXRob2RJRCwgY29uc3QganZhbHVlICphcmdzKSB7CiAgICAgICAgcmV0dXJuIGZ1 bmN0aW9ucy0+Q2FsbFN0YXRpY0ludE1ldGhvZEEodGhpcyxjbGF6eixtZXRob2RJRCxhcmdz KTsKICAgIH0KCiAgICBqbG9uZyBDYWxsU3RhdGljTG9uZ01ldGhvZChqY2xhc3MgY2xhenos CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQgbWV0aG9kSUQsIC4u LikgewogICAgICAgIHZhX2xpc3QgYXJnczsKICAgICAgICBqbG9uZyByZXN1bHQ7CiAgICAg ICAgdmFfc3RhcnQoYXJncyxtZXRob2RJRCk7CiAgICAgICAgcmVzdWx0ID0gZnVuY3Rpb25z LT5DYWxsU3RhdGljTG9uZ01ldGhvZFYodGhpcyxjbGF6eixtZXRob2RJRCxhcmdzKTsKICAg ICAgICB2YV9lbmQoYXJncyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGps b25nIENhbGxTdGF0aWNMb25nTWV0aG9kVihqY2xhc3MgY2xhenosCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgam1ldGhvZElEIG1ldGhvZElELCB2YV9saXN0IGFyZ3MpIHsK ICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5DYWxsU3RhdGljTG9uZ01ldGhvZFYodGhpcyxj bGF6eixtZXRob2RJRCxhcmdzKTsKICAgIH0KICAgIGpsb25nIENhbGxTdGF0aWNMb25nTWV0 aG9kQShqY2xhc3MgY2xhenosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1l dGhvZElEIG1ldGhvZElELCBjb25zdCBqdmFsdWUgKmFyZ3MpIHsKICAgICAgICByZXR1cm4g ZnVuY3Rpb25zLT5DYWxsU3RhdGljTG9uZ01ldGhvZEEodGhpcyxjbGF6eixtZXRob2RJRCxh cmdzKTsKICAgIH0KCiAgICBqZmxvYXQgQ2FsbFN0YXRpY0Zsb2F0TWV0aG9kKGpjbGFzcyBj bGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam1ldGhvZElEIG1ldGhv ZElELCAuLi4pIHsKICAgICAgICB2YV9saXN0IGFyZ3M7CiAgICAgICAgamZsb2F0IHJlc3Vs dDsKICAgICAgICB2YV9zdGFydChhcmdzLG1ldGhvZElEKTsKICAgICAgICByZXN1bHQgPSBm dW5jdGlvbnMtPkNhbGxTdGF0aWNGbG9hdE1ldGhvZFYodGhpcyxjbGF6eixtZXRob2RJRCxh cmdzKTsKICAgICAgICB2YV9lbmQoYXJncyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg IH0KICAgIGpmbG9hdCBDYWxsU3RhdGljRmxvYXRNZXRob2RWKGpjbGFzcyBjbGF6eiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCBtZXRob2RJRCwgdmFf bGlzdCBhcmdzKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+Q2FsbFN0YXRpY0Zsb2F0 TWV0aG9kVih0aGlzLGNsYXp6LG1ldGhvZElELGFyZ3MpOwogICAgfQogICAgamZsb2F0IENh bGxTdGF0aWNGbG9hdE1ldGhvZEEoamNsYXNzIGNsYXp6LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgam1ldGhvZElEIG1ldGhvZElELCBjb25zdCBqdmFsdWUgKmFyZ3Mp IHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5DYWxsU3RhdGljRmxvYXRNZXRob2RBKHRo aXMsY2xhenosbWV0aG9kSUQsYXJncyk7CiAgICB9CgogICAgamRvdWJsZSBDYWxsU3RhdGlj RG91YmxlTWV0aG9kKGpjbGFzcyBjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBqbWV0aG9kSUQgbWV0aG9kSUQsIC4uLikgewogICAgICAgIHZhX2xpc3QgYXJn czsKICAgICAgICBqZG91YmxlIHJlc3VsdDsKICAgICAgICB2YV9zdGFydChhcmdzLG1ldGhv ZElEKTsKICAgICAgICByZXN1bHQgPSBmdW5jdGlvbnMtPkNhbGxTdGF0aWNEb3VibGVNZXRo b2RWKHRoaXMsY2xhenosbWV0aG9kSUQsYXJncyk7CiAgICAgICAgdmFfZW5kKGFyZ3MpOwog ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBqZG91YmxlIENhbGxTdGF0aWNEb3Vi bGVNZXRob2RWKGpjbGFzcyBjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgam1ldGhvZElEIG1ldGhvZElELCB2YV9saXN0IGFyZ3MpIHsKICAgICAgICByZXR1 cm4gZnVuY3Rpb25zLT5DYWxsU3RhdGljRG91YmxlTWV0aG9kVih0aGlzLGNsYXp6LG1ldGhv ZElELGFyZ3MpOwogICAgfQogICAgamRvdWJsZSBDYWxsU3RhdGljRG91YmxlTWV0aG9kQShq Y2xhc3MgY2xhenosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGptZXRo b2RJRCBtZXRob2RJRCwgY29uc3QganZhbHVlICphcmdzKSB7CiAgICAgICAgcmV0dXJuIGZ1 bmN0aW9ucy0+Q2FsbFN0YXRpY0RvdWJsZU1ldGhvZEEodGhpcyxjbGF6eixtZXRob2RJRCxh cmdzKTsKICAgIH0KCiAgICB2b2lkIENhbGxTdGF0aWNWb2lkTWV0aG9kKGpjbGFzcyBjbHMs IGptZXRob2RJRCBtZXRob2RJRCwgLi4uKSB7CiAgICAgICAgdmFfbGlzdCBhcmdzOwogICAg ICAgIHZhX3N0YXJ0KGFyZ3MsbWV0aG9kSUQpOwogICAgICAgIGZ1bmN0aW9ucy0+Q2FsbFN0 YXRpY1ZvaWRNZXRob2RWKHRoaXMsY2xzLG1ldGhvZElELGFyZ3MpOwogICAgICAgIHZhX2Vu ZChhcmdzKTsKICAgIH0KICAgIHZvaWQgQ2FsbFN0YXRpY1ZvaWRNZXRob2RWKGpjbGFzcyBj bHMsIGptZXRob2RJRCBtZXRob2RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZhX2xpc3QgYXJncykgewogICAgICAgIGZ1bmN0aW9ucy0+Q2FsbFN0YXRpY1ZvaWRNZXRo b2RWKHRoaXMsY2xzLG1ldGhvZElELGFyZ3MpOwogICAgfQogICAgdm9pZCBDYWxsU3RhdGlj Vm9pZE1ldGhvZEEoamNsYXNzIGNscywgam1ldGhvZElEIG1ldGhvZElELAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QganZhbHVlICogYXJncykgewogICAgICAgIGZ1 bmN0aW9ucy0+Q2FsbFN0YXRpY1ZvaWRNZXRob2RBKHRoaXMsY2xzLG1ldGhvZElELGFyZ3Mp OwogICAgfQoKICAgIGpmaWVsZElEIEdldFN0YXRpY0ZpZWxkSUQoamNsYXNzIGNsYXp6LCBj b25zdCBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyICpzaWcpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5HZXRTdGF0aWNGaWVsZElE KHRoaXMsY2xhenosbmFtZSxzaWcpOwogICAgfQogICAgam9iamVjdCBHZXRTdGF0aWNPYmpl Y3RGaWVsZChqY2xhc3MgY2xhenosIGpmaWVsZElEIGZpZWxkSUQpIHsKICAgICAgICByZXR1 cm4gZnVuY3Rpb25zLT5HZXRTdGF0aWNPYmplY3RGaWVsZCh0aGlzLGNsYXp6LGZpZWxkSUQp OwogICAgfQogICAgamJvb2xlYW4gR2V0U3RhdGljQm9vbGVhbkZpZWxkKGpjbGFzcyBjbGF6 eiwgamZpZWxkSUQgZmllbGRJRCkgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkdldFN0 YXRpY0Jvb2xlYW5GaWVsZCh0aGlzLGNsYXp6LGZpZWxkSUQpOwogICAgfQogICAgamJ5dGUg R2V0U3RhdGljQnl0ZUZpZWxkKGpjbGFzcyBjbGF6eiwgamZpZWxkSUQgZmllbGRJRCkgewog ICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkdldFN0YXRpY0J5dGVGaWVsZCh0aGlzLGNsYXp6 LGZpZWxkSUQpOwogICAgfQogICAgamNoYXIgR2V0U3RhdGljQ2hhckZpZWxkKGpjbGFzcyBj bGF6eiwgamZpZWxkSUQgZmllbGRJRCkgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkdl dFN0YXRpY0NoYXJGaWVsZCh0aGlzLGNsYXp6LGZpZWxkSUQpOwogICAgfQogICAganNob3J0 IEdldFN0YXRpY1Nob3J0RmllbGQoamNsYXNzIGNsYXp6LCBqZmllbGRJRCBmaWVsZElEKSB7 CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+R2V0U3RhdGljU2hvcnRGaWVsZCh0aGlzLGNs YXp6LGZpZWxkSUQpOwogICAgfQogICAgamludCBHZXRTdGF0aWNJbnRGaWVsZChqY2xhc3Mg Y2xhenosIGpmaWVsZElEIGZpZWxkSUQpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5H ZXRTdGF0aWNJbnRGaWVsZCh0aGlzLGNsYXp6LGZpZWxkSUQpOwogICAgfQogICAgamxvbmcg R2V0U3RhdGljTG9uZ0ZpZWxkKGpjbGFzcyBjbGF6eiwgamZpZWxkSUQgZmllbGRJRCkgewog ICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkdldFN0YXRpY0xvbmdGaWVsZCh0aGlzLGNsYXp6 LGZpZWxkSUQpOwogICAgfQogICAgamZsb2F0IEdldFN0YXRpY0Zsb2F0RmllbGQoamNsYXNz IGNsYXp6LCBqZmllbGRJRCBmaWVsZElEKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+ R2V0U3RhdGljRmxvYXRGaWVsZCh0aGlzLGNsYXp6LGZpZWxkSUQpOwogICAgfQogICAgamRv dWJsZSBHZXRTdGF0aWNEb3VibGVGaWVsZChqY2xhc3MgY2xhenosIGpmaWVsZElEIGZpZWxk SUQpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5HZXRTdGF0aWNEb3VibGVGaWVsZCh0 aGlzLGNsYXp6LGZpZWxkSUQpOwogICAgfQoKICAgIHZvaWQgU2V0U3RhdGljT2JqZWN0Rmll bGQoamNsYXNzIGNsYXp6LCBqZmllbGRJRCBmaWVsZElELAogICAgICAgICAgICAgICAgICAg ICAgICBqb2JqZWN0IHZhbHVlKSB7CiAgICAgIGZ1bmN0aW9ucy0+U2V0U3RhdGljT2JqZWN0 RmllbGQodGhpcyxjbGF6eixmaWVsZElELHZhbHVlKTsKICAgIH0KICAgIHZvaWQgU2V0U3Rh dGljQm9vbGVhbkZpZWxkKGpjbGFzcyBjbGF6eiwgamZpZWxkSUQgZmllbGRJRCwKICAgICAg ICAgICAgICAgICAgICAgICAgamJvb2xlYW4gdmFsdWUpIHsKICAgICAgZnVuY3Rpb25zLT5T ZXRTdGF0aWNCb29sZWFuRmllbGQodGhpcyxjbGF6eixmaWVsZElELHZhbHVlKTsKICAgIH0K ICAgIHZvaWQgU2V0U3RhdGljQnl0ZUZpZWxkKGpjbGFzcyBjbGF6eiwgamZpZWxkSUQgZmll bGRJRCwKICAgICAgICAgICAgICAgICAgICAgICAgamJ5dGUgdmFsdWUpIHsKICAgICAgZnVu Y3Rpb25zLT5TZXRTdGF0aWNCeXRlRmllbGQodGhpcyxjbGF6eixmaWVsZElELHZhbHVlKTsK ICAgIH0KICAgIHZvaWQgU2V0U3RhdGljQ2hhckZpZWxkKGpjbGFzcyBjbGF6eiwgamZpZWxk SUQgZmllbGRJRCwKICAgICAgICAgICAgICAgICAgICAgICAgamNoYXIgdmFsdWUpIHsKICAg ICAgZnVuY3Rpb25zLT5TZXRTdGF0aWNDaGFyRmllbGQodGhpcyxjbGF6eixmaWVsZElELHZh bHVlKTsKICAgIH0KICAgIHZvaWQgU2V0U3RhdGljU2hvcnRGaWVsZChqY2xhc3MgY2xhenos IGpmaWVsZElEIGZpZWxkSUQsCiAgICAgICAgICAgICAgICAgICAgICAgIGpzaG9ydCB2YWx1 ZSkgewogICAgICBmdW5jdGlvbnMtPlNldFN0YXRpY1Nob3J0RmllbGQodGhpcyxjbGF6eixm aWVsZElELHZhbHVlKTsKICAgIH0KICAgIHZvaWQgU2V0U3RhdGljSW50RmllbGQoamNsYXNz IGNsYXp6LCBqZmllbGRJRCBmaWVsZElELAogICAgICAgICAgICAgICAgICAgICAgICBqaW50 IHZhbHVlKSB7CiAgICAgIGZ1bmN0aW9ucy0+U2V0U3RhdGljSW50RmllbGQodGhpcyxjbGF6 eixmaWVsZElELHZhbHVlKTsKICAgIH0KICAgIHZvaWQgU2V0U3RhdGljTG9uZ0ZpZWxkKGpj bGFzcyBjbGF6eiwgamZpZWxkSUQgZmllbGRJRCwKICAgICAgICAgICAgICAgICAgICAgICAg amxvbmcgdmFsdWUpIHsKICAgICAgZnVuY3Rpb25zLT5TZXRTdGF0aWNMb25nRmllbGQodGhp cyxjbGF6eixmaWVsZElELHZhbHVlKTsKICAgIH0KICAgIHZvaWQgU2V0U3RhdGljRmxvYXRG aWVsZChqY2xhc3MgY2xhenosIGpmaWVsZElEIGZpZWxkSUQsCiAgICAgICAgICAgICAgICAg ICAgICAgIGpmbG9hdCB2YWx1ZSkgewogICAgICBmdW5jdGlvbnMtPlNldFN0YXRpY0Zsb2F0 RmllbGQodGhpcyxjbGF6eixmaWVsZElELHZhbHVlKTsKICAgIH0KICAgIHZvaWQgU2V0U3Rh dGljRG91YmxlRmllbGQoamNsYXNzIGNsYXp6LCBqZmllbGRJRCBmaWVsZElELAogICAgICAg ICAgICAgICAgICAgICAgICBqZG91YmxlIHZhbHVlKSB7CiAgICAgIGZ1bmN0aW9ucy0+U2V0 U3RhdGljRG91YmxlRmllbGQodGhpcyxjbGF6eixmaWVsZElELHZhbHVlKTsKICAgIH0KCiAg ICBqc3RyaW5nIE5ld1N0cmluZyhjb25zdCBqY2hhciAqdW5pY29kZSwganNpemUgbGVuKSB7 CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+TmV3U3RyaW5nKHRoaXMsdW5pY29kZSxsZW4p OwogICAgfQogICAganNpemUgR2V0U3RyaW5nTGVuZ3RoKGpzdHJpbmcgc3RyKSB7CiAgICAg ICAgcmV0dXJuIGZ1bmN0aW9ucy0+R2V0U3RyaW5nTGVuZ3RoKHRoaXMsc3RyKTsKICAgIH0K ICAgIGNvbnN0IGpjaGFyICpHZXRTdHJpbmdDaGFycyhqc3RyaW5nIHN0ciwgamJvb2xlYW4g KmlzQ29weSkgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkdldFN0cmluZ0NoYXJzKHRo aXMsc3RyLGlzQ29weSk7CiAgICB9CiAgICB2b2lkIFJlbGVhc2VTdHJpbmdDaGFycyhqc3Ry aW5nIHN0ciwgY29uc3QgamNoYXIgKmNoYXJzKSB7CiAgICAgICAgZnVuY3Rpb25zLT5SZWxl YXNlU3RyaW5nQ2hhcnModGhpcyxzdHIsY2hhcnMpOwogICAgfQoKICAgIGpzdHJpbmcgTmV3 U3RyaW5nVVRGKGNvbnN0IGNoYXIgKnV0ZikgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMt Pk5ld1N0cmluZ1VURih0aGlzLHV0Zik7CiAgICB9CiAgICBqc2l6ZSBHZXRTdHJpbmdVVEZM ZW5ndGgoanN0cmluZyBzdHIpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5HZXRTdHJp bmdVVEZMZW5ndGgodGhpcyxzdHIpOwogICAgfQogICAgY29uc3QgY2hhciogR2V0U3RyaW5n VVRGQ2hhcnMoanN0cmluZyBzdHIsIGpib29sZWFuICppc0NvcHkpIHsKICAgICAgICByZXR1 cm4gZnVuY3Rpb25zLT5HZXRTdHJpbmdVVEZDaGFycyh0aGlzLHN0cixpc0NvcHkpOwogICAg fQogICAgdm9pZCBSZWxlYXNlU3RyaW5nVVRGQ2hhcnMoanN0cmluZyBzdHIsIGNvbnN0IGNo YXIqIGNoYXJzKSB7CiAgICAgICAgZnVuY3Rpb25zLT5SZWxlYXNlU3RyaW5nVVRGQ2hhcnMo dGhpcyxzdHIsY2hhcnMpOwogICAgfQoKICAgIGpzaXplIEdldEFycmF5TGVuZ3RoKGphcnJh eSBhcnJheSkgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkdldEFycmF5TGVuZ3RoKHRo aXMsYXJyYXkpOwogICAgfQoKICAgIGpvYmplY3RBcnJheSBOZXdPYmplY3RBcnJheShqc2l6 ZSBsZW4sIGpjbGFzcyBjbGF6eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq b2JqZWN0IGluaXQpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5OZXdPYmplY3RBcnJh eSh0aGlzLGxlbixjbGF6eixpbml0KTsKICAgIH0KICAgIGpvYmplY3QgR2V0T2JqZWN0QXJy YXlFbGVtZW50KGpvYmplY3RBcnJheSBhcnJheSwganNpemUgaW5kZXgpIHsKICAgICAgICBy ZXR1cm4gZnVuY3Rpb25zLT5HZXRPYmplY3RBcnJheUVsZW1lbnQodGhpcyxhcnJheSxpbmRl eCk7CiAgICB9CiAgICB2b2lkIFNldE9iamVjdEFycmF5RWxlbWVudChqb2JqZWN0QXJyYXkg YXJyYXksIGpzaXplIGluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam9i amVjdCB2YWwpIHsKICAgICAgICBmdW5jdGlvbnMtPlNldE9iamVjdEFycmF5RWxlbWVudCh0 aGlzLGFycmF5LGluZGV4LHZhbCk7CiAgICB9CgogICAgamJvb2xlYW5BcnJheSBOZXdCb29s ZWFuQXJyYXkoanNpemUgbGVuKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+TmV3Qm9v bGVhbkFycmF5KHRoaXMsbGVuKTsKICAgIH0KICAgIGpieXRlQXJyYXkgTmV3Qnl0ZUFycmF5 KGpzaXplIGxlbikgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPk5ld0J5dGVBcnJheSh0 aGlzLGxlbik7CiAgICB9CiAgICBqY2hhckFycmF5IE5ld0NoYXJBcnJheShqc2l6ZSBsZW4p IHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5OZXdDaGFyQXJyYXkodGhpcyxsZW4pOwog ICAgfQogICAganNob3J0QXJyYXkgTmV3U2hvcnRBcnJheShqc2l6ZSBsZW4pIHsKICAgICAg ICByZXR1cm4gZnVuY3Rpb25zLT5OZXdTaG9ydEFycmF5KHRoaXMsbGVuKTsKICAgIH0KICAg IGppbnRBcnJheSBOZXdJbnRBcnJheShqc2l6ZSBsZW4pIHsKICAgICAgICByZXR1cm4gZnVu Y3Rpb25zLT5OZXdJbnRBcnJheSh0aGlzLGxlbik7CiAgICB9CiAgICBqbG9uZ0FycmF5IE5l d0xvbmdBcnJheShqc2l6ZSBsZW4pIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5OZXdM b25nQXJyYXkodGhpcyxsZW4pOwogICAgfQogICAgamZsb2F0QXJyYXkgTmV3RmxvYXRBcnJh eShqc2l6ZSBsZW4pIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5OZXdGbG9hdEFycmF5 KHRoaXMsbGVuKTsKICAgIH0KICAgIGpkb3VibGVBcnJheSBOZXdEb3VibGVBcnJheShqc2l6 ZSBsZW4pIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5OZXdEb3VibGVBcnJheSh0aGlz LGxlbik7CiAgICB9CgogICAgamJvb2xlYW4gKiBHZXRCb29sZWFuQXJyYXlFbGVtZW50cyhq Ym9vbGVhbkFycmF5IGFycmF5LCBqYm9vbGVhbiAqaXNDb3B5KSB7CiAgICAgICAgcmV0dXJu IGZ1bmN0aW9ucy0+R2V0Qm9vbGVhbkFycmF5RWxlbWVudHModGhpcyxhcnJheSxpc0NvcHkp OwogICAgfQogICAgamJ5dGUgKiBHZXRCeXRlQXJyYXlFbGVtZW50cyhqYnl0ZUFycmF5IGFy cmF5LCBqYm9vbGVhbiAqaXNDb3B5KSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+R2V0 Qnl0ZUFycmF5RWxlbWVudHModGhpcyxhcnJheSxpc0NvcHkpOwogICAgfQogICAgamNoYXIg KiBHZXRDaGFyQXJyYXlFbGVtZW50cyhqY2hhckFycmF5IGFycmF5LCBqYm9vbGVhbiAqaXND b3B5KSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+R2V0Q2hhckFycmF5RWxlbWVudHMo dGhpcyxhcnJheSxpc0NvcHkpOwogICAgfQogICAganNob3J0ICogR2V0U2hvcnRBcnJheUVs ZW1lbnRzKGpzaG9ydEFycmF5IGFycmF5LCBqYm9vbGVhbiAqaXNDb3B5KSB7CiAgICAgICAg cmV0dXJuIGZ1bmN0aW9ucy0+R2V0U2hvcnRBcnJheUVsZW1lbnRzKHRoaXMsYXJyYXksaXND b3B5KTsKICAgIH0KICAgIGppbnQgKiBHZXRJbnRBcnJheUVsZW1lbnRzKGppbnRBcnJheSBh cnJheSwgamJvb2xlYW4gKmlzQ29weSkgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkdl dEludEFycmF5RWxlbWVudHModGhpcyxhcnJheSxpc0NvcHkpOwogICAgfQogICAgamxvbmcg KiBHZXRMb25nQXJyYXlFbGVtZW50cyhqbG9uZ0FycmF5IGFycmF5LCBqYm9vbGVhbiAqaXND b3B5KSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+R2V0TG9uZ0FycmF5RWxlbWVudHMo dGhpcyxhcnJheSxpc0NvcHkpOwogICAgfQogICAgamZsb2F0ICogR2V0RmxvYXRBcnJheUVs ZW1lbnRzKGpmbG9hdEFycmF5IGFycmF5LCBqYm9vbGVhbiAqaXNDb3B5KSB7CiAgICAgICAg cmV0dXJuIGZ1bmN0aW9ucy0+R2V0RmxvYXRBcnJheUVsZW1lbnRzKHRoaXMsYXJyYXksaXND b3B5KTsKICAgIH0KICAgIGpkb3VibGUgKiBHZXREb3VibGVBcnJheUVsZW1lbnRzKGpkb3Vi bGVBcnJheSBhcnJheSwgamJvb2xlYW4gKmlzQ29weSkgewogICAgICAgIHJldHVybiBmdW5j dGlvbnMtPkdldERvdWJsZUFycmF5RWxlbWVudHModGhpcyxhcnJheSxpc0NvcHkpOwogICAg fQoKICAgIHZvaWQgUmVsZWFzZUJvb2xlYW5BcnJheUVsZW1lbnRzKGpib29sZWFuQXJyYXkg YXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYm9vbGVhbiAq ZWxlbXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaW50IG1vZGUp IHsKICAgICAgICBmdW5jdGlvbnMtPlJlbGVhc2VCb29sZWFuQXJyYXlFbGVtZW50cyh0aGlz LGFycmF5LGVsZW1zLG1vZGUpOwogICAgfQogICAgdm9pZCBSZWxlYXNlQnl0ZUFycmF5RWxl bWVudHMoamJ5dGVBcnJheSBhcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGpieXRlICplbGVtcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpp bnQgbW9kZSkgewogICAgICAgIGZ1bmN0aW9ucy0+UmVsZWFzZUJ5dGVBcnJheUVsZW1lbnRz KHRoaXMsYXJyYXksZWxlbXMsbW9kZSk7CiAgICB9CiAgICB2b2lkIFJlbGVhc2VDaGFyQXJy YXlFbGVtZW50cyhqY2hhckFycmF5IGFycmF5LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgamNoYXIgKmVsZW1zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgamludCBtb2RlKSB7CiAgICAgICAgZnVuY3Rpb25zLT5SZWxlYXNlQ2hhckFycmF5RWxl bWVudHModGhpcyxhcnJheSxlbGVtcyxtb2RlKTsKICAgIH0KICAgIHZvaWQgUmVsZWFzZVNo b3J0QXJyYXlFbGVtZW50cyhqc2hvcnRBcnJheSBhcnJheSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBqc2hvcnQgKmVsZW1zLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGppbnQgbW9kZSkgewogICAgICAgIGZ1bmN0aW9ucy0+UmVsZWFzZVNo b3J0QXJyYXlFbGVtZW50cyh0aGlzLGFycmF5LGVsZW1zLG1vZGUpOwogICAgfQogICAgdm9p ZCBSZWxlYXNlSW50QXJyYXlFbGVtZW50cyhqaW50QXJyYXkgYXJyYXksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGppbnQgKmVsZW1zLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBqaW50IG1vZGUpIHsKICAgICAgICBmdW5jdGlvbnMtPlJlbGVhc2VJ bnRBcnJheUVsZW1lbnRzKHRoaXMsYXJyYXksZWxlbXMsbW9kZSk7CiAgICB9CiAgICB2b2lk IFJlbGVhc2VMb25nQXJyYXlFbGVtZW50cyhqbG9uZ0FycmF5IGFycmF5LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgamxvbmcgKmVsZW1zLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgamludCBtb2RlKSB7CiAgICAgICAgZnVuY3Rpb25zLT5SZWxl YXNlTG9uZ0FycmF5RWxlbWVudHModGhpcyxhcnJheSxlbGVtcyxtb2RlKTsKICAgIH0KICAg IHZvaWQgUmVsZWFzZUZsb2F0QXJyYXlFbGVtZW50cyhqZmxvYXRBcnJheSBhcnJheSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqZmxvYXQgKmVsZW1zLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgbW9kZSkgewogICAgICAgIGZ1bmN0 aW9ucy0+UmVsZWFzZUZsb2F0QXJyYXlFbGVtZW50cyh0aGlzLGFycmF5LGVsZW1zLG1vZGUp OwogICAgfQogICAgdm9pZCBSZWxlYXNlRG91YmxlQXJyYXlFbGVtZW50cyhqZG91YmxlQXJy YXkgYXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpkb3VibGUg KmVsZW1zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaW50IG1vZGUp IHsKICAgICAgICBmdW5jdGlvbnMtPlJlbGVhc2VEb3VibGVBcnJheUVsZW1lbnRzKHRoaXMs YXJyYXksZWxlbXMsbW9kZSk7CiAgICB9CgogICAgdm9pZCBHZXRCb29sZWFuQXJyYXlSZWdp b24oamJvb2xlYW5BcnJheSBhcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGpzaXplIHN0YXJ0LCBqc2l6ZSBsZW4sIGpib29sZWFuICpidWYpIHsKICAgICAgICBmdW5j dGlvbnMtPkdldEJvb2xlYW5BcnJheVJlZ2lvbih0aGlzLGFycmF5LHN0YXJ0LGxlbixidWYp OwogICAgfQogICAgdm9pZCBHZXRCeXRlQXJyYXlSZWdpb24oamJ5dGVBcnJheSBhcnJheSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzaXplIHN0YXJ0LCBqc2l6ZSBsZW4sIGpi eXRlICpidWYpIHsKICAgICAgICBmdW5jdGlvbnMtPkdldEJ5dGVBcnJheVJlZ2lvbih0aGlz LGFycmF5LHN0YXJ0LGxlbixidWYpOwogICAgfQogICAgdm9pZCBHZXRDaGFyQXJyYXlSZWdp b24oamNoYXJBcnJheSBhcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzaXpl IHN0YXJ0LCBqc2l6ZSBsZW4sIGpjaGFyICpidWYpIHsKICAgICAgICBmdW5jdGlvbnMtPkdl dENoYXJBcnJheVJlZ2lvbih0aGlzLGFycmF5LHN0YXJ0LGxlbixidWYpOwogICAgfQogICAg dm9pZCBHZXRTaG9ydEFycmF5UmVnaW9uKGpzaG9ydEFycmF5IGFycmF5LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGpzaXplIHN0YXJ0LCBqc2l6ZSBsZW4sIGpzaG9ydCAqYnVm KSB7CiAgICAgICAgZnVuY3Rpb25zLT5HZXRTaG9ydEFycmF5UmVnaW9uKHRoaXMsYXJyYXks c3RhcnQsbGVuLGJ1Zik7CiAgICB9CiAgICB2b2lkIEdldEludEFycmF5UmVnaW9uKGppbnRB cnJheSBhcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAganNpemUgc3RhcnQsIGpz aXplIGxlbiwgamludCAqYnVmKSB7CiAgICAgICAgZnVuY3Rpb25zLT5HZXRJbnRBcnJheVJl Z2lvbih0aGlzLGFycmF5LHN0YXJ0LGxlbixidWYpOwogICAgfQogICAgdm9pZCBHZXRMb25n QXJyYXlSZWdpb24oamxvbmdBcnJheSBhcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGpzaXplIHN0YXJ0LCBqc2l6ZSBsZW4sIGpsb25nICpidWYpIHsKICAgICAgICBmdW5j dGlvbnMtPkdldExvbmdBcnJheVJlZ2lvbih0aGlzLGFycmF5LHN0YXJ0LGxlbixidWYpOwog ICAgfQogICAgdm9pZCBHZXRGbG9hdEFycmF5UmVnaW9uKGpmbG9hdEFycmF5IGFycmF5LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzaXplIHN0YXJ0LCBqc2l6ZSBsZW4sIGpm bG9hdCAqYnVmKSB7CiAgICAgICAgZnVuY3Rpb25zLT5HZXRGbG9hdEFycmF5UmVnaW9uKHRo aXMsYXJyYXksc3RhcnQsbGVuLGJ1Zik7CiAgICB9CiAgICB2b2lkIEdldERvdWJsZUFycmF5 UmVnaW9uKGpkb3VibGVBcnJheSBhcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAganNpemUgc3RhcnQsIGpzaXplIGxlbiwgamRvdWJsZSAqYnVmKSB7CiAgICAgICAgZnVu Y3Rpb25zLT5HZXREb3VibGVBcnJheVJlZ2lvbih0aGlzLGFycmF5LHN0YXJ0LGxlbixidWYp OwogICAgfQoKICAgIHZvaWQgU2V0Qm9vbGVhbkFycmF5UmVnaW9uKGpib29sZWFuQXJyYXkg YXJyYXksIGpzaXplIHN0YXJ0LCBqc2l6ZSBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBqYm9vbGVhbiAqYnVmKSB7CiAgICAgICAgZnVuY3Rpb25zLT5TZXRC b29sZWFuQXJyYXlSZWdpb24odGhpcyxhcnJheSxzdGFydCxsZW4sYnVmKTsKICAgIH0KICAg IHZvaWQgU2V0Qnl0ZUFycmF5UmVnaW9uKGpieXRlQXJyYXkgYXJyYXksIGpzaXplIHN0YXJ0 LCBqc2l6ZSBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBqYnl0ZSAq YnVmKSB7CiAgICAgICAgZnVuY3Rpb25zLT5TZXRCeXRlQXJyYXlSZWdpb24odGhpcyxhcnJh eSxzdGFydCxsZW4sYnVmKTsKICAgIH0KICAgIHZvaWQgU2V0Q2hhckFycmF5UmVnaW9uKGpj aGFyQXJyYXkgYXJyYXksIGpzaXplIHN0YXJ0LCBqc2l6ZSBsZW4sCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBqY2hhciAqYnVmKSB7CiAgICAgICAgZnVuY3Rpb25zLT5T ZXRDaGFyQXJyYXlSZWdpb24odGhpcyxhcnJheSxzdGFydCxsZW4sYnVmKTsKICAgIH0KICAg IHZvaWQgU2V0U2hvcnRBcnJheVJlZ2lvbihqc2hvcnRBcnJheSBhcnJheSwganNpemUgc3Rh cnQsIGpzaXplIGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBqc2hv cnQgKmJ1ZikgewogICAgICAgIGZ1bmN0aW9ucy0+U2V0U2hvcnRBcnJheVJlZ2lvbih0aGlz LGFycmF5LHN0YXJ0LGxlbixidWYpOwogICAgfQogICAgdm9pZCBTZXRJbnRBcnJheVJlZ2lv bihqaW50QXJyYXkgYXJyYXksIGpzaXplIHN0YXJ0LCBqc2l6ZSBsZW4sCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IGppbnQgKmJ1ZikgewogICAgICAgIGZ1bmN0aW9ucy0+ U2V0SW50QXJyYXlSZWdpb24odGhpcyxhcnJheSxzdGFydCxsZW4sYnVmKTsKICAgIH0KICAg IHZvaWQgU2V0TG9uZ0FycmF5UmVnaW9uKGpsb25nQXJyYXkgYXJyYXksIGpzaXplIHN0YXJ0 LCBqc2l6ZSBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBqbG9uZyAq YnVmKSB7CiAgICAgICAgZnVuY3Rpb25zLT5TZXRMb25nQXJyYXlSZWdpb24odGhpcyxhcnJh eSxzdGFydCxsZW4sYnVmKTsKICAgIH0KICAgIHZvaWQgU2V0RmxvYXRBcnJheVJlZ2lvbihq ZmxvYXRBcnJheSBhcnJheSwganNpemUgc3RhcnQsIGpzaXplIGxlbiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBqZmxvYXQgKmJ1ZikgewogICAgICAgIGZ1bmN0aW9u cy0+U2V0RmxvYXRBcnJheVJlZ2lvbih0aGlzLGFycmF5LHN0YXJ0LGxlbixidWYpOwogICAg fQogICAgdm9pZCBTZXREb3VibGVBcnJheVJlZ2lvbihqZG91YmxlQXJyYXkgYXJyYXksIGpz aXplIHN0YXJ0LCBqc2l6ZSBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IGpkb3VibGUgKmJ1ZikgewogICAgICAgIGZ1bmN0aW9ucy0+U2V0RG91YmxlQXJyYXlS ZWdpb24odGhpcyxhcnJheSxzdGFydCxsZW4sYnVmKTsKICAgIH0KCiAgICBqaW50IFJlZ2lz dGVyTmF0aXZlcyhqY2xhc3MgY2xhenosIGNvbnN0IEpOSU5hdGl2ZU1ldGhvZCAqbWV0aG9k cywKICAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgbk1ldGhvZHMpIHsKICAgICAgICBy ZXR1cm4gZnVuY3Rpb25zLT5SZWdpc3Rlck5hdGl2ZXModGhpcyxjbGF6eixtZXRob2RzLG5N ZXRob2RzKTsKICAgIH0KICAgIGppbnQgVW5yZWdpc3Rlck5hdGl2ZXMoamNsYXNzIGNsYXp6 KSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucy0+VW5yZWdpc3Rlck5hdGl2ZXModGhpcyxj bGF6eik7CiAgICB9CgogICAgamludCBNb25pdG9yRW50ZXIoam9iamVjdCBvYmopIHsKICAg ICAgICByZXR1cm4gZnVuY3Rpb25zLT5Nb25pdG9yRW50ZXIodGhpcyxvYmopOwogICAgfQog ICAgamludCBNb25pdG9yRXhpdChqb2JqZWN0IG9iaikgewogICAgICAgIHJldHVybiBmdW5j dGlvbnMtPk1vbml0b3JFeGl0KHRoaXMsb2JqKTsKICAgIH0KCiAgICBqaW50IEdldEphdmFW TShKYXZhVk0gKip2bSkgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkdldEphdmFWTSh0 aGlzLHZtKTsKICAgIH0KCiAgICB2b2lkIEdldFN0cmluZ1JlZ2lvbihqc3RyaW5nIHN0ciwg anNpemUgc3RhcnQsIGpzaXplIGxlbiwgamNoYXIgKmJ1ZikgewogICAgICAgIGZ1bmN0aW9u cy0+R2V0U3RyaW5nUmVnaW9uKHRoaXMsc3RyLHN0YXJ0LGxlbixidWYpOwogICAgfQogICAg dm9pZCBHZXRTdHJpbmdVVEZSZWdpb24oanN0cmluZyBzdHIsIGpzaXplIHN0YXJ0LCBqc2l6 ZSBsZW4sIGNoYXIgKmJ1ZikgewogICAgICAgIGZ1bmN0aW9ucy0+R2V0U3RyaW5nVVRGUmVn aW9uKHRoaXMsc3RyLHN0YXJ0LGxlbixidWYpOwogICAgfQoKICAgIHZvaWQgKiBHZXRQcmlt aXRpdmVBcnJheUNyaXRpY2FsKGphcnJheSBhcnJheSwgamJvb2xlYW4gKmlzQ29weSkgewog ICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkdldFByaW1pdGl2ZUFycmF5Q3JpdGljYWwodGhp cyxhcnJheSxpc0NvcHkpOwogICAgfQogICAgdm9pZCBSZWxlYXNlUHJpbWl0aXZlQXJyYXlD cml0aWNhbChqYXJyYXkgYXJyYXksIHZvaWQgKmNhcnJheSwgamludCBtb2RlKSB7CiAgICAg ICAgZnVuY3Rpb25zLT5SZWxlYXNlUHJpbWl0aXZlQXJyYXlDcml0aWNhbCh0aGlzLGFycmF5 LGNhcnJheSxtb2RlKTsKICAgIH0KCiAgICBjb25zdCBqY2hhciAqIEdldFN0cmluZ0NyaXRp Y2FsKGpzdHJpbmcgc3RyaW5nLCBqYm9vbGVhbiAqaXNDb3B5KSB7CiAgICAgICAgcmV0dXJu IGZ1bmN0aW9ucy0+R2V0U3RyaW5nQ3JpdGljYWwodGhpcyxzdHJpbmcsaXNDb3B5KTsKICAg IH0KICAgIHZvaWQgUmVsZWFzZVN0cmluZ0NyaXRpY2FsKGpzdHJpbmcgc3RyaW5nLCBjb25z dCBqY2hhciAqY3N0cmluZykgewogICAgICAgIGZ1bmN0aW9ucy0+UmVsZWFzZVN0cmluZ0Ny aXRpY2FsKHRoaXMsc3RyaW5nLGNzdHJpbmcpOwogICAgfQoKICAgIGp3ZWFrIE5ld1dlYWtH bG9iYWxSZWYoam9iamVjdCBvYmopIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5OZXdX ZWFrR2xvYmFsUmVmKHRoaXMsb2JqKTsKICAgIH0KICAgIHZvaWQgRGVsZXRlV2Vha0dsb2Jh bFJlZihqd2VhayByZWYpIHsKICAgICAgICBmdW5jdGlvbnMtPkRlbGV0ZVdlYWtHbG9iYWxS ZWYodGhpcyxyZWYpOwogICAgfQoKICAgIGpib29sZWFuIEV4Y2VwdGlvbkNoZWNrKCkgewog ICAgICAgIHJldHVybiBmdW5jdGlvbnMtPkV4Y2VwdGlvbkNoZWNrKHRoaXMpOwogICAgfQoK ICAgIGpvYmplY3QgTmV3RGlyZWN0Qnl0ZUJ1ZmZlcih2b2lkKiBhZGRyZXNzLCBqbG9uZyBj YXBhY2l0eSkgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMtPk5ld0RpcmVjdEJ5dGVCdWZm ZXIodGhpcywgYWRkcmVzcywgY2FwYWNpdHkpOwogICAgfQogICAgdm9pZCogR2V0RGlyZWN0 QnVmZmVyQWRkcmVzcyhqb2JqZWN0IGJ1ZikgewogICAgICAgIHJldHVybiBmdW5jdGlvbnMt PkdldERpcmVjdEJ1ZmZlckFkZHJlc3ModGhpcywgYnVmKTsKICAgIH0KICAgIGpsb25nIEdl dERpcmVjdEJ1ZmZlckNhcGFjaXR5KGpvYmplY3QgYnVmKSB7CiAgICAgICAgcmV0dXJuIGZ1 bmN0aW9ucy0+R2V0RGlyZWN0QnVmZmVyQ2FwYWNpdHkodGhpcywgYnVmKTsKICAgIH0KICAg IGpvYmplY3RSZWZUeXBlIEdldE9iamVjdFJlZlR5cGUoam9iamVjdCBvYmopIHsKICAgICAg ICByZXR1cm4gZnVuY3Rpb25zLT5HZXRPYmplY3RSZWZUeXBlKHRoaXMsIG9iaik7CiAgICB9 CgojZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KfTsKCnR5cGVkZWYgc3RydWN0IEphdmFWTU9w dGlvbiB7CiAgICBjaGFyICpvcHRpb25TdHJpbmc7CiAgICB2b2lkICpleHRyYUluZm87Cn0g SmF2YVZNT3B0aW9uOwoKdHlwZWRlZiBzdHJ1Y3QgSmF2YVZNSW5pdEFyZ3MgewogICAgamlu dCB2ZXJzaW9uOwoKICAgIGppbnQgbk9wdGlvbnM7CiAgICBKYXZhVk1PcHRpb24gKm9wdGlv bnM7CiAgICBqYm9vbGVhbiBpZ25vcmVVbnJlY29nbml6ZWQ7Cn0gSmF2YVZNSW5pdEFyZ3M7 Cgp0eXBlZGVmIHN0cnVjdCBKYXZhVk1BdHRhY2hBcmdzIHsKICAgIGppbnQgdmVyc2lvbjsK CiAgICBjaGFyICpuYW1lOwogICAgam9iamVjdCBncm91cDsKfSBKYXZhVk1BdHRhY2hBcmdz OwoKLyogVGhlc2Ugd2lsbCBiZSBWTS1zcGVjaWZpYy4gKi8KCiNkZWZpbmUgSkRLMV8yCiNk ZWZpbmUgSkRLMV80CgovKiBFbmQgVk0tc3BlY2lmaWMuICovCgpzdHJ1Y3QgSk5JSW52b2tl SW50ZXJmYWNlXyB7CiAgICB2b2lkICpyZXNlcnZlZDA7CiAgICB2b2lkICpyZXNlcnZlZDE7 CiAgICB2b2lkICpyZXNlcnZlZDI7CgogICAgamludCAoSk5JQ0FMTCAqRGVzdHJveUphdmFW TSkoSmF2YVZNICp2bSk7CgogICAgamludCAoSk5JQ0FMTCAqQXR0YWNoQ3VycmVudFRocmVh ZCkoSmF2YVZNICp2bSwgdm9pZCAqKnBlbnYsIHZvaWQgKmFyZ3MpOwoKICAgIGppbnQgKEpO SUNBTEwgKkRldGFjaEN1cnJlbnRUaHJlYWQpKEphdmFWTSAqdm0pOwoKICAgIGppbnQgKEpO SUNBTEwgKkdldEVudikoSmF2YVZNICp2bSwgdm9pZCAqKnBlbnYsIGppbnQgdmVyc2lvbik7 CgogICAgamludCAoSk5JQ0FMTCAqQXR0YWNoQ3VycmVudFRocmVhZEFzRGFlbW9uKShKYXZh Vk0gKnZtLCB2b2lkICoqcGVudiwgdm9pZCAqYXJncyk7Cn07CgpzdHJ1Y3QgSmF2YVZNXyB7 CiAgICBjb25zdCBzdHJ1Y3QgSk5JSW52b2tlSW50ZXJmYWNlXyAqZnVuY3Rpb25zOwojaWZk ZWYgX19jcGx1c3BsdXMKCiAgICBqaW50IERlc3Ryb3lKYXZhVk0oKSB7CiAgICAgICAgcmV0 dXJuIGZ1bmN0aW9ucy0+RGVzdHJveUphdmFWTSh0aGlzKTsKICAgIH0KICAgIGppbnQgQXR0 YWNoQ3VycmVudFRocmVhZCh2b2lkICoqcGVudiwgdm9pZCAqYXJncykgewogICAgICAgIHJl dHVybiBmdW5jdGlvbnMtPkF0dGFjaEN1cnJlbnRUaHJlYWQodGhpcywgcGVudiwgYXJncyk7 CiAgICB9CiAgICBqaW50IERldGFjaEN1cnJlbnRUaHJlYWQoKSB7CiAgICAgICAgcmV0dXJu IGZ1bmN0aW9ucy0+RGV0YWNoQ3VycmVudFRocmVhZCh0aGlzKTsKICAgIH0KCiAgICBqaW50 IEdldEVudih2b2lkICoqcGVudiwgamludCB2ZXJzaW9uKSB7CiAgICAgICAgcmV0dXJuIGZ1 bmN0aW9ucy0+R2V0RW52KHRoaXMsIHBlbnYsIHZlcnNpb24pOwogICAgfQogICAgamludCBB dHRhY2hDdXJyZW50VGhyZWFkQXNEYWVtb24odm9pZCAqKnBlbnYsIHZvaWQgKmFyZ3MpIHsK ICAgICAgICByZXR1cm4gZnVuY3Rpb25zLT5BdHRhY2hDdXJyZW50VGhyZWFkQXNEYWVtb24o dGhpcywgcGVudiwgYXJncyk7CiAgICB9CiNlbmRpZgp9OwoKI2lmZGVmIF9KTklfSU1QTEVN RU5UQVRJT05fCiNkZWZpbmUgX0pOSV9JTVBPUlRfT1JfRVhQT1JUXyBKTklFWFBPUlQKI2Vs c2UKI2RlZmluZSBfSk5JX0lNUE9SVF9PUl9FWFBPUlRfIEpOSUlNUE9SVAojZW5kaWYKX0pO SV9JTVBPUlRfT1JfRVhQT1JUXyBqaW50IEpOSUNBTEwKSk5JX0dldERlZmF1bHRKYXZhVk1J bml0QXJncyh2b2lkICphcmdzKTsKCl9KTklfSU1QT1JUX09SX0VYUE9SVF8gamludCBKTklD QUxMCkpOSV9DcmVhdGVKYXZhVk0oSmF2YVZNICoqcHZtLCB2b2lkICoqcGVudiwgdm9pZCAq YXJncyk7CgpfSk5JX0lNUE9SVF9PUl9FWFBPUlRfIGppbnQgSk5JQ0FMTApKTklfR2V0Q3Jl YXRlZEphdmFWTXMoSmF2YVZNICoqLCBqc2l6ZSwganNpemUgKik7CgovKiBEZWZpbmVkIGJ5 IG5hdGl2ZSBsaWJyYXJpZXMuICovCkpOSUVYUE9SVCBqaW50IEpOSUNBTEwKSk5JX09uTG9h ZChKYXZhVk0gKnZtLCB2b2lkICpyZXNlcnZlZCk7CgpKTklFWFBPUlQgdm9pZCBKTklDQUxM CkpOSV9PblVubG9hZChKYXZhVk0gKnZtLCB2b2lkICpyZXNlcnZlZCk7CgojZGVmaW5lIEpO SV9WRVJTSU9OXzFfMSAweDAwMDEwMDAxCiNkZWZpbmUgSk5JX1ZFUlNJT05fMV8yIDB4MDAw MTAwMDIKI2RlZmluZSBKTklfVkVSU0lPTl8xXzQgMHgwMDAxMDAwNAojZGVmaW5lIEpOSV9W RVJTSU9OXzFfNiAweDAwMDEwMDA2CiNkZWZpbmUgSk5JX1ZFUlNJT05fMV84IDB4MDAwMTAw MDgKCiNpZmRlZiBfX2NwbHVzcGx1cwp9IC8qIGV4dGVybiAiQyIgKi8KI2VuZGlmIC8qIF9f Y3BsdXNwbHVzICovCgojZW5kaWYgLyogIV9KQVZBU09GVF9KTklfSF8gKi8K --------------060905020505000106000506--