From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id E6C7C6E92E for ; Fri, 5 Oct 2018 23:34:43 +0000 (UTC) From: Manasi Navare Date: Fri, 5 Oct 2018 16:34:37 -0700 Message-Id: <20181005233437.31286-1-manasi.d.navare@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t] test/kms_dp_dsc: Basic KMS test to validate VESA DSC on DP/eDP 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: igt-dev@lists.freedesktop.org Cc: Manasi Navare , Anusha Srivatsa List-ID: VGhpcyBwYXRjaCBhZGRzIGEgYmFzaWMga21zIHRlc3QgdG8gdmFsaWRhdGUgdGhlIGRpc3BsYXkg c3RyZWFtCmNvbXByZXNzaW9uIGZ1bmN0aW9uYWxpdHkgaWYgc3VwcG9ydGVkIG9uIERQL2VEUCBj b25uZWN0b3IuCkN1cnJlbnRseSB0aGlzIGhhcyBvbmx5IG9uZSBzdWJ0ZXN0IHRvIGZvcmNlIHRo ZSBEU0Mgb24gYWxsCnRoZSBjb25uZWN0b3JzIHRoYXQgc3VwcG9ydCBpdCB3aXRoIGRlZmF1bHQg cGFyYW1ldGVycy4KVGhpcyB3aWxsIGJlIGV4cGFuZGVkIHRvIGFkZCBtb3JlIHN1YnRlc3RzIHRv IHR3ZWFrIERTQyBwYXJhbWV0ZXJzLgoKQ2M6IEFudXNoYSBTcml2YXRzYSA8YW51c2hhLnNyaXZh dHNhQGludGVsLmNvbT4KU2lnbmVkLW9mZi1ieTogTWFuYXNpIE5hdmFyZSA8bWFuYXNpLmQubmF2 YXJlQGludGVsLmNvbT4KLS0tCiB0ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIHwgICAxICsKIHRlc3Rz L2ttc19kcF9kc2MuYyAgICAgfCAzNzIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgMzczIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2Rl IDEwMDY0NCB0ZXN0cy9rbXNfZHBfZHNjLmMKCmRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5z b3VyY2VzIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwppbmRleCBjODQ5MzNmMS4uYzgwN2FhZDMg MTAwNjQ0Ci0tLSBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKKysrIGIvdGVzdHMvTWFrZWZpbGUu c291cmNlcwpAQCAtMjA3LDYgKzIwNyw3IEBAIFRFU1RTX3Byb2dzID0gXAogCWttc190dl9sb2Fk X2RldGVjdCBcCiAJa21zX3VuaXZlcnNhbF9wbGFuZSBcCiAJa21zX3ZibGFuayBcCisJa21zX2Rw X2RzYyBcCiAJbWV0YV90ZXN0IFwKIAlwZXJmIFwKIAlwZXJmX3BtdSBcCmRpZmYgLS1naXQgYS90 ZXN0cy9rbXNfZHBfZHNjLmMgYi90ZXN0cy9rbXNfZHBfZHNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAuLmQwZmQyYWUzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMva21z X2RwX2RzYy5jCkBAIC0wLDAgKzEsMzcyIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTcgSW50 ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBEaXNwbGF5cG9ydCBEaXNwbGF5IFN0cmVhbSBDb21wcmVz c2lvbiB0ZXN0CisgKgorICogQXV0aG9yczoKKyAqIE1hbmFzaSBOYXZhcmUgPG1hbmFzaS5kLm5h dmFyZUBpbnRlbC5jb20+CisgKgorICogRWxlbWVudHMgb2YgdGhlIG1vZGVzZXQgY29kZSBhZGFw dGVkIGZyb20gRGF2aWQgSGVycm1hbm4ncworICogRFJNIG1vZGVzZXQgZXhhbXBsZQorICoKKyAq LworI2luY2x1ZGUgImlndC5oIgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8Z2V0b3B0 Lmg+CisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0 ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5j bHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8dGltZS5oPgor I2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dGVybWlvcy5oPgorCitpbnQgZHJtX2ZkOwor ZHJtTW9kZVJlcyAqcmVzb3VyY2VzOwordWludDY0X3QgdGlsaW5nID0gTE9DQUxfRFJNX0ZPUk1B VF9NT0RfTk9ORTsKKworc3RydWN0IGNvbm5lY3RvciB7CisJdWludDMyX3QgaWQ7CisJaW50IG1v ZGVfdmFsaWQ7CisJZHJtTW9kZU1vZGVJbmZvIG1vZGU7CisJZHJtTW9kZUNvbm5lY3RvciAqY29u bmVjdG9yOworCWRybU1vZGVFbmNvZGVyICplbmNvZGVyOworCWludCBjcnRjLCBwaXBlOworfTsK Kworc3RydWN0IGRzY19jb25maWcgeworCWNoYXIgdGVzdF9uYW1lWzEyOF07CisJaW50IG1vZGVf d2lkdGg7CisJaW50IG1vZGVfaGVpZ2h0OworCWludCBicHA7CisJaW50IGRlcHRoOworCWJvb2wg ZHNjX3N1cHBvcnRlZDsKKwlib29sIGRzY19lbmFibGU7Cit9OworCitzdGF0aWMgRklMRSAqZm9w ZW5hdChpbnQgZGlyLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICptb2RlKQoreworCWlu dCBmZCA9IG9wZW5hdChkaXIsIG5hbWUsIE9fUkRXUik7CisJcmV0dXJuIGZkb3BlbihmZCwgbW9k ZSk7Cit9CisKK3N0YXRpYyBib29sIGdldF9kcF9kc2Nfc3VwcG9ydChjaGFyICp0ZXN0X2Nvbm5l Y3Rvcl9uYW1lKQoreworCWludCBkaXIgPSBpZ3RfZGVidWdmc19kaXIoZHJtX2ZkKTsKKwlGSUxF ICpkc2Nfc3VwcG9ydF9mcCA9IE5VTEw7CisJY2hhciAqbGluZSA9IE5VTEw7CisJc2l6ZV90IGxp bmVfc2l6ZSA9IDA7CisJY2hhciBidWZbMTI4XSA9IHswfSwgc3VwcG9ydGVkX3N0cls1XSwgZW5h YmxlZF9zdHJbNV07CisJYm9vbCBzdXBwb3J0ZWQgPSBmYWxzZTsKKworCXN0cmNweShidWYsIHRl c3RfY29ubmVjdG9yX25hbWUpOworCXN0cmNhdChidWYsICIvaTkxNV9kc2Nfc3VwcG9ydCIpOwor CWRzY19zdXBwb3J0X2ZwID0gZm9wZW5hdChkaXIsIGJ1ZiwgInIiKTsKKwlpZ3RfcmVxdWlyZShk c2Nfc3VwcG9ydF9mcCk7CisKKwl3aGlsZSAoZ2V0bGluZSgmbGluZSwgJmxpbmVfc2l6ZSwgZHNj X3N1cHBvcnRfZnApID4gMCkgeworCQljaGFyICpzdXBwb3J0LCAqZW5hYmxlZDsKKworCQllbmFi bGVkID0gc3Ryc3RyKGxpbmUsICJFbmFibGVkOiAiKTsKKwkJaWd0X2Fzc2VydF9lcShzc2NhbmYo ZW5hYmxlZCwgIkVuYWJsZWQ6ICVzIiwgZW5hYmxlZF9zdHIpLCAxKTsKKwkJaWYgKHN0cmNtcChl bmFibGVkX3N0ciwgInllcyIpID09IDApIHsKKwkJCWlndF9pbmZvKCJEU0MgaXMgZW5hYmxlZCBv biAlc1xuIiwgdGVzdF9jb25uZWN0b3JfbmFtZSk7CisJCQlzdXBwb3J0ZWQgPSB0cnVlOworCQkJ YnJlYWs7CisJCX0gZWxzZSB7CisJCQlnZXRsaW5lKCZsaW5lLCAmbGluZV9zaXplLCBkc2Nfc3Vw cG9ydF9mcCk7CisJCQlzdXBwb3J0ID0gc3Ryc3RyKGxpbmUsICJTdXBwb3J0ZWQ6ICIpOworCQlp Z3RfYXNzZXJ0X2VxKHNzY2FuZihzdXBwb3J0LCAiU3VwcG9ydGVkOiAlcyIsIHN1cHBvcnRlZF9z dHIpLCAxKTsKKwkJaWYgKHN0cmNtcChzdXBwb3J0ZWRfc3RyLCAieWVzIikgPT0gMCkKKwkJCXN1 cHBvcnRlZCA9IHRydWU7CisJCWVsc2UgaWYgKHN0cmNtcChzdXBwb3J0ZWRfc3RyLCAibm8iKSA9 PSAwKQorCQkJc3VwcG9ydGVkID0gZmFsc2U7CisJCWVsc2UKKwkJCWlndF9mYWlsX29uX2YodHJ1 ZSwgIlVua25vd24gRFNDIHN1cHBvcnRlZCBzdGF0dXMgJyVzJ1xuIiwKKwkJCQkgICAgICBzdXBw b3J0ZWRfc3RyKTsKKwkJYnJlYWs7CisJCX0KKwl9CisKKwlmcmVlKGxpbmUpOworCWZjbG9zZShk c2Nfc3VwcG9ydF9mcCk7CisKKwlyZXR1cm4gc3VwcG9ydGVkOworfQorCitzdGF0aWMgdm9pZCBz ZXRfZHBfZHNjX2VuYWJsZShib29sIGVuYWJsZSwgY2hhciAqdGVzdF9jb25uZWN0b3JfbmFtZSkK K3sKKwlpbnQgZGlyID0gaWd0X2RlYnVnZnNfZGlyKGRybV9mZCk7CisJRklMRSAqZHNjX2VuYWJs ZV9mcCA9IE5VTEw7CisJY2hhciBidWZbMTI4XSA9IHswfTsKKworCXN0cmNweShidWYsIHRlc3Rf Y29ubmVjdG9yX25hbWUpOworCXN0cmNhdChidWYsICIvaTkxNV9kc2Nfc3VwcG9ydCIpOworCWRz Y19lbmFibGVfZnAgPSBmb3BlbmF0KGRpciwgYnVmLCAidysiKTsKKwlpZ3RfcmVxdWlyZShkc2Nf ZW5hYmxlX2ZwKTsKKwlyZXdpbmQoZHNjX2VuYWJsZV9mcCk7CisJaWd0X2luZm8oIlNldHRpbmcg RFNDX0VOQUJMRSB0byAlcyBmb3IgJXNcbiIsIChlbmFibGUpID8gInRydWUiIDogImZhbHNlIiwg dGVzdF9jb25uZWN0b3JfbmFtZSk7CisJZnByaW50Zihkc2NfZW5hYmxlX2ZwLCAiJWQiLCBlbmFi bGUpOworCWZmbHVzaChkc2NfZW5hYmxlX2ZwKTsKKwlmY2xvc2UoZHNjX2VuYWJsZV9mcCk7Cit9 CisKK3N0YXRpYyB2b2lkIGR1bXBfY29ubmVjdG9yc19mZChpbnQgZHJtZmQpCit7CisJaW50IGks IGo7CisKKwlkcm1Nb2RlUmVzICptb2RlX3Jlc291cmNlcyA9IGRybU1vZGVHZXRSZXNvdXJjZXMo ZHJtZmQpOworCisgICAgICAgIGlmICghbW9kZV9yZXNvdXJjZXMpIHsKKwkJaWd0X3dhcm4oImRy bU1vZGVHZXRSZXNvdXJjZXMgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJcmV0 dXJuOworCX0KKworCWlndF9pbmZvKCJDb25uZWN0b3JzOlxuIik7CisJaWd0X2luZm8oImlkXHRl bmNvZGVyXHRzdGF0dXNcdFx0dHlwZVx0c2l6ZSAobW0pXHRtb2Rlc1xuIik7CisJZm9yIChpID0g MDsgaSA8IG1vZGVfcmVzb3VyY2VzLT5jb3VudF9jb25uZWN0b3JzOyBpKyspIHsKKwkJZHJtTW9k ZUNvbm5lY3RvciAqY29ubmVjdG9yOworCisJCWNvbm5lY3RvciA9IGRybU1vZGVHZXRDb25uZWN0 b3JDdXJyZW50KGRybWZkLAorCQkJCQkJICAgICAgIG1vZGVfcmVzb3VyY2VzLT5jb25uZWN0b3Jz W2ldKTsKKwkJaWYgKCFjb25uZWN0b3IpIHsKKwkJCWlndF93YXJuKCJjb3VsZCBub3QgZ2V0IGNv bm5lY3RvciAlaTogJXNcbiIsCisJCQkJIG1vZGVfcmVzb3VyY2VzLT5jb25uZWN0b3JzW2ldLCBz dHJlcnJvcihlcnJubykpOworCQkJY29udGludWU7CisJCX0KKworCQlpZ3RfaW5mbygiJWRcdCVk XHQlc1x0JXNcdCVkeCVkXHRcdCVkXG4iLAorCQkJIGNvbm5lY3Rvci0+Y29ubmVjdG9yX2lkLCBj b25uZWN0b3ItPmVuY29kZXJfaWQsCisJCQkga21zdGVzdF9jb25uZWN0b3Jfc3RhdHVzX3N0cihj b25uZWN0b3ItPmNvbm5lY3Rpb24pLAorCQkJIGttc3Rlc3RfY29ubmVjdG9yX3R5cGVfc3RyKGNv bm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUpLAorCQkJIGNvbm5lY3Rvci0+bW1XaWR0aCwgY29ubmVj dG9yLT5tbUhlaWdodCwKKwkJCSBjb25uZWN0b3ItPmNvdW50X21vZGVzKTsKKworCQlpZiAoIWNv bm5lY3Rvci0+Y291bnRfbW9kZXMpCisJCQljb250aW51ZTsKKworCQlpZ3RfaW5mbygiICBtb2Rl czpcbiIpOworCQlpZ3RfaW5mbygiICBuYW1lIHJlZnJlc2ggKEh6KSBoZGlzcCBoc3MgaHNlIGh0 b3QgdmRpc3AgIiJ2c3MgdnNlIHZ0b3QgZmxhZ3MgdHlwZSBjbG9ja1xuIik7CisJCWZvciAoaiA9 IDA7IGogPCBjb25uZWN0b3ItPmNvdW50X21vZGVzOyBqKyspeworCQkJaWd0X2luZm8oIlslZF0i LCBqKTsKKwkJCWttc3Rlc3RfZHVtcF9tb2RlKCZjb25uZWN0b3ItPm1vZGVzW2pdKTsKKwkJfQor CisJCWRybU1vZGVGcmVlQ29ubmVjdG9yKGNvbm5lY3Rvcik7CisJfQorCWlndF9pbmZvKCJcbiIp OworCisJZHJtTW9kZUZyZWVSZXNvdXJjZXMobW9kZV9yZXNvdXJjZXMpOworfQorCitzdGF0aWMg dm9pZCBkdW1wX2NydGNzX2ZkKGludCBkcm1mZCkKK3sKKwlpbnQgaTsKKwlkcm1Nb2RlUmVzICpt b2RlX3Jlc291cmNlcyA9IGRybU1vZGVHZXRSZXNvdXJjZXMoZHJtZmQpOworCisJaWd0X2luZm8o IkNSVENzOlxuIik7CisJaWd0X2luZm8oImlkXHRmYlx0cG9zXHRzaXplXG4iKTsKKwlmb3IgKGkg PSAwOyBpIDwgbW9kZV9yZXNvdXJjZXMtPmNvdW50X2NydGNzOyBpKyspIHsKKwkJZHJtTW9kZUNy dGMgKmNydGM7CisKKwkJY3J0YyA9IGRybU1vZGVHZXRDcnRjKGRybWZkLCBtb2RlX3Jlc291cmNl cy0+Y3J0Y3NbaV0pOworCQlpZiAoIWNydGMpIHsKKwkJCWlndF93YXJuKCJjb3VsZCBub3QgZ2V0 IGNydGMgJWk6ICVzXG4iLAorCQkJCSBtb2RlX3Jlc291cmNlcy0+Y3J0Y3NbaV0sIHN0cmVycm9y KGVycm5vKSk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZ3RfaW5mbygiJWRcdCVkXHQoJWQsJWQp XHQoJWR4JWQpXG4iLAorCQkJIGNydGMtPmNydGNfaWQsIGNydGMtPmJ1ZmZlcl9pZCwgY3J0Yy0+ eCwKKwkJCSBjcnRjLT55LCBjcnRjLT53aWR0aCwgY3J0Yy0+aGVpZ2h0KTsKKwkJa21zdGVzdF9k dW1wX21vZGUoJmNydGMtPm1vZGUpOworCisJCWRybU1vZGVGcmVlQ3J0YyhjcnRjKTsKKwl9CisJ aWd0X2luZm8oIlxuIik7CisKKwlkcm1Nb2RlRnJlZVJlc291cmNlcyhtb2RlX3Jlc291cmNlcyk7 Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfaW5mbyh2b2lkKQoreworCWR1bXBfY29ubmVjdG9yc19m ZChkcm1fZmQpOworCWR1bXBfY3J0Y3NfZmQoZHJtX2ZkKTsKK30KKworc3RhdGljIGludAorc2V0 X21vZGUoc3RydWN0IGNvbm5lY3RvciAqYywgc3RydWN0IGRzY19jb25maWcgKnRlc3RfY29uZmln LCBib29sIHNldF9tb2RlKQoreworCXVuc2lnbmVkIGludCBmYl9pZCA9IDA7CisJc3RydWN0IGln dF9mYiBmYl9pbmZvOworCWludCByZXQgPSAwOworCisJaWYgKCFzZXRfbW9kZSkgeworCQlyZXQg PSBkcm1Nb2RlU2V0Q3J0Yyhkcm1fZmQsIGMtPmNydGMsIDAsIDAsIDAsCisJCQkJICAgICBOVUxM LCAwLCBOVUxMKTsKKwkJaWYgKHJldCkKKwkJCWlndF93YXJuKCJGYWlsZWQgdG8gdW5zZXQgbW9k ZSIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWZiX2lkID0gaWd0X2NyZWF0ZV9wYXR0ZXJuX2Zi KGRybV9mZCwgdGVzdF9jb25maWctPm1vZGVfd2lkdGgsCisJCQkJICAgICAgdGVzdF9jb25maWct Pm1vZGVfaGVpZ2h0LAorCQkJCSAgICAgIGlndF9icHBfZGVwdGhfdG9fZHJtX2Zvcm1hdCh0ZXN0 X2NvbmZpZy0+YnBwLAorCQkJCQkJCQkgIHRlc3RfY29uZmlnLT5kZXB0aCksCisJCQkJICAgICAg dGlsaW5nLCAmZmJfaW5mbyk7CisKKwlpZ3RfaW5mbygiQ1JUQygldSk6WyVkXSIsIGMtPmNydGMs IDApOworCWttc3Rlc3RfZHVtcF9tb2RlKCZjLT5tb2RlKTsKKwlkcm1Nb2RlU2V0Q3J0Yyhkcm1f ZmQsIGMtPmNydGMsIC0xLCAwLCAwLCBOVUxMLCAwLCBOVUxMKTsKKwlyZXQgPSBkcm1Nb2RlU2V0 Q3J0Yyhkcm1fZmQsIGMtPmNydGMsIGZiX2lkLCAwLCAwLAorCQkJICAgICAmYy0+aWQsIDEsICZj LT5tb2RlKTsKKwlzbGVlcCg1KTsKKwlpZiAocmV0IDwgMCkgeworCQlpZ3Rfd2FybigiRmFpbGVk IHRvIHNldCBtb2RlICglZHglZEAlZEh6KTogJXNcbiIsCisJCQkgdGVzdF9jb25maWctPm1vZGVf d2lkdGgsIHRlc3RfY29uZmlnLT5tb2RlX2hlaWdodCwKKwkJCSBjLT5tb2RlLnZyZWZyZXNoLCBz dHJlcnJvcihlcnJubykpOworCQlpZ3RfcmVtb3ZlX2ZiKGRybV9mZCwgJmZiX2luZm8pOworCisJ fQorCisJcmV0dXJuIHJldDsKK30KKworCisvKgorICogUmUtcHJvYmUgY29ubmVjdG9ycyBhbmQg ZG8gYSBtb2Rlc2V0IHdpdGggYW5kIHdpaG91dCBEU0MKKyAqCisgKiBSZXR1cm5zOgorICogMDog T24gU3VjY2VzcworICogLTE6IE9uIGZhaWx1cmUKKyAqLworc3RhdGljIGludCB1cGRhdGVfZGlz cGxheShzdHJ1Y3QgZHNjX2NvbmZpZyAqdGVzdF9jb25maWcpCit7CisJc3RydWN0IGNvbm5lY3Rv ciAqY29ubmVjdG9yczsKKwlzdHJ1Y3Qga21zdGVzdF9jb25uZWN0b3JfY29uZmlnIGNvbmZpZzsK KwlpbnQgY250LCBjb25uX2NudCA9IDAsIHJldCA9IDAsIGVkcF9jbnQgPSAwLCBkcF9jbnQgPSAw OworCXVuc2lnbmVkIGxvbmcgY3J0Y19pZHhfbWFzayA9IC0xVUw7CisJY2hhciBjb25uX2J1Zlsx MjhdID0gezB9OworCisJcmVzb3VyY2VzID0gZHJtTW9kZUdldFJlc291cmNlcyhkcm1fZmQpOwor CWlmICghcmVzb3VyY2VzKSB7CisJCWlndF93YXJuKCJkcm1Nb2RlR2V0UmVzb3VyY2VzIGZhaWxl ZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisJCXJldHVybiAtMTsKKwl9CisKKwljb25uZWN0 b3JzID0gY2FsbG9jKHJlc291cmNlcy0+Y291bnRfY29ubmVjdG9ycywKKwkJCSAgICBzaXplb2Yo c3RydWN0IGNvbm5lY3RvcikpOworCWlmICghY29ubmVjdG9ycykKKwkJcmV0dXJuIC0xOworCisJ LyogRmluZCBhbnkgY29ubmVjdGVkIGRpc3BsYXlzICovCisJZm9yIChjbnQgPSAwOyBjbnQgPCBy ZXNvdXJjZXMtPmNvdW50X2Nvbm5lY3RvcnM7IGNudCsrKSB7CisJCXN0cnVjdCBjb25uZWN0b3Ig KmMgPSAmY29ubmVjdG9yc1tjbnRdOworCQljLT5pZCA9IHJlc291cmNlcy0+Y29ubmVjdG9yc1tj bnRdOworCQlpZigha21zdGVzdF9nZXRfY29ubmVjdG9yX2NvbmZpZyhkcm1fZmQsIGMtPmlkLCBj cnRjX2lkeF9tYXNrLAorCQkJCQkJJmNvbmZpZykpIHsKKwkJCWMtPm1vZGVfdmFsaWQgPSAwOwor CQkJY29udGludWU7CisJCX0KKwkJYy0+Y29ubmVjdG9yID0gY29uZmlnLmNvbm5lY3RvcjsKKwkJ Yy0+ZW5jb2RlciA9IGNvbmZpZy5lbmNvZGVyOworCQljLT5tb2RlID0gY29uZmlnLmRlZmF1bHRf bW9kZTsKKwkJYy0+Y3J0YyA9IGNvbmZpZy5jcnRjLT5jcnRjX2lkOworCQljLT5waXBlID0gY29u ZmlnLnBpcGU7CisJCWMtPm1vZGVfdmFsaWQgPSAxOworCisJCWlmIChjLT5jb25uZWN0b3ItPmNv bm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCB8fAorCQkgICAg Yy0+Y29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfZURQKSB7 CisKKwkJCWlmIChjLT5jb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5F Q1RPUl9lRFApCisJCQkJY29ubl9jbnQgPSArKyBlZHBfY250OworCQkJZWxzZQorCQkJCWNvbm5f Y250ID0gKysgZHBfY250OworCQkJaWYgKGMtPmNvbm5lY3Rvci0+Y29ubmVjdGlvbiA9PSBEUk1f TU9ERV9DT05ORUNURUQpIHsKKwkJCQlzcHJpbnRmKGNvbm5fYnVmLCAiJXMtJWQiLAorCQkJCQlr bXN0ZXN0X2Nvbm5lY3Rvcl90eXBlX3N0cihjLT5jb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlKSwK KwkJCQkJY29ubl9jbnQpOworCQkJCXRlc3RfY29uZmlnLT5kc2Nfc3VwcG9ydGVkID0KKwkJCQkJ Z2V0X2RwX2RzY19zdXBwb3J0KGNvbm5fYnVmKTsKKwkJCQlpZiAoIXN0cmNtcCh0ZXN0X2NvbmZp Zy0+dGVzdF9uYW1lLAorCQkJCQkgICAgImZvcmNlX2RzY19lbmFibGVfYmFzaWMiKSkgeworCQkJ CQlpZiAodGVzdF9jb25maWctPmRzY19zdXBwb3J0ZWQpIHsKKwkJCQkJCWlndF9pbmZvICgiRFND IGlzIHN1cHBvcnRlZCBvbiAlc1xuIiwKKwkJCQkJCQkgIGNvbm5fYnVmKTsKKwkJCQkJCXRlc3Rf Y29uZmlnLT5tb2RlX3dpZHRoID0gYy0+bW9kZS5oZGlzcGxheTsKKwkJCQkJCXRlc3RfY29uZmln LT5tb2RlX2hlaWdodCA9IGMtPm1vZGUudmRpc3BsYXk7CisJCQkJCQl0ZXN0X2NvbmZpZy0+YnBw ID0gMzI7CisJCQkJCQl0ZXN0X2NvbmZpZy0+ZGVwdGggPSAyNDsKKwkJCQkJCXNldF9kcF9kc2Nf ZW5hYmxlKHRlc3RfY29uZmlnLT5kc2NfZW5hYmxlLAorCQkJCQkJCSAgY29ubl9idWYpOworCQkJ CQkJcmV0ID0gc2V0X21vZGUoYywgdGVzdF9jb25maWcsCisJCQkJCQkJICAgICAgIHRydWUpOwor CQkJCQl9IGVsc2UgeworCQkJCQkJaWd0X2luZm8gKCJEU0MgaXMgbm90IHN1cHBvcnRlZCBvbiAl c1xuIiwKKwkJCQkJCQkgIGNvbm5fYnVmKTsKKwkJCQkJfQorCQkJCX0KKwkJCQljcnRjX2lkeF9t YXNrICY9IH4oMSA8PCBjLT5waXBlKTsKKwkJCX0KKwkJfQorCX0KKworCWZyZWUoY29ubmVjdG9y cyk7CisJZHJtTW9kZUZyZWVSZXNvdXJjZXMocmVzb3VyY2VzKTsKKwlyZXR1cm4gcmV0OworfQor CitzdGF0aWMgaW50IG9wdF9oYW5kbGVyKGludCBvcHQsIGludCBvcHRfaW5kZXgsIHZvaWQgKm9w dF9kdW1wKQoreworCWJvb2wgKmR1bXAgPSBvcHRfZHVtcDsKKworCXN3aXRjaCAob3B0KSB7CisJ Y2FzZSAnaSc6CisJCSpkdW1wID0gdHJ1ZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWd0X2Fz c2VydCgwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSkKK3sKKwljb25zdCBjaGFyICpoZWxwX3N0ciA9CisJCSIgIC0taW5mb1x0XHREdW1w IEluZm9ybWF0aW9uIGFib3V0IGNvbm5lY3RvcnMuIChzdGlsbCBuZWVkcyBEUk0gYWNjZXNzKVxu IjsKKwlzdGF0aWMgc3RydWN0IG9wdGlvbiBsb25nX29wdGlvbnNbXSA9IHsKKwkJeyJpbmZvIiwg MCwgMCwgJ2knfSwKKwkJezAsIDAsIDAsIDB9CisJfTsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qg ZHNjX2NvbmZpZyB0ZXN0X2NvbmZpZzsKKwlib29sIG9wdF9kdW1wID0gZmFsc2U7CisJaWd0X3N1 YnRlc3RfaW5pdF9wYXJzZV9vcHRzKCZhcmdjLCBhcmd2LCAiIiwgbG9uZ19vcHRpb25zLCBoZWxw X3N0ciwKKwkJCQkgICAgb3B0X2hhbmRsZXIsICZvcHRfZHVtcCk7CisKKwlpZ3Rfc2tpcF9vbl9z aW11bGF0aW9uKCk7CisKKwlpZ3RfZml4dHVyZSB7CisJCWttc3Rlc3Rfc2V0X3Z0X2dyYXBoaWNz X21vZGUoKTsKKwkJZHJtX2ZkID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9BTlkpOworCQlpZiAo b3B0X2R1bXApCisJCQlkdW1wX2luZm8oKTsKKwl9CisKKwlpZ3Rfc3VidGVzdCgiZm9yY2VfZHNj X2VuYWJsZV9iYXNpYyIpIHsKKwkJc3RyY3B5KHRlc3RfY29uZmlnLnRlc3RfbmFtZSwiZm9yY2Vf ZHNjX2VuYWJsZV9iYXNpYyIpOworCQlyZXQgPSB1cGRhdGVfZGlzcGxheSgmdGVzdF9jb25maWcp OworCQlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7CisJfQorCisJY2xvc2UoZHJtX2ZkKTsKKworCWln dF9hc3NlcnRfZXEocmV0LCAwKTsKKworCWlndF9pbmZvKCJEU0MgdGVzdGluZyBkb25lXG4iKTsK KwlpZ3RfZXhpdCgpOworCit9Ci0tIAoyLjE4LjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vaWd0LWRldgo=