From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lionel Landwerlin Subject: [PATCH v3 02/12] tests/perf: add per context filtering test for gen8+ Date: Wed, 23 Aug 2017 17:03:29 +0100 Message-ID: <20170823160339.6382-3-lionel.g.landwerlin@intel.com> References: <20170823160339.6382-1-lionel.g.landwerlin@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5D1E56E058 for ; Wed, 23 Aug 2017 16:03:55 +0000 (UTC) In-Reply-To: <20170823160339.6382-1-lionel.g.landwerlin@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogUm9iZXJ0IEJyYWdnIDxyb2JlcnRAc2l4YnluaW5lLm9yZz4KClNpZ25lZC1vZmYtYnk6 IFJvYmVydCBCcmFnZyA8cm9iZXJ0QHNpeGJ5bmluZS5vcmc+ClNpZ25lZC1vZmYtYnk6IExpb25l bCBMYW5kd2VybGluIDxsaW9uZWwuZy5sYW5kd2VybGluQGludGVsLmNvbT4KLS0tCiB0ZXN0cy9w ZXJmLmMgfCA3NzcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKystLS0KIDEgZmlsZSBjaGFuZ2VkLCA3NDUgaW5zZXJ0aW9ucygrKSwgMzIgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvdGVzdHMvcGVyZi5jIGIvdGVzdHMvcGVyZi5jCmluZGV4 IGNhNWJmZGM1Li41MDU4MzE1YyAxMDA2NDQKLS0tIGEvdGVzdHMvcGVyZi5jCisrKyBiL3Rlc3Rz L3BlcmYuYwpAQCAtNDgsNyArNDgsOSBAQCBJR1RfVEVTVF9ERVNDUklQVElPTigiVGVzdCB0aGUg aTkxNSBwZXJmIG1ldHJpY3Mgc3RyZWFtaW5nIGludGVyZmFjZSIpOwogI2RlZmluZSBPQVJFUE9S VF9SRUFTT05fTUFTSyAgICAgICAgICAgMHgzZgogI2RlZmluZSBPQVJFUE9SVF9SRUFTT05fU0hJ RlQgICAgICAgICAgMTkKICNkZWZpbmUgT0FSRVBPUlRfUkVBU09OX1RJTUVSICAgICAgICAgICgx PDwwKQorI2RlZmluZSBPQVJFUE9SVF9SRUFTT05fSU5URVJOQUwgICAgICAgKDM8PDEpCiAjZGVm aW5lIE9BUkVQT1JUX1JFQVNPTl9DVFhfU1dJVENIICAgICAoMTw8MykKKyNkZWZpbmUgT0FSRVBP UlRfUkVBU09OX0dPICAgICAgICAgICAgICgxPDw0KQogI2RlZmluZSBPQVJFUE9SVF9SRUFTT05f Q0xLX1JBVElPICAgICAgKDE8PDUpCiAKICNkZWZpbmUgR0ZYX09QX1BJUEVfQ09OVFJPTCAgICAg KCgzIDw8IDI5KSB8ICgzIDw8IDI3KSB8ICgyIDw8IDI0KSkKQEAgLTU3NCw2ICs1NzYsMjIgQEAg b2FfZXhwb25lbnRfdG9fbnMoaW50IGV4cG9uZW50KQogICAgICAgIHJldHVybiAxMDAwMDAwMDAw VUxMICogKDJVTEwgPDwgZXhwb25lbnQpIC8gdGltZXN0YW1wX2ZyZXF1ZW5jeTsKIH0KIAorc3Rh dGljIGJvb2wKK29hX3JlcG9ydF9jdHhfaXNfdmFsaWQodWludDMyX3QgKnJlcG9ydCkKK3sKKwlp ZiAoSVNfSEFTV0VMTChkZXZpZCkpIHsKKwkJcmV0dXJuIGZhbHNlOyAvKiBUT0RPICovCisJfSBl bHNlIGlmIChJU19HRU44KGRldmlkKSkgeworCQlyZXR1cm4gcmVwb3J0WzBdICYgKDF1bCA8PCAy NSk7CisJfSBlbHNlIGlmIChJU19HRU45KGRldmlkKSkgeworCQlyZXR1cm4gcmVwb3J0WzBdICYg KDF1bCA8PCAxNik7CisJfQorCisJLyogTmVlZCB0byB1cGRhdGUgdGhpcyBmdW5jdGlvbiBmb3Ig bmV3ZXIgR2VuLiAqLworCWlndF9hc3NlcnQoISJyZWFjaGVkIik7Cit9CisKKwogc3RhdGljIHZv aWQKIGhzd19zYW5pdHlfY2hlY2tfcmVuZGVyX2Jhc2ljX3JlcG9ydHModWludDMyX3QgKm9hX3Jl cG9ydDAsIHVpbnQzMl90ICpvYV9yZXBvcnQxLAogCQkJCSAgICAgIGVudW0gZHJtX2k5MTVfb2Ff Zm9ybWF0IGZtdCkKQEAgLTY3OCw2ICs2OTYsMTAwIEBAIGdlbjhfNDBiaXRfYV9kZWx0YSh1aW50 NjRfdCB2YWx1ZTAsIHVpbnQ2NF90IHZhbHVlMSkKIAkJcmV0dXJuIHZhbHVlMSAtIHZhbHVlMDsK IH0KIAorc3RhdGljIHZvaWQKK2FjY3VtdWxhdGVfdWludDMyKHNpemVfdCBvZmZzZXQsCisJCSAg dWludDMyX3QgKnJlcG9ydDAsCisgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqcmVwb3J0MSwK KyAgICAgICAgICAgICAgICAgIHVpbnQ2NF90ICpkZWx0YSkKK3sKKwl1aW50MzJfdCB2YWx1ZTAg PSAqKHVpbnQzMl90ICopKCgodWludDhfdCAqKXJlcG9ydDApICsgb2Zmc2V0KTsKKwl1aW50MzJf dCB2YWx1ZTEgPSAqKHVpbnQzMl90ICopKCgodWludDhfdCAqKXJlcG9ydDEpICsgb2Zmc2V0KTsK KworCSpkZWx0YSArPSAodWludDMyX3QpKHZhbHVlMSAtIHZhbHVlMCk7Cit9CisKK3N0YXRpYyB2 b2lkCithY2N1bXVsYXRlX3VpbnQ0MChpbnQgYV9pbmRleCwKKyAgICAgICAgICAgICAgICAgIHVp bnQzMl90ICpyZXBvcnQwLAorICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnJlcG9ydDEsCisJ CSAgZW51bSBkcm1faTkxNV9vYV9mb3JtYXQgZm9ybWF0LAorICAgICAgICAgICAgICAgICAgdWlu dDY0X3QgKmRlbHRhKQoreworCXVpbnQ2NF90IHZhbHVlMCA9IGdlbjhfcmVhZF80MGJpdF9hX2Nv dW50ZXIocmVwb3J0MCwgZm9ybWF0LCBhX2luZGV4KSwKKwkJIHZhbHVlMSA9IGdlbjhfcmVhZF80 MGJpdF9hX2NvdW50ZXIocmVwb3J0MSwgZm9ybWF0LCBhX2luZGV4KTsKKworCSpkZWx0YSArPSBn ZW44XzQwYml0X2FfZGVsdGEodmFsdWUwLCB2YWx1ZTEpOworfQorCitzdGF0aWMgdm9pZAorYWNj dW11bGF0ZV9yZXBvcnRzKHN0cnVjdCBhY2N1bXVsYXRvciAqYWNjdW11bGF0b3IsCisJCSAgIHVp bnQzMl90ICpzdGFydCwKKwkJICAgdWludDMyX3QgKmVuZCkKK3sKKwllbnVtIGRybV9pOTE1X29h X2Zvcm1hdCBmb3JtYXQgPSBhY2N1bXVsYXRvci0+Zm9ybWF0OworCXVpbnQ2NF90ICpkZWx0YXMg PSBhY2N1bXVsYXRvci0+ZGVsdGFzOworCWludCBpZHggPSAwOworCisJaWYgKGludGVsX2dlbihk ZXZpZCkgPj0gOCkgeworCQkvKiB0aW1lc3RhbXAgKi8KKwkJYWNjdW11bGF0ZV91aW50MzIoNCwg c3RhcnQsIGVuZCwgZGVsdGFzICsgaWR4KyspOworCisJCS8qIGNsb2NrIGN5Y2xlcyAqLworCQlh Y2N1bXVsYXRlX3VpbnQzMigxMiwgc3RhcnQsIGVuZCwgZGVsdGFzICsgaWR4KyspOworCX0gZWxz ZSB7CisJCS8qIHRpbWVzdGFtcCAqLworCQlhY2N1bXVsYXRlX3VpbnQzMig0LCBzdGFydCwgZW5k LCBkZWx0YXMgKyBpZHgrKyk7CisJfQorCisJZm9yIChpbnQgaSA9IDA7IGkgPCBvYV9mb3JtYXRz W2Zvcm1hdF0ubl9hNDA7IGkrKykKKwkJYWNjdW11bGF0ZV91aW50NDAoaSwgc3RhcnQsIGVuZCwg Zm9ybWF0LCBkZWx0YXMgKyBpZHgrKyk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IG9hX2Zvcm1h dHNbZm9ybWF0XS5uX2E7IGkrKykgeworCQlhY2N1bXVsYXRlX3VpbnQzMihvYV9mb3JtYXRzW2Zv cm1hdF0uYV9vZmYgKyA0ICogaSwKKwkJCQkgIHN0YXJ0LCBlbmQsIGRlbHRhcyArIGlkeCsrKTsK Kwl9CisKKwlmb3IgKGludCBpID0gMDsgaSA8IG9hX2Zvcm1hdHNbZm9ybWF0XS5uX2I7IGkrKykg eworCQlhY2N1bXVsYXRlX3VpbnQzMihvYV9mb3JtYXRzW2Zvcm1hdF0uYl9vZmYgKyA0ICogaSwK KwkJCQkgIHN0YXJ0LCBlbmQsIGRlbHRhcyArIGlkeCsrKTsKKwl9CisKKwlmb3IgKGludCBpID0g MDsgaSA8IG9hX2Zvcm1hdHNbZm9ybWF0XS5uX2M7IGkrKykgeworCQlhY2N1bXVsYXRlX3VpbnQz MihvYV9mb3JtYXRzW2Zvcm1hdF0uY19vZmYgKyA0ICogaSwKKwkJCQkgIHN0YXJ0LCBlbmQsIGRl bHRhcyArIGlkeCsrKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCithY2N1bXVsYXRvcl9wcmludChz dHJ1Y3QgYWNjdW11bGF0b3IgKmFjY3VtdWxhdG9yLCBjb25zdCBjaGFyICp0aXRsZSkKK3sKKwll bnVtIGRybV9pOTE1X29hX2Zvcm1hdCBmb3JtYXQgPSBhY2N1bXVsYXRvci0+Zm9ybWF0OworCXVp bnQ2NF90ICpkZWx0YXMgPSBhY2N1bXVsYXRvci0+ZGVsdGFzOworCWludCBpZHggPSAwOworCisJ aWd0X2RlYnVnKCIlczpcbiIsIHRpdGxlKTsKKwlpZiAoaW50ZWxfZ2VuKGRldmlkKSA+PSA4KSB7 CisJCWlndF9kZWJ1ZygiXHR0aW1lIGRlbHRhID0gJWx1XG4iLCBkZWx0YXNbaWR4KytdKTsKKwkJ aWd0X2RlYnVnKCJcdGNsb2NrIGN5Y2xlIGRlbHRhID0gJWx1XG4iLCBkZWx0YXNbaWR4KytdKTsK KworCQlmb3IgKGludCBpID0gMDsgaSA8IG9hX2Zvcm1hdHNbZm9ybWF0XS5uX2E0MDsgaSsrKQor CQkJaWd0X2RlYnVnKCJcdEEldSA9ICVsdVxuIiwgaSwgZGVsdGFzW2lkeCsrXSk7CisJfSBlbHNl IHsKKwkJaWd0X2RlYnVnKCJcdHRpbWUgZGVsdGEgPSAlbHVcbiIsIGRlbHRhc1tpZHgrK10pOwor CX0KKworCWZvciAoaW50IGkgPSAwOyBpIDwgb2FfZm9ybWF0c1tmb3JtYXRdLm5fYTsgaSsrKSB7 CisJCWludCBhX2lkID0gb2FfZm9ybWF0c1tmb3JtYXRdLmZpcnN0X2EgKyBpOworCQlpZ3RfZGVi dWcoIlx0QSV1ID0gJWx1XG4iLCBhX2lkLCBkZWx0YXNbaWR4KytdKTsKKwl9CisKKwlmb3IgKGlu dCBpID0gMDsgaSA8IG9hX2Zvcm1hdHNbZm9ybWF0XS5uX2E7IGkrKykKKwkJaWd0X2RlYnVnKCJc dEIldSA9ICVsdVxuIiwgaSwgZGVsdGFzW2lkeCsrXSk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8 IG9hX2Zvcm1hdHNbZm9ybWF0XS5uX2M7IGkrKykKKwkJaWd0X2RlYnVnKCJcdEMldSA9ICVsdVxu IiwgaSwgZGVsdGFzW2lkeCsrXSk7Cit9CisKIC8qIFRoZSBUZXN0T2EgbWV0cmljIHNldCBpcyBk ZXNpZ25lZCBzbyAqLwogc3RhdGljIHZvaWQKIGdlbjhfc2FuaXR5X2NoZWNrX3Rlc3Rfb2FfcmVw b3J0cyh1aW50MzJfdCAqb2FfcmVwb3J0MCwgdWludDMyX3QgKm9hX3JlcG9ydDEsCkBAIC05MjYs NiArMTAzOCw2MiBAQCBndF9mcmVxdWVuY3lfcmFuZ2VfcmVzdG9yZSh2b2lkKQogCWd0X21heF9m cmVxX21oeiA9IGd0X21heF9mcmVxX21oel9zYXZlZDsKIH0KIAorc3RhdGljIGludAoraTkxNV9y ZWFkX3JlcG9ydHNfdW50aWxfdGltZXN0YW1wKGVudW0gZHJtX2k5MTVfb2FfZm9ybWF0IG9hX2Zv cm1hdCwKKwkJCQkgIHVpbnQ4X3QgKmJ1ZiwKKwkJCQkgIHVpbnQzMl90IG1heF9zaXplLAorCQkJ CSAgdWludDMyX3Qgc3RhcnRfdGltZXN0YW1wLAorCQkJCSAgdWludDMyX3QgZW5kX3RpbWVzdGFt cCkKK3sKKwlzaXplX3QgZm9ybWF0X3NpemUgPSBvYV9mb3JtYXRzW29hX2Zvcm1hdF0uc2l6ZTsK Kwl1aW50MzJfdCBsYXN0X3NlZW5fdGltZXN0YW1wID0gc3RhcnRfdGltZXN0YW1wOworCWludCB0 b3RhbF9sZW4gPSAwOworCisJd2hpbGUgKGxhc3Rfc2Vlbl90aW1lc3RhbXAgPCBlbmRfdGltZXN0 YW1wKSB7CisJCWludCBvZmZzZXQsIGxlbjsKKworCQkvKiBSdW5uaW5nIG91dCBvZiBzcGFjZS4g Ki8KKwkJaWYgKChtYXhfc2l6ZSAtIHRvdGFsX2xlbikgPCBmb3JtYXRfc2l6ZSkgeworCQkJaWd0 X3dhcm4oInJ1biBvdXQgb2Ygc3BhY2UgYmVmb3JlIHJlYWNoaW5nICIKKwkJCQkgImVuZCB0aW1l c3RhbXAgKCV1LyV1KVxuIiwKKwkJCQkgbGFzdF9zZWVuX3RpbWVzdGFtcCwgZW5kX3RpbWVzdGFt cCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQl3aGlsZSAoKGxlbiA9IHJlYWQoc3RyZWFtX2Zk LCAmYnVmW3RvdGFsX2xlbl0sCisJCQkJICAgbWF4X3NpemUgLSB0b3RhbF9sZW4pKSA8IDAgJiYK KwkJICAgICAgIGVycm5vID09IEVJTlRSKQorCQkJOworCisJCS8qIEludGVudGlvbmFsbHkgcmV0 dXJuIGFuIGVycm9yLiAqLworCQlpZiAobGVuIDw9IDApIHsKKwkJCWlmIChlcnJubyA9PSBFQUdB SU4pCisJCQkJcmV0dXJuIHRvdGFsX2xlbjsKKwkJCWVsc2UgeworCQkJCWlndF93YXJuKCJlcnJv ciByZWFkIE9BIHN0cmVhbSA6ICVpXG4iLCBlcnJubyk7CisJCQkJcmV0dXJuIC0xOworCQkJfQor CQl9CisKKwkJb2Zmc2V0ID0gdG90YWxfbGVuOworCQl0b3RhbF9sZW4gKz0gbGVuOworCisJCXdo aWxlIChvZmZzZXQgPCB0b3RhbF9sZW4pIHsKKwkJICBjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfcGVy Zl9yZWNvcmRfaGVhZGVyICpoZWFkZXIgPQorCQkgICAgKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9w ZXJmX3JlY29yZF9oZWFkZXIgKikgJmJ1ZltvZmZzZXRdOworCQkgIHVpbnQzMl90ICpyZXBvcnQg PSAodWludDMyX3QgKikgKGhlYWRlciArIDEpOworCisJCSAgaWYgKGhlYWRlci0+dHlwZSA9PSBE Uk1fSTkxNV9QRVJGX1JFQ09SRF9TQU1QTEUpCisJCSAgICBsYXN0X3NlZW5fdGltZXN0YW1wID0g cmVwb3J0WzFdOworCisJCSAgb2Zmc2V0ICs9IGhlYWRlci0+c2l6ZTsKKwkJfQorCX0KKworCXJl dHVybiB0b3RhbF9sZW47Cit9CisKKwogLyogQ0FQX1NZU19BRE1JTiBpcyByZXF1aXJlZCB0byBv cGVuIHN5c3RlbSB3aWRlIG1ldHJpY3MsIHVubGVzcyB0aGUgc3lzdGVtCiAgKiBjb250cm9sIHBh cmFtZXRlciBkZXYuaTkxNS5wZXJmX3N0cmVhbV9wYXJhbm9pZCA9PSAwICovCiBzdGF0aWMgdm9p ZApAQCAtMTM0NCw2ICsxNTEyLDcwIEBAIHByaW50X3JlcG9ydHModWludDMyX3QgKm9hX3JlcG9y dDAsIHVpbnQzMl90ICpvYV9yZXBvcnQxLCBpbnQgZm10KQogCX0KIH0KIAorLyogRGVidWcgZnVu Y3Rpb24sIG9ubHkgdXNlZnVsIHdoZW4gcmVwb3J0cyBkb24ndCBtYWtlIHNlbnNlLiAqLworI2lm IDAKK3N0YXRpYyB2b2lkCitwcmludF9yZXBvcnQodWludDMyX3QgKnJlcG9ydCwgaW50IGZtdCkK K3sKKwlpZ3RfZGVidWcoIlRJTUVTVEFNUDogJSJQUkl1MzIiXG4iLCByZXBvcnRbMV0pOworCisJ aWYgKElTX0hBU1dFTEwoZGV2aWQpICYmIG9hX2Zvcm1hdHNbZm10XS5uX2MgPT0gMCkgeworCQlp Z3RfZGVidWcoIkNMT0NLID0gTi9BXG4iKTsKKwl9IGVsc2UgeworCQl1aW50MzJfdCBjbG9jayA9 IHJlYWRfcmVwb3J0X3RpY2tzKHJlcG9ydCwgZm10KTsKKworCQlpZ3RfZGVidWcoIkNMT0NLOiAl IlBSSXUzMiJcbiIsIGNsb2NrKTsKKwl9CisKKwlpZiAoaW50ZWxfZ2VuKGRldmlkKSA+PSA4KSB7 CisJCXVpbnQzMl90IHNsaWNlX2ZyZXEsIHVuc2xpY2VfZnJlcTsKKwkJY29uc3QgY2hhciAqcmVh c29uID0gZ2VuOF9yZWFkX3JlcG9ydF9yZWFzb24ocmVwb3J0KTsKKworCQlnZW44X3JlYWRfcmVw b3J0X2Nsb2NrX3JhdGlvcyhyZXBvcnQsICZzbGljZV9mcmVxLCAmdW5zbGljZV9mcmVxKTsKKwor CQlpZ3RfZGVidWcoIlNMSUNFIENMSzogJXVtaHpcbiIsIHNsaWNlX2ZyZXEpOworCQlpZ3RfZGVi dWcoIlVOU0xJQ0UgQ0xLOiAldW1oelxuIiwgdW5zbGljZV9mcmVxKTsKKwkJaWd0X2RlYnVnKCJS RUFTT046IFwiJXNcIlxuIiwgcmVhc29uKTsKKwkJaWd0X2RlYnVnKCJDVFggSUQ6ICUiUFJJdTMy Ii8lIlBSSXgzMiJcbiIsIHJlcG9ydFsyXSwgcmVwb3J0WzJdKTsKKwl9CisKKwkvKiBHZW44KyBo YXMgc29tZSA0MGJpdCBBIGNvdW50ZXJzLi4uICovCisJZm9yIChpbnQgaiA9IDA7IGogPCBvYV9m b3JtYXRzW2ZtdF0ubl9hNDA7IGorKykgeworCQl1aW50NjRfdCB2YWx1ZSA9IGdlbjhfcmVhZF80 MGJpdF9hX2NvdW50ZXIocmVwb3J0LCBmbXQsIGopOworCisJCWlmICh1bmRlZmluZWRfYV9jb3Vu dGVyc1tqXSkKKwkJCWNvbnRpbnVlOworCisJCWlndF9kZWJ1ZygiQSVkOiAlIlBSSXU2NCJcbiIs IGosIHZhbHVlKTsKKwl9CisKKwlmb3IgKGludCBqID0gMDsgaiA8IG9hX2Zvcm1hdHNbZm10XS5u X2E7IGorKykgeworCQl1aW50MzJfdCAqYSA9ICh1aW50MzJfdCAqKSgoKHVpbnQ4X3QgKilyZXBv cnQpICsKKwkJCQkJICAgb2FfZm9ybWF0c1tmbXRdLmFfb2ZmKTsKKwkJaW50IGFfaWQgPSBvYV9m b3JtYXRzW2ZtdF0uZmlyc3RfYSArIGo7CisKKwkJaWYgKHVuZGVmaW5lZF9hX2NvdW50ZXJzW2Ff aWRdKQorCQkJY29udGludWU7CisKKwkJaWd0X2RlYnVnKCJBJWQ6ICUiUFJJdTMyIlxuIiwgYV9p ZCwgYVtqXSk7CisJfQorCisJZm9yIChpbnQgaiA9IDA7IGogPCBvYV9mb3JtYXRzW2ZtdF0ubl9i OyBqKyspIHsKKwkJdWludDMyX3QgKmIgPSAodWludDMyX3QgKikoKCh1aW50OF90ICopcmVwb3J0 KSArCisJCQkJCSAgIG9hX2Zvcm1hdHNbZm10XS5iX29mZik7CisKKwkJaWd0X2RlYnVnKCJCJWQ6 ICUiUFJJdTMyIlxuIiwgaiwgYltqXSk7CisJfQorCisJZm9yIChpbnQgaiA9IDA7IGogPCBvYV9m b3JtYXRzW2ZtdF0ubl9jOyBqKyspIHsKKwkJdWludDMyX3QgKmMgPSAodWludDMyX3QgKikoKCh1 aW50OF90ICopcmVwb3J0KSArCisJCQkJCSAgIG9hX2Zvcm1hdHNbZm10XS5jX29mZik7CisKKwkJ aWd0X2RlYnVnKCJDJWQ6ICUiUFJJdTMyIlxuIiwgaiwgY1tqXSk7CisJfQorfQorI2VuZGlmCisK IHN0YXRpYyB2b2lkCiB0ZXN0X29hX2Zvcm1hdHModm9pZCkKIHsKQEAgLTI0NjgsMTQgKzI3MDAs OCBAQCB0ZXN0X21pX3JwYyh2b2lkKQogfQogCiBzdGF0aWMgdm9pZAotc2NyYXRjaF9idWZfaW5p dChkcm1faW50ZWxfYnVmbWdyICpidWZtZ3IsCi0JCSBzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAotCQkg aW50IHdpZHRoLCBpbnQgaGVpZ2h0LAotCQkgdWludDMyX3QgY29sb3IpCitzY3JhdGNoX2J1Zl9t ZW1zZXQoZHJtX2ludGVsX2JvICpibywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1aW50MzJfdCBj b2xvcikKIHsKLQlzaXplX3Qgc3RyaWRlID0gd2lkdGggKiA0OwotCXNpemVfdCBzaXplID0gc3Ry aWRlICogaGVpZ2h0OwotCWRybV9pbnRlbF9ibyAqYm8gPSBkcm1faW50ZWxfYm9fYWxsb2MoYnVm bWdyLCAiIiwgc2l6ZSwgNDA5Nik7CiAJaW50IHJldDsKIAogCXJldCA9IGRybV9pbnRlbF9ib19t YXAoYm8sIHRydWUgLyogd3JpdGFibGUgKi8pOwpAQCAtMjQ4NSw2ICsyNzExLDE5IEBAIHNjcmF0 Y2hfYnVmX2luaXQoZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyLAogCQkoKHVpbnQzMl90ICopYm8t PnZpcnR1YWwpW2ldID0gY29sb3I7CiAKIAlkcm1faW50ZWxfYm9fdW5tYXAoYm8pOworfQorCitz dGF0aWMgdm9pZAorc2NyYXRjaF9idWZfaW5pdChkcm1faW50ZWxfYnVmbWdyICpidWZtZ3IsCisJ CSBzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAorCQkgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorCQkgdWlu dDMyX3QgY29sb3IpCit7CisJc2l6ZV90IHN0cmlkZSA9IHdpZHRoICogNDsKKwlzaXplX3Qgc2l6 ZSA9IHN0cmlkZSAqIGhlaWdodDsKKwlkcm1faW50ZWxfYm8gKmJvID0gZHJtX2ludGVsX2JvX2Fs bG9jKGJ1Zm1nciwgIiIsIHNpemUsIDQwOTYpOworCisJc2NyYXRjaF9idWZfbWVtc2V0KGJvLCB3 aWR0aCwgaGVpZ2h0LCBjb2xvcik7CiAKIAlidWYtPmJvID0gYm87CiAJYnVmLT5zdHJpZGUgPSBz dHJpZGU7CkBAIC0yNTAzLDE0ICsyNzQyLDI1IEBAIGVtaXRfc3RhbGxfdGltZXN0YW1wX2FuZF9y cGMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKIAkJCQkgICBQSVBFX0NPTlRST0xf UkVOREVSX1RBUkdFVF9GTFVTSCB8CiAJCQkJICAgUElQRV9DT05UUk9MX1dSSVRFX1RJTUVTVEFN UCk7CiAKLQlCRUdJTl9CQVRDSCg1LCAxKTsKLQlPVVRfQkFUQ0goR0ZYX09QX1BJUEVfQ09OVFJP TCB8ICg1IC0gMikpOwotCU9VVF9CQVRDSChwaXBlX2N0bF9mbGFncyk7Ci0JT1VUX1JFTE9DKGRz dCwgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJ T04sCi0JCSAgdGltZXN0YW1wX29mZnNldCk7Ci0JT1VUX0JBVENIKDApOyAvKiBpbW0gbG93ZXIg Ki8KLQlPVVRfQkFUQ0goMCk7IC8qIGltbSB1cHBlciAqLwotCUFEVkFOQ0VfQkFUQ0goKTsKKwlp ZiAoaW50ZWxfZ2VuKGRldmlkKSA+PSA4KSB7CisJCUJFR0lOX0JBVENIKDUsIDEpOworCQlPVVRf QkFUQ0goR0ZYX09QX1BJUEVfQ09OVFJPTCB8ICg2IC0gMikpOworCQlPVVRfQkFUQ0gocGlwZV9j dGxfZmxhZ3MpOworCQlPVVRfUkVMT0MoZHN0LCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04s IEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwKKwkJCSAgdGltZXN0YW1wX29mZnNldCk7CisJ CU9VVF9CQVRDSCgwKTsgLyogaW1tIGxvd2VyICovCisJCU9VVF9CQVRDSCgwKTsgLyogaW1tIHVw cGVyICovCisJCUFEVkFOQ0VfQkFUQ0goKTsKKwl9IGVsc2UgeworCQlCRUdJTl9CQVRDSCg1LCAx KTsKKwkJT1VUX0JBVENIKEdGWF9PUF9QSVBFX0NPTlRST0wgfCAoNSAtIDIpKTsKKwkJT1VUX0JB VENIKHBpcGVfY3RsX2ZsYWdzKTsKKwkJT1VUX1JFTE9DKGRzdCwgSTkxNV9HRU1fRE9NQUlOX0lO U1RSVUNUSU9OLCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sCisJCQkgIHRpbWVzdGFtcF9v ZmZzZXQpOworCQlPVVRfQkFUQ0goMCk7IC8qIGltbSBsb3dlciAqLworCQlPVVRfQkFUQ0goMCk7 IC8qIGltbSB1cHBlciAqLworCQlBRFZBTkNFX0JBVENIKCk7CisJfQogCiAJZW1pdF9yZXBvcnRf cGVyZl9jb3VudChiYXRjaCwgZHN0LCByZXBvcnRfZHN0X29mZnNldCwgcmVwb3J0X2lkKTsKIH0K QEAgLTI1NTYsNyArMjgwNiw3IEBAIGhzd190ZXN0X3NpbmdsZV9jdHhfY291bnRlcnModm9pZCkK IAkJZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyOwogCQlkcm1faW50ZWxfY29udGV4dCAqY29udGV4 dDAsICpjb250ZXh0MTsKIAkJc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaDsKLQkJc3Ry dWN0IGlndF9idWYgc3JjLCBkc3Q7CisJCXN0cnVjdCBpZ3RfYnVmIHNyY1szXSwgZHN0WzNdOwog CQlkcm1faW50ZWxfYm8gKmJvOwogCQl1aW50MzJfdCAqcmVwb3J0MF8zMiwgKnJlcG9ydDFfMzI7 CiAJCXVpbnQ2NF90IHRpbWVzdGFtcDBfNjQsIHRpbWVzdGFtcDFfNjQ7CkBAIC0yNTc0LDggKzI4 MjQsMTAgQEAgaHN3X3Rlc3Rfc2luZ2xlX2N0eF9jb3VudGVycyh2b2lkKQogCQlidWZtZ3IgPSBk cm1faW50ZWxfYnVmbWdyX2dlbV9pbml0KGRybV9mZCwgNDA5Nik7CiAJCWRybV9pbnRlbF9idWZt Z3JfZ2VtX2VuYWJsZV9yZXVzZShidWZtZ3IpOwogCi0JCXNjcmF0Y2hfYnVmX2luaXQoYnVmbWdy LCAmc3JjLCB3aWR0aCwgaGVpZ2h0LCAweGZmMDAwMGZmKTsKLQkJc2NyYXRjaF9idWZfaW5pdChi dWZtZ3IsICZkc3QsIHdpZHRoLCBoZWlnaHQsIDB4MDBmZjAwZmYpOworCQlmb3IgKGludCBpID0g MDsgaSA8IEFSUkFZX1NJWkUoc3JjKTsgaSsrKSB7CisJCQlzY3JhdGNoX2J1Zl9pbml0KGJ1Zm1n ciwgJnNyY1tpXSwgd2lkdGgsIGhlaWdodCwgMHhmZjAwMDBmZik7CisJCQlzY3JhdGNoX2J1Zl9p bml0KGJ1Zm1nciwgJmRzdFtpXSwgd2lkdGgsIGhlaWdodCwgMHgwMGZmMDBmZik7CisJCX0KIAog CQliYXRjaCA9IGludGVsX2JhdGNoYnVmZmVyX2FsbG9jKGJ1Zm1nciwgZGV2aWQpOwogCkBAIC0y NjA5LDE0ICsyODYxLDE5IEBAIGhzd190ZXN0X3NpbmdsZV9jdHhfY291bnRlcnModm9pZCkKIAkJ ICovCiAJCXJlbmRlcl9jb3B5KGJhdGNoLAogCQkJICAgIGNvbnRleHQwLAotCQkJICAgICZzcmMs IDAsIDAsIHdpZHRoLCBoZWlnaHQsCi0JCQkgICAgJmRzdCwgMCwgMCk7CisJCQkgICAgJnNyY1sw XSwgMCwgMCwgd2lkdGgsIGhlaWdodCwKKwkJCSAgICAmZHN0WzBdLCAwLCAwKTsKIAogCQlyZXQg PSBkcm1faW50ZWxfZ2VtX2NvbnRleHRfZ2V0X2lkKGNvbnRleHQwLCAmY3R4X2lkKTsKIAkJaWd0 X2Fzc2VydF9lcShyZXQsIDApOwogCQlpZ3RfYXNzZXJ0X25lcShjdHhfaWQsIDB4ZmZmZmZmZmYp OwogCQlwcm9wZXJ0aWVzWzFdID0gY3R4X2lkOwogCisJCWludGVsX2JhdGNoYnVmZmVyX2ZsdXNo X3dpdGhfY29udGV4dChiYXRjaCwgY29udGV4dDApOworCisJCXNjcmF0Y2hfYnVmX21lbXNldChz cmNbMF0uYm8sIHdpZHRoLCBoZWlnaHQsIDB4ZmYwMDAwZmYpOworCQlzY3JhdGNoX2J1Zl9tZW1z ZXQoZHN0WzBdLmJvLCB3aWR0aCwgaGVpZ2h0LCAweDAwZmYwMGZmKTsKKwogCQlpZ3RfZGVidWco Im9wZW5pbmcgaTkxNS1wZXJmIHN0cmVhbVxuIik7CiAJCXN0cmVhbV9mZCA9IF9fcGVyZl9vcGVu KGRybV9mZCwgJnBhcmFtKTsKIApAQCAtMjY0Myw4ICsyOTAwLDggQEAgaHN3X3Rlc3Rfc2luZ2xl X2N0eF9jb3VudGVycyh2b2lkKQogCiAJCXJlbmRlcl9jb3B5KGJhdGNoLAogCQkJICAgIGNvbnRl eHQwLAotCQkJICAgICZzcmMsIDAsIDAsIHdpZHRoLCBoZWlnaHQsCi0JCQkgICAgJmRzdCwgMCwg MCk7CisJCQkgICAgJnNyY1swXSwgMCwgMCwgd2lkdGgsIGhlaWdodCwKKwkJCSAgICAmZHN0WzBd LCAwLCAwKTsKIAogCQkvKiBBbm90aGVyIHJlZHVuZGFudCBmbHVzaCB0byBjbGFyaWZ5IGJhdGNo IGJvIGlzIGZyZWUgdG8gcmV1c2UgKi8KIAkJaW50ZWxfYmF0Y2hidWZmZXJfZmx1c2hfd2l0aF9j b250ZXh0KGJhdGNoLCBjb250ZXh0MCk7CkBAIC0yNjU1LDEzICsyOTEyLDEzIEBAIGhzd190ZXN0 X3NpbmdsZV9jdHhfY291bnRlcnModm9pZCkKIAkJICovCiAJCXJlbmRlcl9jb3B5KGJhdGNoLAog CQkJICAgIGNvbnRleHQxLAotCQkJICAgICZzcmMsIDAsIDAsIHdpZHRoLCBoZWlnaHQsCi0JCQkg ICAgJmRzdCwgMCwgMCk7CisJCQkgICAgJnNyY1sxXSwgMCwgMCwgd2lkdGgsIGhlaWdodCwKKwkJ CSAgICAmZHN0WzFdLCAwLCAwKTsKIAogCQlyZW5kZXJfY29weShiYXRjaCwKIAkJCSAgICBjb250 ZXh0MSwKLQkJCSAgICAmc3JjLCAwLCAwLCB3aWR0aCwgaGVpZ2h0LAotCQkJICAgICZkc3QsIDAs IDApOworCQkJICAgICZzcmNbMl0sIDAsIDAsIHdpZHRoLCBoZWlnaHQsCisJCQkgICAgJmRzdFsy XSwgMCwgMCk7CiAKIAkJLyogQW5kIGFub3RoZXIgKi8KIAkJaW50ZWxfYmF0Y2hidWZmZXJfZmx1 c2hfd2l0aF9jb250ZXh0KGJhdGNoLCBjb250ZXh0MSk7CkBAIC0yNjkwLDYgKzI5NDcsNyBAQCBo c3dfdGVzdF9zaW5nbGVfY3R4X2NvdW50ZXJzKHZvaWQpCiAKIAkJLyogQTQwID09IE4gc2FtcGxl cyB3cml0dGVuIHRvIGFsbCByZW5kZXIgdGFyZ2V0cyAqLwogCQluX3NhbXBsZXNfd3JpdHRlbiA9 IHJlcG9ydDFfMzJbNDNdIC0gcmVwb3J0MF8zMls0M107CisKIAkJaWd0X2RlYnVnKCJuIHNhbXBs ZXMgd3JpdHRlbiA9ICVkXG4iLCBuX3NhbXBsZXNfd3JpdHRlbik7CiAJCWlndF9hc3NlcnRfZXEo bl9zYW1wbGVzX3dyaXR0ZW4sIHdpZHRoICogaGVpZ2h0KTsKIApAQCAtMjcyNCw4ICsyOTgyLDEw IEBAIGhzd190ZXN0X3NpbmdsZV9jdHhfY291bnRlcnModm9pZCkKIAkJCShkZWx0YV9vYTMyX25z IC0gZGVsdGFfdHM2NF9ucyk7CiAJCWlndF9hc3NlcnQoZGVsdGFfZGVsdGEgPD0gMzIwKTsKIAot CQlkcm1faW50ZWxfYm9fdW5yZWZlcmVuY2Uoc3JjLmJvKTsKLQkJZHJtX2ludGVsX2JvX3VucmVm ZXJlbmNlKGRzdC5ibyk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgQVJSQVlfU0laRShzcmMpOyBp KyspIHsKKwkJCWRybV9pbnRlbF9ib191bnJlZmVyZW5jZShzcmNbaV0uYm8pOworCQkJZHJtX2lu dGVsX2JvX3VucmVmZXJlbmNlKGRzdFtpXS5ibyk7CisJCX0KIAogCQlkcm1faW50ZWxfYm9fdW5t YXAoYm8pOwogCQlkcm1faW50ZWxfYm9fdW5yZWZlcmVuY2UoYm8pOwpAQCAtMjczOSw2ICsyOTk5 LDQ1MiBAQCBoc3dfdGVzdF9zaW5nbGVfY3R4X2NvdW50ZXJzKHZvaWQpCiAJaWd0X3dhaXRjaGls ZHJlbigpOwogfQogCisvKiBUZXN0cyB0aGUgSU5URUxfcGVyZm9ybWFuY2VfcXVlcnkgdXNlIGNh c2Ugd2hlcmUgYW4gdW5wcml2aWxlZ2VkIHByb2Nlc3MKKyAqIHNob3VsZCBiZSBhYmxlIHRvIGNv bmZpZ3VyZSB0aGUgT0EgdW5pdCBmb3IgcGVyLWNvbnRleHQgbWV0cmljcyAoZm9yIGEKKyAqIGNv bnRleHQgYXNzb2NpYXRlZCB3aXRoIHRoYXQgcHJvY2VzcycgZHJtIGZpbGUgZGVzY3JpcHRvcikg YW5kIHRoZSBjb3VudGVycworICogc2hvdWxkIG9ubHkgcmVsYXRlIHRvIHRoYXQgc3BlY2lmaWMg Y29udGV4dC4KKyAqCisgKiBGb3IgR2VuOCsgYWx0aG91Z2ggcmVwb3J0cyByZWFkIHZpYSBpOTE1 IHBlcmYgY2FuIGJlIGZpbHRlcmVkIGZvciBhIHNpbmdsZQorICogY29udGV4dCB0aGUgY291bnRl cnMgdGhlbXNlbHZlcyBhbHdheXMgcHJvZ3Jlc3MgYXMgZ2xvYmFsL3N5c3RlbS13aWRlCisgKiBj b3VudGVycyBhZmZlY3RlZCBieSBhbGwgY29udGV4dHMuIFRvIHN1cHBvcnQgdGhlIElOVEVMX3Bl cmZvcm1hbmNlX3F1ZXJ5CisgKiB1c2UgY2FzZSBvbiBHZW44KyBpdCdzIG5lY2Vzc2FyeSB0byBj b21iaW5lIE9BQlVGRkVSIGFuZAorICogTUlfUkVQT1JUX1BFUkZfQ09VTlQgcmVwb3J0cyBzbyB0 aGF0IGNvdW50ZXIgbm9ybWFsaXNhdGlvbiBjYW4gdGFrZSBpbnRvCisgKiBhY2NvdW50IGNvbnRl eHQtc3dpdGNoIHJlcG9ydHMgYW5kIGZhY3RvciBvdXQgYW55IGNvdW50ZXIgcHJvZ3Jlc3Npb24g bm90CisgKiBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgY29udGV4dC4KKyAqLworc3RhdGlj IHZvaWQKK2dlbjhfdGVzdF9zaW5nbGVfY3R4X3JlbmRlcl90YXJnZXRfd3JpdGVzX2FfY291bnRl cih2b2lkKQoreworCWludCBvYV9leHBvbmVudCA9IG1heF9vYV9leHBvbmVudF9mb3JfcGVyaW9k X2x0ZSgxMDAwMDAwKTsKKwl1aW50NjRfdCBwcm9wZXJ0aWVzW10gPSB7CisJCURSTV9JOTE1X1BF UkZfUFJPUF9DVFhfSEFORExFLCBVSU5UNjRfTUFYLCAvKiB1cGRhdGVkIGJlbG93ICovCisKKwkJ LyogTm90ZTogd2UgaGF2ZSB0byBzcGVjaWZ5IGF0IGxlYXN0IG9uZSBzYW1wbGUgcHJvcGVydHkg ZXZlbgorCQkgKiB0aG91Z2ggd2UgYXJlbid0IGludGVyZXN0ZWQgaW4gc2FtcGxlcyBpbiB0aGlz IGNhc2UKKwkJICovCisJCURSTV9JOTE1X1BFUkZfUFJPUF9TQU1QTEVfT0EsIHRydWUsCisKKwkJ LyogT0EgdW5pdCBjb25maWd1cmF0aW9uICovCisJCURSTV9JOTE1X1BFUkZfUFJPUF9PQV9NRVRS SUNTX1NFVCwgdGVzdF9tZXRyaWNfc2V0X2lkLAorCQlEUk1fSTkxNV9QRVJGX1BST1BfT0FfRk9S TUFULCB0ZXN0X29hX2Zvcm1hdCwKKwkJRFJNX0k5MTVfUEVSRl9QUk9QX09BX0VYUE9ORU5ULCBv YV9leHBvbmVudCwKKworCQkvKiBOb3RlOiBubyBPQSBleHBvbmVudCBzcGVjaWZpZWQgaW4gdGhp cyBjYXNlICovCisJfTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcGVyZl9vcGVuX3BhcmFtIHBhcmFtID0g eworCQkuZmxhZ3MgPSBJOTE1X1BFUkZfRkxBR19GRF9DTE9FWEVDLAorCQkubnVtX3Byb3BlcnRp ZXMgPSBBUlJBWV9TSVpFKHByb3BlcnRpZXMpIC8gMiwKKwkJLnByb3BlcnRpZXNfcHRyID0gdG9f dXNlcl9wb2ludGVyKHByb3BlcnRpZXMpLAorCX07CisJc2l6ZV90IGZvcm1hdF9zaXplID0gb2Ff Zm9ybWF0c1t0ZXN0X29hX2Zvcm1hdF0uc2l6ZTsKKwlzaXplX3Qgc2FtcGxlX3NpemUgPSAoc2l6 ZW9mKHN0cnVjdCBkcm1faTkxNV9wZXJmX3JlY29yZF9oZWFkZXIpICsKKwkJCSAgICAgIGZvcm1h dF9zaXplKTsKKwlpbnQgbWF4X3JlcG9ydHMgPSAoMTYgKiAxMDI0ICogMTAyNCkgLyBmb3JtYXRf c2l6ZTsKKwlpbnQgYnVmX3NpemUgPSBzYW1wbGVfc2l6ZSAqIG1heF9yZXBvcnRzICogMS41Owor CWludCBjaGlsZF9yZXQ7CisJdWludDhfdCAqYnVmID0gbWFsbG9jKGJ1Zl9zaXplKTsKKwlzc2l6 ZV90IGxlbjsKKwlzdHJ1Y3QgaWd0X2hlbHBlcl9wcm9jZXNzIGNoaWxkID0ge307CisKKwkvKiBz aG91bGQgYmUgZGVmYXVsdCwgYnV0IGp1c3QgdG8gYmUgc3VyZS4uLiAqLworCXdyaXRlX3U2NF9m aWxlKCIvcHJvYy9zeXMvZGV2L2k5MTUvcGVyZl9zdHJlYW1fcGFyYW5vaWQiLCAxKTsKKworCWRv IHsKKworCQlpZ3RfZm9ya19oZWxwZXIoJmNoaWxkKSB7CisJCQlzdHJ1Y3QgZHJtX2k5MTVfcGVy Zl9yZWNvcmRfaGVhZGVyICpoZWFkZXI7CisJCQlkcm1faW50ZWxfYnVmbWdyICpidWZtZ3I7CisJ CQlkcm1faW50ZWxfY29udGV4dCAqY29udGV4dDAsICpjb250ZXh0MTsKKwkJCXN0cnVjdCBpbnRl bF9iYXRjaGJ1ZmZlciAqYmF0Y2g7CisJCQlzdHJ1Y3QgaWd0X2J1ZiBzcmNbM10sIGRzdFszXTsK KwkJCWRybV9pbnRlbF9ibyAqYm87CisJCQl1aW50MzJfdCAqcmVwb3J0MF8zMiwgKnJlcG9ydDFf MzI7CisJCQl1aW50MzJfdCAqcHJldiwgKmxwcmV2ID0gTlVMTDsKKwkJCXVpbnQ2NF90IHRpbWVz dGFtcDBfNjQsIHRpbWVzdGFtcDFfNjQ7CisJCQl1aW50MzJfdCBkZWx0YV90czY0LCBkZWx0YV9v YTMyOworCQkJdWludDY0X3QgZGVsdGFfdHM2NF9ucywgZGVsdGFfb2EzMl9uczsKKwkJCXVpbnQz Ml90IGRlbHRhX2RlbHRhOworCQkJaW50IHdpZHRoID0gODAwOworCQkJaW50IGhlaWdodCA9IDYw MDsKKwkJCXVpbnQzMl90IGN0eF9pZCA9IDB4ZmZmZmZmZmY7IC8qIGludmFsaWQgaGFuZGxlICov CisJCQl1aW50MzJfdCBjdHgxX2lkID0gMHhmZmZmZmZmZjsgIC8qIGludmFsaWQgaGFuZGxlICov CisJCQl1aW50MzJfdCBjdXJyZW50X2N0eF9pZCA9IDB4ZmZmZmZmZmY7CisJCQl1aW50MzJfdCBu X2ludmFsaWRfY3R4ID0gMDsKKwkJCWludCByZXQ7CisJCQlzdHJ1Y3QgYWNjdW11bGF0b3IgYWNj dW11bGF0b3IgPSB7CisJCQkJLmZvcm1hdCA9IHRlc3Rfb2FfZm9ybWF0CisJCQl9OworCisJCQli dWZtZ3IgPSBkcm1faW50ZWxfYnVmbWdyX2dlbV9pbml0KGRybV9mZCwgNDA5Nik7CisJCQlkcm1f aW50ZWxfYnVmbWdyX2dlbV9lbmFibGVfcmV1c2UoYnVmbWdyKTsKKworCQkJZm9yIChpbnQgaSA9 IDA7IGkgPCBBUlJBWV9TSVpFKHNyYyk7IGkrKykgeworCQkJCXNjcmF0Y2hfYnVmX2luaXQoYnVm bWdyLCAmc3JjW2ldLCB3aWR0aCwgaGVpZ2h0LCAweGZmMDAwMGZmKTsKKwkJCQlzY3JhdGNoX2J1 Zl9pbml0KGJ1Zm1nciwgJmRzdFtpXSwgd2lkdGgsIGhlaWdodCwgMHgwMGZmMDBmZik7CisJCQl9 CisKKwkJCWJhdGNoID0gaW50ZWxfYmF0Y2hidWZmZXJfYWxsb2MoYnVmbWdyLCBkZXZpZCk7CisK KwkJCWNvbnRleHQwID0gZHJtX2ludGVsX2dlbV9jb250ZXh0X2NyZWF0ZShidWZtZ3IpOworCQkJ aWd0X2Fzc2VydChjb250ZXh0MCk7CisKKwkJCWNvbnRleHQxID0gZHJtX2ludGVsX2dlbV9jb250 ZXh0X2NyZWF0ZShidWZtZ3IpOworCQkJaWd0X2Fzc2VydChjb250ZXh0MSk7CisKKwkJCWlndF9k ZWJ1Zygic3VibWl0dGluZyB3YXJtIHVwIHJlbmRlcl9jb3B5XG4iKTsKKworCQkJLyogU3VibWl0 IHNvbWUgZWFybHksIHVubWVhc3VyZWQsIHdvcmsgdG8gdGhlIGNvbnRleHQgd2Ugd2FudAorCQkJ ICogdG8gbWVhc3VyZSB0byB0cnkgYW5kIGNhdGNoIGlzc3VlcyB3aXRoIGk5MTUtcGVyZgorCQkJ ICogaW5pdGlhbGl6aW5nIHRoZSBIVyBjb250ZXh0IElEIGZvciBmaWx0ZXJpbmcuCisJCQkgKgor CQkJICogV2UgZG8gdGhpcyBiZWNhdXNlIGk5MTUtcGVyZiBzaW5nbGUgY29udGV4dCBmaWx0ZXJp bmcgaGFkCisJCQkgKiBwcmV2aW91c2x5IG9ubHkgcmVsaWVkIG9uIGEgaG9vayBpbnRvIGNvbnRl eHQgcGlubmluZyB0bworCQkJICogaW5pdGlhbGl6ZSB0aGUgSFcgY29udGV4dCBJRCwgaW5zdGVh ZCBvZiBhbHNvIHRyeWluZyB0bworCQkJICogZGV0ZXJtaW5lIHRoZSBIVyBJRCB3aGlsZSBvcGVu aW5nIHRoZSBzdHJlYW0sIGluIGNhc2UgaXQKKwkJCSAqIGhhcyBhbHJlYWR5IGJlZW4gcGlubmVk LgorCQkJICoKKwkJCSAqIFRoaXMgd2Fzbid0IG5vdGljZWQgYnkgdGhlIHByZXZpb3VzIHVuaXQg dGVzdCBiZWNhdXNlIHdlCisJCQkgKiB3ZXJlIG9wZW5pbmcgdGhlIHN0cmVhbSB3aGlsZSB0aGUg Y29udGV4dCBoYWRuJ3QgYmVlbgorCQkJICogdG91Y2hlZCBvciBwaW5uZWQgeWV0IGFuZCBzbyBp dCB3b3JrZWQgb3V0IGNvcnJlY3RseSB0byB3YWl0CisJCQkgKiBmb3IgdGhlIHBpbm5pbmcgaG9v ay4KKwkJCSAqCisJCQkgKiBOb3cgYSBidWdneSB2ZXJzaW9uIG9mIGk5MTUtcGVyZiB3aWxsIGZh aWwgdG8gbWVhc3VyZQorCQkJICogYW55dGhpbmcgZm9yIGNvbnRleHQwIG9uY2UgdGhpcyBpbml0 aWFsIHJlbmRlcl9jb3B5KCkgZW5kcworCQkJICogdXAgcGlubmluZyB0aGUgY29udGV4dCBzaW5j ZSB0aGVyZSB3b24ndCBldmVyIGJlIGEgcGlubmluZworCQkJICogaG9vayBjYWxsYmFjay4KKwkJ CSAqLworCQkJcmVuZGVyX2NvcHkoYmF0Y2gsCisJCQkJICAgIGNvbnRleHQwLAorCQkJCSAgICAm c3JjWzBdLCAwLCAwLCB3aWR0aCwgaGVpZ2h0LAorCQkJCSAgICAmZHN0WzBdLCAwLCAwKTsKKwor CQkJcmV0ID0gZHJtX2ludGVsX2dlbV9jb250ZXh0X2dldF9pZChjb250ZXh0MCwgJmN0eF9pZCk7 CisJCQlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7CisJCQlpZ3RfYXNzZXJ0X25lcShjdHhfaWQsIDB4 ZmZmZmZmZmYpOworCQkJcHJvcGVydGllc1sxXSA9IGN0eF9pZDsKKworCQkJc2NyYXRjaF9idWZf bWVtc2V0KHNyY1swXS5ibywgd2lkdGgsIGhlaWdodCwgMHhmZjAwMDBmZik7CisJCQlzY3JhdGNo X2J1Zl9tZW1zZXQoZHN0WzBdLmJvLCB3aWR0aCwgaGVpZ2h0LCAweDAwZmYwMGZmKTsKKworCQkJ aWd0X2RlYnVnKCJvcGVuaW5nIGk5MTUtcGVyZiBzdHJlYW1cbiIpOworCQkJc3RyZWFtX2ZkID0g X19wZXJmX29wZW4oZHJtX2ZkLCAmcGFyYW0pOworCisJCQlibyA9IGRybV9pbnRlbF9ib19hbGxv YyhidWZtZ3IsICJtaV9ycGMgZGVzdCBibyIsIDQwOTYsIDY0KTsKKworCQkJcmV0ID0gZHJtX2lu dGVsX2JvX21hcChibywgdHJ1ZSAvKiB3cml0ZSBlbmFibGUgKi8pOworCQkJaWd0X2Fzc2VydF9l cShyZXQsIDApOworCisJCQltZW1zZXQoYm8tPnZpcnR1YWwsIDB4ODAsIDQwOTYpOworCQkJZHJt X2ludGVsX2JvX3VubWFwKGJvKTsKKworCQkJZW1pdF9zdGFsbF90aW1lc3RhbXBfYW5kX3JwYyhi YXRjaCwKKwkJCQkJCSAgICAgYm8sCisJCQkJCQkgICAgIDUxMiAvKiB0aW1lc3RhbXAgb2Zmc2V0 ICovLAorCQkJCQkJICAgICAwLCAvKiByZXBvcnQgZHN0IG9mZnNldCAqLworCQkJCQkJICAgICAw eGRlYWRiZWVmKTsgLyogcmVwb3J0IGlkICovCisKKwkJCS8qIEV4cGxpY2l0bHkgZmx1c2ggaGVy ZSAoZXZlbiB0aG91Z2ggdGhlIHJlbmRlcl9jb3B5KCkgY2FsbAorCQkJICogd2lsbCBpdHNlbGYg Zmx1c2ggYmVmb3JlL2FmdGVyIHRoZSBjb3B5KSB0byBjbGFyaWZ5IHRoYXQKKwkJCSAqIHRoYXQg dGhlIFBJUEVfQ09OVFJPTCArIE1JX1JQQyBjb21tYW5kcyB3aWxsIGJlIGluIGEKKwkJCSAqIHNl cGFyYXRlIGJhdGNoIGZyb20gdGhlIGNvcHkuCisJCQkgKi8KKwkJCWludGVsX2JhdGNoYnVmZmVy X2ZsdXNoX3dpdGhfY29udGV4dChiYXRjaCwgY29udGV4dDApOworCisJCQlyZW5kZXJfY29weShi YXRjaCwKKwkJCQkgICAgY29udGV4dDAsCisJCQkJICAgICZzcmNbMF0sIDAsIDAsIHdpZHRoLCBo ZWlnaHQsCisJCQkJICAgICZkc3RbMF0sIDAsIDApOworCisJCQkvKiBBbm90aGVyIHJlZHVuZGFu dCBmbHVzaCB0byBjbGFyaWZ5IGJhdGNoIGJvIGlzIGZyZWUgdG8gcmV1c2UgKi8KKwkJCWludGVs X2JhdGNoYnVmZmVyX2ZsdXNoX3dpdGhfY29udGV4dChiYXRjaCwgY29udGV4dDApOworCisJCQkv KiBzdWJtaXQgdHdvIGNvcGllcyBvbiB0aGUgb3RoZXIgY29udGV4dCB0byBhdm9pZCBhIGZhbHNl CisJCQkgKiBwb3NpdGl2ZSBpbiBjYXNlIHRoZSBkcml2ZXIgc29tZWhvdyBlbmRlZCB1cCBmaWx0 ZXJpbmcgZm9yCisJCQkgKiBjb250ZXh0MQorCQkJICovCisJCQlyZW5kZXJfY29weShiYXRjaCwK KwkJCQkgICAgY29udGV4dDEsCisJCQkJICAgICZzcmNbMV0sIDAsIDAsIHdpZHRoLCBoZWlnaHQs CisJCQkJICAgICZkc3RbMV0sIDAsIDApOworCisJCQlyZXQgPSBkcm1faW50ZWxfZ2VtX2NvbnRl eHRfZ2V0X2lkKGNvbnRleHQxLCAmY3R4MV9pZCk7CisJCQlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7 CisJCQlpZ3RfYXNzZXJ0X25lcShjdHgxX2lkLCAweGZmZmZmZmZmKTsKKworCQkJcmVuZGVyX2Nv cHkoYmF0Y2gsCisJCQkJICAgIGNvbnRleHQxLAorCQkJCSAgICAmc3JjWzJdLCAwLCAwLCB3aWR0 aCwgaGVpZ2h0LAorCQkJCSAgICAmZHN0WzJdLCAwLCAwKTsKKworCQkJLyogQW5kIGFub3RoZXIg Ki8KKwkJCWludGVsX2JhdGNoYnVmZmVyX2ZsdXNoX3dpdGhfY29udGV4dChiYXRjaCwgY29udGV4 dDEpOworCisJCQllbWl0X3N0YWxsX3RpbWVzdGFtcF9hbmRfcnBjKGJhdGNoLAorCQkJCQkJICAg ICBibywKKwkJCQkJCSAgICAgNTIwIC8qIHRpbWVzdGFtcCBvZmZzZXQgKi8sCisJCQkJCQkgICAg IDI1NiwgLyogcmVwb3J0IGRzdCBvZmZzZXQgKi8KKwkJCQkJCSAgICAgMHhiZWVmYmVlZik7IC8q IHJlcG9ydCBpZCAqLworCisJCQlpbnRlbF9iYXRjaGJ1ZmZlcl9mbHVzaF93aXRoX2NvbnRleHQo YmF0Y2gsIGNvbnRleHQxKTsKKworCQkJcmV0ID0gZHJtX2ludGVsX2JvX21hcChibywgZmFsc2Ug Lyogd3JpdGUgZW5hYmxlICovKTsKKwkJCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKKworCQkJcmVw b3J0MF8zMiA9IGJvLT52aXJ0dWFsOworCQkJaWd0X2Fzc2VydF9lcShyZXBvcnQwXzMyWzBdLCAw eGRlYWRiZWVmKTsgLyogcmVwb3J0IElEICovCisJCQlpZ3RfYXNzZXJ0X25lcShyZXBvcnQwXzMy WzFdLCAwKTsgLyogdGltZXN0YW1wICovCisJCQkvL3JlcG9ydDBfMzJbMl0gPSAweGZmZmZmZmZm OworCQkJcHJldiA9IHJlcG9ydDBfMzI7CisJCQljdHhfaWQgPSBwcmV2WzJdOworCQkJaWd0X2Rl YnVnKCJNSV9SUEMoc3RhcnQpIENUWCBJRDogJXVcbiIsIGN0eF9pZCk7CisKKwkJCXJlcG9ydDFf MzIgPSByZXBvcnQwXzMyICsgNjQ7IC8qIDY0IHVpbnQzMl90ID0gMjU2Ynl0ZXMgb2Zmc2V0ICov CisJCQlpZ3RfYXNzZXJ0X2VxKHJlcG9ydDFfMzJbMF0sIDB4YmVlZmJlZWYpOyAvKiByZXBvcnQg SUQgKi8KKwkJCWlndF9hc3NlcnRfbmVxKHJlcG9ydDFfMzJbMV0sIDApOyAvKiB0aW1lc3RhbXAg Ki8KKwkJCS8vcmVwb3J0MV8zMlsyXSA9IDB4ZmZmZmZmZmY7CisJCQljdHgxX2lkID0gcmVwb3J0 MV8zMlsyXTsKKworCQkJbWVtc2V0KGFjY3VtdWxhdG9yLmRlbHRhcywgMCwgc2l6ZW9mKGFjY3Vt dWxhdG9yLmRlbHRhcykpOworCQkJYWNjdW11bGF0ZV9yZXBvcnRzKCZhY2N1bXVsYXRvciwgcmVw b3J0MF8zMiwgcmVwb3J0MV8zMik7CisJCQlpZ3RfZGVidWcoInRvdGFsOiBBMCA9ICVsdSwgQTIx ID0gJWx1LCBBMjYgPSAlbHVcbiIsCisJCQkJICBhY2N1bXVsYXRvci5kZWx0YXNbMiArIDBdLCAv KiBza2lwIHRpbWVzdGFtcCArIGNsb2NrIGN5Y2xlcyAqLworCQkJCSAgYWNjdW11bGF0b3IuZGVs dGFzWzIgKyAyMV0sCisJCQkJICBhY2N1bXVsYXRvci5kZWx0YXNbMiArIDI2XSk7CisKKwkJCWln dF9kZWJ1Zygib2FfdGltZXN0YW1wMzIgMCA9ICV1XG4iLCByZXBvcnQwXzMyWzFdKTsKKwkJCWln dF9kZWJ1Zygib2FfdGltZXN0YW1wMzIgMSA9ICV1XG4iLCByZXBvcnQxXzMyWzFdKTsKKwkJCWln dF9kZWJ1ZygiY3R4X2lkIDAgPSAldVxuIiwgcmVwb3J0MF8zMlsyXSk7CisJCQlpZ3RfZGVidWco ImN0eF9pZCAxID0gJXVcbiIsIHJlcG9ydDFfMzJbMl0pOworCisJCQl0aW1lc3RhbXAwXzY0ID0g Kih1aW50NjRfdCAqKSgoKHVpbnQ4X3QgKiliby0+dmlydHVhbCkgKyA1MTIpOworCQkJdGltZXN0 YW1wMV82NCA9ICoodWludDY0X3QgKikoKCh1aW50OF90ICopYm8tPnZpcnR1YWwpICsgNTIwKTsK KworCQkJaWd0X2RlYnVnKCJ0c190aW1lc3RhbXA2NCAwID0gJSJQUkl1NjQiXG4iLCB0aW1lc3Rh bXAwXzY0KTsKKwkJCWlndF9kZWJ1ZygidHNfdGltZXN0YW1wNjQgMSA9ICUiUFJJdTY0IlxuIiwg dGltZXN0YW1wMV82NCk7CisKKwkJCWRlbHRhX3RzNjQgPSB0aW1lc3RhbXAxXzY0IC0gdGltZXN0 YW1wMF82NDsKKwkJCWRlbHRhX29hMzIgPSByZXBvcnQxXzMyWzFdIC0gcmVwb3J0MF8zMlsxXTsK KworCQkJLyogc2FuaXR5IGNoZWNrIHRoYXQgd2UgY2FuIHBhc3MgdGhlIGRlbHRhIHRvIHRpbWVi YXNlX3NjYWxlICovCisJCQlpZ3RfYXNzZXJ0KGRlbHRhX3RzNjQgPCBVSU5UMzJfTUFYKTsKKwkJ CWRlbHRhX29hMzJfbnMgPSB0aW1lYmFzZV9zY2FsZShkZWx0YV9vYTMyKTsKKwkJCWRlbHRhX3Rz NjRfbnMgPSB0aW1lYmFzZV9zY2FsZShkZWx0YV90czY0KTsKKworCQkJaWd0X2RlYnVnKCJvYTMy IGRlbHRhID0gJXUsID0gJXVuc1xuIiwKKwkJCQkgIGRlbHRhX29hMzIsICh1bnNpZ25lZClkZWx0 YV9vYTMyX25zKTsKKwkJCWlndF9kZWJ1ZygidHM2NCBkZWx0YSA9ICV1LCA9ICV1bnNcbiIsCisJ CQkJICBkZWx0YV90czY0LCAodW5zaWduZWQpZGVsdGFfdHM2NF9ucyk7CisKKwkJCS8qIFRoZSBk ZWx0YSBhcyBjYWxjdWxhdGVkIHZpYSB0aGUgUElQRV9DT05UUk9MIHRpbWVzdGFtcCBvcgorCQkJ ICogdGhlIE9BIHJlcG9ydCB0aW1lc3RhbXBzIHNob3VsZCBiZSBhbG1vc3QgaWRlbnRpY2FsIGJ1 dAorCQkJICogYWxsb3cgYSA1MDAgbmFub3NlY29uZHMgbWFyZ2luLgorCQkJICovCisJCQlkZWx0 YV9kZWx0YSA9IGRlbHRhX3RzNjRfbnMgPiBkZWx0YV9vYTMyX25zID8KKwkJCQkoZGVsdGFfdHM2 NF9ucyAtIGRlbHRhX29hMzJfbnMpIDoKKwkJCQkoZGVsdGFfb2EzMl9ucyAtIGRlbHRhX3RzNjRf bnMpOworCQkJaWYgKGRlbHRhX2RlbHRhID4gNTAwKSB7CisJCQkJaWd0X2RlYnVnKCJza2lwcGlu Z1xuIik7CisJCQkJZXhpdChFQUdBSU4pOworCQkJfQorCisJCQlsZW4gPSBpOTE1X3JlYWRfcmVw b3J0c191bnRpbF90aW1lc3RhbXAodGVzdF9vYV9mb3JtYXQsCisJCQkJCQkJCWJ1ZiwgYnVmX3Np emUsCisJCQkJCQkJCXJlcG9ydDBfMzJbMV0sCisJCQkJCQkJCXJlcG9ydDFfMzJbMV0pOworCisJ CQlpZ3RfYXNzZXJ0KGxlbiA+IDApOworCQkJaWd0X2RlYnVnKCJyZWFkICVkIGJ5dGVzXG4iLCAo aW50KWxlbik7CisKKwkJCW1lbXNldChhY2N1bXVsYXRvci5kZWx0YXMsIDAsIHNpemVvZihhY2N1 bXVsYXRvci5kZWx0YXMpKTsKKworCQkJZm9yIChzaXplX3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwg bGVuOyBvZmZzZXQgKz0gaGVhZGVyLT5zaXplKSB7CisJCQkJdWludDMyX3QgKnJlcG9ydDsKKwkJ CQl1aW50MzJfdCByZWFzb247CisJCQkJY29uc3QgY2hhciAqc2tpcF9yZWFzb24gPSBOVUxMLCAq cmVwb3J0X3JlYXNvbiA9IE5VTEw7CisJCQkJc3RydWN0IGFjY3VtdWxhdG9yIGxhY2N1bXVsYXRv ciA9IHsKKwkJCQkJLmZvcm1hdCA9IHRlc3Rfb2FfZm9ybWF0CisJCQkJfTsKKworCisJCQkJaGVh ZGVyID0gKHZvaWQgKikoYnVmICsgb2Zmc2V0KTsKKworCQkJCWlndF9hc3NlcnRfZXEoaGVhZGVy LT5wYWQsIDApOyAvKiBSZXNlcnZlZCAqLworCisJCQkJLyogQ3VycmVudGx5IHRoZSBvbmx5IHRl c3QgdGhhdCBzaG91bGQgZXZlciBleHBlY3QgdG8KKwkJCQkgKiBzZWUgYSBfQlVGRkVSX0xPU1Qg ZXJyb3IgaXMgdGhlIGJ1ZmZlcl9maWxsIHRlc3QsCisJCQkJICogb3RoZXJ3aXNlIHNvbWV0aGlu ZyBiYWQgaGFzIHByb2JhYmx5IGhhcHBlbmVkLi4uCisJCQkJICovCisJCQkJaWd0X2Fzc2VydF9u ZXEoaGVhZGVyLT50eXBlLCBEUk1fSTkxNV9QRVJGX1JFQ09SRF9PQV9CVUZGRVJfTE9TVCk7CisK KwkJCQkvKiBBdCBoaWdoIHNhbXBsaW5nIGZyZXF1ZW5jaWVzIHRoZSBPQSBIVyBtaWdodCBub3Qg YmUKKwkJCQkgKiBhYmxlIHRvIGNvcGUgd2l0aCBhbGwgd3JpdGUgcmVxdWVzdHMgYW5kIHdpbGwg bm90aWZ5CisJCQkJICogdXMgdGhhdCBhIHJlcG9ydCB3YXMgbG9zdC4KKwkJCQkgKgorCQkJCSAq IFhYWDogd2Ugc2hvdWxkIG1heWJlIHJlc3RhcnQgdGhlIHRlc3QgaW4gdGhpcyBjYXNlPworCQkJ CSAqLworCQkJCWlmIChoZWFkZXItPnR5cGUgPT0gRFJNX0k5MTVfUEVSRl9SRUNPUkRfT0FfUkVQ T1JUX0xPU1QpIHsKKwkJCQkJaWd0X2RlYnVnKCJPQSB0cmlnZ2VyIGNvbGxpc2lvbiAvIHJlcG9y dCBsb3N0XG4iKTsKKwkJCQkJZXhpdChFQUdBSU4pOworCQkJCX0KKworCQkJCS8qIEN1cnJlbnRs eSB0aGUgb25seSBvdGhlciByZWNvcmQgdHlwZSBleHBlY3RlZCBpcyBhCisJCQkJICogX1NBTVBM RS4gTm90YWJseSB0aGlzIHRlc3Qgd2lsbCBuZWVkIHVwZGF0aW5nIGlmCisJCQkJICogaTkxNS1w ZXJmIGlzIGV4dGVuZGVkIGluIHRoZSBmdXR1cmUgd2l0aCBhZGRpdGlvbmFsCisJCQkJICogcmVj b3JkIHR5cGVzLgorCQkJCSAqLworCQkJCWlndF9hc3NlcnRfZXEoaGVhZGVyLT50eXBlLCBEUk1f STkxNV9QRVJGX1JFQ09SRF9TQU1QTEUpOworCisJCQkJaWd0X2Fzc2VydF9lcShoZWFkZXItPnNp emUsIHNhbXBsZV9zaXplKTsKKworCQkJCXJlcG9ydCA9ICh2b2lkICopKGhlYWRlciArIDEpOwor CisJCQkJLyogRG9uJ3QgZXhwZWN0IHplcm8gZm9yIHRpbWVzdGFtcHMgKi8KKwkJCQlpZ3RfYXNz ZXJ0X25lcShyZXBvcnRbMV0sIDApOworCisJCQkJaWd0X2RlYnVnKCJyZXBvcnQgJXA6XG4iLCBy ZXBvcnQpOworCisJCQkJLyogRGlzY2FyZCByZXBvcnRzIG5vdCBjb250YWluZWQgaW4gYmV0d2Vl biB0aGUKKwkJCQkgKiB0aW1lc3RhbXBzIHdlJ3JlIGxvb2tpbmcgYXQuICovCisJCQkJeworCQkJ CQl1aW50MzJfdCB0aW1lX2RlbHRhID0gcmVwb3J0WzFdIC0gcmVwb3J0MF8zMlsxXTsKKworCQkJ CQlpZiAodGltZWJhc2Vfc2NhbGUodGltZV9kZWx0YSkgPiAxMDAwMDAwMDAwKSB7CisJCQkJCQlz a2lwX3JlYXNvbiA9ICJwcmlvciBmaXJzdCBtaS1ycGMiOworCQkJCQl9CisJCQkJfQorCisJCQkJ eworCQkJCQl1aW50MzJfdCB0aW1lX2RlbHRhID0gcmVwb3J0WzFdIC0gcmVwb3J0MV8zMlsxXTsK KworCQkJCQlpZiAodGltZWJhc2Vfc2NhbGUodGltZV9kZWx0YSkgPD0gMTAwMDAwMDAwMCkgewor CQkJCQkJaWd0X2RlYnVnKCIgICAgY29tZXMgYWZ0ZXIgbGFzdCBNSV9SUEMgKCV1KVxuIiwKKwkJ CQkJCQkgIHJlcG9ydDFfMzJbMV0pOworCQkJCQkJcmVwb3J0ID0gcmVwb3J0MV8zMjsKKwkJCQkJ fQorCQkJCX0KKworCQkJCS8qIFByaW50IG91dCBkZWx0YXMgZm9yIGEgZmV3IHNpZ25pZmljYW50 CisJCQkJICogY291bnRlcnMgZm9yIGVhY2ggcmVwb3J0LiAqLworCQkJCWlmIChscHJldikgewor CQkJCQltZW1zZXQobGFjY3VtdWxhdG9yLmRlbHRhcywgMCwgc2l6ZW9mKGxhY2N1bXVsYXRvci5k ZWx0YXMpKTsKKwkJCQkJYWNjdW11bGF0ZV9yZXBvcnRzKCZsYWNjdW11bGF0b3IsIGxwcmV2LCBy ZXBvcnQpOworCQkJCQlpZ3RfZGVidWcoIiAgICBkZWx0YXM6IEEwPSVsdSBBMjE9JWx1LCBBMjY9 JWx1XG4iLAorCQkJCQkJICBsYWNjdW11bGF0b3IuZGVsdGFzWzIgKyAwXSwgLyogc2tpcCB0aW1l c3RhbXAgKyBjbG9jayBjeWNsZXMgKi8KKwkJCQkJCSAgbGFjY3VtdWxhdG9yLmRlbHRhc1syICsg MjFdLAorCQkJCQkJICBsYWNjdW11bGF0b3IuZGVsdGFzWzIgKyAyNl0pOworCQkJCX0KKwkJCQls cHJldiA9IHJlcG9ydDsKKworCQkJCS8qIFByaW50IG91dCByZWFzb24gZm9yIHRoZSByZXBvcnQu ICovCisJCQkJcmVhc29uID0gKChyZXBvcnRbMF0gPj4gT0FSRVBPUlRfUkVBU09OX1NISUZUKSAm CisJCQkJCSAgT0FSRVBPUlRfUkVBU09OX01BU0spOworCisJCQkJaWYgKHJlYXNvbiAmIE9BUkVQ T1JUX1JFQVNPTl9DVFhfU1dJVENIKSB7CisJCQkJCXJlcG9ydF9yZWFzb24gPSAiY3R4LWxvYWQi OworCQkJCX0gZWxzZSBpZiAocmVhc29uICYgT0FSRVBPUlRfUkVBU09OX1RJTUVSKSB7CisJCQkJ CXJlcG9ydF9yZWFzb24gPSAidGltZXIiOworCQkJCX0gZWxzZSBpZiAocmVhc29uICYgT0FSRVBP UlRfUkVBU09OX0lOVEVSTkFMIHx8CisJCQkJCSAgIHJlYXNvbiAmIE9BUkVQT1JUX1JFQVNPTl9H TyB8fAorCQkJCQkgICByZWFzb24gJiBPQVJFUE9SVF9SRUFTT05fQ0xLX1JBVElPKSB7CisJCQkJ CXJlcG9ydF9yZWFzb24gPSAiaW50ZXJuYWwvZ28vY2xrLXJhdGlvIjsKKwkJCQl9IGVsc2Ugewor CQkJCQlyZXBvcnRfcmVhc29uID0gImVuZC1taS1ycGMiOworCQkJCX0KKwkJCQlpZ3RfZGVidWco IiAgICBjdHhfaWQ9JXUvJXggcmVhc29uPSVzIG9hX3RpbWVzdGFtcDMyPSV1XG4iLAorCQkJCQkg IHJlcG9ydFsyXSwgcmVwb3J0WzJdLCByZXBvcnRfcmVhc29uLCByZXBvcnRbMV0pOworCisJCQkJ LyogU2hvdWxkIHdlIHNraXAgdGhpcyByZXBvcnQ/CisJCQkJICoKKwkJCQkgKiAgIE9ubHkgaWYg dGhlIGN1cnJlbnQgY29udGV4dCBpZCBvZgorCQkJCSAqICAgdGhlIHN0cmVhbSBpcyBub3QgdGhl IG9uZSB3ZSB3YW50CisJCQkJICogICB0byBtZWFzdXJlLgorCQkJCSAqLworCQkJCWlmIChjdXJy ZW50X2N0eF9pZCAhPSBjdHhfaWQpIHsKKwkJCQkJc2tpcF9yZWFzb24gPSAibm90IG91ciBjb250 ZXh0IjsKKwkJCQl9CisKKwkJCQlpZiAobl9pbnZhbGlkX2N0eCA+IDEpIHsKKwkJCQkJc2tpcF9y ZWFzb24gPSAidG9vIG1hbnkgaW52YWxpZCBjb250ZXh0IGV2ZW50cyI7CisJCQkJfQorCisJCQkJ aWYgKCFza2lwX3JlYXNvbikgeworCQkJCQlhY2N1bXVsYXRlX3JlcG9ydHMoJmFjY3VtdWxhdG9y LCBwcmV2LCByZXBvcnQpOworCQkJCQlpZ3RfZGVidWcoIiAtPiBBY2N1bXVsYXRlZCBkZWx0YXMg QTA9JWx1IEEyMT0lbHUsIEEyNj0lbHVcbiIsCisJCQkJCQkgIGFjY3VtdWxhdG9yLmRlbHRhc1sy ICsgMF0sIC8qIHNraXAgdGltZXN0YW1wICsgY2xvY2sgY3ljbGVzICovCisJCQkJCQkgIGFjY3Vt dWxhdG9yLmRlbHRhc1syICsgMjFdLAorCQkJCQkJICBhY2N1bXVsYXRvci5kZWx0YXNbMiArIDI2 XSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWd0X2RlYnVnKCIgLT4gU2tpcHBpbmc6ICVzXG4iLCBz a2lwX3JlYXNvbik7CisJCQkJfQorCisKKwkJCQkvKiBGaW5hbGx5IHVwZGF0ZSBjdXJyZW50LWN0 eF9pZCwgb25seSBwb3NzaWJsZQorCQkJCSAqIHdpdGggYSB2YWxpZCBjb250ZXh0IGlkLiAqLwor CQkJCWlmIChvYV9yZXBvcnRfY3R4X2lzX3ZhbGlkKHJlcG9ydCkpIHsKKwkJCQkJY3VycmVudF9j dHhfaWQgPSByZXBvcnRbMl07CisJCQkJCW5faW52YWxpZF9jdHggPSAwOworCQkJCX0gZWxzZSB7 CisJCQkJCW5faW52YWxpZF9jdHgrKzsKKwkJCQl9CisKKwkJCQlwcmV2ID0gcmVwb3J0OworCisJ CQkJaWYgKHJlcG9ydCA9PSByZXBvcnQxXzMyKSB7CisJCQkJCWlndF9kZWJ1ZygiQnJlYWtpbmcg b24gZW5kIG9mIHJlcG9ydFxuIik7CisJCQkJCXByaW50X3JlcG9ydHMocmVwb3J0MF8zMiwgcmVw b3J0MV8zMiwKKwkJCQkJCSAgICAgIGxvb2t1cF9mb3JtYXQodGVzdF9vYV9mb3JtYXQpKTsKKwkJ CQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisJCQlpZ3RfZGVidWcoIm4gc2FtcGxlcyB3cml0dGVu ID0gJWxkLyVsdSAoJWl4JWkpXG4iLAorCQkJCSAgYWNjdW11bGF0b3IuZGVsdGFzWzIgKyAyMV0s Lyogc2tpcCB0aW1lc3RhbXAgKyBjbG9jayBjeWNsZXMgKi8KKwkJCQkgIGFjY3VtdWxhdG9yLmRl bHRhc1syICsgMjZdLAorCQkJCSAgd2lkdGgsIGhlaWdodCk7CisJCQlhY2N1bXVsYXRvcl9wcmlu dCgmYWNjdW11bGF0b3IsICJmaWx0ZXJlZCIpOworCisJCQlyZXQgPSBkcm1faW50ZWxfYm9fbWFw KHNyY1swXS5ibywgZmFsc2UgLyogd3JpdGUgZW5hYmxlICovKTsKKwkJCWlndF9hc3NlcnRfZXEo cmV0LCAwKTsKKwkJCXJldCA9IGRybV9pbnRlbF9ib19tYXAoZHN0WzBdLmJvLCBmYWxzZSAvKiB3 cml0ZSBlbmFibGUgKi8pOworCQkJaWd0X2Fzc2VydF9lcShyZXQsIDApOworCisJCQlyZXQgPSBt ZW1jbXAoc3JjWzBdLmJvLT52aXJ0dWFsLCBkc3RbMF0uYm8tPnZpcnR1YWwsIDQgKiB3aWR0aCAq IGhlaWdodCk7CisJCQlpZiAocmV0ICE9IDApIHsKKwkJCQlhY2N1bXVsYXRvcl9wcmludCgmYWNj dW11bGF0b3IsICJ0b3RhbCIpOworCQkJCS8qIFRoaXMgbmVlZHMgdG8gYmUgaW52ZXN0aWdhdGVk Li4uIEZyb20gdGltZQorCQkJCSAqIHRvIHRpbWUsIHRoZSB3b3JrIHdlIGtpY2sgb2ZmIGRvZXNu J3Qgc2VlbQorCQkJCSAqIHRvIGhhcHBlbi4gV1RIPz8gKi8KKwkJCQlleGl0KEVBR0FJTik7CisJ CQl9CisJCQkvL2lndF9hc3NlcnRfZXEocmV0LCAwKTsKKworCQkJZHJtX2ludGVsX2JvX3VubWFw KHNyY1swXS5ibyk7CisJCQlkcm1faW50ZWxfYm9fdW5tYXAoZHN0WzBdLmJvKTsKKworCQkJaWd0 X2Fzc2VydF9lcShhY2N1bXVsYXRvci5kZWx0YXNbMiArIDI2XSwgd2lkdGggKiBoZWlnaHQpOwor CisJCQlmb3IgKGludCBpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3JjKTsgaSsrKSB7CisJCQkJZHJt X2ludGVsX2JvX3VucmVmZXJlbmNlKHNyY1tpXS5ibyk7CisJCQkJZHJtX2ludGVsX2JvX3VucmVm ZXJlbmNlKGRzdFtpXS5ibyk7CisJCQl9CisKKwkJCWRybV9pbnRlbF9ib191bm1hcChibyk7CisJ CQlkcm1faW50ZWxfYm9fdW5yZWZlcmVuY2UoYm8pOworCQkJaW50ZWxfYmF0Y2hidWZmZXJfZnJl ZShiYXRjaCk7CisJCQlkcm1faW50ZWxfZ2VtX2NvbnRleHRfZGVzdHJveShjb250ZXh0MCk7CisJ CQlkcm1faW50ZWxfZ2VtX2NvbnRleHRfZGVzdHJveShjb250ZXh0MSk7CisJCQlkcm1faW50ZWxf YnVmbWdyX2Rlc3Ryb3koYnVmbWdyKTsKKwkJCV9fcGVyZl9jbG9zZShzdHJlYW1fZmQpOworCQl9 CisKKwkJY2hpbGRfcmV0ID0gaWd0X3dhaXRfaGVscGVyKCZjaGlsZCk7CisKKwkJaWd0X2Fzc2Vy dChXRVhJVFNUQVRVUyhjaGlsZF9yZXQpID09IEVBR0FJTiB8fAorCQkJICAgV0VYSVRTVEFUVVMo Y2hpbGRfcmV0KSA9PSAwKTsKKworCX0gd2hpbGUgKFdFWElUU1RBVFVTKGNoaWxkX3JldCkgPT0g RUFHQUlOKTsKK30KKwogc3RhdGljIHZvaWQKIHRlc3RfcmM2X2Rpc2FibGUodm9pZCkKIHsKQEAg LTMyODAsOCArMzk4NiwxMCBAQCBpZ3RfbWFpbgogCQl0ZXN0X29hX2V4cG9uZW50cyg1NTApOwog CX0KIAotCWlndF9zdWJ0ZXN0KCJwZXItY29udGV4dC1tb2RlLXVucHJpdmlsZWdlZCIpCisJaWd0 X3N1YnRlc3QoInBlci1jb250ZXh0LW1vZGUtdW5wcml2aWxlZ2VkIikgeworCQlpZ3RfcmVxdWly ZShJU19IQVNXRUxMKGRldmlkKSk7CiAJCXRlc3RfcGVyX2NvbnRleHRfbW9kZV91bnByaXZpbGVn ZWQoKTsKKwl9CiAKIAlpZ3Rfc3VidGVzdCgiYnVmZmVyLWZpbGwiKQogCQl0ZXN0X2J1ZmZlcl9m aWxsKCk7CkBAIC0zMzA2LDE1ICs0MDE0LDIwIEBAIGlndF9tYWluCiAJaWd0X3N1YnRlc3QoIm1p LXJwYyIpCiAJCXRlc3RfbWlfcnBjKCk7CiAKLQlpZ3Rfc3VidGVzdCgidW5wcml2aWxlZ2VkLXNp bmdsZWQtY3R4LWNvdW50ZXJzIikgeworCWlndF9zdWJ0ZXN0KCJ1bnByaXZpbGVnZWQtc2luZ2xl LWN0eC1jb3VudGVycyIpIHsKKwkJaWd0X3JlcXVpcmUoSVNfSEFTV0VMTChkZXZpZCkpOworCQlo c3dfdGVzdF9zaW5nbGVfY3R4X2NvdW50ZXJzKCk7CisJfQorCisJaWd0X3N1YnRlc3QoImdlbjgt dW5wcml2aWxlZ2VkLXNpbmdsZS1jdHgtY291bnRlcnMiKSB7CiAJCS8qIEZvciBHZW44KyB0aGUg T0EgdW5pdCBjYW4gbm8gbG9uZ2VyIGJlIG1hZGUgdG8gY2xvY2sgZ2F0ZQogCQkgKiBmb3IgYSBz cGVjaWZpYyBjb250ZXh0LiBBZGRpdGlvbmFsbHkgdGhlIHBhcnRpYWwtcmVwbGFjZW1lbnQKIAkJ ICogZnVuY3Rpb25hbGl0eSB0byBIVyBmaWx0ZXIgdGltZXIgcmVwb3J0cyBmb3IgYSBzcGVjaWZp YwogCQkgKiBjb250ZXh0IChTS0wrKSBjYW4ndCBzdG9wIG11bHRpcGxlIGFwcGxpY2F0aW9ucyB2 aWV3aW5nCiAJCSAqIHN5c3RlbS13aWRlIGRhdGEgdmlhIE1JX1JFUE9SVF9QRVJGX0NPVU5UIGNv bW1hbmRzLgogCQkgKi8KLQkJaWd0X3JlcXVpcmUoSVNfSEFTV0VMTChkZXZpZCkpOwotCQloc3df dGVzdF9zaW5nbGVfY3R4X2NvdW50ZXJzKCk7CisJCWlndF9yZXF1aXJlKGludGVsX2dlbihkZXZp ZCkgPj0gOCk7CisJCWdlbjhfdGVzdF9zaW5nbGVfY3R4X3JlbmRlcl90YXJnZXRfd3JpdGVzX2Ff Y291bnRlcigpOwogCX0KIAogCWlndF9zdWJ0ZXN0KCJyYzYtZGlzYWJsZSIpCi0tIAoyLjE0LjEK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdm eCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=