From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 74CAE6E721 for ; Tue, 20 Mar 2018 12:45:23 +0000 (UTC) Message-ID: <1521549920.16539.6.camel@intel.com> From: Mika Kahola Date: Tue, 20 Mar 2018 14:45:20 +0200 In-Reply-To: References: <1521207585-22815-1-git-send-email-juhapekka.heikkila@gmail.com> <1521461539.16539.2.camel@intel.com> Mime-Version: 1.0 Subject: Re: [igt-dev] [PATCH i-g-t] tests/kms_available_modes_crc: Test all modes on all planes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: mika.kahola@intel.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: juhapekka.heikkila@gmail.com, igt-dev@lists.freedesktop.org List-ID: T24gVHVlLCAyMDE4LTAzLTIwIGF0IDEzOjM3ICswMjAwLCBKdWhhLVBla2thIEhlaWtraWxhIHdy b3RlOgo+IE9uIDE5LjAzLjIwMTggMTQ6MTIsIE1pa2EgS2Fob2xhIHdyb3RlOgo+ID4gCj4gPiBP biBGcmksIDIwMTgtMDMtMTYgYXQgMTU6MzkgKzAyMDAsIEp1aGEtUGVra2EgSGVpa2tpbGEgd3Jv dGU6Cj4gPiA+IAo+ID4gPiBBc2sgZnJvbSBrZXJuZWwgYWJvdXQgc3VwcG9ydGVkIG1vZGVzIGZv ciBlYWNoIHBsYW5lIGFuZCB0cnkKPiA+ID4gc2V0dGluZwo+ID4gPiB0aGVtIG9uIGRpc3BsYXkg YW5kIHZlcmlmeSBmdW5jdGlvbmFsaXR5IHdpdGggY3JjLgo+ID4gPiAKPiA+ID4gRFJNX0ZPUk1B VF9BUkdCODg4OCBhbmQgRFJNX0ZPUk1BVF9BQkdSODg4OCBza2lwIGNyYyB0ZXN0aW5nIG9uCj4g PiA+IHByaW1hcnkgYW5kIG92ZXJsYXkgcGxhbmVzIGJlY2F1c2UgdGhleSBwcm9kdWNlIGluY29y cmVjdCBjcmNzCj4gPiA+IGZyb20KPiA+ID4gaGFyZHdhcmUuIERSTV9GT1JNQVRfQVJHQjg4ODgg aXMgdGVzdGVkIG9uIGN1cnNvciBwbGFuZS4KPiA+ID4gCj4gPiA+IFNpZ25lZC1vZmYtYnk6IEp1 aGEtUGVra2EgSGVpa2tpbGEgPGp1aGFwZWtrYS5oZWlra2lsYUBnbWFpbC5jb20+Cj4gPiA+IC0t LQo+ID4gPiDCoMKgdGVzdHMvTWFrZWZpbGUuc291cmNlc8KgwqDCoMKgwqDCoMKgwqDCoMKgfMKg wqDCoDEgKwo+ID4gPiDCoMKgdGVzdHMva21zX2F2YWlsYWJsZV9tb2Rlc19jcmMuYyB8IDU3NAo+ ID4gPiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gPiA+IMKgwqB0 ZXN0cy9tZXNvbi5idWlsZMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgwqAxICsK PiA+ID4gwqDCoDMgZmlsZXMgY2hhbmdlZCwgNTc2IGluc2VydGlvbnMoKykKPiA+ID4gwqDCoGNy ZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9rbXNfYXZhaWxhYmxlX21vZGVzX2NyYy5jCj4gPiA+IAo+ ID4gPiBkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcyBiL3Rlc3RzL01ha2VmaWxl LnNvdXJjZXMKPiA+ID4gaW5kZXggZjFkMWNiYS4uMDYyMjA0OCAxMDA2NDQKPiA+ID4gLS0tIGEv dGVzdHMvTWFrZWZpbGUuc291cmNlcwo+ID4gPiArKysgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2Vz Cj4gPiA+IEBAIC0xNzMsNiArMTczLDcgQEAgVEVTVFNfcHJvZ3MgPSBcCj4gPiA+IMKgwqAJa21z X2F0b21pYyBcCj4gPiA+IMKgwqAJa21zX2F0b21pY19pbnRlcnJ1cHRpYmxlIFwKPiA+ID4gwqDC oAlrbXNfYXRvbWljX3RyYW5zaXRpb24gXAo+ID4gPiArCWttc19hdmFpbGFibGVfbW9kZXNfY3Jj IFwKPiA+ID4gwqDCoAlrbXNfYnVzeSBcCj4gPiA+IMKgwqAJa21zX2NjcyBcCj4gPiA+IMKgwqAJ a21zX2Nodl9jdXJzb3JfZmFpbCBcCj4gPiA+IGRpZmYgLS1naXQgYS90ZXN0cy9rbXNfYXZhaWxh YmxlX21vZGVzX2NyYy5jCj4gPiA+IGIvdGVzdHMva21zX2F2YWlsYWJsZV9tb2Rlc19jcmMuYwo+ ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gPiBpbmRleCAwMDAwMDAwLi45ZTMxMzQ2Cj4g PiA+IC0tLSAvZGV2L251bGwKPiA+ID4gKysrIGIvdGVzdHMva21zX2F2YWlsYWJsZV9tb2Rlc19j cmMuYwo+ID4gPiBAQCAtMCwwICsxLDU3NCBAQAo+ID4gPiArLyoKPiA+ID4gKyAqIENvcHlyaWdo dCDCqSAyMDE4IEludGVsIENvcnBvcmF0aW9uCj4gPiA+ICsgKgo+ID4gPiArICogUGVybWlzc2lv biBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KPiA+ID4g b2J0YWluaW5nIGEKPiA+ID4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRl ZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKPiA+ID4gIlNvZnR3YXJlIiksCj4gPiA+ICsgKiB0 byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKPiA+ ID4gd2l0aG91dAo+ID4gPiBsaW1pdGF0aW9uCj4gPiA+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwg Y29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwKPiA+ID4gc3VibGljZW5z ZSwKPiA+ID4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBw ZXJtaXQgcGVyc29ucyB0bwo+ID4gPiB3aG9tCj4gPiA+IHRoZQo+ID4gPiArICogU29mdHdhcmUg aXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKPiA+ID4gY29u ZGl0aW9uczoKPiA+ID4gKyAqCj4gPiA+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBh bmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZQo+ID4gPiAoaW5jbHVkaW5nCj4gPiA+IHRoZSBuZXh0 Cj4gPiA+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Ig c3Vic3RhbnRpYWwKPiA+ID4gcG9ydGlvbnMgb2YgdGhlCj4gPiA+ICsgKiBTb2Z0d2FyZS4KPiA+ ID4gKyAqCj4gPiA+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9V VCBXQVJSQU5UWSBPRiBBTlkKPiA+ID4gS0lORCwKPiA+ID4gRVhQUkVTUyBPUgo+ID4gPiArICog SU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgo+ ID4gPiBNRVJDSEFOVEFCSUxJVFksCj4gPiA+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULsKgwqBJTiBOTwo+ID4gPiBFVkVOVCBTSEFMTAo+ ID4gPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBB TlkgQ0xBSU0sCj4gPiA+IERBTUFHRVMKPiA+ID4gT1IgT1RIRVIKPiA+ID4gKyAqIExJQUJJTElU WSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IKPiA+ID4gT1RIRVJX SVNFLAo+ID4gPiBBUklTSU5HCj4gPiA+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElP TiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCj4gPiA+IE9USEVSIERFQUxJTkdTCj4g PiA+ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4gPiA+ICsgKgo+ID4gPiArICovCj4gPiA+ICsKPiA+ ID4gKyNpbmNsdWRlICJkcm1fbW9kZS5oIgo+ID4gPiArI2luY2x1ZGUgImRybV9mb3VyY2MuaCIK PiA+ID4gKyNpbmNsdWRlICJpZ3QuaCIKPiA+ID4gKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KPiA+ ID4gKwo+ID4gPiArSUdUX1RFU1RfREVTQ1JJUFRJT04oIkNSQyB0ZXN0IGFsbCBkaWZmZXJlbnQg cGxhbmUgbW9kZXMgd2hpY2gKPiA+ID4ga2VybmVsIGFkdmVydGlzZXMuIik7Cj4gPiA+ICsKPiA+ ID4gKyNkZWZpbmUgdGVzdGNyY2Ftb3VudCAzCj4gPiBXb3VsZCBncmFiYmluZyBqdXN0IG9uZSBD UkMgYmUgZW5vdWdoIGZvciB0aGlzIHRlc3Q/IEFueSByZWFzb24gd2h5Cj4gPiB3ZQo+ID4gd291 bGQgbmVlZCAzIENSQydzPwo+IEl0IGlzIGp1c3QgbWFnaWMgbnVtYmVyIGFmdGVyIGRpc2N1c3Np bmcgd2l0aCBWaWxsZSBTeXJqw6Rsw6QgYWJvdXQgaXQsCj4gaGXCoAo+IG9uY2UgbWVudGlvbmVk IGFmdGVyIHN0YXJ0aW5nIGNyYyBmaXJzdCBjcmMgbWF5IGhhdmUgZ2FyYmFnZSBpZiBpdCdzwqAK PiBzdGFydGVkIGluIG1pZC1mcmFtZS4KTWFhcnRlbiBtYWRlIHNvbWUgaW1wcm92ZW1lbnRzIG9u IGlndCBsaWJyYXJ5IHJvdXRpbmVzIGFuZCBub3cgeW91IGNhbgpkcmFpbiB0aGUgcGlwZSBmcm9t IGdhcmJhZ2UgYmVmb3JlIHJlYWRpbmcgaXQuIFRoaXMgc2hvdWxkIGNsZWFuIHVwIHRoZQpnYXJi YWdlIGlmIHlvdSBhZGQgJ2lndF9waXBlX2NyY19kcmFpbigpJy4gTm90ZSwgdGhhdCB5b3UgZG9u J3QgbmVlZApjbGVhbiB1cCB0aGUgZ2FyYmFnZSByaWdodCBhZnRlciAnaWd0X3BpcGVfY3JjX3N0 YXJ0KCknLsKgCgo+IAo+ID4gCj4gPiDCoMKgCj4gPiA+IAo+ID4gPiArCj4gPiA+ICt0eXBlZGVm IHN0cnVjdCB7Cj4gPiA+ICsJaW50IGdmeF9mZDsKPiA+ID4gKwlpZ3RfZGlzcGxheV90IGRpc3Bs YXk7Cj4gPiA+ICsJZW51bSBpZ3RfY29tbWl0X3N0eWxlIGNvbW1pdDsKPiA+ID4gKwo+ID4gPiAr CXN0cnVjdCBpZ3RfZmIgZmI7Cj4gPiA+ICsJc3RydWN0IGlndF9mYiBwcmltYXJ5X2ZiOwo+ID4g PiArCj4gPiA+ICsJY2hhciBmb3JtYXRfbmFtZVs1XTsKPiA+ID4gKwlib29sIHNlcGFyYXRlcHJp bWFyeXBsYW5lOwo+ID4gPiArCj4gPiA+ICsJdWludDMyX3QgZ2VtX2hhbmRsZTsKPiA+ID4gKwl1 aW50MzJfdCBnZW1faGFuZGxlX3l1djsKPiA+ID4gKwl1bnNpZ25lZCBpbnQgc2l6ZTsKPiA+ID4g Kwl1bnNpZ25lZCBjaGFyKiBidWY7Cj4gPiA+ICsKPiA+ID4gKwkvKgo+ID4gPiArCcKgKiBjb21w YXJpc29uIGNyY3MKPiA+ID4gKwnCoCovCj4gPiA+ICsJaWd0X2NyY190ICpjdXJzb3JfY3JjOwo+ ID4gPiArCWlndF9jcmNfdCAqZnVsbHNjcmVlbl9jcmM7Cj4gPiA+ICt9IGRhdGFfdDsKPiA+ID4g Kwo+ID4gPiArCj4gPiA+ICtzdGF0aWMgaW50IGRvX3dyaXRlKGludCBmZCwgaW50IGhhbmRsZSwg dm9pZCAqYnVmLCBpbnQgb2Zmc2V0LAo+ID4gPiBpbnQKPiA+ID4gc2l6ZSkKPiA+ID4gK3sKPiA+ ID4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3B3cml0ZSB3cml0ZTsKPiA+ID4gKwltZW1zZXQoJndy aXRlLCAweDAwLCBzaXplb2Yod3JpdGUpKTsKPiA+ID4gKwl3cml0ZS5oYW5kbGUgPSBoYW5kbGU7 Cj4gPiA+ICsJd3JpdGUuZGF0YV9wdHIgPSAodWludHB0cl90KWJ1ZjsKPiA+ID4gKwl3cml0ZS5z aXplID0gc2l6ZTsKPiA+ID4gKwl3cml0ZS5vZmZzZXQgPSBvZmZzZXQ7Cj4gPiA+ICsJcmV0dXJu IGlvY3RsKGZkLCBEUk1fSU9DVExfSTkxNV9HRU1fUFdSSVRFLCAmd3JpdGUpOwo+ID4gPiArfQo+ ID4gPiArCj4gPiA+ICsKPiA+ID4gK3N0YXRpYyB2b2lkIGdlbmVyYXRlX2NvbXBhcmlzb25fY3Jj X2xpc3QoZGF0YV90ICpkYXRhLAo+ID4gPiBpZ3Rfb3V0cHV0X3QKPiA+ID4gKm91dHB1dCwKPiA+ ID4gKwkJCQkJZW51bSBwaXBlIHBpcGUpCj4gPiA+ICt7Cj4gPiA+ICsJZHJtTW9kZU1vZGVJbmZv ICptb2RlOwo+ID4gPiArCXVpbnQ2NF90IHcsIGgsIGM7Cj4gPiA+ICsJaW50IGZiaWQ7Cj4gPiA+ ICsJY2Fpcm9fdCAqY3I7Cj4gPiA+ICsJaWd0X3BpcGVfY3JjX3QgKnBpcGVfY3JjOwo+ID4gPiAr CWlndF9wbGFuZV90ICpwcmltYXJ5Owo+ID4gPiArCj4gPiA+ICsKPiA+ID4gKwlpZ3Rfb3V0cHV0 X3NldF9waXBlKG91dHB1dCwgcGlwZSk7Cj4gPiA+ICsKPiA+ID4gKwltb2RlID0gaWd0X291dHB1 dF9nZXRfbW9kZShvdXRwdXQpOwo+ID4gPiArCWZiaWQgPSBpZ3RfY3JlYXRlX2NvbG9yX2ZiKGRh dGEtPmdmeF9mZCwKPiA+ID4gKwkJCQnCoMKgwqBtb2RlLT5oZGlzcGxheSwKPiA+ID4gKwkJCQnC oMKgwqBtb2RlLT52ZGlzcGxheSwKPiA+ID4gKwkJCQnCoMKgwqBpbnRlbF9nZW4oaW50ZWxfZ2V0 X2RybV9kZXZpZAo+ID4gPiAoZGF0Cj4gPiA+IGEtPmdmeF9mZCkpIDwgOSA/IERSTV9GT1JNQVRf WFJHQjg4ODggOiBEUk1fRk9STUFUX0FSR0I4ODg4LAo+ID4gPiArCQkJCcKgwqDCoExPQ0FMX0RS TV9GT1JNQVRfTU9EX05PTkUsCj4gPiA+ICsJCQkJwqDCoMKgMCwgMCwgMCwKPiA+ID4gKwkJCQnC oMKgwqAmZGF0YS0+cHJpbWFyeV9mYik7Cj4gPiA+ICsKPiA+ID4gKwlpZ3RfYXNzZXJ0KGZiaWQp Owo+ID4gPiArCj4gPiA+ICsJZHJtR2V0Q2FwKGRhdGEtPmdmeF9mZCwgRFJNX0NBUF9DVVJTT1Jf V0lEVEgsICZ3KTsKPiA+ID4gKwlkcm1HZXRDYXAoZGF0YS0+Z2Z4X2ZkLCBEUk1fQ0FQX0NVUlNP Ul9IRUlHSFQsICZoKTsKPiA+ID4gKwo+ID4gPiArCWNyID0gaWd0X2dldF9jYWlyb19jdHgoZGF0 YS0+Z2Z4X2ZkLCAmZGF0YS0+cHJpbWFyeV9mYik7Cj4gPiA+ICsJaWd0X3BhaW50X2NvbG9yKGNy LCAwLCAwLCBtb2RlLT5oZGlzcGxheSwgbW9kZS0KPiA+ID4gPnZkaXNwbGF5LAo+ID4gPiArCQkJ wqDCoMKgwqAwLjAsIDAuMCwgMC4wKTsKPiA+ID4gKwlpZ3RfcGFpbnRfY29sb3IoY3IsIDAsIDAs IHcsIGgsIDEuMCwgMS4wLCAxLjApOwo+ID4gPiArCWlndF9hc3NlcnQoY2Fpcm9fc3RhdHVzKGNy KSA9PSAwKTsKPiA+ID4gKwo+ID4gPiArCXByaW1hcnkgPSBpZ3Rfb3V0cHV0X2dldF9wbGFuZV90 eXBlKG91dHB1dCwKPiA+ID4gRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSk7Cj4gPiA+ICsJaWd0X3Bs YW5lX3NldF9mYihwcmltYXJ5LCAmZGF0YS0+cHJpbWFyeV9mYik7Cj4gPiA+ICsJaWd0X2Rpc3Bs YXlfY29tbWl0MigmZGF0YS0+ZGlzcGxheSwgZGF0YS0+Y29tbWl0KTsKPiA+ID4gKwo+ID4gPiAr CXBpcGVfY3JjID0gaWd0X3BpcGVfY3JjX25ldyhkYXRhLT5nZnhfZmQsIHBpcGUsCj4gPiA+IElO VEVMX1BJUEVfQ1JDX1NPVVJDRV9BVVRPKTsKPiA+ID4gKwlpZ3RfcGlwZV9jcmNfc3RhcnQocGlw ZV9jcmMpOwo+ID4gPiArCWMgPSBpZ3RfcGlwZV9jcmNfZ2V0X2NyY3MocGlwZV9jcmMsIHRlc3Rj cmNhbW91bnQsCj4gPiA+ICZkYXRhLQo+ID4gPiA+IAo+ID4gPiA+IGN1cnNvcl9jcmMpOwo+ID4g SWYgb25lIENSQyB3b3VsZCBiZSBlbm91Z2gsIHdlIGNvdWxkIHV0aWxpemUgTWFhcnRlbidzIGxp YnJhcnkKPiA+IHJvdXRpbmUKPiA+ICdpZ3RfcGlwZV9jcmNfZ2V0X3NpbmdsZSgpJy4KPiBJJ2xs IHRyeSB0aGlzIGFuZCBzZWUgaG93IGl0IGdvZXMuCj4gCj4gPiAKPiA+ID4gCj4gPiA+ICsJaWd0 X2Fzc2VydChjPT10ZXN0Y3JjYW1vdW50KTsKPiA+ID4gKwlpZ3RfcGlwZV9jcmNfc3RvcChwaXBl X2NyYyk7Cj4gPiBJIHRoaW5rIHdlIGNvdWxkIGtlZXAgY3JjIGdvaW5nIGFuZCBpZiB3ZSBhcmUg Y29uY2VybmVkIHRoYXQgd2UgbWF5Cj4gPiBoYXZlIGluY29ycmVjdCBvbmUgaW4gdGhlIHBpcGUs IHdlIGNvdWxkIGRyYWluIHRoZW0gd2l0aAo+ID4gJ2lndF9pZ3RfcGlwZV9jcmNfZHJhaW4oKScK PiBJbiBtaWQgZGV2ZWxvcG1lbnQgSSB0cmllZCBsZWF2aW5nIGNyYyBydW5uaW5nIGJ1dCBpdCBm b2xsb3dlZCBsb3QKPiBvZsKgCj4gbWVzc2FnZXMgaW4gZG1lc2cgYWJvdXQgYnVmZmVyIGZ1bGwu IEknbGwgcmV0cnkgYW5kIHNlZSBpZiBpdCBpcwo+IHN0aWxswqAKPiBhbiBpc3N1ZS4KPiAKPiBU aGlzIHRlc3QgcnVuIGFzIG9uZSBzaW5nbGUgdGVzdCBnb2luZyB0aHJvdWdoIGFsbCBwaXBlcywg cGxhbmVzIGFuZMKgCj4gbW9kZXMuIEkndmUgYmVlbiB0aGlua2luZyBpZiBJIHNob3VsZCBkaXZp ZGUgaXQgaW4gc21hbGxlciBwaWVjZXMKPiBidXTCoAo+IGRpZG4ndCBnbyB0aGF0IHdheSBiZWNh dXNlIGl0IHdvdWxkIGNhdXNlIHRoZXJlIGJlaW5nIGRpZmZlcmVudAo+IGFtb3VudMKgCj4gb2Yg dGVzdHMgYW5kIGRpZmZlcmVudCB0ZXN0cyBvbiBkaWZmZXJlbnQgaHcuCj4gCj4gPiAKPiA+IAo+ ID4gPiAKPiA+ID4gKwlpZ3RfcGlwZV9jcmNfZnJlZShwaXBlX2NyYyk7Cj4gPiA+ICsJaWd0X3Bs YW5lX3NldF9mYihwcmltYXJ5LCBOVUxMKTsKPiA+ID4gKwlpZ3RfZGlzcGxheV9jb21taXQyKCZk YXRhLT5kaXNwbGF5LCBkYXRhLT5jb21taXQpOwo+ID4gPiArCj4gPiA+ICsJaW50ZWxfZ2VuKGlu dGVsX2dldF9kcm1fZGV2aWQoZGF0YS0+Z2Z4X2ZkKSkgPCA5ID8KPiA+ID4gKwkJwqDCoGlndF9w YWludF9jb2xvcihjciwgMCwgMCwgbW9kZS0+aGRpc3BsYXksCj4gPiA+IG1vZGUtCj4gPiA+ID4g Cj4gPiA+ID4gdmRpc3BsYXksIDEuMCwgMS4wLCAxLjApIDoKPiA+ID4gKwkJwqDCoGlndF9wYWlu dF9jb2xvcl9hbHBoYShjciwgMCwgMCwgbW9kZS0KPiA+ID4gPmhkaXNwbGF5LAo+ID4gPiBtb2Rl LT52ZGlzcGxheSwgMS4wLCAxLjAsIDEuMCwgMS4wKTsKPiA+ID4gKwo+ID4gPiArCWlndF9wbGFu ZV9zZXRfZmIocHJpbWFyeSwgJmRhdGEtPnByaW1hcnlfZmIpOwo+ID4gPiArCWlndF9kaXNwbGF5 X2NvbW1pdDIoJmRhdGEtPmRpc3BsYXksIGRhdGEtPmNvbW1pdCk7Cj4gPiA+ICsKPiA+ID4gKwlw aXBlX2NyYyA9IGlndF9waXBlX2NyY19uZXcoZGF0YS0+Z2Z4X2ZkLCBwaXBlLAo+ID4gPiBJTlRF TF9QSVBFX0NSQ19TT1VSQ0VfQVVUTyk7Cj4gPiA+ICsJaWd0X3BpcGVfY3JjX3N0YXJ0KHBpcGVf Y3JjKTsKPiA+ID4gKwljID0gaWd0X3BpcGVfY3JjX2dldF9jcmNzKHBpcGVfY3JjLCB0ZXN0Y3Jj YW1vdW50LAo+ID4gPiAmZGF0YS0KPiA+ID4gPiAKPiA+ID4gPiBmdWxsc2NyZWVuX2NyYyk7Cj4g PiA+ICsJaWd0X2Fzc2VydChjPT10ZXN0Y3JjYW1vdW50KTsKPiA+ID4gKwlpZ3RfcGlwZV9jcmNf c3RvcChwaXBlX2NyYyk7Cj4gPiA+ICsJaWd0X3BpcGVfY3JjX2ZyZWUocGlwZV9jcmMpOwo+ID4g PiArCj4gPiA+ICsJY2Fpcm9fZGVzdHJveShjcik7Cj4gPiA+ICsJaWd0X3JlbW92ZV9mYihkYXRh LT5nZnhfZmQsICZkYXRhLT5wcmltYXJ5X2ZiKTsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArLyoK PiA+ID4gKyAqIGZpbGxfaW5fZmIgdGVsbCBpbiByZXR1cm4gdmFsdWUgaWYgc2VsZWN0ZWQgbW9k ZSBzaG91bGQgYmUKPiA+ID4gKyAqIHByb2NlZWQgdG8gY3JjIGNoZWNrCj4gPiA+ICsgKi8KPiA+ ID4gK3N0YXRpYyBib29sIGZpbGxfaW5fZmIoZGF0YV90ICpkYXRhLCBpZ3Rfb3V0cHV0X3QgKm91 dHB1dCwgZW51bQo+ID4gPiBwaXBlCj4gPiA+IHBpcGUsCj4gPiA+ICsJCQnCoGlndF9wbGFuZV90 ICpwbGFuZSwgdWludDMyX3QgZm9ybWF0KQo+ID4gPiArewo+ID4gPiArCXNpZ25lZCBpLCBjLCB3 cml0ZXNpemU7Cj4gPiA+ICsJdW5zaWduZWQgc2hvcnQqIHB0ZW1wXzE2X2J1ZjsKPiA+ID4gKwl1 bnNpZ25lZCBpbnQqIHB0ZW1wXzMyX2J1ZjsKPiA+ID4gKwo+ID4gPiArCWNvbnN0IHN0cnVjdCB7 Cj4gPiA+ICsJCXVpbnQzMl90CWZvdXJjYzsKPiA+ID4gKwkJY2hhcgkJemVyb3BhZGRpbmc7Cj4g PiA+ICsJCWVudW0JCXsgQllURVNfUFBfMT0xLAo+ID4gPiArCQkJCcKgwqBCWVRFU19QUF8yPTIs Cj4gPiA+ICsJCQkJwqDCoEJZVEVTX1BQXzQ9NCwKPiA+ID4gKwkJCQnCoMKgTlYxMiwKPiA+ID4g KyNpZiBkZWZpbmVkKERSTV9GT1JNQVRfUDAxMCkgfHwgZGVmaW5lZChEUk1fRk9STUFUX1AwMTIp IHx8Cj4gPiA+IGRlZmluZWQoRFJNX0ZPUk1BVF9QMDE2KQo+ID4gPiArCQkJCcKgwqBQMDEwLAo+ ID4gPiArI2VuZGlmCj4gPiA+ICsJCQkJwqDCoFNLSVAgfSBicHA7Cj4gPiA+ICsJCXVpbnQzMl90 CXZhbHVlOwo+ID4gPiArCX0gZmlsbGVyc1tdID0gewo+ID4gPiArCQl7IERSTV9GT1JNQVRfQzgs IDAsIEJZVEVTX1BQXzEsIDB4ZmZ9LAo+ID4gPiArCQl7IERSTV9GT1JNQVRfUkdCNTY1LCAwLCBC WVRFU19QUF8yLCAweGZmZmZ9LAo+ID4gPiArCQl7IERSTV9GT1JNQVRfWFJHQjg4ODgsIDAsIEJZ VEVTX1BQXzQsCj4gPiA+IDB4ZmZmZmZmZmZ9LAo+ID4gPiArCQl7IERSTV9GT1JNQVRfWEJHUjg4 ODgsIDAsIEJZVEVTX1BQXzQsCj4gPiA+IDB4ZmZmZmZmZmZ9LAo+ID4gPiArCj4gPiA+ICsJCS8q Cj4gPiA+ICsJCcKgKiBmb2xsb3dpbmcgdHdvIGFyZSBza2lwcGVkIGJlY2F1c2UgYmxlbmRpbmcK PiA+ID4gc2VlbXMKPiA+ID4gdG8gd29yawo+ID4gPiArCQnCoCogaW5jb3JyZWN0bHkgd2l0aCBl eGNlcHRpb24gb2YgQVIyNCBvbiBjdXJzb3IKPiA+ID4gcGxhbmUuCj4gPiA+ICsJCcKgKiBUZXN0 IHN0aWxsIGNyZWF0ZXMgdGhlIHBsYW5lcywganVzdCBmaWxsaW5nCj4gPiA+IHBsYW5lCj4gPiA+ ICsJCcKgKiBhbmQgZ2V0dGluZyBjcmMgaXMgc2tpcHBlZC4KPiA+ID4gKwkJwqAqLwo+ID4gPiAr CQl7IERSTV9GT1JNQVRfQVJHQjg4ODgsIDAsIFNLSVAsIDB4ZmZmZmZmZmZ9LAo+ID4gPiArCQl7 IERSTV9GT1JNQVRfQUJHUjg4ODgsIDAsIFNLSVAsIDB4MDBmZmZmZmZ9LAo+ID4gPiArCj4gPiA+ ICsJCXsgRFJNX0ZPUk1BVF9YUkdCMjEwMTAxMCwgMCwgQllURVNfUFBfNCwKPiA+ID4gMHhmZmZm ZmZmZn0sCj4gPiA+ICsJCXsgRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMCwgMCwgQllURVNfUFBfNCwK PiA+ID4gMHhmZmZmZmZmZn0sCj4gPiA+ICsKPiA+ID4gKwkJeyBEUk1fRk9STUFUX1lVWVYsIDAs IEJZVEVTX1BQXzQsIDB4ODBlYjgwZWJ9LAo+ID4gPiArCQl7IERSTV9GT1JNQVRfWVZZVSwgMCwg QllURVNfUFBfNCwgMHg4MGViODBlYn0sCj4gPiA+ICsJCXsgRFJNX0ZPUk1BVF9WWVVZLCAwLCBC WVRFU19QUF80LCAweGViODBlYjgwfSwKPiA+ID4gKwkJeyBEUk1fRk9STUFUX1VZVlksIDAsIEJZ VEVTX1BQXzQsIDB4ZWI4MGViODB9LAo+ID4gPiArCj4gPiA+ICsJCS8qCj4gPiA+ICsJCcKgKiAo c2VtaS0pcGxhbmFyIGZvcm1hdHMKPiA+ID4gKwkJwqAqLwo+ID4gPiArCQl7IERSTV9GT1JNQVRf TlYxMiwgMCwgTlYxMiwgMHg4MGVifSwKPiA+ID4gKyNpZmRlZiBEUk1fRk9STUFUX1AwMTAKPiA+ ID4gKwkJeyBEUk1fRk9STUFUX1AwMTAsIDAsIFAwMTAsIDB4ODAwMGViMDB9LAo+ID4gPiArI2Vu ZGlmCj4gPiA+ICsjaWZkZWYgRFJNX0ZPUk1BVF9QMDEyCj4gPiA+ICsJCXsgRFJNX0ZPUk1BVF9Q MDEyLCAwLCBQMDEwLCAweDgwMDBlYjAwfSwKPiA+ID4gKyNlbmRpZgo+ID4gPiArI2lmZGVmIERS TV9GT1JNQVRfUDAxNgo+ID4gPiArCQl7IERSTV9GT1JNQVRfUDAxNiwgMCwgUDAxMCwgMHg4MDAw ZWIwMH0sCj4gPiA+ICsjZW5kaWYKPiA+ID4gKwkJeyAwLCAwLCAwLCAwIH0KPiA+ID4gKwl9Owo+ ID4gPiArCj4gPiA+ICsJZm9yKCBpID0gMDsgZmlsbGVyc1tpXS5mb3VyY2MgIT0gMDsgaSsrICkg ewo+ID4gPiArCQlpZiggZmlsbGVyc1tpXS5mb3VyY2MgPT0gZm9ybWF0ICkKPiA+ID4gKwkJCWJy ZWFrOwo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCXN3aXRjaCAoZmlsbGVyc1tpXS5icHApIHsK PiA+ID4gKwljYXNlIEJZVEVTX1BQXzQ6Cj4gPiA+ICsJCXB0ZW1wXzMyX2J1ZiA9ICh1bnNpZ25l ZCBpbnQqKWRhdGEtPmJ1ZjsKPiA+ID4gKwkJZm9yIChjID0gMDsgYyA8IGRhdGEtPnNpemUvNDsg YysrKQo+ID4gPiArCQkJcHRlbXBfMzJfYnVmW2NdID0gZmlsbGVyc1tpXS52YWx1ZTsKPiA+ID4g KwkJd3JpdGVzaXplID0gZGF0YS0+c2l6ZTsKPiA+ID4gKwkJYnJlYWs7Cj4gPiA+ICsJY2FzZSBC WVRFU19QUF8yOgo+ID4gPiArCQlwdGVtcF8xNl9idWYgPSAodW5zaWduZWQgc2hvcnQqKWRhdGEt PmJ1ZjsKPiA+ID4gKwkJZm9yIChjID0gMDsgYyA8IGRhdGEtPnNpemUvMjsgYysrKQo+ID4gPiAr CQkJcHRlbXBfMTZfYnVmW2NdID0gKHVuc2lnbmVkCj4gPiA+IHNob3J0KWZpbGxlcnNbaV0udmFs dWU7Cj4gPiA+ICsJCXdyaXRlc2l6ZSA9IGRhdGEtPnNpemU7Cj4gPiA+ICsJCWJyZWFrOwo+ID4g PiArCWNhc2UgQllURVNfUFBfMToKPiA+ID4gKwkJbWVtc2V0KCh2b2lkKilkYXRhLT5idWYsIGZp bGxlcnNbaV0udmFsdWUsIGRhdGEtCj4gPiA+ID4gCj4gPiA+ID4gc2l6ZSk7Cj4gPiA+ICsJCXdy aXRlc2l6ZSA9IGRhdGEtPnNpemU7Cj4gPiA+ICsJCWJyZWFrOwo+ID4gPiArCWNhc2UgTlYxMjoK PiA+ID4gKwkJbWVtc2V0KCh2b2lkKilkYXRhLT5idWYsIGZpbGxlcnNbaV0udmFsdWUmMHhmZiwK PiA+ID4gKwkJwqDCoMKgwqDCoMKgwqBkYXRhLT5zaXplKTsKPiA+ID4gKwo+ID4gPiArCQltZW1z ZXQoKHZvaWQqKShkYXRhLT5idWYrZGF0YS0+c2l6ZSksCj4gPiA+ICsJCcKgwqDCoMKgwqDCoMKg KGZpbGxlcnNbaV0udmFsdWU+PjgpJjB4ZmYsIGRhdGEtCj4gPiA+ID5zaXplLzIpOwo+ID4gPiAr Cj4gPiA+ICsJCXdyaXRlc2l6ZSA9IGRhdGEtPnNpemUrZGF0YS0+c2l6ZS8yOwo+ID4gPiArCQli cmVhazsKPiA+ID4gKyNpZiBkZWZpbmVkKERSTV9GT1JNQVRfUDAxMCkgfHwgZGVmaW5lZChEUk1f Rk9STUFUX1AwMTIpIHx8Cj4gPiA+IGRlZmluZWQoRFJNX0ZPUk1BVF9QMDE2KQo+ID4gPiArCWNh c2UgUDAxMDoKPiA+ID4gKwkJcHRlbXBfMTZfYnVmID0gKHVuc2lnbmVkIHNob3J0KilkYXRhLT5i dWY7Cj4gPiA+ICsJCWZvciAoYyA9IDA7IGMgPCBkYXRhLT5zaXplLzI7IGMrKykKPiA+ID4gKwkJ CXB0ZW1wXzE2X2J1ZltjXSA9ICh1bnNpZ25lZAo+ID4gPiBzaG9ydClmaWxsZXJzW2ldLnZhbHVl JjB4ZmZmZjsKPiA+ID4gKwo+ID4gPiArCQlwdGVtcF8xNl9idWYgPSAodW5zaWduZWQgc2hvcnQq KShkYXRhLT5idWYrZGF0YS0KPiA+ID4gPiAKPiA+ID4gPiBzaXplKTsKPiA+ID4gKwkJZm9yIChj ID0gMDsgYyA8IGRhdGEtPnNpemUvMjsgYysrKQo+ID4gPiArCQkJcHRlbXBfMTZfYnVmW2NdID0g KHVuc2lnbmVkCj4gPiA+IHNob3J0KShmaWxsZXJzW2ldLnZhbHVlPj4xNikmMHhmZmZmOwo+ID4g PiArCj4gPiA+ICsJCXdyaXRlc2l6ZSA9IGRhdGEtPnNpemUrZGF0YS0+c2l6ZS8yOwo+ID4gPiAr CQlicmVhazsKPiA+ID4gKyNlbmRpZgo+ID4gPiArCWNhc2UgU0tJUDoKPiA+ID4gKwkJaWYgKGZp bGxlcnNbaV0uZm91cmNjID09IERSTV9GT1JNQVRfQVJHQjg4ODggJiYKPiA+ID4gKwkJwqDCoMKg wqBwbGFuZS0+dHlwZSA9PSBEUk1fUExBTkVfVFlQRV9DVVJTT1IpIHsKPiA+ID4gKwkJLyoKPiA+ ID4gKwkJwqAqIHNwZWNpYWwgZm9yIGN1cnNvciBwbGFuZSB3aGVyZSBibGVuZGluZyB3b3Jrcwo+ ID4gPiBjb3JyZWN0bHkuCj4gPiA+ICsJCcKgKi8KPiA+ID4gKwkJCXB0ZW1wXzMyX2J1ZiA9ICh1 bnNpZ25lZCBpbnQqKWRhdGEtPmJ1ZjsKPiA+ID4gKwkJCWZvciAoYyA9IDA7IGMgPCBkYXRhLT5z aXplLzQ7IGMrKykKPiA+ID4gKwkJCQlwdGVtcF8zMl9idWZbY10gPQo+ID4gPiBmaWxsZXJzW2ld LnZhbHVlOwo+ID4gPiArCQkJd3JpdGVzaXplID0gZGF0YS0+c2l6ZTsKPiA+ID4gKwkJCWJyZWFr Owo+ID4gPiArCQl9Cj4gPiA+ICsJCWlndF9pbmZvKCJGb3JtYXQgJXMgQ1JDIGNvbXBhcmlzb24g c2tpcHBlZCBieQo+ID4gPiBkZXNpZ24uXG4iLAo+ID4gPiArCQkJwqAoY2hhciopJmZpbGxlcnNb aV0uZm91cmNjKTsKPiA+ID4gKwo+ID4gPiArCQlyZXR1cm4gZmFsc2U7Cj4gPiA+ICsJZGVmYXVs dDoKPiA+ID4gKwkJaWd0X2luZm8oIlVuc3VwcG9ydGVkIG1vZGUgZm9yIHRlc3QgJXNcbiIsCj4g PiA+ICsJCQnCoChjaGFyKikmZmlsbGVyc1tpXS5mb3VyY2MpOwo+ID4gPiArCQlyZXR1cm4gZmFs c2U7Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ICsJZG9fd3JpdGUoZGF0YS0+Z2Z4X2ZkLCBkYXRh LT5nZW1faGFuZGxlLCAodm9pZCopZGF0YS0KPiA+ID4gPmJ1ZiwKPiA+ID4gMCwKPiA+ID4gKwkJ wqB3cml0ZXNpemUpOwo+ID4gPiArCj4gPiA+ICsJcmV0dXJuIHRydWU7Cj4gPiA+ICt9Cj4gPiA+ ICsKPiA+ID4gKwo+ID4gPiArc3RhdGljIGJvb2wgc2V0dXBfZmIoZGF0YV90ICpkYXRhLCBpZ3Rf b3V0cHV0X3QgKm91dHB1dCwgZW51bQo+ID4gPiBwaXBlCj4gPiA+IHBpcGUsCj4gPiA+ICsJCcKg wqDCoMKgwqBpZ3RfcGxhbmVfdCAqcGxhbmUsIHVpbnQzMl90IGZvcm1hdCkKPiA+ID4gK3sKPiA+ ID4gKwlkcm1Nb2RlTW9kZUluZm8gKm1vZGU7Cj4gPiA+ICsJdWludDY0X3QgdywgaDsKPiA+ID4g KwlzaWduZWQgcmV0LCBnZW1zaXplID0gMDsKPiA+ID4gKwl1bnNpZ25lZCB0aWxlX3dpZHRoLCB0 aWxlX2hlaWdodCwgc3RyaWRlOwo+ID4gPiArCXVpbnQzMl90IG9mZnNldHNbNF0gPSB7fTsKPiA+ ID4gKwl1aW50MzJfdCogb2Zmc2V0cG9pbnRlciA9IE5VTEw7Cj4gPiA+ICsKPiA+ID4gKwltb2Rl ID0gaWd0X291dHB1dF9nZXRfbW9kZShvdXRwdXQpOwo+ID4gPiArCWlmIChwbGFuZS0+dHlwZSAh PSBEUk1fUExBTkVfVFlQRV9DVVJTT1IpIHsKPiA+ID4gKwkJdyA9IG1vZGUtPmhkaXNwbGF5IDsK PiA+ID4gKwkJaCA9IG1vZGUtPnZkaXNwbGF5Owo+ID4gPiArCX0gZWxzZSB7Cj4gPiA+ICsJCWRy bUdldENhcChkYXRhLT5nZnhfZmQsIERSTV9DQVBfQ1VSU09SX1dJRFRILAo+ID4gPiAmdyk7Cj4g PiA+ICsJCWRybUdldENhcChkYXRhLT5nZnhfZmQsIERSTV9DQVBfQ1VSU09SX0hFSUdIVCwKPiA+ ID4gJmgpOwo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCXN3aXRjaChmb3JtYXQpIHsKPiA+ID4g KyNpZmRlZiBEUk1fRk9STUFUX1AwMTAKPiA+ID4gKwljYXNlIERSTV9GT1JNQVRfUDAxMDoKPiA+ ID4gKyNlbmRpZgo+ID4gPiArI2lmZGVmIERSTV9GT1JNQVRfUDAxMgo+ID4gPiArCWNhc2UgRFJN X0ZPUk1BVF9QMDEyOgo+ID4gPiArI2VuZGlmCj4gPiA+ICsjaWZkZWYgRFJNX0ZPUk1BVF9QMDE2 Cj4gPiA+ICsJY2FzZSBEUk1fRk9STUFUX1AwMTY6Cj4gPiA+ICsjZW5kaWYKPiA+ID4gKyNpZiBk ZWZpbmVkKERSTV9GT1JNQVRfUDAxMCkgfHwgZGVmaW5lZChEUk1fRk9STUFUX1AwMTIpIHx8Cj4g PiA+IGRlZmluZWQoRFJNX0ZPUk1BVF9QMDE2KQo+ID4gPiArCQl0aWxlX3dpZHRoID0gNTEyOwo+ ID4gPiArCQl0aWxlX2hlaWdodCA9IDg7Cj4gPiA+ICsKPiA+ID4gKwkJc3RyaWRlID0gQUxJR04o dyoyLCB0aWxlX3dpZHRoKTsKPiA+ID4gKwkJZGF0YS0+c2l6ZSA9IG9mZnNldHNbMV0gPSBzdHJp ZGUqQUxJR04oaCwKPiA+ID4gdGlsZV9oZWlnaHQpOwo+ID4gPiArCj4gPiA+ICsJCWdlbXNpemUg PSBkYXRhLT5zaXplKjI7Cj4gPiA+ICsJCW9mZnNldHBvaW50ZXIgPSAodWludDMyX3QqKSZvZmZz ZXRzOwo+ID4gPiArCQlicmVhazsKPiA+ID4gKyNlbmRpZgo+ID4gPiArCWNhc2UgRFJNX0ZPUk1B VF9OVjEyOgo+ID4gPiArCQl0aWxlX3dpZHRoID0gNTEyOwo+ID4gPiArCQl0aWxlX2hlaWdodCA9 IDg7Cj4gPiBUaGUgbWluaW11bSBoZWlnaHQgaXMgMTYgZm9yIE5WMTIuIFRoaXMgaGFzIGJlZW4g ZGlzY3Vzc2VkIGluIHRoaXMKPiA+IHBhdGNoCj4gPiAKPiA+IGh0dHBzOi8vcGF0Y2h3b3JrLmZy ZWVkZXNrdG9wLm9yZy9wYXRjaC8yMDgxNzEvCj4gPiAKPiBUaGFua3MsIEknbGwgZml4LiBJIGRp ZCB0aGlzIHRlc3Qgb24gdG9wIG9mIFZpZHlhJ3Mgc2V0IHN1Ym1pdHRlZCBvbsKgCj4gZmViMjIg d2hlcmUgaXQgc3RpbGwgd2FzIDguIFNhbWUgaXNzdWUgd2lsbCBhcHBseSBmb3IgUHh4eCBmb3Jt YXRzLgo+IAo+ID4gCj4gPiAKPiA+ID4gCj4gPiA+ICsKPiA+ID4gKwkJc3RyaWRlID0gQUxJR04o dywgdGlsZV93aWR0aCk7Cj4gPiA+ICsJCWRhdGEtPnNpemUgPSBvZmZzZXRzWzFdID0gc3RyaWRl KkFMSUdOKGgsCj4gPiA+IHRpbGVfaGVpZ2h0KTsKPiA+ID4gKwo+ID4gPiArCQlnZW1zaXplID0g ZGF0YS0+c2l6ZSoyOwo+ID4gPiArCQlvZmZzZXRwb2ludGVyID0gKHVpbnQzMl90Kikmb2Zmc2V0 czsKPiA+ID4gKwkJYnJlYWs7Cj4gPiA+ICsJZGVmYXVsdDoKPiA+ID4gKwkJdGlsZV93aWR0aCA9 IDUxMjsKPiA+ID4gKwkJdGlsZV9oZWlnaHQgPSA4Owo+ID4gPiArCj4gPiA+ICsJCS8qCj4gPiA+ ICsJCcKgKiB3KjQgc28gdGhlcmUncyBlbm91Z2ggc3BhY2UKPiA+ID4gKwkJwqAqLwo+ID4gPiAr CQlzdHJpZGUgPSBBTElHTih3KjQsIHRpbGVfd2lkdGgpOwo+ID4gPiArCQlkYXRhLT5zaXplID0g c3RyaWRlKkFMSUdOKGgsIHRpbGVfaGVpZ2h0KTsKPiA+ID4gKwkJb2Zmc2V0cG9pbnRlciA9IE5V TEw7Cj4gPiA+ICsKPiA+ID4gKwkJZ2Vtc2l6ZSA9IGRhdGEtPnNpemU7Cj4gPiA+ICsJCWJyZWFr Owo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCWRhdGEtPmdlbV9oYW5kbGUgPSBnZW1fY3JlYXRl KGRhdGEtPmdmeF9mZCwgZ2Vtc2l6ZSk7Cj4gPiA+ICsJcmV0ID0gX19nZW1fc2V0X3RpbGluZyhk YXRhLT5nZnhfZmQsIGRhdGEtPmdlbV9oYW5kbGUsCj4gPiA+ICsJCQnCoMKgwqDCoMKgwqDCoEk5 MTVfVElMSU5HX05PTkUsIHN0cmlkZSk7Cj4gPiA+ICsKPiA+ID4gKwlpZ3RfYXNzZXJ0X2VxKHJl dCwgMCk7Cj4gPiA+ICsKPiA+ID4gKwlyZXQgPSBfX2ttc19hZGRmYihkYXRhLT5nZnhfZmQsIGRh dGEtPmdlbV9oYW5kbGUsIHcsIGgsCj4gPiA+ICsJCQnCoMKgc3RyaWRlLCBmb3JtYXQsCj4gPiA+ IExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCj4gPiA+ICsJCQnCoMKgb2Zmc2V0cG9pbnRlciwK PiA+ID4gTE9DQUxfRFJNX01PREVfRkJfTU9ESUZJRVJTLAo+ID4gPiArCQkJwqDCoCZkYXRhLT5m Yi5mYl9pZCk7Cj4gPiA+ICsKPiA+ID4gKwlpZihyZXQgPCAwKSB7Cj4gPiA+ICsJCWlndF9pbmZv KCJDcmVhdGluZyBmYiBmb3IgZm9ybWF0ICVzIGZhaWxlZCwKPiA+ID4gcmV0dXJuCj4gPiA+IGNv ZGUgJWRcbiIsCj4gPiA+ICsJCQnCoChjaGFyKikmZGF0YS0+Zm9ybWF0X25hbWUsIHJldCk7Cj4g PiA+ICsKPiA+ID4gKwkJcmV0dXJuIGZhbHNlOwo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCWRh dGEtPmZiLndpZHRoID0gdzsKPiA+ID4gKwlkYXRhLT5mYi5oZWlnaHQgPSBoOwo+ID4gPiArCWRh dGEtPmZiLmdlbV9oYW5kbGUgPSBkYXRhLT5nZW1faGFuZGxlOwo+ID4gPiArCXJldHVybiB0cnVl Owo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICsKPiA+ID4gK3N0YXRpYyB2b2lkIHJlbW92ZV9mYihk YXRhX3QqIGRhdGEsIGlndF9vdXRwdXRfdCogb3V0cHV0LAo+ID4gPiBpZ3RfcGxhbmVfdCogcGxh bmUpCj4gPiA+ICt7Cj4gPiA+ICsJaWYgKGRhdGEtPnNlcGFyYXRlcHJpbWFyeXBsYW5lKSB7Cj4g PiA+ICsJCWlndF9wbGFuZV90KiBwcmltYXJ5ID0KPiA+ID4gaWd0X291dHB1dF9nZXRfcGxhbmVf dHlwZShvdXRwdXQsCj4gPiA+ICsJCQkJCQkJCQo+ID4gPiDCoERSTQo+ID4gPiBfUExBTkVfVFlQ RV9QUklNQVJZKTsKPiA+ID4gKwkJaWd0X3BsYW5lX3NldF9mYihwcmltYXJ5LCBOVUxMKTsKPiA+ ID4gKwkJaWd0X3JlbW92ZV9mYihkYXRhLT5nZnhfZmQsICZkYXRhLT5wcmltYXJ5X2ZiKTsKPiA+ ID4gKwkJaWd0X2Rpc3BsYXlfY29tbWl0MigmZGF0YS0+ZGlzcGxheSwgZGF0YS0KPiA+ID4gPmNv bW1pdCk7Cj4gPiA+ICsJCWRhdGEtPnNlcGFyYXRlcHJpbWFyeXBsYW5lID0gZmFsc2U7Cj4gPiA+ ICsJfQo+ID4gPiArCj4gPiA+ICsJaWd0X3JlbW92ZV9mYihkYXRhLT5nZnhfZmQsICZkYXRhLT5m Yik7Cj4gPiA+ICsJaWd0X2Rpc3BsYXlfY29tbWl0MigmZGF0YS0+ZGlzcGxheSwgZGF0YS0+Y29t bWl0KTsKPiA+ID4gKwlmcmVlKGRhdGEtPmJ1Zik7Cj4gPiA+ICsJZGF0YS0+YnVmID0gTlVMTDsK PiA+ID4gK30KPiA+ID4gKwo+ID4gPiArCj4gPiA+ICtzdGF0aWMgYm9vbCBwcmVwYXJlX2NydGMo ZGF0YV90ICpkYXRhLCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwKPiA+ID4gZW51bQo+ID4gPiBwaXBl IHBpcGUsCj4gPiA+ICsJCQnCoGlndF9wbGFuZV90ICpwbGFuZSwgdWludDMyX3QgZm9ybWF0KQo+ ID4gPiArewo+ID4gPiArCWRybU1vZGVNb2RlSW5mbyAqbW9kZTsKPiA+ID4gKwlpZ3RfcGxhbmVf dCAqcHJpbWFyeTsKPiA+ID4gKwo+ID4gPiArCWlmIChwbGFuZS0+dHlwZSAhPSBEUk1fUExBTkVf VFlQRV9QUklNQVJZKSB7Cj4gPiA+ICsJCW1vZGUgPSBpZ3Rfb3V0cHV0X2dldF9tb2RlKG91dHB1 dCk7Cj4gPiA+ICsJCWlndF9jcmVhdGVfY29sb3JfZmIoZGF0YS0+Z2Z4X2ZkLAo+ID4gPiArCQkJ CcKgwqDCoMKgbW9kZS0+aGRpc3BsYXksIG1vZGUtCj4gPiA+ID52ZGlzcGxheSwKPiA+ID4gKwkJ CQnCoMKgwqDCoERSTV9GT1JNQVRfWFJHQjg4ODgsCj4gPiA+ICsJCQkJwqDCoMKgwqBMT0NBTF9E Uk1fRk9STUFUX01PRF9OT05FLAo+ID4gPiArCQkJCcKgwqDCoMKgMCwgMCwgMCwKPiA+ID4gKwkJ CQnCoMKgwqDCoCZkYXRhLT5wcmltYXJ5X2ZiKTsKPiA+ID4gKwo+ID4gPiArCQlwcmltYXJ5ID0g aWd0X291dHB1dF9nZXRfcGxhbmVfdHlwZShvdXRwdXQsCj4gPiA+ICsJCQkJCQnCoMKgwqDCoERS TV9QTEFORV9UWQo+ID4gPiBQRV9QCj4gPiA+IFJJTUFSWSk7Cj4gPiA+ICsKPiA+ID4gKwkJaWd0 X3BsYW5lX3NldF9mYihwcmltYXJ5LCAmZGF0YS0+cHJpbWFyeV9mYik7Cj4gPiA+ICsJCWlndF9k aXNwbGF5X2NvbW1pdDIoJmRhdGEtPmRpc3BsYXksIGRhdGEtCj4gPiA+ID5jb21taXQpOwo+ID4g PiArCQlkYXRhLT5zZXBhcmF0ZXByaW1hcnlwbGFuZSA9IHRydWU7Cj4gPiA+ICsJfQo+ID4gPiAr Cj4gPiA+ICsJaWYgKCFzZXR1cF9mYihkYXRhLCBvdXRwdXQsIHBpcGUsIHBsYW5lLCBmb3JtYXQp KQo+ID4gPiArCQlyZXR1cm4gZmFsc2U7Cj4gPiA+ICsKPiA+ID4gKwlpZiAoZGF0YS0+YnVmICE9 IE5VTEwpIHsKPiA+ID4gKwkJZnJlZSgodm9pZCopZGF0YS0+YnVmKTsKPiA+ID4gKwkJZGF0YS0+ YnVmID0gTlVMTDsKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4gKwlkYXRhLT5idWYgPSAodW5zaWdu ZWQgY2hhciopY2FsbG9jKGRhdGEtPnNpemUqMiwgMSk7Cj4gPiA+ICsJcmV0dXJuIHRydWU7Cj4g PiA+ICt9Cj4gPiA+ICsKPiA+ID4gKwo+ID4gPiArc3RhdGljIGludAo+ID4gPiArdGVzdF9vbmVf bW9kZShkYXRhX3QqIGRhdGEsIGlndF9vdXRwdXRfdCAqb3V0cHV0LCBpZ3RfcGxhbmVfdCoKPiA+ ID4gcGxhbmUsCj4gPiA+ICsJwqDCoMKgwqDCoMKgZW51bSBwaXBlIHBpcGUsIGludCBtb2RlKQo+ ID4gPiArewo+ID4gPiArCj4gPiA+ICsJaWd0X2NyY190ICpjcmNzID0gTlVMTDsKPiA+ID4gKwlp Z3RfcGlwZV9jcmNfdCAqcGlwZV9jcmM7Cj4gPiA+ICsJc2lnbmVkIGNvdW50LCByVmFsID0gMDsK PiA+ID4gKwlib29sIGRvX2NyYzsKPiA+ID4gKwljaGFyKiBjcmNjb21wYXJlWzJdOwo+ID4gPiAr Cj4gPiA+ICsJaWYgKHByZXBhcmVfY3J0YyhkYXRhLCBvdXRwdXQsIHBpcGUsIHBsYW5lLCBtb2Rl KSl7Cj4gPiA+ICsKPiA+ID4gKwkJLyoKPiA+ID4gKwkJwqAqIHdlIGhhdmUgZmIgZnJvbSBwcmVw YXJlX2NydGMoLi4pIHNvIG5vdyBmaWxsCj4gPiA+IGl0Cj4gPiA+IGluCj4gPiA+ICsJCcKgKiBj b3JyZWN0bHkgaW4gZmlsbF9pbl9mYiguLikKPiA+ID4gKwkJwqAqLwo+ID4gPiArCQlkb19jcmMg PSBmaWxsX2luX2ZiKGRhdGEsIG91dHB1dCwgcGlwZSwgcGxhbmUsCj4gPiA+IG1vZGUpOwo+ID4g PiArCj4gPiA+ICsJCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsICZkYXRhLT5mYik7Cj4gPiA+ICsJ CWlndF9mYl9zZXRfc2l6ZSgmZGF0YS0+ZmIsIHBsYW5lLCBkYXRhLQo+ID4gPiA+ZmIud2lkdGgs Cj4gPiA+IGRhdGEtPmZiLmhlaWdodCk7Cj4gPiA+ICsJCWlndF9wbGFuZV9zZXRfc2l6ZShwbGFu ZSwgZGF0YS0+ZmIud2lkdGgsIGRhdGEtCj4gPiA+ID4gCj4gPiA+ID4gZmIuaGVpZ2h0KTsKPiA+ ID4gKwkJaWd0X2ZiX3NldF9wb3NpdGlvbigmZGF0YS0+ZmIsIHBsYW5lLCAwLCAwKTsKPiA+ID4g KwkJaWd0X2Rpc3BsYXlfY29tbWl0MigmZGF0YS0+ZGlzcGxheSwgZGF0YS0KPiA+ID4gPmNvbW1p dCk7Cj4gPiA+ICsKPiA+ID4gKwkJaWYgKGRvX2NyYykgewo+ID4gPiArCQkJcGlwZV9jcmMgPSBp Z3RfcGlwZV9jcmNfbmV3KGRhdGEtCj4gPiA+ID5nZnhfZmQsCj4gPiA+IHBpcGUsCj4gPiA+ICsJ CQkJCQnCoMKgwqDCoElOVEVMX1BJUEVfQwo+ID4gPiBSQ19TCj4gPiA+IE9VUkNFX0FVVE8pOwo+ ID4gPiArCj4gPiA+ICsJCQlpZ3RfcGlwZV9jcmNfc3RhcnQocGlwZV9jcmMpOwo+ID4gPiArCj4g PiA+ICsJCQljb3VudCA9IGlndF9waXBlX2NyY19nZXRfY3JjcyhwaXBlX2NyYywKPiA+ID4gdGVz dGNyY2Ftb3VudCwgJmNyY3MpOwo+ID4gPiArCQkJaWd0X2Fzc2VydCggY291bnQ9PXRlc3RjcmNh bW91bnQgKTsKPiA+ID4gKwo+ID4gPiArCQkJaWd0X3BpcGVfY3JjX3N0b3AocGlwZV9jcmMpOwo+ ID4gPiArCQkJaWd0X3BpcGVfY3JjX2ZyZWUocGlwZV9jcmMpOwo+ID4gPiArCj4gPiA+ICsJCQlp ZiAocGxhbmUtPnR5cGUgIT0KPiA+ID4gRFJNX1BMQU5FX1RZUEVfQ1VSU09SKSB7Cj4gPiA+ICsJ CQkJaWYKPiA+ID4gKCFpZ3RfY2hlY2tfY3JjX2VxdWFsKCZjcmNzW3Rlc3RjcmNhbW91bnQtMV0s Cj4gPiA+ICsJCQkJCSZkYXRhLQo+ID4gPiA+IAo+ID4gPiA+IGZ1bGxzY3JlZW5fY3JjW3Rlc3Rj cmNhbW91bnQtMV0pKSB7Cj4gPiA+ICsJCQkJCWNyY2NvbXBhcmVbMF0gPQo+ID4gPiBpZ3RfY3Jj X3RvX3N0cmluZygmY3Jjc1t0ZXN0Y3JjYW1vdW50LTFdKTsKPiA+ID4gKwkJCQkJY3JjY29tcGFy ZVsxXSA9Cj4gPiA+IGlndF9jcmNfdG9fc3RyaW5nKCZkYXRhLT5mdWxsc2NyZWVuX2NyY1t0ZXN0 Y3JjYW1vdW50LTFdKTsKPiA+ID4gKwkJCQkJaWd0X3dhcm4oImNyYyBtaXNtYXRjaC4KPiA+ID4g dGFyZ2V0ICUuOHMsIHJlc3VsdCAlLjhzLlxuIiwgY3JjY29tcGFyZVswXSwgY3JjY29tcGFyZVsx XSk7Cj4gPiA+ICsJCQkJCWZyZWUoY3JjY29tcGFyZVswXSk7Cj4gPiA+ICsJCQkJCWZyZWUoY3Jj Y29tcGFyZVsxXSk7Cj4gPiA+ICsJCQkJCXJWYWwrKzsKPiA+ID4gKwkJCQl9Cj4gPiA+ICsJCQl9 IGVsc2Ugewo+ID4gPiArCQkJCWlmCj4gPiA+ICghaWd0X2NoZWNrX2NyY19lcXVhbCgmY3Jjc1t0 ZXN0Y3JjYW1vdW50LTFdLAo+ID4gPiArCQkJCQkmZGF0YS0KPiA+ID4gPiAKPiA+ID4gPiBjdXJz b3JfY3JjW3Rlc3RjcmNhbW91bnQtMV0pKSB7Cj4gPiA+ICsJCQkJCWNyY2NvbXBhcmVbMF0gPQo+ ID4gPiBpZ3RfY3JjX3RvX3N0cmluZygmY3Jjc1t0ZXN0Y3JjYW1vdW50LTFdKTsKPiA+ID4gKwkJ CQkJY3JjY29tcGFyZVsxXSA9Cj4gPiA+IGlndF9jcmNfdG9fc3RyaW5nKCZkYXRhLT5jdXJzb3Jf Y3JjW3Rlc3RjcmNhbW91bnQtMV0pOwo+ID4gPiArCQkJCQlpZ3Rfd2FybigiY3JjIG1pc21hdGNo Lgo+ID4gPiB0YXJnZXQgJS44cywgcmVzdWx0ICUuOHMuXG4iLCBjcmNjb21wYXJlWzBdLCBjcmNj b21wYXJlWzFdKTsKPiA+ID4gKwkJCQkJZnJlZShjcmNjb21wYXJlWzBdKTsKPiA+ID4gKwkJCQkJ ZnJlZShjcmNjb21wYXJlWzFdKTsKPiA+ID4gKwkJCQkJclZhbCsrOwo+ID4gPiArCQkJCX0KPiA+ ID4gKwkJCX0KPiA+ID4gKwkJCWZyZWUoY3Jjcyk7Cj4gPiA+ICsJCX0KPiA+ID4gKwkJcmVtb3Zl X2ZiKGRhdGEsIG91dHB1dCwgcGxhbmUpOwo+ID4gPiArCQlyZXR1cm4gclZhbDsKPiA+ID4gKwl9 Cj4gPiA+ICsJcmV0dXJuIDE7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gKwo+ID4gPiArc3RhdGlj IHZvaWQKPiA+ID4gK3Rlc3RfYXZhaWxhYmxlX21vZGVzKGRhdGFfdCogZGF0YSkKPiA+ID4gK3sK PiA+ID4gKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKPiA+ID4gKwlpZ3RfcGxhbmVfdCAqcGxhbmU7 Cj4gPiA+ICsJaW50KiB1MzJwdHJfZm9ybWF0czsKPiA+ID4gKwlpbnQgbW9kZWluZGV4Owo+ID4g PiArCWVudW0gcGlwZSBwaXBlOwo+ID4gPiArCXN0cnVjdCBkcm1fbW9kZV9nZXRfcGxhbmUgb25l X3BsYW5lID0ge307Cj4gPiA+ICsJaW50IGludmFsaWRzID0gMDsKPiA+ID4gKwo+ID4gPiArCWNo YXIgcGxhbmV0eXBlWzNdWzhdID0geyJPVkVSTEFZXDAiLCAiUFJJTUFSWVwwIiwKPiA+ID4gIkNV UlNPUlwwIgo+ID4gPiB9Owo+ID4gPiArCj4gPiA+ICsJZm9yX2VhY2hfcGlwZV93aXRoX3ZhbGlk X291dHB1dCgmZGF0YS0+ZGlzcGxheSwgcGlwZSwKPiA+ID4gb3V0cHV0KSB7Cj4gPiA+ICsJCWln dF9vdXRwdXRfc2V0X3BpcGUob3V0cHV0LCBwaXBlKTsKPiA+ID4gKwo+ID4gPiArCQkvKgo+ID4g PiArCQnCoCogcmVnZW5lcmF0ZSBjb21wYXJpc29uIGNyY3MgZm9yIGVhY2ggcGlwZSBqdXN0Cj4g PiA+IGluCj4gPiA+IGNhc2UuCj4gPiA+ICsJCcKgKi8KPiA+ID4gKwkJZ2VuZXJhdGVfY29tcGFy aXNvbl9jcmNfbGlzdChkYXRhLCBvdXRwdXQsCj4gPiA+IHBpcGUpOwo+ID4gPiArCj4gPiA+ICsJ CWZvcl9lYWNoX3BsYW5lX29uX3BpcGUoJmRhdGEtPmRpc3BsYXksIHBpcGUsCj4gPiA+IHBsYW5l KQo+ID4gPiB7Cj4gPiA+ICsJCQltZW1zZXQoKHZvaWQqKSZvbmVfcGxhbmUsIDAsCj4gPiA+ICsJ CQnCoMKgwqDCoMKgwqDCoHNpemVvZihzdHJ1Y3QKPiA+ID4gZHJtX21vZGVfZ2V0X3BsYW5lKSk7 Cj4gPiA+ICsJCQlvbmVfcGxhbmUucGxhbmVfaWQgPSBwbGFuZS0+ZHJtX3BsYW5lLQo+ID4gPiA+ IAo+ID4gPiA+IHBsYW5lX2lkOwo+ID4gPiArCQkJLyoKPiA+ID4gKwkJCcKgKiBmaXJzdCBjYWxs IHRvIGtub3cgaG93IG11Y2ggc3BhY2UKPiA+ID4gbmVlZGVkLAo+ID4gPiArCQkJwqAqIHNlY29u ZCBjYWxsIHRvIGdldCBsaXN0IG9mIHN1cHBvcnRlZAo+ID4gPiBtb2Rlcy4KPiA+ID4gKwkJCcKg Ki8KPiA+ID4gKwkJCWlndF9pb2N0bChkYXRhLT5nZnhfZmQsCj4gPiA+IERSTV9JT0NUTF9NT0RF X0dFVFBMQU5FLAo+ID4gPiArCQkJCcKgwqAmb25lX3BsYW5lKTsKPiA+ID4gKwkJCWlndF9hc3Nl cnQob25lX3BsYW5lLmNvdW50X2Zvcm1hdF90eXBlcwo+ID4gPiA+Cj4gPiA+IDApOwo+ID4gPiAr Cj4gPiA+ICsJCQl1MzJwdHJfZm9ybWF0cyA9Cj4gPiA+IChpbnQqKWNhbGxvYyhvbmVfcGxhbmUu Y291bnRfZm9ybWF0X3R5cGVzLAo+ID4gPiArCQkJCQkJwqDCoMKgwqDCoMKgc2l6ZW9mKGludAo+ ID4gPiApKTsKPiA+ID4gKwo+ID4gPiArCQkJb25lX3BsYW5lLmZvcm1hdF90eXBlX3B0ciA9Cj4g PiA+IChfX3U2NCl1MzJwdHJfZm9ybWF0czsKPiA+ID4gKwkJCWlndF9pb2N0bChkYXRhLT5nZnhf ZmQsCj4gPiA+IERSTV9JT0NUTF9NT0RFX0dFVFBMQU5FLAo+ID4gPiArCQkJCcKgwqAmb25lX3Bs YW5lKTsKPiA+ID4gKwo+ID4gPiArCQkJZm9yIChtb2RlaW5kZXggPSAwOwo+ID4gPiArCQkJwqDC oMKgwqDCoG1vZGVpbmRleCA8Cj4gPiA+IG9uZV9wbGFuZS5jb3VudF9mb3JtYXRfdHlwZXM7Cj4g PiA+ICsJCQnCoMKgwqDCoMKgbW9kZWluZGV4KyspIHsKPiA+ID4gKwkJCQlkYXRhLT5mb3JtYXRf bmFtZVswXSA9Cj4gPiA+IHUzMnB0cl9mb3JtYXRzW21vZGVpbmRleF0mMHhmZjsKPiA+ID4gKwkJ CQlkYXRhLT5mb3JtYXRfbmFtZVsxXSA9Cj4gPiA+ICh1MzJwdHJfZm9ybWF0c1ttb2RlaW5kZXhd Pj44KSYweGZmOwo+ID4gPiArCQkJCWRhdGEtPmZvcm1hdF9uYW1lWzJdID0KPiA+ID4gKHUzMnB0 cl9mb3JtYXRzW21vZGVpbmRleF0+PjE2KSYweGZmOwo+ID4gPiArCQkJCWRhdGEtPmZvcm1hdF9u YW1lWzNdID0KPiA+ID4gKHUzMnB0cl9mb3JtYXRzW21vZGVpbmRleF0+PjI0KSYweGZmOwo+ID4g PiArCj4gPiA+ICsJCQkJaWd0X2luZm8oIlRlc3RpbmcgY29ubmVjdG9yICVzCj4gPiA+IHVzaW5n Cj4gPiA+IHBpcGUgJXMiIFwKPiA+ID4gKwkJCQkJwqAiIHBsYW5lIGluZGV4ICVkIHR5cGUKPiA+ ID4gJXMKPiA+ID4gbW9kZSAlc1xuIiwKPiA+ID4gKwkJCQkJwqBpZ3Rfb3V0cHV0X25hbWUob3V0 cHV0KQo+ID4gPiAsCj4gPiA+ICsJCQkJCcKga21zdGVzdF9waXBlX25hbWUocGlwZSkKPiA+ID4g LAo+ID4gPiArCQkJCQnCoHBsYW5lLT5pbmRleCwKPiA+ID4gKwkJCQkJwqBwbGFuZXR5cGVbcGxh bmUtPnR5cGVdLAo+ID4gPiArCQkJCQnCoChjaGFyKikmZGF0YS0KPiA+ID4gPmZvcm1hdF9uYW1l KTsKPiA+ID4gKwo+ID4gPiArCQkJCWludmFsaWRzICs9IHRlc3Rfb25lX21vZGUoZGF0YSwKPiA+ ID4gb3V0cHV0LAo+ID4gPiArCQkJCQkJCcKgwqBwbGFuZSwKPiA+ID4gcGlwZSwKPiA+ID4gKwkJ CQkJCQnCoMKgdTMycHRyCj4gPiA+IF9mb3IKPiA+ID4gbWF0c1ttb2RlaW5kZXhdKTsKPiA+ID4g KwkJCX0KPiA+ID4gKwkJCWZyZWUoKHZvaWQqKW9uZV9wbGFuZS5mb3JtYXRfdHlwZV9wdHIpOwo+ ID4gPiArCQl9Cj4gPiA+ICsJCWZyZWUoZGF0YS0+Y3Vyc29yX2NyYyk7Cj4gPiA+ICsJCWZyZWUo ZGF0YS0+ZnVsbHNjcmVlbl9jcmMpOwo+ID4gPiArCX0KPiA+ID4gKwlpZ3RfYXNzZXJ0KGludmFs aWRzID09IDApOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICsKPiA+ID4gK2lndF9tYWluCj4gPiA+ ICt7Cj4gPiA+ICsJZGF0YV90IGRhdGEgPSB7fTsKPiA+ID4gKwo+ID4gPiArCWlndF9za2lwX29u X3NpbXVsYXRpb24oKTsKPiA+ID4gKwo+ID4gPiArCWlndF9maXh0dXJlIHsKPiA+ID4gKwkJZGF0 YS5nZnhfZmQgPQo+ID4gPiBkcm1fb3Blbl9kcml2ZXJfbWFzdGVyKERSSVZFUl9JTlRFTCk7Cj4g PiA+ICsJCWttc3Rlc3Rfc2V0X3Z0X2dyYXBoaWNzX21vZGUoKTsKPiA+ID4gKwo+ID4gPiArCQlp Z3RfZGlzcGxheV9pbml0KCZkYXRhLmRpc3BsYXksIGRhdGEuZ2Z4X2ZkKTsKPiA+ID4gKwo+ID4g PiArCQlpZ3RfcmVxdWlyZV9waXBlX2NyYyhkYXRhLmdmeF9mZCk7Cj4gPiA+ICsJfQo+ID4gPiAr Cj4gPiA+ICsJZGF0YS5jb21taXQgPSBkYXRhLmRpc3BsYXkuaXNfYXRvbWljID8gQ09NTUlUX0FU T01JQyA6Cj4gPiA+IENPTU1JVF9MRUdBQ1k7Cj4gPiA+ICsKPiA+ID4gKwlpZ3Rfc3VidGVzdCgi YXZhaWxhYmxlX21vZGVfdGVzdF9jcmMiKSB7Cj4gPiA+ICsJCXRlc3RfYXZhaWxhYmxlX21vZGVz KCZkYXRhKTsKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4gKwlpZ3RfZml4dHVyZSB7Cj4gPiA+ICsJ CWttc3Rlc3RfcmVzdG9yZV92dF9tb2RlKCk7Cj4gPiA+ICsJCWlndF9kaXNwbGF5X2ZpbmkoJmRh dGEuZGlzcGxheSk7Cj4gPiA+ICsJfQo+ID4gPiArfQo+ID4gPiBkaWZmIC0tZ2l0IGEvdGVzdHMv bWVzb24uYnVpbGQgYi90ZXN0cy9tZXNvbi5idWlsZAo+ID4gPiBpbmRleCAyMmU0YWM5Li42YTVi ZDk2IDEwMDY0NAo+ID4gPiAtLS0gYS90ZXN0cy9tZXNvbi5idWlsZAo+ID4gPiArKysgYi90ZXN0 cy9tZXNvbi5idWlsZAo+ID4gPiBAQCAtMTUwLDYgKzE1MCw3IEBAIHRlc3RfcHJvZ3MgPSBbCj4g PiA+IMKgwqAJJ2ttc19hdG9taWMnLAo+ID4gPiDCoMKgCSdrbXNfYXRvbWljX2ludGVycnVwdGli bGUnLAo+ID4gPiDCoMKgCSdrbXNfYXRvbWljX3RyYW5zaXRpb24nLAo+ID4gPiArCSdrbXNfYXZh aWxhYmxlX21vZGVzX2NyYycsCj4gPiA+IMKgwqAJJ2ttc19idXN5JywKPiA+ID4gwqDCoAkna21z X2NjcycsCj4gPiA+IMKgwqAJJ2ttc19jaHZfY3Vyc29yX2ZhaWwnLAotLSAKTWlrYSBLYWhvbGEg LSBJbnRlbCBPVEMKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldgo=