From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 2B489F44841 for ; Fri, 10 Apr 2026 11:34:02 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 8AB2710E943; Fri, 10 Apr 2026 11:34:01 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (1024-bit key; unprotected) header.d=linux.dev header.i=@linux.dev header.b="QaESeYc4"; dkim-atps=neutral Received: from out-180.mta0.migadu.com (out-180.mta0.migadu.com [91.218.175.180]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2BFE810E943 for ; Fri, 10 Apr 2026 11:34:00 +0000 (UTC) Message-ID: <8a67f5b0-6f56-484a-8ad8-564419b4e137@linux.dev> DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1775820838; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=6yw1JX6mHdNxmIMqYH0hr5zwhpPH1QklVfC4B6+9BBY=; b=QaESeYc4SheE/B1YkTl3hHPWE0SXKKI8it9lkOvlFoWZM4+bc8zN4ASLv1E8MZl/snapIt f/4QFYVGuUH0xvzu0Qty+v070XeUHagDWe7qWaE1XN1Z8ujx2LdPGjGbrEDWFl8itjWLHz rqAcwFe9HcUjyPKCY7WW0mCwJ2RknfQ= Date: Fri, 10 Apr 2026 13:33:54 +0200 MIME-Version: 1.0 Subject: Re: [PATCH v2] drm/sched: Add test suite for concurrent job submissions To: phasta@kernel.org, Tvrtko Ursulin Cc: Matthew Brost , Danilo Krummrich , =?UTF-8?Q?Christian_K=C3=B6nig?= , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org References: <20260408154947.85204-1-marco.pagani@linux.dev> <6a67c09d-d85e-45a9-90a4-125db30092d8@ursulin.net> Content-Language: en-US X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. From: Marco Pagani In-Reply-To: Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-Migadu-Flow: FLOW_OUT X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" CgpPbiAxMC8wNC8yMDI2IDExOjE5LCBQaGlsaXBwIFN0YW5uZXIgd3JvdGU6Cj4gT24gRnJpLCAy MDI2LTA0LTEwIGF0IDExOjA3ICswMjAwLCBNYXJjbyBQYWdhbmkgd3JvdGU6Cj4+Cj4+Cj4+IE9u IDA5LzA0LzIwMjYgMTc6MzUsIFR2cnRrbyBVcnN1bGluIHdyb3RlOgo+Pj4KPj4+IE9uIDA4LzA0 LzIwMjYgMTY6NDksIE1hcmNvIFBhZ2FuaSB3cm90ZToKPj4+PiBBZGQgYSBuZXcgdGVzdCBzdWl0 ZSB0byBzaW11bGF0ZSBjb25jdXJyZW50IGpvYiBzdWJtaXNzaW9ucyB0byB0aGUgRFJNCj4+Pj4g c2NoZWR1bGVyLCBhcyB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgbm90IGNvdmVyZWQgYnkgY3VycmVu dCB0ZXN0IHN1aXRlcy4KPj4+Pgo+Pj4+IFRoZSBuZXcgdGVzdCBzdWl0ZSBpbmNsdWRlcyB0d28g aW5pdGlhbCB0ZXN0IGNhc2VzOiAoaSkgYSB0ZXN0IGNhc2UgZm9yCj4+Pj4gcGFyYWxsZWwgam9i IHN1Ym1pc3Npb24gYW5kIChpaSkgYSB0ZXN0IGNhc2UgZm9yIGludGVybGVhdmVkIGpvYgo+Pj4+ IHN1Ym1pc3Npb24gYW5kIGNvbXBsZXRpb24uIEluIHRoZSBmaXJzdCB0ZXN0IGNhc2UsIHdvcmtl ciB0aHJlYWRzCj4+Pj4gY29uY3VycmVudGx5IHN1Ym1pdCBqb2JzIHRvIHRoZSBzY2hlZHVsZXIs IGFuZCB0aGVuIHRoZSB0aW1lbGluZSBpcwo+Pj4+IG1hbnVhbGx5IGFkdmFuY2VkIHRvIGNvbXBs ZXRlIHRoZW0gaW4gYnVsay4gSW4gdGhlIHNlY29uZCB0ZXN0IGNhc2UsCj4+Pj4gd29ya2VyIHRo cmVhZHMgY29uY3VycmVudGx5IHN1Ym1pdCBzZXF1ZW5jZXMgb2Ygam9icyBvZiBkaWZmZXJlbnQK Pj4+PiBkdXJhdGlvbnMgdG8gdGhlIG1vY2sgc2NoZWR1bGVyIHVzaW5nIGEgc2xpZGluZyB3aW5k b3cgdG8gYmV0dGVyIG1vZGVsCj4+Pj4gcmVhbC13b3JsZCB3b3JrbG9hZHMuIFRoZSB0aW1lbGlu ZSBpcyBhZHZhbmNlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZQo+Pj4+IGZpbmlzaGluZyBqb2JzLCBp bnRlcmxlYXZpbmcgc3VibWlzc2lvbiB3aXRoIGNvbXBsZXRpb24uCj4+Pj4KPj4+PiBTaWduZWQt b2ZmLWJ5OiBNYXJjbyBQYWdhbmkgPG1hcmNvLnBhZ2FuaUBsaW51eC5kZXY+Cj4+Pj4gLS0tCj4+ Pj4gQ2hhbmdlcyBpbiB2MjoKPj4+PiAtIEltcHJvdmVkIHRlc3QgZGVzY3JpcHRpb24KPj4+PiAt IFVzZSBtdWx0aXBsZSBqb2IgZHVyYXRpb25zIGluc3RlYWQgb2YgaGFybW9uaWMgcGVyaW9kcy9k dXJhdGlvbnMKPj4+PiAtIEltcHJvdmVkIHN1Ym1pc3Npb24gZm9yIGludGVybGVhdmVkIHRlc3Qg d2l0aCBhIHNsaWRpbmcgd2luZG93Cj4+Pj4gLSBSZW1vdmVkIHVubmVjZXNzYXJ5IGFzc2VydHMg cGVyIFR2cnRrbydzIGZlZWRiYWNrLCBidXQga2VwdCB3YWl0X3NjaGVkdWxlZAo+Pj4+IC0gQ2hh bmdlZCBwYXJhbWV0ZXIgbmFtZXMgZnJvbSBwZXJpb2QgdG8gZHVyYXRpb24gZm9yIGNsYXJpdHkK Pj4+PiAtIFVzZWQgdGVtcCB2YXJpYWJsZXMgdG8gcmVkdWNlIGxpbmUgYnJlYWtzCj4+Pj4gLS0t Cj4+Pj4gwqAgZHJpdmVycy9ncHUvZHJtL3NjaGVkdWxlci90ZXN0cy90ZXN0c19iYXNpYy5jIHwg MzU2ICsrKysrKysrKysrKysrKysrKwo+Pj4+IMKgIDEgZmlsZSBjaGFuZ2VkLCAzNTYgaW5zZXJ0 aW9ucygrKQo+Pj4+Cj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9zY2hlZHVsZXIv dGVzdHMvdGVzdHNfYmFzaWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9zY2hlZHVsZXIvdGVzdHMvdGVz dHNfYmFzaWMuYwo+Pj4+IGluZGV4IGE1YTVhMzVhODdiMC4uMTc5MWIxNTdjZmM4IDEwMDY0NAo+ Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9zY2hlZHVsZXIvdGVzdHMvdGVzdHNfYmFzaWMuYwo+ Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9zY2hlZHVsZXIvdGVzdHMvdGVzdHNfYmFzaWMuYwo+ Pj4+IEBAIC0xLDcgKzEsMTEgQEAKPj4+PiDCoCAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMAo+Pj4+IMKgIC8qIENvcHlyaWdodCAoYykgMjAyNSBWYWx2ZSBDb3Jwb3JhdGlvbiAq Lwo+Pj4+IMKgIAo+Pj4+ICsjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgo+Pj4+IMKgICNp bmNsdWRlIDxsaW51eC9kZWxheS5oPgo+Pj4+ICsjaW5jbHVkZSA8bGludXgvbWlubWF4Lmg+Cj4+ Pj4gKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+Cj4+Pj4gKyNpbmNsdWRlIDxsaW51eC93b3JrcXVl dWUuaD4KPj4+PiDCoCAKPj4+PiDCoCAjaW5jbHVkZSAic2NoZWRfdGVzdHMuaCIKPj4+PiDCoCAK Pj4+PiBAQCAtMjM1LDYgKzIzOSwzNTcgQEAgc3RhdGljIHZvaWQgZHJtX3NjaGVkX2Jhc2ljX2Nh bmNlbChzdHJ1Y3Qga3VuaXQgKnRlc3QpCj4+Pj4gwqDCoAlLVU5JVF9BU1NFUlRfRVEodGVzdCwg am9iLT5od19mZW5jZS5lcnJvciwgLUVDQU5DRUxFRCk7Cj4+Pj4gwqAgfQo+Pj4+IMKgIAo+Pj4+ ICtzdHJ1Y3Qgc2NoZWRfY29uY3VycmVudF9jb250ZXh0IHsKPj4+PiArCXN0cnVjdCBkcm1fbW9j a19zY2hlZHVsZXIgKnNjaGVkOwo+Pj4+ICsJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnN1Yl93 cTsKPj4+PiArCXN0cnVjdCBrdW5pdCAqdGVzdDsKPj4+PiArCXN0cnVjdCBjb21wbGV0aW9uIHdh aXRfZ287Cj4+Pj4gK307Cj4+Pj4gKwo+Pj4+ICtLVU5JVF9ERUZJTkVfQUNUSU9OX1dSQVBQRVIo ZHJtX21vY2tfc2NoZWRfZmluaV93cmFwLCBkcm1fbW9ja19zY2hlZF9maW5pLAo+Pj4+ICsJCQnC oMKgwqAgc3RydWN0IGRybV9tb2NrX3NjaGVkdWxlciAqKTsKPj4+PiArCj4+Pj4gK0tVTklUX0RF RklORV9BQ1RJT05fV1JBUFBFUihkcm1fbW9ja19zY2hlZF9lbnRpdHlfZnJlZV93cmFwLCBkcm1f bW9ja19zY2hlZF9lbnRpdHlfZnJlZSwKPj4+PiArCQkJwqDCoMKgIHN0cnVjdCBkcm1fbW9ja19z Y2hlZF9lbnRpdHkgKik7Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgdm9pZCBjb21wbGV0ZV9kZXN0cm95 X3dvcmtxdWV1ZSh2b2lkICpjb250ZXh0KQo+Pj4+ICt7Cj4+Pj4gKwlzdHJ1Y3Qgc2NoZWRfY29u Y3VycmVudF9jb250ZXh0ICpjdHggPSBjb250ZXh0Owo+Pj4+ICsKPj4+PiArCWNvbXBsZXRlX2Fs bCgmY3R4LT53YWl0X2dvKTsKPj4+PiArCj4+Pj4gKwlkZXN0cm95X3dvcmtxdWV1ZShjdHgtPnN1 Yl93cSk7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0YXRpYyBpbnQgZHJtX3NjaGVkX2NvbmN1cnJl bnRfaW5pdChzdHJ1Y3Qga3VuaXQgKnRlc3QpCj4+Pj4gK3sKPj4+PiArCXN0cnVjdCBzY2hlZF9j b25jdXJyZW50X2NvbnRleHQgKmN0eDsKPj4+PiArCWludCByZXQ7Cj4+Pj4gKwo+Pj4+ICsJY3R4 ID0ga3VuaXRfa3phbGxvYyh0ZXN0LCBzaXplb2YoKmN0eCksIEdGUF9LRVJORUwpOwo+Pj4+ICsJ S1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIGN0eCk7Cj4+Pj4gKwo+Pj4+ICsJaW5pdF9jb21w bGV0aW9uKCZjdHgtPndhaXRfZ28pOwo+Pj4+ICsKPj4+PiArCWN0eC0+c2NoZWQgPSBkcm1fbW9j a19zY2hlZF9uZXcodGVzdCwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwo+Pj4+ICsKPj4+PiArCXJl dCA9IGt1bml0X2FkZF9hY3Rpb25fb3JfcmVzZXQodGVzdCwgZHJtX21vY2tfc2NoZWRfZmluaV93 cmFwLCBjdHgtPnNjaGVkKTsKPj4+PiArCUtVTklUX0FTU0VSVF9FUSh0ZXN0LCByZXQsIDApOwo+ Pj4+ICsKPj4+PiArCS8qIFVzZSBhbiB1bmJvdW5kZWQgd29ya3F1ZXVlIHRvIG1heGltaXplIGpv YiBzdWJtaXNzaW9uIGNvbmN1cnJlbmN5ICovCj4+Pj4gKwljdHgtPnN1Yl93cSA9IGFsbG9jX3dv cmtxdWV1ZSgiZHJtLXNjaGVkLXN1Ym1pdHRlcnMtd3EiLCBXUV9VTkJPVU5ELAo+Pj4+ICsJCQkJ wqDCoMKgwqDCoCBXUV9VTkJPVU5EX01BWF9BQ1RJVkUpOwo+Pj4+ICsJS1VOSVRfQVNTRVJUX05P VF9OVUxMKHRlc3QsIGN0eC0+c3ViX3dxKTsKPj4+PiArCj4+Pj4gKwlyZXQgPSBrdW5pdF9hZGRf YWN0aW9uX29yX3Jlc2V0KHRlc3QsIGNvbXBsZXRlX2Rlc3Ryb3lfd29ya3F1ZXVlLCBjdHgpOwo+ Pj4+ICsJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJldCwgMCk7Cj4+Pj4gKwo+Pj4+ICsJY3R4LT50 ZXN0ID0gdGVzdDsKPj4+PiArCXRlc3QtPnByaXYgPSBjdHg7Cj4+Pj4gKwo+Pj4+ICsJcmV0dXJu IDA7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0cnVjdCBkcm1fc2NoZWRfcGFyYWxsZWxfcGFyYW1z IHsKPj4+PiArCWNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uOwo+Pj4+ICsJdW5zaWduZWQgaW50IG51 bV9qb2JzOwo+Pj4+ICsJdW5zaWduZWQgaW50IG51bV93b3JrZXJzOwo+Pj4+ICt9Owo+Pj4+ICsK Pj4+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fc2NoZWRfcGFyYWxsZWxfcGFyYW1zIGRybV9z Y2hlZF9wYXJhbGxlbF9jYXNlc1tdID0gewo+Pj4+ICsJewo+Pj4+ICsJCS5kZXNjcmlwdGlvbiA9 ICJQYXJhbGxlbCBzdWJtaXNzaW9uIG9mIG11bHRpcGxlIGpvYnMgcGVyIHdvcmtlciIsCj4+Pj4g KwkJLm51bV9qb2JzID0gOCwKPj4+PiArCQkubnVtX3dvcmtlcnMgPSAxNiwKPj4+PiArCX0sCj4+ Pj4gK307Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgdm9pZAo+Pj4+ICtkcm1fc2NoZWRfcGFyYWxsZWxf ZGVzYyhjb25zdCBzdHJ1Y3QgZHJtX3NjaGVkX3BhcmFsbGVsX3BhcmFtcyAqcGFyYW1zLCBjaGFy ICpkZXNjKQo+Pj4+ICt7Cj4+Pj4gKwlzdHJzY3B5KGRlc2MsIHBhcmFtcy0+ZGVzY3JpcHRpb24s IEtVTklUX1BBUkFNX0RFU0NfU0laRSk7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK0tVTklUX0FSUkFZ X1BBUkFNKGRybV9zY2hlZF9wYXJhbGxlbCwgZHJtX3NjaGVkX3BhcmFsbGVsX2Nhc2VzLCBkcm1f c2NoZWRfcGFyYWxsZWxfZGVzYyk7Cj4+Pgo+Pj4gQXMgbG9uZyBhcyB5b3UgZG9uJ3QgcGxhbiB0 byBhZGQgbW9yZSB0ZXN0IGNhc2VzIGFueSB0aW1lIHNvb24gdGhlIAo+Pj4gYm9pbGVyIHBsYXRl IGNvdWxkIGJlIHJlZHVjZWQgYnkgdW5vdCB1c2luZyBLVU5JVF9BUlJBWV9QQVJBTSBidXQgaXQg aXMgCj4+PiB1cCB0byB5b3UuIChTYW1lIGZvciB0aGUgb3RoZXIgdGVzdCBiZWxvdy4pCj4+Cj4+ IFJpZ2h0Lgo+Pgo+Pj4+ICsKPj4+PiArc3RydWN0IHBhcmFsbGVsX3dvcmtlciB7Cj4+Pj4gKwlz dHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKPj4+PiArCXN0cnVjdCBzY2hlZF9jb25jdXJyZW50X2Nv bnRleHQgKmN0eDsKPj4+PiArCXN0cnVjdCBkcm1fbW9ja19zY2hlZF9lbnRpdHkgKmVudGl0eTsK Pj4+PiArCXN0cnVjdCBkcm1fbW9ja19zY2hlZF9qb2IgKipqb2JzOwo+Pj4+ICsJdW5zaWduZWQg aW50IGlkOwo+Pj4+ICt9Owo+Pj4+ICsKPj4+PiArc3RhdGljIHZvaWQgZHJtX3NjaGVkX3BhcmFs bGVsX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4+Pj4gK3sKPj4+PiArCWNvbnN0 IHN0cnVjdCBkcm1fc2NoZWRfcGFyYWxsZWxfcGFyYW1zICpwYXJhbXM7Cj4+Pj4gKwlzdHJ1Y3Qg c2NoZWRfY29uY3VycmVudF9jb250ZXh0ICp0ZXN0X2N0eDsKPj4+PiArCXN0cnVjdCBwYXJhbGxl bF93b3JrZXIgKndvcmtlcjsKPj4+PiArCXVuc2lnbmVkIGludCBpOwo+Pj4+ICsKPj4+PiArCXdv cmtlciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcGFyYWxsZWxfd29ya2VyLCB3b3JrKTsK Pj4+PiArCXRlc3RfY3R4ID0gd29ya2VyLT5jdHg7Cj4+Pj4gKwlwYXJhbXMgPSB0ZXN0X2N0eC0+ dGVzdC0+cGFyYW1fdmFsdWU7Cj4+Pj4gKwo+Pj4+ICsJd2FpdF9mb3JfY29tcGxldGlvbigmdGVz dF9jdHgtPndhaXRfZ28pOwo+Pj4+ICsKPj4+PiArCWt1bml0X2luZm8odGVzdF9jdHgtPnRlc3Qs ICJQYXJhbGxlbCB3b3JrZXIgJXUgc3VibWl0dGluZyAldSBqb2JzIHN0YXJ0ZWRcbiIsCj4+Pj4g KwkJwqDCoCB3b3JrZXItPmlkLCBwYXJhbXMtPm51bV9qb2JzKTsKPj4+PiArCj4+Pj4gKwlmb3Ig KGkgPSAwOyBpIDwgcGFyYW1zLT5udW1fam9iczsgaSsrKQo+Pj4+ICsJCWRybV9tb2NrX3NjaGVk X2pvYl9zdWJtaXQod29ya2VyLT5qb2JzW2ldKTsKPj4+PiArfQo+Pj4+ICsKPj4+PiArLyoKPj4+ PiArICogU3Bhd25zIHdvcmtlcnMgdGhhdCBzdWJtaXQgYSBzZXF1ZW5jZSBvZiBqb2JzIHRvIHRo ZSBtb2NrIHNjaGVkdWxlci4KPj4+PiArICogT25jZSBhbGwgam9icyBhcmUgc3VibWl0dGVkLCB0 aGUgdGltZWxpbmUgaXMgbWFudWFsbHkgYWR2YW5jZWQuCj4+Pj4gKyAqLwo+Pj4+ICtzdGF0aWMg dm9pZCBkcm1fc2NoZWRfcGFyYWxsZWxfc3VibWl0X3Rlc3Qoc3RydWN0IGt1bml0ICp0ZXN0KQo+ Pj4+ICt7Cj4+Pj4gKwlzdHJ1Y3Qgc2NoZWRfY29uY3VycmVudF9jb250ZXh0ICpjdHggPSB0ZXN0 LT5wcml2Owo+Pj4+ICsJY29uc3Qgc3RydWN0IGRybV9zY2hlZF9wYXJhbGxlbF9wYXJhbXMgKnBh cmFtcyA9IHRlc3QtPnBhcmFtX3ZhbHVlOwo+Pj4+ICsJc3RydWN0IHBhcmFsbGVsX3dvcmtlciAq d29ya2VycywgKndvcmtlcjsKPj4+PiArCXN0cnVjdCBkcm1fbW9ja19zY2hlZF9qb2IgKmpvYjsK Pj4+PiArCXVuc2lnbmVkIGludCBpLCBqLCBjb21wbGV0ZWRfam9icywgdG90YWxfam9iczsKPj4+ PiArCWJvb2wgZG9uZTsKPj4+PiArCWludCByZXQ7Cj4+Pj4gKwo+Pj4+ICsJS1VOSVRfQVNTRVJU X0dUKHRlc3QsIHBhcmFtcy0+bnVtX3dvcmtlcnMsIDApOwo+Pj4+ICsJS1VOSVRfQVNTRVJUX0dU KHRlc3QsIHBhcmFtcy0+bnVtX2pvYnMsIDApOwo+Pj4+ICsKPj4+PiArCXdvcmtlcnMgPSBrdW5p dF9rY2FsbG9jKHRlc3QsIHBhcmFtcy0+bnVtX3dvcmtlcnMsIHNpemVvZigqd29ya2VycyksCj4+ Pj4gKwkJCQlHRlBfS0VSTkVMKTsKPj4+PiArCUtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCB3 b3JrZXJzKTsKPj4+PiArCj4+Pj4gKwkvKgo+Pj4+ICsJICogSW5pdCB3b3JrZXJzIG9ubHkgYWZ0 ZXIgYWxsIGpvYnMgYW5kIGVudGl0aWVzIGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkKPj4+PiArCSAq IGFsbG9jYXRlZC4gSW4gdGhpcyB3YXksIHRoZSBjbGVhbnVwIGxvZ2ljIGZvciB3aGVuIGFuIGFz c2VydGlvbiBmYWlsCj4+Pj4gKwkgKiBjYW4gYmUgc2ltcGxpZmllZC4KPj4+PiArCSAqLwo+Pj4+ ICsJZm9yIChpID0gMDsgaSA8IHBhcmFtcy0+bnVtX3dvcmtlcnM7IGkrKykgewo+Pj4+ICsJCXdv cmtlciA9ICZ3b3JrZXJzW2ldOwo+Pj4+ICsJCXdvcmtlci0+aWQgPSBpOwo+Pj4+ICsJCXdvcmtl ci0+Y3R4ID0gY3R4Owo+Pj4+ICsJCXdvcmtlci0+ZW50aXR5ID0gZHJtX21vY2tfc2NoZWRfZW50 aXR5X25ldyh0ZXN0LAo+Pj4+ICsJCQkJCQkJwqDCoCBEUk1fU0NIRURfUFJJT1JJVFlfTk9STUFM LAo+Pj4+ICsJCQkJCQkJwqDCoCBjdHgtPnNjaGVkKTsKPj4+PiArCj4+Pj4gKwkJcmV0ID0ga3Vu aXRfYWRkX2FjdGlvbl9vcl9yZXNldCh0ZXN0LCBkcm1fbW9ja19zY2hlZF9lbnRpdHlfZnJlZV93 cmFwLAo+Pj4+ICsJCQkJCQl3b3JrZXItPmVudGl0eSk7Cj4+Pj4gKwkJS1VOSVRfQVNTRVJUX0VR KHRlc3QsIHJldCwgMCk7Cj4+Pj4gKwo+Pj4+ICsJCXdvcmtlci0+am9icyA9IGt1bml0X2tjYWxs b2ModGVzdCwgcGFyYW1zLT5udW1fam9icywKPj4+PiArCQkJCQnCoMKgwqDCoCBzaXplb2YoKndv cmtlci0+am9icyksIEdGUF9LRVJORUwpOwo+Pj4+ICsJCUtVTklUX0FTU0VSVF9OT1RfTlVMTCh0 ZXN0LCB3b3JrZXItPmpvYnMpOwo+Pj4+ICsKPj4+PiArCQlmb3IgKGogPSAwOyBqIDwgcGFyYW1z LT5udW1fam9iczsgaisrKSB7Cj4+Pj4gKwkJCWpvYiA9IGRybV9tb2NrX3NjaGVkX2pvYl9uZXco dGVzdCwgd29ya2VyLT5lbnRpdHkpOwo+Pj4+ICsJCQl3b3JrZXItPmpvYnNbal0gPSBqb2I7Cj4+ Pj4gKwkJfQo+Pj4+ICsJfQo+Pj4+ICsKPj4+PiArCWZvciAoaSA9IDA7IGkgPCBwYXJhbXMtPm51 bV93b3JrZXJzOyBpKyspIHsKPj4+PiArCQl3b3JrZXIgPSAmd29ya2Vyc1tpXTsKPj4+PiArCQlJ TklUX1dPUksoJndvcmtlci0+d29yaywgZHJtX3NjaGVkX3BhcmFsbGVsX3dvcmtlcik7Cj4+Pj4g KwkJcXVldWVfd29yayhjdHgtPnN1Yl93cSwgJndvcmtlci0+d29yayk7Cj4+Pj4gKwl9Cj4+Pj4g Kwo+Pj4+ICsJY29tcGxldGVfYWxsKCZjdHgtPndhaXRfZ28pOwo+Pj4+ICsJZmx1c2hfd29ya3F1 ZXVlKGN0eC0+c3ViX3dxKTsKPj4+PiArCj4+Pj4gKwlmb3IgKGkgPSAwOyBpIDwgcGFyYW1zLT5u dW1fd29ya2VyczsgaSsrKSB7Cj4+Pj4gKwkJd29ya2VyID0gJndvcmtlcnNbaV07Cj4+Pj4gKwkJ Zm9yIChqID0gMDsgaiA8IHBhcmFtcy0+bnVtX2pvYnM7IGorKykgewo+Pj4+ICsJCQlqb2IgPSB3 b3JrZXItPmpvYnNbal07Cj4+Pj4gKwkJCWRvbmUgPSBkcm1fbW9ja19zY2hlZF9qb2Jfd2FpdF9z Y2hlZHVsZWQoam9iLCBIWik7Cj4+Pj4gKwkJCUtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIGRvbmUp Owo+Pj4+ICsJCX0KPj4+PiArCX0KPj4+PiArCj4+Pj4gKwl0b3RhbF9qb2JzID0gcGFyYW1zLT5u dW1fd29ya2VycyAqIHBhcmFtcy0+bnVtX2pvYnM7Cj4+Pj4gKwljb21wbGV0ZWRfam9icyA9IGRy bV9tb2NrX3NjaGVkX2FkdmFuY2UoY3R4LT5zY2hlZCwgdG90YWxfam9icyk7Cj4+Pj4gKwlLVU5J VF9FWFBFQ1RfRVEodGVzdCwgY29tcGxldGVkX2pvYnMsIHRvdGFsX2pvYnMpOwo+Pj4+ICsKPj4+ PiArCWZvciAoaSA9IDA7IGkgPCBwYXJhbXMtPm51bV93b3JrZXJzOyBpKyspIHsKPj4+PiArCQl3 b3JrZXIgPSAmd29ya2Vyc1tpXTsKPj4+PiArCQlmb3IgKGogPSAwOyBqIDwgcGFyYW1zLT5udW1f am9iczsgaisrKSB7Cj4+Pj4gKwkJCWpvYiA9IHdvcmtlci0+am9ic1tqXTsKPj4+PiArCQkJZG9u ZSA9IGRybV9tb2NrX3NjaGVkX2pvYl93YWl0X2ZpbmlzaGVkKGpvYiwgSFopOwo+Pj4+ICsJCQlL VU5JVF9FWFBFQ1RfVFJVRSh0ZXN0LCBkb25lKTsKPj4+PiArCQl9Cj4+Pj4gKwl9Cj4+Pj4gK30K Pj4+PiArCj4+Pj4gK3N0cnVjdCBkcm1fc2NoZWRfaW50ZXJsZWF2ZWRfcGFyYW1zIHsKPj4+PiAr CWNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uOwo+Pj4+ICsJdW5zaWduZWQgaW50IHRlc3RfZHVyYXRp b25fbXM7Cj4+Pj4gKwl1bnNpZ25lZCBpbnQgam9iX2Jhc2VfZHVyYXRpb25fdXM7Cj4+Pj4gKwl1 bnNpZ25lZCBpbnQgbnVtX3dvcmtlcnM7Cj4+Pj4gKwl1bnNpZ25lZCBpbnQgbnVtX2luX2ZsaWdo dF9qb2JzOwo+Pj4+ICt9Owo+Pj4+ICsKPj4+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fc2No ZWRfaW50ZXJsZWF2ZWRfcGFyYW1zIGRybV9zY2hlZF9pbnRlcmxlYXZlZF9jYXNlc1tdID0gewo+ Pj4+ICsJewo+Pj4+ICsJCS5kZXNjcmlwdGlvbiA9ICJJbnRlcmxlYXZlZCBzdWJtaXNzaW9uIG9m IG11bHRpcGxlIGpvYnMgcGVyIHdvcmtlciIsCj4+Pj4gKwkJLnRlc3RfZHVyYXRpb25fbXMgPSAx MDAwLAo+Pj4+ICsJCS5qb2JfYmFzZV9kdXJhdGlvbl91cyA9IDEwMCwKPj4+PiArCQkubnVtX3dv cmtlcnMgPSAxNiwKPj4+PiArCQkubnVtX2luX2ZsaWdodF9qb2JzID0gOCwKPj4+PiArCX0sCj4+ Pj4gK307Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgdm9pZAo+Pj4+ICtkcm1fc2NoZWRfaW50ZXJsZWF2 ZWRfZGVzYyhjb25zdCBzdHJ1Y3QgZHJtX3NjaGVkX2ludGVybGVhdmVkX3BhcmFtcyAqcGFyYW1z LCBjaGFyICpkZXNjKQo+Pj4+ICt7Cj4+Pj4gKwlzdHJzY3B5KGRlc2MsIHBhcmFtcy0+ZGVzY3Jp cHRpb24sIEtVTklUX1BBUkFNX0RFU0NfU0laRSk7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK0tVTklU X0FSUkFZX1BBUkFNKGRybV9zY2hlZF9pbnRlcmxlYXZlZCwgZHJtX3NjaGVkX2ludGVybGVhdmVk X2Nhc2VzLAo+Pj4+ICsJCcKgIGRybV9zY2hlZF9pbnRlcmxlYXZlZF9kZXNjKTsKPj4+PiArCj4+ Pj4gK3N0cnVjdCBpbnRlcmxlYXZlZF93b3JrZXIgewo+Pj4+ICsJc3RydWN0IHdvcmtfc3RydWN0 IHdvcms7Cj4+Pj4gKwlzdHJ1Y3Qgc2NoZWRfY29uY3VycmVudF9jb250ZXh0ICpjdHg7Cj4+Pj4g KwlzdHJ1Y3QgZHJtX21vY2tfc2NoZWRfZW50aXR5ICplbnRpdHk7Cj4+Pj4gKwlzdHJ1Y3QgZHJt X21vY2tfc2NoZWRfam9iICoqam9iczsKPj4+PiArCXVuc2lnbmVkIGludCBpZDsKPj4+PiArCXVu c2lnbmVkIGludCBqb2JfY291bnQ7Cj4+Pj4gKwl1bnNpZ25lZCBpbnQgam9iX2R1cmF0aW9uX3Vz Owo+Pj4+ICt9Owo+Pj4+ICsKPj4+PiArc3RhdGljIHZvaWQgZHJtX3NjaGVkX2ludGVybGVhdmVk X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4+Pj4gK3sKPj4+PiArCXN0cnVjdCBz Y2hlZF9jb25jdXJyZW50X2NvbnRleHQgKnRlc3RfY3R4Owo+Pj4+ICsJY29uc3Qgc3RydWN0IGRy bV9zY2hlZF9pbnRlcmxlYXZlZF9wYXJhbXMgKnBhcmFtczsKPj4+PiArCXN0cnVjdCBpbnRlcmxl YXZlZF93b3JrZXIgKndvcmtlcjsKPj4+PiArCXVuc2lnbmVkIGludCBpLCBqLCBtYXhfaW5fZmxp Z2h0X2pvYjsKPj4+PiArCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKPj4+PiArCWJvb2wgZG9uZTsK Pj4+PiArCj4+Pj4gKwl3b3JrZXIgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGludGVybGVh dmVkX3dvcmtlciwgd29yayk7Cj4+Pj4gKwl0ZXN0X2N0eCA9IHdvcmtlci0+Y3R4Owo+Pj4+ICsJ cGFyYW1zID0gdGVzdF9jdHgtPnRlc3QtPnBhcmFtX3ZhbHVlOwo+Pj4+ICsKPj4+PiArCXdhaXRf Zm9yX2NvbXBsZXRpb24oJnRlc3RfY3R4LT53YWl0X2dvKTsKPj4+PiArCj4+Pj4gKwlrdW5pdF9p bmZvKHRlc3RfY3R4LT50ZXN0LCAiV29ya2VyICV1IHN1Ym1pdHRpbmcgJXUgam9icyBvZiAldSB1 cyBzdGFydGVkXG4iLAo+Pj4+ICsJCcKgwqAgd29ya2VyLT5pZCwgd29ya2VyLT5qb2JfY291bnQs IHdvcmtlci0+am9iX2R1cmF0aW9uX3VzKTsKPj4+PiArCj4+Pj4gKwl0aW1lb3V0ID0gbXNlY3Nf dG9famlmZmllcyhwYXJhbXMtPnRlc3RfZHVyYXRpb25fbXMgKiAyKTsKPj4+PiArCj4+Pj4gKwkv KiBGaWxsIHRoZSBzdWJtaXNzaW9uIHdpbmRvdyAqLwo+Pj4+ICsJbWF4X2luX2ZsaWdodF9qb2Ig PSBtaW4od29ya2VyLT5qb2JfY291bnQsIHBhcmFtcy0+bnVtX2luX2ZsaWdodF9qb2JzKTsKPj4+ PiArCWZvciAoaSA9IDA7IGkgPCBtYXhfaW5fZmxpZ2h0X2pvYjsgaSsrKQo+Pj4+ICsJCWRybV9t b2NrX3NjaGVkX2pvYl9zdWJtaXQod29ya2VyLT5qb2JzW2ldKTsKPj4+PiArCj4+Pj4gKwkvKiBL ZWVwIHRoZSB3aW5kb3cgZnVsbCBieSBzdWJtaXR0aW5nIGEgbmV3IGpvYiBhdCBvbmNlIHVudGls IGRvbmUgKi8KPj4+PiArCWZvciAoaSA9IDA7IGkgPCB3b3JrZXItPmpvYl9jb3VudDsgaSsrKSB7 Cj4+Pj4gKwkJZG9uZSA9IGRybV9tb2NrX3NjaGVkX2pvYl93YWl0X2ZpbmlzaGVkKHdvcmtlci0+ am9ic1tpXSwgdGltZW91dCk7Cj4+Pj4gKwkJaWYgKCFkb25lKQo+Pj4+ICsJCQlrdW5pdF9pbmZv KHRlc3RfY3R4LT50ZXN0LCAiSm9iICV1IG9mIHdvcmtlciAldSB0aW1lZCBvdXRcbiIsCj4+Pj4g KwkJCQnCoMKgIGksIHdvcmtlci0+aWQpOwo+Pj4+ICsKPj4+PiArCQlqID0gaSArIG1heF9pbl9m bGlnaHRfam9iOwo+Pj4+ICsJCWlmIChqIDwgd29ya2VyLT5qb2JfY291bnQpCj4+Pj4gKwkJCWRy bV9tb2NrX3NjaGVkX2pvYl9zdWJtaXQod29ya2VyLT5qb2JzW2pdKTsKPj4+PiArCX0KPj4+Cj4+ PiBUaGUgbG9vcCBtYXliZSBpc24ndCB0aGUgbW9zdCBzdHJhaWdodC1mb3J3YXJkIGJ1dCBldmVu dHVhbGx5IGxvb2tlZCB0byAKPj4+IG1lIGxpa2UgaXQgd2lsbCBkbyB3aGF0IGl0IHdhbnRzLgo+ Pgo+PiBJIHdpbGwgYWRkcmVzcyB0aGlzIGluIG15IHJlcGx5IHRvIHlvdXIgbmV4dCBtZXNzYWdl Lgo+Pgo+Pj4gbnVtX2luX2ZsaWdodF9qb2JzIGFzIGEgdGVzdCBwYXJhbWV0ZXIgaXMgcGVyaGFw cyBhcmJpdHJhcnk/IEkgYW0gbm90IAo+Pj4gc3VyZSB3aGF0IGl0IGFpbXMgdG8gYWNoaWV2ZSB2 ZXJzdXMgaWYgd29ya2VycyB3b3VsZCBqdXN0IGJlIHN1Ym1pdHRpbmcgCj4+PiBvbmUgYnkgb25l LCBvciBwZXJoYXBzIHR3byBieSB0d28sIGluIGJvdGggY2FzZXMgbG9vcHMgd291bGQgYmUgc2lt cGxlci4KPj4KPj4gSSB0aGluayBpdCdzIGJldHRlciB0byBoYXZlIGl0IGFzIGEgcGFyYW1ldGVy IHJhdGhlciB0aGFuIGhhcmRjb2RlZCBpbgo+PiB0aGUgdGVzdC4KPiAKPiBUaGUgdGVzdHMgYXJl IGJhc2ljYWxseSBoZXJlIHRvIGhlbHAgdXMgZGV2ZWxvcGVycyBwZXJjdXNzIHRoZQo+IHNjaGVk dWxlci4gU28gSSB3b3VsZCBzYXkgd2UgZG9uJ3QgbmVlZCB0byBwdXQgdGhhYWFhdCBtdWNoIGZv Y3VzIG9uCj4gc3VjaCBkZXRhaWxzLiBQYXJhbWV0ZXIgc291bmRzIG5pY2UgdG8gbWUsIGJ1dCBo YXJkY29kZWQgd291bGRuJ3QgYnJlYWsKPiBhbnkgYm9uZXMgZWl0aGVyLgo+IAo+PiDCoAo+Pj4g T3IgZXZlbiBpZiBudW1faW5fZmxpZ2h0X2pvYnMgd291bGQgcGVyaGFwcyBiZSBhdXRvbWF0aWNh bGx5IGRlcml2ZWQgCj4+PiBmcm9tIHRoZSB3b3JrZXItPmlkPyBJZiB0aGUgZ29hbCBpcyB0byBz aW11bGF0ZSBxdWV1ZSBkZXB0aCBpdCBzb3VuZHMgCj4+PiBnb29kIHRvIHZhcnkgaXQuCj4+Cj4+ IFRoYXQncyBhIG5pY2UgaWRlYSwgYnV0IEkgdGhpbmsgaGF2aW5nIGEgZml4ZWQgbnVtYmVyIG9m IGluX2ZsaWdodF9qb2JzCj4+IGV4cHJlc3NlZCBhcyBhIHBhcmFtZXRlciBpcyBhIGdvb2QgYmFs YW5jZSBiZXR3ZWVuIHRlc3QgZXhwcmVzc2l2ZW5lc3MKPj4gYW5kIHNpbXBsaWNpdHkuCj4gCj4g SSB0aGluayB0aG9zZSBhcmUgdmVyeSBkZXRhaWxlZCBxdWVzdGlvbnMgdGhhdCBvbmUgcHJvYmFi bHkgd2FudHMgdG8KPiBhZGRyZXNzIGluIGEgaHlwb3RoZXRpY2FsICJ0ZXN0IHBheWxvYWRzIG1v cmUgcmVhbGlzdGljYWxseSItcGF0Y2guCj4gCj4gVGhpcyBwYXRjaCBvdmVyYWxsIGxvb2tzIHZl cnkgZ29vZCBhbmQgdGlkeSB0byBtZSBhbmQgSSB0aGluayB3ZQo+IHNvb25pc2ggd2FudCB0byB0 YWtlIGl0IGFzIHRoZSAicHJvdmlkZSBncm91bmQgbGF5ZXIgZm9yIGNvbmN1cnJlbnQgam9iCj4g c3VibWlzc2lvbiB0ZXN0aW5nIi1wYXRjaC4KPiAKPiBTbyB1bmxlc3Mgc29tZW9uZSBzZWVzIG1h am9yIGJsb2NrZXJzIGxpa2UgYnVncywgSSB3b3VsZCBsaWtlIHRvIHRha2UKPiBpdCBpbiBzb29u aXNoLCBzaW5jZSBpdCdzIGJlZW4gb24tbGlzdCBmb3IgcXVpdGUgc29tZSB0aW1lIG5vdyBhbmQg d2UKPiBzZWVtIHRvIGxvb3NlIG91cnNlbHZlcyBpbiBkZWVwLWlzaCBkZXRhaWxzIDpdCj4gCj4+ Cj4+PiBCdXQgdGhlc2UgYXJlIG1pbm9yIHBvaW50cyBhbmQgdXAgdG8geW91LiBUaGUgdGVzdCBu b3cgbG9va3MgcGFzc2FibHkgCj4+PiB0aWR5IGFzIGl0IGlzLgo+Pgo+PiBUaGFua3MgZm9yIHRo ZSB0aWR5IGVuY291cmFnZW1lbnQuCj4+Cj4+PiBBaCB3YWl0LCBwbGVhc2UgYWxzbyBjaGVjayBp ZiB0aGlzIG9uZSBuZWVkcyB0byBiZSBtYXJrZWQgYXMgInNsb3ciCj4+PiBrdW5pdCB0ZXN0LiBB RkFJUiBhbGwgdGhhdCBhcmUgZXhwZWN0ZWQgdG8gdGFrZSBtb3JlIHRoYW4gMXMgbmVlZCB0aGF0 Lgo+Pgo+PiBJJ3ZlIHJ1biBpdCB3aXRoIFVNTCBhbmQgUUVNVSAoYXJjaD14ODZfNjQpIGFuZCB3 aXRoIHRoZSBjdXJyZW50IHBhcmFtZXRlcnMKPj4ga3VuaXQgZG9lcyBub3QgcmVjb21tZW5kIHRv IG1hcmsgaXQgYXMgc2xvdy4gQnV0IG1heWJlIHlvdSBhcmUgcmlnaHQsIGl0J3MKPj4gc2FmZXIg dG8gbWFyayBpdCBhcyBzbG93IGFueXdheS4KPiAKPiArMQo+IAo+IElmIHlvdSBjYW4gcHJvdmlk ZSB0aGF0IGluIHYzLCBpdCB3b3VsZCBzZWVtIHdlJ3JlIGdvb2QgdG8gZ28uCgpTdXJlLCBJJ2xs IGFkZHJlc3MgdGhlIGNvbW1lbnRzIGFuZCB0aGVuIHByZXBhcmUgYSB2My4KClRoYW5rcywKTWFy Y28KCj4+Pj4gK30KPj4+PiArCj4+Pj4gKy8qCj4+Pj4gKyAqIFNwYXducyB3b3JrZXJzIHRoYXQg c3VibWl0IGEgc2VxdWVuY2Ugb2Ygam9icyB0byB0aGUgbW9jayBzY2hlZHVsZXIuIEpvYgo+Pj4+ ICsgKiBkdXJhdGlvbnMgYXJlIGNob3NlbiBhcyBtdWx0aXBsZXMgb2YgYSBiYXNlIGR1cmF0aW9u IHZhbHVlIHNwZWNpZmllZCBhcwo+Pj4+ICsgKiBhIHRlc3QgcGFyYW1ldGVyLiBTaW5jZSB0aGUg c2NoZWR1bGVyIHNlcmlhbGl6ZXMgam9icyBmcm9tIGFsbCB3b3JrZXJzLAo+Pj4+ICsgKiB0aGUg dG90YWwgdGVzdCBkdXJhdGlvbiBidWRnZXQgaXMgZGl2aWRlZCBpbnRvIGVxdWFsIHNoYXJlcyBh bW9uZyB3b3JrZXJzLgo+Pj4+ICsgKiBUaGVzZSBzaGFyZXMgYXJlIHRoZW4gdXNlZCB0byBjb21w dXRlIHRoZSBudW1iZXIgb2Ygam9icyB0aGF0IGVhY2ggd29ya2VyCj4+Pj4gKyAqIGNhbiBzdWJt aXQKPj4+PiArICovCj4+Pj4gK3N0YXRpYyB2b2lkIGRybV9zY2hlZF9pbnRlcmxlYXZlZF9zdWJt aXRfdGVzdChzdHJ1Y3Qga3VuaXQgKnRlc3QpCj4+Pj4gK3sKPj4+PiArCWNvbnN0IHN0cnVjdCBk cm1fc2NoZWRfaW50ZXJsZWF2ZWRfcGFyYW1zICpwYXJhbXMgPSB0ZXN0LT5wYXJhbV92YWx1ZTsK Pj4+PiArCXN0cnVjdCBzY2hlZF9jb25jdXJyZW50X2NvbnRleHQgKmN0eCA9IHRlc3QtPnByaXY7 Cj4+Pj4gKwlzdHJ1Y3QgaW50ZXJsZWF2ZWRfd29ya2VyICp3b3JrZXJzLCAqd29ya2VyOwo+Pj4+ ICsJc3RydWN0IGRybV9tb2NrX3NjaGVkX2pvYiAqam9iOwo+Pj4+ICsJdW5zaWduZWQgaW50IHdv cmtlcl9zaGFyZV91czsKPj4+PiArCXVuc2lnbmVkIGludCBpLCBqOwo+Pj4+ICsJYm9vbCBkb25l Owo+Pj4+ICsJaW50IHJldDsKPj4+PiArCj4+Pj4gKwlLVU5JVF9BU1NFUlRfR1QodGVzdCwgcGFy YW1zLT5udW1fd29ya2VycywgMCk7Cj4+Pj4gKwlLVU5JVF9BU1NFUlRfR1QodGVzdCwgcGFyYW1z LT5qb2JfYmFzZV9kdXJhdGlvbl91cywgMCk7Cj4+Pj4gKwo+Pj4+ICsJd29ya2VycyA9IGt1bml0 X2tjYWxsb2ModGVzdCwgcGFyYW1zLT5udW1fd29ya2Vycywgc2l6ZW9mKCp3b3JrZXJzKSwKPj4+ PiArCQkJCUdGUF9LRVJORUwpOwo+Pj4+ICsJS1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHdv cmtlcnMpOwo+Pj4+ICsKPj4+PiArCS8qIERpdmlkZSB0aGUgYXZhaWxhYmxlIHRlc3QgdGltZSBp bnRvIGVxdWFsIHNoYXJlcyBhbW9uZyB0aGUgd29ya2VycyAqLwo+Pj4+ICsJd29ya2VyX3NoYXJl X3VzID0gKHBhcmFtcy0+dGVzdF9kdXJhdGlvbl9tcyAqIFVTRUNfUEVSX01TRUMpIC8KPj4+PiAr CQkJwqAgcGFyYW1zLT5udW1fd29ya2VyczsKPj4+PiArCj4+Pj4gKwkvKgo+Pj4+ICsJICogSW5p dCB3b3JrZXJzIG9ubHkgYWZ0ZXIgYWxsIGpvYnMgYW5kIGVudGl0aWVzIGhhdmUgYmVlbiBzdWNj ZXNzZnVsbHkKPj4+PiArCSAqIGFsbG9jYXRlZC4gSW4gdGhpcyB3YXksIHRoZSBjbGVhbnVwIGxv Z2ljIGZvciB3aGVuIGFuIGFzc2VydGlvbiBmYWlscwo+Pj4+ICsJICogY2FuIGJlIHNpbXBsaWZp ZWQuCj4+Pj4gKwkgKi8KPj4+PiArCWZvciAoaSA9IDA7IGkgPCBwYXJhbXMtPm51bV93b3JrZXJz OyBpKyspIHsKPj4+PiArCQl3b3JrZXIgPSAmd29ya2Vyc1tpXTsKPj4+PiArCQl3b3JrZXItPmlk ID0gaTsKPj4+PiArCQl3b3JrZXItPmN0eCA9IGN0eDsKPj4+PiArCj4+Pj4gKwkJd29ya2VyLT5q b2JfZHVyYXRpb25fdXMgPSBwYXJhbXMtPmpvYl9iYXNlX2R1cmF0aW9uX3VzICogKGkgKyAxKTsK Pj4+PiArCQl3b3JrZXItPmpvYl9jb3VudCA9IHdvcmtlcl9zaGFyZV91cyAvIHdvcmtlci0+am9i X2R1cmF0aW9uX3VzOwo+Pj4+ICsJCXdvcmtlci0+am9iX2NvdW50ID0gbWF4KDFVLCB3b3JrZXIt PmpvYl9jb3VudCk7Cj4+Pj4gKwo+Pj4+ICsJCXdvcmtlci0+ZW50aXR5ID0gZHJtX21vY2tfc2No ZWRfZW50aXR5X25ldyh0ZXN0LAo+Pj4+ICsJCQkJCQkJwqDCoCBEUk1fU0NIRURfUFJJT1JJVFlf Tk9STUFMLAo+Pj4+ICsJCQkJCQkJwqDCoCBjdHgtPnNjaGVkKTsKPj4+PiArCj4+Pj4gKwkJcmV0 ID0ga3VuaXRfYWRkX2FjdGlvbl9vcl9yZXNldCh0ZXN0LCBkcm1fbW9ja19zY2hlZF9lbnRpdHlf ZnJlZV93cmFwLAo+Pj4+ICsJCQkJCQl3b3JrZXItPmVudGl0eSk7Cj4+Pj4gKwkJS1VOSVRfQVNT RVJUX0VRKHRlc3QsIHJldCwgMCk7Cj4+Pj4gKwo+Pj4+ICsJCXdvcmtlci0+am9icyA9IGt1bml0 X2tjYWxsb2ModGVzdCwgd29ya2VyLT5qb2JfY291bnQsCj4+Pj4gKwkJCQkJwqDCoMKgwqAgc2l6 ZW9mKCp3b3JrZXItPmpvYnMpLCBHRlBfS0VSTkVMKTsKPj4+PiArCQlLVU5JVF9BU1NFUlRfTk9U X05VTEwodGVzdCwgd29ya2VyLT5qb2JzKTsKPj4+PiArCj4+Pj4gKwkJZm9yIChqID0gMDsgaiA8 IHdvcmtlci0+am9iX2NvdW50OyBqKyspIHsKPj4+PiArCQkJam9iID0gZHJtX21vY2tfc2NoZWRf am9iX25ldyh0ZXN0LCB3b3JrZXItPmVudGl0eSk7Cj4+Pj4gKwkJCWRybV9tb2NrX3NjaGVkX2pv Yl9zZXRfZHVyYXRpb25fdXMoam9iLCB3b3JrZXItPmpvYl9kdXJhdGlvbl91cyk7Cj4+Pj4gKwo+ Pj4+ICsJCQl3b3JrZXItPmpvYnNbal0gPSBqb2I7Cj4+Pj4gKwkJfQo+Pj4+ICsJfQo+Pj4+ICsK Pj4+PiArCWZvciAoaSA9IDA7IGkgPCBwYXJhbXMtPm51bV93b3JrZXJzOyBpKyspIHsKPj4+PiAr CQl3b3JrZXIgPSAmd29ya2Vyc1tpXTsKPj4+PiArCQlJTklUX1dPUksoJndvcmtlci0+d29yaywg ZHJtX3NjaGVkX2ludGVybGVhdmVkX3dvcmtlcik7Cj4+Pj4gKwkJcXVldWVfd29yayhjdHgtPnN1 Yl93cSwgJndvcmtlci0+d29yayk7Cj4+Pj4gKwl9Cj4+Pj4gKwo+Pj4+ICsJY29tcGxldGVfYWxs KCZjdHgtPndhaXRfZ28pOwo+Pj4+ICsJZmx1c2hfd29ya3F1ZXVlKGN0eC0+c3ViX3dxKTsKPj4+ PiArCj4+Pj4gKwlmb3IgKGkgPSAwOyBpIDwgcGFyYW1zLT5udW1fd29ya2VyczsgaSsrKSB7Cj4+ Pj4gKwkJd29ya2VyID0gJndvcmtlcnNbaV07Cj4+Pj4gKwkJZm9yIChqID0gMDsgaiA8IHdvcmtl ci0+am9iX2NvdW50OyBqKyspIHsKPj4+PiArCQkJam9iID0gd29ya2VyLT5qb2JzW2pdOwo+Pj4+ ICsJCQlkb25lID0gZHJtX21vY2tfc2NoZWRfam9iX2lzX2ZpbmlzaGVkKGpvYik7Cj4+Pj4gKwkJ CUtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIGRvbmUpOwo+Pj4+ICsJCX0KPj4+PiArCX0KPj4+PiAr fQo+Pj4+ICsKPj4+PiArc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGRybV9zY2hlZF9jb25jdXJy ZW50X3Rlc3RzW10gPSB7Cj4+Pj4gKwlLVU5JVF9DQVNFX1BBUkFNKGRybV9zY2hlZF9wYXJhbGxl bF9zdWJtaXRfdGVzdCwgZHJtX3NjaGVkX3BhcmFsbGVsX2dlbl9wYXJhbXMpLAo+Pj4+ICsJS1VO SVRfQ0FTRV9QQVJBTShkcm1fc2NoZWRfaW50ZXJsZWF2ZWRfc3VibWl0X3Rlc3QsIGRybV9zY2hl ZF9pbnRlcmxlYXZlZF9nZW5fcGFyYW1zKSwKPj4+PiArCXt9Cj4+Pj4gK307Cj4+Pj4gKwo+Pj4+ ICtzdGF0aWMgc3RydWN0IGt1bml0X3N1aXRlIGRybV9zY2hlZF9jb25jdXJyZW50ID0gewo+Pj4+ ICsJLm5hbWUgPSAiZHJtX3NjaGVkX2NvbmN1cnJlbnRfdGVzdHMiLAo+Pj4+ICsJLmluaXQgPSBk cm1fc2NoZWRfY29uY3VycmVudF9pbml0LAo+Pj4+ICsJLnRlc3RfY2FzZXMgPSBkcm1fc2NoZWRf Y29uY3VycmVudF90ZXN0cywKPj4+PiArfTsKPj4+PiArCj4+Pj4gwqAgc3RhdGljIHN0cnVjdCBr dW5pdF9jYXNlIGRybV9zY2hlZF9jYW5jZWxfdGVzdHNbXSA9IHsKPj4+PiDCoMKgCUtVTklUX0NB U0UoZHJtX3NjaGVkX2Jhc2ljX2NhbmNlbCksCj4+Pj4gwqDCoAl7fQo+Pj4+IEBAIC01NTYsNiAr OTExLDcgQEAgc3RhdGljIHN0cnVjdCBrdW5pdF9zdWl0ZSBkcm1fc2NoZWRfY3JlZGl0cyA9IHsK Pj4+PiDCoCB9Owo+Pj4+IMKgIAo+Pj4+IMKgIGt1bml0X3Rlc3Rfc3VpdGVzKCZkcm1fc2NoZWRf YmFzaWMsCj4+Pj4gKwkJwqAgJmRybV9zY2hlZF9jb25jdXJyZW50LAo+Pj4+IMKgwqAJCcKgICZk cm1fc2NoZWRfdGltZW91dCwKPj4+PiDCoMKgCQnCoCAmZHJtX3NjaGVkX2NhbmNlbCwKPj4+PiDC oMKgCQnCoCAmZHJtX3NjaGVkX3ByaW9yaXR5LAo+Pj4KPj4KPiAKCg==