From mboxrd@z Thu Jan 1 00:00:00 1970 From: majianpeng Subject: Re: Re: [PATCH V1] raid5: Correct some failed-stripe because the badsector. Date: Tue, 19 Feb 2013 14:54:19 +0800 Message-ID: <2013021914541607551233@gmail.com> References: <201301141644459529478@gmail.com>, <20130207130547.1a00745e@notabene.brown> Reply-To: majianpeng Mime-Version: 1.0 Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 Return-path: Sender: linux-raid-owner@vger.kernel.org To: NeilBrown Cc: linux-raid , =?gb2312?B?sd8sINPq?= , =?gb2312?B?1twsIPfo?= List-Id: linux-raid.ids Pk9uIE1vbiwgMTQgSmFuIDIwMTMgMTY6NDQ6NDkgKzA4MDAgbWFqaWFucGVuZyA8bWFqaWFucGVu Z0BnbWFpbC5jb20+IHdyb3RlOg0KPg0KPj4gQXQgcHJlc2VudCBmb3IgZmFpbGVkLXN0cmlwZXMs dGhlIHdyaXRlL3JlYWQgb3BlcmF0aW9ucyB3aWxsIG9ubHkgcmV0dXJuIGVycm9yLkJ1dCB0aGVy ZQ0KPj4gYXJlIHNvbWUgZmFpbGVkLXN0cmlwZXMgd2hpY2ggY2FuIGNvcnJlY3QgYnkgd3JpdGUg b3BlcmF0aW9uLg0KPj4gDQo+PiBGb3IgZXhhbXBsZToNCj4+IDE6Q3JlYXRlIGEgcmFpZDUgYnkg Zm91ciBkaXNrcyBtaXNzaW5nL3NkYi9zZGMvc2RkLg0KPj4gMjpJZiByZWFkZWQgIGRhdGEgZnJv bSBzZGIgYW5kIG1ldCBlcnJvcixzbyB0aGUgc3RyaXBlIGlzIGZhaWxlZC5CZWNhdXNlDQo+PiB0 aGUgc3RyaXBlIHdhcyBkZWdyYWRlZCx0aGVyZSBpcyBubyBjaGFuY2UgdG8gY29ycmVjdCB0aGUg cmVhZC1lcnJvci4NCj4+IDM6SWYgbGF0ZXIgd3JpdGUtc3RyaXBlIGNvbnRhaW5zIHNkYiB3aGlj aCBvdmVyd3JpdGUuVGhlIHN0cmlwZSBoYXMgYQ0KPj4gY2hhbmNlIHRvIGNvcnJlY3QuDQo+PiA0 OklmIHN0ZXAzIHN1Y2Nlc3NlZCwgYWRkIGEgc3BhcmUgZGlzayB0byByYWlkLHRoZSByYWlkIGNh biBiZSBhY3RpdmUNCj4+IGZyb20gZGVncmFkZWQuDQo+PiANCj4+IFRoZXJlIGFyZSB0d28gbWV0 aG9kcyB0byBjb21wdXRlIHJhaWQ1IHBhcml0eSxyY3cgYW5kIHJtdy4NCj4+IEluIHRoaXMgc2l0 dWF0aW9uLGl0IG9ubHkgdXNlZCByY3cuDQo+PiBUaGVyZSBhcmUgc29tZSBjb25kaXRpb25zIGZv ciBjb3JyZWN0aW5nIGZhaWxlZC1zdHJpcGUNCj4+IEE6IGluIGEgc3RyaXBlIHRoZXJlIGFyZSBv bmx5IG9uZSBvciB0d28gYmFkZGlza3MobWF5YmUgZmF1bHR5L3JlbW92ZWQvcmVhZC1lcnJvci93 cml0ZS1lcnJvcikuDQo+PiBCOiBpbiBhIHN0cmlwZSBmb3IgYmFkZGlza3MgZXhjbHVkZSBwYXJp dHkgZGlza3MsdGhleSBtdXN0IG92ZXJ3cml0ZS4NCj4+IEM6QWZ0ZXIgd3JpdGluZyBkYXRhLGZv ciByZWFkLWVycm9yIGRpc2tzIGl0IG11c3QgcmVyZWFkIHRvIGNoZWNrLg0KPj4gDQo+PiANCj4+ IFRlc3RlZC1ieTogUWkgWmhvdSA8cWkuZy56aG91QGdtYWlsLmNvbT4NCj4+IFNpZ25lZC1vZmYt Ynk6IFl1IEJpYW4gPHljYnp6amxieWJ5QGdtYWlsLmNvbT4NCj4+IFNpZ25lZC1vZmYtYnk6IEpp YW5wZW5nIE1hIDxtYWppYW5wZW5nQGdtYWlsLmNvbT4NCj4+IC0tLQ0KPj4gIGRyaXZlcnMvbWQv cmFpZDUuYyB8ICAxMzMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrLS0tLS0tLQ0KPj4gIGRyaXZlcnMvbWQvcmFpZDUuaCB8ICAgIDkgKysrKw0KPj4gIDIgZmls ZXMgY2hhbmdlZCwgMTI1IGluc2VydGlvbnMoKyksIDE3IGRlbGV0aW9ucygtKQ0KPj4gDQo+PiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNS5jIGIvZHJpdmVycy9tZC9yYWlkNS5jDQo+PiBp bmRleCAxOWQ3N2EwLi5mZDhmZTU4IDEwMDY0NA0KPj4gLS0tIGEvZHJpdmVycy9tZC9yYWlkNS5j DQo+PiArKysgYi9kcml2ZXJzL21kL3JhaWQ1LmMNCj4+IEBAIC0yMjQsNiArMjI0LDcgQEAgc3Rh dGljIHZvaWQgZG9fcmVsZWFzZV9zdHJpcGUoc3RydWN0IHI1Y29uZiAqY29uZiwgc3RydWN0IHN0 cmlwZV9oZWFkICpzaCkNCj4+ICAJCQkgICAgPCBJT19USFJFU0hPTEQpDQo+PiAgCQkJCW1kX3dh a2V1cF90aHJlYWQoY29uZi0+bWRkZXYtPnRocmVhZCk7DQo+PiAgCQlhdG9taWNfZGVjKCZjb25m LT5hY3RpdmVfc3RyaXBlcyk7DQo+PiArCQljbGVhcl9iaXQoU1RSSVBFX0ZBSUxFRF9SRVJFQUQs ICZzaC0+c3RhdGUpOw0KPj4gIAkJaWYgKCF0ZXN0X2JpdChTVFJJUEVfRVhQQU5ESU5HLCAmc2gt PnN0YXRlKSkgew0KPj4gIAkJCWxpc3RfYWRkX3RhaWwoJnNoLT5scnUsICZjb25mLT5pbmFjdGl2 ZV9saXN0KTsNCj4+ICAJCQl3YWtlX3VwKCZjb25mLT53YWl0X2Zvcl9zdHJpcGUpOw0KPj4gQEAg LTE4MDAsNiArMTgwMSw3IEBAIHN0YXRpYyB2b2lkIHJhaWQ1X2VuZF9yZWFkX3JlcXVlc3Qoc3Ry dWN0IGJpbyAqIGJpLCBpbnQgZXJyb3IpDQo+PiAgCQkJYXRvbWljX2FkZChTVFJJUEVfU0VDVE9S UywgJnJkZXYtPmNvcnJlY3RlZF9lcnJvcnMpOw0KPj4gIAkJCWNsZWFyX2JpdChSNV9SZWFkRXJy b3IsICZzaC0+ZGV2W2ldLmZsYWdzKTsNCj4+ICAJCQljbGVhcl9iaXQoUjVfUmVXcml0ZSwgJnNo LT5kZXZbaV0uZmxhZ3MpOw0KPj4gKwkJCWNsZWFyX2JpdChSNV9GYWlsZWRSZXJlYWQsICZzaC0+ ZGV2W2ldLmZsYWdzKTsNCj4+ICAJCX0gZWxzZSBpZiAodGVzdF9iaXQoUjVfUmVhZE5vTWVyZ2Us ICZzaC0+ZGV2W2ldLmZsYWdzKSkNCj4+ICAJCQljbGVhcl9iaXQoUjVfUmVhZE5vTWVyZ2UsICZz aC0+ZGV2W2ldLmZsYWdzKTsNCj4+ICANCj4+IEBAIC0xODU1LDYgKzE4NTcsNyBAQCBzdGF0aWMg dm9pZCByYWlkNV9lbmRfcmVhZF9yZXF1ZXN0KHN0cnVjdCBiaW8gKiBiaSwgaW50IGVycm9yKQ0K Pj4gIAkJZWxzZSB7DQo+PiAgCQkJY2xlYXJfYml0KFI1X1JlYWRFcnJvciwgJnNoLT5kZXZbaV0u ZmxhZ3MpOw0KPj4gIAkJCWNsZWFyX2JpdChSNV9SZVdyaXRlLCAmc2gtPmRldltpXS5mbGFncyk7 DQo+PiArCQkJY2xlYXJfYml0KFI1X0ZhaWxlZFJlcmVhZCwgJnNoLT5kZXZbaV0uZmxhZ3MpOw0K Pj4gIAkJCWlmICghKHNldF9iYWQNCj4+ICAJCQkgICAgICAmJiB0ZXN0X2JpdChJbl9zeW5jLCAm cmRldi0+ZmxhZ3MpDQo+PiAgCQkJICAgICAgJiYgcmRldl9zZXRfYmFkYmxvY2tzKA0KPj4gQEAg LTE5MTYsNiArMTkxOSw3IEBAIHN0YXRpYyB2b2lkIHJhaWQ1X2VuZF93cml0ZV9yZXF1ZXN0KHN0 cnVjdCBiaW8gKmJpLCBpbnQgZXJyb3IpDQo+PiAgCQlpZiAoIXVwdG9kYXRlKSB7DQo+PiAgCQkJ c2V0X2JpdChXcml0ZUVycm9yU2VlbiwgJnJkZXYtPmZsYWdzKTsNCj4+ICAJCQlzZXRfYml0KFI1 X1dyaXRlRXJyb3IsICZzaC0+ZGV2W2ldLmZsYWdzKTsNCj4+ICsJCQljbGVhcl9iaXQoUjVfRmFp bGVkT3ZlcndyaXRlLCAmc2gtPmRldltpXS5mbGFncyk7DQo+PiAgCQkJaWYgKCF0ZXN0X2FuZF9z ZXRfYml0KFdhbnRSZXBsYWNlbWVudCwgJnJkZXYtPmZsYWdzKSkNCj4+ICAJCQkJc2V0X2JpdChN RF9SRUNPVkVSWV9ORUVERUQsDQo+PiAgCQkJCQkmcmRldi0+bWRkZXYtPnJlY292ZXJ5KTsNCj4+ IEBAIC0yNTIzLDYgKzI1MjcsMTAgQEAgaGFuZGxlX2ZhaWxlZF9zdHJpcGUoc3RydWN0IHI1Y29u ZiAqY29uZiwgc3RydWN0IHN0cmlwZV9oZWFkICpzaCwNCj4+ICAJCWlmIChiaSkNCj4+ICAJCQli aXRtYXBfZW5kID0gMTsNCj4+ICANCj4+ICsJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUjVfRmFp bGVkT3ZlcndyaXRlLCAmc2gtPmRldltpXS5mbGFncykpDQo+PiArCQkJcy0+ZmFpbGVkX292ZXJ3 cml0ZS0tOw0KPj4gKwkJY2xlYXJfYml0KFI1X0JhZFBhcml0eSwgJnNoLT5kZXZbaV0uZmxhZ3Mp Ow0KPj4gKw0KPj4gIAkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSNV9PdmVybGFwLCAmc2gtPmRl dltpXS5mbGFncykpDQo+PiAgCQkJd2FrZV91cCgmY29uZi0+d2FpdF9mb3Jfb3ZlcmxhcCk7DQo+ PiAgDQo+PiBAQCAtMjgzOCw2ICsyODQ2LDEwIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9zdHJpcGVf ZGlydHlpbmcoc3RydWN0IHI1Y29uZiAqY29uZiwNCj4+ICAJCXByX2RlYnVnKCJmb3JjZSBSQ1cg bWF4X2RlZ3JhZGVkPSV1LCByZWNvdmVyeV9jcD0lbGx1IHNoLT5zZWN0b3I9JWxsdVxuIiwNCj4+ ICAJCQkgY29uZi0+bWF4X2RlZ3JhZGVkLCAodW5zaWduZWQgbG9uZyBsb25nKXJlY292ZXJ5X2Nw LA0KPj4gIAkJCSAodW5zaWduZWQgbG9uZyBsb25nKXNoLT5zZWN0b3IpOw0KPj4gKwl9IGVsc2Ug aWYgKHMtPmZhaWxlZCA+IGNvbmYtPm1heF9kZWdyYWRlZCkgew0KPj4gKwkJLypGb3Igd3JpdGUg ZmFpbGVkLXN0cmlwZSwgb25seSB1c2UgcmN3ICovDQo+PiArCQlyY3cgPSAxOw0KPj4gKwkJcm13 ID0gMjsNCj4+ICAJfSBlbHNlIGZvciAoaSA9IGRpc2tzOyBpLS07ICkgew0KPj4gIAkJLyogd291 bGQgSSBoYXZlIHRvIHJlYWQgdGhpcyBidWZmZXIgZm9yIHJlYWRfbW9kaWZ5X3dyaXRlICovDQo+ PiAgCQlzdHJ1Y3QgcjVkZXYgKmRldiA9ICZzaC0+ZGV2W2ldOw0KPj4gQEAgLTI5MDAsOCArMjkx MiwxMyBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfc3RyaXBlX2RpcnR5aW5nKHN0cnVjdCByNWNvbmYg KmNvbmYsDQo+PiAgCQkJICAgICEodGVzdF9iaXQoUjVfVVBUT0RBVEUsICZkZXYtPmZsYWdzKSB8 fA0KPj4gIAkJCSAgICAgIHRlc3RfYml0KFI1X1dhbnRjb21wdXRlLCAmZGV2LT5mbGFncykpKSB7 DQo+PiAgCQkJCXJjdysrOw0KPj4gLQkJCQlpZiAoIXRlc3RfYml0KFI1X0luc3luYywgJmRldi0+ ZmxhZ3MpKQ0KPj4gKwkJCQlpZiAoIXRlc3RfYml0KFI1X0luc3luYywgJmRldi0+ZmxhZ3MpKSB7 DQo+PiArCQkJCSAvKiBPbmx5IGZvciBhbGwgZGF0YS1kaXNrcyAhUjVfSW5zeW5jICovDQo+PiAr CQkJCQlpZiAocy0+ZmFpbGVkID4gY29uZi0+bWF4X2RlZ3JhZGVkICYmDQo+PiArCQkJCQkJIXRl c3RfYml0KFNUUklQRV9GQUlMRURfV1JJVEUsICZzaC0+c3RhdGUpKQ0KPj4gKwkJCQkJCXNldF9i aXQoU1RSSVBFX0RFTEFZRUQsICZzaC0+c3RhdGUpOw0KPj4gIAkJCQkJY29udGludWU7IC8qIGl0 J3MgYSBmYWlsZWQgZHJpdmUgKi8NCj4+ICsJCQkJfQ0KPj4gIAkJCQlpZiAoDQo+PiAgCQkJCSAg dGVzdF9iaXQoU1RSSVBFX1BSRVJFQURfQUNUSVZFLCAmc2gtPnN0YXRlKSkgew0KPj4gIAkJCQkJ cHJfZGVidWcoIlJlYWRfb2xkIGJsb2NrICINCj4+IEBAIC0zMzQ3LDkgKzMzNjQsMTQgQEAgc3Rh dGljIHZvaWQgYW5hbHlzZV9zdHJpcGUoc3RydWN0IHN0cmlwZV9oZWFkICpzaCwgc3RydWN0IHN0 cmlwZV9oZWFkX3N0YXRlICpzKQ0KPj4gIAkJCX0NCj4+ICAJCX0NCj4+ICAJCWNsZWFyX2JpdChS NV9JbnN5bmMsICZkZXYtPmZsYWdzKTsNCj4+IC0JCWlmICghcmRldikNCj4+IC0JCQkvKiBOb3Qg aW4tc3luYyAqLzsNCj4+IC0JCWVsc2UgaWYgKGlzX2JhZCkgew0KPj4gKwkJaWYgKCFyZGV2KSB7 DQo+PiArCQkJcy0+bm93b3JrZWQrKzsNCj4+ICsJCQlpZiAoKGRldi0+dG93cml0ZSAmJiB0ZXN0 X2JpdChSNV9PVkVSV1JJVEUsICZkZXYtPmZsYWdzKSkgfHwNCj4+ICsJCQkJdGVzdF9iaXQoUjVf RmFpbGVkT3ZlcndyaXRlLCAmZGV2LT5mbGFncykpIHsNCj4+ICsJCQkJcy0+ZmFpbGVkX292ZXJ3 cml0ZSsrOw0KPj4gKwkJCQlzZXRfYml0KFI1X0ZhaWxlZE92ZXJ3cml0ZSwgJmRldi0+ZmxhZ3Mp Ow0KPj4gKwkJCX0NCj4+ICsJCX0gZWxzZSBpZiAoaXNfYmFkKSB7DQo+PiAgCQkJLyogYWxzbyBu b3QgaW4tc3luYyAqLw0KPj4gIAkJCWlmICghdGVzdF9iaXQoV3JpdGVFcnJvclNlZW4sICZyZGV2 LT5mbGFncykgJiYNCj4+ICAJCQkgICAgdGVzdF9iaXQoUjVfVVBUT0RBVEUsICZkZXYtPmZsYWdz KSkgew0KPj4gQEAgLTMzNTksNiArMzM4MSwxMyBAQCBzdGF0aWMgdm9pZCBhbmFseXNlX3N0cmlw ZShzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLCBzdHJ1Y3Qgc3RyaXBlX2hlYWRfc3RhdGUgKnMpDQo+ PiAgCQkJCXNldF9iaXQoUjVfSW5zeW5jLCAmZGV2LT5mbGFncyk7DQo+PiAgCQkJCXNldF9iaXQo UjVfUmVhZEVycm9yLCAmZGV2LT5mbGFncyk7DQo+PiAgCQkJfQ0KPj4gKwkJCWlmICghdGVzdF9i aXQoV3JpdGVFcnJvclNlZW4sICZyZGV2LT5mbGFncykgJiYNCj4+ICsJCQkJKChkZXYtPnRvd3Jp dGUgJiYgdGVzdF9iaXQoUjVfT1ZFUldSSVRFLCAmZGV2LT5mbGFncykpIHx8DQo+PiArCQkJCXRl c3RfYml0KFI1X0ZhaWxlZE92ZXJ3cml0ZSwgJmRldi0+ZmxhZ3MpKSkgew0KPj4gKwkJCQlzLT5m YWlsZWRfb3ZlcndyaXRlKys7DQo+PiArCQkJCXNldF9iaXQoUjVfRmFpbGVkT3ZlcndyaXRlLCAm ZGV2LT5mbGFncyk7DQo+PiArCQkJfSBlbHNlIGlmIChpID09IHNoLT5wZF9pZHggfHwgaSA9PSBz aC0+cWRfaWR4KQ0KPj4gKwkJCQlzZXRfYml0KFI1X0JhZFBhcml0eSwgJmRldi0+ZmxhZ3MpOw0K Pj4gIAkJfSBlbHNlIGlmICh0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpKQ0KPj4gIAkJ CXNldF9iaXQoUjVfSW5zeW5jLCAmZGV2LT5mbGFncyk7DQo+PiAgCQllbHNlIGlmIChzaC0+c2Vj dG9yICsgU1RSSVBFX1NFQ1RPUlMgPD0gcmRldi0+cmVjb3Zlcnlfb2Zmc2V0KQ0KPj4gQEAgLTM0 MTAsMTQgKzM0MzksMzYgQEAgc3RhdGljIHZvaWQgYW5hbHlzZV9zdHJpcGUoc3RydWN0IHN0cmlw ZV9oZWFkICpzaCwgc3RydWN0IHN0cmlwZV9oZWFkX3N0YXRlICpzKQ0KPj4gIAkJCWNsZWFyX2Jp dChSNV9SZWFkRXJyb3IsICZkZXYtPmZsYWdzKTsNCj4+ICAJCQljbGVhcl9iaXQoUjVfUmVXcml0 ZSwgJmRldi0+ZmxhZ3MpOw0KPj4gIAkJfQ0KPj4gLQkJaWYgKHRlc3RfYml0KFI1X1JlYWRFcnJv ciwgJmRldi0+ZmxhZ3MpKQ0KPj4gLQkJCWNsZWFyX2JpdChSNV9JbnN5bmMsICZkZXYtPmZsYWdz KTsNCj4+ICsJCWlmICh0ZXN0X2JpdChSNV9SZWFkRXJyb3IsICZkZXYtPmZsYWdzKSkgew0KPj4g KwkJCS8qDQo+PiArCQkJICogRm9yIGZhaWxlZC1zdHJpcGUgd2hpY2ggY29udGFpbmVkIGJhZHNl Y3RvcnMsYWZ0ZXIgd3JpdGluZw0KPj4gKwkJCSAqIGl0IHNob3VsZCByZXJlYWQgdG8gY2hlY2su DQo+PiArCQkJICovDQo+PiArCQkJc3RydWN0IG1kX3JkZXYgKnJkZXYyID0gcmN1X2RlcmVmZXJl bmNlKGNvbmYtPmRpc2tzW2ldLnJkZXYpOw0KPj4gKwkJCWlmICghaXNfYmFkICYmIHJkZXYyICYm ICF0ZXN0X2JpdChGYXVsdHksICZyZGV2Mi0+ZmxhZ3MpICYmDQo+PiArCQkJCXRlc3RfYml0KFI1 X1VQVE9EQVRFLCAmZGV2LT5mbGFncykgJiYNCj4+ICsJCQkJKHRlc3RfYml0KFI1X0ZhaWxlZE92 ZXJ3cml0ZSwgJmRldi0+ZmxhZ3MpIHx8DQo+PiArCQkJCSB0ZXN0X2JpdChSNV9CYWRQYXJpdHks ICZkZXYtPmZsYWdzKSB8fA0KPj4gKwkJCQkgdGVzdF9iaXQoUjVfRmFpbGVkUmVyZWFkLCAmZGV2 LT5mbGFncykpKSB7DQo+PiArCQkJCXNldF9iaXQoU1RSSVBFX0ZBSUxFRF9SRVJFQUQsICZzaC0+ c3RhdGUpOw0KPj4gKwkJCQlzZXRfYml0KFI1X0ZhaWxlZFJlcmVhZCwgJmRldi0+ZmxhZ3MpOw0K Pj4gKwkJCQljbGVhcl9iaXQoUjVfRmFpbGVkT3ZlcndyaXRlLCAmZGV2LT5mbGFncyk7DQo+PiAr CQkJCWNsZWFyX2JpdChSNV9CYWRQYXJpdHksICZkZXYtPmZsYWdzKTsNCj4+ICsJCQl9IGVsc2UN Cj4+ICsJCQkJY2xlYXJfYml0KFI1X0luc3luYywgJmRldi0+ZmxhZ3MpOw0KPj4gKwkJfQ0KPj4g Kw0KPj4gIAkJaWYgKCF0ZXN0X2JpdChSNV9JbnN5bmMsICZkZXYtPmZsYWdzKSkgew0KPj4gIAkJ CWlmIChzLT5mYWlsZWQgPCAyKQ0KPj4gIAkJCQlzLT5mYWlsZWRfbnVtW3MtPmZhaWxlZF0gPSBp Ow0KPj4gIAkJCXMtPmZhaWxlZCsrOw0KPj4gIAkJCWlmIChyZGV2ICYmICF0ZXN0X2JpdChGYXVs dHksICZyZGV2LT5mbGFncykpDQo+PiAgCQkJCWRvX3JlY292ZXJ5ID0gMTsNCj4+ICsJCQlpZiAo aSA9PSBzaC0+cGRfaWR4KQ0KPj4gKwkJCQlzLT5wX2ZhaWxlZCA9IDE7DQo+PiArCQkJZWxzZSBp ZiAoaSA9PSBzaC0+cWRfaWR4KQ0KPj4gKwkJCQlzLT5xX2ZhaWxlZCA9IDE7DQo+PiArDQo+PiAg CQl9DQo+PiAgCX0NCj4+ICAJaWYgKHRlc3RfYml0KFNUUklQRV9TWU5DSU5HLCAmc2gtPnN0YXRl KSkgew0KPj4gQEAgLTM0OTIsMTkgKzM1NDMsNDYgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3N0cmlw ZShzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoKQ0KPj4gIAl9DQo+PiAgDQo+PiAgCXByX2RlYnVnKCJs b2NrZWQ9JWQgdXB0b2RhdGU9JWQgdG9fcmVhZD0lZCINCj4+IC0JICAgICAgICIgdG9fd3JpdGU9 JWQgZmFpbGVkPSVkIGZhaWxlZF9udW09JWQsJWRcbiIsDQo+PiArCQkiIHRvX3dyaXRlPSVkIGZh aWxlZD0lZCBmYWlsZWRfbnVtPSVkLCVkIg0KPj4gKwkJIiBmYWlsZWRfb3ZlcndyaXRlPSVkIHBf ZmFpbGVkPSVkIHFfZmFpbGVkPSVkXG4iLA0KPj4gIAkgICAgICAgcy5sb2NrZWQsIHMudXB0b2Rh dGUsIHMudG9fcmVhZCwgcy50b193cml0ZSwgcy5mYWlsZWQsDQo+PiAtCSAgICAgICBzLmZhaWxl ZF9udW1bMF0sIHMuZmFpbGVkX251bVsxXSk7DQo+PiArCSAgICAgICBzLmZhaWxlZF9udW1bMF0s IHMuZmFpbGVkX251bVsxXSwgcy5mYWlsZWRfb3ZlcndyaXRlLA0KPj4gKwkgICAgICAgcy5wX2Zh aWxlZCwgcy5xX2ZhaWxlZCk7DQo+PiArDQo+PiAgCS8qIGNoZWNrIGlmIHRoZSBhcnJheSBoYXMg bG9zdCBtb3JlIHRoYW4gbWF4X2RlZ3JhZGVkIGRldmljZXMgYW5kLA0KPj4gIAkgKiBpZiBzbywg c29tZSByZXF1ZXN0cyBtaWdodCBuZWVkIHRvIGJlIGZhaWxlZC4NCj4+ICAJICovDQo+PiAgCWlm IChzLmZhaWxlZCA+IGNvbmYtPm1heF9kZWdyYWRlZCkgew0KPj4gLQkJc2gtPmNoZWNrX3N0YXRl ID0gMDsNCj4+IC0JCXNoLT5yZWNvbnN0cnVjdF9zdGF0ZSA9IDA7DQo+PiAtCQlpZiAocy50b19y ZWFkK3MudG9fd3JpdGUrcy53cml0dGVuKQ0KPj4gLQkJCWhhbmRsZV9mYWlsZWRfc3RyaXBlKGNv bmYsIHNoLCAmcywgZGlza3MsICZzLnJldHVybl9iaSk7DQo+PiAtCQlpZiAocy5zeW5jaW5nICsg cy5yZXBsYWNpbmcpDQo+PiAtCQkJaGFuZGxlX2ZhaWxlZF9zeW5jKGNvbmYsIHNoLCAmcyk7DQo+ PiArCQkvKg0KPj4gKwkJICpEaXNrcyB3aGljaCByZW1vdmVkIG9yIGZhdWx0eSBtdXN0IGxlc3Mg b3IgZXF1YWwgbWF4X2RlZ3JhZGVkDQo+PiArCQkgKi8NCj4+ICsJCSBpZiAocy5ub3dvcmtlZCA8 PSBjb25mLT5tYXhfZGVncmFkZWQgJiYNCj4+ICsJCQkoKGNvbmYtPmxldmVsIDwgNiAmJg0KPj4g KwkJCShzLmZhaWxlZCAtIHMuZmFpbGVkX292ZXJ3cml0ZSA8PSBzLnBfZmFpbGVkKSkgfHwNCj4+ ICsJCQkgKGNvbmYtPmxldmVsID09IDYgJiYNCj4+ICsJCQkocy5mYWlsZWQgLSBzLmZhaWxlZF9v dmVyd3JpdGUgPD0gcy5wX2ZhaWxlZCArIHMucV9mYWlsZWQpKSkpIHsNCj4+ICsJCQlzZXRfYml0 KFNUUklQRV9GQUlMRURfV1JJVEUsICZzaC0+c3RhdGUpOw0KPj4gKwkJCXByX2RlYnVnKCJzdHJp cGUoJWxsdSkgZmFpbGVkLCB0cnkgdG8gcmVjb3JyZWN0XG4iLA0KPj4gKwkJCQkodW5zaWduZWQg bG9uZyBsb25nKXNoLT5zZWN0b3IpOw0KPj4gKwkJfSBlbHNlIGlmICgocy5ub3dvcmtlZCA8PSBj b25mLT5tYXhfZGVncmFkZWQgJiYNCj4+ICsJCQlzLmZhaWxlZF9vdmVyd3JpdGUgPiAwICYmDQo+ PiArCQkJIXRlc3RfYml0KFNUUklQRV9QUkVSRUFEX0FDVElWRSwgJnNoLT5zdGF0ZSkpKQ0KPj4g KwkJCXByX2RlYnVnKCJzdHJpcGUoJWxsZCkgZGVsYXkgZm9yIGZhaWxlZC13cml0ZVxuIiwNCj4+ ICsJCQkodW5zaWduZWQgbG9uZyBsb25nKXNoLT5zZWN0b3IpOw0KPj4gKwkJIGVsc2Ugew0KPj4g KwkJCXNoLT5jaGVja19zdGF0ZSA9IDA7DQo+PiArCQkJc2gtPnJlY29uc3RydWN0X3N0YXRlID0g MDsNCj4+ICsJCQljbGVhcl9iaXQoU1RSSVBFX0ZBSUxFRF9XUklURSwgJnNoLT5zdGF0ZSk7DQo+ PiArCQkJY2xlYXJfYml0KFNUUklQRV9GQUlMRURfUkVSRUFELCAmc2gtPnN0YXRlKTsNCj4+ICsJ CQlpZiAocy50b19yZWFkK3MudG9fd3JpdGUrcy53cml0dGVuKSB7DQo+PiArCQkJCWhhbmRsZV9m YWlsZWRfc3RyaXBlKGNvbmYsIHNoLCAmcywgZGlza3MsICZzLnJldHVybl9iaSk7DQo+PiArCQkJ CXByX2RlYnVnKCJoYW5kbGVfZmFpbGVkX3N0cmlwZTolbGxkXG4iLA0KPj4gKwkJCQkJKHVuc2ln bmVkIGxvbmcgbG9uZylzaC0+c2VjdG9yKTsNCj4+ICsJCQl9DQo+PiArCQkJaWYgKHMuc3luY2lu ZyArIHMucmVwbGFjaW5nKQ0KPj4gKwkJCQkgaGFuZGxlX2ZhaWxlZF9zeW5jKGNvbmYsIHNoLCAm cyk7DQo+PiArCQl9DQo+PiArDQo+PiAgCX0NCj4+ICANCj4+ICAJLyogTm93IHdlIGNoZWNrIHRv IHNlZSBpZiBhbnkgd3JpdGUgb3BlcmF0aW9ucyBoYXZlIHJlY2VudGx5DQo+PiBAQCAtMzUyNSw2 ICszNjAzLDcgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3N0cmlwZShzdHJ1Y3Qgc3RyaXBlX2hlYWQg KnNoKQ0KPj4gIAkJQlVHX09OKHNoLT5xZF9pZHggPj0gMCAmJg0KPj4gIAkJICAgICAgICF0ZXN0 X2JpdChSNV9VUFRPREFURSwgJnNoLT5kZXZbc2gtPnFkX2lkeF0uZmxhZ3MpICYmDQo+PiAgCQkg ICAgICAgIXRlc3RfYml0KFI1X0Rpc2NhcmQsICZzaC0+ZGV2W3NoLT5xZF9pZHhdLmZsYWdzKSk7 DQo+PiArCQljbGVhcl9iaXQoU1RSSVBFX0ZBSUxFRF9XUklURSwgJnNoLT5zdGF0ZSk7DQo+PiAg CQlmb3IgKGkgPSBkaXNrczsgaS0tOyApIHsNCj4+ICAJCQlzdHJ1Y3QgcjVkZXYgKmRldiA9ICZz aC0+ZGV2W2ldOw0KPj4gIAkJCWlmICh0ZXN0X2JpdChSNV9MT0NLRUQsICZkZXYtPmZsYWdzKSAm Jg0KPj4gQEAgLTM2MjAsMTAgKzM2OTksMzAgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3N0cmlwZShz dHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoKQ0KPj4gIAkJY2xlYXJfYml0KFNUUklQRV9TWU5DSU5HLCAm c2gtPnN0YXRlKTsNCj4+ICAJfQ0KPj4gIA0KPj4gLQkvKiBJZiB0aGUgZmFpbGVkIGRyaXZlcyBh cmUganVzdCBhIFJlYWRFcnJvciwgdGhlbiB3ZSBtaWdodCBuZWVkDQo+PiAtCSAqIHRvIHByb2dy ZXNzIHRoZSByZXBhaXIvY2hlY2sgcHJvY2Vzcw0KPj4gKwkvKg0KPj4gKwkgKiBJZiBzdHJpcGUg ZmFpbGVkIGJlY2F1c2UgYmFkc2VjdG9yIGFuZA0KPj4gKwkgKiBjYW4gd3JpdGUgdG8gY29ycmVj dCB0aGUgYmFkc2VjdG9yDQo+PiArCSAqIHdlIHVzZWQgcmVhZGVyciByb3V0aW5lIHdoaWNoIHJl d3JpdGUgYW5kIHJlcmVhZA0KPj4gIAkgKi8NCj4+IC0JaWYgKHMuZmFpbGVkIDw9IGNvbmYtPm1h eF9kZWdyYWRlZCAmJiAhY29uZi0+bWRkZXYtPnJvKQ0KPj4gKwlpZiAodGVzdF9iaXQoU1RSSVBF X0ZBSUxFRF9SRVJFQUQsICZzaC0+c3RhdGUpKSB7DQo+PiArCQlmb3IgKGkgPSBkaXNrczsgaS0t OyApIHsNCj4+ICsJCQlzdHJ1Y3QgcjVkZXYgKmRldiA9ICZzaC0+ZGV2W2ldOw0KPj4gKwkJCWlm ICh0ZXN0X2JpdChSNV9GYWlsZWRSZXJlYWQsICZkZXYtPmZsYWdzKQ0KPj4gKwkJCQkmJiAhdGVz dF9iaXQoUjVfTE9DS0VELCAmZGV2LT5mbGFncykNCj4+ICsJCQkJJiYgdGVzdF9iaXQoUjVfVVBU T0RBVEUsICZkZXYtPmZsYWdzKSkgew0KPj4gKwkJCQkvKiBpdCBqdXN0IHdyb3RlIGFuZCBzdWNl c3NlZCxzbyBub3QNCj4+ICsJCQkJICogbmVjZXNzYXJ5IHRvIHJld3JpdGUsb25seSBzZXQgZmxh Zw0KPj4gKwkJCQkgKi8NCj4+ICsJCQkJc2V0X2JpdChSNV9SZVdyaXRlLCAmZGV2LT5mbGFncyk7 DQo+PiArCQkJCXNldF9iaXQoUjVfV2FudHJlYWQsICZkZXYtPmZsYWdzKTsNCj4+ICsJCQkJc2V0 X2JpdChSNV9MT0NLRUQsICZkZXYtPmZsYWdzKTsNCj4+ICsJCQkJcy5sb2NrZWQrKzsNCj4+ICsJ CQkJfQ0KPj4gKwkJfQ0KPj4gKwl9IGVsc2UgaWYgKHMuZmFpbGVkIDw9IGNvbmYtPm1heF9kZWdy YWRlZCAmJiAhY29uZi0+bWRkZXYtPnJvKQ0KPj4gKwkJLyogSWYgdGhlIGZhaWxlZCBkcml2ZXMg YXJlIGp1c3QgYSBSZWFkRXJyb3IsIHRoZW4gd2UgbWlnaHQgbmVlZA0KPj4gKwkJICogdG8gcHJv Z3Jlc3MgdGhlIHJlcGFpci9jaGVjayBwcm9jZXNzDQo+PiArCQkgKi8NCj4+ICAJCWZvciAoaSA9 IDA7IGkgPCBzLmZhaWxlZDsgaSsrKSB7DQo+PiAgCQkJc3RydWN0IHI1ZGV2ICpkZXYgPSAmc2gt PmRldltzLmZhaWxlZF9udW1baV1dOw0KPj4gIAkJCWlmICh0ZXN0X2JpdChSNV9SZWFkRXJyb3Is ICZkZXYtPmZsYWdzKQ0KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDUuaCBiL2RyaXZl cnMvbWQvcmFpZDUuaA0KPj4gaW5kZXggMThiMmM0YS4uNzJmZDkzNCAxMDA2NDQNCj4+IC0tLSBh L2RyaXZlcnMvbWQvcmFpZDUuaA0KPj4gKysrIGIvZHJpdmVycy9tZC9yYWlkNS5oDQo+PiBAQCAt MjUxLDYgKzI1MSwxMCBAQCBzdHJ1Y3Qgc3RyaXBlX2hlYWRfc3RhdGUgew0KPj4gIAkgKi8NCj4+ ICAJaW50IHN5bmNpbmcsIGV4cGFuZGluZywgZXhwYW5kZWQsIHJlcGxhY2luZzsNCj4+ICAJaW50 IGxvY2tlZCwgdXB0b2RhdGUsIHRvX3JlYWQsIHRvX3dyaXRlLCBmYWlsZWQsIHdyaXR0ZW47DQo+ PiArCS8qIE92ZXJ3cml0ZSBkaXNrcyB3aGljaCBmYXVsdHkgb3IgcmVtb3ZlZCBvciBjb250YWlu ZWQgYmFkc2VjdG9yICovDQo+PiArCWludCBmYWlsZWRfb3ZlcndyaXRlOw0KPj4gKwlpbnQgbm93 b3JrZWQ7IC8qZGlzayBmYXVsdHkgb3IgcmVtb3ZlZCovDQo+PiArDQo+PiAgCWludCB0b19maWxs LCBjb21wdXRlLCByZXFfY29tcHV0ZSwgbm9uX292ZXJ3cml0ZTsNCj4+ICAJaW50IGZhaWxlZF9u dW1bMl07DQo+PiAgCWludCBwX2ZhaWxlZCwgcV9mYWlsZWQ7DQo+PiBAQCAtMjk5LDYgKzMwMyw5 IEBAIGVudW0gcjVkZXZfZmxhZ3Mgew0KPj4gIAkJCSAqIGRhdGEgaW4sIGFuZCBub3cgaXMgYSBn b29kIHRpbWUgdG8gd3JpdGUgaXQgb3V0Lg0KPj4gIAkJCSAqLw0KPj4gIAlSNV9EaXNjYXJkLAkv KiBEaXNjYXJkIHRoZSBzdHJpcGUgKi8NCj4+ICsJUjVfRmFpbGVkT3ZlcndyaXRlLCAvKm92ZXJ3 cml0ZSBvbiBkaXNrIHdoaWNoIHJlbW92ZWQgb3IgZmF1bHR5IG9yIGhhZCBiYWRzZWN0b3JzKi8N Cj4+ICsJUjVfRmFpbGVkUmVyZWFkLA0KPj4gKwlSNV9CYWRQYXJpdHksDQo+PiAgfTsNCj4+ICAN Cj4+ICAvKg0KPj4gQEAgLTMyMyw2ICszMzAsOCBAQCBlbnVtIHsNCj4+ICAJU1RSSVBFX0NPTVBV VEVfUlVOLA0KPj4gIAlTVFJJUEVfT1BTX1JFUV9QRU5ESU5HLA0KPj4gIAlTVFJJUEVfT05fVU5Q TFVHX0xJU1QsDQo+PiArCVNUUklQRV9GQUlMRURfV1JJVEUsDQo+PiArCVNUUklQRV9GQUlMRURf UkVSRUFELA0KPj4gIH07DQo+PiAgDQo+PiAgLyoNCj4NCj4NCj5UaGFua3MgZm9yIHJlc2VuZGlu ZyB3aXRoIHRoZSBpcnJlbGV2YW50IGJpdHMgcmVtb3ZlZC4NCj4NCj5VbmZvcnR1bmF0ZWx5IEkn bSBoYXZpbmcgYSBoYXJkIHRpbWUgZm9sbG93aW5nIHRoZSBsb2dpYywgd2hpY2ggbWVhbnMgdGhh dCBpZg0KPkkgYXBwbHkgdGhlIHBhdGNoIGl0IHdpbGwgbWFrZSB0aGUgY29kZSAoZXZlbiBtb3Jl KSB1bm1haW50YWluYWJsZS4NCj4NClNvcnJ5IGZvciBkZWxheSBpbiByZXBseWluZy4NCj5XaGF0 IEkgbmVlZCBpcyA6DQo+IC0gYSBjbGVhciBkZXNjcmlwdGlvbiBvZiB3aGF0IGVhY2ggZmxhZyBy ZWFsbHkgbWVhbnMNClI1X0ZhaWxlZE92ZXJ3cml0ZTpUaGVyZSBhcmUgdHdvIGNvbmRpdGlvbnMg d2hpY2ggY2FuIHVzZWQgdGhpcyBmbGFnDQphKWRpc2sgd2hpY2ggcmVtb3ZlZCBvciBoYWQgRmF1 bHR5IGZsYWc7ICBiKWRpc2sgaGFkIGJhZHNlY3RvcnMgb24gdGhpcyBzdHJpcGUuDQpGb3IgdGhv c2UgZGlza3MgaXQgY2FuJ3QgcmVhZCB0aGUgZGF0YS5TbyBvbmx5IG92ZXJ3cml0ZSBjYW4gaGFk IGEgY2hhbmdlIHRvIGRvIGNvbnRpbnVlLg0KDQpSNV9GYWlsZWRSZXJlYWQ6IElmIGRpc2sgaGFk IGJhZHNlY3RvciBhbmQgdGhpcyBzdHJpcGUgaXMgZmFpbGVkLGlmIGl0IGNhbiBkbyB3cml0ZSBz dWNjZXNzLlRoZW4gaXQgc2hvdWxkIHRvIHJlcmVhZCB0byBjaGVjay4NCmV0YzogcmFpZDUgZm91 ciBkaXNrcy5BL0IgaGFkIGJhZHNlY3Rvci4NCkEgQiBDIEQocCkNCldpdGhvdXQgdGhpcyBwYXRj aCwgdGhlIHdyaXRlIG11c3QgZmFpbGQuQnV0IGlmIEEvQiBhcmUgb3ZlcndyaXRlLCBzbyBpdCBy ZWFkIEMgdG8gY29tcHV0ZXIgcGFyaXR5LiBBbmQgd3JpdGUgQS9CL0QuDQpBZnRlciB0aGUgd3Jp dGUsIGl0IHNob3VsZCB0byByZXJlYWQgQS9CIHRvIGNoZWNrLg0KDQpSNV9CYWRQYXJpdHk6IFRo aXMgZmxhZyBvbmx5IGZvciBwYXJpdHkgZGlzayB3aGVuIGl0IGhhZCBiYWRzZWN0b3JzLldoZW4g cmVyZWFkIHRoZSBjb2RlLCBpIHRoaW5rIHRoaXMgZmxhZyBjYW4gcmVtb3ZlLg0KPnRlc3RfYml0 KFI1X0JhZFBhcml0eSwgJmRldi0+ZmxhZ3MpDQppdCBjYW4gYmUgcmVwbGFjZWQgYnkgKGkgPT0g c2gtPnBkX2lkeCB8fCBpID09IHNoLT5xZF9pZHgpLg0KDQo+IC0gYSBjbGVhciBkZXNjcmlwdGlv biBvZiB3aGF0IGVhY2ggbmV3IGZpZWxkIGluIHN0cmlwZV9oZWFkX3N0YXRlIG1lYW5zLg0KU1RS SVBFX0ZBSUxFRF9XUklURTogVGhpcyBmbGFnIG1lYW5zIHRoaXMgb3BlcmF0aW9uIGlzIHdyaXRl IG9uIGEgZmFpbGVkIHN0cmlwZS4NClNUUklQRV9GQUlMRURfUkVSRUFEOkFmdGVyIHRoZSBzdHJp cGUtZmFpbGVkLXdyaXRlIG9wZXJhdGlvbiwgaXQgc2hvdWxkIHJlcmVhZCB0aGUgZGlza3Mgd2hp Y2ggaGFkIGJhZHNlY3RvciB0byBjaGVjayB0aGUgZGF0YS4NCg0KPiAtIGEgY2xlYXIgZGVzY3Jp cHRpb24gb2YgdGhlIHNlcXVlbmNpbmcgb2Ygb3BlcmF0aW9ucyAtIHdoZW4gYW5kIHdoeSBpdA0K PiAgIGRlY2lkZWQgdG8gdGFrZSBhIG5ldyBwYXRoIHRvIGZpeCB0aGluZ3MsIGhvdyBpdCBtaWdo dCBkZWNpZGUgdGhhdCBpdA0KPiAgIGNhbm5vdCBhZnRlciBhbGwgYW5kIGZhaWwsIGV0Yy4NCkZv ciBmYWlsZWQtc3RyaXBlLXdyaXRlIG9wZXJhdGlvbiwgdGhlcmUgYXJlIGF0IG1vc3QgdHdvIHN0 ZXBzLiBPbmUgd3JpdGUsdGhlIG90aGVyIGlzIHJlcmVhZCBpZiBkaXNrcyBoYWQgYmFkc2VjdG9y cy4NCkZvciBmYWlsZWQtc3RyaXBlLHRoZXJlIGFyZSB0aHJlZSBjYXNlcyBhZnRlciBhbmFseXNp bmcgc3RyaXBlIHN0YXRlLg0KYSk6IGl0IGNhbiBkbyB3cml0ZTsgYik6bm93IGl0IGNhbid0LGJ1 dCBpdCBoYWQgYSBjaGFuY2UgdG8gZG8gd3JpdGUuc28gaXQgd2FpdDsgYylpdCBmYWlsZWQgaW1t ZWRpYXRlbHkuDQpTbyB0aGUgY2FzZSBhKSBpcyB0aGUgbW9zdCBpbXBvcnRhbnQuDQo+ICAgICAg ICBpZiAocy5mYWlsZWQgPiBjb25mLT5tYXhfZGVncmFkZWQpIHsNCgkxOkZpcnN0IHN0cmlwZSB3 YXMgZmFpbGVkDQo+ICAgICAgICAgICAgICAgIC8qICAgDQo+ICAgICAgICAgICAgICAgICAqIERp c2tzIHdoaWNoIHJlbW92ZWQgb3IgZmF1bHR5IG11c3QgbGVzcyBvciBlcXVhbCBtYXhfZGVncmFk ZWQNCj4gICAgICAgICAgICAgICAgICovDQo+ICAgICAgICAgICAgICAgIGlmIChzLm5vd29ya2Vk IDw9IGNvbmYtPm1heF9kZWdyYWRlZCAmJiANCiAgMjpkaXNrcyB3aGljaCByZW1vdmVkIG9yIGZh dWx0eSBtdXN0IGxlc3Mgb3IgZXF1YWwgbWF4X2RlZ3JhZGVkLiBUaGUgYWltIG9mIHdyaXRpbmcg ZmFpbGVkLXN0cmlwZSBpcyB0byByZXVzZSB0aGlzIHN0cmlwZS5TbyBpZiB0aGlzIGNvbmRpdGlv biB3YXMgZmFsc2UsIGl0IG1ha2VzIG5vIHNlbnNlLg0KCVRoaXMgY29uZGl0aW9uIGlzIGFsc28g dXNlZnVsIHRoZSBjYXNlIGIuDQo+ICAgICAgICAgICAgICAgICAgICAgICAgKChjb25mLT5sZXZl bCA8IDYgJiYgDQo+ICAgICAgICAgICAgICAgICAgICAgICAgIChzLmZhaWxlZCAtIHMuZmFpbGVk X292ZXJ3cml0ZSA8PSBzLnBfZmFpbGVkKSkgfHwgDQogIDM6Rm9yIHJhaWQ1LGFsbCBmYWlsZWQg ZGlza3Mgd2hpY2ggcmVtb3ZlZCBvciBoYWQgZmF1bHR5IGZsYWcgb3IgaGFkIGJhZHNlY3RvcyBt dXN0IGJlIG92ZXJ3cml0ZSxleGNlcHRlZCBwYXJpdHkgZGlzay4gT25seSB0aGlzIGNvbmRpdGlv biBpcyB0cnVlLCBpdCBjYW4gZG8gcmN3IHdyaXRlLg0KPiAgICAgICAgICAgICAgICAgICAgICAg ICAoY29uZi0+bGV2ZWwgPT0gNiAmJiANCj4gICAgICAgICAgICAgICAgICAgICAgICAgIChzLmZh aWxlZCAtIHMuZmFpbGVkX292ZXJ3cml0ZSA8PSBzLnBfZmFpbGVkICsgcy5xX2ZhaWxlZCkpKSkg eyANCjQ6IEZvciByYWlkNiwgdGhlIGRpZmZlcmVuY2UgaXMgdGhhdCBpdCBoYWQgdHdvIHBhcml0 eSBkaXNrcyBwIGFuZCBxLg0KPiAgICAgICAgICAgICAgICAgICAgICAgIHNldF9iaXQoU1RSSVBF X0ZBSUxFRF9XUklURSwgJnNoLT5zdGF0ZSk7DQo+ICAgICAgICAgICAgICAgICAgICAgICAgcHJf ZGVidWcoInN0cmlwZSglbGx1KSBmYWlsZWQsIHRyeSB0byByZWNvcnJlY3RcbiIsDQo+ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXNoLT5zZWN0b3Ip Ow0KPiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChzLm5vd29ya2VkIDw9IGNvbmYtPm1heF9k ZWdyYWRlZCAmJg0KPiAgICAgICAgICAgICAgICAgICAgICAgIHMuZmFpbGVkX292ZXJ3cml0ZSA+ IDAgJiYgDQo+ICAgICAgICAgICAgICAgICAgICAgICAgIXRlc3RfYml0KFNUUklQRV9QUkVSRUFE X0FDVElWRSwgJnNoLT5zdGF0ZSkpKQ0KPiAgICAgICAgICAgICAgICAgICAgICAgIHByX2RlYnVn KCJzdHJpcGUoJWxsZCkgZGVsYXkgZm9yIGZhaWxlZC13cml0ZVxuIiwNCj4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzaC0+c2VjdG9y KTsNCglUaGlzIGlzIGZvciBjYXNlIGIgd2hpY2ggd2FpdHRpbmcgZm9yIGNoYW5jZSB0byBkby4N Cj4JCQllbHNlIHsNCj4gICAgICAgICAgICAgICAgICAgICAgICBzaC0+Y2hlY2tfc3RhdGUgPSAw OyANCj4gICAgICAgICAgICAgICAgICAgICAgICBzaC0+cmVjb25zdHJ1Y3Rfc3RhdGUgPSAwOyAN Cj4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhcl9iaXQoU1RSSVBFX0ZBSUxFRF9XUklURSwg JnNoLT5zdGF0ZSk7DQo+ICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJfYml0KFNUUklQRV9G QUlMRURfUkVSRUFELCAmc2gtPnN0YXRlKTsNCj4gICAgICAgICAgICAgICAgICAgICAgICBpZiAo cy50b19yZWFkK3MudG9fd3JpdGUrcy53cml0dGVuKSB7DQo+ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBoYW5kbGVfZmFpbGVkX3N0cmlwZShjb25mLCBzaCwgJnMsIGRpc2tzLCAmcy5y ZXR1cm5fYmkpOw0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJfZGVidWcoImhh bmRsZV9mYWlsZWRfc3RyaXBlOiVsbGRcbiIsDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpc2gtPnNlY3Rvcik7DQo+ICAgICAgICAg ICAgICAgICAgICAgICAgfSAgICANCj4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocy5zeW5j aW5nICsgcy5yZXBsYWNpbmcpDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5k bGVfZmFpbGVkX3N5bmMoY29uZiwgc2gsICZzKTsgDQo+ICAgICAgICAgICAgICAgIH0NCglUaGVy ZSwgaXQgb25seSBmYWlsZWQuDQo+DQo+SSBmaW5kIHNvbWUgY29uc3RydWN0cyByYXRoZXIgb2Rk LiAgZS5nLg0KPg0KPisJCWlmICghcmRldikgew0KPisJCQlzLT5ub3dvcmtlZCsrOw0KPisJCQlp ZiAoKGRldi0+dG93cml0ZSAmJiB0ZXN0X2JpdChSNV9PVkVSV1JJVEUsICZkZXYtPmZsYWdzKSkg fHwNCj4rCQkJICAgIHRlc3RfYml0KFI1X0ZhaWxlZE92ZXJ3cml0ZSwgJmRldi0+ZmxhZ3MpKSB7 DQo+KwkJCQlzLT5mYWlsZWRfb3ZlcndyaXRlKys7DQo+KwkJCQlzZXRfYml0KFI1X0ZhaWxlZE92 ZXJ3cml0ZSwgJmRldi0+ZmxhZ3MpOw0KPisJCQl9DQo+DQo+SSBkb24ndCBmb2xsb3cgd2h5IHRo ZSAidGVzdF9iaXQoeHh4KSIgaXMgaW4gdGhlIGlmIGNsYXVzZS4gIHdoZW4gd291bGQgaXQgYmUN Cj5zZXQsIGJ1dCAtPnRvd3JpdGUgYW5kIFI1X09WRVJXUklURSBhcmVuJ3Qgc2V0Pw0KQSBzdHJp cGUgY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBieSBmdW5jIGhhbmRsZV9zdHJpcGUuDQpU aGUgZmlyc3QgaXQgY2hlY2sgdGhlIGNvbmRpdGlvbiAiaWYgKChkZXYtPnRvd3JpdGUgJiYgdGVz dF9iaXQoUjVfT1ZFUldSSVRFLCAmZGV2LT5mbGFncykpIg0KQnV0IGFmdGVyIHRoZSBzdWNjZXNz ZnVsZXkgd3JpdGUsIC0+dG93cml0ZSB3aWxsIGJlIHNldCBudWxsLlNvIGlmIHRoZXJlIGlzIG5v IHRlc3RfYml0KHh4eCksIGl0IHdpbGwgYmUgZXhlYyBoYW5kbGVfZmFpbGVkX3N0cmlwZS9zeW5j Lg0KVGhlcmUgYXJlIG1hbnkgcGxhY2VzIGxpa2UgdGhvc2UuSG93IHRvIGRpZmZlcmVudCB0aGUg Zmlyc3QtY2hlY2sgYW5kIHN1Y2Nlc3NmdWx5IHdyaXRlLWNoZWNrPyANClNwZWNpZmljYWxseSwg aWYgdGhlcmUgYXJlIHNvbWUgYmFkc2VjdG9ycywgaXQgbXVzdCB0byAgcmVyZWFkLg0KDQo+DQo+ TWF5YmUgSSdsbCB0cnkgYWdhaW4gYW5vdGhlciB3ZWVrLCBidXQgZm9yIHRoZSBtb21lbnQsIEkn bSBqdXN0IG5vdCBtYWtpbmcNCj5hbnkgaGVhZHdheSBpbiB1bmRlcnN0YW5kaW5nIHlvdSBjb2Rl IC0gc29ycnkuDQo+DQo+TmVpbEJyb3duDQo+DQo+