From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail29.static.mailgun.info (mail29.static.mailgun.info [104.130.122.29]) by gabe.freedesktop.org (Postfix) with ESMTPS id F18406E17D for ; Tue, 15 Sep 2020 19:56:38 +0000 (UTC) From: Abhinav Kumar Date: Tue, 15 Sep 2020 12:56:14 -0700 Message-Id: <20200915195614.7618-6-abhinavk@codeaurora.org> In-Reply-To: <20200915195614.7618-1-abhinavk@codeaurora.org> References: <20200915195614.7618-1-abhinavk@codeaurora.org> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v2 5/5] tools: add support for msm_dp_compliance to IGT 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: petri.latvala@intel.com, swboyd@chromium.org, khsieh@codeaurora.org, nganji@codeaurora.org, seanpaul@chromium.org, tanmay@codeaurora.org, aravindh@codeaurora.org List-ID: QWRkIHN1cHBvcnQgZm9yIG1zbV9kcF9jb21wbGlhbmNlIHRvIGlndCB0b29scyB0byB2YWxpZGF0 ZQp2aWRlbyBwYXR0ZXJuIERQIGNvbXBsaWFuY2UgdGVzdHMgb24gTVNNIGNoaXBzZXRzLgoKY2hh bmdlcyBpbiB2MjoKCS0gZml4IGluZGVudGF0aW9uIGluIG1lc29uIGZpbGUKClNpZ25lZC1vZmYt Ynk6IEFiaGluYXYgS3VtYXIgPGFiaGluYXZrQGNvZGVhdXJvcmEub3JnPgpBY2tlZC1ieTogUGV0 cmkgTGF0dmFsYSA8cGV0cmkubGF0dmFsYUBpbnRlbC5jb20+Ci0tLQogdG9vbHMvTWFrZWZpbGUu YW0gICAgICAgICB8ICAgNCArCiB0b29scy9NYWtlZmlsZS5zb3VyY2VzICAgIHwgICA2ICsKIHRv b2xzL21lc29uLmJ1aWxkICAgICAgICAgfCAgMTIgKwogdG9vbHMvbXNtX2RwX2NvbXBsaWFuY2Uu YyB8IDgxMiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogNCBmaWxlcyBj aGFuZ2VkLCA4MzQgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL21zbV9k cF9jb21wbGlhbmNlLmMKCmRpZmYgLS1naXQgYS90b29scy9NYWtlZmlsZS5hbSBiL3Rvb2xzL01h a2VmaWxlLmFtCmluZGV4IGY5N2Y5ZTA4Li5lYWM1MmJlOCAxMDA2NDQKLS0tIGEvdG9vbHMvTWFr ZWZpbGUuYW0KKysrIGIvdG9vbHMvTWFrZWZpbGUuYW0KQEAgLTE0LDYgKzE0LDEwIEBAIGludGVs X2RwX2NvbXBsaWFuY2VfTERBREQgPSAkKHRvcF9idWlsZGRpcikvbGliL2xpYmludGVsX3Rvb2xz LmxhCiBiaW5fUFJPR1JBTVMgKz0gYW1kX2hkbWlfY29tcGxpYW5jZQogYW1kX2hkbWlfY29tcGxp YW5jZV9DRkxBR1MgPSAkKEFNX0NGTEFHUykgJChHTElCX0NGTEFHUykKIAorYmluX1BST0dSQU1T ICs9IG1zbV9kcF9jb21wbGlhbmNlCittc21fZHBfY29tcGxpYW5jZV9DRkxBR1MgPSAkKEFNX0NG TEFHUykgJChHTElCX0NGTEFHUykKK21zbV9kcF9jb21wbGlhbmNlX0xEQUREID0gJCh0b3BfYnVp bGRkaXIpL2xpYi9saWJpbnRlbF90b29scy5sYQorCiBTVUJESVJTID0gaTkxNS1wZXJmIG51bGxf c3RhdGVfZ2VuIHJlZ2lzdGVycwogCiBBTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKSAtSSQo dG9wX3NyY2RpcikvaW5jbHVkZS9kcm0tdWFwaSAtSSQodG9wX3NyY2RpcikvbGliIFwKZGlmZiAt LWdpdCBhL3Rvb2xzL01ha2VmaWxlLnNvdXJjZXMgYi90b29scy9NYWtlZmlsZS5zb3VyY2VzCmlu ZGV4IDQ3MTcxNDkwLi5jOTNiZmU3ZCAxMDA2NDQKLS0tIGEvdG9vbHMvTWFrZWZpbGUuc291cmNl cworKysgYi90b29scy9NYWtlZmlsZS5zb3VyY2VzCkBAIC03MiwzICs3Miw5IEBAIGFtZF9oZG1p X2NvbXBsaWFuY2VfU09VUkNFUyA9IFwKICAgICAgICAgYW1kX2hkbWlfY29tcGxpYW5jZS5jIFwK IAkJJChOVUxMKQogCittc21fZHBfY29tcGxpYW5jZV9TT1VSQ0VTID0gXAorICAgICAgICBtc21f ZHBfY29tcGxpYW5jZS5jIFwKKwkJaWd0X2RwX2NvbXBsaWFuY2UuaCBcCisJCWlndF9kcF9jb21w bGlhbmNlX2hvdHBsdWcuYyBcCisJCWlndF9jb21wbGlhbmNlX3V0aWxzLmMgXAorCQkkKE5VTEwp CmRpZmYgLS1naXQgYS90b29scy9tZXNvbi5idWlsZCBiL3Rvb2xzL21lc29uLmJ1aWxkCmluZGV4 IDU2ODc3ZmIzLi4yZmFmYjRjNSAxMDA2NDQKLS0tIGEvdG9vbHMvbWVzb24uYnVpbGQKKysrIGIv dG9vbHMvbWVzb24uYnVpbGQKQEAgLTEwMSw1ICsxMDEsMTcgQEAgZXhlY3V0YWJsZSgnYW1kX2hk bWlfY29tcGxpYW5jZScsICdhbWRfaGRtaV9jb21wbGlhbmNlLmMnLAogCSAgIGluc3RhbGxfcnBh dGggOiBiaW5kaXJfcnBhdGhkaXIsCiAJICAgaW5zdGFsbCA6IHRydWUpCiAKK2lmIGxpYnVkZXYu Zm91bmQoKQorCW1zbV9kcF9jb21wbGlhbmNlX3NyYyA9IFsKKwkJJ21zbV9kcF9jb21wbGlhbmNl LmMnLAorCQknaWd0X2RwX2NvbXBsaWFuY2VfaG90cGx1Zy5jJywKKwkJJ2lndF9jb21wbGlhbmNl X3V0aWxzLmMnCisJXQorCWV4ZWN1dGFibGUoJ21zbV9kcF9jb21wbGlhbmNlJywgc291cmNlcyA6 IG1zbV9kcF9jb21wbGlhbmNlX3NyYywKKwkJCWRlcGVuZGVuY2llcyA6IFt0b29sX2RlcHMsIGxp YnVkZXZdLAorCQkJaW5zdGFsbF9ycGF0aCA6IGJpbmRpcl9ycGF0aGRpciwKKwkJCWluc3RhbGwg OiB0cnVlKQorZW5kaWYKKwogc3ViZGlyKCdpOTE1LXBlcmYnKQogc3ViZGlyKCdudWxsX3N0YXRl X2dlbicpCmRpZmYgLS1naXQgYS90b29scy9tc21fZHBfY29tcGxpYW5jZS5jIGIvdG9vbHMvbXNt X2RwX2NvbXBsaWFuY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uN2Jj MmJmYTgKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9tc21fZHBfY29tcGxpYW5jZS5jCkBAIC0w LDAgKzEsODEyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDIwLCBUaGUgTGludXggRm91bmRh dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCDCqSAyMDE3IEludGVsIENv cnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj aGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2Fy ZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisg KiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcg d2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBt ZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNv cGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQor ICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dp bmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhp cyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNo YWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2Yg dGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwg SU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklO R0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBI T0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lT RSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09G VFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgor ICoKKyAqIERpc3BsYXlwb3J0IENvbXBsaWFuY2UgVGVzdGluZyBBcHBsaWNhdGlvbgorICoKKyAq IFRoaXMgaXMgdGhlIHVzZXJzcGFjZSBjb21wb25lbnQgb2YgdGhlIERpc3BsYXlwb3J0IENvbXBs aWFuY2UgdGVzdGluZworICogc29mdHdhcmUgcmVxdWlyZWQgZm9yIGNvbXBsaWFuY2UgdGVzdGlu ZyBvZiB0aGUgTVNNIERpc3BsYXkgUG9ydCBkcml2ZXIuCisgKiBUaGlzIG11c3QgYmUgcnVubmlu ZyBpbiBvcmRlciB0byBzdWNjZXNzZnVsbHkgY29tcGxldGUgRGlzcGxheSBQb3J0CisgKiBjb21w bGlhbmNlIHRlc3RpbmcuIFRoaXMgYXBwIGFuZCB0aGUga2VybmVsIGNvZGUgdGhhdCBhY2NvbXBh bmllcyBpdCBoYXMgYmVlbgorICogd3JpdHRlbiB0byBzYXRpZnkgdGhlIHJlcXVpcmVtZW50cyBv ZiB0aGUgRGlzcGxheXBvcnQgTGluayBDVFMgMS4yIHJldjEuMQorICogc3BlY2lmaWNhdGlvbiBm cm9tIFZFU0EuIE5vdGUgdGhhdCB0aGlzIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBvcnQgZURQ CisgKiBjb21wbGlhbmNlIHRlc3RpbmcuCisgKgorICogQ29tcGxpYW5jZSBUZXN0aW5nIHJlcXVp cmVzIHNldmVyYWwgY29tcG9uZW50czoKKyAqICAgLSBBIGtlcm5lbCBidWlsZCB0aGF0IGNvbnRh aW5zIHRoZSBwYXRjaCBzZXQgZm9yIERQIGNvbXBsaWFuY2Ugc3VwcG9ydAorICogICAtIEEgRGlz cGxheXBvcnQgQ29tcGxpYW5jZSBUZXN0aW5nIGFwcGxpYW5jZSBzdWNoIGFzIFFkYm94IDk4MAor ICogICAtIFRoaXMgdXNlciBhcHBsaWNhdGlvbgorICogICAtIEEgd2luZG93cyBob3N0IG1hY2hp bmUgdG8gcnVuIHRoZSBRZGJveCA5ODAgdGVzdCBzb2Z0d2FyZQorICogICAtIFJvb3QgYWNjZXNz IG9uIHRoZSBEVVQgZHVlIHRvIHRoZSB1c2Ugb2Ygc3lzZnMgdXRpbGl0eQorICoKKyAqIFRlc3Qg U2V0dXA6CisgKiBJdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0aGF0IHRoZSB3aW5kb3dzIGhv c3QsIHRlc3QgYXBwbGlhbmNlIGFuZCBEVVQKKyAqIGJlIGZyZXNobHkgcmVzdGFydGVkIGJlZm9y ZSBhbnkgdGVzdGluZyBiZWdpbnMgdG8gZW5zdXJlIHRoYXQgYW55IHByZXZpb3VzCisgKiBjb25m aWd1cmF0aW9ucyBhbmQgc2V0dGluZ3Mgd2lsbCBub3QgaW50ZXJmZXJlIHdpdGggdGVzdCBwcm9j ZXNzLiBSZWZlciB0bworICogdGhlIHRlc3QgYXBwbGlhbmNlIGRvY3VtZW50YXRpb24gZm9yIHNl dHVwLCBzb2Z0d2FyZSBpbnN0YWxsYXRpb24gYW5kCisgKiBvcGVyYXRpb24gc3BlY2lmaWMgdG8g dGhhdCBkZXZpY2UuCisgKgorICogVGhlIExpbnV4IERVVCBtdXN0IGJlIGluIHRleHQgKGNvbnNv bGUpIG1vZGUgYW5kIGNhbm5vdCBoYXZlIGFueSBvdGhlcgorICogZGlzcGxheSBtYW5hZ2VyIHJ1 bm5pbmcuIFlvdSBtdXN0IGJlIGxvZ2dlZCBpbiBhcyByb290IHRvIHJ1biB0aGlzIHVzZXIgYXBw LgorICogT25jZSB0aGUgdXNlciBhcHBsaWNhdGlvbiBpcyB1cCBhbmQgcnVubmluZywgd2FpdGlu ZyBmb3IgdGVzdCByZXF1ZXN0cywgdGhlCisgKiBzb2Z0d2FyZSBvbiB0aGUgd2luZG93cyBob3N0 IGNhbiBub3cgYmUgdXNlZCB0byBleGVjdXRlIHRoZSBjb21wbGlhbmNlIHRlc3RzLgorICoKKyAq IFRoaXMgdXNlcnNwYWNlIGFwcGxpY2F0aW9uIHN1cHBvcnRzIGZvbGxvd2luZyB0ZXN0cyBmcm9t IHRoZSBEUCBDVFMgU3BlYworICogUmV2IDEuMToKKyAqICAgLSBWaWRlbyBQYXR0ZXJuIGdlbmVy YXRpb24gdGVzdHM6IFRoaXMgc3VwcG9ydHMgb25seSB0aGUgMjQgYW5kCisgKiAgICAgMThicHAg Y29sb3IKKyAqICAgICByYW1wIHRlc3QgcGF0dGVybiAoNC4zLjMuMSkuCisgKgorICogQ29ubmVj dGlvbnMgKHJlcXVpcmVkKToKKyAqICAgLSBUZXN0IEFwcGxpYW5jZSBjb25uZWN0ZWQgdG8gdGhl IGV4dGVybmFsIERpc3BsYXlwb3J0IGNvbm5lY3RvciBvbiB0aGUgRFVUCisgKiAgIC0gVGVzdCBB cHBsaWFuY2UgTW9uaXRvciBPdXQgY29ubmVjdGVkIHRvIERpc3BsYXlwb3J0IGNvbm5lY3RvciBv biB0aGUKKyAqIG1vbml0b3IKKyAqICAgLSBUZXN0IGFwcGxpYW5jZSBjb25uZWN0ZWQgdG8gdGhl IFdpbmRvd3MgSG9zdCB2aWEgVVNCCisgKgorICogRGVidWdmcyBGaWxlczoKKyAqIFRoZSBmaWxl IHJvb3QgZm9yIGFsbCAgdGhlIGRlYnVnZnMgZmlsZToKKyAqIC9zeXMva2VybmVsL2RlYnVnL2Ry aS8wLworICoKKyAqIFRoZSBzcGVjaWZpYyBmaWxlcyBhcmUgYXMgZm9sbG93czoKKyAqCisgKiBt c21fZHBfdGVzdF9hY3RpdmUKKyAqIEEgc2ltcGxlIGZsYWcgdGhhdCBpbmRpY2F0ZXMgd2hldGhl ciBvciBub3QgY29tcGxpYW5jZSB0ZXN0aW5nIGlzIGN1cnJlbnRseQorICogYWN0aXZlIGluIHRo ZSBrZXJuZWwuIFRoaXMgZmxhZyBpcyBwb2xsZWQgYnkgdXNlcnNwYWNlIGFuZCBvbmNlIHNldCwg aW52b2tlcworICogdGhlIHRlc3QgaGFuZGxlciBpbiB0aGUgdXNlciBhcHAuIFRoaXMgZmxhZyBp cyBzZXQgYnkgdGhlIHRlc3QgaGFuZGxlciBpbiB0aGUKKyAqIGtlcm5lbCBhZnRlciByZWFkaW5n IHRoZSByZWdpc3RlcnMgcmVxdWVzdGVkIGJ5IHRoZSB0ZXN0IGFwcGxpYW5jZS4KKyAqCisgKiBt c21fZHBfdGVzdF9kYXRhCisgKiBUZXN0IGRhdGEgaXMgdXNlZCBieSB0aGUga2VybmVsIHRvIHBh c3MgcGFyYW1ldGVycyB0byB0aGUgdXNlciBhcHAuIEVnOiBJbgorICogY2FzZSBvZiBFRElEIHRl c3RzLCB0aGUgZGF0YSB0aGF0IGlzIGRlbGl2ZXJlZCB0byB0aGUgdXNlcnNwYWNlIGlzIHRoZSB2 aWRlbworICogbW9kZSB0byBiZSBzZXQgZm9yIHRoZSB0ZXN0LgorICogSW4gY2FzZSBvZiB2aWRl byBwYXR0ZXJuIHRlc3QsIHRoZSBkYXRhIHRoYXQgaXMgZGVsaXZlcmVkIHRvIHRoZSB1c2Vyc3Bh Y2UgaXMKKyAqIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSB0ZXN0IHBhdHRlcm4gYW5kIHRo ZSBiaXRzIHBlciBjb2xvciB2YWx1ZS4KKyAqCisgKiBtc21fZHBfdGVzdF90eXBlCisgKiBUaGUg dGVzdCB0eXBlIHZhcmlhYmxlIGluc3RydWN0cyB0aGUgdXNlciBhcHAgYXMgdG8gd2hhdCB0aGUg cmVxdWVzdGVkIHRlc3QKKyAqIHdhcyBmcm9tIHRoZSBzaW5rIGRldmljZS4gVGhlc2UgdmFsdWVz IGRlZmluZWQgYXQgdGhlIHRvcCBvZiB0aGUKKyAqIGFwcGxpY2F0aW9uJ3MgbWFpbiBpbXBsZW1l bnRhdGlvbiBmaWxlIG11c3QgYmUga2VwdCBpbiBzeW5jIHdpdGggdGhlCisgKiB2YWx1ZXMgZGVm aW5lZCBpbiB0aGUga2VybmVsJ3MgZHJtX2RwX2hlbHBlci5oIGZpbGUuCisgKiBUaGlzIGFwcCBp cyBiYXNlZCBvbiBzb21lIHByaW9yIHdvcmsgc3VibWl0dGVkIGluIEFwcmlsIDIwMTUgYnkgVG9k ZCBQcmV2aXRlCisgKiAoPHRwcmV2aXRlQGdtYWlsLmNvbT4pLgorICoKKyAqIFRoaXMgd29yayBp cyBiYXNlZCB1cG9uIHRoZSBpbnRlbF9kcF9jb21wbGlhbmNlLmMgYXV0aG9yZWQgYnkKKyAqIE1h bmFzaSBOYXZhcmUgPG1hbmFzaS5kLm5hdmFyZUBpbnRlbC5jb20+CisgKgorICoKKyAqIFRoaXMg dG9vbCBjYW4gYmUgcnVuIGFzOgorICogLi9tc21fZHBfY29tcGxpYW5jZSAgSXQgd2lsbCB3YWl0 IHRpbGwgeW91IHN0YXJ0IGNvbXBsaWFuY2Ugc3VpdGUgZnJvbQorICogUWRib3ggOTgwLgorICog Li9tc21fZHBfY29tcGxpYW5jZSAtaCAgVGhpcyB3aWxsIG9wZW4gdGhlIGhlbHAKKyAqIC4vbXNt X2RwX2NvbXBsaWFuY2UgLWkgIFRoaXMgd2lsbCBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IGN1 cnJlbnQKKyAqIGNvbm5lY3RvcnMvQ1JUQ3MuIFRoaXMgY2FuIGJlIHVzZWQgZm9yIGRlYnVnZ2lu ZyBwdXJwb3NlLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBBYmhpbmF2IEt1bWFyIDxhYmhpbmF2 a0Bjb2RlYXVyb3JhLm9yZz4KKyAqCisgKiBFbGVtZW50cyBvZiB0aGUgbW9kZXNldCBjb2RlIGFk YXB0ZWQgZnJvbSBEYXZpZCBIZXJybWFubidzCisgKiBEUk0gbW9kZXNldCBleGFtcGxlCisgKgor ICovCisjaW5jbHVkZSAiaWd0LmgiCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxnZXRv cHQuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8 c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNp bmNsdWRlIDx0ZXJtaW9zLmg+CisjaW5jbHVkZSA8c3lzL3BvbGwuaD4KKyNpbmNsdWRlIDxzeXMv dGltZS5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgor I2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorI2luY2x1ZGUg PGFzc2VydC5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5j bHVkZSA8dGltZS5oPgorCisjaW5jbHVkZSAiaWd0X2RwX2NvbXBsaWFuY2UuaCIKKworI2luY2x1 ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorCisvKiBVc2VyIElucHV0IGRlZmlu aXRpb25zICovCisjZGVmaW5lIEhFTFBfREVTQ1JJUFRJT04gMQorCisvKiBEZWJ1Z2ZzIGZpbGUg ZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTVNNX0RQX1RFU1RfVFlQRV9GSUxFCQkibXNtX2RwX3Rl c3RfdHlwZSIKKyNkZWZpbmUgTVNNX0RQX1RFU1RfQUNUSVZFX0ZJTEUJIm1zbV9kcF90ZXN0X2Fj dGl2ZSIKKyNkZWZpbmUgTVNNX0RQX1RFU1RfREFUQV9GSUxFCQkibXNtX2RwX3Rlc3RfZGF0YSIK KworLyogRFJNIGRlZmluaXRpb25zIC0gbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUgRFJN IGhlYWRlciAqLworI2RlZmluZSBEUF9URVNUX0xJTktfVklERU9fUEFUVEVSTgkoMSA8PCAxKQor CisvKiBHbG9iYWwgZmlsZSBwb2ludGVycyBmb3IgdGhlIHN5c2ZzIGZpbGVzICovCitGSUxFICp0 ZXN0X2FjdGl2ZV9mcCwgKnRlc3RfZGF0YV9mcCwgKnRlc3RfdHlwZV9mcDsKKworYm9vbCB2aWRl b19wYXR0ZXJuX2ZsYWc7CisKKy8qIFZpZGVvIHBhdHRlcm4gdGVzdCBnbG9iYWxzICovCit1aW50 MTZfdCBoZGlzcGxheTsKK3VpbnQxNl90IHZkaXNwbGF5OwordWludDhfdCBiaXRkZXB0aDsKKwor ZHJtTW9kZVJlcyAqcmVzb3VyY2VzOworaW50IGRybV9mZCwgbW9kZXMsIGdlbjsKK3VpbnQ2NF90 IHRpbGluZyA9IExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkU7Cit1aW50MzJfdCBkZXB0aCA9IDI0 LCBzdHJpZGUsIGJwcDsKK2ludCBzcGVjaWZpZWRfbW9kZV9udW0gPSAtMSwgc3BlY2lmaWVkX2Rp c3BfaWQgPSAtMTsKK2ludCB3aWR0aCwgaGVpZ2h0OwordWludDMyX3QgdGVzdF9jcnRjOwordWlu dDMyX3QgYWN0aXZlX2NydGM7Cit1aW50MzJfdCB0ZXN0X2Nvbm5lY3Rvcl9pZDsKK2VudW0gewor CU1TTV9NT0RFX0lOVkFMSUQgPSAtMSwKKwlNU01fTU9ERV9OT05FID0gMCwKKwlNU01fTU9ERV9W SURFT19QQVRURVJOX1RFU1QKK30gbXNtX2Rpc3BsYXlfbW9kZTsKKworc3RydWN0IHRlc3Rfdmlk ZW9fcGF0dGVybiB7CisJdWludDE2X3QgaGRpc3BsYXk7CisJdWludDE2X3QgdmRpc3BsYXk7CisJ dWludDhfdCBiaXRkZXB0aDsKKwl1aW50MzJfdCBmYjsKKwl1aW50MzJfdCBzaXplOworCXN0cnVj dCBpZ3RfZmIgZmJfcGF0dGVybjsKKwlkcm1Nb2RlTW9kZUluZm8gbW9kZTsKKwl1aW50MzJfdCAq cGl4bWFwOworfTsKKworc3RydWN0IGNvbm5lY3RvciB7CisJdWludDMyX3QgaWQ7CisJaW50IG1v ZGVfdmFsaWQ7CisJZHJtTW9kZU1vZGVJbmZvIG1vZGUsIG1vZGVfZmFpbHNhZmU7CisJZHJtTW9k ZUNvbm5lY3RvciAqY29ubmVjdG9yOworCWludCBjcnRjOworCS8qIFN0YW5kYXJkIGFuZCBwcmVm ZXJyZWQgZnJhbWUgYnVmZmVyKi8KKwl1aW50OF90ICpwaXhtYXA7CisKKwlzdHJ1Y3QgdGVzdF92 aWRlb19wYXR0ZXJuIHRlc3RfcGF0dGVybjsKK307CisKK3N0YXRpYyB2b2lkIGNsZWFyX3Rlc3Rf YWN0aXZlKHZvaWQpCit7CisJcmV3aW5kKHRlc3RfYWN0aXZlX2ZwKTsKKwlmcHJpbnRmKHRlc3Rf YWN0aXZlX2ZwLCAiJWQiLCAwKTsKKwlmZmx1c2godGVzdF9hY3RpdmVfZnApOworfQorCitzdGF0 aWMgRklMRSAqZm9wZW5hdChpbnQgZGlyLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpt b2RlKQoreworCWludCBmZCA9IG9wZW5hdChkaXIsIG5hbWUsIE9fUkRXUik7CisKKwlyZXR1cm4g ZmRvcGVuKGZkLCBtb2RlKTsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfZGVidWdmc19maWxlcyh2 b2lkKQoreworCWludCBkaXIgPSBpZ3RfZGVidWdmc19kaXIoZHJtX2ZkKTsKKworCXRlc3RfdHlw ZV9mcCA9IGZvcGVuYXQoZGlyLCBNU01fRFBfVEVTVF9UWVBFX0ZJTEUsICJyIik7CisJaWd0X3Jl cXVpcmUodGVzdF90eXBlX2ZwKTsKKworCXRlc3RfZGF0YV9mcCA9IGZvcGVuYXQoZGlyLCBNU01f RFBfVEVTVF9EQVRBX0ZJTEUsICJyIik7CisJaWd0X3JlcXVpcmUodGVzdF9kYXRhX2ZwKTsKKwl0 ZXN0X2FjdGl2ZV9mcCA9IGZvcGVuYXQoZGlyLCBNU01fRFBfVEVTVF9BQ1RJVkVfRklMRSwgIncr Iik7CisKKwlpZ3RfcmVxdWlyZSh0ZXN0X2FjdGl2ZV9mcCk7CisKKwljbG9zZShkaXIpOworCisJ LyogUmVzZXQgdGhlIGFjdGl2ZSBmbGFnIGZvciBzYWZldHkgKi8KKwljbGVhcl90ZXN0X2FjdGl2 ZSgpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfdGVzdF90eXBlKHZvaWQpCit7CisJ dW5zaWduZWQgbG9uZyB0ZXN0X3R5cGU7CisJaW50IHJldDsKKworCWlmICghdGVzdF90eXBlX2Zw KQorCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgdGVzdF90eXBlIGZpbGVcbiIpOworCXJld2lu ZCh0ZXN0X3R5cGVfZnApOworCXJldCA9IGZzY2FuZih0ZXN0X3R5cGVfZnAsICIlbHgiLCAmdGVz dF90eXBlKTsKKwlpZiAocmV0IDwgMSB8fCB0ZXN0X3R5cGUgPD0gMCkgeworCQlpZ3Rfd2Fybigi dGVzdF90eXBlIHJlYWQgZmFpbGVkIC0gJWx4XG4iLCB0ZXN0X3R5cGUpOworCQlyZXR1cm4gMDsK Kwl9CisKKwlyZXR1cm4gdGVzdF90eXBlOworfQorCitzdGF0aWMgdm9pZCBnZXRfdGVzdF92aWRl b3BhdHRlcm5fZGF0YSh2b2lkKQoreworCWludCBjb3VudCA9IDA7CisJdWludDE2X3QgdmlkZW9f cGF0dGVybl92YWx1ZVszXTsKKwljaGFyIHZpZGVvX3BhdHRlcm5fYXR0cmlidXRlWzE1XTsKKwlp bnQgcmV0OworCisJaWYgKCF0ZXN0X2RhdGFfZnApCisJCWZwcmludGYoc3RkZXJyLCAiSW52YWxp ZCB0ZXN0X2RhdGEgZmlsZVxuIik7CisKKwlyZXdpbmQodGVzdF9kYXRhX2ZwKTsKKwl3aGlsZSAo IWZlb2YodGVzdF9kYXRhX2ZwKSAmJiBjb3VudCA8IDMpIHsKKwkJcmV0ID0gZnNjYW5mKHRlc3Rf ZGF0YV9mcCwgIiVzICV1XG4iLCB2aWRlb19wYXR0ZXJuX2F0dHJpYnV0ZSwKKwkJICAgICAgICh1 bnNpZ25lZCBpbnQgKikmdmlkZW9fcGF0dGVybl92YWx1ZVtjb3VudCsrXSk7CisJCWlmIChyZXQg PCAyKSB7CisJCQlpZ3Rfd2FybigidGVzdF9kYXRhIHJlYWQgZmFpbGVkXG4iKTsKKwkJCXJldHVy bjsKKwkJfQorCX0KKworCWhkaXNwbGF5ID0gdmlkZW9fcGF0dGVybl92YWx1ZVswXTsKKwl2ZGlz cGxheSA9IHZpZGVvX3BhdHRlcm5fdmFsdWVbMV07CisJYml0ZGVwdGggPSB2aWRlb19wYXR0ZXJu X3ZhbHVlWzJdOworCWlndF9pbmZvKCJIZGlzcGxheSA9ICVkXG4iLCBoZGlzcGxheSk7CisJaWd0 X2luZm8oIlZkaXNwbGF5ID0gJWRcbiIsIHZkaXNwbGF5KTsKKwlpZ3RfaW5mbygiQml0RGVwdGgg PSAldVxuIiwgYml0ZGVwdGgpOworCit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc190ZXN0X3JlcXVl c3QoaW50IHRlc3RfdHlwZSkKK3sKKwlpbnQgbW9kZTsKKwlib29sIHZhbGlkID0gZmFsc2U7CisK Kwlzd2l0Y2ggKHRlc3RfdHlwZSkgeworCWNhc2UgRFBfVEVTVF9MSU5LX1ZJREVPX1BBVFRFUk46 CisJCXZpZGVvX3BhdHRlcm5fZmxhZyA9IHRydWU7CisJCWdldF90ZXN0X3ZpZGVvcGF0dGVybl9k YXRhKCk7CisJCW1vZGUgPSBNU01fTU9ERV9WSURFT19QQVRURVJOX1RFU1Q7CisJCXZhbGlkID0g dHJ1ZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogVW5rbm93biB0ZXN0IHR5cGUgKi8KKwkJ ZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIHRlc3QgcmVxdWVzdCwgaWdub3JlZC5cbiIpOworCQli cmVhazsKKwl9CisKKwlpZiAodmFsaWQpCisJCXJldHVybiB1cGRhdGVfZGlzcGxheShtb2RlLCB0 cnVlKTsKKworCXJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQgZHVtcF9pbmZvKHZvaWQpCit7 CisJaWd0X2R1bXBfY29ubmVjdG9yc19mZChkcm1fZmQpOworCWlndF9kdW1wX2NydGNzX2ZkKGRy bV9mZCk7Cit9CisKK3N0YXRpYyBpbnQgc2V0dXBfdmlkZW9fcGF0dGVybl9mcmFtZWJ1ZmZlcihz dHJ1Y3QgY29ubmVjdG9yICpkcF9jb25uKQoreworCXVpbnQzMl90ICB2aWRlb193aWR0aCwgdmlk ZW9faGVpZ2h0OworCisJdmlkZW9fd2lkdGggPSBkcF9jb25uLT50ZXN0X3BhdHRlcm4uaGRpc3Bs YXk7CisJdmlkZW9faGVpZ2h0ID0gZHBfY29ubi0+dGVzdF9wYXR0ZXJuLnZkaXNwbGF5OworCisJ ZHBfY29ubi0+dGVzdF9wYXR0ZXJuLmZiID0gaWd0X2NyZWF0ZV9mYihkcm1fZmQsCisJCQl2aWRl b193aWR0aCwgdmlkZW9faGVpZ2h0LAorCQkJRFJNX0ZPUk1BVF9YUkdCODg4OCwKKwkJCUxPQ0FM X0RSTV9GT1JNQVRfTU9EX05PTkUsCisJCQkmZHBfY29ubi0+dGVzdF9wYXR0ZXJuLmZiX3BhdHRl cm4pOworCWlndF9hc3NlcnQoZHBfY29ubi0+dGVzdF9wYXR0ZXJuLmZiKTsKKworCisJZHBfY29u bi0+dGVzdF9wYXR0ZXJuLnBpeG1hcCA9IGttc3Rlc3RfZHVtYl9tYXBfYnVmZmVyKGRybV9mZCwK KwkJCWRwX2Nvbm4tPnRlc3RfcGF0dGVybi5mYl9wYXR0ZXJuLmdlbV9oYW5kbGUsCisJCQlkcF9j b25uLT50ZXN0X3BhdHRlcm4uZmJfcGF0dGVybi5zaXplLAorCQkJUFJPVF9SRUFEIHwgUFJPVF9X UklURSk7CisKKwlpZiAoZHBfY29ubi0+dGVzdF9wYXR0ZXJuLnBpeG1hcCA9PSBOVUxMKQorCQly ZXR1cm4gLTE7CisKKwlkcF9jb25uLT50ZXN0X3BhdHRlcm4uc2l6ZSA9IGRwX2Nvbm4tPnRlc3Rf cGF0dGVybi5mYl9wYXR0ZXJuLnNpemU7CisJbWVtc2V0KGRwX2Nvbm4tPnRlc3RfcGF0dGVybi5w aXhtYXAsIDAsIGRwX2Nvbm4tPnRlc3RfcGF0dGVybi5zaXplKTsKKwlyZXR1cm4gMDsKKworfQor CitzdGF0aWMgaW50IHNldF90ZXN0X21vZGUoc3RydWN0IGNvbm5lY3RvciAqZHBfY29ubikKK3sK KwlpbnQgcmV0ID0gMDsKKwlpbnQgaTsKKwlkcm1Nb2RlQ29ubmVjdG9yICpjID0gZHBfY29ubi0+ Y29ubmVjdG9yOworCisJLyogSWdub3JlIGFueSBkaXNjb25uZWN0ZWQgZGV2aWNlcyAqLworCWlm IChjLT5jb25uZWN0aW9uICE9IERSTV9NT0RFX0NPTk5FQ1RFRCkgeworCQlpZ3Rfd2FybigiQ29u bmVjdG9yICV1IGRpc2Nvbm5lY3RlZFxuIiwgYy0+Y29ubmVjdG9yX2lkKTsKKwkJcmV0dXJuIC1F Tk9FTlQ7CisJfQorCWlndF9pbmZvKCJDb25uZWN0b3Igc2V0dXA6XG4iKTsKKworCS8qCisJICog dG8tZG86IGZvciBjYXNlcyB3aGVyZSBkcml2ZXIgZG9lc24ndCBzdXBwb3J0IDRLIGJ1dAorCSAq IGl0cyB0aGUgcHJlZmVycmVkIG1vZGUgb2YgdGhlIHNpbmssIHVzZSA2NDB4NDgwIGFzCisJICog ZGVmYXVsdCByZXNvbHV0aW9uCisJICovCisKKwlmb3IgKGkgPSAwOyBpIDwgYy0+Y291bnRfbW9k ZXM7IGkrKykgeworCQlpZiAoYy0+bW9kZXNbaV0uaGRpc3BsYXkgPT0gNjQwICYmCisJCQljLT5t b2Rlc1tpXS52ZGlzcGxheSA9PSA0ODAgJiYKKwkJCWMtPm1vZGVzW2ldLnZyZWZyZXNoID09IDYw KSB7CisJCQlpZ3RfaW5mbygiZm91bmQgaWR4IG9mIGZhaWxzYWZlIG1vZGUgPSAlZFxuIiwgaSk7 CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChpID09IGMtPmNvdW50X21vZGVzKSB7CisJCWln dF9pbmZvKCJkaWRuJ3QgZmluZCBmYWlsc2FmZSB1c2luZyBkZWZhdWx0XG4iKTsKKwkJaSA9IDA7 CisJfQorCisJZHBfY29ubi0+dGVzdF9wYXR0ZXJuLm1vZGUgPSBjLT5tb2Rlc1tpXTsKKwlkcF9j b25uLT50ZXN0X3BhdHRlcm4ubW9kZS5oZGlzcGxheSA9IGMtPm1vZGVzW2ldLmhkaXNwbGF5Owor CWRwX2Nvbm4tPnRlc3RfcGF0dGVybi5tb2RlLnZkaXNwbGF5ID0gYy0+bW9kZXNbaV0udmRpc3Bs YXk7CisKKwlpZ3RfaW5mbygiZmFpbHNhZmUgKG1vZGUgJWQpIGZvciBjb25uZWN0b3IgJXUgaXMg JXV4JXVcbiIsIGksCisJCSBkcF9jb25uLT5pZCwgYy0+bW9kZXNbaV0uaGRpc3BsYXksIGMtPm1v ZGVzW2ldLnZkaXNwbGF5KTsKKwlmZmx1c2goc3RkaW4pOworCisJaWYgKHZpZGVvX3BhdHRlcm5f ZmxhZykgeworCQlkcF9jb25uLT50ZXN0X3BhdHRlcm4uaGRpc3BsYXkgPSBoZGlzcGxheTsKKwkJ ZHBfY29ubi0+dGVzdF9wYXR0ZXJuLnZkaXNwbGF5ID0gdmRpc3BsYXk7CisJCWRwX2Nvbm4tPnRl c3RfcGF0dGVybi5iaXRkZXB0aCA9IGJpdGRlcHRoOworCisJCXJldCA9IHNldHVwX3ZpZGVvX3Bh dHRlcm5fZnJhbWVidWZmZXIoZHBfY29ubik7CisJCWlmIChyZXQpIHsKKwkJCWlndF93YXJuKCJD cmVhdGluZyBmcmFtZWJ1ZmZlciBmb3IgY29ubmVjdG9yICV1IGZhaWxlZCAoJWQpXG4iLAorCQkJ CSBjLT5jb25uZWN0b3JfaWQsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJcmV0ID0g aWd0X2ZpbGxfY3RzX2ZyYW1lYnVmZmVyKGRwX2Nvbm4tPnRlc3RfcGF0dGVybi5waXhtYXAsCisJ CQkJZHBfY29ubi0+dGVzdF9wYXR0ZXJuLmhkaXNwbGF5LAorCQkJCWRwX2Nvbm4tPnRlc3RfcGF0 dGVybi52ZGlzcGxheSwKKwkJCQlkcF9jb25uLT50ZXN0X3BhdHRlcm4uYml0ZGVwdGgsCisJCQkJ MCk7CisJCWlmIChyZXQpIHsKKwkJCWlndF93YXJuKCJGaWxsaW5nIGZyYW1lYnVmZmVyIGZvciBj b25uZWN0b3IgJXUgZmFpbGVkICglZClcbiIsCisJCQkJIGMtPmNvbm5lY3Rvcl9pZCwgcmV0KTsK KwkJCXJldHVybiByZXQ7CisJCX0KKwkJLyogdW5tYXBwaW5nIHRoZSBidWZmZXIgcHJldmlvdXNs eSBtYXBwZWQgZHVyaW5nIHNldHVwICovCisJCW11bm1hcChkcF9jb25uLT50ZXN0X3BhdHRlcm4u cGl4bWFwLAorCQkJCWRwX2Nvbm4tPnRlc3RfcGF0dGVybi5zaXplKTsKKwl9CisKKwlyZXR1cm4g cmV0OworfQorCitzdGF0aWMgaW50IHNldF92aWRlbyhpbnQgbW9kZSwgc3RydWN0IGNvbm5lY3Rv ciAqdGVzdF9jb25uZWN0b3IpCit7CisJZHJtTW9kZU1vZGVJbmZvICpyZXF1ZXN0ZWRfbW9kZTsK Kwl1aW50MzJfdCByZXF1aXJlZF9mYl9pZDsKKwlzdHJ1Y3QgaWd0X2ZiIHJlcXVpcmVkX2ZiOwor CWludCByZXQgPSAwOworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBNU01fTU9ERV9OT05FOgor CQlpZ3RfaW5mbygiTk9ORVxuIik7CisJCXJldCA9IGRybU1vZGVTZXRDcnRjKGRybV9mZCwgdGVz dF9jb25uZWN0b3ItPmNydGMsCisJCQkJICAgICAtMSwgMCwgMCwgTlVMTCwgMCwgTlVMTCk7CisJ CWdvdG8gb3V0OworCWNhc2UgTVNNX01PREVfVklERU9fUEFUVEVSTl9URVNUOgorCQlpZ3RfaW5m bygiVklERU8gUEFUVEVSTiBURVNUXG4iKTsKKwkJcmVxdWVzdGVkX21vZGUgPSAmdGVzdF9jb25u ZWN0b3ItPnRlc3RfcGF0dGVybi5tb2RlOworCQlyZXF1aXJlZF9mYl9pZCA9IHRlc3RfY29ubmVj dG9yLT50ZXN0X3BhdHRlcm4uZmI7CisJCXJlcXVpcmVkX2ZiID0gdGVzdF9jb25uZWN0b3ItPnRl c3RfcGF0dGVybi5mYl9wYXR0ZXJuOworCQlicmVhazsKKwljYXNlIE1TTV9NT0RFX0lOVkFMSUQ6 CisJZGVmYXVsdDoKKwkJaWd0X3dhcm4oIklOVkFMSUQhICglMDh4KSBNb2RlIHNldCBhYm9ydGVk IVxuIiwgbW9kZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZ3RfaW5mbygiQ1JUQygldSk6Iiwg dGVzdF9jb25uZWN0b3ItPmNydGMpOworCWttc3Rlc3RfZHVtcF9tb2RlKHJlcXVlc3RlZF9tb2Rl KTsKKwlyZXQgPSBkcm1Nb2RlU2V0Q3J0Yyhkcm1fZmQsIHRlc3RfY29ubmVjdG9yLT5jcnRjLCBy ZXF1aXJlZF9mYl9pZCwgMCwgMCwKKwkJCSAgICAgJnRlc3RfY29ubmVjdG9yLT5pZCwgMSwgcmVx dWVzdGVkX21vZGUpOworCWlmIChyZXQpIHsKKwkJaWd0X3dhcm4oIkZhaWxlZCB0byBzZXQgbW9k ZSAoJWR4JWRAJWRIeik6ICVzXG4iLAorCQkJIHJlcXVlc3RlZF9tb2RlLT5oZGlzcGxheSwgcmVx dWVzdGVkX21vZGUtPnZkaXNwbGF5LAorCQkJIHJlcXVlc3RlZF9tb2RlLT52cmVmcmVzaCwgc3Ry ZXJyb3IoZXJybm8pKTsKKwkJaWd0X3JlbW92ZV9mYihkcm1fZmQsICZyZXF1aXJlZF9mYik7CisK Kwl9CisJLyogS2VlcCB0aGUgcGF0dGVybiBmb3IgMSBzZWMgZm9yIFFkYm94IDk4MCB0byBkZXRl Y3QgaXQgKi8KKwlzbGVlcCgxKTsKKworb3V0OgorCWlmIChyZXQpIHsKKwkJaWd0X3dhcm4oIkZh aWxlZCB0byBzZXQgQ1JUQyBmb3IgY29ubmVjdG9yICV1XG4iLAorCQkJIHRlc3RfY29ubmVjdG9y LT5pZCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorc2V0X2RlZmF1bHRf bW9kZShzdHJ1Y3QgY29ubmVjdG9yICpjLCBib29sIHNldF9tb2RlKQoreworCXVuc2lnbmVkIGlu dCBmYl9pZCA9IDA7CisJc3RydWN0IGlndF9mYiBmYl9pbmZvOworCWludCByZXQgPSAwOworCWlu dCBpOworCWRybU1vZGVDb25uZWN0b3IgKmNvbm4gPSBjLT5jb25uZWN0b3I7CisKKwlpZiAoIXNl dF9tb2RlKSB7CisJCWlndF9pbmZvKCJub3QgcmVzZXR0aW5nIHRoZSBtb2RlXG4iKTsKKwkJcmV0 ID0gZHJtTW9kZVNldENydGMoZHJtX2ZkLCBjLT5jcnRjLCAwLCAwLCAwLAorCQkJCSAgICAgTlVM TCwgMCwgTlVMTCk7CisJCWlmIChyZXQpCisJCQlpZ3Rfd2FybigiRmFpbGVkIHRvIHVuc2V0IG1v ZGUiKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgY29ubi0+Y291bnRf bW9kZXM7IGkrKykgeworCQlpZiAoY29ubi0+bW9kZXNbaV0uaGRpc3BsYXkgPT0gNjQwICYmCisJ CQljb25uLT5tb2Rlc1tpXS52ZGlzcGxheSA9PSA0ODAgJiYKKwkJCWNvbm4tPm1vZGVzW2ldLnZy ZWZyZXNoID09IDYwKSB7CisJCQlpZ3RfaW5mbygiZm91bmQgaWR4IG9mIGZhaWxzYWZlIG1vZGUg PSAlZFxuIiwgaSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChpID09IGNvbm4tPmNvdW50 X21vZGVzKSB7CisJCWlndF9pbmZvKCJkaWRuJ3QgZmluZCBmYWlsc2FmZSB1c2luZyBkZWZhdWx0 XG4iKTsKKwkJaSA9IDA7CisJfQorCisJYy0+bW9kZSA9IGMtPmNvbm5lY3Rvci0+bW9kZXNbaV07 CisKKwl3aWR0aCA9IGMtPm1vZGUuaGRpc3BsYXk7CisJaGVpZ2h0ID0gYy0+bW9kZS52ZGlzcGxh eTsKKworCWZiX2lkID0gaWd0X2NyZWF0ZV9wYXR0ZXJuX2ZiKGRybV9mZCwgd2lkdGgsIGhlaWdo dCwKKwkJCQkgICAgICBEUk1fRk9STUFUX1hSR0I4ODg4LAorCQkJCSAgICAgIHRpbGluZywgJmZi X2luZm8pOworCisJa21zdGVzdF9kdW1wX21vZGUoJmMtPm1vZGUpOworCWRybU1vZGVTZXRDcnRj KGRybV9mZCwgYy0+Y3J0YywgLTEsIDAsIDAsIE5VTEwsIDAsIE5VTEwpOworCXJldCA9IGRybU1v ZGVTZXRDcnRjKGRybV9mZCwgYy0+Y3J0YywgZmJfaWQsIDAsIDAsCisJCQkgICAgICZjLT5pZCwg MSwgJmMtPm1vZGUpOworCWlmIChyZXQpIHsKKwkJaWd0X3dhcm4oIkZhaWxlZCB0byBzZXQgbW9k ZSAoJWR4JWRAJWRIeik6ICVzXG4iLAorCQkJIHdpZHRoLCBoZWlnaHQsIGMtPm1vZGUudnJlZnJl c2gsIHN0cmVycm9yKGVycm5vKSk7CisJCWlndF9yZW1vdmVfZmIoZHJtX2ZkLCAmZmJfaW5mbyk7 CisKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdWludDMyX3QgZmluZF9jcnRjX2Zv cl9jb25uZWN0b3IoZHJtTW9kZUNvbm5lY3RvciAqYykKK3sKKwlkcm1Nb2RlRW5jb2RlciAqZTsK Kwlkcm1Nb2RlQ3J0Y1B0ciBjcnRjX3B0cjsKKwlpbnQgaTsKKworCWFjdGl2ZV9jcnRjID0gMDsK KworCWZvciAoaSA9IDA7IGkgPCBjLT5jb3VudF9lbmNvZGVyczsgaSsrKSB7CisJCWUgPSBkcm1N b2RlR2V0RW5jb2Rlcihkcm1fZmQsIGMtPmVuY29kZXJzW2ldKTsKKworCQkgLyogaWYgdGhlcmUg aXMgYW4gYWN0aXZlIGNydGMgdXNlIGl0ICovCisJCWlmIChlLT5jcnRjX2lkKSB7CisJCQlhY3Rp dmVfY3J0YyA9IGUtPmNydGNfaWQ7CisJCQlkcm1Nb2RlRnJlZUVuY29kZXIoZSk7CisJCQlicmVh azsKKwkJfQorCQlkcm1Nb2RlRnJlZUVuY29kZXIoZSk7CisJfQorCisJLyogbm8gbmVlZCB0byBz ZWFyY2ggZnVydGhlciBpZiBhY3RpdmUgY3J0YyBpcyBmb3VuZCAqLworCWlmIChhY3RpdmVfY3J0 YykKKwkJcmV0dXJuIGFjdGl2ZV9jcnRjOworCisJLyoKKwkgKiBpZiB0aGVyZSBpcyBubyBhY3Rp dmUgY3J0YyBmaW5kIG9uZSBmcm9tIHRoZSBsaXN0IG9mCisJICogdW51c2VkIG9uZXMuIENhbm5v dCB1c2UgYW55dGhpbmcgZnJvbSBwb3NzaWJsZV9jcnRjIG9mCisJICogb2YgZW5jb2RlciBiZWNh dXNlIGl0IHRoZW4gdHJpZXMgdG8gc3RlYWwgdGhlIGNydGMgb2YgdGhlCisJICogcHJpbWFyeSBk aXNwbGF5LiBEUFUgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgc3dpdGNoaW5nIENSVENzCisJICog YWNyb3NzIGRpc3BsYXlzIGluIHRoZSBzYW1lIGNvbW1pdC4gSGVuY2UgbmVlZCB0byBmaW5kIHNv bWUKKwkgKiBvdGhlciB1bnVzZWQgY3J0Yy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcmVzb3Vy Y2VzLT5jb3VudF9jcnRjczsgaSsrKSB7CisJCWNydGNfcHRyID0gZHJtTW9kZUdldENydGMoZHJt X2ZkLCByZXNvdXJjZXMtPmNydGNzW2ldKTsKKwkJLyogaWYgYSBjcnRjIHdoaWNoIGlzIHVudXNl ZCBpcyBmb3VuZCAsIHVzZSBpdCAqLworCQlpZiAoIWNydGNfcHRyLT5tb2RlX3ZhbGlkKSB7CisJ CQlhY3RpdmVfY3J0YyA9IGNydGNfcHRyLT5jcnRjX2lkOworCQkJZHJtTW9kZUZyZWVDcnRjKGNy dGNfcHRyKTsKKwkJCWJyZWFrOworCQl9CisJCWRybU1vZGVGcmVlQ3J0YyhjcnRjX3B0cik7CisJ fQorCisJcmV0dXJuIGFjdGl2ZV9jcnRjOworfQorCisvKgorICogUmUtcHJvYmUgY29ubmVjdG9y cyBhbmQgZG8gYSBtb2Rlc2V0IGJhc2VkIG9uIHRlc3QgcmVxdWVzdCBvcgorICogaW4gY2FzZSBv ZiBhIGhvdHBsdWcgdWV2ZW50LgorICoKKyAqIEBtb2RlOiBWaWRlbyBtb2RlIHJlcXVlc3RlZCBi eSB0aGUgdGVzdAorICogQGlzX2NvbXBsaWFuY2VfdGVzdDogMTogSWYgaXQgaXMgYSBjb21wbGlh bmNlIHRlc3QKKyAqICAgICAgICAgICAgICAgICAgICAgIDA6IElmIGl0IGlzIGEgaG90cGx1ZyBl dmVudAorICoKKyAqIFJldHVybnM6CisgKiAwOiBPbiBTdWNjZXNzCisgKiAtMTogT24gZmFpbHVy ZQorICovCitpbnQgdXBkYXRlX2Rpc3BsYXkoaW50IG1vZGUsIGJvb2wgaXNfY29tcGxpYW5jZV90 ZXN0KQoreworCXN0cnVjdCBjb25uZWN0b3IgKmNvbm5lY3RvcnMsICpjb25uOworCWludCBjbnQs IHJldCA9IDA7CisJYm9vbCBzZXRfbW9kZTsKKwkvL2ludCBjcnRjOworCisJcmVzb3VyY2VzID0g ZHJtTW9kZUdldFJlc291cmNlcyhkcm1fZmQpOworCWlmICghcmVzb3VyY2VzKSB7CisJCWlndF93 YXJuKCJkcm1Nb2RlR2V0UmVzb3VyY2VzIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7 CisJCXJldHVybiAtMTsKKwl9CisKKwljb25uZWN0b3JzID0gY2FsbG9jKHJlc291cmNlcy0+Y291 bnRfY29ubmVjdG9ycywKKwkJCSAgICBzaXplb2Yoc3RydWN0IGNvbm5lY3RvcikpOworCWlmICgh Y29ubmVjdG9ycykKKwkJcmV0dXJuIC0xOworCisJLyogRmluZCBhbnkgY29ubmVjdGVkIGRpc3Bs YXlzICovCisJZm9yIChjbnQgPSAwOyBjbnQgPCByZXNvdXJjZXMtPmNvdW50X2Nvbm5lY3RvcnM7 IGNudCsrKSB7CisJCWRybU1vZGVDb25uZWN0b3IgKmM7CisKKwkJY29ubiA9ICZjb25uZWN0b3Jz W2NudF07CisJCWNvbm4tPmlkID0gcmVzb3VyY2VzLT5jb25uZWN0b3JzW2NudF07CisJCWMgPSBk cm1Nb2RlR2V0Q29ubmVjdG9yKGRybV9mZCwgY29ubi0+aWQpOworCQlpZiAoYy0+Y29ubmVjdG9y X3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0ICYmCisJCQljLT5jb25uZWN0 aW9uID09IERSTV9NT0RFX0NPTk5FQ1RFRCkgeworCQkJdGVzdF9jb25uZWN0b3JfaWQgPSBjLT5j b25uZWN0b3JfaWQ7CisJCQljb25uLT5jb25uZWN0b3IgPSBjOworCQkJY29ubi0+Y3J0YyA9IGZp bmRfY3J0Y19mb3JfY29ubmVjdG9yKGMpOworCQkJdGVzdF9jcnRjID0gY29ubi0+Y3J0YzsKKwkJ CXNldF9tb2RlID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKGMtPmNvbm5lY3Rvcl9p ZCA9PSB0ZXN0X2Nvbm5lY3Rvcl9pZCAmJgorCQkJICAgYy0+Y29ubmVjdGlvbiA9PSBEUk1fTU9E RV9ESVNDT05ORUNURUQpIHsKKwkJCWNvbm4tPmNvbm5lY3RvciA9IGM7CisJCQljb25uLT5jcnRj ID0gdGVzdF9jcnRjOworCQkJc2V0X21vZGUgPSBmYWxzZTsKKwkJCWJyZWFrOworCQl9CisJfQor CisJaWYgKGNudCA9PSByZXNvdXJjZXMtPmNvdW50X2Nvbm5lY3RvcnMpIHsKKwkJcmV0ID0gLTE7 CisJCWdvdG8gZXJyOworCX0KKworCWlmIChpc19jb21wbGlhbmNlX3Rlc3QpIHsKKwkJc2V0X3Rl c3RfbW9kZShjb25uKTsKKwkJcmV0ID0gc2V0X3ZpZGVvKE1TTV9NT0RFX05PTkUsIGNvbm4pOwor CQlyZXQgPSBzZXRfdmlkZW8obW9kZSwgY29ubik7CisKKwl9IGVsc2UKKwkJcmV0ID0gc2V0X2Rl ZmF1bHRfbW9kZShjb25uLCBzZXRfbW9kZSk7CisKKyBlcnI6CisJZHJtTW9kZUZyZWVDb25uZWN0 b3IoY29ubi0+Y29ubmVjdG9yKTsKKwkvKiBFcnJvciBjb25kaXRpb24gaWYgbm8gY29ubmVjdGVk IGRpc3BsYXlzICovCisJZnJlZShjb25uZWN0b3JzKTsKKwlkcm1Nb2RlRnJlZVJlc291cmNlcyhy ZXNvdXJjZXMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIG9wdHN0cltd ID0gImhpIjsKKworc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKSB1c2FnZShj aGFyICpuYW1lLCBjaGFyIG9wdCkKK3sKKwlpZ3RfaW5mbygidXNhZ2U6ICVzIFstaGldXG4iLCBu YW1lKTsKKwlpZ3RfaW5mbygiXHQtaVx0ZHVtcCBpbmZvXG4iKTsKKwlpZ3RfaW5mbygiXHREZWZh dWx0IGlzIHRvIHJlc3BvbmQgdG8gUWQ5ODAgdGVzdHNcbiIpOworCWV4aXQoKG9wdCAhPSAnaCcp ID8gLTEgOiAwKTsKK30KKworc3RhdGljIHZvaWQgY2xlYW51cF9kZWJ1Z2ZzKHZvaWQpCit7CisJ ZmNsb3NlKHRlc3RfYWN0aXZlX2ZwKTsKKwlmY2xvc2UodGVzdF9kYXRhX2ZwKTsKKwlmY2xvc2Uo dGVzdF90eXBlX2ZwKTsKK30KKworc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4p KSBjbGVhbnVwX2FuZF9leGl0KGludCByZXQpCit7CisJY2xlYW51cF9kZWJ1Z2ZzKCk7CisJY2xv c2UoZHJtX2ZkKTsKKwlpZ3RfaW5mbygiQ29tcGxpYW5jZSB0ZXN0aW5nIGFwcGxpY2F0aW9uIGV4 aXRpbmdcbiIpOworCWV4aXQocmV0KTsKK30KKworc3RhdGljIHZvaWQgY2xlYW51cF90ZXN0KHZv aWQpCit7CisJdmlkZW9fcGF0dGVybl9mbGFnID0gZmFsc2U7CisJaGRpc3BsYXkgPSAwOworCXZk aXNwbGF5ID0gMDsKKwliaXRkZXB0aCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfdGVzdF9y ZXF1ZXN0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyB0ZXN0X3R5cGU7CisKKwl0ZXN0X3R5cGUg PSBnZXRfdGVzdF90eXBlKCk7CisKKwlwcm9jZXNzX3Rlc3RfcmVxdWVzdCh0ZXN0X3R5cGUpOwor CWNsZWFudXBfdGVzdCgpOworCWNsZWFyX3Rlc3RfYWN0aXZlKCk7Cit9CisKK3N0YXRpYyBnYm9v bGVhbiB0ZXN0X2hhbmRsZXIoR0lPQ2hhbm5lbCAqc291cmNlLCBHSU9Db25kaXRpb24gY29uZGl0 aW9uLAorCQkJICAgICBncG9pbnRlciBkYXRhKQoreworCXVuc2lnbmVkIGxvbmcgdGVzdF9hY3Rp dmU7CisJaW50IHJldDsKKworCXJld2luZCh0ZXN0X2FjdGl2ZV9mcCk7CisKKwlyZXQgPSBmc2Nh bmYodGVzdF9hY3RpdmVfZnAsICIlbHgiLCAmdGVzdF9hY3RpdmUpOworCWlmIChyZXQgPCAxKQor CQlyZXR1cm4gRkFMU0U7CisKKwlpZiAodGVzdF9hY3RpdmUpCisJCXJlYWRfdGVzdF9yZXF1ZXN0 KCk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuIGlucHV0X2V2ZW50KEdJ T0NoYW5uZWwgKnNvdXJjZSwgR0lPQ29uZGl0aW9uIGNvbmRpdGlvbiwKKwkJCQlncG9pbnRlciBk YXRhKQoreworCWdjaGFyIGJ1ZlsyXTsKKwlnc2l6ZSBjb3VudDsKKworCWNvdW50ID0gcmVhZChn X2lvX2NoYW5uZWxfdW5peF9nZXRfZmQoc291cmNlKSwgYnVmLCBzaXplb2YoYnVmKSk7CisJaWYg KGJ1ZlswXSA9PSAncScgJiYgKGNvdW50ID09IDEgfHwgYnVmWzFdID09ICdcbicpKQorCQljbGVh bnVwX2FuZF9leGl0KDApOworCisJcmV0dXJuIFRSVUU7Cit9CisKK2ludCBtYWluKGludCBhcmdj LCBjaGFyICoqYXJndikKK3sKKwlpbnQgYzsKKwlpbnQgcmV0ID0gMDsKKwlHSU9DaGFubmVsICpz dGRpbmNoYW5uZWwsICp0ZXN0YWN0aXZlX2NoYW5uZWw7CisJR01haW5Mb29wICptYWlubG9vcDsK Kwlib29sIG9wdF9kdW1wX2luZm8gPSBmYWxzZTsKKwlzdHJ1Y3Qgb3B0aW9uIGxvbmdfb3B0c1td ID0geworCQl7ImhlbHAtZGVzY3JpcHRpb24iLCAwLCAwLCBIRUxQX0RFU0NSSVBUSU9OfSwKKwkJ eyJoZWxwIiwgMCwgMCwgJ2gnfSwKKwl9OworCisJZW50ZXJfZXhlY19wYXRoKGFyZ3YpOworCisJ d2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgb3B0c3RyLCBsb25nX29wdHMsIE5V TEwpKSAhPSAtMSkgeworCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnaSc6CisJCQlvcHRfZHVtcF9p bmZvID0gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNlIEhFTFBfREVTQ1JJUFRJT046CisJCQlpZ3Rf aW5mbygiRFAgQ29tcGxpYW5jZSBUZXN0IFN1aXRlIHVzaW5nIFFkIDk4MFxuIik7CisJCQlpZ3Rf aW5mbygiVmlkZW8gUGF0dGVybiBHZW5lcmF0aW9uIHRlc3RzXG4iKTsKKwkJCWV4aXQoMCk7CisJ CQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlICdoJzoK KwkJCXVzYWdlKGFyZ3ZbMF0sIGMpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlzZXRfdGVybWlv X21vZGUoKTsKKworCWRybV9mZCA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJfQU5ZKTsKKworCWtt c3Rlc3Rfc2V0X3Z0X2dyYXBoaWNzX21vZGUoKTsKKwlzZXR1cF9kZWJ1Z2ZzX2ZpbGVzKCk7CisJ Y2xlYW51cF90ZXN0KCk7CisJaWYgKG9wdF9kdW1wX2luZm8pIHsKKwkJZHVtcF9pbmZvKCk7CisJ CWdvdG8gb3V0X2Nsb3NlOworCX0KKworCS8qIEdldCB0aGUgRFAgY29ubmVjdG9yIElEIGFuZCBD UlRDICovCisJaWYgKHVwZGF0ZV9kaXNwbGF5KDAsIGZhbHNlKSkgeworCQlpZ3Rfd2FybigiRmFp bGVkIHRvIHNldCBkZWZhdWx0IG1vZGVcbiIpOworCQlyZXQgPSAtMTsKKwkJZ290byBvdXRfY2xv c2U7CisJfQorCisJbWFpbmxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgRkFMU0UpOworCWlm ICghbWFpbmxvb3ApIHsKKwkJaWd0X3dhcm4oIkZhaWxlZCB0byBjcmVhdGUgR01haW5Mb29wXG4i KTsKKwkJcmV0ID0gLTE7CisJCWdvdG8gb3V0X2Nsb3NlOworCX0KKworCWlmICghaWd0X2RwX2Nv bXBsaWFuY2Vfc2V0dXBfaG90cGx1ZygpKSB7CisJCWlndF93YXJuKCJGYWlsZWQgdG8gaW5pdGlh bGl6ZSBob3RwbHVnIHN1cHBvcnRcbiIpOworCQlnb3RvIG91dF9tYWlubG9vcDsKKwl9CisKKwl0 ZXN0YWN0aXZlX2NoYW5uZWwgPSBnX2lvX2NoYW5uZWxfdW5peF9uZXcoZmlsZW5vKHRlc3RfYWN0 aXZlX2ZwKSk7CisJaWYgKCF0ZXN0YWN0aXZlX2NoYW5uZWwpIHsKKwkJaWd0X3dhcm4oIkZhaWxl ZCB0byBjcmVhdGUgdGVzdF9hY3RpdmUgR0lPQ2hhbm5lbFxuIik7CisJCWdvdG8gb3V0X2Nsb3Nl OworCX0KKworCXJldCA9IGdfaW9fYWRkX3dhdGNoKHRlc3RhY3RpdmVfY2hhbm5lbCwgR19JT19J TiB8IEdfSU9fRVJSLAorCQkJICAgICB0ZXN0X2hhbmRsZXIsIE5VTEwpOworCWlmIChyZXQgPCAw KSB7CisJCWlndF93YXJuKCJGYWlsZWQgdG8gYWRkIHdhdGNoIG9uIHVkZXYgR0lPQ2hhbm5lbFxu Iik7CisJCQlnb3RvIG91dF9jbG9zZTsKKwl9CisKKwlzdGRpbmNoYW5uZWwgPSBnX2lvX2NoYW5u ZWxfdW5peF9uZXcoMCk7CisJaWYgKCFzdGRpbmNoYW5uZWwpIHsKKwkJaWd0X3dhcm4oIkZhaWxl ZCB0byBjcmVhdGUgc3RkaW4gR0lPQ2hhbm5lbFxuIik7CisJCWdvdG8gb3V0X2hvdHBsdWc7CisJ fQorCisJcmV0ID0gZ19pb19hZGRfd2F0Y2goc3RkaW5jaGFubmVsLCBHX0lPX0lOIHwgR19JT19F UlIsIGlucHV0X2V2ZW50LAorCQkJICAgICBOVUxMKTsKKwlpZiAocmV0IDwgMCkgeworCQlpZ3Rf d2FybigiRmFpbGVkIHRvIGFkZCB3YXRjaCBvbiBzdGRpbiBHSU9DaGFubmVsXG4iKTsKKwkJZ290 byBvdXRfc3RkaW87CisJfQorCisJcmV0ID0gMDsKKworCWlndF9pbmZvKCIqKioqKioqKioqKioq RFAgQ29tcGxpYW5jZSBUZXN0aW5nIHVzaW5nIFFkYm94IDk4MCoqKioqKioqKioqKipcbiIpOwor CWlndF9pbmZvKCJXYWl0aW5nIGZvciB0ZXN0IHJlcXVlc3QuLi4uLi5cbiIpOworCisJZ19tYWlu X2xvb3BfcnVuKG1haW5sb29wKTsKKworb3V0X3N0ZGlvOgorCWdfaW9fY2hhbm5lbF9zaHV0ZG93 bihzdGRpbmNoYW5uZWwsIFRSVUUsIE5VTEwpOworb3V0X2hvdHBsdWc6CisJaWd0X2RwX2NvbXBs aWFuY2VfY2xlYW51cF9ob3RwbHVnKCk7CitvdXRfbWFpbmxvb3A6CisJZ19tYWluX2xvb3BfdW5y ZWYobWFpbmxvb3ApOworb3V0X2Nsb3NlOgorCWNsZWFudXBfZGVidWdmcygpOworCWNsb3NlKGRy bV9mZCk7CisKKwlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7CisKKwlpZ3RfaW5mbygiQ29tcGxpYW5j ZSB0ZXN0aW5nIGFwcGxpY2F0aW9uIGV4aXRpbmdcbiIpOworCWlndF9leGl0KCk7Cit9Ci0tIApU aGUgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gaXMgYSBtZW1iZXIgb2YgdGhlIENv ZGUgQXVyb3JhIEZvcnVtLAphIExpbnV4IEZvdW5kYXRpb24gQ29sbGFib3JhdGl2ZSBQcm9qZWN0 CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2 IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXYK