From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3484C6E130 for ; Wed, 3 Jul 2019 13:08:58 +0000 (UTC) From: "Ser, Simon" Date: Wed, 3 Jul 2019 13:08:54 +0000 Message-ID: <0f955e2546cfe60def0c47bb1ea074cd4ebf0f3f.camel@intel.com> References: <20190701122153.11569-1-arkadiusz.hiler@intel.com> In-Reply-To: <20190701122153.11569-1-arkadiusz.hiler@intel.com> Content-Language: en-US Content-ID: <6D2016F2C0187949A63A170F462F0455@intel.com> MIME-Version: 1.0 Subject: Re: [igt-dev] [PATCH i-g-t 1/5] lib/igt_core: Add support for subtest descriptions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: "Hiler, Arkadiusz" , "igt-dev@lists.freedesktop.org" Cc: "Latvala, Petri" List-ID: T3ZlcmFsbCBsb29rcyBnb29kLiBBIGZldyBjb21tZW50cyBpbmxpbmUuDQoNCk9uIE1vbiwgMjAx OS0wNy0wMSBhdCAxNToyMSArMDMwMCwgQXJrYWRpdXN6IEhpbGVyIHdyb3RlOg0KPiBUaGlzIHBh dGNoIGFkZHMgaWd0X2Rlc2NyaXB0aW9uKCkgd2hpY2ggYXR0YWNoZXMgYSBkZXNjcmlwdGlvbiB0 byB0aGUNCj4gZm9sbG93aW5nIGlndF9zdWJ0ZXN0IG9yIGlndF9zdWJ0ZXN0X2dyb3VwIGJsb2Nr Lg0KPiANCj4gRGVzY3JpcHRpb25zIGFyZSBhY2Nlc3NpYmxlIHZpYSAnLi90ZXN0IC0tZGVzY3Jp YmVbPXBhdHRlcm5dJw0KPiANCj4gU3VidGVzdCBkZXNjcmlwdGlvbiBpcyBpdHMgb3duIGlndF9k ZXNjcmliZSBhcyB3ZWxsIGFzIGlndF9kZXNjcmliZXMNCj4gb2YgYWxsIHRoZSBwYXJlbnRpbmcg aWd0X3N1YnRlc3RfZ3JvdXBzLCBzdGFydGluZyBmcm9tIHRoZSBvdXRlcm1vc3QNCj4gc2NvcGUu DQo+IA0KPiBFeGFtcGxlcyBvZiBjb2RlIGFuZCBwcm9kdWNlZCBvdXRwdXRzIGFyZSBpbmNsdWRl ZCBpbg0KPiBsaWIvdGVzdC9pZ3RfZGVzY3JpYmUuYyBhbmQgYXMgYSBkb2N1bWVudGF0aW9uIGNv bW1lbnQgb24gaWd0X2Rlc2NyaWJlKCkNCj4gbWFjcm8uDQo+IA0KPiBDYzogUGV0cmkgTGF0dmFs YSA8cGV0cmkubGF0dmFsYUBpbnRlbC5jb20+DQo+IFNpZ25lZC1vZmYtYnk6IEFya2FkaXVzeiBI aWxlciA8YXJrYWRpdXN6LmhpbGVyQGludGVsLmNvbT4NCj4gQWNrZWQtYnk6IFBldHJpIExhdHZh bGEgPHBldHJpLmxhdHZhbGFAaW50ZWwuY29tPg0KPiAtLS0NCj4gIGxpYi9pZ3RfY29yZS5jICAg ICAgICAgICB8IDE3OSArKysrKysrKysrKysrKysrKysrKysrKystLQ0KPiAgbGliL2lndF9jb3Jl LmggICAgICAgICAgIHwgMTM3ICsrKysrKysrKysrKysrKysrKy0tDQo+ICBsaWIvdGVzdHMvaWd0 X2Rlc2NyaWJlLmMgfCAyNjYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr DQo+ICBsaWIvdGVzdHMvbWVzb24uYnVpbGQgICAgfCAgIDEgKw0KPiAgNCBmaWxlcyBjaGFuZ2Vk LCA1NjIgaW5zZXJ0aW9ucygrKSwgMjEgZGVsZXRpb25zKC0pDQo+ICBjcmVhdGUgbW9kZSAxMDA2 NDQgbGliL3Rlc3RzL2lndF9kZXNjcmliZS5jDQo+IA0KPiBkaWZmIC0tZ2l0IGEvbGliL2lndF9j b3JlLmMgYi9saWIvaWd0X2NvcmUuYw0KPiBpbmRleCA2YjlmMDQyNS4uOGIxYzdiMmYgMTAwNjQ0 DQo+IC0tLSBhL2xpYi9pZ3RfY29yZS5jDQo+ICsrKyBiL2xpYi9pZ3RfY29yZS5jDQo+IEBAIC03 MCw2ICs3MCw3IEBADQo+ICAjaW5jbHVkZSAiaWd0X3N5c2ZzLmgiDQo+ICAjaW5jbHVkZSAiaWd0 X3N5c3JxLmgiDQo+ICAjaW5jbHVkZSAiaWd0X3JjLmgiDQo+ICsjaW5jbHVkZSAiaWd0X2xpc3Qu aCINCj4gIA0KPiAgI2RlZmluZSBVTldfTE9DQUxfT05MWQ0KPiAgI2luY2x1ZGUgPGxpYnVud2lu ZC5oPg0KPiBAQCAtMjU5LDYgKzI2MCw3IEBAIGNvbnN0IGNoYXIgKmlndF9pbnRlcmFjdGl2ZV9k ZWJ1ZzsNCj4gIA0KPiAgLyogc3VidGVzdHMgaGVscGVycyAqLw0KPiAgc3RhdGljIGJvb2wgbGlz dF9zdWJ0ZXN0cyA9IGZhbHNlOw0KPiArc3RhdGljIGJvb2wgZGVzY3JpYmVfc3VidGVzdHMgPSBm YWxzZTsNCj4gIHN0YXRpYyBjaGFyICpydW5fc2luZ2xlX3N1YnRlc3QgPSBOVUxMOw0KPiAgc3Rh dGljIGJvb2wgcnVuX3NpbmdsZV9zdWJ0ZXN0X2ZvdW5kID0gZmFsc2U7DQo+ICBzdGF0aWMgY29u c3QgY2hhciAqaW5fc3VidGVzdCA9IE5VTEw7DQo+IEBAIC0yNzEsNiArMjczLDE2IEBAIHN0YXRp YyBlbnVtIHsNCj4gIAlDT05UID0gMCwgU0tJUCwgRkFJTA0KPiAgfSBza2lwX3N1YnRlc3RzX2hl bmNlZm9ydGggPSBDT05UOw0KPiAgDQo+ICtzdGF0aWMgY2hhciBfX2N1cnJlbnRfZGVzY3JpcHRp b25bNDA5Nl07DQoNCklmIGl0IHdhcyBqdXN0IG1lLCBJJ2QgaW50ZW50aW9uYWxseSBtYWtlIHRo aXMgYSBsb3Qgc21hbGxlciB0byBtYWtlDQpzdXJlIHBlb3BsZSBkb24ndCBzdGFydCB3cml0aW5n IGFib3V0IHRoZWlyIHBlcnNvbmFsIGxpZmUgaW4gdGhlcmUuDQoNCkkgbWVhbjogaWYgdGhlIGRl c2NyaXB0aW9uIGlzIGJpZ2dlciB0aGFuIDUxMiBjaGFycywgeW91J3JlIGRvaW5nDQpzb21ldGhp bmcgd3JvbmcuIEFuZCA1MTIgY2hhcnMgaXMgcHJvYmFibHkgYSB2ZXJ5IGdlbmVyb3VzIGxpbWl0 Lg0KIkRlc2NyaXB0aW9ucyBzaG91bGQgZml0IGluIGEgVHdlZXQiLg0KDQo+ICsNCj4gK3N0cnVj dCBkZXNjcmlwdGlvbl9ub2RlIHsNCj4gKwljaGFyIGRlc2Nbc2l6ZW9mKF9fY3VycmVudF9kZXNj cmlwdGlvbildOw0KPiArCXN0cnVjdCBpZ3RfbGlzdCBsaW5rOw0KPiArfTsNCj4gKw0KPiArc3Rh dGljIHN0cnVjdCBpZ3RfbGlzdCBzdWJncm91cF9kZXNjcmlwdGlvbnM7DQo+ICsNCj4gKw0KPiAg Ym9vbCBfX2lndF9wbGFpbl9vdXRwdXQgPSBmYWxzZTsNCj4gIA0KPiAgLyogZm9yayBzdXBwb3J0 IHN0YXRlICovDQo+IEBAIC0yODUsNiArMjk3LDcgQEAgZW51bSB7DQo+ICAJICogY29uZmxpY3Qg d2l0aCBjb3JlIG9uZXMNCj4gIAkgKi8NCj4gIAlPUFRfTElTVF9TVUJURVNUUyA9IDUwMCwNCj4g KwlPUFRfREVTQ1JJQkVfU1VCVEVTVFMsDQo+ICAJT1BUX1JVTl9TVUJURVNULA0KPiAgCU9QVF9E RVNDUklQVElPTiwNCj4gIAlPUFRfREVCVUcsDQo+IEBAIC01MjgsMTAgKzU0MSw1OSBAQCBzdGF0 aWMgdm9pZCBjb21tb25fZXhpdF9oYW5kbGVyKGludCBzaWcpDQo+ICAJYXNzZXJ0KHNpZyAhPSAw IHx8IGlndF9leGl0X2NhbGxlZCk7DQo+ICB9DQo+ICANCj4gK3N0YXRpYyB2b2lkIHByaW50X2xp bmVfd3JhcHBpbmcoY29uc3QgY2hhciAqaW5kZW50LCBjb25zdCBjaGFyICp0ZXh0KQ0KPiArew0K PiArCWNoYXIgKmNvcHksICpjdXJyLCAqbmV4dF9zcGFjZTsNCj4gKwlpbnQgY3VycmVudF9saW5l X2xlbmd0aCA9IDA7DQo+ICsJYm9vbCBkb25lID0gZmFsc2U7DQo+ICsNCj4gKwljb25zdCBpbnQg dG90YWxfbGluZV9sZW5ndGggPSA4MDsNCj4gKwljb25zdCBpbnQgbGluZV9sZW5ndGggPSB0b3Rh bF9saW5lX2xlbmd0aCAtIHN0cmxlbihpbmRlbnQpOw0KPiArDQo+ICsJY29weSA9IG1hbGxvYyhz dHJsZW4odGV4dCkgKyAxKTsNCj4gKwltZW1jcHkoY29weSwgdGV4dCwgc3RybGVuKHRleHQpICsg MSk7DQo+ICsNCj4gKwljdXJyID0gY29weTsNCj4gKw0KPiArCXByaW50ZigiJXMiLCBpbmRlbnQp Ow0KPiArDQo+ICsJd2hpbGUgKCFkb25lKSB7DQo+ICsJCW5leHRfc3BhY2UgPSBzdHJjaHIoY3Vy ciwgJyAnKTsNCj4gKw0KPiArCQlpZiAoIW5leHRfc3BhY2UpIHsgLyogbm8gbW9yZSBzcGFjZXMs IHByaW50IGV2ZXJ5dGhpbmcgdGhhdCBpcyBsZWZ0ICovDQo+ICsJCQlkb25lID0gdHJ1ZTsNCj4g KwkJCW5leHRfc3BhY2UgPSBzdHJjaHIoY3VyciwgJ1wwJyk7DQo+ICsJCX0NCj4gKw0KPiArCQkq bmV4dF9zcGFjZSA9ICdcMCc7DQo+ICsNCj4gKwkJaWYgKChuZXh0X3NwYWNlIC0gY3VycikgKyBj dXJyZW50X2xpbmVfbGVuZ3RoID4gbGluZV9sZW5ndGggJiYgY3VyciAhPSBjb3B5KSB7DQo+ICsJ CQlwcmludGYoIlxuJXMiLCBpbmRlbnQpOw0KPiArCQkJY3VycmVudF9saW5lX2xlbmd0aCA9IDA7 DQo+ICsJCX0NCj4gKw0KPiArCQlpZiAoY3VycmVudF9saW5lX2xlbmd0aCA9PSAwKQ0KPiArCQkJ cHJpbnRmKCIlcyIsIGN1cnIpOyAvKiBmaXJzdCB3b3JkIGluIGEgbGluZSwgZG9uJ3Qgc3BhY2Ug b3V0ICovDQo+ICsJCWVsc2UNCj4gKwkJCXByaW50ZigiICVzIiwgY3Vycik7DQo+ICsNCj4gKwkJ Y3VycmVudF9saW5lX2xlbmd0aCArPSBuZXh0X3NwYWNlIC0gY3VycjsNCj4gKwkJY3VyciA9IG5l eHRfc3BhY2UgKyAxOw0KPiArCX0NCj4gKw0KPiArCXByaW50ZigiXG4iKTsNCj4gKw0KPiArCWZy ZWUoY29weSk7DQo+ICt9DQo+ICsNCj4gKw0KPiAgc3RhdGljIHZvaWQgcHJpbnRfdGVzdF9kZXNj cmlwdGlvbih2b2lkKQ0KPiAgew0KPiAtCWlmICgmX19pZ3RfdGVzdF9kZXNjcmlwdGlvbikNCj4g LQkJcHJpbnRmKCIlc1xuIiwgX19pZ3RfdGVzdF9kZXNjcmlwdGlvbik7DQo+ICsJaWYgKCZfX2ln dF90ZXN0X2Rlc2NyaXB0aW9uKSB7DQo+ICsJCXByaW50X2xpbmVfd3JhcHBpbmcoIiIsIF9faWd0 X3Rlc3RfZGVzY3JpcHRpb24pOw0KPiArCQlpZiAoZGVzY3JpYmVfc3VidGVzdHMpDQo+ICsJCQlw cmludGYoIlxuIik7DQo+ICsJfQ0KPiAgfQ0KPiAgDQo+ICBzdGF0aWMgdm9pZCBwcmludF92ZXJz aW9uKHZvaWQpDQo+IEBAIC01NTgsNiArNjIwLDcgQEAgc3RhdGljIHZvaWQgcHJpbnRfdXNhZ2Uo Y29uc3QgY2hhciAqaGVscF9zdHIsIGJvb2wgb3V0cHV0X29uX3N0ZGVycikNCj4gIAkJICAgIiAg LS1kZWJ1Z1s9bG9nLWRvbWFpbl1cbiINCj4gIAkJICAgIiAgLS1pbnRlcmFjdGl2ZS1kZWJ1Z1s9 ZG9tYWluXVxuIg0KPiAgCQkgICAiICAtLWhlbHAtZGVzY3JpcHRpb25cbiINCj4gKwkJICAgIiAg LS1kZXNjcmliZVxuIg0KPiAgCQkgICAiICAtLWhlbHB8LWhcbiIpOw0KPiAgCWlmIChoZWxwX3N0 cikNCj4gIAkJZnByaW50ZihmLCAiJXNcbiIsIGhlbHBfc3RyKTsNCj4gQEAgLTY3MSw2ICs3MzQs NyBAQCBzdGF0aWMgaW50IGNvbW1vbl9pbml0KGludCAqYXJnYywgY2hhciAqKmFyZ3YsDQo+ICAJ aW50IGMsIG9wdGlvbl9pbmRleCA9IDAsIGksIHg7DQo+ICAJc3RhdGljIHN0cnVjdCBvcHRpb24g bG9uZ19vcHRpb25zW10gPSB7DQo+ICAJCXsibGlzdC1zdWJ0ZXN0cyIsICAgICBub19hcmd1bWVu dCwgICAgICAgTlVMTCwgT1BUX0xJU1RfU1VCVEVTVFN9LA0KPiArCQl7ImRlc2NyaWJlIiwgICAg ICAgICAgb3B0aW9uYWxfYXJndW1lbnQsIE5VTEwsIE9QVF9ERVNDUklCRV9TVUJURVNUU30sDQo+ ICAJCXsicnVuLXN1YnRlc3QiLCAgICAgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgT1BUX1JV Tl9TVUJURVNUfSwNCj4gIAkJeyJoZWxwLWRlc2NyaXB0aW9uIiwgIG5vX2FyZ3VtZW50LCAgICAg ICBOVUxMLCBPUFRfREVTQ1JJUFRJT059LA0KPiAgCQl7ImRlYnVnIiwgICAgICAgICAgICAgb3B0 aW9uYWxfYXJndW1lbnQsIE5VTEwsIE9QVF9ERUJVR30sDQo+IEBAIC02ODcsNiArNzUxLDcgQEAg c3RhdGljIGludCBjb21tb25faW5pdChpbnQgKmFyZ2MsIGNoYXIgKiphcmd2LA0KPiAgCWludCBy ZXQgPSAwOw0KPiAgDQo+ICAJY29tbW9uX2luaXRfZW52KCk7DQo+ICsJaWd0X2xpc3RfaW5pdCgm c3ViZ3JvdXBfZGVzY3JpcHRpb25zKTsNCj4gIA0KPiAgCWNvbW1hbmRfc3RyID0gYXJndlswXTsN Cj4gIAlpZiAoc3RycmNocihjb21tYW5kX3N0ciwgJy8nKSkNCj4gQEAgLTc3Nyw2ICs4NDIsMTMg QEAgc3RhdGljIGludCBjb21tb25faW5pdChpbnQgKmFyZ2MsIGNoYXIgKiphcmd2LA0KPiAgCQkJ aWYgKCFydW5fc2luZ2xlX3N1YnRlc3QpDQo+ICAJCQkJbGlzdF9zdWJ0ZXN0cyA9IHRydWU7DQo+ ICAJCQlicmVhazsNCj4gKwkJY2FzZSBPUFRfREVTQ1JJQkVfU1VCVEVTVFM6DQo+ICsJCQlpZiAo b3B0YXJnKQ0KPiArCQkJCXJ1bl9zaW5nbGVfc3VidGVzdCA9IHN0cmR1cChvcHRhcmcpOw0KPiAr CQkJbGlzdF9zdWJ0ZXN0cyA9IHRydWU7DQo+ICsJCQlkZXNjcmliZV9zdWJ0ZXN0cyA9IHRydWU7 DQo+ICsJCQlwcmludF90ZXN0X2Rlc2NyaXB0aW9uKCk7DQo+ICsJCQlicmVhazsNCj4gIAkJY2Fz ZSBPUFRfUlVOX1NVQlRFU1Q6DQo+ICAJCQlhc3NlcnQob3B0YXJnKTsNCj4gIAkJCWlmICghbGlz dF9zdWJ0ZXN0cykNCj4gQEAgLTkzNCwxMiArMTAwNiw0MSBAQCB2b2lkIGlndF9zaW1wbGVfaW5p dF9wYXJzZV9vcHRzKGludCAqYXJnYywgY2hhciAqKmFyZ3YsDQo+ICAJCSAgICBleHRyYV9vcHRf aGFuZGxlciwgaGFuZGxlcl9kYXRhKTsNCj4gIH0NCj4gIA0KPiArc3RhdGljIHZvaWQgX2NsZWFy X2N1cnJlbnRfZGVzY3JpcHRpb24odm9pZCkgew0KPiArCV9fY3VycmVudF9kZXNjcmlwdGlvblsw XSA9ICdcMCc7DQo+ICt9DQo+ICsNCj4gKyNkZWZpbmUgX19JTkRFTlQgIiAgIg0KDQpJIHdvdWxk bid0IHVzZSBhIG1hY3JvIGhlcmUuIEp1c3QgYWRkaW5nIHRoaXMgdG8gdGhlIGJvZHkgb2YgdGhl DQpmdW5jdGlvbiBzaG91bGQgYmUgZW5vdWdoOg0KDQogICAgc3RhdGljIGNvbnN0IGluZGVudFtd ID0gIiAgIjsNCg0KPiArc3RhdGljIHZvaWQgX19pZ3RfcHJpbnRfZGVzY3JpcHRpb24oY29uc3Qg Y2hhciAqc3VidGVzdF9uYW1lLCBjb25zdCBjaGFyICpmaWxlLCBjb25zdCBpbnQgbGluZSkNCg0K VW5uZWNlc3NhcnkgYGNvbnN0YCBmb3IgYGludCBsaW5lYC4NCg0KPiArew0KPiArCXN0cnVjdCBk ZXNjcmlwdGlvbl9ub2RlICpkZXNjOw0KPiArCWJvb2wgaGFzX2RvYyA9IGZhbHNlOw0KPiArDQo+ ICsJcHJpbnRmKCJTVUIgJXMgJXM6JWQ6XG4iLCBzdWJ0ZXN0X25hbWUsIGZpbGUsIGxpbmUpOw0K PiArDQo+ICsJaWd0X2xpc3RfZm9yX2VhY2goZGVzYywgJnN1Ymdyb3VwX2Rlc2NyaXB0aW9ucywg bGluaykgew0KPiArCQlwcmludF9saW5lX3dyYXBwaW5nKF9fSU5ERU5ULCBkZXNjLT5kZXNjKTsN Cj4gKwkJcHJpbnRmKCJcbiIpOw0KPiArCQloYXNfZG9jID0gdHJ1ZTsNCj4gKwl9DQo+ICsNCj4g KwlpZiAoX19jdXJyZW50X2Rlc2NyaXB0aW9uWzBdICE9ICdcMCcpIHsNCj4gKwkJcHJpbnRfbGlu ZV93cmFwcGluZyhfX0lOREVOVCwgX19jdXJyZW50X2Rlc2NyaXB0aW9uKTsNCj4gKwkJcHJpbnRm KCJcbiIpOw0KPiArCQloYXNfZG9jID0gdHJ1ZTsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoIWhhc19k b2MpDQo+ICsJCXByaW50ZigiJXNOTyBET0NVTUVOVEFUSU9OIVxuXG4iLCBfX0lOREVOVCk7DQo+ ICt9DQo+ICsjdW5kZWYgX19JTkRFTlQNCj4gKw0KPiAgLyoNCj4gICAqIE5vdGU6IFRlc3RjYXNl cyB3aGljaCB1c2UgdGhlc2UgaGVscGVycyBNVVNUIE5PVCBvdXRwdXQgYW55dGhpbmcgdG8gc3Rk b3V0DQo+ICAgKiBvdXRzaWRlIG9mIHBsYWNlcyBwcm90ZWN0ZWQgYnkgaWd0X3J1bl9zdWJ0ZXN0 IGNoZWNrcyAtIHRoZSBwaWdsaXQNCj4gICAqIHJ1bm5lciBhZGRzIGV2ZXJ5IGxpbmUgdG8gdGhl IHN1YnRlc3QgbGlzdC4NCj4gICAqLw0KPiAtYm9vbCBfX2lndF9ydW5fc3VidGVzdChjb25zdCBj aGFyICpzdWJ0ZXN0X25hbWUpDQo+ICtib29sIF9faWd0X3J1bl9zdWJ0ZXN0KGNvbnN0IGNoYXIg KnN1YnRlc3RfbmFtZSwgY29uc3QgY2hhciAqZmlsZSwgY29uc3QgaW50IGxpbmUpDQo+ICB7DQo+ ICAJaW50IGk7DQo+ICANCj4gQEAgLTk1NCwxOCArMTA1NSwyNSBAQCBib29sIF9faWd0X3J1bl9z dWJ0ZXN0KGNvbnN0IGNoYXIgKnN1YnRlc3RfbmFtZSkNCj4gIAkJCWlndF9leGl0KCk7DQo+ICAJ CX0NCj4gIA0KPiAtCWlmIChsaXN0X3N1YnRlc3RzKSB7DQo+IC0JCXByaW50ZigiJXNcbiIsIHN1 YnRlc3RfbmFtZSk7DQo+IC0JCXJldHVybiBmYWxzZTsNCj4gLQl9DQo+IC0NCj4gIAlpZiAocnVu X3NpbmdsZV9zdWJ0ZXN0KSB7DQo+IC0JCWlmICh1d2lsZG1hdChzdWJ0ZXN0X25hbWUsIHJ1bl9z aW5nbGVfc3VidGVzdCkgPT0gMCkNCj4gKwkJaWYgKHV3aWxkbWF0KHN1YnRlc3RfbmFtZSwgcnVu X3NpbmdsZV9zdWJ0ZXN0KSA9PSAwKSB7DQo+ICsJCQlfY2xlYXJfY3VycmVudF9kZXNjcmlwdGlv bigpOw0KPiAgCQkJcmV0dXJuIGZhbHNlOw0KPiAtCQllbHNlDQo+ICsJCX0gZWxzZSB7DQo+ICAJ CQlydW5fc2luZ2xlX3N1YnRlc3RfZm91bmQgPSB0cnVlOw0KPiArCQl9DQo+ICAJfQ0KPiAgDQo+ ICsJaWYgKGRlc2NyaWJlX3N1YnRlc3RzKSB7DQo+ICsJCV9faWd0X3ByaW50X2Rlc2NyaXB0aW9u KHN1YnRlc3RfbmFtZSwgZmlsZSwgbGluZSk7DQo+ICsJCV9jbGVhcl9jdXJyZW50X2Rlc2NyaXB0 aW9uKCk7DQo+ICsJCXJldHVybiBmYWxzZTsNCj4gKwl9IGVsc2UgaWYgKGxpc3Rfc3VidGVzdHMp IHsNCj4gKwkJcHJpbnRmKCIlc1xuIiwgc3VidGVzdF9uYW1lKTsNCj4gKwkJcmV0dXJuIGZhbHNl Ow0KPiArCX0NCj4gKw0KPiArDQo+ICAJaWYgKHNraXBfc3VidGVzdHNfaGVuY2Vmb3J0aCkgew0K PiAgCQlwcmludGYoIiVzU3VidGVzdCAlczogJXMlc1xuIiwNCj4gIAkJICAgICAgICghX19pZ3Rf cGxhaW5fb3V0cHV0KSA/ICJceDFiWzFtIiA6ICIiLCBzdWJ0ZXN0X25hbWUsDQo+IEBAIC0xMDE0 LDE1ICsxMTIyLDMyIEBAIGJvb2wgaWd0X29ubHlfbGlzdF9zdWJ0ZXN0cyh2b2lkKQ0KPiAgCXJl dHVybiBsaXN0X3N1YnRlc3RzOw0KPiAgfQ0KPiAgDQo+IC12b2lkIF9faWd0X3N1YnRlc3RfZ3Jv dXBfc2F2ZShpbnQgKnNhdmUpDQo+ICsNCj4gKw0KPiArdm9pZCBfX2lndF9zdWJ0ZXN0X2dyb3Vw X3NhdmUoaW50ICpzYXZlLCBpbnQgKmRlc2MpDQoNCmRlc2MgY2FuIGJlIGJvb2wgKi4NCg0KPiAg ew0KPiAgCWFzc2VydCh0ZXN0X3dpdGhfc3VidGVzdHMpOw0KPiAgDQo+ICsJaWYgKF9fY3VycmVu dF9kZXNjcmlwdGlvblswXSAhPSAnXDAnKSB7DQo+ICsJCXN0cnVjdCBkZXNjcmlwdGlvbl9ub2Rl ICpuZXcgPSBjYWxsb2MoMSwgc2l6ZW9mKCpuZXcpKTsNCj4gKwkJbWVtY3B5KG5ldy0+ZGVzYywg X19jdXJyZW50X2Rlc2NyaXB0aW9uLCBzaXplb2YoX19jdXJyZW50X2Rlc2NyaXB0aW9uKSk7DQo+ ICsJCWlndF9saXN0X2FkZF90YWlsKCZuZXctPmxpbmssICZzdWJncm91cF9kZXNjcmlwdGlvbnMp Ow0KPiArCQlfY2xlYXJfY3VycmVudF9kZXNjcmlwdGlvbigpOw0KPiArCQkqZGVzYyA9IHRydWU7 DQo+ICsJfQ0KPiArDQo+ICAJKnNhdmUgPSBza2lwX3N1YnRlc3RzX2hlbmNlZm9ydGg7DQo+ICB9 DQo+ICANCj4gLXZvaWQgX19pZ3Rfc3VidGVzdF9ncm91cF9yZXN0b3JlKGludCBzYXZlKQ0KPiAr dm9pZCBfX2lndF9zdWJ0ZXN0X2dyb3VwX3Jlc3RvcmUoaW50IHNhdmUsIGludCBkZXNjKQ0KDQpk ZXNjIGNhbiBiZSBib29sLg0KDQo+ICB7DQo+ICsJaWYgKGRlc2MpIHsNCj4gKwkJc3RydWN0IGRl c2NyaXB0aW9uX25vZGUgKmxhc3QgPQ0KPiArCQkJaWd0X2xpc3RfbGFzdF9lbnRyeSgmc3ViZ3Jv dXBfZGVzY3JpcHRpb25zLCBsYXN0LCBsaW5rKTsNCj4gKwkJaWd0X2xpc3RfZGVsKCZsYXN0LT5s aW5rKTsNCj4gKwkJZnJlZShsYXN0KTsNCj4gKwl9DQo+ICsNCj4gIAlza2lwX3N1YnRlc3RzX2hl bmNlZm9ydGggPSBzYXZlOw0KPiAgfQ0KPiAgDQo+IEBAIC0xMjI5LDYgKzEzNTQsMzQgQEAgYm9v bCBpZ3RfY2FuX2ZhaWwodm9pZCkNCj4gIAlyZXR1cm4gIXRlc3Rfd2l0aF9zdWJ0ZXN0cyB8fCBp bl9maXh0dXJlIHx8IGluX3N1YnRlc3Q7DQo+ICB9DQo+ICANCj4gKy8qKg0KPiArICogaWd0X2Rl c2NyaWJlX2Y6DQo+ICsgKiBAZm10OiBmb3JtYXQgc3RyaW5nIGNvbnRhaW5pbmcgZGVzY3JpcHRp b24NCj4gKyAqIEAuLi46IGFyZ3VtZW50IHVzZWQgYnkgdGhlIGZvcm1hdCBzdHJpbmcNCj4gKyAq DQo+ICsgKiBBdHRhY2ggYSBkZXNjcmlwdGlvbiB0byB0aGUgZm9sbG93aW5nICNpZ3Rfc3VidGVz dCBvciAjaWd0X3N1YnRlc3RfZ3JvdXANCj4gKyAqIGJsb2NrLg0KPiArICoNCj4gKyAqIENoZWNr ICNpZ3RfZGVzY3JpYmUgZm9yIG1vcmUgZGV0YWlscy4NCj4gKyAqDQo+ICsgKi8NCj4gK3ZvaWQg aWd0X2Rlc2NyaWJlX2YoY29uc3QgY2hhciAqZm10LCAuLi4pDQo+ICt7DQo+ICsJaW50IHJldDsN Cj4gKwl2YV9saXN0IGFyZ3M7DQo+ICsNCj4gKwlpZiAoIWRlc2NyaWJlX3N1YnRlc3RzKQ0KPiAr CQlyZXR1cm47DQo+ICsNCj4gKwl2YV9zdGFydChhcmdzLCBmbXQpOw0KPiArDQo+ICsJcmV0ID0g dnNucHJpbnRmKF9fY3VycmVudF9kZXNjcmlwdGlvbiwgc2l6ZW9mKF9fY3VycmVudF9kZXNjcmlw dGlvbiksIGZtdCwgYXJncyk7DQo+ICsNCj4gKwl2YV9lbmQoYXJncyk7DQo+ICsNCj4gKwlhc3Nl cnQocmV0IDwgc2l6ZW9mKF9fY3VycmVudF9kZXNjcmlwdGlvbikpOw0KPiArfQ0KPiArDQo+ICBz dGF0aWMgYm9vbCBydW5uaW5nX3VuZGVyX2dkYih2b2lkKQ0KPiAgew0KPiAgCWNoYXIgcGF0aG5h bWVbMzBdLCBidWZbMTAyNF07DQo+IEBAIC0xNTQwLDcgKzE2OTMsNyBAQCB2b2lkIGlndF9leGl0 KHZvaWQpDQo+ICAJCWdfa2V5X2ZpbGVfZnJlZShpZ3Rfa2V5X2ZpbGUpOw0KPiAgDQo+ICAJaWYg KHJ1bl9zaW5nbGVfc3VidGVzdCAmJiAhcnVuX3NpbmdsZV9zdWJ0ZXN0X2ZvdW5kKSB7DQo+IC0J CWlndF93YXJuKCJVbmtub3duIHN1YnRlc3Q6ICVzXG4iLCBydW5fc2luZ2xlX3N1YnRlc3QpOw0K PiArCQlpZ3RfY3JpdGljYWwoIlVua25vd24gc3VidGVzdDogJXNcbiIsIHJ1bl9zaW5nbGVfc3Vi dGVzdCk7DQo+ICAJCWV4aXQoSUdUX0VYSVRfSU5WQUxJRCk7DQo+ICAJfQ0KPiAgDQo+IGRpZmYg LS1naXQgYS9saWIvaWd0X2NvcmUuaCBiL2xpYi9pZ3RfY29yZS5oDQo+IGluZGV4IDg4YTk1ZWMy Li4xYjM3ZjE0MiAxMDA2NDQNCj4gLS0tIGEvbGliL2lndF9jb3JlLmgNCj4gKysrIGIvbGliL2ln dF9jb3JlLmgNCj4gQEAgLTE3NCw3ICsxNzQsNyBAQCBpbnQgaWd0X3N1YnRlc3RfaW5pdF9wYXJz ZV9vcHRzKGludCAqYXJnYywgY2hhciAqKmFyZ3YsDQo+ICAjZGVmaW5lIGlndF9zdWJ0ZXN0X2lu aXQoYXJnYywgYXJndikgXA0KPiAgCWlndF9zdWJ0ZXN0X2luaXRfcGFyc2Vfb3B0cygmYXJnYywg YXJndiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7DQo+ICANCj4gLWJvb2wgX19pZ3Rf cnVuX3N1YnRlc3QoY29uc3QgY2hhciAqc3VidGVzdF9uYW1lKTsNCj4gK2Jvb2wgX19pZ3RfcnVu X3N1YnRlc3QoY29uc3QgY2hhciAqc3VidGVzdF9uYW1lLCBjb25zdCBjaGFyICpmaWxlLCBjb25z dCBpbnQgbGluZSk7DQo+ICAjZGVmaW5lIF9faWd0X3Rva2VuY2F0Mih4LCB5KSB4ICMjIHkNCj4g IA0KPiAgLyoqDQo+IEBAIC0xOTgsMTQgKzE5OCwxNCBAQCBib29sIF9faWd0X3J1bl9zdWJ0ZXN0 KGNvbnN0IGNoYXIgKnN1YnRlc3RfbmFtZSk7DQo+ICAgKg0KPiAgICogVGhpcyBpcyBhIHNpbXBs ZXIgdmVyc2lvbiBvZiBpZ3Rfc3VidGVzdF9mKCkNCj4gICAqLw0KPiAtI2RlZmluZSBpZ3Rfc3Vi dGVzdChuYW1lKSBmb3IgKDsgX19pZ3RfcnVuX3N1YnRlc3QoKG5hbWUpKSAmJiBcDQo+ICsjZGVm aW5lIGlndF9zdWJ0ZXN0KG5hbWUpIGZvciAoOyBfX2lndF9ydW5fc3VidGVzdCgobmFtZSksIF9f RklMRV9fLCBfX0xJTkVfXykgJiYgXA0KPiAgCQkJCSAgIChzaWdzZXRqbXAoaWd0X3N1YnRlc3Rf am1wYnVmLCAxKSA9PSAwKTsgXA0KPiAgCQkJCSAgIGlndF9zdWNjZXNzKCkpDQo+ICAjZGVmaW5l IF9faWd0X3N1YnRlc3RfZih0bXAsIGZvcm1hdC4uLikgXA0KPiAgCWZvciAoY2hhciB0bXAgWzI1 Nl07IFwNCj4gIAkgICAgIHNucHJpbnRmKCB0bXAgLCBzaXplb2YoIHRtcCApLCBcDQo+ICAJCSAg ICAgIGZvcm1hdCksIFwNCj4gLQkgICAgIF9faWd0X3J1bl9zdWJ0ZXN0KCB0bXAgKSAmJiBcDQo+ ICsJICAgICBfX2lndF9ydW5fc3VidGVzdCh0bXAsIF9fRklMRV9fLCBfX0xJTkVfXykgJiYgXA0K PiAgCSAgICAgKHNpZ3NldGptcChpZ3Rfc3VidGVzdF9qbXBidWYsIDEpID09IDApOyBcDQo+ICAJ ICAgICBpZ3Rfc3VjY2VzcygpKQ0KPiAgDQo+IEBAIC0yMjcsOCArMjI3LDggQEAgYm9vbCBfX2ln dF9ydW5fc3VidGVzdChjb25zdCBjaGFyICpzdWJ0ZXN0X25hbWUpOw0KPiAgY29uc3QgY2hhciAq aWd0X3N1YnRlc3RfbmFtZSh2b2lkKTsNCj4gIGJvb2wgaWd0X29ubHlfbGlzdF9zdWJ0ZXN0cyh2 b2lkKTsNCj4gIA0KPiAtdm9pZCBfX2lndF9zdWJ0ZXN0X2dyb3VwX3NhdmUoaW50ICopOw0KPiAt dm9pZCBfX2lndF9zdWJ0ZXN0X2dyb3VwX3Jlc3RvcmUoaW50KTsNCj4gK3ZvaWQgX19pZ3Rfc3Vi dGVzdF9ncm91cF9zYXZlKGludCAqLCBpbnQgKik7DQo+ICt2b2lkIF9faWd0X3N1YnRlc3RfZ3Jv dXBfcmVzdG9yZShpbnQsIGludCk7DQo+ICAvKioNCj4gICAqIGlndF9zdWJ0ZXN0X2dyb3VwOg0K PiAgICoNCj4gQEAgLTI0NSwxMSArMjQ1LDE0IEBAIHZvaWQgX19pZ3Rfc3VidGVzdF9ncm91cF9y ZXN0b3JlKGludCk7DQo+ICAgKiBncm91cCB3aWxsIGZhaWwgb3Igc2tpcC4gU3VidGVzdCBncm91 cHMgY2FuIGJlIGFyYml0cmFyaWx5IG5lc3RlZC4NCj4gICAqLw0KPiAgI2RlZmluZSBpZ3Rfc3Vi dGVzdF9ncm91cCBmb3IgKGludCBpZ3RfdG9rZW5jYXQoX190bXBpbnQsX19MSU5FX18pID0gMCwg XA0KPiAtCQkJICAgICAgIGlndF90b2tlbmNhdChfX3NhdmUsX19MSU5FX18pID0gMDsgXA0KPiAr CQkJICAgICAgIGlndF90b2tlbmNhdChfX3NhdmUsX19MSU5FX18pID0gMCwgXA0KPiArCQkJICAg ICAgIGlndF90b2tlbmNhdChfX2Rlc2MsX19MSU5FX18pID0gMDsgXA0KPiAgCQkJICAgICAgIGln dF90b2tlbmNhdChfX3RtcGludCxfX0xJTkVfXykgPCAxICYmIFwNCj4gLQkJCSAgICAgICAoX19p Z3Rfc3VidGVzdF9ncm91cF9zYXZlKCYgaWd0X3Rva2VuY2F0KF9fc2F2ZSxfX0xJTkVfXykgKSwg dHJ1ZSk7IFwNCj4gKwkJCSAgICAgICAoX19pZ3Rfc3VidGVzdF9ncm91cF9zYXZlKCYgaWd0X3Rv a2VuY2F0KF9fc2F2ZSxfX0xJTkVfXyksIFwNCj4gKwkJCQkJCQkgJiBpZ3RfdG9rZW5jYXQoX19k ZXNjLF9fTElORV9fKSApLCB0cnVlKTsgXA0KPiAgCQkJICAgICAgIGlndF90b2tlbmNhdChfX3Rt cGludCxfX0xJTkVfXykgKyssIFwNCj4gLQkJCSAgICAgICBfX2lndF9zdWJ0ZXN0X2dyb3VwX3Jl c3RvcmUoaWd0X3Rva2VuY2F0KF9fc2F2ZSxfX0xJTkVfXykgKSkNCj4gKwkJCSAgICAgICBfX2ln dF9zdWJ0ZXN0X2dyb3VwX3Jlc3RvcmUoaWd0X3Rva2VuY2F0KF9fc2F2ZSxfX0xJTkVfXyksIFwN Cj4gKwkJCQkJCQkgICBpZ3RfdG9rZW5jYXQoX19kZXNjLF9fTElORV9fKSkpDQo+ICANCj4gIC8q Kg0KPiAgICogaWd0X21haW5fYXJnczoNCj4gQEAgLTM4NSw2ICszODgsMTI0IEBAIHN0YXRpYyBp bmxpbmUgdm9pZCBpZ3RfaWdub3JlX3dhcm4oYm9vbCB2YWx1ZSkNCj4gIHsNCj4gIH0NCj4gIA0K PiArX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZiwgMSwgMikpKQ0KPiArdm9pZCBpZ3RfZGVz Y3JpYmVfZihjb25zdCBjaGFyICpmbXQsIC4uLik7DQo+ICsNCj4gKy8qKg0KPiArICogaWd0X2Rl c2NyaWJlOg0KPiArICogQGRzYzogc3RyaW5nIGNvbnRhaW5pbmcgZGVzY3JpcHRpb24NCj4gKyAq DQo+ICsgKiBBdHRhY2ggYSBkZXNjcmlwdGlvbiB0byB0aGUgZm9sbG93aW5nICNpZ3Rfc3VidGVz dCBvciAjaWd0X3N1YnRlc3RfZ3JvdXANCj4gKyAqIGJsb2NrLg0KPiArICoNCj4gKyAqIFRoZSBk ZXNjcmlwdGlvbiBzaG91bGQgY29tcGxlbWVudCB0aGUgdGVzdC9zdWJ0ZXN0IG5hbWUgYW5kIHBy b3ZpZGUgbW9yZQ0KPiArICogY29udGV4dCBvbiB3aGF0IGlzIGJlaW5nIHRlc3RlZC4gSXQgc2hv dWxkIGV4cGxhaW4gdGhlIGlkZWEgb2YgdGhlIHRlc3QgYW5kDQo+ICsgKiBkbyBub3QgbWVudGlv biBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBzbyB0aGF0IGl0IG5ldmVyIGdvZXMgb3V0IG9mIGRh dGUuDQo+ICsgKg0KPiArICogRE86DQo+ICsgKiAgKiBmb2N1cyBvbiB0aGUgdXNlcnNwYWNlJ3Mg cGVyc3BlY3RpdmUNCj4gKyAqICAqIHRyeSB0byBjYXB0dXJlIHRoZSByZWFzb24gZm9yIHRoZSB0 ZXN0J3MgZXhpc3RlbmNlDQo+ICsgKiAgKiBiZSBicmllZg0KPiArICoNCj4gKyAqIERPTidUOg0K PiArICogICogdHJ5IHRvIHRyYW5zbGF0ZSB0aGUgY29kZSBpbnRvIEVuZ2xpc2gNCj4gKyAqICAq IGV4cGxhaW4gYWxsIHRoZSBjaGVja3MgdGhlIHRlc3QgZG9lcw0KPiArICogICogZGVsdmUgb24g dGhlIGltcGxlbWVudGF0aW9uDQo+ICsgKg0KPiArICogR29vZCBleGFtcGxlczoNCj4gKyAqICAq ICJtYWtlIHN1cmUgdGhhdCBsZWdhY3kgY3Vyc29yIHVwZGF0ZXMgZG8gbm90IHN0YWxsIGF0b21p YyBjb21taXRzIg0KPiArICogICogImNoZWNrIHRoYXQgYXRvbWljIHVwZGF0ZXMgb2YgbWFueSBw bGFuZXMgYXJlIGluZGVlZCBhdG9taWMgYW5kIHRha2UNCj4gKyAqICAgICBlZmZlY3QgaW1tZWRp YXRlbHkgYWZ0ZXIgdGhlIGNvbW1pdCINCj4gKyAqICAqICJtYWtlIHN1cmUgdGhhdCB0aGUgbWV0 YS1kYXRhIGV4cG9zZWQgYnkgdGhlIGtlcm5lbCB0byB0aGUgdXNlcnNwYWNlDQo+ICsgKiAgICAg aXMgY29ycmVjdCBhbmQgbWF0Y2hlcyB0aGUgdXNlZCBFRElEIg0KPiArICoNCj4gKyAqIEJhZCBl eGFtcGxlczoNCj4gKyAqICAqICJzcGF3biAxMCB0aHJlYWRzLCBlYWNoIHBpbm5pbmcgY3B1IGNv cmUgd2l0aCBhIGJ1c3kgbG9vcC4uLiINCj4gKyAqICAqICJyYW5kb21seSBnZW5lcmF0ZSBob2xl cyBpbiBhIHByaW1hcnkgcGxhbmUgdGhlbiB0cnkgdG8gY292ZXIgZWFjaCBob2xlDQo+ICsgKiAg ICB3aXRoIGEgcGxhbmUgYW5kIG1ha2Ugc3VyZSB0aGF0IENSQyBtYXRjaGVzLCBkbyAyNSBnYXpp bGxpb24gcm91bmRzIG9mDQo+ICsgKiAgICB0aGF0Li4uIg0KPiArICoNCj4gKyAqDQo+ICsgKiBS ZXN1bHRpbmcgI2lndF9zdWJ0ZXN0IGRvY3VtZW50YXRpb24gaXMgYSBjb25jYXRlbmF0aW9uIG9m IGl0cyBvd24NCj4gKyAqIGRlc2NyaXB0aW9uIGFuZCBhbGwgdGhlIHBhcmVudGluZyAjaWd0X3N1 YnRlc3RfZ3JvdXAgZGVzY3JpcHRpb25zLCBzdGFydGluZw0KPiArICogZnJvbSB0aGUgb3V0ZXJt b3N0IG9uZS4gRXhhbXBsZToNCj4gKyAqDQo+ICsgKiB8WzwhLS0gbGFuZ3VhZ2U9IkMiIC0tPg0K PiArICogI2luY2x1ZGUgImlndC5oIg0KPiArICoNCj4gKyAqIElHVF9URVNUX0RFU0NSSVBUSU9O KCJHbG9iYWwgZGVzY3JpcHRpb24gb2YgdGhlIHdob2xlIGJpbmFyeSIpOw0KPiArICogaWd0X21h aW4NCj4gKyAqIHsNCj4gKyAqIAlpZ3RfZGVzY3JpYmUoIkRlc2Mgb2YgdGhlIHN1Ymdyb3VwIHdp dGggQSBhbmQgQiIpOw0KPiArICogCWlndF9zdWJ0ZXN0X2dyb3VwIHsNCj4gKyAqIAkJaWd0X2Rl c2NyaWJlKCJEZXNjIG9mIHRoZSBzdWJ0ZXN0IEEiKTsNCj4gKyAqIAkJaWd0X3N1YnRlc3QoInN1 YnRlc3QtYSIpIHsNCj4gKyAqIAkJCS4uLg0KPiArICogCQl9DQo+ICsgKg0KPiArICogCQlpZ3Rf ZGVzY3JpYmUoIkRlc2Mgb2YgdGhlIHN1YnRlc3QgQiIpOw0KPiArICogCQlpZ3Rfc3VidGVzdCgi c3VidGVzdC1iIikgew0KPiArICogCQkJLi4uDQo+ICsgKiAJCX0NCj4gKyAqIAl9DQo+ICsgKg0K PiArICogCWlndF9kZXNjcmliZSgiRGVzYyBvZiB0aGUgc3VidGVzdCBDIik7DQo+ICsgKiAJaWd0 X3N1YnRlc3QoInN1YnRlc3QtYyIpIHsNCj4gKyAqIAkJLi4uDQo+ICsgKiAJfQ0KPiArICogfQ0K PiArICogXXwNCj4gKyAqDQo+ICsgKiBJdCdzIHdpbGwgYWNjZXNzaWJsZSB2aWEgLS1kZXNjcmli ZSBjb21tYW5kIGxpbmUgc3dpdGNoOg0KPiArICoNCj4gKyAqIHxbDQo+ICsgKiAkIHRlc3QgLS1k ZXNjcmliZQ0KPiArICogR2xvYmFsIGRlc2NyaXB0aW9uIG9mIHRoZSB3aG9sZSBiaW5hcnkNCj4g KyAqDQo+ICsgKiBTVUIgc3VidGVzdC1hIHRlc3QuYzo1Og0KPiArICogICBEZXNjIG9mIHRoZSBz dWJncm91cCB3aXRoIEEgYW5kIEINCj4gKyAqDQo+ICsgKiAgIERlc2Mgb2YgdGhlIHN1YnRlc3Qg QQ0KPiArICoNCj4gKyAqIFNVQiBzdWJ0ZXN0LWIgdGVzdC5jOjEwOg0KPiArICogICBEZXNjIG9m IHRoZSBzdWJncm91cCB3aXRoIEEgYW5kIEINCj4gKyAqDQo+ICsgKiAgIERlc2Mgb2YgdGhlIHN1 YnRlc3QgQg0KPiArICoNCj4gKyAqIFNVQiBzdWJ0ZXN0LWMgdGVzdC5jOjE1Og0KPiArICogICBE ZXNjIG9mIHRoZSBzdWJ0ZXN0IEMNCj4gKyAqIF18DQo+ICsgKg0KPiArICogRXZlcnkgc2luZ2xl ICNpZ3Rfc3VidGVzdCBkb2VzIG5vdCBoYXZlIHRvIGJlIHByZWNlZGVkIHdpdGggYSAjaWd0X2Rl c2NyaWJlDQo+ICsgKiBhcyBsb25nIGFzIGl0IGhhcyBnb29kLWVub3VnaCBleHBsYW5hdGlvbiBw cm92aWRlZCBvbiB0aGUgI2lndF9zdWJ0ZXN0X2dyb3VwDQo+ICsgKiBsZXZlbC4NCj4gKyAqDQo+ ICsgKiBFeGFtcGxlOg0KPiArICoNCj4gKyAqIHxbPCEtLSBsYW5ndWFnZT0iQyIgLS0+DQo+ICsg KiAjaW5jbHVkZSAiaWd0LmgiDQo+ICsgKg0KPiArICogaWd0X21haW4NCj4gKyAqIHsNCj4gKyAq IAlpZ3RfZGVzY3JpYmUoImNoZWNrIHh5eiB3aXRoIGRpZmZlcmVudCB0aWxpbmdzIik7DQo+ICsg KiAJaWd0X3N1YnRlc3RfZ3JvdXAgew0KPiArICogCQkvLyBubyBuZWVkIGZvciBleHRyYSBkZXNj cmlwdGlvbiwgZ3JvdXAgaXMgZW5vdWdoIGFuZCB0aWxpbmcgaXMNCj4gKyAqIAkJLy8gb2J2aW91 cyBmcm9tIHRoZSB0ZXN0IG5hbWUNCj4gKyAqIAkJaWd0X3N1YnRlc3QoImZvby10aWxpbmcteCIp IHsNCj4gKyAqIAkJCS4uLg0KPiArICogCQl9DQo+ICsgKg0KPiArICogCQlpZ3Rfc3VidGVzdCgi Zm9vLXRpbGluZy15Iikgew0KPiArICogCQkJLi4uDQo+ICsgKiAJCX0NCj4gKyAqIAl9DQo+ICsg KiB9DQo+ICsgKiBdfA0KPiArICoNCj4gKyAqLw0KPiArI2RlZmluZSBpZ3RfZGVzY3JpYmUoZHNj KSBcDQo+ICsJaWd0X2Rlc2NyaWJlX2YoIiVzIiwgZHNjKQ0KPiArDQo+ICAvKioNCj4gICAqIGln dF9hc3NlcnQ6DQo+ICAgKiBAZXhwcjogY29uZGl0aW9uIHRvIHRlc3QNCj4gZGlmZiAtLWdpdCBh L2xpYi90ZXN0cy9pZ3RfZGVzY3JpYmUuYyBiL2xpYi90ZXN0cy9pZ3RfZGVzY3JpYmUuYw0KPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMC4uYTlmODU3YmINCj4gLS0tIC9k ZXYvbnVsbA0KPiArKysgYi9saWIvdGVzdHMvaWd0X2Rlc2NyaWJlLmMNCj4gQEAgLTAsMCArMSwy NjYgQEANCj4gKy8qDQo+ICsgKiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbg0K PiArICoNCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdl LCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhDQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUg YW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLA0KPiAr ICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5n IHdpdGhvdXQgbGltaXRhdGlvbg0KPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlm eSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsDQo+ICsgKiBhbmQvb3Ig c2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hv bSB0aGUNCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6DQo+ICsgKg0KPiArICogVGhlIGFib3ZlIGNvcHlyaWdo dCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dA0K PiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0 YW50aWFsIHBvcnRpb25zIG9mIHRoZQ0KPiArICogU29mdHdhcmUuDQo+ICsgKg0KPiArICogVEhF IFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJ TkQsIEVYUFJFU1MgT1INCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQg VE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLA0KPiArICogRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNI QUxMDQo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9S IEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUg0KPiArICogTElBQklMSVRZLCBXSEVUSEVSIElO IEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcNCj4gKyAq IEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBV U0UgT1IgT1RIRVIgREVBTElOR1MNCj4gKyAqIElOIFRIRSBTT0ZUV0FSRS4NCj4gKyAqLw0KPiAr DQo+ICsjaW5jbHVkZSA8c3lzL3dhaXQuaD4NCj4gKyNpbmNsdWRlIDxzdHJpbmcuaD4NCj4gKyNp bmNsdWRlIDxzdGRsaWIuaD4NCj4gKw0KPiArI2luY2x1ZGUgImRybXRlc3QuaCINCj4gKyNpbmNs dWRlICJpZ3RfdGVzdHNfY29tbW9uLmgiDQo+ICsNCj4gK0lHVF9URVNUX0RFU0NSSVBUSU9OKCJ0 aGUgdG9wIGxldmVsIGRlc2NyaXB0aW9uIik7DQo+ICtzdGF0aWMgdm9pZCBmYWtlX21haW4oaW50 IGFyZ2MsIGNoYXIgKiphcmd2KSB7DQo+ICsJaWd0X3N1YnRlc3RfaW5pdChhcmdjLCBhcmd2KTsN Cj4gKw0KPiArCWlndF9kZXNjcmliZSgiQmFzaWMgQSIpOw0KPiArCWlndF9zdWJ0ZXN0KCJBIikN Cj4gKwkJOw0KPiArDQo+ICsJaWd0X2ZpeHR1cmUNCj4gKwkJcHJpbnRmKCJzaG91bGQgbm90IGJl IGV4ZWN1dGVkIVxuIik7DQo+ICsNCj4gKwlpZ3RfZGVzY3JpYmUoIkdyb3VwIHdpdGggQiwgQyAm IEQiKTsNCj4gKwlpZ3Rfc3VidGVzdF9ncm91cCB7DQo+ICsJCWlndF9kZXNjcmliZSgiQmFzaWMg QiIpOw0KPiArCQlpZ3Rfc3VidGVzdCgiQiIpDQo+ICsJCQk7DQo+ICsNCj4gKwkJaWYgKCFpZ3Rf b25seV9saXN0X3N1YnRlc3RzKCkpDQo+ICsJCQlwcmludGYoInNob3VsZCBub3QgYmUgZXhlY3V0 ZWQhXG4iKTsNCj4gKw0KPiArCQlpZ3RfZGVzY3JpYmUoIkdyb3VwIHdpdGggQyAmIEQiKTsNCj4g KwkJaWd0X3N1YnRlc3RfZ3JvdXAgew0KPiArCQkJaWd0X2Rlc2NyaWJlKCJCYXNpYyBDIik7DQo+ ICsJCQlpZ3Rfc3VidGVzdCgiQyIpDQo+ICsJCQkJcHJpbnRmKCJzaG91bGQgbm90IGJlIGV4ZWN1 dGVkIVxuIik7DQo+ICsNCj4gKwkJCS8vIE5PIERPQw0KPiArCQkJaWd0X3N1YnRlc3QoIkQiKQ0K PiArCQkJCTsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiArCS8vIE5PIERPQw0KPiArCWlndF9zdWJ0 ZXN0X2dyb3VwIHsNCj4gKwkJLy8gTk8gRE9DDQo+ICsJCWlndF9zdWJ0ZXN0KCJFIikNCj4gKwkJ CTsNCj4gKwl9DQo+ICsNCj4gKwkvLyBOTyBET0MNCj4gKwlpZ3Rfc3VidGVzdCgiRiIpDQo+ICsJ CTsNCj4gKw0KPiArCWlndF9kZXNjcmliZSgidGhpcyBkZXNjcmlwdGlvbiBzaG91bGQgYmUgc28g bG9uZyB0aGF0IGl0IHdyYXBzIGl0c2VsZiBuaWNlbHkgaW4gdGhlIHRlcm1pbmFsICINCj4gKwkJ ICAgICAidGhpcyBkZXNjcmlwdGlvbiBzaG91bGQgYmUgc28gbG9uZyB0aGF0IGl0IHdyYXBzIGl0 c2VsZiBuaWNlbHkgaW4gdGhlIHRlcm1pbmFsICINCj4gKwkJICAgICAidGhpcyBkZXNjcmlwdGlv biBzaG91bGQgYmUgc28gbG9uZyB0aGF0IGl0IHdyYXBzIGl0c2VsZiBuaWNlbHkgaW4gdGhlIHRl cm1pbmFsICINCj4gKwkJICAgICAidGhpcyBkZXNjcmlwdGlvbiBzaG91bGQgYmUgc28gbG9uZyB0 aGF0IGl0IHdyYXBzIGl0c2VsZiBuaWNlbHkgaW4gdGhlIHRlcm1pbmFsICINCj4gKwkJICAgICAi dGhpcyBkZXNjcmlwdGlvbiBzaG91bGQgYmUgc28gbG9uZyB0aGF0IGl0IHdyYXBzIGl0c2VsZiBu aWNlbHkgaW4gdGhlIHRlcm1pbmFsICINCj4gKwkJICAgICAidGhpcyBkZXNjcmlwdGlvbiBzaG91 bGQgYmUgc28gbG9uZyB0aGF0IGl0IHdyYXBzIGl0c2VsZiBuaWNlbHkgaW4gdGhlIHRlcm1pbmFs Iik7DQo+ICsJaWd0X3N1YnRlc3QoIkciKQ0KPiArCQk7DQo+ICsNCj4gKwlpZ3RfZGVzY3JpYmUo InZlcnlsb25nd29yZHRoYXRzaG91ZGxiZXByaW50ZWRldmVudGhvdWdoaXRzcGFzdHRoZXdycHBp bmdsaW1pdCINCj4gKwkJICAgICAidmVyeWxvbmd3b3JkdGhhdHNob3VkbGJlcHJpbnRlZGV2ZW50 aG91Z2hpdHNwYXN0dGhld3JhcHBpbmdsaW1pdCAiDQo+ICsJCSAgICAgInZlcnlsb25nd29yZHRo YXRzaG91ZGxiZXByaW50ZWRldmVudGhvdWdoaXRzcGFzdHRoZXdyYXBwaW5nbGltaXQiDQo+ICsJ CSAgICAgInZlcnlsb25nd29yZHRoYXRzaG91ZGxiZXByaW50ZWRldmVudGhvdWdoaXRzcGFzdHRo ZXdyYXBwaW5nbGltaXQiKTsNCj4gKwlpZ3Rfc3VidGVzdCgiRiIpDQo+ICsJCTsNCj4gKw0KPiAr CWlndF9leGl0KCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBjaGFyIERFU0NSSUJFX0FM TF9PVVRQVVRbXSA9IFwNCj4gKwkidGhlIHRvcCBsZXZlbCBkZXNjcmlwdGlvblxuIg0KPiArCSJc biINCj4gKwkiU1VCIEEgLi4vbGliL3Rlc3RzL2lndF9kZXNjcmliZS5jOjM2OlxuIg0KPiArCSIg IEJhc2ljIEFcbiINCj4gKwkiXG4iDQo+ICsJIlNVQiBCIC4uL2xpYi90ZXN0cy9pZ3RfZGVzY3Jp YmUuYzo0NTpcbiINCj4gKwkiICBHcm91cCB3aXRoIEIsIEMgJiBEXG4iDQo+ICsJIlxuIg0KPiAr CSIgIEJhc2ljIEJcbiINCj4gKwkiXG4iDQo+ICsJIlNVQiBDIC4uL2xpYi90ZXN0cy9pZ3RfZGVz Y3JpYmUuYzo1NDpcbiINCj4gKwkiICBHcm91cCB3aXRoIEIsIEMgJiBEXG4iDQo+ICsJIlxuIg0K PiArCSIgIEdyb3VwIHdpdGggQyAmIERcbiINCj4gKwkiXG4iDQo+ICsJIiAgQmFzaWMgQ1xuIg0K PiArCSJcbiINCj4gKwkiU1VCIEQgLi4vbGliL3Rlc3RzL2lndF9kZXNjcmliZS5jOjU4OlxuIg0K PiArCSIgIEdyb3VwIHdpdGggQiwgQyAmIERcbiINCj4gKwkiXG4iDQo+ICsJIiAgR3JvdXAgd2l0 aCBDICYgRFxuIg0KPiArCSJcbiINCj4gKwkiU1VCIEUgLi4vbGliL3Rlc3RzL2lndF9kZXNjcmli ZS5jOjY2OlxuIg0KPiArCSIgIE5PIERPQ1VNRU5UQVRJT04hXG4iDQo+ICsJIlxuIg0KPiArCSJT VUIgRiAuLi9saWIvdGVzdHMvaWd0X2Rlc2NyaWJlLmM6NzE6XG4iDQo+ICsJIiAgTk8gRE9DVU1F TlRBVElPTiFcbiINCj4gKwkiXG4iDQo+ICsJIlNVQiBHIC4uL2xpYi90ZXN0cy9pZ3RfZGVzY3Jp YmUuYzo4MDpcbiINCj4gKwkiICB0aGlzIGRlc2NyaXB0aW9uIHNob3VsZCBiZSBzbyBsb25nIHRo YXQgaXQgd3JhcHMgaXRzZWxmIG5pY2VseSBpbiB0aGUgdGVybWluYWwgdGhpc1xuIg0KPiArCSIg IGRlc2NyaXB0aW9uIHNob3VsZCBiZSBzbyBsb25nIHRoYXQgaXQgd3JhcHMgaXRzZWxmIG5pY2Vs eSBpbiB0aGUgdGVybWluYWwgdGhpcyBkZXNjcmlwdGlvblxuIg0KPiArCSIgIHNob3VsZCBiZSBz byBsb25nIHRoYXQgaXQgd3JhcHMgaXRzZWxmIG5pY2VseSBpbiB0aGUgdGVybWluYWwgdGhpcyBk ZXNjcmlwdGlvbiBzaG91bGQgYmUgc29cbiINCj4gKwkiICBsb25nIHRoYXQgaXQgd3JhcHMgaXRz ZWxmIG5pY2VseSBpbiB0aGUgdGVybWluYWwgdGhpcyBkZXNjcmlwdGlvbiBzaG91bGQgYmUgc28g bG9uZyB0aGF0IGl0XG4iDQo+ICsJIiAgd3JhcHMgaXRzZWxmIG5pY2VseSBpbiB0aGUgdGVybWlu YWwgdGhpcyBkZXNjcmlwdGlvbiBzaG91bGQgYmUgc28gbG9uZyB0aGF0IGl0IHdyYXBzIGl0c2Vs ZlxuIg0KPiArCSIgIG5pY2VseSBpbiB0aGUgdGVybWluYWxcbiINCj4gKwkiXG4iDQo+ICsJIlNV QiBGIC4uL2xpYi90ZXN0cy9pZ3RfZGVzY3JpYmUuYzo4NzpcbiINCj4gKwkiICB2ZXJ5bG9uZ3dv cmR0aGF0c2hvdWRsYmVwcmludGVkZXZlbnRob3VnaGl0c3Bhc3R0aGV3cnBwaW5nbGltaXR2ZXJ5 bG9uZ3dvcmR0aGF0c2hvdWRsYmVwcmludGVkZXZlbnRob3VnaGl0c3Bhc3R0aGV3cmFwcGluZ2xp bWl0XG4iDQo+ICsJIiAgdmVyeWxvbmd3b3JkdGhhdHNob3VkbGJlcHJpbnRlZGV2ZW50aG91Z2hp dHNwYXN0dGhld3JhcHBpbmdsaW1pdHZlcnlsb25nd29yZHRoYXRzaG91ZGxiZXByaW50ZWRldmVu dGhvdWdoaXRzcGFzdHRoZXdyYXBwaW5nbGltaXRcblxuIjsNCj4gKw0KPiArc3RhdGljIGNvbnN0 IGNoYXIgSlVTVF9DX09VVFBVVFtdID0gXA0KPiArCSJ0aGUgdG9wIGxldmVsIGRlc2NyaXB0aW9u XG4iDQo+ICsJIlxuIg0KPiArCSJTVUIgQyAuLi9saWIvdGVzdHMvaWd0X2Rlc2NyaWJlLmM6NTQ6 XG4iDQo+ICsJIiAgR3JvdXAgd2l0aCBCLCBDICYgRFxuIg0KPiArCSJcbiINCj4gKwkiICBHcm91 cCB3aXRoIEMgJiBEXG4iDQo+ICsJIlxuIg0KPiArCSIgIEJhc2ljIENcbiINCj4gKwkiXG4iOw0K PiArDQo+ICtzdGF0aWMgdm9pZCBhc3NlcnRfcGlwZV9lbXB0eShpbnQgZmQpDQo+ICt7DQo+ICsJ Y2hhciBidWZbNV07DQo+ICsJaW50ZXJuYWxfYXNzZXJ0KDAgPT0gcmVhZChmZCwgYnVmLCBzaXpl b2YoYnVmKSkpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCByZWFkX3dob2xlX3BpcGUoaW50 IGZkLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pDQo+ICt7DQo+ICsJc3NpemVfdCByZWFkbGVu Ow0KPiArCW9mZl90IG9mZnNldDsNCj4gKw0KPiArCW9mZnNldCA9IDA7DQo+ICsJd2hpbGUgKChy ZWFkbGVuID0gcmVhZChmZCwgYnVmK29mZnNldCwgYnVmbGVuLW9mZnNldCkpKSB7DQoNCkRvZXNu J3QgaGFuZGxlIEVJTlRSLg0KDQo+ICsJCWludGVybmFsX2Fzc2VydChyZWFkbGVuICE9IC0xKTsN Cj4gKwkJb2Zmc2V0ICs9IHJlYWRsZW47DQo+ICsJfQ0KPiArfQ0KPiArDQo+ICtzdGF0aWMgcGlk X3QgZG9fZm9yayhpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGludCAqb3V0LCBpbnQgKmVycikNCj4g K3sNCj4gKwlpbnQgb3V0ZmRbMl0sIGVycmZkWzJdOw0KPiArCXBpZF90IHBpZDsNCj4gKw0KPiAr CWludGVybmFsX2Fzc2VydChwaXBlKG91dGZkKSAhPSAtMSk7DQo+ICsJaW50ZXJuYWxfYXNzZXJ0 KHBpcGUoZXJyZmQpICE9IC0xKTsNCj4gKw0KPiArCXBpZCA9IGZvcmsoKTsNCj4gKwlpbnRlcm5h bF9hc3NlcnQocGlkICE9IC0xKTsNCj4gKw0KPiArCWlmIChwaWQgPT0gMCkgew0KPiArCQl3aGls ZSAoKGR1cDIob3V0ZmRbMV0sIFNURE9VVF9GSUxFTk8pID09IC0xKSAmJiAoZXJybm8gPT0gRUlO VFIpKSB7fQ0KPiArCQl3aGlsZSAoKGR1cDIoZXJyZmRbMV0sIFNUREVSUl9GSUxFTk8pID09IC0x KSAmJiAoZXJybm8gPT0gRUlOVFIpKSB7fQ0KDQpVbm5lY2Vzc2FyeSBwYXJlbnRoZXNlcyBoZXJl Lg0KDQpOZWVkIHRvIGNsb3NlIG91dGZkWzFdLCBlcnJmZFsxXSwgb3V0ZmRbMF0gYW5kIGVycmZk WzBdIGF0IHRoaXMgcG9pbnQuDQoNCj4gKwkJZmFrZV9tYWluKGFyZ2MsIGFyZ3YpOw0KPiArDQo+ ICsJCWV4aXQoLTEpOw0KPiArCX0gZWxzZSB7DQo+ICsJCS8qIGNsb3NlIHRoZSB3cml0aW5nIGVu ZHMgKi8NCj4gKwkJY2xvc2Uob3V0ZmRbMV0pOw0KPiArCQljbG9zZShlcnJmZFsxXSk7DQo+ICsN Cj4gKwkJKm91dCA9IG91dGZkWzBdOw0KPiArCQkqZXJyID0gZXJyZmRbMF07DQo+ICsNCj4gKwkJ cmV0dXJuIHBpZDsNCj4gKwl9DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgX3dhaXQocGlkX3Qg cGlkLCBpbnQgKnN0YXR1cykgew0KPiArCWludCByZXQ7DQo+ICsNCj4gKwlkbyB7DQo+ICsJCXJl dCA9IHdhaXRwaWQocGlkLCBzdGF0dXMsIDApOw0KPiArCX0gd2hpbGUgKHJldCA9PSAtMSAmJiBl cnJubyA9PSBFSU5UUik7DQo+ICsNCj4gKwlyZXR1cm4gcmV0Ow0KDQpXZSBjb3VsZCBjaGVjayBy ZXQgPT0gMCBpbiB0aGlzIGZ1bmN0aW9uLiBDb3VsZCBhbHNvIGNoZWNrIGZvcg0KV0lGRVhJVEVE LCBzaW5jZSBXRVhJVFNUQVRVUyBvbmx5IHdvcmtzIGluIHRoaXMgY2FzZS4NCg0KPiArfQ0KPiAr DQo+ICtpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQo+ICt7DQo+ICsJY2hhciBwcm9n W10gPSAiaWd0X2Rlc2NyaWJlIjsNCj4gKwlpbnQgc3RhdHVzOw0KPiArCWludCBvdXRmZCwgZXJy ZmQ7DQo+ICsNCj4gKwkvKiBkZXNjcmliZSBhbGwgc3VidGVzdCAqLyB7DQo+ICsJCXN0YXRpYyBj aGFyIG91dFs0MDk2XTsNCj4gKwkJY2hhciBhcmdbXSA9ICItLWRlc2NyaWJlIjsNCj4gKwkJY2hh ciAqZmFrZV9hcmd2W10gPSB7cHJvZywgYXJnfTsNCj4gKwkJaW50IGZha2VfYXJnYyA9IEFSUkFZ X1NJWkUoZmFrZV9hcmd2KTsNCj4gKw0KPiArCQlwaWRfdCBwaWQgPSBkb19mb3JrKGZha2VfYXJn YywgZmFrZV9hcmd2LCAmb3V0ZmQsICZlcnJmZCk7DQo+ICsNCj4gKwkJcmVhZF93aG9sZV9waXBl KG91dGZkLCBvdXQsIHNpemVvZihvdXQpKTsNCj4gKwkJYXNzZXJ0X3BpcGVfZW1wdHkoZXJyZmQp Ow0KPiArDQo+ICsJCWludGVybmFsX2Fzc2VydChfd2FpdChwaWQsICZzdGF0dXMpICE9IC0xKTsN Cj4gKwkJaW50ZXJuYWxfYXNzZXJ0KFdFWElUU1RBVFVTKHN0YXR1cykgPT0gSUdUX0VYSVRfU1VD Q0VTUyk7DQo+ICsJCWludGVybmFsX2Fzc2VydCgwID09IHN0cmNtcChERVNDUklCRV9BTExfT1VU UFVULCBvdXQpKTsNCj4gKw0KPiArCQljbG9zZShvdXRmZCk7DQo+ICsJCWNsb3NlKGVycmZkKTsN Cj4gKwl9DQo+ICsNCj4gKwkvKiBkZXNjcmliZSBDIHVzaW5nIGEgcGF0dGVybiAqLyB7DQo+ICsJ CXN0YXRpYyBjaGFyIG91dFs0MDk2XTsNCj4gKwkJY2hhciBhcmdbXSA9ICItLWRlc2NyaWJlPUMi Ow0KPiArCQljaGFyICpmYWtlX2FyZ3ZbXSA9IHtwcm9nLCBhcmd9Ow0KPiArCQlpbnQgZmFrZV9h cmdjID0gQVJSQVlfU0laRShmYWtlX2FyZ3YpOw0KPiArDQo+ICsJCXBpZF90IHBpZCA9IGRvX2Zv cmsoZmFrZV9hcmdjLCBmYWtlX2FyZ3YsICZvdXRmZCwgJmVycmZkKTsNCj4gKw0KPiArCQlyZWFk X3dob2xlX3BpcGUob3V0ZmQsIG91dCwgc2l6ZW9mKG91dCkpOw0KPiArCQlhc3NlcnRfcGlwZV9l bXB0eShlcnJmZCk7DQo+ICsNCj4gKwkJaW50ZXJuYWxfYXNzZXJ0KF93YWl0KHBpZCwgJnN0YXR1 cykgIT0gLTEpOw0KPiArCQlpbnRlcm5hbF9hc3NlcnQoV0VYSVRTVEFUVVMoc3RhdHVzKSA9PSBJ R1RfRVhJVF9TVUNDRVNTKTsNCj4gKwkJaW50ZXJuYWxfYXNzZXJ0KDAgPT0gc3RyY21wKEpVU1Rf Q19PVVRQVVQsIG91dCkpOw0KPiArDQo+ICsJCWNsb3NlKG91dGZkKTsNCj4gKwkJY2xvc2UoZXJy ZmQpOw0KPiArCX0NCj4gKw0KPiArCS8qIGZhaWwgZGVzY3JpYmluZyB3aXRoIGEgYmFkIHBhdHRl cm4gKi8gew0KPiArCQlzdGF0aWMgY2hhciBlcnJbNDA5Nl07DQo+ICsJCWNoYXIgYXJnW10gPSAi LS1kZXNjcmliZT1aIjsNCj4gKwkJY2hhciAqZmFrZV9hcmd2W10gPSB7cHJvZywgYXJnfTsNCj4g KwkJaW50IGZha2VfYXJnYyA9IEFSUkFZX1NJWkUoZmFrZV9hcmd2KTsNCj4gKw0KPiArCQlwaWRf dCBwaWQgPSBkb19mb3JrKGZha2VfYXJnYywgZmFrZV9hcmd2LCAmb3V0ZmQsICZlcnJmZCk7DQo+ ICsNCj4gKwkJcmVhZF93aG9sZV9waXBlKGVycmZkLCBlcnIsIHNpemVvZihlcnIpKTsNCj4gKw0K PiArCQlpbnRlcm5hbF9hc3NlcnQoX3dhaXQocGlkLCAmc3RhdHVzKSAhPSAtMSk7DQo+ICsJCWlu dGVybmFsX2Fzc2VydChXRVhJVFNUQVRVUyhzdGF0dXMpID09IElHVF9FWElUX0lOVkFMSUQpOw0K PiArCQlpbnRlcm5hbF9hc3NlcnQoc3Ryc3RyKGVyciwgIlVua25vd24gc3VidGVzdDogWiIpKTsN Cj4gKw0KPiArCQljbG9zZShvdXRmZCk7DQo+ICsJCWNsb3NlKGVycmZkKTsNCj4gKwl9DQo+ICsN Cj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gZGlmZiAtLWdpdCBhL2xpYi90ZXN0cy9tZXNvbi5idWls ZCBiL2xpYi90ZXN0cy9tZXNvbi5idWlsZA0KPiBpbmRleCBiOTMwZWU2ZS4uNGQ5MDdlMzQgMTAw NjQ0DQo+IC0tLSBhL2xpYi90ZXN0cy9tZXNvbi5idWlsZA0KPiArKysgYi9saWIvdGVzdHMvbWVz b24uYnVpbGQNCj4gQEAgLTMsNiArMyw3IEBAIGxpYl90ZXN0cyA9IFsNCj4gIAknaWd0X2Nhbl9m YWlsJywNCj4gIAknaWd0X2Nhbl9mYWlsX3NpbXBsZScsDQo+ICAJJ2lndF9jb25mbGljdGluZ19h cmdzJywNCj4gKwknaWd0X2Rlc2NyaWJlJywNCj4gIAknaWd0X2VkaWQnLA0KPiAgCSdpZ3RfZXhp dF9oYW5kbGVyJywNCj4gIAknaWd0X2ZvcmsnLA0KX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9pZ3QtZGV2