From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Laight Date: Tue, 26 May 2020 16:44:07 +0000 Subject: RE: [PATCH v3 net-next 1/8] sctp: setsockopt, expand some #defines Message-Id: <8bb56a30edfb4ff696d44cf9af909d82@AcuMS.aculab.com> List-Id: References: In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: David Laight , 'Vlad Yasevich' , 'Neil Horman' , "'David S. Miller'" , 'Jakub Kicinski' , "'linux-sctp@vger.kernel.org'" , "'netdev@vger.kernel.org'" , 'Christoph Hellwig' , 'Marcelo Ricardo Leitner' VGhpcyBzaG91bGQgYmUgMy84Lg0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZy b206IG5ldGRldi1vd25lckB2Z2VyLmtlcm5lbC5vcmcgPG5ldGRldi1vd25lckB2Z2VyLmtlcm5l bC5vcmc+IE9uIEJlaGFsZiBPZiBEYXZpZCBMYWlnaHQNCj4gU2VudDogMjYgTWF5IDIwMjAgMTc6 NDANCj4gVG86ICdWbGFkIFlhc2V2aWNoJyA8dnlhc2V2aWNoQGdtYWlsLmNvbT47ICdOZWlsIEhv cm1hbicgPG5ob3JtYW5AdHV4ZHJpdmVyLmNvbT47ICdEYXZpZCBTLiBNaWxsZXInDQo+IDxkYXZl bUBkYXZlbWxvZnQubmV0PjsgJ0pha3ViIEtpY2luc2tpJyA8a3ViYUBrZXJuZWwub3JnPjsgJ2xp bnV4LXNjdHBAdmdlci5rZXJuZWwub3JnJyA8bGludXgtDQo+IHNjdHBAdmdlci5rZXJuZWwub3Jn PjsgJ25ldGRldkB2Z2VyLmtlcm5lbC5vcmcnIDxuZXRkZXZAdmdlci5rZXJuZWwub3JnPjsgJ0No cmlzdG9waCBIZWxsd2lnJw0KPiA8aGNoQGxzdC5kZT47ICdNYXJjZWxvIFJpY2FyZG8gTGVpdG5l cicgPG1hcmNlbG8ubGVpdG5lckBnbWFpbC5jb20+DQo+IFN1YmplY3Q6IFtQQVRDSCB2MyBuZXQt bmV4dCAxLzhdIHNjdHA6IHNldHNvY2tvcHQsIGV4cGFuZCBzb21lICNkZWZpbmVzDQo+IA0KPiBF eHBhbmQgdGhlICNkZWZpbmUgZm9vICgqZm9vKSB1c2VkIHRvIHNpbXBsaWZ5IHRoZSBwcmV2aW91 cyBwYXRjaC4NCj4gRG9lc24ndCBjaGFuZ2UgdGhlIGdlbmVyYXRlZCBjb2RlLg0KPiANCj4gU2ln bmVkLW9mZi1ieTogRGF2aWQgTGFpZ2h0IDxkYXZpZC5sYWlnaHRAYWN1bGFiLmNvbT4NCj4gDQo+ IC0tLQ0KPiAgbmV0L3NjdHAvc29ja2V0LmMgfCA2ODcgKysrKysrKysrKysrKysrKysrKysrKysr KystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ICAxIGZpbGUgY2hhbmdlZCwgMzMxIGlu c2VydGlvbnMoKyksIDM1NiBkZWxldGlvbnMoLSkNCj4gDQo+IGRpZmYgLS1naXQgYS9uZXQvc2N0 cC9zb2NrZXQuYyBiL25ldC9zY3RwL3NvY2tldC5jDQo+IGluZGV4IDYzOWQ3ZGEuLmI4MDY4ZGEg MTAwNjQ0DQo+IC0tLSBhL25ldC9zY3RwL3NvY2tldC5jDQo+ICsrKyBiL25ldC9zY3RwL3NvY2tl dC5jDQo+IEBAIC0yNTg1LDkgKzI1ODUsOCBAQCBzdGF0aWMgaW50IHNjdHBfYXBwbHlfcGVlcl9h ZGRyX3BhcmFtcyhzdHJ1Y3Qgc2N0cF9wYWRkcnBhcmFtcyAqcGFyYW1zLA0KPiAgCXJldHVybiAw Ow0KPiAgfQ0KPiANCj4gLSNkZWZpbmUgcGFyYW1zICgqcGFyYW1zKQ0KPiAgc3RhdGljIGludCBz Y3RwX3NldHNvY2tvcHRfcGVlcl9hZGRyX3BhcmFtcyhzdHJ1Y3Qgc29jayAqc2ssDQo+IC0JCQkJ CSAgICBzdHJ1Y3Qgc2N0cF9wYWRkcnBhcmFtcyBwYXJhbXMsDQo+ICsJCQkJCSAgICBzdHJ1Y3Qg c2N0cF9wYWRkcnBhcmFtcyAqcGFyYW1zLA0KPiAgCQkJCQkgICAgdW5zaWduZWQgaW50IG9wdGxl bikNCj4gIHsNCj4gIAlzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgICAqdHJhbnMgPSBOVUxMOw0KPiBA QCAtMjU5NiwzMyArMjU5NSwzMyBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9wZWVyX2Fk ZHJfcGFyYW1zKHN0cnVjdCBzb2NrICpzaywNCj4gIAlpbnQgZXJyb3I7DQo+ICAJaW50IGhiX2No YW5nZSwgcG10dWRfY2hhbmdlLCBzYWNrZGVsYXlfY2hhbmdlOw0KPiANCj4gLQlpZiAob3B0bGVu ICE9IHNpemVvZihwYXJhbXMpKSB7DQo+ICsJaWYgKG9wdGxlbiAhPSBzaXplb2YoKnBhcmFtcykp IHsNCj4gIAkJaWYgKG9wdGxlbiAhPSBBTElHTihvZmZzZXRvZihzdHJ1Y3Qgc2N0cF9wYWRkcnBh cmFtcywNCj4gIAkJCQkJCSAgICBzcHBfaXB2Nl9mbG93bGFiZWwpLCA0KSkNCj4gIAkJCXJldHVy biAtRUlOVkFMOw0KPiAtCQlpZiAocGFyYW1zLnNwcF9mbGFncyAmIChTUFBfRFNDUCB8IFNQUF9J UFY2X0ZMT1dMQUJFTCkpDQo+ICsJCWlmIChwYXJhbXMtPnNwcF9mbGFncyAmIChTUFBfRFNDUCB8 IFNQUF9JUFY2X0ZMT1dMQUJFTCkpDQo+ICAJCQlyZXR1cm4gLUVJTlZBTDsNCj4gIAl9DQo+IA0K PiAgCS8qIFZhbGlkYXRlIGZsYWdzIGFuZCB2YWx1ZSBwYXJhbWV0ZXJzLiAqLw0KPiAtCWhiX2No YW5nZSAgICAgICAgPSBwYXJhbXMuc3BwX2ZsYWdzICYgU1BQX0hCOw0KPiAtCXBtdHVkX2NoYW5n ZSAgICAgPSBwYXJhbXMuc3BwX2ZsYWdzICYgU1BQX1BNVFVEOw0KPiAtCXNhY2tkZWxheV9jaGFu Z2UgPSBwYXJhbXMuc3BwX2ZsYWdzICYgU1BQX1NBQ0tERUxBWTsNCj4gKwloYl9jaGFuZ2UgICAg ICAgID0gcGFyYW1zLT5zcHBfZmxhZ3MgJiBTUFBfSEI7DQo+ICsJcG10dWRfY2hhbmdlICAgICA9 IHBhcmFtcy0+c3BwX2ZsYWdzICYgU1BQX1BNVFVEOw0KPiArCXNhY2tkZWxheV9jaGFuZ2UgPSBw YXJhbXMtPnNwcF9mbGFncyAmIFNQUF9TQUNLREVMQVk7DQo+IA0KPiAgCWlmIChoYl9jaGFuZ2Ug ICAgICAgID09IFNQUF9IQiB8fA0KPiAgCSAgICBwbXR1ZF9jaGFuZ2UgICAgID09IFNQUF9QTVRV RCB8fA0KPiAgCSAgICBzYWNrZGVsYXlfY2hhbmdlID09IFNQUF9TQUNLREVMQVkgfHwNCj4gLQkg ICAgcGFyYW1zLnNwcF9zYWNrZGVsYXkgPiA1MDAgfHwNCj4gLQkgICAgKHBhcmFtcy5zcHBfcGF0 aG10dSAmJg0KPiAtCSAgICAgcGFyYW1zLnNwcF9wYXRobXR1IDwgU0NUUF9ERUZBVUxUX01JTlNF R01FTlQpKQ0KPiArCSAgICBwYXJhbXMtPnNwcF9zYWNrZGVsYXkgPiA1MDAgfHwNCj4gKwkgICAg KHBhcmFtcy0+c3BwX3BhdGhtdHUgJiYNCj4gKwkgICAgIHBhcmFtcy0+c3BwX3BhdGhtdHUgPCBT Q1RQX0RFRkFVTFRfTUlOU0VHTUVOVCkpDQo+ICAJCXJldHVybiAtRUlOVkFMOw0KPiANCj4gIAkv KiBJZiBhbiBhZGRyZXNzIG90aGVyIHRoYW4gSU5BRERSX0FOWSBpcyBzcGVjaWZpZWQsIGFuZA0K PiAgCSAqIG5vIHRyYW5zcG9ydCBpcyBmb3VuZCwgdGhlbiB0aGUgcmVxdWVzdCBpcyBpbnZhbGlk Lg0KPiAgCSAqLw0KPiAtCWlmICghc2N0cF9pc19hbnkoc2ssICh1bmlvbiBzY3RwX2FkZHIgKikm cGFyYW1zLnNwcF9hZGRyZXNzKSkgew0KPiAtCQl0cmFucyA9IHNjdHBfYWRkcl9pZDJ0cmFuc3Bv cnQoc2ssICZwYXJhbXMuc3BwX2FkZHJlc3MsDQo+IC0JCQkJCSAgICAgICBwYXJhbXMuc3BwX2Fz c29jX2lkKTsNCj4gKwlpZiAoIXNjdHBfaXNfYW55KHNrLCAodW5pb24gc2N0cF9hZGRyICopJnBh cmFtcy0+c3BwX2FkZHJlc3MpKSB7DQo+ICsJCXRyYW5zID0gc2N0cF9hZGRyX2lkMnRyYW5zcG9y dChzaywgJnBhcmFtcy0+c3BwX2FkZHJlc3MsDQo+ICsJCQkJCSAgICAgICBwYXJhbXMtPnNwcF9h c3NvY19pZCk7DQo+ICAJCWlmICghdHJhbnMpDQo+ICAJCQlyZXR1cm4gLUVJTlZBTDsNCj4gIAl9 DQo+IEBAIC0yNjMxLDE5ICsyNjMwLDE5IEBAIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X3Bl ZXJfYWRkcl9wYXJhbXMoc3RydWN0IHNvY2sgKnNrLA0KPiAgCSAqIHNvY2tldCBpcyBhIG9uZSB0 byBtYW55IHN0eWxlIHNvY2tldCwgYW5kIGFuIGFzc29jaWF0aW9uDQo+ICAJICogd2FzIG5vdCBm b3VuZCwgdGhlbiB0aGUgaWQgd2FzIGludmFsaWQuDQo+ICAJICovDQo+IC0JYXNvYyA9IHNjdHBf aWQyYXNzb2Moc2ssIHBhcmFtcy5zcHBfYXNzb2NfaWQpOw0KPiAtCWlmICghYXNvYyAmJiBwYXJh bXMuc3BwX2Fzc29jX2lkICE9IFNDVFBfRlVUVVJFX0FTU09DICYmDQo+ICsJYXNvYyA9IHNjdHBf aWQyYXNzb2Moc2ssIHBhcmFtcy0+c3BwX2Fzc29jX2lkKTsNCj4gKwlpZiAoIWFzb2MgJiYgcGFy YW1zLT5zcHBfYXNzb2NfaWQgIT0gU0NUUF9GVVRVUkVfQVNTT0MgJiYNCj4gIAkgICAgc2N0cF9z dHlsZShzaywgVURQKSkNCj4gIAkJcmV0dXJuIC1FSU5WQUw7DQo+IA0KPiAgCS8qIEhlYXJ0YmVh dCBkZW1hbmQgY2FuIG9ubHkgYmUgc2VudCBvbiBhIHRyYW5zcG9ydCBvcg0KPiAgCSAqIGFzc29j aWF0aW9uLCBidXQgbm90IGEgc29ja2V0Lg0KPiAgCSAqLw0KPiAtCWlmIChwYXJhbXMuc3BwX2Zs YWdzICYgU1BQX0hCX0RFTUFORCAmJiAhdHJhbnMgJiYgIWFzb2MpDQo+ICsJaWYgKHBhcmFtcy0+ c3BwX2ZsYWdzICYgU1BQX0hCX0RFTUFORCAmJiAhdHJhbnMgJiYgIWFzb2MpDQo+ICAJCXJldHVy biAtRUlOVkFMOw0KPiANCj4gIAkvKiBQcm9jZXNzIHBhcmFtZXRlcnMuICovDQo+IC0JZXJyb3Ig PSBzY3RwX2FwcGx5X3BlZXJfYWRkcl9wYXJhbXMoJnBhcmFtcywgdHJhbnMsIGFzb2MsIHNwLA0K PiArCWVycm9yID0gc2N0cF9hcHBseV9wZWVyX2FkZHJfcGFyYW1zKHBhcmFtcywgdHJhbnMsIGFz b2MsIHNwLA0KPiAgCQkJCQkgICAgaGJfY2hhbmdlLCBwbXR1ZF9jaGFuZ2UsDQo+ICAJCQkJCSAg ICBzYWNrZGVsYXlfY2hhbmdlKTsNCj4gDQo+IEBAIC0yNjU2LDcgKzI2NTUsNyBAQCBzdGF0aWMg aW50IHNjdHBfc2V0c29ja29wdF9wZWVyX2FkZHJfcGFyYW1zKHN0cnVjdCBzb2NrICpzaywNCj4g IAlpZiAoIXRyYW5zICYmIGFzb2MpIHsNCj4gIAkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0cmFucywg JmFzb2MtPnBlZXIudHJhbnNwb3J0X2FkZHJfbGlzdCwNCj4gIAkJCQl0cmFuc3BvcnRzKSB7DQo+ IC0JCQlzY3RwX2FwcGx5X3BlZXJfYWRkcl9wYXJhbXMoJnBhcmFtcywgdHJhbnMsIGFzb2MsIHNw LA0KPiArCQkJc2N0cF9hcHBseV9wZWVyX2FkZHJfcGFyYW1zKHBhcmFtcywgdHJhbnMsIGFzb2Ms IHNwLA0KPiAgCQkJCQkJICAgIGhiX2NoYW5nZSwgcG10dWRfY2hhbmdlLA0KPiAgCQkJCQkJICAg IHNhY2tkZWxheV9jaGFuZ2UpOw0KPiAgCQl9DQo+IEBAIC0yNjY0LDcgKzI2NjMsNiBAQCBzdGF0 aWMgaW50IHNjdHBfc2V0c29ja29wdF9wZWVyX2FkZHJfcGFyYW1zKHN0cnVjdCBzb2NrICpzaywN Cj4gDQo+ICAJcmV0dXJuIDA7DQo+ICB9DQo+IC0jdW5kZWYgcGFyYW1zDQo+IA0KPiAgc3RhdGlj IGlubGluZSBfX3UzMiBzY3RwX3NwcF9zYWNrZGVsYXlfZW5hYmxlKF9fdTMyIHBhcmFtX2ZsYWdz KQ0KPiAgew0KPiBAQCAtMjc0OSwxNiArMjc0NywxNSBAQCBzdGF0aWMgdm9pZCBzY3RwX2FwcGx5 X2Fzb2NfZGVsYXllZF9hY2soc3RydWN0IHNjdHBfc2Fja19pbmZvICpwYXJhbXMsDQo+ICAgKiAg ICB2YWx1ZSB0byAxIHdpbGwgZGlzYWJsZSB0aGUgZGVsYXllZCBzYWNrIGFsZ29yaXRobS4NCj4g ICAqLw0KPiANCj4gLSNkZWZpbmUgcGFyYW1zICgqcGFyYW1zKQ0KPiAgc3RhdGljIGludCBzY3Rw X3NldHNvY2tvcHRfZGVsYXllZF9hY2soc3RydWN0IHNvY2sgKnNrLA0KPiAtCQkJCSAgICAgICBz dHJ1Y3Qgc2N0cF9zYWNrX2luZm8gcGFyYW1zLA0KPiArCQkJCSAgICAgICBzdHJ1Y3Qgc2N0cF9z YWNrX2luZm8gKnBhcmFtcywNCj4gIAkJCQkgICAgICAgdW5zaWduZWQgaW50IG9wdGxlbikNCj4g IHsNCj4gIAlzdHJ1Y3Qgc2N0cF9zb2NrICpzcCA9IHNjdHBfc2soc2spOw0KPiAgCXN0cnVjdCBz Y3RwX2Fzc29jaWF0aW9uICphc29jOw0KPiANCj4gIAlpZiAob3B0bGVuID09IHNpemVvZihzdHJ1 Y3Qgc2N0cF9zYWNrX2luZm8pKSB7DQo+IC0JCWlmIChwYXJhbXMuc2Fja19kZWxheSA9PSAwICYm IHBhcmFtcy5zYWNrX2ZyZXEgPT0gMCkNCj4gKwkJaWYgKHBhcmFtcy0+c2Fja19kZWxheSA9PSAw ICYmIHBhcmFtcy0+c2Fja19mcmVxID09IDApDQo+ICAJCQlyZXR1cm4gMDsNCj4gIAl9IGVsc2Ug aWYgKG9wdGxlbiA9PSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpKSB7DQo+ICAJCXBy X3dhcm5fcmF0ZWxpbWl0ZWQoREVQUkVDQVRFRA0KPiBAQCAtMjc2Niw1NiArMjc2Myw1NiBAQCBz dGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9kZWxheWVkX2FjayhzdHJ1Y3Qgc29jayAqc2ssDQo+ ICAJCQkJICAgICJVc2Ugb2Ygc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgaW4gZGVsYXllZF9hY2sg c29ja2V0IG9wdGlvbi5cbiINCj4gIAkJCQkgICAgIlVzZSBzdHJ1Y3Qgc2N0cF9zYWNrX2luZm8g aW5zdGVhZFxuIiwNCj4gIAkJCQkgICAgY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVu dCkpOw0KPiAtCQlpZiAocGFyYW1zLnNhY2tfZGVsYXkgPT0gMCkNCj4gLQkJCXBhcmFtcy5zYWNr X2ZyZXEgPSAxOw0KPiArCQlpZiAocGFyYW1zLT5zYWNrX2RlbGF5ID09IDApDQo+ICsJCQlwYXJh bXMtPnNhY2tfZnJlcSA9IDE7DQo+ICAJCWVsc2UNCj4gLQkJCXBhcmFtcy5zYWNrX2ZyZXEgPSAw Ow0KPiArCQkJcGFyYW1zLT5zYWNrX2ZyZXEgPSAwOw0KPiAgCX0gZWxzZQ0KPiAgCQlyZXR1cm4g LUVJTlZBTDsNCj4gDQo+ICAJLyogVmFsaWRhdGUgdmFsdWUgcGFyYW1ldGVyLiAqLw0KPiAtCWlm IChwYXJhbXMuc2Fja19kZWxheSA+IDUwMCkNCj4gKwlpZiAocGFyYW1zLT5zYWNrX2RlbGF5ID4g NTAwKQ0KPiAgCQlyZXR1cm4gLUVJTlZBTDsNCj4gDQo+ICAJLyogR2V0IGFzc29jaWF0aW9uLCBp ZiBzYWNrX2Fzc29jX2lkICE9IFNDVFBfRlVUVVJFX0FTU09DIGFuZCB0aGUNCj4gIAkgKiBzb2Nr ZXQgaXMgYSBvbmUgdG8gbWFueSBzdHlsZSBzb2NrZXQsIGFuZCBhbiBhc3NvY2lhdGlvbg0KPiAg CSAqIHdhcyBub3QgZm91bmQsIHRoZW4gdGhlIGlkIHdhcyBpbnZhbGlkLg0KPiAgCSAqLw0KPiAt CWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCBwYXJhbXMuc2Fja19hc3NvY19pZCk7DQo+IC0JaWYg KCFhc29jICYmIHBhcmFtcy5zYWNrX2Fzc29jX2lkID4gU0NUUF9BTExfQVNTT0MgJiYNCj4gKwlh c29jID0gc2N0cF9pZDJhc3NvYyhzaywgcGFyYW1zLT5zYWNrX2Fzc29jX2lkKTsNCj4gKwlpZiAo IWFzb2MgJiYgcGFyYW1zLT5zYWNrX2Fzc29jX2lkID4gU0NUUF9BTExfQVNTT0MgJiYNCj4gIAkg ICAgc2N0cF9zdHlsZShzaywgVURQKSkNCj4gIAkJcmV0dXJuIC1FSU5WQUw7DQo+IA0KPiAgCWlm IChhc29jKSB7DQo+IC0JCXNjdHBfYXBwbHlfYXNvY19kZWxheWVkX2FjaygmcGFyYW1zLCBhc29j KTsNCj4gKwkJc2N0cF9hcHBseV9hc29jX2RlbGF5ZWRfYWNrKHBhcmFtcywgYXNvYyk7DQo+IA0K PiAgCQlyZXR1cm4gMDsNCj4gIAl9DQo+IA0KPiAgCWlmIChzY3RwX3N0eWxlKHNrLCBUQ1ApKQ0K PiAtCQlwYXJhbXMuc2Fja19hc3NvY19pZCA9IFNDVFBfRlVUVVJFX0FTU09DOw0KPiArCQlwYXJh bXMtPnNhY2tfYXNzb2NfaWQgPSBTQ1RQX0ZVVFVSRV9BU1NPQzsNCj4gDQo+IC0JaWYgKHBhcmFt cy5zYWNrX2Fzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DIHx8DQo+IC0JICAgIHBhcmFtcy5z YWNrX2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSB7DQo+IC0JCWlmIChwYXJhbXMuc2Fja19k ZWxheSkgew0KPiAtCQkJc3AtPnNhY2tkZWxheSA9IHBhcmFtcy5zYWNrX2RlbGF5Ow0KPiArCWlm IChwYXJhbXMtPnNhY2tfYXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MgfHwNCj4gKwkgICAg cGFyYW1zLT5zYWNrX2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSB7DQo+ICsJCWlmIChwYXJh bXMtPnNhY2tfZGVsYXkpIHsNCj4gKwkJCXNwLT5zYWNrZGVsYXkgPSBwYXJhbXMtPnNhY2tfZGVs YXk7DQo+ICAJCQlzcC0+cGFyYW1fZmxhZ3MgPQ0KPiAgCQkJCXNjdHBfc3BwX3NhY2tkZWxheV9l bmFibGUoc3AtPnBhcmFtX2ZsYWdzKTsNCj4gIAkJfQ0KPiAtCQlpZiAocGFyYW1zLnNhY2tfZnJl cSA9PSAxKSB7DQo+ICsJCWlmIChwYXJhbXMtPnNhY2tfZnJlcSA9PSAxKSB7DQo+ICAJCQlzcC0+ cGFyYW1fZmxhZ3MgPQ0KPiAgCQkJCXNjdHBfc3BwX3NhY2tkZWxheV9kaXNhYmxlKHNwLT5wYXJh bV9mbGFncyk7DQo+IC0JCX0gZWxzZSBpZiAocGFyYW1zLnNhY2tfZnJlcSA+IDEpIHsNCj4gLQkJ CXNwLT5zYWNrZnJlcSA9IHBhcmFtcy5zYWNrX2ZyZXE7DQo+ICsJCX0gZWxzZSBpZiAocGFyYW1z LT5zYWNrX2ZyZXEgPiAxKSB7DQo+ICsJCQlzcC0+c2Fja2ZyZXEgPSBwYXJhbXMtPnNhY2tfZnJl cTsNCj4gIAkJCXNwLT5wYXJhbV9mbGFncyA9DQo+ICAJCQkJc2N0cF9zcHBfc2Fja2RlbGF5X2Vu YWJsZShzcC0+cGFyYW1fZmxhZ3MpOw0KPiAgCQl9DQo+ICAJfQ0KPiANCj4gLQlpZiAocGFyYW1z LnNhY2tfYXNzb2NfaWQgPT0gU0NUUF9DVVJSRU5UX0FTU09DIHx8DQo+IC0JICAgIHBhcmFtcy5z YWNrX2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKQ0KPiArCWlmIChwYXJhbXMtPnNhY2tfYXNz b2NfaWQgPT0gU0NUUF9DVVJSRU5UX0FTU09DIHx8DQo+ICsJICAgIHBhcmFtcy0+c2Fja19hc3Nv Y19pZCA9PSBTQ1RQX0FMTF9BU1NPQykNCj4gIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShhc29jLCAm c3AtPmVwLT5hc29jcywgYXNvY3MpDQo+IC0JCQlzY3RwX2FwcGx5X2Fzb2NfZGVsYXllZF9hY2so JnBhcmFtcywgYXNvYyk7DQo+ICsJCQlzY3RwX2FwcGx5X2Fzb2NfZGVsYXllZF9hY2socGFyYW1z LCBhc29jKTsNCj4gDQo+ICAJcmV0dXJuIDA7DQo+ICB9DQo+IEBAIC0yODMxLDggKzI4MjgsNyBA QCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9kZWxheWVkX2FjayhzdHJ1Y3Qgc29jayAqc2ss DQo+ICAgKiBieSB0aGUgY2hhbmdlKS4gIFdpdGggVENQLXN0eWxlIHNvY2tldHMsIHRoaXMgb3B0 aW9uIGlzIGluaGVyaXRlZCBieQ0KPiAgICogc29ja2V0cyBkZXJpdmVkIGZyb20gYSBsaXN0ZW5l ciBzb2NrZXQuDQo+ICAgKi8NCj4gLSNkZWZpbmUgc2luaXQgKCpzaW5pdCkNCj4gLXN0YXRpYyBp bnQgc2N0cF9zZXRzb2Nrb3B0X2luaXRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2N0cF9p bml0bXNnIHNpbml0LA0KPiArc3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfaW5pdG1zZyhzdHJ1 Y3Qgc29jayAqc2ssIHN0cnVjdCBzY3RwX2luaXRtc2cgKnNpbml0LA0KPiAgCQkJCSAgIHVuc2ln bmVkIGludCBvcHRsZW4pDQo+ICB7DQo+ICAJc3RydWN0IHNjdHBfc29jayAqc3AgPSBzY3RwX3Nr KHNrKTsNCj4gQEAgLTI4NDAsMTggKzI4MzYsMTcgQEAgc3RhdGljIGludCBzY3RwX3NldHNvY2tv cHRfaW5pdG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzY3RwX2luaXRtc2cgc2luaXQsDQo+ ICAJaWYgKG9wdGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfaW5pdG1zZykpDQo+ICAJCXJldHVy biAtRUlOVkFMOw0KPiANCj4gLQlpZiAoc2luaXQuc2luaXRfbnVtX29zdHJlYW1zKQ0KPiAtCQlz cC0+aW5pdG1zZy5zaW5pdF9udW1fb3N0cmVhbXMgPSBzaW5pdC5zaW5pdF9udW1fb3N0cmVhbXM7 DQo+IC0JaWYgKHNpbml0LnNpbml0X21heF9pbnN0cmVhbXMpDQo+IC0JCXNwLT5pbml0bXNnLnNp bml0X21heF9pbnN0cmVhbXMgPSBzaW5pdC5zaW5pdF9tYXhfaW5zdHJlYW1zOw0KPiAtCWlmIChz aW5pdC5zaW5pdF9tYXhfYXR0ZW1wdHMpDQo+IC0JCXNwLT5pbml0bXNnLnNpbml0X21heF9hdHRl bXB0cyA9IHNpbml0LnNpbml0X21heF9hdHRlbXB0czsNCj4gLQlpZiAoc2luaXQuc2luaXRfbWF4 X2luaXRfdGltZW8pDQo+IC0JCXNwLT5pbml0bXNnLnNpbml0X21heF9pbml0X3RpbWVvID0gc2lu aXQuc2luaXRfbWF4X2luaXRfdGltZW87DQo+ICsJaWYgKHNpbml0LT5zaW5pdF9udW1fb3N0cmVh bXMpDQo+ICsJCXNwLT5pbml0bXNnLnNpbml0X251bV9vc3RyZWFtcyA9IHNpbml0LT5zaW5pdF9u dW1fb3N0cmVhbXM7DQo+ICsJaWYgKHNpbml0LT5zaW5pdF9tYXhfaW5zdHJlYW1zKQ0KPiArCQlz cC0+aW5pdG1zZy5zaW5pdF9tYXhfaW5zdHJlYW1zID0gc2luaXQtPnNpbml0X21heF9pbnN0cmVh bXM7DQo+ICsJaWYgKHNpbml0LT5zaW5pdF9tYXhfYXR0ZW1wdHMpDQo+ICsJCXNwLT5pbml0bXNn LnNpbml0X21heF9hdHRlbXB0cyA9IHNpbml0LT5zaW5pdF9tYXhfYXR0ZW1wdHM7DQo+ICsJaWYg KHNpbml0LT5zaW5pdF9tYXhfaW5pdF90aW1lbykNCj4gKwkJc3AtPmluaXRtc2cuc2luaXRfbWF4 X2luaXRfdGltZW8gPSBzaW5pdC0+c2luaXRfbWF4X2luaXRfdGltZW87DQo+IA0KPiAgCXJldHVy biAwOw0KPiAgfQ0KPiAtI3VuZGVmIHNpbml0DQo+IA0KPiAgLyoNCj4gICAqIDcuMS4xNCBTZXQg ZGVmYXVsdCBzZW5kIHBhcmFtZXRlcnMgKFNDVFBfREVGQVVMVF9TRU5EX1BBUkFNKQ0KPiBAQCAt Mjg2Nyw1NiArMjg2Miw1NSBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9pbml0bXNnKHN0 cnVjdCBzb2NrICpzaywgc3RydWN0IHNjdHBfaW5pdG1zZyBzaW5pdCwNCj4gICAqICAgc2luZm9f dGltZXRvbGl2ZS4gIFRoZSB1c2VyIG11c3QgcHJvdmlkZSB0aGUgc2luZm9fYXNzb2NfaWQgZmll bGQgaW4NCj4gICAqICAgdG8gdGhpcyBjYWxsIGlmIHRoZSBjYWxsZXIgaXMgdXNpbmcgdGhlIFVE UCBtb2RlbC4NCj4gICAqLw0KPiAtI2RlZmluZSBpbmZvICgqaW5mbykNCj4gIHN0YXRpYyBpbnQg c2N0cF9zZXRzb2Nrb3B0X2RlZmF1bHRfc2VuZF9wYXJhbShzdHJ1Y3Qgc29jayAqc2ssDQo+IC0J CQkJCSAgICAgIHN0cnVjdCBzY3RwX3NuZHJjdmluZm8gaW5mbywNCj4gKwkJCQkJICAgICAgc3Ry dWN0IHNjdHBfc25kcmN2aW5mbyAqaW5mbywNCj4gIAkJCQkJICAgICAgdW5zaWduZWQgaW50IG9w dGxlbikNCj4gIHsNCj4gIAlzdHJ1Y3Qgc2N0cF9zb2NrICpzcCA9IHNjdHBfc2soc2spOw0KPiAg CXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOw0KPiANCj4gLQlpZiAob3B0bGVuICE9IHNp emVvZihpbmZvKSkNCj4gKwlpZiAob3B0bGVuICE9IHNpemVvZigqaW5mbykpDQo+ICAJCXJldHVy biAtRUlOVkFMOw0KPiAtCWlmIChpbmZvLnNpbmZvX2ZsYWdzICYNCj4gKwlpZiAoaW5mby0+c2lu Zm9fZmxhZ3MgJg0KPiAgCSAgICB+KFNDVFBfVU5PUkRFUkVEIHwgU0NUUF9BRERSX09WRVIgfA0K PiAgCSAgICAgIFNDVFBfQUJPUlQgfCBTQ1RQX0VPRikpDQo+ICAJCXJldHVybiAtRUlOVkFMOw0K PiANCj4gLQlhc29jID0gc2N0cF9pZDJhc3NvYyhzaywgaW5mby5zaW5mb19hc3NvY19pZCk7DQo+ IC0JaWYgKCFhc29jICYmIGluZm8uc2luZm9fYXNzb2NfaWQgPiBTQ1RQX0FMTF9BU1NPQyAmJg0K PiArCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCBpbmZvLT5zaW5mb19hc3NvY19pZCk7DQo+ICsJ aWYgKCFhc29jICYmIGluZm8tPnNpbmZvX2Fzc29jX2lkID4gU0NUUF9BTExfQVNTT0MgJiYNCj4g IAkgICAgc2N0cF9zdHlsZShzaywgVURQKSkNCj4gIAkJcmV0dXJuIC1FSU5WQUw7DQo+IA0KPiAg CWlmIChhc29jKSB7DQo+IC0JCWFzb2MtPmRlZmF1bHRfc3RyZWFtID0gaW5mby5zaW5mb19zdHJl YW07DQo+IC0JCWFzb2MtPmRlZmF1bHRfZmxhZ3MgPSBpbmZvLnNpbmZvX2ZsYWdzOw0KPiAtCQlh c29jLT5kZWZhdWx0X3BwaWQgPSBpbmZvLnNpbmZvX3BwaWQ7DQo+IC0JCWFzb2MtPmRlZmF1bHRf Y29udGV4dCA9IGluZm8uc2luZm9fY29udGV4dDsNCj4gLQkJYXNvYy0+ZGVmYXVsdF90aW1ldG9s aXZlID0gaW5mby5zaW5mb190aW1ldG9saXZlOw0KPiArCQlhc29jLT5kZWZhdWx0X3N0cmVhbSA9 IGluZm8tPnNpbmZvX3N0cmVhbTsNCj4gKwkJYXNvYy0+ZGVmYXVsdF9mbGFncyA9IGluZm8tPnNp bmZvX2ZsYWdzOw0KPiArCQlhc29jLT5kZWZhdWx0X3BwaWQgPSBpbmZvLT5zaW5mb19wcGlkOw0K PiArCQlhc29jLT5kZWZhdWx0X2NvbnRleHQgPSBpbmZvLT5zaW5mb19jb250ZXh0Ow0KPiArCQlh c29jLT5kZWZhdWx0X3RpbWV0b2xpdmUgPSBpbmZvLT5zaW5mb190aW1ldG9saXZlOw0KPiANCj4g IAkJcmV0dXJuIDA7DQo+ICAJfQ0KPiANCj4gIAlpZiAoc2N0cF9zdHlsZShzaywgVENQKSkNCj4g LQkJaW5mby5zaW5mb19hc3NvY19pZCA9IFNDVFBfRlVUVVJFX0FTU09DOw0KPiArCQlpbmZvLT5z aW5mb19hc3NvY19pZCA9IFNDVFBfRlVUVVJFX0FTU09DOw0KPiANCj4gLQlpZiAoaW5mby5zaW5m b19hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQyB8fA0KPiAtCSAgICBpbmZvLnNpbmZvX2Fz c29jX2lkID09IFNDVFBfQUxMX0FTU09DKSB7DQo+IC0JCXNwLT5kZWZhdWx0X3N0cmVhbSA9IGlu Zm8uc2luZm9fc3RyZWFtOw0KPiAtCQlzcC0+ZGVmYXVsdF9mbGFncyA9IGluZm8uc2luZm9fZmxh Z3M7DQo+IC0JCXNwLT5kZWZhdWx0X3BwaWQgPSBpbmZvLnNpbmZvX3BwaWQ7DQo+IC0JCXNwLT5k ZWZhdWx0X2NvbnRleHQgPSBpbmZvLnNpbmZvX2NvbnRleHQ7DQo+IC0JCXNwLT5kZWZhdWx0X3Rp bWV0b2xpdmUgPSBpbmZvLnNpbmZvX3RpbWV0b2xpdmU7DQo+ICsJaWYgKGluZm8tPnNpbmZvX2Fz c29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DIHx8DQo+ICsJICAgIGluZm8tPnNpbmZvX2Fzc29j X2lkID09IFNDVFBfQUxMX0FTU09DKSB7DQo+ICsJCXNwLT5kZWZhdWx0X3N0cmVhbSA9IGluZm8t PnNpbmZvX3N0cmVhbTsNCj4gKwkJc3AtPmRlZmF1bHRfZmxhZ3MgPSBpbmZvLT5zaW5mb19mbGFn czsNCj4gKwkJc3AtPmRlZmF1bHRfcHBpZCA9IGluZm8tPnNpbmZvX3BwaWQ7DQo+ICsJCXNwLT5k ZWZhdWx0X2NvbnRleHQgPSBpbmZvLT5zaW5mb19jb250ZXh0Ow0KPiArCQlzcC0+ZGVmYXVsdF90 aW1ldG9saXZlID0gaW5mby0+c2luZm9fdGltZXRvbGl2ZTsNCj4gIAl9DQo+IA0KPiAtCWlmIChp bmZvLnNpbmZvX2Fzc29jX2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQyB8fA0KPiAtCSAgICBpbmZv LnNpbmZvX2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSB7DQo+ICsJaWYgKGluZm8tPnNpbmZv X2Fzc29jX2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQyB8fA0KPiArCSAgICBpbmZvLT5zaW5mb19h c3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykgew0KPiAgCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFz b2MsICZzcC0+ZXAtPmFzb2NzLCBhc29jcykgew0KPiAtCQkJYXNvYy0+ZGVmYXVsdF9zdHJlYW0g PSBpbmZvLnNpbmZvX3N0cmVhbTsNCj4gLQkJCWFzb2MtPmRlZmF1bHRfZmxhZ3MgPSBpbmZvLnNp bmZvX2ZsYWdzOw0KPiAtCQkJYXNvYy0+ZGVmYXVsdF9wcGlkID0gaW5mby5zaW5mb19wcGlkOw0K PiAtCQkJYXNvYy0+ZGVmYXVsdF9jb250ZXh0ID0gaW5mby5zaW5mb19jb250ZXh0Ow0KPiAtCQkJ YXNvYy0+ZGVmYXVsdF90aW1ldG9saXZlID0gaW5mby5zaW5mb190aW1ldG9saXZlOw0KPiArCQkJ YXNvYy0+ZGVmYXVsdF9zdHJlYW0gPSBpbmZvLT5zaW5mb19zdHJlYW07DQo+ICsJCQlhc29jLT5k ZWZhdWx0X2ZsYWdzID0gaW5mby0+c2luZm9fZmxhZ3M7DQo+ICsJCQlhc29jLT5kZWZhdWx0X3Bw aWQgPSBpbmZvLT5zaW5mb19wcGlkOw0KPiArCQkJYXNvYy0+ZGVmYXVsdF9jb250ZXh0ID0gaW5m by0+c2luZm9fY29udGV4dDsNCj4gKwkJCWFzb2MtPmRlZmF1bHRfdGltZXRvbGl2ZSA9IGluZm8t PnNpbmZvX3RpbWV0b2xpdmU7DQo+ICAJCX0NCj4gIAl9DQo+IA0KPiBAQCAtMjkyNyw1MSArMjky MSw1MSBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9kZWZhdWx0X3NlbmRfcGFyYW0oc3Ry dWN0IHNvY2sgKnNrLA0KPiAgICogKFNDVFBfREVGQVVMVF9TTkRJTkZPKQ0KPiAgICovDQo+ICBz dGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9kZWZhdWx0X3NuZGluZm8oc3RydWN0IHNvY2sgKnNr LA0KPiAtCQkJCQkgICBzdHJ1Y3Qgc2N0cF9zbmRpbmZvIGluZm8sDQo+ICsJCQkJCSAgIHN0cnVj dCBzY3RwX3NuZGluZm8gKmluZm8sDQo+ICAJCQkJCSAgIHVuc2lnbmVkIGludCBvcHRsZW4pDQo+ ICB7DQo+ICAJc3RydWN0IHNjdHBfc29jayAqc3AgPSBzY3RwX3NrKHNrKTsNCj4gIAlzdHJ1Y3Qg c2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsNCj4gDQo+IC0JaWYgKG9wdGxlbiAhPSBzaXplb2YoaW5m bykpDQo+ICsJaWYgKG9wdGxlbiAhPSBzaXplb2YoKmluZm8pKQ0KPiAgCQlyZXR1cm4gLUVJTlZB TDsNCj4gLQlpZiAoaW5mby5zbmRfZmxhZ3MgJg0KPiArCWlmIChpbmZvLT5zbmRfZmxhZ3MgJg0K PiAgCSAgICB+KFNDVFBfVU5PUkRFUkVEIHwgU0NUUF9BRERSX09WRVIgfA0KPiAgCSAgICAgIFND VFBfQUJPUlQgfCBTQ1RQX0VPRikpDQo+ICAJCXJldHVybiAtRUlOVkFMOw0KPiANCj4gLQlhc29j ID0gc2N0cF9pZDJhc3NvYyhzaywgaW5mby5zbmRfYXNzb2NfaWQpOw0KPiAtCWlmICghYXNvYyAm JiBpbmZvLnNuZF9hc3NvY19pZCA+IFNDVFBfQUxMX0FTU09DICYmDQo+ICsJYXNvYyA9IHNjdHBf aWQyYXNzb2Moc2ssIGluZm8tPnNuZF9hc3NvY19pZCk7DQo+ICsJaWYgKCFhc29jICYmIGluZm8t PnNuZF9hc3NvY19pZCA+IFNDVFBfQUxMX0FTU09DICYmDQo+ICAJICAgIHNjdHBfc3R5bGUoc2ss IFVEUCkpDQo+ICAJCXJldHVybiAtRUlOVkFMOw0KPiANCj4gIAlpZiAoYXNvYykgew0KPiAtCQlh c29jLT5kZWZhdWx0X3N0cmVhbSA9IGluZm8uc25kX3NpZDsNCj4gLQkJYXNvYy0+ZGVmYXVsdF9m bGFncyA9IGluZm8uc25kX2ZsYWdzOw0KPiAtCQlhc29jLT5kZWZhdWx0X3BwaWQgPSBpbmZvLnNu ZF9wcGlkOw0KPiAtCQlhc29jLT5kZWZhdWx0X2NvbnRleHQgPSBpbmZvLnNuZF9jb250ZXh0Ow0K PiArCQlhc29jLT5kZWZhdWx0X3N0cmVhbSA9IGluZm8tPnNuZF9zaWQ7DQo+ICsJCWFzb2MtPmRl ZmF1bHRfZmxhZ3MgPSBpbmZvLT5zbmRfZmxhZ3M7DQo+ICsJCWFzb2MtPmRlZmF1bHRfcHBpZCA9 IGluZm8tPnNuZF9wcGlkOw0KPiArCQlhc29jLT5kZWZhdWx0X2NvbnRleHQgPSBpbmZvLT5zbmRf Y29udGV4dDsNCj4gDQo+ICAJCXJldHVybiAwOw0KPiAgCX0NCj4gDQo+ICAJaWYgKHNjdHBfc3R5 bGUoc2ssIFRDUCkpDQo+IC0JCWluZm8uc25kX2Fzc29jX2lkID0gU0NUUF9GVVRVUkVfQVNTT0M7 DQo+ICsJCWluZm8tPnNuZF9hc3NvY19pZCA9IFNDVFBfRlVUVVJFX0FTU09DOw0KPiANCj4gLQlp ZiAoaW5mby5zbmRfYXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MgfHwNCj4gLQkgICAgaW5m by5zbmRfYXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpIHsNCj4gLQkJc3AtPmRlZmF1bHRfc3Ry ZWFtID0gaW5mby5zbmRfc2lkOw0KPiAtCQlzcC0+ZGVmYXVsdF9mbGFncyA9IGluZm8uc25kX2Zs YWdzOw0KPiAtCQlzcC0+ZGVmYXVsdF9wcGlkID0gaW5mby5zbmRfcHBpZDsNCj4gLQkJc3AtPmRl ZmF1bHRfY29udGV4dCA9IGluZm8uc25kX2NvbnRleHQ7DQo+ICsJaWYgKGluZm8tPnNuZF9hc3Nv Y19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQyB8fA0KPiArCSAgICBpbmZvLT5zbmRfYXNzb2NfaWQg PT0gU0NUUF9BTExfQVNTT0MpIHsNCj4gKwkJc3AtPmRlZmF1bHRfc3RyZWFtID0gaW5mby0+c25k X3NpZDsNCj4gKwkJc3AtPmRlZmF1bHRfZmxhZ3MgPSBpbmZvLT5zbmRfZmxhZ3M7DQo+ICsJCXNw LT5kZWZhdWx0X3BwaWQgPSBpbmZvLT5zbmRfcHBpZDsNCj4gKwkJc3AtPmRlZmF1bHRfY29udGV4 dCA9IGluZm8tPnNuZF9jb250ZXh0Ow0KPiAgCX0NCj4gDQo+IC0JaWYgKGluZm8uc25kX2Fzc29j X2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQyB8fA0KPiAtCSAgICBpbmZvLnNuZF9hc3NvY19pZCA9 PSBTQ1RQX0FMTF9BU1NPQykgew0KPiArCWlmIChpbmZvLT5zbmRfYXNzb2NfaWQgPT0gU0NUUF9D VVJSRU5UX0FTU09DIHx8DQo+ICsJICAgIGluZm8tPnNuZF9hc3NvY19pZCA9PSBTQ1RQX0FMTF9B U1NPQykgew0KPiAgCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFzb2MsICZzcC0+ZXAtPmFzb2NzLCBh c29jcykgew0KPiAtCQkJYXNvYy0+ZGVmYXVsdF9zdHJlYW0gPSBpbmZvLnNuZF9zaWQ7DQo+IC0J CQlhc29jLT5kZWZhdWx0X2ZsYWdzID0gaW5mby5zbmRfZmxhZ3M7DQo+IC0JCQlhc29jLT5kZWZh dWx0X3BwaWQgPSBpbmZvLnNuZF9wcGlkOw0KPiAtCQkJYXNvYy0+ZGVmYXVsdF9jb250ZXh0ID0g aW5mby5zbmRfY29udGV4dDsNCj4gKwkJCWFzb2MtPmRlZmF1bHRfc3RyZWFtID0gaW5mby0+c25k X3NpZDsNCj4gKwkJCWFzb2MtPmRlZmF1bHRfZmxhZ3MgPSBpbmZvLT5zbmRfZmxhZ3M7DQo+ICsJ CQlhc29jLT5kZWZhdWx0X3BwaWQgPSBpbmZvLT5zbmRfcHBpZDsNCj4gKwkJCWFzb2MtPmRlZmF1 bHRfY29udGV4dCA9IGluZm8tPnNuZF9jb250ZXh0Ow0KPiAgCQl9DQo+ICAJfQ0KPiANCj4gQEAg LTI5ODQsOCArMjk3OCw3IEBAIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2RlZmF1bHRfc25k aW5mbyhzdHJ1Y3Qgc29jayAqc2ssDQo+ICAgKiB0aGUgYXNzb2NpYXRpb24gcHJpbWFyeS4gIFRo ZSBlbmNsb3NlZCBhZGRyZXNzIG11c3QgYmUgb25lIG9mIHRoZQ0KPiAgICogYXNzb2NpYXRpb24g cGVlcidzIGFkZHJlc3Nlcy4NCj4gICAqLw0KPiAtI2RlZmluZSBwcmltICgqcHJpbSkNCj4gLXN0 YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X3ByaW1hcnlfYWRkcihzdHJ1Y3Qgc29jayAqc2ssIHN0 cnVjdCBzY3RwX3ByaW0gcHJpbSwNCj4gK3N0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X3ByaW1h cnlfYWRkcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzY3RwX3ByaW0gKnByaW0sDQo+ICAJCQkJ CXVuc2lnbmVkIGludCBvcHRsZW4pDQo+ICB7DQo+ICAJc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0 cmFuczsNCj4gQEAgLTI5OTYsMTcgKzI5ODksMTcgQEAgc3RhdGljIGludCBzY3RwX3NldHNvY2tv cHRfcHJpbWFyeV9hZGRyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNjdHBfcHJpbQ0KPiBwcmlt LA0KPiAgCQlyZXR1cm4gLUVJTlZBTDsNCj4gDQo+ICAJLyogQWxsb3cgc2VjdXJpdHkgbW9kdWxl IHRvIHZhbGlkYXRlIGFkZHJlc3MgYnV0IG5lZWQgYWRkcmVzcyBsZW4uICovDQo+IC0JYWYgPSBz Y3RwX2dldF9hZl9zcGVjaWZpYyhwcmltLnNzcF9hZGRyLnNzX2ZhbWlseSk7DQo+ICsJYWYgPSBz Y3RwX2dldF9hZl9zcGVjaWZpYyhwcmltLT5zc3BfYWRkci5zc19mYW1pbHkpOw0KPiAgCWlmICgh YWYpDQo+ICAJCXJldHVybiAtRUlOVkFMOw0KPiANCj4gIAllcnIgPSBzZWN1cml0eV9zY3RwX2Jp bmRfY29ubmVjdChzaywgU0NUUF9QUklNQVJZX0FERFIsDQo+IC0JCQkJCSAoc3RydWN0IHNvY2th ZGRyICopJnByaW0uc3NwX2FkZHIsDQo+ICsJCQkJCSAoc3RydWN0IHNvY2thZGRyICopJnByaW0t PnNzcF9hZGRyLA0KPiAgCQkJCQkgYWYtPnNvY2thZGRyX2xlbik7DQo+ICAJaWYgKGVycikNCj4g IAkJcmV0dXJuIGVycjsNCj4gDQo+IC0JdHJhbnMgPSBzY3RwX2FkZHJfaWQydHJhbnNwb3J0KHNr LCAmcHJpbS5zc3BfYWRkciwgcHJpbS5zc3BfYXNzb2NfaWQpOw0KPiArCXRyYW5zID0gc2N0cF9h ZGRyX2lkMnRyYW5zcG9ydChzaywgJnByaW0tPnNzcF9hZGRyLCBwcmltLT5zc3BfYXNzb2NfaWQp Ow0KPiAgCWlmICghdHJhbnMpDQo+ICAJCXJldHVybiAtRUlOVkFMOw0KPiANCj4gQEAgLTMwMTQs NyArMzAwNyw2IEBAIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X3ByaW1hcnlfYWRkcihzdHJ1 Y3Qgc29jayAqc2ssIHN0cnVjdCBzY3RwX3ByaW0gcHJpbSwNCj4gDQo+ICAJcmV0dXJuIDA7DQo+ ICB9DQo+IC0jdW5kZWYgcHJpbQ0KPiANCj4gIC8qDQo+ICAgKiA3LjEuNSBTQ1RQX05PREVMQVkN Cj4gQEAgLTMwNDcsNyArMzAzOSw3IEBAIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X25vZGVs YXkoc3RydWN0IHNvY2sgKnNrLCBpbnQgKm9wdHZhbCwNCj4gICAqDQo+ICAgKi8NCj4gIHN0YXRp YyBpbnQgc2N0cF9zZXRzb2Nrb3B0X3J0b2luZm8oc3RydWN0IHNvY2sgKnNrLA0KPiAtCQkJCSAg IHN0cnVjdCBzY3RwX3J0b2luZm8gcGFyYW1zLA0KPiArCQkJCSAgIHN0cnVjdCBzY3RwX3J0b2lu Zm8gKnBhcmFtcywNCj4gIAkJCQkgICB1bnNpZ25lZCBpbnQgb3B0bGVuKQ0KPiAgew0KPiAgCXN0 cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOw0KPiBAQCAtMzA1NywxNSArMzA0OSwxNSBAQCBz dGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9ydG9pbmZvKHN0cnVjdCBzb2NrICpzaywNCj4gIAlp ZiAob3B0bGVuICE9IHNpemVvZiAoc3RydWN0IHNjdHBfcnRvaW5mbykpDQo+ICAJCXJldHVybiAt RUlOVkFMOw0KPiANCj4gLQlhc29jID0gc2N0cF9pZDJhc3NvYyhzaywgcGFyYW1zLnNydG9fYXNz b2NfaWQpOw0KPiArCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCBwYXJhbXMtPnNydG9fYXNzb2Nf aWQpOw0KPiANCj4gIAkvKiBTZXQgdGhlIHZhbHVlcyB0byB0aGUgc3BlY2lmaWMgYXNzb2NpYXRp b24gKi8NCj4gLQlpZiAoIWFzb2MgJiYgcGFyYW1zLnNydG9fYXNzb2NfaWQgIT0gU0NUUF9GVVRV UkVfQVNTT0MgJiYNCj4gKwlpZiAoIWFzb2MgJiYgcGFyYW1zLT5zcnRvX2Fzc29jX2lkICE9IFND VFBfRlVUVVJFX0FTU09DICYmDQo+ICAJICAgIHNjdHBfc3R5bGUoc2ssIFVEUCkpDQo+ICAJCXJl dHVybiAtRUlOVkFMOw0KPiANCj4gLQlydG9fbWF4ID0gcGFyYW1zLnNydG9fbWF4Ow0KPiAtCXJ0 b19taW4gPSBwYXJhbXMuc3J0b19taW47DQo+ICsJcnRvX21heCA9IHBhcmFtcy0+c3J0b19tYXg7 DQo+ICsJcnRvX21pbiA9IHBhcmFtcy0+c3J0b19taW47DQo+IA0KPiAgCWlmIChydG9fbWF4KQ0K PiAgCQlydG9fbWF4ID0gYXNvYyA/IG1zZWNzX3RvX2ppZmZpZXMocnRvX21heCkgOiBydG9fbWF4 Ow0KPiBAQCAtMzA4MSwxNyArMzA3MywxNyBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9y dG9pbmZvKHN0cnVjdCBzb2NrICpzaywNCj4gIAkJcmV0dXJuIC1FSU5WQUw7DQo+IA0KPiAgCWlm IChhc29jKSB7DQo+IC0JCWlmIChwYXJhbXMuc3J0b19pbml0aWFsICE9IDApDQo+ICsJCWlmIChw YXJhbXMtPnNydG9faW5pdGlhbCAhPSAwKQ0KPiAgCQkJYXNvYy0+cnRvX2luaXRpYWwgPQ0KPiAt CQkJCW1zZWNzX3RvX2ppZmZpZXMocGFyYW1zLnNydG9faW5pdGlhbCk7DQo+ICsJCQkJbXNlY3Nf dG9famlmZmllcyhwYXJhbXMtPnNydG9faW5pdGlhbCk7DQo+ICAJCWFzb2MtPnJ0b19tYXggPSBy dG9fbWF4Ow0KPiAgCQlhc29jLT5ydG9fbWluID0gcnRvX21pbjsNCj4gIAl9IGVsc2Ugew0KPiAg CQkvKiBJZiB0aGVyZSBpcyBubyBhc3NvY2lhdGlvbiBvciB0aGUgYXNzb2NpYXRpb24taWQgPSAw DQo+ICAJCSAqIHNldCB0aGUgdmFsdWVzIHRvIHRoZSBlbmRwb2ludC4NCj4gIAkJICovDQo+IC0J CWlmIChwYXJhbXMuc3J0b19pbml0aWFsICE9IDApDQo+IC0JCQlzcC0+cnRvaW5mby5zcnRvX2lu aXRpYWwgPSBwYXJhbXMuc3J0b19pbml0aWFsOw0KPiArCQlpZiAocGFyYW1zLT5zcnRvX2luaXRp YWwgIT0gMCkNCj4gKwkJCXNwLT5ydG9pbmZvLnNydG9faW5pdGlhbCA9IHBhcmFtcy0+c3J0b19p bml0aWFsOw0KPiAgCQlzcC0+cnRvaW5mby5zcnRvX21heCA9IHJ0b19tYXg7DQo+ICAJCXNwLT5y dG9pbmZvLnNydG9fbWluID0gcnRvX21pbjsNCj4gIAl9DQo+IEBAIC0zMTExLDcgKzMxMDMsNyBA QCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9ydG9pbmZvKHN0cnVjdCBzb2NrICpzaywNCj4g ICAqDQo+ICAgKi8NCj4gIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2Fzc29jaW5mbyhzdHJ1 Y3Qgc29jayAqc2ssDQo+IC0JCQkJICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY3BhcmFtcyBwYXJhbXMs DQo+ICsJCQkJICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY3BhcmFtcyAqcGFyYW1zLA0KPiAgCQkJCSAg ICAgdW5zaWduZWQgaW50IG9wdGxlbikNCj4gIHsNCj4gDQo+IEBAIC0zMTIwLDE1ICszMTEyLDE1 IEBAIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2Fzc29jaW5mbyhzdHJ1Y3Qgc29jayAqc2ss DQo+ICAJaWYgKG9wdGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NwYXJhbXMpKQ0KPiAg CQlyZXR1cm4gLUVJTlZBTDsNCj4gDQo+IC0JYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ssIHBhcmFt cy5zYXNvY19hc3NvY19pZCk7DQo+ICsJYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ssIHBhcmFtcy0+ c2Fzb2NfYXNzb2NfaWQpOw0KPiANCj4gLQlpZiAoIWFzb2MgJiYgcGFyYW1zLnNhc29jX2Fzc29j X2lkICE9IFNDVFBfRlVUVVJFX0FTU09DICYmDQo+ICsJaWYgKCFhc29jICYmIHBhcmFtcy0+c2Fz b2NfYXNzb2NfaWQgIT0gU0NUUF9GVVRVUkVfQVNTT0MgJiYNCj4gIAkgICAgc2N0cF9zdHlsZShz aywgVURQKSkNCj4gIAkJcmV0dXJuIC1FSU5WQUw7DQo+IA0KPiAgCS8qIFNldCB0aGUgdmFsdWVz IHRvIHRoZSBzcGVjaWZpYyBhc3NvY2lhdGlvbiAqLw0KPiAgCWlmIChhc29jKSB7DQo+IC0JCWlm IChwYXJhbXMuc2Fzb2NfYXNvY21heHJ4dCAhPSAwKSB7DQo+ICsJCWlmIChwYXJhbXMtPnNhc29j X2Fzb2NtYXhyeHQgIT0gMCkgew0KPiAgCQkJX191MzIgcGF0aF9zdW0gPSAwOw0KPiAgCQkJaW50 ICAgcGF0aHMgPSAwOw0KPiAgCQkJc3RydWN0IHNjdHBfdHJhbnNwb3J0ICpwZWVyX2FkZHI7DQo+ IEBAIC0zMTQ1LDI0ICszMTM3LDI0IEBAIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2Fzc29j aW5mbyhzdHJ1Y3Qgc29jayAqc2ssDQo+ICAJCQkgKiB0aGVuIG9uZSBwYXRoLg0KPiAgCQkJICov DQo+ICAJCQlpZiAocGF0aHMgPiAxICYmDQo+IC0JCQkgICAgcGFyYW1zLnNhc29jX2Fzb2NtYXhy eHQgPiBwYXRoX3N1bSkNCj4gKwkJCSAgICBwYXJhbXMtPnNhc29jX2Fzb2NtYXhyeHQgPiBwYXRo X3N1bSkNCj4gIAkJCQlyZXR1cm4gLUVJTlZBTDsNCj4gDQo+IC0JCQlhc29jLT5tYXhfcmV0cmFu cyA9IHBhcmFtcy5zYXNvY19hc29jbWF4cnh0Ow0KPiArCQkJYXNvYy0+bWF4X3JldHJhbnMgPSBw YXJhbXMtPnNhc29jX2Fzb2NtYXhyeHQ7DQo+ICAJCX0NCj4gDQo+IC0JCWlmIChwYXJhbXMuc2Fz b2NfY29va2llX2xpZmUgIT0gMCkNCj4gLQkJCWFzb2MtPmNvb2tpZV9saWZlID0gbXNfdG9fa3Rp bWUocGFyYW1zLnNhc29jX2Nvb2tpZV9saWZlKTsNCj4gKwkJaWYgKHBhcmFtcy0+c2Fzb2NfY29v a2llX2xpZmUgIT0gMCkNCj4gKwkJCWFzb2MtPmNvb2tpZV9saWZlID0gbXNfdG9fa3RpbWUocGFy YW1zLT5zYXNvY19jb29raWVfbGlmZSk7DQo+ICAJfSBlbHNlIHsNCj4gIAkJLyogU2V0IHRoZSB2 YWx1ZXMgdG8gdGhlIGVuZHBvaW50ICovDQo+ICAJCXN0cnVjdCBzY3RwX3NvY2sgKnNwID0gc2N0 cF9zayhzayk7DQo+IA0KPiAtCQlpZiAocGFyYW1zLnNhc29jX2Fzb2NtYXhyeHQgIT0gMCkNCj4g KwkJaWYgKHBhcmFtcy0+c2Fzb2NfYXNvY21heHJ4dCAhPSAwKQ0KPiAgCQkJc3AtPmFzc29jcGFy YW1zLnNhc29jX2Fzb2NtYXhyeHQgPQ0KPiAtCQkJCQkJcGFyYW1zLnNhc29jX2Fzb2NtYXhyeHQ7 DQo+IC0JCWlmIChwYXJhbXMuc2Fzb2NfY29va2llX2xpZmUgIT0gMCkNCj4gKwkJCQkJCXBhcmFt cy0+c2Fzb2NfYXNvY21heHJ4dDsNCj4gKwkJaWYgKHBhcmFtcy0+c2Fzb2NfY29va2llX2xpZmUg IT0gMCkNCj4gIAkJCXNwLT5hc3NvY3BhcmFtcy5zYXNvY19jb29raWVfbGlmZSA9DQo+IC0JCQkJ CQlwYXJhbXMuc2Fzb2NfY29va2llX2xpZmU7DQo+ICsJCQkJCQlwYXJhbXMtPnNhc29jX2Nvb2tp ZV9saWZlOw0KPiAgCX0NCj4gIAlyZXR1cm4gMDsNCj4gIH0NCj4gQEAgLTMyMjAsNyArMzIxMiw3 IEBAIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X21hcHBlZHY0KHN0cnVjdCBzb2NrICpzaywg aW50ICpvcHR2YWwsDQo+ICAgKiBhc3NvY192YWx1ZTogIFRoaXMgcGFyYW1ldGVyIHNwZWNpZmll cyB0aGUgbWF4aW11bSBzaXplIGluIGJ5dGVzLg0KPiAgICovDQo+ICBzdGF0aWMgaW50IHNjdHBf c2V0c29ja29wdF9tYXhzZWcoc3RydWN0IHNvY2sgKnNrLA0KPiAtCQkJCSAgc3RydWN0IHNjdHBf YXNzb2NfdmFsdWUgcGFyYW1zLA0KPiArCQkJCSAgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKnBh cmFtcywNCj4gIAkJCQkgIHVuc2lnbmVkIGludCBvcHRsZW4pDQo+ICB7DQo+ICAJc3RydWN0IHNj dHBfc29jayAqc3AgPSBzY3RwX3NrKHNrKTsNCj4gQEAgLTMyMzMsMTYgKzMyMjUsMTYgQEAgc3Rh dGljIGludCBzY3RwX3NldHNvY2tvcHRfbWF4c2VnKHN0cnVjdCBzb2NrICpzaywNCj4gIAkJCQkg ICAgIlVzZSBvZiBpbnQgaW4gbWF4c2VnIHNvY2tldCBvcHRpb24uXG4iDQo+ICAJCQkJICAgICJV c2Ugc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgaW5zdGVhZFxuIiwNCj4gIAkJCQkgICAgY3VycmVu dC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCkpOw0KPiAtCQl2YWwgPSAqKGludCAqKSZwYXJh bXM7DQo+IC0JCXBhcmFtcy5hc3NvY19pZCA9IFNDVFBfRlVUVVJFX0FTU09DOw0KPiArCQl2YWwg PSAqKGludCAqKXBhcmFtczsNCj4gKwkJcGFyYW1zLT5hc3NvY19pZCA9IFNDVFBfRlVUVVJFX0FT U09DOw0KPiAgCX0gZWxzZSBpZiAob3B0bGVuICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192 YWx1ZSkpIHsNCj4gLQkJdmFsID0gcGFyYW1zLmFzc29jX3ZhbHVlOw0KPiArCQl2YWwgPSBwYXJh bXMtPmFzc29jX3ZhbHVlOw0KPiAgCX0gZWxzZSB7DQo+ICAJCXJldHVybiAtRUlOVkFMOw0KPiAg CX0NCj4gDQo+IC0JYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ssIHBhcmFtcy5hc3NvY19pZCk7DQo+ IC0JaWYgKCFhc29jICYmIHBhcmFtcy5hc3NvY19pZCAhPSBTQ1RQX0ZVVFVSRV9BU1NPQyAmJg0K PiArCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCBwYXJhbXMtPmFzc29jX2lkKTsNCj4gKwlpZiAo IWFzb2MgJiYgcGFyYW1zLT5hc3NvY19pZCAhPSBTQ1RQX0ZVVFVSRV9BU1NPQyAmJg0KPiAgCSAg ICBzY3RwX3N0eWxlKHNrLCBVRFApKQ0KPiAgCQlyZXR1cm4gLUVJTlZBTDsNCj4gDQo+IEBAIC0z Mjc3LDkgKzMyNjksOCBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9tYXhzZWcoc3RydWN0 IHNvY2sgKnNrLA0KPiAgICogICBsb2NhbGx5IGJvdW5kIGFkZHJlc3Nlcy4gVGhlIGZvbGxvd2lu ZyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBtYWtlIGENCj4gICAqICAgc2V0IHByaW1hcnkgcmVxdWVz dDoNCj4gICAqLw0KPiAtI2RlZmluZSBwcmltICgqcHJpbSkNCj4gIHN0YXRpYyBpbnQgc2N0cF9z ZXRzb2Nrb3B0X3BlZXJfcHJpbWFyeV9hZGRyKHN0cnVjdCBzb2NrICpzaywNCj4gLQkJCQkJICAg ICBzdHJ1Y3Qgc2N0cF9zZXRwZWVycHJpbSBwcmltLA0KPiArCQkJCQkgICAgIHN0cnVjdCBzY3Rw X3NldHBlZXJwcmltICpwcmltLA0KPiAgCQkJCQkgICAgIHVuc2lnbmVkIGludCBvcHRsZW4pDQo+ ICB7DQo+ICAJc3RydWN0IHNjdHBfc29jawkqc3A7DQo+IEBAIC0zMjk2LDcgKzMyODcsNyBAQCBz dGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9wZWVyX3ByaW1hcnlfYWRkcihzdHJ1Y3Qgc29jayAq c2ssDQo+ICAJaWYgKG9wdGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfc2V0cGVlcnByaW0pKQ0K PiAgCQlyZXR1cm4gLUVJTlZBTDsNCj4gDQo+IC0JYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ssIHBy aW0uc3NwcF9hc3NvY19pZCk7DQo+ICsJYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ssIHByaW0tPnNz cHBfYXNzb2NfaWQpOw0KPiAgCWlmICghYXNvYykNCj4gIAkJcmV0dXJuIC1FSU5WQUw7DQo+IA0K PiBAQCAtMzMwOSwyNiArMzMwMCwyNiBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9wZWVy X3ByaW1hcnlfYWRkcihzdHJ1Y3Qgc29jayAqc2ssDQo+ICAJaWYgKCFzY3RwX3N0YXRlKGFzb2Ms IEVTVEFCTElTSEVEKSkNCj4gIAkJcmV0dXJuIC1FTk9UQ09OTjsNCj4gDQo+IC0JYWYgPSBzY3Rw X2dldF9hZl9zcGVjaWZpYyhwcmltLnNzcHBfYWRkci5zc19mYW1pbHkpOw0KPiArCWFmID0gc2N0 cF9nZXRfYWZfc3BlY2lmaWMocHJpbS0+c3NwcF9hZGRyLnNzX2ZhbWlseSk7DQo+ICAJaWYgKCFh ZikNCj4gIAkJcmV0dXJuIC1FSU5WQUw7DQo+IA0KPiAtCWlmICghYWYtPmFkZHJfdmFsaWQoKHVu aW9uIHNjdHBfYWRkciAqKSZwcmltLnNzcHBfYWRkciwgc3AsIE5VTEwpKQ0KPiArCWlmICghYWYt PmFkZHJfdmFsaWQoKHVuaW9uIHNjdHBfYWRkciAqKSZwcmltLT5zc3BwX2FkZHIsIHNwLCBOVUxM KSkNCj4gIAkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOw0KPiANCj4gLQlpZiAoIXNjdHBfYXNzb2Nf bG9va3VwX2xhZGRyKGFzb2MsICh1bmlvbiBzY3RwX2FkZHIgKikmcHJpbS5zc3BwX2FkZHIpKQ0K PiArCWlmICghc2N0cF9hc3NvY19sb29rdXBfbGFkZHIoYXNvYywgKHVuaW9uIHNjdHBfYWRkciAq KSZwcmltLT5zc3BwX2FkZHIpKQ0KPiAgCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7DQo+IA0KPiAg CS8qIEFsbG93IHNlY3VyaXR5IG1vZHVsZSB0byB2YWxpZGF0ZSBhZGRyZXNzLiAqLw0KPiAgCWVy ciA9IHNlY3VyaXR5X3NjdHBfYmluZF9jb25uZWN0KHNrLCBTQ1RQX1NFVF9QRUVSX1BSSU1BUllf QUREUiwNCj4gLQkJCQkJIChzdHJ1Y3Qgc29ja2FkZHIgKikmcHJpbS5zc3BwX2FkZHIsDQo+ICsJ CQkJCSAoc3RydWN0IHNvY2thZGRyICopJnByaW0tPnNzcHBfYWRkciwNCj4gIAkJCQkJIGFmLT5z b2NrYWRkcl9sZW4pOw0KPiAgCWlmIChlcnIpDQo+ICAJCXJldHVybiBlcnI7DQo+IA0KPiAgCS8q IENyZWF0ZSBhbiBBU0NPTkYgY2h1bmsgd2l0aCBTRVRfUFJJTUFSWSBwYXJhbWV0ZXIJKi8NCj4g IAljaHVuayA9IHNjdHBfbWFrZV9hc2NvbmZfc2V0X3ByaW0oYXNvYywNCj4gLQkJCQkJICAodW5p b24gc2N0cF9hZGRyICopJnByaW0uc3NwcF9hZGRyKTsNCj4gKwkJCQkJICAodW5pb24gc2N0cF9h ZGRyICopJnByaW0tPnNzcHBfYWRkcik7DQo+ICAJaWYgKCFjaHVuaykNCj4gIAkJcmV0dXJuIC1F Tk9NRU07DQo+IA0KPiBAQCAtMzMzOCw3ICszMzI5LDYgQEAgc3RhdGljIGludCBzY3RwX3NldHNv Y2tvcHRfcGVlcl9wcmltYXJ5X2FkZHIoc3RydWN0IHNvY2sgKnNrLA0KPiANCj4gIAlyZXR1cm4g ZXJyOw0KPiAgfQ0KPiAtI3VuZGVmIHByaW0NCj4gDQo+ICBzdGF0aWMgaW50IHNjdHBfc2V0c29j a29wdF9hZGFwdGF0aW9uX2xheWVyKHN0cnVjdCBzb2NrICpzaywNCj4gIAkJCQkJICAgIHN0cnVj dCBzY3RwX3NldGFkYXB0YXRpb24gKmFkYXB0YXRpb24sDQo+IEBAIC0zMzY3LDcgKzMzNTcsNyBA QCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9hZGFwdGF0aW9uX2xheWVyKHN0cnVjdCBzb2Nr ICpzaywNCj4gICAqIHNhdmVkIHdpdGggb3V0Ym91bmQgbWVzc2FnZXMuDQo+ICAgKi8NCj4gIHN0 YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2NvbnRleHQoc3RydWN0IHNvY2sgKnNrLA0KPiAtCQkJ CSAgIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlIHBhcmFtcywNCj4gKwkJCQkgICBzdHJ1Y3Qgc2N0 cF9hc3NvY192YWx1ZSAqcGFyYW1zLA0KPiAgCQkJCSAgIHVuc2lnbmVkIGludCBvcHRsZW4pDQo+ ICB7DQo+ICAJc3RydWN0IHNjdHBfc29jayAqc3AgPSBzY3RwX3NrKHNrKTsNCj4gQEAgLTMzNzYs MjggKzMzNjYsMjggQEAgc3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfY29udGV4dChzdHJ1Y3Qg c29jayAqc2ssDQo+ICAJaWYgKG9wdGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFs dWUpKQ0KPiAgCQlyZXR1cm4gLUVJTlZBTDsNCj4gDQo+IC0JYXNvYyA9IHNjdHBfaWQyYXNzb2Mo c2ssIHBhcmFtcy5hc3NvY19pZCk7DQo+IC0JaWYgKCFhc29jICYmIHBhcmFtcy5hc3NvY19pZCA+ IFNDVFBfQUxMX0FTU09DICYmDQo+ICsJYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ssIHBhcmFtcy0+ YXNzb2NfaWQpOw0KPiArCWlmICghYXNvYyAmJiBwYXJhbXMtPmFzc29jX2lkID4gU0NUUF9BTExf QVNTT0MgJiYNCj4gIAkgICAgc2N0cF9zdHlsZShzaywgVURQKSkNCj4gIAkJcmV0dXJuIC1FSU5W QUw7DQo+IA0KPiAgCWlmIChhc29jKSB7DQo+IC0JCWFzb2MtPmRlZmF1bHRfcmN2X2NvbnRleHQg PSBwYXJhbXMuYXNzb2NfdmFsdWU7DQo+ICsJCWFzb2MtPmRlZmF1bHRfcmN2X2NvbnRleHQgPSBw YXJhbXMtPmFzc29jX3ZhbHVlOw0KPiANCj4gIAkJcmV0dXJuIDA7DQo+ICAJfQ0KPiANCj4gIAlp ZiAoc2N0cF9zdHlsZShzaywgVENQKSkNCj4gLQkJcGFyYW1zLmFzc29jX2lkID0gU0NUUF9GVVRV UkVfQVNTT0M7DQo+ICsJCXBhcmFtcy0+YXNzb2NfaWQgPSBTQ1RQX0ZVVFVSRV9BU1NPQzsNCj4g DQo+IC0JaWYgKHBhcmFtcy5hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQyB8fA0KPiAtCSAg ICBwYXJhbXMuYXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpDQo+IC0JCXNwLT5kZWZhdWx0X3Jj dl9jb250ZXh0ID0gcGFyYW1zLmFzc29jX3ZhbHVlOw0KPiArCWlmIChwYXJhbXMtPmFzc29jX2lk ID09IFNDVFBfRlVUVVJFX0FTU09DIHx8DQo+ICsJICAgIHBhcmFtcy0+YXNzb2NfaWQgPT0gU0NU UF9BTExfQVNTT0MpDQo+ICsJCXNwLT5kZWZhdWx0X3Jjdl9jb250ZXh0ID0gcGFyYW1zLT5hc3Nv Y192YWx1ZTsNCj4gDQo+IC0JaWYgKHBhcmFtcy5hc3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRfQVNT T0MgfHwNCj4gLQkgICAgcGFyYW1zLmFzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKQ0KPiArCWlm IChwYXJhbXMtPmFzc29jX2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQyB8fA0KPiArCSAgICBwYXJh bXMtPmFzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKQ0KPiAgCQlsaXN0X2Zvcl9lYWNoX2VudHJ5 KGFzb2MsICZzcC0+ZXAtPmFzb2NzLCBhc29jcykNCj4gLQkJCWFzb2MtPmRlZmF1bHRfcmN2X2Nv bnRleHQgPSBwYXJhbXMuYXNzb2NfdmFsdWU7DQo+ICsJCQlhc29jLT5kZWZhdWx0X3Jjdl9jb250 ZXh0ID0gcGFyYW1zLT5hc3NvY192YWx1ZTsNCj4gDQo+ICAJcmV0dXJuIDA7DQo+ICB9DQo+IEBA IC0zNDg4LDcgKzM0NzgsNyBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9wYXJ0aWFsX2Rl bGl2ZXJ5X3BvaW50KHN0cnVjdCBzb2NrICpzaywNCj4gICAqIGZ1dHVyZSBhc3NvY2lhdGlvbnMg aW5oZXJpdGluZyB0aGUgc29ja2V0IHZhbHVlLg0KPiAgICovDQo+ICBzdGF0aWMgaW50IHNjdHBf c2V0c29ja29wdF9tYXhidXJzdChzdHJ1Y3Qgc29jayAqc2ssDQo+IC0JCQkJICAgIHN0cnVjdCBz Y3RwX2Fzc29jX3ZhbHVlIHBhcmFtcywNCj4gKwkJCQkgICAgc3RydWN0IHNjdHBfYXNzb2NfdmFs dWUgKnBhcmFtcywNCj4gIAkJCQkgICAgdW5zaWduZWQgaW50IG9wdGxlbikNCj4gIHsNCj4gIAlz dHJ1Y3Qgc2N0cF9zb2NrICpzcCA9IHNjdHBfc2soc2spOw0KPiBAQCAtMzUwMCwzNCArMzQ5MCwz NCBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9tYXhidXJzdChzdHJ1Y3Qgc29jayAqc2ss DQo+ICAJCQkJICAgICJVc2Ugb2YgaW50IGluIG1heF9idXJzdCBzb2NrZXQgb3B0aW9uIGRlcHJl Y2F0ZWQuXG4iDQo+ICAJCQkJICAgICJVc2Ugc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgaW5zdGVh ZFxuIiwNCj4gIAkJCQkgICAgY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCkpOw0K PiAtCQlwYXJhbXMuYXNzb2NfdmFsdWUgPSAqKGludCAqKSZwYXJhbXM7DQo+IC0JCXBhcmFtcy5h c3NvY19pZCA9IFNDVFBfRlVUVVJFX0FTU09DOw0KPiArCQlwYXJhbXMtPmFzc29jX3ZhbHVlID0g KihpbnQgKilwYXJhbXM7DQo+ICsJCXBhcmFtcy0+YXNzb2NfaWQgPSBTQ1RQX0ZVVFVSRV9BU1NP QzsNCj4gIAl9IGVsc2UgaWYgKG9wdGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFs dWUpKSB7DQo+ICAJCXJldHVybiAtRUlOVkFMOw0KPiAgCX0NCj4gDQo+IC0JYXNvYyA9IHNjdHBf aWQyYXNzb2Moc2ssIHBhcmFtcy5hc3NvY19pZCk7DQo+IC0JaWYgKCFhc29jICYmIHBhcmFtcy5h c3NvY19pZCA+IFNDVFBfQUxMX0FTU09DICYmDQo+ICsJYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ss IHBhcmFtcy0+YXNzb2NfaWQpOw0KPiArCWlmICghYXNvYyAmJiBwYXJhbXMtPmFzc29jX2lkID4g U0NUUF9BTExfQVNTT0MgJiYNCj4gIAkgICAgc2N0cF9zdHlsZShzaywgVURQKSkNCj4gIAkJcmV0 dXJuIC1FSU5WQUw7DQo+IA0KPiAgCWlmIChhc29jKSB7DQo+IC0JCWFzb2MtPm1heF9idXJzdCA9 IHBhcmFtcy5hc3NvY192YWx1ZTsNCj4gKwkJYXNvYy0+bWF4X2J1cnN0ID0gcGFyYW1zLT5hc3Nv Y192YWx1ZTsNCj4gDQo+ICAJCXJldHVybiAwOw0KPiAgCX0NCj4gDQo+ICAJaWYgKHNjdHBfc3R5 bGUoc2ssIFRDUCkpDQo+IC0JCXBhcmFtcy5hc3NvY19pZCA9IFNDVFBfRlVUVVJFX0FTU09DOw0K PiArCQlwYXJhbXMtPmFzc29jX2lkID0gU0NUUF9GVVRVUkVfQVNTT0M7DQo+IA0KPiAtCWlmIChw YXJhbXMuYXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MgfHwNCj4gLQkgICAgcGFyYW1zLmFz c29jX2lkID09IFNDVFBfQUxMX0FTU09DKQ0KPiAtCQlzcC0+bWF4X2J1cnN0ID0gcGFyYW1zLmFz c29jX3ZhbHVlOw0KPiArCWlmIChwYXJhbXMtPmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09D IHx8DQo+ICsJICAgIHBhcmFtcy0+YXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpDQo+ICsJCXNw LT5tYXhfYnVyc3QgPSBwYXJhbXMtPmFzc29jX3ZhbHVlOw0KPiANCj4gLQlpZiAocGFyYW1zLmFz c29jX2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQyB8fA0KPiAtCSAgICBwYXJhbXMuYXNzb2NfaWQg PT0gU0NUUF9BTExfQVNTT0MpDQo+ICsJaWYgKHBhcmFtcy0+YXNzb2NfaWQgPT0gU0NUUF9DVVJS RU5UX0FTU09DIHx8DQo+ICsJICAgIHBhcmFtcy0+YXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0Mp DQo+ICAJCWxpc3RfZm9yX2VhY2hfZW50cnkoYXNvYywgJnNwLT5lcC0+YXNvY3MsIGFzb2NzKQ0K PiAtCQkJYXNvYy0+bWF4X2J1cnN0ID0gcGFyYW1zLmFzc29jX3ZhbHVlOw0KPiArCQkJYXNvYy0+ bWF4X2J1cnN0ID0gcGFyYW1zLT5hc3NvY192YWx1ZTsNCj4gDQo+ICAJcmV0dXJuIDA7DQo+ICB9 DQo+IEBAIC0zNTM5LDkgKzM1MjksOCBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9tYXhi dXJzdChzdHJ1Y3Qgc29jayAqc2ssDQo+ICAgKiByZWNlaXZlZCBvbmx5IGluIGFuIGF1dGhlbnRp Y2F0ZWQgd2F5LiAgQ2hhbmdlcyB0byB0aGUgbGlzdCBvZiBjaHVua3MNCj4gICAqIHdpbGwgb25s eSBlZmZlY3QgZnV0dXJlIGFzc29jaWF0aW9ucyBvbiB0aGUgc29ja2V0Lg0KPiAgICovDQo+IC0j ZGVmaW5lIHZhbCAoKnZhbCkNCj4gIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2F1dGhfY2h1 bmsoc3RydWN0IHNvY2sgKnNrLA0KPiAtCQkJCSAgICAgIHN0cnVjdCBzY3RwX2F1dGhjaHVuayB2 YWwsDQo+ICsJCQkJICAgICAgc3RydWN0IHNjdHBfYXV0aGNodW5rICp2YWwsDQo+ICAJCQkJICAg ICAgdW5zaWduZWQgaW50IG9wdGxlbikNCj4gIHsNCj4gIAlzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAq ZXAgPSBzY3RwX3NrKHNrKS0+ZXA7DQo+IEBAIC0zNTUyLDcgKzM1NDEsNyBAQCBzdGF0aWMgaW50 IHNjdHBfc2V0c29ja29wdF9hdXRoX2NodW5rKHN0cnVjdCBzb2NrICpzaywNCj4gIAlpZiAob3B0 bGVuICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hdXRoY2h1bmspKQ0KPiAgCQlyZXR1cm4gLUVJTlZB TDsNCj4gDQo+IC0Jc3dpdGNoICh2YWwuc2F1dGhfY2h1bmspIHsNCj4gKwlzd2l0Y2ggKHZhbC0+ c2F1dGhfY2h1bmspIHsNCj4gIAljYXNlIFNDVFBfQ0lEX0lOSVQ6DQo+ICAJY2FzZSBTQ1RQX0NJ RF9JTklUX0FDSzoNCj4gIAljYXNlIFNDVFBfQ0lEX1NIVVRET1dOX0NPTVBMRVRFOg0KPiBAQCAt MzU2MSw3ICszNTUwLDcgQEAgc3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfYXV0aF9jaHVuayhz dHJ1Y3Qgc29jayAqc2ssDQo+ICAJfQ0KPiANCj4gIAkvKiBhZGQgdGhpcyBjaHVuayBpZCB0byB0 aGUgZW5kcG9pbnQgKi8NCj4gLQlyZXR1cm4gc2N0cF9hdXRoX2VwX2FkZF9jaHVua2lkKGVwLCB2 YWwuc2F1dGhfY2h1bmspOw0KPiArCXJldHVybiBzY3RwX2F1dGhfZXBfYWRkX2NodW5raWQoZXAs IHZhbC0+c2F1dGhfY2h1bmspOw0KPiAgfQ0KPiANCj4gIC8qDQo+IEBAIC0zNjY2LDcgKzM2NTUs NyBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9hdXRoX2tleShzdHJ1Y3Qgc29jayAqc2ss DQo+ICAgKiB0aGUgYXNzb2NpYXRpb24gc2hhcmVkIGtleS4NCj4gICAqLw0KPiAgc3RhdGljIGlu dCBzY3RwX3NldHNvY2tvcHRfYWN0aXZlX2tleShzdHJ1Y3Qgc29jayAqc2ssDQo+IC0JCQkJICAg ICAgc3RydWN0IHNjdHBfYXV0aGtleWlkIHZhbCwNCj4gKwkJCQkgICAgICBzdHJ1Y3Qgc2N0cF9h dXRoa2V5aWQgKnZhbCwNCj4gIAkJCQkgICAgICB1bnNpZ25lZCBpbnQgb3B0bGVuKQ0KPiAgew0K PiAgCXN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCA9IHNjdHBfc2soc2spLT5lcDsNCj4gQEAgLTM2 NzYsMjkgKzM2NjUsMjkgQEAgc3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfYWN0aXZlX2tleShz dHJ1Y3Qgc29jayAqc2ssDQo+ICAJaWYgKG9wdGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfYXV0 aGtleWlkKSkNCj4gIAkJcmV0dXJuIC1FSU5WQUw7DQo+IA0KPiAtCWFzb2MgPSBzY3RwX2lkMmFz c29jKHNrLCB2YWwuc2NhY3RfYXNzb2NfaWQpOw0KPiAtCWlmICghYXNvYyAmJiB2YWwuc2NhY3Rf YXNzb2NfaWQgPiBTQ1RQX0FMTF9BU1NPQyAmJg0KPiArCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNr LCB2YWwtPnNjYWN0X2Fzc29jX2lkKTsNCj4gKwlpZiAoIWFzb2MgJiYgdmFsLT5zY2FjdF9hc3Nv Y19pZCA+IFNDVFBfQUxMX0FTU09DICYmDQo+ICAJICAgIHNjdHBfc3R5bGUoc2ssIFVEUCkpDQo+ ICAJCXJldHVybiAtRUlOVkFMOw0KPiANCj4gIAlpZiAoYXNvYykNCj4gLQkJcmV0dXJuIHNjdHBf YXV0aF9zZXRfYWN0aXZlX2tleShlcCwgYXNvYywgdmFsLnNjYWN0X2tleW51bWJlcik7DQo+ICsJ CXJldHVybiBzY3RwX2F1dGhfc2V0X2FjdGl2ZV9rZXkoZXAsIGFzb2MsIHZhbC0+c2NhY3Rfa2V5 bnVtYmVyKTsNCj4gDQo+ICAJaWYgKHNjdHBfc3R5bGUoc2ssIFRDUCkpDQo+IC0JCXZhbC5zY2Fj dF9hc3NvY19pZCA9IFNDVFBfRlVUVVJFX0FTU09DOw0KPiArCQl2YWwtPnNjYWN0X2Fzc29jX2lk ID0gU0NUUF9GVVRVUkVfQVNTT0M7DQo+IA0KPiAtCWlmICh2YWwuc2NhY3RfYXNzb2NfaWQgPT0g U0NUUF9GVVRVUkVfQVNTT0MgfHwNCj4gLQkgICAgdmFsLnNjYWN0X2Fzc29jX2lkID09IFNDVFBf QUxMX0FTU09DKSB7DQo+IC0JCXJldCA9IHNjdHBfYXV0aF9zZXRfYWN0aXZlX2tleShlcCwgYXNv YywgdmFsLnNjYWN0X2tleW51bWJlcik7DQo+ICsJaWYgKHZhbC0+c2NhY3RfYXNzb2NfaWQgPT0g U0NUUF9GVVRVUkVfQVNTT0MgfHwNCj4gKwkgICAgdmFsLT5zY2FjdF9hc3NvY19pZCA9PSBTQ1RQ X0FMTF9BU1NPQykgew0KPiArCQlyZXQgPSBzY3RwX2F1dGhfc2V0X2FjdGl2ZV9rZXkoZXAsIGFz b2MsIHZhbC0+c2NhY3Rfa2V5bnVtYmVyKTsNCj4gIAkJaWYgKHJldCkNCj4gIAkJCXJldHVybiBy ZXQ7DQo+ICAJfQ0KPiANCj4gLQlpZiAodmFsLnNjYWN0X2Fzc29jX2lkID09IFNDVFBfQ1VSUkVO VF9BU1NPQyB8fA0KPiAtCSAgICB2YWwuc2NhY3RfYXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0Mp IHsNCj4gKwlpZiAodmFsLT5zY2FjdF9hc3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRfQVNTT0MgfHwN Cj4gKwkgICAgdmFsLT5zY2FjdF9hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykgew0KPiAgCQls aXN0X2Zvcl9lYWNoX2VudHJ5KGFzb2MsICZlcC0+YXNvY3MsIGFzb2NzKSB7DQo+ICAJCQlpbnQg cmVzID0gc2N0cF9hdXRoX3NldF9hY3RpdmVfa2V5KGVwLCBhc29jLA0KPiAtCQkJCQkJCSAgIHZh bC5zY2FjdF9rZXludW1iZXIpOw0KPiArCQkJCQkJCSAgIHZhbC0+c2NhY3Rfa2V5bnVtYmVyKTsN Cj4gDQo+ICAJCQlpZiAocmVzICYmICFyZXQpDQo+ICAJCQkJcmV0ID0gcmVzOw0KPiBAQCAtMzcx NCw3ICszNzAzLDcgQEAgc3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfYWN0aXZlX2tleShzdHJ1 Y3Qgc29jayAqc2ssDQo+ICAgKiBUaGlzIHNldCBvcHRpb24gd2lsbCBkZWxldGUgYSBzaGFyZWQg c2VjcmV0IGtleSBmcm9tIHVzZS4NCj4gICAqLw0KPiAgc3RhdGljIGludCBzY3RwX3NldHNvY2tv cHRfZGVsX2tleShzdHJ1Y3Qgc29jayAqc2ssDQo+IC0JCQkJICAgc3RydWN0IHNjdHBfYXV0aGtl eWlkIHZhbCwNCj4gKwkJCQkgICBzdHJ1Y3Qgc2N0cF9hdXRoa2V5aWQgKnZhbCwNCj4gIAkJCQkg ICB1bnNpZ25lZCBpbnQgb3B0bGVuKQ0KPiAgew0KPiAgCXN0cnVjdCBzY3RwX2VuZHBvaW50ICpl cCA9IHNjdHBfc2soc2spLT5lcDsNCj4gQEAgLTM3MjQsMjkgKzM3MTMsMjkgQEAgc3RhdGljIGlu dCBzY3RwX3NldHNvY2tvcHRfZGVsX2tleShzdHJ1Y3Qgc29jayAqc2ssDQo+ICAJaWYgKG9wdGxl biAhPSBzaXplb2Yoc3RydWN0IHNjdHBfYXV0aGtleWlkKSkNCj4gIAkJcmV0dXJuIC1FSU5WQUw7 DQo+IA0KPiAtCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCB2YWwuc2NhY3RfYXNzb2NfaWQpOw0K PiAtCWlmICghYXNvYyAmJiB2YWwuc2NhY3RfYXNzb2NfaWQgPiBTQ1RQX0FMTF9BU1NPQyAmJg0K PiArCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCB2YWwtPnNjYWN0X2Fzc29jX2lkKTsNCj4gKwlp ZiAoIWFzb2MgJiYgdmFsLT5zY2FjdF9hc3NvY19pZCA+IFNDVFBfQUxMX0FTU09DICYmDQo+ICAJ ICAgIHNjdHBfc3R5bGUoc2ssIFVEUCkpDQo+ICAJCXJldHVybiAtRUlOVkFMOw0KPiANCj4gIAlp ZiAoYXNvYykNCj4gLQkJcmV0dXJuIHNjdHBfYXV0aF9kZWxfa2V5X2lkKGVwLCBhc29jLCB2YWwu c2NhY3Rfa2V5bnVtYmVyKTsNCj4gKwkJcmV0dXJuIHNjdHBfYXV0aF9kZWxfa2V5X2lkKGVwLCBh c29jLCB2YWwtPnNjYWN0X2tleW51bWJlcik7DQo+IA0KPiAgCWlmIChzY3RwX3N0eWxlKHNrLCBU Q1ApKQ0KPiAtCQl2YWwuc2NhY3RfYXNzb2NfaWQgPSBTQ1RQX0ZVVFVSRV9BU1NPQzsNCj4gKwkJ dmFsLT5zY2FjdF9hc3NvY19pZCA9IFNDVFBfRlVUVVJFX0FTU09DOw0KPiANCj4gLQlpZiAodmFs LnNjYWN0X2Fzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DIHx8DQo+IC0JICAgIHZhbC5zY2Fj dF9hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykgew0KPiAtCQlyZXQgPSBzY3RwX2F1dGhfZGVs X2tleV9pZChlcCwgYXNvYywgdmFsLnNjYWN0X2tleW51bWJlcik7DQo+ICsJaWYgKHZhbC0+c2Nh Y3RfYXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MgfHwNCj4gKwkgICAgdmFsLT5zY2FjdF9h c3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykgew0KPiArCQlyZXQgPSBzY3RwX2F1dGhfZGVsX2tl eV9pZChlcCwgYXNvYywgdmFsLT5zY2FjdF9rZXludW1iZXIpOw0KPiAgCQlpZiAocmV0KQ0KPiAg CQkJcmV0dXJuIHJldDsNCj4gIAl9DQo+IA0KPiAtCWlmICh2YWwuc2NhY3RfYXNzb2NfaWQgPT0g U0NUUF9DVVJSRU5UX0FTU09DIHx8DQo+IC0JICAgIHZhbC5zY2FjdF9hc3NvY19pZCA9PSBTQ1RQ X0FMTF9BU1NPQykgew0KPiArCWlmICh2YWwtPnNjYWN0X2Fzc29jX2lkID09IFNDVFBfQ1VSUkVO VF9BU1NPQyB8fA0KPiArCSAgICB2YWwtPnNjYWN0X2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09D KSB7DQo+ICAJCWxpc3RfZm9yX2VhY2hfZW50cnkoYXNvYywgJmVwLT5hc29jcywgYXNvY3MpIHsN Cj4gIAkJCWludCByZXMgPSBzY3RwX2F1dGhfZGVsX2tleV9pZChlcCwgYXNvYywNCj4gLQkJCQkJ CSAgICAgICB2YWwuc2NhY3Rfa2V5bnVtYmVyKTsNCj4gKwkJCQkJCSAgICAgICB2YWwtPnNjYWN0 X2tleW51bWJlcik7DQo+IA0KPiAgCQkJaWYgKHJlcyAmJiAhcmV0KQ0KPiAgCQkJCXJldCA9IHJl czsNCj4gQEAgLTM3NjIsNyArMzc1MSw3IEBAIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2Rl bF9rZXkoc3RydWN0IHNvY2sgKnNrLA0KPiAgICogVGhpcyBzZXQgb3B0aW9uIHdpbGwgZGVhY3Rp dmF0ZSBhIHNoYXJlZCBzZWNyZXQga2V5Lg0KPiAgICovDQo+ICBzdGF0aWMgaW50IHNjdHBfc2V0 c29ja29wdF9kZWFjdGl2YXRlX2tleShzdHJ1Y3Qgc29jayAqc2ssDQo+IC0JCQkJCSAgc3RydWN0 IHNjdHBfYXV0aGtleWlkIHZhbCwNCj4gKwkJCQkJICBzdHJ1Y3Qgc2N0cF9hdXRoa2V5aWQgKnZh bCwNCj4gIAkJCQkJICB1bnNpZ25lZCBpbnQgb3B0bGVuKQ0KPiAgew0KPiAgCXN0cnVjdCBzY3Rw X2VuZHBvaW50ICplcCA9IHNjdHBfc2soc2spLT5lcDsNCj4gQEAgLTM3NzIsMjkgKzM3NjEsMjkg QEAgc3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfZGVhY3RpdmF0ZV9rZXkoc3RydWN0IHNvY2sg KnNrLA0KPiAgCWlmIChvcHRsZW4gIT0gc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhrZXlpZCkpDQo+ ICAJCXJldHVybiAtRUlOVkFMOw0KPiANCj4gLQlhc29jID0gc2N0cF9pZDJhc3NvYyhzaywgdmFs LnNjYWN0X2Fzc29jX2lkKTsNCj4gLQlpZiAoIWFzb2MgJiYgdmFsLnNjYWN0X2Fzc29jX2lkID4g U0NUUF9BTExfQVNTT0MgJiYNCj4gKwlhc29jID0gc2N0cF9pZDJhc3NvYyhzaywgdmFsLT5zY2Fj dF9hc3NvY19pZCk7DQo+ICsJaWYgKCFhc29jICYmIHZhbC0+c2NhY3RfYXNzb2NfaWQgPiBTQ1RQ X0FMTF9BU1NPQyAmJg0KPiAgCSAgICBzY3RwX3N0eWxlKHNrLCBVRFApKQ0KPiAgCQlyZXR1cm4g LUVJTlZBTDsNCj4gDQo+ICAJaWYgKGFzb2MpDQo+IC0JCXJldHVybiBzY3RwX2F1dGhfZGVhY3Rf a2V5X2lkKGVwLCBhc29jLCB2YWwuc2NhY3Rfa2V5bnVtYmVyKTsNCj4gKwkJcmV0dXJuIHNjdHBf YXV0aF9kZWFjdF9rZXlfaWQoZXAsIGFzb2MsIHZhbC0+c2NhY3Rfa2V5bnVtYmVyKTsNCj4gDQo+ ICAJaWYgKHNjdHBfc3R5bGUoc2ssIFRDUCkpDQo+IC0JCXZhbC5zY2FjdF9hc3NvY19pZCA9IFND VFBfRlVUVVJFX0FTU09DOw0KPiArCQl2YWwtPnNjYWN0X2Fzc29jX2lkID0gU0NUUF9GVVRVUkVf QVNTT0M7DQo+IA0KPiAtCWlmICh2YWwuc2NhY3RfYXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNT T0MgfHwNCj4gLQkgICAgdmFsLnNjYWN0X2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSB7DQo+ IC0JCXJldCA9IHNjdHBfYXV0aF9kZWFjdF9rZXlfaWQoZXAsIGFzb2MsIHZhbC5zY2FjdF9rZXlu dW1iZXIpOw0KPiArCWlmICh2YWwtPnNjYWN0X2Fzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09D IHx8DQo+ICsJICAgIHZhbC0+c2NhY3RfYXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpIHsNCj4g KwkJcmV0ID0gc2N0cF9hdXRoX2RlYWN0X2tleV9pZChlcCwgYXNvYywgdmFsLT5zY2FjdF9rZXlu dW1iZXIpOw0KPiAgCQlpZiAocmV0KQ0KPiAgCQkJcmV0dXJuIHJldDsNCj4gIAl9DQo+IA0KPiAt CWlmICh2YWwuc2NhY3RfYXNzb2NfaWQgPT0gU0NUUF9DVVJSRU5UX0FTU09DIHx8DQo+IC0JICAg IHZhbC5zY2FjdF9hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykgew0KPiArCWlmICh2YWwtPnNj YWN0X2Fzc29jX2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQyB8fA0KPiArCSAgICB2YWwtPnNjYWN0 X2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSB7DQo+ICAJCWxpc3RfZm9yX2VhY2hfZW50cnko YXNvYywgJmVwLT5hc29jcywgYXNvY3MpIHsNCj4gIAkJCWludCByZXMgPSBzY3RwX2F1dGhfZGVh Y3Rfa2V5X2lkKGVwLCBhc29jLA0KPiAtCQkJCQkJCSB2YWwuc2NhY3Rfa2V5bnVtYmVyKTsNCj4g KwkJCQkJCQkgdmFsLT5zY2FjdF9rZXludW1iZXIpOw0KPiANCj4gIAkJCWlmIChyZXMgJiYgIXJl dCkNCj4gIAkJCQlyZXQgPSByZXM7DQo+IEBAIC0zODAzLDcgKzM3OTIsNiBAQCBzdGF0aWMgaW50 IHNjdHBfc2V0c29ja29wdF9kZWFjdGl2YXRlX2tleShzdHJ1Y3Qgc29jayAqc2ssDQo+IA0KPiAg CXJldHVybiByZXQ7DQo+ICB9DQo+IC0jdW5kZWYgdmFsDQo+IA0KPiAgLyoNCj4gICAqIDguMS4y MyBTQ1RQX0FVVE9fQVNDT05GDQo+IEBAIC0zODE5LDI0ICszODA3LDIzIEBAIHN0YXRpYyBpbnQg c2N0cF9zZXRzb2Nrb3B0X2RlYWN0aXZhdGVfa2V5KHN0cnVjdCBzb2NrICpzaywNCj4gICAqIE5v dGUuIEluIHRoaXMgaW1wbGVtZW50YXRpb24sIHNvY2tldCBvcGVyYXRpb24gb3ZlcnJpZGVzIGRl ZmF1bHQgcGFyYW1ldGVyDQo+ICAgKiBiZWluZyBzZXQgYnkgc3lzY3RsIGFzIHdlbGwgYXMgRnJl ZUJTRCBpbXBsZW1lbnRhdGlvbg0KPiAgICovDQo+IC0jZGVmaW5lIHZhbCAoKm9wdHZhbCkNCj4g LXN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2F1dG9fYXNjb25mKHN0cnVjdCBzb2NrICpzaywg aW50IHZhbCwNCj4gK3N0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2F1dG9fYXNjb25mKHN0cnVj dCBzb2NrICpzaywgaW50ICpvcHR2YWwsDQo+ICAJCQkJICAgICAgIHVuc2lnbmVkIGludCBvcHRs ZW4pDQo+ICB7DQo+ICAJc3RydWN0IHNjdHBfc29jayAqc3AgPSBzY3RwX3NrKHNrKTsNCj4gDQo+ ICAJaWYgKG9wdGxlbiA8IHNpemVvZihpbnQpKQ0KPiAgCQlyZXR1cm4gLUVJTlZBTDsNCj4gLQlp ZiAoIXNjdHBfaXNfZXBfYm91bmRhbGwoc2spICYmIHZhbCkNCj4gKwlpZiAoIXNjdHBfaXNfZXBf Ym91bmRhbGwoc2spICYmICgqb3B0dmFsKSkNCj4gIAkJcmV0dXJuIC1FSU5WQUw7DQo+IC0JaWYg KCh2YWwgJiYgc3AtPmRvX2F1dG9fYXNjb25mKSB8fCAoIXZhbCAmJiAhc3AtPmRvX2F1dG9fYXNj b25mKSkNCj4gKwlpZiAoKCgqb3B0dmFsKSAmJiBzcC0+ZG9fYXV0b19hc2NvbmYpIHx8ICghKCpv cHR2YWwpICYmICFzcC0+ZG9fYXV0b19hc2NvbmYpKQ0KPiAgCQlyZXR1cm4gMDsNCj4gDQo+ICAJ c3Bpbl9sb2NrX2JoKCZzb2NrX25ldChzayktPnNjdHAuYWRkcl93cV9sb2NrKTsNCj4gLQlpZiAo dmFsID09IDAgJiYgc3AtPmRvX2F1dG9fYXNjb25mKSB7DQo+ICsJaWYgKCgqb3B0dmFsKSA9PSAw ICYmIHNwLT5kb19hdXRvX2FzY29uZikgew0KPiAgCQlsaXN0X2RlbCgmc3AtPmF1dG9fYXNjb25m X2xpc3QpOw0KPiAgCQlzcC0+ZG9fYXV0b19hc2NvbmYgPSAwOw0KPiAtCX0gZWxzZSBpZiAodmFs ICYmICFzcC0+ZG9fYXV0b19hc2NvbmYpIHsNCj4gKwl9IGVsc2UgaWYgKCgqb3B0dmFsKSAmJiAh c3AtPmRvX2F1dG9fYXNjb25mKSB7DQo+ICAJCWxpc3RfYWRkX3RhaWwoJnNwLT5hdXRvX2FzY29u Zl9saXN0LA0KPiAgCQkgICAgJnNvY2tfbmV0KHNrKS0+c2N0cC5hdXRvX2FzY29uZl9zcGxpc3Qp Ow0KPiAgCQlzcC0+ZG9fYXV0b19hc2NvbmYgPSAxOw0KPiBAQCAtMzg0NCw3ICszODMxLDYgQEAg c3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfYXV0b19hc2NvbmYoc3RydWN0IHNvY2sgKnNrLCBp bnQgdmFsLA0KPiAgCXNwaW5fdW5sb2NrX2JoKCZzb2NrX25ldChzayktPnNjdHAuYWRkcl93cV9s b2NrKTsNCj4gIAlyZXR1cm4gMDsNCj4gIH0NCj4gLSN1bmRlZiB2YWwNCj4gDQo+ICAvKg0KPiAg ICogU0NUUF9QRUVSX0FERFJfVEhMRFMNCj4gQEAgLTM4NTMsNzAgKzM4MzksNjggQEAgc3RhdGlj IGludCBzY3RwX3NldHNvY2tvcHRfYXV0b19hc2NvbmYoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFs LA0KPiAgICogdHJhbnNwb3J0cyBpbiBhbiBhc3NvY2lhdGlvbi4gIFNlZSBTZWN0aW9uIDYuMSBv ZjoNCj4gICAqIGh0dHA6Ly93d3cuaWV0Zi5vcmcvaWQvZHJhZnQtbmlzaGlkYS10c3Z3Zy1zY3Rw LWZhaWxvdmVyLTA1LnR4dA0KPiAgICovDQo+IC0jZGVmaW5lIHZhbCAoKnZhbCkNCj4gIHN0YXRp YyBpbnQgc2N0cF9zZXRzb2Nrb3B0X3BhZGRyX3RocmVzaG9sZHMoc3RydWN0IHNvY2sgKnNrLA0K PiAtCQkJCQkgICAgc3RydWN0IHNjdHBfcGFkZHJ0aGxkc192MiB2YWwsDQo+ICsJCQkJCSAgICBz dHJ1Y3Qgc2N0cF9wYWRkcnRobGRzX3YyICp2YWwsDQo+ICAJCQkJCSAgICB1bnNpZ25lZCBpbnQg b3B0bGVuLCBib29sIHYyKQ0KPiAgew0KPiAgCXN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHJhbnM7 DQo+ICAJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7DQo+ICAJaW50IGxlbjsNCj4gDQo+ IC0JbGVuID0gdjIgPyBzaXplb2YodmFsKSA6IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYWRkcnRobGRz KTsNCj4gKwlsZW4gPSB2MiA/IHNpemVvZigqdmFsKSA6IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYWRk cnRobGRzKTsNCj4gIAlpZiAob3B0bGVuIDwgbGVuKQ0KPiAgCQlyZXR1cm4gLUVJTlZBTDsNCj4g DQo+IC0JaWYgKHYyICYmIHZhbC5zcHRfcGF0aHBmdGhsZCA+IHZhbC5zcHRfcGF0aGNwdGhsZCkN Cj4gKwlpZiAodjIgJiYgdmFsLT5zcHRfcGF0aHBmdGhsZCA+IHZhbC0+c3B0X3BhdGhjcHRobGQp DQo+ICAJCXJldHVybiAtRUlOVkFMOw0KPiANCj4gLQlpZiAoIXNjdHBfaXNfYW55KHNrLCAoY29u c3QgdW5pb24gc2N0cF9hZGRyICopJnZhbC5zcHRfYWRkcmVzcykpIHsNCj4gLQkJdHJhbnMgPSBz Y3RwX2FkZHJfaWQydHJhbnNwb3J0KHNrLCAmdmFsLnNwdF9hZGRyZXNzLA0KPiAtCQkJCQkgICAg ICAgdmFsLnNwdF9hc3NvY19pZCk7DQo+ICsJaWYgKCFzY3RwX2lzX2FueShzaywgKGNvbnN0IHVu aW9uIHNjdHBfYWRkciAqKSZ2YWwtPnNwdF9hZGRyZXNzKSkgew0KPiArCQl0cmFucyA9IHNjdHBf YWRkcl9pZDJ0cmFuc3BvcnQoc2ssICZ2YWwtPnNwdF9hZGRyZXNzLA0KPiArCQkJCQkgICAgICAg dmFsLT5zcHRfYXNzb2NfaWQpOw0KPiAgCQlpZiAoIXRyYW5zKQ0KPiAgCQkJcmV0dXJuIC1FTk9F TlQ7DQo+IA0KPiAtCQlpZiAodmFsLnNwdF9wYXRobWF4cnh0KQ0KPiAtCQkJdHJhbnMtPnBhdGht YXhyeHQgPSB2YWwuc3B0X3BhdGhtYXhyeHQ7DQo+ICsJCWlmICh2YWwtPnNwdF9wYXRobWF4cnh0 KQ0KPiArCQkJdHJhbnMtPnBhdGhtYXhyeHQgPSB2YWwtPnNwdF9wYXRobWF4cnh0Ow0KPiAgCQlp ZiAodjIpDQo+IC0JCQl0cmFucy0+cHNfcmV0cmFucyA9IHZhbC5zcHRfcGF0aGNwdGhsZDsNCj4g LQkJdHJhbnMtPnBmX3JldHJhbnMgPSB2YWwuc3B0X3BhdGhwZnRobGQ7DQo+ICsJCQl0cmFucy0+ cHNfcmV0cmFucyA9IHZhbC0+c3B0X3BhdGhjcHRobGQ7DQo+ICsJCXRyYW5zLT5wZl9yZXRyYW5z ID0gdmFsLT5zcHRfcGF0aHBmdGhsZDsNCj4gDQo+ICAJCXJldHVybiAwOw0KPiAgCX0NCj4gDQo+ IC0JYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ssIHZhbC5zcHRfYXNzb2NfaWQpOw0KPiAtCWlmICgh YXNvYyAmJiB2YWwuc3B0X2Fzc29jX2lkICE9IFNDVFBfRlVUVVJFX0FTU09DICYmDQo+ICsJYXNv YyA9IHNjdHBfaWQyYXNzb2Moc2ssIHZhbC0+c3B0X2Fzc29jX2lkKTsNCj4gKwlpZiAoIWFzb2Mg JiYgdmFsLT5zcHRfYXNzb2NfaWQgIT0gU0NUUF9GVVRVUkVfQVNTT0MgJiYNCj4gIAkgICAgc2N0 cF9zdHlsZShzaywgVURQKSkNCj4gIAkJcmV0dXJuIC1FSU5WQUw7DQo+IA0KPiAgCWlmIChhc29j KSB7DQo+ICAJCWxpc3RfZm9yX2VhY2hfZW50cnkodHJhbnMsICZhc29jLT5wZWVyLnRyYW5zcG9y dF9hZGRyX2xpc3QsDQo+ICAJCQkJICAgIHRyYW5zcG9ydHMpIHsNCj4gLQkJCWlmICh2YWwuc3B0 X3BhdGhtYXhyeHQpDQo+IC0JCQkJdHJhbnMtPnBhdGhtYXhyeHQgPSB2YWwuc3B0X3BhdGhtYXhy eHQ7DQo+ICsJCQlpZiAodmFsLT5zcHRfcGF0aG1heHJ4dCkNCj4gKwkJCQl0cmFucy0+cGF0aG1h eHJ4dCA9IHZhbC0+c3B0X3BhdGhtYXhyeHQ7DQo+ICAJCQlpZiAodjIpDQo+IC0JCQkJdHJhbnMt PnBzX3JldHJhbnMgPSB2YWwuc3B0X3BhdGhjcHRobGQ7DQo+IC0JCQl0cmFucy0+cGZfcmV0cmFu cyA9IHZhbC5zcHRfcGF0aHBmdGhsZDsNCj4gKwkJCQl0cmFucy0+cHNfcmV0cmFucyA9IHZhbC0+ c3B0X3BhdGhjcHRobGQ7DQo+ICsJCQl0cmFucy0+cGZfcmV0cmFucyA9IHZhbC0+c3B0X3BhdGhw ZnRobGQ7DQo+ICAJCX0NCj4gDQo+IC0JCWlmICh2YWwuc3B0X3BhdGhtYXhyeHQpDQo+IC0JCQlh c29jLT5wYXRobWF4cnh0ID0gdmFsLnNwdF9wYXRobWF4cnh0Ow0KPiArCQlpZiAodmFsLT5zcHRf cGF0aG1heHJ4dCkNCj4gKwkJCWFzb2MtPnBhdGhtYXhyeHQgPSB2YWwtPnNwdF9wYXRobWF4cnh0 Ow0KPiAgCQlpZiAodjIpDQo+IC0JCQlhc29jLT5wc19yZXRyYW5zID0gdmFsLnNwdF9wYXRoY3B0 aGxkOw0KPiAtCQlhc29jLT5wZl9yZXRyYW5zID0gdmFsLnNwdF9wYXRocGZ0aGxkOw0KPiArCQkJ YXNvYy0+cHNfcmV0cmFucyA9IHZhbC0+c3B0X3BhdGhjcHRobGQ7DQo+ICsJCWFzb2MtPnBmX3Jl dHJhbnMgPSB2YWwtPnNwdF9wYXRocGZ0aGxkOw0KPiAgCX0gZWxzZSB7DQo+ICAJCXN0cnVjdCBz Y3RwX3NvY2sgKnNwID0gc2N0cF9zayhzayk7DQo+IA0KPiAtCQlpZiAodmFsLnNwdF9wYXRobWF4 cnh0KQ0KPiAtCQkJc3AtPnBhdGhtYXhyeHQgPSB2YWwuc3B0X3BhdGhtYXhyeHQ7DQo+ICsJCWlm ICh2YWwtPnNwdF9wYXRobWF4cnh0KQ0KPiArCQkJc3AtPnBhdGhtYXhyeHQgPSB2YWwtPnNwdF9w YXRobWF4cnh0Ow0KPiAgCQlpZiAodjIpDQo+IC0JCQlzcC0+cHNfcmV0cmFucyA9IHZhbC5zcHRf cGF0aGNwdGhsZDsNCj4gLQkJc3AtPnBmX3JldHJhbnMgPSB2YWwuc3B0X3BhdGhwZnRobGQ7DQo+ ICsJCQlzcC0+cHNfcmV0cmFucyA9IHZhbC0+c3B0X3BhdGhjcHRobGQ7DQo+ICsJCXNwLT5wZl9y ZXRyYW5zID0gdmFsLT5zcHRfcGF0aHBmdGhsZDsNCj4gIAl9DQo+IA0KPiAgCXJldHVybiAwOw0K PiAgfQ0KPiAtI3VuZGVmIHZhbA0KPiANCj4gIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X3Jl Y3ZyY3ZpbmZvKHN0cnVjdCBzb2NrICpzaywgaW50ICpvcHR2YWwsDQo+ICAJCQkJICAgICAgIHVu c2lnbmVkIGludCBvcHRsZW4pDQo+IEBAIC0zOTQxLDkyICszOTI1LDkxIEBAIHN0YXRpYyBpbnQg c2N0cF9zZXRzb2Nrb3B0X3JlY3ZueHRpbmZvKHN0cnVjdCBzb2NrICpzaywgaW50ICpvcHR2YWws DQo+ICB9DQo+IA0KPiAgc3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfcHJfc3VwcG9ydGVkKHN0 cnVjdCBzb2NrICpzaywNCj4gLQkJCQkJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgcGFyYW1zLA0K PiArCQkJCQlzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqcGFyYW1zLA0KPiAgCQkJCQl1bnNpZ25l ZCBpbnQgb3B0bGVuKQ0KPiAgew0KPiAgCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOw0K PiANCj4gLQlpZiAob3B0bGVuICE9IHNpemVvZihwYXJhbXMpKQ0KPiArCWlmIChvcHRsZW4gIT0g c2l6ZW9mKCpwYXJhbXMpKQ0KPiAgCQlyZXR1cm4gLUVJTlZBTDsNCj4gDQo+IC0JYXNvYyA9IHNj dHBfaWQyYXNzb2Moc2ssIHBhcmFtcy5hc3NvY19pZCk7DQo+IC0JaWYgKCFhc29jICYmIHBhcmFt cy5hc3NvY19pZCAhPSBTQ1RQX0ZVVFVSRV9BU1NPQyAmJg0KPiArCWFzb2MgPSBzY3RwX2lkMmFz c29jKHNrLCBwYXJhbXMtPmFzc29jX2lkKTsNCj4gKwlpZiAoIWFzb2MgJiYgcGFyYW1zLT5hc3Nv Y19pZCAhPSBTQ1RQX0ZVVFVSRV9BU1NPQyAmJg0KPiAgCSAgICBzY3RwX3N0eWxlKHNrLCBVRFAp KQ0KPiAgCQlyZXR1cm4gLUVJTlZBTDsNCj4gDQo+IC0Jc2N0cF9zayhzayktPmVwLT5wcnNjdHBf ZW5hYmxlID0gISFwYXJhbXMuYXNzb2NfdmFsdWU7DQo+ICsJc2N0cF9zayhzayktPmVwLT5wcnNj dHBfZW5hYmxlID0gISFwYXJhbXMtPmFzc29jX3ZhbHVlOw0KPiANCj4gIAlyZXR1cm4gMDsNCj4g IH0NCj4gDQo+ICBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9kZWZhdWx0X3ByaW5mbyhzdHJ1 Y3Qgc29jayAqc2ssDQo+IC0JCQkJCSAgc3RydWN0IHNjdHBfZGVmYXVsdF9wcmluZm8gaW5mbywN Cj4gKwkJCQkJICBzdHJ1Y3Qgc2N0cF9kZWZhdWx0X3ByaW5mbyAqaW5mbywNCj4gIAkJCQkJICB1 bnNpZ25lZCBpbnQgb3B0bGVuKQ0KPiAgew0KPiAgCXN0cnVjdCBzY3RwX3NvY2sgKnNwID0gc2N0 cF9zayhzayk7DQo+ICAJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7DQo+ICAJaW50IHJl dHZhbCA9IC1FSU5WQUw7DQo+IA0KPiAtCWlmIChvcHRsZW4gIT0gc2l6ZW9mKGluZm8pKQ0KPiAr CWlmIChvcHRsZW4gIT0gc2l6ZW9mKCppbmZvKSkNCj4gIAkJZ290byBvdXQ7DQo+IA0KPiAtCWlm IChpbmZvLnByX3BvbGljeSAmIH5TQ1RQX1BSX1NDVFBfTUFTSykNCj4gKwlpZiAoaW5mby0+cHJf cG9saWN5ICYgflNDVFBfUFJfU0NUUF9NQVNLKQ0KPiAgCQlnb3RvIG91dDsNCj4gDQo+IC0JaWYg KGluZm8ucHJfcG9saWN5ID09IFNDVFBfUFJfU0NUUF9OT05FKQ0KPiAtCQlpbmZvLnByX3ZhbHVl ID0gMDsNCj4gKwlpZiAoaW5mby0+cHJfcG9saWN5ID09IFNDVFBfUFJfU0NUUF9OT05FKQ0KPiAr CQlpbmZvLT5wcl92YWx1ZSA9IDA7DQo+IA0KPiAtCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCBp bmZvLnByX2Fzc29jX2lkKTsNCj4gLQlpZiAoIWFzb2MgJiYgaW5mby5wcl9hc3NvY19pZCA+IFND VFBfQUxMX0FTU09DICYmDQo+ICsJYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ssIGluZm8tPnByX2Fz c29jX2lkKTsNCj4gKwlpZiAoIWFzb2MgJiYgaW5mby0+cHJfYXNzb2NfaWQgPiBTQ1RQX0FMTF9B U1NPQyAmJg0KPiAgCSAgICBzY3RwX3N0eWxlKHNrLCBVRFApKQ0KPiAgCQlnb3RvIG91dDsNCj4g DQo+ICAJcmV0dmFsID0gMDsNCj4gDQo+ICAJaWYgKGFzb2MpIHsNCj4gLQkJU0NUUF9QUl9TRVRf UE9MSUNZKGFzb2MtPmRlZmF1bHRfZmxhZ3MsIGluZm8ucHJfcG9saWN5KTsNCj4gLQkJYXNvYy0+ ZGVmYXVsdF90aW1ldG9saXZlID0gaW5mby5wcl92YWx1ZTsNCj4gKwkJU0NUUF9QUl9TRVRfUE9M SUNZKGFzb2MtPmRlZmF1bHRfZmxhZ3MsIGluZm8tPnByX3BvbGljeSk7DQo+ICsJCWFzb2MtPmRl ZmF1bHRfdGltZXRvbGl2ZSA9IGluZm8tPnByX3ZhbHVlOw0KPiAgCQlnb3RvIG91dDsNCj4gIAl9 DQo+IA0KPiAgCWlmIChzY3RwX3N0eWxlKHNrLCBUQ1ApKQ0KPiAtCQlpbmZvLnByX2Fzc29jX2lk ID0gU0NUUF9GVVRVUkVfQVNTT0M7DQo+ICsJCWluZm8tPnByX2Fzc29jX2lkID0gU0NUUF9GVVRV UkVfQVNTT0M7DQo+IA0KPiAtCWlmIChpbmZvLnByX2Fzc29jX2lkID09IFNDVFBfRlVUVVJFX0FT U09DIHx8DQo+IC0JICAgIGluZm8ucHJfYXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpIHsNCj4g LQkJU0NUUF9QUl9TRVRfUE9MSUNZKHNwLT5kZWZhdWx0X2ZsYWdzLCBpbmZvLnByX3BvbGljeSk7 DQo+IC0JCXNwLT5kZWZhdWx0X3RpbWV0b2xpdmUgPSBpbmZvLnByX3ZhbHVlOw0KPiArCWlmIChp bmZvLT5wcl9hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQyB8fA0KPiArCSAgICBpbmZvLT5w cl9hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykgew0KPiArCQlTQ1RQX1BSX1NFVF9QT0xJQ1ko c3AtPmRlZmF1bHRfZmxhZ3MsIGluZm8tPnByX3BvbGljeSk7DQo+ICsJCXNwLT5kZWZhdWx0X3Rp bWV0b2xpdmUgPSBpbmZvLT5wcl92YWx1ZTsNCj4gIAl9DQo+IA0KPiAtCWlmIChpbmZvLnByX2Fz c29jX2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQyB8fA0KPiAtCSAgICBpbmZvLnByX2Fzc29jX2lk ID09IFNDVFBfQUxMX0FTU09DKSB7DQo+ICsJaWYgKGluZm8tPnByX2Fzc29jX2lkID09IFNDVFBf Q1VSUkVOVF9BU1NPQyB8fA0KPiArCSAgICBpbmZvLT5wcl9hc3NvY19pZCA9PSBTQ1RQX0FMTF9B U1NPQykgew0KPiAgCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFzb2MsICZzcC0+ZXAtPmFzb2NzLCBh c29jcykgew0KPiAtCQkJU0NUUF9QUl9TRVRfUE9MSUNZKGFzb2MtPmRlZmF1bHRfZmxhZ3MsIGlu Zm8ucHJfcG9saWN5KTsNCj4gLQkJCWFzb2MtPmRlZmF1bHRfdGltZXRvbGl2ZSA9IGluZm8ucHJf dmFsdWU7DQo+ICsJCQlTQ1RQX1BSX1NFVF9QT0xJQ1koYXNvYy0+ZGVmYXVsdF9mbGFncywgaW5m by0+cHJfcG9saWN5KTsNCj4gKwkJCWFzb2MtPmRlZmF1bHRfdGltZXRvbGl2ZSA9IGluZm8tPnBy X3ZhbHVlOw0KPiAgCQl9DQo+ICAJfQ0KPiANCj4gIG91dDoNCj4gIAlyZXR1cm4gcmV0dmFsOw0K PiAgfQ0KPiAtI3VuZGVmIGluZm8NCj4gDQo+ICBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9y ZWNvbmZpZ19zdXBwb3J0ZWQoc3RydWN0IHNvY2sgKnNrLA0KPiAtCQkJCQkgICAgICBzdHJ1Y3Qg c2N0cF9hc3NvY192YWx1ZSBwYXJhbXMsDQo+ICsJCQkJCSAgICAgIHN0cnVjdCBzY3RwX2Fzc29j X3ZhbHVlICpwYXJhbXMsDQo+ICAJCQkJCSAgICAgIHVuc2lnbmVkIGludCBvcHRsZW4pDQo+ICB7 DQo+ICAJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7DQo+ICAJaW50IHJldHZhbCA9IC1F SU5WQUw7DQo+IA0KPiAtCWlmIChvcHRsZW4gIT0gc2l6ZW9mKHBhcmFtcykpDQo+ICsJaWYgKG9w dGxlbiAhPSBzaXplb2YoKnBhcmFtcykpDQo+ICAJCWdvdG8gb3V0Ow0KPiANCj4gLQlhc29jID0g c2N0cF9pZDJhc3NvYyhzaywgcGFyYW1zLmFzc29jX2lkKTsNCj4gLQlpZiAoIWFzb2MgJiYgcGFy YW1zLmFzc29jX2lkICE9IFNDVFBfRlVUVVJFX0FTU09DICYmDQo+ICsJYXNvYyA9IHNjdHBfaWQy YXNzb2Moc2ssIHBhcmFtcy0+YXNzb2NfaWQpOw0KPiArCWlmICghYXNvYyAmJiBwYXJhbXMtPmFz c29jX2lkICE9IFNDVFBfRlVUVVJFX0FTU09DICYmDQo+ICAJICAgIHNjdHBfc3R5bGUoc2ssIFVE UCkpDQo+ICAJCWdvdG8gb3V0Ow0KPiANCj4gLQlzY3RwX3NrKHNrKS0+ZXAtPnJlY29uZl9lbmFi bGUgPSAhIXBhcmFtcy5hc3NvY192YWx1ZTsNCj4gKwlzY3RwX3NrKHNrKS0+ZXAtPnJlY29uZl9l bmFibGUgPSAhIXBhcmFtcy0+YXNzb2NfdmFsdWU7DQo+IA0KPiAgCXJldHZhbCA9IDA7DQo+IA0K PiBAQCAtNDAzNSw0OCArNDAxOCw0NyBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9yZWNv bmZpZ19zdXBwb3J0ZWQoc3RydWN0IHNvY2sgKnNrLA0KPiAgfQ0KPiANCj4gIHN0YXRpYyBpbnQg c2N0cF9zZXRzb2Nrb3B0X2VuYWJsZV9zdHJyZXNldChzdHJ1Y3Qgc29jayAqc2ssDQo+IC0JCQkJ CSAgIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlIHBhcmFtcywNCj4gKwkJCQkJICAgc3RydWN0IHNj dHBfYXNzb2NfdmFsdWUgKnBhcmFtcywNCj4gIAkJCQkJICAgdW5zaWduZWQgaW50IG9wdGxlbikN Cj4gIHsNCj4gIAlzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAgPSBzY3RwX3NrKHNrKS0+ZXA7DQo+ ICAJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7DQo+ICAJaW50IHJldHZhbCA9IC1FSU5W QUw7DQo+IA0KPiAtCWlmIChvcHRsZW4gIT0gc2l6ZW9mKHBhcmFtcykpDQo+ICsJaWYgKG9wdGxl biAhPSBzaXplb2YoKnBhcmFtcykpDQo+ICAJCWdvdG8gb3V0Ow0KPiANCj4gLQlpZiAocGFyYW1z LmFzc29jX3ZhbHVlICYgKH5TQ1RQX0VOQUJMRV9TVFJSRVNFVF9NQVNLKSkNCj4gKwlpZiAocGFy YW1zLT5hc3NvY192YWx1ZSAmICh+U0NUUF9FTkFCTEVfU1RSUkVTRVRfTUFTSykpDQo+ICAJCWdv dG8gb3V0Ow0KPiANCj4gLQlhc29jID0gc2N0cF9pZDJhc3NvYyhzaywgcGFyYW1zLmFzc29jX2lk KTsNCj4gLQlpZiAoIWFzb2MgJiYgcGFyYW1zLmFzc29jX2lkID4gU0NUUF9BTExfQVNTT0MgJiYN Cj4gKwlhc29jID0gc2N0cF9pZDJhc3NvYyhzaywgcGFyYW1zLT5hc3NvY19pZCk7DQo+ICsJaWYg KCFhc29jICYmIHBhcmFtcy0+YXNzb2NfaWQgPiBTQ1RQX0FMTF9BU1NPQyAmJg0KPiAgCSAgICBz Y3RwX3N0eWxlKHNrLCBVRFApKQ0KPiAgCQlnb3RvIG91dDsNCj4gDQo+ICAJcmV0dmFsID0gMDsN Cj4gDQo+ICAJaWYgKGFzb2MpIHsNCj4gLQkJYXNvYy0+c3RycmVzZXRfZW5hYmxlID0gcGFyYW1z LmFzc29jX3ZhbHVlOw0KPiArCQlhc29jLT5zdHJyZXNldF9lbmFibGUgPSBwYXJhbXMtPmFzc29j X3ZhbHVlOw0KPiAgCQlnb3RvIG91dDsNCj4gIAl9DQo+IA0KPiAgCWlmIChzY3RwX3N0eWxlKHNr LCBUQ1ApKQ0KPiAtCQlwYXJhbXMuYXNzb2NfaWQgPSBTQ1RQX0ZVVFVSRV9BU1NPQzsNCj4gKwkJ cGFyYW1zLT5hc3NvY19pZCA9IFNDVFBfRlVUVVJFX0FTU09DOw0KPiANCj4gLQlpZiAocGFyYW1z LmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DIHx8DQo+IC0JICAgIHBhcmFtcy5hc3NvY19p ZCA9PSBTQ1RQX0FMTF9BU1NPQykNCj4gLQkJZXAtPnN0cnJlc2V0X2VuYWJsZSA9IHBhcmFtcy5h c3NvY192YWx1ZTsNCj4gKwlpZiAocGFyYW1zLT5hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NP QyB8fA0KPiArCSAgICBwYXJhbXMtPmFzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKQ0KPiArCQll cC0+c3RycmVzZXRfZW5hYmxlID0gcGFyYW1zLT5hc3NvY192YWx1ZTsNCj4gDQo+IC0JaWYgKHBh cmFtcy5hc3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRfQVNTT0MgfHwNCj4gLQkgICAgcGFyYW1zLmFz c29jX2lkID09IFNDVFBfQUxMX0FTU09DKQ0KPiArCWlmIChwYXJhbXMtPmFzc29jX2lkID09IFND VFBfQ1VSUkVOVF9BU1NPQyB8fA0KPiArCSAgICBwYXJhbXMtPmFzc29jX2lkID09IFNDVFBfQUxM X0FTU09DKQ0KPiAgCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFzb2MsICZlcC0+YXNvY3MsIGFzb2Nz KQ0KPiAtCQkJYXNvYy0+c3RycmVzZXRfZW5hYmxlID0gcGFyYW1zLmFzc29jX3ZhbHVlOw0KPiAr CQkJYXNvYy0+c3RycmVzZXRfZW5hYmxlID0gcGFyYW1zLT5hc3NvY192YWx1ZTsNCj4gDQo+ICBv dXQ6DQo+ICAJcmV0dXJuIHJldHZhbDsNCj4gIH0NCj4gDQo+IC0jdW5kZWYgcGFyYW1zDQo+ICBz dGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9yZXNldF9zdHJlYW1zKHN0cnVjdCBzb2NrICpzaywN Cj4gIAkJCQkJIHN0cnVjdCBzY3RwX3Jlc2V0X3N0cmVhbXMgKnBhcmFtcywNCj4gIAkJCQkJIHVu c2lnbmVkIGludCBvcHRsZW4pDQo+IEBAIC00MTAzLDIwICs0MDg1LDE3IEBAIHN0YXRpYyBpbnQg c2N0cF9zZXRzb2Nrb3B0X3Jlc2V0X3N0cmVhbXMoc3RydWN0IHNvY2sgKnNrLA0KPiAgb3V0Og0K PiAgCXJldHVybiByZXR2YWw7DQo+ICB9DQo+IC0jZGVmaW5lIHBhcmFtcyAoKnBhcmFtcykNCj4g DQo+IC0NCj4gLSNkZWZpbmUgYXNzb2NpZCAoKmFzc29jaWQpDQo+IC1zdGF0aWMgaW50IHNjdHBf c2V0c29ja29wdF9yZXNldF9hc3NvYyhzdHJ1Y3Qgc29jayAqc2ssIHNjdHBfYXNzb2NfdCBhc3Nv Y2lkLA0KPiArc3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfcmVzZXRfYXNzb2Moc3RydWN0IHNv Y2sgKnNrLCBzY3RwX2Fzc29jX3QgKmFzc29jaWQsDQo+ICAJCQkJICAgICAgIHVuc2lnbmVkIGlu dCBvcHRsZW4pDQo+ICB7DQo+ICAJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7DQo+ICAJ aW50IHJldHZhbCA9IC1FSU5WQUw7DQo+IA0KPiAtCWlmIChvcHRsZW4gIT0gc2l6ZW9mKGFzc29j aWQpKQ0KPiArCWlmIChvcHRsZW4gIT0gc2l6ZW9mKCphc3NvY2lkKSkNCj4gIAkJZ290byBvdXQ7 DQo+IA0KPiAtCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCBhc3NvY2lkKTsNCj4gKwlhc29jID0g c2N0cF9pZDJhc3NvYyhzaywgKCphc3NvY2lkKSk7DQo+ICAJaWYgKCFhc29jKQ0KPiAgCQlnb3Rv IG91dDsNCj4gDQo+IEBAIC00MTI1LDYyICs0MTA0LDYxIEBAIHN0YXRpYyBpbnQgc2N0cF9zZXRz b2Nrb3B0X3Jlc2V0X2Fzc29jKHN0cnVjdCBzb2NrICpzaywgc2N0cF9hc3NvY190IGFzc29jaWQs DQo+ICBvdXQ6DQo+ICAJcmV0dXJuIHJldHZhbDsNCj4gIH0NCj4gLSN1bmRlZiBhc3NvY2lkDQo+ IA0KPiAgc3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfYWRkX3N0cmVhbXMoc3RydWN0IHNvY2sg KnNrLA0KPiAtCQkJCSAgICAgICBzdHJ1Y3Qgc2N0cF9hZGRfc3RyZWFtcyBwYXJhbXMsDQo+ICsJ CQkJICAgICAgIHN0cnVjdCBzY3RwX2FkZF9zdHJlYW1zICpwYXJhbXMsDQo+ICAJCQkJICAgICAg IHVuc2lnbmVkIGludCBvcHRsZW4pDQo+ICB7DQo+ICAJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24g KmFzb2M7DQo+ICAJaW50IHJldHZhbCA9IC1FSU5WQUw7DQo+IA0KPiAtCWlmIChvcHRsZW4gIT0g c2l6ZW9mKHBhcmFtcykpDQo+ICsJaWYgKG9wdGxlbiAhPSBzaXplb2YoKnBhcmFtcykpDQo+ICAJ CWdvdG8gb3V0Ow0KPiANCj4gLQlhc29jID0gc2N0cF9pZDJhc3NvYyhzaywgcGFyYW1zLnNhc19h c3NvY19pZCk7DQo+ICsJYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ssIHBhcmFtcy0+c2FzX2Fzc29j X2lkKTsNCj4gIAlpZiAoIWFzb2MpDQo+ICAJCWdvdG8gb3V0Ow0KPiANCj4gLQlyZXR2YWwgPSBz Y3RwX3NlbmRfYWRkX3N0cmVhbXMoYXNvYywgJnBhcmFtcyk7DQo+ICsJcmV0dmFsID0gc2N0cF9z ZW5kX2FkZF9zdHJlYW1zKGFzb2MsIHBhcmFtcyk7DQo+IA0KPiAgb3V0Og0KPiAgCXJldHVybiBy ZXR2YWw7DQo+ICB9DQo+IA0KPiAgc3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfc2NoZWR1bGVy KHN0cnVjdCBzb2NrICpzaywNCj4gLQkJCQkgICAgIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlIHBh cmFtcywNCj4gKwkJCQkgICAgIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICpwYXJhbXMsDQo+ICAJ CQkJICAgICB1bnNpZ25lZCBpbnQgb3B0bGVuKQ0KPiAgew0KPiAgCXN0cnVjdCBzY3RwX3NvY2sg KnNwID0gc2N0cF9zayhzayk7DQo+ICAJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7DQo+ ICAJaW50IHJldHZhbCA9IDA7DQo+IA0KPiAtCWlmIChvcHRsZW4gPCBzaXplb2YocGFyYW1zKSkN Cj4gKwlpZiAob3B0bGVuIDwgc2l6ZW9mKCpwYXJhbXMpKQ0KPiAgCQlyZXR1cm4gLUVJTlZBTDsN Cj4gDQo+IC0JaWYgKHBhcmFtcy5hc3NvY192YWx1ZSA+IFNDVFBfU1NfTUFYKQ0KPiArCWlmIChw YXJhbXMtPmFzc29jX3ZhbHVlID4gU0NUUF9TU19NQVgpDQo+ICAJCXJldHVybiAtRUlOVkFMOw0K PiANCj4gLQlhc29jID0gc2N0cF9pZDJhc3NvYyhzaywgcGFyYW1zLmFzc29jX2lkKTsNCj4gLQlp ZiAoIWFzb2MgJiYgcGFyYW1zLmFzc29jX2lkID4gU0NUUF9BTExfQVNTT0MgJiYNCj4gKwlhc29j ID0gc2N0cF9pZDJhc3NvYyhzaywgcGFyYW1zLT5hc3NvY19pZCk7DQo+ICsJaWYgKCFhc29jICYm IHBhcmFtcy0+YXNzb2NfaWQgPiBTQ1RQX0FMTF9BU1NPQyAmJg0KPiAgCSAgICBzY3RwX3N0eWxl KHNrLCBVRFApKQ0KPiAgCQlyZXR1cm4gLUVJTlZBTDsNCj4gDQo+ICAJaWYgKGFzb2MpDQo+IC0J CXJldHVybiBzY3RwX3NjaGVkX3NldF9zY2hlZChhc29jLCBwYXJhbXMuYXNzb2NfdmFsdWUpOw0K PiArCQlyZXR1cm4gc2N0cF9zY2hlZF9zZXRfc2NoZWQoYXNvYywgcGFyYW1zLT5hc3NvY192YWx1 ZSk7DQo+IA0KPiAgCWlmIChzY3RwX3N0eWxlKHNrLCBUQ1ApKQ0KPiAtCQlwYXJhbXMuYXNzb2Nf aWQgPSBTQ1RQX0ZVVFVSRV9BU1NPQzsNCj4gKwkJcGFyYW1zLT5hc3NvY19pZCA9IFNDVFBfRlVU VVJFX0FTU09DOw0KPiANCj4gLQlpZiAocGFyYW1zLmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FT U09DIHx8DQo+IC0JICAgIHBhcmFtcy5hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykNCj4gLQkJ c3AtPmRlZmF1bHRfc3MgPSBwYXJhbXMuYXNzb2NfdmFsdWU7DQo+ICsJaWYgKHBhcmFtcy0+YXNz b2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MgfHwNCj4gKwkgICAgcGFyYW1zLT5hc3NvY19pZCA9 PSBTQ1RQX0FMTF9BU1NPQykNCj4gKwkJc3AtPmRlZmF1bHRfc3MgPSBwYXJhbXMtPmFzc29jX3Zh bHVlOw0KPiANCj4gLQlpZiAocGFyYW1zLmFzc29jX2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQyB8 fA0KPiAtCSAgICBwYXJhbXMuYXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpIHsNCj4gKwlpZiAo cGFyYW1zLT5hc3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRfQVNTT0MgfHwNCj4gKwkgICAgcGFyYW1z LT5hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykgew0KPiAgCQlsaXN0X2Zvcl9lYWNoX2VudHJ5 KGFzb2MsICZzcC0+ZXAtPmFzb2NzLCBhc29jcykgew0KPiAgCQkJaW50IHJldCA9IHNjdHBfc2No ZWRfc2V0X3NjaGVkKGFzb2MsDQo+IC0JCQkJCQkgICAgICAgcGFyYW1zLmFzc29jX3ZhbHVlKTsN Cj4gKwkJCQkJCSAgICAgICBwYXJhbXMtPmFzc29jX3ZhbHVlKTsNCj4gDQo+ICAJCQlpZiAocmV0 ICYmICFyZXR2YWwpDQo+ICAJCQkJcmV0dmFsID0gcmV0Ow0KPiBAQCAtNDE5MSwzMSArNDE2OSwz MSBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9zY2hlZHVsZXIoc3RydWN0IHNvY2sgKnNr LA0KPiAgfQ0KPiANCj4gIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X3NjaGVkdWxlcl92YWx1 ZShzdHJ1Y3Qgc29jayAqc2ssDQo+IC0JCQkJCSAgIHN0cnVjdCBzY3RwX3N0cmVhbV92YWx1ZSBw YXJhbXMsDQo+ICsJCQkJCSAgIHN0cnVjdCBzY3RwX3N0cmVhbV92YWx1ZSAqcGFyYW1zLA0KPiAg CQkJCQkgICB1bnNpZ25lZCBpbnQgb3B0bGVuKQ0KPiAgew0KPiAgCXN0cnVjdCBzY3RwX2Fzc29j aWF0aW9uICphc29jOw0KPiAgCWludCByZXR2YWwgPSAtRUlOVkFMOw0KPiANCj4gLQlpZiAob3B0 bGVuIDwgc2l6ZW9mKHBhcmFtcykpDQo+ICsJaWYgKG9wdGxlbiA8IHNpemVvZigqcGFyYW1zKSkN Cj4gIAkJZ290byBvdXQ7DQo+IA0KPiAtCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCBwYXJhbXMu YXNzb2NfaWQpOw0KPiAtCWlmICghYXNvYyAmJiBwYXJhbXMuYXNzb2NfaWQgIT0gU0NUUF9DVVJS RU5UX0FTU09DICYmDQo+ICsJYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ssIHBhcmFtcy0+YXNzb2Nf aWQpOw0KPiArCWlmICghYXNvYyAmJiBwYXJhbXMtPmFzc29jX2lkICE9IFNDVFBfQ1VSUkVOVF9B U1NPQyAmJg0KPiAgCSAgICBzY3RwX3N0eWxlKHNrLCBVRFApKQ0KPiAgCQlnb3RvIG91dDsNCj4g DQo+ICAJaWYgKGFzb2MpIHsNCj4gLQkJcmV0dmFsID0gc2N0cF9zY2hlZF9zZXRfdmFsdWUoYXNv YywgcGFyYW1zLnN0cmVhbV9pZCwNCj4gLQkJCQkJICAgICAgcGFyYW1zLnN0cmVhbV92YWx1ZSwg R0ZQX0tFUk5FTCk7DQo+ICsJCXJldHZhbCA9IHNjdHBfc2NoZWRfc2V0X3ZhbHVlKGFzb2MsIHBh cmFtcy0+c3RyZWFtX2lkLA0KPiArCQkJCQkgICAgICBwYXJhbXMtPnN0cmVhbV92YWx1ZSwgR0ZQ X0tFUk5FTCk7DQo+ICAJCWdvdG8gb3V0Ow0KPiAgCX0NCj4gDQo+ICAJcmV0dmFsID0gMDsNCj4g DQo+ICAJbGlzdF9mb3JfZWFjaF9lbnRyeShhc29jLCAmc2N0cF9zayhzayktPmVwLT5hc29jcywg YXNvY3MpIHsNCj4gLQkJaW50IHJldCA9IHNjdHBfc2NoZWRfc2V0X3ZhbHVlKGFzb2MsIHBhcmFt cy5zdHJlYW1faWQsDQo+IC0JCQkJCSAgICAgICBwYXJhbXMuc3RyZWFtX3ZhbHVlLCBHRlBfS0VS TkVMKTsNCj4gKwkJaW50IHJldCA9IHNjdHBfc2NoZWRfc2V0X3ZhbHVlKGFzb2MsIHBhcmFtcy0+ c3RyZWFtX2lkLA0KPiArCQkJCQkgICAgICAgcGFyYW1zLT5zdHJlYW1fdmFsdWUsIEdGUF9LRVJO RUwpOw0KPiAgCQlpZiAocmV0ICYmICFyZXR2YWwpIC8qIHRyeSB0byByZXR1cm4gdGhlIDFzdCBl cnJvci4gKi8NCj4gIAkJCXJldHZhbCA9IHJldDsNCj4gIAl9DQo+IEBAIC00MjI1LDE4ICs0MjAz LDE4IEBAIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X3NjaGVkdWxlcl92YWx1ZShzdHJ1Y3Qg c29jayAqc2ssDQo+ICB9DQo+IA0KPiAgc3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfaW50ZXJs ZWF2aW5nX3N1cHBvcnRlZChzdHJ1Y3Qgc29jayAqc2ssDQo+IC0JCQkJCQkgIHN0cnVjdCBzY3Rw X2Fzc29jX3ZhbHVlIHBhcmFtcywNCj4gKwkJCQkJCSAgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUg KnBhcmFtcywNCj4gIAkJCQkJCSAgdW5zaWduZWQgaW50IG9wdGxlbikNCj4gIHsNCj4gIAlzdHJ1 Y3Qgc2N0cF9zb2NrICpzcCA9IHNjdHBfc2soc2spOw0KPiAgCXN0cnVjdCBzY3RwX2Fzc29jaWF0 aW9uICphc29jOw0KPiAgCWludCByZXR2YWwgPSAtRUlOVkFMOw0KPiANCj4gLQlpZiAob3B0bGVu IDwgc2l6ZW9mKHBhcmFtcykpDQo+ICsJaWYgKG9wdGxlbiA8IHNpemVvZigqcGFyYW1zKSkNCj4g IAkJZ290byBvdXQ7DQo+IA0KPiAtCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCBwYXJhbXMuYXNz b2NfaWQpOw0KPiAtCWlmICghYXNvYyAmJiBwYXJhbXMuYXNzb2NfaWQgIT0gU0NUUF9GVVRVUkVf QVNTT0MgJiYNCj4gKwlhc29jID0gc2N0cF9pZDJhc3NvYyhzaywgcGFyYW1zLT5hc3NvY19pZCk7 DQo+ICsJaWYgKCFhc29jICYmIHBhcmFtcy0+YXNzb2NfaWQgIT0gU0NUUF9GVVRVUkVfQVNTT0Mg JiYNCj4gIAkgICAgc2N0cF9zdHlsZShzaywgVURQKSkNCj4gIAkJZ290byBvdXQ7DQo+IA0KPiBA QCAtNDI0NSw3ICs0MjIzLDcgQEAgc3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfaW50ZXJsZWF2 aW5nX3N1cHBvcnRlZChzdHJ1Y3Qgc29jayAqc2ssDQo+ICAJCWdvdG8gb3V0Ow0KPiAgCX0NCj4g DQo+IC0Jc3AtPmVwLT5pbnRsX2VuYWJsZSA9ICEhcGFyYW1zLmFzc29jX3ZhbHVlOw0KPiArCXNw LT5lcC0+aW50bF9lbmFibGUgPSAhIXBhcmFtcy0+YXNzb2NfdmFsdWU7DQo+IA0KPiAgCXJldHZh bCA9IDA7DQo+IA0KPiBAQCAtNDI5MSw0MSArNDI2OSw0MCBAQCBzdGF0aWMgaW50IHNjdHBfYXNz b2NfdWxwZXZlbnRfdHlwZV9zZXQoc3RydWN0IHNjdHBfZXZlbnQgKnBhcmFtLA0KPiAgCXJldHVy biAwOw0KPiAgfQ0KPiANCj4gLSNkZWZpbmUgcGFyYW0gKCpwYXJhbSkNCj4gLXN0YXRpYyBpbnQg c2N0cF9zZXRzb2Nrb3B0X2V2ZW50KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNjdHBfZXZlbnQg cGFyYW0sDQo+ICtzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9ldmVudChzdHJ1Y3Qgc29jayAq c2ssIHN0cnVjdCBzY3RwX2V2ZW50ICpwYXJhbSwNCj4gIAkJCQkgdW5zaWduZWQgaW50IG9wdGxl bikNCj4gIHsNCj4gIAlzdHJ1Y3Qgc2N0cF9zb2NrICpzcCA9IHNjdHBfc2soc2spOw0KPiAgCXN0 cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOw0KPiAgCWludCByZXR2YWwgPSAwOw0KPiANCj4g LQlpZiAob3B0bGVuIDwgc2l6ZW9mKHBhcmFtKSkNCj4gKwlpZiAob3B0bGVuIDwgc2l6ZW9mKCpw YXJhbSkpDQo+ICAJCXJldHVybiAtRUlOVkFMOw0KPiANCj4gLQlpZiAocGFyYW0uc2VfdHlwZSA8 IFNDVFBfU05fVFlQRV9CQVNFIHx8DQo+IC0JICAgIHBhcmFtLnNlX3R5cGUgPiBTQ1RQX1NOX1RZ UEVfTUFYKQ0KPiArCWlmIChwYXJhbS0+c2VfdHlwZSA8IFNDVFBfU05fVFlQRV9CQVNFIHx8DQo+ ICsJICAgIHBhcmFtLT5zZV90eXBlID4gU0NUUF9TTl9UWVBFX01BWCkNCj4gIAkJcmV0dXJuIC1F SU5WQUw7DQo+IA0KPiAtCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCBwYXJhbS5zZV9hc3NvY19p ZCk7DQo+IC0JaWYgKCFhc29jICYmIHBhcmFtLnNlX2Fzc29jX2lkID4gU0NUUF9BTExfQVNTT0Mg JiYNCj4gKwlhc29jID0gc2N0cF9pZDJhc3NvYyhzaywgcGFyYW0tPnNlX2Fzc29jX2lkKTsNCj4g KwlpZiAoIWFzb2MgJiYgcGFyYW0tPnNlX2Fzc29jX2lkID4gU0NUUF9BTExfQVNTT0MgJiYNCj4g IAkgICAgc2N0cF9zdHlsZShzaywgVURQKSkNCj4gIAkJcmV0dXJuIC1FSU5WQUw7DQo+IA0KPiAg CWlmIChhc29jKQ0KPiAtCQlyZXR1cm4gc2N0cF9hc3NvY191bHBldmVudF90eXBlX3NldCgmcGFy YW0sIGFzb2MpOw0KPiArCQlyZXR1cm4gc2N0cF9hc3NvY191bHBldmVudF90eXBlX3NldChwYXJh bSwgYXNvYyk7DQo+IA0KPiAgCWlmIChzY3RwX3N0eWxlKHNrLCBUQ1ApKQ0KPiAtCQlwYXJhbS5z ZV9hc3NvY19pZCA9IFNDVFBfRlVUVVJFX0FTU09DOw0KPiArCQlwYXJhbS0+c2VfYXNzb2NfaWQg PSBTQ1RQX0ZVVFVSRV9BU1NPQzsNCj4gDQo+IC0JaWYgKHBhcmFtLnNlX2Fzc29jX2lkID09IFND VFBfRlVUVVJFX0FTU09DIHx8DQo+IC0JICAgIHBhcmFtLnNlX2Fzc29jX2lkID09IFNDVFBfQUxM X0FTU09DKQ0KPiArCWlmIChwYXJhbS0+c2VfYXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0Mg fHwNCj4gKwkgICAgcGFyYW0tPnNlX2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKQ0KPiAgCQlz Y3RwX3VscGV2ZW50X3R5cGVfc2V0KCZzcC0+c3Vic2NyaWJlLA0KPiAtCQkJCSAgICAgICBwYXJh bS5zZV90eXBlLCBwYXJhbS5zZV9vbik7DQo+ICsJCQkJICAgICAgIHBhcmFtLT5zZV90eXBlLCBw YXJhbS0+c2Vfb24pOw0KPiANCj4gLQlpZiAocGFyYW0uc2VfYXNzb2NfaWQgPT0gU0NUUF9DVVJS RU5UX0FTU09DIHx8DQo+IC0JICAgIHBhcmFtLnNlX2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09D KSB7DQo+ICsJaWYgKHBhcmFtLT5zZV9hc3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRfQVNTT0MgfHwN Cj4gKwkgICAgcGFyYW0tPnNlX2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSB7DQo+ICAJCWxp c3RfZm9yX2VhY2hfZW50cnkoYXNvYywgJnNwLT5lcC0+YXNvY3MsIGFzb2NzKSB7DQo+IC0JCQlp bnQgcmV0ID0gc2N0cF9hc3NvY191bHBldmVudF90eXBlX3NldCgmcGFyYW0sIGFzb2MpOw0KPiAr CQkJaW50IHJldCA9IHNjdHBfYXNzb2NfdWxwZXZlbnRfdHlwZV9zZXQocGFyYW0sIGFzb2MpOw0K PiANCj4gIAkJCWlmIChyZXQgJiYgIXJldHZhbCkNCj4gIAkJCQlyZXR2YWwgPSByZXQ7DQo+IEBA IC00MzM0LDI2ICs0MzExLDI1IEBAIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2V2ZW50KHN0 cnVjdCBzb2NrICpzaywgc3RydWN0IHNjdHBfZXZlbnQgcGFyYW0sDQo+IA0KPiAgCXJldHVybiBy ZXR2YWw7DQo+ICB9DQo+IC0jdW5kZWYgcGFyYW0NCj4gDQo+ICBzdGF0aWMgaW50IHNjdHBfc2V0 c29ja29wdF9hc2NvbmZfc3VwcG9ydGVkKHN0cnVjdCBzb2NrICpzaywNCj4gLQkJCQkJICAgIHN0 cnVjdCBzY3RwX2Fzc29jX3ZhbHVlIHBhcmFtcywNCj4gKwkJCQkJICAgIHN0cnVjdCBzY3RwX2Fz c29jX3ZhbHVlICpwYXJhbXMsDQo+ICAJCQkJCSAgICB1bnNpZ25lZCBpbnQgb3B0bGVuKQ0KPiAg ew0KPiAgCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOw0KPiAgCXN0cnVjdCBzY3RwX2Vu ZHBvaW50ICplcDsNCj4gIAlpbnQgcmV0dmFsID0gLUVJTlZBTDsNCj4gDQo+IC0JaWYgKG9wdGxl biAhPSBzaXplb2YocGFyYW1zKSkNCj4gKwlpZiAob3B0bGVuICE9IHNpemVvZigqcGFyYW1zKSkN Cj4gIAkJZ290byBvdXQ7DQo+IA0KPiAtCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCBwYXJhbXMu YXNzb2NfaWQpOw0KPiAtCWlmICghYXNvYyAmJiBwYXJhbXMuYXNzb2NfaWQgIT0gU0NUUF9GVVRV UkVfQVNTT0MgJiYNCj4gKwlhc29jID0gc2N0cF9pZDJhc3NvYyhzaywgcGFyYW1zLT5hc3NvY19p ZCk7DQo+ICsJaWYgKCFhc29jICYmIHBhcmFtcy0+YXNzb2NfaWQgIT0gU0NUUF9GVVRVUkVfQVNT T0MgJiYNCj4gIAkgICAgc2N0cF9zdHlsZShzaywgVURQKSkNCj4gIAkJZ290byBvdXQ7DQo+IA0K PiAgCWVwID0gc2N0cF9zayhzayktPmVwOw0KPiAtCWVwLT5hc2NvbmZfZW5hYmxlID0gISFwYXJh bXMuYXNzb2NfdmFsdWU7DQo+ICsJZXAtPmFzY29uZl9lbmFibGUgPSAhIXBhcmFtcy0+YXNzb2Nf dmFsdWU7DQo+IA0KPiAgCWlmIChlcC0+YXNjb25mX2VuYWJsZSAmJiBlcC0+YXV0aF9lbmFibGUp IHsNCj4gIAkJc2N0cF9hdXRoX2VwX2FkZF9jaHVua2lkKGVwLCBTQ1RQX0NJRF9BU0NPTkYpOw0K PiBAQCAtNDM2NywyMyArNDM0MywyMyBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9hc2Nv bmZfc3VwcG9ydGVkKHN0cnVjdCBzb2NrICpzaywNCj4gIH0NCj4gDQo+ICBzdGF0aWMgaW50IHNj dHBfc2V0c29ja29wdF9hdXRoX3N1cHBvcnRlZChzdHJ1Y3Qgc29jayAqc2ssDQo+IC0JCQkJCSAg c3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgcGFyYW1zLA0KPiArCQkJCQkgIHN0cnVjdCBzY3RwX2Fz c29jX3ZhbHVlICpwYXJhbXMsDQo+ICAJCQkJCSAgdW5zaWduZWQgaW50IG9wdGxlbikNCj4gIHsN Cj4gIAlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsNCj4gIAlzdHJ1Y3Qgc2N0cF9lbmRw b2ludCAqZXA7DQo+ICAJaW50IHJldHZhbCA9IC1FSU5WQUw7DQo+IA0KPiAtCWlmIChvcHRsZW4g IT0gc2l6ZW9mKHBhcmFtcykpDQo+ICsJaWYgKG9wdGxlbiAhPSBzaXplb2YoKnBhcmFtcykpDQo+ ICAJCWdvdG8gb3V0Ow0KPiANCj4gLQlhc29jID0gc2N0cF9pZDJhc3NvYyhzaywgcGFyYW1zLmFz c29jX2lkKTsNCj4gLQlpZiAoIWFzb2MgJiYgcGFyYW1zLmFzc29jX2lkICE9IFNDVFBfRlVUVVJF X0FTU09DICYmDQo+ICsJYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ssIHBhcmFtcy0+YXNzb2NfaWQp Ow0KPiArCWlmICghYXNvYyAmJiBwYXJhbXMtPmFzc29jX2lkICE9IFNDVFBfRlVUVVJFX0FTU09D ICYmDQo+ICAJICAgIHNjdHBfc3R5bGUoc2ssIFVEUCkpDQo+ICAJCWdvdG8gb3V0Ow0KPiANCj4g IAllcCA9IHNjdHBfc2soc2spLT5lcDsNCj4gLQlpZiAocGFyYW1zLmFzc29jX3ZhbHVlKSB7DQo+ ICsJaWYgKHBhcmFtcy0+YXNzb2NfdmFsdWUpIHsNCj4gIAkJcmV0dmFsID0gc2N0cF9hdXRoX2lu aXQoZXAsIEdGUF9LRVJORUwpOw0KPiAgCQlpZiAocmV0dmFsKQ0KPiAgCQkJZ290byBvdXQ7DQo+ IEBAIC00MzkzLDcgKzQzNjksNyBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9hdXRoX3N1 cHBvcnRlZChzdHJ1Y3Qgc29jayAqc2ssDQo+ICAJCX0NCj4gIAl9DQo+IA0KPiAtCWVwLT5hdXRo X2VuYWJsZSA9ICEhcGFyYW1zLmFzc29jX3ZhbHVlOw0KPiArCWVwLT5hdXRoX2VuYWJsZSA9ICEh cGFyYW1zLT5hc3NvY192YWx1ZTsNCj4gIAlyZXR2YWwgPSAwOw0KPiANCj4gIG91dDoNCj4gQEAg LTQ0MDEsMjEgKzQzNzcsMjEgQEAgc3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfYXV0aF9zdXBw b3J0ZWQoc3RydWN0IHNvY2sgKnNrLA0KPiAgfQ0KPiANCj4gIHN0YXRpYyBpbnQgc2N0cF9zZXRz b2Nrb3B0X2Vjbl9zdXBwb3J0ZWQoc3RydWN0IHNvY2sgKnNrLA0KPiAtCQkJCQkgc3RydWN0IHNj dHBfYXNzb2NfdmFsdWUgcGFyYW1zLA0KPiArCQkJCQkgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUg KnBhcmFtcywNCj4gIAkJCQkJIHVuc2lnbmVkIGludCBvcHRsZW4pDQo+ICB7DQo+ICAJc3RydWN0 IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7DQo+ICAJaW50IHJldHZhbCA9IC1FSU5WQUw7DQo+IA0K PiAtCWlmIChvcHRsZW4gIT0gc2l6ZW9mKHBhcmFtcykpDQo+ICsJaWYgKG9wdGxlbiAhPSBzaXpl b2YoKnBhcmFtcykpDQo+ICAJCWdvdG8gb3V0Ow0KPiANCj4gLQlhc29jID0gc2N0cF9pZDJhc3Nv YyhzaywgcGFyYW1zLmFzc29jX2lkKTsNCj4gLQlpZiAoIWFzb2MgJiYgcGFyYW1zLmFzc29jX2lk ICE9IFNDVFBfRlVUVVJFX0FTU09DICYmDQo+ICsJYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ssIHBh cmFtcy0+YXNzb2NfaWQpOw0KPiArCWlmICghYXNvYyAmJiBwYXJhbXMtPmFzc29jX2lkICE9IFND VFBfRlVUVVJFX0FTU09DICYmDQo+ICAJICAgIHNjdHBfc3R5bGUoc2ssIFVEUCkpDQo+ICAJCWdv dG8gb3V0Ow0KPiANCj4gLQlzY3RwX3NrKHNrKS0+ZXAtPmVjbl9lbmFibGUgPSAhIXBhcmFtcy5h c3NvY192YWx1ZTsNCj4gKwlzY3RwX3NrKHNrKS0+ZXAtPmVjbl9lbmFibGUgPSAhIXBhcmFtcy0+ YXNzb2NfdmFsdWU7DQo+ICAJcmV0dmFsID0gMDsNCj4gDQo+ICBvdXQ6DQo+IEBAIC00NDIzLDMz ICs0Mzk5LDMyIEBAIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2Vjbl9zdXBwb3J0ZWQoc3Ry dWN0IHNvY2sgKnNrLA0KPiAgfQ0KPiANCj4gIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X3Bm X2V4cG9zZShzdHJ1Y3Qgc29jayAqc2ssDQo+IC0JCQkJICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY192 YWx1ZSBwYXJhbXMsDQo+ICsJCQkJICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqcGFyYW1z LA0KPiAgCQkJCSAgICAgdW5zaWduZWQgaW50IG9wdGxlbikNCj4gIHsNCj4gIAlzdHJ1Y3Qgc2N0 cF9hc3NvY2lhdGlvbiAqYXNvYzsNCj4gIAlpbnQgcmV0dmFsID0gLUVJTlZBTDsNCj4gDQo+IC0J aWYgKG9wdGxlbiAhPSBzaXplb2YocGFyYW1zKSkNCj4gKwlpZiAob3B0bGVuICE9IHNpemVvZigq cGFyYW1zKSkNCj4gIAkJZ290byBvdXQ7DQo+IA0KPiAtCWlmIChwYXJhbXMuYXNzb2NfdmFsdWUg PiBTQ1RQX1BGX0VYUE9TRV9NQVgpDQo+ICsJaWYgKHBhcmFtcy0+YXNzb2NfdmFsdWUgPiBTQ1RQ X1BGX0VYUE9TRV9NQVgpDQo+ICAJCWdvdG8gb3V0Ow0KPiANCj4gLQlhc29jID0gc2N0cF9pZDJh c3NvYyhzaywgcGFyYW1zLmFzc29jX2lkKTsNCj4gLQlpZiAoIWFzb2MgJiYgcGFyYW1zLmFzc29j X2lkICE9IFNDVFBfRlVUVVJFX0FTU09DICYmDQo+ICsJYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ss IHBhcmFtcy0+YXNzb2NfaWQpOw0KPiArCWlmICghYXNvYyAmJiBwYXJhbXMtPmFzc29jX2lkICE9 IFNDVFBfRlVUVVJFX0FTU09DICYmDQo+ICAJICAgIHNjdHBfc3R5bGUoc2ssIFVEUCkpDQo+ICAJ CWdvdG8gb3V0Ow0KPiANCj4gIAlpZiAoYXNvYykNCj4gLQkJYXNvYy0+cGZfZXhwb3NlID0gcGFy YW1zLmFzc29jX3ZhbHVlOw0KPiArCQlhc29jLT5wZl9leHBvc2UgPSBwYXJhbXMtPmFzc29jX3Zh bHVlOw0KPiAgCWVsc2UNCj4gLQkJc2N0cF9zayhzayktPnBmX2V4cG9zZSA9IHBhcmFtcy5hc3Nv Y192YWx1ZTsNCj4gKwkJc2N0cF9zayhzayktPnBmX2V4cG9zZSA9IHBhcmFtcy0+YXNzb2NfdmFs dWU7DQo+ICAJcmV0dmFsID0gMDsNCj4gDQo+ICBvdXQ6DQo+ICAJcmV0dXJuIHJldHZhbDsNCj4g IH0NCj4gLSN1bmRlZiBwYXJhbXMNCj4gDQo+ICBzdGF0aWMgaW50IGtlcm5lbF9zY3RwX3NldHNv Y2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgdm9pZCAqb3B0dmFsLA0KPiAgCQkJ ICAgaW50IG9wdGxlbikNCj4gLS0NCj4gMS44LjEuMg0KPiANCj4gLQ0KPiBSZWdpc3RlcmVkIEFk ZHJlc3MgTGFrZXNpZGUsIEJyYW1sZXkgUm9hZCwgTW91bnQgRmFybSwgTWlsdG9uIEtleW5lcywg TUsxIDFQVCwgVUsNCj4gUmVnaXN0cmF0aW9uIE5vOiAxMzk3Mzg2IChXYWxlcykNCg0KLQ0KUmVn aXN0ZXJlZCBBZGRyZXNzIExha2VzaWRlLCBCcmFtbGV5IFJvYWQsIE1vdW50IEZhcm0sIE1pbHRv biBLZXluZXMsIE1LMSAxUFQsIFVLDQpSZWdpc3RyYXRpb24gTm86IDEzOTczODYgKFdhbGVzKQ0K