From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kahola Subject: Re: [PATCH i-g-t v4] tests/kms_plane_multiple: CRC based atomic correctness test Date: Tue, 01 Nov 2016 11:00:14 +0200 Message-ID: <1477990814.19030.10.camel@intel.com> References: <1476955643-7631-1-git-send-email-mika.kahola@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 mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5DBC86E3DC for ; Tue, 1 Nov 2016 09:00:03 +0000 (UTC) In-Reply-To: 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 T24gVHVlLCAyMDE2LTExLTAxIGF0IDA5OjI1ICswMTAwLCBNYWFydGVuIExhbmtob3JzdCB3cm90 ZToKPiBPcCAyMC0xMC0xNiBvbSAxMToyNyBzY2hyZWVmIE1pa2EgS2Fob2xhOgo+ID4gCj4gPiBU aGlzIGlzIGEgdGVzdGNhc2Ugd2l0aCBtdWx0aXBsZSBwbGFuZXMuIFRoZSBpZGVhIGhlcmUgaXMg dGhlCj4gPiBmb2xsb3dpbmcKPiA+IAo+ID4gwqAtIGRyYXcgYSB1bmlmb3JtIGZyYW1lIHdpdGgg Ymx1ZSBjb2xvcgo+ID4gwqAtIGdyYWIgY3JjIGZvciByZWZlcmVuY2UKPiA+IMKgLSBwdXQgcGxh bmVzIHJhbmRvbWx5IG9uIHRvcCB3aXRoIHRoZSBzYW1lIGJsdWUgY29sb3IKPiA+IMKgLSBwdW5j aCBob2xlcyB3aXRoIGJsYWNrIGNvbG9yIGludG8gdGhlIHByaW1hcnkgZnJhbWVidWZmZXIKPiA+ IMKgLSBpZGVhbGx5IHRoZSBwbGFuZXMgc2hvdWxkIGNvdmVyIHRoZXNlIGhvbGVzIHNvIHRoYXQg dGhlIG91dHB1dAo+ID4gaXMgdGhlCj4gPiDCoMKgwqBpZGVudGljYWwgdG8gcmVmZXJlbmNlIGNy Ywo+ID4gwqAtIGNvbXBvc2l0ZSBhbGwgd2l0aCBvbmUgaW9jdGwgY2FsbAo+ID4gwqAtIGdyYWIg Y3JjIGFuZCB2ZXJpZnkgdGhhdCB0aGUgcmVmZXJlbmNlIGNyYyBpcyBlcXVhbAo+ID4gwqAtIHJl cGVhdCB0aGlzIGZvciBkb3plbiBpdGVyYXRpb25zIHRvIG1heGltaXplIGNvdmVyYWdlCj4gPiAK PiA+IHY0OiBGb3IgYXRvbWljIHRlc3QgZW5hYmxlIGNyYyBjYXB0dXJpbmcgYmVmb3JlIGVudGVy aW5nIGludG8gYQo+ID4gwqDCoMKgwqBpdGVyYXRpb24gbG9vcC4gQWZ0ZXIgZWFjaCBpdGVyYXRp b24sIGNoZWNrIHRoYXQgcGFnZSBmbGlwCj4gPiDCoMKgwqDCoGRpZG4ndCB0YWtlIG5vIG1vcmUg dGhhbiAxIHZibGFuaywgZmV0Y2ggYWxsIGNyYydzIGFuZCBjaGVjawo+ID4gwqDCoMKgwqB0aGUg dmFsdWVzLgo+ID4gCj4gPiDCoMKgwqDCoEludHJvZHVjZSBuZXcgY29tbWFuZCBsaW5lIHBhcmFt ZXRlciBmb3IgdGhlIG51bWJlciBvZgo+ID4gaXRlcmF0aW9ucy4KPiA+IMKgwqDCoMKgVGhlIHRl c3QgcnVuIGZyb20gMSB0byAyNTYgaXRlcmF0aW9ucy4KPiA+IAo+ID4gdjM6IENsZWFudXAgYnkg cmVtb3Zpbmcgc2VwYXJhdGUgcGxhbmUgYXJyYXkKPiA+IMKgwqDCoMKgRm9yIGF0b21pYywgcGFz cyBEUk1fTU9ERV9QQUdFX0ZMSVBfRVZFTlQKPiA+IMKgwqDCoMKgR3JhYiBjcmMgYnkgdXNpbmcg aWd0X3BpcGVfY3JjX2dldF9jcmMgaW5zdGVhZCBvZgo+ID4gaWd0X3BpcGVfY3JjX2NvbGxlY3Rf Y3JjCj4gPiDCoMKgwqDCoFJlbmFtZSBucGxhbmVzIHZhcmlhYmxlIHRvIG1heF9wbGFuZXMKPiA+ IMKgwqDCoMKgVG8gb3B0aW1pemUgdGVzdCBleGVjdXRpb24sIHJ1biBpdGVyYXRpb25zIGFmdGVy IHRoZSBtb2Rlc2V0Cj4gPiAKPiA+IHYyOiBLZWVwIGEgbG9nZmlsZSBvbiByYW5kb20gbnVtYmVy IHNlZWRzIHBlciBzdWJ0ZXN0IHRoYXQgYXJlIG5vdAo+ID4gc2tpcHBlZAo+ID4gwqDCoMKgwqBk dWUgdG8gdW5tZXQgdGVzdCByZXF1aXJlbWVudHMKPiA+IAo+ID4gU2lnbmVkLW9mZi1ieTogTWlr YSBLYWhvbGEgPG1pa2Eua2Fob2xhQGludGVsLmNvbT4KPiA+IC0tLQo+ID4gwqB0ZXN0cy9NYWtl ZmlsZS5zb3VyY2VzwqDCoMKgwqDCoHzCoMKgwqAxICsKPiA+IMKgdGVzdHMva21zX3BsYW5lX211 bHRpcGxlLmMgfCA0NzUKPiA+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwo+ID4gwqAyIGZpbGVzIGNoYW5nZWQsIDQ3NiBpbnNlcnRpb25zKCspCj4gPiDCoGNy ZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9rbXNfcGxhbmVfbXVsdGlwbGUuYwo+ID4gCj4gPiBkaWZm IC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMK PiA+IGluZGV4IDZkMDgxYzMuLmZmZDU5YzEgMTAwNjQ0Cj4gPiAtLS0gYS90ZXN0cy9NYWtlZmls ZS5zb3VyY2VzCj4gPiArKysgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4gPiBAQCAtMTA1LDYg KzEwNSw3IEBAIFRFU1RTX3Byb2dzX00gPSBcCj4gPiDCoAlrbXNfcGlwZV9jb2xvciBcCj4gPiDC oAlrbXNfcGlwZV9jcmNfYmFzaWMgXAo+ID4gwqAJa21zX3BsYW5lIFwKPiA+ICsJa21zX3BsYW5l X211bHRpcGxlIFwKPiA+IMKgCWttc19wcm9wZXJ0aWVzIFwKPiA+IMKgCWttc19wc3Jfc2lua19j cmMgXAo+ID4gwqAJa21zX3JlbmRlciBcCj4gPiBkaWZmIC0tZ2l0IGEvdGVzdHMva21zX3BsYW5l X211bHRpcGxlLmMKPiA+IGIvdGVzdHMva21zX3BsYW5lX211bHRpcGxlLmMKPiA+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwLi5hMThjZGZmCj4gPiAtLS0gL2Rldi9udWxs Cj4gPiArKysgYi90ZXN0cy9rbXNfcGxhbmVfbXVsdGlwbGUuYwo+ID4gQEAgLTAsMCArMSw0NzUg QEAKPiA+ICsvKgo+ID4gKyAqIENvcHlyaWdodCDCqSAyMDE2IEludGVsIENvcnBvcmF0aW9uCj4g PiArICoKPiA+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJn ZSwgdG8gYW55IHBlcnNvbgo+ID4gb2J0YWluaW5nIGEKPiA+ICsgKiBjb3B5IG9mIHRoaXMgc29m dHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCj4gPiAiU29mdHdh cmUiKSwKPiA+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9u LCBpbmNsdWRpbmcgd2l0aG91dAo+ID4gbGltaXRhdGlvbgo+ID4gKyAqIHRoZSByaWdodHMgdG8g dXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLAo+ID4gc3VibGlj ZW5zZSwKPiA+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8g cGVybWl0IHBlcnNvbnMgdG8KPiA+IHdob20gdGhlCj4gPiArICogU29mdHdhcmUgaXMgZnVybmlz aGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKPiA+IGNvbmRpdGlvbnM6Cj4g PiArICoKPiA+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNz aW9uIG5vdGljZQo+ID4gKGluY2x1ZGluZyB0aGUgbmV4dAo+ID4gKyAqIHBhcmFncmFwaCkgc2hh bGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbAo+ID4gcG9ydGlvbnMg b2YgdGhlCj4gPiArICogU29mdHdhcmUuCj4gPiArICoKPiA+ICsgKiBUSEUgU09GVFdBUkUgSVMg UFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKPiA+IEVYUFJF U1MgT1IKPiA+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBX QVJSQU5USUVTIE9GCj4gPiBNRVJDSEFOVEFCSUxJVFksCj4gPiArICogRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC7CoMKgSU4gTk8KPiA+IEVWRU5U IFNIQUxMCj4gPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxF IEZPUiBBTlkgQ0xBSU0sCj4gPiBEQU1BR0VTIE9SIE9USEVSCj4gPiArICogTElBQklMSVRZLCBX SEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCj4gPiBB UklTSU5HCj4gPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09G VFdBUkUgT1IgVEhFIFVTRSBPUgo+ID4gT1RIRVIgREVBTElOR1MKPiA+ICsgKiBJTiBUSEUgU09G VFdBUkUuCj4gPiArICoKPiA+ICsgKi8KPiA+ICsKPiA+ICsjaW5jbHVkZSAiaWd0LmgiCj4gPiAr I2luY2x1ZGUgImRybXRlc3QuaCIKPiA+ICsjaW5jbHVkZSA8ZXJybm8uaD4KPiA+ICsjaW5jbHVk ZSA8c3RkYm9vbC5oPgo+ID4gKyNpbmNsdWRlIDxzdGRpby5oPgo+ID4gKyNpbmNsdWRlIDxzdHJp bmcuaD4KPiA+ICsjaW5jbHVkZSA8dGltZS5oPgo+ID4gKwo+ID4gK0lHVF9URVNUX0RFU0NSSVBU SU9OKCJUZXN0IGF0b21pYyBtb2RlIHNldHRpbmcgd2l0aCBtdWx0aXBsZQo+ID4gcGxhbmVzICIp Owo+ID4gKwo+ID4gKyNkZWZpbmUgTUFYX0NSQ1MgMQo+ID4gKyNkZWZpbmUgU0laRcKgwqDCoMKg wqAxMjgKPiA+ICsKPiA+ICsjZGVmaW5lIElOX1JBTkdFKFgsIE1JTiwgTUFYKSAoKFgpIDwgKE1J TikgfHwgKFgpID4gKE1BWCkgPyAxNiA6Cj4gPiBYKQo+IDE2IG9yIE1BWD8gYW55d2F5IGl0J3Mg b25seSB1c2VkIGluIG9uZSBwbGFjZSwgc28gbWlnaHQgYXMgd2VsbAo+IHJlbW92ZSB0aGUgbWFj cm8uCj4gPiAKPiA+ICt0eXBlZGVmIHN0cnVjdCB7Cj4gPiArCWZsb2F0IHJlZDsKPiA+ICsJZmxv YXQgZ3JlZW47Cj4gPiArCWZsb2F0IGJsdWU7Cj4gPiArfSBjb2xvcl90Owo+ID4gKwo+ID4gK3R5 cGVkZWYgc3RydWN0IHsKPiA+ICsJaW50IGRybV9mZDsKPiA+ICsJaWd0X2Rpc3BsYXlfdCBkaXNw bGF5Owo+ID4gKwlpZ3RfcGlwZV9jcmNfdCAqcGlwZV9jcmM7Cj4gPiArCWlndF9wbGFuZV90ICpw bGFuZVtJR1RfTUFYX1BMQU5FU107Cj4gPiArCXN0cnVjdCBpZ3RfZmIgZmJbSUdUX01BWF9QTEFO RVNdOwo+ID4gK30gZGF0YV90Owo+ID4gKwo+ID4gK3R5cGVkZWYgc3RydWN0IHsKPiA+ICsJZGF0 YV90ICpkYXRhOwo+ID4gKwlpZ3RfY3JjX3QgcmVmZXJlbmNlX2NyYzsKPiA+ICt9IHRlc3RfcG9z aXRpb25fdDsKPiA+ICsKPiA+ICsvKiBDb21tYW5kIGxpbmUgcGFyYW1ldGVycy4gKi8KPiA+ICtz dHJ1Y3Qgewo+ID4gKwl1bnNpZ25lZCBpdGVyYXRpb25zOwo+ID4gKwlib29sIHVzZXJfc2VlZDsK PiA+ICsJaW50IHNlZWQ7Cj4gPiArCWJvb2wgdXNlcl9sb2dmaWxlOwo+ID4gKwljaGFyIGxvZ2Zp bGVbU0laRV07Cj4gVGhlIGxvZ2ZpbGUgYW5kIGl0cyBpbmZyYXN0cnVjdHVyZSBjb3VsZCBiZSBy ZW1vdmVkIGlmIHlvdSBwcmludCB0aGUKPiBzZWVkIGluIHdpdGggaWd0X2RlYnVnIHNvIHlvdSBn ZXQgaXQgd2hlbiB5b3UgcnVuIHdpdGggLS1kZWJ1Zywgb3IKPiBpZ3RfaW5mbyBpZiB5b3UgYWx3 YXlzIHdhbnQgdG8gcHJpbnQgaXQuCj4gCj4gSW4gZ2VuZXJhbCwgaXQncyBiZXN0IHRvIGtlZXAg dGVzdHMgYXMgZHVtYiBhcyBwb3NzaWJsZS4gSXQncyBlYXNpZXIKPiB0byBpbmNsdWRlIGEgbm9y bWFsIHRlc3QgbG9nIHRoYW4gYSBzcGVjaWFsbHkgY3JhZnRlZCBmaWxlLgpUaGUgaWRlYSBoZXJl IHdhcyB0byBsb2cgc2VlZCB2YWx1ZXMgaW4gY2FzZSB3ZSBuZWVkIHRvIHJlcGxpY2F0ZSB0aGUK dGVzdC4gTWF5YmUgcHJpbnRpbmcgdGhlIHNlZWQgdmFsdWUgYXQgdGhlIGJlZ2lubmluZyBvZiB0 aGUgdGVzdCBpcwplbm91Z2ggYW5kIEkgY2FuIHJlbW92ZSB0aGUgbG9nIGZpbGUgY29tcGxldGVs eS4KCj4gPiAKPiA+ICt9IG9wdCA9IHsKPiA+ICsJLml0ZXJhdGlvbnMgPSAxNiwKPiA+ICsJLnVz ZXJfc2VlZCA9IGZhbHNlLAo+ID4gKwkuc2VlZCA9IDEsCj4gPiArCS51c2VyX2xvZ2ZpbGUgPSBm YWxzZSwKPiA+ICsJLmxvZ2ZpbGUgPSAia21zX3BsYW5lX211bHRpcGxlLmxvZyIsCj4gPiArfTsK PiA+ICsKPiA+ICtzdGF0aWMgaW5saW5lIHVpbnQzMl90IHBpcGVfc2VsZWN0KGludCBwaXBlKQo+ ID4gK3sKPiA+ICsJaWYgKHBpcGUgPiAxKQo+ID4gKwkJcmV0dXJuIHBpcGUgPDwgRFJNX1ZCTEFO S19ISUdIX0NSVENfU0hJRlQ7Cj4gPiArCWVsc2UgaWYgKHBpcGUgPiAwKQo+ID4gKwkJcmV0dXJu IERSTV9WQkxBTktfU0VDT05EQVJZOwo+ID4gKwllbHNlCj4gPiArCQlyZXR1cm4gMDsKPiA+ICt9 Cj4gPiArCj4gPiArc3RhdGljIHVuc2lnbmVkIGdldF92YmxhbmsoaW50IGZkLCBpbnQgcGlwZSwg dW5zaWduZWQgZmxhZ3MpCj4gPiArewo+ID4gKwl1bmlvbiBkcm1fd2FpdF92YmxhbmsgdmJsOwo+ ID4gKwo+ID4gKwltZW1zZXQoJnZibCwgMCwgc2l6ZW9mKHZibCkpOwo+ID4gKwl2YmwucmVxdWVz dC50eXBlID0gRFJNX1ZCTEFOS19SRUxBVElWRSB8IHBpcGVfc2VsZWN0KHBpcGUpCj4gPiB8IGZs YWdzOwo+ID4gKwlpZiAoZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9XQUlUX1ZCTEFOSywgJnZibCkp Cj4gPiArCQlyZXR1cm4gMDsKPiA+ICsKPiA+ICsJcmV0dXJuIHZibC5yZXBseS5zZXF1ZW5jZTsK PiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBsb2d3cml0ZShjb25zdCBjaGFyICp0ZXN0bmFt ZSkKPiA+ICt7Cj4gPiArCXRpbWVfdCBjdXJyX3RpbWU7Cj4gPiArCUZJTEUgKmZpZDsKPiA+ICsJ Y2hhciAqdGltZV9zdHI7Cj4gPiArCj4gPiArCWZpZCA9IGZvcGVuKG9wdC5sb2dmaWxlLCAiYSIp Owo+ID4gKwo+ID4gKwlpZiAoZmlkID09IE5VTEwpIHsKPiA+ICsJCWlndF9kZWJ1ZygiQ291bGQg bm90IG9wZW4gZmlsZSAlc1xuIiwKPiA+IG9wdC5sb2dmaWxlKTsKPiA+ICsJCXJldHVybiAtMTsK PiA+ICsJfQo+ID4gKwo+ID4gKwljdXJyX3RpbWUgPSB0aW1lKE5VTEwpOwo+ID4gKwo+ID4gKwl0 aW1lX3N0ciA9IGN0aW1lKCZjdXJyX3RpbWUpOwo+ID4gKwl0aW1lX3N0cltzdHJsZW4odGltZV9z dHIpLTFdID0gJ1wwJzsKPiA+ICsKPiA+ICsJZnByaW50ZihmaWQsICIlczoga21zX3BsYW5lX211 bHRpcGxlIC0tcnVuLXN1YnRlc3QgJXMgLS0KPiA+IHNlZWQgJWRcbiIsCj4gPiArCQl0aW1lX3N0 ciwgdGVzdG5hbWUsIG9wdC5zZWVkKTsKPiA+ICsKPiA+ICsJZmNsb3NlKGZpZCk7Cj4gPiArCj4g PiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICsvKgo+ID4gKyAqIENvbW1vbiBjb2RlIGFj cm9zcyBhbGwgdGVzdHMsIGFjdGluZyBvbiBkYXRhX3QKPiA+ICsgKi8KPiA+ICtzdGF0aWMgdm9p ZCB0ZXN0X2luaXQoZGF0YV90ICpkYXRhLCBlbnVtIHBpcGUgcGlwZSkKPiA+ICt7Cj4gPiArCWRh dGEtPnBpcGVfY3JjID0gaWd0X3BpcGVfY3JjX25ldyhwaXBlLAo+ID4gSU5URUxfUElQRV9DUkNf U09VUkNFX0FVVE8pOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCB0ZXN0X2ZpbmkoZGF0 YV90ICpkYXRhLCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwgaW50Cj4gPiBtYXhfcGxhbmVzKQo+ID4g K3sKPiA+ICsJaWd0X3BsYW5lX3NldF9mYihkYXRhLT5wbGFuZVtJR1RfUExBTkVfUFJJTUFSWV0s IE5VTEwpOwo+ID4gKwo+ID4gKwlmb3IgKGludCBpID0gSUdUX1BMQU5FXzI7IGkgPD0gbWF4X3Bs YW5lczsgaSsrKQo+ID4gKwkJaWd0X3BsYW5lX3NldF9mYihkYXRhLT5wbGFuZVtpXSwgTlVMTCk7 Cj4gU3RhcnQgd2l0aCBJR1RfUExBTkVfUFJJTUFSWT8KVHJ1ZS4KCj4gPiAKPiA+ICsJLyogcmVz ZXQgdGhlIGNvbnN0cmFpbnQgb24gdGhlIHBpcGUgKi8KPiA+ICsJaWd0X291dHB1dF9zZXRfcGlw ZShvdXRwdXQsIFBJUEVfQU5ZKTsKPiA+ICsKPiA+ICsJaWd0X3BpcGVfY3JjX2ZyZWUoZGF0YS0+ cGlwZV9jcmMpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgYm9vbCB0ZXN0X2lzX2F0b21pYyhj b25zdCBjaGFyICp0ZXN0bmFtZSkKPiA+ICt7Cj4gPiArCWlmIChzdHJuY21wKHRlc3RuYW1lLCAi YXRvbWljIiwgNikgPT0gMCkKPiA+ICsJCXJldHVybiB0cnVlOwo+ID4gKwo+ID4gKwlyZXR1cm4g ZmFsc2U7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkCj4gPiArdGVzdF9ncmFiX2NyYyhk YXRhX3QgKmRhdGEsIGlndF9vdXRwdXRfdCAqb3V0cHV0LCBlbnVtIHBpcGUgcGlwZSwKPiA+ICsJ wqDCoMKgwqDCoMKgY29sb3JfdCAqY29sb3IsIHVpbnQ2NF90IHRpbGluZywgaWd0X2NyY190ICpj cmMgLyoKPiA+IG91dCAqLykKPiA+ICt7Cj4gPiArCXN0cnVjdCBpZ3RfZmIgZmI7Cj4gPiArCWRy bU1vZGVNb2RlSW5mbyAqbW9kZTsKPiA+ICsJaWd0X3BsYW5lX3QgKnByaW1hcnk7Cj4gPiArCWlu dCBuOwo+ID4gKwlib29sIHRlc3RfYXRvbWljID0gdGVzdF9pc19hdG9taWMoaWd0X3N1YnRlc3Rf bmFtZSgpKTsKPiBTdXJlbHkgeW91IGNhbiBqdXN0IHBhc3MgdGVzdF9hdG9taWMgYXMgcGFyYW1l dGVyIHRvIHRoZSB0ZXN0cz8gVGhpcwo+IGxvb2tzIGxpa2UgbWFnaWMgdG8gbWUuLi4KPiAKPiBP ciAyIHNlcGFyYXRlIGZ1bmN0aW9ucyBmb3IgbGVnYWN5IHZzIGF0b21pYy4KTWF5YmUgSSBnbyBo ZXJlIGZvciB0d28gc2VwYXJhdGUgZnVuY3Rpb24uIEl0IG1pZ2h0IGJlIGNsZWFuZXIgdGhhdCB3 YXkKZXZlbiB0aG91Z2ggaXQgcHJvZHVjZXMgYSBiaXQgb2YgcmVwZXRpdGl2ZSBjb2RlLgoKPiA+ IAo+ID4gKwlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgcGlwZSk7Cj4gPiArCj4gPiArCXBy aW1hcnkgPSBpZ3Rfb3V0cHV0X2dldF9wbGFuZShvdXRwdXQsIElHVF9QTEFORV9QUklNQVJZKTsK PiA+ICsKPiA+ICsJbW9kZSA9IGlndF9vdXRwdXRfZ2V0X21vZGUob3V0cHV0KTsKPiA+ICsKPiA+ ICsJaWd0X2NyZWF0ZV9jb2xvcl9mYihkYXRhLT5kcm1fZmQsIG1vZGUtPmhkaXNwbGF5LCBtb2Rl LQo+ID4gPnZkaXNwbGF5LAo+ID4gKwkJCcKgwqDCoMKgRFJNX0ZPUk1BVF9YUkdCODg4OCwKPiA+ ICsJCQnCoMKgwqDCoExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCj4gPiArCQkJwqDCoMKgwqBj b2xvci0+cmVkLCBjb2xvci0+Z3JlZW4sIGNvbG9yLT5ibHVlLAo+ID4gKwkJCcKgwqDCoMKgJmZi KTsKPiA+ICsKPiA+ICsJaWd0X3BsYW5lX3NldF9mYihwcmltYXJ5LCAmZmIpOwo+ID4gKwo+ID4g KwlpZ3RfZGlzcGxheV9jb21taXQyKCZkYXRhLT5kaXNwbGF5LAo+ID4gKwkJCcKgwqDCoMKgdGVz dF9hdG9taWMgPyBDT01NSVRfQVRPTUlDIDoKPiA+IENPTU1JVF9MRUdBQ1kpOwo+ID4gKwo+ID4g KwlpZ3RfcGlwZV9jcmNfc3RhcnQoZGF0YS0+cGlwZV9jcmMpOwo+ID4gKwluID0gaWd0X3BpcGVf Y3JjX2dldF9jcmNzKGRhdGEtPnBpcGVfY3JjLCAxLCAmY3JjKTsKPiA+ICsJaWd0X2Fzc2VydF9l cShuLCAxKTsKPiA+ICsJaWd0X3BpcGVfY3JjX3N0b3AoZGF0YS0+cGlwZV9jcmMpOwo+ID4gKwo+ ID4gKwlpZ3RfcGxhbmVfc2V0X2ZiKHByaW1hcnksIE5VTEwpOwo+ID4gKwo+ID4gKwlpZ3RfZGlz cGxheV9jb21taXQyKCZkYXRhLT5kaXNwbGF5LAo+ID4gKwkJCcKgwqDCoMKgdGVzdF9hdG9taWMg PyBDT01NSVRfQVRPTUlDIDoKPiA+IENPTU1JVF9MRUdBQ1kpOwo+ID4gKwo+ID4gKwlpZ3RfcmVt b3ZlX2ZiKGRhdGEtPmRybV9mZCwgJmZiKTsKPiA+ICt9Cj4gVGhpcyB3aWxsIGZvcmNlIGEgbW9k ZXNldCBkaXNhYmxlIHdpdGggbGVnYWN5IGNvbW1pdC4Kb2suCgo+ID4gCj4gPiArLyoKPiA+ICsg KiBNdWx0aXBsZSBwbGFuZSBwb3NpdGlvbiB0ZXN0Lgo+ID4gKyAqwqDCoMKgLSBXZSBzdGFydCBi eSBncmFiYmluZyBhIHJlZmVyZW5jZSBDUkMgb2YgYSBmdWxsIGJsdWUgZmIKPiA+IGJlaW5nIHNj YW5uZWQKPiA+ICsgKsKgwqDCoMKgwqBvdXQgb24gdGhlIHByaW1hcnkgcGxhbmUKPiA+ICsgKsKg wqDCoC0gVGhlbiB3ZSBzY2Fubm91dCBudW1iZXIgb2YgcGxhbmVzOgo+ID4gKyAqwqDCoMKgwqDC oMKgKiB0aGUgcHJpbWFyeSBwbGFuZSB1c2VzIGEgYmx1ZSBmYiB3aXRoIGEgYmxhY2sgcmVjdGFu Z2xlCj4gPiBob2xlCj4gPiArICrCoMKgwqDCoMKgwqAqIHBsYW5lcywgb24gdG9wIG9mIHRoZSBw cmltYXJ5IHBsYW5lLCB3aXRoIGEgYmx1ZSBmYiB0aGF0Cj4gPiBpcyBzZXQtdXAKPiA+ICsgKsKg wqDCoMKgwqDCoMKgwqB0byBjb3ZlciB0aGUgYmxhY2sgcmVjdGFuZ2xlcyBvZiB0aGUgcHJpbWFy eSBwbGFuZSBmYgo+ID4gKyAqwqDCoMKgwqDCoFRoZSByZXN1bHRpbmcgQ1JDIHNob3VsZCBiZSBp ZGVudGljYWwgdG8gdGhlIHJlZmVyZW5jZSBDUkMKPiA+ICsgKi8KPiA+ICsKPiA+ICtzdGF0aWMg dm9pZAo+ID4gK2NyZWF0ZV9mYl9mb3JfbW9kZV9wb3NpdGlvbihkYXRhX3QgKmRhdGEsIGRybU1v ZGVNb2RlSW5mbyAqbW9kZSwKPiA+ICsJCQnCoMKgwqDCoGNvbG9yX3QgKmNvbG9yLCBpbnQgKnJl Y3RfeCwgaW50Cj4gPiAqcmVjdF95LAo+ID4gKwkJCcKgwqDCoMKgaW50IHJlY3RfdywgaW50IHJl Y3RfaCwgdWludDY0X3QKPiA+IHRpbGluZywKPiA+ICsJCQnCoMKgwqDCoGludCBtYXhfcGxhbmVz KQo+ID4gK3sKPiA+ICsJdW5zaWduZWQgaW50IGZiX2lkOwo+ID4gKwljYWlyb190ICpjcjsKPiA+ ICsKPiA+ICsJZmJfaWQgPSBpZ3RfY3JlYXRlX2ZiKGRhdGEtPmRybV9mZCwKPiA+ICsJCQnCoMKg wqDCoMKgwqBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksCj4gPiArCQkJwqDCoMKgwqDC oMKgRFJNX0ZPUk1BVF9YUkdCODg4OCwKPiA+ICsJCQnCoMKgwqDCoMKgwqB0aWxpbmcsCj4gPiAr CQkJwqDCoMKgwqDCoMKgJmRhdGEtPmZiW0lHVF9QTEFORV9QUklNQVJZXSk7Cj4gPiArCWlndF9h c3NlcnQoZmJfaWQpOwo+ID4gKwo+ID4gKwljciA9IGlndF9nZXRfY2Fpcm9fY3R4KGRhdGEtPmRy bV9mZCwgJmRhdGEtCj4gPiA+ZmJbSUdUX1BMQU5FX1BSSU1BUlldKTsKPiA+ICsJaWd0X3BhaW50 X2NvbG9yKGNyLCByZWN0X3hbMF0sIHJlY3RfeVswXSwKPiA+ICsJCQltb2RlLT5oZGlzcGxheSwg bW9kZS0+dmRpc3BsYXksCj4gPiArCQkJY29sb3ItPnJlZCwgY29sb3ItPmdyZWVuLCBjb2xvci0+ Ymx1ZSk7Cj4gPiArCj4gPiArCWZvciAoaW50IGkgPSBJR1RfUExBTkVfMjsgaSA8PSBtYXhfcGxh bmVzOyBpKyspCj4gPiArCQlpZ3RfcGFpbnRfY29sb3IoY3IsIHJlY3RfeFtpXSwgcmVjdF95W2ld LAo+ID4gKwkJCQlyZWN0X3csIHJlY3RfaCwgMC4wLCAwLjAsIDAuMCk7Cj4gPiArCj4gPiArCWln dF9hc3NlcnQoY2Fpcm9fc3RhdHVzKGNyKSA9PSAwKTsKPiA+ICsJY2Fpcm9fZGVzdHJveShjcik7 Cj4gPiArfQo+ID4gKwo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkCj4gPiArdGVzdF9wbGFuZXMoZGF0 YV90ICpkYXRhLCBlbnVtIHBpcGUgcGlwZSwgY29sb3JfdCAqY29sb3IsCj4gPiArCcKgwqDCoMKg dWludDY0X3QgdGlsaW5nLCBpbnQgbWF4X3BsYW5lcywgaWd0X291dHB1dF90ICpvdXRwdXQpCj4g PiArewo+ID4gKwlkcm1Nb2RlTW9kZUluZm8gKm1vZGU7Cj4gPiArCWludCB4W0lHVF9NQVhfUExB TkVTXTsKPiA+ICsJaW50IHlbSUdUX01BWF9QTEFORVNdOwo+ID4gKwlpbnQgaTsKPiA+ICsKPiA+ ICsJaWd0X291dHB1dF9zZXRfcGlwZShvdXRwdXQsIHBpcGUpOwo+ID4gKwo+ID4gKwltb2RlID0g aWd0X291dHB1dF9nZXRfbW9kZShvdXRwdXQpOwo+ID4gKwo+ID4gKwkvKiBzcHJpdGUgcGxhbmVz IHdpdGggcmFuZG9tIHBvc2l0aW9ucyAqLwo+ID4gKwl4W0lHVF9QTEFORV9QUklNQVJZXSA9IDA7 Cj4gPiArCXlbSUdUX1BMQU5FX1BSSU1BUlldID0gMDsKPiA+ICsJZm9yIChpID0gSUdUX1BMQU5F XzI7IGkgPD0gbWF4X3BsYW5lczsgaSsrKSB7Cj4gPiArCQl4W2ldID0gcmFuZCgpICUgKG1vZGUt PmhkaXNwbGF5IC0gU0laRSk7Cj4gPiArCQl5W2ldID0gcmFuZCgpICUgKG1vZGUtPnZkaXNwbGF5 IC0gU0laRSk7Cj4gPiArCj4gPiArCQlkYXRhLT5wbGFuZVtpXSA9IGlndF9vdXRwdXRfZ2V0X3Bs YW5lKG91dHB1dCwgaSk7Cj4gPiArCj4gPiArCQlpZ3RfY3JlYXRlX2NvbG9yX2ZiKGRhdGEtPmRy bV9mZCwKPiA+ICsJCQkJwqDCoMKgwqBTSVpFLCBTSVpFLCAvKiB3aWR0aCwgaGVpZ2h0Cj4gPiAq Lwo+IE92ZXJsb2FkaW5nIFNJWkUgc2VlbXMgaW5hcHByb3ByaWF0ZSBoZXJlLCB5b3Ugd2VyZSBh bHJlYWR5IHVzaW5nIGl0Cj4gZm9yIHNvbWUgYnVmZmVyIHNpemVzLgo+IAo+IEFsc28gd2h5IHVz ZSAxMjggaGVyZT8KSXQncyBqdXN0IGEgdmFsdWUgdGhhdCBJIHBpY2tlZC4gSSBoYWQgdG8gcGlj ayBzb21ldGhpbmcgc28gSSBjaG9zZQp0aGlzIG9uZS7CoAo+IAo+IEl0J3Mgb2sgZm9yIGN1cnNv ciwgYnV0IG1pZ2h0IHdhbnQgdG8gc2V0IGl0IHRvIHNvbWV0aGluZyBiaWdnZXIgKG9yCj4gbW9y ZSByYW5kb20pIGZvciBvdGhlciBwbGFuZXMuCgpNYXliZSBiaWdnZXIgc2l6ZSBvZiBvdGhlciBw bGFuZXMuIE90aGVyd2lzZSwgd2UgbmVlZCB0byBsb2cgdGhlIHNpemVzCnRvbyBpbiBvcmRlciBy ZXBsaWNhdGUgdGhlIHRlc3QgaWYgbmVlZGVkLsKgCgo+ID4gCj4gPiArCQkJCcKgwqDCoMKgZGF0 YS0+cGxhbmVbaV0tPmlzX2N1cnNvciA/Cj4gPiBEUk1fRk9STUFUX0FSR0I4ODg4IDogRFJNX0ZP Uk1BVF9YUkdCODg4OCwKPiA+ICsJCQkJwqDCoMKgwqB0aWxpbmcsCj4gPiArCQkJCcKgwqDCoMKg Y29sb3ItPnJlZCwgY29sb3ItPmdyZWVuLAo+ID4gY29sb3ItPmJsdWUsCj4gPiArCQkJCcKgwqDC oMKgJmRhdGEtPmZiW2ldKTsKPiA+ICsKPiA+ICsJCWlndF9wbGFuZV9zZXRfcG9zaXRpb24oZGF0 YS0+cGxhbmVbaV0sIHhbaV0sCj4gPiB5W2ldKTsKPiA+ICsJCWlndF9wbGFuZV9zZXRfZmIoZGF0 YS0+cGxhbmVbaV0sICZkYXRhLT5mYltpXSk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJLyogcHJpbWFy eSBwbGFuZSAqLwo+ID4gKwlkYXRhLT5wbGFuZVtJR1RfUExBTkVfUFJJTUFSWV0gPQo+ID4gaWd0 X291dHB1dF9nZXRfcGxhbmUob3V0cHV0LCBJR1RfUExBTkVfUFJJTUFSWSk7Cj4gPiArCWNyZWF0 ZV9mYl9mb3JfbW9kZV9wb3NpdGlvbihkYXRhLCBtb2RlLCBjb2xvciwgeCwgeSwKPiA+ICsJCQkJ wqDCoMKgwqBTSVpFLCBTSVpFLCB0aWxpbmcsCj4gPiBtYXhfcGxhbmVzKTsKPiA+ICsJaWd0X3Bs YW5lX3NldF9mYihkYXRhLT5wbGFuZVtJR1RfUExBTkVfUFJJTUFSWV0sICZkYXRhLQo+ID4gPmZi W0lHVF9QTEFORV9QUklNQVJZXSk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkCj4gPiAr dGVzdF9wbGFuZV9wb3NpdGlvbl93aXRoX291dHB1dChkYXRhX3QgKmRhdGEsIGVudW0gcGlwZSBw aXBlLAo+ID4gaWd0X291dHB1dF90ICpvdXRwdXQsCj4gPiArCQkJCWludCBtYXhfcGxhbmVzLCB1 aW50NjRfdCB0aWxpbmcpCj4gPiArewo+ID4gKwljaGFyIGJ1ZltTSVpFXTsKPiA+ICsJc3RydWN0 IGRybV9ldmVudCAqZSA9ICh2b2lkICopYnVmOwo+ID4gKwl0ZXN0X3Bvc2l0aW9uX3QgdGVzdCA9 IHsgLmRhdGEgPSBkYXRhIH07Cj4gPiArCWNvbG9yX3QgYmx1ZcKgwqA9IHsgMC4wZiwgMC4wZiwg MS4wZiB9Owo+ID4gKwlib29sIHRlc3RfYXRvbWljID0gdGVzdF9pc19hdG9taWMoaWd0X3N1YnRl c3RfbmFtZSgpKTsKPiA+ICsJaWd0X2NyY190ICpjcmMgPSBOVUxMOwo+ID4gKwlpZ3RfY3JjX3Qg Y3JjX2xlZ2FjeTsKPiA+ICsJdW5zaWduZWQgdmJsYW5rX3N0YXJ0Owo+ID4gKwlpbnQgbiwgcmV0 Owo+ID4gKwo+ID4gKwlpZiAodGVzdF9hdG9taWMpCj4gPiArCQlpZ3RfcmVxdWlyZShkYXRhLT5k aXNwbGF5LmlzX2F0b21pYyk7Cj4gPiArCj4gPiArCWlndF9pbmZvKCJUZXN0aW5nIGNvbm5lY3Rv ciAlcyB1c2luZyBwaXBlICVzIHdpdGggJWQKPiA+IHBsYW5lcyBmb3IgJWQgJXNcbiIsCj4gPiAr CQnCoGlndF9vdXRwdXRfbmFtZShvdXRwdXQpLCBrbXN0ZXN0X3BpcGVfbmFtZShwaXBlKSwKPiA+ IG1heF9wbGFuZXMsCj4gPiArCQnCoG9wdC5pdGVyYXRpb25zLCBvcHQuaXRlcmF0aW9ucyA+IDEg PyAiaXRlcmF0aW9ucyIKPiA+IDogIml0ZXJhdGlvbiIpOwo+ID4gKwo+ID4gKwl0ZXN0X2luaXQo ZGF0YSwgcGlwZSk7Cj4gPiArCj4gPiArCXRlc3RfZ3JhYl9jcmMoZGF0YSwgb3V0cHV0LCBwaXBl LCAmYmx1ZSwgdGlsaW5nLAo+ID4gKwkJwqDCoMKgwqDCoMKgJnRlc3QucmVmZXJlbmNlX2NyYyk7 Cj4gPiArCj4gPiArCWlmICh0ZXN0X2F0b21pYykKPiA+ICsJCWlndF9waXBlX2NyY19zdGFydChk YXRhLT5waXBlX2NyYyk7Cj4gPiArCj4gPiArCWZvciAoaW50IGkgPSAwOyBpIDwgb3B0Lml0ZXJh dGlvbnM7IGkrKykgewo+ID4gKwkJdGVzdF9wbGFuZXMoZGF0YSwgcGlwZSwgJmJsdWUsIHRpbGlu ZywgbWF4X3BsYW5lcywKPiA+IG91dHB1dCk7Cj4gPiArCj4gPiArCQlpZiAodGVzdF9hdG9taWMp IHsKPiA+ICsJCQl2Ymxhbmtfc3RhcnQgPSBnZXRfdmJsYW5rKGRhdGEtCj4gPiA+ZGlzcGxheS5k cm1fZmQsIHBpcGUsIERSTV9WQkxBTktfTkVYVE9OTUlTUyk7Cj4gPiArCj4gPiArCQkJaWd0X2Rp c3BsYXlfY29tbWl0X2F0b21pYygmZGF0YS0+ZGlzcGxheSwKPiA+ICsJCQkJCQnCoMKgRFJNX01P REVfUEFHRV9GTAo+ID4gSVBfRVZFTlQsCj4gPiArCQkJCQkJwqDCoCZkYXRhLT5kaXNwbGF5KTsK PiA+ICsKPiA+ICsJCQlyZXQgPSByZWFkKGRhdGEtPmRpc3BsYXkuZHJtX2ZkLCBidWYsCj4gPiBz aXplb2YoYnVmKSk7Cj4gPiArCj4gPiArCQkJaWd0X2Fzc2VydF9lcShnZXRfdmJsYW5rKGRhdGEt Cj4gPiA+ZGlzcGxheS5kcm1fZmQsIHBpcGUsIDApLCB2Ymxhbmtfc3RhcnQgKyAxKTsKPiA+ICsJ CQlpZ3Rfc2V0X3RpbWVvdXQoMSwgIlN0dWNrIG9uIHBhZ2UgZmxpcCIpOwo+ID4gKwkJCWlndF9h c3NlcnRfbmVxKGVycm5vLCBFSU5UUik7Cj4gPiArCQkJaWd0X2Fzc2VydF9uZXEoZXJybm8sIEVB R0FJTik7Cj4gPiArCQkJaWd0X2Fzc2VydChyZXQgPj0gMCk7Cj4gVGhpcyBsb29rcyBhIGJpdCBm dW5ueS4KPiAKPiBPbiBlcnJvciwgcmV0IDwgMCBhbmQgZXJybm8gaXMgcHJpbnRlZC4gSSdtIG5v dCBzdXJlIHdoYXQgeW91J3JlCj4gdHJ5aW5nIHRvIGFjY29tcGxpc2ggaGVyZS4KPiBUaGlzIHNo b3VsZCBwcm9iYWJseSBiZSBpZ3RfYXNzZXJ0KHJldCA9PSBzaXplb2YoKmUpKTsKPiAKPiBUaGUg dGltZW91dCBpcyBzZXQgYWZ0ZXIgdGhlIHJlYWQgYXMgd2VsbCwgd2hpY2ggaXMgd2VpcmQgdG9v LiBTaG91bGQKPiBiZSByZXNldCB0aGVyZSwgYW5kIGFybWVkIGJlZm9yZSB0aGUgcmVhZC4gOikK Tm93LCB0aGF0IEkgbG9va2VkIGF0IGl0LCBpdCBkb2VzIHNlZW0gYSBiaXQgb2RkLiBJJ2xsIGZp eCB0aGlzLgo+ID4gCj4gPiArCQkJaWd0X2Fzc2VydF9lcShlLT50eXBlLAo+ID4gRFJNX0VWRU5U X0ZMSVBfQ09NUExFVEUpOwo+ID4gKwo+ID4gKwkJCW4gPSBpZ3RfcGlwZV9jcmNfZ2V0X2NyY3Mo ZGF0YS0+cGlwZV9jcmMsCj4gPiBNQVhfQ1JDUywgJmNyYyk7Cj4gPiArCj4gPiArCQkJaWd0X2Fz c2VydF9lcShuLCBNQVhfQ1JDUyk7Cj4gPiArCQl9IGVsc2Ugewo+ID4gKwkJCWlndF9kaXNwbGF5 X2NvbW1pdDIoJmRhdGEtPmRpc3BsYXksCj4gPiBDT01NSVRfTEVHQUNZKTsKPiA+ICsKPiA+ICsJ CQlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9jcmMsCj4gPiAmY3JjX2xlZ2Fj eSk7Cj4gPiArCQkJY3JjID0gJmNyY19sZWdhY3k7Cj4gPiArCQl9Cj4gPiArCj4gPiArCQlpZ3Rf YXNzZXJ0X2NyY19lcXVhbCgmdGVzdC5yZWZlcmVuY2VfY3JjLCBjcmMpOwo+ID4gKwl9Cj4gPiAr Cj4gPiArCWlmICh0ZXN0X2F0b21pYykKPiA+ICsJCWlndF9waXBlX2NyY19zdG9wKGRhdGEtPnBp cGVfY3JjKTsKPiA+ICsKPiA+ICsJdGVzdF9maW5pKGRhdGEsIG91dHB1dCwgbWF4X3BsYW5lcyk7 Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkCj4gPiArdGVzdF9wbGFuZV9wb3NpdGlvbihk YXRhX3QgKmRhdGEsIGVudW0gcGlwZSBwaXBlLCBpbnQgbWF4X3BsYW5lcywKPiA+ICsJCcKgwqDC oMKgdWludDY0X3QgdGlsaW5nKQo+ID4gK3sKPiA+ICsJaWd0X291dHB1dF90ICpvdXRwdXQ7Cj4g PiArCWludCBjb25uZWN0ZWRfb3V0czsKPiA+ICsKPiA+ICsJaWd0X3NraXBfb24ocGlwZSA+PSBk YXRhLT5kaXNwbGF5Lm5fcGlwZXMpOwo+ID4gKwlpZ3Rfc2tpcF9vbihtYXhfcGxhbmVzID49IGRh dGEtCj4gPiA+ZGlzcGxheS5waXBlc1twaXBlXS5uX3BsYW5lcyk7Cj4gPiArCj4gPiArCWlmICgh b3B0LnVzZXJfc2VlZCkKPiA+ICsJCW9wdC5zZWVkID0gdGltZShOVUxMKTsKPiA+ICsKPiA+ICsJ c3JhbmQob3B0LnNlZWQpOwo+ID4gKwlsb2d3cml0ZShpZ3Rfc3VidGVzdF9uYW1lKCkpOwo+ID4g Kwo+ID4gKwljb25uZWN0ZWRfb3V0cyA9IDA7Cj4gPiArCWZvcl9lYWNoX2Nvbm5lY3RlZF9vdXRw dXQoJmRhdGEtPmRpc3BsYXksIG91dHB1dCkgewo+ID4gKwkJdGVzdF9wbGFuZV9wb3NpdGlvbl93 aXRoX291dHB1dChkYXRhLCBwaXBlLAo+ID4gb3V0cHV0LAo+ID4gKwkJCQkJCW1heF9wbGFuZXMs Cj4gPiB0aWxpbmcpOwo+ID4gKwkJY29ubmVjdGVkX291dHMrKzsKPiA+ICsJfQo+ID4gKwo+ID4g KwlpZ3Rfc2tpcF9vbihjb25uZWN0ZWRfb3V0cyA9PSAwKTsKPiA+ICsKPiA+ICt9Cj4gPiArCj4g PiArc3RhdGljIHZvaWQKPiA+ICtydW5fdGVzdHNfZm9yX3BpcGVfcGxhbmUoZGF0YV90ICpkYXRh LCBlbnVtIHBpcGUgcGlwZSwgaW50Cj4gPiBtYXhfcGxhbmVzKQo+ID4gK3sKPiA+ICsJaWd0X3N1 YnRlc3RfZigibGVnYWN5LXBpcGUtJXMtdGlsaW5nLW5vbmUtcGxhbmVzLSVkIiwKPiA+ICsJCcKg wqDCoMKgwqDCoGttc3Rlc3RfcGlwZV9uYW1lKHBpcGUpLCBtYXhfcGxhbmVzKQo+ID4gKwkJdGVz dF9wbGFuZV9wb3NpdGlvbihkYXRhLCBwaXBlLCBtYXhfcGxhbmVzLAo+ID4gTE9DQUxfRFJNX0ZP Uk1BVF9NT0RfTk9ORSk7Cj4gPiArCj4gPiArCWlndF9zdWJ0ZXN0X2YoImF0b21pYy1waXBlLSVz LXRpbGluZy1ub25lLXBsYW5lcy0lZCIsCj4gPiArCQnCoMKgwqDCoMKgwqBrbXN0ZXN0X3BpcGVf bmFtZShwaXBlKSwgbWF4X3BsYW5lcykKPiA+ICsJCXRlc3RfcGxhbmVfcG9zaXRpb24oZGF0YSwg cGlwZSwgbWF4X3BsYW5lcywKPiA+IExPQ0FMX0k5MTVfRk9STUFUX01PRF9YX1RJTEVEKTsKPiA+ ICsKPiA+ICsJaWd0X3N1YnRlc3RfZigibGVnYWN5LXBpcGUtJXMtdGlsaW5nLXgtcGxhbmVzLSVk IiwKPiA+ICsJCcKgwqDCoMKgwqDCoGttc3Rlc3RfcGlwZV9uYW1lKHBpcGUpLCBtYXhfcGxhbmVz KQo+ID4gKwkJdGVzdF9wbGFuZV9wb3NpdGlvbihkYXRhLCBwaXBlLCBtYXhfcGxhbmVzLAo+ID4g TE9DQUxfSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQpOwo+ID4gKwo+ID4gKwlpZ3Rfc3VidGVzdF9m KCJhdG9taWMtcGlwZS0lcy10aWxpbmcteC1wbGFuZXMtJWQiLAo+ID4gKwkJwqDCoMKgwqDCoMKg a21zdGVzdF9waXBlX25hbWUocGlwZSksIG1heF9wbGFuZXMpCj4gPiArCQl0ZXN0X3BsYW5lX3Bv c2l0aW9uKGRhdGEsIHBpcGUsIG1heF9wbGFuZXMsCj4gPiBMT0NBTF9JOTE1X0ZPUk1BVF9NT0Rf WF9USUxFRCk7Cj4gPiArCj4gPiArCWlndF9zdWJ0ZXN0X2YoImxlZ2FjeS1waXBlLSVzLXRpbGlu Zy15LXBsYW5lcy0lZCIsCj4gPiArCQnCoMKgwqDCoMKgwqBrbXN0ZXN0X3BpcGVfbmFtZShwaXBl KSwgbWF4X3BsYW5lcykKPiA+ICsJCXRlc3RfcGxhbmVfcG9zaXRpb24oZGF0YSwgcGlwZSwgbWF4 X3BsYW5lcywKPiA+IExPQ0FMX0k5MTVfRk9STUFUX01PRF9ZX1RJTEVEKTsKPiA+ICsKPiA+ICsJ aWd0X3N1YnRlc3RfZigiYXRvbWljLXBpcGUtJXMtdGlsaW5nLXktcGxhbmVzLSVkIiwKPiA+ICsJ CcKgwqDCoMKgwqDCoGttc3Rlc3RfcGlwZV9uYW1lKHBpcGUpLCBtYXhfcGxhbmVzKQo+ID4gKwkJ dGVzdF9wbGFuZV9wb3NpdGlvbihkYXRhLCBwaXBlLCBtYXhfcGxhbmVzLAo+ID4gTE9DQUxfSTkx NV9GT1JNQVRfTU9EX1lfVElMRUQpOwo+ID4gKwo+ID4gKwlpZ3Rfc3VidGVzdF9mKCJsZWdhY3kt cGlwZS0lcy10aWxpbmcteWYtcGxhbmVzLSVkIiwKPiA+ICsJCcKgwqDCoMKgwqDCoGttc3Rlc3Rf cGlwZV9uYW1lKHBpcGUpLCBtYXhfcGxhbmVzKQo+ID4gKwkJdGVzdF9wbGFuZV9wb3NpdGlvbihk YXRhLCBwaXBlLCBtYXhfcGxhbmVzLAo+ID4gTE9DQUxfSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVE KTsKPiA+ICsKPiA+ICsJaWd0X3N1YnRlc3RfZigiYXRvbWljLXBpcGUtJXMtdGlsaW5nLXlmLXBs YW5lcy0lZCIsCj4gPiArCQnCoMKgwqDCoMKgwqBrbXN0ZXN0X3BpcGVfbmFtZShwaXBlKSwgbWF4 X3BsYW5lcykKPiA+ICsJCXRlc3RfcGxhbmVfcG9zaXRpb24oZGF0YSwgcGlwZSwgbWF4X3BsYW5l cywKPiA+IExPQ0FMX0k5MTVfRk9STUFUX01PRF9ZZl9USUxFRCk7Cj4gPiArfQo+ID4gKwo+ID4g K3N0YXRpYyB2b2lkCj4gPiArcnVuX3Rlc3RzX2Zvcl9waXBlKGRhdGFfdCAqZGF0YSwgZW51bSBw aXBlIHBpcGUpCj4gPiArewo+ID4gKwlmb3IgKGludCBwbGFuZXMgPSAxOyBwbGFuZXMgPCBJR1Rf TUFYX1BMQU5FUzsgcGxhbmVzKyspCj4gPiArCQlydW5fdGVzdHNfZm9yX3BpcGVfcGxhbmUoZGF0 YSwgcGlwZSwgcGxhbmVzKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGRhdGFfdCBkYXRhOwo+ ID4gKwo+ID4gK3N0YXRpYyBpbnQgb3B0X2hhbmRsZXIoaW50IG9wdGlvbiwgaW50IG9wdGlvbl9p bmRleCwgdm9pZCAqaW5wdXQpCj4gPiArewo+ID4gKwlzd2l0Y2ggKG9wdGlvbikgewo+ID4gKwlj YXNlICdpJzoKPiA+ICsJCW9wdC5pdGVyYXRpb25zID0gSU5fUkFOR0Uoc3RydG9sKG9wdGFyZywg TlVMTCwgMCksCj4gPiAxLCAyNTYpOwo+ID4gKwkJYnJlYWs7Cj4gPiArCWNhc2UgJ3MnOgo+ID4g KwkJb3B0LnVzZXJfc2VlZCA9IHRydWU7Cj4gPiArCQlvcHQuc2VlZCA9IHN0cnRvbChvcHRhcmcs IE5VTEwsIDApOwo+ID4gKwkJYnJlYWs7Cj4gPiArCWNhc2UgJ2wnOgo+ID4gKwkJb3B0LnVzZXJf bG9nZmlsZSA9IHRydWU7Cj4gPiArCQlzdHJjcHkob3B0LmxvZ2ZpbGUsIG9wdGFyZyk7Cj4gPiAr CQlicmVhazsKPiA+ICsJZGVmYXVsdDoKPiA+ICsJCWlndF9hc3NlcnQoZmFsc2UpOwo+ID4gKwl9 Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtjb25zdCBjaGFyICpoZWxw X3N0ciA9Cj4gPiArCSLCoMKgLS1pdGVyYXRpb25zIE51bWJlciBvZiBpdGVyYXRpb25zIGZvciB0 ZXN0IGNvdmVyYWdlLgo+ID4gbWluIDEsIG1heCAyNTYsIGRlZmF1bHQgMTYgaXRlcmF0aW9ucyBc biIKPiA+ICsJIsKgwqAtLXNlZWTCoMKgwqDCoMKgwqDCoFNlZWQgZm9yIHJhbmRvbSBudW1iZXIg Z2VuZXJhdG9yXG4iCj4gPiArCSLCoMKgLS1sb2dmaWxlwqDCoMKgwqBMb2dmaWxlIHRvIHN0b3Jl IHNlZWRzIGZvciByYW5kb20gbnVtYmVyCj4gPiBnZW5lcmF0b3IsIGRlZmF1bHQgJ2ttc19wbGFu ZV9tdWx0aXBsZS5sb2cnXG4iOwo+ID4gKwo+ID4gK2ludCBtYWluKGludCBhcmdjLCBjaGFyICph cmd2W10pCj4gPiArewo+ID4gKwl0aW1lX3QgdCA9IHRpbWUoTlVMTCk7Cj4gPiArCXN0cnVjdCB0 bSB0bSA9ICpsb2NhbHRpbWUoJnQpOwo+ID4gKwo+ID4gKwlzdHJ1Y3Qgb3B0aW9uIGxvbmdfb3B0 aW9uc1tdID0gewo+ID4gKwkJeyAiaXRlcmF0aW9ucyIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxM LCAnaSd9LAo+ID4gKwkJeyAic2VlZCIswqDCoMKgwqByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwg J3MnfSwKPiA+ICsJCXsgImxvZ2ZpbGUiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ2wnfSwK PiA+ICsJCXsgMCwgMCwgMCwgMCB9Cj4gPiArCX07Cj4gPiArCj4gPiArCWlndF9zdWJ0ZXN0X2lu aXRfcGFyc2Vfb3B0cygmYXJnYywgYXJndiwgIiIsIGxvbmdfb3B0aW9ucywKPiA+IGhlbHBfc3Ry LAo+ID4gKwkJCQnCoMKgwqDCoG9wdF9oYW5kbGVyLCBOVUxMKTsKPiA+ICsKPiA+ICsJaWYgKCFv cHQudXNlcl9sb2dmaWxlKQo+ID4gKwkJc3ByaW50ZihvcHQubG9nZmlsZSwgImttc19wbGFuZV9t dWx0aXBsZS0lNGQtJTJkLQo+ID4gJTJkLmxvZyIsCj4gPiArCQkJdG0udG1feWVhciArIDE5MDAs IHRtLnRtX21vbiArIDEsCj4gPiB0bS50bV9tZGF5KTsKPiA+ICsKPiA+ICsJaWd0X3NraXBfb25f c2ltdWxhdGlvbigpOwo+ID4gKwo+ID4gKwlpZ3RfZml4dHVyZSB7Cj4gPiArCQlkYXRhLmRybV9m ZCA9Cj4gPiBkcm1fb3Blbl9kcml2ZXJfbWFzdGVyKERSSVZFUl9JTlRFTCk7Cj4gPiArCj4gPiAr CQlrbXN0ZXN0X3NldF92dF9ncmFwaGljc19tb2RlKCk7Cj4gPiArCj4gPiArCQlpZ3RfcmVxdWly ZV9waXBlX2NyYygpOwo+ID4gKwkJaWd0X2Rpc3BsYXlfaW5pdCgmZGF0YS5kaXNwbGF5LCBkYXRh LmRybV9mZCk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJZm9yIChpbnQgcGlwZSA9IDA7IHBpcGUgPCBJ OTE1X01BWF9QSVBFUzsgcGlwZSsrKQo+ID4gKwkJcnVuX3Rlc3RzX2Zvcl9waXBlKCZkYXRhLCBw aXBlKTsKPiA+ICsKPiA+ICsJaWd0X2ZpeHR1cmUgewo+ID4gKwkJaWd0X2Rpc3BsYXlfZmluaSgm ZGF0YS5kaXNwbGF5KTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlpZ3RfZXhpdCgpOwo+ID4gK30KPiAK LS0gCk1pa2EgS2Fob2xhIC0gSW50ZWwgT1RDCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9pbnRlbC1nZngK