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 89092ade for ; Sun, 27 Oct 2019 09:50:31 +0000 (UTC) Content-Type: multipart/mixed; boundary="===============7236211663868642391==" 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 10:50:31 +0100 Message-ID: <20191027095031.1haCFHOMdrt1oojfBw4kC0VCaTIo9nMgSW56B81gY_4@z> GitHub notification mails are now in MIME to allow UTF8. --===============7236211663868642391== MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 VGhlcmUgaXMgYW4gdXBkYXRlZCBwdWxsIHJlcXVlc3QgYnkgVmFsVGltY2hlbmtvIGFnYWluc3Qg bWFzdGVyIG9uIHRoZSB2b2lkLXBhY2thZ2VzIHJlcG9zaXRvcnkKCmh0dHBzOi8vZ2l0aHViLmNv bS9WYWxUaW1jaGVua28vdm9pZC1wYWNrYWdlcyBwYXItdW5pY29kZQpodHRwczovL2dpdGh1Yi5j b20vdm9pZC1saW51eC92b2lkLXBhY2thZ2VzL3B1bGwvMTU4MTIKCnBhcjogYWRkZWQgdW5pY29k ZSBzdXBwb3J0ClN1YmouIEp1c3QgYWRkZWQgdW5pY29kZSBwYXRjaCBtYWRlIGJ5IErDg8KpcsOD wrRtZSBQb3VpbGxlciBhcyBvZjogaHR0cDovL3N5c21pYy5vcmcvZG90Y2xlYXIvaW5kZXgucGhw P3Bvc3QvMjAwNi8wNi8yMi81NS1hZGQtbXVsdGlieXRlLWNoYXJhY3RlcnMtc3VwcG9ydC1pbi1w YXIKCkEgcGF0Y2ggZmlsZSBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS92b2lkLWxpbnV4L3ZvaWQt cGFja2FnZXMvcHVsbC8xNTgxMi5wYXRjaCBpcyBhdHRhY2hlZA== --===============7236211663868642391== Content-Type: text/x-diff MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="github-pr-par-unicode-15812.patch" RnJvbSA5NTFiZTRiMWUzMGExMWU1MGViNDU0OTNmMTJjNGZmZWUwZGE5YjYwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWYWxUaW1jaGVua28gPFZhbFRpbWNoZW5rb0BnbWFpbC5jb20+ CkRhdGU6IFNhdCwgMjYgT2N0IDIwMTkgMTc6MzU6MjkgKzAzMDAKU3ViamVjdDogW1BBVENIXSBw YXI6IGFkZCB1bmljb2RlIHBhdGNoCgotLS0KIHNyY3BrZ3MvcGFyL3BhdGNoZXMvcGFyLWkxOG4u cGF0Y2ggfCAyODU4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHNyY3BrZ3MvcGFyL3Rl bXBsYXRlICAgICAgICAgICAgICAgfCAgICAyICstCiAyIGZpbGVzIGNoYW5nZWQsIDI4NTkgaW5z ZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyY3BrZ3MvcGFy L3BhdGNoZXMvcGFyLWkxOG4ucGF0Y2gKCmRpZmYgLS1naXQgYS9zcmNwa2dzL3Bhci9wYXRjaGVz L3Bhci1pMThuLnBhdGNoIGIvc3JjcGtncy9wYXIvcGF0Y2hlcy9wYXItaTE4bi5wYXRjaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMjc1NTQyNWY3MDIKLS0tIC9kZXYv bnVsbAorKysgYi9zcmNwa2dzL3Bhci9wYXRjaGVzL3Bhci1pMThuLnBhdGNoCkBAIC0wLDAgKzEs Mjg1OCBAQAorZGlmZiAtYyAuL2J1ZmZlci5jIC4uL1BhcjE1Mi11bmljb2RlL2J1ZmZlci5jCisq KiogLi9idWZmZXIuYwkyMDAxLTAzLTA5IDAyOjUxOjExLjAwMDAwMDAwMCArMDMwMAorLS0tIC4u L1BhcjE1Mi11bmljb2RlL2J1ZmZlci5jCTIwMTktMTAtMjYgMTc6MjE6MDguNTQyMDUwODUzICsw MzAwCisqKioqKioqKioqKioqKioKKyoqKiAxLDkgKioqKgorISAvKioqKioqKioqKioqKioqKioq KioqLworISAvKiBidWZmZXIuYyAgICAgICAgICAqLworISAvKiBmb3IgUGFyIDEuNTIgICAgICAq LworISAvKiBDb3B5cmlnaHQgMjAwMSBieSAqLworISAvKiBBZGFtIE0uIENvc3RlbGxvICAqLwor ISAvKioqKioqKioqKioqKioqKioqKioqLworICAKKyAgLyogVGhpcyBpcyBBTlNJIEMgY29kZSAo Qzg5KS4gKi8KKyAgCistLS0gMSwxMSAtLS0tCishIC8qKioqKioqKioqKioqKioqKioqKioqKi8K KyEgLyogYnVmZmVyLmMgICAgICAgICAgICAqLworISAvKiBmb3IgUGFyIDEuNTItaTE4bi40ICov CishIC8qIENvcHlyaWdodCAyMDAxIGJ5ICAgKi8KKyEgLyogQWRhbSBNLiBDb3N0ZWxsbyAgICAq LworISAvKiBNb2RpZmllZCBieSAgICAgICAgICovCishIC8qIErDqXLDtG1lIFBvdWlsbGVyICAg ICAqLworISAvKioqKioqKioqKioqKioqKioqKioqKiovCisgIAorICAvKiBUaGlzIGlzIEFOU0kg QyBjb2RlIChDODkpLiAqLworICAKKyoqKioqKioqKioqKioqKgorKioqIDE4LDIzICoqKioKKy0t LSAyMCwyNiAtLS0tCisgIAorICAjaW5jbHVkZSA8c3RkbGliLmg+CisgICNpbmNsdWRlIDxzdHJp bmcuaD4KKysgI2luY2x1ZGUgPHdjaGFyLmg+CisgIAorICAjdW5kZWYgTlVMTAorICAjZGVmaW5l IE5VTEwgKCh2b2lkICopIDApCisqKioqKioqKioqKioqKioKKyoqKiA2MCw2NiAqKioqCisgICAg YmxrID0gbWFsbG9jKHNpemVvZiAoYmxvY2spKTsKKyAgICBpdGVtcyA9IG1hbGxvYyhtYXhoZXJl ICogaXRlbXNpemUpOworICAgIGlmICghYnVmIHx8ICFibGsgfHwgIWl0ZW1zKSB7CishICAgICBz dHJjcHkoZXJybXNnLG91dG9mbWVtKTsKKyAgICAgIGdvdG8gbmJlcnJvcjsKKyAgICB9CisgIAor LS0tIDYzLDY5IC0tLS0KKyAgICBibGsgPSBtYWxsb2Moc2l6ZW9mIChibG9jaykpOworICAgIGl0 ZW1zID0gbWFsbG9jKG1heGhlcmUgKiBpdGVtc2l6ZSk7CisgICAgaWYgKCFidWYgfHwgIWJsayB8 fCAhaXRlbXMpIHsKKyEgICAgIHdjc2NweShlcnJtc2csb3V0b2ZtZW0pOworICAgICAgZ290byBu YmVycm9yOworICAgIH0KKyAgCisqKioqKioqKioqKioqKioKKyoqKiAxMjcsMTMzICoqKioKKyAg ICAgICAgbmV3ID0gbWFsbG9jKHNpemVvZiAoYmxvY2spKTsKKyAgICAgICAgaXRlbXMgPSBtYWxs b2MobWF4aGVyZSAqIGl0ZW1zaXplKTsKKyAgICAgICAgaWYgKCFuZXcgfHwgIWl0ZW1zKSB7Cish ICAgICAgICAgc3RyY3B5KGVycm1zZyxvdXRvZm1lbSk7CisgICAgICAgICAgZ290byBhaWVycm9y OworICAgICAgICB9CisgICAgICAgIGJsay0+bmV4dCA9IG5ldzsKKy0tLSAxMzAsMTM2IC0tLS0K KyAgICAgICAgbmV3ID0gbWFsbG9jKHNpemVvZiAoYmxvY2spKTsKKyAgICAgICAgaXRlbXMgPSBt YWxsb2MobWF4aGVyZSAqIGl0ZW1zaXplKTsKKyAgICAgICAgaWYgKCFuZXcgfHwgIWl0ZW1zKSB7 CishICAgICAgICAgd2NzY3B5KGVycm1zZyxvdXRvZm1lbSk7CisgICAgICAgICAgZ290byBhaWVy cm9yOworICAgICAgICB9CisgICAgICAgIGJsay0+bmV4dCA9IG5ldzsKKyoqKioqKioqKioqKioq KgorKioqIDE3NCwxODAgKioqKgorICAKKyAgICByID0gbWFsbG9jKG4gKiBpdGVtc2l6ZSk7Cisg ICAgaWYgKCFyKSB7CishICAgICBzdHJjcHkoZXJybXNnLG91dG9mbWVtKTsKKyAgICAgIHJldHVy biBOVUxMOworICAgIH0KKyAgCistLS0gMTc3LDE4MyAtLS0tCisgIAorICAgIHIgPSBtYWxsb2Mo biAqIGl0ZW1zaXplKTsKKyAgICBpZiAoIXIpIHsKKyEgICAgIHdjc2NweShlcnJtc2csb3V0b2Zt ZW0pOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAKK2RpZmYgLWMgLi9idWZmZXIuaCAu Li9QYXIxNTItdW5pY29kZS9idWZmZXIuaAorKioqIC4vYnVmZmVyLmgJMjAwMS0wMy0wOSAwMjo1 MToyNS4wMDAwMDAwMDAgKzAzMDAKKy0tLSAuLi9QYXIxNTItdW5pY29kZS9idWZmZXIuaAkyMDE5 LTEwLTI2IDE3OjIxOjA4LjU0MzA1MDg1MyArMDMwMAorKioqKioqKioqKioqKioqCisqKiogMSw5 ICoqKioKKyEgLyoqKioqKioqKioqKioqKioqKioqKi8KKyEgLyogYnVmZmVyLmggICAgICAgICAg Ki8KKyEgLyogZm9yIFBhciAxLjUyICAgICAgKi8KKyEgLyogQ29weXJpZ2h0IDIwMDEgYnkgKi8K KyEgLyogQWRhbSBNLiBDb3N0ZWxsbyAgKi8KKyEgLyoqKioqKioqKioqKioqKioqKioqKi8KKyAg CisgIC8qIFRoaXMgaXMgQU5TSSBDIGNvZGUgKEM4OSkuICovCisgIAorLS0tIDEsMTEgLS0tLQor ISAvKioqKioqKioqKioqKioqKioqKioqKiovCishIC8qIGJ1ZmZlci5oICAgICAgICAgICAgKi8K KyEgLyogZm9yIFBhciAxLjUyLWkxOG4uNCAqLworISAvKiBDb3B5cmlnaHQgMjAwMSBieSAgICov CishIC8qIEFkYW0gTS4gQ29zdGVsbG8gICAgKi8KKyEgLyogTW9kaWZpZWQgYnkgICAgICAgICAq LworISAvKiBKw6lyw7RtZSBQb3VpbGxlciAgICAgKi8KKyEgLyoqKioqKioqKioqKioqKioqKioq KioqLworICAKKyAgLyogVGhpcyBpcyBBTlNJIEMgY29kZSAoQzg5KS4gKi8KKyAgCitkaWZmIC1j IC4vY2hhcnNldC5jIC4uL1BhcjE1Mi11bmljb2RlL2NoYXJzZXQuYworKioqIC4vY2hhcnNldC5j CTIwMDEtMDQtMDMgMDE6NTE6NDguMDAwMDAwMDAwICswNDAwCistLS0gLi4vUGFyMTUyLXVuaWNv ZGUvY2hhcnNldC5jCTIwMTktMTAtMjYgMTc6MjE6MDguNTQ0MDUwODUzICswMzAwCisqKioqKioq KioqKioqKioKKyoqKiAxLDkgKioqKgorISAvKioqKioqKioqKioqKioqKioqKioqLworISAvKiBj aGFyc2V0LmMgICAgICAgICAqLworISAvKiBmb3IgUGFyIDEuNTIgICAgICAqLworISAvKiBDb3B5 cmlnaHQgMjAwMSBieSAqLworISAvKiBBZGFtIE0uIENvc3RlbGxvICAqLworISAvKioqKioqKioq KioqKioqKioqKioqLworICAKKyAgLyogVGhpcyBpcyBBTlNJIEMgY29kZSAoQzg5KS4gKi8KKyAg CistLS0gMSwxMSAtLS0tCishIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKyEgLyogY2hhcnNl dC5jICAgICAgICAgICAqLworISAvKiBmb3IgUGFyIDEuNTItaTE4bi40ICovCishIC8qIENvcHly aWdodCAyMDAxIGJ5ICAgKi8KKyEgLyogQWRhbSBNLiBDb3N0ZWxsbyAgICAqLworISAvKiBNb2Rp ZmllZCBieSAgICAgICAgICovCishIC8qIErDqXLDtG1lIFBvdWlsbGVyICAgICAqLworISAvKioq KioqKioqKioqKioqKioqKioqKiovCisgIAorICAvKiBUaGlzIGlzIEFOU0kgQyBjb2RlIChDODkp LiAqLworICAKKyoqKioqKioqKioqKioqKgorKioqIDE4LDI1ICoqKioKKyAgICAgICAgICAgICAg ICAgICAgICAgIC8qIHByb3RvdHlwZXMuICBBbHNvIGluY2x1ZGVzICJlcnJtc2cuaCIuICovCisg ICNpbmNsdWRlICJidWZmZXIuaCIgICAvKiBBbHNvIGluY2x1ZGVzIDxzdGRkZWYuaD4uICAgICAg ICAgICAgICAqLworICAKKy0gI2luY2x1ZGUgPGN0eXBlLmg+CisgICNpbmNsdWRlIDxzdGRpby5o PgorICAjaW5jbHVkZSA8c3RkbGliLmg+CisgICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAgCistLS0g MjAsMjggLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvdG90eXBlcy4gIEFsc28g aW5jbHVkZXMgImVycm1zZy5oIi4gKi8KKyAgI2luY2x1ZGUgImJ1ZmZlci5oIiAgIC8qIEFsc28g aW5jbHVkZXMgPHN0ZGRlZi5oPi4gICAgICAgICAgICAgICovCisgIAorICAjaW5jbHVkZSA8c3Rk aW8uaD4KKysgI2luY2x1ZGUgPHdjaGFyLmg+CisrICNpbmNsdWRlIDx3Y3R5cGUuaD4KKyAgI2lu Y2x1ZGUgPHN0ZGxpYi5oPgorICAjaW5jbHVkZSA8c3RyaW5nLmg+CisgIAorKioqKioqKioqKioq KioqCisqKiogMzksNDYgKioqKgorICB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgY3NmbGFnX3Q7Cisg IAorICBzdHJ1Y3QgY2hhcnNldCB7CishICAgY2hhciAqaW5saXN0OyAgICAvKiBDaGFyYWN0ZXJz IGluIGlubGlzdCBhcmUgaW4gdGhlIHNldC4gICAgICAgICAgICAgICAgKi8KKyEgICBjaGFyICpv dXRsaXN0OyAgIC8qIENoYXJhY3RlcnMgaW4gb3V0bGlzdCBhcmUgbm90IGluIHRoZSBzZXQuICAg ICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgLyogaW5saXN0IGFuZCBvdXRsaXN0IG11 c3QgaGF2ZSBubyBjb21tb24gY2hhcmFjdGVycy4gICovCisgICAgICAgICAgICAgICAgICAgICAv KiBpbmxpc3QgYW5kIG91dGxpc3QgbWF5IGJlIE5VTEwsIHdoaWNoIGFjdHMgbGlrZSAiIi4gKi8K KyAgICBjc2ZsYWdfdCBmbGFnczsgIC8qIENoYXJhY3RlcnMgaW4gbmVpdGhlciBsaXN0IGFyZSBp biB0aGUgc2V0IGlmIHRoZXkgICAqLworLS0tIDQyLDQ5IC0tLS0KKyAgdHlwZWRlZiB1bnNpZ25l ZCBjaGFyIGNzZmxhZ190OworICAKKyAgc3RydWN0IGNoYXJzZXQgeworISAgIHdjaGFyX3QgKmlu bGlzdDsgICAgLyogQ2hhcmFjdGVycyBpbiBpbmxpc3QgYXJlIGluIHRoZSBzZXQuICAgICAgICAg ICAgICAgICovCishICAgd2NoYXJfdCAqb3V0bGlzdDsgICAvKiBDaGFyYWN0ZXJzIGluIG91dGxp c3QgYXJlIG5vdCBpbiB0aGUgc2V0LiAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAg IC8qIGlubGlzdCBhbmQgb3V0bGlzdCBtdXN0IGhhdmUgbm8gY29tbW9uIGNoYXJhY3RlcnMuICAq LworICAgICAgICAgICAgICAgICAgICAgLyogaW5saXN0IGFuZCBvdXRsaXN0IG1heSBiZSBOVUxM LCB3aGljaCBhY3RzIGxpa2UgIiIuICovCisgICAgY3NmbGFnX3QgZmxhZ3M7ICAvKiBDaGFyYWN0 ZXJzIGluIG5laXRoZXIgbGlzdCBhcmUgaW4gdGhlIHNldCBpZiB0aGV5ICAgKi8KKyoqKioqKioq KioqKioqKgorKioqIDU2LDgwICoqKioKKyAgICAgICAgICAgICAgICAgICAgICAgIENTX05VTCAg ID0gODsgIC8qIEluY2x1ZGVzIHRoZSBOVUwgY2hhcmFjdGVyLiAgICAgICovCisgIAorICAKKyEg c3RhdGljIGludCBhcHBlYXJzaW4oY2hhciBjLCBjb25zdCBjaGFyICpzdHIpCisgIAorICAvKiBS ZXR1cm5zIDAgaWYgYyBpcyAnXDAnIG9yIHN0ciBpcyBOVUxMIG9yIGMgICAgICovCisgIC8qIGRv ZXMgbm90IGFwcGVhciBpbiAqc3RyLiAgT3RoZXJ3aXNlIHJldHVybnMgMS4gKi8KKyAgeworISAg IHJldHVybiBjICYmIHN0ciAmJiBzdHJjaHIoc3RyLGMpOworICB9CisgIAorICAKKyEgc3RhdGlj IGludCBoZXhkaWd0b2ludChjaGFyIGMpCisgIAorICAvKiBSZXR1cm5zIHRoZSB2YWx1ZSByZXBy ZXNlbnRlZCBieSB0aGUgaGV4YWRlY2ltYWwgKi8KKyAgLyogZGlnaXQgYywgb3IgLTEgaWYgYyBp cyBub3QgYSBoZXhhZGVjaW1hbCBkaWdpdC4gICovCisgIHsKKyEgICBjb25zdCBjaGFyICpwLCAq IGNvbnN0IGhleGRpZ2l0cyA9ICIwMTIzNDU2Nzg5QUJDREVGYWJjZGVmIjsKKyAgICBpbnQgbjsK KyAgCisgICAgaWYgKCFjKSByZXR1cm4gLTE7CishICAgcCA9IHN0cmNocihoZXhkaWdpdHMsICoo dW5zaWduZWQgY2hhciAqKSZjKTsKKyAgICBpZiAoIXApIHJldHVybiAtMTsKKyAgICBuID0gcCAt IGhleGRpZ2l0czsKKyAgICBpZiAobiA+PSAxNikgbiAtPSA2OworLS0tIDU5LDgzIC0tLS0KKyAg ICAgICAgICAgICAgICAgICAgICAgIENTX05VTCAgID0gODsgIC8qIEluY2x1ZGVzIHRoZSBOVUwg Y2hhcmFjdGVyLiAgICAgICovCisgIAorICAKKyEgc3RhdGljIGludCBhcHBlYXJzaW4od2NoYXJf dCBjLCBjb25zdCB3Y2hhcl90ICpzdHIpCisgIAorICAvKiBSZXR1cm5zIDAgaWYgYyBpcyAnXDAn IG9yIHN0ciBpcyBOVUxMIG9yIGMgICAgICovCisgIC8qIGRvZXMgbm90IGFwcGVhciBpbiAqc3Ry LiAgT3RoZXJ3aXNlIHJldHVybnMgMS4gKi8KKyAgeworISAgIHJldHVybiBjICYmIHN0ciAmJiB3 Y3NjaHIoc3RyLGMpOworICB9CisgIAorICAKKyEgc3RhdGljIGludCBoZXhkaWd0b2ludCh3Y2hh cl90IGMpCisgIAorICAvKiBSZXR1cm5zIHRoZSB2YWx1ZSByZXByZXNlbnRlZCBieSB0aGUgaGV4 YWRlY2ltYWwgKi8KKyAgLyogZGlnaXQgYywgb3IgLTEgaWYgYyBpcyBub3QgYSBoZXhhZGVjaW1h bCBkaWdpdC4gICovCisgIHsKKyEgICBjb25zdCB3Y2hhcl90ICpwLCAqIGNvbnN0IGhleGRpZ2l0 cyA9IEwiMDEyMzQ1Njc4OUFCQ0RFRmFiY2RlZiI7CisgICAgaW50IG47CisgIAorICAgIGlmICgh YykgcmV0dXJuIC0xOworISAgIHAgPSB3Y3NjaHIoaGV4ZGlnaXRzLCBjKTsKKyAgICBpZiAoIXAp IHJldHVybiAtMTsKKyAgICBuID0gcCAtIGhleGRpZ2l0czsKKyAgICBpZiAobiA+PSAxNikgbiAt PSA2OworKioqKioqKioqKioqKioqCisqKiogODcsMTI1ICoqKioKKyAgfQorICAKKyAgCishIGNo YXJzZXQgKnBhcnNlY2hhcnNldChjb25zdCBjaGFyICpzdHIsIGVycm1zZ190IGVycm1zZykKKyAg eworICAgIGNoYXJzZXQgKmNzZXQgPSBOVUxMOworICAgIGJ1ZmZlciAqY2J1ZiA9IE5VTEw7Cish ICAgY29uc3QgY2hhciAqcCwgKiBjb25zdCBzaW5nbGVlc2NhcGVzID0gIl9zYnFReCI7CisgICAg aW50IGhleDEsIGhleDI7CishICAgY2hhciBjaDsKKyEgCisgICAgY3NldCA9IG1hbGxvYyhzaXpl b2YgKGNoYXJzZXQpKTsKKyAgICBpZiAoIWNzZXQpIHsKKyEgICAgIHN0cmNweShlcnJtc2csb3V0 b2ZtZW0pOworICAgICAgZ290byBwY3NlcnJvcjsKKyAgICB9CisgICAgY3NldC0+aW5saXN0ID0g Y3NldC0+b3V0bGlzdCA9IE5VTEw7CisgICAgY3NldC0+ZmxhZ3MgPSAwOworICAKKyEgICBjYnVm ID0gbmV3YnVmZmVyKHNpemVvZiAoY2hhciksIGVycm1zZyk7CisgICAgaWYgKCplcnJtc2cpIGdv dG8gcGNzZXJyb3I7CisgIAorICAgIGZvciAocCA9IHN0cjsgICpwOyAgKytwKQorISAgICAgaWYg KCpwID09ICdfJykgeworICAgICAgICArK3A7CisgICAgICAgIGlmIChhcHBlYXJzaW4oKnAsIHNp bmdsZWVzY2FwZXMpKSB7CishICAgICAgICAgaWYgICAgICAoKnAgPT0gJ18nKSBjaCA9ICdfJyA7 CishICAgICAgICAgZWxzZSBpZiAoKnAgPT0gJ3MnKSBjaCA9ICcgJyA7CishICAgICAgICAgZWxz ZSBpZiAoKnAgPT0gJ2InKSBjaCA9ICdcXCc7CishICAgICAgICAgZWxzZSBpZiAoKnAgPT0gJ3En KSBjaCA9ICdcJyc7CishICAgICAgICAgZWxzZSBpZiAoKnAgPT0gJ1EnKSBjaCA9ICdcIic7Cisg ICAgICAgICAgZWxzZSAvKiAgKnAgPT0gJ3gnICAqLyB7CisgICAgICAgICAgICBoZXgxID0gaGV4 ZGlndG9pbnQocFsxXSk7CisgICAgICAgICAgICBoZXgyID0gaGV4ZGlndG9pbnQocFsyXSk7Cisg ICAgICAgICAgICBpZiAoaGV4MSA8IDAgIHx8ICBoZXgyIDwgMCkgZ290byBwY3NiYWRzdHI7Cish ICAgICAgICAgICAqKHVuc2lnbmVkIGNoYXIgKikmY2ggPSAxNiAqIGhleDEgKyBoZXgyOworICAg ICAgICAgICAgcCArPSAyOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoIWNoKQorLS0tIDkw LDEyOSAtLS0tCisgIH0KKyAgCisgIAorISBjaGFyc2V0ICpwYXJzZWNoYXJzZXQoY29uc3Qgd2No YXJfdCAqc3RyLCBlcnJtc2dfdCBlcnJtc2cpCisgIHsKKyAgICBjaGFyc2V0ICpjc2V0ID0gTlVM TDsKKyAgICBidWZmZXIgKmNidWYgPSBOVUxMOworISAgIGNvbnN0IHdjaGFyX3QgKnAsICogY29u c3Qgc2luZ2xlZXNjYXBlcyA9IEwiX3NicVF4IjsKKyAgICBpbnQgaGV4MSwgaGV4MjsKKyEgICB3 Y2hhcl90IGNoOworISAgICAgICAKKyAgICBjc2V0ID0gbWFsbG9jKHNpemVvZiAoY2hhcnNldCkp OworICAgIGlmICghY3NldCkgeworISAgICAgd2NzY3B5KGVycm1zZyxvdXRvZm1lbSk7CisgICAg ICBnb3RvIHBjc2Vycm9yOworICAgIH0KKyAgICBjc2V0LT5pbmxpc3QgPSBjc2V0LT5vdXRsaXN0 ID0gTlVMTDsKKyAgICBjc2V0LT5mbGFncyA9IDA7CisgIAorISAgIGNidWYgPSBuZXdidWZmZXIo c2l6ZW9mICh3Y2hhcl90KSwgZXJybXNnKTsKKyAgICBpZiAoKmVycm1zZykgZ290byBwY3NlcnJv cjsKKyAgCisgICAgZm9yIChwID0gc3RyOyAgKnA7ICArK3ApCishICAgICBpZiAoKnAgPT0gTCdf JykgeworICAgICAgICArK3A7CisgICAgICAgIGlmIChhcHBlYXJzaW4oKnAsIHNpbmdsZWVzY2Fw ZXMpKSB7CishICAgICAgICAgaWYgICAgICAoKnAgPT0gTCdfJykgY2ggPSBMJ18nIDsKKyEgICAg ICAgICBlbHNlIGlmICgqcCA9PSBMJ3MnKSBjaCA9IEwnICcgOworISAgICAgICAgIGVsc2UgaWYg KCpwID09IEwnYicpIGNoID0gTCdcXCc7CishICAgICAgICAgZWxzZSBpZiAoKnAgPT0gTCdxJykg Y2ggPSBMJ1wnJzsKKyEgICAgICAgICBlbHNlIGlmICgqcCA9PSBMJ1EnKSBjaCA9IEwnXCInOwor ICAgICAgICAgIGVsc2UgLyogICpwID09ICd4JyAgKi8geworKyAgICAgICAgICAgLyogRklYTUUg X3ggbWV0YWNoYXJhY3RlciBzaG91bGQgYWxsb3cgd2lkZSBjaGFyYWN0ZXJzIGlucHV0LiovCisg ICAgICAgICAgICBoZXgxID0gaGV4ZGlndG9pbnQocFsxXSk7CisgICAgICAgICAgICBoZXgyID0g aGV4ZGlndG9pbnQocFsyXSk7CisgICAgICAgICAgICBpZiAoaGV4MSA8IDAgIHx8ICBoZXgyIDwg MCkgZ290byBwY3NiYWRzdHI7CishICAgICAgICAgICBjaCA9IDE2ICogaGV4MSArIGhleDI7Cisg ICAgICAgICAgICBwICs9IDI7CisgICAgICAgICAgfQorICAgICAgICAgIGlmICghY2gpCisqKioq KioqKioqKioqKioKKyoqKiAxMzAsMTQzICoqKioKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAg ICAgICAgZWxzZSB7CishICAgICAgICAgaWYgICAgICAoKnAgPT0gJ0EnKSBjc2V0LT5mbGFncyB8 PSBDU19VQ0FTRTsKKyEgICAgICAgICBlbHNlIGlmICgqcCA9PSAnYScpIGNzZXQtPmZsYWdzIHw9 IENTX0xDQVNFOworISAgICAgICAgIGVsc2UgaWYgKCpwID09ICcwJykgY3NldC0+ZmxhZ3MgfD0g Q1NfRElHSVQ7CisgICAgICAgICAgZWxzZSBnb3RvIHBjc2JhZHN0cjsKKyAgICAgICAgfQorICAg ICAgfQorICAgICAgZWxzZSB7CishICAgICAgIGFkZGl0ZW0oY2J1ZixwLGVycm1zZyk7CisgICAg ICAgIGlmICgqZXJybXNnKSBnb3RvIHBjc2Vycm9yOworICAgICAgfQorICAgIGNoID0gJ1wwJzsK Ky0tLSAxMzQsMTQ3IC0tLS0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7 CishICAgICAgICAgaWYgICAgICAoKnAgPT0gTCdBJykgY3NldC0+ZmxhZ3MgfD0gQ1NfVUNBU0U7 CishICAgICAgICAgZWxzZSBpZiAoKnAgPT0gTCdhJykgY3NldC0+ZmxhZ3MgfD0gQ1NfTENBU0U7 CishICAgICAgICAgZWxzZSBpZiAoKnAgPT0gTCcwJykgY3NldC0+ZmxhZ3MgfD0gQ1NfRElHSVQ7 CisgICAgICAgICAgZWxzZSBnb3RvIHBjc2JhZHN0cjsKKyAgICAgICAgfQorICAgICAgfQorICAg ICAgZWxzZSB7CishICAgICAgIGFkZGl0ZW0oY2J1ZiwgcCxlcnJtc2cpOworICAgICAgICBpZiAo KmVycm1zZykgZ290byBwY3NlcnJvcjsKKyAgICAgIH0KKyAgICBjaCA9ICdcMCc7CisqKioqKioq KioqKioqKioKKyoqKiAxNDksMTU5ICoqKioKKyAgcGNzY2xlYW51cDoKKyAgCisgICAgaWYgKGNi dWYpIGZyZWVidWZmZXIoY2J1Zik7CisgICAgcmV0dXJuIGNzZXQ7CisgIAorICBwY3NiYWRzdHI6 CisgIAorISAgIHNwcmludGYoZXJybXNnLCAiQmFkIGNoYXJzZXQgc3ludGF4OiAlLipzXG4iLCBl cnJtc2dfc2l6ZSAtIDIyLCBzdHIpOworICAKKyAgcGNzZXJyb3I6CisgIAorLS0tIDE1MywxNjQg LS0tLQorICBwY3NjbGVhbnVwOgorICAKKyAgICBpZiAoY2J1ZikgZnJlZWJ1ZmZlcihjYnVmKTsK KysgICAvL2lmICh3c3RyKSBmcmVlKHdzdHIpOworICAgIHJldHVybiBjc2V0OworICAKKyAgcGNz YmFkc3RyOgorICAKKyEgICBzd3ByaW50ZihlcnJtc2csIGVycm1zZ19zaXplLCBMIkJhZCBjaGFy c2V0IHN5bnRheDogJS4qc1xuIiwgZXJybXNnX3NpemUgLSAyMiwgc3RyKTsKKyAgCisgIHBjc2Vy cm9yOgorICAKKyoqKioqKioqKioqKioqKgorKioqIDE3MSwxODQgKioqKgorICB9CisgIAorICAK KyEgaW50IGNzbWVtYmVyKGNoYXIgYywgY29uc3QgY2hhcnNldCAqY3NldCkKKyAgeworICAgIHJl dHVybgorICAgICAgYXBwZWFyc2luKGMsIGNzZXQtPmlubGlzdCkgfHwKKyAgICAgICggIWFwcGVh cnNpbihjLCBjc2V0LT5vdXRsaXN0KSAmJgorISAgICAgICAoIChjc2V0LT5mbGFncyAmIENTX0xD QVNFICYmIGlzbG93ZXIoKih1bnNpZ25lZCBjaGFyICopJmMpKSB8fAorISAgICAgICAgIChjc2V0 LT5mbGFncyAmIENTX1VDQVNFICYmIGlzdXBwZXIoKih1bnNpZ25lZCBjaGFyICopJmMpKSB8fAor ISAgICAgICAgIChjc2V0LT5mbGFncyAmIENTX0RJR0lUICYmIGlzZGlnaXQoKih1bnNpZ25lZCBj aGFyICopJmMpKSB8fAorICAgICAgICAgIChjc2V0LT5mbGFncyAmIENTX05VTCAgICYmICFjICAg ICAgICAgICAgICAgICAgICAgICAgICAgKSAgICkgKTsKKyAgfQorICAKKy0tLSAxNzYsMTg5IC0t LS0KKyAgfQorICAKKyAgCishIGludCBjc21lbWJlcih3Y2hhcl90IGMsIGNvbnN0IGNoYXJzZXQg KmNzZXQpCisgIHsKKyAgICByZXR1cm4KKyAgICAgIGFwcGVhcnNpbihjLCBjc2V0LT5pbmxpc3Qp IHx8CisgICAgICAoICFhcHBlYXJzaW4oYywgY3NldC0+b3V0bGlzdCkgJiYKKyEgICAgICAgICAo IChjc2V0LT5mbGFncyAmIENTX0xDQVNFICYmIGlzd2xvd2VyKCood2ludF90ICopJmMpKSB8fAor ISAgICAgICAgICAgKGNzZXQtPmZsYWdzICYgQ1NfVUNBU0UgJiYgaXN3dXBwZXIoKih3aW50X3Qg KikmYykpIHx8CishICAgICAgICAgICAoY3NldC0+ZmxhZ3MgJiBDU19ESUdJVCAmJiBpc3dkaWdp dCgqKHdpbnRfdCAqKSZjKSkgfHwKKyAgICAgICAgICAoY3NldC0+ZmxhZ3MgJiBDU19OVUwgICAm JiAhYyAgICAgICAgICAgICAgICAgICAgICAgICAgICkgICApICk7CisgIH0KKyAgCisqKioqKioq KioqKioqKioKKyoqKiAxOTEsMjA2ICoqKioKKyAgeworICAgIGNoYXJzZXQgKmNzdTsKKyAgICBi dWZmZXIgKmluYnVmID0gTlVMTCwgKm91dGJ1ZiA9IE5VTEw7CishICAgY2hhciAqbGlzdHNbNF0s ICoqbGlzdCwgKnAsIG51bGxjaGFyID0gJ1wwJzsKKyAgCisgICAgY3N1ID0gbWFsbG9jKHNpemVv ZiAoY2hhcnNldCkpOworICAgIGlmICghY3N1KSB7CishICAgICBzdHJjcHkoZXJybXNnLG91dG9m bWVtKTsKKyAgICAgIGdvdG8gY3N1ZGVycm9yOworICAgIH0KKyEgICBpbmJ1ZiA9IG5ld2J1ZmZl cihzaXplb2YgKGNoYXIpLCBlcnJtc2cpOworICAgIGlmICgqZXJybXNnKSBnb3RvIGNzdWRlcnJv cjsKKyEgICBvdXRidWYgPSBuZXdidWZmZXIoc2l6ZW9mIChjaGFyKSwgZXJybXNnKTsKKyAgICBp ZiAoKmVycm1zZykgZ290byBjc3VkZXJyb3I7CisgICAgY3N1LT5pbmxpc3QgPSBjc3UtPm91dGxp c3QgPSBOVUxMOworICAgIGNzdS0+ZmxhZ3MgPSAgdSAgPyAgY3NldDEtPmZsYWdzIHwgIGNzZXQy LT5mbGFncworLS0tIDE5NiwyMTEgLS0tLQorICB7CisgICAgY2hhcnNldCAqY3N1OworICAgIGJ1 ZmZlciAqaW5idWYgPSBOVUxMLCAqb3V0YnVmID0gTlVMTDsKKyEgICB3Y2hhcl90ICpsaXN0c1s0 XSwgKipsaXN0LCAqcCwgbnVsbGNoYXIgPSBMJ1wwJzsKKyAgCisgICAgY3N1ID0gbWFsbG9jKHNp emVvZiAoY2hhcnNldCkpOworICAgIGlmICghY3N1KSB7CishICAgICB3Y3NjcHkoZXJybXNnLG91 dG9mbWVtKTsKKyAgICAgIGdvdG8gY3N1ZGVycm9yOworICAgIH0KKyEgICBpbmJ1ZiA9IG5ld2J1 ZmZlcihzaXplb2YgKHdjaGFyX3QpLCBlcnJtc2cpOworICAgIGlmICgqZXJybXNnKSBnb3RvIGNz dWRlcnJvcjsKKyEgICBvdXRidWYgPSBuZXdidWZmZXIoc2l6ZW9mICh3Y2hhcl90KSwgZXJybXNn KTsKKyAgICBpZiAoKmVycm1zZykgZ290byBjc3VkZXJyb3I7CisgICAgY3N1LT5pbmxpc3QgPSBj c3UtPm91dGxpc3QgPSBOVUxMOworICAgIGNzdS0+ZmxhZ3MgPSAgdSAgPyAgY3NldDEtPmZsYWdz IHwgIGNzZXQyLT5mbGFncworZGlmZiAtYyAuL2NoYXJzZXQuaCAuLi9QYXIxNTItdW5pY29kZS9j aGFyc2V0LmgKKyoqKiAuL2NoYXJzZXQuaAkyMDAxLTAzLTA5IDAzOjUwOjM1LjAwMDAwMDAwMCAr MDMwMAorLS0tIC4uL1BhcjE1Mi11bmljb2RlL2NoYXJzZXQuaAkyMDE5LTEwLTI2IDE3OjIxOjA4 LjU0NDA1MDg1MyArMDMwMAorKioqKioqKioqKioqKioqCisqKiogMSw5ICoqKioKKyEgLyoqKioq KioqKioqKioqKioqKioqKi8KKyEgLyogY2hhcnNldC5oICAgICAgICAgKi8KKyEgLyogZm9yIFBh ciAxLjUyICAgICAgKi8KKyEgLyogQ29weXJpZ2h0IDIwMDEgYnkgKi8KKyEgLyogQWRhbSBNLiBD b3N0ZWxsbyAgKi8KKyEgLyoqKioqKioqKioqKioqKioqKioqKi8KKyAgCisgIC8qIFRoaXMgaXMg QU5TSSBDIGNvZGUgKEM4OSkuICovCisgIAorLS0tIDEsMTEgLS0tLQorISAvKioqKioqKioqKioq KioqKioqKioqKiovCishIC8qIGNoYXJzZXQuaCAgICAgICAgICAgKi8KKyEgLyogZm9yIFBhciAx LjUyLWkxOG4uNCAqLworISAvKiBDb3B5cmlnaHQgMjAwMSBieSAgICovCishIC8qIEFkYW0gTS4g Q29zdGVsbG8gICAgKi8KKyEgLyogTW9kaWZpZWQgYnkgICAgICAgICAqLworISAvKiBKw6lyw7Rt ZSBQb3VpbGxlciAgICAgKi8KKyEgLyoqKioqKioqKioqKioqKioqKioqKioqLworICAKKyAgLyog VGhpcyBpcyBBTlNJIEMgY29kZSAoQzg5KS4gKi8KKyAgCisqKioqKioqKioqKioqKioKKyoqKiAx MSwyNCAqKioqCisgIC8qIE5vdGU6IFRob3NlIGZ1bmN0aW9ucyBkZWNsYXJlZCBoZXJlIHdoaWNo IGRvIG5vdCB1c2UgZXJybXNnICAgICovCisgIC8qIGFsd2F5cyBzdWNjZWVkLCBwcm92aWRlZCB0 aGF0IHRoZXkgYXJlIHBhc3NlZCB2YWxpZCBhcmd1bWVudHMuICovCisgIAorISAKKyAgI2luY2x1 ZGUgImVycm1zZy5oIgorICAKKyAgCisgIHR5cGVkZWYgc3RydWN0IGNoYXJzZXQgY2hhcnNldDsK KyAgCisgIAorISBjaGFyc2V0ICpwYXJzZWNoYXJzZXQoY29uc3QgY2hhciAqc3RyLCBlcnJtc2df dCBlcnJtc2cpOworICAKKyAgICAvKiBwYXJzZWNoYXJzZXQoc3RyLGVycm1zZykgcmV0dXJucyB0 aGUgc2V0IG9mIGNoYXJhY3RlcnMgZGVmaW5lZCBieSAqLworICAgIC8qIHN0ciB1c2luZyBjaGFy c2V0IHN5bnRheCAoc2VlIHBhci5kb2MpLiAgUmV0dXJucyBOVUxMIG9uIGZhaWx1cmUuICovCist LS0gMTMsMjYgLS0tLQorICAvKiBOb3RlOiBUaG9zZSBmdW5jdGlvbnMgZGVjbGFyZWQgaGVyZSB3 aGljaCBkbyBub3QgdXNlIGVycm1zZyAgICAqLworICAvKiBhbHdheXMgc3VjY2VlZCwgcHJvdmlk ZWQgdGhhdCB0aGV5IGFyZSBwYXNzZWQgdmFsaWQgYXJndW1lbnRzLiAqLworICAKKyEgI2luY2x1 ZGUgPHdjaGFyLmg+CisgICNpbmNsdWRlICJlcnJtc2cuaCIKKyAgCisgIAorICB0eXBlZGVmIHN0 cnVjdCBjaGFyc2V0IGNoYXJzZXQ7CisgIAorICAKKyEgY2hhcnNldCAqcGFyc2VjaGFyc2V0KGNv bnN0IHdjaGFyX3QgKnN0ciwgZXJybXNnX3QgZXJybXNnKTsKKyAgCisgICAgLyogcGFyc2VjaGFy c2V0KHN0cixlcnJtc2cpIHJldHVybnMgdGhlIHNldCBvZiBjaGFyYWN0ZXJzIGRlZmluZWQgYnkg Ki8KKyAgICAvKiBzdHIgdXNpbmcgY2hhcnNldCBzeW50YXggKHNlZSBwYXIuZG9jKS4gIFJldHVy bnMgTlVMTCBvbiBmYWlsdXJlLiAqLworKioqKioqKioqKioqKioqCisqKiogMzAsMzYgKioqKgor ICAgIC8qICpjc2V0LiAgY3NldCBtYXkgbm90IGJlIHVzZWQgYWZ0ZXIgdGhpcyBjYWxsLiAgICAg ICovCisgIAorICAKKyEgaW50IGNzbWVtYmVyKGNoYXIgYywgY29uc3QgY2hhcnNldCAqY3NldCk7 CisgIAorICAgIC8qIGNzbWVtYmVyKGMsY3NldCkgcmV0dXJucyAxIGlmIGMgaXMgYSBtZW1iZXIg b2YgKmNzZXQsIDAgb3RoZXJ3aXNlLiAqLworICAKKy0tLSAzMiwzOCAtLS0tCisgICAgLyogKmNz ZXQuICBjc2V0IG1heSBub3QgYmUgdXNlZCBhZnRlciB0aGlzIGNhbGwuICAgICAgKi8KKyAgCisg IAorISBpbnQgY3NtZW1iZXIod2NoYXJfdCBjLCBjb25zdCBjaGFyc2V0ICpjc2V0KTsKKyAgCisg ICAgLyogY3NtZW1iZXIoYyxjc2V0KSByZXR1cm5zIDEgaWYgYyBpcyBhIG1lbWJlciBvZiAqY3Nl dCwgMCBvdGhlcndpc2UuICovCisgIAorZGlmZiAtYyAuL2Vycm1zZy5jIC4uL1BhcjE1Mi11bmlj b2RlL2Vycm1zZy5jCisqKiogLi9lcnJtc2cuYwkyMDAxLTAzLTA5IDAzOjUwOjQ2LjAwMDAwMDAw MCArMDMwMAorLS0tIC4uL1BhcjE1Mi11bmljb2RlL2Vycm1zZy5jCTIwMTktMTAtMjYgMTc6MjE6 MDguNTQ1MDUwODUzICswMzAwCisqKioqKioqKioqKioqKioKKyoqKiAxLDkgKioqKgorISAvKioq KioqKioqKioqKioqKioqKioqLworISAvKiBlcnJtc2cuYyAgICAgICAgICAqLworISAvKiBmb3Ig UGFyIDEuNTIgICAgICAqLworISAvKiBDb3B5cmlnaHQgMjAwMSBieSAqLworISAvKiBBZGFtIE0u IENvc3RlbGxvICAqLworISAvKioqKioqKioqKioqKioqKioqKioqLworICAKKyAgLyogVGhpcyBp cyBBTlNJIEMgY29kZSAoQzg5KS4gKi8KKyAgCistLS0gMSwxMSAtLS0tCishIC8qKioqKioqKioq KioqKioqKioqKioqKi8KKyEgLyogZXJybXNnLmMgICAgICAgICAgICAqLworISAvKiBmb3IgUGFy IDEuNTItaTE4bi40ICovCishIC8qIENvcHlyaWdodCAyMDAxIGJ5ICAgKi8KKyEgLyogQWRhbSBN LiBDb3N0ZWxsbyAgICAqLworISAvKiBNb2RpZmllZCBieSAgICAgICAgICovCishIC8qIErDqXLD tG1lIFBvdWlsbGVyICAgICAqLworISAvKioqKioqKioqKioqKioqKioqKioqKiovCisgIAorICAv KiBUaGlzIGlzIEFOU0kgQyBjb2RlIChDODkpLiAqLworICAKKyoqKioqKioqKioqKioqKgorKioq IDExLDE4ICoqKioKKyAgI2luY2x1ZGUgImVycm1zZy5oIiAgLyogTWFrZXMgc3VyZSB3ZSdyZSBj b25zaXN0ZW50IHdpdGggdGhlIGRlY2xhcmF0aW9ucy4gKi8KKyAgCisgIAorISBjb25zdCBjaGFy ICogY29uc3Qgb3V0b2ZtZW0gPQorISAgICJPdXQgb2YgbWVtb3J5LlxuIjsKKyAgCishIGNvbnN0 IGNoYXIgKiBjb25zdCBpbXBvc3NpYmlsaXR5ID0KKyEgICAiSW1wb3NzaWJpbGl0eSAjJWQgaGFz IG9jY3VycmVkLiAgUGxlYXNlIHJlcG9ydCBpdC5cbiI7CistLS0gMTMsMjMgLS0tLQorICAjaW5j bHVkZSAiZXJybXNnLmgiICAvKiBNYWtlcyBzdXJlIHdlJ3JlIGNvbnNpc3RlbnQgd2l0aCB0aGUg ZGVjbGFyYXRpb25zLiAqLworICAKKyAgCishIGNvbnN0IHdjaGFyX3QgKiBjb25zdCBvdXRvZm1l bSA9CishICAgTCJPdXQgb2YgbWVtb3J5LlxuIjsKKyAgCishIGNvbnN0IHdjaGFyX3QgKiBjb25z dCBtYnNlcnJvciA9CishICAgTCJFcnJvciBpbiBpbnB1dCBtdWx0aWJ5dGUgc3RyaW5nLlxuIjsK KyEgCishIGNvbnN0IHdjaGFyX3QgKiBjb25zdCBpbXBvc3NpYmlsaXR5ID0KKyEgICBMIkltcG9z c2liaWxpdHkgIyVkIGhhcyBvY2N1cnJlZC4gIFBsZWFzZSByZXBvcnQgaXQuXG4iOworZGlmZiAt YyAuL2Vycm1zZy5oIC4uL1BhcjE1Mi11bmljb2RlL2Vycm1zZy5oCisqKiogLi9lcnJtc2cuaAky MDAxLTAzLTA5IDAzOjUwOjU2LjAwMDAwMDAwMCArMDMwMAorLS0tIC4uL1BhcjE1Mi11bmljb2Rl L2Vycm1zZy5oCTIwMTktMTAtMjYgMTc6MjE6MDguNTQ1MDUwODUzICswMzAwCisqKioqKioqKioq KioqKioKKyoqKiAxLDkgKioqKgorISAvKioqKioqKioqKioqKioqKioqKioqLworISAvKiBlcnJt c2cuaCAgICAgICAgICAqLworISAvKiBmb3IgUGFyIDEuNTIgICAgICAqLworISAvKiBDb3B5cmln aHQgMjAwMSBieSAqLworISAvKiBBZGFtIE0uIENvc3RlbGxvICAqLworISAvKioqKioqKioqKioq KioqKioqKioqLworICAKKyAgLyogVGhpcyBpcyBBTlNJIEMgY29kZSAoQzg5KS4gKi8KKyAgCist LS0gMSwxMSAtLS0tCishIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKyEgLyogZXJybXNnLmgg ICAgICAgICAgICAqLworISAvKiBmb3IgUGFyIDEuNTItaTE4bi40ICovCishIC8qIENvcHlyaWdo dCAyMDAxIGJ5ICAgKi8KKyEgLyogQWRhbSBNLiBDb3N0ZWxsbyAgICAqLworISAvKiBNb2RpZmll ZCBieSAgICAgICAgICovCishIC8qIErDqXLDtG1lIFBvdWlsbGVyICAgICAqLworISAvKioqKioq KioqKioqKioqKioqKioqKiovCisgIAorICAvKiBUaGlzIGlzIEFOU0kgQyBjb2RlIChDODkpLiAq LworICAKKyoqKioqKioqKioqKioqKgorKioqIDExLDE3ICoqKioKKyAgI2lmbmRlZiBFUlJNU0df SAorICAjZGVmaW5lIEVSUk1TR19ICisgIAorISAKKyAgI2RlZmluZSBlcnJtc2dfc2l6ZSAxNjMK KyAgCisgIC8qIFRoaXMgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCB3 aWxsICAqLworLS0tIDEzLDE5IC0tLS0KKyAgI2lmbmRlZiBFUlJNU0dfSAorICAjZGVmaW5lIEVS Uk1TR19ICisgIAorISAjaW5jbHVkZSA8d2NoYXIuaD4KKyAgI2RlZmluZSBlcnJtc2dfc2l6ZSAx NjMKKyAgCisgIC8qIFRoaXMgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhh dCB3aWxsICAqLworKioqKioqKioqKioqKioqCisqKiogMjAsMjYgKioqKgorICAvKiB2ZXJzaW9u cyBvZiB0aGlzIGhlYWRlciBmaWxlLiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgCisgIAor ISB0eXBlZGVmIGNoYXIgZXJybXNnX3RbZXJybXNnX3NpemVdOworICAKKyAgLyogQW55IGZ1bmN0 aW9uIHdoaWNoIHRha2VzIHRoZSBhcmd1bWVudCBlcnJtc2dfdCBlcnJtc2cgbXVzdCwgYmVmb3Jl ICovCisgIC8qIHJldHVybmluZywgZWl0aGVyIHNldCBlcnJtc2dbMF0gdG8gJ1wwJyAoaW5kaWNh dGluZyBzdWNjZXNzKSwgb3IgICAqLworLS0tIDIyLDI4IC0tLS0KKyAgLyogdmVyc2lvbnMgb2Yg dGhpcyBoZWFkZXIgZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICovCisgIAorICAKKyEgdHlw ZWRlZiB3Y2hhcl90IGVycm1zZ190W2Vycm1zZ19zaXplXTsKKyAgCisgIC8qIEFueSBmdW5jdGlv biB3aGljaCB0YWtlcyB0aGUgYXJndW1lbnQgZXJybXNnX3QgZXJybXNnIG11c3QsIGJlZm9yZSAq LworICAvKiByZXR1cm5pbmcsIGVpdGhlciBzZXQgZXJybXNnWzBdIHRvICdcMCcgKGluZGljYXRp bmcgc3VjY2VzcyksIG9yICAgKi8KKyoqKioqKioqKioqKioqKgorKioqIDI4LDM3ICoqKioKKyAg LyogYmVpbmcgY2FyZWZ1bCBub3QgdG8gb3ZlcnJ1biB0aGUgc3BhY2UuICAgICAgICAgICAgICAg ICAgICAgICAgICAgICovCisgIAorICAKKyEgZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBvdXRv Zm1lbTsKKyAgICAvKiAiT3V0IG9mIG1lbW9yeS5cbiIgKi8KKyAgCishIGV4dGVybiBjb25zdCBj aGFyICogY29uc3QgaW1wb3NzaWJpbGl0eTsKKyAgICAvKiAiSW1wb3NzaWJpbGl0eSAjJWQgaGFz IG9jY3VycmVkLiAgUGxlYXNlIHJlcG9ydCBpdC5cbiIgKi8KKyAgCisgIAorLS0tIDMwLDQyIC0t LS0KKyAgLyogYmVpbmcgY2FyZWZ1bCBub3QgdG8gb3ZlcnJ1biB0aGUgc3BhY2UuICAgICAgICAg ICAgICAgICAgICAgICAgICAgICovCisgIAorICAKKyEgZXh0ZXJuIGNvbnN0IHdjaGFyX3QgKiBj b25zdCBvdXRvZm1lbTsKKyAgICAvKiAiT3V0IG9mIG1lbW9yeS5cbiIgKi8KKyAgCishIGV4dGVy biBjb25zdCB3Y2hhcl90ICogY29uc3QgbWJzZXJyb3I7CishICAgLyogIkVycm9yIGluIGlucHV0 IG11bHRpYnl0ZSBzdHJpbmcuXG4iICovCishICAgCishIGV4dGVybiBjb25zdCB3Y2hhcl90ICog Y29uc3QgaW1wb3NzaWJpbGl0eTsKKyAgICAvKiAiSW1wb3NzaWJpbGl0eSAjJWQgaGFzIG9jY3Vy cmVkLiAgUGxlYXNlIHJlcG9ydCBpdC5cbiIgKi8KKyAgCisgIAorZGlmZiAtYyAuL3Bhci4xIC4u L1BhcjE1Mi11bmljb2RlL3Bhci4xCisqKiogLi9wYXIuMQkyMDAxLTA0LTMwIDAxOjE2OjIyLjAw MDAwMDAwMCArMDQwMAorLS0tIC4uL1BhcjE1Mi11bmljb2RlL3Bhci4xCTIwMTktMTAtMjYgMTc6 MjE6MDguNTQ2MDUwODUzICswMzAwCisqKioqKioqKioqKioqKioKKyoqKiAxLDYgKioqKgorICAu XCIqKioqKioqKioqKioqKioqKioqKioKKyAgLlwiKiBwYXIuMSAgICAgICAgICAgICAqCishIC5c IiogZm9yIFBhciAxLjUyICAgICAgKgorICAuXCIqIENvcHlyaWdodCAyMDAxIGJ5ICoKKyAgLlwi KiBBZGFtIE0uIENvc3RlbGxvICAqCisgIC5cIioqKioqKioqKioqKioqKioqKioqKgorLS0tIDEs NiAtLS0tCisgIC5cIioqKioqKioqKioqKioqKioqKioqKgorICAuXCIqIHBhci4xICAgICAgICAg ICAgICoKKyEgLlwiKiBmb3IgUGFyIDEuNTIgaTE4biAqCisgIC5cIiogQ29weXJpZ2h0IDIwMDEg YnkgKgorICAuXCIqIEFkYW0gTS4gQ29zdGVsbG8gICoKKyAgLlwiKioqKioqKioqKioqKioqKioq KioqCitkaWZmIC1jIC4vcGFyLmMgLi4vUGFyMTUyLXVuaWNvZGUvcGFyLmMKKyoqKiAuL3Bhci5j CTIwMDEtMDQtMDIgMDg6MjU6NTcuMDAwMDAwMDAwICswNDAwCistLS0gLi4vUGFyMTUyLXVuaWNv ZGUvcGFyLmMJMjAxOS0xMC0yNiAxNzoyMTowOC41NDcwNTA4NTMgKzAzMDAKKyoqKioqKioqKioq KioqKgorKioqIDEsOSAqKioqCishIC8qKioqKioqKioqKioqKioqKioqKiovCishIC8qIHBhci5j ICAgICAgICAgICAgICovCishIC8qIGZvciBQYXIgMS41MiAgICAgICovCishIC8qIENvcHlyaWdo dCAyMDAxIGJ5ICovCishIC8qIEFkYW0gTS4gQ29zdGVsbG8gICovCishIC8qKioqKioqKioqKioq KioqKioqKiovCisgIAorICAvKiBUaGlzIGlzIEFOU0kgQyBjb2RlIChDODkpLiAqLworICAKKy0t LSAxLDExIC0tLS0KKyEgLyoqKioqKioqKioqKioqKioqKioqKioqLworISAvKiBwYXIuYyAgICAg ICAgICAgICAgICovCishIC8qIGZvciBQYXIgMS41Mi1pMThuLjQgKi8KKyEgLyogQ29weXJpZ2h0 IDIwMDEgYnkgICAqLworISAvKiBBZGFtIE0uIENvc3RlbGxvICAgICovCishIC8qIE1vZGlmaWVk IGJ5ICAgICAgICAgKi8KKyEgLyogSsOpcsO0bWUgUG91aWxsZXIgICAgICovCishIC8qKioqKioq KioqKioqKioqKioqKioqKi8KKyAgCisgIC8qIFRoaXMgaXMgQU5TSSBDIGNvZGUgKEM4OSkuICov CisgIAorKioqKioqKioqKioqKioqCisqKiogMTIsMjIgKioqKgorICAjaW5jbHVkZSAiYnVmZmVy LmgiICAgIC8qIEFsc28gaW5jbHVkZXMgPHN0ZGRlZi5oPi4gKi8KKyAgI2luY2x1ZGUgInJlZm9y bWF0LmgiCisgIAorISAjaW5jbHVkZSA8Y3R5cGUuaD4KKyAgI2luY2x1ZGUgPGxvY2FsZS5oPgor ICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICAjaW5jbHVkZSA8 c3RyaW5nLmg+CisgIAorICAjdW5kZWYgTlVMTAorICAjZGVmaW5lIE5VTEwgKCh2b2lkICopIDAp CistLS0gMTQsMjcgLS0tLQorICAjaW5jbHVkZSAiYnVmZmVyLmgiICAgIC8qIEFsc28gaW5jbHVk ZXMgPHN0ZGRlZi5oPi4gKi8KKyAgI2luY2x1ZGUgInJlZm9ybWF0LmgiCisgIAorISAjaW5jbHVk ZSA8bGFuZ2luZm8uaD4KKyEgI2luY2x1ZGUgPHdjaGFyLmg+CishICNpbmNsdWRlIDx3Y3R5cGUu aD4KKyAgI2luY2x1ZGUgPGxvY2FsZS5oPgorICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgI2luY2x1 ZGUgPHN0ZGxpYi5oPgorICAjaW5jbHVkZSA8c3RyaW5nLmg+CisrICNpbmNsdWRlIDxlcnJuby5o PgorICAKKyAgI3VuZGVmIE5VTEwKKyAgI2RlZmluZSBOVUxMICgodm9pZCAqKSAwKQorKioqKioq KioqKioqKioqCisqKiogMjUsODAgKioqKgorICAjZGVmaW5lIGZyZWUocHRyKQorICAjZW5kaWYK KyAgCistIAorLSAvKj09PQorLSAKKy0gUmVnYXJkaW5nIGNoYXIgYW5kIHVuc2lnbmVkIGNoYXI6 ICBBTlNJIEMgaXMgYSBuaWdodG1hcmUgaW4gdGhpcworLSByZXNwZWN0LiAgU29tZSBmdW5jdGlv bnMsIGxpa2UgcHV0cygpLCBzdHJjaHIoKSwgYW5kIGdldGVudigpLCB1c2UgY2hhcgorLSBvciBj aGFyKiwgc28gdGhleSB3b3JrIHdlbGwgd2l0aCBjaGFyYWN0ZXIgY29uc3RhbnRzIGxpa2UgJ2En LCB3aGljaAorLSBhcmUgY2hhciwgYW5kIHdpdGggYXJndiwgd2hpY2ggaXMgY2hhcioqLiAgQnV0 IHNldmVyYWwgb3RoZXIgZnVuY3Rpb25zLAorLSBsaWtlIGdldGNoYXIoKSwgcHV0Y2hhcigpLCBh bmQgaXNkaWdpdCgpLCB1c2UgdW5zaWduZWQgY2hhciAoY29udmVydGVkCistIHRvL2Zyb20gaW50 KS4gIFRoZXJlZm9yZSBpbm5vY2VudC1sb29raW5nIGNvZGUgY2FuIGJlIHdyb25nLCBmb3IKKy0g ZXhhbXBsZToKKy0gCistICAgICBpbnQgYyA9IGdldGNoYXIoKTsKKy0gICAgIGlmIChjID09ICdh JykgLi4uCistIAorLSBUaGlzIGlzIHdyb25nIGJlY2F1c2UgJ2EnIGlzIGNoYXIgKGNvbnZlcnRl ZCB0byBpbnQpIGFuZCBjb3VsZCBiZQorLSBuZWdhdGl2ZSwgYnV0IGdldGNoYXIoKSByZXR1cm5z IHVuc2lnbmVkIGNoYXIgKGNvbnZlcnRlZCB0byBpbnQpLCBzbyBjCistIGlzIGFsd2F5cyBub25u ZWdhdGl2ZSBvciBFT0YuICBGb3Igc2ltaWxhciByZWFzb25zLCBpdCBpcyB3cm9uZyB0byBwYXNz CistIGEgY2hhciB0byBhIGZ1bmN0aW9uIHRoYXQgZXhwZWN0cyBhbiB1bnNpZ25lZCBjaGFyOgor LSAKKy0gICAgIHB1dGNoYXIoJ1xuJyk7CistICAgICBpZiAoaXNkaWdpdChhcmd2WzFdWzBdKSkg Li4uCistIAorLSBJbmV2aXRhYmx5LCB3ZSBuZWVkIHRvIGNvbnZlcnQgYmV0d2VlbiBjaGFyIGFu ZCB1bnNpZ25lZCBjaGFyLiAgVGhpcyBjYW4KKy0gYmUgZG9uZSBieSBpbnRlZ3JhbCBjb252ZXJz aW9uIChjYXN0aW5nIG9yIGFzc2lnbmluZyBhIGNoYXIgdG8gdW5zaWduZWQKKy0gY2hhciBvciB2 aWNlIHZlcnNhKSwgb3IgYnkgYWxpYXNpbmcgKGNvbnZlcnRpbmcgYSBwb2ludGVyIHRvIGNoYXIg dG8KKy0gYSBwb2ludGVyIHRvIHVuc2lnbmVkIGNoYXIgKG9yIHZpY2UgdmVyc2EpIGFuZCB0aGVu IGRlcmVmZXJlbmNpbmcKKy0gaXQpLiAgQU5TSSBDIHJlcXVpcmVzIHRoYXQgaW50ZWdyYWwgY29u dmVyc2lvbiBhbHRlcnMgdGhlIGJpdHMgd2hlbiB0aGUKKy0gdW5zaWduZWQgdmFsdWUgaXMgbm90 IHJlcHJlc2VudGFibGUgaW4gdGhlIHNpZ25lZCB0eXBlIGFuZCB0aGUgc2lnbmVkCistIHR5cGUg ZG9lcyBub3QgdXNlIHR3bydzIGNvbXBsZW1lbnQgcmVwcmVzZW50YXRpb24uICBBbGlhc2luZywg b24gdGhlCistIG90aGVyIGhhbmQsIHByZXNlcnZlcyB0aGUgYml0cy4gIEFsdGhvdWdoIHRoZSBD IHN0YW5kYXJkIGlzIG5vdCBhdCBhbGwKKy0gY2xlYXIgYWJvdXQgd2hpY2ggc29ydCBvZiBjb252 ZXJzaW9uIGlzIGFwcHJvcHJpYXRlIGZvciBtYWtpbmcgdGhlCistIHN0YW5kYXJkIGxpYnJhcnkg ZnVuY3Rpb25zIGludGVyb3BlcmF0ZSwgSSB0aGluayBwcmVzZXJ2aW5nIHRoZSBiaXRzCistIGlz IHdoYXQgaXMgbmVlZGVkLiAgVW5kZXIgdGhhdCBhc3N1bXB0aW9uLCBoZXJlIGFyZSBzb21lIGV4 YW1wbGVzIG9mCistIGNvcnJlY3QgY29kZToKKy0gCistICAgICBpbnQgYyA9IGdldGNoYXIoKTsK Ky0gICAgIGNoYXIgY2g7CistIAorLSAgICAgaWYgKGMgIT0gRU9GKSB7CistICAgICAgICoodW5z aWduZWQgY2hhciAqKSZjaCA9IGM7CistICAgICAgIGlmIChjaCA9PSAnYScpIC4uLgorLSAgICAg ICBpZiAoaXNkaWdpdChjKSkgLi4uCistICAgICB9CistIAorLSAgICAgY2hhciAqcyA9IC4uLgor LSAgICAgaWYgKGlzZGlnaXQoKih1bnNpZ25lZCBjaGFyICopcykpIC4uLgorLSAKKy0gPT09Ki8K Ky0gCistIAorICBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHVzYWdlbXNnID0KKyAgIlxuIgor ICAiT3B0aW9ucyBmb3IgcGFyOlxuIgorLS0tIDMwLDM1IC0tLS0KKyoqKioqKioqKioqKioqKgor KioqIDEyNiwxMzIgKioqKgorICAgICAgICAgICAgICAgICAgICAvKiBsaW5lLCBvciB0aGUgZmFs bGJhY2sgcHJlbGVuIGFuZCBzdWZsZW4gICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgLyog b2YgdGhlIElQIGNvbnRhaW5pbmcgYSBub24tYm9kaWxlc3MgbGluZS4gICAgICovCisgICAgbGZs YWdfdCBmbGFnczsgIC8qIEJvb2xlYW4gcHJvcGVydGllcyAoc2VlIGJlbG93KS4gICAgICAgICAg ICAgICAqLworISAgIGNoYXIgcmM7ICAgICAgICAvKiBUaGUgcmVwZWF0ZWQgY2hhcmFjdGVyIG9m IGEgYm9kaWxlc3MgbGluZS4gICAgKi8KKyAgfSBsaW5lcHJvcDsKKyAgCisgIC8qIEZsYWdzIGZv ciBtYXJraW5nIGJvb2xlYW4gcHJvcGVydGllczogKi8KKy0tLSA4MSw4NyAtLS0tCisgICAgICAg ICAgICAgICAgICAgIC8qIGxpbmUsIG9yIHRoZSBmYWxsYmFjayBwcmVsZW4gYW5kIHN1ZmxlbiAg ICAgICAqLworICAgICAgICAgICAgICAgICAgICAvKiBvZiB0aGUgSVAgY29udGFpbmluZyBhIG5v bi1ib2RpbGVzcyBsaW5lLiAgICAgKi8KKyAgICBsZmxhZ190IGZsYWdzOyAgLyogQm9vbGVhbiBw cm9wZXJ0aWVzIChzZWUgYmVsb3cpLiAgICAgICAgICAgICAgICovCishICAgd2NoYXJfdCByYzsg ICAgIC8qIFRoZSByZXBlYXRlZCBjaGFyYWN0ZXIgb2YgYSBib2RpbGVzcyBsaW5lLiAgICAqLwor ICB9IGxpbmVwcm9wOworICAKKyAgLyogRmxhZ3MgZm9yIG1hcmtpbmcgYm9vbGVhbiBwcm9wZXJ0 aWVzOiAqLworKioqKioqKioqKioqKioqCisqKiogMTQzLDE1NiAqKioqCisgICNkZWZpbmUgICBp c3ZhY2FudChwcm9wKSAoaXNib2RpbGVzcyhwcm9wKSAmJiAocHJvcCktPnJjID09ICcgJykKKyAg CisgIAorISBzdGF0aWMgaW50IGRpZ3RvaW50KGNoYXIgYykKKyAgCisgIC8qIFJldHVybnMgdGhl IHZhbHVlIHJlcHJlc2VudGVkIGJ5IHRoZSBkaWdpdCBjLCBvciAtMSBpZiBjIGlzIG5vdCBhIGRp Z2l0LiAqLworICB7CishICAgY29uc3QgY2hhciAqcCwgKiBjb25zdCBkaWdpdHMgPSAiMDEyMzQ1 Njc4OSI7CisgIAorICAgIGlmICghYykgcmV0dXJuIC0xOworISAgIHAgPSBzdHJjaHIoZGlnaXRz LGMpOworICAgIHJldHVybiAgcCAgPyAgcCAtIGRpZ2l0cyAgOiAgLTE7CisgIAorICAgIC8qIFdl IGNhbid0IHNpbXBseSByZXR1cm4gYyAtICcwJyBiZWNhdXNlIHRoaXMgaXMgQU5TSSBDIGNvZGUs ICAqLworLS0tIDk4LDExMSAtLS0tCisgICNkZWZpbmUgICBpc3ZhY2FudChwcm9wKSAoaXNib2Rp bGVzcyhwcm9wKSAmJiAocHJvcCktPnJjID09ICcgJykKKyAgCisgIAorISBzdGF0aWMgaW50IGRp Z3RvaW50KHdjaGFyX3QgYykKKyAgCisgIC8qIFJldHVybnMgdGhlIHZhbHVlIHJlcHJlc2VudGVk IGJ5IHRoZSBkaWdpdCBjLCBvciAtMSBpZiBjIGlzIG5vdCBhIGRpZ2l0LiAqLworICB7CishICAg Y29uc3Qgd2NoYXJfdCAqcCwgKiBjb25zdCBkaWdpdHMgPSBMIjAxMjM0NTY3ODkiOworICAKKyAg ICBpZiAoIWMpIHJldHVybiAtMTsKKyEgICBwID0gd2NzY2hyKGRpZ2l0cyxjKTsKKyAgICByZXR1 cm4gIHAgID8gIHAgLSBkaWdpdHMgIDogIC0xOworICAKKyAgICAvKiBXZSBjYW4ndCBzaW1wbHkg cmV0dXJuIGMgLSAnMCcgYmVjYXVzZSB0aGlzIGlzIEFOU0kgQyBjb2RlLCAgKi8KKyoqKioqKioq KioqKioqKgorKioqIDE2MSwxNjcgKioqKgorICB9CisgIAorICAKKyEgc3RhdGljIGludCBzdHJ0 b3VkZWMoY29uc3QgY2hhciAqcywgaW50ICpwbikKKyAgCisgIC8qIENvbnZlcnRzIHRoZSBsb25n ZXN0IHByZWZpeCBvZiBzdHJpbmcgcyBjb25zaXN0aW5nIG9mIGRlY2ltYWwgICAqLworICAvKiBk aWdpdHMgdG8gYW4gaW50ZWdlciwgd2hpY2ggaXMgc3RvcmVkIGluICpwbi4gIE5vcm1hbGx5IHJl dHVybnMgKi8KKy0tLSAxMTYsMTIyIC0tLS0KKyAgfQorICAKKyAgCishIHN0YXRpYyBpbnQgc3Ry dG91ZGVjKGNvbnN0IHdjaGFyX3QgKnMsIGludCAqcG4pCisgIAorICAvKiBDb252ZXJ0cyB0aGUg bG9uZ2VzdCBwcmVmaXggb2Ygc3RyaW5nIHMgY29uc2lzdGluZyBvZiBkZWNpbWFsICAgKi8KKyAg LyogZGlnaXRzIHRvIGFuIGludGVnZXIsIHdoaWNoIGlzIHN0b3JlZCBpbiAqcG4uICBOb3JtYWxs eSByZXR1cm5zICovCisqKioqKioqKioqKioqKioKKyoqKiAxODcsMTkzICoqKioKKyAgCisgIAor ICBzdGF0aWMgdm9pZCBwYXJzZWFyZygKKyEgICBjb25zdCBjaGFyICphcmcsIGludCAqcGhlbHAs IGludCAqcHZlcnNpb24sIGNoYXJzZXQgKmJvZHljaGFycywgY2hhcnNldAorICAgICpwcm90ZWN0 Y2hhcnMsIGNoYXJzZXQgKnF1b3RlY2hhcnMsIGludCAqcGhhbmcsIGludCAqcHByZWZpeCwgaW50 ICpwcmVwZWF0LAorICAgIGludCAqcHN1ZmZpeCwgaW50ICpwVGFiLCBpbnQgKnB3aWR0aCwgaW50 ICpwYm9keSwgaW50ICpwY2FwLCBpbnQgKnBkaXYsIGludAorICAgICpwRXJyLCBpbnQgKnBleHBl bCwgaW50ICpwZml0LCBpbnQgKnBndWVzcywgaW50ICpwaW52aXMsIGludCAqcGp1c3QsIGludAor LS0tIDE0MiwxNDggLS0tLQorICAKKyAgCisgIHN0YXRpYyB2b2lkIHBhcnNlYXJnKAorISAgIGNv bnN0IHdjaGFyX3QgKmFyZywgaW50ICpwaGVscCwgaW50ICpwdmVyc2lvbiwgY2hhcnNldCAqYm9k eWNoYXJzLCBjaGFyc2V0CisgICAgKnByb3RlY3RjaGFycywgY2hhcnNldCAqcXVvdGVjaGFycywg aW50ICpwaGFuZywgaW50ICpwcHJlZml4LCBpbnQgKnByZXBlYXQsCisgICAgaW50ICpwc3VmZml4 LCBpbnQgKnBUYWIsIGludCAqcHdpZHRoLCBpbnQgKnBib2R5LCBpbnQgKnBjYXAsIGludCAqcGRp diwgaW50CisgICAgKnBFcnIsIGludCAqcGV4cGVsLCBpbnQgKnBmaXQsIGludCAqcGd1ZXNzLCBp bnQgKnBpbnZpcywgaW50ICpwanVzdCwgaW50CisqKioqKioqKioqKioqKioKKyoqKiAxOTcsMjc0 ICoqKioKKyAgLyogYnkgdGhlIG90aGVyIHBvaW50ZXJzIGFzIGFwcHJvcHJpYXRlLiAgKnBoZWxw IGFuZCAqcHZlcnNpb24gYXJlIGJvb2xlYW4gICovCisgIC8qIGZsYWdzIGluZGljYXRpbmcgd2hl dGhlciB0aGUgaGVscCBhbmQgdmVyc2lvbiBvcHRpb25zIHdlcmUgc3VwcGxpZWQuICAgICAqLwor ICB7CishICAgY29uc3QgY2hhciAqc2F2ZWFyZyA9IGFyZzsKKyAgICBjaGFyc2V0ICpjaGFycywg KmNoYW5nZTsKKyEgICBjaGFyIG9jOworICAgIGludCBuOworICAKKyAgICAqZXJybXNnID0gJ1ww JzsKKyAgCishICAgaWYgKCphcmcgPT0gJy0nKSArK2FyZzsKKyEgCishICAgaWYgKCFzdHJjbXAo YXJnLCAiaGVscCIpKSB7CisgICAgICAqcGhlbHAgPSAxOworICAgICAgcmV0dXJuOworICAgIH0K KyAgCishICAgaWYgKCFzdHJjbXAoYXJnLCAidmVyc2lvbiIpKSB7CisgICAgICAqcHZlcnNpb24g PSAxOworICAgICAgcmV0dXJuOworICAgIH0KKyAgCishICAgaWYgKCphcmcgPT0gJ0InIHx8ICph cmcgPT0gJ1AnIHx8ICphcmcgPT0gJ1EnICkgeworISAgICAgY2hhcnMgPSAgKmFyZyA9PSAnQicg ID8gIGJvZHljaGFycyAgICA6CishICAgICAgICAgICAgICAqYXJnID09ICdQJyAgPyAgcHJvdGVj dGNoYXJzIDoKKyEgICAgICAgICAgIC8qICphcmcgPT0gJ1EnICovICBxdW90ZWNoYXJzICAgOwor ICAgICAgKythcmc7CishICAgICBpZiAoKmFyZyAhPSAnPScgICYmICAqYXJnICE9ICcrJyAgJiYg ICphcmcgIT0gJy0nKSBnb3RvIGJhZGFyZzsKKyAgICAgIGNoYW5nZSA9IHBhcnNlY2hhcnNldChh cmcgKyAxLCBlcnJtc2cpOworICAgICAgaWYgKGNoYW5nZSkgeworISAgICAgICBpZiAgICAgICgq YXJnID09ICc9JykgICBjc3N3YXAoY2hhcnMsY2hhbmdlKTsKKyEgICAgICAgZWxzZSBpZiAoKmFy ZyA9PSAnKycpICAgY3NhZGQoY2hhcnMsY2hhbmdlLGVycm1zZyk7CishICAgICAgIGVsc2UgIC8q ICphcmcgPT0gJy0nICovIGNzcmVtb3ZlKGNoYXJzLGNoYW5nZSxlcnJtc2cpOworICAgICAgICBm cmVlY2hhcnNldChjaGFuZ2UpOworICAgICAgfQorICAgICAgcmV0dXJuOworICAgIH0KKyAgCish ICAgaWYgKGlzZGlnaXQoKih1bnNpZ25lZCBjaGFyICopYXJnKSkgeworICAgICAgaWYgKCFzdHJ0 b3VkZWMoYXJnLCAmbikpIGdvdG8gYmFkYXJnOworICAgICAgaWYgKG4gPD0gOCkgKnBwcmVmaXgg PSBuOworICAgICAgZWxzZSAqcHdpZHRoID0gbjsKKyAgICB9CisgIAorICAgIGZvciAoOzspIHsK KyEgICAgIHdoaWxlIChpc2RpZ2l0KCoodW5zaWduZWQgY2hhciAqKWFyZykpICsrYXJnOworICAg ICAgb2MgPSAqYXJnOworICAgICAgaWYgKCFvYykgYnJlYWs7CisgICAgICBuID0gLTE7CisgICAg ICBpZiAoIXN0cnRvdWRlYygrK2FyZywgJm4pKSBnb3RvIGJhZGFyZzsKKyEgICAgIGlmICggICBv YyA9PSAnaCcgfHwgb2MgPT0gJ3AnIHx8IG9jID09ICdyJworISAgICAgICAgIHx8IG9jID09ICdz JyB8fCBvYyA9PSAnVCcgfHwgb2MgPT0gJ3cnKSB7CishICAgICAgIGlmICAgICAgKG9jID09ICdo JykgICAqcGhhbmcgICA9ICBuID49IDAgPyBuIDogIDE7CishICAgICAgIGVsc2UgaWYgKG9jID09 ICdwJykgICAqcHByZWZpeCA9ICBuOworISAgICAgICBlbHNlIGlmIChvYyA9PSAncicpICAgKnBy ZXBlYXQgPSAgbiA+PSAwID8gbiA6ICAzOworISAgICAgICBlbHNlIGlmIChvYyA9PSAncycpICAg KnBzdWZmaXggPSAgbjsKKyEgICAgICAgZWxzZSBpZiAob2MgPT0gJ1QnKSAgICpwVGFiICAgID0g IG4gPj0gMCA/IG4gOiAgODsKKyEgICAgICAgZWxzZSAgLyogb2MgPT0gJ3cnICovICpwd2lkdGgg ID0gIG4gPj0gMCA/IG4gOiA3OTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBpZiAo biA8IDApIG4gPSAxOworICAgICAgICBpZiAobiA+IDEpIGdvdG8gYmFkYXJnOworISAgICAgICBp ZiAgICAgIChvYyA9PSAnYicpICpwYm9keSAgID0gbjsKKyEgICAgICAgZWxzZSBpZiAob2MgPT0g J2MnKSAqcGNhcCAgICA9IG47CishICAgICAgIGVsc2UgaWYgKG9jID09ICdkJykgKnBkaXYgICAg PSBuOworISAgICAgICBlbHNlIGlmIChvYyA9PSAnRScpICpwRXJyICAgID0gbjsKKyEgICAgICAg ZWxzZSBpZiAob2MgPT0gJ2UnKSAqcGV4cGVsICA9IG47CishICAgICAgIGVsc2UgaWYgKG9jID09 ICdmJykgKnBmaXQgICAgPSBuOworISAgICAgICBlbHNlIGlmIChvYyA9PSAnZycpICpwZ3Vlc3Mg ID0gbjsKKyEgICAgICAgZWxzZSBpZiAob2MgPT0gJ2knKSAqcGludmlzICA9IG47CishICAgICAg IGVsc2UgaWYgKG9jID09ICdqJykgKnBqdXN0ICAgPSBuOworISAgICAgICBlbHNlIGlmIChvYyA9 PSAnbCcpICpwbGFzdCAgID0gbjsKKyEgICAgICAgZWxzZSBpZiAob2MgPT0gJ3EnKSAqcHF1b3Rl ICA9IG47CishICAgICAgIGVsc2UgaWYgKG9jID09ICdSJykgKnBSZXBvcnQgPSBuOworISAgICAg ICBlbHNlIGlmIChvYyA9PSAndCcpICpwdG91Y2ggID0gbjsKKyAgICAgICAgZWxzZSBnb3RvIGJh ZGFyZzsKKyAgICAgIH0KKyAgICB9CistLS0gMTUyLDIyOSAtLS0tCisgIC8qIGJ5IHRoZSBvdGhl ciBwb2ludGVycyBhcyBhcHByb3ByaWF0ZS4gICpwaGVscCBhbmQgKnB2ZXJzaW9uIGFyZSBib29s ZWFuICAqLworICAvKiBmbGFncyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGhlbHAgYW5kIHZlcnNp b24gb3B0aW9ucyB3ZXJlIHN1cHBsaWVkLiAgICAgKi8KKyAgeworISAgIGNvbnN0IHdjaGFyX3Qg KnNhdmVhcmcgPSBhcmc7CisgICAgY2hhcnNldCAqY2hhcnMsICpjaGFuZ2U7CishICAgd2NoYXJf dCBvYzsKKyAgICBpbnQgbjsKKyAgCisgICAgKmVycm1zZyA9ICdcMCc7CisrICAgCisrICAgaWYg KCphcmcgPT0gTCctJykgKythcmc7CisgIAorISAgIGlmICghd2NzY21wKGFyZywgTCJoZWxwIikp IHsKKyAgICAgICpwaGVscCA9IDE7CisgICAgICByZXR1cm47CisgICAgfQorICAKKyEgICBpZiAo IXdjc2NtcChhcmcsIEwidmVyc2lvbiIpKSB7CisgICAgICAqcHZlcnNpb24gPSAxOworICAgICAg cmV0dXJuOworICAgIH0KKyAgCishICAgaWYgKCphcmcgPT0gTCdCJyB8fCAqYXJnID09IEwnUCcg fHwgKmFyZyA9PSBMJ1EnICkgeworISAgICAgY2hhcnMgPSAgKmFyZyA9PSBMJ0InICA/ICBib2R5 Y2hhcnMgICAgOgorISAgICAgICAgICAgICAgKmFyZyA9PSBMJ1AnICA/ICBwcm90ZWN0Y2hhcnMg OgorISAgICAgICAgICAgLyogKmFyZyA9PSBMJ1EnICovICBxdW90ZWNoYXJzICAgOworICAgICAg Kythcmc7CishICAgICBpZiAoKmFyZyAhPSBMJz0nICAmJiAgKmFyZyAhPSBMJysnICAmJiAgKmFy ZyAhPSBMJy0nKSBnb3RvIGJhZGFyZzsKKyAgICAgIGNoYW5nZSA9IHBhcnNlY2hhcnNldChhcmcg KyAxLCBlcnJtc2cpOworICAgICAgaWYgKGNoYW5nZSkgeworISAgICAgICBpZiAgICAgICgqYXJn ID09IEwnPScpICAgY3Nzd2FwKGNoYXJzLGNoYW5nZSk7CishICAgICAgIGVsc2UgaWYgKCphcmcg PT0gTCcrJykgICBjc2FkZChjaGFycyxjaGFuZ2UsZXJybXNnKTsKKyEgICAgICAgZWxzZSAgLyog KmFyZyA9PSBMJy0nICovIGNzcmVtb3ZlKGNoYXJzLGNoYW5nZSxlcnJtc2cpOworICAgICAgICBm cmVlY2hhcnNldChjaGFuZ2UpOworICAgICAgfQorICAgICAgcmV0dXJuOworICAgIH0KKyAgCish ICAgaWYgKGlzd2RpZ2l0KCphcmcpKSB7CisgICAgICBpZiAoIXN0cnRvdWRlYyhhcmcsICZuKSkg Z290byBiYWRhcmc7CisgICAgICBpZiAobiA8PSA4KSAqcHByZWZpeCA9IG47CisgICAgICBlbHNl ICpwd2lkdGggPSBuOworICAgIH0KKyAgCisgICAgZm9yICg7OykgeworISAgICAgd2hpbGUgKGlz d2RpZ2l0KCphcmcpKSArK2FyZzsKKyAgICAgIG9jID0gKmFyZzsKKyAgICAgIGlmICghb2MpIGJy ZWFrOworICAgICAgbiA9IC0xOworICAgICAgaWYgKCFzdHJ0b3VkZWMoKythcmcsICZuKSkgZ290 byBiYWRhcmc7CishICAgICBpZiAoICAgb2MgPT0gTCdoJyB8fCBvYyA9PSBMJ3AnIHx8IG9jID09 IEwncicKKyEgICAgICAgICB8fCBvYyA9PSBMJ3MnIHx8IG9jID09IEwnVCcgfHwgb2MgPT0gTCd3 JykgeworISAgICAgICBpZiAgICAgIChvYyA9PSBMJ2gnKSAgICpwaGFuZyAgID0gIG4gPj0gMCA/ IG4gOiAgMTsKKyEgICAgICAgZWxzZSBpZiAob2MgPT0gTCdwJykgICAqcHByZWZpeCA9ICBuOwor ISAgICAgICBlbHNlIGlmIChvYyA9PSBMJ3InKSAgICpwcmVwZWF0ID0gIG4gPj0gMCA/IG4gOiAg MzsKKyEgICAgICAgZWxzZSBpZiAob2MgPT0gTCdzJykgICAqcHN1ZmZpeCA9ICBuOworISAgICAg ICBlbHNlIGlmIChvYyA9PSBMJ1QnKSAgICpwVGFiICAgID0gIG4gPj0gMCA/IG4gOiAgODsKKyEg ICAgICAgZWxzZSAgLyogb2MgPT0gTCd3JyAqLyAqcHdpZHRoICA9ICBuID49IDAgPyBuIDogNzk7 CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgaWYgKG4gPCAwKSBuID0gMTsKKyAgICAg ICAgaWYgKG4gPiAxKSBnb3RvIGJhZGFyZzsKKyEgICAgICAgaWYgICAgICAob2MgPT0gTCdiJykg KnBib2R5ICAgPSBuOworISAgICAgICBlbHNlIGlmIChvYyA9PSBMJ2MnKSAqcGNhcCAgICA9IG47 CishICAgICAgIGVsc2UgaWYgKG9jID09IEwnZCcpICpwZGl2ICAgID0gbjsKKyEgICAgICAgZWxz ZSBpZiAob2MgPT0gTCdFJykgKnBFcnIgICAgPSBuOworISAgICAgICBlbHNlIGlmIChvYyA9PSBM J2UnKSAqcGV4cGVsICA9IG47CishICAgICAgIGVsc2UgaWYgKG9jID09IEwnZicpICpwZml0ICAg ID0gbjsKKyEgICAgICAgZWxzZSBpZiAob2MgPT0gTCdnJykgKnBndWVzcyAgPSBuOworISAgICAg ICBlbHNlIGlmIChvYyA9PSBMJ2knKSAqcGludmlzICA9IG47CishICAgICAgIGVsc2UgaWYgKG9j ID09IEwnaicpICpwanVzdCAgID0gbjsKKyEgICAgICAgZWxzZSBpZiAob2MgPT0gTCdsJykgKnBs YXN0ICAgPSBuOworISAgICAgICBlbHNlIGlmIChvYyA9PSBMJ3EnKSAqcHF1b3RlICA9IG47Cish ICAgICAgIGVsc2UgaWYgKG9jID09IEwnUicpICpwUmVwb3J0ID0gbjsKKyEgICAgICAgZWxzZSBp ZiAob2MgPT0gTCd0JykgKnB0b3VjaCAgPSBuOworICAgICAgICBlbHNlIGdvdG8gYmFkYXJnOwor ICAgICAgfQorICAgIH0KKyoqKioqKioqKioqKioqKgorKioqIDI3NywyODggKioqKgorICAKKyAg YmFkYXJnOgorICAKKyEgICBzcHJpbnRmKGVycm1zZywgIkJhZCBhcmd1bWVudDogJS4qc1xuIiwg ZXJybXNnX3NpemUgLSAxNiwgc2F2ZWFyZyk7CisgICAgKnBoZWxwID0gMTsKKyAgfQorICAKKyAg CishIHN0YXRpYyBjaGFyICoqcmVhZGxpbmVzKAorICAgIGxpbmVwcm9wICoqcHByb3BzLCBjb25z dCBjaGFyc2V0ICpwcm90ZWN0Y2hhcnMsCisgICAgY29uc3QgY2hhcnNldCAqcXVvdGVjaGFycywg aW50IFRhYiwgaW50IGludmlzLCBpbnQgcXVvdGUsIGVycm1zZ190IGVycm1zZworICApCistLS0g MjMyLDI0MyAtLS0tCisgIAorICBiYWRhcmc6CisgIAorISAgIHN3cHJpbnRmKGVycm1zZywgZXJy bXNnX3NpemUsIEwiQmFkIGFyZ3VtZW50OiAlLipzXG4iLCBlcnJtc2dfc2l6ZSAtIDE2LCBzYXZl YXJnKTsKKyAgICAqcGhlbHAgPSAxOworICB9CisgIAorICAKKyEgc3RhdGljIHdjaGFyX3QgKipy ZWFkbGluZXMoCisgICAgbGluZXByb3AgKipwcHJvcHMsIGNvbnN0IGNoYXJzZXQgKnByb3RlY3Rj aGFycywKKyAgICBjb25zdCBjaGFyc2V0ICpxdW90ZWNoYXJzLCBpbnQgVGFiLCBpbnQgaW52aXMs IGludCBxdW90ZSwgZXJybXNnX3QgZXJybXNnCisgICkKKyoqKioqKioqKioqKioqKgorKioqIDMw MiwzMTAgKioqKgorICAvKiBpdCdzIG5vdCBOVUxMLiAgT24gZmFpbHVyZSwgcmV0dXJucyBOVUxM IGFuZCBzZXRzICpwcHJvcHMgdG8gTlVMTC4gICAqLworICB7CisgICAgYnVmZmVyICpjYnVmID0g TlVMTCwgKmxidWYgPSBOVUxMLCAqbHBidWYgPSBOVUxMOworISAgIGludCBjLCBlbXB0eSwgYmxh bmssIGZpcnN0bGluZSwgcXNvbmx5LCBvbGRxc29ubHkgPSAwLCB2bG5sZW4sIGk7CishICAgY2hh ciBjaCwgKmxuID0gTlVMTCwgbnVsbGNoYXIgPSAnXDAnLCAqbnVsbGxpbmUgPSBOVUxMLCAqcXBl bmQsCishICAgICAgICAqb2xkbG4gPSBOVUxMLCAqb2xkcXBlbmQgPSBOVUxMLCAqcCwgKm9wLCAq dmxuID0gTlVMTCwgKipsaW5lcyA9IE5VTEw7CisgICAgbGluZXByb3AgdnByb3AgPSB7IDAsIDAs IDAsICdcMCcgfSwgaXByb3AgPSB7IDAsIDAsIDAsICdcMCcgfTsKKyAgCisgICAgLyogb2xkcXNv bmx5LCBvbGRsbiwgYW5kIG9sZHF1ZW5kIGRvbid0IHJlYWxseSBuZWVkIHRvIGJlIGluaXRpYWxp emVkLiAgICovCistLS0gMjU3LDI2NiAtLS0tCisgIC8qIGl0J3Mgbm90IE5VTEwuICBPbiBmYWls dXJlLCByZXR1cm5zIE5VTEwgYW5kIHNldHMgKnBwcm9wcyB0byBOVUxMLiAgICovCisgIHsKKyAg ICBidWZmZXIgKmNidWYgPSBOVUxMLCAqbGJ1ZiA9IE5VTEwsICpscGJ1ZiA9IE5VTEw7CishICAg d2ludF90IGM7CishICAgaW50IGVtcHR5LCBibGFuaywgZmlyc3RsaW5lLCBxc29ubHksIG9sZHFz b25seSA9IDAsIHZsbmxlbiwgaTsKKyEgICB3Y2hhcl90ICpsbiA9IE5VTEwsIG51bGxjaGFyID0g TCdcMCcsICpudWxsbGluZSA9IE5VTEwsICpxcGVuZCwgCishICAgICAqb2xkbG4gPSBOVUxMLCAq b2xkcXBlbmQgPSBOVUxMLCAqcCwgKm9wLCAqdmxuID0gTlVMTCwgKipsaW5lcyA9IE5VTEw7Cisg ICAgbGluZXByb3AgdnByb3AgPSB7IDAsIDAsIDAsICdcMCcgfSwgaXByb3AgPSB7IDAsIDAsIDAs ICdcMCcgfTsKKyAgCisgICAgLyogb2xkcXNvbmx5LCBvbGRsbiwgYW5kIG9sZHF1ZW5kIGRvbid0 IHJlYWxseSBuZWVkIHRvIGJlIGluaXRpYWxpemVkLiAgICovCisqKioqKioqKioqKioqKioKKyoq KiAzMTYsMzM1ICoqKioKKyAgCisgICAgKnBwcm9wcyA9IE5VTEw7CisgIAorISAgIGNidWYgPSBu ZXdidWZmZXIoc2l6ZW9mIChjaGFyKSwgZXJybXNnKTsKKyAgICBpZiAoKmVycm1zZykgZ290byBy bGNsZWFudXA7CishICAgbGJ1ZiA9IG5ld2J1ZmZlcihzaXplb2YgKGNoYXIgKiksIGVycm1zZyk7 CisgICAgaWYgKCplcnJtc2cpIGdvdG8gcmxjbGVhbnVwOworICAgIGxwYnVmID0gbmV3YnVmZmVy KHNpemVvZiAobGluZXByb3ApLCBlcnJtc2cpOworICAgIGlmICgqZXJybXNnKSBnb3RvIHJsY2xl YW51cDsKKyAgCisgICAgZm9yIChlbXB0eSA9IGJsYW5rID0gZmlyc3RsaW5lID0gMTsgIDsgICkg eworISAgICAgYyA9IGdldGNoYXIoKTsKKyEgICAgIGlmIChjID09IEVPRikgYnJlYWs7CishICAg ICAqKHVuc2lnbmVkIGNoYXIgKikmY2ggPSBjOworISAgICAgaWYgKGNoID09ICdcbicpIHsKKyAg ICAgICAgaWYgKGJsYW5rKSB7CishICAgICAgICAgdW5nZXRjKGMsc3RkaW4pOworICAgICAgICAg IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGFkZGl0ZW0oY2J1ZiwgJm51bGxjaGFyLCBlcnJt c2cpOworLS0tIDI3MiwyOTYgLS0tLQorICAKKyAgICAqcHByb3BzID0gTlVMTDsKKyAgCishICAg Y2J1ZiA9IG5ld2J1ZmZlcihzaXplb2YgKHdjaGFyX3QpLCBlcnJtc2cpOworICAgIGlmICgqZXJy bXNnKSBnb3RvIHJsY2xlYW51cDsKKyEgICBsYnVmID0gbmV3YnVmZmVyKHNpemVvZiAod2NoYXJf dCAqKSwgZXJybXNnKTsKKyAgICBpZiAoKmVycm1zZykgZ290byBybGNsZWFudXA7CisgICAgbHBi dWYgPSBuZXdidWZmZXIoc2l6ZW9mIChsaW5lcHJvcCksIGVycm1zZyk7CisgICAgaWYgKCplcnJt c2cpIGdvdG8gcmxjbGVhbnVwOworICAKKyAgICBmb3IgKGVtcHR5ID0gYmxhbmsgPSBmaXJzdGxp bmUgPSAxOyAgOyAgKSB7CishICAgICBjID0gZ2V0d2NoYXIoKTsKKyEgICAgIGlmIChjID09IFdF T0YpIHsKKyEgICAgICAgaWYgKGVycm5vID09IEVJTFNFUSkgeworISAgICAgICAJd2NzY3B5KGVy cm1zZywgTCJJbnZhbGlkIG11bHRpYnl0ZSBzZXF1ZW5jZSBpbiBpbnB1dFxuIik7CishIAlnb3Rv IHJsY2xlYW51cDsKKyEgICAgICAgfQorISAgICAgICBicmVhazsKKyEgICAgIH0KKyEgICAgIGlm IChjID09IEwnXG4nKSB7CisgICAgICAgIGlmIChibGFuaykgeworISAgICAgICAgIHVuZ2V0d2Mo YyxzdGRpbik7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYWRkaXRlbShj YnVmLCAmbnVsbGNoYXIsIGVycm1zZyk7CisqKioqKioqKioqKioqKioKKyoqKiAzMzgsMzQ2ICoq KioKKyAgICAgICAgaWYgKCplcnJtc2cpIGdvdG8gcmxjbGVhbnVwOworICAgICAgICBpZiAocXVv dGUpIHsKKyAgICAgICAgICBmb3IgKHFwZW5kID0gbG47ICAqcXBlbmQgJiYgY3NtZW1iZXIoKnFw ZW5kLCBxdW90ZWNoYXJzKTsgICsrcXBlbmQpOworISAgICAgICAgIGZvciAocCA9IHFwZW5kOyAg KnAgPT0gJyAnIHx8IGNzbWVtYmVyKCpwLCBxdW90ZWNoYXJzKTsgICsrcCk7CishICAgICAgICAg cXNvbmx5ID0gICpwID09ICdcMCc7CishICAgICAgICAgd2hpbGUgKHFwZW5kID4gbG4gJiYgcXBl bmRbLTFdID09ICcgJykgLS1xcGVuZDsKKyAgICAgICAgICBpZiAoIWZpcnN0bGluZSkgeworICAg ICAgICAgICAgZm9yIChwID0gbG4sIG9wID0gb2xkbG47CisgICAgICAgICAgICAgICAgIHAgPCBx cGVuZCAmJiBvcCA8IG9sZHFwZW5kICYmICpwID09ICpvcDsKKy0tLSAyOTksMzA3IC0tLS0KKyAg ICAgICAgaWYgKCplcnJtc2cpIGdvdG8gcmxjbGVhbnVwOworICAgICAgICBpZiAocXVvdGUpIHsK KyAgICAgICAgICBmb3IgKHFwZW5kID0gbG47ICAqcXBlbmQgJiYgY3NtZW1iZXIoKnFwZW5kLCBx dW90ZWNoYXJzKTsgICsrcXBlbmQpOworISAgICAgICAgIGZvciAocCA9IHFwZW5kOyAgKnAgPT0g TCcgJyB8fCBjc21lbWJlcigqcCwgcXVvdGVjaGFycyk7ICArK3ApOworISAgICAgICAgIHFzb25s eSA9ICAoKnAgPT0gTCdcMCcpOworISAgICAgICAgIHdoaWxlIChxcGVuZCA+IGxuICYmIHFwZW5k Wy0xXSA9PSBMJyAnKSAtLXFwZW5kOworICAgICAgICAgIGlmICghZmlyc3RsaW5lKSB7CisgICAg ICAgICAgICBmb3IgKHAgPSBsbiwgb3AgPSBvbGRsbjsKKyAgICAgICAgICAgICAgICAgcCA8IHFw ZW5kICYmIG9wIDwgb2xkcXBlbmQgJiYgKnAgPT0gKm9wOworKioqKioqKioqKioqKioqCisqKiog MzQ4LDM3MCAqKioqCisgICAgICAgICAgICBpZiAoIShwID09IHFwZW5kICYmIG9wID09IG9sZHFw ZW5kKSkgeworICAgICAgICAgICAgICBpZiAoIWludmlzICYmIChvbGRxc29ubHkgfHwgcXNvbmx5 KSkgeworICAgICAgICAgICAgICAgIGlmIChvbGRxc29ubHkpIHsKKyEgICAgICAgICAgICAgICAg ICpvcCA9ICdcMCc7CisgICAgICAgICAgICAgICAgICBvbGRxcGVuZCA9IG9wOworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAocXNvbmx5KSB7CishICAgICAgICAgICAgICAg ICAqcCA9ICdcMCc7CisgICAgICAgICAgICAgICAgICBxcGVuZCA9IHA7CisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg ICAgIHZsbmxlbiA9IHAgLSBsbjsKKyEgICAgICAgICAgICAgICB2bG4gPSBtYWxsb2MoKHZsbmxl biArIDEpICogc2l6ZW9mIChjaGFyKSk7CisgICAgICAgICAgICAgICAgaWYgKCF2bG4pIHsKKyEg ICAgICAgICAgICAgICAgIHN0cmNweShlcnJtc2csb3V0b2ZtZW0pOworICAgICAgICAgICAgICAg ICAgZ290byBybGNsZWFudXA7CisgICAgICAgICAgICAgICAgfQorISAgICAgICAgICAgICAgIHN0 cm5jcHkodmxuLGxuLHZsbmxlbik7CishICAgICAgICAgICAgICAgdmxuW3Zsbmxlbl0gPSAnXDAn OworICAgICAgICAgICAgICAgIGFkZGl0ZW0obGJ1ZiwgJnZsbiwgZXJybXNnKTsKKyAgICAgICAg ICAgICAgICBpZiAoKmVycm1zZykgZ290byBybGNsZWFudXA7CisgICAgICAgICAgICAgICAgYWRk aXRlbShscGJ1ZiwgIGludmlzID8gJmlwcm9wIDogJnZwcm9wLCAgZXJybXNnKTsKKy0tLSAzMDks MzMxIC0tLS0KKyAgICAgICAgICAgIGlmICghKHAgPT0gcXBlbmQgJiYgb3AgPT0gb2xkcXBlbmQp KSB7CisgICAgICAgICAgICAgIGlmICghaW52aXMgJiYgKG9sZHFzb25seSB8fCBxc29ubHkpKSB7 CisgICAgICAgICAgICAgICAgaWYgKG9sZHFzb25seSkgeworISAgICAgICAgICAgICAgICAgKm9w ID0gTCdcMCc7CisgICAgICAgICAgICAgICAgICBvbGRxcGVuZCA9IG9wOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICBpZiAocXNvbmx5KSB7CishICAgICAgICAgICAgICAgICAq cCA9IEwnXDAnOworICAgICAgICAgICAgICAgICAgcXBlbmQgPSBwOworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg ICB2bG5sZW4gPSBwIC0gbG47CishICAgICAgICAgICAgICAgdmxuID0gbWFsbG9jKCh2bG5sZW4g KyAxKSAqIHNpemVvZiAod2NoYXJfdCkpOworICAgICAgICAgICAgICAgIGlmICghdmxuKSB7Cish ICAgICAgICAgICAgICAgICB3Y3NjcHkoZXJybXNnLG91dG9mbWVtKTsKKyAgICAgICAgICAgICAg ICAgIGdvdG8gcmxjbGVhbnVwOworICAgICAgICAgICAgICAgIH0KKyEgICAgICAgICAgICAgICB3 Y3NuY3B5KHZsbiwgbG4sIHZsbmxlbik7CishICAgICAgICAgICAgICAgdmxuW3Zsbmxlbl0gPSBM J1wwJzsKKyAgICAgICAgICAgICAgICBhZGRpdGVtKGxidWYsICZ2bG4sIGVycm1zZyk7CisgICAg ICAgICAgICAgICAgaWYgKCplcnJtc2cpIGdvdG8gcmxjbGVhbnVwOworICAgICAgICAgICAgICAg IGFkZGl0ZW0obHBidWYsICBpbnZpcyA/ICZpcHJvcCA6ICZ2cHJvcCwgIGVycm1zZyk7CisqKioq KioqKioqKioqKioKKyoqKiAzODgsNDE1ICoqKioKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAg ICAgICBpZiAoZW1wdHkpIHsKKyEgICAgICAgICBpZiAoY3NtZW1iZXIoY2gsIHByb3RlY3RjaGFy cykpIHsKKyEgICAgICAgICAgIHVuZ2V0YyhjLHN0ZGluKTsKKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgIH0KKyAgICAgICAgICBlbXB0eSA9IDA7CisgICAgICAgIH0KKyEgICAgICAgaWYg KCFjaCkgY29udGludWU7CishICAgICAgIGlmIChjaCA9PSAnXHQnKSB7CishICAgICAgICAgY2gg PSAnICc7CisgICAgICAgICAgZm9yIChpID0gVGFiIC0gbnVtaXRlbXMoY2J1ZikgJSBUYWI7ICBp ID4gMDsgIC0taSkgeworISAgICAgICAgICAgYWRkaXRlbShjYnVmLCAmY2gsIGVycm1zZyk7Cisg ICAgICAgICAgICBpZiAoKmVycm1zZykgZ290byBybGNsZWFudXA7CisgICAgICAgICAgfQorICAg ICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CishICAgICAgIGlmIChpc3NwYWNlKGMpKSBjaCA9 ICcgJzsKKyEgICAgICAgZWxzZSBibGFuayA9IDA7CishICAgICAgIGFkZGl0ZW0oY2J1ZiwgJmNo LCBlcnJtc2cpOworISAgICAgICBpZiAoKmVycm1zZykgZ290byBybGNsZWFudXA7CisgICAgICB9 CisgICAgfQorISAKKyAgICBpZiAoIWJsYW5rKSB7CisgICAgICBhZGRpdGVtKGNidWYsICZudWxs Y2hhciwgZXJybXNnKTsKKyAgICAgIGlmICgqZXJybXNnKSBnb3RvIHJsY2xlYW51cDsKKy0tLSAz NDksMzc5IC0tLS0KKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBpZiAoZW1wdHkpIHsK KyEgICAgICAgICBpZiAoY3NtZW1iZXIoYywgcHJvdGVjdGNoYXJzKSkgeworISAgICAgICAgICAg dW5nZXR3YyhjLHN0ZGluKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAg ICAgICBlbXB0eSA9IDA7CisgICAgICAgIH0KKyEgICAgICAgaWYgKCFjKSBjb250aW51ZTsKKyEg ICAgICAgaWYgKGMgPT0gTCdcdCcpIHsKKyEgICAgICAgICBjID0gTCcgJzsKKyAgICAgICAgICBm b3IgKGkgPSBUYWIgLSBudW1pdGVtcyhjYnVmKSAlIFRhYjsgIGkgPiAwOyAgLS1pKSB7CishICAg ICAgICAgICBhZGRpdGVtKGNidWYsICZjLCBlcnJtc2cpOworICAgICAgICAgICAgaWYgKCplcnJt c2cpIGdvdG8gcmxjbGVhbnVwOworICAgICAgICAgIH0KKyAgICAgICAgICBjb250aW51ZTsKKyAg ICAgICAgfQorISAgICAgICBpZiAoaXN3c3BhY2UoYykpIAorISAgICAgICAgIGMgPSBMJyAnOwor ISAgICAgICBlbHNlIAorISAgICAgICAgIGJsYW5rID0gMDsKKyEgICAgICAgYWRkaXRlbShjYnVm LCAmYywgZXJybXNnKTsKKyEgICAgICAgaWYgKCplcnJtc2cpIAorISAgICAgICAgIGdvdG8gcmxj bGVhbnVwOworICAgICAgfQorICAgIH0KKyEgICAKKyAgICBpZiAoIWJsYW5rKSB7CisgICAgICBh ZGRpdGVtKGNidWYsICZudWxsY2hhciwgZXJybXNnKTsKKyAgICAgIGlmICgqZXJybXNnKSBnb3Rv IHJsY2xlYW51cDsKKyoqKioqKioqKioqKioqKgorKioqIDQ0OSw0NTUgKioqKgorICAKKyAgCisg IHN0YXRpYyB2b2lkIGNvbXByZXN1ZmxlbigKKyEgICBjb25zdCBjaGFyICogY29uc3QgKmxpbmVz LCBjb25zdCBjaGFyICogY29uc3QgKmVuZGxpbmUsCisgICAgY29uc3QgY2hhcnNldCAqYm9keWNo YXJzLCBpbnQgYm9keSwgaW50IHByZSwgaW50IHN1ZiwgaW50ICpwcHJlLCBpbnQgKnBzdWYKKyAg KQorICAvKiBsaW5lcyBpcyBhbiBhcnJheSBvZiBzdHJpbmdzLCB1cCB0byBidXQgbm90IGluY2x1 ZGluZyBlbmRsaW5lLiAgKi8KKy0tLSA0MTMsNDE5IC0tLS0KKyAgCisgIAorICBzdGF0aWMgdm9p ZCBjb21wcmVzdWZsZW4oCishICAgY29uc3Qgd2NoYXJfdCAqIGNvbnN0ICpsaW5lcywgY29uc3Qg d2NoYXJfdCAqIGNvbnN0ICplbmRsaW5lLAorICAgIGNvbnN0IGNoYXJzZXQgKmJvZHljaGFycywg aW50IGJvZHksIGludCBwcmUsIGludCBzdWYsIGludCAqcHByZSwgaW50ICpwc3VmCisgICkKKyAg LyogbGluZXMgaXMgYW4gYXJyYXkgb2Ygc3RyaW5ncywgdXAgdG8gYnV0IG5vdCBpbmNsdWRpbmcg ZW5kbGluZS4gICovCisqKioqKioqKioqKioqKioKKyoqKiA0NTcsNDY1ICoqKioKKyAgLyogbGlu ZXMgaW4gbGluZXMuICBBc3N1bWVzIHRoYXQgdGhleSBoYXZlIGFscmVhZHkgYmVlbiBkZXRlcm1p bmVkICovCisgIC8qIHRvIGJlIGF0IGxlYXN0IHByZSBhbmQgc3VmLiAgZW5kbGluZSBtdXN0IG5v dCBlcXVhbCBsaW5lcy4gICAgICAqLworICB7CishICAgY29uc3QgY2hhciAqc3RhcnQsICplbmQs ICprbm93bnN0YXJ0LCAqIGNvbnN0ICpsaW5lLCAqcDEsICpwMiwgKmtub3duZW5kLAorICAgICAg ICAgICAgICAgKmtub3duc3RhcnQyOworISAKKyAgICBzdGFydCA9ICpsaW5lczsKKyAgICBlbmQg PSBrbm93bnN0YXJ0ID0gc3RhcnQgKyBwcmU7CisgICAgaWYgKGJvZHkpCistLS0gNDIxLDQyOSAt LS0tCisgIC8qIGxpbmVzIGluIGxpbmVzLiAgQXNzdW1lcyB0aGF0IHRoZXkgaGF2ZSBhbHJlYWR5 IGJlZW4gZGV0ZXJtaW5lZCAqLworICAvKiB0byBiZSBhdCBsZWFzdCBwcmUgYW5kIHN1Zi4gIGVu ZGxpbmUgbXVzdCBub3QgZXF1YWwgbGluZXMuICAgICAgKi8KKyAgeworISAgIGNvbnN0IHdjaGFy X3QgKnN0YXJ0LCAqZW5kLCAqa25vd25zdGFydCwgKiBjb25zdCAqbGluZSwgKnAxLCAqcDIsICpr bm93bmVuZCwKKyAgICAgICAgICAgICAgICprbm93bnN0YXJ0MjsKKyEgICAgICAgICAgICAKKyAg ICBzdGFydCA9ICpsaW5lczsKKyAgICBlbmQgPSBrbm93bnN0YXJ0ID0gc3RhcnQgKyBwcmU7Cisg ICAgaWYgKGJvZHkpCisqKioqKioqKioqKioqKioKKyoqKiA0NzQsNDgwICoqKioKKyAgICB9Cisg ICAgaWYgKGJvZHkpCisgICAgICBmb3IgKHAxID0gZW5kOyAgcDEgPiBrbm93bnN0YXJ0OyAgKQor ISAgICAgICBpZiAoKi0tcDEgIT0gJyAnKSB7CisgICAgICAgICAgaWYgKGNzbWVtYmVyKCpwMSwg Ym9keWNoYXJzKSkKKyAgICAgICAgICAgIGVuZCA9IHAxOworICAgICAgICAgIGVsc2UKKy0tLSA0 MzgsNDQ0IC0tLS0KKyAgICB9CisgICAgaWYgKGJvZHkpCisgICAgICBmb3IgKHAxID0gZW5kOyAg cDEgPiBrbm93bnN0YXJ0OyAgKQorISAgICAgICBpZiAoKi0tcDEgIT0gTCcgJykgeworICAgICAg ICAgIGlmIChjc21lbWJlcigqcDEsIGJvZHljaGFycykpCisgICAgICAgICAgICBlbmQgPSBwMTsK KyAgICAgICAgICBlbHNlCisqKioqKioqKioqKioqKioKKyoqKiA1MDEsNTE4ICoqKioKKyAgICB9 CisgICAgaWYgKGJvZHkpIHsKKyAgICAgIGZvciAocDEgPSBzdGFydDsKKyEgICAgICAgICAgc3Rh cnQgPCBrbm93bmVuZCAmJiAoKnN0YXJ0ID09ICcgJyB8fCBjc21lbWJlcigqc3RhcnQsIGJvZHlj aGFycykpOworICAgICAgICAgICArK3N0YXJ0KTsKKyEgICAgIGlmIChzdGFydCA+IHAxICYmIHN0 YXJ0Wy0xXSA9PSAnICcpIC0tc3RhcnQ7CisgICAgfQorICAgIGVsc2UKKyEgICAgIHdoaWxlIChl bmQgLSBzdGFydCA+PSAyICYmICpzdGFydCA9PSAnICcgJiYgc3RhcnRbMV0gPT0gJyAnKSArK3N0 YXJ0OworICAgICpwc3VmID0gZW5kIC0gc3RhcnQ7CisgIH0KKyAgCisgIAorICBzdGF0aWMgdm9p ZCBkZWxpbWl0KAorISAgIGNvbnN0IGNoYXIgKiBjb25zdCAqbGluZXMsIGNvbnN0IGNoYXIgKiBj b25zdCAqZW5kbGluZSwKKyAgICBjb25zdCBjaGFyc2V0ICpib2R5Y2hhcnMsIGludCByZXBlYXQs IGludCBib2R5LCBpbnQgZGl2LAorICAgIGludCBwcmUsIGludCBzdWYsIGxpbmVwcm9wICpwcm9w cworICApCistLS0gNDY1LDQ4MiAtLS0tCisgICAgfQorICAgIGlmIChib2R5KSB7CisgICAgICBm b3IgKHAxID0gc3RhcnQ7CishICAgICAgICAgIHN0YXJ0IDwga25vd25lbmQgJiYgKCpzdGFydCA9 PSBMJyAnIHx8IGNzbWVtYmVyKCpzdGFydCwgYm9keWNoYXJzKSk7CisgICAgICAgICAgICsrc3Rh cnQpOworISAgICAgaWYgKHN0YXJ0ID4gcDEgJiYgc3RhcnRbLTFdID09IEwnICcpIC0tc3RhcnQ7 CisgICAgfQorICAgIGVsc2UKKyEgICAgIHdoaWxlIChlbmQgLSBzdGFydCA+PSAyICYmICpzdGFy dCA9PSBMJyAnICYmIHN0YXJ0WzFdID09IEwnICcpICsrc3RhcnQ7CisgICAgKnBzdWYgPSBlbmQg LSBzdGFydDsKKyAgfQorICAKKyAgCisgIHN0YXRpYyB2b2lkIGRlbGltaXQoCishICAgY29uc3Qg d2NoYXJfdCAqIGNvbnN0ICpsaW5lcywgY29uc3Qgd2NoYXJfdCAqIGNvbnN0ICplbmRsaW5lLAor ICAgIGNvbnN0IGNoYXJzZXQgKmJvZHljaGFycywgaW50IHJlcGVhdCwgaW50IGJvZHksIGludCBk aXYsCisgICAgaW50IHByZSwgaW50IHN1ZiwgbGluZXByb3AgKnByb3BzCisgICkKKyoqKioqKioq KioqKioqKgorKioqIDUyMyw1MzAgKioqKgorICAvKiBhbmQgY29tc3VmbGVuIG9mIHRoZSBsaW5l cyBpbiBsaW5lcyBoYXZlIGFscmVhZHkgYmVlbiAgICAgKi8KKyAgLyogZGV0ZXJtaW5lZCB0byBi ZSBhdCBsZWFzdCBwcmUgYW5kIHN1ZiwgcmVzcGVjdGl2ZWx5LiAgICAgICovCisgIHsKKyEgICBj b25zdCBjaGFyICogY29uc3QgKmxpbmUsICplbmQsICpwLCAqIGNvbnN0ICpuZXh0bGluZTsKKyEg ICBjaGFyIHJjOworICAgIGxpbmVwcm9wICpwcm9wLCAqbmV4dHByb3A7CisgICAgaW50IGFueWJv ZGlsZXNzID0gMCwgc3RhdHVzOworICAKKy0tLSA0ODcsNDk0IC0tLS0KKyAgLyogYW5kIGNvbXN1 ZmxlbiBvZiB0aGUgbGluZXMgaW4gbGluZXMgaGF2ZSBhbHJlYWR5IGJlZW4gICAgICovCisgIC8q IGRldGVybWluZWQgdG8gYmUgYXQgbGVhc3QgcHJlIGFuZCBzdWYsIHJlc3BlY3RpdmVseS4gICAg ICAqLworICB7CishICAgY29uc3Qgd2NoYXJfdCAqIGNvbnN0ICpsaW5lLCAqZW5kLCAqcCwgKiBj b25zdCAqbmV4dGxpbmU7CishICAgd2NoYXJfdCByYzsKKyAgICBsaW5lcHJvcCAqcHJvcCwgKm5l eHRwcm9wOworICAgIGludCBhbnlib2RpbGVzcyA9IDAsIHN0YXR1czsKKyAgCisqKioqKioqKioq KioqKioKKyoqKiA1NDUsNTUyICoqKioKKyAgICAgIGZvciAoZW5kID0gKmxpbmU7ICAqZW5kOyAg KytlbmQpOworICAgICAgZW5kIC09IHN1ZjsKKyAgICAgIHAgPSAqbGluZSArIHByZTsKKyEgICAg IHJjID0gIHAgPCBlbmQgID8gICpwICA6ICAnICc7CishICAgICBpZiAocmMgIT0gJyAnICYmICgh cmVwZWF0IHx8IGVuZCAtIHAgPCByZXBlYXQpKQorICAgICAgICBwcm9wLT5mbGFncyAmPSB+TF9C T0RJTEVTUzsKKyAgICAgIGVsc2UKKyAgICAgICAgd2hpbGUgKHAgPCBlbmQpIHsKKy0tLSA1MDks NTE2IC0tLS0KKyAgICAgIGZvciAoZW5kID0gKmxpbmU7ICAqZW5kOyAgKytlbmQpOworICAgICAg ZW5kIC09IHN1ZjsKKyAgICAgIHAgPSAqbGluZSArIHByZTsKKyEgICAgIHJjID0gIHAgPCBlbmQg ID8gICpwICA6ICBMJyAnOworISAgICAgaWYgKHJjICE9IEwnICcgJiYgKCFyZXBlYXQgfHwgZW5k IC0gcCA8IHJlcGVhdCkpCisgICAgICAgIHByb3AtPmZsYWdzICY9IH5MX0JPRElMRVNTOworICAg ICAgZWxzZQorICAgICAgICB3aGlsZSAocCA8IGVuZCkgeworKioqKioqKioqKioqKioqCisqKiog NTg5LDU5NyAqKioqCisgICAgfQorICAKKyAgICBsaW5lID0gbGluZXMsIHByb3AgPSBwcm9wczsK KyEgICBzdGF0dXMgPSAoKCpsaW5lcylbcHJlXSA9PSAnICcpOworICAgIGRvIHsKKyEgICAgIGlm ICgoKCpsaW5lKVtwcmVdID09ICcgJykgPT0gc3RhdHVzKQorICAgICAgICBwcm9wLT5mbGFncyB8 PSBMX0ZJUlNUOworICAgICAgKytsaW5lLCArK3Byb3A7CisgICAgfSB3aGlsZSAobGluZSA8IGVu ZGxpbmUpOworLS0tIDU1Myw1NjEgLS0tLQorICAgIH0KKyAgCisgICAgbGluZSA9IGxpbmVzLCBw cm9wID0gcHJvcHM7CishICAgc3RhdHVzID0gKCgqbGluZXMpW3ByZV0gPT0gTCcgJyk7CisgICAg ZG8geworISAgICAgaWYgKCgoKmxpbmUpW3ByZV0gPT0gTCcgJykgPT0gc3RhdHVzKQorICAgICAg ICBwcm9wLT5mbGFncyB8PSBMX0ZJUlNUOworICAgICAgKytsaW5lLCArK3Byb3A7CisgICAgfSB3 aGlsZSAobGluZSA8IGVuZGxpbmUpOworKioqKioqKioqKioqKioqCisqKiogNTk5LDYxMiAqKioq CisgIAorICAKKyAgc3RhdGljIHZvaWQgbWFya3N1cGVyZigKKyEgICBjb25zdCBjaGFyICogY29u c3QgKiBsaW5lcywgY29uc3QgY2hhciAqIGNvbnN0ICogZW5kbGluZSwgbGluZXByb3AgKnByb3Bz CisgICkKKyAgLyogbGluZXMgcG9pbnRzIHRvIHRoZSBmaXJzdCBsaW5lIG9mIGEgc2VnbWVudCwg YW5kIGVuZGxpbmUgdG8gb25lICAqLworICAvKiBsaW5lIGJleW9uZCB0aGUgbGFzdCBsaW5lIGlu IHRoZSBzZWdtZW50LiAgU2V0cyBMX1NVUEVSRiBiaXRzIGluICovCisgIC8qIHRoZSBmbGFncyBm aWVsZHMgb2YgdGhlIHByb3BzIGFycmF5IHdoZW5ldmVyIHRoZSBjb3JyZXNwb25kaW5nICAgKi8K KyAgLyogbGluZSBpcyBzdXBlcmZsdW91cy4gIExfQk9ESUxFU1MgYml0cyBtdXN0IGFscmVhZHkg YmUgc2V0LiAgICAgICAqLworICB7CishICAgY29uc3QgY2hhciAqIGNvbnN0ICpsaW5lLCAqcDsK KyAgICBsaW5lcHJvcCAqcHJvcCwgKm1wcm9wLCBkdW1teTsKKyAgICBpbnQgaW5ib2R5LCBudW0s IG1udW07CisgIAorLS0tIDU2Myw1NzYgLS0tLQorICAKKyAgCisgIHN0YXRpYyB2b2lkIG1hcmtz dXBlcmYoCishICAgY29uc3Qgd2NoYXJfdCAqIGNvbnN0ICogbGluZXMsIGNvbnN0IHdjaGFyX3Qg KiBjb25zdCAqIGVuZGxpbmUsIGxpbmVwcm9wICpwcm9wcworICApCisgIC8qIGxpbmVzIHBvaW50 cyB0byB0aGUgZmlyc3QgbGluZSBvZiBhIHNlZ21lbnQsIGFuZCBlbmRsaW5lIHRvIG9uZSAgKi8K KyAgLyogbGluZSBiZXlvbmQgdGhlIGxhc3QgbGluZSBpbiB0aGUgc2VnbWVudC4gIFNldHMgTF9T VVBFUkYgYml0cyBpbiAqLworICAvKiB0aGUgZmxhZ3MgZmllbGRzIG9mIHRoZSBwcm9wcyBhcnJh eSB3aGVuZXZlciB0aGUgY29ycmVzcG9uZGluZyAgICovCisgIC8qIGxpbmUgaXMgc3VwZXJmbHVv dXMuICBMX0JPRElMRVNTIGJpdHMgbXVzdCBhbHJlYWR5IGJlIHNldC4gICAgICAgKi8KKyAgewor ISAgIGNvbnN0IHdjaGFyX3QgKiBjb25zdCAqbGluZSwgKnA7CisgICAgbGluZXByb3AgKnByb3As ICptcHJvcCwgZHVtbXk7CisgICAgaW50IGluYm9keSwgbnVtLCBtbnVtOworICAKKyoqKioqKioq KioqKioqKgorKioqIDYxOSw2MjUgKioqKgorICAgIGZvciAobGluZSA9IGxpbmVzLCBwcm9wID0g cHJvcHM7ICBsaW5lIDwgZW5kbGluZTsgICsrbGluZSwgKytwcm9wKQorICAgICAgaWYgKGlzdmFj YW50KHByb3ApKSB7CisgICAgICAgIGZvciAobnVtID0gMCwgcCA9ICpsaW5lOyAgKnA7ICArK3Ap CishICAgICAgICAgaWYgKCpwICE9ICcgJykgKytudW07CisgICAgICAgIGlmIChpbmJvZHkgfHwg bnVtIDwgbW51bSkKKyAgICAgICAgICBtbnVtID0gbnVtLCBtcHJvcCA9IHByb3A7CisgICAgICAg IGluYm9keSA9IDA7CistLS0gNTgzLDU4OSAtLS0tCisgICAgZm9yIChsaW5lID0gbGluZXMsIHBy b3AgPSBwcm9wczsgIGxpbmUgPCBlbmRsaW5lOyAgKytsaW5lLCArK3Byb3ApCisgICAgICBpZiAo aXN2YWNhbnQocHJvcCkpIHsKKyAgICAgICAgZm9yIChudW0gPSAwLCBwID0gKmxpbmU7ICAqcDsg ICsrcCkKKyEgICAgICAgICBpZiAoKnAgIT0gTCcgJykgKytudW07CisgICAgICAgIGlmIChpbmJv ZHkgfHwgbnVtIDwgbW51bSkKKyAgICAgICAgICBtbnVtID0gbnVtLCBtcHJvcCA9IHByb3A7Cisg ICAgICAgIGluYm9keSA9IDA7CisqKioqKioqKioqKioqKioKKyoqKiA2MzEsNjM3ICoqKioKKyAg CisgIAorICBzdGF0aWMgdm9pZCBzZXRhZmZpeGVzKAorISAgIGNvbnN0IGNoYXIgKiBjb25zdCAq aW5saW5lcywgY29uc3QgY2hhciAqIGNvbnN0ICplbmRsaW5lLAorICAgIGNvbnN0IGxpbmVwcm9w ICpwcm9wcywgY29uc3QgY2hhcnNldCAqYm9keWNoYXJzLAorICAgIGNvbnN0IGNoYXJzZXQgKnF1 b3RlY2hhcnMsIGludCBoYW5nLCBpbnQgYm9keSwgaW50IHF1b3RlLAorICAgIGludCAqcGFmcCwg aW50ICpwZnMsIGludCAqcHByZWZpeCwgaW50ICpwc3VmZml4CistLS0gNTk1LDYwMSAtLS0tCisg IAorICAKKyAgc3RhdGljIHZvaWQgc2V0YWZmaXhlcygKKyEgICBjb25zdCB3Y2hhcl90ICogY29u c3QgKmlubGluZXMsIGNvbnN0IHdjaGFyX3QgKiBjb25zdCAqZW5kbGluZSwKKyAgICBjb25zdCBs aW5lcHJvcCAqcHJvcHMsIGNvbnN0IGNoYXJzZXQgKmJvZHljaGFycywKKyAgICBjb25zdCBjaGFy c2V0ICpxdW90ZWNoYXJzLCBpbnQgaGFuZywgaW50IGJvZHksIGludCBxdW90ZSwKKyAgICBpbnQg KnBhZnAsIGludCAqcGZzLCBpbnQgKnBwcmVmaXgsIGludCAqcHN1ZmZpeAorKioqKioqKioqKioq KioqCisqKiogNjQ0LDY1MCAqKioqCisgIC8qIGRlZmF1bHQgdmFsdWUgYXMgc3BlY2lmaWVkIGlu ICJwYXIuZG9jIi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgeworICAgIGludCBu dW1pbiwgcHJlLCBzdWY7CishICAgY29uc3QgY2hhciAqcDsKKyAgCisgICAgbnVtaW4gPSBlbmRs aW5lIC0gaW5saW5lczsKKyAgCistLS0gNjA4LDYxNCAtLS0tCisgIC8qIGRlZmF1bHQgdmFsdWUg YXMgc3BlY2lmaWVkIGluICJwYXIuZG9jIi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8K KyAgeworICAgIGludCBudW1pbiwgcHJlLCBzdWY7CishICAgY29uc3Qgd2NoYXJfdCAqcDsKKyAg CisgICAgbnVtaW4gPSBlbmRsaW5lIC0gaW5saW5lczsKKyAgCisqKioqKioqKioqKioqKioKKyoq KiA2NjYsNjc2ICoqKioKKyAgfQorICAKKyAgCishIHN0YXRpYyB2b2lkIGZyZWVsaW5lcyhjaGFy ICoqbGluZXMpCisgIC8qIEZyZWVzIHRoZSBlbGVtZW50cyBvZiBsaW5lcywgYW5kIGxpbmVzIGl0 c2VsZi4gKi8KKyAgLyogbGluZXMgaXMgYSBOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2Ygc3RyaW5n cy4gICAqLworICB7CishICAgY2hhciAqKmxpbmU7CisgIAorICAgIGZvciAobGluZSA9IGxpbmVz OyAgKmxpbmU7ICArK2xpbmUpCisgICAgICBmcmVlKCpsaW5lKTsKKy0tLSA2MzAsNjQwIC0tLS0K KyAgfQorICAKKyAgCishIHN0YXRpYyB2b2lkIGZyZWVsaW5lcyh3Y2hhcl90ICoqbGluZXMpCisg IC8qIEZyZWVzIHRoZSBlbGVtZW50cyBvZiBsaW5lcywgYW5kIGxpbmVzIGl0c2VsZi4gKi8KKyAg LyogbGluZXMgaXMgYSBOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgb2Ygc3RyaW5ncy4gICAqLworICB7 CishICAgd2NoYXJfdCAqKmxpbmU7CisgIAorICAgIGZvciAobGluZSA9IGxpbmVzOyAgKmxpbmU7 ICArK2xpbmUpCisgICAgICBmcmVlKCpsaW5lKTsKKyoqKioqKioqKioqKioqKgorKioqIDY3OCw3 NDUgKioqKgorICAgIGZyZWUobGluZXMpOworICB9CisgIAorLSAKKyAgaW50IG1haW4oaW50IGFy Z2MsIGNvbnN0IGNoYXIgKiBjb25zdCAqYXJndikKKyAgeworICAgIGludCBoZWxwID0gMCwgdmVy c2lvbiA9IDAsIGhhbmcgPSAwLCBwcmVmaXggPSAtMSwgcmVwZWF0ID0gMCwgc3VmZml4ID0gLTEs CisgICAgICAgIFRhYiA9IDEsIHdpZHRoID0gNzIsIGJvZHkgPSAwLCBjYXAgPSAwLCBkaXYgPSAw LCBFcnIgPSAwLCBleHBlbCA9IDAsCisgICAgICAgIGZpdCA9IDAsIGd1ZXNzID0gMCwgaW52aXMg PSAwLCBqdXN0ID0gMCwgbGFzdCA9IDAsIHF1b3RlID0gMCwgUmVwb3J0ID0gMCwKKyAgICAgICAg dG91Y2ggPSAtMTsKKyEgICBpbnQgcHJlZml4YmFrLCBzdWZmaXhiYWssIGMsIHNhd25vbmJsYW5r LCBvd2VibGFuaywgbiwgaSwgYWZwLCBmczsKKyAgICBjaGFyc2V0ICpib2R5Y2hhcnMgPSBOVUxM LCAqcHJvdGVjdGNoYXJzID0gTlVMTCwgKnF1b3RlY2hhcnMgPSBOVUxMOworISAgIGNoYXIgKnBh cmluaXQgPSBOVUxMLCAqYXJnLCAqKmlubGluZXMgPSBOVUxMLCAqKmVuZGxpbmUsICoqZmlyc3Rs aW5lLCAqZW5kLAorISAgICAgICAgKipuZXh0bGluZSwgKipvdXRsaW5lcyA9IE5VTEwsICoqbGlu ZSwgY2g7CishICAgY29uc3QgY2hhciAqZW52LCAqIGNvbnN0IHdoaXRlY2hhcnMgPSAiIFxmXG5c clx0XHYiOworICAgIGVycm1zZ190IGVycm1zZyA9IHsgJ1wwJyB9OworICAgIGxpbmVwcm9wICpw cm9wcyA9IE5VTEwsICpmaXJzdHByb3AsICpuZXh0cHJvcDsKKyAgICBGSUxFICplcnJvdXQ7Cisg IAorICAvKiBTZXQgdGhlIGN1cnJlbnQgbG9jYWxlIGZyb20gdGhlIGVudmlyb25tZW50OiAqLwor ICAKKyAgICBzZXRsb2NhbGUoTENfQUxMLCIiKTsKKyAgCisgIC8qIFByb2Nlc3MgZW52aXJvbm1l bnQgdmFyaWFibGVzOiAqLworICAKKyAgICBlbnYgPSBnZXRlbnYoIlBBUkJPRFkiKTsKKyAgICBp ZiAoIWVudikgZW52ID0gIiI7CishICAgYm9keWNoYXJzID0gcGFyc2VjaGFyc2V0KGVudixlcnJt c2cpOworICAgIGlmICgqZXJybXNnKSB7CisgICAgICBoZWxwID0gMTsKKyAgICAgIGdvdG8gcGFy Y2xlYW51cDsKKyAgICB9CisgIAorICAgIGVudiA9IGdldGVudigiUEFSUFJPVEVDVCIpOworICAg IGlmICghZW52KSBlbnYgPSAiIjsKKyEgICBwcm90ZWN0Y2hhcnMgPSBwYXJzZWNoYXJzZXQoZW52 LGVycm1zZyk7CisgICAgaWYgKCplcnJtc2cpIHsKKyAgICAgIGhlbHAgPSAxOworICAgICAgZ290 byBwYXJjbGVhbnVwOworICAgIH0KKyAgCisgICAgZW52ID0gZ2V0ZW52KCJQQVJRVU9URSIpOwor ICAgIGlmICghZW52KSBlbnYgPSAiPiAiOworISAgIHF1b3RlY2hhcnMgPSBwYXJzZWNoYXJzZXQo ZW52LGVycm1zZyk7CisgICAgaWYgKCplcnJtc2cpIHsKKyAgICAgIGhlbHAgPSAxOworICAgICAg Z290byBwYXJjbGVhbnVwOworICAgIH0KKyAgCisgICAgZW52ID0gZ2V0ZW52KCJQQVJJTklUIik7 CisgICAgaWYgKGVudikgeworISAgICAgcGFyaW5pdCA9IG1hbGxvYygoc3RybGVuKGVudikgKyAx KSAqIHNpemVvZiAoY2hhcikpOworICAgICAgaWYgKCFwYXJpbml0KSB7CishICAgICAgIHN0cmNw eShlcnJtc2csb3V0b2ZtZW0pOworICAgICAgICBnb3RvIHBhcmNsZWFudXA7CisgICAgICB9Cish ICAgICBzdHJjcHkocGFyaW5pdCxlbnYpOworISAgICAgYXJnID0gc3RydG9rKHBhcmluaXQsd2hp dGVjaGFycyk7CisgICAgICB3aGlsZSAoYXJnKSB7CisgICAgICAgIHBhcnNlYXJnKGFyZywgJmhl bHAsICZ2ZXJzaW9uLCBib2R5Y2hhcnMsIHByb3RlY3RjaGFycywKKyAgICAgICAgICAgICAgICAg cXVvdGVjaGFycywgJmhhbmcsICZwcmVmaXgsICZyZXBlYXQsICZzdWZmaXgsICZUYWIsCisgICAg ICAgICAgICAgICAgICZ3aWR0aCwgJmJvZHksICZjYXAsICZkaXYsICZFcnIsICZleHBlbCwgJmZp dCwgJmd1ZXNzLAorICAgICAgICAgICAgICAgICAmaW52aXMsICZqdXN0LCAmbGFzdCwgJnF1b3Rl LCAmUmVwb3J0LCAmdG91Y2gsIGVycm1zZyApOworICAgICAgICBpZiAoKmVycm1zZyB8fCBoZWxw IHx8IHZlcnNpb24pIGdvdG8gcGFyY2xlYW51cDsKKyEgICAgICAgYXJnID0gc3RydG9rKE5VTEws d2hpdGVjaGFycyk7CisgICAgICB9CisgICAgICBmcmVlKHBhcmluaXQpOworICAgICAgcGFyaW5p dCA9IE5VTEw7CistLS0gNjQyLDc1NyAtLS0tCisgICAgZnJlZShsaW5lcyk7CisgIH0KKyAgCisg IGludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICogY29uc3QgKmFyZ3YpCisgIHsKKyAgICBp bnQgaGVscCA9IDAsIHZlcnNpb24gPSAwLCBoYW5nID0gMCwgcHJlZml4ID0gLTEsIHJlcGVhdCA9 IDAsIHN1ZmZpeCA9IC0xLAorICAgICAgICBUYWIgPSAxLCB3aWR0aCA9IDcyLCBib2R5ID0gMCwg Y2FwID0gMCwgZGl2ID0gMCwgRXJyID0gMCwgZXhwZWwgPSAwLAorICAgICAgICBmaXQgPSAwLCBn dWVzcyA9IDAsIGludmlzID0gMCwganVzdCA9IDAsIGxhc3QgPSAwLCBxdW90ZSA9IDAsIFJlcG9y dCA9IDAsCisgICAgICAgIHRvdWNoID0gLTE7CishICAgaW50IHByZWZpeGJhaywgc3VmZml4YmFr LCBzYXdub25ibGFuaywgb3dlYmxhbmssIG4sIGksIGFmcCwgZnM7CisgICAgY2hhcnNldCAqYm9k eWNoYXJzID0gTlVMTCwgKnByb3RlY3RjaGFycyA9IE5VTEwsICpxdW90ZWNoYXJzID0gTlVMTDsK KyEgICB3aW50X3QgYzsKKyEgICB3Y2hhcl90ICpzdGF0ZTsKKyEgICB3Y2hhcl90ICpwYXJpbml0 ID0gTlVMTCwgKmFyZywgKippbmxpbmVzID0gTlVMTCwgKiplbmRsaW5lLCAqKmZpcnN0bGluZSwg KmVuZCwKKyEgICAgICoqbmV4dGxpbmUsICoqb3V0bGluZXMgPSBOVUxMLCAqKmxpbmU7CishICAg Y29uc3QgY2hhciAqZW52OworISAgIHdjaGFyX3QgKndlbnYgPSBOVUxMOworISAgIGNvbnN0IHdj aGFyX3QgKiBjb25zdCB3aGl0ZWNoYXJzID0gTCIgXGZcblxyXHRcdiI7CisgICAgZXJybXNnX3Qg ZXJybXNnID0geyAnXDAnIH07CisgICAgbGluZXByb3AgKnByb3BzID0gTlVMTCwgKmZpcnN0cHJv cCwgKm5leHRwcm9wOworICAgIEZJTEUgKmVycm91dDsKKysgICBjaGFyICpsYW5naW5mbzsKKyAg CisgIC8qIFNldCB0aGUgY3VycmVudCBsb2NhbGUgZnJvbSB0aGUgZW52aXJvbm1lbnQ6ICovCisg IAorICAgIHNldGxvY2FsZShMQ19BTEwsIiIpOworKyAgIGxhbmdpbmZvID0gbmxfbGFuZ2luZm8o Q09ERVNFVCk7CisrICAgaWYgKCFzdHJjbXAobGFuZ2luZm8sICJBTlNJX1gzLjQtMTk2OCIpKSB7 CisrICAgICAvLyBXZSB3b3VsZCBsaWtlIHRvIGZhbGxiYWNrIGluIGFuIDggYml0cyBlbmNvZGlu ZywgYnV0IGl0IGlzIG5vdCBlYXNpbHkgcG9zc2libGUuCisrICAgICAvL3NldGxvY2FsZShMQ19D VFlQRSwgIkMiKTsKKysgICAgIC8vbGFuZ2luZm8gPSBubF9sYW5naW5mbyhDT0RFU0VUKTsKKysg ICAgIGZ3cHJpbnRmKCBFcnIgPyBzdGRlcnIgOiBzdGRvdXQsIAorKyAgICAgICAgIEwiV2Fybmlu ZzogTG9jYWxlIHNlZW1zIG5vdCBjb25maWd1cmVkXG4iKTsKKysgICB9CisgIAorICAvKiBQcm9j ZXNzIGVudmlyb25tZW50IHZhcmlhYmxlczogKi8KKyAgCisgICAgZW52ID0gZ2V0ZW52KCJQQVJC T0RZIik7CisgICAgaWYgKCFlbnYpIGVudiA9ICIiOworISAgIHdlbnYgPSBtYWxsb2MoKHN0cmxl bihlbnYpICsgMSkgKiBzaXplb2YgKHdjaGFyX3QpKTsKKyEgICBpZiAoIXdlbnYpIHsKKyEgICAg IHdjc2NweShlcnJtc2csb3V0b2ZtZW0pOworISAgICAgZ290byBwYXJjbGVhbnVwOworISAgIH0K KyEgICBpZiAoMCA+IG1ic3Rvd2NzKHdlbnYsZW52LCBzdHJsZW4oZW52KSArIDEpKSB7CishICAg ICB3Y3NjcHkoZXJybXNnLCBMIkludmFsaWQgbXVsdGlieXRlIHNlcXVlbmNlIGluIFBBUkJPRFlc biIpOworISAgICAgZ290byBwYXJjbGVhbnVwOworISAgIH0KKyEgICBib2R5Y2hhcnMgPSBwYXJz ZWNoYXJzZXQod2VudixlcnJtc2cpOworICAgIGlmICgqZXJybXNnKSB7CisgICAgICBoZWxwID0g MTsKKyAgICAgIGdvdG8gcGFyY2xlYW51cDsKKyAgICB9CisrICAgZnJlZSh3ZW52KTsKKysgICB3 ZW52ID0gTlVMTDsKKyAgCisgICAgZW52ID0gZ2V0ZW52KCJQQVJQUk9URUNUIik7CisgICAgaWYg KCFlbnYpIGVudiA9ICIiOworISAgIHdlbnYgPSBtYWxsb2MoKHN0cmxlbihlbnYpICsgMSkgKiBz aXplb2YgKHdjaGFyX3QpKTsKKyEgICBpZiAoIXdlbnYpIHsKKyEgICAgIHdjc2NweShlcnJtc2cs b3V0b2ZtZW0pOworISAgICAgZ290byBwYXJjbGVhbnVwOworISAgIH0KKyEgICBpZiAoMCA+IG1i c3Rvd2NzKHdlbnYsZW52LCBzdHJsZW4oZW52KSArIDEpKSB7CishICAgICB3Y3NjcHkoZXJybXNn LCBMIkludmFsaWQgbXVsdGlieXRlIHNlcXVlbmNlIGluIFBBUlBST1RFQ1RcbiIpOworISAgICAg Z290byBwYXJjbGVhbnVwOworISAgIH0KKyEgICBwcm90ZWN0Y2hhcnMgPSBwYXJzZWNoYXJzZXQo d2VudixlcnJtc2cpOworICAgIGlmICgqZXJybXNnKSB7CisgICAgICBoZWxwID0gMTsKKyAgICAg IGdvdG8gcGFyY2xlYW51cDsKKyAgICB9CisrICAgZnJlZSh3ZW52KTsKKysgICB3ZW52ID0gTlVM TDsKKyAgCisgICAgZW52ID0gZ2V0ZW52KCJQQVJRVU9URSIpOworICAgIGlmICghZW52KSBlbnYg PSAiPiAiOworISAgIHdlbnYgPSBtYWxsb2MoKHN0cmxlbihlbnYpICsgMSkgKiBzaXplb2YgKHdj aGFyX3QpKTsKKyEgICBpZiAoIXdlbnYpIHsKKyEgICAgIHdjc2NweShlcnJtc2csb3V0b2ZtZW0p OworISAgICAgZ290byBwYXJjbGVhbnVwOworISAgIH0KKyEgICBpZiAoMCA+IG1ic3Rvd2NzKHdl bnYsZW52LCBzdHJsZW4oZW52KSArIDEpKSB7CishICAgICB3Y3NjcHkoZXJybXNnLCBMIkludmFs aWQgbXVsdGlieXRlIHNlcXVlbmNlIGluIFBBUlFVT1RFXG4iKTsKKyEgICAgIGdvdG8gcGFyY2xl YW51cDsKKyEgICB9CishICAgcXVvdGVjaGFycyA9IHBhcnNlY2hhcnNldCh3ZW52LGVycm1zZyk7 CisgICAgaWYgKCplcnJtc2cpIHsKKyAgICAgIGhlbHAgPSAxOworICAgICAgZ290byBwYXJjbGVh bnVwOworICAgIH0KKysgICBmcmVlKHdlbnYpOworKyAgIHdlbnYgPSBOVUxMOworICAKKyAgICBl bnYgPSBnZXRlbnYoIlBBUklOSVQiKTsKKyAgICBpZiAoZW52KSB7CishICAgICBwYXJpbml0ID0g bWFsbG9jKChzdHJsZW4oZW52KSArIDEpICogc2l6ZW9mICh3Y2hhcl90KSk7CisgICAgICBpZiAo IXBhcmluaXQpIHsKKyEgICAgICAgd2NzY3B5KGVycm1zZyxvdXRvZm1lbSk7CisgICAgICAgIGdv dG8gcGFyY2xlYW51cDsKKyAgICAgIH0KKyEgICAgIGlmICgwID4gbWJzdG93Y3MocGFyaW5pdCxl bnYsIHN0cmxlbihlbnYpICsgMSkpIHsKKyEgICAgICAgd2NzY3B5KGVycm1zZywgTCJJbnZhbGlk IG11bHRpYnl0ZSBzZXF1ZW5jZSBpbiBQQVJJTklUXG4iKTsKKyEgICAgICAgZ290byBwYXJjbGVh bnVwOworISAgICAgfSAgICAKKyEgICAgIGFyZyA9IHdjc3RvayhwYXJpbml0LCB3aGl0ZWNoYXJz LCAmc3RhdGUpOworICAgICAgd2hpbGUgKGFyZykgeworICAgICAgICBwYXJzZWFyZyhhcmcsICZo ZWxwLCAmdmVyc2lvbiwgYm9keWNoYXJzLCBwcm90ZWN0Y2hhcnMsCisgICAgICAgICAgICAgICAg IHF1b3RlY2hhcnMsICZoYW5nLCAmcHJlZml4LCAmcmVwZWF0LCAmc3VmZml4LCAmVGFiLAorICAg ICAgICAgICAgICAgICAmd2lkdGgsICZib2R5LCAmY2FwLCAmZGl2LCAmRXJyLCAmZXhwZWwsICZm aXQsICZndWVzcywKKyAgICAgICAgICAgICAgICAgJmludmlzLCAmanVzdCwgJmxhc3QsICZxdW90 ZSwgJlJlcG9ydCwgJnRvdWNoLCBlcnJtc2cgKTsKKyAgICAgICAgaWYgKCplcnJtc2cgfHwgaGVs cCB8fCB2ZXJzaW9uKSBnb3RvIHBhcmNsZWFudXA7CishICAgICAgIGFyZyA9IHdjc3RvayhOVUxM LCB3aGl0ZWNoYXJzLCAmc3RhdGUpOworICAgICAgfQorICAgICAgZnJlZShwYXJpbml0KTsKKyAg ICAgIHBhcmluaXQgPSBOVUxMOworKioqKioqKioqKioqKioqCisqKiogNzQ4LDgwNCAqKioqCisg IC8qIFByb2Nlc3MgY29tbWFuZCBsaW5lIGFyZ3VtZW50czogKi8KKyAgCisgICAgd2hpbGUgKCor K2FyZ3YpIHsKKyEgICAgIHBhcnNlYXJnKCphcmd2LCAmaGVscCwgJnZlcnNpb24sIGJvZHljaGFy cywgcHJvdGVjdGNoYXJzLAorICAgICAgICAgICAgICAgcXVvdGVjaGFycywgJmhhbmcsICZwcmVm aXgsICZyZXBlYXQsICZzdWZmaXgsICZUYWIsCisgICAgICAgICAgICAgICAmd2lkdGgsICZib2R5 LCAmY2FwLCAmZGl2LCAmRXJyLCAmZXhwZWwsICZmaXQsICZndWVzcywKKyAgICAgICAgICAgICAg ICZpbnZpcywgJmp1c3QsICZsYXN0LCAmcXVvdGUsICZSZXBvcnQsICZ0b3VjaCwgZXJybXNnICk7 CisgICAgICBpZiAoKmVycm1zZyB8fCBoZWxwIHx8IHZlcnNpb24pIGdvdG8gcGFyY2xlYW51cDsK KyAgICB9CisgIAorICAgIGlmIChUYWIgPT0gMCkgeworISAgICAgc3RyY3B5KGVycm1zZywgIjxU YWI+IG11c3Qgbm90IGJlIDAuXG4iKTsKKyAgICAgIGdvdG8gcGFyY2xlYW51cDsKKyAgICB9Cisg IAorICAgIGlmICh0b3VjaCA8IDApIHRvdWNoID0gZml0IHx8IGxhc3Q7CisgICAgcHJlZml4YmFr ID0gcHJlZml4OworICAgIHN1ZmZpeGJhayA9IHN1ZmZpeDsKKyEgCishIC8qIE1haW4gbG9vcDog Ki8KKyEgCisgICAgZm9yIChzYXdub25ibGFuayA9IG93ZWJsYW5rID0gMDsgIDsgICkgeworICAg ICAgZm9yICg7OykgeworISAgICAgICBjID0gZ2V0Y2hhcigpOworISAgICAgICBpZiAoYyA9PSBF T0YpIGJyZWFrOworISAgICAgICAqKHVuc2lnbmVkIGNoYXIgKikmY2ggPSBjOworISAgICAgICBp ZiAoZXhwZWwgJiYgY2ggPT0gJ1xuJykgeworICAgICAgICAgIG93ZWJsYW5rID0gc2F3bm9uYmxh bms7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyEgICAgICAgaWYgKGNzbWVtYmVy KGNoLCBwcm90ZWN0Y2hhcnMpKSB7CisgICAgICAgICAgc2F3bm9uYmxhbmsgPSAxOworICAgICAg ICAgIGlmIChvd2VibGFuaykgeworISAgICAgICAgICAgcHV0cygiIik7CisgICAgICAgICAgICBv d2VibGFuayA9IDA7CisgICAgICAgICAgfQorISAgICAgICAgIHdoaWxlIChjaCAhPSAnXG4nKSB7 CishICAgICAgICAgICBwdXRjaGFyKGMpOworISAgICAgICAgICAgYyA9IGdldGNoYXIoKTsKKyEg ICAgICAgICAgIGlmIChjID09IEVPRikgYnJlYWs7CishICAgICAgICAgICAqKHVuc2lnbmVkIGNo YXIgKikmY2ggPSBjOworICAgICAgICAgIH0KKyAgICAgICAgfQorISAgICAgICBpZiAoY2ggIT0g J1xuJykgYnJlYWs7ICAvKiBzdWJzdW1lcyB0aGUgY2FzZSB0aGF0IGMgPT0gRU9GICovCishICAg ICAgIHB1dGNoYXIoYyk7CisgICAgICB9CishICAgICBpZiAoYyA9PSBFT0YpIGJyZWFrOworISAg ICAgdW5nZXRjKGMsc3RkaW4pOworICAKKyAgICAgIGlubGluZXMgPQorICAgICAgICByZWFkbGlu ZXMoJnByb3BzLCBwcm90ZWN0Y2hhcnMsIHF1b3RlY2hhcnMsIFRhYiwgaW52aXMsIHF1b3RlLCBl cnJtc2cpOworICAgICAgaWYgKCplcnJtc2cpIGdvdG8gcGFyY2xlYW51cDsKKyEgCishICAgICBm b3IgKGVuZGxpbmUgPSBpbmxpbmVzOyAgKmVuZGxpbmU7ICArK2VuZGxpbmUpOworICAgICAgaWYg KGVuZGxpbmUgPT0gaW5saW5lcykgeworICAgICAgICBmcmVlKGlubGluZXMpOworICAgICAgICBp bmxpbmVzID0gTlVMTDsKKy0tLSA3NjAsODMwIC0tLS0KKyAgLyogUHJvY2VzcyBjb21tYW5kIGxp bmUgYXJndW1lbnRzOiAqLworICAKKyAgICB3aGlsZSAoKisrYXJndikgeworISAgICAgYXJnID0g bWFsbG9jKChzdHJsZW4oKmFyZ3YpICsgMSkgKiBzaXplb2YgKHdjaGFyX3QpKTsKKyEgICAgIGlm ICgwID4gbWJzdG93Y3MoYXJnLCAqYXJndiwgc3RybGVuKCphcmd2KSArIDEpKSB7CishICAgICAg IHdjc2NweShlcnJtc2csIEwiSW52YWxpZCBtdWx0aWJ5dGUgc2VxdWVuY2UgaW4gYXJndW1lbnRc biIpOworISAgICAgICBnb3RvIHBhcmNsZWFudXA7CishICAgICB9CishICAgICBwYXJzZWFyZyhh cmcsICZoZWxwLCAmdmVyc2lvbiwgYm9keWNoYXJzLCBwcm90ZWN0Y2hhcnMsCisgICAgICAgICAg ICAgICBxdW90ZWNoYXJzLCAmaGFuZywgJnByZWZpeCwgJnJlcGVhdCwgJnN1ZmZpeCwgJlRhYiwK KyAgICAgICAgICAgICAgICZ3aWR0aCwgJmJvZHksICZjYXAsICZkaXYsICZFcnIsICZleHBlbCwg JmZpdCwgJmd1ZXNzLAorICAgICAgICAgICAgICAgJmludmlzLCAmanVzdCwgJmxhc3QsICZxdW90 ZSwgJlJlcG9ydCwgJnRvdWNoLCBlcnJtc2cgKTsKKysgICAgIGZyZWUoYXJnKTsKKyAgICAgIGlm ICgqZXJybXNnIHx8IGhlbHAgfHwgdmVyc2lvbikgZ290byBwYXJjbGVhbnVwOworICAgIH0KKyAg CisgICAgaWYgKFRhYiA9PSAwKSB7CishICAgICB3Y3NjcHkoZXJybXNnLCBMIjxUYWI+IG11c3Qg bm90IGJlIDAuXG4iKTsKKyAgICAgIGdvdG8gcGFyY2xlYW51cDsKKyAgICB9CisgIAorICAgIGlm ICh0b3VjaCA8IDApIHRvdWNoID0gZml0IHx8IGxhc3Q7CisgICAgcHJlZml4YmFrID0gcHJlZml4 OworICAgIHN1ZmZpeGJhayA9IHN1ZmZpeDsKKyEgICAKKyEgICAvKiBNYWluIGxvb3A6ICovCisg ICAgZm9yIChzYXdub25ibGFuayA9IG93ZWJsYW5rID0gMDsgIDsgICkgeworICAgICAgZm9yICg7 OykgeworISAgICAgICBjID0gZ2V0d2NoYXIoKTsKKyEgICAgICAgaWYgKGMgPT0gV0VPRikgewor ISAgICAgICAgIGlmIChlcnJubyA9PSBFSUxTRVEpIHsKKyEgICAgICAgICAgIHdjc2NweShlcnJt c2csIEwiSW52YWxpZCBtdWx0aWJ5dGUgc2VxdWVuY2UgaW4gaW5wdXRcbiIpOworISAgICAgICAg ICAgZ290byBwYXJjbGVhbnVwOworISAgICAgICAgIH0KKyEgICAgICAgICBicmVhazsKKyEgICAg ICAgfQorISAgICAgICBpZiAoZXhwZWwgJiYgYyA9PSBMJ1xuJykgeworICAgICAgICAgIG93ZWJs YW5rID0gc2F3bm9uYmxhbms7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyEgICAg ICAgaWYgKGNzbWVtYmVyKGMsIHByb3RlY3RjaGFycykpIHsKKyAgICAgICAgICBzYXdub25ibGFu ayA9IDE7CisgICAgICAgICAgaWYgKG93ZWJsYW5rKSB7CishICAgICAgICAgICBmcHV0d2MoTCdc bicsIHN0ZG91dCk7CisgICAgICAgICAgICBvd2VibGFuayA9IDA7CisgICAgICAgICAgfQorISAg ICAgICAgIHdoaWxlIChjICE9IEwnXG4nKSB7CishICAgICAgICAgICBwdXR3Y2hhcihjKTsKKyEg ICAgICAgICAgIGMgPSBnZXR3Y2hhcigpOworISAgICAgICAgICAgaWYgKGMgPT0gV0VPRikgewor ISAgICAgICAgICAgICBpZiAoZXJybm8gPT0gRUlMU0VRKSB7CishICAgICAgICAgICAgICAgd2Nz Y3B5KGVycm1zZywgTCJJbnZhbGlkIG11bHRpYnl0ZSBzZXF1ZW5jZSBpbiBpbnB1dFxuIik7Cish ICAgICAgICAgICAgICAgZ290byBwYXJjbGVhbnVwOworISAgICAgICAgICAgICB9CishICAgICAg ICAgICAgIGJyZWFrOworISAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorISAg ICAgICBpZiAoYyAhPSBMJ1xuJykgYnJlYWs7ICAvKiBzdWJzdW1lcyB0aGUgY2FzZSB0aGF0IGMg PT0gRU9GICovCishICAgICAgIHB1dHdjaGFyKGMpOworICAgICAgfQorISAgICAgaWYgKGMgPT0g V0VPRikgYnJlYWs7CishICAgICB1bmdldHdjKGMsc3RkaW4pOworICAKKyAgICAgIGlubGluZXMg PQorICAgICAgICByZWFkbGluZXMoJnByb3BzLCBwcm90ZWN0Y2hhcnMsIHF1b3RlY2hhcnMsIFRh YiwgaW52aXMsIHF1b3RlLCBlcnJtc2cpOworICAgICAgaWYgKCplcnJtc2cpIGdvdG8gcGFyY2xl YW51cDsKKyEgICAgIGZvciAoZW5kbGluZSA9IGlubGluZXM7ICAqZW5kbGluZTsgICsrZW5kbGlu ZSkgOworICAgICAgaWYgKGVuZGxpbmUgPT0gaW5saW5lcykgeworICAgICAgICBmcmVlKGlubGlu ZXMpOworICAgICAgICBpbmxpbmVzID0gTlVMTDsKKyoqKioqKioqKioqKioqKgorKioqIDgwNyw4 NDQgKioqKgorICAKKyAgICAgIHNhd25vbmJsYW5rID0gMTsKKyAgICAgIGlmIChvd2VibGFuaykg eworISAgICAgICBwdXRzKCIiKTsKKyAgICAgICAgb3dlYmxhbmsgPSAwOworICAgICAgfQorICAK KyEgICAgIGRlbGltaXQoKGNvbnN0IGNoYXIgKiBjb25zdCAqKSBpbmxpbmVzLAorISAgICAgICAg ICAgICAoY29uc3QgY2hhciAqIGNvbnN0ICopIGVuZGxpbmUsCisgICAgICAgICAgICAgIGJvZHlj aGFycywgcmVwZWF0LCBib2R5LCBkaXYsIDAsIDAsIHByb3BzKTsKKyAgCisgICAgICBpZiAoZXhw ZWwpCishICAgICAgIG1hcmtzdXBlcmYoKGNvbnN0IGNoYXIgKiBjb25zdCAqKSBpbmxpbmVzLAor ISAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICogY29uc3QgKikgZW5kbGluZSwgcHJvcHMp OworICAKKyAgICAgIGZpcnN0bGluZSA9IGlubGluZXMsIGZpcnN0cHJvcCA9IHByb3BzOworICAg ICAgZG8geworICAgICAgICBpZiAoaXNib2RpbGVzcyhmaXJzdHByb3ApKSB7CisgICAgICAgICAg aWYgKCFpc2ludmlzKGZpcnN0cHJvcCkgJiYgIShleHBlbCAmJiBpc3N1cGVyZihmaXJzdHByb3Ap KSkgeworICAgICAgICAgICAgZm9yIChlbmQgPSAqZmlyc3RsaW5lOyAgKmVuZDsgICsrZW5kKTsK KyEgICAgICAgICAgIGlmICghcmVwZWF0IHx8IChmaXJzdHByb3AtPnJjID09ICcgJyAmJiAhZmly c3Rwcm9wLT5zKSkgeworISAgICAgICAgICAgICB3aGlsZSAoZW5kID4gKmZpcnN0bGluZSAmJiBl bmRbLTFdID09ICcgJykgLS1lbmQ7CishICAgICAgICAgICAgICplbmQgPSAnXDAnOworISAgICAg ICAgICAgICBwdXRzKCpmaXJzdGxpbmUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz ZSB7CisgICAgICAgICAgICAgIG4gPSB3aWR0aCAtIGZpcnN0cHJvcC0+cCAtIGZpcnN0cHJvcC0+ czsKKyAgICAgICAgICAgICAgaWYgKG4gPCAwKSB7CishICAgICAgICAgICAgICAgc3ByaW50Zihl cnJtc2csaW1wb3NzaWJpbGl0eSw1KTsKKyAgICAgICAgICAgICAgICBnb3RvIHBhcmNsZWFudXA7 CisgICAgICAgICAgICAgIH0KKyEgICAgICAgICAgICAgcHJpbnRmKCIlLipzIiwgZmlyc3Rwcm9w LT5wLCAqZmlyc3RsaW5lKTsKKyAgICAgICAgICAgICAgZm9yIChpID0gbjsgIGk7ICAtLWkpCish ICAgICAgICAgICAgICAgcHV0Y2hhcigqKHVuc2lnbmVkIGNoYXIgKikmZmlyc3Rwcm9wLT5yYyk7 CishICAgICAgICAgICAgIHB1dHMoZW5kIC0gZmlyc3Rwcm9wLT5zKTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICB9CisgICAgICAgICAgKytmaXJzdGxpbmUsICsrZmlyc3Rwcm9wOworLS0tIDgz Myw4NzEgLS0tLQorICAKKyAgICAgIHNhd25vbmJsYW5rID0gMTsKKyAgICAgIGlmIChvd2VibGFu aykgeworISAgICAgICBmcHV0d2MoTCdcbicsIHN0ZG91dCk7CisgICAgICAgIG93ZWJsYW5rID0g MDsKKyAgICAgIH0KKyAgCishICAgICBkZWxpbWl0KChjb25zdCB3Y2hhcl90ICogY29uc3QgKikg aW5saW5lcywKKyEgICAgICAgICAgICAgKGNvbnN0IHdjaGFyX3QgKiBjb25zdCAqKSBlbmRsaW5l LAorICAgICAgICAgICAgICBib2R5Y2hhcnMsIHJlcGVhdCwgYm9keSwgZGl2LCAwLCAwLCBwcm9w cyk7CisgIAorICAgICAgaWYgKGV4cGVsKQorISAgICAgICBtYXJrc3VwZXJmKChjb25zdCB3Y2hh cl90ICogY29uc3QgKikgaW5saW5lcywKKyEgICAgICAgICAgICAgICAgICAoY29uc3Qgd2NoYXJf dCAqIGNvbnN0ICopIGVuZGxpbmUsIHByb3BzKTsKKyAgCisgICAgICBmaXJzdGxpbmUgPSBpbmxp bmVzLCBmaXJzdHByb3AgPSBwcm9wczsKKysgCisgICAgICBkbyB7CisgICAgICAgIGlmIChpc2Jv ZGlsZXNzKGZpcnN0cHJvcCkpIHsKKyAgICAgICAgICBpZiAoIWlzaW52aXMoZmlyc3Rwcm9wKSAm JiAhKGV4cGVsICYmIGlzc3VwZXJmKGZpcnN0cHJvcCkpKSB7CisgICAgICAgICAgICBmb3IgKGVu ZCA9ICpmaXJzdGxpbmU7ICAqZW5kOyAgKytlbmQpOworISAgICAgICAgICAgaWYgKCFyZXBlYXQg fHwgKGZpcnN0cHJvcC0+cmMgPT0gTCcgJyAmJiAhZmlyc3Rwcm9wLT5zKSkgeworISAgICAgICAg ICAgICB3aGlsZSAoZW5kID4gKmZpcnN0bGluZSAmJiBlbmRbLTFdID09IEwnICcpIC0tZW5kOwor ISAgICAgICAgICAgICAqZW5kID0gTCdcMCc7CishICAgICAgICAgICAgIGZ3cHJpbnRmKHN0ZG91 dCwgTCIlbHNcbiIsICpmaXJzdGxpbmUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz ZSB7CisgICAgICAgICAgICAgIG4gPSB3aWR0aCAtIGZpcnN0cHJvcC0+cCAtIGZpcnN0cHJvcC0+ czsKKyAgICAgICAgICAgICAgaWYgKG4gPCAwKSB7CishICAgICAgICAgICAgICAgc3dwcmludGYo ZXJybXNnLGVycm1zZ19zaXplLGltcG9zc2liaWxpdHksNSk7CisgICAgICAgICAgICAgICAgZ290 byBwYXJjbGVhbnVwOworICAgICAgICAgICAgICB9CishICAgICAgICAgICAgIGZ3cHJpbnRmKHN0 ZG91dCwgTCIlLipscyIsIGZpcnN0cHJvcC0+cCwgKmZpcnN0bGluZSk7CisgICAgICAgICAgICAg IGZvciAoaSA9IG47ICBpOyAgLS1pKQorISAgICAgICAgICAgICAgIGZwdXR3YyhmaXJzdHByb3At PnJjLCBzdGRvdXQpOworISAgICAgICAgICAgICBmd3ByaW50ZihzdGRvdXQsIEwiJWxzXG4iLCBl bmQgLSBmaXJzdHByb3AtPnMpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAg ICArK2ZpcnN0bGluZSwgKytmaXJzdHByb3A7CisqKioqKioqKioqKioqKioKKyoqKiA4NDgsODc1 ICoqKioKKyAgICAgICAgZm9yIChuZXh0bGluZSA9IGZpcnN0bGluZSArIDEsIG5leHRwcm9wID0g Zmlyc3Rwcm9wICsgMTsKKyAgICAgICAgICAgICBuZXh0bGluZSA8IGVuZGxpbmUgJiYgIWlzYm9k aWxlc3MobmV4dHByb3ApICYmICFpc2ZpcnN0KG5leHRwcm9wKTsKKyAgICAgICAgICAgICArK25l eHRsaW5lLCArK25leHRwcm9wKTsKKyEgCisgICAgICAgIHByZWZpeCA9IHByZWZpeGJhaywgc3Vm Zml4ID0gc3VmZml4YmFrOworISAgICAgICBzZXRhZmZpeGVzKChjb25zdCBjaGFyICogY29uc3Qg KikgZmlyc3RsaW5lLAorISAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICogY29uc3QgKikg bmV4dGxpbmUsIGZpcnN0cHJvcCwgYm9keWNoYXJzLAorICAgICAgICAgICAgICAgICAgIHF1b3Rl Y2hhcnMsIGhhbmcsIGJvZHksIHF1b3RlLCAmYWZwLCAmZnMsICZwcmVmaXgsICZzdWZmaXgpOwor ICAgICAgICBpZiAod2lkdGggPD0gcHJlZml4ICsgc3VmZml4KSB7CishICAgICAgICAgc3ByaW50 ZihlcnJtc2csCishICAgICAgICAgICAgICAgICAiPHdpZHRoPiAoJWQpIDw9IDxwcmVmaXg+ICgl ZCkgKyA8c3VmZml4PiAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgd2lkdGgsIHByZWZpeCwg c3VmZml4KTsKKyAgICAgICAgICBnb3RvIHBhcmNsZWFudXA7CisgICAgICAgIH0KKyAgCisgICAg ICAgIG91dGxpbmVzID0KKyEgICAgICAgICByZWZvcm1hdCgoY29uc3QgY2hhciAqIGNvbnN0ICop IGZpcnN0bGluZSwKKyEgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqIGNvbnN0ICopIG5l eHRsaW5lLAorICAgICAgICAgICAgICAgICAgIGFmcCwgZnMsIGhhbmcsIHByZWZpeCwgc3VmZml4 LCB3aWR0aCwgY2FwLAorICAgICAgICAgICAgICAgICAgIGZpdCwgZ3Vlc3MsIGp1c3QsIGxhc3Qs IFJlcG9ydCwgdG91Y2gsIGVycm1zZyk7CisgICAgICAgIGlmICgqZXJybXNnKSBnb3RvIHBhcmNs ZWFudXA7CistIAorICAgICAgICBmb3IgKGxpbmUgPSBvdXRsaW5lczsgICpsaW5lOyAgKytsaW5l KQorISAgICAgICAgIHB1dHMoKmxpbmUpOworISAKKyAgICAgICAgZnJlZWxpbmVzKG91dGxpbmVz KTsKKyAgICAgICAgb3V0bGluZXMgPSBOVUxMOworICAKKy0tLSA4NzUsOTAwIC0tLS0KKyAgICAg ICAgZm9yIChuZXh0bGluZSA9IGZpcnN0bGluZSArIDEsIG5leHRwcm9wID0gZmlyc3Rwcm9wICsg MTsKKyAgICAgICAgICAgICBuZXh0bGluZSA8IGVuZGxpbmUgJiYgIWlzYm9kaWxlc3MobmV4dHBy b3ApICYmICFpc2ZpcnN0KG5leHRwcm9wKTsKKyAgICAgICAgICAgICArK25leHRsaW5lLCArK25l eHRwcm9wKTsKKyEgICAgICAgCisgICAgICAgIHByZWZpeCA9IHByZWZpeGJhaywgc3VmZml4ID0g c3VmZml4YmFrOworISAgICAgICBzZXRhZmZpeGVzKChjb25zdCB3Y2hhcl90ICogY29uc3QgKikg Zmlyc3RsaW5lLAorISAgICAgICAgICAgICAgICAgIChjb25zdCB3Y2hhcl90ICogY29uc3QgKikg bmV4dGxpbmUsIGZpcnN0cHJvcCwgYm9keWNoYXJzLAorICAgICAgICAgICAgICAgICAgIHF1b3Rl Y2hhcnMsIGhhbmcsIGJvZHksIHF1b3RlLCAmYWZwLCAmZnMsICZwcmVmaXgsICZzdWZmaXgpOwor ICAgICAgICBpZiAod2lkdGggPD0gcHJlZml4ICsgc3VmZml4KSB7CishICAgICAgICAgc3dwcmlu dGYoZXJybXNnLGVycm1zZ19zaXplLAorISAgICAgICAgICAgICAgICAgTCI8d2lkdGg+ICglZCkg PD0gPHByZWZpeD4gKCVkKSArIDxzdWZmaXg+ICglZClcbiIsCisgICAgICAgICAgICAgICAgICB3 aWR0aCwgcHJlZml4LCBzdWZmaXgpOworICAgICAgICAgIGdvdG8gcGFyY2xlYW51cDsKKyAgICAg ICAgfQorICAKKyAgICAgICAgb3V0bGluZXMgPQorISAgICAgICAgIHJlZm9ybWF0KChjb25zdCB3 Y2hhcl90ICogY29uc3QgKikgZmlyc3RsaW5lLAorISAgICAgICAgICAgICAgICAgIChjb25zdCB3 Y2hhcl90ICogY29uc3QgKikgbmV4dGxpbmUsCisgICAgICAgICAgICAgICAgICAgYWZwLCBmcywg aGFuZywgcHJlZml4LCBzdWZmaXgsIHdpZHRoLCBjYXAsCisgICAgICAgICAgICAgICAgICAgZml0 LCBndWVzcywganVzdCwgbGFzdCwgUmVwb3J0LCB0b3VjaCwgZXJybXNnKTsKKyAgICAgICAgaWYg KCplcnJtc2cpIGdvdG8gcGFyY2xlYW51cDsKKyAgICAgICAgZm9yIChsaW5lID0gb3V0bGluZXM7 ICAqbGluZTsgICsrbGluZSkKKyEgICAgICAgICBmd3ByaW50ZihzdGRvdXQsIEwiJWxzXG4iLCAq bGluZSk7CisgICAgICAgIGZyZWVsaW5lcyhvdXRsaW5lcyk7CisgICAgICAgIG91dGxpbmVzID0g TlVMTDsKKyAgCisqKioqKioqKioqKioqKioKKyoqKiA4ODQsODkwICoqKioKKyAgICB9CisgIAor ICBwYXJjbGVhbnVwOgorISAKKyAgICBpZiAoYm9keWNoYXJzKSBmcmVlY2hhcnNldChib2R5Y2hh cnMpOworICAgIGlmIChwcm90ZWN0Y2hhcnMpIGZyZWVjaGFyc2V0KHByb3RlY3RjaGFycyk7Cisg ICAgaWYgKHF1b3RlY2hhcnMpIGZyZWVjaGFyc2V0KHF1b3RlY2hhcnMpOworLS0tIDkwOSw5MTUg LS0tLQorICAgIH0KKyAgCisgIHBhcmNsZWFudXA6CishICAgaWYgKHdlbnYpIGZyZWUod2Vudik7 CisgICAgaWYgKGJvZHljaGFycykgZnJlZWNoYXJzZXQoYm9keWNoYXJzKTsKKyAgICBpZiAocHJv dGVjdGNoYXJzKSBmcmVlY2hhcnNldChwcm90ZWN0Y2hhcnMpOworICAgIGlmIChxdW90ZWNoYXJz KSBmcmVlY2hhcnNldChxdW90ZWNoYXJzKTsKKyoqKioqKioqKioqKioqKgorKioqIDg5NCw5MDEg KioqKgorICAgIGlmIChvdXRsaW5lcykgZnJlZWxpbmVzKG91dGxpbmVzKTsKKyAgCisgICAgZXJy b3V0ID0gRXJyID8gc3RkZXJyIDogc3Rkb3V0OworISAgIGlmICgqZXJybXNnKSBmcHJpbnRmKGVy cm91dCwgInBhciBlcnJvcjpcbiUuKnMiLCBlcnJtc2dfc2l6ZSwgZXJybXNnKTsKKyEgICBpZiAo dmVyc2lvbikgZnB1dHMoInBhciAxLjUyXG4iLGVycm91dCk7CisgICAgaWYgKGhlbHApICAgIGZw dXRzKHVzYWdlbXNnLGVycm91dCk7CisgIAorICAgIHJldHVybiAqZXJybXNnID8gRVhJVF9GQUlM VVJFIDogRVhJVF9TVUNDRVNTOworLS0tIDkxOSw5MzAgLS0tLQorICAgIGlmIChvdXRsaW5lcykg ZnJlZWxpbmVzKG91dGxpbmVzKTsKKyAgCisgICAgZXJyb3V0ID0gRXJyID8gc3RkZXJyIDogc3Rk b3V0OworISAgIGlmICgqZXJybXNnKSBmd3ByaW50ZihlcnJvdXQsIEwicGFyIGVycm9yOlxuJS4q bHMiLCBlcnJtc2dfc2l6ZSwgZXJybXNnKTsKKyEgI2lmZGVmIE5PV0lEVEgKKyEgICBpZiAodmVy c2lvbikgZnB1dHdzKEwicGFyIDEuNTItaTE4bi40ICh3aXRob3V0IHdjd2lkdGgoKSBzdXBwb3J0 KVxuIixlcnJvdXQpOworISAjZWxzZQorISAgIGlmICh2ZXJzaW9uKSBmcHV0d3MoTCJwYXIgMS41 Mi1pMThuLjRcbiIsZXJyb3V0KTsKKyEgI2VuZGlmCisgICAgaWYgKGhlbHApICAgIGZwdXRzKHVz YWdlbXNnLGVycm91dCk7CisgIAorICAgIHJldHVybiAqZXJybXNnID8gRVhJVF9GQUlMVVJFIDog RVhJVF9TVUNDRVNTOwor0KLQvtC70YzQutC+INCyIC4uL1BhcjE1Mi11bmljb2RlLzogcGFyLmMu b3JpZworZGlmZiAtYyAuL3Bhci5kb2MgLi4vUGFyMTUyLXVuaWNvZGUvcGFyLmRvYworKioqIC4v cGFyLmRvYwkyMDAxLTA0LTMwIDAxOjE3OjI4LjAwMDAwMDAwMCArMDQwMAorLS0tIC4uL1BhcjE1 Mi11bmljb2RlL3Bhci5kb2MJMjAxOS0xMC0yNiAxNzoyMTowOC41NDgwNTA4NTMgKzAzMDAKKyoq KioqKioqKioqKioqKgorKioqIDEsNiAqKioqCisgICAgKioqKioqKioqKioqKioqKioqKioqCisg ICAgKiBwYXIuZG9jICAgICAgICAgICAqCishICAgKiBmb3IgUGFyIDEuNTIgICAgICAqCisgICAg KiBDb3B5cmlnaHQgMjAwMSBieSAqCisgICAgKiBBZGFtIE0uIENvc3RlbGxvICAqCisgICAgKioq KioqKioqKioqKioqKioqKioqCistLS0gMSw2IC0tLS0KKyAgICAqKioqKioqKioqKioqKioqKioq KioKKyAgICAqIHBhci5kb2MgICAgICAgICAgICoKKyEgICAqIGZvciBQYXIgMS41MiBpMThuICoK KyAgICAqIENvcHlyaWdodCAyMDAxIGJ5ICoKKyAgICAqIEFkYW0gTS4gQ29zdGVsbG8gICoKKyAg ICAqKioqKioqKioqKioqKioqKioqKioKK2RpZmYgLWMgLi9wcm90b01ha2VmaWxlIC4uL1BhcjE1 Mi11bmljb2RlL3Byb3RvTWFrZWZpbGUKKyoqKiAuL3Byb3RvTWFrZWZpbGUJMjAwMS0wMy0wOSAw Mzo1MzoyNS4wMDAwMDAwMDAgKzAzMDAKKy0tLSAuLi9QYXIxNTItdW5pY29kZS9wcm90b01ha2Vm aWxlCTIwMTktMTAtMjYgMTc6MjE6MDguNTQ4MDUwODUzICswMzAwCisqKioqKioqKioqKioqKioK KyoqKiA0Nyw1MyAqKioqCisgICMgRXhhbXBsZSAoZm9yIFNvbGFyaXMgMi54IHdpdGggU1BBUkNv bXBpbGVyIEMpOgorICAjIENDID0gY2MgLWMgLU8gLXMgLVhjIC1ERE9OVEZSRUUKKyAgCishIEND ID0gY2MgLWMKKyAgCisgICMgRGVmaW5lIExJTksxIGFuZCBMSU5LMiBzbyB0aGF0IHRoZSBjb21t YW5kCisgICMKKy0tLSA0Nyw1MyAtLS0tCisgICMgRXhhbXBsZSAoZm9yIFNvbGFyaXMgMi54IHdp dGggU1BBUkNvbXBpbGVyIEMpOgorICAjIENDID0gY2MgLWMgLU8gLXMgLVhjIC1ERE9OVEZSRUUK KyAgCishIENDID0gY2MgLXN0ZD1jOTkgLWMKKyAgCisgICMgRGVmaW5lIExJTksxIGFuZCBMSU5L MiBzbyB0aGF0IHRoZSBjb21tYW5kCisgICMKK2RpZmYgLWMgLi9yZWZvcm1hdC5jIC4uL1BhcjE1 Mi11bmljb2RlL3JlZm9ybWF0LmMKKyoqKiAuL3JlZm9ybWF0LmMJMjAwMS0wMy0yMiAwNzoxNzox NS4wMDAwMDAwMDAgKzAzMDAKKy0tLSAuLi9QYXIxNTItdW5pY29kZS9yZWZvcm1hdC5jCTIwMTkt MTAtMjYgMTc6MjE6MDguNTQ4MDUwODUzICswMzAwCisqKioqKioqKioqKioqKioKKyoqKiAxLDkg KioqKgorISAvKioqKioqKioqKioqKioqKioqKioqLworISAvKiByZWZvcm1hdC5jICAgICAgICAq LworISAvKiBmb3IgUGFyIDEuNTIgICAgICAqLworISAvKiBDb3B5cmlnaHQgMjAwMSBieSAqLwor ISAvKiBBZGFtIE0uIENvc3RlbGxvICAqLworISAvKioqKioqKioqKioqKioqKioqKioqLworICAK KyAgLyogVGhpcyBpcyBBTlNJIEMgY29kZSAoQzg5KS4gKi8KKyAgCistLS0gMSwxMSAtLS0tCish IC8qKioqKioqKioqKioqKioqKioqKioqKi8KKyEgLyogcmVmb3JtYXQuYyAgICAgICAgICAqLwor ISAvKiBmb3IgUGFyIDEuNTItaTE4bi40ICovCishIC8qIENvcHlyaWdodCAyMDAxIGJ5ICAgKi8K KyEgLyogQWRhbSBNLiBDb3N0ZWxsbyAgICAqLworISAvKiBNb2RpZmllZCBieSAgICAgICAgICov CishIC8qIErDqXLDtG1lIFBvdWlsbGVyICAgICAqLworISAvKioqKioqKioqKioqKioqKioqKioq KiovCisgIAorICAvKiBUaGlzIGlzIEFOU0kgQyBjb2RlIChDODkpLiAqLworICAKKyoqKioqKioq KioqKioqKgorKioqIDE2LDIxICoqKioKKy0tLSAxOCwyNCAtLS0tCisgICNpbmNsdWRlIDxzdGRp by5oPgorICAjaW5jbHVkZSA8c3RkbGliLmg+CisgICNpbmNsdWRlIDxzdHJpbmcuaD4KKysgI2lu Y2x1ZGUgPHdjdHlwZS5oPgorICAKKyAgI3VuZGVmIE5VTEwKKyAgI2RlZmluZSBOVUxMICgodm9p ZCAqKSAwKQorKioqKioqKioqKioqKioqCisqKiogMzMsNDYgKioqKgorICB0eXBlZGVmIHVuc2ln bmVkIGNoYXIgd2ZsYWdfdDsKKyAgCisgIHR5cGVkZWYgc3RydWN0IHdvcmQgeworISAgIGNvbnN0 IGNoYXIgKmNocnM7ICAgICAgIC8qIFBvaW50ZXIgdG8gdGhlIGNoYXJhY3RlcnMgaW4gdGhlIHdv cmQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAoTk9UIHRlcm1pbmF0ZWQgYnkg J1wwJykuICAgICAgICAgICAgICovCisgICAgc3RydWN0IHdvcmQgKnByZXYsICAgICAgLyogUG9p bnRlciB0byBwcmV2aW91cyB3b3JkLiAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICpu ZXh0LCAgICAgIC8qIFBvaW50ZXIgdG8gbmV4dCB3b3JkLiAgICAgICAgICAgICAgICAgKi8KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTdXBwb3NpbmcgdGhpcyB3b3JkIHdlcmUgdGhl IGZpcnN0Li4uICovCisgICAgICAgICAgICAgICAgKm5leHRsaW5lOyAgLyogICBQb2ludGVyIHRv IGZpcnN0IHdvcmQgaW4gbmV4dCBsaW5lLiAqLworICAgIGludCBzY29yZSwgICAgICAgICAgICAg IC8qICAgVmFsdWUgb2YgdGhlIG9iamVjdGl2ZSBmdW5jdGlvbi4gICAgKi8KKyEgICAgICAgbGVu Z3RoOyAgICAgICAgICAgICAvKiBMZW5ndGggb2YgdGhpcyB3b3JkLiAgICAgICAgICAgICAgICAg ICovCisgICAgd2ZsYWdfdCBmbGFnczsgICAgICAgICAgLyogTm90YWJsZSBwcm9wZXJ0aWVzIG9m IHRoaXMgd29yZC4gICAgICAqLworICB9IHdvcmQ7CisgIAorLS0tIDM2LDUwIC0tLS0KKyAgdHlw ZWRlZiB1bnNpZ25lZCBjaGFyIHdmbGFnX3Q7CisgIAorICB0eXBlZGVmIHN0cnVjdCB3b3JkIHsK KyEgICBjb25zdCB3Y2hhcl90ICpjaHJzOyAgICAvKiBQb2ludGVyIHRvIHRoZSBjaGFyYWN0ZXJz IGluIHRoZSB3b3JkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogKE5PVCB0ZXJt aW5hdGVkIGJ5ICdcMCcpLiAgICAgICAgICAgICAqLworICAgIHN0cnVjdCB3b3JkICpwcmV2LCAg ICAgIC8qIFBvaW50ZXIgdG8gcHJldmlvdXMgd29yZC4gICAgICAgICAgICAgKi8KKyAgICAgICAg ICAgICAgICAqbmV4dCwgICAgICAvKiBQb2ludGVyIHRvIG5leHQgd29yZC4gICAgICAgICAgICAg ICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3VwcG9zaW5nIHRoaXMgd29y ZCB3ZXJlIHRoZSBmaXJzdC4uLiAqLworICAgICAgICAgICAgICAgICpuZXh0bGluZTsgIC8qICAg UG9pbnRlciB0byBmaXJzdCB3b3JkIGluIG5leHQgbGluZS4gKi8KKyAgICBpbnQgc2NvcmUsICAg ICAgICAgICAgICAvKiAgIFZhbHVlIG9mIHRoZSBvYmplY3RpdmUgZnVuY3Rpb24uICAgICovCish ICAgICAgIGxlbmd0aCwgICAgICAgICAgICAgLyogTGVuZ3RoIChpbiB3aWRlY2hhcikgb2YgdGhp cyB3b3JkLiAgICAqLworISAgICAgICB3aWR0aDsgICAgICAgICAgICAgIC8qIFZpc3VhbCB3aWR0 aCBvZiB0aGlzIHdvcmQuICAgICAgICAgICAgKi8KKyAgICB3ZmxhZ190IGZsYWdzOyAgICAgICAg ICAvKiBOb3RhYmxlIHByb3BlcnRpZXMgb2YgdGhpcyB3b3JkLiAgICAgICovCisgIH0gd29yZDsK KyAgCisqKioqKioqKioqKioqKioKKyoqKiA1Nyw3MyAqKioqCisgICNkZWZpbmUgaXNjdXJpb3Vz KHcpICgoKHcpLT5mbGFncyAmIDIpICE9IDApCisgICNkZWZpbmUgaXNjYXBpdGFsKHcpICgoKHcp LT5mbGFncyAmIDQpICE9IDApCisgIAorICAKKyAgc3RhdGljIGludCBjaGVja2NhcGl0YWwod29y ZCAqdykKKyAgLyogUmV0dXJucyAxIGlmICp3IGlzIGNhcGl0YWxpemVkIGFjY29yZGluZyB0byB0 aGUgZGVmaW5pdGlvbiAqLworICAvKiBpbiBwYXIuZG9jIChhc3N1bWluZyA8Y2FwPiBpcyAwKSwg b3IgMCBpZiBub3QuICAgICAgICAgICAgICovCisgIHsKKyEgICBjb25zdCBjaGFyICpwLCAqZW5k OworICAKKyAgICBmb3IgKHAgPSB3LT5jaHJzLCBlbmQgPSBwICsgdy0+bGVuZ3RoOworISAgICAg ICAgcCA8IGVuZCAmJiAhaXNhbG51bSgqKHVuc2lnbmVkIGNoYXIgKilwKTsKKyAgICAgICAgICsr cCk7CishICAgcmV0dXJuIHAgPCBlbmQgJiYgIWlzbG93ZXIoKih1bnNpZ25lZCBjaGFyICopcCk7 CisgIH0KKyAgCisgIAorLS0tIDYxLDk5IC0tLS0KKyAgI2RlZmluZSBpc2N1cmlvdXModykgKCgo dyktPmZsYWdzICYgMikgIT0gMCkKKyAgI2RlZmluZSBpc2NhcGl0YWwodykgKCgodyktPmZsYWdz ICYgNCkgIT0gMCkKKyAgCisrIHN0YXRpYyBpbnQgZ2V0V2lkdGgoY29uc3Qgd2NoYXJfdCAqYmVn LCBjb25zdCB3Y2hhcl90ICplbmQpCisrIC8qIENvbXB1dGUgKHZpc3VhbCkgd2lkdGggb2YgYSAg d29yZC4gVGhpcyBmdW5jdGlvbiBpcyBhd2FyZSAqLworKyAvKiBhYm91dCBkb3VibGUtd2lkdGgg Y2hhcmFjdGVycyB1c2VkIGluIG9yaWVudGFsIGxhbmdhZ2VzLiAgKi8KKysgeworKyAgIGludCBy ZXQsIHRtcDsKKysgICAKKysgICBmb3IgKHJldCA9IDA7IGJlZyAhPSBlbmQ7IGJlZysrKSB7Cisr ICNpZmRlZiBOT1dJRFRICisrICAgICB0bXAgPSAxOworKyAjZWxzZQorKyAgICAgdG1wID0gd2N3 aWR0aCgqYmVnKTsKKysgI2VuZGlmCisrICAgICAvLyBCVUc6IEl0IGlzIG5vdCByZWFsbHkgZWFz eSB0byBoYW5kbGUgY2FzZSBvZiB6ZXJvIHdpZHRoIGNoYXJhY3RlcnMuCisrICAgICAvLyBJZiB3 ZSBkb24ndCBkbyB0aGlzLCBzaXplIG1hbGxsb2MgZm9yIHExIHdpbGwgYmUgbGVzcyB0aGFuIHJl YWwgCisrICAgICAvLyBzaXplIGFuZCBwcm9ncmFtIHdpbGwgc2VnZmF1bHQuIFNvIEkgcHJlZmVy IHRvIGhhdmUgYSBidWcgdGhhbiBhIHNlZ2ZhdWx0LgorKyAgICAgaWYgKHRtcCA8PSAwKQorKyAg ICAgICB0bXAgPSAxOworKyAgICAgcmV0ICs9IHRtcDsKKysgICB9CisrICAgCisrICAgcmV0dXJu IHJldDsKKysgfQorICAKKyAgc3RhdGljIGludCBjaGVja2NhcGl0YWwod29yZCAqdykKKyAgLyog UmV0dXJucyAxIGlmICp3IGlzIGNhcGl0YWxpemVkIGFjY29yZGluZyB0byB0aGUgZGVmaW5pdGlv biAqLworICAvKiBpbiBwYXIuZG9jIChhc3N1bWluZyA8Y2FwPiBpcyAwKSwgb3IgMCBpZiBub3Qu ICAgICAgICAgICAgICovCisgIHsKKyEgICBjb25zdCB3Y2hhcl90ICpwLCAqZW5kOworICAKKyAg ICBmb3IgKHAgPSB3LT5jaHJzLCBlbmQgPSBwICsgdy0+bGVuZ3RoOworISAgICAgICAgcCA8IGVu ZCAmJiAhaXN3YWxudW0oKnApOworICAgICAgICAgKytwKTsKKyEgICByZXR1cm4gcCA8IGVuZCAm JiAhaXN3bG93ZXIoKnApOworICB9CisgIAorICAKKyoqKioqKioqKioqKioqKgorKioqIDc1LDkz ICoqKioKKyAgLyogUmV0dXJucyAxIGlmICp3IGlzIGN1cmlvdXMgYWNjb3JkaW5nIHRvICovCisg IC8qIHRoZSBkZWZpbml0aW9uIGluIHBhci5kb2MsIG9yIDAgaWYgbm90LiAqLworICB7CishICAg Y29uc3QgY2hhciAqc3RhcnQsICpwOworISAgIGNoYXIgY2g7CisgIAorICAgIGZvciAoc3RhcnQg PSB3LT5jaHJzLCBwID0gc3RhcnQgKyB3LT5sZW5ndGg7ICBwID4gc3RhcnQ7ICAtLXApIHsKKyAg ICAgIGNoID0gcFstMV07CishICAgICBpZiAoaXNhbG51bSgqKHVuc2lnbmVkIGNoYXIgKikmY2gp KSByZXR1cm4gMDsKKyEgICAgIGlmIChjaCA9PSAnLicgfHwgY2ggPT0gJz8nIHx8IGNoID09ICch JyB8fCBjaCA9PSAnOicpIGJyZWFrOworICAgIH0KKyAgCisgICAgaWYgKHAgPD0gc3RhcnQgKyAx KSByZXR1cm4gMDsKKyAgCisgICAgLS1wOworISAgIGRvIGlmIChpc2FsbnVtKCoodW5zaWduZWQg Y2hhciAqKS0tcCkpIHJldHVybiAxOworICAgIHdoaWxlIChwID4gc3RhcnQpOworICAKKyAgICBy ZXR1cm4gMDsKKy0tLSAxMDEsMTE5IC0tLS0KKyAgLyogUmV0dXJucyAxIGlmICp3IGlzIGN1cmlv dXMgYWNjb3JkaW5nIHRvICovCisgIC8qIHRoZSBkZWZpbml0aW9uIGluIHBhci5kb2MsIG9yIDAg aWYgbm90LiAqLworICB7CishICAgY29uc3Qgd2NoYXJfdCAqc3RhcnQsICpwOworISAgIHdjaGFy X3QgY2g7CisgIAorICAgIGZvciAoc3RhcnQgPSB3LT5jaHJzLCBwID0gc3RhcnQgKyB3LT5sZW5n dGg7ICBwID4gc3RhcnQ7ICAtLXApIHsKKyAgICAgIGNoID0gcFstMV07CishICAgICBpZiAoaXN3 YWxudW0oKih3Y2hhcl90ICopJmNoKSkgcmV0dXJuIDA7CishICAgICBpZiAoY2ggPT0gTCcuJyB8 fCBjaCA9PSBMJz8nIHx8IGNoID09IEwnIScgfHwgY2ggPT0gTCc6JykgYnJlYWs7CisgICAgfQor ICAKKyAgICBpZiAocCA8PSBzdGFydCArIDEpIHJldHVybiAwOworICAKKyAgICAtLXA7CishICAg ZG8gaWYgKGlzd2FsbnVtKCood2NoYXJfdCAqKS0tcCkpIHJldHVybiAxOworICAgIHdoaWxlIChw ID4gc3RhcnQpOworICAKKyAgICByZXR1cm4gMDsKKyoqKioqKioqKioqKioqKgorKioqIDk1LDEy NSAqKioqCisgIAorICAKKyAgc3RhdGljIGludCBzaW1wbGVicmVha3Mod29yZCAqaGVhZCwgd29y ZCAqdGFpbCwgaW50IEwsIGludCBsYXN0KQorISAKKyEgLyogQ2hvb3NlcyBsaW5lIGJyZWFrcyBp biBhIGxpc3Qgb2Ygd29yZHMgd2hpY2ggbWF4aW1pemUgdGhlIGxlbmd0aCBvZiB0aGUgICAqLwor ISAvKiBzaG9ydGVzdCBsaW5lLiAgTCBpcyB0aGUgbWF4aW11bSBsaW5lIGxlbmd0aC4gIFRoZSBs YXN0IGxpbmUgY291bnRzIGFzIGEgICovCishIC8qIGxpbmUgb25seSBpZiBsYXN0IGlzIG5vbi16 ZXJvLiBfaGVhZCBtdXN0IHBvaW50IHRvIGEgZHVtbXkgd29yZCwgYW5kIHRhaWwgKi8KKyEgLyog bXVzdCBwb2ludCB0byB0aGUgbGFzdCB3b3JkLCB3aG9zZSBuZXh0IGZpZWxkIG11c3QgYmUgTlVM TC4gIFJldHVybnMgdGhlICAqLworISAvKiBsZW5ndGggb2YgdGhlIHNob3J0ZXN0IGxpbmUgb24g c3VjY2VzcywgLTEgaWYgdGhlcmUgaXMgYSB3b3JkIG9mIGxlbmd0aCAgICovCishIC8qIGdyZWF0 ZXIgdGhhbiBMLCBvciBMIGlmIHRoZXJlIGFyZSBubyBsaW5lcy4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKi8KKyAgeworICAgIHdvcmQgKncxLCAqdzI7CisgICAgaW50IGxpbmVsZW4s IHNjb3JlOworICAKKyAgICBpZiAoIWhlYWQtPm5leHQpIHJldHVybiBMOworICAKKyEgICBmb3Ig KHcxID0gdGFpbCwgbGluZWxlbiA9IHcxLT5sZW5ndGg7CisgICAgICAgICB3MSAhPSBoZWFkICYm IGxpbmVsZW4gPD0gTDsKKyEgICAgICAgIGxpbmVsZW4gKz0gaXNzaGlmdGVkKHcxKSwgdzEgPSB3 MS0+cHJldiwgbGluZWxlbiArPSAxICsgdzEtPmxlbmd0aCkgeworICAgICAgdzEtPnNjb3JlID0g bGFzdCA/IGxpbmVsZW4gOiBMOworICAgICAgdzEtPm5leHRsaW5lID0gTlVMTDsKKyAgICB9Cisg IAorICAgIGZvciAoIDsgIHcxICE9IGhlYWQ7ICB3MSA9IHcxLT5wcmV2KSB7CisgICAgICB3MS0+ c2NvcmUgPSAtMTsKKyEgICAgIGZvciAobGluZWxlbiA9IHcxLT5sZW5ndGgsICB3MiA9IHcxLT5u ZXh0OworICAgICAgICAgICBsaW5lbGVuIDw9IEw7CishICAgICAgICAgIGxpbmVsZW4gKz0gMSAr IGlzc2hpZnRlZCh3MikgKyB3Mi0+bGVuZ3RoLCAgdzIgPSB3Mi0+bmV4dCkgeworICAgICAgICBz Y29yZSA9IHcyLT5zY29yZTsKKyAgICAgICAgaWYgKGxpbmVsZW4gPCBzY29yZSkgc2NvcmUgPSBs aW5lbGVuOworICAgICAgICBpZiAoc2NvcmUgPj0gdzEtPnNjb3JlKSB7CistLS0gMTIxLDE1MiAt LS0tCisgIAorICAKKyAgc3RhdGljIGludCBzaW1wbGVicmVha3Mod29yZCAqaGVhZCwgd29yZCAq dGFpbCwgaW50IEwsIGludCBsYXN0KQorISAvKiBDaG9vc2VzIGxpbmUgIGJyZWFrcyBpbiBhICBs aXN0IG9mIHdvcmRzICB3aGljaCBtYXhpbWl6ZSAqLworISAvKiB0aGUgbGVuZ3RoIG9mICB0aGUg c2hvcnRlc3QgbGluZS4gTCBpcyAgdGhlIG1heGltdW0gbGluZSAqLworISAvKiBsZW5ndGguIFRo ZSBsYXN0ICBsaW5lIGNvdW50cyBhcyBhIGxpbmUgb25seSAgaWYgbGFzdCBpcyAqLworISAvKiBu b24temVyby4gX2hlYWQgIG11c3QgcG9pbnQgIHRvIGEgIGR1bW15IHdvcmQsICBhbmQgdGFpbCAq LworISAvKiBtdXN0IHBvaW50ICB0byB0aGUgbGFzdCAgd29yZCwgd2hvc2UgbmV4dCBmaWVsZCAg bXVzdCBiZSAqLworISAvKiBOVUxMLiAgUmV0dXJucyAgdGhlICBsZW5ndGggIG9mICB0aGUgIHNo b3J0ZXN0ICBsaW5lICBvbiAqLworISAvKiBzdWNjZXNzLCAtMSBpZiB0aGVyZSBpcyBhIHdvcmQg b2YgbGVuZ3RoIGdyZWF0ZXIgdGhhbiBMLCAqLworISAvKiBvciBMIGlmIHRoZXJlIGFyZSBubyBs aW5lcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB7CisgICAgd29yZCAqdzEs ICp3MjsKKyAgICBpbnQgbGluZWxlbiwgc2NvcmU7CisgIAorICAgIGlmICghaGVhZC0+bmV4dCkg cmV0dXJuIEw7CisgIAorISAgIGZvciAodzEgPSB0YWlsLCBsaW5lbGVuID0gdzEtPndpZHRoOwor ICAgICAgICAgdzEgIT0gaGVhZCAmJiBsaW5lbGVuIDw9IEw7CishICAgICAgICBsaW5lbGVuICs9 IGlzc2hpZnRlZCh3MSksIHcxID0gdzEtPnByZXYsIGxpbmVsZW4gKz0gMSArIHcxLT53aWR0aCkg eworICAgICAgdzEtPnNjb3JlID0gbGFzdCA/IGxpbmVsZW4gOiBMOworICAgICAgdzEtPm5leHRs aW5lID0gTlVMTDsKKyAgICB9CisgIAorICAgIGZvciAoIDsgIHcxICE9IGhlYWQ7ICB3MSA9IHcx LT5wcmV2KSB7CisgICAgICB3MS0+c2NvcmUgPSAtMTsKKyEgICAgIGZvciAobGluZWxlbiA9IHcx LT53aWR0aCwgIHcyID0gdzEtPm5leHQ7CisgICAgICAgICAgIGxpbmVsZW4gPD0gTDsKKyEgICAg ICAgICAgbGluZWxlbiArPSAxICsgaXNzaGlmdGVkKHcyKSArIHcyLT53aWR0aCwgIHcyID0gdzIt Pm5leHQpIHsKKyAgICAgICAgc2NvcmUgPSB3Mi0+c2NvcmU7CisgICAgICAgIGlmIChsaW5lbGVu IDwgc2NvcmUpIHNjb3JlID0gbGluZWxlbjsKKyAgICAgICAgaWYgKHNjb3JlID49IHcxLT5zY29y ZSkgeworKioqKioqKioqKioqKioqCisqKiogMTY4LDE3NCAqKioqCisgIAorICAgIHNob3J0ZXN0 ID0gc2ltcGxlYnJlYWtzKGhlYWQsdGFpbCx0YXJnZXQsbGFzdCk7CisgICAgaWYgKHNob3J0ZXN0 IDwgMCkgeworISAgICAgc3ByaW50ZihlcnJtc2csaW1wb3NzaWJpbGl0eSwxKTsKKyAgICAgIHJl dHVybjsKKyAgICB9CisgIAorLS0tIDE5NSwyMDEgLS0tLQorICAKKyAgICBzaG9ydGVzdCA9IHNp bXBsZWJyZWFrcyhoZWFkLHRhaWwsdGFyZ2V0LGxhc3QpOworICAgIGlmIChzaG9ydGVzdCA8IDAp IHsKKyEgICAgIHN3cHJpbnRmKGVycm1zZyxlcnJtc2dfc2l6ZSxpbXBvc3NpYmlsaXR5LDEpOwor ICAgICAgcmV0dXJuOworICAgIH0KKyAgCisqKioqKioqKioqKioqKioKKyoqKiAxNzgsMTg2ICoq KioKKyAgICB3MSA9IHRhaWw7CisgICAgZG8geworICAgICAgdzEtPnNjb3JlID0gLTE7CishICAg ICBmb3IgKGxpbmVsZW4gPSB3MS0+bGVuZ3RoLCAgdzIgPSB3MS0+bmV4dDsKKyAgICAgICAgICAg bGluZWxlbiA8PSB0YXJnZXQ7CishICAgICAgICAgIGxpbmVsZW4gKz0gMSArIGlzc2hpZnRlZCh3 MikgKyB3Mi0+bGVuZ3RoLCAgdzIgPSB3Mi0+bmV4dCkgeworICAgICAgICBleHRyYSA9IHRhcmdl dCAtIGxpbmVsZW47CisgICAgICAgIG1pbmxlbiA9IHNob3J0ZXN0OworICAgICAgICBpZiAodzIp CistLS0gMjA1LDIxMyAtLS0tCisgICAgdzEgPSB0YWlsOworICAgIGRvIHsKKyAgICAgIHcxLT5z Y29yZSA9IC0xOworISAgICAgZm9yIChsaW5lbGVuID0gdzEtPndpZHRoLCAgdzIgPSB3MS0+bmV4 dDsKKyAgICAgICAgICAgbGluZWxlbiA8PSB0YXJnZXQ7CishICAgICAgICAgIGxpbmVsZW4gKz0g MSArIGlzc2hpZnRlZCh3MikgKyB3Mi0+d2lkdGgsICB3MiA9IHcyLT5uZXh0KSB7CisgICAgICAg IGV4dHJhID0gdGFyZ2V0IC0gbGluZWxlbjsKKyAgICAgICAgbWlubGVuID0gc2hvcnRlc3Q7Cisg ICAgICAgIGlmICh3MikKKyoqKioqKioqKioqKioqKgorKioqIDIwMiwyMDggKioqKgorICAgIH0g d2hpbGUgKHcxICE9IGhlYWQpOworICAKKyAgICBpZiAoaGVhZC0+bmV4dC0+c2NvcmUgPCAwKQor ISAgICAgc3ByaW50ZihlcnJtc2csaW1wb3NzaWJpbGl0eSwyKTsKKyAgfQorICAKKyAgCistLS0g MjI5LDIzNSAtLS0tCisgICAgfSB3aGlsZSAodzEgIT0gaGVhZCk7CisgIAorICAgIGlmIChoZWFk LT5uZXh0LT5zY29yZSA8IDApCishICAgICBzd3ByaW50ZihlcnJtc2csZXJybXNnX3NpemUsaW1w b3NzaWJpbGl0eSwyKTsKKyAgfQorICAKKyAgCisqKioqKioqKioqKioqKioKKyoqKiAyMjUsMjMz ICoqKioKKyAgICB3MSA9IHRhaWw7CisgICAgZG8geworICAgICAgdzEtPnNjb3JlID0gTDsKKyEg ICAgIGZvciAobnVtZ2FwcyA9IDAsIGV4dHJhID0gTCAtIHcxLT5sZW5ndGgsIHcyID0gdzEtPm5l eHQ7CisgICAgICAgICAgIGV4dHJhID49IDA7CishICAgICAgICAgICsrbnVtZ2FwcywgZXh0cmEg LT0gMSArIGlzc2hpZnRlZCh3MikgKyB3Mi0+bGVuZ3RoLCB3MiA9IHcyLT5uZXh0KSB7CisgICAg ICAgIGdhcCA9IG51bWdhcHMgPyAoZXh0cmEgKyBudW1nYXBzIC0gMSkgLyBudW1nYXBzIDogTDsK KyAgICAgICAgaWYgKHcyKQorICAgICAgICAgIHNjb3JlID0gdzItPnNjb3JlOworLS0tIDI1Miwy NjAgLS0tLQorICAgIHcxID0gdGFpbDsKKyAgICBkbyB7CisgICAgICB3MS0+c2NvcmUgPSBMOwor ISAgICAgZm9yIChudW1nYXBzID0gMCwgZXh0cmEgPSBMIC0gdzEtPndpZHRoLCB3MiA9IHcxLT5u ZXh0OworICAgICAgICAgICBleHRyYSA+PSAwOworISAgICAgICAgICArK251bWdhcHMsIGV4dHJh IC09IDEgKyBpc3NoaWZ0ZWQodzIpICsgdzItPndpZHRoLCB3MiA9IHcyLT5uZXh0KSB7CisgICAg ICAgIGdhcCA9IG51bWdhcHMgPyAoZXh0cmEgKyBudW1nYXBzIC0gMSkgLyBudW1nYXBzIDogTDsK KyAgICAgICAgaWYgKHcyKQorICAgICAgICAgIHNjb3JlID0gdzItPnNjb3JlOworKioqKioqKioq KioqKioqCisqKiogMjQ3LDI1MyAqKioqCisgIAorICAgIG1heGdhcCA9IGhlYWQtPm5leHQtPnNj b3JlOworICAgIGlmIChtYXhnYXAgPj0gTCkgeworISAgICAgc3RyY3B5KGVycm1zZywgIkNhbm5v dCBqdXN0aWZ5LlxuIik7CisgICAgICByZXR1cm47CisgICAgfQorICAKKy0tLSAyNzQsMjgwIC0t LS0KKyAgCisgICAgbWF4Z2FwID0gaGVhZC0+bmV4dC0+c2NvcmU7CisgICAgaWYgKG1heGdhcCA+ PSBMKSB7CishICAgICB3Y3NjcHkoZXJybXNnLCBMIkNhbm5vdCBqdXN0aWZ5LlxuIik7CisgICAg ICByZXR1cm47CisgICAgfQorICAKKyoqKioqKioqKioqKioqKgorKioqIDI1NywyNjUgKioqKgor ICAgIHcxID0gdGFpbDsKKyAgICBkbyB7CisgICAgICB3MS0+c2NvcmUgPSAtMTsKKyEgICAgIGZv ciAobnVtZ2FwcyA9IDAsIGV4dHJhID0gTCAtIHcxLT5sZW5ndGgsIHcyID0gdzEtPm5leHQ7Cisg ICAgICAgICAgIGV4dHJhID49IDA7CishICAgICAgICAgICsrbnVtZ2FwcywgZXh0cmEgLT0gMSAr IGlzc2hpZnRlZCh3MikgKyB3Mi0+bGVuZ3RoLCB3MiA9IHcyLT5uZXh0KSB7CisgICAgICAgIGdh cCA9IG51bWdhcHMgPyAoZXh0cmEgKyBudW1nYXBzIC0gMSkgLyBudW1nYXBzIDogTDsKKyAgICAg ICAgaWYgKHcyKQorICAgICAgICAgIHNjb3JlID0gdzItPnNjb3JlOworLS0tIDI4NCwyOTIgLS0t LQorICAgIHcxID0gdGFpbDsKKyAgICBkbyB7CisgICAgICB3MS0+c2NvcmUgPSAtMTsKKyEgICAg IGZvciAobnVtZ2FwcyA9IDAsIGV4dHJhID0gTCAtIHcxLT53aWR0aCwgdzIgPSB3MS0+bmV4dDsK KyAgICAgICAgICAgZXh0cmEgPj0gMDsKKyEgICAgICAgICAgKytudW1nYXBzLCBleHRyYSAtPSAx ICsgaXNzaGlmdGVkKHcyKSArIHcyLT53aWR0aCwgdzIgPSB3Mi0+bmV4dCkgeworICAgICAgICBn YXAgPSBudW1nYXBzID8gKGV4dHJhICsgbnVtZ2FwcyAtIDEpIC8gbnVtZ2FwcyA6IEw7CisgICAg ICAgIGlmICh3MikKKyAgICAgICAgICBzY29yZSA9IHcyLT5zY29yZTsKKyoqKioqKioqKioqKioq KgorKioqIDI4OCwzMjcgKioqKgorICAgIH0gd2hpbGUgKHcxICE9IGhlYWQpOworICAKKyAgICBp ZiAoaGVhZC0+bmV4dC0+c2NvcmUgPCAwKQorISAgICAgc3ByaW50ZihlcnJtc2csaW1wb3NzaWJp bGl0eSwzKTsKKyAgfQorICAKKyAgCishIGNoYXIgKipyZWZvcm1hdCgKKyEgICBjb25zdCBjaGFy ICogY29uc3QgKmlubGluZXMsIGNvbnN0IGNoYXIgKiBjb25zdCAqZW5kbGluZSwgaW50IGFmcCwg aW50IGZzLAorICAgIGludCBoYW5nLCBpbnQgcHJlZml4LCBpbnQgc3VmZml4LCBpbnQgd2lkdGgs IGludCBjYXAsIGludCBmaXQsIGludCBndWVzcywKKyAgICBpbnQganVzdCwgaW50IGxhc3QsIGlu dCBSZXBvcnQsIGludCB0b3VjaCwgZXJybXNnX3QgZXJybXNnCisgICkKKyAgeworICAgIGludCBu dW1pbiwgYWZmaXgsIEwsIG9uZmlyc3R3b3JkID0gMSwgbGluZWxlbiwgbnVtb3V0LCBudW1nYXBz LCBleHRyYSwgcGhhc2U7CishICAgY29uc3QgY2hhciAqIGNvbnN0ICpsaW5lLCAqKnN1ZmZpeGVz ID0gTlVMTCwgKipzdWYsICplbmQsICpwMSwgKnAyOworISAgIGNoYXIgKnExLCAqcTIsICoqb3V0 bGluZXMgPSBOVUxMOworICAgIHdvcmQgZHVtbXksICpoZWFkLCAqdGFpbCwgKncxLCAqdzI7Cisg ICAgYnVmZmVyICpwYnVmID0gTlVMTDsKKyAgCisgIC8qIEluaXRpYWxpemF0aW9uOiAqLworLSAK KyAgICAqZXJybXNnID0gJ1wwJzsKKyAgICBkdW1teS5uZXh0ID0gZHVtbXkucHJldiA9IE5VTEw7 CisgICAgZHVtbXkuZmxhZ3MgPSAwOworICAgIGhlYWQgPSB0YWlsID0gJmR1bW15OworICAgIG51 bWluID0gZW5kbGluZSAtIGlubGluZXM7CisgICAgaWYgKG51bWluIDw9IDApIHsKKyEgICAgIHNw cmludGYoZXJybXNnLGltcG9zc2liaWxpdHksNCk7CisgICAgICBnb3RvIHJmY2xlYW51cDsKKyAg ICB9CisgICAgbnVtZ2FwcyA9IGV4dHJhID0gMDsgIC8qIHVubmVjZXNzYXJ5LCBidXQgcXVpZXRz IGNvbXBpbGVyIHdhcm5pbmdzICovCisgIAorICAvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgcG9pbnRl cnMgdG8gdGhlIHN1ZmZpeGVzOiAqLworICAKKyEgICBzdWZmaXhlcyA9IG1hbGxvYyhudW1pbiAq IHNpemVvZiAoY29uc3QgY2hhciAqKSk7CisgICAgaWYgKCFzdWZmaXhlcykgeworISAgICAgc3Ry Y3B5KGVycm1zZyxvdXRvZm1lbSk7CisgICAgICBnb3RvIHJmY2xlYW51cDsKKyAgICB9CisgIAor LS0tIDMxNSwzNTMgLS0tLQorICAgIH0gd2hpbGUgKHcxICE9IGhlYWQpOworICAKKyAgICBpZiAo aGVhZC0+bmV4dC0+c2NvcmUgPCAwKQorISAgICAgc3dwcmludGYoZXJybXNnLGVycm1zZ19zaXpl LGltcG9zc2liaWxpdHksMyk7CisgIH0KKyAgCisgIAorISB3Y2hhcl90ICoqcmVmb3JtYXQoCish ICAgY29uc3Qgd2NoYXJfdCAqIGNvbnN0ICppbmxpbmVzLCBjb25zdCB3Y2hhcl90ICogY29uc3Qg KmVuZGxpbmUsIGludCBhZnAsIGludCBmcywKKyAgICBpbnQgaGFuZywgaW50IHByZWZpeCwgaW50 IHN1ZmZpeCwgaW50IHdpZHRoLCBpbnQgY2FwLCBpbnQgZml0LCBpbnQgZ3Vlc3MsCisgICAgaW50 IGp1c3QsIGludCBsYXN0LCBpbnQgUmVwb3J0LCBpbnQgdG91Y2gsIGVycm1zZ190IGVycm1zZwor ICApCisgIHsKKyAgICBpbnQgbnVtaW4sIGFmZml4LCBMLCBvbmZpcnN0d29yZCA9IDEsIGxpbmVs ZW4sIG51bW91dCwgbnVtZ2FwcywgZXh0cmEsIHBoYXNlOworISAgIGNvbnN0IHdjaGFyX3QgKiBj b25zdCAqbGluZSwgKipzdWZmaXhlcyA9IE5VTEwsICoqc3VmLCAqZW5kLCAqcDEsICpwMjsKKyEg ICB3Y2hhcl90ICpxMSwgKnEyLCAqKm91dGxpbmVzID0gTlVMTDsKKyAgICB3b3JkIGR1bW15LCAq aGVhZCwgKnRhaWwsICp3MSwgKncyOworICAgIGJ1ZmZlciAqcGJ1ZiA9IE5VTEw7CisgIAorICAv KiBJbml0aWFsaXphdGlvbjogKi8KKyAgICAqZXJybXNnID0gJ1wwJzsKKyAgICBkdW1teS5uZXh0 ID0gZHVtbXkucHJldiA9IE5VTEw7CisgICAgZHVtbXkuZmxhZ3MgPSAwOworICAgIGhlYWQgPSB0 YWlsID0gJmR1bW15OworICAgIG51bWluID0gZW5kbGluZSAtIGlubGluZXM7CisgICAgaWYgKG51 bWluIDw9IDApIHsKKyEgICAgIHN3cHJpbnRmKGVycm1zZyxlcnJtc2dfc2l6ZSxpbXBvc3NpYmls aXR5LDQpOworICAgICAgZ290byByZmNsZWFudXA7CisgICAgfQorICAgIG51bWdhcHMgPSBleHRy YSA9IDA7ICAvKiB1bm5lY2Vzc2FyeSwgYnV0IHF1aWV0cyBjb21waWxlciB3YXJuaW5ncyAqLwor ICAKKyAgLyogQWxsb2NhdGUgc3BhY2UgZm9yIHBvaW50ZXJzIHRvIHRoZSBzdWZmaXhlczogKi8K KyAgCishICAgc3VmZml4ZXMgPSBtYWxsb2MobnVtaW4gKiBzaXplb2YgKGNvbnN0IHdjaGFyX3Qg KikpOworICAgIGlmICghc3VmZml4ZXMpIHsKKyEgICAgIHdjc2NweShlcnJtc2csb3V0b2ZtZW0p OworICAgICAgZ290byByZmNsZWFudXA7CisgICAgfQorICAKKyoqKioqKioqKioqKioqKgorKioq IDMzNCwzNDEgKioqKgorICAgIGRvIHsKKyAgICAgIGZvciAoZW5kID0gKmxpbmU7ICAqZW5kOyAg KytlbmQpOworICAgICAgaWYgKGVuZCAtICpsaW5lIDwgYWZmaXgpIHsKKyEgICAgICAgc3ByaW50 ZihlcnJtc2csCishICAgICAgICAgICAgICAgIkxpbmUgJWQgc2hvcnRlciB0aGFuIDxwcmVmaXg+ ICsgPHN1ZmZpeD4gPSAlZCArICVkID0gJWRcbiIsCisgICAgICAgICAgICAgICAgbGluZSAtIGlu bGluZXMgKyAxLCBwcmVmaXgsIHN1ZmZpeCwgYWZmaXgpOworICAgICAgICBnb3RvIHJmY2xlYW51 cDsKKyAgICAgIH0KKy0tLSAzNjAsMzY3IC0tLS0KKyAgICBkbyB7CisgICAgICBmb3IgKGVuZCA9 ICpsaW5lOyAgKmVuZDsgICsrZW5kKTsKKyAgICAgIGlmIChlbmQgLSAqbGluZSA8IGFmZml4KSB7 CishICAgICAgIHN3cHJpbnRmKGVycm1zZyxlcnJtc2dfc2l6ZSwKKyEgICAgICAgICAgICAgICBM IkxpbmUgJWQgc2hvcnRlciB0aGFuIDxwcmVmaXg+ICsgPHN1ZmZpeD4gPSAlZCArICVkID0gJWRc biIsCisgICAgICAgICAgICAgICAgbGluZSAtIGlubGluZXMgKyAxLCBwcmVmaXgsIHN1ZmZpeCwg YWZmaXgpOworICAgICAgICBnb3RvIHJmY2xlYW51cDsKKyAgICAgIH0KKyoqKioqKioqKioqKioq KgorKioqIDM0MywzNTkgKioqKgorICAgICAgKnN1ZiA9IGVuZDsKKyAgICAgIHAxID0gKmxpbmUg KyBwcmVmaXg7CisgICAgICBmb3IgKDs7KSB7CishICAgICAgIHdoaWxlIChwMSA8IGVuZCAmJiAq cDEgPT0gJyAnKSArK3AxOworICAgICAgICBpZiAocDEgPT0gZW5kKSBicmVhazsKKyAgICAgICAg cDIgPSBwMTsKKyAgICAgICAgaWYgKG9uZmlyc3R3b3JkKSB7CisgICAgICAgICAgcDEgPSAqbGlu ZSArIHByZWZpeDsKKyAgICAgICAgICBvbmZpcnN0d29yZCA9IDA7CisgICAgICAgIH0KKyEgICAg ICAgd2hpbGUgKHAyIDwgZW5kICYmICpwMiAhPSAnICcpICsrcDI7CisgICAgICAgIHcxID0gbWFs bG9jKHNpemVvZiAod29yZCkpOworICAgICAgICBpZiAoIXcxKSB7CishICAgICAgICAgc3RyY3B5 KGVycm1zZyxvdXRvZm1lbSk7CisgICAgICAgICAgZ290byByZmNsZWFudXA7CisgICAgICAgIH0K KyAgICAgICAgdzEtPm5leHQgPSBOVUxMOworLS0tIDM2OSwzODUgLS0tLQorICAgICAgKnN1ZiA9 IGVuZDsKKyAgICAgIHAxID0gKmxpbmUgKyBwcmVmaXg7CisgICAgICBmb3IgKDs7KSB7CishICAg ICAgIHdoaWxlIChwMSA8IGVuZCAmJiAqcDEgPT0gTCcgJykgKytwMTsKKyAgICAgICAgaWYgKHAx ID09IGVuZCkgYnJlYWs7CisgICAgICAgIHAyID0gcDE7CisgICAgICAgIGlmIChvbmZpcnN0d29y ZCkgeworICAgICAgICAgIHAxID0gKmxpbmUgKyBwcmVmaXg7CisgICAgICAgICAgb25maXJzdHdv cmQgPSAwOworICAgICAgICB9CishICAgICAgIHdoaWxlIChwMiA8IGVuZCAmJiAqcDIgIT0gTCcg JykgKytwMjsKKyAgICAgICAgdzEgPSBtYWxsb2Moc2l6ZW9mICh3b3JkKSk7CisgICAgICAgIGlm ICghdzEpIHsKKyEgICAgICAgICB3Y3NjcHkoZXJybXNnLG91dG9mbWVtKTsKKyAgICAgICAgICBn b3RvIHJmY2xlYW51cDsKKyAgICAgICAgfQorICAgICAgICB3MS0+bmV4dCA9IE5VTEw7CisqKioq KioqKioqKioqKioKKyoqKiAzNjEsMzY2ICoqKioKKy0tLSAzODcsMzkzIC0tLS0KKyAgICAgICAg dGFpbCA9IHRhaWwtPm5leHQgPSB3MTsKKyAgICAgICAgdzEtPmNocnMgPSBwMTsKKyAgICAgICAg dzEtPmxlbmd0aCA9IHAyIC0gcDE7CisrICAgICAgIHcxLT53aWR0aCA9IGdldFdpZHRoKHAxLCBw Mik7CisgICAgICAgIHcxLT5mbGFncyA9IDA7CisgICAgICAgIHAxID0gcDI7CisgICAgICB9Cisq KioqKioqKioqKioqKioKKyoqKiAzNzcsMzgyICoqKioKKy0tLSA0MDQsNDEwIC0tLS0KKyAgICAg ICAgICBpZiAoaXNjdXJpb3VzKHcxKSkgeworICAgICAgICAgICAgaWYgKHcxLT5jaHJzW3cxLT5s ZW5ndGhdICYmIHcxLT5jaHJzICsgdzEtPmxlbmd0aCArIDEgPT0gdzItPmNocnMpIHsKKyAgICAg ICAgICAgICAgdzItPmxlbmd0aCArPSB3MS0+bGVuZ3RoICsgMTsKKysgICAgICAgICAgICAgdzIt PndpZHRoICs9IHcxLT53aWR0aCArIDE7CisgICAgICAgICAgICAgIHcyLT5jaHJzID0gdzEtPmNo cnM7CisgICAgICAgICAgICAgIHcyLT5wcmV2ID0gdzEtPnByZXY7CisgICAgICAgICAgICAgIHcy LT5wcmV2LT5uZXh0ID0gdzI7CisqKioqKioqKioqKioqKioKKyoqKiAzOTcsNDE2ICoqKioKKyAg CisgICAgaWYgKFJlcG9ydCkKKyAgICAgIGZvciAodzIgPSBoZWFkLT5uZXh0OyAgdzI7ICB3MiA9 IHcyLT5uZXh0KSB7CishICAgICAgIGlmICh3Mi0+bGVuZ3RoID4gTCkgeworISAgICAgICAgIGxp bmVsZW4gPSB3Mi0+bGVuZ3RoOworICAgICAgICAgIGlmIChsaW5lbGVuID4gZXJybXNnX3NpemUg LSAxNykKKyAgICAgICAgICAgIGxpbmVsZW4gPSBlcnJtc2dfc2l6ZSAtIDE3OworISAgICAgICAg IHNwcmludGYoZXJybXNnLCAiV29yZCB0b28gbG9uZzogJS4qc1xuIiwgbGluZWxlbiwgdzItPmNo cnMpOworICAgICAgICAgIGdvdG8gcmZjbGVhbnVwOworICAgICAgICB9CisgICAgICB9CisgICAg ZWxzZQorICAgICAgZm9yICh3MiA9IGhlYWQtPm5leHQ7ICB3MjsgIHcyID0gdzItPm5leHQpCish ICAgICAgIHdoaWxlICh3Mi0+bGVuZ3RoID4gTCkgeworICAgICAgICAgIHcxID0gbWFsbG9jKHNp emVvZiAod29yZCkpOworICAgICAgICAgIGlmICghdzEpIHsKKyEgICAgICAgICAgIHN0cmNweShl cnJtc2csb3V0b2ZtZW0pOworICAgICAgICAgICAgZ290byByZmNsZWFudXA7CisgICAgICAgICAg fQorICAgICAgICAgIHcxLT5uZXh0ID0gdzI7CistLS0gNDI1LDQ0NCAtLS0tCisgIAorICAgIGlm IChSZXBvcnQpCisgICAgICBmb3IgKHcyID0gaGVhZC0+bmV4dDsgIHcyOyAgdzIgPSB3Mi0+bmV4 dCkgeworISAgICAgICBpZiAodzItPndpZHRoID4gTCkgeworISAgICAgICAgIGxpbmVsZW4gPSB3 Mi0+d2lkdGg7CisgICAgICAgICAgaWYgKGxpbmVsZW4gPiBlcnJtc2dfc2l6ZSAtIDE3KQorICAg ICAgICAgICAgbGluZWxlbiA9IGVycm1zZ19zaXplIC0gMTc7CishICAgICAgICAgc3dwcmludGYo ZXJybXNnLGVycm1zZ19zaXplLCBMIldvcmQgdG9vIGxvbmc6ICUuKmxzXG4iLCBsaW5lbGVuLCB3 Mi0+Y2hycyk7CisgICAgICAgICAgZ290byByZmNsZWFudXA7CisgICAgICAgIH0KKyAgICAgIH0K KyAgICBlbHNlCisgICAgICBmb3IgKHcyID0gaGVhZC0+bmV4dDsgIHcyOyAgdzIgPSB3Mi0+bmV4 dCkKKyEgICAgICAgd2hpbGUgKHcyLT53aWR0aCA+IEwpIHsKKyAgICAgICAgICB3MSA9IG1hbGxv YyhzaXplb2YgKHdvcmQpKTsKKyAgICAgICAgICBpZiAoIXcxKSB7CishICAgICAgICAgICB3Y3Nj cHkoZXJybXNnLG91dG9mbWVtKTsKKyAgICAgICAgICAgIGdvdG8gcmZjbGVhbnVwOworICAgICAg ICAgIH0KKyAgICAgICAgICB3MS0+bmV4dCA9IHcyOworKioqKioqKioqKioqKioqCisqKiogNDIw LDQyNiAqKioqCistLS0gNDQ4LDQ1NiAtLS0tCisgICAgICAgICAgdzEtPmNocnMgPSB3Mi0+Y2hy czsKKyAgICAgICAgICB3Mi0+Y2hycyArPSBMOworICAgICAgICAgIHcxLT5sZW5ndGggPSBMOwor KyAgICAgICAgIHcxLT53aWR0aCA9IGdldFdpZHRoKHcxLT5jaHJzLCB3MS0+Y2hycyArIEwpOwor ICAgICAgICAgIHcyLT5sZW5ndGggLT0gTDsKKysgICAgICAgICB3Mi0+d2lkdGggLT0gdzEtPndp ZHRoOworICAgICAgICAgIHcxLT5mbGFncyA9IDA7CisgICAgICAgICAgaWYgKGlzY2FwaXRhbCh3 MikpIHsKKyAgICAgICAgICAgIHcxLT5mbGFncyB8PSBXX0NBUElUQUw7CisqKioqKioqKioqKioq KioKKyoqKiA0NDQsNDUyICoqKioKKyAgICAgIEwgPSAwOworICAgICAgdzEgPSBoZWFkLT5uZXh0 OworICAgICAgd2hpbGUgKHcxKSB7CishICAgICAgIGZvciAobGluZWxlbiA9IHcxLT5sZW5ndGgs IHcyID0gdzEtPm5leHQ7CisgICAgICAgICAgICAgdzIgIT0gdzEtPm5leHRsaW5lOworISAgICAg ICAgICAgIGxpbmVsZW4gKz0gMSArIGlzc2hpZnRlZCh3MikgKyB3Mi0+bGVuZ3RoLCB3MiA9IHcy LT5uZXh0KTsKKyAgICAgICAgaWYgKGxpbmVsZW4gPiBMKSBMID0gbGluZWxlbjsKKyAgICAgICAg dzEgPSB3MjsKKyAgICAgIH0KKy0tLSA0NzQsNDgyIC0tLS0KKyAgICAgIEwgPSAwOworICAgICAg dzEgPSBoZWFkLT5uZXh0OworICAgICAgd2hpbGUgKHcxKSB7CishICAgICAgIGZvciAobGluZWxl biA9IHcxLT53aWR0aCwgdzIgPSB3MS0+bmV4dDsKKyAgICAgICAgICAgICB3MiAhPSB3MS0+bmV4 dGxpbmU7CishICAgICAgICAgICAgbGluZWxlbiArPSAxICsgaXNzaGlmdGVkKHcyKSArIHcyLT53 aWR0aCwgdzIgPSB3Mi0+bmV4dCk7CisgICAgICAgIGlmIChsaW5lbGVuID4gTCkgTCA9IGxpbmVs ZW47CisgICAgICAgIHcxID0gdzI7CisgICAgICB9CisqKioqKioqKioqKioqKioKKyoqKiA0NTQs NTIwICoqKioKKyAgCisgIC8qIENvbnN0cnVjdCB0aGUgbGluZXM6ICovCisgIAorISAgIHBidWYg PSBuZXdidWZmZXIoc2l6ZW9mIChjaGFyICopLCBlcnJtc2cpOworICAgIGlmICgqZXJybXNnKSBn b3RvIHJmY2xlYW51cDsKKyAgCisgICAgbnVtb3V0ID0gMDsKKyAgICB3MSA9IGhlYWQtPm5leHQ7 CisgICAgd2hpbGUgKG51bW91dCA8IGhhbmcgfHwgdzEpIHsKKyAgICAgIGlmICh3MSkKKyEgICAg ICAgZm9yICh3MiA9IHcxLT5uZXh0LCBudW1nYXBzID0gMCwgZXh0cmEgPSBMIC0gdzEtPmxlbmd0 aDsKKyAgICAgICAgICAgICB3MiAhPSB3MS0+bmV4dGxpbmU7CishICAgICAgICAgICAgKytudW1n YXBzLCBleHRyYSAtPSAxICsgaXNzaGlmdGVkKHcyKSArIHcyLT5sZW5ndGgsIHcyID0gdzItPm5l eHQpOworICAgICAgbGluZWxlbiA9IHN1ZmZpeCB8fCAoanVzdCAmJiAodzIgfHwgbGFzdCkpID8K KyAgICAgICAgICAgICAgICAgIEwgKyBhZmZpeCA6CisgICAgICAgICAgICAgICAgICB3MSA/IHBy ZWZpeCArIEwgLSBleHRyYSA6IHByZWZpeDsKKyEgICAgIHExID0gbWFsbG9jKChsaW5lbGVuICsg MSkgKiBzaXplb2YgKGNoYXIpKTsKKyAgICAgIGlmICghcTEpIHsKKyEgICAgICAgc3RyY3B5KGVy cm1zZyxvdXRvZm1lbSk7CisgICAgICAgIGdvdG8gcmZjbGVhbnVwOworICAgICAgfQorICAgICAg YWRkaXRlbShwYnVmLCAmcTEsIGVycm1zZyk7CisgICAgICBpZiAoKmVycm1zZykgZ290byByZmNs ZWFudXA7CisgICAgICArK251bW91dDsKKyAgICAgIHEyID0gcTEgKyBwcmVmaXg7CishICAgICBp ZiAgICAgIChudW1vdXQgPD0gbnVtaW4pIG1lbWNweShxMSwgaW5saW5lc1tudW1vdXQgLSAxXSwg cHJlZml4KTsKKyEgICAgIGVsc2UgaWYgKG51bWluICA+ICBoYW5nICkgbWVtY3B5KHExLCBlbmRs aW5lWy0xXSwgICAgICAgICBwcmVmaXgpOworICAgICAgZWxzZSB7CisgICAgICAgIGlmIChhZnAg PiBwcmVmaXgpIGFmcCA9IHByZWZpeDsKKyEgICAgICAgbWVtY3B5KHExLCBlbmRsaW5lWy0xXSwg YWZwKTsKKyAgICAgICAgcTEgKz0gYWZwOworISAgICAgICB3aGlsZSAocTEgPCBxMikgKnExKysg PSAnICc7CisgICAgICB9CisgICAgICBxMSA9IHEyOworICAgICAgaWYgKHcxKSB7CisgICAgICAg IHBoYXNlID0gbnVtZ2FwcyAvIDI7CisgICAgICAgIGZvciAodzIgPSB3MTsgIDsgICkgeworISAg ICAgICAgIG1lbWNweShxMSwgdzItPmNocnMsIHcyLT5sZW5ndGgpOworICAgICAgICAgIHExICs9 IHcyLT5sZW5ndGg7CisgICAgICAgICAgdzIgPSB3Mi0+bmV4dDsKKyAgICAgICAgICBpZiAodzIg PT0gdzEtPm5leHRsaW5lKSBicmVhazsKKyEgICAgICAgICAqcTErKyA9ICcgJzsKKyAgICAgICAg ICBpZiAoanVzdCAmJiAodzEtPm5leHRsaW5lIHx8IGxhc3QpKSB7CisgICAgICAgICAgICBwaGFz ZSArPSBleHRyYTsKKyAgICAgICAgICAgIHdoaWxlIChwaGFzZSA+PSBudW1nYXBzKSB7CishICAg ICAgICAgICAgICpxMSsrID0gJyAnOworICAgICAgICAgICAgICBwaGFzZSAtPSBudW1nYXBzOwor ICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyEgICAgICAgICBpZiAoaXNzaGlmdGVkKHcyKSkg KnExKysgPSAnICc7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHEyICs9IGxpbmVsZW4gLSBh ZmZpeDsKKyEgICAgIHdoaWxlIChxMSA8IHEyKSAqcTErKyA9ICcgJzsKKyAgICAgIHEyID0gcTEg KyBzdWZmaXg7CishICAgICBpZiAgICAgIChudW1vdXQgPD0gbnVtaW4pIG1lbWNweShxMSwgc3Vm Zml4ZXNbbnVtb3V0IC0gMV0sIHN1ZmZpeCk7CishICAgICBlbHNlIGlmIChudW1pbiAgPiAgaGFu ZyApIG1lbWNweShxMSwgc3VmZml4ZXNbbnVtaW4gIC0gMV0sIHN1ZmZpeCk7CisgICAgICBlbHNl IHsKKyAgICAgICAgaWYgKGZzID4gc3VmZml4KSBmcyA9IHN1ZmZpeDsKKyEgICAgICAgbWVtY3B5 KHExLCBzdWZmaXhlc1tudW1pbiAtIDFdLCBmcyk7CisgICAgICAgIHExICs9IGZzOworISAgICAg ICB3aGlsZShxMSA8IHEyKSAqcTErKyA9ICcgJzsKKyAgICAgIH0KKyEgICAgICpxMiA9ICdcMCc7 CisgICAgICBpZiAodzEpIHcxID0gdzEtPm5leHRsaW5lOworICAgIH0KKyAgCistLS0gNDg0LDU1 MCAtLS0tCisgIAorICAvKiBDb25zdHJ1Y3QgdGhlIGxpbmVzOiAqLworICAKKyEgICBwYnVmID0g bmV3YnVmZmVyKHNpemVvZiAod2NoYXJfdCAqKSwgZXJybXNnKTsKKyAgICBpZiAoKmVycm1zZykg Z290byByZmNsZWFudXA7CisgIAorICAgIG51bW91dCA9IDA7CisgICAgdzEgPSBoZWFkLT5uZXh0 OworICAgIHdoaWxlIChudW1vdXQgPCBoYW5nIHx8IHcxKSB7CisgICAgICBpZiAodzEpCishICAg ICAgIGZvciAodzIgPSB3MS0+bmV4dCwgbnVtZ2FwcyA9IDAsIGV4dHJhID0gTCAtIHcxLT53aWR0 aDsKKyAgICAgICAgICAgICB3MiAhPSB3MS0+bmV4dGxpbmU7CishICAgICAgICAgICAgKytudW1n YXBzLCBleHRyYSAtPSAxICsgaXNzaGlmdGVkKHcyKSArIHcyLT53aWR0aCwgdzIgPSB3Mi0+bmV4 dCk7CisgICAgICBsaW5lbGVuID0gc3VmZml4IHx8IChqdXN0ICYmICh3MiB8fCBsYXN0KSkgPwor ICAgICAgICAgICAgICAgICAgTCArIGFmZml4IDoKKyAgICAgICAgICAgICAgICAgIHcxID8gcHJl Zml4ICsgTCAtIGV4dHJhIDogcHJlZml4OworISAgICAgcTEgPSBtYWxsb2MoKGxpbmVsZW4gKyAx KSAqIHNpemVvZiAod2NoYXJfdCkpOworICAgICAgaWYgKCFxMSkgeworISAgICAgICB3Y3NjcHko ZXJybXNnLG91dG9mbWVtKTsKKyAgICAgICAgZ290byByZmNsZWFudXA7CisgICAgICB9CisgICAg ICBhZGRpdGVtKHBidWYsICZxMSwgZXJybXNnKTsKKyAgICAgIGlmICgqZXJybXNnKSBnb3RvIHJm Y2xlYW51cDsKKyAgICAgICsrbnVtb3V0OworICAgICAgcTIgPSBxMSArIHByZWZpeDsKKyEgICAg IGlmICAgICAgKG51bW91dCA8PSBudW1pbikgbWVtY3B5KHExLCBpbmxpbmVzW251bW91dCAtIDFd LCBwcmVmaXggKiBzaXplb2Yod2NoYXJfdCkpOworISAgICAgZWxzZSBpZiAobnVtaW4gID4gIGhh bmcgKSBtZW1jcHkocTEsIGVuZGxpbmVbLTFdLCAgICAgICAgIHByZWZpeCAqIHNpemVvZih3Y2hh cl90KSk7CisgICAgICBlbHNlIHsKKyAgICAgICAgaWYgKGFmcCA+IHByZWZpeCkgYWZwID0gcHJl Zml4OworISAgICAgICBtZW1jcHkocTEsIGVuZGxpbmVbLTFdLCBhZnAgKiBzaXplb2Yod2NoYXJf dCkpOworICAgICAgICBxMSArPSBhZnA7CishICAgICAgIHdoaWxlIChxMSA8IHEyKSAqcTErKyA9 IEwnICc7CisgICAgICB9CisgICAgICBxMSA9IHEyOworICAgICAgaWYgKHcxKSB7CisgICAgICAg IHBoYXNlID0gbnVtZ2FwcyAvIDI7CisgICAgICAgIGZvciAodzIgPSB3MTsgIDsgICkgeworISAg ICAgICAgIG1lbWNweShxMSwgdzItPmNocnMsIHcyLT5sZW5ndGggKiBzaXplb2Yod2NoYXJfdCkp OworICAgICAgICAgIHExICs9IHcyLT5sZW5ndGg7CisgICAgICAgICAgdzIgPSB3Mi0+bmV4dDsK KyAgICAgICAgICBpZiAodzIgPT0gdzEtPm5leHRsaW5lKSBicmVhazsKKyEgICAgICAgICAqcTEr KyA9IEwnICc7CisgICAgICAgICAgaWYgKGp1c3QgJiYgKHcxLT5uZXh0bGluZSB8fCBsYXN0KSkg eworICAgICAgICAgICAgcGhhc2UgKz0gZXh0cmE7CisgICAgICAgICAgICB3aGlsZSAocGhhc2Ug Pj0gbnVtZ2FwcykgeworISAgICAgICAgICAgICAqcTErKyA9IEwnICc7CisgICAgICAgICAgICAg IHBoYXNlIC09IG51bWdhcHM7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorISAgICAgICAg IGlmIChpc3NoaWZ0ZWQodzIpKSAqcTErKyA9IEwnICc7CisgICAgICAgIH0KKyAgICAgIH0KKyAg ICAgIHEyICs9IGxpbmVsZW4gLSBhZmZpeDsKKyEgICAgIHdoaWxlIChxMSA8IHEyKSAqcTErKyA9 IEwnICc7CisgICAgICBxMiA9IHExICsgc3VmZml4OworISAgICAgaWYgICAgICAobnVtb3V0IDw9 IG51bWluKSBtZW1jcHkocTEsIHN1ZmZpeGVzW251bW91dCAtIDFdLCBzdWZmaXggKiBzaXplb2Yo d2NoYXJfdCkpOworISAgICAgZWxzZSBpZiAobnVtaW4gID4gIGhhbmcgKSBtZW1jcHkocTEsIHN1 ZmZpeGVzW251bWluICAtIDFdLCBzdWZmaXggKiBzaXplb2Yod2NoYXJfdCkpOworICAgICAgZWxz ZSB7CisgICAgICAgIGlmIChmcyA+IHN1ZmZpeCkgZnMgPSBzdWZmaXg7CishICAgICAgIG1lbWNw eShxMSwgc3VmZml4ZXNbbnVtaW4gLSAxXSwgZnMgKiBzaXplb2Yod2NoYXJfdCkpOworICAgICAg ICBxMSArPSBmczsKKyEgICAgICAgd2hpbGUocTEgPCBxMikgKnExKysgPSBMJyAnOworICAgICAg fQorISAgICAgKnEyID0gTCdcMCc7CisgICAgICBpZiAodzEpIHcxID0gdzEtPm5leHRsaW5lOwor ICAgIH0KKyAgCisqKioqKioqKioqKioqKioKKyoqKiA1NDMsNTQ3ICoqKioKKy0tLSA1NzMsNTc4 IC0tLS0KKyAgICAgIGZyZWVidWZmZXIocGJ1Zik7CisgICAgfQorICAKKysgICAKKyAgICByZXR1 cm4gb3V0bGluZXM7CisgIH0KK2RpZmYgLWMgLi9yZWZvcm1hdC5oIC4uL1BhcjE1Mi11bmljb2Rl L3JlZm9ybWF0LmgKKyoqKiAuL3JlZm9ybWF0LmgJMjAwMS0wMy0wOSAwMzo1Mzo0My4wMDAwMDAw MDAgKzAzMDAKKy0tLSAuLi9QYXIxNTItdW5pY29kZS9yZWZvcm1hdC5oCTIwMTktMTAtMjYgMTc6 MjE6MDguNTQ5MDUwODUzICswMzAwCisqKioqKioqKioqKioqKioKKyoqKiAxLDE4ICoqKioKKyEg LyoqKioqKioqKioqKioqKioqKioqKi8KKyEgLyogcmVmb3JtYXQuaCAgICAgICAgKi8KKyEgLyog Zm9yIFBhciAxLjUyICAgICAgKi8KKyEgLyogQ29weXJpZ2h0IDIwMDEgYnkgKi8KKyEgLyogQWRh bSBNLiBDb3N0ZWxsbyAgKi8KKyEgLyoqKioqKioqKioqKioqKioqKioqKi8KKyAgCisgIC8qIFRo aXMgaXMgQU5TSSBDIGNvZGUgKEM4OSkuICovCisgIAorICAKKyAgI2luY2x1ZGUgImVycm1zZy5o IgorICAKKyEgCishIGNoYXIgKipyZWZvcm1hdCgKKyEgICBjb25zdCBjaGFyICogY29uc3QgKmlu bGluZXMsIGNvbnN0IGNoYXIgKiBjb25zdCAqZW5kbGluZSwgaW50IGFmcCwgaW50IGZzLAorICAg IGludCBoYW5nLCBpbnQgcHJlZml4LCBpbnQgc3VmZml4LCBpbnQgd2lkdGgsIGludCBjYXAsIGlu dCBmaXQsIGludCBndWVzcywKKyAgICBpbnQganVzdCwgaW50IGxhc3QsIGludCBSZXBvcnQsIGlu dCB0b3VjaCwgZXJybXNnX3QgZXJybXNnCisgICk7CistLS0gMSwyMCAtLS0tCishIC8qKioqKioq KioqKioqKioqKioqKioqKi8KKyEgLyogcmVmb3JtYXQuaCAgICAgICAgICAqLworISAvKiBmb3Ig UGFyIDEuNTItaTE4bi40ICovCishIC8qIENvcHlyaWdodCAyMDAxIGJ5ICAgKi8KKyEgLyogQWRh bSBNLiBDb3N0ZWxsbyAgICAqLworISAvKiBNb2RpZmllZCBieSAgICAgICAgICovCishIC8qIErD qXLDtG1lIFBvdWlsbGVyICAgICAqLworISAvKioqKioqKioqKioqKioqKioqKioqKiovCisgIAor ICAvKiBUaGlzIGlzIEFOU0kgQyBjb2RlIChDODkpLiAqLworICAKKyAgCisgICNpbmNsdWRlICJl cnJtc2cuaCIKKysgI2luY2x1ZGUgPHdjaGFyLmg+CisgIAorISB3Y2hhcl90ICoqcmVmb3JtYXQo CishICAgY29uc3Qgd2NoYXJfdCAqIGNvbnN0ICppbmxpbmVzLCBjb25zdCB3Y2hhcl90ICogY29u c3QgKmVuZGxpbmUsIGludCBhZnAsIGludCBmcywKKyAgICBpbnQgaGFuZywgaW50IHByZWZpeCwg aW50IHN1ZmZpeCwgaW50IHdpZHRoLCBpbnQgY2FwLCBpbnQgZml0LCBpbnQgZ3Vlc3MsCisgICAg aW50IGp1c3QsIGludCBsYXN0LCBpbnQgUmVwb3J0LCBpbnQgdG91Y2gsIGVycm1zZ190IGVycm1z ZworICApOworZGlmZiAtYyAuL3JlbGVhc2Vub3RlcyAuLi9QYXIxNTItdW5pY29kZS9yZWxlYXNl bm90ZXMKKyoqKiAuL3JlbGVhc2Vub3RlcwkyMDAxLTA0LTMwIDAxOjEyOjA1LjAwMDAwMDAwMCAr MDQwMAorLS0tIC4uL1BhcjE1Mi11bmljb2RlL3JlbGVhc2Vub3RlcwkyMDE5LTEwLTI2IDE3OjIx OjA4LjU0OTA1MDg1MyArMDMwMAorKioqKioqKioqKioqKioqCisqKiogMSwxMiAqKioqCishICAg KioqKioqKioqKioqKioqKioqKioqCishICAgKiByZWxlYXNlbm90ZXMgICAgICAqCishICAgKiBm b3IgUGFyIDEuNTIgICAgICAqCishICAgKiBDb3B5cmlnaHQgMjAwMSBieSAqCishICAgKiBBZGFt IE0uIENvc3RlbGxvICAqCishICAgKioqKioqKioqKioqKioqKioqKioqCisgIAorICAKKyAgRWFj aCBlbnRyeSBiZWxvdyBkZXNjcmliZXMgY2hhbmdlcyBzaW5jZSB0aGUgcHJldmlvdXMgdmVyc2lv bi4KKyAgCisgIFBhciAxLjUyIHJlbGVhc2VkIDIwMDEtQXByLTI5CisgICAgICBGaXhlZCBhIHBv cnRhYmlsaXR5IHByb2JsZW0gcmVnYXJkaW5nIHVuc2lnbmVkIGNoYXIgdmVyc3VzIGNoYXIuCist LS0gMSwyOCAtLS0tCishICAgKioqKioqKioqKioqKioqKioqKioqKioKKyEgICAqIHJlbGVhc2Vu b3RlcyAgICAgICAgKgorISAgICogZm9yIFBhciAxLjUyLWkxOG4uNCAqCishICAgKiBDb3B5cmln aHQgMjAwMSBieSAgICoKKyEgICAqIEFkYW0gTS4gQ29zdGVsbG8gICAgKgorISAgICogTW9kaWZp ZWQgYnkgICAgICAgICAqCishICAgKiBKw6lyw7RtZSBQb3VpbGxlciAgICAgKgorISAgICoqKioq KioqKioqKioqKioqKioqKioqCisgIAorICAKKyAgRWFjaCBlbnRyeSBiZWxvdyBkZXNjcmliZXMg Y2hhbmdlcyBzaW5jZSB0aGUgcHJldmlvdXMgdmVyc2lvbi4KKysgUGFyIDEuNTItaTE4bi40IHJl bGVhc2VkIDIwMDktTWF5LTA1CisrICAgICBDaGFuZ2UgbmVhcmx5IGFsbCBjaGFyIGluIHdjaGFy X3QgcmVtb3ZlIG5pZ2h0bWFyZSBvZiB1bnNpZ25lZCBjaGFyIHZzIHNpZ25lZCBjaGFyCisrICAg ICBGaXggYnVncyB3aXRoIG9wdGlvbiAncScKKysgICAgIEZpeCBidWdzIHdpdGggJ1xuJworKyAK KysgUGFyIDEuNTItaTE4bi4zIHJlbGVhc2VkIDIwMDYtT2N0LTAzCisrICAgICBGaXggYnVnIHdp dGggb3B0aW9uICdnJworKyAKKysgUGFyIDEuNTItaTE4bi4yIHJlbGVhc2VkIDIwMDYtQXVnLTAz CisrICAgICBGaXggYnVnIGRlYmlhbiAjMzEwNDk1LgorKyAKKysgUGFyIDEuNTItaTE4bi4xIHJl bGVhc2VkIDIwMDYtSnVuLTIyCisrICAgICBDaGFuZ2VkIGNoYXIgaW4gd2NoYXJfdC4gQWxsb3cg c3VwcG9ydCBvZiBtdWx0aWJ5dGVzIGNoYXJhY3RlcnMuCisrICAgICBBZGRlZCBzdXBwb3J0IGZv ciBkb3VibGUtd2lkdGggY2hhcmFjdGVycy4KKyAgCisgIFBhciAxLjUyIHJlbGVhc2VkIDIwMDEt QXByLTI5CisgICAgICBGaXhlZCBhIHBvcnRhYmlsaXR5IHByb2JsZW0gcmVnYXJkaW5nIHVuc2ln bmVkIGNoYXIgdmVyc3VzIGNoYXIuCivQntCx0YnQuNC1INC/0L7QtNC60LDRgtCw0LvQvtCz0Lg6 IC4vdGVzdCDQuCAuLi9QYXIxNTItdW5pY29kZS90ZXN0CmRpZmYgLS1naXQgYS9zcmNwa2dzL3Bh ci90ZW1wbGF0ZSBiL3NyY3BrZ3MvcGFyL3RlbXBsYXRlCmluZGV4IDU4NWE4ODg3ODQxLi5kM2Uy ZDU4ODZhZCAxMDA2NDQKLS0tIGEvc3JjcGtncy9wYXIvdGVtcGxhdGUKKysrIGIvc3JjcGtncy9w YXIvdGVtcGxhdGUKQEAgLTEsNyArMSw3IEBACiAjIFRlbXBsYXRlIGZpbGUgZm9yICdwYXInCiBw a2duYW1lPXBhcgogdmVyc2lvbj0xLjUyCi1yZXZpc2lvbj0zCityZXZpc2lvbj00CiB3cmtzcmM9 UGFyMTUyCiBidWlsZF9zdHlsZT1nbnUtY29uZmlndXJlCiBzaG9ydF9kZXNjPSJQYXJhZ3JhcGgg cmVmb3JtYXR0ZXIiCg== --===============7236211663868642391==--