Date: Wed, 22 Aug 2001 17:15:18 -0700 (PDT) From: Dave Zarzycki <zarzycki@freebsd.org> To: <freebsd-net@freebsd.org> Subject: RFC: SACK/FACK patch port to Current Message-ID: <Pine.LNX.4.33.0108221713240.16888-200000@bonk.apple.com>
next in thread | raw e-mail | index | archive | help
This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. ---904840148-831484259-998525718=:16888 Content-Type: text/plain; charset="us-ascii" Attached and tested. I'd like to merge this in unless anybody objects. davez -- Dave Zarzycki Darwin & Mac OS X Apple Computer, Inc. ---904840148-831484259-998525718=:16888 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="SACK-FreeBSD-current.diff" Content-Transfer-Encoding: BASE64 Content-ID: <Pine.LNX.4.33.0108221715180.16888@bonk.apple.com> Content-Description: SACK-FreeBSD-current.diff Content-Disposition: attachment; filename="SACK-FreeBSD-current.diff" SW5kZXg6IHRjcC5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmls ZTogL2hvbWUvbmN2cy9zcmMvc3lzL25ldGluZXQvdGNwLmgsdg0KcmV0cmll dmluZyByZXZpc2lvbiAxLjE2DQpkaWZmIC11IC1kIC1iIC13IC11IC1kIC1y MS4xNiB0Y3AuaA0KLS0tIHRjcC5oCTIwMDEvMDEvMDkgMTg6MjY6MTcJMS4x Ng0KKysrIHRjcC5oCTIwMDEvMDgvMjIgMjM6MTE6MjENCkBAIC04NSwxMiAr ODUsMjIgQEANCiAjZGVmaW5lIFRDUE9QVF9TQUNLX1BFUk1JVFRFRAk0CQkv KiBFeHBlcmltZW50YWwgKi8NCiAjZGVmaW5lICAgIFRDUE9MRU5fU0FDS19Q RVJNSVRURUQJMg0KICNkZWZpbmUgVENQT1BUX1NBQ0sJCTUJCS8qIEV4cGVy aW1lbnRhbCAqLw0KKyNkZWZpbmUgICAgVENQT0xFTl9TQUNLICAgICAgICAg ICAgICAgICA4ICAgLyoyKnNpemVvZih0Y3Bfc2VxKTpsZW4gb2Ygc2FjayBi bGsgKi8gICAgDQogI2RlZmluZSBUQ1BPUFRfVElNRVNUQU1QCTgNCiAjZGVm aW5lICAgIFRDUE9MRU5fVElNRVNUQU1QCQkxMA0KICNkZWZpbmUgICAgVENQ T0xFTl9UU1RBTVBfQVBQQQkJKFRDUE9MRU5fVElNRVNUQU1QKzIpIC8qIGFw cGVuZGl4IEEgKi8NCiAjZGVmaW5lICAgIFRDUE9QVF9UU1RBTVBfSERSCQlc DQogICAgIChUQ1BPUFRfTk9QPDwyNHxUQ1BPUFRfTk9QPDwxNnxUQ1BPUFRf VElNRVNUQU1QPDw4fFRDUE9MRU5fVElNRVNUQU1QKQ0KIA0KKyNkZWZpbmUg VENQT1BUX1NBQ0tfUEVSTUlUX0hEUiAgXA0KKyAoVENQT1BUX05PUDw8MjR8 VENQT1BUX05PUDw8MTZ8VENQT1BUX1NBQ0tfUEVSTUlUVEVEPDw4fFRDUE9M RU5fU0FDS19QRVJNSVRURUQpDQorI2RlZmluZSBUQ1BPUFRfU0FDS19IRFIg ICAgICAgICAgKFRDUE9QVF9OT1A8PDI0fFRDUE9QVF9OT1A8PDE2fFRDUE9Q VF9TQUNLPDw4KQ0KKw0KKy8qIE1pc2NlbGxhbmVvdXMgY29uc3RhbnRzICov DQorI2RlZmluZSBNQVhfU0FDS19CTEtTCTYJLyogTWF4ICMgU0FDSyBibG9j a3Mgc3RvcmVkIGF0IHNlbmRlciBzaWRlICovDQorI2RlZmluZSBUQ1BfTUFY X1NBQ0sJMwkvKiBNQVggIyBTQUNLcyBzZW50IGluIGFueSBzZWdtZW50ICov DQorDQorDQogI2RlZmluZQlUQ1BPUFRfQ0MJCTExCQkvKiBDQyBvcHRpb25z OiBSRkMtMTY0NCAqLw0KICNkZWZpbmUgVENQT1BUX0NDTkVXCQkxMg0KICNk ZWZpbmUgVENQT1BUX0NDRUNITwkJMTMNCkBAIC0xMzMsNSArMTQzLDYgQEAN CiAjZGVmaW5lCVRDUF9NQVhTRUcJMHgwMgkvKiBzZXQgbWF4aW11bSBzZWdt ZW50IHNpemUgKi8NCiAjZGVmaW5lIFRDUF9OT1BVU0gJMHgwNAkvKiBkb24n dCBwdXNoIGxhc3QgYmxvY2sgb2Ygd3JpdGUgKi8NCiAjZGVmaW5lIFRDUF9O T09QVAkweDA4CS8qIGRvbid0IHVzZSBUQ1Agb3B0aW9ucyAqLw0KKyNkZWZp bmUJVENQX1NBQ0tfRElTQUJMRSAweDMwMCAgLyogZGlzYWJsZSBTQUNLcyAo aWYgZW5hYmxlZCBieSBkZWYuKSAqLw0KIA0KICNlbmRpZg0KSW5kZXg6IHRj cF9pbnB1dC5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTog L2hvbWUvbmN2cy9zcmMvc3lzL25ldGluZXQvdGNwX2lucHV0LmMsdg0KcmV0 cmlldmluZyByZXZpc2lvbiAxLjEzNw0KZGlmZiAtdSAtZCAtYiAtdyAtdSAt ZCAtcjEuMTM3IHRjcF9pbnB1dC5jDQotLS0gdGNwX2lucHV0LmMJMjAwMS8w OC8yMiAwMDo1ODoxNgkxLjEzNw0KKysrIHRjcF9pbnB1dC5jCTIwMDEvMDgv MjIgMjM6MTE6MjENCkBAIC0xMDAsNyArMTAwLDcgQEANCiANCiBNQUxMT0Nf REVGSU5FKE1fVFNFR1EsICJ0c2VnX3FlbnQiLCAiVENQIHNlZ21lbnQgcXVl dWUgZW50cnkiKTsNCiANCi1zdGF0aWMgaW50CXRjcHJleG10dGhyZXNoID0g MzsNCitpbnQJdGNwcmV4bXR0aHJlc2ggPSAzOw0KIHRjcF9jYwl0Y3BfY2Nn ZW47DQogDQogc3RydWN0CXRjcHN0YXQgdGNwc3RhdDsNCkBAIC04NzAsNiAr ODcwLDEwIEBADQogCXRwLT50X3JjdnRpbWUgPSB0aWNrczsNCiAJaWYgKFRD UFNfSEFWRUVTVEFCTElTSEVEKHRwLT50X3N0YXRlKSkNCiAJCWNhbGxvdXRf cmVzZXQodHAtPnR0X2tlZXAsIHRjcF9rZWVwaWRsZSwgdGNwX3RpbWVyX2tl ZXAsIHRwKTsNCisjaWZkZWYgVENQX1NBQ0sNCisJaWYgKCF0cC0+c2Fja19k aXNhYmxlKQ0KKwkJdGNwX2RlbF9zYWNraG9sZXModHAsIHRoKTsgLyogRGVs ZXRlIHN0YWxlIFNBQ0sgaG9sZXMgKi8NCisjZW5kaWYgLyogVENQX1NBQ0sg Ki8NCiANCiAJLyoNCiAJICogUHJvY2VzcyBvcHRpb25zIGlmIG5vdCBpbiBM SVNURU4gc3RhdGUsDQpAQCAtODc4LDYgKzg4MiwxMiBAQA0KIAlpZiAodHAt PnRfc3RhdGUgIT0gVENQU19MSVNURU4pDQogCQl0Y3BfZG9vcHRpb25zKHRw LCBvcHRwLCBvcHRsZW4sIHRoLCAmdG8pOw0KIA0KKyNpZmRlZiBUQ1BfU0FD Sw0KKwlpZiAoIXRwLT5zYWNrX2Rpc2FibGUpIHsNCisJCXRwLT5yY3ZfbGFz dHN0YXJ0ID0gdGgtPnRoX3NlcTsgLyogbGFzdCByZWMndmQgc2VnbWVudCov DQorCQl0cC0+cmN2X2xhc3RlbmQgPSB0aC0+dGhfc2VxICsgdGxlbjsNCisJ fQ0KKyNlbmRpZiAvKiBUQ1BfU0FDSyAqLw0KIAkvKg0KIAkgKiBIZWFkZXIg cHJlZGljdGlvbjogY2hlY2sgZm9yIHRoZSB0d28gY29tbW9uIGNhc2VzDQog CSAqIG9mIGEgdW5pLWRpcmVjdGlvbmFsIGRhdGEgeGZlci4gIElmIHRoZSBw YWNrZXQgaGFzDQpAQCAtOTU0LDYgKzk2NCwxOSBAQA0KIAkJCQl0Y3BzdGF0 LnRjcHNfcmN2YWNrYnl0ZSArPSBhY2tlZDsNCiAJCQkJc2Jkcm9wKCZzby0+ c29fc25kLCBhY2tlZCk7DQogCQkJCXRwLT5zbmRfdW5hID0gdGgtPnRoX2Fj azsNCisNCisjaWYgZGVmaW5lZChUQ1BfU0FDSykNCisJCQkJLyogDQorCQkJ CSAqIFdlIHdhbnQgc25kX2xhc3QgdG8gdHJhY2sgc25kX3VuYSBzbw0KKwkJ CQkgKiBhcyB0byBhdm9pZCBzZXF1ZW5jZSB3cmFwYXJvdW5kIHByb2JsZW1z DQorCQkJCSAqIGZvciB2ZXJ5IGxhcmdlIHRyYW5zZmVycy4NCisJCQkJICov DQorCQkJCXRwLT5zbmRfbGFzdCA9IHRwLT5zbmRfdW5hOw0KKyNlbmRpZiAv KiBUQ1BfU0FDSyAqLw0KKyNpZiBkZWZpbmVkKFRDUF9TQUNLKSAmJiBkZWZp bmVkKFRDUF9GQUNLKQ0KKwkJCQl0cC0+c25kX2ZhY2sgPSB0cC0+c25kX3Vu YTsNCisJCQkJdHAtPnJldHJhbl9kYXRhID0gMDsNCisjZW5kaWYgLyogVENQ X0ZBQ0sgKi8NCiAJCQkJbV9mcmVlbShtKTsNCiAJCQkJTkQ2X0hJTlQodHAp OyAvKiBzb21lIHByb2dyZXNzIGhhcyBiZWVuIGRvbmUgKi8NCiANCkBAIC05 ODYsNiArMTAwOSwxMiBAQA0KIAkJCSAqIHdpdGggbm90aGluZyBvbiB0aGUg cmVhc3NlbWJseSBxdWV1ZSBhbmQNCiAJCQkgKiB3ZSBoYXZlIGVub3VnaCBi dWZmZXIgc3BhY2UgdG8gdGFrZSBpdC4NCiAJCQkgKi8NCisNCisjaWZkZWYg VENQX1NBQ0sNCisJCQkvKiBDbGVhbiByZWNlaXZlciBTQUNLIHJlcG9ydCBp ZiBwcmVzZW50ICovDQorCQkJaWYgKCF0cC0+c2Fja19kaXNhYmxlICYmIHRw LT5yY3ZfbnVtc2Fja3MpDQorCQkJCXRjcF9jbGVhbl9zYWNrcmVwb3J0KHRw KTsNCisjZW5kaWYgLyogVENQX1NBQ0sgKi8NCiAJCQkrK3RjcHN0YXQudGNw c19wcmVkZGF0Ow0KIAkJCXRwLT5yY3Zfbnh0ICs9IHRsZW47DQogCQkJdGNw c3RhdC50Y3BzX3JjdnBhY2srKzsNCkBAIC0xMTMxLDYgKzExNjAsMTcgQEAN CiAJCQliemVybyh0YW9wLCBzaXplb2YoKnRhb3ApKTsNCiAJCX0NCiAJCXRj cF9kb29wdGlvbnModHAsIG9wdHAsIG9wdGxlbiwgdGgsICZ0byk7DQorDQor I2lmZGVmIFRDUF9TQUNLDQorCQkvKg0KKwkJICogSWYgcGVlciBkaWQgbm90 IHNlbmQgYSBTQUNLX1BFUk1JVFRFRCBvcHRpb24gKGkuZS4sIGlmDQorCQkg KiB0Y3BfZG9vcHRpb25zKCkgZGlkIG5vdCBzZXQgVEZfU0FDS19QRVJNSVQp LCBzZXQgDQorICAgICAgICAgICAgICAgICAqIHNhY2tfZGlzYWJsZSB0byAx IGlmIGl0IGlzIGN1cnJlbnRseSAwLg0KKyAgICAgICAgICAgICAgICAgKi8N CisgICAgICAgICAgICAgICAgaWYgKCF0cC0+c2Fja19kaXNhYmxlKQ0KKyAg ICAgICAgICAgICAgICAgICAgICAgIGlmICgodHAtPnRfZmxhZ3MgJiBURl9T QUNLX1BFUk1JVCkgPT0gMCkgDQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0cC0+c2Fja19kaXNhYmxlID0gMTsNCisjZW5kaWYNCiAJCWlm IChpc3MpDQogCQkJdHAtPmlzcyA9IGlzczsNCiAJCWVsc2Ugew0KQEAgLTEx MzgsNiArMTE3OCwxNCBAQA0KICAJCX0NCiAJCXRwLT5pcnMgPSB0aC0+dGhf c2VxOw0KIAkJdGNwX3NlbmRzZXFpbml0KHRwKTsNCisjaWYgZGVmaW5lZCAo VENQX1NBQ0spDQorCQl0cC0+c25kX2xhc3QgPSB0cC0+c25kX3VuYTsNCisj ZW5kaWYgLyogVENQX1NBQ0sgKi8NCisjaWYgZGVmaW5lZChUQ1BfU0FDSykg JiYgZGVmaW5lZChUQ1BfRkFDSykNCisJCXRwLT5zbmRfZmFjayA9IHRwLT5z bmRfdW5hOw0KKwkJdHAtPnJldHJhbl9kYXRhID0gMDsNCisJCXRwLT5zbmRf YXduZCA9IDA7DQorI2VuZGlmIC8qIFRDUF9GQUNLICovDQogCQl0Y3BfcmN2 c2VxaW5pdCh0cCk7DQogCQl0cC0+c25kX3JlY292ZXIgPSB0cC0+c25kX3Vu YTsNCiAJCS8qDQpAQCAtMTMwOSw2ICsxMzU3LDE3IEBADQogCQkJCX0NCiAJ CQl9IGVsc2UNCiAJCQkJdHAtPnRfZmxhZ3MgJj0gflRGX1JDVkRfQ0M7DQor I2lmZGVmIFRDUF9TQUNLDQorICAgICAgICAgICAgICAgIC8qDQorICAgICAg ICAgICAgICAgICAqIElmIHdlJ3ZlIHNlbnQgYSBTQUNLX1BFUk1JVFRFRCBv cHRpb24sIGFuZCB0aGUgcGVlcg0KKyAgICAgICAgICAgICAgICAgKiBhbHNv IHJlcGxpZWQgd2l0aCBvbmUsIHRoZW4gVEZfU0FDS19QRVJNSVQgc2hvdWxk IGhhdmUNCisgICAgICAgICAgICAgICAgICogYmVlbiBzZXQgaW4gdGNwX2Rv b3B0aW9ucygpLiAgSWYgaXQgd2FzIG5vdCwgZGlzYWJsZSBTQUNLcy4NCisg ICAgICAgICAgICAgICAgICovDQorICAgICAgICAgICAgICAgIGlmICghdHAt PnNhY2tfZGlzYWJsZSkNCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo KHRwLT50X2ZsYWdzICYgVEZfU0FDS19QRVJNSVQpID09IDApIA0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHAtPnNhY2tfZGlzYWJsZSA9 IDE7DQorI2VuZGlmDQorCQ0KIAkJCXRjcHN0YXQudGNwc19jb25uZWN0cysr Ow0KIAkJCXNvaXNjb25uZWN0ZWQoc28pOw0KIAkJCS8qIERvIHdpbmRvdyBz Y2FsaW5nIG9uIHRoaXMgY29ubmVjdGlvbj8gKi8NCkBAIC0xODIwLDE0ICsx ODc5LDM2IEBADQogCQkJCSAqIHRvIGtlZXAgYSBjb25zdGFudCBjd25kIHBh Y2tldHMgaW4gdGhlDQogCQkJCSAqIG5ldHdvcmsuDQogCQkJCSAqLw0KKw0K IAkJCQlpZiAoIWNhbGxvdXRfYWN0aXZlKHRwLT50dF9yZXhtdCkgfHwNCiAJ CQkJICAgIHRoLT50aF9hY2sgIT0gdHAtPnNuZF91bmEpDQogCQkJCQl0cC0+ dF9kdXBhY2tzID0gMDsNCisjaWYgZGVmaW5lZChUQ1BfU0FDSykgJiYgZGVm aW5lZChUQ1BfRkFDSykNCisJCQkJLyogDQorCQkJCSAqIEluIEZBQ0ssIGNh biBlbnRlciBmYXN0IHJlYy4gaWYgdGhlIHJlY2VpdmVyDQorCQkJCSAqIHJl cG9ydHMgYSByZWFzcy4gcXVldWUgbG9uZ2VyIHRoYW4gMyBzZWdzLg0KKwkJ CQkgKi8NCisJCQkJZWxzZSBpZiAoKyt0cC0+dF9kdXBhY2tzID09IHRjcHJl eG10dGhyZXNoIHx8DQorCQkJCQkgKChTRVFfR1QodHAtPnNuZF9mYWNrLCB0 Y3ByZXhtdHRocmVzaCAqIA0KKwkJCQkJCSAgdHAtPnRfbWF4c2VnICsgdHAt PnNuZF91bmEpKSAmJg0KKwkJCQkJICBTRVFfR1QodHAtPnNuZF91bmEsIHRw LT5zbmRfbGFzdCkpKSB7DQorI2Vsc2UNCiAJCQkJZWxzZSBpZiAoKyt0cC0+ dF9kdXBhY2tzID09IHRjcHJleG10dGhyZXNoKSB7DQorI2VuZGlmIC8qIFRD UF9GQUNLICovDQogCQkJCQl0Y3Bfc2VxIG9ueHQgPSB0cC0+c25kX254dDsN CiAJCQkJCXVfaW50IHdpbiA9DQogCQkJCQkgICAgbWluKHRwLT5zbmRfd25k LCB0cC0+c25kX2N3bmQpIC8gMiAvDQogCQkJCQkJdHAtPnRfbWF4c2VnOw0K KyNpZiBkZWZpbmVkKFRDUF9TQUNLKQ0KKwkJCQkgIGlmIChTRVFfTFQodGgt PnRoX2FjaywgdHAtPnNuZF9sYXN0KSl7DQorCQkJCSAgICAvKiANCisJCQkJ ICAgICAqIEZhbHNlIGZhc3QgcmV0eCBhZnRlciANCisJCQkJICAgICAqIHRp bWVvdXQuICBEbyBub3QgY3V0IHdpbmRvdy4NCisJCQkJICAgICAqLw0KKwkJ CQkgICAgdHAtPnRfZHVwYWNrcyA9IDA7DQorCQkJCSAgICBnb3RvIGRyb3A7 DQorCQkJCSAgfQ0KKyNlbHNlDQogCQkJCQlpZiAodGNwX2RvX25ld3Jlbm8g JiYgU0VRX0xUKHRoLT50aF9hY2ssDQogCQkJCQkgICAgdHAtPnNuZF9yZWNv dmVyKSkgew0KIAkJCQkJCS8qIEZhbHNlIHJldHJhbnNtaXQsIHNob3VsZCBu b3QNCkBAIC0xODM4LDIxICsxOTE5LDYyIEBADQogCQkJCQkJKHZvaWQpIHRj cF9vdXRwdXQodHApOw0KIAkJCQkJCWdvdG8gZHJvcDsNCiAJCQkJCX0NCisj ZW5kaWYNCiAJCQkJCWlmICh3aW4gPCAyKQ0KIAkJCQkJCXdpbiA9IDI7DQog CQkJCQl0cC0+c25kX3NzdGhyZXNoID0gd2luICogdHAtPnRfbWF4c2VnOw0K KyNpZiBkZWZpbmVkKFRDUF9TQUNLKQ0KKwkJCQkgIHRwLT5zbmRfbGFzdCA9 IHRwLT5zbmRfbWF4Ow0KKyNlbHNlDQogCQkJCQl0cC0+c25kX3JlY292ZXIg PSB0cC0+c25kX21heDsNCisjZW5kaWYNCisjaWZkZWYgVENQX1NBQ0sNCisJ CQkJICAgIGlmICghdHAtPnNhY2tfZGlzYWJsZSkgew0KIAkJCQkJY2FsbG91 dF9zdG9wKHRwLT50dF9yZXhtdCk7DQogCQkJCQl0cC0+dF9ydHR0aW1lID0g MDsNCisjaWYgZGVmaW5lZChUQ1BfU0FDSykgJiYgZGVmaW5lZChUQ1BfRkFD SykgDQorCQkJCSAgICAgIHRwLT50X2R1cGFja3MgPSB0Y3ByZXhtdHRocmVz aDsNCisJCQkJICAgICAgKHZvaWQpIHRjcF9vdXRwdXQodHApOw0KKwkJCQkg ICAgICAvKg0KKwkJCQkgICAgICAgKiBEdXJpbmcgRlIsIHNuZF9jd25kIGlz IGhlbGQNCisJCQkJICAgICAgICogY29uc3RhbnQgZm9yIEZBQ0suDQorCQkJ CSAgICAgICAqLw0KKwkJCQkgICAgICB0cC0+c25kX2N3bmQgPSB0cC0+c25k X3NzdGhyZXNoOw0KKyNlbHNlDQorCQkJCSAgICAgIC8qIA0KKwkJCQkgICAg ICAgKiB0Y3Bfb3V0cHV0KCkgd2lsbCBzZW5kDQorCQkJCSAgICAgICAqIG9s ZGVzdCBTQUNLLWVsaWdpYmxlIHJ0eC4NCisJCQkJICAgICAgICovDQorCQkJ CSAgICAgICh2b2lkKSB0Y3Bfb3V0cHV0KHRwKTsNCisJCQkJICAgICAgdHAt PnNuZF9jd25kID0gdHAtPnNuZF9zc3RocmVzaCsNCisJCQkJICAgICAgdHAt PnRfbWF4c2VnICogdHAtPnRfZHVwYWNrczsNCisjZW5kaWYgLyogVENQX0ZB Q0sgKi8NCisJCQkJICAgICAgZ290byBkcm9wOw0KKwkJCQkgICAgfQ0KKyNl bmRpZiAvKiBUQ1BfU0FDSyAqLw0KKwkJCQkgIGNhbGxvdXRfc3RvcCh0cC0+ dHRfcmV4bXQpOw0KKwkJCQkgIHRwLT50X3J0dHRpbWUgPSAwOw0KIAkJCQkJ dHAtPnNuZF9ueHQgPSB0aC0+dGhfYWNrOw0KIAkJCQkJdHAtPnNuZF9jd25k ID0gdHAtPnRfbWF4c2VnOw0KIAkJCQkJKHZvaWQpIHRjcF9vdXRwdXQodHAp Ow0KKwkJCQkgIA0KIAkJCQkJdHAtPnNuZF9jd25kID0gdHAtPnNuZF9zc3Ro cmVzaCArDQogCQkJCQkgICAgICAgdHAtPnRfbWF4c2VnICogdHAtPnRfZHVw YWNrczsNCiAJCQkJCWlmIChTRVFfR1Qob254dCwgdHAtPnNuZF9ueHQpKQ0K IAkJCQkJCXRwLT5zbmRfbnh0ID0gb254dDsNCiAJCQkJCWdvdG8gZHJvcDsN CiAJCQkJfSBlbHNlIGlmICh0cC0+dF9kdXBhY2tzID4gdGNwcmV4bXR0aHJl c2gpIHsNCisjaWYgZGVmaW5lZChUQ1BfU0FDSykgJiYgZGVmaW5lZChUQ1Bf RkFDSykNCisJCQkJICAvKiANCisJCQkJICAgKiB3aGlsZSAoYXduZCA8IGN3 bmQpIA0KKwkJCQkgICAqICAgICAgICAgc2VuZHNvbWV0aGluZygpOyANCisJ CQkJICAgKi8NCisJCQkJICBpZiAoIXRwLT5zYWNrX2Rpc2FibGUpIHsNCisJ CQkJICAgIGlmICh0cC0+c25kX2F3bmQgPCB0cC0+c25kX2N3bmQpDQorCQkJ CSAgICAgIHRjcF9vdXRwdXQodHApOw0KKwkJCQkgICAgZ290byBkcm9wOw0K KwkJCQkgIH0NCisjZW5kaWYgLyogVENQX0ZBQ0sgKi8NCiAJCQkJCXRwLT5z bmRfY3duZCArPSB0cC0+dF9tYXhzZWc7DQogCQkJCQkodm9pZCkgdGNwX291 dHB1dCh0cCk7DQogCQkJCQlnb3RvIGRyb3A7DQpAQCAtMTg2MSwxMCArMTk4 Myw1NyBAQA0KIAkJCQl0cC0+dF9kdXBhY2tzID0gMDsNCiAJCQlicmVhazsN CiAJCX0NCisJCQkNCiAJCS8qDQogCQkgKiBJZiB0aGUgY29uZ2VzdGlvbiB3 aW5kb3cgd2FzIGluZmxhdGVkIHRvIGFjY291bnQNCiAJCSAqIGZvciB0aGUg b3RoZXIgc2lkZSdzIGNhY2hlZCBwYWNrZXRzLCByZXRyYWN0IGl0Lg0KKwkJ CSAqIElmIHRoZSBjb25nZXN0aW9uIHdpbmRvdyB3YXMgaW5mbGF0ZWQgdG8g YWNjb3VudA0KKwkJCSAqIGZvciB0aGUgb3RoZXIgc2lkZSdzIGNhY2hlZCBw YWNrZXRzLCByZXRyYWN0IGl0Lg0KIAkJICovDQorI2lmIGRlZmluZWQoVENQ X1NBQ0spDQorCQkJaWYgKCF0cC0+c2Fja19kaXNhYmxlKSB7DQorCQkJICBp ZiAodHAtPnRfZHVwYWNrcyA+PSB0Y3ByZXhtdHRocmVzaCkgew0KKwkJCQkv KiBDaGVjayBmb3IgYSBwYXJ0aWFsIEFDSyAqLw0KKwkJCSAgICBpZiAodGNw X3NhY2tfcGFydGlhbGFjayh0cCwgdGgpKSB7DQorI2lmIGRlZmluZWQoVENQ X1NBQ0spICYmIGRlZmluZWQoVENQX0ZBQ0spDQorCQkJICAgICAgLyogRm9y Y2UgY2FsbCB0byB0Y3Bfb3V0cHV0ICovDQorCQkJICAgICAgaWYgKHRwLT5z bmRfYXduZCA8IHRwLT5zbmRfY3duZCkgDQorCQkJCW5lZWRvdXRwdXQgPSAx Ow0KKyNlbHNlDQorCQkJICAgICAgdHAtPnNuZF9jd25kICs9IHRwLT50X21h eHNlZzsNCisJCQkgICAgICBuZWVkb3V0cHV0ID0gMTsNCisjZW5kaWYgLyog VENQX0ZBQ0sgKi8NCisJCQkgICAgfSBlbHNlIHsNCisJCQkgICAgICAvKiBP dXQgb2YgZmFzdCByZWNvdmVyeSAqLw0KKwkJCSAgICAgIHRwLT5zbmRfY3du ZCA9IHRwLT5zbmRfc3N0aHJlc2g7DQorCQkJICAgICAgaWYgKHRjcF9zZXFf c3VidHJhY3QodHAtPnNuZF9tYXgsIA0KKwkJCQkJCSAgIHRoLT50aF9hY2sp IDwgdHAtPnNuZF9zc3RocmVzaCkNCisJCQkJdHAtPnNuZF9jd25kID0gDQor CQkJCSAgdGNwX3NlcV9zdWJ0cmFjdCh0cC0+c25kX21heCwNCisJCQkJCSAg ICAgICAgICAgdGgtPnRoX2Fjayk7DQorCQkJICAgICAgdHAtPnRfZHVwYWNr cyA9IDA7DQorI2lmIGRlZmluZWQoVENQX1NBQ0spICYmIGRlZmluZWQoVENQ X0ZBQ0spDQorCQkJICAgICAgaWYgKFNFUV9HVCh0aC0+dGhfYWNrLCB0cC0+ c25kX2ZhY2spKQ0KKwkJCQl0cC0+c25kX2ZhY2sgPSB0aC0+dGhfYWNrOw0K KyNlbmRpZiAvKiBUQ1BfRkFDSyAqLw0KKwkJCSAgICB9DQorCQkJICB9IA0K KwkJCX0gZWxzZSB7DQorCQkJICBpZiAodHAtPnRfZHVwYWNrcyA+PSB0Y3By ZXhtdHRocmVzaCAmJiANCisJCQkgICAgICAhdGNwX25ld3Jlbm8odHAsIHRo KSkgew0KKwkJCQkvKiBPdXQgb2YgZmFzdCByZWNvdmVyeSAqLw0KKwkJCSAg ICB0cC0+c25kX2N3bmQgPSB0cC0+c25kX3NzdGhyZXNoOw0KKwkJCSAgICBp ZiAodGNwX3NlcV9zdWJ0cmFjdCh0cC0+c25kX21heCwgdGgtPnRoX2Fjaykg PA0KKwkJCQl0cC0+c25kX3NzdGhyZXNoKQ0KKwkJCSAgICAgIHRwLT5zbmRf Y3duZCA9IA0KKwkJCQl0Y3Bfc2VxX3N1YnRyYWN0KHRwLT5zbmRfbWF4LA0K KwkJCQkJCSB0aC0+dGhfYWNrKTsNCisJCQkgICAgdHAtPnRfZHVwYWNrcyA9 IDA7DQorCQkJICB9DQorCQkJfQ0KKwkJCWlmICh0cC0+dF9kdXBhY2tzIDwg dGNwcmV4bXR0aHJlc2gpDQorCQkJICB0cC0+dF9kdXBhY2tzID0gMDsNCisj ZWxzZSAvKiBlbHNlIG5vIFRDUF9TQUNLICovDQogCQlpZiAodGNwX2RvX25l d3Jlbm8gPT0gMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0 cC0+dF9kdXBhY2tzID49IHRjcHJleG10dGhyZXNoICYmDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0cC0+c25kX2N3bmQgPiB0cC0+c25k X3NzdGhyZXNoKQ0KQEAgLTE4ODUsNiArMjA1NCw4IEBADQogICAgICAgICAg ICAgICAgICAgICAgICAgCXRwLT5zbmRfY3duZCA9IHRwLT5zbmRfc3N0aHJl c2g7DQogICAgICAgICAgICAgICAgICAgICAgICAgdHAtPnRfZHVwYWNrcyA9 IDA7DQogICAgICAgICAgICAgICAgIH0NCisjZW5kaWYNCisJCQkNCiAJCWlm IChTRVFfR1QodGgtPnRoX2FjaywgdHAtPnNuZF9tYXgpKSB7DQogCQkJdGNw c3RhdC50Y3BzX3JjdmFja3Rvb211Y2grKzsNCiAJCQlnb3RvIGRyb3BhZnRl cmFjazsNCkBAIC0xOTgyLDggKzIxNTMsMTQgQEANCiAJCSAqIGluIE5ld1Jl bm8gZmFzdCByZWNvdmVyeSBtb2RlLCBzbyB3ZSBsZWF2ZSB0aGUgY29uZ2Vz dGlvbg0KIAkJICogd2luZG93IGFsb25lLg0KIAkJICovDQorDQorI2lmIGRl ZmluZWQgKFRDUF9TQUNLKQ0KKwkJaWYgKHRwLT50X2R1cGFja3MgPCB0Y3By ZXhtdHRocmVzaCkNCisJCSAgdHAtPnNuZF9jd25kID0gbWluKGN3ICsgaW5j cixUQ1BfTUFYV0lOPDx0cC0+c25kX3NjYWxlKTsNCisjZWxzZQkNCiAJCWlm ICh0Y3BfZG9fbmV3cmVubyA9PSAwIHx8IHRwLT50X2R1cGFja3MgPT0gMCkN CiAJCQl0cC0+c25kX2N3bmQgPSBtaW4oY3cgKyBpbmNyLFRDUF9NQVhXSU48 PHRwLT5zbmRfc2NhbGUpOw0KKyNlbmRpZg0KIAkJfQ0KIAkJaWYgKGFja2Vk ID4gc28tPnNvX3NuZC5zYl9jYykgew0KIAkJCXRwLT5zbmRfd25kIC09IHNv LT5zb19zbmQuc2JfY2M7DQpAQCAtMTk5OCw2ICsyMTc1LDE2IEBADQogCQl0 cC0+c25kX3VuYSA9IHRoLT50aF9hY2s7DQogCQlpZiAoU0VRX0xUKHRwLT5z bmRfbnh0LCB0cC0+c25kX3VuYSkpDQogCQkJdHAtPnNuZF9ueHQgPSB0cC0+ c25kX3VuYTsNCisjaWYgZGVmaW5lZCAoVENQX1NBQ0spICYmIGRlZmluZWQg KFRDUF9GQUNLKQ0KKwkJaWYgKFNFUV9HVCh0cC0+c25kX3VuYSwgdHAtPnNu ZF9mYWNrKSkgew0KKwkJICB0cC0+c25kX2ZhY2sgPSB0cC0+c25kX3VuYTsN CisJCSAgLyogVXBkYXRlIHNuZF9hd25kIGZvciBwYXJ0aWFsIEFDSw0KKwkJ ICAgKiB3aXRob3V0IGFueSBTQUNLIGJsb2Nrcy4NCisJCSAgICovDQorCQkg IHRwLT5zbmRfYXduZCA9IHRjcF9zZXFfc3VidHJhY3QodHAtPnNuZF9ueHQs DQorCQkJCQkJICB0cC0+c25kX2ZhY2spICsgdHAtPnJldHJhbl9kYXRhOw0K KwkJfQ0KKyNlbmRpZg0KIA0KIAkJc3dpdGNoICh0cC0+dF9zdGF0ZSkgew0K IA0KQEAgLTIxOTYsNyArMjM4MywxMCBAQA0KIAkJCXRoZmxhZ3MgPSB0Y3Bf cmVhc3ModHAsIHRoLCAmdGxlbiwgbSk7DQogCQkJdHAtPnRfZmxhZ3MgfD0g VEZfQUNLTk9XOw0KIAkJfQ0KLQ0KKyNpZmRlZiBUQ1BfU0FDSw0KKwkJaWYg KCF0cC0+c2Fja19kaXNhYmxlKQ0KKwkJCXRjcF91cGRhdGVfc2Fja19saXN0 KHRwKTsgDQorI2VuZGlmIA0KIAkJLyoNCiAJCSAqIE5vdGUgdGhlIGFtb3Vu dCBvZiBkYXRhIHRoYXQgcGVlciBoYXMgc2VudCBpbnRvDQogCQkgKiBvdXIg d2luZG93LCBpbiBvcmRlciB0byBlc3RpbWF0ZSB0aGUgc2VuZGVyJ3MNCkBA IC0yMjA4LDYgKzIzOTgsNyBAQA0KIAkJdGhmbGFncyAmPSB+VEhfRklOOw0K IAl9DQogDQorDQogCS8qDQogCSAqIElmIEZJTiBpcyByZWNlaXZlZCBBQ0sg dGhlIEZJTiBhbmQgbGV0IHRoZSB1c2VyIGtub3cNCiAJICogdGhhdCB0aGUg Y29ubmVjdGlvbiBpcyBjbG9zaW5nLg0KQEAgLTI0OTgsMTMgKzI2ODksNDM5 IEBADQogCQkJICAgIChjaGFyICopJnRvLT50b19jY2VjaG8sIHNpemVvZih0 by0+dG9fY2NlY2hvKSk7DQogCQkJTlRPSEwodG8tPnRvX2NjZWNobyk7DQog CQkJYnJlYWs7DQorI2lmZGVmIFRDUF9TQUNLIA0KKwkJY2FzZSBUQ1BPUFRf U0FDS19QRVJNSVRURUQ6DQorCQkJaWYgKHRwLT5zYWNrX2Rpc2FibGUgfHwg b3B0bGVuIT1UQ1BPTEVOX1NBQ0tfUEVSTUlUVEVEKQ0KKwkJCQljb250aW51 ZTsNCisJCQlpZiAodGgtPnRoX2ZsYWdzICYgVEhfU1lOKQ0KKwkJCQkvKiBN VVNUIG9ubHkgYmUgc2V0IG9uIFNZTiAqLw0KKwkJCQl0cC0+dF9mbGFncyB8 PSBURl9TQUNLX1BFUk1JVDsNCisJCQlicmVhazsNCisJCWNhc2UgVENQT1BU X1NBQ0s6DQorCQkJaWYgKHRjcF9zYWNrX29wdGlvbih0cCwgdGgsIGNwLCBv cHRsZW4pKQ0KKwkJCQljb250aW51ZTsNCisJCQlicmVhazsNCisjZW5kaWYg ICAgIA0KIAkJfQ0KIAl9DQogCWlmICh0aC0+dGhfZmxhZ3MgJiBUSF9TWU4p DQogCQl0Y3BfbXNzKHRwLCBtc3MpOwkvKiBzZXRzIHRfbWF4c2VnICovDQog fQ0KIA0KKyNpZiBkZWZpbmVkKFRDUF9TQUNLKQ0KK3VfbG9uZyANCit0Y3Bf c2VxX3N1YnRyYWN0KGEsIGIpDQorCXVfbG9uZyBhLCBiOw0KK3sgDQorCXJl dHVybiAoKGxvbmcpKGEgLSBiKSk7IA0KK30NCisjZW5kaWYNCisNCisNCisN CisjaWZkZWYgVENQX1NBQ0sgDQorLyoNCisgKiBUaGlzIGZ1bmN0aW9uIGlz IGNhbGxlZCB1cG9uIHJlY2VpcHQgb2YgbmV3IHZhbGlkIGRhdGEgKHdoaWxl IG5vdCBpbiBoZWFkZXINCisgKiBwcmVkaWN0aW9uIG1vZGUpLCBhbmQgaXQg dXBkYXRlcyB0aGUgb3JkZXJlZCBsaXN0IG9mIHNhY2tzLiANCisgKi8NCit2 b2lkIA0KK3RjcF91cGRhdGVfc2Fja19saXN0KHRwKQ0KKwlzdHJ1Y3QgdGNw Y2IgKnRwOyANCit7ICAgIA0KKwkvKiANCisJICogRmlyc3QgcmVwb3J0ZWQg YmxvY2sgTVVTVCBiZSB0aGUgbW9zdCByZWNlbnQgb25lLiAgU3Vic2VxdWVu dA0KKwkgKiBibG9ja3MgU0hPVUxEIGJlIGluIHRoZSBvcmRlciBpbiB3aGlj aCB0aGV5IGFycml2ZWQgYXQgdGhlDQorCSAqIHJlY2VpdmVyLiAgVGhlc2Ug dHdvIGNvbmRpdGlvbnMgbWFrZSB0aGUgaW1wbGVtZW50YXRpb24gZnVsbHkN CisJICogY29tcGxpYW50IHdpdGggUkZDIDIwMTguDQorCSAqLyAgICAgDQor CWludCBpLCBqID0gMCwgY291bnQgPSAwLCBsYXN0cG9zID0gLTE7DQorCXN0 cnVjdCBzYWNrYmxrIHNhY2ssIGZpcnN0c2FjaywgdGVtcFtNQVhfU0FDS19C TEtTXTsNCisgICAgDQorCS8qIEZpcnN0IGNsZWFuIHVwIGN1cnJlbnQgbGlz dCBvZiBzYWNrcyAqLw0KKwlmb3IgKGkgPSAwOyBpIDwgdHAtPnJjdl9udW1z YWNrczsgaSsrKSB7DQorCQlzYWNrID0gdHAtPnNhY2tibGtzW2ldOw0KKwkJ aWYgKHNhY2suc3RhcnQgPT0gMCAmJiBzYWNrLmVuZCA9PSAwKSB7DQorCQkJ Y291bnQrKzsgLyogY291bnQgPSBudW1iZXIgb2YgYmxvY2tzIHRvIGJlIGRp c2NhcmRlZCAqLw0KKwkJCWNvbnRpbnVlOw0KKwkJfQ0KKwkJaWYgKFNFUV9M RVEoc2Fjay5lbmQsIHRwLT5yY3Zfbnh0KSkgew0KKwkJCXRwLT5zYWNrYmxr c1tpXS5zdGFydCA9IHRwLT5zYWNrYmxrc1tpXS5lbmQgPSAwOw0KKwkJCWNv dW50Kys7DQorCQl9IGVsc2UgeyANCisJCQl0ZW1wW2pdLnN0YXJ0ID0gdHAt PnNhY2tibGtzW2ldLnN0YXJ0Ow0KKwkJCXRlbXBbaisrXS5lbmQgPSB0cC0+ c2Fja2Jsa3NbaV0uZW5kOw0KKwkJfQ0KKwl9ICAgDQorCXRwLT5yY3ZfbnVt c2Fja3MgLT0gY291bnQ7DQorCWlmICh0cC0+cmN2X251bXNhY2tzID09IDAp IHsgLyogbm8gc2FjayBibG9ja3MgY3VycmVudGx5IChmYXN0IHBhdGgpICov DQorCQl0Y3BfY2xlYW5fc2Fja3JlcG9ydCh0cCk7DQorCQlpZiAoU0VRX0xU KHRwLT5yY3Zfbnh0LCB0cC0+cmN2X2xhc3RzdGFydCkpIHsNCisJCQkvKiA9 PT4gbmVlZCBmaXJzdCBzYWNrIGJsb2NrICovDQorCQkJdHAtPnNhY2tibGtz WzBdLnN0YXJ0ID0gdHAtPnJjdl9sYXN0c3RhcnQ7DQorCQkJdHAtPnNhY2ti bGtzWzBdLmVuZCA9IHRwLT5yY3ZfbGFzdGVuZDsNCisJCQl0cC0+cmN2X251 bXNhY2tzID0gMTsNCisJCX0NCisJCXJldHVybjsNCisJfQ0KKwkvKiBPdGhl cndpc2UsIHNhY2sgYmxvY2tzIGFyZSBhbHJlYWR5IHByZXNlbnQuICovDQor CWZvciAoaSA9IDA7IGkgPCB0cC0+cmN2X251bXNhY2tzOyBpKyspDQorCQl0 cC0+c2Fja2Jsa3NbaV0gPSB0ZW1wW2ldOyAvKiBmaXJzdCBjb3B5IGJhY2sg c2FjayBsaXN0ICovDQorCWlmIChTRVFfR0VRKHRwLT5yY3Zfbnh0LCB0cC0+ cmN2X2xhc3RlbmQpKSANCisJCXJldHVybjsgICAgIC8qIHNhY2sgbGlzdCBy ZW1haW5zIHVuY2hhbmdlZCAqLw0KKwkvKiANCisJICogRnJvbSBoZXJlLCBz ZWdtZW50IGp1c3QgcmVjZWl2ZWQgc2hvdWxkIGJlIChwYXJ0IG9mKSB0aGUg MXN0IHNhY2suDQorCSAqIEdvIHRocm91Z2ggbGlzdCwgcG9zc2libHkgY29h bGVzY2luZyBzYWNrIGJsb2NrIGVudHJpZXMuDQorCSAqLw0KKwlmaXJzdHNh Y2suc3RhcnQgPSB0cC0+cmN2X2xhc3RzdGFydDsNCisJZmlyc3RzYWNrLmVu ZCA9IHRwLT5yY3ZfbGFzdGVuZDsNCisJZm9yIChpID0gMDsgaSA8IHRwLT5y Y3ZfbnVtc2Fja3M7IGkrKykgew0KKwkJc2FjayA9IHRwLT5zYWNrYmxrc1tp XTsNCisJCWlmIChTRVFfTFQoc2Fjay5lbmQsIGZpcnN0c2Fjay5zdGFydCkg fHwNCisJCSAgICBTRVFfR1Qoc2Fjay5zdGFydCwgZmlyc3RzYWNrLmVuZCkp DQorCQkJY29udGludWU7IC8qIG5vIG92ZXJsYXAgKi8NCisJCWlmIChzYWNr LnN0YXJ0ID09IGZpcnN0c2Fjay5zdGFydCAmJiBzYWNrLmVuZCA9PSBmaXJz dHNhY2suZW5kKXsNCisJCQkvKiANCisJCQkgKiBpZGVudGljYWwgYmxvY2s7 IGRlbGV0ZSBpdCBoZXJlIHNpbmNlIHdlIHdpbGwNCisJCQkgKiBtb3ZlIGl0 IHRvIHRoZSBmcm9udCBvZiB0aGUgbGlzdC4NCisJCQkgKi8NCisJCQl0cC0+ c2Fja2Jsa3NbaV0uc3RhcnQgPSB0cC0+c2Fja2Jsa3NbaV0uZW5kID0gMDsN CisJCQlsYXN0cG9zID0gaTsgICAgLyogbGFzdCBwb3NuIHdpdGggYSB6ZXJv IGVudHJ5ICovDQorCQkJY29udGludWU7DQorCQl9DQorCQlpZiAoU0VRX0xF UShzYWNrLnN0YXJ0LCBmaXJzdHNhY2suc3RhcnQpKQ0KKwkJCWZpcnN0c2Fj ay5zdGFydCA9IHNhY2suc3RhcnQ7IC8qIG1lcmdlIGJsb2NrcyAqLw0KKwkJ aWYgKFNFUV9HRVEoc2Fjay5lbmQsIGZpcnN0c2Fjay5lbmQpKQ0KKwkJCWZp cnN0c2Fjay5lbmQgPSBzYWNrLmVuZDsgICAgIC8qIG1lcmdlIGJsb2NrcyAq Lw0KKwkJdHAtPnNhY2tibGtzW2ldLnN0YXJ0ID0gdHAtPnNhY2tibGtzW2ld LmVuZCA9IDA7DQorCQlsYXN0cG9zID0gaTsgICAgLyogbGFzdCBwb3NuIHdp dGggYSB6ZXJvIGVudHJ5ICovDQorCX0NCisJaWYgKGxhc3Rwb3MgIT0gLTEp IHsgICAgLyogYXQgbGVhc3Qgb25lIG1lcmdlICovDQorCQlmb3IgKGkgPSAw LCBqID0gMTsgaSA8IHRwLT5yY3ZfbnVtc2Fja3M7IGkrKykgew0KKwkJCXNh Y2sgPSB0cC0+c2Fja2Jsa3NbaV07DQorCQkJaWYgKHNhY2suc3RhcnQgPT0g MCAmJiBzYWNrLmVuZCA9PSAwKQ0KKwkJCQljb250aW51ZTsNCisJCQl0ZW1w W2orK10gPSBzYWNrOw0KKwkJfQ0KKwkJdHAtPnJjdl9udW1zYWNrcyA9IGo7 IC8qIGluY2x1ZGluZyBmaXJzdCBibGsgKGFkZGVkIGxhdGVyKSAqLw0KKwkJ Zm9yIChpID0gMTsgaSA8IHRwLT5yY3ZfbnVtc2Fja3M7IGkrKykgLyogbm93 IGNvcHkgYmFjayAqLw0KKwkJCXRwLT5zYWNrYmxrc1tpXSA9IHRlbXBbaV07 DQorCX0gZWxzZSB7ICAgICAgICAvKiBubyBtZXJnZXMgLS0gc2hpZnQgc2Fj a3MgYnkgMSAqLw0KKwkJaWYgKHRwLT5yY3ZfbnVtc2Fja3MgPCBNQVhfU0FD S19CTEtTKQ0KKwkJCXRwLT5yY3ZfbnVtc2Fja3MrKzsNCisJCWZvciAoaSA9 IHRwLT5yY3ZfbnVtc2Fja3MtMTsgaSA+IDA7IGktLSkNCisJCQl0cC0+c2Fj a2Jsa3NbaV0gPSB0cC0+c2Fja2Jsa3NbaS0xXTsNCisJfQ0KKwl0cC0+c2Fj a2Jsa3NbMF0gPSBmaXJzdHNhY2s7DQorCXJldHVybjsNCit9ICANCisNCiAv Kg0KKyAqIFByb2Nlc3MgdGhlIFRDUCBTQUNLIG9wdGlvbi4gIFJldHVybnMg MSBpZiB0Y3BfZG9vcHRpb25zKCkgc2hvdWxkIGNvbnRpbnVlLA0KKyAqIGFu ZCAwIG90aGVyd2lzZSwgaWYgdGhlIG9wdGlvbiB3YXMgZmluZS4gIHRwLT5z bmRfaG9sZXMgaXMgYW4gb3JkZXJlZCBsaXN0DQorICogb2YgaG9sZXMgKG9s ZGVzdCB0byBuZXdlc3QsIGluIHRlcm1zIG9mIHRoZSBzZXF1ZW5jZSBzcGFj ZSkuICANCisgKi8gICAgICAgICAgICAgDQoraW50DQordGNwX3NhY2tfb3B0 aW9uKHRwLCB0aCwgY3AsIG9wdGxlbikNCisJc3RydWN0IHRjcGNiICp0cDsN CisJc3RydWN0IHRjcGhkciAqdGg7DQorCXVfY2hhciAqY3A7DQorCWludCAg ICBvcHRsZW47DQoreyAgICAgICANCisJaW50IHRtcF9vbGVuOw0KKwl1X2No YXIgKnRtcF9jcDsNCisJc3RydWN0IHNhY2tob2xlICpjdXIsICpwLCAqdGVt cDsNCisgICANCisJaWYgKHRwLT5zYWNrX2Rpc2FibGUpDQorCQlyZXR1cm4g MTsNCisgICAgICAgICAgIA0KKwkvKiBOb3RlOiBUQ1BPTEVOX1NBQ0sgbXVz dCBiZSAyKnNpemVvZih0Y3Bfc2VxKSAqLw0KKwlpZiAob3B0bGVuIDw9IDIg fHwgKG9wdGxlbiAtIDIpICUgVENQT0xFTl9TQUNLICE9IDApDQorCQlyZXR1 cm4gMTsNCisJdG1wX2NwID0gY3AgKyAyOw0KKwl0bXBfb2xlbiA9IG9wdGxl biAtIDI7DQorCWlmICh0cC0+c25kX251bWhvbGVzIDwgMCkNCisJCXRwLT5z bmRfbnVtaG9sZXMgPSAwOw0KKwlpZiAodHAtPnRfbWF4c2VnID09IDApDQor CQlwYW5pYygidGNwX3NhY2tfb3B0aW9uIik7IC8qIFNob3VsZCBuZXZlciBo YXBwZW4gKi8NCisJd2hpbGUgKHRtcF9vbGVuID4gMCkgew0KKwkJc3RydWN0 IHNhY2tibGsgc2FjazsNCisgICAgICAgICAgICANCisJCWJjb3B5KChjaGFy ICopIHRtcF9jcCwgKGNoYXIgKikgJihzYWNrLnN0YXJ0KSwgc2l6ZW9mKHRj cF9zZXEpKTsNCisJCU5UT0hMKHNhY2suc3RhcnQpOyANCisJCWJjb3B5KChj aGFyICopIHRtcF9jcCArIHNpemVvZih0Y3Bfc2VxKSwNCisJCSAgICAoY2hh ciAqKSAmKHNhY2suZW5kKSwgc2l6ZW9mKHRjcF9zZXEpKTsNCisJCU5UT0hM KHNhY2suZW5kKTsNCisJCXRtcF9vbGVuIC09IFRDUE9MRU5fU0FDSzsNCisJ CXRtcF9jcCArPSBUQ1BPTEVOX1NBQ0s7DQorCQlpZiAoU0VRX0xFUShzYWNr LmVuZCwgc2Fjay5zdGFydCkpDQorCQkJY29udGludWU7IC8qIGJhZCBTQUNL IGZpZWxkcyAqLw0KKwkJaWYgKFNFUV9MRVEoc2Fjay5lbmQsIHRwLT5zbmRf dW5hKSkgDQorCQkJY29udGludWU7IC8qIG9sZCBibG9jayAqLw0KKyNpZiBk ZWZpbmVkKFRDUF9TQUNLKSAmJiBkZWZpbmVkKFRDUF9GQUNLKQ0KKwkJLyog VXBkYXRlcyBzbmRfZmFjay4gICovDQorCQlpZiAoU0VRX0dFUShzYWNrLmVu ZCwgdHAtPnNuZF9mYWNrKSkNCisJCQl0cC0+c25kX2ZhY2sgPSBzYWNrLmVu ZDsNCisjZW5kaWYgLyogVENQX0ZBQ0sgKi8NCisJCWlmIChTRVFfR1QodGgt PnRoX2FjaywgdHAtPnNuZF91bmEpKSB7DQorCQkJaWYgKFNFUV9MVChzYWNr LnN0YXJ0LCB0aC0+dGhfYWNrKSkNCisJCQkJY29udGludWU7DQorCQl9IGVs c2Ugew0KKwkJCWlmIChTRVFfTFQoc2Fjay5zdGFydCwgdHAtPnNuZF91bmEp KQ0KKwkJCQljb250aW51ZTsNCisJCX0NCisJCWlmIChTRVFfR1Qoc2Fjay5l bmQsIHRwLT5zbmRfbWF4KSkNCisJCQljb250aW51ZTsNCisJCWlmICh0cC0+ c25kX2hvbGVzID09IDApIHsgLyogZmlyc3QgaG9sZSAqLw0KKwkJCXRwLT5z bmRfaG9sZXMgPSAoc3RydWN0IHNhY2tob2xlICopDQorCQkJICAgIG1hbGxv YyhzaXplb2Yoc3RydWN0IHNhY2tob2xlKSwgTV9QQ0IsIE1fTk9XQUlUKTsN CisJCQlpZiAodHAtPnNuZF9ob2xlcyA9PSBOVUxMKSB7DQorCQkJCS8qIEVO T0JVRlMsIHNvIGlnbm9yZSBTQUNLZWQgYmxvY2sgZm9yIG5vdyovDQorCQkJ CWNvbnRpbnVlOyAgDQorCQkJfQ0KKwkJCWN1ciA9IHRwLT5zbmRfaG9sZXM7 DQorCQkJY3VyLT5zdGFydCA9IHRoLT50aF9hY2s7DQorCQkJY3VyLT5lbmQg PSBzYWNrLnN0YXJ0Ow0KKwkJCWN1ci0+cnhtaXQgPSBjdXItPnN0YXJ0Ow0K KwkJCWN1ci0+bmV4dCA9IDA7DQorCQkJdHAtPnNuZF9udW1ob2xlcyA9IDE7 DQorCQkJdHAtPnJjdl9sYXN0c2FjayA9IHNhY2suZW5kOw0KKwkJCS8qIA0K KwkJCSAqIGR1cHMgaXMgYXQgbGVhc3Qgb25lLiAgSWYgbW9yZSBkYXRhIGhh cyBiZWVuIA0KKwkJCSAqIFNBQ0tlZCwgaXQgY2FuIGJlIGdyZWF0ZXIgdGhh biBvbmUuDQorCQkJICovDQorCQkJY3VyLT5kdXBzID0gbWluKHRjcHJleG10 dGhyZXNoLCANCisJCQkgICAgKChzYWNrLmVuZCAtIGN1ci0+ZW5kKS90cC0+ dF9tYXhzZWcpKTsNCisJCQlpZiAoY3VyLT5kdXBzIDwgMSkNCisJCQkJY3Vy LT5kdXBzID0gMTsNCisJCQljb250aW51ZTsgLyogd2l0aCBuZXh0IHNhY2sg YmxvY2sgKi8NCisJCX0NCisJCS8qIEdvIHRocnUgbGlzdCBvZiBob2xlczog IHAgPSBwcmV2aW91cywgIGN1ciA9IGN1cnJlbnQgKi8NCisJCXAgPSBjdXIg PSB0cC0+c25kX2hvbGVzOw0KKwkJd2hpbGUgKGN1cikgew0KKwkJCWlmIChT RVFfTEVRKHNhY2suZW5kLCBjdXItPnN0YXJ0KSkgDQorCQkJCS8qIFNBQ0tz IGRhdGEgYmVmb3JlIHRoZSBjdXJyZW50IGhvbGUgKi8gDQorCQkJCWJyZWFr OyAvKiBubyB1c2UgZ29pbmcgdGhyb3VnaCBtb3JlIGhvbGVzICovDQorCQkJ aWYgKFNFUV9HRVEoc2Fjay5zdGFydCwgY3VyLT5lbmQpKSB7DQorCQkJCS8q IFNBQ0tzIGRhdGEgYmV5b25kIHRoZSBjdXJyZW50IGhvbGUgKi8NCisJCQkJ Y3VyLT5kdXBzKys7DQorCQkJCWlmICggKChzYWNrLmVuZCAtIGN1ci0+ZW5k KS90cC0+dF9tYXhzZWcpID49DQorCQkJCQl0Y3ByZXhtdHRocmVzaCkNCisJ CQkJCWN1ci0+ZHVwcyA9IHRjcHJleG10dGhyZXNoOw0KKwkJCQlwID0gY3Vy Ow0KKwkJCQljdXIgPSBjdXItPm5leHQ7DQorCQkJCWNvbnRpbnVlOw0KKwkJ CX0NCisJCQlpZiAoU0VRX0xFUShzYWNrLnN0YXJ0LCBjdXItPnN0YXJ0KSkg ew0KKwkJCQkvKiBEYXRhIGFja3MgYXQgbGVhc3QgdGhlIGJlZ2lubmluZyBv ZiBob2xlICovDQorI2lmIGRlZmluZWQoVENQX1NBQ0spICYmIGRlZmluZWQo VENQX0ZBQ0spDQorCQkJCWlmIChTRVFfR1Qoc2Fjay5lbmQsIGN1ci0+cnht aXQpKQ0KKwkJCQkJdHAtPnJldHJhbl9kYXRhIC09IA0KKwkJCQkgICAgCSAg ICB0Y3Bfc2VxX3N1YnRyYWN0KGN1ci0+cnhtaXQsIA0KKwkJCQkJICAgIGN1 ci0+c3RhcnQpOw0KKwkJCQllbHNlDQorCQkJCQl0cC0+cmV0cmFuX2RhdGEg LT0NCisJCQkJCSAgICB0Y3Bfc2VxX3N1YnRyYWN0KHNhY2suZW5kLCANCisJ CQkJCSAgICBjdXItPnN0YXJ0KTsNCisjZW5kaWYgLyogVENQX0ZBQ0sgKi8N CisJCQkJaWYgKFNFUV9HRVEoc2Fjay5lbmQsY3VyLT5lbmQpKXsNCisJCQkJ CS8qIEFja3MgZW50aXJlIGhvbGUsIHNvIGRlbGV0ZSBob2xlICovDQorCQkJ CQlpZiAocCAhPSBjdXIpIHsNCisJCQkJCQlwLT5uZXh0ID0gY3VyLT5uZXh0 Ow0KKwkJCQkJCWZyZWUoY3VyLCBNX1BDQik7DQorCQkJCQkJY3VyID0gcC0+ bmV4dDsNCisJCQkJCX0gZWxzZSB7DQorCQkJCQkJY3VyPWN1ci0+bmV4dDsN CisJCQkJCQlmcmVlKHAsIE1fUENCKTsNCisJCQkJCQlwID0gY3VyOw0KKwkJ CQkJCXRwLT5zbmRfaG9sZXMgPSBwOw0KKwkJCQkJfQ0KKwkJCQkJdHAtPnNu ZF9udW1ob2xlcy0tOw0KKwkJCQkJY29udGludWU7DQorCQkJCX0NCisJCQkJ Lyogb3RoZXJ3aXNlLCBtb3ZlIHN0YXJ0IG9mIGhvbGUgZm9yd2FyZCAqLw0K KwkJCQljdXItPnN0YXJ0ID0gc2Fjay5lbmQ7DQorCQkJCWN1ci0+cnhtaXQg PSBtYXggKGN1ci0+cnhtaXQsIGN1ci0+c3RhcnQpOw0KKwkJCQlwID0gY3Vy Ow0KKwkJCQljdXIgPSBjdXItPm5leHQ7DQorCQkJCWNvbnRpbnVlOw0KKwkJ CX0NCisJCQkvKiBtb3ZlIGVuZCBvZiBob2xlIGJhY2t3YXJkICovDQorCQkJ aWYgKFNFUV9HRVEoc2Fjay5lbmQsIGN1ci0+ZW5kKSkgew0KKyNpZiBkZWZp bmVkKFRDUF9TQUNLKSAmJiBkZWZpbmVkKFRDUF9GQUNLKQ0KKwkJCQlpZiAo U0VRX0dUKGN1ci0+cnhtaXQsIHNhY2suc3RhcnQpKSANCisJCQkJCXRwLT5y ZXRyYW5fZGF0YSAtPSANCisJCQkJCSAgICB0Y3Bfc2VxX3N1YnRyYWN0KGN1 ci0+cnhtaXQsIA0KKwkJCQkJICAgIHNhY2suc3RhcnQpOw0KKyNlbmRpZiAv KiBUQ1BfRkFDSyAqLw0KKwkJCQljdXItPmVuZCA9IHNhY2suc3RhcnQ7DQor CQkJCWN1ci0+cnhtaXQgPSBtaW4gKGN1ci0+cnhtaXQsIGN1ci0+ZW5kKTsN CisJCQkJY3VyLT5kdXBzKys7DQorCQkJCWlmICggKChzYWNrLmVuZCAtIGN1 ci0+ZW5kKS90cC0+dF9tYXhzZWcpID49DQorCQkJCQl0Y3ByZXhtdHRocmVz aCkNCisJCQkJCWN1ci0+ZHVwcyA9IHRjcHJleG10dGhyZXNoOw0KKwkJCQlw ID0gY3VyOw0KKwkJCQljdXIgPSBjdXItPm5leHQ7DQorCQkJCWNvbnRpbnVl Ow0KKwkJCX0NCisJCQlpZiAoU0VRX0xUKGN1ci0+c3RhcnQsIHNhY2suc3Rh cnQpICYmDQorCQkJICAgIFNFUV9HVChjdXItPmVuZCwgc2Fjay5lbmQpKSB7 DQorCQkJCS8qIA0KKwkJCQkgKiBBQ0tzIHNvbWUgZGF0YSBpbiBtaWRkbGUg b2YgYSBob2xlOyBuZWVkIHRvIA0KKwkJCQkgKiBzcGxpdCBjdXJyZW50IGhv bGUNCisJCQkJICovDQorCQkJCXRlbXAgPSAoc3RydWN0IHNhY2tob2xlICop bWFsbG9jKHNpemVvZigqdGVtcCksDQorCQkJCSAgICBNX1BDQixNX05PV0FJ VCk7DQorCQkJCWlmICh0ZW1wID09IE5VTEwpIA0KKwkJCQkJY29udGludWU7 IC8qIEVOT0JVRlMgKi8NCisjaWYgZGVmaW5lZChUQ1BfU0FDSykgJiYgZGVm aW5lZChUQ1BfRkFDSykNCisJCQkJaWYgKFNFUV9HVChjdXItPnJ4bWl0LCBz YWNrLmVuZCkpIA0KKwkJCQkJdHAtPnJldHJhbl9kYXRhIC09IA0KKwkJCQkJ ICAgIHRjcF9zZXFfc3VidHJhY3Qoc2Fjay5lbmQsIA0KKwkJCQkJICAgIHNh Y2suc3RhcnQpOw0KKwkJCQllbHNlIGlmIChTRVFfR1QoY3VyLT5yeG1pdCwg c2Fjay5zdGFydCkpDQorCQkJCQl0cC0+cmV0cmFuX2RhdGEgLT0gDQorCQkJ CQkgICAgdGNwX3NlcV9zdWJ0cmFjdChjdXItPnJ4bWl0LCANCisJCQkJCSAg ICBzYWNrLnN0YXJ0KTsNCisjZW5kaWYgLyogVENQX0ZBQ0sgKi8NCisJCQkJ dGVtcC0+bmV4dCA9IGN1ci0+bmV4dDsNCisJCQkJdGVtcC0+c3RhcnQgPSBz YWNrLmVuZDsNCisJCQkJdGVtcC0+ZW5kID0gY3VyLT5lbmQ7DQorCQkJCXRl bXAtPmR1cHMgPSBjdXItPmR1cHM7DQorCQkJCXRlbXAtPnJ4bWl0ID0gbWF4 IChjdXItPnJ4bWl0LCB0ZW1wLT5zdGFydCk7DQorCQkJCWN1ci0+ZW5kID0g c2Fjay5zdGFydDsNCisJCQkJY3VyLT5yeG1pdCA9IG1pbiAoY3VyLT5yeG1p dCwgY3VyLT5lbmQpOw0KKwkJCQljdXItPmR1cHMrKzsNCisJCQkJaWYgKCAo KHNhY2suZW5kIC0gY3VyLT5lbmQpL3RwLT50X21heHNlZykgPj0NCisJCQkJ CXRjcHJleG10dGhyZXNoKQ0KKwkJCQkJY3VyLT5kdXBzID0gdGNwcmV4bXR0 aHJlc2g7DQorCQkJCWN1ci0+bmV4dCA9IHRlbXA7DQorCQkJCXAgPSB0ZW1w Ow0KKwkJCQljdXIgPSBwLT5uZXh0Ow0KKwkJCQl0cC0+c25kX251bWhvbGVz Kys7DQorCQkJfQ0KKwkJfQ0KKwkJLyogQXQgdGhpcyBwb2ludCwgcCBwb2lu dHMgdG8gdGhlIGxhc3QgaG9sZSBvbiB0aGUgbGlzdCAqLw0KKwkJaWYgKFNF UV9MVCh0cC0+cmN2X2xhc3RzYWNrLCBzYWNrLnN0YXJ0KSkgew0KKwkJCS8q DQorCQkJICogTmVlZCB0byBhcHBlbmQgbmV3IGhvbGUgYXQgZW5kLg0KKwkJ CSAqIExhc3QgaG9sZSBpcyBwIChhbmQgaXQncyBub3QgTlVMTCkuDQorCQkJ ICovDQorCQkJdGVtcCA9IChzdHJ1Y3Qgc2Fja2hvbGUgKikgbWFsbG9jKHNp emVvZigqdGVtcCksDQorCQkJICAgIE1fUENCLCBNX05PV0FJVCk7DQorCQkJ aWYgKHRlbXAgPT0gTlVMTCkgDQorCQkJCWNvbnRpbnVlOyAvKiBFTk9CVUZT ICovDQorCQkJdGVtcC0+c3RhcnQgPSB0cC0+cmN2X2xhc3RzYWNrOw0KKwkJ CXRlbXAtPmVuZCA9IHNhY2suc3RhcnQ7DQorCQkJdGVtcC0+ZHVwcyA9IG1p bih0Y3ByZXhtdHRocmVzaCwgDQorCQkJICAgICgoc2Fjay5lbmQgLSBzYWNr LnN0YXJ0KS90cC0+dF9tYXhzZWcpKTsNCisJCQlpZiAodGVtcC0+ZHVwcyA8 IDEpDQorCQkJCXRlbXAtPmR1cHMgPSAxOw0KKwkJCXRlbXAtPnJ4bWl0ID0g dGVtcC0+c3RhcnQ7DQorCQkJdGVtcC0+bmV4dCA9IDA7DQorCQkJcC0+bmV4 dCA9IHRlbXA7DQorCQkJdHAtPnJjdl9sYXN0c2FjayA9IHNhY2suZW5kOw0K KwkJCXRwLT5zbmRfbnVtaG9sZXMrKzsNCisJCX0NCisJfQ0KKyNpZiBkZWZp bmVkKFRDUF9TQUNLKSAmJiBkZWZpbmVkKFRDUF9GQUNLKQ0KKwkvKiANCisJ ICogVXBkYXRlIHJldHJhbl9kYXRhIGFuZCBzbmRfYXduZC4gIEdvIHRocm91 Z2ggdGhlIGxpc3Qgb2YgDQorCSAqIGhvbGVzLiAgIEluY3JlbWVudCByZXRy YW5fZGF0YSBieSAoaG9sZS0+cnhtaXQgLSBob2xlLT5zdGFydCkuDQorCSAq Lw0KKwl0cC0+cmV0cmFuX2RhdGEgPSAwOw0KKwljdXIgPSB0cC0+c25kX2hv bGVzOw0KKwl3aGlsZSAoY3VyKSB7DQorCQl0cC0+cmV0cmFuX2RhdGEgKz0g Y3VyLT5yeG1pdCAtIGN1ci0+c3RhcnQ7DQorCQljdXIgPSBjdXItPm5leHQ7 DQorCX0NCisJdHAtPnNuZF9hd25kID0gdGNwX3NlcV9zdWJ0cmFjdCh0cC0+ c25kX254dCwgdHAtPnNuZF9mYWNrKSArIA0KKwkgICAgdHAtPnJldHJhbl9k YXRhOw0KKyNlbmRpZiAvKiBUQ1BfRkFDSyAqLw0KKw0KKwlyZXR1cm4gMDsN Cit9ICAgDQorDQorLyoNCisgKiBEZWxldGUgc3RhbGUgKGkuZSwgY3VtdWxh dGl2ZWx5IGFjaydkKSBob2xlcy4gIEhvbGUgaXMgZGVsZXRlZCBvbmx5IGlm DQorICogaXQgaXMgY29tcGxldGVseSBhY2tlZDsgb3RoZXJ3aXNlLCB0Y3Bf c2Fja19vcHRpb24oKSwgY2FsbGVkIGZyb20gDQorICogdGNwX2Rvb3B0aW9u cygpLCB3aWxsIGZpeCB1cCB0aGUgaG9sZS4NCisgKi8NCit2b2lkDQordGNw X2RlbF9zYWNraG9sZXModHAsIHRoKQ0KKwlzdHJ1Y3QgdGNwY2IgKnRwOw0K KwlzdHJ1Y3QgdGNwaGRyICp0aDsNCit7DQorCWlmICghdHAtPnNhY2tfZGlz YWJsZSAmJiB0cC0+dF9zdGF0ZSAhPSBUQ1BTX0xJU1RFTikgew0KKwkJLyog bWF4IGJlY2F1c2UgdGhpcyBjb3VsZCBiZSBhbiBvbGRlciBhY2sganVzdCBh cnJpdmVkICovDQorCQl0Y3Bfc2VxIGxhc3RhY2sgPSBTRVFfR1QodGgtPnRo X2FjaywgdHAtPnNuZF91bmEpID8NCisJCQl0aC0+dGhfYWNrIDogdHAtPnNu ZF91bmE7DQorCQlzdHJ1Y3Qgc2Fja2hvbGUgKmN1ciA9IHRwLT5zbmRfaG9s ZXM7DQorCQlzdHJ1Y3Qgc2Fja2hvbGUgKnByZXYgPSBjdXI7DQorCQl3aGls ZSAoY3VyKQ0KKwkJCWlmIChTRVFfTEVRKGN1ci0+ZW5kLCBsYXN0YWNrKSkg ew0KKwkJCQljdXIgPSBjdXItPm5leHQ7DQorCQkJCWZyZWUocHJldiwgTV9Q Q0IpOw0KKwkJCQlwcmV2ID0gY3VyOw0KKwkJCQl0cC0+c25kX251bWhvbGVz LS07DQorCQkJfSBlbHNlIGlmIChTRVFfTFQoY3VyLT5zdGFydCwgbGFzdGFj aykpIHsNCisJCQkJY3VyLT5zdGFydCA9IGxhc3RhY2s7DQorCQkJCWlmIChT RVFfTFQoY3VyLT5yeG1pdCwgY3VyLT5zdGFydCkpDQorCQkJCQljdXItPnJ4 bWl0ID0gY3VyLT5zdGFydDsNCisJCQkJYnJlYWs7DQorCQkJfSBlbHNlDQor CQkJCWJyZWFrOw0KKwkJdHAtPnNuZF9ob2xlcyA9IGN1cjsNCisJfQ0KK30N CisNCisvKiANCisgKiBEZWxldGUgYWxsIHJlY2VpdmVyLXNpZGUgU0FDSyBp bmZvcm1hdGlvbi4NCisgKi8NCit2b2lkDQordGNwX2NsZWFuX3NhY2tyZXBv cnQodHApDQorCXN0cnVjdCB0Y3BjYiAqdHA7DQorew0KKwlpbnQgaTsNCisN CisJdHAtPnJjdl9udW1zYWNrcyA9IDA7DQorCWZvciAoaSA9IDA7IGkgPCBN QVhfU0FDS19CTEtTOyBpKyspDQorCQl0cC0+c2Fja2Jsa3NbaV0uc3RhcnQg PSB0cC0+c2Fja2Jsa3NbaV0uZW5kPTA7DQorDQorfQ0KKw0KKy8qIA0KKyAq IENoZWNrcyBmb3IgcGFydGlhbCBhY2suICBJZiBwYXJ0aWFsIGFjayBhcnJp dmVzLCB0dXJuIG9mZiByZXRyYW5zbWlzc2lvbg0KKyAqIHRpbWVyLCBkZWZs YXRlIHRoZSB3aW5kb3csIGRvIG5vdCBjbGVhciB0cC0+dF9kdXBhY2tzLCBh bmQgcmV0dXJuIDEuDQorICogSWYgdGhlIGFjayBhZHZhbmNlcyBhdCBsZWFz dCB0byB0cC0+c25kX2xhc3QsIHJldHVybiAwLg0KKyAqLw0KK2ludA0KK3Rj cF9zYWNrX3BhcnRpYWxhY2sodHAsIHRoKQ0KKwlzdHJ1Y3QgdGNwY2IgKnRw Ow0KKwlzdHJ1Y3QgdGNwaGRyICp0aDsNCit7DQorCWlmIChTRVFfTFQodGgt PnRoX2FjaywgdHAtPnNuZF9sYXN0KSkgew0KKwkJLyogVHVybiBvZmYgcmV0 eC4gdGltZXIgKHdpbGwgc3RhcnQgYWdhaW4gbmV4dCBzZWdtZW50KSAqLw0K KyAgICAgICAgICAgICAgY2FsbG91dF9zdG9wKHRwLT50dF9yZXhtdCk7DQor CSAgICAgIHRwLT50X3J0dHRpbWUgPSAwOw0KKyNpZm5kZWYgVENQX0ZBQ0sN CisJCS8qIA0KKwkJICogUGFydGlhbCB3aW5kb3cgZGVmbGF0aW9uLiAgVGhp cyBzdGF0ZW1lbnQgcmVsaWVzIG9uIHRoZSANCisJCSAqIGZhY3QgdGhhdCB0 cC0+c25kX3VuYSBoYXMgbm90IGJlZW4gdXBkYXRlZCB5ZXQuICBJbiBGQUNL DQorCQkgKiBob2xkIHNuZF9jd25kIGNvbnN0YW50IGR1cmluZyBmYXN0IHJl Y292ZXJ5Lg0KKwkJICovDQorCQlpZiAodHAtPnNuZF9jd25kID4gKHRoLT50 aF9hY2sgLSB0cC0+c25kX3VuYSkpIHsNCisJCQl0cC0+c25kX2N3bmQgLT0g dGgtPnRoX2FjayAtIHRwLT5zbmRfdW5hOw0KKwkJCXRwLT5zbmRfY3duZCAr PSB0cC0+dF9tYXhzZWc7DQorCQl9IGVsc2UNCisJCQl0cC0+c25kX2N3bmQg PSB0cC0+dF9tYXhzZWc7DQorI2VuZGlmDQorCQlyZXR1cm4gMTsNCisJfQ0K KwlyZXR1cm4gMDsNCit9DQorI2VuZGlmIFRDUF9TQUNLDQorDQorLyoNCiAg KiBQdWxsIG91dCBvZiBiYW5kIGJ5dGUgb3V0IG9mIGEgc2VnbWVudCBzbw0K ICAqIGl0IGRvZXNuJ3QgYXBwZWFyIGluIHRoZSB1c2VyJ3MgZGF0YSBxdWV1 ZS4NCiAgKiBJdCBpcyBzdGlsbCByZWZsZWN0ZWQgaW4gdGhlIHNlZ21lbnQg bGVuZ3RoIGZvcg0KQEAgLTI5MDksNyArMzUyNiwxMiBAQA0KIAlzdHJ1Y3Qg dGNwY2IgKnRwOw0KIAlzdHJ1Y3QgdGNwaGRyICp0aDsNCiB7DQorDQorI2lm IGRlZmluZWQgKFRDUF9TQUNLKQ0KK2lmIChTRVFfTFQodGgtPnRoX2Fjaywg dHAtPnNuZF9sYXN0KSkgew0KKyNlbHNlDQogCWlmIChTRVFfTFQodGgtPnRo X2FjaywgdHAtPnNuZF9yZWNvdmVyKSkgew0KKyNlbmRpZg0KIAkJdGNwX3Nl cSBvbnh0ID0gdHAtPnNuZF9ueHQ7DQogCQl1X2xvbmcgIG9jd25kID0gdHAt PnNuZF9jd25kOw0KIA0KSW5kZXg6IHRjcF9vdXRwdXQuYw0KPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9ob21lL25jdnMvc3JjL3N5cy9u ZXRpbmV0L3RjcF9vdXRwdXQuYyx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEu NTINCmRpZmYgLXUgLWQgLWIgLXcgLXUgLWQgLXIxLjUyIHRjcF9vdXRwdXQu Yw0KLS0tIHRjcF9vdXRwdXQuYwkyMDAxLzA2LzIzIDAzOjIxOjQ2CTEuNTIN CisrKyB0Y3Bfb3V0cHV0LmMJMjAwMS8wOC8yMiAyMzoxMToyMQ0KQEAgLTk4 LDYgKzk4LDEwNiBAQA0KIGludCAgICAgdGNwX2RvX25ld3Jlbm8gPSAxOw0K IFNZU0NUTF9JTlQoX25ldF9pbmV0X3RjcCwgT0lEX0FVVE8sIG5ld3Jlbm8s IENUTEZMQUdfUlcsICZ0Y3BfZG9fbmV3cmVubywNCiAgICAgICAgIDAsICJF bmFibGUgTmV3UmVubyBBbGdvcml0aG1zIik7DQorDQorI2lmZGVmIFRDUF9T QUNLDQorZXh0ZXJuIGludCB0Y3ByZXhtdHRocmVzaDsNCisjZW5kaWYNCisN CisjaWZkZWYgVENQX1NBQ0sNCisjaWZkZWYgVENQX1NBQ0tfREVCVUcNCit2 b2lkDQordGNwX3ByaW50X2hvbGVzKHRwKQ0KK3N0cnVjdCB0Y3BjYiAqdHA7 DQorew0KKwlzdHJ1Y3Qgc2Fja2hvbGUgKnAgPSB0cC0+c25kX2hvbGVzOw0K KwlpZiAocCA9PSAwKQ0KKwkJcmV0dXJuOw0KKwlwcmludGYoIkhvbGUgcmVw b3J0OiBzdGFydC0tZW5kIGR1cHMgcnhtaXRcbiIpOw0KKwl3aGlsZSAocCkg ew0KKwkJcHJpbnRmKCIlZC0tJWQgZCAlZCByICVkXG4iLCAgcC0+c3RhcnQs IHAtPmVuZCwgcC0+ZHVwcywNCisgICAgICAgICAgICAgICAgICAgIHAtPnJ4 bWl0KTsNCisJCXAgPSBwLT5uZXh0Ow0KKwl9DQorCXByaW50ZigiXG4iKTsN Cit9DQorI2VuZGlmIC8qIFRDUF9TQUNLX0RFQlVHICovDQorDQorLyoNCisg KiBSZXR1cm5zIHBvaW50ZXIgdG8gYSBzYWNraG9sZSBpZiB0aGVyZSBhcmUg YW55IHBlbmRpbmcgcmV0cmFuc21pc3Npb25zOw0KKyAqIE5VTEwgb3RoZXJ3 aXNlLg0KKyAqLw0KK3N0cnVjdCBzYWNraG9sZSAqDQordGNwX3NhY2tfb3V0 cHV0KHRwKQ0KK3JlZ2lzdGVyIHN0cnVjdCB0Y3BjYiAqdHA7DQorew0KKwlz dHJ1Y3Qgc2Fja2hvbGUgKnA7DQorCWlmICh0cC0+c2Fja19kaXNhYmxlKQ0K KwkJcmV0dXJuIDA7DQorCXAgPSB0cC0+c25kX2hvbGVzOw0KKwl3aGlsZSAo cCkgew0KKyNpZm5kZWYgVENQX0ZBQ0sNCisJCWlmIChwLT5kdXBzID49IHRj cHJleG10dGhyZXNoICYmIFNFUV9MVChwLT5yeG1pdCwgcC0+ZW5kKSkgew0K KyNlbHNlDQorCQkvKiBJbiBGQUNLLCBpZiBwLT5kdXBzIGlzIGxlc3MgdGhh biB0Y3ByZXhtdHRocmVzaCwgYnV0DQorCQkgKiBzbmRfZmFjayBhZHZhbmNl cyBtb3JlIHRoYW4gdGNwcmV4dG10dGhyZXNoICogdHAtPnRfbWF4c2VnLA0K KwkJICogdGNwX2lucHV0KCkgd2lsbCB0cnkgZmFzdCByZXRyYW5zbWl0LiBU aGlzIGZvcmNlcyBvdXRwdXQuDQorCQkgKi8NCisJCWlmICgocC0+ZHVwcyA+ PSB0Y3ByZXhtdHRocmVzaCB8fA0KKwkJICAgICB0cC0+dF9kdXBhY2tzID09 IHRjcHJleG10dGhyZXNoKSAmJg0KKwkJICAgIFNFUV9MVChwLT5yeG1pdCwg cC0+ZW5kKSkgew0KKyNlbmRpZiAvKiBUQ1BfRkFDSyAqLw0KKwkJCWlmIChT RVFfTFQocC0+cnhtaXQsIHRwLT5zbmRfdW5hKSkgey8qIG9sZCBTQUNLIGhv bGUgKi8NCisJCQkJcCA9IHAtPm5leHQ7DQorCQkJCWNvbnRpbnVlOw0KKwkJ CX0NCisjaWZkZWYgVENQX1NBQ0tfREVCVUcNCisJCQlpZiAocCkNCisJCQkJ dGNwX3ByaW50X2hvbGVzKHRwKTsNCisjZW5kaWYNCisJCQlyZXR1cm4gcDsN CisJCX0NCisgICAgICAgIAlwID0gcC0+bmV4dDsNCisJfQ0KKwlyZXR1cm4g MDsNCit9DQorDQorLyoNCisgKiBBZnRlciBhIHRpbWVvdXQsIHRoZSBTQUNL IGxpc3QgbWF5IGJlIHJlYnVpbHQuICBUaGlzIFNBQ0sgaW5mb3JtYXRpb24N CisgKiBzaG91bGQgYmUgdXNlZCB0byBhdm9pZCByZXRyYW5zbWl0dGluZyBT QUNLZWQgZGF0YS4gIFRoaXMgZnVuY3Rpb24NCisgKiB0cmF2ZXJzZXMgdGhl IFNBQ0sgbGlzdCB0byBzZWUgaWYgc25kX254dCBzaG91bGQgYmUgbW92ZWQg Zm9yd2FyZC4NCisgKi8NCit2b2lkDQordGNwX3NhY2tfYWRqdXN0KHRwKQ0K KwlzdHJ1Y3QgdGNwY2IgKnRwOw0KK3sNCisJc3RydWN0IHNhY2tob2xlICpj dXIgPSB0cC0+c25kX2hvbGVzOw0KKwlpZiAoY3VyID09IDApDQorCQlyZXR1 cm47IC8qIE5vIGhvbGVzICovDQorCWlmIChTRVFfR0VRKHRwLT5zbmRfbnh0 LCB0cC0+cmN2X2xhc3RzYWNrKSkNCisJCXJldHVybjsgLyogV2UncmUgYWxy ZWFkeSBiZXlvbmQgYW55IFNBQ0tlZCBibG9ja3MgKi8NCisJLyogDQorCSAq IFR3byBjYXNlcyBmb3Igd2hpY2ggd2Ugd2FudCB0byBhZHZhbmNlIHNuZF9u eHQ6ICANCisJICogaSkgc25kX254dCBsaWVzIGJldHdlZW4gZW5kIG9mIG9u ZSBob2xlIGFuZCBiZWdpbm5pbmcgb2YgYW5vdGhlcg0KKwkgKiBpaSkgc25k X254dCBsaWVzIGJldHdlZW4gZW5kIG9mIGxhc3QgaG9sZSBhbmQgcmN2X2xh c3RzYWNrDQorCSAqLw0KKwl3aGlsZSAoY3VyLT5uZXh0KSB7DQorCQlpZiAo U0VRX0xUKHRwLT5zbmRfbnh0LCBjdXItPmVuZCkpDQorCQkJcmV0dXJuOw0K KwkJaWYgKFNFUV9HRVEodHAtPnNuZF9ueHQsIGN1ci0+bmV4dC0+c3RhcnQp KSANCisJCQljdXIgPSBjdXItPm5leHQ7DQorCQllbHNlIHsNCisJCQl0cC0+ c25kX254dCA9IGN1ci0+bmV4dC0+c3RhcnQ7DQorCQkJcmV0dXJuOw0KKwkJ fQ0KKwl9DQorCWlmIChTRVFfTFQodHAtPnNuZF9ueHQsIGN1ci0+ZW5kKSkN CisJCXJldHVybjsNCisJdHAtPnNuZF9ueHQgPSB0cC0+cmN2X2xhc3RzYWNr Ow0KKwlyZXR1cm47DQorfQ0KKyNlbmRpZiAvKiBUQ1BfU0FDSyAqLw0KKw0K Kw0KIC8qDQogICogVGNwIG91dHB1dCByb3V0aW5lOiBmaWd1cmUgb3V0IHdo YXQgc2hvdWxkIGJlIHNlbnQgYW5kIHNlbmQgaXQuDQogICovDQpAQCAtMTE4 LDYgKzIxOCwxMCBAQA0KIAl1X2NoYXIgb3B0W1RDUF9NQVhPTEVOXTsNCiAJ dW5zaWduZWQgaXBvcHRsZW4sIG9wdGxlbiwgaGRybGVuOw0KIAlpbnQgaWRs ZSwgc2VuZGFsb3Q7DQorI2lmZGVmIFRDUF9TQUNLDQorCWludCBpLCBzYWNr X3J4bWl0ID0gMDsNCisJc3RydWN0IHNhY2tob2xlICpwOw0KKyNlbmRpZg0K IAlpbnQgbWF4YnVyc3QgPSBUQ1BfTUFYQlVSU1Q7DQogCXN0cnVjdCBybXhw X3RhbyAqdGFvcDsNCiAJc3RydWN0IHJteHBfdGFvIHRhb19ub25jYWNoZWQ7 DQpAQCAtMTYxLDEwICsyNjUsMzAgQEANCiAJfQ0KIGFnYWluOg0KIAlzZW5k YWxvdCA9IDA7DQorI2lmZGVmIFRDUF9TQUNLDQorCS8qDQorCSAqIElmIHdl J3ZlIHJlY2VudGx5IHRha2VuIGEgdGltZW91dCwgc25kX21heCB3aWxsIGJl IGdyZWF0ZXIgdGhhbg0KKwkgKiBzbmRfbnh0LiAgVGhlcmUgbWF5IGJlIFNB Q0sgaW5mb3JtYXRpb24gdGhhdCBhbGxvd3MgdXMgdG8gYXZvaWQNCisJICog cmVzZW5kaW5nIGFscmVhZHkgZGVsaXZlcmVkIGRhdGEuICBBZGp1c3Qgc25k X254dCBhY2NvcmRpbmdseS4NCisJICovDQorCWlmICghdHAtPnNhY2tfZGlz YWJsZSAmJiBTRVFfTFQodHAtPnNuZF9ueHQsIHRwLT5zbmRfbWF4KSkNCisJ CXRjcF9zYWNrX2FkanVzdCh0cCk7DQorI2VuZGlmDQogCW9mZiA9IHRwLT5z bmRfbnh0IC0gdHAtPnNuZF91bmE7DQorI2lmIGRlZmluZWQoVENQX1NBQ0sp ICYmIGRlZmluZWQoVENQX0ZBQ0spDQorCS8qIE5vcm1hbGx5LCBzZW5kYWJs ZSBkYXRhIGlzIGxpbWl0ZWQgYnkgb2ZmIDwgdHAtPnNuZF9jd25kLg0KKwkg KiBCdXQgaW4gRkFDSywgc2VuZGFibGUgZGF0YSBpcyBsaW1pdGVkIGJ5IHNu ZF9hd25kIDwgc25kX2N3bmQsDQorCSAqIHJlZ2FyZGxlc3Mgb2Ygb2Zmc2V0 Lg0KKwkgKi8NCisJaWYgKCF0cC0+c2Fja19kaXNhYmxlICYmICh0cC0+dF9k dXBhY2tzID4gdGNwcmV4bXR0aHJlc2gpKQ0KKwkgIHdpbiA9IHRwLT5zbmRf d25kOw0KKwllbHNlDQorI2VuZGlmDQogCXdpbiA9IG1pbih0cC0+c25kX3du ZCwgdHAtPnNuZF9jd25kKTsNCiANCiAJZmxhZ3MgPSB0Y3Bfb3V0ZmxhZ3Nb dHAtPnRfc3RhdGVdOw0KKwkNCisJDQogCS8qDQogCSAqIEdldCBzdGFuZGFy ZCBmbGFncywgYW5kIGFkZCBTWU4gb3IgRklOIGlmIHJlcXVlc3RlZCBieSAn aGlkZGVuJw0KIAkgKiBzdGF0ZSBmbGFncy4NCkBAIC0xNzMsNyArMjk3LDMz IEBADQogCQlmbGFncyB8PSBUSF9GSU47DQogCWlmICh0cC0+dF9mbGFncyAm IFRGX05FRURTWU4pDQogCQlmbGFncyB8PSBUSF9TWU47DQorI2lmZGVmIFRD UF9TQUNLDQorCS8qIA0KKwkgKiBTZW5kIGFueSBTQUNLLWdlbmVyYXRlZCBy ZXRyYW5zbWlzc2lvbnMuICBJZiB3ZSdyZSBleHBsaWNpdGx5IHRyeWluZw0K KwkgKiB0byBzZW5kIG91dCBuZXcgZGF0YSAod2hlbiBzZW5kYWxvdCBpcyAx KSwgYnlwYXNzIHRoaXMgZnVuY3Rpb24uDQorCSAqIElmIHdlIHJldHJhbnNt aXQgaW4gZmFzdCByZWNvdmVyeSBtb2RlLCBkZWNyZW1lbnQgc25kX2N3bmQs IHNpbmNlDQorCSAqIHdlJ3JlIHJlcGxhY2luZyBhIChmdXR1cmUpIG5ldyB0 cmFuc21pc3Npb24gd2l0aCBhIHJldHJhbnNtaXNzaW9uIA0KKwkgKiBub3cs IGFuZCB3ZSBwcmV2aW91c2x5IGluY3JlbWVudGVkIHNuZF9jd25kIGluIHRj cF9pbnB1dCgpLg0KKwkgKi8NCisJaWYgKCF0cC0+c2Fja19kaXNhYmxlICYm ICFzZW5kYWxvdCkgew0KKwkgIGlmICh0cC0+dF9kdXBhY2tzID49IHRjcHJl eG10dGhyZXNoICYmDQorCSAgICAgIChwID0gdGNwX3NhY2tfb3V0cHV0KHRw KSkpIHsNCisJICAgIG9mZiA9IHAtPnJ4bWl0IC0gdHAtPnNuZF91bmE7DQor CSAgICBzYWNrX3J4bWl0ID0gMTsNCisjaWYgMA0KKwkgICAgLyogQ29hbGVz Y2UgaG9sZXMgaW50byBhIHNpbmdsZSByZXRyYW5zbWlzc2lvbiAqLw0KKyNl bmRpZg0KKwkgICAgbGVuID0gbWluKHRwLT50X21heHNlZywgcC0+ZW5kIC0g cC0+cnhtaXQpOw0KKyNpZm5kZWYgVENQX0ZBQ0sNCisJICAgIC8qIGluIEZB Q0ssIGhvbGQgc25kX2N3bmQgY29uc3RhbnQgZHVyaW5nIHJlY292ZXJ5ICov DQorCSAgICBpZiAoU0VRX0xUKHRwLT5zbmRfdW5hLCB0cC0+c25kX2xhc3Qp KQ0KKwkgICAgICB0cC0+c25kX2N3bmQgLT0gdHAtPnRfbWF4c2VnOw0KKyNl bmRpZg0KKwkgIH0NCisJfQ0KKyNlbmRpZiAvKiBUQ1BfU0FDSyAqLw0KIA0K KwlzZW5kYWxvdCA9IDA7DQogCS8qDQogCSAqIElmIGluIHBlcnNpc3QgdGlt ZW91dCB3aXRoIHdpbmRvdyBvZiAwLCBzZW5kIDEgYnl0ZS4NCiAJICogT3Ro ZXJ3aXNlLCBpZiB3aW5kb3cgaXMgc21hbGwgYnV0IG5vbnplcm8NCkBAIC0y MDcsOCArMzU3LDI2IEBADQogCQl9DQogCX0NCiANCisjaWZkZWYgVENQX1NB Q0sNCisJaWYgKCFzYWNrX3J4bWl0KSB7DQorI2VuZGlmDQogCWxlbiA9IChs b25nKXVsbWluKHNvLT5zb19zbmQuc2JfY2MsIHdpbikgLSBvZmY7DQogDQor I2lmIGRlZmluZWQoVENQX1NBQ0spICYmIGRlZmluZWQoVENQX0ZBQ0spDQor CS8qIA0KKwkgKiBJZiB3ZSdyZSBpbiBmYXN0IHJlY292ZXJ5IChTRVFfR1Qo dHAtPnNuZF9sYXN0LCB0cC0+c25kX3VuYSkpLCBhbmQgDQorCSAqIGFtb3Vu dCBvZiBvdXRzdGFuZGluZyBkYXRhIChzbmRfYXduZCkgaXMgPj0gc25kX2N3 bmQsIHRoZW4NCisJICogZG8gbm90IHNlbmQgZGF0YSAobGlrZSB6ZXJvIHdp bmRvdyBjb25kaXRpb25zKQ0KKwkgKi8NCisJaWYgKCF0cC0+c2Fja19kaXNh YmxlICYmIGxlbiAmJiBTRVFfR1QodHAtPnNuZF9sYXN0LCB0cC0+c25kX3Vu YSkgJiYgDQorCSAgICAodHAtPnNuZF9hd25kID49IHRwLT5zbmRfY3duZCkp IA0KKwkJbGVuID0gMDsNCisjZW5kaWYgLyogVENQX0ZBQ0sgKi8NCisjaWZk ZWYgVENQX1NBQ0sNCisJfQ0KKyNlbmRpZg0KKw0KKw0KIAlpZiAoKHRhb3Ag PSB0Y3BfZ2V0dGFvY2FjaGUodHAtPnRfaW5wY2IpKSA9PSBOVUxMKSB7DQog CQl0YW9wID0gJnRhb19ub25jYWNoZWQ7DQogCQliemVybyh0YW9wLCBzaXpl b2YoKnRhb3ApKTsNCkBAIC0yOTMsNiArNDYxLDEwIEBADQogCQkJZ290byBz ZW5kOw0KIAkJaWYgKFNFUV9MVCh0cC0+c25kX254dCwgdHAtPnNuZF9tYXgp KQ0KIAkJCWdvdG8gc2VuZDsNCisjaWZkZWYgVENQX1NBQ0sNCisJCWlmIChz YWNrX3J4bWl0KQ0KKwkJICBnb3RvIHNlbmQ7DQorI2VuZGlmDQogCX0NCiAN CiAJLyoNCkBAIC0zMzUsNiArNTA3LDIwIEBADQogCWlmIChmbGFncyAmIFRI X0ZJTiAmJg0KIAkgICAgKCh0cC0+dF9mbGFncyAmIFRGX1NFTlRGSU4pID09 IDAgfHwgdHAtPnNuZF9ueHQgPT0gdHAtPnNuZF91bmEpKQ0KIAkJZ290byBz ZW5kOw0KKyNpZmRlZiBUQ1BfU0FDSw0KKwkvKg0KKwkgKiBJbiBTQUNLLCBp dCBpcyBwb3NzaWJsZSBmb3IgdGNwX291dHB1dCB0byBmYWlsIHRvIHNlbmQg YSBzZWdtZW50IA0KKwkgKiBhZnRlciB0aGUgcmV0cmFuc21pc3Npb24gdGlt ZXIgaGFzIGJlZW4gdHVybmVkIG9mZi4gIE1ha2Ugc3VyZQ0KKwkgKiB0aGF0 IHRoZSByZXRyYW5zbWlzc2lvbiB0aW1lciBpcyBzZXQuDQorCSAqLw0KKwlp ZiAoU0VRX0dUKHRwLT5zbmRfbWF4LCB0cC0+c25kX3VuYSkgJiYNCisJICAg ICFjYWxsb3V0X2FjdGl2ZSh0cC0+dHRfcmV4bXQpICYmDQorCSAgICAhY2Fs bG91dF9hY3RpdmUodHAtPnR0X3BlcnNpc3QpKXsNCisJICBjYWxsb3V0X3Jl c2V0KHRwLT50dF9yZXhtdCwgdHAtPnRfcnh0Y3VyLA0KKwkJCXRjcF90aW1l cl9yZXhtdCwgdHApOw0KKwkgIHJldHVybiAoMCk7DQorCX0NCisjZW5kaWYg LyogVENQX1NBQ0sgKi8NCiANCiAJLyoNCiAJICogVENQIHdpbmRvdyB1cGRh dGVzIGFyZSBub3QgcmVsaWFibGUsIHJhdGhlciBhIHBvbGxpbmcgcHJvdG9j b2wNCkBAIC0zOTUsNyArNTgxLDIyIEBADQogCQkJbXNzID0gaHRvbnMoKHVf c2hvcnQpIHRjcF9tc3NvcHQodHApKTsNCiAJCQkodm9pZCltZW1jcHkob3B0 ICsgMiwgJm1zcywgc2l6ZW9mKG1zcykpOw0KIAkJCW9wdGxlbiA9IFRDUE9M RU5fTUFYU0VHOw0KKyNpZmRlZiBUQ1BfU0FDSw0KKwkJCS8qIA0KKwkJCSAq IElmIHRoaXMgaXMgdGhlIGZpcnN0IFNZTiBvZiBjb25uZWN0aW9uIChub3Qg YSBTWU4gDQorCQkJICogQUNLKSwgaW5jbHVkZSBTQUNLX1BFUk1JVF9IRFIg b3B0aW9uLiAgSWYgdGhpcyBpcyBhIA0KKwkJCSAqIFNZTiBBQ0ssIGluY2x1 ZGUgU0FDS19QRVJNSVRfSERSIG9wdGlvbiBpZiBwZWVyIGhhcyANCisJCQkg KiBhbHJlYWR5IGRvbmUgc28uDQorCQkJICovDQorCQkJaWYgKCF0cC0+c2Fj a19kaXNhYmxlICYmICgoZmxhZ3MgJiBUSF9BQ0spID09IDAgfHwNCisJCQkg ICAgKHRwLT50X2ZsYWdzICYgVEZfU0FDS19QRVJNSVQpKSkgew0KKwkJCQkq KCh1X2ludDMyX3QgKikgKG9wdCArIG9wdGxlbikpID0NCisJCQkJICAgIGh0 b25sKFRDUE9QVF9TQUNLX1BFUk1JVF9IRFIpOw0KKwkJCQlvcHRsZW4gKz0g NDsNCisJCQl9DQorI2VuZGlmDQogDQorDQogCQkJaWYgKCh0cC0+dF9mbGFn cyAmIFRGX1JFUV9TQ0FMRSkgJiYNCiAJCQkgICAgKChmbGFncyAmIFRIX0FD SykgPT0gMCB8fA0KIAkJCSAgICAodHAtPnRfZmxhZ3MgJiBURl9SQ1ZEX1ND QUxFKSkpIHsNCkBAIC00MjYsNiArNjI3LDMzIEBADQogIAkJKmxwICAgPSBo dG9ubCh0cC0+dHNfcmVjZW50KTsNCiAgCQlvcHRsZW4gKz0gVENQT0xFTl9U U1RBTVBfQVBQQTsNCiAgCX0NCisjaWZkZWYgVENQX1NBQ0sNCisJLyoNCisJ ICogU2VuZCBTQUNLcyBpZiBuZWNlc3NhcnkuICBUaGlzIHNob3VsZCBiZSB0 aGUgbGFzdCBvcHRpb24gcHJvY2Vzc2VkLg0KKwkgKiBPbmx5IGFzIG1hbnkg U0FDS3MgYXJlIHNlbnQgYXMgYXJlIHBlcm1pdHRlZCBieSB0aGUgbWF4aW11 bSBvcHRpb25zDQorCSAqIHNpemUuICBObyBtb3JlIHRoYW4gdGhyZWUgU0FD S3MgYXJlIHNlbnQuDQorCSAqLw0KKwlpZiAoIXRwLT5zYWNrX2Rpc2FibGUg JiYgdHAtPnRfc3RhdGUgPT0gVENQU19FU1RBQkxJU0hFRCAmJg0KKwkgICAg KHRwLT50X2ZsYWdzICYgKFRGX1NBQ0tfUEVSTUlUfFRGX05PT1BUKSkgPT0g VEZfU0FDS19QRVJNSVQgJiYNCisJICAgIHRwLT5yY3ZfbnVtc2Fja3MpIHsN CisJCXVfaW50MzJfdCAqbHAgPSAodV9pbnQzMl90ICopKG9wdCArIG9wdGxl bik7DQorCQl1X2ludDMyX3QgKm9scCA9IGxwKys7DQorCQlpbnQgY291bnQg PSAwOyAgLyogYWN0dWFsIG51bWJlciBvZiBTQUNLcyBpbnNlcnRlZCAqLw0K KwkJaW50IG1heHNhY2sgPSAoVENQX01BWE9MRU4gLSAob3B0bGVuICsgNCkp L1RDUE9MRU5fU0FDSzsNCisNCisJCW1heHNhY2sgPSBtaW4obWF4c2Fjaywg VENQX01BWF9TQUNLKTsNCisJCWZvciAoaSA9IDA7IChpIDwgdHAtPnJjdl9u dW1zYWNrcyAmJiBjb3VudCA8IG1heHNhY2spOyBpKyspIHsNCisJCQlzdHJ1 Y3Qgc2Fja2JsayBzYWNrID0gdHAtPnNhY2tibGtzW2ldOw0KKwkJCWlmIChz YWNrLnN0YXJ0ID09IDAgJiYgc2Fjay5lbmQgPT0gMCkNCisJCQkJY29udGlu dWU7DQorCQkJKmxwKysgPSBodG9ubChzYWNrLnN0YXJ0KTsNCisJCQkqbHAr KyA9IGh0b25sKHNhY2suZW5kKTsNCisJCQljb3VudCsrOw0KKwkJfQ0KKwkJ Km9scCA9IGh0b25sKFRDUE9QVF9TQUNLX0hEUnwoVENQT0xFTl9TQUNLKmNv dW50KzIpKTsNCisJCW9wdGxlbiArPSBUQ1BPTEVOX1NBQ0sqY291bnQgKyA0 OyAvKiBpbmNsdWRpbmcgbGVhZGluZyBOT1BzICovDQorCX0NCisjZW5kaWYg LyogVENQX1NBQ0sgKi8NCiANCiAgCS8qDQogCSAqIFNlbmQgYENDLWZhbWls eScgb3B0aW9ucyBpZiBvdXIgc2lkZSB3YW50cyB0byB1c2UgdGhlbSAoVEZf UkVRX0NDKSwNCkBAIC02NzMsNiArOTAxLDIzIEBADQogCQl0aC0+dGhfc2Vx ID0gaHRvbmwodHAtPnNuZF9ueHQpOw0KIAllbHNlDQogCQl0aC0+dGhfc2Vx ID0gaHRvbmwodHAtPnNuZF9tYXgpOw0KKyNpZmRlZiBUQ1BfU0FDSw0KKwlp ZiAoc2Fja19yeG1pdCkgew0KKwkgIC8qIA0KKwkgICAqIElmIHNlbmRhbG90 IHdhcyB0dXJuZWQgb24gKGR1ZSB0byBvcHRpb24gc3R1ZmZpbmcpLCB0dXJu IGl0IA0KKwkgICAqIG9mZi4gUHJvcGVybHkgc2V0IHRoX3NlcSBmaWVsZC4g IEFkdmFuY2UgdGhlIHJldCd4IHBvaW50ZXIgDQorCSAgICogYnkgbGVuLiAg DQorCSAgICovDQorCSAgaWYgKHNlbmRhbG90KQ0KKwkgICAgc2VuZGFsb3Qg PSAwOw0KKwkgIHRoLT50aF9zZXEgPSBodG9ubChwLT5yeG1pdCk7DQorCSAg cC0+cnhtaXQgKz0gbGVuOw0KKyNpZiBkZWZpbmVkKFRDUF9TQUNLKSAmJiBk ZWZpbmVkKFRDUF9GQUNLKQ0KKwkgIHRwLT5yZXRyYW5fZGF0YSArPSBsZW47 DQorI2VuZGlmIC8qIFRDUF9GQUNLICovDQorCX0NCisjZW5kaWYgLyogVENQ X1NBQ0sgKi8NCisNCiAJdGgtPnRoX2FjayA9IGh0b25sKHRwLT5yY3Zfbnh0 KTsNCiAJaWYgKG9wdGxlbikgew0KIAkJYmNvcHkob3B0LCB0aCArIDEsIG9w dGxlbik7DQpAQCAtNzQ3LDYgKzk5MiwxNCBAQA0KIAkJCQl0cC0+dF9mbGFn cyB8PSBURl9TRU5URklOOw0KIAkJCX0NCiAJCX0NCisjaWZkZWYgVENQX1NB Q0sNCisJCWlmICghdHAtPnNhY2tfZGlzYWJsZSkgew0KKwkJCWlmIChzYWNr X3J4bWl0ICYmIChwLT5yeG1pdCAhPSB0cC0+c25kX254dCkpIHsNCisJCQkJ Z290byB0aW1lcjsNCisJCQl9DQorCQl9DQorI2VuZGlmDQorDQogCQl0cC0+ c25kX254dCArPSBsZW47DQogCQlpZiAoU0VRX0dUKHRwLT5zbmRfbnh0LCB0 cC0+c25kX21heCkpIHsNCiAJCQl0cC0+c25kX21heCA9IHRwLT5zbmRfbnh0 Ow0KQEAgLTc2OSw2ICsxMDIyLDE5IEBADQogCQkgKiBJbml0aWFsaXplIHNo aWZ0IGNvdW50ZXIgd2hpY2ggaXMgdXNlZCBmb3IgYmFja29mZg0KIAkJICog b2YgcmV0cmFuc21pdCB0aW1lLg0KIAkJICovDQorI2lmZGVmIFRDUF9TQUNL DQorIHRpbWVyOg0KKwkJaWYgKCF0cC0+c2Fja19kaXNhYmxlICYmIHNhY2tf cnhtaXQgJiYNCisJCSAgICAhY2FsbG91dF9hY3RpdmUodHAtPnR0X3JleG10 KSAmJg0KKwkJICAgIHRwLT5zbmRfbnh0ICE9IHRwLT5zbmRfdW5hKSB7DQor CQkJaWYgKGNhbGxvdXRfYWN0aXZlKHRwLT50dF9wZXJzaXN0KSkgew0KKwkJ CQljYWxsb3V0X3N0b3AodHAtPnR0X3BlcnNpc3QpOw0KKwkJCQl0cC0+dF9y eHRzaGlmdCA9IDA7DQorCQkJfQ0KKwkJCWNhbGxvdXRfcmVzZXQodHAtPnR0 X3JleG10LCB0cC0+dF9yeHRjdXIsDQorCQkJCSAgICAgIHRjcF90aW1lcl9y ZXhtdCwgdHApOw0KKwkJfQ0KKyNlbmRpZg0KIAkJaWYgKCFjYWxsb3V0X2Fj dGl2ZSh0cC0+dHRfcmV4bXQpICYmDQogCQkgICAgdHAtPnNuZF9ueHQgIT0g dHAtPnNuZF91bmEpIHsNCiAJCQlpZiAoY2FsbG91dF9hY3RpdmUodHAtPnR0 X3BlcnNpc3QpKSB7DQpAQCAtODU5LDYgKzExMjUsMTIgQEANCiAJZXJyb3Ig PSBpcF9vdXRwdXQobSwgdHAtPnRfaW5wY2ItPmlucF9vcHRpb25zLCAmdHAt PnRfaW5wY2ItPmlucF9yb3V0ZSwNCiAJICAgIChzby0+c29fb3B0aW9ucyAm IFNPX0RPTlRST1VURSksIDApOw0KICAgICB9DQorCQ0KKyNpZiBkZWZpbmVk KFRDUF9TQUNLKSAmJiBkZWZpbmVkKFRDUF9GQUNLKQ0KKwkvKiBVcGRhdGUg c25kX2F3bmQgdG8gcmVmbGVjdCB0aGUgbmV3IGRhdGEgdGhhdCB3YXMgc2Vu dC4gICovDQorCXRwLT5zbmRfYXduZCA9IHRjcF9zZXFfc3VidHJhY3QodHAt PnNuZF9tYXgsIHRwLT5zbmRfZmFjaykgKw0KKwkgIHRwLT5yZXRyYW5fZGF0 YTsgICAgICAgICAgICAgICAgDQorI2VuZGlmIC8qIGRlZmluZWQoVENQX1NB Q0spICYmIGRlZmluZWQoVENQX0ZBQ0spICovDQogCWlmIChlcnJvcikgew0K IA0KIAkJLyoNCkluZGV4OiB0Y3Bfc3Vici5jDQo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09DQpSQ1MgZmlsZTogL2hvbWUvbmN2cy9zcmMvc3lzL25ldGluZXQv dGNwX3N1YnIuYyx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTEzDQpkaWZm IC11IC1kIC1iIC13IC11IC1kIC1yMS4xMTMgdGNwX3N1YnIuYw0KLS0tIHRj cF9zdWJyLmMJMjAwMS8wOC8yMiAwMDo1ODoxNgkxLjExMw0KKysrIHRjcF9z dWJyLmMJMjAwMS8wOC8yMiAyMzoxMToyMQ0KQEAgLTE0OCw2ICsxNDgsMTIg QEANCiBTWVNDVExfSU5UKF9uZXRfaW5ldF90Y3AsIE9JRF9BVVRPLCBpc25f cmVzZWVkX2ludGVydmFsLCBDVExGTEFHX1JXLA0KICAgICAmdGNwX2lzbl9y ZXNlZWRfaW50ZXJ2YWwsIDAsICJTZWNvbmRzIGJldHdlZW4gcmVzZWVkaW5n IG9mIElTTiBzZWNyZXQiKTsNCiANCisjaWZkZWYgVENQX1NBQ0sNCitzdGF0 aWMgaW50IAl0Y3BfZG9fc2FjayA9IDE7DQorU1lTQ1RMX0lOVChfbmV0X2lu ZXRfdGNwLCBPSURfQVVUTywgdGNwX2RvX3NhY2ssIENUTEZMQUdfUlcsICZ0 Y3BfZG9fc2FjaywgMCwgDQorICAgICJFeHBlcmltZW50YWwgU2FjayIpOw0K KyNlbmRpZg0KKw0KIHN0YXRpYyB2b2lkCXRjcF9jbGVhcnRhb2NhY2hlIF9f UCgodm9pZCkpOw0KIHN0YXRpYyB2b2lkCXRjcF9ub3RpZnkgX19QKChzdHJ1 Y3QgaW5wY2IgKiwgaW50KSk7DQogDQpAQCAtMTYxLDYgKzE2NywxNCBAQA0K ICNkZWZpbmUgVENCSEFTSFNJWkUJNTEyDQogI2VuZGlmDQogDQorI2lmbmRl ZiBUQ1BfRE9fU0FDSw0KKyNpZmRlZiBUQ1BfU0FDSw0KKyNkZWZpbmUgVENQ X0RPX1NBQ0sJMQ0KKyNlbHNlDQorI2RlZmluZSBUQ1BfRE9fU0FDSwkwDQor I2VuZGlmDQorI2VuZGlmDQorDQogLyoNCiAgKiBUaGlzIGlzIHRoZSBhY3R1 YWwgc2hhcGUgb2Ygd2hhdCB3ZSBhbGxvY2F0ZSB1c2luZyB0aGUgem9uZQ0K ICAqIGFsbG9jYXRvci4gIERvaW5nIGl0IHRoaXMgd2F5IGFsbG93cyB1cyB0 byBwcm90ZWN0IGJvdGggc3RydWN0dXJlcw0KQEAgLTUyNyw2ICs1NDEsOSBA QA0KIAljYWxsb3V0X2luaXQodHAtPnR0XzJtc2wgPSAmaXQtPmlucF90cF8y bXNsLCAwKTsNCiAJY2FsbG91dF9pbml0KHRwLT50dF9kZWxhY2sgPSAmaXQt PmlucF90cF9kZWxhY2ssIDApOw0KIA0KKyNpZmRlZiBUQ1BfU0FDSw0KKwl0 cC0+c2Fja19kaXNhYmxlID0gdGNwX2RvX3NhY2sgPyAwIDogMTsNCisjZW5k aWYNCiAJaWYgKHRjcF9kb19yZmMxMzIzKQ0KIAkJdHAtPnRfZmxhZ3MgPSAo VEZfUkVRX1NDQUxFfFRGX1JFUV9UU1RNUCk7DQogCWlmICh0Y3BfZG9fcmZj MTY0NCkNCkBAIC01OTEsNiArNjA4LDkgQEANCiAJcmVnaXN0ZXIgc3RydWN0 IHRzZWdfcWVudCAqcTsNCiAJc3RydWN0IGlucGNiICppbnAgPSB0cC0+dF9p bnBjYjsNCiAJc3RydWN0IHNvY2tldCAqc28gPSBpbnAtPmlucF9zb2NrZXQ7 DQorI2lmZGVmIFRDUF9TQUNLDQorCXN0cnVjdCBzYWNraG9sZSAqcCwgKnFf c2FjazsNCisjZW5kaWYNCiAjaWZkZWYgSU5FVDYNCiAJaW50IGlzaXB2NiA9 IChpbnAtPmlucF92ZmxhZyAmIElOUF9JUFY2KSAhPSAwOw0KICNlbmRpZiAv KiBJTkVUNiAqLw0KQEAgLTcyOSw2ICs3NDksMTUgQEANCiAJCW1fZnJlZW0o cS0+dHFlX20pOw0KIAkJRlJFRShxLCBNX1RTRUdRKTsNCiAJfQ0KKyNpZmRl ZiBUQ1BfU0FDSw0KKwkvKiBGcmVlIFNBQ0sgaG9sZXMuICovDQorCXFfc2Fj ayA9IHAgPSB0cC0+c25kX2hvbGVzOw0KKwl3aGlsZSAocCAhPSAwKSB7DQor CQlxX3NhY2sgPSBwLT5uZXh0Ow0KKwkJZnJlZShwLCBNX1BDQik7DQorCQlw ID0gcV9zYWNrOw0KKwl9DQorI2VuZGlmDQogCWlucC0+aW5wX3BwY2IgPSBO VUxMOw0KIAlzb2lzZGlzY29ubmVjdGVkKHNvKTsNCiAjaWZkZWYgSU5FVDYN CkluZGV4OiB0Y3BfdGltZXIuYw0KPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K UkNTIGZpbGU6IC9ob21lL25jdnMvc3JjL3N5cy9uZXRpbmV0L3RjcF90aW1l ci5jLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS40Nw0KZGlmZiAtdSAtZCAt YiAtdyAtdSAtZCAtcjEuNDcgdGNwX3RpbWVyLmMNCi0tLSB0Y3BfdGltZXIu YwkyMDAxLzA4LzIyIDAwOjU4OjE2CTEuNDcNCisrKyB0Y3BfdGltZXIuYwky MDAxLzA4LzIyIDIzOjExOjIxDQpAQCAtNDAsNiArNDAsOCBAQA0KIA0KICNp bmNsdWRlIDxzeXMvcGFyYW0uaD4NCiAjaW5jbHVkZSA8c3lzL3N5c3RtLmg+ DQorI2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4NCisjaW5jbHVkZSA8c3lzL21i dWYuaD4NCiAjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPg0KICNpbmNsdWRlIDxz eXMvbWJ1Zi5oPg0KICNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+DQpAQCAtMTg2 LDYgKzE4OCw5IEBADQogew0KIAlzdHJ1Y3QgdGNwY2IgKnRwID0geHRwOw0K IAlpbnQgczsNCisjaWZkZWYgVENQX1NBQ0sNCisJc3RydWN0IHNhY2tob2xl ICpwLCAqcTsNCisjZW5kaWYNCiAjaWZkZWYgVENQREVCVUcNCiAJaW50IG9z dGF0ZTsNCiANCkBAIC0xOTcsNyArMjAyLDI1IEBADQogCQlyZXR1cm47DQog CX0NCiAJY2FsbG91dF9kZWFjdGl2YXRlKHRwLT50dF8ybXNsKTsNCisJDQor I2lmZGVmIFRDUF9TQUNLDQogCS8qDQorCSAqIEZyZWUgU0FDSyBob2xlcyBm b3IgMk1TTCBhbmQgUkVYTVQgdGltZXJzLg0KKwkgKi8NCisJcSA9IHAgPSB0 cC0+c25kX2hvbGVzOw0KKwl3aGlsZSAocCAhPSAwKSB7DQorCSAgcSA9IHAt Pm5leHQ7DQorCSAgZnJlZShwLCBNX1BDQik7DQorCSAgcCA9IHE7DQorCX0N CisJdHAtPnNuZF9ob2xlcyA9IDA7DQorI2lmIGRlZmluZWQoVENQX1NBQ0sp ICYmIGRlZmluZWQoVENQX0ZBQ0spDQorCXRwLT5zbmRfZmFjayA9IHRwLT5z bmRfdW5hOw0KKwl0cC0+cmV0cmFuX2RhdGEgPSAwOw0KKwl0cC0+c25kX2F3 bmQgPSAwOw0KKyNlbmRpZiAvKiBUQ1BfRkFDSyAqLw0KKyNlbmRpZiAvKiBU Q1BfU0FDSyAqLwkNCisJLyoNCiAJICogMiBNU0wgdGltZW91dCBpbiBzaHV0 ZG93biB3ZW50IG9mZi4gIElmIHdlJ3JlIGNsb3NlZCBidXQNCiAJICogc3Rp bGwgd2FpdGluZyBmb3IgcGVlciB0byBjbG9zZSBhbmQgY29ubmVjdGlvbiBo YXMgYmVlbiBpZGxlDQogCSAqIHRvbyBsb25nLCBvciBpZiAyTVNMIHRpbWUg aXMgdXAgZnJvbSBUSU1FX1dBSVQsIGRlbGV0ZSBjb25uZWN0aW9uDQpAQCAt MzQ5LDYgKzM3Miw5IEBADQogCXN0cnVjdCB0Y3BjYiAqdHAgPSB4dHA7DQog CWludCBzOw0KIAlpbnQgcmV4bXQ7DQorI2lmZGVmIFRDUF9TQUNLDQorCXN0 cnVjdCBzYWNraG9sZSAqcCwgKnE7DQorI2VuZGlmDQogI2lmZGVmIFRDUERF QlVHDQogCWludCBvc3RhdGU7DQogDQpAQCAtMzYwLDcgKzM4NiwyNSBAQA0K IAkJcmV0dXJuOw0KIAl9DQogCWNhbGxvdXRfZGVhY3RpdmF0ZSh0cC0+dHRf cmV4bXQpOw0KKyNpZmRlZiBUQ1BfU0FDSw0KIAkvKg0KKwkgKiBGcmVlIFNB Q0sgaG9sZXMgZm9yIDJNU0wgYW5kIFJFWE1UIHRpbWVycy4NCisJICovDQor CXEgPSBwID0gdHAtPnNuZF9ob2xlczsNCisJd2hpbGUgKHAgIT0gMCkgew0K KwkgIHEgPSBwLT5uZXh0Ow0KKwkgIGZyZWUocCwgTV9QQ0IpOw0KKwkgIHAg PSBxOw0KKwl9DQorCXRwLT5zbmRfaG9sZXMgPSAwOw0KKyNpZiBkZWZpbmVk KFRDUF9TQUNLKSAmJiBkZWZpbmVkKFRDUF9GQUNLKQ0KKwl0cC0+c25kX2Zh Y2sgPSB0cC0+c25kX3VuYTsNCisJdHAtPnJldHJhbl9kYXRhID0gMDsNCisJ dHAtPnNuZF9hd25kID0gMDsNCisjZW5kaWYgLyogVENQX0ZBQ0sgKi8NCisj ZW5kaWYgLyogVENQX1NBQ0sgKi8NCisNCisJLyoNCiAJICogUmV0cmFuc21p c3Npb24gdGltZXIgd2VudCBvZmYuICBNZXNzYWdlIGhhcyBub3QNCiAJICog YmVlbiBhY2tlZCB3aXRoaW4gcmV0cmFuc21pdCBpbnRlcnZhbC4gIEJhY2sg b2ZmDQogCSAqIHRvIGEgbG9uZ2VyIHJldHJhbnNtaXQgaW50ZXJ2YWwgYW5k IHJldHJhbnNtaXQgb25lIHNlZ21lbnQuDQpAQCAtNDIxLDExICs0NjUsMjAg QEANCiAJCXRwLT50X3NydHQgPSAwOw0KIAl9DQogCXRwLT5zbmRfbnh0ID0g dHAtPnNuZF91bmE7DQorI2lmIGRlZmluZWQoVENQX1NBQ0spDQogCS8qDQor CSAqIE5vdGU6ICBXZSBvdmVybG9hZCBzbmRfbGFzdCB0byBmdW5jdGlvbiBh bHNvIGFzIHRoZQ0KKwkgKiBzbmRfbGFzdCB2YXJpYWJsZSBkZXNjcmliZWQg aW4gUkZDIDI1ODINCisJICovDQorCXRwLT5zbmRfbGFzdCA9IHRwLT5zbmRf bWF4Ow0KKyNlbHNlDQorCS8qDQogCSAqIE5vdGU6ICBXZSBvdmVybG9hZCBz bmRfcmVjb3ZlciB0byBmdW5jdGlvbiBhbHNvIGFzIHRoZQ0KIAkgKiBzbmRf bGFzdCB2YXJpYWJsZSBkZXNjcmliZWQgaW4gUkZDIDI1ODINCiAJICovDQor DQogCXRwLT5zbmRfcmVjb3ZlciA9IHRwLT5zbmRfbWF4Ow0KKyNlbmRpZiAv KiBUQ1BfU0FDSyAqLw0KIAkvKg0KIAkgKiBGb3JjZSBhIHNlZ21lbnQgdG8g YmUgc2VudC4NCiAJICovDQpJbmRleDogdGNwX3VzcnJlcS5jDQo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2hvbWUvbmN2cy9zcmMvc3lz L25ldGluZXQvdGNwX3VzcnJlcS5jLHYNCnJldHJpZXZpbmcgcmV2aXNpb24g MS42Ng0KZGlmZiAtdSAtZCAtYiAtdyAtdSAtZCAtcjEuNjYgdGNwX3VzcnJl cS5jDQotLS0gdGNwX3VzcnJlcS5jCTIwMDEvMDgvMjIgMDA6NTg6MTYJMS42 Ng0KKysrIHRjcF91c3JyZXEuYwkyMDAxLzA4LzIyIDIzOjExOjIxDQpAQCAt NzYxLDYgKzc2MSwxNiBAQA0KIAl0cC0+aXNzID0gdGNwX25ld19pc24odHAp Ow0KIAl0Y3Bfc2VuZHNlcWluaXQodHApOw0KIA0KKyNpZiBkZWZpbmVkKFRD UF9TQUNLKQ0KKwkJdHAtPnNuZF9sYXN0ID0gdHAtPnNuZF91bmE7DQorI2Vu ZGlmDQorI2lmIGRlZmluZWQoVENQX1NBQ0spICYmIGRlZmluZWQoVENQX0ZB Q0spDQorCQl0cC0+c25kX2ZhY2sgPSB0cC0+c25kX3VuYTsNCisJCXRwLT5y ZXRyYW5fZGF0YSA9IDA7DQorCQl0cC0+c25kX2F3bmQgPSAwOw0KKyNlbmRp Zg0KKw0KKw0KIAkvKg0KIAkgKiBHZW5lcmF0ZSBhIENDIHZhbHVlIGZvciB0 aGlzIGNvbm5lY3Rpb24gYW5kDQogCSAqIGNoZWNrIHdoZXRoZXIgQ0Mgb3Ig Q0NuZXcgc2hvdWxkIGJlIHVzZWQuDQpAQCAtOTc4LDYgKzk4OCwxMSBAQA0K IAkJY2FzZSBUQ1BfTk9QVVNIOg0KIAkJCW9wdHZhbCA9IHRwLT50X2ZsYWdz ICYgVEZfTk9QVVNIOw0KIAkJCWJyZWFrOw0KKyNpZmRlZiBUQ1BfU0FDSw0K KwkJY2FzZSBUQ1BfU0FDS19ESVNBQkxFOg0KKwkJCW9wdHZhbCA9IHRwLT5z YWNrX2Rpc2FibGU7DQorCQkJYnJlYWs7DQorI2VuZGlmCQkJDQogCQlkZWZh dWx0Og0KIAkJCWVycm9yID0gRU5PUFJPVE9PUFQ7DQogCQkJYnJlYWs7DQpJ bmRleDogdGNwX3Zhci5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1Mg ZmlsZTogL2hvbWUvbmN2cy9zcmMvc3lzL25ldGluZXQvdGNwX3Zhci5oLHYN CnJldHJpZXZpbmcgcmV2aXNpb24gMS43MQ0KZGlmZiAtdSAtZCAtYiAtdyAt dSAtZCAtcjEuNzEgdGNwX3Zhci5oDQotLS0gdGNwX3Zhci5oCTIwMDEvMDgv MjIgMDA6NTg6MTYJMS43MQ0KKysrIHRjcF92YXIuaAkyMDAxLzA4LzIyIDIz OjExOjIxDQpAQCAtMzYsNiArMzYsMjEgQEANCiANCiAjaWZuZGVmIF9ORVRJ TkVUX1RDUF9WQVJfSF8NCiAjZGVmaW5lIF9ORVRJTkVUX1RDUF9WQVJfSF8N CisNCitzdHJ1Y3Qgc2Fja2JsayB7DQorCXRjcF9zZXEgc3RhcnQ7CQkvKiBz dGFydCBzZXEgbm8uIG9mIHNhY2sgYmxvY2sgKi8NCisJdGNwX3NlcSBlbmQ7 IAkJLyogZW5kIHNlcSBuby4gKi8NCit9OyAgDQorDQorc3RydWN0IHNhY2to b2xlIHsNCisJdGNwX3NlcSBzdGFydDsJCS8qIHN0YXJ0IHNlcSBuby4gb2Yg aG9sZSAqLyANCisJdGNwX3NlcSBlbmQ7CQkvKiBlbmQgc2VxIG5vLiAqLw0K KwlpbnQJZHVwczsJCS8qIG51bWJlciBvZiBkdXAocylhY2tzIGZvciB0aGlz IGhvbGUgKi8NCisJdGNwX3NlcSByeG1pdDsJCS8qIG5leHQgc2VxLiBubyBp biBob2xlIHRvIGJlIHJldHJhbnNtaXR0ZWQgKi8NCisJc3RydWN0IHNhY2to b2xlICpuZXh0OwkvKiBuZXh0IGluIGxpc3QgKi8NCit9Ow0KKw0KKw0KIC8q DQogICogS2VybmVsIHZhcmlhYmxlcyBmb3IgdGNwLg0KICAqLw0KQEAgLTEx NCw2ICsxMjksMzEgQEANCiAJdV9sb25nCXJjdl93bmQ7CQkvKiByZWNlaXZl IHdpbmRvdyAqLw0KIAl0Y3Bfc2VxCXJjdl91cDsJCQkvKiByZWNlaXZlIHVy Z2VudCBwb2ludGVyICovDQogDQorI2lmZGVmIFRDUF9TQUNLDQorCWludAlz YWNrX2Rpc2FibGU7CQkvKiBkaXNhYmxlIFNBQ0sgZm9yIHRoaXMgY29ubmVj dGlvbiAqLw0KKwlpbnQJc25kX251bWhvbGVzOwkJLyogbnVtYmVyIG9mIGhv bGVzIHNlZW4gYnkgc2VuZGVyICovDQorCXN0cnVjdCBzYWNraG9sZSAqc25k X2hvbGVzOwkvKiBsaW5rZWQgbGlzdCBvZiBob2xlcyAoc29ydGVkKSAqLw0K KyNpZiBkZWZpbmVkKFRDUF9TQUNLKSAmJiBkZWZpbmVkKFRDUF9GQUNLKQ0K Kwl0Y3Bfc2VxIHNuZF9mYWNrOwkJLyogZm9yIEZBQ0sgY29uZ2VzdGlvbiBj b250cm9sICovDQorCXVfbG9uZwlzbmRfYXduZDsJCS8qIHNuZF9ueHQgLSBz bmRfZmFjayArICovDQorCQkJCQkvKiByZXRyYW5zbWl0dGVkIGRhdGEgKi8N CisJaW50IHJldHJhbl9kYXRhOwkJLyogYW1vdW50IG9mIG91dHN0YW5kaW5n IHJldHguIGRhdGEgICovDQorI2VuZGlmIC8qIFRDUF9GQUNLICovDQorI2Vu ZGlmIC8qIFRDUF9TQUNLICovDQorI2lmIGRlZmluZWQoVENQX1NBQ0spDQor CXRjcF9zZXEgc25kX2xhc3Q7CQkvKiBmb3IgdXNlIGluIGZhc3QgcmVjb3Zl cnkgKi8NCisjZW5kaWYNCisNCisjaWZkZWYgVENQX1NBQ0sNCisJdGNwX3Nl cSByY3ZfbGFzdHN0YXJ0OwkJLyogc3RhcnQgb2YgbGFzdCBzZWdtZW50IHJl Y2QuICovDQorCXRjcF9zZXEgcmN2X2xhc3RlbmQ7CQkvKiBlbmQgb2YgLi4u ICovDQorCXRjcF9zZXEgcmN2X2xhc3RzYWNrOwkJLyogbGFzdCBzZXEgbnVt YmVyKCsxKSBzYWNrJ2QgYnkgcmN2J3IqLw0KKwlpbnQJcmN2X251bXNhY2tz OwkJLyogIyBkaXN0aW5jdCBzYWNrIGJsa3MgcHJlc2VudCAqLw0KKwlzdHJ1 Y3Qgc2Fja2JsayBzYWNrYmxrc1tNQVhfU0FDS19CTEtTXTsgLyogc2VxIG5v cy4gb2Ygc2FjayBibG9ja3MgKi8NCisjZW5kaWYNCisNCisNCisNCiAJdV9s b25nCXNuZF93bmQ7CQkvKiBzZW5kIHdpbmRvdyAqLw0KIAl1X2xvbmcJc25k X2N3bmQ7CQkvKiBjb25nZXN0aW9uLWNvbnRyb2xsZWQgd2luZG93ICovDQog CXVfbG9uZwlzbmRfc3N0aHJlc2g7CQkvKiBzbmRfY3duZCBzaXplIHRocmVz aG9sZCBmb3INCkBAIC0zMzgsOCArMzc4LDEyIEBADQogI2RlZmluZQlUQ1BD VExfUENCTElTVAkJMTEJLyogbGlzdCBvZiBhbGwgb3V0c3RhbmRpbmcgUENC cyAqLw0KICNkZWZpbmUJVENQQ1RMX0RFTEFDS1RJTUUJMTIJLyogdGltZSBi ZWZvcmUgc2VuZGluZyBkZWxheWVkIEFDSyAqLw0KICNkZWZpbmUJVENQQ1RM X1Y2TVNTREZMVAkxMwkvKiBNU1MgZGVmYXVsdCBmb3IgSVB2NiAqLw0KKyNp ZmRlZiAgVENQX1NBQ0sNCisjZGVmaW5lIFRDUENUTF9TQUNLICAgICAgICAg ICAgIDE0ICAgICAgLypuZWVkcyB0byByZXZpc3QqLw0KKyNkZWZpbmUJVENQ Q1RMX01BWElECQkxNQ0KKyNlbHNlDQogI2RlZmluZQlUQ1BDVExfTUFYSUQJ CTE0DQotDQorI2VuZGlmDQogI2RlZmluZSBUQ1BDVExfTkFNRVMgeyBcDQog CXsgMCwgMCB9LCBcDQogCXsgInJmYzEzMjMiLCBDVExUWVBFX0lOVCB9LCBc DQpAQCAtMzU1LDggKzM5OSwxMSBAQA0KIAl7ICJwY2JsaXN0IiwgQ1RMVFlQ RV9TVFJVQ1QgfSwgXA0KIAl7ICJkZWxhY2t0aW1lIiwgQ1RMVFlQRV9JTlQg fSwgXA0KIAl7ICJ2Nm1zc2RmbHQiLCBDVExUWVBFX0lOVCB9LCBcDQorICAg ICAgICB7ICJzYWNrIiwgICAgICBDVExUWVBFX0lOVH0sIFwNCiB9DQotDQor LyoNCisjZGVmaW5lIFRDUF9TQUNLX0RFQlVHDQorKi8NCiANCiAjaWZkZWYg X0tFUk5FTA0KICNpZmRlZiBTWVNDVExfREVDTA0KQEAgLTM2Nyw2ICs0MTQs OSBAQA0KIGV4dGVybglzdHJ1Y3QgaW5wY2JpbmZvIHRjYmluZm87DQogZXh0 ZXJuCXN0cnVjdCB0Y3BzdGF0IHRjcHN0YXQ7CS8qIHRjcCBzdGF0aXN0aWNz ICovDQogZXh0ZXJuCWludCB0Y3BfbXNzZGZsdDsJLyogWFhYICovDQorI2lm ZGVmIFRDUF9TQUNLDQorZXh0ZXJuCWludCB0Y3BfZG9fc2FjazsJLyogU0FD SyBlbmFibGVkL2Rpc2FibGVkICovDQorI2VuZGlmDQogZXh0ZXJuCWludCB0 Y3BfZGVsYWNrX2VuYWJsZWQ7DQogZXh0ZXJuCWludCB0Y3BfZG9fbmV3cmVu bzsNCiBleHRlcm4JaW50IHNzX2ZsdHN6Ow0KQEAgLTQwNiw3ICs0NTYsMjAg QEANCiAJIHRjcF90aW1lcnMgX19QKChzdHJ1Y3QgdGNwY2IgKiwgaW50KSk7 DQogdm9pZAkgdGNwX3RyYWNlIF9fUCgoaW50LCBpbnQsIHN0cnVjdCB0Y3Bj YiAqLCB2b2lkICosIHN0cnVjdCB0Y3BoZHIgKiwNCiAJCQlpbnQpKTsNCisj aWZkZWYgVENQX1NBQ0sNCitpbnQJIHRjcF9zYWNrX29wdGlvbiBfX1AoKHN0 cnVjdCB0Y3BjYiAqLHN0cnVjdCB0Y3BoZHIgKix1X2NoYXIgKixpbnQpKTsN Cit2b2lkCSB0Y3BfdXBkYXRlX3NhY2tfbGlzdCBfX1AoKHN0cnVjdCB0Y3Bj YiAqdHApKTsNCit2b2lkCSB0Y3BfZGVsX3NhY2tob2xlcyBfX1AoKHN0cnVj dCB0Y3BjYiAqLCBzdHJ1Y3QgdGNwaGRyICopKTsNCit2b2lkCSB0Y3BfY2xl YW5fc2Fja3JlcG9ydCBfX1AoKHN0cnVjdCB0Y3BjYiAqdHApKTsNCit2b2lk CSB0Y3Bfc2Fja19hZGp1c3QgX19QKChzdHJ1Y3QgdGNwY2IgKnRwKSk7DQor c3RydWN0IHNhY2tob2xlICoNCisJIHRjcF9zYWNrX291dHB1dCBfX1AoKHN0 cnVjdCB0Y3BjYiAqdHApKTsNCitpbnQJIHRjcF9zYWNrX3BhcnRpYWxhY2sg X19QKChzdHJ1Y3QgdGNwY2IgKiwgc3RydWN0IHRjcGhkciAqKSk7DQogDQor I2VuZGlmIC8qIFRDUF9TQUNLICovDQorI2lmIGRlZmluZWQoVENQX1NBQ0sp DQordV9sb25nCSB0Y3Bfc2VxX3N1YnRyYWN0ICBfX1AoKHVfbG9uZywgdV9s b25nICkpOyANCisjZW5kaWYgLyogVENQX1NBQ0sgKi8NCiBleHRlcm4Jc3Ry dWN0IHByX3VzcnJlcXMgdGNwX3VzcnJlcXM7DQogZXh0ZXJuCXVfbG9uZyB0 Y3Bfc2VuZHNwYWNlOw0KIGV4dGVybgl1X2xvbmcgdGNwX3JlY3ZzcGFjZTsN Cg== ---904840148-831484259-998525718=:16888-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.LNX.4.33.0108221713240.16888-200000>