From unknown Tue Jun 24 05:11:12 2025 X-Loop: help-debbugs@gnu.org Subject: bug#14295: Support copy-file ACLs for Solaris etc. Resent-From: Paul Eggert Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 28 Apr 2013 03:35:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 14295 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: 14295@debbugs.gnu.org Cc: Eli Zaretskii X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.136712005216176 (code B ref -1); Sun, 28 Apr 2013 03:35:02 +0000 Received: (at submit) by debbugs.gnu.org; 28 Apr 2013 03:34:12 +0000 Received: from localhost ([127.0.0.1]:47660 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1UWINQ-0004Co-91 for submit@debbugs.gnu.org; Sat, 27 Apr 2013 23:34:12 -0400 Received: from eggs.gnu.org ([208.118.235.92]:47964) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1UWINK-0004CY-SH for submit@debbugs.gnu.org; Sat, 27 Apr 2013 23:34:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UWIMx-0006JQ-FY for submit@debbugs.gnu.org; Sat, 27 Apr 2013 23:33:56 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=-102.3 required=5.0 tests=BAYES_40, RCVD_IN_DNSWL_MED, RP_MATCHES_RCVD,USER_IN_WHITELIST autolearn=disabled version=3.3.2 Received: from lists.gnu.org ([208.118.235.17]:33184) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UWIMx-0006JM-AS for submit@debbugs.gnu.org; Sat, 27 Apr 2013 23:33:43 -0400 Received: from eggs.gnu.org ([208.118.235.92]:59294) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UWIMo-0005zG-Uy for bug-gnu-emacs@gnu.org; Sat, 27 Apr 2013 23:33:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UWIMg-0006I4-Rd for bug-gnu-emacs@gnu.org; Sat, 27 Apr 2013 23:33:34 -0400 Received: from smtp.cs.ucla.edu ([131.179.128.62]:59969) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UWIMg-0006Gx-1F; Sat, 27 Apr 2013 23:33:26 -0400 Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id 112AF39E810A; Sat, 27 Apr 2013 20:33:25 -0700 (PDT) X-Virus-Scanned: amavisd-new at smtp.cs.ucla.edu Received: from smtp.cs.ucla.edu ([127.0.0.1]) by localhost (smtp.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id xeFOZyaNfEdE; Sat, 27 Apr 2013 20:33:20 -0700 (PDT) Received: from [192.168.1.9] (pool-71-189-154-249.lsanca.fios.verizon.net [71.189.154.249]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id C6E2439E8008; Sat, 27 Apr 2013 20:33:19 -0700 (PDT) Message-ID: <517C987F.6060902@cs.ucla.edu> Date: Sat, 27 Apr 2013 20:33:19 -0700 From: Paul Eggert Organization: UCLA Computer Science Department User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130404 Thunderbird/17.0.5 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------060902070705010703000507" X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 208.118.235.17 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org This is a multi-part message in MIME format. --------------060902070705010703000507 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Tags: patch Recently copy-file was augmented to add support for copying ACLs on abandoned-POSIX-style hosts. Here's an additional patch to add support for copying ACLs on Solaris, HP-UX, etc. Basically, the idea is to use Gnulib's support for ACLs. I've tested this on GNU/Linux and Solaris, but not on Microsoft platforms, and am CC'ing this to Eli as a heads-up for that. This changes the 'configure' option from --without-acl to --disable-acl if one wishes to disable ACL support when configuring Emacs; this is the option spelling that other GNU packages use. --------------060902070705010703000507 Content-Type: text/plain; charset=UTF-8; name="acl.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="acl.txt" PT09IG1vZGlmaWVkIGZpbGUgJ0NoYW5nZUxvZycKLS0tIENoYW5nZUxvZwkyMDEzLTA0LTI3 IDE5OjMwOjMzICswMDAwCisrKyBDaGFuZ2VMb2cJMjAxMy0wNC0yNyAxOTo0MDo0OSArMDAw MApAQCAtMSw1ICsxLDE2IEBACiAyMDEzLTA0LTI3ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBj cy51Y2xhLmVkdT4KIAorCVVzZSBHbnVsaWIgQUNMIGltcGxlbWVudGF0aW9uLCBmb3IgYmVu ZWZpdCBvZiBTb2xhcmlzIGV0Yy4KKwkqIGNvbmZpZ3VyZS5hYzogUmVtb3ZlIC13aXRoLWFj bCBvcHRpb24sIHNpbmNlIEdudWxpYiBkb2VzIHRoYXQgZm9yCisJdXMgbm93LgorCShMSUJB Q0xfTElCUyk6IFJlbW92ZTsgbm8gbG9uZ2VyIG5lZWRlZC4KKwkqIGxpYi9NYWtlZmlsZS5h bSAoQ0xFQU5GSUxFUywgU1VGRklYRVMpOiBOZXcgKGVtcHR5KSBtYWNyb3MsCisJZm9yIHRo ZSBiZW5lZml0IG9mIHRoZSBuZXcgQUNMIGltcGxlbWVudGF0aW9uLgorCSogbGliL2FjbC1l cnJuby12YWxpZC5jLCBsaWIvYWNsLWludGVybmFsLmgsIGxpYi9hY2wuaDoKKwkqIGxpYi9h Y2xfZW50cmllcy5jLCBsaWIvZmlsZS1oYXMtYWNsLmMsIGxpYi9xY29weS1hY2wuYzoKKwkq IGxpYi9xc2V0LWFjbC5jLCBtNC9hY2wubTQ6IE5ldyBmaWxlcywgdGFrZW4gZnJvbSBnbnVs aWIuCisJKiBsaWIvZ251bGliLm1rLCBtNC9nbnVsaWItY29tcC5tNDogUmVnZW5lcmF0ZS4K KwogCU1lcmdlIGZyb20gZ251bGliLCBpbmNvcnBvcmF0aW5nOgogCTIwMTMtMDQtMjcgYWxp Z25vZiwgaW50cHJvcHMsIG1hbGxvY2E6IHBvcnQgYmV0dGVyIHRvIElCTSdzIEMgY29tcGls ZXIKIAoKPT09IG1vZGlmaWVkIGZpbGUgJ2FkbWluL0NoYW5nZUxvZycKLS0tIGFkbWluL0No YW5nZUxvZwkyMDEzLTA0LTAyIDAxOjE4OjQwICswMDAwCisrKyBhZG1pbi9DaGFuZ2VMb2cJ MjAxMy0wNC0xNyAwNToyMTozMyArMDAwMApAQCAtMSwzICsxLDggQEAKKzIwMTMtMDQtMTcg IFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJVXNlIEdudWxpYiBBQ0wg aW1wbGVtZW50YXRpb24sIGZvciBiZW5lZml0IG9mIFNvbGFyaXMgZXRjLgorCSogbWVyZ2Ut Z251bGliIChHTlVMSUJfTU9EVUxFUyk6IEFkZCBxYWNsLgorCiAyMDEzLTA0LTAxICBQYXVs IEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KIAogCVVzZSBVVEYtOCBmb3IgbW9zdCBm aWxlcyB3aXRoIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIChCdWcjMTM5MzYpLgoKPT09IG1vZGlm aWVkIGZpbGUgJ2FkbWluL21lcmdlLWdudWxpYicKLS0tIGFkbWluL21lcmdlLWdudWxpYgky MDEzLTAzLTEzIDE4OjQyOjIyICswMDAwCisrKyBhZG1pbi9tZXJnZS1nbnVsaWIJMjAxMy0w NC0xNyAwNToyMTozMyArMDAwMApAQCAtMzMsNyArMzMsNyBAQAogICBnZXRsb2FkYXZnIGdl dG9wdC1nbnUgZ2V0dGltZSBnZXR0aW1lb2ZkYXkKICAgaWdub3JlLXZhbHVlIGludHByb3Bz IGxhcmdlZmlsZSBsc3RhdAogICBtYW55d2FybmluZ3MgbWVtcmNociBta3RpbWUKLSAgcHNl bGVjdCBwdGhyZWFkX3NpZ21hc2sgcHV0ZW52IHJlYWRsaW5rIHJlYWRsaW5rYXQKKyAgcHNl bGVjdCBwdGhyZWFkX3NpZ21hc2sgcHV0ZW52IHFhY2wgcmVhZGxpbmsgcmVhZGxpbmthdAog ICBzaWcyc3RyIHNvY2tsZW4gc3RhdC10aW1lIHN0ZGFsaWduIHN0ZGFyZyBzdGRib29sIHN0 ZGlvCiAgIHN0cmZ0aW1lIHN0cnRvaW1heCBzdHJ0b3VtYXggc3ltbGluayBzeXNfc3RhdAog ICBzeXNfdGltZSB0aW1lIHRpbWVyLXRpbWUgdGltZXNwZWMtYWRkIHRpbWVzcGVjLXN1YiB1 bnNldGVudiB1dGltZW5zCgo9PT0gbW9kaWZpZWQgZmlsZSAnY29uZmlndXJlLmFjJwotLS0g Y29uZmlndXJlLmFjCTIwMTMtMDQtMjYgMTk6MzE6MDkgKzAwMDAKKysrIGNvbmZpZ3VyZS5h YwkyMDEzLTA0LTI3IDE5OjQwOjQ5ICswMDAwCkBAIC0xOTksNyArMTk5LDYgQEAKIE9QVElP Tl9ERUZBVUxUX09OKFtnY29uZl0sW2Rvbid0IGNvbXBpbGUgd2l0aCBHQ29uZiBzdXBwb3J0 XSkKIE9QVElPTl9ERUZBVUxUX09OKFtnc2V0dGluZ3NdLFtkb24ndCBjb21waWxlIHdpdGgg R1NldHRpbmdzIHN1cHBvcnRdKQogT1BUSU9OX0RFRkFVTFRfT04oW3NlbGludXhdLFtkb24n dCBjb21waWxlIHdpdGggU0VMaW51eCBzdXBwb3J0XSkKLU9QVElPTl9ERUZBVUxUX09OKFth Y2xdLFtkb24ndCBjb21waWxlIHdpdGggQUNMIHN1cHBvcnRdKQogT1BUSU9OX0RFRkFVTFRf T04oW2dudXRsc10sW2Rvbid0IHVzZSAtbGdudXRscyBmb3IgU1NML1RMUyBzdXBwb3J0XSkK IE9QVElPTl9ERUZBVUxUX09OKFtpbm90aWZ5XSxbZG9uJ3QgY29tcGlsZSB3aXRoIGlub3Rp ZnkgKGZpbGUtd2F0Y2gpIHN1cHBvcnRdKQogCkBAIC0yMTg1LDIzICsyMTg0LDYgQEAKICAg QUNfREVGSU5FKEhBVkVfSU5PVElGWSwgMSwgW0RlZmluZSB0byAxIHRvIHVzZSBpbm90aWZ5 Ll0pCiBmaQogCi1kbmwgUE9TSVggQUNMIHN1cHBvcnQ6IHByb3ZpZGVkIGJ5IGxpYmFjbCBv biBHTlUvTGludXgsIGJ5IGxpYmMgb24gRnJlZUJTRC4KLUhBVkVfUE9TSVhfQUNMPW5vCi1M SUJBQ0xfTElCUz0KLWlmIHRlc3QgIiR7d2l0aF9hY2x9IiA9ICJ5ZXMiOyB0aGVuCi0gIEFD X0NIRUNLX0xJQihbYWNsXSwgW2FjbF9zZXRfZmlsZV0sIEhBVkVfUE9TSVhfQUNMPXllcywg SEFWRV9QT1NJWF9BQ0w9bm8pCi0gIGlmIHRlc3QgIiRIQVZFX1BPU0lYX0FDTCIgPSB5ZXM7 IHRoZW4KLSAgICBBQ19ERUZJTkUoSEFWRV9QT1NJWF9BQ0wsIDEsIFtEZWZpbmUgdG8gMSBp ZiB1c2luZyBQT1NJWCBBQ0wgc3VwcG9ydC5dKQotICAgIExJQkFDTF9MSUJTPS1sYWNsCi0g IGVsc2UKLSAgICBBQ19DSEVDS19GVU5DKGFjbF9zZXRfZmlsZSwgSEFWRV9QT1NJWF9BQ0w9 eWVzLCBIQVZFX1BPU0lYX0FDTD1ubykKLSAgICBpZiB0ZXN0ICIkSEFWRV9QT1NJWF9BQ0wi ID0geWVzOyB0aGVuCi0gICAgICBBQ19ERUZJTkUoSEFWRV9QT1NJWF9BQ0wsIDEsIFtEZWZp bmUgdG8gMSBpZiB1c2luZyBQT1NJWCBBQ0wgc3VwcG9ydC5dKQotICAgIGZpCi0gZmkKLWZp Ci1BQ19TVUJTVChMSUJBQ0xfTElCUykKLQogZG5sIERvIG5vdCBwdXQgd2hpdGVzcGFjZSBi ZWZvcmUgdGhlICNpbmNsdWRlIHN0YXRlbWVudHMgYmVsb3cuCiBkbmwgT2xkZXIgY29tcGls ZXJzIChlZyBzdW5vczQgY2MpIGNob2tlIG9uIGl0LgogSEFWRV9YQVczRD1ubwoKPT09IG1v ZGlmaWVkIGZpbGUgJ2V0Yy9DaGFuZ2VMb2cnCi0tLSBldGMvQ2hhbmdlTG9nCTIwMTMtMDQt MjQgMTY6NTA6MTQgKzAwMDAKKysrIGV0Yy9DaGFuZ2VMb2cJMjAxMy0wNC0yNyAxOTo0MDo0 OSArMDAwMApAQCAtMSwzICsxLDkgQEAKKzIwMTMtMDQtMjcgIFBhdWwgRWdnZXJ0ICA8ZWdn ZXJ0QGNzLnVjbGEuZWR1PgorCisJVXNlIEdudWxpYiBBQ0wgaW1wbGVtZW50YXRpb24sIGZv ciBiZW5lZml0IG9mIFNvbGFyaXMgZXRjLgorCSogTkVXUzogRW1hY3MgaXMgbm8gbG9uZ2Vy IGxpbWl0ZWQgdG8gUE9TSVggQUNMcy4gIC0tZGlzYWJsZS1hY2wsCisJbm90IC0td2l0aG91 dC1hY2wsIHNpbmNlIHdlJ3JlIG5vdyB1c2luZyBHbnVsaWIncyBpbXBsZW1lbnRhdGlvbi4K KwogMjAxMy0wNC0yNCAgVGFzc2lsbyBIb3JuICA8dHNkaEBnbnUub3JnPgogCiAJKiB0aGVt ZXMvdHNkaC1kYXJrLXRoZW1lLmVsICh0c2RoLWRhcmspOiBBZGQgaWRvIGZhY2VzIGFuZCBy ZW1vdmUKCj09PSBtb2RpZmllZCBmaWxlICdldGMvTkVXUycKLS0tIGV0Yy9ORVdTCTIwMTMt MDQtMjcgMjA6NTU6MDAgKzAwMDAKKysrIGV0Yy9ORVdTCTIwMTMtMDQtMjggMDA6MDA6MTkg KzAwMDAKQEAgLTIzLDEwICsyMywxMCBAQAogDAogKiBJbnN0YWxsYXRpb24gQ2hhbmdlcyBp biBFbWFjcyAyNC40CiAKLSoqIEVtYWNzIGNhbiBiZSBjb21waWxlZCB3aXRoIFBPU0lYIEFD TCBzdXBwb3J0LgorKiogRW1hY3MgY2FuIGJlIGNvbXBpbGVkIHdpdGggQUNMIHN1cHBvcnQu CiBUaGlzIGhhcHBlbnMgYnkgZGVmYXVsdCBpZiBhIHN1aXRhYmxlIHN1cHBvcnQgbGlicmFy eSBpcyBmb3VuZCBhdAogYnVpbGQgdGltZSwgbGlrZSBsaWJhY2wgb24gR05VL0xpbnV4LiAg VG8gcHJldmVudCB0aGlzLCB1c2UgdGhlCi1jb25maWd1cmUgb3B0aW9uIGAtLXdpdGhvdXQt YWNsJy4KK2NvbmZpZ3VyZSBvcHRpb24gYC0tZGlzYWJsZS1hY2wnLgogCiAqKiBUaGUgY29u ZmlndXJlIG9wdGlvbiAtLXdpdGgtY3J0LWRpciBoYXMgYmVlbiByZW1vdmVkLgogSXQgaXMg bm8gbG9uZ2VyIG5lZWRlZCwgYXMgdGhlIGNydCoubyBmaWxlcyBhcmUgbm8gbG9uZ2VyIGxp bmtlZCBzcGVjaWFsbHkuCgo9PT0gbW9kaWZpZWQgZmlsZSAnbGliL01ha2VmaWxlLmFtJwot LS0gbGliL01ha2VmaWxlLmFtCTIwMTMtMDQtMDcgMDY6MjE6NDAgKzAwMDAKKysrIGxpYi9N YWtlZmlsZS5hbQkyMDEzLTA0LTE3IDA1OjIxOjMzICswMDAwCkBAIC0xLDggKzEsMTAgQEAK IEJVSUxUX1NPVVJDRVMgPQorQ0xFQU5GSUxFUyA9CiBFWFRSQV9ESVNUID0KIE1PU1RMWUNM RUFORElSUyA9CiBNT1NUTFlDTEVBTkZJTEVTID0KIG5vaW5zdF9MSUJSQVJJRVMgPQorU1VG RklYRVMgPQogCiBBTV9DRkxBR1MgPSAkKFBST0ZJTElOR19DRkxBR1MpICQoR05VTElCX1dB Uk5fQ0ZMQUdTKSAkKFdFUlJPUl9DRkxBR1MpCiBERUZBVUxUX0lOQ0xVREVTID0gLUkuIC1J JCh0b3Bfc3JjZGlyKS9saWIgLUkuLi9zcmMgLUkkKHRvcF9zcmNkaXIpL3NyYwoKPT09IGFk ZGVkIGZpbGUgJ2xpYi9hY2wtZXJybm8tdmFsaWQuYycKLS0tIGxpYi9hY2wtZXJybm8tdmFs aWQuYwkxOTcwLTAxLTAxIDAwOjAwOjAwICswMDAwCisrKyBsaWIvYWNsLWVycm5vLXZhbGlk LmMJMjAxMy0wNC0xNyAwNToyMTozMyArMDAwMApAQCAtMCwwICsxLDQ4IEBACisvKiBUZXN0 IHdoZXRoZXIgQUNMcyBhcmUgd2VsbCBzdXBwb3J0ZWQgb24gdGhpcyBzeXN0ZW0uCisKKyAg IENvcHlyaWdodCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAo YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlz IHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4u CisKKyAgIFdyaXR0ZW4gYnkgUGF1bCBFZ2dlcnQuICAqLworCisjaW5jbHVkZSA8Y29uZmln Lmg+CisKKyNpbmNsdWRlIDxhY2wuaD4KKworI2luY2x1ZGUgPGVycm5vLmg+CisKKy8qIFJl dHVybiB0cnVlIGlmIGVycm5vIHZhbHVlIEVSUk5VTSBpbmRpY2F0ZXMgdGhhdCBBQ0xzIGFy ZSB3ZWxsCisgICBzdXBwb3J0ZWQgb24gdGhpcyBzeXN0ZW0uICBFUlJOVU0gc2hvdWxkIGJl IGFuIGVycm5vIHZhbHVlIG9idGFpbmVkCisgICBhZnRlciBhbiBBQ0wtcmVsYXRlZCBzeXN0 ZW0gY2FsbCBmYWlscy4gICovCitib29sCithY2xfZXJybm9fdmFsaWQgKGludCBlcnJudW0p Cit7CisgIC8qIFJlY29nbml6ZSBzb21lIGNvbW1vbiBlcnJvcnMgc3VjaCBhcyBmcm9tIGFu IE5GUyBtb3VudCB0aGF0IGRvZXMKKyAgICAgbm90IHN1cHBvcnQgQUNMcywgZXZlbiB3aGVu IGxvY2FsIGRyaXZlcyBkby4gICovCisgIHN3aXRjaCAoZXJybnVtKQorICAgIHsKKyAgICBj YXNlIEVCVVNZOiByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBFSU5WQUw6IHJldHVybiBmYWxz ZTsKKyNpZiBkZWZpbmVkIF9fQVBQTEVfXyAmJiBkZWZpbmVkIF9fTUFDSF9fCisgICAgY2Fz ZSBFTk9FTlQ6IHJldHVybiBmYWxzZTsKKyNlbmRpZgorICAgIGNhc2UgRU5PU1lTOiByZXR1 cm4gZmFsc2U7CisjaWYgZGVmaW5lZCBFTk9UU1VQICYmIEVOT1RTVVAgIT0gRU9QTk9UU1VQ UAorICAgIGNhc2UgRU5PVFNVUDogcmV0dXJuIGZhbHNlOworI2VuZGlmCisgICAgY2FzZSBF T1BOT1RTVVBQOiByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDogcmV0dXJuIHRydWU7Cisg ICAgfQorfQoKPT09IGFkZGVkIGZpbGUgJ2xpYi9hY2wtaW50ZXJuYWwuaCcKLS0tIGxpYi9h Y2wtaW50ZXJuYWwuaAkxOTcwLTAxLTAxIDAwOjAwOjAwICswMDAwCisrKyBsaWIvYWNsLWlu dGVybmFsLmgJMjAxMy0wNC0xNyAwNToyMTozMyArMDAwMApAQCAtMCwwICsxLDI1MCBAQAor LyogSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgYWNjZXNzIGNvbnRyb2wgbGlzdHMuCisK KyAgIENvcHlyaWdodCAoQykgMjAwMi0yMDAzLCAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBv ZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8v d3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworICAgV3JpdHRlbiBieSBQYXVsIEVnZ2VydCwg QW5kcmVhcyBHcsO8bmJhY2hlciwgYW5kIEJydW5vIEhhaWJsZS4gICovCisKKyNpbmNsdWRl ICJhY2wuaCIKKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4K KworLyogQWxsIHN5c3RlbXMgZGVmaW5lIHRoZSBBQ0wgcmVsYXRlZCBBUEkgaW4gPHN5cy9h Y2wuaD4uICAqLworI2lmIEhBVkVfU1lTX0FDTF9ICisjIGluY2x1ZGUgPHN5cy9hY2wuaD4K KyNlbmRpZgorI2lmIGRlZmluZWQgSEFWRV9GQUNMICYmICEgZGVmaW5lZCBHRVRBQ0xDTlQg JiYgZGVmaW5lZCBBQ0xfQ05UCisjIGRlZmluZSBHRVRBQ0xDTlQgQUNMX0NOVAorI2VuZGlm CisKKy8qIE9uIExpbnV4LCBhZGRpdGlvbmFsIEFDTCByZWxhdGVkIEFQSSBpcyBhdmFpbGFi bGUgaW4gPGFjbC9saWJhY2wuaD4uICAqLworI2lmZGVmIEhBVkVfQUNMX0xJQkFDTF9ICisj IGluY2x1ZGUgPGFjbC9saWJhY2wuaD4KKyNlbmRpZgorCisvKiBPbiBIUC1VWCA+PSAxMS4x MSwgYWRkaXRpb25hbCBBQ0wgQVBJIGlzIGF2YWlsYWJsZSBpbiA8YWNsdi5oPi4gICovCisj aWYgSEFWRV9BQ0xWX0gKKyMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjIGluY2x1ZGUgPGFj bHYuaD4KKy8qIEhQLVVYIDExLjExIGxhY2tzIHRoZXNlIGRlY2xhcmF0aW9ucy4gICovCitl eHRlcm4gaW50IGFjbCAoY2hhciAqLCBpbnQsIGludCwgc3RydWN0IGFjbCAqKTsKK2V4dGVy biBpbnQgYWNsc29ydCAoaW50LCBpbnQsIHN0cnVjdCBhY2wgKik7CisjZW5kaWYKKworI2lu Y2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpZm5kZWYgTUlOCisj IGRlZmluZSBNSU4oYSxiKSAoKGEpIDwgKGIpID8gKGEpIDogKGIpKQorI2VuZGlmCisKKyNp Zm5kZWYgU0laRV9NQVgKKyMgZGVmaW5lIFNJWkVfTUFYICgoc2l6ZV90KSAtMSkKKyNlbmRp ZgorCisjaWZuZGVmIEhBVkVfRkNITU9ECisjIGRlZmluZSBIQVZFX0ZDSE1PRCBmYWxzZQor IyBkZWZpbmUgZmNobW9kKGZkLCBtb2RlKSAoLTEpCisjZW5kaWYKKworX0dMX0lOTElORV9I RUFERVJfQkVHSU4KKyNpZm5kZWYgQUNMX0lOVEVSTkFMX0lOTElORQorIyBkZWZpbmUgQUNM X0lOVEVSTkFMX0lOTElORSBfR0xfSU5MSU5FCisjZW5kaWYKKworI2lmIFVTRV9BQ0wKKwor IyBpZiBIQVZFX0FDTF9HRVRfRklMRQorLyogUE9TSVggMTAwMy4xZSAoZHJhZnQgMTcgLS0g YWJhbmRvbmVkKSBzcGVjaWZpYyB2ZXJzaW9uLiAgKi8KKy8qIExpbnV4LCBGcmVlQlNELCBN YWMgT1MgWCwgSVJJWCwgVHJ1NjQgKi8KKworIyAgaWZuZGVmIE1JTl9BQ0xfRU5UUklFUwor IyAgIGRlZmluZSBNSU5fQUNMX0VOVFJJRVMgNAorIyAgZW5kaWYKKworLyogUE9TSVggMTAw My4xZSAoZHJhZnQgMTcpICovCisjICBpZmRlZiBIQVZFX0FDTF9HRVRfRkQKKy8qIE1vc3Qg cGxhdGZvcm1zIGhhdmUgYSAxLWFyZ3VtZW50IGFjbF9nZXRfZmQsIG9ubHkgT1NGLzEgaGFz IGEgMi1hcmd1bWVudAorICAgbWFjcm8oISkuICAqLworIyAgIGlmIEhBVkVfQUNMX0ZSRUVf VEVYVCAvKiBPU0YvMSAqLworQUNMX0lOVEVSTkFMX0lOTElORSBhY2xfdAorcnBsX2FjbF9n ZXRfZmQgKGludCBmZCkKK3sKKyAgcmV0dXJuIGFjbF9nZXRfZmQgKGZkLCBBQ0xfVFlQRV9B Q0NFU1MpOworfQorIyAgICB1bmRlZiBhY2xfZ2V0X2ZkCisjICAgIGRlZmluZSBhY2xfZ2V0 X2ZkIHJwbF9hY2xfZ2V0X2ZkCisjICAgZW5kaWYKKyMgIGVsc2UKKyMgICBkZWZpbmUgSEFW RV9BQ0xfR0VUX0ZEIGZhbHNlCisjICAgdW5kZWYgYWNsX2dldF9mZAorIyAgIGRlZmluZSBh Y2xfZ2V0X2ZkKGZkKSAoTlVMTCkKKyMgIGVuZGlmCisKKy8qIFBPU0lYIDEwMDMuMWUgKGRy YWZ0IDE3KSAqLworIyAgaWZkZWYgSEFWRV9BQ0xfU0VUX0ZECisvKiBNb3N0IHBsYXRmb3Jt cyBoYXZlIGEgMi1hcmd1bWVudCBhY2xfc2V0X2ZkLCBvbmx5IE9TRi8xIGhhcyBhIDMtYXJn dW1lbnQKKyAgIG1hY3JvKCEpLiAgKi8KKyMgICBpZiBIQVZFX0FDTF9GUkVFX1RFWFQgLyog T1NGLzEgKi8KK0FDTF9JTlRFUk5BTF9JTkxJTkUgaW50CitycGxfYWNsX3NldF9mZCAoaW50 IGZkLCBhY2xfdCBhY2wpCit7CisgIHJldHVybiBhY2xfc2V0X2ZkIChmZCwgQUNMX1RZUEVf QUNDRVNTLCBhY2wpOworfQorIyAgICB1bmRlZiBhY2xfc2V0X2ZkCisjICAgIGRlZmluZSBh Y2xfc2V0X2ZkIHJwbF9hY2xfc2V0X2ZkCisjICAgZW5kaWYKKyMgIGVsc2UKKyMgICBkZWZp bmUgSEFWRV9BQ0xfU0VUX0ZEIGZhbHNlCisjICAgdW5kZWYgYWNsX3NldF9mZAorIyAgIGRl ZmluZSBhY2xfc2V0X2ZkKGZkLCBhY2wpICgtMSkKKyMgIGVuZGlmCisKKy8qIFBPU0lYIDEw MDMuMWUgKGRyYWZ0IDEzKSAqLworIyAgaWYgISBIQVZFX0FDTF9GUkVFX1RFWFQKKyMgICBk ZWZpbmUgYWNsX2ZyZWVfdGV4dChidWYpIGFjbF9mcmVlIChidWYpCisjICBlbmRpZgorCisv KiBMaW51eC1zcGVjaWZpYyAqLworIyAgaWZuZGVmIEhBVkVfQUNMX0VYVEVOREVEX0ZJTEUK KyMgICBkZWZpbmUgSEFWRV9BQ0xfRVhURU5ERURfRklMRSBmYWxzZQorIyAgIGRlZmluZSBh Y2xfZXh0ZW5kZWRfZmlsZShuYW1lKSAoLTEpCisjICBlbmRpZgorCisvKiBMaW51eC1zcGVj aWZpYyAqLworIyAgaWZuZGVmIEhBVkVfQUNMX0ZST01fTU9ERQorIyAgIGRlZmluZSBIQVZF X0FDTF9GUk9NX01PREUgZmFsc2UKKyMgICBkZWZpbmUgYWNsX2Zyb21fbW9kZShtb2RlKSAo TlVMTCkKKyMgIGVuZGlmCisKKy8qIFNldCB0byAxIGlmIGEgZmlsZSdzIG1vZGUgaXMgaW1w bGljaXQgYnkgdGhlIEFDTC4KKyAgIFNldCB0byAwIGlmIGEgZmlsZSdzIG1vZGUgaXMgc3Rv cmVkIGluZGVwZW5kZW50bHkgZnJvbSB0aGUgQUNMLiAgKi8KKyMgIGlmIChIQVZFX0FDTF9D T1BZX0VYVF9OQVRJVkUgJiYgSEFWRV9BQ0xfQ1JFQVRFX0VOVFJZX05QKSB8fCBkZWZpbmVk IF9fc2dpIC8qIE1hYyBPUyBYLCBJUklYICovCisjICAgZGVmaW5lIE1PREVfSU5TSURFX0FD TCAwCisjICBlbHNlCisjICAgZGVmaW5lIE1PREVfSU5TSURFX0FDTCAxCisjICBlbmRpZgor CisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIEFDTC4KKyAgIFJldHVybiAt MSBhbmQgc2V0IGVycm5vIHVwb24gZmFpbHVyZSB0byBkZXRlcm1pbmUgaXQuICAqLworLyog RGVmaW5lIGEgcmVwbGFjZW1lbnQgZm9yIGFjbF9lbnRyaWVzIGlmIG5lZWRlZC4gKE9ubHkg TGludXggaGFzIGl0LikgICovCisjICBpZiAhSEFWRV9BQ0xfRU5UUklFUworIyAgIGRlZmlu ZSBhY2xfZW50cmllcyBycGxfYWNsX2VudHJpZXMKK2V4dGVybiBpbnQgYWNsX2VudHJpZXMg KGFjbF90KTsKKyMgIGVuZGlmCisKKyMgIGlmIEhBVkVfQUNMX1RZUEVfRVhURU5ERUQgLyog TWFjIE9TIFggKi8KKy8qIEFDTCBpcyBhbiBBQ0wsIGZyb20gYSBmaWxlLCBzdG9yZWQgYXMg dHlwZSBBQ0xfVFlQRV9FWFRFTkRFRC4KKyAgIFJldHVybiAxIGlmIHRoZSBnaXZlbiBBQ0wg aXMgbm9uLXRyaXZpYWwuCisgICBSZXR1cm4gMCBpZiBpdCBpcyB0cml2aWFsLiAgKi8KK2V4 dGVybiBpbnQgYWNsX2V4dGVuZGVkX25vbnRyaXZpYWwgKGFjbF90KTsKKyMgIGVsc2UKKy8q IEFDTCBpcyBhbiBBQ0wsIGZyb20gYSBmaWxlLCBzdG9yZWQgYXMgdHlwZSBBQ0xfVFlQRV9B Q0NFU1MuCisgICBSZXR1cm4gMSBpZiB0aGUgZ2l2ZW4gQUNMIGlzIG5vbi10cml2aWFsLgor ICAgUmV0dXJuIDAgaWYgaXQgaXMgdHJpdmlhbCwgaS5lLiBlcXVpdmFsZW50IHRvIGEgc2lt cGxlIHN0YXQoKSBtb2RlLgorICAgUmV0dXJuIC0xIGFuZCBzZXQgZXJybm8gdXBvbiBmYWls dXJlIHRvIGRldGVybWluZSBpdC4gICovCitleHRlcm4gaW50IGFjbF9hY2Nlc3Nfbm9udHJp dmlhbCAoYWNsX3QpOworIyAgZW5kaWYKKworIyBlbGlmIEhBVkVfRkFDTCAmJiBkZWZpbmVk IEdFVEFDTCAvKiBTb2xhcmlzLCBDeWd3aW4sIG5vdCBIUC1VWCAqLworCisvKiBTZXQgdG8g MSBpZiBhIGZpbGUncyBtb2RlIGlzIGltcGxpY2l0IGJ5IHRoZSBBQ0wuCisgICBTZXQgdG8g MCBpZiBhIGZpbGUncyBtb2RlIGlzIHN0b3JlZCBpbmRlcGVuZGVudGx5IGZyb20gdGhlIEFD TC4gICovCisjICBpZiBkZWZpbmVkIF9fQ1lHV0lOX18gLyogQ3lnd2luICovCisjICAgZGVm aW5lIE1PREVfSU5TSURFX0FDTCAwCisjICBlbHNlIC8qIFNvbGFyaXMgKi8KKyMgICBkZWZp bmUgTU9ERV9JTlNJREVfQUNMIDEKKyMgIGVuZGlmCisKKy8qIFJldHVybiAxIGlmIHRoZSBn aXZlbiBBQ0wgaXMgbm9uLXRyaXZpYWwuCisgICBSZXR1cm4gMCBpZiBpdCBpcyB0cml2aWFs LCBpLmUuIGVxdWl2YWxlbnQgdG8gYSBzaW1wbGUgc3RhdCgpIG1vZGUuICAqLworZXh0ZXJu IGludCBhY2xfbm9udHJpdmlhbCAoaW50IGNvdW50LCBhY2xlbnRfdCAqZW50cmllcyk7CisK KyMgIGlmZGVmIEFDRV9HRVRBQ0wgLyogU29sYXJpcyAxMCAqLworCisvKiBUZXN0IGFuIEFD TCByZXRyaWV2ZWQgd2l0aCBBQ0VfR0VUQUNMLgorICAgUmV0dXJuIDEgaWYgdGhlIGdpdmVu IEFDTCwgY29uc2lzdGluZyBvZiBDT1VOVCBlbnRyaWVzLCBpcyBub24tdHJpdmlhbC4KKyAg IFJldHVybiAwIGlmIGl0IGlzIHRyaXZpYWwsIGkuZS4gZXF1aXZhbGVudCB0byBhIHNpbXBs ZSBzdGF0KCkgbW9kZS4gICovCitleHRlcm4gaW50IGFjbF9hY2Vfbm9udHJpdmlhbCAoaW50 IGNvdW50LCBhY2VfdCAqZW50cmllcyk7CisKKy8qIERlZmluaXRpb25zIGZvciB3aGVuIHRo ZSBidWlsdCBleGVjdXRhYmxlIGlzIGV4ZWN1dGVkIG9uIFNvbGFyaXMgMTAKKyAgIChuZXdl ciB2ZXJzaW9uKSBvciBTb2xhcmlzIDExLiAgKi8KKy8qIEZvciBhX3R5cGUuICAqLworIyAg IGRlZmluZSBPTERfQUxMT1cgMAorIyAgIGRlZmluZSBPTERfREVOWSAgMQorIyAgIGRlZmlu ZSBORVdfQUNFX0FDQ0VTU19BTExPV0VEX0FDRV9UWVBFIDAgLyogcmVwbGFjZXMgQUxMT1cg Ki8KKyMgICBkZWZpbmUgTkVXX0FDRV9BQ0NFU1NfREVOSUVEX0FDRV9UWVBFICAxIC8qIHJl cGxhY2VzIERFTlkgKi8KKy8qIEZvciBhX2ZsYWdzLiAgKi8KKyMgICBkZWZpbmUgT0xEX0FD RV9PV05FUiAgICAgICAgICAgIDB4MDEwMAorIyAgIGRlZmluZSBPTERfQUNFX0dST1VQICAg ICAgICAgICAgMHgwMjAwCisjICAgZGVmaW5lIE9MRF9BQ0VfT1RIRVIgICAgICAgICAgICAw eDA0MDAKKyMgICBkZWZpbmUgTkVXX0FDRV9PV05FUiAgICAgICAgICAgIDB4MTAwMAorIyAg IGRlZmluZSBORVdfQUNFX0dST1VQICAgICAgICAgICAgMHgyMDAwCisjICAgZGVmaW5lIE5F V19BQ0VfSURFTlRJRklFUl9HUk9VUCAweDAwNDAKKyMgICBkZWZpbmUgTkVXX0FDRV9FVkVS WU9ORSAgICAgICAgIDB4NDAwMAorLyogRm9yIGFfYWNjZXNzX21hc2suICAqLworIyAgIGRl ZmluZSBORVdfQUNFX1JFQURfREFUQSAgICAgICAgIDB4MDAxIC8qIGNvcnJlc3BvbmRzIHRv ICdyJyAqLworIyAgIGRlZmluZSBORVdfQUNFX1dSSVRFX0RBVEEgICAgICAgIDB4MDAyIC8q IGNvcnJlc3BvbmRzIHRvICd3JyAqLworIyAgIGRlZmluZSBORVdfQUNFX0FQUEVORF9EQVRB ICAgICAgIDB4MDA0CisjICAgZGVmaW5lIE5FV19BQ0VfUkVBRF9OQU1FRF9BVFRSUyAgMHgw MDgKKyMgICBkZWZpbmUgTkVXX0FDRV9XUklURV9OQU1FRF9BVFRSUyAweDAxMAorIyAgIGRl ZmluZSBORVdfQUNFX0VYRUNVVEUgICAgICAgICAgIDB4MDIwCisjICAgZGVmaW5lIE5FV19B Q0VfREVMRVRFX0NISUxEICAgICAgMHgwNDAKKyMgICBkZWZpbmUgTkVXX0FDRV9SRUFEX0FU VFJJQlVURVMgICAweDA4MAorIyAgIGRlZmluZSBORVdfQUNFX1dSSVRFX0FUVFJJQlVURVMg IDB4MTAwCisjICAgZGVmaW5lIE5FV19BQ0VfREVMRVRFICAgICAgICAgIDB4MTAwMDAKKyMg ICBkZWZpbmUgTkVXX0FDRV9SRUFEX0FDTCAgICAgICAgMHgyMDAwMAorIyAgIGRlZmluZSBO RVdfQUNFX1dSSVRFX0FDTCAgICAgICAweDQwMDAwCisjICAgZGVmaW5lIE5FV19BQ0VfV1JJ VEVfT1dORVIgICAgIDB4ODAwMDAKKyMgICBkZWZpbmUgTkVXX0FDRV9TWU5DSFJPTklaRSAg ICAweDEwMDAwMAorCisjICBlbmRpZgorCisjIGVsaWYgSEFWRV9HRVRBQ0wgLyogSFAtVVgg Ki8KKworLyogUmV0dXJuIDEgaWYgdGhlIGdpdmVuIEFDTCBpcyBub24tdHJpdmlhbC4KKyAg IFJldHVybiAwIGlmIGl0IGlzIHRyaXZpYWwsIGkuZS4gZXF1aXZhbGVudCB0byBhIHNpbXBs ZSBzdGF0KCkgbW9kZS4gICovCitleHRlcm4gaW50IGFjbF9ub250cml2aWFsIChpbnQgY291 bnQsIHN0cnVjdCBhY2xfZW50cnkgKmVudHJpZXMsIHN0cnVjdCBzdGF0ICpzYik7CisKKyMg IGlmIEhBVkVfQUNMVl9IIC8qIEhQLVVYID49IDExLjExICovCisKKy8qIFJldHVybiAxIGlm IHRoZSBnaXZlbiBBQ0wgaXMgbm9uLXRyaXZpYWwuCisgICBSZXR1cm4gMCBpZiBpdCBpcyB0 cml2aWFsLCBpLmUuIGVxdWl2YWxlbnQgdG8gYSBzaW1wbGUgc3RhdCgpIG1vZGUuICAqLwor ZXh0ZXJuIGludCBhY2x2X25vbnRyaXZpYWwgKGludCBjb3VudCwgc3RydWN0IGFjbCAqZW50 cmllcyk7CisKKyMgIGVuZGlmCisKKyMgZWxpZiBIQVZFX0FDTFhfR0VUICYmIDAgLyogQUlY ICovCisKKy8qIFRPRE8gKi8KKworIyBlbGlmIEhBVkVfU1RBVEFDTCAvKiBvbGRlciBBSVgg Ki8KKworLyogUmV0dXJuIDEgaWYgdGhlIGdpdmVuIEFDTCBpcyBub24tdHJpdmlhbC4KKyAg IFJldHVybiAwIGlmIGl0IGlzIHRyaXZpYWwsIGkuZS4gZXF1aXZhbGVudCB0byBhIHNpbXBs ZSBzdGF0KCkgbW9kZS4gICovCitleHRlcm4gaW50IGFjbF9ub250cml2aWFsIChzdHJ1Y3Qg YWNsICphKTsKKworIyBlbGlmIEhBVkVfQUNMU09SVCAvKiBOb25TdG9wIEtlcm5lbCAqLwor CisvKiBSZXR1cm4gMSBpZiB0aGUgZ2l2ZW4gQUNMIGlzIG5vbi10cml2aWFsLgorICAgUmV0 dXJuIDAgaWYgaXQgaXMgdHJpdmlhbCwgaS5lLiBlcXVpdmFsZW50IHRvIGEgc2ltcGxlIHN0 YXQoKSBtb2RlLiAgKi8KK2V4dGVybiBpbnQgYWNsX25vbnRyaXZpYWwgKGludCBjb3VudCwg c3RydWN0IGFjbCAqZW50cmllcyk7CisKKyMgZW5kaWYKKworI2VuZGlmCisKK19HTF9JTkxJ TkVfSEVBREVSX0VORAoKPT09IGFkZGVkIGZpbGUgJ2xpYi9hY2wuaCcKLS0tIGxpYi9hY2wu aAkxOTcwLTAxLTAxIDAwOjAwOjAwICswMDAwCisrKyBsaWIvYWNsLmgJMjAxMy0wNC0xNyAw NToyMTozMyArMDAwMApAQCAtMCwwICsxLDMwIEBACisvKiBhY2wuYyAtIGFjY2VzcyBjb250 cm9sIGxpc3RzCisKKyAgIENvcHlyaWdodCAoQykgMjAwMiwgMjAwOC0yMDEzIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz aW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisg ICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyAgIFdyaXR0ZW4gYnkgUGF1bCBF Z2dlcnQuICAqLworCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN5cy90eXBl cy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKK2Jvb2wgYWNsX2Vycm5vX3ZhbGlkIChp bnQpIF9HTF9BVFRSSUJVVEVfQ09OU1Q7CitpbnQgZmlsZV9oYXNfYWNsIChjaGFyIGNvbnN0 ICosIHN0cnVjdCBzdGF0IGNvbnN0ICopOworaW50IHFzZXRfYWNsIChjaGFyIGNvbnN0ICos IGludCwgbW9kZV90KTsKK2ludCBzZXRfYWNsIChjaGFyIGNvbnN0ICosIGludCwgbW9kZV90 KTsKK2ludCBxY29weV9hY2wgKGNoYXIgY29uc3QgKiwgaW50LCBjaGFyIGNvbnN0ICosIGlu dCwgbW9kZV90KTsKK2ludCBjb3B5X2FjbCAoY2hhciBjb25zdCAqLCBpbnQsIGNoYXIgY29u c3QgKiwgaW50LCBtb2RlX3QpOworaW50IGNobW9kX29yX2ZjaG1vZCAoY2hhciBjb25zdCAq LCBpbnQsIG1vZGVfdCk7Cgo9PT0gYWRkZWQgZmlsZSAnbGliL2FjbF9lbnRyaWVzLmMnCi0t LSBsaWIvYWNsX2VudHJpZXMuYwkxOTcwLTAxLTAxIDAwOjAwOjAwICswMDAwCisrKyBsaWIv YWNsX2VudHJpZXMuYwkyMDEzLTA0LTE3IDA1OjIxOjMzICswMDAwCkBAIC0wLDAgKzEsNzUg QEAKKy8qIFJldHVybiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gYW4gQUNMLgorCisgICBD b3B5cmlnaHQgKEMpIDIwMDItMjAwMywgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAg IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhl IExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor CisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor ICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uCisKKyAgIFdyaXR0ZW4gYnkgUGF1bCBFZ2dlcnQgYW5kIEFu ZHJlYXMgR3J1ZW5iYWNoZXIuICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNs dWRlICJhY2wtaW50ZXJuYWwuaCIKKworLyogVGhpcyBmaWxlIGFzc3VtZXMgUE9TSVgtZHJh ZnQgbGlrZSBBQ0xzCisgICAoTGludXgsIEZyZWVCU0QsIE1hYyBPUyBYLCBJUklYLCBUcnU2 NCkuICAqLworCisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIEFDTC4KKyAg IFJldHVybiAtMSBhbmQgc2V0IGVycm5vIHVwb24gZmFpbHVyZSB0byBkZXRlcm1pbmUgaXQu ICAqLworCitpbnQKK2FjbF9lbnRyaWVzIChhY2xfdCBhY2wpCit7CisgIGludCBjb3VudCA9 IDA7CisKKyAgaWYgKGFjbCAhPSBOVUxMKQorICAgIHsKKyNpZiBIQVZFX0FDTF9GSVJTVF9F TlRSWSAvKiBMaW51eCwgRnJlZUJTRCwgTWFjIE9TIFggKi8KKyMgaWYgSEFWRV9BQ0xfVFlQ RV9FWFRFTkRFRCAvKiBNYWMgT1MgWCAqLworICAgICAgLyogYWNsX2dldF9lbnRyeSByZXR1 cm5zIDAgd2hlbiBpdCBzdWNjZXNzZnVsbHkgZmV0Y2hlcyBhbiBlbnRyeSwKKyAgICAgICAg IGFuZCAtMS9FSU5WQUwgYXQgdGhlIGVuZC4gICovCisgICAgICBhY2xfZW50cnlfdCBhY2U7 CisgICAgICBpbnQgZ290X29uZTsKKworICAgICAgZm9yIChnb3Rfb25lID0gYWNsX2dldF9l bnRyeSAoYWNsLCBBQ0xfRklSU1RfRU5UUlksICZhY2UpOworICAgICAgICAgICBnb3Rfb25l ID49IDA7CisgICAgICAgICAgIGdvdF9vbmUgPSBhY2xfZ2V0X2VudHJ5IChhY2wsIEFDTF9O RVhUX0VOVFJZLCAmYWNlKSkKKyAgICAgICAgY291bnQrKzsKKyMgZWxzZSAvKiBMaW51eCwg RnJlZUJTRCAqLworICAgICAgLyogYWNsX2dldF9lbnRyeSByZXR1cm5zIDEgd2hlbiBpdCBz dWNjZXNzZnVsbHkgZmV0Y2hlcyBhbiBlbnRyeSwKKyAgICAgICAgIGFuZCAwIGF0IHRoZSBl bmQuICAqLworICAgICAgYWNsX2VudHJ5X3QgYWNlOworICAgICAgaW50IGdvdF9vbmU7CisK KyAgICAgIGZvciAoZ290X29uZSA9IGFjbF9nZXRfZW50cnkgKGFjbCwgQUNMX0ZJUlNUX0VO VFJZLCAmYWNlKTsKKyAgICAgICAgICAgZ290X29uZSA+IDA7CisgICAgICAgICAgIGdvdF9v bmUgPSBhY2xfZ2V0X2VudHJ5IChhY2wsIEFDTF9ORVhUX0VOVFJZLCAmYWNlKSkKKyAgICAg ICAgY291bnQrKzsKKyAgICAgIGlmIChnb3Rfb25lIDwgMCkKKyAgICAgICAgcmV0dXJuIC0x OworIyBlbmRpZgorI2Vsc2UgLyogSVJJWCwgVHJ1NjQgKi8KKyMgaWYgSEFWRV9BQ0xfVE9f U0hPUlRfVEVYVCAvKiBJUklYICovCisgICAgICAvKiBEb24ndCB1c2UgYWNsX2dldF9lbnRy eTogaXQgaXMgdW5kb2N1bWVudGVkLiAgKi8KKyAgICAgIGNvdW50ID0gYWNsLT5hY2xfY250 OworIyBlbmRpZgorIyBpZiBIQVZFX0FDTF9GUkVFX1RFWFQgLyogVHJ1NjQgKi8KKyAgICAg IC8qIERvbid0IHVzZSBhY2xfZ2V0X2VudHJ5OiBpdCB0YWtlcyBvbmx5IG9uZSBhcmd1bWVu dCBhbmQgZG9lcyBub3QKKyAgICAgICAgIHdvcmsuICAqLworICAgICAgY291bnQgPSBhY2wt PmFjbF9udW07CisjIGVuZGlmCisjZW5kaWYKKyAgICB9CisKKyAgcmV0dXJuIGNvdW50Owor fQoKPT09IGFkZGVkIGZpbGUgJ2xpYi9maWxlLWhhcy1hY2wuYycKLS0tIGxpYi9maWxlLWhh cy1hY2wuYwkxOTcwLTAxLTAxIDAwOjAwOjAwICswMDAwCisrKyBsaWIvZmlsZS1oYXMtYWNs LmMJMjAxMy0wNC0xOCAwMTozNTowOCArMDAwMApAQCAtMCwwICsxLDkxOCBAQAorLyogVGVz dCB3aGV0aGVyIGEgZmlsZSBoYXMgYSBub250cml2aWFsIGFjY2VzcyBjb250cm9sIGxpc3Qu CisKKyAgIENvcHlyaWdodCAoQykgMjAwMi0yMDAzLCAyMDA1LTIwMTMgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hl ZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g MyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRw Oi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworICAgV3JpdHRlbiBieSBQYXVsIEVnZ2Vy dCwgQW5kcmVhcyBHcsO8bmJhY2hlciwgYW5kIEJydW5vIEhhaWJsZS4gICovCisKKy8qIFdp dGhvdXQgdGhpcyBwcmFnbWEsIGdjYyA0LjcuMCAyMDEyMDEyNiBtYXkgc3VnZ2VzdCB0aGF0 IHRoZQorICAgZmlsZV9oYXNfYWNsIGZ1bmN0aW9uIG1pZ2h0IGJlIGNhbmRpZGF0ZSBmb3Ig YXR0cmlidXRlICdjb25zdCcgICovCisjaWYgKF9fR05VQ19fID09IDQgJiYgNiA8PSBfX0dO VUNfTUlOT1JfXykgfHwgNCA8IF9fR05VQ19fCisjIHByYWdtYSBHQ0MgZGlhZ25vc3RpYyBp Z25vcmVkICItV3N1Z2dlc3QtYXR0cmlidXRlPWNvbnN0IgorI2VuZGlmCisKKyNpbmNsdWRl IDxjb25maWcuaD4KKworI2luY2x1ZGUgImFjbC5oIgorCisjaW5jbHVkZSAiYWNsLWludGVy bmFsLmgiCisKKworI2lmIFVTRV9BQ0wgJiYgSEFWRV9BQ0xfR0VUX0ZJTEUKKworIyBpZiBI QVZFX0FDTF9UWVBFX0VYVEVOREVEIC8qIE1hYyBPUyBYICovCisKKy8qIEFDTCBpcyBhbiBB Q0wsIGZyb20gYSBmaWxlLCBzdG9yZWQgYXMgdHlwZSBBQ0xfVFlQRV9FWFRFTkRFRC4KKyAg IFJldHVybiAxIGlmIHRoZSBnaXZlbiBBQ0wgaXMgbm9uLXRyaXZpYWwuCisgICBSZXR1cm4g MCBpZiBpdCBpcyB0cml2aWFsLiAgKi8KK2ludAorYWNsX2V4dGVuZGVkX25vbnRyaXZpYWwg KGFjbF90IGFjbCkKK3sKKyAgLyogYWNsIGlzIG5vbi10cml2aWFsIGlmIGl0IGlzIG5vbi1l bXB0eS4gICovCisgIHJldHVybiAoYWNsX2VudHJpZXMgKGFjbCkgPiAwKTsKK30KKworIyBl bHNlIC8qIExpbnV4LCBGcmVlQlNELCBJUklYLCBUcnU2NCAqLworCisvKiBBQ0wgaXMgYW4g QUNMLCBmcm9tIGEgZmlsZSwgc3RvcmVkIGFzIHR5cGUgQUNMX1RZUEVfQUNDRVNTLgorICAg UmV0dXJuIDEgaWYgdGhlIGdpdmVuIEFDTCBpcyBub24tdHJpdmlhbC4KKyAgIFJldHVybiAw IGlmIGl0IGlzIHRyaXZpYWwsIGkuZS4gZXF1aXZhbGVudCB0byBhIHNpbXBsZSBzdGF0KCkg bW9kZS4KKyAgIFJldHVybiAtMSBhbmQgc2V0IGVycm5vIHVwb24gZmFpbHVyZSB0byBkZXRl cm1pbmUgaXQuICAqLworaW50CithY2xfYWNjZXNzX25vbnRyaXZpYWwgKGFjbF90IGFjbCkK K3sKKyAgLyogYWNsIGlzIG5vbi10cml2aWFsIGlmIGl0IGhhcyBzb21lIGVudHJpZXMgb3Ro ZXIgdGhhbiBmb3IgInVzZXI6OiIsCisgICAgICJncm91cDo6IiwgYW5kICJvdGhlcjo6Ii4g IE5vcm1hbGx5IHRoZXNlIHRocmVlIHNob3VsZCBiZSBwcmVzZW50CisgICAgIGF0IGxlYXN0 LCBhbGxvd2luZyB1cyB0byB3cml0ZQorICAgICAgICByZXR1cm4gKDMgPCBhY2xfZW50cmll cyAoYWNsKSk7CisgICAgIGJ1dCB0aGUgZm9sbG93aW5nIGNvZGUgaXMgbW9yZSByb2J1c3Qu ICAqLworIyAgaWYgSEFWRV9BQ0xfRklSU1RfRU5UUlkgLyogTGludXgsIEZyZWVCU0QgKi8K KworICBhY2xfZW50cnlfdCBhY2U7CisgIGludCBnb3Rfb25lOworCisgIGZvciAoZ290X29u ZSA9IGFjbF9nZXRfZW50cnkgKGFjbCwgQUNMX0ZJUlNUX0VOVFJZLCAmYWNlKTsKKyAgICAg ICBnb3Rfb25lID4gMDsKKyAgICAgICBnb3Rfb25lID0gYWNsX2dldF9lbnRyeSAoYWNsLCBB Q0xfTkVYVF9FTlRSWSwgJmFjZSkpCisgICAgeworICAgICAgYWNsX3RhZ190IHRhZzsKKyAg ICAgIGlmIChhY2xfZ2V0X3RhZ190eXBlIChhY2UsICZ0YWcpIDwgMCkKKyAgICAgICAgcmV0 dXJuIC0xOworICAgICAgaWYgKCEodGFnID09IEFDTF9VU0VSX09CSiB8fCB0YWcgPT0gQUNM X0dST1VQX09CSiB8fCB0YWcgPT0gQUNMX09USEVSKSkKKyAgICAgICAgcmV0dXJuIDE7Cisg ICAgfQorICByZXR1cm4gZ290X29uZTsKKworIyAgZWxzZSAvKiBJUklYLCBUcnU2NCAqLwor IyAgIGlmIEhBVkVfQUNMX1RPX1NIT1JUX1RFWFQgLyogSVJJWCAqLworICAvKiBEb24ndCB1 c2UgYWNsX2dldF9lbnRyeTogaXQgaXMgdW5kb2N1bWVudGVkLiAgKi8KKworICBpbnQgY291 bnQgPSBhY2wtPmFjbF9jbnQ7CisgIGludCBpOworCisgIGZvciAoaSA9IDA7IGkgPCBjb3Vu dDsgaSsrKQorICAgIHsKKyAgICAgIGFjbF9lbnRyeV90IGFjZSA9ICZhY2wtPmFjbF9lbnRy eVtpXTsKKyAgICAgIGFjbF90YWdfdCB0YWcgPSBhY2UtPmFlX3RhZzsKKworICAgICAgaWYg KCEodGFnID09IEFDTF9VU0VSX09CSiB8fCB0YWcgPT0gQUNMX0dST1VQX09CSgorICAgICAg ICAgICAgfHwgdGFnID09IEFDTF9PVEhFUl9PQkopKQorICAgICAgICByZXR1cm4gMTsKKyAg ICB9CisgIHJldHVybiAwOworCisjICAgZW5kaWYKKyMgICBpZiBIQVZFX0FDTF9GUkVFX1RF WFQgLyogVHJ1NjQgKi8KKyAgLyogRG9uJ3QgdXNlIGFjbF9nZXRfZW50cnk6IGl0IHRha2Vz IG9ubHkgb25lIGFyZ3VtZW50IGFuZCBkb2VzIG5vdCB3b3JrLiAgKi8KKworICBpbnQgY291 bnQgPSBhY2wtPmFjbF9udW07CisgIGFjbF9lbnRyeV90IGFjZTsKKworICBmb3IgKGFjZSA9 IGFjbC0+YWNsX2ZpcnN0OyBjb3VudCA+IDA7IGFjZSA9IGFjZS0+bmV4dCwgY291bnQtLSkK KyAgICB7CisgICAgICBhY2xfdGFnX3QgdGFnOworICAgICAgYWNsX3Blcm1fdCBwZXJtOwor CisgICAgICB0YWcgPSBhY2UtPmVudHJ5LT5hY2xfdHlwZTsKKyAgICAgIGlmICghKHRhZyA9 PSBBQ0xfVVNFUl9PQkogfHwgdGFnID09IEFDTF9HUk9VUF9PQkogfHwgdGFnID09IEFDTF9P VEhFUikpCisgICAgICAgIHJldHVybiAxOworCisgICAgICBwZXJtID0gYWNlLT5lbnRyeS0+ YWNsX3Blcm07CisgICAgICAvKiBPbiBUcnU2NCwgcGVybSBjYW4gYWxzbyBjb250YWluIG5v bi1zdGFuZGFyZCBiaXRzIHN1Y2ggYXMKKyAgICAgICAgIFBFUk1fSU5TRVJULCBQRVJNX0RF TEVURSwgUEVSTV9NT0RJRlksIFBFUk1fTE9PS1VQLCAuLi4gKi8KKyAgICAgIGlmICgocGVy bSAmIH4oQUNMX1JFQUQgfCBBQ0xfV1JJVEUgfCBBQ0xfRVhFQ1VURSkpICE9IDApCisgICAg ICAgIHJldHVybiAxOworICAgIH0KKyAgcmV0dXJuIDA7CisKKyMgICBlbmRpZgorIyAgZW5k aWYKK30KKworIyBlbmRpZgorCisKKyNlbGlmIFVTRV9BQ0wgJiYgSEFWRV9GQUNMICYmIGRl ZmluZWQgR0VUQUNMIC8qIFNvbGFyaXMsIEN5Z3dpbiwgbm90IEhQLVVYICovCisKKy8qIFRl c3QgYW4gQUNMIHJldHJpZXZlZCB3aXRoIEdFVEFDTC4KKyAgIFJldHVybiAxIGlmIHRoZSBn aXZlbiBBQ0wsIGNvbnNpc3Rpbmcgb2YgQ09VTlQgZW50cmllcywgaXMgbm9uLXRyaXZpYWwu CisgICBSZXR1cm4gMCBpZiBpdCBpcyB0cml2aWFsLCBpLmUuIGVxdWl2YWxlbnQgdG8gYSBz aW1wbGUgc3RhdCgpIG1vZGUuICAqLworaW50CithY2xfbm9udHJpdmlhbCAoaW50IGNvdW50 LCBhY2xlbnRfdCAqZW50cmllcykKK3sKKyAgaW50IGk7CisKKyAgZm9yIChpID0gMDsgaSA8 IGNvdW50OyBpKyspCisgICAgeworICAgICAgYWNsZW50X3QgKmFjZSA9ICZlbnRyaWVzW2ld OworCisgICAgICAvKiBOb3RlOiBJZiBhY2UtPmFfdHlwZSA9IFVTRVJfT0JKLCBhY2UtPmFf aWQgaXMgdGhlIHN0X3VpZCBmcm9tIHN0YXQoKS4KKyAgICAgICAgIElmIGFjZS0+YV90eXBl ID0gR1JPVVBfT0JKLCBhY2UtPmFfaWQgaXMgdGhlIHN0X2dpZCBmcm9tIHN0YXQoKS4KKyAg ICAgICAgIFdlIGRvbid0IG5lZWQgdG8gY2hlY2sgYWNlLT5hX2lkIGluIHRoZXNlIGNhc2Vz LiAgKi8KKyAgICAgIGlmICghKGFjZS0+YV90eXBlID09IFVTRVJfT0JKCisgICAgICAgICAg ICB8fCBhY2UtPmFfdHlwZSA9PSBHUk9VUF9PQkoKKyAgICAgICAgICAgIHx8IGFjZS0+YV90 eXBlID09IE9USEVSX09CSgorICAgICAgICAgICAgLyogTm90ZTogQ3lnd2luIGRvZXMgbm90 IHJldHVybiBhIENMQVNTX09CSiAoIm1hc2s6IikgZW50cnkKKyAgICAgICAgICAgICAgIHNv bWV0aW1lcy4gICovCisgICAgICAgICAgICB8fCBhY2UtPmFfdHlwZSA9PSBDTEFTU19PQkop KQorICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgIHJldHVybiAwOworfQorCisjIGlmZGVm IEFDRV9HRVRBQ0wKKworLyogQSBzaG9ydGN1dCBmb3IgYSBiaXRtYXNrLiAgKi8KKyMgIGRl ZmluZSBORVdfQUNFX1dSSVRFQV9EQVRBIChORVdfQUNFX1dSSVRFX0RBVEEgfCBORVdfQUNF X0FQUEVORF9EQVRBKQorCisvKiBUZXN0IGFuIEFDTCByZXRyaWV2ZWQgd2l0aCBBQ0VfR0VU QUNMLgorICAgUmV0dXJuIDEgaWYgdGhlIGdpdmVuIEFDTCwgY29uc2lzdGluZyBvZiBDT1VO VCBlbnRyaWVzLCBpcyBub24tdHJpdmlhbC4KKyAgIFJldHVybiAwIGlmIGl0IGlzIHRyaXZp YWwsIGkuZS4gZXF1aXZhbGVudCB0byBhIHNpbXBsZSBzdGF0KCkgbW9kZS4gICovCitpbnQK K2FjbF9hY2Vfbm9udHJpdmlhbCAoaW50IGNvdW50LCBhY2VfdCAqZW50cmllcykKK3sKKyAg aW50IGk7CisKKyAgLyogVGhlIGZsYWdzIGluIHRoZSBhY2VfdCBzdHJ1Y3R1cmUgY2hhbmdl ZCBpbiBhIGJpbmFyeSBpbmNvbXBhdGlibGUgd2F5CisgICAgIHdoZW4gQUNMX05PX1RSSVZJ QUwgZXRjLiB3ZXJlIGludHJvZHVjZWQgaW4gPHN5cy9hY2wuaD4gdmVyc2lvbiAxLjE1Lgor ICAgICBIb3cgdG8gZGlzdGluZ3Vpc2ggdGhlIHR3byBjb252ZW50aW9ucyBhdCBydW50aW1l PworICAgICBJbiB0aGUgb2xkIGNvbnZlbnRpb24sIHVzdWFsbHkgdGhyZWUgQUNFcyBoYXZl IGFfZmxhZ3MgPSBBQ0VfT1dORVIgLworICAgICBBQ0VfR1JPVVAgLyBBQ0VfT1RIRVIsIGlu IHRoZSByYW5nZSAweDAxMDAuLjB4MDQwMC4gIEluIHRoZSBuZXcKKyAgICAgY29udmVudGlv biwgdGhlc2UgdmFsdWVzIGFyZSBub3QgdXNlZC4gICovCisgIGludCBvbGRfY29udmVudGlv biA9IDA7CisKKyAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgaWYgKGVudHJp ZXNbaV0uYV9mbGFncyAmIChPTERfQUNFX09XTkVSIHwgT0xEX0FDRV9HUk9VUCB8IE9MRF9B Q0VfT1RIRVIpKQorICAgICAgeworICAgICAgICBvbGRfY29udmVudGlvbiA9IDE7CisgICAg ICAgIGJyZWFrOworICAgICAgfQorCisgIGlmIChvbGRfY29udmVudGlvbikKKyAgICAvKiBS dW5uaW5nIG9uIFNvbGFyaXMgMTAuICAqLworICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsg aSsrKQorICAgICAgeworICAgICAgICBhY2VfdCAqYWNlID0gJmVudHJpZXNbaV07CisKKyAg ICAgICAgLyogTm90ZToKKyAgICAgICAgICAgSWYgYWNlLT5hX2ZsYWdzID0gQUNFX09XTkVS LCBhY2UtPmFfd2hvIGlzIHRoZSBzdF91aWQgZnJvbSBzdGF0KCkuCisgICAgICAgICAgIElm IGFjZS0+YV9mbGFncyA9IEFDRV9HUk9VUCwgYWNlLT5hX3dobyBpcyB0aGUgc3RfZ2lkIGZy b20gc3RhdCgpLgorICAgICAgICAgICBXZSBkb24ndCBuZWVkIHRvIGNoZWNrIGFjZS0+YV93 aG8gaW4gdGhlc2UgY2FzZXMuICAqLworICAgICAgICBpZiAoIShhY2UtPmFfdHlwZSA9PSBP TERfQUxMT1cKKyAgICAgICAgICAgICAgJiYgKGFjZS0+YV9mbGFncyA9PSBPTERfQUNFX09X TkVSCisgICAgICAgICAgICAgICAgICB8fCBhY2UtPmFfZmxhZ3MgPT0gT0xEX0FDRV9HUk9V UAorICAgICAgICAgICAgICAgICAgfHwgYWNlLT5hX2ZsYWdzID09IE9MRF9BQ0VfT1RIRVIp KSkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAg IC8qIFJ1bm5pbmcgb24gU29sYXJpcyAxMCAobmV3ZXIgdmVyc2lvbikgb3IgU29sYXJpcyAx MS4gICovCisgICAgICB1bnNpZ25lZCBpbnQgYWNjZXNzX21hc2tzWzZdID0KKyAgICAgICAg eworICAgICAgICAgIDAsIC8qIG93bmVyQCBkZW55ICovCisgICAgICAgICAgMCwgLyogb3du ZXJAIGFsbG93ICovCisgICAgICAgICAgMCwgLyogZ3JvdXBAIGRlbnkgKi8KKyAgICAgICAg ICAwLCAvKiBncm91cEAgYWxsb3cgKi8KKyAgICAgICAgICAwLCAvKiBldmVyeW9uZUAgZGVu eSAqLworICAgICAgICAgIDAgIC8qIGV2ZXJ5b25lQCBhbGxvdyAqLworICAgICAgICB9Owor CisgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgeworICAgICAg ICAgIGFjZV90ICphY2UgPSAmZW50cmllc1tpXTsKKyAgICAgICAgICB1bnNpZ25lZCBpbnQg aW5kZXgxOworICAgICAgICAgIHVuc2lnbmVkIGludCBpbmRleDI7CisKKyAgICAgICAgICBp ZiAoYWNlLT5hX3R5cGUgPT0gTkVXX0FDRV9BQ0NFU1NfQUxMT1dFRF9BQ0VfVFlQRSkKKyAg ICAgICAgICAgIGluZGV4MSA9IDE7CisgICAgICAgICAgZWxzZSBpZiAoYWNlLT5hX3R5cGUg PT0gTkVXX0FDRV9BQ0NFU1NfREVOSUVEX0FDRV9UWVBFKQorICAgICAgICAgICAgaW5kZXgx ID0gMDsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMTsKKworICAgICAg ICAgIGlmIChhY2UtPmFfZmxhZ3MgPT0gTkVXX0FDRV9PV05FUikKKyAgICAgICAgICAgIGlu ZGV4MiA9IDA7CisgICAgICAgICAgZWxzZSBpZiAoYWNlLT5hX2ZsYWdzID09IChORVdfQUNF X0dST1VQIHwgTkVXX0FDRV9JREVOVElGSUVSX0dST1VQKSkKKyAgICAgICAgICAgIGluZGV4 MiA9IDI7CisgICAgICAgICAgZWxzZSBpZiAoYWNlLT5hX2ZsYWdzID09IE5FV19BQ0VfRVZF UllPTkUpCisgICAgICAgICAgICBpbmRleDIgPSA0OworICAgICAgICAgIGVsc2UKKyAgICAg ICAgICAgIHJldHVybiAxOworCisgICAgICAgICAgYWNjZXNzX21hc2tzW2luZGV4MSArIGlu ZGV4Ml0gfD0gYWNlLT5hX2FjY2Vzc19tYXNrOworICAgICAgICB9CisKKyAgICAgIC8qIFRo ZSBzYW1lIGJpdCBzaG91bGRuJ3QgYmUgYm90aCBhbGxvd2VkIGFuZCBkZW5pZWQuICAqLwor ICAgICAgaWYgKGFjY2Vzc19tYXNrc1swXSAmIGFjY2Vzc19tYXNrc1sxXSkKKyAgICAgICAg cmV0dXJuIDE7CisgICAgICBpZiAoYWNjZXNzX21hc2tzWzJdICYgYWNjZXNzX21hc2tzWzNd KQorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGlmIChhY2Nlc3NfbWFza3NbNF0gJiBhY2Nl c3NfbWFza3NbNV0pCisgICAgICAgIHJldHVybiAxOworCisgICAgICAvKiBDaGVjayBtaW5p bXVtIG1hc2tzLiAgKi8KKyAgICAgIGlmICgoTkVXX0FDRV9XUklURV9OQU1FRF9BVFRSUwor ICAgICAgICAgICB8IE5FV19BQ0VfV1JJVEVfQVRUUklCVVRFUworICAgICAgICAgICB8IE5F V19BQ0VfV1JJVEVfQUNMCisgICAgICAgICAgIHwgTkVXX0FDRV9XUklURV9PV05FUikKKyAg ICAgICAgICAmIH4gYWNjZXNzX21hc2tzWzFdKQorICAgICAgICByZXR1cm4gMTsKKyAgICAg IGFjY2Vzc19tYXNrc1sxXSAmPSB+KE5FV19BQ0VfV1JJVEVfTkFNRURfQVRUUlMKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgTkVXX0FDRV9XUklURV9BVFRSSUJVVEVTCisgICAg ICAgICAgICAgICAgICAgICAgICAgICB8IE5FV19BQ0VfV1JJVEVfQUNMCisgICAgICAgICAg ICAgICAgICAgICAgICAgICB8IE5FV19BQ0VfV1JJVEVfT1dORVIpOworICAgICAgaWYgKChO RVdfQUNFX1JFQURfTkFNRURfQVRUUlMKKyAgICAgICAgICAgfCBORVdfQUNFX1JFQURfQVRU UklCVVRFUworICAgICAgICAgICB8IE5FV19BQ0VfUkVBRF9BQ0wKKyAgICAgICAgICAgfCBO RVdfQUNFX1NZTkNIUk9OSVpFKQorICAgICAgICAgICYgfiBhY2Nlc3NfbWFza3NbNV0pCisg ICAgICAgIHJldHVybiAxOworICAgICAgYWNjZXNzX21hc2tzWzVdICY9IH4oTkVXX0FDRV9S RUFEX05BTUVEX0FUVFJTCisgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5FV19BQ0Vf UkVBRF9BVFRSSUJVVEVTCisgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5FV19BQ0Vf UkVBRF9BQ0wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTkVXX0FDRV9TWU5DSFJP TklaRSk7CisKKyAgICAgIC8qIENoZWNrIHRoZSBhbGxvd2VkIG9yIGRlbmllZCBiaXRzLiAg Ki8KKyAgICAgIHN3aXRjaCAoKGFjY2Vzc19tYXNrc1swXSB8IGFjY2Vzc19tYXNrc1sxXSkK KyAgICAgICAgICAgICAgJiB+KE5FV19BQ0VfUkVBRF9OQU1FRF9BVFRSUworICAgICAgICAg ICAgICAgICAgfCBORVdfQUNFX1JFQURfQVRUUklCVVRFUworICAgICAgICAgICAgICAgICAg fCBORVdfQUNFX1JFQURfQUNMCisgICAgICAgICAgICAgICAgICB8IE5FV19BQ0VfU1lOQ0hS T05JWkUpKQorICAgICAgICB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgY2FzZSBORVdf QUNFX1JFQURfREFUQToKKyAgICAgICAgY2FzZSAgICAgICAgICAgICAgICAgICAgIE5FV19B Q0VfV1JJVEVBX0RBVEE6CisgICAgICAgIGNhc2UgTkVXX0FDRV9SRUFEX0RBVEEgfCBORVdf QUNFX1dSSVRFQV9EQVRBOgorICAgICAgICBjYXNlICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE5FV19BQ0VfRVhFQ1VURToKKyAgICAgICAgY2FzZSBORVdf QUNFX1JFQURfREFUQSB8ICAgICAgICAgICAgICAgICAgICAgICBORVdfQUNFX0VYRUNVVEU6 CisgICAgICAgIGNhc2UgICAgICAgICAgICAgICAgICAgICBORVdfQUNFX1dSSVRFQV9EQVRB IHwgTkVXX0FDRV9FWEVDVVRFOgorICAgICAgICBjYXNlIE5FV19BQ0VfUkVBRF9EQVRBIHwg TkVXX0FDRV9XUklURUFfREFUQSB8IE5FV19BQ0VfRVhFQ1VURToKKyAgICAgICAgICBicmVh azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQor ICAgICAgc3dpdGNoICgoYWNjZXNzX21hc2tzWzJdIHwgYWNjZXNzX21hc2tzWzNdKQorICAg ICAgICAgICAgICAmIH4oTkVXX0FDRV9SRUFEX05BTUVEX0FUVFJTCisgICAgICAgICAgICAg ICAgICB8IE5FV19BQ0VfUkVBRF9BVFRSSUJVVEVTCisgICAgICAgICAgICAgICAgICB8IE5F V19BQ0VfUkVBRF9BQ0wKKyAgICAgICAgICAgICAgICAgIHwgTkVXX0FDRV9TWU5DSFJPTkla RSkpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICBjYXNlIE5FV19BQ0Vf UkVBRF9EQVRBOgorICAgICAgICBjYXNlICAgICAgICAgICAgICAgICAgICAgTkVXX0FDRV9X UklURUFfREFUQToKKyAgICAgICAgY2FzZSBORVdfQUNFX1JFQURfREFUQSB8IE5FV19BQ0Vf V1JJVEVBX0RBVEE6CisgICAgICAgIGNhc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTkVXX0FDRV9FWEVDVVRFOgorICAgICAgICBjYXNlIE5FV19BQ0Vf UkVBRF9EQVRBIHwgICAgICAgICAgICAgICAgICAgICAgIE5FV19BQ0VfRVhFQ1VURToKKyAg ICAgICAgY2FzZSAgICAgICAgICAgICAgICAgICAgIE5FV19BQ0VfV1JJVEVBX0RBVEEgfCBO RVdfQUNFX0VYRUNVVEU6CisgICAgICAgIGNhc2UgTkVXX0FDRV9SRUFEX0RBVEEgfCBORVdf QUNFX1dSSVRFQV9EQVRBIHwgTkVXX0FDRV9FWEVDVVRFOgorICAgICAgICAgIGJyZWFrOwor ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAg ICBzd2l0Y2ggKChhY2Nlc3NfbWFza3NbNF0gfCBhY2Nlc3NfbWFza3NbNV0pCisgICAgICAg ICAgICAgICYgfihORVdfQUNFX1dSSVRFX05BTUVEX0FUVFJTCisgICAgICAgICAgICAgICAg ICB8IE5FV19BQ0VfV1JJVEVfQVRUUklCVVRFUworICAgICAgICAgICAgICAgICAgfCBORVdf QUNFX1dSSVRFX0FDTAorICAgICAgICAgICAgICAgICAgfCBORVdfQUNFX1dSSVRFX09XTkVS KSkKKyAgICAgICAgeworICAgICAgICBjYXNlIDA6CisgICAgICAgIGNhc2UgTkVXX0FDRV9S RUFEX0RBVEE6CisgICAgICAgIGNhc2UgICAgICAgICAgICAgICAgICAgICBORVdfQUNFX1dS SVRFQV9EQVRBOgorICAgICAgICBjYXNlIE5FV19BQ0VfUkVBRF9EQVRBIHwgTkVXX0FDRV9X UklURUFfREFUQToKKyAgICAgICAgY2FzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBORVdfQUNFX0VYRUNVVEU6CisgICAgICAgIGNhc2UgTkVXX0FDRV9S RUFEX0RBVEEgfCAgICAgICAgICAgICAgICAgICAgICAgTkVXX0FDRV9FWEVDVVRFOgorICAg ICAgICBjYXNlICAgICAgICAgICAgICAgICAgICAgTkVXX0FDRV9XUklURUFfREFUQSB8IE5F V19BQ0VfRVhFQ1VURToKKyAgICAgICAgY2FzZSBORVdfQUNFX1JFQURfREFUQSB8IE5FV19B Q0VfV1JJVEVBX0RBVEEgfCBORVdfQUNFX0VYRUNVVEU6CisgICAgICAgICAgYnJlYWs7Cisg ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKworICAg ICAgLyogQ2hlY2sgdGhhdCB0aGUgTkVXX0FDRV9XUklURV9EQVRBIGFuZCBORVdfQUNFX0FQ UEVORF9EQVRBIGJpdHMgYXJlCisgICAgICAgICBlaXRoZXIgYm90aCBhbGxvd2VkIG9yIGJv dGggZGVuaWVkLiAgKi8KKyAgICAgIGlmICgoKGFjY2Vzc19tYXNrc1swXSAmIE5FV19BQ0Vf V1JJVEVfREFUQSkgIT0gMCkKKyAgICAgICAgICAhPSAoKGFjY2Vzc19tYXNrc1swXSAmIE5F V19BQ0VfQVBQRU5EX0RBVEEpICE9IDApKQorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGlm ICgoKGFjY2Vzc19tYXNrc1syXSAmIE5FV19BQ0VfV1JJVEVfREFUQSkgIT0gMCkKKyAgICAg ICAgICAhPSAoKGFjY2Vzc19tYXNrc1syXSAmIE5FV19BQ0VfQVBQRU5EX0RBVEEpICE9IDAp KQorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGlmICgoKGFjY2Vzc19tYXNrc1s0XSAmIE5F V19BQ0VfV1JJVEVfREFUQSkgIT0gMCkKKyAgICAgICAgICAhPSAoKGFjY2Vzc19tYXNrc1s0 XSAmIE5FV19BQ0VfQVBQRU5EX0RBVEEpICE9IDApKQorICAgICAgICByZXR1cm4gMTsKKyAg ICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKyMgZW5kaWYKKworI2VsaWYgVVNFX0FDTCAmJiBI QVZFX0dFVEFDTCAvKiBIUC1VWCAqLworCisvKiBSZXR1cm4gMSBpZiB0aGUgZ2l2ZW4gQUNM IGlzIG5vbi10cml2aWFsLgorICAgUmV0dXJuIDAgaWYgaXQgaXMgdHJpdmlhbCwgaS5lLiBl cXVpdmFsZW50IHRvIGEgc2ltcGxlIHN0YXQoKSBtb2RlLiAgKi8KK2ludAorYWNsX25vbnRy aXZpYWwgKGludCBjb3VudCwgc3RydWN0IGFjbF9lbnRyeSAqZW50cmllcywgc3RydWN0IHN0 YXQgKnNiKQoreworICBpbnQgaTsKKworICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykK KyAgICB7CisgICAgICBzdHJ1Y3QgYWNsX2VudHJ5ICphY2UgPSAmZW50cmllc1tpXTsKKwor ICAgICAgaWYgKCEoKGFjZS0+dWlkID09IHNiLT5zdF91aWQgJiYgYWNlLT5naWQgPT0gQUNM X05TR1JPVVApCisgICAgICAgICAgICB8fCAoYWNlLT51aWQgPT0gQUNMX05TVVNFUiAmJiBh Y2UtPmdpZCA9PSBzYi0+c3RfZ2lkKQorICAgICAgICAgICAgfHwgKGFjZS0+dWlkID09IEFD TF9OU1VTRVIgJiYgYWNlLT5naWQgPT0gQUNMX05TR1JPVVApKSkKKyAgICAgICAgcmV0dXJu IDE7CisgICAgfQorICByZXR1cm4gMDsKK30KKworIyBpZiBIQVZFX0FDTFZfSCAvKiBIUC1V WCA+PSAxMS4xMSAqLworCisvKiBSZXR1cm4gMSBpZiB0aGUgZ2l2ZW4gQUNMIGlzIG5vbi10 cml2aWFsLgorICAgUmV0dXJuIDAgaWYgaXQgaXMgdHJpdmlhbCwgaS5lLiBlcXVpdmFsZW50 IHRvIGEgc2ltcGxlIHN0YXQoKSBtb2RlLiAgKi8KK2ludAorYWNsdl9ub250cml2aWFsIChp bnQgY291bnQsIHN0cnVjdCBhY2wgKmVudHJpZXMpCit7CisgIGludCBpOworCisgIGZvciAo aSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgIHN0cnVjdCBhY2wgKmFjZSA9 ICZlbnRyaWVzW2ldOworCisgICAgICAvKiBOb3RlOiBJZiBhY2UtPmFfdHlwZSA9IFVTRVJf T0JKLCBhY2UtPmFfaWQgaXMgdGhlIHN0X3VpZCBmcm9tIHN0YXQoKS4KKyAgICAgICAgIElm IGFjZS0+YV90eXBlID0gR1JPVVBfT0JKLCBhY2UtPmFfaWQgaXMgdGhlIHN0X2dpZCBmcm9t IHN0YXQoKS4KKyAgICAgICAgIFdlIGRvbid0IG5lZWQgdG8gY2hlY2sgYWNlLT5hX2lkIGlu IHRoZXNlIGNhc2VzLiAgKi8KKyAgICAgIGlmICghKGFjZS0+YV90eXBlID09IFVTRVJfT0JK IC8qIG5vIG5lZWQgdG8gY2hlY2sgYWNlLT5hX2lkIGhlcmUgKi8KKyAgICAgICAgICAgIHx8 IGFjZS0+YV90eXBlID09IEdST1VQX09CSiAvKiBubyBuZWVkIHRvIGNoZWNrIGFjZS0+YV9p ZCBoZXJlICovCisgICAgICAgICAgICB8fCBhY2UtPmFfdHlwZSA9PSBDTEFTU19PQkoKKyAg ICAgICAgICAgIHx8IGFjZS0+YV90eXBlID09IE9USEVSX09CSikpCisgICAgICAgIHJldHVy biAxOworICAgIH0KKyAgcmV0dXJuIDA7Cit9CisKKyMgZW5kaWYKKworI2VsaWYgVVNFX0FD TCAmJiAoSEFWRV9BQ0xYX0dFVCB8fCBIQVZFX1NUQVRBQ0wpIC8qIEFJWCAqLworCisvKiBS ZXR1cm4gMSBpZiB0aGUgZ2l2ZW4gQUNMIGlzIG5vbi10cml2aWFsLgorICAgUmV0dXJuIDAg aWYgaXQgaXMgdHJpdmlhbCwgaS5lLiBlcXVpdmFsZW50IHRvIGEgc2ltcGxlIHN0YXQoKSBt b2RlLiAgKi8KK2ludAorYWNsX25vbnRyaXZpYWwgKHN0cnVjdCBhY2wgKmEpCit7CisgIC8q IFRoZSBub3JtYWwgd2F5IHRvIGl0ZXJhdGUgdGhyb3VnaCBhbiBBQ0wgaXMgbGlrZSB0aGlz OgorICAgICAgIHN0cnVjdCBhY2xfZW50cnkgKmFjZTsKKyAgICAgICBmb3IgKGFjZSA9IGEt PmFjbF9leHQ7IGFjZSAhPSBhY2xfbGFzdCAoYSk7IGFjZSA9IGFjbF9ueHQgKGFjZSkpCisg ICAgICAgICB7CisgICAgICAgICAgIHN0cnVjdCBhY2VfaWQgKmFlaTsKKyAgICAgICAgICAg c3dpdGNoIChhY2UtPmFjZV90eXBlKQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICBj YXNlIEFDQ19QRVJNSVQ6CisgICAgICAgICAgICAgY2FzZSBBQ0NfREVOWToKKyAgICAgICAg ICAgICBjYXNlIEFDQ19TUEVDSUZZOgorICAgICAgICAgICAgICAgLi4uOworICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgZm9yIChhZWkgPSBhY2UtPmFjZV9pZDsgYWVpICE9IGlkX2xh c3QgKGFjZSk7IGFlaSA9IGlkX254dCAoYWVpKSkKKyAgICAgICAgICAgICAuLi4KKyAgICAg ICAgIH0KKyAgICovCisgIHJldHVybiAoYWNsX2xhc3QgKGEpICE9IGEtPmFjbF9leHQgPyAx IDogMCk7Cit9CisKKyMgaWYgSEFWRV9BQ0xYX0dFVCAmJiBkZWZpbmVkIEFDTF9BSVhfV0lQ IC8qIG5ld2VyIEFJWCAqLworCisvKiBSZXR1cm4gMSBpZiB0aGUgZ2l2ZW4gQUNMIGlzIG5v bi10cml2aWFsLgorICAgUmV0dXJuIDAgaWYgaXQgaXMgdHJpdmlhbCwgaS5lLiBlcXVpdmFs ZW50IHRvIGEgc2ltcGxlIHN0YXQoKSBtb2RlLiAgKi8KK2ludAorYWNsX25mczRfbm9udHJp dmlhbCAobmZzNF9hY2xfaW50X3QgKmEpCit7CisjICBpZiAxIC8qIGxldCdzIHRyeSB0aGlz IGZpcnN0ICovCisgIHJldHVybiAoYS0+YWNsRW50cnlOID4gMCA/IDEgOiAwKTsKKyMgIGVs c2UKKyAgaW50IGNvdW50ID0gYS0+YWNsRW50cnlOOworICBpbnQgaTsKKworICBmb3IgKGkg PSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICBuZnM0X2FjZV9pbnRfdCAqYWNl ID0gJmEtPmFjbEVudHJ5W2ldOworCisgICAgICBpZiAoISgoYWNlLT5mbGFncyAmIEFDRTRf SURfU1BFQ0lBTCkgIT0gMAorICAgICAgICAgICAgJiYgKGFjZS0+YWNlV2hvLnNwZWNpYWxf d2hvaWQgPT0gQUNFNF9XSE9fT1dORVIKKyAgICAgICAgICAgICAgICB8fCBhY2UtPmFjZVdo by5zcGVjaWFsX3dob2lkID09IEFDRTRfV0hPX0dST1VQCisgICAgICAgICAgICAgICAgfHwg YWNlLT5hY2VXaG8uc3BlY2lhbF93aG9pZCA9PSBBQ0U0X1dIT19FVkVSWU9ORSkKKyAgICAg ICAgICAgICYmIGFjZS0+YWNlVHlwZSA9PSBBQ0U0X0FDQ0VTU19BTExPV0VEX0FDRV9UWVBF CisgICAgICAgICAgICAmJiBhY2UtPmFjZUZsYWdzID09IDAKKyAgICAgICAgICAgICYmIChh Y2UtPmFjZU1hc2sgJiB+KEFDRTRfUkVBRF9EQVRBIHwgQUNFNF9MSVNUX0RJUkVDVE9SWQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBQ0U0X1dSSVRFX0RBVEEgfCBB Q0U0X0FERF9GSUxFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFDRTRf RVhFQ1VURSkpID09IDApKQorICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgIHJldHVybiAw OworIyAgZW5kaWYKK30KKworIyBlbmRpZgorCisjZWxpZiBVU0VfQUNMICYmIEhBVkVfQUNM U09SVCAvKiBOb25TdG9wIEtlcm5lbCAqLworCisvKiBUZXN0IGFuIEFDTCByZXRyaWV2ZWQg d2l0aCBBQ0xfR0VULgorICAgUmV0dXJuIDEgaWYgdGhlIGdpdmVuIEFDTCwgY29uc2lzdGlu ZyBvZiBDT1VOVCBlbnRyaWVzLCBpcyBub24tdHJpdmlhbC4KKyAgIFJldHVybiAwIGlmIGl0 IGlzIHRyaXZpYWwsIGkuZS4gZXF1aXZhbGVudCB0byBhIHNpbXBsZSBzdGF0KCkgbW9kZS4g ICovCitpbnQKK2FjbF9ub250cml2aWFsIChpbnQgY291bnQsIHN0cnVjdCBhY2wgKmVudHJp ZXMpCit7CisgIGludCBpOworCisgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAg IHsKKyAgICAgIHN0cnVjdCBhY2wgKmFjZSA9ICZlbnRyaWVzW2ldOworCisgICAgICAvKiBO b3RlOiBJZiBhY2UtPmFfdHlwZSA9IFVTRVJfT0JKLCBhY2UtPmFfaWQgaXMgdGhlIHN0X3Vp ZCBmcm9tIHN0YXQoKS4KKyAgICAgICAgIElmIGFjZS0+YV90eXBlID0gR1JPVVBfT0JKLCBh Y2UtPmFfaWQgaXMgdGhlIHN0X2dpZCBmcm9tIHN0YXQoKS4KKyAgICAgICAgIFdlIGRvbid0 IG5lZWQgdG8gY2hlY2sgYWNlLT5hX2lkIGluIHRoZXNlIGNhc2VzLiAgKi8KKyAgICAgIGlm ICghKGFjZS0+YV90eXBlID09IFVTRVJfT0JKIC8qIG5vIG5lZWQgdG8gY2hlY2sgYWNlLT5h X2lkIGhlcmUgKi8KKyAgICAgICAgICAgIHx8IGFjZS0+YV90eXBlID09IEdST1VQX09CSiAv KiBubyBuZWVkIHRvIGNoZWNrIGFjZS0+YV9pZCBoZXJlICovCisgICAgICAgICAgICB8fCBh Y2UtPmFfdHlwZSA9PSBDTEFTU19PQkoKKyAgICAgICAgICAgIHx8IGFjZS0+YV90eXBlID09 IE9USEVSX09CSikpCisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgcmV0dXJuIDA7Cit9 CisKKyNlbmRpZgorCisKKy8qIFJldHVybiAxIGlmIE5BTUUgaGFzIGEgbm9udHJpdmlhbCBh Y2Nlc3MgY29udHJvbCBsaXN0LCAwIGlmIE5BTUUKKyAgIG9ubHkgaGFzIG5vIG9yIGEgYmFz ZSBhY2Nlc3MgY29udHJvbCBsaXN0LCBhbmQgLTEgKHNldHRpbmcgZXJybm8pCisgICBvbiBl cnJvci4gIFNCIG11c3QgYmUgc2V0IHRvIHRoZSBzdGF0IGJ1ZmZlciBvZiBOQU1FLCBvYnRh aW5lZAorICAgdGhyb3VnaCBzdGF0KCkgb3IgbHN0YXQoKS4gICovCisKK2ludAorZmlsZV9o YXNfYWNsIChjaGFyIGNvbnN0ICpuYW1lLCBzdHJ1Y3Qgc3RhdCBjb25zdCAqc2IpCit7Cisj aWYgVVNFX0FDTAorICBpZiAoISBTX0lTTE5LIChzYi0+c3RfbW9kZSkpCisgICAgeworIyBp ZiBIQVZFX0FDTF9HRVRfRklMRQorCisgICAgICAvKiBQT1NJWCAxMDAzLjFlIChkcmFmdCAx NyAtLSBhYmFuZG9uZWQpIHNwZWNpZmljIHZlcnNpb24uICAqLworICAgICAgLyogTGludXgs IEZyZWVCU0QsIE1hYyBPUyBYLCBJUklYLCBUcnU2NCAqLworICAgICAgaW50IHJldDsKKwor ICAgICAgaWYgKEhBVkVfQUNMX0VYVEVOREVEX0ZJTEUpIC8qIExpbnV4ICovCisgICAgICAg IHsKKyAgICAgICAgICAvKiBPbiBMaW51eCwgYWNsX2V4dGVuZGVkX2ZpbGUgaXMgYW4gb3B0 aW1pemVkIGZ1bmN0aW9uOiBJdCBvbmx5CisgICAgICAgICAgICAgbWFrZXMgdHdvIGNhbGxz IHRvIGdldHhhdHRyKCksIG9uZSBmb3IgQUNMX1RZUEVfQUNDRVNTLCBvbmUgZm9yCisgICAg ICAgICAgICAgQUNMX1RZUEVfREVGQVVMVC4gICovCisgICAgICAgICAgcmV0ID0gYWNsX2V4 dGVuZGVkX2ZpbGUgKG5hbWUpOworICAgICAgICB9CisgICAgICBlbHNlIC8qIEZyZWVCU0Qs IE1hYyBPUyBYLCBJUklYLCBUcnU2NCAqLworICAgICAgICB7CisjICBpZiBIQVZFX0FDTF9U WVBFX0VYVEVOREVEIC8qIE1hYyBPUyBYICovCisgICAgICAgICAgLyogT24gTWFjIE9TIFgs IGFjbF9nZXRfZmlsZSAobmFtZSwgQUNMX1RZUEVfQUNDRVNTKQorICAgICAgICAgICAgIGFu ZCBhY2xfZ2V0X2ZpbGUgKG5hbWUsIEFDTF9UWVBFX0RFRkFVTFQpCisgICAgICAgICAgICAg YWx3YXlzIHJldHVybiBOVUxMIC8gRUlOVkFMLiAgVGhlcmUgaXMgbm8gcG9pbnQgaW4gbWFr aW5nCisgICAgICAgICAgICAgdGhlc2UgdHdvIHVzZWxlc3MgY2FsbHMuICBUaGUgcmVhbCBB Q0wgaXMgcmV0cmlldmVkIHRocm91Z2gKKyAgICAgICAgICAgICBhY2xfZ2V0X2ZpbGUgKG5h bWUsIEFDTF9UWVBFX0VYVEVOREVEKS4gICovCisgICAgICAgICAgYWNsX3QgYWNsID0gYWNs X2dldF9maWxlIChuYW1lLCBBQ0xfVFlQRV9FWFRFTkRFRCk7CisgICAgICAgICAgaWYgKGFj bCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcmV0ID0gYWNsX2V4dGVuZGVkX25v bnRyaXZpYWwgKGFjbCk7CisgICAgICAgICAgICAgIGFjbF9mcmVlIChhY2wpOworICAgICAg ICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldCA9IC0xOworIyAgZWxz ZSAvKiBGcmVlQlNELCBJUklYLCBUcnU2NCAqLworICAgICAgICAgIGFjbF90IGFjbCA9IGFj bF9nZXRfZmlsZSAobmFtZSwgQUNMX1RZUEVfQUNDRVNTKTsKKyAgICAgICAgICBpZiAoYWNs KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpbnQgc2F2ZWRfZXJybm87CisKKyAg ICAgICAgICAgICAgcmV0ID0gYWNsX2FjY2Vzc19ub250cml2aWFsIChhY2wpOworICAgICAg ICAgICAgICBzYXZlZF9lcnJubyA9IGVycm5vOworICAgICAgICAgICAgICBhY2xfZnJlZSAo YWNsKTsKKyAgICAgICAgICAgICAgZXJybm8gPSBzYXZlZF9lcnJubzsKKyMgICBpZiBIQVZF X0FDTF9GUkVFX1RFWFQgLyogVHJ1NjQgKi8KKyAgICAgICAgICAgICAgLyogT24gT1NGLzEs IGFjbF9nZXRfZmlsZSAobmFtZSwgQUNMX1RZUEVfREVGQVVMVCkgYWx3YXlzCisgICAgICAg ICAgICAgICAgIHJldHVybnMgTlVMTCB3aXRoIGVycm5vIG5vdCBzZXQuICBUaGVyZSBpcyBu byBwb2ludCBpbgorICAgICAgICAgICAgICAgICBtYWtpbmcgdGhpcyBjYWxsLiAgKi8KKyMg ICBlbHNlIC8qIEZyZWVCU0QsIElSSVggKi8KKyAgICAgICAgICAgICAgLyogT24gTGludXgs IEZyZWVCU0QsIElSSVgsIGFjbF9nZXRfZmlsZSAobmFtZSwgQUNMX1RZUEVfQUNDRVNTKQor ICAgICAgICAgICAgICAgICBhbmQgYWNsX2dldF9maWxlIChuYW1lLCBBQ0xfVFlQRV9ERUZB VUxUKSBvbiBhIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICBlaXRoZXIgYm90aCBzdWNj ZWVkIG9yIGJvdGggZmFpbDsgaXQgZGVwZW5kcyBvbiB0aGUKKyAgICAgICAgICAgICAgICAg ZmlsZSBzeXN0ZW0uICBUaGVyZWZvcmUgdGhlcmUgaXMgbm8gcG9pbnQgaW4gbWFraW5nIHRo ZSBzZWNvbmQKKyAgICAgICAgICAgICAgICAgY2FsbCBpZiB0aGUgZmlyc3Qgb25lIGFscmVh ZHkgZmFpbGVkLiAgKi8KKyAgICAgICAgICAgICAgaWYgKHJldCA9PSAwICYmIFNfSVNESVIg KHNiLT5zdF9tb2RlKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBh Y2wgPSBhY2xfZ2V0X2ZpbGUgKG5hbWUsIEFDTF9UWVBFX0RFRkFVTFQpOworICAgICAgICAg ICAgICAgICAgaWYgKGFjbCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg ICAgICAgICAgIHJldCA9ICgwIDwgYWNsX2VudHJpZXMgKGFjbCkpOworICAgICAgICAgICAg ICAgICAgICAgIGFjbF9mcmVlIChhY2wpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJldCA9IC0xOworICAg ICAgICAgICAgICAgIH0KKyMgICBlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICAgIGVs c2UKKyAgICAgICAgICAgIHJldCA9IC0xOworIyAgZW5kaWYKKyAgICAgICAgfQorICAgICAg aWYgKHJldCA8IDApCisgICAgICAgIHJldHVybiAtIGFjbF9lcnJub192YWxpZCAoZXJybm8p OworICAgICAgcmV0dXJuIHJldDsKKworIyBlbGlmIEhBVkVfRkFDTCAmJiBkZWZpbmVkIEdF VEFDTCAvKiBTb2xhcmlzLCBDeWd3aW4sIG5vdCBIUC1VWCAqLworCisjICBpZiBkZWZpbmVk IEFDTF9OT19UUklWSUFMCisKKyAgICAgIC8qIFNvbGFyaXMgMTAgKG5ld2VyIHZlcnNpb24p LCB3aGljaCBoYXMgYWRkaXRpb25hbCBBUEkgZGVjbGFyZWQgaW4KKyAgICAgICAgIDxzeXMv YWNsLmg+IChhY2xfdCkgYW5kIGltcGxlbWVudGVkIGluIGxpYnNlYyAoYWNsX3NldCwgYWNs X3RyaXZpYWwsCisgICAgICAgICBhY2xfZnJvbXRleHQsIC4uLikuICAqLworICAgICAgcmV0 dXJuIGFjbF90cml2aWFsIChuYW1lKTsKKworIyAgZWxzZSAvKiBTb2xhcmlzLCBDeWd3aW4s IGdlbmVyYWwgY2FzZSAqLworCisgICAgICAvKiBTb2xhcmlzIDIuNSB0aHJvdWdoIFNvbGFy aXMgMTAsIEN5Z3dpbiwgYW5kIGNvbnRlbXBvcmFuZW91cyB2ZXJzaW9ucworICAgICAgICAg b2YgVW5peHdhcmUuICBUaGUgYWNsKCkgY2FsbCByZXR1cm5zIHRoZSBhY2Nlc3MgYW5kIGRl ZmF1bHQgQUNMIGJvdGgKKyAgICAgICAgIGF0IG9uY2UuICAqLworICAgICAgeworICAgICAg ICAvKiBJbml0aWFsbHksIHRyeSB0byByZWFkIHRoZSBlbnRyaWVzIGludG8gYSBzdGFjay1h bGxvY2F0ZWQgYnVmZmVyLgorICAgICAgICAgICBVc2UgbWFsbG9jIGlmIGl0IGRvZXMgbm90 IGZpdC4gICovCisgICAgICAgIGVudW0KKyAgICAgICAgICB7CisgICAgICAgICAgICBhbGxv Y19pbml0ID0gNDAwMCAvIHNpemVvZiAoYWNsZW50X3QpLCAvKiA+PSAzICovCisgICAgICAg ICAgICBhbGxvY19tYXggPSBNSU4gKElOVF9NQVgsIFNJWkVfTUFYIC8gc2l6ZW9mIChhY2xl bnRfdCkpCisgICAgICAgICAgfTsKKyAgICAgICAgYWNsZW50X3QgYnVmW2FsbG9jX2luaXRd OworICAgICAgICBzaXplX3QgYWxsb2MgPSBhbGxvY19pbml0OworICAgICAgICBhY2xlbnRf dCAqZW50cmllcyA9IGJ1ZjsKKyAgICAgICAgYWNsZW50X3QgKm1hbGxvY2VkID0gTlVMTDsK KyAgICAgICAgaW50IGNvdW50OworCisgICAgICAgIGZvciAoOzspCisgICAgICAgICAgewor ICAgICAgICAgICAgY291bnQgPSBhY2wgKG5hbWUsIEdFVEFDTCwgYWxsb2MsIGVudHJpZXMp OworICAgICAgICAgICAgaWYgKGNvdW50IDwgMCAmJiBlcnJubyA9PSBFTk9TUEMpCisgICAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBJbmNyZWFzZSB0aGUgc2l6ZSBvZiB0 aGUgYnVmZmVyLiAgKi8KKyAgICAgICAgICAgICAgICBmcmVlIChtYWxsb2NlZCk7CisgICAg ICAgICAgICAgICAgaWYgKGFsbG9jID4gYWxsb2NfbWF4IC8gMikKKyAgICAgICAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgICAgICAg ICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICBhbGxvYyA9IDIgKiBhbGxvYzsgLyogPD0gYWxsb2NfbWF4ICovCisgICAgICAgICAg ICAgICAgZW50cmllcyA9IG1hbGxvY2VkID0KKyAgICAgICAgICAgICAgICAgIChhY2xlbnRf dCAqKSBtYWxsb2MgKGFsbG9jICogc2l6ZW9mIChhY2xlbnRfdCkpOworICAgICAgICAgICAg ICAgIGlmIChlbnRyaWVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAg ICAgICAgICAgICAgIGVycm5vID0gRU5PTUVNOworICAgICAgICAgICAgICAgICAgICByZXR1 cm4gLTE7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29udGludWU7 CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAg ICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoZXJy bm8gPT0gRU5PU1lTIHx8IGVycm5vID09IEVOT1RTVVApCisgICAgICAgICAgICAgIDsKKyAg ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCBz YXZlZF9lcnJubyA9IGVycm5vOworICAgICAgICAgICAgICAgIGZyZWUgKG1hbGxvY2VkKTsK KyAgICAgICAgICAgICAgICBlcnJubyA9IHNhdmVkX2Vycm5vOworICAgICAgICAgICAgICAg IHJldHVybiAtMTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgZWxz ZSBpZiAoY291bnQgPT0gMCkKKyAgICAgICAgICA7CisgICAgICAgIGVsc2UKKyAgICAgICAg ICB7CisgICAgICAgICAgICAvKiBEb24ndCB1c2UgTUlOX0FDTF9FTlRSSUVTOiAgSXQncyBz ZXQgdG8gNCBvbiBDeWd3aW4sIGJ1dCBDeWd3aW4KKyAgICAgICAgICAgICAgIHJldHVybnMg b25seSAzIGVudHJpZXMgZm9yIGZpbGVzIHdpdGggbm8gQUNMLiAgQnV0IHRoaXMgaXMgc2Fm ZToKKyAgICAgICAgICAgICAgIElmIHRoZXJlIGFyZSBtb3JlIHRoYW4gNCBlbnRyaWVzLCB0 aGVyZSBjYW5ub3QgYmUgb25seSB0aGUKKyAgICAgICAgICAgICAgICJ1c2VyOjoiLCAiZ3Jv dXA6OiIsICJvdGhlcjoiLCBhbmQgIm1hc2s6IiBlbnRyaWVzLiAgKi8KKyAgICAgICAgICAg IGlmIChjb3VudCA+IDQpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmcmVl IChtYWxsb2NlZCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAg IH0KKworICAgICAgICAgICAgaWYgKGFjbF9ub250cml2aWFsIChjb3VudCwgZW50cmllcykp CisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmcmVlIChtYWxsb2NlZCk7Cisg ICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9 CisgICAgICAgIGZyZWUgKG1hbGxvY2VkKTsKKyAgICAgIH0KKworIyAgIGlmZGVmIEFDRV9H RVRBQ0wKKyAgICAgIC8qIFNvbGFyaXMgYWxzbyBoYXMgYSBkaWZmZXJlbnQgdmFyaWFudCBv ZiBBQ0xzLCB1c2VkIGluIFpGUyBhbmQgTkZTdjQKKyAgICAgICAgIGZpbGUgc3lzdGVtcyAo d2hlcmVhcyB0aGUgb3RoZXIgb25lcyBhcmUgdXNlZCBpbiBVRlMgZmlsZSBzeXN0ZW1zKS4g ICovCisgICAgICB7CisgICAgICAgIC8qIEluaXRpYWxseSwgdHJ5IHRvIHJlYWQgdGhlIGVu dHJpZXMgaW50byBhIHN0YWNrLWFsbG9jYXRlZCBidWZmZXIuCisgICAgICAgICAgIFVzZSBt YWxsb2MgaWYgaXQgZG9lcyBub3QgZml0LiAgKi8KKyAgICAgICAgZW51bQorICAgICAgICAg IHsKKyAgICAgICAgICAgIGFsbG9jX2luaXQgPSA0MDAwIC8gc2l6ZW9mIChhY2VfdCksIC8q ID49IDMgKi8KKyAgICAgICAgICAgIGFsbG9jX21heCA9IE1JTiAoSU5UX01BWCwgU0laRV9N QVggLyBzaXplb2YgKGFjZV90KSkKKyAgICAgICAgICB9OworICAgICAgICBhY2VfdCBidWZb YWxsb2NfaW5pdF07CisgICAgICAgIHNpemVfdCBhbGxvYyA9IGFsbG9jX2luaXQ7CisgICAg ICAgIGFjZV90ICplbnRyaWVzID0gYnVmOworICAgICAgICBhY2VfdCAqbWFsbG9jZWQgPSBO VUxMOworICAgICAgICBpbnQgY291bnQ7CisKKyAgICAgICAgZm9yICg7OykKKyAgICAgICAg ICB7CisgICAgICAgICAgICBjb3VudCA9IGFjbCAobmFtZSwgQUNFX0dFVEFDTCwgYWxsb2Ms IGVudHJpZXMpOworICAgICAgICAgICAgaWYgKGNvdW50IDwgMCAmJiBlcnJubyA9PSBFTk9T UEMpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBJbmNyZWFzZSB0aGUg c2l6ZSBvZiB0aGUgYnVmZmVyLiAgKi8KKyAgICAgICAgICAgICAgICBmcmVlIChtYWxsb2Nl ZCk7CisgICAgICAgICAgICAgICAgaWYgKGFsbG9jID4gYWxsb2NfbWF4IC8gMikKKyAgICAg ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZXJybm8gPSBFTk9NRU07Cisg ICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICBhbGxvYyA9IDIgKiBhbGxvYzsgLyogPD0gYWxsb2NfbWF4ICovCisg ICAgICAgICAgICAgICAgZW50cmllcyA9IG1hbGxvY2VkID0gKGFjZV90ICopIG1hbGxvYyAo YWxsb2MgKiBzaXplb2YgKGFjZV90KSk7CisgICAgICAgICAgICAgICAgaWYgKGVudHJpZXMg PT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZXJy bm8gPSBFTk9NRU07CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg fQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICBpZiAoY291bnQg PCAwKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChlcnJubyA9PSBFTk9TWVMgfHwg ZXJybm8gPT0gRUlOVkFMKQorICAgICAgICAgICAgICA7CisgICAgICAgICAgICBlbHNlCisg ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgc2F2ZWRfZXJybm8gPSBlcnJu bzsKKyAgICAgICAgICAgICAgICBmcmVlIChtYWxsb2NlZCk7CisgICAgICAgICAgICAgICAg ZXJybm8gPSBzYXZlZF9lcnJubzsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAg ICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGNvdW50ID09IDAp CisgICAgICAgICAgOworICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAg LyogSW4gdGhlIG9sZCAob3JpZ2luYWwgU29sYXJpcyAxMCkgY29udmVudGlvbjoKKyAgICAg ICAgICAgICAgIElmIHRoZXJlIGFyZSBtb3JlIHRoYW4gMyBlbnRyaWVzLCB0aGVyZSBjYW5u b3QgYmUgb25seSB0aGUKKyAgICAgICAgICAgICAgIEFDRV9PV05FUiwgQUNFX0dST1VQLCBB Q0VfT1RIRVIgZW50cmllcy4KKyAgICAgICAgICAgICAgIEluIHRoZSBuZXdlciBTb2xhcmlz IDEwIGFuZCBTb2xhcmlzIDExIGNvbnZlbnRpb246CisgICAgICAgICAgICAgICBJZiB0aGVy ZSBhcmUgbW9yZSB0aGFuIDYgZW50cmllcywgdGhlcmUgY2Fubm90IGJlIG9ubHkgdGhlCisg ICAgICAgICAgICAgICBBQ0VfT1dORVIsIEFDRV9HUk9VUCwgQUNFX0VWRVJZT05FIGVudHJp ZXMsIGVhY2ggb25jZSB3aXRoCisgICAgICAgICAgICAgICBORVdfQUNFX0FDQ0VTU19BTExP V0VEX0FDRV9UWVBFIGFuZCBvbmNlIHdpdGgKKyAgICAgICAgICAgICAgIE5FV19BQ0VfQUND RVNTX0RFTklFRF9BQ0VfVFlQRS4gICovCisgICAgICAgICAgICBpZiAoY291bnQgPiA2KQor ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZnJlZSAobWFsbG9jZWQpOworICAg ICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg IGlmIChhY2xfYWNlX25vbnRyaXZpYWwgKGNvdW50LCBlbnRyaWVzKSkKKyAgICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgIGZyZWUgKG1hbGxvY2VkKTsKKyAgICAgICAgICAgICAg ICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgZnJl ZSAobWFsbG9jZWQpOworICAgICAgfQorIyAgIGVuZGlmCisKKyAgICAgIHJldHVybiAwOwor IyAgZW5kaWYKKworIyBlbGlmIEhBVkVfR0VUQUNMIC8qIEhQLVVYICovCisKKyAgICAgIHsK KyAgICAgICAgc3RydWN0IGFjbF9lbnRyeSBlbnRyaWVzW05BQ0xFTlRSSUVTXTsKKyAgICAg ICAgaW50IGNvdW50OworCisgICAgICAgIGNvdW50ID0gZ2V0YWNsIChuYW1lLCBOQUNMRU5U UklFUywgZW50cmllcyk7CisKKyAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgICB7 CisgICAgICAgICAgICAvKiBFTk9TWVMgaXMgc2VlbiBvbiBuZXdlciBIUC1VWCB2ZXJzaW9u cy4KKyAgICAgICAgICAgICAgIEVPUE5PVFNVUFAgaXMgdHlwaWNhbGx5IHNlZW4gb24gTkZT IG1vdW50cy4KKyAgICAgICAgICAgICAgIEVOT1RTVVAgd2FzIHNlZW4gb24gUXVhbnR1bSBT dG9yTmV4dCBmaWxlIHN5c3RlbXMgKGN2ZnMpLiAgKi8KKyAgICAgICAgICAgIGlmIChlcnJu byA9PSBFTk9TWVMgfHwgZXJybm8gPT0gRU9QTk9UU1VQUCB8fCBlcnJubyA9PSBFTk9UU1VQ KQorICAgICAgICAgICAgICA7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHJl dHVybiAtMTsKKyAgICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGNvdW50ID09IDApCisg ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGVsc2UgLyogY291bnQgPiAwICovCisgICAg ICAgICAgeworICAgICAgICAgICAgaWYgKGNvdW50ID4gTkFDTEVOVFJJRVMpCisgICAgICAg ICAgICAgIC8qIElmIE5BQ0xFTlRSSUVTIGNhbm5vdCBiZSB0cnVzdGVkLCB1c2UgZHluYW1p YyBtZW1vcnkKKyAgICAgICAgICAgICAgICAgYWxsb2NhdGlvbi4gICovCisgICAgICAgICAg ICAgIGFib3J0ICgpOworCisgICAgICAgICAgICAvKiBJZiB0aGVyZSBhcmUgbW9yZSB0aGFu IDMgZW50cmllcywgdGhlcmUgY2Fubm90IGJlIG9ubHkgdGhlCisgICAgICAgICAgICAgICAo dWlkLCUpLCAoJSxnaWQpLCAoJSwlKSBlbnRyaWVzLiAgKi8KKyAgICAgICAgICAgIGlmIChj b3VudCA+IDMpCisgICAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgIHN0cnVjdCBzdGF0IHN0YXRidWY7CisKKyAgICAgICAgICAgICAgaWYg KHN0YXQgKG5hbWUsICZzdGF0YnVmKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0x OworCisgICAgICAgICAgICAgIHJldHVybiBhY2xfbm9udHJpdmlhbCAoY291bnQsIGVudHJp ZXMsICZzdGF0YnVmKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICB9CisK KyMgIGlmIEhBVkVfQUNMVl9IIC8qIEhQLVVYID49IDExLjExICovCisKKyAgICAgIHsKKyAg ICAgICAgc3RydWN0IGFjbCBlbnRyaWVzW05BQ0xWRU5UUklFU107CisgICAgICAgIGludCBj b3VudDsKKworICAgICAgICBjb3VudCA9IGFjbCAoKGNoYXIgKikgbmFtZSwgQUNMX0dFVCwg TkFDTFZFTlRSSUVTLCBlbnRyaWVzKTsKKworICAgICAgICBpZiAoY291bnQgPCAwKQorICAg ICAgICAgIHsKKyAgICAgICAgICAgIC8qIEVPUE5PVFNVUFAgaXMgc2VlbiBvbiBORlMgaW4g SFAtVVggMTEuMTEsIDExLjIzLgorICAgICAgICAgICAgICAgRUlOVkFMIGlzIHNlZW4gb24g TkZTIGluIEhQLVVYIDExLjMxLiAgKi8KKyAgICAgICAgICAgIGlmIChlcnJubyA9PSBFTk9T WVMgfHwgZXJybm8gPT0gRU9QTk9UU1VQUCB8fCBlcnJubyA9PSBFSU5WQUwpCisgICAgICAg ICAgICAgIDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgcmV0dXJuIC0xOwor ICAgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY291bnQgPT0gMCkKKyAgICAgICAgICBy ZXR1cm4gMDsKKyAgICAgICAgZWxzZSAvKiBjb3VudCA+IDAgKi8KKyAgICAgICAgICB7Cisg ICAgICAgICAgICBpZiAoY291bnQgPiBOQUNMVkVOVFJJRVMpCisgICAgICAgICAgICAgIC8q IElmIE5BQ0xWRU5UUklFUyBjYW5ub3QgYmUgdHJ1c3RlZCwgdXNlIGR5bmFtaWMgbWVtb3J5 CisgICAgICAgICAgICAgICAgIGFsbG9jYXRpb24uICAqLworICAgICAgICAgICAgICBhYm9y dCAoKTsKKworICAgICAgICAgICAgLyogSWYgdGhlcmUgYXJlIG1vcmUgdGhhbiA0IGVudHJp ZXMsIHRoZXJlIGNhbm5vdCBiZSBvbmx5IHRoZQorICAgICAgICAgICAgICAgZm91ciBiYXNl IEFDTCBlbnRyaWVzLiAgKi8KKyAgICAgICAgICAgIGlmIChjb3VudCA+IDQpCisgICAgICAg ICAgICAgIHJldHVybiAxOworCisgICAgICAgICAgICByZXR1cm4gYWNsdl9ub250cml2aWFs IChjb3VudCwgZW50cmllcyk7CisgICAgICAgICAgfQorICAgICAgfQorCisjICBlbmRpZgor CisjIGVsaWYgSEFWRV9BQ0xYX0dFVCAmJiBkZWZpbmVkIEFDTF9BSVhfV0lQIC8qIEFJWCAq LworCisgICAgICBhY2xfdHlwZV90IHR5cGU7CisgICAgICBjaGFyIGFjbGJ1ZlsxMDI0XTsK KyAgICAgIHZvaWQgKmFjbCA9IGFjbGJ1ZjsKKyAgICAgIHNpemVfdCBhY2xzaXplID0gc2l6 ZW9mIChhY2xidWYpOworICAgICAgbW9kZV90IG1vZGU7CisKKyAgICAgIGZvciAoOzspCisg ICAgICAgIHsKKyAgICAgICAgICAvKiBUaGUgZG9jcyBzYXkgdGhhdCB0eXBlIGJlaW5nIDAg aXMgZXF1aXZhbGVudCB0byBBQ0xfQU5ZLCBidXQgaXQKKyAgICAgICAgICAgICBpcyBub3Qg dHJ1ZSwgaW4gQUlYIDUuMy4gICovCisgICAgICAgICAgdHlwZS51NjQgPSBBQ0xfQU5ZOwor ICAgICAgICAgIGlmIChhY2x4X2dldCAobmFtZSwgMCwgJnR5cGUsIGFjbGJ1ZiwgJmFjbHNp emUsICZtb2RlKSA+PSAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgaWYgKGVy cm5vID09IEVOT1NZUykKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgIGlmIChl cnJubyAhPSBFTk9TUEMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmIChhY2wg IT0gYWNsYnVmKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGludCBz YXZlZF9lcnJubyA9IGVycm5vOworICAgICAgICAgICAgICAgICAgZnJlZSAoYWNsKTsKKyAg ICAgICAgICAgICAgICAgIGVycm5vID0gc2F2ZWRfZXJybm87CisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAg YWNsc2l6ZSA9IDIgKiBhY2xzaXplOworICAgICAgICAgIGlmIChhY2wgIT0gYWNsYnVmKQor ICAgICAgICAgICAgZnJlZSAoYWNsKTsKKyAgICAgICAgICBhY2wgPSBtYWxsb2MgKGFjbHNp emUpOworICAgICAgICAgIGlmIChhY2wgPT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICBpZiAodHlwZS51NjQgPT0gQUNMX0FJ WEMpCisgICAgICAgIHsKKyAgICAgICAgICBpbnQgcmVzdWx0ID0gYWNsX25vbnRyaXZpYWwg KChzdHJ1Y3QgYWNsICopIGFjbCk7CisgICAgICAgICAgaWYgKGFjbCAhPSBhY2xidWYpCisg ICAgICAgICAgICBmcmVlIChhY2wpOworICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg ICAgIH0KKyAgICAgIGVsc2UgaWYgKHR5cGUudTY0ID09IEFDTF9ORlM0KQorICAgICAgICB7 CisgICAgICAgICAgaW50IHJlc3VsdCA9IGFjbF9uZnM0X25vbnRyaXZpYWwgKChuZnM0X2Fj bF9pbnRfdCAqKSBhY2wpOworICAgICAgICAgIGlmIChhY2wgIT0gYWNsYnVmKQorICAgICAg ICAgICAgZnJlZSAoYWNsKTsKKyAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9 CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvKiBBIG5ld2VyIHR5cGUgb2Yg QUNMIGhhcyBiZWVuIGludHJvZHVjZWQgaW4gdGhlIHN5c3RlbS4KKyAgICAgICAgICAgICBX ZSBzaG91bGQgYmV0dGVyIHN1cHBvcnQgaXQuICAqLworICAgICAgICAgIGlmIChhY2wgIT0g YWNsYnVmKQorICAgICAgICAgICAgZnJlZSAoYWNsKTsKKyAgICAgICAgICBlcnJubyA9IEVJ TlZBTDsKKyAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworIyBlbGlmIEhBVkVf U1RBVEFDTCAvKiBvbGRlciBBSVggKi8KKworICAgICAgdW5pb24geyBzdHJ1Y3QgYWNsIGE7 IGNoYXIgcm9vbVs0MDk2XTsgfSB1OworCisgICAgICBpZiAoc3RhdGFjbCAobmFtZSwgU1RY X05PUk1BTCwgJnUuYSwgc2l6ZW9mICh1KSkgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisK KyAgICAgIHJldHVybiBhY2xfbm9udHJpdmlhbCAoJnUuYSk7CisKKyMgZWxpZiBIQVZFX0FD TFNPUlQgLyogTm9uU3RvcCBLZXJuZWwgKi8KKworICAgICAgeworICAgICAgICBzdHJ1Y3Qg YWNsIGVudHJpZXNbTkFDTEVOVFJJRVNdOworICAgICAgICBpbnQgY291bnQ7CisKKyAgICAg ICAgY291bnQgPSBhY2wgKChjaGFyICopIG5hbWUsIEFDTF9HRVQsIE5BQ0xFTlRSSUVTLCBl bnRyaWVzKTsKKworICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICAgIHsKKyAgICAg ICAgICAgIGlmIChlcnJubyA9PSBFTk9TWVMgfHwgZXJybm8gPT0gRU5PVFNVUCkKKyAgICAg ICAgICAgICAgOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICByZXR1cm4gLTE7 CisgICAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChjb3VudCA9PSAwKQorICAgICAgICAg IHJldHVybiAwOworICAgICAgICBlbHNlIC8qIGNvdW50ID4gMCAqLworICAgICAgICAgIHsK KyAgICAgICAgICAgIGlmIChjb3VudCA+IE5BQ0xFTlRSSUVTKQorICAgICAgICAgICAgICAv KiBJZiBOQUNMRU5UUklFUyBjYW5ub3QgYmUgdHJ1c3RlZCwgdXNlIGR5bmFtaWMgbWVtb3J5 CisgICAgICAgICAgICAgICAgIGFsbG9jYXRpb24uICAqLworICAgICAgICAgICAgICBhYm9y dCAoKTsKKworICAgICAgICAgICAgLyogSWYgdGhlcmUgYXJlIG1vcmUgdGhhbiA0IGVudHJp ZXMsIHRoZXJlIGNhbm5vdCBiZSBvbmx5IHRoZQorICAgICAgICAgICAgICAgZm91ciBiYXNl IEFDTCBlbnRyaWVzLiAgKi8KKyAgICAgICAgICAgIGlmIChjb3VudCA+IDQpCisgICAgICAg ICAgICAgIHJldHVybiAxOworCisgICAgICAgICAgICByZXR1cm4gYWNsX25vbnRyaXZpYWwg KGNvdW50LCBlbnRyaWVzKTsKKyAgICAgICAgICB9CisgICAgICB9CisKKyMgZW5kaWYKKyAg ICB9CisjZW5kaWYKKworICByZXR1cm4gMDsKK30KCj09PSBtb2RpZmllZCBmaWxlICdsaWIv Z251bGliLm1rJwotLS0gbGliL2dudWxpYi5tawkyMDEzLTAzLTEzIDE4OjQyOjIyICswMDAw CisrKyBsaWIvZ251bGliLm1rCTIwMTMtMDQtMjcgMjA6MjQ6MTAgKzAwMDAKQEAgLTIxLDcg KzIxLDcgQEAKICMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9m IHRoYXQgcHJvZ3JhbS4KICMKICMgR2VuZXJhdGVkIGJ5IGdudWxpYi10b29sLgotIyBSZXBy b2R1Y2UgYnk6IGdudWxpYi10b29sIC0taW1wb3J0IC0tZGlyPS4gLS1saWI9bGliZ251IC0t c291cmNlLWJhc2U9bGliIC0tbTQtYmFzZT1tNCAtLWRvYy1iYXNlPWRvYyAtLXRlc3RzLWJh c2U9dGVzdHMgLS1hdXgtZGlyPWJ1aWxkLWF1eCAtLWF2b2lkPWR1cCAtLWF2b2lkPWVycm5v IC0tYXZvaWQ9ZmNoZGlyIC0tYXZvaWQ9ZmNudGwgLS1hdm9pZD1mc3RhdCAtLWF2b2lkPW1h bGxvYy1wb3NpeCAtLWF2b2lkPW1zdmMtaW52YWwgLS1hdm9pZD1tc3ZjLW5vdGhyb3cgLS1h dm9pZD1vcGVuIC0tYXZvaWQ9b3BlbmF0LWRpZSAtLWF2b2lkPW9wZW5kaXIgLS1hdm9pZD1y YWlzZSAtLWF2b2lkPXNhdmUtY3dkIC0tYXZvaWQ9c2VsZWN0IC0tYXZvaWQ9c2lncHJvY21h c2sgLS1hdm9pZD1zeXNfdHlwZXMgLS1hdm9pZD10aHJlYWRsaWIgLS1tYWtlZmlsZS1uYW1l PWdudWxpYi5tayAtLWNvbmRpdGlvbmFsLWRlcGVuZGVuY2llcyAtLW5vLWxpYnRvb2wgLS1t YWNyby1wcmVmaXg9Z2wgLS1uby12Yy1maWxlcyBhbGxvY2Etb3B0IGMtY3R5cGUgYy1zdHJj YXNlIGNhcmVhZGxpbmthdCBjbG9zZS1zdHJlYW0gY3J5cHRvL21kNSBjcnlwdG8vc2hhMSBj cnlwdG8vc2hhMjU2IGNyeXB0by9zaGE1MTIgZHRvYXN0ciBkdG90aW1lc3BlYyBkdXAyIGVu dmlyb24gZXhlY2luZm8gZmFjY2Vzc2F0IGZjbnRsLWggZmRhdGFzeW5jIGZkb3BlbmRpciBm aWxlbW9kZSBmc3RhdGF0IGZzeW5jIGdldGxvYWRhdmcgZ2V0b3B0LWdudSBnZXR0aW1lIGdl dHRpbWVvZmRheSBpZ25vcmUtdmFsdWUgaW50cHJvcHMgbGFyZ2VmaWxlIGxzdGF0IG1hbnl3 YXJuaW5ncyBtZW1yY2hyIG1rdGltZSBwc2VsZWN0IHB0aHJlYWRfc2lnbWFzayBwdXRlbnYg cmVhZGxpbmsgcmVhZGxpbmthdCBzaWcyc3RyIHNvY2tsZW4gc3RhdC10aW1lIHN0ZGFsaWdu IHN0ZGFyZyBzdGRib29sIHN0ZGlvIHN0cmZ0aW1lIHN0cnRvaW1heCBzdHJ0b3VtYXggc3lt bGluayBzeXNfc3RhdCBzeXNfdGltZSB0aW1lIHRpbWVyLXRpbWUgdGltZXNwZWMtYWRkIHRp bWVzcGVjLXN1YiB1bnNldGVudiB1dGltZW5zIHdhcm5pbmdzCisjIFJlcHJvZHVjZSBieTog Z251bGliLXRvb2wgLS1pbXBvcnQgLS1kaXI9LiAtLWxpYj1saWJnbnUgLS1zb3VyY2UtYmFz ZT1saWIgLS1tNC1iYXNlPW00IC0tZG9jLWJhc2U9ZG9jIC0tdGVzdHMtYmFzZT10ZXN0cyAt LWF1eC1kaXI9YnVpbGQtYXV4IC0tYXZvaWQ9ZHVwIC0tYXZvaWQ9ZXJybm8gLS1hdm9pZD1m Y2hkaXIgLS1hdm9pZD1mY250bCAtLWF2b2lkPWZzdGF0IC0tYXZvaWQ9bWFsbG9jLXBvc2l4 IC0tYXZvaWQ9bXN2Yy1pbnZhbCAtLWF2b2lkPW1zdmMtbm90aHJvdyAtLWF2b2lkPW9wZW4g LS1hdm9pZD1vcGVuYXQtZGllIC0tYXZvaWQ9b3BlbmRpciAtLWF2b2lkPXJhaXNlIC0tYXZv aWQ9c2F2ZS1jd2QgLS1hdm9pZD1zZWxlY3QgLS1hdm9pZD1zaWdwcm9jbWFzayAtLWF2b2lk PXN5c190eXBlcyAtLWF2b2lkPXRocmVhZGxpYiAtLW1ha2VmaWxlLW5hbWU9Z251bGliLm1r IC0tY29uZGl0aW9uYWwtZGVwZW5kZW5jaWVzIC0tbm8tbGlidG9vbCAtLW1hY3JvLXByZWZp eD1nbCAtLW5vLXZjLWZpbGVzIGFsbG9jYS1vcHQgYy1jdHlwZSBjLXN0cmNhc2UgY2FyZWFk bGlua2F0IGNsb3NlLXN0cmVhbSBjcnlwdG8vbWQ1IGNyeXB0by9zaGExIGNyeXB0by9zaGEy NTYgY3J5cHRvL3NoYTUxMiBkdG9hc3RyIGR0b3RpbWVzcGVjIGR1cDIgZW52aXJvbiBleGVj aW5mbyBmYWNjZXNzYXQgZmNudGwtaCBmZGF0YXN5bmMgZmRvcGVuZGlyIGZpbGVtb2RlIGZz dGF0YXQgZnN5bmMgZ2V0bG9hZGF2ZyBnZXRvcHQtZ251IGdldHRpbWUgZ2V0dGltZW9mZGF5 IGlnbm9yZS12YWx1ZSBpbnRwcm9wcyBsYXJnZWZpbGUgbHN0YXQgbWFueXdhcm5pbmdzIG1l bXJjaHIgbWt0aW1lIHBzZWxlY3QgcHRocmVhZF9zaWdtYXNrIHB1dGVudiBxYWNsIHJlYWRs aW5rIHJlYWRsaW5rYXQgc2lnMnN0ciBzb2NrbGVuIHN0YXQtdGltZSBzdGRhbGlnbiBzdGRh cmcgc3RkYm9vbCBzdGRpbyBzdHJmdGltZSBzdHJ0b2ltYXggc3RydG91bWF4IHN5bWxpbmsg c3lzX3N0YXQgc3lzX3RpbWUgdGltZSB0aW1lci10aW1lIHRpbWVzcGVjLWFkZCB0aW1lc3Bl Yy1zdWIgdW5zZXRlbnYgdXRpbWVucyB3YXJuaW5ncwogCiAKIE1PU1RMWUNMRUFORklMRVMg Kz0gY29yZSAqLnN0YWNrZHVtcApAQCAtNTYxLDYgKzU2MSwxNiBAQAogCiAjIyBlbmQgICBn bnVsaWIgbW9kdWxlIHB1dGVudgogCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHFhY2wKKwor bGliZ251X2FfU09VUkNFUyArPSBhY2wtZXJybm8tdmFsaWQuYyBmaWxlLWhhcy1hY2wuYyBx Y29weS1hY2wuYyBxc2V0LWFjbC5jCisKK0VYVFJBX0RJU1QgKz0gYWNsLWludGVybmFsLmgg YWNsLmggYWNsX2VudHJpZXMuYworCitFWFRSQV9saWJnbnVfYV9TT1VSQ0VTICs9IGFjbF9l bnRyaWVzLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBxYWNsCisKICMjIGJlZ2luIGdu dWxpYiBtb2R1bGUgcmVhZGxpbmsKIAogCgo9PT0gYWRkZWQgZmlsZSAnbGliL3Fjb3B5LWFj bC5jJwotLS0gbGliL3Fjb3B5LWFjbC5jCTE5NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDAKKysr IGxpYi9xY29weS1hY2wuYwkyMDEzLTA0LTE3IDA1OjIxOjMzICswMDAwCkBAIC0wLDAgKzEs NTgzIEBACisvKiBjb3B5LWFjbC5jIC0gY29weSBhY2Nlc3MgY29udHJvbCBsaXN0IGZyb20g b25lIGZpbGUgdG8gYW5vdGhlciBmaWxlCisKKyAgIENvcHlyaWdodCAoQykgMjAwMi0yMDAz LCAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJv Z3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKwor ICAgV3JpdHRlbiBieSBQYXVsIEVnZ2VydCwgQW5kcmVhcyBHcsO8bmJhY2hlciwgYW5kIEJy dW5vIEhhaWJsZS4gICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2luY2x1ZGUgImFj bC5oIgorCisjaW5jbHVkZSAiYWNsLWludGVybmFsLmgiCisKKworLyogQ29weSBhY2Nlc3Mg Y29udHJvbCBsaXN0cyBmcm9tIG9uZSBmaWxlIHRvIGFub3RoZXIuIElmIFNPVVJDRV9ERVND IGlzCisgICBhIHZhbGlkIGZpbGUgZGVzY3JpcHRvciwgdXNlIGZpbGUgZGVzY3JpcHRvciBv cGVyYXRpb25zLCBlbHNlIHVzZQorICAgZmlsZW5hbWUgYmFzZWQgb3BlcmF0aW9ucyBvbiBT UkNfTkFNRS4gTGlrZXdpc2UgZm9yIERFU1RfREVTQyBhbmQKKyAgIERTVF9OQU1FLgorICAg SWYgYWNjZXNzIGNvbnRyb2wgbGlzdHMgYXJlIG5vdCBhdmFpbGFibGUsIGZjaG1vZCB0aGUg dGFyZ2V0IGZpbGUgdG8KKyAgIE1PREUuICBBbHNvIHNldHMgdGhlIG5vbi1wZXJtaXNzaW9u IGJpdHMgb2YgdGhlIGRlc3RpbmF0aW9uIGZpbGUKKyAgIChTX0lTVUlELCBTX0lTR0lELCBT X0lTVlRYKSB0byB0aG9zZSBmcm9tIE1PREUgaWYgYW55IGFyZSBzZXQuCisgICBSZXR1cm4g MCBpZiBzdWNjZXNzZnVsLgorICAgUmV0dXJuIC0yIGFuZCBzZXQgZXJybm8gZm9yIGFuIGVy cm9yIHJlbGF0aW5nIHRvIHRoZSBzb3VyY2UgZmlsZS4KKyAgIFJldHVybiAtMSBhbmQgc2V0 IGVycm5vIGZvciBhbiBlcnJvciByZWxhdGluZyB0byB0aGUgZGVzdGluYXRpb24gZmlsZS4g ICovCisKK2ludAorcWNvcHlfYWNsIChjb25zdCBjaGFyICpzcmNfbmFtZSwgaW50IHNvdXJj ZV9kZXNjLCBjb25zdCBjaGFyICpkc3RfbmFtZSwKKyAgICAgICAgICAgaW50IGRlc3RfZGVz YywgbW9kZV90IG1vZGUpCit7CisjaWYgVVNFX0FDTCAmJiBIQVZFX0FDTF9HRVRfRklMRQor ICAvKiBQT1NJWCAxMDAzLjFlIChkcmFmdCAxNyAtLSBhYmFuZG9uZWQpIHNwZWNpZmljIHZl cnNpb24uICAqLworICAvKiBMaW51eCwgRnJlZUJTRCwgTWFjIE9TIFgsIElSSVgsIFRydTY0 ICovCisjIGlmICFIQVZFX0FDTF9UWVBFX0VYVEVOREVECisgIC8qIExpbnV4LCBGcmVlQlNE LCBJUklYLCBUcnU2NCAqLworCisgIGFjbF90IGFjbDsKKyAgaW50IHJldDsKKworICBpZiAo SEFWRV9BQ0xfR0VUX0ZEICYmIHNvdXJjZV9kZXNjICE9IC0xKQorICAgIGFjbCA9IGFjbF9n ZXRfZmQgKHNvdXJjZV9kZXNjKTsKKyAgZWxzZQorICAgIGFjbCA9IGFjbF9nZXRfZmlsZSAo c3JjX25hbWUsIEFDTF9UWVBFX0FDQ0VTUyk7CisgIGlmIChhY2wgPT0gTlVMTCkKKyAgICB7 CisgICAgICBpZiAoISBhY2xfZXJybm9fdmFsaWQgKGVycm5vKSkKKyAgICAgICAgcmV0dXJu IHFzZXRfYWNsIChkc3RfbmFtZSwgZGVzdF9kZXNjLCBtb2RlKTsKKyAgICAgIGVsc2UKKyAg ICAgICAgcmV0dXJuIC0yOworICAgIH0KKworICBpZiAoSEFWRV9BQ0xfU0VUX0ZEICYmIGRl c3RfZGVzYyAhPSAtMSkKKyAgICByZXQgPSBhY2xfc2V0X2ZkIChkZXN0X2Rlc2MsIGFjbCk7 CisgIGVsc2UKKyAgICByZXQgPSBhY2xfc2V0X2ZpbGUgKGRzdF9uYW1lLCBBQ0xfVFlQRV9B Q0NFU1MsIGFjbCk7CisgIGlmIChyZXQgIT0gMCkKKyAgICB7CisgICAgICBpbnQgc2F2ZWRf ZXJybm8gPSBlcnJubzsKKworICAgICAgaWYgKCEgYWNsX2Vycm5vX3ZhbGlkIChlcnJubykg JiYgIWFjbF9hY2Nlc3Nfbm9udHJpdmlhbCAoYWNsKSkKKyAgICAgICAgeworICAgICAgICAg IGFjbF9mcmVlIChhY2wpOworICAgICAgICAgIHJldHVybiBjaG1vZF9vcl9mY2htb2QgKGRz dF9uYW1lLCBkZXN0X2Rlc2MsIG1vZGUpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAg ICAgIHsKKyAgICAgICAgICBhY2xfZnJlZSAoYWNsKTsKKyAgICAgICAgICBjaG1vZF9vcl9m Y2htb2QgKGRzdF9uYW1lLCBkZXN0X2Rlc2MsIG1vZGUpOworICAgICAgICAgIGVycm5vID0g c2F2ZWRfZXJybm87CisgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQor ICBlbHNlCisgICAgYWNsX2ZyZWUgKGFjbCk7CisKKyAgaWYgKCFNT0RFX0lOU0lERV9BQ0wg fHwgKG1vZGUgJiAoU19JU1VJRCB8IFNfSVNHSUQgfCBTX0lTVlRYKSkpCisgICAgeworICAg ICAgLyogV2UgZGlkIG5vdCBjYWxsIGNobW9kIHNvIGZhciwgYW5kIGVpdGhlciB0aGUgbW9k ZSBhbmQgdGhlIEFDTCBhcmUKKyAgICAgICAgIHNlcGFyYXRlIG9yIHNwZWNpYWwgYml0cyBh cmUgdG8gYmUgc2V0IHdoaWNoIGRvbid0IGZpdCBpbnRvIEFDTHMuICAqLworCisgICAgICBp ZiAoY2htb2Rfb3JfZmNobW9kIChkc3RfbmFtZSwgZGVzdF9kZXNjLCBtb2RlKSAhPSAwKQor ICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIGlmIChTX0lTRElSIChtb2RlKSkKKyAg ICB7CisgICAgICBhY2wgPSBhY2xfZ2V0X2ZpbGUgKHNyY19uYW1lLCBBQ0xfVFlQRV9ERUZB VUxUKTsKKyAgICAgIGlmIChhY2wgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0yOworCisg ICAgICBpZiAoYWNsX3NldF9maWxlIChkc3RfbmFtZSwgQUNMX1RZUEVfREVGQVVMVCwgYWNs KSkKKyAgICAgICAgeworICAgICAgICAgIGludCBzYXZlZF9lcnJubyA9IGVycm5vOworCisg ICAgICAgICAgYWNsX2ZyZWUgKGFjbCk7CisgICAgICAgICAgZXJybm8gPSBzYXZlZF9lcnJu bzsKKyAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAg ICAgYWNsX2ZyZWUgKGFjbCk7CisgICAgfQorICByZXR1cm4gMDsKKworIyBlbHNlIC8qIEhB VkVfQUNMX1RZUEVfRVhURU5ERUQgKi8KKyAgLyogTWFjIE9TIFggKi8KKworICAvKiBPbiBN YWMgT1MgWCwgIGFjbF9nZXRfZmlsZSAobmFtZSwgQUNMX1RZUEVfQUNDRVNTKQorICAgICBh bmQgICAgICAgICAgIGFjbF9nZXRfZmlsZSAobmFtZSwgQUNMX1RZUEVfREVGQVVMVCkKKyAg ICAgYWx3YXlzIHJldHVybiBOVUxMIC8gRUlOVkFMLiAgWW91IGhhdmUgdG8gdXNlCisgICAg ICAgICAgICAgICAgICAgYWNsX2dldF9maWxlIChuYW1lLCBBQ0xfVFlQRV9FWFRFTkRFRCkK KyAgICAgb3IgICAgICAgICAgICBhY2xfZ2V0X2ZkIChvcGVuIChuYW1lLCAuLi4pKQorICAg ICB0byByZXRyaWV2ZSBhbiBBQ0wuCisgICAgIE9uIHRoZSBvdGhlciBoYW5kLAorICAgICAg ICAgICAgICAgICAgIGFjbF9zZXRfZmlsZSAobmFtZSwgQUNMX1RZUEVfQUNDRVNTLCBhY2wp CisgICAgIGFuZCAgICAgICAgICAgYWNsX3NldF9maWxlIChuYW1lLCBBQ0xfVFlQRV9ERUZB VUxULCBhY2wpCisgICAgIGhhdmUgdGhlIHNhbWUgZWZmZWN0IGFzCisgICAgICAgICAgICAg ICAgICAgYWNsX3NldF9maWxlIChuYW1lLCBBQ0xfVFlQRV9FWFRFTkRFRCwgYWNsKToKKyAg ICAgRWFjaCBvZiB0aGVzZSBjYWxscyBzZXRzIHRoZSBmaWxlJ3MgQUNMLiAgKi8KKworICBh Y2xfdCBhY2w7CisgIGludCByZXQ7CisKKyAgaWYgKEhBVkVfQUNMX0dFVF9GRCAmJiBzb3Vy Y2VfZGVzYyAhPSAtMSkKKyAgICBhY2wgPSBhY2xfZ2V0X2ZkIChzb3VyY2VfZGVzYyk7Cisg IGVsc2UKKyAgICBhY2wgPSBhY2xfZ2V0X2ZpbGUgKHNyY19uYW1lLCBBQ0xfVFlQRV9FWFRF TkRFRCk7CisgIGlmIChhY2wgPT0gTlVMTCkKKyAgICB7CisgICAgICBpZiAoIWFjbF9lcnJu b192YWxpZCAoZXJybm8pKQorICAgICAgICByZXR1cm4gcXNldF9hY2wgKGRzdF9uYW1lLCBk ZXN0X2Rlc2MsIG1vZGUpOworICAgICAgZWxzZQorICAgICAgICByZXR1cm4gLTI7CisgICAg fQorCisgIGlmIChIQVZFX0FDTF9TRVRfRkQgJiYgZGVzdF9kZXNjICE9IC0xKQorICAgIHJl dCA9IGFjbF9zZXRfZmQgKGRlc3RfZGVzYywgYWNsKTsKKyAgZWxzZQorICAgIHJldCA9IGFj bF9zZXRfZmlsZSAoZHN0X25hbWUsIEFDTF9UWVBFX0VYVEVOREVELCBhY2wpOworICBpZiAo cmV0ICE9IDApCisgICAgeworICAgICAgaW50IHNhdmVkX2Vycm5vID0gZXJybm87CisKKyAg ICAgIGlmICghYWNsX2Vycm5vX3ZhbGlkIChzYXZlZF9lcnJubykgJiYgIWFjbF9leHRlbmRl ZF9ub250cml2aWFsIChhY2wpKQorICAgICAgICB7CisgICAgICAgICAgYWNsX2ZyZWUgKGFj bCk7CisgICAgICAgICAgcmV0dXJuIGNobW9kX29yX2ZjaG1vZCAoZHN0X25hbWUsIGRlc3Rf ZGVzYywgbW9kZSk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAg ICAgIGFjbF9mcmVlIChhY2wpOworICAgICAgICAgIGNobW9kX29yX2ZjaG1vZCAoZHN0X25h bWUsIGRlc3RfZGVzYywgbW9kZSk7CisgICAgICAgICAgZXJybm8gPSBzYXZlZF9lcnJubzsK KyAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisgIGVsc2UKKyAgICBh Y2xfZnJlZSAoYWNsKTsKKworICAvKiBTaW5jZSAhTU9ERV9JTlNJREVfQUNMLCB3ZSBoYXZl IHRvIGNhbGwgY2htb2QgZXhwbGljaXRseS4gICovCisgIHJldHVybiBjaG1vZF9vcl9mY2ht b2QgKGRzdF9uYW1lLCBkZXN0X2Rlc2MsIG1vZGUpOworCisjIGVuZGlmCisKKyNlbGlmIFVT RV9BQ0wgJiYgZGVmaW5lZCBHRVRBQ0wgLyogU29sYXJpcywgQ3lnd2luLCBub3QgSFAtVVgg Ki8KKworICAvKiBTb2xhcmlzIDIuNSB0aHJvdWdoIFNvbGFyaXMgMTAsIEN5Z3dpbiwgYW5k IGNvbnRlbXBvcmFuZW91cyB2ZXJzaW9ucworICAgICBvZiBVbml4d2FyZS4gIFRoZSBhY2wo KSBjYWxsIHJldHVybnMgdGhlIGFjY2VzcyBhbmQgZGVmYXVsdCBBQ0wgYm90aAorICAgICBh dCBvbmNlLiAgKi8KKyMgaWZkZWYgQUNFX0dFVEFDTAorICBpbnQgYWNlX2NvdW50OworICBh Y2VfdCAqYWNlX2VudHJpZXM7CisjIGVuZGlmCisgIGludCBjb3VudDsKKyAgYWNsZW50X3Qg KmVudHJpZXM7CisgIGludCBkaWRfY2htb2Q7CisgIGludCBzYXZlZF9lcnJubzsKKyAgaW50 IHJldDsKKworIyBpZmRlZiBBQ0VfR0VUQUNMCisgIC8qIFNvbGFyaXMgYWxzbyBoYXMgYSBk aWZmZXJlbnQgdmFyaWFudCBvZiBBQ0xzLCB1c2VkIGluIFpGUyBhbmQgTkZTdjQKKyAgICAg ZmlsZSBzeXN0ZW1zICh3aGVyZWFzIHRoZSBvdGhlciBvbmVzIGFyZSB1c2VkIGluIFVGUyBm aWxlIHN5c3RlbXMpLgorICAgICBUaGVyZSBpcyBhbiBBUEkKKyAgICAgICBwYXRoY29uZiAo bmFtZSwgX1BDX0FDTF9FTkFCTEVEKQorICAgICAgIGZwYXRoY29uZiAoZGVzYywgX1BDX0FD TF9FTkFCTEVEKQorICAgICB0aGF0IGFsbG93cyB0byBkZXRlcm1pbmUgd2hpY2ggb2YgdGhl IHR3byBraW5kcyBvZiBBQ0xzIGlzIHN1cHBvcnRlZAorICAgICBmb3IgdGhlIGdpdmVuIGZp bGUuICBCdXQgc29tZSBmaWxlIHN5c3RlbXMgbWF5IGltcGxlbWVudCB0aGlzIGNhbGwKKyAg ICAgaW5jb3JyZWN0bHksIHNvIGJldHRlciBub3QgdXNlIGl0LgorICAgICBXaGVuIGZldGNo aW5nIHRoZSBzb3VyY2UgQUNMLCB3ZSBzaW1wbHkgZmV0Y2ggYm90aCBBQ0wgdHlwZXMuCisg ICAgIFdoZW4gc2V0dGluZyB0aGUgZGVzdGluYXRpb24gQUNMLCB3ZSB0cnkgZWl0aGVyIEFD TCB0eXBlcywgYXNzdW1pbmcKKyAgICAgdGhhdCB0aGUga2VybmVsIHdpbGwgdHJhbnNsYXRl IHRoZSBBQ0wgZnJvbSBvbmUgZm9ybSB0byB0aGUgb3RoZXIuCisgICAgIChTZWUgaW4gPGh0 dHA6Ly9kb2NzLnN1bi5jb20vYXBwL2RvY3MvZG9jLzgxOS0yMjQxLzZuNGh1YzdpYT9sPWVu JmE9dmlldz4KKyAgICAgdGhlIGRlc2NyaXB0aW9uIG9mIEVOT1RTVVAuKSAgKi8KKyAgZm9y ICg7OykKKyAgICB7CisgICAgICBhY2VfY291bnQgPSAoc291cmNlX2Rlc2MgIT0gLTEKKyAg ICAgICAgICAgICAgICAgICA/IGZhY2wgKHNvdXJjZV9kZXNjLCBBQ0VfR0VUQUNMQ05ULCAw LCBOVUxMKQorICAgICAgICAgICAgICAgICAgIDogYWNsIChzcmNfbmFtZSwgQUNFX0dFVEFD TENOVCwgMCwgTlVMTCkpOworCisgICAgICBpZiAoYWNlX2NvdW50IDwgMCkKKyAgICAgICAg eworICAgICAgICAgIGlmIChlcnJubyA9PSBFTk9TWVMgfHwgZXJybm8gPT0gRUlOVkFMKQor ICAgICAgICAgICAgeworICAgICAgICAgICAgICBhY2VfY291bnQgPSAwOworICAgICAgICAg ICAgICBhY2VfZW50cmllcyA9IE5VTEw7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAtMjsKKyAgICAg ICAgfQorCisgICAgICBpZiAoYWNlX2NvdW50ID09IDApCisgICAgICAgIHsKKyAgICAgICAg ICBhY2VfZW50cmllcyA9IE5VTEw7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor ICAgICAgYWNlX2VudHJpZXMgPSAoYWNlX3QgKikgbWFsbG9jIChhY2VfY291bnQgKiBzaXpl b2YgKGFjZV90KSk7CisgICAgICBpZiAoYWNlX2VudHJpZXMgPT0gTlVMTCkKKyAgICAgICAg eworICAgICAgICAgIGVycm5vID0gRU5PTUVNOworICAgICAgICAgIHJldHVybiAtMjsKKyAg ICAgICAgfQorCisgICAgICByZXQgPSAoc291cmNlX2Rlc2MgIT0gLTEKKyAgICAgICAgICAg ICA/IGZhY2wgKHNvdXJjZV9kZXNjLCBBQ0VfR0VUQUNMLCBhY2VfY291bnQsIGFjZV9lbnRy aWVzKQorICAgICAgICAgICAgIDogYWNsIChzcmNfbmFtZSwgQUNFX0dFVEFDTCwgYWNlX2Nv dW50LCBhY2VfZW50cmllcykpOworICAgICAgaWYgKHJldCA8IDApCisgICAgICAgIHsKKyAg ICAgICAgICBmcmVlIChhY2VfZW50cmllcyk7CisgICAgICAgICAgaWYgKGVycm5vID09IEVO T1NZUyB8fCBlcnJubyA9PSBFSU5WQUwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg IGFjZV9jb3VudCA9IDA7CisgICAgICAgICAgICAgIGFjZV9lbnRyaWVzID0gTlVMTDsKKyAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAg ICAgICAgICAgcmV0dXJuIC0yOworICAgICAgICB9CisgICAgICBpZiAocmV0ID09IGFjZV9j b3VudCkKKyAgICAgICAgYnJlYWs7CisgICAgICAvKiBIdWg/IFRoZSBudW1iZXIgb2YgQUNM IGVudHJpZXMgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCBjYWxsLgorICAgICAgICAgUmVwZWF0 LiAgKi8KKyAgICB9CisjIGVuZGlmCisKKyAgZm9yICg7OykKKyAgICB7CisgICAgICBjb3Vu dCA9IChzb3VyY2VfZGVzYyAhPSAtMQorICAgICAgICAgICAgICAgPyBmYWNsIChzb3VyY2Vf ZGVzYywgR0VUQUNMQ05ULCAwLCBOVUxMKQorICAgICAgICAgICAgICAgOiBhY2wgKHNyY19u YW1lLCBHRVRBQ0xDTlQsIDAsIE5VTEwpKTsKKworICAgICAgaWYgKGNvdW50IDwgMCkKKyAg ICAgICAgeworICAgICAgICAgIGlmIChlcnJubyA9PSBFTk9TWVMgfHwgZXJybm8gPT0gRU5P VFNVUCB8fCBlcnJubyA9PSBFT1BOT1RTVVBQKQorICAgICAgICAgICAgeworICAgICAgICAg ICAgICBjb3VudCA9IDA7CisgICAgICAgICAgICAgIGVudHJpZXMgPSBOVUxMOworICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAg ICAgICByZXR1cm4gLTI7CisgICAgICAgIH0KKworICAgICAgaWYgKGNvdW50ID09IDApCisg ICAgICAgIHsKKyAgICAgICAgICBlbnRyaWVzID0gTlVMTDsKKyAgICAgICAgICBicmVhazsK KyAgICAgICAgfQorCisgICAgICBlbnRyaWVzID0gKGFjbGVudF90ICopIG1hbGxvYyAoY291 bnQgKiBzaXplb2YgKGFjbGVudF90KSk7CisgICAgICBpZiAoZW50cmllcyA9PSBOVUxMKQor ICAgICAgICB7CisgICAgICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgICAgICAgcmV0dXJu IC0yOworICAgICAgICB9CisKKyAgICAgIGlmICgoc291cmNlX2Rlc2MgIT0gLTEKKyAgICAg ICAgICAgPyBmYWNsIChzb3VyY2VfZGVzYywgR0VUQUNMLCBjb3VudCwgZW50cmllcykKKyAg ICAgICAgICAgOiBhY2wgKHNyY19uYW1lLCBHRVRBQ0wsIGNvdW50LCBlbnRyaWVzKSkKKyAg ICAgICAgICA9PSBjb3VudCkKKyAgICAgICAgYnJlYWs7CisgICAgICAvKiBIdWg/IFRoZSBu dW1iZXIgb2YgQUNMIGVudHJpZXMgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCBjYWxsLgorICAg ICAgICAgUmVwZWF0LiAgKi8KKyAgICB9CisKKyAgLyogSXMgdGhlcmUgYW4gQUNMIG9mIGVp dGhlciBraW5kPyAgKi8KKyMgaWZkZWYgQUNFX0dFVEFDTAorICBpZiAoYWNlX2NvdW50ID09 IDApCisjIGVuZGlmCisgICAgaWYgKGNvdW50ID09IDApCisgICAgICByZXR1cm4gcXNldF9h Y2wgKGRzdF9uYW1lLCBkZXN0X2Rlc2MsIG1vZGUpOworCisgIGRpZF9jaG1vZCA9IDA7IC8q IHNldCB0byAxIG9uY2UgdGhlIG1vZGUgYml0cyBpbiAwNzc3IGhhdmUgYmVlbiBzZXQgKi8K KyAgc2F2ZWRfZXJybm8gPSAwOyAvKiB0aGUgZmlyc3Qgbm9uLWlnbm9yYWJsZSBlcnJvciBj b2RlICovCisKKyAgaWYgKCFNT0RFX0lOU0lERV9BQ0wpCisgICAgeworICAgICAgLyogT24g Q3lnd2luLCBpdCBpcyBuZWNlc3NhcnkgdG8gY2FsbCBjaG1vZCBiZWZvcmUgYWNsLCBiZWNh dXNlCisgICAgICAgICBjaG1vZCBjYW4gY2hhbmdlIHRoZSBjb250ZW50cyBvZiB0aGUgQUNM IChpbiB3YXlzIHRoYXQgZG9uJ3QKKyAgICAgICAgIGNoYW5nZSB0aGUgYWxsb3dlZCBhY2Nl c3NlcywgYnV0IHN0aWxsIHZpc2libGUpLiAgKi8KKyAgICAgIGlmIChjaG1vZF9vcl9mY2ht b2QgKGRzdF9uYW1lLCBkZXN0X2Rlc2MsIG1vZGUpICE9IDApCisgICAgICAgIHNhdmVkX2Vy cm5vID0gZXJybm87CisgICAgICBkaWRfY2htb2QgPSAxOworICAgIH0KKworICAvKiBJZiBi b3RoIGFjZV9lbnRyaWVzIGFuZCBlbnRyaWVzIGFyZSBhdmFpbGFibGUsIHRyeSBTRVRBQ0wg YmVmb3JlCisgICAgIEFDRV9TRVRBQ0wsIGJlY2F1c2UgU0VUQUNMIGNhbm5vdCBmYWlsIHdp dGggRU5PVFNVUCB3aGVyZWFzIEFDRV9TRVRBQ0wKKyAgICAgY2FuLiAgKi8KKworICBpZiAo Y291bnQgPiAwKQorICAgIHsKKyAgICAgIHJldCA9IChkZXN0X2Rlc2MgIT0gLTEKKyAgICAg ICAgICAgICA/IGZhY2wgKGRlc3RfZGVzYywgU0VUQUNMLCBjb3VudCwgZW50cmllcykKKyAg ICAgICAgICAgICA6IGFjbCAoZHN0X25hbWUsIFNFVEFDTCwgY291bnQsIGVudHJpZXMpKTsK KyAgICAgIGlmIChyZXQgPCAwICYmIHNhdmVkX2Vycm5vID09IDApCisgICAgICAgIHsKKyAg ICAgICAgICBzYXZlZF9lcnJubyA9IGVycm5vOworICAgICAgICAgIGlmICgoZXJybm8gPT0g RU5PU1lTIHx8IGVycm5vID09IEVPUE5PVFNVUFAgfHwgZXJybm8gPT0gRUlOVkFMKQorICAg ICAgICAgICAgICAmJiAhYWNsX25vbnRyaXZpYWwgKGNvdW50LCBlbnRyaWVzKSkKKyAgICAg ICAgICAgIHNhdmVkX2Vycm5vID0gMDsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAg ICBkaWRfY2htb2QgPSAxOworICAgIH0KKyAgZnJlZSAoZW50cmllcyk7CisKKyMgaWZkZWYg QUNFX0dFVEFDTAorICBpZiAoYWNlX2NvdW50ID4gMCkKKyAgICB7CisgICAgICByZXQgPSAo ZGVzdF9kZXNjICE9IC0xCisgICAgICAgICAgICAgPyBmYWNsIChkZXN0X2Rlc2MsIEFDRV9T RVRBQ0wsIGFjZV9jb3VudCwgYWNlX2VudHJpZXMpCisgICAgICAgICAgICAgOiBhY2wgKGRz dF9uYW1lLCBBQ0VfU0VUQUNMLCBhY2VfY291bnQsIGFjZV9lbnRyaWVzKSk7CisgICAgICBp ZiAocmV0IDwgMCAmJiBzYXZlZF9lcnJubyA9PSAwKQorICAgICAgICB7CisgICAgICAgICAg c2F2ZWRfZXJybm8gPSBlcnJubzsKKyAgICAgICAgICBpZiAoKGVycm5vID09IEVOT1NZUyB8 fCBlcnJubyA9PSBFSU5WQUwgfHwgZXJybm8gPT0gRU5PVFNVUCkKKyAgICAgICAgICAgICAg JiYgIWFjbF9hY2Vfbm9udHJpdmlhbCAoYWNlX2NvdW50LCBhY2VfZW50cmllcykpCisgICAg ICAgICAgICBzYXZlZF9lcnJubyA9IDA7CisgICAgICAgIH0KKyAgICB9CisgIGZyZWUgKGFj ZV9lbnRyaWVzKTsKKyMgZW5kaWYKKworICBpZiAoTU9ERV9JTlNJREVfQUNMCisgICAgICAm JiBkaWRfY2htb2QgPD0gKChtb2RlICYgKFNfSVNVSUQgfCBTX0lTR0lEIHwgU19JU1ZUWCkp ID8gMSA6IDApKQorICAgIHsKKyAgICAgIC8qIFdlIGRpZCBub3QgY2FsbCBjaG1vZCBzbyBm YXIsIGFuZCBlaXRoZXIgdGhlIG1vZGUgYW5kIHRoZSBBQ0wgYXJlCisgICAgICAgICBzZXBh cmF0ZSBvciBzcGVjaWFsIGJpdHMgYXJlIHRvIGJlIHNldCB3aGljaCBkb24ndCBmaXQgaW50 byBBQ0xzLiAgKi8KKworICAgICAgaWYgKGNobW9kX29yX2ZjaG1vZCAoZHN0X25hbWUsIGRl c3RfZGVzYywgbW9kZSkgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgIGlmIChzYXZlZF9l cnJubyA9PSAwKQorICAgICAgICAgICAgc2F2ZWRfZXJybm8gPSBlcnJubzsKKyAgICAgICAg fQorICAgIH0KKworICBpZiAoc2F2ZWRfZXJybm8pCisgICAgeworICAgICAgZXJybm8gPSBz YXZlZF9lcnJubzsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIHJldHVybiAwOworCisj ZWxpZiBVU0VfQUNMICYmIEhBVkVfR0VUQUNMIC8qIEhQLVVYICovCisKKyAgc3RydWN0IGFj bF9lbnRyeSBlbnRyaWVzW05BQ0xFTlRSSUVTXTsKKyAgaW50IGNvdW50OworIyBpZiBIQVZF X0FDTFZfSAorICBzdHJ1Y3QgYWNsIGFjbHZfZW50cmllc1tOQUNMVkVOVFJJRVNdOworICBp bnQgYWNsdl9jb3VudDsKKyMgZW5kaWYKKyAgaW50IGRpZF9jaG1vZDsKKyAgaW50IHNhdmVk X2Vycm5vOworICBpbnQgcmV0OworCisgIGNvdW50ID0gKHNvdXJjZV9kZXNjICE9IC0xCisg ICAgICAgICAgID8gZmdldGFjbCAoc291cmNlX2Rlc2MsIE5BQ0xFTlRSSUVTLCBlbnRyaWVz KQorICAgICAgICAgICA6IGdldGFjbCAoc3JjX25hbWUsIE5BQ0xFTlRSSUVTLCBlbnRyaWVz KSk7CisKKyAgaWYgKGNvdW50IDwgMCkKKyAgICB7CisgICAgICBpZiAoZXJybm8gPT0gRU5P U1lTIHx8IGVycm5vID09IEVPUE5PVFNVUFAgfHwgZXJybm8gPT0gRU5PVFNVUCkKKyAgICAg ICAgY291bnQgPSAwOworICAgICAgZWxzZQorICAgICAgICByZXR1cm4gLTI7CisgICAgfQor ICBlbHNlIGlmIChjb3VudCA+IDApCisgICAgeworICAgICAgaWYgKGNvdW50ID4gTkFDTEVO VFJJRVMpCisgICAgICAgIC8qIElmIE5BQ0xFTlRSSUVTIGNhbm5vdCBiZSB0cnVzdGVkLCB1 c2UgZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbi4gICovCisgICAgICAgIGFib3J0ICgpOwor ICAgIH0KKworIyBpZiBIQVZFX0FDTFZfSAorICBhY2x2X2NvdW50ID0gYWNsICgoY2hhciAq KSBzcmNfbmFtZSwgQUNMX0dFVCwgTkFDTFZFTlRSSUVTLCBhY2x2X2VudHJpZXMpOworCisg IGlmIChhY2x2X2NvdW50IDwgMCkKKyAgICB7CisgICAgICBpZiAoZXJybm8gPT0gRU5PU1lT IHx8IGVycm5vID09IEVPUE5PVFNVUFAgfHwgZXJybm8gPT0gRUlOVkFMKQorICAgICAgICBj b3VudCA9IDA7CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiAtMjsKKyAgICB9CisgIGVs c2UgaWYgKGFjbHZfY291bnQgPiAwKQorICAgIHsKKyAgICAgIGlmIChhY2x2X2NvdW50ID4g TkFDTFZFTlRSSUVTKQorICAgICAgICAvKiBJZiBOQUNMVkVOVFJJRVMgY2Fubm90IGJlIHRy dXN0ZWQsIHVzZSBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uLiAgKi8KKyAgICAgICAgYWJv cnQgKCk7CisgICAgfQorIyBlbmRpZgorCisgIGlmIChjb3VudCA9PSAwKQorIyBpZiBIQVZF X0FDTFZfSAorICAgIGlmIChhY2x2X2NvdW50ID09IDApCisjIGVuZGlmCisgICAgICByZXR1 cm4gcXNldF9hY2wgKGRzdF9uYW1lLCBkZXN0X2Rlc2MsIG1vZGUpOworCisgIGRpZF9jaG1v ZCA9IDA7IC8qIHNldCB0byAxIG9uY2UgdGhlIG1vZGUgYml0cyBpbiAwNzc3IGhhdmUgYmVl biBzZXQgKi8KKyAgc2F2ZWRfZXJybm8gPSAwOyAvKiB0aGUgZmlyc3Qgbm9uLWlnbm9yYWJs ZSBlcnJvciBjb2RlICovCisKKyAgaWYgKGNvdW50ID4gMCkKKyAgICB7CisgICAgICByZXQg PSAoZGVzdF9kZXNjICE9IC0xCisgICAgICAgICAgICAgPyBmc2V0YWNsIChkZXN0X2Rlc2Ms IGNvdW50LCBlbnRyaWVzKQorICAgICAgICAgICAgIDogc2V0YWNsIChkc3RfbmFtZSwgY291 bnQsIGVudHJpZXMpKTsKKyAgICAgIGlmIChyZXQgPCAwICYmIHNhdmVkX2Vycm5vID09IDAp CisgICAgICAgIHsKKyAgICAgICAgICBzYXZlZF9lcnJubyA9IGVycm5vOworICAgICAgICAg IGlmIChlcnJubyA9PSBFTk9TWVMgfHwgZXJybm8gPT0gRU9QTk9UU1VQUCB8fCBlcnJubyA9 PSBFTk9UU1VQKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdCBz b3VyY2Vfc3RhdGJ1ZjsKKworICAgICAgICAgICAgICBpZiAoKHNvdXJjZV9kZXNjICE9IC0x CisgICAgICAgICAgICAgICAgICAgPyBmc3RhdCAoc291cmNlX2Rlc2MsICZzb3VyY2Vfc3Rh dGJ1ZikKKyAgICAgICAgICAgICAgICAgICA6IHN0YXQgKHNyY19uYW1lLCAmc291cmNlX3N0 YXRidWYpKSA9PSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGlm ICghYWNsX25vbnRyaXZpYWwgKGNvdW50LCBlbnRyaWVzLCAmc291cmNlX3N0YXRidWYpKQor ICAgICAgICAgICAgICAgICAgICBzYXZlZF9lcnJubyA9IDA7CisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2F2ZWRfZXJybm8gPSBl cnJubzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBk aWRfY2htb2QgPSAxOworICAgIH0KKworIyBpZiBIQVZFX0FDTFZfSAorICBpZiAoYWNsdl9j b3VudCA+IDApCisgICAgeworICAgICAgcmV0ID0gYWNsICgoY2hhciAqKSBkc3RfbmFtZSwg QUNMX1NFVCwgYWNsdl9jb3VudCwgYWNsdl9lbnRyaWVzKTsKKyAgICAgIGlmIChyZXQgPCAw ICYmIHNhdmVkX2Vycm5vID09IDApCisgICAgICAgIHsKKyAgICAgICAgICBzYXZlZF9lcnJu byA9IGVycm5vOworICAgICAgICAgIGlmIChlcnJubyA9PSBFTk9TWVMgfHwgZXJybm8gPT0g RU9QTk9UU1VQUCB8fCBlcnJubyA9PSBFSU5WQUwpCisgICAgICAgICAgICB7CisgICAgICAg ICAgICAgIGlmICghYWNsdl9ub250cml2aWFsIChhY2x2X2NvdW50LCBhY2x2X2VudHJpZXMp KQorICAgICAgICAgICAgICAgIHNhdmVkX2Vycm5vID0gMDsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBkaWRfY2htb2QgPSAxOworICAgIH0KKyMg ZW5kaWYKKworICBpZiAoZGlkX2NobW9kIDw9ICgobW9kZSAmIChTX0lTVUlEIHwgU19JU0dJ RCB8IFNfSVNWVFgpKSA/IDEgOiAwKSkKKyAgICB7CisgICAgICAvKiBXZSBkaWQgbm90IGNh bGwgY2htb2Qgc28gZmFyLCBhbmQgc3BlY2lhbCBiaXRzIGFyZSB0byBiZSBzZXQgd2hpY2gK KyAgICAgICAgIGRvbid0IGZpdCBpbnRvIEFDTHMuICAqLworCisgICAgICBpZiAoY2htb2Rf b3JfZmNobW9kIChkc3RfbmFtZSwgZGVzdF9kZXNjLCBtb2RlKSAhPSAwKQorICAgICAgICB7 CisgICAgICAgICAgaWYgKHNhdmVkX2Vycm5vID09IDApCisgICAgICAgICAgICBzYXZlZF9l cnJubyA9IGVycm5vOworICAgICAgICB9CisgICAgfQorCisgIGlmIChzYXZlZF9lcnJubykK KyAgICB7CisgICAgICBlcnJubyA9IHNhdmVkX2Vycm5vOworICAgICAgcmV0dXJuIC0xOwor ICAgIH0KKyAgcmV0dXJuIDA7CisKKyNlbGlmIFVTRV9BQ0wgJiYgSEFWRV9BQ0xYX0dFVCAm JiAwIC8qIEFJWCAqLworCisgIC8qIFRPRE8gKi8KKworI2VsaWYgVVNFX0FDTCAmJiBIQVZF X1NUQVRBQ0wgLyogb2xkZXIgQUlYICovCisKKyAgdW5pb24geyBzdHJ1Y3QgYWNsIGE7IGNo YXIgcm9vbVs0MDk2XTsgfSB1OworICBpbnQgcmV0OworCisgIGlmICgoc291cmNlX2Rlc2Mg IT0gLTEKKyAgICAgICA/IGZzdGF0YWNsIChzb3VyY2VfZGVzYywgU1RYX05PUk1BTCwgJnUu YSwgc2l6ZW9mICh1KSkKKyAgICAgICA6IHN0YXRhY2wgKHNyY19uYW1lLCBTVFhfTk9STUFM LCAmdS5hLCBzaXplb2YgKHUpKSkKKyAgICAgIDwgMCkKKyAgICByZXR1cm4gLTI7CisKKyAg cmV0ID0gKGRlc3RfZGVzYyAhPSAtMQorICAgICAgICAgPyBmY2hhY2wgKGRlc3RfZGVzYywg JnUuYSwgdS5hLmFjbF9sZW4pCisgICAgICAgICA6IGNoYWNsIChkc3RfbmFtZSwgJnUuYSwg dS5hLmFjbF9sZW4pKTsKKyAgaWYgKHJldCA8IDApCisgICAgeworICAgICAgaW50IHNhdmVk X2Vycm5vID0gZXJybm87CisKKyAgICAgIGNobW9kX29yX2ZjaG1vZCAoZHN0X25hbWUsIGRl c3RfZGVzYywgbW9kZSk7CisgICAgICBlcnJubyA9IHNhdmVkX2Vycm5vOworICAgICAgcmV0 dXJuIC0xOworICAgIH0KKworICAvKiBObyBuZWVkIHRvIGNhbGwgY2htb2Rfb3JfZmNobW9k IGF0IHRoaXMgcG9pbnQsIHNpbmNlIHRoZSBtb2RlIGJpdHMKKyAgICAgU19JU1VJRCwgU19J U0dJRCwgU19JU1ZUWCBhcmUgYWxzbyBzdG9yZWQgaW4gdGhlIEFDTC4gICovCisKKyAgcmV0 dXJuIDA7CisKKyNlbGlmIFVTRV9BQ0wgJiYgSEFWRV9BQ0xTT1JUIC8qIE5vblN0b3AgS2Vy bmVsICovCisKKyAgc3RydWN0IGFjbCBlbnRyaWVzW05BQ0xFTlRSSUVTXTsKKyAgaW50IGNv dW50OworICBpbnQgcmV0OworCisgIGNvdW50ID0gYWNsICgoY2hhciAqKSBzcmNfbmFtZSwg QUNMX0dFVCwgTkFDTEVOVFJJRVMsIGVudHJpZXMpOworCisgIGlmIChjb3VudCA8IDApCisg ICAgeworICAgICAgaWYgKDApCisgICAgICAgIGNvdW50ID0gMDsKKyAgICAgIGVsc2UKKyAg ICAgICAgcmV0dXJuIC0yOworICAgIH0KKyAgZWxzZSBpZiAoY291bnQgPiAwKQorICAgIHsK KyAgICAgIGlmIChjb3VudCA+IE5BQ0xFTlRSSUVTKQorICAgICAgICAvKiBJZiBOQUNMRU5U UklFUyBjYW5ub3QgYmUgdHJ1c3RlZCwgdXNlIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24u ICAqLworICAgICAgICBhYm9ydCAoKTsKKyAgICB9CisKKyAgaWYgKGNvdW50ID09IDApCisg ICAgcmV0dXJuIHFzZXRfYWNsIChkc3RfbmFtZSwgZGVzdF9kZXNjLCBtb2RlKTsKKworICBy ZXQgPSBhY2wgKChjaGFyICopIGRzdF9uYW1lLCBBQ0xfU0VULCBjb3VudCwgZW50cmllcyk7 CisgIGlmIChyZXQgPCAwKQorICAgIHsKKyAgICAgIGludCBzYXZlZF9lcnJubyA9IGVycm5v OworCisgICAgICBpZiAoMCkKKyAgICAgICAgeworICAgICAgICAgIGlmICghYWNsX25vbnRy aXZpYWwgKGNvdW50LCBlbnRyaWVzKSkKKyAgICAgICAgICAgIHJldHVybiBjaG1vZF9vcl9m Y2htb2QgKGRzdF9uYW1lLCBkZXN0X2Rlc2MsIG1vZGUpOworICAgICAgICB9CisKKyAgICAg IGNobW9kX29yX2ZjaG1vZCAoZHN0X25hbWUsIGRlc3RfZGVzYywgbW9kZSk7CisgICAgICBl cnJubyA9IHNhdmVkX2Vycm5vOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICBpZiAo bW9kZSAmIChTX0lTVUlEIHwgU19JU0dJRCB8IFNfSVNWVFgpKQorICAgIHsKKyAgICAgIC8q IFdlIGRpZCBub3QgY2FsbCBjaG1vZCBzbyBmYXIsIGFuZCBlaXRoZXIgdGhlIG1vZGUgYW5k IHRoZSBBQ0wgYXJlCisgICAgICAgICBzZXBhcmF0ZSBvciBzcGVjaWFsIGJpdHMgYXJlIHRv IGJlIHNldCB3aGljaCBkb24ndCBmaXQgaW50byBBQ0xzLiAgKi8KKworICAgICAgcmV0dXJu IGNobW9kX29yX2ZjaG1vZCAoZHN0X25hbWUsIGRlc3RfZGVzYywgbW9kZSk7CisgICAgfQor ICByZXR1cm4gMDsKKworI2Vsc2UKKworICByZXR1cm4gcXNldF9hY2wgKGRzdF9uYW1lLCBk ZXN0X2Rlc2MsIG1vZGUpOworCisjZW5kaWYKK30KCj09PSBhZGRlZCBmaWxlICdsaWIvcXNl dC1hY2wuYycKLS0tIGxpYi9xc2V0LWFjbC5jCTE5NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDAK KysrIGxpYi9xc2V0LWFjbC5jCTIwMTMtMDQtMjggMDA6NDY6MzYgKzAwMDAKQEAgLTAsMCAr MSw2NzYgQEAKKy8qIHFzZXQtYWNsLmMgLSBzZXQgYWNjZXNzIGNvbnRyb2wgbGlzdCBlcXVp dmFsZW50IHRvIGEgbW9kZQorCisgICBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMywgMjAwNS0y MDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJ ZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyAgIFdyaXR0 ZW4gYnkgUGF1bCBFZ2dlcnQgYW5kIEFuZHJlYXMgR3J1ZW5iYWNoZXIsIGFuZCBCcnVubyBI YWlibGUuICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNkZWZpbmUgQUNMX0lOVEVS TkFMX0lOTElORSBfR0xfRVhURVJOX0lOTElORQorCisjaW5jbHVkZSAiYWNsLmgiCisKKyNp bmNsdWRlICJhY2wtaW50ZXJuYWwuaCIKKworCisvKiBJZiBERVNDIGlzIGEgdmFsaWQgZmls ZSBkZXNjcmlwdG9yIHVzZSBmY2htb2QgdG8gY2hhbmdlIHRoZQorICAgZmlsZSdzIG1vZGUg dG8gTU9ERSBvbiBzeXN0ZW1zIHRoYXQgaGF2ZSBmY2htb2QuIE9uIHN5c3RlbXMKKyAgIHRo YXQgZG9uJ3QgaGF2ZSBmY2htb2QgYW5kIGlmIERFU0MgaXMgaW52YWxpZCwgdXNlIGNobW9k IG9uCisgICBOQU1FIGluc3RlYWQuCisgICBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLiAgUmV0 dXJuIC0xIGFuZCBzZXQgZXJybm8gdXBvbiBmYWlsdXJlLiAgKi8KKworaW50CitjaG1vZF9v cl9mY2htb2QgKGNvbnN0IGNoYXIgKm5hbWUsIGludCBkZXNjLCBtb2RlX3QgbW9kZSkKK3sK KyAgaWYgKEhBVkVfRkNITU9EICYmIGRlc2MgIT0gLTEpCisgICAgcmV0dXJuIGZjaG1vZCAo ZGVzYywgbW9kZSk7CisgIGVsc2UKKyAgICByZXR1cm4gY2htb2QgKG5hbWUsIG1vZGUpOwor fQorCisvKiBTZXQgdGhlIGFjY2VzcyBjb250cm9sIGxpc3RzIG9mIGEgZmlsZS4gSWYgREVT QyBpcyBhIHZhbGlkIGZpbGUKKyAgIGRlc2NyaXB0b3IsIHVzZSBmaWxlIGRlc2NyaXB0b3Ig b3BlcmF0aW9ucyB3aGVyZSBhdmFpbGFibGUsIGVsc2UgdXNlCisgICBmaWxlbmFtZSBiYXNl ZCBvcGVyYXRpb25zIG9uIE5BTUUuICBJZiBhY2Nlc3MgY29udHJvbCBsaXN0cyBhcmUgbm90 CisgICBhdmFpbGFibGUsIGZjaG1vZCB0aGUgdGFyZ2V0IGZpbGUgdG8gTU9ERS4gIEFsc28g c2V0cyB0aGUKKyAgIG5vbi1wZXJtaXNzaW9uIGJpdHMgb2YgdGhlIGRlc3RpbmF0aW9uIGZp bGUgKFNfSVNVSUQsIFNfSVNHSUQsIFNfSVNWVFgpCisgICB0byB0aG9zZSBmcm9tIE1PREUg aWYgYW55IGFyZSBzZXQuCisgICBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLiAgUmV0dXJuIC0x IGFuZCBzZXQgZXJybm8gdXBvbiBmYWlsdXJlLiAgKi8KKworaW50Citxc2V0X2FjbCAoY2hh ciBjb25zdCAqbmFtZSwgaW50IGRlc2MsIG1vZGVfdCBtb2RlKQoreworI2lmIFVTRV9BQ0wK KyMgaWYgSEFWRV9BQ0xfR0VUX0ZJTEUKKyAgLyogUE9TSVggMTAwMy4xZSBkcmFmdCAxNyAo YWJhbmRvbmVkKSBzcGVjaWZpYyB2ZXJzaW9uLiAgKi8KKyAgLyogTGludXgsIEZyZWVCU0Qs IE1hYyBPUyBYLCBJUklYLCBUcnU2NCAqLworIyAgaWYgIUhBVkVfQUNMX1RZUEVfRVhURU5E RUQKKyAgLyogTGludXgsIEZyZWVCU0QsIElSSVgsIFRydTY0ICovCisKKyAgLyogV2UgbXVz dCBhbHNvIGhhdmUgYWNsX2Zyb21fdGV4dCBhbmQgYWNsX2RlbGV0ZV9kZWZfZmlsZS4KKyAg ICAgKGFjbF9kZWxldGVfZGVmX2ZpbGUgY291bGQgYmUgZW11bGF0ZWQgd2l0aCBhY2xfaW5p dCBmb2xsb3dlZAorICAgICAgYnkgYWNsX3NldF9maWxlLCBidXQgYWNsX3NldF9maWxlIHdp dGggYW4gZW1wdHkgYWNsIGlzCisgICAgICB1bnNwZWNpZmllZC4pICAqLworCisjICAgaWZu ZGVmIEhBVkVfQUNMX0ZST01fVEVYVAorIyAgICBlcnJvciBNdXN0IGhhdmUgYWNsX2Zyb21f dGV4dCAoc2VlIFBPU0lYIDEwMDMuMWUgZHJhZnQgMTcpLgorIyAgIGVuZGlmCisjICAgaWZu ZGVmIEhBVkVfQUNMX0RFTEVURV9ERUZfRklMRQorIyAgICBlcnJvciBNdXN0IGhhdmUgYWNs X2RlbGV0ZV9kZWZfZmlsZSAoc2VlIFBPU0lYIDEwMDMuMWUgZHJhZnQgMTcpLgorIyAgIGVu ZGlmCisKKyAgYWNsX3QgYWNsOworICBpbnQgcmV0OworCisgIGlmIChIQVZFX0FDTF9GUk9N X01PREUpIC8qIExpbnV4ICovCisgICAgeworICAgICAgYWNsID0gYWNsX2Zyb21fbW9kZSAo bW9kZSk7CisgICAgICBpZiAoIWFjbCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAg ZWxzZSAvKiBGcmVlQlNELCBJUklYLCBUcnU2NCAqLworICAgIHsKKyAgICAgIC8qIElmIHdl IHdlcmUgdG8gY3JlYXRlIHRoZSBBQ0wgdXNpbmcgdGhlIGZ1bmN0aW9ucyBhY2xfaW5pdCgp LAorICAgICAgICAgYWNsX2NyZWF0ZV9lbnRyeSgpLCBhY2xfc2V0X3RhZ190eXBlKCksIGFj bF9zZXRfcXVhbGlmaWVyKCksCisgICAgICAgICBhY2xfZ2V0X3Blcm1zZXQoKSwgYWNsX2Ns ZWFyX3Blcm1bc10oKSwgYWNsX2FkZF9wZXJtKCksIHdlCisgICAgICAgICB3b3VsZCBuZWVk IHRvIGNyZWF0ZSBhIHF1YWxpZmllci4gIEkgZG9uJ3Qga25vdyBob3cgdG8gZG8gdGhpcy4K KyAgICAgICAgIFNvIGNyZWF0ZSBpdCB1c2luZyBhY2xfZnJvbV90ZXh0KCkuICAqLworCisj ICAgaWYgSEFWRV9BQ0xfRlJFRV9URVhUIC8qIFRydTY0ICovCisgICAgICBjaGFyIGFjbF90 ZXh0W10gPSAidTo6LS0tLGc6Oi0tLSxvOjotLS0sIjsKKyMgICBlbHNlIC8qIEZyZWVCU0Qs IElSSVggKi8KKyAgICAgIGNoYXIgYWNsX3RleHRbXSA9ICJ1OjotLS0sZzo6LS0tLG86Oi0t LSI7CisjICAgZW5kaWYKKworICAgICAgaWYgKG1vZGUgJiBTX0lSVVNSKSBhY2xfdGV4dFsg M10gPSAncic7CisgICAgICBpZiAobW9kZSAmIFNfSVdVU1IpIGFjbF90ZXh0WyA0XSA9ICd3 JzsKKyAgICAgIGlmIChtb2RlICYgU19JWFVTUikgYWNsX3RleHRbIDVdID0gJ3gnOworICAg ICAgaWYgKG1vZGUgJiBTX0lSR1JQKSBhY2xfdGV4dFsxMF0gPSAncic7CisgICAgICBpZiAo bW9kZSAmIFNfSVdHUlApIGFjbF90ZXh0WzExXSA9ICd3JzsKKyAgICAgIGlmIChtb2RlICYg U19JWEdSUCkgYWNsX3RleHRbMTJdID0gJ3gnOworICAgICAgaWYgKG1vZGUgJiBTX0lST1RI KSBhY2xfdGV4dFsxN10gPSAncic7CisgICAgICBpZiAobW9kZSAmIFNfSVdPVEgpIGFjbF90 ZXh0WzE4XSA9ICd3JzsKKyAgICAgIGlmIChtb2RlICYgU19JWE9USCkgYWNsX3RleHRbMTld ID0gJ3gnOworCisgICAgICBhY2wgPSBhY2xfZnJvbV90ZXh0IChhY2xfdGV4dCk7CisgICAg ICBpZiAoIWFjbCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgaWYgKEhBVkVfQUNM X1NFVF9GRCAmJiBkZXNjICE9IC0xKQorICAgIHJldCA9IGFjbF9zZXRfZmQgKGRlc2MsIGFj bCk7CisgIGVsc2UKKyAgICByZXQgPSBhY2xfc2V0X2ZpbGUgKG5hbWUsIEFDTF9UWVBFX0FD Q0VTUywgYWNsKTsKKyAgaWYgKHJldCAhPSAwKQorICAgIHsKKyAgICAgIGludCBzYXZlZF9l cnJubyA9IGVycm5vOworICAgICAgYWNsX2ZyZWUgKGFjbCk7CisgICAgICBpZiAoISBhY2xf ZXJybm9fdmFsaWQgKGVycm5vKSkKKyAgICAgICAgcmV0dXJuIGNobW9kX29yX2ZjaG1vZCAo bmFtZSwgZGVzYywgbW9kZSk7CisgICAgICBlcnJubyA9IHNhdmVkX2Vycm5vOworICAgICAg cmV0dXJuIC0xOworICAgIH0KKyAgZWxzZQorICAgIGFjbF9mcmVlIChhY2wpOworCisgIGlm IChTX0lTRElSIChtb2RlKSAmJiBhY2xfZGVsZXRlX2RlZl9maWxlIChuYW1lKSkKKyAgICBy ZXR1cm4gLTE7CisKKyAgaWYgKCFNT0RFX0lOU0lERV9BQ0wgfHwgKG1vZGUgJiAoU19JU1VJ RCB8IFNfSVNHSUQgfCBTX0lTVlRYKSkpCisgICAgeworICAgICAgLyogV2UgZGlkIG5vdCBj YWxsIGNobW9kIHNvIGZhciwgYW5kIGVpdGhlciB0aGUgbW9kZSBhbmQgdGhlIEFDTCBhcmUK KyAgICAgICAgIHNlcGFyYXRlIG9yIHNwZWNpYWwgYml0cyBhcmUgdG8gYmUgc2V0IHdoaWNo IGRvbid0IGZpdCBpbnRvIEFDTHMuICAqLworICAgICAgcmV0dXJuIGNobW9kX29yX2ZjaG1v ZCAobmFtZSwgZGVzYywgbW9kZSk7CisgICAgfQorICByZXR1cm4gMDsKKworIyAgZWxzZSAv KiBIQVZFX0FDTF9UWVBFX0VYVEVOREVEICovCisgIC8qIE1hYyBPUyBYICovCisKKyAgLyog T24gTWFjIE9TIFgsICBhY2xfZ2V0X2ZpbGUgKG5hbWUsIEFDTF9UWVBFX0FDQ0VTUykKKyAg ICAgYW5kICAgICAgICAgICBhY2xfZ2V0X2ZpbGUgKG5hbWUsIEFDTF9UWVBFX0RFRkFVTFQp CisgICAgIGFsd2F5cyByZXR1cm4gTlVMTCAvIEVJTlZBTC4gIFlvdSBoYXZlIHRvIHVzZQor ICAgICAgICAgICAgICAgICAgIGFjbF9nZXRfZmlsZSAobmFtZSwgQUNMX1RZUEVfRVhURU5E RUQpCisgICAgIG9yICAgICAgICAgICAgYWNsX2dldF9mZCAob3BlbiAobmFtZSwgLi4uKSkK KyAgICAgdG8gcmV0cmlldmUgYW4gQUNMLgorICAgICBPbiB0aGUgb3RoZXIgaGFuZCwKKyAg ICAgICAgICAgICAgICAgICBhY2xfc2V0X2ZpbGUgKG5hbWUsIEFDTF9UWVBFX0FDQ0VTUywg YWNsKQorICAgICBhbmQgICAgICAgICAgIGFjbF9zZXRfZmlsZSAobmFtZSwgQUNMX1RZUEVf REVGQVVMVCwgYWNsKQorICAgICBoYXZlIHRoZSBzYW1lIGVmZmVjdCBhcworICAgICAgICAg ICAgICAgICAgIGFjbF9zZXRfZmlsZSAobmFtZSwgQUNMX1RZUEVfRVhURU5ERUQsIGFjbCk6 CisgICAgIEVhY2ggb2YgdGhlc2UgY2FsbHMgc2V0cyB0aGUgZmlsZSdzIEFDTC4gICovCisK KyAgYWNsX3QgYWNsOworICBpbnQgcmV0OworCisgIC8qIFJlbW92ZSB0aGUgQUNMIGlmIHRo ZSBmaWxlIGhhcyBBQ0xzLiAgKi8KKyAgaWYgKEhBVkVfQUNMX0dFVF9GRCAmJiBkZXNjICE9 IC0xKQorICAgIGFjbCA9IGFjbF9nZXRfZmQgKGRlc2MpOworICBlbHNlCisgICAgYWNsID0g YWNsX2dldF9maWxlIChuYW1lLCBBQ0xfVFlQRV9FWFRFTkRFRCk7CisgIGlmIChhY2wpCisg ICAgeworICAgICAgYWNsX2ZyZWUgKGFjbCk7CisKKyAgICAgIGFjbCA9IGFjbF9pbml0ICgw KTsKKyAgICAgIGlmIChhY2wpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoSEFWRV9BQ0xf U0VUX0ZEICYmIGRlc2MgIT0gLTEpCisgICAgICAgICAgICByZXQgPSBhY2xfc2V0X2ZkIChk ZXNjLCBhY2wpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldCA9IGFjbF9zZXRf ZmlsZSAobmFtZSwgQUNMX1RZUEVfRVhURU5ERUQsIGFjbCk7CisgICAgICAgICAgaWYgKHJl dCAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpbnQgc2F2ZWRfZXJybm8g PSBlcnJubzsKKyAgICAgICAgICAgICAgYWNsX2ZyZWUgKGFjbCk7CisgICAgICAgICAgICAg IGlmICghIGFjbF9lcnJub192YWxpZCAoc2F2ZWRfZXJybm8pKQorICAgICAgICAgICAgICAg IHJldHVybiBjaG1vZF9vcl9mY2htb2QgKG5hbWUsIGRlc2MsIG1vZGUpOworICAgICAgICAg ICAgICBlcnJubyA9IHNhdmVkX2Vycm5vOworICAgICAgICAgICAgICByZXR1cm4gLTE7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgYWNsX2ZyZWUgKGFjbCk7CisgICAgICAgIH0KKyAg ICB9CisKKyAgLyogU2luY2UgIU1PREVfSU5TSURFX0FDTCwgd2UgaGF2ZSB0byBjYWxsIGNo bW9kIGV4cGxpY2l0bHkuICAqLworICByZXR1cm4gY2htb2Rfb3JfZmNobW9kIChuYW1lLCBk ZXNjLCBtb2RlKTsKKyMgIGVuZGlmCisKKyMgZWxpZiBIQVZFX0ZBQ0wgJiYgZGVmaW5lZCBH RVRBQ0wgLyogU29sYXJpcywgQ3lnd2luLCBub3QgSFAtVVggKi8KKworICBpbnQgZG9uZV9z ZXRhY2wgPSAwOworCisjICBpZmRlZiBBQ0VfR0VUQUNMCisgIC8qIFNvbGFyaXMgYWxzbyBo YXMgYSBkaWZmZXJlbnQgdmFyaWFudCBvZiBBQ0xzLCB1c2VkIGluIFpGUyBhbmQgTkZTdjQK KyAgICAgZmlsZSBzeXN0ZW1zICh3aGVyZWFzIHRoZSBvdGhlciBvbmVzIGFyZSB1c2VkIGlu IFVGUyBmaWxlIHN5c3RlbXMpLiAgKi8KKworICAvKiBUaGUgZmxhZ3MgaW4gdGhlIGFjZV90 IHN0cnVjdHVyZSBjaGFuZ2VkIGluIGEgYmluYXJ5IGluY29tcGF0aWJsZSB3YXkKKyAgICAg d2hlbiBBQ0xfTk9fVFJJVklBTCBldGMuIHdlcmUgaW50cm9kdWNlZCBpbiA8c3lzL2FjbC5o PiB2ZXJzaW9uIDEuMTUuCisgICAgIEhvdyB0byBkaXN0aW5ndWlzaCB0aGUgdHdvIGNvbnZl bnRpb25zIGF0IHJ1bnRpbWU/CisgICAgIFdlIGZldGNoIHRoZSBleGlzdGluZyBBQ0wuICBJ biB0aGUgb2xkIGNvbnZlbnRpb24sIHVzdWFsbHkgdGhyZWUgQUNFcyBoYXZlCisgICAgIGFf ZmxhZ3MgPSBBQ0VfT1dORVIgLyBBQ0VfR1JPVVAgLyBBQ0VfT1RIRVIsIGluIHRoZSByYW5n ZSAweDAxMDAuLjB4MDQwMC4KKyAgICAgSW4gdGhlIG5ldyBjb252ZW50aW9uLCB0aGVzZSB2 YWx1ZXMgYXJlIG5vdCB1c2VkLiAgKi8KKyAgaW50IGNvbnZlbnRpb247CisKKyAgeworICAg IC8qIEluaXRpYWxseSwgdHJ5IHRvIHJlYWQgdGhlIGVudHJpZXMgaW50byBhIHN0YWNrLWFs bG9jYXRlZCBidWZmZXIuCisgICAgICAgVXNlIG1hbGxvYyBpZiBpdCBkb2VzIG5vdCBmaXQu ICAqLworICAgIGVudW0KKyAgICAgIHsKKyAgICAgICAgYWxsb2NfaW5pdCA9IDQwMDAgLyBz aXplb2YgKGFjZV90KSwgLyogPj0gMyAqLworICAgICAgICBhbGxvY19tYXggPSBNSU4gKElO VF9NQVgsIFNJWkVfTUFYIC8gc2l6ZW9mIChhY2VfdCkpCisgICAgICB9OworICAgIGFjZV90 IGJ1ZlthbGxvY19pbml0XTsKKyAgICBzaXplX3QgYWxsb2MgPSBhbGxvY19pbml0OworICAg IGFjZV90ICplbnRyaWVzID0gYnVmOworICAgIGFjZV90ICptYWxsb2NlZCA9IE5VTEw7Cisg ICAgaW50IGNvdW50OworCisgICAgZm9yICg7OykKKyAgICAgIHsKKyAgICAgICAgY291bnQg PSAoZGVzYyAhPSAtMQorICAgICAgICAgICAgICAgICA/IGZhY2wgKGRlc2MsIEFDRV9HRVRB Q0wsIGFsbG9jLCBlbnRyaWVzKQorICAgICAgICAgICAgICAgICA6IGFjbCAobmFtZSwgQUNF X0dFVEFDTCwgYWxsb2MsIGVudHJpZXMpKTsKKyAgICAgICAgaWYgKGNvdW50IDwgMCAmJiBl cnJubyA9PSBFTk9TUEMpCisgICAgICAgICAgeworICAgICAgICAgICAgLyogSW5jcmVhc2Ug dGhlIHNpemUgb2YgdGhlIGJ1ZmZlci4gICovCisgICAgICAgICAgICBmcmVlIChtYWxsb2Nl ZCk7CisgICAgICAgICAgICBpZiAoYWxsb2MgPiBhbGxvY19tYXggLyAyKQorICAgICAgICAg ICAgICB7CisgICAgICAgICAgICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgICAgICAgICAg ICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBhbGxvYyA9IDIg KiBhbGxvYzsgLyogPD0gYWxsb2NfbWF4ICovCisgICAgICAgICAgICBlbnRyaWVzID0gbWFs bG9jZWQgPSAoYWNlX3QgKikgbWFsbG9jIChhbGxvYyAqIHNpemVvZiAoYWNlX3QpKTsKKyAg ICAgICAgICAgIGlmIChlbnRyaWVzID09IE5VTEwpCisgICAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgICBlcnJubyA9IEVOT01FTTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7 CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIH0K KyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICBpZiAoY291bnQgPD0gMCkKKyAgICAg IGNvbnZlbnRpb24gPSAtMTsKKyAgICBlbHNlCisgICAgICB7CisgICAgICAgIGludCBpOwor CisgICAgICAgIGNvbnZlbnRpb24gPSAwOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291 bnQ7IGkrKykKKyAgICAgICAgICBpZiAoZW50cmllc1tpXS5hX2ZsYWdzICYgKE9MRF9BQ0Vf T1dORVIgfCBPTERfQUNFX0dST1VQIHwgT0xEX0FDRV9PVEhFUikpCisgICAgICAgICAgICB7 CisgICAgICAgICAgICAgIGNvbnZlbnRpb24gPSAxOworICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgIH0KKyAgICAgIH0KKyAgICBmcmVlIChtYWxsb2NlZCk7CisgIH0KKwor ICBpZiAoY29udmVudGlvbiA+PSAwKQorICAgIHsKKyAgICAgIGFjZV90IGVudHJpZXNbNl07 CisgICAgICBpbnQgY291bnQ7CisgICAgICBpbnQgcmV0OworCisgICAgICBpZiAoY29udmVu dGlvbikKKyAgICAgICAgeworICAgICAgICAgIC8qIFJ1bm5pbmcgb24gU29sYXJpcyAxMC4g ICovCisgICAgICAgICAgZW50cmllc1swXS5hX3R5cGUgPSBPTERfQUxMT1c7CisgICAgICAg ICAgZW50cmllc1swXS5hX2ZsYWdzID0gT0xEX0FDRV9PV05FUjsKKyAgICAgICAgICBlbnRy aWVzWzBdLmFfd2hvID0gMDsgLyogaXJyZWxldmFudCAqLworICAgICAgICAgIGVudHJpZXNb MF0uYV9hY2Nlc3NfbWFzayA9IChtb2RlID4+IDYpICYgNzsKKyAgICAgICAgICBlbnRyaWVz WzFdLmFfdHlwZSA9IE9MRF9BTExPVzsKKyAgICAgICAgICBlbnRyaWVzWzFdLmFfZmxhZ3Mg PSBPTERfQUNFX0dST1VQOworICAgICAgICAgIGVudHJpZXNbMV0uYV93aG8gPSAwOyAvKiBp cnJlbGV2YW50ICovCisgICAgICAgICAgZW50cmllc1sxXS5hX2FjY2Vzc19tYXNrID0gKG1v ZGUgPj4gMykgJiA3OworICAgICAgICAgIGVudHJpZXNbMl0uYV90eXBlID0gT0xEX0FMTE9X OworICAgICAgICAgIGVudHJpZXNbMl0uYV9mbGFncyA9IE9MRF9BQ0VfT1RIRVI7CisgICAg ICAgICAgZW50cmllc1syXS5hX3dobyA9IDA7CisgICAgICAgICAgZW50cmllc1syXS5hX2Fj Y2Vzc19tYXNrID0gbW9kZSAmIDc7CisgICAgICAgICAgY291bnQgPSAzOworICAgICAgICB9 CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvKiBSdW5uaW5nIG9uIFNvbGFy aXMgMTAgKG5ld2VyIHZlcnNpb24pIG9yIFNvbGFyaXMgMTEuCisgICAgICAgICAgICAgVGhl IGRldGFpbHMgaGVyZSB3ZXJlIGZvdW5kIHRocm91Z2ggIi9iaW4vbHMgLWx2ZCBzb21lZmls ZXMiLiAgKi8KKyAgICAgICAgICBlbnRyaWVzWzBdLmFfdHlwZSA9IE5FV19BQ0VfQUNDRVNT X0RFTklFRF9BQ0VfVFlQRTsKKyAgICAgICAgICBlbnRyaWVzWzBdLmFfZmxhZ3MgPSBORVdf QUNFX09XTkVSOworICAgICAgICAgIGVudHJpZXNbMF0uYV93aG8gPSAwOyAvKiBpcnJlbGV2 YW50ICovCisgICAgICAgICAgZW50cmllc1swXS5hX2FjY2Vzc19tYXNrID0gMDsKKyAgICAg ICAgICBlbnRyaWVzWzFdLmFfdHlwZSA9IE5FV19BQ0VfQUNDRVNTX0FMTE9XRURfQUNFX1RZ UEU7CisgICAgICAgICAgZW50cmllc1sxXS5hX2ZsYWdzID0gTkVXX0FDRV9PV05FUjsKKyAg ICAgICAgICBlbnRyaWVzWzFdLmFfd2hvID0gMDsgLyogaXJyZWxldmFudCAqLworICAgICAg ICAgIGVudHJpZXNbMV0uYV9hY2Nlc3NfbWFzayA9IE5FV19BQ0VfV1JJVEVfTkFNRURfQVRU UlMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5FV19BQ0VfV1JJ VEVfQVRUUklCVVRFUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg TkVXX0FDRV9XUklURV9BQ0wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8IE5FV19BQ0VfV1JJVEVfT1dORVI7CisgICAgICAgICAgaWYgKG1vZGUgJiAwNDAwKQor ICAgICAgICAgICAgZW50cmllc1sxXS5hX2FjY2Vzc19tYXNrIHw9IE5FV19BQ0VfUkVBRF9E QVRBOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVudHJpZXNbMF0uYV9hY2Nlc3Nf bWFzayB8PSBORVdfQUNFX1JFQURfREFUQTsKKyAgICAgICAgICBpZiAobW9kZSAmIDAyMDAp CisgICAgICAgICAgICBlbnRyaWVzWzFdLmFfYWNjZXNzX21hc2sgfD0gTkVXX0FDRV9XUklU RV9EQVRBIHwgTkVXX0FDRV9BUFBFTkRfREFUQTsKKyAgICAgICAgICBlbHNlCisgICAgICAg ICAgICBlbnRyaWVzWzBdLmFfYWNjZXNzX21hc2sgfD0gTkVXX0FDRV9XUklURV9EQVRBIHwg TkVXX0FDRV9BUFBFTkRfREFUQTsKKyAgICAgICAgICBpZiAobW9kZSAmIDAxMDApCisgICAg ICAgICAgICBlbnRyaWVzWzFdLmFfYWNjZXNzX21hc2sgfD0gTkVXX0FDRV9FWEVDVVRFOwor ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVudHJpZXNbMF0uYV9hY2Nlc3NfbWFzayB8 PSBORVdfQUNFX0VYRUNVVEU7CisgICAgICAgICAgZW50cmllc1syXS5hX3R5cGUgPSBORVdf QUNFX0FDQ0VTU19ERU5JRURfQUNFX1RZUEU7CisgICAgICAgICAgZW50cmllc1syXS5hX2Zs YWdzID0gTkVXX0FDRV9HUk9VUCB8IE5FV19BQ0VfSURFTlRJRklFUl9HUk9VUDsKKyAgICAg ICAgICBlbnRyaWVzWzJdLmFfd2hvID0gMDsgLyogaXJyZWxldmFudCAqLworICAgICAgICAg IGVudHJpZXNbMl0uYV9hY2Nlc3NfbWFzayA9IDA7CisgICAgICAgICAgZW50cmllc1szXS5h X3R5cGUgPSBORVdfQUNFX0FDQ0VTU19BTExPV0VEX0FDRV9UWVBFOworICAgICAgICAgIGVu dHJpZXNbM10uYV9mbGFncyA9IE5FV19BQ0VfR1JPVVAgfCBORVdfQUNFX0lERU5USUZJRVJf R1JPVVA7CisgICAgICAgICAgZW50cmllc1szXS5hX3dobyA9IDA7IC8qIGlycmVsZXZhbnQg Ki8KKyAgICAgICAgICBlbnRyaWVzWzNdLmFfYWNjZXNzX21hc2sgPSAwOworICAgICAgICAg IGlmIChtb2RlICYgMDA0MCkKKyAgICAgICAgICAgIGVudHJpZXNbM10uYV9hY2Nlc3NfbWFz ayB8PSBORVdfQUNFX1JFQURfREFUQTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBl bnRyaWVzWzJdLmFfYWNjZXNzX21hc2sgfD0gTkVXX0FDRV9SRUFEX0RBVEE7CisgICAgICAg ICAgaWYgKG1vZGUgJiAwMDIwKQorICAgICAgICAgICAgZW50cmllc1szXS5hX2FjY2Vzc19t YXNrIHw9IE5FV19BQ0VfV1JJVEVfREFUQSB8IE5FV19BQ0VfQVBQRU5EX0RBVEE7CisgICAg ICAgICAgZWxzZQorICAgICAgICAgICAgZW50cmllc1syXS5hX2FjY2Vzc19tYXNrIHw9IE5F V19BQ0VfV1JJVEVfREFUQSB8IE5FV19BQ0VfQVBQRU5EX0RBVEE7CisgICAgICAgICAgaWYg KG1vZGUgJiAwMDEwKQorICAgICAgICAgICAgZW50cmllc1szXS5hX2FjY2Vzc19tYXNrIHw9 IE5FV19BQ0VfRVhFQ1VURTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBlbnRyaWVz WzJdLmFfYWNjZXNzX21hc2sgfD0gTkVXX0FDRV9FWEVDVVRFOworICAgICAgICAgIGVudHJp ZXNbNF0uYV90eXBlID0gTkVXX0FDRV9BQ0NFU1NfREVOSUVEX0FDRV9UWVBFOworICAgICAg ICAgIGVudHJpZXNbNF0uYV9mbGFncyA9IE5FV19BQ0VfRVZFUllPTkU7CisgICAgICAgICAg ZW50cmllc1s0XS5hX3dobyA9IDA7CisgICAgICAgICAgZW50cmllc1s0XS5hX2FjY2Vzc19t YXNrID0gTkVXX0FDRV9XUklURV9OQU1FRF9BVFRSUworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgTkVXX0FDRV9XUklURV9BVFRSSUJVVEVTCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBORVdfQUNFX1dSSVRFX0FDTAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTkVXX0FDRV9XUklURV9PV05FUjsK KyAgICAgICAgICBlbnRyaWVzWzVdLmFfdHlwZSA9IE5FV19BQ0VfQUNDRVNTX0FMTE9XRURf QUNFX1RZUEU7CisgICAgICAgICAgZW50cmllc1s1XS5hX2ZsYWdzID0gTkVXX0FDRV9FVkVS WU9ORTsKKyAgICAgICAgICBlbnRyaWVzWzVdLmFfd2hvID0gMDsKKyAgICAgICAgICBlbnRy aWVzWzVdLmFfYWNjZXNzX21hc2sgPSBORVdfQUNFX1JFQURfTkFNRURfQVRUUlMKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5FV19BQ0VfUkVBRF9BVFRSSUJV VEVTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBORVdfQUNFX1JF QURfQUNMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBORVdfQUNF X1NZTkNIUk9OSVpFOworICAgICAgICAgIGlmIChtb2RlICYgMDAwNCkKKyAgICAgICAgICAg IGVudHJpZXNbNV0uYV9hY2Nlc3NfbWFzayB8PSBORVdfQUNFX1JFQURfREFUQTsKKyAgICAg ICAgICBlbHNlCisgICAgICAgICAgICBlbnRyaWVzWzRdLmFfYWNjZXNzX21hc2sgfD0gTkVX X0FDRV9SRUFEX0RBVEE7CisgICAgICAgICAgaWYgKG1vZGUgJiAwMDAyKQorICAgICAgICAg ICAgZW50cmllc1s1XS5hX2FjY2Vzc19tYXNrIHw9IE5FV19BQ0VfV1JJVEVfREFUQSB8IE5F V19BQ0VfQVBQRU5EX0RBVEE7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZW50cmll c1s0XS5hX2FjY2Vzc19tYXNrIHw9IE5FV19BQ0VfV1JJVEVfREFUQSB8IE5FV19BQ0VfQVBQ RU5EX0RBVEE7CisgICAgICAgICAgaWYgKG1vZGUgJiAwMDAxKQorICAgICAgICAgICAgZW50 cmllc1s1XS5hX2FjY2Vzc19tYXNrIHw9IE5FV19BQ0VfRVhFQ1VURTsKKyAgICAgICAgICBl bHNlCisgICAgICAgICAgICBlbnRyaWVzWzRdLmFfYWNjZXNzX21hc2sgfD0gTkVXX0FDRV9F WEVDVVRFOworICAgICAgICAgIGNvdW50ID0gNjsKKyAgICAgICAgfQorICAgICAgaWYgKGRl c2MgIT0gLTEpCisgICAgICAgIHJldCA9IGZhY2wgKGRlc2MsIEFDRV9TRVRBQ0wsIGNvdW50 LCBlbnRyaWVzKTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmV0ID0gYWNsIChuYW1lLCBBQ0Vf U0VUQUNMLCBjb3VudCwgZW50cmllcyk7CisgICAgICBpZiAocmV0IDwgMCAmJiBlcnJubyAh PSBFSU5WQUwgJiYgZXJybm8gIT0gRU5PVFNVUCkKKyAgICAgICAgeworICAgICAgICAgIGlm IChlcnJubyA9PSBFTk9TWVMpCisgICAgICAgICAgICByZXR1cm4gY2htb2Rfb3JfZmNobW9k IChuYW1lLCBkZXNjLCBtb2RlKTsKKyAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0K KyAgICAgIGlmIChyZXQgPT0gMCkKKyAgICAgICAgZG9uZV9zZXRhY2wgPSAxOworICAgIH0K KyMgIGVuZGlmCisKKyAgaWYgKCFkb25lX3NldGFjbCkKKyAgICB7CisgICAgICBhY2xlbnRf dCBlbnRyaWVzWzNdOworICAgICAgaW50IHJldDsKKworICAgICAgZW50cmllc1swXS5hX3R5 cGUgPSBVU0VSX09CSjsKKyAgICAgIGVudHJpZXNbMF0uYV9pZCA9IDA7IC8qIGlycmVsZXZh bnQgKi8KKyAgICAgIGVudHJpZXNbMF0uYV9wZXJtID0gKG1vZGUgPj4gNikgJiA3OworICAg ICAgZW50cmllc1sxXS5hX3R5cGUgPSBHUk9VUF9PQko7CisgICAgICBlbnRyaWVzWzFdLmFf aWQgPSAwOyAvKiBpcnJlbGV2YW50ICovCisgICAgICBlbnRyaWVzWzFdLmFfcGVybSA9ICht b2RlID4+IDMpICYgNzsKKyAgICAgIGVudHJpZXNbMl0uYV90eXBlID0gT1RIRVJfT0JKOwor ICAgICAgZW50cmllc1syXS5hX2lkID0gMDsKKyAgICAgIGVudHJpZXNbMl0uYV9wZXJtID0g bW9kZSAmIDc7CisKKyAgICAgIGlmIChkZXNjICE9IC0xKQorICAgICAgICByZXQgPSBmYWNs IChkZXNjLCBTRVRBQ0wsCisgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoZW50cmllcykg LyBzaXplb2YgKGFjbGVudF90KSwgZW50cmllcyk7CisgICAgICBlbHNlCisgICAgICAgIHJl dCA9IGFjbCAobmFtZSwgU0VUQUNMLAorICAgICAgICAgICAgICAgICAgIHNpemVvZiAoZW50 cmllcykgLyBzaXplb2YgKGFjbGVudF90KSwgZW50cmllcyk7CisgICAgICBpZiAocmV0IDwg MCkKKyAgICAgICAgeworICAgICAgICAgIGlmIChlcnJubyA9PSBFTk9TWVMgfHwgZXJybm8g PT0gRU9QTk9UU1VQUCkKKyAgICAgICAgICAgIHJldHVybiBjaG1vZF9vcl9mY2htb2QgKG5h bWUsIGRlc2MsIG1vZGUpOworICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAg IH0KKworICBpZiAoIU1PREVfSU5TSURFX0FDTCB8fCAobW9kZSAmIChTX0lTVUlEIHwgU19J U0dJRCB8IFNfSVNWVFgpKSkKKyAgICB7CisgICAgICAvKiBXZSBkaWQgbm90IGNhbGwgY2ht b2Qgc28gZmFyLCBzbyB0aGUgc3BlY2lhbCBiaXRzIGhhdmUgbm90IHlldAorICAgICAgICAg YmVlbiBzZXQuICAqLworICAgICAgcmV0dXJuIGNobW9kX29yX2ZjaG1vZCAobmFtZSwgZGVz YywgbW9kZSk7CisgICAgfQorICByZXR1cm4gMDsKKworIyBlbGlmIEhBVkVfR0VUQUNMIC8q IEhQLVVYICovCisKKyAgc3RydWN0IHN0YXQgc3RhdGJ1ZjsKKyAgaW50IHJldDsKKworICBp ZiAoZGVzYyAhPSAtMSkKKyAgICByZXQgPSBmc3RhdCAoZGVzYywgJnN0YXRidWYpOworICBl bHNlCisgICAgcmV0ID0gc3RhdCAobmFtZSwgJnN0YXRidWYpOworICBpZiAocmV0IDwgMCkK KyAgICByZXR1cm4gLTE7CisKKyAgeworICAgIHN0cnVjdCBhY2xfZW50cnkgZW50cmllc1sz XTsKKworICAgIGVudHJpZXNbMF0udWlkID0gc3RhdGJ1Zi5zdF91aWQ7CisgICAgZW50cmll c1swXS5naWQgPSBBQ0xfTlNHUk9VUDsKKyAgICBlbnRyaWVzWzBdLm1vZGUgPSAobW9kZSA+ PiA2KSAmIDc7CisgICAgZW50cmllc1sxXS51aWQgPSBBQ0xfTlNVU0VSOworICAgIGVudHJp ZXNbMV0uZ2lkID0gc3RhdGJ1Zi5zdF9naWQ7CisgICAgZW50cmllc1sxXS5tb2RlID0gKG1v ZGUgPj4gMykgJiA3OworICAgIGVudHJpZXNbMl0udWlkID0gQUNMX05TVVNFUjsKKyAgICBl bnRyaWVzWzJdLmdpZCA9IEFDTF9OU0dST1VQOworICAgIGVudHJpZXNbMl0ubW9kZSA9IG1v ZGUgJiA3OworCisgICAgaWYgKGRlc2MgIT0gLTEpCisgICAgICByZXQgPSBmc2V0YWNsIChk ZXNjLCBzaXplb2YgKGVudHJpZXMpIC8gc2l6ZW9mIChzdHJ1Y3QgYWNsX2VudHJ5KSwgZW50 cmllcyk7CisgICAgZWxzZQorICAgICAgcmV0ID0gc2V0YWNsIChuYW1lLCBzaXplb2YgKGVu dHJpZXMpIC8gc2l6ZW9mIChzdHJ1Y3QgYWNsX2VudHJ5KSwgZW50cmllcyk7CisgIH0KKyAg aWYgKHJldCA8IDApCisgICAgeworICAgICAgaWYgKCEoZXJybm8gPT0gRU5PU1lTIHx8IGVy cm5vID09IEVPUE5PVFNVUFAgfHwgZXJybm8gPT0gRU5PVFNVUCkpCisgICAgICAgIHJldHVy biAtMTsKKworIyAgaWYgSEFWRV9BQ0xWX0ggLyogSFAtVVggPj0gMTEuMTEgKi8KKyAgICAg IHsKKyAgICAgICAgc3RydWN0IGFjbCBlbnRyaWVzWzRdOworCisgICAgICAgIGVudHJpZXNb MF0uYV90eXBlID0gVVNFUl9PQko7CisgICAgICAgIGVudHJpZXNbMF0uYV9pZCA9IDA7IC8q IGlycmVsZXZhbnQgKi8KKyAgICAgICAgZW50cmllc1swXS5hX3Blcm0gPSAobW9kZSA+PiA2 KSAmIDc7CisgICAgICAgIGVudHJpZXNbMV0uYV90eXBlID0gR1JPVVBfT0JKOworICAgICAg ICBlbnRyaWVzWzFdLmFfaWQgPSAwOyAvKiBpcnJlbGV2YW50ICovCisgICAgICAgIGVudHJp ZXNbMV0uYV9wZXJtID0gKG1vZGUgPj4gMykgJiA3OworICAgICAgICBlbnRyaWVzWzJdLmFf dHlwZSA9IENMQVNTX09CSjsKKyAgICAgICAgZW50cmllc1syXS5hX2lkID0gMDsKKyAgICAg ICAgZW50cmllc1syXS5hX3Blcm0gPSAobW9kZSA+PiAzKSAmIDc7CisgICAgICAgIGVudHJp ZXNbM10uYV90eXBlID0gT1RIRVJfT0JKOworICAgICAgICBlbnRyaWVzWzNdLmFfaWQgPSAw OworICAgICAgICBlbnRyaWVzWzNdLmFfcGVybSA9IG1vZGUgJiA3OworCisgICAgICAgIHJl dCA9IGFjbHNvcnQgKHNpemVvZiAoZW50cmllcykgLyBzaXplb2YgKHN0cnVjdCBhY2wpLCAx LCBlbnRyaWVzKTsKKyAgICAgICAgaWYgKHJldCA+IDApCisgICAgICAgICAgYWJvcnQgKCk7 CisgICAgICAgIGlmIChyZXQgPCAwKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgw KQorICAgICAgICAgICAgICByZXR1cm4gY2htb2Rfb3JfZmNobW9kIChuYW1lLCBkZXNjLCBt b2RlKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICB9CisKKyAgICAgICAg cmV0ID0gYWNsICgoY2hhciAqKSBuYW1lLCBBQ0xfU0VULAorICAgICAgICAgICAgICAgICAg IHNpemVvZiAoZW50cmllcykgLyBzaXplb2YgKHN0cnVjdCBhY2wpLCBlbnRyaWVzKTsKKyAg ICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKGVycm5v ID09IEVOT1NZUyB8fCBlcnJubyA9PSBFT1BOT1RTVVBQIHx8IGVycm5vID09IEVJTlZBTCkK KyAgICAgICAgICAgICAgcmV0dXJuIGNobW9kX29yX2ZjaG1vZCAobmFtZSwgZGVzYywgbW9k ZSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgfQorICAgICAgfQorIyAg ZWxzZQorICAgICAgcmV0dXJuIGNobW9kX29yX2ZjaG1vZCAobmFtZSwgZGVzYywgbW9kZSk7 CisjICBlbmRpZgorICAgIH0KKworICBpZiAobW9kZSAmIChTX0lTVUlEIHwgU19JU0dJRCB8 IFNfSVNWVFgpKQorICAgIHsKKyAgICAgIC8qIFdlIGRpZCBub3QgY2FsbCBjaG1vZCBzbyBm YXIsIHNvIHRoZSBzcGVjaWFsIGJpdHMgaGF2ZSBub3QgeWV0CisgICAgICAgICBiZWVuIHNl dC4gICovCisgICAgICByZXR1cm4gY2htb2Rfb3JfZmNobW9kIChuYW1lLCBkZXNjLCBtb2Rl KTsKKyAgICB9CisgIHJldHVybiAwOworCisjIGVsaWYgSEFWRV9BQ0xYX0dFVCAmJiBkZWZp bmVkIEFDTF9BSVhfV0lQIC8qIEFJWCAqLworCisgIGFjbF90eXBlX2xpc3RfdCB0eXBlczsK KyAgc2l6ZV90IHR5cGVzX3NpemUgPSBzaXplb2YgKHR5cGVzKTsKKyAgYWNsX3R5cGVfdCB0 eXBlOworCisgIGlmIChhY2x4X2dldHR5cGVzIChuYW1lLCAmdHlwZXMsICZ0eXBlc19zaXpl KSA8IDAKKyAgICAgIHx8IHR5cGVzLm51bV9lbnRyaWVzID09IDApCisgICAgcmV0dXJuIGNo bW9kX29yX2ZjaG1vZCAobmFtZSwgZGVzYywgbW9kZSk7CisKKyAgLyogWFhYIERvIHdlIG5l ZWQgdG8gY2xlYXIgYWxsIHR5cGVzIG9mIEFDTHMgZm9yIHRoZSBnaXZlbiBmaWxlLCBvciBp cyBpdAorICAgICBzdWZmaWNpZW50IHRvIGNsZWFyIHRoZSBmaXJzdCBvbmU/ICAqLworICB0 eXBlID0gdHlwZXMuZW50cmllc1swXTsKKyAgaWYgKHR5cGUudTY0ID09IEFDTF9BSVhDKQor ICAgIHsKKyAgICAgIHVuaW9uIHsgc3RydWN0IGFjbCBhOyBjaGFyIHJvb21bMTI4XTsgfSB1 OworICAgICAgaW50IHJldDsKKworICAgICAgdS5hLmFjbF9sZW4gPSAoY2hhciAqKSAmdS5h LmFjbF9leHRbMF0gLSAoY2hhciAqKSAmdS5hOyAvKiBubyBlbnRyaWVzICovCisgICAgICB1 LmEuYWNsX21vZGUgPSBtb2RlICYgfihTX0lYQUNMIHwgMDc3Nyk7CisgICAgICB1LmEudV9h Y2Nlc3MgPSAobW9kZSA+PiA2KSAmIDc7CisgICAgICB1LmEuZ19hY2Nlc3MgPSAobW9kZSA+ PiAzKSAmIDc7CisgICAgICB1LmEub19hY2Nlc3MgPSBtb2RlICYgNzsKKworICAgICAgaWYg KGRlc2MgIT0gLTEpCisgICAgICAgIHJldCA9IGFjbHhfZnB1dCAoZGVzYywgU0VUX0FDTCB8 IFNFVF9NT0RFX1NfQklUUywKKyAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLCAmdS5h LCB1LmEuYWNsX2xlbiwgbW9kZSk7CisgICAgICBlbHNlCisgICAgICAgIHJldCA9IGFjbHhf cHV0IChuYW1lLCBTRVRfQUNMIHwgU0VUX01PREVfU19CSVRTLAorICAgICAgICAgICAgICAg ICAgICAgICAgdHlwZSwgJnUuYSwgdS5hLmFjbF9sZW4sIG1vZGUpOworICAgICAgaWYgKCEo cmV0IDwgMCAmJiBlcnJubyA9PSBFTk9TWVMpKQorICAgICAgICByZXR1cm4gcmV0OworICAg IH0KKyAgZWxzZSBpZiAodHlwZS51NjQgPT0gQUNMX05GUzQpCisgICAgeworICAgICAgdW5p b24geyBuZnM0X2FjbF9pbnRfdCBhOyBjaGFyIHJvb21bMTI4XTsgfSB1OworICAgICAgbmZz NF9hY2VfaW50X3QgKmFjZTsKKyAgICAgIGludCByZXQ7CisKKyAgICAgIHUuYS5hY2xWZXJz aW9uID0gTkZTNF9BQ0xfSU5UX1NUUlVDVF9WRVJTSU9OOworICAgICAgdS5hLmFjbEVudHJ5 TiA9IDA7CisgICAgICBhY2UgPSAmdS5hLmFjbEVudHJ5WzBdOworICAgICAgeworICAgICAg ICBhY2UtPmZsYWdzID0gQUNFNF9JRF9TUEVDSUFMOworICAgICAgICBhY2UtPmFjZVdoby5z cGVjaWFsX3dob2lkID0gQUNFNF9XSE9fT1dORVI7CisgICAgICAgIGFjZS0+YWNlVHlwZSA9 IEFDRTRfQUNDRVNTX0FMTE9XRURfQUNFX1RZUEU7CisgICAgICAgIGFjZS0+YWNlRmxhZ3Mg PSAwOworICAgICAgICBhY2UtPmFjZU1hc2sgPQorICAgICAgICAgIChtb2RlICYgMDQwMCA/ IEFDRTRfUkVBRF9EQVRBIHwgQUNFNF9MSVNUX0RJUkVDVE9SWSA6IDApCisgICAgICAgICAg fCAobW9kZSAmIDAyMDAKKyAgICAgICAgICAgICA/IEFDRTRfV1JJVEVfREFUQSB8IEFDRTRf QUREX0ZJTEUgfCBBQ0U0X0FQUEVORF9EQVRBCisgICAgICAgICAgICAgICB8IEFDRTRfQURE X1NVQkRJUkVDVE9SWQorICAgICAgICAgICAgIDogMCkKKyAgICAgICAgICB8IChtb2RlICYg MDEwMCA/IEFDRTRfRVhFQ1VURSA6IDApOworICAgICAgICBhY2UtPmFjZVdob1N0cmluZ1sw XSA9ICdcMCc7CisgICAgICAgIGFjZS0+ZW50cnlMZW4gPSAoY2hhciAqKSAmYWNlLT5hY2VX aG9TdHJpbmdbNF0gLSAoY2hhciAqKSBhY2U7CisgICAgICAgIGFjZSA9IChuZnM0X2FjZV9p bnRfdCAqKSAoY2hhciAqKSAmYWNlLT5hY2VXaG9TdHJpbmdbNF07CisgICAgICAgIHUuYS5h Y2xFbnRyeU4rKzsKKyAgICAgIH0KKyAgICAgIHsKKyAgICAgICAgYWNlLT5mbGFncyA9IEFD RTRfSURfU1BFQ0lBTDsKKyAgICAgICAgYWNlLT5hY2VXaG8uc3BlY2lhbF93aG9pZCA9IEFD RTRfV0hPX0dST1VQOworICAgICAgICBhY2UtPmFjZVR5cGUgPSBBQ0U0X0FDQ0VTU19BTExP V0VEX0FDRV9UWVBFOworICAgICAgICBhY2UtPmFjZUZsYWdzID0gMDsKKyAgICAgICAgYWNl LT5hY2VNYXNrID0KKyAgICAgICAgICAobW9kZSAmIDAwNDAgPyBBQ0U0X1JFQURfREFUQSB8 IEFDRTRfTElTVF9ESVJFQ1RPUlkgOiAwKQorICAgICAgICAgIHwgKG1vZGUgJiAwMDIwCisg ICAgICAgICAgICAgPyBBQ0U0X1dSSVRFX0RBVEEgfCBBQ0U0X0FERF9GSUxFIHwgQUNFNF9B UFBFTkRfREFUQQorICAgICAgICAgICAgICAgfCBBQ0U0X0FERF9TVUJESVJFQ1RPUlkKKyAg ICAgICAgICAgICA6IDApCisgICAgICAgICAgfCAobW9kZSAmIDAwMTAgPyBBQ0U0X0VYRUNV VEUgOiAwKTsKKyAgICAgICAgYWNlLT5hY2VXaG9TdHJpbmdbMF0gPSAnXDAnOworICAgICAg ICBhY2UtPmVudHJ5TGVuID0gKGNoYXIgKikgJmFjZS0+YWNlV2hvU3RyaW5nWzRdIC0gKGNo YXIgKikgYWNlOworICAgICAgICBhY2UgPSAobmZzNF9hY2VfaW50X3QgKikgKGNoYXIgKikg JmFjZS0+YWNlV2hvU3RyaW5nWzRdOworICAgICAgICB1LmEuYWNsRW50cnlOKys7CisgICAg ICB9CisgICAgICB7CisgICAgICAgIGFjZS0+ZmxhZ3MgPSBBQ0U0X0lEX1NQRUNJQUw7Cisg ICAgICAgIGFjZS0+YWNlV2hvLnNwZWNpYWxfd2hvaWQgPSBBQ0U0X1dIT19FVkVSWU9ORTsK KyAgICAgICAgYWNlLT5hY2VUeXBlID0gQUNFNF9BQ0NFU1NfQUxMT1dFRF9BQ0VfVFlQRTsK KyAgICAgICAgYWNlLT5hY2VGbGFncyA9IDA7CisgICAgICAgIGFjZS0+YWNlTWFzayA9Cisg ICAgICAgICAgKG1vZGUgJiAwMDA0ID8gQUNFNF9SRUFEX0RBVEEgfCBBQ0U0X0xJU1RfRElS RUNUT1JZIDogMCkKKyAgICAgICAgICB8IChtb2RlICYgMDAwMgorICAgICAgICAgICAgID8g QUNFNF9XUklURV9EQVRBIHwgQUNFNF9BRERfRklMRSB8IEFDRTRfQVBQRU5EX0RBVEEKKyAg ICAgICAgICAgICAgIHwgQUNFNF9BRERfU1VCRElSRUNUT1JZCisgICAgICAgICAgICAgOiAw KQorICAgICAgICAgIHwgKG1vZGUgJiAwMDAxID8gQUNFNF9FWEVDVVRFIDogMCk7CisgICAg ICAgIGFjZS0+YWNlV2hvU3RyaW5nWzBdID0gJ1wwJzsKKyAgICAgICAgYWNlLT5lbnRyeUxl biA9IChjaGFyICopICZhY2UtPmFjZVdob1N0cmluZ1s0XSAtIChjaGFyICopIGFjZTsKKyAg ICAgICAgYWNlID0gKG5mczRfYWNlX2ludF90ICopIChjaGFyICopICZhY2UtPmFjZVdob1N0 cmluZ1s0XTsKKyAgICAgICAgdS5hLmFjbEVudHJ5TisrOworICAgICAgfQorICAgICAgdS5h LmFjbExlbmd0aCA9IChjaGFyICopIGFjZSAtIChjaGFyICopICZ1LmE7CisKKyAgICAgIGlm IChkZXNjICE9IC0xKQorICAgICAgICByZXQgPSBhY2x4X2ZwdXQgKGRlc2MsIFNFVF9BQ0wg fCBTRVRfTU9ERV9TX0JJVFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwgJnUu YSwgdS5hLmFjbExlbmd0aCwgbW9kZSk7CisgICAgICBlbHNlCisgICAgICAgIHJldCA9IGFj bHhfcHV0IChuYW1lLCBTRVRfQUNMIHwgU0VUX01PREVfU19CSVRTLAorICAgICAgICAgICAg ICAgICAgICAgICAgdHlwZSwgJnUuYSwgdS5hLmFjbExlbmd0aCwgbW9kZSk7CisgICAgICBp ZiAoIShyZXQgPCAwICYmIGVycm5vID09IEVOT1NZUykpCisgICAgICAgIHJldHVybiByZXQ7 CisgICAgfQorCisgIHJldHVybiBjaG1vZF9vcl9mY2htb2QgKG5hbWUsIGRlc2MsIG1vZGUp OworCisjIGVsaWYgSEFWRV9TVEFUQUNMIC8qIG9sZGVyIEFJWCAqLworCisgIHVuaW9uIHsg c3RydWN0IGFjbCBhOyBjaGFyIHJvb21bMTI4XTsgfSB1OworICBpbnQgcmV0OworCisgIHUu YS5hY2xfbGVuID0gKGNoYXIgKikgJnUuYS5hY2xfZXh0WzBdIC0gKGNoYXIgKikgJnUuYTsg Lyogbm8gZW50cmllcyAqLworICB1LmEuYWNsX21vZGUgPSBtb2RlICYgfihTX0lYQUNMIHwg MDc3Nyk7CisgIHUuYS51X2FjY2VzcyA9IChtb2RlID4+IDYpICYgNzsKKyAgdS5hLmdfYWNj ZXNzID0gKG1vZGUgPj4gMykgJiA3OworICB1LmEub19hY2Nlc3MgPSBtb2RlICYgNzsKKwor ICBpZiAoZGVzYyAhPSAtMSkKKyAgICByZXQgPSBmY2hhY2wgKGRlc2MsICZ1LmEsIHUuYS5h Y2xfbGVuKTsKKyAgZWxzZQorICAgIHJldCA9IGNoYWNsIChuYW1lLCAmdS5hLCB1LmEuYWNs X2xlbik7CisKKyAgaWYgKHJldCA8IDAgJiYgZXJybm8gPT0gRU5PU1lTKQorICAgIHJldHVy biBjaG1vZF9vcl9mY2htb2QgKG5hbWUsIGRlc2MsIG1vZGUpOworCisgIHJldHVybiByZXQ7 CisKKyMgZWxpZiBIQVZFX0FDTFNPUlQgLyogTm9uU3RvcCBLZXJuZWwgKi8KKworICBzdHJ1 Y3QgYWNsIGVudHJpZXNbNF07CisgIGludCByZXQ7CisKKyAgZW50cmllc1swXS5hX3R5cGUg PSBVU0VSX09CSjsKKyAgZW50cmllc1swXS5hX2lkID0gMDsgLyogaXJyZWxldmFudCAqLwor ICBlbnRyaWVzWzBdLmFfcGVybSA9IChtb2RlID4+IDYpICYgNzsKKyAgZW50cmllc1sxXS5h X3R5cGUgPSBHUk9VUF9PQko7CisgIGVudHJpZXNbMV0uYV9pZCA9IDA7IC8qIGlycmVsZXZh bnQgKi8KKyAgZW50cmllc1sxXS5hX3Blcm0gPSAobW9kZSA+PiAzKSAmIDc7CisgIGVudHJp ZXNbMl0uYV90eXBlID0gQ0xBU1NfT0JKOworICBlbnRyaWVzWzJdLmFfaWQgPSAwOworICBl bnRyaWVzWzJdLmFfcGVybSA9IChtb2RlID4+IDMpICYgNzsKKyAgZW50cmllc1szXS5hX3R5 cGUgPSBPVEhFUl9PQko7CisgIGVudHJpZXNbM10uYV9pZCA9IDA7CisgIGVudHJpZXNbM10u YV9wZXJtID0gbW9kZSAmIDc7CisKKyAgcmV0ID0gYWNsc29ydCAoc2l6ZW9mIChlbnRyaWVz KSAvIHNpemVvZiAoc3RydWN0IGFjbCksIDEsIGVudHJpZXMpOworICBpZiAocmV0ID4gMCkK KyAgICBhYm9ydCAoKTsKKyAgaWYgKHJldCA8IDApCisgICAgeworICAgICAgaWYgKDApCisg ICAgICAgIHJldHVybiBjaG1vZF9vcl9mY2htb2QgKG5hbWUsIGRlc2MsIG1vZGUpOworICAg ICAgcmV0dXJuIC0xOworICAgIH0KKworICByZXQgPSBhY2wgKChjaGFyICopIG5hbWUsIEFD TF9TRVQsCisgICAgICAgICAgICAgc2l6ZW9mIChlbnRyaWVzKSAvIHNpemVvZiAoc3RydWN0 IGFjbCksIGVudHJpZXMpOworICBpZiAocmV0IDwgMCkKKyAgICB7CisgICAgICBpZiAoMCkK KyAgICAgICAgcmV0dXJuIGNobW9kX29yX2ZjaG1vZCAobmFtZSwgZGVzYywgbW9kZSk7Cisg ICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIGlmIChtb2RlICYgKFNfSVNVSUQgfCBTX0lT R0lEIHwgU19JU1ZUWCkpCisgICAgeworICAgICAgLyogV2UgZGlkIG5vdCBjYWxsIGNobW9k IHNvIGZhciwgc28gdGhlIHNwZWNpYWwgYml0cyBoYXZlIG5vdCB5ZXQKKyAgICAgICAgIGJl ZW4gc2V0LiAgKi8KKyAgICAgIHJldHVybiBjaG1vZF9vcl9mY2htb2QgKG5hbWUsIGRlc2Ms IG1vZGUpOworICAgIH0KKyAgcmV0dXJuIDA7CisKKyMgZWxzZSAvKiBVbmtub3duIGZsYXZv ciBvZiBBQ0xzICovCisgIHJldHVybiBjaG1vZF9vcl9mY2htb2QgKG5hbWUsIGRlc2MsIG1v ZGUpOworIyBlbmRpZgorI2Vsc2UgLyogIVVTRV9BQ0wgKi8KKyAgcmV0dXJuIGNobW9kX29y X2ZjaG1vZCAobmFtZSwgZGVzYywgbW9kZSk7CisjZW5kaWYKK30KCj09PSBhZGRlZCBmaWxl ICdtNC9hY2wubTQnCi0tLSBtNC9hY2wubTQJMTk3MC0wMS0wMSAwMDowMDowMCArMDAwMAor KysgbTQvYWNsLm00CTIwMTMtMDQtMTcgMDU6MjE6MzMgKzAwMDAKQEAgLTAsMCArMSwxNjQg QEAKKyMgYWNsLm00IC0gY2hlY2sgZm9yIGFjY2VzcyBjb250cm9sIGxpc3QgKEFDTCkgcHJp bWl0aXZlcworIyBzZXJpYWwgMTUKKworIyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDQtMjAx MyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGZyZWUg c29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1p dGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBv ciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJl c2VydmVkLgorCisjIFdyaXR0ZW4gYnkgUGF1bCBFZ2dlcnQgYW5kIEppbSBNZXllcmluZy4K KworQUNfREVGVU4oW2dsX0ZVTkNfQUNMXSwKK1sKKyAgQUNfQVJHX0VOQUJMRShbYWNsXSwK KyAgICBBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWFjbF0sIFtkbyBub3Qgc3VwcG9ydCBB Q0xzXSksCisgICAgLCBbZW5hYmxlX2FjbD1hdXRvXSkKKworICBMSUJfQUNMPQorICB1c2Vf YWNsPTAKKyAgaWYgdGVzdCAieCRlbmFibGVfYWNsIiAhPSAieG5vIjsgdGhlbgorICAgIGRu bCBPbiBhbGwgcGxhdGZvcm1zLCB0aGUgQUNMIHJlbGF0ZWQgQVBJIGlzIGRlY2xhcmVkIGlu IDxzeXMvYWNsLmg+LgorICAgIEFDX0NIRUNLX0hFQURFUlMoW3N5cy9hY2wuaF0pCisgICAg aWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N5c19hY2xfaCA9IHllczsgdGhlbgorICAgICAgYWNf c2F2ZV9MSUJTPSRMSUJTCisKKyAgICAgIGRubCBUZXN0IGZvciBQT1NJWC1kcmFmdC1saWtl IEFQSSAoTGludXgsIEZyZWVCU0QsIE1hYyBPUyBYLCBJUklYLCBUcnU2NCkuCisgICAgICBk bmwgLWxhY2wgaXMgbmVlZGVkIG9uIExpbnV4LCAtbHBhY2wgaXMgbmVlZGVkIG9uIE9TRi8x LgorICAgICAgaWYgdGVzdCAkdXNlX2FjbCA9IDA7IHRoZW4KKyAgICAgICAgQUNfU0VBUkNI X0xJQlMoW2FjbF9nZXRfZmlsZV0sIFthY2wgcGFjbF0sCisgICAgICAgICAgW2lmIHRlc3Qg IiRhY19jdl9zZWFyY2hfYWNsX2dldF9maWxlIiAhPSAibm9uZSByZXF1aXJlZCI7IHRoZW4K KyAgICAgICAgICAgICBMSUJfQUNMPSRhY19jdl9zZWFyY2hfYWNsX2dldF9maWxlCisgICAg ICAgICAgIGZpCisgICAgICAgICAgIEFDX0NIRUNLX0ZVTkNTKAorICAgICAgICAgICAgIFth Y2xfZ2V0X2ZpbGUgYWNsX2dldF9mZCBhY2xfc2V0X2ZpbGUgYWNsX3NldF9mZCBcCisgICAg ICAgICAgICAgIGFjbF9mcmVlIGFjbF9mcm9tX21vZGUgYWNsX2Zyb21fdGV4dCBcCisgICAg ICAgICAgICAgIGFjbF9kZWxldGVfZGVmX2ZpbGUgYWNsX2V4dGVuZGVkX2ZpbGUgXAorICAg ICAgICAgICAgICBhY2xfZGVsZXRlX2ZkX25wIGFjbF9kZWxldGVfZmlsZV9ucCBcCisgICAg ICAgICAgICAgIGFjbF9jb3B5X2V4dF9uYXRpdmUgYWNsX2NyZWF0ZV9lbnRyeV9ucCBcCisg ICAgICAgICAgICAgIGFjbF90b19zaG9ydF90ZXh0IGFjbF9mcmVlX3RleHRdKQorICAgICAg ICAgICAjIElmIHRoZSBhY2xfZ2V0X2ZpbGUgYnVnIGlzIGRldGVjdGVkLCBkb24ndCBlbmFi bGUgdGhlIEFDTCBzdXBwb3J0LgorICAgICAgICAgICBnbF9BQ0xfR0VUX0ZJTEUoW3VzZV9h Y2w9MV0sIFtdKQorICAgICAgICAgICBpZiB0ZXN0ICR1c2VfYWNsID0gMTsgdGhlbgorICAg ICAgICAgICAgIGRubCBPbiBMaW51eCwgYWRkaXRpb25hbCBBUEkgaXMgZGVjbGFyZWQgaW4g PGFjbC9saWJhY2wuaD4uCisgICAgICAgICAgICAgQUNfQ0hFQ0tfSEVBREVSUyhbYWNsL2xp YmFjbC5oXSkKKyAgICAgICAgICAgICBBQ19SRVBMQUNFX0ZVTkNTKFthY2xfZW50cmllc10p CisgICAgICAgICAgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBBQ0xfRklSU1RfRU5UUlldLAor ICAgICAgICAgICAgICAgW2dsX2N2X2FjbF9BQ0xfRklSU1RfRU5UUlldLAorICAgICAgICAg ICAgICAgW0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oCitbWyNpbmNsdWRl IDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvYWNsLmg+CitpbnQgdHlwZSA9IEFDTF9G SVJTVF9FTlRSWTtdXSldLAorICAgICAgICAgICAgICAgICAgW2dsX2N2X2FjbF9BQ0xfRklS U1RfRU5UUlk9eWVzXSwKKyAgICAgICAgICAgICAgICAgIFtnbF9jdl9hY2xfQUNMX0ZJUlNU X0VOVFJZPW5vXSldKQorICAgICAgICAgICAgIGlmIHRlc3QgJGdsX2N2X2FjbF9BQ0xfRklS U1RfRU5UUlkgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgICAgIEFDX0RFRklORShbSEFWRV9B Q0xfRklSU1RfRU5UUlldLCBbMV0sCisgICAgICAgICAgICAgICAgIFtEZWZpbmUgdG8gMSBp ZiB0aGUgY29uc3RhbnQgQUNMX0ZJUlNUX0VOVFJZIGV4aXN0cy5dKQorICAgICAgICAgICAg IGZpCisgICAgICAgICAgICAgZG5sIE9uIE1hYyBPUyBYLCBvdGhlciB0eXBlcyBvZiBBQ0xz IGFyZSBzdXBwb3J0ZWQuCisgICAgICAgICAgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBBQ0xf VFlQRV9FWFRFTkRFRF0sCisgICAgICAgICAgICAgICBbZ2xfY3ZfYWNsX0FDTF9UWVBFX0VY VEVOREVEXSwKKyAgICAgICAgICAgICAgIFtBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19Q Uk9HUkFNKAorW1sjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL2FjbC5o PgoraW50IHR5cGUgPSBBQ0xfVFlQRV9FWFRFTkRFRDtdXSldLAorICAgICAgICAgICAgICAg ICAgW2dsX2N2X2FjbF9BQ0xfVFlQRV9FWFRFTkRFRD15ZXNdLAorICAgICAgICAgICAgICAg ICAgW2dsX2N2X2FjbF9BQ0xfVFlQRV9FWFRFTkRFRD1ub10pXSkKKyAgICAgICAgICAgICBp ZiB0ZXN0ICRnbF9jdl9hY2xfQUNMX1RZUEVfRVhURU5ERUQgPSB5ZXM7IHRoZW4KKyAgICAg ICAgICAgICAgIEFDX0RFRklORShbSEFWRV9BQ0xfVFlQRV9FWFRFTkRFRF0sIFsxXSwKKyAg ICAgICAgICAgICAgICAgW0RlZmluZSB0byAxIGlmIHRoZSBBQ0wgdHlwZSBBQ0xfVFlQRV9F WFRFTkRFRCBleGlzdHMuXSkKKyAgICAgICAgICAgICBmaQorICAgICAgICAgICBlbHNlCisg ICAgICAgICAgICAgTElCX0FDTD0KKyAgICAgICAgICAgZmkKKyAgICAgICAgICBdKQorICAg ICAgZmkKKworICAgICAgZG5sIFRlc3QgZm9yIFNvbGFyaXMgQVBJIChTb2xhcmlzLCBDeWd3 aW4pLgorICAgICAgaWYgdGVzdCAkdXNlX2FjbCA9IDA7IHRoZW4KKyAgICAgICAgQUNfQ0hF Q0tfRlVOQ1MoW2ZhY2xdKQorICAgICAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX2ZhY2wgPSB5 ZXM7IHRoZW4KKyAgICAgICAgICBBQ19TRUFSQ0hfTElCUyhbYWNsX3RyaXZpYWxdLCBbc2Vj XSwKKyAgICAgICAgICAgIFtpZiB0ZXN0ICIkYWNfY3Zfc2VhcmNoX2FjbF90cml2aWFsIiAh PSAibm9uZSByZXF1aXJlZCI7IHRoZW4KKyAgICAgICAgICAgICAgIExJQl9BQ0w9JGFjX2N2 X3NlYXJjaF9hY2xfdHJpdmlhbAorICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBdKQor ICAgICAgICAgIEFDX0NIRUNLX0ZVTkNTKFthY2xfdHJpdmlhbF0pCisgICAgICAgICAgdXNl X2FjbD0xCisgICAgICAgIGZpCisgICAgICBmaQorCisgICAgICBkbmwgVGVzdCBmb3IgSFAt VVggQVBJLgorICAgICAgaWYgdGVzdCAkdXNlX2FjbCA9IDA7IHRoZW4KKyAgICAgICAgQUNf Q0hFQ0tfRlVOQ1MoW2dldGFjbF0pCisgICAgICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfZ2V0 YWNsID0geWVzOyB0aGVuCisgICAgICAgICAgdXNlX2FjbD0xCisgICAgICAgIGZpCisgICAg ICAgIGRubCBUZXN0IGZvciBIUC1VWCAxMS4xMSBBUEkuCisgICAgICAgIEFDX0NIRUNLX0hF QURFUlMoW2FjbHYuaF0sIFtdLCBbXSwgWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD5dKQorICAg ICAgZmkKKworICAgICAgZG5sIFRlc3QgZm9yIEFJWCBBUEkgKEFJWCA1LjMgb3IgbmV3ZXIp LgorICAgICAgaWYgdGVzdCAkdXNlX2FjbCA9IDA7IHRoZW4KKyAgICAgICAgQUNfQ0hFQ0tf RlVOQ1MoW2FjbHhfZ2V0XSkKKyAgICAgICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19hY2x4X2dl dCA9IHllczsgdGhlbgorICAgICAgICAgIHVzZV9hY2w9MQorICAgICAgICBmaQorICAgICAg ZmkKKworICAgICAgZG5sIFRlc3QgZm9yIG9sZGVyIEFJWCBBUEkuCisgICAgICBpZiB0ZXN0 ICR1c2VfYWNsID0gMCB8fCB0ZXN0ICIkYWNfY3ZfZnVuY19hY2x4X2dldCIgPSB5ZXM7IHRo ZW4KKyAgICAgICAgQUNfQ0hFQ0tfRlVOQ1MoW3N0YXRhY2xdKQorICAgICAgICBpZiB0ZXN0 ICRhY19jdl9mdW5jX3N0YXRhY2wgPSB5ZXM7IHRoZW4KKyAgICAgICAgICB1c2VfYWNsPTEK KyAgICAgICAgZmkKKyAgICAgIGZpCisKKyAgICAgIGRubCBUZXN0IGZvciBOb25TdG9wIEtl cm5lbCBBUEkuCisgICAgICBpZiB0ZXN0ICR1c2VfYWNsID0gMDsgdGhlbgorICAgICAgICBB Q19DSEVDS19GVU5DUyhbYWNsc29ydF0pCisgICAgICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNf YWNsc29ydCA9IHllczsgdGhlbgorICAgICAgICAgIHVzZV9hY2w9MQorICAgICAgICBmaQor ICAgICAgZmkKKworICAgICAgTElCUz0kYWNfc2F2ZV9MSUJTCisgICAgZmkKKyAgICBpZiB0 ZXN0ICJ4JGVuYWJsZV9hY2wkdXNlX2FjbCIgPSAieHllczAiOyB0aGVuCisgICAgICBBQ19N U0dfRVJST1IoW0FDTHMgZW5hYmxlZCBidXQgc3VwcG9ydCBub3QgZGV0ZWN0ZWRdKQorICAg IGVsaWYgdGVzdCAieCRlbmFibGVfYWNsJHVzZV9hY2wiID0gInhhdXRvMCI7IHRoZW4KKyAg ICAgIEFDX01TR19XQVJOKFtsaWJhY2wgZGV2ZWxvcG1lbnQgbGlicmFyeSB3YXMgbm90IGZv dW5kIG9yIG5vdCB1c2FibGUuXSkKKyAgICAgIEFDX01TR19XQVJOKFtBQ19QQUNLQUdFX05B TUUgd2lsbCBiZSBidWlsdCB3aXRob3V0IEFDTCBzdXBwb3J0Ll0pCisgICAgZmkKKyAgZmkK KyAgQUNfU1VCU1QoW0xJQl9BQ0xdKQorICBBQ19ERUZJTkVfVU5RVU9URUQoW1VTRV9BQ0xd LCBbJHVzZV9hY2xdLAorICAgIFtEZWZpbmUgdG8gbm9uemVybyBpZiB5b3Ugd2FudCBhY2Nl c3MgY29udHJvbCBsaXN0IHN1cHBvcnQuXSkKKyAgVVNFX0FDTD0kdXNlX2FjbAorICBBQ19T VUJTVChbVVNFX0FDTF0pCitdKQorCisjIGdsX0FDTF9HRVRfRklMRShJRi1XT1JLUywgSUYt Tk9UKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIElmICdh Y2xfZ2V0X2ZpbGUnIHdvcmtzIChkb2VzIG5vdCBoYXZlIGEgcGFydGljdWxhciBidWcpLAor IyBydW4gSUYtV09SS1MsIG90aGVyd2lzZSwgSUYtTk9ULgorIyBUaGlzIHRlc3RzIGZvciBh IERhcndpbiA4LjcuMCBidWcsIHdoZXJlYnkgYWNsX2dldF9maWxlIHJldHVybnMgTlVMTCwK KyMgYnV0IHNldHMgZXJybm8gPSBFTk9FTlQgZm9yIGFuIGV4aXN0aW5nIGZpbGUgb3IgZGly ZWN0b3J5LgorQUNfREVGVU4oW2dsX0FDTF9HRVRfRklMRV0sCitbCisgIEFDX0NBQ0hFX0NI RUNLKFtmb3Igd29ya2luZyBhY2xfZ2V0X2ZpbGVdLCBbZ2xfY3ZfZnVuY193b3JraW5nX2Fj bF9nZXRfZmlsZV0sCisgICAgW0FDX1JVTl9JRkVMU0UoCisgICAgICAgW0FDX0xBTkdfUFJP R1JBTSgKKyAgICAgICAgICBbWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAgICAgICAgICAg I2luY2x1ZGUgPHN5cy9hY2wuaD4KKyAgICAgICAgICAgI2luY2x1ZGUgPGVycm5vLmg+Cisg ICAgICAgICAgXV0sCisgICAgICAgICAgW1tpZiAoIWFjbF9nZXRfZmlsZSAoIi4iLCBBQ0xf VFlQRV9BQ0NFU1MpICYmIGVycm5vID09IEVOT0VOVCkKKyAgICAgICAgICAgICAgcmV0dXJu IDE7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICBdXSldLAorICAgICAgIFtn bF9jdl9mdW5jX3dvcmtpbmdfYWNsX2dldF9maWxlPXllc10sCisgICAgICAgW2dsX2N2X2Z1 bmNfd29ya2luZ19hY2xfZ2V0X2ZpbGU9bm9dLAorICAgICAgIFtnbF9jdl9mdW5jX3dvcmtp bmdfYWNsX2dldF9maWxlPWNyb3NzLWNvbXBpbGluZ10pXSkKKworICBBU19JRihbdGVzdCAk Z2xfY3ZfZnVuY193b3JraW5nX2FjbF9nZXRfZmlsZSA9IHllc10sIFskMV0sIFskMl0pCitd KQoKPT09IG1vZGlmaWVkIGZpbGUgJ200L2dudWxpYi1jb21wLm00JwotLS0gbTQvZ251bGli LWNvbXAubTQJMjAxMy0wMy0xMyAxODo0MjoyMiArMDAwMAorKysgbTQvZ251bGliLWNvbXAu bTQJMjAxMy0wNC0yNyAyMDoyNDoxMCArMDAwMApAQCAtOTQsNiArOTQsNyBAQAogICAjIENv ZGUgZnJvbSBtb2R1bGUgcHNlbGVjdDoKICAgIyBDb2RlIGZyb20gbW9kdWxlIHB0aHJlYWRf c2lnbWFzazoKICAgIyBDb2RlIGZyb20gbW9kdWxlIHB1dGVudjoKKyAgIyBDb2RlIGZyb20g bW9kdWxlIHFhY2w6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSByZWFkbGluazoKICAgIyBDb2Rl IGZyb20gbW9kdWxlIHJlYWRsaW5rYXQ6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSByb290LXVp ZDoKQEAgLTI4Nyw2ICsyODgsNyBAQAogICAgIGdsX1BSRVJFUV9QVVRFTlYKICAgZmkKICAg Z2xfU1RETElCX01PRFVMRV9JTkRJQ0FUT1IoW3B1dGVudl0pCisgIGdsX0ZVTkNfQUNMCiAg IGdsX0ZVTkNfUkVBRExJTksKICAgaWYgdGVzdCAkSEFWRV9SRUFETElOSyA9IDAgfHwgdGVz dCAkUkVQTEFDRV9SRUFETElOSyA9IDE7IHRoZW4KICAgICBBQ19MSUJPQkooW3JlYWRsaW5r XSkKQEAgLTczMyw2ICs3MzUsMTAgQEAKICAgYnVpbGQtYXV4L3NuaXBwZXQvYXJnLW5vbm51 bGwuaAogICBidWlsZC1hdXgvc25pcHBldC9jKytkZWZzLmgKICAgYnVpbGQtYXV4L3NuaXBw ZXQvd2Fybi1vbi11c2UuaAorICBsaWIvYWNsLWVycm5vLXZhbGlkLmMKKyAgbGliL2FjbC1p bnRlcm5hbC5oCisgIGxpYi9hY2wuaAorICBsaWIvYWNsX2VudHJpZXMuYwogICBsaWIvYWxs b2NhLmluLmgKICAgbGliL2FsbG9jYXRvci5jCiAgIGxpYi9hbGxvY2F0b3IuaApAQCAtNzU4 LDYgKzc2NCw3IEBACiAgIGxpYi9mY250bC5pbi5oCiAgIGxpYi9mZGF0YXN5bmMuYwogICBs aWIvZmRvcGVuZGlyLmMKKyAgbGliL2ZpbGUtaGFzLWFjbC5jCiAgIGxpYi9maWxlbW9kZS5j CiAgIGxpYi9maWxlbW9kZS5oCiAgIGxpYi9mcGVuZGluZy5jCkBAIC03OTIsNiArNzk5LDgg QEAKICAgbGliL3BzZWxlY3QuYwogICBsaWIvcHRocmVhZF9zaWdtYXNrLmMKICAgbGliL3B1 dGVudi5jCisgIGxpYi9xY29weS1hY2wuYworICBsaWIvcXNldC1hY2wuYwogICBsaWIvcmVh ZGxpbmsuYwogICBsaWIvcmVhZGxpbmthdC5jCiAgIGxpYi9yb290LXVpZC5oCkBAIC04NDMs NiArODUyLDcgQEAKICAgbGliL3ZlcmlmeS5oCiAgIGxpYi94YWxsb2Mtb3ZlcnNpemVkLmgK ICAgbTQvMDBnbnVsaWIubTQKKyAgbTQvYWNsLm00CiAgIG00L2FsbG9jYS5tNAogICBtNC9j LXN0cnRvZC5tNAogICBtNC9jbG9ja190aW1lLm00Cgo9PT0gbW9kaWZpZWQgZmlsZSAnbnQv Q2hhbmdlTG9nJwotLS0gbnQvQ2hhbmdlTG9nCTIwMTMtMDQtMDkgMDI6Mzg6NTYgKzAwMDAK KysrIG50L0NoYW5nZUxvZwkyMDEzLTA0LTE3IDA1OjIxOjMzICswMDAwCkBAIC0xLDMgKzEs OCBAQAorMjAxMy0wNC0xNyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisK KwlVc2UgR251bGliIEFDTCBpbXBsZW1lbnRhdGlvbiwgZm9yIGJlbmVmaXQgb2YgU29sYXJp cyBldGMuCisJKiBjb25maWcubnQgKEhBVkVfQUNMX1NFVF9GSUxFKTogUmVuYW1lIGZyb20g SEFWRV9QT1NJWF9BQ0wuCisKIDIwMTMtMDQtMDkgIEtlbiBCcm93biAgPGticm93bkBjb3Ju ZWxsLmVkdT4KIAogCSogZW1hY3MucmM6IFVzZSA2NC1iaXQgbWFuaWZlc3QgZm9yIDY0LWJp dCBDeWd3aW4gYnVpbGQuCgo9PT0gbW9kaWZpZWQgZmlsZSAnbnQvY29uZmlnLm50JwotLS0g bnQvY29uZmlnLm50CTIwMTMtMDMtMzAgMDc6MTA6NTggKzAwMDAKKysrIG50L2NvbmZpZy5u dAkyMDEzLTA0LTE3IDA1OjIxOjMzICswMDAwCkBAIC03NTYsNyArNzU2LDcgQEAKICN1bmRl ZiBIQVZFX1BOR19ICiAKIC8qIERlZmluZSB0byAxIGlmIHVzaW5nIFBPU0lYIEFDTCBzdXBw b3J0LiAqLwotI2RlZmluZSBIQVZFX1BPU0lYX0FDTCAxCisjZGVmaW5lIEhBVkVfQUNMX1NF VF9GSUxFIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwb3NpeF9tZW1h bGlnbicgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9QT1NJWF9NRU1BTElHTgoKPT09IG1v ZGlmaWVkIGZpbGUgJ3NyYy9DaGFuZ2VMb2cnCi0tLSBzcmMvQ2hhbmdlTG9nCTIwMTMtMDQt MjcgMjE6MTI6MTcgKzAwMDAKKysrIHNyYy9DaGFuZ2VMb2cJMjAxMy0wNC0yOCAwMDowMDox OSArMDAwMApAQCAtMSwzICsxLDEwIEBACisyMDEzLTA0LTI3ICBQYXVsIEVnZ2VydCAgPGVn Z2VydEBjcy51Y2xhLmVkdT4KKworCVVzZSBHbnVsaWIgQUNMIGltcGxlbWVudGF0aW9uLCBm b3IgYmVuZWZpdCBvZiBTb2xhcmlzIGV0Yy4KKwkqIE1ha2VmaWxlLmluIChMSUJfQUNMKTog TmV3IG1hY3JvLgorCShMSUJBQ0xfTElCUyk6IFJlbW92ZS4KKwkoTElCRVMpOiBVc2UgTElC X0FDTCwgbm90IExJQkFDTF9MSUJTLgorCiAyMDEzLTA0LTI3ICBKdXJpIExpbmtvdiAgPGp1 cmlAanVydGEub3JnPgogCiAJKiBjYWxsaW50LmMgKEZjYWxsX2ludGVyYWN0aXZlbHkpOiBD YWxsIGBRcmVhZF9udW1iZXInIGZvcgoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9NYWtlZmls ZS5pbicKLS0tIHNyYy9NYWtlZmlsZS5pbgkyMDEzLTA0LTIyIDA1OjE4OjMwICswMDAwCisr KyBzcmMvTWFrZWZpbGUuaW4JMjAxMy0wNC0yNyAxOTo0MDo0OSArMDAwMApAQCAtMTM3LDYg KzEzNyw3IEBACiBNMTdOX0ZMVF9DRkxBR1MgPSBATTE3Tl9GTFRfQ0ZMQUdTQAogTTE3Tl9G TFRfTElCUyA9IEBNMTdOX0ZMVF9MSUJTQAogCitMSUJfQUNMPUBMSUJfQUNMQAogTElCX0NM T0NLX0dFVFRJTUU9QExJQl9DTE9DS19HRVRUSU1FQAogTElCX0VBQ0NFU1M9QExJQl9FQUND RVNTQAogTElCX0ZEQVRBU1lOQz1ATElCX0ZEQVRBU1lOQ0AKQEAgLTI4Miw4ICsyODMsNiBA QAogTElCR05VVExTX0xJQlMgPSBATElCR05VVExTX0xJQlNACiBMSUJHTlVUTFNfQ0ZMQUdT ID0gQExJQkdOVVRMU19DRkxBR1NACiAKLUxJQkFDTF9MSUJTID0gQExJQkFDTF9MSUJTQAot CiBMSUJfUFRIUkVBRF9TSUdNQVNLID0gQExJQl9QVEhSRUFEX1NJR01BU0tACiAKIElOVEVS VkFMU19IID0gZGlzcGV4dGVybi5oIGludGVydmFscy5oIGNvbXBvc2l0ZS5oCkBAIC0zOTEs MTMgKzM5MCwxMyBAQAogIyMgQ29uc3RydWN0IGZ1bGwgc2V0IG9mIGxpYnJhcmllcyB0byBi ZSBsaW5rZWQuCiBMSUJFUyA9ICQoTElCUykgJChXMzJfTElCUykgJChMSUJTX0dOVVNURVAp ICQoTElCWF9CQVNFKSAkKExJQklNQUdFKSBcCiAgICAkKExJQlhfT1RIRVIpICQoTElCU09V TkQpIFwKLSAgICQoUlNWR19MSUJTKSAkKElNQUdFTUFHSUNLX0xJQlMpICQoTElCX0NMT0NL X0dFVFRJTUUpIFwKKyAgICQoUlNWR19MSUJTKSAkKElNQUdFTUFHSUNLX0xJQlMpICQoTElC X0FDTCkgJChMSUJfQ0xPQ0tfR0VUVElNRSkgXAogICAgJChMSUJfRUFDQ0VTUykgJChMSUJf RkRBVEFTWU5DKSAkKExJQl9USU1FUl9USU1FKSAkKERCVVNfTElCUykgXAogICAgJChMSUJf RVhFQ0lORk8pIFwKICAgICQoTElCWE1MMl9MSUJTKSAkKExJQkdQTSkgJChMSUJSRVNPTFYp ICQoTElCU19TWVNURU0pIFwKICAgICQoTElCU19URVJNQ0FQKSAkKEdFVExPQURBVkdfTElC UykgJChTRVRUSU5HU19MSUJTKSAkKExJQlNFTElOVVhfTElCUykgXAogICAgJChGUkVFVFlQ RV9MSUJTKSAkKEZPTlRDT05GSUdfTElCUykgJChMSUJPVEZfTElCUykgJChNMTdOX0ZMVF9M SUJTKSBcCi0gICAkKExJQkFDTF9MSUJTKSAkKExJQkdOVVRMU19MSUJTKSAkKExJQl9QVEhS RUFEKSAkKExJQl9QVEhSRUFEX1NJR01BU0spIFwKKyAgICQoTElCR05VVExTX0xJQlMpICQo TElCX1BUSFJFQUQpICQoTElCX1BUSFJFQURfU0lHTUFTSykgXAogICAgJChMSUJfTUFUSCkK IAogYWxsOiBlbWFjcyQoRVhFRVhUKSAkKE9USEVSX0ZJTEVTKQoKPT09IG1vZGlmaWVkIGZp bGUgJ3NyYy9maWxlaW8uYycKLS0tIHNyYy9maWxlaW8uYwkyMDEzLTA0LTA3IDE2OjE4OjQx ICswMDAwCisrKyBzcmMvZmlsZWlvLmMJMjAxMy0wNC0xNyAwNToyMTozMyArMDAwMApAQCAt MzYsNyArMzYsNyBAQAogI2luY2x1ZGUgPHNlbGludXgvY29udGV4dC5oPgogI2VuZGlmCiAK LSNpZmRlZiBIQVZFX1BPU0lYX0FDTAorI2lmZGVmIEhBVkVfQUNMX1NFVF9GSUxFCiAjaW5j bHVkZSA8c3lzL2FjbC5oPgogI2VuZGlmCiAKQEAgLTgxLDI2ICs4MSw4IEBACiAjZGVmaW5l IERSSVZFX0xFVFRFUih4KSBjX3RvbG93ZXIgKHgpCiAjZW5kaWYKIAotI2lmZGVmIEhBVkVf UE9TSVhfQUNMCi0vKiBGSVhNRTogdGhpcyBtYWNybyB3YXMgY29waWVkIGZyb20gZ251bGli J3MgcHJpdmF0ZSBhY2wtaW50ZXJuYWwuaAotICAgaGVhZGVyIGZpbGUuICAqLwotLyogUmVj b2duaXplIHNvbWUgY29tbW9uIGVycm9ycyBzdWNoIGFzIGZyb20gYW4gTkZTIG1vdW50IHRo YXQgZG9lcwotICAgbm90IHN1cHBvcnQgQUNMcywgZXZlbiB3aGVuIGxvY2FsIGRyaXZlcyBk by4gICovCi0jaWYgZGVmaW5lZCBfX0FQUExFX18gJiYgZGVmaW5lZCBfX01BQ0hfXyAvKiBN YWMgT1MgWCAqLwotI2RlZmluZSBBQ0xfTk9UX1dFTExfU1VQUE9SVEVEKEVycikJCQkJCVwK LSAgKChFcnIpID09IEVOT1RTVVAgfHwgKEVycikgPT0gRU5PU1lTIHx8IChFcnIpID09IEVJ TlZBTCB8fCAoRXJyKSA9PSBFQlVTWSB8fCAoRXJyKSA9PSBFTk9FTlQpCi0jZWxpZiBkZWZp bmVkIEVPUE5PVFNVUFAgLyogVHJ1NjQgTkZTICovCi0jZGVmaW5lIEFDTF9OT1RfV0VMTF9T VVBQT1JURUQoRXJyKQkJCQkJXAotICAoKEVycikgPT0gRU5PVFNVUCB8fCAoRXJyKSA9PSBF Tk9TWVMgfHwgKEVycikgPT0gRUlOVkFMIHx8IChFcnIpID09IEVCVVNZIHx8IChFcnIpID09 IEVPUE5PVFNVUFApCi0jZWxpZiBkZWZpbmVkIFdJTkRPV1NOVAotI2RlZmluZSBBQ0xfTk9U X1dFTExfU1VQUE9SVEVEKEVycikgICgoRXJyKSA9PSBFTk9UU1VQKQotI2Vsc2UKLSNkZWZp bmUgQUNMX05PVF9XRUxMX1NVUFBPUlRFRChFcnIpCQkJCQlcCi0gICgoRXJyKSA9PSBFTk9U U1VQIHx8IChFcnIpID09IEVOT1NZUyB8fCAoRXJyKSA9PSBFSU5WQUwgfHwgKEVycikgPT0g RUJVU1kpCi0jZW5kaWYKLSNlbmRpZgkvKiBIQVZFX1BPU0lYX0FDTCAqLwotCiAjaW5jbHVk ZSAic3lzdGltZS5oIgorI2luY2x1ZGUgPGFjbC5oPgogI2luY2x1ZGUgPGFsbG9jYXRvci5o PgogI2luY2x1ZGUgPGNhcmVhZGxpbmthdC5oPgogI2luY2x1ZGUgPHN0YXQtdGltZS5oPgpA QCAtMTk4OCw5ICsxOTcwLDYgQEAKICAgc2VjdXJpdHlfY29udGV4dF90IGNvbjsKICAgaW50 IGNvbmxlbmd0aCA9IDA7CiAjZW5kaWYKLSNpZmRlZiBIQVZFX1BPU0lYX0FDTAotICBhY2xf dCBhY2wgPSBOVUxMOwotI2VuZGlmCiAKICAgZW5jb2RlZF9maWxlID0gZW5jb2RlZF9uZXdu YW1lID0gUW5pbDsKICAgR0NQUk80IChmaWxlLCBuZXduYW1lLCBlbmNvZGVkX2ZpbGUsIGVu Y29kZWRfbmV3bmFtZSk7CkBAIC0yMDI2LDE0ICsyMDA1LDYgQEAKICAgICBvdXRfc3Quc3Rf bW9kZSA9IDA7CiAKICNpZmRlZiBXSU5ET1dTTlQKLSAgaWYgKCFOSUxQIChwcmVzZXJ2ZV9l eHRlbmRlZF9hdHRyaWJ1dGVzKSkKLSAgICB7Ci0jaWZkZWYgSEFWRV9QT1NJWF9BQ0wKLSAg ICAgIGFjbCA9IGFjbF9nZXRfZmlsZSAoU0RBVEEgKGVuY29kZWRfZmlsZSksIEFDTF9UWVBF X0FDQ0VTUyk7Ci0gICAgICBpZiAoYWNsID09IE5VTEwgJiYgIUFDTF9OT1RfV0VMTF9TVVBQ T1JURUQgKGVycm5vKSkKLQlyZXBvcnRfZmlsZV9lcnJvciAoIkdldHRpbmcgQUNMIiwgRmNv bnMgKGZpbGUsIFFuaWwpKTsKLSNlbmRpZgotICAgIH0KICAgaWYgKCFDb3B5RmlsZSAoU0RB VEEgKGVuY29kZWRfZmlsZSksCiAJCSBTREFUQSAoZW5jb2RlZF9uZXduYW1lKSwKIAkJIEZB TFNFKSkKQEAgLTIwNjksMTcgKzIwNDAsNiBAQAogICAgICAgLyogUmVzdG9yZSBvcmlnaW5h bCBhdHRyaWJ1dGVzLiAgKi8KICAgICAgIFNldEZpbGVBdHRyaWJ1dGVzIChmaWxlbmFtZSwg YXR0cmlidXRlcyk7CiAgICAgfQotI2lmZGVmIEhBVkVfUE9TSVhfQUNMCi0gIGlmIChhY2wg IT0gTlVMTCkKLSAgICB7Ci0gICAgICBib29sIGZhaWwgPQotCWFjbF9zZXRfZmlsZSAoU0RB VEEgKGVuY29kZWRfbmV3bmFtZSksIEFDTF9UWVBFX0FDQ0VTUywgYWNsKSAhPSAwOwotICAg ICAgaWYgKGZhaWwgJiYgIUFDTF9OT1RfV0VMTF9TVVBQT1JURUQgKGVycm5vKSkKLQlyZXBv cnRfZmlsZV9lcnJvciAoIlNldHRpbmcgQUNMIiwgRmNvbnMgKG5ld25hbWUsIFFuaWwpKTsK LQotICAgICAgYWNsX2ZyZWUgKGFjbCk7Ci0gICAgfQotI2VuZGlmCiAjZWxzZSAvKiBub3Qg V0lORE9XU05UICovCiAgIGltbWVkaWF0ZV9xdWl0ID0gMTsKICAgaWZkID0gZW1hY3Nfb3Bl biAoU1NEQVRBIChlbmNvZGVkX2ZpbGUpLCBPX1JET05MWSwgMCk7CkBAIC0yMTAzLDEyICsy MDYzLDYgQEAKIAkgICAgcmVwb3J0X2ZpbGVfZXJyb3IgKCJEb2luZyBmZ2V0ZmlsZWNvbiIs IEZjb25zIChmaWxlLCBRbmlsKSk7CiAJfQogI2VuZGlmCi0KLSNpZmRlZiBIQVZFX1BPU0lY X0FDTAotICAgICAgYWNsID0gYWNsX2dldF9mZCAoaWZkKTsKLSAgICAgIGlmIChhY2wgPT0g TlVMTCAmJiAhQUNMX05PVF9XRUxMX1NVUFBPUlRFRCAoZXJybm8pKQotCXJlcG9ydF9maWxl X2Vycm9yICgiR2V0dGluZyBBQ0wiLCBGY29ucyAoZmlsZSwgUW5pbCkpOwotI2VuZGlmCiAg ICAgfQogCiAgIGlmIChvdXRfc3Quc3RfbW9kZSAhPSAwCkBAIC0yMTU2LDcgKzIxMTAsNyBA QAogICBpbW1lZGlhdGVfcXVpdCA9IDA7CiAKICNpZm5kZWYgTVNET1MKLSAgLyogUHJlc2Vy dmUgdGhlIG9yaWdpbmFsIGZpbGUgbW9kZXMsIGFuZCBpZiByZXF1ZXN0ZWQsIGFsc28gaXRz CisgIC8qIFByZXNlcnZlIHRoZSBvcmlnaW5hbCBmaWxlIHBlcm1pc3Npb25zLCBhbmQgaWYg cmVxdWVzdGVkLCBhbHNvIGl0cwogICAgICBvd25lciBhbmQgZ3JvdXAuICAqLwogICB7CiAg ICAgbW9kZV90IG1vZGVfbWFzayA9IDA3Nzc3OwpAQCAtMjE3Myw4ICsyMTI3LDE2IEBACiAJ ICAgICAgbW9kZV9tYXNrIHw9IDAyMDAwOwogCSAgfQogICAgICAgfQotICAgIGlmIChmY2ht b2QgKG9mZCwgc3Quc3RfbW9kZSAmIG1vZGVfbWFzaykgIT0gMCkKLSAgICAgIHJlcG9ydF9m aWxlX2Vycm9yICgiRG9pbmcgY2htb2QiLCBGY29ucyAobmV3bmFtZSwgUW5pbCkpOworCisg ICAgc3dpdGNoICghTklMUCAocHJlc2VydmVfZXh0ZW5kZWRfYXR0cmlidXRlcykKKwkgICAg PyBxY29weV9hY2wgKFNTREFUQSAoZW5jb2RlZF9maWxlKSwgaWZkLAorCQkJIFNTREFUQSAo ZW5jb2RlZF9uZXduYW1lKSwgb2ZkLAorCQkJIHN0LnN0X21vZGUgJiBtb2RlX21hc2spCisJ ICAgIDogZmNobW9kIChvZmQsIHN0LnN0X21vZGUgJiBtb2RlX21hc2spKQorICAgICAgewor ICAgICAgY2FzZSAtMjogcmVwb3J0X2ZpbGVfZXJyb3IgKCJDb3B5aW5nIHBlcm1pc3Npb25z IGZyb20iLCBsaXN0MSAoZmlsZSkpOworICAgICAgY2FzZSAtMTogcmVwb3J0X2ZpbGVfZXJy b3IgKCJDb3B5aW5nIHBlcm1pc3Npb25zIHRvIiwgbGlzdDEgKG5ld25hbWUpKTsKKyAgICAg IH0KICAgfQogI2VuZGlmCS8qIG5vdCBNU0RPUyAqLwogCkBAIC0yMTkxLDE3ICsyMTUzLDYg QEAKICAgICB9CiAjZW5kaWYKIAotI2lmZGVmIEhBVkVfUE9TSVhfQUNMCi0gIGlmIChhY2wg IT0gTlVMTCkKLSAgICB7Ci0gICAgICBib29sIGZhaWwgPSBhY2xfc2V0X2ZkIChvZmQsIGFj bCkgIT0gMDsKLSAgICAgIGlmIChmYWlsICYmICFBQ0xfTk9UX1dFTExfU1VQUE9SVEVEIChl cnJubykpCi0JcmVwb3J0X2ZpbGVfZXJyb3IgKCJTZXR0aW5nIEFDTCIsIEZjb25zIChuZXdu YW1lLCBRbmlsKSk7Ci0KLSAgICAgIGFjbF9mcmVlIChhY2wpOwotICAgIH0KLSNlbmRpZgot CiAgIGlmICghTklMUCAoa2VlcF90aW1lKSkKICAgICB7CiAgICAgICBFTUFDU19USU1FIGF0 aW1lID0gZ2V0X3N0YXRfYXRpbWUgKCZzdCk7CkBAIC0zMTExLDcgKzMwNjIsNyBAQAogewog ICBMaXNwX09iamVjdCBhYnNuYW1lOwogICBMaXNwX09iamVjdCBoYW5kbGVyOwotI2lmZGVm IEhBVkVfUE9TSVhfQUNMCisjaWZkZWYgSEFWRV9BQ0xfU0VUX0ZJTEUKICAgYWNsX3QgYWNs OwogICBMaXNwX09iamVjdCBhY2xfc3RyaW5nOwogICBjaGFyICpzdHI7CkBAIC0zMTI2LDcg KzMwNzcsNyBAQAogICBpZiAoIU5JTFAgKGhhbmRsZXIpKQogICAgIHJldHVybiBjYWxsMiAo aGFuZGxlciwgUWZpbGVfYWNsLCBhYnNuYW1lKTsKIAotI2lmZGVmIEhBVkVfUE9TSVhfQUNM CisjaWZkZWYgSEFWRV9BQ0xfU0VUX0ZJTEUKICAgYWJzbmFtZSA9IEVOQ09ERV9GSUxFIChh YnNuYW1lKTsKIAogICBhY2wgPSBhY2xfZ2V0X2ZpbGUgKFNTREFUQSAoYWJzbmFtZSksIEFD TF9UWVBFX0FDQ0VTUyk7CkBAIC0zMTY0LDcgKzMxMTUsNyBAQAogewogICBMaXNwX09iamVj dCBhYnNuYW1lOwogICBMaXNwX09iamVjdCBoYW5kbGVyOwotI2lmZGVmIEhBVkVfUE9TSVhf QUNMCisjaWZkZWYgSEFWRV9BQ0xfU0VUX0ZJTEUKICAgTGlzcF9PYmplY3QgZW5jb2RlZF9h YnNuYW1lOwogICBhY2xfdCBhY2w7CiAgIGJvb2wgZmFpbDsKQEAgLTMxNzgsNyArMzEyOSw3 IEBACiAgIGlmICghTklMUCAoaGFuZGxlcikpCiAgICAgcmV0dXJuIGNhbGwzIChoYW5kbGVy LCBRc2V0X2ZpbGVfYWNsLCBhYnNuYW1lLCBhY2xfc3RyaW5nKTsKIAotI2lmZGVmIEhBVkVf UE9TSVhfQUNMCisjaWZkZWYgSEFWRV9BQ0xfU0VUX0ZJTEUKICAgaWYgKFNUUklOR1AgKGFj bF9zdHJpbmcpKQogICAgIHsKICAgICAgIGFjbCA9IGFjbF9mcm9tX3RleHQgKFNTREFUQSAo YWNsX3N0cmluZykpOwpAQCAtMzE5Myw3ICszMTQ0LDcgQEAKICAgICAgIGZhaWwgPSAoYWNs X3NldF9maWxlIChTU0RBVEEgKGVuY29kZWRfYWJzbmFtZSksIEFDTF9UWVBFX0FDQ0VTUywK IAkJCSAgICBhY2wpCiAJICAgICAgIT0gMCk7Ci0gICAgICBpZiAoZmFpbCAmJiAhQUNMX05P VF9XRUxMX1NVUFBPUlRFRCAoZXJybm8pKQorICAgICAgaWYgKGZhaWwgJiYgYWNsX2Vycm5v X3ZhbGlkIChlcnJubykpCiAJcmVwb3J0X2ZpbGVfZXJyb3IgKCJTZXR0aW5nIEFDTCIsIEZj b25zIChhYnNuYW1lLCBRbmlsKSk7CiAKICAgICAgIGFjbF9mcmVlIChhY2wpOwoK --------------060902070705010703000507-- From unknown Tue Jun 24 05:11:12 2025 X-Loop: help-debbugs@gnu.org Subject: bug#14295: Support copy-file ACLs for Solaris etc. Resent-From: Eli Zaretskii Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 28 Apr 2013 17:18:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 14295 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: Paul Eggert Cc: 14295@debbugs.gnu.org X-Debbugs-Original-Cc: bug-gnu-emacs@gnu.org Reply-To: Eli Zaretskii Received: via spool by submit@debbugs.gnu.org id=B.136716946616764 (code B ref -1); Sun, 28 Apr 2013 17:18:01 +0000 Received: (at submit) by debbugs.gnu.org; 28 Apr 2013 17:17:46 +0000 Received: from localhost ([127.0.0.1]:48747 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1UWVEP-0004ML-Oz for submit@debbugs.gnu.org; Sun, 28 Apr 2013 13:17:46 -0400 Received: from eggs.gnu.org ([208.118.235.92]:39446) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1UWVEM-0004MD-F0 for submit@debbugs.gnu.org; Sun, 28 Apr 2013 13:17:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UWVE8-0004yX-02 for submit@debbugs.gnu.org; Sun, 28 Apr 2013 13:17:29 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=-101.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_NONE, USER_IN_WHITELIST autolearn=disabled version=3.3.2 Received: from lists.gnu.org ([208.118.235.17]:33168) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UWVE7-0004yS-Sr for submit@debbugs.gnu.org; Sun, 28 Apr 2013 13:17:27 -0400 Received: from eggs.gnu.org ([208.118.235.92]:50798) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UWVE6-0005vD-2C for bug-gnu-emacs@gnu.org; Sun, 28 Apr 2013 13:17:27 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UWVE4-0004wX-Pw for bug-gnu-emacs@gnu.org; Sun, 28 Apr 2013 13:17:26 -0400 Received: from mtaout22.012.net.il ([80.179.55.172]:35791) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UWVE4-0004wM-IQ for bug-gnu-emacs@gnu.org; Sun, 28 Apr 2013 13:17:24 -0400 Received: from conversion-daemon.a-mtaout22.012.net.il by a-mtaout22.012.net.il (HyperSendmail v2007.08) id <0MLZ00I006FP4900@a-mtaout22.012.net.il> for bug-gnu-emacs@gnu.org; Sun, 28 Apr 2013 20:16:40 +0300 (IDT) Received: from HOME-C4E4A596F7 ([87.69.4.28]) by a-mtaout22.012.net.il (HyperSendmail v2007.08) with ESMTPA id <0MLZ00H8G6NRJGE0@a-mtaout22.012.net.il>; Sun, 28 Apr 2013 20:16:40 +0300 (IDT) Date: Sun, 28 Apr 2013 20:16:29 +0300 From: Eli Zaretskii In-reply-to: <517C987F.6060902@cs.ucla.edu> X-012-Sender: halo1@inter.net.il Message-id: <83ehdushhu.fsf@gnu.org> References: <517C987F.6060902@cs.ucla.edu> X-detected-operating-system: by eggs.gnu.org: Solaris 10 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 208.118.235.17 X-Spam-Score: -9.3 (---------) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -9.3 (---------) > Date: Sat, 27 Apr 2013 20:33:19 -0700 > From: Paul Eggert > CC: Eli Zaretskii > > Recently copy-file was augmented to add support for > copying ACLs on abandoned-POSIX-style hosts. Here's > an additional patch to add support for copying ACLs on > Solaris, HP-UX, etc. Basically, the idea is to use > Gnulib's support for ACLs. I've tested this on > GNU/Linux and Solaris, but not on Microsoft platforms, > and am CC'ing this to Eli as a heads-up for that. Thanks; see a few comments below. > This changes the 'configure' option from --without-acl to > --disable-acl if one wishes to disable ACL support when > configuring Emacs; this is the option spelling that other GNU > packages use. How hard would it to support both? > +bool > +acl_errno_valid (int errnum) > +{ > + /* Recognize some common errors such as from an NFS mount that does > + not support ACLs, even when local drives do. */ > + switch (errnum) > + { > + case EBUSY: return false; > + case EINVAL: return false; > +#if defined __APPLE__ && defined __MACH__ > + case ENOENT: return false; > +#endif > + case ENOSYS: return false; > +#if defined ENOTSUP && ENOTSUP != EOPNOTSUPP > + case ENOTSUP: return false; > +#endif > + case EOPNOTSUPP: return false; > + default: return true; > + } > +} This uses EOPNOTSUPP without #ifdef guards; is that universally available? > #ifdef WINDOWSNT > - if (!NILP (preserve_extended_attributes)) > - { > -#ifdef HAVE_POSIX_ACL > - acl = acl_get_file (SDATA (encoded_file), ACL_TYPE_ACCESS); > - if (acl == NULL && !ACL_NOT_WELL_SUPPORTED (errno)) > - report_file_error ("Getting ACL", Fcons (file, Qnil)); > -#endif > - } > if (!CopyFile (SDATA (encoded_file), > SDATA (encoded_newname), > FALSE)) > @@ -2069,17 +2040,6 @@ > /* Restore original attributes. */ > SetFileAttributes (filename, attributes); > } > -#ifdef HAVE_POSIX_ACL > - if (acl != NULL) > - { > - bool fail = > - acl_set_file (SDATA (encoded_newname), ACL_TYPE_ACCESS, acl) != 0; > - if (fail && !ACL_NOT_WELL_SUPPORTED (errno)) > - report_file_error ("Setting ACL", Fcons (newname, Qnil)); > - > - acl_free (acl); > - } > -#endif > #else /* not WINDOWSNT */ > immediate_quit = 1; > ifd = emacs_open (SSDATA (encoded_file), O_RDONLY, 0); > @@ -2103,12 +2063,6 @@ > report_file_error ("Doing fgetfilecon", Fcons (file, Qnil)); > } > #endif > - > -#ifdef HAVE_POSIX_ACL > - acl = acl_get_fd (ifd); > - if (acl == NULL && !ACL_NOT_WELL_SUPPORTED (errno)) > - report_file_error ("Getting ACL", Fcons (file, Qnil)); > -#endif > } > > if (out_st.st_mode != 0 > @@ -2156,7 +2110,7 @@ > immediate_quit = 0; > > #ifndef MSDOS > - /* Preserve the original file modes, and if requested, also its > + /* Preserve the original file permissions, and if requested, also its > owner and group. */ > { > mode_t mode_mask = 07777; > @@ -2173,8 +2127,16 @@ > mode_mask |= 02000; > } > } > - if (fchmod (ofd, st.st_mode & mode_mask) != 0) > - report_file_error ("Doing chmod", Fcons (newname, Qnil)); > + > + switch (!NILP (preserve_extended_attributes) > + ? qcopy_acl (SSDATA (encoded_file), ifd, > + SSDATA (encoded_newname), ofd, > + st.st_mode & mode_mask) > + : fchmod (ofd, st.st_mode & mode_mask)) > + { > + case -2: report_file_error ("Copying permissions from", list1 (file)); > + case -1: report_file_error ("Copying permissions to", list1 (newname)); > + } > } > #endif /* not MSDOS */ This hunk looks wrong, or maybe I'm missing something: it looks like you removed the ACL support code from the WINDOWSNT blocks, but added the replacement qcopy_acl in a block that is not compiled on Windows at all (and uses fchmod and st which are not initialized on Windows). If I'm right, perhaps it is best to leave the WINDOWSNT parts alone: since acl_get_file and acl_set_file are still being left in Emacs sources elsewhere, there's no need to remove their calls here, and leaving them alone will avoid the need to add qcopy_acl to w32.c. > -#ifdef HAVE_POSIX_ACL > +#ifdef HAVE_ACL_SET_FILE > absname = ENCODE_FILE (absname); > > acl = acl_get_file (SSDATA (absname), ACL_TYPE_ACCESS); It sounds wrong to me to condition a call to acl_get_file with a macro called HAVE_ACL_SET_FILE. > @@ -3193,7 +3144,7 @@ > fail = (acl_set_file (SSDATA (encoded_absname), ACL_TYPE_ACCESS, > acl) > != 0); > - if (fail && !ACL_NOT_WELL_SUPPORTED (errno)) > + if (fail && acl_errno_valid (errno)) For this to work, acl-errno-valid.c will have to be compiled on MS-Windows. And for that, we will need to solve the EOPNOTSUPP issue mentioned above, because Windows doesn't define it. From unknown Tue Jun 24 05:11:12 2025 X-Loop: help-debbugs@gnu.org Subject: bug#14295: Support copy-file ACLs for Solaris etc. Resent-From: Paul Eggert Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 29 Apr 2013 06:16:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 14295 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: Eli Zaretskii Cc: 14295@debbugs.gnu.org X-Debbugs-Original-Cc: bug-gnu-emacs@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.136721616124268 (code B ref -1); Mon, 29 Apr 2013 06:16:01 +0000 Received: (at submit) by debbugs.gnu.org; 29 Apr 2013 06:16:01 +0000 Received: from localhost ([127.0.0.1]:49382 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1UWhNY-0006JL-VY for submit@debbugs.gnu.org; Mon, 29 Apr 2013 02:16:01 -0400 Received: from eggs.gnu.org ([208.118.235.92]:35543) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1UWhNW-0006JC-Fl for submit@debbugs.gnu.org; Mon, 29 Apr 2013 02:15:58 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UWhN8-000456-B4 for submit@debbugs.gnu.org; Mon, 29 Apr 2013 02:15:42 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=-103.9 required=5.0 tests=BAYES_50, RCVD_IN_DNSWL_MED, RP_MATCHES_RCVD,USER_IN_WHITELIST autolearn=disabled version=3.3.2 Received: from lists.gnu.org ([208.118.235.17]:47915) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UWhN8-000452-64 for submit@debbugs.gnu.org; Mon, 29 Apr 2013 02:15:34 -0400 Received: from eggs.gnu.org ([208.118.235.92]:46865) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UWhMx-0006DJ-Ga for bug-gnu-emacs@gnu.org; Mon, 29 Apr 2013 02:15:34 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UWhMo-00043R-Ge for bug-gnu-emacs@gnu.org; Mon, 29 Apr 2013 02:15:23 -0400 Received: from smtp.cs.ucla.edu ([131.179.128.62]:46258) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UWhMn-00043I-Ju; Mon, 29 Apr 2013 02:15:14 -0400 Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id 8FE43A60002; Sun, 28 Apr 2013 23:15:12 -0700 (PDT) X-Virus-Scanned: amavisd-new at smtp.cs.ucla.edu Received: from smtp.cs.ucla.edu ([127.0.0.1]) by localhost (smtp.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Q5dEsSAGPguk; Sun, 28 Apr 2013 23:15:07 -0700 (PDT) Received: from [192.168.1.9] (pool-71-189-154-249.lsanca.fios.verizon.net [71.189.154.249]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id 1628D39E8008; Sun, 28 Apr 2013 23:15:07 -0700 (PDT) Message-ID: <517E0FEA.2000500@cs.ucla.edu> Date: Sun, 28 Apr 2013 23:15:06 -0700 From: Paul Eggert Organization: UCLA Computer Science Department User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130404 Thunderbird/17.0.5 MIME-Version: 1.0 References: <517C987F.6060902@cs.ucla.edu> <83ehdushhu.fsf@gnu.org> In-Reply-To: <83ehdushhu.fsf@gnu.org> Content-Type: multipart/mixed; boundary="------------040804070600040302090506" X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 208.118.235.17 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org This is a multi-part message in MIME format. --------------040804070600040302090506 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit > How hard would it to support both? I don't know, and I'd rather not support --without-acl. This should have been an --enable/--disable option in the first place, as it's enabling or disabling a feature, not building with or without a package. There's little point to Emacs departing from existing GNU practice here. > This uses EOPNOTSUPP without #ifdef guards; is that universally > available? Mostly, except for Windows, but to play it safe we can incorporate the Gnulib errno module, which defines EOPNOTSUPP if it's not already defined. > If I'm right, perhaps it is best to leave the WINDOWSNT parts alone: Sure, we can do that. > It sounds wrong to me to condition a call to acl_get_file with a macro > called HAVE_ACL_SET_FILE. In practice both are available if either is; in particular, there's no point calling acl_get_file if you can't invoke acl_set_file later. > For this to work, acl-errno-valid.c will have to be compiled on > MS-Windows. And for that, we will need to solve the EOPNOTSUPP issue > mentioned above, because Windows doesn't define it. OK. Revised patch attached, which tries to address the above. It relies on Gnulib for EOPNOTSUPP, except for WINDOWSNT where 'configure' isn't working yet, and there it adds a line to nt/config.nt to deal with this until we get 'configure' working. --------------040804070600040302090506 Content-Type: text/plain; charset=UTF-8; name="acl.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="acl.txt" PT09IG1vZGlmaWVkIGZpbGUgJ0NoYW5nZUxvZycKLS0tIENoYW5nZUxvZwkyMDEzLTA0LTI5 IDA0OjQ4OjMwICswMDAwCisrKyBDaGFuZ2VMb2cJMjAxMy0wNC0yOSAwNjowNzo0MiArMDAw MApAQCAtMSw1ICsxLDE5IEBACiAyMDEzLTA0LTI5ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBj cy51Y2xhLmVkdT4KIAorCVVzZSBHbnVsaWIgQUNMIGltcGxlbWVudGF0aW9uLCBmb3IgYmVu ZWZpdCBvZiBTb2xhcmlzIGV0Yy4gKEJ1ZyMxNDI5NSkKKwkqIGNvbmZpZ3VyZS5hYzogUmVt b3ZlIC13aXRoLWFjbCBvcHRpb24sIHNpbmNlIEdudWxpYiBkb2VzIHRoYXQgZm9yCisJdXMg bm93LgorCShMSUJBQ0xfTElCUyk6IFJlbW92ZTsgbm8gbG9uZ2VyIG5lZWRlZC4KKwkqIGxp Yi9NYWtlZmlsZS5hbSAoQ0xFQU5GSUxFUywgU1VGRklYRVMpOiBOZXcgKGVtcHR5KSBtYWNy b3MsCisJZm9yIHRoZSBiZW5lZml0IG9mIHRoZSBuZXcgQUNMIGltcGxlbWVudGF0aW9uLgor CSogbGliL21ha2VmaWxlLnczMi1pbiAoR05VTElCT0JKUyk6IEFkZCAkKEJMRCkvYWNsLWVy cm5vLXZhbGlkLiQoTykuCisJKCQoQkxEKS9hY2wtZXJybm8tdmFsaWQuJChPKSk6IE5ldyBy dWxlLgorCSogbGliL2FjbC1lcnJuby12YWxpZC5jLCBsaWIvYWNsLWludGVybmFsLmgsIGxp Yi9hY2wuaDoKKwkqIGxpYi9hY2xfZW50cmllcy5jLCBsaWIvZXJybm8uaW4uaCwgbGliL2Zp bGUtaGFzLWFjbC5jOgorCSogbGliL3Fjb3B5LWFjbC5jLCBsaWIvcXNldC1hY2wuYywgbTQv YWNsLm00LCBtNC9lcnJub19oLm00OgorCU5ldyBmaWxlcywgdGFrZW4gZnJvbSBnbnVsaWIu CisJKiBsaWIvZ251bGliLm1rLCBtNC9nbnVsaWItY29tcC5tNDogUmVnZW5lcmF0ZS4KKwog CU1lcmdlIGZyb20gZ251bGliLCBpbmNvcnBvcmF0aW5nOgogCTIwMTMtMDQtMjggZXh0ZXJu LWlubGluZTogd29yayBhcm91bmQgYnVnIGluIFN1biBjOTkKIAoKPT09IG1vZGlmaWVkIGZp bGUgJ2FkbWluL0NoYW5nZUxvZycKLS0tIGFkbWluL0NoYW5nZUxvZwkyMDEzLTA0LTAyIDAx OjE4OjQwICswMDAwCisrKyBhZG1pbi9DaGFuZ2VMb2cJMjAxMy0wNC0yOSAwNjowNzo0MiAr MDAwMApAQCAtMSwzICsxLDkgQEAKKzIwMTMtMDQtMjkgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0 QGNzLnVjbGEuZWR1PgorCisJVXNlIEdudWxpYiBBQ0wgaW1wbGVtZW50YXRpb24sIGZvciBi ZW5lZml0IG9mIFNvbGFyaXMgZXRjLiAoQnVnIzE0Mjk1KQorCSogbWVyZ2UtZ251bGliIChH TlVMSUJfTU9EVUxFUyk6IEFkZCBxYWNsLgorCShHTlVMSUJfVE9PTF9GTEFHUyk6IERvIG5v dCBhdm9pZCBlcnJuby4KKwogMjAxMy0wNC0wMSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3Mu dWNsYS5lZHU+CiAKIAlVc2UgVVRGLTggZm9yIG1vc3QgZmlsZXMgd2l0aCBub24tQVNDSUkg Y2hhcmFjdGVycyAoQnVnIzEzOTM2KS4KCj09PSBtb2RpZmllZCBmaWxlICdhZG1pbi9tZXJn ZS1nbnVsaWInCi0tLSBhZG1pbi9tZXJnZS1nbnVsaWIJMjAxMy0wMy0xMyAxODo0MjoyMiAr MDAwMAorKysgYWRtaW4vbWVyZ2UtZ251bGliCTIwMTMtMDQtMjkgMDY6MDc6NDIgKzAwMDAK QEAgLTMzLDcgKzMzLDcgQEAKICAgZ2V0bG9hZGF2ZyBnZXRvcHQtZ251IGdldHRpbWUgZ2V0 dGltZW9mZGF5CiAgIGlnbm9yZS12YWx1ZSBpbnRwcm9wcyBsYXJnZWZpbGUgbHN0YXQKICAg bWFueXdhcm5pbmdzIG1lbXJjaHIgbWt0aW1lCi0gIHBzZWxlY3QgcHRocmVhZF9zaWdtYXNr IHB1dGVudiByZWFkbGluayByZWFkbGlua2F0CisgIHBzZWxlY3QgcHRocmVhZF9zaWdtYXNr IHB1dGVudiBxYWNsIHJlYWRsaW5rIHJlYWRsaW5rYXQKICAgc2lnMnN0ciBzb2NrbGVuIHN0 YXQtdGltZSBzdGRhbGlnbiBzdGRhcmcgc3RkYm9vbCBzdGRpbwogICBzdHJmdGltZSBzdHJ0 b2ltYXggc3RydG91bWF4IHN5bWxpbmsgc3lzX3N0YXQKICAgc3lzX3RpbWUgdGltZSB0aW1l ci10aW1lIHRpbWVzcGVjLWFkZCB0aW1lc3BlYy1zdWIgdW5zZXRlbnYgdXRpbWVucwpAQCAt NDIsNyArNDIsNyBAQAogCiBHTlVMSUJfVE9PTF9GTEFHUz0nCiAgIC0tYXZvaWQ9ZHVwCi0g IC0tYXZvaWQ9ZXJybm8gLS1hdm9pZD1mY2hkaXIgLS1hdm9pZD1mY250bCAtLWF2b2lkPWZz dGF0CisgIC0tYXZvaWQ9ZmNoZGlyIC0tYXZvaWQ9ZmNudGwgLS1hdm9pZD1mc3RhdAogICAt LWF2b2lkPW1hbGxvYy1wb3NpeCAtLWF2b2lkPW1zdmMtaW52YWwgLS1hdm9pZD1tc3ZjLW5v dGhyb3cKICAgLS1hdm9pZD1vcGVuIC0tYXZvaWQ9b3BlbmF0LWRpZSAtLWF2b2lkPW9wZW5k aXIKICAgLS1hdm9pZD1yYWlzZQoKPT09IG1vZGlmaWVkIGZpbGUgJ2NvbmZpZ3VyZS5hYycK LS0tIGNvbmZpZ3VyZS5hYwkyMDEzLTA0LTI2IDE5OjMxOjA5ICswMDAwCisrKyBjb25maWd1 cmUuYWMJMjAxMy0wNC0yNyAxOTo0MDo0OSArMDAwMApAQCAtMTk5LDcgKzE5OSw2IEBACiBP UFRJT05fREVGQVVMVF9PTihbZ2NvbmZdLFtkb24ndCBjb21waWxlIHdpdGggR0NvbmYgc3Vw cG9ydF0pCiBPUFRJT05fREVGQVVMVF9PTihbZ3NldHRpbmdzXSxbZG9uJ3QgY29tcGlsZSB3 aXRoIEdTZXR0aW5ncyBzdXBwb3J0XSkKIE9QVElPTl9ERUZBVUxUX09OKFtzZWxpbnV4XSxb ZG9uJ3QgY29tcGlsZSB3aXRoIFNFTGludXggc3VwcG9ydF0pCi1PUFRJT05fREVGQVVMVF9P TihbYWNsXSxbZG9uJ3QgY29tcGlsZSB3aXRoIEFDTCBzdXBwb3J0XSkKIE9QVElPTl9ERUZB VUxUX09OKFtnbnV0bHNdLFtkb24ndCB1c2UgLWxnbnV0bHMgZm9yIFNTTC9UTFMgc3VwcG9y dF0pCiBPUFRJT05fREVGQVVMVF9PTihbaW5vdGlmeV0sW2Rvbid0IGNvbXBpbGUgd2l0aCBp bm90aWZ5IChmaWxlLXdhdGNoKSBzdXBwb3J0XSkKIApAQCAtMjE4NSwyMyArMjE4NCw2IEBA CiAgIEFDX0RFRklORShIQVZFX0lOT1RJRlksIDEsIFtEZWZpbmUgdG8gMSB0byB1c2UgaW5v dGlmeS5dKQogZmkKIAotZG5sIFBPU0lYIEFDTCBzdXBwb3J0OiBwcm92aWRlZCBieSBsaWJh Y2wgb24gR05VL0xpbnV4LCBieSBsaWJjIG9uIEZyZWVCU0QuCi1IQVZFX1BPU0lYX0FDTD1u bwotTElCQUNMX0xJQlM9Ci1pZiB0ZXN0ICIke3dpdGhfYWNsfSIgPSAieWVzIjsgdGhlbgot ICBBQ19DSEVDS19MSUIoW2FjbF0sIFthY2xfc2V0X2ZpbGVdLCBIQVZFX1BPU0lYX0FDTD15 ZXMsIEhBVkVfUE9TSVhfQUNMPW5vKQotICBpZiB0ZXN0ICIkSEFWRV9QT1NJWF9BQ0wiID0g eWVzOyB0aGVuCi0gICAgQUNfREVGSU5FKEhBVkVfUE9TSVhfQUNMLCAxLCBbRGVmaW5lIHRv IDEgaWYgdXNpbmcgUE9TSVggQUNMIHN1cHBvcnQuXSkKLSAgICBMSUJBQ0xfTElCUz0tbGFj bAotICBlbHNlCi0gICAgQUNfQ0hFQ0tfRlVOQyhhY2xfc2V0X2ZpbGUsIEhBVkVfUE9TSVhf QUNMPXllcywgSEFWRV9QT1NJWF9BQ0w9bm8pCi0gICAgaWYgdGVzdCAiJEhBVkVfUE9TSVhf QUNMIiA9IHllczsgdGhlbgotICAgICAgQUNfREVGSU5FKEhBVkVfUE9TSVhfQUNMLCAxLCBb RGVmaW5lIHRvIDEgaWYgdXNpbmcgUE9TSVggQUNMIHN1cHBvcnQuXSkKLSAgICBmaQotIGZp Ci1maQotQUNfU1VCU1QoTElCQUNMX0xJQlMpCi0KIGRubCBEbyBub3QgcHV0IHdoaXRlc3Bh Y2UgYmVmb3JlIHRoZSAjaW5jbHVkZSBzdGF0ZW1lbnRzIGJlbG93LgogZG5sIE9sZGVyIGNv bXBpbGVycyAoZWcgc3Vub3M0IGNjKSBjaG9rZSBvbiBpdC4KIEhBVkVfWEFXM0Q9bm8KCj09 PSBtb2RpZmllZCBmaWxlICdldGMvQ2hhbmdlTG9nJwotLS0gZXRjL0NoYW5nZUxvZwkyMDEz LTA0LTI0IDE2OjUwOjE0ICswMDAwCisrKyBldGMvQ2hhbmdlTG9nCTIwMTMtMDQtMjkgMDQ6 NTA6MjYgKzAwMDAKQEAgLTEsMyArMSw5IEBACisyMDEzLTA0LTI5ICBQYXVsIEVnZ2VydCAg PGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCVVzZSBHbnVsaWIgQUNMIGltcGxlbWVudGF0aW9u LCBmb3IgYmVuZWZpdCBvZiBTb2xhcmlzIGV0Yy4gKEJ1ZyMxNDI5NSkKKwkqIE5FV1M6IEVt YWNzIGlzIG5vIGxvbmdlciBsaW1pdGVkIHRvIFBPU0lYIEFDTHMuICAtLWRpc2FibGUtYWNs LAorCW5vdCAtLXdpdGhvdXQtYWNsLCBzaW5jZSB3ZSdyZSBub3cgdXNpbmcgR251bGliJ3Mg aW1wbGVtZW50YXRpb24uCisKIDIwMTMtMDQtMjQgIFRhc3NpbG8gSG9ybiAgPHRzZGhAZ251 Lm9yZz4KIAogCSogdGhlbWVzL3RzZGgtZGFyay10aGVtZS5lbCAodHNkaC1kYXJrKTogQWRk IGlkbyBmYWNlcyBhbmQgcmVtb3ZlCgo9PT0gbW9kaWZpZWQgZmlsZSAnZXRjL05FV1MnCi0t LSBldGMvTkVXUwkyMDEzLTA0LTI3IDIwOjU1OjAwICswMDAwCisrKyBldGMvTkVXUwkyMDEz LTA0LTI4IDAwOjAwOjE5ICswMDAwCkBAIC0yMywxMCArMjMsMTAgQEAKIAwKICogSW5zdGFs bGF0aW9uIENoYW5nZXMgaW4gRW1hY3MgMjQuNAogCi0qKiBFbWFjcyBjYW4gYmUgY29tcGls ZWQgd2l0aCBQT1NJWCBBQ0wgc3VwcG9ydC4KKyoqIEVtYWNzIGNhbiBiZSBjb21waWxlZCB3 aXRoIEFDTCBzdXBwb3J0LgogVGhpcyBoYXBwZW5zIGJ5IGRlZmF1bHQgaWYgYSBzdWl0YWJs ZSBzdXBwb3J0IGxpYnJhcnkgaXMgZm91bmQgYXQKIGJ1aWxkIHRpbWUsIGxpa2UgbGliYWNs IG9uIEdOVS9MaW51eC4gIFRvIHByZXZlbnQgdGhpcywgdXNlIHRoZQotY29uZmlndXJlIG9w dGlvbiBgLS13aXRob3V0LWFjbCcuCitjb25maWd1cmUgb3B0aW9uIGAtLWRpc2FibGUtYWNs Jy4KIAogKiogVGhlIGNvbmZpZ3VyZSBvcHRpb24gLS13aXRoLWNydC1kaXIgaGFzIGJlZW4g cmVtb3ZlZC4KIEl0IGlzIG5vIGxvbmdlciBuZWVkZWQsIGFzIHRoZSBjcnQqLm8gZmlsZXMg YXJlIG5vIGxvbmdlciBsaW5rZWQgc3BlY2lhbGx5LgoKPT09IG1vZGlmaWVkIGZpbGUgJ2xp Yi9NYWtlZmlsZS5hbScKLS0tIGxpYi9NYWtlZmlsZS5hbQkyMDEzLTA0LTA3IDA2OjIxOjQw ICswMDAwCisrKyBsaWIvTWFrZWZpbGUuYW0JMjAxMy0wNC0xNyAwNToyMTozMyArMDAwMApA QCAtMSw4ICsxLDEwIEBACiBCVUlMVF9TT1VSQ0VTID0KK0NMRUFORklMRVMgPQogRVhUUkFf RElTVCA9CiBNT1NUTFlDTEVBTkRJUlMgPQogTU9TVExZQ0xFQU5GSUxFUyA9CiBub2luc3Rf TElCUkFSSUVTID0KK1NVRkZJWEVTID0KIAogQU1fQ0ZMQUdTID0gJChQUk9GSUxJTkdfQ0ZM QUdTKSAkKEdOVUxJQl9XQVJOX0NGTEFHUykgJChXRVJST1JfQ0ZMQUdTKQogREVGQVVMVF9J TkNMVURFUyA9IC1JLiAtSSQodG9wX3NyY2RpcikvbGliIC1JLi4vc3JjIC1JJCh0b3Bfc3Jj ZGlyKS9zcmMKCj09PSBhZGRlZCBmaWxlICdsaWIvYWNsLWVycm5vLXZhbGlkLmMnCi0tLSBs aWIvYWNsLWVycm5vLXZhbGlkLmMJMTk3MC0wMS0wMSAwMDowMDowMCArMDAwMAorKysgbGli L2FjbC1lcnJuby12YWxpZC5jCTIwMTMtMDQtMTcgMDU6MjE6MzMgKzAwMDAKQEAgLTAsMCAr MSw0OCBAQAorLyogVGVzdCB3aGV0aGVyIEFDTHMgYXJlIHdlbGwgc3VwcG9ydGVkIG9uIHRo aXMgc3lzdGVtLgorCisgICBDb3B5cmlnaHQgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBM aWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor ICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAg IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LgorCisgICBXcml0dGVuIGJ5IFBhdWwgRWdnZXJ0LiAgKi8KKwor I2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSA8YWNsLmg+CisKKyNpbmNsdWRlIDxl cnJuby5oPgorCisvKiBSZXR1cm4gdHJ1ZSBpZiBlcnJubyB2YWx1ZSBFUlJOVU0gaW5kaWNh dGVzIHRoYXQgQUNMcyBhcmUgd2VsbAorICAgc3VwcG9ydGVkIG9uIHRoaXMgc3lzdGVtLiAg RVJSTlVNIHNob3VsZCBiZSBhbiBlcnJubyB2YWx1ZSBvYnRhaW5lZAorICAgYWZ0ZXIgYW4g QUNMLXJlbGF0ZWQgc3lzdGVtIGNhbGwgZmFpbHMuICAqLworYm9vbAorYWNsX2Vycm5vX3Zh bGlkIChpbnQgZXJybnVtKQoreworICAvKiBSZWNvZ25pemUgc29tZSBjb21tb24gZXJyb3Jz IHN1Y2ggYXMgZnJvbSBhbiBORlMgbW91bnQgdGhhdCBkb2VzCisgICAgIG5vdCBzdXBwb3J0 IEFDTHMsIGV2ZW4gd2hlbiBsb2NhbCBkcml2ZXMgZG8uICAqLworICBzd2l0Y2ggKGVycm51 bSkKKyAgICB7CisgICAgY2FzZSBFQlVTWTogcmV0dXJuIGZhbHNlOworICAgIGNhc2UgRUlO VkFMOiByZXR1cm4gZmFsc2U7CisjaWYgZGVmaW5lZCBfX0FQUExFX18gJiYgZGVmaW5lZCBf X01BQ0hfXworICAgIGNhc2UgRU5PRU5UOiByZXR1cm4gZmFsc2U7CisjZW5kaWYKKyAgICBj YXNlIEVOT1NZUzogcmV0dXJuIGZhbHNlOworI2lmIGRlZmluZWQgRU5PVFNVUCAmJiBFTk9U U1VQICE9IEVPUE5PVFNVUFAKKyAgICBjYXNlIEVOT1RTVVA6IHJldHVybiBmYWxzZTsKKyNl bmRpZgorICAgIGNhc2UgRU9QTk9UU1VQUDogcmV0dXJuIGZhbHNlOworICAgIGRlZmF1bHQ6 IHJldHVybiB0cnVlOworICAgIH0KK30KCj09PSBhZGRlZCBmaWxlICdsaWIvYWNsLWludGVy bmFsLmgnCi0tLSBsaWIvYWNsLWludGVybmFsLmgJMTk3MC0wMS0wMSAwMDowMDowMCArMDAw MAorKysgbGliL2FjbC1pbnRlcm5hbC5oCTIwMTMtMDQtMTcgMDU6MjE6MzMgKzAwMDAKQEAg LTAsMCArMSwyNTAgQEAKKy8qIEludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIGFjY2VzcyBj b250cm9sIGxpc3RzLgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMywgMjAwNS0yMDEz IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQor ICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBu b3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyAgIFdyaXR0ZW4g YnkgUGF1bCBFZ2dlcnQsIEFuZHJlYXMgR3LDvG5iYWNoZXIsIGFuZCBCcnVubyBIYWlibGUu ICAqLworCisjaW5jbHVkZSAiYWNsLmgiCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5j bHVkZSA8c3RkbGliLmg+CisKKy8qIEFsbCBzeXN0ZW1zIGRlZmluZSB0aGUgQUNMIHJlbGF0 ZWQgQVBJIGluIDxzeXMvYWNsLmg+LiAgKi8KKyNpZiBIQVZFX1NZU19BQ0xfSAorIyBpbmNs dWRlIDxzeXMvYWNsLmg+CisjZW5kaWYKKyNpZiBkZWZpbmVkIEhBVkVfRkFDTCAmJiAhIGRl ZmluZWQgR0VUQUNMQ05UICYmIGRlZmluZWQgQUNMX0NOVAorIyBkZWZpbmUgR0VUQUNMQ05U IEFDTF9DTlQKKyNlbmRpZgorCisvKiBPbiBMaW51eCwgYWRkaXRpb25hbCBBQ0wgcmVsYXRl ZCBBUEkgaXMgYXZhaWxhYmxlIGluIDxhY2wvbGliYWNsLmg+LiAgKi8KKyNpZmRlZiBIQVZF X0FDTF9MSUJBQ0xfSAorIyBpbmNsdWRlIDxhY2wvbGliYWNsLmg+CisjZW5kaWYKKworLyog T24gSFAtVVggPj0gMTEuMTEsIGFkZGl0aW9uYWwgQUNMIEFQSSBpcyBhdmFpbGFibGUgaW4g PGFjbHYuaD4uICAqLworI2lmIEhBVkVfQUNMVl9ICisjIGluY2x1ZGUgPHN5cy90eXBlcy5o PgorIyBpbmNsdWRlIDxhY2x2Lmg+CisvKiBIUC1VWCAxMS4xMSBsYWNrcyB0aGVzZSBkZWNs YXJhdGlvbnMuICAqLworZXh0ZXJuIGludCBhY2wgKGNoYXIgKiwgaW50LCBpbnQsIHN0cnVj dCBhY2wgKik7CitleHRlcm4gaW50IGFjbHNvcnQgKGludCwgaW50LCBzdHJ1Y3QgYWNsICop OworI2VuZGlmCisKKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSA8bGltaXRzLmg+ CisjaWZuZGVmIE1JTgorIyBkZWZpbmUgTUlOKGEsYikgKChhKSA8IChiKSA/IChhKSA6IChi KSkKKyNlbmRpZgorCisjaWZuZGVmIFNJWkVfTUFYCisjIGRlZmluZSBTSVpFX01BWCAoKHNp emVfdCkgLTEpCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX0ZDSE1PRAorIyBkZWZpbmUgSEFW RV9GQ0hNT0QgZmFsc2UKKyMgZGVmaW5lIGZjaG1vZChmZCwgbW9kZSkgKC0xKQorI2VuZGlm CisKK19HTF9JTkxJTkVfSEVBREVSX0JFR0lOCisjaWZuZGVmIEFDTF9JTlRFUk5BTF9JTkxJ TkUKKyMgZGVmaW5lIEFDTF9JTlRFUk5BTF9JTkxJTkUgX0dMX0lOTElORQorI2VuZGlmCisK KyNpZiBVU0VfQUNMCisKKyMgaWYgSEFWRV9BQ0xfR0VUX0ZJTEUKKy8qIFBPU0lYIDEwMDMu MWUgKGRyYWZ0IDE3IC0tIGFiYW5kb25lZCkgc3BlY2lmaWMgdmVyc2lvbi4gICovCisvKiBM aW51eCwgRnJlZUJTRCwgTWFjIE9TIFgsIElSSVgsIFRydTY0ICovCisKKyMgIGlmbmRlZiBN SU5fQUNMX0VOVFJJRVMKKyMgICBkZWZpbmUgTUlOX0FDTF9FTlRSSUVTIDQKKyMgIGVuZGlm CisKKy8qIFBPU0lYIDEwMDMuMWUgKGRyYWZ0IDE3KSAqLworIyAgaWZkZWYgSEFWRV9BQ0xf R0VUX0ZECisvKiBNb3N0IHBsYXRmb3JtcyBoYXZlIGEgMS1hcmd1bWVudCBhY2xfZ2V0X2Zk LCBvbmx5IE9TRi8xIGhhcyBhIDItYXJndW1lbnQKKyAgIG1hY3JvKCEpLiAgKi8KKyMgICBp ZiBIQVZFX0FDTF9GUkVFX1RFWFQgLyogT1NGLzEgKi8KK0FDTF9JTlRFUk5BTF9JTkxJTkUg YWNsX3QKK3JwbF9hY2xfZ2V0X2ZkIChpbnQgZmQpCit7CisgIHJldHVybiBhY2xfZ2V0X2Zk IChmZCwgQUNMX1RZUEVfQUNDRVNTKTsKK30KKyMgICAgdW5kZWYgYWNsX2dldF9mZAorIyAg ICBkZWZpbmUgYWNsX2dldF9mZCBycGxfYWNsX2dldF9mZAorIyAgIGVuZGlmCisjICBlbHNl CisjICAgZGVmaW5lIEhBVkVfQUNMX0dFVF9GRCBmYWxzZQorIyAgIHVuZGVmIGFjbF9nZXRf ZmQKKyMgICBkZWZpbmUgYWNsX2dldF9mZChmZCkgKE5VTEwpCisjICBlbmRpZgorCisvKiBQ T1NJWCAxMDAzLjFlIChkcmFmdCAxNykgKi8KKyMgIGlmZGVmIEhBVkVfQUNMX1NFVF9GRAor LyogTW9zdCBwbGF0Zm9ybXMgaGF2ZSBhIDItYXJndW1lbnQgYWNsX3NldF9mZCwgb25seSBP U0YvMSBoYXMgYSAzLWFyZ3VtZW50CisgICBtYWNybyghKS4gICovCisjICAgaWYgSEFWRV9B Q0xfRlJFRV9URVhUIC8qIE9TRi8xICovCitBQ0xfSU5URVJOQUxfSU5MSU5FIGludAorcnBs X2FjbF9zZXRfZmQgKGludCBmZCwgYWNsX3QgYWNsKQoreworICByZXR1cm4gYWNsX3NldF9m ZCAoZmQsIEFDTF9UWVBFX0FDQ0VTUywgYWNsKTsKK30KKyMgICAgdW5kZWYgYWNsX3NldF9m ZAorIyAgICBkZWZpbmUgYWNsX3NldF9mZCBycGxfYWNsX3NldF9mZAorIyAgIGVuZGlmCisj ICBlbHNlCisjICAgZGVmaW5lIEhBVkVfQUNMX1NFVF9GRCBmYWxzZQorIyAgIHVuZGVmIGFj bF9zZXRfZmQKKyMgICBkZWZpbmUgYWNsX3NldF9mZChmZCwgYWNsKSAoLTEpCisjICBlbmRp ZgorCisvKiBQT1NJWCAxMDAzLjFlIChkcmFmdCAxMykgKi8KKyMgIGlmICEgSEFWRV9BQ0xf RlJFRV9URVhUCisjICAgZGVmaW5lIGFjbF9mcmVlX3RleHQoYnVmKSBhY2xfZnJlZSAoYnVm KQorIyAgZW5kaWYKKworLyogTGludXgtc3BlY2lmaWMgKi8KKyMgIGlmbmRlZiBIQVZFX0FD TF9FWFRFTkRFRF9GSUxFCisjICAgZGVmaW5lIEhBVkVfQUNMX0VYVEVOREVEX0ZJTEUgZmFs c2UKKyMgICBkZWZpbmUgYWNsX2V4dGVuZGVkX2ZpbGUobmFtZSkgKC0xKQorIyAgZW5kaWYK KworLyogTGludXgtc3BlY2lmaWMgKi8KKyMgIGlmbmRlZiBIQVZFX0FDTF9GUk9NX01PREUK KyMgICBkZWZpbmUgSEFWRV9BQ0xfRlJPTV9NT0RFIGZhbHNlCisjICAgZGVmaW5lIGFjbF9m cm9tX21vZGUobW9kZSkgKE5VTEwpCisjICBlbmRpZgorCisvKiBTZXQgdG8gMSBpZiBhIGZp bGUncyBtb2RlIGlzIGltcGxpY2l0IGJ5IHRoZSBBQ0wuCisgICBTZXQgdG8gMCBpZiBhIGZp bGUncyBtb2RlIGlzIHN0b3JlZCBpbmRlcGVuZGVudGx5IGZyb20gdGhlIEFDTC4gICovCisj ICBpZiAoSEFWRV9BQ0xfQ09QWV9FWFRfTkFUSVZFICYmIEhBVkVfQUNMX0NSRUFURV9FTlRS WV9OUCkgfHwgZGVmaW5lZCBfX3NnaSAvKiBNYWMgT1MgWCwgSVJJWCAqLworIyAgIGRlZmlu ZSBNT0RFX0lOU0lERV9BQ0wgMAorIyAgZWxzZQorIyAgIGRlZmluZSBNT0RFX0lOU0lERV9B Q0wgMQorIyAgZW5kaWYKKworLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiBB Q0wuCisgICBSZXR1cm4gLTEgYW5kIHNldCBlcnJubyB1cG9uIGZhaWx1cmUgdG8gZGV0ZXJt aW5lIGl0LiAgKi8KKy8qIERlZmluZSBhIHJlcGxhY2VtZW50IGZvciBhY2xfZW50cmllcyBp ZiBuZWVkZWQuIChPbmx5IExpbnV4IGhhcyBpdC4pICAqLworIyAgaWYgIUhBVkVfQUNMX0VO VFJJRVMKKyMgICBkZWZpbmUgYWNsX2VudHJpZXMgcnBsX2FjbF9lbnRyaWVzCitleHRlcm4g aW50IGFjbF9lbnRyaWVzIChhY2xfdCk7CisjICBlbmRpZgorCisjICBpZiBIQVZFX0FDTF9U WVBFX0VYVEVOREVEIC8qIE1hYyBPUyBYICovCisvKiBBQ0wgaXMgYW4gQUNMLCBmcm9tIGEg ZmlsZSwgc3RvcmVkIGFzIHR5cGUgQUNMX1RZUEVfRVhURU5ERUQuCisgICBSZXR1cm4gMSBp ZiB0aGUgZ2l2ZW4gQUNMIGlzIG5vbi10cml2aWFsLgorICAgUmV0dXJuIDAgaWYgaXQgaXMg dHJpdmlhbC4gICovCitleHRlcm4gaW50IGFjbF9leHRlbmRlZF9ub250cml2aWFsIChhY2xf dCk7CisjICBlbHNlCisvKiBBQ0wgaXMgYW4gQUNMLCBmcm9tIGEgZmlsZSwgc3RvcmVkIGFz IHR5cGUgQUNMX1RZUEVfQUNDRVNTLgorICAgUmV0dXJuIDEgaWYgdGhlIGdpdmVuIEFDTCBp cyBub24tdHJpdmlhbC4KKyAgIFJldHVybiAwIGlmIGl0IGlzIHRyaXZpYWwsIGkuZS4gZXF1 aXZhbGVudCB0byBhIHNpbXBsZSBzdGF0KCkgbW9kZS4KKyAgIFJldHVybiAtMSBhbmQgc2V0 IGVycm5vIHVwb24gZmFpbHVyZSB0byBkZXRlcm1pbmUgaXQuICAqLworZXh0ZXJuIGludCBh Y2xfYWNjZXNzX25vbnRyaXZpYWwgKGFjbF90KTsKKyMgIGVuZGlmCisKKyMgZWxpZiBIQVZF X0ZBQ0wgJiYgZGVmaW5lZCBHRVRBQ0wgLyogU29sYXJpcywgQ3lnd2luLCBub3QgSFAtVVgg Ki8KKworLyogU2V0IHRvIDEgaWYgYSBmaWxlJ3MgbW9kZSBpcyBpbXBsaWNpdCBieSB0aGUg QUNMLgorICAgU2V0IHRvIDAgaWYgYSBmaWxlJ3MgbW9kZSBpcyBzdG9yZWQgaW5kZXBlbmRl bnRseSBmcm9tIHRoZSBBQ0wuICAqLworIyAgaWYgZGVmaW5lZCBfX0NZR1dJTl9fIC8qIEN5 Z3dpbiAqLworIyAgIGRlZmluZSBNT0RFX0lOU0lERV9BQ0wgMAorIyAgZWxzZSAvKiBTb2xh cmlzICovCisjICAgZGVmaW5lIE1PREVfSU5TSURFX0FDTCAxCisjICBlbmRpZgorCisvKiBS ZXR1cm4gMSBpZiB0aGUgZ2l2ZW4gQUNMIGlzIG5vbi10cml2aWFsLgorICAgUmV0dXJuIDAg aWYgaXQgaXMgdHJpdmlhbCwgaS5lLiBlcXVpdmFsZW50IHRvIGEgc2ltcGxlIHN0YXQoKSBt b2RlLiAgKi8KK2V4dGVybiBpbnQgYWNsX25vbnRyaXZpYWwgKGludCBjb3VudCwgYWNsZW50 X3QgKmVudHJpZXMpOworCisjICBpZmRlZiBBQ0VfR0VUQUNMIC8qIFNvbGFyaXMgMTAgKi8K KworLyogVGVzdCBhbiBBQ0wgcmV0cmlldmVkIHdpdGggQUNFX0dFVEFDTC4KKyAgIFJldHVy biAxIGlmIHRoZSBnaXZlbiBBQ0wsIGNvbnNpc3Rpbmcgb2YgQ09VTlQgZW50cmllcywgaXMg bm9uLXRyaXZpYWwuCisgICBSZXR1cm4gMCBpZiBpdCBpcyB0cml2aWFsLCBpLmUuIGVxdWl2 YWxlbnQgdG8gYSBzaW1wbGUgc3RhdCgpIG1vZGUuICAqLworZXh0ZXJuIGludCBhY2xfYWNl X25vbnRyaXZpYWwgKGludCBjb3VudCwgYWNlX3QgKmVudHJpZXMpOworCisvKiBEZWZpbml0 aW9ucyBmb3Igd2hlbiB0aGUgYnVpbHQgZXhlY3V0YWJsZSBpcyBleGVjdXRlZCBvbiBTb2xh cmlzIDEwCisgICAobmV3ZXIgdmVyc2lvbikgb3IgU29sYXJpcyAxMS4gICovCisvKiBGb3Ig YV90eXBlLiAgKi8KKyMgICBkZWZpbmUgT0xEX0FMTE9XIDAKKyMgICBkZWZpbmUgT0xEX0RF TlkgIDEKKyMgICBkZWZpbmUgTkVXX0FDRV9BQ0NFU1NfQUxMT1dFRF9BQ0VfVFlQRSAwIC8q IHJlcGxhY2VzIEFMTE9XICovCisjICAgZGVmaW5lIE5FV19BQ0VfQUNDRVNTX0RFTklFRF9B Q0VfVFlQRSAgMSAvKiByZXBsYWNlcyBERU5ZICovCisvKiBGb3IgYV9mbGFncy4gICovCisj ICAgZGVmaW5lIE9MRF9BQ0VfT1dORVIgICAgICAgICAgICAweDAxMDAKKyMgICBkZWZpbmUg T0xEX0FDRV9HUk9VUCAgICAgICAgICAgIDB4MDIwMAorIyAgIGRlZmluZSBPTERfQUNFX09U SEVSICAgICAgICAgICAgMHgwNDAwCisjICAgZGVmaW5lIE5FV19BQ0VfT1dORVIgICAgICAg ICAgICAweDEwMDAKKyMgICBkZWZpbmUgTkVXX0FDRV9HUk9VUCAgICAgICAgICAgIDB4MjAw MAorIyAgIGRlZmluZSBORVdfQUNFX0lERU5USUZJRVJfR1JPVVAgMHgwMDQwCisjICAgZGVm aW5lIE5FV19BQ0VfRVZFUllPTkUgICAgICAgICAweDQwMDAKKy8qIEZvciBhX2FjY2Vzc19t YXNrLiAgKi8KKyMgICBkZWZpbmUgTkVXX0FDRV9SRUFEX0RBVEEgICAgICAgICAweDAwMSAv KiBjb3JyZXNwb25kcyB0byAncicgKi8KKyMgICBkZWZpbmUgTkVXX0FDRV9XUklURV9EQVRB ICAgICAgICAweDAwMiAvKiBjb3JyZXNwb25kcyB0byAndycgKi8KKyMgICBkZWZpbmUgTkVX X0FDRV9BUFBFTkRfREFUQSAgICAgICAweDAwNAorIyAgIGRlZmluZSBORVdfQUNFX1JFQURf TkFNRURfQVRUUlMgIDB4MDA4CisjICAgZGVmaW5lIE5FV19BQ0VfV1JJVEVfTkFNRURfQVRU UlMgMHgwMTAKKyMgICBkZWZpbmUgTkVXX0FDRV9FWEVDVVRFICAgICAgICAgICAweDAyMAor IyAgIGRlZmluZSBORVdfQUNFX0RFTEVURV9DSElMRCAgICAgIDB4MDQwCisjICAgZGVmaW5l IE5FV19BQ0VfUkVBRF9BVFRSSUJVVEVTICAgMHgwODAKKyMgICBkZWZpbmUgTkVXX0FDRV9X UklURV9BVFRSSUJVVEVTICAweDEwMAorIyAgIGRlZmluZSBORVdfQUNFX0RFTEVURSAgICAg ICAgICAweDEwMDAwCisjICAgZGVmaW5lIE5FV19BQ0VfUkVBRF9BQ0wgICAgICAgIDB4MjAw MDAKKyMgICBkZWZpbmUgTkVXX0FDRV9XUklURV9BQ0wgICAgICAgMHg0MDAwMAorIyAgIGRl ZmluZSBORVdfQUNFX1dSSVRFX09XTkVSICAgICAweDgwMDAwCisjICAgZGVmaW5lIE5FV19B Q0VfU1lOQ0hST05JWkUgICAgMHgxMDAwMDAKKworIyAgZW5kaWYKKworIyBlbGlmIEhBVkVf R0VUQUNMIC8qIEhQLVVYICovCisKKy8qIFJldHVybiAxIGlmIHRoZSBnaXZlbiBBQ0wgaXMg bm9uLXRyaXZpYWwuCisgICBSZXR1cm4gMCBpZiBpdCBpcyB0cml2aWFsLCBpLmUuIGVxdWl2 YWxlbnQgdG8gYSBzaW1wbGUgc3RhdCgpIG1vZGUuICAqLworZXh0ZXJuIGludCBhY2xfbm9u dHJpdmlhbCAoaW50IGNvdW50LCBzdHJ1Y3QgYWNsX2VudHJ5ICplbnRyaWVzLCBzdHJ1Y3Qg c3RhdCAqc2IpOworCisjICBpZiBIQVZFX0FDTFZfSCAvKiBIUC1VWCA+PSAxMS4xMSAqLwor CisvKiBSZXR1cm4gMSBpZiB0aGUgZ2l2ZW4gQUNMIGlzIG5vbi10cml2aWFsLgorICAgUmV0 dXJuIDAgaWYgaXQgaXMgdHJpdmlhbCwgaS5lLiBlcXVpdmFsZW50IHRvIGEgc2ltcGxlIHN0 YXQoKSBtb2RlLiAgKi8KK2V4dGVybiBpbnQgYWNsdl9ub250cml2aWFsIChpbnQgY291bnQs IHN0cnVjdCBhY2wgKmVudHJpZXMpOworCisjICBlbmRpZgorCisjIGVsaWYgSEFWRV9BQ0xY X0dFVCAmJiAwIC8qIEFJWCAqLworCisvKiBUT0RPICovCisKKyMgZWxpZiBIQVZFX1NUQVRB Q0wgLyogb2xkZXIgQUlYICovCisKKy8qIFJldHVybiAxIGlmIHRoZSBnaXZlbiBBQ0wgaXMg bm9uLXRyaXZpYWwuCisgICBSZXR1cm4gMCBpZiBpdCBpcyB0cml2aWFsLCBpLmUuIGVxdWl2 YWxlbnQgdG8gYSBzaW1wbGUgc3RhdCgpIG1vZGUuICAqLworZXh0ZXJuIGludCBhY2xfbm9u dHJpdmlhbCAoc3RydWN0IGFjbCAqYSk7CisKKyMgZWxpZiBIQVZFX0FDTFNPUlQgLyogTm9u U3RvcCBLZXJuZWwgKi8KKworLyogUmV0dXJuIDEgaWYgdGhlIGdpdmVuIEFDTCBpcyBub24t dHJpdmlhbC4KKyAgIFJldHVybiAwIGlmIGl0IGlzIHRyaXZpYWwsIGkuZS4gZXF1aXZhbGVu dCB0byBhIHNpbXBsZSBzdGF0KCkgbW9kZS4gICovCitleHRlcm4gaW50IGFjbF9ub250cml2 aWFsIChpbnQgY291bnQsIHN0cnVjdCBhY2wgKmVudHJpZXMpOworCisjIGVuZGlmCisKKyNl bmRpZgorCitfR0xfSU5MSU5FX0hFQURFUl9FTkQKCj09PSBhZGRlZCBmaWxlICdsaWIvYWNs LmgnCi0tLSBsaWIvYWNsLmgJMTk3MC0wMS0wMSAwMDowMDowMCArMDAwMAorKysgbGliL2Fj bC5oCTIwMTMtMDQtMTcgMDU6MjE6MzMgKzAwMDAKQEAgLTAsMCArMSwzMCBAQAorLyogYWNs LmMgLSBhY2Nlc3MgY29udHJvbCBsaXN0cworCisgICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIw MDgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFt LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisgICBX cml0dGVuIGJ5IFBhdWwgRWdnZXJ0LiAgKi8KKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNp bmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCitib29sIGFj bF9lcnJub192YWxpZCAoaW50KSBfR0xfQVRUUklCVVRFX0NPTlNUOworaW50IGZpbGVfaGFz X2FjbCAoY2hhciBjb25zdCAqLCBzdHJ1Y3Qgc3RhdCBjb25zdCAqKTsKK2ludCBxc2V0X2Fj bCAoY2hhciBjb25zdCAqLCBpbnQsIG1vZGVfdCk7CitpbnQgc2V0X2FjbCAoY2hhciBjb25z dCAqLCBpbnQsIG1vZGVfdCk7CitpbnQgcWNvcHlfYWNsIChjaGFyIGNvbnN0ICosIGludCwg Y2hhciBjb25zdCAqLCBpbnQsIG1vZGVfdCk7CitpbnQgY29weV9hY2wgKGNoYXIgY29uc3Qg KiwgaW50LCBjaGFyIGNvbnN0ICosIGludCwgbW9kZV90KTsKK2ludCBjaG1vZF9vcl9mY2ht b2QgKGNoYXIgY29uc3QgKiwgaW50LCBtb2RlX3QpOwoKPT09IGFkZGVkIGZpbGUgJ2xpYi9h Y2xfZW50cmllcy5jJwotLS0gbGliL2FjbF9lbnRyaWVzLmMJMTk3MC0wMS0wMSAwMDowMDow MCArMDAwMAorKysgbGliL2FjbF9lbnRyaWVzLmMJMjAxMy0wNC0xNyAwNToyMTozMyArMDAw MApAQCAtMCwwICsxLDc1IEBACisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBlbnRyaWVzIGlu IGFuIEFDTC4KKworICAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMsIDIwMDUtMjAxMyBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBz ZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisgICBXcml0dGVuIGJ5IFBh dWwgRWdnZXJ0IGFuZCBBbmRyZWFzIEdydWVuYmFjaGVyLiAgKi8KKworI2luY2x1ZGUgPGNv bmZpZy5oPgorCisjaW5jbHVkZSAiYWNsLWludGVybmFsLmgiCisKKy8qIFRoaXMgZmlsZSBh c3N1bWVzIFBPU0lYLWRyYWZ0IGxpa2UgQUNMcworICAgKExpbnV4LCBGcmVlQlNELCBNYWMg T1MgWCwgSVJJWCwgVHJ1NjQpLiAgKi8KKworLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgZW50 cmllcyBpbiBBQ0wuCisgICBSZXR1cm4gLTEgYW5kIHNldCBlcnJubyB1cG9uIGZhaWx1cmUg dG8gZGV0ZXJtaW5lIGl0LiAgKi8KKworaW50CithY2xfZW50cmllcyAoYWNsX3QgYWNsKQor eworICBpbnQgY291bnQgPSAwOworCisgIGlmIChhY2wgIT0gTlVMTCkKKyAgICB7CisjaWYg SEFWRV9BQ0xfRklSU1RfRU5UUlkgLyogTGludXgsIEZyZWVCU0QsIE1hYyBPUyBYICovCisj IGlmIEhBVkVfQUNMX1RZUEVfRVhURU5ERUQgLyogTWFjIE9TIFggKi8KKyAgICAgIC8qIGFj bF9nZXRfZW50cnkgcmV0dXJucyAwIHdoZW4gaXQgc3VjY2Vzc2Z1bGx5IGZldGNoZXMgYW4g ZW50cnksCisgICAgICAgICBhbmQgLTEvRUlOVkFMIGF0IHRoZSBlbmQuICAqLworICAgICAg YWNsX2VudHJ5X3QgYWNlOworICAgICAgaW50IGdvdF9vbmU7CisKKyAgICAgIGZvciAoZ290 X29uZSA9IGFjbF9nZXRfZW50cnkgKGFjbCwgQUNMX0ZJUlNUX0VOVFJZLCAmYWNlKTsKKyAg ICAgICAgICAgZ290X29uZSA+PSAwOworICAgICAgICAgICBnb3Rfb25lID0gYWNsX2dldF9l bnRyeSAoYWNsLCBBQ0xfTkVYVF9FTlRSWSwgJmFjZSkpCisgICAgICAgIGNvdW50Kys7Cisj IGVsc2UgLyogTGludXgsIEZyZWVCU0QgKi8KKyAgICAgIC8qIGFjbF9nZXRfZW50cnkgcmV0 dXJucyAxIHdoZW4gaXQgc3VjY2Vzc2Z1bGx5IGZldGNoZXMgYW4gZW50cnksCisgICAgICAg ICBhbmQgMCBhdCB0aGUgZW5kLiAgKi8KKyAgICAgIGFjbF9lbnRyeV90IGFjZTsKKyAgICAg IGludCBnb3Rfb25lOworCisgICAgICBmb3IgKGdvdF9vbmUgPSBhY2xfZ2V0X2VudHJ5IChh Y2wsIEFDTF9GSVJTVF9FTlRSWSwgJmFjZSk7CisgICAgICAgICAgIGdvdF9vbmUgPiAwOwor ICAgICAgICAgICBnb3Rfb25lID0gYWNsX2dldF9lbnRyeSAoYWNsLCBBQ0xfTkVYVF9FTlRS WSwgJmFjZSkpCisgICAgICAgIGNvdW50Kys7CisgICAgICBpZiAoZ290X29uZSA8IDApCisg ICAgICAgIHJldHVybiAtMTsKKyMgZW5kaWYKKyNlbHNlIC8qIElSSVgsIFRydTY0ICovCisj IGlmIEhBVkVfQUNMX1RPX1NIT1JUX1RFWFQgLyogSVJJWCAqLworICAgICAgLyogRG9uJ3Qg dXNlIGFjbF9nZXRfZW50cnk6IGl0IGlzIHVuZG9jdW1lbnRlZC4gICovCisgICAgICBjb3Vu dCA9IGFjbC0+YWNsX2NudDsKKyMgZW5kaWYKKyMgaWYgSEFWRV9BQ0xfRlJFRV9URVhUIC8q IFRydTY0ICovCisgICAgICAvKiBEb24ndCB1c2UgYWNsX2dldF9lbnRyeTogaXQgdGFrZXMg b25seSBvbmUgYXJndW1lbnQgYW5kIGRvZXMgbm90CisgICAgICAgICB3b3JrLiAgKi8KKyAg ICAgIGNvdW50ID0gYWNsLT5hY2xfbnVtOworIyBlbmRpZgorI2VuZGlmCisgICAgfQorCisg IHJldHVybiBjb3VudDsKK30KCj09PSBhZGRlZCBmaWxlICdsaWIvZXJybm8uaW4uaCcKLS0t IGxpYi9lcnJuby5pbi5oCTE5NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDAKKysrIGxpYi9lcnJu by5pbi5oCTIwMTMtMDQtMjkgMDY6MDc6NDIgKzAwMDAKQEAgLTAsMCArMSwyNzkgQEAKKy8q IEEgUE9TSVgtbGlrZSA8ZXJybm8uaD4uCisKKyAgIENvcHlyaWdodCAoQykgMjAwOC0yMDEz IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQor ICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJz aW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8v d3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgX0BHVUFSRF9QUkVGSVhA X0VSUk5PX0gKKworI2lmIF9fR05VQ19fID49IDMKK0BQUkFHTUFfU1lTVEVNX0hFQURFUkAK KyNlbmRpZgorQFBSQUdNQV9DT0xVTU5TQAorCisvKiBUaGUgaW5jbHVkZV9uZXh0IHJlcXVp cmVzIGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFyZC4gICovCisjQElOQ0xVREVfTkVY VEAgQE5FWFRfRVJSTk9fSEAKKworI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfRVJSTk9fSAor I2RlZmluZSBfQEdVQVJEX1BSRUZJWEBfRVJSTk9fSAorCisKKy8qIE9uIG5hdGl2ZSBXaW5k b3dzIHBsYXRmb3JtcywgbWFueSBtYWNyb3MgYXJlIG5vdCBkZWZpbmVkLiAgKi8KKyMgaWYg KGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhIGRlZmluZWQgX19D WUdXSU5fXworCisvKiBUaGVzZSBhcmUgdGhlIHNhbWUgdmFsdWVzIGFzIGRlZmluZWQgYnkg TVNWQyAxMCwgZm9yIGludGVyb3BlcmFiaWxpdHkuICAqLworCisjICBpZm5kZWYgRU5PTVNH CisjICAgZGVmaW5lIEVOT01TRyAgICAxMjIKKyMgICBkZWZpbmUgR05VTElCX2RlZmluZWRf RU5PTVNHIDEKKyMgIGVuZGlmCisKKyMgIGlmbmRlZiBFSURSTQorIyAgIGRlZmluZSBFSURS TSAgICAgMTExCisjICAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX0VJRFJNIDEKKyMgIGVuZGlm CisKKyMgIGlmbmRlZiBFTk9MSU5LCisjICAgZGVmaW5lIEVOT0xJTksgICAxMjEKKyMgICBk ZWZpbmUgR05VTElCX2RlZmluZWRfRU5PTElOSyAxCisjICBlbmRpZgorCisjICBpZm5kZWYg RVBST1RPCisjICAgZGVmaW5lIEVQUk9UTyAgICAxMzQKKyMgICBkZWZpbmUgR05VTElCX2Rl ZmluZWRfRVBST1RPIDEKKyMgIGVuZGlmCisKKyMgIGlmbmRlZiBFQkFETVNHCisjICAgZGVm aW5lIEVCQURNU0cgICAxMDQKKyMgICBkZWZpbmUgR05VTElCX2RlZmluZWRfRUJBRE1TRyAx CisjICBlbmRpZgorCisjICBpZm5kZWYgRU9WRVJGTE9XCisjICAgZGVmaW5lIEVPVkVSRkxP VyAxMzIKKyMgICBkZWZpbmUgR05VTElCX2RlZmluZWRfRU9WRVJGTE9XIDEKKyMgIGVuZGlm CisKKyMgIGlmbmRlZiBFTk9UU1VQCisjICAgZGVmaW5lIEVOT1RTVVAgICAxMjkKKyMgICBk ZWZpbmUgR05VTElCX2RlZmluZWRfRU5PVFNVUCAxCisjICBlbmRpZgorCisjICBpZm5kZWYg RU5FVFJFU0VUCisjICAgZGVmaW5lIEVORVRSRVNFVCAxMTcKKyMgICBkZWZpbmUgR05VTElC X2RlZmluZWRfRU5FVFJFU0VUIDEKKyMgIGVuZGlmCisKKyMgIGlmbmRlZiBFQ09OTkFCT1JU RUQKKyMgICBkZWZpbmUgRUNPTk5BQk9SVEVEIDEwNgorIyAgIGRlZmluZSBHTlVMSUJfZGVm aW5lZF9FQ09OTkFCT1JURUQgMQorIyAgZW5kaWYKKworIyAgaWZuZGVmIEVDQU5DRUxFRAor IyAgIGRlZmluZSBFQ0FOQ0VMRUQgMTA1CisjICAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX0VD QU5DRUxFRCAxCisjICBlbmRpZgorCisjICBpZm5kZWYgRU9XTkVSREVBRAorIyAgIGRlZmlu ZSBFT1dORVJERUFEIDEzMworIyAgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9FT1dORVJERUFE IDEKKyMgIGVuZGlmCisKKyMgIGlmbmRlZiBFTk9UUkVDT1ZFUkFCTEUKKyMgICBkZWZpbmUg RU5PVFJFQ09WRVJBQkxFIDEyNworIyAgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9FTk9UUkVD T1ZFUkFCTEUgMQorIyAgZW5kaWYKKworIyAgaWZuZGVmIEVJTlBST0dSRVNTCisjICAgZGVm aW5lIEVJTlBST0dSRVNTICAgICAxMTIKKyMgICBkZWZpbmUgRUFMUkVBRFkgICAgICAgIDEw MworIyAgIGRlZmluZSBFTk9UU09DSyAgICAgICAgMTI4CisjICAgZGVmaW5lIEVERVNUQURE UlJFUSAgICAxMDkKKyMgICBkZWZpbmUgRU1TR1NJWkUgICAgICAgIDExNQorIyAgIGRlZmlu ZSBFUFJPVE9UWVBFICAgICAgMTM2CisjICAgZGVmaW5lIEVOT1BST1RPT1BUICAgICAxMjMK KyMgICBkZWZpbmUgRVBST1RPTk9TVVBQT1JUIDEzNQorIyAgIGRlZmluZSBFT1BOT1RTVVBQ ICAgICAgMTMwCisjICAgZGVmaW5lIEVBRk5PU1VQUE9SVCAgICAxMDIKKyMgICBkZWZpbmUg RUFERFJJTlVTRSAgICAgIDEwMAorIyAgIGRlZmluZSBFQUREUk5PVEFWQUlMICAgMTAxCisj ICAgZGVmaW5lIEVORVRET1dOICAgICAgICAxMTYKKyMgICBkZWZpbmUgRU5FVFVOUkVBQ0gg ICAgIDExOAorIyAgIGRlZmluZSBFQ09OTlJFU0VUICAgICAgMTA4CisjICAgZGVmaW5lIEVO T0JVRlMgICAgICAgICAxMTkKKyMgICBkZWZpbmUgRUlTQ09OTiAgICAgICAgIDExMworIyAg IGRlZmluZSBFTk9UQ09OTiAgICAgICAgMTI2CisjICAgZGVmaW5lIEVUSU1FRE9VVCAgICAg ICAxMzgKKyMgICBkZWZpbmUgRUNPTk5SRUZVU0VEICAgIDEwNworIyAgIGRlZmluZSBFTE9P UCAgICAgICAgICAgMTE0CisjICAgZGVmaW5lIEVIT1NUVU5SRUFDSCAgICAxMTAKKyMgICBk ZWZpbmUgRVdPVUxEQkxPQ0sgICAgIDE0MAorIyAgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9F U09DSyAxCisjICBlbmRpZgorCisjICBpZm5kZWYgRVRYVEJTWQorIyAgIGRlZmluZSBFVFhU QlNZICAgICAgICAgMTM5CisjICAgZGVmaW5lIEVOT0RBVEEgICAgICAgICAxMjAgIC8qIG5v dCByZXF1aXJlZCBieSBQT1NJWCAqLworIyAgIGRlZmluZSBFTk9TUiAgICAgICAgICAgMTI0 ICAvKiBub3QgcmVxdWlyZWQgYnkgUE9TSVggKi8KKyMgICBkZWZpbmUgRU5PU1RSICAgICAg ICAgIDEyNSAgLyogbm90IHJlcXVpcmVkIGJ5IFBPU0lYICovCisjICAgZGVmaW5lIEVUSU1F ICAgICAgICAgICAxMzcgIC8qIG5vdCByZXF1aXJlZCBieSBQT1NJWCAqLworIyAgIGRlZmlu ZSBFT1RIRVIgICAgICAgICAgMTMxICAvKiBub3QgcmVxdWlyZWQgYnkgUE9TSVggKi8KKyMg ICBkZWZpbmUgR05VTElCX2RlZmluZWRfRVNUUkVBTVMgMQorIyAgZW5kaWYKKworLyogVGhl c2UgYXJlIGludGVudGlvbmFsbHkgdGhlIHNhbWUgdmFsdWVzIGFzIHRoZSBXU0EqIGVycm9y IG51bWJlcnMsIGRlZmluZWQKKyAgIGluIDx3aW5zb2NrMi5oPi4gICovCisjICBkZWZpbmUg RVNPQ0tUTk9TVVBQT1JUIDEwMDQ0ICAvKiBub3QgcmVxdWlyZWQgYnkgUE9TSVggKi8KKyMg IGRlZmluZSBFUEZOT1NVUFBPUlQgICAgMTAwNDYgIC8qIG5vdCByZXF1aXJlZCBieSBQT1NJ WCAqLworIyAgZGVmaW5lIEVTSFVURE9XTiAgICAgICAxMDA1OCAgLyogbm90IHJlcXVpcmVk IGJ5IFBPU0lYICovCisjICBkZWZpbmUgRVRPT01BTllSRUZTICAgIDEwMDU5ICAvKiBub3Qg cmVxdWlyZWQgYnkgUE9TSVggKi8KKyMgIGRlZmluZSBFSE9TVERPV04gICAgICAgMTAwNjQg IC8qIG5vdCByZXF1aXJlZCBieSBQT1NJWCAqLworIyAgZGVmaW5lIEVQUk9DTElNICAgICAg ICAxMDA2NyAgLyogbm90IHJlcXVpcmVkIGJ5IFBPU0lYICovCisjICBkZWZpbmUgRVVTRVJT ICAgICAgICAgIDEwMDY4ICAvKiBub3QgcmVxdWlyZWQgYnkgUE9TSVggKi8KKyMgIGRlZmlu ZSBFRFFVT1QgICAgICAgICAgMTAwNjkKKyMgIGRlZmluZSBFU1RBTEUgICAgICAgICAgMTAw NzAKKyMgIGRlZmluZSBFUkVNT1RFICAgICAgICAgMTAwNzEgIC8qIG5vdCByZXF1aXJlZCBi eSBQT1NJWCAqLworIyAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX0VXSU5TT0NLIDEKKworIyBl bmRpZgorCisKKy8qIE9uIE9TRi8xIDUuMSwgd2hlbiBfWE9QRU5fU09VUkNFX0VYVEVOREVE IGlzIG5vdCBkZWZpbmVkLCB0aGUgbWFjcm9zCisgICBFTVVMVElIT1AsIEVOT0xJTkssIEVP VkVSRkxPVyBhcmUgbm90IGRlZmluZWQuICAqLworIyBpZiBARU1VTFRJSE9QX0hJRERFTkAK KyMgIGRlZmluZSBFTVVMVElIT1AgQEVNVUxUSUhPUF9WQUxVRUAKKyMgIGRlZmluZSBHTlVM SUJfZGVmaW5lZF9FTVVMVElIT1AgMQorIyBlbmRpZgorIyBpZiBARU5PTElOS19ISURERU5A CisjICBkZWZpbmUgRU5PTElOSyAgIEBFTk9MSU5LX1ZBTFVFQAorIyAgZGVmaW5lIEdOVUxJ Ql9kZWZpbmVkX0VOT0xJTksgMQorIyBlbmRpZgorIyBpZiBARU9WRVJGTE9XX0hJRERFTkAK KyMgIGRlZmluZSBFT1ZFUkZMT1cgQEVPVkVSRkxPV19WQUxVRUAKKyMgIGRlZmluZSBHTlVM SUJfZGVmaW5lZF9FT1ZFUkZMT1cgMQorIyBlbmRpZgorCisKKy8qIE9uIE9wZW5CU0QgNC4w IGFuZCBvbiBuYXRpdmUgV2luZG93cywgdGhlIG1hY3JvcyBFTk9NU0csIEVJRFJNLCBFTk9M SU5LLAorICAgRVBST1RPLCBFTVVMVElIT1AsIEVCQURNU0csIEVPVkVSRkxPVywgRU5PVFNV UCwgRUNBTkNFTEVEIGFyZSBub3QgZGVmaW5lZC4KKyAgIExpa2V3aXNlLCBvbiBOb25TdG9w IEtlcm5lbCwgRURRVU9UIGlzIG5vdCBkZWZpbmVkLgorICAgRGVmaW5lIHRoZW0gaGVyZS4g IFZhbHVlcyA+PSAyMDAwIHNlZW0gc2FmZSB0byB1c2U6IFNvbGFyaXMgRVNUQUxFID0gMTUx LAorICAgSFAtVVggRVdPVUxEQkxPQ0sgPSAyNDYsIElSSVggRURRVU9UID0gMTEzMy4KKwor ICAgTm90ZTogV2hlbiBvbmUgb2YgdGhlc2Ugc3lzdGVtcyBkZWZpbmVzIHNvbWUgb2YgdGhl c2UgbWFjcm9zIHNvbWUgZGF5LAorICAgYmluYXJpZXMgd2lsbCBoYXZlIHRvIGJlIHJlY29t cGlsZWQgc28gdGhhdCB0aGV5IHJlY29nbml6ZXMgdGhlIG5ldworICAgZXJybm8gdmFsdWVz IGZyb20gdGhlIHN5c3RlbS4gICovCisKKyMgaWZuZGVmIEVOT01TRworIyAgZGVmaW5lIEVO T01TRyAgICAyMDAwCisjICBkZWZpbmUgR05VTElCX2RlZmluZWRfRU5PTVNHIDEKKyMgZW5k aWYKKworIyBpZm5kZWYgRUlEUk0KKyMgIGRlZmluZSBFSURSTSAgICAgMjAwMQorIyAgZGVm aW5lIEdOVUxJQl9kZWZpbmVkX0VJRFJNIDEKKyMgZW5kaWYKKworIyBpZm5kZWYgRU5PTElO SworIyAgZGVmaW5lIEVOT0xJTksgICAyMDAyCisjICBkZWZpbmUgR05VTElCX2RlZmluZWRf RU5PTElOSyAxCisjIGVuZGlmCisKKyMgaWZuZGVmIEVQUk9UTworIyAgZGVmaW5lIEVQUk9U TyAgICAyMDAzCisjICBkZWZpbmUgR05VTElCX2RlZmluZWRfRVBST1RPIDEKKyMgZW5kaWYK KworIyBpZm5kZWYgRU1VTFRJSE9QCisjICBkZWZpbmUgRU1VTFRJSE9QIDIwMDQKKyMgIGRl ZmluZSBHTlVMSUJfZGVmaW5lZF9FTVVMVElIT1AgMQorIyBlbmRpZgorCisjIGlmbmRlZiBF QkFETVNHCisjICBkZWZpbmUgRUJBRE1TRyAgIDIwMDUKKyMgIGRlZmluZSBHTlVMSUJfZGVm aW5lZF9FQkFETVNHIDEKKyMgZW5kaWYKKworIyBpZm5kZWYgRU9WRVJGTE9XCisjICBkZWZp bmUgRU9WRVJGTE9XIDIwMDYKKyMgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9FT1ZFUkZMT1cg MQorIyBlbmRpZgorCisjIGlmbmRlZiBFTk9UU1VQCisjICBkZWZpbmUgRU5PVFNVUCAgIDIw MDcKKyMgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9FTk9UU1VQIDEKKyMgZW5kaWYKKworIyBp Zm5kZWYgRU5FVFJFU0VUCisjICBkZWZpbmUgRU5FVFJFU0VUIDIwMTEKKyMgIGRlZmluZSBH TlVMSUJfZGVmaW5lZF9FTkVUUkVTRVQgMQorIyBlbmRpZgorCisjIGlmbmRlZiBFQ09OTkFC T1JURUQKKyMgIGRlZmluZSBFQ09OTkFCT1JURUQgMjAxMgorIyAgZGVmaW5lIEdOVUxJQl9k ZWZpbmVkX0VDT05OQUJPUlRFRCAxCisjIGVuZGlmCisKKyMgaWZuZGVmIEVTVEFMRQorIyAg ZGVmaW5lIEVTVEFMRSAgICAyMDA5CisjICBkZWZpbmUgR05VTElCX2RlZmluZWRfRVNUQUxF IDEKKyMgZW5kaWYKKworIyBpZm5kZWYgRURRVU9UCisjICBkZWZpbmUgRURRVU9UIDIwMTAK KyMgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9FRFFVT1QgMQorIyBlbmRpZgorCisjIGlmbmRl ZiBFQ0FOQ0VMRUQKKyMgIGRlZmluZSBFQ0FOQ0VMRUQgMjAwOAorIyAgZGVmaW5lIEdOVUxJ Ql9kZWZpbmVkX0VDQU5DRUxFRCAxCisjIGVuZGlmCisKKy8qIE9uIG1hbnkgcGxhdGZvcm1z LCB0aGUgbWFjcm9zIEVPV05FUkRFQUQgYW5kIEVOT1RSRUNPVkVSQUJMRSBhcmUgbm90Cisg ICBkZWZpbmVkLiAgKi8KKworIyBpZm5kZWYgRU9XTkVSREVBRAorIyAgaWYgZGVmaW5lZCBf X3N1bgorICAgIC8qIFVzZSB0aGUgc2FtZSB2YWx1ZXMgYXMgZGVmaW5lZCBmb3IgU29sYXJp cyA+PSA4LCBmb3IKKyAgICAgICBpbnRlcm9wZXJhYmlsaXR5LiAgKi8KKyMgICBkZWZpbmUg RU9XTkVSREVBRCAgICAgIDU4CisjICAgZGVmaW5lIEVOT1RSRUNPVkVSQUJMRSA1OQorIyAg ZWxpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVmaW5l ZCBfX0NZR1dJTl9fCisgICAgLyogV2UgaGF2ZSBhIGNvbmZsaWN0IGhlcmU6IHB0aHJlYWRz LXdpbjMyIGRlZmluZXMgdGhlc2UgdmFsdWVzCisgICAgICAgZGlmZmVyZW50bHkgdGhhbiBN U1ZDIDEwLiAgSXQncyBoYWlyeSB0byBkZWNpZGUgd2hpY2ggb25lIHRvIHVzZS4gICovCisj ICAgaWYgZGVmaW5lZCBfX01JTkdXMzJfXyAmJiAhZGVmaW5lZCBVU0VfV0lORE9XU19USFJF QURTCisgICAgIC8qIFVzZSB0aGUgc2FtZSB2YWx1ZXMgYXMgZGVmaW5lZCBieSBwdGhyZWFk cy13aW4zMiwgZm9yCisgICAgICAgIGludGVyb3BlcmFiaWxpdHkuICAqLworIyAgICBkZWZp bmUgRU9XTkVSREVBRCAgICAgIDQzCisjICAgIGRlZmluZSBFTk9UUkVDT1ZFUkFCTEUgNDQK KyMgICBlbHNlCisgICAgIC8qIFVzZSB0aGUgc2FtZSB2YWx1ZXMgYXMgZGVmaW5lZCBieSBN U1ZDIDEwLCBmb3IKKyAgICAgICAgaW50ZXJvcGVyYWJpbGl0eS4gICovCisjICAgIGRlZmlu ZSBFT1dORVJERUFEICAgICAgMTMzCisjICAgIGRlZmluZSBFTk9UUkVDT1ZFUkFCTEUgMTI3 CisjICAgZW5kaWYKKyMgIGVsc2UKKyMgICBkZWZpbmUgRU9XTkVSREVBRCAgICAgIDIwMTMK KyMgICBkZWZpbmUgRU5PVFJFQ09WRVJBQkxFIDIwMTQKKyMgIGVuZGlmCisjICBkZWZpbmUg R05VTElCX2RlZmluZWRfRU9XTkVSREVBRCAxCisjICBkZWZpbmUgR05VTElCX2RlZmluZWRf RU5PVFJFQ09WRVJBQkxFIDEKKyMgZW5kaWYKKworIyBpZm5kZWYgRUlMU0VRCisjICBkZWZp bmUgRUlMU0VRIDIwMTUKKyMgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9FSUxTRVEgMQorIyBl bmRpZgorCisjZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX0VSUk5PX0ggKi8KKyNlbmRpZiAv KiBfQEdVQVJEX1BSRUZJWEBfRVJSTk9fSCAqLwoKPT09IGFkZGVkIGZpbGUgJ2xpYi9maWxl LWhhcy1hY2wuYycKLS0tIGxpYi9maWxlLWhhcy1hY2wuYwkxOTcwLTAxLTAxIDAwOjAwOjAw ICswMDAwCisrKyBsaWIvZmlsZS1oYXMtYWNsLmMJMjAxMy0wNC0xOCAwMTozNTowOCArMDAw MApAQCAtMCwwICsxLDkxOCBAQAorLyogVGVzdCB3aGV0aGVyIGEgZmlsZSBoYXMgYSBub250 cml2aWFsIGFjY2VzcyBjb250cm9sIGxpc3QuCisKKyAgIENvcHlyaWdodCAoQykgMjAwMi0y MDAzLCAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMg cHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4K KworICAgV3JpdHRlbiBieSBQYXVsIEVnZ2VydCwgQW5kcmVhcyBHcsO8bmJhY2hlciwgYW5k IEJydW5vIEhhaWJsZS4gICovCisKKy8qIFdpdGhvdXQgdGhpcyBwcmFnbWEsIGdjYyA0Ljcu MCAyMDEyMDEyNiBtYXkgc3VnZ2VzdCB0aGF0IHRoZQorICAgZmlsZV9oYXNfYWNsIGZ1bmN0 aW9uIG1pZ2h0IGJlIGNhbmRpZGF0ZSBmb3IgYXR0cmlidXRlICdjb25zdCcgICovCisjaWYg KF9fR05VQ19fID09IDQgJiYgNiA8PSBfX0dOVUNfTUlOT1JfXykgfHwgNCA8IF9fR05VQ19f CisjIHByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3N1Z2dlc3QtYXR0cmlidXRl PWNvbnN0IgorI2VuZGlmCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2luY2x1ZGUgImFj bC5oIgorCisjaW5jbHVkZSAiYWNsLWludGVybmFsLmgiCisKKworI2lmIFVTRV9BQ0wgJiYg SEFWRV9BQ0xfR0VUX0ZJTEUKKworIyBpZiBIQVZFX0FDTF9UWVBFX0VYVEVOREVEIC8qIE1h YyBPUyBYICovCisKKy8qIEFDTCBpcyBhbiBBQ0wsIGZyb20gYSBmaWxlLCBzdG9yZWQgYXMg dHlwZSBBQ0xfVFlQRV9FWFRFTkRFRC4KKyAgIFJldHVybiAxIGlmIHRoZSBnaXZlbiBBQ0wg aXMgbm9uLXRyaXZpYWwuCisgICBSZXR1cm4gMCBpZiBpdCBpcyB0cml2aWFsLiAgKi8KK2lu dAorYWNsX2V4dGVuZGVkX25vbnRyaXZpYWwgKGFjbF90IGFjbCkKK3sKKyAgLyogYWNsIGlz IG5vbi10cml2aWFsIGlmIGl0IGlzIG5vbi1lbXB0eS4gICovCisgIHJldHVybiAoYWNsX2Vu dHJpZXMgKGFjbCkgPiAwKTsKK30KKworIyBlbHNlIC8qIExpbnV4LCBGcmVlQlNELCBJUklY LCBUcnU2NCAqLworCisvKiBBQ0wgaXMgYW4gQUNMLCBmcm9tIGEgZmlsZSwgc3RvcmVkIGFz IHR5cGUgQUNMX1RZUEVfQUNDRVNTLgorICAgUmV0dXJuIDEgaWYgdGhlIGdpdmVuIEFDTCBp cyBub24tdHJpdmlhbC4KKyAgIFJldHVybiAwIGlmIGl0IGlzIHRyaXZpYWwsIGkuZS4gZXF1 aXZhbGVudCB0byBhIHNpbXBsZSBzdGF0KCkgbW9kZS4KKyAgIFJldHVybiAtMSBhbmQgc2V0 IGVycm5vIHVwb24gZmFpbHVyZSB0byBkZXRlcm1pbmUgaXQuICAqLworaW50CithY2xfYWNj ZXNzX25vbnRyaXZpYWwgKGFjbF90IGFjbCkKK3sKKyAgLyogYWNsIGlzIG5vbi10cml2aWFs IGlmIGl0IGhhcyBzb21lIGVudHJpZXMgb3RoZXIgdGhhbiBmb3IgInVzZXI6OiIsCisgICAg ICJncm91cDo6IiwgYW5kICJvdGhlcjo6Ii4gIE5vcm1hbGx5IHRoZXNlIHRocmVlIHNob3Vs ZCBiZSBwcmVzZW50CisgICAgIGF0IGxlYXN0LCBhbGxvd2luZyB1cyB0byB3cml0ZQorICAg ICAgICByZXR1cm4gKDMgPCBhY2xfZW50cmllcyAoYWNsKSk7CisgICAgIGJ1dCB0aGUgZm9s bG93aW5nIGNvZGUgaXMgbW9yZSByb2J1c3QuICAqLworIyAgaWYgSEFWRV9BQ0xfRklSU1Rf RU5UUlkgLyogTGludXgsIEZyZWVCU0QgKi8KKworICBhY2xfZW50cnlfdCBhY2U7CisgIGlu dCBnb3Rfb25lOworCisgIGZvciAoZ290X29uZSA9IGFjbF9nZXRfZW50cnkgKGFjbCwgQUNM X0ZJUlNUX0VOVFJZLCAmYWNlKTsKKyAgICAgICBnb3Rfb25lID4gMDsKKyAgICAgICBnb3Rf b25lID0gYWNsX2dldF9lbnRyeSAoYWNsLCBBQ0xfTkVYVF9FTlRSWSwgJmFjZSkpCisgICAg eworICAgICAgYWNsX3RhZ190IHRhZzsKKyAgICAgIGlmIChhY2xfZ2V0X3RhZ190eXBlIChh Y2UsICZ0YWcpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgICAgaWYgKCEodGFnID09 IEFDTF9VU0VSX09CSiB8fCB0YWcgPT0gQUNMX0dST1VQX09CSiB8fCB0YWcgPT0gQUNMX09U SEVSKSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICByZXR1cm4gZ290X29uZTsKKwor IyAgZWxzZSAvKiBJUklYLCBUcnU2NCAqLworIyAgIGlmIEhBVkVfQUNMX1RPX1NIT1JUX1RF WFQgLyogSVJJWCAqLworICAvKiBEb24ndCB1c2UgYWNsX2dldF9lbnRyeTogaXQgaXMgdW5k b2N1bWVudGVkLiAgKi8KKworICBpbnQgY291bnQgPSBhY2wtPmFjbF9jbnQ7CisgIGludCBp OworCisgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgIGFjbF9l bnRyeV90IGFjZSA9ICZhY2wtPmFjbF9lbnRyeVtpXTsKKyAgICAgIGFjbF90YWdfdCB0YWcg PSBhY2UtPmFlX3RhZzsKKworICAgICAgaWYgKCEodGFnID09IEFDTF9VU0VSX09CSiB8fCB0 YWcgPT0gQUNMX0dST1VQX09CSgorICAgICAgICAgICAgfHwgdGFnID09IEFDTF9PVEhFUl9P QkopKQorICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgIHJldHVybiAwOworCisjICAgZW5k aWYKKyMgICBpZiBIQVZFX0FDTF9GUkVFX1RFWFQgLyogVHJ1NjQgKi8KKyAgLyogRG9uJ3Qg dXNlIGFjbF9nZXRfZW50cnk6IGl0IHRha2VzIG9ubHkgb25lIGFyZ3VtZW50IGFuZCBkb2Vz IG5vdCB3b3JrLiAgKi8KKworICBpbnQgY291bnQgPSBhY2wtPmFjbF9udW07CisgIGFjbF9l bnRyeV90IGFjZTsKKworICBmb3IgKGFjZSA9IGFjbC0+YWNsX2ZpcnN0OyBjb3VudCA+IDA7 IGFjZSA9IGFjZS0+bmV4dCwgY291bnQtLSkKKyAgICB7CisgICAgICBhY2xfdGFnX3QgdGFn OworICAgICAgYWNsX3Blcm1fdCBwZXJtOworCisgICAgICB0YWcgPSBhY2UtPmVudHJ5LT5h Y2xfdHlwZTsKKyAgICAgIGlmICghKHRhZyA9PSBBQ0xfVVNFUl9PQkogfHwgdGFnID09IEFD TF9HUk9VUF9PQkogfHwgdGFnID09IEFDTF9PVEhFUikpCisgICAgICAgIHJldHVybiAxOwor CisgICAgICBwZXJtID0gYWNlLT5lbnRyeS0+YWNsX3Blcm07CisgICAgICAvKiBPbiBUcnU2 NCwgcGVybSBjYW4gYWxzbyBjb250YWluIG5vbi1zdGFuZGFyZCBiaXRzIHN1Y2ggYXMKKyAg ICAgICAgIFBFUk1fSU5TRVJULCBQRVJNX0RFTEVURSwgUEVSTV9NT0RJRlksIFBFUk1fTE9P S1VQLCAuLi4gKi8KKyAgICAgIGlmICgocGVybSAmIH4oQUNMX1JFQUQgfCBBQ0xfV1JJVEUg fCBBQ0xfRVhFQ1VURSkpICE9IDApCisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgcmV0 dXJuIDA7CisKKyMgICBlbmRpZgorIyAgZW5kaWYKK30KKworIyBlbmRpZgorCisKKyNlbGlm IFVTRV9BQ0wgJiYgSEFWRV9GQUNMICYmIGRlZmluZWQgR0VUQUNMIC8qIFNvbGFyaXMsIEN5 Z3dpbiwgbm90IEhQLVVYICovCisKKy8qIFRlc3QgYW4gQUNMIHJldHJpZXZlZCB3aXRoIEdF VEFDTC4KKyAgIFJldHVybiAxIGlmIHRoZSBnaXZlbiBBQ0wsIGNvbnNpc3Rpbmcgb2YgQ09V TlQgZW50cmllcywgaXMgbm9uLXRyaXZpYWwuCisgICBSZXR1cm4gMCBpZiBpdCBpcyB0cml2 aWFsLCBpLmUuIGVxdWl2YWxlbnQgdG8gYSBzaW1wbGUgc3RhdCgpIG1vZGUuICAqLworaW50 CithY2xfbm9udHJpdmlhbCAoaW50IGNvdW50LCBhY2xlbnRfdCAqZW50cmllcykKK3sKKyAg aW50IGk7CisKKyAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAg YWNsZW50X3QgKmFjZSA9ICZlbnRyaWVzW2ldOworCisgICAgICAvKiBOb3RlOiBJZiBhY2Ut PmFfdHlwZSA9IFVTRVJfT0JKLCBhY2UtPmFfaWQgaXMgdGhlIHN0X3VpZCBmcm9tIHN0YXQo KS4KKyAgICAgICAgIElmIGFjZS0+YV90eXBlID0gR1JPVVBfT0JKLCBhY2UtPmFfaWQgaXMg dGhlIHN0X2dpZCBmcm9tIHN0YXQoKS4KKyAgICAgICAgIFdlIGRvbid0IG5lZWQgdG8gY2hl Y2sgYWNlLT5hX2lkIGluIHRoZXNlIGNhc2VzLiAgKi8KKyAgICAgIGlmICghKGFjZS0+YV90 eXBlID09IFVTRVJfT0JKCisgICAgICAgICAgICB8fCBhY2UtPmFfdHlwZSA9PSBHUk9VUF9P QkoKKyAgICAgICAgICAgIHx8IGFjZS0+YV90eXBlID09IE9USEVSX09CSgorICAgICAgICAg ICAgLyogTm90ZTogQ3lnd2luIGRvZXMgbm90IHJldHVybiBhIENMQVNTX09CSiAoIm1hc2s6 IikgZW50cnkKKyAgICAgICAgICAgICAgIHNvbWV0aW1lcy4gICovCisgICAgICAgICAgICB8 fCBhY2UtPmFfdHlwZSA9PSBDTEFTU19PQkopKQorICAgICAgICByZXR1cm4gMTsKKyAgICB9 CisgIHJldHVybiAwOworfQorCisjIGlmZGVmIEFDRV9HRVRBQ0wKKworLyogQSBzaG9ydGN1 dCBmb3IgYSBiaXRtYXNrLiAgKi8KKyMgIGRlZmluZSBORVdfQUNFX1dSSVRFQV9EQVRBIChO RVdfQUNFX1dSSVRFX0RBVEEgfCBORVdfQUNFX0FQUEVORF9EQVRBKQorCisvKiBUZXN0IGFu IEFDTCByZXRyaWV2ZWQgd2l0aCBBQ0VfR0VUQUNMLgorICAgUmV0dXJuIDEgaWYgdGhlIGdp dmVuIEFDTCwgY29uc2lzdGluZyBvZiBDT1VOVCBlbnRyaWVzLCBpcyBub24tdHJpdmlhbC4K KyAgIFJldHVybiAwIGlmIGl0IGlzIHRyaXZpYWwsIGkuZS4gZXF1aXZhbGVudCB0byBhIHNp bXBsZSBzdGF0KCkgbW9kZS4gICovCitpbnQKK2FjbF9hY2Vfbm9udHJpdmlhbCAoaW50IGNv dW50LCBhY2VfdCAqZW50cmllcykKK3sKKyAgaW50IGk7CisKKyAgLyogVGhlIGZsYWdzIGlu IHRoZSBhY2VfdCBzdHJ1Y3R1cmUgY2hhbmdlZCBpbiBhIGJpbmFyeSBpbmNvbXBhdGlibGUg d2F5CisgICAgIHdoZW4gQUNMX05PX1RSSVZJQUwgZXRjLiB3ZXJlIGludHJvZHVjZWQgaW4g PHN5cy9hY2wuaD4gdmVyc2lvbiAxLjE1LgorICAgICBIb3cgdG8gZGlzdGluZ3Vpc2ggdGhl IHR3byBjb252ZW50aW9ucyBhdCBydW50aW1lPworICAgICBJbiB0aGUgb2xkIGNvbnZlbnRp b24sIHVzdWFsbHkgdGhyZWUgQUNFcyBoYXZlIGFfZmxhZ3MgPSBBQ0VfT1dORVIgLworICAg ICBBQ0VfR1JPVVAgLyBBQ0VfT1RIRVIsIGluIHRoZSByYW5nZSAweDAxMDAuLjB4MDQwMC4g IEluIHRoZSBuZXcKKyAgICAgY29udmVudGlvbiwgdGhlc2UgdmFsdWVzIGFyZSBub3QgdXNl ZC4gICovCisgIGludCBvbGRfY29udmVudGlvbiA9IDA7CisKKyAgZm9yIChpID0gMDsgaSA8 IGNvdW50OyBpKyspCisgICAgaWYgKGVudHJpZXNbaV0uYV9mbGFncyAmIChPTERfQUNFX09X TkVSIHwgT0xEX0FDRV9HUk9VUCB8IE9MRF9BQ0VfT1RIRVIpKQorICAgICAgeworICAgICAg ICBvbGRfY29udmVudGlvbiA9IDE7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgIGlm IChvbGRfY29udmVudGlvbikKKyAgICAvKiBSdW5uaW5nIG9uIFNvbGFyaXMgMTAuICAqLwor ICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgeworICAgICAgICBhY2Vf dCAqYWNlID0gJmVudHJpZXNbaV07CisKKyAgICAgICAgLyogTm90ZToKKyAgICAgICAgICAg SWYgYWNlLT5hX2ZsYWdzID0gQUNFX09XTkVSLCBhY2UtPmFfd2hvIGlzIHRoZSBzdF91aWQg ZnJvbSBzdGF0KCkuCisgICAgICAgICAgIElmIGFjZS0+YV9mbGFncyA9IEFDRV9HUk9VUCwg YWNlLT5hX3dobyBpcyB0aGUgc3RfZ2lkIGZyb20gc3RhdCgpLgorICAgICAgICAgICBXZSBk b24ndCBuZWVkIHRvIGNoZWNrIGFjZS0+YV93aG8gaW4gdGhlc2UgY2FzZXMuICAqLworICAg ICAgICBpZiAoIShhY2UtPmFfdHlwZSA9PSBPTERfQUxMT1cKKyAgICAgICAgICAgICAgJiYg KGFjZS0+YV9mbGFncyA9PSBPTERfQUNFX09XTkVSCisgICAgICAgICAgICAgICAgICB8fCBh Y2UtPmFfZmxhZ3MgPT0gT0xEX0FDRV9HUk9VUAorICAgICAgICAgICAgICAgICAgfHwgYWNl LT5hX2ZsYWdzID09IE9MRF9BQ0VfT1RIRVIpKSkKKyAgICAgICAgICByZXR1cm4gMTsKKyAg ICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIFJ1bm5pbmcgb24gU29sYXJpcyAxMCAo bmV3ZXIgdmVyc2lvbikgb3IgU29sYXJpcyAxMS4gICovCisgICAgICB1bnNpZ25lZCBpbnQg YWNjZXNzX21hc2tzWzZdID0KKyAgICAgICAgeworICAgICAgICAgIDAsIC8qIG93bmVyQCBk ZW55ICovCisgICAgICAgICAgMCwgLyogb3duZXJAIGFsbG93ICovCisgICAgICAgICAgMCwg LyogZ3JvdXBAIGRlbnkgKi8KKyAgICAgICAgICAwLCAvKiBncm91cEAgYWxsb3cgKi8KKyAg ICAgICAgICAwLCAvKiBldmVyeW9uZUAgZGVueSAqLworICAgICAgICAgIDAgIC8qIGV2ZXJ5 b25lQCBhbGxvdyAqLworICAgICAgICB9OworCisgICAgICBmb3IgKGkgPSAwOyBpIDwgY291 bnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgIGFjZV90ICphY2UgPSAmZW50cmllc1tp XTsKKyAgICAgICAgICB1bnNpZ25lZCBpbnQgaW5kZXgxOworICAgICAgICAgIHVuc2lnbmVk IGludCBpbmRleDI7CisKKyAgICAgICAgICBpZiAoYWNlLT5hX3R5cGUgPT0gTkVXX0FDRV9B Q0NFU1NfQUxMT1dFRF9BQ0VfVFlQRSkKKyAgICAgICAgICAgIGluZGV4MSA9IDE7CisgICAg ICAgICAgZWxzZSBpZiAoYWNlLT5hX3R5cGUgPT0gTkVXX0FDRV9BQ0NFU1NfREVOSUVEX0FD RV9UWVBFKQorICAgICAgICAgICAgaW5kZXgxID0gMDsKKyAgICAgICAgICBlbHNlCisgICAg ICAgICAgICByZXR1cm4gMTsKKworICAgICAgICAgIGlmIChhY2UtPmFfZmxhZ3MgPT0gTkVX X0FDRV9PV05FUikKKyAgICAgICAgICAgIGluZGV4MiA9IDA7CisgICAgICAgICAgZWxzZSBp ZiAoYWNlLT5hX2ZsYWdzID09IChORVdfQUNFX0dST1VQIHwgTkVXX0FDRV9JREVOVElGSUVS X0dST1VQKSkKKyAgICAgICAgICAgIGluZGV4MiA9IDI7CisgICAgICAgICAgZWxzZSBpZiAo YWNlLT5hX2ZsYWdzID09IE5FV19BQ0VfRVZFUllPTkUpCisgICAgICAgICAgICBpbmRleDIg PSA0OworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAg ICAgYWNjZXNzX21hc2tzW2luZGV4MSArIGluZGV4Ml0gfD0gYWNlLT5hX2FjY2Vzc19tYXNr OworICAgICAgICB9CisKKyAgICAgIC8qIFRoZSBzYW1lIGJpdCBzaG91bGRuJ3QgYmUgYm90 aCBhbGxvd2VkIGFuZCBkZW5pZWQuICAqLworICAgICAgaWYgKGFjY2Vzc19tYXNrc1swXSAm IGFjY2Vzc19tYXNrc1sxXSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICBpZiAoYWNjZXNz X21hc2tzWzJdICYgYWNjZXNzX21hc2tzWzNdKQorICAgICAgICByZXR1cm4gMTsKKyAgICAg IGlmIChhY2Nlc3NfbWFza3NbNF0gJiBhY2Nlc3NfbWFza3NbNV0pCisgICAgICAgIHJldHVy biAxOworCisgICAgICAvKiBDaGVjayBtaW5pbXVtIG1hc2tzLiAgKi8KKyAgICAgIGlmICgo TkVXX0FDRV9XUklURV9OQU1FRF9BVFRSUworICAgICAgICAgICB8IE5FV19BQ0VfV1JJVEVf QVRUUklCVVRFUworICAgICAgICAgICB8IE5FV19BQ0VfV1JJVEVfQUNMCisgICAgICAgICAg IHwgTkVXX0FDRV9XUklURV9PV05FUikKKyAgICAgICAgICAmIH4gYWNjZXNzX21hc2tzWzFd KQorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGFjY2Vzc19tYXNrc1sxXSAmPSB+KE5FV19B Q0VfV1JJVEVfTkFNRURfQVRUUlMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTkVX X0FDRV9XUklURV9BVFRSSUJVVEVTCisgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5F V19BQ0VfV1JJVEVfQUNMCisgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5FV19BQ0Vf V1JJVEVfT1dORVIpOworICAgICAgaWYgKChORVdfQUNFX1JFQURfTkFNRURfQVRUUlMKKyAg ICAgICAgICAgfCBORVdfQUNFX1JFQURfQVRUUklCVVRFUworICAgICAgICAgICB8IE5FV19B Q0VfUkVBRF9BQ0wKKyAgICAgICAgICAgfCBORVdfQUNFX1NZTkNIUk9OSVpFKQorICAgICAg ICAgICYgfiBhY2Nlc3NfbWFza3NbNV0pCisgICAgICAgIHJldHVybiAxOworICAgICAgYWNj ZXNzX21hc2tzWzVdICY9IH4oTkVXX0FDRV9SRUFEX05BTUVEX0FUVFJTCisgICAgICAgICAg ICAgICAgICAgICAgICAgICB8IE5FV19BQ0VfUkVBRF9BVFRSSUJVVEVTCisgICAgICAgICAg ICAgICAgICAgICAgICAgICB8IE5FV19BQ0VfUkVBRF9BQ0wKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgTkVXX0FDRV9TWU5DSFJPTklaRSk7CisKKyAgICAgIC8qIENoZWNrIHRo ZSBhbGxvd2VkIG9yIGRlbmllZCBiaXRzLiAgKi8KKyAgICAgIHN3aXRjaCAoKGFjY2Vzc19t YXNrc1swXSB8IGFjY2Vzc19tYXNrc1sxXSkKKyAgICAgICAgICAgICAgJiB+KE5FV19BQ0Vf UkVBRF9OQU1FRF9BVFRSUworICAgICAgICAgICAgICAgICAgfCBORVdfQUNFX1JFQURfQVRU UklCVVRFUworICAgICAgICAgICAgICAgICAgfCBORVdfQUNFX1JFQURfQUNMCisgICAgICAg ICAgICAgICAgICB8IE5FV19BQ0VfU1lOQ0hST05JWkUpKQorICAgICAgICB7CisgICAgICAg IGNhc2UgMDoKKyAgICAgICAgY2FzZSBORVdfQUNFX1JFQURfREFUQToKKyAgICAgICAgY2Fz ZSAgICAgICAgICAgICAgICAgICAgIE5FV19BQ0VfV1JJVEVBX0RBVEE6CisgICAgICAgIGNh c2UgTkVXX0FDRV9SRUFEX0RBVEEgfCBORVdfQUNFX1dSSVRFQV9EQVRBOgorICAgICAgICBj YXNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FV19BQ0Vf RVhFQ1VURToKKyAgICAgICAgY2FzZSBORVdfQUNFX1JFQURfREFUQSB8ICAgICAgICAgICAg ICAgICAgICAgICBORVdfQUNFX0VYRUNVVEU6CisgICAgICAgIGNhc2UgICAgICAgICAgICAg ICAgICAgICBORVdfQUNFX1dSSVRFQV9EQVRBIHwgTkVXX0FDRV9FWEVDVVRFOgorICAgICAg ICBjYXNlIE5FV19BQ0VfUkVBRF9EQVRBIHwgTkVXX0FDRV9XUklURUFfREFUQSB8IE5FV19B Q0VfRVhFQ1VURToKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg ICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgc3dpdGNoICgoYWNjZXNzX21hc2tz WzJdIHwgYWNjZXNzX21hc2tzWzNdKQorICAgICAgICAgICAgICAmIH4oTkVXX0FDRV9SRUFE X05BTUVEX0FUVFJTCisgICAgICAgICAgICAgICAgICB8IE5FV19BQ0VfUkVBRF9BVFRSSUJV VEVTCisgICAgICAgICAgICAgICAgICB8IE5FV19BQ0VfUkVBRF9BQ0wKKyAgICAgICAgICAg ICAgICAgIHwgTkVXX0FDRV9TWU5DSFJPTklaRSkpCisgICAgICAgIHsKKyAgICAgICAgY2Fz ZSAwOgorICAgICAgICBjYXNlIE5FV19BQ0VfUkVBRF9EQVRBOgorICAgICAgICBjYXNlICAg ICAgICAgICAgICAgICAgICAgTkVXX0FDRV9XUklURUFfREFUQToKKyAgICAgICAgY2FzZSBO RVdfQUNFX1JFQURfREFUQSB8IE5FV19BQ0VfV1JJVEVBX0RBVEE6CisgICAgICAgIGNhc2Ug ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVXX0FDRV9FWEVD VVRFOgorICAgICAgICBjYXNlIE5FV19BQ0VfUkVBRF9EQVRBIHwgICAgICAgICAgICAgICAg ICAgICAgIE5FV19BQ0VfRVhFQ1VURToKKyAgICAgICAgY2FzZSAgICAgICAgICAgICAgICAg ICAgIE5FV19BQ0VfV1JJVEVBX0RBVEEgfCBORVdfQUNFX0VYRUNVVEU6CisgICAgICAgIGNh c2UgTkVXX0FDRV9SRUFEX0RBVEEgfCBORVdfQUNFX1dSSVRFQV9EQVRBIHwgTkVXX0FDRV9F WEVDVVRFOgorICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg IHJldHVybiAxOworICAgICAgICB9CisgICAgICBzd2l0Y2ggKChhY2Nlc3NfbWFza3NbNF0g fCBhY2Nlc3NfbWFza3NbNV0pCisgICAgICAgICAgICAgICYgfihORVdfQUNFX1dSSVRFX05B TUVEX0FUVFJTCisgICAgICAgICAgICAgICAgICB8IE5FV19BQ0VfV1JJVEVfQVRUUklCVVRF UworICAgICAgICAgICAgICAgICAgfCBORVdfQUNFX1dSSVRFX0FDTAorICAgICAgICAgICAg ICAgICAgfCBORVdfQUNFX1dSSVRFX09XTkVSKSkKKyAgICAgICAgeworICAgICAgICBjYXNl IDA6CisgICAgICAgIGNhc2UgTkVXX0FDRV9SRUFEX0RBVEE6CisgICAgICAgIGNhc2UgICAg ICAgICAgICAgICAgICAgICBORVdfQUNFX1dSSVRFQV9EQVRBOgorICAgICAgICBjYXNlIE5F V19BQ0VfUkVBRF9EQVRBIHwgTkVXX0FDRV9XUklURUFfREFUQToKKyAgICAgICAgY2FzZSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVdfQUNFX0VYRUNV VEU6CisgICAgICAgIGNhc2UgTkVXX0FDRV9SRUFEX0RBVEEgfCAgICAgICAgICAgICAgICAg ICAgICAgTkVXX0FDRV9FWEVDVVRFOgorICAgICAgICBjYXNlICAgICAgICAgICAgICAgICAg ICAgTkVXX0FDRV9XUklURUFfREFUQSB8IE5FV19BQ0VfRVhFQ1VURToKKyAgICAgICAgY2Fz ZSBORVdfQUNFX1JFQURfREFUQSB8IE5FV19BQ0VfV1JJVEVBX0RBVEEgfCBORVdfQUNFX0VY RUNVVEU6CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg cmV0dXJuIDE7CisgICAgICAgIH0KKworICAgICAgLyogQ2hlY2sgdGhhdCB0aGUgTkVXX0FD RV9XUklURV9EQVRBIGFuZCBORVdfQUNFX0FQUEVORF9EQVRBIGJpdHMgYXJlCisgICAgICAg ICBlaXRoZXIgYm90aCBhbGxvd2VkIG9yIGJvdGggZGVuaWVkLiAgKi8KKyAgICAgIGlmICgo KGFjY2Vzc19tYXNrc1swXSAmIE5FV19BQ0VfV1JJVEVfREFUQSkgIT0gMCkKKyAgICAgICAg ICAhPSAoKGFjY2Vzc19tYXNrc1swXSAmIE5FV19BQ0VfQVBQRU5EX0RBVEEpICE9IDApKQor ICAgICAgICByZXR1cm4gMTsKKyAgICAgIGlmICgoKGFjY2Vzc19tYXNrc1syXSAmIE5FV19B Q0VfV1JJVEVfREFUQSkgIT0gMCkKKyAgICAgICAgICAhPSAoKGFjY2Vzc19tYXNrc1syXSAm IE5FV19BQ0VfQVBQRU5EX0RBVEEpICE9IDApKQorICAgICAgICByZXR1cm4gMTsKKyAgICAg IGlmICgoKGFjY2Vzc19tYXNrc1s0XSAmIE5FV19BQ0VfV1JJVEVfREFUQSkgIT0gMCkKKyAg ICAgICAgICAhPSAoKGFjY2Vzc19tYXNrc1s0XSAmIE5FV19BQ0VfQVBQRU5EX0RBVEEpICE9 IDApKQorICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKyMg ZW5kaWYKKworI2VsaWYgVVNFX0FDTCAmJiBIQVZFX0dFVEFDTCAvKiBIUC1VWCAqLworCisv KiBSZXR1cm4gMSBpZiB0aGUgZ2l2ZW4gQUNMIGlzIG5vbi10cml2aWFsLgorICAgUmV0dXJu IDAgaWYgaXQgaXMgdHJpdmlhbCwgaS5lLiBlcXVpdmFsZW50IHRvIGEgc2ltcGxlIHN0YXQo KSBtb2RlLiAgKi8KK2ludAorYWNsX25vbnRyaXZpYWwgKGludCBjb3VudCwgc3RydWN0IGFj bF9lbnRyeSAqZW50cmllcywgc3RydWN0IHN0YXQgKnNiKQoreworICBpbnQgaTsKKworICBm b3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICBzdHJ1Y3QgYWNsX2Vu dHJ5ICphY2UgPSAmZW50cmllc1tpXTsKKworICAgICAgaWYgKCEoKGFjZS0+dWlkID09IHNi LT5zdF91aWQgJiYgYWNlLT5naWQgPT0gQUNMX05TR1JPVVApCisgICAgICAgICAgICB8fCAo YWNlLT51aWQgPT0gQUNMX05TVVNFUiAmJiBhY2UtPmdpZCA9PSBzYi0+c3RfZ2lkKQorICAg ICAgICAgICAgfHwgKGFjZS0+dWlkID09IEFDTF9OU1VTRVIgJiYgYWNlLT5naWQgPT0gQUNM X05TR1JPVVApKSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICByZXR1cm4gMDsKK30K KworIyBpZiBIQVZFX0FDTFZfSCAvKiBIUC1VWCA+PSAxMS4xMSAqLworCisvKiBSZXR1cm4g MSBpZiB0aGUgZ2l2ZW4gQUNMIGlzIG5vbi10cml2aWFsLgorICAgUmV0dXJuIDAgaWYgaXQg aXMgdHJpdmlhbCwgaS5lLiBlcXVpdmFsZW50IHRvIGEgc2ltcGxlIHN0YXQoKSBtb2RlLiAg Ki8KK2ludAorYWNsdl9ub250cml2aWFsIChpbnQgY291bnQsIHN0cnVjdCBhY2wgKmVudHJp ZXMpCit7CisgIGludCBpOworCisgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAg IHsKKyAgICAgIHN0cnVjdCBhY2wgKmFjZSA9ICZlbnRyaWVzW2ldOworCisgICAgICAvKiBO b3RlOiBJZiBhY2UtPmFfdHlwZSA9IFVTRVJfT0JKLCBhY2UtPmFfaWQgaXMgdGhlIHN0X3Vp ZCBmcm9tIHN0YXQoKS4KKyAgICAgICAgIElmIGFjZS0+YV90eXBlID0gR1JPVVBfT0JKLCBh Y2UtPmFfaWQgaXMgdGhlIHN0X2dpZCBmcm9tIHN0YXQoKS4KKyAgICAgICAgIFdlIGRvbid0 IG5lZWQgdG8gY2hlY2sgYWNlLT5hX2lkIGluIHRoZXNlIGNhc2VzLiAgKi8KKyAgICAgIGlm ICghKGFjZS0+YV90eXBlID09IFVTRVJfT0JKIC8qIG5vIG5lZWQgdG8gY2hlY2sgYWNlLT5h X2lkIGhlcmUgKi8KKyAgICAgICAgICAgIHx8IGFjZS0+YV90eXBlID09IEdST1VQX09CSiAv KiBubyBuZWVkIHRvIGNoZWNrIGFjZS0+YV9pZCBoZXJlICovCisgICAgICAgICAgICB8fCBh Y2UtPmFfdHlwZSA9PSBDTEFTU19PQkoKKyAgICAgICAgICAgIHx8IGFjZS0+YV90eXBlID09 IE9USEVSX09CSikpCisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgcmV0dXJuIDA7Cit9 CisKKyMgZW5kaWYKKworI2VsaWYgVVNFX0FDTCAmJiAoSEFWRV9BQ0xYX0dFVCB8fCBIQVZF X1NUQVRBQ0wpIC8qIEFJWCAqLworCisvKiBSZXR1cm4gMSBpZiB0aGUgZ2l2ZW4gQUNMIGlz IG5vbi10cml2aWFsLgorICAgUmV0dXJuIDAgaWYgaXQgaXMgdHJpdmlhbCwgaS5lLiBlcXVp dmFsZW50IHRvIGEgc2ltcGxlIHN0YXQoKSBtb2RlLiAgKi8KK2ludAorYWNsX25vbnRyaXZp YWwgKHN0cnVjdCBhY2wgKmEpCit7CisgIC8qIFRoZSBub3JtYWwgd2F5IHRvIGl0ZXJhdGUg dGhyb3VnaCBhbiBBQ0wgaXMgbGlrZSB0aGlzOgorICAgICAgIHN0cnVjdCBhY2xfZW50cnkg KmFjZTsKKyAgICAgICBmb3IgKGFjZSA9IGEtPmFjbF9leHQ7IGFjZSAhPSBhY2xfbGFzdCAo YSk7IGFjZSA9IGFjbF9ueHQgKGFjZSkpCisgICAgICAgICB7CisgICAgICAgICAgIHN0cnVj dCBhY2VfaWQgKmFlaTsKKyAgICAgICAgICAgc3dpdGNoIChhY2UtPmFjZV90eXBlKQorICAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICBjYXNlIEFDQ19QRVJNSVQ6CisgICAgICAgICAg ICAgY2FzZSBBQ0NfREVOWToKKyAgICAgICAgICAgICBjYXNlIEFDQ19TUEVDSUZZOgorICAg ICAgICAgICAgICAgLi4uOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgZm9yIChhZWkg PSBhY2UtPmFjZV9pZDsgYWVpICE9IGlkX2xhc3QgKGFjZSk7IGFlaSA9IGlkX254dCAoYWVp KSkKKyAgICAgICAgICAgICAuLi4KKyAgICAgICAgIH0KKyAgICovCisgIHJldHVybiAoYWNs X2xhc3QgKGEpICE9IGEtPmFjbF9leHQgPyAxIDogMCk7Cit9CisKKyMgaWYgSEFWRV9BQ0xY X0dFVCAmJiBkZWZpbmVkIEFDTF9BSVhfV0lQIC8qIG5ld2VyIEFJWCAqLworCisvKiBSZXR1 cm4gMSBpZiB0aGUgZ2l2ZW4gQUNMIGlzIG5vbi10cml2aWFsLgorICAgUmV0dXJuIDAgaWYg aXQgaXMgdHJpdmlhbCwgaS5lLiBlcXVpdmFsZW50IHRvIGEgc2ltcGxlIHN0YXQoKSBtb2Rl LiAgKi8KK2ludAorYWNsX25mczRfbm9udHJpdmlhbCAobmZzNF9hY2xfaW50X3QgKmEpCit7 CisjICBpZiAxIC8qIGxldCdzIHRyeSB0aGlzIGZpcnN0ICovCisgIHJldHVybiAoYS0+YWNs RW50cnlOID4gMCA/IDEgOiAwKTsKKyMgIGVsc2UKKyAgaW50IGNvdW50ID0gYS0+YWNsRW50 cnlOOworICBpbnQgaTsKKworICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7 CisgICAgICBuZnM0X2FjZV9pbnRfdCAqYWNlID0gJmEtPmFjbEVudHJ5W2ldOworCisgICAg ICBpZiAoISgoYWNlLT5mbGFncyAmIEFDRTRfSURfU1BFQ0lBTCkgIT0gMAorICAgICAgICAg ICAgJiYgKGFjZS0+YWNlV2hvLnNwZWNpYWxfd2hvaWQgPT0gQUNFNF9XSE9fT1dORVIKKyAg ICAgICAgICAgICAgICB8fCBhY2UtPmFjZVdoby5zcGVjaWFsX3dob2lkID09IEFDRTRfV0hP X0dST1VQCisgICAgICAgICAgICAgICAgfHwgYWNlLT5hY2VXaG8uc3BlY2lhbF93aG9pZCA9 PSBBQ0U0X1dIT19FVkVSWU9ORSkKKyAgICAgICAgICAgICYmIGFjZS0+YWNlVHlwZSA9PSBB Q0U0X0FDQ0VTU19BTExPV0VEX0FDRV9UWVBFCisgICAgICAgICAgICAmJiBhY2UtPmFjZUZs YWdzID09IDAKKyAgICAgICAgICAgICYmIChhY2UtPmFjZU1hc2sgJiB+KEFDRTRfUkVBRF9E QVRBIHwgQUNFNF9MSVNUX0RJUkVDVE9SWQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfCBBQ0U0X1dSSVRFX0RBVEEgfCBBQ0U0X0FERF9GSUxFCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8IEFDRTRfRVhFQ1VURSkpID09IDApKQorICAgICAgICBy ZXR1cm4gMTsKKyAgICB9CisgIHJldHVybiAwOworIyAgZW5kaWYKK30KKworIyBlbmRpZgor CisjZWxpZiBVU0VfQUNMICYmIEhBVkVfQUNMU09SVCAvKiBOb25TdG9wIEtlcm5lbCAqLwor CisvKiBUZXN0IGFuIEFDTCByZXRyaWV2ZWQgd2l0aCBBQ0xfR0VULgorICAgUmV0dXJuIDEg aWYgdGhlIGdpdmVuIEFDTCwgY29uc2lzdGluZyBvZiBDT1VOVCBlbnRyaWVzLCBpcyBub24t dHJpdmlhbC4KKyAgIFJldHVybiAwIGlmIGl0IGlzIHRyaXZpYWwsIGkuZS4gZXF1aXZhbGVu dCB0byBhIHNpbXBsZSBzdGF0KCkgbW9kZS4gICovCitpbnQKK2FjbF9ub250cml2aWFsIChp bnQgY291bnQsIHN0cnVjdCBhY2wgKmVudHJpZXMpCit7CisgIGludCBpOworCisgIGZvciAo aSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgIHN0cnVjdCBhY2wgKmFjZSA9 ICZlbnRyaWVzW2ldOworCisgICAgICAvKiBOb3RlOiBJZiBhY2UtPmFfdHlwZSA9IFVTRVJf T0JKLCBhY2UtPmFfaWQgaXMgdGhlIHN0X3VpZCBmcm9tIHN0YXQoKS4KKyAgICAgICAgIElm IGFjZS0+YV90eXBlID0gR1JPVVBfT0JKLCBhY2UtPmFfaWQgaXMgdGhlIHN0X2dpZCBmcm9t IHN0YXQoKS4KKyAgICAgICAgIFdlIGRvbid0IG5lZWQgdG8gY2hlY2sgYWNlLT5hX2lkIGlu IHRoZXNlIGNhc2VzLiAgKi8KKyAgICAgIGlmICghKGFjZS0+YV90eXBlID09IFVTRVJfT0JK IC8qIG5vIG5lZWQgdG8gY2hlY2sgYWNlLT5hX2lkIGhlcmUgKi8KKyAgICAgICAgICAgIHx8 IGFjZS0+YV90eXBlID09IEdST1VQX09CSiAvKiBubyBuZWVkIHRvIGNoZWNrIGFjZS0+YV9p ZCBoZXJlICovCisgICAgICAgICAgICB8fCBhY2UtPmFfdHlwZSA9PSBDTEFTU19PQkoKKyAg ICAgICAgICAgIHx8IGFjZS0+YV90eXBlID09IE9USEVSX09CSikpCisgICAgICAgIHJldHVy biAxOworICAgIH0KKyAgcmV0dXJuIDA7Cit9CisKKyNlbmRpZgorCisKKy8qIFJldHVybiAx IGlmIE5BTUUgaGFzIGEgbm9udHJpdmlhbCBhY2Nlc3MgY29udHJvbCBsaXN0LCAwIGlmIE5B TUUKKyAgIG9ubHkgaGFzIG5vIG9yIGEgYmFzZSBhY2Nlc3MgY29udHJvbCBsaXN0LCBhbmQg LTEgKHNldHRpbmcgZXJybm8pCisgICBvbiBlcnJvci4gIFNCIG11c3QgYmUgc2V0IHRvIHRo ZSBzdGF0IGJ1ZmZlciBvZiBOQU1FLCBvYnRhaW5lZAorICAgdGhyb3VnaCBzdGF0KCkgb3Ig bHN0YXQoKS4gICovCisKK2ludAorZmlsZV9oYXNfYWNsIChjaGFyIGNvbnN0ICpuYW1lLCBz dHJ1Y3Qgc3RhdCBjb25zdCAqc2IpCit7CisjaWYgVVNFX0FDTAorICBpZiAoISBTX0lTTE5L IChzYi0+c3RfbW9kZSkpCisgICAgeworIyBpZiBIQVZFX0FDTF9HRVRfRklMRQorCisgICAg ICAvKiBQT1NJWCAxMDAzLjFlIChkcmFmdCAxNyAtLSBhYmFuZG9uZWQpIHNwZWNpZmljIHZl cnNpb24uICAqLworICAgICAgLyogTGludXgsIEZyZWVCU0QsIE1hYyBPUyBYLCBJUklYLCBU cnU2NCAqLworICAgICAgaW50IHJldDsKKworICAgICAgaWYgKEhBVkVfQUNMX0VYVEVOREVE X0ZJTEUpIC8qIExpbnV4ICovCisgICAgICAgIHsKKyAgICAgICAgICAvKiBPbiBMaW51eCwg YWNsX2V4dGVuZGVkX2ZpbGUgaXMgYW4gb3B0aW1pemVkIGZ1bmN0aW9uOiBJdCBvbmx5Cisg ICAgICAgICAgICAgbWFrZXMgdHdvIGNhbGxzIHRvIGdldHhhdHRyKCksIG9uZSBmb3IgQUNM X1RZUEVfQUNDRVNTLCBvbmUgZm9yCisgICAgICAgICAgICAgQUNMX1RZUEVfREVGQVVMVC4g ICovCisgICAgICAgICAgcmV0ID0gYWNsX2V4dGVuZGVkX2ZpbGUgKG5hbWUpOworICAgICAg ICB9CisgICAgICBlbHNlIC8qIEZyZWVCU0QsIE1hYyBPUyBYLCBJUklYLCBUcnU2NCAqLwor ICAgICAgICB7CisjICBpZiBIQVZFX0FDTF9UWVBFX0VYVEVOREVEIC8qIE1hYyBPUyBYICov CisgICAgICAgICAgLyogT24gTWFjIE9TIFgsIGFjbF9nZXRfZmlsZSAobmFtZSwgQUNMX1RZ UEVfQUNDRVNTKQorICAgICAgICAgICAgIGFuZCBhY2xfZ2V0X2ZpbGUgKG5hbWUsIEFDTF9U WVBFX0RFRkFVTFQpCisgICAgICAgICAgICAgYWx3YXlzIHJldHVybiBOVUxMIC8gRUlOVkFM LiAgVGhlcmUgaXMgbm8gcG9pbnQgaW4gbWFraW5nCisgICAgICAgICAgICAgdGhlc2UgdHdv IHVzZWxlc3MgY2FsbHMuICBUaGUgcmVhbCBBQ0wgaXMgcmV0cmlldmVkIHRocm91Z2gKKyAg ICAgICAgICAgICBhY2xfZ2V0X2ZpbGUgKG5hbWUsIEFDTF9UWVBFX0VYVEVOREVEKS4gICov CisgICAgICAgICAgYWNsX3QgYWNsID0gYWNsX2dldF9maWxlIChuYW1lLCBBQ0xfVFlQRV9F WFRFTkRFRCk7CisgICAgICAgICAgaWYgKGFjbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg ICAgICAgcmV0ID0gYWNsX2V4dGVuZGVkX25vbnRyaXZpYWwgKGFjbCk7CisgICAgICAgICAg ICAgIGFjbF9mcmVlIChhY2wpOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAg ICAgICAgICAgIHJldCA9IC0xOworIyAgZWxzZSAvKiBGcmVlQlNELCBJUklYLCBUcnU2NCAq LworICAgICAgICAgIGFjbF90IGFjbCA9IGFjbF9nZXRfZmlsZSAobmFtZSwgQUNMX1RZUEVf QUNDRVNTKTsKKyAgICAgICAgICBpZiAoYWNsKQorICAgICAgICAgICAgeworICAgICAgICAg ICAgICBpbnQgc2F2ZWRfZXJybm87CisKKyAgICAgICAgICAgICAgcmV0ID0gYWNsX2FjY2Vz c19ub250cml2aWFsIChhY2wpOworICAgICAgICAgICAgICBzYXZlZF9lcnJubyA9IGVycm5v OworICAgICAgICAgICAgICBhY2xfZnJlZSAoYWNsKTsKKyAgICAgICAgICAgICAgZXJybm8g PSBzYXZlZF9lcnJubzsKKyMgICBpZiBIQVZFX0FDTF9GUkVFX1RFWFQgLyogVHJ1NjQgKi8K KyAgICAgICAgICAgICAgLyogT24gT1NGLzEsIGFjbF9nZXRfZmlsZSAobmFtZSwgQUNMX1RZ UEVfREVGQVVMVCkgYWx3YXlzCisgICAgICAgICAgICAgICAgIHJldHVybnMgTlVMTCB3aXRo IGVycm5vIG5vdCBzZXQuICBUaGVyZSBpcyBubyBwb2ludCBpbgorICAgICAgICAgICAgICAg ICBtYWtpbmcgdGhpcyBjYWxsLiAgKi8KKyMgICBlbHNlIC8qIEZyZWVCU0QsIElSSVggKi8K KyAgICAgICAgICAgICAgLyogT24gTGludXgsIEZyZWVCU0QsIElSSVgsIGFjbF9nZXRfZmls ZSAobmFtZSwgQUNMX1RZUEVfQUNDRVNTKQorICAgICAgICAgICAgICAgICBhbmQgYWNsX2dl dF9maWxlIChuYW1lLCBBQ0xfVFlQRV9ERUZBVUxUKSBvbiBhIGRpcmVjdG9yeQorICAgICAg ICAgICAgICAgICBlaXRoZXIgYm90aCBzdWNjZWVkIG9yIGJvdGggZmFpbDsgaXQgZGVwZW5k cyBvbiB0aGUKKyAgICAgICAgICAgICAgICAgZmlsZSBzeXN0ZW0uICBUaGVyZWZvcmUgdGhl cmUgaXMgbm8gcG9pbnQgaW4gbWFraW5nIHRoZSBzZWNvbmQKKyAgICAgICAgICAgICAgICAg Y2FsbCBpZiB0aGUgZmlyc3Qgb25lIGFscmVhZHkgZmFpbGVkLiAgKi8KKyAgICAgICAgICAg ICAgaWYgKHJldCA9PSAwICYmIFNfSVNESVIgKHNiLT5zdF9tb2RlKSkKKyAgICAgICAgICAg ICAgICB7CisgICAgICAgICAgICAgICAgICBhY2wgPSBhY2xfZ2V0X2ZpbGUgKG5hbWUsIEFD TF9UWVBFX0RFRkFVTFQpOworICAgICAgICAgICAgICAgICAgaWYgKGFjbCkKKyAgICAgICAg ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIHJldCA9ICgwIDwgYWNsX2Vu dHJpZXMgKGFjbCkpOworICAgICAgICAgICAgICAgICAgICAgIGFjbF9mcmVlIChhY2wpOwor ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg ICAgICAgICAgICAgIHJldCA9IC0xOworICAgICAgICAgICAgICAgIH0KKyMgICBlbmRpZgor ICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldCA9IC0xOwor IyAgZW5kaWYKKyAgICAgICAgfQorICAgICAgaWYgKHJldCA8IDApCisgICAgICAgIHJldHVy biAtIGFjbF9lcnJub192YWxpZCAoZXJybm8pOworICAgICAgcmV0dXJuIHJldDsKKworIyBl bGlmIEhBVkVfRkFDTCAmJiBkZWZpbmVkIEdFVEFDTCAvKiBTb2xhcmlzLCBDeWd3aW4sIG5v dCBIUC1VWCAqLworCisjICBpZiBkZWZpbmVkIEFDTF9OT19UUklWSUFMCisKKyAgICAgIC8q IFNvbGFyaXMgMTAgKG5ld2VyIHZlcnNpb24pLCB3aGljaCBoYXMgYWRkaXRpb25hbCBBUEkg ZGVjbGFyZWQgaW4KKyAgICAgICAgIDxzeXMvYWNsLmg+IChhY2xfdCkgYW5kIGltcGxlbWVu dGVkIGluIGxpYnNlYyAoYWNsX3NldCwgYWNsX3RyaXZpYWwsCisgICAgICAgICBhY2xfZnJv bXRleHQsIC4uLikuICAqLworICAgICAgcmV0dXJuIGFjbF90cml2aWFsIChuYW1lKTsKKwor IyAgZWxzZSAvKiBTb2xhcmlzLCBDeWd3aW4sIGdlbmVyYWwgY2FzZSAqLworCisgICAgICAv KiBTb2xhcmlzIDIuNSB0aHJvdWdoIFNvbGFyaXMgMTAsIEN5Z3dpbiwgYW5kIGNvbnRlbXBv cmFuZW91cyB2ZXJzaW9ucworICAgICAgICAgb2YgVW5peHdhcmUuICBUaGUgYWNsKCkgY2Fs bCByZXR1cm5zIHRoZSBhY2Nlc3MgYW5kIGRlZmF1bHQgQUNMIGJvdGgKKyAgICAgICAgIGF0 IG9uY2UuICAqLworICAgICAgeworICAgICAgICAvKiBJbml0aWFsbHksIHRyeSB0byByZWFk IHRoZSBlbnRyaWVzIGludG8gYSBzdGFjay1hbGxvY2F0ZWQgYnVmZmVyLgorICAgICAgICAg ICBVc2UgbWFsbG9jIGlmIGl0IGRvZXMgbm90IGZpdC4gICovCisgICAgICAgIGVudW0KKyAg ICAgICAgICB7CisgICAgICAgICAgICBhbGxvY19pbml0ID0gNDAwMCAvIHNpemVvZiAoYWNs ZW50X3QpLCAvKiA+PSAzICovCisgICAgICAgICAgICBhbGxvY19tYXggPSBNSU4gKElOVF9N QVgsIFNJWkVfTUFYIC8gc2l6ZW9mIChhY2xlbnRfdCkpCisgICAgICAgICAgfTsKKyAgICAg ICAgYWNsZW50X3QgYnVmW2FsbG9jX2luaXRdOworICAgICAgICBzaXplX3QgYWxsb2MgPSBh bGxvY19pbml0OworICAgICAgICBhY2xlbnRfdCAqZW50cmllcyA9IGJ1ZjsKKyAgICAgICAg YWNsZW50X3QgKm1hbGxvY2VkID0gTlVMTDsKKyAgICAgICAgaW50IGNvdW50OworCisgICAg ICAgIGZvciAoOzspCisgICAgICAgICAgeworICAgICAgICAgICAgY291bnQgPSBhY2wgKG5h bWUsIEdFVEFDTCwgYWxsb2MsIGVudHJpZXMpOworICAgICAgICAgICAgaWYgKGNvdW50IDwg MCAmJiBlcnJubyA9PSBFTk9TUEMpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICAvKiBJbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyLiAgKi8KKyAgICAgICAgICAg ICAgICBmcmVlIChtYWxsb2NlZCk7CisgICAgICAgICAgICAgICAgaWYgKGFsbG9jID4gYWxs b2NfbWF4IC8gMikKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg ZXJybm8gPSBFTk9NRU07CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhbGxvYyA9IDIgKiBhbGxvYzsgLyog PD0gYWxsb2NfbWF4ICovCisgICAgICAgICAgICAgICAgZW50cmllcyA9IG1hbGxvY2VkID0K KyAgICAgICAgICAgICAgICAgIChhY2xlbnRfdCAqKSBtYWxsb2MgKGFsbG9jICogc2l6ZW9m IChhY2xlbnRfdCkpOworICAgICAgICAgICAgICAgIGlmIChlbnRyaWVzID09IE5VTEwpCisg ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGVycm5vID0gRU5PTUVN OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAg ICAgICB7CisgICAgICAgICAgICBpZiAoZXJybm8gPT0gRU5PU1lTIHx8IGVycm5vID09IEVO T1RTVVApCisgICAgICAgICAgICAgIDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgIGludCBzYXZlZF9lcnJubyA9IGVycm5vOworICAgICAg ICAgICAgICAgIGZyZWUgKG1hbGxvY2VkKTsKKyAgICAgICAgICAgICAgICBlcnJubyA9IHNh dmVkX2Vycm5vOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAg fQorICAgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY291bnQgPT0gMCkKKyAgICAgICAg ICA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiBEb24ndCB1 c2UgTUlOX0FDTF9FTlRSSUVTOiAgSXQncyBzZXQgdG8gNCBvbiBDeWd3aW4sIGJ1dCBDeWd3 aW4KKyAgICAgICAgICAgICAgIHJldHVybnMgb25seSAzIGVudHJpZXMgZm9yIGZpbGVzIHdp dGggbm8gQUNMLiAgQnV0IHRoaXMgaXMgc2FmZToKKyAgICAgICAgICAgICAgIElmIHRoZXJl IGFyZSBtb3JlIHRoYW4gNCBlbnRyaWVzLCB0aGVyZSBjYW5ub3QgYmUgb25seSB0aGUKKyAg ICAgICAgICAgICAgICJ1c2VyOjoiLCAiZ3JvdXA6OiIsICJvdGhlcjoiLCBhbmQgIm1hc2s6 IiBlbnRyaWVzLiAgKi8KKyAgICAgICAgICAgIGlmIChjb3VudCA+IDQpCisgICAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgICBmcmVlIChtYWxsb2NlZCk7CisgICAgICAgICAgICAg ICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGFjbF9u b250cml2aWFsIChjb3VudCwgZW50cmllcykpCisgICAgICAgICAgICAgIHsKKyAgICAgICAg ICAgICAgICBmcmVlIChtYWxsb2NlZCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7Cisg ICAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIGZyZWUgKG1hbGxvY2VkKTsK KyAgICAgIH0KKworIyAgIGlmZGVmIEFDRV9HRVRBQ0wKKyAgICAgIC8qIFNvbGFyaXMgYWxz byBoYXMgYSBkaWZmZXJlbnQgdmFyaWFudCBvZiBBQ0xzLCB1c2VkIGluIFpGUyBhbmQgTkZT djQKKyAgICAgICAgIGZpbGUgc3lzdGVtcyAod2hlcmVhcyB0aGUgb3RoZXIgb25lcyBhcmUg dXNlZCBpbiBVRlMgZmlsZSBzeXN0ZW1zKS4gICovCisgICAgICB7CisgICAgICAgIC8qIElu aXRpYWxseSwgdHJ5IHRvIHJlYWQgdGhlIGVudHJpZXMgaW50byBhIHN0YWNrLWFsbG9jYXRl ZCBidWZmZXIuCisgICAgICAgICAgIFVzZSBtYWxsb2MgaWYgaXQgZG9lcyBub3QgZml0LiAg Ki8KKyAgICAgICAgZW51bQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGFsbG9jX2luaXQg PSA0MDAwIC8gc2l6ZW9mIChhY2VfdCksIC8qID49IDMgKi8KKyAgICAgICAgICAgIGFsbG9j X21heCA9IE1JTiAoSU5UX01BWCwgU0laRV9NQVggLyBzaXplb2YgKGFjZV90KSkKKyAgICAg ICAgICB9OworICAgICAgICBhY2VfdCBidWZbYWxsb2NfaW5pdF07CisgICAgICAgIHNpemVf dCBhbGxvYyA9IGFsbG9jX2luaXQ7CisgICAgICAgIGFjZV90ICplbnRyaWVzID0gYnVmOwor ICAgICAgICBhY2VfdCAqbWFsbG9jZWQgPSBOVUxMOworICAgICAgICBpbnQgY291bnQ7CisK KyAgICAgICAgZm9yICg7OykKKyAgICAgICAgICB7CisgICAgICAgICAgICBjb3VudCA9IGFj bCAobmFtZSwgQUNFX0dFVEFDTCwgYWxsb2MsIGVudHJpZXMpOworICAgICAgICAgICAgaWYg KGNvdW50IDwgMCAmJiBlcnJubyA9PSBFTk9TUEMpCisgICAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgICAvKiBJbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyLiAgKi8KKyAg ICAgICAgICAgICAgICBmcmVlIChtYWxsb2NlZCk7CisgICAgICAgICAgICAgICAgaWYgKGFs bG9jID4gYWxsb2NfbWF4IC8gMikKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAt MTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhbGxvYyA9IDIgKiBh bGxvYzsgLyogPD0gYWxsb2NfbWF4ICovCisgICAgICAgICAgICAgICAgZW50cmllcyA9IG1h bGxvY2VkID0gKGFjZV90ICopIG1hbGxvYyAoYWxsb2MgKiBzaXplb2YgKGFjZV90KSk7Cisg ICAgICAgICAgICAgICAgaWYgKGVudHJpZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgICAgICAgICAg ICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgfQorICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICAgIHsKKyAgICAgICAg ICAgIGlmIChlcnJubyA9PSBFTk9TWVMgfHwgZXJybm8gPT0gRUlOVkFMKQorICAgICAgICAg ICAgICA7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgICBpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKKyAgICAgICAgICAgICAgICBmcmVlICht YWxsb2NlZCk7CisgICAgICAgICAgICAgICAgZXJybm8gPSBzYXZlZF9lcnJubzsKKyAgICAg ICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9Cisg ICAgICAgIGVsc2UgaWYgKGNvdW50ID09IDApCisgICAgICAgICAgOworICAgICAgICBlbHNl CisgICAgICAgICAgeworICAgICAgICAgICAgLyogSW4gdGhlIG9sZCAob3JpZ2luYWwgU29s YXJpcyAxMCkgY29udmVudGlvbjoKKyAgICAgICAgICAgICAgIElmIHRoZXJlIGFyZSBtb3Jl IHRoYW4gMyBlbnRyaWVzLCB0aGVyZSBjYW5ub3QgYmUgb25seSB0aGUKKyAgICAgICAgICAg ICAgIEFDRV9PV05FUiwgQUNFX0dST1VQLCBBQ0VfT1RIRVIgZW50cmllcy4KKyAgICAgICAg ICAgICAgIEluIHRoZSBuZXdlciBTb2xhcmlzIDEwIGFuZCBTb2xhcmlzIDExIGNvbnZlbnRp b246CisgICAgICAgICAgICAgICBJZiB0aGVyZSBhcmUgbW9yZSB0aGFuIDYgZW50cmllcywg dGhlcmUgY2Fubm90IGJlIG9ubHkgdGhlCisgICAgICAgICAgICAgICBBQ0VfT1dORVIsIEFD RV9HUk9VUCwgQUNFX0VWRVJZT05FIGVudHJpZXMsIGVhY2ggb25jZSB3aXRoCisgICAgICAg ICAgICAgICBORVdfQUNFX0FDQ0VTU19BTExPV0VEX0FDRV9UWVBFIGFuZCBvbmNlIHdpdGgK KyAgICAgICAgICAgICAgIE5FV19BQ0VfQUNDRVNTX0RFTklFRF9BQ0VfVFlQRS4gICovCisg ICAgICAgICAgICBpZiAoY291bnQgPiA2KQorICAgICAgICAgICAgICB7CisgICAgICAgICAg ICAgICAgZnJlZSAobWFsbG9jZWQpOworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAg ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChhY2xfYWNlX25vbnRyaXZpYWwgKGNv dW50LCBlbnRyaWVzKSkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZyZWUg KG1hbGxvY2VkKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAg fQorICAgICAgICAgIH0KKyAgICAgICAgZnJlZSAobWFsbG9jZWQpOworICAgICAgfQorIyAg IGVuZGlmCisKKyAgICAgIHJldHVybiAwOworIyAgZW5kaWYKKworIyBlbGlmIEhBVkVfR0VU QUNMIC8qIEhQLVVYICovCisKKyAgICAgIHsKKyAgICAgICAgc3RydWN0IGFjbF9lbnRyeSBl bnRyaWVzW05BQ0xFTlRSSUVTXTsKKyAgICAgICAgaW50IGNvdW50OworCisgICAgICAgIGNv dW50ID0gZ2V0YWNsIChuYW1lLCBOQUNMRU5UUklFUywgZW50cmllcyk7CisKKyAgICAgICAg aWYgKGNvdW50IDwgMCkKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiBFTk9TWVMgaXMg c2VlbiBvbiBuZXdlciBIUC1VWCB2ZXJzaW9ucy4KKyAgICAgICAgICAgICAgIEVPUE5PVFNV UFAgaXMgdHlwaWNhbGx5IHNlZW4gb24gTkZTIG1vdW50cy4KKyAgICAgICAgICAgICAgIEVO T1RTVVAgd2FzIHNlZW4gb24gUXVhbnR1bSBTdG9yTmV4dCBmaWxlIHN5c3RlbXMgKGN2ZnMp LiAgKi8KKyAgICAgICAgICAgIGlmIChlcnJubyA9PSBFTk9TWVMgfHwgZXJybm8gPT0gRU9Q Tk9UU1VQUCB8fCBlcnJubyA9PSBFTk9UU1VQKQorICAgICAgICAgICAgICA7CisgICAgICAg ICAgICBlbHNlCisgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICB9CisgICAg ICAgIGVsc2UgaWYgKGNvdW50ID09IDApCisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg IGVsc2UgLyogY291bnQgPiAwICovCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKGNv dW50ID4gTkFDTEVOVFJJRVMpCisgICAgICAgICAgICAgIC8qIElmIE5BQ0xFTlRSSUVTIGNh bm5vdCBiZSB0cnVzdGVkLCB1c2UgZHluYW1pYyBtZW1vcnkKKyAgICAgICAgICAgICAgICAg YWxsb2NhdGlvbi4gICovCisgICAgICAgICAgICAgIGFib3J0ICgpOworCisgICAgICAgICAg ICAvKiBJZiB0aGVyZSBhcmUgbW9yZSB0aGFuIDMgZW50cmllcywgdGhlcmUgY2Fubm90IGJl IG9ubHkgdGhlCisgICAgICAgICAgICAgICAodWlkLCUpLCAoJSxnaWQpLCAoJSwlKSBlbnRy aWVzLiAgKi8KKyAgICAgICAgICAgIGlmIChjb3VudCA+IDMpCisgICAgICAgICAgICAgIHJl dHVybiAxOworCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHN0cnVjdCBzdGF0IHN0 YXRidWY7CisKKyAgICAgICAgICAgICAgaWYgKHN0YXQgKG5hbWUsICZzdGF0YnVmKSA8IDAp CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgICAgICAgIHJldHVybiBh Y2xfbm9udHJpdmlhbCAoY291bnQsIGVudHJpZXMsICZzdGF0YnVmKTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICB9CisgICAgICB9CisKKyMgIGlmIEhBVkVfQUNMVl9IIC8qIEhQLVVY ID49IDExLjExICovCisKKyAgICAgIHsKKyAgICAgICAgc3RydWN0IGFjbCBlbnRyaWVzW05B Q0xWRU5UUklFU107CisgICAgICAgIGludCBjb3VudDsKKworICAgICAgICBjb3VudCA9IGFj bCAoKGNoYXIgKikgbmFtZSwgQUNMX0dFVCwgTkFDTFZFTlRSSUVTLCBlbnRyaWVzKTsKKwor ICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEVP UE5PVFNVUFAgaXMgc2VlbiBvbiBORlMgaW4gSFAtVVggMTEuMTEsIDExLjIzLgorICAgICAg ICAgICAgICAgRUlOVkFMIGlzIHNlZW4gb24gTkZTIGluIEhQLVVYIDExLjMxLiAgKi8KKyAg ICAgICAgICAgIGlmIChlcnJubyA9PSBFTk9TWVMgfHwgZXJybm8gPT0gRU9QTk9UU1VQUCB8 fCBlcnJubyA9PSBFSU5WQUwpCisgICAgICAgICAgICAgIDsKKyAgICAgICAgICAgIGVsc2UK KyAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgIH0KKyAgICAgICAgZWxzZSBp ZiAoY291bnQgPT0gMCkKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZWxzZSAvKiBj b3VudCA+IDAgKi8KKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoY291bnQgPiBOQUNM VkVOVFJJRVMpCisgICAgICAgICAgICAgIC8qIElmIE5BQ0xWRU5UUklFUyBjYW5ub3QgYmUg dHJ1c3RlZCwgdXNlIGR5bmFtaWMgbWVtb3J5CisgICAgICAgICAgICAgICAgIGFsbG9jYXRp b24uICAqLworICAgICAgICAgICAgICBhYm9ydCAoKTsKKworICAgICAgICAgICAgLyogSWYg dGhlcmUgYXJlIG1vcmUgdGhhbiA0IGVudHJpZXMsIHRoZXJlIGNhbm5vdCBiZSBvbmx5IHRo ZQorICAgICAgICAgICAgICAgZm91ciBiYXNlIEFDTCBlbnRyaWVzLiAgKi8KKyAgICAgICAg ICAgIGlmIChjb3VudCA+IDQpCisgICAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAg ICAgICByZXR1cm4gYWNsdl9ub250cml2aWFsIChjb3VudCwgZW50cmllcyk7CisgICAgICAg ICAgfQorICAgICAgfQorCisjICBlbmRpZgorCisjIGVsaWYgSEFWRV9BQ0xYX0dFVCAmJiBk ZWZpbmVkIEFDTF9BSVhfV0lQIC8qIEFJWCAqLworCisgICAgICBhY2xfdHlwZV90IHR5cGU7 CisgICAgICBjaGFyIGFjbGJ1ZlsxMDI0XTsKKyAgICAgIHZvaWQgKmFjbCA9IGFjbGJ1ZjsK KyAgICAgIHNpemVfdCBhY2xzaXplID0gc2l6ZW9mIChhY2xidWYpOworICAgICAgbW9kZV90 IG1vZGU7CisKKyAgICAgIGZvciAoOzspCisgICAgICAgIHsKKyAgICAgICAgICAvKiBUaGUg ZG9jcyBzYXkgdGhhdCB0eXBlIGJlaW5nIDAgaXMgZXF1aXZhbGVudCB0byBBQ0xfQU5ZLCBi dXQgaXQKKyAgICAgICAgICAgICBpcyBub3QgdHJ1ZSwgaW4gQUlYIDUuMy4gICovCisgICAg ICAgICAgdHlwZS51NjQgPSBBQ0xfQU5ZOworICAgICAgICAgIGlmIChhY2x4X2dldCAobmFt ZSwgMCwgJnR5cGUsIGFjbGJ1ZiwgJmFjbHNpemUsICZtb2RlKSA+PSAwKQorICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgaWYgKGVycm5vID09IEVOT1NZUykKKyAgICAgICAgICAg IHJldHVybiAwOworICAgICAgICAgIGlmIChlcnJubyAhPSBFTk9TUEMpCisgICAgICAgICAg ICB7CisgICAgICAgICAgICAgIGlmIChhY2wgIT0gYWNsYnVmKQorICAgICAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgICAgIGludCBzYXZlZF9lcnJubyA9IGVycm5vOworICAgICAg ICAgICAgICAgICAgZnJlZSAoYWNsKTsKKyAgICAgICAgICAgICAgICAgIGVycm5vID0gc2F2 ZWRfZXJybm87CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICByZXR1cm4gLTE7 CisgICAgICAgICAgICB9CisgICAgICAgICAgYWNsc2l6ZSA9IDIgKiBhY2xzaXplOworICAg ICAgICAgIGlmIChhY2wgIT0gYWNsYnVmKQorICAgICAgICAgICAgZnJlZSAoYWNsKTsKKyAg ICAgICAgICBhY2wgPSBtYWxsb2MgKGFjbHNpemUpOworICAgICAgICAgIGlmIChhY2wgPT0g TlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZXJybm8gPSBFTk9NRU07Cisg ICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg ICAgICBpZiAodHlwZS51NjQgPT0gQUNMX0FJWEMpCisgICAgICAgIHsKKyAgICAgICAgICBp bnQgcmVzdWx0ID0gYWNsX25vbnRyaXZpYWwgKChzdHJ1Y3QgYWNsICopIGFjbCk7CisgICAg ICAgICAgaWYgKGFjbCAhPSBhY2xidWYpCisgICAgICAgICAgICBmcmVlIChhY2wpOworICAg ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKHR5cGUu dTY0ID09IEFDTF9ORlM0KQorICAgICAgICB7CisgICAgICAgICAgaW50IHJlc3VsdCA9IGFj bF9uZnM0X25vbnRyaXZpYWwgKChuZnM0X2FjbF9pbnRfdCAqKSBhY2wpOworICAgICAgICAg IGlmIChhY2wgIT0gYWNsYnVmKQorICAgICAgICAgICAgZnJlZSAoYWNsKTsKKyAgICAgICAg ICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAg ICAgICAgICAvKiBBIG5ld2VyIHR5cGUgb2YgQUNMIGhhcyBiZWVuIGludHJvZHVjZWQgaW4g dGhlIHN5c3RlbS4KKyAgICAgICAgICAgICBXZSBzaG91bGQgYmV0dGVyIHN1cHBvcnQgaXQu ICAqLworICAgICAgICAgIGlmIChhY2wgIT0gYWNsYnVmKQorICAgICAgICAgICAgZnJlZSAo YWNsKTsKKyAgICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgICByZXR1cm4gLTE7 CisgICAgICAgIH0KKworIyBlbGlmIEhBVkVfU1RBVEFDTCAvKiBvbGRlciBBSVggKi8KKwor ICAgICAgdW5pb24geyBzdHJ1Y3QgYWNsIGE7IGNoYXIgcm9vbVs0MDk2XTsgfSB1OworCisg ICAgICBpZiAoc3RhdGFjbCAobmFtZSwgU1RYX05PUk1BTCwgJnUuYSwgc2l6ZW9mICh1KSkg PCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgIHJldHVybiBhY2xfbm9udHJpdmlh bCAoJnUuYSk7CisKKyMgZWxpZiBIQVZFX0FDTFNPUlQgLyogTm9uU3RvcCBLZXJuZWwgKi8K KworICAgICAgeworICAgICAgICBzdHJ1Y3QgYWNsIGVudHJpZXNbTkFDTEVOVFJJRVNdOwor ICAgICAgICBpbnQgY291bnQ7CisKKyAgICAgICAgY291bnQgPSBhY2wgKChjaGFyICopIG5h bWUsIEFDTF9HRVQsIE5BQ0xFTlRSSUVTLCBlbnRyaWVzKTsKKworICAgICAgICBpZiAoY291 bnQgPCAwKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChlcnJubyA9PSBFTk9TWVMg fHwgZXJybm8gPT0gRU5PVFNVUCkKKyAgICAgICAgICAgICAgOworICAgICAgICAgICAgZWxz ZQorICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgfQorICAgICAgICBlbHNl IGlmIChjb3VudCA9PSAwKQorICAgICAgICAgIHJldHVybiAwOworICAgICAgICBlbHNlIC8q IGNvdW50ID4gMCAqLworICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb3VudCA+IE5B Q0xFTlRSSUVTKQorICAgICAgICAgICAgICAvKiBJZiBOQUNMRU5UUklFUyBjYW5ub3QgYmUg dHJ1c3RlZCwgdXNlIGR5bmFtaWMgbWVtb3J5CisgICAgICAgICAgICAgICAgIGFsbG9jYXRp b24uICAqLworICAgICAgICAgICAgICBhYm9ydCAoKTsKKworICAgICAgICAgICAgLyogSWYg dGhlcmUgYXJlIG1vcmUgdGhhbiA0IGVudHJpZXMsIHRoZXJlIGNhbm5vdCBiZSBvbmx5IHRo ZQorICAgICAgICAgICAgICAgZm91ciBiYXNlIEFDTCBlbnRyaWVzLiAgKi8KKyAgICAgICAg ICAgIGlmIChjb3VudCA+IDQpCisgICAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAg ICAgICByZXR1cm4gYWNsX25vbnRyaXZpYWwgKGNvdW50LCBlbnRyaWVzKTsKKyAgICAgICAg ICB9CisgICAgICB9CisKKyMgZW5kaWYKKyAgICB9CisjZW5kaWYKKworICByZXR1cm4gMDsK K30KCj09PSBtb2RpZmllZCBmaWxlICdsaWIvZ251bGliLm1rJwotLS0gbGliL2dudWxpYi5t awkyMDEzLTAzLTEzIDE4OjQyOjIyICswMDAwCisrKyBsaWIvZ251bGliLm1rCTIwMTMtMDQt MjkgMDY6MDc6NDIgKzAwMDAKQEAgLTIxLDcgKzIxLDcgQEAKICMgdGhlIHNhbWUgZGlzdHJp YnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KICMKICMgR2VuZXJh dGVkIGJ5IGdudWxpYi10b29sLgotIyBSZXByb2R1Y2UgYnk6IGdudWxpYi10b29sIC0taW1w b3J0IC0tZGlyPS4gLS1saWI9bGliZ251IC0tc291cmNlLWJhc2U9bGliIC0tbTQtYmFzZT1t NCAtLWRvYy1iYXNlPWRvYyAtLXRlc3RzLWJhc2U9dGVzdHMgLS1hdXgtZGlyPWJ1aWxkLWF1 eCAtLWF2b2lkPWR1cCAtLWF2b2lkPWVycm5vIC0tYXZvaWQ9ZmNoZGlyIC0tYXZvaWQ9ZmNu dGwgLS1hdm9pZD1mc3RhdCAtLWF2b2lkPW1hbGxvYy1wb3NpeCAtLWF2b2lkPW1zdmMtaW52 YWwgLS1hdm9pZD1tc3ZjLW5vdGhyb3cgLS1hdm9pZD1vcGVuIC0tYXZvaWQ9b3BlbmF0LWRp ZSAtLWF2b2lkPW9wZW5kaXIgLS1hdm9pZD1yYWlzZSAtLWF2b2lkPXNhdmUtY3dkIC0tYXZv aWQ9c2VsZWN0IC0tYXZvaWQ9c2lncHJvY21hc2sgLS1hdm9pZD1zeXNfdHlwZXMgLS1hdm9p ZD10aHJlYWRsaWIgLS1tYWtlZmlsZS1uYW1lPWdudWxpYi5tayAtLWNvbmRpdGlvbmFsLWRl cGVuZGVuY2llcyAtLW5vLWxpYnRvb2wgLS1tYWNyby1wcmVmaXg9Z2wgLS1uby12Yy1maWxl cyBhbGxvY2Etb3B0IGMtY3R5cGUgYy1zdHJjYXNlIGNhcmVhZGxpbmthdCBjbG9zZS1zdHJl YW0gY3J5cHRvL21kNSBjcnlwdG8vc2hhMSBjcnlwdG8vc2hhMjU2IGNyeXB0by9zaGE1MTIg ZHRvYXN0ciBkdG90aW1lc3BlYyBkdXAyIGVudmlyb24gZXhlY2luZm8gZmFjY2Vzc2F0IGZj bnRsLWggZmRhdGFzeW5jIGZkb3BlbmRpciBmaWxlbW9kZSBmc3RhdGF0IGZzeW5jIGdldGxv YWRhdmcgZ2V0b3B0LWdudSBnZXR0aW1lIGdldHRpbWVvZmRheSBpZ25vcmUtdmFsdWUgaW50 cHJvcHMgbGFyZ2VmaWxlIGxzdGF0IG1hbnl3YXJuaW5ncyBtZW1yY2hyIG1rdGltZSBwc2Vs ZWN0IHB0aHJlYWRfc2lnbWFzayBwdXRlbnYgcmVhZGxpbmsgcmVhZGxpbmthdCBzaWcyc3Ry IHNvY2tsZW4gc3RhdC10aW1lIHN0ZGFsaWduIHN0ZGFyZyBzdGRib29sIHN0ZGlvIHN0cmZ0 aW1lIHN0cnRvaW1heCBzdHJ0b3VtYXggc3ltbGluayBzeXNfc3RhdCBzeXNfdGltZSB0aW1l IHRpbWVyLXRpbWUgdGltZXNwZWMtYWRkIHRpbWVzcGVjLXN1YiB1bnNldGVudiB1dGltZW5z IHdhcm5pbmdzCisjIFJlcHJvZHVjZSBieTogZ251bGliLXRvb2wgLS1pbXBvcnQgLS1kaXI9 LiAtLWxpYj1saWJnbnUgLS1zb3VyY2UtYmFzZT1saWIgLS1tNC1iYXNlPW00IC0tZG9jLWJh c2U9ZG9jIC0tdGVzdHMtYmFzZT10ZXN0cyAtLWF1eC1kaXI9YnVpbGQtYXV4IC0tYXZvaWQ9 ZHVwIC0tYXZvaWQ9ZmNoZGlyIC0tYXZvaWQ9ZmNudGwgLS1hdm9pZD1mc3RhdCAtLWF2b2lk PW1hbGxvYy1wb3NpeCAtLWF2b2lkPW1zdmMtaW52YWwgLS1hdm9pZD1tc3ZjLW5vdGhyb3cg LS1hdm9pZD1vcGVuIC0tYXZvaWQ9b3BlbmF0LWRpZSAtLWF2b2lkPW9wZW5kaXIgLS1hdm9p ZD1yYWlzZSAtLWF2b2lkPXNhdmUtY3dkIC0tYXZvaWQ9c2VsZWN0IC0tYXZvaWQ9c2lncHJv Y21hc2sgLS1hdm9pZD1zeXNfdHlwZXMgLS1hdm9pZD10aHJlYWRsaWIgLS1tYWtlZmlsZS1u YW1lPWdudWxpYi5tayAtLWNvbmRpdGlvbmFsLWRlcGVuZGVuY2llcyAtLW5vLWxpYnRvb2wg LS1tYWNyby1wcmVmaXg9Z2wgLS1uby12Yy1maWxlcyBhbGxvY2Etb3B0IGMtY3R5cGUgYy1z dHJjYXNlIGNhcmVhZGxpbmthdCBjbG9zZS1zdHJlYW0gY3J5cHRvL21kNSBjcnlwdG8vc2hh MSBjcnlwdG8vc2hhMjU2IGNyeXB0by9zaGE1MTIgZHRvYXN0ciBkdG90aW1lc3BlYyBkdXAy IGVudmlyb24gZXhlY2luZm8gZmFjY2Vzc2F0IGZjbnRsLWggZmRhdGFzeW5jIGZkb3BlbmRp ciBmaWxlbW9kZSBmc3RhdGF0IGZzeW5jIGdldGxvYWRhdmcgZ2V0b3B0LWdudSBnZXR0aW1l IGdldHRpbWVvZmRheSBpZ25vcmUtdmFsdWUgaW50cHJvcHMgbGFyZ2VmaWxlIGxzdGF0IG1h bnl3YXJuaW5ncyBtZW1yY2hyIG1rdGltZSBwc2VsZWN0IHB0aHJlYWRfc2lnbWFzayBwdXRl bnYgcWFjbCByZWFkbGluayByZWFkbGlua2F0IHNpZzJzdHIgc29ja2xlbiBzdGF0LXRpbWUg c3RkYWxpZ24gc3RkYXJnIHN0ZGJvb2wgc3RkaW8gc3RyZnRpbWUgc3RydG9pbWF4IHN0cnRv dW1heCBzeW1saW5rIHN5c19zdGF0IHN5c190aW1lIHRpbWUgdGltZXItdGltZSB0aW1lc3Bl Yy1hZGQgdGltZXNwZWMtc3ViIHVuc2V0ZW52IHV0aW1lbnMgd2FybmluZ3MKIAogCiBNT1NU TFlDTEVBTkZJTEVTICs9IGNvcmUgKi5zdGFja2R1bXAKQEAgLTIxNyw2ICsyMTcsNDAgQEAK IAogIyMgZW5kICAgZ251bGliIG1vZHVsZSBkdXAyCiAKKyMjIGJlZ2luIGdudWxpYiBtb2R1 bGUgZXJybm8KKworQlVJTFRfU09VUkNFUyArPSAkKEVSUk5PX0gpCisKKyMgV2UgbmVlZCB0 aGUgZm9sbG93aW5nIGluIG9yZGVyIHRvIGNyZWF0ZSA8ZXJybm8uaD4gd2hlbiB0aGUgc3lz dGVtCisjIGRvZXNuJ3QgaGF2ZSBvbmUgdGhhdCBpcyBQT1NJWCBjb21wbGlhbnQuCitpZiBH TF9HRU5FUkFURV9FUlJOT19ICitlcnJuby5oOiBlcnJuby5pbi5oICQodG9wX2J1aWxkZGly KS9jb25maWcuc3RhdHVzCisJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKwl7IGVj aG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nICYmIFwK KwkgIHNlZCAtZSAnc3xAJydHVUFSRF9QUkVGSVgnJ0B8R0x8ZycgXAorCSAgICAgIC1lICdz fEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorCSAgICAgIC1lICdz fEAnJ1BSQUdNQV9TWVNURU1fSEVBREVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8Zycg XAorCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9DT0xVTU5TJydAfEBQUkFHTUFfQ09MVU1OU0B8 ZycgXAorCSAgICAgIC1lICdzfEAnJ05FWFRfRVJSTk9fSCcnQHwkKE5FWFRfRVJSTk9fSCl8 ZycgXAorCSAgICAgIC1lICdzfEAnJ0VNVUxUSUhPUF9ISURERU4nJ0B8JChFTVVMVElIT1Bf SElEREVOKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnRU1VTFRJSE9QX1ZBTFVFJydAfCQoRU1V TFRJSE9QX1ZBTFVFKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnRU5PTElOS19ISURERU4nJ0B8 JChFTk9MSU5LX0hJRERFTil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0VOT0xJTktfVkFMVUUn J0B8JChFTk9MSU5LX1ZBTFVFKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnRU9WRVJGTE9XX0hJ RERFTicnQHwkKEVPVkVSRkxPV19ISURERU4pfGcnIFwKKwkgICAgICAtZSAnc3xAJydFT1ZF UkZMT1dfVkFMVUUnJ0B8JChFT1ZFUkZMT1dfVkFMVUUpfGcnIFwKKwkgICAgICA8ICQoc3Jj ZGlyKS9lcnJuby5pbi5oOyBcCisJfSA+ICRALXQgJiYgXAorCW12ICRALXQgJEAKK2Vsc2UK K2Vycm5vLmg6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJcm0gLWYgJEAKK2Vu ZGlmCitNT1NUTFlDTEVBTkZJTEVTICs9IGVycm5vLmggZXJybm8uaC10CisKK0VYVFJBX0RJ U1QgKz0gZXJybm8uaW4uaAorCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGVycm5vCisKICMj IGJlZ2luIGdudWxpYiBtb2R1bGUgZXVpZGFjY2VzcwogCiBpZiBnbF9HTlVMSUJfRU5BQkxF RF9ldWlkYWNjZXNzCkBAIC01NjEsNiArNTk1LDE2IEBACiAKICMjIGVuZCAgIGdudWxpYiBt b2R1bGUgcHV0ZW52CiAKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgcWFjbAorCitsaWJnbnVf YV9TT1VSQ0VTICs9IGFjbC1lcnJuby12YWxpZC5jIGZpbGUtaGFzLWFjbC5jIHFjb3B5LWFj bC5jIHFzZXQtYWNsLmMKKworRVhUUkFfRElTVCArPSBhY2wtaW50ZXJuYWwuaCBhY2wuaCBh Y2xfZW50cmllcy5jCisKK0VYVFJBX2xpYmdudV9hX1NPVVJDRVMgKz0gYWNsX2VudHJpZXMu YworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHFhY2wKKwogIyMgYmVnaW4gZ251bGliIG1v ZHVsZSByZWFkbGluawogCiAKCj09PSBtb2RpZmllZCBmaWxlICdsaWIvbWFrZWZpbGUudzMy LWluJwotLS0gbGliL21ha2VmaWxlLnczMi1pbgkyMDEzLTAyLTEyIDAzOjUyOjA0ICswMDAw CisrKyBsaWIvbWFrZWZpbGUudzMyLWluCTIwMTMtMDQtMjkgMDY6MDc6NDIgKzAwMDAKQEAg LTIzLDcgKzIzLDggQEAKIExPQ0FMX0ZMQUdTCT0gLUkuIC1JLi4vbnQvaW5jIC1JLi4vc3Jj CiBMSUJTIAkJPQogCi1HTlVMSUJPQkpTID0gJChCTEQpL2MtY3R5cGUuJChPKSBcCitHTlVM SUJPQkpTID0gJChCTEQpL2FjbC1lcnJuby12YWxpZC4kKE8pIFwKKwkgICAgICQoQkxEKS9j LWN0eXBlLiQoTykgXAogCSAgICAgJChCTEQpL2Mtc3RyY2FzZWNtcC4kKE8pIFwKIAkgICAg ICQoQkxEKS9jLXN0cm5jYXNlY21wLiQoTykgXAogCSAgICAgJChCTEQpL2Nsb3NlLXN0cmVh bS4kKE8pIFwKQEAgLTEwOSw2ICsxMTAsMTIgQEAKIFNUQVRfVElNRV9IICAgID0gJChHTlVf TElCKS9zdGF0LXRpbWUuaCBcCiAJCSAkKE5UX0lOQykvc3lzL3N0YXQuaAogCiskKEJMRCkv YWNsLWVycm5vLXZhbGlkLiQoTykgOiBcCisJJChHTlVfTElCKS9hY2wtZXJybm8tdmFsaWQu YyBcCisJJChDT05GSUdfSCkgXAorCSQoR05VX0xJQikvYWNsLmggXAorCSQoTlRfSU5DKS9z dGRib29sLmgKKwogJChCTEQpL2MtY3R5cGUuJChPKSA6IFwKIAkkKEdOVV9MSUIpL2MtY3R5 cGUuYyBcCiAJJChDT05GSUdfSCkgXAoKPT09IGFkZGVkIGZpbGUgJ2xpYi9xY29weS1hY2wu YycKLS0tIGxpYi9xY29weS1hY2wuYwkxOTcwLTAxLTAxIDAwOjAwOjAwICswMDAwCisrKyBs aWIvcWNvcHktYWNsLmMJMjAxMy0wNC0xNyAwNToyMTozMyArMDAwMApAQCAtMCwwICsxLDU4 MyBAQAorLyogY29weS1hY2wuYyAtIGNvcHkgYWNjZXNzIGNvbnRyb2wgbGlzdCBmcm9tIG9u ZSBmaWxlIHRvIGFub3RoZXIgZmlsZQorCisgICBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMywg MjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91 ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dy YW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyAg IFdyaXR0ZW4gYnkgUGF1bCBFZ2dlcnQsIEFuZHJlYXMgR3LDvG5iYWNoZXIsIGFuZCBCcnVu byBIYWlibGUuICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNsdWRlICJhY2wu aCIKKworI2luY2x1ZGUgImFjbC1pbnRlcm5hbC5oIgorCisKKy8qIENvcHkgYWNjZXNzIGNv bnRyb2wgbGlzdHMgZnJvbSBvbmUgZmlsZSB0byBhbm90aGVyLiBJZiBTT1VSQ0VfREVTQyBp cworICAgYSB2YWxpZCBmaWxlIGRlc2NyaXB0b3IsIHVzZSBmaWxlIGRlc2NyaXB0b3Igb3Bl cmF0aW9ucywgZWxzZSB1c2UKKyAgIGZpbGVuYW1lIGJhc2VkIG9wZXJhdGlvbnMgb24gU1JD X05BTUUuIExpa2V3aXNlIGZvciBERVNUX0RFU0MgYW5kCisgICBEU1RfTkFNRS4KKyAgIElm IGFjY2VzcyBjb250cm9sIGxpc3RzIGFyZSBub3QgYXZhaWxhYmxlLCBmY2htb2QgdGhlIHRh cmdldCBmaWxlIHRvCisgICBNT0RFLiAgQWxzbyBzZXRzIHRoZSBub24tcGVybWlzc2lvbiBi aXRzIG9mIHRoZSBkZXN0aW5hdGlvbiBmaWxlCisgICAoU19JU1VJRCwgU19JU0dJRCwgU19J U1ZUWCkgdG8gdGhvc2UgZnJvbSBNT0RFIGlmIGFueSBhcmUgc2V0LgorICAgUmV0dXJuIDAg aWYgc3VjY2Vzc2Z1bC4KKyAgIFJldHVybiAtMiBhbmQgc2V0IGVycm5vIGZvciBhbiBlcnJv ciByZWxhdGluZyB0byB0aGUgc291cmNlIGZpbGUuCisgICBSZXR1cm4gLTEgYW5kIHNldCBl cnJubyBmb3IgYW4gZXJyb3IgcmVsYXRpbmcgdG8gdGhlIGRlc3RpbmF0aW9uIGZpbGUuICAq LworCitpbnQKK3Fjb3B5X2FjbCAoY29uc3QgY2hhciAqc3JjX25hbWUsIGludCBzb3VyY2Vf ZGVzYywgY29uc3QgY2hhciAqZHN0X25hbWUsCisgICAgICAgICAgIGludCBkZXN0X2Rlc2Ms IG1vZGVfdCBtb2RlKQoreworI2lmIFVTRV9BQ0wgJiYgSEFWRV9BQ0xfR0VUX0ZJTEUKKyAg LyogUE9TSVggMTAwMy4xZSAoZHJhZnQgMTcgLS0gYWJhbmRvbmVkKSBzcGVjaWZpYyB2ZXJz aW9uLiAgKi8KKyAgLyogTGludXgsIEZyZWVCU0QsIE1hYyBPUyBYLCBJUklYLCBUcnU2NCAq LworIyBpZiAhSEFWRV9BQ0xfVFlQRV9FWFRFTkRFRAorICAvKiBMaW51eCwgRnJlZUJTRCwg SVJJWCwgVHJ1NjQgKi8KKworICBhY2xfdCBhY2w7CisgIGludCByZXQ7CisKKyAgaWYgKEhB VkVfQUNMX0dFVF9GRCAmJiBzb3VyY2VfZGVzYyAhPSAtMSkKKyAgICBhY2wgPSBhY2xfZ2V0 X2ZkIChzb3VyY2VfZGVzYyk7CisgIGVsc2UKKyAgICBhY2wgPSBhY2xfZ2V0X2ZpbGUgKHNy Y19uYW1lLCBBQ0xfVFlQRV9BQ0NFU1MpOworICBpZiAoYWNsID09IE5VTEwpCisgICAgewor ICAgICAgaWYgKCEgYWNsX2Vycm5vX3ZhbGlkIChlcnJubykpCisgICAgICAgIHJldHVybiBx c2V0X2FjbCAoZHN0X25hbWUsIGRlc3RfZGVzYywgbW9kZSk7CisgICAgICBlbHNlCisgICAg ICAgIHJldHVybiAtMjsKKyAgICB9CisKKyAgaWYgKEhBVkVfQUNMX1NFVF9GRCAmJiBkZXN0 X2Rlc2MgIT0gLTEpCisgICAgcmV0ID0gYWNsX3NldF9mZCAoZGVzdF9kZXNjLCBhY2wpOwor ICBlbHNlCisgICAgcmV0ID0gYWNsX3NldF9maWxlIChkc3RfbmFtZSwgQUNMX1RZUEVfQUND RVNTLCBhY2wpOworICBpZiAocmV0ICE9IDApCisgICAgeworICAgICAgaW50IHNhdmVkX2Vy cm5vID0gZXJybm87CisKKyAgICAgIGlmICghIGFjbF9lcnJub192YWxpZCAoZXJybm8pICYm ICFhY2xfYWNjZXNzX25vbnRyaXZpYWwgKGFjbCkpCisgICAgICAgIHsKKyAgICAgICAgICBh Y2xfZnJlZSAoYWNsKTsKKyAgICAgICAgICByZXR1cm4gY2htb2Rfb3JfZmNobW9kIChkc3Rf bmFtZSwgZGVzdF9kZXNjLCBtb2RlKTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAg ICB7CisgICAgICAgICAgYWNsX2ZyZWUgKGFjbCk7CisgICAgICAgICAgY2htb2Rfb3JfZmNo bW9kIChkc3RfbmFtZSwgZGVzdF9kZXNjLCBtb2RlKTsKKyAgICAgICAgICBlcnJubyA9IHNh dmVkX2Vycm5vOworICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKyAg ZWxzZQorICAgIGFjbF9mcmVlIChhY2wpOworCisgIGlmICghTU9ERV9JTlNJREVfQUNMIHx8 IChtb2RlICYgKFNfSVNVSUQgfCBTX0lTR0lEIHwgU19JU1ZUWCkpKQorICAgIHsKKyAgICAg IC8qIFdlIGRpZCBub3QgY2FsbCBjaG1vZCBzbyBmYXIsIGFuZCBlaXRoZXIgdGhlIG1vZGUg YW5kIHRoZSBBQ0wgYXJlCisgICAgICAgICBzZXBhcmF0ZSBvciBzcGVjaWFsIGJpdHMgYXJl IHRvIGJlIHNldCB3aGljaCBkb24ndCBmaXQgaW50byBBQ0xzLiAgKi8KKworICAgICAgaWYg KGNobW9kX29yX2ZjaG1vZCAoZHN0X25hbWUsIGRlc3RfZGVzYywgbW9kZSkgIT0gMCkKKyAg ICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICBpZiAoU19JU0RJUiAobW9kZSkpCisgICAg eworICAgICAgYWNsID0gYWNsX2dldF9maWxlIChzcmNfbmFtZSwgQUNMX1RZUEVfREVGQVVM VCk7CisgICAgICBpZiAoYWNsID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMjsKKworICAg ICAgaWYgKGFjbF9zZXRfZmlsZSAoZHN0X25hbWUsIEFDTF9UWVBFX0RFRkFVTFQsIGFjbCkp CisgICAgICAgIHsKKyAgICAgICAgICBpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKKworICAg ICAgICAgIGFjbF9mcmVlIChhY2wpOworICAgICAgICAgIGVycm5vID0gc2F2ZWRfZXJybm87 CisgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAg IGFjbF9mcmVlIChhY2wpOworICAgIH0KKyAgcmV0dXJuIDA7CisKKyMgZWxzZSAvKiBIQVZF X0FDTF9UWVBFX0VYVEVOREVEICovCisgIC8qIE1hYyBPUyBYICovCisKKyAgLyogT24gTWFj IE9TIFgsICBhY2xfZ2V0X2ZpbGUgKG5hbWUsIEFDTF9UWVBFX0FDQ0VTUykKKyAgICAgYW5k ICAgICAgICAgICBhY2xfZ2V0X2ZpbGUgKG5hbWUsIEFDTF9UWVBFX0RFRkFVTFQpCisgICAg IGFsd2F5cyByZXR1cm4gTlVMTCAvIEVJTlZBTC4gIFlvdSBoYXZlIHRvIHVzZQorICAgICAg ICAgICAgICAgICAgIGFjbF9nZXRfZmlsZSAobmFtZSwgQUNMX1RZUEVfRVhURU5ERUQpCisg ICAgIG9yICAgICAgICAgICAgYWNsX2dldF9mZCAob3BlbiAobmFtZSwgLi4uKSkKKyAgICAg dG8gcmV0cmlldmUgYW4gQUNMLgorICAgICBPbiB0aGUgb3RoZXIgaGFuZCwKKyAgICAgICAg ICAgICAgICAgICBhY2xfc2V0X2ZpbGUgKG5hbWUsIEFDTF9UWVBFX0FDQ0VTUywgYWNsKQor ICAgICBhbmQgICAgICAgICAgIGFjbF9zZXRfZmlsZSAobmFtZSwgQUNMX1RZUEVfREVGQVVM VCwgYWNsKQorICAgICBoYXZlIHRoZSBzYW1lIGVmZmVjdCBhcworICAgICAgICAgICAgICAg ICAgIGFjbF9zZXRfZmlsZSAobmFtZSwgQUNMX1RZUEVfRVhURU5ERUQsIGFjbCk6CisgICAg IEVhY2ggb2YgdGhlc2UgY2FsbHMgc2V0cyB0aGUgZmlsZSdzIEFDTC4gICovCisKKyAgYWNs X3QgYWNsOworICBpbnQgcmV0OworCisgIGlmIChIQVZFX0FDTF9HRVRfRkQgJiYgc291cmNl X2Rlc2MgIT0gLTEpCisgICAgYWNsID0gYWNsX2dldF9mZCAoc291cmNlX2Rlc2MpOworICBl bHNlCisgICAgYWNsID0gYWNsX2dldF9maWxlIChzcmNfbmFtZSwgQUNMX1RZUEVfRVhURU5E RUQpOworICBpZiAoYWNsID09IE5VTEwpCisgICAgeworICAgICAgaWYgKCFhY2xfZXJybm9f dmFsaWQgKGVycm5vKSkKKyAgICAgICAgcmV0dXJuIHFzZXRfYWNsIChkc3RfbmFtZSwgZGVz dF9kZXNjLCBtb2RlKTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIC0yOworICAgIH0K KworICBpZiAoSEFWRV9BQ0xfU0VUX0ZEICYmIGRlc3RfZGVzYyAhPSAtMSkKKyAgICByZXQg PSBhY2xfc2V0X2ZkIChkZXN0X2Rlc2MsIGFjbCk7CisgIGVsc2UKKyAgICByZXQgPSBhY2xf c2V0X2ZpbGUgKGRzdF9uYW1lLCBBQ0xfVFlQRV9FWFRFTkRFRCwgYWNsKTsKKyAgaWYgKHJl dCAhPSAwKQorICAgIHsKKyAgICAgIGludCBzYXZlZF9lcnJubyA9IGVycm5vOworCisgICAg ICBpZiAoIWFjbF9lcnJub192YWxpZCAoc2F2ZWRfZXJybm8pICYmICFhY2xfZXh0ZW5kZWRf bm9udHJpdmlhbCAoYWNsKSkKKyAgICAgICAgeworICAgICAgICAgIGFjbF9mcmVlIChhY2wp OworICAgICAgICAgIHJldHVybiBjaG1vZF9vcl9mY2htb2QgKGRzdF9uYW1lLCBkZXN0X2Rl c2MsIG1vZGUpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAg ICBhY2xfZnJlZSAoYWNsKTsKKyAgICAgICAgICBjaG1vZF9vcl9mY2htb2QgKGRzdF9uYW1l LCBkZXN0X2Rlc2MsIG1vZGUpOworICAgICAgICAgIGVycm5vID0gc2F2ZWRfZXJybm87Cisg ICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorICBlbHNlCisgICAgYWNs X2ZyZWUgKGFjbCk7CisKKyAgLyogU2luY2UgIU1PREVfSU5TSURFX0FDTCwgd2UgaGF2ZSB0 byBjYWxsIGNobW9kIGV4cGxpY2l0bHkuICAqLworICByZXR1cm4gY2htb2Rfb3JfZmNobW9k IChkc3RfbmFtZSwgZGVzdF9kZXNjLCBtb2RlKTsKKworIyBlbmRpZgorCisjZWxpZiBVU0Vf QUNMICYmIGRlZmluZWQgR0VUQUNMIC8qIFNvbGFyaXMsIEN5Z3dpbiwgbm90IEhQLVVYICov CisKKyAgLyogU29sYXJpcyAyLjUgdGhyb3VnaCBTb2xhcmlzIDEwLCBDeWd3aW4sIGFuZCBj b250ZW1wb3JhbmVvdXMgdmVyc2lvbnMKKyAgICAgb2YgVW5peHdhcmUuICBUaGUgYWNsKCkg Y2FsbCByZXR1cm5zIHRoZSBhY2Nlc3MgYW5kIGRlZmF1bHQgQUNMIGJvdGgKKyAgICAgYXQg b25jZS4gICovCisjIGlmZGVmIEFDRV9HRVRBQ0wKKyAgaW50IGFjZV9jb3VudDsKKyAgYWNl X3QgKmFjZV9lbnRyaWVzOworIyBlbmRpZgorICBpbnQgY291bnQ7CisgIGFjbGVudF90ICpl bnRyaWVzOworICBpbnQgZGlkX2NobW9kOworICBpbnQgc2F2ZWRfZXJybm87CisgIGludCBy ZXQ7CisKKyMgaWZkZWYgQUNFX0dFVEFDTAorICAvKiBTb2xhcmlzIGFsc28gaGFzIGEgZGlm ZmVyZW50IHZhcmlhbnQgb2YgQUNMcywgdXNlZCBpbiBaRlMgYW5kIE5GU3Y0CisgICAgIGZp bGUgc3lzdGVtcyAod2hlcmVhcyB0aGUgb3RoZXIgb25lcyBhcmUgdXNlZCBpbiBVRlMgZmls ZSBzeXN0ZW1zKS4KKyAgICAgVGhlcmUgaXMgYW4gQVBJCisgICAgICAgcGF0aGNvbmYgKG5h bWUsIF9QQ19BQ0xfRU5BQkxFRCkKKyAgICAgICBmcGF0aGNvbmYgKGRlc2MsIF9QQ19BQ0xf RU5BQkxFRCkKKyAgICAgdGhhdCBhbGxvd3MgdG8gZGV0ZXJtaW5lIHdoaWNoIG9mIHRoZSB0 d28ga2luZHMgb2YgQUNMcyBpcyBzdXBwb3J0ZWQKKyAgICAgZm9yIHRoZSBnaXZlbiBmaWxl LiAgQnV0IHNvbWUgZmlsZSBzeXN0ZW1zIG1heSBpbXBsZW1lbnQgdGhpcyBjYWxsCisgICAg IGluY29ycmVjdGx5LCBzbyBiZXR0ZXIgbm90IHVzZSBpdC4KKyAgICAgV2hlbiBmZXRjaGlu ZyB0aGUgc291cmNlIEFDTCwgd2Ugc2ltcGx5IGZldGNoIGJvdGggQUNMIHR5cGVzLgorICAg ICBXaGVuIHNldHRpbmcgdGhlIGRlc3RpbmF0aW9uIEFDTCwgd2UgdHJ5IGVpdGhlciBBQ0wg dHlwZXMsIGFzc3VtaW5nCisgICAgIHRoYXQgdGhlIGtlcm5lbCB3aWxsIHRyYW5zbGF0ZSB0 aGUgQUNMIGZyb20gb25lIGZvcm0gdG8gdGhlIG90aGVyLgorICAgICAoU2VlIGluIDxodHRw Oi8vZG9jcy5zdW4uY29tL2FwcC9kb2NzL2RvYy84MTktMjI0MS82bjRodWM3aWE/bD1lbiZh PXZpZXc+CisgICAgIHRoZSBkZXNjcmlwdGlvbiBvZiBFTk9UU1VQLikgICovCisgIGZvciAo OzspCisgICAgeworICAgICAgYWNlX2NvdW50ID0gKHNvdXJjZV9kZXNjICE9IC0xCisgICAg ICAgICAgICAgICAgICAgPyBmYWNsIChzb3VyY2VfZGVzYywgQUNFX0dFVEFDTENOVCwgMCwg TlVMTCkKKyAgICAgICAgICAgICAgICAgICA6IGFjbCAoc3JjX25hbWUsIEFDRV9HRVRBQ0xD TlQsIDAsIE5VTEwpKTsKKworICAgICAgaWYgKGFjZV9jb3VudCA8IDApCisgICAgICAgIHsK KyAgICAgICAgICBpZiAoZXJybm8gPT0gRU5PU1lTIHx8IGVycm5vID09IEVJTlZBTCkKKyAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgYWNlX2NvdW50ID0gMDsKKyAgICAgICAgICAg ICAgYWNlX2VudHJpZXMgPSBOVUxMOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gLTI7CisgICAgICAg IH0KKworICAgICAgaWYgKGFjZV9jb3VudCA9PSAwKQorICAgICAgICB7CisgICAgICAgICAg YWNlX2VudHJpZXMgPSBOVUxMOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg ICAgIGFjZV9lbnRyaWVzID0gKGFjZV90ICopIG1hbGxvYyAoYWNlX2NvdW50ICogc2l6ZW9m IChhY2VfdCkpOworICAgICAgaWYgKGFjZV9lbnRyaWVzID09IE5VTEwpCisgICAgICAgIHsK KyAgICAgICAgICBlcnJubyA9IEVOT01FTTsKKyAgICAgICAgICByZXR1cm4gLTI7CisgICAg ICAgIH0KKworICAgICAgcmV0ID0gKHNvdXJjZV9kZXNjICE9IC0xCisgICAgICAgICAgICAg PyBmYWNsIChzb3VyY2VfZGVzYywgQUNFX0dFVEFDTCwgYWNlX2NvdW50LCBhY2VfZW50cmll cykKKyAgICAgICAgICAgICA6IGFjbCAoc3JjX25hbWUsIEFDRV9HRVRBQ0wsIGFjZV9jb3Vu dCwgYWNlX2VudHJpZXMpKTsKKyAgICAgIGlmIChyZXQgPCAwKQorICAgICAgICB7CisgICAg ICAgICAgZnJlZSAoYWNlX2VudHJpZXMpOworICAgICAgICAgIGlmIChlcnJubyA9PSBFTk9T WVMgfHwgZXJybm8gPT0gRUlOVkFMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBh Y2VfY291bnQgPSAwOworICAgICAgICAgICAgICBhY2VfZW50cmllcyA9IE5VTEw7CisgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAg ICAgICAgIHJldHVybiAtMjsKKyAgICAgICAgfQorICAgICAgaWYgKHJldCA9PSBhY2VfY291 bnQpCisgICAgICAgIGJyZWFrOworICAgICAgLyogSHVoPyBUaGUgbnVtYmVyIG9mIEFDTCBl bnRyaWVzIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgY2FsbC4KKyAgICAgICAgIFJlcGVhdC4g ICovCisgICAgfQorIyBlbmRpZgorCisgIGZvciAoOzspCisgICAgeworICAgICAgY291bnQg PSAoc291cmNlX2Rlc2MgIT0gLTEKKyAgICAgICAgICAgICAgID8gZmFjbCAoc291cmNlX2Rl c2MsIEdFVEFDTENOVCwgMCwgTlVMTCkKKyAgICAgICAgICAgICAgIDogYWNsIChzcmNfbmFt ZSwgR0VUQUNMQ05ULCAwLCBOVUxMKSk7CisKKyAgICAgIGlmIChjb3VudCA8IDApCisgICAg ICAgIHsKKyAgICAgICAgICBpZiAoZXJybm8gPT0gRU5PU1lTIHx8IGVycm5vID09IEVOT1RT VVAgfHwgZXJybm8gPT0gRU9QTk9UU1VQUCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgY291bnQgPSAwOworICAgICAgICAgICAgICBlbnRyaWVzID0gTlVMTDsKKyAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAg ICAgcmV0dXJuIC0yOworICAgICAgICB9CisKKyAgICAgIGlmIChjb3VudCA9PSAwKQorICAg ICAgICB7CisgICAgICAgICAgZW50cmllcyA9IE5VTEw7CisgICAgICAgICAgYnJlYWs7Cisg ICAgICAgIH0KKworICAgICAgZW50cmllcyA9IChhY2xlbnRfdCAqKSBtYWxsb2MgKGNvdW50 ICogc2l6ZW9mIChhY2xlbnRfdCkpOworICAgICAgaWYgKGVudHJpZXMgPT0gTlVMTCkKKyAg ICAgICAgeworICAgICAgICAgIGVycm5vID0gRU5PTUVNOworICAgICAgICAgIHJldHVybiAt MjsKKyAgICAgICAgfQorCisgICAgICBpZiAoKHNvdXJjZV9kZXNjICE9IC0xCisgICAgICAg ICAgID8gZmFjbCAoc291cmNlX2Rlc2MsIEdFVEFDTCwgY291bnQsIGVudHJpZXMpCisgICAg ICAgICAgIDogYWNsIChzcmNfbmFtZSwgR0VUQUNMLCBjb3VudCwgZW50cmllcykpCisgICAg ICAgICAgPT0gY291bnQpCisgICAgICAgIGJyZWFrOworICAgICAgLyogSHVoPyBUaGUgbnVt YmVyIG9mIEFDTCBlbnRyaWVzIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgY2FsbC4KKyAgICAg ICAgIFJlcGVhdC4gICovCisgICAgfQorCisgIC8qIElzIHRoZXJlIGFuIEFDTCBvZiBlaXRo ZXIga2luZD8gICovCisjIGlmZGVmIEFDRV9HRVRBQ0wKKyAgaWYgKGFjZV9jb3VudCA9PSAw KQorIyBlbmRpZgorICAgIGlmIChjb3VudCA9PSAwKQorICAgICAgcmV0dXJuIHFzZXRfYWNs IChkc3RfbmFtZSwgZGVzdF9kZXNjLCBtb2RlKTsKKworICBkaWRfY2htb2QgPSAwOyAvKiBz ZXQgdG8gMSBvbmNlIHRoZSBtb2RlIGJpdHMgaW4gMDc3NyBoYXZlIGJlZW4gc2V0ICovCisg IHNhdmVkX2Vycm5vID0gMDsgLyogdGhlIGZpcnN0IG5vbi1pZ25vcmFibGUgZXJyb3IgY29k ZSAqLworCisgIGlmICghTU9ERV9JTlNJREVfQUNMKQorICAgIHsKKyAgICAgIC8qIE9uIEN5 Z3dpbiwgaXQgaXMgbmVjZXNzYXJ5IHRvIGNhbGwgY2htb2QgYmVmb3JlIGFjbCwgYmVjYXVz ZQorICAgICAgICAgY2htb2QgY2FuIGNoYW5nZSB0aGUgY29udGVudHMgb2YgdGhlIEFDTCAo aW4gd2F5cyB0aGF0IGRvbid0CisgICAgICAgICBjaGFuZ2UgdGhlIGFsbG93ZWQgYWNjZXNz ZXMsIGJ1dCBzdGlsbCB2aXNpYmxlKS4gICovCisgICAgICBpZiAoY2htb2Rfb3JfZmNobW9k IChkc3RfbmFtZSwgZGVzdF9kZXNjLCBtb2RlKSAhPSAwKQorICAgICAgICBzYXZlZF9lcnJu byA9IGVycm5vOworICAgICAgZGlkX2NobW9kID0gMTsKKyAgICB9CisKKyAgLyogSWYgYm90 aCBhY2VfZW50cmllcyBhbmQgZW50cmllcyBhcmUgYXZhaWxhYmxlLCB0cnkgU0VUQUNMIGJl Zm9yZQorICAgICBBQ0VfU0VUQUNMLCBiZWNhdXNlIFNFVEFDTCBjYW5ub3QgZmFpbCB3aXRo IEVOT1RTVVAgd2hlcmVhcyBBQ0VfU0VUQUNMCisgICAgIGNhbi4gICovCisKKyAgaWYgKGNv dW50ID4gMCkKKyAgICB7CisgICAgICByZXQgPSAoZGVzdF9kZXNjICE9IC0xCisgICAgICAg ICAgICAgPyBmYWNsIChkZXN0X2Rlc2MsIFNFVEFDTCwgY291bnQsIGVudHJpZXMpCisgICAg ICAgICAgICAgOiBhY2wgKGRzdF9uYW1lLCBTRVRBQ0wsIGNvdW50LCBlbnRyaWVzKSk7Cisg ICAgICBpZiAocmV0IDwgMCAmJiBzYXZlZF9lcnJubyA9PSAwKQorICAgICAgICB7CisgICAg ICAgICAgc2F2ZWRfZXJybm8gPSBlcnJubzsKKyAgICAgICAgICBpZiAoKGVycm5vID09IEVO T1NZUyB8fCBlcnJubyA9PSBFT1BOT1RTVVBQIHx8IGVycm5vID09IEVJTlZBTCkKKyAgICAg ICAgICAgICAgJiYgIWFjbF9ub250cml2aWFsIChjb3VudCwgZW50cmllcykpCisgICAgICAg ICAgICBzYXZlZF9lcnJubyA9IDA7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAg ZGlkX2NobW9kID0gMTsKKyAgICB9CisgIGZyZWUgKGVudHJpZXMpOworCisjIGlmZGVmIEFD RV9HRVRBQ0wKKyAgaWYgKGFjZV9jb3VudCA+IDApCisgICAgeworICAgICAgcmV0ID0gKGRl c3RfZGVzYyAhPSAtMQorICAgICAgICAgICAgID8gZmFjbCAoZGVzdF9kZXNjLCBBQ0VfU0VU QUNMLCBhY2VfY291bnQsIGFjZV9lbnRyaWVzKQorICAgICAgICAgICAgIDogYWNsIChkc3Rf bmFtZSwgQUNFX1NFVEFDTCwgYWNlX2NvdW50LCBhY2VfZW50cmllcykpOworICAgICAgaWYg KHJldCA8IDAgJiYgc2F2ZWRfZXJybm8gPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIHNh dmVkX2Vycm5vID0gZXJybm87CisgICAgICAgICAgaWYgKChlcnJubyA9PSBFTk9TWVMgfHwg ZXJybm8gPT0gRUlOVkFMIHx8IGVycm5vID09IEVOT1RTVVApCisgICAgICAgICAgICAgICYm ICFhY2xfYWNlX25vbnRyaXZpYWwgKGFjZV9jb3VudCwgYWNlX2VudHJpZXMpKQorICAgICAg ICAgICAgc2F2ZWRfZXJybm8gPSAwOworICAgICAgICB9CisgICAgfQorICBmcmVlIChhY2Vf ZW50cmllcyk7CisjIGVuZGlmCisKKyAgaWYgKE1PREVfSU5TSURFX0FDTAorICAgICAgJiYg ZGlkX2NobW9kIDw9ICgobW9kZSAmIChTX0lTVUlEIHwgU19JU0dJRCB8IFNfSVNWVFgpKSA/ IDEgOiAwKSkKKyAgICB7CisgICAgICAvKiBXZSBkaWQgbm90IGNhbGwgY2htb2Qgc28gZmFy LCBhbmQgZWl0aGVyIHRoZSBtb2RlIGFuZCB0aGUgQUNMIGFyZQorICAgICAgICAgc2VwYXJh dGUgb3Igc3BlY2lhbCBiaXRzIGFyZSB0byBiZSBzZXQgd2hpY2ggZG9uJ3QgZml0IGludG8g QUNMcy4gICovCisKKyAgICAgIGlmIChjaG1vZF9vcl9mY2htb2QgKGRzdF9uYW1lLCBkZXN0 X2Rlc2MsIG1vZGUpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoc2F2ZWRfZXJy bm8gPT0gMCkKKyAgICAgICAgICAgIHNhdmVkX2Vycm5vID0gZXJybm87CisgICAgICAgIH0K KyAgICB9CisKKyAgaWYgKHNhdmVkX2Vycm5vKQorICAgIHsKKyAgICAgIGVycm5vID0gc2F2 ZWRfZXJybm87CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICByZXR1cm4gMDsKKworI2Vs aWYgVVNFX0FDTCAmJiBIQVZFX0dFVEFDTCAvKiBIUC1VWCAqLworCisgIHN0cnVjdCBhY2xf ZW50cnkgZW50cmllc1tOQUNMRU5UUklFU107CisgIGludCBjb3VudDsKKyMgaWYgSEFWRV9B Q0xWX0gKKyAgc3RydWN0IGFjbCBhY2x2X2VudHJpZXNbTkFDTFZFTlRSSUVTXTsKKyAgaW50 IGFjbHZfY291bnQ7CisjIGVuZGlmCisgIGludCBkaWRfY2htb2Q7CisgIGludCBzYXZlZF9l cnJubzsKKyAgaW50IHJldDsKKworICBjb3VudCA9IChzb3VyY2VfZGVzYyAhPSAtMQorICAg ICAgICAgICA/IGZnZXRhY2wgKHNvdXJjZV9kZXNjLCBOQUNMRU5UUklFUywgZW50cmllcykK KyAgICAgICAgICAgOiBnZXRhY2wgKHNyY19uYW1lLCBOQUNMRU5UUklFUywgZW50cmllcykp OworCisgIGlmIChjb3VudCA8IDApCisgICAgeworICAgICAgaWYgKGVycm5vID09IEVOT1NZ UyB8fCBlcnJubyA9PSBFT1BOT1RTVVBQIHx8IGVycm5vID09IEVOT1RTVVApCisgICAgICAg IGNvdW50ID0gMDsKKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIC0yOworICAgIH0KKyAg ZWxzZSBpZiAoY291bnQgPiAwKQorICAgIHsKKyAgICAgIGlmIChjb3VudCA+IE5BQ0xFTlRS SUVTKQorICAgICAgICAvKiBJZiBOQUNMRU5UUklFUyBjYW5ub3QgYmUgdHJ1c3RlZCwgdXNl IGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24uICAqLworICAgICAgICBhYm9ydCAoKTsKKyAg ICB9CisKKyMgaWYgSEFWRV9BQ0xWX0gKKyAgYWNsdl9jb3VudCA9IGFjbCAoKGNoYXIgKikg c3JjX25hbWUsIEFDTF9HRVQsIE5BQ0xWRU5UUklFUywgYWNsdl9lbnRyaWVzKTsKKworICBp ZiAoYWNsdl9jb3VudCA8IDApCisgICAgeworICAgICAgaWYgKGVycm5vID09IEVOT1NZUyB8 fCBlcnJubyA9PSBFT1BOT1RTVVBQIHx8IGVycm5vID09IEVJTlZBTCkKKyAgICAgICAgY291 bnQgPSAwOworICAgICAgZWxzZQorICAgICAgICByZXR1cm4gLTI7CisgICAgfQorICBlbHNl IGlmIChhY2x2X2NvdW50ID4gMCkKKyAgICB7CisgICAgICBpZiAoYWNsdl9jb3VudCA+IE5B Q0xWRU5UUklFUykKKyAgICAgICAgLyogSWYgTkFDTFZFTlRSSUVTIGNhbm5vdCBiZSB0cnVz dGVkLCB1c2UgZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbi4gICovCisgICAgICAgIGFib3J0 ICgpOworICAgIH0KKyMgZW5kaWYKKworICBpZiAoY291bnQgPT0gMCkKKyMgaWYgSEFWRV9B Q0xWX0gKKyAgICBpZiAoYWNsdl9jb3VudCA9PSAwKQorIyBlbmRpZgorICAgICAgcmV0dXJu IHFzZXRfYWNsIChkc3RfbmFtZSwgZGVzdF9kZXNjLCBtb2RlKTsKKworICBkaWRfY2htb2Qg PSAwOyAvKiBzZXQgdG8gMSBvbmNlIHRoZSBtb2RlIGJpdHMgaW4gMDc3NyBoYXZlIGJlZW4g c2V0ICovCisgIHNhdmVkX2Vycm5vID0gMDsgLyogdGhlIGZpcnN0IG5vbi1pZ25vcmFibGUg ZXJyb3IgY29kZSAqLworCisgIGlmIChjb3VudCA+IDApCisgICAgeworICAgICAgcmV0ID0g KGRlc3RfZGVzYyAhPSAtMQorICAgICAgICAgICAgID8gZnNldGFjbCAoZGVzdF9kZXNjLCBj b3VudCwgZW50cmllcykKKyAgICAgICAgICAgICA6IHNldGFjbCAoZHN0X25hbWUsIGNvdW50 LCBlbnRyaWVzKSk7CisgICAgICBpZiAocmV0IDwgMCAmJiBzYXZlZF9lcnJubyA9PSAwKQor ICAgICAgICB7CisgICAgICAgICAgc2F2ZWRfZXJybm8gPSBlcnJubzsKKyAgICAgICAgICBp ZiAoZXJybm8gPT0gRU5PU1lTIHx8IGVycm5vID09IEVPUE5PVFNVUFAgfHwgZXJybm8gPT0g RU5PVFNVUCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc3RydWN0IHN0YXQgc291 cmNlX3N0YXRidWY7CisKKyAgICAgICAgICAgICAgaWYgKChzb3VyY2VfZGVzYyAhPSAtMQor ICAgICAgICAgICAgICAgICAgID8gZnN0YXQgKHNvdXJjZV9kZXNjLCAmc291cmNlX3N0YXRi dWYpCisgICAgICAgICAgICAgICAgICAgOiBzdGF0IChzcmNfbmFtZSwgJnNvdXJjZV9zdGF0 YnVmKSkgPT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBpZiAo IWFjbF9ub250cml2aWFsIChjb3VudCwgZW50cmllcywgJnNvdXJjZV9zdGF0YnVmKSkKKyAg ICAgICAgICAgICAgICAgICAgc2F2ZWRfZXJybm8gPSAwOworICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNhdmVkX2Vycm5vID0gZXJy bm87CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgZGlk X2NobW9kID0gMTsKKyAgICB9CisKKyMgaWYgSEFWRV9BQ0xWX0gKKyAgaWYgKGFjbHZfY291 bnQgPiAwKQorICAgIHsKKyAgICAgIHJldCA9IGFjbCAoKGNoYXIgKikgZHN0X25hbWUsIEFD TF9TRVQsIGFjbHZfY291bnQsIGFjbHZfZW50cmllcyk7CisgICAgICBpZiAocmV0IDwgMCAm JiBzYXZlZF9lcnJubyA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgc2F2ZWRfZXJybm8g PSBlcnJubzsKKyAgICAgICAgICBpZiAoZXJybm8gPT0gRU5PU1lTIHx8IGVycm5vID09IEVP UE5PVFNVUFAgfHwgZXJybm8gPT0gRUlOVkFMKQorICAgICAgICAgICAgeworICAgICAgICAg ICAgICBpZiAoIWFjbHZfbm9udHJpdmlhbCAoYWNsdl9jb3VudCwgYWNsdl9lbnRyaWVzKSkK KyAgICAgICAgICAgICAgICBzYXZlZF9lcnJubyA9IDA7CisgICAgICAgICAgICB9CisgICAg ICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgZGlkX2NobW9kID0gMTsKKyAgICB9CisjIGVu ZGlmCisKKyAgaWYgKGRpZF9jaG1vZCA8PSAoKG1vZGUgJiAoU19JU1VJRCB8IFNfSVNHSUQg fCBTX0lTVlRYKSkgPyAxIDogMCkpCisgICAgeworICAgICAgLyogV2UgZGlkIG5vdCBjYWxs IGNobW9kIHNvIGZhciwgYW5kIHNwZWNpYWwgYml0cyBhcmUgdG8gYmUgc2V0IHdoaWNoCisg ICAgICAgICBkb24ndCBmaXQgaW50byBBQ0xzLiAgKi8KKworICAgICAgaWYgKGNobW9kX29y X2ZjaG1vZCAoZHN0X25hbWUsIGRlc3RfZGVzYywgbW9kZSkgIT0gMCkKKyAgICAgICAgewor ICAgICAgICAgIGlmIChzYXZlZF9lcnJubyA9PSAwKQorICAgICAgICAgICAgc2F2ZWRfZXJy bm8gPSBlcnJubzsKKyAgICAgICAgfQorICAgIH0KKworICBpZiAoc2F2ZWRfZXJybm8pCisg ICAgeworICAgICAgZXJybm8gPSBzYXZlZF9lcnJubzsKKyAgICAgIHJldHVybiAtMTsKKyAg ICB9CisgIHJldHVybiAwOworCisjZWxpZiBVU0VfQUNMICYmIEhBVkVfQUNMWF9HRVQgJiYg MCAvKiBBSVggKi8KKworICAvKiBUT0RPICovCisKKyNlbGlmIFVTRV9BQ0wgJiYgSEFWRV9T VEFUQUNMIC8qIG9sZGVyIEFJWCAqLworCisgIHVuaW9uIHsgc3RydWN0IGFjbCBhOyBjaGFy IHJvb21bNDA5Nl07IH0gdTsKKyAgaW50IHJldDsKKworICBpZiAoKHNvdXJjZV9kZXNjICE9 IC0xCisgICAgICAgPyBmc3RhdGFjbCAoc291cmNlX2Rlc2MsIFNUWF9OT1JNQUwsICZ1LmEs IHNpemVvZiAodSkpCisgICAgICAgOiBzdGF0YWNsIChzcmNfbmFtZSwgU1RYX05PUk1BTCwg JnUuYSwgc2l6ZW9mICh1KSkpCisgICAgICA8IDApCisgICAgcmV0dXJuIC0yOworCisgIHJl dCA9IChkZXN0X2Rlc2MgIT0gLTEKKyAgICAgICAgID8gZmNoYWNsIChkZXN0X2Rlc2MsICZ1 LmEsIHUuYS5hY2xfbGVuKQorICAgICAgICAgOiBjaGFjbCAoZHN0X25hbWUsICZ1LmEsIHUu YS5hY2xfbGVuKSk7CisgIGlmIChyZXQgPCAwKQorICAgIHsKKyAgICAgIGludCBzYXZlZF9l cnJubyA9IGVycm5vOworCisgICAgICBjaG1vZF9vcl9mY2htb2QgKGRzdF9uYW1lLCBkZXN0 X2Rlc2MsIG1vZGUpOworICAgICAgZXJybm8gPSBzYXZlZF9lcnJubzsKKyAgICAgIHJldHVy biAtMTsKKyAgICB9CisKKyAgLyogTm8gbmVlZCB0byBjYWxsIGNobW9kX29yX2ZjaG1vZCBh dCB0aGlzIHBvaW50LCBzaW5jZSB0aGUgbW9kZSBiaXRzCisgICAgIFNfSVNVSUQsIFNfSVNH SUQsIFNfSVNWVFggYXJlIGFsc28gc3RvcmVkIGluIHRoZSBBQ0wuICAqLworCisgIHJldHVy biAwOworCisjZWxpZiBVU0VfQUNMICYmIEhBVkVfQUNMU09SVCAvKiBOb25TdG9wIEtlcm5l bCAqLworCisgIHN0cnVjdCBhY2wgZW50cmllc1tOQUNMRU5UUklFU107CisgIGludCBjb3Vu dDsKKyAgaW50IHJldDsKKworICBjb3VudCA9IGFjbCAoKGNoYXIgKikgc3JjX25hbWUsIEFD TF9HRVQsIE5BQ0xFTlRSSUVTLCBlbnRyaWVzKTsKKworICBpZiAoY291bnQgPCAwKQorICAg IHsKKyAgICAgIGlmICgwKQorICAgICAgICBjb3VudCA9IDA7CisgICAgICBlbHNlCisgICAg ICAgIHJldHVybiAtMjsKKyAgICB9CisgIGVsc2UgaWYgKGNvdW50ID4gMCkKKyAgICB7Cisg ICAgICBpZiAoY291bnQgPiBOQUNMRU5UUklFUykKKyAgICAgICAgLyogSWYgTkFDTEVOVFJJ RVMgY2Fubm90IGJlIHRydXN0ZWQsIHVzZSBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uLiAg Ki8KKyAgICAgICAgYWJvcnQgKCk7CisgICAgfQorCisgIGlmIChjb3VudCA9PSAwKQorICAg IHJldHVybiBxc2V0X2FjbCAoZHN0X25hbWUsIGRlc3RfZGVzYywgbW9kZSk7CisKKyAgcmV0 ID0gYWNsICgoY2hhciAqKSBkc3RfbmFtZSwgQUNMX1NFVCwgY291bnQsIGVudHJpZXMpOwor ICBpZiAocmV0IDwgMCkKKyAgICB7CisgICAgICBpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsK KworICAgICAgaWYgKDApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIWFjbF9ub250cml2 aWFsIChjb3VudCwgZW50cmllcykpCisgICAgICAgICAgICByZXR1cm4gY2htb2Rfb3JfZmNo bW9kIChkc3RfbmFtZSwgZGVzdF9kZXNjLCBtb2RlKTsKKyAgICAgICAgfQorCisgICAgICBj aG1vZF9vcl9mY2htb2QgKGRzdF9uYW1lLCBkZXN0X2Rlc2MsIG1vZGUpOworICAgICAgZXJy bm8gPSBzYXZlZF9lcnJubzsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgaWYgKG1v ZGUgJiAoU19JU1VJRCB8IFNfSVNHSUQgfCBTX0lTVlRYKSkKKyAgICB7CisgICAgICAvKiBX ZSBkaWQgbm90IGNhbGwgY2htb2Qgc28gZmFyLCBhbmQgZWl0aGVyIHRoZSBtb2RlIGFuZCB0 aGUgQUNMIGFyZQorICAgICAgICAgc2VwYXJhdGUgb3Igc3BlY2lhbCBiaXRzIGFyZSB0byBi ZSBzZXQgd2hpY2ggZG9uJ3QgZml0IGludG8gQUNMcy4gICovCisKKyAgICAgIHJldHVybiBj aG1vZF9vcl9mY2htb2QgKGRzdF9uYW1lLCBkZXN0X2Rlc2MsIG1vZGUpOworICAgIH0KKyAg cmV0dXJuIDA7CisKKyNlbHNlCisKKyAgcmV0dXJuIHFzZXRfYWNsIChkc3RfbmFtZSwgZGVz dF9kZXNjLCBtb2RlKTsKKworI2VuZGlmCit9Cgo9PT0gYWRkZWQgZmlsZSAnbGliL3FzZXQt YWNsLmMnCi0tLSBsaWIvcXNldC1hY2wuYwkxOTcwLTAxLTAxIDAwOjAwOjAwICswMDAwCisr KyBsaWIvcXNldC1hY2wuYwkyMDEzLTA0LTI4IDAwOjQ2OjM2ICswMDAwCkBAIC0wLDAgKzEs Njc2IEBACisvKiBxc2V0LWFjbC5jIC0gc2V0IGFjY2VzcyBjb250cm9sIGxpc3QgZXF1aXZh bGVudCB0byBhIG1vZGUKKworICAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMsIDIwMDUtMjAx MyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK KyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl aXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYg bm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisgICBXcml0dGVu IGJ5IFBhdWwgRWdnZXJ0IGFuZCBBbmRyZWFzIEdydWVuYmFjaGVyLCBhbmQgQnJ1bm8gSGFp YmxlLiAgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjZGVmaW5lIEFDTF9JTlRFUk5B TF9JTkxJTkUgX0dMX0VYVEVSTl9JTkxJTkUKKworI2luY2x1ZGUgImFjbC5oIgorCisjaW5j bHVkZSAiYWNsLWludGVybmFsLmgiCisKKworLyogSWYgREVTQyBpcyBhIHZhbGlkIGZpbGUg ZGVzY3JpcHRvciB1c2UgZmNobW9kIHRvIGNoYW5nZSB0aGUKKyAgIGZpbGUncyBtb2RlIHRv IE1PREUgb24gc3lzdGVtcyB0aGF0IGhhdmUgZmNobW9kLiBPbiBzeXN0ZW1zCisgICB0aGF0 IGRvbid0IGhhdmUgZmNobW9kIGFuZCBpZiBERVNDIGlzIGludmFsaWQsIHVzZSBjaG1vZCBv bgorICAgTkFNRSBpbnN0ZWFkLgorICAgUmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bC4gIFJldHVy biAtMSBhbmQgc2V0IGVycm5vIHVwb24gZmFpbHVyZS4gICovCisKK2ludAorY2htb2Rfb3Jf ZmNobW9kIChjb25zdCBjaGFyICpuYW1lLCBpbnQgZGVzYywgbW9kZV90IG1vZGUpCit7Cisg IGlmIChIQVZFX0ZDSE1PRCAmJiBkZXNjICE9IC0xKQorICAgIHJldHVybiBmY2htb2QgKGRl c2MsIG1vZGUpOworICBlbHNlCisgICAgcmV0dXJuIGNobW9kIChuYW1lLCBtb2RlKTsKK30K KworLyogU2V0IHRoZSBhY2Nlc3MgY29udHJvbCBsaXN0cyBvZiBhIGZpbGUuIElmIERFU0Mg aXMgYSB2YWxpZCBmaWxlCisgICBkZXNjcmlwdG9yLCB1c2UgZmlsZSBkZXNjcmlwdG9yIG9w ZXJhdGlvbnMgd2hlcmUgYXZhaWxhYmxlLCBlbHNlIHVzZQorICAgZmlsZW5hbWUgYmFzZWQg b3BlcmF0aW9ucyBvbiBOQU1FLiAgSWYgYWNjZXNzIGNvbnRyb2wgbGlzdHMgYXJlIG5vdAor ICAgYXZhaWxhYmxlLCBmY2htb2QgdGhlIHRhcmdldCBmaWxlIHRvIE1PREUuICBBbHNvIHNl dHMgdGhlCisgICBub24tcGVybWlzc2lvbiBiaXRzIG9mIHRoZSBkZXN0aW5hdGlvbiBmaWxl IChTX0lTVUlELCBTX0lTR0lELCBTX0lTVlRYKQorICAgdG8gdGhvc2UgZnJvbSBNT0RFIGlm IGFueSBhcmUgc2V0LgorICAgUmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bC4gIFJldHVybiAtMSBh bmQgc2V0IGVycm5vIHVwb24gZmFpbHVyZS4gICovCisKK2ludAorcXNldF9hY2wgKGNoYXIg Y29uc3QgKm5hbWUsIGludCBkZXNjLCBtb2RlX3QgbW9kZSkKK3sKKyNpZiBVU0VfQUNMCisj IGlmIEhBVkVfQUNMX0dFVF9GSUxFCisgIC8qIFBPU0lYIDEwMDMuMWUgZHJhZnQgMTcgKGFi YW5kb25lZCkgc3BlY2lmaWMgdmVyc2lvbi4gICovCisgIC8qIExpbnV4LCBGcmVlQlNELCBN YWMgT1MgWCwgSVJJWCwgVHJ1NjQgKi8KKyMgIGlmICFIQVZFX0FDTF9UWVBFX0VYVEVOREVE CisgIC8qIExpbnV4LCBGcmVlQlNELCBJUklYLCBUcnU2NCAqLworCisgIC8qIFdlIG11c3Qg YWxzbyBoYXZlIGFjbF9mcm9tX3RleHQgYW5kIGFjbF9kZWxldGVfZGVmX2ZpbGUuCisgICAg IChhY2xfZGVsZXRlX2RlZl9maWxlIGNvdWxkIGJlIGVtdWxhdGVkIHdpdGggYWNsX2luaXQg Zm9sbG93ZWQKKyAgICAgIGJ5IGFjbF9zZXRfZmlsZSwgYnV0IGFjbF9zZXRfZmlsZSB3aXRo IGFuIGVtcHR5IGFjbCBpcworICAgICAgdW5zcGVjaWZpZWQuKSAgKi8KKworIyAgIGlmbmRl ZiBIQVZFX0FDTF9GUk9NX1RFWFQKKyMgICAgZXJyb3IgTXVzdCBoYXZlIGFjbF9mcm9tX3Rl eHQgKHNlZSBQT1NJWCAxMDAzLjFlIGRyYWZ0IDE3KS4KKyMgICBlbmRpZgorIyAgIGlmbmRl ZiBIQVZFX0FDTF9ERUxFVEVfREVGX0ZJTEUKKyMgICAgZXJyb3IgTXVzdCBoYXZlIGFjbF9k ZWxldGVfZGVmX2ZpbGUgKHNlZSBQT1NJWCAxMDAzLjFlIGRyYWZ0IDE3KS4KKyMgICBlbmRp ZgorCisgIGFjbF90IGFjbDsKKyAgaW50IHJldDsKKworICBpZiAoSEFWRV9BQ0xfRlJPTV9N T0RFKSAvKiBMaW51eCAqLworICAgIHsKKyAgICAgIGFjbCA9IGFjbF9mcm9tX21vZGUgKG1v ZGUpOworICAgICAgaWYgKCFhY2wpCisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIGVs c2UgLyogRnJlZUJTRCwgSVJJWCwgVHJ1NjQgKi8KKyAgICB7CisgICAgICAvKiBJZiB3ZSB3 ZXJlIHRvIGNyZWF0ZSB0aGUgQUNMIHVzaW5nIHRoZSBmdW5jdGlvbnMgYWNsX2luaXQoKSwK KyAgICAgICAgIGFjbF9jcmVhdGVfZW50cnkoKSwgYWNsX3NldF90YWdfdHlwZSgpLCBhY2xf c2V0X3F1YWxpZmllcigpLAorICAgICAgICAgYWNsX2dldF9wZXJtc2V0KCksIGFjbF9jbGVh cl9wZXJtW3NdKCksIGFjbF9hZGRfcGVybSgpLCB3ZQorICAgICAgICAgd291bGQgbmVlZCB0 byBjcmVhdGUgYSBxdWFsaWZpZXIuICBJIGRvbid0IGtub3cgaG93IHRvIGRvIHRoaXMuCisg ICAgICAgICBTbyBjcmVhdGUgaXQgdXNpbmcgYWNsX2Zyb21fdGV4dCgpLiAgKi8KKworIyAg IGlmIEhBVkVfQUNMX0ZSRUVfVEVYVCAvKiBUcnU2NCAqLworICAgICAgY2hhciBhY2xfdGV4 dFtdID0gInU6Oi0tLSxnOjotLS0sbzo6LS0tLCI7CisjICAgZWxzZSAvKiBGcmVlQlNELCBJ UklYICovCisgICAgICBjaGFyIGFjbF90ZXh0W10gPSAidTo6LS0tLGc6Oi0tLSxvOjotLS0i OworIyAgIGVuZGlmCisKKyAgICAgIGlmIChtb2RlICYgU19JUlVTUikgYWNsX3RleHRbIDNd ID0gJ3InOworICAgICAgaWYgKG1vZGUgJiBTX0lXVVNSKSBhY2xfdGV4dFsgNF0gPSAndyc7 CisgICAgICBpZiAobW9kZSAmIFNfSVhVU1IpIGFjbF90ZXh0WyA1XSA9ICd4JzsKKyAgICAg IGlmIChtb2RlICYgU19JUkdSUCkgYWNsX3RleHRbMTBdID0gJ3InOworICAgICAgaWYgKG1v ZGUgJiBTX0lXR1JQKSBhY2xfdGV4dFsxMV0gPSAndyc7CisgICAgICBpZiAobW9kZSAmIFNf SVhHUlApIGFjbF90ZXh0WzEyXSA9ICd4JzsKKyAgICAgIGlmIChtb2RlICYgU19JUk9USCkg YWNsX3RleHRbMTddID0gJ3InOworICAgICAgaWYgKG1vZGUgJiBTX0lXT1RIKSBhY2xfdGV4 dFsxOF0gPSAndyc7CisgICAgICBpZiAobW9kZSAmIFNfSVhPVEgpIGFjbF90ZXh0WzE5XSA9 ICd4JzsKKworICAgICAgYWNsID0gYWNsX2Zyb21fdGV4dCAoYWNsX3RleHQpOworICAgICAg aWYgKCFhY2wpCisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIGlmIChIQVZFX0FDTF9T RVRfRkQgJiYgZGVzYyAhPSAtMSkKKyAgICByZXQgPSBhY2xfc2V0X2ZkIChkZXNjLCBhY2wp OworICBlbHNlCisgICAgcmV0ID0gYWNsX3NldF9maWxlIChuYW1lLCBBQ0xfVFlQRV9BQ0NF U1MsIGFjbCk7CisgIGlmIChyZXQgIT0gMCkKKyAgICB7CisgICAgICBpbnQgc2F2ZWRfZXJy bm8gPSBlcnJubzsKKyAgICAgIGFjbF9mcmVlIChhY2wpOworICAgICAgaWYgKCEgYWNsX2Vy cm5vX3ZhbGlkIChlcnJubykpCisgICAgICAgIHJldHVybiBjaG1vZF9vcl9mY2htb2QgKG5h bWUsIGRlc2MsIG1vZGUpOworICAgICAgZXJybm8gPSBzYXZlZF9lcnJubzsKKyAgICAgIHJl dHVybiAtMTsKKyAgICB9CisgIGVsc2UKKyAgICBhY2xfZnJlZSAoYWNsKTsKKworICBpZiAo U19JU0RJUiAobW9kZSkgJiYgYWNsX2RlbGV0ZV9kZWZfZmlsZSAobmFtZSkpCisgICAgcmV0 dXJuIC0xOworCisgIGlmICghTU9ERV9JTlNJREVfQUNMIHx8IChtb2RlICYgKFNfSVNVSUQg fCBTX0lTR0lEIHwgU19JU1ZUWCkpKQorICAgIHsKKyAgICAgIC8qIFdlIGRpZCBub3QgY2Fs bCBjaG1vZCBzbyBmYXIsIGFuZCBlaXRoZXIgdGhlIG1vZGUgYW5kIHRoZSBBQ0wgYXJlCisg ICAgICAgICBzZXBhcmF0ZSBvciBzcGVjaWFsIGJpdHMgYXJlIHRvIGJlIHNldCB3aGljaCBk b24ndCBmaXQgaW50byBBQ0xzLiAgKi8KKyAgICAgIHJldHVybiBjaG1vZF9vcl9mY2htb2Qg KG5hbWUsIGRlc2MsIG1vZGUpOworICAgIH0KKyAgcmV0dXJuIDA7CisKKyMgIGVsc2UgLyog SEFWRV9BQ0xfVFlQRV9FWFRFTkRFRCAqLworICAvKiBNYWMgT1MgWCAqLworCisgIC8qIE9u IE1hYyBPUyBYLCAgYWNsX2dldF9maWxlIChuYW1lLCBBQ0xfVFlQRV9BQ0NFU1MpCisgICAg IGFuZCAgICAgICAgICAgYWNsX2dldF9maWxlIChuYW1lLCBBQ0xfVFlQRV9ERUZBVUxUKQor ICAgICBhbHdheXMgcmV0dXJuIE5VTEwgLyBFSU5WQUwuICBZb3UgaGF2ZSB0byB1c2UKKyAg ICAgICAgICAgICAgICAgICBhY2xfZ2V0X2ZpbGUgKG5hbWUsIEFDTF9UWVBFX0VYVEVOREVE KQorICAgICBvciAgICAgICAgICAgIGFjbF9nZXRfZmQgKG9wZW4gKG5hbWUsIC4uLikpCisg ICAgIHRvIHJldHJpZXZlIGFuIEFDTC4KKyAgICAgT24gdGhlIG90aGVyIGhhbmQsCisgICAg ICAgICAgICAgICAgICAgYWNsX3NldF9maWxlIChuYW1lLCBBQ0xfVFlQRV9BQ0NFU1MsIGFj bCkKKyAgICAgYW5kICAgICAgICAgICBhY2xfc2V0X2ZpbGUgKG5hbWUsIEFDTF9UWVBFX0RF RkFVTFQsIGFjbCkKKyAgICAgaGF2ZSB0aGUgc2FtZSBlZmZlY3QgYXMKKyAgICAgICAgICAg ICAgICAgICBhY2xfc2V0X2ZpbGUgKG5hbWUsIEFDTF9UWVBFX0VYVEVOREVELCBhY2wpOgor ICAgICBFYWNoIG9mIHRoZXNlIGNhbGxzIHNldHMgdGhlIGZpbGUncyBBQ0wuICAqLworCisg IGFjbF90IGFjbDsKKyAgaW50IHJldDsKKworICAvKiBSZW1vdmUgdGhlIEFDTCBpZiB0aGUg ZmlsZSBoYXMgQUNMcy4gICovCisgIGlmIChIQVZFX0FDTF9HRVRfRkQgJiYgZGVzYyAhPSAt MSkKKyAgICBhY2wgPSBhY2xfZ2V0X2ZkIChkZXNjKTsKKyAgZWxzZQorICAgIGFjbCA9IGFj bF9nZXRfZmlsZSAobmFtZSwgQUNMX1RZUEVfRVhURU5ERUQpOworICBpZiAoYWNsKQorICAg IHsKKyAgICAgIGFjbF9mcmVlIChhY2wpOworCisgICAgICBhY2wgPSBhY2xfaW5pdCAoMCk7 CisgICAgICBpZiAoYWNsKQorICAgICAgICB7CisgICAgICAgICAgaWYgKEhBVkVfQUNMX1NF VF9GRCAmJiBkZXNjICE9IC0xKQorICAgICAgICAgICAgcmV0ID0gYWNsX3NldF9mZCAoZGVz YywgYWNsKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICByZXQgPSBhY2xfc2V0X2Zp bGUgKG5hbWUsIEFDTF9UWVBFX0VYVEVOREVELCBhY2wpOworICAgICAgICAgIGlmIChyZXQg IT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaW50IHNhdmVkX2Vycm5vID0g ZXJybm87CisgICAgICAgICAgICAgIGFjbF9mcmVlIChhY2wpOworICAgICAgICAgICAgICBp ZiAoISBhY2xfZXJybm9fdmFsaWQgKHNhdmVkX2Vycm5vKSkKKyAgICAgICAgICAgICAgICBy ZXR1cm4gY2htb2Rfb3JfZmNobW9kIChuYW1lLCBkZXNjLCBtb2RlKTsKKyAgICAgICAgICAg ICAgZXJybm8gPSBzYXZlZF9lcnJubzsKKyAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAg ICAgICAgICAgfQorICAgICAgICAgIGFjbF9mcmVlIChhY2wpOworICAgICAgICB9CisgICAg fQorCisgIC8qIFNpbmNlICFNT0RFX0lOU0lERV9BQ0wsIHdlIGhhdmUgdG8gY2FsbCBjaG1v ZCBleHBsaWNpdGx5LiAgKi8KKyAgcmV0dXJuIGNobW9kX29yX2ZjaG1vZCAobmFtZSwgZGVz YywgbW9kZSk7CisjICBlbmRpZgorCisjIGVsaWYgSEFWRV9GQUNMICYmIGRlZmluZWQgR0VU QUNMIC8qIFNvbGFyaXMsIEN5Z3dpbiwgbm90IEhQLVVYICovCisKKyAgaW50IGRvbmVfc2V0 YWNsID0gMDsKKworIyAgaWZkZWYgQUNFX0dFVEFDTAorICAvKiBTb2xhcmlzIGFsc28gaGFz IGEgZGlmZmVyZW50IHZhcmlhbnQgb2YgQUNMcywgdXNlZCBpbiBaRlMgYW5kIE5GU3Y0Cisg ICAgIGZpbGUgc3lzdGVtcyAod2hlcmVhcyB0aGUgb3RoZXIgb25lcyBhcmUgdXNlZCBpbiBV RlMgZmlsZSBzeXN0ZW1zKS4gICovCisKKyAgLyogVGhlIGZsYWdzIGluIHRoZSBhY2VfdCBz dHJ1Y3R1cmUgY2hhbmdlZCBpbiBhIGJpbmFyeSBpbmNvbXBhdGlibGUgd2F5CisgICAgIHdo ZW4gQUNMX05PX1RSSVZJQUwgZXRjLiB3ZXJlIGludHJvZHVjZWQgaW4gPHN5cy9hY2wuaD4g dmVyc2lvbiAxLjE1LgorICAgICBIb3cgdG8gZGlzdGluZ3Vpc2ggdGhlIHR3byBjb252ZW50 aW9ucyBhdCBydW50aW1lPworICAgICBXZSBmZXRjaCB0aGUgZXhpc3RpbmcgQUNMLiAgSW4g dGhlIG9sZCBjb252ZW50aW9uLCB1c3VhbGx5IHRocmVlIEFDRXMgaGF2ZQorICAgICBhX2Zs YWdzID0gQUNFX09XTkVSIC8gQUNFX0dST1VQIC8gQUNFX09USEVSLCBpbiB0aGUgcmFuZ2Ug MHgwMTAwLi4weDA0MDAuCisgICAgIEluIHRoZSBuZXcgY29udmVudGlvbiwgdGhlc2UgdmFs dWVzIGFyZSBub3QgdXNlZC4gICovCisgIGludCBjb252ZW50aW9uOworCisgIHsKKyAgICAv KiBJbml0aWFsbHksIHRyeSB0byByZWFkIHRoZSBlbnRyaWVzIGludG8gYSBzdGFjay1hbGxv Y2F0ZWQgYnVmZmVyLgorICAgICAgIFVzZSBtYWxsb2MgaWYgaXQgZG9lcyBub3QgZml0LiAg Ki8KKyAgICBlbnVtCisgICAgICB7CisgICAgICAgIGFsbG9jX2luaXQgPSA0MDAwIC8gc2l6 ZW9mIChhY2VfdCksIC8qID49IDMgKi8KKyAgICAgICAgYWxsb2NfbWF4ID0gTUlOIChJTlRf TUFYLCBTSVpFX01BWCAvIHNpemVvZiAoYWNlX3QpKQorICAgICAgfTsKKyAgICBhY2VfdCBi dWZbYWxsb2NfaW5pdF07CisgICAgc2l6ZV90IGFsbG9jID0gYWxsb2NfaW5pdDsKKyAgICBh Y2VfdCAqZW50cmllcyA9IGJ1ZjsKKyAgICBhY2VfdCAqbWFsbG9jZWQgPSBOVUxMOworICAg IGludCBjb3VudDsKKworICAgIGZvciAoOzspCisgICAgICB7CisgICAgICAgIGNvdW50ID0g KGRlc2MgIT0gLTEKKyAgICAgICAgICAgICAgICAgPyBmYWNsIChkZXNjLCBBQ0VfR0VUQUNM LCBhbGxvYywgZW50cmllcykKKyAgICAgICAgICAgICAgICAgOiBhY2wgKG5hbWUsIEFDRV9H RVRBQ0wsIGFsbG9jLCBlbnRyaWVzKSk7CisgICAgICAgIGlmIChjb3VudCA8IDAgJiYgZXJy bm8gPT0gRU5PU1BDKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEluY3JlYXNlIHRo ZSBzaXplIG9mIHRoZSBidWZmZXIuICAqLworICAgICAgICAgICAgZnJlZSAobWFsbG9jZWQp OworICAgICAgICAgICAgaWYgKGFsbG9jID4gYWxsb2NfbWF4IC8gMikKKyAgICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgIGVycm5vID0gRU5PTUVNOworICAgICAgICAgICAgICAg IHJldHVybiAtMTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgYWxsb2MgPSAyICog YWxsb2M7IC8qIDw9IGFsbG9jX21heCAqLworICAgICAgICAgICAgZW50cmllcyA9IG1hbGxv Y2VkID0gKGFjZV90ICopIG1hbGxvYyAoYWxsb2MgKiBzaXplb2YgKGFjZV90KSk7CisgICAg ICAgICAgICBpZiAoZW50cmllcyA9PSBOVUxMKQorICAgICAgICAgICAgICB7CisgICAgICAg ICAgICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwor ICAgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICB9Cisg ICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgaWYgKGNvdW50IDw9IDApCisgICAgICBj b252ZW50aW9uID0gLTE7CisgICAgZWxzZQorICAgICAgeworICAgICAgICBpbnQgaTsKKwor ICAgICAgICBjb252ZW50aW9uID0gMDsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50 OyBpKyspCisgICAgICAgICAgaWYgKGVudHJpZXNbaV0uYV9mbGFncyAmIChPTERfQUNFX09X TkVSIHwgT0xEX0FDRV9HUk9VUCB8IE9MRF9BQ0VfT1RIRVIpKQorICAgICAgICAgICAgewor ICAgICAgICAgICAgICBjb252ZW50aW9uID0gMTsKKyAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICB9CisgICAgICB9CisgICAgZnJlZSAobWFsbG9jZWQpOworICB9CisKKyAg aWYgKGNvbnZlbnRpb24gPj0gMCkKKyAgICB7CisgICAgICBhY2VfdCBlbnRyaWVzWzZdOwor ICAgICAgaW50IGNvdW50OworICAgICAgaW50IHJldDsKKworICAgICAgaWYgKGNvbnZlbnRp b24pCisgICAgICAgIHsKKyAgICAgICAgICAvKiBSdW5uaW5nIG9uIFNvbGFyaXMgMTAuICAq LworICAgICAgICAgIGVudHJpZXNbMF0uYV90eXBlID0gT0xEX0FMTE9XOworICAgICAgICAg IGVudHJpZXNbMF0uYV9mbGFncyA9IE9MRF9BQ0VfT1dORVI7CisgICAgICAgICAgZW50cmll c1swXS5hX3dobyA9IDA7IC8qIGlycmVsZXZhbnQgKi8KKyAgICAgICAgICBlbnRyaWVzWzBd LmFfYWNjZXNzX21hc2sgPSAobW9kZSA+PiA2KSAmIDc7CisgICAgICAgICAgZW50cmllc1sx XS5hX3R5cGUgPSBPTERfQUxMT1c7CisgICAgICAgICAgZW50cmllc1sxXS5hX2ZsYWdzID0g T0xEX0FDRV9HUk9VUDsKKyAgICAgICAgICBlbnRyaWVzWzFdLmFfd2hvID0gMDsgLyogaXJy ZWxldmFudCAqLworICAgICAgICAgIGVudHJpZXNbMV0uYV9hY2Nlc3NfbWFzayA9IChtb2Rl ID4+IDMpICYgNzsKKyAgICAgICAgICBlbnRyaWVzWzJdLmFfdHlwZSA9IE9MRF9BTExPVzsK KyAgICAgICAgICBlbnRyaWVzWzJdLmFfZmxhZ3MgPSBPTERfQUNFX09USEVSOworICAgICAg ICAgIGVudHJpZXNbMl0uYV93aG8gPSAwOworICAgICAgICAgIGVudHJpZXNbMl0uYV9hY2Nl c3NfbWFzayA9IG1vZGUgJiA3OworICAgICAgICAgIGNvdW50ID0gMzsKKyAgICAgICAgfQor ICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgLyogUnVubmluZyBvbiBTb2xhcmlz IDEwIChuZXdlciB2ZXJzaW9uKSBvciBTb2xhcmlzIDExLgorICAgICAgICAgICAgIFRoZSBk ZXRhaWxzIGhlcmUgd2VyZSBmb3VuZCB0aHJvdWdoICIvYmluL2xzIC1sdmQgc29tZWZpbGVz Ii4gICovCisgICAgICAgICAgZW50cmllc1swXS5hX3R5cGUgPSBORVdfQUNFX0FDQ0VTU19E RU5JRURfQUNFX1RZUEU7CisgICAgICAgICAgZW50cmllc1swXS5hX2ZsYWdzID0gTkVXX0FD RV9PV05FUjsKKyAgICAgICAgICBlbnRyaWVzWzBdLmFfd2hvID0gMDsgLyogaXJyZWxldmFu dCAqLworICAgICAgICAgIGVudHJpZXNbMF0uYV9hY2Nlc3NfbWFzayA9IDA7CisgICAgICAg ICAgZW50cmllc1sxXS5hX3R5cGUgPSBORVdfQUNFX0FDQ0VTU19BTExPV0VEX0FDRV9UWVBF OworICAgICAgICAgIGVudHJpZXNbMV0uYV9mbGFncyA9IE5FV19BQ0VfT1dORVI7CisgICAg ICAgICAgZW50cmllc1sxXS5hX3dobyA9IDA7IC8qIGlycmVsZXZhbnQgKi8KKyAgICAgICAg ICBlbnRyaWVzWzFdLmFfYWNjZXNzX21hc2sgPSBORVdfQUNFX1dSSVRFX05BTUVEX0FUVFJT CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBORVdfQUNFX1dSSVRF X0FUVFJJQlVURVMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5F V19BQ0VfV1JJVEVfQUNMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCBORVdfQUNFX1dSSVRFX09XTkVSOworICAgICAgICAgIGlmIChtb2RlICYgMDQwMCkKKyAg ICAgICAgICAgIGVudHJpZXNbMV0uYV9hY2Nlc3NfbWFzayB8PSBORVdfQUNFX1JFQURfREFU QTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBlbnRyaWVzWzBdLmFfYWNjZXNzX21h c2sgfD0gTkVXX0FDRV9SRUFEX0RBVEE7CisgICAgICAgICAgaWYgKG1vZGUgJiAwMjAwKQor ICAgICAgICAgICAgZW50cmllc1sxXS5hX2FjY2Vzc19tYXNrIHw9IE5FV19BQ0VfV1JJVEVf REFUQSB8IE5FV19BQ0VfQVBQRU5EX0RBVEE7CisgICAgICAgICAgZWxzZQorICAgICAgICAg ICAgZW50cmllc1swXS5hX2FjY2Vzc19tYXNrIHw9IE5FV19BQ0VfV1JJVEVfREFUQSB8IE5F V19BQ0VfQVBQRU5EX0RBVEE7CisgICAgICAgICAgaWYgKG1vZGUgJiAwMTAwKQorICAgICAg ICAgICAgZW50cmllc1sxXS5hX2FjY2Vzc19tYXNrIHw9IE5FV19BQ0VfRVhFQ1VURTsKKyAg ICAgICAgICBlbHNlCisgICAgICAgICAgICBlbnRyaWVzWzBdLmFfYWNjZXNzX21hc2sgfD0g TkVXX0FDRV9FWEVDVVRFOworICAgICAgICAgIGVudHJpZXNbMl0uYV90eXBlID0gTkVXX0FD RV9BQ0NFU1NfREVOSUVEX0FDRV9UWVBFOworICAgICAgICAgIGVudHJpZXNbMl0uYV9mbGFn cyA9IE5FV19BQ0VfR1JPVVAgfCBORVdfQUNFX0lERU5USUZJRVJfR1JPVVA7CisgICAgICAg ICAgZW50cmllc1syXS5hX3dobyA9IDA7IC8qIGlycmVsZXZhbnQgKi8KKyAgICAgICAgICBl bnRyaWVzWzJdLmFfYWNjZXNzX21hc2sgPSAwOworICAgICAgICAgIGVudHJpZXNbM10uYV90 eXBlID0gTkVXX0FDRV9BQ0NFU1NfQUxMT1dFRF9BQ0VfVFlQRTsKKyAgICAgICAgICBlbnRy aWVzWzNdLmFfZmxhZ3MgPSBORVdfQUNFX0dST1VQIHwgTkVXX0FDRV9JREVOVElGSUVSX0dS T1VQOworICAgICAgICAgIGVudHJpZXNbM10uYV93aG8gPSAwOyAvKiBpcnJlbGV2YW50ICov CisgICAgICAgICAgZW50cmllc1szXS5hX2FjY2Vzc19tYXNrID0gMDsKKyAgICAgICAgICBp ZiAobW9kZSAmIDAwNDApCisgICAgICAgICAgICBlbnRyaWVzWzNdLmFfYWNjZXNzX21hc2sg fD0gTkVXX0FDRV9SRUFEX0RBVEE7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZW50 cmllc1syXS5hX2FjY2Vzc19tYXNrIHw9IE5FV19BQ0VfUkVBRF9EQVRBOworICAgICAgICAg IGlmIChtb2RlICYgMDAyMCkKKyAgICAgICAgICAgIGVudHJpZXNbM10uYV9hY2Nlc3NfbWFz ayB8PSBORVdfQUNFX1dSSVRFX0RBVEEgfCBORVdfQUNFX0FQUEVORF9EQVRBOworICAgICAg ICAgIGVsc2UKKyAgICAgICAgICAgIGVudHJpZXNbMl0uYV9hY2Nlc3NfbWFzayB8PSBORVdf QUNFX1dSSVRFX0RBVEEgfCBORVdfQUNFX0FQUEVORF9EQVRBOworICAgICAgICAgIGlmICht b2RlICYgMDAxMCkKKyAgICAgICAgICAgIGVudHJpZXNbM10uYV9hY2Nlc3NfbWFzayB8PSBO RVdfQUNFX0VYRUNVVEU7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZW50cmllc1sy XS5hX2FjY2Vzc19tYXNrIHw9IE5FV19BQ0VfRVhFQ1VURTsKKyAgICAgICAgICBlbnRyaWVz WzRdLmFfdHlwZSA9IE5FV19BQ0VfQUNDRVNTX0RFTklFRF9BQ0VfVFlQRTsKKyAgICAgICAg ICBlbnRyaWVzWzRdLmFfZmxhZ3MgPSBORVdfQUNFX0VWRVJZT05FOworICAgICAgICAgIGVu dHJpZXNbNF0uYV93aG8gPSAwOworICAgICAgICAgIGVudHJpZXNbNF0uYV9hY2Nlc3NfbWFz ayA9IE5FV19BQ0VfV1JJVEVfTkFNRURfQVRUUlMKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8IE5FV19BQ0VfV1JJVEVfQVRUUklCVVRFUworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgTkVXX0FDRV9XUklURV9BQ0wKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5FV19BQ0VfV1JJVEVfT1dORVI7Cisg ICAgICAgICAgZW50cmllc1s1XS5hX3R5cGUgPSBORVdfQUNFX0FDQ0VTU19BTExPV0VEX0FD RV9UWVBFOworICAgICAgICAgIGVudHJpZXNbNV0uYV9mbGFncyA9IE5FV19BQ0VfRVZFUllP TkU7CisgICAgICAgICAgZW50cmllc1s1XS5hX3dobyA9IDA7CisgICAgICAgICAgZW50cmll c1s1XS5hX2FjY2Vzc19tYXNrID0gTkVXX0FDRV9SRUFEX05BTUVEX0FUVFJTCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBORVdfQUNFX1JFQURfQVRUUklCVVRF UworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTkVXX0FDRV9SRUFE X0FDTAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTkVXX0FDRV9T WU5DSFJPTklaRTsKKyAgICAgICAgICBpZiAobW9kZSAmIDAwMDQpCisgICAgICAgICAgICBl bnRyaWVzWzVdLmFfYWNjZXNzX21hc2sgfD0gTkVXX0FDRV9SRUFEX0RBVEE7CisgICAgICAg ICAgZWxzZQorICAgICAgICAgICAgZW50cmllc1s0XS5hX2FjY2Vzc19tYXNrIHw9IE5FV19B Q0VfUkVBRF9EQVRBOworICAgICAgICAgIGlmIChtb2RlICYgMDAwMikKKyAgICAgICAgICAg IGVudHJpZXNbNV0uYV9hY2Nlc3NfbWFzayB8PSBORVdfQUNFX1dSSVRFX0RBVEEgfCBORVdf QUNFX0FQUEVORF9EQVRBOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVudHJpZXNb NF0uYV9hY2Nlc3NfbWFzayB8PSBORVdfQUNFX1dSSVRFX0RBVEEgfCBORVdfQUNFX0FQUEVO RF9EQVRBOworICAgICAgICAgIGlmIChtb2RlICYgMDAwMSkKKyAgICAgICAgICAgIGVudHJp ZXNbNV0uYV9hY2Nlc3NfbWFzayB8PSBORVdfQUNFX0VYRUNVVEU7CisgICAgICAgICAgZWxz ZQorICAgICAgICAgICAgZW50cmllc1s0XS5hX2FjY2Vzc19tYXNrIHw9IE5FV19BQ0VfRVhF Q1VURTsKKyAgICAgICAgICBjb3VudCA9IDY7CisgICAgICAgIH0KKyAgICAgIGlmIChkZXNj ICE9IC0xKQorICAgICAgICByZXQgPSBmYWNsIChkZXNjLCBBQ0VfU0VUQUNMLCBjb3VudCwg ZW50cmllcyk7CisgICAgICBlbHNlCisgICAgICAgIHJldCA9IGFjbCAobmFtZSwgQUNFX1NF VEFDTCwgY291bnQsIGVudHJpZXMpOworICAgICAgaWYgKHJldCA8IDAgJiYgZXJybm8gIT0g RUlOVkFMICYmIGVycm5vICE9IEVOT1RTVVApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAo ZXJybm8gPT0gRU5PU1lTKQorICAgICAgICAgICAgcmV0dXJuIGNobW9kX29yX2ZjaG1vZCAo bmFtZSwgZGVzYywgbW9kZSk7CisgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9Cisg ICAgICBpZiAocmV0ID09IDApCisgICAgICAgIGRvbmVfc2V0YWNsID0gMTsKKyAgICB9Cisj ICBlbmRpZgorCisgIGlmICghZG9uZV9zZXRhY2wpCisgICAgeworICAgICAgYWNsZW50X3Qg ZW50cmllc1szXTsKKyAgICAgIGludCByZXQ7CisKKyAgICAgIGVudHJpZXNbMF0uYV90eXBl ID0gVVNFUl9PQko7CisgICAgICBlbnRyaWVzWzBdLmFfaWQgPSAwOyAvKiBpcnJlbGV2YW50 ICovCisgICAgICBlbnRyaWVzWzBdLmFfcGVybSA9IChtb2RlID4+IDYpICYgNzsKKyAgICAg IGVudHJpZXNbMV0uYV90eXBlID0gR1JPVVBfT0JKOworICAgICAgZW50cmllc1sxXS5hX2lk ID0gMDsgLyogaXJyZWxldmFudCAqLworICAgICAgZW50cmllc1sxXS5hX3Blcm0gPSAobW9k ZSA+PiAzKSAmIDc7CisgICAgICBlbnRyaWVzWzJdLmFfdHlwZSA9IE9USEVSX09CSjsKKyAg ICAgIGVudHJpZXNbMl0uYV9pZCA9IDA7CisgICAgICBlbnRyaWVzWzJdLmFfcGVybSA9IG1v ZGUgJiA3OworCisgICAgICBpZiAoZGVzYyAhPSAtMSkKKyAgICAgICAgcmV0ID0gZmFjbCAo ZGVzYywgU0VUQUNMLAorICAgICAgICAgICAgICAgICAgICBzaXplb2YgKGVudHJpZXMpIC8g c2l6ZW9mIChhY2xlbnRfdCksIGVudHJpZXMpOworICAgICAgZWxzZQorICAgICAgICByZXQg PSBhY2wgKG5hbWUsIFNFVEFDTCwKKyAgICAgICAgICAgICAgICAgICBzaXplb2YgKGVudHJp ZXMpIC8gc2l6ZW9mIChhY2xlbnRfdCksIGVudHJpZXMpOworICAgICAgaWYgKHJldCA8IDAp CisgICAgICAgIHsKKyAgICAgICAgICBpZiAoZXJybm8gPT0gRU5PU1lTIHx8IGVycm5vID09 IEVPUE5PVFNVUFApCisgICAgICAgICAgICByZXR1cm4gY2htb2Rfb3JfZmNobW9kIChuYW1l LCBkZXNjLCBtb2RlKTsKKyAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9 CisKKyAgaWYgKCFNT0RFX0lOU0lERV9BQ0wgfHwgKG1vZGUgJiAoU19JU1VJRCB8IFNfSVNH SUQgfCBTX0lTVlRYKSkpCisgICAgeworICAgICAgLyogV2UgZGlkIG5vdCBjYWxsIGNobW9k IHNvIGZhciwgc28gdGhlIHNwZWNpYWwgYml0cyBoYXZlIG5vdCB5ZXQKKyAgICAgICAgIGJl ZW4gc2V0LiAgKi8KKyAgICAgIHJldHVybiBjaG1vZF9vcl9mY2htb2QgKG5hbWUsIGRlc2Ms IG1vZGUpOworICAgIH0KKyAgcmV0dXJuIDA7CisKKyMgZWxpZiBIQVZFX0dFVEFDTCAvKiBI UC1VWCAqLworCisgIHN0cnVjdCBzdGF0IHN0YXRidWY7CisgIGludCByZXQ7CisKKyAgaWYg KGRlc2MgIT0gLTEpCisgICAgcmV0ID0gZnN0YXQgKGRlc2MsICZzdGF0YnVmKTsKKyAgZWxz ZQorICAgIHJldCA9IHN0YXQgKG5hbWUsICZzdGF0YnVmKTsKKyAgaWYgKHJldCA8IDApCisg ICAgcmV0dXJuIC0xOworCisgIHsKKyAgICBzdHJ1Y3QgYWNsX2VudHJ5IGVudHJpZXNbM107 CisKKyAgICBlbnRyaWVzWzBdLnVpZCA9IHN0YXRidWYuc3RfdWlkOworICAgIGVudHJpZXNb MF0uZ2lkID0gQUNMX05TR1JPVVA7CisgICAgZW50cmllc1swXS5tb2RlID0gKG1vZGUgPj4g NikgJiA3OworICAgIGVudHJpZXNbMV0udWlkID0gQUNMX05TVVNFUjsKKyAgICBlbnRyaWVz WzFdLmdpZCA9IHN0YXRidWYuc3RfZ2lkOworICAgIGVudHJpZXNbMV0ubW9kZSA9IChtb2Rl ID4+IDMpICYgNzsKKyAgICBlbnRyaWVzWzJdLnVpZCA9IEFDTF9OU1VTRVI7CisgICAgZW50 cmllc1syXS5naWQgPSBBQ0xfTlNHUk9VUDsKKyAgICBlbnRyaWVzWzJdLm1vZGUgPSBtb2Rl ICYgNzsKKworICAgIGlmIChkZXNjICE9IC0xKQorICAgICAgcmV0ID0gZnNldGFjbCAoZGVz Yywgc2l6ZW9mIChlbnRyaWVzKSAvIHNpemVvZiAoc3RydWN0IGFjbF9lbnRyeSksIGVudHJp ZXMpOworICAgIGVsc2UKKyAgICAgIHJldCA9IHNldGFjbCAobmFtZSwgc2l6ZW9mIChlbnRy aWVzKSAvIHNpemVvZiAoc3RydWN0IGFjbF9lbnRyeSksIGVudHJpZXMpOworICB9CisgIGlm IChyZXQgPCAwKQorICAgIHsKKyAgICAgIGlmICghKGVycm5vID09IEVOT1NZUyB8fCBlcnJu byA9PSBFT1BOT1RTVVBQIHx8IGVycm5vID09IEVOT1RTVVApKQorICAgICAgICByZXR1cm4g LTE7CisKKyMgIGlmIEhBVkVfQUNMVl9IIC8qIEhQLVVYID49IDExLjExICovCisgICAgICB7 CisgICAgICAgIHN0cnVjdCBhY2wgZW50cmllc1s0XTsKKworICAgICAgICBlbnRyaWVzWzBd LmFfdHlwZSA9IFVTRVJfT0JKOworICAgICAgICBlbnRyaWVzWzBdLmFfaWQgPSAwOyAvKiBp cnJlbGV2YW50ICovCisgICAgICAgIGVudHJpZXNbMF0uYV9wZXJtID0gKG1vZGUgPj4gNikg JiA3OworICAgICAgICBlbnRyaWVzWzFdLmFfdHlwZSA9IEdST1VQX09CSjsKKyAgICAgICAg ZW50cmllc1sxXS5hX2lkID0gMDsgLyogaXJyZWxldmFudCAqLworICAgICAgICBlbnRyaWVz WzFdLmFfcGVybSA9IChtb2RlID4+IDMpICYgNzsKKyAgICAgICAgZW50cmllc1syXS5hX3R5 cGUgPSBDTEFTU19PQko7CisgICAgICAgIGVudHJpZXNbMl0uYV9pZCA9IDA7CisgICAgICAg IGVudHJpZXNbMl0uYV9wZXJtID0gKG1vZGUgPj4gMykgJiA3OworICAgICAgICBlbnRyaWVz WzNdLmFfdHlwZSA9IE9USEVSX09CSjsKKyAgICAgICAgZW50cmllc1szXS5hX2lkID0gMDsK KyAgICAgICAgZW50cmllc1szXS5hX3Blcm0gPSBtb2RlICYgNzsKKworICAgICAgICByZXQg PSBhY2xzb3J0IChzaXplb2YgKGVudHJpZXMpIC8gc2l6ZW9mIChzdHJ1Y3QgYWNsKSwgMSwg ZW50cmllcyk7CisgICAgICAgIGlmIChyZXQgPiAwKQorICAgICAgICAgIGFib3J0ICgpOwor ICAgICAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoMCkK KyAgICAgICAgICAgICAgcmV0dXJuIGNobW9kX29yX2ZjaG1vZCAobmFtZSwgZGVzYywgbW9k ZSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgfQorCisgICAgICAgIHJl dCA9IGFjbCAoKGNoYXIgKikgbmFtZSwgQUNMX1NFVCwKKyAgICAgICAgICAgICAgICAgICBz aXplb2YgKGVudHJpZXMpIC8gc2l6ZW9mIChzdHJ1Y3QgYWNsKSwgZW50cmllcyk7CisgICAg ICAgIGlmIChyZXQgPCAwKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChlcnJubyA9 PSBFTk9TWVMgfHwgZXJybm8gPT0gRU9QTk9UU1VQUCB8fCBlcnJubyA9PSBFSU5WQUwpCisg ICAgICAgICAgICAgIHJldHVybiBjaG1vZF9vcl9mY2htb2QgKG5hbWUsIGRlc2MsIG1vZGUp OworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgIH0KKyAgICAgIH0KKyMgIGVs c2UKKyAgICAgIHJldHVybiBjaG1vZF9vcl9mY2htb2QgKG5hbWUsIGRlc2MsIG1vZGUpOwor IyAgZW5kaWYKKyAgICB9CisKKyAgaWYgKG1vZGUgJiAoU19JU1VJRCB8IFNfSVNHSUQgfCBT X0lTVlRYKSkKKyAgICB7CisgICAgICAvKiBXZSBkaWQgbm90IGNhbGwgY2htb2Qgc28gZmFy LCBzbyB0aGUgc3BlY2lhbCBiaXRzIGhhdmUgbm90IHlldAorICAgICAgICAgYmVlbiBzZXQu ICAqLworICAgICAgcmV0dXJuIGNobW9kX29yX2ZjaG1vZCAobmFtZSwgZGVzYywgbW9kZSk7 CisgICAgfQorICByZXR1cm4gMDsKKworIyBlbGlmIEhBVkVfQUNMWF9HRVQgJiYgZGVmaW5l ZCBBQ0xfQUlYX1dJUCAvKiBBSVggKi8KKworICBhY2xfdHlwZV9saXN0X3QgdHlwZXM7Cisg IHNpemVfdCB0eXBlc19zaXplID0gc2l6ZW9mICh0eXBlcyk7CisgIGFjbF90eXBlX3QgdHlw ZTsKKworICBpZiAoYWNseF9nZXR0eXBlcyAobmFtZSwgJnR5cGVzLCAmdHlwZXNfc2l6ZSkg PCAwCisgICAgICB8fCB0eXBlcy5udW1fZW50cmllcyA9PSAwKQorICAgIHJldHVybiBjaG1v ZF9vcl9mY2htb2QgKG5hbWUsIGRlc2MsIG1vZGUpOworCisgIC8qIFhYWCBEbyB3ZSBuZWVk IHRvIGNsZWFyIGFsbCB0eXBlcyBvZiBBQ0xzIGZvciB0aGUgZ2l2ZW4gZmlsZSwgb3IgaXMg aXQKKyAgICAgc3VmZmljaWVudCB0byBjbGVhciB0aGUgZmlyc3Qgb25lPyAgKi8KKyAgdHlw ZSA9IHR5cGVzLmVudHJpZXNbMF07CisgIGlmICh0eXBlLnU2NCA9PSBBQ0xfQUlYQykKKyAg ICB7CisgICAgICB1bmlvbiB7IHN0cnVjdCBhY2wgYTsgY2hhciByb29tWzEyOF07IH0gdTsK KyAgICAgIGludCByZXQ7CisKKyAgICAgIHUuYS5hY2xfbGVuID0gKGNoYXIgKikgJnUuYS5h Y2xfZXh0WzBdIC0gKGNoYXIgKikgJnUuYTsgLyogbm8gZW50cmllcyAqLworICAgICAgdS5h LmFjbF9tb2RlID0gbW9kZSAmIH4oU19JWEFDTCB8IDA3NzcpOworICAgICAgdS5hLnVfYWNj ZXNzID0gKG1vZGUgPj4gNikgJiA3OworICAgICAgdS5hLmdfYWNjZXNzID0gKG1vZGUgPj4g MykgJiA3OworICAgICAgdS5hLm9fYWNjZXNzID0gbW9kZSAmIDc7CisKKyAgICAgIGlmIChk ZXNjICE9IC0xKQorICAgICAgICByZXQgPSBhY2x4X2ZwdXQgKGRlc2MsIFNFVF9BQ0wgfCBT RVRfTU9ERV9TX0JJVFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwgJnUuYSwg dS5hLmFjbF9sZW4sIG1vZGUpOworICAgICAgZWxzZQorICAgICAgICByZXQgPSBhY2x4X3B1 dCAobmFtZSwgU0VUX0FDTCB8IFNFVF9NT0RFX1NfQklUUywKKyAgICAgICAgICAgICAgICAg ICAgICAgIHR5cGUsICZ1LmEsIHUuYS5hY2xfbGVuLCBtb2RlKTsKKyAgICAgIGlmICghKHJl dCA8IDAgJiYgZXJybm8gPT0gRU5PU1lTKSkKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9 CisgIGVsc2UgaWYgKHR5cGUudTY0ID09IEFDTF9ORlM0KQorICAgIHsKKyAgICAgIHVuaW9u IHsgbmZzNF9hY2xfaW50X3QgYTsgY2hhciByb29tWzEyOF07IH0gdTsKKyAgICAgIG5mczRf YWNlX2ludF90ICphY2U7CisgICAgICBpbnQgcmV0OworCisgICAgICB1LmEuYWNsVmVyc2lv biA9IE5GUzRfQUNMX0lOVF9TVFJVQ1RfVkVSU0lPTjsKKyAgICAgIHUuYS5hY2xFbnRyeU4g PSAwOworICAgICAgYWNlID0gJnUuYS5hY2xFbnRyeVswXTsKKyAgICAgIHsKKyAgICAgICAg YWNlLT5mbGFncyA9IEFDRTRfSURfU1BFQ0lBTDsKKyAgICAgICAgYWNlLT5hY2VXaG8uc3Bl Y2lhbF93aG9pZCA9IEFDRTRfV0hPX09XTkVSOworICAgICAgICBhY2UtPmFjZVR5cGUgPSBB Q0U0X0FDQ0VTU19BTExPV0VEX0FDRV9UWVBFOworICAgICAgICBhY2UtPmFjZUZsYWdzID0g MDsKKyAgICAgICAgYWNlLT5hY2VNYXNrID0KKyAgICAgICAgICAobW9kZSAmIDA0MDAgPyBB Q0U0X1JFQURfREFUQSB8IEFDRTRfTElTVF9ESVJFQ1RPUlkgOiAwKQorICAgICAgICAgIHwg KG1vZGUgJiAwMjAwCisgICAgICAgICAgICAgPyBBQ0U0X1dSSVRFX0RBVEEgfCBBQ0U0X0FE RF9GSUxFIHwgQUNFNF9BUFBFTkRfREFUQQorICAgICAgICAgICAgICAgfCBBQ0U0X0FERF9T VUJESVJFQ1RPUlkKKyAgICAgICAgICAgICA6IDApCisgICAgICAgICAgfCAobW9kZSAmIDAx MDAgPyBBQ0U0X0VYRUNVVEUgOiAwKTsKKyAgICAgICAgYWNlLT5hY2VXaG9TdHJpbmdbMF0g PSAnXDAnOworICAgICAgICBhY2UtPmVudHJ5TGVuID0gKGNoYXIgKikgJmFjZS0+YWNlV2hv U3RyaW5nWzRdIC0gKGNoYXIgKikgYWNlOworICAgICAgICBhY2UgPSAobmZzNF9hY2VfaW50 X3QgKikgKGNoYXIgKikgJmFjZS0+YWNlV2hvU3RyaW5nWzRdOworICAgICAgICB1LmEuYWNs RW50cnlOKys7CisgICAgICB9CisgICAgICB7CisgICAgICAgIGFjZS0+ZmxhZ3MgPSBBQ0U0 X0lEX1NQRUNJQUw7CisgICAgICAgIGFjZS0+YWNlV2hvLnNwZWNpYWxfd2hvaWQgPSBBQ0U0 X1dIT19HUk9VUDsKKyAgICAgICAgYWNlLT5hY2VUeXBlID0gQUNFNF9BQ0NFU1NfQUxMT1dF RF9BQ0VfVFlQRTsKKyAgICAgICAgYWNlLT5hY2VGbGFncyA9IDA7CisgICAgICAgIGFjZS0+ YWNlTWFzayA9CisgICAgICAgICAgKG1vZGUgJiAwMDQwID8gQUNFNF9SRUFEX0RBVEEgfCBB Q0U0X0xJU1RfRElSRUNUT1JZIDogMCkKKyAgICAgICAgICB8IChtb2RlICYgMDAyMAorICAg ICAgICAgICAgID8gQUNFNF9XUklURV9EQVRBIHwgQUNFNF9BRERfRklMRSB8IEFDRTRfQVBQ RU5EX0RBVEEKKyAgICAgICAgICAgICAgIHwgQUNFNF9BRERfU1VCRElSRUNUT1JZCisgICAg ICAgICAgICAgOiAwKQorICAgICAgICAgIHwgKG1vZGUgJiAwMDEwID8gQUNFNF9FWEVDVVRF IDogMCk7CisgICAgICAgIGFjZS0+YWNlV2hvU3RyaW5nWzBdID0gJ1wwJzsKKyAgICAgICAg YWNlLT5lbnRyeUxlbiA9IChjaGFyICopICZhY2UtPmFjZVdob1N0cmluZ1s0XSAtIChjaGFy ICopIGFjZTsKKyAgICAgICAgYWNlID0gKG5mczRfYWNlX2ludF90ICopIChjaGFyICopICZh Y2UtPmFjZVdob1N0cmluZ1s0XTsKKyAgICAgICAgdS5hLmFjbEVudHJ5TisrOworICAgICAg fQorICAgICAgeworICAgICAgICBhY2UtPmZsYWdzID0gQUNFNF9JRF9TUEVDSUFMOworICAg ICAgICBhY2UtPmFjZVdoby5zcGVjaWFsX3dob2lkID0gQUNFNF9XSE9fRVZFUllPTkU7Cisg ICAgICAgIGFjZS0+YWNlVHlwZSA9IEFDRTRfQUNDRVNTX0FMTE9XRURfQUNFX1RZUEU7Cisg ICAgICAgIGFjZS0+YWNlRmxhZ3MgPSAwOworICAgICAgICBhY2UtPmFjZU1hc2sgPQorICAg ICAgICAgIChtb2RlICYgMDAwNCA/IEFDRTRfUkVBRF9EQVRBIHwgQUNFNF9MSVNUX0RJUkVD VE9SWSA6IDApCisgICAgICAgICAgfCAobW9kZSAmIDAwMDIKKyAgICAgICAgICAgICA/IEFD RTRfV1JJVEVfREFUQSB8IEFDRTRfQUREX0ZJTEUgfCBBQ0U0X0FQUEVORF9EQVRBCisgICAg ICAgICAgICAgICB8IEFDRTRfQUREX1NVQkRJUkVDVE9SWQorICAgICAgICAgICAgIDogMCkK KyAgICAgICAgICB8IChtb2RlICYgMDAwMSA/IEFDRTRfRVhFQ1VURSA6IDApOworICAgICAg ICBhY2UtPmFjZVdob1N0cmluZ1swXSA9ICdcMCc7CisgICAgICAgIGFjZS0+ZW50cnlMZW4g PSAoY2hhciAqKSAmYWNlLT5hY2VXaG9TdHJpbmdbNF0gLSAoY2hhciAqKSBhY2U7CisgICAg ICAgIGFjZSA9IChuZnM0X2FjZV9pbnRfdCAqKSAoY2hhciAqKSAmYWNlLT5hY2VXaG9TdHJp bmdbNF07CisgICAgICAgIHUuYS5hY2xFbnRyeU4rKzsKKyAgICAgIH0KKyAgICAgIHUuYS5h Y2xMZW5ndGggPSAoY2hhciAqKSBhY2UgLSAoY2hhciAqKSAmdS5hOworCisgICAgICBpZiAo ZGVzYyAhPSAtMSkKKyAgICAgICAgcmV0ID0gYWNseF9mcHV0IChkZXNjLCBTRVRfQUNMIHwg U0VUX01PREVfU19CSVRTLAorICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsICZ1LmEs IHUuYS5hY2xMZW5ndGgsIG1vZGUpOworICAgICAgZWxzZQorICAgICAgICByZXQgPSBhY2x4 X3B1dCAobmFtZSwgU0VUX0FDTCB8IFNFVF9NT0RFX1NfQklUUywKKyAgICAgICAgICAgICAg ICAgICAgICAgIHR5cGUsICZ1LmEsIHUuYS5hY2xMZW5ndGgsIG1vZGUpOworICAgICAgaWYg KCEocmV0IDwgMCAmJiBlcnJubyA9PSBFTk9TWVMpKQorICAgICAgICByZXR1cm4gcmV0Owor ICAgIH0KKworICByZXR1cm4gY2htb2Rfb3JfZmNobW9kIChuYW1lLCBkZXNjLCBtb2RlKTsK KworIyBlbGlmIEhBVkVfU1RBVEFDTCAvKiBvbGRlciBBSVggKi8KKworICB1bmlvbiB7IHN0 cnVjdCBhY2wgYTsgY2hhciByb29tWzEyOF07IH0gdTsKKyAgaW50IHJldDsKKworICB1LmEu YWNsX2xlbiA9IChjaGFyICopICZ1LmEuYWNsX2V4dFswXSAtIChjaGFyICopICZ1LmE7IC8q IG5vIGVudHJpZXMgKi8KKyAgdS5hLmFjbF9tb2RlID0gbW9kZSAmIH4oU19JWEFDTCB8IDA3 NzcpOworICB1LmEudV9hY2Nlc3MgPSAobW9kZSA+PiA2KSAmIDc7CisgIHUuYS5nX2FjY2Vz cyA9IChtb2RlID4+IDMpICYgNzsKKyAgdS5hLm9fYWNjZXNzID0gbW9kZSAmIDc7CisKKyAg aWYgKGRlc2MgIT0gLTEpCisgICAgcmV0ID0gZmNoYWNsIChkZXNjLCAmdS5hLCB1LmEuYWNs X2xlbik7CisgIGVsc2UKKyAgICByZXQgPSBjaGFjbCAobmFtZSwgJnUuYSwgdS5hLmFjbF9s ZW4pOworCisgIGlmIChyZXQgPCAwICYmIGVycm5vID09IEVOT1NZUykKKyAgICByZXR1cm4g Y2htb2Rfb3JfZmNobW9kIChuYW1lLCBkZXNjLCBtb2RlKTsKKworICByZXR1cm4gcmV0Owor CisjIGVsaWYgSEFWRV9BQ0xTT1JUIC8qIE5vblN0b3AgS2VybmVsICovCisKKyAgc3RydWN0 IGFjbCBlbnRyaWVzWzRdOworICBpbnQgcmV0OworCisgIGVudHJpZXNbMF0uYV90eXBlID0g VVNFUl9PQko7CisgIGVudHJpZXNbMF0uYV9pZCA9IDA7IC8qIGlycmVsZXZhbnQgKi8KKyAg ZW50cmllc1swXS5hX3Blcm0gPSAobW9kZSA+PiA2KSAmIDc7CisgIGVudHJpZXNbMV0uYV90 eXBlID0gR1JPVVBfT0JKOworICBlbnRyaWVzWzFdLmFfaWQgPSAwOyAvKiBpcnJlbGV2YW50 ICovCisgIGVudHJpZXNbMV0uYV9wZXJtID0gKG1vZGUgPj4gMykgJiA3OworICBlbnRyaWVz WzJdLmFfdHlwZSA9IENMQVNTX09CSjsKKyAgZW50cmllc1syXS5hX2lkID0gMDsKKyAgZW50 cmllc1syXS5hX3Blcm0gPSAobW9kZSA+PiAzKSAmIDc7CisgIGVudHJpZXNbM10uYV90eXBl ID0gT1RIRVJfT0JKOworICBlbnRyaWVzWzNdLmFfaWQgPSAwOworICBlbnRyaWVzWzNdLmFf cGVybSA9IG1vZGUgJiA3OworCisgIHJldCA9IGFjbHNvcnQgKHNpemVvZiAoZW50cmllcykg LyBzaXplb2YgKHN0cnVjdCBhY2wpLCAxLCBlbnRyaWVzKTsKKyAgaWYgKHJldCA+IDApCisg ICAgYWJvcnQgKCk7CisgIGlmIChyZXQgPCAwKQorICAgIHsKKyAgICAgIGlmICgwKQorICAg ICAgICByZXR1cm4gY2htb2Rfb3JfZmNobW9kIChuYW1lLCBkZXNjLCBtb2RlKTsKKyAgICAg IHJldHVybiAtMTsKKyAgICB9CisKKyAgcmV0ID0gYWNsICgoY2hhciAqKSBuYW1lLCBBQ0xf U0VULAorICAgICAgICAgICAgIHNpemVvZiAoZW50cmllcykgLyBzaXplb2YgKHN0cnVjdCBh Y2wpLCBlbnRyaWVzKTsKKyAgaWYgKHJldCA8IDApCisgICAgeworICAgICAgaWYgKDApCisg ICAgICAgIHJldHVybiBjaG1vZF9vcl9mY2htb2QgKG5hbWUsIGRlc2MsIG1vZGUpOworICAg ICAgcmV0dXJuIC0xOworICAgIH0KKworICBpZiAobW9kZSAmIChTX0lTVUlEIHwgU19JU0dJ RCB8IFNfSVNWVFgpKQorICAgIHsKKyAgICAgIC8qIFdlIGRpZCBub3QgY2FsbCBjaG1vZCBz byBmYXIsIHNvIHRoZSBzcGVjaWFsIGJpdHMgaGF2ZSBub3QgeWV0CisgICAgICAgICBiZWVu IHNldC4gICovCisgICAgICByZXR1cm4gY2htb2Rfb3JfZmNobW9kIChuYW1lLCBkZXNjLCBt b2RlKTsKKyAgICB9CisgIHJldHVybiAwOworCisjIGVsc2UgLyogVW5rbm93biBmbGF2b3Ig b2YgQUNMcyAqLworICByZXR1cm4gY2htb2Rfb3JfZmNobW9kIChuYW1lLCBkZXNjLCBtb2Rl KTsKKyMgZW5kaWYKKyNlbHNlIC8qICFVU0VfQUNMICovCisgIHJldHVybiBjaG1vZF9vcl9m Y2htb2QgKG5hbWUsIGRlc2MsIG1vZGUpOworI2VuZGlmCit9Cgo9PT0gYWRkZWQgZmlsZSAn bTQvYWNsLm00JwotLS0gbTQvYWNsLm00CTE5NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDAKKysr IG00L2FjbC5tNAkyMDEzLTA0LTE3IDA1OjIxOjMzICswMDAwCkBAIC0wLDAgKzEsMTY0IEBA CisjIGFjbC5tNCAtIGNoZWNrIGZvciBhY2Nlc3MgY29udHJvbCBsaXN0IChBQ0wpIHByaW1p dGl2ZXMKKyMgc2VyaWFsIDE1CisKKyMgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA0LTIwMTMg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNv ZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRl ZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Ig d2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNl cnZlZC4KKworIyBXcml0dGVuIGJ5IFBhdWwgRWdnZXJ0IGFuZCBKaW0gTWV5ZXJpbmcuCisK K0FDX0RFRlVOKFtnbF9GVU5DX0FDTF0sCitbCisgIEFDX0FSR19FTkFCTEUoW2FjbF0sCisg ICAgQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1hY2xdLCBbZG8gbm90IHN1cHBvcnQgQUNM c10pLAorICAgICwgW2VuYWJsZV9hY2w9YXV0b10pCisKKyAgTElCX0FDTD0KKyAgdXNlX2Fj bD0wCisgIGlmIHRlc3QgIngkZW5hYmxlX2FjbCIgIT0gInhubyI7IHRoZW4KKyAgICBkbmwg T24gYWxsIHBsYXRmb3JtcywgdGhlIEFDTCByZWxhdGVkIEFQSSBpcyBkZWNsYXJlZCBpbiA8 c3lzL2FjbC5oPi4KKyAgICBBQ19DSEVDS19IRUFERVJTKFtzeXMvYWNsLmhdKQorICAgIGlm IHRlc3QgJGFjX2N2X2hlYWRlcl9zeXNfYWNsX2ggPSB5ZXM7IHRoZW4KKyAgICAgIGFjX3Nh dmVfTElCUz0kTElCUworCisgICAgICBkbmwgVGVzdCBmb3IgUE9TSVgtZHJhZnQtbGlrZSBB UEkgKExpbnV4LCBGcmVlQlNELCBNYWMgT1MgWCwgSVJJWCwgVHJ1NjQpLgorICAgICAgZG5s IC1sYWNsIGlzIG5lZWRlZCBvbiBMaW51eCwgLWxwYWNsIGlzIG5lZWRlZCBvbiBPU0YvMS4K KyAgICAgIGlmIHRlc3QgJHVzZV9hY2wgPSAwOyB0aGVuCisgICAgICAgIEFDX1NFQVJDSF9M SUJTKFthY2xfZ2V0X2ZpbGVdLCBbYWNsIHBhY2xdLAorICAgICAgICAgIFtpZiB0ZXN0ICIk YWNfY3Zfc2VhcmNoX2FjbF9nZXRfZmlsZSIgIT0gIm5vbmUgcmVxdWlyZWQiOyB0aGVuCisg ICAgICAgICAgICAgTElCX0FDTD0kYWNfY3Zfc2VhcmNoX2FjbF9nZXRfZmlsZQorICAgICAg ICAgICBmaQorICAgICAgICAgICBBQ19DSEVDS19GVU5DUygKKyAgICAgICAgICAgICBbYWNs X2dldF9maWxlIGFjbF9nZXRfZmQgYWNsX3NldF9maWxlIGFjbF9zZXRfZmQgXAorICAgICAg ICAgICAgICBhY2xfZnJlZSBhY2xfZnJvbV9tb2RlIGFjbF9mcm9tX3RleHQgXAorICAgICAg ICAgICAgICBhY2xfZGVsZXRlX2RlZl9maWxlIGFjbF9leHRlbmRlZF9maWxlIFwKKyAgICAg ICAgICAgICAgYWNsX2RlbGV0ZV9mZF9ucCBhY2xfZGVsZXRlX2ZpbGVfbnAgXAorICAgICAg ICAgICAgICBhY2xfY29weV9leHRfbmF0aXZlIGFjbF9jcmVhdGVfZW50cnlfbnAgXAorICAg ICAgICAgICAgICBhY2xfdG9fc2hvcnRfdGV4dCBhY2xfZnJlZV90ZXh0XSkKKyAgICAgICAg ICAgIyBJZiB0aGUgYWNsX2dldF9maWxlIGJ1ZyBpcyBkZXRlY3RlZCwgZG9uJ3QgZW5hYmxl IHRoZSBBQ0wgc3VwcG9ydC4KKyAgICAgICAgICAgZ2xfQUNMX0dFVF9GSUxFKFt1c2VfYWNs PTFdLCBbXSkKKyAgICAgICAgICAgaWYgdGVzdCAkdXNlX2FjbCA9IDE7IHRoZW4KKyAgICAg ICAgICAgICBkbmwgT24gTGludXgsIGFkZGl0aW9uYWwgQVBJIGlzIGRlY2xhcmVkIGluIDxh Y2wvbGliYWNsLmg+LgorICAgICAgICAgICAgIEFDX0NIRUNLX0hFQURFUlMoW2FjbC9saWJh Y2wuaF0pCisgICAgICAgICAgICAgQUNfUkVQTEFDRV9GVU5DUyhbYWNsX2VudHJpZXNdKQor ICAgICAgICAgICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgQUNMX0ZJUlNUX0VOVFJZXSwKKyAg ICAgICAgICAgICAgIFtnbF9jdl9hY2xfQUNMX0ZJUlNUX0VOVFJZXSwKKyAgICAgICAgICAg ICAgIFtBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKAorW1sjaW5jbHVkZSA8 c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL2FjbC5oPgoraW50IHR5cGUgPSBBQ0xfRklS U1RfRU5UUlk7XV0pXSwKKyAgICAgICAgICAgICAgICAgIFtnbF9jdl9hY2xfQUNMX0ZJUlNU X0VOVFJZPXllc10sCisgICAgICAgICAgICAgICAgICBbZ2xfY3ZfYWNsX0FDTF9GSVJTVF9F TlRSWT1ub10pXSkKKyAgICAgICAgICAgICBpZiB0ZXN0ICRnbF9jdl9hY2xfQUNMX0ZJUlNU X0VOVFJZID0geWVzOyB0aGVuCisgICAgICAgICAgICAgICBBQ19ERUZJTkUoW0hBVkVfQUNM X0ZJUlNUX0VOVFJZXSwgWzFdLAorICAgICAgICAgICAgICAgICBbRGVmaW5lIHRvIDEgaWYg dGhlIGNvbnN0YW50IEFDTF9GSVJTVF9FTlRSWSBleGlzdHMuXSkKKyAgICAgICAgICAgICBm aQorICAgICAgICAgICAgIGRubCBPbiBNYWMgT1MgWCwgb3RoZXIgdHlwZXMgb2YgQUNMcyBh cmUgc3VwcG9ydGVkLgorICAgICAgICAgICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgQUNMX1RZ UEVfRVhURU5ERURdLAorICAgICAgICAgICAgICAgW2dsX2N2X2FjbF9BQ0xfVFlQRV9FWFRF TkRFRF0sCisgICAgICAgICAgICAgICBbQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJP R1JBTSgKK1tbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9hY2wuaD4K K2ludCB0eXBlID0gQUNMX1RZUEVfRVhURU5ERUQ7XV0pXSwKKyAgICAgICAgICAgICAgICAg IFtnbF9jdl9hY2xfQUNMX1RZUEVfRVhURU5ERUQ9eWVzXSwKKyAgICAgICAgICAgICAgICAg IFtnbF9jdl9hY2xfQUNMX1RZUEVfRVhURU5ERUQ9bm9dKV0pCisgICAgICAgICAgICAgaWYg dGVzdCAkZ2xfY3ZfYWNsX0FDTF9UWVBFX0VYVEVOREVEID0geWVzOyB0aGVuCisgICAgICAg ICAgICAgICBBQ19ERUZJTkUoW0hBVkVfQUNMX1RZUEVfRVhURU5ERURdLCBbMV0sCisgICAg ICAgICAgICAgICAgIFtEZWZpbmUgdG8gMSBpZiB0aGUgQUNMIHR5cGUgQUNMX1RZUEVfRVhU RU5ERUQgZXhpc3RzLl0pCisgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgZWxzZQorICAg ICAgICAgICAgIExJQl9BQ0w9CisgICAgICAgICAgIGZpCisgICAgICAgICAgXSkKKyAgICAg IGZpCisKKyAgICAgIGRubCBUZXN0IGZvciBTb2xhcmlzIEFQSSAoU29sYXJpcywgQ3lnd2lu KS4KKyAgICAgIGlmIHRlc3QgJHVzZV9hY2wgPSAwOyB0aGVuCisgICAgICAgIEFDX0NIRUNL X0ZVTkNTKFtmYWNsXSkKKyAgICAgICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19mYWNsID0geWVz OyB0aGVuCisgICAgICAgICAgQUNfU0VBUkNIX0xJQlMoW2FjbF90cml2aWFsXSwgW3NlY10s CisgICAgICAgICAgICBbaWYgdGVzdCAiJGFjX2N2X3NlYXJjaF9hY2xfdHJpdmlhbCIgIT0g Im5vbmUgcmVxdWlyZWQiOyB0aGVuCisgICAgICAgICAgICAgICBMSUJfQUNMPSRhY19jdl9z ZWFyY2hfYWNsX3RyaXZpYWwKKyAgICAgICAgICAgICBmaQorICAgICAgICAgICAgXSkKKyAg ICAgICAgICBBQ19DSEVDS19GVU5DUyhbYWNsX3RyaXZpYWxdKQorICAgICAgICAgIHVzZV9h Y2w9MQorICAgICAgICBmaQorICAgICAgZmkKKworICAgICAgZG5sIFRlc3QgZm9yIEhQLVVY IEFQSS4KKyAgICAgIGlmIHRlc3QgJHVzZV9hY2wgPSAwOyB0aGVuCisgICAgICAgIEFDX0NI RUNLX0ZVTkNTKFtnZXRhY2xdKQorICAgICAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX2dldGFj bCA9IHllczsgdGhlbgorICAgICAgICAgIHVzZV9hY2w9MQorICAgICAgICBmaQorICAgICAg ICBkbmwgVGVzdCBmb3IgSFAtVVggMTEuMTEgQVBJLgorICAgICAgICBBQ19DSEVDS19IRUFE RVJTKFthY2x2LmhdLCBbXSwgW10sIFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+XSkKKyAgICAg IGZpCisKKyAgICAgIGRubCBUZXN0IGZvciBBSVggQVBJIChBSVggNS4zIG9yIG5ld2VyKS4K KyAgICAgIGlmIHRlc3QgJHVzZV9hY2wgPSAwOyB0aGVuCisgICAgICAgIEFDX0NIRUNLX0ZV TkNTKFthY2x4X2dldF0pCisgICAgICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfYWNseF9nZXQg PSB5ZXM7IHRoZW4KKyAgICAgICAgICB1c2VfYWNsPTEKKyAgICAgICAgZmkKKyAgICAgIGZp CisKKyAgICAgIGRubCBUZXN0IGZvciBvbGRlciBBSVggQVBJLgorICAgICAgaWYgdGVzdCAk dXNlX2FjbCA9IDAgfHwgdGVzdCAiJGFjX2N2X2Z1bmNfYWNseF9nZXQiID0geWVzOyB0aGVu CisgICAgICAgIEFDX0NIRUNLX0ZVTkNTKFtzdGF0YWNsXSkKKyAgICAgICAgaWYgdGVzdCAk YWNfY3ZfZnVuY19zdGF0YWNsID0geWVzOyB0aGVuCisgICAgICAgICAgdXNlX2FjbD0xCisg ICAgICAgIGZpCisgICAgICBmaQorCisgICAgICBkbmwgVGVzdCBmb3IgTm9uU3RvcCBLZXJu ZWwgQVBJLgorICAgICAgaWYgdGVzdCAkdXNlX2FjbCA9IDA7IHRoZW4KKyAgICAgICAgQUNf Q0hFQ0tfRlVOQ1MoW2FjbHNvcnRdKQorICAgICAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX2Fj bHNvcnQgPSB5ZXM7IHRoZW4KKyAgICAgICAgICB1c2VfYWNsPTEKKyAgICAgICAgZmkKKyAg ICAgIGZpCisKKyAgICAgIExJQlM9JGFjX3NhdmVfTElCUworICAgIGZpCisgICAgaWYgdGVz dCAieCRlbmFibGVfYWNsJHVzZV9hY2wiID0gInh5ZXMwIjsgdGhlbgorICAgICAgQUNfTVNH X0VSUk9SKFtBQ0xzIGVuYWJsZWQgYnV0IHN1cHBvcnQgbm90IGRldGVjdGVkXSkKKyAgICBl bGlmIHRlc3QgIngkZW5hYmxlX2FjbCR1c2VfYWNsIiA9ICJ4YXV0bzAiOyB0aGVuCisgICAg ICBBQ19NU0dfV0FSTihbbGliYWNsIGRldmVsb3BtZW50IGxpYnJhcnkgd2FzIG5vdCBmb3Vu ZCBvciBub3QgdXNhYmxlLl0pCisgICAgICBBQ19NU0dfV0FSTihbQUNfUEFDS0FHRV9OQU1F IHdpbGwgYmUgYnVpbHQgd2l0aG91dCBBQ0wgc3VwcG9ydC5dKQorICAgIGZpCisgIGZpCisg IEFDX1NVQlNUKFtMSUJfQUNMXSkKKyAgQUNfREVGSU5FX1VOUVVPVEVEKFtVU0VfQUNMXSwg WyR1c2VfYWNsXSwKKyAgICBbRGVmaW5lIHRvIG5vbnplcm8gaWYgeW91IHdhbnQgYWNjZXNz IGNvbnRyb2wgbGlzdCBzdXBwb3J0Ll0pCisgIFVTRV9BQ0w9JHVzZV9hY2wKKyAgQUNfU1VC U1QoW1VTRV9BQ0xdKQorXSkKKworIyBnbF9BQ0xfR0VUX0ZJTEUoSUYtV09SS1MsIElGLU5P VCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJZiAnYWNs X2dldF9maWxlJyB3b3JrcyAoZG9lcyBub3QgaGF2ZSBhIHBhcnRpY3VsYXIgYnVnKSwKKyMg cnVuIElGLVdPUktTLCBvdGhlcndpc2UsIElGLU5PVC4KKyMgVGhpcyB0ZXN0cyBmb3IgYSBE YXJ3aW4gOC43LjAgYnVnLCB3aGVyZWJ5IGFjbF9nZXRfZmlsZSByZXR1cm5zIE5VTEwsCisj IGJ1dCBzZXRzIGVycm5vID0gRU5PRU5UIGZvciBhbiBleGlzdGluZyBmaWxlIG9yIGRpcmVj dG9yeS4KK0FDX0RFRlVOKFtnbF9BQ0xfR0VUX0ZJTEVdLAorWworICBBQ19DQUNIRV9DSEVD SyhbZm9yIHdvcmtpbmcgYWNsX2dldF9maWxlXSwgW2dsX2N2X2Z1bmNfd29ya2luZ19hY2xf Z2V0X2ZpbGVdLAorICAgIFtBQ19SVU5fSUZFTFNFKAorICAgICAgIFtBQ19MQU5HX1BST0dS QU0oCisgICAgICAgICAgW1sjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgICAgICAgICAgICNp bmNsdWRlIDxzeXMvYWNsLmg+CisgICAgICAgICAgICNpbmNsdWRlIDxlcnJuby5oPgorICAg ICAgICAgIF1dLAorICAgICAgICAgIFtbaWYgKCFhY2xfZ2V0X2ZpbGUgKCIuIiwgQUNMX1RZ UEVfQUNDRVNTKSAmJiBlcnJubyA9PSBFTk9FTlQpCisgICAgICAgICAgICAgIHJldHVybiAx OworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgXV0pXSwKKyAgICAgICBbZ2xf Y3ZfZnVuY193b3JraW5nX2FjbF9nZXRfZmlsZT15ZXNdLAorICAgICAgIFtnbF9jdl9mdW5j X3dvcmtpbmdfYWNsX2dldF9maWxlPW5vXSwKKyAgICAgICBbZ2xfY3ZfZnVuY193b3JraW5n X2FjbF9nZXRfZmlsZT1jcm9zcy1jb21waWxpbmddKV0pCisKKyAgQVNfSUYoW3Rlc3QgJGds X2N2X2Z1bmNfd29ya2luZ19hY2xfZ2V0X2ZpbGUgPSB5ZXNdLCBbJDFdLCBbJDJdKQorXSkK Cj09PSBhZGRlZCBmaWxlICdtNC9lcnJub19oLm00JwotLS0gbTQvZXJybm9faC5tNAkxOTcw LTAxLTAxIDAwOjAwOjAwICswMDAwCisrKyBtNC9lcnJub19oLm00CTIwMTMtMDQtMjkgMDY6 MDc6NDIgKzAwMDAKQEAgLTAsMCArMSwxMzcgQEAKKyMgZXJybm9faC5tNCBzZXJpYWwgMTIK K2RubCBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDgtMjAxMyBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNz aW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0 IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgor CitBQ19ERUZVTl9PTkNFKFtnbF9IRUFERVJfRVJSTk9fSF0sCitbCisgIEFDX1JFUVVJUkUo W0FDX1BST0dfQ0NdKQorICBBQ19DQUNIRV9DSEVDSyhbZm9yIGNvbXBsZXRlIGVycm5vLmhd LCBbZ2xfY3ZfaGVhZGVyX2Vycm5vX2hfY29tcGxldGVdLCBbCisgICAgQUNfRUdSRVBfQ1BQ KFtib29ib29dLFsKKyNpbmNsdWRlIDxlcnJuby5oPgorI2lmICFkZWZpbmVkIEVUWFRCU1kK K2Jvb2JvbworI2VuZGlmCisjaWYgIWRlZmluZWQgRU5PTVNHCitib29ib28KKyNlbmRpZgor I2lmICFkZWZpbmVkIEVJRFJNCitib29ib28KKyNlbmRpZgorI2lmICFkZWZpbmVkIEVOT0xJ TksKK2Jvb2JvbworI2VuZGlmCisjaWYgIWRlZmluZWQgRVBST1RPCitib29ib28KKyNlbmRp ZgorI2lmICFkZWZpbmVkIEVNVUxUSUhPUAorYm9vYm9vCisjZW5kaWYKKyNpZiAhZGVmaW5l ZCBFQkFETVNHCitib29ib28KKyNlbmRpZgorI2lmICFkZWZpbmVkIEVPVkVSRkxPVworYm9v Ym9vCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBFTk9UU1VQCitib29ib28KKyNlbmRpZgorI2lm ICFkZWZpbmVkIEVORVRSRVNFVAorYm9vYm9vCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBFQ09O TkFCT1JURUQKK2Jvb2JvbworI2VuZGlmCisjaWYgIWRlZmluZWQgRVNUQUxFCitib29ib28K KyNlbmRpZgorI2lmICFkZWZpbmVkIEVEUVVPVAorYm9vYm9vCisjZW5kaWYKKyNpZiAhZGVm aW5lZCBFQ0FOQ0VMRUQKK2Jvb2JvbworI2VuZGlmCisjaWYgIWRlZmluZWQgRU9XTkVSREVB RAorYm9vYm9vCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBFTk9UUkVDT1ZFUkFCTEUKK2Jvb2Jv bworI2VuZGlmCisjaWYgIWRlZmluZWQgRUlMU0VRCitib29ib28KKyNlbmRpZgorICAgICAg XSwKKyAgICAgIFtnbF9jdl9oZWFkZXJfZXJybm9faF9jb21wbGV0ZT1ub10sCisgICAgICBb Z2xfY3ZfaGVhZGVyX2Vycm5vX2hfY29tcGxldGU9eWVzXSkKKyAgXSkKKyAgaWYgdGVzdCAk Z2xfY3ZfaGVhZGVyX2Vycm5vX2hfY29tcGxldGUgPSB5ZXM7IHRoZW4KKyAgICBFUlJOT19I PScnCisgIGVsc2UKKyAgICBnbF9ORVhUX0hFQURFUlMoW2Vycm5vLmhdKQorICAgIEVSUk5P X0g9J2Vycm5vLmgnCisgIGZpCisgIEFDX1NVQlNUKFtFUlJOT19IXSkKKyAgQU1fQ09ORElU SU9OQUwoW0dMX0dFTkVSQVRFX0VSUk5PX0hdLCBbdGVzdCAtbiAiJEVSUk5PX0giXSkKKyAg Z2xfUkVQTEFDRV9FUlJOT19WQUxVRShbRU1VTFRJSE9QXSkKKyAgZ2xfUkVQTEFDRV9FUlJO T19WQUxVRShbRU5PTElOS10pCisgIGdsX1JFUExBQ0VfRVJSTk9fVkFMVUUoW0VPVkVSRkxP V10pCitdKQorCisjIEFzc3VtaW5nICQxID0gRU9WRVJGTE9XLgorIyBUaGUgRU9WRVJGTE9X IGVycm5vIHZhbHVlIG91Z2h0IHRvIGJlIGRlZmluZWQgaW4gPGVycm5vLmg+LCBhY2NvcmRp bmcgdG8KKyMgUE9TSVguICBCdXQgc29tZSBzeXN0ZW1zIChsaWtlIE9wZW5CU0QgNC4wIG9y IEFJWCAzKSBkb24ndCBkZWZpbmUgaXQsIGFuZAorIyBzb21lIHN5c3RlbXMgKGxpa2UgT1NG LzEpIGRlZmluZSBpdCB3aGVuIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgaXMgZGVmaW5lZC4K KyMgQ2hlY2sgZm9yIHRoZSB2YWx1ZSBvZiBFT1ZFUkZMT1cuCisjIFNldCB0aGUgdmFyaWFi bGVzIEVPVkVSRkxPV19ISURERU4gYW5kIEVPVkVSRkxPV19WQUxVRS4KK0FDX0RFRlVOKFtn bF9SRVBMQUNFX0VSUk5PX1ZBTFVFXSwKK1sKKyAgaWYgdGVzdCAtbiAiJEVSUk5PX0giOyB0 aGVuCisgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBdJDFbIHZhbHVlXSwgW2dsX2N2X2hlYWRl cl9lcnJub19oX10kMSwgWworICAgICAgQUNfRUdSRVBfQ1BQKFt5ZXNdLFsKKyNpbmNsdWRl IDxlcnJuby5oPgorI2lmZGVmIF0kMVsKK3llcworI2VuZGlmCisgICAgICBdLAorICAgICAg W2dsX2N2X2hlYWRlcl9lcnJub19oX10kMVs9eWVzXSwKKyAgICAgIFtnbF9jdl9oZWFkZXJf ZXJybm9faF9dJDFbPW5vXSkKKyAgICAgIGlmIHRlc3QgJGdsX2N2X2hlYWRlcl9lcnJub19o X10kMVsgPSBubzsgdGhlbgorICAgICAgICBBQ19FR1JFUF9DUFAoW3llc10sWworI2RlZmlu ZSBfWE9QRU5fU09VUkNFX0VYVEVOREVEIDEKKyNpbmNsdWRlIDxlcnJuby5oPgorI2lmZGVm IF0kMVsKK3llcworI2VuZGlmCisgICAgICAgICAgXSwgW2dsX2N2X2hlYWRlcl9lcnJub19o X10kMVs9aGlkZGVuXSkKKyAgICAgICAgaWYgdGVzdCAkZ2xfY3ZfaGVhZGVyX2Vycm5vX2hf XSQxWyA9IGhpZGRlbjsgdGhlbgorICAgICAgICAgIGRubCBUaGUgbWFjcm8gZXhpc3RzIGJ1 dCBpcyBoaWRkZW4uCisgICAgICAgICAgZG5sIERlZmluZSBpdCB0byB0aGUgc2FtZSB2YWx1 ZS4KKyAgICAgICAgICBBQ19DT01QVVRFX0lOVChbZ2xfY3ZfaGVhZGVyX2Vycm5vX2hfXSQx LCAkMSwgWworI2RlZmluZSBfWE9QRU5fU09VUkNFX0VYVEVOREVEIDEKKyNpbmNsdWRlIDxl cnJuby5oPgorLyogVGhlIGZvbGxvd2luZyB0d28gbGluZXMgYXJlIGEgd29ya2Fyb3VuZCBh Z2FpbnN0IGFuIGF1dG9jb25mLTIuNTIgYnVnLiAgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgor I2luY2x1ZGUgPHN0ZGxpYi5oPgorXSkKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgXSkK KyAgICBjYXNlICRnbF9jdl9oZWFkZXJfZXJybm9faF9dJDFbIGluCisgICAgICB5ZXMgfCBu bykKKyAgICAgICAgXSQxW19ISURERU49MDsgXSQxW19WQUxVRT0KKyAgICAgICAgOzsKKyAg ICAgICopCisgICAgICAgIF0kMVtfSElEREVOPTE7IF0kMVtfVkFMVUU9IiRnbF9jdl9oZWFk ZXJfZXJybm9faF9dJDFbIgorICAgICAgICA7OworICAgIGVzYWMKKyAgICBBQ19TVUJTVCgk MVtfSElEREVOXSkKKyAgICBBQ19TVUJTVCgkMVtfVkFMVUVdKQorICBmaQorXSkKKworZG5s IEF1dG9jb25mID49IDIuNjEgaGFzIEFDX0NPTVBVVEVfSU5UIGJ1aWx0LWluLgorZG5sIFJl bW92ZSB0aGlzIHdoZW4gd2UgY2FuIGFzc3VtZSBhdXRvY29uZiA+PSAyLjYxLgorbTRfaWZk ZWYoW0FDX0NPTVBVVEVfSU5UXSwgW10sIFsKKyAgQUNfREVGVU4oW0FDX0NPTVBVVEVfSU5U XSwgW19BQ19DT01QVVRFX0lOVChbJDJdLFskMV0sWyQzXSxbJDRdKV0pCitdKQoKPT09IG1v ZGlmaWVkIGZpbGUgJ200L2dudWxpYi1jb21wLm00JwotLS0gbTQvZ251bGliLWNvbXAubTQJ MjAxMy0wMy0xMyAxODo0MjoyMiArMDAwMAorKysgbTQvZ251bGliLWNvbXAubTQJMjAxMy0w NC0yOSAwNjowNzo0MiArMDAwMApAQCAtNTYsNiArNTYsNyBAQAogICAjIENvZGUgZnJvbSBt b2R1bGUgZHRvdGltZXNwZWM6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBkdXAyOgogICAjIENv ZGUgZnJvbSBtb2R1bGUgZW52aXJvbjoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGVycm5vOgog ICAjIENvZGUgZnJvbSBtb2R1bGUgZXVpZGFjY2VzczoKICAgIyBDb2RlIGZyb20gbW9kdWxl IGV4ZWNpbmZvOgogICAjIENvZGUgZnJvbSBtb2R1bGUgZXh0ZW5zaW9uczoKQEAgLTk0LDYg Kzk1LDcgQEAKICAgIyBDb2RlIGZyb20gbW9kdWxlIHBzZWxlY3Q6CiAgICMgQ29kZSBmcm9t IG1vZHVsZSBwdGhyZWFkX3NpZ21hc2s6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBwdXRlbnY6 CisgICMgQ29kZSBmcm9tIG1vZHVsZSBxYWNsOgogICAjIENvZGUgZnJvbSBtb2R1bGUgcmVh ZGxpbms6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSByZWFkbGlua2F0OgogICAjIENvZGUgZnJv bSBtb2R1bGUgcm9vdC11aWQ6CkBAIC0xNzksNiArMTgxLDcgQEAKICAgZ2xfVU5JU1REX01P RFVMRV9JTkRJQ0FUT1IoW2R1cDJdKQogICBnbF9FTlZJUk9OCiAgIGdsX1VOSVNURF9NT0RV TEVfSU5ESUNBVE9SKFtlbnZpcm9uXSkKKyAgZ2xfSEVBREVSX0VSUk5PX0gKICAgZ2xfRVhF Q0lORk9fSAogICBBQ19SRVFVSVJFKFtnbF9FWFRFUk5fSU5MSU5FXSkKICAgZ2xfRlVOQ19G QUNDRVNTQVQKQEAgLTI4Nyw2ICsyOTAsNyBAQAogICAgIGdsX1BSRVJFUV9QVVRFTlYKICAg ZmkKICAgZ2xfU1RETElCX01PRFVMRV9JTkRJQ0FUT1IoW3B1dGVudl0pCisgIGdsX0ZVTkNf QUNMCiAgIGdsX0ZVTkNfUkVBRExJTksKICAgaWYgdGVzdCAkSEFWRV9SRUFETElOSyA9IDAg fHwgdGVzdCAkUkVQTEFDRV9SRUFETElOSyA9IDE7IHRoZW4KICAgICBBQ19MSUJPQkooW3Jl YWRsaW5rXSkKQEAgLTczMyw2ICs3MzcsMTAgQEAKICAgYnVpbGQtYXV4L3NuaXBwZXQvYXJn LW5vbm51bGwuaAogICBidWlsZC1hdXgvc25pcHBldC9jKytkZWZzLmgKICAgYnVpbGQtYXV4 L3NuaXBwZXQvd2Fybi1vbi11c2UuaAorICBsaWIvYWNsLWVycm5vLXZhbGlkLmMKKyAgbGli L2FjbC1pbnRlcm5hbC5oCisgIGxpYi9hY2wuaAorICBsaWIvYWNsX2VudHJpZXMuYwogICBs aWIvYWxsb2NhLmluLmgKICAgbGliL2FsbG9jYXRvci5jCiAgIGxpYi9hbGxvY2F0b3IuaApA QCAtNzUxLDYgKzc1OSw3IEBACiAgIGxpYi9kdG9hc3RyLmMKICAgbGliL2R0b3RpbWVzcGVj LmMKICAgbGliL2R1cDIuYworICBsaWIvZXJybm8uaW4uaAogICBsaWIvZXVpZGFjY2Vzcy5j CiAgIGxpYi9leGVjaW5mby5jCiAgIGxpYi9leGVjaW5mby5pbi5oCkBAIC03NTgsNiArNzY3 LDcgQEAKICAgbGliL2ZjbnRsLmluLmgKICAgbGliL2ZkYXRhc3luYy5jCiAgIGxpYi9mZG9w ZW5kaXIuYworICBsaWIvZmlsZS1oYXMtYWNsLmMKICAgbGliL2ZpbGVtb2RlLmMKICAgbGli L2ZpbGVtb2RlLmgKICAgbGliL2ZwZW5kaW5nLmMKQEAgLTc5Miw2ICs4MDIsOCBAQAogICBs aWIvcHNlbGVjdC5jCiAgIGxpYi9wdGhyZWFkX3NpZ21hc2suYwogICBsaWIvcHV0ZW52LmMK KyAgbGliL3Fjb3B5LWFjbC5jCisgIGxpYi9xc2V0LWFjbC5jCiAgIGxpYi9yZWFkbGluay5j CiAgIGxpYi9yZWFkbGlua2F0LmMKICAgbGliL3Jvb3QtdWlkLmgKQEAgLTg0Myw2ICs4NTUs NyBAQAogICBsaWIvdmVyaWZ5LmgKICAgbGliL3hhbGxvYy1vdmVyc2l6ZWQuaAogICBtNC8w MGdudWxpYi5tNAorICBtNC9hY2wubTQKICAgbTQvYWxsb2NhLm00CiAgIG00L2Mtc3RydG9k Lm00CiAgIG00L2Nsb2NrX3RpbWUubTQKQEAgLTg1MCw2ICs4NjMsNyBAQAogICBtNC9kaXJl bnRfaC5tNAogICBtNC9kdXAyLm00CiAgIG00L2Vudmlyb24ubTQKKyAgbTQvZXJybm9faC5t NAogICBtNC9ldWlkYWNjZXNzLm00CiAgIG00L2V4ZWNpbmZvLm00CiAgIG00L2V4dGVuc2lv bnMubTQKCj09PSBtb2RpZmllZCBmaWxlICdudC9DaGFuZ2VMb2cnCi0tLSBudC9DaGFuZ2VM b2cJMjAxMy0wNC0wOSAwMjozODo1NiArMDAwMAorKysgbnQvQ2hhbmdlTG9nCTIwMTMtMDQt MjkgMDY6MDc6NDIgKzAwMDAKQEAgLTEsMyArMSw5IEBACisyMDEzLTA0LTI5ICBQYXVsIEVn Z2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCVVzZSBHbnVsaWIgQUNMIGltcGxlbWVu dGF0aW9uLCBmb3IgYmVuZWZpdCBvZiBTb2xhcmlzIGV0Yy4gKEJ1ZyMxNDI5NSkKKwkqIGNv bmZpZy5udCAoSEFWRV9BQ0xfU0VUX0ZJTEUpOiBSZW5hbWUgZnJvbSBIQVZFX1BPU0lYX0FD TC4KKwkoRU9QTk9UU1VQKTogTmV3IG1hY3JvLgorCiAyMDEzLTA0LTA5ICBLZW4gQnJvd24g IDxrYnJvd25AY29ybmVsbC5lZHU+CiAKIAkqIGVtYWNzLnJjOiBVc2UgNjQtYml0IG1hbmlm ZXN0IGZvciA2NC1iaXQgQ3lnd2luIGJ1aWxkLgoKPT09IG1vZGlmaWVkIGZpbGUgJ250L2Nv bmZpZy5udCcKLS0tIG50L2NvbmZpZy5udAkyMDEzLTAzLTMwIDA3OjEwOjU4ICswMDAwCisr KyBudC9jb25maWcubnQJMjAxMy0wNC0yOSAwNjowNzo0MiArMDAwMApAQCAtNzU2LDcgKzc1 Niw3IEBACiAjdW5kZWYgSEFWRV9QTkdfSAogCiAvKiBEZWZpbmUgdG8gMSBpZiB1c2luZyBQ T1NJWCBBQ0wgc3VwcG9ydC4gKi8KLSNkZWZpbmUgSEFWRV9QT1NJWF9BQ0wgMQorI2RlZmlu ZSBIQVZFX0FDTF9TRVRfRklMRSAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo ZSBgcG9zaXhfbWVtYWxpZ24nIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfUE9TSVhfTUVN QUxJR04KQEAgLTE3MjMsNiArMTcyMywxMiBAQAogLyogRGVmaW5lIGFzIGBmb3JrJyBpZiBg dmZvcmsnIGRvZXMgbm90IHdvcmsuICovCiAjdW5kZWYgdmZvcmsKIAorLyogV0lORE9XU05U IDxlcnJuby5oPiBkb2Vzbid0IGRlZmluZSBFT1BOT1RTVVBQLCBhbmQgd2UgZG9uJ3QgaGF2 ZQorICAgJ2NvbmZpZ3VyZScgd29ya2luZyB5ZXQgc28gd2UgY2FuJ3QgcmVseSBvbiB0aGUg R251bGliIHJlcGxhY2VtZW50CisgICBlcnJuby5oIGRlZmluaW5nIEVPUE5PVFNVUFAuICBX b3JrIGFyb3VuZCB0aGUgcHJvYmxlbSBieSBkZWZpbmluZworICAgaXQgaGVyZS4gICovCisj ZGVmaW5lIEVPUE5PVFNVUFAgMTMwCisKICNpbmNsdWRlIDxjb25mX3Bvc3QuaD4KIAogI2Vu ZGlmIC8qIEVNQUNTX0NPTkZJR19IICovCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL0NoYW5n ZUxvZycKLS0tIHNyYy9DaGFuZ2VMb2cJMjAxMy0wNC0yOCAxODoyMTowMSArMDAwMAorKysg c3JjL0NoYW5nZUxvZwkyMDEzLTA0LTI5IDA2OjA3OjQyICswMDAwCkBAIC0xLDMgKzEsMTYg QEAKKzIwMTMtMDQtMjkgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJ VXNlIEdudWxpYiBBQ0wgaW1wbGVtZW50YXRpb24sIGZvciBiZW5lZml0IG9mIFNvbGFyaXMg ZXRjLiAoQnVnIzE0Mjk1KQorCSogTWFrZWZpbGUuaW4gKExJQl9BQ0wpOiBOZXcgbWFjcm8u CisJKExJQkFDTF9MSUJTKTogUmVtb3ZlLgorCShMSUJFUyk6IFVzZSBMSUJfQUNMLCBub3Qg TElCQUNMX0xJQlMuCisJKiBmaWxlaW8uYzogSW5jbHVkZSA8YWNsLmg+LgorCVVzZSBIQVZF X0FDTF9TRVRfRklMRSByYXRoZXIgdGhhbiBIQVZFX1BPU0lYX0FDTC4KKwkoQUNMX05PVF9X RUxMX1NVUFBPUlRFRCk6IFJlbW92ZS4gIEFsbCB1c2VzIHJlcGxhY2VkIGJ5CisJIWFjbF9l cnJub192YWxpZC4KKwkoRmNvcHlfZmlsZSkgWyFXSU5ET1dTTlRdOiBVc2UgcWNvcHlfYWNs IGluc3RlYWQgb2Ygcm9sbGluZworCWl0IG91cnNlbHZlcy4KKwogMjAxMy0wNC0yOCAgRWxp IFphcmV0c2tpaSAgPGVsaXpAZ251Lm9yZz4KIAogCSogY29kaW5nLmMgKGRlY29kZV9jb2Rp bmdfZ2FwKTogRG9uJ3QgcmVtb3ZlIHRoZSBjaGFyYWN0ZXIgYmVmb3JlCgo9PT0gbW9kaWZp ZWQgZmlsZSAnc3JjL01ha2VmaWxlLmluJwotLS0gc3JjL01ha2VmaWxlLmluCTIwMTMtMDQt MjIgMDU6MTg6MzAgKzAwMDAKKysrIHNyYy9NYWtlZmlsZS5pbgkyMDEzLTA0LTI3IDE5OjQw OjQ5ICswMDAwCkBAIC0xMzcsNiArMTM3LDcgQEAKIE0xN05fRkxUX0NGTEFHUyA9IEBNMTdO X0ZMVF9DRkxBR1NACiBNMTdOX0ZMVF9MSUJTID0gQE0xN05fRkxUX0xJQlNACiAKK0xJQl9B Q0w9QExJQl9BQ0xACiBMSUJfQ0xPQ0tfR0VUVElNRT1ATElCX0NMT0NLX0dFVFRJTUVACiBM SUJfRUFDQ0VTUz1ATElCX0VBQ0NFU1NACiBMSUJfRkRBVEFTWU5DPUBMSUJfRkRBVEFTWU5D QApAQCAtMjgyLDggKzI4Myw2IEBACiBMSUJHTlVUTFNfTElCUyA9IEBMSUJHTlVUTFNfTElC U0AKIExJQkdOVVRMU19DRkxBR1MgPSBATElCR05VVExTX0NGTEFHU0AKIAotTElCQUNMX0xJ QlMgPSBATElCQUNMX0xJQlNACi0KIExJQl9QVEhSRUFEX1NJR01BU0sgPSBATElCX1BUSFJF QURfU0lHTUFTS0AKIAogSU5URVJWQUxTX0ggPSBkaXNwZXh0ZXJuLmggaW50ZXJ2YWxzLmgg Y29tcG9zaXRlLmgKQEAgLTM5MSwxMyArMzkwLDEzIEBACiAjIyBDb25zdHJ1Y3QgZnVsbCBz ZXQgb2YgbGlicmFyaWVzIHRvIGJlIGxpbmtlZC4KIExJQkVTID0gJChMSUJTKSAkKFczMl9M SUJTKSAkKExJQlNfR05VU1RFUCkgJChMSUJYX0JBU0UpICQoTElCSU1BR0UpIFwKICAgICQo TElCWF9PVEhFUikgJChMSUJTT1VORCkgXAotICAgJChSU1ZHX0xJQlMpICQoSU1BR0VNQUdJ Q0tfTElCUykgJChMSUJfQ0xPQ0tfR0VUVElNRSkgXAorICAgJChSU1ZHX0xJQlMpICQoSU1B R0VNQUdJQ0tfTElCUykgJChMSUJfQUNMKSAkKExJQl9DTE9DS19HRVRUSU1FKSBcCiAgICAk KExJQl9FQUNDRVNTKSAkKExJQl9GREFUQVNZTkMpICQoTElCX1RJTUVSX1RJTUUpICQoREJV U19MSUJTKSBcCiAgICAkKExJQl9FWEVDSU5GTykgXAogICAgJChMSUJYTUwyX0xJQlMpICQo TElCR1BNKSAkKExJQlJFU09MVikgJChMSUJTX1NZU1RFTSkgXAogICAgJChMSUJTX1RFUk1D QVApICQoR0VUTE9BREFWR19MSUJTKSAkKFNFVFRJTkdTX0xJQlMpICQoTElCU0VMSU5VWF9M SUJTKSBcCiAgICAkKEZSRUVUWVBFX0xJQlMpICQoRk9OVENPTkZJR19MSUJTKSAkKExJQk9U Rl9MSUJTKSAkKE0xN05fRkxUX0xJQlMpIFwKLSAgICQoTElCQUNMX0xJQlMpICQoTElCR05V VExTX0xJQlMpICQoTElCX1BUSFJFQUQpICQoTElCX1BUSFJFQURfU0lHTUFTSykgXAorICAg JChMSUJHTlVUTFNfTElCUykgJChMSUJfUFRIUkVBRCkgJChMSUJfUFRIUkVBRF9TSUdNQVNL KSBcCiAgICAkKExJQl9NQVRIKQogCiBhbGw6IGVtYWNzJChFWEVFWFQpICQoT1RIRVJfRklM RVMpCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2ZpbGVpby5jJwotLS0gc3JjL2ZpbGVpby5j CTIwMTMtMDQtMDcgMTY6MTg6NDEgKzAwMDAKKysrIHNyYy9maWxlaW8uYwkyMDEzLTA0LTI5 IDA2OjA3OjQyICswMDAwCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSA8c2VsaW51eC9j b250ZXh0Lmg+CiAjZW5kaWYKIAotI2lmZGVmIEhBVkVfUE9TSVhfQUNMCisjaWZkZWYgSEFW RV9BQ0xfU0VUX0ZJTEUKICNpbmNsdWRlIDxzeXMvYWNsLmg+CiAjZW5kaWYKIApAQCAtODEs MjYgKzgxLDggQEAKICNkZWZpbmUgRFJJVkVfTEVUVEVSKHgpIGNfdG9sb3dlciAoeCkKICNl bmRpZgogCi0jaWZkZWYgSEFWRV9QT1NJWF9BQ0wKLS8qIEZJWE1FOiB0aGlzIG1hY3JvIHdh cyBjb3BpZWQgZnJvbSBnbnVsaWIncyBwcml2YXRlIGFjbC1pbnRlcm5hbC5oCi0gICBoZWFk ZXIgZmlsZS4gICovCi0vKiBSZWNvZ25pemUgc29tZSBjb21tb24gZXJyb3JzIHN1Y2ggYXMg ZnJvbSBhbiBORlMgbW91bnQgdGhhdCBkb2VzCi0gICBub3Qgc3VwcG9ydCBBQ0xzLCBldmVu IHdoZW4gbG9jYWwgZHJpdmVzIGRvLiAgKi8KLSNpZiBkZWZpbmVkIF9fQVBQTEVfXyAmJiBk ZWZpbmVkIF9fTUFDSF9fIC8qIE1hYyBPUyBYICovCi0jZGVmaW5lIEFDTF9OT1RfV0VMTF9T VVBQT1JURUQoRXJyKQkJCQkJXAotICAoKEVycikgPT0gRU5PVFNVUCB8fCAoRXJyKSA9PSBF Tk9TWVMgfHwgKEVycikgPT0gRUlOVkFMIHx8IChFcnIpID09IEVCVVNZIHx8IChFcnIpID09 IEVOT0VOVCkKLSNlbGlmIGRlZmluZWQgRU9QTk9UU1VQUCAvKiBUcnU2NCBORlMgKi8KLSNk ZWZpbmUgQUNMX05PVF9XRUxMX1NVUFBPUlRFRChFcnIpCQkJCQlcCi0gICgoRXJyKSA9PSBF Tk9UU1VQIHx8IChFcnIpID09IEVOT1NZUyB8fCAoRXJyKSA9PSBFSU5WQUwgfHwgKEVycikg PT0gRUJVU1kgfHwgKEVycikgPT0gRU9QTk9UU1VQUCkKLSNlbGlmIGRlZmluZWQgV0lORE9X U05UCi0jZGVmaW5lIEFDTF9OT1RfV0VMTF9TVVBQT1JURUQoRXJyKSAgKChFcnIpID09IEVO T1RTVVApCi0jZWxzZQotI2RlZmluZSBBQ0xfTk9UX1dFTExfU1VQUE9SVEVEKEVycikJCQkJ CVwKLSAgKChFcnIpID09IEVOT1RTVVAgfHwgKEVycikgPT0gRU5PU1lTIHx8IChFcnIpID09 IEVJTlZBTCB8fCAoRXJyKSA9PSBFQlVTWSkKLSNlbmRpZgotI2VuZGlmCS8qIEhBVkVfUE9T SVhfQUNMICovCi0KICNpbmNsdWRlICJzeXN0aW1lLmgiCisjaW5jbHVkZSA8YWNsLmg+CiAj aW5jbHVkZSA8YWxsb2NhdG9yLmg+CiAjaW5jbHVkZSA8Y2FyZWFkbGlua2F0Lmg+CiAjaW5j bHVkZSA8c3RhdC10aW1lLmg+CkBAIC0xOTg4LDcgKzE5NzAsNyBAQAogICBzZWN1cml0eV9j b250ZXh0X3QgY29uOwogICBpbnQgY29ubGVuZ3RoID0gMDsKICNlbmRpZgotI2lmZGVmIEhB VkVfUE9TSVhfQUNMCisjaWZkZWYgV0lORE9XU05UCiAgIGFjbF90IGFjbCA9IE5VTEw7CiAj ZW5kaWYKIApAQCAtMjAyOCwxMSArMjAxMCw5IEBACiAjaWZkZWYgV0lORE9XU05UCiAgIGlm ICghTklMUCAocHJlc2VydmVfZXh0ZW5kZWRfYXR0cmlidXRlcykpCiAgICAgewotI2lmZGVm IEhBVkVfUE9TSVhfQUNMCiAgICAgICBhY2wgPSBhY2xfZ2V0X2ZpbGUgKFNEQVRBIChlbmNv ZGVkX2ZpbGUpLCBBQ0xfVFlQRV9BQ0NFU1MpOwotICAgICAgaWYgKGFjbCA9PSBOVUxMICYm ICFBQ0xfTk9UX1dFTExfU1VQUE9SVEVEIChlcnJubykpCisgICAgICBpZiAoYWNsID09IE5V TEwgJiYgYWNsX2Vycm5vX3ZhbGlkIChlcnJubykpCiAJcmVwb3J0X2ZpbGVfZXJyb3IgKCJH ZXR0aW5nIEFDTCIsIEZjb25zIChmaWxlLCBRbmlsKSk7Ci0jZW5kaWYKICAgICB9CiAgIGlm ICghQ29weUZpbGUgKFNEQVRBIChlbmNvZGVkX2ZpbGUpLAogCQkgU0RBVEEgKGVuY29kZWRf bmV3bmFtZSksCkBAIC0yMDY5LDE3ICsyMDQ5LDE1IEBACiAgICAgICAvKiBSZXN0b3JlIG9y aWdpbmFsIGF0dHJpYnV0ZXMuICAqLwogICAgICAgU2V0RmlsZUF0dHJpYnV0ZXMgKGZpbGVu YW1lLCBhdHRyaWJ1dGVzKTsKICAgICB9Ci0jaWZkZWYgSEFWRV9QT1NJWF9BQ0wKICAgaWYg KGFjbCAhPSBOVUxMKQogICAgIHsKICAgICAgIGJvb2wgZmFpbCA9CiAJYWNsX3NldF9maWxl IChTREFUQSAoZW5jb2RlZF9uZXduYW1lKSwgQUNMX1RZUEVfQUNDRVNTLCBhY2wpICE9IDA7 Ci0gICAgICBpZiAoZmFpbCAmJiAhQUNMX05PVF9XRUxMX1NVUFBPUlRFRCAoZXJybm8pKQor ICAgICAgaWYgKGZhaWwgJiYgYWNsX2Vycm5vX3ZhbGlkIChlcnJubykpCiAJcmVwb3J0X2Zp bGVfZXJyb3IgKCJTZXR0aW5nIEFDTCIsIEZjb25zIChuZXduYW1lLCBRbmlsKSk7CiAKICAg ICAgIGFjbF9mcmVlIChhY2wpOwogICAgIH0KLSNlbmRpZgogI2Vsc2UgLyogbm90IFdJTkRP V1NOVCAqLwogICBpbW1lZGlhdGVfcXVpdCA9IDE7CiAgIGlmZCA9IGVtYWNzX29wZW4gKFNT REFUQSAoZW5jb2RlZF9maWxlKSwgT19SRE9OTFksIDApOwpAQCAtMjEwMywxMiArMjA4MSw2 IEBACiAJICAgIHJlcG9ydF9maWxlX2Vycm9yICgiRG9pbmcgZmdldGZpbGVjb24iLCBGY29u cyAoZmlsZSwgUW5pbCkpOwogCX0KICNlbmRpZgotCi0jaWZkZWYgSEFWRV9QT1NJWF9BQ0wK LSAgICAgIGFjbCA9IGFjbF9nZXRfZmQgKGlmZCk7Ci0gICAgICBpZiAoYWNsID09IE5VTEwg JiYgIUFDTF9OT1RfV0VMTF9TVVBQT1JURUQgKGVycm5vKSkKLQlyZXBvcnRfZmlsZV9lcnJv ciAoIkdldHRpbmcgQUNMIiwgRmNvbnMgKGZpbGUsIFFuaWwpKTsKLSNlbmRpZgogICAgIH0K IAogICBpZiAob3V0X3N0LnN0X21vZGUgIT0gMApAQCAtMjE1Niw3ICsyMTI4LDcgQEAKICAg aW1tZWRpYXRlX3F1aXQgPSAwOwogCiAjaWZuZGVmIE1TRE9TCi0gIC8qIFByZXNlcnZlIHRo ZSBvcmlnaW5hbCBmaWxlIG1vZGVzLCBhbmQgaWYgcmVxdWVzdGVkLCBhbHNvIGl0cworICAv KiBQcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgZmlsZSBwZXJtaXNzaW9ucywgYW5kIGlmIHJlcXVl c3RlZCwgYWxzbyBpdHMKICAgICAgb3duZXIgYW5kIGdyb3VwLiAgKi8KICAgewogICAgIG1v ZGVfdCBtb2RlX21hc2sgPSAwNzc3NzsKQEAgLTIxNzMsOCArMjE0NSwxNiBAQAogCSAgICAg IG1vZGVfbWFzayB8PSAwMjAwMDsKIAkgIH0KICAgICAgIH0KLSAgICBpZiAoZmNobW9kIChv ZmQsIHN0LnN0X21vZGUgJiBtb2RlX21hc2spICE9IDApCi0gICAgICByZXBvcnRfZmlsZV9l cnJvciAoIkRvaW5nIGNobW9kIiwgRmNvbnMgKG5ld25hbWUsIFFuaWwpKTsKKworICAgIHN3 aXRjaCAoIU5JTFAgKHByZXNlcnZlX2V4dGVuZGVkX2F0dHJpYnV0ZXMpCisJICAgID8gcWNv cHlfYWNsIChTU0RBVEEgKGVuY29kZWRfZmlsZSksIGlmZCwKKwkJCSBTU0RBVEEgKGVuY29k ZWRfbmV3bmFtZSksIG9mZCwKKwkJCSBzdC5zdF9tb2RlICYgbW9kZV9tYXNrKQorCSAgICA6 IGZjaG1vZCAob2ZkLCBzdC5zdF9tb2RlICYgbW9kZV9tYXNrKSkKKyAgICAgIHsKKyAgICAg IGNhc2UgLTI6IHJlcG9ydF9maWxlX2Vycm9yICgiQ29weWluZyBwZXJtaXNzaW9ucyBmcm9t IiwgbGlzdDEgKGZpbGUpKTsKKyAgICAgIGNhc2UgLTE6IHJlcG9ydF9maWxlX2Vycm9yICgi Q29weWluZyBwZXJtaXNzaW9ucyB0byIsIGxpc3QxIChuZXduYW1lKSk7CisgICAgICB9CiAg IH0KICNlbmRpZgkvKiBub3QgTVNET1MgKi8KIApAQCAtMjE5MSwxNyArMjE3MSw2IEBACiAg ICAgfQogI2VuZGlmCiAKLSNpZmRlZiBIQVZFX1BPU0lYX0FDTAotICBpZiAoYWNsICE9IE5V TEwpCi0gICAgewotICAgICAgYm9vbCBmYWlsID0gYWNsX3NldF9mZCAob2ZkLCBhY2wpICE9 IDA7Ci0gICAgICBpZiAoZmFpbCAmJiAhQUNMX05PVF9XRUxMX1NVUFBPUlRFRCAoZXJybm8p KQotCXJlcG9ydF9maWxlX2Vycm9yICgiU2V0dGluZyBBQ0wiLCBGY29ucyAobmV3bmFtZSwg UW5pbCkpOwotCi0gICAgICBhY2xfZnJlZSAoYWNsKTsKLSAgICB9Ci0jZW5kaWYKLQogICBp ZiAoIU5JTFAgKGtlZXBfdGltZSkpCiAgICAgewogICAgICAgRU1BQ1NfVElNRSBhdGltZSA9 IGdldF9zdGF0X2F0aW1lICgmc3QpOwpAQCAtMzExMSw3ICszMDgwLDcgQEAKIHsKICAgTGlz cF9PYmplY3QgYWJzbmFtZTsKICAgTGlzcF9PYmplY3QgaGFuZGxlcjsKLSNpZmRlZiBIQVZF X1BPU0lYX0FDTAorI2lmZGVmIEhBVkVfQUNMX1NFVF9GSUxFCiAgIGFjbF90IGFjbDsKICAg TGlzcF9PYmplY3QgYWNsX3N0cmluZzsKICAgY2hhciAqc3RyOwpAQCAtMzEyNiw3ICszMDk1 LDcgQEAKICAgaWYgKCFOSUxQIChoYW5kbGVyKSkKICAgICByZXR1cm4gY2FsbDIgKGhhbmRs ZXIsIFFmaWxlX2FjbCwgYWJzbmFtZSk7CiAKLSNpZmRlZiBIQVZFX1BPU0lYX0FDTAorI2lm ZGVmIEhBVkVfQUNMX1NFVF9GSUxFCiAgIGFic25hbWUgPSBFTkNPREVfRklMRSAoYWJzbmFt ZSk7CiAKICAgYWNsID0gYWNsX2dldF9maWxlIChTU0RBVEEgKGFic25hbWUpLCBBQ0xfVFlQ RV9BQ0NFU1MpOwpAQCAtMzE2NCw3ICszMTMzLDcgQEAKIHsKICAgTGlzcF9PYmplY3QgYWJz bmFtZTsKICAgTGlzcF9PYmplY3QgaGFuZGxlcjsKLSNpZmRlZiBIQVZFX1BPU0lYX0FDTAor I2lmZGVmIEhBVkVfQUNMX1NFVF9GSUxFCiAgIExpc3BfT2JqZWN0IGVuY29kZWRfYWJzbmFt ZTsKICAgYWNsX3QgYWNsOwogICBib29sIGZhaWw7CkBAIC0zMTc4LDcgKzMxNDcsNyBAQAog ICBpZiAoIU5JTFAgKGhhbmRsZXIpKQogICAgIHJldHVybiBjYWxsMyAoaGFuZGxlciwgUXNl dF9maWxlX2FjbCwgYWJzbmFtZSwgYWNsX3N0cmluZyk7CiAKLSNpZmRlZiBIQVZFX1BPU0lY X0FDTAorI2lmZGVmIEhBVkVfQUNMX1NFVF9GSUxFCiAgIGlmIChTVFJJTkdQIChhY2xfc3Ry aW5nKSkKICAgICB7CiAgICAgICBhY2wgPSBhY2xfZnJvbV90ZXh0IChTU0RBVEEgKGFjbF9z dHJpbmcpKTsKQEAgLTMxOTMsNyArMzE2Miw3IEBACiAgICAgICBmYWlsID0gKGFjbF9zZXRf ZmlsZSAoU1NEQVRBIChlbmNvZGVkX2Fic25hbWUpLCBBQ0xfVFlQRV9BQ0NFU1MsCiAJCQkg ICAgYWNsKQogCSAgICAgICE9IDApOwotICAgICAgaWYgKGZhaWwgJiYgIUFDTF9OT1RfV0VM TF9TVVBQT1JURUQgKGVycm5vKSkKKyAgICAgIGlmIChmYWlsICYmIGFjbF9lcnJub192YWxp ZCAoZXJybm8pKQogCXJlcG9ydF9maWxlX2Vycm9yICgiU2V0dGluZyBBQ0wiLCBGY29ucyAo YWJzbmFtZSwgUW5pbCkpOwogCiAgICAgICBhY2xfZnJlZSAoYWNsKTsKCg== --------------040804070600040302090506-- From unknown Tue Jun 24 05:11:12 2025 X-Loop: help-debbugs@gnu.org Subject: bug#14295: Support copy-file ACLs for Solaris etc. Resent-From: Eli Zaretskii Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 29 Apr 2013 17:09:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 14295 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: Paul Eggert Cc: 14295@debbugs.gnu.org X-Debbugs-Original-Cc: bug-gnu-emacs@gnu.org Reply-To: Eli Zaretskii Received: via spool by submit@debbugs.gnu.org id=B.136725530614182 (code B ref -1); Mon, 29 Apr 2013 17:09:01 +0000 Received: (at submit) by debbugs.gnu.org; 29 Apr 2013 17:08:26 +0000 Received: from localhost ([127.0.0.1]:50639 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1UWrYw-0003gf-0g for submit@debbugs.gnu.org; Mon, 29 Apr 2013 13:08:26 -0400 Received: from eggs.gnu.org ([208.118.235.92]:48080) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1UWrYt-0003gS-Oj for submit@debbugs.gnu.org; Mon, 29 Apr 2013 13:08:24 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UWrYZ-0006Kz-Rh for submit@debbugs.gnu.org; Mon, 29 Apr 2013 13:08:05 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=-100.0 required=5.0 tests=BAYES_40, RCVD_IN_DNSWL_NONE, USER_IN_WHITELIST autolearn=disabled version=3.3.2 Received: from lists.gnu.org ([208.118.235.17]:37808) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UWrYZ-0006Kv-PD for submit@debbugs.gnu.org; Mon, 29 Apr 2013 13:08:03 -0400 Received: from eggs.gnu.org ([208.118.235.92]:59405) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UWrYU-0000Ip-RW for bug-gnu-emacs@gnu.org; Mon, 29 Apr 2013 13:08:03 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UWrYP-0006IR-VS for bug-gnu-emacs@gnu.org; Mon, 29 Apr 2013 13:07:58 -0400 Received: from mtaout20.012.net.il ([80.179.55.166]:46846) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UWrYP-0006Go-N5 for bug-gnu-emacs@gnu.org; Mon, 29 Apr 2013 13:07:53 -0400 Received: from conversion-daemon.a-mtaout20.012.net.il by a-mtaout20.012.net.il (HyperSendmail v2007.08) id <0MM000900ZSE1Z00@a-mtaout20.012.net.il> for bug-gnu-emacs@gnu.org; Mon, 29 Apr 2013 20:07:52 +0300 (IDT) Received: from HOME-C4E4A596F7 ([87.69.4.28]) by a-mtaout20.012.net.il (HyperSendmail v2007.08) with ESMTPA id <0MM1009FS0X36Z30@a-mtaout20.012.net.il>; Mon, 29 Apr 2013 20:07:52 +0300 (IDT) Date: Mon, 29 Apr 2013 20:07:43 +0300 From: Eli Zaretskii In-reply-to: <517E0FEA.2000500@cs.ucla.edu> X-012-Sender: halo1@inter.net.il Message-id: <83ehdtqn8g.fsf@gnu.org> References: <517C987F.6060902@cs.ucla.edu> <83ehdushhu.fsf@gnu.org> <517E0FEA.2000500@cs.ucla.edu> X-detected-operating-system: by eggs.gnu.org: Solaris 10 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 208.118.235.17 X-Spam-Score: -9.3 (---------) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -9.3 (---------) > Date: Sun, 28 Apr 2013 23:15:06 -0700 > From: Paul Eggert > CC: bug-gnu-emacs@gnu.org > > > How hard would it to support both? > > I don't know, and I'd rather not support --without-acl. This should > have been an --enable/--disable option in the first place, as it's > enabling or disabling a feature, not building with or without a > package. There's little point to Emacs departing from existing > GNU practice here. I just wonder how many people are used to that option. Maybe not too many, since this is a new feature. > > This uses EOPNOTSUPP without #ifdef guards; is that universally > > available? > > Mostly, except for Windows, but to play it safe we can incorporate the > Gnulib errno module, which defines EOPNOTSUPP if it's not already > defined. That almost works, but there are 2 issues: . I'd prefer to have the definition of EOPNOTSUPP in nt/inc/ms-w32.h, to make synchronization of config.nt with src/config.in easier. . More importantly, ENOTSUP is defined on Windows with the same value as ENOSYS (see ms-w32.h), so acl-errno-valid.c will fail to compile due to 2 identical case values in a switch. > > If I'm right, perhaps it is best to leave the WINDOWSNT parts alone: > > Sure, we can do that. Thanks. > OK. Revised patch attached, which tries to address the above. It looks fine, other than the 2 minor issues above, thanks. > It relies on Gnulib for EOPNOTSUPP, except for WINDOWSNT where > 'configure' isn't working yet, and there it adds a line to > nt/config.nt to deal with this until we get 'configure' working. 'configure' is already working, I just need time to finish up the branch and merge it. But even when that is done (hopefully in a few days), we will not immediately abandon the current configury. It will take some time. From unknown Tue Jun 24 05:11:12 2025 MIME-Version: 1.0 X-Mailer: MIME-tools 5.428 (Entity 5.428) X-Loop: help-debbugs@gnu.org From: help-debbugs@gnu.org (GNU bug Tracking System) To: Paul Eggert Subject: bug#14295: closed (Re: Support copy-file ACLs for Solaris etc.) Message-ID: References: <518973F6.7000806@cs.ucla.edu> <517C987F.6060902@cs.ucla.edu> X-Gnu-PR-Message: they-closed 14295 X-Gnu-PR-Package: emacs X-Gnu-PR-Keywords: patch Reply-To: 14295@debbugs.gnu.org Date: Tue, 07 May 2013 21:39:02 +0000 Content-Type: multipart/mixed; boundary="----------=_1367962742-11497-1" This is a multi-part message in MIME format... ------------=_1367962742-11497-1 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Your bug report #14295: Support copy-file ACLs for Solaris etc. which was filed against the emacs package, has been closed. The explanation is attached below, along with your original report. If you require more details, please reply to 14295@debbugs.gnu.org. --=20 14295: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D14295 GNU Bug Tracking System Contact help-debbugs@gnu.org with problems ------------=_1367962742-11497-1 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at 14295-done) by debbugs.gnu.org; 7 May 2013 21:38:04 +0000 Received: from localhost ([127.0.0.1]:33205 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1UZpaF-0002xb-Hn for submit@debbugs.gnu.org; Tue, 07 May 2013 17:38:04 -0400 Received: from smtp.cs.ucla.edu ([131.179.128.62]:46954) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1UZpaD-0002xD-Eq for 14295-done@debbugs.gnu.org; Tue, 07 May 2013 17:38:02 -0400 Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id F36D4A6001A; Tue, 7 May 2013 14:36:55 -0700 (PDT) X-Virus-Scanned: amavisd-new at smtp.cs.ucla.edu Received: from smtp.cs.ucla.edu ([127.0.0.1]) by localhost (smtp.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 8cYIO1aXMmAh; Tue, 7 May 2013 14:36:55 -0700 (PDT) Received: from penguin.cs.ucla.edu (Penguin.CS.UCLA.EDU [131.179.64.200]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id 5F5B0A6000D; Tue, 7 May 2013 14:36:55 -0700 (PDT) Message-ID: <518973F6.7000806@cs.ucla.edu> Date: Tue, 07 May 2013 14:36:54 -0700 From: Paul Eggert User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130311 Thunderbird/17.0.4 MIME-Version: 1.0 To: Eli Zaretskii Subject: Re: Support copy-file ACLs for Solaris etc. References: <517C987F.6060902@cs.ucla.edu> <83ehdushhu.fsf@gnu.org> <517E0FEA.2000500@cs.ucla.edu> <83ehdtqn8g.fsf@gnu.org> In-Reply-To: <83ehdtqn8g.fsf@gnu.org> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Score: -3.6 (---) X-Debbugs-Envelope-To: 14295-done Cc: 14295-done@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -5.5 (-----) On 04/29/13 10:07, Eli Zaretskii wrote: > That almost works, but there are 2 issues: > > . I'd prefer to have the definition of EOPNOTSUPP in nt/inc/ms-w32.h, > to make synchronization of config.nt with src/config.in easier. > > . More importantly, ENOTSUP is defined on Windows with the same value > as ENOSYS (see ms-w32.h), so acl-errno-valid.c will fail to compile > due to 2 identical case values in a switch. Thanks, I fixed those, installed it as trunk bzr 112507, and am marking this bug as done. ------------=_1367962742-11497-1 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at submit) by debbugs.gnu.org; 28 Apr 2013 03:34:12 +0000 Received: from localhost ([127.0.0.1]:47660 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1UWINQ-0004Co-91 for submit@debbugs.gnu.org; Sat, 27 Apr 2013 23:34:12 -0400 Received: from eggs.gnu.org ([208.118.235.92]:47964) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1UWINK-0004CY-SH for submit@debbugs.gnu.org; Sat, 27 Apr 2013 23:34:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UWIMx-0006JQ-FY for submit@debbugs.gnu.org; Sat, 27 Apr 2013 23:33:56 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=-102.3 required=5.0 tests=BAYES_40, RCVD_IN_DNSWL_MED, RP_MATCHES_RCVD,USER_IN_WHITELIST autolearn=disabled version=3.3.2 Received: from lists.gnu.org ([208.118.235.17]:33184) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UWIMx-0006JM-AS for submit@debbugs.gnu.org; Sat, 27 Apr 2013 23:33:43 -0400 Received: from eggs.gnu.org ([208.118.235.92]:59294) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UWIMo-0005zG-Uy for bug-gnu-emacs@gnu.org; Sat, 27 Apr 2013 23:33:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UWIMg-0006I4-Rd for bug-gnu-emacs@gnu.org; Sat, 27 Apr 2013 23:33:34 -0400 Received: from smtp.cs.ucla.edu ([131.179.128.62]:59969) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UWIMg-0006Gx-1F; Sat, 27 Apr 2013 23:33:26 -0400 Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id 112AF39E810A; Sat, 27 Apr 2013 20:33:25 -0700 (PDT) X-Virus-Scanned: amavisd-new at smtp.cs.ucla.edu Received: from smtp.cs.ucla.edu ([127.0.0.1]) by localhost (smtp.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id xeFOZyaNfEdE; Sat, 27 Apr 2013 20:33:20 -0700 (PDT) Received: from [192.168.1.9] (pool-71-189-154-249.lsanca.fios.verizon.net [71.189.154.249]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id C6E2439E8008; Sat, 27 Apr 2013 20:33:19 -0700 (PDT) Message-ID: <517C987F.6060902@cs.ucla.edu> Date: Sat, 27 Apr 2013 20:33:19 -0700 From: Paul Eggert Organization: UCLA Computer Science Department User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130404 Thunderbird/17.0.5 MIME-Version: 1.0 To: bug-gnu-emacs@gnu.org Subject: Support copy-file ACLs for Solaris etc. Content-Type: multipart/mixed; boundary="------------060902070705010703000507" X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 208.118.235.17 X-Debbugs-Envelope-To: submit Cc: Eli Zaretskii X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org This is a multi-part message in MIME format. --------------060902070705010703000507 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Tags: patch Recently copy-file was augmented to add support for copying ACLs on abandoned-POSIX-style hosts. Here's an additional patch to add support for copying ACLs on Solaris, HP-UX, etc. Basically, the idea is to use Gnulib's support for ACLs. I've tested this on GNU/Linux and Solaris, but not on Microsoft platforms, and am CC'ing this to Eli as a heads-up for that. This changes the 'configure' option from --without-acl to --disable-acl if one wishes to disable ACL support when configuring Emacs; this is the option spelling that other GNU packages use. --------------060902070705010703000507 Content-Type: text/plain; charset=UTF-8; name="acl.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="acl.txt" PT09IG1vZGlmaWVkIGZpbGUgJ0NoYW5nZUxvZycKLS0tIENoYW5nZUxvZwkyMDEzLTA0LTI3 IDE5OjMwOjMzICswMDAwCisrKyBDaGFuZ2VMb2cJMjAxMy0wNC0yNyAxOTo0MDo0OSArMDAw MApAQCAtMSw1ICsxLDE2IEBACiAyMDEzLTA0LTI3ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBj cy51Y2xhLmVkdT4KIAorCVVzZSBHbnVsaWIgQUNMIGltcGxlbWVudGF0aW9uLCBmb3IgYmVu ZWZpdCBvZiBTb2xhcmlzIGV0Yy4KKwkqIGNvbmZpZ3VyZS5hYzogUmVtb3ZlIC13aXRoLWFj bCBvcHRpb24sIHNpbmNlIEdudWxpYiBkb2VzIHRoYXQgZm9yCisJdXMgbm93LgorCShMSUJB Q0xfTElCUyk6IFJlbW92ZTsgbm8gbG9uZ2VyIG5lZWRlZC4KKwkqIGxpYi9NYWtlZmlsZS5h bSAoQ0xFQU5GSUxFUywgU1VGRklYRVMpOiBOZXcgKGVtcHR5KSBtYWNyb3MsCisJZm9yIHRo ZSBiZW5lZml0IG9mIHRoZSBuZXcgQUNMIGltcGxlbWVudGF0aW9uLgorCSogbGliL2FjbC1l cnJuby12YWxpZC5jLCBsaWIvYWNsLWludGVybmFsLmgsIGxpYi9hY2wuaDoKKwkqIGxpYi9h Y2xfZW50cmllcy5jLCBsaWIvZmlsZS1oYXMtYWNsLmMsIGxpYi9xY29weS1hY2wuYzoKKwkq IGxpYi9xc2V0LWFjbC5jLCBtNC9hY2wubTQ6IE5ldyBmaWxlcywgdGFrZW4gZnJvbSBnbnVs aWIuCisJKiBsaWIvZ251bGliLm1rLCBtNC9nbnVsaWItY29tcC5tNDogUmVnZW5lcmF0ZS4K KwogCU1lcmdlIGZyb20gZ251bGliLCBpbmNvcnBvcmF0aW5nOgogCTIwMTMtMDQtMjcgYWxp Z25vZiwgaW50cHJvcHMsIG1hbGxvY2E6IHBvcnQgYmV0dGVyIHRvIElCTSdzIEMgY29tcGls ZXIKIAoKPT09IG1vZGlmaWVkIGZpbGUgJ2FkbWluL0NoYW5nZUxvZycKLS0tIGFkbWluL0No YW5nZUxvZwkyMDEzLTA0LTAyIDAxOjE4OjQwICswMDAwCisrKyBhZG1pbi9DaGFuZ2VMb2cJ MjAxMy0wNC0xNyAwNToyMTozMyArMDAwMApAQCAtMSwzICsxLDggQEAKKzIwMTMtMDQtMTcg IFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJVXNlIEdudWxpYiBBQ0wg aW1wbGVtZW50YXRpb24sIGZvciBiZW5lZml0IG9mIFNvbGFyaXMgZXRjLgorCSogbWVyZ2Ut Z251bGliIChHTlVMSUJfTU9EVUxFUyk6IEFkZCBxYWNsLgorCiAyMDEzLTA0LTAxICBQYXVs IEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KIAogCVVzZSBVVEYtOCBmb3IgbW9zdCBm aWxlcyB3aXRoIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIChCdWcjMTM5MzYpLgoKPT09IG1vZGlm aWVkIGZpbGUgJ2FkbWluL21lcmdlLWdudWxpYicKLS0tIGFkbWluL21lcmdlLWdudWxpYgky MDEzLTAzLTEzIDE4OjQyOjIyICswMDAwCisrKyBhZG1pbi9tZXJnZS1nbnVsaWIJMjAxMy0w NC0xNyAwNToyMTozMyArMDAwMApAQCAtMzMsNyArMzMsNyBAQAogICBnZXRsb2FkYXZnIGdl dG9wdC1nbnUgZ2V0dGltZSBnZXR0aW1lb2ZkYXkKICAgaWdub3JlLXZhbHVlIGludHByb3Bz IGxhcmdlZmlsZSBsc3RhdAogICBtYW55d2FybmluZ3MgbWVtcmNociBta3RpbWUKLSAgcHNl bGVjdCBwdGhyZWFkX3NpZ21hc2sgcHV0ZW52IHJlYWRsaW5rIHJlYWRsaW5rYXQKKyAgcHNl bGVjdCBwdGhyZWFkX3NpZ21hc2sgcHV0ZW52IHFhY2wgcmVhZGxpbmsgcmVhZGxpbmthdAog ICBzaWcyc3RyIHNvY2tsZW4gc3RhdC10aW1lIHN0ZGFsaWduIHN0ZGFyZyBzdGRib29sIHN0 ZGlvCiAgIHN0cmZ0aW1lIHN0cnRvaW1heCBzdHJ0b3VtYXggc3ltbGluayBzeXNfc3RhdAog ICBzeXNfdGltZSB0aW1lIHRpbWVyLXRpbWUgdGltZXNwZWMtYWRkIHRpbWVzcGVjLXN1YiB1 bnNldGVudiB1dGltZW5zCgo9PT0gbW9kaWZpZWQgZmlsZSAnY29uZmlndXJlLmFjJwotLS0g Y29uZmlndXJlLmFjCTIwMTMtMDQtMjYgMTk6MzE6MDkgKzAwMDAKKysrIGNvbmZpZ3VyZS5h YwkyMDEzLTA0LTI3IDE5OjQwOjQ5ICswMDAwCkBAIC0xOTksNyArMTk5LDYgQEAKIE9QVElP Tl9ERUZBVUxUX09OKFtnY29uZl0sW2Rvbid0IGNvbXBpbGUgd2l0aCBHQ29uZiBzdXBwb3J0 XSkKIE9QVElPTl9ERUZBVUxUX09OKFtnc2V0dGluZ3NdLFtkb24ndCBjb21waWxlIHdpdGgg R1NldHRpbmdzIHN1cHBvcnRdKQogT1BUSU9OX0RFRkFVTFRfT04oW3NlbGludXhdLFtkb24n dCBjb21waWxlIHdpdGggU0VMaW51eCBzdXBwb3J0XSkKLU9QVElPTl9ERUZBVUxUX09OKFth Y2xdLFtkb24ndCBjb21waWxlIHdpdGggQUNMIHN1cHBvcnRdKQogT1BUSU9OX0RFRkFVTFRf T04oW2dudXRsc10sW2Rvbid0IHVzZSAtbGdudXRscyBmb3IgU1NML1RMUyBzdXBwb3J0XSkK IE9QVElPTl9ERUZBVUxUX09OKFtpbm90aWZ5XSxbZG9uJ3QgY29tcGlsZSB3aXRoIGlub3Rp ZnkgKGZpbGUtd2F0Y2gpIHN1cHBvcnRdKQogCkBAIC0yMTg1LDIzICsyMTg0LDYgQEAKICAg QUNfREVGSU5FKEhBVkVfSU5PVElGWSwgMSwgW0RlZmluZSB0byAxIHRvIHVzZSBpbm90aWZ5 Ll0pCiBmaQogCi1kbmwgUE9TSVggQUNMIHN1cHBvcnQ6IHByb3ZpZGVkIGJ5IGxpYmFjbCBv biBHTlUvTGludXgsIGJ5IGxpYmMgb24gRnJlZUJTRC4KLUhBVkVfUE9TSVhfQUNMPW5vCi1M SUJBQ0xfTElCUz0KLWlmIHRlc3QgIiR7d2l0aF9hY2x9IiA9ICJ5ZXMiOyB0aGVuCi0gIEFD X0NIRUNLX0xJQihbYWNsXSwgW2FjbF9zZXRfZmlsZV0sIEhBVkVfUE9TSVhfQUNMPXllcywg SEFWRV9QT1NJWF9BQ0w9bm8pCi0gIGlmIHRlc3QgIiRIQVZFX1BPU0lYX0FDTCIgPSB5ZXM7 IHRoZW4KLSAgICBBQ19ERUZJTkUoSEFWRV9QT1NJWF9BQ0wsIDEsIFtEZWZpbmUgdG8gMSBp ZiB1c2luZyBQT1NJWCBBQ0wgc3VwcG9ydC5dKQotICAgIExJQkFDTF9MSUJTPS1sYWNsCi0g IGVsc2UKLSAgICBBQ19DSEVDS19GVU5DKGFjbF9zZXRfZmlsZSwgSEFWRV9QT1NJWF9BQ0w9 eWVzLCBIQVZFX1BPU0lYX0FDTD1ubykKLSAgICBpZiB0ZXN0ICIkSEFWRV9QT1NJWF9BQ0wi ID0geWVzOyB0aGVuCi0gICAgICBBQ19ERUZJTkUoSEFWRV9QT1NJWF9BQ0wsIDEsIFtEZWZp bmUgdG8gMSBpZiB1c2luZyBQT1NJWCBBQ0wgc3VwcG9ydC5dKQotICAgIGZpCi0gZmkKLWZp Ci1BQ19TVUJTVChMSUJBQ0xfTElCUykKLQogZG5sIERvIG5vdCBwdXQgd2hpdGVzcGFjZSBi ZWZvcmUgdGhlICNpbmNsdWRlIHN0YXRlbWVudHMgYmVsb3cuCiBkbmwgT2xkZXIgY29tcGls ZXJzIChlZyBzdW5vczQgY2MpIGNob2tlIG9uIGl0LgogSEFWRV9YQVczRD1ubwoKPT09IG1v ZGlmaWVkIGZpbGUgJ2V0Yy9DaGFuZ2VMb2cnCi0tLSBldGMvQ2hhbmdlTG9nCTIwMTMtMDQt MjQgMTY6NTA6MTQgKzAwMDAKKysrIGV0Yy9DaGFuZ2VMb2cJMjAxMy0wNC0yNyAxOTo0MDo0 OSArMDAwMApAQCAtMSwzICsxLDkgQEAKKzIwMTMtMDQtMjcgIFBhdWwgRWdnZXJ0ICA8ZWdn ZXJ0QGNzLnVjbGEuZWR1PgorCisJVXNlIEdudWxpYiBBQ0wgaW1wbGVtZW50YXRpb24sIGZv ciBiZW5lZml0IG9mIFNvbGFyaXMgZXRjLgorCSogTkVXUzogRW1hY3MgaXMgbm8gbG9uZ2Vy IGxpbWl0ZWQgdG8gUE9TSVggQUNMcy4gIC0tZGlzYWJsZS1hY2wsCisJbm90IC0td2l0aG91 dC1hY2wsIHNpbmNlIHdlJ3JlIG5vdyB1c2luZyBHbnVsaWIncyBpbXBsZW1lbnRhdGlvbi4K KwogMjAxMy0wNC0yNCAgVGFzc2lsbyBIb3JuICA8dHNkaEBnbnUub3JnPgogCiAJKiB0aGVt ZXMvdHNkaC1kYXJrLXRoZW1lLmVsICh0c2RoLWRhcmspOiBBZGQgaWRvIGZhY2VzIGFuZCBy ZW1vdmUKCj09PSBtb2RpZmllZCBmaWxlICdldGMvTkVXUycKLS0tIGV0Yy9ORVdTCTIwMTMt MDQtMjcgMjA6NTU6MDAgKzAwMDAKKysrIGV0Yy9ORVdTCTIwMTMtMDQtMjggMDA6MDA6MTkg KzAwMDAKQEAgLTIzLDEwICsyMywxMCBAQAogDAogKiBJbnN0YWxsYXRpb24gQ2hhbmdlcyBp biBFbWFjcyAyNC40CiAKLSoqIEVtYWNzIGNhbiBiZSBjb21waWxlZCB3aXRoIFBPU0lYIEFD TCBzdXBwb3J0LgorKiogRW1hY3MgY2FuIGJlIGNvbXBpbGVkIHdpdGggQUNMIHN1cHBvcnQu CiBUaGlzIGhhcHBlbnMgYnkgZGVmYXVsdCBpZiBhIHN1aXRhYmxlIHN1cHBvcnQgbGlicmFy eSBpcyBmb3VuZCBhdAogYnVpbGQgdGltZSwgbGlrZSBsaWJhY2wgb24gR05VL0xpbnV4LiAg VG8gcHJldmVudCB0aGlzLCB1c2UgdGhlCi1jb25maWd1cmUgb3B0aW9uIGAtLXdpdGhvdXQt YWNsJy4KK2NvbmZpZ3VyZSBvcHRpb24gYC0tZGlzYWJsZS1hY2wnLgogCiAqKiBUaGUgY29u ZmlndXJlIG9wdGlvbiAtLXdpdGgtY3J0LWRpciBoYXMgYmVlbiByZW1vdmVkLgogSXQgaXMg bm8gbG9uZ2VyIG5lZWRlZCwgYXMgdGhlIGNydCoubyBmaWxlcyBhcmUgbm8gbG9uZ2VyIGxp bmtlZCBzcGVjaWFsbHkuCgo9PT0gbW9kaWZpZWQgZmlsZSAnbGliL01ha2VmaWxlLmFtJwot LS0gbGliL01ha2VmaWxlLmFtCTIwMTMtMDQtMDcgMDY6MjE6NDAgKzAwMDAKKysrIGxpYi9N YWtlZmlsZS5hbQkyMDEzLTA0LTE3IDA1OjIxOjMzICswMDAwCkBAIC0xLDggKzEsMTAgQEAK IEJVSUxUX1NPVVJDRVMgPQorQ0xFQU5GSUxFUyA9CiBFWFRSQV9ESVNUID0KIE1PU1RMWUNM RUFORElSUyA9CiBNT1NUTFlDTEVBTkZJTEVTID0KIG5vaW5zdF9MSUJSQVJJRVMgPQorU1VG RklYRVMgPQogCiBBTV9DRkxBR1MgPSAkKFBST0ZJTElOR19DRkxBR1MpICQoR05VTElCX1dB Uk5fQ0ZMQUdTKSAkKFdFUlJPUl9DRkxBR1MpCiBERUZBVUxUX0lOQ0xVREVTID0gLUkuIC1J JCh0b3Bfc3JjZGlyKS9saWIgLUkuLi9zcmMgLUkkKHRvcF9zcmNkaXIpL3NyYwoKPT09IGFk ZGVkIGZpbGUgJ2xpYi9hY2wtZXJybm8tdmFsaWQuYycKLS0tIGxpYi9hY2wtZXJybm8tdmFs aWQuYwkxOTcwLTAxLTAxIDAwOjAwOjAwICswMDAwCisrKyBsaWIvYWNsLWVycm5vLXZhbGlk LmMJMjAxMy0wNC0xNyAwNToyMTozMyArMDAwMApAQCAtMCwwICsxLDQ4IEBACisvKiBUZXN0 IHdoZXRoZXIgQUNMcyBhcmUgd2VsbCBzdXBwb3J0ZWQgb24gdGhpcyBzeXN0ZW0uCisKKyAg IENvcHlyaWdodCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAo YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlz IHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4u CisKKyAgIFdyaXR0ZW4gYnkgUGF1bCBFZ2dlcnQuICAqLworCisjaW5jbHVkZSA8Y29uZmln Lmg+CisKKyNpbmNsdWRlIDxhY2wuaD4KKworI2luY2x1ZGUgPGVycm5vLmg+CisKKy8qIFJl dHVybiB0cnVlIGlmIGVycm5vIHZhbHVlIEVSUk5VTSBpbmRpY2F0ZXMgdGhhdCBBQ0xzIGFy ZSB3ZWxsCisgICBzdXBwb3J0ZWQgb24gdGhpcyBzeXN0ZW0uICBFUlJOVU0gc2hvdWxkIGJl IGFuIGVycm5vIHZhbHVlIG9idGFpbmVkCisgICBhZnRlciBhbiBBQ0wtcmVsYXRlZCBzeXN0 ZW0gY2FsbCBmYWlscy4gICovCitib29sCithY2xfZXJybm9fdmFsaWQgKGludCBlcnJudW0p Cit7CisgIC8qIFJlY29nbml6ZSBzb21lIGNvbW1vbiBlcnJvcnMgc3VjaCBhcyBmcm9tIGFu IE5GUyBtb3VudCB0aGF0IGRvZXMKKyAgICAgbm90IHN1cHBvcnQgQUNMcywgZXZlbiB3aGVu IGxvY2FsIGRyaXZlcyBkby4gICovCisgIHN3aXRjaCAoZXJybnVtKQorICAgIHsKKyAgICBj YXNlIEVCVVNZOiByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBFSU5WQUw6IHJldHVybiBmYWxz ZTsKKyNpZiBkZWZpbmVkIF9fQVBQTEVfXyAmJiBkZWZpbmVkIF9fTUFDSF9fCisgICAgY2Fz ZSBFTk9FTlQ6IHJldHVybiBmYWxzZTsKKyNlbmRpZgorICAgIGNhc2UgRU5PU1lTOiByZXR1 cm4gZmFsc2U7CisjaWYgZGVmaW5lZCBFTk9UU1VQICYmIEVOT1RTVVAgIT0gRU9QTk9UU1VQ UAorICAgIGNhc2UgRU5PVFNVUDogcmV0dXJuIGZhbHNlOworI2VuZGlmCisgICAgY2FzZSBF T1BOT1RTVVBQOiByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDogcmV0dXJuIHRydWU7Cisg ICAgfQorfQoKPT09IGFkZGVkIGZpbGUgJ2xpYi9hY2wtaW50ZXJuYWwuaCcKLS0tIGxpYi9h Y2wtaW50ZXJuYWwuaAkxOTcwLTAxLTAxIDAwOjAwOjAwICswMDAwCisrKyBsaWIvYWNsLWlu dGVybmFsLmgJMjAxMy0wNC0xNyAwNToyMTozMyArMDAwMApAQCAtMCwwICsxLDI1MCBAQAor LyogSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgYWNjZXNzIGNvbnRyb2wgbGlzdHMuCisK KyAgIENvcHlyaWdodCAoQykgMjAwMi0yMDAzLCAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBv ZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8v d3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworICAgV3JpdHRlbiBieSBQYXVsIEVnZ2VydCwg QW5kcmVhcyBHcsO8bmJhY2hlciwgYW5kIEJydW5vIEhhaWJsZS4gICovCisKKyNpbmNsdWRl ICJhY2wuaCIKKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4K KworLyogQWxsIHN5c3RlbXMgZGVmaW5lIHRoZSBBQ0wgcmVsYXRlZCBBUEkgaW4gPHN5cy9h Y2wuaD4uICAqLworI2lmIEhBVkVfU1lTX0FDTF9ICisjIGluY2x1ZGUgPHN5cy9hY2wuaD4K KyNlbmRpZgorI2lmIGRlZmluZWQgSEFWRV9GQUNMICYmICEgZGVmaW5lZCBHRVRBQ0xDTlQg JiYgZGVmaW5lZCBBQ0xfQ05UCisjIGRlZmluZSBHRVRBQ0xDTlQgQUNMX0NOVAorI2VuZGlm CisKKy8qIE9uIExpbnV4LCBhZGRpdGlvbmFsIEFDTCByZWxhdGVkIEFQSSBpcyBhdmFpbGFi bGUgaW4gPGFjbC9saWJhY2wuaD4uICAqLworI2lmZGVmIEhBVkVfQUNMX0xJQkFDTF9ICisj IGluY2x1ZGUgPGFjbC9saWJhY2wuaD4KKyNlbmRpZgorCisvKiBPbiBIUC1VWCA+PSAxMS4x MSwgYWRkaXRpb25hbCBBQ0wgQVBJIGlzIGF2YWlsYWJsZSBpbiA8YWNsdi5oPi4gICovCisj aWYgSEFWRV9BQ0xWX0gKKyMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjIGluY2x1ZGUgPGFj bHYuaD4KKy8qIEhQLVVYIDExLjExIGxhY2tzIHRoZXNlIGRlY2xhcmF0aW9ucy4gICovCitl eHRlcm4gaW50IGFjbCAoY2hhciAqLCBpbnQsIGludCwgc3RydWN0IGFjbCAqKTsKK2V4dGVy biBpbnQgYWNsc29ydCAoaW50LCBpbnQsIHN0cnVjdCBhY2wgKik7CisjZW5kaWYKKworI2lu Y2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpZm5kZWYgTUlOCisj IGRlZmluZSBNSU4oYSxiKSAoKGEpIDwgKGIpID8gKGEpIDogKGIpKQorI2VuZGlmCisKKyNp Zm5kZWYgU0laRV9NQVgKKyMgZGVmaW5lIFNJWkVfTUFYICgoc2l6ZV90KSAtMSkKKyNlbmRp ZgorCisjaWZuZGVmIEhBVkVfRkNITU9ECisjIGRlZmluZSBIQVZFX0ZDSE1PRCBmYWxzZQor IyBkZWZpbmUgZmNobW9kKGZkLCBtb2RlKSAoLTEpCisjZW5kaWYKKworX0dMX0lOTElORV9I RUFERVJfQkVHSU4KKyNpZm5kZWYgQUNMX0lOVEVSTkFMX0lOTElORQorIyBkZWZpbmUgQUNM X0lOVEVSTkFMX0lOTElORSBfR0xfSU5MSU5FCisjZW5kaWYKKworI2lmIFVTRV9BQ0wKKwor IyBpZiBIQVZFX0FDTF9HRVRfRklMRQorLyogUE9TSVggMTAwMy4xZSAoZHJhZnQgMTcgLS0g YWJhbmRvbmVkKSBzcGVjaWZpYyB2ZXJzaW9uLiAgKi8KKy8qIExpbnV4LCBGcmVlQlNELCBN YWMgT1MgWCwgSVJJWCwgVHJ1NjQgKi8KKworIyAgaWZuZGVmIE1JTl9BQ0xfRU5UUklFUwor IyAgIGRlZmluZSBNSU5fQUNMX0VOVFJJRVMgNAorIyAgZW5kaWYKKworLyogUE9TSVggMTAw My4xZSAoZHJhZnQgMTcpICovCisjICBpZmRlZiBIQVZFX0FDTF9HRVRfRkQKKy8qIE1vc3Qg cGxhdGZvcm1zIGhhdmUgYSAxLWFyZ3VtZW50IGFjbF9nZXRfZmQsIG9ubHkgT1NGLzEgaGFz IGEgMi1hcmd1bWVudAorICAgbWFjcm8oISkuICAqLworIyAgIGlmIEhBVkVfQUNMX0ZSRUVf VEVYVCAvKiBPU0YvMSAqLworQUNMX0lOVEVSTkFMX0lOTElORSBhY2xfdAorcnBsX2FjbF9n ZXRfZmQgKGludCBmZCkKK3sKKyAgcmV0dXJuIGFjbF9nZXRfZmQgKGZkLCBBQ0xfVFlQRV9B Q0NFU1MpOworfQorIyAgICB1bmRlZiBhY2xfZ2V0X2ZkCisjICAgIGRlZmluZSBhY2xfZ2V0 X2ZkIHJwbF9hY2xfZ2V0X2ZkCisjICAgZW5kaWYKKyMgIGVsc2UKKyMgICBkZWZpbmUgSEFW RV9BQ0xfR0VUX0ZEIGZhbHNlCisjICAgdW5kZWYgYWNsX2dldF9mZAorIyAgIGRlZmluZSBh Y2xfZ2V0X2ZkKGZkKSAoTlVMTCkKKyMgIGVuZGlmCisKKy8qIFBPU0lYIDEwMDMuMWUgKGRy YWZ0IDE3KSAqLworIyAgaWZkZWYgSEFWRV9BQ0xfU0VUX0ZECisvKiBNb3N0IHBsYXRmb3Jt cyBoYXZlIGEgMi1hcmd1bWVudCBhY2xfc2V0X2ZkLCBvbmx5IE9TRi8xIGhhcyBhIDMtYXJn dW1lbnQKKyAgIG1hY3JvKCEpLiAgKi8KKyMgICBpZiBIQVZFX0FDTF9GUkVFX1RFWFQgLyog T1NGLzEgKi8KK0FDTF9JTlRFUk5BTF9JTkxJTkUgaW50CitycGxfYWNsX3NldF9mZCAoaW50 IGZkLCBhY2xfdCBhY2wpCit7CisgIHJldHVybiBhY2xfc2V0X2ZkIChmZCwgQUNMX1RZUEVf QUNDRVNTLCBhY2wpOworfQorIyAgICB1bmRlZiBhY2xfc2V0X2ZkCisjICAgIGRlZmluZSBh Y2xfc2V0X2ZkIHJwbF9hY2xfc2V0X2ZkCisjICAgZW5kaWYKKyMgIGVsc2UKKyMgICBkZWZp bmUgSEFWRV9BQ0xfU0VUX0ZEIGZhbHNlCisjICAgdW5kZWYgYWNsX3NldF9mZAorIyAgIGRl ZmluZSBhY2xfc2V0X2ZkKGZkLCBhY2wpICgtMSkKKyMgIGVuZGlmCisKKy8qIFBPU0lYIDEw MDMuMWUgKGRyYWZ0IDEzKSAqLworIyAgaWYgISBIQVZFX0FDTF9GUkVFX1RFWFQKKyMgICBk ZWZpbmUgYWNsX2ZyZWVfdGV4dChidWYpIGFjbF9mcmVlIChidWYpCisjICBlbmRpZgorCisv KiBMaW51eC1zcGVjaWZpYyAqLworIyAgaWZuZGVmIEhBVkVfQUNMX0VYVEVOREVEX0ZJTEUK KyMgICBkZWZpbmUgSEFWRV9BQ0xfRVhURU5ERURfRklMRSBmYWxzZQorIyAgIGRlZmluZSBh Y2xfZXh0ZW5kZWRfZmlsZShuYW1lKSAoLTEpCisjICBlbmRpZgorCisvKiBMaW51eC1zcGVj aWZpYyAqLworIyAgaWZuZGVmIEhBVkVfQUNMX0ZST01fTU9ERQorIyAgIGRlZmluZSBIQVZF X0FDTF9GUk9NX01PREUgZmFsc2UKKyMgICBkZWZpbmUgYWNsX2Zyb21fbW9kZShtb2RlKSAo TlVMTCkKKyMgIGVuZGlmCisKKy8qIFNldCB0byAxIGlmIGEgZmlsZSdzIG1vZGUgaXMgaW1w bGljaXQgYnkgdGhlIEFDTC4KKyAgIFNldCB0byAwIGlmIGEgZmlsZSdzIG1vZGUgaXMgc3Rv cmVkIGluZGVwZW5kZW50bHkgZnJvbSB0aGUgQUNMLiAgKi8KKyMgIGlmIChIQVZFX0FDTF9D T1BZX0VYVF9OQVRJVkUgJiYgSEFWRV9BQ0xfQ1JFQVRFX0VOVFJZX05QKSB8fCBkZWZpbmVk IF9fc2dpIC8qIE1hYyBPUyBYLCBJUklYICovCisjICAgZGVmaW5lIE1PREVfSU5TSURFX0FD TCAwCisjICBlbHNlCisjICAgZGVmaW5lIE1PREVfSU5TSURFX0FDTCAxCisjICBlbmRpZgor CisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIEFDTC4KKyAgIFJldHVybiAt MSBhbmQgc2V0IGVycm5vIHVwb24gZmFpbHVyZSB0byBkZXRlcm1pbmUgaXQuICAqLworLyog RGVmaW5lIGEgcmVwbGFjZW1lbnQgZm9yIGFjbF9lbnRyaWVzIGlmIG5lZWRlZC4gKE9ubHkg TGludXggaGFzIGl0LikgICovCisjICBpZiAhSEFWRV9BQ0xfRU5UUklFUworIyAgIGRlZmlu ZSBhY2xfZW50cmllcyBycGxfYWNsX2VudHJpZXMKK2V4dGVybiBpbnQgYWNsX2VudHJpZXMg KGFjbF90KTsKKyMgIGVuZGlmCisKKyMgIGlmIEhBVkVfQUNMX1RZUEVfRVhURU5ERUQgLyog TWFjIE9TIFggKi8KKy8qIEFDTCBpcyBhbiBBQ0wsIGZyb20gYSBmaWxlLCBzdG9yZWQgYXMg dHlwZSBBQ0xfVFlQRV9FWFRFTkRFRC4KKyAgIFJldHVybiAxIGlmIHRoZSBnaXZlbiBBQ0wg aXMgbm9uLXRyaXZpYWwuCisgICBSZXR1cm4gMCBpZiBpdCBpcyB0cml2aWFsLiAgKi8KK2V4 dGVybiBpbnQgYWNsX2V4dGVuZGVkX25vbnRyaXZpYWwgKGFjbF90KTsKKyMgIGVsc2UKKy8q IEFDTCBpcyBhbiBBQ0wsIGZyb20gYSBmaWxlLCBzdG9yZWQgYXMgdHlwZSBBQ0xfVFlQRV9B Q0NFU1MuCisgICBSZXR1cm4gMSBpZiB0aGUgZ2l2ZW4gQUNMIGlzIG5vbi10cml2aWFsLgor ICAgUmV0dXJuIDAgaWYgaXQgaXMgdHJpdmlhbCwgaS5lLiBlcXVpdmFsZW50IHRvIGEgc2lt cGxlIHN0YXQoKSBtb2RlLgorICAgUmV0dXJuIC0xIGFuZCBzZXQgZXJybm8gdXBvbiBmYWls dXJlIHRvIGRldGVybWluZSBpdC4gICovCitleHRlcm4gaW50IGFjbF9hY2Nlc3Nfbm9udHJp dmlhbCAoYWNsX3QpOworIyAgZW5kaWYKKworIyBlbGlmIEhBVkVfRkFDTCAmJiBkZWZpbmVk IEdFVEFDTCAvKiBTb2xhcmlzLCBDeWd3aW4sIG5vdCBIUC1VWCAqLworCisvKiBTZXQgdG8g MSBpZiBhIGZpbGUncyBtb2RlIGlzIGltcGxpY2l0IGJ5IHRoZSBBQ0wuCisgICBTZXQgdG8g MCBpZiBhIGZpbGUncyBtb2RlIGlzIHN0b3JlZCBpbmRlcGVuZGVudGx5IGZyb20gdGhlIEFD TC4gICovCisjICBpZiBkZWZpbmVkIF9fQ1lHV0lOX18gLyogQ3lnd2luICovCisjICAgZGVm aW5lIE1PREVfSU5TSURFX0FDTCAwCisjICBlbHNlIC8qIFNvbGFyaXMgKi8KKyMgICBkZWZp bmUgTU9ERV9JTlNJREVfQUNMIDEKKyMgIGVuZGlmCisKKy8qIFJldHVybiAxIGlmIHRoZSBn aXZlbiBBQ0wgaXMgbm9uLXRyaXZpYWwuCisgICBSZXR1cm4gMCBpZiBpdCBpcyB0cml2aWFs LCBpLmUuIGVxdWl2YWxlbnQgdG8gYSBzaW1wbGUgc3RhdCgpIG1vZGUuICAqLworZXh0ZXJu IGludCBhY2xfbm9udHJpdmlhbCAoaW50IGNvdW50LCBhY2xlbnRfdCAqZW50cmllcyk7CisK KyMgIGlmZGVmIEFDRV9HRVRBQ0wgLyogU29sYXJpcyAxMCAqLworCisvKiBUZXN0IGFuIEFD TCByZXRyaWV2ZWQgd2l0aCBBQ0VfR0VUQUNMLgorICAgUmV0dXJuIDEgaWYgdGhlIGdpdmVu IEFDTCwgY29uc2lzdGluZyBvZiBDT1VOVCBlbnRyaWVzLCBpcyBub24tdHJpdmlhbC4KKyAg IFJldHVybiAwIGlmIGl0IGlzIHRyaXZpYWwsIGkuZS4gZXF1aXZhbGVudCB0byBhIHNpbXBs ZSBzdGF0KCkgbW9kZS4gICovCitleHRlcm4gaW50IGFjbF9hY2Vfbm9udHJpdmlhbCAoaW50 IGNvdW50LCBhY2VfdCAqZW50cmllcyk7CisKKy8qIERlZmluaXRpb25zIGZvciB3aGVuIHRo ZSBidWlsdCBleGVjdXRhYmxlIGlzIGV4ZWN1dGVkIG9uIFNvbGFyaXMgMTAKKyAgIChuZXdl ciB2ZXJzaW9uKSBvciBTb2xhcmlzIDExLiAgKi8KKy8qIEZvciBhX3R5cGUuICAqLworIyAg IGRlZmluZSBPTERfQUxMT1cgMAorIyAgIGRlZmluZSBPTERfREVOWSAgMQorIyAgIGRlZmlu ZSBORVdfQUNFX0FDQ0VTU19BTExPV0VEX0FDRV9UWVBFIDAgLyogcmVwbGFjZXMgQUxMT1cg Ki8KKyMgICBkZWZpbmUgTkVXX0FDRV9BQ0NFU1NfREVOSUVEX0FDRV9UWVBFICAxIC8qIHJl cGxhY2VzIERFTlkgKi8KKy8qIEZvciBhX2ZsYWdzLiAgKi8KKyMgICBkZWZpbmUgT0xEX0FD RV9PV05FUiAgICAgICAgICAgIDB4MDEwMAorIyAgIGRlZmluZSBPTERfQUNFX0dST1VQICAg ICAgICAgICAgMHgwMjAwCisjICAgZGVmaW5lIE9MRF9BQ0VfT1RIRVIgICAgICAgICAgICAw eDA0MDAKKyMgICBkZWZpbmUgTkVXX0FDRV9PV05FUiAgICAgICAgICAgIDB4MTAwMAorIyAg IGRlZmluZSBORVdfQUNFX0dST1VQICAgICAgICAgICAgMHgyMDAwCisjICAgZGVmaW5lIE5F V19BQ0VfSURFTlRJRklFUl9HUk9VUCAweDAwNDAKKyMgICBkZWZpbmUgTkVXX0FDRV9FVkVS WU9ORSAgICAgICAgIDB4NDAwMAorLyogRm9yIGFfYWNjZXNzX21hc2suICAqLworIyAgIGRl ZmluZSBORVdfQUNFX1JFQURfREFUQSAgICAgICAgIDB4MDAxIC8qIGNvcnJlc3BvbmRzIHRv ICdyJyAqLworIyAgIGRlZmluZSBORVdfQUNFX1dSSVRFX0RBVEEgICAgICAgIDB4MDAyIC8q IGNvcnJlc3BvbmRzIHRvICd3JyAqLworIyAgIGRlZmluZSBORVdfQUNFX0FQUEVORF9EQVRB ICAgICAgIDB4MDA0CisjICAgZGVmaW5lIE5FV19BQ0VfUkVBRF9OQU1FRF9BVFRSUyAgMHgw MDgKKyMgICBkZWZpbmUgTkVXX0FDRV9XUklURV9OQU1FRF9BVFRSUyAweDAxMAorIyAgIGRl ZmluZSBORVdfQUNFX0VYRUNVVEUgICAgICAgICAgIDB4MDIwCisjICAgZGVmaW5lIE5FV19B Q0VfREVMRVRFX0NISUxEICAgICAgMHgwNDAKKyMgICBkZWZpbmUgTkVXX0FDRV9SRUFEX0FU VFJJQlVURVMgICAweDA4MAorIyAgIGRlZmluZSBORVdfQUNFX1dSSVRFX0FUVFJJQlVURVMg IDB4MTAwCisjICAgZGVmaW5lIE5FV19BQ0VfREVMRVRFICAgICAgICAgIDB4MTAwMDAKKyMg ICBkZWZpbmUgTkVXX0FDRV9SRUFEX0FDTCAgICAgICAgMHgyMDAwMAorIyAgIGRlZmluZSBO RVdfQUNFX1dSSVRFX0FDTCAgICAgICAweDQwMDAwCisjICAgZGVmaW5lIE5FV19BQ0VfV1JJ VEVfT1dORVIgICAgIDB4ODAwMDAKKyMgICBkZWZpbmUgTkVXX0FDRV9TWU5DSFJPTklaRSAg ICAweDEwMDAwMAorCisjICBlbmRpZgorCisjIGVsaWYgSEFWRV9HRVRBQ0wgLyogSFAtVVgg Ki8KKworLyogUmV0dXJuIDEgaWYgdGhlIGdpdmVuIEFDTCBpcyBub24tdHJpdmlhbC4KKyAg IFJldHVybiAwIGlmIGl0IGlzIHRyaXZpYWwsIGkuZS4gZXF1aXZhbGVudCB0byBhIHNpbXBs ZSBzdGF0KCkgbW9kZS4gICovCitleHRlcm4gaW50IGFjbF9ub250cml2aWFsIChpbnQgY291 bnQsIHN0cnVjdCBhY2xfZW50cnkgKmVudHJpZXMsIHN0cnVjdCBzdGF0ICpzYik7CisKKyMg IGlmIEhBVkVfQUNMVl9IIC8qIEhQLVVYID49IDExLjExICovCisKKy8qIFJldHVybiAxIGlm IHRoZSBnaXZlbiBBQ0wgaXMgbm9uLXRyaXZpYWwuCisgICBSZXR1cm4gMCBpZiBpdCBpcyB0 cml2aWFsLCBpLmUuIGVxdWl2YWxlbnQgdG8gYSBzaW1wbGUgc3RhdCgpIG1vZGUuICAqLwor ZXh0ZXJuIGludCBhY2x2X25vbnRyaXZpYWwgKGludCBjb3VudCwgc3RydWN0IGFjbCAqZW50 cmllcyk7CisKKyMgIGVuZGlmCisKKyMgZWxpZiBIQVZFX0FDTFhfR0VUICYmIDAgLyogQUlY ICovCisKKy8qIFRPRE8gKi8KKworIyBlbGlmIEhBVkVfU1RBVEFDTCAvKiBvbGRlciBBSVgg Ki8KKworLyogUmV0dXJuIDEgaWYgdGhlIGdpdmVuIEFDTCBpcyBub24tdHJpdmlhbC4KKyAg IFJldHVybiAwIGlmIGl0IGlzIHRyaXZpYWwsIGkuZS4gZXF1aXZhbGVudCB0byBhIHNpbXBs ZSBzdGF0KCkgbW9kZS4gICovCitleHRlcm4gaW50IGFjbF9ub250cml2aWFsIChzdHJ1Y3Qg YWNsICphKTsKKworIyBlbGlmIEhBVkVfQUNMU09SVCAvKiBOb25TdG9wIEtlcm5lbCAqLwor CisvKiBSZXR1cm4gMSBpZiB0aGUgZ2l2ZW4gQUNMIGlzIG5vbi10cml2aWFsLgorICAgUmV0 dXJuIDAgaWYgaXQgaXMgdHJpdmlhbCwgaS5lLiBlcXVpdmFsZW50IHRvIGEgc2ltcGxlIHN0 YXQoKSBtb2RlLiAgKi8KK2V4dGVybiBpbnQgYWNsX25vbnRyaXZpYWwgKGludCBjb3VudCwg c3RydWN0IGFjbCAqZW50cmllcyk7CisKKyMgZW5kaWYKKworI2VuZGlmCisKK19HTF9JTkxJ TkVfSEVBREVSX0VORAoKPT09IGFkZGVkIGZpbGUgJ2xpYi9hY2wuaCcKLS0tIGxpYi9hY2wu aAkxOTcwLTAxLTAxIDAwOjAwOjAwICswMDAwCisrKyBsaWIvYWNsLmgJMjAxMy0wNC0xNyAw NToyMTozMyArMDAwMApAQCAtMCwwICsxLDMwIEBACisvKiBhY2wuYyAtIGFjY2VzcyBjb250 cm9sIGxpc3RzCisKKyAgIENvcHlyaWdodCAoQykgMjAwMiwgMjAwOC0yMDEzIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz aW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisg ICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyAgIFdyaXR0ZW4gYnkgUGF1bCBF Z2dlcnQuICAqLworCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN5cy90eXBl cy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKK2Jvb2wgYWNsX2Vycm5vX3ZhbGlkIChp bnQpIF9HTF9BVFRSSUJVVEVfQ09OU1Q7CitpbnQgZmlsZV9oYXNfYWNsIChjaGFyIGNvbnN0 ICosIHN0cnVjdCBzdGF0IGNvbnN0ICopOworaW50IHFzZXRfYWNsIChjaGFyIGNvbnN0ICos IGludCwgbW9kZV90KTsKK2ludCBzZXRfYWNsIChjaGFyIGNvbnN0ICosIGludCwgbW9kZV90 KTsKK2ludCBxY29weV9hY2wgKGNoYXIgY29uc3QgKiwgaW50LCBjaGFyIGNvbnN0ICosIGlu dCwgbW9kZV90KTsKK2ludCBjb3B5X2FjbCAoY2hhciBjb25zdCAqLCBpbnQsIGNoYXIgY29u c3QgKiwgaW50LCBtb2RlX3QpOworaW50IGNobW9kX29yX2ZjaG1vZCAoY2hhciBjb25zdCAq LCBpbnQsIG1vZGVfdCk7Cgo9PT0gYWRkZWQgZmlsZSAnbGliL2FjbF9lbnRyaWVzLmMnCi0t LSBsaWIvYWNsX2VudHJpZXMuYwkxOTcwLTAxLTAxIDAwOjAwOjAwICswMDAwCisrKyBsaWIv YWNsX2VudHJpZXMuYwkyMDEzLTA0LTE3IDA1OjIxOjMzICswMDAwCkBAIC0wLDAgKzEsNzUg QEAKKy8qIFJldHVybiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gYW4gQUNMLgorCisgICBD b3B5cmlnaHQgKEMpIDIwMDItMjAwMywgMjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAg IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhl IExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor CisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor ICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uCisKKyAgIFdyaXR0ZW4gYnkgUGF1bCBFZ2dlcnQgYW5kIEFu ZHJlYXMgR3J1ZW5iYWNoZXIuICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNs dWRlICJhY2wtaW50ZXJuYWwuaCIKKworLyogVGhpcyBmaWxlIGFzc3VtZXMgUE9TSVgtZHJh ZnQgbGlrZSBBQ0xzCisgICAoTGludXgsIEZyZWVCU0QsIE1hYyBPUyBYLCBJUklYLCBUcnU2 NCkuICAqLworCisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIEFDTC4KKyAg IFJldHVybiAtMSBhbmQgc2V0IGVycm5vIHVwb24gZmFpbHVyZSB0byBkZXRlcm1pbmUgaXQu ICAqLworCitpbnQKK2FjbF9lbnRyaWVzIChhY2xfdCBhY2wpCit7CisgIGludCBjb3VudCA9 IDA7CisKKyAgaWYgKGFjbCAhPSBOVUxMKQorICAgIHsKKyNpZiBIQVZFX0FDTF9GSVJTVF9F TlRSWSAvKiBMaW51eCwgRnJlZUJTRCwgTWFjIE9TIFggKi8KKyMgaWYgSEFWRV9BQ0xfVFlQ RV9FWFRFTkRFRCAvKiBNYWMgT1MgWCAqLworICAgICAgLyogYWNsX2dldF9lbnRyeSByZXR1 cm5zIDAgd2hlbiBpdCBzdWNjZXNzZnVsbHkgZmV0Y2hlcyBhbiBlbnRyeSwKKyAgICAgICAg IGFuZCAtMS9FSU5WQUwgYXQgdGhlIGVuZC4gICovCisgICAgICBhY2xfZW50cnlfdCBhY2U7 CisgICAgICBpbnQgZ290X29uZTsKKworICAgICAgZm9yIChnb3Rfb25lID0gYWNsX2dldF9l bnRyeSAoYWNsLCBBQ0xfRklSU1RfRU5UUlksICZhY2UpOworICAgICAgICAgICBnb3Rfb25l ID49IDA7CisgICAgICAgICAgIGdvdF9vbmUgPSBhY2xfZ2V0X2VudHJ5IChhY2wsIEFDTF9O RVhUX0VOVFJZLCAmYWNlKSkKKyAgICAgICAgY291bnQrKzsKKyMgZWxzZSAvKiBMaW51eCwg RnJlZUJTRCAqLworICAgICAgLyogYWNsX2dldF9lbnRyeSByZXR1cm5zIDEgd2hlbiBpdCBz dWNjZXNzZnVsbHkgZmV0Y2hlcyBhbiBlbnRyeSwKKyAgICAgICAgIGFuZCAwIGF0IHRoZSBl bmQuICAqLworICAgICAgYWNsX2VudHJ5X3QgYWNlOworICAgICAgaW50IGdvdF9vbmU7CisK KyAgICAgIGZvciAoZ290X29uZSA9IGFjbF9nZXRfZW50cnkgKGFjbCwgQUNMX0ZJUlNUX0VO VFJZLCAmYWNlKTsKKyAgICAgICAgICAgZ290X29uZSA+IDA7CisgICAgICAgICAgIGdvdF9v bmUgPSBhY2xfZ2V0X2VudHJ5IChhY2wsIEFDTF9ORVhUX0VOVFJZLCAmYWNlKSkKKyAgICAg ICAgY291bnQrKzsKKyAgICAgIGlmIChnb3Rfb25lIDwgMCkKKyAgICAgICAgcmV0dXJuIC0x OworIyBlbmRpZgorI2Vsc2UgLyogSVJJWCwgVHJ1NjQgKi8KKyMgaWYgSEFWRV9BQ0xfVE9f U0hPUlRfVEVYVCAvKiBJUklYICovCisgICAgICAvKiBEb24ndCB1c2UgYWNsX2dldF9lbnRy eTogaXQgaXMgdW5kb2N1bWVudGVkLiAgKi8KKyAgICAgIGNvdW50ID0gYWNsLT5hY2xfY250 OworIyBlbmRpZgorIyBpZiBIQVZFX0FDTF9GUkVFX1RFWFQgLyogVHJ1NjQgKi8KKyAgICAg IC8qIERvbid0IHVzZSBhY2xfZ2V0X2VudHJ5OiBpdCB0YWtlcyBvbmx5IG9uZSBhcmd1bWVu dCBhbmQgZG9lcyBub3QKKyAgICAgICAgIHdvcmsuICAqLworICAgICAgY291bnQgPSBhY2wt PmFjbF9udW07CisjIGVuZGlmCisjZW5kaWYKKyAgICB9CisKKyAgcmV0dXJuIGNvdW50Owor fQoKPT09IGFkZGVkIGZpbGUgJ2xpYi9maWxlLWhhcy1hY2wuYycKLS0tIGxpYi9maWxlLWhh cy1hY2wuYwkxOTcwLTAxLTAxIDAwOjAwOjAwICswMDAwCisrKyBsaWIvZmlsZS1oYXMtYWNs LmMJMjAxMy0wNC0xOCAwMTozNTowOCArMDAwMApAQCAtMCwwICsxLDkxOCBAQAorLyogVGVz dCB3aGV0aGVyIGEgZmlsZSBoYXMgYSBub250cml2aWFsIGFjY2VzcyBjb250cm9sIGxpc3Qu CisKKyAgIENvcHlyaWdodCAoQykgMjAwMi0yMDAzLCAyMDA1LTIwMTMgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hl ZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g MyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRw Oi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworICAgV3JpdHRlbiBieSBQYXVsIEVnZ2Vy dCwgQW5kcmVhcyBHcsO8bmJhY2hlciwgYW5kIEJydW5vIEhhaWJsZS4gICovCisKKy8qIFdp dGhvdXQgdGhpcyBwcmFnbWEsIGdjYyA0LjcuMCAyMDEyMDEyNiBtYXkgc3VnZ2VzdCB0aGF0 IHRoZQorICAgZmlsZV9oYXNfYWNsIGZ1bmN0aW9uIG1pZ2h0IGJlIGNhbmRpZGF0ZSBmb3Ig YXR0cmlidXRlICdjb25zdCcgICovCisjaWYgKF9fR05VQ19fID09IDQgJiYgNiA8PSBfX0dO VUNfTUlOT1JfXykgfHwgNCA8IF9fR05VQ19fCisjIHByYWdtYSBHQ0MgZGlhZ25vc3RpYyBp Z25vcmVkICItV3N1Z2dlc3QtYXR0cmlidXRlPWNvbnN0IgorI2VuZGlmCisKKyNpbmNsdWRl IDxjb25maWcuaD4KKworI2luY2x1ZGUgImFjbC5oIgorCisjaW5jbHVkZSAiYWNsLWludGVy bmFsLmgiCisKKworI2lmIFVTRV9BQ0wgJiYgSEFWRV9BQ0xfR0VUX0ZJTEUKKworIyBpZiBI QVZFX0FDTF9UWVBFX0VYVEVOREVEIC8qIE1hYyBPUyBYICovCisKKy8qIEFDTCBpcyBhbiBB Q0wsIGZyb20gYSBmaWxlLCBzdG9yZWQgYXMgdHlwZSBBQ0xfVFlQRV9FWFRFTkRFRC4KKyAg IFJldHVybiAxIGlmIHRoZSBnaXZlbiBBQ0wgaXMgbm9uLXRyaXZpYWwuCisgICBSZXR1cm4g MCBpZiBpdCBpcyB0cml2aWFsLiAgKi8KK2ludAorYWNsX2V4dGVuZGVkX25vbnRyaXZpYWwg KGFjbF90IGFjbCkKK3sKKyAgLyogYWNsIGlzIG5vbi10cml2aWFsIGlmIGl0IGlzIG5vbi1l bXB0eS4gICovCisgIHJldHVybiAoYWNsX2VudHJpZXMgKGFjbCkgPiAwKTsKK30KKworIyBl bHNlIC8qIExpbnV4LCBGcmVlQlNELCBJUklYLCBUcnU2NCAqLworCisvKiBBQ0wgaXMgYW4g QUNMLCBmcm9tIGEgZmlsZSwgc3RvcmVkIGFzIHR5cGUgQUNMX1RZUEVfQUNDRVNTLgorICAg UmV0dXJuIDEgaWYgdGhlIGdpdmVuIEFDTCBpcyBub24tdHJpdmlhbC4KKyAgIFJldHVybiAw IGlmIGl0IGlzIHRyaXZpYWwsIGkuZS4gZXF1aXZhbGVudCB0byBhIHNpbXBsZSBzdGF0KCkg bW9kZS4KKyAgIFJldHVybiAtMSBhbmQgc2V0IGVycm5vIHVwb24gZmFpbHVyZSB0byBkZXRl cm1pbmUgaXQuICAqLworaW50CithY2xfYWNjZXNzX25vbnRyaXZpYWwgKGFjbF90IGFjbCkK K3sKKyAgLyogYWNsIGlzIG5vbi10cml2aWFsIGlmIGl0IGhhcyBzb21lIGVudHJpZXMgb3Ro ZXIgdGhhbiBmb3IgInVzZXI6OiIsCisgICAgICJncm91cDo6IiwgYW5kICJvdGhlcjo6Ii4g IE5vcm1hbGx5IHRoZXNlIHRocmVlIHNob3VsZCBiZSBwcmVzZW50CisgICAgIGF0IGxlYXN0 LCBhbGxvd2luZyB1cyB0byB3cml0ZQorICAgICAgICByZXR1cm4gKDMgPCBhY2xfZW50cmll cyAoYWNsKSk7CisgICAgIGJ1dCB0aGUgZm9sbG93aW5nIGNvZGUgaXMgbW9yZSByb2J1c3Qu ICAqLworIyAgaWYgSEFWRV9BQ0xfRklSU1RfRU5UUlkgLyogTGludXgsIEZyZWVCU0QgKi8K KworICBhY2xfZW50cnlfdCBhY2U7CisgIGludCBnb3Rfb25lOworCisgIGZvciAoZ290X29u ZSA9IGFjbF9nZXRfZW50cnkgKGFjbCwgQUNMX0ZJUlNUX0VOVFJZLCAmYWNlKTsKKyAgICAg ICBnb3Rfb25lID4gMDsKKyAgICAgICBnb3Rfb25lID0gYWNsX2dldF9lbnRyeSAoYWNsLCBB Q0xfTkVYVF9FTlRSWSwgJmFjZSkpCisgICAgeworICAgICAgYWNsX3RhZ190IHRhZzsKKyAg ICAgIGlmIChhY2xfZ2V0X3RhZ190eXBlIChhY2UsICZ0YWcpIDwgMCkKKyAgICAgICAgcmV0 dXJuIC0xOworICAgICAgaWYgKCEodGFnID09IEFDTF9VU0VSX09CSiB8fCB0YWcgPT0gQUNM X0dST1VQX09CSiB8fCB0YWcgPT0gQUNMX09USEVSKSkKKyAgICAgICAgcmV0dXJuIDE7Cisg ICAgfQorICByZXR1cm4gZ290X29uZTsKKworIyAgZWxzZSAvKiBJUklYLCBUcnU2NCAqLwor IyAgIGlmIEhBVkVfQUNMX1RPX1NIT1JUX1RFWFQgLyogSVJJWCAqLworICAvKiBEb24ndCB1 c2UgYWNsX2dldF9lbnRyeTogaXQgaXMgdW5kb2N1bWVudGVkLiAgKi8KKworICBpbnQgY291 bnQgPSBhY2wtPmFjbF9jbnQ7CisgIGludCBpOworCisgIGZvciAoaSA9IDA7IGkgPCBjb3Vu dDsgaSsrKQorICAgIHsKKyAgICAgIGFjbF9lbnRyeV90IGFjZSA9ICZhY2wtPmFjbF9lbnRy eVtpXTsKKyAgICAgIGFjbF90YWdfdCB0YWcgPSBhY2UtPmFlX3RhZzsKKworICAgICAgaWYg KCEodGFnID09IEFDTF9VU0VSX09CSiB8fCB0YWcgPT0gQUNMX0dST1VQX09CSgorICAgICAg ICAgICAgfHwgdGFnID09IEFDTF9PVEhFUl9PQkopKQorICAgICAgICByZXR1cm4gMTsKKyAg ICB9CisgIHJldHVybiAwOworCisjICAgZW5kaWYKKyMgICBpZiBIQVZFX0FDTF9GUkVFX1RF WFQgLyogVHJ1NjQgKi8KKyAgLyogRG9uJ3QgdXNlIGFjbF9nZXRfZW50cnk6IGl0IHRha2Vz IG9ubHkgb25lIGFyZ3VtZW50IGFuZCBkb2VzIG5vdCB3b3JrLiAgKi8KKworICBpbnQgY291 bnQgPSBhY2wtPmFjbF9udW07CisgIGFjbF9lbnRyeV90IGFjZTsKKworICBmb3IgKGFjZSA9 IGFjbC0+YWNsX2ZpcnN0OyBjb3VudCA+IDA7IGFjZSA9IGFjZS0+bmV4dCwgY291bnQtLSkK KyAgICB7CisgICAgICBhY2xfdGFnX3QgdGFnOworICAgICAgYWNsX3Blcm1fdCBwZXJtOwor CisgICAgICB0YWcgPSBhY2UtPmVudHJ5LT5hY2xfdHlwZTsKKyAgICAgIGlmICghKHRhZyA9 PSBBQ0xfVVNFUl9PQkogfHwgdGFnID09IEFDTF9HUk9VUF9PQkogfHwgdGFnID09IEFDTF9P VEhFUikpCisgICAgICAgIHJldHVybiAxOworCisgICAgICBwZXJtID0gYWNlLT5lbnRyeS0+ YWNsX3Blcm07CisgICAgICAvKiBPbiBUcnU2NCwgcGVybSBjYW4gYWxzbyBjb250YWluIG5v bi1zdGFuZGFyZCBiaXRzIHN1Y2ggYXMKKyAgICAgICAgIFBFUk1fSU5TRVJULCBQRVJNX0RF TEVURSwgUEVSTV9NT0RJRlksIFBFUk1fTE9PS1VQLCAuLi4gKi8KKyAgICAgIGlmICgocGVy bSAmIH4oQUNMX1JFQUQgfCBBQ0xfV1JJVEUgfCBBQ0xfRVhFQ1VURSkpICE9IDApCisgICAg ICAgIHJldHVybiAxOworICAgIH0KKyAgcmV0dXJuIDA7CisKKyMgICBlbmRpZgorIyAgZW5k aWYKK30KKworIyBlbmRpZgorCisKKyNlbGlmIFVTRV9BQ0wgJiYgSEFWRV9GQUNMICYmIGRl ZmluZWQgR0VUQUNMIC8qIFNvbGFyaXMsIEN5Z3dpbiwgbm90IEhQLVVYICovCisKKy8qIFRl c3QgYW4gQUNMIHJldHJpZXZlZCB3aXRoIEdFVEFDTC4KKyAgIFJldHVybiAxIGlmIHRoZSBn aXZlbiBBQ0wsIGNvbnNpc3Rpbmcgb2YgQ09VTlQgZW50cmllcywgaXMgbm9uLXRyaXZpYWwu CisgICBSZXR1cm4gMCBpZiBpdCBpcyB0cml2aWFsLCBpLmUuIGVxdWl2YWxlbnQgdG8gYSBz aW1wbGUgc3RhdCgpIG1vZGUuICAqLworaW50CithY2xfbm9udHJpdmlhbCAoaW50IGNvdW50 LCBhY2xlbnRfdCAqZW50cmllcykKK3sKKyAgaW50IGk7CisKKyAgZm9yIChpID0gMDsgaSA8 IGNvdW50OyBpKyspCisgICAgeworICAgICAgYWNsZW50X3QgKmFjZSA9ICZlbnRyaWVzW2ld OworCisgICAgICAvKiBOb3RlOiBJZiBhY2UtPmFfdHlwZSA9IFVTRVJfT0JKLCBhY2UtPmFf aWQgaXMgdGhlIHN0X3VpZCBmcm9tIHN0YXQoKS4KKyAgICAgICAgIElmIGFjZS0+YV90eXBl ID0gR1JPVVBfT0JKLCBhY2UtPmFfaWQgaXMgdGhlIHN0X2dpZCBmcm9tIHN0YXQoKS4KKyAg ICAgICAgIFdlIGRvbid0IG5lZWQgdG8gY2hlY2sgYWNlLT5hX2lkIGluIHRoZXNlIGNhc2Vz LiAgKi8KKyAgICAgIGlmICghKGFjZS0+YV90eXBlID09IFVTRVJfT0JKCisgICAgICAgICAg ICB8fCBhY2UtPmFfdHlwZSA9PSBHUk9VUF9PQkoKKyAgICAgICAgICAgIHx8IGFjZS0+YV90 eXBlID09IE9USEVSX09CSgorICAgICAgICAgICAgLyogTm90ZTogQ3lnd2luIGRvZXMgbm90 IHJldHVybiBhIENMQVNTX09CSiAoIm1hc2s6IikgZW50cnkKKyAgICAgICAgICAgICAgIHNv bWV0aW1lcy4gICovCisgICAgICAgICAgICB8fCBhY2UtPmFfdHlwZSA9PSBDTEFTU19PQkop KQorICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgIHJldHVybiAwOworfQorCisjIGlmZGVm IEFDRV9HRVRBQ0wKKworLyogQSBzaG9ydGN1dCBmb3IgYSBiaXRtYXNrLiAgKi8KKyMgIGRl ZmluZSBORVdfQUNFX1dSSVRFQV9EQVRBIChORVdfQUNFX1dSSVRFX0RBVEEgfCBORVdfQUNF X0FQUEVORF9EQVRBKQorCisvKiBUZXN0IGFuIEFDTCByZXRyaWV2ZWQgd2l0aCBBQ0VfR0VU QUNMLgorICAgUmV0dXJuIDEgaWYgdGhlIGdpdmVuIEFDTCwgY29uc2lzdGluZyBvZiBDT1VO VCBlbnRyaWVzLCBpcyBub24tdHJpdmlhbC4KKyAgIFJldHVybiAwIGlmIGl0IGlzIHRyaXZp YWwsIGkuZS4gZXF1aXZhbGVudCB0byBhIHNpbXBsZSBzdGF0KCkgbW9kZS4gICovCitpbnQK K2FjbF9hY2Vfbm9udHJpdmlhbCAoaW50IGNvdW50LCBhY2VfdCAqZW50cmllcykKK3sKKyAg aW50IGk7CisKKyAgLyogVGhlIGZsYWdzIGluIHRoZSBhY2VfdCBzdHJ1Y3R1cmUgY2hhbmdl ZCBpbiBhIGJpbmFyeSBpbmNvbXBhdGlibGUgd2F5CisgICAgIHdoZW4gQUNMX05PX1RSSVZJ QUwgZXRjLiB3ZXJlIGludHJvZHVjZWQgaW4gPHN5cy9hY2wuaD4gdmVyc2lvbiAxLjE1Lgor ICAgICBIb3cgdG8gZGlzdGluZ3Vpc2ggdGhlIHR3byBjb252ZW50aW9ucyBhdCBydW50aW1l PworICAgICBJbiB0aGUgb2xkIGNvbnZlbnRpb24sIHVzdWFsbHkgdGhyZWUgQUNFcyBoYXZl IGFfZmxhZ3MgPSBBQ0VfT1dORVIgLworICAgICBBQ0VfR1JPVVAgLyBBQ0VfT1RIRVIsIGlu IHRoZSByYW5nZSAweDAxMDAuLjB4MDQwMC4gIEluIHRoZSBuZXcKKyAgICAgY29udmVudGlv biwgdGhlc2UgdmFsdWVzIGFyZSBub3QgdXNlZC4gICovCisgIGludCBvbGRfY29udmVudGlv biA9IDA7CisKKyAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgaWYgKGVudHJp ZXNbaV0uYV9mbGFncyAmIChPTERfQUNFX09XTkVSIHwgT0xEX0FDRV9HUk9VUCB8IE9MRF9B Q0VfT1RIRVIpKQorICAgICAgeworICAgICAgICBvbGRfY29udmVudGlvbiA9IDE7CisgICAg ICAgIGJyZWFrOworICAgICAgfQorCisgIGlmIChvbGRfY29udmVudGlvbikKKyAgICAvKiBS dW5uaW5nIG9uIFNvbGFyaXMgMTAuICAqLworICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsg aSsrKQorICAgICAgeworICAgICAgICBhY2VfdCAqYWNlID0gJmVudHJpZXNbaV07CisKKyAg ICAgICAgLyogTm90ZToKKyAgICAgICAgICAgSWYgYWNlLT5hX2ZsYWdzID0gQUNFX09XTkVS LCBhY2UtPmFfd2hvIGlzIHRoZSBzdF91aWQgZnJvbSBzdGF0KCkuCisgICAgICAgICAgIElm IGFjZS0+YV9mbGFncyA9IEFDRV9HUk9VUCwgYWNlLT5hX3dobyBpcyB0aGUgc3RfZ2lkIGZy b20gc3RhdCgpLgorICAgICAgICAgICBXZSBkb24ndCBuZWVkIHRvIGNoZWNrIGFjZS0+YV93 aG8gaW4gdGhlc2UgY2FzZXMuICAqLworICAgICAgICBpZiAoIShhY2UtPmFfdHlwZSA9PSBP TERfQUxMT1cKKyAgICAgICAgICAgICAgJiYgKGFjZS0+YV9mbGFncyA9PSBPTERfQUNFX09X TkVSCisgICAgICAgICAgICAgICAgICB8fCBhY2UtPmFfZmxhZ3MgPT0gT0xEX0FDRV9HUk9V UAorICAgICAgICAgICAgICAgICAgfHwgYWNlLT5hX2ZsYWdzID09IE9MRF9BQ0VfT1RIRVIp KSkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAg IC8qIFJ1bm5pbmcgb24gU29sYXJpcyAxMCAobmV3ZXIgdmVyc2lvbikgb3IgU29sYXJpcyAx MS4gICovCisgICAgICB1bnNpZ25lZCBpbnQgYWNjZXNzX21hc2tzWzZdID0KKyAgICAgICAg eworICAgICAgICAgIDAsIC8qIG93bmVyQCBkZW55ICovCisgICAgICAgICAgMCwgLyogb3du ZXJAIGFsbG93ICovCisgICAgICAgICAgMCwgLyogZ3JvdXBAIGRlbnkgKi8KKyAgICAgICAg ICAwLCAvKiBncm91cEAgYWxsb3cgKi8KKyAgICAgICAgICAwLCAvKiBldmVyeW9uZUAgZGVu eSAqLworICAgICAgICAgIDAgIC8qIGV2ZXJ5b25lQCBhbGxvdyAqLworICAgICAgICB9Owor CisgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgeworICAgICAg ICAgIGFjZV90ICphY2UgPSAmZW50cmllc1tpXTsKKyAgICAgICAgICB1bnNpZ25lZCBpbnQg aW5kZXgxOworICAgICAgICAgIHVuc2lnbmVkIGludCBpbmRleDI7CisKKyAgICAgICAgICBp ZiAoYWNlLT5hX3R5cGUgPT0gTkVXX0FDRV9BQ0NFU1NfQUxMT1dFRF9BQ0VfVFlQRSkKKyAg ICAgICAgICAgIGluZGV4MSA9IDE7CisgICAgICAgICAgZWxzZSBpZiAoYWNlLT5hX3R5cGUg PT0gTkVXX0FDRV9BQ0NFU1NfREVOSUVEX0FDRV9UWVBFKQorICAgICAgICAgICAgaW5kZXgx ID0gMDsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMTsKKworICAgICAg ICAgIGlmIChhY2UtPmFfZmxhZ3MgPT0gTkVXX0FDRV9PV05FUikKKyAgICAgICAgICAgIGlu ZGV4MiA9IDA7CisgICAgICAgICAgZWxzZSBpZiAoYWNlLT5hX2ZsYWdzID09IChORVdfQUNF X0dST1VQIHwgTkVXX0FDRV9JREVOVElGSUVSX0dST1VQKSkKKyAgICAgICAgICAgIGluZGV4 MiA9IDI7CisgICAgICAgICAgZWxzZSBpZiAoYWNlLT5hX2ZsYWdzID09IE5FV19BQ0VfRVZF UllPTkUpCisgICAgICAgICAgICBpbmRleDIgPSA0OworICAgICAgICAgIGVsc2UKKyAgICAg ICAgICAgIHJldHVybiAxOworCisgICAgICAgICAgYWNjZXNzX21hc2tzW2luZGV4MSArIGlu ZGV4Ml0gfD0gYWNlLT5hX2FjY2Vzc19tYXNrOworICAgICAgICB9CisKKyAgICAgIC8qIFRo ZSBzYW1lIGJpdCBzaG91bGRuJ3QgYmUgYm90aCBhbGxvd2VkIGFuZCBkZW5pZWQuICAqLwor ICAgICAgaWYgKGFjY2Vzc19tYXNrc1swXSAmIGFjY2Vzc19tYXNrc1sxXSkKKyAgICAgICAg cmV0dXJuIDE7CisgICAgICBpZiAoYWNjZXNzX21hc2tzWzJdICYgYWNjZXNzX21hc2tzWzNd KQorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGlmIChhY2Nlc3NfbWFza3NbNF0gJiBhY2Nl c3NfbWFza3NbNV0pCisgICAgICAgIHJldHVybiAxOworCisgICAgICAvKiBDaGVjayBtaW5p bXVtIG1hc2tzLiAgKi8KKyAgICAgIGlmICgoTkVXX0FDRV9XUklURV9OQU1FRF9BVFRSUwor ICAgICAgICAgICB8IE5FV19BQ0VfV1JJVEVfQVRUUklCVVRFUworICAgICAgICAgICB8IE5F V19BQ0VfV1JJVEVfQUNMCisgICAgICAgICAgIHwgTkVXX0FDRV9XUklURV9PV05FUikKKyAg ICAgICAgICAmIH4gYWNjZXNzX21hc2tzWzFdKQorICAgICAgICByZXR1cm4gMTsKKyAgICAg IGFjY2Vzc19tYXNrc1sxXSAmPSB+KE5FV19BQ0VfV1JJVEVfTkFNRURfQVRUUlMKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgTkVXX0FDRV9XUklURV9BVFRSSUJVVEVTCisgICAg ICAgICAgICAgICAgICAgICAgICAgICB8IE5FV19BQ0VfV1JJVEVfQUNMCisgICAgICAgICAg ICAgICAgICAgICAgICAgICB8IE5FV19BQ0VfV1JJVEVfT1dORVIpOworICAgICAgaWYgKChO RVdfQUNFX1JFQURfTkFNRURfQVRUUlMKKyAgICAgICAgICAgfCBORVdfQUNFX1JFQURfQVRU UklCVVRFUworICAgICAgICAgICB8IE5FV19BQ0VfUkVBRF9BQ0wKKyAgICAgICAgICAgfCBO RVdfQUNFX1NZTkNIUk9OSVpFKQorICAgICAgICAgICYgfiBhY2Nlc3NfbWFza3NbNV0pCisg ICAgICAgIHJldHVybiAxOworICAgICAgYWNjZXNzX21hc2tzWzVdICY9IH4oTkVXX0FDRV9S RUFEX05BTUVEX0FUVFJTCisgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5FV19BQ0Vf UkVBRF9BVFRSSUJVVEVTCisgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5FV19BQ0Vf UkVBRF9BQ0wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTkVXX0FDRV9TWU5DSFJP TklaRSk7CisKKyAgICAgIC8qIENoZWNrIHRoZSBhbGxvd2VkIG9yIGRlbmllZCBiaXRzLiAg Ki8KKyAgICAgIHN3aXRjaCAoKGFjY2Vzc19tYXNrc1swXSB8IGFjY2Vzc19tYXNrc1sxXSkK KyAgICAgICAgICAgICAgJiB+KE5FV19BQ0VfUkVBRF9OQU1FRF9BVFRSUworICAgICAgICAg ICAgICAgICAgfCBORVdfQUNFX1JFQURfQVRUUklCVVRFUworICAgICAgICAgICAgICAgICAg fCBORVdfQUNFX1JFQURfQUNMCisgICAgICAgICAgICAgICAgICB8IE5FV19BQ0VfU1lOQ0hS T05JWkUpKQorICAgICAgICB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgY2FzZSBORVdf QUNFX1JFQURfREFUQToKKyAgICAgICAgY2FzZSAgICAgICAgICAgICAgICAgICAgIE5FV19B Q0VfV1JJVEVBX0RBVEE6CisgICAgICAgIGNhc2UgTkVXX0FDRV9SRUFEX0RBVEEgfCBORVdf QUNFX1dSSVRFQV9EQVRBOgorICAgICAgICBjYXNlICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE5FV19BQ0VfRVhFQ1VURToKKyAgICAgICAgY2FzZSBORVdf QUNFX1JFQURfREFUQSB8ICAgICAgICAgICAgICAgICAgICAgICBORVdfQUNFX0VYRUNVVEU6 CisgICAgICAgIGNhc2UgICAgICAgICAgICAgICAgICAgICBORVdfQUNFX1dSSVRFQV9EQVRB IHwgTkVXX0FDRV9FWEVDVVRFOgorICAgICAgICBjYXNlIE5FV19BQ0VfUkVBRF9EQVRBIHwg TkVXX0FDRV9XUklURUFfREFUQSB8IE5FV19BQ0VfRVhFQ1VURToKKyAgICAgICAgICBicmVh azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQor ICAgICAgc3dpdGNoICgoYWNjZXNzX21hc2tzWzJdIHwgYWNjZXNzX21hc2tzWzNdKQorICAg ICAgICAgICAgICAmIH4oTkVXX0FDRV9SRUFEX05BTUVEX0FUVFJTCisgICAgICAgICAgICAg ICAgICB8IE5FV19BQ0VfUkVBRF9BVFRSSUJVVEVTCisgICAgICAgICAgICAgICAgICB8IE5F V19BQ0VfUkVBRF9BQ0wKKyAgICAgICAgICAgICAgICAgIHwgTkVXX0FDRV9TWU5DSFJPTkla RSkpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICBjYXNlIE5FV19BQ0Vf UkVBRF9EQVRBOgorICAgICAgICBjYXNlICAgICAgICAgICAgICAgICAgICAgTkVXX0FDRV9X UklURUFfREFUQToKKyAgICAgICAgY2FzZSBORVdfQUNFX1JFQURfREFUQSB8IE5FV19BQ0Vf V1JJVEVBX0RBVEE6CisgICAgICAgIGNhc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTkVXX0FDRV9FWEVDVVRFOgorICAgICAgICBjYXNlIE5FV19BQ0Vf UkVBRF9EQVRBIHwgICAgICAgICAgICAgICAgICAgICAgIE5FV19BQ0VfRVhFQ1VURToKKyAg ICAgICAgY2FzZSAgICAgICAgICAgICAgICAgICAgIE5FV19BQ0VfV1JJVEVBX0RBVEEgfCBO RVdfQUNFX0VYRUNVVEU6CisgICAgICAgIGNhc2UgTkVXX0FDRV9SRUFEX0RBVEEgfCBORVdf QUNFX1dSSVRFQV9EQVRBIHwgTkVXX0FDRV9FWEVDVVRFOgorICAgICAgICAgIGJyZWFrOwor ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAg ICBzd2l0Y2ggKChhY2Nlc3NfbWFza3NbNF0gfCBhY2Nlc3NfbWFza3NbNV0pCisgICAgICAg ICAgICAgICYgfihORVdfQUNFX1dSSVRFX05BTUVEX0FUVFJTCisgICAgICAgICAgICAgICAg ICB8IE5FV19BQ0VfV1JJVEVfQVRUUklCVVRFUworICAgICAgICAgICAgICAgICAgfCBORVdf QUNFX1dSSVRFX0FDTAorICAgICAgICAgICAgICAgICAgfCBORVdfQUNFX1dSSVRFX09XTkVS KSkKKyAgICAgICAgeworICAgICAgICBjYXNlIDA6CisgICAgICAgIGNhc2UgTkVXX0FDRV9S RUFEX0RBVEE6CisgICAgICAgIGNhc2UgICAgICAgICAgICAgICAgICAgICBORVdfQUNFX1dS SVRFQV9EQVRBOgorICAgICAgICBjYXNlIE5FV19BQ0VfUkVBRF9EQVRBIHwgTkVXX0FDRV9X UklURUFfREFUQToKKyAgICAgICAgY2FzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBORVdfQUNFX0VYRUNVVEU6CisgICAgICAgIGNhc2UgTkVXX0FDRV9S RUFEX0RBVEEgfCAgICAgICAgICAgICAgICAgICAgICAgTkVXX0FDRV9FWEVDVVRFOgorICAg ICAgICBjYXNlICAgICAgICAgICAgICAgICAgICAgTkVXX0FDRV9XUklURUFfREFUQSB8IE5F V19BQ0VfRVhFQ1VURToKKyAgICAgICAgY2FzZSBORVdfQUNFX1JFQURfREFUQSB8IE5FV19B Q0VfV1JJVEVBX0RBVEEgfCBORVdfQUNFX0VYRUNVVEU6CisgICAgICAgICAgYnJlYWs7Cisg ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKworICAg ICAgLyogQ2hlY2sgdGhhdCB0aGUgTkVXX0FDRV9XUklURV9EQVRBIGFuZCBORVdfQUNFX0FQ UEVORF9EQVRBIGJpdHMgYXJlCisgICAgICAgICBlaXRoZXIgYm90aCBhbGxvd2VkIG9yIGJv dGggZGVuaWVkLiAgKi8KKyAgICAgIGlmICgoKGFjY2Vzc19tYXNrc1swXSAmIE5FV19BQ0Vf V1JJVEVfREFUQSkgIT0gMCkKKyAgICAgICAgICAhPSAoKGFjY2Vzc19tYXNrc1swXSAmIE5F V19BQ0VfQVBQRU5EX0RBVEEpICE9IDApKQorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGlm ICgoKGFjY2Vzc19tYXNrc1syXSAmIE5FV19BQ0VfV1JJVEVfREFUQSkgIT0gMCkKKyAgICAg ICAgICAhPSAoKGFjY2Vzc19tYXNrc1syXSAmIE5FV19BQ0VfQVBQRU5EX0RBVEEpICE9IDAp KQorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGlmICgoKGFjY2Vzc19tYXNrc1s0XSAmIE5F V19BQ0VfV1JJVEVfREFUQSkgIT0gMCkKKyAgICAgICAgICAhPSAoKGFjY2Vzc19tYXNrc1s0 XSAmIE5FV19BQ0VfQVBQRU5EX0RBVEEpICE9IDApKQorICAgICAgICByZXR1cm4gMTsKKyAg ICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKyMgZW5kaWYKKworI2VsaWYgVVNFX0FDTCAmJiBI QVZFX0dFVEFDTCAvKiBIUC1VWCAqLworCisvKiBSZXR1cm4gMSBpZiB0aGUgZ2l2ZW4gQUNM IGlzIG5vbi10cml2aWFsLgorICAgUmV0dXJuIDAgaWYgaXQgaXMgdHJpdmlhbCwgaS5lLiBl cXVpdmFsZW50IHRvIGEgc2ltcGxlIHN0YXQoKSBtb2RlLiAgKi8KK2ludAorYWNsX25vbnRy aXZpYWwgKGludCBjb3VudCwgc3RydWN0IGFjbF9lbnRyeSAqZW50cmllcywgc3RydWN0IHN0 YXQgKnNiKQoreworICBpbnQgaTsKKworICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykK KyAgICB7CisgICAgICBzdHJ1Y3QgYWNsX2VudHJ5ICphY2UgPSAmZW50cmllc1tpXTsKKwor ICAgICAgaWYgKCEoKGFjZS0+dWlkID09IHNiLT5zdF91aWQgJiYgYWNlLT5naWQgPT0gQUNM X05TR1JPVVApCisgICAgICAgICAgICB8fCAoYWNlLT51aWQgPT0gQUNMX05TVVNFUiAmJiBh Y2UtPmdpZCA9PSBzYi0+c3RfZ2lkKQorICAgICAgICAgICAgfHwgKGFjZS0+dWlkID09IEFD TF9OU1VTRVIgJiYgYWNlLT5naWQgPT0gQUNMX05TR1JPVVApKSkKKyAgICAgICAgcmV0dXJu IDE7CisgICAgfQorICByZXR1cm4gMDsKK30KKworIyBpZiBIQVZFX0FDTFZfSCAvKiBIUC1V WCA+PSAxMS4xMSAqLworCisvKiBSZXR1cm4gMSBpZiB0aGUgZ2l2ZW4gQUNMIGlzIG5vbi10 cml2aWFsLgorICAgUmV0dXJuIDAgaWYgaXQgaXMgdHJpdmlhbCwgaS5lLiBlcXVpdmFsZW50 IHRvIGEgc2ltcGxlIHN0YXQoKSBtb2RlLiAgKi8KK2ludAorYWNsdl9ub250cml2aWFsIChp bnQgY291bnQsIHN0cnVjdCBhY2wgKmVudHJpZXMpCit7CisgIGludCBpOworCisgIGZvciAo aSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgIHN0cnVjdCBhY2wgKmFjZSA9 ICZlbnRyaWVzW2ldOworCisgICAgICAvKiBOb3RlOiBJZiBhY2UtPmFfdHlwZSA9IFVTRVJf T0JKLCBhY2UtPmFfaWQgaXMgdGhlIHN0X3VpZCBmcm9tIHN0YXQoKS4KKyAgICAgICAgIElm IGFjZS0+YV90eXBlID0gR1JPVVBfT0JKLCBhY2UtPmFfaWQgaXMgdGhlIHN0X2dpZCBmcm9t IHN0YXQoKS4KKyAgICAgICAgIFdlIGRvbid0IG5lZWQgdG8gY2hlY2sgYWNlLT5hX2lkIGlu IHRoZXNlIGNhc2VzLiAgKi8KKyAgICAgIGlmICghKGFjZS0+YV90eXBlID09IFVTRVJfT0JK IC8qIG5vIG5lZWQgdG8gY2hlY2sgYWNlLT5hX2lkIGhlcmUgKi8KKyAgICAgICAgICAgIHx8 IGFjZS0+YV90eXBlID09IEdST1VQX09CSiAvKiBubyBuZWVkIHRvIGNoZWNrIGFjZS0+YV9p ZCBoZXJlICovCisgICAgICAgICAgICB8fCBhY2UtPmFfdHlwZSA9PSBDTEFTU19PQkoKKyAg ICAgICAgICAgIHx8IGFjZS0+YV90eXBlID09IE9USEVSX09CSikpCisgICAgICAgIHJldHVy biAxOworICAgIH0KKyAgcmV0dXJuIDA7Cit9CisKKyMgZW5kaWYKKworI2VsaWYgVVNFX0FD TCAmJiAoSEFWRV9BQ0xYX0dFVCB8fCBIQVZFX1NUQVRBQ0wpIC8qIEFJWCAqLworCisvKiBS ZXR1cm4gMSBpZiB0aGUgZ2l2ZW4gQUNMIGlzIG5vbi10cml2aWFsLgorICAgUmV0dXJuIDAg aWYgaXQgaXMgdHJpdmlhbCwgaS5lLiBlcXVpdmFsZW50IHRvIGEgc2ltcGxlIHN0YXQoKSBt b2RlLiAgKi8KK2ludAorYWNsX25vbnRyaXZpYWwgKHN0cnVjdCBhY2wgKmEpCit7CisgIC8q IFRoZSBub3JtYWwgd2F5IHRvIGl0ZXJhdGUgdGhyb3VnaCBhbiBBQ0wgaXMgbGlrZSB0aGlz OgorICAgICAgIHN0cnVjdCBhY2xfZW50cnkgKmFjZTsKKyAgICAgICBmb3IgKGFjZSA9IGEt PmFjbF9leHQ7IGFjZSAhPSBhY2xfbGFzdCAoYSk7IGFjZSA9IGFjbF9ueHQgKGFjZSkpCisg ICAgICAgICB7CisgICAgICAgICAgIHN0cnVjdCBhY2VfaWQgKmFlaTsKKyAgICAgICAgICAg c3dpdGNoIChhY2UtPmFjZV90eXBlKQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICBj YXNlIEFDQ19QRVJNSVQ6CisgICAgICAgICAgICAgY2FzZSBBQ0NfREVOWToKKyAgICAgICAg ICAgICBjYXNlIEFDQ19TUEVDSUZZOgorICAgICAgICAgICAgICAgLi4uOworICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgZm9yIChhZWkgPSBhY2UtPmFjZV9pZDsgYWVpICE9IGlkX2xh c3QgKGFjZSk7IGFlaSA9IGlkX254dCAoYWVpKSkKKyAgICAgICAgICAgICAuLi4KKyAgICAg ICAgIH0KKyAgICovCisgIHJldHVybiAoYWNsX2xhc3QgKGEpICE9IGEtPmFjbF9leHQgPyAx IDogMCk7Cit9CisKKyMgaWYgSEFWRV9BQ0xYX0dFVCAmJiBkZWZpbmVkIEFDTF9BSVhfV0lQ IC8qIG5ld2VyIEFJWCAqLworCisvKiBSZXR1cm4gMSBpZiB0aGUgZ2l2ZW4gQUNMIGlzIG5v bi10cml2aWFsLgorICAgUmV0dXJuIDAgaWYgaXQgaXMgdHJpdmlhbCwgaS5lLiBlcXVpdmFs ZW50IHRvIGEgc2ltcGxlIHN0YXQoKSBtb2RlLiAgKi8KK2ludAorYWNsX25mczRfbm9udHJp dmlhbCAobmZzNF9hY2xfaW50X3QgKmEpCit7CisjICBpZiAxIC8qIGxldCdzIHRyeSB0aGlz IGZpcnN0ICovCisgIHJldHVybiAoYS0+YWNsRW50cnlOID4gMCA/IDEgOiAwKTsKKyMgIGVs c2UKKyAgaW50IGNvdW50ID0gYS0+YWNsRW50cnlOOworICBpbnQgaTsKKworICBmb3IgKGkg PSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICBuZnM0X2FjZV9pbnRfdCAqYWNl ID0gJmEtPmFjbEVudHJ5W2ldOworCisgICAgICBpZiAoISgoYWNlLT5mbGFncyAmIEFDRTRf SURfU1BFQ0lBTCkgIT0gMAorICAgICAgICAgICAgJiYgKGFjZS0+YWNlV2hvLnNwZWNpYWxf d2hvaWQgPT0gQUNFNF9XSE9fT1dORVIKKyAgICAgICAgICAgICAgICB8fCBhY2UtPmFjZVdo by5zcGVjaWFsX3dob2lkID09IEFDRTRfV0hPX0dST1VQCisgICAgICAgICAgICAgICAgfHwg YWNlLT5hY2VXaG8uc3BlY2lhbF93aG9pZCA9PSBBQ0U0X1dIT19FVkVSWU9ORSkKKyAgICAg ICAgICAgICYmIGFjZS0+YWNlVHlwZSA9PSBBQ0U0X0FDQ0VTU19BTExPV0VEX0FDRV9UWVBF CisgICAgICAgICAgICAmJiBhY2UtPmFjZUZsYWdzID09IDAKKyAgICAgICAgICAgICYmIChh Y2UtPmFjZU1hc2sgJiB+KEFDRTRfUkVBRF9EQVRBIHwgQUNFNF9MSVNUX0RJUkVDVE9SWQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBQ0U0X1dSSVRFX0RBVEEgfCBB Q0U0X0FERF9GSUxFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFDRTRf RVhFQ1VURSkpID09IDApKQorICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgIHJldHVybiAw OworIyAgZW5kaWYKK30KKworIyBlbmRpZgorCisjZWxpZiBVU0VfQUNMICYmIEhBVkVfQUNM U09SVCAvKiBOb25TdG9wIEtlcm5lbCAqLworCisvKiBUZXN0IGFuIEFDTCByZXRyaWV2ZWQg d2l0aCBBQ0xfR0VULgorICAgUmV0dXJuIDEgaWYgdGhlIGdpdmVuIEFDTCwgY29uc2lzdGlu ZyBvZiBDT1VOVCBlbnRyaWVzLCBpcyBub24tdHJpdmlhbC4KKyAgIFJldHVybiAwIGlmIGl0 IGlzIHRyaXZpYWwsIGkuZS4gZXF1aXZhbGVudCB0byBhIHNpbXBsZSBzdGF0KCkgbW9kZS4g ICovCitpbnQKK2FjbF9ub250cml2aWFsIChpbnQgY291bnQsIHN0cnVjdCBhY2wgKmVudHJp ZXMpCit7CisgIGludCBpOworCisgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAg IHsKKyAgICAgIHN0cnVjdCBhY2wgKmFjZSA9ICZlbnRyaWVzW2ldOworCisgICAgICAvKiBO b3RlOiBJZiBhY2UtPmFfdHlwZSA9IFVTRVJfT0JKLCBhY2UtPmFfaWQgaXMgdGhlIHN0X3Vp ZCBmcm9tIHN0YXQoKS4KKyAgICAgICAgIElmIGFjZS0+YV90eXBlID0gR1JPVVBfT0JKLCBh Y2UtPmFfaWQgaXMgdGhlIHN0X2dpZCBmcm9tIHN0YXQoKS4KKyAgICAgICAgIFdlIGRvbid0 IG5lZWQgdG8gY2hlY2sgYWNlLT5hX2lkIGluIHRoZXNlIGNhc2VzLiAgKi8KKyAgICAgIGlm ICghKGFjZS0+YV90eXBlID09IFVTRVJfT0JKIC8qIG5vIG5lZWQgdG8gY2hlY2sgYWNlLT5h X2lkIGhlcmUgKi8KKyAgICAgICAgICAgIHx8IGFjZS0+YV90eXBlID09IEdST1VQX09CSiAv KiBubyBuZWVkIHRvIGNoZWNrIGFjZS0+YV9pZCBoZXJlICovCisgICAgICAgICAgICB8fCBh Y2UtPmFfdHlwZSA9PSBDTEFTU19PQkoKKyAgICAgICAgICAgIHx8IGFjZS0+YV90eXBlID09 IE9USEVSX09CSikpCisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgcmV0dXJuIDA7Cit9 CisKKyNlbmRpZgorCisKKy8qIFJldHVybiAxIGlmIE5BTUUgaGFzIGEgbm9udHJpdmlhbCBh Y2Nlc3MgY29udHJvbCBsaXN0LCAwIGlmIE5BTUUKKyAgIG9ubHkgaGFzIG5vIG9yIGEgYmFz ZSBhY2Nlc3MgY29udHJvbCBsaXN0LCBhbmQgLTEgKHNldHRpbmcgZXJybm8pCisgICBvbiBl cnJvci4gIFNCIG11c3QgYmUgc2V0IHRvIHRoZSBzdGF0IGJ1ZmZlciBvZiBOQU1FLCBvYnRh aW5lZAorICAgdGhyb3VnaCBzdGF0KCkgb3IgbHN0YXQoKS4gICovCisKK2ludAorZmlsZV9o YXNfYWNsIChjaGFyIGNvbnN0ICpuYW1lLCBzdHJ1Y3Qgc3RhdCBjb25zdCAqc2IpCit7Cisj aWYgVVNFX0FDTAorICBpZiAoISBTX0lTTE5LIChzYi0+c3RfbW9kZSkpCisgICAgeworIyBp ZiBIQVZFX0FDTF9HRVRfRklMRQorCisgICAgICAvKiBQT1NJWCAxMDAzLjFlIChkcmFmdCAx NyAtLSBhYmFuZG9uZWQpIHNwZWNpZmljIHZlcnNpb24uICAqLworICAgICAgLyogTGludXgs IEZyZWVCU0QsIE1hYyBPUyBYLCBJUklYLCBUcnU2NCAqLworICAgICAgaW50IHJldDsKKwor ICAgICAgaWYgKEhBVkVfQUNMX0VYVEVOREVEX0ZJTEUpIC8qIExpbnV4ICovCisgICAgICAg IHsKKyAgICAgICAgICAvKiBPbiBMaW51eCwgYWNsX2V4dGVuZGVkX2ZpbGUgaXMgYW4gb3B0 aW1pemVkIGZ1bmN0aW9uOiBJdCBvbmx5CisgICAgICAgICAgICAgbWFrZXMgdHdvIGNhbGxz IHRvIGdldHhhdHRyKCksIG9uZSBmb3IgQUNMX1RZUEVfQUNDRVNTLCBvbmUgZm9yCisgICAg ICAgICAgICAgQUNMX1RZUEVfREVGQVVMVC4gICovCisgICAgICAgICAgcmV0ID0gYWNsX2V4 dGVuZGVkX2ZpbGUgKG5hbWUpOworICAgICAgICB9CisgICAgICBlbHNlIC8qIEZyZWVCU0Qs IE1hYyBPUyBYLCBJUklYLCBUcnU2NCAqLworICAgICAgICB7CisjICBpZiBIQVZFX0FDTF9U WVBFX0VYVEVOREVEIC8qIE1hYyBPUyBYICovCisgICAgICAgICAgLyogT24gTWFjIE9TIFgs IGFjbF9nZXRfZmlsZSAobmFtZSwgQUNMX1RZUEVfQUNDRVNTKQorICAgICAgICAgICAgIGFu ZCBhY2xfZ2V0X2ZpbGUgKG5hbWUsIEFDTF9UWVBFX0RFRkFVTFQpCisgICAgICAgICAgICAg YWx3YXlzIHJldHVybiBOVUxMIC8gRUlOVkFMLiAgVGhlcmUgaXMgbm8gcG9pbnQgaW4gbWFr aW5nCisgICAgICAgICAgICAgdGhlc2UgdHdvIHVzZWxlc3MgY2FsbHMuICBUaGUgcmVhbCBB Q0wgaXMgcmV0cmlldmVkIHRocm91Z2gKKyAgICAgICAgICAgICBhY2xfZ2V0X2ZpbGUgKG5h bWUsIEFDTF9UWVBFX0VYVEVOREVEKS4gICovCisgICAgICAgICAgYWNsX3QgYWNsID0gYWNs X2dldF9maWxlIChuYW1lLCBBQ0xfVFlQRV9FWFRFTkRFRCk7CisgICAgICAgICAgaWYgKGFj bCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcmV0ID0gYWNsX2V4dGVuZGVkX25v bnRyaXZpYWwgKGFjbCk7CisgICAgICAgICAgICAgIGFjbF9mcmVlIChhY2wpOworICAgICAg ICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldCA9IC0xOworIyAgZWxz ZSAvKiBGcmVlQlNELCBJUklYLCBUcnU2NCAqLworICAgICAgICAgIGFjbF90IGFjbCA9IGFj bF9nZXRfZmlsZSAobmFtZSwgQUNMX1RZUEVfQUNDRVNTKTsKKyAgICAgICAgICBpZiAoYWNs KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpbnQgc2F2ZWRfZXJybm87CisKKyAg ICAgICAgICAgICAgcmV0ID0gYWNsX2FjY2Vzc19ub250cml2aWFsIChhY2wpOworICAgICAg ICAgICAgICBzYXZlZF9lcnJubyA9IGVycm5vOworICAgICAgICAgICAgICBhY2xfZnJlZSAo YWNsKTsKKyAgICAgICAgICAgICAgZXJybm8gPSBzYXZlZF9lcnJubzsKKyMgICBpZiBIQVZF X0FDTF9GUkVFX1RFWFQgLyogVHJ1NjQgKi8KKyAgICAgICAgICAgICAgLyogT24gT1NGLzEs IGFjbF9nZXRfZmlsZSAobmFtZSwgQUNMX1RZUEVfREVGQVVMVCkgYWx3YXlzCisgICAgICAg ICAgICAgICAgIHJldHVybnMgTlVMTCB3aXRoIGVycm5vIG5vdCBzZXQuICBUaGVyZSBpcyBu byBwb2ludCBpbgorICAgICAgICAgICAgICAgICBtYWtpbmcgdGhpcyBjYWxsLiAgKi8KKyMg ICBlbHNlIC8qIEZyZWVCU0QsIElSSVggKi8KKyAgICAgICAgICAgICAgLyogT24gTGludXgs IEZyZWVCU0QsIElSSVgsIGFjbF9nZXRfZmlsZSAobmFtZSwgQUNMX1RZUEVfQUNDRVNTKQor ICAgICAgICAgICAgICAgICBhbmQgYWNsX2dldF9maWxlIChuYW1lLCBBQ0xfVFlQRV9ERUZB VUxUKSBvbiBhIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICBlaXRoZXIgYm90aCBzdWNj ZWVkIG9yIGJvdGggZmFpbDsgaXQgZGVwZW5kcyBvbiB0aGUKKyAgICAgICAgICAgICAgICAg ZmlsZSBzeXN0ZW0uICBUaGVyZWZvcmUgdGhlcmUgaXMgbm8gcG9pbnQgaW4gbWFraW5nIHRo ZSBzZWNvbmQKKyAgICAgICAgICAgICAgICAgY2FsbCBpZiB0aGUgZmlyc3Qgb25lIGFscmVh ZHkgZmFpbGVkLiAgKi8KKyAgICAgICAgICAgICAgaWYgKHJldCA9PSAwICYmIFNfSVNESVIg KHNiLT5zdF9tb2RlKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBh Y2wgPSBhY2xfZ2V0X2ZpbGUgKG5hbWUsIEFDTF9UWVBFX0RFRkFVTFQpOworICAgICAgICAg ICAgICAgICAgaWYgKGFjbCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg ICAgICAgICAgIHJldCA9ICgwIDwgYWNsX2VudHJpZXMgKGFjbCkpOworICAgICAgICAgICAg ICAgICAgICAgIGFjbF9mcmVlIChhY2wpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJldCA9IC0xOworICAg ICAgICAgICAgICAgIH0KKyMgICBlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICAgIGVs c2UKKyAgICAgICAgICAgIHJldCA9IC0xOworIyAgZW5kaWYKKyAgICAgICAgfQorICAgICAg aWYgKHJldCA8IDApCisgICAgICAgIHJldHVybiAtIGFjbF9lcnJub192YWxpZCAoZXJybm8p OworICAgICAgcmV0dXJuIHJldDsKKworIyBlbGlmIEhBVkVfRkFDTCAmJiBkZWZpbmVkIEdF VEFDTCAvKiBTb2xhcmlzLCBDeWd3aW4sIG5vdCBIUC1VWCAqLworCisjICBpZiBkZWZpbmVk IEFDTF9OT19UUklWSUFMCisKKyAgICAgIC8qIFNvbGFyaXMgMTAgKG5ld2VyIHZlcnNpb24p LCB3aGljaCBoYXMgYWRkaXRpb25hbCBBUEkgZGVjbGFyZWQgaW4KKyAgICAgICAgIDxzeXMv YWNsLmg+IChhY2xfdCkgYW5kIGltcGxlbWVudGVkIGluIGxpYnNlYyAoYWNsX3NldCwgYWNs X3RyaXZpYWwsCisgICAgICAgICBhY2xfZnJvbXRleHQsIC4uLikuICAqLworICAgICAgcmV0 dXJuIGFjbF90cml2aWFsIChuYW1lKTsKKworIyAgZWxzZSAvKiBTb2xhcmlzLCBDeWd3aW4s IGdlbmVyYWwgY2FzZSAqLworCisgICAgICAvKiBTb2xhcmlzIDIuNSB0aHJvdWdoIFNvbGFy aXMgMTAsIEN5Z3dpbiwgYW5kIGNvbnRlbXBvcmFuZW91cyB2ZXJzaW9ucworICAgICAgICAg b2YgVW5peHdhcmUuICBUaGUgYWNsKCkgY2FsbCByZXR1cm5zIHRoZSBhY2Nlc3MgYW5kIGRl ZmF1bHQgQUNMIGJvdGgKKyAgICAgICAgIGF0IG9uY2UuICAqLworICAgICAgeworICAgICAg ICAvKiBJbml0aWFsbHksIHRyeSB0byByZWFkIHRoZSBlbnRyaWVzIGludG8gYSBzdGFjay1h bGxvY2F0ZWQgYnVmZmVyLgorICAgICAgICAgICBVc2UgbWFsbG9jIGlmIGl0IGRvZXMgbm90 IGZpdC4gICovCisgICAgICAgIGVudW0KKyAgICAgICAgICB7CisgICAgICAgICAgICBhbGxv Y19pbml0ID0gNDAwMCAvIHNpemVvZiAoYWNsZW50X3QpLCAvKiA+PSAzICovCisgICAgICAg ICAgICBhbGxvY19tYXggPSBNSU4gKElOVF9NQVgsIFNJWkVfTUFYIC8gc2l6ZW9mIChhY2xl bnRfdCkpCisgICAgICAgICAgfTsKKyAgICAgICAgYWNsZW50X3QgYnVmW2FsbG9jX2luaXRd OworICAgICAgICBzaXplX3QgYWxsb2MgPSBhbGxvY19pbml0OworICAgICAgICBhY2xlbnRf dCAqZW50cmllcyA9IGJ1ZjsKKyAgICAgICAgYWNsZW50X3QgKm1hbGxvY2VkID0gTlVMTDsK KyAgICAgICAgaW50IGNvdW50OworCisgICAgICAgIGZvciAoOzspCisgICAgICAgICAgewor ICAgICAgICAgICAgY291bnQgPSBhY2wgKG5hbWUsIEdFVEFDTCwgYWxsb2MsIGVudHJpZXMp OworICAgICAgICAgICAgaWYgKGNvdW50IDwgMCAmJiBlcnJubyA9PSBFTk9TUEMpCisgICAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBJbmNyZWFzZSB0aGUgc2l6ZSBvZiB0 aGUgYnVmZmVyLiAgKi8KKyAgICAgICAgICAgICAgICBmcmVlIChtYWxsb2NlZCk7CisgICAg ICAgICAgICAgICAgaWYgKGFsbG9jID4gYWxsb2NfbWF4IC8gMikKKyAgICAgICAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgICAgICAg ICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICBhbGxvYyA9IDIgKiBhbGxvYzsgLyogPD0gYWxsb2NfbWF4ICovCisgICAgICAgICAg ICAgICAgZW50cmllcyA9IG1hbGxvY2VkID0KKyAgICAgICAgICAgICAgICAgIChhY2xlbnRf dCAqKSBtYWxsb2MgKGFsbG9jICogc2l6ZW9mIChhY2xlbnRfdCkpOworICAgICAgICAgICAg ICAgIGlmIChlbnRyaWVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAg ICAgICAgICAgICAgIGVycm5vID0gRU5PTUVNOworICAgICAgICAgICAgICAgICAgICByZXR1 cm4gLTE7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29udGludWU7 CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAg ICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoZXJy bm8gPT0gRU5PU1lTIHx8IGVycm5vID09IEVOT1RTVVApCisgICAgICAgICAgICAgIDsKKyAg ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCBz YXZlZF9lcnJubyA9IGVycm5vOworICAgICAgICAgICAgICAgIGZyZWUgKG1hbGxvY2VkKTsK KyAgICAgICAgICAgICAgICBlcnJubyA9IHNhdmVkX2Vycm5vOworICAgICAgICAgICAgICAg IHJldHVybiAtMTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgZWxz ZSBpZiAoY291bnQgPT0gMCkKKyAgICAgICAgICA7CisgICAgICAgIGVsc2UKKyAgICAgICAg ICB7CisgICAgICAgICAgICAvKiBEb24ndCB1c2UgTUlOX0FDTF9FTlRSSUVTOiAgSXQncyBz ZXQgdG8gNCBvbiBDeWd3aW4sIGJ1dCBDeWd3aW4KKyAgICAgICAgICAgICAgIHJldHVybnMg b25seSAzIGVudHJpZXMgZm9yIGZpbGVzIHdpdGggbm8gQUNMLiAgQnV0IHRoaXMgaXMgc2Fm ZToKKyAgICAgICAgICAgICAgIElmIHRoZXJlIGFyZSBtb3JlIHRoYW4gNCBlbnRyaWVzLCB0 aGVyZSBjYW5ub3QgYmUgb25seSB0aGUKKyAgICAgICAgICAgICAgICJ1c2VyOjoiLCAiZ3Jv dXA6OiIsICJvdGhlcjoiLCBhbmQgIm1hc2s6IiBlbnRyaWVzLiAgKi8KKyAgICAgICAgICAg IGlmIChjb3VudCA+IDQpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmcmVl IChtYWxsb2NlZCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAg IH0KKworICAgICAgICAgICAgaWYgKGFjbF9ub250cml2aWFsIChjb3VudCwgZW50cmllcykp CisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmcmVlIChtYWxsb2NlZCk7Cisg ICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9 CisgICAgICAgIGZyZWUgKG1hbGxvY2VkKTsKKyAgICAgIH0KKworIyAgIGlmZGVmIEFDRV9H RVRBQ0wKKyAgICAgIC8qIFNvbGFyaXMgYWxzbyBoYXMgYSBkaWZmZXJlbnQgdmFyaWFudCBv ZiBBQ0xzLCB1c2VkIGluIFpGUyBhbmQgTkZTdjQKKyAgICAgICAgIGZpbGUgc3lzdGVtcyAo d2hlcmVhcyB0aGUgb3RoZXIgb25lcyBhcmUgdXNlZCBpbiBVRlMgZmlsZSBzeXN0ZW1zKS4g ICovCisgICAgICB7CisgICAgICAgIC8qIEluaXRpYWxseSwgdHJ5IHRvIHJlYWQgdGhlIGVu dHJpZXMgaW50byBhIHN0YWNrLWFsbG9jYXRlZCBidWZmZXIuCisgICAgICAgICAgIFVzZSBt YWxsb2MgaWYgaXQgZG9lcyBub3QgZml0LiAgKi8KKyAgICAgICAgZW51bQorICAgICAgICAg IHsKKyAgICAgICAgICAgIGFsbG9jX2luaXQgPSA0MDAwIC8gc2l6ZW9mIChhY2VfdCksIC8q ID49IDMgKi8KKyAgICAgICAgICAgIGFsbG9jX21heCA9IE1JTiAoSU5UX01BWCwgU0laRV9N QVggLyBzaXplb2YgKGFjZV90KSkKKyAgICAgICAgICB9OworICAgICAgICBhY2VfdCBidWZb YWxsb2NfaW5pdF07CisgICAgICAgIHNpemVfdCBhbGxvYyA9IGFsbG9jX2luaXQ7CisgICAg ICAgIGFjZV90ICplbnRyaWVzID0gYnVmOworICAgICAgICBhY2VfdCAqbWFsbG9jZWQgPSBO VUxMOworICAgICAgICBpbnQgY291bnQ7CisKKyAgICAgICAgZm9yICg7OykKKyAgICAgICAg ICB7CisgICAgICAgICAgICBjb3VudCA9IGFjbCAobmFtZSwgQUNFX0dFVEFDTCwgYWxsb2Ms IGVudHJpZXMpOworICAgICAgICAgICAgaWYgKGNvdW50IDwgMCAmJiBlcnJubyA9PSBFTk9T UEMpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBJbmNyZWFzZSB0aGUg c2l6ZSBvZiB0aGUgYnVmZmVyLiAgKi8KKyAgICAgICAgICAgICAgICBmcmVlIChtYWxsb2Nl ZCk7CisgICAgICAgICAgICAgICAgaWYgKGFsbG9jID4gYWxsb2NfbWF4IC8gMikKKyAgICAg ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZXJybm8gPSBFTk9NRU07Cisg ICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICBhbGxvYyA9IDIgKiBhbGxvYzsgLyogPD0gYWxsb2NfbWF4ICovCisg ICAgICAgICAgICAgICAgZW50cmllcyA9IG1hbGxvY2VkID0gKGFjZV90ICopIG1hbGxvYyAo YWxsb2MgKiBzaXplb2YgKGFjZV90KSk7CisgICAgICAgICAgICAgICAgaWYgKGVudHJpZXMg PT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZXJy bm8gPSBFTk9NRU07CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg fQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICBpZiAoY291bnQg PCAwKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChlcnJubyA9PSBFTk9TWVMgfHwg ZXJybm8gPT0gRUlOVkFMKQorICAgICAgICAgICAgICA7CisgICAgICAgICAgICBlbHNlCisg ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgc2F2ZWRfZXJybm8gPSBlcnJu bzsKKyAgICAgICAgICAgICAgICBmcmVlIChtYWxsb2NlZCk7CisgICAgICAgICAgICAgICAg ZXJybm8gPSBzYXZlZF9lcnJubzsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAg ICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGNvdW50ID09IDAp CisgICAgICAgICAgOworICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAg LyogSW4gdGhlIG9sZCAob3JpZ2luYWwgU29sYXJpcyAxMCkgY29udmVudGlvbjoKKyAgICAg ICAgICAgICAgIElmIHRoZXJlIGFyZSBtb3JlIHRoYW4gMyBlbnRyaWVzLCB0aGVyZSBjYW5u b3QgYmUgb25seSB0aGUKKyAgICAgICAgICAgICAgIEFDRV9PV05FUiwgQUNFX0dST1VQLCBB Q0VfT1RIRVIgZW50cmllcy4KKyAgICAgICAgICAgICAgIEluIHRoZSBuZXdlciBTb2xhcmlz IDEwIGFuZCBTb2xhcmlzIDExIGNvbnZlbnRpb246CisgICAgICAgICAgICAgICBJZiB0aGVy ZSBhcmUgbW9yZSB0aGFuIDYgZW50cmllcywgdGhlcmUgY2Fubm90IGJlIG9ubHkgdGhlCisg ICAgICAgICAgICAgICBBQ0VfT1dORVIsIEFDRV9HUk9VUCwgQUNFX0VWRVJZT05FIGVudHJp ZXMsIGVhY2ggb25jZSB3aXRoCisgICAgICAgICAgICAgICBORVdfQUNFX0FDQ0VTU19BTExP V0VEX0FDRV9UWVBFIGFuZCBvbmNlIHdpdGgKKyAgICAgICAgICAgICAgIE5FV19BQ0VfQUND RVNTX0RFTklFRF9BQ0VfVFlQRS4gICovCisgICAgICAgICAgICBpZiAoY291bnQgPiA2KQor ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZnJlZSAobWFsbG9jZWQpOworICAg ICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg IGlmIChhY2xfYWNlX25vbnRyaXZpYWwgKGNvdW50LCBlbnRyaWVzKSkKKyAgICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgIGZyZWUgKG1hbGxvY2VkKTsKKyAgICAgICAgICAgICAg ICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgZnJl ZSAobWFsbG9jZWQpOworICAgICAgfQorIyAgIGVuZGlmCisKKyAgICAgIHJldHVybiAwOwor IyAgZW5kaWYKKworIyBlbGlmIEhBVkVfR0VUQUNMIC8qIEhQLVVYICovCisKKyAgICAgIHsK KyAgICAgICAgc3RydWN0IGFjbF9lbnRyeSBlbnRyaWVzW05BQ0xFTlRSSUVTXTsKKyAgICAg ICAgaW50IGNvdW50OworCisgICAgICAgIGNvdW50ID0gZ2V0YWNsIChuYW1lLCBOQUNMRU5U UklFUywgZW50cmllcyk7CisKKyAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgICB7 CisgICAgICAgICAgICAvKiBFTk9TWVMgaXMgc2VlbiBvbiBuZXdlciBIUC1VWCB2ZXJzaW9u cy4KKyAgICAgICAgICAgICAgIEVPUE5PVFNVUFAgaXMgdHlwaWNhbGx5IHNlZW4gb24gTkZT IG1vdW50cy4KKyAgICAgICAgICAgICAgIEVOT1RTVVAgd2FzIHNlZW4gb24gUXVhbnR1bSBT dG9yTmV4dCBmaWxlIHN5c3RlbXMgKGN2ZnMpLiAgKi8KKyAgICAgICAgICAgIGlmIChlcnJu byA9PSBFTk9TWVMgfHwgZXJybm8gPT0gRU9QTk9UU1VQUCB8fCBlcnJubyA9PSBFTk9UU1VQ KQorICAgICAgICAgICAgICA7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHJl dHVybiAtMTsKKyAgICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGNvdW50ID09IDApCisg ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGVsc2UgLyogY291bnQgPiAwICovCisgICAg ICAgICAgeworICAgICAgICAgICAgaWYgKGNvdW50ID4gTkFDTEVOVFJJRVMpCisgICAgICAg ICAgICAgIC8qIElmIE5BQ0xFTlRSSUVTIGNhbm5vdCBiZSB0cnVzdGVkLCB1c2UgZHluYW1p YyBtZW1vcnkKKyAgICAgICAgICAgICAgICAgYWxsb2NhdGlvbi4gICovCisgICAgICAgICAg ICAgIGFib3J0ICgpOworCisgICAgICAgICAgICAvKiBJZiB0aGVyZSBhcmUgbW9yZSB0aGFu IDMgZW50cmllcywgdGhlcmUgY2Fubm90IGJlIG9ubHkgdGhlCisgICAgICAgICAgICAgICAo dWlkLCUpLCAoJSxnaWQpLCAoJSwlKSBlbnRyaWVzLiAgKi8KKyAgICAgICAgICAgIGlmIChj b3VudCA+IDMpCisgICAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgIHN0cnVjdCBzdGF0IHN0YXRidWY7CisKKyAgICAgICAgICAgICAgaWYg KHN0YXQgKG5hbWUsICZzdGF0YnVmKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0x OworCisgICAgICAgICAgICAgIHJldHVybiBhY2xfbm9udHJpdmlhbCAoY291bnQsIGVudHJp ZXMsICZzdGF0YnVmKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICB9CisK KyMgIGlmIEhBVkVfQUNMVl9IIC8qIEhQLVVYID49IDExLjExICovCisKKyAgICAgIHsKKyAg ICAgICAgc3RydWN0IGFjbCBlbnRyaWVzW05BQ0xWRU5UUklFU107CisgICAgICAgIGludCBj b3VudDsKKworICAgICAgICBjb3VudCA9IGFjbCAoKGNoYXIgKikgbmFtZSwgQUNMX0dFVCwg TkFDTFZFTlRSSUVTLCBlbnRyaWVzKTsKKworICAgICAgICBpZiAoY291bnQgPCAwKQorICAg ICAgICAgIHsKKyAgICAgICAgICAgIC8qIEVPUE5PVFNVUFAgaXMgc2VlbiBvbiBORlMgaW4g SFAtVVggMTEuMTEsIDExLjIzLgorICAgICAgICAgICAgICAgRUlOVkFMIGlzIHNlZW4gb24g TkZTIGluIEhQLVVYIDExLjMxLiAgKi8KKyAgICAgICAgICAgIGlmIChlcnJubyA9PSBFTk9T WVMgfHwgZXJybm8gPT0gRU9QTk9UU1VQUCB8fCBlcnJubyA9PSBFSU5WQUwpCisgICAgICAg ICAgICAgIDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgcmV0dXJuIC0xOwor ICAgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY291bnQgPT0gMCkKKyAgICAgICAgICBy ZXR1cm4gMDsKKyAgICAgICAgZWxzZSAvKiBjb3VudCA+IDAgKi8KKyAgICAgICAgICB7Cisg ICAgICAgICAgICBpZiAoY291bnQgPiBOQUNMVkVOVFJJRVMpCisgICAgICAgICAgICAgIC8q IElmIE5BQ0xWRU5UUklFUyBjYW5ub3QgYmUgdHJ1c3RlZCwgdXNlIGR5bmFtaWMgbWVtb3J5 CisgICAgICAgICAgICAgICAgIGFsbG9jYXRpb24uICAqLworICAgICAgICAgICAgICBhYm9y dCAoKTsKKworICAgICAgICAgICAgLyogSWYgdGhlcmUgYXJlIG1vcmUgdGhhbiA0IGVudHJp ZXMsIHRoZXJlIGNhbm5vdCBiZSBvbmx5IHRoZQorICAgICAgICAgICAgICAgZm91ciBiYXNl IEFDTCBlbnRyaWVzLiAgKi8KKyAgICAgICAgICAgIGlmIChjb3VudCA+IDQpCisgICAgICAg ICAgICAgIHJldHVybiAxOworCisgICAgICAgICAgICByZXR1cm4gYWNsdl9ub250cml2aWFs IChjb3VudCwgZW50cmllcyk7CisgICAgICAgICAgfQorICAgICAgfQorCisjICBlbmRpZgor CisjIGVsaWYgSEFWRV9BQ0xYX0dFVCAmJiBkZWZpbmVkIEFDTF9BSVhfV0lQIC8qIEFJWCAq LworCisgICAgICBhY2xfdHlwZV90IHR5cGU7CisgICAgICBjaGFyIGFjbGJ1ZlsxMDI0XTsK KyAgICAgIHZvaWQgKmFjbCA9IGFjbGJ1ZjsKKyAgICAgIHNpemVfdCBhY2xzaXplID0gc2l6 ZW9mIChhY2xidWYpOworICAgICAgbW9kZV90IG1vZGU7CisKKyAgICAgIGZvciAoOzspCisg ICAgICAgIHsKKyAgICAgICAgICAvKiBUaGUgZG9jcyBzYXkgdGhhdCB0eXBlIGJlaW5nIDAg aXMgZXF1aXZhbGVudCB0byBBQ0xfQU5ZLCBidXQgaXQKKyAgICAgICAgICAgICBpcyBub3Qg dHJ1ZSwgaW4gQUlYIDUuMy4gICovCisgICAgICAgICAgdHlwZS51NjQgPSBBQ0xfQU5ZOwor ICAgICAgICAgIGlmIChhY2x4X2dldCAobmFtZSwgMCwgJnR5cGUsIGFjbGJ1ZiwgJmFjbHNp emUsICZtb2RlKSA+PSAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgaWYgKGVy cm5vID09IEVOT1NZUykKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgIGlmIChl cnJubyAhPSBFTk9TUEMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmIChhY2wg IT0gYWNsYnVmKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGludCBz YXZlZF9lcnJubyA9IGVycm5vOworICAgICAgICAgICAgICAgICAgZnJlZSAoYWNsKTsKKyAg ICAgICAgICAgICAgICAgIGVycm5vID0gc2F2ZWRfZXJybm87CisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAg YWNsc2l6ZSA9IDIgKiBhY2xzaXplOworICAgICAgICAgIGlmIChhY2wgIT0gYWNsYnVmKQor ICAgICAgICAgICAgZnJlZSAoYWNsKTsKKyAgICAgICAgICBhY2wgPSBtYWxsb2MgKGFjbHNp emUpOworICAgICAgICAgIGlmIChhY2wgPT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICBpZiAodHlwZS51NjQgPT0gQUNMX0FJ WEMpCisgICAgICAgIHsKKyAgICAgICAgICBpbnQgcmVzdWx0ID0gYWNsX25vbnRyaXZpYWwg KChzdHJ1Y3QgYWNsICopIGFjbCk7CisgICAgICAgICAgaWYgKGFjbCAhPSBhY2xidWYpCisg ICAgICAgICAgICBmcmVlIChhY2wpOworICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg ICAgIH0KKyAgICAgIGVsc2UgaWYgKHR5cGUudTY0ID09IEFDTF9ORlM0KQorICAgICAgICB7 CisgICAgICAgICAgaW50IHJlc3VsdCA9IGFjbF9uZnM0X25vbnRyaXZpYWwgKChuZnM0X2Fj bF9pbnRfdCAqKSBhY2wpOworICAgICAgICAgIGlmIChhY2wgIT0gYWNsYnVmKQorICAgICAg ICAgICAgZnJlZSAoYWNsKTsKKyAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9 CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvKiBBIG5ld2VyIHR5cGUgb2Yg QUNMIGhhcyBiZWVuIGludHJvZHVjZWQgaW4gdGhlIHN5c3RlbS4KKyAgICAgICAgICAgICBX ZSBzaG91bGQgYmV0dGVyIHN1cHBvcnQgaXQuICAqLworICAgICAgICAgIGlmIChhY2wgIT0g YWNsYnVmKQorICAgICAgICAgICAgZnJlZSAoYWNsKTsKKyAgICAgICAgICBlcnJubyA9IEVJ TlZBTDsKKyAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworIyBlbGlmIEhBVkVf U1RBVEFDTCAvKiBvbGRlciBBSVggKi8KKworICAgICAgdW5pb24geyBzdHJ1Y3QgYWNsIGE7 IGNoYXIgcm9vbVs0MDk2XTsgfSB1OworCisgICAgICBpZiAoc3RhdGFjbCAobmFtZSwgU1RY X05PUk1BTCwgJnUuYSwgc2l6ZW9mICh1KSkgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisK KyAgICAgIHJldHVybiBhY2xfbm9udHJpdmlhbCAoJnUuYSk7CisKKyMgZWxpZiBIQVZFX0FD TFNPUlQgLyogTm9uU3RvcCBLZXJuZWwgKi8KKworICAgICAgeworICAgICAgICBzdHJ1Y3Qg YWNsIGVudHJpZXNbTkFDTEVOVFJJRVNdOworICAgICAgICBpbnQgY291bnQ7CisKKyAgICAg ICAgY291bnQgPSBhY2wgKChjaGFyICopIG5hbWUsIEFDTF9HRVQsIE5BQ0xFTlRSSUVTLCBl bnRyaWVzKTsKKworICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICAgIHsKKyAgICAg ICAgICAgIGlmIChlcnJubyA9PSBFTk9TWVMgfHwgZXJybm8gPT0gRU5PVFNVUCkKKyAgICAg ICAgICAgICAgOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICByZXR1cm4gLTE7 CisgICAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChjb3VudCA9PSAwKQorICAgICAgICAg IHJldHVybiAwOworICAgICAgICBlbHNlIC8qIGNvdW50ID4gMCAqLworICAgICAgICAgIHsK KyAgICAgICAgICAgIGlmIChjb3VudCA+IE5BQ0xFTlRSSUVTKQorICAgICAgICAgICAgICAv KiBJZiBOQUNMRU5UUklFUyBjYW5ub3QgYmUgdHJ1c3RlZCwgdXNlIGR5bmFtaWMgbWVtb3J5 CisgICAgICAgICAgICAgICAgIGFsbG9jYXRpb24uICAqLworICAgICAgICAgICAgICBhYm9y dCAoKTsKKworICAgICAgICAgICAgLyogSWYgdGhlcmUgYXJlIG1vcmUgdGhhbiA0IGVudHJp ZXMsIHRoZXJlIGNhbm5vdCBiZSBvbmx5IHRoZQorICAgICAgICAgICAgICAgZm91ciBiYXNl IEFDTCBlbnRyaWVzLiAgKi8KKyAgICAgICAgICAgIGlmIChjb3VudCA+IDQpCisgICAgICAg ICAgICAgIHJldHVybiAxOworCisgICAgICAgICAgICByZXR1cm4gYWNsX25vbnRyaXZpYWwg KGNvdW50LCBlbnRyaWVzKTsKKyAgICAgICAgICB9CisgICAgICB9CisKKyMgZW5kaWYKKyAg ICB9CisjZW5kaWYKKworICByZXR1cm4gMDsKK30KCj09PSBtb2RpZmllZCBmaWxlICdsaWIv Z251bGliLm1rJwotLS0gbGliL2dudWxpYi5tawkyMDEzLTAzLTEzIDE4OjQyOjIyICswMDAw CisrKyBsaWIvZ251bGliLm1rCTIwMTMtMDQtMjcgMjA6MjQ6MTAgKzAwMDAKQEAgLTIxLDcg KzIxLDcgQEAKICMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9m IHRoYXQgcHJvZ3JhbS4KICMKICMgR2VuZXJhdGVkIGJ5IGdudWxpYi10b29sLgotIyBSZXBy b2R1Y2UgYnk6IGdudWxpYi10b29sIC0taW1wb3J0IC0tZGlyPS4gLS1saWI9bGliZ251IC0t c291cmNlLWJhc2U9bGliIC0tbTQtYmFzZT1tNCAtLWRvYy1iYXNlPWRvYyAtLXRlc3RzLWJh c2U9dGVzdHMgLS1hdXgtZGlyPWJ1aWxkLWF1eCAtLWF2b2lkPWR1cCAtLWF2b2lkPWVycm5v IC0tYXZvaWQ9ZmNoZGlyIC0tYXZvaWQ9ZmNudGwgLS1hdm9pZD1mc3RhdCAtLWF2b2lkPW1h bGxvYy1wb3NpeCAtLWF2b2lkPW1zdmMtaW52YWwgLS1hdm9pZD1tc3ZjLW5vdGhyb3cgLS1h dm9pZD1vcGVuIC0tYXZvaWQ9b3BlbmF0LWRpZSAtLWF2b2lkPW9wZW5kaXIgLS1hdm9pZD1y YWlzZSAtLWF2b2lkPXNhdmUtY3dkIC0tYXZvaWQ9c2VsZWN0IC0tYXZvaWQ9c2lncHJvY21h c2sgLS1hdm9pZD1zeXNfdHlwZXMgLS1hdm9pZD10aHJlYWRsaWIgLS1tYWtlZmlsZS1uYW1l PWdudWxpYi5tayAtLWNvbmRpdGlvbmFsLWRlcGVuZGVuY2llcyAtLW5vLWxpYnRvb2wgLS1t YWNyby1wcmVmaXg9Z2wgLS1uby12Yy1maWxlcyBhbGxvY2Etb3B0IGMtY3R5cGUgYy1zdHJj YXNlIGNhcmVhZGxpbmthdCBjbG9zZS1zdHJlYW0gY3J5cHRvL21kNSBjcnlwdG8vc2hhMSBj cnlwdG8vc2hhMjU2IGNyeXB0by9zaGE1MTIgZHRvYXN0ciBkdG90aW1lc3BlYyBkdXAyIGVu dmlyb24gZXhlY2luZm8gZmFjY2Vzc2F0IGZjbnRsLWggZmRhdGFzeW5jIGZkb3BlbmRpciBm aWxlbW9kZSBmc3RhdGF0IGZzeW5jIGdldGxvYWRhdmcgZ2V0b3B0LWdudSBnZXR0aW1lIGdl dHRpbWVvZmRheSBpZ25vcmUtdmFsdWUgaW50cHJvcHMgbGFyZ2VmaWxlIGxzdGF0IG1hbnl3 YXJuaW5ncyBtZW1yY2hyIG1rdGltZSBwc2VsZWN0IHB0aHJlYWRfc2lnbWFzayBwdXRlbnYg cmVhZGxpbmsgcmVhZGxpbmthdCBzaWcyc3RyIHNvY2tsZW4gc3RhdC10aW1lIHN0ZGFsaWdu IHN0ZGFyZyBzdGRib29sIHN0ZGlvIHN0cmZ0aW1lIHN0cnRvaW1heCBzdHJ0b3VtYXggc3lt bGluayBzeXNfc3RhdCBzeXNfdGltZSB0aW1lIHRpbWVyLXRpbWUgdGltZXNwZWMtYWRkIHRp bWVzcGVjLXN1YiB1bnNldGVudiB1dGltZW5zIHdhcm5pbmdzCisjIFJlcHJvZHVjZSBieTog Z251bGliLXRvb2wgLS1pbXBvcnQgLS1kaXI9LiAtLWxpYj1saWJnbnUgLS1zb3VyY2UtYmFz ZT1saWIgLS1tNC1iYXNlPW00IC0tZG9jLWJhc2U9ZG9jIC0tdGVzdHMtYmFzZT10ZXN0cyAt LWF1eC1kaXI9YnVpbGQtYXV4IC0tYXZvaWQ9ZHVwIC0tYXZvaWQ9ZXJybm8gLS1hdm9pZD1m Y2hkaXIgLS1hdm9pZD1mY250bCAtLWF2b2lkPWZzdGF0IC0tYXZvaWQ9bWFsbG9jLXBvc2l4 IC0tYXZvaWQ9bXN2Yy1pbnZhbCAtLWF2b2lkPW1zdmMtbm90aHJvdyAtLWF2b2lkPW9wZW4g LS1hdm9pZD1vcGVuYXQtZGllIC0tYXZvaWQ9b3BlbmRpciAtLWF2b2lkPXJhaXNlIC0tYXZv aWQ9c2F2ZS1jd2QgLS1hdm9pZD1zZWxlY3QgLS1hdm9pZD1zaWdwcm9jbWFzayAtLWF2b2lk PXN5c190eXBlcyAtLWF2b2lkPXRocmVhZGxpYiAtLW1ha2VmaWxlLW5hbWU9Z251bGliLm1r IC0tY29uZGl0aW9uYWwtZGVwZW5kZW5jaWVzIC0tbm8tbGlidG9vbCAtLW1hY3JvLXByZWZp eD1nbCAtLW5vLXZjLWZpbGVzIGFsbG9jYS1vcHQgYy1jdHlwZSBjLXN0cmNhc2UgY2FyZWFk bGlua2F0IGNsb3NlLXN0cmVhbSBjcnlwdG8vbWQ1IGNyeXB0by9zaGExIGNyeXB0by9zaGEy NTYgY3J5cHRvL3NoYTUxMiBkdG9hc3RyIGR0b3RpbWVzcGVjIGR1cDIgZW52aXJvbiBleGVj aW5mbyBmYWNjZXNzYXQgZmNudGwtaCBmZGF0YXN5bmMgZmRvcGVuZGlyIGZpbGVtb2RlIGZz dGF0YXQgZnN5bmMgZ2V0bG9hZGF2ZyBnZXRvcHQtZ251IGdldHRpbWUgZ2V0dGltZW9mZGF5 IGlnbm9yZS12YWx1ZSBpbnRwcm9wcyBsYXJnZWZpbGUgbHN0YXQgbWFueXdhcm5pbmdzIG1l bXJjaHIgbWt0aW1lIHBzZWxlY3QgcHRocmVhZF9zaWdtYXNrIHB1dGVudiBxYWNsIHJlYWRs aW5rIHJlYWRsaW5rYXQgc2lnMnN0ciBzb2NrbGVuIHN0YXQtdGltZSBzdGRhbGlnbiBzdGRh cmcgc3RkYm9vbCBzdGRpbyBzdHJmdGltZSBzdHJ0b2ltYXggc3RydG91bWF4IHN5bWxpbmsg c3lzX3N0YXQgc3lzX3RpbWUgdGltZSB0aW1lci10aW1lIHRpbWVzcGVjLWFkZCB0aW1lc3Bl Yy1zdWIgdW5zZXRlbnYgdXRpbWVucyB3YXJuaW5ncwogCiAKIE1PU1RMWUNMRUFORklMRVMg Kz0gY29yZSAqLnN0YWNrZHVtcApAQCAtNTYxLDYgKzU2MSwxNiBAQAogCiAjIyBlbmQgICBn bnVsaWIgbW9kdWxlIHB1dGVudgogCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHFhY2wKKwor bGliZ251X2FfU09VUkNFUyArPSBhY2wtZXJybm8tdmFsaWQuYyBmaWxlLWhhcy1hY2wuYyBx Y29weS1hY2wuYyBxc2V0LWFjbC5jCisKK0VYVFJBX0RJU1QgKz0gYWNsLWludGVybmFsLmgg YWNsLmggYWNsX2VudHJpZXMuYworCitFWFRSQV9saWJnbnVfYV9TT1VSQ0VTICs9IGFjbF9l bnRyaWVzLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBxYWNsCisKICMjIGJlZ2luIGdu dWxpYiBtb2R1bGUgcmVhZGxpbmsKIAogCgo9PT0gYWRkZWQgZmlsZSAnbGliL3Fjb3B5LWFj bC5jJwotLS0gbGliL3Fjb3B5LWFjbC5jCTE5NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDAKKysr IGxpYi9xY29weS1hY2wuYwkyMDEzLTA0LTE3IDA1OjIxOjMzICswMDAwCkBAIC0wLDAgKzEs NTgzIEBACisvKiBjb3B5LWFjbC5jIC0gY29weSBhY2Nlc3MgY29udHJvbCBsaXN0IGZyb20g b25lIGZpbGUgdG8gYW5vdGhlciBmaWxlCisKKyAgIENvcHlyaWdodCAoQykgMjAwMi0yMDAz LCAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJv Z3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKwor ICAgV3JpdHRlbiBieSBQYXVsIEVnZ2VydCwgQW5kcmVhcyBHcsO8bmJhY2hlciwgYW5kIEJy dW5vIEhhaWJsZS4gICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2luY2x1ZGUgImFj bC5oIgorCisjaW5jbHVkZSAiYWNsLWludGVybmFsLmgiCisKKworLyogQ29weSBhY2Nlc3Mg Y29udHJvbCBsaXN0cyBmcm9tIG9uZSBmaWxlIHRvIGFub3RoZXIuIElmIFNPVVJDRV9ERVND IGlzCisgICBhIHZhbGlkIGZpbGUgZGVzY3JpcHRvciwgdXNlIGZpbGUgZGVzY3JpcHRvciBv cGVyYXRpb25zLCBlbHNlIHVzZQorICAgZmlsZW5hbWUgYmFzZWQgb3BlcmF0aW9ucyBvbiBT UkNfTkFNRS4gTGlrZXdpc2UgZm9yIERFU1RfREVTQyBhbmQKKyAgIERTVF9OQU1FLgorICAg SWYgYWNjZXNzIGNvbnRyb2wgbGlzdHMgYXJlIG5vdCBhdmFpbGFibGUsIGZjaG1vZCB0aGUg dGFyZ2V0IGZpbGUgdG8KKyAgIE1PREUuICBBbHNvIHNldHMgdGhlIG5vbi1wZXJtaXNzaW9u IGJpdHMgb2YgdGhlIGRlc3RpbmF0aW9uIGZpbGUKKyAgIChTX0lTVUlELCBTX0lTR0lELCBT X0lTVlRYKSB0byB0aG9zZSBmcm9tIE1PREUgaWYgYW55IGFyZSBzZXQuCisgICBSZXR1cm4g MCBpZiBzdWNjZXNzZnVsLgorICAgUmV0dXJuIC0yIGFuZCBzZXQgZXJybm8gZm9yIGFuIGVy cm9yIHJlbGF0aW5nIHRvIHRoZSBzb3VyY2UgZmlsZS4KKyAgIFJldHVybiAtMSBhbmQgc2V0 IGVycm5vIGZvciBhbiBlcnJvciByZWxhdGluZyB0byB0aGUgZGVzdGluYXRpb24gZmlsZS4g ICovCisKK2ludAorcWNvcHlfYWNsIChjb25zdCBjaGFyICpzcmNfbmFtZSwgaW50IHNvdXJj ZV9kZXNjLCBjb25zdCBjaGFyICpkc3RfbmFtZSwKKyAgICAgICAgICAgaW50IGRlc3RfZGVz YywgbW9kZV90IG1vZGUpCit7CisjaWYgVVNFX0FDTCAmJiBIQVZFX0FDTF9HRVRfRklMRQor ICAvKiBQT1NJWCAxMDAzLjFlIChkcmFmdCAxNyAtLSBhYmFuZG9uZWQpIHNwZWNpZmljIHZl cnNpb24uICAqLworICAvKiBMaW51eCwgRnJlZUJTRCwgTWFjIE9TIFgsIElSSVgsIFRydTY0 ICovCisjIGlmICFIQVZFX0FDTF9UWVBFX0VYVEVOREVECisgIC8qIExpbnV4LCBGcmVlQlNE LCBJUklYLCBUcnU2NCAqLworCisgIGFjbF90IGFjbDsKKyAgaW50IHJldDsKKworICBpZiAo SEFWRV9BQ0xfR0VUX0ZEICYmIHNvdXJjZV9kZXNjICE9IC0xKQorICAgIGFjbCA9IGFjbF9n ZXRfZmQgKHNvdXJjZV9kZXNjKTsKKyAgZWxzZQorICAgIGFjbCA9IGFjbF9nZXRfZmlsZSAo c3JjX25hbWUsIEFDTF9UWVBFX0FDQ0VTUyk7CisgIGlmIChhY2wgPT0gTlVMTCkKKyAgICB7 CisgICAgICBpZiAoISBhY2xfZXJybm9fdmFsaWQgKGVycm5vKSkKKyAgICAgICAgcmV0dXJu IHFzZXRfYWNsIChkc3RfbmFtZSwgZGVzdF9kZXNjLCBtb2RlKTsKKyAgICAgIGVsc2UKKyAg ICAgICAgcmV0dXJuIC0yOworICAgIH0KKworICBpZiAoSEFWRV9BQ0xfU0VUX0ZEICYmIGRl c3RfZGVzYyAhPSAtMSkKKyAgICByZXQgPSBhY2xfc2V0X2ZkIChkZXN0X2Rlc2MsIGFjbCk7 CisgIGVsc2UKKyAgICByZXQgPSBhY2xfc2V0X2ZpbGUgKGRzdF9uYW1lLCBBQ0xfVFlQRV9B Q0NFU1MsIGFjbCk7CisgIGlmIChyZXQgIT0gMCkKKyAgICB7CisgICAgICBpbnQgc2F2ZWRf ZXJybm8gPSBlcnJubzsKKworICAgICAgaWYgKCEgYWNsX2Vycm5vX3ZhbGlkIChlcnJubykg JiYgIWFjbF9hY2Nlc3Nfbm9udHJpdmlhbCAoYWNsKSkKKyAgICAgICAgeworICAgICAgICAg IGFjbF9mcmVlIChhY2wpOworICAgICAgICAgIHJldHVybiBjaG1vZF9vcl9mY2htb2QgKGRz dF9uYW1lLCBkZXN0X2Rlc2MsIG1vZGUpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAg ICAgIHsKKyAgICAgICAgICBhY2xfZnJlZSAoYWNsKTsKKyAgICAgICAgICBjaG1vZF9vcl9m Y2htb2QgKGRzdF9uYW1lLCBkZXN0X2Rlc2MsIG1vZGUpOworICAgICAgICAgIGVycm5vID0g c2F2ZWRfZXJybm87CisgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQor ICBlbHNlCisgICAgYWNsX2ZyZWUgKGFjbCk7CisKKyAgaWYgKCFNT0RFX0lOU0lERV9BQ0wg fHwgKG1vZGUgJiAoU19JU1VJRCB8IFNfSVNHSUQgfCBTX0lTVlRYKSkpCisgICAgeworICAg ICAgLyogV2UgZGlkIG5vdCBjYWxsIGNobW9kIHNvIGZhciwgYW5kIGVpdGhlciB0aGUgbW9k ZSBhbmQgdGhlIEFDTCBhcmUKKyAgICAgICAgIHNlcGFyYXRlIG9yIHNwZWNpYWwgYml0cyBh cmUgdG8gYmUgc2V0IHdoaWNoIGRvbid0IGZpdCBpbnRvIEFDTHMuICAqLworCisgICAgICBp ZiAoY2htb2Rfb3JfZmNobW9kIChkc3RfbmFtZSwgZGVzdF9kZXNjLCBtb2RlKSAhPSAwKQor ICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIGlmIChTX0lTRElSIChtb2RlKSkKKyAg ICB7CisgICAgICBhY2wgPSBhY2xfZ2V0X2ZpbGUgKHNyY19uYW1lLCBBQ0xfVFlQRV9ERUZB VUxUKTsKKyAgICAgIGlmIChhY2wgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0yOworCisg ICAgICBpZiAoYWNsX3NldF9maWxlIChkc3RfbmFtZSwgQUNMX1RZUEVfREVGQVVMVCwgYWNs KSkKKyAgICAgICAgeworICAgICAgICAgIGludCBzYXZlZF9lcnJubyA9IGVycm5vOworCisg ICAgICAgICAgYWNsX2ZyZWUgKGFjbCk7CisgICAgICAgICAgZXJybm8gPSBzYXZlZF9lcnJu bzsKKyAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAg ICAgYWNsX2ZyZWUgKGFjbCk7CisgICAgfQorICByZXR1cm4gMDsKKworIyBlbHNlIC8qIEhB VkVfQUNMX1RZUEVfRVhURU5ERUQgKi8KKyAgLyogTWFjIE9TIFggKi8KKworICAvKiBPbiBN YWMgT1MgWCwgIGFjbF9nZXRfZmlsZSAobmFtZSwgQUNMX1RZUEVfQUNDRVNTKQorICAgICBh bmQgICAgICAgICAgIGFjbF9nZXRfZmlsZSAobmFtZSwgQUNMX1RZUEVfREVGQVVMVCkKKyAg ICAgYWx3YXlzIHJldHVybiBOVUxMIC8gRUlOVkFMLiAgWW91IGhhdmUgdG8gdXNlCisgICAg ICAgICAgICAgICAgICAgYWNsX2dldF9maWxlIChuYW1lLCBBQ0xfVFlQRV9FWFRFTkRFRCkK KyAgICAgb3IgICAgICAgICAgICBhY2xfZ2V0X2ZkIChvcGVuIChuYW1lLCAuLi4pKQorICAg ICB0byByZXRyaWV2ZSBhbiBBQ0wuCisgICAgIE9uIHRoZSBvdGhlciBoYW5kLAorICAgICAg ICAgICAgICAgICAgIGFjbF9zZXRfZmlsZSAobmFtZSwgQUNMX1RZUEVfQUNDRVNTLCBhY2wp CisgICAgIGFuZCAgICAgICAgICAgYWNsX3NldF9maWxlIChuYW1lLCBBQ0xfVFlQRV9ERUZB VUxULCBhY2wpCisgICAgIGhhdmUgdGhlIHNhbWUgZWZmZWN0IGFzCisgICAgICAgICAgICAg ICAgICAgYWNsX3NldF9maWxlIChuYW1lLCBBQ0xfVFlQRV9FWFRFTkRFRCwgYWNsKToKKyAg ICAgRWFjaCBvZiB0aGVzZSBjYWxscyBzZXRzIHRoZSBmaWxlJ3MgQUNMLiAgKi8KKworICBh Y2xfdCBhY2w7CisgIGludCByZXQ7CisKKyAgaWYgKEhBVkVfQUNMX0dFVF9GRCAmJiBzb3Vy Y2VfZGVzYyAhPSAtMSkKKyAgICBhY2wgPSBhY2xfZ2V0X2ZkIChzb3VyY2VfZGVzYyk7Cisg IGVsc2UKKyAgICBhY2wgPSBhY2xfZ2V0X2ZpbGUgKHNyY19uYW1lLCBBQ0xfVFlQRV9FWFRF TkRFRCk7CisgIGlmIChhY2wgPT0gTlVMTCkKKyAgICB7CisgICAgICBpZiAoIWFjbF9lcnJu b192YWxpZCAoZXJybm8pKQorICAgICAgICByZXR1cm4gcXNldF9hY2wgKGRzdF9uYW1lLCBk ZXN0X2Rlc2MsIG1vZGUpOworICAgICAgZWxzZQorICAgICAgICByZXR1cm4gLTI7CisgICAg fQorCisgIGlmIChIQVZFX0FDTF9TRVRfRkQgJiYgZGVzdF9kZXNjICE9IC0xKQorICAgIHJl dCA9IGFjbF9zZXRfZmQgKGRlc3RfZGVzYywgYWNsKTsKKyAgZWxzZQorICAgIHJldCA9IGFj bF9zZXRfZmlsZSAoZHN0X25hbWUsIEFDTF9UWVBFX0VYVEVOREVELCBhY2wpOworICBpZiAo cmV0ICE9IDApCisgICAgeworICAgICAgaW50IHNhdmVkX2Vycm5vID0gZXJybm87CisKKyAg ICAgIGlmICghYWNsX2Vycm5vX3ZhbGlkIChzYXZlZF9lcnJubykgJiYgIWFjbF9leHRlbmRl ZF9ub250cml2aWFsIChhY2wpKQorICAgICAgICB7CisgICAgICAgICAgYWNsX2ZyZWUgKGFj bCk7CisgICAgICAgICAgcmV0dXJuIGNobW9kX29yX2ZjaG1vZCAoZHN0X25hbWUsIGRlc3Rf ZGVzYywgbW9kZSk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAg ICAgIGFjbF9mcmVlIChhY2wpOworICAgICAgICAgIGNobW9kX29yX2ZjaG1vZCAoZHN0X25h bWUsIGRlc3RfZGVzYywgbW9kZSk7CisgICAgICAgICAgZXJybm8gPSBzYXZlZF9lcnJubzsK KyAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisgIGVsc2UKKyAgICBh Y2xfZnJlZSAoYWNsKTsKKworICAvKiBTaW5jZSAhTU9ERV9JTlNJREVfQUNMLCB3ZSBoYXZl IHRvIGNhbGwgY2htb2QgZXhwbGljaXRseS4gICovCisgIHJldHVybiBjaG1vZF9vcl9mY2ht b2QgKGRzdF9uYW1lLCBkZXN0X2Rlc2MsIG1vZGUpOworCisjIGVuZGlmCisKKyNlbGlmIFVT RV9BQ0wgJiYgZGVmaW5lZCBHRVRBQ0wgLyogU29sYXJpcywgQ3lnd2luLCBub3QgSFAtVVgg Ki8KKworICAvKiBTb2xhcmlzIDIuNSB0aHJvdWdoIFNvbGFyaXMgMTAsIEN5Z3dpbiwgYW5k IGNvbnRlbXBvcmFuZW91cyB2ZXJzaW9ucworICAgICBvZiBVbml4d2FyZS4gIFRoZSBhY2wo KSBjYWxsIHJldHVybnMgdGhlIGFjY2VzcyBhbmQgZGVmYXVsdCBBQ0wgYm90aAorICAgICBh dCBvbmNlLiAgKi8KKyMgaWZkZWYgQUNFX0dFVEFDTAorICBpbnQgYWNlX2NvdW50OworICBh Y2VfdCAqYWNlX2VudHJpZXM7CisjIGVuZGlmCisgIGludCBjb3VudDsKKyAgYWNsZW50X3Qg KmVudHJpZXM7CisgIGludCBkaWRfY2htb2Q7CisgIGludCBzYXZlZF9lcnJubzsKKyAgaW50 IHJldDsKKworIyBpZmRlZiBBQ0VfR0VUQUNMCisgIC8qIFNvbGFyaXMgYWxzbyBoYXMgYSBk aWZmZXJlbnQgdmFyaWFudCBvZiBBQ0xzLCB1c2VkIGluIFpGUyBhbmQgTkZTdjQKKyAgICAg ZmlsZSBzeXN0ZW1zICh3aGVyZWFzIHRoZSBvdGhlciBvbmVzIGFyZSB1c2VkIGluIFVGUyBm aWxlIHN5c3RlbXMpLgorICAgICBUaGVyZSBpcyBhbiBBUEkKKyAgICAgICBwYXRoY29uZiAo bmFtZSwgX1BDX0FDTF9FTkFCTEVEKQorICAgICAgIGZwYXRoY29uZiAoZGVzYywgX1BDX0FD TF9FTkFCTEVEKQorICAgICB0aGF0IGFsbG93cyB0byBkZXRlcm1pbmUgd2hpY2ggb2YgdGhl IHR3byBraW5kcyBvZiBBQ0xzIGlzIHN1cHBvcnRlZAorICAgICBmb3IgdGhlIGdpdmVuIGZp bGUuICBCdXQgc29tZSBmaWxlIHN5c3RlbXMgbWF5IGltcGxlbWVudCB0aGlzIGNhbGwKKyAg ICAgaW5jb3JyZWN0bHksIHNvIGJldHRlciBub3QgdXNlIGl0LgorICAgICBXaGVuIGZldGNo aW5nIHRoZSBzb3VyY2UgQUNMLCB3ZSBzaW1wbHkgZmV0Y2ggYm90aCBBQ0wgdHlwZXMuCisg ICAgIFdoZW4gc2V0dGluZyB0aGUgZGVzdGluYXRpb24gQUNMLCB3ZSB0cnkgZWl0aGVyIEFD TCB0eXBlcywgYXNzdW1pbmcKKyAgICAgdGhhdCB0aGUga2VybmVsIHdpbGwgdHJhbnNsYXRl IHRoZSBBQ0wgZnJvbSBvbmUgZm9ybSB0byB0aGUgb3RoZXIuCisgICAgIChTZWUgaW4gPGh0 dHA6Ly9kb2NzLnN1bi5jb20vYXBwL2RvY3MvZG9jLzgxOS0yMjQxLzZuNGh1YzdpYT9sPWVu JmE9dmlldz4KKyAgICAgdGhlIGRlc2NyaXB0aW9uIG9mIEVOT1RTVVAuKSAgKi8KKyAgZm9y ICg7OykKKyAgICB7CisgICAgICBhY2VfY291bnQgPSAoc291cmNlX2Rlc2MgIT0gLTEKKyAg ICAgICAgICAgICAgICAgICA/IGZhY2wgKHNvdXJjZV9kZXNjLCBBQ0VfR0VUQUNMQ05ULCAw LCBOVUxMKQorICAgICAgICAgICAgICAgICAgIDogYWNsIChzcmNfbmFtZSwgQUNFX0dFVEFD TENOVCwgMCwgTlVMTCkpOworCisgICAgICBpZiAoYWNlX2NvdW50IDwgMCkKKyAgICAgICAg eworICAgICAgICAgIGlmIChlcnJubyA9PSBFTk9TWVMgfHwgZXJybm8gPT0gRUlOVkFMKQor ICAgICAgICAgICAgeworICAgICAgICAgICAgICBhY2VfY291bnQgPSAwOworICAgICAgICAg ICAgICBhY2VfZW50cmllcyA9IE5VTEw7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAtMjsKKyAgICAg ICAgfQorCisgICAgICBpZiAoYWNlX2NvdW50ID09IDApCisgICAgICAgIHsKKyAgICAgICAg ICBhY2VfZW50cmllcyA9IE5VTEw7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor ICAgICAgYWNlX2VudHJpZXMgPSAoYWNlX3QgKikgbWFsbG9jIChhY2VfY291bnQgKiBzaXpl b2YgKGFjZV90KSk7CisgICAgICBpZiAoYWNlX2VudHJpZXMgPT0gTlVMTCkKKyAgICAgICAg eworICAgICAgICAgIGVycm5vID0gRU5PTUVNOworICAgICAgICAgIHJldHVybiAtMjsKKyAg ICAgICAgfQorCisgICAgICByZXQgPSAoc291cmNlX2Rlc2MgIT0gLTEKKyAgICAgICAgICAg ICA/IGZhY2wgKHNvdXJjZV9kZXNjLCBBQ0VfR0VUQUNMLCBhY2VfY291bnQsIGFjZV9lbnRy aWVzKQorICAgICAgICAgICAgIDogYWNsIChzcmNfbmFtZSwgQUNFX0dFVEFDTCwgYWNlX2Nv dW50LCBhY2VfZW50cmllcykpOworICAgICAgaWYgKHJldCA8IDApCisgICAgICAgIHsKKyAg ICAgICAgICBmcmVlIChhY2VfZW50cmllcyk7CisgICAgICAgICAgaWYgKGVycm5vID09IEVO T1NZUyB8fCBlcnJubyA9PSBFSU5WQUwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg IGFjZV9jb3VudCA9IDA7CisgICAgICAgICAgICAgIGFjZV9lbnRyaWVzID0gTlVMTDsKKyAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAg ICAgICAgICAgcmV0dXJuIC0yOworICAgICAgICB9CisgICAgICBpZiAocmV0ID09IGFjZV9j b3VudCkKKyAgICAgICAgYnJlYWs7CisgICAgICAvKiBIdWg/IFRoZSBudW1iZXIgb2YgQUNM IGVudHJpZXMgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCBjYWxsLgorICAgICAgICAgUmVwZWF0 LiAgKi8KKyAgICB9CisjIGVuZGlmCisKKyAgZm9yICg7OykKKyAgICB7CisgICAgICBjb3Vu dCA9IChzb3VyY2VfZGVzYyAhPSAtMQorICAgICAgICAgICAgICAgPyBmYWNsIChzb3VyY2Vf ZGVzYywgR0VUQUNMQ05ULCAwLCBOVUxMKQorICAgICAgICAgICAgICAgOiBhY2wgKHNyY19u YW1lLCBHRVRBQ0xDTlQsIDAsIE5VTEwpKTsKKworICAgICAgaWYgKGNvdW50IDwgMCkKKyAg ICAgICAgeworICAgICAgICAgIGlmIChlcnJubyA9PSBFTk9TWVMgfHwgZXJybm8gPT0gRU5P VFNVUCB8fCBlcnJubyA9PSBFT1BOT1RTVVBQKQorICAgICAgICAgICAgeworICAgICAgICAg ICAgICBjb3VudCA9IDA7CisgICAgICAgICAgICAgIGVudHJpZXMgPSBOVUxMOworICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAg ICAgICByZXR1cm4gLTI7CisgICAgICAgIH0KKworICAgICAgaWYgKGNvdW50ID09IDApCisg ICAgICAgIHsKKyAgICAgICAgICBlbnRyaWVzID0gTlVMTDsKKyAgICAgICAgICBicmVhazsK KyAgICAgICAgfQorCisgICAgICBlbnRyaWVzID0gKGFjbGVudF90ICopIG1hbGxvYyAoY291 bnQgKiBzaXplb2YgKGFjbGVudF90KSk7CisgICAgICBpZiAoZW50cmllcyA9PSBOVUxMKQor ICAgICAgICB7CisgICAgICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgICAgICAgcmV0dXJu IC0yOworICAgICAgICB9CisKKyAgICAgIGlmICgoc291cmNlX2Rlc2MgIT0gLTEKKyAgICAg ICAgICAgPyBmYWNsIChzb3VyY2VfZGVzYywgR0VUQUNMLCBjb3VudCwgZW50cmllcykKKyAg ICAgICAgICAgOiBhY2wgKHNyY19uYW1lLCBHRVRBQ0wsIGNvdW50LCBlbnRyaWVzKSkKKyAg ICAgICAgICA9PSBjb3VudCkKKyAgICAgICAgYnJlYWs7CisgICAgICAvKiBIdWg/IFRoZSBu dW1iZXIgb2YgQUNMIGVudHJpZXMgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCBjYWxsLgorICAg ICAgICAgUmVwZWF0LiAgKi8KKyAgICB9CisKKyAgLyogSXMgdGhlcmUgYW4gQUNMIG9mIGVp dGhlciBraW5kPyAgKi8KKyMgaWZkZWYgQUNFX0dFVEFDTAorICBpZiAoYWNlX2NvdW50ID09 IDApCisjIGVuZGlmCisgICAgaWYgKGNvdW50ID09IDApCisgICAgICByZXR1cm4gcXNldF9h Y2wgKGRzdF9uYW1lLCBkZXN0X2Rlc2MsIG1vZGUpOworCisgIGRpZF9jaG1vZCA9IDA7IC8q IHNldCB0byAxIG9uY2UgdGhlIG1vZGUgYml0cyBpbiAwNzc3IGhhdmUgYmVlbiBzZXQgKi8K KyAgc2F2ZWRfZXJybm8gPSAwOyAvKiB0aGUgZmlyc3Qgbm9uLWlnbm9yYWJsZSBlcnJvciBj b2RlICovCisKKyAgaWYgKCFNT0RFX0lOU0lERV9BQ0wpCisgICAgeworICAgICAgLyogT24g Q3lnd2luLCBpdCBpcyBuZWNlc3NhcnkgdG8gY2FsbCBjaG1vZCBiZWZvcmUgYWNsLCBiZWNh dXNlCisgICAgICAgICBjaG1vZCBjYW4gY2hhbmdlIHRoZSBjb250ZW50cyBvZiB0aGUgQUNM IChpbiB3YXlzIHRoYXQgZG9uJ3QKKyAgICAgICAgIGNoYW5nZSB0aGUgYWxsb3dlZCBhY2Nl c3NlcywgYnV0IHN0aWxsIHZpc2libGUpLiAgKi8KKyAgICAgIGlmIChjaG1vZF9vcl9mY2ht b2QgKGRzdF9uYW1lLCBkZXN0X2Rlc2MsIG1vZGUpICE9IDApCisgICAgICAgIHNhdmVkX2Vy cm5vID0gZXJybm87CisgICAgICBkaWRfY2htb2QgPSAxOworICAgIH0KKworICAvKiBJZiBi b3RoIGFjZV9lbnRyaWVzIGFuZCBlbnRyaWVzIGFyZSBhdmFpbGFibGUsIHRyeSBTRVRBQ0wg YmVmb3JlCisgICAgIEFDRV9TRVRBQ0wsIGJlY2F1c2UgU0VUQUNMIGNhbm5vdCBmYWlsIHdp dGggRU5PVFNVUCB3aGVyZWFzIEFDRV9TRVRBQ0wKKyAgICAgY2FuLiAgKi8KKworICBpZiAo Y291bnQgPiAwKQorICAgIHsKKyAgICAgIHJldCA9IChkZXN0X2Rlc2MgIT0gLTEKKyAgICAg ICAgICAgICA/IGZhY2wgKGRlc3RfZGVzYywgU0VUQUNMLCBjb3VudCwgZW50cmllcykKKyAg ICAgICAgICAgICA6IGFjbCAoZHN0X25hbWUsIFNFVEFDTCwgY291bnQsIGVudHJpZXMpKTsK KyAgICAgIGlmIChyZXQgPCAwICYmIHNhdmVkX2Vycm5vID09IDApCisgICAgICAgIHsKKyAg ICAgICAgICBzYXZlZF9lcnJubyA9IGVycm5vOworICAgICAgICAgIGlmICgoZXJybm8gPT0g RU5PU1lTIHx8IGVycm5vID09IEVPUE5PVFNVUFAgfHwgZXJybm8gPT0gRUlOVkFMKQorICAg ICAgICAgICAgICAmJiAhYWNsX25vbnRyaXZpYWwgKGNvdW50LCBlbnRyaWVzKSkKKyAgICAg ICAgICAgIHNhdmVkX2Vycm5vID0gMDsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAg ICBkaWRfY2htb2QgPSAxOworICAgIH0KKyAgZnJlZSAoZW50cmllcyk7CisKKyMgaWZkZWYg QUNFX0dFVEFDTAorICBpZiAoYWNlX2NvdW50ID4gMCkKKyAgICB7CisgICAgICByZXQgPSAo ZGVzdF9kZXNjICE9IC0xCisgICAgICAgICAgICAgPyBmYWNsIChkZXN0X2Rlc2MsIEFDRV9T RVRBQ0wsIGFjZV9jb3VudCwgYWNlX2VudHJpZXMpCisgICAgICAgICAgICAgOiBhY2wgKGRz dF9uYW1lLCBBQ0VfU0VUQUNMLCBhY2VfY291bnQsIGFjZV9lbnRyaWVzKSk7CisgICAgICBp ZiAocmV0IDwgMCAmJiBzYXZlZF9lcnJubyA9PSAwKQorICAgICAgICB7CisgICAgICAgICAg c2F2ZWRfZXJybm8gPSBlcnJubzsKKyAgICAgICAgICBpZiAoKGVycm5vID09IEVOT1NZUyB8 fCBlcnJubyA9PSBFSU5WQUwgfHwgZXJybm8gPT0gRU5PVFNVUCkKKyAgICAgICAgICAgICAg JiYgIWFjbF9hY2Vfbm9udHJpdmlhbCAoYWNlX2NvdW50LCBhY2VfZW50cmllcykpCisgICAg ICAgICAgICBzYXZlZF9lcnJubyA9IDA7CisgICAgICAgIH0KKyAgICB9CisgIGZyZWUgKGFj ZV9lbnRyaWVzKTsKKyMgZW5kaWYKKworICBpZiAoTU9ERV9JTlNJREVfQUNMCisgICAgICAm JiBkaWRfY2htb2QgPD0gKChtb2RlICYgKFNfSVNVSUQgfCBTX0lTR0lEIHwgU19JU1ZUWCkp ID8gMSA6IDApKQorICAgIHsKKyAgICAgIC8qIFdlIGRpZCBub3QgY2FsbCBjaG1vZCBzbyBm YXIsIGFuZCBlaXRoZXIgdGhlIG1vZGUgYW5kIHRoZSBBQ0wgYXJlCisgICAgICAgICBzZXBh cmF0ZSBvciBzcGVjaWFsIGJpdHMgYXJlIHRvIGJlIHNldCB3aGljaCBkb24ndCBmaXQgaW50 byBBQ0xzLiAgKi8KKworICAgICAgaWYgKGNobW9kX29yX2ZjaG1vZCAoZHN0X25hbWUsIGRl c3RfZGVzYywgbW9kZSkgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgIGlmIChzYXZlZF9l cnJubyA9PSAwKQorICAgICAgICAgICAgc2F2ZWRfZXJybm8gPSBlcnJubzsKKyAgICAgICAg fQorICAgIH0KKworICBpZiAoc2F2ZWRfZXJybm8pCisgICAgeworICAgICAgZXJybm8gPSBz YXZlZF9lcnJubzsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIHJldHVybiAwOworCisj ZWxpZiBVU0VfQUNMICYmIEhBVkVfR0VUQUNMIC8qIEhQLVVYICovCisKKyAgc3RydWN0IGFj bF9lbnRyeSBlbnRyaWVzW05BQ0xFTlRSSUVTXTsKKyAgaW50IGNvdW50OworIyBpZiBIQVZF X0FDTFZfSAorICBzdHJ1Y3QgYWNsIGFjbHZfZW50cmllc1tOQUNMVkVOVFJJRVNdOworICBp bnQgYWNsdl9jb3VudDsKKyMgZW5kaWYKKyAgaW50IGRpZF9jaG1vZDsKKyAgaW50IHNhdmVk X2Vycm5vOworICBpbnQgcmV0OworCisgIGNvdW50ID0gKHNvdXJjZV9kZXNjICE9IC0xCisg ICAgICAgICAgID8gZmdldGFjbCAoc291cmNlX2Rlc2MsIE5BQ0xFTlRSSUVTLCBlbnRyaWVz KQorICAgICAgICAgICA6IGdldGFjbCAoc3JjX25hbWUsIE5BQ0xFTlRSSUVTLCBlbnRyaWVz KSk7CisKKyAgaWYgKGNvdW50IDwgMCkKKyAgICB7CisgICAgICBpZiAoZXJybm8gPT0gRU5P U1lTIHx8IGVycm5vID09IEVPUE5PVFNVUFAgfHwgZXJybm8gPT0gRU5PVFNVUCkKKyAgICAg ICAgY291bnQgPSAwOworICAgICAgZWxzZQorICAgICAgICByZXR1cm4gLTI7CisgICAgfQor ICBlbHNlIGlmIChjb3VudCA+IDApCisgICAgeworICAgICAgaWYgKGNvdW50ID4gTkFDTEVO VFJJRVMpCisgICAgICAgIC8qIElmIE5BQ0xFTlRSSUVTIGNhbm5vdCBiZSB0cnVzdGVkLCB1 c2UgZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbi4gICovCisgICAgICAgIGFib3J0ICgpOwor ICAgIH0KKworIyBpZiBIQVZFX0FDTFZfSAorICBhY2x2X2NvdW50ID0gYWNsICgoY2hhciAq KSBzcmNfbmFtZSwgQUNMX0dFVCwgTkFDTFZFTlRSSUVTLCBhY2x2X2VudHJpZXMpOworCisg IGlmIChhY2x2X2NvdW50IDwgMCkKKyAgICB7CisgICAgICBpZiAoZXJybm8gPT0gRU5PU1lT IHx8IGVycm5vID09IEVPUE5PVFNVUFAgfHwgZXJybm8gPT0gRUlOVkFMKQorICAgICAgICBj b3VudCA9IDA7CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiAtMjsKKyAgICB9CisgIGVs c2UgaWYgKGFjbHZfY291bnQgPiAwKQorICAgIHsKKyAgICAgIGlmIChhY2x2X2NvdW50ID4g TkFDTFZFTlRSSUVTKQorICAgICAgICAvKiBJZiBOQUNMVkVOVFJJRVMgY2Fubm90IGJlIHRy dXN0ZWQsIHVzZSBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uLiAgKi8KKyAgICAgICAgYWJv cnQgKCk7CisgICAgfQorIyBlbmRpZgorCisgIGlmIChjb3VudCA9PSAwKQorIyBpZiBIQVZF X0FDTFZfSAorICAgIGlmIChhY2x2X2NvdW50ID09IDApCisjIGVuZGlmCisgICAgICByZXR1 cm4gcXNldF9hY2wgKGRzdF9uYW1lLCBkZXN0X2Rlc2MsIG1vZGUpOworCisgIGRpZF9jaG1v ZCA9IDA7IC8qIHNldCB0byAxIG9uY2UgdGhlIG1vZGUgYml0cyBpbiAwNzc3IGhhdmUgYmVl biBzZXQgKi8KKyAgc2F2ZWRfZXJybm8gPSAwOyAvKiB0aGUgZmlyc3Qgbm9uLWlnbm9yYWJs ZSBlcnJvciBjb2RlICovCisKKyAgaWYgKGNvdW50ID4gMCkKKyAgICB7CisgICAgICByZXQg PSAoZGVzdF9kZXNjICE9IC0xCisgICAgICAgICAgICAgPyBmc2V0YWNsIChkZXN0X2Rlc2Ms IGNvdW50LCBlbnRyaWVzKQorICAgICAgICAgICAgIDogc2V0YWNsIChkc3RfbmFtZSwgY291 bnQsIGVudHJpZXMpKTsKKyAgICAgIGlmIChyZXQgPCAwICYmIHNhdmVkX2Vycm5vID09IDAp CisgICAgICAgIHsKKyAgICAgICAgICBzYXZlZF9lcnJubyA9IGVycm5vOworICAgICAgICAg IGlmIChlcnJubyA9PSBFTk9TWVMgfHwgZXJybm8gPT0gRU9QTk9UU1VQUCB8fCBlcnJubyA9 PSBFTk9UU1VQKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdCBz b3VyY2Vfc3RhdGJ1ZjsKKworICAgICAgICAgICAgICBpZiAoKHNvdXJjZV9kZXNjICE9IC0x CisgICAgICAgICAgICAgICAgICAgPyBmc3RhdCAoc291cmNlX2Rlc2MsICZzb3VyY2Vfc3Rh dGJ1ZikKKyAgICAgICAgICAgICAgICAgICA6IHN0YXQgKHNyY19uYW1lLCAmc291cmNlX3N0 YXRidWYpKSA9PSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGlm ICghYWNsX25vbnRyaXZpYWwgKGNvdW50LCBlbnRyaWVzLCAmc291cmNlX3N0YXRidWYpKQor ICAgICAgICAgICAgICAgICAgICBzYXZlZF9lcnJubyA9IDA7CisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2F2ZWRfZXJybm8gPSBl cnJubzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBk aWRfY2htb2QgPSAxOworICAgIH0KKworIyBpZiBIQVZFX0FDTFZfSAorICBpZiAoYWNsdl9j b3VudCA+IDApCisgICAgeworICAgICAgcmV0ID0gYWNsICgoY2hhciAqKSBkc3RfbmFtZSwg QUNMX1NFVCwgYWNsdl9jb3VudCwgYWNsdl9lbnRyaWVzKTsKKyAgICAgIGlmIChyZXQgPCAw ICYmIHNhdmVkX2Vycm5vID09IDApCisgICAgICAgIHsKKyAgICAgICAgICBzYXZlZF9lcnJu byA9IGVycm5vOworICAgICAgICAgIGlmIChlcnJubyA9PSBFTk9TWVMgfHwgZXJybm8gPT0g RU9QTk9UU1VQUCB8fCBlcnJubyA9PSBFSU5WQUwpCisgICAgICAgICAgICB7CisgICAgICAg ICAgICAgIGlmICghYWNsdl9ub250cml2aWFsIChhY2x2X2NvdW50LCBhY2x2X2VudHJpZXMp KQorICAgICAgICAgICAgICAgIHNhdmVkX2Vycm5vID0gMDsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBkaWRfY2htb2QgPSAxOworICAgIH0KKyMg ZW5kaWYKKworICBpZiAoZGlkX2NobW9kIDw9ICgobW9kZSAmIChTX0lTVUlEIHwgU19JU0dJ RCB8IFNfSVNWVFgpKSA/IDEgOiAwKSkKKyAgICB7CisgICAgICAvKiBXZSBkaWQgbm90IGNh bGwgY2htb2Qgc28gZmFyLCBhbmQgc3BlY2lhbCBiaXRzIGFyZSB0byBiZSBzZXQgd2hpY2gK KyAgICAgICAgIGRvbid0IGZpdCBpbnRvIEFDTHMuICAqLworCisgICAgICBpZiAoY2htb2Rf b3JfZmNobW9kIChkc3RfbmFtZSwgZGVzdF9kZXNjLCBtb2RlKSAhPSAwKQorICAgICAgICB7 CisgICAgICAgICAgaWYgKHNhdmVkX2Vycm5vID09IDApCisgICAgICAgICAgICBzYXZlZF9l cnJubyA9IGVycm5vOworICAgICAgICB9CisgICAgfQorCisgIGlmIChzYXZlZF9lcnJubykK KyAgICB7CisgICAgICBlcnJubyA9IHNhdmVkX2Vycm5vOworICAgICAgcmV0dXJuIC0xOwor ICAgIH0KKyAgcmV0dXJuIDA7CisKKyNlbGlmIFVTRV9BQ0wgJiYgSEFWRV9BQ0xYX0dFVCAm JiAwIC8qIEFJWCAqLworCisgIC8qIFRPRE8gKi8KKworI2VsaWYgVVNFX0FDTCAmJiBIQVZF X1NUQVRBQ0wgLyogb2xkZXIgQUlYICovCisKKyAgdW5pb24geyBzdHJ1Y3QgYWNsIGE7IGNo YXIgcm9vbVs0MDk2XTsgfSB1OworICBpbnQgcmV0OworCisgIGlmICgoc291cmNlX2Rlc2Mg IT0gLTEKKyAgICAgICA/IGZzdGF0YWNsIChzb3VyY2VfZGVzYywgU1RYX05PUk1BTCwgJnUu YSwgc2l6ZW9mICh1KSkKKyAgICAgICA6IHN0YXRhY2wgKHNyY19uYW1lLCBTVFhfTk9STUFM LCAmdS5hLCBzaXplb2YgKHUpKSkKKyAgICAgIDwgMCkKKyAgICByZXR1cm4gLTI7CisKKyAg cmV0ID0gKGRlc3RfZGVzYyAhPSAtMQorICAgICAgICAgPyBmY2hhY2wgKGRlc3RfZGVzYywg JnUuYSwgdS5hLmFjbF9sZW4pCisgICAgICAgICA6IGNoYWNsIChkc3RfbmFtZSwgJnUuYSwg dS5hLmFjbF9sZW4pKTsKKyAgaWYgKHJldCA8IDApCisgICAgeworICAgICAgaW50IHNhdmVk X2Vycm5vID0gZXJybm87CisKKyAgICAgIGNobW9kX29yX2ZjaG1vZCAoZHN0X25hbWUsIGRl c3RfZGVzYywgbW9kZSk7CisgICAgICBlcnJubyA9IHNhdmVkX2Vycm5vOworICAgICAgcmV0 dXJuIC0xOworICAgIH0KKworICAvKiBObyBuZWVkIHRvIGNhbGwgY2htb2Rfb3JfZmNobW9k IGF0IHRoaXMgcG9pbnQsIHNpbmNlIHRoZSBtb2RlIGJpdHMKKyAgICAgU19JU1VJRCwgU19J U0dJRCwgU19JU1ZUWCBhcmUgYWxzbyBzdG9yZWQgaW4gdGhlIEFDTC4gICovCisKKyAgcmV0 dXJuIDA7CisKKyNlbGlmIFVTRV9BQ0wgJiYgSEFWRV9BQ0xTT1JUIC8qIE5vblN0b3AgS2Vy bmVsICovCisKKyAgc3RydWN0IGFjbCBlbnRyaWVzW05BQ0xFTlRSSUVTXTsKKyAgaW50IGNv dW50OworICBpbnQgcmV0OworCisgIGNvdW50ID0gYWNsICgoY2hhciAqKSBzcmNfbmFtZSwg QUNMX0dFVCwgTkFDTEVOVFJJRVMsIGVudHJpZXMpOworCisgIGlmIChjb3VudCA8IDApCisg ICAgeworICAgICAgaWYgKDApCisgICAgICAgIGNvdW50ID0gMDsKKyAgICAgIGVsc2UKKyAg ICAgICAgcmV0dXJuIC0yOworICAgIH0KKyAgZWxzZSBpZiAoY291bnQgPiAwKQorICAgIHsK KyAgICAgIGlmIChjb3VudCA+IE5BQ0xFTlRSSUVTKQorICAgICAgICAvKiBJZiBOQUNMRU5U UklFUyBjYW5ub3QgYmUgdHJ1c3RlZCwgdXNlIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24u ICAqLworICAgICAgICBhYm9ydCAoKTsKKyAgICB9CisKKyAgaWYgKGNvdW50ID09IDApCisg ICAgcmV0dXJuIHFzZXRfYWNsIChkc3RfbmFtZSwgZGVzdF9kZXNjLCBtb2RlKTsKKworICBy ZXQgPSBhY2wgKChjaGFyICopIGRzdF9uYW1lLCBBQ0xfU0VULCBjb3VudCwgZW50cmllcyk7 CisgIGlmIChyZXQgPCAwKQorICAgIHsKKyAgICAgIGludCBzYXZlZF9lcnJubyA9IGVycm5v OworCisgICAgICBpZiAoMCkKKyAgICAgICAgeworICAgICAgICAgIGlmICghYWNsX25vbnRy aXZpYWwgKGNvdW50LCBlbnRyaWVzKSkKKyAgICAgICAgICAgIHJldHVybiBjaG1vZF9vcl9m Y2htb2QgKGRzdF9uYW1lLCBkZXN0X2Rlc2MsIG1vZGUpOworICAgICAgICB9CisKKyAgICAg IGNobW9kX29yX2ZjaG1vZCAoZHN0X25hbWUsIGRlc3RfZGVzYywgbW9kZSk7CisgICAgICBl cnJubyA9IHNhdmVkX2Vycm5vOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICBpZiAo bW9kZSAmIChTX0lTVUlEIHwgU19JU0dJRCB8IFNfSVNWVFgpKQorICAgIHsKKyAgICAgIC8q IFdlIGRpZCBub3QgY2FsbCBjaG1vZCBzbyBmYXIsIGFuZCBlaXRoZXIgdGhlIG1vZGUgYW5k IHRoZSBBQ0wgYXJlCisgICAgICAgICBzZXBhcmF0ZSBvciBzcGVjaWFsIGJpdHMgYXJlIHRv IGJlIHNldCB3aGljaCBkb24ndCBmaXQgaW50byBBQ0xzLiAgKi8KKworICAgICAgcmV0dXJu IGNobW9kX29yX2ZjaG1vZCAoZHN0X25hbWUsIGRlc3RfZGVzYywgbW9kZSk7CisgICAgfQor ICByZXR1cm4gMDsKKworI2Vsc2UKKworICByZXR1cm4gcXNldF9hY2wgKGRzdF9uYW1lLCBk ZXN0X2Rlc2MsIG1vZGUpOworCisjZW5kaWYKK30KCj09PSBhZGRlZCBmaWxlICdsaWIvcXNl dC1hY2wuYycKLS0tIGxpYi9xc2V0LWFjbC5jCTE5NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDAK KysrIGxpYi9xc2V0LWFjbC5jCTIwMTMtMDQtMjggMDA6NDY6MzYgKzAwMDAKQEAgLTAsMCAr MSw2NzYgQEAKKy8qIHFzZXQtYWNsLmMgLSBzZXQgYWNjZXNzIGNvbnRyb2wgbGlzdCBlcXVp dmFsZW50IHRvIGEgbW9kZQorCisgICBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMywgMjAwNS0y MDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJ ZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyAgIFdyaXR0 ZW4gYnkgUGF1bCBFZ2dlcnQgYW5kIEFuZHJlYXMgR3J1ZW5iYWNoZXIsIGFuZCBCcnVubyBI YWlibGUuICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNkZWZpbmUgQUNMX0lOVEVS TkFMX0lOTElORSBfR0xfRVhURVJOX0lOTElORQorCisjaW5jbHVkZSAiYWNsLmgiCisKKyNp bmNsdWRlICJhY2wtaW50ZXJuYWwuaCIKKworCisvKiBJZiBERVNDIGlzIGEgdmFsaWQgZmls ZSBkZXNjcmlwdG9yIHVzZSBmY2htb2QgdG8gY2hhbmdlIHRoZQorICAgZmlsZSdzIG1vZGUg dG8gTU9ERSBvbiBzeXN0ZW1zIHRoYXQgaGF2ZSBmY2htb2QuIE9uIHN5c3RlbXMKKyAgIHRo YXQgZG9uJ3QgaGF2ZSBmY2htb2QgYW5kIGlmIERFU0MgaXMgaW52YWxpZCwgdXNlIGNobW9k IG9uCisgICBOQU1FIGluc3RlYWQuCisgICBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLiAgUmV0 dXJuIC0xIGFuZCBzZXQgZXJybm8gdXBvbiBmYWlsdXJlLiAgKi8KKworaW50CitjaG1vZF9v cl9mY2htb2QgKGNvbnN0IGNoYXIgKm5hbWUsIGludCBkZXNjLCBtb2RlX3QgbW9kZSkKK3sK KyAgaWYgKEhBVkVfRkNITU9EICYmIGRlc2MgIT0gLTEpCisgICAgcmV0dXJuIGZjaG1vZCAo ZGVzYywgbW9kZSk7CisgIGVsc2UKKyAgICByZXR1cm4gY2htb2QgKG5hbWUsIG1vZGUpOwor fQorCisvKiBTZXQgdGhlIGFjY2VzcyBjb250cm9sIGxpc3RzIG9mIGEgZmlsZS4gSWYgREVT QyBpcyBhIHZhbGlkIGZpbGUKKyAgIGRlc2NyaXB0b3IsIHVzZSBmaWxlIGRlc2NyaXB0b3Ig b3BlcmF0aW9ucyB3aGVyZSBhdmFpbGFibGUsIGVsc2UgdXNlCisgICBmaWxlbmFtZSBiYXNl ZCBvcGVyYXRpb25zIG9uIE5BTUUuICBJZiBhY2Nlc3MgY29udHJvbCBsaXN0cyBhcmUgbm90 CisgICBhdmFpbGFibGUsIGZjaG1vZCB0aGUgdGFyZ2V0IGZpbGUgdG8gTU9ERS4gIEFsc28g c2V0cyB0aGUKKyAgIG5vbi1wZXJtaXNzaW9uIGJpdHMgb2YgdGhlIGRlc3RpbmF0aW9uIGZp bGUgKFNfSVNVSUQsIFNfSVNHSUQsIFNfSVNWVFgpCisgICB0byB0aG9zZSBmcm9tIE1PREUg aWYgYW55IGFyZSBzZXQuCisgICBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLiAgUmV0dXJuIC0x IGFuZCBzZXQgZXJybm8gdXBvbiBmYWlsdXJlLiAgKi8KKworaW50Citxc2V0X2FjbCAoY2hh ciBjb25zdCAqbmFtZSwgaW50IGRlc2MsIG1vZGVfdCBtb2RlKQoreworI2lmIFVTRV9BQ0wK KyMgaWYgSEFWRV9BQ0xfR0VUX0ZJTEUKKyAgLyogUE9TSVggMTAwMy4xZSBkcmFmdCAxNyAo YWJhbmRvbmVkKSBzcGVjaWZpYyB2ZXJzaW9uLiAgKi8KKyAgLyogTGludXgsIEZyZWVCU0Qs IE1hYyBPUyBYLCBJUklYLCBUcnU2NCAqLworIyAgaWYgIUhBVkVfQUNMX1RZUEVfRVhURU5E RUQKKyAgLyogTGludXgsIEZyZWVCU0QsIElSSVgsIFRydTY0ICovCisKKyAgLyogV2UgbXVz dCBhbHNvIGhhdmUgYWNsX2Zyb21fdGV4dCBhbmQgYWNsX2RlbGV0ZV9kZWZfZmlsZS4KKyAg ICAgKGFjbF9kZWxldGVfZGVmX2ZpbGUgY291bGQgYmUgZW11bGF0ZWQgd2l0aCBhY2xfaW5p dCBmb2xsb3dlZAorICAgICAgYnkgYWNsX3NldF9maWxlLCBidXQgYWNsX3NldF9maWxlIHdp dGggYW4gZW1wdHkgYWNsIGlzCisgICAgICB1bnNwZWNpZmllZC4pICAqLworCisjICAgaWZu ZGVmIEhBVkVfQUNMX0ZST01fVEVYVAorIyAgICBlcnJvciBNdXN0IGhhdmUgYWNsX2Zyb21f dGV4dCAoc2VlIFBPU0lYIDEwMDMuMWUgZHJhZnQgMTcpLgorIyAgIGVuZGlmCisjICAgaWZu ZGVmIEhBVkVfQUNMX0RFTEVURV9ERUZfRklMRQorIyAgICBlcnJvciBNdXN0IGhhdmUgYWNs X2RlbGV0ZV9kZWZfZmlsZSAoc2VlIFBPU0lYIDEwMDMuMWUgZHJhZnQgMTcpLgorIyAgIGVu ZGlmCisKKyAgYWNsX3QgYWNsOworICBpbnQgcmV0OworCisgIGlmIChIQVZFX0FDTF9GUk9N X01PREUpIC8qIExpbnV4ICovCisgICAgeworICAgICAgYWNsID0gYWNsX2Zyb21fbW9kZSAo bW9kZSk7CisgICAgICBpZiAoIWFjbCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAg ZWxzZSAvKiBGcmVlQlNELCBJUklYLCBUcnU2NCAqLworICAgIHsKKyAgICAgIC8qIElmIHdl IHdlcmUgdG8gY3JlYXRlIHRoZSBBQ0wgdXNpbmcgdGhlIGZ1bmN0aW9ucyBhY2xfaW5pdCgp LAorICAgICAgICAgYWNsX2NyZWF0ZV9lbnRyeSgpLCBhY2xfc2V0X3RhZ190eXBlKCksIGFj bF9zZXRfcXVhbGlmaWVyKCksCisgICAgICAgICBhY2xfZ2V0X3Blcm1zZXQoKSwgYWNsX2Ns ZWFyX3Blcm1bc10oKSwgYWNsX2FkZF9wZXJtKCksIHdlCisgICAgICAgICB3b3VsZCBuZWVk IHRvIGNyZWF0ZSBhIHF1YWxpZmllci4gIEkgZG9uJ3Qga25vdyBob3cgdG8gZG8gdGhpcy4K KyAgICAgICAgIFNvIGNyZWF0ZSBpdCB1c2luZyBhY2xfZnJvbV90ZXh0KCkuICAqLworCisj ICAgaWYgSEFWRV9BQ0xfRlJFRV9URVhUIC8qIFRydTY0ICovCisgICAgICBjaGFyIGFjbF90 ZXh0W10gPSAidTo6LS0tLGc6Oi0tLSxvOjotLS0sIjsKKyMgICBlbHNlIC8qIEZyZWVCU0Qs IElSSVggKi8KKyAgICAgIGNoYXIgYWNsX3RleHRbXSA9ICJ1OjotLS0sZzo6LS0tLG86Oi0t LSI7CisjICAgZW5kaWYKKworICAgICAgaWYgKG1vZGUgJiBTX0lSVVNSKSBhY2xfdGV4dFsg M10gPSAncic7CisgICAgICBpZiAobW9kZSAmIFNfSVdVU1IpIGFjbF90ZXh0WyA0XSA9ICd3 JzsKKyAgICAgIGlmIChtb2RlICYgU19JWFVTUikgYWNsX3RleHRbIDVdID0gJ3gnOworICAg ICAgaWYgKG1vZGUgJiBTX0lSR1JQKSBhY2xfdGV4dFsxMF0gPSAncic7CisgICAgICBpZiAo bW9kZSAmIFNfSVdHUlApIGFjbF90ZXh0WzExXSA9ICd3JzsKKyAgICAgIGlmIChtb2RlICYg U19JWEdSUCkgYWNsX3RleHRbMTJdID0gJ3gnOworICAgICAgaWYgKG1vZGUgJiBTX0lST1RI KSBhY2xfdGV4dFsxN10gPSAncic7CisgICAgICBpZiAobW9kZSAmIFNfSVdPVEgpIGFjbF90 ZXh0WzE4XSA9ICd3JzsKKyAgICAgIGlmIChtb2RlICYgU19JWE9USCkgYWNsX3RleHRbMTld ID0gJ3gnOworCisgICAgICBhY2wgPSBhY2xfZnJvbV90ZXh0IChhY2xfdGV4dCk7CisgICAg ICBpZiAoIWFjbCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgaWYgKEhBVkVfQUNM X1NFVF9GRCAmJiBkZXNjICE9IC0xKQorICAgIHJldCA9IGFjbF9zZXRfZmQgKGRlc2MsIGFj bCk7CisgIGVsc2UKKyAgICByZXQgPSBhY2xfc2V0X2ZpbGUgKG5hbWUsIEFDTF9UWVBFX0FD Q0VTUywgYWNsKTsKKyAgaWYgKHJldCAhPSAwKQorICAgIHsKKyAgICAgIGludCBzYXZlZF9l cnJubyA9IGVycm5vOworICAgICAgYWNsX2ZyZWUgKGFjbCk7CisgICAgICBpZiAoISBhY2xf ZXJybm9fdmFsaWQgKGVycm5vKSkKKyAgICAgICAgcmV0dXJuIGNobW9kX29yX2ZjaG1vZCAo bmFtZSwgZGVzYywgbW9kZSk7CisgICAgICBlcnJubyA9IHNhdmVkX2Vycm5vOworICAgICAg cmV0dXJuIC0xOworICAgIH0KKyAgZWxzZQorICAgIGFjbF9mcmVlIChhY2wpOworCisgIGlm IChTX0lTRElSIChtb2RlKSAmJiBhY2xfZGVsZXRlX2RlZl9maWxlIChuYW1lKSkKKyAgICBy ZXR1cm4gLTE7CisKKyAgaWYgKCFNT0RFX0lOU0lERV9BQ0wgfHwgKG1vZGUgJiAoU19JU1VJ RCB8IFNfSVNHSUQgfCBTX0lTVlRYKSkpCisgICAgeworICAgICAgLyogV2UgZGlkIG5vdCBj YWxsIGNobW9kIHNvIGZhciwgYW5kIGVpdGhlciB0aGUgbW9kZSBhbmQgdGhlIEFDTCBhcmUK KyAgICAgICAgIHNlcGFyYXRlIG9yIHNwZWNpYWwgYml0cyBhcmUgdG8gYmUgc2V0IHdoaWNo IGRvbid0IGZpdCBpbnRvIEFDTHMuICAqLworICAgICAgcmV0dXJuIGNobW9kX29yX2ZjaG1v ZCAobmFtZSwgZGVzYywgbW9kZSk7CisgICAgfQorICByZXR1cm4gMDsKKworIyAgZWxzZSAv KiBIQVZFX0FDTF9UWVBFX0VYVEVOREVEICovCisgIC8qIE1hYyBPUyBYICovCisKKyAgLyog T24gTWFjIE9TIFgsICBhY2xfZ2V0X2ZpbGUgKG5hbWUsIEFDTF9UWVBFX0FDQ0VTUykKKyAg ICAgYW5kICAgICAgICAgICBhY2xfZ2V0X2ZpbGUgKG5hbWUsIEFDTF9UWVBFX0RFRkFVTFQp CisgICAgIGFsd2F5cyByZXR1cm4gTlVMTCAvIEVJTlZBTC4gIFlvdSBoYXZlIHRvIHVzZQor ICAgICAgICAgICAgICAgICAgIGFjbF9nZXRfZmlsZSAobmFtZSwgQUNMX1RZUEVfRVhURU5E RUQpCisgICAgIG9yICAgICAgICAgICAgYWNsX2dldF9mZCAob3BlbiAobmFtZSwgLi4uKSkK KyAgICAgdG8gcmV0cmlldmUgYW4gQUNMLgorICAgICBPbiB0aGUgb3RoZXIgaGFuZCwKKyAg ICAgICAgICAgICAgICAgICBhY2xfc2V0X2ZpbGUgKG5hbWUsIEFDTF9UWVBFX0FDQ0VTUywg YWNsKQorICAgICBhbmQgICAgICAgICAgIGFjbF9zZXRfZmlsZSAobmFtZSwgQUNMX1RZUEVf REVGQVVMVCwgYWNsKQorICAgICBoYXZlIHRoZSBzYW1lIGVmZmVjdCBhcworICAgICAgICAg ICAgICAgICAgIGFjbF9zZXRfZmlsZSAobmFtZSwgQUNMX1RZUEVfRVhURU5ERUQsIGFjbCk6 CisgICAgIEVhY2ggb2YgdGhlc2UgY2FsbHMgc2V0cyB0aGUgZmlsZSdzIEFDTC4gICovCisK KyAgYWNsX3QgYWNsOworICBpbnQgcmV0OworCisgIC8qIFJlbW92ZSB0aGUgQUNMIGlmIHRo ZSBmaWxlIGhhcyBBQ0xzLiAgKi8KKyAgaWYgKEhBVkVfQUNMX0dFVF9GRCAmJiBkZXNjICE9 IC0xKQorICAgIGFjbCA9IGFjbF9nZXRfZmQgKGRlc2MpOworICBlbHNlCisgICAgYWNsID0g YWNsX2dldF9maWxlIChuYW1lLCBBQ0xfVFlQRV9FWFRFTkRFRCk7CisgIGlmIChhY2wpCisg ICAgeworICAgICAgYWNsX2ZyZWUgKGFjbCk7CisKKyAgICAgIGFjbCA9IGFjbF9pbml0ICgw KTsKKyAgICAgIGlmIChhY2wpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoSEFWRV9BQ0xf U0VUX0ZEICYmIGRlc2MgIT0gLTEpCisgICAgICAgICAgICByZXQgPSBhY2xfc2V0X2ZkIChk ZXNjLCBhY2wpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldCA9IGFjbF9zZXRf ZmlsZSAobmFtZSwgQUNMX1RZUEVfRVhURU5ERUQsIGFjbCk7CisgICAgICAgICAgaWYgKHJl dCAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpbnQgc2F2ZWRfZXJybm8g PSBlcnJubzsKKyAgICAgICAgICAgICAgYWNsX2ZyZWUgKGFjbCk7CisgICAgICAgICAgICAg IGlmICghIGFjbF9lcnJub192YWxpZCAoc2F2ZWRfZXJybm8pKQorICAgICAgICAgICAgICAg IHJldHVybiBjaG1vZF9vcl9mY2htb2QgKG5hbWUsIGRlc2MsIG1vZGUpOworICAgICAgICAg ICAgICBlcnJubyA9IHNhdmVkX2Vycm5vOworICAgICAgICAgICAgICByZXR1cm4gLTE7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgYWNsX2ZyZWUgKGFjbCk7CisgICAgICAgIH0KKyAg ICB9CisKKyAgLyogU2luY2UgIU1PREVfSU5TSURFX0FDTCwgd2UgaGF2ZSB0byBjYWxsIGNo bW9kIGV4cGxpY2l0bHkuICAqLworICByZXR1cm4gY2htb2Rfb3JfZmNobW9kIChuYW1lLCBk ZXNjLCBtb2RlKTsKKyMgIGVuZGlmCisKKyMgZWxpZiBIQVZFX0ZBQ0wgJiYgZGVmaW5lZCBH RVRBQ0wgLyogU29sYXJpcywgQ3lnd2luLCBub3QgSFAtVVggKi8KKworICBpbnQgZG9uZV9z ZXRhY2wgPSAwOworCisjICBpZmRlZiBBQ0VfR0VUQUNMCisgIC8qIFNvbGFyaXMgYWxzbyBo YXMgYSBkaWZmZXJlbnQgdmFyaWFudCBvZiBBQ0xzLCB1c2VkIGluIFpGUyBhbmQgTkZTdjQK KyAgICAgZmlsZSBzeXN0ZW1zICh3aGVyZWFzIHRoZSBvdGhlciBvbmVzIGFyZSB1c2VkIGlu IFVGUyBmaWxlIHN5c3RlbXMpLiAgKi8KKworICAvKiBUaGUgZmxhZ3MgaW4gdGhlIGFjZV90 IHN0cnVjdHVyZSBjaGFuZ2VkIGluIGEgYmluYXJ5IGluY29tcGF0aWJsZSB3YXkKKyAgICAg d2hlbiBBQ0xfTk9fVFJJVklBTCBldGMuIHdlcmUgaW50cm9kdWNlZCBpbiA8c3lzL2FjbC5o PiB2ZXJzaW9uIDEuMTUuCisgICAgIEhvdyB0byBkaXN0aW5ndWlzaCB0aGUgdHdvIGNvbnZl bnRpb25zIGF0IHJ1bnRpbWU/CisgICAgIFdlIGZldGNoIHRoZSBleGlzdGluZyBBQ0wuICBJ biB0aGUgb2xkIGNvbnZlbnRpb24sIHVzdWFsbHkgdGhyZWUgQUNFcyBoYXZlCisgICAgIGFf ZmxhZ3MgPSBBQ0VfT1dORVIgLyBBQ0VfR1JPVVAgLyBBQ0VfT1RIRVIsIGluIHRoZSByYW5n ZSAweDAxMDAuLjB4MDQwMC4KKyAgICAgSW4gdGhlIG5ldyBjb252ZW50aW9uLCB0aGVzZSB2 YWx1ZXMgYXJlIG5vdCB1c2VkLiAgKi8KKyAgaW50IGNvbnZlbnRpb247CisKKyAgeworICAg IC8qIEluaXRpYWxseSwgdHJ5IHRvIHJlYWQgdGhlIGVudHJpZXMgaW50byBhIHN0YWNrLWFs bG9jYXRlZCBidWZmZXIuCisgICAgICAgVXNlIG1hbGxvYyBpZiBpdCBkb2VzIG5vdCBmaXQu ICAqLworICAgIGVudW0KKyAgICAgIHsKKyAgICAgICAgYWxsb2NfaW5pdCA9IDQwMDAgLyBz aXplb2YgKGFjZV90KSwgLyogPj0gMyAqLworICAgICAgICBhbGxvY19tYXggPSBNSU4gKElO VF9NQVgsIFNJWkVfTUFYIC8gc2l6ZW9mIChhY2VfdCkpCisgICAgICB9OworICAgIGFjZV90 IGJ1ZlthbGxvY19pbml0XTsKKyAgICBzaXplX3QgYWxsb2MgPSBhbGxvY19pbml0OworICAg IGFjZV90ICplbnRyaWVzID0gYnVmOworICAgIGFjZV90ICptYWxsb2NlZCA9IE5VTEw7Cisg ICAgaW50IGNvdW50OworCisgICAgZm9yICg7OykKKyAgICAgIHsKKyAgICAgICAgY291bnQg PSAoZGVzYyAhPSAtMQorICAgICAgICAgICAgICAgICA/IGZhY2wgKGRlc2MsIEFDRV9HRVRB Q0wsIGFsbG9jLCBlbnRyaWVzKQorICAgICAgICAgICAgICAgICA6IGFjbCAobmFtZSwgQUNF X0dFVEFDTCwgYWxsb2MsIGVudHJpZXMpKTsKKyAgICAgICAgaWYgKGNvdW50IDwgMCAmJiBl cnJubyA9PSBFTk9TUEMpCisgICAgICAgICAgeworICAgICAgICAgICAgLyogSW5jcmVhc2Ug dGhlIHNpemUgb2YgdGhlIGJ1ZmZlci4gICovCisgICAgICAgICAgICBmcmVlIChtYWxsb2Nl ZCk7CisgICAgICAgICAgICBpZiAoYWxsb2MgPiBhbGxvY19tYXggLyAyKQorICAgICAgICAg ICAgICB7CisgICAgICAgICAgICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgICAgICAgICAg ICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBhbGxvYyA9IDIg KiBhbGxvYzsgLyogPD0gYWxsb2NfbWF4ICovCisgICAgICAgICAgICBlbnRyaWVzID0gbWFs bG9jZWQgPSAoYWNlX3QgKikgbWFsbG9jIChhbGxvYyAqIHNpemVvZiAoYWNlX3QpKTsKKyAg ICAgICAgICAgIGlmIChlbnRyaWVzID09IE5VTEwpCisgICAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgICBlcnJubyA9IEVOT01FTTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7 CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIH0K KyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICBpZiAoY291bnQgPD0gMCkKKyAgICAg IGNvbnZlbnRpb24gPSAtMTsKKyAgICBlbHNlCisgICAgICB7CisgICAgICAgIGludCBpOwor CisgICAgICAgIGNvbnZlbnRpb24gPSAwOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291 bnQ7IGkrKykKKyAgICAgICAgICBpZiAoZW50cmllc1tpXS5hX2ZsYWdzICYgKE9MRF9BQ0Vf T1dORVIgfCBPTERfQUNFX0dST1VQIHwgT0xEX0FDRV9PVEhFUikpCisgICAgICAgICAgICB7 CisgICAgICAgICAgICAgIGNvbnZlbnRpb24gPSAxOworICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgIH0KKyAgICAgIH0KKyAgICBmcmVlIChtYWxsb2NlZCk7CisgIH0KKwor ICBpZiAoY29udmVudGlvbiA+PSAwKQorICAgIHsKKyAgICAgIGFjZV90IGVudHJpZXNbNl07 CisgICAgICBpbnQgY291bnQ7CisgICAgICBpbnQgcmV0OworCisgICAgICBpZiAoY29udmVu dGlvbikKKyAgICAgICAgeworICAgICAgICAgIC8qIFJ1bm5pbmcgb24gU29sYXJpcyAxMC4g ICovCisgICAgICAgICAgZW50cmllc1swXS5hX3R5cGUgPSBPTERfQUxMT1c7CisgICAgICAg ICAgZW50cmllc1swXS5hX2ZsYWdzID0gT0xEX0FDRV9PV05FUjsKKyAgICAgICAgICBlbnRy aWVzWzBdLmFfd2hvID0gMDsgLyogaXJyZWxldmFudCAqLworICAgICAgICAgIGVudHJpZXNb MF0uYV9hY2Nlc3NfbWFzayA9IChtb2RlID4+IDYpICYgNzsKKyAgICAgICAgICBlbnRyaWVz WzFdLmFfdHlwZSA9IE9MRF9BTExPVzsKKyAgICAgICAgICBlbnRyaWVzWzFdLmFfZmxhZ3Mg PSBPTERfQUNFX0dST1VQOworICAgICAgICAgIGVudHJpZXNbMV0uYV93aG8gPSAwOyAvKiBp cnJlbGV2YW50ICovCisgICAgICAgICAgZW50cmllc1sxXS5hX2FjY2Vzc19tYXNrID0gKG1v ZGUgPj4gMykgJiA3OworICAgICAgICAgIGVudHJpZXNbMl0uYV90eXBlID0gT0xEX0FMTE9X OworICAgICAgICAgIGVudHJpZXNbMl0uYV9mbGFncyA9IE9MRF9BQ0VfT1RIRVI7CisgICAg ICAgICAgZW50cmllc1syXS5hX3dobyA9IDA7CisgICAgICAgICAgZW50cmllc1syXS5hX2Fj Y2Vzc19tYXNrID0gbW9kZSAmIDc7CisgICAgICAgICAgY291bnQgPSAzOworICAgICAgICB9 CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAvKiBSdW5uaW5nIG9uIFNvbGFy aXMgMTAgKG5ld2VyIHZlcnNpb24pIG9yIFNvbGFyaXMgMTEuCisgICAgICAgICAgICAgVGhl IGRldGFpbHMgaGVyZSB3ZXJlIGZvdW5kIHRocm91Z2ggIi9iaW4vbHMgLWx2ZCBzb21lZmls ZXMiLiAgKi8KKyAgICAgICAgICBlbnRyaWVzWzBdLmFfdHlwZSA9IE5FV19BQ0VfQUNDRVNT X0RFTklFRF9BQ0VfVFlQRTsKKyAgICAgICAgICBlbnRyaWVzWzBdLmFfZmxhZ3MgPSBORVdf QUNFX09XTkVSOworICAgICAgICAgIGVudHJpZXNbMF0uYV93aG8gPSAwOyAvKiBpcnJlbGV2 YW50ICovCisgICAgICAgICAgZW50cmllc1swXS5hX2FjY2Vzc19tYXNrID0gMDsKKyAgICAg ICAgICBlbnRyaWVzWzFdLmFfdHlwZSA9IE5FV19BQ0VfQUNDRVNTX0FMTE9XRURfQUNFX1RZ UEU7CisgICAgICAgICAgZW50cmllc1sxXS5hX2ZsYWdzID0gTkVXX0FDRV9PV05FUjsKKyAg ICAgICAgICBlbnRyaWVzWzFdLmFfd2hvID0gMDsgLyogaXJyZWxldmFudCAqLworICAgICAg ICAgIGVudHJpZXNbMV0uYV9hY2Nlc3NfbWFzayA9IE5FV19BQ0VfV1JJVEVfTkFNRURfQVRU UlMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5FV19BQ0VfV1JJ VEVfQVRUUklCVVRFUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg TkVXX0FDRV9XUklURV9BQ0wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8IE5FV19BQ0VfV1JJVEVfT1dORVI7CisgICAgICAgICAgaWYgKG1vZGUgJiAwNDAwKQor ICAgICAgICAgICAgZW50cmllc1sxXS5hX2FjY2Vzc19tYXNrIHw9IE5FV19BQ0VfUkVBRF9E QVRBOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVudHJpZXNbMF0uYV9hY2Nlc3Nf bWFzayB8PSBORVdfQUNFX1JFQURfREFUQTsKKyAgICAgICAgICBpZiAobW9kZSAmIDAyMDAp CisgICAgICAgICAgICBlbnRyaWVzWzFdLmFfYWNjZXNzX21hc2sgfD0gTkVXX0FDRV9XUklU RV9EQVRBIHwgTkVXX0FDRV9BUFBFTkRfREFUQTsKKyAgICAgICAgICBlbHNlCisgICAgICAg ICAgICBlbnRyaWVzWzBdLmFfYWNjZXNzX21hc2sgfD0gTkVXX0FDRV9XUklURV9EQVRBIHwg TkVXX0FDRV9BUFBFTkRfREFUQTsKKyAgICAgICAgICBpZiAobW9kZSAmIDAxMDApCisgICAg ICAgICAgICBlbnRyaWVzWzFdLmFfYWNjZXNzX21hc2sgfD0gTkVXX0FDRV9FWEVDVVRFOwor ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVudHJpZXNbMF0uYV9hY2Nlc3NfbWFzayB8 PSBORVdfQUNFX0VYRUNVVEU7CisgICAgICAgICAgZW50cmllc1syXS5hX3R5cGUgPSBORVdf QUNFX0FDQ0VTU19ERU5JRURfQUNFX1RZUEU7CisgICAgICAgICAgZW50cmllc1syXS5hX2Zs YWdzID0gTkVXX0FDRV9HUk9VUCB8IE5FV19BQ0VfSURFTlRJRklFUl9HUk9VUDsKKyAgICAg ICAgICBlbnRyaWVzWzJdLmFfd2hvID0gMDsgLyogaXJyZWxldmFudCAqLworICAgICAgICAg IGVudHJpZXNbMl0uYV9hY2Nlc3NfbWFzayA9IDA7CisgICAgICAgICAgZW50cmllc1szXS5h X3R5cGUgPSBORVdfQUNFX0FDQ0VTU19BTExPV0VEX0FDRV9UWVBFOworICAgICAgICAgIGVu dHJpZXNbM10uYV9mbGFncyA9IE5FV19BQ0VfR1JPVVAgfCBORVdfQUNFX0lERU5USUZJRVJf R1JPVVA7CisgICAgICAgICAgZW50cmllc1szXS5hX3dobyA9IDA7IC8qIGlycmVsZXZhbnQg Ki8KKyAgICAgICAgICBlbnRyaWVzWzNdLmFfYWNjZXNzX21hc2sgPSAwOworICAgICAgICAg IGlmIChtb2RlICYgMDA0MCkKKyAgICAgICAgICAgIGVudHJpZXNbM10uYV9hY2Nlc3NfbWFz ayB8PSBORVdfQUNFX1JFQURfREFUQTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBl bnRyaWVzWzJdLmFfYWNjZXNzX21hc2sgfD0gTkVXX0FDRV9SRUFEX0RBVEE7CisgICAgICAg ICAgaWYgKG1vZGUgJiAwMDIwKQorICAgICAgICAgICAgZW50cmllc1szXS5hX2FjY2Vzc19t YXNrIHw9IE5FV19BQ0VfV1JJVEVfREFUQSB8IE5FV19BQ0VfQVBQRU5EX0RBVEE7CisgICAg ICAgICAgZWxzZQorICAgICAgICAgICAgZW50cmllc1syXS5hX2FjY2Vzc19tYXNrIHw9IE5F V19BQ0VfV1JJVEVfREFUQSB8IE5FV19BQ0VfQVBQRU5EX0RBVEE7CisgICAgICAgICAgaWYg KG1vZGUgJiAwMDEwKQorICAgICAgICAgICAgZW50cmllc1szXS5hX2FjY2Vzc19tYXNrIHw9 IE5FV19BQ0VfRVhFQ1VURTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBlbnRyaWVz WzJdLmFfYWNjZXNzX21hc2sgfD0gTkVXX0FDRV9FWEVDVVRFOworICAgICAgICAgIGVudHJp ZXNbNF0uYV90eXBlID0gTkVXX0FDRV9BQ0NFU1NfREVOSUVEX0FDRV9UWVBFOworICAgICAg ICAgIGVudHJpZXNbNF0uYV9mbGFncyA9IE5FV19BQ0VfRVZFUllPTkU7CisgICAgICAgICAg ZW50cmllc1s0XS5hX3dobyA9IDA7CisgICAgICAgICAgZW50cmllc1s0XS5hX2FjY2Vzc19t YXNrID0gTkVXX0FDRV9XUklURV9OQU1FRF9BVFRSUworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgTkVXX0FDRV9XUklURV9BVFRSSUJVVEVTCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBORVdfQUNFX1dSSVRFX0FDTAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTkVXX0FDRV9XUklURV9PV05FUjsK KyAgICAgICAgICBlbnRyaWVzWzVdLmFfdHlwZSA9IE5FV19BQ0VfQUNDRVNTX0FMTE9XRURf QUNFX1RZUEU7CisgICAgICAgICAgZW50cmllc1s1XS5hX2ZsYWdzID0gTkVXX0FDRV9FVkVS WU9ORTsKKyAgICAgICAgICBlbnRyaWVzWzVdLmFfd2hvID0gMDsKKyAgICAgICAgICBlbnRy aWVzWzVdLmFfYWNjZXNzX21hc2sgPSBORVdfQUNFX1JFQURfTkFNRURfQVRUUlMKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5FV19BQ0VfUkVBRF9BVFRSSUJV VEVTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBORVdfQUNFX1JF QURfQUNMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBORVdfQUNF X1NZTkNIUk9OSVpFOworICAgICAgICAgIGlmIChtb2RlICYgMDAwNCkKKyAgICAgICAgICAg IGVudHJpZXNbNV0uYV9hY2Nlc3NfbWFzayB8PSBORVdfQUNFX1JFQURfREFUQTsKKyAgICAg ICAgICBlbHNlCisgICAgICAgICAgICBlbnRyaWVzWzRdLmFfYWNjZXNzX21hc2sgfD0gTkVX X0FDRV9SRUFEX0RBVEE7CisgICAgICAgICAgaWYgKG1vZGUgJiAwMDAyKQorICAgICAgICAg ICAgZW50cmllc1s1XS5hX2FjY2Vzc19tYXNrIHw9IE5FV19BQ0VfV1JJVEVfREFUQSB8IE5F V19BQ0VfQVBQRU5EX0RBVEE7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZW50cmll c1s0XS5hX2FjY2Vzc19tYXNrIHw9IE5FV19BQ0VfV1JJVEVfREFUQSB8IE5FV19BQ0VfQVBQ RU5EX0RBVEE7CisgICAgICAgICAgaWYgKG1vZGUgJiAwMDAxKQorICAgICAgICAgICAgZW50 cmllc1s1XS5hX2FjY2Vzc19tYXNrIHw9IE5FV19BQ0VfRVhFQ1VURTsKKyAgICAgICAgICBl bHNlCisgICAgICAgICAgICBlbnRyaWVzWzRdLmFfYWNjZXNzX21hc2sgfD0gTkVXX0FDRV9F WEVDVVRFOworICAgICAgICAgIGNvdW50ID0gNjsKKyAgICAgICAgfQorICAgICAgaWYgKGRl c2MgIT0gLTEpCisgICAgICAgIHJldCA9IGZhY2wgKGRlc2MsIEFDRV9TRVRBQ0wsIGNvdW50 LCBlbnRyaWVzKTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmV0ID0gYWNsIChuYW1lLCBBQ0Vf U0VUQUNMLCBjb3VudCwgZW50cmllcyk7CisgICAgICBpZiAocmV0IDwgMCAmJiBlcnJubyAh PSBFSU5WQUwgJiYgZXJybm8gIT0gRU5PVFNVUCkKKyAgICAgICAgeworICAgICAgICAgIGlm IChlcnJubyA9PSBFTk9TWVMpCisgICAgICAgICAgICByZXR1cm4gY2htb2Rfb3JfZmNobW9k IChuYW1lLCBkZXNjLCBtb2RlKTsKKyAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0K KyAgICAgIGlmIChyZXQgPT0gMCkKKyAgICAgICAgZG9uZV9zZXRhY2wgPSAxOworICAgIH0K KyMgIGVuZGlmCisKKyAgaWYgKCFkb25lX3NldGFjbCkKKyAgICB7CisgICAgICBhY2xlbnRf dCBlbnRyaWVzWzNdOworICAgICAgaW50IHJldDsKKworICAgICAgZW50cmllc1swXS5hX3R5 cGUgPSBVU0VSX09CSjsKKyAgICAgIGVudHJpZXNbMF0uYV9pZCA9IDA7IC8qIGlycmVsZXZh bnQgKi8KKyAgICAgIGVudHJpZXNbMF0uYV9wZXJtID0gKG1vZGUgPj4gNikgJiA3OworICAg ICAgZW50cmllc1sxXS5hX3R5cGUgPSBHUk9VUF9PQko7CisgICAgICBlbnRyaWVzWzFdLmFf aWQgPSAwOyAvKiBpcnJlbGV2YW50ICovCisgICAgICBlbnRyaWVzWzFdLmFfcGVybSA9ICht b2RlID4+IDMpICYgNzsKKyAgICAgIGVudHJpZXNbMl0uYV90eXBlID0gT1RIRVJfT0JKOwor ICAgICAgZW50cmllc1syXS5hX2lkID0gMDsKKyAgICAgIGVudHJpZXNbMl0uYV9wZXJtID0g bW9kZSAmIDc7CisKKyAgICAgIGlmIChkZXNjICE9IC0xKQorICAgICAgICByZXQgPSBmYWNs IChkZXNjLCBTRVRBQ0wsCisgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoZW50cmllcykg LyBzaXplb2YgKGFjbGVudF90KSwgZW50cmllcyk7CisgICAgICBlbHNlCisgICAgICAgIHJl dCA9IGFjbCAobmFtZSwgU0VUQUNMLAorICAgICAgICAgICAgICAgICAgIHNpemVvZiAoZW50 cmllcykgLyBzaXplb2YgKGFjbGVudF90KSwgZW50cmllcyk7CisgICAgICBpZiAocmV0IDwg MCkKKyAgICAgICAgeworICAgICAgICAgIGlmIChlcnJubyA9PSBFTk9TWVMgfHwgZXJybm8g PT0gRU9QTk9UU1VQUCkKKyAgICAgICAgICAgIHJldHVybiBjaG1vZF9vcl9mY2htb2QgKG5h bWUsIGRlc2MsIG1vZGUpOworICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAg IH0KKworICBpZiAoIU1PREVfSU5TSURFX0FDTCB8fCAobW9kZSAmIChTX0lTVUlEIHwgU19J U0dJRCB8IFNfSVNWVFgpKSkKKyAgICB7CisgICAgICAvKiBXZSBkaWQgbm90IGNhbGwgY2ht b2Qgc28gZmFyLCBzbyB0aGUgc3BlY2lhbCBiaXRzIGhhdmUgbm90IHlldAorICAgICAgICAg YmVlbiBzZXQuICAqLworICAgICAgcmV0dXJuIGNobW9kX29yX2ZjaG1vZCAobmFtZSwgZGVz YywgbW9kZSk7CisgICAgfQorICByZXR1cm4gMDsKKworIyBlbGlmIEhBVkVfR0VUQUNMIC8q IEhQLVVYICovCisKKyAgc3RydWN0IHN0YXQgc3RhdGJ1ZjsKKyAgaW50IHJldDsKKworICBp ZiAoZGVzYyAhPSAtMSkKKyAgICByZXQgPSBmc3RhdCAoZGVzYywgJnN0YXRidWYpOworICBl bHNlCisgICAgcmV0ID0gc3RhdCAobmFtZSwgJnN0YXRidWYpOworICBpZiAocmV0IDwgMCkK KyAgICByZXR1cm4gLTE7CisKKyAgeworICAgIHN0cnVjdCBhY2xfZW50cnkgZW50cmllc1sz XTsKKworICAgIGVudHJpZXNbMF0udWlkID0gc3RhdGJ1Zi5zdF91aWQ7CisgICAgZW50cmll c1swXS5naWQgPSBBQ0xfTlNHUk9VUDsKKyAgICBlbnRyaWVzWzBdLm1vZGUgPSAobW9kZSA+ PiA2KSAmIDc7CisgICAgZW50cmllc1sxXS51aWQgPSBBQ0xfTlNVU0VSOworICAgIGVudHJp ZXNbMV0uZ2lkID0gc3RhdGJ1Zi5zdF9naWQ7CisgICAgZW50cmllc1sxXS5tb2RlID0gKG1v ZGUgPj4gMykgJiA3OworICAgIGVudHJpZXNbMl0udWlkID0gQUNMX05TVVNFUjsKKyAgICBl bnRyaWVzWzJdLmdpZCA9IEFDTF9OU0dST1VQOworICAgIGVudHJpZXNbMl0ubW9kZSA9IG1v ZGUgJiA3OworCisgICAgaWYgKGRlc2MgIT0gLTEpCisgICAgICByZXQgPSBmc2V0YWNsIChk ZXNjLCBzaXplb2YgKGVudHJpZXMpIC8gc2l6ZW9mIChzdHJ1Y3QgYWNsX2VudHJ5KSwgZW50 cmllcyk7CisgICAgZWxzZQorICAgICAgcmV0ID0gc2V0YWNsIChuYW1lLCBzaXplb2YgKGVu dHJpZXMpIC8gc2l6ZW9mIChzdHJ1Y3QgYWNsX2VudHJ5KSwgZW50cmllcyk7CisgIH0KKyAg aWYgKHJldCA8IDApCisgICAgeworICAgICAgaWYgKCEoZXJybm8gPT0gRU5PU1lTIHx8IGVy cm5vID09IEVPUE5PVFNVUFAgfHwgZXJybm8gPT0gRU5PVFNVUCkpCisgICAgICAgIHJldHVy biAtMTsKKworIyAgaWYgSEFWRV9BQ0xWX0ggLyogSFAtVVggPj0gMTEuMTEgKi8KKyAgICAg IHsKKyAgICAgICAgc3RydWN0IGFjbCBlbnRyaWVzWzRdOworCisgICAgICAgIGVudHJpZXNb MF0uYV90eXBlID0gVVNFUl9PQko7CisgICAgICAgIGVudHJpZXNbMF0uYV9pZCA9IDA7IC8q IGlycmVsZXZhbnQgKi8KKyAgICAgICAgZW50cmllc1swXS5hX3Blcm0gPSAobW9kZSA+PiA2 KSAmIDc7CisgICAgICAgIGVudHJpZXNbMV0uYV90eXBlID0gR1JPVVBfT0JKOworICAgICAg ICBlbnRyaWVzWzFdLmFfaWQgPSAwOyAvKiBpcnJlbGV2YW50ICovCisgICAgICAgIGVudHJp ZXNbMV0uYV9wZXJtID0gKG1vZGUgPj4gMykgJiA3OworICAgICAgICBlbnRyaWVzWzJdLmFf dHlwZSA9IENMQVNTX09CSjsKKyAgICAgICAgZW50cmllc1syXS5hX2lkID0gMDsKKyAgICAg ICAgZW50cmllc1syXS5hX3Blcm0gPSAobW9kZSA+PiAzKSAmIDc7CisgICAgICAgIGVudHJp ZXNbM10uYV90eXBlID0gT1RIRVJfT0JKOworICAgICAgICBlbnRyaWVzWzNdLmFfaWQgPSAw OworICAgICAgICBlbnRyaWVzWzNdLmFfcGVybSA9IG1vZGUgJiA3OworCisgICAgICAgIHJl dCA9IGFjbHNvcnQgKHNpemVvZiAoZW50cmllcykgLyBzaXplb2YgKHN0cnVjdCBhY2wpLCAx LCBlbnRyaWVzKTsKKyAgICAgICAgaWYgKHJldCA+IDApCisgICAgICAgICAgYWJvcnQgKCk7 CisgICAgICAgIGlmIChyZXQgPCAwKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgw KQorICAgICAgICAgICAgICByZXR1cm4gY2htb2Rfb3JfZmNobW9kIChuYW1lLCBkZXNjLCBt b2RlKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICB9CisKKyAgICAgICAg cmV0ID0gYWNsICgoY2hhciAqKSBuYW1lLCBBQ0xfU0VULAorICAgICAgICAgICAgICAgICAg IHNpemVvZiAoZW50cmllcykgLyBzaXplb2YgKHN0cnVjdCBhY2wpLCBlbnRyaWVzKTsKKyAg ICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKGVycm5v ID09IEVOT1NZUyB8fCBlcnJubyA9PSBFT1BOT1RTVVBQIHx8IGVycm5vID09IEVJTlZBTCkK KyAgICAgICAgICAgICAgcmV0dXJuIGNobW9kX29yX2ZjaG1vZCAobmFtZSwgZGVzYywgbW9k ZSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgfQorICAgICAgfQorIyAg ZWxzZQorICAgICAgcmV0dXJuIGNobW9kX29yX2ZjaG1vZCAobmFtZSwgZGVzYywgbW9kZSk7 CisjICBlbmRpZgorICAgIH0KKworICBpZiAobW9kZSAmIChTX0lTVUlEIHwgU19JU0dJRCB8 IFNfSVNWVFgpKQorICAgIHsKKyAgICAgIC8qIFdlIGRpZCBub3QgY2FsbCBjaG1vZCBzbyBm YXIsIHNvIHRoZSBzcGVjaWFsIGJpdHMgaGF2ZSBub3QgeWV0CisgICAgICAgICBiZWVuIHNl dC4gICovCisgICAgICByZXR1cm4gY2htb2Rfb3JfZmNobW9kIChuYW1lLCBkZXNjLCBtb2Rl KTsKKyAgICB9CisgIHJldHVybiAwOworCisjIGVsaWYgSEFWRV9BQ0xYX0dFVCAmJiBkZWZp bmVkIEFDTF9BSVhfV0lQIC8qIEFJWCAqLworCisgIGFjbF90eXBlX2xpc3RfdCB0eXBlczsK KyAgc2l6ZV90IHR5cGVzX3NpemUgPSBzaXplb2YgKHR5cGVzKTsKKyAgYWNsX3R5cGVfdCB0 eXBlOworCisgIGlmIChhY2x4X2dldHR5cGVzIChuYW1lLCAmdHlwZXMsICZ0eXBlc19zaXpl KSA8IDAKKyAgICAgIHx8IHR5cGVzLm51bV9lbnRyaWVzID09IDApCisgICAgcmV0dXJuIGNo bW9kX29yX2ZjaG1vZCAobmFtZSwgZGVzYywgbW9kZSk7CisKKyAgLyogWFhYIERvIHdlIG5l ZWQgdG8gY2xlYXIgYWxsIHR5cGVzIG9mIEFDTHMgZm9yIHRoZSBnaXZlbiBmaWxlLCBvciBp cyBpdAorICAgICBzdWZmaWNpZW50IHRvIGNsZWFyIHRoZSBmaXJzdCBvbmU/ICAqLworICB0 eXBlID0gdHlwZXMuZW50cmllc1swXTsKKyAgaWYgKHR5cGUudTY0ID09IEFDTF9BSVhDKQor ICAgIHsKKyAgICAgIHVuaW9uIHsgc3RydWN0IGFjbCBhOyBjaGFyIHJvb21bMTI4XTsgfSB1 OworICAgICAgaW50IHJldDsKKworICAgICAgdS5hLmFjbF9sZW4gPSAoY2hhciAqKSAmdS5h LmFjbF9leHRbMF0gLSAoY2hhciAqKSAmdS5hOyAvKiBubyBlbnRyaWVzICovCisgICAgICB1 LmEuYWNsX21vZGUgPSBtb2RlICYgfihTX0lYQUNMIHwgMDc3Nyk7CisgICAgICB1LmEudV9h Y2Nlc3MgPSAobW9kZSA+PiA2KSAmIDc7CisgICAgICB1LmEuZ19hY2Nlc3MgPSAobW9kZSA+ PiAzKSAmIDc7CisgICAgICB1LmEub19hY2Nlc3MgPSBtb2RlICYgNzsKKworICAgICAgaWYg KGRlc2MgIT0gLTEpCisgICAgICAgIHJldCA9IGFjbHhfZnB1dCAoZGVzYywgU0VUX0FDTCB8 IFNFVF9NT0RFX1NfQklUUywKKyAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLCAmdS5h LCB1LmEuYWNsX2xlbiwgbW9kZSk7CisgICAgICBlbHNlCisgICAgICAgIHJldCA9IGFjbHhf cHV0IChuYW1lLCBTRVRfQUNMIHwgU0VUX01PREVfU19CSVRTLAorICAgICAgICAgICAgICAg ICAgICAgICAgdHlwZSwgJnUuYSwgdS5hLmFjbF9sZW4sIG1vZGUpOworICAgICAgaWYgKCEo cmV0IDwgMCAmJiBlcnJubyA9PSBFTk9TWVMpKQorICAgICAgICByZXR1cm4gcmV0OworICAg IH0KKyAgZWxzZSBpZiAodHlwZS51NjQgPT0gQUNMX05GUzQpCisgICAgeworICAgICAgdW5p b24geyBuZnM0X2FjbF9pbnRfdCBhOyBjaGFyIHJvb21bMTI4XTsgfSB1OworICAgICAgbmZz NF9hY2VfaW50X3QgKmFjZTsKKyAgICAgIGludCByZXQ7CisKKyAgICAgIHUuYS5hY2xWZXJz aW9uID0gTkZTNF9BQ0xfSU5UX1NUUlVDVF9WRVJTSU9OOworICAgICAgdS5hLmFjbEVudHJ5 TiA9IDA7CisgICAgICBhY2UgPSAmdS5hLmFjbEVudHJ5WzBdOworICAgICAgeworICAgICAg ICBhY2UtPmZsYWdzID0gQUNFNF9JRF9TUEVDSUFMOworICAgICAgICBhY2UtPmFjZVdoby5z cGVjaWFsX3dob2lkID0gQUNFNF9XSE9fT1dORVI7CisgICAgICAgIGFjZS0+YWNlVHlwZSA9 IEFDRTRfQUNDRVNTX0FMTE9XRURfQUNFX1RZUEU7CisgICAgICAgIGFjZS0+YWNlRmxhZ3Mg PSAwOworICAgICAgICBhY2UtPmFjZU1hc2sgPQorICAgICAgICAgIChtb2RlICYgMDQwMCA/ IEFDRTRfUkVBRF9EQVRBIHwgQUNFNF9MSVNUX0RJUkVDVE9SWSA6IDApCisgICAgICAgICAg fCAobW9kZSAmIDAyMDAKKyAgICAgICAgICAgICA/IEFDRTRfV1JJVEVfREFUQSB8IEFDRTRf QUREX0ZJTEUgfCBBQ0U0X0FQUEVORF9EQVRBCisgICAgICAgICAgICAgICB8IEFDRTRfQURE X1NVQkRJUkVDVE9SWQorICAgICAgICAgICAgIDogMCkKKyAgICAgICAgICB8IChtb2RlICYg MDEwMCA/IEFDRTRfRVhFQ1VURSA6IDApOworICAgICAgICBhY2UtPmFjZVdob1N0cmluZ1sw XSA9ICdcMCc7CisgICAgICAgIGFjZS0+ZW50cnlMZW4gPSAoY2hhciAqKSAmYWNlLT5hY2VX aG9TdHJpbmdbNF0gLSAoY2hhciAqKSBhY2U7CisgICAgICAgIGFjZSA9IChuZnM0X2FjZV9p bnRfdCAqKSAoY2hhciAqKSAmYWNlLT5hY2VXaG9TdHJpbmdbNF07CisgICAgICAgIHUuYS5h Y2xFbnRyeU4rKzsKKyAgICAgIH0KKyAgICAgIHsKKyAgICAgICAgYWNlLT5mbGFncyA9IEFD RTRfSURfU1BFQ0lBTDsKKyAgICAgICAgYWNlLT5hY2VXaG8uc3BlY2lhbF93aG9pZCA9IEFD RTRfV0hPX0dST1VQOworICAgICAgICBhY2UtPmFjZVR5cGUgPSBBQ0U0X0FDQ0VTU19BTExP V0VEX0FDRV9UWVBFOworICAgICAgICBhY2UtPmFjZUZsYWdzID0gMDsKKyAgICAgICAgYWNl LT5hY2VNYXNrID0KKyAgICAgICAgICAobW9kZSAmIDAwNDAgPyBBQ0U0X1JFQURfREFUQSB8 IEFDRTRfTElTVF9ESVJFQ1RPUlkgOiAwKQorICAgICAgICAgIHwgKG1vZGUgJiAwMDIwCisg ICAgICAgICAgICAgPyBBQ0U0X1dSSVRFX0RBVEEgfCBBQ0U0X0FERF9GSUxFIHwgQUNFNF9B UFBFTkRfREFUQQorICAgICAgICAgICAgICAgfCBBQ0U0X0FERF9TVUJESVJFQ1RPUlkKKyAg ICAgICAgICAgICA6IDApCisgICAgICAgICAgfCAobW9kZSAmIDAwMTAgPyBBQ0U0X0VYRUNV VEUgOiAwKTsKKyAgICAgICAgYWNlLT5hY2VXaG9TdHJpbmdbMF0gPSAnXDAnOworICAgICAg ICBhY2UtPmVudHJ5TGVuID0gKGNoYXIgKikgJmFjZS0+YWNlV2hvU3RyaW5nWzRdIC0gKGNo YXIgKikgYWNlOworICAgICAgICBhY2UgPSAobmZzNF9hY2VfaW50X3QgKikgKGNoYXIgKikg JmFjZS0+YWNlV2hvU3RyaW5nWzRdOworICAgICAgICB1LmEuYWNsRW50cnlOKys7CisgICAg ICB9CisgICAgICB7CisgICAgICAgIGFjZS0+ZmxhZ3MgPSBBQ0U0X0lEX1NQRUNJQUw7Cisg ICAgICAgIGFjZS0+YWNlV2hvLnNwZWNpYWxfd2hvaWQgPSBBQ0U0X1dIT19FVkVSWU9ORTsK KyAgICAgICAgYWNlLT5hY2VUeXBlID0gQUNFNF9BQ0NFU1NfQUxMT1dFRF9BQ0VfVFlQRTsK KyAgICAgICAgYWNlLT5hY2VGbGFncyA9IDA7CisgICAgICAgIGFjZS0+YWNlTWFzayA9Cisg ICAgICAgICAgKG1vZGUgJiAwMDA0ID8gQUNFNF9SRUFEX0RBVEEgfCBBQ0U0X0xJU1RfRElS RUNUT1JZIDogMCkKKyAgICAgICAgICB8IChtb2RlICYgMDAwMgorICAgICAgICAgICAgID8g QUNFNF9XUklURV9EQVRBIHwgQUNFNF9BRERfRklMRSB8IEFDRTRfQVBQRU5EX0RBVEEKKyAg ICAgICAgICAgICAgIHwgQUNFNF9BRERfU1VCRElSRUNUT1JZCisgICAgICAgICAgICAgOiAw KQorICAgICAgICAgIHwgKG1vZGUgJiAwMDAxID8gQUNFNF9FWEVDVVRFIDogMCk7CisgICAg ICAgIGFjZS0+YWNlV2hvU3RyaW5nWzBdID0gJ1wwJzsKKyAgICAgICAgYWNlLT5lbnRyeUxl biA9IChjaGFyICopICZhY2UtPmFjZVdob1N0cmluZ1s0XSAtIChjaGFyICopIGFjZTsKKyAg ICAgICAgYWNlID0gKG5mczRfYWNlX2ludF90ICopIChjaGFyICopICZhY2UtPmFjZVdob1N0 cmluZ1s0XTsKKyAgICAgICAgdS5hLmFjbEVudHJ5TisrOworICAgICAgfQorICAgICAgdS5h LmFjbExlbmd0aCA9IChjaGFyICopIGFjZSAtIChjaGFyICopICZ1LmE7CisKKyAgICAgIGlm IChkZXNjICE9IC0xKQorICAgICAgICByZXQgPSBhY2x4X2ZwdXQgKGRlc2MsIFNFVF9BQ0wg fCBTRVRfTU9ERV9TX0JJVFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwgJnUu YSwgdS5hLmFjbExlbmd0aCwgbW9kZSk7CisgICAgICBlbHNlCisgICAgICAgIHJldCA9IGFj bHhfcHV0IChuYW1lLCBTRVRfQUNMIHwgU0VUX01PREVfU19CSVRTLAorICAgICAgICAgICAg ICAgICAgICAgICAgdHlwZSwgJnUuYSwgdS5hLmFjbExlbmd0aCwgbW9kZSk7CisgICAgICBp ZiAoIShyZXQgPCAwICYmIGVycm5vID09IEVOT1NZUykpCisgICAgICAgIHJldHVybiByZXQ7 CisgICAgfQorCisgIHJldHVybiBjaG1vZF9vcl9mY2htb2QgKG5hbWUsIGRlc2MsIG1vZGUp OworCisjIGVsaWYgSEFWRV9TVEFUQUNMIC8qIG9sZGVyIEFJWCAqLworCisgIHVuaW9uIHsg c3RydWN0IGFjbCBhOyBjaGFyIHJvb21bMTI4XTsgfSB1OworICBpbnQgcmV0OworCisgIHUu YS5hY2xfbGVuID0gKGNoYXIgKikgJnUuYS5hY2xfZXh0WzBdIC0gKGNoYXIgKikgJnUuYTsg Lyogbm8gZW50cmllcyAqLworICB1LmEuYWNsX21vZGUgPSBtb2RlICYgfihTX0lYQUNMIHwg MDc3Nyk7CisgIHUuYS51X2FjY2VzcyA9IChtb2RlID4+IDYpICYgNzsKKyAgdS5hLmdfYWNj ZXNzID0gKG1vZGUgPj4gMykgJiA3OworICB1LmEub19hY2Nlc3MgPSBtb2RlICYgNzsKKwor ICBpZiAoZGVzYyAhPSAtMSkKKyAgICByZXQgPSBmY2hhY2wgKGRlc2MsICZ1LmEsIHUuYS5h Y2xfbGVuKTsKKyAgZWxzZQorICAgIHJldCA9IGNoYWNsIChuYW1lLCAmdS5hLCB1LmEuYWNs X2xlbik7CisKKyAgaWYgKHJldCA8IDAgJiYgZXJybm8gPT0gRU5PU1lTKQorICAgIHJldHVy biBjaG1vZF9vcl9mY2htb2QgKG5hbWUsIGRlc2MsIG1vZGUpOworCisgIHJldHVybiByZXQ7 CisKKyMgZWxpZiBIQVZFX0FDTFNPUlQgLyogTm9uU3RvcCBLZXJuZWwgKi8KKworICBzdHJ1 Y3QgYWNsIGVudHJpZXNbNF07CisgIGludCByZXQ7CisKKyAgZW50cmllc1swXS5hX3R5cGUg PSBVU0VSX09CSjsKKyAgZW50cmllc1swXS5hX2lkID0gMDsgLyogaXJyZWxldmFudCAqLwor ICBlbnRyaWVzWzBdLmFfcGVybSA9IChtb2RlID4+IDYpICYgNzsKKyAgZW50cmllc1sxXS5h X3R5cGUgPSBHUk9VUF9PQko7CisgIGVudHJpZXNbMV0uYV9pZCA9IDA7IC8qIGlycmVsZXZh bnQgKi8KKyAgZW50cmllc1sxXS5hX3Blcm0gPSAobW9kZSA+PiAzKSAmIDc7CisgIGVudHJp ZXNbMl0uYV90eXBlID0gQ0xBU1NfT0JKOworICBlbnRyaWVzWzJdLmFfaWQgPSAwOworICBl bnRyaWVzWzJdLmFfcGVybSA9IChtb2RlID4+IDMpICYgNzsKKyAgZW50cmllc1szXS5hX3R5 cGUgPSBPVEhFUl9PQko7CisgIGVudHJpZXNbM10uYV9pZCA9IDA7CisgIGVudHJpZXNbM10u YV9wZXJtID0gbW9kZSAmIDc7CisKKyAgcmV0ID0gYWNsc29ydCAoc2l6ZW9mIChlbnRyaWVz KSAvIHNpemVvZiAoc3RydWN0IGFjbCksIDEsIGVudHJpZXMpOworICBpZiAocmV0ID4gMCkK KyAgICBhYm9ydCAoKTsKKyAgaWYgKHJldCA8IDApCisgICAgeworICAgICAgaWYgKDApCisg ICAgICAgIHJldHVybiBjaG1vZF9vcl9mY2htb2QgKG5hbWUsIGRlc2MsIG1vZGUpOworICAg ICAgcmV0dXJuIC0xOworICAgIH0KKworICByZXQgPSBhY2wgKChjaGFyICopIG5hbWUsIEFD TF9TRVQsCisgICAgICAgICAgICAgc2l6ZW9mIChlbnRyaWVzKSAvIHNpemVvZiAoc3RydWN0 IGFjbCksIGVudHJpZXMpOworICBpZiAocmV0IDwgMCkKKyAgICB7CisgICAgICBpZiAoMCkK KyAgICAgICAgcmV0dXJuIGNobW9kX29yX2ZjaG1vZCAobmFtZSwgZGVzYywgbW9kZSk7Cisg ICAgICByZXR1cm4gLTE7CisgICAgfQorCisgIGlmIChtb2RlICYgKFNfSVNVSUQgfCBTX0lT R0lEIHwgU19JU1ZUWCkpCisgICAgeworICAgICAgLyogV2UgZGlkIG5vdCBjYWxsIGNobW9k IHNvIGZhciwgc28gdGhlIHNwZWNpYWwgYml0cyBoYXZlIG5vdCB5ZXQKKyAgICAgICAgIGJl ZW4gc2V0LiAgKi8KKyAgICAgIHJldHVybiBjaG1vZF9vcl9mY2htb2QgKG5hbWUsIGRlc2Ms IG1vZGUpOworICAgIH0KKyAgcmV0dXJuIDA7CisKKyMgZWxzZSAvKiBVbmtub3duIGZsYXZv ciBvZiBBQ0xzICovCisgIHJldHVybiBjaG1vZF9vcl9mY2htb2QgKG5hbWUsIGRlc2MsIG1v ZGUpOworIyBlbmRpZgorI2Vsc2UgLyogIVVTRV9BQ0wgKi8KKyAgcmV0dXJuIGNobW9kX29y X2ZjaG1vZCAobmFtZSwgZGVzYywgbW9kZSk7CisjZW5kaWYKK30KCj09PSBhZGRlZCBmaWxl ICdtNC9hY2wubTQnCi0tLSBtNC9hY2wubTQJMTk3MC0wMS0wMSAwMDowMDowMCArMDAwMAor KysgbTQvYWNsLm00CTIwMTMtMDQtMTcgMDU6MjE6MzMgKzAwMDAKQEAgLTAsMCArMSwxNjQg QEAKKyMgYWNsLm00IC0gY2hlY2sgZm9yIGFjY2VzcyBjb250cm9sIGxpc3QgKEFDTCkgcHJp bWl0aXZlcworIyBzZXJpYWwgMTUKKworIyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDQtMjAx MyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBmaWxlIGlzIGZyZWUg c29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1p dGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBv ciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJl c2VydmVkLgorCisjIFdyaXR0ZW4gYnkgUGF1bCBFZ2dlcnQgYW5kIEppbSBNZXllcmluZy4K KworQUNfREVGVU4oW2dsX0ZVTkNfQUNMXSwKK1sKKyAgQUNfQVJHX0VOQUJMRShbYWNsXSwK KyAgICBBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWFjbF0sIFtkbyBub3Qgc3VwcG9ydCBB Q0xzXSksCisgICAgLCBbZW5hYmxlX2FjbD1hdXRvXSkKKworICBMSUJfQUNMPQorICB1c2Vf YWNsPTAKKyAgaWYgdGVzdCAieCRlbmFibGVfYWNsIiAhPSAieG5vIjsgdGhlbgorICAgIGRu bCBPbiBhbGwgcGxhdGZvcm1zLCB0aGUgQUNMIHJlbGF0ZWQgQVBJIGlzIGRlY2xhcmVkIGlu IDxzeXMvYWNsLmg+LgorICAgIEFDX0NIRUNLX0hFQURFUlMoW3N5cy9hY2wuaF0pCisgICAg aWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N5c19hY2xfaCA9IHllczsgdGhlbgorICAgICAgYWNf c2F2ZV9MSUJTPSRMSUJTCisKKyAgICAgIGRubCBUZXN0IGZvciBQT1NJWC1kcmFmdC1saWtl IEFQSSAoTGludXgsIEZyZWVCU0QsIE1hYyBPUyBYLCBJUklYLCBUcnU2NCkuCisgICAgICBk bmwgLWxhY2wgaXMgbmVlZGVkIG9uIExpbnV4LCAtbHBhY2wgaXMgbmVlZGVkIG9uIE9TRi8x LgorICAgICAgaWYgdGVzdCAkdXNlX2FjbCA9IDA7IHRoZW4KKyAgICAgICAgQUNfU0VBUkNI X0xJQlMoW2FjbF9nZXRfZmlsZV0sIFthY2wgcGFjbF0sCisgICAgICAgICAgW2lmIHRlc3Qg IiRhY19jdl9zZWFyY2hfYWNsX2dldF9maWxlIiAhPSAibm9uZSByZXF1aXJlZCI7IHRoZW4K KyAgICAgICAgICAgICBMSUJfQUNMPSRhY19jdl9zZWFyY2hfYWNsX2dldF9maWxlCisgICAg ICAgICAgIGZpCisgICAgICAgICAgIEFDX0NIRUNLX0ZVTkNTKAorICAgICAgICAgICAgIFth Y2xfZ2V0X2ZpbGUgYWNsX2dldF9mZCBhY2xfc2V0X2ZpbGUgYWNsX3NldF9mZCBcCisgICAg ICAgICAgICAgIGFjbF9mcmVlIGFjbF9mcm9tX21vZGUgYWNsX2Zyb21fdGV4dCBcCisgICAg ICAgICAgICAgIGFjbF9kZWxldGVfZGVmX2ZpbGUgYWNsX2V4dGVuZGVkX2ZpbGUgXAorICAg ICAgICAgICAgICBhY2xfZGVsZXRlX2ZkX25wIGFjbF9kZWxldGVfZmlsZV9ucCBcCisgICAg ICAgICAgICAgIGFjbF9jb3B5X2V4dF9uYXRpdmUgYWNsX2NyZWF0ZV9lbnRyeV9ucCBcCisg ICAgICAgICAgICAgIGFjbF90b19zaG9ydF90ZXh0IGFjbF9mcmVlX3RleHRdKQorICAgICAg ICAgICAjIElmIHRoZSBhY2xfZ2V0X2ZpbGUgYnVnIGlzIGRldGVjdGVkLCBkb24ndCBlbmFi bGUgdGhlIEFDTCBzdXBwb3J0LgorICAgICAgICAgICBnbF9BQ0xfR0VUX0ZJTEUoW3VzZV9h Y2w9MV0sIFtdKQorICAgICAgICAgICBpZiB0ZXN0ICR1c2VfYWNsID0gMTsgdGhlbgorICAg ICAgICAgICAgIGRubCBPbiBMaW51eCwgYWRkaXRpb25hbCBBUEkgaXMgZGVjbGFyZWQgaW4g PGFjbC9saWJhY2wuaD4uCisgICAgICAgICAgICAgQUNfQ0hFQ0tfSEVBREVSUyhbYWNsL2xp YmFjbC5oXSkKKyAgICAgICAgICAgICBBQ19SRVBMQUNFX0ZVTkNTKFthY2xfZW50cmllc10p CisgICAgICAgICAgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBBQ0xfRklSU1RfRU5UUlldLAor ICAgICAgICAgICAgICAgW2dsX2N2X2FjbF9BQ0xfRklSU1RfRU5UUlldLAorICAgICAgICAg ICAgICAgW0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oCitbWyNpbmNsdWRl IDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvYWNsLmg+CitpbnQgdHlwZSA9IEFDTF9G SVJTVF9FTlRSWTtdXSldLAorICAgICAgICAgICAgICAgICAgW2dsX2N2X2FjbF9BQ0xfRklS U1RfRU5UUlk9eWVzXSwKKyAgICAgICAgICAgICAgICAgIFtnbF9jdl9hY2xfQUNMX0ZJUlNU X0VOVFJZPW5vXSldKQorICAgICAgICAgICAgIGlmIHRlc3QgJGdsX2N2X2FjbF9BQ0xfRklS U1RfRU5UUlkgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgICAgIEFDX0RFRklORShbSEFWRV9B Q0xfRklSU1RfRU5UUlldLCBbMV0sCisgICAgICAgICAgICAgICAgIFtEZWZpbmUgdG8gMSBp ZiB0aGUgY29uc3RhbnQgQUNMX0ZJUlNUX0VOVFJZIGV4aXN0cy5dKQorICAgICAgICAgICAg IGZpCisgICAgICAgICAgICAgZG5sIE9uIE1hYyBPUyBYLCBvdGhlciB0eXBlcyBvZiBBQ0xz IGFyZSBzdXBwb3J0ZWQuCisgICAgICAgICAgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBBQ0xf VFlQRV9FWFRFTkRFRF0sCisgICAgICAgICAgICAgICBbZ2xfY3ZfYWNsX0FDTF9UWVBFX0VY VEVOREVEXSwKKyAgICAgICAgICAgICAgIFtBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19Q Uk9HUkFNKAorW1sjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL2FjbC5o PgoraW50IHR5cGUgPSBBQ0xfVFlQRV9FWFRFTkRFRDtdXSldLAorICAgICAgICAgICAgICAg ICAgW2dsX2N2X2FjbF9BQ0xfVFlQRV9FWFRFTkRFRD15ZXNdLAorICAgICAgICAgICAgICAg ICAgW2dsX2N2X2FjbF9BQ0xfVFlQRV9FWFRFTkRFRD1ub10pXSkKKyAgICAgICAgICAgICBp ZiB0ZXN0ICRnbF9jdl9hY2xfQUNMX1RZUEVfRVhURU5ERUQgPSB5ZXM7IHRoZW4KKyAgICAg ICAgICAgICAgIEFDX0RFRklORShbSEFWRV9BQ0xfVFlQRV9FWFRFTkRFRF0sIFsxXSwKKyAg ICAgICAgICAgICAgICAgW0RlZmluZSB0byAxIGlmIHRoZSBBQ0wgdHlwZSBBQ0xfVFlQRV9F WFRFTkRFRCBleGlzdHMuXSkKKyAgICAgICAgICAgICBmaQorICAgICAgICAgICBlbHNlCisg ICAgICAgICAgICAgTElCX0FDTD0KKyAgICAgICAgICAgZmkKKyAgICAgICAgICBdKQorICAg ICAgZmkKKworICAgICAgZG5sIFRlc3QgZm9yIFNvbGFyaXMgQVBJIChTb2xhcmlzLCBDeWd3 aW4pLgorICAgICAgaWYgdGVzdCAkdXNlX2FjbCA9IDA7IHRoZW4KKyAgICAgICAgQUNfQ0hF Q0tfRlVOQ1MoW2ZhY2xdKQorICAgICAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX2ZhY2wgPSB5 ZXM7IHRoZW4KKyAgICAgICAgICBBQ19TRUFSQ0hfTElCUyhbYWNsX3RyaXZpYWxdLCBbc2Vj XSwKKyAgICAgICAgICAgIFtpZiB0ZXN0ICIkYWNfY3Zfc2VhcmNoX2FjbF90cml2aWFsIiAh PSAibm9uZSByZXF1aXJlZCI7IHRoZW4KKyAgICAgICAgICAgICAgIExJQl9BQ0w9JGFjX2N2 X3NlYXJjaF9hY2xfdHJpdmlhbAorICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBdKQor ICAgICAgICAgIEFDX0NIRUNLX0ZVTkNTKFthY2xfdHJpdmlhbF0pCisgICAgICAgICAgdXNl X2FjbD0xCisgICAgICAgIGZpCisgICAgICBmaQorCisgICAgICBkbmwgVGVzdCBmb3IgSFAt VVggQVBJLgorICAgICAgaWYgdGVzdCAkdXNlX2FjbCA9IDA7IHRoZW4KKyAgICAgICAgQUNf Q0hFQ0tfRlVOQ1MoW2dldGFjbF0pCisgICAgICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfZ2V0 YWNsID0geWVzOyB0aGVuCisgICAgICAgICAgdXNlX2FjbD0xCisgICAgICAgIGZpCisgICAg ICAgIGRubCBUZXN0IGZvciBIUC1VWCAxMS4xMSBBUEkuCisgICAgICAgIEFDX0NIRUNLX0hF QURFUlMoW2FjbHYuaF0sIFtdLCBbXSwgWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD5dKQorICAg ICAgZmkKKworICAgICAgZG5sIFRlc3QgZm9yIEFJWCBBUEkgKEFJWCA1LjMgb3IgbmV3ZXIp LgorICAgICAgaWYgdGVzdCAkdXNlX2FjbCA9IDA7IHRoZW4KKyAgICAgICAgQUNfQ0hFQ0tf RlVOQ1MoW2FjbHhfZ2V0XSkKKyAgICAgICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19hY2x4X2dl dCA9IHllczsgdGhlbgorICAgICAgICAgIHVzZV9hY2w9MQorICAgICAgICBmaQorICAgICAg ZmkKKworICAgICAgZG5sIFRlc3QgZm9yIG9sZGVyIEFJWCBBUEkuCisgICAgICBpZiB0ZXN0 ICR1c2VfYWNsID0gMCB8fCB0ZXN0ICIkYWNfY3ZfZnVuY19hY2x4X2dldCIgPSB5ZXM7IHRo ZW4KKyAgICAgICAgQUNfQ0hFQ0tfRlVOQ1MoW3N0YXRhY2xdKQorICAgICAgICBpZiB0ZXN0 ICRhY19jdl9mdW5jX3N0YXRhY2wgPSB5ZXM7IHRoZW4KKyAgICAgICAgICB1c2VfYWNsPTEK KyAgICAgICAgZmkKKyAgICAgIGZpCisKKyAgICAgIGRubCBUZXN0IGZvciBOb25TdG9wIEtl cm5lbCBBUEkuCisgICAgICBpZiB0ZXN0ICR1c2VfYWNsID0gMDsgdGhlbgorICAgICAgICBB Q19DSEVDS19GVU5DUyhbYWNsc29ydF0pCisgICAgICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNf YWNsc29ydCA9IHllczsgdGhlbgorICAgICAgICAgIHVzZV9hY2w9MQorICAgICAgICBmaQor ICAgICAgZmkKKworICAgICAgTElCUz0kYWNfc2F2ZV9MSUJTCisgICAgZmkKKyAgICBpZiB0 ZXN0ICJ4JGVuYWJsZV9hY2wkdXNlX2FjbCIgPSAieHllczAiOyB0aGVuCisgICAgICBBQ19N U0dfRVJST1IoW0FDTHMgZW5hYmxlZCBidXQgc3VwcG9ydCBub3QgZGV0ZWN0ZWRdKQorICAg IGVsaWYgdGVzdCAieCRlbmFibGVfYWNsJHVzZV9hY2wiID0gInhhdXRvMCI7IHRoZW4KKyAg ICAgIEFDX01TR19XQVJOKFtsaWJhY2wgZGV2ZWxvcG1lbnQgbGlicmFyeSB3YXMgbm90IGZv dW5kIG9yIG5vdCB1c2FibGUuXSkKKyAgICAgIEFDX01TR19XQVJOKFtBQ19QQUNLQUdFX05B TUUgd2lsbCBiZSBidWlsdCB3aXRob3V0IEFDTCBzdXBwb3J0Ll0pCisgICAgZmkKKyAgZmkK KyAgQUNfU1VCU1QoW0xJQl9BQ0xdKQorICBBQ19ERUZJTkVfVU5RVU9URUQoW1VTRV9BQ0xd LCBbJHVzZV9hY2xdLAorICAgIFtEZWZpbmUgdG8gbm9uemVybyBpZiB5b3Ugd2FudCBhY2Nl c3MgY29udHJvbCBsaXN0IHN1cHBvcnQuXSkKKyAgVVNFX0FDTD0kdXNlX2FjbAorICBBQ19T VUJTVChbVVNFX0FDTF0pCitdKQorCisjIGdsX0FDTF9HRVRfRklMRShJRi1XT1JLUywgSUYt Tk9UKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIElmICdh Y2xfZ2V0X2ZpbGUnIHdvcmtzIChkb2VzIG5vdCBoYXZlIGEgcGFydGljdWxhciBidWcpLAor IyBydW4gSUYtV09SS1MsIG90aGVyd2lzZSwgSUYtTk9ULgorIyBUaGlzIHRlc3RzIGZvciBh IERhcndpbiA4LjcuMCBidWcsIHdoZXJlYnkgYWNsX2dldF9maWxlIHJldHVybnMgTlVMTCwK KyMgYnV0IHNldHMgZXJybm8gPSBFTk9FTlQgZm9yIGFuIGV4aXN0aW5nIGZpbGUgb3IgZGly ZWN0b3J5LgorQUNfREVGVU4oW2dsX0FDTF9HRVRfRklMRV0sCitbCisgIEFDX0NBQ0hFX0NI RUNLKFtmb3Igd29ya2luZyBhY2xfZ2V0X2ZpbGVdLCBbZ2xfY3ZfZnVuY193b3JraW5nX2Fj bF9nZXRfZmlsZV0sCisgICAgW0FDX1JVTl9JRkVMU0UoCisgICAgICAgW0FDX0xBTkdfUFJP R1JBTSgKKyAgICAgICAgICBbWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAgICAgICAgICAg I2luY2x1ZGUgPHN5cy9hY2wuaD4KKyAgICAgICAgICAgI2luY2x1ZGUgPGVycm5vLmg+Cisg ICAgICAgICAgXV0sCisgICAgICAgICAgW1tpZiAoIWFjbF9nZXRfZmlsZSAoIi4iLCBBQ0xf VFlQRV9BQ0NFU1MpICYmIGVycm5vID09IEVOT0VOVCkKKyAgICAgICAgICAgICAgcmV0dXJu IDE7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICBdXSldLAorICAgICAgIFtn bF9jdl9mdW5jX3dvcmtpbmdfYWNsX2dldF9maWxlPXllc10sCisgICAgICAgW2dsX2N2X2Z1 bmNfd29ya2luZ19hY2xfZ2V0X2ZpbGU9bm9dLAorICAgICAgIFtnbF9jdl9mdW5jX3dvcmtp bmdfYWNsX2dldF9maWxlPWNyb3NzLWNvbXBpbGluZ10pXSkKKworICBBU19JRihbdGVzdCAk Z2xfY3ZfZnVuY193b3JraW5nX2FjbF9nZXRfZmlsZSA9IHllc10sIFskMV0sIFskMl0pCitd KQoKPT09IG1vZGlmaWVkIGZpbGUgJ200L2dudWxpYi1jb21wLm00JwotLS0gbTQvZ251bGli LWNvbXAubTQJMjAxMy0wMy0xMyAxODo0MjoyMiArMDAwMAorKysgbTQvZ251bGliLWNvbXAu bTQJMjAxMy0wNC0yNyAyMDoyNDoxMCArMDAwMApAQCAtOTQsNiArOTQsNyBAQAogICAjIENv ZGUgZnJvbSBtb2R1bGUgcHNlbGVjdDoKICAgIyBDb2RlIGZyb20gbW9kdWxlIHB0aHJlYWRf c2lnbWFzazoKICAgIyBDb2RlIGZyb20gbW9kdWxlIHB1dGVudjoKKyAgIyBDb2RlIGZyb20g bW9kdWxlIHFhY2w6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSByZWFkbGluazoKICAgIyBDb2Rl IGZyb20gbW9kdWxlIHJlYWRsaW5rYXQ6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSByb290LXVp ZDoKQEAgLTI4Nyw2ICsyODgsNyBAQAogICAgIGdsX1BSRVJFUV9QVVRFTlYKICAgZmkKICAg Z2xfU1RETElCX01PRFVMRV9JTkRJQ0FUT1IoW3B1dGVudl0pCisgIGdsX0ZVTkNfQUNMCiAg IGdsX0ZVTkNfUkVBRExJTksKICAgaWYgdGVzdCAkSEFWRV9SRUFETElOSyA9IDAgfHwgdGVz dCAkUkVQTEFDRV9SRUFETElOSyA9IDE7IHRoZW4KICAgICBBQ19MSUJPQkooW3JlYWRsaW5r XSkKQEAgLTczMyw2ICs3MzUsMTAgQEAKICAgYnVpbGQtYXV4L3NuaXBwZXQvYXJnLW5vbm51 bGwuaAogICBidWlsZC1hdXgvc25pcHBldC9jKytkZWZzLmgKICAgYnVpbGQtYXV4L3NuaXBw ZXQvd2Fybi1vbi11c2UuaAorICBsaWIvYWNsLWVycm5vLXZhbGlkLmMKKyAgbGliL2FjbC1p bnRlcm5hbC5oCisgIGxpYi9hY2wuaAorICBsaWIvYWNsX2VudHJpZXMuYwogICBsaWIvYWxs b2NhLmluLmgKICAgbGliL2FsbG9jYXRvci5jCiAgIGxpYi9hbGxvY2F0b3IuaApAQCAtNzU4 LDYgKzc2NCw3IEBACiAgIGxpYi9mY250bC5pbi5oCiAgIGxpYi9mZGF0YXN5bmMuYwogICBs aWIvZmRvcGVuZGlyLmMKKyAgbGliL2ZpbGUtaGFzLWFjbC5jCiAgIGxpYi9maWxlbW9kZS5j CiAgIGxpYi9maWxlbW9kZS5oCiAgIGxpYi9mcGVuZGluZy5jCkBAIC03OTIsNiArNzk5LDgg QEAKICAgbGliL3BzZWxlY3QuYwogICBsaWIvcHRocmVhZF9zaWdtYXNrLmMKICAgbGliL3B1 dGVudi5jCisgIGxpYi9xY29weS1hY2wuYworICBsaWIvcXNldC1hY2wuYwogICBsaWIvcmVh ZGxpbmsuYwogICBsaWIvcmVhZGxpbmthdC5jCiAgIGxpYi9yb290LXVpZC5oCkBAIC04NDMs NiArODUyLDcgQEAKICAgbGliL3ZlcmlmeS5oCiAgIGxpYi94YWxsb2Mtb3ZlcnNpemVkLmgK ICAgbTQvMDBnbnVsaWIubTQKKyAgbTQvYWNsLm00CiAgIG00L2FsbG9jYS5tNAogICBtNC9j LXN0cnRvZC5tNAogICBtNC9jbG9ja190aW1lLm00Cgo9PT0gbW9kaWZpZWQgZmlsZSAnbnQv Q2hhbmdlTG9nJwotLS0gbnQvQ2hhbmdlTG9nCTIwMTMtMDQtMDkgMDI6Mzg6NTYgKzAwMDAK KysrIG50L0NoYW5nZUxvZwkyMDEzLTA0LTE3IDA1OjIxOjMzICswMDAwCkBAIC0xLDMgKzEs OCBAQAorMjAxMy0wNC0xNyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisK KwlVc2UgR251bGliIEFDTCBpbXBsZW1lbnRhdGlvbiwgZm9yIGJlbmVmaXQgb2YgU29sYXJp cyBldGMuCisJKiBjb25maWcubnQgKEhBVkVfQUNMX1NFVF9GSUxFKTogUmVuYW1lIGZyb20g SEFWRV9QT1NJWF9BQ0wuCisKIDIwMTMtMDQtMDkgIEtlbiBCcm93biAgPGticm93bkBjb3Ju ZWxsLmVkdT4KIAogCSogZW1hY3MucmM6IFVzZSA2NC1iaXQgbWFuaWZlc3QgZm9yIDY0LWJp dCBDeWd3aW4gYnVpbGQuCgo9PT0gbW9kaWZpZWQgZmlsZSAnbnQvY29uZmlnLm50JwotLS0g bnQvY29uZmlnLm50CTIwMTMtMDMtMzAgMDc6MTA6NTggKzAwMDAKKysrIG50L2NvbmZpZy5u dAkyMDEzLTA0LTE3IDA1OjIxOjMzICswMDAwCkBAIC03NTYsNyArNzU2LDcgQEAKICN1bmRl ZiBIQVZFX1BOR19ICiAKIC8qIERlZmluZSB0byAxIGlmIHVzaW5nIFBPU0lYIEFDTCBzdXBw b3J0LiAqLwotI2RlZmluZSBIQVZFX1BPU0lYX0FDTCAxCisjZGVmaW5lIEhBVkVfQUNMX1NF VF9GSUxFIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwb3NpeF9tZW1h bGlnbicgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9QT1NJWF9NRU1BTElHTgoKPT09IG1v ZGlmaWVkIGZpbGUgJ3NyYy9DaGFuZ2VMb2cnCi0tLSBzcmMvQ2hhbmdlTG9nCTIwMTMtMDQt MjcgMjE6MTI6MTcgKzAwMDAKKysrIHNyYy9DaGFuZ2VMb2cJMjAxMy0wNC0yOCAwMDowMDox OSArMDAwMApAQCAtMSwzICsxLDEwIEBACisyMDEzLTA0LTI3ICBQYXVsIEVnZ2VydCAgPGVn Z2VydEBjcy51Y2xhLmVkdT4KKworCVVzZSBHbnVsaWIgQUNMIGltcGxlbWVudGF0aW9uLCBm b3IgYmVuZWZpdCBvZiBTb2xhcmlzIGV0Yy4KKwkqIE1ha2VmaWxlLmluIChMSUJfQUNMKTog TmV3IG1hY3JvLgorCShMSUJBQ0xfTElCUyk6IFJlbW92ZS4KKwkoTElCRVMpOiBVc2UgTElC X0FDTCwgbm90IExJQkFDTF9MSUJTLgorCiAyMDEzLTA0LTI3ICBKdXJpIExpbmtvdiAgPGp1 cmlAanVydGEub3JnPgogCiAJKiBjYWxsaW50LmMgKEZjYWxsX2ludGVyYWN0aXZlbHkpOiBD YWxsIGBRcmVhZF9udW1iZXInIGZvcgoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9NYWtlZmls ZS5pbicKLS0tIHNyYy9NYWtlZmlsZS5pbgkyMDEzLTA0LTIyIDA1OjE4OjMwICswMDAwCisr KyBzcmMvTWFrZWZpbGUuaW4JMjAxMy0wNC0yNyAxOTo0MDo0OSArMDAwMApAQCAtMTM3LDYg KzEzNyw3IEBACiBNMTdOX0ZMVF9DRkxBR1MgPSBATTE3Tl9GTFRfQ0ZMQUdTQAogTTE3Tl9G TFRfTElCUyA9IEBNMTdOX0ZMVF9MSUJTQAogCitMSUJfQUNMPUBMSUJfQUNMQAogTElCX0NM T0NLX0dFVFRJTUU9QExJQl9DTE9DS19HRVRUSU1FQAogTElCX0VBQ0NFU1M9QExJQl9FQUND RVNTQAogTElCX0ZEQVRBU1lOQz1ATElCX0ZEQVRBU1lOQ0AKQEAgLTI4Miw4ICsyODMsNiBA QAogTElCR05VVExTX0xJQlMgPSBATElCR05VVExTX0xJQlNACiBMSUJHTlVUTFNfQ0ZMQUdT ID0gQExJQkdOVVRMU19DRkxBR1NACiAKLUxJQkFDTF9MSUJTID0gQExJQkFDTF9MSUJTQAot CiBMSUJfUFRIUkVBRF9TSUdNQVNLID0gQExJQl9QVEhSRUFEX1NJR01BU0tACiAKIElOVEVS VkFMU19IID0gZGlzcGV4dGVybi5oIGludGVydmFscy5oIGNvbXBvc2l0ZS5oCkBAIC0zOTEs MTMgKzM5MCwxMyBAQAogIyMgQ29uc3RydWN0IGZ1bGwgc2V0IG9mIGxpYnJhcmllcyB0byBi ZSBsaW5rZWQuCiBMSUJFUyA9ICQoTElCUykgJChXMzJfTElCUykgJChMSUJTX0dOVVNURVAp ICQoTElCWF9CQVNFKSAkKExJQklNQUdFKSBcCiAgICAkKExJQlhfT1RIRVIpICQoTElCU09V TkQpIFwKLSAgICQoUlNWR19MSUJTKSAkKElNQUdFTUFHSUNLX0xJQlMpICQoTElCX0NMT0NL X0dFVFRJTUUpIFwKKyAgICQoUlNWR19MSUJTKSAkKElNQUdFTUFHSUNLX0xJQlMpICQoTElC X0FDTCkgJChMSUJfQ0xPQ0tfR0VUVElNRSkgXAogICAgJChMSUJfRUFDQ0VTUykgJChMSUJf RkRBVEFTWU5DKSAkKExJQl9USU1FUl9USU1FKSAkKERCVVNfTElCUykgXAogICAgJChMSUJf RVhFQ0lORk8pIFwKICAgICQoTElCWE1MMl9MSUJTKSAkKExJQkdQTSkgJChMSUJSRVNPTFYp ICQoTElCU19TWVNURU0pIFwKICAgICQoTElCU19URVJNQ0FQKSAkKEdFVExPQURBVkdfTElC UykgJChTRVRUSU5HU19MSUJTKSAkKExJQlNFTElOVVhfTElCUykgXAogICAgJChGUkVFVFlQ RV9MSUJTKSAkKEZPTlRDT05GSUdfTElCUykgJChMSUJPVEZfTElCUykgJChNMTdOX0ZMVF9M SUJTKSBcCi0gICAkKExJQkFDTF9MSUJTKSAkKExJQkdOVVRMU19MSUJTKSAkKExJQl9QVEhS RUFEKSAkKExJQl9QVEhSRUFEX1NJR01BU0spIFwKKyAgICQoTElCR05VVExTX0xJQlMpICQo TElCX1BUSFJFQUQpICQoTElCX1BUSFJFQURfU0lHTUFTSykgXAogICAgJChMSUJfTUFUSCkK IAogYWxsOiBlbWFjcyQoRVhFRVhUKSAkKE9USEVSX0ZJTEVTKQoKPT09IG1vZGlmaWVkIGZp bGUgJ3NyYy9maWxlaW8uYycKLS0tIHNyYy9maWxlaW8uYwkyMDEzLTA0LTA3IDE2OjE4OjQx ICswMDAwCisrKyBzcmMvZmlsZWlvLmMJMjAxMy0wNC0xNyAwNToyMTozMyArMDAwMApAQCAt MzYsNyArMzYsNyBAQAogI2luY2x1ZGUgPHNlbGludXgvY29udGV4dC5oPgogI2VuZGlmCiAK LSNpZmRlZiBIQVZFX1BPU0lYX0FDTAorI2lmZGVmIEhBVkVfQUNMX1NFVF9GSUxFCiAjaW5j bHVkZSA8c3lzL2FjbC5oPgogI2VuZGlmCiAKQEAgLTgxLDI2ICs4MSw4IEBACiAjZGVmaW5l IERSSVZFX0xFVFRFUih4KSBjX3RvbG93ZXIgKHgpCiAjZW5kaWYKIAotI2lmZGVmIEhBVkVf UE9TSVhfQUNMCi0vKiBGSVhNRTogdGhpcyBtYWNybyB3YXMgY29waWVkIGZyb20gZ251bGli J3MgcHJpdmF0ZSBhY2wtaW50ZXJuYWwuaAotICAgaGVhZGVyIGZpbGUuICAqLwotLyogUmVj b2duaXplIHNvbWUgY29tbW9uIGVycm9ycyBzdWNoIGFzIGZyb20gYW4gTkZTIG1vdW50IHRo YXQgZG9lcwotICAgbm90IHN1cHBvcnQgQUNMcywgZXZlbiB3aGVuIGxvY2FsIGRyaXZlcyBk by4gICovCi0jaWYgZGVmaW5lZCBfX0FQUExFX18gJiYgZGVmaW5lZCBfX01BQ0hfXyAvKiBN YWMgT1MgWCAqLwotI2RlZmluZSBBQ0xfTk9UX1dFTExfU1VQUE9SVEVEKEVycikJCQkJCVwK LSAgKChFcnIpID09IEVOT1RTVVAgfHwgKEVycikgPT0gRU5PU1lTIHx8IChFcnIpID09IEVJ TlZBTCB8fCAoRXJyKSA9PSBFQlVTWSB8fCAoRXJyKSA9PSBFTk9FTlQpCi0jZWxpZiBkZWZp bmVkIEVPUE5PVFNVUFAgLyogVHJ1NjQgTkZTICovCi0jZGVmaW5lIEFDTF9OT1RfV0VMTF9T VVBQT1JURUQoRXJyKQkJCQkJXAotICAoKEVycikgPT0gRU5PVFNVUCB8fCAoRXJyKSA9PSBF Tk9TWVMgfHwgKEVycikgPT0gRUlOVkFMIHx8IChFcnIpID09IEVCVVNZIHx8IChFcnIpID09 IEVPUE5PVFNVUFApCi0jZWxpZiBkZWZpbmVkIFdJTkRPV1NOVAotI2RlZmluZSBBQ0xfTk9U X1dFTExfU1VQUE9SVEVEKEVycikgICgoRXJyKSA9PSBFTk9UU1VQKQotI2Vsc2UKLSNkZWZp bmUgQUNMX05PVF9XRUxMX1NVUFBPUlRFRChFcnIpCQkJCQlcCi0gICgoRXJyKSA9PSBFTk9U U1VQIHx8IChFcnIpID09IEVOT1NZUyB8fCAoRXJyKSA9PSBFSU5WQUwgfHwgKEVycikgPT0g RUJVU1kpCi0jZW5kaWYKLSNlbmRpZgkvKiBIQVZFX1BPU0lYX0FDTCAqLwotCiAjaW5jbHVk ZSAic3lzdGltZS5oIgorI2luY2x1ZGUgPGFjbC5oPgogI2luY2x1ZGUgPGFsbG9jYXRvci5o PgogI2luY2x1ZGUgPGNhcmVhZGxpbmthdC5oPgogI2luY2x1ZGUgPHN0YXQtdGltZS5oPgpA QCAtMTk4OCw5ICsxOTcwLDYgQEAKICAgc2VjdXJpdHlfY29udGV4dF90IGNvbjsKICAgaW50 IGNvbmxlbmd0aCA9IDA7CiAjZW5kaWYKLSNpZmRlZiBIQVZFX1BPU0lYX0FDTAotICBhY2xf dCBhY2wgPSBOVUxMOwotI2VuZGlmCiAKICAgZW5jb2RlZF9maWxlID0gZW5jb2RlZF9uZXdu YW1lID0gUW5pbDsKICAgR0NQUk80IChmaWxlLCBuZXduYW1lLCBlbmNvZGVkX2ZpbGUsIGVu Y29kZWRfbmV3bmFtZSk7CkBAIC0yMDI2LDE0ICsyMDA1LDYgQEAKICAgICBvdXRfc3Quc3Rf bW9kZSA9IDA7CiAKICNpZmRlZiBXSU5ET1dTTlQKLSAgaWYgKCFOSUxQIChwcmVzZXJ2ZV9l eHRlbmRlZF9hdHRyaWJ1dGVzKSkKLSAgICB7Ci0jaWZkZWYgSEFWRV9QT1NJWF9BQ0wKLSAg ICAgIGFjbCA9IGFjbF9nZXRfZmlsZSAoU0RBVEEgKGVuY29kZWRfZmlsZSksIEFDTF9UWVBF X0FDQ0VTUyk7Ci0gICAgICBpZiAoYWNsID09IE5VTEwgJiYgIUFDTF9OT1RfV0VMTF9TVVBQ T1JURUQgKGVycm5vKSkKLQlyZXBvcnRfZmlsZV9lcnJvciAoIkdldHRpbmcgQUNMIiwgRmNv bnMgKGZpbGUsIFFuaWwpKTsKLSNlbmRpZgotICAgIH0KICAgaWYgKCFDb3B5RmlsZSAoU0RB VEEgKGVuY29kZWRfZmlsZSksCiAJCSBTREFUQSAoZW5jb2RlZF9uZXduYW1lKSwKIAkJIEZB TFNFKSkKQEAgLTIwNjksMTcgKzIwNDAsNiBAQAogICAgICAgLyogUmVzdG9yZSBvcmlnaW5h bCBhdHRyaWJ1dGVzLiAgKi8KICAgICAgIFNldEZpbGVBdHRyaWJ1dGVzIChmaWxlbmFtZSwg YXR0cmlidXRlcyk7CiAgICAgfQotI2lmZGVmIEhBVkVfUE9TSVhfQUNMCi0gIGlmIChhY2wg IT0gTlVMTCkKLSAgICB7Ci0gICAgICBib29sIGZhaWwgPQotCWFjbF9zZXRfZmlsZSAoU0RB VEEgKGVuY29kZWRfbmV3bmFtZSksIEFDTF9UWVBFX0FDQ0VTUywgYWNsKSAhPSAwOwotICAg ICAgaWYgKGZhaWwgJiYgIUFDTF9OT1RfV0VMTF9TVVBQT1JURUQgKGVycm5vKSkKLQlyZXBv cnRfZmlsZV9lcnJvciAoIlNldHRpbmcgQUNMIiwgRmNvbnMgKG5ld25hbWUsIFFuaWwpKTsK LQotICAgICAgYWNsX2ZyZWUgKGFjbCk7Ci0gICAgfQotI2VuZGlmCiAjZWxzZSAvKiBub3Qg V0lORE9XU05UICovCiAgIGltbWVkaWF0ZV9xdWl0ID0gMTsKICAgaWZkID0gZW1hY3Nfb3Bl biAoU1NEQVRBIChlbmNvZGVkX2ZpbGUpLCBPX1JET05MWSwgMCk7CkBAIC0yMTAzLDEyICsy MDYzLDYgQEAKIAkgICAgcmVwb3J0X2ZpbGVfZXJyb3IgKCJEb2luZyBmZ2V0ZmlsZWNvbiIs IEZjb25zIChmaWxlLCBRbmlsKSk7CiAJfQogI2VuZGlmCi0KLSNpZmRlZiBIQVZFX1BPU0lY X0FDTAotICAgICAgYWNsID0gYWNsX2dldF9mZCAoaWZkKTsKLSAgICAgIGlmIChhY2wgPT0g TlVMTCAmJiAhQUNMX05PVF9XRUxMX1NVUFBPUlRFRCAoZXJybm8pKQotCXJlcG9ydF9maWxl X2Vycm9yICgiR2V0dGluZyBBQ0wiLCBGY29ucyAoZmlsZSwgUW5pbCkpOwotI2VuZGlmCiAg ICAgfQogCiAgIGlmIChvdXRfc3Quc3RfbW9kZSAhPSAwCkBAIC0yMTU2LDcgKzIxMTAsNyBA QAogICBpbW1lZGlhdGVfcXVpdCA9IDA7CiAKICNpZm5kZWYgTVNET1MKLSAgLyogUHJlc2Vy dmUgdGhlIG9yaWdpbmFsIGZpbGUgbW9kZXMsIGFuZCBpZiByZXF1ZXN0ZWQsIGFsc28gaXRz CisgIC8qIFByZXNlcnZlIHRoZSBvcmlnaW5hbCBmaWxlIHBlcm1pc3Npb25zLCBhbmQgaWYg cmVxdWVzdGVkLCBhbHNvIGl0cwogICAgICBvd25lciBhbmQgZ3JvdXAuICAqLwogICB7CiAg ICAgbW9kZV90IG1vZGVfbWFzayA9IDA3Nzc3OwpAQCAtMjE3Myw4ICsyMTI3LDE2IEBACiAJ ICAgICAgbW9kZV9tYXNrIHw9IDAyMDAwOwogCSAgfQogICAgICAgfQotICAgIGlmIChmY2ht b2QgKG9mZCwgc3Quc3RfbW9kZSAmIG1vZGVfbWFzaykgIT0gMCkKLSAgICAgIHJlcG9ydF9m aWxlX2Vycm9yICgiRG9pbmcgY2htb2QiLCBGY29ucyAobmV3bmFtZSwgUW5pbCkpOworCisg ICAgc3dpdGNoICghTklMUCAocHJlc2VydmVfZXh0ZW5kZWRfYXR0cmlidXRlcykKKwkgICAg PyBxY29weV9hY2wgKFNTREFUQSAoZW5jb2RlZF9maWxlKSwgaWZkLAorCQkJIFNTREFUQSAo ZW5jb2RlZF9uZXduYW1lKSwgb2ZkLAorCQkJIHN0LnN0X21vZGUgJiBtb2RlX21hc2spCisJ ICAgIDogZmNobW9kIChvZmQsIHN0LnN0X21vZGUgJiBtb2RlX21hc2spKQorICAgICAgewor ICAgICAgY2FzZSAtMjogcmVwb3J0X2ZpbGVfZXJyb3IgKCJDb3B5aW5nIHBlcm1pc3Npb25z IGZyb20iLCBsaXN0MSAoZmlsZSkpOworICAgICAgY2FzZSAtMTogcmVwb3J0X2ZpbGVfZXJy b3IgKCJDb3B5aW5nIHBlcm1pc3Npb25zIHRvIiwgbGlzdDEgKG5ld25hbWUpKTsKKyAgICAg IH0KICAgfQogI2VuZGlmCS8qIG5vdCBNU0RPUyAqLwogCkBAIC0yMTkxLDE3ICsyMTUzLDYg QEAKICAgICB9CiAjZW5kaWYKIAotI2lmZGVmIEhBVkVfUE9TSVhfQUNMCi0gIGlmIChhY2wg IT0gTlVMTCkKLSAgICB7Ci0gICAgICBib29sIGZhaWwgPSBhY2xfc2V0X2ZkIChvZmQsIGFj bCkgIT0gMDsKLSAgICAgIGlmIChmYWlsICYmICFBQ0xfTk9UX1dFTExfU1VQUE9SVEVEIChl cnJubykpCi0JcmVwb3J0X2ZpbGVfZXJyb3IgKCJTZXR0aW5nIEFDTCIsIEZjb25zIChuZXdu YW1lLCBRbmlsKSk7Ci0KLSAgICAgIGFjbF9mcmVlIChhY2wpOwotICAgIH0KLSNlbmRpZgot CiAgIGlmICghTklMUCAoa2VlcF90aW1lKSkKICAgICB7CiAgICAgICBFTUFDU19USU1FIGF0 aW1lID0gZ2V0X3N0YXRfYXRpbWUgKCZzdCk7CkBAIC0zMTExLDcgKzMwNjIsNyBAQAogewog ICBMaXNwX09iamVjdCBhYnNuYW1lOwogICBMaXNwX09iamVjdCBoYW5kbGVyOwotI2lmZGVm IEhBVkVfUE9TSVhfQUNMCisjaWZkZWYgSEFWRV9BQ0xfU0VUX0ZJTEUKICAgYWNsX3QgYWNs OwogICBMaXNwX09iamVjdCBhY2xfc3RyaW5nOwogICBjaGFyICpzdHI7CkBAIC0zMTI2LDcg KzMwNzcsNyBAQAogICBpZiAoIU5JTFAgKGhhbmRsZXIpKQogICAgIHJldHVybiBjYWxsMiAo aGFuZGxlciwgUWZpbGVfYWNsLCBhYnNuYW1lKTsKIAotI2lmZGVmIEhBVkVfUE9TSVhfQUNM CisjaWZkZWYgSEFWRV9BQ0xfU0VUX0ZJTEUKICAgYWJzbmFtZSA9IEVOQ09ERV9GSUxFIChh YnNuYW1lKTsKIAogICBhY2wgPSBhY2xfZ2V0X2ZpbGUgKFNTREFUQSAoYWJzbmFtZSksIEFD TF9UWVBFX0FDQ0VTUyk7CkBAIC0zMTY0LDcgKzMxMTUsNyBAQAogewogICBMaXNwX09iamVj dCBhYnNuYW1lOwogICBMaXNwX09iamVjdCBoYW5kbGVyOwotI2lmZGVmIEhBVkVfUE9TSVhf QUNMCisjaWZkZWYgSEFWRV9BQ0xfU0VUX0ZJTEUKICAgTGlzcF9PYmplY3QgZW5jb2RlZF9h YnNuYW1lOwogICBhY2xfdCBhY2w7CiAgIGJvb2wgZmFpbDsKQEAgLTMxNzgsNyArMzEyOSw3 IEBACiAgIGlmICghTklMUCAoaGFuZGxlcikpCiAgICAgcmV0dXJuIGNhbGwzIChoYW5kbGVy LCBRc2V0X2ZpbGVfYWNsLCBhYnNuYW1lLCBhY2xfc3RyaW5nKTsKIAotI2lmZGVmIEhBVkVf UE9TSVhfQUNMCisjaWZkZWYgSEFWRV9BQ0xfU0VUX0ZJTEUKICAgaWYgKFNUUklOR1AgKGFj bF9zdHJpbmcpKQogICAgIHsKICAgICAgIGFjbCA9IGFjbF9mcm9tX3RleHQgKFNTREFUQSAo YWNsX3N0cmluZykpOwpAQCAtMzE5Myw3ICszMTQ0LDcgQEAKICAgICAgIGZhaWwgPSAoYWNs X3NldF9maWxlIChTU0RBVEEgKGVuY29kZWRfYWJzbmFtZSksIEFDTF9UWVBFX0FDQ0VTUywK IAkJCSAgICBhY2wpCiAJICAgICAgIT0gMCk7Ci0gICAgICBpZiAoZmFpbCAmJiAhQUNMX05P VF9XRUxMX1NVUFBPUlRFRCAoZXJybm8pKQorICAgICAgaWYgKGZhaWwgJiYgYWNsX2Vycm5v X3ZhbGlkIChlcnJubykpCiAJcmVwb3J0X2ZpbGVfZXJyb3IgKCJTZXR0aW5nIEFDTCIsIEZj b25zIChhYnNuYW1lLCBRbmlsKSk7CiAKICAgICAgIGFjbF9mcmVlIChhY2wpOwoK --------------060902070705010703000507-- ------------=_1367962742-11497-1--