From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kahola Subject: Re: [PATCH i-g-t v4] tests/kms_plane_lowres: Plane visibility after atomic modesets Date: Thu, 12 Jan 2017 12:07:51 +0200 Message-ID: <1484215671.9014.4.camel@intel.com> References: <1483102058-27965-1-git-send-email-mika.kahola@intel.com> <5e7133fe-8c30-6bce-2c36-f6b2f3264e27@linux.intel.com> Reply-To: mika.kahola@intel.com Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id C952F6EBD8 for ; Thu, 12 Jan 2017 10:07:12 +0000 (UTC) In-Reply-To: <5e7133fe-8c30-6bce-2c36-f6b2f3264e27@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Maarten Lankhorst , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCAyMDE3LTAxLTEyIGF0IDExOjAwICswMTAwLCBNYWFydGVuIExhbmtob3JzdCB3cm90 ZToKPiBPcCAzMC0xMi0xNiBvbSAxMzo0NyBzY2hyZWVmIE1pa2EgS2Fob2xhOgo+ID4gCj4gPiBU ZXN0Y2FzZSBmb3IgcGxhbmUgdmlzaWJpbGl0eSBhZnRlciBhdG9taWMgbW9kZXNldHMuIFRoZSBp ZGVhIG9mCj4gPiB0aGUgdGVzdAo+ID4gaXMgdGhlIGZvbGxvd2luZzoKPiA+IAo+ID4gwqAtIGRy YXcgYSBibHVlIHNjcmVlbiB3aXRoIGhpZ2ggcmVzb2x1dGlvbgo+ID4gwqAtIGVuYWJsZSBhIHll bGxvdyBwbGFuZSwgdmlzaWJsZSwgaW4gbG93ZXItbGVmdCBjb3JuZXIKPiA+IMKgLSBzZXQgYSBu ZXcgbG93ZXIgcmVzb2x1dGlvbiBtb2RlICgxMDI0eDc2OCkgdGhhdCBtYWtlcyBwbGFuZQo+ID4g aW52aXNpYmxlCj4gPiDCoC0gY2hlY2sgZnJvbSBkZWJ1Z2ZzICdpOTE1X2Rpc3BsYXlfaW5mbycg dGhhdCB0aGUgcGxhbmUgaXMKPiA+IGludmlzaWJsZQo+ID4gwqAtIHN3aXRjaCBiYWNrIHRvIGhp Z2hlciByZXNvbHV0aW9uIG1vZGUKPiA+IMKgLSBjaGVjayBmcm9tIGRlYnVnZnMgJ2k5MTVfZGlz cGxheV9pbmZvJyB0aGF0IHRoZSBwbGFuZSBpcyB2aXNpYmxlCj4gPiBhZ2Fpbgo+ID4gwqAtIHJl cGVhdCBudW1iZXIgb2YgaXRlcmF0aW9ucywgZGVmYXVsdCA2NAo+ID4gCj4gPiB2MjogYWxsb3cg dGVzdCB0byBiZSBydW4gb24gbm9uLUludGVsIGRyaXZlcnMgKERhbmllbCkKPiA+IMKgwqDCoMKg bW92ZWQgdGVzdCBmb3IgcGxhbmUgdmlzaWJpbGl0eSB0byBhcyBoZWxwZXIgZnVuY3Rpb24gKERh bmllbCkKPiA+IMKgwqDCoMKgbW92ZWQgZ2V0X3ZibGFuaygpIGZ1bmN0aW9uIHRvIGJlIHBhcnQg b2YgaGVscGVyIGZ1bmN0aW9ucwo+ID4gKERhbmllbCkKPiA+IMKgwqDCoMKgcmVuYW1lICd0aWxp bmcnIHBhcmFtZXRlciBhcyAnbW9kaWZpZXInIChEYW5pZWwpCj4gPiDCoMKgwqDCoHNlbGVjdCBh IG1vZGUgZnJvbSBhIGxpc3Qgc28gdGhhdCB0aGUgcGxhbmUgc2hvdWxkIGJlCj4gPiBpbnZpc2li bGUuCj4gPiDCoMKgwqDCoHVzZSBkZWZhdWx0IDEwMjR4NzY4IG1vZGUgb25seSBhcyBhIGZhbGxi YWNrIGlmIGRlY2VudCBtb2RlIGhhcwo+ID4gbm90Cj4gPiDCoMKgwqDCoGJlZW4gZm91bmQgKERh bmllbCkKPiA+IMKgwqDCoMKgYWRkIHRpbGluZyBNT0RFX05PTkUgKERhbmllbCkKPiA+IAo+ID4g djM6IGRyYXcgYXMgbWFueSBvdmVybGF5IHBsYW5lcyBhcyB0aGUgcGxhdGZvcm0gc3VwcG9ydHMg KyBjdXJzb3IKPiA+IHBsYW5lCj4gPiDCoMKgwqDCoG9uIHRvcCBvZiBlYWNoIG90aGVyIG9uIGxv d2VyLWxlZnQgY29ybmVyCj4gPiDCoMKgwqDCoHNraXAgdGhlIHRlc3QgaWYgaTkxNV9kaXNwbGF5 X2luZm8gZmlsZSBpcyBub3QgYXZhaWxhYmxlCj4gPiDCoMKgwqDCoHRlc3QgcGxhbmUgdmlzaWJp bGl0eSB3aXRoIGlndF9hc3NlcnRfcGxhbmVfdmlzaWJpbGl0eSgpCj4gPiBmdW5jdGlvbgo+ID4g wqDCoMKgwqBkcm9wIG9wdGlvbiBmb3IgbXVsdGlwbGUgdGVzdCBpdGVyYXRpb25zIChEYW5pZWwg VmV0dGVyKQo+ID4gCj4gPiB2NDogc3dpdGNoICdmb3JfZWFjaF9jb25uZWN0ZWRfb3V0cHV0KCkn IHRvCj4gPiDCoMKgwqDCoCdmb3JfZWFjaF92YWxpZF9vdXRwdXRfb25fcGlwZSgpJyAoTWFhcnRl bikKPiA+IAo+ID4gQ2M6IERhbmllbCBTdG9uZSA8ZGFuaWVsQGZvb2lzaGJhci5vcmc+Cj4gPiBD YzogTWFhcnRlbiBMYW5raG9yc3QgPG1hYXJ0ZW4ubGFua2hvcnN0QGxpbnV4LmludGVsLmNvbT4K PiA+IAo+ID4gU2lnbmVkLW9mZi1ieTogTWlrYSBLYWhvbGEgPG1pa2Eua2Fob2xhQGludGVsLmNv bT4KPiA+IC0tLQo+ID4gwqBsaWIvaWd0X2ttcy5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfCAx NjEgKysrKysrKysrKysrKysrKysrKysrKwo+ID4gwqBsaWIvaWd0X2ttcy5owqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgfMKgwqAyMyArKysrCj4gPiDCoHRlc3RzL01ha2VmaWxlLnNvdXJjZXPCoMKg wqB8wqDCoMKgMSArCj4gPiDCoHRlc3RzL2ttc19wbGFuZV9sb3dyZXMuYyB8IDM0NAo+ID4gKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiA+IMKgNCBmaWxl cyBjaGFuZ2VkLCA1MjkgaW5zZXJ0aW9ucygrKQo+ID4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgdGVz dHMva21zX3BsYW5lX2xvd3Jlcy5jCj4gPiAKPiA+IGRpZmYgLS1naXQgYS9saWIvaWd0X2ttcy5j IGIvbGliL2lndF9rbXMuYwo+ID4gaW5kZXggNTMxMmY4ZDguLmM4MjNhM2IgMTAwNjQ0Cj4gPiAt LS0gYS9saWIvaWd0X2ttcy5jCj4gPiArKysgYi9saWIvaWd0X2ttcy5jCj4gPiBAQCAtMzI0LDYg KzMyNCwyNCBAQCBjb25zdCBjaGFyICprbXN0ZXN0X3BpcGVfbmFtZShlbnVtIHBpcGUgcGlwZSkK PiA+IMKgfQo+ID4gwqAKPiA+IMKgLyoqCj4gPiArICoga21zdGVzdF9waXBlX3RvX2luZGV4Ogo+ ID4gKyAqQHBpcGU6IGRpc3BsYXkgcGlwZSBpbiBzdHJpbmcgZm9ybWF0Cj4gPiArICoKPiA+ICsg KiBSZXR1cm5zOiBpbmRleCB0byBjb3JyZXNwb25kaW5nIHBpcGUKPiA+ICsgKi8KPiA+ICtpbnQg a21zdGVzdF9waXBlX3RvX2luZGV4KGNoYXIgcGlwZSkKPiA+ICt7Cj4gPiArCWlmIChwaXBlID09 ICdBJykKPiA+ICsJCXJldHVybiAwOwo+ID4gKwllbHNlIGlmIChwaXBlID09ICdCJykKPiA+ICsJ CXJldHVybiAxOwo+ID4gKwllbHNlIGlmIChwaXBlID09ICdDJykKPiA+ICsJCXJldHVybiAyOwo+ ID4gKwllbHNlCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4g PiDCoCAqIGttc3Rlc3RfcGxhbmVfbmFtZToKPiA+IMKgICogQHBsYW5lOiBkaXNwbGF5IHBsYW5l Cj4gPiDCoCAqCj4gPiBAQCAtMTE4MSw2ICsxMTk5LDE0OSBAQCBpbnQga21zdGVzdF9nZXRfY3J0 Y19pZHgoZHJtTW9kZVJlcyAqcmVzLAo+ID4gdWludDMyX3QgY3J0Y19pZCkKPiA+IMKgCWlndF9h c3NlcnQoZmFsc2UpOwo+ID4gwqB9Cj4gPiDCoAo+ID4gK3N0YXRpYyBpbmxpbmUgdWludDMyX3Qg cGlwZV9zZWxlY3QoaW50IHBpcGUpCj4gPiArewo+ID4gKwlpZiAocGlwZSA+IDEpCj4gPiArCQly ZXR1cm4gcGlwZSA8PCBEUk1fVkJMQU5LX0hJR0hfQ1JUQ19TSElGVDsKPiA+ICsJZWxzZSBpZiAo cGlwZSA+IDApCj4gPiArCQlyZXR1cm4gRFJNX1ZCTEFOS19TRUNPTkRBUlk7Cj4gPiArCWVsc2UK PiA+ICsJCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICt1bnNpZ25lZCBpbnQga21zdGVzdF9n ZXRfdmJsYW5rKGludCBmZCwgaW50IHBpcGUsIHVuc2lnbmVkIGludAo+ID4gZmxhZ3MpCj4gPiAr ewo+ID4gKwl1bmlvbiBkcm1fd2FpdF92YmxhbmsgdmJsOwo+ID4gKwo+ID4gKwltZW1zZXQoJnZi bCwgMCwgc2l6ZW9mKHZibCkpOwo+ID4gKwl2YmwucmVxdWVzdC50eXBlID0gRFJNX1ZCTEFOS19S RUxBVElWRSB8IHBpcGVfc2VsZWN0KHBpcGUpCj4gPiB8IGZsYWdzOwo+ID4gKwlpZiAoZHJtSW9j dGwoZmQsIERSTV9JT0NUTF9XQUlUX1ZCTEFOSywgJnZibCkpCj4gPiArCQlyZXR1cm4gMDsKPiA+ ICsKPiA+ICsJcmV0dXJuIHZibC5yZXBseS5zZXF1ZW5jZTsKPiA+ICt9Cj4gPiArCj4gPiArc3Rh dGljIHZvaWQgZ2V0X3BsYW5lKGNoYXIgKnN0ciwgaW50IHR5cGUsIHN0cnVjdCBrbXN0ZXN0X3Bs YW5lCj4gPiAqcGxhbmUpCj4gPiArewo+ID4gKwlpbnQgcmV0Owo+ID4gKwljaGFyIGJ1ZlsyNTZd Owo+ID4gKwo+ID4gKwlwbGFuZS0+cGxhbmUgPSB0eXBlOwo+ID4gKwlyZXQgPSBzc2NhbmYoc3Ry ICsgMTIsICIlZCUqYyAlKnMgJVtebl1zIiwKPiA+ICsJCcKgwqDCoMKgwqAmcGxhbmUtPmlkLAo+ ID4gKwkJwqDCoMKgwqDCoGJ1Zik7Cj4gPiArCWlndF9hc3NlcnRfZXEocmV0LCAyKTsKPiA+ICsK PiA+ICsJcmV0ID0gc3NjYW5mKGJ1ZiArIDksICIlNGQlKmMlNGQlKmMiLCAmcGxhbmUtPnBvc194 LAo+ID4gJnBsYW5lLT5wb3NfeSk7Cj4gPiArCWlndF9hc3NlcnRfZXEocmV0LCAyKTsKPiA+ICsK PiA+ICsJcmV0ID0gc3NjYW5mKGJ1ZiArIDMwLCAiJTRkJSpjJTRkJSpjIiwgJnBsYW5lLT53aWR0 aCwKPiA+ICZwbGFuZS0+aGVpZ2h0KTsKPiA+ICsJaWd0X2Fzc2VydF9lcShyZXQsIDIpOwo+ID4g K30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IHBhcnNlX3BsYW5lcyhGSUxFICpmaWQsIHN0cnVjdCBr bXN0ZXN0X3BsYW5lICpwbGFuZSkKPiA+ICt7Cj4gPiArCWNoYXIgdG1wWzI1Nl07Cj4gPiArCWlu dCBucGxhbmVzOwo+ID4gKwlpbnQgb3ZsOwo+ID4gKwo+ID4gKwlvdmwgPSAwOwo+ID4gKwlucGxh bmVzID0gMDsKPiA+ICsJd2hpbGUgKGZnZXRzKHRtcCwgMjU2LCBmaWQpICE9IE5VTEwpIHsKPiA+ ICsJCWlndF9hc3NlcnRfbmVxKG5wbGFuZXMsIElHVF9NQVhfUExBTkVTKTsKPiA+ICsJCWlmIChz dHJzdHIodG1wLCAidHlwZT1QUkkiKSAhPSBOVUxMKSB7Cj4gPiArCQkJZ2V0X3BsYW5lKHRtcCwg SUdUX1BMQU5FX1BSSU1BUlksCj4gPiAmcGxhbmVbbnBsYW5lc10pOwo+ID4gKwkJCW5wbGFuZXMr KzsKPiA+ICsJCX0gZWxzZSBpZiAoc3Ryc3RyKHRtcCwgInR5cGU9T1ZMIikgIT0gTlVMTCkgewo+ ID4gKwkJCWdldF9wbGFuZSh0bXAsIElHVF9QTEFORV8yICsgb3ZsLAo+ID4gJnBsYW5lW25wbGFu ZXNdKTsKPiA+ICsJCQlvdmwrKzsKPiA+ICsJCQlucGxhbmVzKys7Cj4gPiArCQl9IGVsc2UgaWYg KHN0cnN0cih0bXAsICJ0eXBlPUNVUiIpICE9IE5VTEwpIHsKPiA+ICsJCQlnZXRfcGxhbmUodG1w LCBJR1RfUExBTkVfQ1VSU09SLAo+ID4gJnBsYW5lW25wbGFuZXNdKTsKPiA+ICsJCQlucGxhbmVz Kys7Cj4gPiArCQkJYnJlYWs7Cj4gPiArCQl9Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0dXJuIG5w bGFuZXM7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIHBhcnNlX2NydGMoY2hhciAqaW5m bywgc3RydWN0IGttc3Rlc3RfY3J0YyAqY3J0YykKPiA+ICt7Cj4gPiArCWNoYXIgYnVmWzI1Nl07 Cj4gPiArCWludCByZXQ7Cj4gPiArCWNoYXIgcGlwZTsKPiA+ICsKPiA+ICsJcmV0ID0gc3NjYW5m KGluZm8gKyA0LCAiJWQlKmMgJSpzICVjJSpjICUqcyAlcyUqYyIsCj4gPiArCQnCoMKgwqDCoMKg JmNydGMtPmlkLCAmcGlwZSwgYnVmKTsKPiA+ICsJaWd0X2Fzc2VydF9lcShyZXQsIDMpOwo+ID4g Kwo+ID4gKwljcnRjLT5waXBlID0ga21zdGVzdF9waXBlX3RvX2luZGV4KHBpcGUpOwo+ID4gKwlp Z3RfYXNzZXJ0KGNydGMtPnBpcGUgPj0gMCk7Cj4gPiArCj4gPiArCXJldCA9IHNzY2FuZihidWYg KyA2LCAiJWQlKmMlZCUqYyIsCj4gPiArCQnCoMKgwqDCoMKgJmNydGMtPndpZHRoLCAmY3J0Yy0+ aGVpZ2h0KTsKPiA+ICsJaWd0X2Fzc2VydF9lcShyZXQsIDIpOwo+ID4gK30KPiA+ICsKPiA+ICt2 b2lkIGttc3Rlc3RfZ2V0X2NydGMoZW51bSBwaXBlIHBpcGUsIHN0cnVjdCBrbXN0ZXN0X2NydGMg KmNydGMpCj4gPiArewo+ID4gKwljaGFyIHRtcFsyNTZdOwo+ID4gKwlGSUxFICpmaWQ7Cj4gPiAr CWNvbnN0IGNoYXIgKm1vZGUgPSAiciI7Cj4gPiArCWludCBuY3J0YzsKPiA+ICsJaW50IGxpbmU7 Cj4gPiArCj4gPiArCWZpZCA9IGlndF9kZWJ1Z2ZzX2ZvcGVuKCJpOTE1X2Rpc3BsYXlfaW5mbyIs IG1vZGUpOwo+ID4gKwo+ID4gKwlpZ3Rfc2tpcF9vbihmaWQgPT0gTlVMTCk7Cj4gPiArCj4gPiAr CW5jcnRjID0gMDsKPiA+ICsJbGluZSA9IDA7Cj4gPiArCXdoaWxlIChmZ2V0cyh0bXAsIDI1Niwg ZmlkKSAhPSBOVUxMKSB7Cj4gPiArCQlpZiAoKHN0cnN0cih0bXAsICJDUlRDIikgIT0gTlVMTCkg JiYgKGxpbmUgPiAwKSkgewo+ID4gKwkJCWlmIChzdHJzdHIodG1wLCAiYWN0aXZlPXllcyIpICE9 IE5VTEwpIHsKPiA+ICsJCQkJY3J0Yy0+YWN0aXZlID0gdHJ1ZTsKPiA+ICsJCQkJcGFyc2VfY3J0 Yyh0bXAsIGNydGMpOwo+ID4gKwkJCQljcnRjLT5ucGxhbmVzID0gcGFyc2VfcGxhbmVzKGZpZCwK PiA+IGNydGMtPnBsYW5lKTsKPiA+ICsKPiA+ICsJCQkJaWYgKGNydGMtPnBpcGUgIT0gcGlwZSkK PiA+ICsJCQkJCWNydGMgPSBOVUxMOwo+ID4gKwkJCQllbHNlCj4gPiArCQkJCQluY3J0YysrOwo+ ID4gKwkJCX0KPiA+ICsJCX0KPiA+ICsKPiA+ICsJCWxpbmUrKzsKPiA+ICsJfQo+ID4gKwo+ID4g KwlmY2xvc2UoZmlkKTsKPiA+ICsKPiA+ICsJaWd0X3NraXBfb24obmNydGMgPT0gMCk7Cj4gPiAr fQo+ID4gKwo+ID4gK3ZvaWQgaWd0X2Fzc2VydF9wbGFuZV92aXNpYmxlKGVudW0gcGlwZSBwaXBl LCBib29sIHZpc2liaWxpdHkpCj4gPiArewo+ID4gKwlzdHJ1Y3Qga21zdGVzdF9jcnRjIGNydGM7 Cj4gPiArCWludCBpOwo+ID4gKwlib29sIHZpc2libGU7Cj4gPiArCj4gPiArCWttc3Rlc3RfZ2V0 X2NydGMocGlwZSwgJmNydGMpOwo+ID4gKwo+ID4gKwl2aXNpYmxlID0gdHJ1ZTsKPiA+ICsJZm9y IChpID0gSUdUX1BMQU5FXzI7IGkgPCBjcnRjLm5wbGFuZXM7IGkrKykgewo+ID4gKwkJaWYgKGNy dGMucGxhbmVbaV0ucG9zX3ggPiBjcnRjLndpZHRoKSB7Cj4gPiArCQkJdmlzaWJsZSA9IGZhbHNl Owo+ID4gKwkJCWJyZWFrOwo+ID4gKwkJfSBlbHNlIGlmIChjcnRjLnBsYW5lW2ldLnBvc195ID4g Y3J0Yy5oZWlnaHQpIHsKPiA+ICsJCQl2aXNpYmxlID0gZmFsc2U7Cj4gPiArCQkJYnJlYWs7Cj4g PiArCQl9Cj4gPiArCX0KPiA+ICsKPiA+ICsJaWd0X2Fzc2VydF9lcSh2aXNpYmxlLCB2aXNpYmls aXR5KTsKPiA+ICt9Cj4gPiArCj4gPiDCoC8qCj4gPiDCoCAqIEEgc21hbGwgbW9kZXNldCBBUEkK PiA+IMKgICovCj4gPiBkaWZmIC0tZ2l0IGEvbGliL2lndF9rbXMuaCBiL2xpYi9pZ3Rfa21zLmgK PiA+IGluZGV4IDUyMzRmNmMuLjJkYTRhZDkgMTAwNjQ0Cj4gPiAtLS0gYS9saWIvaWd0X2ttcy5o Cj4gPiArKysgYi9saWIvaWd0X2ttcy5oCj4gPiBAQCAtNTcsNiArNTcsNyBAQCBlbnVtIHBpcGUg ewo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgSTkxNV9NQVhfUElQRVMKPiA+IMKgfTsKPiA+IMKgY29u c3QgY2hhciAqa21zdGVzdF9waXBlX25hbWUoZW51bSBwaXBlIHBpcGUpOwo+ID4gK2ludCBrbXN0 ZXN0X3BpcGVfdG9faW5kZXgoY2hhciBwaXBlKTsKPiA+IMKgCj4gPiDCoC8qIFdlIG5hbWVzcGFj ZSB0aGlzIGVudW0gdG8gbm90IGNvbmZsaWN0IHdpdGggdGhlIEFuZHJvaWQKPiA+IGk5MTVfZHJt LmggKi8KPiA+IMKgZW51bSBpZ3RfcGxhbmUgewo+ID4gQEAgLTEzMiw2ICsxMzMsMjUgQEAgc3Ry dWN0IGttc3Rlc3RfY29ubmVjdG9yX2NvbmZpZyB7Cj4gPiDCoAl1bnNpZ25lZCB2YWxpZF9jcnRj X2lkeF9tYXNrOwo+ID4gwqB9Owo+ID4gwqAKPiA+ICtzdHJ1Y3Qga21zdGVzdF9wbGFuZSB7Cj4g PiArCWludCBpZDsKPiA+ICsJaW50IHBsYW5lOwo+ID4gKwlpbnQgcG9zX3g7Cj4gPiArCWludCBw b3NfeTsKPiA+ICsJaW50IHdpZHRoOwo+ID4gKwlpbnQgaGVpZ2h0Owo+ID4gK307Cj4gPiArCj4g PiArc3RydWN0IGttc3Rlc3RfY3J0YyB7Cj4gPiArCWludCBpZDsKPiA+ICsJaW50IHBpcGU7Cj4g PiArCWJvb2wgYWN0aXZlOwo+ID4gKwlpbnQgd2lkdGg7Cj4gPiArCWludCBoZWlnaHQ7Cj4gPiAr CWludCBucGxhbmVzOwo+ID4gKwlzdHJ1Y3Qga21zdGVzdF9wbGFuZSBwbGFuZVtJR1RfTUFYX1BM QU5FU107Cj4gPiArfTsKPiA+ICsKPiA+IMKgLyoqCj4gPiDCoCAqIGttc3Rlc3RfZm9yY2VfY29u bmVjdG9yX3N0YXRlOgo+ID4gwqAgKiBARk9SQ0VfQ09OTkVDVE9SX1VOU1BFQ0lGSUVEOiBVbnNw ZWNpZmllZAo+ID4gQEAgLTE3Nyw2ICsxOTcsOSBAQCB1aW50MzJfdCBrbXN0ZXN0X2R1bWJfY3Jl YXRlKGludCBmZCwgaW50IHdpZHRoLAo+ID4gaW50IGhlaWdodCwgaW50IGJwcCwKPiA+IMKgCj4g PiDCoHZvaWQgKmttc3Rlc3RfZHVtYl9tYXBfYnVmZmVyKGludCBmZCwgdWludDMyX3QgaGFuZGxl LCB1aW50NjRfdAo+ID4gc2l6ZSwKPiA+IMKgCQkJwqDCoMKgwqDCoMKgdW5zaWduZWQgcHJvdCk7 Cj4gPiArdW5zaWduZWQgaW50IGttc3Rlc3RfZ2V0X3ZibGFuayhpbnQgZmQsIGludCBwaXBlLCB1 bnNpZ25lZCBpbnQKPiA+IGZsYWdzKTsKPiA+ICt2b2lkIGttc3Rlc3RfZ2V0X2NydGMoZW51bSBw aXBlIHBpcGUsIHN0cnVjdCBrbXN0ZXN0X2NydGMgKmNydGMpOwo+ID4gK3ZvaWQgaWd0X2Fzc2Vy dF9wbGFuZV92aXNpYmxlKGVudW0gcGlwZSBwaXBlLCBib29sIHZpc2liaWxpdHkpOwo+ID4gwqAK PiA+IMKgLyoKPiA+IMKgICogQSBzbWFsbCBtb2Rlc2V0IEFQSQo+ID4gZGlmZiAtLWdpdCBhL3Rl c3RzL01ha2VmaWxlLnNvdXJjZXMgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4gPiBpbmRleCBm NmUwOGQ2Li42MzE2ZWE2IDEwMDY0NAo+ID4gLS0tIGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+ ID4gKysrIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+ID4gQEAgLTExMSw2ICsxMTEsNyBAQCBU RVNUU19wcm9nc19NID0gXAo+ID4gwqAJa21zX3BpcGVfY3JjX2Jhc2ljIFwKPiA+IMKgCWttc19w bGFuZSBcCj4gPiDCoAlrbXNfcGxhbmVfbXVsdGlwbGUgXAo+ID4gKwlrbXNfcGxhbmVfbG93cmVz IFwKPiA+IMKgCWttc19wcm9wZXJ0aWVzIFwKPiA+IMKgCWttc19wc3Jfc2lua19jcmMgXAo+ID4g wqAJa21zX3JlbmRlciBcCj4gPiBkaWZmIC0tZ2l0IGEvdGVzdHMva21zX3BsYW5lX2xvd3Jlcy5j IGIvdGVzdHMva21zX3BsYW5lX2xvd3Jlcy5jCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4g aW5kZXggMDAwMDAwMC4uMjFmODI4Mgo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvdGVzdHMv a21zX3BsYW5lX2xvd3Jlcy5jCj4gPiBAQCAtMCwwICsxLDM0NCBAQAo+ID4gKy8qCj4gPiArICog Q29weXJpZ2h0IMKpIDIwMTYgSW50ZWwgQ29ycG9yYXRpb24KPiA+ICsgKgo+ID4gKyAqIFBlcm1p c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCj4g PiBvYnRhaW5pbmcgYQo+ID4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRl ZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKPiA+ICJTb2Z0d2FyZSIpLAo+ID4gKyAqIHRvIGRl YWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0 Cj4gPiBsaW1pdGF0aW9uCj4gPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwg bWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsCj4gPiBzdWJsaWNlbnNlLAo+ID4gKyAqIGFuZC9v ciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0bwo+ ID4gd2hvbSB0aGUKPiA+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1Ympl Y3QgdG8gdGhlIGZvbGxvd2luZwo+ID4gY29uZGl0aW9uczoKPiA+ICsgKgo+ID4gKyAqIFRoZSBh Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlCj4gPiAoaW5j bHVkaW5nIHRoZSBuZXh0Cj4gPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBh bGwgY29waWVzIG9yIHN1YnN0YW50aWFsCj4gPiBwb3J0aW9ucyBvZiB0aGUKPiA+ICsgKiBTb2Z0 d2FyZS4KPiA+ICsgKgo+ID4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBX SVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAo+ID4gRVhQUkVTUyBPUgo+ID4gKyAqIElNUExJ RUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKPiA+IE1F UkNIQU5UQUJJTElUWSwKPiA+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB TkQgTk9OSU5GUklOR0VNRU5ULsKgwqBJTiBOTwo+ID4gRVZFTlQgU0hBTEwKPiA+ICsgKiBUSEUg QVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKPiA+ IERBTUFHRVMgT1IgT1RIRVIKPiA+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9O IE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKPiA+IEFSSVNJTkcKPiA+ICsgKiBGUk9N LCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9S Cj4gPiBPVEhFUiBERUFMSU5HUwo+ID4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPiA+ICsgKgo+ID4g KyAqLwo+ID4gKwo+ID4gKyNpbmNsdWRlICJpZ3QuaCIKPiA+ICsjaW5jbHVkZSAiZHJtdGVzdC5o Igo+ID4gKyNpbmNsdWRlIDxlcnJuby5oPgo+ID4gKyNpbmNsdWRlIDxzdGRib29sLmg+Cj4gPiAr I2luY2x1ZGUgPHN0ZGlvLmg+Cj4gPiArI2luY2x1ZGUgPHN0cmluZy5oPgo+ID4gKyNpbmNsdWRl IDx0aW1lLmg+Cj4gPiArCj4gPiArSUdUX1RFU1RfREVTQ1JJUFRJT04oIlRlc3QgYXRvbWljIG1v ZGUgc2V0dGluZyB3aXRoIGEgcGxhbmUgYnkKPiA+IHN3aXRjaGluZyBiZXR3ZWVuIGhpZ2ggYW5k IGxvdyByZXNvbHV0aW9ucyIpOwo+ID4gKwo+ID4gKyNkZWZpbmUgTUFYX0NSQ1PCoMKgwqDCoMKg wqDCoMKgwqDCoDEKPiA+ICsjZGVmaW5lIFNJWkXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAyNTYK PiA+ICsjZGVmaW5lIExPT1BfRk9SRVZFUsKgwqDCoMKgwqAtMQo+ID4gKwo+ID4gK3R5cGVkZWYg c3RydWN0IHsKPiA+ICsJaW50IGRybV9mZDsKPiA+ICsJaWd0X2Rpc3BsYXlfdCBkaXNwbGF5Owo+ ID4gKwlpZ3RfcGlwZV9jcmNfdCAqcGlwZV9jcmM7Cj4gPiArCWlndF9wbGFuZV90ICpwbGFuZVtJ R1RfTUFYX1BMQU5FU107Cj4gPiArCXN0cnVjdCBpZ3RfZmIgZmJbSUdUX01BWF9QTEFORVNdOwo+ ID4gK30gZGF0YV90Owo+ID4gKwo+ID4gK3N0YXRpYyBkcm1Nb2RlTW9kZUluZm8KPiA+ICtnZXRf bG93cmVzX21vZGUoaW50IGRybWZkLCBkcm1Nb2RlTW9kZUluZm8gKm1vZGVfZGVmYXVsdCkKPiA+ ICt7Cj4gPiArCWRybU1vZGVSZXMgKm1vZGVfcmVzb3VyY2VzID0gZHJtTW9kZUdldFJlc291cmNl cyhkcm1mZCk7Cj4gPiArCWRybU1vZGVNb2RlSW5mbyBtb2RlOwo+ID4gKwlkcm1Nb2RlTW9kZUlu Zm8gc3RkXzEwMjRfbW9kZSA9IHsKPiA+ICsJCS5jbG9jayA9IDY1MDAwLAo+ID4gKwkJLmhkaXNw bGF5ID0gMTAyNCwKPiA+ICsJCS5oc3luY19zdGFydCA9IDEwNDgsCj4gPiArCQkuaHN5bmNfZW5k ID0gMTE4NCwKPiA+ICsJCS5odG90YWwgPSAxMzQ0LAo+ID4gKwkJLmhza2V3ID0gMCwKPiA+ICsJ CS52ZGlzcGxheSA9IDc2OCwKPiA+ICsJCS52c3luY19zdGFydCA9IDc3MSwKPiA+ICsJCS52c3lu Y19lbmQgPSA3NzcsCj4gPiArCQkudnRvdGFsID0gODA2LAo+ID4gKwkJLnZzY2FuID0gMCwKPiA+ ICsJCS52cmVmcmVzaCA9IDYwLAo+ID4gKwkJLmZsYWdzID0gMHhBLAo+ID4gKwkJLnR5cGUgPSAw eDQwLAo+ID4gKwkJLm5hbWUgPSAiQ3VzdG9tIDEwMjR4NzY4IiwKPiA+ICsJfTsKPiA+ICsJYm9v bCBmb3VuZDsKPiA+ICsJaW50IGxpbWl0ID0gbW9kZV9kZWZhdWx0LT52ZGlzcGxheS1TSVpFOwo+ ID4gKwlpbnQgaSwgajsKPiA+ICsKPiA+ICsJaWYgKCFtb2RlX3Jlc291cmNlcykgewo+ID4gKwkJ aWd0X3dhcm4oImRybU1vZGVHZXRSZXNvdXJjZXMgZmFpbGVkOiAlc1xuIiwKPiA+IHN0cmVycm9y KGVycm5vKSk7Cj4gPiArCQlyZXR1cm4gc3RkXzEwMjRfbW9kZTsKPiA+ICsJfQo+ID4gKwo+ID4g Kwlmb3VuZCA9IGZhbHNlOwo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgbW9kZV9yZXNvdXJjZXMtPmNv dW50X2Nvbm5lY3RvcnM7IGkrKykgewo+ID4gKwkJZHJtTW9kZUNvbm5lY3RvciAqY29ubmVjdG9y Owo+ID4gKwo+ID4gKwkJY29ubmVjdG9yID0gZHJtTW9kZUdldENvbm5lY3RvckN1cnJlbnQoZHJt ZmQsCj4gPiArCQkJCQkJwqDCoMKgwqDCoMKgwqBtb2RlX3Jlc291cgo+ID4gY2VzLT5jb25uZWN0 b3JzW2ldKTsKPiA+ICsJCWlmICghY29ubmVjdG9yKSB7Cj4gPiArCQkJaWd0X3dhcm4oImNvdWxk IG5vdCBnZXQgY29ubmVjdG9yICVpOgo+ID4gJXNcbiIsCj4gPiArCQkJCcKgbW9kZV9yZXNvdXJj ZXMtPmNvbm5lY3RvcnNbaV0sCj4gPiBzdHJlcnJvcihlcnJubykpOwo+ID4gKwkJCWNvbnRpbnVl Owo+ID4gKwkJfQo+ID4gKwo+ID4gKwkJaWYgKCFjb25uZWN0b3ItPmNvdW50X21vZGVzKQo+ID4g KwkJCWNvbnRpbnVlOwo+ID4gKwo+ID4gKwkJZm9yIChqID0gMDsgaiA8IGNvbm5lY3Rvci0+Y291 bnRfbW9kZXM7IGorKykgewo+ID4gKwkJCW1vZGUgPSBjb25uZWN0b3ItPm1vZGVzW2pdOwo+ID4g KwkJCWlmIChtb2RlLnZkaXNwbGF5IDwgbGltaXQpIHsKPiA+ICsJCQkJZm91bmQgPSB0cnVlOwo+ ID4gKwkJCQlicmVhazsKPiA+ICsJCQl9Cj4gPiArCQl9Cj4gPiArCj4gPiArCQlkcm1Nb2RlRnJl ZUNvbm5lY3Rvcihjb25uZWN0b3IpOwo+ID4gKwl9Cj4gPiArCj4gPiArCWRybU1vZGVGcmVlUmVz b3VyY2VzKG1vZGVfcmVzb3VyY2VzKTsKPiA+ICsKPiA+ICsJaWYgKCFmb3VuZCkKPiA+ICsJCXJl dHVybiBzdGRfMTAyNF9tb2RlOwo+ID4gKwo+ID4gKwlyZXR1cm4gbW9kZTsKPiA+ICt9Cj4gPiAr Cj4gPiArc3RhdGljIHZvaWQKPiA+ICt0ZXN0X2luaXQoZGF0YV90ICpkYXRhLCBlbnVtIHBpcGUg cGlwZSkKPiA+ICt7Cj4gPiArCWRhdGEtPnBpcGVfY3JjID0gaWd0X3BpcGVfY3JjX25ldyhwaXBl LAo+ID4gSU5URUxfUElQRV9DUkNfU09VUkNFX0FVVE8pOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0 aWMgdm9pZAo+ID4gK3Rlc3RfZmluaShkYXRhX3QgKmRhdGEsIGlndF9vdXRwdXRfdCAqb3V0cHV0 KQo+ID4gK3sKPiA+ICsJLyogcmVzdG9yZSBvcmlnaW5hbCBtb2RlICovCj4gPiArCWlndF9vdXRw dXRfb3ZlcnJpZGVfbW9kZShvdXRwdXQsIE5VTEwpOwo+ID4gKwo+ID4gKwlmb3IgKGludCBpID0g MDsgaSA8IDI7IGkrKykKPiA+ICsJCWlndF9wbGFuZV9zZXRfZmIoZGF0YS0+cGxhbmVbaV0sIE5V TEwpOwo+ID4gKwo+ID4gKwkvKiByZXNldCB0aGUgY29uc3RyYWludCBvbiB0aGUgcGlwZSAqLwo+ ID4gKwlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgUElQRV9BTlkpOwo+ID4gKwo+ID4gKwlp Z3RfcGlwZV9jcmNfZnJlZShkYXRhLT5waXBlX2NyYyk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRp YyBpbnQKPiA+ICtkaXNwbGF5X2NvbW1pdF9tb2RlKGRhdGFfdCAqZGF0YSwgZW51bSBwaXBlIHBp cGUsIGludCBmbGFncywKPiA+IGlndF9jcmNfdCAqY3JjKQo+ID4gK3sKPiA+ICsJY2hhciBidWZb MjU2XTsKPiA+ICsJc3RydWN0IGRybV9ldmVudCAqZSA9ICh2b2lkICopYnVmOwo+ID4gKwl1bnNp Z25lZCBpbnQgdmJsYW5rX3N0YXJ0LCB2Ymxhbmtfc3RvcDsKPiA+ICsJaW50IG4sIHJldDsKPiA+ ICsKPiA+ICsJdmJsYW5rX3N0YXJ0ID0ga21zdGVzdF9nZXRfdmJsYW5rKGRhdGEtPmRpc3BsYXku ZHJtX2ZkLAo+ID4gcGlwZSwKPiA+ICsJCQkJCcKgwqBEUk1fVkJMQU5LX05FWFRPTk1JU1MpOwo+ ID4gKwo+ID4gKwlyZXQgPSBpZ3RfZGlzcGxheV90cnlfY29tbWl0X2F0b21pYygmZGF0YS0+ZGlz cGxheSwKPiA+ICsJCQkJCcKgwqDCoMKgZmxhZ3MsCj4gPiArCQkJCQnCoMKgwqDCoE5VTEwpOwo+ ID4gKwlpZ3Rfc2tpcF9vbihyZXQgIT0gMCk7Cj4gPiArCj4gPiArCWlndF9zZXRfdGltZW91dCgx LCAiU3R1Y2sgb24gcGFnZSBmbGlwIik7Cj4gPiArCXJldCA9IHJlYWQoZGF0YS0+ZGlzcGxheS5k cm1fZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwo+ID4gKwlpZ3RfYXNzZXJ0KHJldCA+PSAwKTsKPiA+ ICsKPiA+ICsJdmJsYW5rX3N0b3AgPSBrbXN0ZXN0X2dldF92YmxhbmsoZGF0YS0+ZGlzcGxheS5k cm1fZmQsCj4gPiBwaXBlLCAwKTsKPiA+ICsJaWd0X2Fzc2VydF9lcShlLT50eXBlLCBEUk1fRVZF TlRfRkxJUF9DT01QTEVURSk7Cj4gPiArCWlndF9yZXNldF90aW1lb3V0KCk7Cj4gPiArCj4gPiAr CW4gPSBpZ3RfcGlwZV9jcmNfZ2V0X2NyY3MoZGF0YS0+cGlwZV9jcmMsIHZibGFua19zdG9wIC0K PiA+IHZibGFua19zdGFydCwKPiA+ICsJCQkJwqDCoCZjcmMpOwo+ID4gKwlpZ3RfYXNzZXJ0X2Vx KG4sIHZibGFua19zdG9wIC0gdmJsYW5rX3N0YXJ0KTsKPiA+ICsKPiA+ICsJcmV0dXJuIG47Cj4g PiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkCj4gPiArY2hlY2tfbW9kZShkcm1Nb2RlTW9kZUlu Zm8gKm1vZGUxLCBkcm1Nb2RlTW9kZUluZm8gKm1vZGUyKQo+ID4gK3sKPiA+ICsJaWd0X2Fzc2Vy dF9lcShtb2RlMS0+aGRpc3BsYXksIG1vZGUyLT5oZGlzcGxheSk7Cj4gPiArCWlndF9hc3NlcnRf ZXEobW9kZTEtPnZkaXNwbGF5LCBtb2RlMi0+dmRpc3BsYXkpOwo+ID4gKwlpZ3RfYXNzZXJ0X2Vx KG1vZGUxLT52cmVmcmVzaCwgbW9kZTItPnZyZWZyZXNoKTsKPiA+ICt9Cj4gPiArCj4gPiArc3Rh dGljIGRybU1vZGVNb2RlSW5mbyAqCj4gPiArdGVzdF9zZXR1cChkYXRhX3QgKmRhdGEsIGVudW0g cGlwZSBwaXBlLCB1aW50NjRfdCBtb2RpZmllciwgaW50Cj4gPiBmbGFncywKPiA+ICsJwqDCoMKg aWd0X291dHB1dF90ICpvdXRwdXQpCj4gPiArewo+ID4gKwlzdHJ1Y3Qga21zdGVzdF9jcnRjIGNy dGM7Cj4gPiArCWRybU1vZGVNb2RlSW5mbyAqbW9kZTsKPiA+ICsJaW50IHNpemU7Cj4gPiArCWlu dCBpLCB4LCB5Owo+ID4gKwo+ID4gKwlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgcGlwZSk7 Cj4gPiArCj4gPiArCWttc3Rlc3RfZ2V0X2NydGMocGlwZSwgJmNydGMpOwo+ID4gKwlpZ3Rfc2tp cF9vbihjcnRjLm5wbGFuZXMgPiBkYXRhLQo+ID4gPmRpc3BsYXkucGlwZXNbcGlwZV0ubl9wbGFu ZXMpOwo+ID4gKwlpZ3Rfc2tpcF9vbihjcnRjLm5wbGFuZXMgPT0gMCk7Cj4gPiArCj4gPiArCWZv ciAoaSA9IDA7IGkgPCBjcnRjLm5wbGFuZXM7IGkrKykKPiA+ICsJCWRhdGEtPnBsYW5lW2ldID0g aWd0X291dHB1dF9nZXRfcGxhbmUob3V0cHV0LAo+ID4gY3J0Yy5wbGFuZVtpXS5wbGFuZSk7Cj4g PiArCj4gPiArCW1vZGUgPSBpZ3Rfb3V0cHV0X2dldF9tb2RlKG91dHB1dCk7Cj4gPiArCj4gPiAr CWlndF9jcmVhdGVfY29sb3JfZmIoZGF0YS0+ZHJtX2ZkLCBtb2RlLT5oZGlzcGxheSwgbW9kZS0K PiA+ID52ZGlzcGxheSwKPiA+ICsJCQnCoMKgwqDCoERSTV9GT1JNQVRfWFJHQjg4ODgsCj4gPiAr CQkJwqDCoMKgwqBtb2RpZmllciwKPiA+ICsJCQnCoMKgwqDCoDAuMCwgMC4wLCAxLjAsCj4gPiAr CQkJwqDCoMKgwqAmZGF0YS0+ZmJbMF0pOwo+ID4gKwo+ID4gKwlpZ3RfcGxhbmVfc2V0X2ZiKGRh dGEtPnBsYW5lWzBdLCAmZGF0YS0+ZmJbMF0pOwo+ID4gKwo+ID4gKwkvKiB5ZWxsb3cgc3ByaXRl IHBsYW5lIGluIGxvd2VyIGxlZnQgY29ybmVyICovCj4gPiArCWZvciAoaSA9IElHVF9QTEFORV8y OyBpIDwgY3J0Yy5ucGxhbmVzOyBpKyspIHsKPiA+ICsJCWlmIChkYXRhLT5wbGFuZVtpXS0+aXNf Y3Vyc29yKQo+ID4gKwkJCXNpemUgPSA2NDsKPiA+ICsJCWVsc2UKPiA+ICsJCQlzaXplID0gU0la RTsKPiA+ICsKPiA+ICsJCXggPSAwOwo+ID4gKwkJeSA9IG1vZGUtPnZkaXNwbGF5IC0gc2l6ZTsK PiA+ICsKPiA+ICsJCWlndF9jcmVhdGVfY29sb3JfZmIoZGF0YS0+ZHJtX2ZkLAo+ID4gKwkJCQnC oMKgwqDCoHNpemUsIHNpemUsCj4gPiArCQkJCcKgwqDCoMKgZGF0YS0+cGxhbmVbaV0tPmlzX2N1 cnNvciA/Cj4gPiBEUk1fRk9STUFUX0FSR0I4ODg4IDogRFJNX0ZPUk1BVF9YUkdCODg4OCwKPiA+ ICsJCQkJwqDCoMKgwqBkYXRhLT5wbGFuZVtpXS0+aXNfY3Vyc29yID8KPiA+IExPQ0FMX0RSTV9G T1JNQVRfTU9EX05PTkUgOiBtb2RpZmllciwKPiA+ICsJCQkJwqDCoMKgwqAxLjAsIDEuMCwgMC4w LAo+ID4gKwkJCQnCoMKgwqDCoCZkYXRhLT5mYltpXSk7Cj4gPiArCj4gPiArCQlpZ3RfcGxhbmVf c2V0X3Bvc2l0aW9uKGRhdGEtPnBsYW5lW2ldLCB4LCB5KTsKPiA+ICsJCWlndF9wbGFuZV9zZXRf ZmIoZGF0YS0+cGxhbmVbaV0sICZkYXRhLT5mYltpXSk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0 dXJuIG1vZGU7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkCj4gPiArdGVzdF9wbGFuZV9w b3NpdGlvbl93aXRoX291dHB1dChkYXRhX3QgKmRhdGEsIGVudW0gcGlwZSBwaXBlLAo+ID4gKwkJ CQlpZ3Rfb3V0cHV0X3QgKm91dHB1dCwgdWludDY0X3QKPiA+IG1vZGlmaWVyKQo+ID4gK3sKPiA+ ICsJaWd0X2NyY190ICpjcmNfaGlyZXMxLCAqY3JjX2hpcmVzMjsKPiA+ICsJaWd0X2NyY190ICpj cmNfbG93cmVzOwo+ID4gKwlkcm1Nb2RlTW9kZUluZm8gbW9kZV9sb3dyZXM7Cj4gPiArCWRybU1v ZGVNb2RlSW5mbyAqbW9kZTEsICptb2RlMiwgKm1vZGUzOwo+ID4gKwlpbnQgcmV0LCBuOwo+ID4g KwlpbnQgZmxhZ3MgPSBEUk1fTU9ERV9QQUdFX0ZMSVBfRVZFTlQgfAo+ID4gRFJNX01PREVfQVRP TUlDX0FMTE9XX01PREVTRVQ7Cj4gPiArCj4gPiArCWlndF9pbmZvKCJUZXN0aW5nIGNvbm5lY3Rv ciAlcyB1c2luZyBwaXBlICVzXG4iLAo+ID4gKwkJwqBpZ3Rfb3V0cHV0X25hbWUob3V0cHV0KSwK PiA+IGttc3Rlc3RfcGlwZV9uYW1lKHBpcGUpKTsKPiA+ICsKPiA+ICsJdGVzdF9pbml0KGRhdGEs IHBpcGUpOwo+ID4gKwo+ID4gKwltb2RlMSA9IHRlc3Rfc2V0dXAoZGF0YSwgcGlwZSwgbW9kaWZp ZXIsIGZsYWdzLCBvdXRwdXQpOwo+ID4gKwo+ID4gKwltb2RlX2xvd3JlcyA9IGdldF9sb3dyZXNf bW9kZShkYXRhLT5kcm1fZmQsIG1vZGUxKTsKPiA+ICsKPiA+ICsJaWd0X3BpcGVfY3JjX3N0YXJ0 KGRhdGEtPnBpcGVfY3JjKTsKPiA+ICsJcmV0ID0gaWd0X2Rpc3BsYXlfdHJ5X2NvbW1pdDIoJmRh dGEtPmRpc3BsYXksCj4gPiBDT01NSVRfQVRPTUlDKTsKPiA+ICsJaWd0X3NraXBfb24ocmV0ICE9 IDApOwo+ID4gKwo+ID4gKwluID0gaWd0X3BpcGVfY3JjX2dldF9jcmNzKGRhdGEtPnBpcGVfY3Jj LCAxLCAmY3JjX2hpcmVzMSk7Cj4gPiArCWlndF9hc3NlcnRfZXEoMSwgbik7Cj4gPiArCj4gPiAr CWlndF9hc3NlcnRfcGxhbmVfdmlzaWJsZShwaXBlLCB0cnVlKTsKPiA+ICsKPiA+ICsJLyogc3dp dGNoIHRvIGxvd2VyIHJlc29sdXRpb24gKi8KPiA+ICsJaWd0X291dHB1dF9vdmVycmlkZV9tb2Rl KG91dHB1dCwgJm1vZGVfbG93cmVzKTsKPiA+ICsJaWd0X291dHB1dF9zZXRfcGlwZShvdXRwdXQs IHBpcGUpOwo+ID4gKwo+ID4gKwltb2RlMiA9IGlndF9vdXRwdXRfZ2V0X21vZGUob3V0cHV0KTsK PiA+ICsKPiA+ICsJY2hlY2tfbW9kZSgmbW9kZV9sb3dyZXMsIG1vZGUyKTsKPiA+ICsKPiA+ICsJ ZGlzcGxheV9jb21taXRfbW9kZShkYXRhLCBwaXBlLCBmbGFncywgY3JjX2xvd3Jlcyk7Cj4gPiAr Cj4gPiArCWlndF9hc3NlcnRfcGxhbmVfdmlzaWJsZShwaXBlLCBmYWxzZSk7Cj4gPiArCj4gPiAr CS8qIHN3aXRjaCBiYWNrIHRvIGhpZ2hlciByZXNvbHV0aW9uICovCj4gPiArCWlndF9vdXRwdXRf b3ZlcnJpZGVfbW9kZShvdXRwdXQsIE5VTEwpOwo+ID4gKwlpZ3Rfb3V0cHV0X3NldF9waXBlKG91 dHB1dCwgcGlwZSk7Cj4gPiArCj4gPiArCW1vZGUzID0gaWd0X291dHB1dF9nZXRfbW9kZShvdXRw dXQpOwo+ID4gKwo+ID4gKwljaGVja19tb2RlKG1vZGUxLCBtb2RlMyk7Cj4gPiArCj4gPiArCWRp c3BsYXlfY29tbWl0X21vZGUoZGF0YSwgcGlwZSwgZmxhZ3MsIGNyY19oaXJlczIpOwo+ID4gKwo+ ID4gKwlpZ3RfYXNzZXJ0X3BsYW5lX3Zpc2libGUocGlwZSwgdHJ1ZSk7Cj4gPiArCj4gPiArCWln dF9waXBlX2NyY19zdG9wKGRhdGEtPnBpcGVfY3JjKTsKPiA+ICsKPiA+ICsJdGVzdF9maW5pKGRh dGEsIG91dHB1dCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkCj4gPiArdGVzdF9wbGFu ZV9wb3NpdGlvbihkYXRhX3QgKmRhdGEsIGVudW0gcGlwZSBwaXBlLCB1aW50NjRfdAo+ID4gbW9k aWZpZXIpCj4gPiArewo+ID4gKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKPiA+ICsJaW50IGNvbm5l Y3RlZF9vdXRzOwo+ID4gKwo+ID4gKwlpZ3RfcmVxdWlyZShkYXRhLT5kaXNwbGF5LmlzX2F0b21p Yyk7Cj4gPiArCWlndF9za2lwX29uKHBpcGUgPj0gZGF0YS0+ZGlzcGxheS5uX3BpcGVzKTsKPiA+ ICsKPiA+ICsJY29ubmVjdGVkX291dHMgPSAwOwo+ID4gKwlmb3JfZWFjaF92YWxpZF9vdXRwdXRf b25fcGlwZSgmZGF0YS0+ZGlzcGxheSwgcGlwZSwKPiA+IG91dHB1dCkgewo+ID4gKwkJdGVzdF9w bGFuZV9wb3NpdGlvbl93aXRoX291dHB1dChkYXRhLCBwaXBlLAo+ID4gb3V0cHV0LCBtb2RpZmll cik7Cj4gPiArCQljb25uZWN0ZWRfb3V0cysrOwo+ID4gKwl9Cj4gPiArCj4gPiArCWlndF9za2lw X29uKGNvbm5lY3RlZF9vdXRzID09IDApOwo+ID4gKwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMg dm9pZAo+ID4gK3J1bl90ZXN0c19mb3JfcGlwZShkYXRhX3QgKmRhdGEsIGVudW0gcGlwZSBwaXBl KQo+ID4gK3sKPiA+ICsJaWd0X3N1YnRlc3RfZigicGlwZS0lcy10aWxpbmctbm9uZSIsCj4gPiAr CQnCoMKgwqDCoMKgwqBrbXN0ZXN0X3BpcGVfbmFtZShwaXBlKSkKPiA+ICsJCXRlc3RfcGxhbmVf cG9zaXRpb24oZGF0YSwgcGlwZSwKPiA+IExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUpOwo+ID4g Kwo+ID4gKwlpZ3Rfc3VidGVzdF9mKCJwaXBlLSVzLXRpbGluZy14IiwKPiA+ICsJCcKgwqDCoMKg wqDCoGttc3Rlc3RfcGlwZV9uYW1lKHBpcGUpKQo+ID4gKwkJdGVzdF9wbGFuZV9wb3NpdGlvbihk YXRhLCBwaXBlLAo+ID4gTE9DQUxfSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQpOwo+ID4gKwo+ID4g KwlpZ3Rfc3VidGVzdF9mKCJwaXBlLSVzLXRpbGluZy15IiwKPiA+ICsJCcKgwqDCoMKgwqDCoGtt c3Rlc3RfcGlwZV9uYW1lKHBpcGUpKQo+ID4gKwkJdGVzdF9wbGFuZV9wb3NpdGlvbihkYXRhLCBw aXBlLAo+ID4gTE9DQUxfSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQpOwo+ID4gKwo+ID4gKwlpZ3Rf c3VidGVzdF9mKCJwaXBlLSVzLXRpbGluZy15ZiIsCj4gPiArCQnCoMKgwqDCoMKgwqBrbXN0ZXN0 X3BpcGVfbmFtZShwaXBlKSkKPiA+ICsJCXRlc3RfcGxhbmVfcG9zaXRpb24oZGF0YSwgcGlwZSwK PiA+IExPQ0FMX0k5MTVfRk9STUFUX01PRF9ZZl9USUxFRCk7Cj4gPiArfQo+IFRoZXNlIHRlc3Rz IHJlcXVpcmUgc29tZSBjaGFuZ2VzIHRvIHJ1biBzdWNjZXNmdWxseSBvbiBnZW4gPCA5Lgo+IAo+ IGZyb20ga21zX2ZsaXBfdGlsaW5nLmMgaXQgc2VlbXMgdGhhdAo+IAo+IFkgYW5kIFlmIHRpbGlu ZyByZXF1aXJlcyBnZW4gPj0gOSwgZWxzZSB0ZXN0cyBmYWlsIHdpdGggLUVJTlZBTCBpbgo+IGFk ZGZiLgpBaCwgcmlnaHQuIEknbGwgZml4IHRoaXMuCgo+IAo+IElmIGZpeGVkOgo+IAo+IFJldmll d2VkLWJ5OiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5raG9yc3RAbGludXguaW50ZWwu Y29tPgpUaGFua3MgZm9yIHRoZSByZXZpZXchCi0tIApNaWthIEthaG9sYSAtIEludGVsIE9UQwoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4 IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==