From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED autolearn=unavailable autolearn_force=no version=3.4.2 Received: from inbox.vuxu.org (localhost [IPv6:::1]) by inbox.vuxu.org (OpenSMTPD) with ESMTP id feaa2df3 for ; Sun, 27 Oct 2019 18:43:33 +0000 (UTC) Content-Type: multipart/mixed; boundary="===============5305932902403207556==" MIME-Version: 1.0 Subject: Re: [PR PATCH] [Updated] par: added unicode support To: ml@inbox.vuxu.org From: voidlinux-github@inbox.vuxu.org Reply-to: ml@inbox.vuxu.org In-Reply-To: References: Date: Sun, 27 Oct 2019 19:43:33 +0100 Message-ID: <20191027184333.kRyJ45whDoVsYTzFBhM_MOL3u-zjgYCaWZPOqsg7Mo8@z> GitHub notification mails are now in MIME to allow UTF8. --===============5305932902403207556== MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 VGhlcmUgaXMgYW4gdXBkYXRlZCBwdWxsIHJlcXVlc3QgYnkgVmFsVGltY2hlbmtvIGFnYWluc3Qg bWFzdGVyIG9uIHRoZSB2b2lkLXBhY2thZ2VzIHJlcG9zaXRvcnkKCmh0dHBzOi8vZ2l0aHViLmNv bS9WYWxUaW1jaGVua28vdm9pZC1wYWNrYWdlcyBwYXItdW5pY29kZQpodHRwczovL2dpdGh1Yi5j b20vdm9pZC1saW51eC92b2lkLXBhY2thZ2VzL3B1bGwvMTU4MTIKCnBhcjogYWRkZWQgdW5pY29k ZSBzdXBwb3J0ClN1YmouIEp1c3QgYWRkZWQgdW5pY29kZSBwYXRjaCBtYWRlIGJ5IErDg8KpcsOD wrRtZSBQb3VpbGxlciBhcyBvZjogaHR0cDovL3N5c21pYy5vcmcvZG90Y2xlYXIvaW5kZXgucGhw P3Bvc3QvMjAwNi8wNi8yMi81NS1hZGQtbXVsdGlieXRlLWNoYXJhY3RlcnMtc3VwcG9ydC1pbi1w YXIKCkEgcGF0Y2ggZmlsZSBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS92b2lkLWxpbnV4L3ZvaWQt cGFja2FnZXMvcHVsbC8xNTgxMi5wYXRjaCBpcyBhdHRhY2hlZA== --===============5305932902403207556== Content-Type: text/x-diff MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="github-pr-par-unicode-15812.patch" RnJvbSBhODQwYmNiMTYwMTE4M2U3NjVlMzU0NWI3NzdjYjBmMDdhNTVhMTQ1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWYWxUaW1jaGVua28gPFZhbFRpbWNoZW5rb0BnbWFpbC5jb20+ CkRhdGU6IFNhdCwgMjYgT2N0IDIwMTkgMTc6MzU6MjkgKzAzMDAKU3ViamVjdDogW1BBVENIXSBw YXI6IGFkZCB1bmljb2RlIHBhdGNoCgotLS0KIHNyY3BrZ3MvcGFyL3BhdGNoZXMvcGFyLWkxOG4u cGF0Y2ggfCAyODU4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHNyY3BrZ3MvcGFyL3Rl bXBsYXRlICAgICAgICAgICAgICAgfCAgICA0ICstCiAyIGZpbGVzIGNoYW5nZWQsIDI4NjAgaW5z ZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmNwa2dzL3Bh ci9wYXRjaGVzL3Bhci1pMThuLnBhdGNoCgpkaWZmIC0tZ2l0IGEvc3JjcGtncy9wYXIvcGF0Y2hl cy9wYXItaTE4bi5wYXRjaCBiL3NyY3BrZ3MvcGFyL3BhdGNoZXMvcGFyLWkxOG4ucGF0Y2gKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjI3NTU0MjVmNzAyCi0tLSAvZGV2 L251bGwKKysrIGIvc3JjcGtncy9wYXIvcGF0Y2hlcy9wYXItaTE4bi5wYXRjaApAQCAtMCwwICsx LDI4NTggQEAKK2RpZmYgLWMgLi9idWZmZXIuYyAuLi9QYXIxNTItdW5pY29kZS9idWZmZXIuYwor KioqIC4vYnVmZmVyLmMJMjAwMS0wMy0wOSAwMjo1MToxMS4wMDAwMDAwMDAgKzAzMDAKKy0tLSAu Li9QYXIxNTItdW5pY29kZS9idWZmZXIuYwkyMDE5LTEwLTI2IDE3OjIxOjA4LjU0MjA1MDg1MyAr MDMwMAorKioqKioqKioqKioqKioqCisqKiogMSw5ICoqKioKKyEgLyoqKioqKioqKioqKioqKioq KioqKi8KKyEgLyogYnVmZmVyLmMgICAgICAgICAgKi8KKyEgLyogZm9yIFBhciAxLjUyICAgICAg Ki8KKyEgLyogQ29weXJpZ2h0IDIwMDEgYnkgKi8KKyEgLyogQWRhbSBNLiBDb3N0ZWxsbyAgKi8K KyEgLyoqKioqKioqKioqKioqKioqKioqKi8KKyAgCisgIC8qIFRoaXMgaXMgQU5TSSBDIGNvZGUg KEM4OSkuICovCisgIAorLS0tIDEsMTEgLS0tLQorISAvKioqKioqKioqKioqKioqKioqKioqKiov CishIC8qIGJ1ZmZlci5jICAgICAgICAgICAgKi8KKyEgLyogZm9yIFBhciAxLjUyLWkxOG4uNCAq LworISAvKiBDb3B5cmlnaHQgMjAwMSBieSAgICovCishIC8qIEFkYW0gTS4gQ29zdGVsbG8gICAg Ki8KKyEgLyogTW9kaWZpZWQgYnkgICAgICAgICAqLworISAvKiBKw6lyw7RtZSBQb3VpbGxlciAg ICAgKi8KKyEgLyoqKioqKioqKioqKioqKioqKioqKioqLworICAKKyAgLyogVGhpcyBpcyBBTlNJ IEMgY29kZSAoQzg5KS4gKi8KKyAgCisqKioqKioqKioqKioqKioKKyoqKiAxOCwyMyAqKioqCist LS0gMjAsMjYgLS0tLQorICAKKyAgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICAjaW5jbHVkZSA8c3Ry aW5nLmg+CisrICNpbmNsdWRlIDx3Y2hhci5oPgorICAKKyAgI3VuZGVmIE5VTEwKKyAgI2RlZmlu ZSBOVUxMICgodm9pZCAqKSAwKQorKioqKioqKioqKioqKioqCisqKiogNjAsNjYgKioqKgorICAg IGJsayA9IG1hbGxvYyhzaXplb2YgKGJsb2NrKSk7CisgICAgaXRlbXMgPSBtYWxsb2MobWF4aGVy ZSAqIGl0ZW1zaXplKTsKKyAgICBpZiAoIWJ1ZiB8fCAhYmxrIHx8ICFpdGVtcykgeworISAgICAg c3RyY3B5KGVycm1zZyxvdXRvZm1lbSk7CisgICAgICBnb3RvIG5iZXJyb3I7CisgICAgfQorICAK Ky0tLSA2Myw2OSAtLS0tCisgICAgYmxrID0gbWFsbG9jKHNpemVvZiAoYmxvY2spKTsKKyAgICBp dGVtcyA9IG1hbGxvYyhtYXhoZXJlICogaXRlbXNpemUpOworICAgIGlmICghYnVmIHx8ICFibGsg fHwgIWl0ZW1zKSB7CishICAgICB3Y3NjcHkoZXJybXNnLG91dG9mbWVtKTsKKyAgICAgIGdvdG8g bmJlcnJvcjsKKyAgICB9CisgIAorKioqKioqKioqKioqKioqCisqKiogMTI3LDEzMyAqKioqCisg ICAgICAgIG5ldyA9IG1hbGxvYyhzaXplb2YgKGJsb2NrKSk7CisgICAgICAgIGl0ZW1zID0gbWFs bG9jKG1heGhlcmUgKiBpdGVtc2l6ZSk7CisgICAgICAgIGlmICghbmV3IHx8ICFpdGVtcykgewor ISAgICAgICAgIHN0cmNweShlcnJtc2csb3V0b2ZtZW0pOworICAgICAgICAgIGdvdG8gYWllcnJv cjsKKyAgICAgICAgfQorICAgICAgICBibGstPm5leHQgPSBuZXc7CistLS0gMTMwLDEzNiAtLS0t CisgICAgICAgIG5ldyA9IG1hbGxvYyhzaXplb2YgKGJsb2NrKSk7CisgICAgICAgIGl0ZW1zID0g bWFsbG9jKG1heGhlcmUgKiBpdGVtc2l6ZSk7CisgICAgICAgIGlmICghbmV3IHx8ICFpdGVtcykg eworISAgICAgICAgIHdjc2NweShlcnJtc2csb3V0b2ZtZW0pOworICAgICAgICAgIGdvdG8gYWll cnJvcjsKKyAgICAgICAgfQorICAgICAgICBibGstPm5leHQgPSBuZXc7CisqKioqKioqKioqKioq KioKKyoqKiAxNzQsMTgwICoqKioKKyAgCisgICAgciA9IG1hbGxvYyhuICogaXRlbXNpemUpOwor ICAgIGlmICghcikgeworISAgICAgc3RyY3B5KGVycm1zZyxvdXRvZm1lbSk7CisgICAgICByZXR1 cm4gTlVMTDsKKyAgICB9CisgIAorLS0tIDE3NywxODMgLS0tLQorICAKKyAgICByID0gbWFsbG9j KG4gKiBpdGVtc2l6ZSk7CisgICAgaWYgKCFyKSB7CishICAgICB3Y3NjcHkoZXJybXNnLG91dG9m bWVtKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgCitkaWZmIC1jIC4vYnVmZmVyLmgg Li4vUGFyMTUyLXVuaWNvZGUvYnVmZmVyLmgKKyoqKiAuL2J1ZmZlci5oCTIwMDEtMDMtMDkgMDI6 NTE6MjUuMDAwMDAwMDAwICswMzAwCistLS0gLi4vUGFyMTUyLXVuaWNvZGUvYnVmZmVyLmgJMjAx OS0xMC0yNiAxNzoyMTowOC41NDMwNTA4NTMgKzAzMDAKKyoqKioqKioqKioqKioqKgorKioqIDEs OSAqKioqCishIC8qKioqKioqKioqKioqKioqKioqKiovCishIC8qIGJ1ZmZlci5oICAgICAgICAg ICovCishIC8qIGZvciBQYXIgMS41MiAgICAgICovCishIC8qIENvcHlyaWdodCAyMDAxIGJ5ICov CishIC8qIEFkYW0gTS4gQ29zdGVsbG8gICovCishIC8qKioqKioqKioqKioqKioqKioqKiovCisg IAorICAvKiBUaGlzIGlzIEFOU0kgQyBjb2RlIChDODkpLiAqLworICAKKy0tLSAxLDExIC0tLS0K KyEgLyoqKioqKioqKioqKioqKioqKioqKioqLworISAvKiBidWZmZXIuaCAgICAgICAgICAgICov CishIC8qIGZvciBQYXIgMS41Mi1pMThuLjQgKi8KKyEgLyogQ29weXJpZ2h0IDIwMDEgYnkgICAq LworISAvKiBBZGFtIE0uIENvc3RlbGxvICAgICovCishIC8qIE1vZGlmaWVkIGJ5ICAgICAgICAg Ki8KKyEgLyogSsOpcsO0bWUgUG91aWxsZXIgICAgICovCishIC8qKioqKioqKioqKioqKioqKioq KioqKi8KKyAgCisgIC8qIFRoaXMgaXMgQU5TSSBDIGNvZGUgKEM4OSkuICovCisgIAorZGlmZiAt YyAuL2NoYXJzZXQuYyAuLi9QYXIxNTItdW5pY29kZS9jaGFyc2V0LmMKKyoqKiAuL2NoYXJzZXQu YwkyMDAxLTA0LTAzIDAxOjUxOjQ4LjAwMDAwMDAwMCArMDQwMAorLS0tIC4uL1BhcjE1Mi11bmlj b2RlL2NoYXJzZXQuYwkyMDE5LTEwLTI2IDE3OjIxOjA4LjU0NDA1MDg1MyArMDMwMAorKioqKioq KioqKioqKioqCisqKiogMSw5ICoqKioKKyEgLyoqKioqKioqKioqKioqKioqKioqKi8KKyEgLyog Y2hhcnNldC5jICAgICAgICAgKi8KKyEgLyogZm9yIFBhciAxLjUyICAgICAgKi8KKyEgLyogQ29w eXJpZ2h0IDIwMDEgYnkgKi8KKyEgLyogQWRhbSBNLiBDb3N0ZWxsbyAgKi8KKyEgLyoqKioqKioq KioqKioqKioqKioqKi8KKyAgCisgIC8qIFRoaXMgaXMgQU5TSSBDIGNvZGUgKEM4OSkuICovCisg IAorLS0tIDEsMTEgLS0tLQorISAvKioqKioqKioqKioqKioqKioqKioqKiovCishIC8qIGNoYXJz ZXQuYyAgICAgICAgICAgKi8KKyEgLyogZm9yIFBhciAxLjUyLWkxOG4uNCAqLworISAvKiBDb3B5 cmlnaHQgMjAwMSBieSAgICovCishIC8qIEFkYW0gTS4gQ29zdGVsbG8gICAgKi8KKyEgLyogTW9k aWZpZWQgYnkgICAgICAgICAqLworISAvKiBKw6lyw7RtZSBQb3VpbGxlciAgICAgKi8KKyEgLyoq KioqKioqKioqKioqKioqKioqKioqLworICAKKyAgLyogVGhpcyBpcyBBTlNJIEMgY29kZSAoQzg5 KS4gKi8KKyAgCisqKioqKioqKioqKioqKioKKyoqKiAxOCwyNSAqKioqCisgICAgICAgICAgICAg ICAgICAgICAgICAvKiBwcm90b3R5cGVzLiAgQWxzbyBpbmNsdWRlcyAiZXJybXNnLmgiLiAqLwor ICAjaW5jbHVkZSAiYnVmZmVyLmgiICAgLyogQWxzbyBpbmNsdWRlcyA8c3RkZGVmLmg+LiAgICAg ICAgICAgICAgKi8KKyAgCistICNpbmNsdWRlIDxjdHlwZS5oPgorICAjaW5jbHVkZSA8c3RkaW8u aD4KKyAgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICAjaW5jbHVkZSA8c3RyaW5nLmg+CisgIAorLS0t IDIwLDI4IC0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvdHlwZXMuICBBbHNv IGluY2x1ZGVzICJlcnJtc2cuaCIuICovCisgICNpbmNsdWRlICJidWZmZXIuaCIgICAvKiBBbHNv IGluY2x1ZGVzIDxzdGRkZWYuaD4uICAgICAgICAgICAgICAqLworICAKKyAgI2luY2x1ZGUgPHN0 ZGlvLmg+CisrICNpbmNsdWRlIDx3Y2hhci5oPgorKyAjaW5jbHVkZSA8d2N0eXBlLmg+CisgICNp bmNsdWRlIDxzdGRsaWIuaD4KKyAgI2luY2x1ZGUgPHN0cmluZy5oPgorICAKKyoqKioqKioqKioq KioqKgorKioqIDM5LDQ2ICoqKioKKyAgdHlwZWRlZiB1bnNpZ25lZCBjaGFyIGNzZmxhZ190Owor ICAKKyAgc3RydWN0IGNoYXJzZXQgeworISAgIGNoYXIgKmlubGlzdDsgICAgLyogQ2hhcmFjdGVy cyBpbiBpbmxpc3QgYXJlIGluIHRoZSBzZXQuICAgICAgICAgICAgICAgICovCishICAgY2hhciAq b3V0bGlzdDsgICAvKiBDaGFyYWN0ZXJzIGluIG91dGxpc3QgYXJlIG5vdCBpbiB0aGUgc2V0LiAg ICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgIC8qIGlubGlzdCBhbmQgb3V0bGlzdCBt dXN0IGhhdmUgbm8gY29tbW9uIGNoYXJhY3RlcnMuICAqLworICAgICAgICAgICAgICAgICAgICAg LyogaW5saXN0IGFuZCBvdXRsaXN0IG1heSBiZSBOVUxMLCB3aGljaCBhY3RzIGxpa2UgIiIuICov CisgICAgY3NmbGFnX3QgZmxhZ3M7ICAvKiBDaGFyYWN0ZXJzIGluIG5laXRoZXIgbGlzdCBhcmUg aW4gdGhlIHNldCBpZiB0aGV5ICAgKi8KKy0tLSA0Miw0OSAtLS0tCisgIHR5cGVkZWYgdW5zaWdu ZWQgY2hhciBjc2ZsYWdfdDsKKyAgCisgIHN0cnVjdCBjaGFyc2V0IHsKKyEgICB3Y2hhcl90ICpp bmxpc3Q7ICAgIC8qIENoYXJhY3RlcnMgaW4gaW5saXN0IGFyZSBpbiB0aGUgc2V0LiAgICAgICAg ICAgICAgICAqLworISAgIHdjaGFyX3QgKm91dGxpc3Q7ICAgLyogQ2hhcmFjdGVycyBpbiBvdXRs aXN0IGFyZSBub3QgaW4gdGhlIHNldC4gICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAg ICAvKiBpbmxpc3QgYW5kIG91dGxpc3QgbXVzdCBoYXZlIG5vIGNvbW1vbiBjaGFyYWN0ZXJzLiAg Ki8KKyAgICAgICAgICAgICAgICAgICAgIC8qIGlubGlzdCBhbmQgb3V0bGlzdCBtYXkgYmUgTlVM TCwgd2hpY2ggYWN0cyBsaWtlICIiLiAqLworICAgIGNzZmxhZ190IGZsYWdzOyAgLyogQ2hhcmFj dGVycyBpbiBuZWl0aGVyIGxpc3QgYXJlIGluIHRoZSBzZXQgaWYgdGhleSAgICovCisqKioqKioq KioqKioqKioKKyoqKiA1Niw4MCAqKioqCisgICAgICAgICAgICAgICAgICAgICAgICBDU19OVUwg ICA9IDg7ICAvKiBJbmNsdWRlcyB0aGUgTlVMIGNoYXJhY3Rlci4gICAgICAqLworICAKKyAgCish IHN0YXRpYyBpbnQgYXBwZWFyc2luKGNoYXIgYywgY29uc3QgY2hhciAqc3RyKQorICAKKyAgLyog UmV0dXJucyAwIGlmIGMgaXMgJ1wwJyBvciBzdHIgaXMgTlVMTCBvciBjICAgICAqLworICAvKiBk b2VzIG5vdCBhcHBlYXIgaW4gKnN0ci4gIE90aGVyd2lzZSByZXR1cm5zIDEuICovCisgIHsKKyEg ICByZXR1cm4gYyAmJiBzdHIgJiYgc3RyY2hyKHN0cixjKTsKKyAgfQorICAKKyAgCishIHN0YXRp YyBpbnQgaGV4ZGlndG9pbnQoY2hhciBjKQorICAKKyAgLyogUmV0dXJucyB0aGUgdmFsdWUgcmVw cmVzZW50ZWQgYnkgdGhlIGhleGFkZWNpbWFsICovCisgIC8qIGRpZ2l0IGMsIG9yIC0xIGlmIGMg aXMgbm90IGEgaGV4YWRlY2ltYWwgZGlnaXQuICAqLworICB7CishICAgY29uc3QgY2hhciAqcCwg KiBjb25zdCBoZXhkaWdpdHMgPSAiMDEyMzQ1Njc4OUFCQ0RFRmFiY2RlZiI7CisgICAgaW50IG47 CisgIAorICAgIGlmICghYykgcmV0dXJuIC0xOworISAgIHAgPSBzdHJjaHIoaGV4ZGlnaXRzLCAq KHVuc2lnbmVkIGNoYXIgKikmYyk7CisgICAgaWYgKCFwKSByZXR1cm4gLTE7CisgICAgbiA9IHAg LSBoZXhkaWdpdHM7CisgICAgaWYgKG4gPj0gMTYpIG4gLT0gNjsKKy0tLSA1OSw4MyAtLS0tCisg ICAgICAgICAgICAgICAgICAgICAgICBDU19OVUwgICA9IDg7ICAvKiBJbmNsdWRlcyB0aGUgTlVM IGNoYXJhY3Rlci4gICAgICAqLworICAKKyAgCishIHN0YXRpYyBpbnQgYXBwZWFyc2luKHdjaGFy X3QgYywgY29uc3Qgd2NoYXJfdCAqc3RyKQorICAKKyAgLyogUmV0dXJucyAwIGlmIGMgaXMgJ1ww JyBvciBzdHIgaXMgTlVMTCBvciBjICAgICAqLworICAvKiBkb2VzIG5vdCBhcHBlYXIgaW4gKnN0 ci4gIE90aGVyd2lzZSByZXR1cm5zIDEuICovCisgIHsKKyEgICByZXR1cm4gYyAmJiBzdHIgJiYg d2NzY2hyKHN0cixjKTsKKyAgfQorICAKKyAgCishIHN0YXRpYyBpbnQgaGV4ZGlndG9pbnQod2No YXJfdCBjKQorICAKKyAgLyogUmV0dXJucyB0aGUgdmFsdWUgcmVwcmVzZW50ZWQgYnkgdGhlIGhl eGFkZWNpbWFsICovCisgIC8qIGRpZ2l0IGMsIG9yIC0xIGlmIGMgaXMgbm90IGEgaGV4YWRlY2lt YWwgZGlnaXQuICAqLworICB7CishICAgY29uc3Qgd2NoYXJfdCAqcCwgKiBjb25zdCBoZXhkaWdp dHMgPSBMIjAxMjM0NTY3ODlBQkNERUZhYmNkZWYiOworICAgIGludCBuOworICAKKyAgICBpZiAo IWMpIHJldHVybiAtMTsKKyEgICBwID0gd2NzY2hyKGhleGRpZ2l0cywgYyk7CisgICAgaWYgKCFw KSByZXR1cm4gLTE7CisgICAgbiA9IHAgLSBoZXhkaWdpdHM7CisgICAgaWYgKG4gPj0gMTYpIG4g LT0gNjsKKyoqKioqKioqKioqKioqKgorKioqIDg3LDEyNSAqKioqCisgIH0KKyAgCisgIAorISBj aGFyc2V0ICpwYXJzZWNoYXJzZXQoY29uc3QgY2hhciAqc3RyLCBlcnJtc2dfdCBlcnJtc2cpCisg IHsKKyAgICBjaGFyc2V0ICpjc2V0ID0gTlVMTDsKKyAgICBidWZmZXIgKmNidWYgPSBOVUxMOwor ISAgIGNvbnN0IGNoYXIgKnAsICogY29uc3Qgc2luZ2xlZXNjYXBlcyA9ICJfc2JxUXgiOworICAg IGludCBoZXgxLCBoZXgyOworISAgIGNoYXIgY2g7CishIAorICAgIGNzZXQgPSBtYWxsb2Moc2l6 ZW9mIChjaGFyc2V0KSk7CisgICAgaWYgKCFjc2V0KSB7CishICAgICBzdHJjcHkoZXJybXNnLG91 dG9mbWVtKTsKKyAgICAgIGdvdG8gcGNzZXJyb3I7CisgICAgfQorICAgIGNzZXQtPmlubGlzdCA9 IGNzZXQtPm91dGxpc3QgPSBOVUxMOworICAgIGNzZXQtPmZsYWdzID0gMDsKKyAgCishICAgY2J1 ZiA9IG5ld2J1ZmZlcihzaXplb2YgKGNoYXIpLCBlcnJtc2cpOworICAgIGlmICgqZXJybXNnKSBn b3RvIHBjc2Vycm9yOworICAKKyAgICBmb3IgKHAgPSBzdHI7ICAqcDsgICsrcCkKKyEgICAgIGlm ICgqcCA9PSAnXycpIHsKKyAgICAgICAgKytwOworICAgICAgICBpZiAoYXBwZWFyc2luKCpwLCBz aW5nbGVlc2NhcGVzKSkgeworISAgICAgICAgIGlmICAgICAgKCpwID09ICdfJykgY2ggPSAnXycg OworISAgICAgICAgIGVsc2UgaWYgKCpwID09ICdzJykgY2ggPSAnICcgOworISAgICAgICAgIGVs c2UgaWYgKCpwID09ICdiJykgY2ggPSAnXFwnOworISAgICAgICAgIGVsc2UgaWYgKCpwID09ICdx JykgY2ggPSAnXCcnOworISAgICAgICAgIGVsc2UgaWYgKCpwID09ICdRJykgY2ggPSAnXCInOwor ICAgICAgICAgIGVsc2UgLyogICpwID09ICd4JyAgKi8geworICAgICAgICAgICAgaGV4MSA9IGhl eGRpZ3RvaW50KHBbMV0pOworICAgICAgICAgICAgaGV4MiA9IGhleGRpZ3RvaW50KHBbMl0pOwor ICAgICAgICAgICAgaWYgKGhleDEgPCAwICB8fCAgaGV4MiA8IDApIGdvdG8gcGNzYmFkc3RyOwor ISAgICAgICAgICAgKih1bnNpZ25lZCBjaGFyICopJmNoID0gMTYgKiBoZXgxICsgaGV4MjsKKyAg ICAgICAgICAgIHAgKz0gMjsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKCFjaCkKKy0tLSA5 MCwxMjkgLS0tLQorICB9CisgIAorICAKKyEgY2hhcnNldCAqcGFyc2VjaGFyc2V0KGNvbnN0IHdj aGFyX3QgKnN0ciwgZXJybXNnX3QgZXJybXNnKQorICB7CisgICAgY2hhcnNldCAqY3NldCA9IE5V TEw7CisgICAgYnVmZmVyICpjYnVmID0gTlVMTDsKKyEgICBjb25zdCB3Y2hhcl90ICpwLCAqIGNv bnN0IHNpbmdsZWVzY2FwZXMgPSBMIl9zYnFReCI7CisgICAgaW50IGhleDEsIGhleDI7CishICAg d2NoYXJfdCBjaDsKKyEgICAgICAgCisgICAgY3NldCA9IG1hbGxvYyhzaXplb2YgKGNoYXJzZXQp KTsKKyAgICBpZiAoIWNzZXQpIHsKKyEgICAgIHdjc2NweShlcnJtc2csb3V0b2ZtZW0pOworICAg ICAgZ290byBwY3NlcnJvcjsKKyAgICB9CisgICAgY3NldC0+aW5saXN0ID0gY3NldC0+b3V0bGlz dCA9IE5VTEw7CisgICAgY3NldC0+ZmxhZ3MgPSAwOworICAKKyEgICBjYnVmID0gbmV3YnVmZmVy KHNpemVvZiAod2NoYXJfdCksIGVycm1zZyk7CisgICAgaWYgKCplcnJtc2cpIGdvdG8gcGNzZXJy b3I7CisgIAorICAgIGZvciAocCA9IHN0cjsgICpwOyAgKytwKQorISAgICAgaWYgKCpwID09IEwn XycpIHsKKyAgICAgICAgKytwOworICAgICAgICBpZiAoYXBwZWFyc2luKCpwLCBzaW5nbGVlc2Nh cGVzKSkgeworISAgICAgICAgIGlmICAgICAgKCpwID09IEwnXycpIGNoID0gTCdfJyA7CishICAg ICAgICAgZWxzZSBpZiAoKnAgPT0gTCdzJykgY2ggPSBMJyAnIDsKKyEgICAgICAgICBlbHNlIGlm ICgqcCA9PSBMJ2InKSBjaCA9IEwnXFwnOworISAgICAgICAgIGVsc2UgaWYgKCpwID09IEwncScp IGNoID0gTCdcJyc7CishICAgICAgICAgZWxzZSBpZiAoKnAgPT0gTCdRJykgY2ggPSBMJ1wiJzsK KyAgICAgICAgICBlbHNlIC8qICAqcCA9PSAneCcgICovIHsKKysgICAgICAgICAgIC8qIEZJWE1F IF94IG1ldGFjaGFyYWN0ZXIgc2hvdWxkIGFsbG93IHdpZGUgY2hhcmFjdGVycyBpbnB1dC4qLwor ICAgICAgICAgICAgaGV4MSA9IGhleGRpZ3RvaW50KHBbMV0pOworICAgICAgICAgICAgaGV4MiA9 IGhleGRpZ3RvaW50KHBbMl0pOworICAgICAgICAgICAgaWYgKGhleDEgPCAwICB8fCAgaGV4MiA8 IDApIGdvdG8gcGNzYmFkc3RyOworISAgICAgICAgICAgY2ggPSAxNiAqIGhleDEgKyBoZXgyOwor ICAgICAgICAgICAgcCArPSAyOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoIWNoKQorKioq KioqKioqKioqKioqCisqKiogMTMwLDE0MyAqKioqCisgICAgICAgICAgfQorICAgICAgICB9Cisg ICAgICAgIGVsc2UgeworISAgICAgICAgIGlmICAgICAgKCpwID09ICdBJykgY3NldC0+ZmxhZ3Mg fD0gQ1NfVUNBU0U7CishICAgICAgICAgZWxzZSBpZiAoKnAgPT0gJ2EnKSBjc2V0LT5mbGFncyB8 PSBDU19MQ0FTRTsKKyEgICAgICAgICBlbHNlIGlmICgqcCA9PSAnMCcpIGNzZXQtPmZsYWdzIHw9 IENTX0RJR0lUOworICAgICAgICAgIGVsc2UgZ290byBwY3NiYWRzdHI7CisgICAgICAgIH0KKyAg ICAgIH0KKyAgICAgIGVsc2UgeworISAgICAgICBhZGRpdGVtKGNidWYscCxlcnJtc2cpOworICAg ICAgICBpZiAoKmVycm1zZykgZ290byBwY3NlcnJvcjsKKyAgICAgIH0KKyAgICBjaCA9ICdcMCc7 CistLS0gMTM0LDE0NyAtLS0tCisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2Ug eworISAgICAgICAgIGlmICAgICAgKCpwID09IEwnQScpIGNzZXQtPmZsYWdzIHw9IENTX1VDQVNF OworISAgICAgICAgIGVsc2UgaWYgKCpwID09IEwnYScpIGNzZXQtPmZsYWdzIHw9IENTX0xDQVNF OworISAgICAgICAgIGVsc2UgaWYgKCpwID09IEwnMCcpIGNzZXQtPmZsYWdzIHw9IENTX0RJR0lU OworICAgICAgICAgIGVsc2UgZ290byBwY3NiYWRzdHI7CisgICAgICAgIH0KKyAgICAgIH0KKyAg ICAgIGVsc2UgeworISAgICAgICBhZGRpdGVtKGNidWYsIHAsZXJybXNnKTsKKyAgICAgICAgaWYg KCplcnJtc2cpIGdvdG8gcGNzZXJyb3I7CisgICAgICB9CisgICAgY2ggPSAnXDAnOworKioqKioq KioqKioqKioqCisqKiogMTQ5LDE1OSAqKioqCisgIHBjc2NsZWFudXA6CisgIAorICAgIGlmIChj YnVmKSBmcmVlYnVmZmVyKGNidWYpOworICAgIHJldHVybiBjc2V0OworICAKKyAgcGNzYmFkc3Ry OgorICAKKyEgICBzcHJpbnRmKGVycm1zZywgIkJhZCBjaGFyc2V0IHN5bnRheDogJS4qc1xuIiwg ZXJybXNnX3NpemUgLSAyMiwgc3RyKTsKKyAgCisgIHBjc2Vycm9yOgorICAKKy0tLSAxNTMsMTY0 IC0tLS0KKyAgcGNzY2xlYW51cDoKKyAgCisgICAgaWYgKGNidWYpIGZyZWVidWZmZXIoY2J1Zik7 CisrICAgLy9pZiAod3N0cikgZnJlZSh3c3RyKTsKKyAgICByZXR1cm4gY3NldDsKKyAgCisgIHBj c2JhZHN0cjoKKyAgCishICAgc3dwcmludGYoZXJybXNnLCBlcnJtc2dfc2l6ZSwgTCJCYWQgY2hh cnNldCBzeW50YXg6ICUuKnNcbiIsIGVycm1zZ19zaXplIC0gMjIsIHN0cik7CisgIAorICBwY3Nl cnJvcjoKKyAgCisqKioqKioqKioqKioqKioKKyoqKiAxNzEsMTg0ICoqKioKKyAgfQorICAKKyAg CishIGludCBjc21lbWJlcihjaGFyIGMsIGNvbnN0IGNoYXJzZXQgKmNzZXQpCisgIHsKKyAgICBy ZXR1cm4KKyAgICAgIGFwcGVhcnNpbihjLCBjc2V0LT5pbmxpc3QpIHx8CisgICAgICAoICFhcHBl YXJzaW4oYywgY3NldC0+b3V0bGlzdCkgJiYKKyEgICAgICAgKCAoY3NldC0+ZmxhZ3MgJiBDU19M Q0FTRSAmJiBpc2xvd2VyKCoodW5zaWduZWQgY2hhciAqKSZjKSkgfHwKKyEgICAgICAgICAoY3Nl dC0+ZmxhZ3MgJiBDU19VQ0FTRSAmJiBpc3VwcGVyKCoodW5zaWduZWQgY2hhciAqKSZjKSkgfHwK KyEgICAgICAgICAoY3NldC0+ZmxhZ3MgJiBDU19ESUdJVCAmJiBpc2RpZ2l0KCoodW5zaWduZWQg Y2hhciAqKSZjKSkgfHwKKyAgICAgICAgICAoY3NldC0+ZmxhZ3MgJiBDU19OVUwgICAmJiAhYyAg ICAgICAgICAgICAgICAgICAgICAgICAgICkgICApICk7CisgIH0KKyAgCistLS0gMTc2LDE4OSAt LS0tCisgIH0KKyAgCisgIAorISBpbnQgY3NtZW1iZXIod2NoYXJfdCBjLCBjb25zdCBjaGFyc2V0 ICpjc2V0KQorICB7CisgICAgcmV0dXJuCisgICAgICBhcHBlYXJzaW4oYywgY3NldC0+aW5saXN0 KSB8fAorICAgICAgKCAhYXBwZWFyc2luKGMsIGNzZXQtPm91dGxpc3QpICYmCishICAgICAgICAg KCAoY3NldC0+ZmxhZ3MgJiBDU19MQ0FTRSAmJiBpc3dsb3dlcigqKHdpbnRfdCAqKSZjKSkgfHwK KyEgICAgICAgICAgIChjc2V0LT5mbGFncyAmIENTX1VDQVNFICYmIGlzd3VwcGVyKCood2ludF90 ICopJmMpKSB8fAorISAgICAgICAgICAgKGNzZXQtPmZsYWdzICYgQ1NfRElHSVQgJiYgaXN3ZGln aXQoKih3aW50X3QgKikmYykpIHx8CisgICAgICAgICAgKGNzZXQtPmZsYWdzICYgQ1NfTlVMICAg JiYgIWMgICAgICAgICAgICAgICAgICAgICAgICAgICApICAgKSApOworICB9CisgIAorKioqKioq KioqKioqKioqCisqKiogMTkxLDIwNiAqKioqCisgIHsKKyAgICBjaGFyc2V0ICpjc3U7CisgICAg YnVmZmVyICppbmJ1ZiA9IE5VTEwsICpvdXRidWYgPSBOVUxMOworISAgIGNoYXIgKmxpc3RzWzRd LCAqKmxpc3QsICpwLCBudWxsY2hhciA9ICdcMCc7CisgIAorICAgIGNzdSA9IG1hbGxvYyhzaXpl b2YgKGNoYXJzZXQpKTsKKyAgICBpZiAoIWNzdSkgeworISAgICAgc3RyY3B5KGVycm1zZyxvdXRv Zm1lbSk7CisgICAgICBnb3RvIGNzdWRlcnJvcjsKKyAgICB9CishICAgaW5idWYgPSBuZXdidWZm ZXIoc2l6ZW9mIChjaGFyKSwgZXJybXNnKTsKKyAgICBpZiAoKmVycm1zZykgZ290byBjc3VkZXJy b3I7CishICAgb3V0YnVmID0gbmV3YnVmZmVyKHNpemVvZiAoY2hhciksIGVycm1zZyk7CisgICAg aWYgKCplcnJtc2cpIGdvdG8gY3N1ZGVycm9yOworICAgIGNzdS0+aW5saXN0ID0gY3N1LT5vdXRs aXN0ID0gTlVMTDsKKyAgICBjc3UtPmZsYWdzID0gIHUgID8gIGNzZXQxLT5mbGFncyB8ICBjc2V0 Mi0+ZmxhZ3MKKy0tLSAxOTYsMjExIC0tLS0KKyAgeworICAgIGNoYXJzZXQgKmNzdTsKKyAgICBi dWZmZXIgKmluYnVmID0gTlVMTCwgKm91dGJ1ZiA9IE5VTEw7CishICAgd2NoYXJfdCAqbGlzdHNb NF0sICoqbGlzdCwgKnAsIG51bGxjaGFyID0gTCdcMCc7CisgIAorICAgIGNzdSA9IG1hbGxvYyhz aXplb2YgKGNoYXJzZXQpKTsKKyAgICBpZiAoIWNzdSkgeworISAgICAgd2NzY3B5KGVycm1zZyxv dXRvZm1lbSk7CisgICAgICBnb3RvIGNzdWRlcnJvcjsKKyAgICB9CishICAgaW5idWYgPSBuZXdi dWZmZXIoc2l6ZW9mICh3Y2hhcl90KSwgZXJybXNnKTsKKyAgICBpZiAoKmVycm1zZykgZ290byBj c3VkZXJyb3I7CishICAgb3V0YnVmID0gbmV3YnVmZmVyKHNpemVvZiAod2NoYXJfdCksIGVycm1z Zyk7CisgICAgaWYgKCplcnJtc2cpIGdvdG8gY3N1ZGVycm9yOworICAgIGNzdS0+aW5saXN0ID0g Y3N1LT5vdXRsaXN0ID0gTlVMTDsKKyAgICBjc3UtPmZsYWdzID0gIHUgID8gIGNzZXQxLT5mbGFn cyB8ICBjc2V0Mi0+ZmxhZ3MKK2RpZmYgLWMgLi9jaGFyc2V0LmggLi4vUGFyMTUyLXVuaWNvZGUv Y2hhcnNldC5oCisqKiogLi9jaGFyc2V0LmgJMjAwMS0wMy0wOSAwMzo1MDozNS4wMDAwMDAwMDAg KzAzMDAKKy0tLSAuLi9QYXIxNTItdW5pY29kZS9jaGFyc2V0LmgJMjAxOS0xMC0yNiAxNzoyMTow OC41NDQwNTA4NTMgKzAzMDAKKyoqKioqKioqKioqKioqKgorKioqIDEsOSAqKioqCishIC8qKioq KioqKioqKioqKioqKioqKiovCishIC8qIGNoYXJzZXQuaCAgICAgICAgICovCishIC8qIGZvciBQ YXIgMS41MiAgICAgICovCishIC8qIENvcHlyaWdodCAyMDAxIGJ5ICovCishIC8qIEFkYW0gTS4g Q29zdGVsbG8gICovCishIC8qKioqKioqKioqKioqKioqKioqKiovCisgIAorICAvKiBUaGlzIGlz IEFOU0kgQyBjb2RlIChDODkpLiAqLworICAKKy0tLSAxLDExIC0tLS0KKyEgLyoqKioqKioqKioq KioqKioqKioqKioqLworISAvKiBjaGFyc2V0LmggICAgICAgICAgICovCishIC8qIGZvciBQYXIg MS41Mi1pMThuLjQgKi8KKyEgLyogQ29weXJpZ2h0IDIwMDEgYnkgICAqLworISAvKiBBZGFtIE0u IENvc3RlbGxvICAgICovCishIC8qIE1vZGlmaWVkIGJ5ICAgICAgICAgKi8KKyEgLyogSsOpcsO0 bWUgUG91aWxsZXIgICAgICovCishIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKyAgCisgIC8q IFRoaXMgaXMgQU5TSSBDIGNvZGUgKEM4OSkuICovCisgIAorKioqKioqKioqKioqKioqCisqKiog MTEsMjQgKioqKgorICAvKiBOb3RlOiBUaG9zZSBmdW5jdGlvbnMgZGVjbGFyZWQgaGVyZSB3aGlj aCBkbyBub3QgdXNlIGVycm1zZyAgICAqLworICAvKiBhbHdheXMgc3VjY2VlZCwgcHJvdmlkZWQg dGhhdCB0aGV5IGFyZSBwYXNzZWQgdmFsaWQgYXJndW1lbnRzLiAqLworICAKKyEgCisgICNpbmNs dWRlICJlcnJtc2cuaCIKKyAgCisgIAorICB0eXBlZGVmIHN0cnVjdCBjaGFyc2V0IGNoYXJzZXQ7 CisgIAorICAKKyEgY2hhcnNldCAqcGFyc2VjaGFyc2V0KGNvbnN0IGNoYXIgKnN0ciwgZXJybXNn X3QgZXJybXNnKTsKKyAgCisgICAgLyogcGFyc2VjaGFyc2V0KHN0cixlcnJtc2cpIHJldHVybnMg dGhlIHNldCBvZiBjaGFyYWN0ZXJzIGRlZmluZWQgYnkgKi8KKyAgICAvKiBzdHIgdXNpbmcgY2hh cnNldCBzeW50YXggKHNlZSBwYXIuZG9jKS4gIFJldHVybnMgTlVMTCBvbiBmYWlsdXJlLiAqLwor LS0tIDEzLDI2IC0tLS0KKyAgLyogTm90ZTogVGhvc2UgZnVuY3Rpb25zIGRlY2xhcmVkIGhlcmUg d2hpY2ggZG8gbm90IHVzZSBlcnJtc2cgICAgKi8KKyAgLyogYWx3YXlzIHN1Y2NlZWQsIHByb3Zp ZGVkIHRoYXQgdGhleSBhcmUgcGFzc2VkIHZhbGlkIGFyZ3VtZW50cy4gKi8KKyAgCishICNpbmNs dWRlIDx3Y2hhci5oPgorICAjaW5jbHVkZSAiZXJybXNnLmgiCisgIAorICAKKyAgdHlwZWRlZiBz dHJ1Y3QgY2hhcnNldCBjaGFyc2V0OworICAKKyAgCishIGNoYXJzZXQgKnBhcnNlY2hhcnNldChj b25zdCB3Y2hhcl90ICpzdHIsIGVycm1zZ190IGVycm1zZyk7CisgIAorICAgIC8qIHBhcnNlY2hh cnNldChzdHIsZXJybXNnKSByZXR1cm5zIHRoZSBzZXQgb2YgY2hhcmFjdGVycyBkZWZpbmVkIGJ5 ICovCisgICAgLyogc3RyIHVzaW5nIGNoYXJzZXQgc3ludGF4IChzZWUgcGFyLmRvYykuICBSZXR1 cm5zIE5VTEwgb24gZmFpbHVyZS4gKi8KKyoqKioqKioqKioqKioqKgorKioqIDMwLDM2ICoqKioK KyAgICAvKiAqY3NldC4gIGNzZXQgbWF5IG5vdCBiZSB1c2VkIGFmdGVyIHRoaXMgY2FsbC4gICAg ICAqLworICAKKyAgCishIGludCBjc21lbWJlcihjaGFyIGMsIGNvbnN0IGNoYXJzZXQgKmNzZXQp OworICAKKyAgICAvKiBjc21lbWJlcihjLGNzZXQpIHJldHVybnMgMSBpZiBjIGlzIGEgbWVtYmVy IG9mICpjc2V0LCAwIG90aGVyd2lzZS4gKi8KKyAgCistLS0gMzIsMzggLS0tLQorICAgIC8qICpj c2V0LiAgY3NldCBtYXkgbm90IGJlIHVzZWQgYWZ0ZXIgdGhpcyBjYWxsLiAgICAgICovCisgIAor ICAKKyEgaW50IGNzbWVtYmVyKHdjaGFyX3QgYywgY29uc3QgY2hhcnNldCAqY3NldCk7CisgIAor ICAgIC8qIGNzbWVtYmVyKGMsY3NldCkgcmV0dXJucyAxIGlmIGMgaXMgYSBtZW1iZXIgb2YgKmNz ZXQsIDAgb3RoZXJ3aXNlLiAqLworICAKK2RpZmYgLWMgLi9lcnJtc2cuYyAuLi9QYXIxNTItdW5p Y29kZS9lcnJtc2cuYworKioqIC4vZXJybXNnLmMJMjAwMS0wMy0wOSAwMzo1MDo0Ni4wMDAwMDAw MDAgKzAzMDAKKy0tLSAuLi9QYXIxNTItdW5pY29kZS9lcnJtc2cuYwkyMDE5LTEwLTI2IDE3OjIx OjA4LjU0NTA1MDg1MyArMDMwMAorKioqKioqKioqKioqKioqCisqKiogMSw5ICoqKioKKyEgLyoq KioqKioqKioqKioqKioqKioqKi8KKyEgLyogZXJybXNnLmMgICAgICAgICAgKi8KKyEgLyogZm9y IFBhciAxLjUyICAgICAgKi8KKyEgLyogQ29weXJpZ2h0IDIwMDEgYnkgKi8KKyEgLyogQWRhbSBN LiBDb3N0ZWxsbyAgKi8KKyEgLyoqKioqKioqKioqKioqKioqKioqKi8KKyAgCisgIC8qIFRoaXMg aXMgQU5TSSBDIGNvZGUgKEM4OSkuICovCisgIAorLS0tIDEsMTEgLS0tLQorISAvKioqKioqKioq KioqKioqKioqKioqKiovCishIC8qIGVycm1zZy5jICAgICAgICAgICAgKi8KKyEgLyogZm9yIFBh ciAxLjUyLWkxOG4uNCAqLworISAvKiBDb3B5cmlnaHQgMjAwMSBieSAgICovCishIC8qIEFkYW0g TS4gQ29zdGVsbG8gICAgKi8KKyEgLyogTW9kaWZpZWQgYnkgICAgICAgICAqLworISAvKiBKw6ly w7RtZSBQb3VpbGxlciAgICAgKi8KKyEgLyoqKioqKioqKioqKioqKioqKioqKioqLworICAKKyAg LyogVGhpcyBpcyBBTlNJIEMgY29kZSAoQzg5KS4gKi8KKyAgCisqKioqKioqKioqKioqKioKKyoq KiAxMSwxOCAqKioqCisgICNpbmNsdWRlICJlcnJtc2cuaCIgIC8qIE1ha2VzIHN1cmUgd2UncmUg Y29uc2lzdGVudCB3aXRoIHRoZSBkZWNsYXJhdGlvbnMuICovCisgIAorICAKKyEgY29uc3QgY2hh ciAqIGNvbnN0IG91dG9mbWVtID0KKyEgICAiT3V0IG9mIG1lbW9yeS5cbiI7CisgIAorISBjb25z dCBjaGFyICogY29uc3QgaW1wb3NzaWJpbGl0eSA9CishICAgIkltcG9zc2liaWxpdHkgIyVkIGhh cyBvY2N1cnJlZC4gIFBsZWFzZSByZXBvcnQgaXQuXG4iOworLS0tIDEzLDIzIC0tLS0KKyAgI2lu Y2x1ZGUgImVycm1zZy5oIiAgLyogTWFrZXMgc3VyZSB3ZSdyZSBjb25zaXN0ZW50IHdpdGggdGhl IGRlY2xhcmF0aW9ucy4gKi8KKyAgCisgIAorISBjb25zdCB3Y2hhcl90ICogY29uc3Qgb3V0b2Zt ZW0gPQorISAgIEwiT3V0IG9mIG1lbW9yeS5cbiI7CisgIAorISBjb25zdCB3Y2hhcl90ICogY29u c3QgbWJzZXJyb3IgPQorISAgIEwiRXJyb3IgaW4gaW5wdXQgbXVsdGlieXRlIHN0cmluZy5cbiI7 CishIAorISBjb25zdCB3Y2hhcl90ICogY29uc3QgaW1wb3NzaWJpbGl0eSA9CishICAgTCJJbXBv c3NpYmlsaXR5ICMlZCBoYXMgb2NjdXJyZWQuICBQbGVhc2UgcmVwb3J0IGl0LlxuIjsKK2RpZmYg LWMgLi9lcnJtc2cuaCAuLi9QYXIxNTItdW5pY29kZS9lcnJtc2cuaAorKioqIC4vZXJybXNnLmgJ MjAwMS0wMy0wOSAwMzo1MDo1Ni4wMDAwMDAwMDAgKzAzMDAKKy0tLSAuLi9QYXIxNTItdW5pY29k ZS9lcnJtc2cuaAkyMDE5LTEwLTI2IDE3OjIxOjA4LjU0NTA1MDg1MyArMDMwMAorKioqKioqKioq KioqKioqCisqKiogMSw5ICoqKioKKyEgLyoqKioqKioqKioqKioqKioqKioqKi8KKyEgLyogZXJy bXNnLmggICAgICAgICAgKi8KKyEgLyogZm9yIFBhciAxLjUyICAgICAgKi8KKyEgLyogQ29weXJp Z2h0IDIwMDEgYnkgKi8KKyEgLyogQWRhbSBNLiBDb3N0ZWxsbyAgKi8KKyEgLyoqKioqKioqKioq KioqKioqKioqKi8KKyAgCisgIC8qIFRoaXMgaXMgQU5TSSBDIGNvZGUgKEM4OSkuICovCisgIAor LS0tIDEsMTEgLS0tLQorISAvKioqKioqKioqKioqKioqKioqKioqKiovCishIC8qIGVycm1zZy5o ICAgICAgICAgICAgKi8KKyEgLyogZm9yIFBhciAxLjUyLWkxOG4uNCAqLworISAvKiBDb3B5cmln aHQgMjAwMSBieSAgICovCishIC8qIEFkYW0gTS4gQ29zdGVsbG8gICAgKi8KKyEgLyogTW9kaWZp ZWQgYnkgICAgICAgICAqLworISAvKiBKw6lyw7RtZSBQb3VpbGxlciAgICAgKi8KKyEgLyoqKioq KioqKioqKioqKioqKioqKioqLworICAKKyAgLyogVGhpcyBpcyBBTlNJIEMgY29kZSAoQzg5KS4g Ki8KKyAgCisqKioqKioqKioqKioqKioKKyoqKiAxMSwxNyAqKioqCisgICNpZm5kZWYgRVJSTVNH X0gKKyAgI2RlZmluZSBFUlJNU0dfSAorICAKKyEgCisgICNkZWZpbmUgZXJybXNnX3NpemUgMTYz CisgIAorICAvKiBUaGlzIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRoYXQg d2lsbCAgKi8KKy0tLSAxMywxOSAtLS0tCisgICNpZm5kZWYgRVJSTVNHX0gKKyAgI2RlZmluZSBF UlJNU0dfSAorICAKKyEgI2luY2x1ZGUgPHdjaGFyLmg+CisgICNkZWZpbmUgZXJybXNnX3NpemUg MTYzCisgIAorICAvKiBUaGlzIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRo YXQgd2lsbCAgKi8KKyoqKioqKioqKioqKioqKgorKioqIDIwLDI2ICoqKioKKyAgLyogdmVyc2lv bnMgb2YgdGhpcyBoZWFkZXIgZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICovCisgIAorICAK KyEgdHlwZWRlZiBjaGFyIGVycm1zZ190W2Vycm1zZ19zaXplXTsKKyAgCisgIC8qIEFueSBmdW5j dGlvbiB3aGljaCB0YWtlcyB0aGUgYXJndW1lbnQgZXJybXNnX3QgZXJybXNnIG11c3QsIGJlZm9y ZSAqLworICAvKiByZXR1cm5pbmcsIGVpdGhlciBzZXQgZXJybXNnWzBdIHRvICdcMCcgKGluZGlj YXRpbmcgc3VjY2VzcyksIG9yICAgKi8KKy0tLSAyMiwyOCAtLS0tCisgIC8qIHZlcnNpb25zIG9m IHRoaXMgaGVhZGVyIGZpbGUuICAgICAgICAgICAgICAgICAgICAgICAqLworICAKKyAgCishIHR5 cGVkZWYgd2NoYXJfdCBlcnJtc2dfdFtlcnJtc2dfc2l6ZV07CisgIAorICAvKiBBbnkgZnVuY3Rp b24gd2hpY2ggdGFrZXMgdGhlIGFyZ3VtZW50IGVycm1zZ190IGVycm1zZyBtdXN0LCBiZWZvcmUg Ki8KKyAgLyogcmV0dXJuaW5nLCBlaXRoZXIgc2V0IGVycm1zZ1swXSB0byAnXDAnIChpbmRpY2F0 aW5nIHN1Y2Nlc3MpLCBvciAgICovCisqKioqKioqKioqKioqKioKKyoqKiAyOCwzNyAqKioqCisg IC8qIGJlaW5nIGNhcmVmdWwgbm90IHRvIG92ZXJydW4gdGhlIHNwYWNlLiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqLworICAKKyAgCishIGV4dGVybiBjb25zdCBjaGFyICogY29uc3Qgb3V0 b2ZtZW07CisgICAgLyogIk91dCBvZiBtZW1vcnkuXG4iICovCisgIAorISBleHRlcm4gY29uc3Qg Y2hhciAqIGNvbnN0IGltcG9zc2liaWxpdHk7CisgICAgLyogIkltcG9zc2liaWxpdHkgIyVkIGhh cyBvY2N1cnJlZC4gIFBsZWFzZSByZXBvcnQgaXQuXG4iICovCisgIAorICAKKy0tLSAzMCw0MiAt LS0tCisgIC8qIGJlaW5nIGNhcmVmdWwgbm90IHRvIG92ZXJydW4gdGhlIHNwYWNlLiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqLworICAKKyAgCishIGV4dGVybiBjb25zdCB3Y2hhcl90ICog Y29uc3Qgb3V0b2ZtZW07CisgICAgLyogIk91dCBvZiBtZW1vcnkuXG4iICovCisgIAorISBleHRl cm4gY29uc3Qgd2NoYXJfdCAqIGNvbnN0IG1ic2Vycm9yOworISAgIC8qICJFcnJvciBpbiBpbnB1 dCBtdWx0aWJ5dGUgc3RyaW5nLlxuIiAqLworISAgIAorISBleHRlcm4gY29uc3Qgd2NoYXJfdCAq IGNvbnN0IGltcG9zc2liaWxpdHk7CisgICAgLyogIkltcG9zc2liaWxpdHkgIyVkIGhhcyBvY2N1 cnJlZC4gIFBsZWFzZSByZXBvcnQgaXQuXG4iICovCisgIAorICAKK2RpZmYgLWMgLi9wYXIuMSAu Li9QYXIxNTItdW5pY29kZS9wYXIuMQorKioqIC4vcGFyLjEJMjAwMS0wNC0zMCAwMToxNjoyMi4w MDAwMDAwMDAgKzA0MDAKKy0tLSAuLi9QYXIxNTItdW5pY29kZS9wYXIuMQkyMDE5LTEwLTI2IDE3 OjIxOjA4LjU0NjA1MDg1MyArMDMwMAorKioqKioqKioqKioqKioqCisqKiogMSw2ICoqKioKKyAg LlwiKioqKioqKioqKioqKioqKioqKioqCisgIC5cIiogcGFyLjEgICAgICAgICAgICAgKgorISAu XCIqIGZvciBQYXIgMS41MiAgICAgICoKKyAgLlwiKiBDb3B5cmlnaHQgMjAwMSBieSAqCisgIC5c IiogQWRhbSBNLiBDb3N0ZWxsbyAgKgorICAuXCIqKioqKioqKioqKioqKioqKioqKioKKy0tLSAx LDYgLS0tLQorICAuXCIqKioqKioqKioqKioqKioqKioqKioKKyAgLlwiKiBwYXIuMSAgICAgICAg ICAgICAqCishIC5cIiogZm9yIFBhciAxLjUyIGkxOG4gKgorICAuXCIqIENvcHlyaWdodCAyMDAx IGJ5ICoKKyAgLlwiKiBBZGFtIE0uIENvc3RlbGxvICAqCisgIC5cIioqKioqKioqKioqKioqKioq KioqKgorZGlmZiAtYyAuL3Bhci5jIC4uL1BhcjE1Mi11bmljb2RlL3Bhci5jCisqKiogLi9wYXIu YwkyMDAxLTA0LTAyIDA4OjI1OjU3LjAwMDAwMDAwMCArMDQwMAorLS0tIC4uL1BhcjE1Mi11bmlj b2RlL3Bhci5jCTIwMTktMTAtMjYgMTc6MjE6MDguNTQ3MDUwODUzICswMzAwCisqKioqKioqKioq KioqKioKKyoqKiAxLDkgKioqKgorISAvKioqKioqKioqKioqKioqKioqKioqLworISAvKiBwYXIu YyAgICAgICAgICAgICAqLworISAvKiBmb3IgUGFyIDEuNTIgICAgICAqLworISAvKiBDb3B5cmln aHQgMjAwMSBieSAqLworISAvKiBBZGFtIE0uIENvc3RlbGxvICAqLworISAvKioqKioqKioqKioq KioqKioqKioqLworICAKKyAgLyogVGhpcyBpcyBBTlNJIEMgY29kZSAoQzg5KS4gKi8KKyAgCist LS0gMSwxMSAtLS0tCishIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKyEgLyogcGFyLmMgICAg ICAgICAgICAgICAqLworISAvKiBmb3IgUGFyIDEuNTItaTE4bi40ICovCishIC8qIENvcHlyaWdo dCAyMDAxIGJ5ICAgKi8KKyEgLyogQWRhbSBNLiBDb3N0ZWxsbyAgICAqLworISAvKiBNb2RpZmll ZCBieSAgICAgICAgICovCishIC8qIErDqXLDtG1lIFBvdWlsbGVyICAgICAqLworISAvKioqKioq KioqKioqKioqKioqKioqKiovCisgIAorICAvKiBUaGlzIGlzIEFOU0kgQyBjb2RlIChDODkpLiAq LworICAKKyoqKioqKioqKioqKioqKgorKioqIDEyLDIyICoqKioKKyAgI2luY2x1ZGUgImJ1ZmZl ci5oIiAgICAvKiBBbHNvIGluY2x1ZGVzIDxzdGRkZWYuaD4uICovCisgICNpbmNsdWRlICJyZWZv cm1hdC5oIgorICAKKyEgI2luY2x1ZGUgPGN0eXBlLmg+CisgICNpbmNsdWRlIDxsb2NhbGUuaD4K KyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAgI2luY2x1ZGUg PHN0cmluZy5oPgorICAKKyAgI3VuZGVmIE5VTEwKKyAgI2RlZmluZSBOVUxMICgodm9pZCAqKSAw KQorLS0tIDE0LDI3IC0tLS0KKyAgI2luY2x1ZGUgImJ1ZmZlci5oIiAgICAvKiBBbHNvIGluY2x1 ZGVzIDxzdGRkZWYuaD4uICovCisgICNpbmNsdWRlICJyZWZvcm1hdC5oIgorICAKKyEgI2luY2x1 ZGUgPGxhbmdpbmZvLmg+CishICNpbmNsdWRlIDx3Y2hhci5oPgorISAjaW5jbHVkZSA8d2N0eXBl Lmg+CisgICNpbmNsdWRlIDxsb2NhbGUuaD4KKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgICNpbmNs dWRlIDxzdGRsaWIuaD4KKyAgI2luY2x1ZGUgPHN0cmluZy5oPgorKyAjaW5jbHVkZSA8ZXJybm8u aD4KKyAgCisgICN1bmRlZiBOVUxMCisgICNkZWZpbmUgTlVMTCAoKHZvaWQgKikgMCkKKyoqKioq KioqKioqKioqKgorKioqIDI1LDgwICoqKioKKyAgI2RlZmluZSBmcmVlKHB0cikKKyAgI2VuZGlm CisgIAorLSAKKy0gLyo9PT0KKy0gCistIFJlZ2FyZGluZyBjaGFyIGFuZCB1bnNpZ25lZCBjaGFy OiAgQU5TSSBDIGlzIGEgbmlnaHRtYXJlIGluIHRoaXMKKy0gcmVzcGVjdC4gIFNvbWUgZnVuY3Rp b25zLCBsaWtlIHB1dHMoKSwgc3RyY2hyKCksIGFuZCBnZXRlbnYoKSwgdXNlIGNoYXIKKy0gb3Ig Y2hhciosIHNvIHRoZXkgd29yayB3ZWxsIHdpdGggY2hhcmFjdGVyIGNvbnN0YW50cyBsaWtlICdh Jywgd2hpY2gKKy0gYXJlIGNoYXIsIGFuZCB3aXRoIGFyZ3YsIHdoaWNoIGlzIGNoYXIqKi4gIEJ1 dCBzZXZlcmFsIG90aGVyIGZ1bmN0aW9ucywKKy0gbGlrZSBnZXRjaGFyKCksIHB1dGNoYXIoKSwg YW5kIGlzZGlnaXQoKSwgdXNlIHVuc2lnbmVkIGNoYXIgKGNvbnZlcnRlZAorLSB0by9mcm9tIGlu dCkuICBUaGVyZWZvcmUgaW5ub2NlbnQtbG9va2luZyBjb2RlIGNhbiBiZSB3cm9uZywgZm9yCist IGV4YW1wbGU6CistIAorLSAgICAgaW50IGMgPSBnZXRjaGFyKCk7CistICAgICBpZiAoYyA9PSAn YScpIC4uLgorLSAKKy0gVGhpcyBpcyB3cm9uZyBiZWNhdXNlICdhJyBpcyBjaGFyIChjb252ZXJ0 ZWQgdG8gaW50KSBhbmQgY291bGQgYmUKKy0gbmVnYXRpdmUsIGJ1dCBnZXRjaGFyKCkgcmV0dXJu cyB1bnNpZ25lZCBjaGFyIChjb252ZXJ0ZWQgdG8gaW50KSwgc28gYworLSBpcyBhbHdheXMgbm9u bmVnYXRpdmUgb3IgRU9GLiAgRm9yIHNpbWlsYXIgcmVhc29ucywgaXQgaXMgd3JvbmcgdG8gcGFz cworLSBhIGNoYXIgdG8gYSBmdW5jdGlvbiB0aGF0IGV4cGVjdHMgYW4gdW5zaWduZWQgY2hhcjoK Ky0gCistICAgICBwdXRjaGFyKCdcbicpOworLSAgICAgaWYgKGlzZGlnaXQoYXJndlsxXVswXSkp IC4uLgorLSAKKy0gSW5ldml0YWJseSwgd2UgbmVlZCB0byBjb252ZXJ0IGJldHdlZW4gY2hhciBh bmQgdW5zaWduZWQgY2hhci4gIFRoaXMgY2FuCistIGJlIGRvbmUgYnkgaW50ZWdyYWwgY29udmVy c2lvbiAoY2FzdGluZyBvciBhc3NpZ25pbmcgYSBjaGFyIHRvIHVuc2lnbmVkCistIGNoYXIgb3Ig dmljZSB2ZXJzYSksIG9yIGJ5IGFsaWFzaW5nIChjb252ZXJ0aW5nIGEgcG9pbnRlciB0byBjaGFy IHRvCistIGEgcG9pbnRlciB0byB1bnNpZ25lZCBjaGFyIChvciB2aWNlIHZlcnNhKSBhbmQgdGhl biBkZXJlZmVyZW5jaW5nCistIGl0KS4gIEFOU0kgQyByZXF1aXJlcyB0aGF0IGludGVncmFsIGNv bnZlcnNpb24gYWx0ZXJzIHRoZSBiaXRzIHdoZW4gdGhlCistIHVuc2lnbmVkIHZhbHVlIGlzIG5v dCByZXByZXNlbnRhYmxlIGluIHRoZSBzaWduZWQgdHlwZSBhbmQgdGhlIHNpZ25lZAorLSB0eXBl IGRvZXMgbm90IHVzZSB0d28ncyBjb21wbGVtZW50IHJlcHJlc2VudGF0aW9uLiAgQWxpYXNpbmcs IG9uIHRoZQorLSBvdGhlciBoYW5kLCBwcmVzZXJ2ZXMgdGhlIGJpdHMuICBBbHRob3VnaCB0aGUg QyBzdGFuZGFyZCBpcyBub3QgYXQgYWxsCistIGNsZWFyIGFib3V0IHdoaWNoIHNvcnQgb2YgY29u dmVyc2lvbiBpcyBhcHByb3ByaWF0ZSBmb3IgbWFraW5nIHRoZQorLSBzdGFuZGFyZCBsaWJyYXJ5 IGZ1bmN0aW9ucyBpbnRlcm9wZXJhdGUsIEkgdGhpbmsgcHJlc2VydmluZyB0aGUgYml0cworLSBp cyB3aGF0IGlzIG5lZWRlZC4gIFVuZGVyIHRoYXQgYXNzdW1wdGlvbiwgaGVyZSBhcmUgc29tZSBl eGFtcGxlcyBvZgorLSBjb3JyZWN0IGNvZGU6CistIAorLSAgICAgaW50IGMgPSBnZXRjaGFyKCk7 CistICAgICBjaGFyIGNoOworLSAKKy0gICAgIGlmIChjICE9IEVPRikgeworLSAgICAgICAqKHVu c2lnbmVkIGNoYXIgKikmY2ggPSBjOworLSAgICAgICBpZiAoY2ggPT0gJ2EnKSAuLi4KKy0gICAg ICAgaWYgKGlzZGlnaXQoYykpIC4uLgorLSAgICAgfQorLSAKKy0gICAgIGNoYXIgKnMgPSAuLi4K Ky0gICAgIGlmIChpc2RpZ2l0KCoodW5zaWduZWQgY2hhciAqKXMpKSAuLi4KKy0gCistID09PSov CistIAorLSAKKyAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB1c2FnZW1zZyA9CisgICJcbiIK KyAgIk9wdGlvbnMgZm9yIHBhcjpcbiIKKy0tLSAzMCwzNSAtLS0tCisqKioqKioqKioqKioqKioK KyoqKiAxMjYsMTMyICoqKioKKyAgICAgICAgICAgICAgICAgICAgLyogbGluZSwgb3IgdGhlIGZh bGxiYWNrIHByZWxlbiBhbmQgc3VmbGVuICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIC8q IG9mIHRoZSBJUCBjb250YWluaW5nIGEgbm9uLWJvZGlsZXNzIGxpbmUuICAgICAqLworICAgIGxm bGFnX3QgZmxhZ3M7ICAvKiBCb29sZWFuIHByb3BlcnRpZXMgKHNlZSBiZWxvdykuICAgICAgICAg ICAgICAgKi8KKyEgICBjaGFyIHJjOyAgICAgICAgLyogVGhlIHJlcGVhdGVkIGNoYXJhY3RlciBv ZiBhIGJvZGlsZXNzIGxpbmUuICAgICovCisgIH0gbGluZXByb3A7CisgIAorICAvKiBGbGFncyBm b3IgbWFya2luZyBib29sZWFuIHByb3BlcnRpZXM6ICovCistLS0gODEsODcgLS0tLQorICAgICAg ICAgICAgICAgICAgICAvKiBsaW5lLCBvciB0aGUgZmFsbGJhY2sgcHJlbGVuIGFuZCBzdWZsZW4g ICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgLyogb2YgdGhlIElQIGNvbnRhaW5pbmcgYSBu b24tYm9kaWxlc3MgbGluZS4gICAgICovCisgICAgbGZsYWdfdCBmbGFnczsgIC8qIEJvb2xlYW4g cHJvcGVydGllcyAoc2VlIGJlbG93KS4gICAgICAgICAgICAgICAqLworISAgIHdjaGFyX3QgcmM7 ICAgICAvKiBUaGUgcmVwZWF0ZWQgY2hhcmFjdGVyIG9mIGEgYm9kaWxlc3MgbGluZS4gICAgKi8K KyAgfSBsaW5lcHJvcDsKKyAgCisgIC8qIEZsYWdzIGZvciBtYXJraW5nIGJvb2xlYW4gcHJvcGVy dGllczogKi8KKyoqKioqKioqKioqKioqKgorKioqIDE0MywxNTYgKioqKgorICAjZGVmaW5lICAg aXN2YWNhbnQocHJvcCkgKGlzYm9kaWxlc3MocHJvcCkgJiYgKHByb3ApLT5yYyA9PSAnICcpCisg IAorICAKKyEgc3RhdGljIGludCBkaWd0b2ludChjaGFyIGMpCisgIAorICAvKiBSZXR1cm5zIHRo ZSB2YWx1ZSByZXByZXNlbnRlZCBieSB0aGUgZGlnaXQgYywgb3IgLTEgaWYgYyBpcyBub3QgYSBk aWdpdC4gKi8KKyAgeworISAgIGNvbnN0IGNoYXIgKnAsICogY29uc3QgZGlnaXRzID0gIjAxMjM0 NTY3ODkiOworICAKKyAgICBpZiAoIWMpIHJldHVybiAtMTsKKyEgICBwID0gc3RyY2hyKGRpZ2l0 cyxjKTsKKyAgICByZXR1cm4gIHAgID8gIHAgLSBkaWdpdHMgIDogIC0xOworICAKKyAgICAvKiBX ZSBjYW4ndCBzaW1wbHkgcmV0dXJuIGMgLSAnMCcgYmVjYXVzZSB0aGlzIGlzIEFOU0kgQyBjb2Rl LCAgKi8KKy0tLSA5OCwxMTEgLS0tLQorICAjZGVmaW5lICAgaXN2YWNhbnQocHJvcCkgKGlzYm9k aWxlc3MocHJvcCkgJiYgKHByb3ApLT5yYyA9PSAnICcpCisgIAorICAKKyEgc3RhdGljIGludCBk aWd0b2ludCh3Y2hhcl90IGMpCisgIAorICAvKiBSZXR1cm5zIHRoZSB2YWx1ZSByZXByZXNlbnRl ZCBieSB0aGUgZGlnaXQgYywgb3IgLTEgaWYgYyBpcyBub3QgYSBkaWdpdC4gKi8KKyAgeworISAg IGNvbnN0IHdjaGFyX3QgKnAsICogY29uc3QgZGlnaXRzID0gTCIwMTIzNDU2Nzg5IjsKKyAgCisg ICAgaWYgKCFjKSByZXR1cm4gLTE7CishICAgcCA9IHdjc2NocihkaWdpdHMsYyk7CisgICAgcmV0 dXJuICBwICA/ICBwIC0gZGlnaXRzICA6ICAtMTsKKyAgCisgICAgLyogV2UgY2FuJ3Qgc2ltcGx5 IHJldHVybiBjIC0gJzAnIGJlY2F1c2UgdGhpcyBpcyBBTlNJIEMgY29kZSwgICovCisqKioqKioq KioqKioqKioKKyoqKiAxNjEsMTY3ICoqKioKKyAgfQorICAKKyAgCishIHN0YXRpYyBpbnQgc3Ry dG91ZGVjKGNvbnN0IGNoYXIgKnMsIGludCAqcG4pCisgIAorICAvKiBDb252ZXJ0cyB0aGUgbG9u Z2VzdCBwcmVmaXggb2Ygc3RyaW5nIHMgY29uc2lzdGluZyBvZiBkZWNpbWFsICAgKi8KKyAgLyog ZGlnaXRzIHRvIGFuIGludGVnZXIsIHdoaWNoIGlzIHN0b3JlZCBpbiAqcG4uICBOb3JtYWxseSBy ZXR1cm5zICovCistLS0gMTE2LDEyMiAtLS0tCisgIH0KKyAgCisgIAorISBzdGF0aWMgaW50IHN0 cnRvdWRlYyhjb25zdCB3Y2hhcl90ICpzLCBpbnQgKnBuKQorICAKKyAgLyogQ29udmVydHMgdGhl IGxvbmdlc3QgcHJlZml4IG9mIHN0cmluZyBzIGNvbnNpc3Rpbmcgb2YgZGVjaW1hbCAgICovCisg IC8qIGRpZ2l0cyB0byBhbiBpbnRlZ2VyLCB3aGljaCBpcyBzdG9yZWQgaW4gKnBuLiAgTm9ybWFs bHkgcmV0dXJucyAqLworKioqKioqKioqKioqKioqCisqKiogMTg3LDE5MyAqKioqCisgIAorICAK KyAgc3RhdGljIHZvaWQgcGFyc2VhcmcoCishICAgY29uc3QgY2hhciAqYXJnLCBpbnQgKnBoZWxw LCBpbnQgKnB2ZXJzaW9uLCBjaGFyc2V0ICpib2R5Y2hhcnMsIGNoYXJzZXQKKyAgICAqcHJvdGVj dGNoYXJzLCBjaGFyc2V0ICpxdW90ZWNoYXJzLCBpbnQgKnBoYW5nLCBpbnQgKnBwcmVmaXgsIGlu dCAqcHJlcGVhdCwKKyAgICBpbnQgKnBzdWZmaXgsIGludCAqcFRhYiwgaW50ICpwd2lkdGgsIGlu dCAqcGJvZHksIGludCAqcGNhcCwgaW50ICpwZGl2LCBpbnQKKyAgICAqcEVyciwgaW50ICpwZXhw ZWwsIGludCAqcGZpdCwgaW50ICpwZ3Vlc3MsIGludCAqcGludmlzLCBpbnQgKnBqdXN0LCBpbnQK Ky0tLSAxNDIsMTQ4IC0tLS0KKyAgCisgIAorICBzdGF0aWMgdm9pZCBwYXJzZWFyZygKKyEgICBj b25zdCB3Y2hhcl90ICphcmcsIGludCAqcGhlbHAsIGludCAqcHZlcnNpb24sIGNoYXJzZXQgKmJv ZHljaGFycywgY2hhcnNldAorICAgICpwcm90ZWN0Y2hhcnMsIGNoYXJzZXQgKnF1b3RlY2hhcnMs IGludCAqcGhhbmcsIGludCAqcHByZWZpeCwgaW50ICpwcmVwZWF0LAorICAgIGludCAqcHN1ZmZp eCwgaW50ICpwVGFiLCBpbnQgKnB3aWR0aCwgaW50ICpwYm9keSwgaW50ICpwY2FwLCBpbnQgKnBk aXYsIGludAorICAgICpwRXJyLCBpbnQgKnBleHBlbCwgaW50ICpwZml0LCBpbnQgKnBndWVzcywg aW50ICpwaW52aXMsIGludCAqcGp1c3QsIGludAorKioqKioqKioqKioqKioqCisqKiogMTk3LDI3 NCAqKioqCisgIC8qIGJ5IHRoZSBvdGhlciBwb2ludGVycyBhcyBhcHByb3ByaWF0ZS4gICpwaGVs cCBhbmQgKnB2ZXJzaW9uIGFyZSBib29sZWFuICAqLworICAvKiBmbGFncyBpbmRpY2F0aW5nIHdo ZXRoZXIgdGhlIGhlbHAgYW5kIHZlcnNpb24gb3B0aW9ucyB3ZXJlIHN1cHBsaWVkLiAgICAgKi8K KyAgeworISAgIGNvbnN0IGNoYXIgKnNhdmVhcmcgPSBhcmc7CisgICAgY2hhcnNldCAqY2hhcnMs ICpjaGFuZ2U7CishICAgY2hhciBvYzsKKyAgICBpbnQgbjsKKyAgCisgICAgKmVycm1zZyA9ICdc MCc7CisgIAorISAgIGlmICgqYXJnID09ICctJykgKythcmc7CishIAorISAgIGlmICghc3RyY21w KGFyZywgImhlbHAiKSkgeworICAgICAgKnBoZWxwID0gMTsKKyAgICAgIHJldHVybjsKKyAgICB9 CisgIAorISAgIGlmICghc3RyY21wKGFyZywgInZlcnNpb24iKSkgeworICAgICAgKnB2ZXJzaW9u ID0gMTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIAorISAgIGlmICgqYXJnID09ICdCJyB8fCAq YXJnID09ICdQJyB8fCAqYXJnID09ICdRJyApIHsKKyEgICAgIGNoYXJzID0gICphcmcgPT0gJ0In ICA/ICBib2R5Y2hhcnMgICAgOgorISAgICAgICAgICAgICAgKmFyZyA9PSAnUCcgID8gIHByb3Rl Y3RjaGFycyA6CishICAgICAgICAgICAvKiAqYXJnID09ICdRJyAqLyAgcXVvdGVjaGFycyAgIDsK KyAgICAgICsrYXJnOworISAgICAgaWYgKCphcmcgIT0gJz0nICAmJiAgKmFyZyAhPSAnKycgICYm ICAqYXJnICE9ICctJykgZ290byBiYWRhcmc7CisgICAgICBjaGFuZ2UgPSBwYXJzZWNoYXJzZXQo YXJnICsgMSwgZXJybXNnKTsKKyAgICAgIGlmIChjaGFuZ2UpIHsKKyEgICAgICAgaWYgICAgICAo KmFyZyA9PSAnPScpICAgY3Nzd2FwKGNoYXJzLGNoYW5nZSk7CishICAgICAgIGVsc2UgaWYgKCph cmcgPT0gJysnKSAgIGNzYWRkKGNoYXJzLGNoYW5nZSxlcnJtc2cpOworISAgICAgICBlbHNlICAv KiAqYXJnID09ICctJyAqLyBjc3JlbW92ZShjaGFycyxjaGFuZ2UsZXJybXNnKTsKKyAgICAgICAg ZnJlZWNoYXJzZXQoY2hhbmdlKTsKKyAgICAgIH0KKyAgICAgIHJldHVybjsKKyAgICB9CisgIAor ISAgIGlmIChpc2RpZ2l0KCoodW5zaWduZWQgY2hhciAqKWFyZykpIHsKKyAgICAgIGlmICghc3Ry dG91ZGVjKGFyZywgJm4pKSBnb3RvIGJhZGFyZzsKKyAgICAgIGlmIChuIDw9IDgpICpwcHJlZml4 ID0gbjsKKyAgICAgIGVsc2UgKnB3aWR0aCA9IG47CisgICAgfQorICAKKyAgICBmb3IgKDs7KSB7 CishICAgICB3aGlsZSAoaXNkaWdpdCgqKHVuc2lnbmVkIGNoYXIgKilhcmcpKSArK2FyZzsKKyAg ICAgIG9jID0gKmFyZzsKKyAgICAgIGlmICghb2MpIGJyZWFrOworICAgICAgbiA9IC0xOworICAg ICAgaWYgKCFzdHJ0b3VkZWMoKythcmcsICZuKSkgZ290byBiYWRhcmc7CishICAgICBpZiAoICAg b2MgPT0gJ2gnIHx8IG9jID09ICdwJyB8fCBvYyA9PSAncicKKyEgICAgICAgICB8fCBvYyA9PSAn cycgfHwgb2MgPT0gJ1QnIHx8IG9jID09ICd3JykgeworISAgICAgICBpZiAgICAgIChvYyA9PSAn aCcpICAgKnBoYW5nICAgPSAgbiA+PSAwID8gbiA6ICAxOworISAgICAgICBlbHNlIGlmIChvYyA9 PSAncCcpICAgKnBwcmVmaXggPSAgbjsKKyEgICAgICAgZWxzZSBpZiAob2MgPT0gJ3InKSAgICpw cmVwZWF0ID0gIG4gPj0gMCA/IG4gOiAgMzsKKyEgICAgICAgZWxzZSBpZiAob2MgPT0gJ3MnKSAg ICpwc3VmZml4ID0gIG47CishICAgICAgIGVsc2UgaWYgKG9jID09ICdUJykgICAqcFRhYiAgICA9 ICBuID49IDAgPyBuIDogIDg7CishICAgICAgIGVsc2UgIC8qIG9jID09ICd3JyAqLyAqcHdpZHRo ICA9ICBuID49IDAgPyBuIDogNzk7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgaWYg KG4gPCAwKSBuID0gMTsKKyAgICAgICAgaWYgKG4gPiAxKSBnb3RvIGJhZGFyZzsKKyEgICAgICAg aWYgICAgICAob2MgPT0gJ2InKSAqcGJvZHkgICA9IG47CishICAgICAgIGVsc2UgaWYgKG9jID09 ICdjJykgKnBjYXAgICAgPSBuOworISAgICAgICBlbHNlIGlmIChvYyA9PSAnZCcpICpwZGl2ICAg ID0gbjsKKyEgICAgICAgZWxzZSBpZiAob2MgPT0gJ0UnKSAqcEVyciAgICA9IG47CishICAgICAg IGVsc2UgaWYgKG9jID09ICdlJykgKnBleHBlbCAgPSBuOworISAgICAgICBlbHNlIGlmIChvYyA9 PSAnZicpICpwZml0ICAgID0gbjsKKyEgICAgICAgZWxzZSBpZiAob2MgPT0gJ2cnKSAqcGd1ZXNz ICA9IG47CishICAgICAgIGVsc2UgaWYgKG9jID09ICdpJykgKnBpbnZpcyAgPSBuOworISAgICAg ICBlbHNlIGlmIChvYyA9PSAnaicpICpwanVzdCAgID0gbjsKKyEgICAgICAgZWxzZSBpZiAob2Mg PT0gJ2wnKSAqcGxhc3QgICA9IG47CishICAgICAgIGVsc2UgaWYgKG9jID09ICdxJykgKnBxdW90 ZSAgPSBuOworISAgICAgICBlbHNlIGlmIChvYyA9PSAnUicpICpwUmVwb3J0ID0gbjsKKyEgICAg ICAgZWxzZSBpZiAob2MgPT0gJ3QnKSAqcHRvdWNoICA9IG47CisgICAgICAgIGVsc2UgZ290byBi YWRhcmc7CisgICAgICB9CisgICAgfQorLS0tIDE1MiwyMjkgLS0tLQorICAvKiBieSB0aGUgb3Ro ZXIgcG9pbnRlcnMgYXMgYXBwcm9wcmlhdGUuICAqcGhlbHAgYW5kICpwdmVyc2lvbiBhcmUgYm9v bGVhbiAgKi8KKyAgLyogZmxhZ3MgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBoZWxwIGFuZCB2ZXJz aW9uIG9wdGlvbnMgd2VyZSBzdXBwbGllZC4gICAgICovCisgIHsKKyEgICBjb25zdCB3Y2hhcl90 ICpzYXZlYXJnID0gYXJnOworICAgIGNoYXJzZXQgKmNoYXJzLCAqY2hhbmdlOworISAgIHdjaGFy X3Qgb2M7CisgICAgaW50IG47CisgIAorICAgICplcnJtc2cgPSAnXDAnOworKyAgIAorKyAgIGlm ICgqYXJnID09IEwnLScpICsrYXJnOworICAKKyEgICBpZiAoIXdjc2NtcChhcmcsIEwiaGVscCIp KSB7CisgICAgICAqcGhlbHAgPSAxOworICAgICAgcmV0dXJuOworICAgIH0KKyAgCishICAgaWYg KCF3Y3NjbXAoYXJnLCBMInZlcnNpb24iKSkgeworICAgICAgKnB2ZXJzaW9uID0gMTsKKyAgICAg IHJldHVybjsKKyAgICB9CisgIAorISAgIGlmICgqYXJnID09IEwnQicgfHwgKmFyZyA9PSBMJ1An IHx8ICphcmcgPT0gTCdRJyApIHsKKyEgICAgIGNoYXJzID0gICphcmcgPT0gTCdCJyAgPyAgYm9k eWNoYXJzICAgIDoKKyEgICAgICAgICAgICAgICphcmcgPT0gTCdQJyAgPyAgcHJvdGVjdGNoYXJz IDoKKyEgICAgICAgICAgIC8qICphcmcgPT0gTCdRJyAqLyAgcXVvdGVjaGFycyAgIDsKKyAgICAg ICsrYXJnOworISAgICAgaWYgKCphcmcgIT0gTCc9JyAgJiYgICphcmcgIT0gTCcrJyAgJiYgICph cmcgIT0gTCctJykgZ290byBiYWRhcmc7CisgICAgICBjaGFuZ2UgPSBwYXJzZWNoYXJzZXQoYXJn ICsgMSwgZXJybXNnKTsKKyAgICAgIGlmIChjaGFuZ2UpIHsKKyEgICAgICAgaWYgICAgICAoKmFy ZyA9PSBMJz0nKSAgIGNzc3dhcChjaGFycyxjaGFuZ2UpOworISAgICAgICBlbHNlIGlmICgqYXJn ID09IEwnKycpICAgY3NhZGQoY2hhcnMsY2hhbmdlLGVycm1zZyk7CishICAgICAgIGVsc2UgIC8q ICphcmcgPT0gTCctJyAqLyBjc3JlbW92ZShjaGFycyxjaGFuZ2UsZXJybXNnKTsKKyAgICAgICAg ZnJlZWNoYXJzZXQoY2hhbmdlKTsKKyAgICAgIH0KKyAgICAgIHJldHVybjsKKyAgICB9CisgIAor ISAgIGlmIChpc3dkaWdpdCgqYXJnKSkgeworICAgICAgaWYgKCFzdHJ0b3VkZWMoYXJnLCAmbikp IGdvdG8gYmFkYXJnOworICAgICAgaWYgKG4gPD0gOCkgKnBwcmVmaXggPSBuOworICAgICAgZWxz ZSAqcHdpZHRoID0gbjsKKyAgICB9CisgIAorICAgIGZvciAoOzspIHsKKyEgICAgIHdoaWxlIChp c3dkaWdpdCgqYXJnKSkgKythcmc7CisgICAgICBvYyA9ICphcmc7CisgICAgICBpZiAoIW9jKSBi cmVhazsKKyAgICAgIG4gPSAtMTsKKyAgICAgIGlmICghc3RydG91ZGVjKCsrYXJnLCAmbikpIGdv dG8gYmFkYXJnOworISAgICAgaWYgKCAgIG9jID09IEwnaCcgfHwgb2MgPT0gTCdwJyB8fCBvYyA9 PSBMJ3InCishICAgICAgICAgfHwgb2MgPT0gTCdzJyB8fCBvYyA9PSBMJ1QnIHx8IG9jID09IEwn dycpIHsKKyEgICAgICAgaWYgICAgICAob2MgPT0gTCdoJykgICAqcGhhbmcgICA9ICBuID49IDAg PyBuIDogIDE7CishICAgICAgIGVsc2UgaWYgKG9jID09IEwncCcpICAgKnBwcmVmaXggPSAgbjsK KyEgICAgICAgZWxzZSBpZiAob2MgPT0gTCdyJykgICAqcHJlcGVhdCA9ICBuID49IDAgPyBuIDog IDM7CishICAgICAgIGVsc2UgaWYgKG9jID09IEwncycpICAgKnBzdWZmaXggPSAgbjsKKyEgICAg ICAgZWxzZSBpZiAob2MgPT0gTCdUJykgICAqcFRhYiAgICA9ICBuID49IDAgPyBuIDogIDg7Cish ICAgICAgIGVsc2UgIC8qIG9jID09IEwndycgKi8gKnB3aWR0aCAgPSAgbiA+PSAwID8gbiA6IDc5 OworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIGlmIChuIDwgMCkgbiA9IDE7CisgICAg ICAgIGlmIChuID4gMSkgZ290byBiYWRhcmc7CishICAgICAgIGlmICAgICAgKG9jID09IEwnYicp ICpwYm9keSAgID0gbjsKKyEgICAgICAgZWxzZSBpZiAob2MgPT0gTCdjJykgKnBjYXAgICAgPSBu OworISAgICAgICBlbHNlIGlmIChvYyA9PSBMJ2QnKSAqcGRpdiAgICA9IG47CishICAgICAgIGVs c2UgaWYgKG9jID09IEwnRScpICpwRXJyICAgID0gbjsKKyEgICAgICAgZWxzZSBpZiAob2MgPT0g TCdlJykgKnBleHBlbCAgPSBuOworISAgICAgICBlbHNlIGlmIChvYyA9PSBMJ2YnKSAqcGZpdCAg ICA9IG47CishICAgICAgIGVsc2UgaWYgKG9jID09IEwnZycpICpwZ3Vlc3MgID0gbjsKKyEgICAg ICAgZWxzZSBpZiAob2MgPT0gTCdpJykgKnBpbnZpcyAgPSBuOworISAgICAgICBlbHNlIGlmIChv YyA9PSBMJ2onKSAqcGp1c3QgICA9IG47CishICAgICAgIGVsc2UgaWYgKG9jID09IEwnbCcpICpw bGFzdCAgID0gbjsKKyEgICAgICAgZWxzZSBpZiAob2MgPT0gTCdxJykgKnBxdW90ZSAgPSBuOwor ISAgICAgICBlbHNlIGlmIChvYyA9PSBMJ1InKSAqcFJlcG9ydCA9IG47CishICAgICAgIGVsc2Ug aWYgKG9jID09IEwndCcpICpwdG91Y2ggID0gbjsKKyAgICAgICAgZWxzZSBnb3RvIGJhZGFyZzsK KyAgICAgIH0KKyAgICB9CisqKioqKioqKioqKioqKioKKyoqKiAyNzcsMjg4ICoqKioKKyAgCisg IGJhZGFyZzoKKyAgCishICAgc3ByaW50ZihlcnJtc2csICJCYWQgYXJndW1lbnQ6ICUuKnNcbiIs IGVycm1zZ19zaXplIC0gMTYsIHNhdmVhcmcpOworICAgICpwaGVscCA9IDE7CisgIH0KKyAgCisg IAorISBzdGF0aWMgY2hhciAqKnJlYWRsaW5lcygKKyAgICBsaW5lcHJvcCAqKnBwcm9wcywgY29u c3QgY2hhcnNldCAqcHJvdGVjdGNoYXJzLAorICAgIGNvbnN0IGNoYXJzZXQgKnF1b3RlY2hhcnMs IGludCBUYWIsIGludCBpbnZpcywgaW50IHF1b3RlLCBlcnJtc2dfdCBlcnJtc2cKKyAgKQorLS0t IDIzMiwyNDMgLS0tLQorICAKKyAgYmFkYXJnOgorICAKKyEgICBzd3ByaW50ZihlcnJtc2csIGVy cm1zZ19zaXplLCBMIkJhZCBhcmd1bWVudDogJS4qc1xuIiwgZXJybXNnX3NpemUgLSAxNiwgc2F2 ZWFyZyk7CisgICAgKnBoZWxwID0gMTsKKyAgfQorICAKKyAgCishIHN0YXRpYyB3Y2hhcl90ICoq cmVhZGxpbmVzKAorICAgIGxpbmVwcm9wICoqcHByb3BzLCBjb25zdCBjaGFyc2V0ICpwcm90ZWN0 Y2hhcnMsCisgICAgY29uc3QgY2hhcnNldCAqcXVvdGVjaGFycywgaW50IFRhYiwgaW50IGludmlz LCBpbnQgcXVvdGUsIGVycm1zZ190IGVycm1zZworICApCisqKioqKioqKioqKioqKioKKyoqKiAz MDIsMzEwICoqKioKKyAgLyogaXQncyBub3QgTlVMTC4gIE9uIGZhaWx1cmUsIHJldHVybnMgTlVM TCBhbmQgc2V0cyAqcHByb3BzIHRvIE5VTEwuICAgKi8KKyAgeworICAgIGJ1ZmZlciAqY2J1ZiA9 IE5VTEwsICpsYnVmID0gTlVMTCwgKmxwYnVmID0gTlVMTDsKKyEgICBpbnQgYywgZW1wdHksIGJs YW5rLCBmaXJzdGxpbmUsIHFzb25seSwgb2xkcXNvbmx5ID0gMCwgdmxubGVuLCBpOworISAgIGNo YXIgY2gsICpsbiA9IE5VTEwsIG51bGxjaGFyID0gJ1wwJywgKm51bGxsaW5lID0gTlVMTCwgKnFw ZW5kLAorISAgICAgICAgKm9sZGxuID0gTlVMTCwgKm9sZHFwZW5kID0gTlVMTCwgKnAsICpvcCwg KnZsbiA9IE5VTEwsICoqbGluZXMgPSBOVUxMOworICAgIGxpbmVwcm9wIHZwcm9wID0geyAwLCAw LCAwLCAnXDAnIH0sIGlwcm9wID0geyAwLCAwLCAwLCAnXDAnIH07CisgIAorICAgIC8qIG9sZHFz b25seSwgb2xkbG4sIGFuZCBvbGRxdWVuZCBkb24ndCByZWFsbHkgbmVlZCB0byBiZSBpbml0aWFs aXplZC4gICAqLworLS0tIDI1NywyNjYgLS0tLQorICAvKiBpdCdzIG5vdCBOVUxMLiAgT24gZmFp bHVyZSwgcmV0dXJucyBOVUxMIGFuZCBzZXRzICpwcHJvcHMgdG8gTlVMTC4gICAqLworICB7Cisg ICAgYnVmZmVyICpjYnVmID0gTlVMTCwgKmxidWYgPSBOVUxMLCAqbHBidWYgPSBOVUxMOworISAg IHdpbnRfdCBjOworISAgIGludCBlbXB0eSwgYmxhbmssIGZpcnN0bGluZSwgcXNvbmx5LCBvbGRx c29ubHkgPSAwLCB2bG5sZW4sIGk7CishICAgd2NoYXJfdCAqbG4gPSBOVUxMLCBudWxsY2hhciA9 IEwnXDAnLCAqbnVsbGxpbmUgPSBOVUxMLCAqcXBlbmQsIAorISAgICAgKm9sZGxuID0gTlVMTCwg Km9sZHFwZW5kID0gTlVMTCwgKnAsICpvcCwgKnZsbiA9IE5VTEwsICoqbGluZXMgPSBOVUxMOwor ICAgIGxpbmVwcm9wIHZwcm9wID0geyAwLCAwLCAwLCAnXDAnIH0sIGlwcm9wID0geyAwLCAwLCAw LCAnXDAnIH07CisgIAorICAgIC8qIG9sZHFzb25seSwgb2xkbG4sIGFuZCBvbGRxdWVuZCBkb24n dCByZWFsbHkgbmVlZCB0byBiZSBpbml0aWFsaXplZC4gICAqLworKioqKioqKioqKioqKioqCisq KiogMzE2LDMzNSAqKioqCisgIAorICAgICpwcHJvcHMgPSBOVUxMOworICAKKyEgICBjYnVmID0g bmV3YnVmZmVyKHNpemVvZiAoY2hhciksIGVycm1zZyk7CisgICAgaWYgKCplcnJtc2cpIGdvdG8g cmxjbGVhbnVwOworISAgIGxidWYgPSBuZXdidWZmZXIoc2l6ZW9mIChjaGFyICopLCBlcnJtc2cp OworICAgIGlmICgqZXJybXNnKSBnb3RvIHJsY2xlYW51cDsKKyAgICBscGJ1ZiA9IG5ld2J1ZmZl cihzaXplb2YgKGxpbmVwcm9wKSwgZXJybXNnKTsKKyAgICBpZiAoKmVycm1zZykgZ290byBybGNs ZWFudXA7CisgIAorICAgIGZvciAoZW1wdHkgPSBibGFuayA9IGZpcnN0bGluZSA9IDE7ICA7ICAp IHsKKyEgICAgIGMgPSBnZXRjaGFyKCk7CishICAgICBpZiAoYyA9PSBFT0YpIGJyZWFrOworISAg ICAgKih1bnNpZ25lZCBjaGFyICopJmNoID0gYzsKKyEgICAgIGlmIChjaCA9PSAnXG4nKSB7Cisg ICAgICAgIGlmIChibGFuaykgeworISAgICAgICAgIHVuZ2V0YyhjLHN0ZGluKTsKKyAgICAgICAg ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBhZGRpdGVtKGNidWYsICZudWxsY2hhciwgZXJy bXNnKTsKKy0tLSAyNzIsMjk2IC0tLS0KKyAgCisgICAgKnBwcm9wcyA9IE5VTEw7CisgIAorISAg IGNidWYgPSBuZXdidWZmZXIoc2l6ZW9mICh3Y2hhcl90KSwgZXJybXNnKTsKKyAgICBpZiAoKmVy cm1zZykgZ290byBybGNsZWFudXA7CishICAgbGJ1ZiA9IG5ld2J1ZmZlcihzaXplb2YgKHdjaGFy X3QgKiksIGVycm1zZyk7CisgICAgaWYgKCplcnJtc2cpIGdvdG8gcmxjbGVhbnVwOworICAgIGxw YnVmID0gbmV3YnVmZmVyKHNpemVvZiAobGluZXByb3ApLCBlcnJtc2cpOworICAgIGlmICgqZXJy bXNnKSBnb3RvIHJsY2xlYW51cDsKKyAgCisgICAgZm9yIChlbXB0eSA9IGJsYW5rID0gZmlyc3Rs aW5lID0gMTsgIDsgICkgeworISAgICAgYyA9IGdldHdjaGFyKCk7CishICAgICBpZiAoYyA9PSBX RU9GKSB7CishICAgICAgIGlmIChlcnJubyA9PSBFSUxTRVEpIHsKKyEgICAgICAgCXdjc2NweShl cnJtc2csIEwiSW52YWxpZCBtdWx0aWJ5dGUgc2VxdWVuY2UgaW4gaW5wdXRcbiIpOworISAJZ290 byBybGNsZWFudXA7CishICAgICAgIH0KKyEgICAgICAgYnJlYWs7CishICAgICB9CishICAgICBp ZiAoYyA9PSBMJ1xuJykgeworICAgICAgICBpZiAoYmxhbmspIHsKKyEgICAgICAgICB1bmdldHdj KGMsc3RkaW4pOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGFkZGl0ZW0o Y2J1ZiwgJm51bGxjaGFyLCBlcnJtc2cpOworKioqKioqKioqKioqKioqCisqKiogMzM4LDM0NiAq KioqCisgICAgICAgIGlmICgqZXJybXNnKSBnb3RvIHJsY2xlYW51cDsKKyAgICAgICAgaWYgKHF1 b3RlKSB7CisgICAgICAgICAgZm9yIChxcGVuZCA9IGxuOyAgKnFwZW5kICYmIGNzbWVtYmVyKCpx cGVuZCwgcXVvdGVjaGFycyk7ICArK3FwZW5kKTsKKyEgICAgICAgICBmb3IgKHAgPSBxcGVuZDsg ICpwID09ICcgJyB8fCBjc21lbWJlcigqcCwgcXVvdGVjaGFycyk7ICArK3ApOworISAgICAgICAg IHFzb25seSA9ICAqcCA9PSAnXDAnOworISAgICAgICAgIHdoaWxlIChxcGVuZCA+IGxuICYmIHFw ZW5kWy0xXSA9PSAnICcpIC0tcXBlbmQ7CisgICAgICAgICAgaWYgKCFmaXJzdGxpbmUpIHsKKyAg ICAgICAgICAgIGZvciAocCA9IGxuLCBvcCA9IG9sZGxuOworICAgICAgICAgICAgICAgICBwIDwg cXBlbmQgJiYgb3AgPCBvbGRxcGVuZCAmJiAqcCA9PSAqb3A7CistLS0gMjk5LDMwNyAtLS0tCisg ICAgICAgIGlmICgqZXJybXNnKSBnb3RvIHJsY2xlYW51cDsKKyAgICAgICAgaWYgKHF1b3RlKSB7 CisgICAgICAgICAgZm9yIChxcGVuZCA9IGxuOyAgKnFwZW5kICYmIGNzbWVtYmVyKCpxcGVuZCwg cXVvdGVjaGFycyk7ICArK3FwZW5kKTsKKyEgICAgICAgICBmb3IgKHAgPSBxcGVuZDsgICpwID09 IEwnICcgfHwgY3NtZW1iZXIoKnAsIHF1b3RlY2hhcnMpOyAgKytwKTsKKyEgICAgICAgICBxc29u bHkgPSAgKCpwID09IEwnXDAnKTsKKyEgICAgICAgICB3aGlsZSAocXBlbmQgPiBsbiAmJiBxcGVu ZFstMV0gPT0gTCcgJykgLS1xcGVuZDsKKyAgICAgICAgICBpZiAoIWZpcnN0bGluZSkgeworICAg ICAgICAgICAgZm9yIChwID0gbG4sIG9wID0gb2xkbG47CisgICAgICAgICAgICAgICAgIHAgPCBx cGVuZCAmJiBvcCA8IG9sZHFwZW5kICYmICpwID09ICpvcDsKKyoqKioqKioqKioqKioqKgorKioq IDM0OCwzNzAgKioqKgorICAgICAgICAgICAgaWYgKCEocCA9PSBxcGVuZCAmJiBvcCA9PSBvbGRx cGVuZCkpIHsKKyAgICAgICAgICAgICAgaWYgKCFpbnZpcyAmJiAob2xkcXNvbmx5IHx8IHFzb25s eSkpIHsKKyAgICAgICAgICAgICAgICBpZiAob2xkcXNvbmx5KSB7CishICAgICAgICAgICAgICAg ICAqb3AgPSAnXDAnOworICAgICAgICAgICAgICAgICAgb2xkcXBlbmQgPSBvcDsKKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHFzb25seSkgeworISAgICAgICAgICAgICAg ICAgKnAgPSAnXDAnOworICAgICAgICAgICAgICAgICAgcXBlbmQgPSBwOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg ICAgICB2bG5sZW4gPSBwIC0gbG47CishICAgICAgICAgICAgICAgdmxuID0gbWFsbG9jKCh2bG5s ZW4gKyAxKSAqIHNpemVvZiAoY2hhcikpOworICAgICAgICAgICAgICAgIGlmICghdmxuKSB7Cish ICAgICAgICAgICAgICAgICBzdHJjcHkoZXJybXNnLG91dG9mbWVtKTsKKyAgICAgICAgICAgICAg ICAgIGdvdG8gcmxjbGVhbnVwOworICAgICAgICAgICAgICAgIH0KKyEgICAgICAgICAgICAgICBz dHJuY3B5KHZsbixsbix2bG5sZW4pOworISAgICAgICAgICAgICAgIHZsblt2bG5sZW5dID0gJ1ww JzsKKyAgICAgICAgICAgICAgICBhZGRpdGVtKGxidWYsICZ2bG4sIGVycm1zZyk7CisgICAgICAg ICAgICAgICAgaWYgKCplcnJtc2cpIGdvdG8gcmxjbGVhbnVwOworICAgICAgICAgICAgICAgIGFk ZGl0ZW0obHBidWYsICBpbnZpcyA/ICZpcHJvcCA6ICZ2cHJvcCwgIGVycm1zZyk7CistLS0gMzA5 LDMzMSAtLS0tCisgICAgICAgICAgICBpZiAoIShwID09IHFwZW5kICYmIG9wID09IG9sZHFwZW5k KSkgeworICAgICAgICAgICAgICBpZiAoIWludmlzICYmIChvbGRxc29ubHkgfHwgcXNvbmx5KSkg eworICAgICAgICAgICAgICAgIGlmIChvbGRxc29ubHkpIHsKKyEgICAgICAgICAgICAgICAgICpv cCA9IEwnXDAnOworICAgICAgICAgICAgICAgICAgb2xkcXBlbmQgPSBvcDsKKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHFzb25seSkgeworISAgICAgICAgICAgICAgICAg KnAgPSBMJ1wwJzsKKyAgICAgICAgICAgICAgICAgIHFwZW5kID0gcDsKKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg ICAgdmxubGVuID0gcCAtIGxuOworISAgICAgICAgICAgICAgIHZsbiA9IG1hbGxvYygodmxubGVu ICsgMSkgKiBzaXplb2YgKHdjaGFyX3QpKTsKKyAgICAgICAgICAgICAgICBpZiAoIXZsbikgewor ISAgICAgICAgICAgICAgICAgd2NzY3B5KGVycm1zZyxvdXRvZm1lbSk7CisgICAgICAgICAgICAg ICAgICBnb3RvIHJsY2xlYW51cDsKKyAgICAgICAgICAgICAgICB9CishICAgICAgICAgICAgICAg d2NzbmNweSh2bG4sIGxuLCB2bG5sZW4pOworISAgICAgICAgICAgICAgIHZsblt2bG5sZW5dID0g TCdcMCc7CisgICAgICAgICAgICAgICAgYWRkaXRlbShsYnVmLCAmdmxuLCBlcnJtc2cpOworICAg ICAgICAgICAgICAgIGlmICgqZXJybXNnKSBnb3RvIHJsY2xlYW51cDsKKyAgICAgICAgICAgICAg ICBhZGRpdGVtKGxwYnVmLCAgaW52aXMgPyAmaXByb3AgOiAmdnByb3AsICBlcnJtc2cpOworKioq KioqKioqKioqKioqCisqKiogMzg4LDQxNSAqKioqCisgICAgICB9CisgICAgICBlbHNlIHsKKyAg ICAgICAgaWYgKGVtcHR5KSB7CishICAgICAgICAgaWYgKGNzbWVtYmVyKGNoLCBwcm90ZWN0Y2hh cnMpKSB7CishICAgICAgICAgICB1bmdldGMoYyxzdGRpbik7CisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICB9CisgICAgICAgICAgZW1wdHkgPSAwOworICAgICAgICB9CishICAgICAgIGlm ICghY2gpIGNvbnRpbnVlOworISAgICAgICBpZiAoY2ggPT0gJ1x0JykgeworISAgICAgICAgIGNo ID0gJyAnOworICAgICAgICAgIGZvciAoaSA9IFRhYiAtIG51bWl0ZW1zKGNidWYpICUgVGFiOyAg aSA+IDA7ICAtLWkpIHsKKyEgICAgICAgICAgIGFkZGl0ZW0oY2J1ZiwgJmNoLCBlcnJtc2cpOwor ICAgICAgICAgICAgaWYgKCplcnJtc2cpIGdvdG8gcmxjbGVhbnVwOworICAgICAgICAgIH0KKyAg ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorISAgICAgICBpZiAoaXNzcGFjZShjKSkgY2gg PSAnICc7CishICAgICAgIGVsc2UgYmxhbmsgPSAwOworISAgICAgICBhZGRpdGVtKGNidWYsICZj aCwgZXJybXNnKTsKKyEgICAgICAgaWYgKCplcnJtc2cpIGdvdG8gcmxjbGVhbnVwOworICAgICAg fQorICAgIH0KKyEgCisgICAgaWYgKCFibGFuaykgeworICAgICAgYWRkaXRlbShjYnVmLCAmbnVs bGNoYXIsIGVycm1zZyk7CisgICAgICBpZiAoKmVycm1zZykgZ290byBybGNsZWFudXA7CistLS0g MzQ5LDM3OSAtLS0tCisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgaWYgKGVtcHR5KSB7 CishICAgICAgICAgaWYgKGNzbWVtYmVyKGMsIHByb3RlY3RjaGFycykpIHsKKyEgICAgICAgICAg IHVuZ2V0d2MoYyxzdGRpbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAg ICAgICAgZW1wdHkgPSAwOworICAgICAgICB9CishICAgICAgIGlmICghYykgY29udGludWU7Cish ICAgICAgIGlmIChjID09IEwnXHQnKSB7CishICAgICAgICAgYyA9IEwnICc7CisgICAgICAgICAg Zm9yIChpID0gVGFiIC0gbnVtaXRlbXMoY2J1ZikgJSBUYWI7ICBpID4gMDsgIC0taSkgeworISAg ICAgICAgICAgYWRkaXRlbShjYnVmLCAmYywgZXJybXNnKTsKKyAgICAgICAgICAgIGlmICgqZXJy bXNnKSBnb3RvIHJsY2xlYW51cDsKKyAgICAgICAgICB9CisgICAgICAgICAgY29udGludWU7Cisg ICAgICAgIH0KKyEgICAgICAgaWYgKGlzd3NwYWNlKGMpKSAKKyEgICAgICAgICBjID0gTCcgJzsK KyEgICAgICAgZWxzZSAKKyEgICAgICAgICBibGFuayA9IDA7CishICAgICAgIGFkZGl0ZW0oY2J1 ZiwgJmMsIGVycm1zZyk7CishICAgICAgIGlmICgqZXJybXNnKSAKKyEgICAgICAgICBnb3RvIHJs Y2xlYW51cDsKKyAgICAgIH0KKyAgICB9CishICAgCisgICAgaWYgKCFibGFuaykgeworICAgICAg YWRkaXRlbShjYnVmLCAmbnVsbGNoYXIsIGVycm1zZyk7CisgICAgICBpZiAoKmVycm1zZykgZ290 byBybGNsZWFudXA7CisqKioqKioqKioqKioqKioKKyoqKiA0NDksNDU1ICoqKioKKyAgCisgIAor ICBzdGF0aWMgdm9pZCBjb21wcmVzdWZsZW4oCishICAgY29uc3QgY2hhciAqIGNvbnN0ICpsaW5l cywgY29uc3QgY2hhciAqIGNvbnN0ICplbmRsaW5lLAorICAgIGNvbnN0IGNoYXJzZXQgKmJvZHlj aGFycywgaW50IGJvZHksIGludCBwcmUsIGludCBzdWYsIGludCAqcHByZSwgaW50ICpwc3VmCisg ICkKKyAgLyogbGluZXMgaXMgYW4gYXJyYXkgb2Ygc3RyaW5ncywgdXAgdG8gYnV0IG5vdCBpbmNs dWRpbmcgZW5kbGluZS4gICovCistLS0gNDEzLDQxOSAtLS0tCisgIAorICAKKyAgc3RhdGljIHZv aWQgY29tcHJlc3VmbGVuKAorISAgIGNvbnN0IHdjaGFyX3QgKiBjb25zdCAqbGluZXMsIGNvbnN0 IHdjaGFyX3QgKiBjb25zdCAqZW5kbGluZSwKKyAgICBjb25zdCBjaGFyc2V0ICpib2R5Y2hhcnMs IGludCBib2R5LCBpbnQgcHJlLCBpbnQgc3VmLCBpbnQgKnBwcmUsIGludCAqcHN1ZgorICApCisg IC8qIGxpbmVzIGlzIGFuIGFycmF5IG9mIHN0cmluZ3MsIHVwIHRvIGJ1dCBub3QgaW5jbHVkaW5n IGVuZGxpbmUuICAqLworKioqKioqKioqKioqKioqCisqKiogNDU3LDQ2NSAqKioqCisgIC8qIGxp bmVzIGluIGxpbmVzLiAgQXNzdW1lcyB0aGF0IHRoZXkgaGF2ZSBhbHJlYWR5IGJlZW4gZGV0ZXJt aW5lZCAqLworICAvKiB0byBiZSBhdCBsZWFzdCBwcmUgYW5kIHN1Zi4gIGVuZGxpbmUgbXVzdCBu b3QgZXF1YWwgbGluZXMuICAgICAgKi8KKyAgeworISAgIGNvbnN0IGNoYXIgKnN0YXJ0LCAqZW5k LCAqa25vd25zdGFydCwgKiBjb25zdCAqbGluZSwgKnAxLCAqcDIsICprbm93bmVuZCwKKyAgICAg ICAgICAgICAgICprbm93bnN0YXJ0MjsKKyEgCisgICAgc3RhcnQgPSAqbGluZXM7CisgICAgZW5k ID0ga25vd25zdGFydCA9IHN0YXJ0ICsgcHJlOworICAgIGlmIChib2R5KQorLS0tIDQyMSw0Mjkg LS0tLQorICAvKiBsaW5lcyBpbiBsaW5lcy4gIEFzc3VtZXMgdGhhdCB0aGV5IGhhdmUgYWxyZWFk eSBiZWVuIGRldGVybWluZWQgKi8KKyAgLyogdG8gYmUgYXQgbGVhc3QgcHJlIGFuZCBzdWYuICBl bmRsaW5lIG11c3Qgbm90IGVxdWFsIGxpbmVzLiAgICAgICovCisgIHsKKyEgICBjb25zdCB3Y2hh cl90ICpzdGFydCwgKmVuZCwgKmtub3duc3RhcnQsICogY29uc3QgKmxpbmUsICpwMSwgKnAyLCAq a25vd25lbmQsCisgICAgICAgICAgICAgICAqa25vd25zdGFydDI7CishICAgICAgICAgICAgCisg ICAgc3RhcnQgPSAqbGluZXM7CisgICAgZW5kID0ga25vd25zdGFydCA9IHN0YXJ0ICsgcHJlOwor ICAgIGlmIChib2R5KQorKioqKioqKioqKioqKioqCisqKiogNDc0LDQ4MCAqKioqCisgICAgfQor ICAgIGlmIChib2R5KQorICAgICAgZm9yIChwMSA9IGVuZDsgIHAxID4ga25vd25zdGFydDsgICkK KyEgICAgICAgaWYgKCotLXAxICE9ICcgJykgeworICAgICAgICAgIGlmIChjc21lbWJlcigqcDEs IGJvZHljaGFycykpCisgICAgICAgICAgICBlbmQgPSBwMTsKKyAgICAgICAgICBlbHNlCistLS0g NDM4LDQ0NCAtLS0tCisgICAgfQorICAgIGlmIChib2R5KQorICAgICAgZm9yIChwMSA9IGVuZDsg IHAxID4ga25vd25zdGFydDsgICkKKyEgICAgICAgaWYgKCotLXAxICE9IEwnICcpIHsKKyAgICAg ICAgICBpZiAoY3NtZW1iZXIoKnAxLCBib2R5Y2hhcnMpKQorICAgICAgICAgICAgZW5kID0gcDE7 CisgICAgICAgICAgZWxzZQorKioqKioqKioqKioqKioqCisqKiogNTAxLDUxOCAqKioqCisgICAg fQorICAgIGlmIChib2R5KSB7CisgICAgICBmb3IgKHAxID0gc3RhcnQ7CishICAgICAgICAgIHN0 YXJ0IDwga25vd25lbmQgJiYgKCpzdGFydCA9PSAnICcgfHwgY3NtZW1iZXIoKnN0YXJ0LCBib2R5 Y2hhcnMpKTsKKyAgICAgICAgICAgKytzdGFydCk7CishICAgICBpZiAoc3RhcnQgPiBwMSAmJiBz dGFydFstMV0gPT0gJyAnKSAtLXN0YXJ0OworICAgIH0KKyAgICBlbHNlCishICAgICB3aGlsZSAo ZW5kIC0gc3RhcnQgPj0gMiAmJiAqc3RhcnQgPT0gJyAnICYmIHN0YXJ0WzFdID09ICcgJykgKytz dGFydDsKKyAgICAqcHN1ZiA9IGVuZCAtIHN0YXJ0OworICB9CisgIAorICAKKyAgc3RhdGljIHZv aWQgZGVsaW1pdCgKKyEgICBjb25zdCBjaGFyICogY29uc3QgKmxpbmVzLCBjb25zdCBjaGFyICog Y29uc3QgKmVuZGxpbmUsCisgICAgY29uc3QgY2hhcnNldCAqYm9keWNoYXJzLCBpbnQgcmVwZWF0 LCBpbnQgYm9keSwgaW50IGRpdiwKKyAgICBpbnQgcHJlLCBpbnQgc3VmLCBsaW5lcHJvcCAqcHJv cHMKKyAgKQorLS0tIDQ2NSw0ODIgLS0tLQorICAgIH0KKyAgICBpZiAoYm9keSkgeworICAgICAg Zm9yIChwMSA9IHN0YXJ0OworISAgICAgICAgICBzdGFydCA8IGtub3duZW5kICYmICgqc3RhcnQg PT0gTCcgJyB8fCBjc21lbWJlcigqc3RhcnQsIGJvZHljaGFycykpOworICAgICAgICAgICArK3N0 YXJ0KTsKKyEgICAgIGlmIChzdGFydCA+IHAxICYmIHN0YXJ0Wy0xXSA9PSBMJyAnKSAtLXN0YXJ0 OworICAgIH0KKyAgICBlbHNlCishICAgICB3aGlsZSAoZW5kIC0gc3RhcnQgPj0gMiAmJiAqc3Rh cnQgPT0gTCcgJyAmJiBzdGFydFsxXSA9PSBMJyAnKSArK3N0YXJ0OworICAgICpwc3VmID0gZW5k IC0gc3RhcnQ7CisgIH0KKyAgCisgIAorICBzdGF0aWMgdm9pZCBkZWxpbWl0KAorISAgIGNvbnN0 IHdjaGFyX3QgKiBjb25zdCAqbGluZXMsIGNvbnN0IHdjaGFyX3QgKiBjb25zdCAqZW5kbGluZSwK KyAgICBjb25zdCBjaGFyc2V0ICpib2R5Y2hhcnMsIGludCByZXBlYXQsIGludCBib2R5LCBpbnQg ZGl2LAorICAgIGludCBwcmUsIGludCBzdWYsIGxpbmVwcm9wICpwcm9wcworICApCisqKioqKioq KioqKioqKioKKyoqKiA1MjMsNTMwICoqKioKKyAgLyogYW5kIGNvbXN1ZmxlbiBvZiB0aGUgbGlu ZXMgaW4gbGluZXMgaGF2ZSBhbHJlYWR5IGJlZW4gICAgICovCisgIC8qIGRldGVybWluZWQgdG8g YmUgYXQgbGVhc3QgcHJlIGFuZCBzdWYsIHJlc3BlY3RpdmVseS4gICAgICAqLworICB7CishICAg Y29uc3QgY2hhciAqIGNvbnN0ICpsaW5lLCAqZW5kLCAqcCwgKiBjb25zdCAqbmV4dGxpbmU7Cish ICAgY2hhciByYzsKKyAgICBsaW5lcHJvcCAqcHJvcCwgKm5leHRwcm9wOworICAgIGludCBhbnli b2RpbGVzcyA9IDAsIHN0YXR1czsKKyAgCistLS0gNDg3LDQ5NCAtLS0tCisgIC8qIGFuZCBjb21z dWZsZW4gb2YgdGhlIGxpbmVzIGluIGxpbmVzIGhhdmUgYWxyZWFkeSBiZWVuICAgICAqLworICAv KiBkZXRlcm1pbmVkIHRvIGJlIGF0IGxlYXN0IHByZSBhbmQgc3VmLCByZXNwZWN0aXZlbHkuICAg ICAgKi8KKyAgeworISAgIGNvbnN0IHdjaGFyX3QgKiBjb25zdCAqbGluZSwgKmVuZCwgKnAsICog Y29uc3QgKm5leHRsaW5lOworISAgIHdjaGFyX3QgcmM7CisgICAgbGluZXByb3AgKnByb3AsICpu ZXh0cHJvcDsKKyAgICBpbnQgYW55Ym9kaWxlc3MgPSAwLCBzdGF0dXM7CisgIAorKioqKioqKioq KioqKioqCisqKiogNTQ1LDU1MiAqKioqCisgICAgICBmb3IgKGVuZCA9ICpsaW5lOyAgKmVuZDsg ICsrZW5kKTsKKyAgICAgIGVuZCAtPSBzdWY7CisgICAgICBwID0gKmxpbmUgKyBwcmU7CishICAg ICByYyA9ICBwIDwgZW5kICA/ICAqcCAgOiAgJyAnOworISAgICAgaWYgKHJjICE9ICcgJyAmJiAo IXJlcGVhdCB8fCBlbmQgLSBwIDwgcmVwZWF0KSkKKyAgICAgICAgcHJvcC0+ZmxhZ3MgJj0gfkxf Qk9ESUxFU1M7CisgICAgICBlbHNlCisgICAgICAgIHdoaWxlIChwIDwgZW5kKSB7CistLS0gNTA5 LDUxNiAtLS0tCisgICAgICBmb3IgKGVuZCA9ICpsaW5lOyAgKmVuZDsgICsrZW5kKTsKKyAgICAg IGVuZCAtPSBzdWY7CisgICAgICBwID0gKmxpbmUgKyBwcmU7CishICAgICByYyA9ICBwIDwgZW5k ICA/ICAqcCAgOiAgTCcgJzsKKyEgICAgIGlmIChyYyAhPSBMJyAnICYmICghcmVwZWF0IHx8IGVu ZCAtIHAgPCByZXBlYXQpKQorICAgICAgICBwcm9wLT5mbGFncyAmPSB+TF9CT0RJTEVTUzsKKyAg ICAgIGVsc2UKKyAgICAgICAgd2hpbGUgKHAgPCBlbmQpIHsKKyoqKioqKioqKioqKioqKgorKioq IDU4OSw1OTcgKioqKgorICAgIH0KKyAgCisgICAgbGluZSA9IGxpbmVzLCBwcm9wID0gcHJvcHM7 CishICAgc3RhdHVzID0gKCgqbGluZXMpW3ByZV0gPT0gJyAnKTsKKyAgICBkbyB7CishICAgICBp ZiAoKCgqbGluZSlbcHJlXSA9PSAnICcpID09IHN0YXR1cykKKyAgICAgICAgcHJvcC0+ZmxhZ3Mg fD0gTF9GSVJTVDsKKyAgICAgICsrbGluZSwgKytwcm9wOworICAgIH0gd2hpbGUgKGxpbmUgPCBl bmRsaW5lKTsKKy0tLSA1NTMsNTYxIC0tLS0KKyAgICB9CisgIAorICAgIGxpbmUgPSBsaW5lcywg cHJvcCA9IHByb3BzOworISAgIHN0YXR1cyA9ICgoKmxpbmVzKVtwcmVdID09IEwnICcpOworICAg IGRvIHsKKyEgICAgIGlmICgoKCpsaW5lKVtwcmVdID09IEwnICcpID09IHN0YXR1cykKKyAgICAg ICAgcHJvcC0+ZmxhZ3MgfD0gTF9GSVJTVDsKKyAgICAgICsrbGluZSwgKytwcm9wOworICAgIH0g d2hpbGUgKGxpbmUgPCBlbmRsaW5lKTsKKyoqKioqKioqKioqKioqKgorKioqIDU5OSw2MTIgKioq KgorICAKKyAgCisgIHN0YXRpYyB2b2lkIG1hcmtzdXBlcmYoCishICAgY29uc3QgY2hhciAqIGNv bnN0ICogbGluZXMsIGNvbnN0IGNoYXIgKiBjb25zdCAqIGVuZGxpbmUsIGxpbmVwcm9wICpwcm9w cworICApCisgIC8qIGxpbmVzIHBvaW50cyB0byB0aGUgZmlyc3QgbGluZSBvZiBhIHNlZ21lbnQs IGFuZCBlbmRsaW5lIHRvIG9uZSAgKi8KKyAgLyogbGluZSBiZXlvbmQgdGhlIGxhc3QgbGluZSBp biB0aGUgc2VnbWVudC4gIFNldHMgTF9TVVBFUkYgYml0cyBpbiAqLworICAvKiB0aGUgZmxhZ3Mg ZmllbGRzIG9mIHRoZSBwcm9wcyBhcnJheSB3aGVuZXZlciB0aGUgY29ycmVzcG9uZGluZyAgICov CisgIC8qIGxpbmUgaXMgc3VwZXJmbHVvdXMuICBMX0JPRElMRVNTIGJpdHMgbXVzdCBhbHJlYWR5 IGJlIHNldC4gICAgICAgKi8KKyAgeworISAgIGNvbnN0IGNoYXIgKiBjb25zdCAqbGluZSwgKnA7 CisgICAgbGluZXByb3AgKnByb3AsICptcHJvcCwgZHVtbXk7CisgICAgaW50IGluYm9keSwgbnVt LCBtbnVtOworICAKKy0tLSA1NjMsNTc2IC0tLS0KKyAgCisgIAorICBzdGF0aWMgdm9pZCBtYXJr c3VwZXJmKAorISAgIGNvbnN0IHdjaGFyX3QgKiBjb25zdCAqIGxpbmVzLCBjb25zdCB3Y2hhcl90 ICogY29uc3QgKiBlbmRsaW5lLCBsaW5lcHJvcCAqcHJvcHMKKyAgKQorICAvKiBsaW5lcyBwb2lu dHMgdG8gdGhlIGZpcnN0IGxpbmUgb2YgYSBzZWdtZW50LCBhbmQgZW5kbGluZSB0byBvbmUgICov CisgIC8qIGxpbmUgYmV5b25kIHRoZSBsYXN0IGxpbmUgaW4gdGhlIHNlZ21lbnQuICBTZXRzIExf U1VQRVJGIGJpdHMgaW4gKi8KKyAgLyogdGhlIGZsYWdzIGZpZWxkcyBvZiB0aGUgcHJvcHMgYXJy YXkgd2hlbmV2ZXIgdGhlIGNvcnJlc3BvbmRpbmcgICAqLworICAvKiBsaW5lIGlzIHN1cGVyZmx1 b3VzLiAgTF9CT0RJTEVTUyBiaXRzIG11c3QgYWxyZWFkeSBiZSBzZXQuICAgICAgICovCisgIHsK KyEgICBjb25zdCB3Y2hhcl90ICogY29uc3QgKmxpbmUsICpwOworICAgIGxpbmVwcm9wICpwcm9w LCAqbXByb3AsIGR1bW15OworICAgIGludCBpbmJvZHksIG51bSwgbW51bTsKKyAgCisqKioqKioq KioqKioqKioKKyoqKiA2MTksNjI1ICoqKioKKyAgICBmb3IgKGxpbmUgPSBsaW5lcywgcHJvcCA9 IHByb3BzOyAgbGluZSA8IGVuZGxpbmU7ICArK2xpbmUsICsrcHJvcCkKKyAgICAgIGlmIChpc3Zh Y2FudChwcm9wKSkgeworICAgICAgICBmb3IgKG51bSA9IDAsIHAgPSAqbGluZTsgICpwOyAgKytw KQorISAgICAgICAgIGlmICgqcCAhPSAnICcpICsrbnVtOworICAgICAgICBpZiAoaW5ib2R5IHx8 IG51bSA8IG1udW0pCisgICAgICAgICAgbW51bSA9IG51bSwgbXByb3AgPSBwcm9wOworICAgICAg ICBpbmJvZHkgPSAwOworLS0tIDU4Myw1ODkgLS0tLQorICAgIGZvciAobGluZSA9IGxpbmVzLCBw cm9wID0gcHJvcHM7ICBsaW5lIDwgZW5kbGluZTsgICsrbGluZSwgKytwcm9wKQorICAgICAgaWYg KGlzdmFjYW50KHByb3ApKSB7CisgICAgICAgIGZvciAobnVtID0gMCwgcCA9ICpsaW5lOyAgKnA7 ICArK3ApCishICAgICAgICAgaWYgKCpwICE9IEwnICcpICsrbnVtOworICAgICAgICBpZiAoaW5i b2R5IHx8IG51bSA8IG1udW0pCisgICAgICAgICAgbW51bSA9IG51bSwgbXByb3AgPSBwcm9wOwor ICAgICAgICBpbmJvZHkgPSAwOworKioqKioqKioqKioqKioqCisqKiogNjMxLDYzNyAqKioqCisg IAorICAKKyAgc3RhdGljIHZvaWQgc2V0YWZmaXhlcygKKyEgICBjb25zdCBjaGFyICogY29uc3Qg KmlubGluZXMsIGNvbnN0IGNoYXIgKiBjb25zdCAqZW5kbGluZSwKKyAgICBjb25zdCBsaW5lcHJv cCAqcHJvcHMsIGNvbnN0IGNoYXJzZXQgKmJvZHljaGFycywKKyAgICBjb25zdCBjaGFyc2V0ICpx dW90ZWNoYXJzLCBpbnQgaGFuZywgaW50IGJvZHksIGludCBxdW90ZSwKKyAgICBpbnQgKnBhZnAs IGludCAqcGZzLCBpbnQgKnBwcmVmaXgsIGludCAqcHN1ZmZpeAorLS0tIDU5NSw2MDEgLS0tLQor ICAKKyAgCisgIHN0YXRpYyB2b2lkIHNldGFmZml4ZXMoCishICAgY29uc3Qgd2NoYXJfdCAqIGNv bnN0ICppbmxpbmVzLCBjb25zdCB3Y2hhcl90ICogY29uc3QgKmVuZGxpbmUsCisgICAgY29uc3Qg bGluZXByb3AgKnByb3BzLCBjb25zdCBjaGFyc2V0ICpib2R5Y2hhcnMsCisgICAgY29uc3QgY2hh cnNldCAqcXVvdGVjaGFycywgaW50IGhhbmcsIGludCBib2R5LCBpbnQgcXVvdGUsCisgICAgaW50 ICpwYWZwLCBpbnQgKnBmcywgaW50ICpwcHJlZml4LCBpbnQgKnBzdWZmaXgKKyoqKioqKioqKioq KioqKgorKioqIDY0NCw2NTAgKioqKgorICAvKiBkZWZhdWx0IHZhbHVlIGFzIHNwZWNpZmllZCBp biAicGFyLmRvYyIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHsKKyAgICBpbnQg bnVtaW4sIHByZSwgc3VmOworISAgIGNvbnN0IGNoYXIgKnA7CisgIAorICAgIG51bWluID0gZW5k bGluZSAtIGlubGluZXM7CisgIAorLS0tIDYwOCw2MTQgLS0tLQorICAvKiBkZWZhdWx0IHZhbHVl IGFzIHNwZWNpZmllZCBpbiAicGFyLmRvYyIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICov CisgIHsKKyAgICBpbnQgbnVtaW4sIHByZSwgc3VmOworISAgIGNvbnN0IHdjaGFyX3QgKnA7Cisg IAorICAgIG51bWluID0gZW5kbGluZSAtIGlubGluZXM7CisgIAorKioqKioqKioqKioqKioqCisq KiogNjY2LDY3NiAqKioqCisgIH0KKyAgCisgIAorISBzdGF0aWMgdm9pZCBmcmVlbGluZXMoY2hh ciAqKmxpbmVzKQorICAvKiBGcmVlcyB0aGUgZWxlbWVudHMgb2YgbGluZXMsIGFuZCBsaW5lcyBp dHNlbGYuICovCisgIC8qIGxpbmVzIGlzIGEgTlVMTC10ZXJtaW5hdGVkIGFycmF5IG9mIHN0cmlu Z3MuICAgKi8KKyAgeworISAgIGNoYXIgKipsaW5lOworICAKKyAgICBmb3IgKGxpbmUgPSBsaW5l czsgICpsaW5lOyAgKytsaW5lKQorICAgICAgZnJlZSgqbGluZSk7CistLS0gNjMwLDY0MCAtLS0t CisgIH0KKyAgCisgIAorISBzdGF0aWMgdm9pZCBmcmVlbGluZXMod2NoYXJfdCAqKmxpbmVzKQor ICAvKiBGcmVlcyB0aGUgZWxlbWVudHMgb2YgbGluZXMsIGFuZCBsaW5lcyBpdHNlbGYuICovCisg IC8qIGxpbmVzIGlzIGEgTlVMTC10ZXJtaW5hdGVkIGFycmF5IG9mIHN0cmluZ3MuICAgKi8KKyAg eworISAgIHdjaGFyX3QgKipsaW5lOworICAKKyAgICBmb3IgKGxpbmUgPSBsaW5lczsgICpsaW5l OyAgKytsaW5lKQorICAgICAgZnJlZSgqbGluZSk7CisqKioqKioqKioqKioqKioKKyoqKiA2Nzgs NzQ1ICoqKioKKyAgICBmcmVlKGxpbmVzKTsKKyAgfQorICAKKy0gCisgIGludCBtYWluKGludCBh cmdjLCBjb25zdCBjaGFyICogY29uc3QgKmFyZ3YpCisgIHsKKyAgICBpbnQgaGVscCA9IDAsIHZl cnNpb24gPSAwLCBoYW5nID0gMCwgcHJlZml4ID0gLTEsIHJlcGVhdCA9IDAsIHN1ZmZpeCA9IC0x LAorICAgICAgICBUYWIgPSAxLCB3aWR0aCA9IDcyLCBib2R5ID0gMCwgY2FwID0gMCwgZGl2ID0g MCwgRXJyID0gMCwgZXhwZWwgPSAwLAorICAgICAgICBmaXQgPSAwLCBndWVzcyA9IDAsIGludmlz ID0gMCwganVzdCA9IDAsIGxhc3QgPSAwLCBxdW90ZSA9IDAsIFJlcG9ydCA9IDAsCisgICAgICAg IHRvdWNoID0gLTE7CishICAgaW50IHByZWZpeGJhaywgc3VmZml4YmFrLCBjLCBzYXdub25ibGFu aywgb3dlYmxhbmssIG4sIGksIGFmcCwgZnM7CisgICAgY2hhcnNldCAqYm9keWNoYXJzID0gTlVM TCwgKnByb3RlY3RjaGFycyA9IE5VTEwsICpxdW90ZWNoYXJzID0gTlVMTDsKKyEgICBjaGFyICpw YXJpbml0ID0gTlVMTCwgKmFyZywgKippbmxpbmVzID0gTlVMTCwgKiplbmRsaW5lLCAqKmZpcnN0 bGluZSwgKmVuZCwKKyEgICAgICAgICoqbmV4dGxpbmUsICoqb3V0bGluZXMgPSBOVUxMLCAqKmxp bmUsIGNoOworISAgIGNvbnN0IGNoYXIgKmVudiwgKiBjb25zdCB3aGl0ZWNoYXJzID0gIiBcZlxu XHJcdFx2IjsKKyAgICBlcnJtc2dfdCBlcnJtc2cgPSB7ICdcMCcgfTsKKyAgICBsaW5lcHJvcCAq cHJvcHMgPSBOVUxMLCAqZmlyc3Rwcm9wLCAqbmV4dHByb3A7CisgICAgRklMRSAqZXJyb3V0Owor ICAKKyAgLyogU2V0IHRoZSBjdXJyZW50IGxvY2FsZSBmcm9tIHRoZSBlbnZpcm9ubWVudDogKi8K KyAgCisgICAgc2V0bG9jYWxlKExDX0FMTCwiIik7CisgIAorICAvKiBQcm9jZXNzIGVudmlyb25t ZW50IHZhcmlhYmxlczogKi8KKyAgCisgICAgZW52ID0gZ2V0ZW52KCJQQVJCT0RZIik7CisgICAg aWYgKCFlbnYpIGVudiA9ICIiOworISAgIGJvZHljaGFycyA9IHBhcnNlY2hhcnNldChlbnYsZXJy bXNnKTsKKyAgICBpZiAoKmVycm1zZykgeworICAgICAgaGVscCA9IDE7CisgICAgICBnb3RvIHBh cmNsZWFudXA7CisgICAgfQorICAKKyAgICBlbnYgPSBnZXRlbnYoIlBBUlBST1RFQ1QiKTsKKyAg ICBpZiAoIWVudikgZW52ID0gIiI7CishICAgcHJvdGVjdGNoYXJzID0gcGFyc2VjaGFyc2V0KGVu dixlcnJtc2cpOworICAgIGlmICgqZXJybXNnKSB7CisgICAgICBoZWxwID0gMTsKKyAgICAgIGdv dG8gcGFyY2xlYW51cDsKKyAgICB9CisgIAorICAgIGVudiA9IGdldGVudigiUEFSUVVPVEUiKTsK KyAgICBpZiAoIWVudikgZW52ID0gIj4gIjsKKyEgICBxdW90ZWNoYXJzID0gcGFyc2VjaGFyc2V0 KGVudixlcnJtc2cpOworICAgIGlmICgqZXJybXNnKSB7CisgICAgICBoZWxwID0gMTsKKyAgICAg IGdvdG8gcGFyY2xlYW51cDsKKyAgICB9CisgIAorICAgIGVudiA9IGdldGVudigiUEFSSU5JVCIp OworICAgIGlmIChlbnYpIHsKKyEgICAgIHBhcmluaXQgPSBtYWxsb2MoKHN0cmxlbihlbnYpICsg MSkgKiBzaXplb2YgKGNoYXIpKTsKKyAgICAgIGlmICghcGFyaW5pdCkgeworISAgICAgICBzdHJj cHkoZXJybXNnLG91dG9mbWVtKTsKKyAgICAgICAgZ290byBwYXJjbGVhbnVwOworICAgICAgfQor ISAgICAgc3RyY3B5KHBhcmluaXQsZW52KTsKKyEgICAgIGFyZyA9IHN0cnRvayhwYXJpbml0LHdo aXRlY2hhcnMpOworICAgICAgd2hpbGUgKGFyZykgeworICAgICAgICBwYXJzZWFyZyhhcmcsICZo ZWxwLCAmdmVyc2lvbiwgYm9keWNoYXJzLCBwcm90ZWN0Y2hhcnMsCisgICAgICAgICAgICAgICAg IHF1b3RlY2hhcnMsICZoYW5nLCAmcHJlZml4LCAmcmVwZWF0LCAmc3VmZml4LCAmVGFiLAorICAg ICAgICAgICAgICAgICAmd2lkdGgsICZib2R5LCAmY2FwLCAmZGl2LCAmRXJyLCAmZXhwZWwsICZm aXQsICZndWVzcywKKyAgICAgICAgICAgICAgICAgJmludmlzLCAmanVzdCwgJmxhc3QsICZxdW90 ZSwgJlJlcG9ydCwgJnRvdWNoLCBlcnJtc2cgKTsKKyAgICAgICAgaWYgKCplcnJtc2cgfHwgaGVs cCB8fCB2ZXJzaW9uKSBnb3RvIHBhcmNsZWFudXA7CishICAgICAgIGFyZyA9IHN0cnRvayhOVUxM LHdoaXRlY2hhcnMpOworICAgICAgfQorICAgICAgZnJlZShwYXJpbml0KTsKKyAgICAgIHBhcmlu aXQgPSBOVUxMOworLS0tIDY0Miw3NTcgLS0tLQorICAgIGZyZWUobGluZXMpOworICB9CisgIAor ICBpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqIGNvbnN0ICphcmd2KQorICB7CisgICAg aW50IGhlbHAgPSAwLCB2ZXJzaW9uID0gMCwgaGFuZyA9IDAsIHByZWZpeCA9IC0xLCByZXBlYXQg PSAwLCBzdWZmaXggPSAtMSwKKyAgICAgICAgVGFiID0gMSwgd2lkdGggPSA3MiwgYm9keSA9IDAs IGNhcCA9IDAsIGRpdiA9IDAsIEVyciA9IDAsIGV4cGVsID0gMCwKKyAgICAgICAgZml0ID0gMCwg Z3Vlc3MgPSAwLCBpbnZpcyA9IDAsIGp1c3QgPSAwLCBsYXN0ID0gMCwgcXVvdGUgPSAwLCBSZXBv cnQgPSAwLAorICAgICAgICB0b3VjaCA9IC0xOworISAgIGludCBwcmVmaXhiYWssIHN1ZmZpeGJh aywgc2F3bm9uYmxhbmssIG93ZWJsYW5rLCBuLCBpLCBhZnAsIGZzOworICAgIGNoYXJzZXQgKmJv ZHljaGFycyA9IE5VTEwsICpwcm90ZWN0Y2hhcnMgPSBOVUxMLCAqcXVvdGVjaGFycyA9IE5VTEw7 CishICAgd2ludF90IGM7CishICAgd2NoYXJfdCAqc3RhdGU7CishICAgd2NoYXJfdCAqcGFyaW5p dCA9IE5VTEwsICphcmcsICoqaW5saW5lcyA9IE5VTEwsICoqZW5kbGluZSwgKipmaXJzdGxpbmUs ICplbmQsCishICAgICAqKm5leHRsaW5lLCAqKm91dGxpbmVzID0gTlVMTCwgKipsaW5lOworISAg IGNvbnN0IGNoYXIgKmVudjsKKyEgICB3Y2hhcl90ICp3ZW52ID0gTlVMTDsKKyEgICBjb25zdCB3 Y2hhcl90ICogY29uc3Qgd2hpdGVjaGFycyA9IEwiIFxmXG5cclx0XHYiOworICAgIGVycm1zZ190 IGVycm1zZyA9IHsgJ1wwJyB9OworICAgIGxpbmVwcm9wICpwcm9wcyA9IE5VTEwsICpmaXJzdHBy b3AsICpuZXh0cHJvcDsKKyAgICBGSUxFICplcnJvdXQ7CisrICAgY2hhciAqbGFuZ2luZm87Cisg IAorICAvKiBTZXQgdGhlIGN1cnJlbnQgbG9jYWxlIGZyb20gdGhlIGVudmlyb25tZW50OiAqLwor ICAKKyAgICBzZXRsb2NhbGUoTENfQUxMLCIiKTsKKysgICBsYW5naW5mbyA9IG5sX2xhbmdpbmZv KENPREVTRVQpOworKyAgIGlmICghc3RyY21wKGxhbmdpbmZvLCAiQU5TSV9YMy40LTE5NjgiKSkg eworKyAgICAgLy8gV2Ugd291bGQgbGlrZSB0byBmYWxsYmFjayBpbiBhbiA4IGJpdHMgZW5jb2Rp bmcsIGJ1dCBpdCBpcyBub3QgZWFzaWx5IHBvc3NpYmxlLgorKyAgICAgLy9zZXRsb2NhbGUoTENf Q1RZUEUsICJDIik7CisrICAgICAvL2xhbmdpbmZvID0gbmxfbGFuZ2luZm8oQ09ERVNFVCk7Cisr ICAgICBmd3ByaW50ZiggRXJyID8gc3RkZXJyIDogc3Rkb3V0LCAKKysgICAgICAgICBMIldhcm5p bmc6IExvY2FsZSBzZWVtcyBub3QgY29uZmlndXJlZFxuIik7CisrICAgfQorICAKKyAgLyogUHJv Y2VzcyBlbnZpcm9ubWVudCB2YXJpYWJsZXM6ICovCisgIAorICAgIGVudiA9IGdldGVudigiUEFS Qk9EWSIpOworICAgIGlmICghZW52KSBlbnYgPSAiIjsKKyEgICB3ZW52ID0gbWFsbG9jKChzdHJs ZW4oZW52KSArIDEpICogc2l6ZW9mICh3Y2hhcl90KSk7CishICAgaWYgKCF3ZW52KSB7CishICAg ICB3Y3NjcHkoZXJybXNnLG91dG9mbWVtKTsKKyEgICAgIGdvdG8gcGFyY2xlYW51cDsKKyEgICB9 CishICAgaWYgKDAgPiBtYnN0b3djcyh3ZW52LGVudiwgc3RybGVuKGVudikgKyAxKSkgeworISAg ICAgd2NzY3B5KGVycm1zZywgTCJJbnZhbGlkIG11bHRpYnl0ZSBzZXF1ZW5jZSBpbiBQQVJCT0RZ XG4iKTsKKyEgICAgIGdvdG8gcGFyY2xlYW51cDsKKyEgICB9CishICAgYm9keWNoYXJzID0gcGFy c2VjaGFyc2V0KHdlbnYsZXJybXNnKTsKKyAgICBpZiAoKmVycm1zZykgeworICAgICAgaGVscCA9 IDE7CisgICAgICBnb3RvIHBhcmNsZWFudXA7CisgICAgfQorKyAgIGZyZWUod2Vudik7CisrICAg d2VudiA9IE5VTEw7CisgIAorICAgIGVudiA9IGdldGVudigiUEFSUFJPVEVDVCIpOworICAgIGlm ICghZW52KSBlbnYgPSAiIjsKKyEgICB3ZW52ID0gbWFsbG9jKChzdHJsZW4oZW52KSArIDEpICog c2l6ZW9mICh3Y2hhcl90KSk7CishICAgaWYgKCF3ZW52KSB7CishICAgICB3Y3NjcHkoZXJybXNn LG91dG9mbWVtKTsKKyEgICAgIGdvdG8gcGFyY2xlYW51cDsKKyEgICB9CishICAgaWYgKDAgPiBt YnN0b3djcyh3ZW52LGVudiwgc3RybGVuKGVudikgKyAxKSkgeworISAgICAgd2NzY3B5KGVycm1z ZywgTCJJbnZhbGlkIG11bHRpYnl0ZSBzZXF1ZW5jZSBpbiBQQVJQUk9URUNUXG4iKTsKKyEgICAg IGdvdG8gcGFyY2xlYW51cDsKKyEgICB9CishICAgcHJvdGVjdGNoYXJzID0gcGFyc2VjaGFyc2V0 KHdlbnYsZXJybXNnKTsKKyAgICBpZiAoKmVycm1zZykgeworICAgICAgaGVscCA9IDE7CisgICAg ICBnb3RvIHBhcmNsZWFudXA7CisgICAgfQorKyAgIGZyZWUod2Vudik7CisrICAgd2VudiA9IE5V TEw7CisgIAorICAgIGVudiA9IGdldGVudigiUEFSUVVPVEUiKTsKKyAgICBpZiAoIWVudikgZW52 ID0gIj4gIjsKKyEgICB3ZW52ID0gbWFsbG9jKChzdHJsZW4oZW52KSArIDEpICogc2l6ZW9mICh3 Y2hhcl90KSk7CishICAgaWYgKCF3ZW52KSB7CishICAgICB3Y3NjcHkoZXJybXNnLG91dG9mbWVt KTsKKyEgICAgIGdvdG8gcGFyY2xlYW51cDsKKyEgICB9CishICAgaWYgKDAgPiBtYnN0b3djcyh3 ZW52LGVudiwgc3RybGVuKGVudikgKyAxKSkgeworISAgICAgd2NzY3B5KGVycm1zZywgTCJJbnZh bGlkIG11bHRpYnl0ZSBzZXF1ZW5jZSBpbiBQQVJRVU9URVxuIik7CishICAgICBnb3RvIHBhcmNs ZWFudXA7CishICAgfQorISAgIHF1b3RlY2hhcnMgPSBwYXJzZWNoYXJzZXQod2VudixlcnJtc2cp OworICAgIGlmICgqZXJybXNnKSB7CisgICAgICBoZWxwID0gMTsKKyAgICAgIGdvdG8gcGFyY2xl YW51cDsKKyAgICB9CisrICAgZnJlZSh3ZW52KTsKKysgICB3ZW52ID0gTlVMTDsKKyAgCisgICAg ZW52ID0gZ2V0ZW52KCJQQVJJTklUIik7CisgICAgaWYgKGVudikgeworISAgICAgcGFyaW5pdCA9 IG1hbGxvYygoc3RybGVuKGVudikgKyAxKSAqIHNpemVvZiAod2NoYXJfdCkpOworICAgICAgaWYg KCFwYXJpbml0KSB7CishICAgICAgIHdjc2NweShlcnJtc2csb3V0b2ZtZW0pOworICAgICAgICBn b3RvIHBhcmNsZWFudXA7CisgICAgICB9CishICAgICBpZiAoMCA+IG1ic3Rvd2NzKHBhcmluaXQs ZW52LCBzdHJsZW4oZW52KSArIDEpKSB7CishICAgICAgIHdjc2NweShlcnJtc2csIEwiSW52YWxp ZCBtdWx0aWJ5dGUgc2VxdWVuY2UgaW4gUEFSSU5JVFxuIik7CishICAgICAgIGdvdG8gcGFyY2xl YW51cDsKKyEgICAgIH0gICAgCishICAgICBhcmcgPSB3Y3N0b2socGFyaW5pdCwgd2hpdGVjaGFy cywgJnN0YXRlKTsKKyAgICAgIHdoaWxlIChhcmcpIHsKKyAgICAgICAgcGFyc2VhcmcoYXJnLCAm aGVscCwgJnZlcnNpb24sIGJvZHljaGFycywgcHJvdGVjdGNoYXJzLAorICAgICAgICAgICAgICAg ICBxdW90ZWNoYXJzLCAmaGFuZywgJnByZWZpeCwgJnJlcGVhdCwgJnN1ZmZpeCwgJlRhYiwKKyAg ICAgICAgICAgICAgICAgJndpZHRoLCAmYm9keSwgJmNhcCwgJmRpdiwgJkVyciwgJmV4cGVsLCAm Zml0LCAmZ3Vlc3MsCisgICAgICAgICAgICAgICAgICZpbnZpcywgJmp1c3QsICZsYXN0LCAmcXVv dGUsICZSZXBvcnQsICZ0b3VjaCwgZXJybXNnICk7CisgICAgICAgIGlmICgqZXJybXNnIHx8IGhl bHAgfHwgdmVyc2lvbikgZ290byBwYXJjbGVhbnVwOworISAgICAgICBhcmcgPSB3Y3N0b2soTlVM TCwgd2hpdGVjaGFycywgJnN0YXRlKTsKKyAgICAgIH0KKyAgICAgIGZyZWUocGFyaW5pdCk7Cisg ICAgICBwYXJpbml0ID0gTlVMTDsKKyoqKioqKioqKioqKioqKgorKioqIDc0OCw4MDQgKioqKgor ICAvKiBQcm9jZXNzIGNvbW1hbmQgbGluZSBhcmd1bWVudHM6ICovCisgIAorICAgIHdoaWxlICgq Kythcmd2KSB7CishICAgICBwYXJzZWFyZygqYXJndiwgJmhlbHAsICZ2ZXJzaW9uLCBib2R5Y2hh cnMsIHByb3RlY3RjaGFycywKKyAgICAgICAgICAgICAgIHF1b3RlY2hhcnMsICZoYW5nLCAmcHJl Zml4LCAmcmVwZWF0LCAmc3VmZml4LCAmVGFiLAorICAgICAgICAgICAgICAgJndpZHRoLCAmYm9k eSwgJmNhcCwgJmRpdiwgJkVyciwgJmV4cGVsLCAmZml0LCAmZ3Vlc3MsCisgICAgICAgICAgICAg ICAmaW52aXMsICZqdXN0LCAmbGFzdCwgJnF1b3RlLCAmUmVwb3J0LCAmdG91Y2gsIGVycm1zZyAp OworICAgICAgaWYgKCplcnJtc2cgfHwgaGVscCB8fCB2ZXJzaW9uKSBnb3RvIHBhcmNsZWFudXA7 CisgICAgfQorICAKKyAgICBpZiAoVGFiID09IDApIHsKKyEgICAgIHN0cmNweShlcnJtc2csICI8 VGFiPiBtdXN0IG5vdCBiZSAwLlxuIik7CisgICAgICBnb3RvIHBhcmNsZWFudXA7CisgICAgfQor ICAKKyAgICBpZiAodG91Y2ggPCAwKSB0b3VjaCA9IGZpdCB8fCBsYXN0OworICAgIHByZWZpeGJh ayA9IHByZWZpeDsKKyAgICBzdWZmaXhiYWsgPSBzdWZmaXg7CishIAorISAvKiBNYWluIGxvb3A6 ICovCishIAorICAgIGZvciAoc2F3bm9uYmxhbmsgPSBvd2VibGFuayA9IDA7ICA7ICApIHsKKyAg ICAgIGZvciAoOzspIHsKKyEgICAgICAgYyA9IGdldGNoYXIoKTsKKyEgICAgICAgaWYgKGMgPT0g RU9GKSBicmVhazsKKyEgICAgICAgKih1bnNpZ25lZCBjaGFyICopJmNoID0gYzsKKyEgICAgICAg aWYgKGV4cGVsICYmIGNoID09ICdcbicpIHsKKyAgICAgICAgICBvd2VibGFuayA9IHNhd25vbmJs YW5rOworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CishICAgICAgIGlmIChjc21lbWJl cihjaCwgcHJvdGVjdGNoYXJzKSkgeworICAgICAgICAgIHNhd25vbmJsYW5rID0gMTsKKyAgICAg ICAgICBpZiAob3dlYmxhbmspIHsKKyEgICAgICAgICAgIHB1dHMoIiIpOworICAgICAgICAgICAg b3dlYmxhbmsgPSAwOworICAgICAgICAgIH0KKyEgICAgICAgICB3aGlsZSAoY2ggIT0gJ1xuJykg eworISAgICAgICAgICAgcHV0Y2hhcihjKTsKKyEgICAgICAgICAgIGMgPSBnZXRjaGFyKCk7Cish ICAgICAgICAgICBpZiAoYyA9PSBFT0YpIGJyZWFrOworISAgICAgICAgICAgKih1bnNpZ25lZCBj aGFyICopJmNoID0gYzsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyEgICAgICAgaWYgKGNoICE9 ICdcbicpIGJyZWFrOyAgLyogc3Vic3VtZXMgdGhlIGNhc2UgdGhhdCBjID09IEVPRiAqLworISAg ICAgICBwdXRjaGFyKGMpOworICAgICAgfQorISAgICAgaWYgKGMgPT0gRU9GKSBicmVhazsKKyEg ICAgIHVuZ2V0YyhjLHN0ZGluKTsKKyAgCisgICAgICBpbmxpbmVzID0KKyAgICAgICAgcmVhZGxp bmVzKCZwcm9wcywgcHJvdGVjdGNoYXJzLCBxdW90ZWNoYXJzLCBUYWIsIGludmlzLCBxdW90ZSwg ZXJybXNnKTsKKyAgICAgIGlmICgqZXJybXNnKSBnb3RvIHBhcmNsZWFudXA7CishIAorISAgICAg Zm9yIChlbmRsaW5lID0gaW5saW5lczsgICplbmRsaW5lOyAgKytlbmRsaW5lKTsKKyAgICAgIGlm IChlbmRsaW5lID09IGlubGluZXMpIHsKKyAgICAgICAgZnJlZShpbmxpbmVzKTsKKyAgICAgICAg aW5saW5lcyA9IE5VTEw7CistLS0gNzYwLDgzMCAtLS0tCisgIC8qIFByb2Nlc3MgY29tbWFuZCBs aW5lIGFyZ3VtZW50czogKi8KKyAgCisgICAgd2hpbGUgKCorK2FyZ3YpIHsKKyEgICAgIGFyZyA9 IG1hbGxvYygoc3RybGVuKCphcmd2KSArIDEpICogc2l6ZW9mICh3Y2hhcl90KSk7CishICAgICBp ZiAoMCA+IG1ic3Rvd2NzKGFyZywgKmFyZ3YsIHN0cmxlbigqYXJndikgKyAxKSkgeworISAgICAg ICB3Y3NjcHkoZXJybXNnLCBMIkludmFsaWQgbXVsdGlieXRlIHNlcXVlbmNlIGluIGFyZ3VtZW50 XG4iKTsKKyEgICAgICAgZ290byBwYXJjbGVhbnVwOworISAgICAgfQorISAgICAgcGFyc2Vhcmco YXJnLCAmaGVscCwgJnZlcnNpb24sIGJvZHljaGFycywgcHJvdGVjdGNoYXJzLAorICAgICAgICAg ICAgICAgcXVvdGVjaGFycywgJmhhbmcsICZwcmVmaXgsICZyZXBlYXQsICZzdWZmaXgsICZUYWIs CisgICAgICAgICAgICAgICAmd2lkdGgsICZib2R5LCAmY2FwLCAmZGl2LCAmRXJyLCAmZXhwZWws ICZmaXQsICZndWVzcywKKyAgICAgICAgICAgICAgICZpbnZpcywgJmp1c3QsICZsYXN0LCAmcXVv dGUsICZSZXBvcnQsICZ0b3VjaCwgZXJybXNnICk7CisrICAgICBmcmVlKGFyZyk7CisgICAgICBp ZiAoKmVycm1zZyB8fCBoZWxwIHx8IHZlcnNpb24pIGdvdG8gcGFyY2xlYW51cDsKKyAgICB9Cisg IAorICAgIGlmIChUYWIgPT0gMCkgeworISAgICAgd2NzY3B5KGVycm1zZywgTCI8VGFiPiBtdXN0 IG5vdCBiZSAwLlxuIik7CisgICAgICBnb3RvIHBhcmNsZWFudXA7CisgICAgfQorICAKKyAgICBp ZiAodG91Y2ggPCAwKSB0b3VjaCA9IGZpdCB8fCBsYXN0OworICAgIHByZWZpeGJhayA9IHByZWZp eDsKKyAgICBzdWZmaXhiYWsgPSBzdWZmaXg7CishICAgCishICAgLyogTWFpbiBsb29wOiAqLwor ICAgIGZvciAoc2F3bm9uYmxhbmsgPSBvd2VibGFuayA9IDA7ICA7ICApIHsKKyAgICAgIGZvciAo OzspIHsKKyEgICAgICAgYyA9IGdldHdjaGFyKCk7CishICAgICAgIGlmIChjID09IFdFT0YpIHsK KyEgICAgICAgICBpZiAoZXJybm8gPT0gRUlMU0VRKSB7CishICAgICAgICAgICB3Y3NjcHkoZXJy bXNnLCBMIkludmFsaWQgbXVsdGlieXRlIHNlcXVlbmNlIGluIGlucHV0XG4iKTsKKyEgICAgICAg ICAgIGdvdG8gcGFyY2xlYW51cDsKKyEgICAgICAgICB9CishICAgICAgICAgYnJlYWs7CishICAg ICAgIH0KKyEgICAgICAgaWYgKGV4cGVsICYmIGMgPT0gTCdcbicpIHsKKyAgICAgICAgICBvd2Vi bGFuayA9IHNhd25vbmJsYW5rOworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CishICAg ICAgIGlmIChjc21lbWJlcihjLCBwcm90ZWN0Y2hhcnMpKSB7CisgICAgICAgICAgc2F3bm9uYmxh bmsgPSAxOworICAgICAgICAgIGlmIChvd2VibGFuaykgeworISAgICAgICAgICAgZnB1dHdjKEwn XG4nLCBzdGRvdXQpOworICAgICAgICAgICAgb3dlYmxhbmsgPSAwOworICAgICAgICAgIH0KKyEg ICAgICAgICB3aGlsZSAoYyAhPSBMJ1xuJykgeworISAgICAgICAgICAgcHV0d2NoYXIoYyk7Cish ICAgICAgICAgICBjID0gZ2V0d2NoYXIoKTsKKyEgICAgICAgICAgIGlmIChjID09IFdFT0YpIHsK KyEgICAgICAgICAgICAgaWYgKGVycm5vID09IEVJTFNFUSkgeworISAgICAgICAgICAgICAgIHdj c2NweShlcnJtc2csIEwiSW52YWxpZCBtdWx0aWJ5dGUgc2VxdWVuY2UgaW4gaW5wdXRcbiIpOwor ISAgICAgICAgICAgICAgIGdvdG8gcGFyY2xlYW51cDsKKyEgICAgICAgICAgICAgfQorISAgICAg ICAgICAgICBicmVhazsKKyEgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyEg ICAgICAgaWYgKGMgIT0gTCdcbicpIGJyZWFrOyAgLyogc3Vic3VtZXMgdGhlIGNhc2UgdGhhdCBj ID09IEVPRiAqLworISAgICAgICBwdXR3Y2hhcihjKTsKKyAgICAgIH0KKyEgICAgIGlmIChjID09 IFdFT0YpIGJyZWFrOworISAgICAgdW5nZXR3YyhjLHN0ZGluKTsKKyAgCisgICAgICBpbmxpbmVz ID0KKyAgICAgICAgcmVhZGxpbmVzKCZwcm9wcywgcHJvdGVjdGNoYXJzLCBxdW90ZWNoYXJzLCBU YWIsIGludmlzLCBxdW90ZSwgZXJybXNnKTsKKyAgICAgIGlmICgqZXJybXNnKSBnb3RvIHBhcmNs ZWFudXA7CishICAgICBmb3IgKGVuZGxpbmUgPSBpbmxpbmVzOyAgKmVuZGxpbmU7ICArK2VuZGxp bmUpIDsKKyAgICAgIGlmIChlbmRsaW5lID09IGlubGluZXMpIHsKKyAgICAgICAgZnJlZShpbmxp bmVzKTsKKyAgICAgICAgaW5saW5lcyA9IE5VTEw7CisqKioqKioqKioqKioqKioKKyoqKiA4MDcs ODQ0ICoqKioKKyAgCisgICAgICBzYXdub25ibGFuayA9IDE7CisgICAgICBpZiAob3dlYmxhbmsp IHsKKyEgICAgICAgcHV0cygiIik7CisgICAgICAgIG93ZWJsYW5rID0gMDsKKyAgICAgIH0KKyAg CishICAgICBkZWxpbWl0KChjb25zdCBjaGFyICogY29uc3QgKikgaW5saW5lcywKKyEgICAgICAg ICAgICAgKGNvbnN0IGNoYXIgKiBjb25zdCAqKSBlbmRsaW5lLAorICAgICAgICAgICAgICBib2R5 Y2hhcnMsIHJlcGVhdCwgYm9keSwgZGl2LCAwLCAwLCBwcm9wcyk7CisgIAorICAgICAgaWYgKGV4 cGVsKQorISAgICAgICBtYXJrc3VwZXJmKChjb25zdCBjaGFyICogY29uc3QgKikgaW5saW5lcywK KyEgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqIGNvbnN0ICopIGVuZGxpbmUsIHByb3Bz KTsKKyAgCisgICAgICBmaXJzdGxpbmUgPSBpbmxpbmVzLCBmaXJzdHByb3AgPSBwcm9wczsKKyAg ICAgIGRvIHsKKyAgICAgICAgaWYgKGlzYm9kaWxlc3MoZmlyc3Rwcm9wKSkgeworICAgICAgICAg IGlmICghaXNpbnZpcyhmaXJzdHByb3ApICYmICEoZXhwZWwgJiYgaXNzdXBlcmYoZmlyc3Rwcm9w KSkpIHsKKyAgICAgICAgICAgIGZvciAoZW5kID0gKmZpcnN0bGluZTsgICplbmQ7ICArK2VuZCk7 CishICAgICAgICAgICBpZiAoIXJlcGVhdCB8fCAoZmlyc3Rwcm9wLT5yYyA9PSAnICcgJiYgIWZp cnN0cHJvcC0+cykpIHsKKyEgICAgICAgICAgICAgd2hpbGUgKGVuZCA+ICpmaXJzdGxpbmUgJiYg ZW5kWy0xXSA9PSAnICcpIC0tZW5kOworISAgICAgICAgICAgICAqZW5kID0gJ1wwJzsKKyEgICAg ICAgICAgICAgcHV0cygqZmlyc3RsaW5lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs c2UgeworICAgICAgICAgICAgICBuID0gd2lkdGggLSBmaXJzdHByb3AtPnAgLSBmaXJzdHByb3At PnM7CisgICAgICAgICAgICAgIGlmIChuIDwgMCkgeworISAgICAgICAgICAgICAgIHNwcmludGYo ZXJybXNnLGltcG9zc2liaWxpdHksNSk7CisgICAgICAgICAgICAgICAgZ290byBwYXJjbGVhbnVw OworICAgICAgICAgICAgICB9CishICAgICAgICAgICAgIHByaW50ZigiJS4qcyIsIGZpcnN0cHJv cC0+cCwgKmZpcnN0bGluZSk7CisgICAgICAgICAgICAgIGZvciAoaSA9IG47ICBpOyAgLS1pKQor ISAgICAgICAgICAgICAgIHB1dGNoYXIoKih1bnNpZ25lZCBjaGFyICopJmZpcnN0cHJvcC0+cmMp OworISAgICAgICAgICAgICBwdXRzKGVuZCAtIGZpcnN0cHJvcC0+cyk7CisgICAgICAgICAgICB9 CisgICAgICAgICAgfQorICAgICAgICAgICsrZmlyc3RsaW5lLCArK2ZpcnN0cHJvcDsKKy0tLSA4 MzMsODcxIC0tLS0KKyAgCisgICAgICBzYXdub25ibGFuayA9IDE7CisgICAgICBpZiAob3dlYmxh bmspIHsKKyEgICAgICAgZnB1dHdjKEwnXG4nLCBzdGRvdXQpOworICAgICAgICBvd2VibGFuayA9 IDA7CisgICAgICB9CisgIAorISAgICAgZGVsaW1pdCgoY29uc3Qgd2NoYXJfdCAqIGNvbnN0ICop IGlubGluZXMsCishICAgICAgICAgICAgIChjb25zdCB3Y2hhcl90ICogY29uc3QgKikgZW5kbGlu ZSwKKyAgICAgICAgICAgICAgYm9keWNoYXJzLCByZXBlYXQsIGJvZHksIGRpdiwgMCwgMCwgcHJv cHMpOworICAKKyAgICAgIGlmIChleHBlbCkKKyEgICAgICAgbWFya3N1cGVyZigoY29uc3Qgd2No YXJfdCAqIGNvbnN0ICopIGlubGluZXMsCishICAgICAgICAgICAgICAgICAgKGNvbnN0IHdjaGFy X3QgKiBjb25zdCAqKSBlbmRsaW5lLCBwcm9wcyk7CisgIAorICAgICAgZmlyc3RsaW5lID0gaW5s aW5lcywgZmlyc3Rwcm9wID0gcHJvcHM7CisrIAorICAgICAgZG8geworICAgICAgICBpZiAoaXNi b2RpbGVzcyhmaXJzdHByb3ApKSB7CisgICAgICAgICAgaWYgKCFpc2ludmlzKGZpcnN0cHJvcCkg JiYgIShleHBlbCAmJiBpc3N1cGVyZihmaXJzdHByb3ApKSkgeworICAgICAgICAgICAgZm9yIChl bmQgPSAqZmlyc3RsaW5lOyAgKmVuZDsgICsrZW5kKTsKKyEgICAgICAgICAgIGlmICghcmVwZWF0 IHx8IChmaXJzdHByb3AtPnJjID09IEwnICcgJiYgIWZpcnN0cHJvcC0+cykpIHsKKyEgICAgICAg ICAgICAgd2hpbGUgKGVuZCA+ICpmaXJzdGxpbmUgJiYgZW5kWy0xXSA9PSBMJyAnKSAtLWVuZDsK KyEgICAgICAgICAgICAgKmVuZCA9IEwnXDAnOworISAgICAgICAgICAgICBmd3ByaW50ZihzdGRv dXQsIEwiJWxzXG4iLCAqZmlyc3RsaW5lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs c2UgeworICAgICAgICAgICAgICBuID0gd2lkdGggLSBmaXJzdHByb3AtPnAgLSBmaXJzdHByb3At PnM7CisgICAgICAgICAgICAgIGlmIChuIDwgMCkgeworISAgICAgICAgICAgICAgIHN3cHJpbnRm KGVycm1zZyxlcnJtc2dfc2l6ZSxpbXBvc3NpYmlsaXR5LDUpOworICAgICAgICAgICAgICAgIGdv dG8gcGFyY2xlYW51cDsKKyAgICAgICAgICAgICAgfQorISAgICAgICAgICAgICBmd3ByaW50Zihz dGRvdXQsIEwiJS4qbHMiLCBmaXJzdHByb3AtPnAsICpmaXJzdGxpbmUpOworICAgICAgICAgICAg ICBmb3IgKGkgPSBuOyAgaTsgIC0taSkKKyEgICAgICAgICAgICAgICBmcHV0d2MoZmlyc3Rwcm9w LT5yYywgc3Rkb3V0KTsKKyEgICAgICAgICAgICAgZndwcmludGYoc3Rkb3V0LCBMIiVsc1xuIiwg ZW5kIC0gZmlyc3Rwcm9wLT5zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAg ICAgKytmaXJzdGxpbmUsICsrZmlyc3Rwcm9wOworKioqKioqKioqKioqKioqCisqKiogODQ4LDg3 NSAqKioqCisgICAgICAgIGZvciAobmV4dGxpbmUgPSBmaXJzdGxpbmUgKyAxLCBuZXh0cHJvcCA9 IGZpcnN0cHJvcCArIDE7CisgICAgICAgICAgICAgbmV4dGxpbmUgPCBlbmRsaW5lICYmICFpc2Jv ZGlsZXNzKG5leHRwcm9wKSAmJiAhaXNmaXJzdChuZXh0cHJvcCk7CisgICAgICAgICAgICAgKytu ZXh0bGluZSwgKytuZXh0cHJvcCk7CishIAorICAgICAgICBwcmVmaXggPSBwcmVmaXhiYWssIHN1 ZmZpeCA9IHN1ZmZpeGJhazsKKyEgICAgICAgc2V0YWZmaXhlcygoY29uc3QgY2hhciAqIGNvbnN0 ICopIGZpcnN0bGluZSwKKyEgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqIGNvbnN0ICop IG5leHRsaW5lLCBmaXJzdHByb3AsIGJvZHljaGFycywKKyAgICAgICAgICAgICAgICAgICBxdW90 ZWNoYXJzLCBoYW5nLCBib2R5LCBxdW90ZSwgJmFmcCwgJmZzLCAmcHJlZml4LCAmc3VmZml4KTsK KyAgICAgICAgaWYgKHdpZHRoIDw9IHByZWZpeCArIHN1ZmZpeCkgeworISAgICAgICAgIHNwcmlu dGYoZXJybXNnLAorISAgICAgICAgICAgICAgICAgIjx3aWR0aD4gKCVkKSA8PSA8cHJlZml4PiAo JWQpICsgPHN1ZmZpeD4gKCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgIHdpZHRoLCBwcmVmaXgs IHN1ZmZpeCk7CisgICAgICAgICAgZ290byBwYXJjbGVhbnVwOworICAgICAgICB9CisgIAorICAg ICAgICBvdXRsaW5lcyA9CishICAgICAgICAgcmVmb3JtYXQoKGNvbnN0IGNoYXIgKiBjb25zdCAq KSBmaXJzdGxpbmUsCishICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKiBjb25zdCAqKSBu ZXh0bGluZSwKKyAgICAgICAgICAgICAgICAgICBhZnAsIGZzLCBoYW5nLCBwcmVmaXgsIHN1ZmZp eCwgd2lkdGgsIGNhcCwKKyAgICAgICAgICAgICAgICAgICBmaXQsIGd1ZXNzLCBqdXN0LCBsYXN0 LCBSZXBvcnQsIHRvdWNoLCBlcnJtc2cpOworICAgICAgICBpZiAoKmVycm1zZykgZ290byBwYXJj bGVhbnVwOworLSAKKyAgICAgICAgZm9yIChsaW5lID0gb3V0bGluZXM7ICAqbGluZTsgICsrbGlu ZSkKKyEgICAgICAgICBwdXRzKCpsaW5lKTsKKyEgCisgICAgICAgIGZyZWVsaW5lcyhvdXRsaW5l cyk7CisgICAgICAgIG91dGxpbmVzID0gTlVMTDsKKyAgCistLS0gODc1LDkwMCAtLS0tCisgICAg ICAgIGZvciAobmV4dGxpbmUgPSBmaXJzdGxpbmUgKyAxLCBuZXh0cHJvcCA9IGZpcnN0cHJvcCAr IDE7CisgICAgICAgICAgICAgbmV4dGxpbmUgPCBlbmRsaW5lICYmICFpc2JvZGlsZXNzKG5leHRw cm9wKSAmJiAhaXNmaXJzdChuZXh0cHJvcCk7CisgICAgICAgICAgICAgKytuZXh0bGluZSwgKytu ZXh0cHJvcCk7CishICAgICAgIAorICAgICAgICBwcmVmaXggPSBwcmVmaXhiYWssIHN1ZmZpeCA9 IHN1ZmZpeGJhazsKKyEgICAgICAgc2V0YWZmaXhlcygoY29uc3Qgd2NoYXJfdCAqIGNvbnN0ICop IGZpcnN0bGluZSwKKyEgICAgICAgICAgICAgICAgICAoY29uc3Qgd2NoYXJfdCAqIGNvbnN0ICop IG5leHRsaW5lLCBmaXJzdHByb3AsIGJvZHljaGFycywKKyAgICAgICAgICAgICAgICAgICBxdW90 ZWNoYXJzLCBoYW5nLCBib2R5LCBxdW90ZSwgJmFmcCwgJmZzLCAmcHJlZml4LCAmc3VmZml4KTsK KyAgICAgICAgaWYgKHdpZHRoIDw9IHByZWZpeCArIHN1ZmZpeCkgeworISAgICAgICAgIHN3cHJp bnRmKGVycm1zZyxlcnJtc2dfc2l6ZSwKKyEgICAgICAgICAgICAgICAgIEwiPHdpZHRoPiAoJWQp IDw9IDxwcmVmaXg+ICglZCkgKyA8c3VmZml4PiAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAg d2lkdGgsIHByZWZpeCwgc3VmZml4KTsKKyAgICAgICAgICBnb3RvIHBhcmNsZWFudXA7CisgICAg ICAgIH0KKyAgCisgICAgICAgIG91dGxpbmVzID0KKyEgICAgICAgICByZWZvcm1hdCgoY29uc3Qg d2NoYXJfdCAqIGNvbnN0ICopIGZpcnN0bGluZSwKKyEgICAgICAgICAgICAgICAgICAoY29uc3Qg d2NoYXJfdCAqIGNvbnN0ICopIG5leHRsaW5lLAorICAgICAgICAgICAgICAgICAgIGFmcCwgZnMs IGhhbmcsIHByZWZpeCwgc3VmZml4LCB3aWR0aCwgY2FwLAorICAgICAgICAgICAgICAgICAgIGZp dCwgZ3Vlc3MsIGp1c3QsIGxhc3QsIFJlcG9ydCwgdG91Y2gsIGVycm1zZyk7CisgICAgICAgIGlm ICgqZXJybXNnKSBnb3RvIHBhcmNsZWFudXA7CisgICAgICAgIGZvciAobGluZSA9IG91dGxpbmVz OyAgKmxpbmU7ICArK2xpbmUpCishICAgICAgICAgZndwcmludGYoc3Rkb3V0LCBMIiVsc1xuIiwg KmxpbmUpOworICAgICAgICBmcmVlbGluZXMob3V0bGluZXMpOworICAgICAgICBvdXRsaW5lcyA9 IE5VTEw7CisgIAorKioqKioqKioqKioqKioqCisqKiogODg0LDg5MCAqKioqCisgICAgfQorICAK KyAgcGFyY2xlYW51cDoKKyEgCisgICAgaWYgKGJvZHljaGFycykgZnJlZWNoYXJzZXQoYm9keWNo YXJzKTsKKyAgICBpZiAocHJvdGVjdGNoYXJzKSBmcmVlY2hhcnNldChwcm90ZWN0Y2hhcnMpOwor ICAgIGlmIChxdW90ZWNoYXJzKSBmcmVlY2hhcnNldChxdW90ZWNoYXJzKTsKKy0tLSA5MDksOTE1 IC0tLS0KKyAgICB9CisgIAorICBwYXJjbGVhbnVwOgorISAgIGlmICh3ZW52KSBmcmVlKHdlbnYp OworICAgIGlmIChib2R5Y2hhcnMpIGZyZWVjaGFyc2V0KGJvZHljaGFycyk7CisgICAgaWYgKHBy b3RlY3RjaGFycykgZnJlZWNoYXJzZXQocHJvdGVjdGNoYXJzKTsKKyAgICBpZiAocXVvdGVjaGFy cykgZnJlZWNoYXJzZXQocXVvdGVjaGFycyk7CisqKioqKioqKioqKioqKioKKyoqKiA4OTQsOTAx ICoqKioKKyAgICBpZiAob3V0bGluZXMpIGZyZWVsaW5lcyhvdXRsaW5lcyk7CisgIAorICAgIGVy cm91dCA9IEVyciA/IHN0ZGVyciA6IHN0ZG91dDsKKyEgICBpZiAoKmVycm1zZykgZnByaW50Zihl cnJvdXQsICJwYXIgZXJyb3I6XG4lLipzIiwgZXJybXNnX3NpemUsIGVycm1zZyk7CishICAgaWYg KHZlcnNpb24pIGZwdXRzKCJwYXIgMS41MlxuIixlcnJvdXQpOworICAgIGlmIChoZWxwKSAgICBm cHV0cyh1c2FnZW1zZyxlcnJvdXQpOworICAKKyAgICByZXR1cm4gKmVycm1zZyA/IEVYSVRfRkFJ TFVSRSA6IEVYSVRfU1VDQ0VTUzsKKy0tLSA5MTksOTMwIC0tLS0KKyAgICBpZiAob3V0bGluZXMp IGZyZWVsaW5lcyhvdXRsaW5lcyk7CisgIAorICAgIGVycm91dCA9IEVyciA/IHN0ZGVyciA6IHN0 ZG91dDsKKyEgICBpZiAoKmVycm1zZykgZndwcmludGYoZXJyb3V0LCBMInBhciBlcnJvcjpcbiUu KmxzIiwgZXJybXNnX3NpemUsIGVycm1zZyk7CishICNpZmRlZiBOT1dJRFRICishICAgaWYgKHZl cnNpb24pIGZwdXR3cyhMInBhciAxLjUyLWkxOG4uNCAod2l0aG91dCB3Y3dpZHRoKCkgc3VwcG9y dClcbiIsZXJyb3V0KTsKKyEgI2Vsc2UKKyEgICBpZiAodmVyc2lvbikgZnB1dHdzKEwicGFyIDEu NTItaTE4bi40XG4iLGVycm91dCk7CishICNlbmRpZgorICAgIGlmIChoZWxwKSAgICBmcHV0cyh1 c2FnZW1zZyxlcnJvdXQpOworICAKKyAgICByZXR1cm4gKmVycm1zZyA/IEVYSVRfRkFJTFVSRSA6 IEVYSVRfU1VDQ0VTUzsKK9Ci0L7Qu9GM0LrQviDQsiAuLi9QYXIxNTItdW5pY29kZS86IHBhci5j Lm9yaWcKK2RpZmYgLWMgLi9wYXIuZG9jIC4uL1BhcjE1Mi11bmljb2RlL3Bhci5kb2MKKyoqKiAu L3Bhci5kb2MJMjAwMS0wNC0zMCAwMToxNzoyOC4wMDAwMDAwMDAgKzA0MDAKKy0tLSAuLi9QYXIx NTItdW5pY29kZS9wYXIuZG9jCTIwMTktMTAtMjYgMTc6MjE6MDguNTQ4MDUwODUzICswMzAwCisq KioqKioqKioqKioqKioKKyoqKiAxLDYgKioqKgorICAgICoqKioqKioqKioqKioqKioqKioqKgor ICAgICogcGFyLmRvYyAgICAgICAgICAgKgorISAgICogZm9yIFBhciAxLjUyICAgICAgKgorICAg ICogQ29weXJpZ2h0IDIwMDEgYnkgKgorICAgICogQWRhbSBNLiBDb3N0ZWxsbyAgKgorICAgICoq KioqKioqKioqKioqKioqKioqKgorLS0tIDEsNiAtLS0tCisgICAgKioqKioqKioqKioqKioqKioq KioqCisgICAgKiBwYXIuZG9jICAgICAgICAgICAqCishICAgKiBmb3IgUGFyIDEuNTIgaTE4biAq CisgICAgKiBDb3B5cmlnaHQgMjAwMSBieSAqCisgICAgKiBBZGFtIE0uIENvc3RlbGxvICAqCisg ICAgKioqKioqKioqKioqKioqKioqKioqCitkaWZmIC1jIC4vcHJvdG9NYWtlZmlsZSAuLi9QYXIx NTItdW5pY29kZS9wcm90b01ha2VmaWxlCisqKiogLi9wcm90b01ha2VmaWxlCTIwMDEtMDMtMDkg MDM6NTM6MjUuMDAwMDAwMDAwICswMzAwCistLS0gLi4vUGFyMTUyLXVuaWNvZGUvcHJvdG9NYWtl ZmlsZQkyMDE5LTEwLTI2IDE3OjIxOjA4LjU0ODA1MDg1MyArMDMwMAorKioqKioqKioqKioqKioq CisqKiogNDcsNTMgKioqKgorICAjIEV4YW1wbGUgKGZvciBTb2xhcmlzIDIueCB3aXRoIFNQQVJD b21waWxlciBDKToKKyAgIyBDQyA9IGNjIC1jIC1PIC1zIC1YYyAtRERPTlRGUkVFCisgIAorISBD QyA9IGNjIC1jCisgIAorICAjIERlZmluZSBMSU5LMSBhbmQgTElOSzIgc28gdGhhdCB0aGUgY29t bWFuZAorICAjCistLS0gNDcsNTMgLS0tLQorICAjIEV4YW1wbGUgKGZvciBTb2xhcmlzIDIueCB3 aXRoIFNQQVJDb21waWxlciBDKToKKyAgIyBDQyA9IGNjIC1jIC1PIC1zIC1YYyAtRERPTlRGUkVF CisgIAorISBDQyA9IGNjIC1zdGQ9Yzk5IC1jCisgIAorICAjIERlZmluZSBMSU5LMSBhbmQgTElO SzIgc28gdGhhdCB0aGUgY29tbWFuZAorICAjCitkaWZmIC1jIC4vcmVmb3JtYXQuYyAuLi9QYXIx NTItdW5pY29kZS9yZWZvcm1hdC5jCisqKiogLi9yZWZvcm1hdC5jCTIwMDEtMDMtMjIgMDc6MTc6 MTUuMDAwMDAwMDAwICswMzAwCistLS0gLi4vUGFyMTUyLXVuaWNvZGUvcmVmb3JtYXQuYwkyMDE5 LTEwLTI2IDE3OjIxOjA4LjU0ODA1MDg1MyArMDMwMAorKioqKioqKioqKioqKioqCisqKiogMSw5 ICoqKioKKyEgLyoqKioqKioqKioqKioqKioqKioqKi8KKyEgLyogcmVmb3JtYXQuYyAgICAgICAg Ki8KKyEgLyogZm9yIFBhciAxLjUyICAgICAgKi8KKyEgLyogQ29weXJpZ2h0IDIwMDEgYnkgKi8K KyEgLyogQWRhbSBNLiBDb3N0ZWxsbyAgKi8KKyEgLyoqKioqKioqKioqKioqKioqKioqKi8KKyAg CisgIC8qIFRoaXMgaXMgQU5TSSBDIGNvZGUgKEM4OSkuICovCisgIAorLS0tIDEsMTEgLS0tLQor ISAvKioqKioqKioqKioqKioqKioqKioqKiovCishIC8qIHJlZm9ybWF0LmMgICAgICAgICAgKi8K KyEgLyogZm9yIFBhciAxLjUyLWkxOG4uNCAqLworISAvKiBDb3B5cmlnaHQgMjAwMSBieSAgICov CishIC8qIEFkYW0gTS4gQ29zdGVsbG8gICAgKi8KKyEgLyogTW9kaWZpZWQgYnkgICAgICAgICAq LworISAvKiBKw6lyw7RtZSBQb3VpbGxlciAgICAgKi8KKyEgLyoqKioqKioqKioqKioqKioqKioq KioqLworICAKKyAgLyogVGhpcyBpcyBBTlNJIEMgY29kZSAoQzg5KS4gKi8KKyAgCisqKioqKioq KioqKioqKioKKyoqKiAxNiwyMSAqKioqCistLS0gMTgsMjQgLS0tLQorICAjaW5jbHVkZSA8c3Rk aW8uaD4KKyAgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICAjaW5jbHVkZSA8c3RyaW5nLmg+CisrICNp bmNsdWRlIDx3Y3R5cGUuaD4KKyAgCisgICN1bmRlZiBOVUxMCisgICNkZWZpbmUgTlVMTCAoKHZv aWQgKikgMCkKKyoqKioqKioqKioqKioqKgorKioqIDMzLDQ2ICoqKioKKyAgdHlwZWRlZiB1bnNp Z25lZCBjaGFyIHdmbGFnX3Q7CisgIAorICB0eXBlZGVmIHN0cnVjdCB3b3JkIHsKKyEgICBjb25z dCBjaGFyICpjaHJzOyAgICAgICAvKiBQb2ludGVyIHRvIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSB3 b3JkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogKE5PVCB0ZXJtaW5hdGVkIGJ5 ICdcMCcpLiAgICAgICAgICAgICAqLworICAgIHN0cnVjdCB3b3JkICpwcmV2LCAgICAgIC8qIFBv aW50ZXIgdG8gcHJldmlvdXMgd29yZC4gICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAq bmV4dCwgICAgICAvKiBQb2ludGVyIHRvIG5leHQgd29yZC4gICAgICAgICAgICAgICAgICovCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3VwcG9zaW5nIHRoaXMgd29yZCB3ZXJlIHRo ZSBmaXJzdC4uLiAqLworICAgICAgICAgICAgICAgICpuZXh0bGluZTsgIC8qICAgUG9pbnRlciB0 byBmaXJzdCB3b3JkIGluIG5leHQgbGluZS4gKi8KKyAgICBpbnQgc2NvcmUsICAgICAgICAgICAg ICAvKiAgIFZhbHVlIG9mIHRoZSBvYmplY3RpdmUgZnVuY3Rpb24uICAgICovCishICAgICAgIGxl bmd0aDsgICAgICAgICAgICAgLyogTGVuZ3RoIG9mIHRoaXMgd29yZC4gICAgICAgICAgICAgICAg ICAqLworICAgIHdmbGFnX3QgZmxhZ3M7ICAgICAgICAgIC8qIE5vdGFibGUgcHJvcGVydGllcyBv ZiB0aGlzIHdvcmQuICAgICAgKi8KKyAgfSB3b3JkOworICAKKy0tLSAzNiw1MCAtLS0tCisgIHR5 cGVkZWYgdW5zaWduZWQgY2hhciB3ZmxhZ190OworICAKKyAgdHlwZWRlZiBzdHJ1Y3Qgd29yZCB7 CishICAgY29uc3Qgd2NoYXJfdCAqY2hyczsgICAgLyogUG9pbnRlciB0byB0aGUgY2hhcmFjdGVy cyBpbiB0aGUgd29yZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIChOT1QgdGVy bWluYXRlZCBieSAnXDAnKS4gICAgICAgICAgICAgKi8KKyAgICBzdHJ1Y3Qgd29yZCAqcHJldiwg ICAgICAvKiBQb2ludGVyIHRvIHByZXZpb3VzIHdvcmQuICAgICAgICAgICAgICovCisgICAgICAg ICAgICAgICAgKm5leHQsICAgICAgLyogUG9pbnRlciB0byBuZXh0IHdvcmQuICAgICAgICAgICAg ICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN1cHBvc2luZyB0aGlzIHdv cmQgd2VyZSB0aGUgZmlyc3QuLi4gKi8KKyAgICAgICAgICAgICAgICAqbmV4dGxpbmU7ICAvKiAg IFBvaW50ZXIgdG8gZmlyc3Qgd29yZCBpbiBuZXh0IGxpbmUuICovCisgICAgaW50IHNjb3JlLCAg ICAgICAgICAgICAgLyogICBWYWx1ZSBvZiB0aGUgb2JqZWN0aXZlIGZ1bmN0aW9uLiAgICAqLwor ISAgICAgICBsZW5ndGgsICAgICAgICAgICAgIC8qIExlbmd0aCAoaW4gd2lkZWNoYXIpIG9mIHRo aXMgd29yZC4gICAgKi8KKyEgICAgICAgd2lkdGg7ICAgICAgICAgICAgICAvKiBWaXN1YWwgd2lk dGggb2YgdGhpcyB3b3JkLiAgICAgICAgICAgICovCisgICAgd2ZsYWdfdCBmbGFnczsgICAgICAg ICAgLyogTm90YWJsZSBwcm9wZXJ0aWVzIG9mIHRoaXMgd29yZC4gICAgICAqLworICB9IHdvcmQ7 CisgIAorKioqKioqKioqKioqKioqCisqKiogNTcsNzMgKioqKgorICAjZGVmaW5lIGlzY3VyaW91 cyh3KSAoKCh3KS0+ZmxhZ3MgJiAyKSAhPSAwKQorICAjZGVmaW5lIGlzY2FwaXRhbCh3KSAoKCh3 KS0+ZmxhZ3MgJiA0KSAhPSAwKQorICAKKyAgCisgIHN0YXRpYyBpbnQgY2hlY2tjYXBpdGFsKHdv cmQgKncpCisgIC8qIFJldHVybnMgMSBpZiAqdyBpcyBjYXBpdGFsaXplZCBhY2NvcmRpbmcgdG8g dGhlIGRlZmluaXRpb24gKi8KKyAgLyogaW4gcGFyLmRvYyAoYXNzdW1pbmcgPGNhcD4gaXMgMCks IG9yIDAgaWYgbm90LiAgICAgICAgICAgICAqLworICB7CishICAgY29uc3QgY2hhciAqcCwgKmVu ZDsKKyAgCisgICAgZm9yIChwID0gdy0+Y2hycywgZW5kID0gcCArIHctPmxlbmd0aDsKKyEgICAg ICAgIHAgPCBlbmQgJiYgIWlzYWxudW0oKih1bnNpZ25lZCBjaGFyICopcCk7CisgICAgICAgICAr K3ApOworISAgIHJldHVybiBwIDwgZW5kICYmICFpc2xvd2VyKCoodW5zaWduZWQgY2hhciAqKXAp OworICB9CisgIAorICAKKy0tLSA2MSw5OSAtLS0tCisgICNkZWZpbmUgaXNjdXJpb3VzKHcpICgo KHcpLT5mbGFncyAmIDIpICE9IDApCisgICNkZWZpbmUgaXNjYXBpdGFsKHcpICgoKHcpLT5mbGFn cyAmIDQpICE9IDApCisgIAorKyBzdGF0aWMgaW50IGdldFdpZHRoKGNvbnN0IHdjaGFyX3QgKmJl ZywgY29uc3Qgd2NoYXJfdCAqZW5kKQorKyAvKiBDb21wdXRlICh2aXN1YWwpIHdpZHRoIG9mIGEg IHdvcmQuIFRoaXMgZnVuY3Rpb24gaXMgYXdhcmUgKi8KKysgLyogYWJvdXQgZG91YmxlLXdpZHRo IGNoYXJhY3RlcnMgdXNlZCBpbiBvcmllbnRhbCBsYW5nYWdlcy4gICovCisrIHsKKysgICBpbnQg cmV0LCB0bXA7CisrICAgCisrICAgZm9yIChyZXQgPSAwOyBiZWcgIT0gZW5kOyBiZWcrKykgewor KyAjaWZkZWYgTk9XSURUSAorKyAgICAgdG1wID0gMTsKKysgI2Vsc2UKKysgICAgIHRtcCA9IHdj d2lkdGgoKmJlZyk7CisrICNlbmRpZgorKyAgICAgLy8gQlVHOiBJdCBpcyBub3QgcmVhbGx5IGVh c3kgdG8gaGFuZGxlIGNhc2Ugb2YgemVybyB3aWR0aCBjaGFyYWN0ZXJzLgorKyAgICAgLy8gSWYg d2UgZG9uJ3QgZG8gdGhpcywgc2l6ZSBtYWxsbG9jIGZvciBxMSB3aWxsIGJlIGxlc3MgdGhhbiBy ZWFsIAorKyAgICAgLy8gc2l6ZSBhbmQgcHJvZ3JhbSB3aWxsIHNlZ2ZhdWx0LiBTbyBJIHByZWZl ciB0byBoYXZlIGEgYnVnIHRoYW4gYSBzZWdmYXVsdC4KKysgICAgIGlmICh0bXAgPD0gMCkKKysg ICAgICAgdG1wID0gMTsKKysgICAgIHJldCArPSB0bXA7CisrICAgfQorKyAgIAorKyAgIHJldHVy biByZXQ7CisrIH0KKyAgCisgIHN0YXRpYyBpbnQgY2hlY2tjYXBpdGFsKHdvcmQgKncpCisgIC8q IFJldHVybnMgMSBpZiAqdyBpcyBjYXBpdGFsaXplZCBhY2NvcmRpbmcgdG8gdGhlIGRlZmluaXRp b24gKi8KKyAgLyogaW4gcGFyLmRvYyAoYXNzdW1pbmcgPGNhcD4gaXMgMCksIG9yIDAgaWYgbm90 LiAgICAgICAgICAgICAqLworICB7CishICAgY29uc3Qgd2NoYXJfdCAqcCwgKmVuZDsKKyAgCisg ICAgZm9yIChwID0gdy0+Y2hycywgZW5kID0gcCArIHctPmxlbmd0aDsKKyEgICAgICAgIHAgPCBl bmQgJiYgIWlzd2FsbnVtKCpwKTsKKyAgICAgICAgICsrcCk7CishICAgcmV0dXJuIHAgPCBlbmQg JiYgIWlzd2xvd2VyKCpwKTsKKyAgfQorICAKKyAgCisqKioqKioqKioqKioqKioKKyoqKiA3NSw5 MyAqKioqCisgIC8qIFJldHVybnMgMSBpZiAqdyBpcyBjdXJpb3VzIGFjY29yZGluZyB0byAqLwor ICAvKiB0aGUgZGVmaW5pdGlvbiBpbiBwYXIuZG9jLCBvciAwIGlmIG5vdC4gKi8KKyAgeworISAg IGNvbnN0IGNoYXIgKnN0YXJ0LCAqcDsKKyEgICBjaGFyIGNoOworICAKKyAgICBmb3IgKHN0YXJ0 ID0gdy0+Y2hycywgcCA9IHN0YXJ0ICsgdy0+bGVuZ3RoOyAgcCA+IHN0YXJ0OyAgLS1wKSB7Cisg ICAgICBjaCA9IHBbLTFdOworISAgICAgaWYgKGlzYWxudW0oKih1bnNpZ25lZCBjaGFyICopJmNo KSkgcmV0dXJuIDA7CishICAgICBpZiAoY2ggPT0gJy4nIHx8IGNoID09ICc/JyB8fCBjaCA9PSAn IScgfHwgY2ggPT0gJzonKSBicmVhazsKKyAgICB9CisgIAorICAgIGlmIChwIDw9IHN0YXJ0ICsg MSkgcmV0dXJuIDA7CisgIAorICAgIC0tcDsKKyEgICBkbyBpZiAoaXNhbG51bSgqKHVuc2lnbmVk IGNoYXIgKiktLXApKSByZXR1cm4gMTsKKyAgICB3aGlsZSAocCA+IHN0YXJ0KTsKKyAgCisgICAg cmV0dXJuIDA7CistLS0gMTAxLDExOSAtLS0tCisgIC8qIFJldHVybnMgMSBpZiAqdyBpcyBjdXJp b3VzIGFjY29yZGluZyB0byAqLworICAvKiB0aGUgZGVmaW5pdGlvbiBpbiBwYXIuZG9jLCBvciAw IGlmIG5vdC4gKi8KKyAgeworISAgIGNvbnN0IHdjaGFyX3QgKnN0YXJ0LCAqcDsKKyEgICB3Y2hh cl90IGNoOworICAKKyAgICBmb3IgKHN0YXJ0ID0gdy0+Y2hycywgcCA9IHN0YXJ0ICsgdy0+bGVu Z3RoOyAgcCA+IHN0YXJ0OyAgLS1wKSB7CisgICAgICBjaCA9IHBbLTFdOworISAgICAgaWYgKGlz d2FsbnVtKCood2NoYXJfdCAqKSZjaCkpIHJldHVybiAwOworISAgICAgaWYgKGNoID09IEwnLicg fHwgY2ggPT0gTCc/JyB8fCBjaCA9PSBMJyEnIHx8IGNoID09IEwnOicpIGJyZWFrOworICAgIH0K KyAgCisgICAgaWYgKHAgPD0gc3RhcnQgKyAxKSByZXR1cm4gMDsKKyAgCisgICAgLS1wOworISAg IGRvIGlmIChpc3dhbG51bSgqKHdjaGFyX3QgKiktLXApKSByZXR1cm4gMTsKKyAgICB3aGlsZSAo cCA+IHN0YXJ0KTsKKyAgCisgICAgcmV0dXJuIDA7CisqKioqKioqKioqKioqKioKKyoqKiA5NSwx MjUgKioqKgorICAKKyAgCisgIHN0YXRpYyBpbnQgc2ltcGxlYnJlYWtzKHdvcmQgKmhlYWQsIHdv cmQgKnRhaWwsIGludCBMLCBpbnQgbGFzdCkKKyEgCishIC8qIENob29zZXMgbGluZSBicmVha3Mg aW4gYSBsaXN0IG9mIHdvcmRzIHdoaWNoIG1heGltaXplIHRoZSBsZW5ndGggb2YgdGhlICAgKi8K KyEgLyogc2hvcnRlc3QgbGluZS4gIEwgaXMgdGhlIG1heGltdW0gbGluZSBsZW5ndGguICBUaGUg bGFzdCBsaW5lIGNvdW50cyBhcyBhICAqLworISAvKiBsaW5lIG9ubHkgaWYgbGFzdCBpcyBub24t emVyby4gX2hlYWQgbXVzdCBwb2ludCB0byBhIGR1bW15IHdvcmQsIGFuZCB0YWlsICovCishIC8q IG11c3QgcG9pbnQgdG8gdGhlIGxhc3Qgd29yZCwgd2hvc2UgbmV4dCBmaWVsZCBtdXN0IGJlIE5V TEwuICBSZXR1cm5zIHRoZSAgKi8KKyEgLyogbGVuZ3RoIG9mIHRoZSBzaG9ydGVzdCBsaW5lIG9u IHN1Y2Nlc3MsIC0xIGlmIHRoZXJlIGlzIGEgd29yZCBvZiBsZW5ndGggICAqLworISAvKiBncmVh dGVyIHRoYW4gTCwgb3IgTCBpZiB0aGVyZSBhcmUgbm8gbGluZXMuICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICovCisgIHsKKyAgICB3b3JkICp3MSwgKncyOworICAgIGludCBsaW5lbGVu LCBzY29yZTsKKyAgCisgICAgaWYgKCFoZWFkLT5uZXh0KSByZXR1cm4gTDsKKyAgCishICAgZm9y ICh3MSA9IHRhaWwsIGxpbmVsZW4gPSB3MS0+bGVuZ3RoOworICAgICAgICAgdzEgIT0gaGVhZCAm JiBsaW5lbGVuIDw9IEw7CishICAgICAgICBsaW5lbGVuICs9IGlzc2hpZnRlZCh3MSksIHcxID0g dzEtPnByZXYsIGxpbmVsZW4gKz0gMSArIHcxLT5sZW5ndGgpIHsKKyAgICAgIHcxLT5zY29yZSA9 IGxhc3QgPyBsaW5lbGVuIDogTDsKKyAgICAgIHcxLT5uZXh0bGluZSA9IE5VTEw7CisgICAgfQor ICAKKyAgICBmb3IgKCA7ICB3MSAhPSBoZWFkOyAgdzEgPSB3MS0+cHJldikgeworICAgICAgdzEt PnNjb3JlID0gLTE7CishICAgICBmb3IgKGxpbmVsZW4gPSB3MS0+bGVuZ3RoLCAgdzIgPSB3MS0+ bmV4dDsKKyAgICAgICAgICAgbGluZWxlbiA8PSBMOworISAgICAgICAgICBsaW5lbGVuICs9IDEg KyBpc3NoaWZ0ZWQodzIpICsgdzItPmxlbmd0aCwgIHcyID0gdzItPm5leHQpIHsKKyAgICAgICAg c2NvcmUgPSB3Mi0+c2NvcmU7CisgICAgICAgIGlmIChsaW5lbGVuIDwgc2NvcmUpIHNjb3JlID0g bGluZWxlbjsKKyAgICAgICAgaWYgKHNjb3JlID49IHcxLT5zY29yZSkgeworLS0tIDEyMSwxNTIg LS0tLQorICAKKyAgCisgIHN0YXRpYyBpbnQgc2ltcGxlYnJlYWtzKHdvcmQgKmhlYWQsIHdvcmQg KnRhaWwsIGludCBMLCBpbnQgbGFzdCkKKyEgLyogQ2hvb3NlcyBsaW5lICBicmVha3MgaW4gYSAg bGlzdCBvZiB3b3JkcyAgd2hpY2ggbWF4aW1pemUgKi8KKyEgLyogdGhlIGxlbmd0aCBvZiAgdGhl IHNob3J0ZXN0IGxpbmUuIEwgaXMgIHRoZSBtYXhpbXVtIGxpbmUgKi8KKyEgLyogbGVuZ3RoLiBU aGUgbGFzdCAgbGluZSBjb3VudHMgYXMgYSBsaW5lIG9ubHkgIGlmIGxhc3QgaXMgKi8KKyEgLyog bm9uLXplcm8uIF9oZWFkICBtdXN0IHBvaW50ICB0byBhICBkdW1teSB3b3JkLCAgYW5kIHRhaWwg Ki8KKyEgLyogbXVzdCBwb2ludCAgdG8gdGhlIGxhc3QgIHdvcmQsIHdob3NlIG5leHQgZmllbGQg IG11c3QgYmUgKi8KKyEgLyogTlVMTC4gIFJldHVybnMgIHRoZSAgbGVuZ3RoICBvZiAgdGhlICBz aG9ydGVzdCAgbGluZSAgb24gKi8KKyEgLyogc3VjY2VzcywgLTEgaWYgdGhlcmUgaXMgYSB3b3Jk IG9mIGxlbmd0aCBncmVhdGVyIHRoYW4gTCwgKi8KKyEgLyogb3IgTCBpZiB0aGVyZSBhcmUgbm8g bGluZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgeworICAgIHdvcmQgKncx LCAqdzI7CisgICAgaW50IGxpbmVsZW4sIHNjb3JlOworICAKKyAgICBpZiAoIWhlYWQtPm5leHQp IHJldHVybiBMOworICAKKyEgICBmb3IgKHcxID0gdGFpbCwgbGluZWxlbiA9IHcxLT53aWR0aDsK KyAgICAgICAgIHcxICE9IGhlYWQgJiYgbGluZWxlbiA8PSBMOworISAgICAgICAgbGluZWxlbiAr PSBpc3NoaWZ0ZWQodzEpLCB3MSA9IHcxLT5wcmV2LCBsaW5lbGVuICs9IDEgKyB3MS0+d2lkdGgp IHsKKyAgICAgIHcxLT5zY29yZSA9IGxhc3QgPyBsaW5lbGVuIDogTDsKKyAgICAgIHcxLT5uZXh0 bGluZSA9IE5VTEw7CisgICAgfQorICAKKyAgICBmb3IgKCA7ICB3MSAhPSBoZWFkOyAgdzEgPSB3 MS0+cHJldikgeworICAgICAgdzEtPnNjb3JlID0gLTE7CishICAgICBmb3IgKGxpbmVsZW4gPSB3 MS0+d2lkdGgsICB3MiA9IHcxLT5uZXh0OworICAgICAgICAgICBsaW5lbGVuIDw9IEw7CishICAg ICAgICAgIGxpbmVsZW4gKz0gMSArIGlzc2hpZnRlZCh3MikgKyB3Mi0+d2lkdGgsICB3MiA9IHcy LT5uZXh0KSB7CisgICAgICAgIHNjb3JlID0gdzItPnNjb3JlOworICAgICAgICBpZiAobGluZWxl biA8IHNjb3JlKSBzY29yZSA9IGxpbmVsZW47CisgICAgICAgIGlmIChzY29yZSA+PSB3MS0+c2Nv cmUpIHsKKyoqKioqKioqKioqKioqKgorKioqIDE2OCwxNzQgKioqKgorICAKKyAgICBzaG9ydGVz dCA9IHNpbXBsZWJyZWFrcyhoZWFkLHRhaWwsdGFyZ2V0LGxhc3QpOworICAgIGlmIChzaG9ydGVz dCA8IDApIHsKKyEgICAgIHNwcmludGYoZXJybXNnLGltcG9zc2liaWxpdHksMSk7CisgICAgICBy ZXR1cm47CisgICAgfQorICAKKy0tLSAxOTUsMjAxIC0tLS0KKyAgCisgICAgc2hvcnRlc3QgPSBz aW1wbGVicmVha3MoaGVhZCx0YWlsLHRhcmdldCxsYXN0KTsKKyAgICBpZiAoc2hvcnRlc3QgPCAw KSB7CishICAgICBzd3ByaW50ZihlcnJtc2csZXJybXNnX3NpemUsaW1wb3NzaWJpbGl0eSwxKTsK KyAgICAgIHJldHVybjsKKyAgICB9CisgIAorKioqKioqKioqKioqKioqCisqKiogMTc4LDE4NiAq KioqCisgICAgdzEgPSB0YWlsOworICAgIGRvIHsKKyAgICAgIHcxLT5zY29yZSA9IC0xOworISAg ICAgZm9yIChsaW5lbGVuID0gdzEtPmxlbmd0aCwgIHcyID0gdzEtPm5leHQ7CisgICAgICAgICAg IGxpbmVsZW4gPD0gdGFyZ2V0OworISAgICAgICAgICBsaW5lbGVuICs9IDEgKyBpc3NoaWZ0ZWQo dzIpICsgdzItPmxlbmd0aCwgIHcyID0gdzItPm5leHQpIHsKKyAgICAgICAgZXh0cmEgPSB0YXJn ZXQgLSBsaW5lbGVuOworICAgICAgICBtaW5sZW4gPSBzaG9ydGVzdDsKKyAgICAgICAgaWYgKHcy KQorLS0tIDIwNSwyMTMgLS0tLQorICAgIHcxID0gdGFpbDsKKyAgICBkbyB7CisgICAgICB3MS0+ c2NvcmUgPSAtMTsKKyEgICAgIGZvciAobGluZWxlbiA9IHcxLT53aWR0aCwgIHcyID0gdzEtPm5l eHQ7CisgICAgICAgICAgIGxpbmVsZW4gPD0gdGFyZ2V0OworISAgICAgICAgICBsaW5lbGVuICs9 IDEgKyBpc3NoaWZ0ZWQodzIpICsgdzItPndpZHRoLCAgdzIgPSB3Mi0+bmV4dCkgeworICAgICAg ICBleHRyYSA9IHRhcmdldCAtIGxpbmVsZW47CisgICAgICAgIG1pbmxlbiA9IHNob3J0ZXN0Owor ICAgICAgICBpZiAodzIpCisqKioqKioqKioqKioqKioKKyoqKiAyMDIsMjA4ICoqKioKKyAgICB9 IHdoaWxlICh3MSAhPSBoZWFkKTsKKyAgCisgICAgaWYgKGhlYWQtPm5leHQtPnNjb3JlIDwgMCkK KyEgICAgIHNwcmludGYoZXJybXNnLGltcG9zc2liaWxpdHksMik7CisgIH0KKyAgCisgIAorLS0t IDIyOSwyMzUgLS0tLQorICAgIH0gd2hpbGUgKHcxICE9IGhlYWQpOworICAKKyAgICBpZiAoaGVh ZC0+bmV4dC0+c2NvcmUgPCAwKQorISAgICAgc3dwcmludGYoZXJybXNnLGVycm1zZ19zaXplLGlt cG9zc2liaWxpdHksMik7CisgIH0KKyAgCisgIAorKioqKioqKioqKioqKioqCisqKiogMjI1LDIz MyAqKioqCisgICAgdzEgPSB0YWlsOworICAgIGRvIHsKKyAgICAgIHcxLT5zY29yZSA9IEw7Cish ICAgICBmb3IgKG51bWdhcHMgPSAwLCBleHRyYSA9IEwgLSB3MS0+bGVuZ3RoLCB3MiA9IHcxLT5u ZXh0OworICAgICAgICAgICBleHRyYSA+PSAwOworISAgICAgICAgICArK251bWdhcHMsIGV4dHJh IC09IDEgKyBpc3NoaWZ0ZWQodzIpICsgdzItPmxlbmd0aCwgdzIgPSB3Mi0+bmV4dCkgeworICAg ICAgICBnYXAgPSBudW1nYXBzID8gKGV4dHJhICsgbnVtZ2FwcyAtIDEpIC8gbnVtZ2FwcyA6IEw7 CisgICAgICAgIGlmICh3MikKKyAgICAgICAgICBzY29yZSA9IHcyLT5zY29yZTsKKy0tLSAyNTIs MjYwIC0tLS0KKyAgICB3MSA9IHRhaWw7CisgICAgZG8geworICAgICAgdzEtPnNjb3JlID0gTDsK KyEgICAgIGZvciAobnVtZ2FwcyA9IDAsIGV4dHJhID0gTCAtIHcxLT53aWR0aCwgdzIgPSB3MS0+ bmV4dDsKKyAgICAgICAgICAgZXh0cmEgPj0gMDsKKyEgICAgICAgICAgKytudW1nYXBzLCBleHRy YSAtPSAxICsgaXNzaGlmdGVkKHcyKSArIHcyLT53aWR0aCwgdzIgPSB3Mi0+bmV4dCkgeworICAg ICAgICBnYXAgPSBudW1nYXBzID8gKGV4dHJhICsgbnVtZ2FwcyAtIDEpIC8gbnVtZ2FwcyA6IEw7 CisgICAgICAgIGlmICh3MikKKyAgICAgICAgICBzY29yZSA9IHcyLT5zY29yZTsKKyoqKioqKioq KioqKioqKgorKioqIDI0NywyNTMgKioqKgorICAKKyAgICBtYXhnYXAgPSBoZWFkLT5uZXh0LT5z Y29yZTsKKyAgICBpZiAobWF4Z2FwID49IEwpIHsKKyEgICAgIHN0cmNweShlcnJtc2csICJDYW5u b3QganVzdGlmeS5cbiIpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgCistLS0gMjc0LDI4MCAt LS0tCisgIAorICAgIG1heGdhcCA9IGhlYWQtPm5leHQtPnNjb3JlOworICAgIGlmIChtYXhnYXAg Pj0gTCkgeworISAgICAgd2NzY3B5KGVycm1zZywgTCJDYW5ub3QganVzdGlmeS5cbiIpOworICAg ICAgcmV0dXJuOworICAgIH0KKyAgCisqKioqKioqKioqKioqKioKKyoqKiAyNTcsMjY1ICoqKioK KyAgICB3MSA9IHRhaWw7CisgICAgZG8geworICAgICAgdzEtPnNjb3JlID0gLTE7CishICAgICBm b3IgKG51bWdhcHMgPSAwLCBleHRyYSA9IEwgLSB3MS0+bGVuZ3RoLCB3MiA9IHcxLT5uZXh0Owor ICAgICAgICAgICBleHRyYSA+PSAwOworISAgICAgICAgICArK251bWdhcHMsIGV4dHJhIC09IDEg KyBpc3NoaWZ0ZWQodzIpICsgdzItPmxlbmd0aCwgdzIgPSB3Mi0+bmV4dCkgeworICAgICAgICBn YXAgPSBudW1nYXBzID8gKGV4dHJhICsgbnVtZ2FwcyAtIDEpIC8gbnVtZ2FwcyA6IEw7CisgICAg ICAgIGlmICh3MikKKyAgICAgICAgICBzY29yZSA9IHcyLT5zY29yZTsKKy0tLSAyODQsMjkyIC0t LS0KKyAgICB3MSA9IHRhaWw7CisgICAgZG8geworICAgICAgdzEtPnNjb3JlID0gLTE7CishICAg ICBmb3IgKG51bWdhcHMgPSAwLCBleHRyYSA9IEwgLSB3MS0+d2lkdGgsIHcyID0gdzEtPm5leHQ7 CisgICAgICAgICAgIGV4dHJhID49IDA7CishICAgICAgICAgICsrbnVtZ2FwcywgZXh0cmEgLT0g MSArIGlzc2hpZnRlZCh3MikgKyB3Mi0+d2lkdGgsIHcyID0gdzItPm5leHQpIHsKKyAgICAgICAg Z2FwID0gbnVtZ2FwcyA/IChleHRyYSArIG51bWdhcHMgLSAxKSAvIG51bWdhcHMgOiBMOworICAg ICAgICBpZiAodzIpCisgICAgICAgICAgc2NvcmUgPSB3Mi0+c2NvcmU7CisqKioqKioqKioqKioq KioKKyoqKiAyODgsMzI3ICoqKioKKyAgICB9IHdoaWxlICh3MSAhPSBoZWFkKTsKKyAgCisgICAg aWYgKGhlYWQtPm5leHQtPnNjb3JlIDwgMCkKKyEgICAgIHNwcmludGYoZXJybXNnLGltcG9zc2li aWxpdHksMyk7CisgIH0KKyAgCisgIAorISBjaGFyICoqcmVmb3JtYXQoCishICAgY29uc3QgY2hh ciAqIGNvbnN0ICppbmxpbmVzLCBjb25zdCBjaGFyICogY29uc3QgKmVuZGxpbmUsIGludCBhZnAs IGludCBmcywKKyAgICBpbnQgaGFuZywgaW50IHByZWZpeCwgaW50IHN1ZmZpeCwgaW50IHdpZHRo LCBpbnQgY2FwLCBpbnQgZml0LCBpbnQgZ3Vlc3MsCisgICAgaW50IGp1c3QsIGludCBsYXN0LCBp bnQgUmVwb3J0LCBpbnQgdG91Y2gsIGVycm1zZ190IGVycm1zZworICApCisgIHsKKyAgICBpbnQg bnVtaW4sIGFmZml4LCBMLCBvbmZpcnN0d29yZCA9IDEsIGxpbmVsZW4sIG51bW91dCwgbnVtZ2Fw cywgZXh0cmEsIHBoYXNlOworISAgIGNvbnN0IGNoYXIgKiBjb25zdCAqbGluZSwgKipzdWZmaXhl cyA9IE5VTEwsICoqc3VmLCAqZW5kLCAqcDEsICpwMjsKKyEgICBjaGFyICpxMSwgKnEyLCAqKm91 dGxpbmVzID0gTlVMTDsKKyAgICB3b3JkIGR1bW15LCAqaGVhZCwgKnRhaWwsICp3MSwgKncyOwor ICAgIGJ1ZmZlciAqcGJ1ZiA9IE5VTEw7CisgIAorICAvKiBJbml0aWFsaXphdGlvbjogKi8KKy0g CisgICAgKmVycm1zZyA9ICdcMCc7CisgICAgZHVtbXkubmV4dCA9IGR1bW15LnByZXYgPSBOVUxM OworICAgIGR1bW15LmZsYWdzID0gMDsKKyAgICBoZWFkID0gdGFpbCA9ICZkdW1teTsKKyAgICBu dW1pbiA9IGVuZGxpbmUgLSBpbmxpbmVzOworICAgIGlmIChudW1pbiA8PSAwKSB7CishICAgICBz cHJpbnRmKGVycm1zZyxpbXBvc3NpYmlsaXR5LDQpOworICAgICAgZ290byByZmNsZWFudXA7Cisg ICAgfQorICAgIG51bWdhcHMgPSBleHRyYSA9IDA7ICAvKiB1bm5lY2Vzc2FyeSwgYnV0IHF1aWV0 cyBjb21waWxlciB3YXJuaW5ncyAqLworICAKKyAgLyogQWxsb2NhdGUgc3BhY2UgZm9yIHBvaW50 ZXJzIHRvIHRoZSBzdWZmaXhlczogKi8KKyAgCishICAgc3VmZml4ZXMgPSBtYWxsb2MobnVtaW4g KiBzaXplb2YgKGNvbnN0IGNoYXIgKikpOworICAgIGlmICghc3VmZml4ZXMpIHsKKyEgICAgIHN0 cmNweShlcnJtc2csb3V0b2ZtZW0pOworICAgICAgZ290byByZmNsZWFudXA7CisgICAgfQorICAK Ky0tLSAzMTUsMzUzIC0tLS0KKyAgICB9IHdoaWxlICh3MSAhPSBoZWFkKTsKKyAgCisgICAgaWYg KGhlYWQtPm5leHQtPnNjb3JlIDwgMCkKKyEgICAgIHN3cHJpbnRmKGVycm1zZyxlcnJtc2dfc2l6 ZSxpbXBvc3NpYmlsaXR5LDMpOworICB9CisgIAorICAKKyEgd2NoYXJfdCAqKnJlZm9ybWF0KAor ISAgIGNvbnN0IHdjaGFyX3QgKiBjb25zdCAqaW5saW5lcywgY29uc3Qgd2NoYXJfdCAqIGNvbnN0 ICplbmRsaW5lLCBpbnQgYWZwLCBpbnQgZnMsCisgICAgaW50IGhhbmcsIGludCBwcmVmaXgsIGlu dCBzdWZmaXgsIGludCB3aWR0aCwgaW50IGNhcCwgaW50IGZpdCwgaW50IGd1ZXNzLAorICAgIGlu dCBqdXN0LCBpbnQgbGFzdCwgaW50IFJlcG9ydCwgaW50IHRvdWNoLCBlcnJtc2dfdCBlcnJtc2cK KyAgKQorICB7CisgICAgaW50IG51bWluLCBhZmZpeCwgTCwgb25maXJzdHdvcmQgPSAxLCBsaW5l bGVuLCBudW1vdXQsIG51bWdhcHMsIGV4dHJhLCBwaGFzZTsKKyEgICBjb25zdCB3Y2hhcl90ICog Y29uc3QgKmxpbmUsICoqc3VmZml4ZXMgPSBOVUxMLCAqKnN1ZiwgKmVuZCwgKnAxLCAqcDI7Cish ICAgd2NoYXJfdCAqcTEsICpxMiwgKipvdXRsaW5lcyA9IE5VTEw7CisgICAgd29yZCBkdW1teSwg KmhlYWQsICp0YWlsLCAqdzEsICp3MjsKKyAgICBidWZmZXIgKnBidWYgPSBOVUxMOworICAKKyAg LyogSW5pdGlhbGl6YXRpb246ICovCisgICAgKmVycm1zZyA9ICdcMCc7CisgICAgZHVtbXkubmV4 dCA9IGR1bW15LnByZXYgPSBOVUxMOworICAgIGR1bW15LmZsYWdzID0gMDsKKyAgICBoZWFkID0g dGFpbCA9ICZkdW1teTsKKyAgICBudW1pbiA9IGVuZGxpbmUgLSBpbmxpbmVzOworICAgIGlmIChu dW1pbiA8PSAwKSB7CishICAgICBzd3ByaW50ZihlcnJtc2csZXJybXNnX3NpemUsaW1wb3NzaWJp bGl0eSw0KTsKKyAgICAgIGdvdG8gcmZjbGVhbnVwOworICAgIH0KKyAgICBudW1nYXBzID0gZXh0 cmEgPSAwOyAgLyogdW5uZWNlc3NhcnksIGJ1dCBxdWlldHMgY29tcGlsZXIgd2FybmluZ3MgKi8K KyAgCisgIC8qIEFsbG9jYXRlIHNwYWNlIGZvciBwb2ludGVycyB0byB0aGUgc3VmZml4ZXM6ICov CisgIAorISAgIHN1ZmZpeGVzID0gbWFsbG9jKG51bWluICogc2l6ZW9mIChjb25zdCB3Y2hhcl90 ICopKTsKKyAgICBpZiAoIXN1ZmZpeGVzKSB7CishICAgICB3Y3NjcHkoZXJybXNnLG91dG9mbWVt KTsKKyAgICAgIGdvdG8gcmZjbGVhbnVwOworICAgIH0KKyAgCisqKioqKioqKioqKioqKioKKyoq KiAzMzQsMzQxICoqKioKKyAgICBkbyB7CisgICAgICBmb3IgKGVuZCA9ICpsaW5lOyAgKmVuZDsg ICsrZW5kKTsKKyAgICAgIGlmIChlbmQgLSAqbGluZSA8IGFmZml4KSB7CishICAgICAgIHNwcmlu dGYoZXJybXNnLAorISAgICAgICAgICAgICAgICJMaW5lICVkIHNob3J0ZXIgdGhhbiA8cHJlZml4 PiArIDxzdWZmaXg+ID0gJWQgKyAlZCA9ICVkXG4iLAorICAgICAgICAgICAgICAgIGxpbmUgLSBp bmxpbmVzICsgMSwgcHJlZml4LCBzdWZmaXgsIGFmZml4KTsKKyAgICAgICAgZ290byByZmNsZWFu dXA7CisgICAgICB9CistLS0gMzYwLDM2NyAtLS0tCisgICAgZG8geworICAgICAgZm9yIChlbmQg PSAqbGluZTsgICplbmQ7ICArK2VuZCk7CisgICAgICBpZiAoZW5kIC0gKmxpbmUgPCBhZmZpeCkg eworISAgICAgICBzd3ByaW50ZihlcnJtc2csZXJybXNnX3NpemUsCishICAgICAgICAgICAgICAg TCJMaW5lICVkIHNob3J0ZXIgdGhhbiA8cHJlZml4PiArIDxzdWZmaXg+ID0gJWQgKyAlZCA9ICVk XG4iLAorICAgICAgICAgICAgICAgIGxpbmUgLSBpbmxpbmVzICsgMSwgcHJlZml4LCBzdWZmaXgs IGFmZml4KTsKKyAgICAgICAgZ290byByZmNsZWFudXA7CisgICAgICB9CisqKioqKioqKioqKioq KioKKyoqKiAzNDMsMzU5ICoqKioKKyAgICAgICpzdWYgPSBlbmQ7CisgICAgICBwMSA9ICpsaW5l ICsgcHJlZml4OworICAgICAgZm9yICg7OykgeworISAgICAgICB3aGlsZSAocDEgPCBlbmQgJiYg KnAxID09ICcgJykgKytwMTsKKyAgICAgICAgaWYgKHAxID09IGVuZCkgYnJlYWs7CisgICAgICAg IHAyID0gcDE7CisgICAgICAgIGlmIChvbmZpcnN0d29yZCkgeworICAgICAgICAgIHAxID0gKmxp bmUgKyBwcmVmaXg7CisgICAgICAgICAgb25maXJzdHdvcmQgPSAwOworICAgICAgICB9CishICAg ICAgIHdoaWxlIChwMiA8IGVuZCAmJiAqcDIgIT0gJyAnKSArK3AyOworICAgICAgICB3MSA9IG1h bGxvYyhzaXplb2YgKHdvcmQpKTsKKyAgICAgICAgaWYgKCF3MSkgeworISAgICAgICAgIHN0cmNw eShlcnJtc2csb3V0b2ZtZW0pOworICAgICAgICAgIGdvdG8gcmZjbGVhbnVwOworICAgICAgICB9 CisgICAgICAgIHcxLT5uZXh0ID0gTlVMTDsKKy0tLSAzNjksMzg1IC0tLS0KKyAgICAgICpzdWYg PSBlbmQ7CisgICAgICBwMSA9ICpsaW5lICsgcHJlZml4OworICAgICAgZm9yICg7OykgeworISAg ICAgICB3aGlsZSAocDEgPCBlbmQgJiYgKnAxID09IEwnICcpICsrcDE7CisgICAgICAgIGlmIChw MSA9PSBlbmQpIGJyZWFrOworICAgICAgICBwMiA9IHAxOworICAgICAgICBpZiAob25maXJzdHdv cmQpIHsKKyAgICAgICAgICBwMSA9ICpsaW5lICsgcHJlZml4OworICAgICAgICAgIG9uZmlyc3R3 b3JkID0gMDsKKyAgICAgICAgfQorISAgICAgICB3aGlsZSAocDIgPCBlbmQgJiYgKnAyICE9IEwn ICcpICsrcDI7CisgICAgICAgIHcxID0gbWFsbG9jKHNpemVvZiAod29yZCkpOworICAgICAgICBp ZiAoIXcxKSB7CishICAgICAgICAgd2NzY3B5KGVycm1zZyxvdXRvZm1lbSk7CisgICAgICAgICAg Z290byByZmNsZWFudXA7CisgICAgICAgIH0KKyAgICAgICAgdzEtPm5leHQgPSBOVUxMOworKioq KioqKioqKioqKioqCisqKiogMzYxLDM2NiAqKioqCistLS0gMzg3LDM5MyAtLS0tCisgICAgICAg IHRhaWwgPSB0YWlsLT5uZXh0ID0gdzE7CisgICAgICAgIHcxLT5jaHJzID0gcDE7CisgICAgICAg IHcxLT5sZW5ndGggPSBwMiAtIHAxOworKyAgICAgICB3MS0+d2lkdGggPSBnZXRXaWR0aChwMSwg cDIpOworICAgICAgICB3MS0+ZmxhZ3MgPSAwOworICAgICAgICBwMSA9IHAyOworICAgICAgfQor KioqKioqKioqKioqKioqCisqKiogMzc3LDM4MiAqKioqCistLS0gNDA0LDQxMCAtLS0tCisgICAg ICAgICAgaWYgKGlzY3VyaW91cyh3MSkpIHsKKyAgICAgICAgICAgIGlmICh3MS0+Y2hyc1t3MS0+ bGVuZ3RoXSAmJiB3MS0+Y2hycyArIHcxLT5sZW5ndGggKyAxID09IHcyLT5jaHJzKSB7CisgICAg ICAgICAgICAgIHcyLT5sZW5ndGggKz0gdzEtPmxlbmd0aCArIDE7CisrICAgICAgICAgICAgIHcy LT53aWR0aCArPSB3MS0+d2lkdGggKyAxOworICAgICAgICAgICAgICB3Mi0+Y2hycyA9IHcxLT5j aHJzOworICAgICAgICAgICAgICB3Mi0+cHJldiA9IHcxLT5wcmV2OworICAgICAgICAgICAgICB3 Mi0+cHJldi0+bmV4dCA9IHcyOworKioqKioqKioqKioqKioqCisqKiogMzk3LDQxNiAqKioqCisg IAorICAgIGlmIChSZXBvcnQpCisgICAgICBmb3IgKHcyID0gaGVhZC0+bmV4dDsgIHcyOyAgdzIg PSB3Mi0+bmV4dCkgeworISAgICAgICBpZiAodzItPmxlbmd0aCA+IEwpIHsKKyEgICAgICAgICBs aW5lbGVuID0gdzItPmxlbmd0aDsKKyAgICAgICAgICBpZiAobGluZWxlbiA+IGVycm1zZ19zaXpl IC0gMTcpCisgICAgICAgICAgICBsaW5lbGVuID0gZXJybXNnX3NpemUgLSAxNzsKKyEgICAgICAg ICBzcHJpbnRmKGVycm1zZywgIldvcmQgdG9vIGxvbmc6ICUuKnNcbiIsIGxpbmVsZW4sIHcyLT5j aHJzKTsKKyAgICAgICAgICBnb3RvIHJmY2xlYW51cDsKKyAgICAgICAgfQorICAgICAgfQorICAg IGVsc2UKKyAgICAgIGZvciAodzIgPSBoZWFkLT5uZXh0OyAgdzI7ICB3MiA9IHcyLT5uZXh0KQor ISAgICAgICB3aGlsZSAodzItPmxlbmd0aCA+IEwpIHsKKyAgICAgICAgICB3MSA9IG1hbGxvYyhz aXplb2YgKHdvcmQpKTsKKyAgICAgICAgICBpZiAoIXcxKSB7CishICAgICAgICAgICBzdHJjcHko ZXJybXNnLG91dG9mbWVtKTsKKyAgICAgICAgICAgIGdvdG8gcmZjbGVhbnVwOworICAgICAgICAg IH0KKyAgICAgICAgICB3MS0+bmV4dCA9IHcyOworLS0tIDQyNSw0NDQgLS0tLQorICAKKyAgICBp ZiAoUmVwb3J0KQorICAgICAgZm9yICh3MiA9IGhlYWQtPm5leHQ7ICB3MjsgIHcyID0gdzItPm5l eHQpIHsKKyEgICAgICAgaWYgKHcyLT53aWR0aCA+IEwpIHsKKyEgICAgICAgICBsaW5lbGVuID0g dzItPndpZHRoOworICAgICAgICAgIGlmIChsaW5lbGVuID4gZXJybXNnX3NpemUgLSAxNykKKyAg ICAgICAgICAgIGxpbmVsZW4gPSBlcnJtc2dfc2l6ZSAtIDE3OworISAgICAgICAgIHN3cHJpbnRm KGVycm1zZyxlcnJtc2dfc2l6ZSwgTCJXb3JkIHRvbyBsb25nOiAlLipsc1xuIiwgbGluZWxlbiwg dzItPmNocnMpOworICAgICAgICAgIGdvdG8gcmZjbGVhbnVwOworICAgICAgICB9CisgICAgICB9 CisgICAgZWxzZQorICAgICAgZm9yICh3MiA9IGhlYWQtPm5leHQ7ICB3MjsgIHcyID0gdzItPm5l eHQpCishICAgICAgIHdoaWxlICh3Mi0+d2lkdGggPiBMKSB7CisgICAgICAgICAgdzEgPSBtYWxs b2Moc2l6ZW9mICh3b3JkKSk7CisgICAgICAgICAgaWYgKCF3MSkgeworISAgICAgICAgICAgd2Nz Y3B5KGVycm1zZyxvdXRvZm1lbSk7CisgICAgICAgICAgICBnb3RvIHJmY2xlYW51cDsKKyAgICAg ICAgICB9CisgICAgICAgICAgdzEtPm5leHQgPSB3MjsKKyoqKioqKioqKioqKioqKgorKioqIDQy MCw0MjYgKioqKgorLS0tIDQ0OCw0NTYgLS0tLQorICAgICAgICAgIHcxLT5jaHJzID0gdzItPmNo cnM7CisgICAgICAgICAgdzItPmNocnMgKz0gTDsKKyAgICAgICAgICB3MS0+bGVuZ3RoID0gTDsK KysgICAgICAgICB3MS0+d2lkdGggPSBnZXRXaWR0aCh3MS0+Y2hycywgdzEtPmNocnMgKyBMKTsK KyAgICAgICAgICB3Mi0+bGVuZ3RoIC09IEw7CisrICAgICAgICAgdzItPndpZHRoIC09IHcxLT53 aWR0aDsKKyAgICAgICAgICB3MS0+ZmxhZ3MgPSAwOworICAgICAgICAgIGlmIChpc2NhcGl0YWwo dzIpKSB7CisgICAgICAgICAgICB3MS0+ZmxhZ3MgfD0gV19DQVBJVEFMOworKioqKioqKioqKioq KioqCisqKiogNDQ0LDQ1MiAqKioqCisgICAgICBMID0gMDsKKyAgICAgIHcxID0gaGVhZC0+bmV4 dDsKKyAgICAgIHdoaWxlICh3MSkgeworISAgICAgICBmb3IgKGxpbmVsZW4gPSB3MS0+bGVuZ3Ro LCB3MiA9IHcxLT5uZXh0OworICAgICAgICAgICAgIHcyICE9IHcxLT5uZXh0bGluZTsKKyEgICAg ICAgICAgICBsaW5lbGVuICs9IDEgKyBpc3NoaWZ0ZWQodzIpICsgdzItPmxlbmd0aCwgdzIgPSB3 Mi0+bmV4dCk7CisgICAgICAgIGlmIChsaW5lbGVuID4gTCkgTCA9IGxpbmVsZW47CisgICAgICAg IHcxID0gdzI7CisgICAgICB9CistLS0gNDc0LDQ4MiAtLS0tCisgICAgICBMID0gMDsKKyAgICAg IHcxID0gaGVhZC0+bmV4dDsKKyAgICAgIHdoaWxlICh3MSkgeworISAgICAgICBmb3IgKGxpbmVs ZW4gPSB3MS0+d2lkdGgsIHcyID0gdzEtPm5leHQ7CisgICAgICAgICAgICAgdzIgIT0gdzEtPm5l eHRsaW5lOworISAgICAgICAgICAgIGxpbmVsZW4gKz0gMSArIGlzc2hpZnRlZCh3MikgKyB3Mi0+ d2lkdGgsIHcyID0gdzItPm5leHQpOworICAgICAgICBpZiAobGluZWxlbiA+IEwpIEwgPSBsaW5l bGVuOworICAgICAgICB3MSA9IHcyOworICAgICAgfQorKioqKioqKioqKioqKioqCisqKiogNDU0 LDUyMCAqKioqCisgIAorICAvKiBDb25zdHJ1Y3QgdGhlIGxpbmVzOiAqLworICAKKyEgICBwYnVm ID0gbmV3YnVmZmVyKHNpemVvZiAoY2hhciAqKSwgZXJybXNnKTsKKyAgICBpZiAoKmVycm1zZykg Z290byByZmNsZWFudXA7CisgIAorICAgIG51bW91dCA9IDA7CisgICAgdzEgPSBoZWFkLT5uZXh0 OworICAgIHdoaWxlIChudW1vdXQgPCBoYW5nIHx8IHcxKSB7CisgICAgICBpZiAodzEpCishICAg ICAgIGZvciAodzIgPSB3MS0+bmV4dCwgbnVtZ2FwcyA9IDAsIGV4dHJhID0gTCAtIHcxLT5sZW5n dGg7CisgICAgICAgICAgICAgdzIgIT0gdzEtPm5leHRsaW5lOworISAgICAgICAgICAgICsrbnVt Z2FwcywgZXh0cmEgLT0gMSArIGlzc2hpZnRlZCh3MikgKyB3Mi0+bGVuZ3RoLCB3MiA9IHcyLT5u ZXh0KTsKKyAgICAgIGxpbmVsZW4gPSBzdWZmaXggfHwgKGp1c3QgJiYgKHcyIHx8IGxhc3QpKSA/ CisgICAgICAgICAgICAgICAgICBMICsgYWZmaXggOgorICAgICAgICAgICAgICAgICAgdzEgPyBw cmVmaXggKyBMIC0gZXh0cmEgOiBwcmVmaXg7CishICAgICBxMSA9IG1hbGxvYygobGluZWxlbiAr IDEpICogc2l6ZW9mIChjaGFyKSk7CisgICAgICBpZiAoIXExKSB7CishICAgICAgIHN0cmNweShl cnJtc2csb3V0b2ZtZW0pOworICAgICAgICBnb3RvIHJmY2xlYW51cDsKKyAgICAgIH0KKyAgICAg IGFkZGl0ZW0ocGJ1ZiwgJnExLCBlcnJtc2cpOworICAgICAgaWYgKCplcnJtc2cpIGdvdG8gcmZj bGVhbnVwOworICAgICAgKytudW1vdXQ7CisgICAgICBxMiA9IHExICsgcHJlZml4OworISAgICAg aWYgICAgICAobnVtb3V0IDw9IG51bWluKSBtZW1jcHkocTEsIGlubGluZXNbbnVtb3V0IC0gMV0s IHByZWZpeCk7CishICAgICBlbHNlIGlmIChudW1pbiAgPiAgaGFuZyApIG1lbWNweShxMSwgZW5k bGluZVstMV0sICAgICAgICAgcHJlZml4KTsKKyAgICAgIGVsc2UgeworICAgICAgICBpZiAoYWZw ID4gcHJlZml4KSBhZnAgPSBwcmVmaXg7CishICAgICAgIG1lbWNweShxMSwgZW5kbGluZVstMV0s IGFmcCk7CisgICAgICAgIHExICs9IGFmcDsKKyEgICAgICAgd2hpbGUgKHExIDwgcTIpICpxMSsr ID0gJyAnOworICAgICAgfQorICAgICAgcTEgPSBxMjsKKyAgICAgIGlmICh3MSkgeworICAgICAg ICBwaGFzZSA9IG51bWdhcHMgLyAyOworICAgICAgICBmb3IgKHcyID0gdzE7ICA7ICApIHsKKyEg ICAgICAgICBtZW1jcHkocTEsIHcyLT5jaHJzLCB3Mi0+bGVuZ3RoKTsKKyAgICAgICAgICBxMSAr PSB3Mi0+bGVuZ3RoOworICAgICAgICAgIHcyID0gdzItPm5leHQ7CisgICAgICAgICAgaWYgKHcy ID09IHcxLT5uZXh0bGluZSkgYnJlYWs7CishICAgICAgICAgKnExKysgPSAnICc7CisgICAgICAg ICAgaWYgKGp1c3QgJiYgKHcxLT5uZXh0bGluZSB8fCBsYXN0KSkgeworICAgICAgICAgICAgcGhh c2UgKz0gZXh0cmE7CisgICAgICAgICAgICB3aGlsZSAocGhhc2UgPj0gbnVtZ2FwcykgeworISAg ICAgICAgICAgICAqcTErKyA9ICcgJzsKKyAgICAgICAgICAgICAgcGhhc2UgLT0gbnVtZ2FwczsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CishICAgICAgICAgaWYgKGlzc2hpZnRlZCh3Mikp ICpxMSsrID0gJyAnOworICAgICAgICB9CisgICAgICB9CisgICAgICBxMiArPSBsaW5lbGVuIC0g YWZmaXg7CishICAgICB3aGlsZSAocTEgPCBxMikgKnExKysgPSAnICc7CisgICAgICBxMiA9IHEx ICsgc3VmZml4OworISAgICAgaWYgICAgICAobnVtb3V0IDw9IG51bWluKSBtZW1jcHkocTEsIHN1 ZmZpeGVzW251bW91dCAtIDFdLCBzdWZmaXgpOworISAgICAgZWxzZSBpZiAobnVtaW4gID4gIGhh bmcgKSBtZW1jcHkocTEsIHN1ZmZpeGVzW251bWluICAtIDFdLCBzdWZmaXgpOworICAgICAgZWxz ZSB7CisgICAgICAgIGlmIChmcyA+IHN1ZmZpeCkgZnMgPSBzdWZmaXg7CishICAgICAgIG1lbWNw eShxMSwgc3VmZml4ZXNbbnVtaW4gLSAxXSwgZnMpOworICAgICAgICBxMSArPSBmczsKKyEgICAg ICAgd2hpbGUocTEgPCBxMikgKnExKysgPSAnICc7CisgICAgICB9CishICAgICAqcTIgPSAnXDAn OworICAgICAgaWYgKHcxKSB3MSA9IHcxLT5uZXh0bGluZTsKKyAgICB9CisgIAorLS0tIDQ4NCw1 NTAgLS0tLQorICAKKyAgLyogQ29uc3RydWN0IHRoZSBsaW5lczogKi8KKyAgCishICAgcGJ1ZiA9 IG5ld2J1ZmZlcihzaXplb2YgKHdjaGFyX3QgKiksIGVycm1zZyk7CisgICAgaWYgKCplcnJtc2cp IGdvdG8gcmZjbGVhbnVwOworICAKKyAgICBudW1vdXQgPSAwOworICAgIHcxID0gaGVhZC0+bmV4 dDsKKyAgICB3aGlsZSAobnVtb3V0IDwgaGFuZyB8fCB3MSkgeworICAgICAgaWYgKHcxKQorISAg ICAgICBmb3IgKHcyID0gdzEtPm5leHQsIG51bWdhcHMgPSAwLCBleHRyYSA9IEwgLSB3MS0+d2lk dGg7CisgICAgICAgICAgICAgdzIgIT0gdzEtPm5leHRsaW5lOworISAgICAgICAgICAgICsrbnVt Z2FwcywgZXh0cmEgLT0gMSArIGlzc2hpZnRlZCh3MikgKyB3Mi0+d2lkdGgsIHcyID0gdzItPm5l eHQpOworICAgICAgbGluZWxlbiA9IHN1ZmZpeCB8fCAoanVzdCAmJiAodzIgfHwgbGFzdCkpID8K KyAgICAgICAgICAgICAgICAgIEwgKyBhZmZpeCA6CisgICAgICAgICAgICAgICAgICB3MSA/IHBy ZWZpeCArIEwgLSBleHRyYSA6IHByZWZpeDsKKyEgICAgIHExID0gbWFsbG9jKChsaW5lbGVuICsg MSkgKiBzaXplb2YgKHdjaGFyX3QpKTsKKyAgICAgIGlmICghcTEpIHsKKyEgICAgICAgd2NzY3B5 KGVycm1zZyxvdXRvZm1lbSk7CisgICAgICAgIGdvdG8gcmZjbGVhbnVwOworICAgICAgfQorICAg ICAgYWRkaXRlbShwYnVmLCAmcTEsIGVycm1zZyk7CisgICAgICBpZiAoKmVycm1zZykgZ290byBy ZmNsZWFudXA7CisgICAgICArK251bW91dDsKKyAgICAgIHEyID0gcTEgKyBwcmVmaXg7CishICAg ICBpZiAgICAgIChudW1vdXQgPD0gbnVtaW4pIG1lbWNweShxMSwgaW5saW5lc1tudW1vdXQgLSAx XSwgcHJlZml4ICogc2l6ZW9mKHdjaGFyX3QpKTsKKyEgICAgIGVsc2UgaWYgKG51bWluICA+ICBo YW5nICkgbWVtY3B5KHExLCBlbmRsaW5lWy0xXSwgICAgICAgICBwcmVmaXggKiBzaXplb2Yod2No YXJfdCkpOworICAgICAgZWxzZSB7CisgICAgICAgIGlmIChhZnAgPiBwcmVmaXgpIGFmcCA9IHBy ZWZpeDsKKyEgICAgICAgbWVtY3B5KHExLCBlbmRsaW5lWy0xXSwgYWZwICogc2l6ZW9mKHdjaGFy X3QpKTsKKyAgICAgICAgcTEgKz0gYWZwOworISAgICAgICB3aGlsZSAocTEgPCBxMikgKnExKysg PSBMJyAnOworICAgICAgfQorICAgICAgcTEgPSBxMjsKKyAgICAgIGlmICh3MSkgeworICAgICAg ICBwaGFzZSA9IG51bWdhcHMgLyAyOworICAgICAgICBmb3IgKHcyID0gdzE7ICA7ICApIHsKKyEg ICAgICAgICBtZW1jcHkocTEsIHcyLT5jaHJzLCB3Mi0+bGVuZ3RoICogc2l6ZW9mKHdjaGFyX3Qp KTsKKyAgICAgICAgICBxMSArPSB3Mi0+bGVuZ3RoOworICAgICAgICAgIHcyID0gdzItPm5leHQ7 CisgICAgICAgICAgaWYgKHcyID09IHcxLT5uZXh0bGluZSkgYnJlYWs7CishICAgICAgICAgKnEx KysgPSBMJyAnOworICAgICAgICAgIGlmIChqdXN0ICYmICh3MS0+bmV4dGxpbmUgfHwgbGFzdCkp IHsKKyAgICAgICAgICAgIHBoYXNlICs9IGV4dHJhOworICAgICAgICAgICAgd2hpbGUgKHBoYXNl ID49IG51bWdhcHMpIHsKKyEgICAgICAgICAgICAgKnExKysgPSBMJyAnOworICAgICAgICAgICAg ICBwaGFzZSAtPSBudW1nYXBzOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyEgICAgICAg ICBpZiAoaXNzaGlmdGVkKHcyKSkgKnExKysgPSBMJyAnOworICAgICAgICB9CisgICAgICB9Cisg ICAgICBxMiArPSBsaW5lbGVuIC0gYWZmaXg7CishICAgICB3aGlsZSAocTEgPCBxMikgKnExKysg PSBMJyAnOworICAgICAgcTIgPSBxMSArIHN1ZmZpeDsKKyEgICAgIGlmICAgICAgKG51bW91dCA8 PSBudW1pbikgbWVtY3B5KHExLCBzdWZmaXhlc1tudW1vdXQgLSAxXSwgc3VmZml4ICogc2l6ZW9m KHdjaGFyX3QpKTsKKyEgICAgIGVsc2UgaWYgKG51bWluICA+ICBoYW5nICkgbWVtY3B5KHExLCBz dWZmaXhlc1tudW1pbiAgLSAxXSwgc3VmZml4ICogc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICAgIGVs c2UgeworICAgICAgICBpZiAoZnMgPiBzdWZmaXgpIGZzID0gc3VmZml4OworISAgICAgICBtZW1j cHkocTEsIHN1ZmZpeGVzW251bWluIC0gMV0sIGZzICogc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICAg ICAgcTEgKz0gZnM7CishICAgICAgIHdoaWxlKHExIDwgcTIpICpxMSsrID0gTCcgJzsKKyAgICAg IH0KKyEgICAgICpxMiA9IEwnXDAnOworICAgICAgaWYgKHcxKSB3MSA9IHcxLT5uZXh0bGluZTsK KyAgICB9CisgIAorKioqKioqKioqKioqKioqCisqKiogNTQzLDU0NyAqKioqCistLS0gNTczLDU3 OCAtLS0tCisgICAgICBmcmVlYnVmZmVyKHBidWYpOworICAgIH0KKyAgCisrICAgCisgICAgcmV0 dXJuIG91dGxpbmVzOworICB9CitkaWZmIC1jIC4vcmVmb3JtYXQuaCAuLi9QYXIxNTItdW5pY29k ZS9yZWZvcm1hdC5oCisqKiogLi9yZWZvcm1hdC5oCTIwMDEtMDMtMDkgMDM6NTM6NDMuMDAwMDAw MDAwICswMzAwCistLS0gLi4vUGFyMTUyLXVuaWNvZGUvcmVmb3JtYXQuaAkyMDE5LTEwLTI2IDE3 OjIxOjA4LjU0OTA1MDg1MyArMDMwMAorKioqKioqKioqKioqKioqCisqKiogMSwxOCAqKioqCish IC8qKioqKioqKioqKioqKioqKioqKiovCishIC8qIHJlZm9ybWF0LmggICAgICAgICovCishIC8q IGZvciBQYXIgMS41MiAgICAgICovCishIC8qIENvcHlyaWdodCAyMDAxIGJ5ICovCishIC8qIEFk YW0gTS4gQ29zdGVsbG8gICovCishIC8qKioqKioqKioqKioqKioqKioqKiovCisgIAorICAvKiBU aGlzIGlzIEFOU0kgQyBjb2RlIChDODkpLiAqLworICAKKyAgCisgICNpbmNsdWRlICJlcnJtc2cu aCIKKyAgCishIAorISBjaGFyICoqcmVmb3JtYXQoCishICAgY29uc3QgY2hhciAqIGNvbnN0ICpp bmxpbmVzLCBjb25zdCBjaGFyICogY29uc3QgKmVuZGxpbmUsIGludCBhZnAsIGludCBmcywKKyAg ICBpbnQgaGFuZywgaW50IHByZWZpeCwgaW50IHN1ZmZpeCwgaW50IHdpZHRoLCBpbnQgY2FwLCBp bnQgZml0LCBpbnQgZ3Vlc3MsCisgICAgaW50IGp1c3QsIGludCBsYXN0LCBpbnQgUmVwb3J0LCBp bnQgdG91Y2gsIGVycm1zZ190IGVycm1zZworICApOworLS0tIDEsMjAgLS0tLQorISAvKioqKioq KioqKioqKioqKioqKioqKiovCishIC8qIHJlZm9ybWF0LmggICAgICAgICAgKi8KKyEgLyogZm9y IFBhciAxLjUyLWkxOG4uNCAqLworISAvKiBDb3B5cmlnaHQgMjAwMSBieSAgICovCishIC8qIEFk YW0gTS4gQ29zdGVsbG8gICAgKi8KKyEgLyogTW9kaWZpZWQgYnkgICAgICAgICAqLworISAvKiBK w6lyw7RtZSBQb3VpbGxlciAgICAgKi8KKyEgLyoqKioqKioqKioqKioqKioqKioqKioqLworICAK KyAgLyogVGhpcyBpcyBBTlNJIEMgY29kZSAoQzg5KS4gKi8KKyAgCisgIAorICAjaW5jbHVkZSAi ZXJybXNnLmgiCisrICNpbmNsdWRlIDx3Y2hhci5oPgorICAKKyEgd2NoYXJfdCAqKnJlZm9ybWF0 KAorISAgIGNvbnN0IHdjaGFyX3QgKiBjb25zdCAqaW5saW5lcywgY29uc3Qgd2NoYXJfdCAqIGNv bnN0ICplbmRsaW5lLCBpbnQgYWZwLCBpbnQgZnMsCisgICAgaW50IGhhbmcsIGludCBwcmVmaXgs IGludCBzdWZmaXgsIGludCB3aWR0aCwgaW50IGNhcCwgaW50IGZpdCwgaW50IGd1ZXNzLAorICAg IGludCBqdXN0LCBpbnQgbGFzdCwgaW50IFJlcG9ydCwgaW50IHRvdWNoLCBlcnJtc2dfdCBlcnJt c2cKKyAgKTsKK2RpZmYgLWMgLi9yZWxlYXNlbm90ZXMgLi4vUGFyMTUyLXVuaWNvZGUvcmVsZWFz ZW5vdGVzCisqKiogLi9yZWxlYXNlbm90ZXMJMjAwMS0wNC0zMCAwMToxMjowNS4wMDAwMDAwMDAg KzA0MDAKKy0tLSAuLi9QYXIxNTItdW5pY29kZS9yZWxlYXNlbm90ZXMJMjAxOS0xMC0yNiAxNzoy MTowOC41NDkwNTA4NTMgKzAzMDAKKyoqKioqKioqKioqKioqKgorKioqIDEsMTIgKioqKgorISAg ICoqKioqKioqKioqKioqKioqKioqKgorISAgICogcmVsZWFzZW5vdGVzICAgICAgKgorISAgICog Zm9yIFBhciAxLjUyICAgICAgKgorISAgICogQ29weXJpZ2h0IDIwMDEgYnkgKgorISAgICogQWRh bSBNLiBDb3N0ZWxsbyAgKgorISAgICoqKioqKioqKioqKioqKioqKioqKgorICAKKyAgCisgIEVh Y2ggZW50cnkgYmVsb3cgZGVzY3JpYmVzIGNoYW5nZXMgc2luY2UgdGhlIHByZXZpb3VzIHZlcnNp b24uCisgIAorICBQYXIgMS41MiByZWxlYXNlZCAyMDAxLUFwci0yOQorICAgICAgRml4ZWQgYSBw b3J0YWJpbGl0eSBwcm9ibGVtIHJlZ2FyZGluZyB1bnNpZ25lZCBjaGFyIHZlcnN1cyBjaGFyLgor LS0tIDEsMjggLS0tLQorISAgICoqKioqKioqKioqKioqKioqKioqKioqCishICAgKiByZWxlYXNl bm90ZXMgICAgICAgICoKKyEgICAqIGZvciBQYXIgMS41Mi1pMThuLjQgKgorISAgICogQ29weXJp Z2h0IDIwMDEgYnkgICAqCishICAgKiBBZGFtIE0uIENvc3RlbGxvICAgICoKKyEgICAqIE1vZGlm aWVkIGJ5ICAgICAgICAgKgorISAgICogSsOpcsO0bWUgUG91aWxsZXIgICAgICoKKyEgICAqKioq KioqKioqKioqKioqKioqKioqKgorICAKKyAgCisgIEVhY2ggZW50cnkgYmVsb3cgZGVzY3JpYmVz IGNoYW5nZXMgc2luY2UgdGhlIHByZXZpb3VzIHZlcnNpb24uCisrIFBhciAxLjUyLWkxOG4uNCBy ZWxlYXNlZCAyMDA5LU1heS0wNQorKyAgICAgQ2hhbmdlIG5lYXJseSBhbGwgY2hhciBpbiB3Y2hh cl90IHJlbW92ZSBuaWdodG1hcmUgb2YgdW5zaWduZWQgY2hhciB2cyBzaWduZWQgY2hhcgorKyAg ICAgRml4IGJ1Z3Mgd2l0aCBvcHRpb24gJ3EnCisrICAgICBGaXggYnVncyB3aXRoICdcbicKKysg CisrIFBhciAxLjUyLWkxOG4uMyByZWxlYXNlZCAyMDA2LU9jdC0wMworKyAgICAgRml4IGJ1ZyB3 aXRoIG9wdGlvbiAnZycKKysgCisrIFBhciAxLjUyLWkxOG4uMiByZWxlYXNlZCAyMDA2LUF1Zy0w MworKyAgICAgRml4IGJ1ZyBkZWJpYW4gIzMxMDQ5NS4KKysgCisrIFBhciAxLjUyLWkxOG4uMSBy ZWxlYXNlZCAyMDA2LUp1bi0yMgorKyAgICAgQ2hhbmdlZCBjaGFyIGluIHdjaGFyX3QuIEFsbG93 IHN1cHBvcnQgb2YgbXVsdGlieXRlcyBjaGFyYWN0ZXJzLgorKyAgICAgQWRkZWQgc3VwcG9ydCBm b3IgZG91YmxlLXdpZHRoIGNoYXJhY3RlcnMuCisgIAorICBQYXIgMS41MiByZWxlYXNlZCAyMDAx LUFwci0yOQorICAgICAgRml4ZWQgYSBwb3J0YWJpbGl0eSBwcm9ibGVtIHJlZ2FyZGluZyB1bnNp Z25lZCBjaGFyIHZlcnN1cyBjaGFyLgor0J7QsdGJ0LjQtSDQv9C+0LTQutCw0YLQsNC70L7Qs9C4 OiAuL3Rlc3Qg0LggLi4vUGFyMTUyLXVuaWNvZGUvdGVzdApkaWZmIC0tZ2l0IGEvc3JjcGtncy9w YXIvdGVtcGxhdGUgYi9zcmNwa2dzL3Bhci90ZW1wbGF0ZQppbmRleCA1ODVhODg4Nzg0MS4uNTQ3 NDcxMjliNzkgMTAwNjQ0Ci0tLSBhL3NyY3BrZ3MvcGFyL3RlbXBsYXRlCisrKyBiL3NyY3BrZ3Mv cGFyL3RlbXBsYXRlCkBAIC0xLDEyICsxLDEyIEBACiAjIFRlbXBsYXRlIGZpbGUgZm9yICdwYXIn CiBwa2duYW1lPXBhcgogdmVyc2lvbj0xLjUyCi1yZXZpc2lvbj0zCityZXZpc2lvbj00CiB3cmtz cmM9UGFyMTUyCiBidWlsZF9zdHlsZT1nbnUtY29uZmlndXJlCiBzaG9ydF9kZXNjPSJQYXJhZ3Jh cGggcmVmb3JtYXR0ZXIiCiBtYWludGFpbmVyPSJMZWFoIE5ldWtpcmNoZW4gPGxlYWhAdnV4dS5v cmc+IgotbGljZW5zZT0iY3VzdG9tIgorbGljZW5zZT0iY3VzdG9tOnBhciIKIGhvbWVwYWdlPSJo dHRwOi8vd3d3Lm5pY2VtaWNlLm5ldC9wYXIvIgogZGlzdGZpbGVzPSJodHRwOi8vd3d3Lm5pY2Vt aWNlLm5ldC9wYXIvUGFyMTUyLWF1dG9jb25mLnRhci5negogIGh0dHA6Ly93d3cubmljZW1pY2Uu bmV0L3Bhci9QYXIxNTIudGFyLmd6Igo= --===============5305932902403207556==--