From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2A5D26EEEC for ; Wed, 18 Sep 2019 11:36:35 +0000 (UTC) From: Stanislav Lisovskiy Date: Wed, 18 Sep 2019 14:34:18 +0300 Message-Id: <20190918113418.2965-1-stanislav.lisovskiy@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v12] 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: stanislav.lisovskiy@intel.com, ville.syrjala@intel.com, martin.peres@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 bGsgeCBhbmQgeSBidWcgZml4IGludG8gc2VwYXJhdGUgcGF0Y2guCgpDaGFuZ2UtSWQ6IEk3OWFk NzU2Njg1ODAxYWJkYzg2ZWRkOWE4M2EwMzgxNjM5OWQ0YThkClNpZ25lZC1vZmYtYnk6IFN0YW5p c2xhdiBMaXNvdnNraXkgPHN0YW5pc2xhdi5saXNvdnNraXlAaW50ZWwuY29tPgotLS0KIHRlc3Rz L01ha2VmaWxlLnNvdXJjZXMgICB8ICAgMSArCiB0ZXN0cy9rbXNfcGxhbmVfc3RyZXNzLmMgfCA4 NTMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiB0ZXN0cy9tZXNvbi5i dWlsZCAgICAgICAgfCAgIDEgKwogMyBmaWxlcyBjaGFuZ2VkLCA4NTUgaW5zZXJ0aW9ucygrKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2ttc19wbGFuZV9zdHJlc3MuYwoKZGlmZiAtLWdpdCBh L3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCmluZGV4IGMw MmU0ZDk0Li5hNzM3MDc3MyAxMDA2NDQKLS0tIGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcworKysg Yi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCkBAIC02NSw2ICs2NSw3IEBAIFRFU1RTX3Byb2dzID0g XAogCWttc19wbGFuZV9tdWx0aXBsZSBcCiAJa21zX3BsYW5lX3NjYWxpbmcgXAogCWttc19wcmlt ZSBcCisJa21zX3BsYW5lX3N0cmVzcyBcCiAJa21zX3Byb3BfYmxvYiBcCiAJa21zX3Byb3BlcnRp ZXMgXAogCWttc19wc3IgXApkaWZmIC0tZ2l0IGEvdGVzdHMva21zX3BsYW5lX3N0cmVzcy5jIGIv dGVzdHMva21zX3BsYW5lX3N0cmVzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwLi40ZGUxOGY5MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ttc19wbGFuZV9zdHJlc3Mu YwpAQCAtMCwwICsxLDg1MyBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBv cmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBh bmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0 byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0 aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJn ZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGll cyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICog U29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBw ZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxs IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhl CisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwg V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5D TFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN RU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xE RVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwg QVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdB UkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICov CisKKyNpbmNsdWRlICJpZ3QuaCIKKyNpbmNsdWRlICJpZ3RfcmFuZC5oIgorI2luY2x1ZGUgImdw Z3B1X2ZpbGwuaCIKKyNpbmNsdWRlICJkcm10ZXN0LmgiCisjaW5jbHVkZSAic3dfc3luYy5oIgor I2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHN0ZGJv b2wuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUg PHRpbWUuaD4KKyNpbmNsdWRlIDxwb2xsLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1 ZGUgPHNlbWFwaG9yZS5oPgorCisjaWZuZGVmIERSTV9DQVBfQ1VSU09SX1dJRFRICisjZGVmaW5l IERSTV9DQVBfQ1VSU09SX1dJRFRIIDB4OAorI2VuZGlmCisjaWZuZGVmIERSTV9DQVBfQ1VSU09S X0hFSUdIVAorI2RlZmluZSBEUk1fQ0FQX0NVUlNPUl9IRUlHSFQgMHg5CisjZW5kaWYKKworCisj ZGVmaW5lIE5fQkxJVFMgMworCisjZGVmaW5lIE5fRk9STUFUUyAxCitzdGF0aWMgY29uc3QgdWlu dDMyX3QgZm9ybWF0c1tOX0ZPUk1BVFNdID0geworCURSTV9GT1JNQVRfWFJHQjg4ODgsCisvKgor ICogV2l0aCB0aG9zZSBlbmFibGVkIHdpbGwgdGFrZSBzaWduaWZpY2FudGx5IG1vcmUgdGltZS4K KyAqLworLy8JRFJNX0ZPUk1BVF9SR0I1NjUsCisvLwlEUk1fRk9STUFUX1hSR0IyMTAxMDEwLAor fTsKKworI2RlZmluZSBOX1RJTElOR19NRVRIT0RTIDEKK3N0YXRpYyBjb25zdCB1aW50NjRfdCB0 aWxpbmdzW05fVElMSU5HX01FVEhPRFNdID0geworCURSTV9GT1JNQVRfTU9EX0xJTkVBUiwKKy8v CUk5MTVfRk9STUFUX01PRF9YX1RJTEVELAorLy8JSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQsCit9 OworCitzdGF0aWMgY29uc3QgY2hhciAqZm9ybWF0X3N0cihpbnQgZm9ybWF0X2luZGV4KQorewor CXN3aXRjaCAoZm9ybWF0c1tmb3JtYXRfaW5kZXhdKSB7CisJY2FzZSBEUk1fRk9STUFUX1JHQjU2 NToKKwkJcmV0dXJuICJyZ2I1NjUiOworCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKKwkJcmV0 dXJuICJ4cmdiODg4OCI7CisJY2FzZSBEUk1fRk9STUFUX1hSR0IyMTAxMDEwOgorCQlyZXR1cm4g InhyZ2IyMTAxMDEwIjsKKwlkZWZhdWx0OgorCQlpZ3RfYXNzZXJ0KGZhbHNlKTsKKwl9Cit9CisK K3N0YXRpYyBjb25zdCBjaGFyICp0aWxpbmdfc3RyKGludCB0aWxpbmdfaW5kZXgpCit7CisJc3dp dGNoICh0aWxpbmdzW3RpbGluZ19pbmRleF0pIHsKKwljYXNlIERSTV9GT1JNQVRfTU9EX0xJTkVB UjoKKwkJcmV0dXJuICJ1bnRpbGVkIjsKKwljYXNlIEk5MTVfRk9STUFUX01PRF9YX1RJTEVEOgor CQlyZXR1cm4gInh0aWxlZCI7CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRDoKKwkJcmV0 dXJuICJ5dGlsZWQiOworCWRlZmF1bHQ6CisJCWlndF9hc3NlcnQoZmFsc2UpOworCX0KK30KKwor CisjZGVmaW5lIE1BWF9DT1JFUyA4CisjZGVmaW5lIE1BWF9QTEFORVMgMTYKKworc3RydWN0IGRh dGE7CisKK3N0cnVjdCB0aHJlYWRfY29udGV4dCB7CisJc3RydWN0IGRhdGEgKmRhdGE7CisJaW50 IGlkOworCXZvaWQgKmJ1ZjE7CisJdm9pZCAqYnVmMjsKK307CisKK3N0cnVjdCByZWN0IHsKKwlp bnQgeDsKKwlpbnQgeTsKKwlpbnQgdzsKKwlpbnQgaDsKK307CisKK3N0cnVjdCBncHVfY29udGV4 dCB7CisJc3RydWN0IGRhdGEgKmRhdGE7CisJaW50IHBpcGU7CisJaW50IGNvbG9yOworCWludCBu dW1fcmVjdGFuZ2xlczsKKwlzdHJ1Y3QgaWd0X2ZiICpmYl9wdHI7CisJc3RydWN0IHJlY3QgYmx0 X3JlY3Q7CisJc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaDsKK307CisKK2VudW0gewor CVJVTk5JTkcsCisJU1RPUFBFRCwKKwlQQVVTRUQsCisJTEFTVF9TVEFURSA9IFBBVVNFRAorfSB0 aHJlYWRfc3RhdGU7CisKK3N0cnVjdCBkYXRhIHsKKwlpbnQgZHJtX2ZkOworCWlndF9kaXNwbGF5 X3QgZGlzcGxheTsKKwlpbnQgbnVtX3BsYW5lc1tJR1RfTUFYX1BJUEVTXTsKKwl1aW50MzJfdCBm b3JtYXQ7CisJdWludDY0X3QgbW9kaWZpZXI7CisJdWludDMyX3QgZGV2aWQ7CisJZHJtX2ludGVs X2J1Zm1nciAqYnVmbWdyOworCWRybU1vZGVNb2RlSW5mbyAqbGFzdF9tb2RlW0lHVF9NQVhfUElQ RVNdOworCXN0cnVjdCBpZ3RfZmIgZmJbSUdUX01BWF9QSVBFUyAqIE1BWF9QTEFORVNdOworCXN0 cnVjdCBpZ3RfZmIgY3Vyc29yX2ZiW0lHVF9NQVhfUElQRVNdOworCXB0aHJlYWRfdCBjcHVfdGhy ZWFkW01BWF9DT1JFU107CisJcHRocmVhZF90IGdwdV90aHJlYWRbSUdUX01BWF9QSVBFU107CisJ Ym9vbCBjcHVfdGhyZWFkX3N0b3BbTUFYX0NPUkVTXTsKKwlpbnQgZ3B1X3RocmVhZF9zdGF0ZVtJ R1RfTUFYX1BJUEVTXTsKKwlzZW1fdCBncHVfdGhyZWFkX3BhdXNlX2Fja1tJR1RfTUFYX1BJUEVT XTsKKwlzdHJ1Y3QgdGhyZWFkX2NvbnRleHQgY3B1X2NvbnRleHRbTUFYX0NPUkVTXTsKKwlzdHJ1 Y3QgZ3B1X2NvbnRleHQgZ3B1X2NvbnRleHRbSUdUX01BWF9QSVBFU107CisJZHJtTW9kZU1vZGVJ bmZvICpoaWdoZXN0X21vZGVbSUdUX01BWF9QSVBFU107CisJZHJtTW9kZUNvbm5lY3RvclB0ciBj b25uZWN0b3JzW0lHVF9NQVhfUElQRVNdOworCWRybU1vZGVSZXMgKm1vZGVfcmVzb3VyY2VzOwor CWludCBudW1iZXJfb2ZfY29yZXM7Cit9OworCisKK3N0YXRpYyB2b2lkIHBhdXNlX2dwdV90aHJl YWRzKHN0cnVjdCBkYXRhICpkYXRhKTsKKworc3RhdGljIHZvaWQgcmVzdW1lX2dwdV90aHJlYWRz KHN0cnVjdCBkYXRhICpkYXRhKTsKKworc3RhdGljIHZvaWQgc3RvcF9ncHVfdGhyZWFkcyhzdHJ1 Y3QgZGF0YSAqZGF0YSk7CisKK3N0YXRpYyB2b2lkIHN0YXJ0X2dwdV90aHJlYWRzKHN0cnVjdCBk YXRhICpkYXRhKTsKKworc3RydWN0IGJhc2VfY3JjIHsKKwlib29sIHNldDsKKwlpZ3RfY3JjX3Qg Y3JjOworfTsKKworaWd0X3BpcGVfY3JjX3QgKnBpcGVfY3JjOworCisjZGVmaW5lIEJVRl9TSVpF IDEyOCoxMDI0KjEwMjQKKworc3RhdGljIHZvaWQgKmNwdV9sb2FkKHZvaWQgKmQpCit7CisJY2hh ciAqYnVmMSwgKmJ1ZjI7CisJc3RydWN0IHRocmVhZF9jb250ZXh0ICpjb250ZXh0ID0gKHN0cnVj dCB0aHJlYWRfY29udGV4dCAqKWQ7CisJc3RydWN0IGRhdGEgKmRhdGEgPSBjb250ZXh0LT5kYXRh OworCisJYnVmMSA9IGNvbnRleHQtPmJ1ZjE7CisJYnVmMiA9IGNvbnRleHQtPmJ1ZjI7CisKKwlk YXRhLT5jcHVfdGhyZWFkX3N0b3BbY29udGV4dC0+aWRdID0gZmFsc2U7CisKKwlpZ3RfaW5mbygi Q1BVIHRocmVhZCBjcHUgaWQgJWQgc3RhcnRcbiIsIGNvbnRleHQtPmlkKTsKKworCS8qIEp1c3Qg dG8gbWFrZSBDUFUgYnVzeS4uLiAqLworCXdoaWxlKCFkYXRhLT5jcHVfdGhyZWFkX3N0b3BbY29u dGV4dC0+aWRdKSB7CisJCW1lbWNweShidWYxLCBidWYyLCBCVUZfU0laRSk7CisJCW1lbWNweShi dWYyLCBidWYxLCBCVUZfU0laRSk7CisJfQorCisJaWd0X2luZm8oIkNQVSB0aHJlYWQgY3B1IGlk ICVkIHN0b3BcbiIsIGNvbnRleHQtPmlkKTsKKworCXJldHVybiBOVUxMOworfQorCisKK3N0YXRp YyB2b2lkIHNjcmF0Y2hfYnVmX2luaXQoc3RydWN0IGlndF9idWYgKmJ1ZiwKKwkJCWRybV9pbnRl bF9ibyAqYm8sIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHN0cmlkZSwgaW50IHRpbGluZywg aW50IGJwcCkKK3sKKwlidWYtPmJvID0gYm87CisJYnVmLT5zdHJpZGUgPSBzdHJpZGU7CisJYnVm LT50aWxpbmcgPSB0aWxpbmc7CisJYnVmLT5zaXplID0gd2lkdGggKiBoZWlnaHQgKiBicHAgLyA4 OworCWJ1Zi0+YnBwID0gYnBwOworfQorCitjaGFyICpzdGF0ZV9zdHJpbmdzIFtdID0gCit7CisJ IlJVTk5JTkciLAorCSJTVE9QUEVEIiwKKwkiUEFVU0VEIiwKK307CisKK2NoYXIgKmdldF9zdGF0 ZV9zdHJpbmcoaW50IHN0YXRlKQoreworCWlmIChzdGF0ZSA8IDAgfHwgc3RhdGUgPiBMQVNUX1NU QVRFKQorCQlyZXR1cm4gIj8iOworCisJcmV0dXJuIHN0YXRlX3N0cmluZ3Nbc3RhdGVdOworfQor CitzdGF0aWMgdm9pZCAqZ3B1X2xvYWQodm9pZCAqcHRyKQoreworCXN0cnVjdCBncHVfY29udGV4 dCAqY29udGV4dCA9IChzdHJ1Y3QgZ3B1X2NvbnRleHQgKilwdHI7CisJc3RydWN0IGludGVsX2Jh dGNoYnVmZmVyICpiYXRjaCA9IE5VTEw7CisJc3RydWN0IGlndF9idWYgZHN0OworCXN0cnVjdCBk YXRhICpkYXRhID0gY29udGV4dC0+ZGF0YTsKKwlpbnQgcGlwZSA9IGNvbnRleHQtPnBpcGU7CisJ aWd0X2ZpbGxmdW5jX3QgZ3BncHVfZmlsbCA9IE5VTEw7CisJZHJtX2ludGVsX2JvICpibyA9IE5V TEw7CisJc3RydWN0IGlndF9mYiBmYiwgKmZiX3B0ciA9IE5VTEwsICpsYXN0X2ZiX3B0ciA9IE5V TEw7CisJaW50IHJlY3RfZGl2aXNvcjsKKwlpbnQgcmVjdF93aWR0aDsKKwlpbnQgcmVjdF9oZWln aHQ7CisJaW50IGZyYW1lX3dpZHRoOworCWludCBmcmFtZV9oZWlnaHQ7CisJaW50IGJ5dGVzX3Bl cl9waXhlbDsKKwlkcm1Nb2RlTW9kZUluZm8gKm1vZGU7CisJaW50IGZyYW1lID0gMDsKKwlpbnQg eCwgeTsKKwlpbnQgbGFzdF9zdGF0ZSA9IC0xOworCWludCByZWN0OworCisJZ3BncHVfZmlsbCA9 IGlndF9nZXRfZ3BncHVfZmlsbGZ1bmMoZGF0YS0+ZGV2aWQpOworCisJaWd0X3JlcXVpcmVfZihn cGdwdV9maWxsLAorCSAgICAgICJubyBncGdwdS1maWxsIGZ1bmN0aW9uXG4iKTsKKworCWJhdGNo ID0gY29udGV4dC0+YmF0Y2g7CisJaWd0X2Fzc2VydChiYXRjaCk7CisKKwltb2RlID0gZGF0YS0+ aGlnaGVzdF9tb2RlW3BpcGVdOworCWlndF9hc3NlcnQobW9kZSk7CisKKwlpZ3RfY3JlYXRlX2Nv bG9yX3BhdHRlcm5fZmIoZGF0YS0+ZHJtX2ZkLCBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3Bs YXksCisJCSAgICBkYXRhLT5mb3JtYXQsCisJCSAgICBkYXRhLT5tb2RpZmllciwKKwkJICAgIDAu MCwgMS4wLCAwLjAsICZmYik7CisKKwlpZ3RfaW5mbygiR1BVIHRocmVhZCBwaXBlICVkIHN0YXJ0 XG4iLCBwaXBlKTsKKwl3aGlsZSAoZGF0YS0+Z3B1X3RocmVhZF9zdGF0ZVtwaXBlXSAhPSBTVE9Q UEVEKSB7CisJCWlmIChsYXN0X3N0YXRlICE9IGRhdGEtPmdwdV90aHJlYWRfc3RhdGVbcGlwZV0p IHsKKwkJCWxhc3Rfc3RhdGUgPSBkYXRhLT5ncHVfdGhyZWFkX3N0YXRlW3BpcGVdOworCQkJc2Vt X3Bvc3QoJmRhdGEtPmdwdV90aHJlYWRfcGF1c2VfYWNrW3BpcGVdKTsKKwkJfQorCQlpZiAoZGF0 YS0+Z3B1X3RocmVhZF9zdGF0ZVtwaXBlXSA9PSBQQVVTRUQpIHsKKwkJCXNsZWVwKDApOworCQkJ Y29udGludWU7CisJCX0KKworCQlpZiAoIWNvbnRleHQtPmZiX3B0cikgeworCQkJZmJfcHRyID0g JmZiOworCQl9CisJCWVsc2UgeworCQkJZmJfcHRyID0gY29udGV4dC0+ZmJfcHRyOworCQl9CisK KwkJaWYgKGxhc3RfZmJfcHRyICE9IGZiX3B0cikgeworCQkJaWd0X2luZm8oIkdQVSB0aHJlYWQg cGlwZSAlZDogQ2hhbmdlIGZyb20gRkIgJXggdG8gRkIgJXhcbiIsIHBpcGUsIGxhc3RfZmJfcHRy LCBmYl9wdHIpOworCQkJZnJhbWVfd2lkdGggPSBmYl9wdHItPndpZHRoOworCQkJZnJhbWVfaGVp Z2h0ID0gZmJfcHRyLT5oZWlnaHQ7CisJCQlieXRlc19wZXJfcGl4ZWwgPSBmYl9wdHItPnBsYW5l X2JwcFswXSAvIDg7CisJCQlibyA9IGdlbV9oYW5kbGVfdG9fbGliZHJtX2JvKGRhdGEtPmJ1Zm1n ciwgZGF0YS0+ZHJtX2ZkLCAiIiwgZmJfcHRyLT5nZW1faGFuZGxlKTsKKwkJCWlndF9hc3NlcnQo Ym8pOworCisJCQlzY3JhdGNoX2J1Zl9pbml0KCZkc3QsIGJvLCBmcmFtZV93aWR0aCwgZnJhbWVf aGVpZ2h0LCBmYl9wdHItPnN0cmlkZXNbMF0sIGZiX3B0ci0+bW9kaWZpZXIsIGZiX3B0ci0+cGxh bmVfYnBwWzBdKTsKKwkJfQorCQlsYXN0X2ZiX3B0ciA9IGZiX3B0cjsKKworCQkvKiBGaWxsIHRo ZSBmcmFtZWJ1ZmZlciB1c2luZyBzaGFkZXIgKi8KKwkJeCA9IDA7CisJCXkgPSBmcmFtZV9oZWln aHQgLyA0OworCisJCWdwZ3B1X2ZpbGwoYmF0Y2gsCisJCSAgICZkc3QsIHgsIHksIChmcmFtZV93 aWR0aCAqIGJ5dGVzX3Blcl9waXhlbCksIGZyYW1lX2hlaWdodCAvIDIsCisJCSAgIGNvbnRleHQt PmNvbG9yKTsKKworCQlyZWN0ID0gMDsKKworCQl3aGlsZSAocmVjdCA8IGNvbnRleHQtPm51bV9y ZWN0YW5nbGVzKSB7CisJCQkvKiBkaXZpZGUgYXQgbGVhc3QgYnkgMiBhbmQgdXAgdG8gOCAqLwor CQkJcmVjdF9kaXZpc29yID0gMSA8PCAoaGFyc19wZXRydXNrYV9mNTRfMV9yYW5kb21fdW5zYWZl X21heCgzKSArIDEpOworCisJCQlyZWN0X3dpZHRoID0gZnJhbWVfd2lkdGggLyByZWN0X2Rpdmlz b3I7CisJCQlyZWN0X2hlaWdodCA9IGZyYW1lX2hlaWdodCAvIHJlY3RfZGl2aXNvcjsKKworCQkJ Y29udGV4dC0+Ymx0X3JlY3QueCA9IHggKyBoYXJzX3BldHJ1c2thX2Y1NF8xX3JhbmRvbV91bnNh ZmVfbWF4KGZyYW1lX3dpZHRoIC0gcmVjdF93aWR0aCk7CisJCQljb250ZXh0LT5ibHRfcmVjdC55 ID0geSArIGhhcnNfcGV0cnVza2FfZjU0XzFfcmFuZG9tX3Vuc2FmZV9tYXgoZnJhbWVfaGVpZ2h0 LzIgLSByZWN0X2hlaWdodCk7CisKKwkJCS8qIEZpbGwgcmFuZG9tbHkgc2l6ZWQgYW5kIHBvc2l0 aW9uZWQgcmVjdGFuZ2xlcyAqLworCQkJZ3BncHVfZmlsbChiYXRjaCwKKwkJCSAgICZkc3QsIGNv bnRleHQtPmJsdF9yZWN0LngsIGNvbnRleHQtPmJsdF9yZWN0LnksICgoY29udGV4dC0+Ymx0X3Jl Y3QueCArIHJlY3Rfd2lkdGgpICogYnl0ZXNfcGVyX3BpeGVsKSwKKwkJCSAgIGNvbnRleHQtPmJs dF9yZWN0LnkgKyByZWN0X2hlaWdodCwKKwkJCSAgIGNvbnRleHQtPmNvbG9yICsgMHg4MCk7CisK KwkJCWNvbnRleHQtPmNvbG9yICs9IDQ7CisKKwkJCSsrcmVjdDsKKwkJfQorCQlmcmFtZSsrOwor CX0KKworCWRybV9pbnRlbF9ib191bnJlZmVyZW5jZShibyk7CisKKwlpZ3RfcmVtb3ZlX2ZiKGRh dGEtPmRpc3BsYXkuZHJtX2ZkLCAmZmIpOworCisJaWd0X2luZm8oIkdQVSB0aHJlYWQgcGlwZSAl ZCBzdG9wLiBGcmFtZXMgcmVuZGVyZWQ6ICVkXG4iLCBwaXBlLCBmcmFtZSk7CisKKwlyZXR1cm4g TlVMTDsKK30KKworc3RhdGljIGlubGluZSB1aW50MzJfdCBwaXBlX3NlbGVjdChlbnVtIHBpcGUg cGlwZSkKK3sKKwlpZiAocGlwZSA+IDEpCisJCXJldHVybiBwaXBlIDw8IERSTV9WQkxBTktfSElH SF9DUlRDX1NISUZUOworCWVsc2UgaWYgKHBpcGUgPiAwKQorCQlyZXR1cm4gRFJNX1ZCTEFOS19T RUNPTkRBUlk7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGdldF92 YmxhbmsoaW50IGZkLCBlbnVtIHBpcGUgcGlwZSwgdW5zaWduZWQgZmxhZ3MpCit7CisJdW5pb24g ZHJtX3dhaXRfdmJsYW5rIHZibDsKKworCW1lbXNldCgmdmJsLCAwLCBzaXplb2YodmJsKSk7CisJ dmJsLnJlcXVlc3QudHlwZSA9IERSTV9WQkxBTktfUkVMQVRJVkUgfCBwaXBlX3NlbGVjdChwaXBl KSB8IGZsYWdzOworCWlmIChkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX1dBSVRfVkJMQU5LLCAmdmJs KSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gdmJsLnJlcGx5LnNlcXVlbmNlOworfQorCisKK3N0 YXRpYyBpbnQgcGlwZV9zdHJlc3Moc3RydWN0IGRhdGEgKmRhdGEsIGlndF9vdXRwdXRfdCAqb3V0 cHV0LCBlbnVtIHBpcGUgcGlwZSwgZHJtTW9kZU1vZGVJbmZvICptb2RlKQoreworCWlndF9wbGFu ZV90ICpwbGFuZTsKKwlpbnQgaTsKKwlpbnQgcmV0OworCWludCBsYXN0X3BsYW5lOworCWJvb2wg bmV3X21vZGUgPSBmYWxzZTsKKwl1aW50NjRfdCBjdXJzb3Jfd2lkdGgsIGN1cnNvcl9oZWlnaHQ7 CisKKwlkb19vcl9kaWUoZHJtR2V0Q2FwKGRhdGEtPmRybV9mZCwgRFJNX0NBUF9DVVJTT1JfV0lE VEgsICZjdXJzb3Jfd2lkdGgpKTsKKwlkb19vcl9kaWUoZHJtR2V0Q2FwKGRhdGEtPmRybV9mZCwg RFJNX0NBUF9DVVJTT1JfSEVJR0hULCAmY3Vyc29yX2hlaWdodCkpOworCisJaWYgKGRhdGEtPmxh c3RfbW9kZVtwaXBlXSAhPSBtb2RlKSB7CisJCWlndF9vdXRwdXRfb3ZlcnJpZGVfbW9kZShvdXRw dXQsIG1vZGUpOworCQlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgcGlwZSk7CisKKwkJcmV0 ID0gaWd0X2Rpc3BsYXlfdHJ5X2NvbW1pdF9hdG9taWMoJmRhdGEtPmRpc3BsYXksCisJCQkJRFJN X01PREVfQVRPTUlDX1RFU1RfT05MWSB8IERSTV9NT0RFX0FUT01JQ19BTExPV19NT0RFU0VULCBO VUxMKTsKKwkJaWYgKHJldCkgeworCQkJaWd0X3dhcm4oIkNvdWxkIG5vdCBjb21taXQgbW9kZTog XG4iKTsKKwkJCWttc3Rlc3RfZHVtcF9tb2RlKG1vZGUpOworCQkJcmV0dXJuIHJldDsKKwkJfQor CisJCWlndF9kaXNwbGF5X2NvbW1pdDIoJmRhdGEtPmRpc3BsYXksIENPTU1JVF9BVE9NSUMpOwor CQlkYXRhLT5sYXN0X21vZGVbcGlwZV0gPSBtb2RlOworCQluZXdfbW9kZSA9IHRydWU7CisJfQor CisJLyoKKwkgKiBMb29rcyBsaWtlIHdlIGNhbid0IGhhdmUgcGxhbmVzIG9uIHRoYXQgcGlwZSBh dCBhbGwKKwkgKi8KKwlpZiAoIWRhdGEtPm51bV9wbGFuZXNbcGlwZV0pCisJCXJldHVybiAwOwor CisJbW9kZSA9IGlndF9vdXRwdXRfZ2V0X21vZGUob3V0cHV0KTsKKworCWlmIChuZXdfbW9kZSkg eworCQlpID0gMDsKKwkJZm9yX2VhY2hfcGxhbmVfb25fcGlwZSgmZGF0YS0+ZGlzcGxheSwgcGlw ZSwgcGxhbmUpIHsKKwkJCWludCBwbGFuZV93aWR0aCwgcGxhbmVfaGVpZ2h0OworCQkJaWYgKHBs YW5lLT50eXBlID09IERSTV9QTEFORV9UWVBFX0NVUlNPUikgeworCQkJCWlndF9wbGFuZV9zZXRf ZmIocGxhbmUsICZkYXRhLT5jdXJzb3JfZmJbcGlwZV0pOworCQkJCWlndF9mYl9zZXRfc2l6ZSgm ZGF0YS0+Y3Vyc29yX2ZiW3BpcGVdLCBwbGFuZSwgY3Vyc29yX3dpZHRoLCBjdXJzb3JfaGVpZ2h0 KTsKKwkJCQlpZ3RfcGxhbmVfc2V0X3NpemUocGxhbmUsIGN1cnNvcl93aWR0aCwgY3Vyc29yX2hl aWdodCk7CisJCQkJcGxhbmVfd2lkdGggPSBjdXJzb3Jfd2lkdGg7CisJCQkJcGxhbmVfaGVpZ2h0 ID0gY3Vyc29yX2hlaWdodDsKKwkJCX0gZWxzZSB7CisJCQkJaWd0X3BsYW5lX3NldF9mYihwbGFu ZSwgJmRhdGEtPmZiW3BpcGUgKiBNQVhfUExBTkVTICsgaV0pOworCQkJCWlndF9wbGFuZV9zZXRf cG9zaXRpb24ocGxhbmUsIDAsIDApOworCQkJCWlndF9mYl9zZXRfc2l6ZSgmZGF0YS0+ZmJbcGlw ZSAqIE1BWF9QTEFORVMgKyBpXSwgcGxhbmUsIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxh eSk7CisJCQkJaWd0X3BsYW5lX3NldF9zaXplKHBsYW5lLCBtb2RlLT5oZGlzcGxheSwgbW9kZS0+ dmRpc3BsYXkpOworCQkJCXBsYW5lX3dpZHRoID0gbW9kZS0+aGRpc3BsYXk7CisJCQkJcGxhbmVf aGVpZ2h0ID0gbW9kZS0+dmRpc3BsYXk7CisJCQl9CisKKwkJCXJldCA9IGlndF9kaXNwbGF5X3Ry eV9jb21taXRfYXRvbWljKCZkYXRhLT5kaXNwbGF5LCBEUk1fTU9ERV9BVE9NSUNfVEVTVF9PTkxZ IHwgRFJNX01PREVfQVRPTUlDX0FMTE9XX01PREVTRVQsIE5VTEwpOworCQkJd2hpbGUgKHJldCkg eworCQkJCWlmIChwbGFuZV93aWR0aCA8PSBjdXJzb3Jfd2lkdGggfHwgcGxhbmVfaGVpZ2h0IDw9 IGN1cnNvcl9oZWlnaHQpCisJCQkJCWJyZWFrOworCQkJCXBsYW5lX3dpZHRoIC89IDI7CisJCQkJ cGxhbmVfaGVpZ2h0IC89IDI7CisJCQkJaWd0X3BsYW5lX3NldF9zaXplKHBsYW5lLCBwbGFuZV93 aWR0aCwgcGxhbmVfaGVpZ2h0KTsKKwkJCQlpZ3RfaW5mbygiUmVkdWNlZCBwbGFuZSAlZCBzaXpl IHRvICVkeCVkXG4iLCBwbGFuZS0+aW5kZXgsIHBsYW5lX3dpZHRoLCBwbGFuZV9oZWlnaHQpOwor CQkJCXJldCA9IGlndF9kaXNwbGF5X3RyeV9jb21taXRfYXRvbWljKCZkYXRhLT5kaXNwbGF5LCBE Uk1fTU9ERV9BVE9NSUNfVEVTVF9PTkxZIHwgRFJNX01PREVfQVRPTUlDX0FMTE9XX01PREVTRVQs IE5VTEwpOworCQkJfQorCQkJaWYgKHJldCkgeworCQkJCWlndF9pbmZvKCJQbGFuZSAlZCBwaXBl ICVkIHRyeSBjb21taXQgZmFpbGVkLCBleGl0aW5nXG4iLCBpLCBwaXBlKTsKKwkJCQlkYXRhLT5u dW1fcGxhbmVzW3BpcGVdID0gaTsKKwkJCQlpZ3RfaW5mbygiTWF4IG51bSBwbGFuZXMgZm9yIHBp cGUgJWQgc2V0IHRvICVkXG4iLCBwaXBlLCBpKTsKKwkJCQkvKgorCQkJCSAqIFdlIGhhdmUgbm93 IGRldGVybWluZWQgbWF4IGFtb3VudCBvZiBmdWxsIHNpemVkIHBsYW5lcywgd2Ugd2lsbCBqdXN0 CisJCQkJICoga2VlcCBpdCBpbiBtaW5kIGFuZCBiZSBzbWFydGVyIG5leHQgdGltZS4gQWxzbyBs ZXRzIHJlbW92ZSB1bm5lZWRlZCBmYnMuCisJCQkJICogRG9uJ3QgZGVzdHJveSBjdXJzb3JfZmIg YXMgd2lsbCB0YWtlIGNhcmUgYWJvdXQgaXQgYXQgdGhlIGVuZC4KKwkJCQkgKi8KKwkJCQlpZ3Rf cGxhbmVfc2V0X2ZiKHBsYW5lLCBOVUxMKTsKKwkJCQl3aGlsZSAoaSA8IE1BWF9QTEFORVMpIHsK KwkJCQkJaWd0X3JlbW92ZV9mYihkYXRhLT5kaXNwbGF5LmRybV9mZCwgJmRhdGEtPmZiW3BpcGUg KiBNQVhfUExBTkVTICsgaV0pOworCQkJCQlkYXRhLT5mYltwaXBlICogTUFYX1BMQU5FUyArIGld LmZiX2lkID0gMDsKKwkJCQkJaSsrOworCQkJCX0KKwkJCQlpID0gZGF0YS0+bnVtX3BsYW5lc1tw aXBlXTsKKwkJCX0KKwkJCWlmICgrK2kgPj0gZGF0YS0+bnVtX3BsYW5lc1twaXBlXSkKKwkJCQli cmVhazsKKwkJfQorCQlpZ3RfZGlzcGxheV9jb21taXQyKCZkYXRhLT5kaXNwbGF5LCBDT01NSVRf QVRPTUlDKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgZHJtTW9kZU1vZGVJbmZv ICogZmluZF9oaWdoZXN0X21vZGUoZHJtTW9kZUNvbm5lY3RvciAqY29ubmVjdG9yKQoreworCWRy bU1vZGVNb2RlSW5mbyAqaGlnaGVzdF9tb2RlID0gTlVMTDsKKwlpbnQgajsKKworCWZvciAoaiA9 IDA7IGogPCBjb25uZWN0b3ItPmNvdW50X21vZGVzOyBqKyspIHsKKwkJaWYgKCFoaWdoZXN0X21v ZGUpIHsKKwkJCWhpZ2hlc3RfbW9kZSA9ICZjb25uZWN0b3ItPm1vZGVzW2pdOworCQl9CisJCWVs c2UgaWYgKGNvbm5lY3Rvci0+bW9kZXNbal0udmRpc3BsYXkgJiYgY29ubmVjdG9yLT5tb2Rlc1tq XS5oZGlzcGxheSkgeworCQkJaWYgKGhpZ2hlc3RfbW9kZS0+aGRpc3BsYXkgPCBjb25uZWN0b3It Pm1vZGVzW2pdLmhkaXNwbGF5KQorCQkJCWhpZ2hlc3RfbW9kZSA9ICZjb25uZWN0b3ItPm1vZGVz W2pdOworCQkJfQorCX0KKworCXJldHVybiBoaWdoZXN0X21vZGU7Cit9CisKK3R5cGVkZWYgZHJt TW9kZUNvbm5lY3RvciAqIGRybU1vZGVDb25uZWN0b3JQdHI7CisKK3N0YXRpYyB2b2lkIGZpbGxf Y29ubmVjdG9yX3RvX3BpcGVfYXJyYXkoc3RydWN0IGRhdGEgKmRhdGEsIGRybU1vZGVSZXMgKm1v ZGVfcmVzb3VyY2VzLCBkcm1Nb2RlQ29ubmVjdG9yUHRyICpjb25uZWN0b3JzKQoreworCWludCBw aXBlID0gMDsKKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKKwlpbnQgaTsKKwlpbnQgbWF4X2Nvbm5l Y3RvcnMgPSBtaW4obW9kZV9yZXNvdXJjZXMtPmNvdW50X2Nvbm5lY3RvcnMsIElHVF9NQVhfUElQ RVMpOworCisJbWVtc2V0KGNvbm5lY3RvcnMsIDAsIHNpemVvZihkcm1Nb2RlQ29ubmVjdG9yUHRy KSAqIElHVF9NQVhfUElQRVMpOworCisJZm9yIChpID0gMDsgaSA8IG1heF9jb25uZWN0b3JzOyBp KyspIHsKKwkJZHJtTW9kZUNvbm5lY3RvciAqY29ubmVjdG9yOworCisJCWNvbm5lY3RvciA9IGRy bU1vZGVHZXRDb25uZWN0b3IoZGF0YS0+ZHJtX2ZkLAorCQkJICAgICAgIG1vZGVfcmVzb3VyY2Vz LT5jb25uZWN0b3JzW2ldKTsKKworCQlpZiAoIWNvbm5lY3RvcikgeworCQkJaWd0X3dhcm4oImNv dWxkIG5vdCBnZXQgY29ubmVjdG9yICVpOiAlc1xuIiwKKwkJCQltb2RlX3Jlc291cmNlcy0+Y29u bmVjdG9yc1tpXSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYg KGNvbm5lY3Rvci0+Y29ubmVjdGlvbiA9PSBEUk1fTU9ERV9DT05ORUNURUQpIHsKKwkJCWNvbm5l Y3RvcnNbcGlwZV0gPSAoZHJtTW9kZUNvbm5lY3RvclB0ciljb25uZWN0b3I7CisJCQkrK3BpcGU7 CisJCX0KKwkJZWxzZQorCQkJZHJtTW9kZUZyZWVDb25uZWN0b3IoY29ubmVjdG9yKTsKKwl9Cit9 CisKK3N0YXRpYyB2b2lkIHJlbGVhc2VfY29ubmVjdG9ycyhkcm1Nb2RlQ29ubmVjdG9yUHRyICpj b25uZWN0b3JzKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBJR1RfTUFYX1BJUEVTOyBp KyspIHsKKwkJaWYgKGNvbm5lY3RvcnNbaV0pCisJCQlkcm1Nb2RlRnJlZUNvbm5lY3Rvcihjb25u ZWN0b3JzW2ldKTsKKwl9Cit9CisKKyNkZWZpbmUgTUlOX0RVUkFUSU9OX1NFQyA1LjAwCisjZGVm aW5lIE1JTl9JVEVSQVRJT05TIDIwCisKK3N0YXRpYyB2b2lkIHN0cmVzcyhzdHJ1Y3QgZGF0YSAq ZGF0YSkKK3sKKwlzdHJ1Y3QgdGltZXNwZWMgc3RhcnQsIGVuZDsKKwlpZ3Rfb3V0cHV0X3QgKm91 dHB1dDsKKwlpbnQgcmV0OworCWludCBwaXBlOworCWludCBpdGVyYXRpb25zID0gMDsKKwlib29s IG5lZWRfY29udGludWU7CisJaWd0X2NyY190IGNyYywgY3JjMjsKKworCWlndF9nZXR0aW1lKCZz dGFydCk7CisKKwlkbyB7CisJCS8qCisJCSAqIEluY3JlbWVudCBwaXBlIG9ubHkgZm9yIGNvbm5l Y3RlZCBvdXRwdXRzLAorCQkgKiBmb3IgZWFjaCBjb25uZWN0ZWQgb3V0cHV0IHdlIHNob3VsZCBh c3NpZ24gYQorCQkgKiBkaWZmZXJlbnQgcGlwZS4KKwkJICovCisJCXBpcGUgPSAwOworCQlmb3Jf ZWFjaF9jb25uZWN0ZWRfb3V0cHV0KCZkYXRhLT5kaXNwbGF5LCBvdXRwdXQpIHsKKwkJCWlndF9h c3NlcnRfZihkYXRhLT5kaXNwbGF5LnBpcGVzW3BpcGVdLm5fcGxhbmVzIDwgTUFYX1BMQU5FUywK KwkJCQkiQ3VycmVudGx5IHdlIGRvbid0IHN1cHBvcnQgbW9yZSB0aGFuICVkIHBsYW5lcyEiLCBN QVhfUExBTkVTKTsKKworCQkJcGlwZV9jcmMgPSBpZ3RfcGlwZV9jcmNfbmV3KGRhdGEtPmRybV9m ZCwgcGlwZSwKKwkJCQlJTlRFTF9QSVBFX0NSQ19TT1VSQ0VfQVVUTyk7CisKKwkJCXJldCA9IHBp cGVfc3RyZXNzKGRhdGEsIG91dHB1dCwgcGlwZSwgZGF0YS0+aGlnaGVzdF9tb2RlW3BpcGVdKTsK KworCQkJaWYgKCEoKGludClpZ3RfdGltZV9lbGFwc2VkKCZzdGFydCwgJmVuZCkgJSAoKGludClN SU5fRFVSQVRJT05fU0VDLzQpKSkgeworCisJCQkJZ2V0X3ZibGFuayhkYXRhLT5kaXNwbGF5LmRy bV9mZCwgcGlwZSwgRFJNX1ZCTEFOS19ORVhUT05NSVNTKTsKKworCQkJCWlndF9waXBlX2NyY19j b2xsZWN0X2NyYyhwaXBlX2NyYywgJmNyYyk7CisKKwkJCQlnZXRfdmJsYW5rKGRhdGEtPmRpc3Bs YXkuZHJtX2ZkLCBwaXBlLCBEUk1fVkJMQU5LX05FWFRPTk1JU1MpOworCisJCQkJaWd0X3BpcGVf Y3JjX2NvbGxlY3RfY3JjKHBpcGVfY3JjLCAmY3JjMik7CisKKwkJCQlpZ3RfYXNzZXJ0X2NyY19l cXVhbCgmY3JjLCAmY3JjMik7CisJCQl9CisKKwkJCWlndF9waXBlX2NyY19mcmVlKHBpcGVfY3Jj KTsKKworCQkJaWYgKHJldCB8fCAoKytwaXBlID09IElHVF9NQVhfUElQRVMpKQorCQkJCWJyZWFr OworCQl9CisJCWlndF9nZXR0aW1lKCZlbmQpOworCQlpdGVyYXRpb25zKys7CisJCW5lZWRfY29u dGludWUgPSBpZ3RfdGltZV9lbGFwc2VkKCZzdGFydCwgJmVuZCkgPCBNSU5fRFVSQVRJT05fU0VD OworCX0gd2hpbGUgKChuZWVkX2NvbnRpbnVlIHx8IGl0ZXJhdGlvbnMgPCBNSU5fSVRFUkFUSU9O UykpOworCisKK30KKworc3RhdGljIHZvaWQgc3RhcnRfZ3B1X3RocmVhZHMoc3RydWN0IGRhdGEg KmRhdGEpCit7CisJaW50IGkgPSAwOworCWlndF9vdXRwdXRfdCAqb3V0cHV0OworCisJaWYgKCFk YXRhLT5kZXZpZCkgeworCQlkYXRhLT5kZXZpZCA9IGludGVsX2dldF9kcm1fZGV2aWQoZGF0YS0+ ZHJtX2ZkKTsKKwkJaWd0X3JlcXVpcmVfZ2VtKGRhdGEtPmRybV9mZCk7CisKKwkJZGF0YS0+YnVm bWdyID0gZHJtX2ludGVsX2J1Zm1ncl9nZW1faW5pdChkYXRhLT5kcm1fZmQsIDQwOTYpOworCQlp Z3RfYXNzZXJ0KGRhdGEtPmJ1Zm1ncik7CisJfQorCisJZm9yX2VhY2hfY29ubmVjdGVkX291dHB1 dCgmZGF0YS0+ZGlzcGxheSwgb3V0cHV0KSB7CisJCWRhdGEtPmdwdV9jb250ZXh0W2ldLmRhdGEg PSBkYXRhOworCQlkYXRhLT5ncHVfY29udGV4dFtpXS5waXBlID0gaTsKKwkJZGF0YS0+Z3B1X2Nv bnRleHRbaV0uZmJfcHRyID0gTlVMTDsKKwkJZGF0YS0+Z3B1X2NvbnRleHRbaV0uYmx0X3JlY3Qu eCA9IDA7CisJCWRhdGEtPmdwdV9jb250ZXh0W2ldLmJsdF9yZWN0LnkgPSAwOworCQlkYXRhLT5n cHVfY29udGV4dFtpXS5ibHRfcmVjdC53ID0gMDsKKwkJZGF0YS0+Z3B1X2NvbnRleHRbaV0uYmx0 X3JlY3QuaCA9IDA7CisJCWRhdGEtPmdwdV9jb250ZXh0W2ldLm51bV9yZWN0YW5nbGVzID0gTl9C TElUUzsKKwkJZGF0YS0+Z3B1X3RocmVhZF9zdGF0ZVtpXSA9IFJVTk5JTkc7CisJCWlndF9pbmZv KCJTdGFydGluZyBHUFUgdGhyZWFkICVkXG4iLCBpKTsKKwkJZGF0YS0+Z3B1X2NvbnRleHRbaV0u YmF0Y2ggPSBpbnRlbF9iYXRjaGJ1ZmZlcl9hbGxvYyhkYXRhLT5idWZtZ3IsIGRhdGEtPmRldmlk KTsKKwkJcHRocmVhZF9jcmVhdGUoJmRhdGEtPmdwdV90aHJlYWRbaV0sIE5VTEwsIGdwdV9sb2Fk LCAodm9pZCopJmRhdGEtPmdwdV9jb250ZXh0W2ldKTsKKwkJc2VtX3dhaXQoJmRhdGEtPmdwdV90 aHJlYWRfcGF1c2VfYWNrW2ldKTsKKwkJaWd0X2luZm8oIkdQVSB0aHJlYWQgJWQgc3RhcnRlZFxu IiwgaSk7CisJCWlmICgrK2kgPT0gSUdUX01BWF9QSVBFUykKKwkJCWJyZWFrOworCX0KK30KKwor CitzdGF0aWMgdm9pZCBwYXVzZV9ncHVfdGhyZWFkcyhzdHJ1Y3QgZGF0YSAqZGF0YSkKK3sKKwlp bnQgaSA9IDA7CisJaWd0X291dHB1dF90ICpvdXRwdXQ7CisJZm9yX2VhY2hfY29ubmVjdGVkX291 dHB1dCgmZGF0YS0+ZGlzcGxheSwgb3V0cHV0KSB7CisJCWlmIChkYXRhLT5ncHVfdGhyZWFkX3N0 YXRlW2ldICE9IFJVTk5JTkcpIHsKKwkJCSsraTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlndF9p bmZvKCJQYXVzaW5nIEdQVSB0aHJlYWQgJWQgXG4iLCBpKTsKKwkJZGF0YS0+Z3B1X3RocmVhZF9z dGF0ZVtpXSA9IFBBVVNFRDsKKwkJc2VtX3dhaXQoJmRhdGEtPmdwdV90aHJlYWRfcGF1c2VfYWNr W2ldKTsKKwkJaWd0X2luZm8oIkdQVSB0aHJlYWQgJWQgcGF1c2VkXG4iLCBpKTsKKwkJaWYgKCsr aSA9PSBJR1RfTUFYX1BJUEVTKQorCQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2F0 dHJpYnV0ZV9fKChvcHRpbWl6ZSgiTzAiKSkpIHJlc3VtZV9ncHVfdGhyZWFkcyhzdHJ1Y3QgZGF0 YSAqZGF0YSkKK3sKKwlpbnQgaSA9IDA7CisJaWd0X291dHB1dF90ICpvdXRwdXQ7CisJZm9yX2Vh Y2hfY29ubmVjdGVkX291dHB1dCgmZGF0YS0+ZGlzcGxheSwgb3V0cHV0KSB7CisJCWlmIChkYXRh LT5ncHVfdGhyZWFkX3N0YXRlW2ldICE9IFBBVVNFRCkgeworCQkJKytpOworCQkJY29udGludWU7 CisJCX0KKwkJaWd0X2luZm8oIlJlc3VtaW5nIEdQVSB0aHJlYWQgJWRcbiIsIGkpOworCQlkYXRh LT5ncHVfdGhyZWFkX3N0YXRlW2ldID0gUlVOTklORzsKKwkJc2VtX3dhaXQoJmRhdGEtPmdwdV90 aHJlYWRfcGF1c2VfYWNrW2ldKTsKKwkJaWd0X2luZm8oIkdQVSB0aHJlYWQgJWQgcmVzdW1lZFxu IiwgaSk7CisJCWlmICgrK2kgPT0gSUdUX01BWF9QSVBFUykKKwkJCWJyZWFrOworCX0KK30KKwor CitzdGF0aWMgdm9pZCBzdG9wX2dwdV90aHJlYWRzKHN0cnVjdCBkYXRhICpkYXRhKQoreworCWlu dCBpID0gMDsKKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKKwlmb3JfZWFjaF9jb25uZWN0ZWRfb3V0 cHV0KCZkYXRhLT5kaXNwbGF5LCBvdXRwdXQpIHsKKwkJaWd0X2luZm8oIlN0b3BpbmcgR1BVIHRo cmVhZCAlZFxuIiwgaSk7CisJCWRhdGEtPmdwdV90aHJlYWRfc3RhdGVbaV0gPSBTVE9QUEVEOwor CQlwdGhyZWFkX2pvaW4oZGF0YS0+Z3B1X3RocmVhZFtpXSwgTlVMTCk7CisJCWRhdGEtPmdwdV9j b250ZXh0W2ldLmZiX3B0ciA9IE5VTEw7CisJCWludGVsX2JhdGNoYnVmZmVyX2ZyZWUoZGF0YS0+ Z3B1X2NvbnRleHRbaV0uYmF0Y2gpOworCQlpZiAoKytpID09IElHVF9NQVhfUElQRVMpCisJCQli cmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0X2NwdV90aHJlYWRzKHN0cnVjdCBkYXRh ICpkYXRhKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5udW1iZXJfb2ZfY29y ZXM7aSsrKSB7CisJCWRhdGEtPmNwdV9jb250ZXh0W2ldLmJ1ZjEgPSBtYWxsb2MoQlVGX1NJWkUp OworCQlkYXRhLT5jcHVfY29udGV4dFtpXS5idWYyID0gbWFsbG9jKEJVRl9TSVpFKTsKKwkJZGF0 YS0+Y3B1X2NvbnRleHRbaV0uaWQgPSBpOworCQlkYXRhLT5jcHVfY29udGV4dFtpXS5kYXRhID0g ZGF0YTsKKwkJcHRocmVhZF9jcmVhdGUoJmRhdGEtPmNwdV90aHJlYWRbaV0sIE5VTEwsIGNwdV9s b2FkLCAodm9pZCopJmRhdGEtPmNwdV9jb250ZXh0W2ldKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lk IHN0b3BfY3B1X3RocmVhZHMoc3RydWN0IGRhdGEgKmRhdGEpCit7CisJaW50IGk7CisJZm9yIChp ID0gMDsgaSA8IGRhdGEtPm51bWJlcl9vZl9jb3JlcztpKyspIHsKKwkJZGF0YS0+Y3B1X3RocmVh ZF9zdG9wW2ldID0gdHJ1ZTsKKwkJcHRocmVhZF9qb2luKGRhdGEtPmNwdV90aHJlYWRbaV0sIE5V TEwpOworCQlmcmVlKGRhdGEtPmNwdV9jb250ZXh0W2ldLmJ1ZjEpOworCQlmcmVlKGRhdGEtPmNw dV9jb250ZXh0W2ldLmJ1ZjIpOworCX0KK30KKworc3RhdGljIHZvaWQgY3JlYXRlX2ZyYW1lYnVm ZmVycyhzdHJ1Y3QgZGF0YSAqZGF0YSkKK3sKKwlpbnQgaSwgajsKKwl1aW50NjRfdCBjdXJzb3Jf d2lkdGgsIGN1cnNvcl9oZWlnaHQ7CisJaWd0X291dHB1dF90ICpvdXRwdXQ7CisKKwlkb19vcl9k aWUoZHJtR2V0Q2FwKGRhdGEtPmRybV9mZCwgRFJNX0NBUF9DVVJTT1JfV0lEVEgsICZjdXJzb3Jf d2lkdGgpKTsKKwlkb19vcl9kaWUoZHJtR2V0Q2FwKGRhdGEtPmRybV9mZCwgRFJNX0NBUF9DVVJT T1JfSEVJR0hULCAmY3Vyc29yX2hlaWdodCkpOworCisJaSA9IDA7CisJZm9yX2VhY2hfY29ubmVj dGVkX291dHB1dCgmZGF0YS0+ZGlzcGxheSwgb3V0cHV0KSB7CisJCWlmICghZGF0YS0+Y3Vyc29y X2ZiW2ldLmZiX2lkKSB7CisJCQlpZ3RfY3JlYXRlX2NvbG9yX2ZiKGRhdGEtPmRybV9mZCwgY3Vy c29yX3dpZHRoLCBjdXJzb3JfaGVpZ2h0LAorCQkJCQlkYXRhLT5mb3JtYXQsCisJCQkJCWRhdGEt Pm1vZGlmaWVyLAorCQkJCQkxLjAsMC4wLDAuMCwKKwkJCQkJJmRhdGEtPmN1cnNvcl9mYltpXSk7 CisJCX0KKwkJZm9yIChqID0gMDsgaiA8IGRhdGEtPm51bV9wbGFuZXNbaV07aisrKSB7CisJCQlp ZiAoIWRhdGEtPmZiW2kgKiBNQVhfUExBTkVTICsgal0uZmJfaWQpIHsKKwkJCQlpZ3RfY3JlYXRl X2NvbG9yX3BhdHRlcm5fZmIoZGF0YS0+ZHJtX2ZkLAorCQkJCSAgICBkYXRhLT5oaWdoZXN0X21v ZGVbaV0tPmhkaXNwbGF5LAorCQkJCSAgICBkYXRhLT5oaWdoZXN0X21vZGVbaV0tPnZkaXNwbGF5 LAorCQkJCSAgICBkYXRhLT5mb3JtYXQsCisJCQkJICAgIGRhdGEtPm1vZGlmaWVyLAorCQkJCSAg ICAwLjAsIDEuMCwgMC4wLCAmZGF0YS0+ZmJbaSAqIE1BWF9QTEFORVMgKyBqXSk7CisJCQl9CisJ CX0KKwkJaWYgKCsraSA9PSBJR1RfTUFYX1BJUEVTKQorCQkJYnJlYWs7CisJfQorfQorCitzdGF0 aWMgdm9pZCBkZXN0cm95X2ZyYW1lYnVmZmVycyhzdHJ1Y3QgZGF0YSAqZGF0YSkKK3sKKwlpbnQg aSwgajsKKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKKworCWkgPSAwOworCWZvcl9lYWNoX2Nvbm5l Y3RlZF9vdXRwdXQoJmRhdGEtPmRpc3BsYXksIG91dHB1dCkgeworCQlmb3IgKGogPSAwO2ogPCBN QVhfUExBTkVTOyBqKyspIHsKKwkJCWlmIChkYXRhLT5mYltpICogTUFYX1BMQU5FUyArIGpdLmZi X2lkKSB7CisJCQkJaWd0X3BsYW5lX3NldF9mYigmZGF0YS0+ZGlzcGxheS5waXBlc1tpXS5wbGFu ZXNbal0sIE5VTEwpOworCQkJCWlndF9yZW1vdmVfZmIoZGF0YS0+ZGlzcGxheS5kcm1fZmQsICZk YXRhLT5mYltpICogTUFYX1BMQU5FUyArIGpdKTsKKwkJCQlkYXRhLT5mYltpICogTUFYX1BMQU5F UyArIGpdLmZiX2lkID0gMDsKKwkJCX0KKwkJfQorCQlpZiAoZGF0YS0+Y3Vyc29yX2ZiW2ldLmZi X2lkKSB7CisJCQlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmRpc3BsYXkuZHJtX2ZkLCAmZGF0YS0+Y3Vy c29yX2ZiW2ldKTsKKwkJCWRhdGEtPmN1cnNvcl9mYltpXS5mYl9pZCA9IDA7CisJCX0KKwkJaWYg KCsraSA9PSBJR1RfTUFYX1BJUEVTKQorCQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBw cmVwYXJlX3Rlc3Qoc3RydWN0IGRhdGEgKmRhdGEpCit7CisJaW50IGksajsKKwlpZ3Rfb3V0cHV0 X3QgKm91dHB1dDsKKworCWRhdGEtPm51bWJlcl9vZl9jb3JlcyA9IG1pbihzeXNjb25mKF9TQ19O UFJPQ0VTU09SU19PTkxOKSwgTUFYX0NPUkVTKTsKKworCWZvciAoaSA9IDA7IGkgPCBJR1RfTUFY X1BJUEVTOyBpKyspIHsKKwkJZm9yIChqID0gMDtqIDwgTUFYX1BMQU5FUzsgaisrKQorCQkJZGF0 YS0+ZmJbaSAqIE1BWF9QTEFORVMgKyBqXS5mYl9pZCA9IDA7CisJCWRhdGEtPmN1cnNvcl9mYltp XS5mYl9pZCA9IDA7CisJCWRhdGEtPm51bV9wbGFuZXNbaV0gPSAtMTsKKwkJZGF0YS0+bGFzdF9t b2RlW2ldID0gTlVMTDsKKwkJc2VtX2luaXQoJmRhdGEtPmdwdV90aHJlYWRfcGF1c2VfYWNrW2ld LCAwLCAwKTsKKwl9CisKKwlzdGFydF9jcHVfdGhyZWFkcyhkYXRhKTsKKworCWRhdGEtPm1vZGVf cmVzb3VyY2VzID0gZHJtTW9kZUdldFJlc291cmNlcyhkYXRhLT5kcm1fZmQpOworCWlmICghZGF0 YS0+bW9kZV9yZXNvdXJjZXMpIHsKKwkJaWd0X3dhcm4oImRybU1vZGVHZXRSZXNvdXJjZXMgZmFp bGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJcmV0dXJuOworCX0KKworCW1lbXNldChk YXRhLT5oaWdoZXN0X21vZGUsIDAsIHNpemVvZihkcm1Nb2RlTW9kZUluZm8gKikgKiBJR1RfTUFY X1BJUEVTKTsKKworCWZpbGxfY29ubmVjdG9yX3RvX3BpcGVfYXJyYXkoZGF0YSwgZGF0YS0+bW9k ZV9yZXNvdXJjZXMsIGRhdGEtPmNvbm5lY3RvcnMpOworCisJaSA9IDA7CisJZm9yX2VhY2hfY29u bmVjdGVkX291dHB1dCgmZGF0YS0+ZGlzcGxheSwgb3V0cHV0KSB7CisJCWRybU1vZGVDb25uZWN0 b3IgKmNvbm5lY3RvciA9IChkcm1Nb2RlQ29ubmVjdG9yICopZGF0YS0+Y29ubmVjdG9yc1tpXTsK KwkJaWYgKCFjb25uZWN0b3IpCisJCQljb250aW51ZTsKKwkJaWYgKCFkYXRhLT5oaWdoZXN0X21v ZGVbaV0pIHsKKwkJCWlmIChjb25uZWN0b3ItPmNvdW50X21vZGVzKSB7CisJCQkJZGF0YS0+aGln aGVzdF9tb2RlW2ldID0gZmluZF9oaWdoZXN0X21vZGUoY29ubmVjdG9yKTsKKwkJCX0KKwkJfQor CQlpZ3RfYXNzZXJ0KGRhdGEtPmhpZ2hlc3RfbW9kZVtpXSk7CisJCWlndF9pbmZvKCJVc2luZyBt b2RlOiBcbiIpOworCQlrbXN0ZXN0X2R1bXBfbW9kZShkYXRhLT5oaWdoZXN0X21vZGVbaV0pOwor CisJCWlmIChkYXRhLT5udW1fcGxhbmVzW2ldID09IC0xKQorCQkJZGF0YS0+bnVtX3BsYW5lc1tp XSA9IGRhdGEtPmRpc3BsYXkucGlwZXNbaV0ubl9wbGFuZXM7CisKKwkJaWd0X2luZm8oIk1heCBu dW1iZXIgb2YgcGxhbmVzIGlzICVkIGZvciBwaXBlICVkXG4iLCBkYXRhLT5udW1fcGxhbmVzW2ld LCBpKTsKKworCQlpZiAoKytpID09IElHVF9NQVhfUElQRVMpCisJCQlicmVhazsKKwl9CisKKwlj cmVhdGVfZnJhbWVidWZmZXJzKGRhdGEpOworCisJc3RhcnRfZ3B1X3RocmVhZHMoZGF0YSk7Cit9 CisKK3N0YXRpYyB2b2lkIGZpbmlzaF90ZXN0KHN0cnVjdCBkYXRhICpkYXRhKQoreworCWludCBp OworCisJc3RvcF9ncHVfdGhyZWFkcyhkYXRhKTsKKworCS8qCisJICogQXMgd2UgY2hhbmdlIHRp bGluZy9mb3JtYXQgd2UgbmVlZCBhIG5ldyBGQgorCSAqLworCWRlc3Ryb3lfZnJhbWVidWZmZXJz KGRhdGEpOworCWZvciAoaSA9IDA7IGkgPCBJR1RfTUFYX1BJUEVTOyBpKyspIHsKKwkJZGF0YS0+ bnVtX3BsYW5lc1tpXSA9IC0xOworCQlkYXRhLT5sYXN0X21vZGVbaV0gPSBOVUxMOworCX0KKwor CXN0b3BfY3B1X3RocmVhZHMoZGF0YSk7CisKKwlyZWxlYXNlX2Nvbm5lY3RvcnMoZGF0YS0+Y29u bmVjdG9ycyk7CisKKwlkcm1Nb2RlRnJlZVJlc291cmNlcyhkYXRhLT5tb2RlX3Jlc291cmNlcyk7 Cit9CisKK3N0cnVjdCBkYXRhIGRhdGEgPSB7CisJLmZvcm1hdCA9IERSTV9GT1JNQVRfWFJHQjg4 ODgsCisJLm1vZGlmaWVyID0gRFJNX0ZPUk1BVF9NT0RfTElORUFSLAorCS5kZXZpZCA9IDAsCit9 OworCitpZ3RfbWFpbgoreworCXVpbnQ4X3QgZm9ybWF0X2lkeCA9IDAsIHRpbGluZ19pZHggPSAw OworCisJaWd0X2ZpeHR1cmUgeworCQlkYXRhLmRybV9mZCA9IGRhdGEuZGlzcGxheS5kcm1fZmQg PSBkcm1fb3Blbl9kcml2ZXJfbWFzdGVyKERSSVZFUl9BTlkpOworCisJCWttc3Rlc3Rfc2V0X3Z0 X2dyYXBoaWNzX21vZGUoKTsKKworCQlpZ3RfZGlzcGxheV9yZXF1aXJlKCZkYXRhLmRpc3BsYXks IGRhdGEuZGlzcGxheS5kcm1fZmQpOworCQlpZ3RfcmVxdWlyZShkYXRhLmRpc3BsYXkuaXNfYXRv bWljKTsKKwkJaWd0X2Rpc3BsYXlfcmVxdWlyZV9vdXRwdXQoJmRhdGEuZGlzcGxheSk7CisJfQor CisJZm9yIChmb3JtYXRfaWR4ID0gMDsgZm9ybWF0X2lkeCA8IE5fRk9STUFUUzsgZm9ybWF0X2lk eCsrKQorCQlmb3IgKHRpbGluZ19pZHggPSAwOyB0aWxpbmdfaWR4IDwgTl9USUxJTkdfTUVUSE9E UzsgdGlsaW5nX2lkeCsrKSB7CisJCQlkYXRhLmZvcm1hdCA9IGZvcm1hdHNbZm9ybWF0X2lkeF07 CisJCQlkYXRhLm1vZGlmaWVyID0gdGlsaW5nc1t0aWxpbmdfaWR4XTsKKworCQkJaWd0X2ZpeHR1 cmUgeworCQkJCXByZXBhcmVfdGVzdCgmZGF0YSk7CisJCQl9CisKKwkJCWlndF9zdWJ0ZXN0X2Yo InN0cmVzcy0lcy0lcyIsCisJCQkgICAgICBmb3JtYXRfc3RyKGZvcm1hdF9pZHgpLAorCQkJICAg ICAgdGlsaW5nX3N0cih0aWxpbmdfaWR4KSkgeworCisJCQkJc3RyZXNzKCZkYXRhKTsKKworCQkJ fQorCisJCQlpZ3RfZml4dHVyZSB7CisJCQkJZmluaXNoX3Rlc3QoJmRhdGEpOworCQkJfQorCQl9 CisKKwlpZ3RfZml4dHVyZSB7CisJCWlndF9kaXNwbGF5X2ZpbmkoJmRhdGEuZGlzcGxheSk7CisJ fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL21lc29u LmJ1aWxkIGIvdGVzdHMvbWVzb24uYnVpbGQKaW5kZXggYTdiMmIzMjIuLmI2ZDdlZDQ1IDEwMDY0 NAotLS0gYS90ZXN0cy9tZXNvbi5idWlsZAorKysgYi90ZXN0cy9tZXNvbi5idWlsZApAQCAtNTAs NiArNTAsNyBAQCB0ZXN0X3Byb2dzID0gWwogCSdrbXNfcGxhbmVfbXVsdGlwbGUnLAogCSdrbXNf cGxhbmVfc2NhbGluZycsCiAJJ2ttc19wcmltZScsCisJJ2ttc19wbGFuZV9zdHJlc3MnLAogCSdr bXNfcHJvcF9ibG9iJywKIAkna21zX3Byb3BlcnRpZXMnLAogCSdrbXNfcHNyJywKLS0gCjIuMTcu MQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KaWd0LWRl diBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2