From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: multipart/mixed; boundary="===============1081466503980324353==" MIME-Version: 1.0 From: Al Stone Subject: [Devel] [PATCH] handle Linux systems without /dev/mem Date: Wed, 03 Jun 2015 18:43:15 -0600 Message-ID: <556F9F23.6020808@redhat.com> List-ID: To: devel@acpica.org --===============1081466503980324353== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable On arm64 systems in particular, the use of /dev/mem is not recommended. The contents may or may not be valid depending on the memory map being used, si= nce they are not standardized. The attached patch will cause arm64 (aka ARMv8 or AArch64) Linux systems to use a new file called source/os_specific/service_layers/oslinuxtbl_nodevmem= .c (a subset of the oslinuxtbl.c code) that allows acpidump to read all ACPI tables from /sys/firmware/acpi instead of from /dev/mem. This will help en= sure that the tables retrieved are the ones actually being used and that their content is correct. This patch applies on top of the 20150515 version, and I have included it in the 20150515-2 versions of the Fedora and Debian packages. I've tried the resulting acpidump on x86, x86_64 and arm64 systems and it seems to work we= ll. Signed-off-by: Al Stone -- = ciao, al ----------------------------------- Al Stone Software Engineer Red Hat, Inc. ahs3(a)redhat.com ----------------------------------- --===============1081466503980324353== Content-Type: text/x-patch MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="nodevmem.patch" ZGlmZiAtTmF1ciBhY3BpY2EtdW5peDItMjAxNTA1MTUvZ2VuZXJhdGUvdW5peC9hY3BpZHVtcC9N YWtlZmlsZSBhY3BpY2EtdW5peDItMjAxNTA1MTUuZGV2bWVtL2dlbmVyYXRlL3VuaXgvYWNwaWR1 bXAvTWFrZWZpbGUKLS0tIGFjcGljYS11bml4Mi0yMDE1MDUxNS9nZW5lcmF0ZS91bml4L2FjcGlk dW1wL01ha2VmaWxlCTIwMTUtMDUtMTUgMTc6NDk6MTcuMDAwMDAwMDAwIC0wNjAwCisrKyBhY3Bp Y2EtdW5peDItMjAxNTA1MTUuZGV2bWVtL2dlbmVyYXRlL3VuaXgvYWNwaWR1bXAvTWFrZWZpbGUJ MjAxNS0wNi0wMiAxNTowMDozMS44MTM3NDYzMzYgLTA2MDAKQEAgLTY3LDEwICs2NywxNyBAQAog T0JKRUNUUyArPSBcCiAJJChPQkpESVIpL29zYnNkdGJsLm8KIGVsc2UKKworaWZlcSAoJChOT19E RVZfTUVNKSwgdHJ1ZSkKK09CSkVDVFMgKz0gXAorCSQoT0JKRElSKS9vc2xpbnV4dGJsX25vZGV2 bWVtLm8KK2Vsc2UKIE9CSkVDVFMgKz0gXAogCSQoT0JKRElSKS9vc2xpbnV4dGJsLm8KIGVuZGlm CiAKK2VuZGlmCisKICMKICMgRmxhZ3Mgc3BlY2lmaWMgdG8gYWNwaWR1bXAKICMKZGlmZiAtTmF1 ciBhY3BpY2EtdW5peDItMjAxNTA1MTUvZ2VuZXJhdGUvdW5peC9NYWtlZmlsZS5jb25maWcgYWNw aWNhLXVuaXgyLTIwMTUwNTE1LmRldm1lbS9nZW5lcmF0ZS91bml4L01ha2VmaWxlLmNvbmZpZwot LS0gYWNwaWNhLXVuaXgyLTIwMTUwNTE1L2dlbmVyYXRlL3VuaXgvTWFrZWZpbGUuY29uZmlnCTIw MTUtMDYtMDMgMTQ6NTc6MzAuMzI4NzI0MzE3IC0wNjAwCisrKyBhY3BpY2EtdW5peDItMjAxNTA1 MTUuZGV2bWVtL2dlbmVyYXRlL3VuaXgvTWFrZWZpbGUuY29uZmlnCTIwMTUtMDYtMDIgMTU6MDM6 NTMuNzI3NTYwMTAwIC0wNjAwCkBAIC00OSw2ICs0OSw3IEBACiBMSU5LUFJPRyA9ICAgJChDQykg JChPQkpFQ1RTKSAtbyAkKFBST0cpICQoTERGTEFHUykgJChPUFRfTERGTEFHUykKIFBSRUZJWCA/ PSAgICAvdXNyCiBJTlNUQUxMRElSID0gJChQUkVGSVgpL2JpbgorVU5BTUVfTSA6PSAkKHNoZWxs IHVuYW1lIC1tKQogVU5BTUVfUyA6PSAkKHNoZWxsIHVuYW1lIC1zKQogCiAjCkBAIC03MCw2ICs3 MSwxMiBAQAogSE9TVCA9ICAgICAgIF9OZXRCU0QKIGVuZGlmCiAKK2lmZXEgKCQoVU5BTUVfUyks IExpbnV4KQoraWZlcSAoJChVTkFNRV9NKSwgYWFyY2g2NCkKK05PX0RFVl9NRU0gPz0gdHJ1ZQor ZW5kaWYKK2VuZGlmCisKIGlmZXEgKCQoSE9TVCksIF9BUFBMRSkKIElOU1RBTEwgID0gICBjcAog SU5TVEFMTEZMQUdTID89IC1mCmRpZmYgLU5hdXIgYWNwaWNhLXVuaXgyLTIwMTUwNTE1L3NvdXJj ZS9vc19zcGVjaWZpYy9zZXJ2aWNlX2xheWVycy9vc2xpbnV4dGJsX25vZGV2bWVtLmMgYWNwaWNh LXVuaXgyLTIwMTUwNTE1LmRldm1lbS9zb3VyY2Uvb3Nfc3BlY2lmaWMvc2VydmljZV9sYXllcnMv b3NsaW51eHRibF9ub2Rldm1lbS5jCi0tLSBhY3BpY2EtdW5peDItMjAxNTA1MTUvc291cmNlL29z X3NwZWNpZmljL3NlcnZpY2VfbGF5ZXJzL29zbGludXh0Ymxfbm9kZXZtZW0uYwkxOTY5LTEyLTMx IDE3OjAwOjAwLjAwMDAwMDAwMCAtMDcwMAorKysgYWNwaWNhLXVuaXgyLTIwMTUwNTE1LmRldm1l bS9zb3VyY2Uvb3Nfc3BlY2lmaWMvc2VydmljZV9sYXllcnMvb3NsaW51eHRibF9ub2Rldm1lbS5j CTIwMTUtMDYtMDIgMTY6MTQ6MzguMDg4MDMxMDI3IC0wNjAwCkBAIC0wLDAgKzEsNzM0IEBACisv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqCisgKgorICogTW9kdWxlIE5hbWU6IG9zbGludXh0Ymxfbm9k ZXZtZW0gLSBMaW51eCBPU0wgZm9yIG9idGFpbmluZyBBQ1BJIHRhYmxlcworICogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGFzc3VtZXMgeW91IGNhbm5vdCB1c2UgL2Rl di9tZW0KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJhY3BpZHVtcC5o IgorCisKKyNkZWZpbmUgX0NPTVBPTkVOVCAgICAgICAgICBBQ1BJX09TX1NFUlZJQ0VTCisgICAg ICAgIEFDUElfTU9EVUxFX05BTUUgICAgKCJvc2xpbnV4dGJsX25vZGV2bWVtIikKKworCisjaWZu ZGVmIFBBVEhfTUFYCisjZGVmaW5lIFBBVEhfTUFYIDI1NgorI2VuZGlmCisKKworLyogTGlzdCBv ZiBpbmZvcm1hdGlvbiBhYm91dCBvYnRhaW5lZCBBQ1BJIHRhYmxlcyAqLworCit0eXBlZGVmIHN0 cnVjdCBvc2xfdGFibGVfaW5mbworeworICAgIHN0cnVjdCBvc2xfdGFibGVfaW5mbyAgICpOZXh0 OworICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgIEluc3RhbmNlOworICAgIGNoYXIgICAgICAg ICAgICAgICAgICAgIFNpZ25hdHVyZVtBQ1BJX05BTUVfU0laRV07CisKK30gT1NMX1RBQkxFX0lO Rk87CisKKy8qIExvY2FsIHByb3RvdHlwZXMgKi8KKworc3RhdGljIEFDUElfU1RBVFVTCitPc2xU YWJsZUluaXRpYWxpemUgKAorICAgIHZvaWQpOworCitzdGF0aWMgQUNQSV9TVEFUVVMKK09zbFRh YmxlTmFtZUZyb21GaWxlICgKKyAgICBjaGFyICAgICAgICAgICAgICAgICAgICAqRmlsZW5hbWUs CisgICAgY2hhciAgICAgICAgICAgICAgICAgICAgKlNpZ25hdHVyZSwKKyAgICBVSU5UMzIgICAg ICAgICAgICAgICAgICAqSW5zdGFuY2UpOworCitzdGF0aWMgQUNQSV9TVEFUVVMKK09zbEFkZFRh YmxlVG9MaXN0ICgKKyAgICBjaGFyICAgICAgICAgICAgICAgICAgICAqU2lnbmF0dXJlLAorICAg IFVJTlQzMiAgICAgICAgICAgICAgICAgIEluc3RhbmNlKTsKKworc3RhdGljIEFDUElfU1RBVFVT CitPc2xSZWFkVGFibGVGcm9tRmlsZSAoCisgICAgY2hhciAgICAgICAgICAgICAgICAgICAgKkZp bGVuYW1lLAorICAgIEFDUElfU0laRSAgICAgICAgICAgICAgIEZpbGVPZmZzZXQsCisgICAgY2hh ciAgICAgICAgICAgICAgICAgICAgKlNpZ25hdHVyZSwKKyAgICBBQ1BJX1RBQkxFX0hFQURFUiAg ICAgICAqKlRhYmxlKTsKKworc3RhdGljIEFDUElfU1RBVFVTCitPc2xMaXN0QWNwaVRhYmxlcyAo CisgICAgY2hhciAgICAgICAgICAgICAgICAgICAgKkRpcmVjdG9yeSk7CisKK3N0YXRpYyBBQ1BJ X1NUQVRVUworT3NsR2V0QWNwaVRhYmxlICgKKyAgICBjaGFyICAgICAgICAgICAgICAgICAgICAq UGF0aG5hbWUsCisgICAgY2hhciAgICAgICAgICAgICAgICAgICAgKlNpZ25hdHVyZSwKKyAgICBV SU5UMzIgICAgICAgICAgICAgICAgICBJbnN0YW5jZSwKKyAgICBBQ1BJX1RBQkxFX0hFQURFUiAg ICAgICAqKlRhYmxlLAorICAgIEFDUElfUEhZU0lDQUxfQUREUkVTUyAgICpBZGRyZXNzKTsKKwor c3RhdGljIEFDUElfU1RBVFVTCitPc2xHZXRMYXN0U3RhdHVzICgKKyAgICBBQ1BJX1NUQVRVUyAg ICAgICAgICAgICBEZWZhdWx0U3RhdHVzKTsKKworCisvKiBGaWxlIGxvY2F0aW9ucyAqLworCisj ZGVmaW5lIERZTkFNSUNfVEFCTEVfRElSICAgIi9zeXMvZmlybXdhcmUvYWNwaS90YWJsZXMvZHlu YW1pYyIKKyNkZWZpbmUgU1RBVElDX1RBQkxFX0RJUiAgICAiL3N5cy9maXJtd2FyZS9hY3BpL3Rh YmxlcyIKKworLyogU2hvdWxkIHdlIGdldCBkeW5hbWljYWxseSBsb2FkZWQgU1NEVHMgZnJvbSBE WU5BTUlDX1RBQkxFX0RJUj8gKi8KKworVUlOVDggICAgICAgICAgICAgICAgICAgR2JsX0R1bXBE eW5hbWljVGFibGVzID0gVFJVRTsKKworLyogSW5pdGlhbGl6YXRpb24gZmxhZ3MgKi8KKworVUlO VDggICAgICAgICAgICAgICAgICAgR2JsX1RhYmxlTGlzdEluaXRpYWxpemVkID0gRkFMU0U7CisK Ky8qIFJldmlzaW9uIG9mIFJTRCBQVFIgKi8KKworVUlOVDggICAgICAgICAgICAgICAgICAgR2Js X1JldmlzaW9uID0gMDsKKworT1NMX1RBQkxFX0lORk8gICAgICAgICAgKkdibF9UYWJsZUxpc3RI ZWFkID0gTlVMTDsKK1VJTlQzMiAgICAgICAgICAgICAgICAgIEdibF9UYWJsZUNvdW50ID0gMDsK KworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRlVOQ1RJT046ICAgIE9zbEdldExh c3RTdGF0dXMKKyAqCisgKiBQQVJBTUVURVJTOiAgRGVmYXVsdFN0YXR1cyAgIC0gRGVmYXVsdCBl cnJvciBzdGF0dXMgdG8gcmV0dXJuCisgKgorICogUkVUVVJOOiAgICAgIFN0YXR1czsgQ29udmVy dGVkIGZyb20gZXJybm8uCisgKgorICogREVTQ1JJUFRJT046IEdldCBsYXN0IGVycm5vIGFuZCBj b252ZXIgaXQgdG8gQUNQSV9TVEFUVVMuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitz dGF0aWMgQUNQSV9TVEFUVVMKK09zbEdldExhc3RTdGF0dXMgKAorICAgIEFDUElfU1RBVFVTICAg ICAgICAgICAgIERlZmF1bHRTdGF0dXMpCit7CisKKyAgICBzd2l0Y2ggKGVycm5vKQorICAgIHsK KyAgICBjYXNlIEVBQ0NFUzoKKyAgICBjYXNlIEVQRVJNOgorCisgICAgICAgIHJldHVybiAoQUVf QUNDRVNTKTsKKworICAgIGNhc2UgRU5PRU5UOgorCisgICAgICAgIHJldHVybiAoQUVfTk9UX0ZP VU5EKTsKKworICAgIGNhc2UgRU5PTUVNOgorCisgICAgICAgIHJldHVybiAoQUVfTk9fTUVNT1JZ KTsKKworICAgIGRlZmF1bHQ6CisKKyAgICAgICAgcmV0dXJuIChEZWZhdWx0U3RhdHVzKTsKKyAg ICB9Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBB Y3BpT3NHZXRUYWJsZUJ5QWRkcmVzcworICoKKyAqIFBBUkFNRVRFUlM6ICBBZGRyZXNzICAgICAg ICAgLSBQaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBBQ1BJIHRhYmxlCisgKiAgICAgICAgICAgICAg VGFibGUgICAgICAgICAgIC0gV2hlcmUgYSBwb2ludGVyIHRvIHRoZSB0YWJsZSBpcyByZXR1cm5l ZAorICoKKyAqIFJFVFVSTjogICAgICBTdGF0dXM7IFRhYmxlIGJ1ZmZlciBpcyByZXR1cm5lZCBp ZiBBRV9PSy4KKyAqICAgICAgICAgICAgICBBRV9OT1RfRk9VTkQ6IEEgdmFsaWQgdGFibGUgd2Fz IG5vdCBmb3VuZCBhdCB0aGUgYWRkcmVzcworICoKKyAqIERFU0NSSVBUSU9OOiBHZXQgYW4gQUNQ SSB0YWJsZSB2aWEgYSBwaHlzaWNhbCBtZW1vcnkgYWRkcmVzcy4KKyAqCisgKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCisKK0FDUElfU1RBVFVTCitBY3BpT3NHZXRUYWJsZUJ5QWRkcmVzcyAoCisgICAg QUNQSV9QSFlTSUNBTF9BRERSRVNTICAgQWRkcmVzcywKKyAgICBBQ1BJX1RBQkxFX0hFQURFUiAg ICAgICAqKlRhYmxlKQoreworICAgIC8qCisgICAgICogSWYgdGhpcyBzb3VyY2UgZmlsZSBpcyBi ZWluZyB1c2VkLCB0aGVyZSBpcyBubyByZWxpYWJsZSBhY2Nlc3MKKyAgICAgKiB0byAvZGV2L21l bSBvbiB0aGlzIHN5c3RlbS4gIEhlbmNlLCB3ZSBjYW5ub3QgcmV0cmlldmUgYSB0YWJsZQorICAg ICAqIGJ5IGFkZHJlc3MgYXQgYWxsIGFuZCB3aWxsIGFsd2F5cyByZXR1cm4gQUVfTk9UX0ZPVU5E LgorICAgICAqLworCisgICAgcmV0dXJuIEFFX05PVF9GT1VORDsKK30KKworCisvKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqCisgKgorICogRlVOQ1RJT046ICAgIEFjcGlPc0dldFRhYmxlQnlOYW1lCisg KgorICogUEFSQU1FVEVSUzogIFNpZ25hdHVyZSAgICAgICAtIEFDUEkgU2lnbmF0dXJlIGZvciBk ZXNpcmVkIHRhYmxlLiBNdXN0IGJlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YSBudWxsIHRlcm1pbmF0ZWQgNC1jaGFyYWN0ZXIgc3RyaW5nLgorICogICAgICAgICAgICAgIElu c3RhbmNlICAgICAgICAtIE11bHRpcGxlIHRhYmxlIHN1cHBvcnQgZm9yIFNTRFQvVUVGSSAoMC4u Lm4pCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTXVzdCBiZSAwIGZvciBvdGhl ciB0YWJsZXMuCisgKiAgICAgICAgICAgICAgVGFibGUgICAgICAgICAgIC0gV2hlcmUgYSBwb2lu dGVyIHRvIHRoZSB0YWJsZSBpcyByZXR1cm5lZAorICogICAgICAgICAgICAgIEFkZHJlc3MgICAg ICAgICAtIFdoZXJlIHRoZSB0YWJsZSBwaHlzaWNhbCBhZGRyZXNzIGlzIHJldHVybmVkCisgKgor ICogUkVUVVJOOiAgICAgIFN0YXR1czsgVGFibGUgYnVmZmVyIGFuZCBwaHlzaWNhbCBhZGRyZXNz IHJldHVybmVkIGlmIEFFX09LLgorICogICAgICAgICAgICAgIEFFX0xJTUlUOiBJbnN0YW5jZSBp cyBiZXlvbmQgdmFsaWQgbGltaXQKKyAqICAgICAgICAgICAgICBBRV9OT1RfRk9VTkQ6IEEgdGFi bGUgd2l0aCB0aGUgc2lnbmF0dXJlIHdhcyBub3QgZm91bmQKKyAqCisgKiBOT1RFOiAgICAgICAg QXNzdW1lcyB0aGUgaW5wdXQgc2lnbmF0dXJlIGlzIHVwcGVyY2FzZS4KKyAqCisgKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCisKK0FDUElfU1RBVFVTCitBY3BpT3NHZXRUYWJsZUJ5TmFtZSAoCisgICAg Y2hhciAgICAgICAgICAgICAgICAgICAgKlNpZ25hdHVyZSwKKyAgICBVSU5UMzIgICAgICAgICAg ICAgICAgICBJbnN0YW5jZSwKKyAgICBBQ1BJX1RBQkxFX0hFQURFUiAgICAgICAqKlRhYmxlLAor ICAgIEFDUElfUEhZU0lDQUxfQUREUkVTUyAgICpBZGRyZXNzKQoreworICAgIEFDUElfU1RBVFVT ICAgICAgICAgICAgIFN0YXR1czsKKworCisgICAgLyogR2V0IG1haW4gQUNQSSB0YWJsZXMgZnJv bSBtZW1vcnkgb24gZmlyc3QgaW52b2NhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uICovCisKKyAgICBT dGF0dXMgPSBPc2xUYWJsZUluaXRpYWxpemUgKCk7CisgICAgaWYgKEFDUElfRkFJTFVSRSAoU3Rh dHVzKSkKKyAgICB7CisgICAgICAgIHJldHVybiAoU3RhdHVzKTsKKyAgICB9CisKKyAgICAvKiBB dHRlbXB0IHRvIGdldCB0aGUgdGFibGUgZnJvbSB0aGUgc3RhdGljIGRpcmVjdG9yeSAqLworCisg ICAgU3RhdHVzID0gT3NsR2V0QWNwaVRhYmxlIChTVEFUSUNfVEFCTEVfRElSLCBTaWduYXR1cmUs CisgICAgICAgIEluc3RhbmNlLCBUYWJsZSwgQWRkcmVzcyk7CisKKyAgICBpZiAoQUNQSV9GQUlM VVJFIChTdGF0dXMpICYmIFN0YXR1cyA9PSBBRV9MSU1JVCkKKyAgICB7CisgICAgICAgIGlmIChH YmxfRHVtcER5bmFtaWNUYWJsZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEF0dGVtcHQg dG8gZ2V0IGEgZHluYW1pYyB0YWJsZSAqLworCisgICAgICAgICAgICBTdGF0dXMgPSBPc2xHZXRB Y3BpVGFibGUgKERZTkFNSUNfVEFCTEVfRElSLCBTaWduYXR1cmUsCisgICAgICAgICAgICAgICAg SW5zdGFuY2UsIFRhYmxlLCBBZGRyZXNzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy biAoU3RhdHVzKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRlVOQ1RJ T046ICAgIE9zbEFkZFRhYmxlVG9MaXN0CisgKgorICogUEFSQU1FVEVSUzogIFNpZ25hdHVyZSAg ICAgICAtIFRhYmxlIHNpZ25hdHVyZQorICogICAgICAgICAgICAgIEluc3RhbmNlICAgICAgICAt IFRhYmxlIGluc3RhbmNlCisgKgorICogUkVUVVJOOiAgICAgIFN0YXR1czsgU3VjY2Vzc2Z1bGx5 IGFkZGVkIGlmIEFFX09LLgorICogICAgICAgICAgICAgIEFFX05PX01FTU9SWTogTWVtb3J5IGFs bG9jYXRpb24gZXJyb3IKKyAqCisgKiBERVNDUklQVElPTjogSW5zZXJ0IGEgdGFibGUgc3RydWN0 dXJlIGludG8gT1NMIHRhYmxlIGxpc3QuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitz dGF0aWMgQUNQSV9TVEFUVVMKK09zbEFkZFRhYmxlVG9MaXN0ICgKKyAgICBjaGFyICAgICAgICAg ICAgICAgICAgICAqU2lnbmF0dXJlLAorICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgIEluc3Rh bmNlKQoreworICAgIE9TTF9UQUJMRV9JTkZPICAgICAgICAgICpOZXdJbmZvOworICAgIE9TTF9U QUJMRV9JTkZPICAgICAgICAgICpOZXh0OworICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgIE5l eHRJbnN0YW5jZSA9IDA7CisgICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgRm91bmQgPSBGQUxT RTsKKworCisgICAgTmV3SW5mbyA9IGNhbGxvYyAoMSwgc2l6ZW9mIChPU0xfVEFCTEVfSU5GTykp OworICAgIGlmICghTmV3SW5mbykKKyAgICB7CisgICAgICAgIHJldHVybiAoQUVfTk9fTUVNT1JZ KTsKKyAgICB9CisKKyAgICBBQ1BJX01PVkVfTkFNRSAoTmV3SW5mby0+U2lnbmF0dXJlLCBTaWdu YXR1cmUpOworCisgICAgaWYgKCFHYmxfVGFibGVMaXN0SGVhZCkKKyAgICB7CisgICAgICAgIEdi bF9UYWJsZUxpc3RIZWFkID0gTmV3SW5mbzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg ICAgTmV4dCA9IEdibF9UYWJsZUxpc3RIZWFkOworICAgICAgICB3aGlsZSAoMSkKKyAgICAgICAg eworICAgICAgICAgICAgaWYgKEFDUElfQ09NUEFSRV9OQU1FIChOZXh0LT5TaWduYXR1cmUsIFNp Z25hdHVyZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKE5leHQtPkluc3Rh bmNlID09IEluc3RhbmNlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg Rm91bmQgPSBUUlVFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoTmV4 dC0+SW5zdGFuY2UgPj0gTmV4dEluc3RhbmNlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg ICAgICAgICAgICAgTmV4dEluc3RhbmNlID0gTmV4dC0+SW5zdGFuY2UgKyAxOworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFOZXh0LT5OZXh0KQor ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg ICAgICAgICAgTmV4dCA9IE5leHQtPk5leHQ7CisgICAgICAgIH0KKyAgICAgICAgTmV4dC0+TmV4 dCA9IE5ld0luZm87CisgICAgfQorCisgICAgaWYgKEZvdW5kKQorICAgIHsKKyAgICAgICAgaWYg KEluc3RhbmNlKQorICAgICAgICB7CisgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsCisgICAg ICAgICAgICAgICAgIiU0LjRzOiBXYXJuaW5nIHVubWF0Y2hlZCB0YWJsZSBpbnN0YW5jZSAlZCwg ZXhwZWN0ZWQgJWRcbiIsCisgICAgICAgICAgICAgICAgU2lnbmF0dXJlLCBJbnN0YW5jZSwgTmV4 dEluc3RhbmNlKTsKKyAgICAgICAgfQorICAgICAgICBJbnN0YW5jZSA9IE5leHRJbnN0YW5jZTsK KyAgICB9CisKKyAgICBOZXdJbmZvLT5JbnN0YW5jZSA9IEluc3RhbmNlOworICAgIEdibF9UYWJs ZUNvdW50Kys7CisKKyAgICByZXR1cm4gKEFFX09LKTsKK30KKworCisvKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqCisgKgorICogRlVOQ1RJT046ICAgIEFjcGlPc0dldFRhYmxlQnlJbmRleAorICoKKyAq IFBBUkFNRVRFUlM6ICBJbmRleCAgICAgICAgICAgLSBXaGljaCB0YWJsZSB0byBnZXQKKyAqICAg ICAgICAgICAgICBUYWJsZSAgICAgICAgICAgLSBXaGVyZSBhIHBvaW50ZXIgdG8gdGhlIHRhYmxl IGlzIHJldHVybmVkCisgKiAgICAgICAgICAgICAgSW5zdGFuY2UgICAgICAgIC0gV2hlcmUgYSBw b2ludGVyIHRvIHRoZSB0YWJsZSBpbnN0YW5jZSBuby4gaXMKKyAqICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm5lZAorICogICAgICAgICAgICAgIEFkZHJlc3MgICAgICAgICAt IFdoZXJlIHRoZSB0YWJsZSBwaHlzaWNhbCBhZGRyZXNzIGlzIHJldHVybmVkCisgKgorICogUkVU VVJOOiAgICAgIFN0YXR1czsgVGFibGUgYnVmZmVyIGFuZCBwaHlzaWNhbCBhZGRyZXNzIHJldHVy bmVkIGlmIEFFX09LLgorICogICAgICAgICAgICAgIEFFX0xJTUlUOiBJbmRleCBpcyBiZXlvbmQg dmFsaWQgbGltaXQKKyAqCisgKiBERVNDUklQVElPTjogR2V0IGFuIEFDUEkgdGFibGUgdmlhIGFu IGluZGV4IHZhbHVlICgwIHRocm91Z2ggbikuIFJldHVybnMKKyAqICAgICAgICAgICAgICBBRV9M SU1JVCB3aGVuIGFuIGludmFsaWQgaW5kZXggaXMgcmVhY2hlZC4gSW5kZXggaXMgbm90CisgKiAg ICAgICAgICAgICAgbmVjZXNzYXJpbHkgYW4gaW5kZXggaW50byB0aGUgUlNEVC9YU0RULgorICoK KyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8KKworQUNQSV9TVEFUVVMKK0FjcGlPc0dldFRhYmxlQnlJ bmRleCAoCisgICAgVUlOVDMyICAgICAgICAgICAgICAgICAgSW5kZXgsCisgICAgQUNQSV9UQUJM RV9IRUFERVIgICAgICAgKipUYWJsZSwKKyAgICBVSU5UMzIgICAgICAgICAgICAgICAgICAqSW5z dGFuY2UsCisgICAgQUNQSV9QSFlTSUNBTF9BRERSRVNTICAgKkFkZHJlc3MpCit7CisgICAgT1NM X1RBQkxFX0lORk8gICAgICAgICAgKkluZm87CisgICAgQUNQSV9TVEFUVVMgICAgICAgICAgICAg U3RhdHVzOworICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgIGk7CisKKworICAgIC8qIEdldCBt YWluIEFDUEkgdGFibGVzIGZyb20gbWVtb3J5IG9uIGZpcnN0IGludm9jYXRpb24gb2YgdGhpcyBm dW5jdGlvbiAqLworCisgICAgU3RhdHVzID0gT3NsVGFibGVJbml0aWFsaXplICgpOworICAgIGlm IChBQ1BJX0ZBSUxVUkUgKFN0YXR1cykpCisgICAgeworICAgICAgICByZXR1cm4gKFN0YXR1cyk7 CisgICAgfQorCisgICAgLyogVmFsaWRhdGUgSW5kZXggKi8KKworICAgIGlmIChJbmRleCA+PSBH YmxfVGFibGVDb3VudCkKKyAgICB7CisgICAgICAgIHJldHVybiAoQUVfTElNSVQpOworICAgIH0K KworICAgIC8qIFBvaW50IHRvIHRoZSB0YWJsZSBsaXN0IGVudHJ5IHNwZWNpZmllZCBieSB0aGUg SW5kZXggYXJndW1lbnQgKi8KKworICAgIEluZm8gPSBHYmxfVGFibGVMaXN0SGVhZDsKKyAgICBm b3IgKGkgPSAwOyBpIDwgSW5kZXg7IGkrKykKKyAgICB7CisgICAgICAgIEluZm8gPSBJbmZvLT5O ZXh0OworICAgIH0KKworICAgIC8qIE5vdyB3ZSBjYW4ganVzdCBnZXQgdGhlIHRhYmxlIHZpYSB0 aGUgc2lnbmF0dXJlICovCisKKyAgICBTdGF0dXMgPSBBY3BpT3NHZXRUYWJsZUJ5TmFtZSAoSW5m by0+U2lnbmF0dXJlLCBJbmZvLT5JbnN0YW5jZSwKKyAgICAgICAgVGFibGUsIEFkZHJlc3MpOwor CisgICAgaWYgKEFDUElfU1VDQ0VTUyAoU3RhdHVzKSkKKyAgICB7CisgICAgICAgICpJbnN0YW5j ZSA9IEluZm8tPkluc3RhbmNlOworICAgIH0KKyAgICByZXR1cm4gKFN0YXR1cyk7Cit9CisKKwor LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBPc2xUYWJsZUluaXRp YWxpemUKKyAqCisgKiBQQVJBTUVURVJTOiAgTm9uZQorICoKKyAqIFJFVFVSTjogICAgICBTdGF0 dXMKKyAqCisgKiBERVNDUklQVElPTjogSW5pdGlhbGl6ZSBBQ1BJIHRhYmxlIGRhdGEuIEdldCBh bmQgc3RvcmUgbWFpbiBBQ1BJIHRhYmxlcyB0bworICogICAgICAgICAgICAgIGxvY2FsIHZhcmlh Ymxlcy4gTWFpbiBBQ1BJIHRhYmxlcyBpbmNsdWRlIFJTRFQsIEZBRFQsIFJTRFQsCisgKiAgICAg ICAgICAgICAgYW5kL29yIFhTRFQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0 aWMgQUNQSV9TVEFUVVMKK09zbFRhYmxlSW5pdGlhbGl6ZSAoCisgICAgdm9pZCkKK3sKKyAgICBB Q1BJX1NUQVRVUyAgICAgICAgICAgICBTdGF0dXM7CisKKyAgICBpZiAoR2JsX1RhYmxlTGlzdElu aXRpYWxpemVkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChBRV9PSyk7CisgICAgfQorCisgICAg LyogQWRkIGFsbCB0YWJsZXMgZm91bmQgaW4gdGhlIHN0YXRpYyBkaXJlY3RvcnkgKi8KKworICAg IFN0YXR1cyA9IE9zbExpc3RBY3BpVGFibGVzIChTVEFUSUNfVEFCTEVfRElSKTsKKyAgICBpZiAo QUNQSV9GQUlMVVJFIChTdGF0dXMpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChTdGF0dXMpOwor ICAgIH0KKworICAgIGlmIChHYmxfRHVtcER5bmFtaWNUYWJsZXMpCisgICAgeworICAgICAgICAv KiBBZGQgYWxsIGR5bmFtaWNhbGx5IGxvYWRlZCB0YWJsZXMgaW4gdGhlIGR5bmFtaWMgZGlyZWN0 b3J5ICovCisKKyAgICAgICAgU3RhdHVzID0gT3NsTGlzdEFjcGlUYWJsZXMgKERZTkFNSUNfVEFC TEVfRElSKTsKKyAgICAgICAgaWYgKEFDUElfRkFJTFVSRSAoU3RhdHVzKSkKKyAgICAgICAgewor ICAgICAgICAgICAgcmV0dXJuIChTdGF0dXMpOworICAgICAgICB9CisgICAgfQorCisgICAgR2Js X1RhYmxlTGlzdEluaXRpYWxpemVkID0gVFJVRTsKKyAgICByZXR1cm4gKEFFX09LKTsKK30KKwor CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRlVOQ1RJT046ICAgIE9zbExpc3RBY3Bp VGFibGVzCisgKgorICogUEFSQU1FVEVSUzogIERpcmVjdG9yeSAgICAgICAgICAgLSBEaXJlY3Rv cnkgdGhhdCBjb250YWlucyB0aGUgdGFibGVzCisgKgorICogUkVUVVJOOiAgICAgIFN0YXR1czsg VGFibGUgbGlzdCBpcyBpbml0aWFsaXplZCBpZiBBRV9PSy4KKyAqCisgKiBERVNDUklQVElPTjog QWRkIEFDUEkgdGFibGVzIHRvIHRoZSB0YWJsZSBsaXN0IGZyb20gYSBkaXJlY3RvcnkuCisgKgor ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgQUNQSV9TVEFUVVMKK09zbExpc3RBY3Bp VGFibGVzICgKKyAgICBjaGFyICAgICAgICAgICAgICAgICAgICAqRGlyZWN0b3J5KQoreworICAg IHZvaWQgICAgICAgICAgICAgICAgICAgICpUYWJsZURpcjsKKyAgICBVSU5UMzIgICAgICAgICAg ICAgICAgICBJbnN0YW5jZTsKKyAgICBjaGFyICAgICAgICAgICAgICAgICAgICBUZW1wTmFtZVtB Q1BJX05BTUVfU0laRV07CisgICAgY2hhciAgICAgICAgICAgICAgICAgICAgKkZpbGVuYW1lOwor ICAgIEFDUElfU1RBVFVTICAgICAgICAgICAgIFN0YXR1cyA9IEFFX09LOworCisKKyAgICAvKiBP cGVuIHRoZSByZXF1ZXN0ZWQgZGlyZWN0b3J5ICovCisKKyAgICBUYWJsZURpciA9IEFjcGlPc09w ZW5EaXJlY3RvcnkgKERpcmVjdG9yeSwgIioiLCBSRVFVRVNUX0ZJTEVfT05MWSk7CisgICAgaWYg KCFUYWJsZURpcikKKyAgICB7CisgICAgICAgIHJldHVybiAoT3NsR2V0TGFzdFN0YXR1cyAoQUVf Tk9UX0ZPVU5EKSk7CisgICAgfQorCisgICAgLyogRXhhbWluZSBhbGwgZW50cmllcyBpbiB0aGlz IGRpcmVjdG9yeSAqLworCisgICAgd2hpbGUgKChGaWxlbmFtZSA9IEFjcGlPc0dldE5leHRGaWxl bmFtZSAoVGFibGVEaXIpKSkKKyAgICB7CisgICAgICAgIC8qIEV4dHJhY3QgdGFibGUgbmFtZSBh bmQgaW5zdGFuY2UgbnVtYmVyICovCisKKyAgICAgICAgU3RhdHVzID0gT3NsVGFibGVOYW1lRnJv bUZpbGUgKEZpbGVuYW1lLCBUZW1wTmFtZSwgJkluc3RhbmNlKTsKKworICAgICAgICAvKiBJZ25v cmUgbWVhbmluZ2xlc3MgZmlsZXMgKi8KKworICAgICAgICBpZiAoQUNQSV9GQUlMVVJFIChTdGF0 dXMpKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAg ICAgIC8qIEFkZCBuZXcgaW5mbyBub2RlIHRvIGdsb2JhbCB0YWJsZSBsaXN0ICovCisKKyAgICAg ICAgU3RhdHVzID0gT3NsQWRkVGFibGVUb0xpc3QgKFRlbXBOYW1lLCBJbnN0YW5jZSk7CisgICAg ICAgIGlmIChBQ1BJX0ZBSUxVUkUgKFN0YXR1cykpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgQWNwaU9zQ2xvc2VEaXJlY3RvcnkgKFRhYmxl RGlyKTsKKyAgICByZXR1cm4gKFN0YXR1cyk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KgorICoKKyAqIEZVTkNUSU9OOiAgICBPc2xUYWJsZU5hbWVGcm9tRmlsZQorICoKKyAqIFBBUkFN RVRFUlM6ICBGaWxlbmFtZSAgICAgICAgICAgIC0gRmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBkZXNp cmVkIHRhYmxlCisgKiAgICAgICAgICAgICAgU2lnbmF0dXJlICAgICAgICAgICAtIFBvaW50ZXIg dG8gNC1jaGFyYWN0ZXIgYnVmZmVyIHRvIHN0b3JlCisgKiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGV4dHJhY3RlZCB0YWJsZSBzaWduYXR1cmUuCisgKiAgICAgICAgICAgICAg SW5zdGFuY2UgICAgICAgICAgICAtIFBvaW50ZXIgdG8gaW50ZWdlciB0byBzdG9yZSBleHRyYWN0 ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUgaW5zdGFuY2Ug bnVtYmVyLgorICoKKyAqIFJFVFVSTjogICAgICBTdGF0dXM7IFRhYmxlIG5hbWUgaXMgZXh0cmFj dGVkIGlmIEFFX09LLgorICoKKyAqIERFU0NSSVBUSU9OOiBFeHRyYWN0IHRhYmxlIHNpZ25hdHVy ZSBhbmQgaW5zdGFuY2UgbnVtYmVyIGZyb20gYSB0YWJsZSBmaWxlCisgKiAgICAgICAgICAgICAg bmFtZS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBBQ1BJX1NUQVRVUwor T3NsVGFibGVOYW1lRnJvbUZpbGUgKAorICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICpGaWxl bmFtZSwKKyAgICBjaGFyICAgICAgICAgICAgICAgICAgICAqU2lnbmF0dXJlLAorICAgIFVJTlQz MiAgICAgICAgICAgICAgICAgICpJbnN0YW5jZSkKK3sKKworICAgIC8qIElnbm9yZSBtZWFuaW5n bGVzcyBmaWxlcyAqLworCisgICAgaWYgKHN0cmxlbiAoRmlsZW5hbWUpIDwgQUNQSV9OQU1FX1NJ WkUpCisgICAgeworICAgICAgICByZXR1cm4gKEFFX0JBRF9TSUdOQVRVUkUpOworICAgIH0KKwor ICAgIC8qIEV4dHJhY3QgaW5zdGFuY2UgbnVtYmVyICovCisKKyAgICBpZiAoaXNkaWdpdCAoKGlu dCkgRmlsZW5hbWVbQUNQSV9OQU1FX1NJWkVdKSkKKyAgICB7CisgICAgICAgIHNzY2FuZiAoJkZp bGVuYW1lW0FDUElfTkFNRV9TSVpFXSwgIiV1IiwgSW5zdGFuY2UpOworICAgIH0KKyAgICBlbHNl IGlmIChzdHJsZW4gKEZpbGVuYW1lKSAhPSBBQ1BJX05BTUVfU0laRSkKKyAgICB7CisgICAgICAg IHJldHVybiAoQUVfQkFEX1NJR05BVFVSRSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg ICAgICpJbnN0YW5jZSA9IDA7CisgICAgfQorCisgICAgLyogRXh0cmFjdCBzaWduYXR1cmUgKi8K KworICAgIEFDUElfTU9WRV9OQU1FIChTaWduYXR1cmUsIEZpbGVuYW1lKTsKKyAgICByZXR1cm4g KEFFX09LKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRlVOQ1RJT046 ICAgIE9zbFJlYWRUYWJsZUZyb21GaWxlCisgKgorICogUEFSQU1FVEVSUzogIEZpbGVuYW1lICAg ICAgICAgICAgLSBGaWxlIHRoYXQgY29udGFpbnMgdGhlIGRlc2lyZWQgdGFibGUKKyAqICAgICAg ICAgICAgICBGaWxlT2Zmc2V0ICAgICAgICAgIC0gT2Zmc2V0IG9mIHRoZSB0YWJsZSBpbiBmaWxl CisgKiAgICAgICAgICAgICAgU2lnbmF0dXJlICAgICAgICAgICAtIE9wdGlvbmFsIEFDUEkgU2ln bmF0dXJlIGZvciBkZXNpcmVkIHRhYmxlLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBBIG51bGwgdGVybWluYXRlZCA0LWNoYXJhY3RlciBzdHJpbmcuCisgKiAgICAgICAg ICAgICAgVGFibGUgICAgICAgICAgICAgICAtIFdoZXJlIGEgcG9pbnRlciB0byB0aGUgdGFibGUg aXMgcmV0dXJuZWQKKyAqCisgKiBSRVRVUk46ICAgICAgU3RhdHVzOyBUYWJsZSBidWZmZXIgaXMg cmV0dXJuZWQgaWYgQUVfT0suCisgKgorICogREVTQ1JJUFRJT046IFJlYWQgYSBBQ1BJIHRhYmxl IGZyb20gYSBmaWxlLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIEFDUElf U1RBVFVTCitPc2xSZWFkVGFibGVGcm9tRmlsZSAoCisgICAgY2hhciAgICAgICAgICAgICAgICAg ICAgKkZpbGVuYW1lLAorICAgIEFDUElfU0laRSAgICAgICAgICAgICAgIEZpbGVPZmZzZXQsCisg ICAgY2hhciAgICAgICAgICAgICAgICAgICAgKlNpZ25hdHVyZSwKKyAgICBBQ1BJX1RBQkxFX0hF QURFUiAgICAgICAqKlRhYmxlKQoreworICAgIEZJTEUgICAgICAgICAgICAgICAgICAgICpUYWJs ZUZpbGU7CisgICAgQUNQSV9UQUJMRV9IRUFERVIgICAgICAgSGVhZGVyOworICAgIEFDUElfVEFC TEVfSEVBREVSICAgICAgICpMb2NhbFRhYmxlID0gTlVMTDsKKyAgICBVSU5UMzIgICAgICAgICAg ICAgICAgICBUYWJsZUxlbmd0aDsKKyAgICBJTlQzMiAgICAgICAgICAgICAgICAgICBDb3VudDsK KyAgICBBQ1BJX1NUQVRVUyAgICAgICAgICAgICBTdGF0dXMgPSBBRV9PSzsKKworCisgICAgLyog T3BlbiB0aGUgZmlsZSAqLworCisgICAgVGFibGVGaWxlID0gZm9wZW4gKEZpbGVuYW1lLCAicmIi KTsKKyAgICBpZiAoVGFibGVGaWxlID09IE5VTEwpCisgICAgeworICAgICAgICBmcHJpbnRmIChz dGRlcnIsICJDb3VsZCBub3Qgb3BlbiB0YWJsZSBmaWxlOiAlc1xuIiwgRmlsZW5hbWUpOworICAg ICAgICByZXR1cm4gKE9zbEdldExhc3RTdGF0dXMgKEFFX05PVF9GT1VORCkpOworICAgIH0KKwor ICAgIGZzZWVrIChUYWJsZUZpbGUsIEZpbGVPZmZzZXQsIFNFRUtfU0VUKTsKKworICAgIC8qIFJl YWQgdGhlIFRhYmxlIGhlYWRlciB0byBnZXQgdGhlIHRhYmxlIGxlbmd0aCAqLworCisgICAgQ291 bnQgPSBmcmVhZCAoJkhlYWRlciwgMSwgc2l6ZW9mIChBQ1BJX1RBQkxFX0hFQURFUiksIFRhYmxl RmlsZSk7CisgICAgaWYgKENvdW50ICE9IHNpemVvZiAoQUNQSV9UQUJMRV9IRUFERVIpKQorICAg IHsKKyAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiQ291bGQgbm90IHJlYWQgdGFibGUgaGVhZGVy OiAlc1xuIiwgRmlsZW5hbWUpOworICAgICAgICBTdGF0dXMgPSBBRV9CQURfSEVBREVSOworICAg ICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgLyogSWYgc2lnbmF0dXJlIGlzIHNwZWNpZmll ZCwgaXQgbXVzdCBtYXRjaCB0aGUgdGFibGUgKi8KKworICAgIGlmIChTaWduYXR1cmUpCisgICAg eworICAgICAgICBpZiAoQUNQSV9WQUxJREFURV9SU0RQX1NJRyAoU2lnbmF0dXJlKSkKKyAgICAg ICAgeworICAgICAgICAgICAgaWYgKCFBQ1BJX1ZBTElEQVRFX1JTRFBfU0lHIChIZWFkZXIuU2ln bmF0dXJlKSkgeworICAgICAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIkluY29ycmVjdCBS U0RQIHNpZ25hdHVyZTogZm91bmQgJTguOHNcbiIsCisgICAgICAgICAgICAgICAgICAgIEhlYWRl ci5TaWduYXR1cmUpOworICAgICAgICAgICAgICAgIFN0YXR1cyA9IEFFX0JBRF9TSUdOQVRVUkU7 CisgICAgICAgICAgICAgICAgZ290byBFeGl0OworICAgICAgICAgICAgfQorICAgICAgICB9Cisg ICAgICAgIGVsc2UgaWYgKCFBQ1BJX0NPTVBBUkVfTkFNRSAoU2lnbmF0dXJlLCBIZWFkZXIuU2ln bmF0dXJlKSkKKyAgICAgICAgeworICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiSW5jb3Jy ZWN0IHNpZ25hdHVyZTogRXhwZWN0aW5nICU0LjRzLCBmb3VuZCAlNC40c1xuIiwKKyAgICAgICAg ICAgICAgICBTaWduYXR1cmUsIEhlYWRlci5TaWduYXR1cmUpOworICAgICAgICAgICAgU3RhdHVz ID0gQUVfQkFEX1NJR05BVFVSRTsKKyAgICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgfQor ICAgIH0KKworICAgIFRhYmxlTGVuZ3RoID0gQXBHZXRUYWJsZUxlbmd0aCAoJkhlYWRlcik7Cisg ICAgaWYgKFRhYmxlTGVuZ3RoID09IDApCisgICAgeworICAgICAgICBTdGF0dXMgPSBBRV9CQURf SEVBREVSOworICAgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgLyogUmVhZCB0aGUgZW50 aXJlIHRhYmxlIGludG8gYSBsb2NhbCBidWZmZXIgKi8KKworICAgIExvY2FsVGFibGUgPSBjYWxs b2MgKDEsIFRhYmxlTGVuZ3RoKTsKKyAgICBpZiAoIUxvY2FsVGFibGUpCisgICAgeworICAgICAg ICBmcHJpbnRmIChzdGRlcnIsCisgICAgICAgICAgICAiJTQuNHM6IENvdWxkIG5vdCBhbGxvY2F0 ZSBidWZmZXIgZm9yIHRhYmxlIG9mIGxlbmd0aCAlWFxuIiwKKyAgICAgICAgICAgIEhlYWRlci5T aWduYXR1cmUsIFRhYmxlTGVuZ3RoKTsKKyAgICAgICAgU3RhdHVzID0gQUVfTk9fTUVNT1JZOwor ICAgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgZnNlZWsgKFRhYmxlRmlsZSwgRmlsZU9m ZnNldCwgU0VFS19TRVQpOworCisgICAgQ291bnQgPSBmcmVhZCAoTG9jYWxUYWJsZSwgMSwgVGFi bGVMZW5ndGgsIFRhYmxlRmlsZSk7CisgICAgaWYgKENvdW50ICE9IFRhYmxlTGVuZ3RoKQorICAg IHsKKyAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJTQuNHM6IENvdWxkIG5vdCByZWFkIHRhYmxl IGNvbnRlbnRcbiIsCisgICAgICAgICAgICBIZWFkZXIuU2lnbmF0dXJlKTsKKyAgICAgICAgU3Rh dHVzID0gQUVfSU5WQUxJRF9UQUJMRV9MRU5HVEg7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICB9 CisKKyAgICAvKiBWYWxpZGF0ZSBjaGVja3N1bSAqLworCisgICAgKHZvaWQpIEFwSXNWYWxpZENo ZWNrc3VtIChMb2NhbFRhYmxlKTsKKworRXhpdDoKKyAgICBmY2xvc2UgKFRhYmxlRmlsZSk7Cisg ICAgKlRhYmxlID0gTG9jYWxUYWJsZTsKKyAgICByZXR1cm4gKFN0YXR1cyk7Cit9CisKKworLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBPc2xHZXRBY3BpVGFibGUK KyAqCisgKiBQQVJBTUVURVJTOiAgUGF0aG5hbWUgICAgICAgIC0gRGlyZWN0b3J5IHRvIGZpbmQg TGludXggQUNQSSB0YWJsZQorICogICAgICAgICAgICAgIFNpZ25hdHVyZSAgICAgICAtIEFDUEkg U2lnbmF0dXJlIGZvciBkZXNpcmVkIHRhYmxlLiBNdXN0IGJlCisgKiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYSBudWxsIHRlcm1pbmF0ZWQgNC1jaGFyYWN0ZXIgc3RyaW5nLgorICog ICAgICAgICAgICAgIEluc3RhbmNlICAgICAgICAtIE11bHRpcGxlIHRhYmxlIHN1cHBvcnQgZm9y IFNTRFQvVUVGSSAoMC4uLm4pCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTXVz dCBiZSAwIGZvciBvdGhlciB0YWJsZXMuCisgKiAgICAgICAgICAgICAgVGFibGUgICAgICAgICAg IC0gV2hlcmUgYSBwb2ludGVyIHRvIHRoZSB0YWJsZSBpcyByZXR1cm5lZAorICogICAgICAgICAg ICAgIEFkZHJlc3MgICAgICAgICAtIFdoZXJlIHRoZSB0YWJsZSBwaHlzaWNhbCBhZGRyZXNzIGlz IHJldHVybmVkCisgKgorICogUkVUVVJOOiAgICAgIFN0YXR1czsgVGFibGUgYnVmZmVyIGlzIHJl dHVybmVkIGlmIEFFX09LLgorICogICAgICAgICAgICAgIEFFX0xJTUlUOiBJbnN0YW5jZSBpcyBi ZXlvbmQgdmFsaWQgbGltaXQKKyAqICAgICAgICAgICAgICBBRV9OT1RfRk9VTkQ6IEEgdGFibGUg d2l0aCB0aGUgc2lnbmF0dXJlIHdhcyBub3QgZm91bmQKKyAqCisgKiBERVNDUklQVElPTjogR2V0 IGFuIE9TIEFDUEkgdGFibGUuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMg QUNQSV9TVEFUVVMKK09zbEdldEFjcGlUYWJsZSAoCisgICAgY2hhciAgICAgICAgICAgICAgICAg ICAgKlBhdGhuYW1lLAorICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICpTaWduYXR1cmUsCisg ICAgVUlOVDMyICAgICAgICAgICAgICAgICAgSW5zdGFuY2UsCisgICAgQUNQSV9UQUJMRV9IRUFE RVIgICAgICAgKipUYWJsZSwKKyAgICBBQ1BJX1BIWVNJQ0FMX0FERFJFU1MgICAqQWRkcmVzcykK K3sKKyAgICB2b2lkICAgICAgICAgICAgICAgICAgICAqVGFibGVEaXI7CisgICAgVUlOVDMyICAg ICAgICAgICAgICAgICAgQ3VycmVudEluc3RhbmNlID0gMDsKKyAgICBjaGFyICAgICAgICAgICAg ICAgICAgICBUZW1wTmFtZVtBQ1BJX05BTUVfU0laRV07CisgICAgY2hhciAgICAgICAgICAgICAg ICAgICAgVGFibGVGaWxlbmFtZVtQQVRIX01BWF07CisgICAgY2hhciAgICAgICAgICAgICAgICAg ICAgKkZpbGVuYW1lOworICAgIEFDUElfU1RBVFVTICAgICAgICAgICAgIFN0YXR1czsKKworCisg ICAgLyogT3BlbiB0aGUgZGlyZWN0b3J5IGZvciBBQ1BJIHRhYmxlcyAqLworCisgICAgVGFibGVE aXIgPSBBY3BpT3NPcGVuRGlyZWN0b3J5IChQYXRobmFtZSwgIioiLCBSRVFVRVNUX0ZJTEVfT05M WSk7CisgICAgaWYgKCFUYWJsZURpcikKKyAgICB7CisgICAgICAgIHJldHVybiAoT3NsR2V0TGFz dFN0YXR1cyAoQUVfTk9UX0ZPVU5EKSk7CisgICAgfQorCisgICAgLyogQXR0ZW1wdCB0byBmaW5k IHRoZSB0YWJsZSBpbiB0aGUgZGlyZWN0b3J5ICovCisKKyAgICB3aGlsZSAoKEZpbGVuYW1lID0g QWNwaU9zR2V0TmV4dEZpbGVuYW1lIChUYWJsZURpcikpKQorICAgIHsKKyAgICAgICAgLyogSWdu b3JlIG1lYW5pbmdsZXNzIGZpbGVzICovCisKKyAgICAgICAgaWYgKCFBQ1BJX0NPTVBBUkVfTkFN RSAoRmlsZW5hbWUsIFNpZ25hdHVyZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVl OworICAgICAgICB9CisKKyAgICAgICAgLyogRXh0cmFjdCB0YWJsZSBuYW1lIGFuZCBpbnN0YW5j ZSBudW1iZXIgKi8KKworICAgICAgICBTdGF0dXMgPSBPc2xUYWJsZU5hbWVGcm9tRmlsZSAoRmls ZW5hbWUsIFRlbXBOYW1lLCAmQ3VycmVudEluc3RhbmNlKTsKKworICAgICAgICAvKiBJZ25vcmUg bWVhbmluZ2xlc3MgZmlsZXMgKi8KKworICAgICAgICBpZiAoQUNQSV9GQUlMVVJFIChTdGF0dXMp IHx8IEN1cnJlbnRJbnN0YW5jZSAhPSBJbnN0YW5jZSkKKyAgICAgICAgeworICAgICAgICAgICAg Y29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvKiBDcmVhdGUgdGhlIHRhYmxlIHBhdGhu YW1lICovCisKKyAgICAgICAgaWYgKEluc3RhbmNlICE9IDApCisgICAgICAgIHsKKyAgICAgICAg ICAgIHNwcmludGYgKFRhYmxlRmlsZW5hbWUsICIlcy8lNC40cyVkIiwgUGF0aG5hbWUsIFRlbXBO YW1lLCBJbnN0YW5jZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAg ICAgICAgICBzcHJpbnRmIChUYWJsZUZpbGVuYW1lLCAiJXMvJTQuNHMiLCBQYXRobmFtZSwgVGVt cE5hbWUpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIEFjcGlPc0Ns b3NlRGlyZWN0b3J5IChUYWJsZURpcik7CisKKyAgICBpZiAoIUZpbGVuYW1lKQorICAgIHsKKyAg ICAgICAgcmV0dXJuIChBRV9MSU1JVCk7CisgICAgfQorCisgICAgLyogVGhlcmUgaXMgbm8gcGh5 c2ljYWwgYWRkcmVzcyBzYXZlZCBmb3IgQUNQSSB0YWJsZXMsIHVzZSB6ZXJvICovCisKKyAgICAq QWRkcmVzcyA9IDA7CisgICAgU3RhdHVzID0gT3NsUmVhZFRhYmxlRnJvbUZpbGUgKFRhYmxlRmls ZW5hbWUsIDAsIE5VTEwsIFRhYmxlKTsKKworICAgIHJldHVybiAoU3RhdHVzKTsKK30K --===============1081466503980324353==--