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 599E03858D39; Thu, 21 Oct 2021 13:13:52 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 599E03858D39 Received: from exdb2.ug.kth.se (exdb2.ug.kth.se [192.168.32.57]) (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 4HZnxB11lzzPMdX; Thu, 21 Oct 2021 15:13:50 +0200 (CEST) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp-relay-2.sys.kth.se 4HZnxB11lzzPMdX Received: from exdb6.ug.kth.se (192.168.32.61) by exdb2.ug.kth.se (192.168.32.57) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.922.14; Thu, 21 Oct 2021 15:13:49 +0200 Received: from exdb6.ug.kth.se ([192.168.32.61]) by exdb6.ug.kth.se ([192.168.32.61]) with mapi id 15.02.0922.014; Thu, 21 Oct 2021 15:13:49 +0200 From: Petter Tomner To: "gcc-patches@gcc.gnu.org" , "jit@gcc.gnu.org" Subject: [PATCH 2/2] jit: Complex types and loong constants Thread-Topic: [PATCH 2/2] jit: Complex types and loong constants Thread-Index: AQHXxn18wbXmptbjmk26GA1pYBQQPw== Date: Thu, 21 Oct 2021 13:13:49 +0000 Message-ID: <232536ab07e440938261425628490be9@kth.se> References: In-Reply-To: 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_232536ab07e440938261425628490be9kthse_" MIME-Version: 1.0 X-Spam-Status: No, score=-11.8 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, SPF_HELO_NONE, SPF_PASS, TXREP 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: Thu, 21 Oct 2021 13:13:57 -0000 --_002_232536ab07e440938261425628490be9kthse_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable This patch adds the possibility to make the following constants: * long long * long double * complex long double The long long one is needed for 32bit systems. The new entrypoints are: gcc_jit_context_new_rvalue_from_long_long gcc_jit_context_new_rvalue_from_long_double gcc_jit_context_new_rvalue_from_complex_long_double The patch also fixes a issue with the reproducer's debug=20 c-file writer, which does not handle floating point numbers very well. I.e. infs, NaN and losing precision on doubles. make check-jit runs fine with the patch series on Debian 64x. See attachment.= --_002_232536ab07e440938261425628490be9kthse_ Content-Type: text/x-patch; name="0002-long-long.patch" Content-Description: 0002-long-long.patch Content-Disposition: attachment; filename="0002-long-long.patch"; size=42834; creation-date="Thu, 21 Oct 2021 13:10:23 GMT"; modification-date="Thu, 21 Oct 2021 13:10:23 GMT" Content-Transfer-Encoding: base64 RnJvbSBmNDljZWE2ODMwYjA4YTAxOTk1OGVmM2Y2YTFjZWQxZTQxNmY4MGIzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXR0ZXIgVG9tbmVyIDx0b21uZXJAa3RoLnNlPgpEYXRlOiBT YXQsIDE2IE9jdCAyMDIxIDIxOjU1OjIwICswMjAwClN1YmplY3Q6IFtQQVRDSCAyLzNdIGxvbmcg bG9uZwoKQWRkIGxvbmcgbG9uZywgbG9uZyBkb3VibGUgYW5kIGNvbXBsZXggbG9uZyBkb3VibGUg Y29uc3RhbnRzCgpUaGlzIHBhdGNoIGFkZHMgZW50cnlwb2ludHMgdG8gbWFrZSBjb25zdGFudHMg KGxpdGVyYWxzKSBmb3IgbG9uZyBsb25nLApsb25nIGRvdWJsZSBhbmQgY29tcGxleCBsb25nIGRv dWJsZSB0eXBlcy4KCkFsc28sIGl0IGZpeGVzIHByb2JsZW1zIHdpdGggYWxsIGZsb2F0aW5nIHBv aW50IG51bWJlcnMgaW4gd3JpdGVfcmVwcm9kdWNlci4KSS5lLiBzdXBwb3J0IE5BTiBhbmQgSU5G IHZhbHVlcywgYXN3ZWxsIGFzIHByb3BlciBwcmVjaXNpb24gZm9yIGRvdWJsZQphbmQgbG9uZyBk b3VibGUuIFdoaWNoIGlzIG5lZWRlZCBmb3IgdGVzdGluZyB0aGlzIHBhdGNoLgoKU2lnbmVkLW9m Zi1ieToKMjAyMS0xMC0yMQlQZXR0ZXIgVG9tbmVyCTx0b21uZXJAa3RoLnNlPgoKZ2NjL2ppdC8K CSogaml0LXBsYXliYWNrLmMgOgoJKG5ld19ydmFsdWVfZnJvbV9jb25zdCA8bG9uZyBsb25nPik6 IE5ldwoJKG5ld19ydmFsdWVfZnJvbV9jb25zdCA8bG9uZz4pOiBVc2VzIGxvbmcgbG9uZyBpbnN0 ZWFkCgkobmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxsb25nIGRvdWJsZT4pOiBOZXcKCShuZXdfcnZh bHVlX2Zyb21fY29uc3QgPF9Db21wbGV4IGxvbmcgZG91YmxlPikgOiBOZXcKCSogaml0LXJlY29y ZGluZy5jIDoKCShkdW1wX3JlcHJvZHVjZXJfdG9fZmlsZSkgOiBUeXBlIHB1bm5pbmcgTkFOcwoJ KHJlcHJvZHVjZXJfd3JpdGVfYXJyKSA6IGFyciAtPiAiY2hhciBhcnJheSBsaXRlcmFsIi1zdHJp bmcKCShtZW1lbnRvX29mX25ld19ydmFsdWVfZnJvbV9jb25zdCA8bG9uZyBsb25nPikgOiBOZXcK CShtZW1lbnRvX29mX25ld19ydmFsdWVfZnJvbV9jb25zdCA8bG9uZyBkb3VibGU+KSA6IE5ldwoJ KG1lbWVudG9fb2ZfbmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxfQ29tcGxleCBsb25nIGRvdWJsZT4p IDogTmV3CgkobWVtZW50b19vZl9uZXdfcnZhbHVlX2Zyb21fY29uc3QgPGRvdWJsZT46Om1ha2Vf ZGVidWdfc3RyaW5nKToKCSVnIGluc3RlYWQgb2YgJWYKCShtZW1lbnRvX29mX25ld19ydmFsdWVf ZnJvbV9jb25zdCA8ZG91YmxlPjo6d3JpdGVfcmVwcm9kdWNlcik6CgklYSBpbnN0ZWFkIG9mICVm LCBoYW5kbGUgTkFOIGFuZCBJTkYKCShtZW1lbnRvX29mX25ld19ydmFsdWVfZnJvbV9jb25zdCA8 X0NvbXBsZXggZG91YmxlPjo6d3JpdGVfcmVwcm9kdWNlcik6CgklYSBpbnN0ZWFkIG9mICVmLCBo YW5kbGUgTkFOIGFuZCBJTkYuIFVzZSBDTVBMWCBtYWNyby4KCSogbGliZ2Njaml0LmMgOgoJKiBs aWJnY2NqaXQuaCA6CgkoTElCR0NDSklUX0hBVkVfTE9OR0xPTkdfQ09OU1RBTlRTKSA6IE5ldwoJ KGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fbG9uZ19sb25nKSA6IE5ldwoJKGdjY19q aXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fbG9uZ19kb3VibGUpIDogTmV3CgkoZ2NjX2ppdF9j b250ZXh0X25ld19ydmFsdWVfZnJvbV9jb21wbGV4X2xvbmdfZG91YmxlKSA6IE5ldwoJKiBsaWJn Y2NqaXQrKy5oIDogTmV3IGVudHJ5cG9pbnRzCgkqIGxpYmdjY2ppdC5tYXA6IE5ldyBlbnRyeXBv aW50cyBhZGRlZCB0byBBQkkgMTYKCmdjYy90ZXN0c3VpdGUvCgkqIGppdC5kZy9hbGwtbm9uLWZh aWxpbmctdGVzdHMuaDogQWRkZWQgdGVzdC1sb25nLWxpdGVyYWxzLmMKCSogaml0LmRnL3Rlc3Qt bG9uZy1saXRlcmFscy5jOiBOZXcKCmdjYy9qaXQvZG9jcy90b3BpY3MvCgkqIGV4cHJlc3Npb25z LnJzdCA6IFVwZGF0ZWQgZG9ja3MKLS0tCiBnY2Mvaml0L2RvY3MvdG9waWNzL2V4cHJlc3Npb25z LnJzdCAgICAgICAgICB8ICA0MyArLQogZ2NjL2ppdC9qaXQtcGxheWJhY2suYyAgICAgICAgICAg ICAgICAgICAgICAgfCAxNDMgKysrKystCiBnY2Mvaml0L2ppdC1yZWNvcmRpbmcuYyAgICAgICAg ICAgICAgICAgICAgICB8IDQ0MiArKysrKysrKysrKysrKysrKystCiBnY2Mvaml0L2xpYmdjY2pp dCsrLmggICAgICAgICAgICAgICAgICAgICAgICB8ICAzOSArKwogZ2NjL2ppdC9saWJnY2NqaXQu YyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNDYgKysKIGdjYy9qaXQvbGliZ2Njaml0Lmgg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMzICstCiBnY2Mvaml0L2xpYmdjY2ppdC5tYXAg ICAgICAgICAgICAgICAgICAgICAgICB8ICAgMyArCiBnY2MvdGVzdHN1aXRlL2ppdC5kZy9hbGwt bm9uLWZhaWxpbmctdGVzdHMuaCB8ICAgNyArCiBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWxv bmctbGl0ZXJhbHMuYyAgICB8IDI4MyArKysrKysrKysrKysKIDkgZmlsZXMgY2hhbmdlZCwgMTAx NyBpbnNlcnRpb25zKCspLCAyMiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2Mv dGVzdHN1aXRlL2ppdC5kZy90ZXN0LWxvbmctbGl0ZXJhbHMuYwoKZGlmZiAtLWdpdCBhL2djYy9q aXQvZG9jcy90b3BpY3MvZXhwcmVzc2lvbnMucnN0IGIvZ2NjL2ppdC9kb2NzL3RvcGljcy9leHBy ZXNzaW9ucy5yc3QKaW5kZXggYTk4ZjM1NTcyYjQuLjMwYTNiOTc4MGY5IDEwMDY0NAotLS0gYS9n Y2Mvaml0L2RvY3MvdG9waWNzL2V4cHJlc3Npb25zLnJzdAorKysgYi9nY2Mvaml0L2RvY3MvdG9w aWNzL2V4cHJlc3Npb25zLnJzdApAQCAtNzAsNiArNzAsMTggQEAgU2ltcGxlIGV4cHJlc3Npb25z CiAgICBHaXZlbiBhIG51bWVyaWMgdHlwZSAoaW50ZWdlciBvciBmbG9hdGluZyBwb2ludCksIGJ1 aWxkIGFuIHJ2YWx1ZSBmb3IKICAgIHRoZSBnaXZlbiBjb25zdGFudCA6Yzp0eXBlOmBsb25nYCB2 YWx1ZS4KIAorLi4gZnVuY3Rpb246OiBnY2Nfaml0X3J2YWx1ZSAqXAorICAgICAgICAgICAgICBn Y2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2xvbmdfbG9uZyAoZ2NjX2ppdF9jb250ZXh0 ICpjdHh0LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBnY2Nfaml0X3R5cGUgKm51bWVyaWNfdHlwZSwgXAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBsb25nIHZhbHVl KQorCisgICBHaXZlbiBhIG51bWVyaWMgdHlwZSAoaW50ZWdlciBvciBmbG9hdGluZyBwb2ludCks IGJ1aWxkIGFuIHJ2YWx1ZSBmb3IKKyAgIHRoZSBnaXZlbiBjb25zdGFudCA6Yzp0eXBlOmBsb25n IGxvbmdgIHZhbHVlLgorCisgICBUaGlzIGZ1bmN0aW9uIHdhcyBhZGRlZCBpbiA6cmVmOmBMSUJH Q0NKSVRfQUJJXzE2YDsKKyAgIHlvdSBjYW4gdGVzdCBmb3IgaXRzIHByZXNlbmNlIHVzaW5nCisg ICAgICAgYCNpZmRlZiBMSUJHQ0NKSVRfSEFWRV9MT05HTE9OR19DT05TVEFOVFNgCisKIC4uIGZ1 bmN0aW9uOjogIGdjY19qaXRfcnZhbHVlICpnY2Nfaml0X2NvbnRleHRfemVybyAoZ2NjX2ppdF9j b250ZXh0ICpjdHh0LCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGdjY19qaXRfdHlwZSAqbnVtZXJpY190eXBlKQogCkBAIC05OCw2ICsxMTAs MTggQEAgU2ltcGxlIGV4cHJlc3Npb25zCiAgICBHaXZlbiBhIG51bWVyaWMgdHlwZSAoaW50ZWdl ciBvciBmbG9hdGluZyBwb2ludCksIGJ1aWxkIGFuIHJ2YWx1ZSBmb3IKICAgIHRoZSBnaXZlbiBj b25zdGFudCA6Yzp0eXBlOmBkb3VibGVgIHZhbHVlLgogCisuLiBmdW5jdGlvbjo6IGdjY19qaXRf cnZhbHVlICpcCisgICAgICAgICAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21f bG9uZ19kb3VibGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgXAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY2Nfaml0X3R5cGUgKm51 bWVyaWNfdHlwZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBsb25nIGRvdWJsZSB2YWx1ZSkKKworICAgR2l2ZW4gYSBmbG9hdGlu ZyBwb2ludCB0eXBlLCBidWlsZCBhbiBydmFsdWUgZm9yCisgICB0aGUgZ2l2ZW4gY29uc3RhbnQg OmM6dHlwZTpgbG9uZyBkb3VibGVgLgorCisgICBUaGlzIGZ1bmN0aW9uIHdhcyBhZGRlZCBpbiA6 cmVmOmBMSUJHQ0NKSVRfQUJJXzE2YDsKKyAgIHlvdSBjYW4gdGVzdCBmb3IgaXRzIHByZXNlbmNl IHVzaW5nCisgICAgICAgYCNpZmRlZiBMSUJHQ0NKSVRfSEFWRV9MT05HTE9OR19DT05TVEFOVFNg CisKIC4uIGZ1bmN0aW9uOjogZ2NjX2ppdF9ydmFsdWUgKlwKICAgICAgICAgICAgICAgZ2NjX2pp dF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9jb21wbGV4X2RvdWJsZSAoZ2NjX2ppdF9jb250ZXh0 ICpjdHh0LCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGdjY19qaXRfdHlwZSAqbnVtZXJpY190eXBlLCBcCkBAIC0xMDcsNiAr MTMxLDIzIEBAIFNpbXBsZSBleHByZXNzaW9ucwogICAgdGhlIGdpdmVuIGNvbnN0YW50IDpjOnR5 cGU6YF9Db21wbGV4IGRvdWJsZWAuIFdoZW4gdGhlIHJlc3VsdCB0eXBlIGlzCiAgICBub24tY29t cGxleCwgdGhlIGltYWdpbmFyeSBwYXJ0IGlzIGRpc2NhcmRlZC4KIAorICAgVGhpcyBmdW5jdGlv biB3YXMgYWRkZWQgaW4gOnJlZjpgTElCR0NDSklUX0FCSV8xNmA7CisgICB5b3UgY2FuIHRlc3Qg Zm9yIGl0cyBwcmVzZW5jZSB1c2luZworICAgICAgIGAjaWZkZWYgTElCR0NDSklUX0hBVkVfQ09N UExFWGAKKworLi4gZnVuY3Rpb246OiBleHRlcm4gZ2NjX2ppdF9ydmFsdWUgKlwKKyAgICAgICAg ICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9jb21wbGV4X2xvbmdfZG91Ymxl IChnY2Nfaml0X2NvbnRleHQgKmN0eHQsXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjY19qaXRfdHlwZSAqbnVtZXJp Y190eXBlLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfQ29tcGxleCBsb25nIGRvdWJsZSB2YWx1ZSk7CisKKyAgIEdp dmVuIGEgZmxvYXRpbmcgcG9pbnQgdHlwZSwgYnVpbGQgYW4gcnZhbHVlIGZvcgorICAgdGhlIGdp dmVuIGNvbnN0YW50IDpjOnR5cGU6YF9Db21wbGV4IGxvbmcgZG91YmxlYC4gV2hlbiB0aGUgcmVz dWx0IHR5cGUgaXMKKyAgIG5vbi1jb21wbGV4LCB0aGUgaW1hZ2luYXJ5IHBhcnQgaXMgZGlzY2Fy ZGVkLgorCisgICBUaGlzIGZ1bmN0aW9uIHdhcyBhZGRlZCBpbiA6cmVmOmBMSUJHQ0NKSVRfQUJJ XzE2YDsKKyAgIHlvdSBjYW4gdGVzdCBmb3IgaXRzIHByZXNlbmNlIHVzaW5nCisgICAgICAgYCNp ZmRlZiBMSUJHQ0NKSVRfSEFWRV9MT05HTE9OR19DT05TVEFOVFNgCisKIC4uIGZ1bmN0aW9uOjog Z2NjX2ppdF9ydmFsdWUgKlwKICAgICAgICAgICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFs dWVfZnJvbV9wdHIgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgXAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NjX2ppdF90eXBlICpwb2ludGVyX3R5 cGUsIFwKQEAgLTQwMyw3ICs0NDQsNyBAQCBCaW5hcnkgT3BlcmF0aW9uICAgICAgICAgICAgICAg ICAgICAgICAgICBDIGVxdWl2YWxlbnQgICAgU3VwcG9ydGVkIG9wZXJhbmQgdHlwZQogICAgdGhl IGltYWdpbmFyeS4gTmVnYXRpdmUgemVyb2VzIGFyZSBwcmVzZXJ2ZWQKICAgIGFuZCBJbmY6cyBk byBub3QgbGVhZCB0byBOYU5zLgogCi0gICBUaGlzIG9wZXJhdG9yICB3YXMgYWRkZWQgaW4gTElC R0NDSklUX0FCSV8xNjsKKyAgIFRoaXMgb3BlcmF0b3IgIHdhcyBhZGRlZCBpbiA6cmVmOmBMSUJH Q0NKSVRfQUJJXzE2YDsKICAgIHlvdSBjYW4gdGVzdCBmb3IgaXRzIHByZXNlbmNlIHVzaW5nCiAg ICAgICAgYCNpZmRlZiBMSUJHQ0NKSVRfSEFWRV9DT01QTEVYYAogCmRpZmYgLS1naXQgYS9nY2Mv aml0L2ppdC1wbGF5YmFjay5jIGIvZ2NjL2ppdC9qaXQtcGxheWJhY2suYwppbmRleCA4YjFjYjgx OGI5MC4uMWY0ZGMzMWExYzEgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvaml0LXBsYXliYWNrLmMKKysr IGIvZ2NjL2ppdC9qaXQtcGxheWJhY2suYwpAQCAtNjEsNiArNjEsMTMgQEAgYWxvbmcgd2l0aCBH Q0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKICNkZWZpbmUgU0VUX0RFQ0xf SklUX0JJVF9GSUVMRChOT0RFKSBcCiAgIChERUNMX0xBTkdfRkxBR180IChGSUVMRF9ERUNMX0NI RUNLIChOT0RFKSkgPSAxKQogCisvKiAiVGhlcmUgYXJlIGFsd2F5cyBbYXRsZWFzdF0gMzIgYml0 cyBpbiBlYWNoIGxvbmcsIG5vIG1hdHRlciB0aGUKKyAgICBzaXplIG9mIHRoZSBob3N0cyBsb25n LiAgV2UgaGFuZGxlIGZsb2F0aW5nIHBvaW50IHJlcHJlc2VudGF0aW9ucworICAgIHdpdGggdXAg dG8gMTkyIGJpdHMiLCBzYXlzIG5hdGl2ZV9pbnRlcnByZXRfcmVhbCgpIGluIGZvbGQtY29uc3Qu Yy4KKyAgICBUaGF0IG1lYW5zIDYgbG9uZ3MgdG8gc3RvcmUgYSBsb25nIGRvdWJsZS4gV2UnbGwg bWFrZSBpdCA4IHRvCisgICAgYmUgc2FmZSB3aXRoIHBhZGRpbmcuICovCisjZGVmaW5lIE5fTE9O R1NfTERPVUJMRSA4CisKIC8qIGdjYzo6aml0OjpwbGF5YmFjazo6Y29udGV4dDo6YnVpbGRfY2Fz dCB1c2VzIHRoZSBjb252ZXJ0LmggQVBJLAogICAgd2hpY2ggaW4gdHVybiByZXF1aXJlcyB0aGUg ZnJvbnRlbmQgdG8gcHJvdmlkZSBhICJjb252ZXJ0IgogICAgZnVuY3Rpb24sIGFwcGFyZW50bHkg YXMgYSBmYWxsYmFjayBmb3IgY2FzdHMgdGhhdCBjYW4gYmUgc2ltcGxpZmllZApAQCAtNzQzLDE1 ICs3NTAsMTQgQEAgbmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxpbnQ+ICh0eXBlICp0eXBlLAogICAg IH0KIH0KIAotLyogU3BlY2lhbGl6YXRpb24gb2YgbWFraW5nIGFuIHJ2YWx1ZSBmcm9tIGEgY29u c3QsIGZvciBob3N0IDxsb25nPi4gICovCisvKiBTcGVjaWFsaXphdGlvbiBvZiBtYWtpbmcgYW4g cnZhbHVlIGZyb20gYSBjb25zdCwgZm9yIGhvc3QgPGxvbmcgbG9uZz4uICovCiAKIHRlbXBsYXRl IDw+CiBydmFsdWUgKgogY29udGV4dDo6Ci1uZXdfcnZhbHVlX2Zyb21fY29uc3QgPGxvbmc+ICh0 eXBlICp0eXBlLAotCQkJICAgICAgbG9uZyB2YWx1ZSkKK25ld19ydmFsdWVfZnJvbV9jb25zdCA8 bG9uZyBsb25nPiAodHlwZSAqdHlwZSwKKwkJCQkgICBsb25nIGxvbmcgdmFsdWUpCiB7Ci0gIC8v IEZJWE1FOiB0eXBlLWNoZWNraW5nLCBvciBjb2VyY2lvbj8KICAgdHJlZSBpbm5lcl90eXBlID0g dHlwZS0+YXNfdHJlZSAoKTsKICAgaWYgKElOVEVHUkFMX1RZUEVfUCAoaW5uZXJfdHlwZSkpCiAg ICAgewpAQCAtNzg2LDYgKzc5MiwxNyBAQCBuZXdfcnZhbHVlX2Zyb21fY29uc3QgPGxvbmc+ICh0 eXBlICp0eXBlLAogICAgIH0KIH0KIAorLyogU3BlY2lhbGl6YXRpb24gb2YgbWFraW5nIGFuIHJ2 YWx1ZSBmcm9tIGEgY29uc3QsIGZvciBob3N0IDxsb25nPi4gICovCisKK3RlbXBsYXRlIDw+City dmFsdWUgKgorY29udGV4dDo6CituZXdfcnZhbHVlX2Zyb21fY29uc3QgPGxvbmc+ICh0eXBlICp0 eXBlLAorCQkJICAgICAgbG9uZyB2YWx1ZSkKK3sKKyAgcmV0dXJuIG5ld19ydmFsdWVfZnJvbV9j b25zdCA8bG9uZyBsb25nPiAodHlwZSwgdmFsdWUpOworfQorCiAvKiBTcGVjaWFsaXphdGlvbiBv ZiBtYWtpbmcgYW4gcnZhbHVlIGZyb20gYSBjb25zdCwgZm9yIGhvc3QgPGRvdWJsZT4uICAqLwog CiB0ZW1wbGF0ZSA8PgpAQCAtODQ3LDYgKzg2NCw2NSBAQCBuZXdfcnZhbHVlX2Zyb21fY29uc3Qg PGRvdWJsZT4gKHR5cGUgKnR5cGUsCiAgICAgfQogfQogCisvKiBTcGVjaWFsaXphdGlvbiBvZiBt YWtpbmcgYW4gcnZhbHVlIGZyb20gYSBjb25zdCwgZm9yIGhvc3QgPGxvbmcgZG91YmxlPi4gICov CisKK3RlbXBsYXRlIDw+CitydmFsdWUgKgorY29udGV4dDo6CituZXdfcnZhbHVlX2Zyb21fY29u c3QgPGxvbmcgZG91YmxlPiAodHlwZSAqdHlwZSwKKwkJCQkgICAgIGxvbmcgZG91YmxlIHZhbHVl KQoreworICB0cmVlIGlubmVyX3R5cGUgPSB0eXBlLT5hc190cmVlICgpOworCisgIHNjYWxhcl9m bG9hdF9tb2RlIG1vZGUgPSBTQ0FMQVJfRkxPQVRfVFlQRV9NT0RFIChsb25nX2RvdWJsZV90eXBl X25vZGUpOworCisgIHVuaW9uCisgIHsKKyAgICBsb25nIGRvdWJsZSBhc19sb25nX2RvdWJsZTsK KyAgICB1aW50MzJfdCBhc191aW50MzJzW05fTE9OR1NfTERPVUJMRV07CisgIH0gdV9yZWFsLCB1 X2ltYWc7CisKKyAgdV9yZWFsLmFzX2xvbmdfZG91YmxlID0gdmFsdWU7CisKKyAgbG9uZyBpbnQg YXNfbG9uZ19pbnRzW05fTE9OR1NfTERPVUJMRV07CisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBO X0xPTkdTX0xET1VCTEU7IGkrKykKKyAgICBhc19sb25nX2ludHNbaV0gPSB1X3JlYWwuYXNfdWlu dDMyc1tpXTsKKworICBSRUFMX1ZBTFVFX1RZUEUgcmVhbF92YWx1ZTsKKyAgcmVhbF9mcm9tX3Rh cmdldCAoJnJlYWxfdmFsdWUsIGFzX2xvbmdfaW50cywgbW9kZSk7CisKKyAgaWYgKENPTVBMRVhf RkxPQVRfVFlQRV9QIChpbm5lcl90eXBlKSkKKyAgICB7CisgICAgICB0cmVlIHRyZWVfcmVhbDsK KyAgICAgIHRyZWUgdHJlZV9pbWFnOworICAgICAgdHJlZSByZWFsX3R5cGU7CisKKyAgICAgIFJF QUxfVkFMVUVfVFlQRSBpbWFnX3ZhbHVlOworCisgICAgICBsb25nIGludCB6ZXJvX2FzX2xvbmdf aW50c1tOX0xPTkdTX0xET1VCTEVdOworICAgICAgdV9pbWFnLmFzX2xvbmdfZG91YmxlID0gMC47 CisKKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTl9MT05HU19MRE9VQkxFOyBpKyspCisJemVy b19hc19sb25nX2ludHNbaV0gPSB1X2ltYWcuYXNfdWludDMyc1tpXTsKKworICAgICAgcmVhbF9m cm9tX3RhcmdldCAoJmltYWdfdmFsdWUsIHplcm9fYXNfbG9uZ19pbnRzLCBtb2RlKTsKKworICAg ICAgcmVhbF90eXBlID0gY29tcGxleF9yZWFsX3RvX3JlYWwgKGlubmVyX3R5cGUpOworCisgICAg ICB0cmVlX3JlYWwgPSBidWlsZF9yZWFsIChyZWFsX3R5cGUsIHJlYWxfdmFsdWUpOworICAgICAg dHJlZV9pbWFnID0gYnVpbGRfcmVhbCAocmVhbF90eXBlLCBpbWFnX3ZhbHVlKTsKKworICAgICAg dHJlZSBpbm5lciA9IGJ1aWxkX2NvbXBsZXggKGlubmVyX3R5cGUsIHRyZWVfcmVhbCwgdHJlZV9p bWFnKTsKKyAgICAgIHJldHVybiBuZXcgcnZhbHVlICh0aGlzLCBpbm5lcik7CisgICAgfQorICBl bHNlCisgICAgeworICAgICAgdHJlZSBpbm5lciA9IGJ1aWxkX3JlYWwgKGlubmVyX3R5cGUsIHJl YWxfdmFsdWUpOworICAgICAgcmV0dXJuIG5ldyBydmFsdWUgKHRoaXMsIGlubmVyKTsKKyAgICB9 Cit9CisKIC8qIFNwZWNpYWxpemF0aW9uIG9mIG1ha2luZyBhbiBydmFsdWUgZnJvbSBhIGNvbnN0 LAogICAgZm9yIGhvc3QgPGRvdWJsZSBfQ29tcGxleD4uICovCiAKQEAgLTkwMiw2ICs5NzgsNjUg QEAgbmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxfQ29tcGxleCBkb3VibGU+ICh0eXBlICp0eXBlLAog ICAgIH0KIH0KIAorLyogU3BlY2lhbGl6YXRpb24gb2YgbWFraW5nIGFuIHJ2YWx1ZSBmcm9tIGEg Y29uc3QsCisgICBmb3IgaG9zdCA8X0NvbXBsZXggbG9uZyBkb3VibGU+LiAqLworCit0ZW1wbGF0 ZSA8PgorcnZhbHVlICoKK2NvbnRleHQ6OgorbmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxfQ29tcGxl eCBsb25nIGRvdWJsZT4gKHR5cGUgKnR5cGUsCisJCQkJCSAgICAgIF9Db21wbGV4IGxvbmcgZG91 YmxlIHZhbHVlKQoreworICB0cmVlIGlubmVyX3R5cGUgPSB0eXBlLT5hc190cmVlICgpOworCisg IHNjYWxhcl9mbG9hdF9tb2RlIG1vZGUgPSBTQ0FMQVJfRkxPQVRfVFlQRV9NT0RFIChsb25nX2Rv dWJsZV90eXBlX25vZGUpOworCisgIHVuaW9uCisgIHsKKyAgICBsb25nIGRvdWJsZSBhc19sb25n X2RvdWJsZTsKKyAgICB1aW50MzJfdCBhc191aW50MzJzW05fTE9OR1NfTERPVUJMRV07CisgIH0g dV9yZWFsLCB1X2ltYWc7CisKKyAgdV9yZWFsLmFzX2xvbmdfZG91YmxlID0gY3JlYWxsKHZhbHVl KTsKKyAgbG9uZyBpbnQgYXNfbG9uZ19pbnRzW05fTE9OR1NfTERPVUJMRV07CisKKyAgZm9yIChp bnQgaSA9IDA7IGkgPCBOX0xPTkdTX0xET1VCTEU7IGkrKykKKyAgICBhc19sb25nX2ludHNbaV0g PSB1X3JlYWwuYXNfdWludDMyc1tpXTsKKworICBSRUFMX1ZBTFVFX1RZUEUgcmVhbF92YWx1ZTsK KyAgcmVhbF9mcm9tX3RhcmdldCAoJnJlYWxfdmFsdWUsIGFzX2xvbmdfaW50cywgbW9kZSk7CisK KyAgaWYgKENPTVBMRVhfRkxPQVRfVFlQRV9QIChpbm5lcl90eXBlKSkKKyAgICB7CisgICAgICB0 cmVlIHRyZWVfcmVhbDsKKyAgICAgIHRyZWUgdHJlZV9pbWFnOworICAgICAgdHJlZSByZWFsX3R5 cGU7CisKKyAgICAgIFJFQUxfVkFMVUVfVFlQRSBpbWFnX3ZhbHVlOworCisgICAgICBsb25nIGlu dCB2YWx1ZV9hc19sb25nX2ludHNbTl9MT05HU19MRE9VQkxFXTsKKyAgICAgIHVfaW1hZy5hc19s b25nX2RvdWJsZSA9IGNpbWFnbCh2YWx1ZSk7CisKKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg Tl9MT05HU19MRE9VQkxFOyBpKyspCisJdmFsdWVfYXNfbG9uZ19pbnRzW2ldID0gdV9pbWFnLmFz X3VpbnQzMnNbaV07CisKKyAgICAgIHJlYWxfZnJvbV90YXJnZXQgKCZpbWFnX3ZhbHVlLCB2YWx1 ZV9hc19sb25nX2ludHMsIG1vZGUpOworCisgICAgICByZWFsX3R5cGUgPSBjb21wbGV4X3JlYWxf dG9fcmVhbCAoaW5uZXJfdHlwZSk7CisKKyAgICAgIHRyZWVfcmVhbCA9IGJ1aWxkX3JlYWwgKHJl YWxfdHlwZSwgcmVhbF92YWx1ZSk7CisgICAgICB0cmVlX2ltYWcgPSBidWlsZF9yZWFsIChyZWFs X3R5cGUsIGltYWdfdmFsdWUpOworCisgICAgICB0cmVlIGlubmVyID0gYnVpbGRfY29tcGxleCAo aW5uZXJfdHlwZSwgdHJlZV9yZWFsLCB0cmVlX2ltYWcpOworICAgICAgcmV0dXJuIG5ldyBydmFs dWUgKHRoaXMsIGlubmVyKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB0cmVlIGlubmVy ID0gYnVpbGRfcmVhbCAoaW5uZXJfdHlwZSwgcmVhbF92YWx1ZSk7CisgICAgICByZXR1cm4gbmV3 IHJ2YWx1ZSAodGhpcywgaW5uZXIpOworICAgIH0KK30KKwogLyogU3BlY2lhbGl6YXRpb24gb2Yg bWFraW5nIGFuIHJ2YWx1ZSBmcm9tIGEgY29uc3QsIGZvciBob3N0IDx2b2lkICo+LiAgKi8KIAog dGVtcGxhdGUgPD4KZGlmZiAtLWdpdCBhL2djYy9qaXQvaml0LXJlY29yZGluZy5jIGIvZ2NjL2pp dC9qaXQtcmVjb3JkaW5nLmMKaW5kZXggYjNiYjZhY2ZlYjkuLjhkMzQ5NTZmYzY3IDEwMDY0NAot LS0gYS9nY2Mvaml0L2ppdC1yZWNvcmRpbmcuYworKysgYi9nY2Mvaml0L2ppdC1yZWNvcmRpbmcu YwpAQCAtMjcsNiArMjcsNyBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkcz LiAgSWYgbm90IHNlZQogCiAjaW5jbHVkZSA8cHRocmVhZC5oPgogI2luY2x1ZGUgPGNvbXBsZXgu aD4KKyNpbmNsdWRlIDxmbG9hdC5oPgogCiAjaW5jbHVkZSAiaml0LWJ1aWx0aW5zLmgiCiAjaW5j bHVkZSAiaml0LXJlY29yZGluZy5oIgpAQCAtMTczNCw4ICsxNzM1LDQ4IEBAIHJlY29yZGluZzo6 Y29udGV4dDo6ZHVtcF9yZXByb2R1Y2VyX3RvX2ZpbGUgKGNvbnN0IGNoYXIgKnBhdGgpCiAJICAg IiBnY2Nfaml0X2NvbnRleHRfZHVtcF9yZXByb2R1Y2VyX3RvX2ZpbGUuXG5cbiIpOwogICBwcmlu dF92ZXJzaW9uIChyLmdldF9maWxlICgpLCAiICAiLCBmYWxzZSk7CiAgIHIud3JpdGUgKCIqL1xu Iik7Ci0gIHIud3JpdGUgKCIjaW5jbHVkZSA8bGliZ2Njaml0Lmg+XG5cbiIpOwotICByLndyaXRl ICgiI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVd1bnVzZWQtdmFyaWFibGVcIlxu XG4iKTsKKyAgci53cml0ZSAoCisgICAgIiNpbmNsdWRlIDxsaWJnY2NqaXQuaD5cbiIKKyAgICAi I2luY2x1ZGUgPG1hdGguaD5cbiIKKyAgICAiI2luY2x1ZGUgPGNvbXBsZXguaD5cbiIKKyAgICAi I2luY2x1ZGUgPHN0cmluZy5oPlxuXG4iKTsKKyAgci53cml0ZSAoIiNwcmFnbWEgR0NDIGRpYWdu b3N0aWMgaWdub3JlZCBcIi1XdW51c2VkLXZhcmlhYmxlXCJcbiIpOworICByLndyaXRlICgiI3By YWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVd1bnVzZWQtZnVuY3Rpb25cIlxuXG4iKTsK KyAgLyogVHlwZSBwdW5uaW5nIHVuaW9ucyAqLworICByLndyaXRlICgidW5pb24gZHVsbCB7IGRv dWJsZSBkOyB1bnNpZ25lZCBsb25nIGxvbmcgdWxsOyB9O1xuXG4iKTsKKyAgci53cml0ZSAoCisg ICAgInVuaW9uIGxkYXJyIHsgbG9uZyBkb3VibGUgbGQ7IHVuc2lnbmVkIGFycltzaXplb2YgKGxv bmcgZG91YmxlKV07fTtcblxuIik7CisKKyAgLyogRnVuY3Rpb25zIGZvciB0eXBlIHB1bm5pbmcg bmFuOnMsIGtlZXBpbmcgYml0IHJlcHJlc2VudGF0aW9uICovCisgIHIud3JpdGUgKAorICAgICIv KiBDb252ZXJ0IHR5cGUgcHVubmVkIHVpbnQgNjQgdG8gZG91YmxlIE5hTi5cbiIKKyAgICAiICAg TWlnaHQgbG9zZS9jb3JydXB0IHBheWxvYWQgYmV0d2VlbiBhcmNoaXRlY3R1cmVzLiAqL1xuIgor ICAgICJzdGF0aWMgZG91YmxlXG4iCisgICAgInVsbF90b19kICh1bnNpZ25lZCBsb25nIGxvbmcg dWxsKVxuIgorICAgICJ7XG4iCisgICAgIiAgdW5pb24gZHVsbCB1OyB1LnVsbCA9IHVsbDtcbiIK KyAgICAiICAvKiBQYXJhbm9pYSBjaGVjayBmb3IgZm9yZWlnbiBOYU4gcmVwcmVzZW50YXRpb24u ICovXG4iCisgICAgIiAgaWYgKCFpc25hbiAodS5kKSkgcmV0dXJuIE5BTjtcbiIKKyAgICAiICBy ZXR1cm4gdS5kO1xuIgorICAgICJ9XG5cbiIpOworICByLndyaXRlICgKKyAgICAiLyogQ29udmVy dCBhcnJheSB0byBsb25nIGRvdWJsZSBOYU4uXG4iCisgICAgIiAgIE1pZ2h0IGxvc2UvY29ycnVw dCBwYXlsb2FkIGJldHdlZW4gYXJjaGl0ZWN0dXJlcy4gKi9cbiIKKyAgICAic3RhdGljIGxvbmcg ZG91YmxlXG4iCisgICAgImFycl90b19sZCAodW5zaWduZWQgY2hhciAqYXJyLCBpbnQgbGVuKVxu IgorICAgICJ7XG4iCisgICAgIiAgdW5pb24gbGRhcnIgdTtcbiIKKyAgICAvKiBTaW5jZSBsb25n IGRvdWJsZSBzaXplcyBjYW4gdmFyeSBiZXR3ZWVuIGFyY2hpdGVjdHVyZXMsCisgICAgICAgd2Ug bmVlZCB0byBoYW5kbGUgdGhhdC4gKi8KKyAgICAiICAvKiBGb3IgZm9yZWlnbiBsb25nIGRvdWJs ZSBzaXplcyAqL1xuIgorICAgICIgIGlmIChzaXplb2YgdS5hcnIgIT0gbGVuKSByZXR1cm4gTkFO O1xuIgorICAgICIgIG1lbWNweSAodS5hcnIsIGFyciwgbGVuKTtcbiIKKyAgICAvKiBUaGUgc2l6 ZSBtaWdodCBmb29sIHVzIGJlY291c2Ugb2YgcGFkZGluZywgc28gY2hlY2sgaXQgaXMgYSBuYW4u ICovCisgICAgIiAgLyogSGFuZGxlIGZvcmVpZ24gcmVwcmVzZW50YXRpb25zIHRoYXQgaXMgbm90 IE5hTiBvbiB0aGlzIG1hY2hpbmUuICovXG4iCisgICAgIiAgaWYgKCFpc25hbiAodS5sZCkpIHJl dHVybiBOQU47XG4iCisgICAgIiAgcmV0dXJuIHUubGQ7XG4iCisgICAgIn1cblxuIik7CisKICAg ci53cml0ZSAoInN0YXRpYyB2b2lkXG5zZXRfb3B0aW9ucyAoIik7CiAgIHIud3JpdGVfcGFyYW1z IChjb250ZXh0cyk7CiAgIHIud3JpdGUgKCIpO1xuXG4iKTsKQEAgLTQ3NTgsOCArNDc5OSwxMSBA QCByZWNvcmRpbmc6Omdsb2JhbDo6d3JpdGVfcmVwcm9kdWNlciAocmVwcm9kdWNlciAmcikKIC8q IEV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIG9mIHRoZSB2YXJpb3VzIG1lbWVudG9zIHdlJ3JlIGlu dGVyZXN0ZWQgaW4uICAqLwogdGVtcGxhdGUgY2xhc3MgcmVjb3JkaW5nOjptZW1lbnRvX29mX25l d19ydmFsdWVfZnJvbV9jb25zdCA8aW50PjsKIHRlbXBsYXRlIGNsYXNzIHJlY29yZGluZzo6bWVt ZW50b19vZl9uZXdfcnZhbHVlX2Zyb21fY29uc3QgPGxvbmc+OwordGVtcGxhdGUgY2xhc3MgcmVj b3JkaW5nOjptZW1lbnRvX29mX25ld19ydmFsdWVfZnJvbV9jb25zdCA8bG9uZyBsb25nPjsKIHRl bXBsYXRlIGNsYXNzIHJlY29yZGluZzo6bWVtZW50b19vZl9uZXdfcnZhbHVlX2Zyb21fY29uc3Qg PGRvdWJsZT47Cit0ZW1wbGF0ZSBjbGFzcyByZWNvcmRpbmc6Om1lbWVudG9fb2ZfbmV3X3J2YWx1 ZV9mcm9tX2NvbnN0IDxsb25nIGRvdWJsZT47CiB0ZW1wbGF0ZSBjbGFzcyByZWNvcmRpbmc6Om1l bWVudG9fb2ZfbmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxfQ29tcGxleCBkb3VibGU+OwordGVtcGxh dGUgY2xhc3MgcmVjb3JkaW5nOjptZW1lbnRvX29mX25ld19ydmFsdWVfZnJvbV9jb25zdCA8X0Nv bXBsZXggbG9uZyBkb3VibGU+OwogdGVtcGxhdGUgY2xhc3MgcmVjb3JkaW5nOjptZW1lbnRvX29m X25ld19ydmFsdWVfZnJvbV9jb25zdCA8dm9pZCAqPjsKIAogLyogSW1wbGVtZW50YXRpb24gb2Yg dGhlIHB1cmUgdmlydHVhbCBob29rIHJlY29yZGluZzo6bWVtZW50bzo6cmVwbGF5X2ludG8KQEAg LTQ4OTYsNiArNDk0MCw3MCBAQCByZWNvcmRpbmc6Om1lbWVudG9fb2ZfbmV3X3J2YWx1ZV9mcm9t X2NvbnN0IDxsb25nPjo6d3JpdGVfcmVwcm9kdWNlciAocmVwcm9kdWNlcgogCSAgIG1fdmFsdWUp OwogCSAgIH0KIAorLyogVGhlIG1ha2VfZGVidWdfc3RyaW5nIHNwZWNpYWxpemF0aW9uIGZvciA8 bG9uZyBsb25nPiwgcmVuZGVyaW5nIGl0IGFzCisgICAgIChUQVJHRVRfVFlQRSlMSVRFUkFMCisg ICBlLmcuCisgICAgICIobG9uZyBsb25nKTQyIi4gKi8KKwordGVtcGxhdGUgPD4KK3N0cmluZyAq CittZW1lbnRvX29mX25ld19ydmFsdWVfZnJvbV9jb25zdCA8bG9uZyBsb25nPjo6bWFrZV9kZWJ1 Z19zdHJpbmcgKCkKK3sKKyAgcmV0dXJuIHN0cmluZzo6ZnJvbV9wcmludGYgKG1fY3R4dCwKKwkJ CSAgICAgICIoJXMpJWxsaSIsCisJCQkgICAgICBtX3R5cGUtPmdldF9kZWJ1Z19zdHJpbmcgKCks CisJCQkgICAgICBtX3ZhbHVlKTsKK30KKworLyogVGhlIGdldF93aWRlX2ludCBzcGVjaWFsaXph dGlvbiBmb3IgPGxvbmcgbG9uZz4uICovCisKK3RlbXBsYXRlIDw+Citib29sCittZW1lbnRvX29m X25ld19ydmFsdWVfZnJvbV9jb25zdCA8bG9uZyBsb25nPjo6Z2V0X3dpZGVfaW50ICh3aWRlX2lu dCAqb3V0KSBjb25zdAoreworICAqb3V0ID0gd2k6OnNod2kgKG1fdmFsdWUsIHNpemVvZiAobV92 YWx1ZSkgKiA4KTsKKyAgcmV0dXJuIHRydWU7Cit9CisKKy8qIFRoZSB3cml0ZV9yZXByb2R1Y2Vy IHNwZWNpYWxpemF0aW9uIGZvciA8bG9uZyBsb25nPi4gKi8KKwordGVtcGxhdGUgPD4KK3ZvaWQK K3JlY29yZGluZzo6bWVtZW50b19vZl9uZXdfcnZhbHVlX2Zyb21fY29uc3QgPGxvbmcgbG9uZz46 Ogord3JpdGVfcmVwcm9kdWNlciAocmVwcm9kdWNlciAmcikKK3sKKyAgY29uc3QgY2hhciAqaWQg PSByLm1ha2VfaWRlbnRpZmllciAodGhpcywgInJ2YWx1ZSIpOworCisgIC8qIFNhbWUgc3BlY2lh bCBjYXNlIGFzIGluIGxvbmcgKi8KKyAgaWYgKG1fdmFsdWUgPT0gTE9OR19MT05HX01JTikKKyAg ICB7CisgICAgICByLndyaXRlICgKKwkiICBnY2Nfaml0X3J2YWx1ZSAqJXMgPVxuIgorCSIgICAg Z2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9sb25nX2xvbmcgKFxuIgorCSIgICAgICAl cywgLyogZ2NjX2ppdF9jb250ZXh0ICpjdHh0ICovXG4iCisJIiAgICAgICVzLCAvKiBnY2Nfaml0 X3R5cGUgKm51bWVyaWNfdHlwZSAqL1xuIgorCSIgICAgICAlbGxkTEwgLSAxKTsgLyogbG9uZyBs b25nIHZhbHVlICovXG4iLAorCWlkLAorCXIuZ2V0X2lkZW50aWZpZXIgKGdldF9jb250ZXh0ICgp KSwKKwlyLmdldF9pZGVudGlmaWVyX2FzX3R5cGUgKG1fdHlwZSksCisJbV92YWx1ZSArIDEpOwor ICAgICAgcmV0dXJuOworICAgIH0KKworICByLndyaXRlICgKKyAgICAiICBnY2Nfaml0X3J2YWx1 ZSAqJXMgPVxuIgorICAgICIgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9sb25n X2xvbmcgKFxuIgorICAgICIgICAgICAlcywgLyogZ2NjX2ppdF9jb250ZXh0ICpjdHh0ICovXG4i CisgICAgIiAgICAgICVzLCAvKiBnY2Nfaml0X3R5cGUgKm51bWVyaWNfdHlwZSAqL1xuIgorICAg ICIgICAgICAlbGxkTEwpOyAvKiBsb25nIGxvbmcgdmFsdWUgKi9cbiIsCisgICAgaWQsCisgICAg ci5nZXRfaWRlbnRpZmllciAoZ2V0X2NvbnRleHQgKCkpLAorICAgIHIuZ2V0X2lkZW50aWZpZXJf YXNfdHlwZSAobV90eXBlKSwKKyAgICBtX3ZhbHVlKTsKK30KKworCisKIC8qIFRoZSBtYWtlX2Rl YnVnX3N0cmluZyBzcGVjaWFsaXphdGlvbiBmb3IgPGRvdWJsZT4sIHJlbmRlcmluZyBpdCBhcwog ICAgICAoVEFSR0VUX1RZUEUpTElURVJBTAogICAgZS5nLgpAQCAtNDkwNiw3ICs1MDE0LDcgQEAg c3RyaW5nICoKIG1lbWVudG9fb2ZfbmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxkb3VibGU+OjptYWtl X2RlYnVnX3N0cmluZyAoKQogewogICByZXR1cm4gc3RyaW5nOjpmcm9tX3ByaW50ZiAobV9jdHh0 LAotCQkJICAgICAgIiglcyklZiIsCisJCQkgICAgICAiKCVzKSVnIiwKIAkJCSAgICAgIG1fdHlw ZS0+Z2V0X2RlYnVnX3N0cmluZyAoKSwKIAkJCSAgICAgIG1fdmFsdWUpOwogfQpAQCAtNDkyMCw2 ICs1MDI4LDE4IEBAIG1lbWVudG9fb2ZfbmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxkb3VibGU+Ojpn ZXRfd2lkZV9pbnQgKHdpZGVfaW50ICopIGNvbnN0CiAgIHJldHVybiBmYWxzZTsKIH0KIAorLyog Rm9yIHR5cGVwcnVuaW5nIE5hTnMuICovCit1bmlvbiBkdWxsIHsKKyAgZG91YmxlIGQ7CisgIHVu c2lnbmVkIGxvbmcgbG9uZyB1bGw7Cit9OworCit1bmlvbiBsZGFyciB7CisgIGxvbmcgZG91Ymxl IGxkOworICB1bnNpZ25lZCBjaGFyIGFycltzaXplb2YobG9uZyBkb3VibGUpXTsKK307CisKKwog LyogVGhlIHdyaXRlX3JlcHJvZHVjZXIgc3BlY2lhbGl6YXRpb24gZm9yIDxkb3VibGU+LiAgKi8K IAogdGVtcGxhdGUgPD4KQEAgLTQ5MjcsMTQgKzUwNDcsMTU0IEBAIHZvaWQKIHJlY29yZGluZzo6 bWVtZW50b19vZl9uZXdfcnZhbHVlX2Zyb21fY29uc3QgPGRvdWJsZT46OndyaXRlX3JlcHJvZHVj ZXIgKHJlcHJvZHVjZXIgJnIpCiB7CiAgIGNvbnN0IGNoYXIgKmlkID0gci5tYWtlX2lkZW50aWZp ZXIgKHRoaXMsICJydmFsdWUiKTsKLSAgci53cml0ZSAoIiAgZ2NjX2ppdF9ydmFsdWUgKiVzID1c biIKLSAgICAiICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fZG91YmxlICglcywg LyogZ2NjX2ppdF9jb250ZXh0ICpjdHh0ICovXG4iCi0gICAgIiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJXMsIC8qIGdjY19qaXRfdHlwZSAqbnVtZXJpY190eXBl ICovXG4iCi0gICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JWYpOyAvKiBkb3VibGUgdmFsdWUgKi9cbiIsCi0gICAgaWQsCi0gICAgci5nZXRfaWRlbnRpZmll ciAoZ2V0X2NvbnRleHQgKCkpLAotICAgIHIuZ2V0X2lkZW50aWZpZXJfYXNfdHlwZSAobV90eXBl KSwKLSAgICBtX3ZhbHVlKTsKKworICBpZiAoc3RkOjppc2Zpbml0ZSAobV92YWx1ZSkpCisgICAg ci53cml0ZSAoIiAgZ2NjX2ppdF9ydmFsdWUgKiVzID1cbiIKKyAgICAgICIgICAgZ2NjX2ppdF9j b250ZXh0X25ld19ydmFsdWVfZnJvbV9kb3VibGUgKCVzLCAvKiBnY2Nfaml0X2NvbnRleHQgKmN0 eHQgKi9cbiIKKyAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICVzLCAvKiBnY2Nfaml0X3R5cGUgKm51bWVyaWNfdHlwZSAqL1xuIgorICAgICAgIiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogJS45ZyAqL1xuIgorICAg ICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJWEpO1xuIiwK KyAgICAgIGlkLAorICAgICAgci5nZXRfaWRlbnRpZmllciAoZ2V0X2NvbnRleHQgKCkpLAorICAg ICAgci5nZXRfaWRlbnRpZmllcl9hc190eXBlIChtX3R5cGUpLAorICAgICAgbV92YWx1ZSwgbV92 YWx1ZSk7CisgICBlbHNlIGlmIChzdGQ6OmlzaW5mIChtX3ZhbHVlKSkKKyAgICAgeworICAgICAg IGNvbnN0IGNoYXIgKnNpZ24gPSAiIjsKKyAgICAgICBpZiAobV92YWx1ZSA8IDApCisJIHNpZ24g PSAiLSI7CisKKyAgICAgICByLndyaXRlICgiICBnY2Nfaml0X3J2YWx1ZSAqJXMgPVxuIgorCSAi ICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fZG91YmxlICglcywgLyogZ2NjX2pp dF9jb250ZXh0ICpjdHh0ICovXG4iCisJICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICVzLCAvKiBnY2Nfaml0X3R5cGUgKm51bWVyaWNfdHlwZSAqL1xuIgorCSAi ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbmYgKi9cbiIK KwkgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJXNJTkZJTklU WSk7XG4iLAorCSBpZCwKKwkgci5nZXRfaWRlbnRpZmllciAoZ2V0X2NvbnRleHQgKCkpLAorCSBy LmdldF9pZGVudGlmaWVyX2FzX3R5cGUgKG1fdHlwZSksCisJIHNpZ24pOworICAgICAgfQorICAg IGVsc2UgaWYgKHN0ZDo6aXNuYW4gKG1fdmFsdWUpKSB7CisgICAgICB1bmlvbiBkdWxsIHU7Cisg ICAgICB1LmQgPSBtX3ZhbHVlOworICAgICAgci53cml0ZSAoIiAgZ2NjX2ppdF9ydmFsdWUgKiVz ID1cbiIKKwkiICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fZG91YmxlICglcywg LyogZ2NjX2ppdF9jb250ZXh0ICpjdHh0ICovXG4iCisJIiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJXMsIC8qIGdjY19qaXRfdHlwZSAqbnVtZXJpY190eXBlICov XG4iCisJIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTmFO ICovXG4iCisJIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxs X3RvX2QoJSNsbHgpKTtcbiIsCisJaWQsCisJci5nZXRfaWRlbnRpZmllciAoZ2V0X2NvbnRleHQg KCkpLAorCXIuZ2V0X2lkZW50aWZpZXJfYXNfdHlwZSAobV90eXBlKSwKKwl1LnVsbCk7CisKKyAg ICB9Cit9CisKKy8qIFRoZSBtYWtlX2RlYnVnX3N0cmluZyBzcGVjaWFsaXphdGlvbiBmb3IgPGxv bmcgZG91YmxlPiwgcmVuZGVyaW5nIGl0IGFzCisgICAgIChUQVJHRVRfVFlQRSlMSVRFUkFMCisg ICBlLmcuCisgICAgICIoZmxvYXQpNDIuMCIuICAqLworCit0ZW1wbGF0ZSA8Pgorc3RyaW5nICoK K21lbWVudG9fb2ZfbmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxsb25nIGRvdWJsZT46Om1ha2VfZGVi dWdfc3RyaW5nICgpCit7CisgIHJldHVybiBzdHJpbmc6OmZyb21fcHJpbnRmIChtX2N0eHQsCisJ CQkgICAgICAiKCVzKSVMZyIsCisJCQkgICAgICBtX3R5cGUtPmdldF9kZWJ1Z19zdHJpbmcgKCks CisJCQkgICAgICBtX3ZhbHVlKTsKK30KKworLyogVGhlIGdldF93aWRlX2ludCBzcGVjaWFsaXph dGlvbiBmb3IgPGRvdWJsZT4uICAqLworCit0ZW1wbGF0ZSA8PgorYm9vbAorbWVtZW50b19vZl9u ZXdfcnZhbHVlX2Zyb21fY29uc3QgPGxvbmcgZG91YmxlPjo6Z2V0X3dpZGVfaW50ICh3aWRlX2lu dCAqKSBjb25zdAoreworICByZXR1cm4gZmFsc2U7Cit9CisKKy8qIEhlbHBlciBmdW5jdGlvbiBm b3Igd3JpdGVfcmVwcm9kdWNlcigpCisKKyAgIFdyaXRlIGFuIGFycmF5IG9mIHVuc2lnbmVkIGNo YXJzIHRvIHRoZSByZXByb2R1Y2VyLCBsaWtlOgorICAgezB4MTIsIDB4MzQsIC4uLiB9ICovCitz dGF0aWMgdm9pZAorcmVwcm9kdWNlcl93cml0ZV9hcnIgKHJlcHJvZHVjZXIgJnIsIHVuc2lnbmVk IGNoYXIgKmFyciwgaW50IGxlbikKK3sKKyAgaWYgKGxlbiA9PSAwKQorICAgIHJldHVybjsKKwor ICByLndyaXRlICgieyIpOworICBmb3IgKGludCBpID0gMDsgaSA8IGxlbiAtIDE7IGkrKykKKyAg ICByLndyaXRlICgiJSN4ICwgIiwgYXJyW2ldKTsKKyAgci53cml0ZSAoIiUjeCB9IiwgYXJyW2xl biAtIDFdKTsKK30KKworLyogVGhlIHdyaXRlX3JlcHJvZHVjZXIgc3BlY2lhbGl6YXRpb24gZm9y IDxkb3VibGU+LiAgKi8KKwordGVtcGxhdGUgPD4KK3ZvaWQKK3JlY29yZGluZzo6bWVtZW50b19v Zl9uZXdfcnZhbHVlX2Zyb21fY29uc3QgPGxvbmcgZG91YmxlPjo6Cit3cml0ZV9yZXByb2R1Y2Vy IChyZXByb2R1Y2VyICZyKQoreworICBjb25zdCBjaGFyICppZCA9IHIubWFrZV9pZGVudGlmaWVy ICh0aGlzLCAicnZhbHVlIik7CisKKyAgaWYgKHN0ZDo6aXNmaW5pdGUgKG1fdmFsdWUpKQorICAg IHIud3JpdGUgKAorICAgICAgIiAgZ2NjX2ppdF9ydmFsdWUgKiVzID1cbiIKKyAgICAgICIgICAg Z2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9sb25nX2RvdWJsZSAoXG4iCisgICAgICAi ICAgICAgJXMsIC8qIGdjY19qaXRfY29udGV4dCAqY3R4dCAqL1xuIgorICAgICAgIiAgICAgICVz LCAvKiBnY2Nfaml0X3R5cGUgKm51bWVyaWNfdHlwZSAqL1xuIgorICAgICAgIiAgICAgIC8qICUu OUxnICovXG4iCisgICAgICAiICAgICAgJUxhTCk7IC8qIGxvbmcgZG91YmxlIHZhbHVlICovXG4i LAorICAgICAgaWQsCisgICAgICByLmdldF9pZGVudGlmaWVyIChnZXRfY29udGV4dCAoKSksCisg ICAgICByLmdldF9pZGVudGlmaWVyX2FzX3R5cGUgKG1fdHlwZSksCisgICAgICBtX3ZhbHVlLCBt X3ZhbHVlKTsKKyAgZWxzZSBpZiAoc3RkOjppc2luZiAobV92YWx1ZSkpCisgICAgeworICAgICAg Y29uc3QgY2hhciAqc2lnbiA9ICIiOworICAgICAgaWYgKG1fdmFsdWUgPCAwKQorCXNpZ24gPSAi LSI7CisgICAgICByLndyaXRlICgKKyAgICAgICIgIGdjY19qaXRfcnZhbHVlIColcyA9XG4iCisg ICAgICAiICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fbG9uZ19kb3VibGUgKFxu IgorICAgICAgIiAgICAgICVzLCAvKiBnY2Nfaml0X2NvbnRleHQgKmN0eHQgKi9cbiIKKyAgICAg ICIgICAgICAlcywgLyogZ2NjX2ppdF90eXBlICpudW1lcmljX3R5cGUgKi9cbiIKKyAgICAgICIg ICAgICAvKiBpbmYgKi9cbiIKKyAgICAgICIgICAgICAlc0lORklOSVRZKTtcbiIsCisgICAgICBp ZCwKKyAgICAgIHIuZ2V0X2lkZW50aWZpZXIgKGdldF9jb250ZXh0ICgpKSwKKyAgICAgIHIuZ2V0 X2lkZW50aWZpZXJfYXNfdHlwZSAobV90eXBlKSwKKyAgICAgIHNpZ24pOworICAgIH0KKyAgZWxz ZQorICAgIHsKKyAgICAgIHVuaW9uIGxkYXJyIHU7IC8qIEZvciB0eXBlIHB1bm5pbmcgdG8gYXJy YXkgKi8KKyAgICAgIHUubGQgPSBtX3ZhbHVlOworCisgICAgICByLndyaXRlICgiICBnY2Nfaml0 X3J2YWx1ZSAqJXM7XG4iLCBpZCk7CisgICAgICAvKiBTY29wZSBmb3IgbG9jYWwgKi8KKyAgICAg IHIud3JpdGUgKCIgIHsgLyogbG9uZyBkb3VibGUgTmFOIHN0b3JlZCBpbiBjaGFyIGFyciAqL1xu Iik7CisgICAgICAvKiBXcml0ZSBhbiBjaGFyIGFyciBvZiB0aGUgYnl0ZXMgb2YgdGhlIE5hTiAq LworICAgICAgci53cml0ZSAoIiAgICB1bnNpZ25lZCBjaGFyIGFycltdID0gIik7CisgICAgICBy ZXByb2R1Y2VyX3dyaXRlX2FyciAociwgdS5hcnIsIHNpemVvZiB1LmFycik7CisgICAgICByLndy aXRlICgiO1xuIik7CisKKyAgICAgIHIud3JpdGUgKAorICAgICAgIiAgICAlcyA9XG4iCisgICAg ICAiICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9sb25nX2RvdWJsZSAoXG4i CisgICAgICAiICAgICAgICAlcywgLyogZ2NjX2ppdF9jb250ZXh0ICpjdHh0ICovXG4iCisgICAg ICAiICAgICAgICAlcywgLyogZ2NjX2ppdF90eXBlICpudW1lcmljX3R5cGUgKi9cbiIKKyAgICAg ICIgICAgICAgIC8qICVMZyAqL1xuIgorICAgICAgIiAgICAgICAgYXJyX3RvX2xkIChhcnIsIHNp emVvZiBhcnIpKTtcbiIsCisgICAgICBpZCwKKyAgICAgIHIuZ2V0X2lkZW50aWZpZXIgKGdldF9j b250ZXh0ICgpKSwKKyAgICAgIHIuZ2V0X2lkZW50aWZpZXJfYXNfdHlwZSAobV90eXBlKSwKKyAg ICAgIG1fdmFsdWUpOworCisgICAgICByLndyaXRlICgiICB9XG4iKTsgLyogQ2xvc2Ugc2NvcGUg Ki8KKyAgICB9CiB9CiAKIC8qIFRoZSBtYWtlX2RlYnVnX3N0cmluZyBzcGVjaWFsaXphdGlvbiBm b3IgPGRvdWJsZSBjb21wbGV4PiwgcmVuZGVyaW5nIGl0IGFzCkBAIC00OTY0LDcgKzUyMjQsNyBA QCBnZXRfd2lkZV9pbnQgKHdpZGVfaW50ICopIGNvbnN0CiAgIHJldHVybiBmYWxzZTsKIH0KIAot LyogVGhlIHdyaXRlX3JlcHJvZHVjZXIgc3BlY2lhbGl6YXRpb24gZm9yIDxkb3VibGU+LiAgKi8K Ky8qIFRoZSB3cml0ZV9yZXByb2R1Y2VyIHNwZWNpYWxpemF0aW9uIGZvciA8X0NvbXBsZXggZG91 YmxlPi4gICovCiAKIHRlbXBsYXRlIDw+CiB2b2lkCkBAIC00OTc0LDE0ICs1MjM0LDE2NCBAQCB3 cml0ZV9yZXByb2R1Y2VyIChyZXByb2R1Y2VyICZyKQogICBjb25zdCBjaGFyICppZCA9IHIubWFr ZV9pZGVudGlmaWVyICh0aGlzLCAicnZhbHVlIik7CiAgIGRvdWJsZSByZWFsID0gY3JlYWwobV92 YWx1ZSk7CiAgIGRvdWJsZSBpbWFnID0gY2ltYWcobV92YWx1ZSk7Ci0gIHIud3JpdGUgKCIgIGdj Y19qaXRfcnZhbHVlIColcyA9XG4iCi0gICAgIiAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1 ZV9mcm9tX2NvbXBsZXhfZG91YmxlICglcywgLyogZ2NjX2ppdF9jb250ZXh0ICpjdHh0ICovXG4i Ci0gICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJXMsIC8q IGdjY19qaXRfdHlwZSAqbnVtZXJpY190eXBlICovXG4iCi0gICAgIiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJWYrJWZqKTsgLyogZG91YmxlIHZhbHVlICovXG4i LAorCisgIHIud3JpdGUgKAorICAgICIgIGdjY19qaXRfcnZhbHVlIColcyA9XG4iCisgICAgIiAg ICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2NvbXBsZXhfZG91YmxlIChcbiIKKyAg ICAiICAgICAgJXMsIC8qIGdjY19qaXRfY29udGV4dCAqY3R4dCAqL1xuIgorICAgICIgICAgICAl cywgLyogZ2NjX2ppdF90eXBlICpudW1lcmljX3R5cGUgKi9cbiIKKyAgICAiICAgICAgLyogJS45 ZyArICUuOWdqICovXG4iCisgICAgIiAgICAgIENNUExYICgiLC8qIC4uLiByZWFsLCBpbWFnKSk7 ICovCisgICAgaWQsCisgICAgci5nZXRfaWRlbnRpZmllciAoZ2V0X2NvbnRleHQgKCkpLAorICAg IHIuZ2V0X2lkZW50aWZpZXJfYXNfdHlwZSAobV90eXBlKSwKKyAgICByZWFsLCBpbWFnKTsKKwor ICBpZiAoc3RkOjppc2Zpbml0ZSAocmVhbCkpCisgICAgci53cml0ZSgiJWEsIiwgcmVhbCk7Cisg IGVsc2UgaWYgKHN0ZDo6aXNpbmYgKHJlYWwpKQorICAgIHsKKyAgICAgIGlmIChyZWFsIDwgMCkK KwlyLndyaXRlICgiLUlORklOSVRZLCIpOworICAgICAgZWxzZQorCXIud3JpdGUgKCJJTkZJTklU WSwiKTsKKyAgICB9CisgIGVsc2UgLyogTmFOICovCisgICAgeworICAgICAgLyogU3RvcmUgdGhl IE5hTiBhcyBhIHVuc2lnbmVkIGxvbmcgbG9uZyBsaXRlcmFsLgorCSB1bGxfdG9fZCgpIHdpbGwg Y29udmVydCBpdCBiYWNrIHRvIGRvdWJsZSAqLworICAgICAgdW5pb24gZHVsbCB1OworICAgICAg dS5kID0gcmVhbDsKKyAgICAgIHIud3JpdGUgKCJ1bGxfdG9fZCAoJSNsbHgpLCIsIHUudWxsKTsK KyAgICB9CisKKyAgaWYgKHN0ZDo6aXNmaW5pdGUgKGltYWcpKQorICAgIHIud3JpdGUoIiVhKSIs IGltYWcpOworICBlbHNlIGlmIChzdGQ6OmlzaW5mIChpbWFnKSkKKyAgICB7CisgICAgICBpZiAo cmVhbCA8IDApCisJci53cml0ZSAoIi1JTkZJTklUWSkiKTsKKyAgICAgIGVsc2UKKwlyLndyaXRl ICgiSU5GSU5JVFkpIik7CisgICAgfQorICBlbHNlIC8qIE5hTiAqLworICAgIHsKKyAgICAgIHVu aW9uIGR1bGwgdTsKKyAgICAgIHUuZCA9IGltYWc7CisgICAgICByLndyaXRlICgidWxsX3RvX2Qg KCUjbGx4KSkiLCB1LnVsbCk7CisgICAgfQorCisgIHIud3JpdGUgKCIpO1xuXG4iKTsgLyogQ2xv c2UgdGhlIGZ1bmN0aW9uIGNhbGwgKi8KK30KKwordGVtcGxhdGUgPD4KK3N0cmluZyAqCittZW1l bnRvX29mX25ld19ydmFsdWVfZnJvbV9jb25zdCA8X0NvbXBsZXggbG9uZyBkb3VibGU+OjptYWtl X2RlYnVnX3N0cmluZyAoKQoreworICBsb25nIGRvdWJsZSByZWFsID0gY3JlYWxsKG1fdmFsdWUp OworICBsb25nIGRvdWJsZSBpbWFnID0gY2ltYWdsKG1fdmFsdWUpOworICByZXR1cm4gc3RyaW5n Ojpmcm9tX3ByaW50ZiAobV9jdHh0LAorCQkJICAgICAgIiglcykoJUxnJStMZ2opIiwKKwkJCSAg ICAgIG1fdHlwZS0+Z2V0X2RlYnVnX3N0cmluZyAoKSwKKwkJCSAgICAgIHJlYWwsIGltYWcpOwor fQorCisvKiBUaGUgZ2V0X3dpZGVfaW50IHNwZWNpYWxpemF0aW9uIGZvciA8X0NvbXBsZXggbG9u ZyBkb3VibGU+LiAgKi8KKwordGVtcGxhdGUgPD4KK2Jvb2wKK21lbWVudG9fb2ZfbmV3X3J2YWx1 ZV9mcm9tX2NvbnN0IDxfQ29tcGxleCBsb25nIGRvdWJsZT46OgorZ2V0X3dpZGVfaW50ICh3aWRl X2ludCAqKSBjb25zdAoreworICByZXR1cm4gZmFsc2U7Cit9CisKKy8qIFRoZSB3cml0ZV9yZXBy b2R1Y2VyIHNwZWNpYWxpemF0aW9uIGZvciA8X0NvbXBsZXggbG9uZyBkb3VibGU+LiAgKi8KKwor dGVtcGxhdGUgPD4KK3ZvaWQKK3JlY29yZGluZzo6bWVtZW50b19vZl9uZXdfcnZhbHVlX2Zyb21f Y29uc3QgPF9Db21wbGV4IGxvbmcgZG91YmxlPjo6Cit3cml0ZV9yZXByb2R1Y2VyIChyZXByb2R1 Y2VyICZyKQoreworICB1bmlvbiBsZGFyciB1cmVhbCwgdWltYWc7CisgIGNvbnN0IGNoYXIgKmlk ID0gci5tYWtlX2lkZW50aWZpZXIgKHRoaXMsICJydmFsdWUiKTsKKyAgbG9uZyBkb3VibGUgcmVh bCA9IGNyZWFsbChtX3ZhbHVlKTsKKyAgbG9uZyBkb3VibGUgaW1hZyA9IGNpbWFnbChtX3ZhbHVl KTsKKworICBpbnQgaGFzX25hbiA9IHN0ZDo6aXNuYW4gKHJlYWwpIHx8IHN0ZDo6aXNuYW4gKGlt YWcpOworCisgIGlmIChoYXNfbmFuKQorICAgIHsKKyAgICAgIHIud3JpdGUgKCIgIGdjY19qaXRf cnZhbHVlIColcztcbiIsIGlkKTsKKyAgICAgIC8qIFNjb3BlIGZvciBtdWx0aXBsZSAiTmFOLWFy cmF5cyIgaW4gdGhlIHNvdXJjZSBmaWxlICB0byBub3QgY2xhc2ggKi8KKyAgICAgIHIud3JpdGUg KCIgIHtcbiIpOworICAgIH0KKyAgaWYgKHN0ZDo6aXNuYW4gKHJlYWwpKQorICAgIHsKKyAgICAg IC8qIFdyaXRlIHRoZSByYXcgYnl0ZXMgb2YgdGhlIGxvbmcgZG91YmxlIGFzIGFuIGNoYXIgYXJy YXkKKwkgdG8gc3RvcmUgaXQgaW4gdGhlIHNvdXJjZSBjb2RlLgorCSBJLmUuIHVuc2lnbmVkIGNo YXIgYXJyW10gPSB7MHgxLCAweDIsIDB4MyAuLi4gfTsgKi8KKyAgICAgIHVyZWFsLmxkID0gcmVh bDsKKyAgICAgIHIud3JpdGUgKCIgICAgdW5zaWduZWQgY2hhciBhcnJfcmVhbFtdID0gIik7Cisg ICAgICByZXByb2R1Y2VyX3dyaXRlX2FyciAociwgdXJlYWwuYXJyLCBzaXplb2YgdXJlYWwuYXJy KTsKKyAgICAgIHIud3JpdGUgKCI7XG4iKTsKKyAgICB9CisgIGlmIChzdGQ6OmlzbmFuIChpbWFn KSkKKyAgICB7CisgICAgICB1aW1hZy5sZCA9IGltYWc7CisgICAgICByLndyaXRlICgiICAgIHVu c2lnbmVkIGNoYXIgYXJyX2ltYWdbXSA9ICIpOworICAgICAgcmVwcm9kdWNlcl93cml0ZV9hcnIg KHIsIHVpbWFnLmFyciwgc2l6ZW9mIHVpbWFnLmFycik7CisgICAgICByLndyaXRlICgiO1xuIik7 CisgICAgfQorCisgIGlmIChoYXNfbmFuKQorICAgIHIud3JpdGUgKCIgICIpOyAvKiBEZWZpbml0 aW9uIGlzIG91dHNpZGUgdGhlIHNjb3BlIGZvciBOYU5zICovCisgIGVsc2UKKyAgICByLndyaXRl ICgiICBnY2Nfaml0X3J2YWx1ZSAqIik7CisKKyAgci53cml0ZSAoIiVzID1cbiIKKyAgICAiICAg IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fY29tcGxleF9sb25nX2RvdWJsZSAoXG4i CisgICAgIiAgICAgICVzLCAvKiBnY2Nfaml0X2NvbnRleHQgKmN0eHQgKi9cbiIKKyAgICAiICAg ICAgJXMsIC8qIGdjY19qaXRfdHlwZSAqbnVtZXJpY190eXBlICovXG4iCisgICAgIiAgICAgIC8q ICUuOUxnICsgaSolLjlMZyAqL1xuIgorICAgICIgICAgICBDTVBMWEwgKCIsCiAgICAgaWQsCiAg ICAgci5nZXRfaWRlbnRpZmllciAoZ2V0X2NvbnRleHQgKCkpLAogICAgIHIuZ2V0X2lkZW50aWZp ZXJfYXNfdHlwZSAobV90eXBlKSwKICAgICByZWFsLCBpbWFnKTsKKworICBpZiAoc3RkOjppc2Zp bml0ZSAocmVhbCkpCisgICAgci53cml0ZSAoIiVMYUwsICIsIHJlYWwpOworICBlbHNlIGlmIChz dGQ6OmlzaW5mIChyZWFsKSkKKyAgICB7CisgICAgICBpZiAocmVhbCA8IDApCisJci53cml0ZSAo Ii1JTkZJTklUWSwgIik7CisgICAgICBlbHNlCisJci53cml0ZSAoIklORklOSVRZLCAiKTsKKyAg ICB9CisgIGVsc2UgaWYgKHN0ZDo6aXNuYW4gKHJlYWwpKQorICAgIHsKKyAgICAgIC8qIENvbnZl cnQgdGhlIGNoYXIgYXJyYXkgd3JpdHRlbiBhYm92ZSwgdG8gYSBsb25nIGRvdWJsZSAqLworICAg ICAgci53cml0ZSAoImFycl90b19sZCAoYXJyX3JlYWwsIHNpemVvZiBhcnJfcmVhbCksICIpOwor ICAgIH0KKworICBpZiAoc3RkOjppc2Zpbml0ZSAoaW1hZykpCisgICAgci53cml0ZSAoIiVMYUwp IiwgaW1hZyk7CisgIGVsc2UgaWYgKHN0ZDo6aXNpbmYgKGltYWcpKQorICAgIHsKKyAgICAgIGlm IChpbWFnIDwgMCkKKwlyLndyaXRlICgiLUlORklOSVRZKSIpOworICAgICAgZWxzZQorCXIud3Jp dGUgKCJJTkZJTklUWSkiKTsKKyAgICB9CisgIGVsc2UgaWYgKHN0ZDo6aXNuYW4gKGltYWcpKQor ICAgIHsKKyAgICAgIHIud3JpdGUgKCJhcnJfdG9fbGQgKGFycl9pbWFnLCBzaXplb2YgYXJyX2lt YWcpKSIpOworICAgIH0KKyAgci53cml0ZSgiKTtcblxuIik7IC8qIENsb3NlIGZ1bmN0aW9uIGNh bGwgKi8KKworICBpZiAoaGFzX25hbikKKyAgICByLndyaXRlICgiICB9XG4iKTsgLyogQ2xvc2Ug TmFOLWFycmF5IHNjb3BlICovCiB9CiAKIC8qIFRoZSBtYWtlX2RlYnVnX3N0cmluZyBzcGVjaWFs aXphdGlvbiBmb3IgPHZvaWQgKj4sIHJlbmRlcmluZyBpdCBhcwpkaWZmIC0tZ2l0IGEvZ2NjL2pp dC9saWJnY2NqaXQrKy5oIGIvZ2NjL2ppdC9saWJnY2NqaXQrKy5oCmluZGV4IGM5N2FlYjgyODEy Li5iOTRjZGM4NWM4ZSAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9saWJnY2NqaXQrKy5oCisrKyBiL2dj Yy9qaXQvbGliZ2Njaml0KysuaApAQCAtMTg4LDEyICsxODgsMTggQEAgbmFtZXNwYWNlIGdjY2pp dAogCQkgICAgICAgaW50IHZhbHVlKSBjb25zdDsKICAgICBydmFsdWUgbmV3X3J2YWx1ZSAodHlw ZSBudW1lcmljX3R5cGUsCiAJCSAgICAgICBsb25nIHZhbHVlKSBjb25zdDsKKyAgICBydmFsdWUg bmV3X3J2YWx1ZSAodHlwZSBudW1lcmljX3R5cGUsCisJCSAgICAgICBsb25nIGxvbmcgdmFsdWUp IGNvbnN0OwogICAgIHJ2YWx1ZSB6ZXJvICh0eXBlIG51bWVyaWNfdHlwZSkgY29uc3Q7CiAgICAg cnZhbHVlIG9uZSAodHlwZSBudW1lcmljX3R5cGUpIGNvbnN0OwogICAgIHJ2YWx1ZSBuZXdfcnZh bHVlICh0eXBlIG51bWVyaWNfdHlwZSwKIAkJICAgICAgIGRvdWJsZSB2YWx1ZSkgY29uc3Q7Cisg ICAgcnZhbHVlIG5ld19ydmFsdWUgKHR5cGUgbnVtZXJpY190eXBlLAorCQkgICAgICAgbG9uZyBk b3VibGUgdmFsdWUpIGNvbnN0OwogICAgIHJ2YWx1ZSBuZXdfcnZhbHVlICh0eXBlIG51bWVyaWNf dHlwZSwKIAkJICAgICAgIF9Db21wbGV4IGRvdWJsZSB2YWx1ZSkgY29uc3Q7CisgICAgcnZhbHVl IG5ld19ydmFsdWUgKHR5cGUgbnVtZXJpY190eXBlLAorCQkgICAgICAgX0NvbXBsZXggbG9uZyBk b3VibGUgdmFsdWUpIGNvbnN0OwogICAgIHJ2YWx1ZSBuZXdfcnZhbHVlICh0eXBlIHBvaW50ZXJf dHlwZSwKIAkJICAgICAgIHZvaWQgKnZhbHVlKSBjb25zdDsKICAgICBydmFsdWUgbmV3X3J2YWx1 ZSAoY29uc3Qgc3RkOjpzdHJpbmcgJnZhbHVlKSBjb25zdDsKQEAgLTkzNiw2ICs5NDIsMTcgQEAg Y29udGV4dDo6bmV3X3J2YWx1ZSAodHlwZSBudW1lcmljX3R5cGUsCiAJCQkJCSAgdmFsdWUpKTsK IH0KIAoraW5saW5lIHJ2YWx1ZQorY29udGV4dDo6bmV3X3J2YWx1ZSAodHlwZSBudW1lcmljX3R5 cGUsCisJCSAgICAgbG9uZyBsb25nIHZhbHVlKSBjb25zdAoreworICByZXR1cm4gcnZhbHVlICgK KyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2xvbmdfbG9uZyAoCisgICAgICBt X2lubmVyX2N0eHQsCisgICAgICBudW1lcmljX3R5cGUuZ2V0X2lubmVyX3R5cGUgKCksCisgICAg ICB2YWx1ZSkpOworfQorCiBpbmxpbmUgcnZhbHVlCiBjb250ZXh0Ojp6ZXJvICh0eXBlIG51bWVy aWNfdHlwZSkgY29uc3QKIHsKQEAgLTk2MCw2ICs5NzcsMTcgQEAgY29udGV4dDo6bmV3X3J2YWx1 ZSAodHlwZSBudW1lcmljX3R5cGUsCiAJCQkJCSAgICB2YWx1ZSkpOwogfQogCitpbmxpbmUgcnZh bHVlCitjb250ZXh0OjpuZXdfcnZhbHVlICh0eXBlIG51bWVyaWNfdHlwZSwKKwkJICAgICBsb25n IGRvdWJsZSB2YWx1ZSkgY29uc3QKK3sKKyAgcmV0dXJuIHJ2YWx1ZSAoCisgICAgZ2NjX2ppdF9j b250ZXh0X25ld19ydmFsdWVfZnJvbV9sb25nX2RvdWJsZSAoCisgICAgICBtX2lubmVyX2N0eHQs CisgICAgICBudW1lcmljX3R5cGUuZ2V0X2lubmVyX3R5cGUgKCksCisgICAgICB2YWx1ZSkpOwor fQorCiBpbmxpbmUgcnZhbHVlCiBjb250ZXh0OjpuZXdfcnZhbHVlICh0eXBlIG51bWVyaWNfdHlw ZSwKIAkJICAgICBfQ29tcGxleCBkb3VibGUgdmFsdWUpIGNvbnN0CkBAIC05NzEsNiArOTk5LDE3 IEBAIGNvbnRleHQ6Om5ld19ydmFsdWUgKHR5cGUgbnVtZXJpY190eXBlLAogICAgICAgdmFsdWUp KTsKIH0KIAoraW5saW5lIHJ2YWx1ZQorY29udGV4dDo6bmV3X3J2YWx1ZSAodHlwZSBudW1lcmlj X3R5cGUsCisJCSAgICAgX0NvbXBsZXggbG9uZyBkb3VibGUgdmFsdWUpIGNvbnN0Cit7CisgIHJl dHVybiBydmFsdWUgKAorICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fY29tcGxl eF9sb25nX2RvdWJsZSAoCisgICAgICBtX2lubmVyX2N0eHQsCisgICAgICBudW1lcmljX3R5cGUu Z2V0X2lubmVyX3R5cGUgKCksCisgICAgICB2YWx1ZSkpOworfQorCiBpbmxpbmUgcnZhbHVlCiBj b250ZXh0OjpuZXdfcnZhbHVlICh0eXBlIHBvaW50ZXJfdHlwZSwKIAkJICAgICB2b2lkICp2YWx1 ZSkgY29uc3QKZGlmZiAtLWdpdCBhL2djYy9qaXQvbGliZ2Njaml0LmMgYi9nY2Mvaml0L2xpYmdj Y2ppdC5jCmluZGV4IDY0NjMwYjgxMGY0Li45N2M1YWJhNjQzZSAxMDA2NDQKLS0tIGEvZ2NjL2pp dC9saWJnY2NqaXQuYworKysgYi9nY2Mvaml0L2xpYmdjY2ppdC5jCkBAIC0xMjc1LDYgKzEyNzUs MTkgQEAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9sb25nIChnY2Nfaml0X2NvbnRl eHQgKmN0eHQsCiAJICAtPm5ld19ydmFsdWVfZnJvbV9jb25zdCA8bG9uZz4gKG51bWVyaWNfdHlw ZSwgdmFsdWUpKTsKIH0KIAorZ2NjX2ppdF9ydmFsdWUgKgorZ2NjX2ppdF9jb250ZXh0X25ld19y dmFsdWVfZnJvbV9sb25nX2xvbmcgKGdjY19qaXRfY29udGV4dCAqY3R4dCwKKwkJCQkJICAgZ2Nj X2ppdF90eXBlICpudW1lcmljX3R5cGUsCisJCQkJCSAgIGxvbmcgbG9uZyB2YWx1ZSkKK3sKKyAg UkVUVVJOX05VTExfSUZfRkFJTCAoY3R4dCwgTlVMTCwgTlVMTCwgIk5VTEwgY29udGV4dCIpOwor ICBKSVRfTE9HX0ZVTkMgKGN0eHQtPmdldF9sb2dnZXIgKCkpOworICBSRVRVUk5fTlVMTF9JRl9G QUlMX05PTk5VTExfTlVNRVJJQ19UWVBFIChjdHh0LCBudW1lcmljX3R5cGUpOworCisgIHJldHVy biAoKGdjY19qaXRfcnZhbHVlICopY3R4dAorCSAgLT5uZXdfcnZhbHVlX2Zyb21fY29uc3QgPGxv bmcgbG9uZz4gKG51bWVyaWNfdHlwZSwgdmFsdWUpKTsKK30KKwogLyogUHVibGljIGVudHJ5cG9p bnQuICBTZWUgZGVzY3JpcHRpb24gaW4gbGliZ2Njaml0LmguCiAKICAgIFRoaXMgaXMgZXNzZW50 aWFsbHkgZXF1aXZhbGVudCB0bzoKQEAgLTEzMjgsNiArMTM0MSwxOSBAQCBnY2Nfaml0X2NvbnRl eHRfbmV3X3J2YWx1ZV9mcm9tX2RvdWJsZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LAogCSAgLT5u ZXdfcnZhbHVlX2Zyb21fY29uc3QgPGRvdWJsZT4gKG51bWVyaWNfdHlwZSwgdmFsdWUpKTsKIH0K IAorZ2NjX2ppdF9ydmFsdWUgKgorZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9sb25n X2RvdWJsZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LAorCQkJCQkgICAgIGdjY19qaXRfdHlwZSAq bnVtZXJpY190eXBlLAorCQkJCQkgICAgIGxvbmcgZG91YmxlIHZhbHVlKQoreworICBSRVRVUk5f TlVMTF9JRl9GQUlMIChjdHh0LCBOVUxMLCBOVUxMLCAiTlVMTCBjb250ZXh0Iik7CisgIEpJVF9M T0dfRlVOQyAoY3R4dC0+Z2V0X2xvZ2dlciAoKSk7CisgIFJFVFVSTl9OVUxMX0lGX0ZBSUxfTk9O TlVMTF9OVU1FUklDX1RZUEUgKGN0eHQsIG51bWVyaWNfdHlwZSk7CisKKyAgcmV0dXJuICgoZ2Nj X2ppdF9ydmFsdWUgKiljdHh0CisJICAtPm5ld19ydmFsdWVfZnJvbV9jb25zdCA8bG9uZyBkb3Vi bGU+IChudW1lcmljX3R5cGUsIHZhbHVlKSk7Cit9CisKIGdjY19qaXRfcnZhbHVlICoKIGdjY19q aXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fY29tcGxleF9kb3VibGUgKGdjY19qaXRfY29udGV4 dCAqY3R4dCwKIAkJCQkJCWdjY19qaXRfdHlwZSAqbnVtZXJpY190eXBlLApAQCAtMTM0Nyw2ICsx MzczLDI2IEBAIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fY29tcGxleF9kb3VibGUg KGdjY19qaXRfY29udGV4dCAqY3R4dCwKIAkgICAtPm5ld19ydmFsdWVfZnJvbV9jb25zdCA8ZG91 YmxlIF9Db21wbGV4PiAobnVtZXJpY190eXBlLCB2YWx1ZSkpOwogfQogCitnY2Nfaml0X3J2YWx1 ZSAqCitnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2NvbXBsZXhfbG9uZ19kb3VibGUg KAorICBnY2Nfaml0X2NvbnRleHQgKmN0eHQsCisgIGdjY19qaXRfdHlwZSAqbnVtZXJpY190eXBl LAorICBfQ29tcGxleCBsb25nIGRvdWJsZSB2YWx1ZSkKK3sKKyAgUkVUVVJOX05VTExfSUZfRkFJ TCAoY3R4dCwgTlVMTCwgTlVMTCwgIk5VTEwgY29udGV4dCIpOworICBKSVRfTE9HX0ZVTkMgKGN0 eHQtPmdldF9sb2dnZXIgKCkpOworICBSRVRVUk5fTlVMTF9JRl9GQUlMX05PTk5VTExfTlVNRVJJ Q19UWVBFIChjdHh0LCBudW1lcmljX3R5cGUpOworCisgIFJFVFVSTl9OVUxMX0lGX0ZBSUxfUFJJ TlRGMSAoCisgICAgbnVtZXJpY190eXBlLT5pc19mbG9hdCAoKSwKKyAgICBjdHh0LCBOVUxMLAor ICAgICJub3QgYSBmbG9hdGluZyBwb2ludCB0eXBlICh0eXBlOiAlcykiLAorICAgIG51bWVyaWNf dHlwZS0+Z2V0X2RlYnVnX3N0cmluZyAoKSk7CisKKyAgcmV0dXJuICgoZ2NjX2ppdF9ydmFsdWUg KiljdHh0CisgICAgICAtPm5ld19ydmFsdWVfZnJvbV9jb25zdCA8X0NvbXBsZXggbG9uZyBkb3Vi bGU+IChudW1lcmljX3R5cGUsIHZhbHVlKSk7Cit9CisKIAogLyogUHVibGljIGVudHJ5cG9pbnQu ICBTZWUgZGVzY3JpcHRpb24gaW4gbGliZ2Njaml0LmguCiAKZGlmZiAtLWdpdCBhL2djYy9qaXQv bGliZ2Njaml0LmggYi9nY2Mvaml0L2xpYmdjY2ppdC5oCmluZGV4IGQ0YjEwZmMwNjQ0Li5jNTEw YzVjYzkwMiAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9saWJnY2NqaXQuaAorKysgYi9nY2Mvaml0L2xp YmdjY2ppdC5oCkBAIC04MzQsNiArODM0LDE2IEBAIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVl X2Zyb21fbG9uZyAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LAogCQkJCSAgICAgIGdjY19qaXRfdHlw ZSAqbnVtZXJpY190eXBlLAogCQkJCSAgICAgIGxvbmcgdmFsdWUpOwogCisjZGVmaW5lIExJQkdD Q0pJVF9IQVZFX0xPTkdMT05HX0NPTlNUQU5UUworLyogR2V0IGEgY29uc3RhbnQgZnJvbSBhIGxv bmcgbG9uZy4KKworICAgVGhpcyBmdW5jdGlvbiB3YXMgYWRkZWQgaW4gTElCR0NDSklUX0FCSV8x Ni4gWW91IGNhbiB0ZXN0IGZvcgorICAgaXRzIHByZXNlbnMgd2l0aDoKKyAgICAgI2lmZGVmIExJ QkdDQ0pJVF9IQVZFX0xPTkdMT05HX0NPTlNUQU5UUyAqLworZXh0ZXJuIGdjY19qaXRfcnZhbHVl ICoKK2djY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fbG9uZ19sb25nIChnY2Nfaml0X2Nv bnRleHQgKmN0eHQsCisJCQkJCSAgIGdjY19qaXRfdHlwZSAqbnVtZXJpY190eXBlLAorCQkJCQkg ICBsb25nIGxvbmcgdmFsdWUpOwogZXh0ZXJuIGdjY19qaXRfcnZhbHVlICoKIGdjY19qaXRfY29u dGV4dF96ZXJvIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCiAJCSAgICAgIGdjY19qaXRfdHlwZSAq bnVtZXJpY190eXBlKTsKQEAgLTg0OCw3ICs4NTgsMTcgQEAgZ2NjX2ppdF9jb250ZXh0X25ld19y dmFsdWVfZnJvbV9kb3VibGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwKIAkJCQkJZ2NjX2ppdF90 eXBlICpudW1lcmljX3R5cGUsCiAJCQkJCWRvdWJsZSB2YWx1ZSk7CiAKLS8qIENvbXBsZXggZmxv YXRpbmctcG9pbnQgY29uc3RhbnRzLgorLyogR2V0IGEgY29uc3RhbnQgZnJvbSBhIGxvbmcgZG91 YmxlLgorCisgICBUaGlzIGZ1bmN0aW9uIHdhcyBhZGRlZCBpbiBMSUJHQ0NKSVRfQUJJXzE2LiBZ b3UgY2FuIHRlc3QgZm9yCisgICBpdHMgcHJlc2VuY2Ugd2l0aDoKKyAgICAgI2lmZGVmIExJQkdD Q0pJVF9IQVZFX0xPTkdMT05HX0NPTlNUQU5UUyAqLworZXh0ZXJuIGdjY19qaXRfcnZhbHVlICoK K2djY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fbG9uZ19kb3VibGUgKGdjY19qaXRfY29u dGV4dCAqY3R4dCwKKwkJCQkJICAgICBnY2Nfaml0X3R5cGUgKm51bWVyaWNfdHlwZSwKKwkJCQkJ ICAgICBsb25nIGRvdWJsZSB2YWx1ZSk7CisKKy8qIEdldCBhIGNvbnN0YW50IGZyb20gYSBjb21w bGV4IGRvdWJsZS4KIAogICAgVGhpcyBBUEkgZW50cnlwb2ludCB3YXMgYWRkZWQgaW4gTElCR0ND SklUX0FCSV8xNjsgeW91IGNhbiB0ZXN0IGZvciBpdHMKICAgIHByZXNlbmNlIHVzaW5nCkBAIC04 NTgsNiArODc4LDE3IEBAIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fY29tcGxleF9k b3VibGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwKIAkJCQkJCWdjY19qaXRfdHlwZSAqbnVtZXJp Y190eXBlLAogCQkJCQkJX0NvbXBsZXggZG91YmxlIHZhbHVlKTsKIAorLyogR2V0IGEgY29uc3Rh bnQgZnJvbSBhIGNvbXBsZXggbG9uZyBkb3VibGUuCisKKyAgIFRoaXMgQVBJIGVudHJ5cG9pbnQg d2FzIGFkZGVkIGluIExJQkdDQ0pJVF9BQklfMTY7IHlvdSBjYW4gdGVzdCBmb3IgaXRzCisgICBw cmVzZW5jZSB1c2luZworICAgICAjaWZkZWYgTElCR0NDSklUX0hBVkVfTE9OR0xPTkdfQ09OU1RB TlRTICovCitleHRlcm4gZ2NjX2ppdF9ydmFsdWUgKgorZ2NjX2ppdF9jb250ZXh0X25ld19ydmFs dWVfZnJvbV9jb21wbGV4X2xvbmdfZG91YmxlICgKKyAgZ2NjX2ppdF9jb250ZXh0ICpjdHh0LAor ICBnY2Nfaml0X3R5cGUgKm51bWVyaWNfdHlwZSwKKyAgX0NvbXBsZXggbG9uZyBkb3VibGUgdmFs dWUpOworCiAvKiBQb2ludGVycy4gICovCiBleHRlcm4gZ2NjX2ppdF9ydmFsdWUgKgogZ2NjX2pp dF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9wdHIgKGdjY19qaXRfY29udGV4dCAqY3R4dCwKZGlm ZiAtLWdpdCBhL2djYy9qaXQvbGliZ2Njaml0Lm1hcCBiL2djYy9qaXQvbGliZ2Njaml0Lm1hcApp bmRleCBjOWIwNDRkYzhmNS4uNDAyMmRiYjZmYmMgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvbGliZ2Nj aml0Lm1hcAorKysgYi9nY2Mvaml0L2xpYmdjY2ppdC5tYXAKQEAgLTIwOSw1ICsyMDksOCBAQCBM SUJHQ0NKSVRfQUJJXzE1IHsKIExJQkdDQ0pJVF9BQklfMTYgewogICBnbG9iYWw6CiAgICAgZ2Nj X2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9jb21wbGV4X2RvdWJsZTsKKyAgICBnY2Nfaml0 X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2NvbXBsZXhfbG9uZ19kb3VibGU7CiAgICAgZ2NjX2pp dF9jb250ZXh0X3NldF9ib29sX2VuYWJsZV9jb21wbGV4X3R5cGVzOworICAgIGdjY19qaXRfY29u dGV4dF9uZXdfcnZhbHVlX2Zyb21fbG9uZ19kb3VibGU7CisgICAgZ2NjX2ppdF9jb250ZXh0X25l d19ydmFsdWVfZnJvbV9sb25nX2xvbmc7CiB9IExJQkdDQ0pJVF9BQklfMTU7ClwgTm8gbmV3bGlu ZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvYWxsLW5v bi1mYWlsaW5nLXRlc3RzLmggYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy9hbGwtbm9uLWZhaWxpbmct dGVzdHMuaAppbmRleCA3YjQ1YWNkNGI5Yy4uODQxNmIzMTJiYWQgMTAwNjQ0Ci0tLSBhL2djYy90 ZXN0c3VpdGUvaml0LmRnL2FsbC1ub24tZmFpbGluZy10ZXN0cy5oCisrKyBiL2djYy90ZXN0c3Vp dGUvaml0LmRnL2FsbC1ub24tZmFpbGluZy10ZXN0cy5oCkBAIC0yMzksNiArMjM5LDEzIEBACiAj dW5kZWYgY3JlYXRlX2NvZGUKICN1bmRlZiB2ZXJpZnlfY29kZQogCisvKiB0ZXN0LWxvbmctbGl0 ZXJhbHMuYyAqLworI2RlZmluZSBjcmVhdGVfY29kZSBjcmVhdGVfY29kZV9sb25nX2xpdGVyYWxz CisjZGVmaW5lIHZlcmlmeV9jb2RlIHZlcmlmeV9jb2RlX2xvbmdfbGl0ZXJhbHMKKyNpbmNsdWRl ICJ0ZXN0LWxvbmctbGl0ZXJhbHMuYyIKKyN1bmRlZiBjcmVhdGVfY29kZQorI3VuZGVmIHZlcmlm eV9jb2RlCisKIC8qIHRlc3QtbG9uZy1zdHJpbmctbGl0ZXJhbC5jICovCiAjZGVmaW5lIGNyZWF0 ZV9jb2RlIGNyZWF0ZV9jb2RlX2xvbmdfc3RyaW5nX2xpdGVyYWwKICNkZWZpbmUgdmVyaWZ5X2Nv ZGUgdmVyaWZ5X2NvZGVfbG9uZ19zdHJpbmdfbGl0ZXJhbApkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3Rz dWl0ZS9qaXQuZGcvdGVzdC1sb25nLWxpdGVyYWxzLmMgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90 ZXN0LWxvbmctbGl0ZXJhbHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uYTgzYWY4YjBlYjEKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90 ZXN0LWxvbmctbGl0ZXJhbHMuYwpAQCAtMCwwICsxLDI4MyBAQAorLyogVGVzdCBsb25nIGxpdGVy YWxzLgorCisgICBJLmUuIGxvbmcgbG9uZywgbG9uZyBkb3VibGUgYW5kIGxvbmcgY29tcGxleCBk b3VibGVzLgorCisgICBBbHNvIHRlc3QgTmFOOnMgYW5kIGluZjpzIHdpdGggZG91YmxlLiAqLwor CisKKyNpbmNsdWRlIDxjb21wbGV4Lmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8 bWF0aC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAibGliZ2Njaml0LmgiCisj aW5jbHVkZSAiaGFybmVzcy5oIgorCitpbnQgY29tcGFyZV9uYW5zKGRvdWJsZSBkMSwgZG91Ymxl IGQyKQoreworICB1bmlvbiB7ZG91YmxlIGQ7IHVuc2lnbmVkIGxvbmcgbG9uZyB1bGw7fSB1MSwg dTI7CisKKyAgdTEuZCA9IGQxOworICB1Mi5kID0gZDI7CisKKyAgcmV0dXJuIHUxLnVsbCA9PSB1 Mi51bGw7Cit9CisKK2ludCBjb21wYXJlX25hbnNsKGxvbmcgZG91YmxlIGQxLCBsb25nIGRvdWJs ZSBkMikKK3sKKyAgdW5pb24geyBsb25nIGRvdWJsZSBsZDsgdW5zaWduZWQgY2hhciBhcnJbc2l6 ZW9mIChsb25nIGRvdWJsZSldO30KKyAgICB1MSA9IHsuYXJyID0gezB9fSwKKyAgICB1MiA9IHsu YXJyID0gezB9fTsKKyAgLyogWmVybyB0aGUgYXJycy4gSSBkb24ndCBrbm93IGlmIGxvbmcgZG91 YmxlIHplcm9lcyBhbGwgaXRzIHNpemUKKyAgICAgc2luY2Ugc29tZSBvZiBpdCBpcyBwYWRkaW5n LiAqLworCisgIHUxLmxkID0gZDE7CisgIHUyLmxkID0gZDI7CisKKyAgcmV0dXJuIG1lbWNtcCAo dTEuYXJyLCB1Mi5hcnIsIHNpemVvZiB1MS5hcnIpID09IDA7Cit9CisKK3N0YXRpYyB2b2lkCitt YWtlX2NvZGVfbGl0X2NsZChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCisgICAgICAgICAgICAgICAg ICBjb25zdCBjaGFyICpmbl9uYW1lLAorICAgICAgICAgICAgICAgICAgaW50IHR5cGUsCisgICAg ICAgICAgICAgICAgICBfQ29tcGxleCBsb25nIGRvdWJsZSBsb2NhbF92YWwsCisgICAgICAgICAg ICAgICAgICBpbnQgbGl0X3R5cGUpCit7CisgIGdjY19qaXRfdHlwZSAqdHQgPSBnY2Nfaml0X2Nv bnRleHRfZ2V0X3R5cGUgKGN0eHQsIHR5cGUpOworCisgIGdjY19qaXRfZnVuY3Rpb24gKmZvbyA9 IGdjY19qaXRfY29udGV4dF9uZXdfZnVuY3Rpb24gKGN0eHQsIDAsCisgICAgR0NDX0pJVF9GVU5D VElPTl9FWFBPUlRFRCwKKyAgICB0dCwgZm5fbmFtZSwgMCwgMCwgMCk7CisKKyAgZ2NjX2ppdF9i bG9jayAqYmxvY2sgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAoZm9vLCAic3RhcnQiKTsK KworICAvKiBsb2NhbF90eXBlIGYxID0gbG9jYWxfdmFsOyAqLworICBnY2Nfaml0X2x2YWx1ZSAq ZjEgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19sb2NhbCAoZm9vLCAwLCB0dCwgImYxIik7CisKKyAg Z2NjX2ppdF9ydmFsdWUgKnIxOworCisgIGlmIChsaXRfdHlwZSA9PSAnTCcpCisgICAgcjEgPSBn Y2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2xvbmdfZG91YmxlICgKKyAgICAgIGN0eHQs IHR0LCBjcmVhbGwobG9jYWxfdmFsKSk7CisgIGVsc2UgaWYgKGxpdF90eXBlID09ICdDJykKKyAg ICByMSA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fY29tcGxleF9sb25nX2RvdWJs ZSAoCisgICAgICBjdHh0LCB0dCwgbG9jYWxfdmFsKTsKKworICBnY2Nfaml0X2Jsb2NrX2FkZF9h c3NpZ25tZW50IChibG9jaywgMCwgZjEsIHIxKTsKKworICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRo X3JldHVybiAoYmxvY2ssIDAsIGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZShmMSkpOworfQorCitz dGF0aWMgdm9pZAorbWFrZV9jb2RlX2xpdF9kIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCisgICAg ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZuX25hbWUsCisgICAgICAgICAgICAgICAgIGludCB0 eXBlLAorICAgICAgICAgICAgICAgICBfQ29tcGxleCAgZG91YmxlIGxvY2FsX3ZhbCwKKyAgICAg ICAgICAgICAgICBpbnQgbGl0X3R5cGUpCit7CisgIGdjY19qaXRfdHlwZSAqdHQgPSBnY2Nfaml0 X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsIHR5cGUpOworCisgIGdjY19qaXRfZnVuY3Rpb24gKmZv byA9IGdjY19qaXRfY29udGV4dF9uZXdfZnVuY3Rpb24gKGN0eHQsIDAsCisgICAgR0NDX0pJVF9G VU5DVElPTl9FWFBPUlRFRCwKKyAgICB0dCwgZm5fbmFtZSwgMCwgMCwgMCk7CisKKyAgZ2NjX2pp dF9ibG9jayAqYmxvY2sgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAoZm9vLCAic3RhcnQi KTsKKworICAvKiBsb2NhbF90eXBlIGYxID0gbG9jYWxfdmFsOyAqLworICBnY2Nfaml0X2x2YWx1 ZSAqZjEgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19sb2NhbCAoZm9vLCAwLCB0dCwgImYxIik7CisK KyAgZ2NjX2ppdF9ydmFsdWUgKnIxOworCisgIGlmIChsaXRfdHlwZSA9PSAnZCcpCisgICAgcjEg PSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2RvdWJsZSAoCisgICAgICBjdHh0LCB0 dCwgbG9jYWxfdmFsKTsKKyAgZWxzZSBpZiAobGl0X3R5cGUgPT0gJ2MnKQorICAgIHIxID0gZ2Nj X2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9jb21wbGV4X2RvdWJsZSAoCisgICAgICBjdHh0 LCB0dCwgbG9jYWxfdmFsKTsKKworICBnY2Nfaml0X2Jsb2NrX2FkZF9hc3NpZ25tZW50IChibG9j aywgMCwgZjEsIHIxKTsKKworICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRoX3JldHVybiAoYmxvY2ss IDAsIGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZShmMSkpOworfQorCitzdGF0aWMgdm9pZAorbWFr ZV9jb2RlX2xpdF9sbCAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LAorICAgICAgICAgICAgICAgICAg Y29uc3QgY2hhciAqZm5fbmFtZSwKKyAgICAgICAgICAgICAgICAgIGludCB0eXBlLAorICAgICAg ICAgICAgICAgICAgbG9uZyBsb25nIGxvY2FsX3ZhbCkKK3sKKyAgZ2NjX2ppdF90eXBlICp0dCA9 IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwgdHlwZSk7CisKKyAgZ2NjX2ppdF9mdW5j dGlvbiAqZm9vID0gZ2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwgMCwKKyAgICBH Q0NfSklUX0ZVTkNUSU9OX0VYUE9SVEVELAorICAgIHR0LCBmbl9uYW1lLCAwLCAwLCAwKTsKKwor ICBnY2Nfaml0X2Jsb2NrICpibG9jayA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2NrIChmb28s ICJzdGFydCIpOworCisgIC8qIGxvY2FsX3R5cGUgZjEgPSBsb2NhbF92YWw7ICovCisgIGdjY19q aXRfbHZhbHVlICpmMSA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2xvY2FsIChmb28sIDAsIHR0LCAi ZjEiKTsKKworICBnY2Nfaml0X3J2YWx1ZSAqcjE7CisKKyAgcjEgPSBnY2Nfaml0X2NvbnRleHRf bmV3X3J2YWx1ZV9mcm9tX2xvbmdfbG9uZyAoCisgICAgY3R4dCwgdHQsIGNyZWFsbChsb2NhbF92 YWwpKTsKKworICBnY2Nfaml0X2Jsb2NrX2FkZF9hc3NpZ25tZW50IChibG9jaywgMCwgZjEsIHIx KTsKKworICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRoX3JldHVybiAoYmxvY2ssIDAsIGdjY19qaXRf bHZhbHVlX2FzX3J2YWx1ZShmMSkpOworfQorCisKK3VuaW9uIHV1IHsgZG91YmxlIGQ7IGxvbmcg bG9uZyBsOyB9IHU7CisKK3ZvaWQKK2NyZWF0ZV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQs IHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgKHZvaWQpIHVzZXJfZGF0YTsKKworICBnY2Nfaml0X2Nv bnRleHRfc2V0X2Jvb2xfZW5hYmxlX2NvbXBsZXhfdHlwZXMgKGN0eHQsIDEpOworCisgIG1ha2Vf Y29kZV9saXRfY2xkIChjdHh0LCAibG9uZ19kb3VibGVfbGRsaXRfMWMxIiwKKyAgICBHQ0NfSklU X1RZUEVfTE9OR19ET1VCTEUsCisgICAgLTEuMUwsICdMJyk7CisgIG1ha2VfY29kZV9saXRfY2xk IChjdHh0LCAibG9uZ19kb3VibGVfbGRsaXRfMUxkaXYzTCIsCisgICAgR0NDX0pJVF9UWVBFX0xP TkdfRE9VQkxFLAorICAgIDEvMy5MLCAnTCcpOworICBtYWtlX2NvZGVfbGl0X2NsZCAoY3R4dCwg ImxvbmdfZG91YmxlX2xkbGl0X2luZiIsCisgICAgR0NDX0pJVF9UWVBFX0xPTkdfRE9VQkxFLAor ICAgIElORklOSVRZLCAnTCcpOworICBtYWtlX2NvZGVfbGl0X2NsZCAoY3R4dCwgImxvbmdfZG91 YmxlX2xkbGl0X21pbmYiLAorICAgIEdDQ19KSVRfVFlQRV9MT05HX0RPVUJMRSwKKyAgICAtSU5G SU5JVFksICdMJyk7CisgIG1ha2VfY29kZV9saXRfY2xkIChjdHh0LCAibG9uZ19kb3VibGVfbGRs aXRfbmFuMSIsCisgICAgR0NDX0pJVF9UWVBFX0xPTkdfRE9VQkxFLAorICAgIG5hbmwoIjEiKSwg J0wnKTsKKworICBtYWtlX2NvZGVfbGl0X2NsZCAoY3R4dCwgImNvbXBsZXhfbG9uZ19kb3VibGVf Y2xkbGl0XzFkaXYzXzJkaXYzaiIsCisgICAgR0NDX0pJVF9UWVBFX0NPTVBMRVhfTE9OR19ET1VC TEUsCisgICAgMS8zLkwgKyAyLkxqLzMsICdDJyk7CisKKyAgbWFrZV9jb2RlX2xpdF9jbGQgKGN0 eHQsICJjb21wbGV4X2xvbmdfZG91YmxlX2NsZGxpdF9pbmZfaW5maiIsCisgICAgR0NDX0pJVF9U WVBFX0NPTVBMRVhfTE9OR19ET1VCTEUsCisgICAgQ01QTFhMIChJTkZJTklUWSwgSU5GSU5JVFkp LCAnQycpOworICBtYWtlX2NvZGVfbGl0X2NsZCAoY3R4dCwgImNvbXBsZXhfbG9uZ19kb3VibGVf Y2xkbGl0X21pbmZfbWluZmoiLAorICAgIEdDQ19KSVRfVFlQRV9DT01QTEVYX0xPTkdfRE9VQkxF LAorICAgIENNUExYTCAoLUlORklOSVRZLCAtSU5GSU5JVFkpLCAnQycpOworICBtYWtlX2NvZGVf bGl0X2NsZCAoY3R4dCwgImNvbXBsZXhfbG9uZ19kb3VibGVfY2xkbGl0X25hbjFfbmFuMmoiLAor ICAgIEdDQ19KSVRfVFlQRV9DT01QTEVYX0xPTkdfRE9VQkxFLAorICAgIENNUExYTCAobmFubCAo IjEiKSwgbmFubCAoIjIiKSksICdDJyk7CisKKyAgbWFrZV9jb2RlX2xpdF9sbCAoY3R4dCwgImxv bmdfbG9uZ19sbGxpdF8yIiwKKyAgICBHQ0NfSklUX1RZUEVfTE9OR19MT05HLAorICAgIDIpOwor CisgIG1ha2VfY29kZV9saXRfbGwgKGN0eHQsICJsb25nX2xvbmdfbGxsaXRfbWluIiwKKyAgICBH Q0NfSklUX1RZUEVfTE9OR19MT05HLAorICAgIExMT05HX01JTik7CisKKyAgbWFrZV9jb2RlX2xp dF9sbCAoY3R4dCwgImxvbmdfbG9uZ19sbGxpdF9tYXgiLAorICAgIEdDQ19KSVRfVFlQRV9MT05H X0xPTkcsCisgICAgTExPTkdfTUFYKTsKKworICBtYWtlX2NvZGVfbGl0X2xsIChjdHh0LCAidWxv bmdfbG9uZ19sbGxpdF9tYXgiLAorICAgIEdDQ19KSVRfVFlQRV9VTlNJR05FRF9MT05HX0xPTkcs CisgICAgVUxMT05HX01BWCk7CisKKyAgbWFrZV9jb2RlX2xpdF9kIChjdHh0LCAiZG91YmxlX25h bjEiLAorICAgIEdDQ19KSVRfVFlQRV9ET1VCTEUsCisgICAgbmFuKCIxIiksICdkJyk7CisgIG1h a2VfY29kZV9saXRfZCAoY3R4dCwgImRvdWJsZV9pbmYiLAorICAgIEdDQ19KSVRfVFlQRV9ET1VC TEUsCisgICAgSU5GSU5JVFksICdkJyk7CisgIG1ha2VfY29kZV9saXRfZCAoY3R4dCwgImRvdWJs ZV9taW5mIiwKKyAgICBHQ0NfSklUX1RZUEVfRE9VQkxFLAorICAgIC1JTkZJTklUWSwgJ2QnKTsK K30KKwordm9pZAordmVyaWZ5X2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgZ2NjX2ppdF9y ZXN1bHQgKnJlc3VsdCkKK3sKKyAgQ0hFQ0tfTk9OX05VTEwgKHJlc3VsdCk7CisgIHsKKyAgICBk b3VibGUgKCpmKSgpID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKAorICAgICAgcmVzdWx0LCAi ZG91YmxlX25hbjEiKTsKKworICAgIENIRUNLKGNvbXBhcmVfbmFucyAoZigpLCBuYW4oIjEiKSkp OworICB9CisgIHsKKyAgICBkb3VibGUgKCpmKSgpID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUg KAorICAgICAgcmVzdWx0LCAiZG91YmxlX2luZiIpOworCisgICAgQ0hFQ0tfVkFMVUUgKGYoKSwg SU5GSU5JVFkpOworICB9CisgIHsKKyAgICBkb3VibGUgKCpmKSgpID0gZ2NjX2ppdF9yZXN1bHRf Z2V0X2NvZGUgKAorICAgICAgcmVzdWx0LCAiZG91YmxlX21pbmYiKTsKKworICAgIENIRUNLX1ZB TFVFIChmKCksIC1JTkZJTklUWSk7CisgIH0KKyAgeworICAgIGxvbmcgZG91YmxlICgqZikoKSA9 IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlICgKKyAgICAgIHJlc3VsdCwgImxvbmdfZG91YmxlX2xk bGl0XzFjMSIpOworCisgICAgQ0hFQ0tfVkFMVUUoZiAoKSwgLTEuMUwpOworICB9CisgIHsKKyAg ICBsb25nIGRvdWJsZSAoKmYpKCkgPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAoCisgICAgICBy ZXN1bHQsICJsb25nX2RvdWJsZV9sZGxpdF8xTGRpdjNMIik7CisKKyAgICBDSEVDS19WQUxVRShm ICgpLCAxLkwvMy5MKTsKKyAgfQorICB7CisgICAgX0NvbXBsZXggbG9uZyBkb3VibGUgKCpmKSgp ID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKAorICAgICAgcmVzdWx0LCAiY29tcGxleF9sb25n X2RvdWJsZV9jbGRsaXRfMWRpdjNfMmRpdjNqIik7CisKKyAgICBDSEVDS19WQUxVRSAoZigpLCAx LzMuTCArIDIuTGovMyk7CisgIH0KKyAgeworICAgIF9Db21wbGV4IGxvbmcgZG91YmxlICgqZiko KSA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlICgKKyAgICAgIHJlc3VsdCwgImNvbXBsZXhfbG9u Z19kb3VibGVfY2xkbGl0X2luZl9pbmZqIik7CisKKyAgICBDSEVDS19WQUxVRSAoZigpLENNUExY TCAoSU5GSU5JVFksIElORklOSVRZKSk7CisgIH0KKyAgeworICAgIF9Db21wbGV4IGxvbmcgZG91 YmxlICgqZikoKSA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlICgKKyAgICAgIHJlc3VsdCwgImNv bXBsZXhfbG9uZ19kb3VibGVfY2xkbGl0X21pbmZfbWluZmoiKTsKKworICAgIENIRUNLX1ZBTFVF IChmKCksQ01QTFhMICgtSU5GSU5JVFksIC1JTkZJTklUWSkpOworICB9CisgIHsKKyAgICBfQ29t cGxleCBsb25nIGRvdWJsZSAoKmYpKCkgPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAoCisgICAg ICByZXN1bHQsICJjb21wbGV4X2xvbmdfZG91YmxlX2NsZGxpdF9uYW4xX25hbjJqIik7CisgICAg X0NvbXBsZXggZG91YmxlIGtleSA9IENNUExYTCAobmFubCAoIjEiKSwgbmFubCAoIjIiKSk7Cisg ICAgX0NvbXBsZXggZG91YmxlIGFucyA9IGYoKTsKKworICAgIENIRUNLIChjb21wYXJlX25hbnNs IChjcmVhbGwgKGtleSksIGNyZWFsbCAoYW5zKSkpOworICAgIENIRUNLIChjb21wYXJlX25hbnNs IChjaW1hZ2wgKGtleSksIGNpbWFnbCAoYW5zKSkpOworICB9CisgIHsKKyAgICBsb25nIGxvbmcg KCpmKSgpID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKAorICAgICAgcmVzdWx0LCAibG9uZ19s b25nX2xsbGl0XzIiKTsKKworICAgIENIRUNLX1ZBTFVFIChmKCksIDIpOworICB9CisgIHsKKyAg ICBsb25nIGxvbmcgKCpmKSgpID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKAorICAgICAgcmVz dWx0LCAibG9uZ19sb25nX2xsbGl0X21pbiIpOworCisgICAgQ0hFQ0tfVkFMVUUgKGYoKSwgTExP TkdfTUlOKTsKKyAgfQorICB7CisgICAgbG9uZyBsb25nICgqZikoKSA9IGdjY19qaXRfcmVzdWx0 X2dldF9jb2RlICgKKyAgICAgIHJlc3VsdCwgImxvbmdfbG9uZ19sbGxpdF9tYXgiKTsKKworICAg IENIRUNLX1ZBTFVFIChmKCksIExMT05HX01BWCk7CisgIH0KKyAgeworICAgIHVuc2lnbmVkIGxv bmcgbG9uZyAoKmYpKCkgPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAoCisgICAgICByZXN1bHQs ICJ1bG9uZ19sb25nX2xsbGl0X21heCIpOworCisgICAgQ0hFQ0tfVkFMVUUgKGYoKSwgVUxMT05H X01BWCk7CisgIH0KK30KLS0gCjIuMzAuMgoK --_002_232536ab07e440938261425628490be9kthse_--