From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id D1A8A6E0D3 for ; Thu, 12 Dec 2019 18:18:49 +0000 (UTC) From: Stanislav Lisovskiy Date: Thu, 12 Dec 2019 20:15:56 +0200 Message-Id: <20191212181556.30059-2-stanislav.lisovskiy@intel.com> In-Reply-To: <20191212181556.30059-1-stanislav.lisovskiy@intel.com> References: <20191212181556.30059-1-stanislav.lisovskiy@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v15 1/1] igt/tests: kms_plane_stress: Add plane stress test 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: martin.peres@intel.com, juha-pekka.heikkila@intel.com List-ID: VGhpcyB0ZXN0IGF0dGVtcHRzIHRvIHV0aWxpemUgYWxsIGNvbm5lY3RlZApvdXRwdXRzIGF0IHRo ZSBzYW1lIHRpbWUsIHVzaW5nIG1heGltdW0gcG9zc2libGUKcmVzb2x1dGlvbiBhbmQgYW1vdW50 IG9mIHBsYW5lcywgdG8gY2hlY2sgd2hldGhlcgp3ZSBhcmUgaGl0aW5nIGFueSBraW5kIG9mIGJh bmR3aWR0aCwgd2F0ZXJtYXJrIG9yCm90aGVyIGxpbWl0YXRpb25zLgoKdjI6IEFkZGVkIGNwdSBh bmQgZ3B1IGxvYWQgdGhyZWFkcywgd2hpY2ggY29uc3VtZQogICAgYWRkaXRpb25hbCBiYW5kd2lk dGguCgp2MzogUmVtb3ZlZCBiaW5hcnkgcGljdHVyZSBmaWxlLCB1c2luZyBwYXR0ZXJuIGZiCiAg ICBpbnN0ZWFkLgoKdjQ6IE1vdmVkIEZCIGNyZWF0aW9uL3JlbW92YWwgdG8gYmV0dGVyIHBsYWNl LgoKdjU6IEZpeGVkIHJlYmFzZSBjb25mbGljdCBhbmQgY2hhbmdlZCAiZmItPnRpbGluZyIKICAg IHRvICJmYi0+bW9kaWZpZXIiLgoKdjY6IFJlbW92ZWQgdW5uZWNlc3NhcnkgbmV3IG1hY3JvIGZv ciBpdGVyYXRpbmcgb24KICAgIHBpcGVzLiBUYWtlbiBpbnRvIHVzZSBpZ3RfZ2V0dGltZSBpbnN0 ZWFkIG9mCiAgICBjbG9ja19nZXR0aW1lLgoKdjc6IFB1dCBmYiByZWluaXQgaW50byBpZ3RfZml4 dHVyZSB0byBhdm9pZCBwcm9ibGVtcy4KICAgIE1vdmUgc3RyZXNzIGZ1bmN0aW9uIHVuZGVyIGln dF9zdWJ0ZXN0LiBSZWxlYXNlIHBsYW5lcywKICAgIHJlbW92ZSByZWR1bmRhbnQgY29tbWl0LCBh c3NlcnQgaWYgbm8gcGxhbmVzIGNhbiBiZSB1c2VkLgoKdjg6IC0gQWRkIGJsaXR0aW5nIGFsc28s IHRvIGhhdmUgbW9yZSBmdW4KICAgIC0gTm93IHVzaW5nIHNlcGFyYXRlIGZyYW1lYnVmZmVyIHBl ciBlYWNoIHBsYW5lLgogICAgLSBGaXhlZCBtYWdpYyBudW1iZXIgZm9yIGJwcCB2YWx1ZShub3cg YmFzZWQgb24gZm9ybWF0KQogICAgLSBTb21lIG9wdGltaXphdGlvbnMsIGxpa2Ugbm90IGFwcGx5 aW5nIHNhbWUgbW9kZSBpZiBpdAogICAgICBoYXNuJ3QgY2hhbmdlLCBhbHNvIGRvbid0IGRvIGhp Z2hlc3QgbW9kZSBzZWFyY2ggb24KICAgICAgZWFjaCBpdGVyYXRpb24sIGp1c3QgY2FsY3VsYXRl IG9uY2UgYW5kIHVzZSBpdC4KICAgIC0gU29tZSBjb2RlIHJlZmFjdG9yaW5nOiBleHRyYWN0ZWQg c29tZSBsZW5ndGh5IGNvZGUKICAgICAgdG8gc2VwYXJhdGUgZnVuY3Rpb25zLgogICAgLSBGaXhl ZCB3cm9uZyBpbmRleCBmb3IgY3Vyc29yIEZCKGN1cnNvciBGQiBpcyBvbmUgcGVyIHBpcGUpCgp2 OToKICAgIC0gTW9yZSBoZWxwZXIgZnVuY3Rpb25zKHN0YXJ0L3N0b3AgdGhyZWFkcywgdGVzdCBp bml0KQogICAgLSBOb3cgZG9pbmcgR1BVIHdvcmsgaW4gcHRocmVhZHMgYWxzbwogICAgLSBEbyBH UFUgd29yayBpbiBhIHNlcGFyYXRlIGZyYW1lYnVmZmVyKG5vdCBkaXNwbGF5ZWQpCgp2MTA6CiAg ICAtIEZpeCBpc3N1ZSBpbiBtYWluIHRlc3RpbmcgY3ljbGUsIGNvZGUgcmVmYWN0b3JpbmcKICAg IC0gUmViYXNlZAoKdjExOgogICAgLSBGaXhlZCBpc3N1ZSB3aXRoIHN1c3BlbmRpbmcvcmVzdW1p bmcgR1BVIHRocmVhZHMKICAgICAgdG8gZ2V0IGNyYy4gQWRkZWQgbnVtX3JlY3RhbmdsZXMgdG8g YmUgYWJsZSB0byBjdXN0b21pemUKICAgICAgbnVtYmVyIG9mIGdwZ3B1X2ZpbGwgY2FsbHMuCgp2 MTI6CiAgICAtIFJlbW92ZWQgdW5uZWVkZWQgc2hhcmVkIGZiIGZ1bmN0aW9uYWxpdHkgYW5kIGdw dSB0aHJlYWQKICAgICAgcGF1c2UvcmVzdW1lLgogICAgLSBOb3cgYWxzbyB1c2luZyBkaWZmZXJl bnQgZm9ybWF0cyBmb3IgY3Vyc29yIGZiLgogICAgLSBSZW1vdmVkIHVubmVjZXNzYXJ5IHBhcmFt ZXRlcnMgZm9yIHN0cmVzcyBmdW5jdGlvbi4KICAgIC0gQ2hhbmdlZCBwbGFuZV9zdHJlc3MgZnVu Y3Rpb24gbmFtZSB0byBwaXBlX3N0cmVzcyhtYWtlcyBzZW5zZSkKICAgIC0gUHV0IGdwZ3B1X3dh bGsgeCBhbmQgeSBidWcgZml4IGludG8gc2VwYXJhdGUgcGF0Y2guCgp2MTM6CiAgICAtIEFkZGVk IHRlc3RzIGRvY3VtZW50YXRpb24uCgp2MTQ6CiAgICAtIFN0YXJ0IHVzaW5nIGlndF9nZXRfcGlw ZV9jcmNfY3VycmVudCBpbnN0ZWFkIGluIG9yZGVyCiAgICAgIHRvIGFuYWx5emUgY3JjIGluIGEg bW9yZSBlZmZpY2llbnQgd2F5LgogICAgLSBOb3cgY2hlY2tpbmcgZXZlcnkgZnJhbWUKICAgIC0g QWxzbyBub3cgdXNpbmcgZm9yX2VhY2hfY29ubmVjdGVkX291dHB1dCBmb3IgaXRlcmF0aW5nCiAg ICAgIG9uIHBpcGVzLgoKdjE1OgogICAgLSBDb2RlIHJlZmFjdG9yaW5nLCBleHRyYWN0ZWQgZ3B1 IGZpbGwgaW50byBzZXBhcmF0ZSBmdW5jdGlvbi4KICAgIC0gUmVuYW1lZCBrbXNfcGxhbmVfc3Ry ZXNzIHRvIGk5MTVfcGlwZV9zdHJlc3MKICAgIC0gTW92ZWQgdG8gaTkxNSBzcGVjaWZpYyBmb2xk ZXIsIHdoZXJlIGl0IHNob3VsZCBiZQogICAgLSBGaXhlZCBNYWtlZmlsZS5zb3VyY2VzIGJ1aWxk IGZhaWx1cmUKCkNoYW5nZS1JZDogSTc5YWQ3NTY2ODU4MDFhYmRjODZlZGQ5YTgzYTAzODE2Mzk5 ZDRhOGQKU2lnbmVkLW9mZi1ieTogU3RhbmlzbGF2IExpc292c2tpeSA8c3RhbmlzbGF2Lmxpc292 c2tpeUBpbnRlbC5jb20+Ci0tLQogdGVzdHMvTWFrZWZpbGUuc291cmNlcyAgICAgICAgfCAgIDMg KwogdGVzdHMvaTkxNS9pOTE1X3BpcGVfc3RyZXNzLmMgfCA4ODggKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwogdGVzdHMvbWVzb24uYnVpbGQgICAgICAgICAgICAgfCAgIDEgKwog MyBmaWxlcyBjaGFuZ2VkLCA4OTIgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRl c3RzL2k5MTUvaTkxNV9waXBlX3N0cmVzcy5jCgpkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUu c291cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKaW5kZXggMjg5M2Y5YmMuLmZiM2EzMjZm IDEwMDY0NAotLS0gYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCisrKyBiL3Rlc3RzL01ha2VmaWxl LnNvdXJjZXMKQEAgLTUxNCw2ICs1MTQsOSBAQCBpOTE1X3BtX2xwc3BfU09VUkNFUyA9IGk5MTUv aTkxNV9wbV9scHNwLmMKIFRFU1RTX3Byb2dzICs9IGk5MTVfcG1fcmM2X3Jlc2lkZW5jeQogaTkx NV9wbV9yYzZfcmVzaWRlbmN5X1NPVVJDRVMgPSBpOTE1L2k5MTVfcG1fcmM2X3Jlc2lkZW5jeS5j CiAKK1RFU1RTX3Byb2dzICs9IGk5MTVfcGlwZV9zdHJlc3MKK2k5MTVfcGlwZV9zdHJlc3NfU09V UkNFUyA9IGk5MTUvaTkxNV9waXBlX3N0cmVzcy5jCisKIFRFU1RTX3Byb2dzICs9IGk5MTVfcG1f cnBtCiBpOTE1X3BtX3JwbV9TT1VSQ0VTID0gaTkxNS9pOTE1X3BtX3JwbS5jCiAKZGlmZiAtLWdp dCBhL3Rlc3RzL2k5MTUvaTkxNV9waXBlX3N0cmVzcy5jIGIvdGVzdHMvaTkxNS9pOTE1X3BpcGVf c3RyZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjYyMzZmNTUwCi0t LSAvZGV2L251bGwKKysrIGIvdGVzdHMvaTkxNS9pOTE1X3BpcGVfc3RyZXNzLmMKQEAgLTAsMCAr MSw4ODggQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorICoK KyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkg cGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0 ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0 aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRh dGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gs IGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNv ZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlz IGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6 CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBu b3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRl ZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdh cmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FS UkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQg Tk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5P IEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFC TEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVS IElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAq IEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBV U0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVk ZSAiaWd0LmgiCisjaW5jbHVkZSAiaWd0X3JhbmQuaCIKKyNpbmNsdWRlICJncGdwdV9maWxsLmgi CisjaW5jbHVkZSAiZHJtdGVzdC5oIgorI2luY2x1ZGUgInN3X3N5bmMuaCIKKyNpbmNsdWRlIDxl cnJuby5oPgorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5j bHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+Cisj aW5jbHVkZSA8cG9sbC5oPgorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlIDxzZW1hcGhv cmUuaD4KKworCitJR1RfVEVTVF9ERVNDUklQVElPTigiU3RyZXNzIHRlc3QgaG93IGdwdSBhbmQg Y3B1IGJlaGF2ZXMgaWYgbWF4aW11bSBhbW91bnQgb2YgcGxhbmVzLCAiCisgICAgICAgICAgICAg ICAgICAgICAiY3B1IGFuZCBncHUgdXRpbGl6YXRpb24gaXMgYWNoaWV2ZWQgaW4gb3JkZXIgdG8g cmV2ZWFsIHBvc3NpYmxlICIKKyAgICAgICAgICAgICAgICAgICAgICJiYW5kd2lkdGgvd2F0ZXJt YXJrIGFuZCBzaW1pbGFyIHByb2JsZW1zICIpOworCisjaWZuZGVmIERSTV9DQVBfQ1VSU09SX1dJ RFRICisjZGVmaW5lIERSTV9DQVBfQ1VSU09SX1dJRFRIIDB4OAorI2VuZGlmCisjaWZuZGVmIERS TV9DQVBfQ1VSU09SX0hFSUdIVAorI2RlZmluZSBEUk1fQ0FQX0NVUlNPUl9IRUlHSFQgMHg5Cisj ZW5kaWYKKworI2RlZmluZSBOX0JMSVRTIDMKKworI2RlZmluZSBOX0ZPUk1BVFMgMQorc3RhdGlj IGNvbnN0IHVpbnQzMl90IGZvcm1hdHNbTl9GT1JNQVRTXSA9IHsKKwlEUk1fRk9STUFUX1hSR0I4 ODg4LAorCS8qCisJICogV2l0aCB0aG9zZSBlbmFibGVkIHdpbGwgdGFrZSBzaWduaWZpY2FudGx5 IG1vcmUgdGltZS4KKwkgKiBBbHNvIG1haW4gdGFzayBvZiB0aGlzIHRlc3QgY2FzZSBpcyBub3Qg dGVzdGluZyB2YXJpb3VzCisJICogZm9ybWF0cywgYnV0IHJhdGhlciBzdHJlc3MgdGhlIGFjdHVh bCBtZW1vcnkvZGJ1ZiBiYW5kd2lkdGgKKwkgKi8KKy8qCisJRFJNX0ZPUk1BVF9SR0I1NjUsCisJ RFJNX0ZPUk1BVF9YUkdCMjEwMTAxMCwKKyovCit9OworCisjZGVmaW5lIE5fVElMSU5HX01FVEhP RFMgMQorc3RhdGljIGNvbnN0IHVpbnQ2NF90IHRpbGluZ3NbTl9USUxJTkdfTUVUSE9EU10gPSB7 CisJRFJNX0ZPUk1BVF9NT0RfTElORUFSLAorCS8qCisJICogV2l0aCB0aG9zZSBlbmFibGVkIHdp bGwgdGFrZSBzaWduaWZpY2FudGx5IG1vcmUgdGltZS4KKwkgKiBBbHNvIG1haW4gdGFzayBvZiB0 aGlzIHRlc3QgY2FzZSBpcyBub3QgdGVzdGluZyB2YXJpb3VzCisJICogZm9ybWF0cywgYnV0IHJh dGhlciBzdHJlc3MgdGhlIGFjdHVhbCBtZW1vcnkvZGJ1ZiBiYW5kd2lkdGgKKwkgKi8KKy8qCisJ STkxNV9GT1JNQVRfTU9EX1hfVElMRUQsCisJSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQsCisqLwor fTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmZvcm1hdF9zdHIoaW50IGZvcm1hdF9pbmRleCkKK3sK Kwlzd2l0Y2ggKGZvcm1hdHNbZm9ybWF0X2luZGV4XSkgeworCWNhc2UgRFJNX0ZPUk1BVF9SR0I1 NjU6CisJCXJldHVybiAicmdiNTY1IjsKKwljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6CisJCXJl dHVybiAieHJnYjg4ODgiOworCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMjEwMTAxMDoKKwkJcmV0dXJu ICJ4cmdiMjEwMTAxMCI7CisJZGVmYXVsdDoKKwkJaWd0X2Fzc2VydChmYWxzZSk7CisJfQorfQor CitzdGF0aWMgY29uc3QgY2hhciAqdGlsaW5nX3N0cihpbnQgdGlsaW5nX2luZGV4KQoreworCXN3 aXRjaCAodGlsaW5nc1t0aWxpbmdfaW5kZXhdKSB7CisJY2FzZSBEUk1fRk9STUFUX01PRF9MSU5F QVI6CisJCXJldHVybiAidW50aWxlZCI7CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRDoK KwkJcmV0dXJuICJ4dGlsZWQiOworCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQ6CisJCXJl dHVybiAieXRpbGVkIjsKKwlkZWZhdWx0OgorCQlpZ3RfYXNzZXJ0KGZhbHNlKTsKKwl9Cit9CisK KworI2RlZmluZSBNQVhfQ09SRVMgOAorI2RlZmluZSBNQVhfUExBTkVTIDE2CisKK3N0cnVjdCBk YXRhOworCitzdHJ1Y3QgdGhyZWFkX2NvbnRleHQgeworCXN0cnVjdCBkYXRhICpkYXRhOworCWlu dCBpZDsKKwl2b2lkICpidWYxOworCXZvaWQgKmJ1ZjI7Cit9OworCitzdHJ1Y3QgcmVjdCB7CisJ aW50IHg7CisJaW50IHk7CisJaW50IHc7CisJaW50IGg7Cit9OworCitzdHJ1Y3QgZ3B1X2NvbnRl eHQgeworCXN0cnVjdCBkYXRhICpkYXRhOworCWludCBwaXBlOworCWludCBjb2xvcjsKKwlpbnQg bnVtX3JlY3RhbmdsZXM7CisJc3RydWN0IGlndF9mYiAqZmJfcHRyOworCXN0cnVjdCByZWN0IGJs dF9yZWN0OworCXN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2g7Cit9OworCitlbnVtIHsK KwlSVU5OSU5HLAorCVNUT1BQRUQsCisJUEFVU0VELAorCUxBU1RfU1RBVEUgPSBQQVVTRUQKK30g dGhyZWFkX3N0YXRlOworCitzdHJ1Y3QgZGF0YSB7CisJaW50IGRybV9mZDsKKwlpZ3RfZGlzcGxh eV90IGRpc3BsYXk7CisJaW50IG51bV9wbGFuZXNbSUdUX01BWF9QSVBFU107CisJdWludDMyX3Qg Zm9ybWF0OworCXVpbnQ2NF90IG1vZGlmaWVyOworCXVpbnQzMl90IGRldmlkOworCWRybV9pbnRl bF9idWZtZ3IgKmJ1Zm1ncjsKKwlkcm1Nb2RlTW9kZUluZm8gKmxhc3RfbW9kZVtJR1RfTUFYX1BJ UEVTXTsKKwlzdHJ1Y3QgaWd0X2ZiIGZiW0lHVF9NQVhfUElQRVMgKiBNQVhfUExBTkVTXTsKKwlz dHJ1Y3QgaWd0X2ZiIGN1cnNvcl9mYltJR1RfTUFYX1BJUEVTXTsKKwlwdGhyZWFkX3QgY3B1X3Ro cmVhZFtNQVhfQ09SRVNdOworCXB0aHJlYWRfdCBncHVfdGhyZWFkW0lHVF9NQVhfUElQRVNdOwor CWJvb2wgY3B1X3RocmVhZF9zdG9wW01BWF9DT1JFU107CisJaW50IGdwdV90aHJlYWRfc3RhdGVb SUdUX01BWF9QSVBFU107CisJc2VtX3QgZ3B1X3RocmVhZF9wYXVzZV9hY2tbSUdUX01BWF9QSVBF U107CisJc3RydWN0IHRocmVhZF9jb250ZXh0IGNwdV9jb250ZXh0W01BWF9DT1JFU107CisJc3Ry dWN0IGdwdV9jb250ZXh0IGdwdV9jb250ZXh0W0lHVF9NQVhfUElQRVNdOworCWRybU1vZGVNb2Rl SW5mbyAqaGlnaGVzdF9tb2RlW0lHVF9NQVhfUElQRVNdOworCWRybU1vZGVDb25uZWN0b3JQdHIg KmNvbm5lY3RvcnM7CisJZHJtTW9kZVJlcyAqbW9kZV9yZXNvdXJjZXM7CisJaW50IG51bWJlcl9v Zl9jb3JlczsKKwlpZ3RfcGlwZV9jcmNfdCAqcGlwZV9jcmNbSUdUX01BWF9QSVBFU107Cit9Owor CitzdGF0aWMgdm9pZCBzdG9wX2dwdV90aHJlYWRzKHN0cnVjdCBkYXRhICpkYXRhKTsKK3N0YXRp YyB2b2lkIHN0YXJ0X2dwdV90aHJlYWRzKHN0cnVjdCBkYXRhICpkYXRhKTsKKworc3RydWN0IGJh c2VfY3JjIHsKKwlib29sIHNldDsKKwlpZ3RfY3JjX3QgY3JjOworfTsKKworI2RlZmluZSBCVUZf U0laRSAxMjgqMTAyNCoxMDI0CisKK3N0YXRpYyB2b2lkICpjcHVfbG9hZCh2b2lkICpkKQorewor CWNoYXIgKmJ1ZjEsICpidWYyOworCXN0cnVjdCB0aHJlYWRfY29udGV4dCAqY29udGV4dCA9IChz dHJ1Y3QgdGhyZWFkX2NvbnRleHQgKilkOworCXN0cnVjdCBkYXRhICpkYXRhID0gY29udGV4dC0+ ZGF0YTsKKworCWJ1ZjEgPSBjb250ZXh0LT5idWYxOworCWJ1ZjIgPSBjb250ZXh0LT5idWYyOwor CisJZGF0YS0+Y3B1X3RocmVhZF9zdG9wW2NvbnRleHQtPmlkXSA9IGZhbHNlOworCisJaWd0X2lu Zm8oIkNQVSB0aHJlYWQgY3B1IGlkICVkIHN0YXJ0XG4iLCBjb250ZXh0LT5pZCk7CisKKwkvKiBK dXN0IHRvIG1ha2UgQ1BVIGJ1c3kuLi4gKi8KKwl3aGlsZSghZGF0YS0+Y3B1X3RocmVhZF9zdG9w W2NvbnRleHQtPmlkXSkgeworCQltZW1jcHkoYnVmMSwgYnVmMiwgQlVGX1NJWkUpOworCQltZW1j cHkoYnVmMiwgYnVmMSwgQlVGX1NJWkUpOworCX0KKworCWlndF9pbmZvKCJDUFUgdGhyZWFkIGNw dSBpZCAlZCBzdG9wXG4iLCBjb250ZXh0LT5pZCk7CisKKwlyZXR1cm4gTlVMTDsKK30KKworCitz dGF0aWMgdm9pZCBzY3JhdGNoX2J1Zl9pbml0KHN0cnVjdCBpZ3RfYnVmICpidWYsCisJCQkgICAg IGRybV9pbnRlbF9ibyAqYm8sIGludCB3aWR0aCwKKwkJCSAgICAgaW50IGhlaWdodCwgaW50IHN0 cmlkZSwgaW50IHRpbGluZywgaW50IGJwcCkKK3sKKwlidWYtPmJvID0gYm87CisJYnVmLT5zdHJp ZGUgPSBzdHJpZGU7CisJYnVmLT50aWxpbmcgPSB0aWxpbmc7CisJYnVmLT5zaXplID0gd2lkdGgg KiBoZWlnaHQgKiBicHAgLyA4OworCWJ1Zi0+YnBwID0gYnBwOworfQorCitzdGF0aWMgdm9pZCBm aWxsX2dwdShzdHJ1Y3QgZ3B1X2NvbnRleHQgKmNvbnRleHQsIGNvbnN0IHN0cnVjdCBpZ3RfYnVm ICpkc3QsCisJCSAgICAgdW5zaWduZWQgaW50IHgsIHVuc2lnbmVkIGludCB5LAorCQkgICAgIHVu c2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQgaW50IGhlaWdodCwKKwkJICAgICB1aW50OF90IGNv bG9yKQoreworCXN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2ggPSBOVUxMOworCWlndF9m aWxsZnVuY190IGdwZ3B1X2ZpbGwgPSBOVUxMOworCXN0cnVjdCBkYXRhICpkYXRhID0gY29udGV4 dC0+ZGF0YTsKKworCWdwZ3B1X2ZpbGwgPSBpZ3RfZ2V0X2dwZ3B1X2ZpbGxmdW5jKGRhdGEtPmRl dmlkKTsKKworCWlndF9yZXF1aXJlX2YoZ3BncHVfZmlsbCwKKwkgICAgICAgICAgICAgICJubyBn cGdwdS1maWxsIGZ1bmN0aW9uXG4iKTsKKworCWJhdGNoID0gY29udGV4dC0+YmF0Y2g7CisKKwln cGdwdV9maWxsKGJhdGNoLCBkc3QsIHgsIHksCisJCSAgIHdpZHRoLAorCQkgICBoZWlnaHQsCisJ CSAgIGNvbG9yKTsKK30KKworCitzdGF0aWMgdm9pZCAqZ3B1X2xvYWQodm9pZCAqcHRyKQorewor CXN0cnVjdCBncHVfY29udGV4dCAqY29udGV4dCA9IChzdHJ1Y3QgZ3B1X2NvbnRleHQgKilwdHI7 CisJc3RydWN0IGlndF9idWYgZHN0OworCXN0cnVjdCBkYXRhICpkYXRhID0gY29udGV4dC0+ZGF0 YTsKKwlpbnQgcGlwZSA9IGNvbnRleHQtPnBpcGU7CisJZHJtX2ludGVsX2JvICpibyA9IE5VTEw7 CisJc3RydWN0IGlndF9mYiBmYiwgKmZiX3B0ciA9IE5VTEwsICpsYXN0X2ZiX3B0ciA9IE5VTEw7 CisJaW50IHJlY3RfZGl2aXNvcjsKKwlpbnQgcmVjdF93aWR0aDsKKwlpbnQgcmVjdF9oZWlnaHQ7 CisJaW50IGZyYW1lX3dpZHRoOworCWludCBmcmFtZV9oZWlnaHQ7CisJaW50IGJ5dGVzX3Blcl9w aXhlbDsKKwlkcm1Nb2RlTW9kZUluZm8gKm1vZGU7CisJaW50IGZyYW1lID0gMDsKKwlpbnQgeCwg eTsKKwlpbnQgbGFzdF9zdGF0ZSA9IC0xOworCWludCByZWN0OworCisJbW9kZSA9IGRhdGEtPmhp Z2hlc3RfbW9kZVtwaXBlXTsKKwlpZiAoIW1vZGUpCisJCXJldHVybiBOVUxMOworCisJaWd0X2Ny ZWF0ZV9jb2xvcl9wYXR0ZXJuX2ZiKGRhdGEtPmRybV9mZCwgbW9kZS0+aGRpc3BsYXksIG1vZGUt PnZkaXNwbGF5LAorCQkJCSAgICBEUk1fRk9STUFUX1hSR0I4ODg4LAorCQkJCSAgICBEUk1fRk9S TUFUX01PRF9MSU5FQVIsCisJCQkJICAgIDAuMCwgMS4wLCAwLjAsICZmYik7CisKKwlpZ3RfaW5m bygiR1BVIHRocmVhZCBwaXBlICVkIHN0YXJ0XG4iLCBwaXBlKTsKKwl3aGlsZSAoZGF0YS0+Z3B1 X3RocmVhZF9zdGF0ZVtwaXBlXSAhPSBTVE9QUEVEKSB7CisJCWlmIChsYXN0X3N0YXRlICE9IGRh dGEtPmdwdV90aHJlYWRfc3RhdGVbcGlwZV0pIHsKKwkJCWxhc3Rfc3RhdGUgPSBkYXRhLT5ncHVf dGhyZWFkX3N0YXRlW3BpcGVdOworCQkJc2VtX3Bvc3QoJmRhdGEtPmdwdV90aHJlYWRfcGF1c2Vf YWNrW3BpcGVdKTsKKwkJfQorCQlpZiAoZGF0YS0+Z3B1X3RocmVhZF9zdGF0ZVtwaXBlXSA9PSBQ QVVTRUQpIHsKKwkJCXNsZWVwKDApOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoIWNvbnRl eHQtPmZiX3B0cikgeworCQkJZmJfcHRyID0gJmZiOworCQl9IGVsc2UgeworCQkJZmJfcHRyID0g Y29udGV4dC0+ZmJfcHRyOworCQl9CisKKwkJaWYgKGxhc3RfZmJfcHRyICE9IGZiX3B0cikgewor CQkJZnJhbWVfd2lkdGggPSBmYl9wdHItPndpZHRoOworCQkJZnJhbWVfaGVpZ2h0ID0gZmJfcHRy LT5oZWlnaHQ7CisJCQlieXRlc19wZXJfcGl4ZWwgPSBmYl9wdHItPnBsYW5lX2JwcFswXSAvIDg7 CisJCQlibyA9IGdlbV9oYW5kbGVfdG9fbGliZHJtX2JvKGRhdGEtPmJ1Zm1nciwgZGF0YS0+ZHJt X2ZkLCAiIiwKKwkJCQkJCSAgICAgZmJfcHRyLT5nZW1faGFuZGxlKTsKKwkJCWlndF9hc3NlcnQo Ym8pOworCisJCQlzY3JhdGNoX2J1Zl9pbml0KCZkc3QsIGJvLCBmcmFtZV93aWR0aCwgZnJhbWVf aGVpZ2h0LAorCQkJCQkgZmJfcHRyLT5zdHJpZGVzWzBdLCBmYl9wdHItPm1vZGlmaWVyLAorCQkJ CQkgZmJfcHRyLT5wbGFuZV9icHBbMF0pOworCQl9CisJCWxhc3RfZmJfcHRyID0gZmJfcHRyOwor CisJCS8qIEZpbGwgdGhlIGZyYW1lYnVmZmVyIHVzaW5nIHNoYWRlciAqLworCQl4ID0gMDsKKwkJ eSA9IGZyYW1lX2hlaWdodCAvIDQ7CisKKwkJZmlsbF9ncHUoY29udGV4dCwgJmRzdCwgeCwgeSwg KGZyYW1lX3dpZHRoICogYnl0ZXNfcGVyX3BpeGVsKSwKKwkJCSBmcmFtZV9oZWlnaHQgLyAyLAor CQkJIGNvbnRleHQtPmNvbG9yKTsKKworCQlyZWN0ID0gMDsKKworCQl3aGlsZSAocmVjdCA8IGNv bnRleHQtPm51bV9yZWN0YW5nbGVzKSB7CisJCQkvKiBkaXZpZGUgYXQgbGVhc3QgYnkgMiBhbmQg dXAgdG8gOCAqLworCQkJaW50IHhfcmFuZCwgeV9yYW5kOworCQkJcmVjdF9kaXZpc29yID0gMSA8 PCAoaGFyc19wZXRydXNrYV9mNTRfMV9yYW5kb21fdW5zYWZlX21heCgzKSArIDEpOworCisJCQly ZWN0X3dpZHRoID0gZnJhbWVfd2lkdGggLyByZWN0X2Rpdmlzb3I7CisJCQlyZWN0X2hlaWdodCA9 IGZyYW1lX2hlaWdodCAvIHJlY3RfZGl2aXNvcjsKKworCQkJeF9yYW5kID0gaGFyc19wZXRydXNr YV9mNTRfMV9yYW5kb21fdW5zYWZlX21heChmcmFtZV93aWR0aCAtIHJlY3Rfd2lkdGgpOworCQkJ eV9yYW5kID0gaGFyc19wZXRydXNrYV9mNTRfMV9yYW5kb21fdW5zYWZlX21heChmcmFtZV9oZWln aHQvMiAtIHJlY3RfaGVpZ2h0KTsKKworCQkJY29udGV4dC0+Ymx0X3JlY3QueCA9IHggKyB4X3Jh bmQ7CisJCQljb250ZXh0LT5ibHRfcmVjdC55ID0geSArIHlfcmFuZDsKKworCQkJLyogRmlsbCBy YW5kb21seSBzaXplZCBhbmQgcG9zaXRpb25lZCByZWN0YW5nbGVzICovCisJCQlmaWxsX2dwdShj b250ZXh0LCAmZHN0LCBjb250ZXh0LT5ibHRfcmVjdC54LCBjb250ZXh0LT5ibHRfcmVjdC55LAor CQkJCSAoKGNvbnRleHQtPmJsdF9yZWN0LnggKyByZWN0X3dpZHRoKSAqIGJ5dGVzX3Blcl9waXhl bCksCisJCQkJIGNvbnRleHQtPmJsdF9yZWN0LnkgKyByZWN0X2hlaWdodCwKKwkJCQkgY29udGV4 dC0+Y29sb3IgKyAweDgwKTsKKworCQkJY29udGV4dC0+Y29sb3IgKz0gNDsKKwkJCWdlbV9ib19i dXN5KGRhdGEtPmRybV9mZCwgZmJfcHRyLT5nZW1faGFuZGxlKTsKKworCQkJKytyZWN0OworCQl9 CisJCWZyYW1lKys7CisJfQorCisJZHJtX2ludGVsX2JvX3VubWFwKGJvKTsKKwlkcm1faW50ZWxf Ym9fdW5yZWZlcmVuY2UoYm8pOworCisJaWd0X3JlbW92ZV9mYihkYXRhLT5kaXNwbGF5LmRybV9m ZCwgJmZiKTsKKworCWlndF9pbmZvKCJHUFUgdGhyZWFkIHBpcGUgJWQgc3RvcC4gRnJhbWVzIHJl bmRlcmVkOiAlZFxuIiwgcGlwZSwgZnJhbWUpOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRp YyBpbmxpbmUgdWludDMyX3QgcGlwZV9zZWxlY3QoZW51bSBwaXBlIHBpcGUpCit7CisJaWYgKHBp cGUgPiAxKQorCQlyZXR1cm4gcGlwZSA8PCBEUk1fVkJMQU5LX0hJR0hfQ1JUQ19TSElGVDsKKwll bHNlIGlmIChwaXBlID4gMCkKKwkJcmV0dXJuIERSTV9WQkxBTktfU0VDT05EQVJZOworCWVsc2UK KwkJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBnZXRfdmJsYW5rKGludCBmZCwgZW51 bSBwaXBlIHBpcGUsIHVuc2lnbmVkIGZsYWdzKQoreworCXVuaW9uIGRybV93YWl0X3ZibGFuayB2 Ymw7CisKKwltZW1zZXQoJnZibCwgMCwgc2l6ZW9mKHZibCkpOworCXZibC5yZXF1ZXN0LnR5cGUg PSBEUk1fVkJMQU5LX1JFTEFUSVZFIHwgcGlwZV9zZWxlY3QocGlwZSkgfCBmbGFnczsKKwlpZiAo ZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9XQUlUX1ZCTEFOSywgJnZibCkpCisJCXJldHVybiAwOwor CisJcmV0dXJuIHZibC5yZXBseS5zZXF1ZW5jZTsKK30KKworCitzdGF0aWMgaW50IHBpcGVfc3Ry ZXNzKHN0cnVjdCBkYXRhICpkYXRhLCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwKKwkJICAgICAgIGVu dW0gcGlwZSBwaXBlLCBkcm1Nb2RlTW9kZUluZm8gKm1vZGUpCit7CisJaWd0X3BsYW5lX3QgKnBs YW5lOworCWludCBpOworCWludCByZXQ7CisJYm9vbCBuZXdfbW9kZSA9IGZhbHNlOworCXVpbnQ2 NF90IGN1cnNvcl93aWR0aCwgY3Vyc29yX2hlaWdodDsKKworCWRvX29yX2RpZShkcm1HZXRDYXAo ZGF0YS0+ZHJtX2ZkLCBEUk1fQ0FQX0NVUlNPUl9XSURUSCwgJmN1cnNvcl93aWR0aCkpOworCWRv X29yX2RpZShkcm1HZXRDYXAoZGF0YS0+ZHJtX2ZkLCBEUk1fQ0FQX0NVUlNPUl9IRUlHSFQsICZj dXJzb3JfaGVpZ2h0KSk7CisKKwlpZiAoZGF0YS0+bGFzdF9tb2RlW3BpcGVdICE9IG1vZGUpIHsK KwkJaWd0X291dHB1dF9vdmVycmlkZV9tb2RlKG91dHB1dCwgbW9kZSk7CisJCWlndF9vdXRwdXRf c2V0X3BpcGUob3V0cHV0LCBwaXBlKTsKKworCQlyZXQgPSBpZ3RfZGlzcGxheV90cnlfY29tbWl0 X2F0b21pYygmZGF0YS0+ZGlzcGxheSwKKwkJCQkJCSAgICBEUk1fTU9ERV9BVE9NSUNfVEVTVF9P TkxZIHwKKwkJCQkJCSAgICBEUk1fTU9ERV9BVE9NSUNfQUxMT1dfTU9ERVNFVCwgTlVMTCk7CisJ CWlmIChyZXQpIHsKKwkJCWlndF93YXJuKCJDb3VsZCBub3QgY29tbWl0IG1vZGU6IFxuIik7CisJ CQlrbXN0ZXN0X2R1bXBfbW9kZShtb2RlKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlpZ3Rf ZGlzcGxheV9jb21taXQyKCZkYXRhLT5kaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKKwkJZGF0YS0+ bGFzdF9tb2RlW3BpcGVdID0gbW9kZTsKKwkJbmV3X21vZGUgPSB0cnVlOworCX0KKworCS8qCisJ ICogTG9va3MgbGlrZSB3ZSBjYW4ndCBoYXZlIHBsYW5lcyBvbiB0aGF0IHBpcGUgYXQgYWxsCisJ ICovCisJaWYgKCFkYXRhLT5udW1fcGxhbmVzW3BpcGVdKQorCQlyZXR1cm4gMDsKKworCWlmICgh bW9kZSkKKwkJbW9kZSA9IGlndF9vdXRwdXRfZ2V0X21vZGUob3V0cHV0KTsKKworCWlmIChuZXdf bW9kZSkgeworCQlpID0gMDsKKwkJZm9yX2VhY2hfcGxhbmVfb25fcGlwZSgmZGF0YS0+ZGlzcGxh eSwgcGlwZSwgcGxhbmUpIHsKKwkJCWludCBwbGFuZV93aWR0aCwgcGxhbmVfaGVpZ2h0OworCQkJ aWYgKHBsYW5lLT50eXBlID09IERSTV9QTEFORV9UWVBFX0NVUlNPUikgeworCQkJCWlndF9wbGFu ZV9zZXRfZmIocGxhbmUsICZkYXRhLT5jdXJzb3JfZmJbcGlwZV0pOworCisJCQkJaWd0X2ZiX3Nl dF9zaXplKCZkYXRhLT5jdXJzb3JfZmJbcGlwZV0sCisJCQkJCQlwbGFuZSwgY3Vyc29yX3dpZHRo LCBjdXJzb3JfaGVpZ2h0KTsKKworCQkJCWlndF9wbGFuZV9zZXRfc2l6ZShwbGFuZSwgY3Vyc29y X3dpZHRoLCBjdXJzb3JfaGVpZ2h0KTsKKwkJCQlwbGFuZV93aWR0aCA9IGN1cnNvcl93aWR0aDsK KwkJCQlwbGFuZV9oZWlnaHQgPSBjdXJzb3JfaGVpZ2h0OworCQkJfSBlbHNlIHsKKwkJCQlpZ3Rf cGxhbmVfc2V0X2ZiKHBsYW5lLCAmZGF0YS0+ZmJbcGlwZSAqIE1BWF9QTEFORVMgKyBpXSk7CisJ CQkJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihwbGFuZSwgMCwgMCk7CisKKwkJCQlpZ3RfZmJfc2V0 X3NpemUoJmRhdGEtPmZiW3BpcGUgKiBNQVhfUExBTkVTICsgaV0sCisJCQkJCQlwbGFuZSwgbW9k ZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5KTsKKworCQkJCWlndF9wbGFuZV9zZXRfc2l6ZShw bGFuZSwgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5KTsKKwkJCQlwbGFuZV93aWR0aCA9 IG1vZGUtPmhkaXNwbGF5OworCQkJCXBsYW5lX2hlaWdodCA9IG1vZGUtPnZkaXNwbGF5OworCQkJ fQorCisJCQlyZXQgPSBpZ3RfZGlzcGxheV90cnlfY29tbWl0X2F0b21pYygmZGF0YS0+ZGlzcGxh eSwKKwkJCQkJCQkgICAgRFJNX01PREVfQVRPTUlDX1RFU1RfT05MWSB8CisJCQkJCQkJICAgIERS TV9NT0RFX0FUT01JQ19BTExPV19NT0RFU0VULAorCQkJCQkJCSAgICBOVUxMKTsKKworCQkJd2hp bGUgKHJldCkgeworCQkJCWlmIChwbGFuZV93aWR0aCA8PSBjdXJzb3Jfd2lkdGggfHwgcGxhbmVf aGVpZ2h0IDw9IGN1cnNvcl9oZWlnaHQpCisJCQkJCWJyZWFrOworCQkJCXBsYW5lX3dpZHRoIC89 IDI7CisJCQkJcGxhbmVfaGVpZ2h0IC89IDI7CisJCQkJaWd0X3BsYW5lX3NldF9zaXplKHBsYW5l LCBwbGFuZV93aWR0aCwgcGxhbmVfaGVpZ2h0KTsKKworCQkJCWlndF9pbmZvKCJSZWR1Y2VkIHBs YW5lICVkIHNpemUgdG8gJWR4JWRcbiIsCisJCQkJICAgICAgICAgcGxhbmUtPmluZGV4LCBwbGFu ZV93aWR0aCwgcGxhbmVfaGVpZ2h0KTsKKworCQkJCXJldCA9IGlndF9kaXNwbGF5X3RyeV9jb21t aXRfYXRvbWljKCZkYXRhLT5kaXNwbGF5LAorCQkJCQkJCQkgICAgRFJNX01PREVfQVRPTUlDX1RF U1RfT05MWSB8CisJCQkJCQkJCSAgICBEUk1fTU9ERV9BVE9NSUNfQUxMT1dfTU9ERVNFVCwgTlVM TCk7CisJCQl9CisJCQlpZiAocmV0KSB7CisJCQkJaWd0X2luZm8oIlBsYW5lICVkIHBpcGUgJWQg dHJ5IGNvbW1pdCBmYWlsZWQsIGV4aXRpbmdcbiIsIGksIHBpcGUpOworCQkJCWRhdGEtPm51bV9w bGFuZXNbcGlwZV0gPSBpOworCQkJCWlndF9pbmZvKCJNYXggbnVtIHBsYW5lcyBmb3IgcGlwZSAl ZCBzZXQgdG8gJWRcbiIsIHBpcGUsIGkpOworCQkJCS8qCisJCQkJICogV2UgaGF2ZSBub3cgZGV0 ZXJtaW5lZCBtYXggYW1vdW50IG9mIGZ1bGwgc2l6ZWQgcGxhbmVzLCB3ZSB3aWxsIGp1c3QKKwkJ CQkgKiBrZWVwIGl0IGluIG1pbmQgYW5kIGJlIHNtYXJ0ZXIgbmV4dCB0aW1lLiBBbHNvIGxldHMg cmVtb3ZlIHVubmVlZGVkIGZicy4KKwkJCQkgKiBEb24ndCBkZXN0cm95IGN1cnNvcl9mYiBhcyB3 aWxsIHRha2UgY2FyZSBhYm91dCBpdCBhdCB0aGUgZW5kLgorCQkJCSAqLworCQkJCWlndF9wbGFu ZV9zZXRfZmIocGxhbmUsIE5VTEwpOworCQkJCXdoaWxlIChpIDwgTUFYX1BMQU5FUykgeworCQkJ CQlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmRpc3BsYXkuZHJtX2ZkLAorCQkJCQkJICAgICAgJmRhdGEt PmZiW3BpcGUgKiBNQVhfUExBTkVTICsgaV0pOworCQkJCQlkYXRhLT5mYltwaXBlICogTUFYX1BM QU5FUyArIGldLmZiX2lkID0gMDsKKwkJCQkJaSsrOworCQkJCX0KKwkJCQlpID0gZGF0YS0+bnVt X3BsYW5lc1twaXBlXTsKKwkJCX0KKwkJCWlmICgrK2kgPj0gZGF0YS0+bnVtX3BsYW5lc1twaXBl XSkKKwkJCQlicmVhazsKKwkJfQorCQlpZ3RfZGlzcGxheV9jb21taXQyKCZkYXRhLT5kaXNwbGF5 LCBDT01NSVRfQVRPTUlDKTsKKwl9CisKKworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX3U2 NCBnZXRfbW9kZV9kYXRhX3JhdGUoZHJtTW9kZU1vZGVJbmZvICptb2RlKQoreworCV9fdTY0IGRh dGFfcmF0ZSA9IChfX3U2NCltb2RlLT5oZGlzcGxheSAqIChfX3U2NCltb2RlLT52ZGlzcGxheSAq IChfX3U2NCltb2RlLT52cmVmcmVzaDsKKworCXJldHVybiBkYXRhX3JhdGU7Cit9CisKKworc3Rh dGljIGRybU1vZGVNb2RlSW5mbyAqIGZpbmRfaGlnaGVzdF9tb2RlKGRybU1vZGVDb25uZWN0b3Ig KmNvbm5lY3RvcikKK3sKKwlkcm1Nb2RlTW9kZUluZm8gKmhpZ2hlc3RfbW9kZSA9IE5VTEw7CisJ aW50IGo7CisKKwlmb3IgKGogPSAwOyBqIDwgY29ubmVjdG9yLT5jb3VudF9tb2RlczsgaisrKSB7 CisJCWlmICghaGlnaGVzdF9tb2RlKSB7CisJCQloaWdoZXN0X21vZGUgPSAmY29ubmVjdG9yLT5t b2Rlc1tqXTsKKwkJfSBlbHNlIGlmIChjb25uZWN0b3ItPm1vZGVzW2pdLnZkaXNwbGF5ICYmIGNv bm5lY3Rvci0+bW9kZXNbal0uaGRpc3BsYXkpIHsKKwkJCV9fdTY0IGhpZ2hlc3RfZGF0YV9yYXRl ID0gZ2V0X21vZGVfZGF0YV9yYXRlKGhpZ2hlc3RfbW9kZSk7CisJCQlfX3U2NCBkYXRhX3JhdGUg PSBnZXRfbW9kZV9kYXRhX3JhdGUoJmNvbm5lY3Rvci0+bW9kZXNbal0pOworCQkJaWYgKGhpZ2hl c3RfZGF0YV9yYXRlIDwgZGF0YV9yYXRlKQorCQkJCWhpZ2hlc3RfbW9kZSA9ICZjb25uZWN0b3It Pm1vZGVzW2pdOworCQl9CisJfQorCisJcmV0dXJuIGhpZ2hlc3RfbW9kZTsKK30KKwordHlwZWRl ZiBkcm1Nb2RlQ29ubmVjdG9yICogZHJtTW9kZUNvbm5lY3RvclB0cjsKKworc3RhdGljIHZvaWQg ZmlsbF9jb25uZWN0b3JfdG9fcGlwZV9hcnJheShzdHJ1Y3QgZGF0YSAqZGF0YSwKKwkJCQkJIGRy bU1vZGVSZXMgKm1vZGVfcmVzb3VyY2VzLAorCQkJCQkgZHJtTW9kZUNvbm5lY3RvclB0ciAqY29u bmVjdG9ycykKK3sKKwlpbnQgcGlwZSA9IDA7CisJaW50IGk7CisKKwltZW1zZXQoY29ubmVjdG9y cywgMCwgc2l6ZW9mKGRybU1vZGVDb25uZWN0b3JQdHIpICoKKwkgICAgICAgbW9kZV9yZXNvdXJj ZXMtPmNvdW50X2Nvbm5lY3RvcnMpOworCisJaWd0X2luZm8oIkdvdCAlZCBjb25uZWN0b3JzXG4i LCBtb2RlX3Jlc291cmNlcy0+Y291bnRfY29ubmVjdG9ycyk7CisKKwlmb3IgKGkgPSAwOyBpIDwg bW9kZV9yZXNvdXJjZXMtPmNvdW50X2Nvbm5lY3RvcnM7IGkrKykgeworCQlkcm1Nb2RlQ29ubmVj dG9yICpjb25uZWN0b3I7CisKKwkJY29ubmVjdG9yID0gZHJtTW9kZUdldENvbm5lY3RvcihkYXRh LT5kcm1fZmQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9yZXNvdXJj ZXMtPmNvbm5lY3RvcnNbaV0pOworCisJCWlmICghY29ubmVjdG9yKSB7CisJCQlpZ3Rfd2Fybigi Y291bGQgbm90IGdldCBjb25uZWN0b3IgJWk6ICVzXG4iLAorCQkJICAgICAgICAgbW9kZV9yZXNv dXJjZXMtPmNvbm5lY3RvcnNbaV0sIHN0cmVycm9yKGVycm5vKSk7CisJCQljb250aW51ZTsKKwkJ fQorCisJCWlmIChjb25uZWN0b3ItPmNvbm5lY3Rpb24gPT0gRFJNX01PREVfQ09OTkVDVEVEKSB7 CisJCQlpZ3RfaW5mbygiQ29ubmVjdG9yICVkIGNvbm5lY3RlZCB0byBwaXBlICVkXG4iLCBpLCBw aXBlKTsKKwkJCWNvbm5lY3RvcnNbcGlwZV0gPSAoZHJtTW9kZUNvbm5lY3RvclB0ciljb25uZWN0 b3I7CisJCQkrK3BpcGU7CisJCQlpZiAocGlwZSA9PSBJR1RfTUFYX1BJUEVTKQorCQkJCWJyZWFr OworCQl9IGVsc2UgeworCQkJaWd0X2luZm8oIkNvbm5lY3RvciAlZCBjb25uZWN0aW9uIHN0YXR1 cyAlZFxuIiwKKwkJCSAgICAgICAgIGksIGNvbm5lY3Rvci0+Y29ubmVjdGlvbik7CisJCQlkcm1N b2RlRnJlZUNvbm5lY3Rvcihjb25uZWN0b3IpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBy ZWxlYXNlX2Nvbm5lY3RvcnMoZHJtTW9kZUNvbm5lY3RvclB0ciAqY29ubmVjdG9ycykKK3sKKwlp bnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgSUdUX01BWF9QSVBFUzsgaSsrKSB7CisJCWlmIChjb25u ZWN0b3JzW2ldKQorCQkJZHJtTW9kZUZyZWVDb25uZWN0b3IoY29ubmVjdG9yc1tpXSk7CisJfQor CWZyZWUoY29ubmVjdG9ycyk7Cit9CisKKyNkZWZpbmUgTUlOX0RVUkFUSU9OX1NFQyAzMAorI2Rl ZmluZSBNSU5fSVRFUkFUSU9OUyAyMAorCitzdGF0aWMgdm9pZCBzdHJlc3NfcGlwZXMoc3RydWN0 IGRhdGEgKmRhdGEsIHN0cnVjdCB0aW1lc3BlYyAqc3RhcnQsCisJCQkgc3RydWN0IHRpbWVzcGVj ICplbmQpCit7CisJaW50IHBpcGUgPSAwOworCWludCByZXQgPSAwOworCWlndF9vdXRwdXRfdCAq b3V0cHV0OworCWlndF9jcmNfdCBjcmMsIGNyYzI7CisKKwlmb3JfZWFjaF9jb25uZWN0ZWRfb3V0 cHV0KCZkYXRhLT5kaXNwbGF5LCBvdXRwdXQpIHsKKworCQlpZiAoIWRhdGEtPmhpZ2hlc3RfbW9k ZVtwaXBlXSkKKwkJCWNvbnRpbnVlOworCisJCWlndF9hc3NlcnRfZihkYXRhLT5kaXNwbGF5LnBp cGVzW3BpcGVdLm5fcGxhbmVzIDwgTUFYX1BMQU5FUywKKwkJCSAgICAiQ3VycmVudGx5IHdlIGRv bid0IHN1cHBvcnQgbW9yZSB0aGFuICVkIHBsYW5lcyEiLAorCQkJICAgICBNQVhfUExBTkVTKTsK KworCQlyZXQgPSBwaXBlX3N0cmVzcyhkYXRhLCBvdXRwdXQsIHBpcGUsCisJCQkJIGRhdGEtPmhp Z2hlc3RfbW9kZVtwaXBlXSk7CisJCWlmIChyZXQpCisJCQlicmVhazsKKworCQlpZ3RfcGlwZV9j cmNfc3RhcnQoZGF0YS0+cGlwZV9jcmNbcGlwZV0pOworCisJCWlndF9waXBlX2NyY19nZXRfY3Vy cmVudChkYXRhLT5kaXNwbGF5LmRybV9mZCwgZGF0YS0+cGlwZV9jcmNbcGlwZV0sICZjcmMpOwor CisJCWdldF92YmxhbmsoZGF0YS0+ZGlzcGxheS5kcm1fZmQsIHBpcGUsCisJCQkgICBEUk1fVkJM QU5LX05FWFRPTk1JU1MpOworCisJCWlndF9waXBlX2NyY19nZXRfY3VycmVudChkYXRhLT5kaXNw bGF5LmRybV9mZCwgZGF0YS0+cGlwZV9jcmNbcGlwZV0sICZjcmMyKTsKKworCQlpZ3RfcGlwZV9j cmNfc3RvcChkYXRhLT5waXBlX2NyY1twaXBlXSk7CisKKwkJaWd0X2Fzc2VydF9jcmNfZXF1YWwo JmNyYywgJmNyYzIpOworCisJCSsrcGlwZTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHN0cmVzcyhz dHJ1Y3QgZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3QgdGltZXNwZWMgc3RhcnQsIGVuZDsKKwlpbnQg aXRlcmF0aW9ucyA9IDA7CisJYm9vbCBuZWVkX2NvbnRpbnVlOworCisJaWd0X2dldHRpbWUoJnN0 YXJ0KTsKKworCWRvIHsKKwkJaWd0X2dldHRpbWUoJmVuZCk7CisJCXN0cmVzc19waXBlcyhkYXRh LCAmc3RhcnQsICZlbmQpOworCQlpdGVyYXRpb25zKys7CisJCW5lZWRfY29udGludWUgPQorCQkJ KGludClpZ3RfdGltZV9lbGFwc2VkKCZzdGFydCwgJmVuZCkgPCBNSU5fRFVSQVRJT05fU0VDOwor CX0gd2hpbGUgKChuZWVkX2NvbnRpbnVlIHx8IGl0ZXJhdGlvbnMgPCBNSU5fSVRFUkFUSU9OUykp OworCisKK30KKworc3RhdGljIHZvaWQgc3RhcnRfZ3B1X3RocmVhZHMoc3RydWN0IGRhdGEgKmRh dGEpCit7CisJaW50IGk7CisKKwlpZiAoIWRhdGEtPmRldmlkKSB7CisJCWRhdGEtPmRldmlkID0g aW50ZWxfZ2V0X2RybV9kZXZpZChkYXRhLT5kcm1fZmQpOworCQlpZ3RfcmVxdWlyZV9nZW0oZGF0 YS0+ZHJtX2ZkKTsKKworCQlkYXRhLT5idWZtZ3IgPSBkcm1faW50ZWxfYnVmbWdyX2dlbV9pbml0 KGRhdGEtPmRybV9mZCwgNDA5Nik7CisJCWlndF9hc3NlcnQoZGF0YS0+YnVmbWdyKTsKKwl9CisK Kwlmb3IgKGkgPSAwOyBpIDwgSUdUX01BWF9QSVBFUzsgaSsrKSB7CisJCWlmICghZGF0YS0+aGln aGVzdF9tb2RlW2ldKQorCQkJY29udGludWU7CisJCWRhdGEtPmdwdV9jb250ZXh0W2ldLmRhdGEg PSBkYXRhOworCQlkYXRhLT5ncHVfY29udGV4dFtpXS5waXBlID0gaTsKKwkJZGF0YS0+Z3B1X2Nv bnRleHRbaV0uZmJfcHRyID0gTlVMTDsKKwkJZGF0YS0+Z3B1X2NvbnRleHRbaV0uYmx0X3JlY3Qu eCA9IDA7CisJCWRhdGEtPmdwdV9jb250ZXh0W2ldLmJsdF9yZWN0LnkgPSAwOworCQlkYXRhLT5n cHVfY29udGV4dFtpXS5ibHRfcmVjdC53ID0gMDsKKwkJZGF0YS0+Z3B1X2NvbnRleHRbaV0uYmx0 X3JlY3QuaCA9IDA7CisJCWRhdGEtPmdwdV9jb250ZXh0W2ldLm51bV9yZWN0YW5nbGVzID0gTl9C TElUUzsKKwkJZGF0YS0+Z3B1X3RocmVhZF9zdGF0ZVtpXSA9IFJVTk5JTkc7CisJCWlndF9pbmZv KCJTdGFydGluZyBHUFUgdGhyZWFkICVkXG4iLCBpKTsKKworCQlkYXRhLT5ncHVfY29udGV4dFtp XS5iYXRjaCA9IGludGVsX2JhdGNoYnVmZmVyX2FsbG9jKGRhdGEtPmJ1Zm1nciwKKwkJCQkJCQkJ ICAgICBkYXRhLT5kZXZpZCk7CisKKwkJcHRocmVhZF9jcmVhdGUoJmRhdGEtPmdwdV90aHJlYWRb aV0sIE5VTEwsIGdwdV9sb2FkLAorCQkJICAgICAgICh2b2lkKikmZGF0YS0+Z3B1X2NvbnRleHRb aV0pOworCisJCXNlbV93YWl0KCZkYXRhLT5ncHVfdGhyZWFkX3BhdXNlX2Fja1tpXSk7CisJCWln dF9pbmZvKCJHUFUgdGhyZWFkICVkIHN0YXJ0ZWRcbiIsIGkpOworCX0KK30KKworc3RhdGljIHZv aWQgc3RvcF9ncHVfdGhyZWFkcyhzdHJ1Y3QgZGF0YSAqZGF0YSkKK3sKKwlpbnQgaTsKKworCWZv ciAoaSA9IDA7IGkgPCBJR1RfTUFYX1BJUEVTOyBpKyspIHsKKwkJaWYgKCFkYXRhLT5oaWdoZXN0 X21vZGVbaV0pCisJCQljb250aW51ZTsKKwkJaWd0X2luZm8oIlN0b3BpbmcgR1BVIHRocmVhZCAl ZFxuIiwgaSk7CisJCWRhdGEtPmdwdV90aHJlYWRfc3RhdGVbaV0gPSBTVE9QUEVEOworCQlwdGhy ZWFkX2pvaW4oZGF0YS0+Z3B1X3RocmVhZFtpXSwgTlVMTCk7CisJCWRhdGEtPmdwdV9jb250ZXh0 W2ldLmZiX3B0ciA9IE5VTEw7CisJCWludGVsX2JhdGNoYnVmZmVyX2ZyZWUoZGF0YS0+Z3B1X2Nv bnRleHRbaV0uYmF0Y2gpOworCX0KK30KKworc3RhdGljIHZvaWQgc3RhcnRfY3B1X3RocmVhZHMo c3RydWN0IGRhdGEgKmRhdGEpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+ bnVtYmVyX29mX2NvcmVzOyBpKyspIHsKKwkJZGF0YS0+Y3B1X2NvbnRleHRbaV0uYnVmMSA9IG1h bGxvYyhCVUZfU0laRSk7CisJCWRhdGEtPmNwdV9jb250ZXh0W2ldLmJ1ZjIgPSBtYWxsb2MoQlVG X1NJWkUpOworCQlkYXRhLT5jcHVfY29udGV4dFtpXS5pZCA9IGk7CisJCWRhdGEtPmNwdV9jb250 ZXh0W2ldLmRhdGEgPSBkYXRhOworCQlwdGhyZWFkX2NyZWF0ZSgmZGF0YS0+Y3B1X3RocmVhZFtp XSwgTlVMTCwgY3B1X2xvYWQsCisJCQkgICAgICAgKHZvaWQqKSZkYXRhLT5jcHVfY29udGV4dFtp XSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzdG9wX2NwdV90aHJlYWRzKHN0cnVjdCBkYXRhICpk YXRhKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGRhdGEtPm51bWJlcl9vZl9jb3Jl czsgaSsrKSB7CisJCWRhdGEtPmNwdV90aHJlYWRfc3RvcFtpXSA9IHRydWU7CisJCXB0aHJlYWRf am9pbihkYXRhLT5jcHVfdGhyZWFkW2ldLCBOVUxMKTsKKwkJZnJlZShkYXRhLT5jcHVfY29udGV4 dFtpXS5idWYxKTsKKwkJZnJlZShkYXRhLT5jcHVfY29udGV4dFtpXS5idWYyKTsKKwl9Cit9CisK K3N0YXRpYyB2b2lkIGNyZWF0ZV9mcmFtZWJ1ZmZlcnMoc3RydWN0IGRhdGEgKmRhdGEpCit7CisJ aW50IGksIGo7CisJdWludDY0X3QgY3Vyc29yX3dpZHRoLCBjdXJzb3JfaGVpZ2h0OworCisJZG9f b3JfZGllKGRybUdldENhcChkYXRhLT5kcm1fZmQsIERSTV9DQVBfQ1VSU09SX1dJRFRILCAmY3Vy c29yX3dpZHRoKSk7CisJZG9fb3JfZGllKGRybUdldENhcChkYXRhLT5kcm1fZmQsIERSTV9DQVBf Q1VSU09SX0hFSUdIVCwgJmN1cnNvcl9oZWlnaHQpKTsKKworCWZvciAoaSA9IDA7IGkgPCBJR1Rf TUFYX1BJUEVTOyBpKyspIHsKKwkJaWYgKCFkYXRhLT5oaWdoZXN0X21vZGVbaV0pCisJCQljb250 aW51ZTsKKwkJaWYgKCFkYXRhLT5jdXJzb3JfZmJbaV0uZmJfaWQpIHsKKwkJCWlndF9jcmVhdGVf Y29sb3JfZmIoZGF0YS0+ZHJtX2ZkLAorCQkJCQkgICAgY3Vyc29yX3dpZHRoLCBjdXJzb3JfaGVp Z2h0LAorCQkJCQkgICAgZGF0YS0+Zm9ybWF0LAorCQkJCQkgICAgZGF0YS0+bW9kaWZpZXIsCisJ CQkJCSAgICAxLjAsMC4wLDAuMCwKKwkJCQkJICAgICZkYXRhLT5jdXJzb3JfZmJbaV0pOworCQl9 CisJCWZvciAoaiA9IDA7IGogPCBkYXRhLT5udW1fcGxhbmVzW2ldOyBqKyspIHsKKwkJCWlmICgh ZGF0YS0+ZmJbaSAqIE1BWF9QTEFORVMgKyBqXS5mYl9pZCkgeworCQkJCWlndF9jcmVhdGVfY29s b3JfcGF0dGVybl9mYihkYXRhLT5kcm1fZmQsCisJCQkJCQkJICAgIGRhdGEtPmhpZ2hlc3RfbW9k ZVtpXS0+aGRpc3BsYXksCisJCQkJCQkJICAgIGRhdGEtPmhpZ2hlc3RfbW9kZVtpXS0+dmRpc3Bs YXksCisJCQkJCQkJICAgIGRhdGEtPmZvcm1hdCwKKwkJCQkJCQkgICAgZGF0YS0+bW9kaWZpZXIs CisJCQkJCQkJICAgIDAuMCwgMS4wLCAwLjAsICZkYXRhLT5mYltpICogTUFYX1BMQU5FUyArIGpd KTsKKwkJCX0KKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgZGVzdHJveV9mcmFtZWJ1ZmZlcnMo c3RydWN0IGRhdGEgKmRhdGEpCit7CisJaW50IGksIGo7CisKKwlmb3IgKGkgPSAwOyBpIDwgSUdU X01BWF9QSVBFUzsgaSsrKSB7CisJCWlmICghZGF0YS0+aGlnaGVzdF9tb2RlW2ldKQorCQkJY29u dGludWU7CisJCWZvciAoaiA9IDA7IGogPCBNQVhfUExBTkVTOyBqKyspIHsKKwkJCWlmIChkYXRh LT5mYltpICogTUFYX1BMQU5FUyArIGpdLmZiX2lkKSB7CisJCQkJaWd0X3BsYW5lX3NldF9mYigm ZGF0YS0+ZGlzcGxheS5waXBlc1tpXS5wbGFuZXNbal0sIE5VTEwpOworCQkJCWlndF9yZW1vdmVf ZmIoZGF0YS0+ZGlzcGxheS5kcm1fZmQsICZkYXRhLT5mYltpICogTUFYX1BMQU5FUyArIGpdKTsK KwkJCQlkYXRhLT5mYltpICogTUFYX1BMQU5FUyArIGpdLmZiX2lkID0gMDsKKwkJCX0KKwkJfQor CQlpZiAoZGF0YS0+Y3Vyc29yX2ZiW2ldLmZiX2lkKSB7CisJCQlpZ3RfcmVtb3ZlX2ZiKGRhdGEt PmRpc3BsYXkuZHJtX2ZkLCAmZGF0YS0+Y3Vyc29yX2ZiW2ldKTsKKwkJCWRhdGEtPmN1cnNvcl9m YltpXS5mYl9pZCA9IDA7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHByZXBhcmVfdGVzdChz dHJ1Y3QgZGF0YSAqZGF0YSkKK3sKKwlpbnQgaSxqOworCWludCBudW1fY29ubmVjdG9yczsKKwor CWRhdGEtPm51bWJlcl9vZl9jb3JlcyA9IG1pbihzeXNjb25mKF9TQ19OUFJPQ0VTU09SU19PTkxO KSwgTUFYX0NPUkVTKTsKKworCWZvciAoaSA9IDA7IGkgPCBJR1RfTUFYX1BJUEVTOyBpKyspIHsK KwkJZm9yIChqID0gMDsgaiA8IE1BWF9QTEFORVM7IGorKykKKwkJCWRhdGEtPmZiW2kgKiBNQVhf UExBTkVTICsgal0uZmJfaWQgPSAwOworCQlkYXRhLT5jdXJzb3JfZmJbaV0uZmJfaWQgPSAwOwor CQlkYXRhLT5udW1fcGxhbmVzW2ldID0gLTE7CisJCWRhdGEtPmxhc3RfbW9kZVtpXSA9IE5VTEw7 CisJCXNlbV9pbml0KCZkYXRhLT5ncHVfdGhyZWFkX3BhdXNlX2Fja1tpXSwgMCwgMCk7CisJfQor CisJc3RhcnRfY3B1X3RocmVhZHMoZGF0YSk7CisKKwlkYXRhLT5tb2RlX3Jlc291cmNlcyA9IGRy bU1vZGVHZXRSZXNvdXJjZXMoZGF0YS0+ZHJtX2ZkKTsKKwlpZiAoIWRhdGEtPm1vZGVfcmVzb3Vy Y2VzKSB7CisJCWlndF93YXJuKCJkcm1Nb2RlR2V0UmVzb3VyY2VzIGZhaWxlZDogJXNcbiIsIHN0 cmVycm9yKGVycm5vKSk7CisJCXJldHVybjsKKwl9CisKKwludW1fY29ubmVjdG9ycyA9IGRhdGEt Pm1vZGVfcmVzb3VyY2VzLT5jb3VudF9jb25uZWN0b3JzOworCisJbWVtc2V0KGRhdGEtPmhpZ2hl c3RfbW9kZSwgMCwgc2l6ZW9mKGRybU1vZGVNb2RlSW5mbyAqKSAqIElHVF9NQVhfUElQRVMpOwor CisJZGF0YS0+Y29ubmVjdG9ycyA9CisJCShkcm1Nb2RlQ29ubmVjdG9yUHRyICopbWFsbG9jKHNp emVvZihkcm1Nb2RlQ29ubmVjdG9yUHRyKSAqIG51bV9jb25uZWN0b3JzKTsKKworCWZpbGxfY29u bmVjdG9yX3RvX3BpcGVfYXJyYXkoZGF0YSwgZGF0YS0+bW9kZV9yZXNvdXJjZXMsIGRhdGEtPmNv bm5lY3RvcnMpOworCisJZm9yIChpID0gMDsgaSA8IElHVF9NQVhfUElQRVM7IGkrKykgeworCQlk cm1Nb2RlQ29ubmVjdG9yICpjb25uZWN0b3IgPSAoZHJtTW9kZUNvbm5lY3RvciAqKWRhdGEtPmNv bm5lY3RvcnNbaV07CisJCWlmICghY29ubmVjdG9yKQorCQkJY29udGludWU7CisJCWlmICghZGF0 YS0+aGlnaGVzdF9tb2RlW2ldKSB7CisJCQlpZiAoY29ubmVjdG9yLT5jb3VudF9tb2RlcykKKwkJ CQlkYXRhLT5oaWdoZXN0X21vZGVbaV0gPSBmaW5kX2hpZ2hlc3RfbW9kZShjb25uZWN0b3IpOwor CQl9CisJCWlndF9hc3NlcnQoZGF0YS0+aGlnaGVzdF9tb2RlW2ldKTsKKworCQlpZiAoZGF0YS0+ aGlnaGVzdF9tb2RlW2ldKSB7CisJCQlpZ3RfaW5mbygiVXNpbmcgbW9kZTogXG4iKTsKKwkJCWtt c3Rlc3RfZHVtcF9tb2RlKGRhdGEtPmhpZ2hlc3RfbW9kZVtpXSk7CisJCQlkYXRhLT5waXBlX2Ny Y1tpXSA9IGlndF9waXBlX2NyY19uZXcoZGF0YS0+ZHJtX2ZkLCBpLAorCQkJCQkJCSAgICAgSU5U RUxfUElQRV9DUkNfU09VUkNFX0FVVE8pOworCQl9IGVsc2UKKwkJCWRhdGEtPnBpcGVfY3JjW2ld ID0gTlVMTDsKKworCQlpZiAoZGF0YS0+bnVtX3BsYW5lc1tpXSA9PSAtMSkKKwkJCWRhdGEtPm51 bV9wbGFuZXNbaV0gPSBkYXRhLT5kaXNwbGF5LnBpcGVzW2ldLm5fcGxhbmVzOworCisJCWlndF9p bmZvKCJNYXggbnVtYmVyIG9mIHBsYW5lcyBpcyAlZCBmb3IgcGlwZSAlZFxuIiwKKwkJCSBkYXRh LT5udW1fcGxhbmVzW2ldLCBpKTsKKwl9CisKKwljcmVhdGVfZnJhbWVidWZmZXJzKGRhdGEpOwor CisJc3RhcnRfZ3B1X3RocmVhZHMoZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmlzaF90ZXN0 KHN0cnVjdCBkYXRhICpkYXRhKQoreworCWludCBpOworCisJc3RvcF9ncHVfdGhyZWFkcyhkYXRh KTsKKworCS8qCisJICogQXMgd2UgY2hhbmdlIHRpbGluZy9mb3JtYXQgd2UgbmVlZCBhIG5ldyBG QgorCSAqLworCWRlc3Ryb3lfZnJhbWVidWZmZXJzKGRhdGEpOworCisJZm9yIChpID0gMDsgaSA8 IElHVF9NQVhfUElQRVM7IGkrKykgeworCQlkYXRhLT5udW1fcGxhbmVzW2ldID0gLTE7CisJCWRh dGEtPmxhc3RfbW9kZVtpXSA9IE5VTEw7CisJCWlmIChkYXRhLT5waXBlX2NyY1tpXSkKKwkJCWln dF9waXBlX2NyY19mcmVlKGRhdGEtPnBpcGVfY3JjW2ldKTsKKwl9CisKKwlzdG9wX2NwdV90aHJl YWRzKGRhdGEpOworCisJcmVsZWFzZV9jb25uZWN0b3JzKGRhdGEtPmNvbm5lY3RvcnMpOworCisJ ZHJtTW9kZUZyZWVSZXNvdXJjZXMoZGF0YS0+bW9kZV9yZXNvdXJjZXMpOworfQorCitzdHJ1Y3Qg ZGF0YSBkYXRhID0geworCS5mb3JtYXQgPSBEUk1fRk9STUFUX1hSR0I4ODg4LAorCS5tb2RpZmll ciA9IERSTV9GT1JNQVRfTU9EX0xJTkVBUiwKKwkuZGV2aWQgPSAwLAorfTsKKworaWd0X21haW4g eworCXVpbnQ4X3QgZm9ybWF0X2lkeCA9IDAsIHRpbGluZ19pZHggPSAwOworCisJaWd0X2ZpeHR1 cmUgeworCQlkYXRhLmRybV9mZCA9IGRhdGEuZGlzcGxheS5kcm1fZmQgPSBkcm1fb3Blbl9kcml2 ZXJfbWFzdGVyKERSSVZFUl9BTlkpOworCisJCWttc3Rlc3Rfc2V0X3Z0X2dyYXBoaWNzX21vZGUo KTsKKworCQlpZ3RfZGlzcGxheV9yZXF1aXJlKCZkYXRhLmRpc3BsYXksIGRhdGEuZGlzcGxheS5k cm1fZmQpOworCQlpZ3RfcmVxdWlyZShkYXRhLmRpc3BsYXkuaXNfYXRvbWljKTsKKwkJaWd0X2Rp c3BsYXlfcmVxdWlyZV9vdXRwdXQoJmRhdGEuZGlzcGxheSk7CisJfQorCisJZm9yIChmb3JtYXRf aWR4ID0gMDsgZm9ybWF0X2lkeCA8IE5fRk9STUFUUzsgZm9ybWF0X2lkeCsrKQorCQlmb3IgKHRp bGluZ19pZHggPSAwOyB0aWxpbmdfaWR4IDwgTl9USUxJTkdfTUVUSE9EUzsgdGlsaW5nX2lkeCsr KQorCQl7CisJCQlkYXRhLmZvcm1hdCA9IGZvcm1hdHNbZm9ybWF0X2lkeF07CisJCQlkYXRhLm1v ZGlmaWVyID0gdGlsaW5nc1t0aWxpbmdfaWR4XTsKKworCQkJaWd0X2ZpeHR1cmUgeworCQkJCXBy ZXBhcmVfdGVzdCgmZGF0YSk7CisJCQl9CisKKwkJCWlndF9kZXNjcmliZSgiU3RhcnQgcGlwZSBz dHJlc3MgdGVzdCwgdXRpbGl6aW5nIGNwdSBhbmQgZ3B1ICIKKwkJCSAgICAgICAgICAgICAic2lt dWx0YW5lb3VzbHkgd2l0aCBtYXhpbXVtIGFtb3VudCBvZiBwbGFuZXMgIgorCQkJICAgICAgICAg ICAgICJhbmQgcmVzb2x1dGlvbiAiKTsKKwkJCWlndF9zdWJ0ZXN0X2YoInN0cmVzcy0lcy0lcyIs CisJCQkgICAgICAgICAgICAgIGZvcm1hdF9zdHIoZm9ybWF0X2lkeCksCisJCQkgICAgICAgICAg ICAgIHRpbGluZ19zdHIodGlsaW5nX2lkeCkpIHsKKworCQkJCXN0cmVzcygmZGF0YSk7CisKKwkJ CX0KKworCQkJaWd0X2ZpeHR1cmUgeworCQkJCWZpbmlzaF90ZXN0KCZkYXRhKTsKKwkJCX0KKwkJ fQorCisJaWd0X2ZpeHR1cmUgeworCQlpZ3RfZGlzcGxheV9maW5pKCZkYXRhLmRpc3BsYXkpOwor CX0KK30KZGlmZiAtLWdpdCBhL3Rlc3RzL21lc29uLmJ1aWxkIGIvdGVzdHMvbWVzb24uYnVpbGQK aW5kZXggZDkzMWNjMzcuLmQyYWM1Yzk3IDEwMDY0NAotLS0gYS90ZXN0cy9tZXNvbi5idWlsZAor KysgYi90ZXN0cy9tZXNvbi5idWlsZApAQCAtMjI5LDYgKzIyOSw3IEBAIGk5MTVfcHJvZ3MgPSBb CiAJJ2k5MTVfZmJfdGlsaW5nJywKIAknaTkxNV9nZXRwYXJhbXNfYmFzaWMnLAogCSdpOTE1X2hh bmdtYW4nLAorCSdpOTE1X3BpcGVfc3RyZXNzJywKIAknaTkxNV9tb2R1bGVfbG9hZCcsCiAJJ2k5 MTVfcG1fYmFja2xpZ2h0JywKIAknaTkxNV9wbV9scHNwJywKLS0gCjIuMTcuMQoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxp c3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2Cg==