From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8C72F6E1F0 for ; Tue, 15 May 2018 09:15:40 +0000 (UTC) Message-ID: <1526375737.11552.73.camel@intel.com> From: Mika Kahola Date: Tue, 15 May 2018 12:15:37 +0300 In-Reply-To: <1521562389-10368-1-git-send-email-juhapekka.heikkila@gmail.com> References: <1521562389-10368-1-git-send-email-juhapekka.heikkila@gmail.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: Juha-Pekka Heikkila , igt-dev@lists.freedesktop.org List-ID: T24gVHVlLCAyMDE4LTAzLTIwIGF0IDE4OjEzICswMjAwLCBKdWhhLVBla2thIEhlaWtraWxhIHdy b3RlOgo+IEFzayBmcm9tIGtlcm5lbCBhYm91dCBzdXBwb3J0ZWQgbW9kZXMgZm9yIGVhY2ggcGxh bmUgYW5kIHRyeSBzZXR0aW5nCj4gdGhlbSBvbiBkaXNwbGF5IGFuZCB2ZXJpZnkgZnVuY3Rpb25h bGl0eSB3aXRoIGNyYy4KPiAKPiBEUk1fRk9STUFUX0FSR0I4ODg4IGFuZCBEUk1fRk9STUFUX0FC R1I4ODg4IHNraXAgY3JjIHRlc3Rpbmcgb24KPiBwcmltYXJ5IGFuZCBvdmVybGF5IHBsYW5lcyBi ZWNhdXNlIHRoZXkgcHJvZHVjZSBpbmNvcnJlY3QgY3JjcyBmcm9tCj4gaGFyZHdhcmUuIERSTV9G T1JNQVRfQVJHQjg4ODggaXMgdGVzdGVkIG9uIGN1cnNvciBwbGFuZS4KPiAKPiB2MjogQWRkZWQg c3VwcG9ydCBmb3IgcGxhbmFyIGZvcm1hdHMuCj4gCj4gdjM6IEFkZHJlc3MgcmV2aWV3IGNvbW1l bnRzIGZyb20gTWlrYSBLYWhvbGEuCj4gS2VlcCBjcmMgcnVubmluZyBmb3IgYWxsIHRlc3RzIHdo aWxlIG9uIHNhbWUgcGlwZSwgc2V0IHRpbGUgaGVpZ2h0Cj4gdG8gMTYgYW5kIHJlYWQgb25seSBv bmUgY3JjIHBlciB0ZXN0Lgo+IAo+IFNpZ25lZC1vZmYtYnk6IEp1aGEtUGVra2EgSGVpa2tpbGEg PGp1aGFwZWtrYS5oZWlra2lsYUBnbWFpbC5jb20+Cj4gLS0tCj4gwqB0ZXN0cy9NYWtlZmlsZS5z b3VyY2VzwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoMKgMSArCj4gwqB0ZXN0cy9rbXNfYXZhaWxh YmxlX21vZGVzX2NyYy5jIHwgNTQxCj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwo+IMKgdGVzdHMvbWVzb24uYnVpbGTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqB8wqDCoMKgMSArCj4gwqAzIGZpbGVzIGNoYW5nZWQsIDU0MyBpbnNlcnRpb25zKCspCj4gwqBj cmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMva21zX2F2YWlsYWJsZV9tb2Rlc19jcmMuYwo+IAo+IGRp ZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGIvdGVzdHMvTWFrZWZpbGUuc291cmNl cwo+IGluZGV4IGYxZDFjYmEuLjA2MjIwNDggMTAwNjQ0Cj4gLS0tIGEvdGVzdHMvTWFrZWZpbGUu c291cmNlcwo+ICsrKyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPiBAQCAtMTczLDYgKzE3Myw3 IEBAIFRFU1RTX3Byb2dzID0gXAo+IMKgCWttc19hdG9taWMgXAo+IMKgCWttc19hdG9taWNfaW50 ZXJydXB0aWJsZSBcCj4gwqAJa21zX2F0b21pY190cmFuc2l0aW9uIFwKPiArCWttc19hdmFpbGFi bGVfbW9kZXNfY3JjIFwKPiDCoAlrbXNfYnVzeSBcCj4gwqAJa21zX2NjcyBcCj4gwqAJa21zX2No dl9jdXJzb3JfZmFpbCBcCj4gZGlmZiAtLWdpdCBhL3Rlc3RzL2ttc19hdmFpbGFibGVfbW9kZXNf Y3JjLmMKPiBiL3Rlc3RzL2ttc19hdmFpbGFibGVfbW9kZXNfY3JjLmMKPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjE4YzM2ODUKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIv dGVzdHMva21zX2F2YWlsYWJsZV9tb2Rlc19jcmMuYwo+IEBAIC0wLDAgKzEsNTQxIEBACj4gKy8q Cj4gKyAqIENvcHlyaWdodCDCqSAyMDE4IEludGVsIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqIFBl cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29u Cj4gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVk IGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQo+ICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGlu IHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dAo+IGxp bWl0YXRpb24KPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1 Ymxpc2gsIGRpc3RyaWJ1dGUsCj4gc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVz IG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20KPiB0aGUKPiAr ICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dp bmcKPiBjb25kaXRpb25zOgo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBh bmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nCj4gdGhlIG5leHQKPiArICogcGFy YWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsCj4g cG9ydGlvbnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUg SVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKPiBFWFBS RVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdB UlJBTlRJRVMgT0YKPiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuwqDCoElOIE5PCj4gRVZFTlQgU0hBTEwK PiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkg Q0xBSU0sIERBTUFHRVMKPiBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4g QUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKPiBBUklTSU5HCj4gKyAqIEZS T00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0Ug T1IKPiBPVEhFUiBERUFMSU5HUwo+ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4gKyAqCj4gKyAqLwo+ ICsKPiArI2luY2x1ZGUgImRybV9tb2RlLmgiCj4gKyNpbmNsdWRlICJkcm1fZm91cmNjLmgiCj4g KyNpbmNsdWRlICJpZ3QuaCIKPiArI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgo+ICsKPiArSUdUX1RF U1RfREVTQ1JJUFRJT04oIkNSQyB0ZXN0IGFsbCBkaWZmZXJlbnQgcGxhbmUgbW9kZXMgd2hpY2gK PiBrZXJuZWwgYWR2ZXJ0aXNlcy4iKTsKPiArCj4gK3R5cGVkZWYgc3RydWN0IHsKPiArCWludCBn ZnhfZmQ7Cj4gKwlpZ3RfZGlzcGxheV90IGRpc3BsYXk7Cj4gKwllbnVtIGlndF9jb21taXRfc3R5 bGUgY29tbWl0Owo+ICsKPiArCXN0cnVjdCBpZ3RfZmIgZmI7Cj4gKwlzdHJ1Y3QgaWd0X2ZiIHBy aW1hcnlfZmI7Cj4gKwo+ICsJY2hhciBmb3JtYXRfbmFtZVs1XTsKPiArCWJvb2wgc2VwYXJhdGVw cmltYXJ5cGxhbmU7Cj4gKwo+ICsJdWludDMyX3QgZ2VtX2hhbmRsZTsKPiArCXVpbnQzMl90IGdl bV9oYW5kbGVfeXV2Owo+ICsJdW5zaWduZWQgaW50IHNpemU7Cj4gKwl1bnNpZ25lZCBjaGFyKiBi dWY7Cj4gKwo+ICsJLyoKPiArCcKgKiBjb21wYXJpc29uIGNyY3MKPiArCcKgKi8KPiArCWlndF9w aXBlX2NyY190ICpwaXBlX2NyYzsKPiArCj4gKwlpZ3RfY3JjX3QgY3Vyc29yX2NyYzsKPiArCWln dF9jcmNfdCBmdWxsc2NyZWVuX2NyYzsKPiArfSBkYXRhX3Q7Cj4gKwo+ICsKPiArc3RhdGljIGlu dCBkb193cml0ZShpbnQgZmQsIGludCBoYW5kbGUsIHZvaWQgKmJ1ZiwgaW50IHNpemUpCj4gK3sK PiArCXN0cnVjdCBkcm1faTkxNV9nZW1fcHdyaXRlIHdyaXRlOwo+ICsJbWVtc2V0KCZ3cml0ZSwg MHgwMCwgc2l6ZW9mKHdyaXRlKSk7Cj4gKwl3cml0ZS5oYW5kbGUgPSBoYW5kbGU7Cj4gKwl3cml0 ZS5kYXRhX3B0ciA9ICh1aW50cHRyX3QpYnVmOwo+ICsJd3JpdGUuc2l6ZSA9IHNpemU7Cj4gKwl3 cml0ZS5vZmZzZXQgPSAwOwo+ICsJcmV0dXJuIGlvY3RsKGZkLCBEUk1fSU9DVExfSTkxNV9HRU1f UFdSSVRFLCAmd3JpdGUpOwo+ICt9Cj4gKwo+ICsKPiArc3RhdGljIHZvaWQgZ2VuZXJhdGVfY29t cGFyaXNvbl9jcmNfbGlzdChkYXRhX3QgKmRhdGEsIGlndF9vdXRwdXRfdAo+ICpvdXRwdXQpCj4g K3sKPiArCWRybU1vZGVNb2RlSW5mbyAqbW9kZTsKPiArCXVpbnQ2NF90IHcsIGg7Cj4gKwlpbnQg ZmJpZDsKPiArCWNhaXJvX3QgKmNyOwo+ICsJaWd0X3BsYW5lX3QgKnByaW1hcnk7Cj4gKwo+ICsJ bW9kZSA9IGlndF9vdXRwdXRfZ2V0X21vZGUob3V0cHV0KTsKPiArCWZiaWQgPSBpZ3RfY3JlYXRl X2NvbG9yX2ZiKGRhdGEtPmdmeF9mZCwKPiArCQkJCcKgwqDCoG1vZGUtPmhkaXNwbGF5LAo+ICsJ CQkJwqDCoMKgbW9kZS0+dmRpc3BsYXksCj4gKwkJCQnCoMKgwqBpbnRlbF9nZW4oaW50ZWxfZ2V0 X2RybV9kZXZpZChkYXQKPiBhLT5nZnhfZmQpKSA8IDkgPyBEUk1fRk9STUFUX1hSR0I4ODg4IDog RFJNX0ZPUk1BVF9BUkdCODg4OCwKPiArCQkJCcKgwqDCoExPQ0FMX0RSTV9GT1JNQVRfTU9EX05P TkUsCj4gKwkJCQnCoMKgwqAwLCAwLCAwLAo+ICsJCQkJwqDCoMKgJmRhdGEtPnByaW1hcnlfZmIp Owo+ICsKPiArCWlndF9hc3NlcnQoZmJpZCk7Cj4gKwo+ICsJZHJtR2V0Q2FwKGRhdGEtPmdmeF9m ZCwgRFJNX0NBUF9DVVJTT1JfV0lEVEgsICZ3KTsKPiArCWRybUdldENhcChkYXRhLT5nZnhfZmQs IERSTV9DQVBfQ1VSU09SX0hFSUdIVCwgJmgpOwo+ICsKPiArCWNyID0gaWd0X2dldF9jYWlyb19j dHgoZGF0YS0+Z2Z4X2ZkLCAmZGF0YS0+cHJpbWFyeV9mYik7Cj4gKwlpZ3RfcGFpbnRfY29sb3Io Y3IsIDAsIDAsIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSwKPiArCQkJwqDCoMKgwqAw LjAsIDAuMCwgMC4wKTsKPiArCWlndF9wYWludF9jb2xvcihjciwgMCwgMCwgdywgaCwgMS4wLCAx LjAsIDEuMCk7Cj4gKwlpZ3RfYXNzZXJ0KGNhaXJvX3N0YXR1cyhjcikgPT0gMCk7Cj4gKwo+ICsJ cHJpbWFyeSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lX3R5cGUob3V0cHV0LAo+IERSTV9QTEFORV9U WVBFX1BSSU1BUlkpOwo+ICsJaWd0X3BsYW5lX3NldF9mYihwcmltYXJ5LCAmZGF0YS0+cHJpbWFy eV9mYik7Cj4gKwlpZ3RfZGlzcGxheV9jb21taXQyKCZkYXRhLT5kaXNwbGF5LCBkYXRhLT5jb21t aXQpOwo+ICsKPiArCWlndF9waXBlX2NyY19kcmFpbihkYXRhLT5waXBlX2NyYyk7Cj4gKwlpZ3Rf cGlwZV9jcmNfZ2V0X3NpbmdsZShkYXRhLT5waXBlX2NyYywgJmRhdGEtPmN1cnNvcl9jcmMpOwo+ ICsJaWd0X3BsYW5lX3NldF9mYihwcmltYXJ5LCBOVUxMKTsKPiArCWlndF9kaXNwbGF5X2NvbW1p dDIoJmRhdGEtPmRpc3BsYXksIGRhdGEtPmNvbW1pdCk7Cj4gKwo+ICsJaW50ZWxfZ2VuKGludGVs X2dldF9kcm1fZGV2aWQoZGF0YS0+Z2Z4X2ZkKSkgPCA5ID8KPiArCQnCoMKgaWd0X3BhaW50X2Nv bG9yKGNyLCAwLCAwLCBtb2RlLT5oZGlzcGxheSwgbW9kZS0KPiA+dmRpc3BsYXksIDEuMCwgMS4w LCAxLjApIDoKPiArCQnCoMKgaWd0X3BhaW50X2NvbG9yX2FscGhhKGNyLCAwLCAwLCBtb2RlLT5o ZGlzcGxheSwKPiBtb2RlLT52ZGlzcGxheSwgMS4wLCAxLjAsIDEuMCwgMS4wKTsKPiArCj4gKwlp Z3RfcGxhbmVfc2V0X2ZiKHByaW1hcnksICZkYXRhLT5wcmltYXJ5X2ZiKTsKPiArCWlndF9kaXNw bGF5X2NvbW1pdDIoJmRhdGEtPmRpc3BsYXksIGRhdGEtPmNvbW1pdCk7Cj4gKwo+ICsJaWd0X3Bp cGVfY3JjX2RyYWluKGRhdGEtPnBpcGVfY3JjKTsKPiArCWlndF9waXBlX2NyY19nZXRfc2luZ2xl KGRhdGEtPnBpcGVfY3JjLCAmZGF0YS0KPiA+ZnVsbHNjcmVlbl9jcmMpOwo+ICsKPiArCWNhaXJv X2Rlc3Ryb3koY3IpOwo+ICsJaWd0X3JlbW92ZV9mYihkYXRhLT5nZnhfZmQsICZkYXRhLT5wcmlt YXJ5X2ZiKTsKPiArfQo+ICsKPiArLyoKPiArICogZmlsbF9pbl9mYiB0ZWxsIGluIHJldHVybiB2 YWx1ZSBpZiBzZWxlY3RlZCBtb2RlIHNob3VsZCBiZQo+ICsgKiBwcm9jZWVkIHRvIGNyYyBjaGVj awo+ICsgKi8KPiArc3RhdGljIGJvb2wgZmlsbF9pbl9mYihkYXRhX3QgKmRhdGEsIGlndF9vdXRw dXRfdCAqb3V0cHV0LAo+IGlndF9wbGFuZV90ICpwbGFuZSwKPiArCQnCoMKgwqDCoMKgwqDCoHVp bnQzMl90IGZvcm1hdCkKPiArewo+ICsJc2lnbmVkIGksIGMsIHdyaXRlc2l6ZTsKPiArCXVuc2ln bmVkIHNob3J0KiBwdGVtcF8xNl9idWY7Cj4gKwl1bnNpZ25lZCBpbnQqIHB0ZW1wXzMyX2J1ZjsK PiArCj4gKwljb25zdCBzdHJ1Y3Qgewo+ICsJCXVpbnQzMl90CWZvdXJjYzsKPiArCQljaGFyCQl6 ZXJvcGFkZGluZzsKPiArCQllbnVtCQl7IEJZVEVTX1BQXzE9MSwKPiArCQkJCcKgwqBCWVRFU19Q UF8yPTIsCj4gKwkJCQnCoMKgQllURVNfUFBfND00LAo+ICsJCQkJwqDCoE5WMTIsCj4gKyNpZiBk ZWZpbmVkKERSTV9GT1JNQVRfUDAxMCkgfHwgZGVmaW5lZChEUk1fRk9STUFUX1AwMTIpIHx8Cj4g ZGVmaW5lZChEUk1fRk9STUFUX1AwMTYpCj4gKwkJCQnCoMKgUDAxMCwKPiArI2VuZGlmCj4gKwkJ CQnCoMKgU0tJUCB9IGJwcDsKPiArCQl1aW50MzJfdAl2YWx1ZTsKPiArCX0gZmlsbGVyc1tdID0g ewo+ICsJCXsgRFJNX0ZPUk1BVF9DOCwgMCwgQllURVNfUFBfMSwgMHhmZn0sCj4gKwkJeyBEUk1f Rk9STUFUX1JHQjU2NSwgMCwgQllURVNfUFBfMiwgMHhmZmZmfSwKPiArCQl7IERSTV9GT1JNQVRf WFJHQjg4ODgsIDAsIEJZVEVTX1BQXzQsIDB4ZmZmZmZmZmZ9LAo+ICsJCXsgRFJNX0ZPUk1BVF9Y QkdSODg4OCwgMCwgQllURVNfUFBfNCwgMHhmZmZmZmZmZn0sCj4gKwo+ICsJCS8qCj4gKwkJwqAq IGZvbGxvd2luZyB0d28gYXJlIHNraXBwZWQgYmVjYXVzZSBibGVuZGluZyBzZWVtcwo+IHRvIHdv cmsKPiArCQnCoCogaW5jb3JyZWN0bHkgd2l0aCBleGNlcHRpb24gb2YgQVIyNCBvbiBjdXJzb3IK PiBwbGFuZS4KPiArCQnCoCogVGVzdCBzdGlsbCBjcmVhdGVzIHRoZSBwbGFuZXMsIGp1c3QgZmls bGluZyBwbGFuZQo+ICsJCcKgKiBhbmQgZ2V0dGluZyBjcmMgaXMgc2tpcHBlZC4KPiArCQnCoCov Cj4gKwkJeyBEUk1fRk9STUFUX0FSR0I4ODg4LCAwLCBTS0lQLCAweGZmZmZmZmZmfSwKPiArCQl7 IERSTV9GT1JNQVRfQUJHUjg4ODgsIDAsIFNLSVAsIDB4MDBmZmZmZmZ9LAo+ICsKPiArCQl7IERS TV9GT1JNQVRfWFJHQjIxMDEwMTAsIDAsIEJZVEVTX1BQXzQsCj4gMHhmZmZmZmZmZn0sCj4gKwkJ eyBEUk1fRk9STUFUX1hCR1IyMTAxMDEwLCAwLCBCWVRFU19QUF80LAo+IDB4ZmZmZmZmZmZ9LAo+ ICsKPiArCQl7IERSTV9GT1JNQVRfWVVZViwgMCwgQllURVNfUFBfNCwgMHg4MGViODBlYn0sCj4g KwkJeyBEUk1fRk9STUFUX1lWWVUsIDAsIEJZVEVTX1BQXzQsIDB4ODBlYjgwZWJ9LAo+ICsJCXsg RFJNX0ZPUk1BVF9WWVVZLCAwLCBCWVRFU19QUF80LCAweGViODBlYjgwfSwKPiArCQl7IERSTV9G T1JNQVRfVVlWWSwgMCwgQllURVNfUFBfNCwgMHhlYjgwZWI4MH0sCj4gKwo+ICsJCS8qCj4gKwkJ wqAqIChzZW1pLSlwbGFuYXIgZm9ybWF0cwo+ICsJCcKgKi8KPiArCQl7IERSTV9GT1JNQVRfTlYx MiwgMCwgTlYxMiwgMHg4MGVifSwKPiArI2lmZGVmIERSTV9GT1JNQVRfUDAxMAo+ICsJCXsgRFJN X0ZPUk1BVF9QMDEwLCAwLCBQMDEwLCAweDgwMDBlYjAwfSwKPiArI2VuZGlmCj4gKyNpZmRlZiBE Uk1fRk9STUFUX1AwMTIKPiArCQl7IERSTV9GT1JNQVRfUDAxMiwgMCwgUDAxMCwgMHg4MDAwZWIw MH0sCj4gKyNlbmRpZgo+ICsjaWZkZWYgRFJNX0ZPUk1BVF9QMDE2Cj4gKwkJeyBEUk1fRk9STUFU X1AwMTYsIDAsIFAwMTAsIDB4ODAwMGViMDB9LAo+ICsjZW5kaWYKPiArCQl7IDAsIDAsIDAsIDAg fQo+ICsJfTsKPiArCj4gKwlmb3IoIGkgPSAwOyBmaWxsZXJzW2ldLmZvdXJjYyAhPSAwOyBpKysg KSB7Cj4gKwkJaWYoIGZpbGxlcnNbaV0uZm91cmNjID09IGZvcm1hdCApCj4gKwkJCWJyZWFrOwo+ ICsJfQo+ICsKPiArCXN3aXRjaCAoZmlsbGVyc1tpXS5icHApIHsKPiArCWNhc2UgQllURVNfUFBf NDoKPiArCQlwdGVtcF8zMl9idWYgPSAodW5zaWduZWQgaW50KilkYXRhLT5idWY7Cj4gKwkJZm9y IChjID0gMDsgYyA8IGRhdGEtPnNpemUvNDsgYysrKQo+ICsJCQlwdGVtcF8zMl9idWZbY10gPSBm aWxsZXJzW2ldLnZhbHVlOwo+ICsJCXdyaXRlc2l6ZSA9IGRhdGEtPnNpemU7Cj4gKwkJYnJlYWs7 Cj4gKwljYXNlIEJZVEVTX1BQXzI6Cj4gKwkJcHRlbXBfMTZfYnVmID0gKHVuc2lnbmVkIHNob3J0 KilkYXRhLT5idWY7Cj4gKwkJZm9yIChjID0gMDsgYyA8IGRhdGEtPnNpemUvMjsgYysrKQo+ICsJ CQlwdGVtcF8xNl9idWZbY10gPSAodW5zaWduZWQKPiBzaG9ydClmaWxsZXJzW2ldLnZhbHVlOwo+ ICsJCXdyaXRlc2l6ZSA9IGRhdGEtPnNpemU7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIEJZVEVTX1BQ XzE6Cj4gKwkJbWVtc2V0KCh2b2lkKilkYXRhLT5idWYsIGZpbGxlcnNbaV0udmFsdWUsIGRhdGEt Cj4gPnNpemUpOwo+ICsJCXdyaXRlc2l6ZSA9IGRhdGEtPnNpemU7Cj4gKwkJYnJlYWs7Cj4gKwlj YXNlIE5WMTI6Cj4gKwkJbWVtc2V0KCh2b2lkKilkYXRhLT5idWYsIGZpbGxlcnNbaV0udmFsdWUm MHhmZiwKPiArCQnCoMKgwqDCoMKgwqDCoGRhdGEtPnNpemUpOwo+ICsKPiArCQltZW1zZXQoKHZv aWQqKShkYXRhLT5idWYrZGF0YS0+c2l6ZSksCj4gKwkJwqDCoMKgwqDCoMKgwqAoZmlsbGVyc1tp XS52YWx1ZT4+OCkmMHhmZiwgZGF0YS0+c2l6ZS8yKTsKPiArCj4gKwkJd3JpdGVzaXplID0gZGF0 YS0+c2l6ZStkYXRhLT5zaXplLzI7Cj4gKwkJYnJlYWs7Cj4gKyNpZiBkZWZpbmVkKERSTV9GT1JN QVRfUDAxMCkgfHwgZGVmaW5lZChEUk1fRk9STUFUX1AwMTIpIHx8Cj4gZGVmaW5lZChEUk1fRk9S TUFUX1AwMTYpCj4gKwljYXNlIFAwMTA6Cj4gKwkJcHRlbXBfMTZfYnVmID0gKHVuc2lnbmVkIHNo b3J0KilkYXRhLT5idWY7Cj4gKwkJZm9yIChjID0gMDsgYyA8IGRhdGEtPnNpemUvMjsgYysrKQo+ ICsJCQlwdGVtcF8xNl9idWZbY10gPSAodW5zaWduZWQKPiBzaG9ydClmaWxsZXJzW2ldLnZhbHVl JjB4ZmZmZjsKPiArCj4gKwkJcHRlbXBfMTZfYnVmID0gKHVuc2lnbmVkIHNob3J0KikoZGF0YS0+ YnVmK2RhdGEtCj4gPnNpemUpOwo+ICsJCWZvciAoYyA9IDA7IGMgPCBkYXRhLT5zaXplLzI7IGMr KykKPiArCQkJcHRlbXBfMTZfYnVmW2NdID0gKHVuc2lnbmVkCj4gc2hvcnQpKGZpbGxlcnNbaV0u dmFsdWU+PjE2KSYweGZmZmY7Cj4gKwo+ICsJCXdyaXRlc2l6ZSA9IGRhdGEtPnNpemUrZGF0YS0+ c2l6ZS8yOwo+ICsJCWJyZWFrOwo+ICsjZW5kaWYKPiArCWNhc2UgU0tJUDoKPiArCQlpZiAoZmls bGVyc1tpXS5mb3VyY2MgPT0gRFJNX0ZPUk1BVF9BUkdCODg4OCAmJgo+ICsJCcKgwqDCoMKgcGxh bmUtPnR5cGUgPT0gRFJNX1BMQU5FX1RZUEVfQ1VSU09SKSB7Cj4gKwkJLyoKPiArCQnCoCogc3Bl Y2lhbCBmb3IgY3Vyc29yIHBsYW5lIHdoZXJlIGJsZW5kaW5nIHdvcmtzCj4gY29ycmVjdGx5Lgo+ ICsJCcKgKi8KPiArCQkJcHRlbXBfMzJfYnVmID0gKHVuc2lnbmVkIGludCopZGF0YS0+YnVmOwo+ ICsJCQlmb3IgKGMgPSAwOyBjIDwgZGF0YS0+c2l6ZS80OyBjKyspCj4gKwkJCQlwdGVtcF8zMl9i dWZbY10gPSBmaWxsZXJzW2ldLnZhbHVlOwo+ICsJCQl3cml0ZXNpemUgPSBkYXRhLT5zaXplOwo+ ICsJCQlicmVhazsKPiArCQl9Cj4gKwkJaWd0X2luZm8oIkZvcm1hdCAlcyBDUkMgY29tcGFyaXNv biBza2lwcGVkIGJ5Cj4gZGVzaWduLlxuIiwKPiArCQkJwqAoY2hhciopJmZpbGxlcnNbaV0uZm91 cmNjKTsKPiArCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsJZGVmYXVsdDoKPiArCQlpZ3RfaW5mbygi VW5zdXBwb3J0ZWQgbW9kZSBmb3IgdGVzdCAlc1xuIiwKPiArCQkJwqAoY2hhciopJmZpbGxlcnNb aV0uZm91cmNjKTsKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwl9Cj4gKwo+ICsJZG9fd3JpdGUoZGF0 YS0+Z2Z4X2ZkLCBkYXRhLT5nZW1faGFuZGxlLCAodm9pZCopZGF0YS0+YnVmLAo+IHdyaXRlc2l6 ZSk7Cj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArCj4gK3N0YXRpYyBib29sIHNldHVwX2Zi KGRhdGFfdCAqZGF0YSwgaWd0X291dHB1dF90ICpvdXRwdXQsIGlndF9wbGFuZV90Cj4gKnBsYW5l LAo+ICsJCcKgwqDCoMKgwqB1aW50MzJfdCBmb3JtYXQpCj4gK3sKPiArCWRybU1vZGVNb2RlSW5m byAqbW9kZTsKPiArCXVpbnQ2NF90IHcsIGg7Cj4gKwlzaWduZWQgcmV0LCBnZW1zaXplID0gMDsK PiArCXVuc2lnbmVkIHRpbGVfd2lkdGgsIHRpbGVfaGVpZ2h0LCBzdHJpZGU7Cj4gKwl1aW50MzJf dCBvZmZzZXRzWzRdID0ge307Cj4gKwl1aW50MzJfdCogb2Zmc2V0cG9pbnRlciA9IE5VTEw7Cj4g Kwo+ICsJbW9kZSA9IGlndF9vdXRwdXRfZ2V0X21vZGUob3V0cHV0KTsKPiArCWlmIChwbGFuZS0+ dHlwZSAhPSBEUk1fUExBTkVfVFlQRV9DVVJTT1IpIHsKPiArCQl3ID0gbW9kZS0+aGRpc3BsYXkg Owo+ICsJCWggPSBtb2RlLT52ZGlzcGxheTsKPiArCX0gZWxzZSB7Cj4gKwkJZHJtR2V0Q2FwKGRh dGEtPmdmeF9mZCwgRFJNX0NBUF9DVVJTT1JfV0lEVEgsICZ3KTsKPiArCQlkcm1HZXRDYXAoZGF0 YS0+Z2Z4X2ZkLCBEUk1fQ0FQX0NVUlNPUl9IRUlHSFQsICZoKTsKPiArCX0KPiArCj4gKwlzd2l0 Y2goZm9ybWF0KSB7Cj4gKyNpZmRlZiBEUk1fRk9STUFUX1AwMTAKPiArCWNhc2UgRFJNX0ZPUk1B VF9QMDEwOgo+ICsjZW5kaWYKPiArI2lmZGVmIERSTV9GT1JNQVRfUDAxMgo+ICsJY2FzZSBEUk1f Rk9STUFUX1AwMTI6Cj4gKyNlbmRpZgo+ICsjaWZkZWYgRFJNX0ZPUk1BVF9QMDE2Cj4gKwljYXNl IERSTV9GT1JNQVRfUDAxNjoKPiArI2VuZGlmCj4gKyNpZiBkZWZpbmVkKERSTV9GT1JNQVRfUDAx MCkgfHwgZGVmaW5lZChEUk1fRk9STUFUX1AwMTIpIHx8Cj4gZGVmaW5lZChEUk1fRk9STUFUX1Aw MTYpCj4gKwkJdGlsZV93aWR0aCA9IDUxMjsKPiArCQl0aWxlX2hlaWdodCA9IDE2Owo+ICsJCXN0 cmlkZSA9IEFMSUdOKHcqMiwgdGlsZV93aWR0aCk7Cj4gKwkJZGF0YS0+c2l6ZSA9IG9mZnNldHNb MV0gPSBzdHJpZGUqQUxJR04oaCwKPiB0aWxlX2hlaWdodCk7Cj4gKwkJZ2Vtc2l6ZSA9IGRhdGEt PnNpemUqMjsKPiArCQlvZmZzZXRwb2ludGVyID0gKHVpbnQzMl90Kikmb2Zmc2V0czsKPiArCQli cmVhazsKPiArI2VuZGlmCj4gKwljYXNlIERSTV9GT1JNQVRfTlYxMjoKPiArCQl0aWxlX3dpZHRo ID0gNTEyOwo+ICsJCXRpbGVfaGVpZ2h0ID0gMTY7Cj4gKwkJc3RyaWRlID0gQUxJR04odywgdGls ZV93aWR0aCk7Cj4gKwkJZGF0YS0+c2l6ZSA9IG9mZnNldHNbMV0gPSBzdHJpZGUqQUxJR04oaCwK PiB0aWxlX2hlaWdodCk7Cj4gKwkJZ2Vtc2l6ZSA9IGRhdGEtPnNpemUqMjsKPiArCQlvZmZzZXRw b2ludGVyID0gKHVpbnQzMl90Kikmb2Zmc2V0czsKPiArCQlicmVhazsKPiArCWRlZmF1bHQ6Cj4g KwkJdGlsZV93aWR0aCA9IDUxMjsKPiArCQl0aWxlX2hlaWdodCA9IDE2Owo+ICsKPiArCQkvKgo+ ICsJCcKgKiB3KjQgc28gdGhlcmUncyBlbm91Z2ggc3BhY2UKPiArCQnCoCovCj4gKwkJc3RyaWRl ID0gQUxJR04odyo0LCB0aWxlX3dpZHRoKTsKPiArCQlkYXRhLT5zaXplID0gc3RyaWRlKkFMSUdO KGgsIHRpbGVfaGVpZ2h0KTsKPiArCQlvZmZzZXRwb2ludGVyID0gTlVMTDsKPiArCQlnZW1zaXpl ID0gZGF0YS0+c2l6ZTsKPiArCQlicmVhazsKPiArCX0KPiArCj4gKwlkYXRhLT5nZW1faGFuZGxl ID0gZ2VtX2NyZWF0ZShkYXRhLT5nZnhfZmQsIGdlbXNpemUpOwo+ICsJcmV0ID0gX19nZW1fc2V0 X3RpbGluZyhkYXRhLT5nZnhfZmQsIGRhdGEtPmdlbV9oYW5kbGUsCj4gKwkJCcKgwqDCoMKgwqDC oMKgSTkxNV9USUxJTkdfTk9ORSwgc3RyaWRlKTsKPiArCj4gKwlpZ3RfYXNzZXJ0X2VxKHJldCwg MCk7Cj4gKwo+ICsJcmV0ID0gX19rbXNfYWRkZmIoZGF0YS0+Z2Z4X2ZkLCBkYXRhLT5nZW1faGFu ZGxlLCB3LCBoLAo+ICsJCQnCoMKgc3RyaWRlLCBmb3JtYXQsIExPQ0FMX0RSTV9GT1JNQVRfTU9E X05PTkUsCj4gKwkJCcKgwqBvZmZzZXRwb2ludGVyLAo+IExPQ0FMX0RSTV9NT0RFX0ZCX01PRElG SUVSUywKPiArCQkJwqDCoCZkYXRhLT5mYi5mYl9pZCk7Cj4gKwo+ICsJaWYocmV0IDwgMCkgewo+ ICsJCWlndF9pbmZvKCJDcmVhdGluZyBmYiBmb3IgZm9ybWF0ICVzIGZhaWxlZCwgcmV0dXJuCj4g Y29kZSAlZFxuIiwKPiArCQkJwqAoY2hhciopJmRhdGEtPmZvcm1hdF9uYW1lLCByZXQpOwo+ICsK PiArCQlyZXR1cm4gZmFsc2U7Cj4gKwl9Cj4gKwo+ICsJZGF0YS0+ZmIud2lkdGggPSB3Owo+ICsJ ZGF0YS0+ZmIuaGVpZ2h0ID0gaDsKPiArCWRhdGEtPmZiLmdlbV9oYW5kbGUgPSBkYXRhLT5nZW1f aGFuZGxlOwo+ICsJcmV0dXJuIHRydWU7Cj4gK30KPiArCj4gKwo+ICtzdGF0aWMgdm9pZCByZW1v dmVfZmIoZGF0YV90KiBkYXRhLCBpZ3Rfb3V0cHV0X3QqIG91dHB1dCwKPiBpZ3RfcGxhbmVfdCog cGxhbmUpCj4gK3sKPiArCWlmIChkYXRhLT5zZXBhcmF0ZXByaW1hcnlwbGFuZSkgewo+ICsJCWln dF9wbGFuZV90KiBwcmltYXJ5ID0KPiBpZ3Rfb3V0cHV0X2dldF9wbGFuZV90eXBlKG91dHB1dCwK PiArCQkJCQkJCQnCoERSTQo+IF9QTEFORV9UWVBFX1BSSU1BUlkpOwo+ICsJCWlndF9wbGFuZV9z ZXRfZmIocHJpbWFyeSwgTlVMTCk7Cj4gKwkJaWd0X3JlbW92ZV9mYihkYXRhLT5nZnhfZmQsICZk YXRhLT5wcmltYXJ5X2ZiKTsKPiArCQlkYXRhLT5zZXBhcmF0ZXByaW1hcnlwbGFuZSA9IGZhbHNl Owo+ICsJfQo+ICsKPiArCWlndF9yZW1vdmVfZmIoZGF0YS0+Z2Z4X2ZkLCAmZGF0YS0+ZmIpOwo+ ICsJZnJlZShkYXRhLT5idWYpOwo+ICsJZGF0YS0+YnVmID0gTlVMTDsKPiArfQo+ICsKPiArCj4g K3N0YXRpYyBib29sIHByZXBhcmVfY3J0YyhkYXRhX3QgKmRhdGEsIGlndF9vdXRwdXRfdCAqb3V0 cHV0LAo+ICsJCQnCoGlndF9wbGFuZV90ICpwbGFuZSwgdWludDMyX3QgZm9ybWF0KQo+ICt7Cj4g Kwlkcm1Nb2RlTW9kZUluZm8gKm1vZGU7Cj4gKwlpZ3RfcGxhbmVfdCAqcHJpbWFyeTsKPiArCj4g KwlpZiAocGxhbmUtPnR5cGUgIT0gRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSkgewo+ICsJCW1vZGUg PSBpZ3Rfb3V0cHV0X2dldF9tb2RlKG91dHB1dCk7Cj4gKwkJaWd0X2NyZWF0ZV9jb2xvcl9mYihk YXRhLT5nZnhfZmQsCj4gKwkJCQnCoMKgwqDCoG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxh eSwKPiArCQkJCcKgwqDCoMKgRFJNX0ZPUk1BVF9YUkdCODg4OCwKPiArCQkJCcKgwqDCoMKgTE9D QUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSwKPiArCQkJCcKgwqDCoMKgMCwgMCwgMCwKPiArCQkJCcKg wqDCoMKgJmRhdGEtPnByaW1hcnlfZmIpOwo+ICsKPiArCQlwcmltYXJ5ID0gaWd0X291dHB1dF9n ZXRfcGxhbmVfdHlwZShvdXRwdXQsCj4gKwkJCQkJCcKgwqDCoMKgRFJNX1BMQU5FX1RZUEVfUAo+ IFJJTUFSWSk7Cj4gKwo+ICsJCWlndF9wbGFuZV9zZXRfZmIocHJpbWFyeSwgJmRhdGEtPnByaW1h cnlfZmIpOwo+ICsJCWlndF9kaXNwbGF5X2NvbW1pdDIoJmRhdGEtPmRpc3BsYXksIGRhdGEtPmNv bW1pdCk7Cj4gKwkJZGF0YS0+c2VwYXJhdGVwcmltYXJ5cGxhbmUgPSB0cnVlOwo+ICsJfQo+ICsK PiArCWlmICghc2V0dXBfZmIoZGF0YSwgb3V0cHV0LCBwbGFuZSwgZm9ybWF0KSkKPiArCQlyZXR1 cm4gZmFsc2U7Cj4gKwo+ICsJZnJlZSgodm9pZCopZGF0YS0+YnVmKTsKPiArCWRhdGEtPmJ1ZiA9 ICh1bnNpZ25lZCBjaGFyKiljYWxsb2MoZGF0YS0+c2l6ZSoyLCAxKTsKPiArCXJldHVybiB0cnVl Owo+ICt9Cj4gKwo+ICsKPiArc3RhdGljIGludAo+ICt0ZXN0X29uZV9tb2RlKGRhdGFfdCogZGF0 YSwgaWd0X291dHB1dF90ICpvdXRwdXQsIGlndF9wbGFuZV90Kgo+IHBsYW5lLAo+ICsJwqDCoMKg wqDCoMKgaW50IG1vZGUpCj4gK3sKPiArCWlndF9jcmNfdCBjdXJyZW50X2NyYzsKPiArCXNpZ25l ZCByVmFsID0gMDsKPiArCWJvb2wgZG9fY3JjOwo+ICsJY2hhciogY3JjY29tcGFyZVsyXTsKPiAr Cj4gKwlpZiAocHJlcGFyZV9jcnRjKGRhdGEsIG91dHB1dCwgcGxhbmUsIG1vZGUpKXsKPiArCQkv Kgo+ICsJCcKgKiB3ZSBoYXZlIGZiIGZyb20gcHJlcGFyZV9jcnRjKC4uKSBzbyBub3cgZmlsbCBp dAo+IGluCj4gKwkJwqAqIGNvcnJlY3RseSBpbiBmaWxsX2luX2ZiKC4uKQo+ICsJCcKgKi8KPiAr CQlkb19jcmMgPSBmaWxsX2luX2ZiKGRhdGEsIG91dHB1dCwgcGxhbmUsIG1vZGUpOwo+ICsKPiAr CQlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCAmZGF0YS0+ZmIpOwo+ICsJCWlndF9mYl9zZXRfc2l6 ZSgmZGF0YS0+ZmIsIHBsYW5lLCBkYXRhLT5mYi53aWR0aCwKPiBkYXRhLT5mYi5oZWlnaHQpOwo+ ICsJCWlndF9wbGFuZV9zZXRfc2l6ZShwbGFuZSwgZGF0YS0+ZmIud2lkdGgsIGRhdGEtCj4gPmZi LmhlaWdodCk7Cj4gKwkJaWd0X2ZiX3NldF9wb3NpdGlvbigmZGF0YS0+ZmIsIHBsYW5lLCAwLCAw KTsKPiArCQlpZ3RfZGlzcGxheV9jb21taXQyKCZkYXRhLT5kaXNwbGF5LCBkYXRhLT5jb21taXQp Owo+ICsKPiArCQlpZiAoZG9fY3JjKSB7Cj4gKwkJCWlndF9waXBlX2NyY19kcmFpbihkYXRhLT5w aXBlX2NyYyk7Cj4gKwkJCWlndF9waXBlX2NyY19nZXRfc2luZ2xlKGRhdGEtPnBpcGVfY3JjLAo+ ICZjdXJyZW50X2NyYyk7Cj4gKwo+ICsJCQlpZiAocGxhbmUtPnR5cGUgIT0gRFJNX1BMQU5FX1RZ UEVfQ1VSU09SKSB7Cj4gKwkJCQlpZgo+ICghaWd0X2NoZWNrX2NyY19lcXVhbCgmY3VycmVudF9j cmMsCj4gKwkJCQkJJmRhdGEtPmZ1bGxzY3JlZW5fY3JjKSkgewo+ICsJCQkJCWNyY2NvbXBhcmVb MF0gPQo+IGlndF9jcmNfdG9fc3RyaW5nKCZjdXJyZW50X2NyYyk7Cj4gKwkJCQkJY3JjY29tcGFy ZVsxXSA9Cj4gaWd0X2NyY190b19zdHJpbmcoJmRhdGEtPmZ1bGxzY3JlZW5fY3JjKTsKPiArCQkJ CQlpZ3Rfd2FybigiY3JjIG1pc21hdGNoLgo+IHRhcmdldCAlLjhzLCByZXN1bHQgJS44cy5cbiIs IGNyY2NvbXBhcmVbMF0sIGNyY2NvbXBhcmVbMV0pOwo+ICsJCQkJCWZyZWUoY3JjY29tcGFyZVsw XSk7Cj4gKwkJCQkJZnJlZShjcmNjb21wYXJlWzFdKTsKPiArCQkJCQlyVmFsKys7Cj4gKwkJCQl9 Cj4gKwkJCX0gZWxzZSB7Cj4gKwkJCQlpZgo+ICghaWd0X2NoZWNrX2NyY19lcXVhbCgmY3VycmVu dF9jcmMsCj4gKwkJCQkJJmRhdGEtPmN1cnNvcl9jcmMpKSB7Cj4gKwkJCQkJY3JjY29tcGFyZVsw XSA9Cj4gaWd0X2NyY190b19zdHJpbmcoJmN1cnJlbnRfY3JjKTsKPiArCQkJCQljcmNjb21wYXJl WzFdID0KPiBpZ3RfY3JjX3RvX3N0cmluZygmZGF0YS0+Y3Vyc29yX2NyYyk7Cj4gKwkJCQkJaWd0 X3dhcm4oImNyYyBtaXNtYXRjaC4KPiB0YXJnZXQgJS44cywgcmVzdWx0ICUuOHMuXG4iLCBjcmNj b21wYXJlWzBdLCBjcmNjb21wYXJlWzFdKTsKPiArCQkJCQlmcmVlKGNyY2NvbXBhcmVbMF0pOwo+ ICsJCQkJCWZyZWUoY3JjY29tcGFyZVsxXSk7Cj4gKwkJCQkJclZhbCsrOwo+ICsJCQkJfQo+ICsJ CQl9Cj4gKwkJfQo+ICsJCXJlbW92ZV9mYihkYXRhLCBvdXRwdXQsIHBsYW5lKTsKPiArCQlyZXR1 cm4gclZhbDsKPiArCX0KPiArCXJldHVybiAxOwo+ICt9Cj4gKwo+ICsKPiArc3RhdGljIHZvaWQK PiArdGVzdF9hdmFpbGFibGVfbW9kZXMoZGF0YV90KiBkYXRhKQo+ICt7Cj4gKwlpZ3Rfb3V0cHV0 X3QgKm91dHB1dDsKPiArCWlndF9wbGFuZV90ICpwbGFuZTsKPiArCWludCogdTMycHRyX2Zvcm1h dHM7Cj4gKwlpbnQgbW9kZWluZGV4Owo+ICsJZW51bSBwaXBlIHBpcGU7Cj4gKwlzdHJ1Y3QgZHJt X21vZGVfZ2V0X3BsYW5lIG9uZV9wbGFuZSA9IHt9Owo+ICsJaW50IGludmFsaWRzID0gMDsKPiAr Cj4gKwljaGFyIHBsYW5ldHlwZVszXVs4XSA9IHsiT1ZFUkxBWVwwIiwgIlBSSU1BUllcMCIsICJD VVJTT1JcMCIKPiB9Owo+ICsKPiArCWZvcl9lYWNoX3BpcGVfd2l0aF92YWxpZF9vdXRwdXQoJmRh dGEtPmRpc3BsYXksIHBpcGUsCj4gb3V0cHV0KSB7Cj4gKwkJaWd0X291dHB1dF9zZXRfcGlwZShv dXRwdXQsIHBpcGUpOwo+ICsJCWlndF9kaXNwbGF5X2NvbW1pdDIoJmRhdGEtPmRpc3BsYXksIGRh dGEtPmNvbW1pdCk7Cj4gKwo+ICsJCWRhdGEtPnBpcGVfY3JjID0gaWd0X3BpcGVfY3JjX25ldyhk YXRhLT5nZnhfZmQsCj4gcGlwZSwKPiArCQkJCQkJwqDCoElOVEVMX1BJUEVfQ1JDX1NPVQo+IFJD RV9BVVRPKTsKPiArCj4gKwkJaWd0X3BpcGVfY3JjX3N0YXJ0KGRhdGEtPnBpcGVfY3JjKTsKPiAr Cj4gKwkJLyoKPiArCQnCoCogcmVnZW5lcmF0ZSBjb21wYXJpc29uIGNyY3MgZm9yIGVhY2ggcGlw ZSBqdXN0IGluCj4gY2FzZS4KPiArCQnCoCovCj4gKwkJZ2VuZXJhdGVfY29tcGFyaXNvbl9jcmNf bGlzdChkYXRhLCBvdXRwdXQpOwo+ICsKPiArCQlmb3JfZWFjaF9wbGFuZV9vbl9waXBlKCZkYXRh LT5kaXNwbGF5LCBwaXBlLCBwbGFuZSkKPiB7Cj4gKwkJCW1lbXNldCgodm9pZCopJm9uZV9wbGFu ZSwgMCwKPiArCQkJwqDCoMKgwqDCoMKgwqBzaXplb2Yoc3RydWN0IGRybV9tb2RlX2dldF9wbGFu ZSkpOwo+ICsJCQlvbmVfcGxhbmUucGxhbmVfaWQgPSBwbGFuZS0+ZHJtX3BsYW5lLQo+ID5wbGFu ZV9pZDsKPiArCQkJLyoKPiArCQkJwqAqIGZpcnN0IGNhbGwgdG8ga25vdyBob3cgbXVjaCBzcGFj ZSBuZWVkZWQsCj4gKwkJCcKgKiBzZWNvbmQgY2FsbCB0byBnZXQgbGlzdCBvZiBzdXBwb3J0ZWQK PiBtb2Rlcy4KPiArCQkJwqAqLwo+ICsJCQlpZ3RfaW9jdGwoZGF0YS0+Z2Z4X2ZkLAo+IERSTV9J T0NUTF9NT0RFX0dFVFBMQU5FLAo+ICsJCQkJwqDCoCZvbmVfcGxhbmUpOwpkcm1Nb2RlR2V0UGxh bmUoKSBvciBpZ3RfaW9jdGwoKS4gQm90aCB3b3JrIGFuZCBpcyBhIG1hdHRlciBvZiBzdHlsZQph bmQgcHJlZmVyZW5jZS4gSSdtIG5vdCBzdXJlIHdoaWNoIG9uZSB3b3VsZCBiZSBtb3JlIHByZWZl cnJlZCB3YXkuCgo+ICsJCQlpZ3RfYXNzZXJ0KG9uZV9wbGFuZS5jb3VudF9mb3JtYXRfdHlwZXMg Pgo+IDApOwo+ICsKPiArCQkJdTMycHRyX2Zvcm1hdHMgPQo+IChpbnQqKWNhbGxvYyhvbmVfcGxh bmUuY291bnRfZm9ybWF0X3R5cGVzLAo+ICsJCQkJCQnCoMKgwqDCoMKgwqBzaXplb2YoaW50KSk7 Cj4gKwo+ICsJCQlvbmVfcGxhbmUuZm9ybWF0X3R5cGVfcHRyID0KPiAoX191NjQpdTMycHRyX2Zv cm1hdHM7Cj4gKwkJCWlndF9pb2N0bChkYXRhLT5nZnhfZmQsCj4gRFJNX0lPQ1RMX01PREVfR0VU UExBTkUsCj4gKwkJCQnCoMKgJm9uZV9wbGFuZSk7Cj4gKwo+ICsJCQlmb3IgKG1vZGVpbmRleCA9 IDA7Cj4gKwkJCcKgwqDCoMKgwqBtb2RlaW5kZXggPAo+IG9uZV9wbGFuZS5jb3VudF9mb3JtYXRf dHlwZXM7Cj4gKwkJCcKgwqDCoMKgwqBtb2RlaW5kZXgrKykgewo+ICsJCQkJZGF0YS0+Zm9ybWF0 X25hbWVbMF0gPQo+IHUzMnB0cl9mb3JtYXRzW21vZGVpbmRleF0mMHhmZjsKPiArCQkJCWRhdGEt PmZvcm1hdF9uYW1lWzFdID0KPiAodTMycHRyX2Zvcm1hdHNbbW9kZWluZGV4XT4+OCkmMHhmZjsK PiArCQkJCWRhdGEtPmZvcm1hdF9uYW1lWzJdID0KPiAodTMycHRyX2Zvcm1hdHNbbW9kZWluZGV4 XT4+MTYpJjB4ZmY7Cj4gKwkJCQlkYXRhLT5mb3JtYXRfbmFtZVszXSA9Cj4gKHUzMnB0cl9mb3Jt YXRzW21vZGVpbmRleF0+PjI0KSYweGZmOwo+ICsKPiArCQkJCWlndF9pbmZvKCJUZXN0aW5nIGNv bm5lY3RvciAlcyB1c2luZwo+IHBpcGUgJXMiIFwKPiArCQkJCQnCoCIgcGxhbmUgaW5kZXggJWQg dHlwZSAlcwo+IG1vZGUgJXNcbiIsCj4gKwkJCQkJwqBpZ3Rfb3V0cHV0X25hbWUob3V0cHV0KSwK PiArCQkJCQnCoGttc3Rlc3RfcGlwZV9uYW1lKHBpcGUpLAo+ICsJCQkJCcKgcGxhbmUtPmluZGV4 LAo+ICsJCQkJCcKgcGxhbmV0eXBlW3BsYW5lLT50eXBlXSwKPiArCQkJCQnCoChjaGFyKikmZGF0 YS0+Zm9ybWF0X25hbWUpOwo+ICsKPiArCQkJCWludmFsaWRzICs9IHRlc3Rfb25lX21vZGUoZGF0 YSwKPiBvdXRwdXQsCj4gKwkJCQkJCQnCoMKgcGxhbmUsCj4gKwkJCQkJCQnCoMKgdTMycHRyX2Zv cgo+IG1hdHNbbW9kZWluZGV4XSk7Cj4gKwkJCX0KPiArCQkJZnJlZSgodm9pZCopb25lX3BsYW5l LmZvcm1hdF90eXBlX3B0cik7Cj4gKwkJfQo+ICsKPiArCQlpZ3RfcGlwZV9jcmNfZnJlZShkYXRh LT5waXBlX2NyYyk7CldlIHNob3VsZCBzdG9wIGNvbGxlY3RpbmcgY3JjJ3MgYmVmb3JlIHdlIGZy ZWUgdGhlIG1lbW9yeS4KCj4gKwkJaWd0X2Rpc3BsYXlfY29tbWl0MigmZGF0YS0+ZGlzcGxheSwg ZGF0YS0+Y29tbWl0KTsKPiArCX0KPiArCWlndF9hc3NlcnQoaW52YWxpZHMgPT0gMCk7Cj4gK30K PiArCj4gKwo+ICtpZ3RfbWFpbgo+ICt7Cj4gKwlkYXRhX3QgZGF0YSA9IHt9Owo+ICsKPiArCWln dF9za2lwX29uX3NpbXVsYXRpb24oKTsKPiArCj4gKwlpZ3RfZml4dHVyZSB7Cj4gKwkJZGF0YS5n ZnhfZmQgPSBkcm1fb3Blbl9kcml2ZXJfbWFzdGVyKERSSVZFUl9JTlRFTCk7Cj4gKwkJa21zdGVz dF9zZXRfdnRfZ3JhcGhpY3NfbW9kZSgpOwo+ICsJCWlndF9kaXNwbGF5X2luaXQoJmRhdGEuZGlz cGxheSwgZGF0YS5nZnhfZmQpOwo+ICsJCWlndF9yZXF1aXJlX3BpcGVfY3JjKGRhdGEuZ2Z4X2Zk KTsKPiArCX0KPiArCj4gKwlkYXRhLmNvbW1pdCA9IGRhdGEuZGlzcGxheS5pc19hdG9taWMgPyBD T01NSVRfQVRPTUlDIDoKPiBDT01NSVRfTEVHQUNZOwo+ICsKPiArCWlndF9zdWJ0ZXN0KCJhdmFp bGFibGVfbW9kZV90ZXN0X2NyYyIpIHsKPiArCQl0ZXN0X2F2YWlsYWJsZV9tb2RlcygmZGF0YSk7 Cj4gKwl9Cj4gKwo+ICsJaWd0X2ZpeHR1cmUgewo+ICsJCWttc3Rlc3RfcmVzdG9yZV92dF9tb2Rl KCk7Cj4gKwkJaWd0X2Rpc3BsYXlfZmluaSgmZGF0YS5kaXNwbGF5KTsKPiArCX0KTWF5YmUgaWd0 X2V4aXQoKSBhdCB0aGUgZW5kLgoKV2l0aCB0aGVzZSBtaW5vciBhZGRpdGlvbnMsIHRoaXMgcGF0 Y2ggaXMKClJldmlld2VkLWJ5OiBNaWthIEthaG9sYSA8bWlrYS5rYWhvbGFAaW50ZWwuY29tPgoK PiArfQo+IGRpZmYgLS1naXQgYS90ZXN0cy9tZXNvbi5idWlsZCBiL3Rlc3RzL21lc29uLmJ1aWxk Cj4gaW5kZXggMjJlNGFjOS4uNmE1YmQ5NiAxMDA2NDQKPiAtLS0gYS90ZXN0cy9tZXNvbi5idWls ZAo+ICsrKyBiL3Rlc3RzL21lc29uLmJ1aWxkCj4gQEAgLTE1MCw2ICsxNTAsNyBAQCB0ZXN0X3By b2dzID0gWwo+IMKgCSdrbXNfYXRvbWljJywKPiDCoAkna21zX2F0b21pY19pbnRlcnJ1cHRpYmxl JywKPiDCoAkna21zX2F0b21pY190cmFuc2l0aW9uJywKPiArCSdrbXNfYXZhaWxhYmxlX21vZGVz X2NyYycsCj4gwqAJJ2ttc19idXN5JywKPiDCoAkna21zX2NjcycsCj4gwqAJJ2ttc19jaHZfY3Vy c29yX2ZhaWwnLAotLSAKTWlrYSBLYWhvbGEgLSBJbnRlbCBPVEMKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1k ZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vaWd0LWRldgo=