From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp-relay-2.sys.kth.se (smtp-relay-2.sys.kth.se [IPv6:2001:6b0:1:1200:250:56ff:fead:963e]) by sourceware.org (Postfix) with ESMTPS id EE6C73858016; Mon, 6 Dec 2021 10:47:26 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org EE6C73858016 Received: from exdb1.ug.kth.se (exdb1.ug.kth.se [192.168.32.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp-relay-2.sys.kth.se (Postfix) with ESMTPS id 4J70Vz2fRwzPMdX; Mon, 6 Dec 2021 11:47:22 +0100 (CET) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp-relay-2.sys.kth.se 4J70Vz2fRwzPMdX Received: from exdb6.ug.kth.se (192.168.32.61) by exdb1.ug.kth.se (192.168.32.56) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.14; Mon, 6 Dec 2021 11:47:22 +0100 Received: from exdb6.ug.kth.se ([192.168.32.61]) by exdb6.ug.kth.se ([192.168.32.61]) with mapi id 15.02.0986.014; Mon, 6 Dec 2021 11:47:22 +0100 From: Petter Tomner To: "gcc-patches@gcc.gnu.org" , "jit@gcc.gnu.org" Subject: [PATCH v2] jit: Add support for global rvalue initialization and ctors Thread-Topic: [PATCH v2] jit: Add support for global rvalue initialization and ctors Thread-Index: AQHX6kRSdlggilZaSkOUVbKhDXhGHQ== Date: Mon, 6 Dec 2021 10:47:22 +0000 Message-ID: <47b54ae597a44706aba180a05f1e5fe7@kth.se> Accept-Language: sv-SE, en-US Content-Language: sv-SE X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-originating-ip: [192.168.32.250] Content-Type: multipart/mixed; boundary="_002_47b54ae597a44706aba180a05f1e5fe7kthse_" MIME-Version: 1.0 X-Spam-Status: No, score=-12.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, SPF_HELO_NONE, SPF_PASS, TXREP, T_FILL_THIS_FORM_SHORT autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: jit@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Jit mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Dec 2021 10:47:34 -0000 --_002_47b54ae597a44706aba180a05f1e5fe7kthse_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hi! Attached is a patch with changes in line with the review of the prior patch= . The patch adds support for initialization of global variables with rvalues = as well as rvalue constructors for structs, arrays and unions. Review: https://gcc.gnu.org/pipermail/jit/2021q4/001400.html The points have been addressed, except: > Can the type be made const? I started to make types_kinda_same_internal () taking const args, but I fel= t the patch was ballooning because some spread out methods needed a const=20 signature too. I could submit that in a separate patch. I also addressed a problem Antoni found: https://gcc.gnu.org/pipermail/jit/= 2021q4/001399.html , where you could not initialize global pointer variables to point to unini= tialized variables. I did that by=20 removing a redundant check with validate_var_has_init (), since that walkin= g function would have to be quite complex to allow pointers to uninitialized variables. Any: const int foo; int bar =3D foo; will instead be reported as "not compile time constant" instead of a nice e= rror message with names. make check-jit runs fine on gnu-linux-x64 Debian. Regards, Petter = --_002_47b54ae597a44706aba180a05f1e5fe7kthse_ Content-Type: text/x-patch; name="0001-Add-support-for-global-rvalue-initialization-and-con.patch" Content-Description: 0001-Add-support-for-global-rvalue-initialization-and-con.patch Content-Disposition: attachment; filename="0001-Add-support-for-global-rvalue-initialization-and-con.patch"; size=152181; creation-date="Mon, 06 Dec 2021 10:38:38 GMT"; modification-date="Mon, 06 Dec 2021 10:38:38 GMT" Content-Transfer-Encoding: base64 RnJvbSBhNGZlZjEzMDhlYWE3MmNlNGVjNTFkYmU1ZWZjZmJiZjAzMmU5ODcwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXR0ZXIgVG9tbmVyIDx0b21uZXJAa3RoLnNlPgpEYXRlOiBN b24sIDI5IE5vdiAyMDIxIDIwOjQ0OjA3ICswMTAwClN1YmplY3Q6IFtQQVRDSF0gQWRkIHN1cHBv cnQgZm9yIGdsb2JhbCBydmFsdWUgaW5pdGlhbGl6YXRpb24gYW5kIGNvbnN0cnVjdG9ycwoKVGhp cyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGluaXRpYWxpemF0aW9uIG9mIGdsb2JhbCB2YXJpYWJs ZXMKd2l0aCBydmFsdWVzIGFuZCBjcmVhdGluZyBjb25zdHJ1Y3RvcnMgZm9yIGFycmF5LCBzdHJ1 Y3QgYW5kCnVuaW9uIHR5cGVzIHdoaWNoIGNhbiBiZSB1c2VkIGFzIHJ2YWx1ZXMuCgpTaWduZWQt b2ZmLWJ5OgoyMDIxLTEyLTA2CVBldHRlciBUb21uZXIJPHRvbW5lckBrdGguc2U+CgpnY2Mvaml0 LwoJKiBqaXQtcGxheWJhY2suYyA6IEZvbGRpbmcgYW4gc2V0dGluZyBpbnRpdGlhbAoJKGdsb2Jh bF9uZXdfZGVjbCkgOiBIYW5kbGUgY29uc3QgZ2xvYmFsIGdlbmVyYXRpb24KCShuZXdfZ2xvYmFs KSA6IE5ldyBmbGFnCgkoZ2xvYmFsX3NldF9pbml0X3J2YWx1ZSkgOiBOZXcKCShuZXdfY3Rvcikg OiBOZXcKCShuZXdfZ2xvYmFsX2luaXRpYWxpemVkKSA6IEZsYWcKCShhc190cnV0aF92YWx1ZSkg OiBGb2xkCgkobmV3X3VuYXJ5X29wKSA6IEZvbGQKCShuZXdfYmluYXJ5X29wKSA6IEZvbGQKCShu ZXdfY29tcGFyaXNvbikgOiBGb2xkCgkobmV3X2FycmF5X2FjY2VzcykgOiBGb2xkCgkobmV3X2Rl cmVmZXJlbmNlKSA6IEZvbGQKCShnZXRfYWRkcmVzcykgOiBGb2xkCgkqIGppdC1wbGF5YmFjay5o IDoKCShnbG9iYWxfc2V0X2luaXRfcnZhbHVlKSA6IE5ldwoJKG5ld19jdG9yKSA6IE5ldwoJKiBq aXQtcmVjb3JkaW5nLmMgOgoJKiBqaXQtcmVjb3JkaW5nLmggOgoJKG5ld19nbG9iYWxfaW5pdF9y dmFsdWUpIDogTmV3CgkobmV3X2N0b3IpIDogTmV3CgkoY3RvcikgOiBOZXcsIGluaGVyaXRzIHJ2 YWx1ZQoJKGdsb2JhbF9pbml0X3J2YWx1ZSkgOiBOZXcsIGluaGVyaXRzIG1lbWVudG8KCSh0eXBl Ojppc191bmlvbikgOiBOZXcKCSogbGliZ2Njaml0KysuaCA6IE5ldyBlbnRyeXBvaW50cywgc2Vl IEMtaGVhZGVyCgkqIGxpYmdjY2ppdC5jIDogU2VlIC5oCgkqIGxpYmdjY2ppdC5oIDogTmV3IGVu dHJ5cG9pbnRzCgkoZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV9jb25zdHJ1Y3RvcikgOiBOZXcK CShnY2Nfaml0X2NvbnRleHRfbmV3X3N0cnVjdF9jb25zdHJ1Y3RvcikgOiBOZXcKCShnY2Nfaml0 X2NvbnRleHRfbmV3X3VuaW9uX2NvbnN0cnVjdG9yKSA6IE5ldwoJKGdjY19qaXRfZ2xvYmFsX3Nl dF9pbml0aWFsaXplcl9ydmFsdWUpIDogTmV3CgkoTElCR0NDSklUX0hBVkVfQ1RPUlMpIDogTmV3 IGZldXR1cmUgbWFjcm8KCSogbGliZ2Njaml0Lm1hcCA6IE5ldyBlbnRyeXBvaW50cyBhZGRlZCB0 byBBQkkgMTcKCmdjYy90ZXN0c3VpdGUvCgkqIGppdC5kZy9hbGwtbm9uLWZhaWxpbmctdGVzdHMu aDogQWRkZWQgdHdvIHRlc3RzCgkqIGppdC5kZy90ZXN0LWVycm9yLWN0b3ItYXJyYXktd3Jvbmct dHlwZS5jOiBOZXcKCSogaml0LmRnL3Rlc3QtZXJyb3ItY3Rvci1zdHJ1Y3QtdG9vLWJpZy5jOiBO ZXcKCSogaml0LmRnL3Rlc3QtZXJyb3ItY3Rvci1zdHJ1Y3Qtd3JvbmctZmllbGQtb2JqLmM6IE5l dwoJKiBqaXQuZGcvdGVzdC1lcnJvci1jdG9yLXN0cnVjdC13cm9uZy10eXBlLmM6IE5ldwoJKiBq aXQuZGIvdGVzdC1lcnJvci1jdG9yLXN0cnVjdC13cm9uZy10eXBlMi5jCgkqIGppdC5kZy90ZXN0 LWVycm9yLWN0b3ItdW5pb24td3JvbmctZmllbGQtbmFtZS5jOiBOZXcKCSogaml0LmRnL3Rlc3Qt ZXJyb3ItZ2xvYmFsLWFscmVhZHktaW5pdC5jOiBOZXcKCSogaml0LmRnL3Rlc3QtZXJyb3ItZ2xv YmFsLWNvbW1vbi1zZWN0aW9uLmM6IE5ldwoJKiBqaXQuZGcvdGVzdC1lcnJvci1nbG9iYWwtaW5p dC10b28tc21hbGwtYXJyYXkuYzogTmV3CgkqIGppdC5kZy90ZXN0LWVycm9yLWdsb2JhbC1sdmFs dWUtaW5pdC5jOiBOZXcKCSogaml0LmRnL3Rlc3QtZXJyb3ItZ2xvYmFsLW5vbmNvbnN0LWluaXQu YzogTmV3CgkqIGppdC5kZy90ZXN0LWdsb2JhbC1pbml0LXJ2YWx1ZS5jOiBOZXcKCSogaml0LmRn L3Rlc3QtbG9jYWwtaW5pdC1ydmFsdWUuYzogTmV3CgpnY2Mvaml0L2RvY3MvdG9waWNzLwoJKiBl eHByZXNzaW9ucy5yc3QgOiBVcGRhdGVkIGRvY3MKLS0tCiBnY2Mvaml0L2RvY3MvdG9waWNzL2V4 cHJlc3Npb25zLnJzdCAgICAgICAgICAgfCAgMTczICsrCiBnY2Mvaml0L2ppdC1jb21tb24uaCAg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA5ICsKIGdjYy9qaXQvaml0LXBsYXliYWNrLmMg ICAgICAgICAgICAgICAgICAgICAgICB8ICAyMTggKystCiBnY2Mvaml0L2ppdC1wbGF5YmFjay5o ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIwICstCiBnY2Mvaml0L2ppdC1yZWNvcmRpbmcu YyAgICAgICAgICAgICAgICAgICAgICAgfCAgNDY5ICsrKystCiBnY2Mvaml0L2ppdC1yZWNvcmRp bmcuaCAgICAgICAgICAgICAgICAgICAgICAgfCAgIDk0ICsKIGdjYy9qaXQvbGliZ2Njaml0Kysu aCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgOTAgKwogZ2NjL2ppdC9saWJnY2NqaXQuYyAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQwNSArKysrLQogZ2NjL2ppdC9saWJnY2NqaXQu aCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE1MyArKwogZ2NjL2ppdC9saWJnY2NqaXQu bWFwICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgOCArCiBnY2MvdGVzdHN1aXRlL2ppdC5k Zy9hbGwtbm9uLWZhaWxpbmctdGVzdHMuaCAgfCAgIDIwICsKIC4uLi9qaXQuZGcvdGVzdC1lcnJv ci1jdG9yLWFycmF5LXdyb25nLXR5cGUuYyB8ICAgNTQgKwogLi4uL2ppdC5kZy90ZXN0LWVycm9y LWN0b3Itc3RydWN0LXRvby1iaWcuYyAgIHwgICA3MSArCiAuLi4vdGVzdC1lcnJvci1jdG9yLXN0 cnVjdC13cm9uZy1maWVsZC1vYmouYyAgfCAgIDg2ICsKIC4uLi90ZXN0LWVycm9yLWN0b3Itc3Ry dWN0LXdyb25nLXR5cGUuYyAgICAgICB8ICAgNzYgKwogLi4uL3Rlc3QtZXJyb3ItY3Rvci1zdHJ1 Y3Qtd3JvbmctdHlwZTIuYyAgICAgIHwgICA3NyArCiAuLi4vdGVzdC1lcnJvci1jdG9yLXVuaW9u LXdyb25nLWZpZWxkLW5hbWUuYyAgfCAgIDc2ICsKIC4uLi9qaXQuZGcvdGVzdC1lcnJvci1nbG9i YWwtYWxyZWFkeS1pbml0LmMgICB8ICAgNDYgKwogLi4uL2ppdC5kZy90ZXN0LWVycm9yLWdsb2Jh bC1jb21tb24tc2VjdGlvbi5jIHwgICA1NCArCiAuLi4vdGVzdC1lcnJvci1nbG9iYWwtaW5pdC10 b28tc21hbGwtYXJyYXkuYyAgfCAgIDY1ICsKIC4uLi9qaXQuZGcvdGVzdC1lcnJvci1nbG9iYWwt bHZhbHVlLWluaXQuYyAgICB8ICAgNjAgKwogLi4uL2ppdC5kZy90ZXN0LWVycm9yLWdsb2JhbC1u b25jb25zdC1pbml0LmMgIHwgICA4MCArCiAuLi4vaml0LmRnL3Rlc3QtZ2xvYmFsLWluaXQtcnZh bHVlLmMgICAgICAgICAgfCAxNTYzICsrKysrKysrKysrKysrKysrCiBnY2MvdGVzdHN1aXRlL2pp dC5kZy90ZXN0LWxvY2FsLWluaXQtcnZhbHVlLmMgfCAgNjE0ICsrKysrKysKIDI0IGZpbGVzIGNo YW5nZWQsIDQ1NDkgaW5zZXJ0aW9ucygrKSwgMzIgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAx MDA2NDQgZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1jdG9yLWFycmF5LXdyb25nLXR5 cGUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3It Y3Rvci1zdHJ1Y3QtdG9vLWJpZy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9q aXQuZGcvdGVzdC1lcnJvci1jdG9yLXN0cnVjdC13cm9uZy1maWVsZC1vYmouYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItY3Rvci1zdHJ1Y3Qtd3Jv bmctdHlwZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1l cnJvci1jdG9yLXN0cnVjdC13cm9uZy10eXBlMi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rl c3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1jdG9yLXVuaW9uLXdyb25nLWZpZWxkLW5hbWUuYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItZ2xvYmFs LWFscmVhZHktaW5pdC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcv dGVzdC1lcnJvci1nbG9iYWwtY29tbW9uLXNlY3Rpb24uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdj Yy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItZ2xvYmFsLWluaXQtdG9vLXNtYWxsLWFycmF5 LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWds b2JhbC1sdmFsdWUtaW5pdC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9qaXQu ZGcvdGVzdC1lcnJvci1nbG9iYWwtbm9uY29uc3QtaW5pdC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg Z2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1nbG9iYWwtaW5pdC1ydmFsdWUuYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtbG9jYWwtaW5pdC1ydmFsdWUuYwoK ZGlmZiAtLWdpdCBhL2djYy9qaXQvZG9jcy90b3BpY3MvZXhwcmVzc2lvbnMucnN0IGIvZ2NjL2pp dC9kb2NzL3RvcGljcy9leHByZXNzaW9ucy5yc3QKaW5kZXggMzk2MjU5ZWYwN2UuLjVmNjRjYTY4 NTk1IDEwMDY0NAotLS0gYS9nY2Mvaml0L2RvY3MvdG9waWNzL2V4cHJlc3Npb25zLnJzdAorKysg Yi9nY2Mvaml0L2RvY3MvdG9waWNzL2V4cHJlc3Npb25zLnJzdApAQCAtMTI2LDYgKzEyNiwxNDcg QEAgU2ltcGxlIGV4cHJlc3Npb25zCiAgICB1bmRlcmx5aW5nIHN0cmluZywgc28gaXQgaXMgdmFs aWQgdG8gcGFzcyBpbiBhIHBvaW50ZXIgdG8gYW4gb24tc3RhY2sKICAgIGJ1ZmZlci4KIAorQ29u c3RydWN0b3IgZXhwcmVzc2lvbnMKKyoqKioqKioqKioqKioqKioqKioqKioqCisKKyAgIFRoZSBm b2xsb3dpbmcgZnVuY3Rpb25zIG1ha2UgY29uc3RydWN0b3JzIGZvciBhcnJheSwgc3RydWN0IGFu ZCB1bmlvbgorICAgdHlwZXMuCisKKyAgIFRoZSBjb25zdHJ1Y3RvciBydmFsdWUgY2FuIGJlIHVz ZWQgZm9yIGFzc2lnbm1lbnQgdG8gbG9jYWxzLgorICAgSXQgY2FuIGJlIHVzZWQgdG8gaW5pdGlh bGl6ZSBnbG9iYWwgdmFyaWFibGVzIHdpdGgKKyAgIDpmdW5jOmBnY2Nfaml0X2dsb2JhbF9zZXRf aW5pdGlhbGl6ZXJfcnZhbHVlYC4gSXQgY2FuIGFsc28gYmUgdXNlZCBhcyBhCisgICB0ZW1wb3Jh cnkgdmFsdWUgZm9yIGZ1bmN0aW9uIGNhbGxzIGFuZCByZXR1cm4gdmFsdWVzLCBidXQgaXRzIGFk ZHJlc3MKKyAgIGNhbid0IGJlIHRha2VuLgorCisgICBOb3RlIHRoYXQgYXJyYXlzIGluIGxpYmdj Y2ppdCBkb2VzIG5vdCBjb2xsYXBzZSB0byBwb2ludGVycyBsaWtlIGluCisgICBDLiBJLmUuIGlm IGFuIGFycmF5IGNvbnN0cnVjdG9yIGlzIHVzZWQgYXMgZS5nLiBhIHJldHVybiB2YWx1ZSwgdGhl IHdob2xlCisgICBhcnJheSB3b3VsZCBiZSByZXR1cm5lZCBieSB2YWx1ZSAtIGFycmF5IGNvbnN0 cnVjdG9ycyBjYW4gYmUgYXNzaWduZWQgdG8KKyAgIGFycmF5IHZhcmlhYmxlcy4KKworICAgVGhl IGNvbnN0cnVjdG9yIGNhbiBjb250YWluIG5lc3RlZCBjb25zdHJ1Y3RvcnMuCisKKyAgIE5vdGUg dGhhdCBhIHN0cmluZyBsaXRlcmFsIHJ2YWx1ZSBjYW4ndCBiZSB1c2VkIHRvIGNvbnN0cnVjdCBh IGNoYXIgYXJyYXkuCisgICBJdCBuZWVkIG9uZSBydmFsdWUgZm9yIGVhY2ggY2hhci4KKworICAg VGhlc2UgZW50cnlwb2ludHMgd2VyZSBhZGRlZCBpbiA6cmVmOmBMSUJHQ0NKSVRfQUJJXzE2YDsg eW91IGNhbiB0ZXN0IGZvciBpdHMKKyAgIHByZXNlbnNlIHVzaW5nOgorCisgICAuLiBjb2RlLWJs b2NrOjogYworICAgICAjaWZkZWYgTElCR0NDSklUX0hBVkVfQ1RPUlMKKworLi4gZnVuY3Rpb246 OiBnY2Nfaml0X3J2YWx1ZSAqXAorCSAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfYXJyYXlfY29u c3RydWN0b3IgKGdjY19qaXRfY29udGV4dCAqY3R4dCxcCisJCQkJCQkgICAgIGdjY19qaXRfbG9j YXRpb24gKmxvYyxcCisJCQkJCQkgICAgIGdjY19qaXRfdHlwZSAqdHlwZSxcCisJCQkJCQkgICAg IHNpemVfdCBhcnJfbGVuZ3RoLFwKKwkJCQkJCSAgICAgZ2NjX2ppdF9ydmFsdWUgKip2YWx1ZXMp CisKKyAgIENyZWF0ZSBhIGNvbnN0cnVjdG9yIGZvciBhbiBhcnJheSBhcyBhIHJ2YWx1ZS4KKwor ICAgUmV0dXJucyBOVUxMIG9uIGVycm9yLiBgYHZhbHVlc2BgIGFyZSBjb3BpZWQgYW5kCisgICBk byBub3QgaGF2ZSB0byBvdXRsaXZlIHRoZSBjb250ZXh0LgorCisgICBgYHR5cGVgYCBzcGVjaWZp ZXMgd2hhdCB0aGUgY29uc3RydWN0b3Igd2lsbCBidWlsZCBhbmQgaGFzIHRvIGJlCisgICBhbiBh cnJheS4KKworICAgYGBhcnJfbGVuZ3RoYGAgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgZWxlbWVu dHMgaW4gYGB2YWx1ZXNgYCBhbmQKKyAgIGl0IGNhbid0IGhhdmUgbW9yZSBlbGVtZW50cyB0aGFu IHRoZSBhcnJheSB0eXBlLgorCisgICBFYWNoIHZhbHVlIGluIGBgdmFsdWVzYGAgc2V0cyB0aGUg Y29ycmVzcG9uZGluZyB2YWx1ZSBpbiB0aGUgYXJyYXkuCisgICBJZiB0aGUgYXJyYXkgdHlwZSBp dHNlbGYgaGFzIG1vcmUgZWxlbWVudHMgdGhhbiBgYHZhbHVlc2BgLCB0aGUKKyAgIGxlZnQtb3Zl ciBlbGVtZW50cyB3aWxsIGJlIHplcm9lZC4KKworICAgRWFjaCB2YWx1ZSBpbiBgYHZhbHVlc2Bg IG5lZWQgdG8gYmUgdGhlIHNhbWUgdW5xdWFsaWZpZWQgdHlwZSBhcyB0aGUKKyAgIGFycmF5IHR5 cGUncyBlbGVtZW50IHR5cGUuCisKKyAgIElmIGBgYXJyX2xlbmd0aGBgIGlzIDAsIHRoZSBgYHZh bHVlc2BgIHBhcmFtZXRlciB3aWxsIGJlCisgICBpZ25vcmVkIGFuZCB6ZXJvIGluaXRpYWxpemF0 aW9uIHdpbGwgYmUgdXNlZC4KKworICAgVGhpcyBlbnRyeXBvaW50IHdhcyBhZGRlZCBpbiA6cmVm OmBMSUJHQ0NKSVRfQUJJXzE3YDsgeW91IGNhbiB0ZXN0IGZvciBpdHMKKyAgIHByZXNlbnNlIHVz aW5nOgorCisgICAuLiBjb2RlLWJsb2NrOjogYworICAgICAjaWZkZWYgTElCR0NDSklUX0hBVkVf Q1RPUlMKKworLi4gZnVuY3Rpb246OiBnY2Nfaml0X3J2YWx1ZSAqXAorCSAgICAgIGdjY19qaXRf Y29udGV4dF9uZXdfc3RydWN0X2NvbnN0cnVjdG9yIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsXAor CQkJCQkJICAgICAgZ2NjX2ppdF9sb2NhdGlvbiAqbG9jLFwKKwkJCQkJCSAgICAgIGdjY19qaXRf dHlwZSAqdHlwZSxcCisJCQkJCQkgICAgICBzaXplX3QgYXJyX2xlbmd0aCxcCisJCQkJCQkgICAg ICBnY2Nfaml0X2ZpZWxkICoqZmllbGRzLFwKKwkJCQkJCSAgICAgIGdjY19qaXRfcnZhbHVlICoq dmFsdWUpCisKKworICAgQ3JlYXRlIGEgY29uc3RydWN0b3IgZm9yIGFuIHN0cnVjdCBhcyBhIHJ2 YWx1ZS4KKworICAgUmV0dXJucyBOVUxMIG9uIGVycm9yLiBUaGUgdHdvIHBhcmFtZXRlciBhcnJh eXMgYXJlIGNvcGllZCBhbmQKKyAgIGRvIG5vdCBoYXZlIHRvIG91dGxpdmUgdGhlIGNvbnRleHQu CisKKyAgIGBgdHlwZWBgIHNwZWNpZmllcyB3aGF0IHRoZSBjb25zdHJ1Y3RvciB3aWxsIGJ1aWxk IGFuZCBoYXMgdG8gYmUKKyAgIGEgc3RydWN0LgorCisgICBgYGFycl9sZW5ndGhgYCBzcGVjaWZp ZXMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBgYHZhbHVlc2BgLgorCisgICBgYGZpZWxkc2Bg IG5lZWQgdG8gaGF2ZSB0aGUgc2FtZSBsZW5ndGggYXMgYGB2YWx1ZXNgYCwgb3IgYmUgTlVMTC4K KworICAgSWYgYGBmaWVsZHNgYCBpcyBudWxsLCB0aGUgdmFsdWVzIGFyZSBhcHBsaWVkIGluIGRl ZmluaXRpb24gb3JkZXIuCisKKyAgIE90aGVyd2lzZSwgZWFjaCBmaWVsZCBpbiBgYGZpZWxkc2Bg IHNwZWNpZmllcyB3aGljaCBmaWVsZCBpbiB0aGUgc3RydWN0IHRvCisgICBzZXQgdG8gdGhlIGNv cnJlc3BvbmRpbmcgdmFsdWUgaW4gYGB2YWx1ZXNgYC4gYGBmaWVsZHNgYCBhbmQgYGB2YWx1ZXNg YAorICAgYXJlIHBhaXJlZCBieSBpbmRleC4KKworICAgVGhlIGZpZWxkcyBpbiBgYGZpZWxkc2Bg IGhhdmUgdG8gYmUgaW4gZGVmaW5pdGlvbiBvcmRlciwgYnV0IHRoZXJlCisgICBjYW4gYmUgZ2Fw cy4gQW55IGZpZWxkIGluIHRoZSBzdHJ1Y3QgdGhhdCBpcyBub3Qgc3BlY2lmaWVkIGluCisgICBg YGZpZWxkc2BgIHdpbGwgYmUgemVyb2VkLgorCisgICBUaGUgZmllbGRzIGluIGBgZmllbGRzYGAg bmVlZCB0byBiZSB0aGUgc2FtZSBvYmplY3RzIHRoYXQgd2VyZSB1c2VkCisgICB0byBjcmVhdGUg dGhlIHN0cnVjdC4KKworICAgRWFjaCB2YWx1ZSBoYXMgdG8gaGF2ZSBoYXZlIHRoZSBzYW1lIHVu cXVhbGlmaWVkIHR5cGUgYXMgdGhlIGZpZWxkCisgICBpdCBpcyBhcHBsaWVkIHRvLgorCisgICBB IE5VTEwgdmFsdWUgZWxlbWVudCAgaW4gYGB2YWx1ZXNgYCBpcyBhIHNob3J0aGFuZCBmb3IgemVy byBpbml0aWFsaXphdGlvbgorICAgb2YgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQuCisKKyAgIElm IGBgYXJyX2xlbmd0aGBgIGlzIDAsIHRoZSBhcnJheSBwYXJhbWV0ZXJzIHdpbGwgYmUKKyAgIGln bm9yZWQgYW5kIHplcm8gaW5pdGlhbGl6YXRpb24gd2lsbCBiZSB1c2VkLgorCisgICBUaGlzIGVu dHJ5cG9pbnQgd2FzIGFkZGVkIGluIDpyZWY6YExJQkdDQ0pJVF9BQklfMTdgOyB5b3UgY2FuIHRl c3QgZm9yIGl0cworICAgcHJlc2Vuc2UgdXNpbmc6CisKKyAgIC4uIGNvZGUtYmxvY2s6OiBjCisg ICAgICNpZmRlZiBMSUJHQ0NKSVRfSEFWRV9DVE9SUworCisuLiBmdW5jdGlvbjo6IGdjY19qaXRf cnZhbHVlICpcCisJICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld191bmlvbl9jb25zdHJ1Y3RvciAo Z2NjX2ppdF9jb250ZXh0ICpjdHh0LFwKKwkJCQkJCSAgICAgZ2NjX2ppdF9sb2NhdGlvbiAqbG9j LFwKKwkJCQkJCSAgICAgZ2NjX2ppdF90eXBlICp0eXBlLFwKKwkJCQkJCSAgICAgZ2NjX2ppdF9m aWVsZCAqZmllbGQsXAorCQkJCQkJICAgICBnY2Nfaml0X3J2YWx1ZSAqdmFsdWUpCisKKyAgIENy ZWF0ZSBhIGNvbnN0cnVjdG9yIGZvciBhbiB1bmlvbiBhcyBhIHJ2YWx1ZS4KKworICAgUmV0dXJu cyBOVUxMIG9uIGVycm9yLgorCisgICBgYHR5cGVgYCBzcGVjaWZpZXMgd2hhdCB0aGUgY29uc3Ry dWN0b3Igd2lsbCBidWlsZCBhbmQgaGFzIHRvIGJlCisgICBhbiB1bmlvbi4KKworICAgYGBmaWVs ZGBgIHNwZWNpZmllcyB3aGljaCBmaWVsZCB0byBzZXQuIElmIGl0IGlzIE5VTEwsIHRoZSBmaXJz dAorICAgZmllbGQgaW4gdGhlIHVuaW9uIHdpbGwgYmUgc2V0LmBgZmllbGRgYCBuZWVkIHRvIGJl IHRoZSBzYW1lIG9iamVjdAorICAgdGhhdCB3ZXJlIHVzZWQgdG8gY3JlYXRlIHRoZSB1bmlvbi4K KworICAgYGB2YWx1ZWBgIHNwZWNpZmllcyB3aGF0IHZhbHVlIHRvIHNldCB0aGUgY29ycmVzcG9u ZGluZyBmaWVsZCB0by4KKyAgIElmIGBgdmFsdWVgYCBpcyBOVUxMLCB6ZXJvIGluaXRpYWxpemF0 aW9uIHdpbGwgYmUgdXNlZC4KKworICAgRWFjaCB2YWx1ZSBoYXMgdG8gaGF2ZSBoYXZlIHRoZSBz YW1lIHVucXVhbGlmaWVkIHR5cGUgYXMgdGhlIGZpZWxkCisgICBpdCBpcyBhcHBsaWVkIHRvLgor CisgICBUaGlzIGVudHJ5cG9pbnQgd2FzIGFkZGVkIGluIDpyZWY6YExJQkdDQ0pJVF9BQklfMTdg OyB5b3UgY2FuIHRlc3QgZm9yIGl0cworICAgcHJlc2Vuc2UgdXNpbmc6CisKKyAgIC4uIGNvZGUt YmxvY2s6OiBjCisgICAgICNpZmRlZiBMSUJHQ0NKSVRfSEFWRV9DVE9SUworCiBWZWN0b3IgZXhw cmVzc2lvbnMKICoqKioqKioqKioqKioqKioqKgogCkBAIC02MDMsNiArNzQ0LDM4IEBAIEdsb2Jh bCB2YXJpYWJsZXMKIAogICAgICAgI2lmZGVmIExJQkdDQ0pJVF9IQVZFX2djY19qaXRfZ2xvYmFs X3NldF9pbml0aWFsaXplcgogCisuLiBmdW5jdGlvbjo6IGdjY19qaXRfbHZhbHVlICpcCisJICAg ICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoZ2NjX2ppdF9sdmFsdWUg Kmdsb2JhbCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn Y2Nfaml0X3J2YWx1ZSAqaW5pdF92YWx1ZSkKKworICAgU2V0IHRoZSBpbml0aWFsIHZhbHVlIG9m IGEgZ2xvYmFsIHdpdGggYW4gcnZhbHVlLgorCisgICBUaGUgcnZhbHVlIG5lZWQgdG8gYmUgYSBj b25zdGFudCBleHByZXNzaW9uLCBlLmcuIG5vIGZ1bmN0aW9uIGNhbGxzLgorCisgICBUaGUgZ2xv YmFsIGNhbid0IGhhdmUgdGhlIGBga2luZGBgIDpyZWY6YEdDQ19KSVRfR0xPQkFMX0lNUE9SVEVE YC4KKworICAgQXMgYSBub24tY29tcHJlaGVuc2l2ZSBleGFtcGxlIGl0IGlzIE9LIHRvIGRvIHRo ZSBlcXVpdmFsZW50IG9mOgorCisgICAuLiBjb2RlLWJsb2NrOjogYworCisgICAgICAgaW50IGZv byA9IDMgKiAyOyAvKiBydmFsdWUgZnJvbSBnY2Nfaml0X2NvbnRleHRfbmV3X2JpbmFyeV9vcC4g ICovCisgICAgICAgaW50IGFycltdID0gezEsMiwzLDR9OyAvKiBydmFsdWUgZnJvbSBnY2Nfaml0 X2NvbnRleHRfbmV3X2NvbnN0cnVjdG9yLiAgKi8KKyAgICAgICBpbnQgKmJhciA9ICZhcnJbMl0g KyAxOyAvKiBydmFsdWUgZnJvbSBuZXN0ZWQgImdldCBhZGRyZXNzIiBvZiAiYXJyYXkgYWNjZXNz Ii4gICovCisgICAgICAgY29uc3QgaW50IGJheiA9IDM7IC8qIHJ2YWx1ZSBmcm9tIGdjY19qaXRf Y29udGV4dF9ydmFsdWVfZnJvbV9pbnQuICAqLworICAgICAgIGludCBib3ogPSBiYXo7IC8qIHJ2 YWx1ZSBmcm9tIGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZS4gICovCisKKyAgIFVzZSB0b2dldGhl ciB3aXRoIDpyZWY6YGdjY19qaXRfY29udGV4dF9uZXdfY29uc3RydWN0b3JgIHRvCisgICBpbml0 aWFsaXplIHN0cnVjdHMsIHVuaW9ucyBhbmQgYXJyYXlzLgorCisgICBPbiBzdWNjZXNzLCByZXR1 cm5zIHRoZSBgYGdsb2JhbGBgIHBhcmFtZXRlciB1bmNoYW5nZWQuIE90aGVyd2lzZSwgYGBOVUxM YGAuCisKKyAgIFRoaXMgZW50cnlwb2ludCB3YXMgYWRkZWQgaW4gOnJlZjpgTElCR0NDSklUX0FC SV8xN2A7IHlvdSBjYW4gdGVzdCBmb3IgaXRzCisgICBwcmVzZW5jZSB1c2luZzoKKworICAgLi4g Y29kZS1ibG9jazo6IGMKKworICAgICAgI2lmZGVmIExJQkdDQ0pJVF9IQVZFX0NUT1JTCisKIFdv cmtpbmcgd2l0aCBwb2ludGVycywgc3RydWN0cyBhbmQgdW5pb25zCiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9nY2Mvaml0L2ppdC1jb21t b24uaCBiL2djYy9qaXQvaml0LWNvbW1vbi5oCmluZGV4IGY4OGU2NzU1YjAwLi4yZTcyM2MzOGQ3 OCAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9qaXQtY29tbW9uLmgKKysrIGIvZ2NjL2ppdC9qaXQtY29t bW9uLmgKQEAgLTIwMiw2ICsyMDIsMTUgQEAgZW51bSBpbm5lcl9ib29sX29wdGlvbgogICBOVU1f SU5ORVJfQk9PTF9PUFRJT05TCiB9OwogCisvKiBGbGFncyBmb3IgZ2xvYmFsIHZhcmlhYmxlcyBj bGFzcy4gIEZvciB3aGVuIHRoZSBwbGF5YmFjayBvZiB0aGUKKyAgIGdsb2JhbCBuZWVkIHRvIGtu b3cgd2hhdCB3aWxsIGhhcHBlbiB0byBpdCBsYXRlci4gICovCitlbnVtIGdsb2JhbF92YXJfZmxh Z3MKK3sKKyAgR0xPQkFMX1ZBUl9GTEFHU19OT05FID0gMCwKKyAgR0xPQkFMX1ZBUl9GTEFHU19X SUxMX0JFX1JWQUxfSU5JVCA9IDEsCisgIEdMT0JBTF9WQVJfRkxBR1NfV0lMTF9CRV9CTE9CX0lO SVQgPSAyLAorfTsKKwogfSAvLyBuYW1lc3BhY2UgZ2NjOjpqaXQKIAogfSAvLyBuYW1lc3BhY2Ug Z2NjCmRpZmYgLS1naXQgYS9nY2Mvaml0L2ppdC1wbGF5YmFjay5jIGIvZ2NjL2ppdC9qaXQtcGxh eWJhY2suYwppbmRleCBiNDEyZWFlNmFhOC4uNjExODdmMTY0OGQgMTAwNjQ0Ci0tLSBhL2djYy9q aXQvaml0LXBsYXliYWNrLmMKKysrIGIvZ2NjL2ppdC9qaXQtcGxheWJhY2suYwpAQCAtOTcsNiAr OTcsNDMgQEAgbmFtZXNwYWNlIGppdCB7CiAgUGxheWJhY2suCiAgKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAor LyogRm9sZCBhIHJlYWRvbmx5IG5vbi12b2xhdGlsZSB2YXJpYWJsZSB3aXRoIGFuIGluaXRpYWwg Y29uc3RhbnQgdmFsdWUsCisgICB0byB0aGF0IHZhbHVlLgorCisgICBPdGhlcndpc2UgcmV0dXJu IHRoZSBhcmd1bWVudCB1bmNoYW5nZWQuCisKKyAgIFRoaXMgZm9sZCBpcyBuZWVkZWQgZm9yIHNl dHRpbmcgYSB2YXJpYWJsZSdzIERFQ0xfSU5JVElBTCB0byB0aGUgdmFsdWUKKyAgIG9mIGEgY29u c3QgdmFyaWFibGUuICBUaGUgYy1mcm9udGVuZCBkb2VzIHRoaXMgaW4gaXRzIG93biBzcGVjaWFs CisgICBmb2xkICgpLCBzbyB3ZSBsaWZ0IHRoaXMgcGFydCBvdXQgYW5kIGRvIGl0IGV4cGxpY2l0 bHkgd2hlcmUgdGhlcmUgaXMgYQorICAgcG90ZW50aWFsIGZvciB2YXJpYWJsZXMgdG8gYmUgdXNl ZCBhcyBydmFsdWVzLiAgKi8KK3N0YXRpYyB0cmVlCitmb2xkX2NvbnN0X3ZhciAodHJlZSBub2Rl KQoreworICAvKiBTZWUgY19mdWxseV9mb2xkX2ludGVybmFsIGluIGMtZm9sZC5jIGFuZCBkZWNs X2NvbnN0YW50X3ZhbHVlXzEKKyAgICAgaW4gYy10eXBlY2suYy4gICovCisgIGlmIChWQVJfUCAo bm9kZSkKKyAgICAgICYmIFRSRUVfUkVBRE9OTFkgKG5vZGUpCisgICAgICAmJiAhVFJFRV9USElT X1ZPTEFUSUxFIChub2RlKQorICAgICAgJiYgREVDTF9JTklUSUFMIChub2RlKSAhPSBOVUxMX1RS RUUKKyAgICAgIC8qICJUaGlzIGlzIGludmFsaWQgaWYgaW5pdGlhbCB2YWx1ZSBpcyBub3QgY29u c3RhbnQuCisJICBJZiBpdCBoYXMgZWl0aGVyIGEgZnVuY3Rpb24gY2FsbCwgYSBtZW1vcnkgcmVm ZXJlbmNlLAorCSAgb3IgYSB2YXJpYWJsZSwgdGhlbiByZS1ldmFsdWF0aW5nIGl0IGNvdWxkIGdp dmUgZGlmZmVyZW50CisJICByZXN1bHRzLiIgICovCisgICAgICAmJiBUUkVFX0NPTlNUQU5UIChE RUNMX0lOSVRJQUwgKG5vZGUpKSkKKyAgICB7CisgICAgICB0cmVlIHJldCA9IERFQ0xfSU5JVElB TCAobm9kZSk7CisgICAgICAvKiAiQXZvaWQgdW53YW50ZWQgdHJlZSBzaGFyaW5nIGJldHdlZW4g dGhlIGluaXRpYWxpemVyIGFuZCBjdXJyZW50CisJICBmdW5jdGlvbidzIGJvZHkgd2hlcmUgdGhl IHRyZWUgY2FuIGJlIG1vZGlmaWVkIGUuZy4gYnkgdGhlCisJICBnaW1wbGlmaWVyLiIgICovCisg ICAgICBpZiAoVFJFRV9TVEFUSUMgKG5vZGUpKQorCXJldCA9IHVuc2hhcmVfZXhwciAocmV0KTsK KworICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgcmV0dXJuIG5vZGU7Cit9CisKIC8qIEJ1 aWxkIGEgU1RSSU5HX0NTVCB0cmVlIGZvciBTVFIsIG9yIHJldHVybiBOVUxMIGlmIGl0IGlzIE5V TEwuCiAgICBUaGUgVFJFRV9UWVBFIGlzIG5vdCBpbml0aWFsaXplZC4gICovCiAKQEAgLTUzNywx NSArNTc0LDI4IEBAIHBsYXliYWNrOjpjb250ZXh0OjoKIGdsb2JhbF9uZXdfZGVjbCAobG9jYXRp b24gKmxvYywKIAkJIGVudW0gZ2NjX2ppdF9nbG9iYWxfa2luZCBraW5kLAogCQkgdHlwZSAqdHlw ZSwKLQkJIGNvbnN0IGNoYXIgKm5hbWUpCisJCSBjb25zdCBjaGFyICpuYW1lLAorCQkgZW51bSBn bG9iYWxfdmFyX2ZsYWdzIGZsYWdzKQogewogICBnY2NfYXNzZXJ0ICh0eXBlKTsKICAgZ2NjX2Fz c2VydCAobmFtZSk7CisKKyAgdHJlZSB0eXBlX3RyZWUgPSB0eXBlLT5hc190cmVlICgpOworCiAg IHRyZWUgaW5uZXIgPSBidWlsZF9kZWNsIChVTktOT1dOX0xPQ0FUSU9OLCBWQVJfREVDTCwKIAkJ CSAgIGdldF9pZGVudGlmaWVyIChuYW1lKSwKLQkJCSAgIHR5cGUtPmFzX3RyZWUgKCkpOworCQkJ ICAgdHlwZV90cmVlKTsKKwogICBUUkVFX1BVQkxJQyAoaW5uZXIpID0gKGtpbmQgIT0gR0NDX0pJ VF9HTE9CQUxfSU5URVJOQUwpOwotICBERUNMX0NPTU1PTiAoaW5uZXIpID0gMTsKKworCisgIGlu dCB3aWxsX2JlX2luaXQgPSBmbGFncyAmIChHTE9CQUxfVkFSX0ZMQUdTX1dJTExfQkVfUlZBTF9J TklUIHwKKwkJCSAgICAgIEdMT0JBTF9WQVJfRkxBR1NfV0lMTF9CRV9CTE9CX0lOSVQpOworCisg IC8qIEEgVkFSX0RFQ0wgd2l0aCBERUNMX0lOSVRJQUwgd2lsbCBub3QgZW5kIHVwIGluIC5jb21t b24gc2VjdGlvbi4gICovCisgIGlmICghd2lsbF9iZV9pbml0KQorICAgIERFQ0xfQ09NTU9OIChp bm5lcikgPSAxOworCiAgIHN3aXRjaCAoa2luZCkKICAgICB7CiAgICAgZGVmYXVsdDoKQEAgLTU2 NCw2ICs2MTQsOSBAQCBnbG9iYWxfbmV3X2RlY2wgKGxvY2F0aW9uICpsb2MsCiAgICAgICBicmVh azsKICAgICB9CiAKKyAgaWYgKFRZUEVfUkVBRE9OTFkgKHR5cGVfdHJlZSkpCisgICAgVFJFRV9S RUFET05MWSAoaW5uZXIpID0gMTsKKwogICBpZiAobG9jKQogICAgIHNldF90cmVlX2xvY2F0aW9u IChpbm5lciwgbG9jKTsKIApAQCAtNTg4LDEzICs2NDEsMTE2IEBAIHBsYXliYWNrOjpjb250ZXh0 OjoKIG5ld19nbG9iYWwgKGxvY2F0aW9uICpsb2MsCiAJICAgIGVudW0gZ2NjX2ppdF9nbG9iYWxf a2luZCBraW5kLAogCSAgICB0eXBlICp0eXBlLAotCSAgICBjb25zdCBjaGFyICpuYW1lKQorCSAg ICBjb25zdCBjaGFyICpuYW1lLAorCSAgICBlbnVtIGdsb2JhbF92YXJfZmxhZ3MgZmxhZ3MpCiB7 Ci0gIHRyZWUgaW5uZXIgPSBnbG9iYWxfbmV3X2RlY2wgKGxvYywga2luZCwgdHlwZSwgbmFtZSk7 CisgIHRyZWUgaW5uZXIgPQorICAgIGdsb2JhbF9uZXdfZGVjbCAobG9jLCBraW5kLCB0eXBlLCBu YW1lLCBmbGFncyk7CiAKICAgcmV0dXJuIGdsb2JhbF9maW5hbGl6ZV9sdmFsdWUgKGlubmVyKTsK IH0KIAordm9pZAorcGxheWJhY2s6OmNvbnRleHQ6OgorZ2xvYmFsX3NldF9pbml0X3J2YWx1ZSAo bHZhbHVlKiB2YXJpYWJsZSwKKwkJCXJ2YWx1ZSogaW5pdCkKK3sKKyAgdHJlZSBpbm5lciA9IHZh cmlhYmxlLT5hc190cmVlICgpOworCisgIC8qIFdlIG5lZWQgdG8gZm9sZCBhbGwgZXhwcmVzc2lv bnMgYXMgbXVjaCBhcyBwb3NzaWJsZS4gIFRoZSBjb2RlCisgICAgIGZvciBhIERFQ0xfSU5JVElB TCBvbmx5IGhhbmRsZXMgc29tZSBvcGVyYXRpb25zLAorICAgICBldGMgYWRkaXRpb24sIG1pbnVz LCAnYWRkcmVzcyBvZicuICBTZWUgb3V0cHV0X2FkZHJlc3NlZF9jb25zdGFudHMgKCkKKyAgICAg aW4gdmFyYXNtLmMuICAqLworICB0cmVlIGluaXRfdHJlZSA9IGluaXQtPmFzX3RyZWUgKCk7Cisg IHRyZWUgZm9sZGVkID0gZm9sZF9jb25zdF92YXIgKGluaXRfdHJlZSk7CisKKyAgaWYgKCFUUkVF X0NPTlNUQU5UIChmb2xkZWQpKQorICAgIHsKKyAgICAgIHRyZWUgbmFtZSA9IERFQ0xfTkFNRSAo aW5uZXIpOworCisgICAgICBhZGRfZXJyb3IgKE5VTEwsCisJCSAidW5hYmxlIHRvIGNvbnZlcnQg aW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGdsb2JhbCB2YXJpYWJsZSAlcyIKKwkJICIgdG8gYSBjb21w aWxlLXRpbWUgY29uc3RhbnQiLAorCQkgbmFtZSAhPSBOVUxMX1RSRUUgPyBJREVOVElGSUVSX1BP SU5URVIgKG5hbWUpIDogTlVMTCk7CisgICAgICByZXR1cm47CisgICAgfQorCisgIERFQ0xfSU5J VElBTCAoaW5uZXIpID0gZm9sZGVkOworfQorCitwbGF5YmFjazo6cnZhbHVlICoKK3BsYXliYWNr Ojpjb250ZXh0OjoKK25ld19jdG9yIChsb2NhdGlvbiAqbG9jLAorCSAgdHlwZSAqdHlwZSwKKwkg IGNvbnN0IGF1dG9fdmVjPGZpZWxkKj4gKmZpZWxkcywKKwkgIGNvbnN0IGF1dG9fdmVjPHJ2YWx1 ZSo+ICpydmFsdWVzKQoreworICB0cmVlIHR5cGVfdHJlZSA9IHR5cGUtPmFzX3RyZWUgKCk7CisK KyAgLyogSGFuZGxlIGVtcHR5IGN0b3JzIGZpcnN0LiAgSS5lLiBzZXQgZXZlcnl0aGluZyB0byAw LiAgKi8KKyAgaWYgKHJ2YWx1ZXMtPmxlbmd0aCAoKSA9PSAwKQorICAgIHJldHVybiBuZXcgcnZh bHVlICh0aGlzLCBidWlsZF9jb25zdHJ1Y3RvciAodHlwZV90cmVlLCBOVUxMKSk7CisKKyAgLyog SGFuZGxlIGFycmF5cyAoYW5kIHJldHVybikuICAqLworICBpZiAoVFJFRV9DT0RFICh0eXBlX3Ry ZWUpID09IEFSUkFZX1RZUEUpCisgICAgeworICAgICAgaW50IG4gPSBydmFsdWVzLT5sZW5ndGgg KCk7CisgICAgICAvKiBUaGUgdmVjIGZvciB0aGUgY29uc3RydWN0b3Igbm9kZS4gICovCisgICAg ICB2ZWM8Y29uc3RydWN0b3JfZWx0LCB2YV9nYz4gKnYgPSBOVUxMOworICAgICAgdmVjX2FsbG9j ICh2LCBuKTsKKworICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCisJeworCSAgcnZh bHVlICpydiA9ICgqcnZhbHVlcylbaV07CisJICAvKiBudWxsIHJ2YWx1ZXMgaW5kaWNhdGUgdGhh dCB0aGUgZWxlbWVudCBzaG91bGQgYmUgemVyb2VkLiAgKi8KKwkgIGlmIChydikKKwkgICAgQ09O U1RSVUNUT1JfQVBQRU5EX0VMVCAodiwKKwkJCQkgICAgYnVpbGRfaW50X2NzdCAoc2l6ZV90eXBl X25vZGUsIGkpLAorCQkJCSAgICBydi0+YXNfdHJlZSAoKSk7CisJICBlbHNlCisJICAgIENPTlNU UlVDVE9SX0FQUEVORF9FTFQgKHYsCisJCQkJICAgIGJ1aWxkX2ludF9jc3QgKHNpemVfdHlwZV9u b2RlLCBpKSwKKwkJCQkgICAgYnVpbGRfemVyb19jc3QgKFRSRUVfVFlQRSAodHlwZV90cmVlKSkp OworCX0KKworICAgICAgdHJlZSBjdG9yID0gYnVpbGRfY29uc3RydWN0b3IgKHR5cGVfdHJlZSwg dik7CisKKyAgICAgIGlmIChsb2MpCisJc2V0X3RyZWVfbG9jYXRpb24gKGN0b3IsIGxvYyk7CisK KyAgICAgIHJldHVybiBuZXcgcnZhbHVlICh0aGlzLCBjdG9yKTsKKyAgICB9CisKKyAgLyogSGFu ZGxlIHN0cnVjdHMgYW5kIHVuaW9ucy4gICovCisgIGludCBuID0gZmllbGRzLT5sZW5ndGggKCk7 CisKKyAgLyogVGhlIHZlYyBmb3IgdGhlIGNvbnN0cnVjdG9yIG5vZGUuICAqLworICB2ZWM8Y29u c3RydWN0b3JfZWx0LCB2YV9nYz4gKnYgPSBOVUxMOworICB2ZWNfYWxsb2MgKHYsIG4pOworCisg IC8qIEl0ZXJhdGUgb3ZlciB0aGUgZmllbGRzLCBidWlsZGluZyBpbml0aWFsaXphdGlvbnMuICAq LworICBmb3IgKGludCBpID0gMDtpIDwgbjsgaSsrKQorICAgIHsKKyAgICAgIHRyZWUgZmllbGQg PSAoKmZpZWxkcylbaV0tPmFzX3RyZWUgKCk7CisgICAgICBydmFsdWUgKnJ2ID0gKCpydmFsdWVz KVtpXTsKKyAgICAgIC8qIElmIHRoZSB2YWx1ZSBpcyBOVUxMLCBpdCBtZWFucyB3ZSBzaG91bGQg emVybyB0aGUgZmllbGQuICAqLworICAgICAgaWYgKHJ2KQorCUNPTlNUUlVDVE9SX0FQUEVORF9F TFQgKHYsIGZpZWxkLCBydi0+YXNfdHJlZSAoKSk7CisgICAgICBlbHNlCisJeworCSAgdHJlZSB6 ZXJvX2NzdCA9IGJ1aWxkX3plcm9fY3N0IChUUkVFX1RZUEUgKGZpZWxkKSk7CisJICBDT05TVFJV Q1RPUl9BUFBFTkRfRUxUICh2LCBmaWVsZCwgemVyb19jc3QpOworCX0KKyAgICB9CisKKyAgdHJl ZSBjdG9yID0gYnVpbGRfY29uc3RydWN0b3IgKHR5cGVfdHJlZSwgdik7CisKKyAgaWYgKGxvYykK KyAgICBzZXRfdHJlZV9sb2NhdGlvbiAoY3RvciwgbG9jKTsKKworICByZXR1cm4gbmV3IHJ2YWx1 ZSAodGhpcywgYnVpbGRfY29uc3RydWN0b3IgKHR5cGVfdHJlZSwgdikpOworfQorCiAvKiBGaWxs ICdjb25zdHJ1Y3Rvcl9lbGVtZW50cycgd2l0aCB0aGUgbWVtb3J5IGNvbnRlbnQgb2YKICAgICdp bml0aWFsaXplcicuICBFYWNoIGVsZW1lbnQgb2YgdGhlIGluaXRpYWxpemVyIGlzIG9mIHRoZSBz aXplIG9mCiAgICB0eXBlIFQuICBJbiB1c2UgYnkgbmV3X2dsb2JhbF9pbml0aWFsaXplZC4qLwpA QCAtNjI4LDkgKzc4NCwxMCBAQCBuZXdfZ2xvYmFsX2luaXRpYWxpemVkIChsb2NhdGlvbiAqbG9j LAogICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGVsZW1lbnRfc2l6ZSwKIAkJCXNpemVf dCBpbml0aWFsaXplcl9udW1fZWxlbSwKIAkJCWNvbnN0IHZvaWQgKmluaXRpYWxpemVyLAotCQkJ Y29uc3QgY2hhciAqbmFtZSkKKwkJCWNvbnN0IGNoYXIgKm5hbWUsCisJCQllbnVtIGdsb2JhbF92 YXJfZmxhZ3MgZmxhZ3MpCiB7Ci0gIHRyZWUgaW5uZXIgPSBnbG9iYWxfbmV3X2RlY2wgKGxvYywg a2luZCwgdHlwZSwgbmFtZSk7CisgIHRyZWUgaW5uZXIgPSBnbG9iYWxfbmV3X2RlY2wgKGxvYywg a2luZCwgdHlwZSwgbmFtZSwgZmxhZ3MpOwogCiAgIHZlYzxjb25zdHJ1Y3Rvcl9lbHQsIHZhX2dj PiAqY29uc3RydWN0b3JfZWxlbWVudHMgPSBOVUxMOwogCkBAIC04MzAsNyArOTg3LDggQEAgYXNf dHJ1dGhfdmFsdWUgKHRyZWUgZXhwciwgbG9jYXRpb24gKmxvYykKICAgaWYgKGxvYykKICAgICBz ZXRfdHJlZV9sb2NhdGlvbiAodHlwZWRfemVybywgbG9jKTsKIAotICBleHByID0gYnVpbGQyIChO RV9FWFBSLCBpbnRlZ2VyX3R5cGVfbm9kZSwgZXhwciwgdHlwZWRfemVybyk7CisgIGV4cHIgPSBm b2xkX2J1aWxkMl9sb2MgKFVOS05PV05fTE9DQVRJT04sCisgICAgTkVfRVhQUiwgaW50ZWdlcl90 eXBlX25vZGUsIGV4cHIsIHR5cGVkX3plcm8pOwogICBpZiAobG9jKQogICAgIHNldF90cmVlX2xv Y2F0aW9uIChleHByLCBsb2MpOwogCkBAIC04NjYsNiArMTAyNCw4IEBAIG5ld191bmFyeV9vcCAo bG9jYXRpb24gKmxvYywKICAgZ2NjX2Fzc2VydCAoYSk7CiAKICAgdHJlZSBub2RlID0gYS0+YXNf dHJlZSAoKTsKKyAgbm9kZSA9IGZvbGRfY29uc3RfdmFyIChub2RlKTsKKwogICB0cmVlIGlubmVy X3Jlc3VsdCA9IE5VTEw7CiAKICAgc3dpdGNoIChvcCkKQEAgLTg5Nyw2ICsxMDU3LDEwIEBAIG5l d191bmFyeV9vcCAobG9jYXRpb24gKmxvYywKICAgaW5uZXJfcmVzdWx0ID0gYnVpbGQxIChpbm5l cl9vcCwKIAkJCSByZXN1bHRfdHlwZS0+YXNfdHJlZSAoKSwKIAkJCSBub2RlKTsKKworICAvKiBU cnkgdG8gZm9sZC4gICovCisgIGlubmVyX3Jlc3VsdCA9IGZvbGQgKGlubmVyX3Jlc3VsdCk7CisK ICAgaWYgKGxvYykKICAgICBzZXRfdHJlZV9sb2NhdGlvbiAoaW5uZXJfcmVzdWx0LCBsb2MpOwog CkBAIC05MjEsNyArMTA4NSwxMCBAQCBuZXdfYmluYXJ5X29wIChsb2NhdGlvbiAqbG9jLAogICBn Y2NfYXNzZXJ0IChiKTsKIAogICB0cmVlIG5vZGVfYSA9IGEtPmFzX3RyZWUgKCk7CisgIG5vZGVf YSA9IGZvbGRfY29uc3RfdmFyIChub2RlX2EpOworCiAgIHRyZWUgbm9kZV9iID0gYi0+YXNfdHJl ZSAoKTsKKyAgbm9kZV9iID0gZm9sZF9jb25zdF92YXIgKG5vZGVfYik7CiAKICAgc3dpdGNoIChv cCkKICAgICB7CkBAIC05OTEsNiArMTE1OCwxMCBAQCBuZXdfYmluYXJ5X29wIChsb2NhdGlvbiAq bG9jLAogCQkJICAgIHJlc3VsdF90eXBlLT5hc190cmVlICgpLAogCQkJICAgIG5vZGVfYSwKIAkJ CSAgICBub2RlX2IpOworCisgIC8qIFRyeSB0byBmb2xkIHRoZSBleHByZXNzaW9uLiAgKi8KKyAg aW5uZXJfZXhwciA9IGZvbGQgKGlubmVyX2V4cHIpOworCiAgIGlmIChsb2MpCiAgICAgc2V0X3Ry ZWVfbG9jYXRpb24gKGlubmVyX2V4cHIsIGxvYyk7CiAKQEAgLTEwMzgsMTAgKzEyMDksMTkgQEAg bmV3X2NvbXBhcmlzb24gKGxvY2F0aW9uICpsb2MsCiAgICAgICBicmVhazsKICAgICB9CiAKKyAg dHJlZSBub2RlX2EgPSBhLT5hc190cmVlICgpOworICBub2RlX2EgPSBmb2xkX2NvbnN0X3ZhciAo bm9kZV9hKTsKKyAgdHJlZSBub2RlX2IgPSBiLT5hc190cmVlICgpOworICBub2RlX2IgPSBmb2xk X2NvbnN0X3ZhciAobm9kZV9iKTsKKwogICB0cmVlIGlubmVyX2V4cHIgPSBidWlsZDIgKGlubmVy X29wLAogCQkJICAgIGJvb2xlYW5fdHlwZV9ub2RlLAotCQkJICAgIGEtPmFzX3RyZWUgKCksCi0J CQkgICAgYi0+YXNfdHJlZSAoKSk7CisJCQkgICAgbm9kZV9hLAorCQkJICAgIG5vZGVfYik7CisK KyAgLyogVHJ5IHRvIGZvbGQuICAqLworICBpbm5lcl9leHByID0gZm9sZCAoaW5uZXJfZXhwcik7 CisKICAgaWYgKGxvYykKICAgICBzZXRfdHJlZV9sb2NhdGlvbiAoaW5uZXJfZXhwciwgbG9jKTsK ICAgcmV0dXJuIG5ldyBydmFsdWUgKHRoaXMsIGlubmVyX2V4cHIpOwpAQCAtMTE0MSw2ICsxMzIx LDggQEAgcGxheWJhY2s6OmNvbnRleHQ6OmJ1aWxkX2Nhc3QgKHBsYXliYWNrOjpsb2NhdGlvbiAq bG9jLAogCiAgICAgIE9ubHkgc29tZSBraW5kcyBvZiBjYXN0IGFyZSBjdXJyZW50bHkgc3VwcG9y dGVkIGhlcmUuICAqLwogICB0cmVlIHRfZXhwciA9IGV4cHItPmFzX3RyZWUgKCk7CisgIHRfZXhw ciA9IGZvbGRfY29uc3RfdmFyICh0X2V4cHIpOworCiAgIHRyZWUgdF9kc3RfdHlwZSA9IHR5cGVf LT5hc190cmVlICgpOwogICB0cmVlIHRfcmV0ID0gTlVMTDsKICAgdF9yZXQgPSB0YXJnZXRtLmNv bnZlcnRfdG9fdHlwZSAodF9kc3RfdHlwZSwgdF9leHByKTsKQEAgLTEyMTksNyArMTQwMSwxMCBA QCBuZXdfYXJyYXlfYWNjZXNzIChsb2NhdGlvbiAqbG9jLAogICAgICAgIGMtZmFtaWx5L2MtY29t bW9uLmM6IHBvaW50ZXJfaW50X3N1bQogICAqLwogICB0cmVlIHRfcHRyID0gcHRyLT5hc190cmVl ICgpOworICB0X3B0ciA9IGZvbGRfY29uc3RfdmFyICh0X3B0cik7CiAgIHRyZWUgdF9pbmRleCA9 IGluZGV4LT5hc190cmVlICgpOworICB0X2luZGV4ID0gZm9sZF9jb25zdF92YXIgKHRfaW5kZXgp OworCiAgIHRyZWUgdF90eXBlX3B0ciA9IFRSRUVfVFlQRSAodF9wdHIpOwogICB0cmVlIHRfdHlw ZV9zdGFyX3B0ciA9IFRSRUVfVFlQRSAodF90eXBlX3B0cik7CiAKQEAgLTEyMjcsNiArMTQxMiw3 IEBAIG5ld19hcnJheV9hY2Nlc3MgKGxvY2F0aW9uICpsb2MsCiAgICAgewogICAgICAgdHJlZSB0 X3Jlc3VsdCA9IGJ1aWxkNCAoQVJSQVlfUkVGLCB0X3R5cGVfc3Rhcl9wdHIsIHRfcHRyLCB0X2lu ZGV4LAogCQkJICAgICAgTlVMTF9UUkVFLCBOVUxMX1RSRUUpOworICAgICAgdF9yZXN1bHQgPSBm b2xkICh0X3Jlc3VsdCk7CiAgICAgICBpZiAobG9jKQogCXNldF90cmVlX2xvY2F0aW9uICh0X3Jl c3VsdCwgbG9jKTsKICAgICAgIHJldHVybiBuZXcgbHZhbHVlICh0aGlzLCB0X3Jlc3VsdCk7CkBA IC0xMjM2LDEyICsxNDIyLDE0IEBAIG5ld19hcnJheV9hY2Nlc3MgKGxvY2F0aW9uICpsb2MsCiAg ICAgICAvKiBDb252ZXJ0IGluZGV4IHRvIGFuIG9mZnNldCBpbiBieXRlcy4gICovCiAgICAgICB0 cmVlIHRfc2l6ZW9mID0gc2l6ZV9pbl9ieXRlcyAodF90eXBlX3N0YXJfcHRyKTsKICAgICAgIHRf aW5kZXggPSBmb2xkX2J1aWxkMSAoQ09OVkVSVF9FWFBSLCBzaXpldHlwZSwgdF9pbmRleCk7Ci0g ICAgICB0cmVlIHRfb2Zmc2V0ID0gYnVpbGQyIChNVUxUX0VYUFIsIHNpemV0eXBlLCB0X2luZGV4 LCB0X3NpemVvZik7CisgICAgICB0cmVlIHRfb2Zmc2V0ID0gZm9sZF9idWlsZDJfbG9jIChVTktO T1dOX0xPQ0FUSU9OLAorCU1VTFRfRVhQUiwgc2l6ZXR5cGUsIHRfaW5kZXgsIHRfc2l6ZW9mKTsK IAogICAgICAgLyogTG9jYXRlIChwdHIgKyBvZmZzZXQpLiAgKi8KLSAgICAgIHRyZWUgdF9hZGRy ZXNzID0gYnVpbGQyIChQT0lOVEVSX1BMVVNfRVhQUiwgdF90eXBlX3B0ciwgdF9wdHIsIHRfb2Zm c2V0KTsKKyAgICAgIHRyZWUgdF9hZGRyZXNzID0gZm9sZF9idWlsZDJfbG9jIChVTktOT1dOX0xP Q0FUSU9OLAorCVBPSU5URVJfUExVU19FWFBSLCB0X3R5cGVfcHRyLCB0X3B0ciwgdF9vZmZzZXQp OwogCi0gICAgICB0cmVlIHRfaW5kaXJlY3Rpb24gPSBidWlsZDEgKElORElSRUNUX1JFRiwgdF90 eXBlX3N0YXJfcHRyLCB0X2FkZHJlc3MpOworICAgICAgdHJlZSB0X2luZGlyZWN0aW9uID0gZm9s ZF9idWlsZDEgKElORElSRUNUX1JFRiwgdF90eXBlX3N0YXJfcHRyLCB0X2FkZHJlc3MpOwogICAg ICAgaWYgKGxvYykKIAl7CiAJICBzZXRfdHJlZV9sb2NhdGlvbiAodF9zaXplb2YsIGxvYyk7CkBA IC0xMjg5LDcgKzE0NzcsNyBAQCBuZXdfZGVyZWZlcmVuY2UgKHRyZWUgcHRyLAogICBnY2NfYXNz ZXJ0IChwdHIpOwogCiAgIHRyZWUgdHlwZSA9IFRSRUVfVFlQRSAoVFJFRV9UWVBFKHB0cikpOwot ICB0cmVlIGRhdHVtID0gYnVpbGQxIChJTkRJUkVDVF9SRUYsIHR5cGUsIHB0cik7CisgIHRyZWUg ZGF0dW0gPSBmb2xkX2J1aWxkMSAoSU5ESVJFQ1RfUkVGLCB0eXBlLCBwdHIpOwogICBpZiAobG9j KQogICAgIHNldF90cmVlX2xvY2F0aW9uIChkYXR1bSwgbG9jKTsKICAgcmV0dXJuIGRhdHVtOwpA QCAtMTQ0Myw3ICsxNjMxLDcgQEAgZ2V0X2FkZHJlc3MgKGxvY2F0aW9uICpsb2MpCiAgIHRyZWUg dF9sdmFsdWUgPSBhc190cmVlICgpOwogICB0cmVlIHRfdGhpc3R5cGUgPSBUUkVFX1RZUEUgKHRf bHZhbHVlKTsKICAgdHJlZSB0X3B0cnR5cGUgPSBidWlsZF9wb2ludGVyX3R5cGUgKHRfdGhpc3R5 cGUpOwotICB0cmVlIHB0ciA9IGJ1aWxkMSAoQUREUl9FWFBSLCB0X3B0cnR5cGUsIHRfbHZhbHVl KTsKKyAgdHJlZSBwdHIgPSBmb2xkX2J1aWxkMSAoQUREUl9FWFBSLCB0X3B0cnR5cGUsIHRfbHZh bHVlKTsKICAgaWYgKGxvYykKICAgICBnZXRfY29udGV4dCAoKS0+c2V0X3RyZWVfbG9jYXRpb24g KHB0ciwgbG9jKTsKICAgaWYgKG1hcmtfYWRkcmVzc2FibGUgKGxvYykpCmRpZmYgLS1naXQgYS9n Y2Mvaml0L2ppdC1wbGF5YmFjay5oIGIvZ2NjL2ppdC9qaXQtcGxheWJhY2suaAppbmRleCBmNjcw YzllODFkZi4uMGRiOWI2ZmI1M2IgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvaml0LXBsYXliYWNrLmgK KysrIGIvZ2NjL2ppdC9qaXQtcGxheWJhY2suaApAQCAtMTA5LDcgKzEwOSw4IEBAIHB1YmxpYzoK ICAgbmV3X2dsb2JhbCAobG9jYXRpb24gKmxvYywKIAkgICAgICBlbnVtIGdjY19qaXRfZ2xvYmFs X2tpbmQga2luZCwKIAkgICAgICB0eXBlICp0eXBlLAotCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUp OworCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJICAgICAgZW51bSBnbG9iYWxfdmFyX2ZsYWdz IGZsYWdzKTsKIAogICBsdmFsdWUgKgogICBuZXdfZ2xvYmFsX2luaXRpYWxpemVkIChsb2NhdGlv biAqbG9jLApAQCAtMTE4LDcgKzExOSwxOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVfdCBlbGVtZW50X3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp emVfdCBpbml0aWFsaXplcl9udW1fZWxlbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3Qgdm9pZCAqaW5pdGlhbGl6ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo YXIgKm5hbWUpOworCQkJICBjb25zdCBjaGFyICpuYW1lLAorCQkJICBlbnVtIGdsb2JhbF92YXJf ZmxhZ3MgZmxhZ3MpOworCisgIHJ2YWx1ZSAqCisgIG5ld19jdG9yIChsb2NhdGlvbiAqbG9nLAor CSAgICB0eXBlICp0eXBlLAorCSAgICBjb25zdCBhdXRvX3ZlYzxmaWVsZCo+ICpmaWVsZHMsCisJ ICAgIGNvbnN0IGF1dG9fdmVjPHJ2YWx1ZSo+ICpydmFsdWVzKTsKKworCisgIHZvaWQKKyAgZ2xv YmFsX3NldF9pbml0X3J2YWx1ZSAobHZhbHVlKiB2YXJpYWJsZSwKKwkJCSAgcnZhbHVlKiBpbml0 KTsKIAogICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSE9TVF9UWVBFPgogICBydmFsdWUgKgpAQCAtMjg2 LDcgKzI5OSw4IEBAIHByaXZhdGU6CiAgIGdsb2JhbF9uZXdfZGVjbCAobG9jYXRpb24gKmxvYywK ICAgICAgICAgICAgICAgICAgICBlbnVtIGdjY19qaXRfZ2xvYmFsX2tpbmQga2luZCwKICAgICAg ICAgICAgICAgICAgICB0eXBlICp0eXBlLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg Km5hbWUpOworCQkgICBjb25zdCBjaGFyICpuYW1lLAorCQkgICBlbnVtIGdsb2JhbF92YXJfZmxh Z3MgZmxhZ3MpOwogICBsdmFsdWUgKgogICBnbG9iYWxfZmluYWxpemVfbHZhbHVlICh0cmVlIGlu bmVyKTsKIApkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmMgYi9nY2Mvaml0L2pp dC1yZWNvcmRpbmcuYwppbmRleCAxMTdmZjcwMTE0Yy4uMThkNjYwNTUwNzkgMTAwNjQ0Ci0tLSBh L2djYy9qaXQvaml0LXJlY29yZGluZy5jCisrKyBiL2djYy9qaXQvaml0LXJlY29yZGluZy5jCkBA IC0xMDYyLDYgKzEwNjIsMTggQEAgcmVjb3JkaW5nOjpjb250ZXh0OjpuZXdfZ2xvYmFsIChyZWNv cmRpbmc6OmxvY2F0aW9uICpsb2MsCiAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3ZvaWQKK3JlY29y ZGluZzo6Y29udGV4dDo6bmV3X2dsb2JhbF9pbml0X3J2YWx1ZSAobHZhbHVlICp2YXJpYWJsZSwK KwkJCQkJICAgIHJ2YWx1ZSAqaW5pdCkKK3sKKyAgcmVjb3JkaW5nOjpnbG9iYWxfaW5pdF9ydmFs dWUgKm9iaiA9CisgICAgbmV3IHJlY29yZGluZzo6Z2xvYmFsX2luaXRfcnZhbHVlICh0aGlzLCB2 YXJpYWJsZSwgaW5pdCk7CisgIHJlY29yZCAob2JqKTsKKworICBnbG9iYWwgKmdibCA9IChnbG9i YWwgKikgdmFyaWFibGU7CisgIGdibC0+c2V0X3J2YWx1ZV9pbml0IChpbml0KTsgLyogTmVlZGVk IGJ5IHRoZSBnbG9iYWwgZm9yIHdyaXRlIGR1bXAuICAqLworfQorCiAvKiBDcmVhdGUgYSByZWNv cmRpbmc6Om1lbWVudG9fb2ZfbmV3X3N0cmluZ19saXRlcmFsIGluc3RhbmNlIGFuZCBhZGQgaXQK ICAgIHRvIHRoaXMgY29udGV4dCdzIGxpc3Qgb2YgbWVtZW50b3MuCiAKQEAgLTEwOTQsNiArMTEw Niw3MiBAQCByZWNvcmRpbmc6OmNvbnRleHQ6Om5ld19ydmFsdWVfZnJvbV92ZWN0b3IgKGxvY2F0 aW9uICpsb2MsCiAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3JlY29yZGluZzo6cnZhbHVlICoKK3Jl Y29yZGluZzo6Y29udGV4dDo6bmV3X2N0b3IgKHJlY29yZGluZzo6bG9jYXRpb24gKmxvYywKKwkJ CSAgICAgIHJlY29yZGluZzo6dHlwZSAqdHlwZSwKKwkJCSAgICAgIHNpemVfdCBhcnJfbGVuZ3Ro LAorCQkJICAgICAgZmllbGQgKipmaWVsZHMsCisJCQkgICAgICBydmFsdWUgKip2YWx1ZXMpCit7 CisgIHJlY29yZGluZzo6Y3RvciAqcmVzdWx0ID0gbmV3IGN0b3IgKHRoaXMsIGxvYywgdHlwZSk7 CisKKyAgLyogU2hvcnQgY3V0IGZvciB6ZXJvIGluaXQuICAqLworICBpZiAoIWFycl9sZW5ndGgp CisgICAgeworICAgICAgcmVjb3JkIChyZXN1bHQpOworICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg ICB9CisKKyAgYm9vbCBpc19zdHJ1Y3Rfb3JfdW5pb24gPSB0eXBlLT5pc19zdHJ1Y3QgKCkgfHwg dHlwZS0+aXNfdW5pb24gKCk7CisKKyAgLyogV2UgbmVlZCB0byBjb3B5IGZpZWxkcyBhbmQgdmFs dWVzIGludG8gcmVzdWx0J3MgYXV0b192ZWM6cy4KKyAgICAgQm90aCBmb3Igc3RydWN0cyBhbmQg dW5pb25zIGFuZCBvbmx5IHZhbHVlcyBmb3IgYXJyYXlzLiAgKi8KKyAgaWYgKHR5cGUtPmlzX2Fy cmF5ICgpICE9IE5VTEwpCisgICAgeworICAgICAgcmVzdWx0LT5tX3ZhbHVlcy5yZXNlcnZlIChh cnJfbGVuZ3RoLCBmYWxzZSk7CisKKyAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyX2xl bmd0aDsgaSsrKQorCXJlc3VsdC0+bV92YWx1ZXMucXVpY2tfcHVzaCAodmFsdWVzW2ldKTsKKyAg ICB9CisgIGVsc2UgaWYgKGlzX3N0cnVjdF9vcl91bmlvbiAmJiBmaWVsZHMpCisgICAgeworICAg ICAgLyogY3RvciB2YWx1ZXMgYXJlIHBhaXJlZCB3aXRoIHVzZXIgc3BlY2lmaWVkIGZpZWxkcy4g ICovCisKKyAgICAgIHJlc3VsdC0+bV92YWx1ZXMucmVzZXJ2ZSAoYXJyX2xlbmd0aCwgZmFsc2Up OworICAgICAgcmVzdWx0LT5tX2ZpZWxkcy5yZXNlcnZlIChhcnJfbGVuZ3RoLCBmYWxzZSk7CisK KyAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyX2xlbmd0aDsgaSsrKQorCXsKKwkgIHJl c3VsdC0+bV92YWx1ZXMucXVpY2tfcHVzaCAodmFsdWVzW2ldKTsKKwkgIHJlc3VsdC0+bV9maWVs ZHMucXVpY2tfcHVzaCAoZmllbGRzW2ldKTsKKwl9CisgICAgfQorICBlbHNlIGlmIChpc19zdHJ1 Y3Rfb3JfdW5pb24gJiYgIWZpZWxkcykKKyAgICB7CisgICAgICAvKiBjdG9yIHZhbHVlcyBhcmUg aW4gZGVmaW5pdGlvbiBvcmRlciBvbmUgYnkgb25lLAorCSBzbyB0YWtlIHRoZSBmaWVsZHMgZnJv bSB0aGUgdHlwZSBvYmplY3QuICAqLworCisgICAgICByZXN1bHQtPm1fdmFsdWVzLnJlc2VydmUg KGFycl9sZW5ndGgsIGZhbHNlKTsKKyAgICAgIHJlc3VsdC0+bV9maWVsZHMucmVzZXJ2ZSAoYXJy X2xlbmd0aCwgZmFsc2UpOworCisgICAgICBjb21wb3VuZF90eXBlICpjdCA9IHJlaW50ZXJwcmV0 X2Nhc3Q8Y29tcG91bmRfdHlwZSAqPih0eXBlKTsKKyAgICAgIHJlY29yZGluZzo6ZmllbGRzICpm aWVsZHMgPSBjdC0+Z2V0X2ZpZWxkcyAoKTsKKworICAgICAgLyogVGhlIGVudHJ5IHBvaW50IGNo ZWNrcyB0aGF0IGFycl9sZW5ndGggaXMgbm90IGdyZWF0ZXIgdGhhbgorCSB0aGUgYW1vdW50IG9m IGZpZWxkcyBpbiAnZmllbGRzJy4gICovCisgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFy cl9sZW5ndGg7IGkrKykKKwl7CisJICByZXN1bHQtPm1fdmFsdWVzLnF1aWNrX3B1c2ggKHZhbHVl c1tpXSk7CisJICByZXN1bHQtPm1fZmllbGRzLnF1aWNrX3B1c2ggKGZpZWxkcy0+Z2V0X2ZpZWxk IChpKSk7CisJfQorICAgIH0KKyAgZWxzZQorICAgIGdjY191bnJlYWNoYWJsZSAoKTsKKworICBy ZWNvcmQgKHJlc3VsdCk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKIC8qIENyZWF0ZSBhIHJlY29y ZGluZzo6dW5hcnlfb3AgaW5zdGFuY2UgYW5kIGFkZCBpdCB0byB0aGlzIGNvbnRleHQncwogICAg bGlzdCBvZiBtZW1lbnRvcy4KIApAQCAtNDU1NiwxMSArNDYzNCwxMyBAQCByZWNvcmRpbmc6Omds b2JhbDo6cmVwbGF5X2ludG8gKHJlcGxheWVyICpyKQogCQkJCSBtX2luaXRpYWxpemVyX251bV9i eXRlcwogCQkJCSAvIG1fdHlwZS0+ZGVyZWZlcmVuY2UgKCktPmdldF9zaXplICgpLAogCQkJCSBt X2luaXRpYWxpemVyLAotCQkJCSBwbGF5YmFja19zdHJpbmcgKG1fbmFtZSkpCisJCQkJIHBsYXli YWNrX3N0cmluZyAobV9uYW1lKSwKKwkJCQkgZmxhZ3MpCiAgICAgOiByLT5uZXdfZ2xvYmFsIChw bGF5YmFja19sb2NhdGlvbiAociwgbV9sb2MpLAogCQkgICAgIG1fa2luZCwKIAkJICAgICBtX3R5 cGUtPnBsYXliYWNrX3R5cGUgKCksCi0JCSAgICAgcGxheWJhY2tfc3RyaW5nIChtX25hbWUpKSk7 CisJCSAgICAgcGxheWJhY2tfc3RyaW5nIChtX25hbWUpLAorCQkgICAgIGZsYWdzKSk7CiB9CiAK IC8qIE92ZXJyaWRlIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mCkBAIC00NjA5LDIxICs0 Njg5LDMwIEBAIHJlY29yZGluZzo6Z2xvYmFsOjp3cml0ZV90b19kdW1wIChkdW1wICZkKQogCSAg IG1fdHlwZS0+Z2V0X2RlYnVnX3N0cmluZyAoKSwKIAkgICBnZXRfZGVidWdfc3RyaW5nICgpKTsK IAotICBpZiAoIW1faW5pdGlhbGl6ZXIpCisgIGlmICghbV9pbml0aWFsaXplciAmJiAhbV9ydmFs dWVfaW5pdCkKICAgICB7CiAgICAgICBkLndyaXRlICgiO1xuIik7Ci0gICAgICByZXR1cm47CiAg ICAgfQotCi0gIGQud3JpdGUgKCI9XG4gIHsgIik7Ci0gIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAg PSAoY29uc3QgdW5zaWduZWQgY2hhciAqKW1faW5pdGlhbGl6ZXI7Ci0gIGZvciAoc2l6ZV90IGkg PSAwOyBpIDwgbV9pbml0aWFsaXplcl9udW1fYnl0ZXM7IGkrKykKKyAgZWxzZSBpZiAobV9pbml0 aWFsaXplcikKICAgICB7Ci0gICAgICBkLndyaXRlICgiMHgleCwgIiwgcFtpXSk7Ci0gICAgICBp ZiAoaSAmJiAhKGkgJSA2NCkpCi0JZC53cml0ZSAoIlxuICAgICIpOworICAgICAgZC53cml0ZSAo Ij1cbiAgeyAiKTsKKyAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSAoY29uc3QgdW5zaWdu ZWQgY2hhciAqKW1faW5pdGlhbGl6ZXI7CisgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f aW5pdGlhbGl6ZXJfbnVtX2J5dGVzOyBpKyspCisJeworCSAgZC53cml0ZSAoIjB4JXgsICIsIHBb aV0pOworCSAgaWYgKGkgJiYgIShpICUgNjQpKQorCSAgICBkLndyaXRlICgiXG4gICAgIik7CisJ fQorICAgICAgZC53cml0ZSAoIn07XG4iKTsKICAgICB9Ci0gIGQud3JpdGUgKCJ9O1xuIik7Cisg IGVsc2UgaWYgKG1fcnZhbHVlX2luaXQpCisgICAgeworICAgICAgZC53cml0ZSAoIiA9ICIpOwor ICAgICAgZC53cml0ZSAobV9ydmFsdWVfaW5pdC0+Z2V0X2RlYnVnX3N0cmluZyAoKSk7CisgICAg ICBkLndyaXRlICgiO1xuIik7CisgICAgfQorCisgIHJldHVybjsKIH0KIAogLyogQSB0YWJsZSBv ZiBlbnVtIGdjY19qaXRfZ2xvYmFsX2tpbmQgdmFsdWVzIGV4cHJlc3NlZCBpbiBzdHJpbmcKQEAg LTUwNzAsNiArNTE1OSwyMDEgQEAgcmVjb3JkaW5nOjptZW1lbnRvX29mX25ld19ydmFsdWVfZnJv bV92ZWN0b3I6OndyaXRlX3JlcHJvZHVjZXIgKHJlcHJvZHVjZXIgJnIpCiAJICAgZWxlbWVudHNf aWQpOwogfQogCit2b2lkCityZWNvcmRpbmc6OmN0b3I6OnZpc2l0X2NoaWxkcmVuIChydmFsdWVf dmlzaXRvciAqdikKK3sKKyAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBtX3ZhbHVlcy5s ZW5ndGggKCk7IGkrKykKKyAgICB2LT52aXNpdCAobV92YWx1ZXNbaV0pOworfQorCityZWNvcmRp bmc6OnN0cmluZyAqCityZWNvcmRpbmc6OmN0b3I6Om1ha2VfZGVidWdfc3RyaW5nICgpCit7Cisg IC8vTWFrZSBhIGNvbXBvdW5kIGxpdGVyYWwtaXNoCisgIHByZXR0eV9wcmludGVyIHBwOworCisg IHBwX3N0cmluZyAoJnBwLCAiKCIpOworICBwcF9zdHJpbmcgKCZwcCwgbV90eXBlLT5nZXRfZGVi dWdfc3RyaW5nICgpKTsKKyAgcHBfc3RyaW5nICgmcHAsICIpIHsiKTsKKworICBzaXplX3QgZmll bGRfbiA9IG1fZmllbGRzLmxlbmd0aCAoKTsKKyAgc2l6ZV90IHZhbHVlc19uID0gbV92YWx1ZXMu bGVuZ3RoICgpOworCisgIGlmICghZmllbGRfbiAmJiAhdmFsdWVzX24pCisgICAgOworICBlbHNl IGlmICghZmllbGRfbiAmJiB2YWx1ZXNfbikKKyAgICB7CisgICAgICBmb3IgKHNpemVfdCBpID0g MDsgaSA8IHZhbHVlc19uOyBpKyspCisJeworCSAgaWYgKG1fdmFsdWVzW2ldKQorCSAgICBwcF9z dHJpbmcgKCZwcCwgbV92YWx1ZXNbaV0tPmdldF9kZWJ1Z19zdHJpbmcgKCkpOworCSAgZWxzZQor CSAgICBwcF9zdHJpbmcgKCZwcCwgIjAiKTsKKwkgIGlmIChpICsgMSAhPSB2YWx1ZXNfbikKKwkg ICAgcHBfc3RyaW5nICgmcHAsICIsICIpOworCX0KKyAgICB9CisgIGVsc2UgaWYgKGZpZWxkX24g JiYgdmFsdWVzX24pCisgICAgeworICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZXNf bjsgaSsrKQorCXsKKwkgIHBwX3N0cmluZyAoJnBwLCAiLiIpOworCSAgcHBfc3RyaW5nICgmcHAs IG1fZmllbGRzW2ldLT5nZXRfZGVidWdfc3RyaW5nICgpKTsKKwkgIHBwX3N0cmluZyAoJnBwLCAi PSIpOworCSAgaWYgKG1fdmFsdWVzW2ldKQorCSAgICBwcF9zdHJpbmcgKCZwcCwgbV92YWx1ZXNb aV0tPmdldF9kZWJ1Z19zdHJpbmcgKCkpOworCSAgZWxzZQorCSAgICBwcF9zdHJpbmcgKCZwcCwg IjAiKTsKKwkgIGlmIChpICsgMSAhPSB2YWx1ZXNfbikKKwkgICAgcHBfc3RyaW5nICgmcHAsICIs ICIpOworCX0KKyAgICB9CisgIC8qIG1fZmllbGRzIGFyZSBuZXZlciBwb3B1bGF0ZWQgd2l0aCBt X3ZhbHVlcyBlbXB0eS4gICovCisKKyAgcHBfc3RyaW5nICgmcHAsICJ9Iik7CisKKyAgcmV0dXJu IG5ld19zdHJpbmcgKHBwX2Zvcm1hdHRlZF90ZXh0ICgmcHApKTsKK30KKwordm9pZAorcmVjb3Jk aW5nOjpjdG9yOjp3cml0ZV9yZXByb2R1Y2VyIChyZXByb2R1Y2VyICZyKQoreworICBjb25zdCBj aGFyICppZCA9IHIubWFrZV9pZGVudGlmaWVyICh0aGlzLCAicnZhbHVlIik7CisgIHR5cGUgKnR5 cGUgPSBnZXRfdHlwZSAoKTsKKworICByLndyaXRlICgiICBnY2Nfaml0X3J2YWx1ZSAqJXM7XG4i LCBpZCk7CisgIHIud3JpdGUgKCIgIHtcbiIpOyAvKiBPcGVuIHNjb3BlIGZvciBsb2NhbHMuICAq LworCisgIGlmICh0eXBlLT5pc191bmlvbiAoKSkKKyAgICB7CisgICAgICBpZiAobV92YWx1ZXMu bGVuZ3RoICgpID09IDApCisJci53cml0ZSAoIiAgICBnY2Nfaml0X3J2YWx1ZSAqdmFsdWUgPSBO VUxMO1xuIik7CisgICAgICBlbHNlCisJci53cml0ZSAoIiAgICBnY2Nfaml0X3J2YWx1ZSAqdmFs dWUgPSAlcztcbiIsCisJCSByLmdldF9pZGVudGlmaWVyIChtX3ZhbHVlc1swXSkpOworCisgICAg ICBpZiAobV9maWVsZHMubGVuZ3RoICgpID09IDApCisJci53cml0ZSAoIiAgICBnY2Nfaml0X2Zp ZWxkICpmaWVsZCA9IE5VTEw7XG4iKTsKKyAgICAgIGVsc2UKKwlyLndyaXRlICgiICAgIGdjY19q aXRfZmllbGQgKmZpZWxkID0gJXM7XG4iLAorCQkgci5nZXRfaWRlbnRpZmllciAobV9maWVsZHNb MF0pKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBXcml0ZSB0aGUgYXJyYXkgb2Yg dmFsdWVzLiAgKi8KKyAgICAgIGlmIChtX3ZhbHVlcy5sZW5ndGggKCkgPT0gMCkKKwlyLndyaXRl ICgiICAgIGdjY19qaXRfcnZhbHVlICoqdmFsdWVzID0gTlVMTDtcbiIpOworICAgICAgZWxzZQor CXsKKwkgIHIud3JpdGUgKCIgICAgZ2NjX2ppdF9ydmFsdWUgKnZhbHVlc1tdID0ge1xuIik7CisJ ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmFsdWVzLmxlbmd0aCAoKTsgaSsrKQorCSAgICBy LndyaXRlICgiICAgICAgICAlcyxcbiIsIHIuZ2V0X2lkZW50aWZpZXIgKG1fdmFsdWVzW2ldKSk7 CisJICByLndyaXRlICgiICAgICAgfTtcbiIpOworCX0KKyAgICAgIC8qIFdyaXRlIHRoZSBhcnJh eSBvZiBmaWVsZHMuICAqLworICAgICAgaWYgKG1fZmllbGRzLmxlbmd0aCAoKSA9PSAwKQorCXIu d3JpdGUgKCIgICAgZ2NjX2ppdF9maWVsZCAqKmZpZWxkcyA9IE5VTEw7XG4iKTsKKyAgICAgIGVs c2UKKwl7CisJICByLndyaXRlICgiICAgIGdjY19qaXRfZmllbGQgKmZpZWxkc1tdID0ge1xuIik7 CisJICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZmllbGRzLmxlbmd0aCAoKTsgaSsrKQorCSAg ICByLndyaXRlICgiICAgICAgICAlcyxcbiIsIHIuZ2V0X2lkZW50aWZpZXIgKG1fZmllbGRzW2ld KSk7CisJICByLndyaXRlICgiICAgICAgfTtcbiIpOworCX0KKyAgICB9CisgIGlmICh0eXBlLT5p c19hcnJheSAoKSkKKyAgICByLndyaXRlICgKKyIgICAgJXMgPVxuIgorIiAgICAgIGdjY19qaXRf Y29udGV4dF9uZXdfYXJyYXlfY29uc3RydWN0b3IgKCVzLFxuIgorIiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICVzLCAvKiBnY2Nfaml0X2xvY2F0aW9uICpsb2Mg Ki9cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlcywg LyogZ2NjX2ppdF90eXBlICp0eXBlICovXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJWksIC8qIGludCBhcnJfbGVuZ3RoICovXG4iCisiICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKTtcbiIsCisJICAgaWQs CisJICAgci5nZXRfaWRlbnRpZmllciAoZ2V0X2NvbnRleHQgKCkpLAorCSAgIHIuZ2V0X2lkZW50 aWZpZXIgKG1fbG9jKSwKKwkgICByLmdldF9pZGVudGlmaWVyX2FzX3R5cGUgKGdldF90eXBlICgp KSwKKwkgICBtX3ZhbHVlcy5sZW5ndGggKCkpOworICBlbHNlIGlmICh0eXBlLT5pc19zdHJ1Y3Qg KCkpCisgICAgci53cml0ZSAoCisiICAgICVzID1cbiIKKyIgICAgICBnY2Nfaml0X2NvbnRleHRf bmV3X3N0cnVjdF9jb25zdHJ1Y3RvciAoJXMsXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICVzLCAvKiBsb2MgKi9cbiIKKyIgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJXMsIC8qIGdjY19qaXRfdHlwZSAqdHlwZSAq L1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlaSwg LyogaW50IGFycl9sZW5ndGggKi9cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZmllbGRzLFxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB2YWx1ZXMpO1xuIiwKKwkgICBpZCwKKwkgICByLmdldF9pZGVudGlm aWVyIChnZXRfY29udGV4dCAoKSksCisJICAgci5nZXRfaWRlbnRpZmllciAobV9sb2MpLAorCSAg IHIuZ2V0X2lkZW50aWZpZXJfYXNfdHlwZSAoZ2V0X3R5cGUgKCkpLAorCSAgIG1fdmFsdWVzLmxl bmd0aCAoKSk7CisgIGVsc2UgaWYgKHR5cGUtPmlzX3VuaW9uICgpKQorICAgIHIud3JpdGUgKAor IiAgICAlcyA9XG4iCisiICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld191bmlvbl9jb25zdHJ1Y3Rv ciAoJXMsXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JXMsIC8qIGxvYyAqL1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICVzLCAvKiBnY2Nfaml0X3R5cGUgKnR5cGUgKi9cbiIKKyIgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCxcbiIKKyIgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSk7XG4iLAorCSAgIGlkLAorCSAgIHIu Z2V0X2lkZW50aWZpZXIgKGdldF9jb250ZXh0ICgpKSwKKwkgICByLmdldF9pZGVudGlmaWVyICht X2xvYyksCisJICAgci5nZXRfaWRlbnRpZmllcl9hc190eXBlIChnZXRfdHlwZSAoKSkpOworICBl bHNlCisgICAgZ2NjX3VucmVhY2hhYmxlICgpOworCisgIHIud3JpdGUgKCIgIH1cbiIpOyAvKiBD bG9zZSBzY29wZSBmb3IgbG9jYWxzLiAgKi8KK30KKwordm9pZAorcmVjb3JkaW5nOjpjdG9yOjpy ZXBsYXlfaW50byAocmVwbGF5ZXIgKnIpCit7CisgIGF1dG9fdmVjPHBsYXliYWNrOjpydmFsdWUg Kj4gcGxheWJhY2tfdmFsdWVzOworICBhdXRvX3ZlYzxwbGF5YmFjazo6ZmllbGQgKj4gcGxheWJh Y2tfZmllbGRzOworCisgIGludCBuID0gbV92YWx1ZXMubGVuZ3RoICgpOworCisgIHR5cGUgKnR5 cGUgPSBnZXRfdHlwZSAoKTsKKworICAvKiBIYW5kbGUgYXJyYXlzLCBhbmQgcmV0dXJuLiAgKi8K KyAgaWYgKHR5cGUtPmlzX2FycmF5ICgpKQorICAgIHsKKyAgICAgIHBsYXliYWNrX3ZhbHVlcy5y ZXNlcnZlIChuLCBmYWxzZSk7CisKKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQor CXsKKwkgIC8qIG51bGwgbV92YWx1ZXMgZWxlbWVudCBpbmRpY2F0ZXMgemVybyBjdG9yLiAgKi8K KwkgIHBsYXliYWNrX3ZhbHVlcy5xdWlja19wdXNoIChtX3ZhbHVlc1tpXSA/CisJCQkJICAgICAg bV92YWx1ZXNbaV0tPnBsYXliYWNrX3J2YWx1ZSAoKSA6CisJCQkJICAgICAgTlVMTCk7CisJfQor ICAgICAgc2V0X3BsYXliYWNrX29iaiAoci0+bmV3X2N0b3IgKHBsYXliYWNrX2xvY2F0aW9uIChy LCBtX2xvYyksCisJCQkJICAgICBnZXRfdHlwZSAoKS0+cGxheWJhY2tfdHlwZSAoKSwKKwkJCQkg ICAgIE5VTEwsCisJCQkJICAgICAmcGxheWJhY2tfdmFsdWVzKSk7CisgICAgICByZXR1cm47Cisg ICAgfQorICAvKiAuLi4gZWxzZSBoYW5kbGUgdW5pb25zIGFuZCBzdHJ1Y3RzLiAgKi8KKworICBw bGF5YmFja192YWx1ZXMucmVzZXJ2ZSAobiwgZmFsc2UpOworICBwbGF5YmFja19maWVsZHMucmVz ZXJ2ZSAobiwgZmFsc2UpOworCisgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQorICAgIHsK KyAgICAgIC8qIG51bGwgbV92YWx1ZXMgZWxlbWVudCBpbmRpY2F0ZXMgemVybyBjdG9yLiAgKi8K KyAgICAgIHBsYXliYWNrX3ZhbHVlcy5xdWlja19wdXNoIChtX3ZhbHVlc1tpXSA/CisJCQkJICAg IG1fdmFsdWVzW2ldLT5wbGF5YmFja19ydmFsdWUgKCkgOgorCQkJCSAgICBOVUxMKTsKKyAgICAg IHBsYXliYWNrX2ZpZWxkcy5xdWlja19wdXNoIChtX2ZpZWxkc1tpXS0+cGxheWJhY2tfZmllbGQg KCkpOworICAgIH0KKworICBzZXRfcGxheWJhY2tfb2JqIChyLT5uZXdfY3RvciAocGxheWJhY2tf bG9jYXRpb24gKHIsIG1fbG9jKSwKKwkJCQkgZ2V0X3R5cGUgKCktPnBsYXliYWNrX3R5cGUgKCks CisJCQkJICZwbGF5YmFja19maWVsZHMsCisJCQkJICZwbGF5YmFja192YWx1ZXMpKTsKK30KKwog LyogVGhlIGltcGxlbWVudGF0aW9uIG9mIGNsYXNzIGdjYzo6aml0OjpyZWNvcmRpbmc6OnVuYXJ5 X29wLiAgKi8KIAogLyogSW1wbGVtZW50YXRpb24gb2YgcHVyZSB2aXJ0dWFsIGhvb2sgcmVjb3Jk aW5nOjptZW1lbnRvOjpyZXBsYXlfaW50bwpAQCAtNzAzNCw2ICs3MzE4LDE2NyBAQCByZWNvcmRp bmc6OnRvcF9sZXZlbF9hc206OndyaXRlX3JlcHJvZHVjZXIgKHJlcHJvZHVjZXIgJnIpCiAJICAg bV9hc21fc3RtdHMtPmdldF9kZWJ1Z19zdHJpbmcgKCkpOwogfQogCit2b2lkCityZWNvcmRpbmc6 Omdsb2JhbF9pbml0X3J2YWx1ZTo6cmVwbGF5X2ludG8gKHJlcGxheWVyICpyKQoreworICByLT5n bG9iYWxfc2V0X2luaXRfcnZhbHVlIChtX3ZhcmlhYmxlLT5wbGF5YmFja19sdmFsdWUgKCksCisJ CQkgICAgIG1faW5pdC0+cGxheWJhY2tfcnZhbHVlICgpKTsKK30KKwordm9pZAorcmVjb3JkaW5n OjpnbG9iYWxfaW5pdF9ydmFsdWU6OndyaXRlX3JlcHJvZHVjZXIgKHJlcHJvZHVjZXIgJnIpCit7 CisgIHIud3JpdGUgKAorICAgICIgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFs dWUgKCVzLCAvKiBsdmFsdWUgKmdsb2JhbCAqL1xuIgorICAgICIgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICVzKTsvKiBydmFsdWUgKmluaXQgKi9cbiIsCisgICAgci5n ZXRfaWRlbnRpZmllciAobV92YXJpYWJsZSksCisgICAgci5nZXRfaWRlbnRpZmllcl9hc19ydmFs dWUgKG1faW5pdCkpOworfQorCit2b2lkCityZWNvcmRpbmc6Omdsb2JhbF9pbml0X3J2YWx1ZTo6 d3JpdGVfdG9fZHVtcCAoZHVtcCAmZCkKK3sKKyAgZC53cml0ZSAoIiVzO1xuIiwgZ2V0X2RlYnVn X3N0cmluZyAoKSk7Cit9CisKK3JlY29yZGluZzo6c3RyaW5nICoKK3JlY29yZGluZzo6Z2xvYmFs X2luaXRfcnZhbHVlOjptYWtlX2RlYnVnX3N0cmluZyAoKQoreworICAgIHJldHVybiBzdHJpbmc6 OmZyb21fcHJpbnRmIChtX2N0eHQsICIlcyA9ICVzIiwKKyAgICAgIG1fdmFyaWFibGUtPmdldF9k ZWJ1Z19zdHJpbmcgKCksCisgICAgICBtX2luaXQtPmdldF9kZWJ1Z19zdHJpbmcgKCkpOworfQor CitlbnVtIHN0cmlwX2ZsYWdzIHsKKyAgU1RSSVBfRkxBR19OT05FLAorICBTVFJJUF9GTEFHX0FS UiwKKyAgU1RSSVBfRkxBR19WRUMKK307CisKKy8qIFN0cmlwcyB0eXBlIGRvd24gdG8gYXJyYXks IHZlY3RvciBvciBiYXNlIHR5cGUgKHdoaWNoZXZlciBjb21lcyBmaXJzdCkKKworICAgQWxzbyBz YXZlcyAncHRyX2RlcHRoJyBhbmQgc2V0cyAnZmxhZ3MnIGZvciBhcnJheSBvciB2ZWN0b3IgdHlw ZXMuICAqLworc3RhdGljCityZWNvcmRpbmc6OnR5cGUgKgorc3RyaXBfYW5kX2NvdW50IChyZWNv cmRpbmc6OnR5cGUgKnR5cGVfdG9fc3RyaXAsCisJCSBpbnQgJnB0cl9kZXB0aCwKKwkJIHN0cmlw X2ZsYWdzICZmbGFncykKK3sKKyAgcmVjb3JkaW5nOjp0eXBlICp0ID0gdHlwZV90b19zdHJpcDsK KworICB3aGlsZSAodHJ1ZSkKKyAgICB7CisgICAgICBpZiAoIXQpCisJZ2NjX3VucmVhY2hhYmxl ICgpOyAvKiBTaG91bGQgb25seSBoYXBwZW4gb24gY29ycnVwdCBpbnB1dC4gICovCisKKyAgICAg IHJlY29yZGluZzo6dHlwZSAqcG9pbnRlZF90b190eXBlID0gdC0+aXNfcG9pbnRlciAoKTsKKyAg ICAgIGlmIChwb2ludGVkX3RvX3R5cGUgIT0gTlVMTCkKKwl7CisJICBwdHJfZGVwdGgrKzsKKwkg IHQgPSBwb2ludGVkX3RvX3R5cGU7CisJICBjb250aW51ZTsKKwl9CisKKyAgICAgIHJlY29yZGlu Zzo6dHlwZSAqYXJyYXlfZWwgPSB0LT5pc19hcnJheSAoKTsKKyAgICAgIGlmIChhcnJheV9lbCAh PSBOVUxMKQorCXsKKwkgIGZsYWdzID0gU1RSSVBfRkxBR19BUlI7CisJICBicmVhazsKKwl9CisK KyAgICAgIHJlY29yZGluZzo6dHlwZSAqdmVjID0gdC0+ZHluX2Nhc3RfdmVjdG9yX3R5cGUgKCk7 CisgICAgICBpZiAodmVjICE9IE5VTEwpCisJeworCSAgZmxhZ3MgPSBTVFJJUF9GTEFHX1ZFQzsK KwkgIGJyZWFrOworCX0KKworICAgICAgLyogdW5xdWFsaWZpZWQgKCkgcmV0dXJucyAndGhpcycg b24gYmFzZSB0eXBlcy4gICovCisgICAgICByZWNvcmRpbmc6OnR5cGUgKm5leHQgPSB0LT51bnF1 YWxpZmllZCAoKTsKKyAgICAgIGlmIChuZXh0ID09IHQpCisJeworCSAgYnJlYWs7CisJfQorICAg ICAgdCA9IG5leHQ7CisgICAgfQorCisgIHJldHVybiB0OworfQorCisvKiBTdHJpcCBxdWFsaWZp ZXJzIGFuZCBjb3VudCBwb2ludGVyIGRlcHRoLCByZXR1cm5pbmcgdHJ1ZQorICAgaWYgdGhlIHR5 cGVzJyBiYXNlIHR5cGUgYW5kIHBvaW50ZXIgZGVwdGggYXJlCisgICB0aGUgc2FtZSwgb3RoZXJ3 aXNlIGZhbHNlLgorCisgICBGb3IgYXJyYXkgYW5kIHZlY3RvciB0eXBlcyB0aGUgbnVtYmVyIG9m IGVsZW1lbnQgYWxzbworICAgaGFzIHRvIG1hdGNoLgorCisgICBEbyBub3QgY2FsbCB0aGlzIGRp cmVjdGx5LiAgQ2FsbCAndHlwZXNfa2luZGFfc2FtZScuICAqLworYm9vbAordHlwZXNfa2luZGFf c2FtZV9pbnRlcm5hbCAocmVjb3JkaW5nOjp0eXBlICphLCByZWNvcmRpbmc6OnR5cGUgKmIpCit7 CisgIGludCBwdHJfZGVwdGhfYSA9IDA7CisgIGludCBwdHJfZGVwdGhfYiA9IDA7CisgIHJlY29y ZGluZzo6dHlwZSAqYmFzZV9hOworICByZWNvcmRpbmc6OnR5cGUgKmJhc2VfYjsKKworICBzdHJp cF9mbGFncyBmbGFnc19hID0gU1RSSVBfRkxBR19OT05FOworICBzdHJpcF9mbGFncyBmbGFnc19i ID0gU1RSSVBfRkxBR19OT05FOworCisgIGJhc2VfYSA9IHN0cmlwX2FuZF9jb3VudCAoYSwgcHRy X2RlcHRoX2EsIGZsYWdzX2EpOworICBiYXNlX2IgPSBzdHJpcF9hbmRfY291bnQgKGIsIHB0cl9k ZXB0aF9iLCBmbGFnc19iKTsKKworICBpZiAocHRyX2RlcHRoX2EgIT0gcHRyX2RlcHRoX2IpCisg ICAgcmV0dXJuIGZhbHNlOworCisgIGlmIChiYXNlX2EgPT0gYmFzZV9iKQorICAgIHJldHVybiB0 cnVlOworCisgIGlmIChmbGFnc19hICE9IGZsYWdzX2IpCisgICAgcmV0dXJuIGZhbHNlOworCisg IC8qIElmIHRoZSAiYmFzZSB0eXBlIiBpcyBhbiBhcnJheSBvciB2ZWN0b3Igd2UgbWlnaHQgbmVl ZCB0bworICAgICBjaGVjayBkZWVwZXIuICAqLworICBpZiAoZmxhZ3NfYSA9PSBTVFJJUF9GTEFH X0FSUikKKyAgICB7CisgICAgICByZWNvcmRpbmc6OmFycmF5X3R5cGUgKmFycl9hID0KKwlzdGF0 aWNfY2FzdDxyZWNvcmRpbmc6OmFycmF5X3R5cGUqPiAoYmFzZV9hKTsKKyAgICAgIHJlY29yZGlu Zzo6YXJyYXlfdHlwZSAqYXJyX2IgPQorCXN0YXRpY19jYXN0PHJlY29yZGluZzo6YXJyYXlfdHlw ZSo+IChiYXNlX2IpOworCisgICAgICBpZiAoYXJyX2EtPm51bV9lbGVtZW50cyAoKSAhPSBhcnJf Yi0+bnVtX2VsZW1lbnRzICgpKQorCXJldHVybiBmYWxzZTsKKworICAgICAgLyogaXNfYXJyYXkg cmV0dXJucyBlbGVtZW50IHR5cGUuICAqLworICAgICAgcmVjb3JkaW5nOjp0eXBlICplbF9hID0g YXJyX2EtPmlzX2FycmF5ICgpOworICAgICAgcmVjb3JkaW5nOjp0eXBlICplbF9iID0gYXJyX2It PmlzX2FycmF5ICgpOworCisgICAgICBpZiAoZWxfYSA9PSBlbF9iKQorCXJldHVybiB0cnVlOwor CisgICAgICByZXR1cm4gdHlwZXNfa2luZGFfc2FtZV9pbnRlcm5hbCAoZWxfYSwgZWxfYik7Cisg ICAgfQorICBpZiAoZmxhZ3NfYSA9PSBTVFJJUF9GTEFHX1ZFQykKKyAgICB7CisgICAgICByZWNv cmRpbmc6OnZlY3Rvcl90eXBlICphcnJfYSA9CisJc3RhdGljX2Nhc3Q8cmVjb3JkaW5nOjp2ZWN0 b3JfdHlwZSo+IChiYXNlX2EpOworICAgICAgcmVjb3JkaW5nOjp2ZWN0b3JfdHlwZSAqYXJyX2Ig PQorCXN0YXRpY19jYXN0PHJlY29yZGluZzo6dmVjdG9yX3R5cGUqPiAoYmFzZV9iKTsKKworICAg ICAgaWYgKGFycl9hLT5nZXRfbnVtX3VuaXRzICgpICE9IGFycl9iLT5nZXRfbnVtX3VuaXRzICgp KQorCXJldHVybiBmYWxzZTsKKworICAgICAgcmVjb3JkaW5nOjp0eXBlICplbF9hID0gYXJyX2Et PmdldF9lbGVtZW50X3R5cGUgKCk7CisgICAgICByZWNvcmRpbmc6OnR5cGUgKmVsX2IgPSBhcnJf Yi0+Z2V0X2VsZW1lbnRfdHlwZSAoKTsKKworICAgICAgaWYgKGVsX2EgPT0gZWxfYikKKwlyZXR1 cm4gdHJ1ZTsKKworICAgICAgcmV0dXJuIHR5cGVzX2tpbmRhX3NhbWVfaW50ZXJuYWwgKGVsX2Es IGVsX2IpOworICAgIH0KKworICByZXR1cm4gZmFsc2U7Cit9CisKIH0gLy8gbmFtZXNwYWNlIGdj Yzo6aml0CiAKIH0gLy8gbmFtZXNwYWNlIGdjYwpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9qaXQtcmVj b3JkaW5nLmggYi9nY2Mvaml0L2ppdC1yZWNvcmRpbmcuaAppbmRleCA0YTk5NGZlNzA5NC4uNGEz MmZjMjFhNTYgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvaml0LXJlY29yZGluZy5oCisrKyBiL2djYy9q aXQvaml0LXJlY29yZGluZy5oCkBAIC0xNDksNiArMTQ5LDE3IEBAIHB1YmxpYzoKIAkgICAgICB0 eXBlICp0eXBlLAogCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUpOwogCisgIHJ2YWx1ZSAqCisgIG5l d19jdG9yIChsb2NhdGlvbiAqbG9jLAorCSAgICB0eXBlICp0eXBlLAorCSAgICBzaXplX3QgYXJy X2xlbmd0aCwKKwkgICAgZmllbGQgKipmaWVsZHMsCisJICAgIHJ2YWx1ZSAqKnZhbHVlcyk7CisK KyAgdm9pZAorICBuZXdfZ2xvYmFsX2luaXRfcnZhbHVlIChsdmFsdWUgKnZhcmlhYmxlLAorCQkJ ICBydmFsdWUgKmluaXQpOworCiAgIHRlbXBsYXRlIDx0eXBlbmFtZSBIT1NUX1RZUEU+CiAgIHJ2 YWx1ZSAqCiAgIG5ld19ydmFsdWVfZnJvbV9jb25zdCAodHlwZSAqdHlwZSwKQEAgLTU0Nyw2ICs1 NTgsNyBAQCBwdWJsaWM6CiAgIHZpcnR1YWwgdHlwZSAqaXNfcG9pbnRlciAoKSA9IDA7CiAgIHZp cnR1YWwgdHlwZSAqaXNfYXJyYXkgKCkgPSAwOwogICB2aXJ0dWFsIHN0cnVjdF8gKmlzX3N0cnVj dCAoKSB7IHJldHVybiBOVUxMOyB9CisgIHZpcnR1YWwgYm9vbCBpc191bmlvbiAoKSBjb25zdCB7 IHJldHVybiBmYWxzZTsgfQogICB2aXJ0dWFsIGJvb2wgaXNfdm9pZCAoKSBjb25zdCB7IHJldHVy biBmYWxzZTsgfQogICB2aXJ0dWFsIHZlY3Rvcl90eXBlICppc192ZWN0b3IgKCkgeyByZXR1cm4g TlVMTDsgfQogICB2aXJ0dWFsIGJvb2wgaGFzX2tub3duX3NpemUgKCkgY29uc3QgeyByZXR1cm4g dHJ1ZTsgfQpAQCAtOTk2LDYgKzEwMDgsOCBAQCBwdWJsaWM6CiAKICAgdm9pZCByZXBsYXlfaW50 byAocmVwbGF5ZXIgKnIpIEZJTkFMIE9WRVJSSURFOwogCisgIHZpcnR1YWwgYm9vbCBpc191bmlv biAoKSBjb25zdCBGSU5BTCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CisKIHByaXZhdGU6CiAg IHN0cmluZyAqIG1ha2VfZGVidWdfc3RyaW5nICgpIEZJTkFMIE9WRVJSSURFOwogICB2b2lkIHdy aXRlX3JlcHJvZHVjZXIgKHJlcHJvZHVjZXIgJnIpIEZJTkFMIE9WRVJSSURFOwpAQCAtMTM5Myw2 ICsxNDA3LDIzIEBAIHB1YmxpYzoKICAgICBtX2luaXRpYWxpemVyX251bV9ieXRlcyA9IG51bV9i eXRlczsKICAgfQogCisgIHZvaWQgc2V0X2ZsYWdzIChpbnQgZmxhZ19maWVsZHMpCisgIHsKKyAg ICBmbGFncyA9IChlbnVtIGdsb2JhbF92YXJfZmxhZ3MpKGZsYWdzIHwgZmxhZ19maWVsZHMpOwor ICB9CisgIC8qIFJldHVybnMgdHJ1ZSBpZiBhbnkgb2YgdGhlIGZsYWdzIGluIHRoZSBhcmd1bWVu dCBpcyBzZXQuICAqLworICBib29sIHRlc3RfZmxhZ3NfYW55b2YgKGludCBmbGFnX2ZpZWxkcykg Y29uc3QKKyAgeworICAgIHJldHVybiBmbGFncyAmIGZsYWdfZmllbGRzOworICB9CisKKyAgZW51 bSBnY2Nfaml0X2dsb2JhbF9raW5kIGdldF9raW5kICgpIGNvbnN0CisgIHsKKyAgICByZXR1cm4g bV9raW5kOworICB9CisKKyAgdm9pZCBzZXRfcnZhbHVlX2luaXQgKHJ2YWx1ZSAqdmFsKSB7IG1f cnZhbHVlX2luaXQgPSB2YWw7IH0KKwogcHJpdmF0ZToKICAgc3RyaW5nICogbWFrZV9kZWJ1Z19z dHJpbmcgKCkgRklOQUwgT1ZFUlJJREUgeyByZXR1cm4gbV9uYW1lOyB9CiAgIHRlbXBsYXRlIDx0 eXBlbmFtZSBUPgpAQCAtMTQwNSw4ICsxNDM2LDEwIEBAIHByaXZhdGU6CiAKIHByaXZhdGU6CiAg IGVudW0gZ2NjX2ppdF9nbG9iYWxfa2luZCBtX2tpbmQ7CisgIGVudW0gZ2xvYmFsX3Zhcl9mbGFn cyBmbGFncyA9IEdMT0JBTF9WQVJfRkxBR1NfTk9ORTsKICAgc3RyaW5nICptX25hbWU7CiAgIHZv aWQgKm1faW5pdGlhbGl6ZXI7CisgIHJ2YWx1ZSAqbV9ydmFsdWVfaW5pdCA9IG51bGxwdHI7IC8q IE9ubHkgbmVlZGVkIGZvciB3cml0ZV9kdW1wLiAgKi8KICAgc2l6ZV90IG1faW5pdGlhbGl6ZXJf bnVtX2J5dGVzOwogfTsKIApAQCAtMTQ5MSw2ICsxNTI0LDMyIEBAIHByaXZhdGU6CiAgIGF1dG9f dmVjPHJ2YWx1ZSAqPiBtX2VsZW1lbnRzOwogfTsKIAorY2xhc3MgY3RvciA6IHB1YmxpYyBydmFs dWUKK3sKK3B1YmxpYzoKKyAgY3RvciAoY29udGV4dCAqY3R4dCwKKwlsb2NhdGlvbiAqbG9jLAor CXR5cGUgKnR5cGUpCisgIDogcnZhbHVlIChjdHh0LCBsb2MsIHR5cGUpCisgIHsgfQorCisgIHZv aWQgcmVwbGF5X2ludG8gKHJlcGxheWVyICpyKSBGSU5BTCBPVkVSUklERTsKKworICB2b2lkIHZp c2l0X2NoaWxkcmVuIChydmFsdWVfdmlzaXRvciAqKSBGSU5BTCBPVkVSUklERTsKKworcHJpdmF0 ZToKKyAgc3RyaW5nICogbWFrZV9kZWJ1Z19zdHJpbmcgKCkgRklOQUwgT1ZFUlJJREU7CisgIHZv aWQgd3JpdGVfcmVwcm9kdWNlciAocmVwcm9kdWNlciAmcikgRklOQUwgT1ZFUlJJREU7CisgIGVu dW0gcHJlY2VkZW5jZSBnZXRfcHJlY2VkZW5jZSAoKSBjb25zdCBGSU5BTCBPVkVSUklERQorICB7 CisgICAgcmV0dXJuIFBSRUNFREVOQ0VfUFJJTUFSWTsKKyAgfQorCitwdWJsaWM6CisgIGF1dG9f dmVjPGZpZWxkICo+IG1fZmllbGRzOworICBhdXRvX3ZlYzxydmFsdWUgKj4gbV92YWx1ZXM7Cit9 OworCiBjbGFzcyB1bmFyeV9vcCA6IHB1YmxpYyBydmFsdWUKIHsKIHB1YmxpYzoKQEAgLTIzMzQs NiArMjM5MywyNCBAQCBwcml2YXRlOgogICBzdHJpbmcgKm1fYXNtX3N0bXRzOwogfTsKIAorY2xh c3MgZ2xvYmFsX2luaXRfcnZhbHVlIDogcHVibGljIG1lbWVudG8KK3sKK3B1YmxpYzoKKyAgZ2xv YmFsX2luaXRfcnZhbHVlIChjb250ZXh0ICpjdHh0LCBsdmFsdWUgKnZhcmlhYmxlLCBydmFsdWUg KmluaXQpIDoKKyAgICBtZW1lbnRvIChjdHh0KSwgbV92YXJpYWJsZSAodmFyaWFibGUpLCBtX2lu aXQgKGluaXQpIHt9OworCisgIHZvaWQgd3JpdGVfdG9fZHVtcCAoZHVtcCAmZCkgRklOQUwgT1ZF UlJJREU7CisKK3ByaXZhdGU6CisgIHZvaWQgcmVwbGF5X2ludG8gKHJlcGxheWVyICpyKSBGSU5B TCBPVkVSUklERTsKKyAgc3RyaW5nICogbWFrZV9kZWJ1Z19zdHJpbmcgKCkgRklOQUwgT1ZFUlJJ REU7CisgIHZvaWQgd3JpdGVfcmVwcm9kdWNlciAocmVwcm9kdWNlciAmcikgRklOQUwgT1ZFUlJJ REU7CisKK3ByaXZhdGU6CisgIGx2YWx1ZSAqbV92YXJpYWJsZTsKKyAgcnZhbHVlICptX2luaXQ7 Cit9OworCiB9IC8vIG5hbWVzcGFjZSBnY2M6OmppdDo6cmVjb3JkaW5nCiAKIC8qIENyZWF0ZSBh IHJlY29yZGluZzo6bWVtZW50b19vZl9uZXdfcnZhbHVlX2Zyb21fY29uc3QgaW5zdGFuY2UgYW5k IGFkZApAQCAtMjM1Myw2ICsyNDMwLDIzIEBAIHJlY29yZGluZzo6Y29udGV4dDo6bmV3X3J2YWx1 ZV9mcm9tX2NvbnN0IChyZWNvcmRpbmc6OnR5cGUgKnR5cGUsCiAgIHJldHVybiByZXN1bHQ7CiB9 CiAKKy8qIERvbid0IGNhbGwgdGhpcyBkaXJlY3RseS4gIENhbGwgdHlwZXNfa2luZGFfc2FtZS4g ICovCitib29sCit0eXBlc19raW5kYV9zYW1lX2ludGVybmFsIChyZWNvcmRpbmc6OnR5cGUgKmEs CisJCQkgICByZWNvcmRpbmc6OnR5cGUgKmIpOworCisvKiBTdHJpcCBhbGwgcXVhbGlmaWVycyBh bmQgY291bnQgcG9pbnRlciBkZXB0aCwgcmV0dXJuaW5nIHRydWUKKyAgIGlmIHRoZSB0eXBlcyBh bmQgcG9pbnRlciBkZXB0aCBhcmUgdGhlIHNhbWUsIG90aGVyd2lzZSBmYWxzZS4KKworICAgRm9y IGFycmF5IGFuZCB2ZWN0b3IgdHlwZXMgdGhlIG51bWJlciBvZiBlbGVtZW50IGFsc28KKyAgIGhh cyB0byBtYXRjaCwgYXN3ZWxsIGFzIHRoZSBlbGVtZW50IHR5cGVzIHRoZW1zZWxmLiAgKi8KK3N0 YXRpYyBpbmxpbmUgYm9vbAordHlwZXNfa2luZGFfc2FtZSAocmVjb3JkaW5nOjp0eXBlICphLCBy ZWNvcmRpbmc6OnR5cGUgKmIpCit7CisgIC8qIEhhbmRsZSB0cml2aWFsIGNhc2UgaGVyZSwgdG8g YWxsb3cgZm9yIGlubGluaW5nLiAgKi8KKyAgcmV0dXJuIGEgPT0gYiB8fCB0eXBlc19raW5kYV9z YW1lX2ludGVybmFsIChhLCBiKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgZ2NjOjpqaXQKIAogfSAv LyBuYW1lc3BhY2UgZ2NjCmRpZmYgLS1naXQgYS9nY2Mvaml0L2xpYmdjY2ppdCsrLmggYi9nY2Mv aml0L2xpYmdjY2ppdCsrLmgKaW5kZXggODI4MzFmZjVkYTAuLjI1NDE0NjIwYWZiIDEwMDY0NAot LS0gYS9nY2Mvaml0L2xpYmdjY2ppdCsrLmgKKysrIGIvZ2NjL2ppdC9saWJnY2NqaXQrKy5oCkBA IC0xOTcsNiArMTk3LDIwIEBAIG5hbWVzcGFjZSBnY2NqaXQKICAgICBydmFsdWUgbmV3X3J2YWx1 ZSAodHlwZSB2ZWN0b3JfdHlwZSwKIAkJICAgICAgIHN0ZDo6dmVjdG9yPHJ2YWx1ZT4gZWxlbWVu dHMpIGNvbnN0OwogCisgICAgcnZhbHVlIG5ld19zdHJ1Y3RfY3RvciAodHlwZSB0eXBlXywKKwkJ CSAgICBzdGQ6OnZlY3RvcjxmaWVsZD4gJmZpZWxkcywKKwkJCSAgICBzdGQ6OnZlY3RvcjxydmFs dWU+ICZ2YWx1ZXMsCisJCQkgICAgbG9jYXRpb24gbG9jID0gbG9jYXRpb24gKCkpOworCisgICAg cnZhbHVlIG5ld19hcnJheV9jdG9yICh0eXBlIHR5cGVfLAorCQkJICAgc3RkOjp2ZWN0b3I8cnZh bHVlPiAmdmFsdWVzLAorCQkJICAgbG9jYXRpb24gbG9jID0gbG9jYXRpb24gKCkpOworCisgICAg cnZhbHVlIG5ld191bmlvbl9jdG9yICh0eXBlIHR5cGVfLAorCQkJICAgZmllbGQgZmllbGQsCisJ CQkgICBydmFsdWUgdmFsdWUsCisJCQkgICBsb2NhdGlvbiBsb2MgPSBsb2NhdGlvbiAoKSk7CisK ICAgICAvKiBHZW5lcmljIHVuYXJ5IG9wZXJhdGlvbnMuLi4gICovCiAgICAgcnZhbHVlIG5ld191 bmFyeV9vcCAoZW51bSBnY2Nfaml0X3VuYXJ5X29wIG9wLAogCQkJIHR5cGUgcmVzdWx0X3R5cGUs CkBAIC01MDAsNiArNTE0LDcgQEAgbmFtZXNwYWNlIGdjY2ppdAogCiAgICAgcnZhbHVlIGdldF9h ZGRyZXNzIChsb2NhdGlvbiBsb2MgPSBsb2NhdGlvbiAoKSk7CiAgICAgbHZhbHVlIHNldF9pbml0 aWFsaXplciAoY29uc3Qgdm9pZCAqYmxvYiwgc2l6ZV90IG51bV9ieXRlcyk7CisgICAgbHZhbHVl IHNldF9pbml0aWFsaXplcl9ydmFsdWUgKHJ2YWx1ZSBpbml0X3ZhbHVlKTsKICAgfTsKIAogICBj bGFzcyBwYXJhbSA6IHB1YmxpYyBsdmFsdWUKQEAgLTE4MzEsNiArMTg0Niw4MSBAQCBsdmFsdWU6 OnNldF9pbml0aWFsaXplciAoY29uc3Qgdm9pZCAqYmxvYiwgc2l6ZV90IG51bV9ieXRlcykKICAg cmV0dXJuICp0aGlzOwogfQogCitpbmxpbmUgbHZhbHVlCitsdmFsdWU6OnNldF9pbml0aWFsaXpl cl9ydmFsdWUgKHJ2YWx1ZSBpbml0X3ZhbHVlKQoreworICByZXR1cm4gbHZhbHVlIChnY2Nfaml0 X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlICgKKwkJICAgZ2V0X2lubmVyX2x2YWx1ZSAo KSwKKwkJICAgaW5pdF92YWx1ZS5nZXRfaW5uZXJfcnZhbHVlICgpKSk7Cit9CisKK2lubGluZSBy dmFsdWUKK2NvbnRleHQ6Om5ld19zdHJ1Y3RfY3RvciAodHlwZSB0eXBlXywKKwkJCSAgc3RkOjp2 ZWN0b3I8ZmllbGQ+ICZmaWVsZHMsCisJCQkgIHN0ZDo6dmVjdG9yPHJ2YWx1ZT4gJnZhbHVlcywK KwkJCSAgbG9jYXRpb24gbG9jKQoreworICBmaWVsZCAqcGZpZWxkcyA9IG51bGxwdHI7CisgIGlm IChmaWVsZHMuc2l6ZSAoKSkKKyAgICBwZmllbGRzID0gJmZpZWxkc1swXTsKKworICBnY2Nfaml0 X2ZpZWxkICoqZmllbGRzX2FyciA9CisgICAgcmVpbnRlcnByZXRfY2FzdDxnY2Nfaml0X2ZpZWxk ICoqPiAocGZpZWxkcyk7CisKKyAgcnZhbHVlICpwdmFsdWVzID0gbnVsbHB0cjsKKyAgaWYgKHZh bHVlcy5zaXplICgpKQorICAgIHB2YWx1ZXMgPSAmdmFsdWVzWzBdOworCisgIGdjY19qaXRfcnZh bHVlICoqdmFsdWVzX2FyciA9CisgICAgcmVpbnRlcnByZXRfY2FzdDxnY2Nfaml0X3J2YWx1ZSAq Kj4gKHB2YWx1ZXMpOworCisgIHJldHVybiBydmFsdWUgKAorCSAgIGdjY19qaXRfY29udGV4dF9u ZXdfc3RydWN0X2NvbnN0cnVjdG9yICgKKwkgICAgIG1faW5uZXJfY3R4dCwKKwkgICAgIGxvYy5n ZXRfaW5uZXJfbG9jYXRpb24gKCksCisJICAgICB0eXBlXy5nZXRfaW5uZXJfdHlwZSAoKSwKKwkg ICAgIChpbnQpdmFsdWVzLnNpemUgKCksCisJICAgICBmaWVsZHNfYXJyLAorCSAgICAgdmFsdWVz X2FycikpOworfQorCitpbmxpbmUgcnZhbHVlCitjb250ZXh0OjpuZXdfYXJyYXlfY3RvciAodHlw ZSB0eXBlXywKKwkJCSBzdGQ6OnZlY3RvcjxydmFsdWU+ICZ2YWx1ZXMsCisJCQkgbG9jYXRpb24g bG9jKQoreworICBydmFsdWUgKnB2YWx1ZXMgPSBudWxscHRyOworICBpZiAodmFsdWVzLnNpemUg KCkpCisgICAgcHZhbHVlcyA9ICZ2YWx1ZXNbMF07CisKKyAgZ2NjX2ppdF9ydmFsdWUgKip2YWx1 ZXNfYXJyID0KKyAgICByZWludGVycHJldF9jYXN0PGdjY19qaXRfcnZhbHVlICoqPiAocHZhbHVl cyk7CisKKyAgcmV0dXJuIHJ2YWx1ZSAoCisJICAgZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV9j b25zdHJ1Y3RvciAoCisJICAgICBtX2lubmVyX2N0eHQsCisJICAgICBsb2MuZ2V0X2lubmVyX2xv Y2F0aW9uICgpLAorCSAgICAgdHlwZV8uZ2V0X2lubmVyX3R5cGUgKCksCisJICAgICAoaW50KXZh bHVlcy5zaXplICgpLAorCSAgICAgdmFsdWVzX2FycikpOworfQorCitpbmxpbmUgcnZhbHVlCitj b250ZXh0OjpuZXdfdW5pb25fY3RvciAodHlwZSB0eXBlXywKKwkJCSBmaWVsZCBmaWVsZCwKKwkJ CSBydmFsdWUgdmFsdWUsCisJCQkgbG9jYXRpb24gbG9jKQoreworICByZXR1cm4gcnZhbHVlICgK KwkgICBnY2Nfaml0X2NvbnRleHRfbmV3X3VuaW9uX2NvbnN0cnVjdG9yICgKKwkgICAgIG1faW5u ZXJfY3R4dCwKKwkgICAgIGxvYy5nZXRfaW5uZXJfbG9jYXRpb24gKCksCisJICAgICB0eXBlXy5n ZXRfaW5uZXJfdHlwZSAoKSwKKwkgICAgIGZpZWxkLmdldF9pbm5lcl9maWVsZCAoKSwKKwkgICAg IHZhbHVlLmdldF9pbm5lcl9ydmFsdWUgKCkpKTsKK30KKworCiAvLyBjbGFzcyBwYXJhbSA6IHB1 YmxpYyBsdmFsdWUKIGlubGluZSBwYXJhbTo6cGFyYW0gKCkgOiBsdmFsdWUgKCkge30KIGlubGlu ZSBwYXJhbTo6cGFyYW0gKGdjY19qaXRfcGFyYW0gKmlubmVyKQpkaWZmIC0tZ2l0IGEvZ2NjL2pp dC9saWJnY2NqaXQuYyBiL2djYy9qaXQvbGliZ2Njaml0LmMKaW5kZXggNWQwNTFlNDNlMWUuLjRm NTM3ZWY5YTBiIDEwMDY0NAotLS0gYS9nY2Mvaml0L2xpYmdjY2ppdC5jCisrKyBiL2djYy9qaXQv bGliZ2Njaml0LmMKQEAgLTEzODYsNiArMTM4NiwzOTMgQEAgZ2NjX2ppdF9jb250ZXh0X25ld19n bG9iYWwgKGdjY19qaXRfY29udGV4dCAqY3R4dCwKICAgcmV0dXJuIChnY2Nfaml0X2x2YWx1ZSAq KWN0eHQtPm5ld19nbG9iYWwgKGxvYywga2luZCwgdHlwZSwgbmFtZSk7CiB9CiAKK2V4dGVybiBn Y2Nfaml0X3J2YWx1ZSAqCitnY2Nfaml0X2NvbnRleHRfbmV3X3N0cnVjdF9jb25zdHJ1Y3RvciAo Z2NjX2ppdF9jb250ZXh0ICpjdHh0LAorCQkJCQlnY2Nfaml0X2xvY2F0aW9uICpsb2MsCisJCQkJ CWdjY19qaXRfdHlwZSAqdHlwZSwKKwkJCQkJc2l6ZV90IGFycl9sZW5ndGgsCisJCQkJCWdjY19q aXRfZmllbGQgKipmaWVsZHMsCisJCQkJCWdjY19qaXRfcnZhbHVlICoqdmFsdWVzKQoreworICB1 c2luZyBuYW1lc3BhY2UgZ2NjOjpqaXQ6OnJlY29yZGluZzsKKworICBSRVRVUk5fTlVMTF9JRl9G QUlMIChjdHh0LCBOVUxMLCBsb2MsICJOVUxMIGNvbnRleHQiKTsKKyAgSklUX0xPR19GVU5DIChj dHh0LT5nZXRfbG9nZ2VyICgpKTsKKyAgUkVUVVJOX05VTExfSUZfRkFJTCAodHlwZSwgY3R4dCwg bG9jLCAiTlVMTCB0eXBlIik7CisKKyAgUkVUVVJOX05VTExfSUZfRkFJTF9QUklOVEYxICh0eXBl LT5pc19zdHJ1Y3QgKCksCisJCQkgICAgICAgY3R4dCwgbG9jLAorCQkJICAgICAgICJjb25zdHJ1 Y3RvciB0eXBlIGlzIG5vdCBhIHN0cnVjdDogJXMiLAorCQkJICAgICAgIHR5cGUtPmdldF9kZWJ1 Z19zdHJpbmcgKCkpOworCisgIGNvbXBvdW5kX3R5cGUgKmN0ID0gcmVpbnRlcnByZXRfY2FzdDxj b21wb3VuZF90eXBlICo+KHR5cGUpOworICBnY2M6OmppdDo6cmVjb3JkaW5nOjpmaWVsZHMgKmZp ZWxkc19zdHJ1Y3QgPSBjdC0+Z2V0X2ZpZWxkcyAoKTsKKyAgc2l6ZV90IG5fZmllbGRzID0gZmll bGRzX3N0cnVjdC0+bGVuZ3RoICgpOworCisgIFJFVFVSTl9OVUxMX0lGX0ZBSUxfUFJJTlRGMSAo Y3QtPmhhc19rbm93bl9zaXplICgpLAorCQkJICAgICAgIGN0eHQsIGxvYywKKwkJCSAgICAgICAi c3RydWN0IGNhbid0IGJlIG9wYXF1ZTogJXMiLAorCQkJICAgICAgIHR5cGUtPmdldF9kZWJ1Z19z dHJpbmcgKCkpOworICBSRVRVUk5fTlVMTF9JRl9GQUlMX1BSSU5URjEgKG5fZmllbGRzLAorCQkJ ICAgICAgIGN0eHQsIGxvYywKKwkJCSAgICAgICAibm8gZmllbGRzIGluIHN0cnVjdDogJXMiLAor CQkJICAgICAgIHR5cGUtPmdldF9kZWJ1Z19zdHJpbmcgKCkpOworCisgIC8qIElmIHRoZXJlIGlz IG5vIGFycmF5IGlucHV0IHdlIGp1c3Qgc2hvcnQgY2lyY3VpdCB0byB6ZXJvIHRoZSBzdHJ1Y3Qu ICAqLworICBpZiAoIWFycl9sZW5ndGgpCisgICAgcmV0dXJuIChnY2Nfaml0X3J2YWx1ZSAqKWN0 eHQtPm5ld19jdG9yIChsb2MsIHR5cGUsIDAsIE5VTEwsIE5VTEwpOworCisgIFJFVFVSTl9OVUxM X0lGX0ZBSUxfUFJJTlRGMyAobl9maWVsZHMgPj0gYXJyX2xlbmd0aCwKKwkJCSAgICAgICBjdHh0 LCBsb2MsCisJCQkgICAgICAgIm1vcmUgdmFsdWVzIGluIGNvbnN0cnVjdG9yIChuPSV6dSkgdGhh biBmaWVsZHMiCisJCQkgICAgICAgIiBpbiB0YXJnZXQgJXMgKG49JXp1KSIsCisJCQkgICAgICAg YXJyX2xlbmd0aCwKKwkJCSAgICAgICB0eXBlLT5nZXRfZGVidWdfc3RyaW5nICgpLAorCQkJICAg ICAgIG5fZmllbGRzKTsKKworICAvKiBJdCBpcyBPSyBpZiBmaWVsZHMgYXJlIG51bGwgaGVyZSwg aW5kaWNhdGluZyBkZWZpbml0b24gb3JkZXIsCisgICAgIGJ1dCB0aGVyZSBoYXMgdG8gYmUgYSB2 YWx1ZXMgYXJyYXkuICAqLworICBSRVRVUk5fTlVMTF9JRl9GQUlMICh2YWx1ZXMsCisJCSAgICAg ICBjdHh0LCBsb2MsCisJCSAgICAgICAiJ3ZhbHVlcycgTlVMTCB3aXRoIG5vbi16ZXJvICdhcnJf bGVuZ3RoJyIpOworCisgIHNpemVfdCBpZHggPSAwOyAvKiBSdW5uZXIgaW5kZXggZm9yIGZpZWxk cyBpbiB0aGUgdHlwZSBvYmplY3QuICAqLworCisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJy X2xlbmd0aDsgaSsrKQorICAgIHsKKyAgICAgIGdjYzo6aml0OjpyZWNvcmRpbmc6OnJ2YWx1ZSAq cnYgPSB2YWx1ZXNbaV07CisKKyAgICAgIC8qIHJ2IGthbiBiZSBOVUxMLCB3aGljaCB3b3VsZCBp bmRpY2F0ZSB6ZXJvIGluaXQgZm9yIHRoZSBmaWVsZC4gICovCisgICAgICBnY2M6OmppdDo6cmVj b3JkaW5nOjp0eXBlICpydl90eXBlID0gcnYgPyBydi0+Z2V0X3R5cGUgKCkgOiBudWxscHRyOwor CisgICAgICAvKiBJZiBmaWVsZHMgYXJlIHNwZWNpZmllZCB3ZSBuZWVkIHRvIGNoZWNrIHRoYXQg dGhleSBhcmUgaW4KKwkgZGVmaW5pdGlvbiBvcmRlci4gICovCisgICAgICBpZiAoZmllbGRzKQor CXsKKwkgIGdjYzo6aml0OjpyZWNvcmRpbmc6OmZpZWxkICpmID0gZmllbGRzW2ldOworCisJICBS RVRVUk5fTlVMTF9JRl9GQUlMX1BSSU5URjEgKAorCSAgICBmLAorCSAgICBjdHh0LCBsb2MsCisJ ICAgICJOVUxMIGZpZWxkIGluICdmaWVsZHMnLCBhdCBpbmRleCAlenUiLCBpKTsKKworCSAgUkVU VVJOX05VTExfSUZfRkFJTF9QUklOVEYzICgKKwkgICAgZi0+Z2V0X2NvbnRhaW5lciAoKSA9PQor CSAgICBzdGF0aWNfY2FzdDxnY2M6OmppdDo6cmVjb3JkaW5nOjp0eXBlKj4odHlwZSksCisJICAg IGN0eHQsIGxvYywKKwkgICAgImZpZWxkIG9iamVjdCBhdCBpbmRleCAlenUgKCVzKSwgd2FzIG5v dCB1c2VkIHdoZW4gY3JlYXRpbmcgIgorCSAgICAidGhlICVzIiwKKwkgICAgaSwKKwkgICAgZi0+ Z2V0X2RlYnVnX3N0cmluZyAoKSwKKwkgICAgdHlwZS0+Z2V0X2RlYnVnX3N0cmluZyAoKSk7CisK KwkgIC8qIEZpZWxkcyBpbiB0aGUgY29uc3RydWN0b3IgbmVlZCB0byBiZSBpbiBzdHJ1Y3QgZGVm aW5pdGlvbgorCSAgICAgb3JkZXIsIGJ1dCB0aGVyZSBjYW4gYmUgZ2Fwcy4gICovCisJICBzaXpl X3QgajsKKwkgIGZvciAoaiA9IGlkeDsgaiA8IG5fZmllbGRzOyBqKyspCisJICAgIHsKKwkgICAg ICBmaWVsZCAqZnMgPSBmaWVsZHNfc3RydWN0LT5nZXRfZmllbGQgKGopOworCSAgICAgIGlmIChm cyA9PSBmKQorCQl7CisJCSAgaWR4ID0gajsgLyogQWR2YW5jZSBydW5uZXIgaW5kZXggZm9yIG5l eHQgaXRlcmF0aW9uLiAgKi8KKwkJICBicmVhazsKKwkJfQorCSAgICB9CisKKwkgIFJFVFVSTl9O VUxMX0lGX0ZBSUxfUFJJTlRGMyAoCisJICAgIGogIT0gbl9maWVsZHMsCisJICAgIGN0eHQsIGxv YywKKwkgICAgImZpZWxkIGF0IGluZGV4ICV6dSBpbiAnZmllbGRzJyBpcyBub3QgaW4gZGVmaW5p dGlvbiBvcmRlciAiCisJICAgICIoc3RydWN0OiAlcykgKGN0b3IgZmllbGQ6ICVzKSIsCisJICAg IGksCisJICAgIHR5cGUtPmdldF9kZWJ1Z19zdHJpbmcgKCksCisJICAgIGYtPmdldF9kZWJ1Z19z dHJpbmcgKCkpOworCisJICAvKiBDaGVjayB0aGF0IHRoZSBzcGVjaWZpZWQgZmllbGQgaGFzIHRo ZSBzYW1lIHR5cGUgYXMgdGhlCisJICAgICB2YWx1ZSwgdW5sZXNzIHRoZSB2YWx1ZSBpcyBudWxs IChhIHplcm8gdmFsdWUgaW5pdCkuICAqLworCSAgUkVUVVJOX05VTExfSUZfRkFJTF9QUklOVEY1 ICgKKwkgICAgIXJ2IHx8IGdjYzo6aml0Ojp0eXBlc19raW5kYV9zYW1lIChydl90eXBlLAorCQkJ CQkgICAgICAgZi0+Z2V0X3R5cGUgKCkpLAorCSAgICBjdHh0LCBsb2MsCisJICAgICJ2YWx1ZSBh bmQgZmllbGQgbm90IHRoZSBzYW1lIHVucXVhbGlmaWVkIHR5cGUsIGF0IGluZGV4ICV6dSIKKwkg ICAgIiAoJXMuJXM6ICVzKSh2YWx1ZSB0eXBlOiAlcykiLAorCSAgICBpLAorCSAgICB0eXBlLT5n ZXRfZGVidWdfc3RyaW5nICgpLAorCSAgICBmLT5nZXRfZGVidWdfc3RyaW5nICgpLAorCSAgICBm LT5nZXRfdHlwZSAoKS0+Z2V0X2RlYnVnX3N0cmluZyAoKSwKKwkgICAgcnZfdHlwZS0+Z2V0X2Rl YnVnX3N0cmluZyAoKSk7CisJfQorCisgICAgICAvKiBJZiBubyBmaWVsZHMgYXJlIHNwZWNpZmll ZCwgY2hlY2sgdGhhdCB0aGUgdmFsdWUgaGFzIHRoZSBzYW1lIHR5cGUKKwkgYXMgdGhlIGZpZWxk IGluIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBzdHJ1Y3QuICAqLworICAgICAgaWYgKHJ2ICYmICFm aWVsZHMpCisJeworCSAgUkVUVVJOX05VTExfSUZfRkFJTF9QUklOVEY1ICgKKwkgICAgZ2NjOjpq aXQ6OnR5cGVzX2tpbmRhX3NhbWUgKHJ2X3R5cGUsCisJCQkJCWZpZWxkc19zdHJ1Y3QtPgorCQkJ CQkgIGdldF9maWVsZCAoaSktPmdldF90eXBlICgpKSwKKwkgICAgY3R4dCwgbG9jLAorCSAgICAi dmFsdWUgYW5kIGZpZWxkIG5vdCB0aGUgc2FtZSB1bnF1YWxpZmllZCB0eXBlLCBhdCBpbmRleCAl enUiCisJICAgICIgKCVzLiVzOiAlcykodmFsdWUgdHlwZTogJXMpIiwKKwkgICAgaSwKKwkgICAg dHlwZS0+Z2V0X2RlYnVnX3N0cmluZyAoKSwKKwkgICAgZmllbGRzX3N0cnVjdC0+Z2V0X2ZpZWxk IChpKS0+Z2V0X2RlYnVnX3N0cmluZyAoKSwKKwkgICAgZmllbGRzX3N0cnVjdC0+Z2V0X2ZpZWxk IChpKS0+Z2V0X3R5cGUgKCktPmdldF9kZWJ1Z19zdHJpbmcgKCksCisJICAgIHJ2X3R5cGUtPmdl dF9kZWJ1Z19zdHJpbmcgKCkpOworCX0KKworICAgICAgaWYgKHJ2KQorCXsKKwkgIFJFVFVSTl9O VUxMX0lGX0ZBSUxfUFJJTlRGMSAoCisJICAgICFydl90eXBlLT5pc192b2lkICgpLAorCSAgICBj dHh0LCBsb2MsCisJICAgICJjYW4ndCBjb25zdHJ1Y3QgdGhlIHZvaWQgdHlwZSwgYXQgaW5kZXgg JXp1IiwgaSk7CisJfQorICAgIH0KKworICByZXR1cm4gKGdjY19qaXRfcnZhbHVlICopY3R4dC0+ bmV3X2N0b3IgKAorICAgIGxvYywKKyAgICB0eXBlLAorICAgIGFycl9sZW5ndGgsCisgICAgcmVp bnRlcnByZXRfY2FzdDxnY2M6OmppdDo6cmVjb3JkaW5nOjpmaWVsZCoqPihmaWVsZHMpLAorICAg IHJlaW50ZXJwcmV0X2Nhc3Q8Z2NjOjpqaXQ6OnJlY29yZGluZzo6cnZhbHVlKio+KHZhbHVlcykp OworfQorCitleHRlcm4gZ2NjX2ppdF9ydmFsdWUgKgorZ2NjX2ppdF9jb250ZXh0X25ld191bmlv bl9jb25zdHJ1Y3RvciAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LAorCQkJCSAgICAgICBnY2Nfaml0 X2xvY2F0aW9uICpsb2MsCisJCQkJICAgICAgIGdjY19qaXRfdHlwZSAqdHlwZSwKKwkJCQkgICAg ICAgZ2NjX2ppdF9maWVsZCAqZmllbGQsCisJCQkJICAgICAgIGdjY19qaXRfcnZhbHVlICp2YWx1 ZSkKK3sKKyAgdXNpbmcgbmFtZXNwYWNlIGdjYzo6aml0OjpyZWNvcmRpbmc7CisKKyAgUkVUVVJO X05VTExfSUZfRkFJTCAoY3R4dCwgTlVMTCwgbG9jLCAiTlVMTCBjb250ZXh0Iik7CisgIEpJVF9M T0dfRlVOQyAoY3R4dC0+Z2V0X2xvZ2dlciAoKSk7CisgIFJFVFVSTl9OVUxMX0lGX0ZBSUwgKHR5 cGUsIGN0eHQsIGxvYywgIk5VTEwgdHlwZSIpOworCisgIFJFVFVSTl9OVUxMX0lGX0ZBSUxfUFJJ TlRGMSAodHlwZS0+aXNfdW5pb24gKCksCisJCQkgICAgICAgY3R4dCwgbG9jLAorCQkJICAgICAg ICJjb25zdHJ1Y3RvciB0eXBlIGlzIG5vdCBhbiB1bmlvbjogJXMiLAorCQkJICAgICAgIHR5cGUt PmdldF9kZWJ1Z19zdHJpbmcgKCkpOworCisgIGNvbXBvdW5kX3R5cGUgKmN0ID0gcmVpbnRlcnBy ZXRfY2FzdDxjb21wb3VuZF90eXBlICo+KHR5cGUpOworICBnY2M6OmppdDo6cmVjb3JkaW5nOjpm aWVsZHMgKmZpZWxkc191bmlvbiA9IGN0LT5nZXRfZmllbGRzICgpOworICBzaXplX3Qgbl9maWVs ZHMgPSBmaWVsZHNfdW5pb24tPmxlbmd0aCAoKTsKKworICBSRVRVUk5fTlVMTF9JRl9GQUlMX1BS SU5URjEgKGN0LT5oYXNfa25vd25fc2l6ZSAoKSwKKwkJCSAgICAgICBjdHh0LCBsb2MsCisJCQkg ICAgICAgInVuaW9uIGNhbid0IGJlIG9wYXF1ZTogJXMiLAorCQkJICAgICAgIHR5cGUtPmdldF9k ZWJ1Z19zdHJpbmcgKCkpOworICBSRVRVUk5fTlVMTF9JRl9GQUlMX1BSSU5URjEgKG5fZmllbGRz LAorCQkJICAgICAgIGN0eHQsIGxvYywKKwkJCSAgICAgICAibm8gZmllbGRzIGluIHVuaW9uOiAl cyIsCisJCQkgICAgICAgdHlwZS0+Z2V0X2RlYnVnX3N0cmluZyAoKSk7CisKKyAgLyogSWYgdmFs dWUgaXMgTlVMTCB3ZSBhcmUganVzdCBzdXBwb3NlZCB0byB6ZXJvIHRoZSB3aG9sZSB1bmlvbi4g ICovCisgIGlmICghdmFsdWUpCisgICAgcmV0dXJuIChnY2Nfaml0X3J2YWx1ZSAqKWN0eHQtPm5l d19jdG9yIChsb2MsIHR5cGUsIDAsIE5VTEwsIE5VTEwpOworCisgIGdjYzo6aml0OjpyZWNvcmRp bmc6OnR5cGUgKnJ2X3R5cGUgPSB2YWx1ZS0+Z2V0X3R5cGUgKCk7CisKKyAgUkVUVVJOX05VTExf SUZfRkFJTCAoCisgICAgIXJ2X3R5cGUtPmlzX3ZvaWQgKCksCisgICAgY3R4dCwgbG9jLAorICAg ICJjYW4ndCBjb25zdHJ1Y3QgdGhlIHZvaWQgdHlwZSIpOworCisgIGlmIChmaWVsZCkKKyAgICB7 CisgICAgICBSRVRVUk5fTlVMTF9JRl9GQUlMX1BSSU5URjIgKAorCWZpZWxkLT5nZXRfY29udGFp bmVyICgpID09CisJc3RhdGljX2Nhc3Q8Z2NjOjpqaXQ6OnJlY29yZGluZzo6dHlwZSo+KHR5cGUp LAorCWN0eHQsIGxvYywKKwkiZmllbGQgb2JqZWN0ICglcykgd2FzIG5vdCB1c2VkIHdoZW4gY3Jl YXRpbmcgIgorCSJ0aGUgdHlwZSAlcyIsCisJZmllbGQtPmdldF9kZWJ1Z19zdHJpbmcgKCksCisJ dHlwZS0+Z2V0X2RlYnVnX3N0cmluZyAoKSk7CisKKyAgICAgIFJFVFVSTl9OVUxMX0lGX0ZBSUxf UFJJTlRGNCAoCisJZ2NjOjpqaXQ6OnR5cGVzX2tpbmRhX3NhbWUgKHJ2X3R5cGUsCisJCQkJICAg IGZpZWxkLT5nZXRfdHlwZSAoKSksCisJY3R4dCwgbG9jLAorCSJ2YWx1ZSBhbmQgZmllbGQgYXJl IG5vdCB0aGUgc2FtZSB1bnF1YWxpZmllZCB0eXBlIgorCSIgKCVzLiVzOiAlcykodmFsdWUgdHlw ZTogJXMpIiwKKwl0eXBlLT5nZXRfZGVidWdfc3RyaW5nICgpLAorCWZpZWxkLT5nZXRfZGVidWdf c3RyaW5nICgpLAorCWZpZWxkLT5nZXRfdHlwZSAoKS0+Z2V0X2RlYnVnX3N0cmluZyAoKSwKKwly dl90eXBlLT5nZXRfZGVidWdfc3RyaW5nICgpKTsKKyAgICB9CisgIC8qIElmIG5vIGZpZWxkIGlz IHNwZWNpZmllZCwgY2hlY2sgdGhhdCB0aGUgdmFsdWUgaGFzIHRoZSBzYW1lIHR5cGUKKyAgICAg YXMgdGhlIGZpcnN0IGZpZWxkIGluIHRoZSBkZWZpbml0aW9uIG9mIHRoZSB1bmlvbi4gICovCisg IGlmICghZmllbGQpCisgICAgUkVUVVJOX05VTExfSUZfRkFJTF9QUklOVEYyICgKKyAgICAgIGdj Yzo6aml0Ojp0eXBlc19raW5kYV9zYW1lIChydl90eXBlLAorCQkJCSAgZmllbGRzX3VuaW9uLT4K KwkJCQkgICAgZ2V0X2ZpZWxkICgwKS0+Z2V0X3R5cGUgKCkpLAorICAgICAgY3R4dCwgbG9jLAor ICAgICAgInZhbHVlIGFuZCBmaXJzdCB1bmlvbiBmaWVsZCBub3QgdGhlIHNhbWUgdW5xdWFsaWZp ZWQgdHlwZSIKKyAgICAgICIgKGZpZWxkIHR5cGU6ICVzKSh2YWx1ZSB0eXBlOiAlcykiLAorICAg ICAgZmllbGRzX3VuaW9uLT5nZXRfZmllbGQgKDApLT5nZXRfdHlwZSAoKS0+Z2V0X2RlYnVnX3N0 cmluZyAoKSwKKyAgICAgIHJ2X3R5cGUtPmdldF9kZWJ1Z19zdHJpbmcgKCkpOworCisKKyAgcmV0 dXJuIChnY2Nfaml0X3J2YWx1ZSAqKWN0eHQtPm5ld19jdG9yICgKKyAgICBsb2MsCisgICAgdHlw ZSwKKyAgICAxLAorICAgIC8qIEEgTlVMTCBmaWVsZHMgYXJyYXkgdGVsbHMgbmV3X2N0b3IgdG8g dGFrZSBmaWVsZHMgZnJvbSB0aGUgdHlwZSBvYmouICAqLworICAgIHJlaW50ZXJwcmV0X2Nhc3Q8 Z2NjOjpqaXQ6OnJlY29yZGluZzo6ZmllbGQqKj4oZmllbGQgPyAmZmllbGQgOiBOVUxMKSwKKyAg ICByZWludGVycHJldF9jYXN0PGdjYzo6aml0OjpyZWNvcmRpbmc6OnJ2YWx1ZSoqPigmdmFsdWUp KTsKK30KKworZXh0ZXJuIGdjY19qaXRfcnZhbHVlICoKK2djY19qaXRfY29udGV4dF9uZXdfYXJy YXlfY29uc3RydWN0b3IgKGdjY19qaXRfY29udGV4dCAqY3R4dCwKKwkJCQkgICAgICAgZ2NjX2pp dF9sb2NhdGlvbiAqbG9jLAorCQkJCSAgICAgICBnY2Nfaml0X3R5cGUgKnR5cGUsCisJCQkJICAg ICAgIHNpemVfdCBhcnJfbGVuZ3RoLAorCQkJCSAgICAgICBnY2Nfaml0X3J2YWx1ZSAqKnZhbHVl cykKK3sKKyAgdXNpbmcgbmFtZXNwYWNlIGdjYzo6aml0OjpyZWNvcmRpbmc7CisKKyAgUkVUVVJO X05VTExfSUZfRkFJTCAoY3R4dCwgTlVMTCwgbG9jLCAiTlVMTCBjb250ZXh0Iik7CisgIEpJVF9M T0dfRlVOQyAoY3R4dC0+Z2V0X2xvZ2dlciAoKSk7CisgIFJFVFVSTl9OVUxMX0lGX0ZBSUwgKHR5 cGUsIGN0eHQsIGxvYywgIk5VTEwgdHlwZSIpOworCisgIFJFVFVSTl9OVUxMX0lGX0ZBSUwgKHR5 cGUtPmlzX2FycmF5ICgpICE9IE5VTEwsCisJCSAgICAgICBjdHh0LCBsb2MsCisJCSAgICAgICAi Y29uc3RydWN0b3IgdHlwZSBub3QgYW4gYXJyYXkiKTsKKworICBpZiAoIWFycl9sZW5ndGgpCisg ICAgdmFsdWVzID0gTlVMTDsKKworICBpZiAoYXJyX2xlbmd0aCkKKyAgICB7CisgICAgICBSRVRV Uk5fTlVMTF9JRl9GQUlMICgKKwl2YWx1ZXMsCisJY3R4dCwgbG9jLAorCSIndmFsdWVzJyBOVUxM IHdpdGggbm9uLXplcm8gJ2Fycl9sZW5ndGgnIik7CisKKyAgICAgIGdjYzo6aml0OjpyZWNvcmRp bmc6OmFycmF5X3R5cGUgKmFycl90eXBlID0KKwlyZWludGVycHJldF9jYXN0PGdjYzo6aml0Ojpy ZWNvcmRpbmc6OmFycmF5X3R5cGUqPih0eXBlKTsKKyAgICAgIHNpemVfdCBuX2VsID0gYXJyX3R5 cGUtPm51bV9lbGVtZW50cyAoKTsKKworICAgICAgUkVUVVJOX05VTExfSUZfRkFJTF9QUklOVEYy ICgKKwluX2VsID49IGFycl9sZW5ndGgsCisJY3R4dCwgbG9jLAorCSJhcnJheSBjb25zdHJ1Y3Rv ciBoYXMgbW9yZSB2YWx1ZXMgdGhhbiB0aGUgYXJyYXkgdHlwZSdzIGxlbmd0aCIKKwkiIChhcnJh eSB0eXBlIGxlbmd0aDogJXp1LCBjb25zdHJ1Y3RvciBsZW5ndGg6ICV6dSkiLAorCW5fZWwsCisJ YXJyX2xlbmd0aCk7CisKKyAgICAgIC8qIEZvciBhcnJheXMsIGFsbCB2YWx1ZXMgbmVlZCB0byBi ZSB0aGUgc2FtZSBiYXNlIHR5cGUuICAqLworICAgICAgZ2NjOjpqaXQ6OnJlY29yZGluZzo6dHlw ZSAqdHlwZTAgPSBOVUxMOworICAgICAgc2l6ZV90IGkgPSAwOworICAgICAgLyogRmluZCBmaXJz dCBub24tbnVsbCB2YWx1ZS4gICovCisgICAgICBmb3IgKDtpIDwgYXJyX2xlbmd0aDsgaSsrKQor CXsKKwkgIGlmICh2YWx1ZXNbaV0pCisJICAgIGJyZWFrOworCX0KKworICAgICAgaWYgKGkgPCBh cnJfbGVuZ3RoKSAvKiBBbGwgdmFsdWVzIG1pZ2h0IGJlIG51bGwgYW5kIGkgPT0gYXJyX2xlbmd0 aC4gICovCisJdHlwZTAgPSB2YWx1ZXNbaV0tPmdldF90eXBlICgpOworCisgICAgICAvKiBJZiB3 ZSBnb3QgYSB0eXBlMCwgY2hlY2sgdGhhdCBhbGwgb3RoZXIgdmFsdWVzIGhhdmUKKwkgdGhlIHNh bWUgdHlwZS4gICovCisgICAgICBmb3IgKDsgaSA8IGFycl9sZW5ndGg7IGkrKykKKwl7CisJICBp ZiAodmFsdWVzW2ldKQorCSAgICBSRVRVUk5fTlVMTF9JRl9GQUlMX1BSSU5URjMgKAorCSAgICAg IGdjYzo6aml0Ojp0eXBlc19raW5kYV9zYW1lICh0eXBlMCwKKwkJCQkJICB2YWx1ZXNbaV0tPmdl dF90eXBlICgpKSwKKwkgICAgICBjdHh0LCBsb2MsCisJICAgICAgInZhbHVlIHR5cGUgYXQgaW5k ZXggJXp1IGRpZmZlciBmcm9tIGZpcnN0IHZhbHVlIHR5cGUiCisJICAgICAgIiAoZmlyc3QgdHlw ZTogJXMpKGRpZmZlcmVudCB0eXBlOiAlcykiLAorCSAgICAgIGksCisJICAgICAgdHlwZTAtPmdl dF9kZWJ1Z19zdHJpbmcgKCksCisJICAgICAgdmFsdWVzW2ldLT5nZXRfdHlwZSAoKS0+Z2V0X2Rl YnVnX3N0cmluZyAoKSk7CisJfQorCisgICAgICAvKiBDb21wYXJlIHR5cGUwIHdpdGggdGhlIGVs ZW1lbnQgdHlwZSBzcGVjaWZpZWQgaW4gdGhlCisJIHR5cGUgb2YgdGhlIGFycmF5LiAgKi8KKyAg ICAgIGlmICh0eXBlMCkKKwl7CisJICBnY2M6OmppdDo6cmVjb3JkaW5nOjp0eXBlICplbF90eXBl ID0KKwkgICAgdHlwZS0+aXNfYXJyYXkgKCk7CisKKwkgIFJFVFVSTl9OVUxMX0lGX0ZBSUxfUFJJ TlRGMiAoCisJICAgIGdjYzo6aml0Ojp0eXBlc19raW5kYV9zYW1lICh0eXBlMCwgZWxfdHlwZSks CisJICAgIGN0eHQsIGxvYywKKwkgICAgImFycmF5IGVsZW1lbnQgdmFsdWUgdHlwZXMgZGlmZmVy IGZyb20gdHlwZXMgaW4gJ3ZhbHVlcyciCisJICAgICIgKGVsZW1lbnQgdHlwZTogJXMpKCd2YWx1 ZXMnIHR5cGU6ICVzKSIsCisJICAgIGVsX3R5cGUtPmdldF9kZWJ1Z19zdHJpbmcgKCksCisJICAg IHR5cGUwLT5nZXRfZGVidWdfc3RyaW5nICgpKTsKKwl9CisgICAgfQorCisgIHJldHVybiAoZ2Nj X2ppdF9ydmFsdWUgKiljdHh0LT5uZXdfY3RvciAoCisgICAgbG9jLAorICAgIHR5cGUsCisgICAg YXJyX2xlbmd0aCwKKyAgICBOVUxMLAorICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Z2NjOjpqaXQ6OnJl Y29yZGluZzo6cnZhbHVlKio+KHZhbHVlcykpOworfQorCisvKiBQdWJsaWMgZW50cnlwb2ludC4g IFNlZSBkZXNjcmlwdGlvbiBpbiBsaWJnY2NqaXQuaC4gICovCisKK2V4dGVybiBnY2Nfaml0X2x2 YWx1ZSAqCitnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChnY2Nfaml0X2x2 YWx1ZSAqZ2xvYmFsLAorCQkJCSAgICAgICBnY2Nfaml0X3J2YWx1ZSAqaW5pdF9ydmFsdWUpCit7 CisgIFJFVFVSTl9OVUxMX0lGX0ZBSUwgKGdsb2JhbCwgTlVMTCwgTlVMTCwiTlVMTCBnbG9iYWwi KTsKKworICBnY2M6OmppdDo6cmVjb3JkaW5nOjpjb250ZXh0ICpjdHh0ID0gZ2xvYmFsLT5nZXRf Y29udGV4dCAoKTsKKyAgUkVUVVJOX05VTExfSUZfRkFJTCAoY3R4dCwgTlVMTCwgTlVMTCwiTlVM TCBjb250ZXh0Iik7CisgIEpJVF9MT0dfRlVOQyAoY3R4dC0+Z2V0X2xvZ2dlciAoKSk7CisgIFJF VFVSTl9OVUxMX0lGX0ZBSUwgKGluaXRfcnZhbHVlLCBjdHh0LCBOVUxMLCJOVUxMIGluaXRfcnZh bHVlIik7CisKKyAgUkVUVVJOX05VTExfSUZfRkFJTF9QUklOVEYxIChnbG9iYWwtPmlzX2dsb2Jh bCAoKSwKKwkJCSAgICAgICBjdHh0LCBOVUxMLAorCQkJICAgICAgICJsdmFsdWUgXCIlc1wiIG5v dCBhIGdsb2JhbCIsCisJCQkgICAgICAgZ2xvYmFsLT5nZXRfZGVidWdfc3RyaW5nICgpKTsKKwor ICBnY2M6OmppdDo6cmVjb3JkaW5nOjpnbG9iYWwgKmdibCA9CisgICAgcmVpbnRlcnByZXRfY2Fz dDxnY2M6OmppdDo6cmVjb3JkaW5nOjpnbG9iYWwgKj4gKGdsb2JhbCk7CisKKyAgUkVUVVJOX05V TExfSUZfRkFJTF9QUklOVEYxIChnYmwtPmdldF9raW5kICgpICE9CisJCQkgICAgICAgR0NDX0pJ VF9HTE9CQUxfSU1QT1JURUQsCisJCQkgICAgICAgY3R4dCwgTlVMTCwKKwkJCSAgICAgICAiY2Fu J3QgaW5pdGlhbGl6ZSBcIiVzXCIsIGl0IGlzIGltcG9ydGVkIiwKKwkJCSAgICAgICBnbG9iYWwt PmdldF9kZWJ1Z19zdHJpbmcgKCkpOworCisgIFJFVFVSTl9OVUxMX0lGX0ZBSUxfUFJJTlRGNCAo Z2NjOjpqaXQ6OnR5cGVzX2tpbmRhX3NhbWUgKAorCQkJCSBnbG9iYWwtPmdldF90eXBlICgpLAor CQkJCSBpbml0X3J2YWx1ZS0+Z2V0X3R5cGUgKCkpLAorCQkJICAgICAgIGN0eHQsIE5VTEwsCisJ CQkgICAgICAgIm1pc21hdGNoaW5nIHR5cGVzOiIKKwkJCSAgICAgICAiIGluaXRpYWxpemluZyAl cyAodHlwZTogJXMpIHdpdGggJXMgKHR5cGU6ICVzKSIsCisJCQkgICAgICAgZ2xvYmFsLT5nZXRf ZGVidWdfc3RyaW5nICgpLAorCQkJICAgICAgIGdsb2JhbC0+Z2V0X3R5cGUgKCktPmdldF9kZWJ1 Z19zdHJpbmcgKCksCisJCQkgICAgICAgaW5pdF9ydmFsdWUtPmdldF9kZWJ1Z19zdHJpbmcgKCks CisJCQkgICAgICAgaW5pdF9ydmFsdWUtPmdldF90eXBlICgpLT5nZXRfZGVidWdfc3RyaW5nICgp KTsKKworICAvKiBDaGVjayB0aGF0IHRoZXJlIGFyZSBubyBpbml0aWFsaXplcnMgc2V0IGZvciB0 aGUgZ2xvYmFsIHlldC4gICovCisgIFJFVFVSTl9OVUxMX0lGX0ZBSUxfUFJJTlRGMSAoIWdibC0+ dGVzdF9mbGFnc19hbnlvZiAoCisJCQkJICBnY2M6OmppdDo6R0xPQkFMX1ZBUl9GTEFHU19XSUxM X0JFX1JWQUxfSU5JVCB8CisJCQkJICBnY2M6OmppdDo6R0xPQkFMX1ZBUl9GTEFHU19XSUxMX0JF X0JMT0JfSU5JVCksCisJCQkgICAgICAgY3R4dCwgTlVMTCwKKwkJCSAgICAgICAiZ2xvYmFsIHZh cmlhYmxlIGFscmVhZHkgaW5pdGlhbGl6ZWQ6ICVzIiwKKwkJCSAgICAgICBnbG9iYWwtPmdldF9k ZWJ1Z19zdHJpbmcgKCkpOworCisgIC8qIFRoZSBnbG9iYWwgbmVlZCB0byBrbm93IGR1cmluZyBw bGF5YmFjayB0aGF0IGl0IHdpbGwgYmUKKyAgICAgaW5pdGlhbGl6ZWQuICAqLworICBnYmwtPnNl dF9mbGFncyAoZ2NjOjpqaXQ6OkdMT0JBTF9WQVJfRkxBR1NfV0lMTF9CRV9SVkFMX0lOSVQpOwor CisgIGN0eHQtPm5ld19nbG9iYWxfaW5pdF9ydmFsdWUgKGdsb2JhbCwgaW5pdF9ydmFsdWUpOwor CisgIHJldHVybiBnbG9iYWw7Cit9CisKIC8qIFB1YmxpYyBlbnRyeXBvaW50LiAgU2VlIGRlc2Ny aXB0aW9uIGluIGxpYmdjY2ppdC5oLgogCiAgICBBZnRlciBlcnJvci1jaGVja2luZywgdGhlIHJl YWwgd29yayBpcyBkb25lIGJ5IHRoZQpAQCAtMTQxOSw4ICsxODA2LDIyIEBAIGdjY19qaXRfZ2xv YmFsX3NldF9pbml0aWFsaXplciAoZ2NjX2ppdF9sdmFsdWUgKmdsb2JhbCwKICAgICAiIGdsb2Jh bCBcIiVzXCIgaGFzIHNpemUgJXp1IHdoZXJlYXMgaW5pdGlhbGl6ZXIgaGFzIHNpemUgJXp1IiwK ICAgICBnbG9iYWwtPmdldF9kZWJ1Z19zdHJpbmcgKCksIGx2YWx1ZV9zaXplLCBudW1fYnl0ZXMp OwogCi0gIHJlaW50ZXJwcmV0X2Nhc3QgPGdjYzo6aml0OjpyZWNvcmRpbmc6Omdsb2JhbCAqPiAo Z2xvYmFsKQotICAgIC0+c2V0X2luaXRpYWxpemVyIChibG9iLCBudW1fYnl0ZXMpOworICAvKiBD aGVjayB0aGF0IHRoZSBydmFsdWUgaW5pdGlhbGl6ZXIgaXMgbm90IHNldCBmb3IgdGhpcyBnbG9i YWwuCisgICAgIE5vdGUgdGhhdCB3ZSBkbyBub3QgY2hlY2sgaWYgdGhpcyBibG9iIHR5cGUgaW5p dGlhbGl6ZXIgaXMKKyAgICAgYWxyZWFkeSBzZXQsIHNpbmNlIHRoYXQgY2hlY2sgd2FzIG5vdCBw cmVzZW50IHdoZW4gdGhlIGVudHJ5cG9pbnQKKyAgICAgd2FzIGluaXRpYWxseSB3cml0dGVuLiAg Ki8KKyAgZ2NjOjpqaXQ6OnJlY29yZGluZzo6Z2xvYmFsICpnYmwgPQorICAgIHJlaW50ZXJwcmV0 X2Nhc3Q8Z2NjOjpqaXQ6OnJlY29yZGluZzo6Z2xvYmFsICo+IChnbG9iYWwpOworICBSRVRVUk5f TlVMTF9JRl9GQUlMX1BSSU5URjEgKCFnYmwtPnRlc3RfZmxhZ3NfYW55b2YgKAorCQkJCSAgZ2Nj OjpqaXQ6OkdMT0JBTF9WQVJfRkxBR1NfV0lMTF9CRV9SVkFMX0lOSVQpLAorCQkJICAgICAgIE5V TEwsIE5VTEwsCisJCQkgICAgICAgImdsb2JhbCB2YXJpYWJsZSBhbHJlYWR5IGluaXRpYWxpemVk OiAlcyIsCisJCQkgICAgICAgZ2xvYmFsLT5nZXRfZGVidWdfc3RyaW5nICgpKTsKKworICBnYmwt PnNldF9pbml0aWFsaXplciAoYmxvYiwgbnVtX2J5dGVzKTsKKyAgLyogVGhlIGdsb2JhbCBuZWVk IHRvIGtub3cgZHVyaW5nIHBsYXliYWNrIHRoYXQgaXQgd2lsbCBiZQorICAgICBpbml0aWFsaXpl ZC4gICovCisgIGdibC0+c2V0X2ZsYWdzIChnY2M6OmppdDo6R0xPQkFMX1ZBUl9GTEFHU19XSUxM X0JFX0JMT0JfSU5JVCk7CiAKICAgcmV0dXJuIGdsb2JhbDsKIH0KZGlmZiAtLWdpdCBhL2djYy9q aXQvbGliZ2Njaml0LmggYi9nY2Mvaml0L2xpYmdjY2ppdC5oCmluZGV4IGExYzk0MzZjNTQ1Li45 NjdkODg0M2E5OCAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9saWJnY2NqaXQuaAorKysgYi9nY2Mvaml0 L2xpYmdjY2ppdC5oCkBAIC04MTIsNiArODEyLDE1OSBAQCBnY2Nfaml0X2NvbnRleHRfbmV3X2ds b2JhbCAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LAogCQkJICAgIGdjY19qaXRfdHlwZSAqdHlwZSwK IAkJCSAgICBjb25zdCBjaGFyICpuYW1lKTsKIAorI2RlZmluZSBMSUJHQ0NKSVRfSEFWRV9DVE9S UworCisvKiBDcmVhdGUgYSBjb25zdHJ1Y3RvciBmb3IgYW4gc3RydWN0IGFzIGEgcnZhbHVlLgor CisgICBSZXR1cm5zIE5VTEwgb24gZXJyb3IuICBUaGUgdHdvIHBhcmFtZXRlciBhcnJheXMgYXJl IGNvcGllZCBhbmQKKyAgIGRvIG5vdCBoYXZlIHRvIG91dGxpdmUgdGhlIGNvbnRleHQuCisKKyAg IGB0eXBlYCBzcGVjaWZpZXMgd2hhdCB0aGUgY29uc3RydWN0b3Igd2lsbCBidWlsZCBhbmQgaGFz IHRvIGJlCisgICBhIHN0cnVjdC4KKworICAgYGFycl9sZW5ndGhgIHNwZWNpZmllcyB0aGUgbnVt YmVyIG9mIGVsZW1lbnRzIGluIGB2YWx1ZXNgLgorCisgICBgZmllbGRzYCBuZWVkIHRvIGhhdmUg dGhlIHNhbWUgbGVuZ3RoIGFzIGB2YWx1ZXNgLCBvciBiZSBOVUxMLgorCisgICBJZiBgZmllbGRz YCBpcyBudWxsLCB0aGUgdmFsdWVzIGFyZSBhcHBsaWVkIGluIGRlZmluaXRpb24gb3JkZXIuCisK KyAgIE90aGVyd2lzZSwgZWFjaCBmaWVsZCBpbiBgZmllbGRzYCBzcGVjaWZpZXMgd2hpY2ggZmll bGQgaW4gdGhlIHN0cnVjdCB0bworICAgc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIGlu IGB2YWx1ZXNgLiAgYGZpZWxkc2AgYW5kIGB2YWx1ZXNgCisgICBhcmUgcGFpcmVkIGJ5IGluZGV4 LgorCisgICBFYWNoIHZhbHVlIGhhcyB0byBoYXZlIGhhdmUgdGhlIHNhbWUgdW5xdWFsaWZpZWQg dHlwZSBhcyB0aGUgZmllbGQKKyAgIGl0IGlzIGFwcGxpZWQgdG8uCisKKyAgIEEgTlVMTCB2YWx1 ZSBlbGVtZW50ICBpbiBgdmFsdWVzYCBpcyBhIHNob3J0aGFuZCBmb3IgemVybyBpbml0aWFsaXph dGlvbgorICAgb2YgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQuCisKKyAgIFRoZSBmaWVsZHMgaW4g YGZpZWxkc2AgaGF2ZSB0byBiZSBpbiBkZWZpbml0aW9uIG9yZGVyLCBidXQgdGhlcmUKKyAgIGNh biBiZSBnYXBzLiAgQW55IGZpZWxkIGluIHRoZSBzdHJ1Y3QgdGhhdCBpcyBub3Qgc3BlY2lmaWVk IGluCisgICBgZmllbGRzYCB3aWxsIGJlIHplcm9lZC4KKworICAgVGhlIGZpZWxkcyBpbiBgZmll bGRzYCBuZWVkIHRvIGJlIHRoZSBzYW1lIG9iamVjdHMgdGhhdCB3ZXJlIHVzZWQKKyAgIHRvIGNy ZWF0ZSB0aGUgc3RydWN0LgorCisgICBJZiBgYXJyX2xlbmd0aGAgaXMgMCwgdGhlIGFycmF5IHBh cmFtZXRlcnMgd2lsbCBiZQorICAgaWdub3JlZCBhbmQgemVybyBpbml0aWFsaXphdGlvbiB3aWxs IGJlIHVzZWQuCisKKyAgIFRoZSBjb25zdHJ1Y3RvciBydmFsdWUgY2FuIGJlIHVzZWQgZm9yIGFz c2lnbm1lbnQgdG8gbG9jYWxzLgorICAgSXQgY2FuIGJlIHVzZWQgdG8gaW5pdGlhbGl6ZSBnbG9i YWwgdmFyaWFibGVzIHdpdGgKKyAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFs dWUuICBJdCBjYW4gYWxzbyBiZSB1c2VkIGFzIGEKKyAgIHRlbXBvcmFyeSB2YWx1ZSBmb3IgZnVu Y3Rpb24gY2FsbHMgYW5kIHJldHVybiB2YWx1ZXMuCisKKyAgIFRoZSBjb25zdHJ1Y3RvciBjYW4g Y29udGFpbiBuZXN0ZWQgY29uc3RydWN0b3JzLgorCisgICBUaGlzIGVudHJ5cG9pbnQgd2FzIGFk ZGVkIGluIExJQkdDQ0pJVF9BQklfMTc7IHlvdSBjYW4gdGVzdCBmb3IgaXRzCisgICBwcmVzZW5z ZSB1c2luZzoKKyAgICNpZmRlZiBMSUJHQ0NKSVRfSEFWRV9DVE9SUworKi8KKworZXh0ZXJuIGdj Y19qaXRfcnZhbHVlICoKK2djY19qaXRfY29udGV4dF9uZXdfc3RydWN0X2NvbnN0cnVjdG9yIChn Y2Nfaml0X2NvbnRleHQgKmN0eHQsCisJCQkJCWdjY19qaXRfbG9jYXRpb24gKmxvYywKKwkJCQkJ Z2NjX2ppdF90eXBlICp0eXBlLAorCQkJCQlzaXplX3QgYXJyX2xlbmd0aCwKKwkJCQkJZ2NjX2pp dF9maWVsZCAqKmZpZWxkcywKKwkJCQkJZ2NjX2ppdF9ydmFsdWUgKip2YWx1ZXMpOworCisvKiBD cmVhdGUgYSBjb25zdHJ1Y3RvciBmb3IgYW4gdW5pb24gYXMgYSBydmFsdWUuCisKKyAgIFJldHVy bnMgTlVMTCBvbiBlcnJvci4KKworICAgYHR5cGVgIHNwZWNpZmllcyB3aGF0IHRoZSBjb25zdHJ1 Y3RvciB3aWxsIGJ1aWxkIGFuZCBoYXMgdG8gYmUKKyAgIGFuIHVuaW9uLgorCisgICBgZmllbGRg IHNwZWNpZmllcyB3aGljaCBmaWVsZCB0byBzZXQuICBJZiBpdCBpcyBOVUxMLCB0aGUgZmlyc3QK KyAgIGZpZWxkIGluIHRoZSB1bmlvbiB3aWxsIGJlIHNldC4gIGBmaWVsZGAgbmVlZCB0byBiZSB0 aGUgc2FtZQorICAgb2JqZWN0IHRoYXQgd2VyZSB1c2VkIHRvIGNyZWF0ZSB0aGUgdW5pb24uCisK KyAgIGB2YWx1ZWAgc3BlY2lmaWVzIHdoYXQgdmFsdWUgdG8gc2V0IHRoZSBjb3JyZXNwb25kaW5n IGZpZWxkIHRvLgorICAgSWYgYHZhbHVlYCBpcyBOVUxMLCB6ZXJvIGluaXRpYWxpemF0aW9uIHdp bGwgYmUgdXNlZC4KKworICAgRWFjaCB2YWx1ZSBoYXMgdG8gaGF2ZSBoYXZlIHRoZSBzYW1lIHVu cXVhbGlmaWVkIHR5cGUgYXMgdGhlIGZpZWxkCisgICBpdCBpcyBhcHBsaWVkIHRvLgorCisgICBg ZmllbGRgIG5lZWQgdG8gYmUgdGhlIHNhbWUgb2JqZWN0cyB0aGF0IHdlcmUgdXNlZAorICAgdG8g Y3JlYXRlIHRoZSB1bmlvbi4KKworICAgVGhlIGNvbnN0cnVjdG9yIHJ2YWx1ZSBjYW4gYmUgdXNl ZCBmb3IgYXNzaWdubWVudCB0byBsb2NhbHMuCisgICBJdCBjYW4gYmUgdXNlZCB0byBpbml0aWFs aXplIGdsb2JhbCB2YXJpYWJsZXMgd2l0aAorICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxp emVyX3J2YWx1ZS4gIEl0IGNhbiBhbHNvIGJlIHVzZWQgYXMgYQorICAgdGVtcG9yYXJ5IHZhbHVl IGZvciBmdW5jdGlvbiBjYWxscyBhbmQgcmV0dXJuIHZhbHVlcy4KKworICAgVGhlIGNvbnN0cnVj dG9yIGNhbiBjb250YWluIG5lc3RlZCBjb25zdHJ1Y3RvcnMuCisKKyAgIFRoaXMgZW50cnlwb2lu dCB3YXMgYWRkZWQgaW4gTElCR0NDSklUX0FCSV8xNzsgeW91IGNhbiB0ZXN0IGZvciBpdHMKKyAg IHByZXNlbnNlIHVzaW5nOgorICAgI2lmZGVmIExJQkdDQ0pJVF9IQVZFX0NUT1JTCisqLworCitl eHRlcm4gZ2NjX2ppdF9ydmFsdWUgKgorZ2NjX2ppdF9jb250ZXh0X25ld191bmlvbl9jb25zdHJ1 Y3RvciAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LAorCQkJCSAgICAgICBnY2Nfaml0X2xvY2F0aW9u ICpsb2MsCisJCQkJICAgICAgIGdjY19qaXRfdHlwZSAqdHlwZSwKKwkJCQkgICAgICAgZ2NjX2pp dF9maWVsZCAqZmllbGQsCisJCQkJICAgICAgIGdjY19qaXRfcnZhbHVlICp2YWx1ZSk7CisKKy8q IENyZWF0ZSBhIGNvbnN0cnVjdG9yIGZvciBhbiBhcnJheSBhcyBhIHJ2YWx1ZS4KKworICAgUmV0 dXJucyBOVUxMIG9uIGVycm9yLiAgYHZhbHVlc2AgYXJlIGNvcGllZCBhbmQKKyAgIGRvIG5vdCBo YXZlIHRvIG91dGxpdmUgdGhlIGNvbnRleHQuCisKKyAgIGB0eXBlYCBzcGVjaWZpZXMgd2hhdCB0 aGUgY29uc3RydWN0b3Igd2lsbCBidWlsZCBhbmQgaGFzIHRvIGJlCisgICBhbiBhcnJheS4KKwor ICAgYGFycl9sZW5ndGhgIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGB2YWx1 ZXNgIGFuZAorICAgaXQgY2FuJ3QgaGF2ZSBtb3JlIGVsZW1lbnRzIHRoYW4gdGhlIGFycmF5IHR5 cGUuCisKKyAgIEVhY2ggdmFsdWUgaW4gYHZhbHVlc2Agc2V0cyB0aGUgY29ycmVzcG9uZGluZyB2 YWx1ZSBpbiB0aGUgYXJyYXkuCisgICBJZiB0aGUgYXJyYXkgdHlwZSBpdHNlbGYgaGFzIG1vcmUg ZWxlbWVudHMgdGhhbiBgdmFsdWVzYCwgdGhlCisgICBsZWZ0LW92ZXIgZWxlbWVudHMgd2lsbCBi ZSB6ZXJvZWQuCisKKyAgIEVhY2ggdmFsdWUgaW4gYHZhbHVlc2AgbmVlZCB0byBiZSB0aGUgc2Ft ZSB1bnF1YWxpZmllZCB0eXBlIGFzIHRoZQorICAgYXJyYXkgdHlwZSdzIGVsZW1lbnQgdHlwZS4K KworICAgSWYgYGFycl9sZW5ndGhgIGlzIDAsIHRoZSBgdmFsdWVzYCBwYXJhbWV0ZXIgd2lsbCBi ZQorICAgaWdub3JlZCBhbmQgemVybyBpbml0aWFsaXphdGlvbiB3aWxsIGJlIHVzZWQuCisKKyAg IE5vdGUgdGhhdCBhIHN0cmluZyBsaXRlcmFsIHJ2YWx1ZSBjYW4ndCBiZSB1c2VkIHRvIGNvbnN0 cnVjdCBhIGNoYXIKKyAgIGFycmF5LiAgSXQgbmVlZHMgb25lIHJ2YWx1ZSBmb3IgZWFjaCBjaGFy LgorCisgICBUaGlzIGVudHJ5cG9pbnQgd2FzIGFkZGVkIGluIExJQkdDQ0pJVF9BQklfMTc7IHlv dSBjYW4gdGVzdCBmb3IgaXRzCisgICBwcmVzZW5zZSB1c2luZzoKKyAgICNpZmRlZiBMSUJHQ0NK SVRfSEFWRV9DVE9SUworKi8KKworZXh0ZXJuIGdjY19qaXRfcnZhbHVlICoKK2djY19qaXRfY29u dGV4dF9uZXdfYXJyYXlfY29uc3RydWN0b3IgKGdjY19qaXRfY29udGV4dCAqY3R4dCwKKwkJCQkg ICAgICAgZ2NjX2ppdF9sb2NhdGlvbiAqbG9jLAorCQkJCSAgICAgICBnY2Nfaml0X3R5cGUgKnR5 cGUsCisJCQkJICAgICAgIHNpemVfdCBhcnJfbGVuZ3RoLAorCQkJCSAgICAgICBnY2Nfaml0X3J2 YWx1ZSAqKnZhbHVlcyk7CisKKy8qIFNldCB0aGUgaW5pdGlhbCB2YWx1ZSBvZiBhIGdsb2JhbCBv ZiBhbnkgdHlwZSB3aXRoIGFuIHJ2YWx1ZS4KKworICAgVGhlIHJ2YWx1ZSBuZWVkIHRvIGJlIGEg Y29uc3RhbnQgZXhwcmVzc2lvbiwgZS5nLiBubyBmdW5jdGlvbiBjYWxscy4KKworICAgVGhlIGds b2JhbCBjYW4ndCBoYXZlIHRoZSAna2luZCcgR0NDX0pJVF9HTE9CQUxfSU1QT1JURUQuCisKKyAg IFVzZSB0b2dldGhlciB3aXRoIGdjY19qaXRfY29udGV4dF9uZXdfY29uc3RydWN0b3IgKCkgdG8K KyAgIGluaXRpYWxpemUgc3RydWN0cywgdW5pb25zIGFuZCBhcnJheXMuCisKKyAgIE9uIHN1Y2Nl c3MsIHJldHVybnMgdGhlICdnbG9iYWwnIHBhcmFtZXRlciB1bmNoYW5nZWQuICBPdGhlcndpc2Us IE5VTEwuCisKKyAgICd2YWx1ZXMnIGlzIGNvcGllZCBhbmQgZG9lcyBub3QgaGF2ZSB0byBvdXRs aXZlIHRoZSBjb250ZXh0LgorCisgICBUaGlzIGVudHJ5cG9pbnQgd2FzIGFkZGVkIGluIExJQkdD Q0pJVF9BQklfMTc7IHlvdSBjYW4gdGVzdCBmb3IgaXRzCisgICBwcmVzZW5jZSB1c2luZzoKKyAg ICAgI2lmZGVmIExJQkdDQ0pJVF9IQVZFX0NUT1JTCisqLworCitleHRlcm4gZ2NjX2ppdF9sdmFs dWUgKgorZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoZ2NjX2ppdF9sdmFs dWUgKmdsb2JhbCwKKwkJCQkgICAgICAgZ2NjX2ppdF9ydmFsdWUgKmluaXRfdmFsdWUpOworCiAj ZGVmaW5lIExJQkdDQ0pJVF9IQVZFX2djY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcgogCiAv KiBTZXQgYW4gaW5pdGlhbCB2YWx1ZSBmb3IgYSBnbG9iYWwsIHdoaWNoIG11c3QgYmUgYW4gYXJy YXkgb2YKZGlmZiAtLWdpdCBhL2djYy9qaXQvbGliZ2Njaml0Lm1hcCBiL2djYy9qaXQvbGliZ2Nj aml0Lm1hcAppbmRleCA2NGU3OTA5NDllOC4uMTIzY2E3Zjg5NTQgMTAwNjQ0Ci0tLSBhL2djYy9q aXQvbGliZ2Njaml0Lm1hcAorKysgYi9nY2Mvaml0L2xpYmdjY2ppdC5tYXAKQEAgLTIyNiwzICsy MjYsMTEgQEAgTElCR0NDSklUX0FCSV8xNiB7CiAgICAgZ2NjX2ppdF90eXBlX2lzX3N0cnVjdDsK ICAgICBnY2Nfaml0X3N0cnVjdF9nZXRfZmllbGRfY291bnQ7CiB9IExJQkdDQ0pJVF9BQklfMTU7 CisKK0xJQkdDQ0pJVF9BQklfMTcgeworICBnbG9iYWw6CisgICAgZ2NjX2ppdF9jb250ZXh0X25l d19hcnJheV9jb25zdHJ1Y3RvcjsKKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3N0cnVjdF9jb25z dHJ1Y3RvcjsKKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3VuaW9uX2NvbnN0cnVjdG9yOworICAg IGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWU7Cit9IExJQkdDQ0pJVF9BQklf MTY7CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy9hbGwtbm9uLWZhaWxpbmctdGVz dHMuaCBiL2djYy90ZXN0c3VpdGUvaml0LmRnL2FsbC1ub24tZmFpbGluZy10ZXN0cy5oCmluZGV4 IGE3ZmRkZjk2ZGI4Li4wYWM5MmI2ZTI2YSAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9qaXQu ZGcvYWxsLW5vbi1mYWlsaW5nLXRlc3RzLmgKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvYWxs LW5vbi1mYWlsaW5nLXRlc3RzLmgKQEAgLTE4MSw2ICsxODEsMTMgQEAKICN1bmRlZiBjcmVhdGVf Y29kZQogI3VuZGVmIHZlcmlmeV9jb2RlCiAKKy8qIHRlc3QtZ2xvYmFsLWluaXQtcnZhbHVlLmMg Ki8KKyNkZWZpbmUgY3JlYXRlX2NvZGUgY3JlYXRlX2NvZGVfZ2xvYmFsX2luaXRfcnZhbHVlCisj ZGVmaW5lIHZlcmlmeV9jb2RlIHZlcmlmeV9jb2RlX2dsb2JhbF9pbml0X3J2YWx1ZQorI2luY2x1 ZGUgInRlc3QtZ2xvYmFsLWluaXQtcnZhbHVlLmMiCisjdW5kZWYgY3JlYXRlX2NvZGUKKyN1bmRl ZiB2ZXJpZnlfY29kZQorCiAvKiB0ZXN0LWdsb2JhbC1zZXQtaW5pdGlhbGl6ZXIuYyAqLwogI2Rl ZmluZSBjcmVhdGVfY29kZSBjcmVhdGVfY29kZV9nbG9iYWxfc2V0X2luaXRpYWxpemVyCiAjZGVm aW5lIHZlcmlmeV9jb2RlIHZlcmlmeV9jb2RlX2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXIKQEAgLTIw Miw2ICsyMDksMTMgQEAKICN1bmRlZiBjcmVhdGVfY29kZQogI3VuZGVmIHZlcmlmeV9jb2RlCiAK Ky8qIHRlc3QtbG9jYWwtaW5pdC1ydmFsdWUuYyAqLworI2RlZmluZSBjcmVhdGVfY29kZSBjcmVh dGVfY29kZV9sb2NhbF9pbml0X3J2YWx1ZQorI2RlZmluZSB2ZXJpZnlfY29kZSB2ZXJpZnlfY29k ZV9sb2NhbF9pbml0X3J2YWx1ZQorI2luY2x1ZGUgInRlc3QtbG9jYWwtaW5pdC1ydmFsdWUuYyIK KyN1bmRlZiBjcmVhdGVfY29kZQorI3VuZGVmIHZlcmlmeV9jb2RlCisKIC8qIHRlc3QtbG9uZy1u YW1lcy5jICovCiAjZGVmaW5lIGNyZWF0ZV9jb2RlIGNyZWF0ZV9jb2RlX2xvbmdfbmFtZXMKICNk ZWZpbmUgdmVyaWZ5X2NvZGUgdmVyaWZ5X2NvZGVfbG9uZ19uYW1lcwpAQCAtNDA4LDEyICs0MjIs MTggQEAgY29uc3Qgc3RydWN0IHRlc3RjYXNlIHRlc3RjYXNlc1tdID0gewogICB7ImZ1bmN0aW9u cyIsCiAgICBjcmVhdGVfY29kZV9mdW5jdGlvbnMsCiAgICB2ZXJpZnlfY29kZV9mdW5jdGlvbnN9 LAorICB7Imdsb2JhbF9ydmFsdWVfaW5pdCIsCisgICBjcmVhdGVfY29kZV9nbG9iYWxfaW5pdF9y dmFsdWUsCisgICB2ZXJpZnlfY29kZV9nbG9iYWxfaW5pdF9ydmFsdWV9LAogICB7ImhlbGxvX3dv cmxkIiwKICAgIGNyZWF0ZV9jb2RlX2hlbGxvX3dvcmxkLAogICAgdmVyaWZ5X2NvZGVfaGVsbG9f d29ybGR9LAogICB7ImxpbmtlZF9saXN0IiwKICAgIGNyZWF0ZV9jb2RlX2xpbmtlZF9saXN0LAog ICAgdmVyaWZ5X2NvZGVfbGlua2VkX2xpc3R9LAorICB7ImxvY2FsX3J2YWx1ZV9pbml0IiwKKyAg IGNyZWF0ZV9jb2RlX2xvY2FsX2luaXRfcnZhbHVlLAorICAgdmVyaWZ5X2NvZGVfbG9jYWxfaW5p dF9ydmFsdWV9LAogICB7ImxvbmdfbmFtZXMiLAogICAgY3JlYXRlX2NvZGVfbG9uZ19uYW1lcywK ICAgIHZlcmlmeV9jb2RlX2xvbmdfbmFtZXN9LApkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9q aXQuZGcvdGVzdC1lcnJvci1jdG9yLWFycmF5LXdyb25nLXR5cGUuYyBiL2djYy90ZXN0c3VpdGUv aml0LmRnL3Rlc3QtZXJyb3ItY3Rvci1hcnJheS13cm9uZy10eXBlLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjFjZTgzYjJlZDZjCi0tLSAvZGV2L251bGwKKysrIGIv Z2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1jdG9yLWFycmF5LXdyb25nLXR5cGUuYwpA QCAtMCwwICsxLDU0IEBACisvKgorCisgIFRlc3QgdGhhdCB0aGUgcHJvcGVyIGVycm9yIGlzIHRy aWdnZXJlZCB3aGVuIHdlIGJ1aWxkIGEgY3RvcgorICBmb3IgYW4gYXJyYXkgdHlwZSwgYnV0IGhh cyB0aGUgdHlwZSB3cm9uZyBvbiBhbiBlbGVtZW50LgorCisqLworCisjaW5jbHVkZSA8c3RkbGli Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImxpYmdjY2ppdC5oIgorI2luY2x1 ZGUgImhhcm5lc3MuaCIKKwordm9pZAorY3JlYXRlX2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4 dCwgdm9pZCAqdXNlcl9kYXRhKQoreworICBnY2Nfaml0X3R5cGUgKmludF90eXBlID0gZ2NjX2pp dF9jb250ZXh0X2dldF90eXBlIChjdHh0LAorICAgIEdDQ19KSVRfVFlQRV9JTlQpOworICBnY2Nf aml0X3R5cGUgKmZsb2F0X3R5cGUgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsCisg ICAgR0NDX0pJVF9UWVBFX0ZMT0FUKTsKKworICBnY2Nfaml0X3R5cGUgKmFycl90eXBlID0KKyAg ICBnY2Nfaml0X2NvbnRleHRfbmV3X2FycmF5X3R5cGUgKGN0eHQsIDAsIGludF90eXBlLCAxMCk7 CisKKyAgZ2NjX2ppdF9ydmFsdWUgKmZydiA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zy b21fZG91YmxlIChjdHh0LAorCQkJCQkJCQlmbG9hdF90eXBlLAorCQkJCQkJCQkxMik7CisKKyAg Z2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2FycmF5X2NvbnN0cnVj dG9yCisgICAgKGN0eHQsIDAsCisgICAgIGFycl90eXBlLAorICAgICAxLAorICAgICAmZnJ2KTsK KworICBDSEVDS19WQUxVRSAoY3RvciwgTlVMTCk7Cit9CisKK3ZvaWQKK3ZlcmlmeV9jb2RlIChn Y2Nfaml0X2NvbnRleHQgKmN0eHQsIGdjY19qaXRfcmVzdWx0ICpyZXN1bHQpCit7CisgIC8qIEVu c3VyZSB0aGF0IHRoZSBiYWQgQVBJIHVzYWdlIHByZXZlbnRzIHRoZSBBUEkgZ2l2aW5nIGEgYm9n dXMKKyAgICAgcmVzdWx0IGJhY2suICAqLworICBDSEVDS19WQUxVRSAocmVzdWx0LCBOVUxMKTsK KworICAvKiBWZXJpZnkgdGhhdCB0aGUgY29ycmVjdCBlcnJvciBtZXNzYWdlIHdhcyBlbWl0dGVk LiAqLworICBDSEVDS19TVFJJTkdfVkFMVUUgKGdjY19qaXRfY29udGV4dF9nZXRfZmlyc3RfZXJy b3IgKGN0eHQpLAorCQkgICAgICAiZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV9jb25zdHJ1Y3Rv cjogYXJyYXkgZWxlbWVudCAiCisJCSAgICAgICJ2YWx1ZSB0eXBlcyBkaWZmZXIgZnJvbSB0eXBl cyBpbiAndmFsdWVzJyAoZWxlbWVudCAiCisJCSAgICAgICJ0eXBlOiBpbnQpKCd2YWx1ZXMnIHR5 cGU6IGZsb2F0KSIpOworICBDSEVDS19TVFJJTkdfVkFMVUUgKGdjY19qaXRfY29udGV4dF9nZXRf Zmlyc3RfZXJyb3IgKGN0eHQpLAorCQkgICAgICAiZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV9j b25zdHJ1Y3RvcjogYXJyYXkgZWxlbWVudCAiCisJCSAgICAgICJ2YWx1ZSB0eXBlcyBkaWZmZXIg ZnJvbSB0eXBlcyBpbiAndmFsdWVzJyAoZWxlbWVudCAiCisJCSAgICAgICJ0eXBlOiBpbnQpKCd2 YWx1ZXMnIHR5cGU6IGZsb2F0KSIpOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9qaXQu ZGcvdGVzdC1lcnJvci1jdG9yLXN0cnVjdC10b28tYmlnLmMgYi9nY2MvdGVzdHN1aXRlL2ppdC5k Zy90ZXN0LWVycm9yLWN0b3Itc3RydWN0LXRvby1iaWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uNmJjMjA0NTljZDUKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVz dHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWN0b3Itc3RydWN0LXRvby1iaWcuYwpAQCAtMCwwICsx LDcxIEBACisvKgorCisgIFRlc3QgdGhhdCB0aGUgcHJvcGVyIGVycm9yIGlzIHRyaWdnZXJlZCB3 aGVuIHdlIGJ1aWxkIGEgY3RvcgorICBmb3IgYW4gc3RydWN0IHR5cGUsIGJ1dCBoYXZlIHRvbyBt YW55IGZpZWxkcyBhbmQgdmFsdWVzLgorCisqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5j bHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImxpYmdjY2ppdC5oIgorI2luY2x1ZGUgImhhcm5l c3MuaCIKKwordm9pZAorY3JlYXRlX2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgdm9pZCAq dXNlcl9kYXRhKQoreworICBnY2Nfaml0X3R5cGUgKmludF90eXBlID0gZ2NjX2ppdF9jb250ZXh0 X2dldF90eXBlIChjdHh0LAorICAgIEdDQ19KSVRfVFlQRV9JTlQpOworCisgIGdjY19qaXRfZmll bGQgKmIxID0gZ2NjX2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAwLAorCQkJ CQkJIGludF90eXBlLAorCQkJCQkJICJhIik7CisgIGdjY19qaXRfZmllbGQgKmIyID0gZ2NjX2pp dF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAwLAorCQkJCQkJIGludF90eXBlLAor CQkJCQkJICJiIik7CisgIGdjY19qaXRfZmllbGQgKmIzID0gZ2NjX2ppdF9jb250ZXh0X25ld19m aWVsZCAoY3R4dCwKKwkJCQkJCSAwLAorCQkJCQkJIGludF90eXBlLAorCQkJCQkJICJjIik7Cisg IGdjY19qaXRfZmllbGQgKmZpZWxkc19iW10gPSB7YjEsIGIyLCBiM307CisKKyAgZ2NjX2ppdF90 eXBlICpzdHJ1Y3RfYmFyX3R5cGUgPQorICAgIGdjY19qaXRfc3RydWN0X2FzX3R5cGUgKAorICAg ICAgZ2NjX2ppdF9jb250ZXh0X25ld19zdHJ1Y3RfdHlwZSAoY3R4dCwKKwkJCQkgICAgICAgMCwK KwkJCQkgICAgICAgImJhciIsCisJCQkJICAgICAgIDMsCisJCQkJICAgICAgIGZpZWxkc19iKSk7 CisKKyAgZ2NjX2ppdF9maWVsZCAqZmllbGRzX2N0b3JbXSA9IHtiMSwgYjIsIGIzLCBiM307Cisg IGdjY19qaXRfcnZhbHVlICp2YWx1ZXNbXSA9IHswLDAsMCwwfTsKKworICBnY2Nfaml0X3J2YWx1 ZSAqY3RvciA9IGdjY19qaXRfY29udGV4dF9uZXdfc3RydWN0X2NvbnN0cnVjdG9yCisgICAgKGN0 eHQsIDAsCisgICAgIHN0cnVjdF9iYXJfdHlwZSwKKyAgICAgNCwKKyAgICAgZmllbGRzX2N0b3Is CisgICAgIHZhbHVlcyk7CisKKyAgQ0hFQ0tfVkFMVUUgKGN0b3IsIE5VTEwpOworfQorCit2b2lk Cit2ZXJpZnlfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCBnY2Nfaml0X3Jlc3VsdCAqcmVz dWx0KQoreworICAvKiBFbnN1cmUgdGhhdCB0aGUgYmFkIEFQSSB1c2FnZSBwcmV2ZW50cyB0aGUg QVBJIGdpdmluZyBhIGJvZ3VzCisgICAgIHJlc3VsdCBiYWNrLiAgKi8KKyAgQ0hFQ0tfVkFMVUUg KHJlc3VsdCwgTlVMTCk7CisKKyAgLyogVmVyaWZ5IHRoYXQgdGhlIGNvcnJlY3QgZXJyb3IgbWVz c2FnZSB3YXMgZW1pdHRlZC4gKi8KKyAgQ0hFQ0tfU1RSSU5HX1ZBTFVFIChnY2Nfaml0X2NvbnRl eHRfZ2V0X2ZpcnN0X2Vycm9yIChjdHh0KSwKKwkJICAgICAgImdjY19qaXRfY29udGV4dF9uZXdf c3RydWN0X2NvbnN0cnVjdG9yOiBtb3JlIHZhbHVlcyBpbiAiCisJCSAgICAgICJjb25zdHJ1Y3Rv ciAobj00KSB0aGFuIGZpZWxkcyBpbiB0YXJnZXQgc3RydWN0ICIKKwkJICAgICAgImJhciAobj0z KSIpOworICBDSEVDS19TVFJJTkdfVkFMVUUgKGdjY19qaXRfY29udGV4dF9nZXRfbGFzdF9lcnJv ciAoY3R4dCksCisJCSAgICAgICJnY2Nfaml0X2NvbnRleHRfbmV3X3N0cnVjdF9jb25zdHJ1Y3Rv cjogbW9yZSB2YWx1ZXMgaW4gIgorCQkgICAgICAiY29uc3RydWN0b3IgKG49NCkgdGhhbiBmaWVs ZHMgaW4gdGFyZ2V0IHN0cnVjdCAiCisJCSAgICAgICJiYXIgKG49MykiKTsKK30KZGlmZiAtLWdp dCBhL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItY3Rvci1zdHJ1Y3Qtd3JvbmctZmll bGQtb2JqLmMgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWN0b3Itc3RydWN0LXdy b25nLWZpZWxkLW9iai5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5i YzE5MWUxNGQwNwotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3Qt ZXJyb3ItY3Rvci1zdHJ1Y3Qtd3JvbmctZmllbGQtb2JqLmMKQEAgLTAsMCArMSw4NiBAQAorLyoK KworICBUZXN0IHRoYXQgdGhlIHByb3BlciBlcnJvciBpcyB0cmlnZ2VyZWQgd2hlbiB3ZSBidWls ZCBhIGN0b3IKKyAgZm9yIGFuIHN0cnVjdCB0eXBlLCBidXQgdHJ5IHRvIHVzZSBhIGZpZWxkIG9i amVjdCB0aGF0IHdhcyBub3QKKyAgdXNlZCB0byBjcmVhdGUgdGhlIHN0cnVjdCB0eXBlLgorCisq LworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUg ImxpYmdjY2ppdC5oIgorI2luY2x1ZGUgImhhcm5lc3MuaCIKKwordm9pZAorY3JlYXRlX2NvZGUg KGdjY19qaXRfY29udGV4dCAqY3R4dCwgdm9pZCAqdXNlcl9kYXRhKQoreworICBnY2Nfaml0X3R5 cGUgKmludF90eXBlID0gZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LAorICAgIEdDQ19K SVRfVFlQRV9JTlQpOworCisgIGdjY19qaXRfZmllbGQgKmIxID0gZ2NjX2ppdF9jb250ZXh0X25l d19maWVsZCAoY3R4dCwKKwkJCQkJCSAwLAorCQkJCQkJIGludF90eXBlLAorCQkJCQkJICJhIik7 CisgIGdjY19qaXRfZmllbGQgKmIyID0gZ2NjX2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwK KwkJCQkJCSAwLAorCQkJCQkJIGludF90eXBlLAorCQkJCQkJICJiIik7CisgIGdjY19qaXRfZmll bGQgKmIzID0gZ2NjX2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAwLAorCQkJ CQkJIGludF90eXBlLAorCQkJCQkJICJjIik7CisgIGdjY19qaXRfZmllbGQgKmI0ID0gZ2NjX2pp dF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAwLAorCQkJCQkJIGludF90eXBlLAor CQkJCQkJICJkIik7CisgIGdjY19qaXRfZmllbGQgKmI1ID0gZ2NjX2ppdF9jb250ZXh0X25ld19m aWVsZCAoY3R4dCwKKwkJCQkJCSAwLAorCQkJCQkJIGludF90eXBlLAorCQkJCQkJICJkIik7Cisg IGdjY19qaXRfZmllbGQgKmZpZWxkc19iW10gPSB7YjEsIGIyLCBiMywgYjQsIGI1fTsKKworICBn Y2Nfaml0X3R5cGUgKnN0cnVjdF9iYXJfdHlwZSA9CisgICAgZ2NjX2ppdF9zdHJ1Y3RfYXNfdHlw ZSAoCisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3N0cnVjdF90eXBlIChjdHh0LAorCQkJCSAg ICAgICAwLAorCQkJCSAgICAgICAiYmFyIiwKKwkJCQkgICAgICAgNSwKKwkJCQkgICAgICAgZmll bGRzX2IpKTsKKworCisgIGdjY19qaXRfZmllbGQgKmI0NCA9IGdjY19qaXRfY29udGV4dF9uZXdf ZmllbGQgKGN0eHQsCisJCQkJCQkgIDAsCisJCQkJCQkgIGludF90eXBlLAorCQkJCQkJICAiYyIp OworCisgIGdjY19qaXRfZmllbGQgKmZpZWxkc19jdG9yW10gPSB7YjEsIGIyLCBiNDQsIGI1fTsK KyAgZ2NjX2ppdF9ydmFsdWUgKnZhbHVlc1tdID0gezAsMCwwLDB9OworCisgIGdjY19qaXRfcnZh bHVlICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0X25ld19zdHJ1Y3RfY29uc3RydWN0b3IKKyAgICAo Y3R4dCwgMCwKKyAgICAgc3RydWN0X2Jhcl90eXBlLAorICAgICA0LAorICAgICBmaWVsZHNfY3Rv ciwKKyAgICAgdmFsdWVzKTsKKworICBDSEVDS19WQUxVRSAoY3RvciwgTlVMTCk7Cit9CisKK3Zv aWQKK3ZlcmlmeV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIGdjY19qaXRfcmVzdWx0ICpy ZXN1bHQpCit7CisgIC8qIEVuc3VyZSB0aGF0IHRoZSBiYWQgQVBJIHVzYWdlIHByZXZlbnRzIHRo ZSBBUEkgZ2l2aW5nIGEgYm9ndXMKKyAgICAgcmVzdWx0IGJhY2suICAqLworICBDSEVDS19WQUxV RSAocmVzdWx0LCBOVUxMKTsKKworICAvKiBWZXJpZnkgdGhhdCB0aGUgY29ycmVjdCBlcnJvciBt ZXNzYWdlIHdhcyBlbWl0dGVkLiAqLworICBDSEVDS19TVFJJTkdfVkFMVUUgKGdjY19qaXRfY29u dGV4dF9nZXRfZmlyc3RfZXJyb3IgKGN0eHQpLAorCQkgICAgICAiZ2NjX2ppdF9jb250ZXh0X25l d19zdHJ1Y3RfY29uc3RydWN0b3I6IGZpZWxkIG9iamVjdCAiCisJCSAgICAgICJhdCBpbmRleCAy IChjKSwgd2FzIG5vdCB1c2VkIHdoZW4gY3JlYXRpbmcgdGhlICIKKwkJICAgICAgInN0cnVjdCBi YXIiKTsKKyAgQ0hFQ0tfU1RSSU5HX1ZBTFVFIChnY2Nfaml0X2NvbnRleHRfZ2V0X2xhc3RfZXJy b3IgKGN0eHQpLAorCQkgICAgICAiZ2NjX2ppdF9jb250ZXh0X25ld19zdHJ1Y3RfY29uc3RydWN0 b3I6IGZpZWxkIG9iamVjdCAiCisJCSAgICAgICJhdCBpbmRleCAyIChjKSwgd2FzIG5vdCB1c2Vk IHdoZW4gY3JlYXRpbmcgdGhlICIKKwkJICAgICAgInN0cnVjdCBiYXIiKTsKK30KZGlmZiAtLWdp dCBhL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItY3Rvci1zdHJ1Y3Qtd3JvbmctdHlw ZS5jIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1jdG9yLXN0cnVjdC13cm9uZy10 eXBlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjM2NDYxMGJkMjFm Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1jdG9y LXN0cnVjdC13cm9uZy10eXBlLmMKQEAgLTAsMCArMSw3NiBAQAorLyoKKworICBUZXN0IHRoYXQg dGhlIHByb3BlciBlcnJvciBpcyB0cmlnZ2VyZWQgd2hlbiB3ZSBidWlsZCBhIGN0b3IKKyAgZm9y IGFuIHN0cnVjdCB0eXBlLCBidXQgaGFzIHRoZSB0eXBlIHdyb25nIG9uIGEgZmllbGQuCisKKyov CisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAi bGliZ2Njaml0LmgiCisjaW5jbHVkZSAiaGFybmVzcy5oIgorCit2b2lkCitjcmVhdGVfY29kZSAo Z2NjX2ppdF9jb250ZXh0ICpjdHh0LCB2b2lkICp1c2VyX2RhdGEpCit7CisgIGdjY19qaXRfdHlw ZSAqaW50X3R5cGUgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsCisgICAgR0NDX0pJ VF9UWVBFX0lOVCk7CisgIGdjY19qaXRfdHlwZSAqZmxvYXRfdHlwZSA9IGdjY19qaXRfY29udGV4 dF9nZXRfdHlwZSAoY3R4dCwKKyAgICBHQ0NfSklUX1RZUEVfRkxPQVQpOworCisgIGdjY19qaXRf ZmllbGQgKmIxID0gZ2NjX2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAwLAor CQkJCQkJIGludF90eXBlLAorCQkJCQkJICJhIik7CisgIGdjY19qaXRfZmllbGQgKmIyID0gZ2Nj X2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAwLAorCQkJCQkJIGludF90eXBl LAorCQkJCQkJICJiIik7CisgIGdjY19qaXRfZmllbGQgKmIzID0gZ2NjX2ppdF9jb250ZXh0X25l d19maWVsZCAoY3R4dCwKKwkJCQkJCSAwLAorCQkJCQkJIGludF90eXBlLAorCQkJCQkJICJjIik7 CisgIGdjY19qaXRfZmllbGQgKmZpZWxkc19iW10gPSB7YjEsIGIyLCBiM307CisKKyAgZ2NjX2pp dF90eXBlICpzdHJ1Y3RfYmFyX3R5cGUgPQorICAgIGdjY19qaXRfc3RydWN0X2FzX3R5cGUgKAor ICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19zdHJ1Y3RfdHlwZSAoY3R4dCwKKwkJCQkgICAgICAg MCwKKwkJCQkgICAgICAgImJhciIsCisJCQkJICAgICAgIDMsCisJCQkJICAgICAgIGZpZWxkc19i KSk7CisgIGdjY19qaXRfcnZhbHVlICpmcnYgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9m cm9tX2RvdWJsZSAoY3R4dCwKKwkJCQkJCQkJZmxvYXRfdHlwZSwKKwkJCQkJCQkJMTIpOworCisg IGdjY19qaXRfZmllbGQgKmZpZWxkc19jdG9yW10gPSB7YjJ9OworICBnY2Nfaml0X3J2YWx1ZSAq dmFsdWVzW10gPSB7ZnJ2fTsKKworICBnY2Nfaml0X3J2YWx1ZSAqY3RvciA9IGdjY19qaXRfY29u dGV4dF9uZXdfc3RydWN0X2NvbnN0cnVjdG9yCisgICAgKGN0eHQsIDAsCisgICAgIHN0cnVjdF9i YXJfdHlwZSwKKyAgICAgMSwKKyAgICAgZmllbGRzX2N0b3IsCisgICAgIHZhbHVlcyk7CisKKyAg Q0hFQ0tfVkFMVUUgKGN0b3IsIE5VTEwpOworfQorCit2b2lkCit2ZXJpZnlfY29kZSAoZ2NjX2pp dF9jb250ZXh0ICpjdHh0LCBnY2Nfaml0X3Jlc3VsdCAqcmVzdWx0KQoreworICAvKiBFbnN1cmUg dGhhdCB0aGUgYmFkIEFQSSB1c2FnZSBwcmV2ZW50cyB0aGUgQVBJIGdpdmluZyBhIGJvZ3VzCisg ICAgIHJlc3VsdCBiYWNrLiAgKi8KKyAgQ0hFQ0tfVkFMVUUgKHJlc3VsdCwgTlVMTCk7CisKKyAg LyogVmVyaWZ5IHRoYXQgdGhlIGNvcnJlY3QgZXJyb3IgbWVzc2FnZSB3YXMgZW1pdHRlZC4gKi8K KyAgQ0hFQ0tfU1RSSU5HX1ZBTFVFIChnY2Nfaml0X2NvbnRleHRfZ2V0X2ZpcnN0X2Vycm9yIChj dHh0KSwKKwkJICAgICAgImdjY19qaXRfY29udGV4dF9uZXdfc3RydWN0X2NvbnN0cnVjdG9yOiB2 YWx1ZSBhbmQgIgorCQkgICAgICAiZmllbGQgbm90IHRoZSBzYW1lIHVucXVhbGlmaWVkIHR5cGUs IGF0IGluZGV4IDAgIgorCQkgICAgICAiKHN0cnVjdCBiYXIuYjogaW50KSh2YWx1ZSB0eXBlOiBm bG9hdCkiKTsKKyAgQ0hFQ0tfU1RSSU5HX1ZBTFVFIChnY2Nfaml0X2NvbnRleHRfZ2V0X2xhc3Rf ZXJyb3IgKGN0eHQpLAorCQkgICAgICAiZ2NjX2ppdF9jb250ZXh0X25ld19zdHJ1Y3RfY29uc3Ry dWN0b3I6IHZhbHVlIGFuZCAiCisJCSAgICAgICJmaWVsZCBub3QgdGhlIHNhbWUgdW5xdWFsaWZp ZWQgdHlwZSwgYXQgaW5kZXggMCAiCisJCSAgICAgICIoc3RydWN0IGJhci5iOiBpbnQpKHZhbHVl IHR5cGU6IGZsb2F0KSIpOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVz dC1lcnJvci1jdG9yLXN0cnVjdC13cm9uZy10eXBlMi5jIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcv dGVzdC1lcnJvci1jdG9yLXN0cnVjdC13cm9uZy10eXBlMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi5jMjMwOWRlODdkZgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90 ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItY3Rvci1zdHJ1Y3Qtd3JvbmctdHlwZTIuYwpAQCAt MCwwICsxLDc3IEBACisvKgorCisgIFRlc3QgdGhhdCB0aGUgcHJvcGVyIGVycm9yIGlzIHRyaWdn ZXJlZCB3aGVuIHdlIGJ1aWxkIGEgY3RvcgorICBmb3IgYW4gc3RydWN0IHR5cGUsIGJ1dCBoYXMg dGhlIHR5cGUgd3Jvbmcgb24gYSBmaWVsZC4KKworICBMaWtlIHRlc3QtZXJyb3ItY3Rvci1zdHJ1 Y3Qtd3JvbmctdHlwZS5jLCBidXQgd2l0aCBpbXBsaWNpdCBmaWVsZHMuCisKKyovCisKKyNpbmNs dWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAibGliZ2Njaml0 LmgiCisjaW5jbHVkZSAiaGFybmVzcy5oIgorCit2b2lkCitjcmVhdGVfY29kZSAoZ2NjX2ppdF9j b250ZXh0ICpjdHh0LCB2b2lkICp1c2VyX2RhdGEpCit7CisgIGdjY19qaXRfdHlwZSAqaW50X3R5 cGUgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsCisgICAgR0NDX0pJVF9UWVBFX0lO VCk7CisgIGdjY19qaXRfdHlwZSAqZmxvYXRfdHlwZSA9IGdjY19qaXRfY29udGV4dF9nZXRfdHlw ZSAoY3R4dCwKKyAgICBHQ0NfSklUX1RZUEVfRkxPQVQpOworCisgIGdjY19qaXRfZmllbGQgKmIx ID0gZ2NjX2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAwLAorCQkJCQkJIGlu dF90eXBlLAorCQkJCQkJICJhIik7CisgIGdjY19qaXRfZmllbGQgKmIyID0gZ2NjX2ppdF9jb250 ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAwLAorCQkJCQkJIGludF90eXBlLAorCQkJCQkJ ICJiIik7CisgIGdjY19qaXRfZmllbGQgKmIzID0gZ2NjX2ppdF9jb250ZXh0X25ld19maWVsZCAo Y3R4dCwKKwkJCQkJCSAwLAorCQkJCQkJIGludF90eXBlLAorCQkJCQkJICJjIik7CisgIGdjY19q aXRfZmllbGQgKmZpZWxkc19iW10gPSB7YjEsIGIyLCBiM307CisKKyAgZ2NjX2ppdF90eXBlICpz dHJ1Y3RfYmFyX3R5cGUgPQorICAgIGdjY19qaXRfc3RydWN0X2FzX3R5cGUgKAorICAgICAgZ2Nj X2ppdF9jb250ZXh0X25ld19zdHJ1Y3RfdHlwZSAoY3R4dCwKKwkJCQkgICAgICAgMCwKKwkJCQkg ICAgICAgImJhciIsCisJCQkJICAgICAgIDMsCisJCQkJICAgICAgIGZpZWxkc19iKSk7CisgIGdj Y19qaXRfcnZhbHVlICpmcnYgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2RvdWJs ZSAoY3R4dCwKKwkJCQkJCQkJZmxvYXRfdHlwZSwKKwkJCQkJCQkJMTIpOworCisgIGdjY19qaXRf cnZhbHVlICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0X25ld19zdHJ1Y3RfY29uc3RydWN0b3IKKyAg ICAoY3R4dCwgMCwKKyAgICAgc3RydWN0X2Jhcl90eXBlLAorICAgICAxLAorICAgICAwLAorICAg ICAmZnJ2KTsKKworICBDSEVDS19WQUxVRSAoY3RvciwgTlVMTCk7Cit9CisKK3ZvaWQKK3Zlcmlm eV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIGdjY19qaXRfcmVzdWx0ICpyZXN1bHQpCit7 CisgIC8qIEVuc3VyZSB0aGF0IHRoZSBiYWQgQVBJIHVzYWdlIHByZXZlbnRzIHRoZSBBUEkgZ2l2 aW5nIGEgYm9ndXMKKyAgICAgcmVzdWx0IGJhY2suICAqLworICBDSEVDS19WQUxVRSAocmVzdWx0 LCBOVUxMKTsKKworICAvKiBWZXJpZnkgdGhhdCB0aGUgY29ycmVjdCBlcnJvciBtZXNzYWdlIHdh cyBlbWl0dGVkLiAqLworICBDSEVDS19TVFJJTkdfVkFMVUUgKGdjY19qaXRfY29udGV4dF9nZXRf Zmlyc3RfZXJyb3IgKGN0eHQpLAorCQkgICAgICAiZ2NjX2ppdF9jb250ZXh0X25ld19zdHJ1Y3Rf Y29uc3RydWN0b3I6IHZhbHVlIGFuZCAiCisJCSAgICAgICJmaWVsZCBub3QgIgorCQkgICAgICAi dGhlIHNhbWUgdW5xdWFsaWZpZWQgdHlwZSwgIgorCQkgICAgICAiYXQgaW5kZXggMCAoc3RydWN0 IGJhci5hOiBpbnQpKHZhbHVlIHR5cGU6IGZsb2F0KSIpOworICBDSEVDS19TVFJJTkdfVkFMVUUg KGdjY19qaXRfY29udGV4dF9nZXRfbGFzdF9lcnJvciAoY3R4dCksCisJCSAgICAgICJnY2Nfaml0 X2NvbnRleHRfbmV3X3N0cnVjdF9jb25zdHJ1Y3RvcjogdmFsdWUgYW5kICIKKwkJICAgICAgImZp ZWxkIG5vdCAiCisJCSAgICAgICJ0aGUgc2FtZSB1bnF1YWxpZmllZCB0eXBlLCAiCisJCSAgICAg ICJhdCBpbmRleCAwIChzdHJ1Y3QgYmFyLmE6IGludCkodmFsdWUgdHlwZTogZmxvYXQpIik7Cit9 CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWN0b3ItdW5pb24t d3JvbmctZmllbGQtbmFtZS5jIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1jdG9y LXVuaW9uLXdyb25nLWZpZWxkLW5hbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uMmJmOGVlNDAyM2UKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2pp dC5kZy90ZXN0LWVycm9yLWN0b3ItdW5pb24td3JvbmctZmllbGQtbmFtZS5jCkBAIC0wLDAgKzEs NzYgQEAKKy8qCisKKyAgVGVzdCB0aGF0IHRoZSBwcm9wZXIgZXJyb3IgaXMgdHJpZ2dlcmVkIHdo ZW4gd2UgYnVpbGQgYSBjdG9yCisgIGZvciBhbiB1bmlvbiB0eXBlLCBidXQgZG9uJ3QgcHJvdmlk ZSBhIGNvcnJlY3QgZmllbGQuCisKKyovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRl IDxzdGRpby5oPgorCisjaW5jbHVkZSAibGliZ2Njaml0LmgiCisjaW5jbHVkZSAiaGFybmVzcy5o IgorCit2b2lkCitjcmVhdGVfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCB2b2lkICp1c2Vy X2RhdGEpCit7CisgIGdjY19qaXRfdHlwZSAqaW50X3R5cGUgPSBnY2Nfaml0X2NvbnRleHRfZ2V0 X3R5cGUgKGN0eHQsCisgICAgR0NDX0pJVF9UWVBFX0lOVCk7CisgIGdjY19qaXRfdHlwZSAqZmxv YXRfdHlwZSA9IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwKKyAgICBHQ0NfSklUX1RZ UEVfRkxPQVQpOworICBnY2Nfaml0X3R5cGUgKmRvdWJsZV90eXBlID0gZ2NjX2ppdF9jb250ZXh0 X2dldF90eXBlIChjdHh0LAorICAgIEdDQ19KSVRfVFlQRV9ET1VCTEUpOworCisgIGdjY19qaXRf ZmllbGQgKmIxID0gZ2NjX2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAwLAor CQkJCQkJIGludF90eXBlLAorCQkJCQkJICJhIik7CisgIGdjY19qaXRfZmllbGQgKmIyID0gZ2Nj X2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAwLAorCQkJCQkJIGZsb2F0X3R5 cGUsCisJCQkJCQkgImIiKTsKKyAgZ2NjX2ppdF9maWVsZCAqYjMgPSBnY2Nfaml0X2NvbnRleHRf bmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJIDAsCisJCQkJCQkgZG91YmxlX3R5cGUsCisJCQkJCQkg ImMiKTsKKyAgZ2NjX2ppdF9maWVsZCAqZmllbGRzX2JbXSA9IHtiMSwgYjIsIGIzfTsKKworICBn Y2Nfaml0X3R5cGUgKnVuaW9uX2Jhcl90eXBlID0KKyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdf dW5pb25fdHlwZSAoY3R4dCwKKwkJCQkgICAgICAwLAorCQkJCSAgICAgICJiYXIiLAorCQkJCSAg ICAgIDMsCisJCQkJICAgICAgZmllbGRzX2IpOworCisgIGdjY19qaXRfZmllbGQgKmIzMyA9IGdj Y19qaXRfY29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJCQkgIDAsCisJCQkJCQkgIGRvdWJs ZV90eXBlLAorCQkJCQkJICAiYyIpOworCisgIGdjY19qaXRfcnZhbHVlICp2YWwgPQorICAgIGdj Y19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fZG91YmxlIChjdHh0LCBkb3VibGVfdHlwZSwg MSk7CisKKyAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3VuaW9u X2NvbnN0cnVjdG9yCisgICAgKGN0eHQsIDAsCisgICAgIHVuaW9uX2Jhcl90eXBlLAorICAgICBi MzMsCisgICAgIHZhbCk7CisKKyAgQ0hFQ0tfVkFMVUUgKGN0b3IsIE5VTEwpOworfQorCit2b2lk Cit2ZXJpZnlfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCBnY2Nfaml0X3Jlc3VsdCAqcmVz dWx0KQoreworICAvKiBFbnN1cmUgdGhhdCB0aGUgYmFkIEFQSSB1c2FnZSBwcmV2ZW50cyB0aGUg QVBJIGdpdmluZyBhIGJvZ3VzCisgICAgIHJlc3VsdCBiYWNrLiAgKi8KKyAgQ0hFQ0tfVkFMVUUg KHJlc3VsdCwgTlVMTCk7CisKKyAgLyogVmVyaWZ5IHRoYXQgdGhlIGNvcnJlY3QgZXJyb3IgbWVz c2FnZSB3YXMgZW1pdHRlZC4gKi8KKyAgQ0hFQ0tfU1RSSU5HX1ZBTFVFIChnY2Nfaml0X2NvbnRl eHRfZ2V0X2ZpcnN0X2Vycm9yIChjdHh0KSwKKwkJICAgICAgImdjY19qaXRfY29udGV4dF9uZXdf dW5pb25fY29uc3RydWN0b3I6IGZpZWxkIG9iamVjdCAoYykiCisJCSAgICAgICIgd2FzIG5vdCB1 c2VkIHdoZW4gY3JlYXRpbmcgdGhlIHR5cGUgdW5pb24gYmFyIik7CisgIENIRUNLX1NUUklOR19W QUxVRSAoZ2NjX2ppdF9jb250ZXh0X2dldF9sYXN0X2Vycm9yIChjdHh0KSwKKwkJICAgICAgImdj Y19qaXRfY29udGV4dF9uZXdfdW5pb25fY29uc3RydWN0b3I6IGZpZWxkIG9iamVjdCAoYykiCisJ CSAgICAgICIgd2FzIG5vdCB1c2VkIHdoZW4gY3JlYXRpbmcgdGhlIHR5cGUgdW5pb24gYmFyIik7 Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWdsb2JhbC1h bHJlYWR5LWluaXQuYyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItZ2xvYmFsLWFs cmVhZHktaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lY2Vh ZDg3ZmMxNQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJy b3ItZ2xvYmFsLWFscmVhZHktaW5pdC5jCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisKKyAgVGVzdCB0 aGF0IHdlIGNhbid0IHNldCB0aGUgaW5pdGlhbGl6ZXIgb24gYSBnbG9iYWwgdHdpY2UuCisKKyov CisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAi bGliZ2Njaml0LmgiCisjaW5jbHVkZSAiaGFybmVzcy5oIgorCit2b2lkCitjcmVhdGVfY29kZSAo Z2NjX2ppdF9jb250ZXh0ICpjdHh0LCB2b2lkICp1c2VyX2RhdGEpCit7CisgIGdjY19qaXRfdHlw ZSAqaW50X3R5cGUgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsIEdDQ19KSVRfVFlQ RV9JTlQpOworCisgIGdjY19qaXRfbHZhbHVlICpiYXIgPSAgZ2NjX2ppdF9jb250ZXh0X25ld19n bG9iYWwgKAorICAgIGN0eHQsIE5VTEwsCisgICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisg ICAgaW50X3R5cGUsCisgICAgImdsb2JhbF9sdmFsdWVpbml0X2ludF8wIik7CisKKyAgZ2NjX2pp dF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoCisgICAgYmFyLAorICAgIGdjY19qaXRf Y29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50IChjdHh0LCBpbnRfdHlwZSwgMSkpOworICBnY2Nf aml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlICgKKyAgICBiYXIsCisgICAgZ2NjX2pp dF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKGN0eHQsIGludF90eXBlLCAxKSk7Cit9CisK K3ZvaWQKK3ZlcmlmeV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIGdjY19qaXRfcmVzdWx0 ICpyZXN1bHQpCit7CisgIC8qIEVuc3VyZSB0aGF0IHRoZSBiYWQgQVBJIHVzYWdlIHByZXZlbnRz IHRoZSBBUEkgZ2l2aW5nIGEgYm9ndXMKKyAgICAgcmVzdWx0IGJhY2suICAqLworICBDSEVDS19W QUxVRSAocmVzdWx0LCBOVUxMKTsKKworICAvKiBWZXJpZnkgdGhhdCB0aGUgY29ycmVjdCBlcnJv ciBtZXNzYWdlIHdhcyBlbWl0dGVkLiAqLworICBDSEVDS19TVFJJTkdfVkFMVUUgKGdjY19qaXRf Y29udGV4dF9nZXRfZmlyc3RfZXJyb3IgKGN0eHQpLAorCQkgICAgICAiZ2NjX2ppdF9nbG9iYWxf c2V0X2luaXRpYWxpemVyX3J2YWx1ZTogZ2xvYmFsIHZhcmlhYmxlICIKKwkJICAgICAgImFscmVh ZHkgaW5pdGlhbGl6ZWQ6IGdsb2JhbF9sdmFsdWVpbml0X2ludF8wIik7CisgIENIRUNLX1NUUklO R19WQUxVRSAoZ2NjX2ppdF9jb250ZXh0X2dldF9sYXN0X2Vycm9yIChjdHh0KSwKKwkJICAgICAg ImdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWU6IGdsb2JhbCB2YXJpYWJsZSAi CisJCSAgICAgICJhbHJlYWR5IGluaXRpYWxpemVkOiBnbG9iYWxfbHZhbHVlaW5pdF9pbnRfMCIp OworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1nbG9iYWwt Y29tbW9uLXNlY3Rpb24uYyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItZ2xvYmFs LWNvbW1vbi1zZWN0aW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LjJmOTk0NTQ1MTY1Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVz dC1lcnJvci1nbG9iYWwtY29tbW9uLXNlY3Rpb24uYwpAQCAtMCwwICsxLDU0IEBACisvKgorCisg IFRlc3QgdGhhdCB0aGUgcHJvcGVyIGVycm9yIGlzIHRyaWdnZXJlZCB3aGVuIHdlIGluaXRpYWxp emUKKyAgYSBnbG9iYWwgd2l0aCBhIGdsb2JhbCB0aGF0IGhhcyBubyBERUNMX0lOSVRJQUwgKGFu ZCBpcyBtYXJrZWQKKyAgREVDTF9DT01NT04oTk9ERSkgPSAxKS4KKworKi8KKworI2luY2x1ZGUg PHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJsaWJnY2NqaXQuaCIK KyNpbmNsdWRlICJoYXJuZXNzLmgiCisKK3ZvaWQKK2NyZWF0ZV9jb2RlIChnY2Nfaml0X2NvbnRl eHQgKmN0eHQsIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgZ2NjX2ppdF90eXBlICppbnRfdHlwZSA9 IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwKKyAgICBHQ0NfSklUX1RZUEVfSU5UKTsK KworICAvKiBjb25zdCBpbnQgZm9vOworICAgICBpbnQgYmFyID0gZm9vOworICAgKi8KKyAgZ2Nj X2ppdF9sdmFsdWUgKmZvbyA9ICBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgY3R4 dCwgTlVMTCwKKyAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICBnY2Nfaml0X3R5cGVf Z2V0X2NvbnN0IChpbnRfdHlwZSksCisgICAgImdsb2JhbF9jb25zdF9pbnRfMCIpOworICBnY2Nf aml0X2x2YWx1ZSAqYmFyID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICBjdHh0 LCBOVUxMLAorICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgIGludF90eXBlLAorICAg ICJnbG9iYWxfbHZhbHVlaW5pdF9pbnRfMCIpOworICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlh bGl6ZXJfcnZhbHVlIChiYXIsCisJCQkJCSBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUgKGZvbykp OworfQorCit2b2lkCit2ZXJpZnlfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCBnY2Nfaml0 X3Jlc3VsdCAqcmVzdWx0KQoreworICAvKiBFbnN1cmUgdGhhdCB0aGUgYmFkIEFQSSB1c2FnZSBw cmV2ZW50cyB0aGUgQVBJIGdpdmluZyBhIGJvZ3VzCisgICAgIHJlc3VsdCBiYWNrLiAgKi8KKyAg Q0hFQ0tfVkFMVUUgKHJlc3VsdCwgTlVMTCk7CisKKyAgLyogVmVyaWZ5IHRoYXQgdGhlIGNvcnJl Y3QgZXJyb3IgbWVzc2FnZSB3YXMgZW1pdHRlZC4gKi8KKyAgQ0hFQ0tfU1RSSU5HX1ZBTFVFIChn Y2Nfaml0X2NvbnRleHRfZ2V0X2ZpcnN0X2Vycm9yIChjdHh0KSwKKwkJICAgICAgInVuYWJsZSB0 byBjb252ZXJ0IGluaXRpYWwgdmFsdWUgZm9yIHRoZSBnbG9iYWwgIgorCQkgICAgICAidmFyaWFi bGUgZ2xvYmFsX2x2YWx1ZWluaXRfaW50XzAgdG8gYSBjb21waWxlLXRpbWUiCisJCSAgICAgICIg Y29uc3RhbnQiKTsKKyAgQ0hFQ0tfU1RSSU5HX1ZBTFVFIChnY2Nfaml0X2NvbnRleHRfZ2V0X2xh c3RfZXJyb3IgKGN0eHQpLAorCQkgICAgICAidW5hYmxlIHRvIGNvbnZlcnQgaW5pdGlhbCB2YWx1 ZSBmb3IgdGhlIGdsb2JhbCAiCisJCSAgICAgICJ2YXJpYWJsZSBnbG9iYWxfbHZhbHVlaW5pdF9p bnRfMCB0byBhIGNvbXBpbGUtdGltZSIKKwkJICAgICAgIiBjb25zdGFudCIpOworfQpkaWZmIC0t Z2l0IGEvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1nbG9iYWwtaW5pdC10b28tc21h bGwtYXJyYXkuYyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItZ2xvYmFsLWluaXQt dG9vLXNtYWxsLWFycmF5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu Ljk5NmQ5NTgzODYwCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVz dC1lcnJvci1nbG9iYWwtaW5pdC10b28tc21hbGwtYXJyYXkuYwpAQCAtMCwwICsxLDY1IEBACisv KgorCisgIFRlc3QgdGhhdCB0aGUgcHJvcGVyIGVycm9yIGlzIHRyaWdnZXJlZCB3aGVuIHdlIGlu aXRpYWxpemUKKyAgYSBnbG9iYWwgd2l0aCBhbm90aGVyIG5vbi1jb25zdCBnbG9iYWwncyBydmFs dWUuCisKKyAgVXNpbmcgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSgpCisK KyovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVk ZSAibGliZ2Njaml0LmgiCisjaW5jbHVkZSAiaGFybmVzcy5oIgorCit2b2lkCitjcmVhdGVfY29k ZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCB2b2lkICp1c2VyX2RhdGEpCit7IC8qIGZsb2F0IGZv b1sxXSA9IHsxLDJ9OyAqLworCisgIGdjY19qaXRfdHlwZSAqZmxvYXRfdHlwZSA9IGdjY19qaXRf Y29udGV4dF9nZXRfdHlwZSAoY3R4dCwKKyAgICBHQ0NfSklUX1RZUEVfRkxPQVQpOworICBnY2Nf aml0X3R5cGUgKmFycl90eXBlID0gZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV90eXBlIChjdHh0 LAorCQkJCQkJCSAgIDAsCisJCQkJCQkJICAgZmxvYXRfdHlwZSwKKwkJCQkJCQkgICAxKTsKKyAg Z2NjX2ppdF9ydmFsdWUgKnJ2YWxfMSA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21f aW50ICgKKyAgICBjdHh0LCBmbG9hdF90eXBlLCAxKTsKKyAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxf MiA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICBjdHh0LCBmbG9h dF90eXBlLCAyKTsKKworICBnY2Nfaml0X3J2YWx1ZSAqdmFsdWVzW10gPSB7cnZhbF8xLCBydmFs XzJ9OworCisgIGdjY19qaXRfcnZhbHVlICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0X25ld19hcnJh eV9jb25zdHJ1Y3RvciAoY3R4dCwKKwkJCQkJCQkJMCwKKwkJCQkJCQkJYXJyX3R5cGUsCisJCQkJ CQkJCTIsCisJCQkJCQkJCXZhbHVlcyk7CisgIGlmICghY3RvcikKKyAgICByZXR1cm47CisKKyAg Z2NjX2ppdF9sdmFsdWUgKmZvbyA9ICBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAg Y3R4dCwgTlVMTCwKKyAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICBhcnJfdHlwZSwK KyAgICAiZ2xvYmFsX2Zsb2F0YXJyXzEyIik7CisgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFs aXplcl9ydmFsdWUgKGZvbywgY3Rvcik7Cit9CisKK3ZvaWQKK3ZlcmlmeV9jb2RlIChnY2Nfaml0 X2NvbnRleHQgKmN0eHQsIGdjY19qaXRfcmVzdWx0ICpyZXN1bHQpCit7CisgIC8qIEVuc3VyZSB0 aGF0IHRoZSBiYWQgQVBJIHVzYWdlIHByZXZlbnRzIHRoZSBBUEkgZ2l2aW5nIGEgYm9ndXMKKyAg ICAgcmVzdWx0IGJhY2suICAqLworICBDSEVDS19WQUxVRSAocmVzdWx0LCBOVUxMKTsKKworICAv KiBWZXJpZnkgdGhhdCB0aGUgY29ycmVjdCBlcnJvciBtZXNzYWdlIHdhcyBlbWl0dGVkLiAqLwor ICBDSEVDS19TVFJJTkdfVkFMVUUgKGdjY19qaXRfY29udGV4dF9nZXRfZmlyc3RfZXJyb3IgKGN0 eHQpLAorCQkgICAgICAiZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV9jb25zdHJ1Y3RvcjogYXJy YXkgIgorCQkgICAgICAiY29uc3RydWN0b3IgaGFzIG1vcmUgdmFsdWVzIHRoYW4gdGhlIGFycmF5 IHR5cGUncyAiCisJCSAgICAgICJsZW5ndGggKGFycmF5IHR5cGUgbGVuZ3RoOiAxLCBjb25zdHJ1 Y3RvciBsZW5ndGg6IDIpIik7CisgIENIRUNLX1NUUklOR19WQUxVRSAoZ2NjX2ppdF9jb250ZXh0 X2dldF9sYXN0X2Vycm9yIChjdHh0KSwKKwkJICAgICAgImdjY19qaXRfY29udGV4dF9uZXdfYXJy YXlfY29uc3RydWN0b3I6IGFycmF5ICIKKwkJICAgICAgImNvbnN0cnVjdG9yIGhhcyBtb3JlIHZh bHVlcyB0aGFuIHRoZSBhcnJheSB0eXBlJ3MgIgorCQkgICAgICAibGVuZ3RoIChhcnJheSB0eXBl IGxlbmd0aDogMSwgY29uc3RydWN0b3IgbGVuZ3RoOiAyKSIpOworfQpkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1nbG9iYWwtbHZhbHVlLWluaXQuYyBiL2djYy90 ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItZ2xvYmFsLWx2YWx1ZS1pbml0LmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjY1YWE4YTgwYjQ5Ci0tLSAvZGV2L251bGwK KysrIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1nbG9iYWwtbHZhbHVlLWluaXQu YwpAQCAtMCwwICsxLDYwIEBACisvKgorCisgIFRlc3QgdGhhdCB0aGUgcHJvcGVyIGVycm9yIGlz IHRyaWdnZXJlZCB3aGVuIHdlIGluaXRpYWxpemUKKyAgYSBnbG9iYWwgd2l0aCBhbm90aGVyIG5v bi1jb25zdCBnbG9iYWwncyBydmFsdWUuCisKKyAgVXNpbmcgZ2NjX2ppdF9nbG9iYWxfc2V0X2lu aXRpYWxpemVyX3J2YWx1ZSgpCisKKyovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRl IDxzdGRpby5oPgorCisjaW5jbHVkZSAibGliZ2Njaml0LmgiCisjaW5jbHVkZSAiaGFybmVzcy5o IgorCit2b2lkCitjcmVhdGVfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCB2b2lkICp1c2Vy X2RhdGEpCit7CisgIGdjY19qaXRfdHlwZSAqaW50X3R5cGUgPSBnY2Nfaml0X2NvbnRleHRfZ2V0 X3R5cGUgKGN0eHQsCisgICAgR0NDX0pJVF9UWVBFX0lOVCk7CisKKyAgZ2NjX2ppdF9sdmFsdWUg KmZvbzsKKyAgeyAvKiBpbnQgYmFyOyAqLworICAgIGZvbyA9ICBnY2Nfaml0X2NvbnRleHRfbmV3 X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JU RUQsCisgICAgICBpbnRfdHlwZSwKKyAgICAgICJnbG9iYWxfbHZhbHVlaW5pdF9pbnQxIik7Cisg ICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWwgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9t X2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwgMyk7CisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0 X2luaXRpYWxpemVyX3J2YWx1ZSAoZm9vLAorICAgICAgcnZhbCk7CisgIH0KKyAgeyAvKiBpbnQg Zm9vID0gYmFyOyAqLworCisgICAgZ2NjX2ppdF9sdmFsdWUgKmJhciA9ICBnY2Nfaml0X2NvbnRl eHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxf RVhQT1JURUQsCisgICAgICBpbnRfdHlwZSwKKyAgICAgICJnbG9iYWxfbHZhbHVlaW5pdF9pbnQy Iik7CisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoYmFyLAorCQkJ CQkgICBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUgKGZvbykpOworICB9Cit9CisKK3ZvaWQKK3Zl cmlmeV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIGdjY19qaXRfcmVzdWx0ICpyZXN1bHQp Cit7CisgIC8qIEVuc3VyZSB0aGF0IHRoZSBiYWQgQVBJIHVzYWdlIHByZXZlbnRzIHRoZSBBUEkg Z2l2aW5nIGEgYm9ndXMKKyAgICAgcmVzdWx0IGJhY2suICAqLworICBDSEVDS19WQUxVRSAocmVz dWx0LCBOVUxMKTsKKworICAvKiBWZXJpZnkgdGhhdCB0aGUgY29ycmVjdCBlcnJvciBtZXNzYWdl IHdhcyBlbWl0dGVkLiAqLworICBDSEVDS19TVFJJTkdfVkFMVUUgKGdjY19qaXRfY29udGV4dF9n ZXRfZmlyc3RfZXJyb3IgKGN0eHQpLAorCQkgICAgICAidW5hYmxlIHRvIGNvbnZlcnQgaW5pdGlh bCB2YWx1ZSBmb3IgdGhlIGdsb2JhbCB2YXJpYWJsZSIKKwkJICAgICAgIiBnbG9iYWxfbHZhbHVl aW5pdF9pbnQyIHRvIGEgY29tcGlsZS10aW1lIGNvbnN0YW50Iik7CisgIENIRUNLX1NUUklOR19W QUxVRSAoZ2NjX2ppdF9jb250ZXh0X2dldF9sYXN0X2Vycm9yIChjdHh0KSwKKwkJICAgICAgInVu YWJsZSB0byBjb252ZXJ0IGluaXRpYWwgdmFsdWUgZm9yIHRoZSBnbG9iYWwgdmFyaWFibGUiCisJ CSAgICAgICIgZ2xvYmFsX2x2YWx1ZWluaXRfaW50MiB0byBhIGNvbXBpbGUtdGltZSBjb25zdGFu dCIpOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1nbG9i YWwtbm9uY29uc3QtaW5pdC5jIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1nbG9i YWwtbm9uY29uc3QtaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li45ZGZmZTA2ZWFjMwotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rl c3QtZXJyb3ItZ2xvYmFsLW5vbmNvbnN0LWluaXQuYwpAQCAtMCwwICsxLDgwIEBACisvKgorCisg IFRlc3QgdGhhdCB0aGUgcHJvcGVyIGVycm9yIGlzIHRyaWdnZXJlZCB3aGVuIHdlIGluaXRpYWxp emUKKyAgYSBnbG9iYWwgd2l0aCBhIGZ1bmN0aW9uIGNhbGwuCisKKyAgVXNpbmcgZ2NjX2ppdF9n bG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSgpCisKKyovCisKKyNpbmNsdWRlIDxzdGRsaWIu aD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAibGliZ2Njaml0LmgiCisjaW5jbHVk ZSAiaGFybmVzcy5oIgorCit2b2lkCitjcmVhdGVfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0 LCB2b2lkICp1c2VyX2RhdGEpCit7CisgIGdjY19qaXRfdHlwZSAqaW50X3R5cGUgPSBnY2Nfaml0 X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsCisgICAgR0NDX0pJVF9UWVBFX0lOVCk7CisKKyAgZ2Nj X2ppdF9mdW5jdGlvbiAqZm5faW50XzM7CisgIHsgLyogaW50IGZvbyAoKSB7IGludCBsb2NhbCA9 IDM7IHJldHVybiBsb2NhbDt9ICovCisgICAgZm5faW50XzMgPQorICAgICAgZ2NjX2ppdF9jb250 ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwKKwkJCQkgICAgMCwKKwkJCQkgICAgR0NDX0pJVF9GVU5D VElPTl9FWFBPUlRFRCwKKwkJCQkgICAgaW50X3R5cGUsCisJCQkJICAgICJmbl9pbnRfMyIsCisJ CQkJICAgIDAsCisJCQkJICAgIDAsCisJCQkJICAgIDApOworICAgIGdjY19qaXRfYmxvY2sgKmJs b2NrID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKGZuX2ludF8zLCAic3RhcnQiKTsKKyAg ICBnY2Nfaml0X2x2YWx1ZSAqbG9jYWwgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19sb2NhbCAoZm5f aW50XzMsCisJCQkJCQkJMCwKKwkJCQkJCQlpbnRfdHlwZSwKKwkJCQkJCQkibG9jYWwiKTsKKyAg ICBnY2Nfaml0X3J2YWx1ZSAqcnZhbCA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21f aW50ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCAzKTsKKworICAgIGdjY19qaXRfYmxvY2tfYWRk X2Fzc2lnbm1lbnQgKGJsb2NrLCAwLCBsb2NhbCwgcnZhbCk7CisKKyAgICBnY2Nfaml0X2Jsb2Nr X2VuZF93aXRoX3JldHVybiAoYmxvY2ssCisJCQkJICAgMCwKKwkJCQkgICBnY2Nfaml0X2x2YWx1 ZV9hc19ydmFsdWUobG9jYWwpKTsKKworICB9CisKKyAgeyAvKiBpbnQgYmFyID0gZm9vKCk7ICov CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWwgPQorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19j YWxsIChjdHh0LAorCQkJCTAsCisJCQkJZm5faW50XzMsCisJCQkJMCwwKTsKKworICAgIGdjY19q aXRfbHZhbHVlICpmb28gPSAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4 dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgaW50X3R5cGUs CisgICAgICAiZ2xvYmFsX25vbmNvbnN0X2ludCIpOworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9p bml0aWFsaXplcl9ydmFsdWUgKGZvbywKKyAgICAgIHJ2YWwpOworICB9Cit9CisKK3ZvaWQKK3Zl cmlmeV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIGdjY19qaXRfcmVzdWx0ICpyZXN1bHQp Cit7CisgIC8qIEVuc3VyZSB0aGF0IHRoZSBiYWQgQVBJIHVzYWdlIHByZXZlbnRzIHRoZSBBUEkg Z2l2aW5nIGEgYm9ndXMKKyAgICAgcmVzdWx0IGJhY2suICAqLworICBDSEVDS19WQUxVRSAocmVz dWx0LCBOVUxMKTsKKworICAvKiBWZXJpZnkgdGhhdCB0aGUgY29ycmVjdCBlcnJvciBtZXNzYWdl IHdhcyBlbWl0dGVkLiAqLworICBDSEVDS19TVFJJTkdfVkFMVUUgKGdjY19qaXRfY29udGV4dF9n ZXRfZmlyc3RfZXJyb3IgKGN0eHQpLAorCQkgICAgICAidW5hYmxlIHRvIGNvbnZlcnQgaW5pdGlh bCB2YWx1ZSBmb3IgdGhlIGdsb2JhbCB2YXJpYWJsZSIKKwkJICAgICAgIiBnbG9iYWxfbm9uY29u c3RfaW50IHRvIGEgY29tcGlsZS10aW1lIGNvbnN0YW50Iik7CisgIENIRUNLX1NUUklOR19WQUxV RSAoZ2NjX2ppdF9jb250ZXh0X2dldF9sYXN0X2Vycm9yIChjdHh0KSwKKwkJICAgICAgInVuYWJs ZSB0byBjb252ZXJ0IGluaXRpYWwgdmFsdWUgZm9yIHRoZSBnbG9iYWwgdmFyaWFibGUiCisJCSAg ICAgICIgZ2xvYmFsX25vbmNvbnN0X2ludCB0byBhIGNvbXBpbGUtdGltZSBjb25zdGFudCIpOwor fQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1nbG9iYWwtaW5pdC1ydmFs dWUuYyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZ2xvYmFsLWluaXQtcnZhbHVlLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjIxNjc1YWM5YWNmCi0tLSAvZGV2 L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1nbG9iYWwtaW5pdC1ydmFsdWUu YwpAQCAtMCwwICsxLDE1NjMgQEAKKy8qIFRoaXMgdGVzdGNhc2UgY2hlY2tzIHRoYXQgZ2NjX2pp dF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSgpIHdvcmtzCisgICB3aXRoIHJ2YWx1ZXMs IGVzcGVjaWFsbHkgd2l0aCBnY2Nfaml0X2NvbnRleHRfbmV3XypfY29uc3RydWN0b3IoKSBmb3IK KyAgIHN0cnVjdCwgdW5pb25zIGFuZCBhcnJheXMuICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgor I2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAibGliZ2Njaml0LmgiCisjaW5jbHVkZSAi aGFybmVzcy5oIgorCit2b2lkCitjcmVhdGVfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCB2 b2lkICp1c2VyX2RhdGEpCit7CisgIGdjY19qaXRfdHlwZSAqaW50X3R5cGUgPSBnY2Nfaml0X2Nv bnRleHRfZ2V0X3R5cGUgKGN0eHQsCisgICAgR0NDX0pJVF9UWVBFX0lOVCk7CisgIGdjY19qaXRf dHlwZSAqc2hvcnRfdHlwZSA9IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwKKyAgICBH Q0NfSklUX1RZUEVfU0hPUlQpOworICBnY2Nfaml0X3R5cGUgKnBpbnRfdHlwZSA9IGdjY19qaXRf dHlwZV9nZXRfcG9pbnRlciAoaW50X3R5cGUpOworICBnY2Nfaml0X3R5cGUgKmRvdWJsZV90eXBl ID0gZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LAorICAgIEdDQ19KSVRfVFlQRV9ET1VC TEUpOworICBnY2Nfaml0X3R5cGUgKmZsb2F0X3R5cGUgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5 cGUgKGN0eHQsCisgICAgR0NDX0pJVF9UWVBFX0ZMT0FUKTsKKyAgZ2NjX2ppdF90eXBlICpib29s X3R5cGUgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsCisgICAgR0NDX0pJVF9UWVBF X0JPT0wpOworICBnY2Nfaml0X3R5cGUgKmNoYXJfdHlwZSA9IGdjY19qaXRfY29udGV4dF9nZXRf dHlwZSAoY3R4dCwKKyAgICBHQ0NfSklUX1RZUEVfQ0hBUik7CisgIGdjY19qaXRfdHlwZSAqY3Bj aGFyX3R5cGUgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsCisgICAgR0NDX0pJVF9U WVBFX0NPTlNUX0NIQVJfUFRSKTsKKyAgZ2NjX2ppdF90eXBlICpzaXplX3R5cGUgPSBnY2Nfaml0 X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsCisgICAgR0NDX0pJVF9UWVBFX1NJWkVfVCk7CisKKyAg LyogTWFrZSBhIHN0cnVjdDogc3RydWN0IGZpIHsgZmxvYXQgZjsgaW50IGk7fSAqLworICBnY2Nf aml0X2ZpZWxkICpmaV9mID0gZ2NjX2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJ CSAgIDAsCisJCQkJCQkgICBmbG9hdF90eXBlLAorCQkJCQkJICAgImYiKTsKKyAgZ2NjX2ppdF9m aWVsZCAqZmlfaSA9IGdjY19qaXRfY29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJCQkgICAw LAorCQkJCQkJICAgaW50X3R5cGUsCisJCQkJCQkgICAiaSIpOworICBnY2Nfaml0X2ZpZWxkICpm aWVsZHNbXSA9IHtmaV9mLCBmaV9pfTsKKworICBnY2Nfaml0X3R5cGUgKnN0cnVjdF9maV90eXBl ID0KKyAgICBnY2Nfaml0X3N0cnVjdF9hc190eXBlICgKKyAgICAgIGdjY19qaXRfY29udGV4dF9u ZXdfc3RydWN0X3R5cGUgKGN0eHQsCisJCQkJICAgICAgIDAsCisJCQkJICAgICAgICJmaSIsCisJ CQkJICAgICAgIDIsCisJCQkJICAgICAgIGZpZWxkcykpOworCisgIC8qIE1ha2UgYSBzdHJ1Y3Q6 CisKKyAgICAgc3RydWN0IGJhciB7CisgICAgICAgaW50IGlpOworICAgICAgIHN0cnVjdCBmaSBm aTsKKyAgICAgICBmbG9hdCBmZjsKKyAgICAgfQorICAqLworICBnY2Nfaml0X2ZpZWxkICpiYXJf ZmYgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJICAgICAwLAorCQkJ CQkJICAgICBmbG9hdF90eXBlLAorCQkJCQkJICAgICAiZmYiKTsKKyAgZ2NjX2ppdF9maWVsZCAq YmFyX2lpID0gZ2NjX2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAgICAgMCwK KwkJCQkJCSAgICAgaW50X3R5cGUsCisJCQkJCQkgICAgICJpaSIpOworICBnY2Nfaml0X2ZpZWxk ICpiYXJfZmkgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJICAgICAw LAorCQkJCQkJICAgICBzdHJ1Y3RfZmlfdHlwZSwKKwkJCQkJCSAgICAgImZpIik7CisgIGdjY19q aXRfZmllbGQgKmZpZWxkczJbXSA9IHtiYXJfZmYsIGJhcl9maSwgYmFyX2lpfTsKKworICBnY2Nf aml0X3R5cGUgKnN0cnVjdF9iYXJfdHlwZSA9CisgICAgZ2NjX2ppdF9zdHJ1Y3RfYXNfdHlwZSAo CisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3N0cnVjdF90eXBlIChjdHh0LAorCQkJCSAgICAg ICAwLAorCQkJCSAgICAgICAiYmFyIiwKKwkJCQkgICAgICAgMywKKwkJCQkgICAgICAgZmllbGRz MikpOworCisgIC8qIE1ha2UgYW4gdW5pb246CisKKyAgICAgdW5pb24gdWJhciB7CisgICAgICAg ZmxvYXQgZmY7CisgICAgICAgaW50IGlpOworICAgICB9OworICAqLworICBnY2Nfaml0X2ZpZWxk ICp1YmFyX2ZmID0gZ2NjX2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAgICAg IDAsCisJCQkJCQkgICAgICBmbG9hdF90eXBlLAorCQkJCQkJICAgICAgImZmIik7CisgIGdjY19q aXRfZmllbGQgKnViYXJfaWkgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJ CQkJICAgICAgMCwKKwkJCQkJCSAgICAgIGludF90eXBlLAorCQkJCQkJICAgICAgImlpIik7Cisg IGdjY19qaXRfZmllbGQgKmZpZWxkczNbXSA9IHt1YmFyX2ZmLCB1YmFyX2lpfTsKKworICBnY2Nf aml0X3R5cGUgKnViYXIgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3VuaW9uX3R5cGUgKGN0eHQsCisJ CQkJCQkgICAgICAgMCwKKwkJCQkJCSAgICAgICAidWJhciIsCisJCQkJCQkgICAgICAgMiwKKwkJ CQkJCSAgICAgICBmaWVsZHMzKTsKKworICB7IC8qIHN0cnVjdCBiYXIgYmFyID0gey5mZj0xLCAu Zmk9ey5mPTIsIC5pPTN9LCAuaWk9NH07CisgICAgICAgSS5lLiBuZXN0ZWQgY3RvcnMgYW5kIHdp dGggZmllbGRzIHNwZWNpZmllZAorICAgICAqLworICAgIGdjY19qaXRfbHZhbHVlICpiYXIgPSBn Y2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0ND X0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgICBzdHJ1Y3RfYmFyX3R5cGUsCisgICAgICAiZ2xv YmFsX3N0cnVjdF9iYXJfMTIzNF8xIik7CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqZnZhbCA9IGdj Y19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGZsb2F0X3R5 cGUsIDIpOworICAgIGdjY19qaXRfcnZhbHVlICppdmFsID0gZ2NjX2ppdF9jb250ZXh0X25ld19y dmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDMpOworCisgICAgZ2NjX2pp dF9ydmFsdWUgKnZhbHNbXSA9IHsgZnZhbCwgaXZhbH07CisgICAgZ2NjX2ppdF9maWVsZCAqZmll bGRzW10gPSB7ZmlfZiwgZmlfaX07CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqY3RvciA9IGdjY19q aXRfY29udGV4dF9uZXdfc3RydWN0X2NvbnN0cnVjdG9yCisgICAgICAoY3R4dCwgMCwKKyAgICAg ICBzdHJ1Y3RfZmlfdHlwZSwKKyAgICAgICAyLAorICAgICAgIGZpZWxkcywKKyAgICAgICB2YWxz KTsKKworICAgIGl2YWwgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisg ICAgICBjdHh0LCBpbnRfdHlwZSwgNCk7CisgICAgZnZhbCA9IGdjY19qaXRfY29udGV4dF9uZXdf cnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGZsb2F0X3R5cGUsIDEpOworCisgICAgZ2Nj X2ppdF9ydmFsdWUgKnZhbHMyW10gPSB7ZnZhbCwgY3RvciwgaXZhbH07CisgICAgZ2NjX2ppdF9m aWVsZCAqZmllbGRzMltdID0ge2Jhcl9mZiwgYmFyX2ZpLCBiYXJfaWl9OworCisgICAgZ2NjX2pp dF9ydmFsdWUgKmN0b3JfYmFyID0gZ2NjX2ppdF9jb250ZXh0X25ld19zdHJ1Y3RfY29uc3RydWN0 b3IKKyAgICAgIChjdHh0LCAwLAorICAgICAgIHN0cnVjdF9iYXJfdHlwZSwKKyAgICAgICAzLAor ICAgICAgIGZpZWxkczIsCisgICAgICAgdmFsczIpOworCisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0 X2luaXRpYWxpemVyX3J2YWx1ZSAoYmFyLCBjdG9yX2Jhcik7CisgIH0KKyAgeyAvKiBzdHJ1Y3Qg YmFyIGJhciA9IHsxLCB7MiwgM30sIDR9OworICAgICAgIEkuZS4gbmVzdGVkIGN0b3JzIGFuZCBm aWVsZHMgaW1wbGljaXQgaW4gZGVmaW5pdGlvbiBvcmRlciAoZmllbGRzPU5VTEwpCisgICAgICov CisgICAgZ2NjX2ppdF9sdmFsdWUgKmJhciA9IGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgK KyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICAg IHN0cnVjdF9iYXJfdHlwZSwKKyAgICAgICJnbG9iYWxfc3RydWN0X2Jhcl8xMjM0XzIiKTsKKwor ICAgIGdjY19qaXRfcnZhbHVlICpmdmFsID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJv bV9pbnQgKAorICAgICAgY3R4dCwgZmxvYXRfdHlwZSwgMik7CisgICAgZ2NjX2ppdF9ydmFsdWUg Kml2YWwgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0 LCBpbnRfdHlwZSwgMyk7CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqdmFsc1tdID0geyBmdmFsLCBp dmFsfTsKKworICAgIGdjY19qaXRfcnZhbHVlICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0X25ld19z dHJ1Y3RfY29uc3RydWN0b3IKKyAgICAgIChjdHh0LCAwLAorICAgICAgIHN0cnVjdF9maV90eXBl LAorICAgICAgIDIsCisgICAgICAgMCwKKyAgICAgICB2YWxzKTsKKworICAgIGl2YWwgPSBnY2Nf aml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwg NCk7CisgICAgZnZhbCA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAg ICAgIGN0eHQsIGZsb2F0X3R5cGUsIDEpOworCisgICAgZ2NjX2ppdF9ydmFsdWUgKnZhbHMyW10g PSB7ZnZhbCwgY3RvciwgaXZhbH07CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqY3Rvcl9iYXIgPSBn Y2Nfaml0X2NvbnRleHRfbmV3X3N0cnVjdF9jb25zdHJ1Y3RvcgorICAgICAgKGN0eHQsIDAsCisg ICAgICAgc3RydWN0X2Jhcl90eXBlLAorICAgICAgIDMsCisgICAgICAgMCwKKyAgICAgICB2YWxz Mik7CisKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChiYXIsIGN0 b3JfYmFyKTsKKyAgfQorICB7IC8qIHN0cnVjdCBmaSBmb28gPSB7LmY9MiwgLmk9M307ICovCisg ICAgZ2NjX2ppdF9sdmFsdWUgKmZvbyA9IGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAg ICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICAgIHN0 cnVjdF9maV90eXBlLAorICAgICAgImdsb2JhbF9zdHJ1Y3RfZmlfMjNfMSIpOworCisgICAgZ2Nj X2ppdF9ydmFsdWUgKmZ2YWwgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAo CisgICAgICBjdHh0LCBmbG9hdF90eXBlLCAyKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqaXZhbCA9 IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90 eXBlLCAzKTsKKworICAgIGdjY19qaXRfcnZhbHVlICp2YWxzW10gPSB7IGZ2YWwsIGl2YWx9Owor ICAgIGdjY19qaXRfZmllbGQgKmZpZWxkc1tdID0ge2ZpX2YsIGZpX2l9OworCisgICAgZ2NjX2pp dF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3N0cnVjdF9jb25zdHJ1Y3Rvcgor ICAgICAgKGN0eHQsIDAsCisgICAgICAgc3RydWN0X2ZpX3R5cGUsCisgICAgICAgMiwKKyAgICAg ICBmaWVsZHMsCisgICAgICAgdmFscyk7CisKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlh bGl6ZXJfcnZhbHVlIChmb28sIGN0b3IpOworICB9CisgIHsgLyogc3RydWN0IGZpIGZvbyA9IHsy LCAzfTsgKi8KKyAgICBnY2Nfaml0X2x2YWx1ZSAqZm9vID0gZ2NjX2ppdF9jb250ZXh0X25ld19n bG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVE LAorICAgICAgc3RydWN0X2ZpX3R5cGUsCisgICAgICAiZ2xvYmFsX3N0cnVjdF9maV8yM18yIik7 CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqZnZhbCA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVl X2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGZsb2F0X3R5cGUsIDIpOworICAgIGdjY19qaXRfcnZh bHVlICppdmFsID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAg Y3R4dCwgaW50X3R5cGUsIDMpOworCisgICAgZ2NjX2ppdF9ydmFsdWUgKnZhbHNbXSA9IHsgZnZh bCwgaXZhbH07CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqY3RvciA9IGdjY19qaXRfY29udGV4dF9u ZXdfc3RydWN0X2NvbnN0cnVjdG9yCisgICAgICAoY3R4dCwgMCwKKyAgICAgICBzdHJ1Y3RfZmlf dHlwZSwKKyAgICAgICAyLAorICAgICAgIDAsCisgICAgICAgdmFscyk7CisKKyAgICBnY2Nfaml0 X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChmb28sIGN0b3IpOworICB9CisgIHsgLyog c3RydWN0IGZpIGZvbyA9IHsuaT0wLCAuZj0wfTsgKG51bGwgaW5pdCkgKi8KKyAgICBnY2Nfaml0 X2x2YWx1ZSAqZm9vID0gZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwg TlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgc3RydWN0X2ZpX3R5 cGUsCisgICAgICAiZ2xvYmFsX3N0cnVjdF9maV8wMF8xIik7CisKKyAgICBnY2Nfaml0X3J2YWx1 ZSAqdmFsc1tdID0geyAwLCAwfTsKKyAgICBnY2Nfaml0X2ZpZWxkICpmaWVsZHNbXSA9IHtmaV9m LCBmaV9pfTsKKworICAgIGdjY19qaXRfcnZhbHVlICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0X25l d19zdHJ1Y3RfY29uc3RydWN0b3IKKyAgICAgIChjdHh0LCAwLAorICAgICAgIHN0cnVjdF9maV90 eXBlLAorICAgICAgIDIsCisgICAgICAgZmllbGRzLAorICAgICAgIHZhbHMpOworCisgICAgZ2Nj X2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoZm9vLCBjdG9yKTsKKyAgfQorICB7 IC8qIHN0cnVjdCBmaSBmb28gPSB7MCwgMH07IChudWxsIGZpZWxkcywgbnVsbCBlbGVtZW50cyBp biB2YWx1ZXMpICovCisgICAgZ2NjX2ppdF9sdmFsdWUgKmZvbyA9IGdjY19qaXRfY29udGV4dF9u ZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBP UlRFRCwKKyAgICAgIHN0cnVjdF9maV90eXBlLAorICAgICAgImdsb2JhbF9zdHJ1Y3RfZmlfMDBf MiIpOworCisgICAgZ2NjX2ppdF9ydmFsdWUgKnZhbHNbXSA9IHsgMCwgMH07CisKKyAgICBnY2Nf aml0X3J2YWx1ZSAqY3RvciA9IGdjY19qaXRfY29udGV4dF9uZXdfc3RydWN0X2NvbnN0cnVjdG9y CisgICAgICAoY3R4dCwgMCwKKyAgICAgICBzdHJ1Y3RfZmlfdHlwZSwKKyAgICAgICAyLAorICAg ICAgIDAsCisgICAgICAgdmFscyk7CisKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6 ZXJfcnZhbHVlIChmb28sIGN0b3IpOworICB9CisgIHsgLyogc3RydWN0IGZpIGZvbyA9IHsuaSA9 IDB9IChudWxsIGluaXQpOworCisgICAgICAgTnVsbCBpbml0IHZhbHVlcy4gKi8KKyAgICBnY2Nf aml0X2x2YWx1ZSAqZm9vID0gZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4 dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgc3RydWN0X2Zp X3R5cGUsCisgICAgICAiZ2xvYmFsX3N0cnVjdF9maV8wXzEiKTsKKworICAgIGdjY19qaXRfcnZh bHVlICp2YWxzW10gPSB7MH07CisgICAgZ2NjX2ppdF9maWVsZCAqZmllbGRzW10gPSB7ZmlfaX07 CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqY3RvciA9IGdjY19qaXRfY29udGV4dF9uZXdfc3RydWN0 X2NvbnN0cnVjdG9yCisgICAgICAoY3R4dCwgMCwKKyAgICAgICBzdHJ1Y3RfZmlfdHlwZSwKKyAg ICAgICAxLAorICAgICAgIGZpZWxkcywKKyAgICAgICB2YWxzKTsKKyAgICBnY2Nfaml0X2dsb2Jh bF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChmb28sIGN0b3IpOworICB9CisgIHsgLyogc3RydWN0 IGZpIGZvbyA9IHswfTsKKworICAgICAgIE51bGwgaW5pdCB2YWx1ZXMuICovCisgICAgZ2NjX2pp dF9sdmFsdWUgKmZvbyA9IGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQs IE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICAgIHN0cnVjdF9maV90 eXBlLAorICAgICAgImdsb2JhbF9zdHJ1Y3RfZmlfMF8yIik7CisKKyAgICBnY2Nfaml0X3J2YWx1 ZSAqdmFsc1tdID0gezB9OworCisgICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2Nv bnRleHRfbmV3X3N0cnVjdF9jb25zdHJ1Y3RvcgorICAgICAgKGN0eHQsIDAsCisgICAgICAgc3Ry dWN0X2ZpX3R5cGUsCisgICAgICAgMSwKKyAgICAgICAwLAorICAgICAgIHZhbHMpOworICAgIGdj Y19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGZvbywgY3Rvcik7CisgIH0KKyAg eyAvKiBzdHJ1Y3QgZmkgZm9vID0ge307IChudWxsIGluaXQpCisKKyAgICAgICBOdWxsIGZpZWxk cyBhbmQgdmFsdWVzLiAqLworICAgIGdjY19qaXRfbHZhbHVlICpmb28gPSBnY2Nfaml0X2NvbnRl eHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxf RVhQT1JURUQsCisgICAgICBzdHJ1Y3RfZmlfdHlwZSwKKyAgICAgICJnbG9iYWxfc3RydWN0X2Zp XzYiKTsKKworICAgIGdjY19qaXRfcnZhbHVlICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0X25ld19z dHJ1Y3RfY29uc3RydWN0b3IKKyAgICAgIChjdHh0LCAwLAorICAgICAgIHN0cnVjdF9maV90eXBl LAorICAgICAgIDAsCisgICAgICAgMCwKKyAgICAgICAwKTsKKyAgICBnY2Nfaml0X2dsb2JhbF9z ZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChmb28sIGN0b3IpOworICB9CisgIHsgLyogc3RydWN0IGZp IGZvbyA9IHsyICogMiwgM307ICovCisgICAgZ2NjX2ppdF9sdmFsdWUgKmZvbyA9IGdjY19qaXRf Y29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dM T0JBTF9FWFBPUlRFRCwKKyAgICAgIHN0cnVjdF9maV90eXBlLAorICAgICAgImdsb2JhbF9zdHJ1 Y3RfZmlfMyIpOworCisgICAgZ2NjX2ppdF9ydmFsdWUgKmZ2YWwgPSBnY2Nfaml0X2NvbnRleHRf bmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBmbG9hdF90eXBlLCAyKTsKKyAgICBn Y2Nfaml0X3J2YWx1ZSAqZnZhbDIgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2lu dCAoCisgICAgICBjdHh0LCBmbG9hdF90eXBlLCAyKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqaXZh bCA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGlu dF90eXBlLCAzKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF9tdWwgPSBnY2Nfaml0X2NvbnRl eHRfbmV3X2JpbmFyeV9vcCAoY3R4dCwgMCwKKyAgICAgIEdDQ19KSVRfQklOQVJZX09QX01VTFQs CisgICAgICBmbG9hdF90eXBlLAorICAgICAgZnZhbCwKKyAgICAgIGZ2YWwyKTsKKworICAgIGdj Y19qaXRfcnZhbHVlICp2YWxzW10gPSB7IHJ2YWxfbXVsLCBpdmFsfTsKKyAgICBnY2Nfaml0X2Zp ZWxkICpmaWVsZHNbXSA9IHtmaV9mLCBmaV9pfTsKKworICAgIGdjY19qaXRfcnZhbHVlICpjdG9y ID0gZ2NjX2ppdF9jb250ZXh0X25ld19zdHJ1Y3RfY29uc3RydWN0b3IKKyAgICAgIChjdHh0LCAw LAorICAgICAgIHN0cnVjdF9maV90eXBlLAorICAgICAgIDIsCisgICAgICAgZmllbGRzLAorICAg ICAgIHZhbHMpOworCisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAo Zm9vLCBjdG9yKTsKKyAgfQorICB7IC8qIHVuaW9uIHViYXIgZm9vID0gey5mZiA9IDN9OyAqLwor ICAgICBnY2Nfaml0X2x2YWx1ZSAqZm9vID0gZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAor ICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAg dWJhciwKKyAgICAgICJnbG9iYWxfdW5pb25fdWZvb19mZjMiKTsKKworICAgICBnY2Nfaml0X3J2 YWx1ZSAqZnZhbCA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAg ICBjdHh0LCBmbG9hdF90eXBlLCAzKTsKKworICAgICBnY2Nfaml0X3J2YWx1ZSAqY3RvciA9IGdj Y19qaXRfY29udGV4dF9uZXdfdW5pb25fY29uc3RydWN0b3IgKAorICAgICAgIGN0eHQsCisgICAg ICAgMCwKKyAgICAgICB1YmFyLAorICAgICAgIHViYXJfZmYsCisgICAgICAgZnZhbCk7CisKKyAg ICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoZm9vLCBjdG9yKTsKKyAg fQorICB7IC8qIHVuaW9uIHViYXIgZm9vID0gey5paSA9IDJ9OyAqLworICAgICBnY2Nfaml0X2x2 YWx1ZSAqZm9vID0gZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVM TCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgdWJhciwKKyAgICAgICJn bG9iYWxfdW5pb25fdWZvb19paTIiKTsKKworICAgICBnY2Nfaml0X3J2YWx1ZSAqaXZhbCA9IGdj Y19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgICBjdHh0LCBpbnRfdHlw ZSwgMik7CisKKyAgICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3 X3VuaW9uX2NvbnN0cnVjdG9yICgKKyAgICAgICBjdHh0LAorICAgICAgIDAsCisgICAgICAgdWJh ciwKKyAgICAgICB1YmFyX2lpLAorICAgICAgIGl2YWwpOworCisgICAgIGdjY19qaXRfZ2xvYmFs X3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGZvbywgY3Rvcik7CisgIH0KKyAgeyAvKiB1bmlvbiB1 YmFyIGZvbyA9IHsxLjFmfTsgc2hvdWxkIGluaXQgZmlyc3QgZmllbGQgICovCisgICAgIGdjY19q aXRfbHZhbHVlICpmb28gPSBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0 LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgICB1YmFyLAorICAg ICAgImdsb2JhbF91bmlvbl91Zm9vX2ZmMWMxIik7CisKKyAgICAgZ2NjX2ppdF9ydmFsdWUgKmZ2 YWwgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2RvdWJsZSAoCisgICAgICAgY3R4 dCwgZmxvYXRfdHlwZSwgMS4xKTsKKworICAgICBnY2Nfaml0X3J2YWx1ZSAqY3RvciA9IGdjY19q aXRfY29udGV4dF9uZXdfdW5pb25fY29uc3RydWN0b3IgKAorICAgICAgIGN0eHQsCisgICAgICAg MCwKKyAgICAgICB1YmFyLAorICAgICAgIDAsCisgICAgICAgZnZhbCk7CisKKyAgICAgZ2NjX2pp dF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoZm9vLCBjdG9yKTsKKyAgfQorICB7IC8q IHVuaW9uIHViYXIgZm9vID0gKHVuaW9uIHViYXIpe307ICovCisgICAgIGdjY19qaXRfbHZhbHVl ICpmb28gPSBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAor ICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgICB1YmFyLAorICAgICAgImdsb2Jh bF91bmlvbl91Zm9vXzAiKTsKKworICAgICBnY2Nfaml0X3J2YWx1ZSAqY3RvciA9IGdjY19qaXRf Y29udGV4dF9uZXdfdW5pb25fY29uc3RydWN0b3IgKAorICAgICAgIGN0eHQsCisgICAgICAgMCwK KyAgICAgICB1YmFyLAorICAgICAgIDAsCisgICAgICAgMCk7CisKKyAgICAgZ2NjX2ppdF9nbG9i YWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoZm9vLCBjdG9yKTsKKyAgfQorICB7IC8qIGludCBm b28gPSAzOyAqLworICAgIGdjY19qaXRfcnZhbHVlICpydmFsID0gZ2NjX2ppdF9jb250ZXh0X25l d19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDMpOworICAgIGdjY19q aXRfbHZhbHVlICpmb28gPSAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4 dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgaW50X3R5cGUs CisgICAgICAiZ2xvYmFsX2ludDFfMyIpOworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFs aXplcl9ydmFsdWUgKGZvbywKKyAgICAgIHJ2YWwpOworICB9CisgIHsgLyogY29uc3Qgdm9sYXRp bGUgaW50IGZvbyA9IDM7ICovCisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWwgPSBnY2Nfaml0X2Nv bnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwgMyk7Cisg ICAgZ2NjX2ppdF9sdmFsdWUgKmZvbyA9ICBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisg ICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgICBn Y2Nfaml0X3R5cGVfZ2V0X2NvbnN0IChnY2Nfaml0X3R5cGVfZ2V0X3ZvbGF0aWxlIChpbnRfdHlw ZSkpLAorICAgICAgImdsb2JhbF9jdmludDFfMyIpOworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9p bml0aWFsaXplcl9ydmFsdWUgKGZvbywKKyAgICAgIHJ2YWwpOworICB9CisgIHsgLyogVHJ5IHRo ZSBhYm92ZSwgYnV0IHdpdGggb3Bwb3NpdGUgb3JkZXIgb2YgZ2xvYmFsIGFuZCBsaXRlcmFsIGNh bGxzICovCisgICAgZ2NjX2ppdF9sdmFsdWUgKmZvbyA9ICBnY2Nfaml0X2NvbnRleHRfbmV3X2ds b2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQs CisgICAgICBpbnRfdHlwZSwKKyAgICAgICJnbG9iYWxfaW50Ml8zIik7CisgICAgZ2NjX2ppdF9y dmFsdWUgKnJ2YWwgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAg ICBjdHh0LCBpbnRfdHlwZSwgMyk7CisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVy X3J2YWx1ZSAoZm9vLAorICAgICAgcnZhbCk7CisgIH0KKyAgeyAvKiBpbnQgZm9vID0gMyAqICgz ICsgMykgKi8KKyAgICBnY2Nfaml0X2x2YWx1ZSAqZm9vID0gIGdjY19qaXRfY29udGV4dF9uZXdf Z2xvYmFsICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRF RCwKKyAgICAgIGludF90eXBlLAorICAgICAgImdsb2JhbF9pbnQzXzE4Iik7CisgICAgZ2NjX2pp dF9ydmFsdWUgKnJ2YWwzXzAgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAo CisgICAgICBjdHh0LCBpbnRfdHlwZSwgMyk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWwzXzEg PSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRf dHlwZSwgMyk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWwzXzIgPSBnY2Nfaml0X2NvbnRleHRf bmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwgMyk7CisgICAgZ2Nj X2ppdF9ydmFsdWUgKnJ2YWxfcGx1cyA9IGdjY19qaXRfY29udGV4dF9uZXdfYmluYXJ5X29wIChj dHh0LCAwLAorICAgICAgR0NDX0pJVF9CSU5BUllfT1BfUExVUywKKyAgICAgIGludF90eXBlLAor ICAgICAgcnZhbDNfMCwKKyAgICAgIHJ2YWwzXzEpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFs X211bCA9IGdjY19qaXRfY29udGV4dF9uZXdfYmluYXJ5X29wIChjdHh0LCAwLAorICAgICAgR0ND X0pJVF9CSU5BUllfT1BfTVVMVCwKKyAgICAgIGludF90eXBlLAorICAgICAgcnZhbF9wbHVzLAor ICAgICAgcnZhbDNfMik7CisKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZh bHVlIChmb28sCisgICAgICBydmFsX211bCk7CisgIH0KKyAgeyAvKiBpbnQgZm9vID0gfigtKCgo KCgyIHwgOCkgJiAxNSkgXiAwKSA8PCAzID4+IDIgLSAxKSAvIDIpKTsgKi8KKyAgICBnY2Nfaml0 X2x2YWx1ZSAqZm9vID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQs IE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICAgIGludF90eXBlLAor ICAgICAgImdsb2JhbF9pbnRfYWxvdG9mb3BlcmF0b3JzIik7CisgICAgZ2NjX2ppdF9ydmFsdWUg KnJ2YWxfMCA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0 eHQsIGludF90eXBlLCAyKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF8xID0gZ2NjX2ppdF9j b250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDgpOwor ICAgIGdjY19qaXRfcnZhbHVlICpydmFsXzIgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9m cm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwgMTUpOworICAgIGdjY19qaXRfcnZhbHVl ICpydmFsXzMgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBj dHh0LCBpbnRfdHlwZSwgMCk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfNCA9IGdjY19qaXRf Y29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCAzKTsK KyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF81ID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVf ZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDIpOworICAgIGdjY19qaXRfcnZhbHVl ICpydmFsXzYgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBj dHh0LCBpbnRfdHlwZSwgMSk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfNyA9IGdjY19qaXRf Y29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCAyKTsK KworICAgIGdjY19qaXRfcnZhbHVlICpydmFsX29yID0gZ2NjX2ppdF9jb250ZXh0X25ld19iaW5h cnlfb3AgKGN0eHQsIDAsCisgICAgICBHQ0NfSklUX0JJTkFSWV9PUF9CSVRXSVNFX09SLAorICAg ICAgaW50X3R5cGUsCisgICAgICBydmFsXzAsCisgICAgICBydmFsXzEpOworICAgIGdjY19qaXRf cnZhbHVlICpydmFsX2FuZCA9IGdjY19qaXRfY29udGV4dF9uZXdfYmluYXJ5X29wIChjdHh0LCAw LAorICAgICAgR0NDX0pJVF9CSU5BUllfT1BfQklUV0lTRV9BTkQsCisgICAgICBpbnRfdHlwZSwK KyAgICAgIHJ2YWxfb3IsCisgICAgICBydmFsXzIpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFs X3hvciA9IGdjY19qaXRfY29udGV4dF9uZXdfYmluYXJ5X29wIChjdHh0LCAwLAorICAgICAgR0ND X0pJVF9CSU5BUllfT1BfQklUV0lTRV9YT1IsCisgICAgICBpbnRfdHlwZSwKKyAgICAgIHJ2YWxf YW5kLAorICAgICAgcnZhbF8zKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF9sc2ggPSBnY2Nf aml0X2NvbnRleHRfbmV3X2JpbmFyeV9vcCAoY3R4dCwgMCwKKyAgICAgIEdDQ19KSVRfQklOQVJZ X09QX0xTSElGVCwKKyAgICAgIGludF90eXBlLAorICAgICAgcnZhbF94b3IsCisgICAgICBydmFs XzQpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsX3JzaCA9IGdjY19qaXRfY29udGV4dF9uZXdf YmluYXJ5X29wIChjdHh0LCAwLAorICAgICAgR0NDX0pJVF9CSU5BUllfT1BfUlNISUZULAorICAg ICAgaW50X3R5cGUsCisgICAgICBydmFsX2xzaCwKKyAgICAgIHJ2YWxfNSk7CisgICAgZ2NjX2pp dF9ydmFsdWUgKnJ2YWxfbWluID0gZ2NjX2ppdF9jb250ZXh0X25ld19iaW5hcnlfb3AgKGN0eHQs IDAsCisgICAgICBHQ0NfSklUX0JJTkFSWV9PUF9NSU5VUywKKyAgICAgIGludF90eXBlLAorICAg ICAgcnZhbF9yc2gsCisgICAgICBydmFsXzYpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsX2Rp diA9IGdjY19qaXRfY29udGV4dF9uZXdfYmluYXJ5X29wIChjdHh0LCAwLAorICAgICAgR0NDX0pJ VF9CSU5BUllfT1BfRElWSURFLAorICAgICAgaW50X3R5cGUsCisgICAgICBydmFsX21pbiwKKyAg ICAgIHJ2YWxfNyk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfdW1pbiA9ICBnY2Nfaml0X2Nv bnRleHRfbmV3X3VuYXJ5X29wIChjdHh0LCAwLAorICAgICAgR0NDX0pJVF9VTkFSWV9PUF9NSU5V UywKKyAgICAgIGludF90eXBlLAorICAgICAgcnZhbF9kaXYpOworICAgIGdjY19qaXRfcnZhbHVl ICpydmFsX25lZyA9ICBnY2Nfaml0X2NvbnRleHRfbmV3X3VuYXJ5X29wIChjdHh0LCAwLAorICAg ICAgR0NDX0pJVF9VTkFSWV9PUF9CSVRXSVNFX05FR0FURSwKKyAgICAgIGludF90eXBlLAorICAg ICAgcnZhbF91bWluKTsKKworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFs dWUgKGZvbywKKyAgICAgIHJ2YWxfbmVnKTsKKyAgfQorICB7IC8qIGludCBmb28gPSAzOyBpbnQg KnBmb28gPSAmZm9vOyAqLworICAgIGdjY19qaXRfbHZhbHVlICpmb28gPSAgZ2NjX2ppdF9jb250 ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFM X0VYUE9SVEVELAorICAgICAgaW50X3R5cGUsCisgICAgICAiZ2xvYmFsX2ludDRfMyIpOworICAg IGdjY19qaXRfcnZhbHVlICpydmFsID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9p bnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDMpOworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9p bml0aWFsaXplcl9ydmFsdWUgKGZvbywKKyAgICAgIHJ2YWwpOworCisgICAgZ2NjX2ppdF9sdmFs dWUgKnBmb28gPSAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVM TCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgcGludF90eXBlLAorICAg ICAgImdsb2JhbF9waW50NSIpOworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9y dmFsdWUgKHBmb28sCisgICAgICBnY2Nfaml0X2x2YWx1ZV9nZXRfYWRkcmVzcyAoZm9vLCAwKSk7 CisgIH0KKyAgeyAvKiBzdGF0aWMgaW50IGZvbzsgaW50ICpwZm9vID0gJmZvbzsgKi8KKyAgICBn Y2Nfaml0X2x2YWx1ZSAqZm9vID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAg IGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9JTlRFUk5BTCwKKyAgICAgIGludF90 eXBlLAorICAgICAgImdsb2JhbF9pbnQ1XzMiKTsKKworICAgIGdjY19qaXRfbHZhbHVlICpwZm9v ID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAg ICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICAgIHBpbnRfdHlwZSwKKyAgICAgICJnbG9i YWxfcGludDYiKTsKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChw Zm9vLAorICAgICAgZ2NjX2ppdF9sdmFsdWVfZ2V0X2FkZHJlc3MgKGZvbywgMCkpOworCisgICAg Z2NjX2ppdF9mdW5jdGlvbiAqZm4gPQorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlv biAoY3R4dCwKKwkJCQkgICAgMCwKKwkJCQkgICAgR0NDX0pJVF9GVU5DVElPTl9FWFBPUlRFRCwK KwkJCQkgICAgZ2NjX2ppdF90eXBlX2dldF9wb2ludGVyKGludF90eXBlKSwKKwkJCQkgICAgImZu X3BpbnRfMCIsCisJCQkJICAgIDAsCisJCQkJICAgIDAsCisJCQkJICAgIDApOworCisgICAgZ2Nj X2ppdF9ibG9jayAqYmxvY2sgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAoZm4sICJzdGFy dCIpOworCisgICAgZ2NjX2ppdF9ibG9ja19lbmRfd2l0aF9yZXR1cm4gKGJsb2NrLAorCQkJCSAg IDAsCisJCQkJICAgZ2NjX2ppdF9sdmFsdWVfZ2V0X2FkZHJlc3MgKGZvbywgMCkpOworICB9Cisg IHsgLyogaW50IGZvbyA9IDM7IGludCAqcGZvbyA9ICZmb28gKyAxOyAqLworICAgIGdjY19qaXRf bHZhbHVlICpmb28gPSAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwg TlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgaW50X3R5cGUsCisg ICAgICAiZ2xvYmFsX2ludDZfMyIpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsID0gZ2NjX2pp dF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDMp OworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGZvbywKKyAgICAg IHJ2YWwpOworCisgICAgZ2NjX2ppdF9sdmFsdWUgKnBmb28gPSAgZ2NjX2ppdF9jb250ZXh0X25l d19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9S VEVELAorICAgICAgcGludF90eXBlLAorICAgICAgImdsb2JhbF9waW50NyIpOworICAgIGdjY19q aXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKHBmb28sCisgICAgICBnY2Nfaml0X2x2 YWx1ZV9nZXRfYWRkcmVzcyAoCisJZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV9hY2Nlc3MoCisJ ICBjdHh0LAorCSAgMCwKKwkgIGdjY19qaXRfbHZhbHVlX2dldF9hZGRyZXNzKGZvbywgMCksCisJ ICBnY2Nfaml0X2NvbnRleHRfb25lKGN0eHQsIGludF90eXBlKSksCisJMCkpOworICB9CisgIHsg LyogZG91YmxlIGZvbyA9IDM7ICovCisgICAgZ2NjX2ppdF9sdmFsdWUgKmRvdWJsZTEgPSAgZ2Nj X2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorCWN0eHQsIE5VTEwsCisJR0NDX0pJVF9HTE9CQUxf RVhQT1JURUQsCisJZG91YmxlX3R5cGUsCisJImdsb2JhbF9kb3VibGUxXzMiKTsKKyAgICBnY2Nf aml0X3J2YWx1ZSAqcnZhbCA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgK KyAgICAgIGN0eHQsIGRvdWJsZV90eXBlLCAzKTsKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5p dGlhbGl6ZXJfcnZhbHVlIChkb3VibGUxLAorICAgICAgcnZhbCk7CisgIH0KKyAgeyAvKiBkb3Vi bGUgZm9vID0gMyAqIDMgKyAzICovCisgICAgZ2NjX2ppdF9sdmFsdWUgKmRvdWJsZTEgPSAgZ2Nj X2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorCWN0eHQsIE5VTEwsCisJR0NDX0pJVF9HTE9CQUxf RVhQT1JURUQsCisJZG91YmxlX3R5cGUsCisJImdsb2JhbF9kb3VibGUyXzEyIik7CisgICAgZ2Nj X2ppdF9ydmFsdWUgKnJ2YWwgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAo CisgICAgICBjdHh0LCBkb3VibGVfdHlwZSwgMyk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxf bXVsID0gZ2NjX2ppdF9jb250ZXh0X25ld19iaW5hcnlfb3AgKGN0eHQsIDAsCisgICAgICBHQ0Nf SklUX0JJTkFSWV9PUF9NVUxULAorICAgICAgZG91YmxlX3R5cGUsCisgICAgICBydmFsLAorICAg ICAgcnZhbCk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfcGx1cyA9IGdjY19qaXRfY29udGV4 dF9uZXdfYmluYXJ5X29wIChjdHh0LCAwLAorICAgICAgR0NDX0pJVF9CSU5BUllfT1BfUExVUywK KyAgICAgIGRvdWJsZV90eXBlLAorICAgICAgcnZhbF9tdWwsCisgICAgICBydmFsKTsKKyAgICBn Y2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChkb3VibGUxLAorICAgICAgcnZh bF9wbHVzKTsKKyAgfQorICB7IC8qIGJvb2wgZm9vID0gMyArIDMgPD0gNjsgKi8KKyAgICBnY2Nf aml0X2x2YWx1ZSAqZm9vID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0 eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICAgIGJvb2xfdHlw ZSwKKyAgICAgICJnbG9iYWxfYm9vbDFfMSIpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsM18w ID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50 X3R5cGUsIDMpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsM18xID0gZ2NjX2ppdF9jb250ZXh0 X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDMpOworICAgIGdj Y19qaXRfcnZhbHVlICpydmFsNiA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50 ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCA2KTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF9w bHVzID0gZ2NjX2ppdF9jb250ZXh0X25ld19iaW5hcnlfb3AgKGN0eHQsCisgICAgICAwLAorICAg ICAgR0NDX0pJVF9CSU5BUllfT1BfUExVUywKKyAgICAgIGludF90eXBlLAorICAgICAgcnZhbDNf MCwKKyAgICAgIHJ2YWwzXzEpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsX2xlID0gZ2NjX2pp dF9jb250ZXh0X25ld19jb21wYXJpc29uIChjdHh0LAorICAgICAgMCwKKyAgICAgIEdDQ19KSVRf Q09NUEFSSVNPTl9MRSwKKyAgICAgIHJ2YWxfcGx1cywKKyAgICAgIHJ2YWw2KTsKKworICAgIGdj Y19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUgKGZvbywKKyAgICAgIHJ2YWxfbGUp OworICB9CisgIGdjY19qaXRfbHZhbHVlICpnbG9iYWxfaW50YXJyXzEyMzQ7CisgIHsgLyogaW50 IGZvb1tdID0gezEsMiwzLDR9OyAqLworCisgICAgZ2NjX2ppdF90eXBlICphcnJfdHlwZSA9IGdj Y19qaXRfY29udGV4dF9uZXdfYXJyYXlfdHlwZSAoY3R4dCwKKwkJCQkJCQkgICAgIDAsCisJCQkJ CQkJICAgICBpbnRfdHlwZSwKKwkJCQkJCQkgICAgIDQpOworICAgIGdjY19qaXRfcnZhbHVlICpy dmFsXzEgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0 LCBpbnRfdHlwZSwgMSk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfMiA9IGdjY19qaXRfY29u dGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCAyKTsKKyAg ICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF8zID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJv bV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDMpOworICAgIGdjY19qaXRfcnZhbHVlICpy dmFsXzQgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0 LCBpbnRfdHlwZSwgNCk7CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqdmFsdWVzW10gPSB7cnZhbF8x LCBydmFsXzIsIHJ2YWxfMywgcnZhbF80fTsKKworICAgIGdjY19qaXRfcnZhbHVlICpjdG9yID0g Z2NjX2ppdF9jb250ZXh0X25ld19hcnJheV9jb25zdHJ1Y3RvciAoY3R4dCwKKwkJCQkJCQkJICAw LAorCQkJCQkJCQkgIGFycl90eXBlLAorCQkJCQkJCQkgIDQsCisJCQkJCQkJCSAgdmFsdWVzKTsK KyAgICBnbG9iYWxfaW50YXJyXzEyMzQgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisg ICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgICBh cnJfdHlwZSwKKyAgICAgICJnbG9iYWxfaW50YXJyXzEyMzQiKTsKKyAgICBnY2Nfaml0X2dsb2Jh bF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChnbG9iYWxfaW50YXJyXzEyMzQsIGN0b3IpOworICB9 CisgIHsgLyogZmxvYXQgZm9vWzRdID0gezEsMn07ICovCisKKyAgICBnY2Nfaml0X3R5cGUgKmFy cl90eXBlID0gZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV90eXBlIChjdHh0LAorCQkJCQkJCSAg ICAgMCwKKwkJCQkJCQkgICAgIGZsb2F0X3R5cGUsCisJCQkJCQkJICAgICA0KTsKKyAgICBnY2Nf aml0X3J2YWx1ZSAqcnZhbF8xID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQg KAorICAgICAgY3R4dCwgZmxvYXRfdHlwZSwgMSk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxf MiA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGZs b2F0X3R5cGUsIDIpOworCisgICAgZ2NjX2ppdF9ydmFsdWUgKnZhbHVlc1tdID0ge3J2YWxfMSwg cnZhbF8yfTsKKworICAgIGdjY19qaXRfcnZhbHVlICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0X25l d19hcnJheV9jb25zdHJ1Y3RvciAoY3R4dCwKKwkJCQkJCQkJICAwLAorCQkJCQkJCQkgIGFycl90 eXBlLAorCQkJCQkJCQkgIDIsCisJCQkJCQkJCSAgdmFsdWVzKTsKKyAgICBnY2Nfaml0X2x2YWx1 ZSAqZm9vID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQsIE5VTEws CisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICAgIGFycl90eXBlLAorICAgICAg Imdsb2JhbF9mbG9hdGFycl8xMiIpOworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXpl cl9ydmFsdWUgKGZvbywgY3Rvcik7CisgIH0KKyAgeyAvKiBmbG9hdCBmb29bNF0gPSB7MSwyfTsK KyAgICAgICBXaXRoIGRpZmZlcmVudCBhcnJheSBvYmplY3RzIG9mIHNhbWUgc2l6ZSBhbmQgdHlw ZS4gKi8KKworICAgIGdjY19qaXRfdHlwZSAqYXJyX3R5cGUgPSBnY2Nfaml0X2NvbnRleHRfbmV3 X2FycmF5X3R5cGUgKGN0eHQsCisJCQkJCQkJICAgICAwLAorCQkJCQkJCSAgICAgZmxvYXRfdHlw ZSwKKwkJCQkJCQkgICAgIDQpOworICAgIGdjY19qaXRfdHlwZSAqYXJyX3R5cGUxID0gZ2NjX2pp dF9jb250ZXh0X25ld19hcnJheV90eXBlIChjdHh0LAorCQkJCQkJCSAgICAgIDAsCisJCQkJCQkJ ICAgICAgZmxvYXRfdHlwZSwKKwkJCQkJCQkgICAgICA0KTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAq cnZhbF8xID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4 dCwgZmxvYXRfdHlwZSwgMSk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfMiA9IGdjY19qaXRf Y29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGZsb2F0X3R5cGUsIDIp OworCisgICAgZ2NjX2ppdF9ydmFsdWUgKnZhbHVlc1tdID0ge3J2YWxfMSwgcnZhbF8yfTsKKwor ICAgIGdjY19qaXRfcnZhbHVlICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV9jb25z dHJ1Y3RvciAoY3R4dCwKKwkJCQkJCQkJICAwLAorCQkJCQkJCQkgIGFycl90eXBlMSwKKwkJCQkJ CQkJICAyLAorCQkJCQkJCQkgIHZhbHVlcyk7CisgICAgZ2NjX2ppdF9sdmFsdWUgKmZvbyA9ICBn Y2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0ND X0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgICBhcnJfdHlwZSwKKyAgICAgICJnbG9iYWxfZmxv YXRhcnJfMTJfMiIpOworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUg KGZvbywgY3Rvcik7CisgIH0KKyAgeyAvKiBmbG9hdCBmb29bNF0gPSB7MSwyLDB9OyAobnVsbCBp bml0KSAqLworCisgICAgZ2NjX2ppdF90eXBlICphcnJfdHlwZSA9IGdjY19qaXRfY29udGV4dF9u ZXdfYXJyYXlfdHlwZSAoY3R4dCwKKwkJCQkJCQkgICAgIDAsCisJCQkJCQkJICAgICBmbG9hdF90 eXBlLAorCQkJCQkJCSAgICAgNCk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfMSA9IGdjY19q aXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGZsb2F0X3R5cGUs IDEpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsXzIgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2 YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBmbG9hdF90eXBlLCAyKTsKKworICAgIGdjY19q aXRfcnZhbHVlICp2YWx1ZXNbXSA9IHtydmFsXzEsIHJ2YWxfMiwgMH07CisKKyAgICBnY2Nfaml0 X3J2YWx1ZSAqY3RvciA9IGdjY19qaXRfY29udGV4dF9uZXdfYXJyYXlfY29uc3RydWN0b3IgKGN0 eHQsCisJCQkJCQkJCSAgMCwKKwkJCQkJCQkJICBhcnJfdHlwZSwKKwkJCQkJCQkJICAyLAorCQkJ CQkJCQkgIHZhbHVlcyk7CisgICAgZ2NjX2ppdF9sdmFsdWUgKmZvbyA9ICBnY2Nfaml0X2NvbnRl eHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxf RVhQT1JURUQsCisgICAgICBhcnJfdHlwZSwKKyAgICAgICJnbG9iYWxfZmxvYXRhcnJfMTIwIik7 CisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoZm9vLCBjdG9yKTsK KyAgfQorICB7IC8qIGZsb2F0IGZvb1s0XSA9IHt9OyAobnVsbCBpbml0KSAqLworCisgICAgZ2Nj X2ppdF90eXBlICphcnJfdHlwZSA9IGdjY19qaXRfY29udGV4dF9uZXdfYXJyYXlfdHlwZSAoY3R4 dCwKKwkJCQkJCQkgICAgIDAsCisJCQkJCQkJICAgICBmbG9hdF90eXBlLAorCQkJCQkJCSAgICAg NCk7CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqY3RvciA9IGdjY19qaXRfY29udGV4dF9uZXdfYXJy YXlfY29uc3RydWN0b3IgKGN0eHQsCisJCQkJCQkJCSAgMCwKKwkJCQkJCQkJICBhcnJfdHlwZSwK KwkJCQkJCQkJICAwLAorCQkJCQkJCQkgIDApOworICAgIGdjY19qaXRfbHZhbHVlICpmb28gPSAg Z2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdD Q19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAgICAgYXJyX3R5cGUsCisgICAgICAiZ2xvYmFsX2Zs b2F0YXJyXzAwMDAiKTsKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVl IChmb28sIGN0b3IpOworICB9CisgIHsgLyogZmxvYXQgZm9vWzRdID0ge05VTEwgLCBOVUxMLCAz LCBOVUxMLCA1LCA2fTsgKG51bGwgaW5pdCkgKi8KKworICAgIGdjY19qaXRfdHlwZSAqYXJyX3R5 cGUgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2FycmF5X3R5cGUgKGN0eHQsCisJCQkJCQkJICAgICAw LAorCQkJCQkJCSAgICAgZmxvYXRfdHlwZSwKKwkJCQkJCQkgICAgIDgpOworICAgIGdjY19qaXRf cnZhbHVlICpydmFsMyA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAg ICAgIGN0eHQsIGZsb2F0X3R5cGUsIDMpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsNSA9IGdj Y19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGZsb2F0X3R5 cGUsIDUpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsNiA9IGdjY19qaXRfY29udGV4dF9uZXdf cnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGZsb2F0X3R5cGUsIDYpOworCisgICAgZ2Nj X2ppdF9ydmFsdWUgKnZhbHVlc1tdID0gezAsIDAsIHJ2YWwzLCAwLCBydmFsNSwgcnZhbDYsIDAg fTsKKworICAgIGdjY19qaXRfcnZhbHVlICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0X25ld19hcnJh eV9jb25zdHJ1Y3RvciAoY3R4dCwKKwkJCQkJCQkJICAwLAorCQkJCQkJCQkgIGFycl90eXBlLAor CQkJCQkJCQkgIDcsCisJCQkJCQkJCSAgdmFsdWVzKTsKKyAgICBnY2Nfaml0X2x2YWx1ZSAqZm9v ID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAg ICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICAgIGFycl90eXBlLAorICAgICAgImdsb2Jh bF9mbG9hdGFycl8wMDMwNTYwMCIpOworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXpl cl9ydmFsdWUgKGZvbywgY3Rvcik7CisgIH0KKyAgeyAvKiBpbnQgKmZvb1s0XSA9IHswLCAmZ2xv YmFsX2ludGFycl8xMjM0WzFdLCAwfTsgKi8KKworICAgIGdjY19qaXRfdHlwZSAqYXJyX3R5cGUg PSBnY2Nfaml0X2NvbnRleHRfbmV3X2FycmF5X3R5cGUgKGN0eHQsCisJCQkJCQkJICAgICAwLAor CQkJCQkJCSAgICAgcGludF90eXBlLAorCQkJCQkJCSAgICAgNCk7CisgICAgZ2NjX2ppdF9ydmFs dWUgKnJ2YWxfMSA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAg IGN0eHQsIGludF90eXBlLCAxKTsKKyAgICBnY2Nfaml0X2x2YWx1ZSAqYXJyX2FjY2VzcyA9IGdj Y19qaXRfY29udGV4dF9uZXdfYXJyYXlfYWNjZXNzICgKKyAgICAgIGN0eHQsCisgICAgICAwLAor ICAgICAgZ2NjX2ppdF9sdmFsdWVfYXNfcnZhbHVlIChnbG9iYWxfaW50YXJyXzEyMzQpLAorICAg ICAgcnZhbF8xKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF8yID0gZ2NjX2ppdF9sdmFsdWVf Z2V0X2FkZHJlc3MgKGFycl9hY2Nlc3MsIDApOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsXzMg PSBnY2Nfaml0X2NvbnRleHRfbnVsbCAoY3R4dCwgcGludF90eXBlKTsKKworICAgIGdjY19qaXRf cnZhbHVlICp2YWx1ZXNbXSA9IHswLCBydmFsXzIsIHJ2YWxfM307CisKKyAgICBnY2Nfaml0X3J2 YWx1ZSAqY3RvciA9IGdjY19qaXRfY29udGV4dF9uZXdfYXJyYXlfY29uc3RydWN0b3IgKGN0eHQs CisJCQkJCQkJCSAgMCwKKwkJCQkJCQkJICBhcnJfdHlwZSwKKwkJCQkJCQkJICAyLAorCQkJCQkJ CQkgIHZhbHVlcyk7CisgICAgZ2NjX2ppdF9sdmFsdWUgKmZvbyA9ICBnY2Nfaml0X2NvbnRleHRf bmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQ T1JURUQsCisgICAgICBhcnJfdHlwZSwKKyAgICAgICJnbG9iYWxfcGludGFycl94Mnh4Iik7Cisg ICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoZm9vLCBjdG9yKTsKKyAg fQorICB7IC8qIGNoYXIgZm9vWzRdID0geydxJywndycsJ2UnLDB9OyAqLworCisgICAgZ2NjX2pp dF90eXBlICphcnJfdHlwZSA9IGdjY19qaXRfY29udGV4dF9uZXdfYXJyYXlfdHlwZSAoY3R4dCwK KwkJCQkJCQkgICAgIDAsCisJCQkJCQkJICAgICBjaGFyX3R5cGUsCisJCQkJCQkJICAgICA0KTsK KworCisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxzW10gPSB7CisgICAgICBnY2Nfaml0X2NvbnRl eHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoIGN0eHQsIGNoYXJfdHlwZSwgJ3EnKSwKKyAgICAgIGdj Y19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICggY3R4dCwgY2hhcl90eXBlLCAndycp LAorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKCBjdHh0LCBjaGFy X3R5cGUsICdlJyksCisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAo IGN0eHQsIGNoYXJfdHlwZSwgMCkKKyAgICB9OworCisgICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3Ig PSBnY2Nfaml0X2NvbnRleHRfbmV3X2FycmF5X2NvbnN0cnVjdG9yIChjdHh0LAorCQkJCQkJCQkg IDAsCisJCQkJCQkJCSAgYXJyX3R5cGUsCisJCQkJCQkJCSAgNCwKKwkJCQkJCQkJICBydmFscyk7 CisgICAgZ2NjX2ppdF9sdmFsdWUgKmZvbyA9ICBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAo CisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAg ICBhcnJfdHlwZSwKKyAgICAgICJnbG9iYWxfY2hhcmFycl9xd2UiKTsKKyAgICBnY2Nfaml0X2ds b2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChmb28sIGN0b3IpOworICB9CisgIHsgLyogaW50 IGZvb1syXVsyXSA9IHt7MSwyfSx7Myw0fX07ICovCisKKyAgICBnY2Nfaml0X3R5cGUgKnJvd190 eXBlID0gZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV90eXBlIChjdHh0LAorCQkJCQkJCSAgICAg MCwKKwkJCQkJCQkgICAgIGludF90eXBlLAorCQkJCQkJCSAgICAgMik7CisKKyAgICBnY2Nfaml0 X3R5cGUgKmFycl90eXBlID0gZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV90eXBlIChjdHh0LAor CQkJCQkJCSAgICAgMCwKKwkJCQkJCQkgICAgIHJvd190eXBlLAorCQkJCQkJCSAgICAgMik7Cisg ICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxzX3JvdzBbXSA9IHsKKyAgICAgIGdjY19qaXRfY29udGV4 dF9uZXdfcnZhbHVlX2Zyb21faW50ICggY3R4dCwgaW50X3R5cGUsIDEpLAorICAgICAgZ2NjX2pp dF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKCBjdHh0LCBpbnRfdHlwZSwgMikKKyAgICB9 OworICAgIGdjY19qaXRfcnZhbHVlICpydmFsc19yb3cxW10gPSB7CisgICAgICBnY2Nfaml0X2Nv bnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoIGN0eHQsIGludF90eXBlLCAzKSwKKyAgICAgIGdj Y19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICggY3R4dCwgaW50X3R5cGUsIDQpCisg ICAgfTsKKworICAgIGdjY19qaXRfcnZhbHVlICpjdG9yX3JvdzAgPQorICAgICAgZ2NjX2ppdF9j b250ZXh0X25ld19hcnJheV9jb25zdHJ1Y3RvciAoY3R4dCwKKwkJCQkJICAgICAwLAorCQkJCQkg ICAgIHJvd190eXBlLAorCQkJCQkgICAgIDIsCisJCQkJCSAgICAgcnZhbHNfcm93MCk7CisgICAg Z2NjX2ppdF9ydmFsdWUgKmN0b3Jfcm93MSA9CisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2Fy cmF5X2NvbnN0cnVjdG9yIChjdHh0LAorCQkJCQkgICAgIDAsCisJCQkJCSAgICAgcm93X3R5cGUs CisJCQkJCSAgICAgMiwKKwkJCQkJICAgICBydmFsc19yb3cxKTsKKyAgICBnY2Nfaml0X3J2YWx1 ZSAqY3RvcnNfcm93W10gPSB7Y3Rvcl9yb3cwLCBjdG9yX3JvdzF9OworCisgICAgZ2NjX2ppdF9y dmFsdWUgKmN0b3JfYXJyID0KKyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfYXJyYXlfY29uc3Ry dWN0b3IgKGN0eHQsCisJCQkJCSAgICAgMCwKKwkJCQkJICAgICBhcnJfdHlwZSwKKwkJCQkJICAg ICAyLAorCQkJCQkgICAgIGN0b3JzX3Jvdyk7CisKKyAgICBnY2Nfaml0X2x2YWx1ZSAqZm9vID0g IGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBH Q0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICAgIGFycl90eXBlLAorICAgICAgImdsb2JhbF9p bnQyeDJtYXRyaXhfMTIzNCIpOworCisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVy X3J2YWx1ZSAoZm9vLCBjdG9yX2Fycik7CisgIH0KKyAgeyAvKiBjb25zdCBjaGFyICpmb29bNF0g PSB7InF3ZSIsICJhc2QifTsgKi8KKworICAgIGdjY19qaXRfdHlwZSAqYXJyX3R5cGUgPSBnY2Nf aml0X2NvbnRleHRfbmV3X2FycmF5X3R5cGUgKGN0eHQsCisJCQkJCQkJICAgICAwLAorCQkJCQkJ CSAgICAgY3BjaGFyX3R5cGUsCisJCQkJCQkJICAgICA0KTsKKworCisgICAgZ2NjX2ppdF9ydmFs dWUgKnJ2YWxzW10gPSB7CisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3N0cmluZ19saXRlcmFs IChjdHh0LCAicXdlIiksCisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3N0cmluZ19saXRlcmFs IChjdHh0LCAiYXNkIikKKyAgICB9OworCisgICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nf aml0X2NvbnRleHRfbmV3X2FycmF5X2NvbnN0cnVjdG9yIChjdHh0LAorCQkJCQkJCQkgIDAsCisJ CQkJCQkJCSAgYXJyX3R5cGUsCisJCQkJCQkJCSAgMiwKKwkJCQkJCQkJICBydmFscyk7CisgICAg Z2NjX2ppdF9sdmFsdWUgKmZvbyA9ICBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoCisgICAg ICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAgICBhcnJf dHlwZSwKKyAgICAgICJnbG9iYWxfY3BjaGFyYXJyX3F3ZV9hc2QiKTsKKyAgICBnY2Nfaml0X2ds b2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChmb28sIGN0b3IpOworICB9CisgIHsgLyogY29u c3QgaW50IGZvbyA9IDM7CisgICAgICAgaW50IGJhciA9IGZvbzsKKyAgICAgKi8KKyAgICBnY2Nf aml0X2x2YWx1ZSAqZm9vID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0 eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICAgIGdjY19qaXRf dHlwZV9nZXRfY29uc3QgKGludF90eXBlKSwKKyAgICAgICJnbG9iYWxfY29uc3RfaW50XzMiKTsK KyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbDMgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9m cm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwgMyk7CisgICAgZ2NjX2ppdF9nbG9iYWxf c2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoZm9vLAorCXJ2YWwzKTsKKyAgICBnY2Nfaml0X2x2YWx1 ZSAqYmFyID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQsIE5VTEws CisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICAgIGludF90eXBlLAorICAgICAg Imdsb2JhbF9sdmFsdWVpbml0X2ludF8zIik7CisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRp YWxpemVyX3J2YWx1ZSAoYmFyLAorCQkJCQkgICBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUgKGZv bykpOworICB9CisgIHsgLyogaW50IGZvbyA9IDMgKiAyOworICAgICAgIGludCBhcnJbXSA9IHsx LDIsMyw0fTsKKyAgICAgICBpbnQgKmJhciA9ICZhcnJbMl0gKyAxCisKKyAgICAgICBFeGFtcGxl IGluIHRoZSBkb2NzLgorICAgICAqLworCisgICAgZ2NjX2ppdF90eXBlICphcnJfdHlwZSA9IGdj Y19qaXRfY29udGV4dF9uZXdfYXJyYXlfdHlwZSAoY3R4dCwKKwkJCQkJCQkgICAgIDAsCisJCQkJ CQkJICAgICBpbnRfdHlwZSwKKwkJCQkJCQkgICAgIDQpOworICAgIGdjY19qaXRfcnZhbHVlICpy dmFsXzEgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0 LCBpbnRfdHlwZSwgMSk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfMiA9IGdjY19qaXRfY29u dGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCAyKTsKKyAg ICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF8zID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJv bV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDMpOworICAgIGdjY19qaXRfcnZhbHVlICpy dmFsXzQgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0 LCBpbnRfdHlwZSwgNCk7CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqdmFsdWVzW10gPSB7cnZhbF8x LCBydmFsXzIsIHJ2YWxfMywgcnZhbF80fTsKKworICAgIGdjY19qaXRfcnZhbHVlICpjdG9yID0g Z2NjX2ppdF9jb250ZXh0X25ld19hcnJheV9jb25zdHJ1Y3RvciAoY3R4dCwKKwkJCQkJCQkJICAw LAorCQkJCQkJCQkgIGFycl90eXBlLAorCQkJCQkJCQkgIDQsCisJCQkJCQkJCSAgdmFsdWVzKTsK KyAgICBnY2Nfaml0X2x2YWx1ZSAqZ2xvYmFsX2ludGFycl8xMjM0ID0KKyAgICAgIGdjY19qaXRf Y29udGV4dF9uZXdfZ2xvYmFsIChjdHh0LCBOVUxMLAorCQkJCSAgR0NDX0pJVF9HTE9CQUxfRVhQ T1JURUQsCisJCQkJICBhcnJfdHlwZSwKKwkJCQkgICJnbG9iYWxfaW50YXJyXzEyMzRfMiIpOwor CisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoZ2xvYmFsX2ludGFy cl8xMjM0LCBjdG9yKTsKKworICAgIGdjY19qaXRfbHZhbHVlICpiYXIgPQorICAgICAgZ2NjX2pp dF9jb250ZXh0X25ld19nbG9iYWwgKGN0eHQsIE5VTEwsCisJCQkJICBHQ0NfSklUX0dMT0JBTF9F WFBPUlRFRCwKKwkJCQkgIGludF90eXBlLAorCQkJCSAgImdsb2JhbF9pbnRfNiIpOworICAgIGdj Y19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWUKKyAgICAgIChiYXIsCisgICAgICAg Z2NjX2ppdF9jb250ZXh0X25ld19iaW5hcnlfb3AKKwkgKGN0eHQsIDAsIEdDQ19KSVRfQklOQVJZ X09QX01VTFQsCisJICBpbnRfdHlwZSwKKwkgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zy b21faW50IChjdHh0LCBpbnRfdHlwZSwgMyksCisJICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1 ZV9mcm9tX2ludCAoY3R4dCwgaW50X3R5cGUsIDIpKSk7CisKKyAgICBnY2Nfaml0X2x2YWx1ZSAq cGZvbyA9CisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2dsb2JhbCAoY3R4dCwgTlVMTCwKKwkJ CQkgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorCQkJCSAgZ2NjX2ppdF90eXBlX2dldF9wb2lu dGVyIChpbnRfdHlwZSksCisJCQkJICAiZ2xvYmFsX3BpbnRfNCIpOworICAgIC8qIGludCAqYmFy ID0gJmFyclsyXSArIDE7CisKKyAgICAgICBJbiBwcmFjdGljZSB3ZSBjb3VsZCBqdXN0IGRvICZm b29bM10KKyAgICAgICBidXQganVzdCBwcm92ZSBmb2xkaW5nIHRoaXMgd29ya3MuICovCisgICAg Z2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoCisgICAgICAgcGZvbywKKyAg ICAgICBnY2Nfaml0X2x2YWx1ZV9nZXRfYWRkcmVzcyAoCisJIGdjY19qaXRfY29udGV4dF9uZXdf YXJyYXlfYWNjZXNzICgKKwkgICBjdHh0LCAwLAorCSAgIGdjY19qaXRfbHZhbHVlX2dldF9hZGRy ZXNzICgKKwkgICAgIGdjY19qaXRfY29udGV4dF9uZXdfYXJyYXlfYWNjZXNzICgKKwkgICAgICAg Y3R4dCwgMCwKKwkgICAgICAgZ2NjX2ppdF9sdmFsdWVfYXNfcnZhbHVlIChnbG9iYWxfaW50YXJy XzEyMzQpLAorCSAgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoY3R4 dCwgaW50X3R5cGUsIDIpKSwKKwkgICAgICAgMCksCisJICAgZ2NjX2ppdF9jb250ZXh0X25ld19y dmFsdWVfZnJvbV9pbnQgKGN0eHQsIGludF90eXBlLCAxKSksCisJICAgMCkpOworICB9CisgIHsg LyogIHN0YXRpYyBpbnQgYmFyID0gMTE7CisJaW50IGZvbyAoKSB7IHJldHVybiBiYXI7IH0gKi8K KworICAgIGdjY19qaXRfbHZhbHVlICpiYXIgPSAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwg KAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0lOVEVSTkFMLAorICAg ICAgaW50X3R5cGUsCisgICAgICAiZ2xvYmFsX3N0YXRpY19pbnRfMTEiKTsKKyAgICBnY2Nfaml0 X3J2YWx1ZSAqcnZhbDEgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisg ICAgICBjdHh0LCBpbnRfdHlwZSwgMTEpOworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFs aXplcl9ydmFsdWUgKGJhciwKKwlydmFsMSk7CisKKyAgICBnY2Nfaml0X2Z1bmN0aW9uICpmbjEx ID0KKyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfZnVuY3Rpb24gKGN0eHQsCisJCQkJICAgIDAs CisJCQkJICAgIEdDQ19KSVRfRlVOQ1RJT05fRVhQT1JURUQsCisJCQkJICAgIGludF90eXBlLAor CQkJCSAgICAiZm5faW50XzExIiwKKwkJCQkgICAgMCwKKwkJCQkgICAgMCwKKwkJCQkgICAgMCk7 CisgICAgZ2NjX2ppdF9ibG9jayAqYmxvY2sgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAo Zm4xMSwgInN0YXJ0Iik7CisKKyAgICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRoX3JldHVybiAoYmxv Y2ssCisJCQkJICAgMCwKKwkJCQkgICBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUoYmFyKSk7Cisg IH0KKyAgeyAvKiBzdGF0aWMgY29uc3QgaW50IGNiYXIgPSAxMTsKKyAgICAgICBpbnQgY2ZvbyAo KSB7IHJldHVybiBjYmFyOyB9ICovCisKKyAgICBnY2Nfaml0X2x2YWx1ZSAqYmFyID0gIGdjY19q aXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklU X0dMT0JBTF9JTlRFUk5BTCwKKyAgICAgIGdjY19qaXRfdHlwZV9nZXRfY29uc3QgKGludF90eXBl KSwKKyAgICAgICJnbG9iYWxfc3RhdGljX2NpbnRfMTEiKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAq cnZhbDEgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0 LCBpbnRfdHlwZSwgMTEpOworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFs dWUgKGJhciwKKwlydmFsMSk7CisKKyAgICBnY2Nfaml0X2Z1bmN0aW9uICpmbjExID0KKyAgICAg IGdjY19qaXRfY29udGV4dF9uZXdfZnVuY3Rpb24gKGN0eHQsCisJCQkJICAgIDAsCisJCQkJICAg IEdDQ19KSVRfRlVOQ1RJT05fRVhQT1JURUQsCisJCQkJICAgIGludF90eXBlLAorCQkJCSAgICAi Zm5fY2ludF8xMSIsCisJCQkJICAgIDAsCisJCQkJICAgIDAsCisJCQkJICAgIDApOworICAgIGdj Y19qaXRfYmxvY2sgKmJsb2NrID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKGZuMTEsICJz dGFydCIpOworCisgICAgZ2NjX2ppdF9ibG9ja19lbmRfd2l0aF9yZXR1cm4gKGJsb2NrLAorCQkJ CSAgIDAsCisJCQkJICAgZ2NjX2ppdF9sdmFsdWVfYXNfcnZhbHVlKGJhcikpOworICB9CisgIHsg Lyogc3RhdGljIGNvbnN0IGludCBjYmFyID0gMTI7CisgICAgICAgY29uc3QgaW50KiBjZm9vICgp IHsgcmV0dXJuICZjYmFyOyB9ICovCisKKyAgICBnY2Nfaml0X2x2YWx1ZSAqYmFyID0gIGdjY19q aXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklU X0dMT0JBTF9JTlRFUk5BTCwKKyAgICAgIGdjY19qaXRfdHlwZV9nZXRfY29uc3QgKGludF90eXBl KSwKKyAgICAgICJnbG9iYWxfc3RhdGljX2NpbnRfMTIiKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAq cnZhbDEgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0 LCBpbnRfdHlwZSwgMTIpOworICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFs dWUgKGJhciwKKwlydmFsMSk7CisKKyAgICBnY2Nfaml0X2Z1bmN0aW9uICpmbjExID0KKyAgICAg IGdjY19qaXRfY29udGV4dF9uZXdfZnVuY3Rpb24gKGN0eHQsCisJCQkJICAgIDAsCisJCQkJICAg IEdDQ19KSVRfRlVOQ1RJT05fRVhQT1JURUQsCisJCQkJICAgIGdjY19qaXRfdHlwZV9nZXRfcG9p bnRlcihpbnRfdHlwZSksCisJCQkJICAgICJmbl9jaW50XzEyIiwKKwkJCQkgICAgMCwKKwkJCQkg ICAgMCwKKwkJCQkgICAgMCk7CisKKyAgICBnY2Nfaml0X2Jsb2NrICpibG9jayA9IGdjY19qaXRf ZnVuY3Rpb25fbmV3X2Jsb2NrIChmbjExLCAic3RhcnQiKTsKKworICAgIGdjY19qaXRfYmxvY2tf ZW5kX3dpdGhfcmV0dXJuIChibG9jaywKKwkJCQkgICAwLAorCQkJCSAgIGdjY19qaXRfbHZhbHVl X2dldF9hZGRyZXNzIChiYXIsIDApKTsKKyAgfQorICB7IC8qIGNvbnN0IGludCBmb28gPSAzOwor ICAgICAgIHNob3J0IGJhciA9IChzaG9ydClmb287CisKKyAgICAgICBBc3N1cmUgY2FzdHMgZm9s ZAorICAgICAqLworICAgIGdjY19qaXRfbHZhbHVlICpmb28gPSAgZ2NjX2ppdF9jb250ZXh0X25l d19nbG9iYWwgKAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9S VEVELAorICAgICAgZ2NjX2ppdF90eXBlX2dldF9jb25zdCAoaW50X3R5cGUpLAorICAgICAgImds b2JhbF9jb25zdF9pbnRfNCIpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsMyA9IGdjY19qaXRf Y29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCAzKTsK KyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChmb28sCisJcnZhbDMp OworICAgIGdjY19qaXRfbHZhbHVlICpiYXIgPSAgZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwg KAorICAgICAgY3R4dCwgTlVMTCwKKyAgICAgIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVELAorICAg ICAgc2hvcnRfdHlwZSwKKyAgICAgICJnbG9iYWxfbHZhbHVlaW5pdF9zaG9ydF8zIik7CisgICAg Z2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoCisgICAgICBiYXIsCisgICAg ICBnY2Nfaml0X2NvbnRleHRfbmV3X2Nhc3QoIGN0eHQsIDAsCisJCQkJZ2NjX2ppdF9sdmFsdWVf YXNfcnZhbHVlIChmb28pLAorCQkJCXNob3J0X3R5cGUpKTsKKyAgfQorICB7IC8qIGNvbnN0IGlu dCBmb28gPSAzOworICAgICAgIGNvbnN0IGludCBjb25zdCAqYmFyID0gJmZvbzsgKi8KKyAgICBn Y2Nfaml0X2x2YWx1ZSAqZm9vID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAg IGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICAgIGdjY19q aXRfdHlwZV9nZXRfY29uc3QgKGludF90eXBlKSwKKyAgICAgICJnbG9iYWxfY29uc3RfaW50XzYi KTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbDMgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1 ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwgMyk7CisgICAgZ2NjX2ppdF9nbG9i YWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAoZm9vLAorCXJ2YWwzKTsKKyAgICBnY2Nfaml0X2x2 YWx1ZSAqYmFyID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQsIE5V TEwsCisgICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICAgIGdjY19qaXRfdHlwZV9n ZXRfY29uc3QgKAorCWdjY19qaXRfdHlwZV9nZXRfcG9pbnRlciAoCisJICBnY2Nfaml0X3R5cGVf Z2V0X2NvbnN0ICgKKwkgICAgaW50X3R5cGUpKSksCisgICAgICAiZ2xvYmFsX2x2YWx1ZWluaXRf Y3BjaW50XzMiKTsKKyAgICBnY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlICgK KyAgICAgIGJhciwKKyAgICAgIGdjY19qaXRfbHZhbHVlX2dldF9hZGRyZXNzIChmb28sIDApKTsK KyAgfQorICB7IC8qIGNvbnN0IGludCBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoNjQpKSkgZm9v ID0gMzsKKyAgICAgICBpbnQgYmFyID0gZm9vOworCisgICAgICAgQXNzdXJlIGFsaWduZW1lbnQg ZG9lcyBub3QgbWFrZSB0aGUgY29uc3RhbnQgIm1pc3MiCisgICAgICAgb3Igc29tZXRoaW5nIHN0 cmFuZ2UuCisgICAgICovCisgICAgZ2NjX2ppdF9sdmFsdWUgKmZvbyA9ICBnY2Nfaml0X2NvbnRl eHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxf RVhQT1JURUQsCisgICAgICBnY2Nfaml0X3R5cGVfZ2V0X2NvbnN0IChnY2Nfaml0X3R5cGVfZ2V0 X2FsaWduZWQgKGludF90eXBlLCA2NCkpLAorICAgICAgImdsb2JhbF9jb25zdF9pbnRfNyIpOwor ICAgIGdjY19qaXRfcnZhbHVlICpydmFsID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJv bV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDQpOworICAgIGdjY19qaXRfZ2xvYmFsX3Nl dF9pbml0aWFsaXplcl9ydmFsdWUgKGZvbywKKwlydmFsKTsKKyAgICBnY2Nfaml0X2x2YWx1ZSAq YmFyID0gIGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICAgIGN0eHQsIE5VTEwsCisg ICAgICBHQ0NfSklUX0dMT0JBTF9FWFBPUlRFRCwKKyAgICAgIGludF90eXBlLAorICAgICAgImds b2JhbF9sdmFsdWVpbml0X2ludF80Iik7CisgICAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxp emVyX3J2YWx1ZSAoYmFyLAorCQkJCQkgICBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUgKGZvbykp OworICB9CisgIHsKKyAgICAvKiB1bmlvbiB1cGludHNpemUgeyBzaXplX3QgczsgaW50ICpwIH0g dSA9IHsucyA9IDB4RUVFRkJFRUZ9OyAqLworICAgIGdjY19qaXRfZmllbGQgKmYxID0gZ2NjX2pp dF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAgIDAsCisJCQkJCQkgICBzaXplX3R5 cGUsCisJCQkJCQkgICAicyIpOworICAgIGdjY19qaXRfZmllbGQgKmYyID0gZ2NjX2ppdF9jb250 ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkJCSAgIDAsCisJCQkJCQkgICBwaW50X3R5cGUsCisJ CQkJCQkgICAicCIpOworICAgIGdjY19qaXRfZmllbGQgKmZpZWxkczFbXSA9IHtmMSwgZjJ9Owor CisgICAgZ2NjX2ppdF90eXBlICp1YmFyID0gZ2NjX2ppdF9jb250ZXh0X25ld191bmlvbl90eXBl IChjdHh0LAorCQkJCQkJCSAwLAorCQkJCQkJCSAidXBpbnRzaXplIiwKKwkJCQkJCQkgMiwKKwkJ CQkJCQkgZmllbGRzMSk7CisgICAgZ2NjX2ppdF9sdmFsdWUgKmZvbyA9ICBnY2Nfaml0X2NvbnRl eHRfbmV3X2dsb2JhbCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9HTE9CQUxf RVhQT1JURUQsCisgICAgICBnY2Nfaml0X3R5cGVfZ2V0X2NvbnN0ICh1YmFyKSwKKyAgICAgICJn bG9iYWxfY29uc3RfdXBpbnRzaXplXzEiKTsKKworICAgIGdjY19qaXRfcnZhbHVlICp2YWwgPSBn Y2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2xvbmcgKAorICAgICAgY3R4dCwgc2l6ZV90 eXBlLCAweEVFRUZCRUVGKTsKKworICAgIGdjY19qaXRfcnZhbHVlICpjdG9yID0KKyAgICAgIGdj Y19qaXRfY29udGV4dF9uZXdfdW5pb25fY29uc3RydWN0b3IgKGN0eHQsCisJCQkJCSAgICAgMCwK KwkJCQkJICAgICB1YmFyLAorCQkJCQkgICAgIGYxLAorCQkJCQkgICAgIHZhbCk7CisKKyAgICBn Y2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlIChmb28sIGN0b3IpOworICB9Cit9 CisKK3N0cnVjdCBmaSB7CisgIGZsb2F0IGY7CisgIGludCBpOworfTsKKworc3RydWN0IGJhcjEg eworICBmbG9hdCBmZjsKKyAgc3RydWN0IGZpIGZpOworICBpbnQgaWk7Cit9OworCit1bmlvbiB1 YmFyMSB7CisgIGZsb2F0IGZmOworICBpbnQgaWk7Cit9OworCit1bmlvbiB1cGludHNpemUgewor ICBzaXplX3QgczsKKyAgaW50ICpwOworfTsKKworaW50IHRlc3RfYWxpZ25lZDY0X3dvcmtzX2lu X2xpbmtlcl8xIF9fYXR0cmlidXRlX18gKChhbGlnbmVkICg2NCkpKSA9IDA7CitpbnQgdGVzdF9h bGlnbmVkNjRfd29ya3NfaW5fbGlua2VyXzIgX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDY0KSkp ID0gMDsKKwordm9pZAordmVyaWZ5X2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgZ2NjX2pp dF9yZXN1bHQgKnJlc3VsdCkKK3sKKyAgQ0hFQ0tfTk9OX05VTEwgKHJlc3VsdCk7CisKKyAgewor ICAgIHN0cnVjdCBmaSAqZmkgPSBnY2Nfaml0X3Jlc3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQsICJn bG9iYWxfc3RydWN0X2ZpXzIzXzEiKTsKKworICAgIENIRUNLX1ZBTFVFIChmaS0+ZiwgMik7Cisg ICAgQ0hFQ0tfVkFMVUUgKGZpLT5pLCAzKTsKKyAgfQorICB7CisgICAgc3RydWN0IGZpICpmaSA9 IGdjY19qaXRfcmVzdWx0X2dldF9nbG9iYWwgKHJlc3VsdCwgImdsb2JhbF9zdHJ1Y3RfZmlfMjNf MiIpOworCisgICAgQ0hFQ0tfVkFMVUUgKGZpLT5mLCAyKTsKKyAgICBDSEVDS19WQUxVRSAoZmkt PmksIDMpOworICB9CisgIHsKKyAgICBzdHJ1Y3QgZmkgKmZpID0gZ2NjX2ppdF9yZXN1bHRfZ2V0 X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX3N0cnVjdF9maV8zIik7CisKKyAgICBDSEVDS19WQUxV RSAoZmktPmYsIDIgKiAyKTsKKyAgICBDSEVDS19WQUxVRSAoZmktPmksIDMpOworICB9CisgIHsK KyAgICBzdHJ1Y3QgZmkgKmZpID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAi Z2xvYmFsX3N0cnVjdF9maV8wMF8xIik7CisKKyAgICBDSEVDS19WQUxVRSAoZmktPmYsIDApOwor ICAgIENIRUNLX1ZBTFVFIChmaS0+aSwgMCk7CisgIH0KKyAgeworICAgIHN0cnVjdCBmaSAqZmkg PSBnY2Nfaml0X3Jlc3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQsICJnbG9iYWxfc3RydWN0X2ZpXzAw XzIiKTsKKworICAgIENIRUNLX1ZBTFVFIChmaS0+ZiwgMCk7CisgICAgQ0hFQ0tfVkFMVUUgKGZp LT5pLCAwKTsKKyAgfQorICB7CisgICAgc3RydWN0IGZpICpmaSA9IGdjY19qaXRfcmVzdWx0X2dl dF9nbG9iYWwgKHJlc3VsdCwgImdsb2JhbF9zdHJ1Y3RfZmlfMF8xIik7CisKKyAgICBDSEVDS19W QUxVRSAoZmktPmYsIDApOworICAgIENIRUNLX1ZBTFVFIChmaS0+aSwgMCk7CisgIH0KKyAgewor ICAgIHN0cnVjdCBmaSAqZmkgPSBnY2Nfaml0X3Jlc3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQsICJn bG9iYWxfc3RydWN0X2ZpXzBfMiIpOworCisgICAgQ0hFQ0tfVkFMVUUgKGZpLT5mLCAwKTsKKyAg ICBDSEVDS19WQUxVRSAoZmktPmksIDApOworICB9CisgIHsKKyAgICBzdHJ1Y3QgZmkgKmZpID0g Z2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX3N0cnVjdF9maV82Iik7 CisKKyAgICBDSEVDS19WQUxVRSAoZmktPmYsIDApOworICAgIENIRUNLX1ZBTFVFIChmaS0+aSwg MCk7CisgIH0KKyAgeworICAgIHN0cnVjdCBiYXIxICpiYXIgPQorICAgICAgZ2NjX2ppdF9yZXN1 bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX3N0cnVjdF9iYXJfMTIzNF8xIik7CisKKyAg ICBDSEVDS19WQUxVRSAoYmFyLT5mZiwgMSk7CisgICAgQ0hFQ0tfVkFMVUUgKGJhci0+ZmkuZiwg Mik7CisgICAgQ0hFQ0tfVkFMVUUgKGJhci0+ZmkuaSwgMyk7CisgICAgQ0hFQ0tfVkFMVUUgKGJh ci0+aWksIDQpOworICB9CisgIHsKKyAgICBzdHJ1Y3QgYmFyMSAqYmFyID0KKyAgICAgIGdjY19q aXRfcmVzdWx0X2dldF9nbG9iYWwgKHJlc3VsdCwgImdsb2JhbF9zdHJ1Y3RfYmFyXzEyMzRfMiIp OworCisgICAgQ0hFQ0tfVkFMVUUgKGJhci0+ZmYsIDEpOworICAgIENIRUNLX1ZBTFVFIChiYXIt PmZpLmYsIDIpOworICAgIENIRUNLX1ZBTFVFIChiYXItPmZpLmksIDMpOworICAgIENIRUNLX1ZB TFVFIChiYXItPmlpLCA0KTsKKyAgfQorICB7CisgICAgdW5pb24gdWJhcjEgKmZvbyA9IGdjY19q aXRfcmVzdWx0X2dldF9nbG9iYWwgKHJlc3VsdCwKKwkJCQkJCSAgImdsb2JhbF91bmlvbl91Zm9v X2ZmMyIpOworICAgIENIRUNLX1ZBTFVFIChmb28tPmZmLCAzKTsKKyAgfQorICB7CisgICAgdW5p b24gdWJhcjEgKmZvbyA9IGdjY19qaXRfcmVzdWx0X2dldF9nbG9iYWwgKHJlc3VsdCwKKwkJCQkJ CSAgImdsb2JhbF91bmlvbl91Zm9vX2lpMiIpOworICAgIENIRUNLX1ZBTFVFIChmb28tPmlpLCAy KTsKKyAgfQorICB7CisgICAgdW5pb24gdWJhcjEgKmZvbyA9IGdjY19qaXRfcmVzdWx0X2dldF9n bG9iYWwgKHJlc3VsdCwKKwkJCQkJCSAgImdsb2JhbF91bmlvbl91Zm9vXzAiKTsKKyAgICBDSEVD S19WQUxVRSAoZm9vLT5paSwgMCk7CisgIH0KKyAgeworICAgIHVuaW9uIHViYXIxICpmb28gPSBn Y2Nfaml0X3Jlc3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQsCisJCQkJCQkgICJnbG9iYWxfdW5pb25f dWZvb19mZjFjMSIpOworICAgIENIRUNLX1ZBTFVFIChmb28tPmZmLCAxLjFmKTsKKyAgfQorCisg IHsKKyAgICBpbnQgKmZvbyA9IGdjY19qaXRfcmVzdWx0X2dldF9nbG9iYWwgKHJlc3VsdCwgImds b2JhbF9pbnQxXzMiKTsKKworICAgIENIRUNLX1ZBTFVFICgqZm9vLCAzKTsKKyAgfQorICB7Cisg ICAgaW50ICpmb28gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQsICJnbG9iYWxf Y3ZpbnQxXzMiKTsKKworICAgIENIRUNLX1ZBTFVFICgqZm9vLCAzKTsKKyAgfQorICB7CisgICAg aW50ICpmb28gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQsICJnbG9iYWxfaW50 Ml8zIik7CisKKyAgICBDSEVDS19WQUxVRSAoKmZvbywgMyk7CisgIH0KKyAgeworICAgIGludCAq Zm9vID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX2ludDNfMTgi KTsKKworICAgIENIRUNLX1ZBTFVFICgqZm9vLCAxOCk7CisgIH0KKyAgeworICAgIGludCAqZm9v ID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX2ludF9hbG90b2Zv cGVyYXRvcnMiKTsKKworICAgIENIRUNLX1ZBTFVFICgqZm9vLCB+KC0oKCgoKCgyIHwgOCkgJiAx NSkgXiAwKSA8PCAzID4+IDIpIC0gMSkgLyAyKSkpOworICB9CisgIHsKKyAgICBpbnQgKmZvbyA9 IGdjY19qaXRfcmVzdWx0X2dldF9nbG9iYWwgKHJlc3VsdCwgImdsb2JhbF9pbnQ0XzMiKTsKKyAg ICBpbnQgKipwZm9vID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFs X3BpbnQ1Iik7CisKKyAgICBDSEVDS19WQUxVRSAoKmZvbywgMyk7CisgICAgQ0hFQ0tfVkFMVUUg KGZvbywgKnBmb28pOworICAgIENIRUNLX1ZBTFVFICgqKnBmb28sIDMpOworICB9CisgIHsKKyAg ICBpbnQgKiAoKmZvbykgKHZvaWQpID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwg ImZuX3BpbnRfMCIpOworICAgIGludCAqKnBmb28gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfZ2xvYmFs IChyZXN1bHQsICJnbG9iYWxfcGludDYiKTsKKworICAgIENIRUNLX1ZBTFVFICgqZm9vICgpLCAw KTsKKyAgICBDSEVDS19WQUxVRSAoZm9vICgpLCAqcGZvbyk7CisgICAgQ0hFQ0tfVkFMVUUgKCoq cGZvbywgMCk7CisgIH0KKyAgeworICAgIGludCAqZm9vID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2ds b2JhbCAocmVzdWx0LCAiZ2xvYmFsX2ludDZfMyIpOworICAgIGludCAqKnBmb28gPSBnY2Nfaml0 X3Jlc3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQsICJnbG9iYWxfcGludDciKTsKKworICAgIENIRUNL X1ZBTFVFICgqZm9vLCAzKTsKKyAgICBDSEVDS19WQUxVRSAoZm9vICsgMSwgKnBmb28pOworICAg IENIRUNLX1ZBTFVFICgqKCpwZm9vIC0gMSksIDMpOworICB9CisgIHsKKyAgICBpbnQgKmZvbyA9 IGdjY19qaXRfcmVzdWx0X2dldF9nbG9iYWwgKHJlc3VsdCwgImdsb2JhbF9sdmFsdWVpbml0X2lu dF8zIik7CisKKyAgICBDSEVDS19WQUxVRSAoKmZvbywgMyk7CisgIH0KKyAgeworICAgIGRvdWJs ZSAqZm9vID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX2RvdWJs ZTFfMyIpOworCisgICAgQ0hFQ0tfVkFMVUUgKCpmb28sIDMpOworICB9CisgIHsKKyAgICBkb3Vi bGUgKmZvbyA9IGdjY19qaXRfcmVzdWx0X2dldF9nbG9iYWwgKHJlc3VsdCwgImdsb2JhbF9kb3Vi bGUyXzEyIik7CisKKyAgICBDSEVDS19WQUxVRSAoKmZvbywgMTIpOworICB9CisgIHsKKyAgICBf Qm9vbCAqZm9vID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX2Jv b2wxXzEiKTsKKworICAgIENIRUNLX1ZBTFVFICgqZm9vLCAxKTsKKyAgfQorICB7CisgICAgaW50 ICpmb28gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQsICJnbG9iYWxfaW50YXJy XzEyMzQiKTsKKworICAgIENIRUNLX1ZBTFVFIChmb29bMF0sIDEpOworICAgIENIRUNLX1ZBTFVF IChmb29bMV0sIDIpOworICAgIENIRUNLX1ZBTFVFIChmb29bMl0sIDMpOworICAgIENIRUNLX1ZB TFVFIChmb29bM10sIDQpOworICB9CisgIHsKKyAgICBmbG9hdCAqZm9vID0gZ2NjX2ppdF9yZXN1 bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX2Zsb2F0YXJyXzEyIik7CisKKyAgICBDSEVD S19WQUxVRSAoZm9vWzBdLCAxKTsKKyAgICBDSEVDS19WQUxVRSAoZm9vWzFdLCAyKTsKKyAgICBD SEVDS19WQUxVRSAoZm9vWzJdLCAwKTsKKyAgICBDSEVDS19WQUxVRSAoZm9vWzNdLCAwKTsKKyAg fQorICB7CisgICAgZmxvYXQgKmZvbyA9IGdjY19qaXRfcmVzdWx0X2dldF9nbG9iYWwgKHJlc3Vs dCwgImdsb2JhbF9mbG9hdGFycl8xMl8yIik7CisKKyAgICBDSEVDS19WQUxVRSAoZm9vWzBdLCAx KTsKKyAgICBDSEVDS19WQUxVRSAoZm9vWzFdLCAyKTsKKyAgICBDSEVDS19WQUxVRSAoZm9vWzJd LCAwKTsKKyAgICBDSEVDS19WQUxVRSAoZm9vWzNdLCAwKTsKKyAgfQorICB7CisgICAgZmxvYXQg KmZvbyA9IGdjY19qaXRfcmVzdWx0X2dldF9nbG9iYWwgKHJlc3VsdCwgImdsb2JhbF9mbG9hdGFy cl8xMjAiKTsKKworICAgIENIRUNLX1ZBTFVFIChmb29bMF0sIDEpOworICAgIENIRUNLX1ZBTFVF IChmb29bMV0sIDIpOworICAgIENIRUNLX1ZBTFVFIChmb29bMl0sIDApOworICAgIENIRUNLX1ZB TFVFIChmb29bM10sIDApOworICB9CisgIHsKKyAgICBmbG9hdCAqZm9vID0gZ2NjX2ppdF9yZXN1 bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX2Zsb2F0YXJyXzAwMDAiKTsKKworICAgIENI RUNLX1ZBTFVFIChmb29bMF0sIDApOworICAgIENIRUNLX1ZBTFVFIChmb29bMV0sIDApOworICAg IENIRUNLX1ZBTFVFIChmb29bMl0sIDApOworICAgIENIRUNLX1ZBTFVFIChmb29bM10sIDApOwor ICB9CisgIHsKKyAgICBmbG9hdCAqZm9vID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVz dWx0LCAiZ2xvYmFsX2Zsb2F0YXJyXzAwMzA1NjAwIik7CisKKyAgICBmbG9hdCBrZXlbXSA9IHsw LDAsMywwLDUsNiwwLDB9OworCisgICAgQ0hFQ0tfVkFMVUUgKG1lbWNtcCAoZm9vLCBrZXksIHNp emVvZiBrZXkpLCAwKTsKKyAgfQorICB7CisgICAgaW50ICoqZm9vID0gZ2NjX2ppdF9yZXN1bHRf Z2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX3BpbnRhcnJfeDJ4eCIpOworCisgICAgQ0hFQ0tf VkFMVUUgKGZvb1swXSwgMCk7CisgICAgQ0hFQ0tfVkFMVUUgKCpmb29bMV0sIDIpOworICB9Cisg IHsKKyAgICBjaGFyICpmb28gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQsICJn bG9iYWxfY2hhcmFycl9xd2UiKTsKKyAgICBjb25zdCBjaGFyICprZXkgPSAicXdlIjsKKyAgICBD SEVDS19WQUxVRSAoc3RyY21wIChmb28sIGtleSksIDApOworICB9CisgIHsKKyAgICBpbnQgKmZv byA9IGdjY19qaXRfcmVzdWx0X2dldF9nbG9iYWwgKHJlc3VsdCwgImdsb2JhbF9pbnQyeDJtYXRy aXhfMTIzNCIpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspCisgICAgICBDSEVD S19WQUxVRSAoZm9vW2ldLCBpICsgMSk7CisgIH0KKyAgeworICAgIGNvbnN0IGNoYXIgKipmb28g PQorICAgICAgZ2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiZ2xvYmFsX2NwY2hh cmFycl9xd2VfYXNkIik7CisKKyAgICBDSEVDS19WQUxVRSAoc3RyY21wIChmb29bMF0sICJxd2Ui KSwgMCk7CisgICAgQ0hFQ0tfVkFMVUUgKHN0cmNtcCAoZm9vWzFdLCAiYXNkIiksIDApOworICB9 CisgIHsKKyAgICBpbnQgKipwaW50ID0KKyAgICAgIGdjY19qaXRfcmVzdWx0X2dldF9nbG9iYWwg KHJlc3VsdCwgImdsb2JhbF9waW50XzQiKTsKKyAgICBpbnQgKmZvbyA9CisgICAgICBnY2Nfaml0 X3Jlc3VsdF9nZXRfZ2xvYmFsIChyZXN1bHQsICJnbG9iYWxfaW50XzYiKTsKKyAgICBDSEVDS19W QUxVRSAoKipwaW50LCA0KTsKKyAgICBDSEVDS19WQUxVRSAoKmZvbywgNik7CisgIH0KKyAgewor ICAgIGludCAoKmZuKSh2b2lkKSA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJm bl9pbnRfMTEiKTsKKyAgICBDSEVDS19WQUxVRSAoZm4gKCksIDExKTsKKyAgfQorICB7CisgICAg aW50ICgqZm4pKHZvaWQpID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImZuX2Np bnRfMTEiKTsKKyAgICBDSEVDS19WQUxVRSAoZm4gKCksIDExKTsKKyAgfQorICB7CisgICAgc2hv cnQgKmZvbyA9CisgICAgICBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiZ2xvYmFs X2x2YWx1ZWluaXRfc2hvcnRfMyIpOworICAgIENIRUNLX1ZBTFVFICgqZm9vLCAzKTsKKyAgfQor ICB7CisgICAgaW50ICoqZm9vID0KKyAgICAgIGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1 bHQsICJnbG9iYWxfbHZhbHVlaW5pdF9jcGNpbnRfMyIpOworICAgIENIRUNLX1ZBTFVFICgqKmZv bywgMyk7CisgIH0KKyAgeworICAgIGludCAqZm9vID0KKyAgICAgIGdjY19qaXRfcmVzdWx0X2dl dF9jb2RlIChyZXN1bHQsICJnbG9iYWxfbHZhbHVlaW5pdF9pbnRfNCIpOworICAgIENIRUNLX1ZB TFVFICgqZm9vLCA0KTsKKworICAgIGludCAqYmFyID0KKyAgICAgIGdjY19qaXRfcmVzdWx0X2dl dF9jb2RlIChyZXN1bHQsICJnbG9iYWxfY29uc3RfaW50XzciKTsKKyAgICBDSEVDS19WQUxVRSAo KmJhciwgNCk7CisgICAgLyogVGhlIGxpbmtlciBkb2VzIG5vdCBoYXZlIHRvIHN1cHBvcnQgdXAg dG8gNjQgYWxpZ25tZW50LCBzbyB0ZXN0IHRoYXQKKyAgICAgICBpdCBkb2VzIGJlZm9yZSB0ZXN0 aW5nIHRoYXQgaXQgd29ya3MgaW4gbGliZ2Njaml0LiAqLworICAgIGlmICgoc2l6ZV90KSAmdGVz dF9hbGlnbmVkNjRfd29ya3NfaW5fbGlua2VyXzEgJSA2NCA9PSAwICYmCisJKHNpemVfdCkgJnRl c3RfYWxpZ25lZDY0X3dvcmtzX2luX2xpbmtlcl8yICUgNjQgPT0gMCkKKyAgICAgIENIRUNLX1ZB TFVFICgoc2l6ZV90KSBiYXIgJSA2NCwgMCk7IC8qIF9fYXR0cmlidXRlX18gKChhbGlnbmVkICg2 NCkpKSAqLworICB9CisgIHsKKyAgICB1bmlvbiB1cGludHNpemUgKmZvbyA9CisgICAgICBnY2Nf aml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiZ2xvYmFsX2NvbnN0X3VwaW50c2l6ZV8xIik7 CisgICAgQ0hFQ0tfVkFMVUUgKGZvby0+cCwgKHZvaWQqKTB4RUVFRkJFRUYpOworICB9Cit9CmRp ZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWxvY2FsLWluaXQtcnZhbHVlLmMg Yi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWxvY2FsLWluaXQtcnZhbHVlLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjBkY2M3NzEzNzliCi0tLSAvZGV2L251bGwK KysrIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1sb2NhbC1pbml0LXJ2YWx1ZS5jCkBAIC0w LDAgKzEsNjE0IEBACisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJsaWJnY2NqaXQuaCIK KyNpbmNsdWRlICJoYXJuZXNzLmgiCisKKy8qIFRoaXMgdGVzdGNhc2UgY2hlY2tzIHRoYXQgZ2Nj X2ppdF9jb250ZXh0X25ld19jb25zdHJ1Y3RvcigpIHdvcmtzCisgICB3aXRoIGxvY2Fscy4gVGVz dHMgdGhhdCBjb25zdHJ1Y3RvcnMgY2FuIGJlIHVzZWQgYXMgcmV0dXJuCisgICB2YWx1ZXMgb3Ig ZnVuY3Rpb24gY2FsbCB2YWx1ZXMuIFRlc3QgdGhhdCBjb25zdHJ1Y3RvcnMgY2FuIGhhdmUgc2lk ZQorICAgZWZmZWN0cyBhbmQgYmUgYXNzaWduZWQgdG8gbG9jYWxzLgorICovCisKK3ZvaWQKK2Ny ZWF0ZV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAg Z2NjX2ppdF90eXBlICppbnRfdHlwZSA9IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwK KyAgICBHQ0NfSklUX1RZUEVfSU5UKTsKKyAgZ2NjX2ppdF90eXBlICpwaW50X3R5cGUgPSBnY2Nf aml0X3R5cGVfZ2V0X3BvaW50ZXIgKGludF90eXBlKTsKKyAgZ2NjX2ppdF90eXBlICpkb3VibGVf dHlwZSA9IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwKKyAgICBHQ0NfSklUX1RZUEVf RE9VQkxFKTsKKyAgZ2NjX2ppdF90eXBlICpmbG9hdF90eXBlID0gZ2NjX2ppdF9jb250ZXh0X2dl dF90eXBlIChjdHh0LAorICAgIEdDQ19KSVRfVFlQRV9GTE9BVCk7CisgIGdjY19qaXRfdHlwZSAq Ym9vbF90eXBlID0gZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LAorICAgIEdDQ19KSVRf VFlQRV9CT09MKTsKKyAgZ2NjX2ppdF90eXBlICpjaGFyX3R5cGUgPSBnY2Nfaml0X2NvbnRleHRf Z2V0X3R5cGUgKGN0eHQsCisgICAgR0NDX0pJVF9UWVBFX0NIQVIpOworICBnY2Nfaml0X3R5cGUg KnNpemVfdHlwZSA9IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwKKyAgICBHQ0NfSklU X1RZUEVfU0laRV9UKTsKKyAgZ2NjX2ppdF90eXBlICp2b2lkcHRyX3R5cGUgPSBnY2Nfaml0X2Nv bnRleHRfZ2V0X3R5cGUgKGN0eHQsCisgICAgR0NDX0pJVF9UWVBFX1ZPSURfUFRSKTsKKyAgZ2Nj X2ppdF90eXBlICp2b2lkX3R5cGUgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsCisg ICAgR0NDX0pJVF9UWVBFX1ZPSUQpOworCisgIC8qIE1ha2UgYSBzdHJ1Y3Q6IHN0cnVjdCBmaSB7 IGZsb2F0IGY7IGludCBpO30gKi8KKyAgZ2NjX2ppdF9maWVsZCAqZmlfZiA9IGdjY19qaXRfY29u dGV4dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJCQkgMCwKKwkJCQkJCSBmbG9hdF90eXBlLAorCQkJ CQkJICJmIik7CisgIGdjY19qaXRfZmllbGQgKmZpX2kgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2Zp ZWxkIChjdHh0LAorCQkJCQkJIDAsCisJCQkJCQkgaW50X3R5cGUsCisJCQkJCQkgImkiKTsKKyAg Z2NjX2ppdF9maWVsZCAqZmllbGRzW10gPSB7ZmlfZiwgZmlfaX07CisKKyAgZ2NjX2ppdF90eXBl ICpzdHJ1Y3RfZmlfdHlwZSA9CisgICAgZ2NjX2ppdF9zdHJ1Y3RfYXNfdHlwZSAoCisgICAgICBn Y2Nfaml0X2NvbnRleHRfbmV3X3N0cnVjdF90eXBlIChjdHh0LAorCQkJCSAgICAgICAwLAorCQkJ CSAgICAgICAiZmkiLAorCQkJCSAgICAgICAyLAorCQkJCSAgICAgICBmaWVsZHMpKTsKKworICAv KiBNYWtlIGEgc3RydWN0OgorCisgICAgIHN0cnVjdCBiYXIgeworICAgICAgIGludCBpaTsKKyAg ICAgICBpbnQgYXJyWzUwXTsKKyAgICAgICBmbG9hdCBmZjsKKyAgICAgICBjaGFyIGNjOworICAg ICB9CisgICovCisgIGdjY19qaXRfZmllbGQgKmJhcl9mZiA9IGdjY19qaXRfY29udGV4dF9uZXdf ZmllbGQgKGN0eHQsCisJCQkJICAwLAorCQkJCSAgZmxvYXRfdHlwZSwKKwkJCQkgICJmZiIpOwor ICBnY2Nfaml0X2ZpZWxkICpiYXJfaWkgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0 LAorCQkJCSAgMCwKKwkJCQkgIGludF90eXBlLAorCQkJCSAgImlpIik7CisgIGdjY19qaXRfZmll bGQgKmJhcl9jYyA9IGdjY19qaXRfY29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJICAwLAor CQkJCSAgY2hhcl90eXBlLAorCQkJCSAgImNjIik7CisgIGdjY19qaXRfdHlwZSAqaW50NTBhcnJf dHlwZSA9CisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV90eXBlIChjdHh0LAorCQkJCSAg ICAwLAorCQkJCSAgICBpbnRfdHlwZSwKKwkJCQkgICAgNTApOworICBnY2Nfaml0X2ZpZWxkICpi YXJfZmkgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJIDAsCisJCQkJ CQkgaW50NTBhcnJfdHlwZSwKKwkJCQkJCSAiYXJyIik7CisgIGdjY19qaXRfZmllbGQgKmZpZWxk czJbXSA9IHtiYXJfZmYsIGJhcl9maSwgYmFyX2lpLCBiYXJfY2N9OworCisgIGdjY19qaXRfdHlw ZSAqc3RydWN0X2Jhcl90eXBlID0KKyAgICBnY2Nfaml0X3N0cnVjdF9hc190eXBlICgKKyAgICAg IGdjY19qaXRfY29udGV4dF9uZXdfc3RydWN0X3R5cGUgKGN0eHQsCisJCQkJICAgICAgIDAsCisJ CQkJICAgICAgICJiYXIiLAorCQkJCSAgICAgICA0LAorCQkJCSAgICAgICBmaWVsZHMyKSk7CisK KyAgLyogTWFrZSBhbiB1bmlvbjoKKworICAgICB1bmlvbiB1YmFyIHsKKyAgICAgICBmbG9hdCBm ZjsKKyAgICAgICBpbnQgaWk7CisgICAgIH07CisgICovCisgIGdjY19qaXRfZmllbGQgKnViYXJf ZmYgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJCQkJICAgICAgMCwKKwkJ CQkJCSAgICAgIGZsb2F0X3R5cGUsCisJCQkJCQkgICAgICAiZmYiKTsKKyAgZ2NjX2ppdF9maWVs ZCAqdWJhcl9paSA9IGdjY19qaXRfY29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJCQkgICAg ICAwLAorCQkJCQkJICAgICAgaW50X3R5cGUsCisJCQkJCQkgICAgICAiaWkiKTsKKyAgZ2NjX2pp dF9maWVsZCAqZmllbGRzM1tdID0ge3ViYXJfZmYsIHViYXJfaWl9OworICBnY2Nfaml0X3R5cGUg KnViYXIgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3VuaW9uX3R5cGUgKGN0eHQsCisJCQkJCQkgICAg ICAgMCwKKwkJCQkJCSAgICAgICAidWJhciIsCisJCQkJCQkgICAgICAgMiwKKwkJCQkJCSAgICAg ICBmaWVsZHMzKTsKKworICAodm9pZCkgdWJhcjsKKyAgKHZvaWQpIHN0cnVjdF9iYXJfdHlwZTsK KyAgKHZvaWQpIHN0cnVjdF9maV90eXBlOworICAodm9pZCkgYm9vbF90eXBlOworICAodm9pZCkg ZG91YmxlX3R5cGU7CisgICh2b2lkKSBwaW50X3R5cGU7CisgICh2b2lkKSB2b2lkcHRyX3R5cGU7 CisgICh2b2lkKSBzaXplX3R5cGU7CisKKyAgZ2NjX2ppdF9mdW5jdGlvbiAqZm5faW50XzM7Cisg IHsgLyogaW50IGZvbyAoKSB7IGludCBsb2NhbCA9IDM7IHJldHVybiBsb2NhbDt9ICovCisgICAg Zm5faW50XzMgPQorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwKKwkJ CQkgICAgMCwKKwkJCQkgICAgR0NDX0pJVF9GVU5DVElPTl9FWFBPUlRFRCwKKwkJCQkgICAgaW50 X3R5cGUsCisJCQkJICAgICJmbl9pbnRfMyIsCisJCQkJICAgIDAsCisJCQkJICAgIDAsCisJCQkJ ICAgIDApOworICAgIGdjY19qaXRfYmxvY2sgKmJsb2NrID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdf YmxvY2sgKGZuX2ludF8zLCAic3RhcnQiKTsKKyAgICBnY2Nfaml0X2x2YWx1ZSAqbG9jYWwgPSBn Y2Nfaml0X2Z1bmN0aW9uX25ld19sb2NhbCAoZm5faW50XzMsCisJCQkJCQkJMCwKKwkJCQkJCQlp bnRfdHlwZSwKKwkJCQkJCQkibG9jYWwiKTsKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbCA9IGdj Y19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsIGludF90eXBl LCAzKTsKKworICAgIGdjY19qaXRfYmxvY2tfYWRkX2Fzc2lnbm1lbnQgKGJsb2NrLCAwLCBsb2Nh bCwgcnZhbCk7CisKKyAgICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRoX3JldHVybiAoYmxvY2ssCisJ CQkJICAgMCwKKwkJCQkgICBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUobG9jYWwpKTsKKyAgfQor ICB7IC8qIHN0cnVjdCBmaSBmb28oKSB7IHJldHVybiAoc3RydWN0IGZpKXsxLDJ9O30gKi8KKyAg ICBnY2Nfaml0X2Z1bmN0aW9uICpmbiA9CisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0 aW9uIChjdHh0LAorCQkJCSAgICAwLAorCQkJCSAgICBHQ0NfSklUX0ZVTkNUSU9OX0VYUE9SVEVE LAorCQkJCSAgICBzdHJ1Y3RfZmlfdHlwZSwKKwkJCQkgICAgImZuX2ZpXzFfMiIsCisJCQkJICAg IDAsCisJCQkJICAgIDAsCisJCQkJICAgIDApOworICAgIGdjY19qaXRfYmxvY2sgKmJsb2NrID0g Z2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKGZuLCAic3RhcnQiKTsKKworICAgIGdjY19qaXRf cnZhbHVlICpydmFsX2YxID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAor ICAgICAgY3R4dCwgZmxvYXRfdHlwZSwgMSk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2YWxfaTIg PSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LCBpbnRf dHlwZSwgMik7CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqdmFsc1tdID0geyBydmFsX2YxLCBydmFs X2kyfTsKKyAgICBnY2Nfaml0X2ZpZWxkICpmaWVsZHNbXSA9IHtmaV9mLCBmaV9pfTsKKworICAg IGdjY19qaXRfcnZhbHVlICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0X25ld19zdHJ1Y3RfY29uc3Ry dWN0b3IKKyAgICAgIChjdHh0LCAwLAorICAgICAgIHN0cnVjdF9maV90eXBlLAorICAgICAgIDIs CisgICAgICAgZmllbGRzLAorICAgICAgIHZhbHMpOworCisgICAgZ2NjX2ppdF9ibG9ja19lbmRf d2l0aF9yZXR1cm4gKGJsb2NrLAorCQkJCSAgIDAsCisJCQkJICAgY3Rvcik7CisgIH0KKyAgeyAv KgorICAgICAgIHN0cnVjdCBmaSBmb28oKQorICAgICAgIHsKKwkgc3RydWN0IGZpIGxvY2FsID0g ezEsMn07CisJIGxvY2FsID0gKHN0cnVjdCBmaSl7NSw2fTsKKwkgcmV0dXJuIGxvY2FsOworICAg ICAgIH0KKyAgICAgKi8KKyAgICBnY2Nfaml0X2Z1bmN0aW9uICpmbiA9CisgICAgICBnY2Nfaml0 X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0LAorCQkJCSAgICAwLAorCQkJCSAgICBHQ0NfSklU X0ZVTkNUSU9OX0VYUE9SVEVELAorCQkJCSAgICBzdHJ1Y3RfZmlfdHlwZSwKKwkJCQkgICAgImZu X2ZpXzVfNiIsCisJCQkJICAgIDAsCisJCQkJICAgIDAsCisJCQkJICAgIDApOworICAgIGdjY19q aXRfbHZhbHVlICpsb2NhbCA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2xvY2FsIChmbiwKKwkJCQkJ CQkwLAorCQkJCQkJCXN0cnVjdF9maV90eXBlLAorCQkJCQkJCSJsb2NhbCIpOworICAgIGdjY19q aXRfYmxvY2sgKmJsb2NrID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKGZuLCAic3RhcnQi KTsKKworICAgIHsKKyAgICAgIGdjY19qaXRfcnZhbHVlICpydmFsX2YxID0KKwlnY2Nfaml0X2Nv bnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoY3R4dCwgZmxvYXRfdHlwZSwgMSk7CisgICAgICBn Y2Nfaml0X3J2YWx1ZSAqcnZhbF9pMiA9CisJZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJv bV9pbnQgKGN0eHQsIGludF90eXBlLCAyKTsKKworICAgICAgZ2NjX2ppdF9ydmFsdWUgKnZhbHNb XSA9IHsgcnZhbF9mMSwgcnZhbF9pMn07CisgICAgICBnY2Nfaml0X2ZpZWxkICpmaWVsZHNbXSA9 IHtmaV9mLCBmaV9pfTsKKworICAgICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2Nv bnRleHRfbmV3X3N0cnVjdF9jb25zdHJ1Y3RvcgorCShjdHh0LCAwLAorCSBzdHJ1Y3RfZmlfdHlw ZSwKKwkgMiwKKwkgZmllbGRzLAorCSB2YWxzKTsKKyAgICAgIGdjY19qaXRfYmxvY2tfYWRkX2Fz c2lnbm1lbnQgKGJsb2NrLCAwLCBsb2NhbCwgY3Rvcik7CisgICAgfQorICAgIHsKKyAgICAgIGdj Y19qaXRfcnZhbHVlICpydmFsX2YxID0KKwlnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9t X2ludCAoY3R4dCwgZmxvYXRfdHlwZSwgNSk7CisgICAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF9p MiA9CisJZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKGN0eHQsIGludF90eXBl LCA2KTsKKworICAgICAgZ2NjX2ppdF9ydmFsdWUgKnZhbHNbXSA9IHsgcnZhbF9mMSwgcnZhbF9p Mn07CisgICAgICBnY2Nfaml0X2ZpZWxkICpmaWVsZHNbXSA9IHtmaV9mLCBmaV9pfTsKKworICAg ICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3N0cnVjdF9jb25z dHJ1Y3RvcgorCShjdHh0LCAwLAorCSBzdHJ1Y3RfZmlfdHlwZSwKKwkgMiwKKwkgZmllbGRzLAor CSB2YWxzKTsKKyAgICAgIGdjY19qaXRfYmxvY2tfYWRkX2Fzc2lnbm1lbnQgKGJsb2NrLCAwLCBs b2NhbCwgY3Rvcik7CisgICAgfQorCisgICAgZ2NjX2ppdF9ibG9ja19lbmRfd2l0aF9yZXR1cm4g KGJsb2NrLAorCQkJCSAgIDAsCisJCQkJICAgZ2NjX2ppdF9sdmFsdWVfYXNfcnZhbHVlKGxvY2Fs KSk7CisgIH0KKyAgeyAvKiBzdHJ1Y3QgZmkgZm9vKCkgeyBzdHJ1Y3QgZmkgbG9jYWwgPSB7MSwg Zm5faW50XzMoKX07CisJCQkgcmV0dXJuIGxvY2FsO30KKworICAgICAgIFRoZSBjdG9yIGhhcyBh IHNpZGUgZWZmZWN0IChmdW5jY2FsbCkgKi8KKyAgICBnY2Nfaml0X2Z1bmN0aW9uICpmbiA9Cisg ICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0LAorCQkJCSAgICAwLAorCQkJ CSAgICBHQ0NfSklUX0ZVTkNUSU9OX0VYUE9SVEVELAorCQkJCSAgICBzdHJ1Y3RfZmlfdHlwZSwK KwkJCQkgICAgImZuX2ZpXzFfMyIsCisJCQkJICAgIDAsCisJCQkJICAgIDAsCisJCQkJICAgIDAp OworICAgIGdjY19qaXRfbHZhbHVlICpsb2NhbCA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2xvY2Fs IChmbiwKKwkJCQkJCQkwLAorCQkJCQkJCXN0cnVjdF9maV90eXBlLAorCQkJCQkJCSJsb2NhbCIp OworICAgIGdjY19qaXRfYmxvY2sgKmJsb2NrID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sg KGZuLCAic3RhcnQiKTsKKworICAgIHsKKyAgICAgIGdjY19qaXRfcnZhbHVlICpydmFsX2YxID0K KwlnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoY3R4dCwgZmxvYXRfdHlwZSwg MSk7CisgICAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbF9pMiA9CisJZ2NjX2ppdF9jb250ZXh0X25l d19jYWxsIChjdHh0LCAwLCBmbl9pbnRfMywgMCwgMCk7CisKKyAgICAgIGdjY19qaXRfcnZhbHVl ICp2YWxzW10gPSB7IHJ2YWxfZjEsIHJ2YWxfaTJ9OworICAgICAgZ2NjX2ppdF9maWVsZCAqZmll bGRzW10gPSB7ZmlfZiwgZmlfaX07CisKKyAgICAgIGdjY19qaXRfcnZhbHVlICpjdG9yID0gZ2Nj X2ppdF9jb250ZXh0X25ld19zdHJ1Y3RfY29uc3RydWN0b3IKKwkoY3R4dCwgMCwKKwkgc3RydWN0 X2ZpX3R5cGUsCisJIDIsCisJIGZpZWxkcywKKwkgdmFscyk7CisgICAgICBnY2Nfaml0X2Jsb2Nr X2FkZF9hc3NpZ25tZW50IChibG9jaywgMCwgbG9jYWwsIGN0b3IpOworICAgIH0KKworICAgIGdj Y19qaXRfYmxvY2tfZW5kX3dpdGhfcmV0dXJuIChibG9jaywKKwkJCQkgICAwLAorCQkJCSAgIGdj Y19qaXRfbHZhbHVlX2FzX3J2YWx1ZShsb2NhbCkpOworICB9CisgIHsgLyogc3RydWN0IGZpIGZv byhmaSkgeyByZXR1cm4gZmk7fQorICAgICAgIHN0cnVjdCBmaSBiYXIoKSB7IHJldHVybiBmb28o KHN0cnVjdCBmaSl7MywgNH0pOyB9CisgICAgICovCisKKyAgICBnY2Nfaml0X3BhcmFtICpmaV9w YXJhbSA9CisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3BhcmFtIChjdHh0LCAwLCBzdHJ1Y3Rf ZmlfdHlwZSwgImZpIik7CisKKyAgICBnY2Nfaml0X2Z1bmN0aW9uICpmbjAgPQorICAgICAgZ2Nj X2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwKKwkJCQkgICAgMCwKKwkJCQkgICAgR0ND X0pJVF9GVU5DVElPTl9FWFBPUlRFRCwKKwkJCQkgICAgc3RydWN0X2ZpX3R5cGUsCisJCQkJICAg ICJmbl9maV94X3giLAorCQkJCSAgICAxLAorCQkJCSAgICAmZmlfcGFyYW0sCisJCQkJICAgIDAp OworICAgIGdjY19qaXRfYmxvY2sgKmJsb2NrMCA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2Nr IChmbjAsICJzdGFydCIpOworICAgIGdjY19qaXRfYmxvY2tfZW5kX3dpdGhfcmV0dXJuIChibG9j azAsCisJCQkJICAgMCwKKwkJCQkgICBnY2Nfaml0X3BhcmFtX2FzX3J2YWx1ZSAoCisJCQkJICAg ICBnY2Nfaml0X2Z1bmN0aW9uX2dldF9wYXJhbSAoZm4wLCAwKSkpOworCisgICAgZ2NjX2ppdF9m dW5jdGlvbiAqZm4gPQorICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwK KwkJCQkgICAgMCwKKwkJCQkgICAgR0NDX0pJVF9GVU5DVElPTl9FWFBPUlRFRCwKKwkJCQkgICAg c3RydWN0X2ZpX3R5cGUsCisJCQkJICAgICJmbl9maV8zXzQiLAorCQkJCSAgICAwLAorCQkJCSAg ICAwLAorCQkJCSAgICAwKTsKKyAgICBnY2Nfaml0X2Jsb2NrICpibG9jayA9IGdjY19qaXRfZnVu Y3Rpb25fbmV3X2Jsb2NrIChmbiwgInN0YXJ0Iik7CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqcnZh bF9mMSA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQs IGZsb2F0X3R5cGUsIDMpOworICAgIGdjY19qaXRfcnZhbHVlICpydmFsX2kyID0gZ2NjX2ppdF9j b250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDQpOwor CisgICAgZ2NjX2ppdF9ydmFsdWUgKnZhbHNbXSA9IHsgcnZhbF9mMSwgcnZhbF9pMn07CisgICAg Z2NjX2ppdF9maWVsZCAqZmllbGRzW10gPSB7ZmlfZiwgZmlfaX07CisKKyAgICBnY2Nfaml0X3J2 YWx1ZSAqY3RvciA9IGdjY19qaXRfY29udGV4dF9uZXdfc3RydWN0X2NvbnN0cnVjdG9yCisgICAg ICAoY3R4dCwgMCwKKyAgICAgICBzdHJ1Y3RfZmlfdHlwZSwKKyAgICAgICAyLAorICAgICAgIGZp ZWxkcywKKyAgICAgICB2YWxzKTsKKworICAgIGdjY19qaXRfcnZhbHVlICpjYWxsID0gZ2NjX2pp dF9jb250ZXh0X25ld19jYWxsIChjdHh0LCAwLCBmbjAsIDEsICZjdG9yKTsKKworICAgIGdjY19q aXRfYmxvY2tfZW5kX3dpdGhfcmV0dXJuIChibG9jaywKKwkJCQkgICAwLAorCQkJCSAgIGNhbGwp OworICB9CisgIHsgLyoKKyAgICAgICB2b2lkIGZvbyhzdHJ1Y3QgYmFyICpiKSB7ICpiID0gKHN0 cnVjdCBiYXIpIHsuYXJyID0gezEsMn07IH0KKyAgICAgKi8KKworICAgIGdjY19qaXRfcGFyYW0g KnBhcmFtID0KKyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfcGFyYW0gKGN0eHQsIDAsCisJCQkJ IGdjY19qaXRfdHlwZV9nZXRfcG9pbnRlciAoc3RydWN0X2Jhcl90eXBlKSwKKwkJCQkgImIiKTsK KworCisgICAgZ2NjX2ppdF9mdW5jdGlvbiAqZm4gPQorICAgICAgZ2NjX2ppdF9jb250ZXh0X25l d19mdW5jdGlvbiAoY3R4dCwKKwkJCQkgICAgMCwKKwkJCQkgICAgR0NDX0pJVF9GVU5DVElPTl9F WFBPUlRFRCwKKwkJCQkgICAgdm9pZF90eXBlLAorCQkJCSAgICAiZm5fcGJhcl8xMiIsCisJCQkJ ICAgIDEsCisJCQkJICAgICZwYXJhbSwKKwkJCQkgICAgMCk7CisgICAgZ2NjX2ppdF9ibG9jayAq YmxvY2sgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAoZm4sICJzdGFydCIpOworCisgICAg Z2NjX2ppdF9ydmFsdWUgKnJ2YWxfaTEgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9t X2ludCAoCisgICAgICBjdHh0LCBpbnRfdHlwZSwgMSk7CisgICAgZ2NjX2ppdF9ydmFsdWUgKnJ2 YWxfaTIgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0 LCBpbnRfdHlwZSwgMik7CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqYXJyX3ZhbHNbXSA9IHsgcnZh bF9pMSwgcnZhbF9pMn07CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqYXJyX2N0b3IgPSBnY2Nfaml0 X2NvbnRleHRfbmV3X2FycmF5X2NvbnN0cnVjdG9yCisgICAgICAoY3R4dCwgMCwKKyAgICAgICBp bnQ1MGFycl90eXBlLAorICAgICAgIDIsCisgICAgICAgYXJyX3ZhbHMpOworCisgICAgZ2NjX2pp dF9ydmFsdWUgKnN0cl9jdG9yID0gZ2NjX2ppdF9jb250ZXh0X25ld19zdHJ1Y3RfY29uc3RydWN0 b3IKKyAgICAgIChjdHh0LAorICAgICAgIDAsCisgICAgICAgc3RydWN0X2Jhcl90eXBlLAorICAg ICAgIDEsCisgICAgICAgJmJhcl9maSwKKyAgICAgICAmYXJyX2N0b3IpOworCisgICAgZ2NjX2pp dF9wYXJhbSAqcDAgPSBnY2Nfaml0X2Z1bmN0aW9uX2dldF9wYXJhbSAoZm4sIDApOworICAgIGdj Y19qaXRfbHZhbHVlICpsdjAgPSAgZ2NjX2ppdF9wYXJhbV9hc19sdmFsdWUgKHAwKTsKKyAgICBn Y2Nfaml0X2x2YWx1ZSAqZGVyZWYgPQorICAgICAgZ2NjX2ppdF9ydmFsdWVfZGVyZWZlcmVuY2Ug KGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZSAobHYwKSwgMCk7CisKKyAgICBnY2Nfaml0X2Jsb2Nr X2FkZF9hc3NpZ25tZW50IChibG9jaywgMCwKKwkJCQkgIGRlcmVmLAorCQkJCSAgc3RyX2N0b3Ip OworCisgICAgZ2NjX2ppdF9ibG9ja19lbmRfd2l0aF92b2lkX3JldHVybiAoYmxvY2ssIDApOwor ICB9CisgIHsgLyogc3RydWN0IGJhciBmb28oKSB7IHN0cnVjdCBiYXIgbG9jYWwgPSB7fTsKKwkJ CSAgcmV0dXJuIGxvY2FsO30KKyAgICAgKi8KKyAgICBnY2Nfaml0X2Z1bmN0aW9uICpmbiA9Cisg ICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0LAorCQkJCSAgICAwLAorCQkJ CSAgICBHQ0NfSklUX0ZVTkNUSU9OX0VYUE9SVEVELAorCQkJCSAgICBzdHJ1Y3RfYmFyX3R5cGUs CisJCQkJICAgICJmbl9iYXJfMHMiLAorCQkJCSAgICAwLAorCQkJCSAgICAwLAorCQkJCSAgICAw KTsKKyAgICBnY2Nfaml0X2x2YWx1ZSAqbG9jYWwgPQorICAgICAgZ2NjX2ppdF9mdW5jdGlvbl9u ZXdfbG9jYWwgKGZuLAorCQkJCSAgMCwKKwkJCQkgIHN0cnVjdF9iYXJfdHlwZSwKKwkJCQkgICJs b2NhbCIpOworICAgIGdjY19qaXRfYmxvY2sgKmJsb2NrID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdf YmxvY2sgKGZuLCAic3RhcnQiKTsKKworICAgIGdjY19qaXRfcnZhbHVlICpjdG9yID0gZ2NjX2pp dF9jb250ZXh0X25ld19zdHJ1Y3RfY29uc3RydWN0b3IKKwkoY3R4dCwgMCwKKwkgc3RydWN0X2Jh cl90eXBlLAorCSAwLAorCSAwLAorCSAwKTsKKyAgICBnY2Nfaml0X2Jsb2NrX2FkZF9hc3NpZ25t ZW50IChibG9jaywgMCwgbG9jYWwsIGN0b3IpOworCisgICAgZ2NjX2ppdF9ibG9ja19lbmRfd2l0 aF9yZXR1cm4gKGJsb2NrLAorCQkJCSAgIDAsCisJCQkJICAgZ2NjX2ppdF9sdmFsdWVfYXNfcnZh bHVlKGxvY2FsKSk7CisgIH0KKyAgeyAvKiBzdHJ1Y3QgYmFyIGZvbygpIHsgc3RydWN0IGJhciBs b2NhbDsKKwkJCSAgbG9jYWwuYXJyID0gKGludCBbNTBdKXsxLDIsMyw0LDUsNn07CisJCQkgIHJl dHVybiBsb2NhbDt9CisgICAgICovCisgICAgZ2NjX2ppdF9mdW5jdGlvbiAqZm4gPQorICAgICAg Z2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwKKwkJCQkgICAgMCwKKwkJCQkgICAg R0NDX0pJVF9GVU5DVElPTl9FWFBPUlRFRCwKKwkJCQkgICAgc3RydWN0X2Jhcl90eXBlLAorCQkJ CSAgICAiZm5fYmFyXzEyM3MiLAorCQkJCSAgICAwLAorCQkJCSAgICAwLAorCQkJCSAgICAwKTsK KyAgICBnY2Nfaml0X2x2YWx1ZSAqbG9jYWwgPQorICAgICAgZ2NjX2ppdF9mdW5jdGlvbl9uZXdf bG9jYWwgKGZuLAorCQkJCSAgMCwKKwkJCQkgIHN0cnVjdF9iYXJfdHlwZSwKKwkJCQkgICJsb2Nh bCIpOworICAgIGdjY19qaXRfYmxvY2sgKmJsb2NrID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxv Y2sgKGZuLCAic3RhcnQiKTsKKworICAgIGdjY19qaXRfcnZhbHVlICp2YWx1ZXNbNl07CisKKyAg ICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykKKyAgICAgIHZhbHVlc1tpXSA9IGdjY19qaXRf Y29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50IChjdHh0LCBpbnRfdHlwZSwgaSArIDEpOworCisg ICAgZ2NjX2ppdF9ydmFsdWUgKmN0b3IgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2FycmF5X2NvbnN0 cnVjdG9yCisJKGN0eHQsIDAsCisJIGludDUwYXJyX3R5cGUsCisJIDYsCisJIHZhbHVlcyk7CisK KyAgICBnY2Nfaml0X2x2YWx1ZSAqYXJyX2x2ID0gZ2NjX2ppdF9sdmFsdWVfYWNjZXNzX2ZpZWxk IChsb2NhbCwKKwkJCQkJCQkgIDAsCisJCQkJCQkJICBiYXJfZmkpOworICAgIGdjY19qaXRfYmxv Y2tfYWRkX2Fzc2lnbm1lbnQgKGJsb2NrLCAwLCBhcnJfbHYsIGN0b3IpOworCisgICAgZ2NjX2pp dF9ibG9ja19lbmRfd2l0aF9yZXR1cm4gKGJsb2NrLAorCQkJCSAgIDAsCisJCQkJICAgZ2NjX2pp dF9sdmFsdWVfYXNfcnZhbHVlKGxvY2FsKSk7CisgIH0KKyAgeyAvKiBpbnRbNTBdIGZvbygpIHsg aW50IGFycls1MF07CisJCSAgICAgICBhcnIgPSAoaW50IFs1MF0pezEsMiwzLDQsNSw2fTsKKwkJ ICAgICAgIHJldHVybiBhcnI7fQorCisgICAgICAgTi5COiBOb3QgYSB0eXBvLCByZXR1cm5pbmcg YW4gYXJyYXkuCisgICAgICovCisgICAgZ2NjX2ppdF9mdW5jdGlvbiAqZm4gPQorICAgICAgZ2Nj X2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwKKwkJCQkgICAgMCwKKwkJCQkgICAgR0ND X0pJVF9GVU5DVElPTl9FWFBPUlRFRCwKKwkJCQkgICAgaW50NTBhcnJfdHlwZSwKKwkJCQkgICAg ImZuX2ludDUwYXJyXzEyM3MiLAorCQkJCSAgICAwLAorCQkJCSAgICAwLAorCQkJCSAgICAwKTsK KyAgICBnY2Nfaml0X2x2YWx1ZSAqbG9jYWwgPQorICAgICAgZ2NjX2ppdF9mdW5jdGlvbl9uZXdf bG9jYWwgKGZuLAorCQkJCSAgMCwKKwkJCQkgIGludDUwYXJyX3R5cGUsCisJCQkJICAibG9jYWwi KTsKKyAgICBnY2Nfaml0X2Jsb2NrICpibG9jayA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2Nr IChmbiwgInN0YXJ0Iik7CisKKyAgICBnY2Nfaml0X3J2YWx1ZSAqdmFsdWVzWzZdOworCisgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspCisgICAgICB2YWx1ZXNbaV0gPSBnY2Nfaml0X2Nv bnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoY3R4dCwgaW50X3R5cGUsIGkgKyAxKTsKKworICAg IGdjY19qaXRfcnZhbHVlICpjdG9yID0gZ2NjX2ppdF9jb250ZXh0X25ld19hcnJheV9jb25zdHJ1 Y3RvciAoCisJIGN0eHQsCisJIDAsCisJIGludDUwYXJyX3R5cGUsCisJIDYsCisJIHZhbHVlcyk7 CisKKyAgICBnY2Nfaml0X2Jsb2NrX2FkZF9hc3NpZ25tZW50IChibG9jaywgMCwgbG9jYWwsIGN0 b3IpOworCisgICAgZ2NjX2ppdF9ibG9ja19lbmRfd2l0aF9yZXR1cm4gKGJsb2NrLAorCQkJCSAg IDAsCisJCQkJICAgZ2NjX2ppdF9sdmFsdWVfYXNfcnZhbHVlKGxvY2FsKSk7CisgIH0KK30KKwor c3RydWN0IGZpMiB7CisgIGZsb2F0IGY7CisgIGludCBpOworfTsKKworc3RydWN0IGJhcjIgewor ICBmbG9hdCBmZjsKKyAgaW50IGFycls1MF07CisgIGludCBpaTsKKyAgY2hhciBjOworfTsKKwor dW5pb24gdWJhcjIgeworICBmbG9hdCBmZjsKKyAgaW50IGlpOworfTsKKworc3RydWN0IGludDUw YXJyIHsKKyAgaW50IGFycls1MF07Cit9OworCit2b2lkIF9fYXR0cmlidXRlX18oKG9wdGltaXpl KDApKSkKK3NjcmFtYmxlX3N0YWNrKHZvaWQpCisgIHsKKyAgICBjaGFyICpwID0gYWxsb2NhKDEw MCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDA7IGkrKykKKyAgICAgICpwKysgPSAweEYw OworICAgIGFzbSgiIik7IC8qIE1hcmsgZm9yIHNpZGUtZWZmZWN0ICovCisgIH0KKwordm9pZCBf X2F0dHJpYnV0ZV9fKChvcHRpbWl6ZSgwKSkpCitzY3JhbWJsZV9hcnIgKGNoYXIgKmFyciwgaW50 IGxlbikKK3sKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykKKyAgICAqYXJyKysgPSBp OworICBhc20oIiIpOyAvKiBNYXJrIGZvciBzaWRlLWVmZmVjdCAqLworfQorCit2b2lkCit2ZXJp ZnlfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCBnY2Nfaml0X3Jlc3VsdCAqcmVzdWx0KQor eworICBDSEVDS19OT05fTlVMTCAocmVzdWx0KTsKKworICB7CisgICAgc3RydWN0IGZpMiAoKmZu KSAodm9pZCkgPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiZm5fZmlfMV8yIik7 CisgICAgc2NyYW1ibGVfc3RhY2sgKCk7CisgICAgc3RydWN0IGZpMiBmaSA9IGZuICgpOworICAg IENIRUNLX1ZBTFVFIChmaS5mLCAxKTsKKyAgICBDSEVDS19WQUxVRSAoZmkuaSwgMik7CisgIH0K KyAgeworICAgIHN0cnVjdCBmaTIgKCpmbikgKHZvaWQpID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2Nv ZGUgKHJlc3VsdCwgImZuX2ZpXzVfNiIpOworICAgIHN0cnVjdCBmaTIgZmkgPSBmbiAoKTsKKyAg ICBDSEVDS19WQUxVRSAoZmkuZiwgNSk7CisgICAgQ0hFQ0tfVkFMVUUgKGZpLmksIDYpOworICB9 CisgIHsKKyAgICBzdHJ1Y3QgZmkyICgqZm4pICh2b2lkKSA9IGdjY19qaXRfcmVzdWx0X2dldF9j b2RlIChyZXN1bHQsICJmbl9maV8xXzMiKTsKKyAgICBzdHJ1Y3QgZmkyIGZpID0gZm4gKCk7Cisg ICAgQ0hFQ0tfVkFMVUUgKGZpLmYsIDEpOworICAgIENIRUNLX1ZBTFVFIChmaS5pLCAzKTsKKyAg fQorICB7CisgICAgc3RydWN0IGZpMiAoKmZuKSAodm9pZCkgPSBnY2Nfaml0X3Jlc3VsdF9nZXRf Y29kZSAocmVzdWx0LCAiZm5fZmlfM180Iik7CisgICAgc3RydWN0IGZpMiBmaSA9IGZuICgpOwor ICAgIENIRUNLX1ZBTFVFIChmaS5mLCAzKTsKKyAgICBDSEVDS19WQUxVRSAoZmkuaSwgNCk7Cisg IH0KKyAgeworICAgIHNjcmFtYmxlX3N0YWNrKCk7CisgICAgc3RydWN0IGJhcjIgKCpmbikgKHZv aWQpID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImZuX2Jhcl8wcyIpOworICAg IHN0cnVjdCBiYXIyIGJhciA9IGZuICgpOworICAgIHN0cnVjdCBiYXIyIGtleSA9IHt9OworCisg ICAgQ0hFQ0tfVkFMVUUgKGJhci5mZiwgMCk7CisgICAgQ0hFQ0tfVkFMVUUgKGJhci5paSwgMCk7 CisgICAgQ0hFQ0tfVkFMVUUgKG1lbWNtcCAoJmJhci5hcnIsICZrZXkuYXJyLCBzaXplb2YgKGtl eS5hcnIpKSwgMCk7CisgIH0KKyAgeworCisgICAgdm9pZCAoKmZuKSAoc3RydWN0IGJhcjIgKikg PSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiZm5fcGJhcl8xMiIpOworCisgICAg c3RydWN0IGJhcjIgYmFyID0gKHN0cnVjdCBiYXIyKSB7fTsKKworICAgIHNjcmFtYmxlX2FyciAo KGNoYXIqKSZiYXIsIHNpemVvZiBiYXIpOworICAgIHNjcmFtYmxlX3N0YWNrKCk7CisKKyAgICBm biAoJmJhcik7CisKKyAgICBzdHJ1Y3QgYmFyMiBrZXkgPSB7LmFyciA9IHsxLDJ9fTsKKyAgICBf X2J1aWx0aW5fY2xlYXJfcGFkZGluZyAoJmtleSk7CisKKyAgICBDSEVDS19WQUxVRSAobWVtY21w ICgmYmFyLCAma2V5LCBzaXplb2YgKGtleSkpLCAwKTsKKyAgfQorICB7CisgICAgc2NyYW1ibGVf c3RhY2soKTsKKyAgICBzdHJ1Y3QgYmFyMiAoKmZuKSAodm9pZCkgPSBnY2Nfaml0X3Jlc3VsdF9n ZXRfY29kZSAocmVzdWx0LCAiZm5fYmFyXzEyM3MiKTsKKyAgICBzdHJ1Y3QgYmFyMiBiYXIgPSBm biAoKTsKKyAgICBzdHJ1Y3QgYmFyMiBrZXkgPSB7LmFyciA9IHsxLDIsMyw0LDUsNn0gfTsKKwor ICAgIENIRUNLX1ZBTFVFIChtZW1jbXAgKCZiYXIuYXJyLCAma2V5LmFyciwgc2l6ZW9mIChrZXku YXJyKSksIDApOworICB9CisgIHsKKyAgICBzY3JhbWJsZV9zdGFjayAoKTsKKyAgICAvKiBUaGlz IGlzIGFiaXQgc2hhZHkuIExldHMganVzdCBwcmV0ZW5kIHRoYXQgYXJyYXkgcmV0dXJucyDDoCBs YSBGb3J0cmFuCisgICAgICAgaXMgdGhlIHNhbWUgdGhpbmcgYXMgcmV0dXJuaW5nIGEgc3RydWN0 IHdpdGggYW4gYXJyYXkgaW4gaXQgaW4gQy4gKi8KKyAgICBzdHJ1Y3QgaW50NTBhcnIgKCpmbikg KHZvaWQpID0KKyAgICAgIGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJmbl9pbnQ1 MGFycl8xMjNzIik7CisgICAgc3RydWN0IGludDUwYXJyIGFucyA9IGZuICgpOworICAgIGludCBr ZXlbNTBdID0gezEsMiwzLDQsNSw2fTsKKworICAgIENIRUNLX1ZBTFVFIChtZW1jbXAgKGFucy5h cnIsIGtleSwgc2l6ZW9mIChrZXkpKSwgMCk7CisgIH0KK30KLS0gCjIuMzAuMgoK --_002_47b54ae597a44706aba180a05f1e5fe7kthse_--