From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4DAAA6E0FC for ; Wed, 7 Feb 2018 09:46:18 +0000 (UTC) References: <20180201153914.74639-1-maarten.lankhorst@linux.intel.com> <20180201153914.74639-10-maarten.lankhorst@linux.intel.com> <1517993743.14464.1.camel@intel.com> From: Maarten Lankhorst Message-ID: Date: Wed, 7 Feb 2018 10:46:15 +0100 MIME-Version: 1.0 In-Reply-To: <1517993743.14464.1.camel@intel.com> Content-Language: en-US Subject: Re: [igt-dev] [PATCH i-g-t 9/9] tests/kms_rotation_crc: Perform lazy cleanup and require atomic. 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: mika.kahola@intel.com, igt-dev@lists.freedesktop.org List-ID: T3AgMDctMDItMTggb20gMDk6NTUgc2NocmVlZiBNaWthIEthaG9sYToKPiBPbiBUaHUsIDIwMTgt MDItMDEgYXQgMTY6MzkgKzAxMDAsIE1hYXJ0ZW4gTGFua2hvcnN0IHdyb3RlOgo+PiBUaGlzIHdv bid0IGNsZWFuIHVwIHJlc291cmNlcyBiZXR3ZWVuIHN1YnRlc3RzLCBzbyBpZiBzdWJ0ZXN0cyBm YWlsCj4+IHRoZSBuZXh0IHN1YnRlc3Qgd2lsbCBjbGVhbiB1cCBldmVyeXRoaW5nLiBUaGlzIGFs bG93cyBhbGwgc3VidGVzdHMKPj4gZXZlbiBpZiBvbmUgZmFpbHMuCj4+Cj4+IFNpZ25lZC1vZmYt Ynk6IE1hYXJ0ZW4gTGFua2hvcnN0IDxtYWFydGVuLmxhbmtob3JzdEBsaW51eC5pbnRlbC5jb20+ Cj4+IC0tLQo+PiDCoHRlc3RzL2ttc19yb3RhdGlvbl9jcmMuYyB8IDIxMyArKysrKysrKysrKysr KystLS0tLS0tLS0tLS0tLS0tLS0tLQo+PiAtLS0tLS0tLS0tLS0KPj4gwqAxIGZpbGUgY2hhbmdl ZCwgNjYgaW5zZXJ0aW9ucygrKSwgMTQ3IGRlbGV0aW9ucygtKQo+Pgo+PiBkaWZmIC0tZ2l0IGEv dGVzdHMva21zX3JvdGF0aW9uX2NyYy5jIGIvdGVzdHMva21zX3JvdGF0aW9uX2NyYy5jCj4+IGlu ZGV4IDUyYTg1ZmI2MmY5Zi4uYTBmYjczNGQwMmY2IDEwMDY0NAo+PiAtLS0gYS90ZXN0cy9rbXNf cm90YXRpb25fY3JjLmMKPj4gKysrIGIvdGVzdHMva21zX3JvdGF0aW9uX2NyYy5jCj4+IEBAIC0z Myw3ICszMyw2IEBAIHR5cGVkZWYgc3RydWN0IHsKPj4gwqAJc3RydWN0IGlndF9mYiBmYjsKPj4g wqAJc3RydWN0IGlndF9mYiBmYl9yZWZlcmVuY2U7Cj4+IMKgCXN0cnVjdCBpZ3RfZmIgZmJfdW5y b3RhdGVkOwo+PiAtCXN0cnVjdCBpZ3RfZmIgZmJfbW9kZXNldDsKPj4gwqAJc3RydWN0IGlndF9m YiBmYl9mbGlwOwo+PiDCoAlpZ3RfY3JjX3QgcmVmX2NyYzsKPj4gwqAJaWd0X2NyY190IGZsaXBf Y3JjOwo+PiBAQCAtMTIyLDY4ICsxMjEsNTAgQEAgcGFpbnRfc3F1YXJlcyhkYXRhX3QgKmRhdGEs IGlndF9yb3RhdGlvbl90Cj4+IHJvdGF0aW9uLAo+PiDCoAlpZ3RfcHV0X2NhaXJvX2N0eChkYXRh LT5nZnhfZmQsIGZiLCBjcik7Cj4+IMKgfQo+PiDCoAo+PiAtc3RhdGljIHZvaWQgcHJlcGFyZV9j cnRjKGRhdGFfdCAqZGF0YSwgaWd0X291dHB1dF90ICpvdXRwdXQsIGVudW0KPj4gcGlwZSBwaXBl LAo+PiAtCQkJwqBpZ3RfcGxhbmVfdCAqcGxhbmUsIGVudW0gaWd0X2NvbW1pdF9zdHlsZQo+PiBj b21taXQpCj4+ICtzdGF0aWMgdm9pZCByZW1vdmVfZmJzKGRhdGFfdCAqZGF0YSkKPj4gwqB7Cj4+ IC0JZHJtTW9kZU1vZGVJbmZvICptb2RlOwo+PiAtCXVuc2lnbmVkIGludCB3LCBoOwo+PiAtCXVp bnQ2NF90IHRpbGluZyA9IGRhdGEtPm92ZXJyaWRlX3RpbGluZyA/Ogo+PiBMT0NBTF9EUk1fRk9S TUFUX01PRF9OT05FOwo+PiAtCXVpbnQzMl90IHBpeGVsX2Zvcm1hdCA9IGRhdGEtPm92ZXJyaWRl X2ZtdCA/Ogo+PiBEUk1fRk9STUFUX1hSR0I4ODg4Owo+PiAtCWlndF9kaXNwbGF5X3QgKmRpc3Bs YXkgPSAmZGF0YS0+ZGlzcGxheTsKPj4gLQlpZ3RfcGxhbmVfdCAqcHJpbWFyeSA9IGlndF9vdXRw dXRfZ2V0X3BsYW5lX3R5cGUob3V0cHV0LAo+PiBEUk1fUExBTkVfVFlQRV9QUklNQVJZKTsKPj4g KwlpZiAoZGF0YS0+ZmIuZmJfaWQpCj4+ICsJCWlndF9yZW1vdmVfZmIoZGF0YS0+Z2Z4X2ZkLCAm ZGF0YS0+ZmIpOwo+PiDCoAo+PiAtCWlndF9vdXRwdXRfc2V0X3BpcGUob3V0cHV0LCBwaXBlKTsK Pj4gLQlpZ3RfcGxhbmVfc2V0X3JvdGF0aW9uKHBsYW5lLCBJR1RfUk9UQVRJT05fMCk7Cj4+ICsJ aWYgKGRhdGEtPmZiX3JlZmVyZW5jZS5mYl9pZCkKPj4gKwkJaWd0X3JlbW92ZV9mYihkYXRhLT5n ZnhfZmQsICZkYXRhLT5mYl9yZWZlcmVuY2UpOwo+PiDCoAo+PiAtCS8qIGNyZWF0ZSB0aGUgcGlw ZV9jcmMgb2JqZWN0IGZvciB0aGlzIHBpcGUgKi8KPj4gLQlpZ3RfcGlwZV9jcmNfZnJlZShkYXRh LT5waXBlX2NyYyk7Cj4+IC0JZGF0YS0+cGlwZV9jcmMgPSBpZ3RfcGlwZV9jcmNfbmV3KGRhdGEt PmdmeF9mZCwgcGlwZSwKPj4gSU5URUxfUElQRV9DUkNfU09VUkNFX0FVVE8pOwo+PiAtCj4+IC0J bW9kZSA9IGlndF9vdXRwdXRfZ2V0X21vZGUob3V0cHV0KTsKPj4gKwlpZiAoZGF0YS0+ZmJfdW5y b3RhdGVkLmZiX2lkKQo+PiArCQlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmdmeF9mZCwgJmRhdGEtPmZi X3Vucm90YXRlZCk7Cj4+IMKgCj4+IC0JdyA9IG1vZGUtPmhkaXNwbGF5Owo+PiAtCWggPSBtb2Rl LT52ZGlzcGxheTsKPj4gLQo+PiAtCWlndF9jcmVhdGVfZmIoZGF0YS0+Z2Z4X2ZkLCB3LCBoLCBw aXhlbF9mb3JtYXQsIHRpbGluZywKPj4gJmRhdGEtPmZiX21vZGVzZXQpOwo+PiArCWlmIChkYXRh LT5mYl9mbGlwLmZiX2lkKQo+PiArCQlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmdmeF9mZCwgJmRhdGEt PmZiX2ZsaXApOwo+PiDCoAo+PiAtCS8qCj4+IC0JwqAqIFdpdGggaWd0X2Rpc3BsYXlfY29tbWl0 MiBhbmQgQ09NTUlUX1VOSVZFUlNBTCwgd2UgY2FsbAo+PiBqdXN0IHRoZQo+PiAtCcKgKiBzZXRw bGFuZSB3aXRob3V0IGEgbW9kZXNldC4gU28sIHRvIGJlIGFibGUgdG8gY2FsbAo+PiAtCcKgKiBp Z3RfZGlzcGxheV9jb21taXQgYW5kIHVsdGltYXRlbHkgc2V0Y3J0YyB0byBkbyB0aGUgZmlyc3QK Pj4gbW9kZXNldCwKPj4gLQnCoCogd2UgY3JlYXRlIGFuIGZiIGNvdmVyaW5nIHRoZSBjcnRjIGFu ZCBjYWxsIGNvbW1pdAo+PiAtCcKgKgo+PiAtCcKgKiBJdCdzIGFsc28gYSBnb29kIGlkZWEgdG8g c2V0IGEgcHJpbWFyeSBmYiBvbiB0aGUgcHJpbWFyeQo+PiBwbGFuZQo+PiAtCcKgKiByZWdhcmRs ZXNzLCB0byBmb3JjZSBhIHVuZGVycnVuIHdoZW4gd2F0ZXJtYXJrcyBhcmUKPj4gYWxsb2NhdGVk Cj4+IC0JwqAqIGluY29ycmVjdGx5IGZvciBvdGhlciBwbGFuZXMuCj4+IC0JwqAqLwo+PiAtCWln dF9wbGFuZV9zZXRfZmIocHJpbWFyeSwgJmRhdGEtPmZiX21vZGVzZXQpOwo+PiArCWRhdGEtPmZi X2ZsaXAuZmJfaWQgPSBkYXRhLT5mYl9yZWZlcmVuY2UuZmJfaWQgPSBkYXRhLQo+Pj4gZmJfdW5y b3RhdGVkLmZiX2lkID0gZGF0YS0+ZmIuZmJfaWQgPSAwOwo+PiArfQo+PiDCoAo+PiAtCWlmIChj b21taXQgPCBDT01NSVRfQVRPTUlDKSB7Cj4+IC0JCWlndF9wbGFuZV9jbGVhcl9wcm9wX2NoYW5n ZWQocHJpbWFyeSwKPj4gSUdUX1BMQU5FX1JPVEFUSU9OKTsKPj4gLQkJaWd0X2Rpc3BsYXlfY29t bWl0KGRpc3BsYXkpOwo+PiArc3RhdGljIHZvaWQgY2xlYW51cF9jcnRjKGRhdGFfdCAqZGF0YSkK Pj4gK3sKPj4gKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7Cj4+IMKg Cj4+IC0JCWlmIChwbGFuZS0+dHlwZSA9PSBEUk1fUExBTkVfVFlQRV9QUklNQVJZKQo+PiAtCQkJ aWd0X3BsYW5lX3NldF9wcm9wX2NoYW5nZWQocHJpbWFyeSwKPj4gSUdUX1BMQU5FX1JPVEFUSU9O KTsKPj4gLQl9Cj4+ICsJaWd0X3BpcGVfY3JjX2ZyZWUoZGF0YS0+cGlwZV9jcmMpOwo+PiArCWRh dGEtPnBpcGVfY3JjID0gTlVMTDsKPj4gwqAKPj4gLQlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBO VUxMKTsKPj4gKwlyZW1vdmVfZmJzKGRhdGEpOwo+PiDCoAo+PiAtCWlndF9kaXNwbGF5X2NvbW1p dDIoZGlzcGxheSwgY29tbWl0KTsKPj4gKwlpZ3RfZGlzcGxheV9yZXNldChkaXNwbGF5KTsKPj4g wqB9Cj4+IMKgCj4+IC1zdGF0aWMgdm9pZCByZW1vdmVfZmJzKGRhdGFfdCAqZGF0YSkKPj4gK3N0 YXRpYyB2b2lkIHByZXBhcmVfY3J0YyhkYXRhX3QgKmRhdGEsIGlndF9vdXRwdXRfdCAqb3V0cHV0 LCBlbnVtCj4+IHBpcGUgcGlwZSwKPj4gKwkJCcKgaWd0X3BsYW5lX3QgKnBsYW5lKQo+PiDCoHsK Pj4gLQlpZiAoIWRhdGEtPmZiLmZiX2lkKQo+PiAtCQlyZXR1cm47Cj4+ICsJaWd0X2Rpc3BsYXlf dCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5Owo+PiDCoAo+PiAtCWlndF9yZW1vdmVfZmIoZGF0 YS0+Z2Z4X2ZkLCAmZGF0YS0+ZmIpOwo+PiAtCWlndF9yZW1vdmVfZmIoZGF0YS0+Z2Z4X2ZkLCAm ZGF0YS0+ZmJfcmVmZXJlbmNlKTsKPj4gLQlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmdmeF9mZCwgJmRh dGEtPmZiX3Vucm90YXRlZCk7Cj4+ICsJY2xlYW51cF9jcnRjKGRhdGEpOwo+PiDCoAo+PiAtCWlm IChkYXRhLT5mYl9mbGlwLmZiX2lkKQo+PiAtCQlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmdmeF9mZCwg JmRhdGEtPmZiX2ZsaXApOwo+PiArCWlndF9vdXRwdXRfc2V0X3BpcGUob3V0cHV0LCBwaXBlKTsK Pj4gKwlpZ3RfcGxhbmVfc2V0X3JvdGF0aW9uKHBsYW5lLCBJR1RfUk9UQVRJT05fMCk7Cj4+ICsK Pj4gKwkvKiBjcmVhdGUgdGhlIHBpcGVfY3JjIG9iamVjdCBmb3IgdGhpcyBwaXBlICovCj4+ICsJ aWd0X3BpcGVfY3JjX2ZyZWUoZGF0YS0+cGlwZV9jcmMpOwo+PiArCWRhdGEtPnBpcGVfY3JjID0g aWd0X3BpcGVfY3JjX25ldyhkYXRhLT5nZnhfZmQsIHBpcGUsCj4+IElOVEVMX1BJUEVfQ1JDX1NP VVJDRV9BVVRPKTsKPj4gwqAKPj4gLQlkYXRhLT5mYl9mbGlwLmZiX2lkID0gZGF0YS0+ZmIuZmJf aWQgPSAwOwo+PiArCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7 Cj4+IMKgfQo+PiDCoAo+PiDCoGVudW0gcmVjdGFuZ2xlX3R5cGUgewo+PiBAQCAtMjA2LDcgKzE4 Nyw3IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVfZmJzKGRhdGFfdCAqZGF0YSwKPj4gaWd0X291dHB1 dF90ICpvdXRwdXQsCj4+IMKgCj4+IMKgCWlmIChkYXRhLT5mYi5mYl9pZCkgewo+PiDCoAkJaWd0 X3BsYW5lX3NldF9mYihwbGFuZSwgTlVMTCk7Cj4+IC0JCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlz cGxheSwgZGlzcGxheS0+aXNfYXRvbWljID8KPj4gQ09NTUlUX0FUT01JQyA6IENPTU1JVF9VTklW RVJTQUwpOwo+PiArCQlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMp Owo+IFNob3VsZCB3ZSBrZWVwIHRoZSBsZWdhY3kgY29tbWl0IGhlcmUgb3Igc2hvdWxkIHdlIGhh dmUgYSByZXF1aXJlbWVudAo+IGZvciB0aGlzIHRlc3QgdGhhdCBpdCBydW5zIG9ubHkgYXRvbWlj PwpIZXksCgpPbmx5IHRoZSAxODDCsCB0ZXN0cyB3b24ndCBydW4gb24gZ2VuNCB3aXRob3V0IGk5 MTUubnVjbGVhcl9wYWdlZmxpcD0xLCBhdCBsZWFzdCB1bnRpbCBnZW4zIHdtIHBhdGNoIHNlcmll cyBpcyBmaW5hbGx5IG1lcmdlZC4gQnV0IHRoZXkgYXJlIG5ldmVyIHJ1biBpbiBDSSAoc2hhcmRz KSBhbnl3YXkgLgpTbyBpbiBwcmFjdGljZSB0aGUgcmVxdWlyZW1lbnQgZG9lc24ndCBtYXR0ZXIg YW5kIGlmIHdlIGRvIGNhcmUgdGhlbiB3ZSBzaG91bGQgZ2V0IHRob3NlIGluIGZpbmFsbHkuLi4K Cn5NYWFydGVuCgo+PiDCoAo+PiDCoAkJcmVtb3ZlX2ZicyhkYXRhKTsKPj4gwqAJfQo+PiBAQCAt MjU5LDI4ICsyNDAsMjQgQEAgc3RhdGljIHZvaWQgcHJlcGFyZV9mYnMoZGF0YV90ICpkYXRhLAo+ PiBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwKPj4gwqAJLyoKPj4gwqAJwqAqIENyZWF0ZSBhIHJlZmVy ZW5jZSBzb2Z0d2FyZSByb3RhdGVkIGZsaXAgZnJhbWVidWZmZXIuCj4+IMKgCcKgKi8KPj4gLQlp ZiAocGxhbmUtPnR5cGUgPT0gRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSB8fCBkaXNwbGF5LQo+Pj4g aXNfYXRvbWljKSB7Cj4+IC0JCWlndF9jcmVhdGVfZmIoZGF0YS0+Z2Z4X2ZkLCByZWZfdywgcmVm X2gsCj4+IHBpeGVsX2Zvcm1hdCwgdGlsaW5nLAo+PiAtCQkJwqDCoMKgwqDCoMKgJmRhdGEtPmZi X2ZsaXApOwo+PiAtCQlwYWludF9zcXVhcmVzKGRhdGEsIGRhdGEtPnJvdGF0aW9uLCAmZGF0YS0+ ZmJfZmxpcCwKPj4gLQkJCcKgwqDCoMKgwqDCoGZsaXBfb3BhY2l0eSk7Cj4+IC0JCWlndF9wbGFu ZV9zZXRfZmIocGxhbmUsICZkYXRhLT5mYl9mbGlwKTsKPj4gLQkJaWYgKHBsYW5lLT50eXBlICE9 IERSTV9QTEFORV9UWVBFX0NVUlNPUikKPj4gLQkJCWlndF9wbGFuZV9zZXRfcG9zaXRpb24ocGxh bmUsIGRhdGEtPnBvc194LAo+PiBkYXRhLT5wb3NfeSk7Cj4+IC0JCWlndF9kaXNwbGF5X2NvbW1p dDIoZGlzcGxheSwKPj4gLQkJCQnCoMKgwqDCoGRpc3BsYXktPmlzX2F0b21pYyA/Cj4+IC0JCQkJ wqDCoMKgwqBDT01NSVRfQVRPTUlDIDoKPj4gQ09NTUlUX1VOSVZFUlNBTCk7Cj4+IC0JCWlndF9w aXBlX2NyY19jb2xsZWN0X2NyYyhkYXRhLT5waXBlX2NyYywgJmRhdGEtCj4+PiBmbGlwX2NyYyk7 Cj4+IC0KPj4gLQkJLyoKPj4gLQkJwqAqIFByZXBhcmUgdGhlIG5vbi1yb3RhdGVkIGZsaXAgZmIu Cj4+IC0JCcKgKi8KPj4gLQkJaWd0X3JlbW92ZV9mYihkYXRhLT5nZnhfZmQsICZkYXRhLT5mYl9m bGlwKTsKPj4gLQkJaWd0X2NyZWF0ZV9mYihkYXRhLT5nZnhfZmQsIHcsIGgsIHBpeGVsX2Zvcm1h dCwKPj4gdGlsaW5nLAo+PiAtCQkJwqDCoMKgwqDCoMKgJmRhdGEtPmZiX2ZsaXApOwo+PiAtCQlw YWludF9zcXVhcmVzKGRhdGEsIElHVF9ST1RBVElPTl8wLCAmZGF0YS0+ZmJfZmxpcCwKPj4gLQkJ CcKgwqDCoMKgwqDCoGZsaXBfb3BhY2l0eSk7Cj4+IC0JfQo+PiArCWlndF9jcmVhdGVfZmIoZGF0 YS0+Z2Z4X2ZkLCByZWZfdywgcmVmX2gsIHBpeGVsX2Zvcm1hdCwKPj4gdGlsaW5nLAo+PiArCQnC oMKgwqDCoMKgwqAmZGF0YS0+ZmJfZmxpcCk7Cj4+ICsJcGFpbnRfc3F1YXJlcyhkYXRhLCBkYXRh LT5yb3RhdGlvbiwgJmRhdGEtPmZiX2ZsaXAsCj4+ICsJCcKgwqDCoMKgwqDCoGZsaXBfb3BhY2l0 eSk7Cj4+ICsJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgJmRhdGEtPmZiX2ZsaXApOwo+PiArCWlm IChwbGFuZS0+dHlwZSAhPSBEUk1fUExBTkVfVFlQRV9DVVJTT1IpCj4+ICsJCWlndF9wbGFuZV9z ZXRfcG9zaXRpb24ocGxhbmUsIGRhdGEtPnBvc194LCBkYXRhLQo+Pj4gcG9zX3kpOwo+PiArCWln dF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7Cj4+ICsJaWd0X3BpcGVf Y3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAmZGF0YS0+ZmxpcF9jcmMpOwo+PiArCj4+ ICsJLyoKPj4gKwnCoMKgKiBQcmVwYXJlIHRoZSBub24tcm90YXRlZCBmbGlwIGZiLgo+PiArCcKg wqAqLwo+PiArCWlndF9yZW1vdmVfZmIoZGF0YS0+Z2Z4X2ZkLCAmZGF0YS0+ZmJfZmxpcCk7Cj4+ ICsJaWd0X2NyZWF0ZV9mYihkYXRhLT5nZnhfZmQsIHcsIGgsIHBpeGVsX2Zvcm1hdCwgdGlsaW5n LAo+PiArCQnCoMKgwqDCoMKgwqAmZGF0YS0+ZmJfZmxpcCk7Cj4+ICsJcGFpbnRfc3F1YXJlcyhk YXRhLCBJR1RfUk9UQVRJT05fMCwgJmRhdGEtPmZiX2ZsaXAsCj4+ICsJCcKgwqDCoMKgwqDCoGZs aXBfb3BhY2l0eSk7Cj4+IMKgCj4+IMKgCS8qCj4+IMKgCcKgKiBDcmVhdGUgYSByZWZlcmVuY2Ug Q1JDIGZvciBhIHNvZnR3YXJlLXJvdGF0ZWQgZmIuCj4+IEBAIC0yOTIsNyArMjY5LDcgQEAgc3Rh dGljIHZvaWQgcHJlcGFyZV9mYnMoZGF0YV90ICpkYXRhLAo+PiBpZ3Rfb3V0cHV0X3QgKm91dHB1 dCwKPj4gwqAJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgJmRhdGEtPmZiX3JlZmVyZW5jZSk7Cj4+ IMKgCWlmIChwbGFuZS0+dHlwZSAhPSBEUk1fUExBTkVfVFlQRV9DVVJTT1IpCj4+IMKgCQlpZ3Rf cGxhbmVfc2V0X3Bvc2l0aW9uKHBsYW5lLCBkYXRhLT5wb3NfeCwgZGF0YS0KPj4+IHBvc195KTsK Pj4gLQlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIGRpc3BsYXktPmlzX2F0b21pYyA/Cj4+ IENPTU1JVF9BVE9NSUMgOiBDT01NSVRfVU5JVkVSU0FMKTsKPj4gKwlpZ3RfZGlzcGxheV9jb21t aXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOwo+PiDCoAo+PiDCoAlpZ3RfcGlwZV9jcmNfY29s bGVjdF9jcmMoZGF0YS0+cGlwZV9jcmMsICZkYXRhLT5yZWZfY3JjKTsKPj4gwqAKPj4gQEAgLTMw NSw3ICsyODIsNyBAQCBzdGF0aWMgdm9pZCBwcmVwYXJlX2ZicyhkYXRhX3QgKmRhdGEsCj4+IGln dF9vdXRwdXRfdCAqb3V0cHV0LAo+PiDCoAlpZ3RfcGxhbmVfc2V0X3JvdGF0aW9uKHBsYW5lLCBJ R1RfUk9UQVRJT05fMCk7Cj4+IMKgCWlmIChwbGFuZS0+dHlwZSAhPSBEUk1fUExBTkVfVFlQRV9D VVJTT1IpCj4+IMKgCQlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKHBsYW5lLCBkYXRhLT5wb3NfeCwg ZGF0YS0KPj4+IHBvc195KTsKPj4gLQlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIGRpc3Bs YXktPmlzX2F0b21pYyA/Cj4+IENPTU1JVF9BVE9NSUMgOiBDT01NSVRfVU5JVkVSU0FMKTsKPj4g KwlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9BVE9NSUMpOwo+PiDCoAo+PiDC oAkvKgo+PiDCoAnCoCogUHJlcGFyZSB0aGUgcGxhbmUgd2l0aCBhbiBub24tcm90YXRlZCBmYiBs ZXQgdGhlIGh3Cj4+IHJvdGF0ZSBpdC4KPj4gQEAgLTMxOCwzNSArMjk1LDYgQEAgc3RhdGljIHZv aWQgcHJlcGFyZV9mYnMoZGF0YV90ICpkYXRhLAo+PiBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwKPj4g wqAJCWlndF9wbGFuZV9zZXRfcG9zaXRpb24ocGxhbmUsIGRhdGEtPnBvc194LCBkYXRhLQo+Pj4g cG9zX3kpOwo+PiDCoH0KPj4gwqAKPj4gLXN0YXRpYyB2b2lkIGNsZWFudXBfY3J0YyhkYXRhX3Qg KmRhdGEsIGlndF9vdXRwdXRfdCAqb3V0cHV0LAo+PiBpZ3RfcGxhbmVfdCAqcGxhbmUpCj4+IC17 Cj4+IC0JaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5Owo+PiAtCj4+IC0J aWd0X3BpcGVfY3JjX2ZyZWUoZGF0YS0+cGlwZV9jcmMpOwo+PiAtCWRhdGEtPnBpcGVfY3JjID0g TlVMTDsKPj4gLQo+PiAtCXJlbW92ZV9mYnMoZGF0YSk7Cj4+IC0KPj4gLQlpZ3RfcmVtb3ZlX2Zi KGRhdGEtPmdmeF9mZCwgJmRhdGEtPmZiX21vZGVzZXQpOwo+PiAtCj4+IC0JLyogWFhYOiBzZWUg dGhlIG5vdGUgaW4gcHJlcGFyZV9jcnRjKCkgKi8KPj4gLQlpZiAocGxhbmUtPnR5cGUgIT0gRFJN X1BMQU5FX1RZUEVfUFJJTUFSWSkgewo+PiAtCQlpZ3RfcGxhbmVfdCAqcHJpbWFyeTsKPj4gLQo+ PiAtCQlwcmltYXJ5ID0gaWd0X291dHB1dF9nZXRfcGxhbmVfdHlwZShvdXRwdXQsCj4+IERSTV9Q TEFORV9UWVBFX1BSSU1BUlkpOwo+PiAtCQlpZ3RfcGxhbmVfc2V0X2ZiKHByaW1hcnksIE5VTEwp Owo+PiAtCX0KPj4gLQo+PiAtCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsIE5VTEwpOwo+PiAtCWln dF9wbGFuZV9zZXRfcm90YXRpb24ocGxhbmUsIElHVF9ST1RBVElPTl8wKTsKPj4gLQo+PiAtCWln dF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX1VOSVZFUlNBTCk7Cj4+IC0KPj4gLQlp Z3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgUElQRV9BTlkpOwo+PiAtCj4+IC0JaWd0X2Rpc3Bs YXlfY29tbWl0KGRpc3BsYXkpOwo+PiAtfQo+PiAtCj4+IMKgc3RhdGljIHZvaWQgd2FpdF9mb3Jf cGFnZWZsaXAoaW50IGZkKQo+PiDCoHsKPj4gwqAJZHJtRXZlbnRDb250ZXh0IGV2Y3R4ID0geyAu dmVyc2lvbiA9IDIgfTsKPj4gQEAgLTM3MSwxOCArMzE5LDExIEBAIHN0YXRpYyB2b2lkIHRlc3Rf cGxhbmVfcm90YXRpb24oZGF0YV90ICpkYXRhLAo+PiBpbnQgcGxhbmVfdHlwZSwgYm9vbCB0ZXN0 X2JhZF9mb3JtCj4+IMKgCWVudW0gcGlwZSBwaXBlOwo+PiDCoAlpbnQgdmFsaWRfdGVzdHMgPSAw Owo+PiDCoAlpZ3RfY3JjX3QgY3JjX291dHB1dDsKPj4gLQllbnVtIGlndF9jb21taXRfc3R5bGUg Y29tbWl0ID0gQ09NTUlUX0xFR0FDWTsKPj4gwqAJaW50IHJldDsKPj4gwqAKPj4gLQlpZiAocGxh bmVfdHlwZSA9PSBEUk1fUExBTkVfVFlQRV9QUklNQVJZIHx8IHBsYW5lX3R5cGUgPT0KPj4gRFJN X1BMQU5FX1RZUEVfQ1VSU09SKQo+PiAtCQljb21taXQgPSBDT01NSVRfVU5JVkVSU0FMOwo+PiAt Cj4+IMKgCWlmIChwbGFuZV90eXBlID09IERSTV9QTEFORV9UWVBFX0NVUlNPUikKPj4gwqAJCWln dF9yZXF1aXJlKGRpc3BsYXktPmhhc19jdXJzb3JfcGxhbmUpOwo+PiDCoAo+PiAtCWlmIChkYXRh LT5kaXNwbGF5LmlzX2F0b21pYykKPj4gLQkJY29tbWl0ID0gQ09NTUlUX0FUT01JQzsKPj4gLQo+ PiDCoAlmb3JfZWFjaF9waXBlX3dpdGhfdmFsaWRfb3V0cHV0KGRpc3BsYXksIHBpcGUsIG91dHB1 dCkgewo+PiDCoAkJaWd0X3BsYW5lX3QgKnBsYW5lOwo+PiDCoAkJaW50IGk7Cj4+IEBAIC0zOTUs NyArMzM2LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9wbGFuZV9yb3RhdGlvbihkYXRhX3QgKmRhdGEs IGludAo+PiBwbGFuZV90eXBlLCBib29sIHRlc3RfYmFkX2Zvcm0KPj4gwqAJCXBsYW5lID0gaWd0 X291dHB1dF9nZXRfcGxhbmVfdHlwZShvdXRwdXQsCj4+IHBsYW5lX3R5cGUpOwo+PiDCoAkJaWd0 X3JlcXVpcmUoaWd0X3BsYW5lX2hhc19wcm9wKHBsYW5lLAo+PiBJR1RfUExBTkVfUk9UQVRJT04p KTsKPj4gwqAKPj4gLQkJcHJlcGFyZV9jcnRjKGRhdGEsIG91dHB1dCwgcGlwZSwgcGxhbmUsIGNv bW1pdCk7Cj4+ICsJCXByZXBhcmVfY3J0YyhkYXRhLCBvdXRwdXQsIHBpcGUsIHBsYW5lKTsKPj4g wqAKPj4gwqAJCWZvciAoaSA9IDA7IGkgPCBudW1fcmVjdGFuZ2xlX3R5cGVzOyBpKyspIHsKPj4g wqAJCQkvKiBVbnN1cHBvcnRlZCBvbiBpOTE1ICovCj4+IEBAIC00MTUsNyArMzU2LDcgQEAgc3Rh dGljIHZvaWQgdGVzdF9wbGFuZV9yb3RhdGlvbihkYXRhX3QgKmRhdGEsIGludAo+PiBwbGFuZV90 eXBlLCBib29sIHRlc3RfYmFkX2Zvcm0KPj4gwqAJCQlpZiAoZGF0YS0+cm90YXRpb24gJiAoSUdU X1JPVEFUSU9OXzkwIHwKPj4gSUdUX1JPVEFUSU9OXzI3MCkpCj4+IMKgCQkJCWlndF9wbGFuZV9z ZXRfc2l6ZShwbGFuZSwgZGF0YS0KPj4+IGZiLmhlaWdodCwgZGF0YS0+ZmIud2lkdGgpOwo+PiDC oAo+PiAtCQkJcmV0ID0gaWd0X2Rpc3BsYXlfdHJ5X2NvbW1pdDIoZGlzcGxheSwKPj4gY29tbWl0 KTsKPj4gKwkJCXJldCA9IGlndF9kaXNwbGF5X3RyeV9jb21taXQyKGRpc3BsYXksCj4+IENPTU1J VF9BVE9NSUMpOwo+PiDCoAkJCWlmICh0ZXN0X2JhZF9mb3JtYXQpIHsKPj4gwqAJCQkJaWd0X2Fz c2VydF9lcShyZXQsIC1FSU5WQUwpOwo+PiDCoAkJCQljb250aW51ZTsKPj4gQEAgLTQ1Niw0MSAr Mzk3LDI4IEBAIHN0YXRpYyB2b2lkIHRlc3RfcGxhbmVfcm90YXRpb24oZGF0YV90ICpkYXRhLAo+ PiBpbnQgcGxhbmVfdHlwZSwgYm9vbCB0ZXN0X2JhZF9mb3JtCj4+IMKgCQl9Cj4+IMKgCj4+IMKg CQl2YWxpZF90ZXN0cysrOwo+PiAtCQljbGVhbnVwX2NydGMoZGF0YSwgb3V0cHV0LCBwbGFuZSk7 Cj4+IMKgCX0KPj4gwqAJaWd0X3JlcXVpcmVfZih2YWxpZF90ZXN0cywgIm5vIHZhbGlkIGNydGMv Y29ubmVjdG9yCj4+IGNvbWJpbmF0aW9ucyBmb3VuZFxuIik7Cj4+IMKgfQo+PiDCoAo+PiDCoHN0 YXRpYyB2b2lkIHRlc3RfcGxhbmVfcm90YXRpb25fZXhoYXVzdF9mZW5jZXMoZGF0YV90ICpkYXRh LAo+PiDCoAkJCQkJwqDCoMKgwqDCoMKgwqBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwKPj4gLQkJCQkJ wqDCoMKgwqDCoMKgwqBpbnQgcGxhbmVfdHlwZSkKPj4gKwkJCQkJwqDCoMKgwqDCoMKgwqBpZ3Rf cGxhbmVfdCAqcGxhbmUpCj4+IMKgewo+PiDCoAlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRh dGEtPmRpc3BsYXk7Cj4+IMKgCXVpbnQ2NF90IHRpbGluZyA9IExPQ0FMX0k5MTVfRk9STUFUX01P RF9ZX1RJTEVEOwo+PiDCoAl1aW50MzJfdCBmb3JtYXQgPSBEUk1fRk9STUFUX1hSR0I4ODg4Owo+ PiDCoAlpbnQgYnBwID0gaWd0X2RybV9mb3JtYXRfdG9fYnBwKGZvcm1hdCk7Cj4+IC0JZW51bSBp Z3RfY29tbWl0X3N0eWxlIGNvbW1pdCA9IENPTU1JVF9MRUdBQ1k7Cj4+IMKgCWludCBmZCA9IGRh dGEtPmdmeF9mZDsKPj4gLQlpZ3RfcGxhbmVfdCAqcGxhbmU7Cj4+IMKgCWRybU1vZGVNb2RlSW5m byAqbW9kZTsKPj4gLQlkYXRhX3QgZGF0YTJbTUFYX0ZFTkNFUysxXSA9IHt9Owo+PiArCXN0cnVj dCBpZ3RfZmIgZmJbTUFYX0ZFTkNFUysxXSA9IHt9Owo+PiDCoAl1bnNpZ25lZCBpbnQgc3RyaWRl LCBzaXplLCB3LCBoOwo+PiDCoAl1aW50MzJfdCBnZW1faGFuZGxlOwo+PiDCoAl1aW50NjRfdCB0 b3RhbF9hcGVydHVyZV9zaXplLCB0b3RhbF9mYnNfc2l6ZTsKPj4gwqAJaW50IGksIHJldDsKPj4g wqAKPj4gLQlwbGFuZSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lX3R5cGUob3V0cHV0LCBwbGFuZV90 eXBlKTsKPj4gwqAJaWd0X3JlcXVpcmUoaWd0X3BsYW5lX2hhc19wcm9wKHBsYW5lLCBJR1RfUExB TkVfUk9UQVRJT04pKTsKPj4gwqAKPj4gLQlpZiAocGxhbmVfdHlwZSA9PSBEUk1fUExBTkVfVFlQ RV9QUklNQVJZIHx8IHBsYW5lX3R5cGUgPT0KPj4gRFJNX1BMQU5FX1RZUEVfQ1VSU09SKQo+PiAt CQljb21taXQgPSBDT01NSVRfVU5JVkVSU0FMOwo+PiAtCj4+IC0JaWYgKHBsYW5lX3R5cGUgPT0g RFJNX1BMQU5FX1RZUEVfQ1VSU09SKQo+PiAtCQlpZ3RfcmVxdWlyZShkaXNwbGF5LT5oYXNfY3Vy c29yX3BsYW5lKTsKPj4gLQo+PiAtCWlmIChkYXRhLT5kaXNwbGF5LmlzX2F0b21pYykKPj4gLQkJ Y29tbWl0ID0gQ09NTUlUX0FUT01JQzsKPj4gLQo+PiDCoAltb2RlID0gaWd0X291dHB1dF9nZXRf bW9kZShvdXRwdXQpOwo+PiDCoAl3ID0gbW9kZS0+aGRpc3BsYXk7Cj4+IMKgCWggPSBtb2RlLT52 ZGlzcGxheTsKPj4gQEAgLTUwOSw3ICs0MzcsNyBAQCBzdGF0aWMgdm9pZAo+PiB0ZXN0X3BsYW5l X3JvdGF0aW9uX2V4aGF1c3RfZmVuY2VzKGRhdGFfdCAqZGF0YSwKPj4gwqAJaWd0X3JlcXVpcmUo dG90YWxfZmJzX3NpemUgPCB0b3RhbF9hcGVydHVyZV9zaXplICogMC45KTsKPj4gwqAKPj4gwqAJ aWd0X3BsYW5lX3NldF9mYihwbGFuZSwgTlVMTCk7Cj4+IC0JaWd0X2Rpc3BsYXlfY29tbWl0KGRp c3BsYXkpOwo+PiArCWlndF9kaXNwbGF5X2NvbW1pdDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7 Cj4+IMKgCj4+IMKgCWZvciAoaSA9IDA7IGkgPCBNQVhfRkVOQ0VTICsgMTsgaSsrKSB7Cj4+IMKg CQlnZW1faGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgc2l6ZSk7Cj4+IEBAIC01MjIsMjAgKzQ1MCwy MCBAQCBzdGF0aWMgdm9pZAo+PiB0ZXN0X3BsYW5lX3JvdGF0aW9uX2V4aGF1c3RfZmVuY2VzKGRh dGFfdCAqZGF0YSwKPj4gwqAJCXJldCA9IChfX2ttc19hZGRmYihmZCwgZ2VtX2hhbmRsZSwgdywg aCwgc3RyaWRlLAo+PiDCoAkJwqDCoMKgwqDCoMKgwqBmb3JtYXQsIHRpbGluZywgTlVMTCwKPj4g wqAJCcKgwqDCoMKgwqDCoMKgTE9DQUxfRFJNX01PREVfRkJfTU9ESUZJRVJTLAo+PiAtCQnCoMKg wqDCoMKgwqDCoCZkYXRhMltpXS5mYi5mYl9pZCkpOwo+PiArCQnCoMKgwqDCoMKgwqDCoCZmYltp XS5mYl9pZCkpOwo+PiDCoAkJaWYgKHJldCkgewo+PiDCoAkJCWlndF93YXJuKCJmYWlsZWQgdG8g Y3JlYXRlIGZyYW1lYnVmZmVyXG4iKTsKPj4gwqAJCQlnb3RvIGVycl9hbGxvYzsKPj4gwqAJCX0K Pj4gwqAKPj4gLQkJZGF0YTJbaV0uZmIud2lkdGggPSB3Owo+PiAtCQlkYXRhMltpXS5mYi5oZWln aHQgPSBoOwo+PiAtCQlkYXRhMltpXS5mYi5nZW1faGFuZGxlID0gZ2VtX2hhbmRsZTsKPj4gKwkJ ZmJbaV0ud2lkdGggPSB3Owo+PiArCQlmYltpXS5oZWlnaHQgPSBoOwo+PiArCQlmYltpXS5nZW1f aGFuZGxlID0gZ2VtX2hhbmRsZTsKPj4gwqAKPj4gLQkJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwg JmRhdGEyW2ldLmZiKTsKPj4gKwkJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgJmZiW2ldKTsKPj4g wqAJCWlndF9wbGFuZV9zZXRfcm90YXRpb24ocGxhbmUsIElHVF9ST1RBVElPTl8wKTsKPj4gwqAK Pj4gLQkJcmV0ID0gaWd0X2Rpc3BsYXlfdHJ5X2NvbW1pdDIoZGlzcGxheSwgY29tbWl0KTsKPj4g KwkJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKPj4gwqAJCWlm IChyZXQpIHsKPj4gwqAJCQlpZ3Rfd2FybigiZmFpbGVkIHRvIGNvbW1pdCB1bnJvdGF0ZWQgZmJc biIpOwo+PiDCoAkJCWdvdG8gZXJyX2NvbW1pdDsKPj4gQEAgLTU0NCw3ICs0NzIsNyBAQCBzdGF0 aWMgdm9pZAo+PiB0ZXN0X3BsYW5lX3JvdGF0aW9uX2V4aGF1c3RfZmVuY2VzKGRhdGFfdCAqZGF0 YSwKPj4gwqAJCWlndF9wbGFuZV9zZXRfcm90YXRpb24ocGxhbmUsIElHVF9ST1RBVElPTl85MCk7 Cj4+IMKgCQlpZ3RfcGxhbmVfc2V0X3NpemUocGxhbmUsIGgsIHcpOwo+PiDCoAo+PiAtCQlpZ3Rf ZGlzcGxheV9jb21taXQyKGRpc3BsYXksIGNvbW1pdCk7Cj4+ICsJCWlndF9kaXNwbGF5X2NvbW1p dDIoZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7Cj4+IMKgCQlpZiAocmV0KSB7Cj4+IMKgCQkJaWd0 X3dhcm4oImZhaWxlZCB0byBjb21taXQgaGFyZHdhcmUgcm90YXRlZAo+PiBmYjogJWlcbiIsIHJl dCk7Cj4+IMKgCQkJZ290byBlcnJfY29tbWl0Owo+PiBAQCAtNTU3LDE5ICs0ODUsOSBAQCBlcnJf YWxsb2M6Cj4+IMKgCj4+IMKgCWktLTsKPj4gwqBlcnJfY29tbWl0Ogo+PiAtCWlndF9wbGFuZV9z ZXRfZmIocGxhbmUsIE5VTEwpOwo+PiAtCWlndF9wbGFuZV9zZXRfcm90YXRpb24ocGxhbmUsIElH VF9ST1RBVElPTl8wKTsKPj4gLQo+PiAtCWlmIChjb21taXQgPCBDT01NSVRfQVRPTUlDKQo+PiAt CQlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIGNvbW1pdCk7Cj4+IC0KPj4gLQlpZ3Rfb3V0 cHV0X3NldF9waXBlKG91dHB1dCwgUElQRV9OT05FKTsKPj4gLQlpZ3RfZGlzcGxheV9jb21taXQy KGRpc3BsYXksIGRpc3BsYXktPmlzX2F0b21pYyA/Cj4+IENPTU1JVF9BVE9NSUMgOiBDT01NSVRf TEVHQUNZKTsKPj4gLQo+PiDCoAlmb3IgKDsgaSA+PSAwOyBpLS0pCj4+IC0JCWlndF9yZW1vdmVf ZmIoZmQsICZkYXRhMltpXS5mYik7Cj4+ICsJCWlndF9yZW1vdmVfZmIoZmQsICZmYltpXSk7Cj4+ IMKgCj4+IC0Ja21zdGVzdF9yZXN0b3JlX3Z0X21vZGUoKTsKPj4gwqAJaWd0X2Fzc2VydF9lcShy ZXQsIDApOwo+PiDCoH0KPj4gwqAKPj4gQEAgLTcyNiw5ICs2NDQsMTAgQEAgaWd0X21haW4KPj4g wqAJCWlndF9yZXF1aXJlKGdlbiA+PSA5KTsKPj4gwqAKPj4gwqAJCWZvcl9lYWNoX3BpcGVfd2l0 aF92YWxpZF9vdXRwdXQoJmRhdGEuZGlzcGxheSwgcGlwZSwKPj4gb3V0cHV0KSB7Cj4+IC0JCQlp Z3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgcGlwZSk7Cj4+ICsJCQlpZ3RfcGxhbmVfdCAqcHJp bWFyeSA9Cj4+ICZkYXRhLmRpc3BsYXkucGlwZXNbcGlwZV0ucGxhbmVzWzBdOwo+PiArCQkJcHJl cGFyZV9jcnRjKCZkYXRhLCBvdXRwdXQsIHBpcGUsIHByaW1hcnkpOwo+PiDCoAo+PiAtCQkJdGVz dF9wbGFuZV9yb3RhdGlvbl9leGhhdXN0X2ZlbmNlcygmZGF0YSwKPj4gb3V0cHV0LCBEUk1fUExB TkVfVFlQRV9QUklNQVJZKTsKPj4gKwkJCXRlc3RfcGxhbmVfcm90YXRpb25fZXhoYXVzdF9mZW5j ZXMoJmRhdGEsCj4+IG91dHB1dCwgcHJpbWFyeSk7Cj4+IMKgCj4+IMKgCQkJdmFsaWRfdGVzdHMr KzsKPj4gwqAJCQlicmVhazsKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1k ZXYK