From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Paul Eggert Newsgroups: gmane.emacs.bugs Subject: bug#12632: file permissions checking mishandled when setuid Date: Sun, 14 Oct 2012 23:17:16 -0700 Organization: UCLA Computer Science Department Message-ID: <507BAA6C.2000601@cs.ucla.edu> References: <5078CAB6.7020509@cs.ucla.edu> <83fw5i7s4p.fsf@gnu.org> <83a9vq7oqh.fsf@gnu.org> <507A58CC.10209@cs.ucla.edu> <83fw5h5yo6.fsf@gnu.org> <507B010F.20105@cs.ucla.edu> <831uh06gqd.fsf@gnu.org> <507B15B0.2040802@cs.ucla.edu> <83txtw4xmk.fsf@gnu.org> <507B2354.3030408@cs.ucla.edu> <83sj9g4vy7.fsf@gnu.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------020005030403010803030104" X-Trace: ger.gmane.org 1350281902 19348 80.91.229.3 (15 Oct 2012 06:18:22 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Mon, 15 Oct 2012 06:18:22 +0000 (UTC) Cc: 12632@debbugs.gnu.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Mon Oct 15 08:18:27 2012 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1TNe0K-00007m-0g for geb-bug-gnu-emacs@m.gmane.org; Mon, 15 Oct 2012 08:18:20 +0200 Original-Received: from localhost ([::1]:55419 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TNe0C-0006cH-Nq for geb-bug-gnu-emacs@m.gmane.org; Mon, 15 Oct 2012 02:18:12 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:54421) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TNe04-0006c9-77 for bug-gnu-emacs@gnu.org; Mon, 15 Oct 2012 02:18:10 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TNdzx-0006ap-TQ for bug-gnu-emacs@gnu.org; Mon, 15 Oct 2012 02:18:04 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:34275) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TNdzx-0006ak-JN for bug-gnu-emacs@gnu.org; Mon, 15 Oct 2012 02:17:57 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.72) (envelope-from ) id 1TNe10-00059q-Ly for bug-gnu-emacs@gnu.org; Mon, 15 Oct 2012 02:19:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Paul Eggert Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 15 Oct 2012 06:19:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 12632 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 12632-submit@debbugs.gnu.org id=B12632.135028192419799 (code B ref 12632); Mon, 15 Oct 2012 06:19:02 +0000 Original-Received: (at 12632) by debbugs.gnu.org; 15 Oct 2012 06:18:44 +0000 Original-Received: from localhost ([127.0.0.1]:44526 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1TNe0d-00059E-C7 for submit@debbugs.gnu.org; Mon, 15 Oct 2012 02:18:43 -0400 Original-Received: from smtp.cs.ucla.edu ([131.179.128.62]:55786) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1TNe0U-00058v-SD for 12632@debbugs.gnu.org; Mon, 15 Oct 2012 02:18:37 -0400 Original-Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id E2F12A60003; Sun, 14 Oct 2012 23:17:19 -0700 (PDT) X-Virus-Scanned: amavisd-new at smtp.cs.ucla.edu Original-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 Dm7N-QGNAzKb; Sun, 14 Oct 2012 23:17:16 -0700 (PDT) Original-Received: from [192.168.1.3] (pool-108-23-119-2.lsanca.fios.verizon.net [108.23.119.2]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id 382DFA60001; Sun, 14 Oct 2012 23:17:16 -0700 (PDT) User-Agent: Mozilla/5.0 (X11; Linux i686; rv:16.0) Gecko/20121011 Thunderbird/16.0.1 In-Reply-To: <83sj9g4vy7.fsf@gnu.org> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:65621 Archived-At: This is a multi-part message in MIME format. --------------020005030403010803030104 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 10/14/2012 01:53 PM, Eli Zaretskii wrote: > That sounds like a very weak reason to switch to a non-portable API Since the main objection here seems to be using the non-portable function euidaccess, I changed the patch to use faccessat instead. faccessat, unlike euidaccess, is standardized by POSIX; it's a tad more-complicated to use but it is standard and it's no doubt a better solution in the long run anyway. The patch uses the Gnulib substitute for faccessat for obsolescent POSIXish hosts that lack faccessat. For Windows the patch simply reworks the existing substitute for 'access' so that it implements faccessat instead. Revised patch attached. --------------020005030403010803030104 Content-Type: text/plain; charset=UTF-8; name="faccessat.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="faccessat.txt" PT09IG1vZGlmaWVkIGZpbGUgJy5ienJpZ25vcmUnCi0tLSAuYnpyaWdub3JlCTIwMTItMTAt MTEgMTE6MjY6MjYgKzAwMDAKKysrIC5ienJpZ25vcmUJMjAxMi0xMC0xNSAwNjowNTo0NiAr MDAwMApAQCAtODcsNiArODcsNyBAQAogbGliL2FyZy1ub25udWxsLmgKIGxpYi9jKytkZWZz LmgKIGxpYi9leGVjaW5mby5oCitsaWIvZmNudGwuaAogbGliL2dldG9wdC5oCiBsaWIvaW50 dHlwZXMuaAogbGliL3N0ZGFsaWduLmgKCj09PSBtb2RpZmllZCBmaWxlICdDaGFuZ2VMb2cn Ci0tLSBDaGFuZ2VMb2cJMjAxMi0xMC0xMSAxMToyOTo0NyArMDAwMAorKysgQ2hhbmdlTG9n CTIwMTItMTAtMTUgMDY6MDU6NDYgKzAwMDAKQEAgLTEsMyArMSwxNiBAQAorMjAxMi0xMC0x NSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CisKKwlVc2UgZmFjY2Vzc2F0 LCBub3QgYWNjZXNzLCB3aGVuIGNoZWNraW5nIGZpbGUgcGVybWlzc2lvbnMgKEJ1ZyMxMjYz MikuCisJKiAuYnpyaWdub3JlOiBBZGQgbGliL2ZjbnRsLmguCisJKiBjb25maWd1cmUuYWMg KGV1aWRhY2Nlc3MpOiBSZW1vdmUgY2hlY2s7IGdudWxpYiBkb2VzIHRoaXMgZm9yIHVzIG5v dy4KKwkoZ2xfRkNOVExfT19GTEFHUyk6IERlZmluZSBhIGR1bW15IHZlcnNpb24uCisJKiBs aWIvYXQtZnVuYy5jLCBsaWIvZXVpZGFjY2Vzcy5jLCBsaWIvZmFjY2Vzc2F0LmMsIGxpYi9m Y250bC5pbi5oOgorCSogbGliL2dldGdyb3Vwcy5jLCBsaWIvZ3JvdXAtbWVtYmVyLmMsIGxp Yi9yb290LXVpZC5oOgorCSogbGliL3hhbGxvYy1vdmVyc2l6ZWQuaCwgbTQvZXVpZGFjY2Vz cy5tNCwgbTQvZmFjY2Vzc2F0Lm00OgorCSogbTQvZmNudGxfaC5tNCwgbTQvZ2V0Z3JvdXBz Lm00LCBtNC9ncm91cC1tZW1iZXIubTQ6CisJTmV3IGZpbGVzLCBmcm9tIGdudWxpYi4KKwkq IGxpYi9nbnVsaWIubWssIG00L2dudWxpYi1jb21wLm00OiBSZWdlbmVyYXRlLgorCiAyMDEy LTEwLTExICBLZW5pY2hpIEhhbmRhICA8aGFuZGFAZ251Lm9yZz4KIAogCSogLmJ6cmlnbm9y ZTogQWRkIHNldmVyYWwgZmlsZXMgdW5kZXIgYWRtaW4vY2hhcnNldHMuCgo9PT0gbW9kaWZp ZWQgZmlsZSAnYWRtaW4vQ2hhbmdlTG9nJwotLS0gYWRtaW4vQ2hhbmdlTG9nCTIwMTItMTAt MTQgMDg6MDE6MzAgKzAwMDAKKysrIGFkbWluL0NoYW5nZUxvZwkyMDEyLTEwLTE1IDA2OjA1 OjQ2ICswMDAwCkBAIC0xLDMgKzEsMTEgQEAKKzIwMTItMTAtMTQgIFBhdWwgRWdnZXJ0ICA8 ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJVXNlIGZhY2Nlc3NhdCwgbm90IGFjY2Vzcywgd2hl biBjaGVja2luZyBmaWxlIHBlcm1pc3Npb25zIChCdWcjMTI2MzIpLgorCSogbWVyZ2UtZ251 bGliIChHTlVMSUJfTU9EVUxFUyk6IEFkZCBmYWNjZXNzYXQuCisJKEdOVUxJQl9UT09MX0ZM QUdTKTogQXZvaWQgYXQtaW50ZXJuYWwsIGZjaGRpciwgbWFsbG9jLXBvc2l4LAorCW9wZW5h dC1kaWUsIG9wZW5hdC1oLCBzYXZlLWN3ZC4gIERvIG5vdCBhdm9pZCBmY250bC1oLgorCU9t aXQgZ251bGliJ3MgbTQvZmNudGwtby5tNC4KKwogMjAxMi0xMC0xMiAgS2VuaWNoaSBIYW5k YSAgPGhhbmRhQGdudS5vcmc+CiAKIAkqIGNoYXJzZXRzL01ha2VmaWxlIChKSVNDNjIyNi5t YXApOiBBZGQgbWlzc2luZyBtYXBwaW5ncy4KCj09PSBtb2RpZmllZCBmaWxlICdhZG1pbi9t ZXJnZS1nbnVsaWInCi0tLSBhZG1pbi9tZXJnZS1nbnVsaWIJMjAxMi0wOS0yNyAwMTowNjoy MyArMDAwMAorKysgYWRtaW4vbWVyZ2UtZ251bGliCTIwMTItMTAtMTUgMDY6MDU6NDYgKzAw MDAKQEAgLTI4LDcgKzI4LDcgQEAKIEdOVUxJQl9NT0RVTEVTPScKICAgYWxsb2NhLW9wdCBj LWN0eXBlIGMtc3RyY2FzZQogICBjYXJlYWRsaW5rYXQgY3J5cHRvL21kNSBjcnlwdG8vc2hh MSBjcnlwdG8vc2hhMjU2IGNyeXB0by9zaGE1MTIKLSAgZHRvYXN0ciBkdG90aW1lc3BlYyBk dXAyIGVudmlyb24gZXhlY2luZm8KKyAgZHRvYXN0ciBkdG90aW1lc3BlYyBkdXAyIGVudmly b24gZXhlY2luZm8gZmFjY2Vzc2F0CiAgIGZpbGVtb2RlIGdldGxvYWRhdmcgZ2V0b3B0LWdu dSBnZXR0aW1lIGdldHRpbWVvZmRheQogICBpZ25vcmUtdmFsdWUgaW50cHJvcHMgbGFyZ2Vm aWxlIGxzdGF0CiAgIG1hbnl3YXJuaW5ncyBta3RpbWUgcHNlbGVjdCBwdGhyZWFkX3NpZ21h c2sgcmVhZGxpbmsKQEAgLTM5LDkgKzM5LDEyIEBACiAnCiAKIEdOVUxJQl9UT09MX0ZMQUdT PScKLSAgLS1hdm9pZD1lcnJubyAtLWF2b2lkPWZjbnRsIC0tYXZvaWQ9ZmNudGwtaCAtLWF2 b2lkPWZzdGF0Ci0gIC0tYXZvaWQ9bXN2Yy1pbnZhbCAtLWF2b2lkPW1zdmMtbm90aHJvdwot ICAtLWF2b2lkPXJhaXNlIC0tYXZvaWQ9c2VsZWN0IC0tYXZvaWQ9c2lncHJvY21hc2sgLS1h dm9pZD1zeXNfdHlwZXMKKyAgLS1hdm9pZD1hdC1pbnRlcm5hbAorICAtLWF2b2lkPWVycm5v IC0tYXZvaWQ9ZmNoZGlyIC0tYXZvaWQ9ZmNudGwgLS1hdm9pZD1mc3RhdAorICAtLWF2b2lk PW1hbGxvYy1wb3NpeCAtLWF2b2lkPW1zdmMtaW52YWwgLS1hdm9pZD1tc3ZjLW5vdGhyb3cK KyAgLS1hdm9pZD1vcGVuYXQtZGllIC0tYXZvaWQ9b3BlbmF0LWgKKyAgLS1hdm9pZD1yYWlz ZQorICAtLWF2b2lkPXNhdmUtY3dkIC0tYXZvaWQ9c2VsZWN0IC0tYXZvaWQ9c2lncHJvY21h c2sgLS1hdm9pZD1zeXNfdHlwZXMKICAgLS1hdm9pZD10aHJlYWRsaWIKICAgLS1jb25kaXRp b25hbC1kZXBlbmRlbmNpZXMgLS1pbXBvcnQgLS1uby1jaGFuZ2Vsb2cgLS1uby12Yy1maWxl cwogICAtLW1ha2VmaWxlLW5hbWU9Z251bGliLm1rCkBAIC04NSw3ICs4OCw3IEBACiB9CiAK ICIkZ251bGliX3NyY2RpciIvZ251bGliLXRvb2wgLS1kaXI9IiRzcmMiICRHTlVMSUJfVE9P TF9GTEFHUyAkR05VTElCX01PRFVMRVMgJiYKLXJtIC0tICIkc3JjIm00L2dudWxpYi1jYWNo ZS5tNCAiJHNyYyJtNC93YXJuLW9uLXVzZS5tNCAmJgorcm0gLS0gIiRzcmMibTQvZmNudGwt by5tNCAiJHNyYyJtNC9nbnVsaWItY2FjaGUubTQgIiRzcmMibTQvd2Fybi1vbi11c2UubTQg JiYKIGNwIC0tICIkZ251bGliX3NyY2RpciIvYnVpbGQtYXV4L3RleGluZm8udGV4ICIkc3Jj ImRvYy9taXNjICYmCiBjcCAtLSAiJGdudWxpYl9zcmNkaXIiL2J1aWxkLWF1eC9tb3ZlLWlm LWNoYW5nZSAiJHNyYyJidWlsZC1hdXggJiYKIGF1dG9yZWNvbmYgLWkgLUkgbTQgLS0gJHtz cmM6KyIkc3JjIn0KCj09PSBtb2RpZmllZCBmaWxlICdjb25maWd1cmUuYWMnCi0tLSBjb25m aWd1cmUuYWMJMjAxMi0xMC0wOCAxNjowOTowMCArMDAwMAorKysgY29uZmlndXJlLmFjCTIw MTItMTAtMTUgMDY6MDU6NDYgKzAwMDAKQEAgLTU3Miw2ICs1NzIsOCBAQAogICB0ZXN0ICJ4 JE5PTl9HQ0NfVEVTVF9PUFRJT05TIiAhPSB4ICYmIENDPSIkQ0MgJE5PTl9HQ0NfVEVTVF9P UFRJT05TIgogZmkKIAorIyBBdm9pZCBnbnVsaWIncyB0ZXN0cyBmb3IgT19OT0FUSU1FIGFu ZCBPX05PRk9MTE9XLCBhcyB3ZSBkb24ndCB1c2UgdGhlbS4KK0FDX0RFRlVOKFtnbF9GQ05U TF9PX0ZMQUdTXSkKICMgQXZvaWQgZ251bGliJ3MgdGhyZWFkbGliIG1vZHVsZSwgYXMgd2Ug ZG8gdGhyZWFkcyBvdXIgb3duIHdheS4KIEFDX0RFRlVOKFtnbF9USFJFQURMSUJdKQogCkBA IC0yODcyLDcgKzI4NzQsNyBAQAogQUNfQ0hFQ0tfRlVOQ1MoZ2V0aG9zdG5hbWUgXAogY2xv c2VkaXIgZ2V0cnVzYWdlIGdldF9jdXJyZW50X2Rpcl9uYW1lIFwKIGxyYW5kNDggc2V0c2lk IFwKLWZwYXRoY29uZiBzZWxlY3QgZXVpZGFjY2VzcyBnZXRwYWdlc2l6ZSBzZXRsb2NhbGUg XAorZnBhdGhjb25mIHNlbGVjdCBnZXRwYWdlc2l6ZSBzZXRsb2NhbGUgXAogdXRpbWVzIGdl dHJsaW1pdCBzZXRybGltaXQgc2V0cGdpZCBnZXRjd2Qgc2h1dGRvd24gZ2V0YWRkcmluZm8g XAogX19mcGVuZGluZyBzdHJzaWduYWwgc2V0aXRpbWVyIFwKIHNlbmR0byByZWN2ZnJvbSBn ZXRzb2NrbmFtZSBnZXRwZWVybmFtZSBnZXRpZmFkZHJzIGZyZWVpZmFkZHJzIFwKCj09PSBh ZGRlZCBmaWxlICdsaWIvYXQtZnVuYy5jJwotLS0gbGliL2F0LWZ1bmMuYwkxOTcwLTAxLTAx IDAwOjAwOjAwICswMDAwCisrKyBsaWIvYXQtZnVuYy5jCTIwMTItMTAtMTUgMDY6MDU6NDYg KzAwMDAKQEAgLTAsMCArMSwxNDYgQEAKKy8qIERlZmluZSBhdC1zdHlsZSBmdW5jdGlvbnMg bGlrZSBmc3RhdGF0LCB1bmxpbmthdCwgZmNob3duYXQsIGV0Yy4KKyAgIENvcHlyaWdodCAo QykgMjAwNiwgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisg ICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisg ICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0 aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz Lz4uICAqLworCisvKiB3cml0dGVuIGJ5IEppbSBNZXllcmluZyAqLworCisjaW5jbHVkZSAi ZG9zbmFtZS5oIiAvKiBzb2xlbHkgZm9yIGRlZmluaXRpb24gb2YgSVNfQUJTT0xVVEVfRklM RV9OQU1FICovCisKKyNpZmRlZiBHTlVMSUJfU1VQUE9SVF9PTkxZX0FUX0ZEQ1dECisjIGlu Y2x1ZGUgPGVycm5vLmg+CisjIGlmbmRlZiBFTk9UU1VQCisjICBkZWZpbmUgRU5PVFNVUCBF SU5WQUwKKyMgZW5kaWYKKyNlbHNlCisjIGluY2x1ZGUgIm9wZW5hdC5oIgorIyBpbmNsdWRl ICJvcGVuYXQtcHJpdi5oIgorIyBpbmNsdWRlICJzYXZlLWN3ZC5oIgorI2VuZGlmCisKKyNp ZmRlZiBBVF9GVU5DX1VTRV9GMV9DT05ECisjIGRlZmluZSBDQUxMX0ZVTkMoRikgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisgIChmbGFnID09IEFUX0ZVTkNfVVNFX0YxX0NPTkQg ICAgICAgICAgICAgICAgICBcCisgICAgPyBBVF9GVU5DX0YxIChGIEFUX0ZVTkNfUE9TVF9G SUxFX0FSR1MpICAgICBcCisgICAgOiBBVF9GVU5DX0YyIChGIEFUX0ZVTkNfUE9TVF9GSUxF X0FSR1MpKQorIyBkZWZpbmUgVkFMSURBVEVfRkxBRyhGKSAgICAgICAgICAgICAgICAgICAg ICAgXAorICBpZiAoZmxhZyAmIH5BVF9GVU5DX1VTRV9GMV9DT05EKSAgICAgICAgICAgICAg XAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor ICAgICAgZXJybm8gPSBFSU5WQUw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg ICAgcmV0dXJuIEZVTkNfRkFJTDsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0K KyNlbHNlCisjIGRlZmluZSBDQUxMX0ZVTkMoRikgKEFUX0ZVTkNfRjEgKEYgQVRfRlVOQ19Q T1NUX0ZJTEVfQVJHUykpCisjIGRlZmluZSBWQUxJREFURV9GTEFHKEYpIC8qIGVtcHR5ICov CisjZW5kaWYKKworI2lmZGVmIEFUX0ZVTkNfUkVTVUxUCisjIGRlZmluZSBGVU5DX1JFU1VM VCBBVF9GVU5DX1JFU1VMVAorI2Vsc2UKKyMgZGVmaW5lIEZVTkNfUkVTVUxUIGludAorI2Vu ZGlmCisKKyNpZmRlZiBBVF9GVU5DX0ZBSUwKKyMgZGVmaW5lIEZVTkNfRkFJTCBBVF9GVU5D X0ZBSUwKKyNlbHNlCisjIGRlZmluZSBGVU5DX0ZBSUwgLTEKKyNlbmRpZgorCisvKiBDYWxs IEFUX0ZVTkNfRjEgdG8gb3BlcmF0ZSBvbiBGSUxFLCB3aGljaCBpcyBpbiB0aGUgZGlyZWN0 b3J5CisgICBvcGVuIG9uIGRlc2NyaXB0b3IgRkQuICBJZiBBVF9GVU5DX1VTRV9GMV9DT05E IGlzIGRlZmluZWQgdG8gYSB2YWx1ZSwKKyAgIEFUX0ZVTkNfUE9TVF9GSUxFX1BBUkFNX0RF Q0xTIG11c3QgaW5jbHVkZSBhIHBhcmFtZXRlciBuYW1lZCBmbGFnOworICAgY2FsbCBBVF9G VU5DX0YyIGlmIEZMQUcgaXMgMCBvciBmYWlsIGlmIEZMQUcgY29udGFpbnMgbW9yZSBiaXRz IHRoYW4KKyAgIEFUX0ZVTkNfVVNFX0YxX0NPTkQuICBSZXR1cm4gaW50IGFuZCBmYWlsIHdp dGggLTEgdW5sZXNzIEFUX0ZVTkNfUkVTVUxUCisgICBvciBBVF9GVU5DX0ZBSUwgYXJlIGRl ZmluZWQuICBJZiBwb3NzaWJsZSwgZG8gaXQgd2l0aG91dCBjaGFuZ2luZyB0aGUKKyAgIHdv cmtpbmcgZGlyZWN0b3J5LiAgT3RoZXJ3aXNlLCByZXNvcnQgdG8gdXNpbmcgc2F2ZV9jd2Qv ZmNoZGlyLAorICAgdGhlbiBBVF9GVU5DX0Y/L3Jlc3RvcmVfY3dkLiAgSWYgZWl0aGVyIHRo ZSBzYXZlX2N3ZCBvciB0aGUgcmVzdG9yZV9jd2QKKyAgIGZhaWxzLCB0aGVuIGdpdmUgYSBk aWFnbm9zdGljIGFuZCBleGl0IG5vbnplcm8uICAqLworRlVOQ19SRVNVTFQKK0FUX0ZVTkNf TkFNRSAoaW50IGZkLCBjaGFyIGNvbnN0ICpmaWxlIEFUX0ZVTkNfUE9TVF9GSUxFX1BBUkFN X0RFQ0xTKQoreworICBWQUxJREFURV9GTEFHIChmbGFnKTsKKworICBpZiAoZmQgPT0gQVRf RkRDV0QgfHwgSVNfQUJTT0xVVEVfRklMRV9OQU1FIChmaWxlKSkKKyAgICByZXR1cm4gQ0FM TF9GVU5DIChmaWxlKTsKKworI2lmZGVmIEdOVUxJQl9TVVBQT1JUX09OTFlfQVRfRkRDV0QK KyAgZXJybm8gPSBFTk9UU1VQOworICByZXR1cm4gRlVOQ19GQUlMOworI2Vsc2UKKyAgewor ICAvKiBCZSBjYXJlZnVsIHRvIGNob29zZSBuYW1lcyB1bmxpa2VseSB0byBjb25mbGljdCB3 aXRoCisgICAgIEFUX0ZVTkNfUE9TVF9GSUxFX1BBUkFNX0RFQ0xTLiAgKi8KKyAgc3RydWN0 IHNhdmVkX2N3ZCBzYXZlZF9jd2Q7CisgIGludCBzYXZlZF9lcnJubzsKKyAgRlVOQ19SRVNV TFQgZXJyOworCisgIHsKKyAgICBjaGFyIHByb2NfYnVmW09QRU5BVF9CVUZGRVJfU0laRV07 CisgICAgY2hhciAqcHJvY19maWxlID0gb3BlbmF0X3Byb2NfbmFtZSAocHJvY19idWYsIGZk LCBmaWxlKTsKKyAgICBpZiAocHJvY19maWxlKQorICAgICAgeworICAgICAgICBGVU5DX1JF U1VMVCBwcm9jX3Jlc3VsdCA9IENBTExfRlVOQyAocHJvY19maWxlKTsKKyAgICAgICAgaW50 IHByb2NfZXJybm8gPSBlcnJubzsKKyAgICAgICAgaWYgKHByb2NfZmlsZSAhPSBwcm9jX2J1 ZikKKyAgICAgICAgICBmcmVlIChwcm9jX2ZpbGUpOworICAgICAgICAvKiBJZiB0aGUgc3lz Y2FsbCBzdWNjZWVkcywgb3IgaWYgaXQgZmFpbHMgd2l0aCBhbiB1bmV4cGVjdGVkCisgICAg ICAgICAgIGVycm5vIHZhbHVlLCB0aGVuIHJldHVybiByaWdodCBhd2F5LiAgT3RoZXJ3aXNl LCBmYWxsIHRocm91Z2gKKyAgICAgICAgICAgYW5kIHJlc29ydCB0byB1c2luZyBzYXZlX2N3 ZC9yZXN0b3JlX2N3ZC4gICovCisgICAgICAgIGlmIChGVU5DX0ZBSUwgIT0gcHJvY19yZXN1 bHQpCisgICAgICAgICAgcmV0dXJuIHByb2NfcmVzdWx0OworICAgICAgICBpZiAoISBFWFBF Q1RFRF9FUlJOTyAocHJvY19lcnJubykpCisgICAgICAgICAgeworICAgICAgICAgICAgZXJy bm8gPSBwcm9jX2Vycm5vOworICAgICAgICAgICAgcmV0dXJuIHByb2NfcmVzdWx0OworICAg ICAgICAgIH0KKyAgICAgIH0KKyAgfQorCisgIGlmIChzYXZlX2N3ZCAoJnNhdmVkX2N3ZCkg IT0gMCkKKyAgICBvcGVuYXRfc2F2ZV9mYWlsIChlcnJubyk7CisgIGlmICgwIDw9IGZkICYm IGZkID09IHNhdmVkX2N3ZC5kZXNjKQorICAgIHsKKyAgICAgIC8qIElmIHNhdmluZyB0aGUg d29ya2luZyBkaXJlY3RvcnkgY29sbGlkZXMgd2l0aCB0aGUgdXNlcidzCisgICAgICAgICBy ZXF1ZXN0ZWQgZmQsIHRoZW4gdGhlIHVzZXIncyBmZCBtdXN0IGhhdmUgYmVlbiBjbG9zZWQg dG8KKyAgICAgICAgIGJlZ2luIHdpdGguICAqLworICAgICAgZnJlZV9jd2QgKCZzYXZlZF9j d2QpOworICAgICAgZXJybm8gPSBFQkFERjsKKyAgICAgIHJldHVybiBGVU5DX0ZBSUw7Cisg ICAgfQorCisgIGlmIChmY2hkaXIgKGZkKSAhPSAwKQorICAgIHsKKyAgICAgIHNhdmVkX2Vy cm5vID0gZXJybm87CisgICAgICBmcmVlX2N3ZCAoJnNhdmVkX2N3ZCk7CisgICAgICBlcnJu byA9IHNhdmVkX2Vycm5vOworICAgICAgcmV0dXJuIEZVTkNfRkFJTDsKKyAgICB9CisKKyAg ZXJyID0gQ0FMTF9GVU5DIChmaWxlKTsKKyAgc2F2ZWRfZXJybm8gPSAoZXJyID09IEZVTkNf RkFJTCA/IGVycm5vIDogMCk7CisKKyAgaWYgKHJlc3RvcmVfY3dkICgmc2F2ZWRfY3dkKSAh PSAwKQorICAgIG9wZW5hdF9yZXN0b3JlX2ZhaWwgKGVycm5vKTsKKworICBmcmVlX2N3ZCAo JnNhdmVkX2N3ZCk7CisKKyAgaWYgKHNhdmVkX2Vycm5vKQorICAgIGVycm5vID0gc2F2ZWRf ZXJybm87CisgIHJldHVybiBlcnI7CisgIH0KKyNlbmRpZgorfQorI3VuZGVmIENBTExfRlVO QworI3VuZGVmIEZVTkNfUkVTVUxUCisjdW5kZWYgRlVOQ19GQUlMCgo9PT0gYWRkZWQgZmls ZSAnbGliL2V1aWRhY2Nlc3MuYycKLS0tIGxpYi9ldWlkYWNjZXNzLmMJMTk3MC0wMS0wMSAw MDowMDowMCArMDAwMAorKysgbGliL2V1aWRhY2Nlc3MuYwkyMDEyLTEwLTEyIDIzOjI4OjMx ICswMDAwCkBAIC0wLDAgKzEsMjIxIEBACisvKiBldWlkYWNjZXNzIC0tIGNoZWNrIGlmIGVm ZmVjdGl2ZSB1c2VyIGlkIGNhbiBhY2Nlc3MgZmlsZQorCisgICBDb3B5cmlnaHQgKEMpIDE5 OTAtMTk5MSwgMTk5NSwgMTk5OCwgMjAwMCwgMjAwMy0yMDA2LCAyMDA4LTIwMTIgRnJlZQor ICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBv ZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlz aGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogV3JpdHRlbiBieSBEYXZp ZCBNYWNLZW56aWUgYW5kIFRvcmJqb3JuIEdyYW5sdW5kLgorICAgQWRhcHRlZCBmb3IgR05V IEMgbGlicmFyeSBieSBSb2xhbmQgTWNHcmF0aC4gICovCisKKyNpZm5kZWYgX0xJQkMKKyMg aW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5j bHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDx1 bmlzdGQuaD4KKworI2luY2x1ZGUgInJvb3QtdWlkLmgiCisKKyNpZiBIQVZFX0xJQkdFTl9I CisjIGluY2x1ZGUgPGxpYmdlbi5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxlcnJuby5oPgor I2lmbmRlZiBfX3NldF9lcnJubworIyBkZWZpbmUgX19zZXRfZXJybm8odmFsKSBlcnJubyA9 ICh2YWwpCisjZW5kaWYKKworI2lmIGRlZmluZWQgRUFDQ0VTICYmICFkZWZpbmVkIEVBQ0NF U1MKKyMgZGVmaW5lIEVBQ0NFU1MgRUFDQ0VTCisjZW5kaWYKKworI2lmbmRlZiBGX09LCisj IGRlZmluZSBGX09LIDAKKyMgZGVmaW5lIFhfT0sgMQorIyBkZWZpbmUgV19PSyAyCisjIGRl ZmluZSBSX09LIDQKKyNlbmRpZgorCisKKyNpZmRlZiBfTElCQworCisjIGRlZmluZSBhY2Nl c3MgX19hY2Nlc3MKKyMgZGVmaW5lIGdldHVpZCBfX2dldHVpZAorIyBkZWZpbmUgZ2V0Z2lk IF9fZ2V0Z2lkCisjIGRlZmluZSBnZXRldWlkIF9fZ2V0ZXVpZAorIyBkZWZpbmUgZ2V0ZWdp ZCBfX2dldGVnaWQKKyMgZGVmaW5lIGdyb3VwX21lbWJlciBfX2dyb3VwX21lbWJlcgorIyBk ZWZpbmUgZXVpZGFjY2VzcyBfX2V1aWRhY2Nlc3MKKyMgdW5kZWYgc3RhdAorIyBkZWZpbmUg c3RhdCBzdGF0NjQKKworI2VuZGlmCisKKy8qIFJldHVybiAwIGlmIHRoZSB1c2VyIGhhcyBw ZXJtaXNzaW9uIG9mIHR5cGUgTU9ERSBvbiBGSUxFOworICAgb3RoZXJ3aXNlLCByZXR1cm4g LTEgYW5kIHNldCAnZXJybm8nLgorICAgTGlrZSBhY2Nlc3MsIGV4Y2VwdCB0aGF0IGl0IHVz ZXMgdGhlIGVmZmVjdGl2ZSB1c2VyIGFuZCBncm91cAorICAgaWQncyBpbnN0ZWFkIG9mIHRo ZSByZWFsIG9uZXMsIGFuZCBpdCBkb2VzIG5vdCBhbHdheXMgY2hlY2sgZm9yIHJlYWQtb25s eQorICAgZmlsZSBzeXN0ZW0sIHRleHQgYnVzeSwgZXRjLiAgKi8KKworaW50CitldWlkYWNj ZXNzIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbW9kZSkKK3sKKyNpZiBIQVZFX0ZBQ0NFU1NB VCAgICAgICAgICAgICAgICAgICAvKiBnbGliYywgQUlYIDcsIFNvbGFyaXMgMTEsIEN5Z3dp biAxLjcgKi8KKyAgcmV0dXJuIGZhY2Nlc3NhdCAoQVRfRkRDV0QsIGZpbGUsIG1vZGUsIEFU X0VBQ0NFU1MpOworI2VsaWYgZGVmaW5lZCBFRkZfT05MWV9PSyAgICAgICAgICAgICAgIC8q IElSSVgsIE9TRi8xLCBJbnRlcml4ICovCisgIHJldHVybiBhY2Nlc3MgKGZpbGUsIG1vZGUg fCBFRkZfT05MWV9PSyk7CisjZWxpZiBkZWZpbmVkIEFDQ19TRUxGICAgICAgICAgICAgICAg ICAgLyogQUlYICovCisgIHJldHVybiBhY2Nlc3N4IChmaWxlLCBtb2RlLCBBQ0NfU0VMRik7 CisjZWxpZiBIQVZFX0VBQ0NFU1MgICAgICAgICAgICAgICAgICAgICAgLyogRnJlZUJTRCAq LworICByZXR1cm4gZWFjY2VzcyAoZmlsZSwgbW9kZSk7CisjZWxzZSAgICAgICAvKiBNYWMg T1MgWCwgTmV0QlNELCBPcGVuQlNELCBIUC1VWCwgU29sYXJpcywgQ3lnd2luLCBtaW5ndywg QmVPUyAqLworCisgIHVpZF90IHVpZCA9IGdldHVpZCAoKTsKKyAgZ2lkX3QgZ2lkID0gZ2V0 Z2lkICgpOworICB1aWRfdCBldWlkID0gZ2V0ZXVpZCAoKTsKKyAgZ2lkX3QgZWdpZCA9IGdl dGVnaWQgKCk7CisgIHN0cnVjdCBzdGF0IHN0YXRzOworCisjIGlmIEhBVkVfREVDTF9TRVRS RUdJRCAmJiBQUkVGRVJfTk9OUkVFTlRSQU5UX0VVSURBQ0NFU1MKKworICAvKiBEZWZpbmUg UFJFRkVSX05PTlJFRU5UUkFOVF9FVUlEQUNDRVNTIGlmIHlvdSBwcmVmZXIgZXVpZGFjY2Vz cyB0bworICAgICByZXR1cm4gdGhlIGNvcnJlY3QgcmVzdWx0IGV2ZW4gaWYgdGhpcyB3b3Vs ZCBtYWtlIGl0CisgICAgIG5vbnJlZW50cmFudC4gIERlZmluZSB0aGlzIG9ubHkgaWYgeW91 ciBlbnRpcmUgYXBwbGljYXRpb24gaXMKKyAgICAgc2FmZSBldmVuIGlmIHRoZSB1aWQgb3Ig Z2lkIG1pZ2h0IHRlbXBvcmFyaWx5IGNoYW5nZS4gIElmIHlvdXIKKyAgICAgYXBwbGljYXRp b24gdXNlcyBzaWduYWwgaGFuZGxlcnMgb3IgdGhyZWFkcyBpdCBpcyBwcm9iYWJseSBub3QK KyAgICAgc2FmZS4gICovCisKKyAgaWYgKG1vZGUgPT0gRl9PSykKKyAgICByZXR1cm4gc3Rh dCAoZmlsZSwgJnN0YXRzKTsKKyAgZWxzZQorICAgIHsKKyAgICAgIGludCByZXN1bHQ7Cisg ICAgICBpbnQgc2F2ZWRfZXJybm87CisKKyAgICAgIGlmICh1aWQgIT0gZXVpZCkKKyAgICAg ICAgc2V0cmV1aWQgKGV1aWQsIHVpZCk7CisgICAgICBpZiAoZ2lkICE9IGVnaWQpCisgICAg ICAgIHNldHJlZ2lkIChlZ2lkLCBnaWQpOworCisgICAgICByZXN1bHQgPSBhY2Nlc3MgKGZp bGUsIG1vZGUpOworICAgICAgc2F2ZWRfZXJybm8gPSBlcnJubzsKKworICAgICAgLyogUmVz dG9yZSB0aGVtLiAgKi8KKyAgICAgIGlmICh1aWQgIT0gZXVpZCkKKyAgICAgICAgc2V0cmV1 aWQgKHVpZCwgZXVpZCk7CisgICAgICBpZiAoZ2lkICE9IGVnaWQpCisgICAgICAgIHNldHJl Z2lkIChnaWQsIGVnaWQpOworCisgICAgICBlcnJubyA9IHNhdmVkX2Vycm5vOworICAgICAg cmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyMgZWxzZQorCisgIC8qIFRoZSBmb2xsb3dpbmcg Y29kZSBhc3N1bWVzIHRoZSB0cmFkaXRpb25hbCBVbml4IG1vZGVsLCBhbmQgaXMgbm90Cisg ICAgIGNvcnJlY3Qgb24gc3lzdGVtcyB0aGF0IGhhdmUgQUNMcyBvciB0aGUgbGlrZS4gIEhv d2V2ZXIsIGl0J3MKKyAgICAgYmV0dGVyIHRoYW4gbm90aGluZywgYW5kIGl0IGlzIHJlZW50 cmFudC4gICovCisKKyAgdW5zaWduZWQgaW50IGdyYW50ZWQ7CisgIGlmICh1aWQgPT0gZXVp ZCAmJiBnaWQgPT0gZWdpZCkKKyAgICAvKiBJZiB3ZSBhcmUgbm90IHNldC11aWQgb3Igc2V0 LWdpZCwgYWNjZXNzIGRvZXMgdGhlIHNhbWUuICAqLworICAgIHJldHVybiBhY2Nlc3MgKGZp bGUsIG1vZGUpOworCisgIGlmIChzdGF0IChmaWxlLCAmc3RhdHMpICE9IDApCisgICAgcmV0 dXJuIC0xOworCisgIC8qIFRoZSBzdXBlci11c2VyIGNhbiByZWFkIGFuZCB3cml0ZSBhbnkg ZmlsZSwgYW5kIGV4ZWN1dGUgYW55IGZpbGUKKyAgICAgdGhhdCBhbnlvbmUgY2FuIGV4ZWN1 dGUuICAqLworICBpZiAoZXVpZCA9PSBST09UX1VJRAorICAgICAgJiYgKChtb2RlICYgWF9P SykgPT0gMAorICAgICAgICAgIHx8IChzdGF0cy5zdF9tb2RlICYgKFNfSVhVU1IgfCBTX0lY R1JQIHwgU19JWE9USCkpKSkKKyAgICByZXR1cm4gMDsKKworICAvKiBDb252ZXJ0IHRoZSBt b2RlIHRvIHRyYWRpdGlvbmFsIGZvcm0sIGNsZWFyaW5nIGFueSBib2d1cyBiaXRzLiAgKi8K KyAgaWYgKFJfT0sgPT0gNCAmJiBXX09LID09IDIgJiYgWF9PSyA9PSAxICYmIEZfT0sgPT0g MCkKKyAgICBtb2RlICY9IDc7CisgIGVsc2UKKyAgICBtb2RlID0gKChtb2RlICYgUl9PSyA/ IDQgOiAwKQorICAgICAgICAgICAgKyAobW9kZSAmIFdfT0sgPyAyIDogMCkKKyAgICAgICAg ICAgICsgKG1vZGUgJiBYX09LID8gMSA6IDApKTsKKworICBpZiAobW9kZSA9PSAwKQorICAg IHJldHVybiAwOyAgICAgICAgICAgICAgICAgICAvKiBUaGUgZmlsZSBleGlzdHMuICAqLwor CisgIC8qIENvbnZlcnQgdGhlIGZpbGUncyBwZXJtaXNzaW9uIGJpdHMgdG8gdHJhZGl0aW9u YWwgZm9ybS4gICovCisgIGlmIChTX0lSVVNSID09ICg0IDw8IDYpICYmIFNfSVdVU1IgPT0g KDIgPDwgNikgJiYgU19JWFVTUiA9PSAoMSA8PCA2KQorICAgICAgJiYgU19JUkdSUCA9PSAo NCA8PCAzKSAmJiBTX0lXR1JQID09ICgyIDw8IDMpICYmIFNfSVhHUlAgPT0gKDEgPDwgMykK KyAgICAgICYmIFNfSVJPVEggPT0gKDQgPDwgMCkgJiYgU19JV09USCA9PSAoMiA8PCAwKSAm JiBTX0lYT1RIID09ICgxIDw8IDApKQorICAgIGdyYW50ZWQgPSBzdGF0cy5zdF9tb2RlOwor ICBlbHNlCisgICAgZ3JhbnRlZCA9ICgoc3RhdHMuc3RfbW9kZSAmIFNfSVJVU1IgPyA0IDw8 IDYgOiAwKQorICAgICAgICAgICAgICAgKyAoc3RhdHMuc3RfbW9kZSAmIFNfSVdVU1IgPyAy IDw8IDYgOiAwKQorICAgICAgICAgICAgICAgKyAoc3RhdHMuc3RfbW9kZSAmIFNfSVhVU1Ig PyAxIDw8IDYgOiAwKQorICAgICAgICAgICAgICAgKyAoc3RhdHMuc3RfbW9kZSAmIFNfSVJH UlAgPyA0IDw8IDMgOiAwKQorICAgICAgICAgICAgICAgKyAoc3RhdHMuc3RfbW9kZSAmIFNf SVdHUlAgPyAyIDw8IDMgOiAwKQorICAgICAgICAgICAgICAgKyAoc3RhdHMuc3RfbW9kZSAm IFNfSVhHUlAgPyAxIDw8IDMgOiAwKQorICAgICAgICAgICAgICAgKyAoc3RhdHMuc3RfbW9k ZSAmIFNfSVJPVEggPyA0IDw8IDAgOiAwKQorICAgICAgICAgICAgICAgKyAoc3RhdHMuc3Rf bW9kZSAmIFNfSVdPVEggPyAyIDw8IDAgOiAwKQorICAgICAgICAgICAgICAgKyAoc3RhdHMu c3RfbW9kZSAmIFNfSVhPVEggPyAxIDw8IDAgOiAwKSk7CisKKyAgaWYgKGV1aWQgPT0gc3Rh dHMuc3RfdWlkKQorICAgIGdyYW50ZWQgPj49IDY7CisgIGVsc2UgaWYgKGVnaWQgPT0gc3Rh dHMuc3RfZ2lkIHx8IGdyb3VwX21lbWJlciAoc3RhdHMuc3RfZ2lkKSkKKyAgICBncmFudGVk ID4+PSAzOworCisgIGlmICgobW9kZSAmIH5ncmFudGVkKSA9PSAwKQorICAgIHJldHVybiAw OworICBfX3NldF9lcnJubyAoRUFDQ0VTUyk7CisgIHJldHVybiAtMTsKKworIyBlbmRpZgor I2VuZGlmCit9CisjdW5kZWYgZXVpZGFjY2VzcworI2lmZGVmIHdlYWtfYWxpYXMKK3dlYWtf YWxpYXMgKF9fZXVpZGFjY2VzcywgZXVpZGFjY2VzcykKKyNlbmRpZgorDAorI2lmZGVmIFRF U1QKKyMgaW5jbHVkZSA8ZXJyb3IuaD4KKyMgaW5jbHVkZSA8c3RkaW8uaD4KKyMgaW5jbHVk ZSA8c3RkbGliLmg+CisKK2NoYXIgKnByb2dyYW1fbmFtZTsKKworaW50CittYWluIChpbnQg YXJnYywgY2hhciAqKmFyZ3YpCit7CisgIGNoYXIgKmZpbGU7CisgIGludCBtb2RlOworICBp bnQgZXJyOworCisgIHByb2dyYW1fbmFtZSA9IGFyZ3ZbMF07CisgIGlmIChhcmdjIDwgMykK KyAgICBhYm9ydCAoKTsKKyAgZmlsZSA9IGFyZ3ZbMV07CisgIG1vZGUgPSBhdG9pIChhcmd2 WzJdKTsKKworICBlcnIgPSBldWlkYWNjZXNzIChmaWxlLCBtb2RlKTsKKyAgcHJpbnRmICgi JWRcbiIsIGVycik7CisgIGlmIChlcnIgIT0gMCkKKyAgICBlcnJvciAoMCwgZXJybm8sICIl cyIsIGZpbGUpOworICBleGl0ICgwKTsKK30KKyNlbmRpZgoKPT09IGFkZGVkIGZpbGUgJ2xp Yi9mYWNjZXNzYXQuYycKLS0tIGxpYi9mYWNjZXNzYXQuYwkxOTcwLTAxLTAxIDAwOjAwOjAw ICswMDAwCisrKyBsaWIvZmFjY2Vzc2F0LmMJMjAxMi0xMC0xNSAwNjowNTo0NiArMDAwMApA QCAtMCwwICsxLDQ1IEBACisvKiBDaGVjayB0aGUgYWNjZXNzIHJpZ2h0cyBvZiBhIGZpbGUg cmVsYXRpdmUgdG8gYW4gb3BlbiBkaXJlY3RvcnkuCisgICBDb3B5cmlnaHQgKEMpIDIwMDkt MjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0 aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAg SWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyog d3JpdHRlbiBieSBFcmljIEJsYWtlICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2lu Y2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNpZm5kZWYgSEFWRV9B Q0NFU1MKKy8qIE1pbmd3IGxhY2tzIGFjY2VzcywgYnV0IGl0IGFsc28gbGFja3MgcmVhbCB2 cy4gZWZmZWN0aXZlIGlkcywgc28KKyAgIHRoZSBnbnVsaWIgZXVpZGFjY2VzcyBtb2R1bGUg aXMgZ29vZCBlbm91Z2guICAqLworIyB1bmRlZiBhY2Nlc3MKKyMgZGVmaW5lIGFjY2VzcyBl dWlkYWNjZXNzCisjZW5kaWYKKworLyogSW52b2tlIGFjY2VzcyBvciBldWlkYWNjZXNzIG9u IGZpbGUsIEZJTEUsIHVzaW5nIG1vZGUgTU9ERSwgaW4gdGhlIGRpcmVjdG9yeQorICAgb3Bl biBvbiBkZXNjcmlwdG9yIEZELiAgSWYgcG9zc2libGUsIGRvIGl0IHdpdGhvdXQgY2hhbmdp bmcgdGhlCisgICB3b3JraW5nIGRpcmVjdG9yeS4gIE90aGVyd2lzZSwgcmVzb3J0IHRvIHVz aW5nIHNhdmVfY3dkL2ZjaGRpciwgdGhlbgorICAgKGFjY2Vzc3xldWlkYWNjZXNzKS9yZXN0 b3JlX2N3ZC4gIElmIGVpdGhlciB0aGUgc2F2ZV9jd2Qgb3IgdGhlCisgICByZXN0b3JlX2N3 ZCBmYWlscywgdGhlbiBnaXZlIGEgZGlhZ25vc3RpYyBhbmQgZXhpdCBub256ZXJvLgorICAg Tm90ZSB0aGF0IHRoaXMgaW1wbGVtZW50YXRpb24gb25seSBzdXBwb3J0cyBBVF9FQUNDRVNT LCBhbHRob3VnaCBzb21lCisgICBuYXRpdmUgdmVyc2lvbnMgYWxzbyBzdXBwb3J0IEFUX1NZ TUxJTktfTk9GT0xMT1cuICAqLworCisjZGVmaW5lIEFUX0ZVTkNfTkFNRSBmYWNjZXNzYXQK KyNkZWZpbmUgQVRfRlVOQ19GMSBldWlkYWNjZXNzCisjZGVmaW5lIEFUX0ZVTkNfRjIgYWNj ZXNzCisjZGVmaW5lIEFUX0ZVTkNfVVNFX0YxX0NPTkQgQVRfRUFDQ0VTUworI2RlZmluZSBB VF9GVU5DX1BPU1RfRklMRV9QQVJBTV9ERUNMUyAsIGludCBtb2RlLCBpbnQgZmxhZworI2Rl ZmluZSBBVF9GVU5DX1BPU1RfRklMRV9BUkdTICAgICAgICAsIG1vZGUKKyNpbmNsdWRlICJh dC1mdW5jLmMiCgo9PT0gYWRkZWQgZmlsZSAnbGliL2ZjbnRsLmluLmgnCi0tLSBsaWIvZmNu dGwuaW4uaAkxOTcwLTAxLTAxIDAwOjAwOjAwICswMDAwCisrKyBsaWIvZmNudGwuaW4uaAky MDEyLTEwLTE1IDA2OjA1OjQ2ICswMDAwCkBAIC0wLDAgKzEsMzM1IEBACisvKiBMaWtlIDxm Y250bC5oPiwgYnV0IHdpdGggbm9uLXdvcmtpbmcgZmxhZ3MgZGVmaW5lZCB0byAwLgorCisg ICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu Yy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNl LCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhp cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25n IHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9s aWNlbnNlcy8+LiAgKi8KKworLyogd3JpdHRlbiBieSBQYXVsIEVnZ2VydCAqLworCisjaWYg X19HTlVDX18gPj0gMworQFBSQUdNQV9TWVNURU1fSEVBREVSQAorI2VuZGlmCitAUFJBR01B X0NPTFVNTlNACisKKyNpZiBkZWZpbmVkIF9fbmVlZF9zeXN0ZW1fZmNudGxfaAorLyogU3Bl Y2lhbCBpbnZvY2F0aW9uIGNvbnZlbnRpb24uICAqLworCisvKiBOZWVkZWQgYmVmb3JlIDxz eXMvc3RhdC5oPi4KKyAgIE1heSBhbHNvIGRlZmluZSBvZmZfdCB0byBhIDY0LWJpdCB0eXBl IG9uIG5hdGl2ZSBXaW5kb3dzLiAgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy8qIE9u IHNvbWUgc3lzdGVtcyBvdGhlciB0aGFuIGdsaWJjLCA8c3lzL3N0YXQuaD4gaXMgYSBwcmVy ZXF1aXNpdGUgb2YKKyAgIDxmY250bC5oPi4gIE9uIGdsaWJjIHN5c3RlbXMsIHdlIHdvdWxk IGxpa2UgdG8gYXZvaWQgbmFtZXNwYWNlIHBvbGx1dGlvbi4KKyAgIEJ1dCBvbiBnbGliYyBz eXN0ZW1zLCA8ZmNudGwuaD4gaW5jbHVkZXMgPHN5cy9zdGF0Lmg+IGluc2lkZSBhbgorICAg ZXh0ZXJuICJDIiB7IC4uLiB9IGJsb2NrLCB3aGljaCBsZWFkcyB0byBlcnJvcnMgaW4gQysr IG1vZGUgd2l0aCB0aGUKKyAgIG92ZXJyaWRkZW4gPHN5cy9zdGF0Lmg+IGZyb20gZ251bGli LiAgVGhlc2UgZXJyb3JzIGFyZSBrbm93biB0byBiZSBnb25lCisgICB3aXRoIGcrKyB2ZXJz aW9uID49IDQuMy4gICovCisjaWYgIShkZWZpbmVkIF9fR0xJQkNfXyB8fCBkZWZpbmVkIF9f VUNMSUJDX18pIHx8IChkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05B TUVTUEFDRSAmJiAhKF9fR05VQ19fID4gNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNf TUlOT1JfXyA+PSAzKSkpCisjIGluY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNASU5D TFVERV9ORVhUQCBATkVYVF9GQ05UTF9IQAorCisjZWxzZQorLyogTm9ybWFsIGludm9jYXRp b24gY29udmVudGlvbi4gICovCisKKyNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX0ZDTlRMX0gK KworLyogTmVlZGVkIGJlZm9yZSA8c3lzL3N0YXQuaD4uCisgICBNYXkgYWxzbyBkZWZpbmUg b2ZmX3QgdG8gYSA2NC1iaXQgdHlwZSBvbiBuYXRpdmUgV2luZG93cy4gICovCisjaW5jbHVk ZSA8c3lzL3R5cGVzLmg+CisvKiBPbiBzb21lIHN5c3RlbXMgb3RoZXIgdGhhbiBnbGliYywg PHN5cy9zdGF0Lmg+IGlzIGEgcHJlcmVxdWlzaXRlIG9mCisgICA8ZmNudGwuaD4uICBPbiBn bGliYyBzeXN0ZW1zLCB3ZSB3b3VsZCBsaWtlIHRvIGF2b2lkIG5hbWVzcGFjZSBwb2xsdXRp b24uCisgICBCdXQgb24gZ2xpYmMgc3lzdGVtcywgPGZjbnRsLmg+IGluY2x1ZGVzIDxzeXMv c3RhdC5oPiBpbnNpZGUgYW4KKyAgIGV4dGVybiAiQyIgeyAuLi4gfSBibG9jaywgd2hpY2gg bGVhZHMgdG8gZXJyb3JzIGluIEMrKyBtb2RlIHdpdGggdGhlCisgICBvdmVycmlkZGVuIDxz eXMvc3RhdC5oPiBmcm9tIGdudWxpYi4gIFRoZXNlIGVycm9ycyBhcmUga25vd24gdG8gYmUg Z29uZQorICAgd2l0aCBnKysgdmVyc2lvbiA+PSA0LjMuICAqLworI2lmICEoZGVmaW5lZCBf X0dMSUJDX18gfHwgZGVmaW5lZCBfX1VDTElCQ19fKSB8fCAoZGVmaW5lZCBfX2NwbHVzcGx1 cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UgJiYgIShfX0dOVUNfXyA+IDQgfHwgKF9f R05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gMykpKQorIyBpbmNsdWRlIDxzeXMv c3RhdC5oPgorI2VuZGlmCisvKiBUaGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVzIGEgc3BsaXQg ZG91YmxlLWluY2x1c2lvbiBndWFyZC4gICovCisjQElOQ0xVREVfTkVYVEAgQE5FWFRfRkNO VExfSEAKKworI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfRkNOVExfSAorI2RlZmluZSBfQEdV QVJEX1BSRUZJWEBfRkNOVExfSAorCisjaWZuZGVmIF9fR0xJQkNfXyAvKiBBdm9pZCBuYW1l c3BhY2UgcG9sbHV0aW9uIG9uIGdsaWJjIHN5c3RlbXMuICAqLworIyBpbmNsdWRlIDx1bmlz dGQuaD4KKyNlbmRpZgorCisvKiBOYXRpdmUgV2luZG93cyBwbGF0Zm9ybXMgZGVjbGFyZSBv cGVuKCksIGNyZWF0KCkgaW4gPGlvLmg+LiAgKi8KKyNpZiAoQEdOVUxJQl9PUEVOQCB8fCBk ZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLKSBcCisgICAgJiYgKChkZWZpbmVkIF9XSU4zMiB8 fCBkZWZpbmVkIF9fV0lOMzJfXykgJiYgISBkZWZpbmVkIF9fQ1lHV0lOX18pCisjIGluY2x1 ZGUgPGlvLmg+CisjZW5kaWYKKworCisvKiBUaGUgZGVmaW5pdGlvbnMgb2YgX0dMX0ZVTkNE RUNMX1JQTCBldGMuIGFyZSBjb3BpZWQgaGVyZS4gICovCisKKy8qIFRoZSBkZWZpbml0aW9u IG9mIF9HTF9BUkdfTk9OTlVMTCBpcyBjb3BpZWQgaGVyZS4gICovCisKKy8qIFRoZSBkZWZp bml0aW9uIG9mIF9HTF9XQVJOX09OX1VTRSBpcyBjb3BpZWQgaGVyZS4gICovCisKKworLyog RGVjbGFyZSBvdmVycmlkZGVuIGZ1bmN0aW9ucy4gICovCisKKyNpZiBAR05VTElCX0ZDTlRM QAorIyBpZiBAUkVQTEFDRV9GQ05UTEAKKyMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAm JiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisjICAgdW5kZWYgZmNudGwKKyMgICBkZWZp bmUgZmNudGwgcnBsX2ZjbnRsCisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoZmNudGws IGludCwgKGludCBmZCwgaW50IGFjdGlvbiwgLi4uKSk7CitfR0xfQ1hYQUxJQVNfUlBMIChm Y250bCwgaW50LCAoaW50IGZkLCBpbnQgYWN0aW9uLCAuLi4pKTsKKyMgZWxzZQorIyAgaWYg IUBIQVZFX0ZDTlRMQAorX0dMX0ZVTkNERUNMX1NZUyAoZmNudGwsIGludCwgKGludCBmZCwg aW50IGFjdGlvbiwgLi4uKSk7CisjICBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAoZmNudGws IGludCwgKGludCBmZCwgaW50IGFjdGlvbiwgLi4uKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJ QVNXQVJOIChmY250bCk7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVu ZGVmIGZjbnRsCisjIGlmIEhBVkVfUkFXX0RFQ0xfRkNOVEwKK19HTF9XQVJOX09OX1VTRSAo ZmNudGwsICJmY250bCBpcyBub3QgYWx3YXlzIFBPU0lYIGNvbXBsaWFudCAtICIKKyAgICAg ICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGZjbnRsIGZvciBwb3J0YWJpbGl0eSIp OworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBAR05VTElCX09QRU5ACisjIGlmIEBSRVBMQUNF X09QRU5ACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJf TkFNRVNQQUNFKQorIyAgIHVuZGVmIG9wZW4KKyMgICBkZWZpbmUgb3BlbiBycGxfb3Blbgor IyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZp bGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKG9wZW4sIGludCwg KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikpOworIyBlbHNlCitfR0xf Q1hYQUxJQVNfU1lTIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZs YWdzLCAuLi4pKTsKKyMgZW5kaWYKKy8qIE9uIEhQLVVYIDExLCBpbiBDKysgbW9kZSwgb3Bl bigpIGlzIGRlZmluZWQgYXMgYW4gaW5saW5lIGZ1bmN0aW9uIHdpdGggYQorICAgZGVmYXVs dCBhcmd1bWVudC4gIF9HTF9DWFhBTElBU1dBUk4gZG9lcyBub3Qgd29yayBpbiB0aGlzIGNh c2UuICAqLworIyBpZiAhZGVmaW5lZCBfX2hwdXgKK19HTF9DWFhBTElBU1dBUk4gKG9wZW4p OworIyBlbmRpZgorI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBv cGVuCisvKiBBc3N1bWUgb3BlbiBpcyBhbHdheXMgZGVjbGFyZWQuICAqLworX0dMX1dBUk5f T05fVVNFIChvcGVuLCAib3BlbiBpcyBub3QgYWx3YXlzIFBPU0lYIGNvbXBsaWFudCAtICIK KyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIG9wZW4gZm9yIHBvcnRhYmls aXR5Iik7CisjZW5kaWYKKworI2lmIEBHTlVMSUJfT1BFTkFUQAorIyBpZiBAUkVQTEFDRV9P UEVOQVRACisjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJf TkFNRVNQQUNFKQorIyAgIHVuZGVmIG9wZW5hdAorIyAgIGRlZmluZSBvcGVuYXQgcnBsX29w ZW5hdAorIyAgZW5kaWYKK19HTF9GVU5DREVDTF9SUEwgKG9wZW5hdCwgaW50LAorICAgICAg ICAgICAgICAgICAgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwgaW50IGZsYWdzLCAvKiBt b2RlX3QgbW9kZSAqLyAuLi4pCisgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwg KCgyKSkpOworX0dMX0NYWEFMSUFTX1JQTCAob3BlbmF0LCBpbnQsCisgICAgICAgICAgICAg ICAgICAoaW50IGZkLCBjaGFyIGNvbnN0ICpmaWxlLCBpbnQgZmxhZ3MsIC8qIG1vZGVfdCBt b2RlICovIC4uLikpOworIyBlbHNlCisjICBpZiAhQEhBVkVfT1BFTkFUQAorX0dMX0ZVTkNE RUNMX1NZUyAob3BlbmF0LCBpbnQsCisgICAgICAgICAgICAgICAgICAoaW50IGZkLCBjaGFy IGNvbnN0ICpmaWxlLCBpbnQgZmxhZ3MsIC8qIG1vZGVfdCBtb2RlICovIC4uLikKKyAgICAg ICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDIpKSk7CisjICBlbmRpZgorX0dMX0NY WEFMSUFTX1NZUyAob3BlbmF0LCBpbnQsCisgICAgICAgICAgICAgICAgICAoaW50IGZkLCBj aGFyIGNvbnN0ICpmaWxlLCBpbnQgZmxhZ3MsIC8qIG1vZGVfdCBtb2RlICovIC4uLikpOwor IyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAob3BlbmF0KTsKKyNlbGlmIGRlZmluZWQgR05V TElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgb3BlbmF0CisjIGlmIEhBVkVfUkFXX0RFQ0xfT1BF TkFUCitfR0xfV0FSTl9PTl9VU0UgKG9wZW5hdCwgIm9wZW5hdCBpcyBub3QgcG9ydGFibGUg LSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBvcGVuYXQgZm9yIHBv cnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworCisvKiBGaXggdXAgdGhlIEZEXyog bWFjcm9zLCBvbmx5IGtub3duIHRvIGJlIG1pc3Npbmcgb24gbWluZ3cuICAqLworCisjaWZu ZGVmIEZEX0NMT0VYRUMKKyMgZGVmaW5lIEZEX0NMT0VYRUMgMQorI2VuZGlmCisKKy8qIEZp eCB1cCB0aGUgc3VwcG9ydGVkIEZfKiBtYWNyb3MuICBJbnRlbnRpb25hbGx5IGxlYXZlIG90 aGVyIEZfKgorICAgbWFjcm9zIHVuZGVmaW5lZC4gIE9ubHkga25vd24gdG8gYmUgbWlzc2lu ZyBvbiBtaW5ndy4gICovCisKKyNpZm5kZWYgRl9EVVBGRF9DTE9FWEVDCisjIGRlZmluZSBG X0RVUEZEX0NMT0VYRUMgMHg0MDAwMDAwMAorLyogV2l0bmVzcyB2YXJpYWJsZTogMSBpZiBn bnVsaWIgZGVmaW5lZCBGX0RVUEZEX0NMT0VYRUMsIDAgb3RoZXJ3aXNlLiAgKi8KKyMgZGVm aW5lIEdOVUxJQl9kZWZpbmVkX0ZfRFVQRkRfQ0xPRVhFQyAxCisjZWxzZQorIyBkZWZpbmUg R05VTElCX2RlZmluZWRfRl9EVVBGRF9DTE9FWEVDIDAKKyNlbmRpZgorCisjaWZuZGVmIEZf RFVQRkQKKyMgZGVmaW5lIEZfRFVQRkQgMQorI2VuZGlmCisKKyNpZm5kZWYgRl9HRVRGRAor IyBkZWZpbmUgRl9HRVRGRCAyCisjZW5kaWYKKworLyogRml4IHVwIHRoZSBPXyogbWFjcm9z LiAgKi8KKworI2lmICFkZWZpbmVkIE9fRElSRUNUICYmIGRlZmluZWQgT19ESVJFQ1RJTwor LyogVHJ1NjQgc3BlbGxzIGl0ICdPX0RJUkVDVElPJy4gICovCisjIGRlZmluZSBPX0RJUkVD VCBPX0RJUkVDVElPCisjZW5kaWYKKworI2lmICFkZWZpbmVkIE9fQ0xPRVhFQyAmJiBkZWZp bmVkIE9fTk9JTkhFUklUCisvKiBNaW5ndyBzcGVsbHMgaXQgJ09fTk9JTkhFUklUJy4gICov CisjIGRlZmluZSBPX0NMT0VYRUMgT19OT0lOSEVSSVQKKyNlbmRpZgorCisjaWZuZGVmIE9f Q0xPRVhFQworIyBkZWZpbmUgT19DTE9FWEVDIDAKKyNlbmRpZgorCisjaWZuZGVmIE9fRElS RUNUCisjIGRlZmluZSBPX0RJUkVDVCAwCisjZW5kaWYKKworI2lmbmRlZiBPX0RJUkVDVE9S WQorIyBkZWZpbmUgT19ESVJFQ1RPUlkgMAorI2VuZGlmCisKKyNpZm5kZWYgT19EU1lOQwor IyBkZWZpbmUgT19EU1lOQyAwCisjZW5kaWYKKworI2lmbmRlZiBPX0VYRUMKKyMgZGVmaW5l IE9fRVhFQyBPX1JET05MWSAvKiBUaGlzIGlzIG9mdGVuIGNsb3NlIGVub3VnaCBpbiBvbGRl ciBzeXN0ZW1zLiAgKi8KKyNlbmRpZgorCisjaWZuZGVmIE9fTkRFTEFZCisjIGRlZmluZSBP X05ERUxBWSAwCisjZW5kaWYKKworI2lmbmRlZiBPX05PQVRJTUUKKyMgZGVmaW5lIE9fTk9B VElNRSAwCisjZW5kaWYKKworI2lmbmRlZiBPX05PTkJMT0NLCisjIGRlZmluZSBPX05PTkJM T0NLIE9fTkRFTEFZCisjZW5kaWYKKworLyogSWYgdGhlIGdudWxpYiBtb2R1bGUgJ25vbmJs b2NraW5nJyBpcyBpbiB1c2UsIGd1YXJhbnRlZSBhIHdvcmtpbmcgbm9uLXplcm8KKyAgIHZh bHVlIG9mIE9fTk9OQkxPQ0suICBPdGhlcndpc2UsIE9fTk9OQkxPQ0sgaXMgZGVmaW5lZCAo YWJvdmUpIHRvIE9fTkRFTEFZCisgICBvciB0byAwIGFzIGZhbGxiYWNrLiAgKi8KKyNpZiBA R05VTElCX05PTkJMT0NLSU5HQAorIyBpZiBPX05PTkJMT0NLCisjICBkZWZpbmUgR05VTElC X2RlZmluZWRfT19OT05CTE9DSyAwCisjIGVsc2UKKyMgIGRlZmluZSBHTlVMSUJfZGVmaW5l ZF9PX05PTkJMT0NLIDEKKyMgIHVuZGVmIE9fTk9OQkxPQ0sKKyMgIGRlZmluZSBPX05PTkJM T0NLIDB4NDAwMDAwMDAKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIE9fTk9DVFRZCisj IGRlZmluZSBPX05PQ1RUWSAwCisjZW5kaWYKKworI2lmbmRlZiBPX05PRk9MTE9XCisjIGRl ZmluZSBPX05PRk9MTE9XIDAKKyNlbmRpZgorCisjaWZuZGVmIE9fTk9MSU5LUworIyBkZWZp bmUgT19OT0xJTktTIDAKKyNlbmRpZgorCisjaWZuZGVmIE9fUlNZTkMKKyMgZGVmaW5lIE9f UlNZTkMgMAorI2VuZGlmCisKKyNpZm5kZWYgT19TRUFSQ0gKKyMgZGVmaW5lIE9fU0VBUkNI IE9fUkRPTkxZIC8qIFRoaXMgaXMgb2Z0ZW4gY2xvc2UgZW5vdWdoIGluIG9sZGVyIHN5c3Rl bXMuICAqLworI2VuZGlmCisKKyNpZm5kZWYgT19TWU5DCisjIGRlZmluZSBPX1NZTkMgMAor I2VuZGlmCisKKyNpZm5kZWYgT19UVFlfSU5JVAorIyBkZWZpbmUgT19UVFlfSU5JVCAwCisj ZW5kaWYKKworI2lmIE9fQUNDTU9ERSAhPSAoT19SRE9OTFkgfCBPX1dST05MWSB8IE9fUkRX UiB8IE9fRVhFQyB8IE9fU0VBUkNIKQorIyB1bmRlZiBPX0FDQ01PREUKKyMgZGVmaW5lIE9f QUNDTU9ERSAoT19SRE9OTFkgfCBPX1dST05MWSB8IE9fUkRXUiB8IE9fRVhFQyB8IE9fU0VB UkNIKQorI2VuZGlmCisKKy8qIEZvciBzeXN0ZW1zIHRoYXQgZGlzdGluZ3Vpc2ggYmV0d2Vl biB0ZXh0IGFuZCBiaW5hcnkgSS9PLgorICAgT19CSU5BUlkgaXMgdXN1YWxseSBkZWNsYXJl ZCBpbiBmY250bC5oICAqLworI2lmICFkZWZpbmVkIE9fQklOQVJZICYmIGRlZmluZWQgX09f QklOQVJZCisgIC8qIEZvciBNU0MtY29tcGF0aWJsZSBjb21waWxlcnMuICAqLworIyBkZWZp bmUgT19CSU5BUlkgX09fQklOQVJZCisjIGRlZmluZSBPX1RFWFQgX09fVEVYVAorI2VuZGlm CisKKyNpZiBkZWZpbmVkIF9fQkVPU19fIHx8IGRlZmluZWQgX19IQUlLVV9fCisgIC8qIEJl T1MgNSBhbmQgSGFpa3UgaGF2ZSBPX0JJTkFSWSBhbmQgT19URVhULCBidXQgdGhleSBoYXZl IG5vIGVmZmVjdC4gICovCisjIHVuZGVmIE9fQklOQVJZCisjIHVuZGVmIE9fVEVYVAorI2Vu ZGlmCisKKyNpZm5kZWYgT19CSU5BUlkKKyMgZGVmaW5lIE9fQklOQVJZIDAKKyMgZGVmaW5l IE9fVEVYVCAwCisjZW5kaWYKKworLyogRml4IHVwIHRoZSBBVF8qIG1hY3Jvcy4gICovCisK Ky8qIFdvcmsgYXJvdW5kIGEgYnVnIGluIFNvbGFyaXMgOSBhbmQgMTA6IEFUX0ZEQ1dEIGlz IHBvc2l0aXZlLiAgSXRzCisgICB2YWx1ZSBleGNlZWRzIElOVF9NQVgsIHNvIGl0cyB1c2Ug YXMgYW4gaW50IGRvZXNuJ3QgY29uZm9ybSB0byB0aGUKKyAgIEMgc3RhbmRhcmQsIGFuZCBH Q0MgYW5kIFN1biBDIGNvbXBsYWluIGluIHNvbWUgY2FzZXMuICBJZiB0aGUgYnVnCisgICBp cyBwcmVzZW50LCB1bmRlZiBBVF9GRENXRCBoZXJlLCBzbyBpdCBjYW4gYmUgcmVkZWZpbmVk IGJlbG93LiAgKi8KKyNpZiAwIDwgQVRfRkRDV0QgJiYgQVRfRkRDV0QgPT0gMHhmZmQxOTU1 MworIyB1bmRlZiBBVF9GRENXRAorI2VuZGlmCisKKy8qIFVzZSB0aGUgc2FtZSBiaXQgcGF0 dGVybiBhcyBTb2xhcmlzIDksIGJ1dCB3aXRoIHRoZSBwcm9wZXIKKyAgIHNpZ25lZG5lc3Mu ICBUaGUgYml0IHBhdHRlcm4gaXMgaW1wb3J0YW50LCBpbiBjYXNlIHRoaXMgYWN0dWFsbHkg aXMKKyAgIFNvbGFyaXMgd2l0aCB0aGUgYWJvdmUgd29ya2Fyb3VuZC4gICovCisjaWZuZGVm IEFUX0ZEQ1dECisjIGRlZmluZSBBVF9GRENXRCAoLTMwNDE5NjUpCisjZW5kaWYKKworLyog VXNlIHRoZSBzYW1lIHZhbHVlcyBhcyBTb2xhcmlzIDkuICBUaGlzIHNob3VsZG4ndCBtYXR0 ZXIsIGJ1dAorICAgdGhlcmUncyBubyByZWFsIHJlYXNvbiB0byBkaWZmZXIuICAqLworI2lm bmRlZiBBVF9TWU1MSU5LX05PRk9MTE9XCisjIGRlZmluZSBBVF9TWU1MSU5LX05PRk9MTE9X IDQwOTYKKyNlbmRpZgorCisjaWZuZGVmIEFUX1JFTU9WRURJUgorIyBkZWZpbmUgQVRfUkVN T1ZFRElSIDEKKyNlbmRpZgorCisvKiBTb2xhcmlzIDkgbGFja3MgdGhlc2UgdHdvLCBzbyBq dXN0IHBpY2sgdW5pcXVlIHZhbHVlcy4gICovCisjaWZuZGVmIEFUX1NZTUxJTktfRk9MTE9X CisjIGRlZmluZSBBVF9TWU1MSU5LX0ZPTExPVyAyCisjZW5kaWYKKworI2lmbmRlZiBBVF9F QUNDRVNTCisjIGRlZmluZSBBVF9FQUNDRVNTIDQKKyNlbmRpZgorCisKKyNlbmRpZiAvKiBf QEdVQVJEX1BSRUZJWEBfRkNOVExfSCAqLworI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9G Q05UTF9IICovCisjZW5kaWYKCj09PSBhZGRlZCBmaWxlICdsaWIvZ2V0Z3JvdXBzLmMnCi0t LSBsaWIvZ2V0Z3JvdXBzLmMJMTk3MC0wMS0wMSAwMDowMDowMCArMDAwMAorKysgbGliL2dl dGdyb3Vwcy5jCTIwMTItMTAtMTIgMjM6Mjg6MzEgKzAwMDAKQEAgLTAsMCArMSwxMTYgQEAK Ky8qIHByb3ZpZGUgY29uc2lzdGVudCBpbnRlcmZhY2UgdG8gZ2V0Z3JvdXBzIGZvciBzeXN0 ZW1zIHRoYXQgZG9uJ3QgYWxsb3cgTj09MAorCisgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5 OTksIDIwMDMsIDIwMDYtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKwor ICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgor ICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGgg dGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNl cy8+LiAgKi8KKworLyogd3JpdHRlbiBieSBKaW0gTWV5ZXJpbmcgKi8KKworI2luY2x1ZGUg PGNvbmZpZy5oPgorCisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlIDxlcnJuby5o PgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaWYgIUhB VkVfR0VUR1JPVVBTCisKKy8qIFByb3ZpZGUgYSBzdHViIHRoYXQgZmFpbHMgd2l0aCBFTk9T WVMsIHNpbmNlIHRoZXJlIGlzIG5vIGdyb3VwCisgICBpbmZvcm1hdGlvbiBhdmFpbGFibGUg b24gbWluZ3cuICAqLworaW50CitnZXRncm91cHMgKGludCBuIF9HTF9VTlVTRUQsIEdFVEdS T1VQU19UICpncm91cHMgX0dMX1VOVVNFRCkKK3sKKyAgZXJybm8gPSBFTk9TWVM7CisgIHJl dHVybiAtMTsKK30KKworI2Vsc2UgLyogSEFWRV9HRVRHUk9VUFMgKi8KKworIyB1bmRlZiBn ZXRncm91cHMKKyMgaWZuZGVmIEdFVEdST1VQU19aRVJPX0JVRworIyAgZGVmaW5lIEdFVEdS T1VQU19aRVJPX0JVRyAwCisjIGVuZGlmCisKKy8qIE9uIGF0IGxlYXN0IFVsdHJpeCA0LjMg YW5kIE5leHRTdGVwIDMuMiwgZ2V0Z3JvdXBzICgwLCBOVUxMKSBhbHdheXMKKyAgIGZhaWxz LiAgT24gb3RoZXIgc3lzdGVtcywgaXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHN1cHBsZW1l bnRhbAorICAgZ3JvdXBzIGZvciB0aGUgcHJvY2Vzcy4gIFRoaXMgZnVuY3Rpb24gaGFuZGxl cyB0aGF0IHNwZWNpYWwgY2FzZQorICAgYW5kIGxldHMgdGhlIHN5c3RlbS1wcm92aWRlZCBm dW5jdGlvbiBoYW5kbGUgYWxsIG90aGVycy4gIEhvd2V2ZXIsCisgICBpdCBjYW4gZmFpbCB3 aXRoIEVOT01FTSBpZiBtZW1vcnkgaXMgdGlnaHQuICBJdCBpcyB1bnNwZWNpZmllZAorICAg d2hldGhlciB0aGUgZWZmZWN0aXZlIGdyb3VwIGlkIGlzIGluY2x1ZGVkIGluIHRoZSBsaXN0 LiAgKi8KKworaW50CitycGxfZ2V0Z3JvdXBzIChpbnQgbiwgZ2lkX3QgKmdyb3VwKQorewor ICBpbnQgbl9ncm91cHM7CisgIEdFVEdST1VQU19UICpnYnVmOworICBpbnQgc2F2ZWRfZXJy bm87CisKKyAgaWYgKG4gPCAwKQorICAgIHsKKyAgICAgIGVycm5vID0gRUlOVkFMOworICAg ICAgcmV0dXJuIC0xOworICAgIH0KKworICBpZiAobiAhPSAwIHx8ICFHRVRHUk9VUFNfWkVS T19CVUcpCisgICAgeworICAgICAgaW50IHJlc3VsdDsKKyAgICAgIGlmIChzaXplb2YgKmdy b3VwID09IHNpemVvZiAqZ2J1ZikKKyAgICAgICAgcmV0dXJuIGdldGdyb3VwcyAobiwgKEdF VEdST1VQU19UICopIGdyb3VwKTsKKworICAgICAgaWYgKFNJWkVfTUFYIC8gc2l6ZW9mICpn YnVmIDw9IG4pCisgICAgICAgIHsKKyAgICAgICAgICBlcnJubyA9IEVOT01FTTsKKyAgICAg ICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgIGdidWYgPSBtYWxsb2MgKG4gKiBz aXplb2YgKmdidWYpOworICAgICAgaWYgKCFnYnVmKQorICAgICAgICByZXR1cm4gLTE7Cisg ICAgICByZXN1bHQgPSBnZXRncm91cHMgKG4sIGdidWYpOworICAgICAgaWYgKDAgPD0gcmVz dWx0KQorICAgICAgICB7CisgICAgICAgICAgbiA9IHJlc3VsdDsKKyAgICAgICAgICB3aGls ZSAobi0tKQorICAgICAgICAgICAgZ3JvdXBbbl0gPSBnYnVmW25dOworICAgICAgICB9Cisg ICAgICBzYXZlZF9lcnJubyA9IGVycm5vOworICAgICAgZnJlZSAoZ2J1Zik7CisgICAgICBl cnJubyA9PSBzYXZlZF9lcnJubzsKKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisg IG4gPSAyMDsKKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgLyogTm8gbmVlZCB0byB3b3Jy eSBhYm91dCBhZGRyZXNzIGFyaXRobWV0aWMgb3ZlcmZsb3cgaGVyZSwKKyAgICAgICAgIHNp bmNlIHRoZSBhbmNpZW50IHN5c3RlbXMgdGhhdCB3ZSdyZSBydW5uaW5nIG9uIGhhdmUgbG93 CisgICAgICAgICBsaW1pdHMgb24gdGhlIG51bWJlciBvZiBzZWNvbmRhcnkgZ3JvdXBzLiAg Ki8KKyAgICAgIGdidWYgPSBtYWxsb2MgKG4gKiBzaXplb2YgKmdidWYpOworICAgICAgaWYg KCFnYnVmKQorICAgICAgICByZXR1cm4gLTE7CisgICAgICBuX2dyb3VwcyA9IGdldGdyb3Vw cyAobiwgZ2J1Zik7CisgICAgICBpZiAobl9ncm91cHMgPT0gLTEgPyBlcnJubyAhPSBFSU5W QUwgOiBuX2dyb3VwcyA8IG4pCisgICAgICAgIGJyZWFrOworICAgICAgZnJlZSAoZ2J1Zik7 CisgICAgICBuICo9IDI7CisgICAgfQorCisgIHNhdmVkX2Vycm5vID0gZXJybm87CisgIGZy ZWUgKGdidWYpOworICBlcnJubyA9IHNhdmVkX2Vycm5vOworCisgIHJldHVybiBuX2dyb3Vw czsKK30KKworI2VuZGlmIC8qIEhBVkVfR0VUR1JPVVBTICovCgo9PT0gbW9kaWZpZWQgZmls ZSAnbGliL2dudWxpYi5taycKLS0tIGxpYi9nbnVsaWIubWsJMjAxMi0xMC0wNCAwNzoxNTo0 MiArMDAwMAorKysgbGliL2dudWxpYi5tawkyMDEyLTEwLTE1IDA2OjA1OjQ2ICswMDAwCkBA IC0yMSw3ICsyMSw3IEBACiAjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUg cmVzdCBvZiB0aGF0IHByb2dyYW0uCiAjCiAjIEdlbmVyYXRlZCBieSBnbnVsaWItdG9vbC4K LSMgUmVwcm9kdWNlIGJ5OiBnbnVsaWItdG9vbCAtLWltcG9ydCAtLWRpcj0uIC0tbGliPWxp YmdudSAtLXNvdXJjZS1iYXNlPWxpYiAtLW00LWJhc2U9bTQgLS1kb2MtYmFzZT1kb2MgLS10 ZXN0cy1iYXNlPXRlc3RzIC0tYXV4LWRpcj1idWlsZC1hdXggLS1hdm9pZD1lcnJubyAtLWF2 b2lkPWZjbnRsIC0tYXZvaWQ9ZmNudGwtaCAtLWF2b2lkPWZzdGF0IC0tYXZvaWQ9bXN2Yy1p bnZhbCAtLWF2b2lkPW1zdmMtbm90aHJvdyAtLWF2b2lkPXJhaXNlIC0tYXZvaWQ9c2VsZWN0 IC0tYXZvaWQ9c2lncHJvY21hc2sgLS1hdm9pZD1zeXNfdHlwZXMgLS1hdm9pZD10aHJlYWRs aWIgLS1tYWtlZmlsZS1uYW1lPWdudWxpYi5tayAtLWNvbmRpdGlvbmFsLWRlcGVuZGVuY2ll cyAtLW5vLWxpYnRvb2wgLS1tYWNyby1wcmVmaXg9Z2wgLS1uby12Yy1maWxlcyBhbGxvY2Et b3B0IGMtY3R5cGUgYy1zdHJjYXNlIGNhcmVhZGxpbmthdCBjcnlwdG8vbWQ1IGNyeXB0by9z aGExIGNyeXB0by9zaGEyNTYgY3J5cHRvL3NoYTUxMiBkdG9hc3RyIGR0b3RpbWVzcGVjIGR1 cDIgZW52aXJvbiBleGVjaW5mbyBmaWxlbW9kZSBnZXRsb2FkYXZnIGdldG9wdC1nbnUgZ2V0 dGltZSBnZXR0aW1lb2ZkYXkgaWdub3JlLXZhbHVlIGludHByb3BzIGxhcmdlZmlsZSBsc3Rh dCBtYW55d2FybmluZ3MgbWt0aW1lIHBzZWxlY3QgcHRocmVhZF9zaWdtYXNrIHJlYWRsaW5r IHNvY2tsZW4gc3RhdC10aW1lIHN0ZGFsaWduIHN0ZGFyZyBzdGRib29sIHN0ZGlvIHN0cmZ0 aW1lIHN0cnRvaW1heCBzdHJ0b3VtYXggc3ltbGluayBzeXNfc3RhdCBzeXNfdGltZSB0aW1l IHRpbWVyLXRpbWUgdGltZXNwZWMtYWRkIHRpbWVzcGVjLXN1YiB1dGltZW5zIHdhcm5pbmdz CisjIFJlcHJvZHVjZSBieTogZ251bGliLXRvb2wgLS1pbXBvcnQgLS1kaXI9LiAtLWxpYj1s aWJnbnUgLS1zb3VyY2UtYmFzZT1saWIgLS1tNC1iYXNlPW00IC0tZG9jLWJhc2U9ZG9jIC0t dGVzdHMtYmFzZT10ZXN0cyAtLWF1eC1kaXI9YnVpbGQtYXV4IC0tYXZvaWQ9YXQtaW50ZXJu YWwgLS1hdm9pZD1lcnJubyAtLWF2b2lkPWZjaGRpciAtLWF2b2lkPWZjbnRsIC0tYXZvaWQ9 ZnN0YXQgLS1hdm9pZD1tYWxsb2MtcG9zaXggLS1hdm9pZD1tc3ZjLWludmFsIC0tYXZvaWQ9 bXN2Yy1ub3Rocm93IC0tYXZvaWQ9b3BlbmF0LWRpZSAtLWF2b2lkPW9wZW5hdC1oIC0tYXZv aWQ9cmFpc2UgLS1hdm9pZD1zYXZlLWN3ZCAtLWF2b2lkPXNlbGVjdCAtLWF2b2lkPXNpZ3By b2NtYXNrIC0tYXZvaWQ9c3lzX3R5cGVzIC0tYXZvaWQ9dGhyZWFkbGliIC0tbWFrZWZpbGUt bmFtZT1nbnVsaWIubWsgLS1jb25kaXRpb25hbC1kZXBlbmRlbmNpZXMgLS1uby1saWJ0b29s IC0tbWFjcm8tcHJlZml4PWdsIC0tbm8tdmMtZmlsZXMgYWxsb2NhLW9wdCBjLWN0eXBlIGMt c3RyY2FzZSBjYXJlYWRsaW5rYXQgY3J5cHRvL21kNSBjcnlwdG8vc2hhMSBjcnlwdG8vc2hh MjU2IGNyeXB0by9zaGE1MTIgZHRvYXN0ciBkdG90aW1lc3BlYyBkdXAyIGVudmlyb24gZXhl Y2luZm8gZmFjY2Vzc2F0IGZpbGVtb2RlIGdldGxvYWRhdmcgZ2V0b3B0LWdudSBnZXR0aW1l IGdldHRpbWVvZmRheSBpZ25vcmUtdmFsdWUgaW50cHJvcHMgbGFyZ2VmaWxlIGxzdGF0IG1h bnl3YXJuaW5ncyBta3RpbWUgcHNlbGVjdCBwdGhyZWFkX3NpZ21hc2sgcmVhZGxpbmsgc29j a2xlbiBzdGF0LXRpbWUgc3RkYWxpZ24gc3RkYXJnIHN0ZGJvb2wgc3RkaW8gc3RyZnRpbWUg c3RydG9pbWF4IHN0cnRvdW1heCBzeW1saW5rIHN5c19zdGF0IHN5c190aW1lIHRpbWUgdGlt ZXItdGltZSB0aW1lc3BlYy1hZGQgdGltZXNwZWMtc3ViIHV0aW1lbnMgd2FybmluZ3MKIAog CiBNT1NUTFlDTEVBTkZJTEVTICs9IGNvcmUgKi5zdGFja2R1bXAKQEAgLTE1MCw2ICsxNTAs MTcgQEAKIAogIyMgZW5kICAgZ251bGliIG1vZHVsZSBkdXAyCiAKKyMjIGJlZ2luIGdudWxp YiBtb2R1bGUgZXVpZGFjY2VzcworCitpZiBnbF9HTlVMSUJfRU5BQkxFRF9ldWlkYWNjZXNz CisKK2VuZGlmCitFWFRSQV9ESVNUICs9IGV1aWRhY2Nlc3MuYworCitFWFRSQV9saWJnbnVf YV9TT1VSQ0VTICs9IGV1aWRhY2Nlc3MuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGV1 aWRhY2Nlc3MKKwogIyMgYmVnaW4gZ251bGliIG1vZHVsZSBleGVjaW5mbwogCiBCVUlMVF9T T1VSQ0VTICs9ICQoRVhFQ0lORk9fSCkKQEAgLTE3NSw2ICsxODYsNTAgQEAKIAogIyMgZW5k ICAgZ251bGliIG1vZHVsZSBleGVjaW5mbwogCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGZh Y2Nlc3NhdAorCisKK0VYVFJBX0RJU1QgKz0gYXQtZnVuYy5jIGZhY2Nlc3NhdC5jCisKK0VY VFJBX2xpYmdudV9hX1NPVVJDRVMgKz0gYXQtZnVuYy5jIGZhY2Nlc3NhdC5jCisKKyMjIGVu ZCAgIGdudWxpYiBtb2R1bGUgZmFjY2Vzc2F0CisKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUg ZmNudGwtaAorCitCVUlMVF9TT1VSQ0VTICs9IGZjbnRsLmgKKworIyBXZSBuZWVkIHRoZSBm b2xsb3dpbmcgaW4gb3JkZXIgdG8gY3JlYXRlIDxmY250bC5oPiB3aGVuIHRoZSBzeXN0ZW0K KyMgZG9lc24ndCBoYXZlIG9uZSB0aGF0IHdvcmtzIHdpdGggdGhlIGdpdmVuIGNvbXBpbGVy LgorZmNudGwuaDogZmNudGwuaW4uaCAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAk KENYWERFRlNfSCkgJChBUkdfTk9OTlVMTF9IKSAkKFdBUk5fT05fVVNFX0gpCisJJChBTV9W X0dFTilybSAtZiAkQC10ICRAICYmIFwKKwl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5F UkFURUQgQVVUT01BVElDQUxMWSEgKi8nOyBcCisJICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJF RklYJydAfEdMfGcnIFwKKwkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNM VURFX05FWFQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicn QHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKKwkgICAgICAtZSAnc3xAJydQUkFHTUFf Q09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKKwkgICAgICAtZSAnc3xAJydORVhU X0ZDTlRMX0gnJ0B8JChORVhUX0ZDTlRMX0gpfGcnIFwKKwkgICAgICAtZSAncy9AJydHTlVM SUJfRkNOVEwnJ0AvJChHTlVMSUJfRkNOVEwpL2cnIFwKKwkgICAgICAtZSAncy9AJydHTlVM SUJfTk9OQkxPQ0tJTkcnJ0AvJChHTlVMSUJfTk9OQkxPQ0tJTkcpL2cnIFwKKwkgICAgICAt ZSAncy9AJydHTlVMSUJfT1BFTicnQC8kKEdOVUxJQl9PUEVOKS9nJyBcCisJICAgICAgLWUg J3MvQCcnR05VTElCX09QRU5BVCcnQC8kKEdOVUxJQl9PUEVOQVQpL2cnIFwKKwkgICAgICAt ZSAnc3xAJydIQVZFX0ZDTlRMJydAfCQoSEFWRV9GQ05UTCl8ZycgXAorCSAgICAgIC1lICdz fEAnJ0hBVkVfT1BFTkFUJydAfCQoSEFWRV9PUEVOQVQpfGcnIFwKKwkgICAgICAtZSAnc3xA JydSRVBMQUNFX0ZDTlRMJydAfCQoUkVQTEFDRV9GQ05UTCl8ZycgXAorCSAgICAgIC1lICdz fEAnJ1JFUExBQ0VfT1BFTicnQHwkKFJFUExBQ0VfT1BFTil8ZycgXAorCSAgICAgIC1lICdz fEAnJ1JFUExBQ0VfT1BFTkFUJydAfCQoUkVQTEFDRV9PUEVOQVQpfGcnIFwKKwkgICAgICAt ZSAnL2RlZmluaXRpb25zIG9mIF9HTF9GVU5DREVDTF9SUEwvciAkKENYWERFRlNfSCknIFwK KwkgICAgICAtZSAnL2RlZmluaXRpb24gb2YgX0dMX0FSR19OT05OVUxML3IgJChBUkdfTk9O TlVMTF9IKScgXAorCSAgICAgIC1lICcvZGVmaW5pdGlvbiBvZiBfR0xfV0FSTl9PTl9VU0Uv ciAkKFdBUk5fT05fVVNFX0gpJyBcCisJICAgICAgPCAkKHNyY2RpcikvZmNudGwuaW4uaDsg XAorCX0gPiAkQC10ICYmIFwKKwltdiAkQC10ICRACitNT1NUTFlDTEVBTkZJTEVTICs9IGZj bnRsLmggZmNudGwuaC10CisKK0VYVFJBX0RJU1QgKz0gZmNudGwuaW4uaAorCisjIyBlbmQg ICBnbnVsaWIgbW9kdWxlIGZjbnRsLWgKKwogIyMgYmVnaW4gZ251bGliIG1vZHVsZSBmaWxl bW9kZQogCiBsaWJnbnVfYV9TT1VSQ0VTICs9IGZpbGVtb2RlLmMKQEAgLTE4Myw2ICsyMzgs MTcgQEAKIAogIyMgZW5kICAgZ251bGliIG1vZHVsZSBmaWxlbW9kZQogCisjIyBiZWdpbiBn bnVsaWIgbW9kdWxlIGdldGdyb3VwcworCitpZiBnbF9HTlVMSUJfRU5BQkxFRF9nZXRncm91 cHMKKworZW5kaWYKK0VYVFJBX0RJU1QgKz0gZ2V0Z3JvdXBzLmMKKworRVhUUkFfbGliZ251 X2FfU09VUkNFUyArPSBnZXRncm91cHMuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGdl dGdyb3VwcworCiAjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGdldGxvYWRhdmcKIAogCkBAIC0y NDIsNiArMzA4LDE3IEBACiAKICMjIGVuZCAgIGdudWxpYiBtb2R1bGUgZ2V0dGltZW9mZGF5 CiAKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgZ3JvdXAtbWVtYmVyCisKK2lmIGdsX0dOVUxJ Ql9FTkFCTEVEX2E5Nzg2ODUwZTk5OWFlNjVhODM2YTYwNDFlOGU1ZWQxCisKK2VuZGlmCitF WFRSQV9ESVNUICs9IGdyb3VwLW1lbWJlci5jCisKK0VYVFJBX2xpYmdudV9hX1NPVVJDRVMg Kz0gZ3JvdXAtbWVtYmVyLmMKKworIyMgZW5kICAgZ251bGliIG1vZHVsZSBncm91cC1tZW1i ZXIKKwogIyMgYmVnaW4gZ251bGliIG1vZHVsZSBpZ25vcmUtdmFsdWUKIAogCkBAIC0zNTQs NiArNDMxLDE1IEBACiAKICMjIGVuZCAgIGdudWxpYiBtb2R1bGUgcmVhZGxpbmsKIAorIyMg YmVnaW4gZ251bGliIG1vZHVsZSByb290LXVpZAorCitpZiBnbF9HTlVMSUJfRU5BQkxFRF82 MDk5ZTk3MzdmNzU3ZGIzNmM0N2ZhOWQ5ZjAyZTg4YworCitlbmRpZgorRVhUUkFfRElTVCAr PSByb290LXVpZC5oCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgcm9vdC11aWQKKwogIyMg YmVnaW4gZ251bGliIG1vZHVsZSBzaWduYWwtaAogCiBCVUlMVF9TT1VSQ0VTICs9IHNpZ25h bC5oCkBAIC0xMzEyLDYgKzEzOTgsMTUgQEAKIAogIyMgZW5kICAgZ251bGliIG1vZHVsZSB2 ZXJpZnkKIAorIyMgYmVnaW4gZ251bGliIG1vZHVsZSB4YWxsb2Mtb3ZlcnNpemVkCisKK2lm IGdsX0dOVUxJQl9FTkFCTEVEXzY4MmU2MDk2MDRjY2FhYzZiZTM4MmU0ZWUzYTRlYWVjCisK K2VuZGlmCitFWFRSQV9ESVNUICs9IHhhbGxvYy1vdmVyc2l6ZWQuaAorCisjIyBlbmQgICBn bnVsaWIgbW9kdWxlIHhhbGxvYy1vdmVyc2l6ZWQKKwogCiBtb3N0bHljbGVhbi1sb2NhbDog bW9zdGx5Y2xlYW4tZ2VuZXJpYwogCUBmb3IgZGlyIGluICcnICQoTU9TVExZQ0xFQU5ESVJT KTsgZG8gXAoKPT09IGFkZGVkIGZpbGUgJ2xpYi9ncm91cC1tZW1iZXIuYycKLS0tIGxpYi9n cm91cC1tZW1iZXIuYwkxOTcwLTAxLTAxIDAwOjAwOjAwICswMDAwCisrKyBsaWIvZ3JvdXAt bWVtYmVyLmMJMjAxMi0xMC0xMiAyMzoyODozMSArMDAwMApAQCAtMCwwICsxLDExOSBAQAor LyogZ3JvdXAtbWVtYmVyLmMgLS0gZGV0ZXJtaW5lIHdoZXRoZXIgZ3JvdXAgaWQgaXMgaW4g Y2FsbGluZyB1c2VyJ3MgZ3JvdXAgbGlzdAorCisgICBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5 OTctMTk5OCwgMjAwMywgMjAwNS0yMDA2LCAyMDA5LTIwMTIgRnJlZSBTb2Z0d2FyZQorICAg Rm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTog eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMg b2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz aW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDov L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisK Ky8qIFNwZWNpZmljYXRpb24uICAqLworI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVk ZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRsaWIu aD4KKworI2luY2x1ZGUgInhhbGxvYy1vdmVyc2l6ZWQuaCIKKworLyogTW9zdCBwcm9jZXNz ZXMgaGF2ZSBubyBtb3JlIHRoYW4gdGhpcyBtYW55IGdyb3VwcywgYW5kIGZvciB0aGVzZQor ICAgcHJvY2Vzc2VzIHdlIGNhbiBhdm9pZCB1c2luZyBtYWxsb2MuICAqLworZW51bSB7IEdS T1VQQlVGX1NJWkUgPSAxMDAgfTsKKworc3RydWN0IGdyb3VwX2luZm8KKyAgeworICAgIGdp ZF90ICpncm91cDsKKyAgICBnaWRfdCBncm91cGJ1ZltHUk9VUEJVRl9TSVpFXTsKKyAgfTsK Kworc3RhdGljIHZvaWQKK2ZyZWVfZ3JvdXBfaW5mbyAoc3RydWN0IGdyb3VwX2luZm8gY29u c3QgKmcpCit7CisgIGlmIChnLT5ncm91cCAhPSBnLT5ncm91cGJ1ZikKKyAgICBmcmVlIChn LT5ncm91cCk7Cit9CisKK3N0YXRpYyBpbnQKK2dldF9ncm91cF9pbmZvIChzdHJ1Y3QgZ3Jv dXBfaW5mbyAqZ2kpCit7CisgIGludCBuX2dyb3VwcyA9IGdldGdyb3VwcyAoR1JPVVBCVUZf U0laRSwgZ2ktPmdyb3VwYnVmKTsKKyAgZ2ktPmdyb3VwID0gZ2ktPmdyb3VwYnVmOworCisg IGlmIChuX2dyb3VwcyA8IDApCisgICAgeworICAgICAgaW50IG5fZ3JvdXBfc2xvdHMgPSBn ZXRncm91cHMgKDAsIE5VTEwpOworICAgICAgaWYgKDAgPD0gbl9ncm91cF9zbG90cworICAg ICAgICAgICYmICEgeGFsbG9jX292ZXJzaXplZCAobl9ncm91cF9zbG90cywgc2l6ZW9mICpn aS0+Z3JvdXApKQorICAgICAgICB7CisgICAgICAgICAgZ2ktPmdyb3VwID0gbWFsbG9jIChu X2dyb3VwX3Nsb3RzICogc2l6ZW9mICpnaS0+Z3JvdXApOworICAgICAgICAgIGlmIChnaS0+ Z3JvdXApCisgICAgICAgICAgICBuX2dyb3VwcyA9IGdldGdyb3VwcyAobl9ncm91cF9zbG90 cywgZ2ktPmdyb3VwKTsKKyAgICAgICAgfQorICAgIH0KKworICAvKiBJbiBjYXNlIG9mIGVy cm9yLCB0aGUgdXNlciBsb3Nlcy4gICovCisgIHJldHVybiBuX2dyb3VwczsKK30KKworLyog UmV0dXJuIG5vbi16ZXJvIGlmIEdJRCBpcyBvbmUgdGhhdCB3ZSBoYXZlIGluIG91ciBncm91 cHMgbGlzdC4KKyAgIE5vdGUgdGhhdCB0aGUgZ3JvdXBzIGxpc3QgaXMgbm90IGd1YXJhbnRl ZWQgdG8gY29udGFpbiB0aGUgY3VycmVudAorICAgb3IgZWZmZWN0aXZlIGdyb3VwIElELCBz byB0aGV5IHNob3VsZCBnZW5lcmFsbHkgYmUgY2hlY2tlZAorICAgc2VwYXJhdGVseS4gICov CisKK2ludAorZ3JvdXBfbWVtYmVyIChnaWRfdCBnaWQpCit7CisgIGludCBpOworICBpbnQg Zm91bmQ7CisgIHN0cnVjdCBncm91cF9pbmZvIGdpOworICBpbnQgbl9ncm91cHMgPSBnZXRf Z3JvdXBfaW5mbyAoJmdpKTsKKworICAvKiBTZWFyY2ggdGhyb3VnaCB0aGUgbGlzdCBsb29r aW5nIGZvciBHSUQuICovCisgIGZvdW5kID0gMDsKKyAgZm9yIChpID0gMDsgaSA8IG5fZ3Jv dXBzOyBpKyspCisgICAgeworICAgICAgaWYgKGdpZCA9PSBnaS5ncm91cFtpXSkKKyAgICAg ICAgeworICAgICAgICAgIGZvdW5kID0gMTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAg fQorICAgIH0KKworICBmcmVlX2dyb3VwX2luZm8gKCZnaSk7CisKKyAgcmV0dXJuIGZvdW5k OworfQorCisjaWZkZWYgVEVTVAorCitjaGFyICpwcm9ncmFtX25hbWU7CisKK2ludAorbWFp biAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBpbnQgaTsKKworICBwcm9ncmFtX25h bWUgPSBhcmd2WzBdOworCisgIGZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCisgICAgewor ICAgICAgZ2lkX3QgZ2lkOworCisgICAgICBnaWQgPSBhdG9pIChhcmd2W2ldKTsKKyAgICAg IHByaW50ZiAoIiVkOiAlc1xuIiwgZ2lkLCBncm91cF9tZW1iZXIgKGdpZCkgPyAieWVzIiA6 ICJubyIpOworICAgIH0KKyAgZXhpdCAoMCk7Cit9CisKKyNlbmRpZiAvKiBURVNUICovCgo9 PT0gYWRkZWQgZmlsZSAnbGliL3Jvb3QtdWlkLmgnCi0tLSBsaWIvcm9vdC11aWQuaAkxOTcw LTAxLTAxIDAwOjAwOjAwICswMDAwCisrKyBsaWIvcm9vdC11aWQuaAkyMDEyLTEwLTEyIDIz OjI4OjMxICswMDAwCkBAIC0wLDAgKzEsMzAgQEAKKy8qIFRoZSB1c2VyIElEIHRoYXQgYWx3 YXlzIGhhcyBhcHByb3ByaWF0ZSBwcml2aWxlZ2VzIGluIHRoZSBQT1NJWCBzZW5zZS4KKwor ICAgQ29weXJpZ2h0IDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAg IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAg IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRo aXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMv Pi4KKworICAgV3JpdHRlbiBieSBQYXVsIEVnZ2VydC4gICovCisKKyNpZm5kZWYgUk9PVF9V SURfSF8KKyNkZWZpbmUgUk9PVF9VSURfSF8KKworLyogVGhlIHVzZXIgSUQgdGhhdCBhbHdh eXMgaGFzIGFwcHJvcHJpYXRlIHByaXZpbGVnZXMgaW4gdGhlIFBPU0lYIHNlbnNlLiAgKi8K KyNpZmRlZiBfX1RBTkRFTQorIyBkZWZpbmUgUk9PVF9VSUQgNjU1MzUKKyNlbHNlCisjIGRl ZmluZSBST09UX1VJRCAwCisjZW5kaWYKKworI2VuZGlmCgo9PT0gYWRkZWQgZmlsZSAnbGli L3hhbGxvYy1vdmVyc2l6ZWQuaCcKLS0tIGxpYi94YWxsb2Mtb3ZlcnNpemVkLmgJMTk3MC0w MS0wMSAwMDowMDowMCArMDAwMAorKysgbGliL3hhbGxvYy1vdmVyc2l6ZWQuaAkyMDEyLTEw LTEyIDIzOjI4OjMxICswMDAwCkBAIC0wLDAgKzEsMzggQEAKKy8qIHhhbGxvYy1vdmVyc2l6 ZWQuaCAtLSBtZW1vcnkgYWxsb2NhdGlvbiBzaXplIGNoZWNraW5nCisKKyAgIENvcHlyaWdo dCAoQykgMTk5MC0yMDAwLCAyMDAzLTIwMDQsIDIwMDYtMjAxMiBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9m IHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv bi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93 d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBYQUxMT0NfT1ZFUlNJWkVE X0hfCisjIGRlZmluZSBYQUxMT0NfT1ZFUlNJWkVEX0hfCisKKyMgaW5jbHVkZSA8c3RkZGVm Lmg+CisKKy8qIFJldHVybiAxIGlmIGFuIGFycmF5IG9mIE4gb2JqZWN0cywgZWFjaCBvZiBz aXplIFMsIGNhbm5vdCBleGlzdCBkdWUKKyAgIHRvIHNpemUgYXJpdGhtZXRpYyBvdmVyZmxv dy4gIFMgbXVzdCBiZSBwb3NpdGl2ZSBhbmQgTiBtdXN0IGJlCisgICBub25uZWdhdGl2ZS4g IFRoaXMgaXMgYSBtYWNybywgbm90IGEgZnVuY3Rpb24sIHNvIHRoYXQgaXQKKyAgIHdvcmtz IGNvcnJlY3RseSBldmVuIHdoZW4gU0laRV9NQVggPCBOLgorCisgICBCeSBnbnVsaWIgY29u dmVudGlvbiwgU0laRV9NQVggcmVwcmVzZW50cyBvdmVyZmxvdyBpbiBzaXplCisgICBjYWxj dWxhdGlvbnMsIHNvIHRoZSBjb25zZXJ2YXRpdmUgZGl2aWRlbmQgdG8gdXNlIGhlcmUgaXMK KyAgIFNJWkVfTUFYIC0gMSwgc2luY2UgU0laRV9NQVggbWlnaHQgcmVwcmVzZW50IGFuIG92 ZXJmbG93ZWQgdmFsdWUuCisgICBIb3dldmVyLCBtYWxsb2MgKFNJWkVfTUFYKSBmYWlscyBv biBhbGwga25vd24gaG9zdHMgd2hlcmUKKyAgIHNpemVvZiAocHRyZGlmZl90KSA8PSBzaXpl b2YgKHNpemVfdCksIHNvIGRvIG5vdCBib3RoZXIgdG8gdGVzdCBmb3IKKyAgIGV4YWN0bHkt U0laRV9NQVggYWxsb2NhdGlvbnMgb24gc3VjaCBob3N0czsgdGhpcyBhdm9pZHMgYSB0ZXN0 IGFuZAorICAgYnJhbmNoIHdoZW4gUyBpcyBrbm93biB0byBiZSAxLiAgKi8KKyMgZGVmaW5l IHhhbGxvY19vdmVyc2l6ZWQobiwgcykgXAorICAgICgoc2l6ZV90KSAoc2l6ZW9mIChwdHJk aWZmX3QpIDw9IHNpemVvZiAoc2l6ZV90KSA/IC0xIDogLTIpIC8gKHMpIDwgKG4pKQorCisj ZW5kaWYgLyogIVhBTExPQ19PVkVSU0laRURfSF8gKi8KCj09PSBhZGRlZCBmaWxlICdtNC9l dWlkYWNjZXNzLm00JwotLS0gbTQvZXVpZGFjY2Vzcy5tNAkxOTcwLTAxLTAxIDAwOjAwOjAw ICswMDAwCisrKyBtNC9ldWlkYWNjZXNzLm00CTIwMTItMTAtMTIgMjM6Mjg6MzEgKzAwMDAK QEAgLTAsMCArMSw1MiBAQAorIyBldWlkYWNjZXNzLm00IHNlcmlhbCAxNAorZG5sIENvcHly aWdodCAoQykgMjAwMi0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5s IFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlz dHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9u ZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK0FDX0RFRlVOKFtnbF9GVU5DX05P TlJFRU5UUkFOVF9FVUlEQUNDRVNTXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfRlVOQ19FVUlE QUNDRVNTXSkKKyAgQUNfREVGSU5FKFtQUkVGRVJfTk9OUkVFTlRSQU5UX0VVSURBQ0NFU1Nd LCBbMV0sCisgICAgW0RlZmluZSB0aGlzIGlmIHlvdSBwcmVmZXIgZXVpZGFjY2VzcyB0byBy ZXR1cm4gdGhlIGNvcnJlY3QgcmVzdWx0CisgICAgIGV2ZW4gaWYgdGhpcyB3b3VsZCBtYWtl IGl0IG5vbnJlZW50cmFudC4gIERlZmluZSB0aGlzIG9ubHkgaWYgeW91cgorICAgICBlbnRp cmUgYXBwbGljYXRpb24gaXMgc2FmZSBldmVuIGlmIHRoZSB1aWQgb3IgZ2lkIG1pZ2h0IHRl bXBvcmFyaWx5CisgICAgIGNoYW5nZS4gIElmIHlvdXIgYXBwbGljYXRpb24gdXNlcyBzaWdu YWwgaGFuZGxlcnMgb3IgdGhyZWFkcyBpdAorICAgICBpcyBwcm9iYWJseSBub3Qgc2FmZS5d KQorXSkKKworQUNfREVGVU4oW2dsX0ZVTkNfRVVJREFDQ0VTU10sCitbCisgIEFDX1JFUVVJ UkUoW2dsX1VOSVNURF9IX0RFRkFVTFRTXSkKKworICBkbmwgUGVyc3VhZGUgZ2xpYmMgPHVu aXN0ZC5oPiB0byBkZWNsYXJlIGV1aWRhY2Nlc3MoKS4KKyAgQUNfUkVRVUlSRShbQUNfVVNF X1NZU1RFTV9FWFRFTlNJT05TXSkKKworICBBQ19DSEVDS19GVU5DUyhbZXVpZGFjY2Vzc10p CisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfZXVpZGFjY2VzcyA9IG5vOyB0aGVuCisgICAgSEFW RV9FVUlEQUNDRVNTPTAKKyAgZmkKK10pCisKKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvZXVp ZGFjY2Vzcy5jLgorQUNfREVGVU4oW2dsX1BSRVJFUV9FVUlEQUNDRVNTXSwgWworICBkbmwg UHJlZmVyIFBPU0lYIGZhY2Nlc3NhdCBvdmVyIG5vbi1zdGFuZGFyZCBldWlkYWNjZXNzLgor ICBBQ19DSEVDS19GVU5DU19PTkNFKFtmYWNjZXNzYXRdKQorICBkbmwgVHJ5IHZhcmlvdXMg b3RoZXIgbm9uLXN0YW5kYXJkIGZhbGxiYWNrcy4KKyAgQUNfQ0hFQ0tfSEVBREVSU19PTkNF KFtsaWJnZW4uaF0pCisgIEFDX0NIRUNLX0RFQ0xTX09OQ0UoW3NldHJlZ2lkXSkKKyAgQUNf UkVRVUlSRShbQUNfRlVOQ19HRVRHUk9VUFNdKQorCisgICMgU29sYXJpcyA5IGFuZCAxMCBu ZWVkIC1sZ2VuIHRvIGdldCB0aGUgZWFjY2VzcyBmdW5jdGlvbi4KKyAgIyBTYXZlIGFuZCBy ZXN0b3JlIExJQlMgc28gLWxnZW4gaXNuJ3QgYWRkZWQgdG8gaXQuICBPdGhlcndpc2UsICph bGwqCisgICMgcHJvZ3JhbXMgaW4gdGhlIHBhY2thZ2Ugd291bGQgZW5kIHVwIGxpbmtlZCB3 aXRoIHRoYXQgcG90ZW50aWFsbHktc2hhcmVkCisgICMgbGlicmFyeSwgaW5kdWNpbmcgdW5u ZWNlc3NhcnkgcnVuLXRpbWUgb3ZlcmhlYWQuCisgIExJQl9FQUNDRVNTPQorICBBQ19TVUJT VChbTElCX0VBQ0NFU1NdKQorICBnbF9zYXZlZF9saWJzPSRMSUJTCisgICAgQUNfU0VBUkNI X0xJQlMoW2VhY2Nlc3NdLCBbZ2VuXSwKKyAgICAgICAgICAgICAgICAgICBbdGVzdCAiJGFj X2N2X3NlYXJjaF9lYWNjZXNzIiA9ICJub25lIHJlcXVpcmVkIiB8fAorICAgICAgICAgICAg ICAgICAgICBMSUJfRUFDQ0VTUz0kYWNfY3Zfc2VhcmNoX2VhY2Nlc3NdKQorICAgIEFDX0NI RUNLX0ZVTkNTKFtlYWNjZXNzXSkKKyAgTElCUz0kZ2xfc2F2ZWRfbGlicworXSkKCj09PSBh ZGRlZCBmaWxlICdtNC9mYWNjZXNzYXQubTQnCi0tLSBtNC9mYWNjZXNzYXQubTQJMTk3MC0w MS0wMSAwMDowMDowMCArMDAwMAorKysgbTQvZmFjY2Vzc2F0Lm00CTIwMTItMTAtMTUgMDY6 MDU6NDYgKzAwMDAKQEAgLTAsMCArMSwyOCBAQAorIyBzZXJpYWwgNgorIyBTZWUgaWYgd2Ug bmVlZCB0byBwcm92aWRlIGZhY2Nlc3NhdCByZXBsYWNlbWVudC4KKworZG5sIENvcHlyaWdo dCAoQykgMjAwOS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRo aXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u CitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJp YnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBh cyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgV3JpdHRlbiBieSBFcmljIEJsYWtl LgorCitBQ19ERUZVTihbZ2xfRlVOQ19GQUNDRVNTQVRdLAorWworICBBQ19SRVFVSVJFKFtn bF9VTklTVERfSF9ERUZBVUxUU10pCisKKyAgZG5sIFBlcnN1YWRlIGdsaWJjIDx1bmlzdGQu aD4gdG8gZGVjbGFyZSBmYWNjZXNzYXQoKS4KKyAgQUNfUkVRVUlSRShbZ2xfVVNFX1NZU1RF TV9FWFRFTlNJT05TXSkKKworICBBQ19DSEVDS19GVU5DU19PTkNFKFtmYWNjZXNzYXRdKQor ICBpZiB0ZXN0ICRhY19jdl9mdW5jX2ZhY2Nlc3NhdCA9IG5vOyB0aGVuCisgICAgSEFWRV9G QUNDRVNTQVQ9MAorICBmaQorXSkKKworIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9mYWNjZXNz YXQubTQuCitBQ19ERUZVTihbZ2xfUFJFUkVRX0ZBQ0NFU1NBVF0sCitbCisgIEFDX0NIRUNL X0ZVTkNTKFthY2Nlc3NdKQorXSkKCj09PSBhZGRlZCBmaWxlICdtNC9mY250bF9oLm00Jwot LS0gbTQvZmNudGxfaC5tNAkxOTcwLTAxLTAxIDAwOjAwOjAwICswMDAwCisrKyBtNC9mY250 bF9oLm00CTIwMTItMTAtMTUgMDY6MDU6NDYgKzAwMDAKQEAgLTAsMCArMSw1MCBAQAorIyBz ZXJpYWwgMTUKKyMgQ29uZmlndXJlIGZjbnRsLmguCitkbmwgQ29weXJpZ2h0IChDKSAyMDA2 LTIwMDcsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBU aGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3Ry aWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcg YXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitkbmwgV3JpdHRlbiBieSBQYXVsIEVn Z2VydC4KKworQUNfREVGVU4oW2dsX0ZDTlRMX0hdLAorWworICBBQ19SRVFVSVJFKFtnbF9G Q05UTF9IX0RFRkFVTFRTXSkKKyAgQUNfUkVRVUlSRShbZ2xfRkNOVExfT19GTEFHU10pCisg IGdsX05FWFRfSEVBREVSUyhbZmNudGwuaF0pCisKKyAgZG5sIEVuc3VyZSB0aGUgdHlwZSBw aWRfdCBnZXRzIGRlZmluZWQuCisgIEFDX1JFUVVJUkUoW0FDX1RZUEVfUElEX1RdKQorCisg IGRubCBFbnN1cmUgdGhlIHR5cGUgbW9kZV90IGdldHMgZGVmaW5lZC4KKyAgQUNfUkVRVUlS RShbQUNfVFlQRV9NT0RFX1RdKQorCisgIGRubCBDaGVjayBmb3IgZGVjbGFyYXRpb25zIG9m IGFueXRoaW5nIHdlIHdhbnQgdG8gcG9pc29uIGlmIHRoZQorICBkbmwgY29ycmVzcG9uZGlu ZyBnbnVsaWIgbW9kdWxlIGlzIG5vdCBpbiB1c2UsIGlmIGl0IGlzIG5vdCBjb21tb24KKyAg ZG5sIGVub3VnaCB0byBiZSBkZWNsYXJlZCBldmVyeXdoZXJlLgorICBnbF9XQVJOX09OX1VT RV9QUkVQQVJFKFtbI2luY2x1ZGUgPGZjbnRsLmg+CisgICAgXV0sIFtmY250bCBvcGVuYXRd KQorXSkKKworQUNfREVGVU4oW2dsX0ZDTlRMX01PRFVMRV9JTkRJQ0FUT1JdLAorWworICBk bmwgVXNlIEFDX1JFUVVJUkUgaGVyZSwgc28gdGhhdCB0aGUgZGVmYXVsdCBzZXR0aW5ncyBh cmUgZXhwYW5kZWQgb25jZSBvbmx5LgorICBBQ19SRVFVSVJFKFtnbF9GQ05UTF9IX0RFRkFV TFRTXSkKKyAgZ2xfTU9EVUxFX0lORElDQVRPUl9TRVRfVkFSSUFCTEUoWyQxXSkKKyAgZG5s IERlZmluZSBpdCBhbHNvIGFzIGEgQyBtYWNybywgZm9yIHRoZSBiZW5lZml0IG9mIHRoZSB1 bml0IHRlc3RzLgorICBnbF9NT0RVTEVfSU5ESUNBVE9SX0ZPUl9URVNUUyhbJDFdKQorXSkK KworQUNfREVGVU4oW2dsX0ZDTlRMX0hfREVGQVVMVFNdLAorWworICBHTlVMSUJfRkNOVEw9 MDsgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfRkNOVExdKQorICBHTlVMSUJfTk9OQkxPQ0tJ Tkc9MDsgIEFDX1NVQlNUKFtHTlVMSUJfTk9OQkxPQ0tJTkddKQorICBHTlVMSUJfT1BFTj0w OyAgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfT1BFTl0pCisgIEdOVUxJQl9PUEVOQVQ9MDsg ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9PUEVOQVRdKQorICBkbmwgQXNzdW1lIHByb3BlciBH TlUgYmVoYXZpb3IgdW5sZXNzIGFub3RoZXIgbW9kdWxlIHNheXMgb3RoZXJ3aXNlLgorICBI QVZFX0ZDTlRMPTE7ICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0ZDTlRMXSkKKyAgSEFWRV9P UEVOQVQ9MTsgICAgICAgICBBQ19TVUJTVChbSEFWRV9PUEVOQVRdKQorICBSRVBMQUNFX0ZD TlRMPTA7ICAgICAgIEFDX1NVQlNUKFtSRVBMQUNFX0ZDTlRMXSkKKyAgUkVQTEFDRV9PUEVO PTA7ICAgICAgICBBQ19TVUJTVChbUkVQTEFDRV9PUEVOXSkKKyAgUkVQTEFDRV9PUEVOQVQ9 MDsgICAgICBBQ19TVUJTVChbUkVQTEFDRV9PUEVOQVRdKQorXSkKCj09PSBhZGRlZCBmaWxl ICdtNC9nZXRncm91cHMubTQnCi0tLSBtNC9nZXRncm91cHMubTQJMTk3MC0wMS0wMSAwMDow MDowMCArMDAwMAorKysgbTQvZ2V0Z3JvdXBzLm00CTIwMTItMTAtMTIgMjM6Mjg6MzEgKzAw MDAKQEAgLTAsMCArMSwxMDcgQEAKKyMgc2VyaWFsIDE4CisKK2RubCBGcm9tIEppbSBNZXll cmluZy4KK2RubCBBIHdyYXBwZXIgYXJvdW5kIEFDX0ZVTkNfR0VUR1JPVVBTLgorCisjIENv cHlyaWdodCAoQykgMTk5Ni0xOTk3LCAxOTk5LTIwMDQsIDIwMDgtMjAxMiBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1p c3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0 IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgor CittNF92ZXJzaW9uX3ByZXJlcShbMi43MF0sIFtdICxbCisKKyMgVGhpcyBpcyB0YWtlbiBm cm9tIHRoZSBmb2xsb3dpbmcgQXV0b2NvbmYgcGF0Y2g6CisjIGh0dHA6Ly9naXQuc2F2YW5u YWguZ251Lm9yZy9naXR3ZWIvP3A9YXV0b2NvbmYuZ2l0O2E9Y29tbWl0ZGlmZjtoPTdmYmI1 NTM3MjdlZDdlMGU2ODlhMTc1OTRiNTg1NTllY2YzZWE2ZTkKK0FDX0RFRlVOKFtBQ19GVU5D X0dFVEdST1VQU10sCitbCisgIEFDX1JFUVVJUkUoW0FDX1RZUEVfR0VUR1JPVVBTXSlkbmwK KyAgQUNfUkVRVUlSRShbQUNfVFlQRV9TSVpFX1RdKWRubAorICBBQ19SRVFVSVJFKFtBQ19D QU5PTklDQUxfSE9TVF0pZG5sIGZvciBjcm9zcy1jb21waWxlcworICBBQ19DSEVDS19GVU5D KFtnZXRncm91cHNdKQorCisgICMgSWYgd2UgZG9uJ3QgeWV0IGhhdmUgZ2V0Z3JvdXBzLCBz ZWUgaWYgaXQncyBpbiAtbGJzZC4KKyAgIyBUaGlzIGlzIHJlcG9ydGVkIHRvIGJlIG5lY2Vz c2FyeSBvbiBhbiBJVE9TIDMwMDBXUyBydW5uaW5nIFNFSVVYIDMuMS4KKyAgYWNfc2F2ZV9M SUJTPSRMSUJTCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfZ2V0Z3JvdXBzID0gbm87IHRoZW4K KyAgICBBQ19DSEVDS19MSUIoYnNkLCBnZXRncm91cHMsIFtHRVRHUk9VUFNfTElCPS1sYnNk XSkKKyAgZmkKKworICAjIFJ1biB0aGUgcHJvZ3JhbSB0byB0ZXN0IHRoZSBmdW5jdGlvbmFs aXR5IG9mIHRoZSBzeXN0ZW0tc3VwcGxpZWQKKyAgIyBnZXRncm91cHMgZnVuY3Rpb24gb25s eSBpZiB0aGVyZSBpcyBzdWNoIGEgZnVuY3Rpb24uCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNf Z2V0Z3JvdXBzID0geWVzOyB0aGVuCisgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB3b3JraW5n IGdldGdyb3Vwc10sIFthY19jdl9mdW5jX2dldGdyb3Vwc193b3Jrc10sCisgICAgICBbQUNf UlVOX0lGRUxTRSgKKyAgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oCisgICAgICAgICAgICBb QUNfSU5DTFVERVNfREVGQVVMVF0sCisgICAgICAgICAgICBbWy8qIE9uIFVsdHJpeCA0LjMs IGdldGdyb3VwcyAoMCwgMCkgYWx3YXlzIGZhaWxzLiAgKi8KKyAgICAgICAgICAgICAgcmV0 dXJuIGdldGdyb3VwcyAoMCwgMCkgPT0gLTE7XV0pCisgICAgICAgICBdLAorICAgICAgICAg W2FjX2N2X2Z1bmNfZ2V0Z3JvdXBzX3dvcmtzPXllc10sCisgICAgICAgICBbYWNfY3ZfZnVu Y19nZXRncm91cHNfd29ya3M9bm9dLAorICAgICAgICAgW2Nhc2UgIiRob3N0X29zIiBpbiAj ICgoCisgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIGdsaWJjIHN5c3RlbXMu CisgICAgICAgICAgICAqLWdudSopIGFjX2N2X2Z1bmNfZ2V0Z3JvdXBzX3dvcmtzPSJndWVz c2luZyB5ZXMiIDs7CisgICAgICAgICAgICAgICAgICAgICMgSWYgd2UgZG9uJ3Qga25vdywg YXNzdW1lIHRoZSB3b3JzdC4KKyAgICAgICAgICAgICopICAgICAgYWNfY3ZfZnVuY19nZXRn cm91cHNfd29ya3M9Imd1ZXNzaW5nIG5vIiA7OworICAgICAgICAgIGVzYWMKKyAgICAgICAg IF0pCisgICAgICBdKQorICBlbHNlCisgICAgYWNfY3ZfZnVuY19nZXRncm91cHNfd29ya3M9 bm8KKyAgZmkKKyAgY2FzZSAiJGFjX2N2X2Z1bmNfZ2V0Z3JvdXBzX3dvcmtzIiBpbgorICAg ICp5ZXMpCisgICAgICBBQ19ERUZJTkUoW0hBVkVfR0VUR1JPVVBTXSwgWzFdLAorICAgICAg ICBbRGVmaW5lIHRvIDEgaWYgeW91ciBzeXN0ZW0gaGFzIGEgd29ya2luZyBgZ2V0Z3JvdXBz JyBmdW5jdGlvbi5dKQorICAgICAgOzsKKyAgZXNhYworICBMSUJTPSRhY19zYXZlX0xJQlMK K10pIyBBQ19GVU5DX0dFVEdST1VQUworCitdKQorCitBQ19ERUZVTihbZ2xfRlVOQ19HRVRH Uk9VUFNdLAorWworICBBQ19SRVFVSVJFKFtBQ19UWVBFX0dFVEdST1VQU10pCisgIEFDX1JF UVVJUkUoW2dsX1VOSVNURF9IX0RFRkFVTFRTXSkKKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05J Q0FMX0hPU1RdKSBkbmwgZm9yIGNyb3NzLWNvbXBpbGVzCisKKyAgQUNfRlVOQ19HRVRHUk9V UFMKKyAgaWYgdGVzdCAkYWNfY3ZfZnVuY19nZXRncm91cHMgIT0geWVzOyB0aGVuCisgICAg SEFWRV9HRVRHUk9VUFM9MAorICBlbHNlCisgICAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfZ2V0 Z3JvdXBzIiAhPSBnaWRfdCBcCisgICAgICAgfHwgeyBjYXNlICIkYWNfY3ZfZnVuY19nZXRn cm91cHNfd29ya3MiIGluCisgICAgICAgICAgICAgICp5ZXMpIGZhbHNlOzsKKyAgICAgICAg ICAgICAgKikgdHJ1ZTs7CisgICAgICAgICAgICBlc2FjCisgICAgICAgICAgfTsgdGhlbgor ICAgICAgUkVQTEFDRV9HRVRHUk9VUFM9MQorICAgICAgQUNfREVGSU5FKFtHRVRHUk9VUFNf WkVST19CVUddLCBbMV0sIFtEZWZpbmUgdGhpcyB0byAxIGlmCisgICAgICAgIGdldGdyb3Vw cygwLE5VTEwpIGRvZXMgbm90IHJldHVybiB0aGUgbnVtYmVyIG9mIGdyb3Vwcy5dKQorICAg IGVsc2UKKyAgICAgIGRubCBEZXRlY3QgRnJlZUJTRCBidWc7IFBPU0lYIHJlcXVpcmVzIGdl dGdyb3VwcygtMSxwdHIpIHRvIGZhaWwuCisgICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhl ciBnZXRncm91cHMgaGFuZGxlcyBuZWdhdGl2ZSB2YWx1ZXNdLAorICAgICAgICBbZ2xfY3Zf ZnVuY19nZXRncm91cHNfd29ya3NdLAorICAgICAgICBbQUNfUlVOX0lGRUxTRShbQUNfTEFO R19QUk9HUkFNKFtBQ19JTkNMVURFU19ERUZBVUxUXSwKKyAgICAgICAgICBbW2ludCBzaXpl ID0gZ2V0Z3JvdXBzICgwLCAwKTsKKyAgICAgICAgICAgIGdpZF90ICpsaXN0ID0gbWFsbG9j IChzaXplICogc2l6ZW9mICpsaXN0KTsKKyAgICAgICAgICAgIHJldHVybiBnZXRncm91cHMg KC0xLCBsaXN0KSAhPSAtMTtdXSldLAorICAgICAgICAgIFtnbF9jdl9mdW5jX2dldGdyb3Vw c193b3Jrcz15ZXNdLAorICAgICAgICAgIFtnbF9jdl9mdW5jX2dldGdyb3Vwc193b3Jrcz1u b10sCisgICAgICAgICAgW2Nhc2UgIiRob3N0X29zIiBpbgorICAgICAgICAgICAgICAgICAg ICAgIyBHdWVzcyB5ZXMgb24gZ2xpYmMgc3lzdGVtcy4KKyAgICAgICAgICAgICAqLWdudSop IGdsX2N2X2Z1bmNfZ2V0Z3JvdXBzX3dvcmtzPSJndWVzc2luZyB5ZXMiIDs7CisgICAgICAg ICAgICAgICAgICAgICAjIElmIHdlIGRvbid0IGtub3csIGFzc3VtZSB0aGUgd29yc3QuCisg ICAgICAgICAgICAgKikgICAgICBnbF9jdl9mdW5jX2dldGdyb3Vwc193b3Jrcz0iZ3Vlc3Np bmcgbm8iIDs7CisgICAgICAgICAgIGVzYWMKKyAgICAgICAgICBdKV0pCisgICAgICBjYXNl ICIkZ2xfY3ZfZnVuY19nZXRncm91cHNfd29ya3MiIGluCisgICAgICAgICp5ZXMpIDs7Cisg ICAgICAgICopIFJFUExBQ0VfR0VUR1JPVVBTPTEgOzsKKyAgICAgIGVzYWMKKyAgICBmaQor ICBmaQorICB0ZXN0IC1uICIkR0VUR1JPVVBTX0xJQiIgJiYgTElCUz0iJEdFVEdST1VQU19M SUIgJExJQlMiCitdKQoKPT09IG1vZGlmaWVkIGZpbGUgJ200L2dudWxpYi1jb21wLm00Jwot LS0gbTQvZ251bGliLWNvbXAubTQJMjAxMi0wOS0yNyAwMTowNjoyMyArMDAwMAorKysgbTQv Z251bGliLWNvbXAubTQJMjAxMi0xMC0xNSAwNjowNTo0NiArMDAwMApAQCAtNTMsMTcgKzUz LDIyIEBACiAgICMgQ29kZSBmcm9tIG1vZHVsZSBkdG90aW1lc3BlYzoKICAgIyBDb2RlIGZy b20gbW9kdWxlIGR1cDI6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBlbnZpcm9uOgorICAjIENv ZGUgZnJvbSBtb2R1bGUgZXVpZGFjY2VzczoKICAgIyBDb2RlIGZyb20gbW9kdWxlIGV4ZWNp bmZvOgogICAjIENvZGUgZnJvbSBtb2R1bGUgZXh0ZW5zaW9uczoKICAgQUNfUkVRVUlSRShb Z2xfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSkKICAgIyBDb2RlIGZyb20gbW9kdWxlIGV4dGVy bi1pbmxpbmU6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBmYWNjZXNzYXQ6CisgICMgQ29kZSBm cm9tIG1vZHVsZSBmY250bC1oOgogICAjIENvZGUgZnJvbSBtb2R1bGUgZmlsZW1vZGU6Cisg ICMgQ29kZSBmcm9tIG1vZHVsZSBnZXRncm91cHM6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBn ZXRsb2FkYXZnOgogICAjIENvZGUgZnJvbSBtb2R1bGUgZ2V0b3B0LWdudToKICAgIyBDb2Rl IGZyb20gbW9kdWxlIGdldG9wdC1wb3NpeDoKICAgIyBDb2RlIGZyb20gbW9kdWxlIGdldHRl eHQtaDoKICAgIyBDb2RlIGZyb20gbW9kdWxlIGdldHRpbWU6CiAgICMgQ29kZSBmcm9tIG1v ZHVsZSBnZXR0aW1lb2ZkYXk6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBncm91cC1tZW1iZXI6 CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBpZ25vcmUtdmFsdWU6CiAgICMgQ29kZSBmcm9tIG1v ZHVsZSBpbmNsdWRlX25leHQ6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBpbnRwcm9wczoKQEAg LTc5LDYgKzg0LDcgQEAKICAgIyBDb2RlIGZyb20gbW9kdWxlIHBzZWxlY3Q6CiAgICMgQ29k ZSBmcm9tIG1vZHVsZSBwdGhyZWFkX3NpZ21hc2s6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBy ZWFkbGluazoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIHJvb3QtdWlkOgogICAjIENvZGUgZnJv bSBtb2R1bGUgc2lnbmFsLWg6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBzbmlwcGV0L19Ob3Jl dHVybjoKICAgIyBDb2RlIGZyb20gbW9kdWxlIHNuaXBwZXQvYXJnLW5vbm51bGw6CkBAIC0x MjAsNiArMTI2LDcgQEAKICAgIyBDb2RlIGZyb20gbW9kdWxlIHV0aW1lbnM6CiAgICMgQ29k ZSBmcm9tIG1vZHVsZSB2ZXJpZnk6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSB3YXJuaW5nczoK KyAgIyBDb2RlIGZyb20gbW9kdWxlIHhhbGxvYy1vdmVyc2l6ZWQ6CiBdKQogCiAjIFRoaXMg bWFjcm8gc2hvdWxkIGJlIGludm9rZWQgZnJvbSAuL2NvbmZpZ3VyZS5hYywgaW4gdGhlIHNl Y3Rpb24KQEAgLTE1Niw2ICsxNjMsMTQgQEAKICAgZ2xfVU5JU1REX01PRFVMRV9JTkRJQ0FU T1IoW2Vudmlyb25dKQogICBnbF9FWEVDSU5GT19ICiAgIEFDX1JFUVVJUkUoW2dsX0VYVEVS Tl9JTkxJTkVdKQorICBnbF9GVU5DX0ZBQ0NFU1NBVAorICBpZiB0ZXN0ICRIQVZFX0ZBQ0NF U1NBVCA9IDA7IHRoZW4KKyAgICBBQ19MSUJPQkooW2ZhY2Nlc3NhdF0pCisgICAgZ2xfUFJF UkVRX0ZBQ0NFU1NBVAorICBmaQorICBnbF9NT0RVTEVfSU5ESUNBVE9SKFtmYWNjZXNzYXRd KQorICBnbF9VTklTVERfTU9EVUxFX0lORElDQVRPUihbZmFjY2Vzc2F0XSkKKyAgZ2xfRkNO VExfSAogICBnbF9GSUxFTU9ERQogICBnbF9HRVRMT0FEQVZHCiAgIGlmIHRlc3QgJEhBVkVf R0VUTE9BREFWRyA9IDA7IHRoZW4KQEAgLTI2OSwxOCArMjg0LDUzIEBACiAgIGdsX1VOSVNU RF9ICiAgIGdsX1VUSU1FTlMKICAgZ2xfZ251bGliX2VuYWJsZWRfZG9zbmFtZT1mYWxzZQor ICBnbF9nbnVsaWJfZW5hYmxlZF9ldWlkYWNjZXNzPWZhbHNlCisgIGdsX2dudWxpYl9lbmFi bGVkX2dldGdyb3Vwcz1mYWxzZQogICBnbF9nbnVsaWJfZW5hYmxlZF9iZTQ1M2NlYzVlZWNm NTczMWEyNzRmMmRlN2YyZGIzNj1mYWxzZQorICBnbF9nbnVsaWJfZW5hYmxlZF9hOTc4Njg1 MGU5OTlhZTY1YTgzNmE2MDQxZThlNWVkMT1mYWxzZQogICBnbF9nbnVsaWJfZW5hYmxlZF9w YXRobWF4PWZhbHNlCisgIGdsX2dudWxpYl9lbmFibGVkXzYwOTllOTczN2Y3NTdkYjM2YzQ3 ZmE5ZDlmMDJlODhjPWZhbHNlCiAgIGdsX2dudWxpYl9lbmFibGVkX3N0YXQ9ZmFsc2UKICAg Z2xfZ251bGliX2VuYWJsZWRfc3RydG9sbD1mYWxzZQogICBnbF9nbnVsaWJfZW5hYmxlZF9z dHJ0b3VsbD1mYWxzZQogICBnbF9nbnVsaWJfZW5hYmxlZF92ZXJpZnk9ZmFsc2UKKyAgZ2xf Z251bGliX2VuYWJsZWRfNjgyZTYwOTYwNGNjYWFjNmJlMzgyZTRlZTNhNGVhZWM9ZmFsc2UK ICAgZnVuY19nbF9nbnVsaWJfbTRjb2RlX2Rvc25hbWUgKCkKICAgewogICAgIGlmICEgJGds X2dudWxpYl9lbmFibGVkX2Rvc25hbWU7IHRoZW4KICAgICAgIGdsX2dudWxpYl9lbmFibGVk X2Rvc25hbWU9dHJ1ZQogICAgIGZpCiAgIH0KKyAgZnVuY19nbF9nbnVsaWJfbTRjb2RlX2V1 aWRhY2Nlc3MgKCkKKyAgeworICAgIGlmICEgJGdsX2dudWxpYl9lbmFibGVkX2V1aWRhY2Nl c3M7IHRoZW4KKyAgICAgIGdsX0ZVTkNfRVVJREFDQ0VTUworICAgICAgaWYgdGVzdCAkSEFW RV9FVUlEQUNDRVNTID0gMDsgdGhlbgorICAgICAgICBBQ19MSUJPQkooW2V1aWRhY2Nlc3Nd KQorICAgICAgICBnbF9QUkVSRVFfRVVJREFDQ0VTUworICAgICAgZmkKKyAgICAgIGdsX1VO SVNURF9NT0RVTEVfSU5ESUNBVE9SKFtldWlkYWNjZXNzXSkKKyAgICAgIGdsX2dudWxpYl9l bmFibGVkX2V1aWRhY2Nlc3M9dHJ1ZQorICAgICAgaWYgdGVzdCAkSEFWRV9FVUlEQUNDRVNT ID0gMDsgdGhlbgorICAgICAgICBmdW5jX2dsX2dudWxpYl9tNGNvZGVfYTk3ODY4NTBlOTk5 YWU2NWE4MzZhNjA0MWU4ZTVlZDEKKyAgICAgIGZpCisgICAgICBmdW5jX2dsX2dudWxpYl9t NGNvZGVfNjA5OWU5NzM3Zjc1N2RiMzZjNDdmYTlkOWYwMmU4OGMKKyAgICAgIGlmIHRlc3Qg JEhBVkVfRVVJREFDQ0VTUyA9IDA7IHRoZW4KKyAgICAgICAgZnVuY19nbF9nbnVsaWJfbTRj b2RlX3N0YXQKKyAgICAgIGZpCisgICAgZmkKKyAgfQorICBmdW5jX2dsX2dudWxpYl9tNGNv ZGVfZ2V0Z3JvdXBzICgpCisgIHsKKyAgICBpZiAhICRnbF9nbnVsaWJfZW5hYmxlZF9nZXRn cm91cHM7IHRoZW4KKyAgICAgIGdsX0ZVTkNfR0VUR1JPVVBTCisgICAgICBpZiB0ZXN0ICRI QVZFX0dFVEdST1VQUyA9IDAgfHwgdGVzdCAkUkVQTEFDRV9HRVRHUk9VUFMgPSAxOyB0aGVu CisgICAgICAgIEFDX0xJQk9CSihbZ2V0Z3JvdXBzXSkKKyAgICAgIGZpCisgICAgICBnbF9V TklTVERfTU9EVUxFX0lORElDQVRPUihbZ2V0Z3JvdXBzXSkKKyAgICAgIGdsX2dudWxpYl9l bmFibGVkX2dldGdyb3Vwcz10cnVlCisgICAgZmkKKyAgfQogICBmdW5jX2dsX2dudWxpYl9t NGNvZGVfYmU0NTNjZWM1ZWVjZjU3MzFhMjc0ZjJkZTdmMmRiMzYgKCkKICAgewogICAgIGlm ICEgJGdsX2dudWxpYl9lbmFibGVkX2JlNDUzY2VjNWVlY2Y1NzMxYTI3NGYyZGU3ZjJkYjM2 OyB0aGVuCkBAIC0yODksNiArMzM5LDI0IEBACiAgICAgICBnbF9nbnVsaWJfZW5hYmxlZF9i ZTQ1M2NlYzVlZWNmNTczMWEyNzRmMmRlN2YyZGIzNj10cnVlCiAgICAgZmkKICAgfQorICBm dW5jX2dsX2dudWxpYl9tNGNvZGVfYTk3ODY4NTBlOTk5YWU2NWE4MzZhNjA0MWU4ZTVlZDEg KCkKKyAgeworICAgIGlmICEgJGdsX2dudWxpYl9lbmFibGVkX2E5Nzg2ODUwZTk5OWFlNjVh ODM2YTYwNDFlOGU1ZWQxOyB0aGVuCisgICAgICBnbF9GVU5DX0dST1VQX01FTUJFUgorICAg ICAgaWYgdGVzdCAkSEFWRV9HUk9VUF9NRU1CRVIgPSAwOyB0aGVuCisgICAgICAgIEFDX0xJ Qk9CSihbZ3JvdXAtbWVtYmVyXSkKKyAgICAgICAgZ2xfUFJFUkVRX0dST1VQX01FTUJFUgor ICAgICAgZmkKKyAgICAgIGdsX1VOSVNURF9NT0RVTEVfSU5ESUNBVE9SKFtncm91cC1tZW1i ZXJdKQorICAgICAgZ2xfZ251bGliX2VuYWJsZWRfYTk3ODY4NTBlOTk5YWU2NWE4MzZhNjA0 MWU4ZTVlZDE9dHJ1ZQorICAgICAgaWYgdGVzdCAkSEFWRV9HUk9VUF9NRU1CRVIgPSAwOyB0 aGVuCisgICAgICAgIGZ1bmNfZ2xfZ251bGliX200Y29kZV9nZXRncm91cHMKKyAgICAgIGZp CisgICAgICBpZiB0ZXN0ICRIQVZFX0dST1VQX01FTUJFUiA9IDA7IHRoZW4KKyAgICAgICAg ZnVuY19nbF9nbnVsaWJfbTRjb2RlXzY4MmU2MDk2MDRjY2FhYzZiZTM4MmU0ZWUzYTRlYWVj CisgICAgICBmaQorICAgIGZpCisgIH0KICAgZnVuY19nbF9nbnVsaWJfbTRjb2RlX3BhdGht YXggKCkKICAgewogICAgIGlmICEgJGdsX2dudWxpYl9lbmFibGVkX3BhdGhtYXg7IHRoZW4K QEAgLTI5Niw2ICszNjQsMTIgQEAKICAgICAgIGdsX2dudWxpYl9lbmFibGVkX3BhdGhtYXg9 dHJ1ZQogICAgIGZpCiAgIH0KKyAgZnVuY19nbF9nbnVsaWJfbTRjb2RlXzYwOTllOTczN2Y3 NTdkYjM2YzQ3ZmE5ZDlmMDJlODhjICgpCisgIHsKKyAgICBpZiAhICRnbF9nbnVsaWJfZW5h YmxlZF82MDk5ZTk3MzdmNzU3ZGIzNmM0N2ZhOWQ5ZjAyZTg4YzsgdGhlbgorICAgICAgZ2xf Z251bGliX2VuYWJsZWRfNjA5OWU5NzM3Zjc1N2RiMzZjNDdmYTlkOWYwMmU4OGM9dHJ1ZQor ICAgIGZpCisgIH0KICAgZnVuY19nbF9nbnVsaWJfbTRjb2RlX3N0YXQgKCkKICAgewogICAg IGlmICEgJGdsX2dudWxpYl9lbmFibGVkX3N0YXQ7IHRoZW4KQEAgLTM0Nyw2ICs0MjEsMTgg QEAKICAgICAgIGdsX2dudWxpYl9lbmFibGVkX3ZlcmlmeT10cnVlCiAgICAgZmkKICAgfQor ICBmdW5jX2dsX2dudWxpYl9tNGNvZGVfNjgyZTYwOTYwNGNjYWFjNmJlMzgyZTRlZTNhNGVh ZWMgKCkKKyAgeworICAgIGlmICEgJGdsX2dudWxpYl9lbmFibGVkXzY4MmU2MDk2MDRjY2Fh YzZiZTM4MmU0ZWUzYTRlYWVjOyB0aGVuCisgICAgICBnbF9nbnVsaWJfZW5hYmxlZF82ODJl NjA5NjA0Y2NhYWM2YmUzODJlNGVlM2E0ZWFlYz10cnVlCisgICAgZmkKKyAgfQorICBpZiB0 ZXN0ICRIQVZFX0ZBQ0NFU1NBVCA9IDA7IHRoZW4KKyAgICBmdW5jX2dsX2dudWxpYl9tNGNv ZGVfZG9zbmFtZQorICBmaQorICBpZiB0ZXN0ICRIQVZFX0ZBQ0NFU1NBVCA9IDA7IHRoZW4K KyAgICBmdW5jX2dsX2dudWxpYl9tNGNvZGVfZXVpZGFjY2VzcworICBmaQogICBpZiB0ZXN0 ICRSRVBMQUNFX0dFVE9QVCA9IDE7IHRoZW4KICAgICBmdW5jX2dsX2dudWxpYl9tNGNvZGVf YmU0NTNjZWM1ZWVjZjU3MzFhMjc0ZjJkZTdmMmRiMzYKICAgZmkKQEAgLTM3MywxMiArNDU5 LDE3IEBACiAgIGZpCiAgIG00X3BhdHRlcm5fYWxsb3coW15nbF9HTlVMSUJfRU5BQkxFRF9d KQogICBBTV9DT05ESVRJT05BTChbZ2xfR05VTElCX0VOQUJMRURfZG9zbmFtZV0sIFskZ2xf Z251bGliX2VuYWJsZWRfZG9zbmFtZV0pCisgIEFNX0NPTkRJVElPTkFMKFtnbF9HTlVMSUJf RU5BQkxFRF9ldWlkYWNjZXNzXSwgWyRnbF9nbnVsaWJfZW5hYmxlZF9ldWlkYWNjZXNzXSkK KyAgQU1fQ09ORElUSU9OQUwoW2dsX0dOVUxJQl9FTkFCTEVEX2dldGdyb3Vwc10sIFskZ2xf Z251bGliX2VuYWJsZWRfZ2V0Z3JvdXBzXSkKICAgQU1fQ09ORElUSU9OQUwoW2dsX0dOVUxJ Ql9FTkFCTEVEX2JlNDUzY2VjNWVlY2Y1NzMxYTI3NGYyZGU3ZjJkYjM2XSwgWyRnbF9nbnVs aWJfZW5hYmxlZF9iZTQ1M2NlYzVlZWNmNTczMWEyNzRmMmRlN2YyZGIzNl0pCisgIEFNX0NP TkRJVElPTkFMKFtnbF9HTlVMSUJfRU5BQkxFRF9hOTc4Njg1MGU5OTlhZTY1YTgzNmE2MDQx ZThlNWVkMV0sIFskZ2xfZ251bGliX2VuYWJsZWRfYTk3ODY4NTBlOTk5YWU2NWE4MzZhNjA0 MWU4ZTVlZDFdKQogICBBTV9DT05ESVRJT05BTChbZ2xfR05VTElCX0VOQUJMRURfcGF0aG1h eF0sIFskZ2xfZ251bGliX2VuYWJsZWRfcGF0aG1heF0pCisgIEFNX0NPTkRJVElPTkFMKFtn bF9HTlVMSUJfRU5BQkxFRF82MDk5ZTk3MzdmNzU3ZGIzNmM0N2ZhOWQ5ZjAyZTg4Y10sIFsk Z2xfZ251bGliX2VuYWJsZWRfNjA5OWU5NzM3Zjc1N2RiMzZjNDdmYTlkOWYwMmU4OGNdKQog ICBBTV9DT05ESVRJT05BTChbZ2xfR05VTElCX0VOQUJMRURfc3RhdF0sIFskZ2xfZ251bGli X2VuYWJsZWRfc3RhdF0pCiAgIEFNX0NPTkRJVElPTkFMKFtnbF9HTlVMSUJfRU5BQkxFRF9z dHJ0b2xsXSwgWyRnbF9nbnVsaWJfZW5hYmxlZF9zdHJ0b2xsXSkKICAgQU1fQ09ORElUSU9O QUwoW2dsX0dOVUxJQl9FTkFCTEVEX3N0cnRvdWxsXSwgWyRnbF9nbnVsaWJfZW5hYmxlZF9z dHJ0b3VsbF0pCiAgIEFNX0NPTkRJVElPTkFMKFtnbF9HTlVMSUJfRU5BQkxFRF92ZXJpZnld LCBbJGdsX2dudWxpYl9lbmFibGVkX3ZlcmlmeV0pCisgIEFNX0NPTkRJVElPTkFMKFtnbF9H TlVMSUJfRU5BQkxFRF82ODJlNjA5NjA0Y2NhYWM2YmUzODJlNGVlM2E0ZWFlY10sIFskZ2xf Z251bGliX2VuYWJsZWRfNjgyZTYwOTYwNGNjYWFjNmJlMzgyZTRlZTNhNGVhZWNdKQogICAj IEVuZCBvZiBjb2RlIGZyb20gbW9kdWxlcwogICBtNF9pZnZhbChnbF9MSUJTT1VSQ0VTX0xJ U1QsIFsKICAgICBtNF9zeXNjbWQoW3Rlc3QgISAtZCBdbTRfZGVmbihbZ2xfTElCU09VUkNF U19ESVJdKVsgfHwKQEAgLTUyNyw2ICs2MTgsNyBAQAogICBsaWIvYWxsb2NhLmluLmgKICAg bGliL2FsbG9jYXRvci5jCiAgIGxpYi9hbGxvY2F0b3IuaAorICBsaWIvYXQtZnVuYy5jCiAg IGxpYi9jLWN0eXBlLmMKICAgbGliL2MtY3R5cGUuaAogICBsaWIvYy1zdHJjYXNlLmgKQEAg LTUzOCwxMiArNjMwLDE2IEBACiAgIGxpYi9kdG9hc3RyLmMKICAgbGliL2R0b3RpbWVzcGVj LmMKICAgbGliL2R1cDIuYworICBsaWIvZXVpZGFjY2Vzcy5jCiAgIGxpYi9leGVjaW5mby5j CiAgIGxpYi9leGVjaW5mby5pbi5oCisgIGxpYi9mYWNjZXNzYXQuYworICBsaWIvZmNudGwu aW4uaAogICBsaWIvZmlsZW1vZGUuYwogICBsaWIvZmlsZW1vZGUuaAogICBsaWIvZnRvYXN0 ci5jCiAgIGxpYi9mdG9hc3RyLmgKKyAgbGliL2dldGdyb3Vwcy5jCiAgIGxpYi9nZXRsb2Fk YXZnLmMKICAgbGliL2dldG9wdC5jCiAgIGxpYi9nZXRvcHQuaW4uaApAQCAtNTUyLDYgKzY0 OCw3IEBACiAgIGxpYi9nZXR0ZXh0LmgKICAgbGliL2dldHRpbWUuYwogICBsaWIvZ2V0dGlt ZW9mZGF5LmMKKyAgbGliL2dyb3VwLW1lbWJlci5jCiAgIGxpYi9pZ25vcmUtdmFsdWUuaAog ICBsaWIvaW50cHJvcHMuaAogICBsaWIvaW50dHlwZXMuaW4uaApAQCAtNTY0LDYgKzY2MSw3 IEBACiAgIGxpYi9wc2VsZWN0LmMKICAgbGliL3B0aHJlYWRfc2lnbWFzay5jCiAgIGxpYi9y ZWFkbGluay5jCisgIGxpYi9yb290LXVpZC5oCiAgIGxpYi9zaGExLmMKICAgbGliL3NoYTEu aAogICBsaWIvc2hhMjU2LmMKQEAgLTYwNSwyMSArNzAzLDI4IEBACiAgIGxpYi91dGltZW5z LmMKICAgbGliL3V0aW1lbnMuaAogICBsaWIvdmVyaWZ5LmgKKyAgbGliL3hhbGxvYy1vdmVy c2l6ZWQuaAogICBtNC8wMGdudWxpYi5tNAogICBtNC9hbGxvY2EubTQKICAgbTQvYy1zdHJ0 b2QubTQKICAgbTQvY2xvY2tfdGltZS5tNAogICBtNC9kdXAyLm00CiAgIG00L2Vudmlyb24u bTQKKyAgbTQvZXVpZGFjY2Vzcy5tNAogICBtNC9leGVjaW5mby5tNAogICBtNC9leHRlbnNp b25zLm00CiAgIG00L2V4dGVybi1pbmxpbmUubTQKKyAgbTQvZmFjY2Vzc2F0Lm00CisgIG00 L2ZjbnRsLW8ubTQKKyAgbTQvZmNudGxfaC5tNAogICBtNC9maWxlbW9kZS5tNAorICBtNC9n ZXRncm91cHMubTQKICAgbTQvZ2V0bG9hZGF2Zy5tNAogICBtNC9nZXRvcHQubTQKICAgbTQv Z2V0dGltZS5tNAogICBtNC9nZXR0aW1lb2ZkYXkubTQKICAgbTQvZ251bGliLWNvbW1vbi5t NAorICBtNC9ncm91cC1tZW1iZXIubTQKICAgbTQvaW5jbHVkZV9uZXh0Lm00CiAgIG00L2lu dHR5cGVzLm00CiAgIG00L2xhcmdlZmlsZS5tNAoKPT09IGFkZGVkIGZpbGUgJ200L2dyb3Vw LW1lbWJlci5tNCcKLS0tIG00L2dyb3VwLW1lbWJlci5tNAkxOTcwLTAxLTAxIDAwOjAwOjAw ICswMDAwCisrKyBtNC9ncm91cC1tZW1iZXIubTQJMjAxMi0xMC0xMiAyMzoyODozMSArMDAw MApAQCAtMCwwICsxLDI5IEBACisjIHNlcmlhbCAxNAorCisjIENvcHlyaWdodCAoQykgMTk5 OS0yMDAxLCAyMDAzLTIwMDcsIDIwMDktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s IEluYy4KKworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFu ZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywg YXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBXcml0dGVuIGJ5 IEppbSBNZXllcmluZworCitBQ19ERUZVTihbZ2xfRlVOQ19HUk9VUF9NRU1CRVJdLAorWwor ICBBQ19SRVFVSVJFKFtnbF9VTklTVERfSF9ERUZBVUxUU10pCisKKyAgZG5sIFBlcnN1YWRl IGdsaWJjIDx1bmlzdGQuaD4gdG8gZGVjbGFyZSBncm91cF9tZW1iZXIoKS4KKyAgQUNfUkVR VUlSRShbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSkKKworICBkbmwgRG8gdGhpcyByZXBs YWNlbWVudCBjaGVjayBtYW51YWxseSBiZWNhdXNlIEkgd2FudCB0aGUgaHlwaGVuCisgIGRu bCAobm90IHRoZSB1bmRlcnNjb3JlKSBpbiB0aGUgZmlsZW5hbWUuCisgIEFDX0NIRUNLX0ZV TkMoW2dyb3VwX21lbWJlcl0sICwgWworICAgIEhBVkVfR1JPVVBfTUVNQkVSPTAKKyAgXSkK K10pCisKKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvZ3JvdXAtbWVtYmVyLmMuCitBQ19ERUZV TihbZ2xfUFJFUkVRX0dST1VQX01FTUJFUl0sCitbCisgIEFDX1JFUVVJUkUoW0FDX0ZVTkNf R0VUR1JPVVBTXSkKK10pCgo9PT0gbW9kaWZpZWQgZmlsZSAnbnQvQ2hhbmdlTG9nJwotLS0g bnQvQ2hhbmdlTG9nCTIwMTItMTAtMDggMTQ6MTQ6MjIgKzAwMDAKKysrIG50L0NoYW5nZUxv ZwkyMDEyLTEwLTE1IDA2OjA1OjQ2ICswMDAwCkBAIC0xLDMgKzEsMTAgQEAKKzIwMTItMTAt MTUgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJVXNlIGZhY2Nlc3Nh dCwgbm90IGFjY2Vzcywgd2hlbiBjaGVja2luZyBmaWxlIHBlcm1pc3Npb25zIChCdWcjMTI2 MzIpLgorCSogaW5jL21zLXczMi5oIChBVF9GRENXRCwgQVRfRUFDQ0VTUyk6IE5ldyBzeW1i b2xzLgorCShhY2Nlc3MpOiBSZW1vdmUuCisJKGZhY2Nlc3NhdCk6IE5ldyBtYWNyby4KKwog MjAxMi0xMC0wOCAgSnVhbm1hIEJhcnJhbnF1ZXJvICA8bGVra3R1QGdtYWlsLmNvbT4KIAog CSogY29uZmlnLm50OiBTeW5jIHdpdGggYXV0b2dlbi9jb25maWcuaW4uCgo9PT0gbW9kaWZp ZWQgZmlsZSAnbnQvaW5jL21zLXczMi5oJwotLS0gbnQvaW5jL21zLXczMi5oCTIwMTItMDkt MzAgMjE6MzY6NDIgKzAwMDAKKysrIG50L2luYy9tcy13MzIuaAkyMDEyLTEwLTE1IDA2OjA1 OjQ2ICswMDAwCkBAIC0xMzksNiArMTM5LDEwIEBACiAjZGVmaW5lIE1BWFBBVEhMRU4gICAg ICBfTUFYX1BBVEgKICNlbmRpZgogCisvKiBVc2UgdmFsdWVzIGNvbXBhdGlibGUgd2l0aCBn bnVsaWIsIGFzIHRoZXJlJ3Mgbm8gcmVhc29uIHRvIGRpZmZlci4gICovCisjZGVmaW5lIEFU X0ZEQ1dEICgtMzA0MTk2NSkKKyNkZWZpbmUgQVRfRUFDQ0VTUyA0CisKICNpZmRlZiBIQVZF X05UR1VJCiAjZGVmaW5lIEhBVkVfV0lORE9XX1NZU1RFTSAxCiAjZGVmaW5lIEhBVkVfTUVO VVMgMQpAQCAtMTYwLDggKzE2NCw2IEBACiAjZW5kaWYKIAogLyogQ2FsbHMgdGhhdCBhcmUg ZW11bGF0ZWQgb3Igc2hhZG93ZWQuICAqLwotI3VuZGVmIGFjY2VzcwotI2RlZmluZSBhY2Nl c3MgIHN5c19hY2Nlc3MKICN1bmRlZiBjaGRpcgogI2RlZmluZSBjaGRpciAgIHN5c19jaGRp cgogI3VuZGVmIGNobW9kCkBAIC0xNzYsNiArMTc4LDcgQEAKICNkZWZpbmUgZHVwICAgICBz eXNfZHVwCiAjdW5kZWYgZHVwMgogI2RlZmluZSBkdXAyICAgIHN5c19kdXAyCisjZGVmaW5l IGZhY2Nlc3NhdCAgc3lzX2ZhY2Nlc3NhdAogI2RlZmluZSBmb3BlbiAgIHN5c19mb3Blbgog I2RlZmluZSBsaW5rICAgIHN5c19saW5rCiAjZGVmaW5lIGxvY2FsdGltZSBzeXNfbG9jYWx0 aW1lCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL0NoYW5nZUxvZycKLS0tIHNyYy9DaGFuZ2VM b2cJMjAxMi0xMC0xNSAwMTozODowNyArMDAwMAorKysgc3JjL0NoYW5nZUxvZwkyMDEyLTEw LTE1IDA2OjA3OjA1ICswMDAwCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTItMTAtMTUgIFBhdWwg RWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJVXNlIGZhY2Nlc3NhdCwgbm90IGFj Y2Vzcywgd2hlbiBjaGVja2luZyBmaWxlIHBlcm1pc3Npb25zIChCdWcjMTI2MzIpLgorCSog TWFrZWZpbGUuaW4gKExJQl9FQUNDRVNTKTogTmV3IG1hY3JvLgorCShMSUJFUyk6IFVzZSBp dC4KKwkqIGNhbGxwcm9jLmMgKGluaXRfY2FsbHByb2MpOgorCSogY2hhcnNldC5jIChpbml0 X2NoYXJzZXQpOgorCSogZmlsZWlvLmMgKGNoZWNrX2V4aXN0aW5nLCBjaGVja19leGVjdXRh YmxlKToKKwkqIGxyZWFkLmMgKG9wZW5wLCBsb2FkX3BhdGhfY2hlY2spOgorCSogcHJvY2Vz cy5jIChhbGxvY2F0ZV9wdHkpOgorCSogeHJkYi5jIChmaWxlX3ApOgorCVVzZSBmYWNjZXNz YXQsIG5vdCBhY2Nlc3Mgb3IgZXVpZGFjY2Vzcy4gIFVzZSBzeW1ib2xpYyBuYW1lcworCWlu c3RlYWQgb2YgaW50ZWdlcnMgZm9yIHRoZSBmbGFncywgYXMgdGhleSdyZSBwb3J0YWJsZSBu b3cuCisJKiBjaGFyc2V0LmMsIHhyZGIuYzogSW5jbHVkZSA8ZmNudGwuaD4sIGZvciB0aGUg bmV3IGZsYWdzIHVzZWQuCisJKiBmaWxlaW8uYyAoRmZpbGVfcmVhZGFibGVfcCk6CisJVXNl IGZhY2Nlc3NhdCwgbm90IHN0YXQgKyBvcGVuICsgY2xvc2UuCisJKGZpbGVfZGlyZWN0b3J5 X3ApOiBOZXcgZnVuY3Rpb24sIHdoaWNoIHVzZXMgJ3N0YXQnIG9uIG1vc3QgcGxhY2VzCisJ YnV0ICdhY2Nlc3MnIChmb3IgZWZmaWNpZW5jeSkgaWYgV0lORE9XU05ULgorCSogZmlsZWlv LmMgKEZmaWxlX2RpcmVjdG9yeV9wLCBGc2V0X2ZpbGVfdGltZXMpOgorCSogeHJkYi5jIChm aWxlX3ApOiBVc2UgZmlsZV9kaXJlY3RvcnlfcC4KKwkqIGxpc3AuaCAoZmlsZV9kaXJlY3Rv cnlfcCk6IE5ldyBkZWNsLgorCSogbHJlYWQuYyAob3BlbnApOiBXaGVuIG9wZW5pbmcgYSBm aWxlLCB1c2UgZnN0YXQgcmF0aGVyIHRoYW4KKwlzdGF0LCBhcyB0aGF0IGF2b2lkcyBhIHBl cm1pc3Npb25zIHJhY2UuICBXaGVuIG5vdCBvcGVuaW5nIGEgZmlsZSwKKwl1c2UgZmlsZV9k aXJlY3RvcnlfcCByYXRoZXIgdGhhbiBzdGF0LgorCSogdzMyLmMgKHN5c19mYWNjZXNzYXQp OiBSZW5hbWUgZnJvbSBzeXNfYWNjZXNzIGFuZCBzd2l0Y2ggdG8KKwlmYWNjZXNzYXQncyBB UEkuCisKIDIwMTItMTAtMTUgIERhbmllbCBDb2xhc2Npb25lICA8ZGFuY29sQGRhbmNvbC5v cmc+CiAKIAkqIGRidXNiaW5kLmM6IEZpeCBjeWd3MzIgYnVpbGQgYnJlYWsgd2hlbiBjb21w aWxpbmcgd2l0aCBkYnVzCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL01ha2VmaWxlLmluJwot LS0gc3JjL01ha2VmaWxlLmluCTIwMTItMTAtMDggMTI6NTM6MTggKzAwMDAKKysrIHNyYy9N YWtlZmlsZS5pbgkyMDEyLTEwLTEzIDAxOjQ5OjQxICswMDAwCkBAIC0xNTAsNiArMTUwLDcg QEAKIE0xN05fRkxUX0xJQlMgPSBATTE3Tl9GTFRfTElCU0AKIAogTElCX0NMT0NLX0dFVFRJ TUU9QExJQl9DTE9DS19HRVRUSU1FQAorTElCX0VBQ0NFU1M9QExJQl9FQUNDRVNTQAogTElC X1RJTUVSX1RJTUU9QExJQl9USU1FUl9USU1FQAogCiBEQlVTX0NGTEFHUyA9IEBEQlVTX0NG TEFHU0AKQEAgLTM5Miw3ICszOTMsNyBAQAogTElCRVMgPSAkKExJQlMpICQoVzMyX0xJQlMp ICQoTElCWF9CQVNFKSAkKExJQklNQUdFKSBcCiAgICAkKExJQlhfT1RIRVIpICQoTElCU09V TkQpIFwKICAgICQoUlNWR19MSUJTKSAkKElNQUdFTUFHSUNLX0xJQlMpICQoTElCX0NMT0NL X0dFVFRJTUUpIFwKLSAgICQoTElCX1RJTUVSX1RJTUUpICQoREJVU19MSUJTKSBcCisgICAk KExJQl9FQUNDRVNTKSAkKExJQl9USU1FUl9USU1FKSAkKERCVVNfTElCUykgXAogICAgJChM SUJfRVhFQ0lORk8pIFwKICAgICQoTElCWE1MMl9MSUJTKSAkKExJQkdQTSkgJChMSUJSRVNP TFYpICQoTElCU19TWVNURU0pIFwKICAgICQoTElCU19URVJNQ0FQKSAkKEdFVExPQURBVkdf TElCUykgJChTRVRUSU5HU19MSUJTKSAkKExJQlNFTElOVVhfTElCUykgXAoKPT09IG1vZGlm aWVkIGZpbGUgJ3NyYy9jYWxscHJvYy5jJwotLS0gc3JjL2NhbGxwcm9jLmMJMjAxMi0wOS0y MyAyMjoyNToyMiArMDAwMAorKysgc3JjL2NhbGxwcm9jLmMJMjAxMi0xMC0xNSAwNjowNTo0 NiArMDAwMApAQCAtMTU5NywxMyArMTU5NywxMyBAQAogI2VuZGlmCiAgICAgewogICAgICAg dGVtcGRpciA9IEZkaXJlY3RvcnlfZmlsZV9uYW1lIChWZXhlY19kaXJlY3RvcnkpOwotICAg ICAgaWYgKGFjY2VzcyAoU1NEQVRBICh0ZW1wZGlyKSwgMCkgPCAwKQorICAgICAgaWYgKGZh Y2Nlc3NhdCAoQVRfRkRDV0QsIFNTREFUQSAodGVtcGRpciksIEZfT0ssIEFUX0VBQ0NFU1Mp ICE9IDApCiAJZGlyX3dhcm5pbmcgKCJXYXJuaW5nOiBhcmNoLWRlcGVuZGVudCBkYXRhIGRp ciAoJXMpIGRvZXMgbm90IGV4aXN0LlxuIiwKIAkJICAgICBWZXhlY19kaXJlY3RvcnkpOwog ICAgIH0KIAogICB0ZW1wZGlyID0gRmRpcmVjdG9yeV9maWxlX25hbWUgKFZkYXRhX2RpcmVj dG9yeSk7Ci0gIGlmIChhY2Nlc3MgKFNTREFUQSAodGVtcGRpciksIDApIDwgMCkKKyAgaWYg KGZhY2Nlc3NhdCAoQVRfRkRDV0QsIFNTREFUQSAodGVtcGRpciksIEZfT0ssIEFUX0VBQ0NF U1MpICE9IDApCiAgICAgZGlyX3dhcm5pbmcgKCJXYXJuaW5nOiBhcmNoLWluZGVwZW5kZW50 IGRhdGEgZGlyICglcykgZG9lcyBub3QgZXhpc3QuXG4iLAogCQkgVmRhdGFfZGlyZWN0b3J5 KTsKIAoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9jaGFyc2V0LmMnCi0tLSBzcmMvY2hhcnNl dC5jCTIwMTItMTAtMDEgMDY6MzY6NTQgKzAwMDAKKysrIHNyYy9jaGFyc2V0LmMJMjAxMi0x MC0xNSAwNjowNTo0NiArMDAwMApAQCAtMjgsNiArMjgsNyBAQAogCiAjZGVmaW5lIENIQVJT RVRfSU5MSU5FIEVYVEVSTl9JTkxJTkUKIAorI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVk ZSA8c3RkaW8uaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxsaW1pdHMuaD4K QEAgLTIyOTMsNyArMjI5NCw3IEBACiB7CiAgIExpc3BfT2JqZWN0IHRlbXBkaXI7CiAgIHRl bXBkaXIgPSBGZXhwYW5kX2ZpbGVfbmFtZSAoYnVpbGRfc3RyaW5nICgiY2hhcnNldHMiKSwg VmRhdGFfZGlyZWN0b3J5KTsKLSAgaWYgKGFjY2VzcyAoU1NEQVRBICh0ZW1wZGlyKSwgMCkg PCAwKQorICBpZiAoZmFjY2Vzc2F0IChBVF9GRENXRCwgU1NEQVRBICh0ZW1wZGlyKSwgRl9P SywgQVRfRUFDQ0VTUykgIT0gMCkKICAgICB7CiAgICAgICAvKiBUaGlzIHVzZWQgdG8gYmUg bm9uLWZhdGFsIChkaXJfd2FybmluZyksIGJ1dCBpdCBzaG91bGQgbm90CiAgICAgICAgICBo YXBwZW4sIGFuZCBpZiBpdCBkb2VzIHNvb25lciBvciBsYXRlciBpdCB3aWxsIGNhdXNlIHNv bWUKCj09PSBtb2RpZmllZCBmaWxlICdzcmMvY29uZl9wb3N0LmgnCi0tLSBzcmMvY29uZl9w b3N0LmgJMjAxMi0xMC0wOCAyMjoxNDozOSArMDAwMAorKysgc3JjL2NvbmZfcG9zdC5oCTIw MTItMTAtMTUgMDY6MDU6NDYgKzAwMDAKQEAgLTE2OSw2ICsxNjksMTAgQEAKICNlbmRpZgog I2VuZGlmCiAKKy8qIFRlbGwgZ251bGliIHRvIG9taXQgc3VwcG9ydCBmb3Igb3BlbmF0LXJl bGF0ZWQgZnVuY3Rpb25zIGhhdmluZyBhCisgICBmaXJzdCBhcmd1bWVudCBvdGhlciB0aGFu IEFUX0ZEQ1dELiAgKi8KKyNkZWZpbmUgR05VTElCX1NVUFBPUlRfT05MWV9BVF9GRENXRAor CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAKCj09PSBtb2Rp ZmllZCBmaWxlICdzcmMvZmlsZWlvLmMnCi0tLSBzcmMvZmlsZWlvLmMJMjAxMi0xMC0xMyAw ODo1NToyNiArMDAwMAorKysgc3JjL2ZpbGVpby5jCTIwMTItMTAtMTUgMDY6MDU6NDYgKzAw MDAKQEAgLTI0MjQsMTUgKzI0MjQsNyBAQAogYm9vbAogY2hlY2tfZXhpc3RpbmcgKGNvbnN0 IGNoYXIgKmZpbGVuYW1lKQogewotI2lmZGVmIERPU19OVAotICAvKiBUaGUgZnVsbCBlbXVs YXRpb24gb2YgUG9zaXggJ3N0YXQnIGlzIHRvbyBleHBlbnNpdmUgb24KLSAgICAgRE9TL1dp bmRvd3MsIHdoZW4gYWxsIHdlIHdhbnQgdG8ga25vdyBpcyB3aGV0aGVyIHRoZSBmaWxlIGV4 aXN0cy4KLSAgICAgU28gd2UgdXNlICdhY2Nlc3MnIGluc3RlYWQsIHdoaWNoIGlzIG11Y2gg bW9yZSBsaWdodHdlaWdodC4gICovCi0gIHJldHVybiAoYWNjZXNzIChmaWxlbmFtZSwgRl9P SykgPj0gMCk7Ci0jZWxzZQotICBzdHJ1Y3Qgc3RhdCBzdDsKLSAgcmV0dXJuIChzdGF0IChm aWxlbmFtZSwgJnN0KSA+PSAwKTsKLSNlbmRpZgorICByZXR1cm4gZmFjY2Vzc2F0IChBVF9G RENXRCwgZmlsZW5hbWUsIEZfT0ssIEFUX0VBQ0NFU1MpID09IDA7CiB9CiAKIC8qIFJldHVy biB0cnVlIGlmIGZpbGUgRklMRU5BTUUgZXhpc3RzIGFuZCBjYW4gYmUgZXhlY3V0ZWQuICAq LwpAQCAtMjQ0MCwyMSArMjQzMiw3IEBACiBzdGF0aWMgYm9vbAogY2hlY2tfZXhlY3V0YWJs ZSAoY2hhciAqZmlsZW5hbWUpCiB7Ci0jaWZkZWYgRE9TX05UCi0gIHN0cnVjdCBzdGF0IHN0 OwotICBpZiAoc3RhdCAoZmlsZW5hbWUsICZzdCkgPCAwKQotICAgIHJldHVybiAwOwotICBy ZXR1cm4gKChzdC5zdF9tb2RlICYgU19JRVhFQykgIT0gMCk7Ci0jZWxzZSAvKiBub3QgRE9T X05UICovCi0jaWZkZWYgSEFWRV9FVUlEQUNDRVNTCi0gIHJldHVybiAoZXVpZGFjY2VzcyAo ZmlsZW5hbWUsIDEpID49IDApOwotI2Vsc2UKLSAgLyogQWNjZXNzIGlzbid0IHF1aXRlIHJp Z2h0IGJlY2F1c2UgaXQgdXNlcyB0aGUgcmVhbCB1aWQKLSAgICAgYW5kIHdlIHJlYWxseSB3 YW50IHRvIHRlc3Qgd2l0aCB0aGUgZWZmZWN0aXZlIHVpZC4KLSAgICAgQnV0IFVuaXggZG9l c24ndCBnaXZlIHVzIGEgcmlnaHQgd2F5IHRvIGRvIGl0LiAgKi8KLSAgcmV0dXJuIChhY2Nl c3MgKGZpbGVuYW1lLCAxKSA+PSAwKTsKLSNlbmRpZgotI2VuZGlmIC8qIG5vdCBET1NfTlQg Ki8KKyAgcmV0dXJuIGZhY2Nlc3NhdCAoQVRfRkRDV0QsIGZpbGVuYW1lLCBYX09LLCBBVF9F QUNDRVNTKSA9PSAwOwogfQogCiAvKiBSZXR1cm4gdHJ1ZSBpZiBmaWxlIEZJTEVOQU1FIGV4 aXN0cyBhbmQgY2FuIGJlIHdyaXR0ZW4uICAqLwpAQCAtMjQ2MywxNSArMjQ0MSwxNiBAQAog Y2hlY2tfd3JpdGFibGUgKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogewogI2lmZGVmIE1TRE9T CisgIC8qIEZJWE1FOiBhbiBmYWNjZXNzYXQgaW1wbGVtZW50YXRpb24gc2hvdWxkIGJlIGFk ZGVkIHRvIHRoZQorICAgICBET1MvV2luZG93cyBwb3J0cyBhbmQgdGhpcyAjaWZkZWYgYnJh bmNoIHNob3VsZCBiZSByZW1vdmVkLiAgKi8KICAgc3RydWN0IHN0YXQgc3Q7CiAgIGlmIChz dGF0IChmaWxlbmFtZSwgJnN0KSA8IDApCiAgICAgcmV0dXJuIDA7CiAgIHJldHVybiAoc3Qu c3RfbW9kZSAmIFNfSVdSSVRFIHx8IFNfSVNESVIgKHN0LnN0X21vZGUpKTsKICNlbHNlIC8q IG5vdCBNU0RPUyAqLwotI2lmZGVmIEhBVkVfRVVJREFDQ0VTUwotICBib29sIHJlcyA9IChl dWlkYWNjZXNzIChmaWxlbmFtZSwgMikgPj0gMCk7CisgIGJvb2wgcmVzID0gZmFjY2Vzc2F0 IChBVF9GRENXRCwgZmlsZW5hbWUsIFdfT0ssIEFUX0VBQ0NFU1MpID09IDA7CiAjaWZkZWYg Q1lHV0lOCi0gIC8qIGV1aWRhY2Nlc3MgbWF5IGhhdmUgcmV0dXJuZWQgZmFpbHVyZSBiZWNh dXNlIEN5Z3dpbiBjb3VsZG4ndAorICAvKiBmYWNjZXNzYXQgbWF5IGhhdmUgcmV0dXJuZWQg ZmFpbHVyZSBiZWNhdXNlIEN5Z3dpbiBjb3VsZG4ndAogICAgICBkZXRlcm1pbmUgdGhlIGZp bGUncyBVSUQgb3IgR0lEOyBpZiBzbywgd2UgcmV0dXJuIHN1Y2Nlc3MuICovCiAgIGlmICgh cmVzKQogICAgIHsKQEAgLTI0ODIsMTQgKzI0NjEsNiBAQAogICAgIH0KICNlbmRpZiAvKiBD WUdXSU4gKi8KICAgcmV0dXJuIHJlczsKLSNlbHNlIC8qIG5vdCBIQVZFX0VVSURBQ0NFU1Mg Ki8KLSAgLyogQWNjZXNzIGlzbid0IHF1aXRlIHJpZ2h0IGJlY2F1c2UgaXQgdXNlcyB0aGUg cmVhbCB1aWQKLSAgICAgYW5kIHdlIHJlYWxseSB3YW50IHRvIHRlc3Qgd2l0aCB0aGUgZWZm ZWN0aXZlIHVpZC4KLSAgICAgQnV0IFVuaXggZG9lc24ndCBnaXZlIHVzIGEgcmlnaHQgd2F5 IHRvIGRvIGl0LgotICAgICBPcGVuaW5nIHdpdGggT19XUk9OTFkgY291bGQgd29yayBmb3Ig YW4gb3JkaW5hcnkgZmlsZSwKLSAgICAgYnV0IHdvdWxkIGxvc2UgZm9yIGRpcmVjdG9yaWVz LiAgKi8KLSAgcmV0dXJuIChhY2Nlc3MgKGZpbGVuYW1lLCAyKSA+PSAwKTsKLSNlbmRpZiAv KiBub3QgSEFWRV9FVUlEQUNDRVNTICovCiAjZW5kaWYgLyogbm90IE1TRE9TICovCiB9CiAK QEAgLTI1NDYsOSArMjUxNyw2IEBACiB7CiAgIExpc3BfT2JqZWN0IGFic25hbWU7CiAgIExp c3BfT2JqZWN0IGhhbmRsZXI7Ci0gIGludCBkZXNjOwotICBpbnQgZmxhZ3M7Ci0gIHN0cnVj dCBzdGF0IHN0YXRidWY7CiAKICAgQ0hFQ0tfU1RSSU5HIChmaWxlbmFtZSk7CiAgIGFic25h bWUgPSBGZXhwYW5kX2ZpbGVfbmFtZSAoZmlsZW5hbWUsIFFuaWwpOwpAQCAtMjU2MCwzMSAr MjUyOCw4IEBACiAgICAgcmV0dXJuIGNhbGwyIChoYW5kbGVyLCBRZmlsZV9yZWFkYWJsZV9w LCBhYnNuYW1lKTsKIAogICBhYnNuYW1lID0gRU5DT0RFX0ZJTEUgKGFic25hbWUpOwotCi0j aWYgZGVmaW5lZCAoRE9TX05UKSB8fCBkZWZpbmVkIChtYWNpbnRvc2gpCi0gIC8qIFVuZGVy IE1TLURPUywgV2luZG93cywgYW5kIE1hY2ludG9zaCwgb3BlbiBkb2VzIG5vdCB3b3JrIGZv cgotICAgICBkaXJlY3Rvcmllcy4gICovCi0gIGlmIChhY2Nlc3MgKFNEQVRBIChhYnNuYW1l KSwgMCkgPT0gMCkKLSAgICByZXR1cm4gUXQ7Ci0gIHJldHVybiBRbmlsOwotI2Vsc2UgLyog bm90IERPU19OVCBhbmQgbm90IG1hY2ludG9zaCAqLwotICBmbGFncyA9IE9fUkRPTkxZOwot I2lmZGVmIE9fTk9OQkxPQ0sKLSAgLyogT3BlbmluZyBhIGZpZm8gd2l0aG91dCBPX05PTkJM T0NLIGNhbiB3YWl0LgotICAgICBXZSBkb24ndCB3YW50IHRvIHdhaXQuICBCdXQgd2UgZG9u J3Qgd2FudCB0byBtZXNzIHd0aCBPX05PTkJMT0NLCi0gICAgIGV4Y2VwdCBpbiB0aGUgY2Fz ZSBvZiBhIGZpZm8sIG9uIGEgc3lzdGVtIHdoaWNoIGhhbmRsZXMgaXQuICAqLwotICBkZXNj ID0gc3RhdCAoU1NEQVRBIChhYnNuYW1lKSwgJnN0YXRidWYpOwotICBpZiAoZGVzYyA8IDAp Ci0gICAgcmV0dXJuIFFuaWw7Ci0gIGlmIChTX0lTRklGTyAoc3RhdGJ1Zi5zdF9tb2RlKSkK LSAgICBmbGFncyB8PSBPX05PTkJMT0NLOwotI2VuZGlmCi0gIGRlc2MgPSBlbWFjc19vcGVu IChTU0RBVEEgKGFic25hbWUpLCBmbGFncywgMCk7Ci0gIGlmIChkZXNjIDwgMCkKLSAgICBy ZXR1cm4gUW5pbDsKLSAgZW1hY3NfY2xvc2UgKGRlc2MpOwotICByZXR1cm4gUXQ7Ci0jZW5k aWYgLyogbm90IERPU19OVCBhbmQgbm90IG1hY2ludG9zaCAqLworICByZXR1cm4gKGZhY2Nl c3NhdCAoQVRfRkRDV0QsIFNTREFUQSAoYWJzbmFtZSksIFJfT0ssIEFUX0VBQ0NFU1MpID09 IDAKKwkgID8gUXQgOiBRbmlsKTsKIH0KIAogLyogSGF2aW5nIHRoaXMgYmVmb3JlIGZpbGUt c3ltbGluay1wIG15c3RlcmlvdXNseSBjYXVzZWQgaXQgdG8gYmUgZm9yZ290dGVuCkBAIC0y NjIxLDcgKzI1NjYsNyBAQAogICAvKiBUaGUgcmVhZC1vbmx5IGF0dHJpYnV0ZSBvZiB0aGUg cGFyZW50IGRpcmVjdG9yeSBkb2Vzbid0IGFmZmVjdAogICAgICB3aGV0aGVyIGEgZmlsZSBv ciBkaXJlY3RvcnkgY2FuIGJlIGNyZWF0ZWQgd2l0aGluIGl0LiAgU29tZSBkYXkgd2UKICAg ICAgc2hvdWxkIGNoZWNrIEFDTHMgdGhvdWdoLCB3aGljaCBkbyBhZmZlY3QgdGhpcy4gICov Ci0gIHJldHVybiAoYWNjZXNzIChTREFUQSAoZGlyKSwgRF9PSykgPCAwKSA/IFFuaWwgOiBR dDsKKyAgcmV0dXJuIGZpbGVfZGlyZWN0b3J5X3AgKFNEQVRBIChkaXIpKSA/IFF0IDogUW5p bDsKICNlbHNlCiAgIHJldHVybiAoY2hlY2tfd3JpdGFibGUgKCFOSUxQIChkaXIpID8gU1NE QVRBIChkaXIpIDogIiIpCiAJICA/IFF0IDogUW5pbCk7CkBAIC0yNzAyLDggKzI2NDcsNyBA QAogU2VlIGBmaWxlLXN5bWxpbmstcCcgdG8gZGlzdGluZ3Vpc2ggc3ltbGlua3MuICAqLykK ICAgKExpc3BfT2JqZWN0IGZpbGVuYW1lKQogewotICByZWdpc3RlciBMaXNwX09iamVjdCBh YnNuYW1lOwotICBzdHJ1Y3Qgc3RhdCBzdDsKKyAgTGlzcF9PYmplY3QgYWJzbmFtZTsKICAg TGlzcF9PYmplY3QgaGFuZGxlcjsKIAogICBhYnNuYW1lID0gZXhwYW5kX2FuZF9kaXJfdG9f ZmlsZSAoZmlsZW5hbWUsIEJWQVIgKGN1cnJlbnRfYnVmZmVyLCBkaXJlY3RvcnkpKTsKQEAg LTI3MTYsOSArMjY2MCwyMCBAQAogCiAgIGFic25hbWUgPSBFTkNPREVfRklMRSAoYWJzbmFt ZSk7CiAKLSAgaWYgKHN0YXQgKFNTREFUQSAoYWJzbmFtZSksICZzdCkgPCAwKQotICAgIHJl dHVybiBRbmlsOwotICByZXR1cm4gU19JU0RJUiAoc3Quc3RfbW9kZSkgPyBRdCA6IFFuaWw7 CisgIHJldHVybiBmaWxlX2RpcmVjdG9yeV9wIChTU0RBVEEgKGFic25hbWUpKSA/IFF0IDog UW5pbDsKK30KKworLyogUmV0dXJuIHRydWUgaWYgRklMRSBpcyBhIGRpcmVjdG9yeSBvciBh IHN5bWxpbmsgdG8gYSBkaXJlY3RvcnkuICAqLworYm9vbAorZmlsZV9kaXJlY3RvcnlfcCAo Y2hhciBjb25zdCAqZmlsZSkKK3sKKyNpZmRlZiBXSU5ET1dTTlQKKyAgLyogVGhpcyBpcyBj aGVhcGVyIHRoYW4gJ3N0YXQnLiAgKi8KKyAgcmV0dXJuIGZhY2Nlc3NhdCAoQVRfRkRDV0Qs IGZpbGUsIERfT0ssIEFUX0VBQ0NFU1MpID09IDA7CisjZWxzZQorICBzdHJ1Y3Qgc3RhdCBz dDsKKyAgcmV0dXJuIHN0YXQgKGZpbGUsICZzdCkgPT0gMCAmJiBTX0lTRElSIChzdC5zdF9t b2RlKTsKKyNlbmRpZgogfQogCiBERUZVTiAoImZpbGUtYWNjZXNzaWJsZS1kaXJlY3Rvcnkt cCIsIEZmaWxlX2FjY2Vzc2libGVfZGlyZWN0b3J5X3AsCkBAIC0zMDQzLDEwICsyOTk4LDgg QEAKICAgICBpZiAoc2V0X2ZpbGVfdGltZXMgKC0xLCBTU0RBVEEgKGVuY29kZWRfYWJzbmFt ZSksIHQsIHQpKQogICAgICAgewogI2lmZGVmIE1TRE9TCi0gICAgICAgIHN0cnVjdCBzdGF0 IHN0OwotCiAgICAgICAgIC8qIFNldHRpbmcgdGltZXMgb24gYSBkaXJlY3RvcnkgYWx3YXlz IGZhaWxzLiAgKi8KLSAgICAgICAgaWYgKHN0YXQgKFNTREFUQSAoZW5jb2RlZF9hYnNuYW1l KSwgJnN0KSA9PSAwICYmIFNfSVNESVIgKHN0LnN0X21vZGUpKQorICAgICAgICBpZiAoZmls ZV9kaXJlY3RvcnlfcCAoU1NEQVRBIChlbmNvZGVkX2Fic25hbWUpKSkKICAgICAgICAgICBy ZXR1cm4gUW5pbDsKICNlbmRpZgogICAgICAgICByZXBvcnRfZmlsZV9lcnJvciAoIlNldHRp bmcgZmlsZSB0aW1lcyIsIEZjb25zIChhYnNuYW1lLCBRbmlsKSk7Cgo9PT0gbW9kaWZpZWQg ZmlsZSAnc3JjL2xpc3AuaCcKLS0tIHNyYy9saXNwLmgJMjAxMi0xMC0xMiAxNToxOTo1NCAr MDAwMAorKysgc3JjL2xpc3AuaAkyMDEyLTEwLTE0IDA2OjAwOjQwICswMDAwCkBAIC0zMTc5 LDYgKzMxNzksNyBAQAogZXh0ZXJuIExpc3BfT2JqZWN0IHJlc3RvcmVfcG9pbnRfdW53aW5k IChMaXNwX09iamVjdCk7CiBleHRlcm4gX05vcmV0dXJuIHZvaWQgcmVwb3J0X2ZpbGVfZXJy b3IgKGNvbnN0IGNoYXIgKiwgTGlzcF9PYmplY3QpOwogZXh0ZXJuIHZvaWQgaW50ZXJuYWxf ZGVsZXRlX2ZpbGUgKExpc3BfT2JqZWN0KTsKK2V4dGVybiBib29sIGZpbGVfZGlyZWN0b3J5 X3AgKGNvbnN0IGNoYXIgKik7CiBleHRlcm4gdm9pZCBzeW1zX29mX2ZpbGVpbyAodm9pZCk7 CiBleHRlcm4gTGlzcF9PYmplY3QgbWFrZV90ZW1wX25hbWUgKExpc3BfT2JqZWN0LCBib29s KTsKIGV4dGVybiBMaXNwX09iamVjdCBRZGVsZXRlX2ZpbGU7Cgo9PT0gbW9kaWZpZWQgZmls ZSAnc3JjL2xyZWFkLmMnCi0tLSBzcmMvbHJlYWQuYwkyMDEyLTEwLTEyIDE1OjE5OjU0ICsw MDAwCisrKyBzcmMvbHJlYWQuYwkyMDEyLTEwLTE1IDA2OjA1OjQ2ICswMDAwCkBAIC0xNDA0 LDcgKzE0MDQsNyBAQAogSWYgU1VGRklYRVMgaXMgbm9uLW5pbCwgaXQgc2hvdWxkIGJlIGEg bGlzdCBvZiBzdWZmaXhlcyB0byBhcHBlbmQgdG8KIGZpbGUgbmFtZSB3aGVuIHNlYXJjaGlu Zy4KIElmIG5vbi1uaWwsIFBSRURJQ0FURSBpcyB1c2VkIGluc3RlYWQgb2YgYGZpbGUtcmVh ZGFibGUtcCcuCi1QUkVESUNBVEUgY2FuIGFsc28gYmUgYW4gaW50ZWdlciB0byBwYXNzIHRv IHRoZSBhY2Nlc3MoMikgZnVuY3Rpb24sCitQUkVESUNBVEUgY2FuIGFsc28gYmUgYW4gaW50 ZWdlciB0byBwYXNzIHRvIHRoZSBmYWNjZXNzYXQoMikgZnVuY3Rpb24sCiBpbiB3aGljaCBj YXNlIGZpbGUtbmFtZS1oYW5kbGVycyBhcmUgaWdub3JlZC4KIFRoaXMgZnVuY3Rpb24gd2ls bCBub3JtYWxseSBza2lwIGRpcmVjdG9yaWVzLCBzbyBpZiB5b3Ugd2FudCBpdCB0byBmaW5k CiBkaXJlY3RvcmllcywgbWFrZSBzdXJlIHRoZSBQUkVESUNBVEUgZnVuY3Rpb24gcmV0dXJu cyBgZGlyLW9rJyBmb3IgdGhlbS4gICovKQpAQCAtMTQ0Miw3ICsxNDQyLDYgQEAKIGludAog b3BlbnAgKExpc3BfT2JqZWN0IHBhdGgsIExpc3BfT2JqZWN0IHN0ciwgTGlzcF9PYmplY3Qg c3VmZml4ZXMsIExpc3BfT2JqZWN0ICpzdG9yZXB0ciwgTGlzcF9PYmplY3QgcHJlZGljYXRl KQogewotICBpbnQgZmQ7CiAgIHB0cmRpZmZfdCBmbl9zaXplID0gMTAwOwogICBjaGFyIGJ1 ZlsxMDBdOwogICBjaGFyICpmbiA9IGJ1ZjsKQEAgLTE0OTcsNyArMTQ5Niw2IEBACiAJewog CSAgcHRyZGlmZl90IGZubGVuLCBsc3VmZml4ID0gU0JZVEVTIChYQ0FSICh0YWlsKSk7CiAJ ICBMaXNwX09iamVjdCBoYW5kbGVyOwotCSAgYm9vbCBleGlzdHM7CiAKIAkgIC8qIENvbmNh dGVuYXRlIHBhdGggZWxlbWVudC9zcGVjaWZpZWQgbmFtZSB3aXRoIHRoZSBzdWZmaXguCiAJ ICAgICBJZiB0aGUgZGlyZWN0b3J5IHN0YXJ0cyB3aXRoIC86LCByZW1vdmUgdGhhdC4gICov CkBAIC0xNTIxLDYgKzE1MTksNyBAQAogCSAgaGFuZGxlciA9IEZmaW5kX2ZpbGVfbmFtZV9o YW5kbGVyIChzdHJpbmcsIFFmaWxlX2V4aXN0c19wKTsKIAkgIGlmICgoIU5JTFAgKGhhbmRs ZXIpIHx8ICFOSUxQIChwcmVkaWNhdGUpKSAmJiAhTkFUTlVNUCAocHJlZGljYXRlKSkKICAg ICAgICAgICAgIHsKKwkgICAgICBib29sIGV4aXN0czsKIAkgICAgICBpZiAoTklMUCAocHJl ZGljYXRlKSkKIAkJZXhpc3RzID0gIU5JTFAgKEZmaWxlX3JlYWRhYmxlX3AgKHN0cmluZykp OwogCSAgICAgIGVsc2UKQEAgLTE1NDIsMzcgKzE1NDEsNDAgQEAKIAkgICAgfQogCSAgZWxz ZQogCSAgICB7Ci0jaWZuZGVmIFdJTkRPV1NOVAotCSAgICAgIHN0cnVjdCBzdGF0IHN0Owot I2VuZGlmCisJICAgICAgaW50IGZkOwogCSAgICAgIGNvbnN0IGNoYXIgKnBmbjsKIAogCSAg ICAgIGVuY29kZWRfZm4gPSBFTkNPREVfRklMRSAoc3RyaW5nKTsKIAkgICAgICBwZm4gPSBT U0RBVEEgKGVuY29kZWRfZm4pOwotI2lmZGVmIFdJTkRPV1NOVAotCSAgICAgIGV4aXN0cyA9 IGFjY2VzcyAocGZuLCBGX09LKSA9PSAwICYmIGFjY2VzcyAocGZuLCBEX09LKSA8IDA7Ci0j ZWxzZQotCSAgICAgIGV4aXN0cyA9IChzdGF0IChwZm4sICZzdCkgPT0gMCAmJiAhIFNfSVNE SVIgKHN0LnN0X21vZGUpKTsKLSNlbmRpZgotCSAgICAgIGlmIChleGlzdHMpCisKKwkgICAg ICAvKiBDaGVjayB0aGF0IHdlIGNhbiBhY2Nlc3Mgb3Igb3BlbiBpdC4gICovCisJICAgICAg aWYgKE5BVE5VTVAgKHByZWRpY2F0ZSkpCisJCWZkID0gKCgoWEZBU1RJTlQgKHByZWRpY2F0 ZSkgJiB+SU5UX01BWCkgPT0gMAorCQkgICAgICAgJiYgKGZhY2Nlc3NhdCAoQVRfRkRDV0Qs IHBmbiwgWEZBU1RJTlQgKHByZWRpY2F0ZSksCisJCQkJICAgICAgQVRfRUFDQ0VTUykKKwkJ CSAgID09IDApCisJCSAgICAgICAmJiAhIGZpbGVfZGlyZWN0b3J5X3AgKHBmbikpCisJCSAg ICAgID8gMSA6IC0xKTsKKwkgICAgICBlbHNlCiAJCXsKLQkJICAvKiBDaGVjayB0aGF0IHdl IGNhbiBhY2Nlc3Mgb3Igb3BlbiBpdC4gICovCi0JCSAgaWYgKE5BVE5VTVAgKHByZWRpY2F0 ZSkpCi0JCSAgICBmZCA9ICgoKFhGQVNUSU5UIChwcmVkaWNhdGUpICYgfklOVF9NQVgpID09 IDAKLQkJCSAgICYmIGFjY2VzcyAocGZuLCBYRkFTVElOVCAocHJlZGljYXRlKSkgPT0gMCkK LQkJCSAgPyAxIDogLTEpOwotCQkgIGVsc2UKLQkJICAgIGZkID0gZW1hY3Nfb3BlbiAocGZu LCBPX1JET05MWSwgMCk7Ci0KLQkJICBpZiAoZmQgPj0gMCkKKwkJICBzdHJ1Y3Qgc3RhdCBz dDsKKwkJICBmZCA9IGVtYWNzX29wZW4gKHBmbiwgT19SRE9OTFksIDApOworCQkgIGlmICgw IDw9IGZkCisJCSAgICAgICYmIChmc3RhdCAoZmQsICZzdCkgIT0gMCB8fCBTX0lTRElSIChz dC5zdF9tb2RlKSkpCiAJCSAgICB7Ci0JCSAgICAgIC8qIFdlIHN1Y2NlZWRlZDsgcmV0dXJu IHRoaXMgZGVzY3JpcHRvciBhbmQgZmlsZW5hbWUuICAqLwotCQkgICAgICBpZiAoc3RvcmVw dHIpCi0JCQkqc3RvcmVwdHIgPSBzdHJpbmc7Ci0JCSAgICAgIFVOR0NQUk87Ci0JCSAgICAg IHJldHVybiBmZDsKKwkJICAgICAgZW1hY3NfY2xvc2UgKGZkKTsKKwkJICAgICAgZmQgPSAt MTsKIAkJICAgIH0KIAkJfQorCisJICAgICAgaWYgKGZkID49IDApCisJCXsKKwkJICAvKiBX ZSBzdWNjZWVkZWQ7IHJldHVybiB0aGlzIGRlc2NyaXB0b3IgYW5kIGZpbGVuYW1lLiAgKi8K KwkJICBpZiAoc3RvcmVwdHIpCisJCSAgICAqc3RvcmVwdHIgPSBzdHJpbmc7CisJCSAgVU5H Q1BSTzsKKwkJICByZXR1cm4gZmQ7CisJCX0KIAkgICAgfQogCX0KICAgICAgIGlmIChhYnNv bHV0ZSkKQEAgLTQwODgsNyArNDA5MCw3IEBACiAgICAgICBpZiAoU1RSSU5HUCAoZGlyZmls ZSkpCiAgICAgICAgIHsKICAgICAgICAgICBkaXJmaWxlID0gRmRpcmVjdG9yeV9maWxlX25h bWUgKGRpcmZpbGUpOwotICAgICAgICAgIGlmIChhY2Nlc3MgKFNTREFUQSAoZGlyZmlsZSks IDApIDwgMCkKKyAgICAgICAgICBpZiAoZmFjY2Vzc2F0IChBVF9GRENXRCwgU1NEQVRBIChk aXJmaWxlKSwgRl9PSywgQVRfRUFDQ0VTUykgIT0gMCkKICAgICAgICAgICAgIGRpcl93YXJu aW5nICgiV2FybmluZzogTGlzcCBkaXJlY3RvcnkgYCVzJyBkb2VzIG5vdCBleGlzdC5cbiIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgWENBUiAocGF0aF90YWlsKSk7CiAgICAgICAg IH0KCj09PSBtb2RpZmllZCBmaWxlICdzcmMvcHJvY2Vzcy5jJwotLS0gc3JjL3Byb2Nlc3Mu YwkyMDEyLTEwLTEzIDAwOjUyOjAxICswMDAwCisrKyBzcmMvcHJvY2Vzcy5jCTIwMTItMTAt MTUgMDY6MDU6NDYgKzAwMDAKQEAgLTY2Myw3ICs2NjMsNyBAQAogI2Vsc2UKIAkgICAgc3By aW50ZiAocHR5X25hbWUsICIvZGV2L3R0eSVjJXgiLCBjLCBpKTsKICNlbmRpZiAvKiBubyBQ VFlfVFRZX05BTUVfU1BSSU5URiAqLwotCSAgICBpZiAoYWNjZXNzIChwdHlfbmFtZSwgNikg IT0gMCkKKwkgICAgaWYgKGZhY2Nlc3NhdCAoQVRfRkRDV0QsIHB0eV9uYW1lLCBSX09LIHwg V19PSywgQVRfRUFDQ0VTUykgIT0gMCkKIAkgICAgICB7CiAJCWVtYWNzX2Nsb3NlIChmZCk7 CiAjIGlmbmRlZiBfX3NnaQoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy93MzIuYycKLS0tIHNy Yy93MzIuYwkyMDEyLTEwLTEyIDE1OjMwOjA2ICswMDAwCisrKyBzcmMvdzMyLmMJMjAxMi0x MC0xNSAwNjowNTo0NiArMDAwMApAQCAtMjcwNywxMCArMjcwNywxNiBAQAogICAgbG9uZyBm aWxlIG5hbWVzLiAgKi8KIAogaW50Ci1zeXNfYWNjZXNzIChjb25zdCBjaGFyICogcGF0aCwg aW50IG1vZGUpCitzeXNfZmFjY2Vzc2F0IChpbnQgZGlyZmQsIGNvbnN0IGNoYXIgKiBwYXRo LCBpbnQgbW9kZSwgaW50IGZsYWdzKQogewogICBEV09SRCBhdHRyaWJ1dGVzOwogCisgIGlm IChkaXJmZCAhPSBBVF9GRENXRCkKKyAgICB7CisgICAgICBlcnJubyA9IEVJTlZBTDsKKyAg ICAgIHJldHVybiAtMTsKKyAgICB9CisKICAgLyogTVNWQ1JUIGltcGxlbWVudGF0aW9uIG9m ICdhY2Nlc3MnIGRvZXNuJ3QgcmVjb2duaXplIERfT0ssIGFuZCBpdHMKICAgICAgbmV3ZXIg dmVyc2lvbnMgYmxvdyB1cCB3aGVuIHBhc3NlZCBEX09LLiAgKi8KICAgcGF0aCA9IG1hcF93 MzJfZmlsZW5hbWUgKHBhdGgsIE5VTEwpOwoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy94cmRi LmMnCi0tLSBzcmMveHJkYi5jCTIwMTItMDktMTUgMDc6MDY6NTYgKzAwMDAKKysrIHNyYy94 cmRiLmMJMjAxMi0xMC0xNSAwNjowNTo0NiArMDAwMApAQCAtMjEsNiArMjEsNyBAQAogCiAj aW5jbHVkZSA8Y29uZmlnLmg+CiAKKyNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPHVu aXN0ZC5oPgogI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8ZXBhdGhzLmg+CkBAIC0y NjYsMTEgKzI2Nyw4IEBACiBzdGF0aWMgaW50CiBmaWxlX3AgKGNvbnN0IGNoYXIgKmZpbGVu YW1lKQogewotICBzdHJ1Y3Qgc3RhdCBzdGF0dXM7Ci0KLSAgcmV0dXJuIChhY2Nlc3MgKGZp bGVuYW1lLCA0KSA9PSAwICAgICAgICAgICAgIC8qIGV4aXN0cyBhbmQgaXMgcmVhZGFibGUg Ki8KLQkgICYmIHN0YXQgKGZpbGVuYW1lLCAmc3RhdHVzKSA9PSAwCS8qIGdldCB0aGUgc3Rh dHVzICovCi0JICAmJiAoU19JU0RJUiAoc3RhdHVzLnN0X21vZGUpKSA9PSAwKTsJLyogbm90 IGEgZGlyZWN0b3J5ICovCisgIHJldHVybiAoZmFjY2Vzc2F0IChBVF9GRENXRCwgZmlsZW5h bWUsIFJfT0ssIEFUX0VBQ0NFU1MpID09IDAKKwkgICYmICEgZmlsZV9kaXJlY3RvcnlfcCAo ZmlsZW5hbWUpKTsKIH0KIAogCgo= --------------020005030403010803030104--