From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Anders K. Pedersen | Cohaesio" Subject: Re: [bisected] Forwarded packets occasionally has loopback output interface in Netfilter Date: Wed, 14 Feb 2018 13:34:13 +0000 Message-ID: <1518615241.1215.61.camel@cohaesio.com> References: <1514286320.12738.1.camel@cohaesio.com> <1515691504.1318.9.camel@cohaesio.com> <1516632871.31073.24.camel@cohaesio.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: "netdev@vger.kernel.org" , "netfilter-devel@vger.kernel.org" To: "weiwan@google.com" Return-path: In-Reply-To: <1516632871.31073.24.camel@cohaesio.com> Content-Language: en-US Content-ID: Sender: netfilter-devel-owner@vger.kernel.org List-Id: netdev.vger.kernel.org T24gbWFuLCAyMDE4LTAxLTIyIGF0IDE1OjU0ICswMTAwLCBBbmRlcnMgSy4gUGVkZXJzZW4gfCBD b2hhZXNpbyB3cm90ZToNCj4gT24gdG9yLCAyMDE4LTAxLTExIGF0IDEwOjE4IC0wODAwLCBXZWkg V2FuZyB3cm90ZToNCj4gPiBPbiBUaHUsIEphbiAxMSwgMjAxOCBhdCA5OjI1IEFNLCBBbmRlcnMg Sy4gUGVkZXJzZW4gfCBDb2hhZXNpbw0KPiA+IDxha3BAY29oYWVzaW8uY29tPiB3cm90ZToNCj4g PiA+IE9uIHRpciwgMjAxNy0xMi0yNiBhdCAxMjowNSArMDEwMCwgQW5kZXJzIEsuIFBlZGVyc2Vu IHwgQ29oYWVzaW8NCj4gPiA+IHdyb3RlOg0KPiA+ID4gPiBIZWxsbywNCj4gPiA+ID4gDQo+ID4g PiA+IE9uIG9uZSBvZiBvdXIgYm9yZGVyIHJvdXRlcnMsIE5ldGZpbHRlciBpcyBvY2Nhc2lvbmFs bHkgbG9nZ2luZw0KPiA+ID4gPiBwYWNrZXRzDQo+ID4gPiA+IHdpdGggIk9VVD1sbyIgKG91dHB1 dCBpbnRlcmZhY2UgbG8pIGV2ZW4gdGhvdWdoIHRoZSBwYWNrZXQgc2hvdWxkDQo+ID4gPiA+IGJl DQo+ID4gPiA+IGdvaW5nIG91dCB2aWEgYSByZWd1bGFyIGludGVyZmFjZS4gVGhpcyBiZWhhdmlv ciBpcyBwcmVzZW50IG9uDQo+ID4gPiA+IExpbnV4DQo+ID4gPiA+IDQuMTMuMCB0byA0LjE0Ljks IGFuZCBhIGJpc2VjdGlvbiBvZiB0aGUgcHJvYmxlbSBwb2ludHMgdG8NCj4gPiA+ID4gDQo+ID4g PiA+IFs5NWM0N2Y5Y2Y1ZTAyOGQxYWU3N2RjNmM3NjdjMWVkYzhhMTgwMjViXSBpcHY0OiBjYWxs DQo+ID4gPiA+IGRzdF9kZXZfcHV0KCkgcHJvcGVybHkNCj4gPiA+ID4gDQo+ID4gPiA+IGFzIHRo ZSBmaXJzdCBiYWQgY29tbWl0LiBUaGlzIGNvbW1pdCBhZGRzIGRzdF9kZXZfcHV0KCkgY2FsbHMN Cj4gPiA+ID4gYmVmb3JlDQo+ID4gPiA+IHNvbWUgZHN0X3JlbGVhc2UoKSBjYWxscywgYW5kIGRz dF9kZXZfcHV0KCkgZG9lcw0KPiA+ID4gPiANCj4gPiA+ID4gICAgIGRzdC0+ZGV2ID0gZGV2X25l dChkc3QtPmRldiktPmxvb3BiYWNrX2RldjsNCj4gPiA+ID4gDQo+ID4gPiA+IChhbW9uZyBvdGhl ciB0aGluZ3MpLCB3aGljaCBmaXRzIHRoZSBwcm9ibGVtIHdlJ3JlIHNlZWluZy4NCj4gPiA+ID4g DQo+ID4gPiA+IFRoZSBlc3NlbnRpYWwgcGFydCBvZiBvdXIgbmZ0YWJsZXMgcnVsZSBzZXQgdGhh dCBzaG93cyB0aGlzDQo+ID4gPiA+IGJlaGF2aW9yIGlzDQo+ID4gPiA+IA0KPiA+ID4gPiBjaGFp biBmb3J3YXJkIHsNCj4gPiA+ID4gICAgICAgICAgICAgICAgIHR5cGUgZmlsdGVyIGhvb2sgZm9y d2FyZCBwcmlvcml0eSAwOw0KPiA+ID4gPiANCj4gPiA+ID4gICAgICAgICAgICAgICAgIG1ldGEg b2lmIHsgJGludGVybmFsX2ludGVyZmFjZXMgfSBhY2NlcHQNCj4gPiA+ID4gDQo+ID4gPiA+ICAg ICAgICAgICAgICAgICBtZXRhIG9pZiBsbyBpcCBkYWRkciAhPSAxMjcuMC4wLjAvOCBcDQo+ID4g PiA+ICAgICAgICAgICAgICAgICAgICAgICAgIGxvZyBncm91cCAwIHNuYXBsZW4gODAgcHJlZml4 ICJvaWYtbG8iDQo+ID4gPiA+IGNvdW50ZXINCj4gPiA+ID4gDQo+ID4gPiA+ICAgICAgICAgICAg ICAgICBpcCBzYWRkciB7ICRvdXJfaXBfc2VyaWVzIH0gXA0KPiA+ID4gPiAgICAgICAgICAgICAg ICAgICAgICAgICBmbG93IHRhYmxlIGFjY3Rfb3V0IFwNCj4gPiA+ID4gICAgICAgICAgICAgICAg ICAgICAgICAgeyBtZXRhIG9pZiAuIHJ0IG5leHRob3AgLiBpcCBzYWRkcg0KPiA+ID4gPiB0aW1l b3V0IDEybSBjb3VudGVyIH0gXA0KPiA+ID4gPiAgICAgICAgICAgICAgICAgICAgICAgICBhY2Nl cHQNCj4gPiA+ID4gDQo+ID4gPiA+ICAgICAgICAgICAgICAgICBsb2cgZ3JvdXAgMCBzbmFwbGVu IDgwIHByZWZpeCAiRFJPUCIgY291bnRlciBkcm9wDQo+ID4gPiA+IH0NCj4gPiA+ID4gDQo+ID4g PiA+IFRoZSByb3V0ZXIgb25seSBkb2VzIHN0YXRlbGVzcyBwYWNrZXQgZmlsdGVyaW5nIGFuZCBu bw0KPiA+ID4gPiByZWRpcmVjdGlvbiBvcg0KPiA+ID4gPiByZXdyaXRpbmcgb2YgdGhlIHBhY2tl dHMgKGNvbm5lY3Rpb24gdHJhY2tpbmcsIE5BVCwgaXB2cyBldGMuIGFyZQ0KPiA+ID4gPiBub3QN Cj4gPiA+ID4gZXZlbiBjb21waWxlZCBmb3IgdGhpcyBrZXJuZWwpLg0KPiA+ID4gPiANCj4gPiA+ ID4gQXMgYSByZXN1bHQgb2YgdGhpcyBwcm9ibGVtIHdlIHNlZSBwYWNrZXRzIHRoYXQgc2hvdWxk IGJlIGdvaW5nDQo+ID4gPiA+IHRvIGFuDQo+ID4gPiA+IGludGVybmFsIGludGVyZmFjZSAoYW5k IHRodXMgYWNjZXB0ZWQgYnkgdGhlIGZpcnN0IHJ1bGUgYWJvdmUpDQo+ID4gPiA+IGJlaW5nDQo+ ID4gPiA+IGxvZ2dlZCBhbmQgZHJvcHBlZCBieSB0aGUgbGFzdCBydWxlLiBTb21lIGV4YW1wbGVz Og0KPiA+ID4gPiANCj4gPiA+ID4gRGVjIDIyIDExOjU3OjAyIGNpeDQgb2lmLWxvIElOPWV0aDEw IE9VVD1sbw0KPiA+ID4gPiBNQUM9OTA6ZTI6YmE6NWM6YjY6OTU6MTA6ZjM6MTE6Mzg6MDY6Nzc6 MDg6MDAgU1JDPTgxLjE3MC4xNjMuMTE4DQo+ID4gPiA+IERTVD0yMTIuOTcuMTU4LjMzIExFTj0x NTAwIFRPUz0wMCBQUkVDPTB4MDAgVFRMPTExNiBJRD0yNTkzMiBERg0KPiA+ID4gPiBQUk9UTz1U Q1AgU1BUPTM1MTE4IERQVD04NDQzIFNFUT02MDQzNTgzMzAgQUNLPTExODIyNzg3MDUNCj4gPiA+ ID4gV0lORE9XPTMyOTUgQUNLIFVSR1A9MCBNQVJLPTANCj4gPiA+ID4gRGVjIDIyIDExOjU3OjAy IGNpeDQgRFJPUCBJTj1ldGgxMCBPVVQ9bG8NCj4gPiA+ID4gTUFDPTkwOmUyOmJhOjVjOmI2Ojk1 OjEwOmYzOjExOjM4OjA2Ojc3OjA4OjAwIFNSQz04MS4xNzAuMTYzLjExOA0KPiA+ID4gPiBEU1Q9 MjEyLjk3LjE1OC4zMyBMRU49MTUwMCBUT1M9MDAgUFJFQz0weDAwIFRUTD0xMTYgSUQ9MjU5MzIg REYNCj4gPiA+ID4gUFJPVE89VENQIFNQVD0zNTExOCBEUFQ9ODQ0MyBTRVE9NjA0MzU4MzMwIEFD Sz0xMTgyMjc4NzA1DQo+ID4gPiA+IFdJTkRPVz0zMjk1IEFDSyBVUkdQPTAgTUFSSz0wDQo+ID4g PiA+IA0KPiA+ID4gPiBEZWMgMjIgMTI6NDc6MDcgY2l4NCBvaWYtbG8gSU49ZXRoMTAgT1VUPWxv DQo+ID4gPiA+IE1BQz05MDplMjpiYTo1YzpiNjo5NTowZTo4NjoxMDoyNzo5OTpmMzowODowMCBT UkM9NDAuMTAxLjMwLjE4DQo+ID4gPiA+IERTVD0yMTIuOTcuMTMwLjMyIExFTj0yNDUgVE9TPTAw IFBSRUM9MHgwMCBUVEw9MTE4IElEPTEwMzcwIERGDQo+ID4gPiA+IFBST1RPPVRDUCBTUFQ9NDQz IERQVD00NDk4OCBTRVE9MTE0MTU0NTkxMyBBQ0s9Mzg0NDU3MzEwMw0KPiA+ID4gPiBXSU5ET1c9 NjU1MzUgQUNLIFBTSCBVUkdQPTAgTUFSSz0wDQo+ID4gPiA+IERlYyAyMiAxMjo0NzowNyBjaXg0 IERST1AgSU49ZXRoMTAgT1VUPWxvDQo+ID4gPiA+IE1BQz05MDplMjpiYTo1YzpiNjo5NTowZTo4 NjoxMDoyNzo5OTpmMzowODowMCBTUkM9NDAuMTAxLjMwLjE4DQo+ID4gPiA+IERTVD0yMTIuOTcu MTMwLjMyIExFTj0yNDUgVE9TPTAwIFBSRUM9MHgwMCBUVEw9MTE4IElEPTEwMzcwIERGDQo+ID4g PiA+IFBST1RPPVRDUCBTUFQ9NDQzIERQVD00NDk4OCBTRVE9MTE0MTU0NTkxMyBBQ0s9Mzg0NDU3 MzEwMw0KPiA+ID4gPiBXSU5ET1c9NjU1MzUgQUNLIFBTSCBVUkdQPTAgTUFSSz0wDQo+ID4gPiA+ IA0KPiA+ID4gPiBEZWMgMjIgMTI6NTM6NTYgY2l4NCBvaWYtbG8gSU49ZXRoMTAgT1VUPWxvDQo+ ID4gPiA+IE1BQz05MDplMjpiYTo1YzpiNjo5NTowZTo4NjoxMDoyNzo5OTpmMzowODowMCBTUkM9 NDAuMTAxLjEyLjM0DQo+ID4gPiA+IERTVD0yMTIuOTcuMTMwLjMyIExFTj0yNDUgVE9TPTAwIFBS RUM9MHgwMCBUVEw9MTE1IElEPTI3NzI4IERGDQo+ID4gPiA+IFBST1RPPVRDUCBTUFQ9NDQzIERQ VD0zOTcyNCBTRVE9Mzc5NzE1NjQwNCBBQ0s9Mzk0NDIzNDYxMg0KPiA+ID4gPiBXSU5ET1c9NjU1 MzUgQUNLIFBTSCBVUkdQPTAgTUFSSz0wDQo+ID4gPiA+IERlYyAyMiAxMjo1Mzo1NiBjaXg0IERS T1AgSU49ZXRoMTAgT1VUPWxvDQo+ID4gPiA+IE1BQz05MDplMjpiYTo1YzpiNjo5NTowZTo4Njox MDoyNzo5OTpmMzowODowMCBTUkM9NDAuMTAxLjEyLjM0DQo+ID4gPiA+IERTVD0yMTIuOTcuMTMw LjMyIExFTj0yNDUgVE9TPTAwIFBSRUM9MHgwMCBUVEw9MTE1IElEPTI3NzI4IERGDQo+ID4gPiA+ IFBST1RPPVRDUCBTUFQ9NDQzIERQVD0zOTcyNCBTRVE9Mzc5NzE1NjQwNCBBQ0s9Mzk0NDIzNDYx Mg0KPiA+ID4gPiBXSU5ET1c9NjU1MzUgQUNLIFBTSCBVUkdQPTAgTUFSSz0wDQo+ID4gPiA+IA0K PiA+ID4gPiBJdCBhbHNvIGhhcHBlbnMgZm9yIG91dGJvdW5kIHRyYWZmaWMsIHdoZXJlIHRoZSBw YWNrZXRzIGFyZQ0KPiA+ID4gPiBsb2dnZWQgYW5kDQo+ID4gPiA+IGNvdW50ZWQgaW4gdGhlIGFj Y3Rfb3V0IGZsb3cgdGFibGUgd2l0aCAibWV0YSBvaWYiID0gImxvIiwgYnV0IGENCj4gPiA+ID4g Y29ycmVjdCAicnQgbmV4dGhvcCIgLSBhbiBleGFtcGxlOg0KPiA+ID4gPiANCj4gPiA+ID4gRGVj IDIyIDEyOjI5OjEzIGNpeDQgb2lmLWxvIElOPXRlYW0wLjIwIE9VVD1sbw0KPiA+ID4gPiBNQUM9 M2M6ZmQ6ZmU6MTU6ZGI6YTg6MDA6MjQ6YTg6ZmY6ZjA6MDA6MDg6MDAgU1JDPTIxMi45Ny4xMjku MjUNCj4gPiA+ID4gRFNUPTk1LjE2Ni4xMTkuMTI5IExFTj00MCBUT1M9MDAgUFJFQz0weDAwIFRU TD02MiBJRD0xOTQ4MSBERg0KPiA+ID4gPiBQUk9UTz1UQ1AgU1BUPTQ0MyBEUFQ9NTI1NjAgU0VR PTMwMzQ4MjczOTYgQUNLPTI4NjI4MTQ5MDENCj4gPiA+ID4gV0lORE9XPTEyNjE4IEFDSyBVUkdQ PTAgTUFSSz0wDQo+ID4gPiA+IA0KPiA+ID4gPiAjIG5mdCBsaXN0IGZsb3cgdGFibGUgZmlsdGVy IGFjY3Rfb3V0fHRyICcsJyAnXG4nfGdyZXAgbG8NCj4gPiA+ID4gICAgICAgICBmbG93IHRhYmxl IGFjY3Rfb3V0IHsNCj4gPiA+ID4gICJsbyIgLiA5NC4xMDEuMjA4LjIxNyAuIDIxMi45Ny4xMjku MjUgZXhwaXJlcyAzbTE3cyA6IGNvdW50ZXINCj4gPiA+ID4gcGFja2V0cyAxIGJ5dGVzIDQwDQo+ ID4gPiA+IA0KPiA+ID4gPiBJIGRvbid0IGtub3cgaWYgdGhlc2UgcGFja2V0cyBhcmUgYWN0dWFs bHkgc2VudCBvdXQgb24gdGhlDQo+ID4gPiA+IGNvcnJlY3QNCj4gPiA+ID4gb3V0Ym91bmQgaW50 ZXJmYWNlIHRoYW5rcyB0byB0aGUgcHJvcGVyIG5leHRob3AgKHRoZSBNQUM9DQo+ID4gPiA+IGlu Zm9ybWF0aW9uDQo+ID4gPiA+IGluIHRoZSBOZXRmaWx0ZXIgbG9nIGlzIGZyb20gdGhlIHJlY2Vp dmVkIHBhY2tldCBhbmQgdGh1cyBub3QNCj4gPiA+ID4gdXNlZnVsDQo+ID4gPiA+IGhlcmUpLg0K PiA+ID4gPiANCj4gPiA+ID4gSSB0cmllZCBydW5uaW5nIGEgdGNwZHVtcCBvbiB0aGUgbG8gaW50 ZXJmYWNlIHRvIHNlZSBpZiB0aGVzZQ0KPiA+ID4gPiBwYWNrZXRzDQo+ID4gPiA+IHdvdWxkIHNo b3cgdXAgdGhlcmUsIGJ1dCBkdXJpbmcgdGhlIHRocmVlIGRheXMgSSBoYWQgaXQgcnVubmluZywN Cj4gPiA+ID4gaXQNCj4gPiA+ID4gb25seSBsb2dnZWQgb25lIHN1Y2ggcGFja2V0LCB3aGlsZSBO ZXRmaWx0ZXIgbG9ncyAyMCsgb3V0Ym91bmQNCj4gPiA+ID4gcGFja2V0cw0KPiA+ID4gPiBldmVy eSBkYXksIGFuZCB0aGUgb25lIHBhY2tldCBsb2dnZWQgYnkgdGNwZHVtcCB3YXMgKm5vdCogbG9n Z2VkDQo+ID4gPiA+IGJ5DQo+ID4gPiA+IE5ldGZpbHRlci4NCj4gPiA+IA0KPiA+ID4gRnVydGhl ciB0ZXN0aW5nIG9mIHRoZSBpbmRpdmlkdWFsIHBhcnRzIG9mIHRoZSBmaXJzdCBiYWQgY29tbWl0 DQo+ID4gPiBzaG93cw0KPiA+ID4gdGhhdCB0aGUgZml2ZSBmaXJzdCBhZGRpdGlvbnMgb2YgdGhl IGRzdF9kZXZfcHV0KCkgY2FsbCBkb2Vzbid0DQo+ID4gPiB0cmlnZ2VyDQo+ID4gPiB0aGUgcHJv YmxlbSwgd2hpbGUgdGhlIGxhc3Qgb25lIGRvZXMgKGFsc28gd2l0aG91dCB0aGUgZmlyc3QgZml2 ZSksDQo+ID4gPiBzbw0KPiA+ID4gdGhlIHByb2JsZW1hdGljIHBhcnQgaXM6DQo+ID4gPiANCj4g PiA+IGRpZmYgLS1naXQgYS9uZXQvaXB2NC9yb3V0ZS5jIGIvbmV0L2lwdjQvcm91dGUuYw0KPiA+ ID4gaW5kZXggM2RlZTAwNC4uZDk4NmQ4MCAxMDA2NDQNCj4gPiA+IC0tLSBhL25ldC9pcHY0L3Jv dXRlLmMNCj4gPiA+ICsrKyBiL25ldC9pcHY0L3JvdXRlLmMNCj4gPiA+IEBAIC0xMzY5LDYgKzEz NzIsNyBAQCBzdGF0aWMgYm9vbCBydF9jYWNoZV9yb3V0ZShzdHJ1Y3QgZmliX25oICpuaCwNCj4g PiA+IHN0cnVjdCBydGFibGUgKnJ0KQ0KPiA+ID4gICAgICAgICBwcmV2ID0gY21weGNoZyhwLCBv cmlnLCBydCk7DQo+ID4gPiAgICAgICAgIGlmIChwcmV2ID09IG9yaWcpIHsNCj4gPiA+ICAgICAg ICAgICAgICAgICBpZiAob3JpZykgew0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZHN0 X2Rldl9wdXQoJm9yaWctPmRzdCk7DQo+ID4gPiAgICAgICAgICAgICAgICAgICAgICAgICBkc3Rf cmVsZWFzZSgmb3JpZy0+ZHN0KTsNCj4gPiA+ICAgICAgICAgICAgICAgICAgICAgICAgIHJ0X2Zy ZWUob3JpZyk7DQo+ID4gPiAgICAgICAgICAgICAgICAgfQ0KPiA+ID4gDQo+ID4gDQo+ID4gSGkg QW5kZXJzLA0KPiA+IA0KPiA+IEZpcnN0IG9mIGFsbCwgdGhlIGJhZCBjb21taXQgeW91IHBvaW50 ZWQgdG8gaXMgcGFydCBvZiB0aGUgZWZmb3J0IHRvDQo+ID4gcmVtb3ZlIGRzdCBnYXJiYWdlIGNv bGxlY3Rvci4gQW5kIGl0IGlzIGV4cGVjdGVkIHRoYXQgY2VydGFpbiByb3V0aW5nDQo+ID4gYmVo YXZpb3Igd2lsbCBjaGFuZ2UgYWZ0ZXIgdGhpcyB3aG9sZSBwYXRjaCBzZXQuDQo+ID4gSW4geW91 ciBzcGVjaWZpYyBjYXNlOg0KPiA+IFNwZWNpZmljYWxseSBmb3IgdGhlIG9uZSBsaW5lIGNoYW5n ZSB5b3UgcG9pbnRlZCBhYm92ZSwNCj4gPiBydF9jYWNoZV9yb3V0ZSgpIGlzIGNhbGxlZCB0byBy ZXBsYWNlIGFuIGV4aXN0aW5nIGNhY2hlZCByb3V0ZSB3aXRoIGENCj4gPiBuZXcgb25lIGJlY2F1 c2UgdGhlIGV4aXN0aW5nIGNhY2hlZCByb3V0ZSBpcyBhbHJlYWR5IGludmFsaWQuIEFuZCB0aGUN Cj4gPiBjcml0ZXJpYSB0byBkZXRlcm1pbmUgaWYgaXQgaXMgdmFsaWQgaXMgaW4gcnRfY2FjaGVf dmFsaWQoKS4gSWYgYQ0KPiA+IHJvdXRlIGJlY29tZXMgaW52YWxpZCwgaXQgbWVhbnMgdGhlIHJv dXRlIGlzIGVpdGhlciBiZWluZyBkZWxldGVkLCBvcg0KPiA+IGEgbmV3IHJvdXRlIGlzIGJlaW5n IGluc2VydGVkIHRvIHRoZSBzYW1lIHRhYmxlLCBvciB0aGVyZSBpcyBjZXJ0YWluDQo+ID4gbmV0 ZGV2IGV2ZW50IGhhcHBlbmluZyB0aGF0IGNvdWxkIG1ha2UgdGhpcyByb3V0ZSB1bnVzYWJsZS4N Cj4gDQo+IEhpIFdlaSwNCj4gDQo+IEkgbG9va2VkIGludG8gdGhpcyBhbmQgYWN0aXZhdGVkIGRl YnVnIGxvZ2dpbmcgZm9yIGFsbCByb3V0ZSBjaGFuZ2VzDQo+IGZyb20gdGhlIFF1YWdnYS96ZWJy YSByb3V0aW5nIGRhZW1vbnMsIGFuZCBub25lIG9mIHRoZSBsb2dnZWQgcGFja2V0cw0KPiB3aXRo IE9VVD1sbyBoYXBwZW5lZCB3aXRoaW4gYSBtaW51dGUgb2YgYSByb3V0ZSBjaGFuZ2UgZm9yIGEg cHJlZml4DQo+IHRoYXQgY292ZXJlZCB0aGUgZGVzdGluYXRpb24gSVAgaW4gdGhlIHBhY2tldC4N Cj4gDQo+IEFsc28sIHNvbWUgb2YgdGhlIGxvZ2dlZCBwYWNrZXRzIHdpdGggT1VUPWxvIGFyZSBm b3IgZGVzdGluYXRpb24gSVBzDQo+IHRoYXQgYXJlIG9uIHRoZSBzdWJuZXQgb2YgYSBkaXJlY3Rs eSBjb25uZWN0ZWQgaW50ZXJmYWNlIG9uIHRoZSByb3V0ZXIsDQo+IHNvIHRoZXJlIGFyZSBubyBk eW5hbWljIHJvdXRlIGNoYW5nZXMgYW5kIHRoZXJlIGhhdmVuJ3QgYmVlbiBhbnkgbGluaw0KPiBj aGFuZ2VzIGVpdGhlci4NCj4gDQo+IFdoaWNoIG90aGVyICJjZXJ0YWluIG5ldGRldiBldmVudCIg Y291bGQgY2F1c2UgdGhpcz8NCj4gDQo+ID4gIEluIGFsbA0KPiA+IGNhc2VzLCBhIHJvdXRlIHJl LWxvb2t1cCBpcyByZXF1aXJlZC4gZHN0X2Rldl9wdXQoKSBoZXJlIGRvZXMgY2xlYW51cA0KPiA+ IHdvcmsgdG8gZnJlZSB1cCB0aGUgZGV2aWNlIHJlZmNvdW50IGFuZCBhbGwgcGFja2V0cyB1c2lu ZyB0aGlzIHJvdXRlDQo+ID4gd2lsbCBiZSBkcm9wcGVkLiBBbmQgYXMgeW91IHNhaWQsIHlvdSBk b24ndCByZWFsbHkgc2VlIHRoZSBwYWNrZXRzDQo+ID4gZ29pbmcgb3V0IG9mIGxvLg0KPiANCj4g SSB3cm90ZSB0aGF0IHdlIGRvbid0IHNlZSB0aGUgc2FtZSBwYWNrZXRzIGJlaW5nIGxvZ2dlZCAq YW5kKiBzaG93IHVwDQo+IGluIGEgInRjcGR1bXAgLWkgbG8iLCBidXQgd2UgZG8gc2VlIHBhY2tl dHMgaW4gdGhlIHRjcGR1bXAgdGhhdCBzaG91bGQNCj4gaGF2ZSBiZWVuIHJvdXRlZCBvdXQgYSBy ZWd1bGFyIGludGVyZmFjZSAtIGl0J3MganVzdCBub3QgdGhlIHNhbWUNCj4gcGFja2V0cyB0aGF0 IG5ldGZpbHRlciBpcyBsb2dnaW5nIChhbmQgaXQgaGFwcGVucyBsZXNzIGZyZXF1ZW50bHkpLiBJ dA0KPiBsb29rcyBsaWtlIGl0IGRlcGVuZHMgb24gaG93IGZhciB0aGUgcGFja2V0IGlzIGluIHRo ZSBwYXRoIHRocm91Z2ggdGhlDQo+IGtlcm5lbCwgd2hlbiBkc3RfZGV2X3B1dCgpIGlzIGNhbGxl ZC4NCg0KSSBzcGVudCBzb21lIG1vcmUgdGltZSB0ZXN0aW5nIHRoaXMgaW4gb3JkZXIgdG8gdW5k ZXJzdGFuZCB0aGUgc2NlbmFyaW8NCnRoYXQgY2F1c2VzIHRoaXMuIEl0IHR1cm5zIG91dCB0aGF0 IHRoZSBwYWNrZXRzIGJlaW5nIGRyb3BwZWQgZHVlIHRvDQpPVVQ9bG8gb25seSBoYXBwZW4gZm9y IHRoZSBfX21rcm91dGVfaW5wdXQoKSAtPiBydF9zZXRfbmV4dGhvcCgpIC0+DQpydF9jYWNoZV9y b3V0ZSgpIC0+IGRzdF9kZXZfcHV0KCkgY2FsbCBjaGFpbiwgd2hlbiBydF9jYWNoZV92YWxpZCgp DQpyZXR1cm5zIGZhbHNlIGR1ZSB0byBydF9pc19leHBpcmVkKCksIHdoaWNoIGNvbXBhcmVzIHJ0 aC0+cnRfZ2VuaWQNCndpdGggcnRfZ2VuaWRfaXB2NChkZXZfbmV0KHJ0aC0+ZHN0LmRldikpLg0K DQpUaGUgbGF0dGVyIGlzIGJ1bXBlZCBldmVyeSB0aW1lICphbnkqIGZpYiByb3V0ZSBpcyBjaGFu Z2VkIChhbmQgaW4NCm90aGVyIGNhc2VzKSwgd2hpY2ggdGh1cyBpbnZhbGlkYXRlcyBldmVyeXRo aW5nIGluIHRoZSByb3V0ZSBjYWNoZS4gT24NCmEgcm91dGVyIHdpdGggZnVsbCBCR1AgZmVlZHMg dGhhdCBoYXBwZW5zIHF1aXRlIGZyZXF1ZW50bHksIGFuZCBJDQpiZWxpZXZlIHRoZSBzY2VuYXJp byB3ZSdyZSBzZWVpbmcgaXM6DQoNCi0gUGFja2V0IEEgcmVjZWl2ZWQgZm9yIGRlc3RpbmF0aW9u IFggaXMgYXNzaWduZWQgcnRoIFINCg0KLSBTb21lIHJvdXRlIGluIHRoZSBGSUIgaXMgYWRkZWQs IGRlbGV0ZWQsIG9yIGNoYW5nZWQsIHNvIHJ0X2dlbmlkIGlzDQpidW1wZWQNCg0KLSBQYWNrZXQg QiByZWNlaXZlZCBmb3IgZGVzdGluYXRpb24gWCBiZWZvcmUgcGFja2V0IEEgaGFzIGJlZW4NCmZv cndhcmRlZA0KDQotIF9fbWtyb3V0ZV9pbnB1dCgpIC0+IHJ0X2NhY2hlX3ZhbGlkKCkgLT4gcnRf aXNfZXhwaXJlZCgpIGRldGVybWluZXMNCnRoYXQgcnRoIFIgaXMgbm8gbG9uZ2VyIHZhbGlkDQoN Ci0gQSBuZXcgcnRoIFMgaXMgY3JlYXRlZCBhbmQgcnRoIFIgaXMgaW52YWxpZGF0ZWQgdmlhIF9f bWtyb3V0ZV9pbnB1dCgpDQotPiBydF9zZXRfbmV4dGhvcCgpIC0+IHJ0X2NhY2hlX3JvdXRlKCkg LT4gZHN0X2Rldl9wdXQoKQ0KDQotIFBhY2tldCBBIG5vdyBoYXMgcnRoIFIgd2l0aCBkc3QtPmRl diA9IGRzdC0+b3V0cHV0ID0gZHN0X2Rpc2NhcmRfb3V0DQphbmQgZGV2X25ldChkc3QtPmRldikt Pmxvb3BiYWNrX2RldiBhcyBpdCBtb3ZlcyB0aHJvdWdoIHRoZSBrZXJuZWwNCmZvcndhcmRpbmcg KGFuZCBOZXRmaWx0ZXIpIGxvZ2ljLCBzbyBpdCBnZXRzIGRyb3BwZWQNCg0KVG8gYXZvaWQgdGhp cyBJIGRldmVsb3BlZCB0aGUgcGF0Y2ggYmVsb3csIHdoaWNoIHVwZGF0ZXMgcnRoLT5ydF9nZW5p ZA0KdG8gdGhlIGN1cnJlbnQgdmFsdWUgb2YgcnRfZ2VuaWRfaXB2NChkZXZfbmV0KHJ0aC0+ZHN0 LmRldikpLCBpZiB0aGUNCmluZm9ybWF0aW9uIGluIGl0IGlzIHRoZSBzYW1lIGFzIHdoYXQgd291 bGQgYmUgcHV0IGludG8gYSBuZXcgcnRoLiBUaGlzDQphdm9pZHMgaW52YWxpZGF0aW5nIHRoZSBv bGQgcnRoIGFuZCBhbGxvY2F0aW5nIGEgbmV3IG9uZSB3aXRoIHRoZSBzYW1lDQppbmZvcm1hdGlv biwgYW5kIHBhY2tldCBBIGZyb20gdGhlIHNjZW5hcmlvIGFib3ZlIGlzIG5vIGxvbmdlciBkcm9w cGVkLg0KDQpUaGUgcGF0Y2ggaGFzIGEgbG90IG9mIG5ldF93YXJuX3JhdGVsaW1pdGVkKCkgZm9y IGRlYnVnZ2luZywgYnV0IG5vbmUNCm9mIHRoZW0gaGF2ZSBiZWVuIHRyaWdnZXJlZCBpbiBteSB0 ZXN0aW5nLiBJIGFsc28gcmV2aXZlZCBhbmQgYWJ1c2VkDQp0aGUgaW5faGl0IGNvdW50ZXIgdG8g dmFsaWRhdGUgdGhhdCB0aGUgY29kZSBwYXRoIGlzIGJlaW5nIGhpdC4gQWZ0ZXIgYQ0KZmV3IGRh eXMgd2l0aCB0aGUgcGF0Y2ggdGhlcmUgaGF2ZW4ndCBiZWVuIGFueSBtb3JlIHBhY2tldCBkcm9w cywgYW5kDQp3ZSBoYXZlIHRoZSBmb2xsb3dpbmcgc3RhdGlzdGljczoNCg0KIyBydHN0YXQgLWsg ZW50cmllcyxpbl9oaXQsaW5fc2xvd190b3QsaW5fc2xvd19tYyxpbl9ub19yb3V0ZQ0KcnRfY2Fj aGV8cnRfY2FjaGV8cnRfY2FjaGV8cnRfY2FjaGV8cnRfY2FjaGV8DQogZW50cmllc3wgIGluX2hp dHxpbl9zbG93X3xpbl9zbG93X3xpbl9ub19yb3wNCiAgICAgICAgfCAgICAgICAgfCAgICAgdG90 fCAgICAgIG1jfCAgICAgdXRlfA0KICAgIDEwMTV8IDIzMDU0NjB8IDExNzc2NjJ8ICA3NTg3NjR8 IDEwODA0NDd8DQoNCldvdWxkIGEgY2xlYW5lZCB1cCAoaS5lLiB3aXRob3V0IHRoZSB3YXJuaW5n cyBhbmQgY291bnRlcikgdmVyc2lvbiBvZg0KdGhpcyBwYXRjaCBiZSBhcHByb3ByaWF0ZSBmb3Ig c3VibWlzc2lvbiwgb3IgYXJlIHRoZXJlIGNhc2VzIHdoZXJlIHRoaXMNCndvdWxkIGJyZWFrIHRo aW5ncz8NCg0KLS0tIGxpbnV4LTQuMTQuMTgvaW5jbHVkZS9uZXQvcm91dGUuaC5vcmlnCTIwMTct MTEtMTIgMTk6NDY6MTMuMDAwMDAwMDAwICswMTAwDQorKysgbGludXgtNC4xNC4xOC9pbmNsdWRl L25ldC9yb3V0ZS5oCTIwMTgtMDItMTEgMTE6MjA6MzQuMTMzNzg4NDIwICswMTAwDQpAQCAtOTYs NiArOTYsNyBAQA0KIH07DQogDQogc3RydWN0IHJ0X2NhY2hlX3N0YXQgew0KKyAgICAgICAgdW5z aWduZWQgaW50IGluX2hpdDsNCiAgICAgICAgIHVuc2lnbmVkIGludCBpbl9zbG93X3RvdDsNCiAg ICAgICAgIHVuc2lnbmVkIGludCBpbl9zbG93X21jOw0KICAgICAgICAgdW5zaWduZWQgaW50IGlu X25vX3JvdXRlOw0KLS0tIGxpbnV4LTQuMTQuMTgvbmV0L2lwdjQvcm91dGUuYy5vcmlnCTIwMTgt MDItMTEgMTE6MTI6NDEuODAxMDkzMTE2ICswMTAwDQorKysgbGludXgtNC4xNC4xOC9uZXQvaXB2 NC9yb3V0ZS5jCTIwMTgtMDItMTQgMDc6Mjc6NTQuMjkwMTI0NzM3ICswMTAwDQpAQCAtMjk1LDcg KzI5NSw3IEBADQogCXNlcV9wcmludGYoc2VxLCIlMDh4ICAlMDh4ICUwOHggJTA4eCAlMDh4ICUw OHggJTA4eCAlMDh4ICINCiAJCSAgICIgJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4 eCAlMDh4ICUwOHggXG4iLA0KIAkJICAgZHN0X2VudHJpZXNfZ2V0X3Nsb3coJmlwdjRfZHN0X29w cyksDQotCQkgICAwLCAvKiBzdC0+aW5faGl0ICovDQorCQkgICBzdC0+aW5faGl0LCAvKiAwLCAv ICogc3QtPmluX2hpdCAqLw0KIAkJICAgc3QtPmluX3Nsb3dfdG90LA0KIAkJICAgc3QtPmluX3Ns b3dfbWMsDQogCQkgICBzdC0+aW5fbm9fcm91dGUsDQpAQCAtMTY2OCw2ICsxNjY4LDcgQEANCiB7 DQogCXN0cnVjdCBmaWJfbmhfZXhjZXB0aW9uICpmbmhlOw0KIAlzdHJ1Y3QgcnRhYmxlICpydGg7 DQorCXN0cnVjdCBmaWJfbmggKm5oOw0KIAlpbnQgZXJyOw0KIAlzdHJ1Y3QgaW5fZGV2aWNlICpv dXRfZGV2Ow0KIAlib29sIGRvX2NhY2hlOw0KQEAgLTE3MTMsMjMgKzE3MTQsMTEwIEBADQogDQog CWZuaGUgPSBmaW5kX2V4Y2VwdGlvbigmRklCX1JFU19OSCgqcmVzKSwgZGFkZHIpOw0KIAlpZiAo ZG9fY2FjaGUpIHsNCisJCW5oID0gJkZJQl9SRVNfTkgoKnJlcyk7DQogCQlpZiAoZm5oZSkgew0K IAkJCXJ0aCA9IHJjdV9kZXJlZmVyZW5jZShmbmhlLT5mbmhlX3J0aF9pbnB1dCk7DQogCQkJaWYg KHJ0aCAmJiBydGgtPmRzdC5leHBpcmVzICYmDQogCQkJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywg cnRoLT5kc3QuZXhwaXJlcykpIHsNCi0JCQkJaXBfZGVsX2ZuaGUoJkZJQl9SRVNfTkgoKnJlcyks IGRhZGRyKTsNCisJCQkJaXBfZGVsX2ZuaGUobmgsIGRhZGRyKTsNCiAJCQkJZm5oZSA9IE5VTEw7 DQogCQkJfSBlbHNlIHsNCiAJCQkJZ290byBydF9jYWNoZTsNCiAJCQl9DQogCQl9DQogDQotCQly dGggPSByY3VfZGVyZWZlcmVuY2UoRklCX1JFU19OSCgqcmVzKS5uaF9ydGhfaW5wdXQpOw0KKwkJ cnRoID0gcmN1X2RlcmVmZXJlbmNlKG5oLT5uaF9ydGhfaW5wdXQpOw0KIA0KIHJ0X2NhY2hlOg0K IAkJaWYgKHJ0X2NhY2hlX3ZhbGlkKHJ0aCkpIHsNCiAJCQlza2JfZHN0X3NldF9ub3JlZihza2Is ICZydGgtPmRzdCk7DQogCQkJZ290byBvdXQ7DQorCQl9IGVsc2UgaWYgKHJ0aCAmJg0KKwkJCSAg IHJ0aC0+ZHN0Lm9ic29sZXRlID09IERTVF9PQlNPTEVURV9GT1JDRV9DSEsgJiYNCisJCQkgICBy dGgtPmRzdC5lcnJvciA9PSAwICYmDQorCQkJICAgcnRoLT5kc3QuZGV2ID09IG91dF9kZXYtPmRl diAmJg0KKwkJCSAgIHJ0aC0+ZHN0Lm9wcyA9PSAmaXB2NF9kc3Rfb3BzICYmDQorI2lmZGVmIENP TkZJR19YRlJNDQorCQkJICAgcnRoLT5kc3QueGZybSA9PSBOVUxMICYmDQorI2VuZGlmDQorCQkJ ICAgcnRoLT5kc3QuZmxhZ3MgPT0NCisJCQkJKChJTl9ERVZfQ09ORl9HRVQoaW5fZGV2LCBOT1BP TElDWSkgPw0KKwkJCQkJRFNUX05PUE9MSUNZIDogMCkgfA0KKwkJCQkgKElOX0RFVl9DT05GX0dF VChvdXRfZGV2LCBOT1hGUk0pID8NCisJCQkJCURTVF9OT1hGUk0gOiAwKSkgJiYNCisJCQkgICBy dGgtPmRzdC5sd3RzdGF0ZSA9PSBuaC0+bmhfbHd0c3RhdGUgJiYNCisJCQkgICBydGgtPnJ0X3R5 cGUgPT0gcmVzLT50eXBlICYmDQorCQkJICAgcnRoLT5ydF90YWJsZV9pZCA9PQ0KKwkJCQkocmVz LT50YWJsZSA/IHJlcy0+dGFibGUtPnRiX2lkIDogMCkgJiYNCisJCQkgICBydGgtPnJ0X2dhdGV3 YXkgPT0NCisJCQkJKChuaC0+bmhfZ3cgJiYgbmgtPm5oX3Njb3BlID09IFJUX1NDT1BFX0xJTksp ID8NCisJCQkJIG5oLT5uaF9ndyA6IDApICYmDQorCQkJICAgcnRoLT5ydF91c2VzX2dhdGV3YXkg PT0NCisJCQkJKChuaC0+bmhfZ3cgJiYgbmgtPm5oX3Njb3BlID09IFJUX1NDT1BFX0xJTkspID8N CisJCQkJIDEgOiAwKSkgew0KKwkJCXJ0aC0+cnRfZ2VuaWQgPSBydF9nZW5pZF9pcHY0KGRldl9u ZXQocnRoLT5kc3QuZGV2KSk7DQorCQkJc2tiX2RzdF9zZXRfbm9yZWYoc2tiLCAmcnRoLT5kc3Qp Ow0KKwkJCVJUX0NBQ0hFX1NUQVRfSU5DKGluX2hpdCk7DQorCQkJaWYgKHJ0aC0+ZHN0LmhlYWRl cl9sZW4gIT0gMCkNCisJCQkJbmV0X3dhcm5fcmF0ZWxpbWl0ZWQoInJ0aC0+ZHN0LmhlYWRlcl9s ZW4gKCV4KSAhPSAwXG4iLCBydGgtPmRzdC5oZWFkZXJfbGVuKTsNCisJCQlpZiAocnRoLT5kc3Qu dHJhaWxlcl9sZW4gIT0gMCkNCisJCQkJbmV0X3dhcm5fcmF0ZWxpbWl0ZWQoInJ0aC0+ZHN0LnRy YWlsZXJfbGVuICgleCkgIT0gMFxuIiwgcnRoLT5kc3QudHJhaWxlcl9sZW4pOw0KKwkJCWlmIChy dGgtPnJ0X2lzX2lucHV0ICE9IDEpDQorCQkJCW5ldF93YXJuX3JhdGVsaW1pdGVkKCJydGgtPnJ0 X2lzX2lucHV0ICE9IDFcbiIpOw0KKwkJCWlmIChydGgtPnJ0X2ZsYWdzICE9IDApDQorCQkJCW5l dF93YXJuX3JhdGVsaW1pdGVkKCJydGgtPnJ0X2ZsYWdzICgleCkgIT0gMFxuIiwgcnRoLT5ydF9m bGFncyk7DQorCQkJaWYgKHJ0aC0+cnRfaWlmICE9IDApDQorCQkJCW5ldF93YXJuX3JhdGVsaW1p dGVkKCJydGgtPnJ0X2lpZiAoJXgpICE9IDBcbiIsIHJ0aC0+cnRfaWlmKTsNCisJCQlpZiAocnRo LT5ydF9wbXR1ICE9IDApDQorCQkJCW5ldF93YXJuX3JhdGVsaW1pdGVkKCJydGgtPnJ0X3BtdHUg KCV4KSAhPSAwXG4iLCBydGgtPnJ0X3BtdHUpOw0KKwkJCWlmIChydGgtPmRzdC5vdXRwdXQgIT0g aXBfb3V0cHV0KQ0KKwkJCQluZXRfd2Fybl9yYXRlbGltaXRlZCgicnRoLT5kc3Qub3V0cHV0ICE9 IGlwX291dHB1dFxuIik7DQorCQkJaWYgKHJ0aC0+ZHN0LmlucHV0ICE9IGlwX2ZvcndhcmQpDQor CQkJCW5ldF93YXJuX3JhdGVsaW1pdGVkKCJydGgtPmRzdC5pbnB1dCAhPSBpcF9mb3J3YXJkXG4i KTsNCisJCQlnb3RvIG91dDsNCisJCX0gZWxzZSBpZiAocnRoICYmDQorCQkJICAgcnRoLT5kc3Qu b2Jzb2xldGUgPT0gRFNUX09CU09MRVRFX0ZPUkNFX0NISykgew0KKwkJCWlmIChydGgtPmRzdC5l cnJvciAhPSAwKQ0KKwkJCQluZXRfd2Fybl9yYXRlbGltaXRlZCgicnRoLT5kc3QuZXJyb3IgKCV4 KSAhPSAwXG4iLCBydGgtPmRzdC5lcnJvcik7DQorCQkJaWYgKHJ0aC0+ZHN0LmRldiAhPSBvdXRf ZGV2LT5kZXYpDQorCQkJCW5ldF93YXJuX3JhdGVsaW1pdGVkKCJta3JvdXRlX2lucHV0OiBydGgt PmRzdC5kZXYgIT0gb3V0X2Rldi0+ZGV2XG4iKTsNCisJCQlpZiAocnRoLT5kc3Qub3BzICE9ICZp cHY0X2RzdF9vcHMpDQorCQkJCW5ldF93YXJuX3JhdGVsaW1pdGVkKCJta3JvdXRlX2lucHV0OiBy dGgtPmRzdC5vcHMgIT0gJmlwdjRfZHN0X29wc1xuIik7DQorI2lmZGVmIENPTkZJR19YRlJNDQor CQkJaWYgKHJ0aC0+ZHN0Lnhmcm0gIT0gTlVMTCkNCisJCQkJbmV0X3dhcm5fcmF0ZWxpbWl0ZWQo Im1rcm91dGVfaW5wdXQ6IHJ0aC0+ZHN0Lnhmcm0gIT0gTlVMTFxuIik7DQorI2VuZGlmDQorCQkJ aWYgKHJ0aC0+ZHN0LmZsYWdzICE9DQorCQkJCSgoSU5fREVWX0NPTkZfR0VUKGluX2RldiwgTk9Q T0xJQ1kpID8NCisJCQkJCURTVF9OT1BPTElDWSA6IDApIHwNCisJCQkJKElOX0RFVl9DT05GX0dF VChvdXRfZGV2LCBOT1hGUk0pID8NCisJCQkJCURTVF9OT1hGUk0gOiAwKSkpDQorCQkJCW5ldF93 YXJuX3JhdGVsaW1pdGVkKCJydGgtPmRzdC5mbGFncyAoJXgpICE9ICV4XG4iLA0KKwkJCQkJcnRo LT5kc3QuZmxhZ3MsDQorCQkJCQkoSU5fREVWX0NPTkZfR0VUKGluX2RldiwgTk9QT0xJQ1kpID8N CisJCQkJCQlEU1RfTk9QT0xJQ1kgOiAwKSB8DQorCQkJCQkoSU5fREVWX0NPTkZfR0VUKG91dF9k ZXYsIE5PWEZSTSkgPw0KKwkJCQkJCURTVF9OT1hGUk0gOiAwKSk7DQorCQkJaWYgKHJ0aC0+cnRf dHlwZSAhPSByZXMtPnR5cGUpDQorCQkJCW5ldF93YXJuX3JhdGVsaW1pdGVkKCJydGgtPnJ0X3R5 cGUgKCV4KSAhPSByZXMtPnR5cGUgKCV4KVxuIiwNCisJCQkJCXJ0aC0+cnRfdHlwZSwgcmVzLT50 eXBlKTsNCisJCQlpZiAocnRoLT5ydF90YWJsZV9pZCAhPQ0KKwkJCQkocmVzLT50YWJsZSA/IHJl cy0+dGFibGUtPnRiX2lkIDogMCkpDQorCQkJCW5ldF93YXJuX3JhdGVsaW1pdGVkKCJydGgtPnJ0 X3RhYmxlX2lkICgleCkgIT0gKCV4KVxuIiwNCisJCQkJCXJ0aC0+cnRfdGFibGVfaWQsIHJlcy0+ dGFibGUgPyByZXMtPnRhYmxlLT50Yl9pZCA6IDApOw0KKwkJCWlmIChydGgtPnJ0X2dhdGV3YXkg IT0NCisJCQkJKChuaC0+bmhfZ3cgJiYgbmgtPm5oX3Njb3BlID09IFJUX1NDT1BFX0xJTkspID8N CisJCQkJIG5oLT5uaF9ndyA6IDApKQ0KKwkJCQluZXRfd2Fybl9yYXRlbGltaXRlZCgicnRoLT5y dF9nYXRld2F5ICgleCkgIT0gKCV4KVxuIiwNCisJCQkJCXJ0aC0+cnRfZ2F0ZXdheSwgKG5oLT5u aF9ndyAmJiBuaC0+bmhfc2NvcGUgPT0gUlRfU0NPUEVfTElOSykgPyBuaC0+bmhfZ3cgOiAwKTsN CisJCQlpZiAocnRoLT5ydF91c2VzX2dhdGV3YXkgIT0NCisJCQkJKChuaC0+bmhfZ3cgJiYgbmgt Pm5oX3Njb3BlID09IFJUX1NDT1BFX0xJTkspID8NCisJCQkJIDEgOiAwKSkNCisJCQkJbmV0X3dh cm5fcmF0ZWxpbWl0ZWQoInJ0aC0+cnRfdXNlc19nYXRld2F5ICgleCkgIT0gKCV4KVxuIiwNCisJ CQkJCXJ0aC0+cnRfdXNlc19nYXRld2F5LCAobmgtPm5oX2d3ICYmIG5oLT5uaF9zY29wZSA9PSBS VF9TQ09QRV9MSU5LKSA/IDEgOiAwKTsNCisJCQlpZiAocnRoLT5kc3QubHd0c3RhdGUgIT0gbmgt Pm5oX2x3dHN0YXRlKQ0KKwkJCQluZXRfd2Fybl9yYXRlbGltaXRlZCgicnRoLT5kc3QubHd0c3Rh dGUgKCV4KSAhPSBuaC0+bmhfbHd0c3RhdGUgKCV4KVxuIiwNCisJCQkJCXJ0aC0+ZHN0Lmx3dHN0 YXRlLCBuaC0+bmhfbHd0c3RhdGUpOw0KIAkJfQ0KIAl9DQogDQoNClJlZ2FyZHMsDQpBbmRlcnMg Sy4gUGVkZXJzZW4=