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#13539: Use fdopendir, fstatat and readlinkat, for efficiency. Date: Thu, 24 Jan 2013 00:26:50 -0800 Organization: UCLA Computer Science Department Message-ID: <5100F04A.1020603@cs.ucla.edu> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------070909000902080807010402" X-Trace: ger.gmane.org 1359016107 2593 80.91.229.3 (24 Jan 2013 08:28:27 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 24 Jan 2013 08:28:27 +0000 (UTC) To: 13539@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Thu Jan 24 09:28:45 2013 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 1TyIAu-00028d-0X for geb-bug-gnu-emacs@m.gmane.org; Thu, 24 Jan 2013 09:28:44 +0100 Original-Received: from localhost ([::1]:49534 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TyIAc-0004tk-Da for geb-bug-gnu-emacs@m.gmane.org; Thu, 24 Jan 2013 03:28:26 -0500 Original-Received: from eggs.gnu.org ([208.118.235.92]:51509) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TyIAQ-0004rb-SO for bug-gnu-emacs@gnu.org; Thu, 24 Jan 2013 03:28:23 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TyIAE-0006ZC-UM for bug-gnu-emacs@gnu.org; Thu, 24 Jan 2013 03:28:14 -0500 Original-Received: from debbugs.gnu.org ([140.186.70.43]:41834) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TyIAE-0006Yk-OQ for bug-gnu-emacs@gnu.org; Thu, 24 Jan 2013 03:28:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.72) (envelope-from ) id 1TyIAE-0002uz-B7 for bug-gnu-emacs@gnu.org; Thu, 24 Jan 2013 03:28:02 -0500 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: Thu, 24 Jan 2013 08:28:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 13539 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.135901604711175 (code B ref -1); Thu, 24 Jan 2013 08:28:02 +0000 Original-Received: (at submit) by debbugs.gnu.org; 24 Jan 2013 08:27:27 +0000 Original-Received: from localhost ([127.0.0.1]:47299 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1TyI9e-0002uC-UZ for submit@debbugs.gnu.org; Thu, 24 Jan 2013 03:27:27 -0500 Original-Received: from eggs.gnu.org ([208.118.235.92]:39955) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1TyI9e-0002u6-1d for submit@debbugs.gnu.org; Thu, 24 Jan 2013 03:27:26 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TyI9U-0006PU-SO for submit@debbugs.gnu.org; Thu, 24 Jan 2013 03:27:24 -0500 Original-Received: from lists.gnu.org ([208.118.235.17]:56429) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TyI9U-0006PP-On for submit@debbugs.gnu.org; Thu, 24 Jan 2013 03:27:16 -0500 Original-Received: from eggs.gnu.org ([208.118.235.92]:51258) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TyI9M-0003Ly-3O for bug-gnu-emacs@gnu.org; Thu, 24 Jan 2013 03:27:16 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TyI9C-0006Kw-QP for bug-gnu-emacs@gnu.org; Thu, 24 Jan 2013 03:27:08 -0500 Original-Received: from smtp.cs.ucla.edu ([131.179.128.62]:43447) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TyI9C-0006K7-11; Thu, 24 Jan 2013 03:26:58 -0500 Original-Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id D5EDEA60001; Thu, 24 Jan 2013 00:26:53 -0800 (PST) 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 ha5nVhxb-LCV; Thu, 24 Jan 2013 00:26:50 -0800 (PST) Original-Received: from [192.168.1.9] (pool-71-189-154-249.lsanca.fios.verizon.net [71.189.154.249]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id ABC1D39E8008; Thu, 24 Jan 2013 00:26:50 -0800 (PST) User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130106 Thunderbird/17.0.2 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-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.x 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:70231 Archived-At: This is a multi-part message in MIME format. --------------070909000902080807010402 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Attached is a patch that can greatly improve the performance of directory-files-and-attributes, which I'd like to install into the trunk. The key idea is to use fstatat instead of lstat; this reduces directory-reading from an O(ND) to an O(N) operation, where N is the number of directory entries and D is the length of the directory's name. This patch works on POSIXish hosts, but it'll no doubt need a few changes to the MS-Windows makefiles to compile fdopendir.c, fstatat.c, openat-die.c, save-cwd.c, openat-proc.c, or whatever subset of these is needed on MS-Windows. I'll CC: this to Eli to give him a heads-up. This patch is relative to trunk bzr 111595. --------------070909000902080807010402 Content-Type: text/plain; charset=UTF-8; name="fdopendir.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="fdopendir.txt" PT09IG1vZGlmaWVkIGZpbGUgJy5ienJpZ25vcmUnCi0tLSAuYnpyaWdub3JlCTIwMTMtMDEt MjMgMjM6NDk6NDYgKzAwMDAKKysrIC5ienJpZ25vcmUJMjAxMy0wMS0yNCAwNjo1MToyNSAr MDAwMApAQCAtODcsNiArODcsNyBAQAogbGliL2FsbG9jYS5oCiBsaWIvYXJnLW5vbm51bGwu aAogbGliL2MrK2RlZnMuaAorbGliL2RpcmVudC5oCiBsaWIvZXhlY2luZm8uaAogbGliL2Zj bnRsLmgKIGxpYi9nZXRvcHQuaAoKPT09IG1vZGlmaWVkIGZpbGUgJ0NoYW5nZUxvZycKLS0t IENoYW5nZUxvZwkyMDEzLTAxLTIzIDIzOjQ5OjQ2ICswMDAwCisrKyBDaGFuZ2VMb2cJMjAx My0wMS0yNCAwODoxMzoyMiArMDAwMApAQCAtMSwzICsxLDIxIEBACisyMDEzLTAxLTI0ICBQ YXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCVVzZSBmZG9wZW5kaXIsIGZz dGF0YXQgYW5kIHJlYWRsaW5rYXQsIGZvciBlZmZpY2llbmN5LgorCU9uIG15IGhvc3QsIHRo aXMgc3BlZWRzIHVwIGRpcmVjdG9yeS1maWxlcy1hbmQtYXR0cmlidXRlcyBieSBhCisJZmFj dG9yIG9mIDMsIHdoZW4gYXBwbGllZCB0byBFbWFjcydzIHNyYyBkaXJlY3RvcnkuCisJVGhl c2UgZnVuY3Rpb25zIGFyZSBzdGFuZGFyZGl6ZWQgYnkgUE9TSVggYW5kIGFyZSBjb21tb24g dGhlc2UKKwlkYXlzOyBmYWxsIGJhY2sgb24gYSAoc2xvd2VyKSBnbnVsaWIgaW1wbGVtZW50 YXRpb24gaWYgdGhlIGhvc3QKKwlpcyB0b28gb2xkIHRvIHN1cHBseSB0aGVtLgorCSogLmJ6 cmlnbm9yZTogQWRkIGxpYi9kaXJlbnQuaC4KKwkqIGxpYi9NYWtlZmlsZS5hbSAobGliZ251 X2FfU09VUkNFUyk6IEFkZCBvcGVuYXQtZGllLmMsIHNhdmUtY3dkLmMuCisJKiBsaWIvZ251 bGliLm1rLCBtNC9nbnVsaWItY29tcC5tNDogUmVnZW5lcmF0ZS4KKwkqIGxpYi9kaXJlbnQu aW4uaCwgbGliL2Zkb3BlbmRpci5jLCBsaWIvZnN0YXRhdC5jLCBsaWIvb3BlbmF0LXByaXYu aDoKKwkqIGxpYi9vcGVuYXQtcHJvYy5jLCBsaWIvb3BlbmF0LmgsIG00L2RpcmVudF9oLm00 LCBtNC9mZG9wZW5kaXIubTQ6CisJKiBtNC9mc3RhdGF0Lm00OiBOZXcgZmlsZXMsIGZyb20g Z251bGliLgorCSogbGliL29wZW5hdC1kaWUuYywgbGliL3NhdmUtY3dkLmMsIGxpYi9zYXZl LWN3ZC5oOiBOZXcgZmlsZXMuCisJVGhlc2UgbGFzdCB0aHJlZSBhcmUgc3BlY2lmaWMgdG8g RW1hY3MgYW5kIGFyZSBub3QgY29waWVkIGZyb20gZ251bGliLgorCVRoZXkgYXJlIHNpbXBs ZXIgdGhhbiB0aGUgZ251bGliIHZlcnNpb25zIGFuZCBhcmUgdHVuZWQgZm9yIEVtYWNzLgor CiAyMDEzLTAxLTIzICBHaW9yZ29zIEtlcmFtaWRhcyAgPGdrZXJhbWlkYXNAZ21haWwuY29t PiAgKHRpbnkgY2hhbmdlKQogCiAJKiAuYnpyaWdub3JlOiBhZGQgbGliLXNyYy9ibGVzc21h aWwuCgo9PT0gbW9kaWZpZWQgZmlsZSAnYWRtaW4vQ2hhbmdlTG9nJwotLS0gYWRtaW4vQ2hh bmdlTG9nCTIwMTMtMDEtMTUgMDk6MjI6MjUgKzAwMDAKKysrIGFkbWluL0NoYW5nZUxvZwky MDEzLTAxLTI0IDA4OjA3OjUyICswMDAwCkBAIC0xLDMgKzEsMTAgQEAKKzIwMTMtMDEtMjQg IFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJVXNlIGZkb3BlbmRpciwg ZnN0YXRhdCBhbmQgcmVhZGxpbmthdCwgZm9yIGVmZmljaWVuY3kuCisJKiBtZXJnZS1nbnVs aWIgKEdOVUxJQl9NT0RVTEVTKTogQWRkIGZkb3BlbmRpciwgZnN0YXRhdCwgcmVhZGxpbmth dC4KKwkoR05VTElCX1RPT0xfRkxBR1MpOiBEbyBub3QgYXZvaWQgYXQtaW50ZXJuYWwsIG9w ZW5hdC1oLgorCUF2b2lkIGR1cCwgb3Blbiwgb3BlbmRpci4KKwogMjAxMy0wMS0xNSAgRG1p dHJ5IEFudGlwb3YgIDxkbWFudGlwb3ZAeWFuZGV4LnJ1PgogCiAJKiBjb2NjaW5lbGxlL3hz YXZlLmNvY2NpOiBTZW1hbnRpYyBwYXRjaCB0byBhZGp1c3QgdXNlcnMgb2YKCj09PSBtb2Rp ZmllZCBmaWxlICdhZG1pbi9tZXJnZS1nbnVsaWInCi0tLSBhZG1pbi9tZXJnZS1nbnVsaWIJ MjAxMy0wMS0wMiAxNjoxMzowNCArMDAwMAorKysgYWRtaW4vbWVyZ2UtZ251bGliCTIwMTMt MDEtMjQgMDg6MDI6MTYgKzAwMDAKQEAgLTI5LDkgKzI5LDkgQEAKICAgYWxsb2NhLW9wdCBj LWN0eXBlIGMtc3RyY2FzZQogICBjYXJlYWRsaW5rYXQgY2xvc2Utc3RyZWFtIGNyeXB0by9t ZDUgY3J5cHRvL3NoYTEgY3J5cHRvL3NoYTI1NiBjcnlwdG8vc2hhNTEyCiAgIGR0b2FzdHIg ZHRvdGltZXNwZWMgZHVwMiBlbnZpcm9uIGV4ZWNpbmZvIGZhY2Nlc3NhdAotICBmY250bC1o IGZpbGVtb2RlIGdldGxvYWRhdmcgZ2V0b3B0LWdudSBnZXR0aW1lIGdldHRpbWVvZmRheQor ICBmY250bC1oIGZkb3BlbmRpciBmaWxlbW9kZSBmc3RhdGF0IGdldGxvYWRhdmcgZ2V0b3B0 LWdudSBnZXR0aW1lIGdldHRpbWVvZmRheQogICBpZ25vcmUtdmFsdWUgaW50cHJvcHMgbGFy Z2VmaWxlIGxzdGF0Ci0gIG1hbnl3YXJuaW5ncyBta3RpbWUgcHNlbGVjdCBwdGhyZWFkX3Np Z21hc2sgcHV0ZW52IHJlYWRsaW5rCisgIG1hbnl3YXJuaW5ncyBta3RpbWUgcHNlbGVjdCBw dGhyZWFkX3NpZ21hc2sgcHV0ZW52IHJlYWRsaW5rIHJlYWRsaW5rYXQKICAgc2lnMnN0ciBz b2NrbGVuIHN0YXQtdGltZSBzdGRhbGlnbiBzdGRhcmcgc3RkYm9vbCBzdGRpbwogICBzdHJm dGltZSBzdHJ0b2ltYXggc3RydG91bWF4IHN5bWxpbmsgc3lzX3N0YXQKICAgc3lzX3RpbWUg dGltZSB0aW1lci10aW1lIHRpbWVzcGVjLWFkZCB0aW1lc3BlYy1zdWIgdW5zZXRlbnYgdXRp bWVucwpAQCAtMzksMTAgKzM5LDEwIEBACiAnCiAKIEdOVUxJQl9UT09MX0ZMQUdTPScKLSAg LS1hdm9pZD1hdC1pbnRlcm5hbAorICAtLWF2b2lkPWR1cAogICAtLWF2b2lkPWVycm5vIC0t YXZvaWQ9ZmNoZGlyIC0tYXZvaWQ9ZmNudGwgLS1hdm9pZD1mc3RhdAogICAtLWF2b2lkPW1h bGxvYy1wb3NpeCAtLWF2b2lkPW1zdmMtaW52YWwgLS1hdm9pZD1tc3ZjLW5vdGhyb3cKLSAg LS1hdm9pZD1vcGVuYXQtZGllIC0tYXZvaWQ9b3BlbmF0LWgKKyAgLS1hdm9pZD1vcGVuIC0t YXZvaWQ9b3BlbmF0LWRpZSAtLWF2b2lkPW9wZW5kaXIKICAgLS1hdm9pZD1yYWlzZQogICAt LWF2b2lkPXNhdmUtY3dkIC0tYXZvaWQ9c2VsZWN0IC0tYXZvaWQ9c2lncHJvY21hc2sgLS1h dm9pZD1zeXNfdHlwZXMKICAgLS1hdm9pZD10aHJlYWRsaWIKCj09PSBtb2RpZmllZCBmaWxl ICdsaWIvTWFrZWZpbGUuYW0nCi0tLSBsaWIvTWFrZWZpbGUuYW0JMjAxMi0wOC0wMiAxMDoz OTo0NyArMDAwMAorKysgbGliL01ha2VmaWxlLmFtCTIwMTMtMDEtMjQgMDY6NTE6MjUgKzAw MDAKQEAgLTgsMyArOCw1IEBACiBERUZBVUxUX0lOQ0xVREVTID0gLUkuIC1JJCh0b3Bfc3Jj ZGlyKS9saWIgLUkuLi9zcmMgLUkkKHRvcF9zcmNkaXIpL3NyYwogCiBpbmNsdWRlIGdudWxp Yi5taworCitsaWJnbnVfYV9TT1VSQ0VTICs9IG9wZW5hdC1kaWUuYyBzYXZlLWN3ZC5jCgo9 PT0gYWRkZWQgZmlsZSAnbGliL2RpcmVudC5pbi5oJwotLS0gbGliL2RpcmVudC5pbi5oCTE5 NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDAKKysrIGxpYi9kaXJlbnQuaW4uaAkyMDEzLTAxLTI0 IDA2OjUxOjI1ICswMDAwCkBAIC0wLDAgKzEsMjU4IEBACisvKiBBIEdOVS1saWtlIDxkaXJl bnQuaD4uCisgICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cisg ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRo ZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K KworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK KyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cu Z251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfRElS RU5UX0gKKworI2lmIF9fR05VQ19fID49IDMKK0BQUkFHTUFfU1lTVEVNX0hFQURFUkAKKyNl bmRpZgorQFBSQUdNQV9DT0xVTU5TQAorCisvKiBUaGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVz IGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFyZC4gICovCisjaWYgQEhBVkVfRElSRU5U X0hACisjIEBJTkNMVURFX05FWFRAIEBORVhUX0RJUkVOVF9IQAorI2VuZGlmCisKKyNpZm5k ZWYgX0BHVUFSRF9QUkVGSVhAX0RJUkVOVF9ICisjZGVmaW5lIF9AR1VBUkRfUFJFRklYQF9E SVJFTlRfSAorCisvKiBHZXQgaW5vX3QuICBOZWVkZWQgb24gc29tZSBzeXN0ZW1zLCBpbmNs dWRpbmcgZ2xpYmMgMi44LiAgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2lmICFA SEFWRV9ESVJFTlRfSEAKKy8qIERlZmluZSB0eXBlcyBESVIgYW5kICdzdHJ1Y3QgZGlyZW50 Jy4gICovCisjIGlmICFHTlVMSUJfZGVmaW5lZF9zdHJ1Y3RfZGlyZW50CitzdHJ1Y3QgZGly ZW50Cit7CisgIGNoYXIgZF90eXBlOworICBjaGFyIGRfbmFtZVsxXTsKK307CisvKiBQb3Nz aWJsZSB2YWx1ZXMgZm9yICdkX3R5cGUnLiAgKi8KKyMgIGRlZmluZSBEVF9VTktOT1dOIDAK KyMgIGRlZmluZSBEVF9GSUZPICAgIDEgICAgICAgICAgLyogRklGTyAqLworIyAgZGVmaW5l IERUX0NIUiAgICAgMiAgICAgICAgICAvKiBjaGFyYWN0ZXIgZGV2aWNlICovCisjICBkZWZp bmUgRFRfRElSICAgICA0ICAgICAgICAgIC8qIGRpcmVjdG9yeSAqLworIyAgZGVmaW5lIERU X0JMSyAgICAgNiAgICAgICAgICAvKiBibG9jayBkZXZpY2UgKi8KKyMgIGRlZmluZSBEVF9S RUcgICAgIDggICAgICAgICAgLyogcmVndWxhciBmaWxlICovCisjICBkZWZpbmUgRFRfTE5L ICAgIDEwICAgICAgICAgIC8qIHN5bWJvbGljIGxpbmsgKi8KKyMgIGRlZmluZSBEVF9TT0NL ICAgMTIgICAgICAgICAgLyogc29ja2V0ICovCisjICBkZWZpbmUgRFRfV0hUICAgIDE0ICAg ICAgICAgIC8qIHdoaXRlb3V0ICovCit0eXBlZGVmIHN0cnVjdCBnbF9kaXJlY3RvcnkgRElS OworIyAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX3N0cnVjdF9kaXJlbnQgMQorIyBlbmRpZgor I2VuZGlmCisKKy8qIFRoZSBfX2F0dHJpYnV0ZV9fIGZlYXR1cmUgaXMgYXZhaWxhYmxlIGlu IGdjYyB2ZXJzaW9ucyAyLjUgYW5kIGxhdGVyLgorICAgVGhlIGF0dHJpYnV0ZSBfX3B1cmVf XyB3YXMgYWRkZWQgaW4gZ2NjIDIuOTYuICAqLworI2lmIF9fR05VQ19fID4gMiB8fCAoX19H TlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NikKKyMgZGVmaW5lIF9HTF9BVFRS SUJVVEVfUFVSRSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKQorI2Vsc2UKKyMgZGVmaW5l IF9HTF9BVFRSSUJVVEVfUFVSRSAvKiBlbXB0eSAqLworI2VuZGlmCisKKy8qIFRoZSBkZWZp bml0aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBMIGV0Yy4gYXJlIGNvcGllZCBoZXJlLiAgKi8K KworLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX0FSR19OT05OVUxMIGlzIGNvcGllZCBoZXJl LiAgKi8KKworLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFIGlzIGNvcGll ZCBoZXJlLiAgKi8KKworCisvKiBEZWNsYXJlIG92ZXJyaWRkZW4gZnVuY3Rpb25zLiAgKi8K KworI2lmIEBHTlVMSUJfT1BFTkRJUkAKKyMgaWYgQFJFUExBQ0VfT1BFTkRJUkAKKyMgIGlm ICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisj ICAgdW5kZWYgb3BlbmRpcgorIyAgIGRlZmluZSBvcGVuZGlyIHJwbF9vcGVuZGlyCisjICBl bmRpZgorX0dMX0ZVTkNERUNMX1JQTCAob3BlbmRpciwgRElSICosIChjb25zdCBjaGFyICpk aXJfbmFtZSkgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKG9w ZW5kaXIsIERJUiAqLCAoY29uc3QgY2hhciAqZGlyX25hbWUpKTsKKyMgZWxzZQorIyAgaWYg IUBIQVZFX09QRU5ESVJACitfR0xfRlVOQ0RFQ0xfU1lTIChvcGVuZGlyLCBESVIgKiwgKGNv bnN0IGNoYXIgKmRpcl9uYW1lKSBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworIyAgZW5kaWYK K19HTF9DWFhBTElBU19TWVMgKG9wZW5kaXIsIERJUiAqLCAoY29uc3QgY2hhciAqZGlyX25h bWUpKTsKKyMgZW5kaWYKK19HTF9DWFhBTElBU1dBUk4gKG9wZW5kaXIpOworI2VsaWYgZGVm aW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBvcGVuZGlyCisjIGlmIEhBVkVfUkFX X0RFQ0xfT1BFTkRJUgorX0dMX1dBUk5fT05fVVNFIChvcGVuZGlyLCAib3BlbmRpciBpcyBu b3QgcG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBv cGVuZGlyIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBAR05V TElCX1JFQURESVJACisjIGlmICFASEFWRV9SRUFERElSQAorX0dMX0ZVTkNERUNMX1NZUyAo cmVhZGRpciwgc3RydWN0IGRpcmVudCAqLCAoRElSICpkaXJwKSBfR0xfQVJHX05PTk5VTEwg KCgxKSkpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTX1NZUyAocmVhZGRpciwgc3RydWN0IGRp cmVudCAqLCAoRElSICpkaXJwKSk7CitfR0xfQ1hYQUxJQVNXQVJOIChyZWFkZGlyKTsKKyNl bGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgcmVhZGRpcgorIyBpZiBI QVZFX1JBV19ERUNMX1JFQURESVIKK19HTF9XQVJOX09OX1VTRSAocmVhZGRpciwgInJlYWRk aXIgaXMgbm90IHBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBt b2R1bGUgcmVhZGRpciBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYKKyNlbmRpZgorCisj aWYgQEdOVUxJQl9SRVdJTkRESVJACisjIGlmICFASEFWRV9SRVdJTkRESVJACitfR0xfRlVO Q0RFQ0xfU1lTIChyZXdpbmRkaXIsIHZvaWQsIChESVIgKmRpcnApIF9HTF9BUkdfTk9OTlVM TCAoKDEpKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChyZXdpbmRkaXIsIHZvaWQs IChESVIgKmRpcnApKTsKK19HTF9DWFhBTElBU1dBUk4gKHJld2luZGRpcik7CisjZWxpZiBk ZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIHJld2luZGRpcgorIyBpZiBIQVZF X1JBV19ERUNMX1JFV0lORERJUgorX0dMX1dBUk5fT05fVVNFIChyZXdpbmRkaXIsICJyZXdp bmRkaXIgaXMgbm90IHBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxp YiBtb2R1bGUgcmV3aW5kZGlyIGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlm CisKKyNpZiBAR05VTElCX0NMT1NFRElSQAorIyBpZiBAUkVQTEFDRV9DTE9TRURJUkAKKyMg IGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0Up CisjICAgdW5kZWYgY2xvc2VkaXIKKyMgICBkZWZpbmUgY2xvc2VkaXIgcnBsX2Nsb3NlZGly CisjICBlbmRpZgorX0dMX0ZVTkNERUNMX1JQTCAoY2xvc2VkaXIsIGludCwgKERJUiAqZGly cCkgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKGNsb3NlZGly LCBpbnQsIChESVIgKmRpcnApKTsKKyMgZWxzZQorIyAgaWYgIUBIQVZFX0NMT1NFRElSQAor X0dMX0ZVTkNERUNMX1NZUyAoY2xvc2VkaXIsIGludCwgKERJUiAqZGlycCkgX0dMX0FSR19O T05OVUxMICgoMSkpKTsKKyMgIGVuZGlmCitfR0xfQ1hYQUxJQVNfU1lTIChjbG9zZWRpciwg aW50LCAoRElSICpkaXJwKSk7CisjIGVuZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChjbG9zZWRp cik7CisjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisjIHVuZGVmIGNsb3NlZGly CisjIGlmIEhBVkVfUkFXX0RFQ0xfQ0xPU0VESVIKK19HTF9XQVJOX09OX1VTRSAoY2xvc2Vk aXIsICJjbG9zZWRpciBpcyBub3QgcG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1 c2UgZ251bGliIG1vZHVsZSBjbG9zZWRpciBmb3IgcG9ydGFiaWxpdHkiKTsKKyMgZW5kaWYK KyNlbmRpZgorCisjaWYgQEdOVUxJQl9ESVJGREAKKy8qIFJldHVybiB0aGUgZmlsZSBkZXNj cmlwdG9yIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gZGlyZWN0b3J5IHN0cmVhbSwKKyAg IG9yIC0xIGlmIG5vbmUgZXhpc3RzLiAgKi8KKyMgaWYgQFJFUExBQ0VfRElSRkRACisjICBp ZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQor IyAgIHVuZGVmIGRpcmZkCisjICAgZGVmaW5lIGRpcmZkIHJwbF9kaXJmZAorIyAgZW5kaWYK K19HTF9GVU5DREVDTF9SUEwgKGRpcmZkLCBpbnQsIChESVIgKikgX0dMX0FSR19OT05OVUxM ICgoMSkpKTsKK19HTF9DWFhBTElBU19SUEwgKGRpcmZkLCBpbnQsIChESVIgKikpOworIyBl bHNlCisjICBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVT UEFDRSAmJiBkZWZpbmVkIGRpcmZkCisgICAgLyogZGlyZmQgaXMgZGVmaW5lZCBhcyBhIG1h Y3JvIGFuZCBub3QgYXMgYSBmdW5jdGlvbi4KKyAgICAgICBUdXJuIGl0IGludG8gYSBmdW5j dGlvbiBhbmQgZ2V0IHJpZCBvZiB0aGUgbWFjcm8uICAqLworc3RhdGljIGlubGluZSBpbnQg KGRpcmZkKSAoRElSICpkcCkgeyByZXR1cm4gZGlyZmQgKGRwKTsgfQorIyAgIHVuZGVmIGRp cmZkCisjICBlbmRpZgorIyAgaWYgIShASEFWRV9ERUNMX0RJUkZEQCB8fCBkZWZpbmVkIGRp cmZkKQorX0dMX0ZVTkNERUNMX1NZUyAoZGlyZmQsIGludCwgKERJUiAqKSBfR0xfQVJHX05P Tk5VTEwgKCgxKSkpOworIyAgZW5kaWYKK19HTF9DWFhBTElBU19TWVMgKGRpcmZkLCBpbnQs IChESVIgKikpOworIyBlbmRpZgorX0dMX0NYWEFMSUFTV0FSTiAoZGlyZmQpOworI2VsaWYg ZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworIyB1bmRlZiBkaXJmZAorIyBpZiBIQVZFX1JB V19ERUNMX0RJUkZECitfR0xfV0FSTl9PTl9VU0UgKGRpcmZkLCAiZGlyZmQgaXMgdW5wb3J0 YWJsZSAtICIKKyAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIGRpcmZkIGZv ciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBAR05VTElCX0ZET1BF TkRJUkAKKy8qIE9wZW4gYSBkaXJlY3Rvcnkgc3RyZWFtIHZpc2l0aW5nIHRoZSBnaXZlbiBk aXJlY3RvcnkgZmlsZQorICAgZGVzY3JpcHRvci4gIFJldHVybiBOVUxMIGFuZCBzZXQgZXJy bm8gaWYgZmQgaXMgbm90IHZpc2l0aW5nIGEKKyAgIGRpcmVjdG9yeS4gIE9uIHN1Y2Nlc3Ms IHRoaXMgZnVuY3Rpb24gY29uc3VtZXMgZmQgKGl0IHdpbGwgYmUKKyAgIGltcGxpY2l0bHkg Y2xvc2VkIGVpdGhlciBieSB0aGlzIGZ1bmN0aW9uIG9yIGJ5IGEgc3Vic2VxdWVudAorICAg Y2xvc2VkaXIpLiAgKi8KKyMgaWYgQFJFUExBQ0VfRkRPUEVORElSQAorIyAgaWYgIShkZWZp bmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKyMgICB1bmRl ZiBmZG9wZW5kaXIKKyMgICBkZWZpbmUgZmRvcGVuZGlyIHJwbF9mZG9wZW5kaXIKKyMgIGVu ZGlmCitfR0xfRlVOQ0RFQ0xfUlBMIChmZG9wZW5kaXIsIERJUiAqLCAoaW50IGZkKSk7Citf R0xfQ1hYQUxJQVNfUlBMIChmZG9wZW5kaXIsIERJUiAqLCAoaW50IGZkKSk7CisjIGVsc2UK KyMgIGlmICFASEFWRV9GRE9QRU5ESVJAIHx8ICFASEFWRV9ERUNMX0ZET1BFTkRJUkAKK19H TF9GVU5DREVDTF9TWVMgKGZkb3BlbmRpciwgRElSICosIChpbnQgZmQpKTsKKyMgIGVuZGlm CitfR0xfQ1hYQUxJQVNfU1lTIChmZG9wZW5kaXIsIERJUiAqLCAoaW50IGZkKSk7CisjIGVu ZGlmCitfR0xfQ1hYQUxJQVNXQVJOIChmZG9wZW5kaXIpOworI2VsaWYgZGVmaW5lZCBHTlVM SUJfUE9TSVhDSEVDSworIyB1bmRlZiBmZG9wZW5kaXIKKyMgaWYgSEFWRV9SQVdfREVDTF9G RE9QRU5ESVIKK19HTF9XQVJOX09OX1VTRSAoZmRvcGVuZGlyLCAiZmRvcGVuZGlyIGlzIHVu cG9ydGFibGUgLSAiCisgICAgICAgICAgICAgICAgICJ1c2UgZ251bGliIG1vZHVsZSBmZG9w ZW5kaXIgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEBHTlVM SUJfU0NBTkRJUkAKKy8qIFNjYW4gdGhlIGRpcmVjdG9yeSBESVIsIGNhbGxpbmcgRklMVEVS IG9uIGVhY2ggZGlyZWN0b3J5IGVudHJ5LgorICAgRW50cmllcyBmb3Igd2hpY2ggRklMVEVS IHJldHVybnMgbm9uemVybyBhcmUgaW5kaXZpZHVhbGx5IG1hbGxvYydkLAorICAgc29ydGVk IHVzaW5nIHFzb3J0IHdpdGggQ01QLCBhbmQgY29sbGVjdGVkIGluIGEgbWFsbG9jJ2QgYXJy YXkgaW4KKyAgICpOQU1FTElTVC4gIFJldHVybnMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNl bGVjdGVkLCBvciAtMSBvbiBlcnJvci4gICovCisjIGlmICFASEFWRV9TQ0FORElSQAorX0dM X0ZVTkNERUNMX1NZUyAoc2NhbmRpciwgaW50LAorICAgICAgICAgICAgICAgICAgKGNvbnN0 IGNoYXIgKmRpciwgc3RydWN0IGRpcmVudCAqKipuYW1lbGlzdCwKKyAgICAgICAgICAgICAg ICAgICBpbnQgKCpmaWx0ZXIpIChjb25zdCBzdHJ1Y3QgZGlyZW50ICopLAorICAgICAgICAg ICAgICAgICAgIGludCAoKmNtcCkgKGNvbnN0IHN0cnVjdCBkaXJlbnQgKiosIGNvbnN0IHN0 cnVjdCBkaXJlbnQgKiopKQorICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgo MSwgMiwgNCkpKTsKKyMgZW5kaWYKKy8qIE5lZWQgdG8gY2FzdCwgYmVjYXVzZSBvbiBnbGli YyBzeXN0ZW1zLCB0aGUgZm91cnRoIHBhcmFtZXRlciBpcworICAgICAgICAgICAgICAgICAg ICAgICAgaW50ICgqY21wKSAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopLiAgKi8KK19H TF9DWFhBTElBU19TWVNfQ0FTVCAoc2NhbmRpciwgaW50LAorICAgICAgICAgICAgICAgICAg ICAgICAoY29uc3QgY2hhciAqZGlyLCBzdHJ1Y3QgZGlyZW50ICoqKm5hbWVsaXN0LAorICAg ICAgICAgICAgICAgICAgICAgICAgaW50ICgqZmlsdGVyKSAoY29uc3Qgc3RydWN0IGRpcmVu dCAqKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmNtcCkgKGNvbnN0IHN0cnVj dCBkaXJlbnQgKiosIGNvbnN0IHN0cnVjdCBkaXJlbnQgKiopKSk7CitfR0xfQ1hYQUxJQVNX QVJOIChzY2FuZGlyKTsKKyNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5k ZWYgc2NhbmRpcgorIyBpZiBIQVZFX1JBV19ERUNMX1NDQU5ESVIKK19HTF9XQVJOX09OX1VT RSAoc2NhbmRpciwgInNjYW5kaXIgaXMgdW5wb3J0YWJsZSAtICIKKyAgICAgICAgICAgICAg ICAgInVzZSBnbnVsaWIgbW9kdWxlIHNjYW5kaXIgZm9yIHBvcnRhYmlsaXR5Iik7CisjIGVu ZGlmCisjZW5kaWYKKworI2lmIEBHTlVMSUJfQUxQSEFTT1JUQAorLyogQ29tcGFyZSB0d28g J3N0cnVjdCBkaXJlbnQnIGVudHJpZXMgYWxwaGFiZXRpY2FsbHkuICAqLworIyBpZiAhQEhB VkVfQUxQSEFTT1JUQAorX0dMX0ZVTkNERUNMX1NZUyAoYWxwaGFzb3J0LCBpbnQsCisgICAg ICAgICAgICAgICAgICAoY29uc3Qgc3RydWN0IGRpcmVudCAqKiwgY29uc3Qgc3RydWN0IGRp cmVudCAqKikKKyAgICAgICAgICAgICAgICAgIF9HTF9BVFRSSUJVVEVfUFVSRQorICAgICAg ICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSwgMikpKTsKKyMgZW5kaWYKKy8qIE5l ZWQgdG8gY2FzdCwgYmVjYXVzZSBvbiBnbGliYyBzeXN0ZW1zLCB0aGUgcGFyYW1ldGVycyBh cmUKKyAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAq KS4gICovCitfR0xfQ1hYQUxJQVNfU1lTX0NBU1QgKGFscGhhc29ydCwgaW50LAorICAgICAg ICAgICAgICAgICAgICAgICAoY29uc3Qgc3RydWN0IGRpcmVudCAqKiwgY29uc3Qgc3RydWN0 IGRpcmVudCAqKikpOworX0dMX0NYWEFMSUFTV0FSTiAoYWxwaGFzb3J0KTsKKyNlbGlmIGRl ZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyMgdW5kZWYgYWxwaGFzb3J0CisjIGlmIEhBVkVf UkFXX0RFQ0xfQUxQSEFTT1JUCitfR0xfV0FSTl9PTl9VU0UgKGFscGhhc29ydCwgImFscGhh c29ydCBpcyB1bnBvcnRhYmxlIC0gIgorICAgICAgICAgICAgICAgICAidXNlIGdudWxpYiBt b2R1bGUgYWxwaGFzb3J0IGZvciBwb3J0YWJpbGl0eSIpOworIyBlbmRpZgorI2VuZGlmCisK KworI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9ESVJFTlRfSCAqLworI2VuZGlmIC8qIF9A R1VBUkRfUFJFRklYQF9ESVJFTlRfSCAqLwoKPT09IGFkZGVkIGZpbGUgJ2xpYi9mZG9wZW5k aXIuYycKLS0tIGxpYi9mZG9wZW5kaXIuYwkxOTcwLTAxLTAxIDAwOjAwOjAwICswMDAwCisr KyBsaWIvZmRvcGVuZGlyLmMJMjAxMy0wMS0yNCAwNjo1MToyNSArMDAwMApAQCAtMCwwICsx LDIwNCBAQAorLyogcHJvdmlkZSBhIHJlcGxhY2VtZW50IGZkb3BlbmRpciBmdW5jdGlvbgor ICAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ bmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5z ZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9u ZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcv bGljZW5zZXMvPi4gICovCisKKy8qIHdyaXR0ZW4gYnkgSmltIE1leWVyaW5nICovCisKKyNp bmNsdWRlIDxjb25maWcuaD4KKworI2luY2x1ZGUgPGRpcmVudC5oPgorCisjaW5jbHVkZSA8 c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpZiAhSEFWRV9GRE9QRU5ESVIK KworIyBpbmNsdWRlICJvcGVuYXQuaCIKKyMgaW5jbHVkZSAib3BlbmF0LXByaXYuaCIKKyMg aW5jbHVkZSAic2F2ZS1jd2QuaCIKKworIyBpZiBHTlVMSUJfRElSRU5UX1NBRkVSCisjICBp bmNsdWRlICJkaXJlbnQtLS5oIgorIyBlbmRpZgorCisjIGlmbmRlZiBSRVBMQUNFX0ZDSERJ UgorIyAgZGVmaW5lIFJFUExBQ0VfRkNIRElSIDAKKyMgZW5kaWYKKworc3RhdGljIERJUiAq ZmRvcGVuZGlyX3dpdGhfZHVwIChpbnQsIGludCwgc3RydWN0IHNhdmVkX2N3ZCBjb25zdCAq KTsKK3N0YXRpYyBESVIgKmZkX2Nsb25lX29wZW5kaXIgKGludCwgc3RydWN0IHNhdmVkX2N3 ZCBjb25zdCAqKTsKKworLyogUmVwbGFjZW1lbnQgZm9yIFBPU0lYIGZkb3BlbmRpci4KKwor ICAgRmlyc3QsIHRyeSB0byBzaW11bGF0ZSBpdCB2aWEgb3BlbmRpciAoIi9wcm9jL3NlbGYv ZmQvLi4uIikuICBGYWlsaW5nCisgICB0aGF0LCBzaW11bGF0ZSBpdCBieSB1c2luZyBmY2hk aXIgbWV0YWRhdGEsIG9yIGJ5IGRvaW5nCisgICBzYXZlX2N3ZC9mY2hkaXIvb3BlbmRpcigi LiIpL3Jlc3RvcmVfY3dkLgorICAgSWYgZWl0aGVyIHRoZSBzYXZlX2N3ZCBvciB0aGUgcmVz dG9yZV9jd2QgZmFpbHMgKHJlbGF0aXZlbHkgdW5saWtlbHkpLAorICAgdGhlbiBnaXZlIGEg ZGlhZ25vc3RpYyBhbmQgZXhpdCBub256ZXJvLgorCisgICBJZiBzdWNjZXNzZnVsLCB0aGUg cmVzdWx0aW5nIHN0cmVhbSBpcyBiYXNlZCBvbiBGRCBpbgorICAgaW1wbGVtZW50YXRpb25z IHdoZXJlIHN0cmVhbXMgYXJlIGJhc2VkIG9uIGZpbGUgZGVzY3JpcHRvcnMgYW5kIGluCisg ICBhcHBsaWNhdGlvbnMgd2hlcmUgbm8gb3RoZXIgdGhyZWFkIG9yIHNpZ25hbCBoYW5kbGVy IGFsbG9jYXRlcyBvcgorICAgZnJlZXMgZmlsZSBkZXNjcmlwdG9ycy4gIEluIG90aGVyIGNh c2VzLCBjb25zdWx0IGRpcmZkIG9uIHRoZSByZXN1bHQKKyAgIHRvIGZpbmQgb3V0IHdoZXRo ZXIgRkQgaXMgc3RpbGwgYmVpbmcgdXNlZC4KKworICAgT3RoZXJ3aXNlLCB0aGlzIGZ1bmN0 aW9uIHdvcmtzIGp1c3QgbGlrZSBQT1NJWCBmZG9wZW5kaXIuCisKKyAgIFcgQSBSIE4gSSBO IEc6CisKKyAgIFVubGlrZSBvdGhlciBmZC1yZWxhdGVkIGZ1bmN0aW9ucywgdGhpcyBvbmUg cGxhY2VzIGNvbnN0cmFpbnRzIG9uIEZELgorICAgSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5z IHN1Y2Nlc3NmdWxseSwgRkQgaXMgdW5kZXIgY29udHJvbCBvZiB0aGUKKyAgIGRpcmVudC5o IHN5c3RlbSwgYW5kIHRoZSBjYWxsZXIgc2hvdWxkIG5vdCBjbG9zZSBvciBtb2RpZnkgdGhl IHN0YXRlIG9mCisgICBGRCBvdGhlciB0aGFuIGJ5IHRoZSBkaXJlbnQuaCBmdW5jdGlvbnMu ICAqLworRElSICoKK2Zkb3BlbmRpciAoaW50IGZkKQoreworICBESVIgKmRpciA9IGZkb3Bl bmRpcl93aXRoX2R1cCAoZmQsIC0xLCBOVUxMKTsKKworICBpZiAoISBSRVBMQUNFX0ZDSERJ UiAmJiAhIGRpcikKKyAgICB7CisgICAgICBpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKKyAg ICAgIGlmIChFWFBFQ1RFRF9FUlJOTyAoc2F2ZWRfZXJybm8pKQorICAgICAgICB7CisgICAg ICAgICAgc3RydWN0IHNhdmVkX2N3ZCBjd2Q7CisgICAgICAgICAgaWYgKHNhdmVfY3dkICgm Y3dkKSAhPSAwKQorICAgICAgICAgICAgb3BlbmF0X3NhdmVfZmFpbCAoZXJybm8pOworICAg ICAgICAgIGRpciA9IGZkb3BlbmRpcl93aXRoX2R1cCAoZmQsIC0xLCAmY3dkKTsKKyAgICAg ICAgICBzYXZlZF9lcnJubyA9IGVycm5vOworICAgICAgICAgIGZyZWVfY3dkICgmY3dkKTsK KyAgICAgICAgICBlcnJubyA9IHNhdmVkX2Vycm5vOworICAgICAgICB9CisgICAgfQorCisg IHJldHVybiBkaXI7Cit9CisKKy8qIExpa2UgZmRvcGVuZGlyLCBleGNlcHQgdGhhdCBpZiBP TERFUl9EVVBGRCBpcyBub3QgLTEsIGl0IGlzIGtub3duCisgICB0byBiZSBhIGR1cCBvZiBG RCB3aGljaCBpcyBsZXNzIHRoYW4gRkQgLSAxIGFuZCB3aGljaCB3aWxsIGJlCisgICBjbG9z ZWQgYnkgdGhlIGNhbGxlciBhbmQgbm90IG90aGVyd2lzZSB1c2VkIGJ5IHRoZSBjYWxsZXIu ICBUaGlzCisgICBmdW5jdGlvbiBtYWtlcyBzdXJlIHRoYXQgRkQgaXMgY2xvc2VkIGFuZCBh bGwgZmlsZSBkZXNjcmlwdG9ycyBsZXNzCisgICB0aGFuIEZEIGFyZSBvcGVuLCBhbmQgdGhl biBjYWxscyBmZF9jbG9uZV9vcGVuZGlyIG9uIGEgZHVwIG9mIEZELgorICAgVGhhdCB3YXks IGJhcnJpbmcgcmFjZSBjb25kaXRpb25zLCBmZF9jbG9uZV9vcGVuZGlyIHJldHVybnMgYQor ICAgc3RyZWFtIHdob3NlIGZpbGUgZGVzY3JpcHRvciBpcyBGRC4KKworICAgSWYgUkVQTEFD RV9DSERJUiBvciBDV0QgaXMgbnVsbCwgdXNlIG9wZW5kaXIgKCIvcHJvYy9zZWxmL2ZkLy4u LiIsCisgICBmYWxsaW5nIGJhY2sgb24gZmNoZGlyIG1ldGFkYXRhLiAgT3RoZXJ3aXNlLCBD V0QgaXMgYSBzYXZlZCB2ZXJzaW9uCisgICBvZiB0aGUgd29ya2luZyBkaXJlY3Rvcnk7IHVz ZSBmY2hkaXIvb3BlbmRpcigiLiIpL3Jlc3RvcmVfY3dkKENXRCkuICAqLworc3RhdGljIERJ UiAqCitmZG9wZW5kaXJfd2l0aF9kdXAgKGludCBmZCwgaW50IG9sZGVyX2R1cGZkLCBzdHJ1 Y3Qgc2F2ZWRfY3dkIGNvbnN0ICpjd2QpCit7CisgIGludCBkdXBmZCA9IGR1cCAoZmQpOwor ICBpZiAoZHVwZmQgPCAwICYmIGVycm5vID09IEVNRklMRSkKKyAgICBkdXBmZCA9IG9sZGVy X2R1cGZkOworICBpZiAoZHVwZmQgPCAwKQorICAgIHJldHVybiBOVUxMOworICBlbHNlCisg ICAgeworICAgICAgRElSICpkaXI7CisgICAgICBpbnQgc2F2ZWRfZXJybm87CisgICAgICBp ZiAoZHVwZmQgPCBmZCAtIDEgJiYgZHVwZmQgIT0gb2xkZXJfZHVwZmQpCisgICAgICAgIHsK KyAgICAgICAgICBkaXIgPSBmZG9wZW5kaXJfd2l0aF9kdXAgKGZkLCBkdXBmZCwgY3dkKTsK KyAgICAgICAgICBzYXZlZF9lcnJubyA9IGVycm5vOworICAgICAgICB9CisgICAgICBlbHNl CisgICAgICAgIHsKKyAgICAgICAgICBjbG9zZSAoZmQpOworICAgICAgICAgIGRpciA9IGZk X2Nsb25lX29wZW5kaXIgKGR1cGZkLCBjd2QpOworICAgICAgICAgIHNhdmVkX2Vycm5vID0g ZXJybm87CisgICAgICAgICAgaWYgKCEgZGlyKQorICAgICAgICAgICAgeworICAgICAgICAg ICAgICBpbnQgZmQxID0gZHVwIChkdXBmZCk7CisgICAgICAgICAgICAgIGlmIChmZDEgIT0g ZmQpCisgICAgICAgICAgICAgICAgb3BlbmF0X3NhdmVfZmFpbCAoZmQxIDwgMCA/IGVycm5v IDogRUJBREYpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIGlmIChkdXBm ZCAhPSBvbGRlcl9kdXBmZCkKKyAgICAgICAgY2xvc2UgKGR1cGZkKTsKKyAgICAgIGVycm5v ID0gc2F2ZWRfZXJybm87CisgICAgICByZXR1cm4gZGlyOworICAgIH0KK30KKworLyogTGlr ZSBmZG9wZW5kaXIsIGV4Y2VwdCB0aGUgcmVzdWx0IGNvbnRyb2xzIGEgY2xvbmUgb2YgRkQu ICBJdCBpcworICAgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IGJvdGggdG8gY2xvc2Ug RkQgYW5kIChpZiB0aGUgcmVzdWx0IGlzCisgICBub3QgbnVsbCkgdG8gY2xvc2VkaXIgdGhl IHJlc3VsdC4gICovCitzdGF0aWMgRElSICoKK2ZkX2Nsb25lX29wZW5kaXIgKGludCBmZCwg c3RydWN0IHNhdmVkX2N3ZCBjb25zdCAqY3dkKQoreworICBpZiAoUkVQTEFDRV9GQ0hESVIg fHwgISBjd2QpCisgICAgeworICAgICAgRElSICpkaXIgPSBOVUxMOworICAgICAgaW50IHNh dmVkX2Vycm5vID0gRU9QTk9UU1VQUDsKKyAgICAgIGNoYXIgYnVmW09QRU5BVF9CVUZGRVJf U0laRV07CisgICAgICBjaGFyICpwcm9jX2ZpbGUgPSBvcGVuYXRfcHJvY19uYW1lIChidWYs IGZkLCAiLiIpOworICAgICAgaWYgKHByb2NfZmlsZSkKKyAgICAgICAgeworICAgICAgICAg IGRpciA9IG9wZW5kaXIgKHByb2NfZmlsZSk7CisgICAgICAgICAgc2F2ZWRfZXJybm8gPSBl cnJubzsKKyAgICAgICAgICBpZiAocHJvY19maWxlICE9IGJ1ZikKKyAgICAgICAgICAgIGZy ZWUgKHByb2NfZmlsZSk7CisgICAgICAgIH0KKyMgaWYgUkVQTEFDRV9GQ0hESVIKKyAgICAg IGlmICghIGRpciAmJiBFWFBFQ1RFRF9FUlJOTyAoc2F2ZWRfZXJybm8pKQorICAgICAgICB7 CisgICAgICAgICAgY2hhciBjb25zdCAqbmFtZSA9IF9nbF9kaXJlY3RvcnlfbmFtZSAoZmQp OworICAgICAgICAgIHJldHVybiAobmFtZSA/IG9wZW5kaXIgKG5hbWUpIDogTlVMTCk7Cisg ICAgICAgIH0KKyMgZW5kaWYKKyAgICAgIGVycm5vID0gc2F2ZWRfZXJybm87CisgICAgICBy ZXR1cm4gZGlyOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChmY2hkaXIgKGZk KSAhPSAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgIGVsc2UKKyAgICAgICAgewor ICAgICAgICAgIERJUiAqZGlyID0gb3BlbmRpciAoIi4iKTsKKyAgICAgICAgICBpbnQgc2F2 ZWRfZXJybm8gPSBlcnJubzsKKyAgICAgICAgICBpZiAocmVzdG9yZV9jd2QgKGN3ZCkgIT0g MCkKKyAgICAgICAgICAgIG9wZW5hdF9yZXN0b3JlX2ZhaWwgKGVycm5vKTsKKyAgICAgICAg ICBlcnJubyA9IHNhdmVkX2Vycm5vOworICAgICAgICAgIHJldHVybiBkaXI7CisgICAgICAg IH0KKyAgICB9Cit9CisKKyNlbHNlIC8qIEhBVkVfRkRPUEVORElSICovCisKKyMgaW5jbHVk ZSA8ZXJybm8uaD4KKyMgaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworIyB1bmRlZiBmZG9wZW5k aXIKKworLyogTGlrZSBmZG9wZW5kaXIsIGJ1dCB3b3JrIGFyb3VuZCBHTlUvSHVyZCBidWcg YnkgdmFsaWRhdGluZyBGRC4gICovCisKK0RJUiAqCitycGxfZmRvcGVuZGlyIChpbnQgZmQp Cit7CisgIHN0cnVjdCBzdGF0IHN0OworICBpZiAoZnN0YXQgKGZkLCAmc3QpKQorICAgIHJl dHVybiBOVUxMOworICBpZiAoIVNfSVNESVIgKHN0LnN0X21vZGUpKQorICAgIHsKKyAgICAg IGVycm5vID0gRU5PVERJUjsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgcmV0dXJu IGZkb3BlbmRpciAoZmQpOworfQorCisjZW5kaWYgLyogSEFWRV9GRE9QRU5ESVIgKi8KCj09 PSBhZGRlZCBmaWxlICdsaWIvZnN0YXRhdC5jJwotLS0gbGliL2ZzdGF0YXQuYwkxOTcwLTAx LTAxIDAwOjAwOjAwICswMDAwCisrKyBsaWIvZnN0YXRhdC5jCTIwMTMtMDEtMjQgMDY6NTE6 MjUgKzAwMDAKQEAgLTAsMCArMSwxMzUgQEAKKy8qIFdvcmsgYXJvdW5kIGFuIGZzdGF0YXQg YnVnIG9uIFNvbGFyaXMgOS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA5LTIwMTMg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisg ICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu CisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5v dCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIFdyaXR0 ZW4gYnkgUGF1bCBFZ2dlcnQgYW5kIEppbSBNZXllcmluZy4gICovCisKKy8qIElmIHRoZSB1 c2VyJ3MgY29uZmlnLmggaGFwcGVucyB0byBpbmNsdWRlIDxzeXMvc3RhdC5oPiwgbGV0IGl0 IGluY2x1ZGUgb25seQorICAgdGhlIHN5c3RlbSdzIDxzeXMvc3RhdC5oPiBoZXJlLCBzbyB0 aGF0IG9yaWdfZnN0YXRhdCBkb2Vzbid0IHJlY3Vyc2UgdG8KKyAgIHJwbF9mc3RhdGF0LiAg Ki8KKyNkZWZpbmUgX19uZWVkX3N5c3RlbV9zeXNfc3RhdF9oCisjaW5jbHVkZSA8Y29uZmln Lmg+CisKKy8qIEdldCB0aGUgb3JpZ2luYWwgZGVmaW5pdGlvbiBvZiBmc3RhdGF0LiAgSXQg bWlnaHQgYmUgZGVmaW5lZCBhcyBhIG1hY3JvLiAgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMu aD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI3VuZGVmIF9fbmVlZF9zeXN0ZW1fc3lzX3N0 YXRfaAorCisjaWYgSEFWRV9GU1RBVEFUCitzdGF0aWMgaW50CitvcmlnX2ZzdGF0YXQgKGlu dCBmZCwgY2hhciBjb25zdCAqZmlsZW5hbWUsIHN0cnVjdCBzdGF0ICpidWYsIGludCBmbGFn cykKK3sKKyAgcmV0dXJuIGZzdGF0YXQgKGZkLCBmaWxlbmFtZSwgYnVmLCBmbGFncyk7Cit9 CisjZW5kaWYKKworLyogV3JpdGUgInN5cy9zdGF0LmgiIGhlcmUsIG5vdCA8c3lzL3N0YXQu aD4sIG90aGVyd2lzZSBPU0YvMSA1LjEgRFRLIGNjCisgICBlbGltaW5hdGVzIHRoaXMgaW5j bHVkZSBiZWNhdXNlIG9mIHRoZSBwcmVsaW1pbmFyeSAjaW5jbHVkZSA8c3lzL3N0YXQuaD4K KyAgIGFib3ZlLiAgKi8KKyNpbmNsdWRlICJzeXMvc3RhdC5oIgorCisjaW5jbHVkZSA8ZXJy bm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYg SEFWRV9GU1RBVEFUICYmIEhBVkVfV09SS0lOR19GU1RBVEFUX1pFUk9fRkxBRworCisjIGlm bmRlZiBMU1RBVF9GT0xMT1dTX1NMQVNIRURfU1lNTElOSworIyAgZGVmaW5lIExTVEFUX0ZP TExPV1NfU0xBU0hFRF9TWU1MSU5LIDAKKyMgZW5kaWYKKworLyogZnN0YXRhdCBzaG91bGQg YWx3YXlzIGZvbGxvdyBzeW1ib2xpYyBsaW5rcyB0aGF0IGVuZCBpbiAvLCBidXQgb24KKyAg IFNvbGFyaXMgOSBpdCBkb2Vzbid0IGlmIEFUX1NZTUxJTktfTk9GT0xMT1cgaXMgc3BlY2lm aWVkLgorICAgTGlrZXdpc2UsIHRyYWlsaW5nIHNsYXNoIG9uIGEgbm9uLWRpcmVjdG9yeSBz aG91bGQgYmUgYW4gZXJyb3IuCisgICBUaGVzZSBhcmUgdGhlIHNhbWUgcHJvYmxlbXMgdGhh dCBsc3RhdC5jIGFuZCBzdGF0LmMgYWRkcmVzcywgc28KKyAgIHNvbHZlIGl0IGluIGEgc2lt aWxhciB3YXkuCisKKyAgIEFJWCA3LjEgZnN0YXRhdCAoQVRfRkRDV0QsIC4uLiwgMCkgYWx3 YXlzIGZhaWxzLCB3aGljaCBpcyBhIGJ1Zy4KKyAgIFdvcmsgYXJvdW5kIHRoaXMgYnVnIGlm IEZTVEFUQVRfQVRfRkRDV0RfMF9CUk9LRU4gaXMgbm9uemVyby4gICovCisKK2ludAorcnBs X2ZzdGF0YXQgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwgc3RydWN0IHN0YXQgKnN0LCBp bnQgZmxhZykKK3sKKyAgaW50IHJlc3VsdCA9IG9yaWdfZnN0YXRhdCAoZmQsIGZpbGUsIHN0 LCBmbGFnKTsKKyAgc2l6ZV90IGxlbjsKKworICBpZiAoTFNUQVRfRk9MTE9XU19TTEFTSEVE X1NZTUxJTksgfHwgcmVzdWx0ICE9IDApCisgICAgcmV0dXJuIHJlc3VsdDsKKyAgbGVuID0g c3RybGVuIChmaWxlKTsKKyAgaWYgKGZsYWcgJiBBVF9TWU1MSU5LX05PRk9MTE9XKQorICAg IHsKKyAgICAgIC8qIEZpeCBsc3RhdCBiZWhhdmlvci4gICovCisgICAgICBpZiAoZmlsZVts ZW4gLSAxXSAhPSAnLycgfHwgU19JU0RJUiAoc3QtPnN0X21vZGUpKQorICAgICAgICByZXR1 cm4gMDsKKyAgICAgIGlmICghU19JU0xOSyAoc3QtPnN0X21vZGUpKQorICAgICAgICB7Cisg ICAgICAgICAgZXJybm8gPSBFTk9URElSOworICAgICAgICAgIHJldHVybiAtMTsKKyAgICAg ICAgfQorICAgICAgcmVzdWx0ID0gb3JpZ19mc3RhdGF0IChmZCwgZmlsZSwgc3QsIGZsYWcg JiB+QVRfU1lNTElOS19OT0ZPTExPVyk7CisgICAgfQorICAvKiBGaXggc3RhdCBiZWhhdmlv ci4gICovCisgIGlmIChyZXN1bHQgPT0gMCAmJiAhU19JU0RJUiAoc3QtPnN0X21vZGUpICYm IGZpbGVbbGVuIC0gMV0gPT0gJy8nKQorICAgIHsKKyAgICAgIGVycm5vID0gRU5PVERJUjsK KyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKyNlbHNl IC8qICEgKEhBVkVfRlNUQVRBVCAmJiBIQVZFX1dPUktJTkdfRlNUQVRBVF9aRVJPX0ZMQUcp ICovCisKKy8qIE9uIG1pbmd3LCB0aGUgZ251bGliIDxzeXMvc3RhdC5oPiBkZWZpbmVzICdz dGF0JyBhcyBhIGZ1bmN0aW9uLWxpa2UKKyAgIG1hY3JvOyBidXQgdXNpbmcgaXQgaW4gQVRf RlVOQ19GMiBjYXVzZXMgY29tcGlsYXRpb24gZmFpbHVyZQorICAgYmVjYXVzZSB0aGUgcHJl cHJvY2Vzc29yIHNlZXMgYSB1c2Ugb2YgYSBtYWNybyB0aGF0IHJlcXVpcmVzIHR3bworICAg YXJndW1lbnRzIGJ1dCBpcyBvbmx5IGdpdmVuIG9uZS4gIEhlbmNlLCB3ZSBuZWVkIGFuIGlu bGluZQorICAgZm9yd2FyZGVyIHRvIGdldCBwYXN0IHRoZSBwcmVwcm9jZXNzb3IuICAqLwor c3RhdGljIGludAorc3RhdF9mdW5jIChjaGFyIGNvbnN0ICpuYW1lLCBzdHJ1Y3Qgc3RhdCAq c3QpCit7CisgIHJldHVybiBzdGF0IChuYW1lLCBzdCk7Cit9CisKKy8qIExpa2V3aXNlLCBp ZiB0aGVyZSBpcyBubyBuYXRpdmUgJ2xzdGF0JywgdGhlbiB0aGUgZ251bGliCisgICA8c3lz L3N0YXQuaD4gZGVmaW5lZCBpdCBhcyBzdGF0LCB3aGljaCBhbHNvIG5lZWRzIGFkanVzdG1l bnQuICAqLworIyBpZiAhSEFWRV9MU1RBVAorIyAgdW5kZWYgbHN0YXQKKyMgIGRlZmluZSBs c3RhdCBzdGF0X2Z1bmMKKyMgZW5kaWYKKworLyogUmVwbGFjZW1lbnQgZm9yIFNvbGFyaXMn IGZ1bmN0aW9uIGJ5IHRoZSBzYW1lIG5hbWUuCisgICA8aHR0cDovL3d3dy5nb29nbGUuY29t L3NlYXJjaD9xPWZzdGF0YXQrc2l0ZTpkb2NzLnN1bi5jb20+CisgICBGaXJzdCwgdHJ5IHRv IHNpbXVsYXRlIGl0IHZpYSBsP3N0YXQgKCIvcHJvYy9zZWxmL2ZkL0ZEL0ZJTEUiKS4KKyAg IEZhaWxpbmcgdGhhdCwgc2ltdWxhdGUgaXQgdmlhIHNhdmVfY3dkL2ZjaGRpci8oc3RhdHxs c3RhdCkvcmVzdG9yZV9jd2QuCisgICBJZiBlaXRoZXIgdGhlIHNhdmVfY3dkIG9yIHRoZSBy ZXN0b3JlX2N3ZCBmYWlscyAocmVsYXRpdmVseSB1bmxpa2VseSksCisgICB0aGVuIGdpdmUg YSBkaWFnbm9zdGljIGFuZCBleGl0IG5vbnplcm8uCisgICBPdGhlcndpc2UsIHRoaXMgZnVu Y3Rpb24gd29ya3MganVzdCBsaWtlIFNvbGFyaXMnIGZzdGF0YXQuICAqLworCisjIGRlZmlu ZSBBVF9GVU5DX05BTUUgZnN0YXRhdAorIyBkZWZpbmUgQVRfRlVOQ19GMSBsc3RhdAorIyBk ZWZpbmUgQVRfRlVOQ19GMiBzdGF0X2Z1bmMKKyMgZGVmaW5lIEFUX0ZVTkNfVVNFX0YxX0NP TkQgQVRfU1lNTElOS19OT0ZPTExPVworIyBkZWZpbmUgQVRfRlVOQ19QT1NUX0ZJTEVfUEFS QU1fREVDTFMgLCBzdHJ1Y3Qgc3RhdCAqc3QsIGludCBmbGFnCisjIGRlZmluZSBBVF9GVU5D X1BPU1RfRklMRV9BUkdTICAgICAgICAsIHN0CisjIGluY2x1ZGUgImF0LWZ1bmMuYyIKKyMg dW5kZWYgQVRfRlVOQ19OQU1FCisjIHVuZGVmIEFUX0ZVTkNfRjEKKyMgdW5kZWYgQVRfRlVO Q19GMgorIyB1bmRlZiBBVF9GVU5DX1VTRV9GMV9DT05ECisjIHVuZGVmIEFUX0ZVTkNfUE9T VF9GSUxFX1BBUkFNX0RFQ0xTCisjIHVuZGVmIEFUX0ZVTkNfUE9TVF9GSUxFX0FSR1MKKwor I2VuZGlmIC8qICFIQVZFX0ZTVEFUQVQgKi8KCj09PSBtb2RpZmllZCBmaWxlICdsaWIvZ251 bGliLm1rJwotLS0gbGliL2dudWxpYi5tawkyMDEzLTAxLTA0IDAyOjE3OjQ5ICswMDAwCisr KyBsaWIvZ251bGliLm1rCTIwMTMtMDEtMjQgMDg6MDI6MTYgKzAwMDAKQEAgLTIxLDcgKzIx LDcgQEAKICMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRo YXQgcHJvZ3JhbS4KICMKICMgR2VuZXJhdGVkIGJ5IGdudWxpYi10b29sLgotIyBSZXByb2R1 Y2UgYnk6IGdudWxpYi10b29sIC0taW1wb3J0IC0tZGlyPS4gLS1saWI9bGliZ251IC0tc291 cmNlLWJhc2U9bGliIC0tbTQtYmFzZT1tNCAtLWRvYy1iYXNlPWRvYyAtLXRlc3RzLWJhc2U9 dGVzdHMgLS1hdXgtZGlyPWJ1aWxkLWF1eCAtLWF2b2lkPWF0LWludGVybmFsIC0tYXZvaWQ9 ZXJybm8gLS1hdm9pZD1mY2hkaXIgLS1hdm9pZD1mY250bCAtLWF2b2lkPWZzdGF0IC0tYXZv aWQ9bWFsbG9jLXBvc2l4IC0tYXZvaWQ9bXN2Yy1pbnZhbCAtLWF2b2lkPW1zdmMtbm90aHJv dyAtLWF2b2lkPW9wZW5hdC1kaWUgLS1hdm9pZD1vcGVuYXQtaCAtLWF2b2lkPXJhaXNlIC0t YXZvaWQ9c2F2ZS1jd2QgLS1hdm9pZD1zZWxlY3QgLS1hdm9pZD1zaWdwcm9jbWFzayAtLWF2 b2lkPXN5c190eXBlcyAtLWF2b2lkPXRocmVhZGxpYiAtLW1ha2VmaWxlLW5hbWU9Z251bGli Lm1rIC0tY29uZGl0aW9uYWwtZGVwZW5kZW5jaWVzIC0tbm8tbGlidG9vbCAtLW1hY3JvLXBy ZWZpeD1nbCAtLW5vLXZjLWZpbGVzIGFsbG9jYS1vcHQgYy1jdHlwZSBjLXN0cmNhc2UgY2Fy ZWFkbGlua2F0IGNsb3NlLXN0cmVhbSBjcnlwdG8vbWQ1IGNyeXB0by9zaGExIGNyeXB0by9z aGEyNTYgY3J5cHRvL3NoYTUxMiBkdG9hc3RyIGR0b3RpbWVzcGVjIGR1cDIgZW52aXJvbiBl eGVjaW5mbyBmYWNjZXNzYXQgZmNudGwtaCBmaWxlbW9kZSBnZXRsb2FkYXZnIGdldG9wdC1n bnUgZ2V0dGltZSBnZXR0aW1lb2ZkYXkgaWdub3JlLXZhbHVlIGludHByb3BzIGxhcmdlZmls ZSBsc3RhdCBtYW55d2FybmluZ3MgbWt0aW1lIHBzZWxlY3QgcHRocmVhZF9zaWdtYXNrIHB1 dGVudiByZWFkbGluayBzaWcyc3RyIHNvY2tsZW4gc3RhdC10aW1lIHN0ZGFsaWduIHN0ZGFy ZyBzdGRib29sIHN0ZGlvIHN0cmZ0aW1lIHN0cnRvaW1heCBzdHJ0b3VtYXggc3ltbGluayBz eXNfc3RhdCBzeXNfdGltZSB0aW1lIHRpbWVyLXRpbWUgdGltZXNwZWMtYWRkIHRpbWVzcGVj LXN1YiB1bnNldGVudiB1dGltZW5zIHdhcm5pbmdzCisjIFJlcHJvZHVjZSBieTogZ251bGli LXRvb2wgLS1pbXBvcnQgLS1kaXI9LiAtLWxpYj1saWJnbnUgLS1zb3VyY2UtYmFzZT1saWIg LS1tNC1iYXNlPW00IC0tZG9jLWJhc2U9ZG9jIC0tdGVzdHMtYmFzZT10ZXN0cyAtLWF1eC1k aXI9YnVpbGQtYXV4IC0tYXZvaWQ9ZHVwIC0tYXZvaWQ9ZXJybm8gLS1hdm9pZD1mY2hkaXIg LS1hdm9pZD1mY250bCAtLWF2b2lkPWZzdGF0IC0tYXZvaWQ9bWFsbG9jLXBvc2l4IC0tYXZv aWQ9bXN2Yy1pbnZhbCAtLWF2b2lkPW1zdmMtbm90aHJvdyAtLWF2b2lkPW9wZW4gLS1hdm9p ZD1vcGVuYXQtZGllIC0tYXZvaWQ9b3BlbmRpciAtLWF2b2lkPXJhaXNlIC0tYXZvaWQ9c2F2 ZS1jd2QgLS1hdm9pZD1zZWxlY3QgLS1hdm9pZD1zaWdwcm9jbWFzayAtLWF2b2lkPXN5c190 eXBlcyAtLWF2b2lkPXRocmVhZGxpYiAtLW1ha2VmaWxlLW5hbWU9Z251bGliLm1rIC0tY29u ZGl0aW9uYWwtZGVwZW5kZW5jaWVzIC0tbm8tbGlidG9vbCAtLW1hY3JvLXByZWZpeD1nbCAt LW5vLXZjLWZpbGVzIGFsbG9jYS1vcHQgYy1jdHlwZSBjLXN0cmNhc2UgY2FyZWFkbGlua2F0 IGNsb3NlLXN0cmVhbSBjcnlwdG8vbWQ1IGNyeXB0by9zaGExIGNyeXB0by9zaGEyNTYgY3J5 cHRvL3NoYTUxMiBkdG9hc3RyIGR0b3RpbWVzcGVjIGR1cDIgZW52aXJvbiBleGVjaW5mbyBm YWNjZXNzYXQgZmNudGwtaCBmZG9wZW5kaXIgZmlsZW1vZGUgZnN0YXRhdCBnZXRsb2FkYXZn IGdldG9wdC1nbnUgZ2V0dGltZSBnZXR0aW1lb2ZkYXkgaWdub3JlLXZhbHVlIGludHByb3Bz IGxhcmdlZmlsZSBsc3RhdCBtYW55d2FybmluZ3MgbWt0aW1lIHBzZWxlY3QgcHRocmVhZF9z aWdtYXNrIHB1dGVudiByZWFkbGluayByZWFkbGlua2F0IHNpZzJzdHIgc29ja2xlbiBzdGF0 LXRpbWUgc3RkYWxpZ24gc3RkYXJnIHN0ZGJvb2wgc3RkaW8gc3RyZnRpbWUgc3RydG9pbWF4 IHN0cnRvdW1heCBzeW1saW5rIHN5c19zdGF0IHN5c190aW1lIHRpbWUgdGltZXItdGltZSB0 aW1lc3BlYy1hZGQgdGltZXNwZWMtc3ViIHVuc2V0ZW52IHV0aW1lbnMgd2FybmluZ3MKIAog CiBNT1NUTFlDTEVBTkZJTEVTICs9IGNvcmUgKi5zdGFja2R1bXAKQEAgLTY0LDYgKzY0LDE3 IEBACiAKICMjIGVuZCAgIGdudWxpYiBtb2R1bGUgYWxsb2NhdG9yCiAKKyMjIGJlZ2luIGdu dWxpYiBtb2R1bGUgYXQtaW50ZXJuYWwKKworaWYgZ2xfR05VTElCX0VOQUJMRURfMjYwOTQx YzBlNWRjNjdlYzllODdkMWZiMzIxYzMwMGIKKworZW5kaWYKK0VYVFJBX0RJU1QgKz0gb3Bl bmF0LXByaXYuaCBvcGVuYXQtcHJvYy5jCisKK0VYVFJBX2xpYmdudV9hX1NPVVJDRVMgKz0g b3BlbmF0LXByb2MuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGF0LWludGVybmFsCisK ICMjIGJlZ2luIGdudWxpYiBtb2R1bGUgYy1jdHlwZQogCiBsaWJnbnVfYV9TT1VSQ0VTICs9 IGMtY3R5cGUuaCBjLWN0eXBlLmMKQEAgLTEyNCw2ICsxMzUsNTQgQEAKIAogIyMgZW5kICAg Z251bGliIG1vZHVsZSBjcnlwdG8vc2hhNTEyCiAKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUg ZGlyZW50CisKK0JVSUxUX1NPVVJDRVMgKz0gZGlyZW50LmgKKworIyBXZSBuZWVkIHRoZSBm b2xsb3dpbmcgaW4gb3JkZXIgdG8gY3JlYXRlIDxkaXJlbnQuaD4gd2hlbiB0aGUgc3lzdGVt CisjIGRvZXNuJ3QgaGF2ZSBvbmUgdGhhdCB3b3JrcyB3aXRoIHRoZSBnaXZlbiBjb21waWxl ci4KK2RpcmVudC5oOiBkaXJlbnQuaW4uaCAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1 cyAkKENYWERFRlNfSCkgJChBUkdfTk9OTlVMTF9IKSAkKFdBUk5fT05fVVNFX0gpCisJJChB TV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKwl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBH RU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nOyBcCisJICBzZWQgLWUgJ3N8QCcnR1VBUkRf UFJFRklYJydAfEdMfGcnIFwKKwkgICAgICAtZSAnc3xAJydIQVZFX0RJUkVOVF9IJydAfCQo SEFWRV9ESVJFTlRfSCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwk KElOQ0xVREVfTkVYVCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9TWVNURU1fSEVB REVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8ZycgXAorCSAgICAgIC1lICdzfEAnJ1BS QUdNQV9DT0xVTU5TJydAfEBQUkFHTUFfQ09MVU1OU0B8ZycgXAorCSAgICAgIC1lICdzfEAn J05FWFRfRElSRU5UX0gnJ0B8JChORVhUX0RJUkVOVF9IKXxnJyBcCisJICAgICAgLWUgJ3Mv QCcnR05VTElCX09QRU5ESVInJ0AvJChHTlVMSUJfT1BFTkRJUikvZycgXAorCSAgICAgIC1l ICdzL0AnJ0dOVUxJQl9SRUFERElSJydALyQoR05VTElCX1JFQURESVIpL2cnIFwKKwkgICAg ICAtZSAncy9AJydHTlVMSUJfUkVXSU5ERElSJydALyQoR05VTElCX1JFV0lORERJUikvZycg XAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9DTE9TRURJUicnQC8kKEdOVUxJQl9DTE9TRURJ UikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9ESVJGRCcnQC8kKEdOVUxJQl9ESVJG RCkvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GRE9QRU5ESVInJ0AvJChHTlVMSUJf RkRPUEVORElSKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnR05VTElCX1NDQU5ESVInJ0AvJChH TlVMSUJfU0NBTkRJUikvZycgXAorCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9BTFBIQVNPUlQn J0AvJChHTlVMSUJfQUxQSEFTT1JUKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnSEFWRV9PUEVO RElSJydALyQoSEFWRV9PUEVORElSKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnSEFWRV9SRUFE RElSJydALyQoSEFWRV9SRUFERElSKS9nJyBcCisJICAgICAgLWUgJ3MvQCcnSEFWRV9SRVdJ TkRESVInJ0AvJChIQVZFX1JFV0lORERJUikvZycgXAorCSAgICAgIC1lICdzL0AnJ0hBVkVf Q0xPU0VESVInJ0AvJChIQVZFX0NMT1NFRElSKS9nJyBcCisJICAgICAgLWUgJ3N8QCcnSEFW RV9ERUNMX0RJUkZEJydAfCQoSEFWRV9ERUNMX0RJUkZEKXxnJyBcCisJICAgICAgLWUgJ3N8 QCcnSEFWRV9ERUNMX0ZET1BFTkRJUicnQHwkKEhBVkVfREVDTF9GRE9QRU5ESVIpfGcnIFwK KwkgICAgICAtZSAnc3xAJydIQVZFX0ZET1BFTkRJUicnQHwkKEhBVkVfRkRPUEVORElSKXxn JyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9TQ0FORElSJydAfCQoSEFWRV9TQ0FORElSKXxn JyBcCisJICAgICAgLWUgJ3N8QCcnSEFWRV9BTFBIQVNPUlQnJ0B8JChIQVZFX0FMUEhBU09S VCl8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfT1BFTkRJUicnQHwkKFJFUExBQ0Vf T1BFTkRJUil8ZycgXAorCSAgICAgIC1lICdzfEAnJ1JFUExBQ0VfQ0xPU0VESVInJ0B8JChS RVBMQUNFX0NMT1NFRElSKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9ESVJGRCcn QHwkKFJFUExBQ0VfRElSRkQpfGcnIFwKKwkgICAgICAtZSAnc3xAJydSRVBMQUNFX0ZET1BF TkRJUicnQHwkKFJFUExBQ0VfRkRPUEVORElSKXxnJyBcCisJICAgICAgLWUgJy9kZWZpbml0 aW9ucyBvZiBfR0xfRlVOQ0RFQ0xfUlBML3IgJChDWFhERUZTX0gpJyBcCisJICAgICAgLWUg Jy9kZWZpbml0aW9uIG9mIF9HTF9BUkdfTk9OTlVMTC9yICQoQVJHX05PTk5VTExfSCknIFwK KwkgICAgICAtZSAnL2RlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFL3IgJChXQVJOX09O X1VTRV9IKScgXAorCSAgICAgIDwgJChzcmNkaXIpL2RpcmVudC5pbi5oOyBcCisJfSA+ICRA LXQgJiYgXAorCW12ICRALXQgJEAKK01PU1RMWUNMRUFORklMRVMgKz0gZGlyZW50LmggZGly ZW50LmgtdAorCitFWFRSQV9ESVNUICs9IGRpcmVudC5pbi5oCisKKyMjIGVuZCAgIGdudWxp YiBtb2R1bGUgZGlyZW50CisKICMjIGJlZ2luIGdudWxpYiBtb2R1bGUgZG9zbmFtZQogCiBp ZiBnbF9HTlVMSUJfRU5BQkxFRF9kb3NuYW1lCkBAIC0yMzgsNiArMjk3LDE1IEBACiAKICMj IGVuZCAgIGdudWxpYiBtb2R1bGUgZmNudGwtaAogCisjIyBiZWdpbiBnbnVsaWIgbW9kdWxl IGZkb3BlbmRpcgorCisKK0VYVFJBX0RJU1QgKz0gZmRvcGVuZGlyLmMKKworRVhUUkFfbGli Z251X2FfU09VUkNFUyArPSBmZG9wZW5kaXIuYworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxl IGZkb3BlbmRpcgorCiAjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGZpbGVtb2RlCiAKIGxpYmdu dV9hX1NPVVJDRVMgKz0gZmlsZW1vZGUuYwpAQCAtMjU1LDYgKzMyMywxNSBAQAogCiAjIyBl bmQgICBnbnVsaWIgbW9kdWxlIGZwZW5kaW5nCiAKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUg ZnN0YXRhdAorCisKK0VYVFJBX0RJU1QgKz0gYXQtZnVuYy5jIGZzdGF0YXQuYworCitFWFRS QV9saWJnbnVfYV9TT1VSQ0VTICs9IGF0LWZ1bmMuYyBmc3RhdGF0LmMKKworIyMgZW5kICAg Z251bGliIG1vZHVsZSBmc3RhdGF0CisKICMjIGJlZ2luIGdudWxpYiBtb2R1bGUgZ2V0Z3Jv dXBzCiAKIGlmIGdsX0dOVUxJQl9FTkFCTEVEX2dldGdyb3VwcwpAQCAtNDEyLDYgKzQ4OSwx NSBAQAogCiAjIyBlbmQgICBnbnVsaWIgbW9kdWxlIG1rdGltZQogCisjIyBiZWdpbiBnbnVs aWIgbW9kdWxlIG9wZW5hdC1oCisKK2lmIGdsX0dOVUxJQl9FTkFCTEVEXzAzZTBhYWFkNGNi ODljYTc1NzY1M2JkMzY3YTZjY2I3CisKK2VuZGlmCitFWFRSQV9ESVNUICs9IG9wZW5hdC5o CisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgb3BlbmF0LWgKKwogIyMgYmVnaW4gZ251bGli IG1vZHVsZSBwYXRobWF4CiAKIGlmIGdsX0dOVUxJQl9FTkFCTEVEX3BhdGhtYXgKQEAgLTQ1 Nyw2ICs1NDMsMTUgQEAKIAogIyMgZW5kICAgZ251bGliIG1vZHVsZSByZWFkbGluawogCisj IyBiZWdpbiBnbnVsaWIgbW9kdWxlIHJlYWRsaW5rYXQKKworCitFWFRSQV9ESVNUICs9IGF0 LWZ1bmMuYyByZWFkbGlua2F0LmMKKworRVhUUkFfbGliZ251X2FfU09VUkNFUyArPSBhdC1m dW5jLmMgcmVhZGxpbmthdC5jCisKKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgcmVhZGxpbmth dAorCiAjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHJvb3QtdWlkCiAKIGlmIGdsX0dOVUxJQl9F TkFCTEVEXzYwOTllOTczN2Y3NTdkYjM2YzQ3ZmE5ZDlmMDJlODhjCgo9PT0gYWRkZWQgZmls ZSAnbGliL29wZW5hdC1kaWUuYycKLS0tIGxpYi9vcGVuYXQtZGllLmMJMTk3MC0wMS0wMSAw MDowMDowMCArMDAwMAorKysgbGliL29wZW5hdC1kaWUuYwkyMDEzLTAxLTI0IDA2OjUxOjI1 ICswMDAwCkBAIC0wLDAgKzEsNiBAQAorLyogUmVzcG9uZCB0byBhIHNhdmUtIG9yIHJlc3Rv cmUtY3dkIGZhaWx1cmUuCisgICBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gd2l0aCBFbWFj cy4gICovCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSAib3BlbmF0LmgiCit2b2lk IG9wZW5hdF9zYXZlX2ZhaWwgKGludCBlcnJudW0pIHsgYWJvcnQgKCk7IH0KK3ZvaWQgb3Bl bmF0X3Jlc3RvcmVfZmFpbCAoaW50IGVycm51bSkgeyBhYm9ydCAoKTsgfQoKPT09IGFkZGVk IGZpbGUgJ2xpYi9vcGVuYXQtcHJpdi5oJwotLS0gbGliL29wZW5hdC1wcml2LmgJMTk3MC0w MS0wMSAwMDowMDowMCArMDAwMAorKysgbGliL29wZW5hdC1wcml2LmgJMjAxMy0wMS0yNCAw Njo1MToyNSArMDAwMApAQCAtMCwwICsxLDY0IEBACisvKiBJbnRlcm5hbHMgZm9yIG9wZW5h dC1saWtlIGZ1bmN0aW9ucy4KKworICAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYsIDIwMDkt MjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0 aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAg SWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyog d3JpdHRlbiBieSBKaW0gTWV5ZXJpbmcgKi8KKworI2lmbmRlZiBfR0xfSEVBREVSX09QRU5B VF9QUklWCisjZGVmaW5lIF9HTF9IRUFERVJfT1BFTkFUX1BSSVYKKworI2luY2x1ZGUgPGVy cm5vLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKy8q IE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRoYXQgaXQgaXMgc2FmZSB0byBhbGxvY2F0ZSBh cyBhIHNpbmdsZQorICAgYXJyYXkgb24gdGhlIHN0YWNrLCBhbmQgdGhhdCBpcyBrbm93biBh cyBhIGNvbXBpbGUtdGltZSBjb25zdGFudC4KKyAgIFRoZSBhc3N1bXB0aW9uIGlzIHRoYXQg d2UnbGwgdG91Y2ggdGhlIGFycmF5IHZlcnkgcXVpY2tseSwgb3IgYQorICAgdGVtcG9yYXJ5 IHZlcnkgbmVhciB0aGUgYXJyYXksIHByb3Zva2luZyBhbiBvdXQtb2YtbWVtb3J5IHRyYXAu ICBPbgorICAgc29tZSBvcGVyYXRpbmcgc3lzdGVtcywgdGhlcmUgaXMgb25seSBvbmUgZ3Vh cmQgcGFnZSBmb3IgdGhlIHN0YWNrLAorICAgYW5kIGEgcGFnZSBzaXplIGNhbiBiZSBhcyBz bWFsbCBhcyA0MDk2IGJ5dGVzLiAgU3VidHJhY3QgNjQgaW4gdGhlCisgICBob3BlIHRoYXQg dGhpcyB3aWxsIGxldCB0aGUgY29tcGlsZXIgdG91Y2ggYSBuZWFyYnkgdGVtcG9yYXJ5IGFu ZAorICAgcHJvdm9rZSBhIHRyYXAuICAqLworI2RlZmluZSBTQUZFUl9BTExPQ0FfTUFYICg0 MDk2IC0gNjQpCisKKyNkZWZpbmUgU0FGRVJfQUxMT0NBKG0pICgobSkgPCBTQUZFUl9BTExP Q0FfTUFYID8gKG0pIDogU0FGRVJfQUxMT0NBX01BWCkKKworI2lmIGRlZmluZWQgUEFUSF9N QVgKKyMgZGVmaW5lIE9QRU5BVF9CVUZGRVJfU0laRSBTQUZFUl9BTExPQ0EgKFBBVEhfTUFY KQorI2VsaWYgZGVmaW5lZCBfWE9QRU5fUEFUSF9NQVgKKyMgZGVmaW5lIE9QRU5BVF9CVUZG RVJfU0laRSBTQUZFUl9BTExPQ0EgKF9YT1BFTl9QQVRIX01BWCkKKyNlbHNlCisjIGRlZmlu ZSBPUEVOQVRfQlVGRkVSX1NJWkUgU0FGRVJfQUxMT0NBICgxMDI0KQorI2VuZGlmCisKK2No YXIgKm9wZW5hdF9wcm9jX25hbWUgKGNoYXIgYnVmW09QRU5BVF9CVUZGRVJfU0laRV0sIGlu dCBmZCwgY2hhciBjb25zdCAqZmlsZSk7CisKKy8qIFRyeWluZyB0byBhY2Nlc3MgYSBCVUlM RF9QUk9DX05BTUUgZmlsZSB3aWxsIGZhaWwgb24gc3lzdGVtcyB3aXRob3V0CisgICAvcHJv YyBzdXBwb3J0LCBhbmQgZXZlbiBvbiBzeXN0ZW1zICp3aXRoKiBQcm9jRlMgc3VwcG9ydC4g IFJldHVybgorICAgbm9uemVybyBpZiB0aGUgZmFpbHVyZSBtYXkgYmUgbGVnaXRpbWF0ZSwg ZS5nLiwgYmVjYXVzZSAvcHJvYyBpcyBub3QKKyAgIHJlYWRhYmxlLCBvciB0aGUgcGFydGlj dWxhciAuLi4vZmQvTiBkaXJlY3RvcnkgaXMgbm90IHByZXNlbnQuICAqLworI2RlZmluZSBF WFBFQ1RFRF9FUlJOTyhFcnJubykgICAgICAgICAgICAgICAgICAgXAorICAoKEVycm5vKSA9 PSBFTk9URElSIHx8IChFcnJubykgPT0gRU5PRU5UICAgICAgXAorICAgfHwgKEVycm5vKSA9 PSBFUEVSTSB8fCAoRXJybm8pID09IEVBQ0NFUyAgICAgXAorICAgfHwgKEVycm5vKSA9PSBF Tk9TWVMgLyogU29sYXJpcyA4ICovICAgICAgICAgXAorICAgfHwgKEVycm5vKSA9PSBFT1BO T1RTVVBQIC8qIEZyZWVCU0QgKi8pCisKKy8qIFdyYXBwZXIgZnVuY3Rpb24gc2hhcmVkIGFt b25nIGxpbmthdCBhbmQgcmVuYW1lYXQuICAqLworaW50IGF0X2Z1bmMyIChpbnQgZmQxLCBj aGFyIGNvbnN0ICpmaWxlMSwKKyAgICAgICAgICAgICAgaW50IGZkMiwgY2hhciBjb25zdCAq ZmlsZTIsCisgICAgICAgICAgICAgIGludCAoKmZ1bmMpIChjaGFyIGNvbnN0ICpmaWxlMSwg Y2hhciBjb25zdCAqZmlsZTIpKTsKKworI2VuZGlmIC8qIF9HTF9IRUFERVJfT1BFTkFUX1BS SVYgKi8KCj09PSBhZGRlZCBmaWxlICdsaWIvb3BlbmF0LXByb2MuYycKLS0tIGxpYi9vcGVu YXQtcHJvYy5jCTE5NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDAKKysrIGxpYi9vcGVuYXQtcHJv Yy5jCTIwMTMtMDEtMjQgMDY6NTE6MjUgKzAwMDAKQEAgLTAsMCArMSwxMTAgQEAKKy8qIENy ZWF0ZSAvcHJvYy9zZWxmL2ZkLXJlbGF0ZWQgbmFtZXMgZm9yIHN1YmZpbGVzIG9mIG9wZW4g ZGlyZWN0b3JpZXMuCisKKyAgIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOS0yMDEzIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2 ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl CisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNl ZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBXcml0dGVuIGJ5 IFBhdWwgRWdnZXJ0LiAgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSAi b3BlbmF0LXByaXYuaCIKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5 cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+Cisj aW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5p c3RkLmg+CisKKyNpbmNsdWRlICJpbnRwcm9wcy5oIgorCisvKiBUaGUgcmVzdWx0cyBvZiBv cGVuKCkgaW4gdGhpcyBmaWxlIGFyZSBub3QgdXNlZCB3aXRoIGZjaGRpciwKKyAgIGFuZCB3 ZSBkbyBub3QgbGVhayBmZHMgdG8gYW55IHNpbmdsZS10aHJlYWRlZCBjb2RlIHRoYXQgY291 bGQgdXNlIHN0ZGlvLAorICAgdGhlcmVmb3JlIHNhdmUgc29tZSB1bm5lY2Vzc2FyeSB3b3Jr IGluIGZjaGRpci5jLgorICAgRklYTUUgLSBpZiB0aGUga2VybmVsIGV2ZXIgYWRkcyBzdXBw b3J0IGZvciBtdWx0aS10aHJlYWQgc2FmZXR5IGZvcgorICAgYXZvaWRpbmcgc3RhbmRhcmQg ZmRzLCB0aGVuIHdlIHNob3VsZCB1c2Ugb3Blbl9zYWZlci4gICovCisjdW5kZWYgb3Blbgor I3VuZGVmIGNsb3NlCisKKyNkZWZpbmUgUFJPQ19TRUxGX0ZEX0ZPUk1BVCAiL3Byb2Mvc2Vs Zi9mZC8lZC8lcyIKKworI2RlZmluZSBQUk9DX1NFTEZfRkRfTkFNRV9TSVpFX0JPVU5EKGxl bikgXAorICAoc2l6ZW9mIFBST0NfU0VMRl9GRF9GT1JNQVQgLSBzaXplb2YgIiVkJXMiIFwK KyAgICsgSU5UX1NUUkxFTl9CT1VORCAoaW50KSArIChsZW4pICsgMSkKKworCisvKiBTZXQg QlVGIHRvIHRoZSBleHBhbnNpb24gb2YgUFJPQ19TRUxGX0ZEX0ZPUk1BVCwgdXNpbmcgRkQg YW5kIEZJTEUKKyAgIHJlc3BlY3RpdmVseSBmb3IgJWQgYW5kICVzLiAgSWYgc3VjY2Vzc2Z1 bCwgcmV0dXJuIEJVRiBpZiB0aGUKKyAgIHJlc3VsdCBmaXRzIGluIEJVRiwgZHluYW1pY2Fs bHkgYWxsb2NhdGVkIG1lbW9yeSBvdGhlcndpc2UuICBCdXQKKyAgIHJldHVybiBOVUxMIGlm IC9wcm9jIGlzIG5vdCByZWxpYWJsZSwgZWl0aGVyIGJlY2F1c2UgdGhlIG9wZXJhdGluZwor ICAgc3lzdGVtIHN1cHBvcnQgaXMgbGFja2luZyBvciBiZWNhdXNlIG1lbW9yeSBpcyBsb3cu ICAqLworY2hhciAqCitvcGVuYXRfcHJvY19uYW1lIChjaGFyIGJ1ZltPUEVOQVRfQlVGRkVS X1NJWkVdLCBpbnQgZmQsIGNoYXIgY29uc3QgKmZpbGUpCit7CisgIHN0YXRpYyBpbnQgcHJv Y19zdGF0dXMgPSAwOworCisgIC8qIE1ha2Ugc3VyZSB0aGUgY2FsbGVyIGdldHMgRU5PRU5U IHdoZW4gYXBwcm9wcmlhdGUuICAqLworICBpZiAoISpmaWxlKQorICAgIHsKKyAgICAgIGJ1 ZlswXSA9ICdcMCc7CisgICAgICByZXR1cm4gYnVmOworICAgIH0KKworICBpZiAoISBwcm9j X3N0YXR1cykKKyAgICB7CisgICAgICAvKiBTZXQgUFJPQ19TVEFUVVMgdG8gYSBwb3NpdGl2 ZSB2YWx1ZSBpZiAvcHJvYy9zZWxmL2ZkIGlzCisgICAgICAgICByZWxpYWJsZSwgYW5kIGEg bmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLiAgU29sYXJpcyAxMAorICAgICAgICAgL3Byb2Mv c2VsZi9mZCBtaXNoYW5kbGVzICIuLiIsIGFuZCBhbnkgZmlsZSBuYW1lIG1pZ2h0IGV4cGFu ZAorICAgICAgICAgdG8gIi4uIiBhZnRlciBzeW1ib2xpYyBsaW5rIGV4cGFuc2lvbiwgc28g YXZvaWQgL3Byb2Mvc2VsZi9mZAorICAgICAgICAgaWYgaXQgbWlzaGFuZGxlcyAiLi4iLiAg U29sYXJpcyAxMCBoYXMgb3BlbmF0LCBidXQgdGhpcworICAgICAgICAgcHJvYmxlbSBpcyBl eGhpYml0ZWQgb24gY29kZSB0aGF0IGJ1aWx0IG9uIFNvbGFyaXMgOCBhbmQKKyAgICAgICAg IHJ1bm5pbmcgb24gU29sYXJpcyAxMC4gICovCisKKyAgICAgIGludCBwcm9jX3NlbGZfZmQg PSBvcGVuICgiL3Byb2Mvc2VsZi9mZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgT19TRUFSQ0ggfCBPX0RJUkVDVE9SWSB8IE9fTk9DVFRZIHwgT19OT05CTE9DSyk7Cisg ICAgICBpZiAocHJvY19zZWxmX2ZkIDwgMCkKKyAgICAgICAgcHJvY19zdGF0dXMgPSAtMTsK KyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIC8qIERldGVjdCB3aGV0aGVyIC9w cm9jL3NlbGYvZmQvJWkvLi4vZmQgZXhpc3RzLCB3aGVyZSAlaSBpcyB0aGUKKyAgICAgICAg ICAgICBudW1iZXIgb2YgYSBmaWxlIGRlc2NyaXB0b3Igb3BlbiBvbiAvcHJvYy9zZWxmL2Zk LiAgT24gTGludXgsCisgICAgICAgICAgICAgdGhhdCBuYW1lIHJlc29sdmVzIHRvIC9wcm9j L3NlbGYvZmQsIHdoaWNoIHdhcyBvcGVuZWQgYWJvdmUuCisgICAgICAgICAgICAgSG93ZXZl ciwgb24gU29sYXJpcywgaXQgbWF5IHJlc29sdmUgdG8gL3Byb2Mvc2VsZi9mZC9mZCwgd2hp Y2gKKyAgICAgICAgICAgICBjYW5ub3QgZXhpc3QsIHNpbmNlIGFsbCBuYW1lcyBpbiAvcHJv Yy9zZWxmL2ZkIGFyZSBudW1lcmljLiAgKi8KKyAgICAgICAgICBjaGFyIGRvdGRvdF9idWZb UFJPQ19TRUxGX0ZEX05BTUVfU0laRV9CT1VORCAoc2l6ZW9mICIuLi9mZCIgLSAxKV07Cisg ICAgICAgICAgc3ByaW50ZiAoZG90ZG90X2J1ZiwgUFJPQ19TRUxGX0ZEX0ZPUk1BVCwgcHJv Y19zZWxmX2ZkLCAiLi4vZmQiKTsKKyAgICAgICAgICBwcm9jX3N0YXR1cyA9IGFjY2VzcyAo ZG90ZG90X2J1ZiwgRl9PSykgPyAtMSA6IDE7CisgICAgICAgICAgY2xvc2UgKHByb2Nfc2Vs Zl9mZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgaWYgKHByb2Nfc3RhdHVzIDwgMCkKKyAg ICByZXR1cm4gTlVMTDsKKyAgZWxzZQorICAgIHsKKyAgICAgIHNpemVfdCBidWZzaXplID0g UFJPQ19TRUxGX0ZEX05BTUVfU0laRV9CT1VORCAoc3RybGVuIChmaWxlKSk7CisgICAgICBj aGFyICpyZXN1bHQgPSBidWY7CisgICAgICBpZiAoT1BFTkFUX0JVRkZFUl9TSVpFIDwgYnVm c2l6ZSkKKyAgICAgICAgeworICAgICAgICAgIHJlc3VsdCA9IG1hbGxvYyAoYnVmc2l6ZSk7 CisgICAgICAgICAgaWYgKCEgcmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7Cisg ICAgICAgIH0KKyAgICAgIHNwcmludGYgKHJlc3VsdCwgUFJPQ19TRUxGX0ZEX0ZPUk1BVCwg ZmQsIGZpbGUpOworICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cit9Cgo9PT0gYWRkZWQg ZmlsZSAnbGliL29wZW5hdC5oJwotLS0gbGliL29wZW5hdC5oCTE5NzAtMDEtMDEgMDA6MDA6 MDAgKzAwMDAKKysrIGxpYi9vcGVuYXQuaAkyMDEzLTAxLTI0IDA2OjUxOjI1ICswMDAwCkBA IC0wLDAgKzEsMTIwIEBACisvKiBwcm92aWRlIGEgcmVwbGFjZW1lbnQgb3BlbmF0IGZ1bmN0 aW9uCisgICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiwgMjAwOC0yMDEzIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9u IDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0 cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiB3cml0dGVuIGJ5IEppbSBN ZXllcmluZyAqLworCisjaWZuZGVmIF9HTF9IRUFERVJfT1BFTkFUCisjZGVmaW5lIF9HTF9I RUFERVJfT1BFTkFUCisKKyNpbmNsdWRlIDxmY250bC5oPgorCisjaW5jbHVkZSA8c3lzL3R5 cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNp bmNsdWRlIDxzdGRib29sLmg+CisKK19HTF9JTkxJTkVfSEVBREVSX0JFR0lOCisKKyNpZiAh SEFWRV9PUEVOQVQKKworaW50IG9wZW5hdF9wZXJtaXNzaXZlIChpbnQgZmQsIGNoYXIgY29u c3QgKmZpbGUsIGludCBmbGFncywgbW9kZV90IG1vZGUsCisgICAgICAgICAgICAgICAgICAg ICAgIGludCAqY3dkX2Vycm5vKTsKK2Jvb2wgb3BlbmF0X25lZWRzX2ZjaGRpciAodm9pZCk7 CisKKyNlbHNlCisKKyMgZGVmaW5lIG9wZW5hdF9wZXJtaXNzaXZlKEZkLCBGaWxlLCBGbGFn cywgTW9kZSwgQ3dkX2Vycm5vKSBcCisgICAgb3BlbmF0IChGZCwgRmlsZSwgRmxhZ3MsIE1v ZGUpCisjIGRlZmluZSBvcGVuYXRfbmVlZHNfZmNoZGlyKCkgZmFsc2UKKworI2VuZGlmCisK K19Ob3JldHVybiB2b2lkIG9wZW5hdF9yZXN0b3JlX2ZhaWwgKGludCk7CitfTm9yZXR1cm4g dm9pZCBvcGVuYXRfc2F2ZV9mYWlsIChpbnQpOworCisvKiBVc2luZyB0aGVzZSBmdW5jdGlv biBuYW1lcyBtYWtlcyBhcHBsaWNhdGlvbiBjb2RlCisgICBzbGlnaHRseSBtb3JlIHJlYWRh YmxlIHRoYW4gaXQgd291bGQgYmUgd2l0aAorICAgZmNob3duYXQgKC4uLiwgMCkgb3IgZmNo b3duYXQgKC4uLiwgQVRfU1lNTElOS19OT0ZPTExPVykuICAqLworCisjaWYgR05VTElCX0ZD SE9XTkFUCisKKyMgaWZuZGVmIEZDSE9XTkFUX0lOTElORQorIyAgZGVmaW5lIEZDSE9XTkFU X0lOTElORSBfR0xfSU5MSU5FCisjIGVuZGlmCisKK0ZDSE9XTkFUX0lOTElORSBpbnQKK2No b3duYXQgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwgdWlkX3Qgb3duZXIsIGdpZF90IGdy b3VwKQoreworICByZXR1cm4gZmNob3duYXQgKGZkLCBmaWxlLCBvd25lciwgZ3JvdXAsIDAp OworfQorCitGQ0hPV05BVF9JTkxJTkUgaW50CitsY2hvd25hdCAoaW50IGZkLCBjaGFyIGNv bnN0ICpmaWxlLCB1aWRfdCBvd25lciwgZ2lkX3QgZ3JvdXApCit7CisgIHJldHVybiBmY2hv d25hdCAoZmQsIGZpbGUsIG93bmVyLCBncm91cCwgQVRfU1lNTElOS19OT0ZPTExPVyk7Cit9 CisKKyNlbmRpZgorCisjaWYgR05VTElCX0ZDSE1PREFUCisKKyMgaWZuZGVmIEZDSE1PREFU X0lOTElORQorIyAgZGVmaW5lIEZDSE1PREFUX0lOTElORSBfR0xfSU5MSU5FCisjIGVuZGlm CisKK0ZDSE1PREFUX0lOTElORSBpbnQKK2NobW9kYXQgKGludCBmZCwgY2hhciBjb25zdCAq ZmlsZSwgbW9kZV90IG1vZGUpCit7CisgIHJldHVybiBmY2htb2RhdCAoZmQsIGZpbGUsIG1v ZGUsIDApOworfQorCitGQ0hNT0RBVF9JTkxJTkUgaW50CitsY2htb2RhdCAoaW50IGZkLCBj aGFyIGNvbnN0ICpmaWxlLCBtb2RlX3QgbW9kZSkKK3sKKyAgcmV0dXJuIGZjaG1vZGF0IChm ZCwgZmlsZSwgbW9kZSwgQVRfU1lNTElOS19OT0ZPTExPVyk7Cit9CisKKyNlbmRpZgorCisj aWYgR05VTElCX1NUQVRBVAorCisjIGlmbmRlZiBTVEFUQVRfSU5MSU5FCisjICBkZWZpbmUg U1RBVEFUX0lOTElORSBfR0xfSU5MSU5FCisjIGVuZGlmCisKK1NUQVRBVF9JTkxJTkUgaW50 CitzdGF0YXQgKGludCBmZCwgY2hhciBjb25zdCAqbmFtZSwgc3RydWN0IHN0YXQgKnN0KQor eworICByZXR1cm4gZnN0YXRhdCAoZmQsIG5hbWUsIHN0LCAwKTsKK30KKworU1RBVEFUX0lO TElORSBpbnQKK2xzdGF0YXQgKGludCBmZCwgY2hhciBjb25zdCAqbmFtZSwgc3RydWN0IHN0 YXQgKnN0KQoreworICByZXR1cm4gZnN0YXRhdCAoZmQsIG5hbWUsIHN0LCBBVF9TWU1MSU5L X05PRk9MTE9XKTsKK30KKworI2VuZGlmCisKKy8qIEZvciBub3csIHRoZXJlIGFyZSBubyB3 cmFwcGVycyBuYW1lZCBsYWNjZXNzYXQgb3IgbGV1aWRhY2Nlc3NhdCwKKyAgIHNpbmNlIGdu dWxpYiBkb2Vzbid0IHN1cHBvcnQgZmFjY2Vzc2F0KCxBVF9TWU1MSU5LX05PRk9MTE9XKSBh bmQKKyAgIHNpbmNlIGFjY2VzcyByaWdodHMgb24gc3ltbGlua3MgYXJlIG9mIGxpbWl0ZWQg dXRpbGl0eS4gIExpa2V3aXNlLAorICAgd3JhcHBlcnMgYXJlIG5vdCBwcm92aWRlZCBmb3Ig YWNjZXNzYXQgb3IgZXVpZGFjY2Vzc2F0LCBzbyBhcyB0bworICAgYXZvaWQgZHJhZ2dpbmcg aW4gLWxnZW4gb24gc29tZSBwbGF0Zm9ybXMuICAqLworCitfR0xfSU5MSU5FX0hFQURFUl9F TkQKKworI2VuZGlmIC8qIF9HTF9IRUFERVJfT1BFTkFUICovCgo9PT0gYWRkZWQgZmlsZSAn bGliL3JlYWRsaW5rYXQuYycKLS0tIGxpYi9yZWFkbGlua2F0LmMJMTk3MC0wMS0wMSAwMDow MDowMCArMDAwMAorKysgbGliL3JlYWRsaW5rYXQuYwkyMDEzLTAxLTI0IDA4OjAyOjE2ICsw MDAwCkBAIC0wLDAgKzEsNDcgQEAKKy8qIFJlYWQgYSBzeW1saW5rIHJlbGF0aXZlIHRvIGFu IG9wZW4gZGlyZWN0b3J5LgorICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTMgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp b24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAg IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxo dHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIHdyaXR0ZW4gYnkgRXJp YyBCbGFrZSAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNsdWRlIDx1bmlzdGQu aD4KKworLyogR251bGliIHByb3ZpZGVzIGEgcmVhZGxpbmsgc3R1YiBmb3IgbWluZ3c7IHVz ZSBpdCBmb3IgZGlzdGluY3Rpb24KKyAgIGJldHdlZW4gRUlOVkFMIGFuZCBFTk9FTlQsIHJh dGhlciB0aGFuIGFsd2F5cyBmYWlsaW5nIHdpdGggRU5PU1lTLiAgKi8KKworLyogUE9TSVgg MjAwOCBzYXlzIHRoYXQgdW5saWtlIHJlYWRsaW5rLCByZWFkbGlua2F0IHJldHVybnMgMCBm b3IKKyAgIHN1Y2Nlc3MgaW5zdGVhZCBvZiB0aGUgYnVmZmVyIGxlbmd0aC4gIEJ1dCB0aGlz IHdvdWxkIHJlbmRlcgorICAgcmVhZGxpbmthdCB3b3J0aGxlc3Mgc2luY2UgcmVhZGxpbmsg ZG9lcyBub3QgZ3VhcmFudGVlIGEKKyAgIE5VTC10ZXJtaW5hdGVkIGJ1ZmZlci4gIEFzc3Vt ZSB0aGlzIHdhcyBhIGJ1ZyBpbiBQT1NJWC4gICovCisKKy8qIFJlYWQgdGhlIGNvbnRlbnRz IG9mIHN5bWxpbmsgRklMRSBpbnRvIGJ1ZmZlciBCVUYgb2Ygc2l6ZSBMRU4sIGluIHRoZQor ICAgZGlyZWN0b3J5IG9wZW4gb24gZGVzY3JpcHRvciBGRC4gIElmIHBvc3NpYmxlLCBkbyBp dCB3aXRob3V0IGNoYW5naW5nCisgICB0aGUgd29ya2luZyBkaXJlY3RvcnkuICBPdGhlcndp c2UsIHJlc29ydCB0byB1c2luZyBzYXZlX2N3ZC9mY2hkaXIsCisgICB0aGVuIHJlYWRsaW5r L3Jlc3RvcmVfY3dkLiAgSWYgZWl0aGVyIHRoZSBzYXZlX2N3ZCBvciB0aGUgcmVzdG9yZV9j d2QKKyAgIGZhaWxzLCB0aGVuIGdpdmUgYSBkaWFnbm9zdGljIGFuZCBleGl0IG5vbnplcm8u ICAqLworCisjZGVmaW5lIEFUX0ZVTkNfTkFNRSByZWFkbGlua2F0CisjZGVmaW5lIEFUX0ZV TkNfRjEgcmVhZGxpbmsKKyNkZWZpbmUgQVRfRlVOQ19QT1NUX0ZJTEVfUEFSQU1fREVDTFMg LCBjaGFyICpidWYsIHNpemVfdCBsZW4KKyNkZWZpbmUgQVRfRlVOQ19QT1NUX0ZJTEVfQVJH UyAgICAgICAgLCBidWYsIGxlbgorI2RlZmluZSBBVF9GVU5DX1JFU1VMVCBzc2l6ZV90Cisj aW5jbHVkZSAiYXQtZnVuYy5jIgorI3VuZGVmIEFUX0ZVTkNfTkFNRQorI3VuZGVmIEFUX0ZV TkNfRjEKKyN1bmRlZiBBVF9GVU5DX1BPU1RfRklMRV9QQVJBTV9ERUNMUworI3VuZGVmIEFU X0ZVTkNfUE9TVF9GSUxFX0FSR1MKKyN1bmRlZiBBVF9GVU5DX1JFU1VMVAoKPT09IGFkZGVk IGZpbGUgJ2xpYi9zYXZlLWN3ZC5jJwotLS0gbGliL3NhdmUtY3dkLmMJMTk3MC0wMS0wMSAw MDowMDowMCArMDAwMAorKysgbGliL3NhdmUtY3dkLmMJMjAxMy0wMS0yNCAwNjo1MToyNSAr MDAwMApAQCAtMCwwICsxLDMgQEAKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNkZWZpbmUgU0FW RV9DV0RfSU5MSU5FIF9HTF9FWFRFUk5fSU5MSU5FCisjaW5jbHVkZSAic2F2ZS1jd2QuaCIK Cj09PSBhZGRlZCBmaWxlICdsaWIvc2F2ZS1jd2QuaCcKLS0tIGxpYi9zYXZlLWN3ZC5oCTE5 NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDAKKysrIGxpYi9zYXZlLWN3ZC5oCTIwMTMtMDEtMjQg MDY6NTE6MjUgKzAwMDAKQEAgLTAsMCArMSw0NiBAQAorLyogRG8gbm90IHNhdmUgYW5kIHJl c3RvcmUgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCisKKyAgIENvcHlyaWdodCAy MDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJ ZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBH bnVsaWIgbmVlZHMgdG8gc2F2ZSBhbmQgcmVzdG9yZSB0aGUgY3VycmVudCB3b3JraW5nIGRp cmVjdG9yeSB0bworICAgZnVsbHkgZW11bGF0ZSBmdW5jdGlvbnMgbGlrZSBmc3RhdGF0LiAg QnV0IEVtYWNzIGRvZXNuJ3QgY2FyZSB3aGF0CisgICB0aGUgY3VycmVudCB3b3JraW5nIGRp cmVjdG9yeSBpczsgaXQgYWx3YXlzIHVzZXMgYWJzb2x1dGUgZmlsZQorICAgbmFtZXMuICBU aGlzIG1vZHVsZSByZXBsYWNlcyB0aGUgR251bGliIG1vZHVsZSBieSBvbWl0dGluZyB0aGUg Y29kZQorICAgdGhhdCBFbWFjcyBkb2VzIG5vdCBuZWVkLiAgKi8KKworI2lmbmRlZiBTQVZF X0NXRF9ICisjZGVmaW5lIFNBVkVfQ1dEX0ggMQorCitfR0xfSU5MSU5FX0hFQURFUl9CRUdJ TgorI2lmbmRlZiBTQVZFX0NXRF9JTkxJTkUKKyMgZGVmaW5lIFNBVkVfQ1dEX0lOTElORSBf R0xfSU5MSU5FCisjZW5kaWYKKworc3RydWN0IHNhdmVkX2N3ZCB7IGludCBkZXNjOyB9Owor CitTQVZFX0NXRF9JTkxJTkUgaW50CitzYXZlX2N3ZCAoc3RydWN0IHNhdmVkX2N3ZCAqY3dk KQoreworICBjd2QtPmRlc2MgPSAtMTsKKyAgcmV0dXJuIDA7Cit9CisKK1NBVkVfQ1dEX0lO TElORSBpbnQgcmVzdG9yZV9jd2QgKHN0cnVjdCBzYXZlZF9jd2QgY29uc3QgKmN3ZCkgeyBy ZXR1cm4gMDsgfQorU0FWRV9DV0RfSU5MSU5FIHZvaWQgZnJlZV9jd2QgKHN0cnVjdCBzYXZl ZF9jd2QgKmN3ZCkgeyB9CisKK19HTF9JTkxJTkVfSEVBREVSX0VORAorCisjZW5kaWYKCj09 PSBhZGRlZCBmaWxlICdtNC9kaXJlbnRfaC5tNCcKLS0tIG00L2RpcmVudF9oLm00CTE5NzAt MDEtMDEgMDA6MDA6MDAgKzAwMDAKKysrIG00L2RpcmVudF9oLm00CTIwMTMtMDEtMjQgMDY6 NTE6MjUgKzAwMDAKQEAgLTAsMCArMSw2NCBAQAorIyBkaXJlbnRfaC5tNCBzZXJpYWwgMTYK K2RubCBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s IEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkg YW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlv bnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCitkbmwgV3JpdHRl biBieSBCcnVubyBIYWlibGUuCisKK0FDX0RFRlVOKFtnbF9ESVJFTlRfSF0sCitbCisgIGRu bCBVc2UgQUNfUkVRVUlSRSBoZXJlLCBzbyB0aGF0IHRoZSBkZWZhdWx0IGJlaGF2aW9yIGJl bG93IGlzIGV4cGFuZGVkCisgIGRubCBvbmNlIG9ubHksIGJlZm9yZSBhbGwgc3RhdGVtZW50 cyB0aGF0IG9jY3VyIGluIG90aGVyIG1hY3Jvcy4KKyAgQUNfUkVRVUlSRShbZ2xfRElSRU5U X0hfREVGQVVMVFNdKQorCisgIGRubCA8ZGlyZW50Lmg+IGlzIGFsd2F5cyBvdmVycmlkZGVu LCBiZWNhdXNlIG9mIEdOVUxJQl9QT1NJWENIRUNLLgorICBnbF9DSEVDS19ORVhUX0hFQURF UlMoW2RpcmVudC5oXSkKKyAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX2RpcmVudF9oID0geWVz OyB0aGVuCisgICAgSEFWRV9ESVJFTlRfSD0xCisgIGVsc2UKKyAgICBIQVZFX0RJUkVOVF9I PTAKKyAgZmkKKyAgQUNfU1VCU1QoW0hBVkVfRElSRU5UX0hdKQorCisgIGRubCBDaGVjayBm b3IgZGVjbGFyYXRpb25zIG9mIGFueXRoaW5nIHdlIHdhbnQgdG8gcG9pc29uIGlmIHRoZQor ICBkbmwgY29ycmVzcG9uZGluZyBnbnVsaWIgbW9kdWxlIGlzIG5vdCBpbiB1c2UuCisgIGds X1dBUk5fT05fVVNFX1BSRVBBUkUoW1sjaW5jbHVkZSA8ZGlyZW50Lmg+CisgICAgXV0sIFth bHBoYXNvcnQgY2xvc2VkaXIgZGlyZmQgZmRvcGVuZGlyIG9wZW5kaXIgcmVhZGRpciByZXdp bmRkaXIgc2NhbmRpcl0pCitdKQorCitBQ19ERUZVTihbZ2xfRElSRU5UX01PRFVMRV9JTkRJ Q0FUT1JdLAorWworICBkbmwgVXNlIEFDX1JFUVVJUkUgaGVyZSwgc28gdGhhdCB0aGUgZGVm YXVsdCBzZXR0aW5ncyBhcmUgZXhwYW5kZWQgb25jZSBvbmx5LgorICBBQ19SRVFVSVJFKFtn bF9ESVJFTlRfSF9ERUZBVUxUU10pCisgIGdsX01PRFVMRV9JTkRJQ0FUT1JfU0VUX1ZBUklB QkxFKFskMV0pCisgIGRubCBEZWZpbmUgaXQgYWxzbyBhcyBhIEMgbWFjcm8sIGZvciB0aGUg YmVuZWZpdCBvZiB0aGUgdW5pdCB0ZXN0cy4KKyAgZ2xfTU9EVUxFX0lORElDQVRPUl9GT1Jf VEVTVFMoWyQxXSkKK10pCisKK0FDX0RFRlVOKFtnbF9ESVJFTlRfSF9ERUZBVUxUU10sCitb CisgIEFDX1JFUVVJUkUoW2dsX1VOSVNURF9IX0RFRkFVTFRTXSkgZG5sIGZvciBSRVBMQUNF X0ZDSERJUgorICBHTlVMSUJfT1BFTkRJUj0wOyAgICAgQUNfU1VCU1QoW0dOVUxJQl9PUEVO RElSXSkKKyAgR05VTElCX1JFQURESVI9MDsgICAgIEFDX1NVQlNUKFtHTlVMSUJfUkVBRERJ Ul0pCisgIEdOVUxJQl9SRVdJTkRESVI9MDsgICBBQ19TVUJTVChbR05VTElCX1JFV0lORERJ Ul0pCisgIEdOVUxJQl9DTE9TRURJUj0wOyAgICBBQ19TVUJTVChbR05VTElCX0NMT1NFRElS XSkKKyAgR05VTElCX0RJUkZEPTA7ICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfRElSRkRdKQor ICBHTlVMSUJfRkRPUEVORElSPTA7ICAgQUNfU1VCU1QoW0dOVUxJQl9GRE9QRU5ESVJdKQor ICBHTlVMSUJfU0NBTkRJUj0wOyAgICAgQUNfU1VCU1QoW0dOVUxJQl9TQ0FORElSXSkKKyAg R05VTElCX0FMUEhBU09SVD0wOyAgIEFDX1NVQlNUKFtHTlVMSUJfQUxQSEFTT1JUXSkKKyAg ZG5sIEFzc3VtZSBwcm9wZXIgR05VIGJlaGF2aW9yIHVubGVzcyBhbm90aGVyIG1vZHVsZSBz YXlzIG90aGVyd2lzZS4KKyAgSEFWRV9PUEVORElSPTE7ICAgICAgIEFDX1NVQlNUKFtIQVZF X09QRU5ESVJdKQorICBIQVZFX1JFQURESVI9MTsgICAgICAgQUNfU1VCU1QoW0hBVkVfUkVB RERJUl0pCisgIEhBVkVfUkVXSU5ERElSPTE7ICAgICBBQ19TVUJTVChbSEFWRV9SRVdJTkRE SVJdKQorICBIQVZFX0NMT1NFRElSPTE7ICAgICAgQUNfU1VCU1QoW0hBVkVfQ0xPU0VESVJd KQorICBIQVZFX0RFQ0xfRElSRkQ9MTsgICAgQUNfU1VCU1QoW0hBVkVfREVDTF9ESVJGRF0p CisgIEhBVkVfREVDTF9GRE9QRU5ESVI9MTtBQ19TVUJTVChbSEFWRV9ERUNMX0ZET1BFTkRJ Ul0pCisgIEhBVkVfRkRPUEVORElSPTE7ICAgICBBQ19TVUJTVChbSEFWRV9GRE9QRU5ESVJd KQorICBIQVZFX1NDQU5ESVI9MTsgICAgICAgQUNfU1VCU1QoW0hBVkVfU0NBTkRJUl0pCisg IEhBVkVfQUxQSEFTT1JUPTE7ICAgICBBQ19TVUJTVChbSEFWRV9BTFBIQVNPUlRdKQorICBS RVBMQUNFX09QRU5ESVI9MDsgICAgQUNfU1VCU1QoW1JFUExBQ0VfT1BFTkRJUl0pCisgIFJF UExBQ0VfQ0xPU0VESVI9MDsgICBBQ19TVUJTVChbUkVQTEFDRV9DTE9TRURJUl0pCisgIFJF UExBQ0VfRElSRkQ9MDsgICAgICBBQ19TVUJTVChbUkVQTEFDRV9ESVJGRF0pCisgIFJFUExB Q0VfRkRPUEVORElSPTA7ICBBQ19TVUJTVChbUkVQTEFDRV9GRE9QRU5ESVJdKQorXSkKCj09 PSBhZGRlZCBmaWxlICdtNC9mZG9wZW5kaXIubTQnCi0tLSBtNC9mZG9wZW5kaXIubTQJMTk3 MC0wMS0wMSAwMDowMDowMCArMDAwMAorKysgbTQvZmRvcGVuZGlyLm00CTIwMTMtMDEtMjQg MDY6NTE6MjUgKzAwMDAKQEAgLTAsMCArMSw2MSBAQAorIyBzZXJpYWwgMTAKKyMgU2VlIGlm IHdlIG5lZWQgdG8gcHJvdmlkZSBmZG9wZW5kaXIuCisKK2RubCBDb3B5cmlnaHQgKEMpIDIw MDktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUg aXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdp dmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQs Citkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBu b3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFdyaXR0ZW4gYnkgRXJpYyBCbGFrZS4KKworQUNf REVGVU4oW2dsX0ZVTkNfRkRPUEVORElSXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfRElSRU5U X0hfREVGQVVMVFNdKQorICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pIGRubCBm b3IgY3Jvc3MtY29tcGlsZXMKKworICBBQ19SRVFVSVJFKFtnbF9VU0VfU1lTVEVNX0VYVEVO U0lPTlNdKQorCisgIGRubCBGcmVlQlNEIDcuMyBoYXMgdGhlIGZ1bmN0aW9uLCBidXQgZmFp bGVkIHRvIGRlY2xhcmUgaXQuCisgIEFDX0NIRUNLX0RFQ0xTKFtmZG9wZW5kaXJdLCBbXSwg W0hBVkVfREVDTF9GRE9QRU5ESVI9MF0sIFtbCisjaW5jbHVkZSA8ZGlyZW50Lmg+CisgICAg XV0pCisgIEFDX0NIRUNLX0ZVTkNTX09OQ0UoW2Zkb3BlbmRpcl0pCisgIGlmIHRlc3QgJGFj X2N2X2Z1bmNfZmRvcGVuZGlyID0gbm87IHRoZW4KKyAgICBIQVZFX0ZET1BFTkRJUj0wCisg IGVsc2UKKyAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBmZG9wZW5kaXIgd29ya3NdLAor ICAgICAgW2dsX2N2X2Z1bmNfZmRvcGVuZGlyX3dvcmtzXSwKKyAgICAgIFtBQ19SVU5fSUZF TFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRl IDxmY250bC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2lmICFIQVZFX0RFQ0xfRkRPUEVO RElSCitleHRlcm4KKyMgaWZkZWYgX19jcGx1c3BsdXMKKyJDIgorIyBlbmRpZgorRElSICpm ZG9wZW5kaXIgKGludCk7CisjZW5kaWYKK11dLCBbaW50IHJlc3VsdCA9IDA7CisgICAgIGlu dCBmZCA9IG9wZW4gKCJjb25mdGVzdC5jIiwgT19SRE9OTFkpOworICAgICBpZiAoZmQgPCAw KSByZXN1bHQgfD0gMTsKKyAgICAgaWYgKGZkb3BlbmRpciAoZmQpKSByZXN1bHQgfD0gMjsK KyAgICAgaWYgKGNsb3NlIChmZCkpIHJlc3VsdCB8PSA0OworICAgICByZXR1cm4gcmVzdWx0 O10pXSwKKyAgICAgICAgIFtnbF9jdl9mdW5jX2Zkb3BlbmRpcl93b3Jrcz15ZXNdLAorICAg ICAgICAgW2dsX2N2X2Z1bmNfZmRvcGVuZGlyX3dvcmtzPW5vXSwKKyAgICAgICAgIFtjYXNl ICIkaG9zdF9vcyIgaW4KKyAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gZ2xp YmMgc3lzdGVtcy4KKyAgICAgICAgICAgICotZ251KikgZ2xfY3ZfZnVuY19mZG9wZW5kaXJf d29ya3M9Imd1ZXNzaW5nIHllcyIgOzsKKyAgICAgICAgICAgICAgICAgICAgIyBJZiB3ZSBk b24ndCBrbm93LCBhc3N1bWUgdGhlIHdvcnN0LgorICAgICAgICAgICAgKikgICAgICBnbF9j dl9mdW5jX2Zkb3BlbmRpcl93b3Jrcz0iZ3Vlc3Npbmcgbm8iIDs7CisgICAgICAgICAgZXNh YworICAgICAgICAgXSldKQorICAgIGNhc2UgIiRnbF9jdl9mdW5jX2Zkb3BlbmRpcl93b3Jr cyIgaW4KKyAgICAgICp5ZXMpIDs7CisgICAgICAqKQorICAgICAgICBSRVBMQUNFX0ZET1BF TkRJUj0xCisgICAgICAgIDs7CisgICAgZXNhYworICBmaQorXSkKCj09PSBhZGRlZCBmaWxl ICdtNC9mc3RhdGF0Lm00JwotLS0gbTQvZnN0YXRhdC5tNAkxOTcwLTAxLTAxIDAwOjAwOjAw ICswMDAwCisrKyBtNC9mc3RhdGF0Lm00CTIwMTMtMDEtMjQgMDY6NTE6MjUgKzAwMDAKQEAg LTAsMCArMSw2MCBAQAorIyBmc3RhdGF0Lm00IHNlcmlhbCAzCitkbmwgQ29weXJpZ2h0IChD KSAyMDA0LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBm aWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2Ru bCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRl IGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRo aXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBXcml0dGVuIGJ5IEppbSBNZXllcmluZy4K KworIyBJZiB3ZSBoYXZlIHRoZSBmc3RhdGF0IGZ1bmN0aW9uLCBhbmQgaXQgaGFzIHRoZSBi dWcgKGluIEFJWCA3LjEpCisjIHRoYXQgaXQgZG9lcyBub3QgZmlsbCBpbiBzdF9zaXplIGNv cnJlY3RseSwgdXNlIHRoZSByZXBsYWNlbWVudCBmdW5jdGlvbi4KK0FDX0RFRlVOKFtnbF9G VU5DX0ZTVEFUQVRdLAorWworICBBQ19SRVFVSVJFKFtnbF9TWVNfU1RBVF9IX0RFRkFVTFRT XSkKKyAgQUNfUkVRVUlSRShbZ2xfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSkKKyAgQUNfUkVR VUlSRShbZ2xfRlVOQ19MU1RBVF9GT0xMT1dTX1NMQVNIRURfU1lNTElOS10pCisgIEFDX1JF UVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkgZG5sIGZvciBjcm9zcy1jb21waWxlcworICBB Q19DSEVDS19GVU5DU19PTkNFKFtmc3RhdGF0XSkKKworICBpZiB0ZXN0ICRhY19jdl9mdW5j X2ZzdGF0YXQgPSBubzsgdGhlbgorICAgIEhBVkVfRlNUQVRBVD0wCisgIGVsc2UKKyAgICBk bmwgVGVzdCBmb3IgYW4gQUlYIDcuMSBidWc7IHNlZQorICAgIGRubCA8aHR0cDovL2xpc3Rz LmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy10YXIvMjAxMS0wOS9tc2cwMDAxNS5odG1sPi4K KyAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBmc3RhdGF0ICguLi4sIDApIHdvcmtzXSwK KyAgICAgIFtnbF9jdl9mdW5jX2ZzdGF0YXRfemVyb19mbGFnXSwKKyAgICAgIFtBQ19SVU5f SUZFTFNFKAorICAgICAgICAgW0FDX0xBTkdfU09VUkNFKAorICAgICAgICAgICAgW1sKKyAg ICAgICAgICAgICAgI2luY2x1ZGUgPGZjbnRsLmg+CisgICAgICAgICAgICAgICNpbmNsdWRl IDxzeXMvc3RhdC5oPgorICAgICAgICAgICAgICBpbnQKKyAgICAgICAgICAgICAgbWFpbiAo dm9pZCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0IGE7 CisgICAgICAgICAgICAgICAgcmV0dXJuIGZzdGF0YXQgKEFUX0ZEQ1dELCAiLiIsICZhLCAw KSAhPSAwOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdXSldLAorICAgICAgICAg W2dsX2N2X2Z1bmNfZnN0YXRhdF96ZXJvX2ZsYWc9eWVzXSwKKyAgICAgICAgIFtnbF9jdl9m dW5jX2ZzdGF0YXRfemVyb19mbGFnPW5vXSwKKyAgICAgICAgIFtjYXNlICIkaG9zdF9vcyIg aW4KKyAgICAgICAgICAgIGFpeCopIGdsX2N2X2Z1bmNfZnN0YXRhdF96ZXJvX2ZsYWc9Imd1 ZXNzaW5nIG5vIjs7CisgICAgICAgICAgICAqKSAgICBnbF9jdl9mdW5jX2ZzdGF0YXRfemVy b19mbGFnPSJndWVzc2luZyB5ZXMiOzsKKyAgICAgICAgICBlc2FjCisgICAgICAgICBdKQor ICAgICAgXSkKKworICAgIGNhc2UgJGdsX2N2X2Z1bmNfZnN0YXRhdF96ZXJvX2ZsYWcrJGds X2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluayBpbgorICAgICp5 ZXMrKnllcykgOzsKKyAgICAqKSBSRVBMQUNFX0ZTVEFUQVQ9MQorICAgICAgIGNhc2UgJGds X2N2X2Z1bmNfZnN0YXRhdF96ZXJvX2ZsYWcgaW4KKyAgICAgICAqeWVzKQorICAgICAgICAg QUNfREVGSU5FKFtIQVZFX1dPUktJTkdfRlNUQVRBVF9aRVJPX0ZMQUddLCBbMV0sCisgICAg ICAgICAgIFtEZWZpbmUgdG8gMSBpZiBmc3RhdGF0ICguLi4sIDApIHdvcmtzLgorICAgICAg ICAgICAgRm9yIGV4YW1wbGUsIGl0IGRvZXMgbm90IHdvcmsgaW4gQUlYIDcuMS5dKQorICAg ICAgICAgOzsKKyAgICAgICBlc2FjCisgICAgICAgOzsKKyAgICBlc2FjCisgIGZpCitdKQoK PT09IG1vZGlmaWVkIGZpbGUgJ200L2dudWxpYi1jb21wLm00JwotLS0gbTQvZ251bGliLWNv bXAubTQJMjAxMy0wMS0wNCAwMjoxNzo0OSArMDAwMAorKysgbTQvZ251bGliLWNvbXAubTQJ MjAxMy0wMS0yNCAwODowMjoxNiArMDAwMApAQCAtNDAsNiArNDAsNyBAQAogICBBQ19SRVFV SVJFKFtnbF9QUk9HX0FSX1JBTkxJQl0pCiAgICMgQ29kZSBmcm9tIG1vZHVsZSBhbGxvY2Et b3B0OgogICAjIENvZGUgZnJvbSBtb2R1bGUgYWxsb2NhdG9yOgorICAjIENvZGUgZnJvbSBt b2R1bGUgYXQtaW50ZXJuYWw6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBjLWN0eXBlOgogICAj IENvZGUgZnJvbSBtb2R1bGUgYy1zdHJjYXNlOgogICAjIENvZGUgZnJvbSBtb2R1bGUgY2Fy ZWFkbGlua2F0OgpAQCAtNDksNiArNTAsNyBAQAogICAjIENvZGUgZnJvbSBtb2R1bGUgY3J5 cHRvL3NoYTE6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBjcnlwdG8vc2hhMjU2OgogICAjIENv ZGUgZnJvbSBtb2R1bGUgY3J5cHRvL3NoYTUxMjoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGRp cmVudDoKICAgIyBDb2RlIGZyb20gbW9kdWxlIGRvc25hbWU6CiAgICMgQ29kZSBmcm9tIG1v ZHVsZSBkdG9hc3RyOgogICAjIENvZGUgZnJvbSBtb2R1bGUgZHRvdGltZXNwZWM6CkBAIC02 MSw4ICs2MywxMCBAQAogICAjIENvZGUgZnJvbSBtb2R1bGUgZXh0ZXJuLWlubGluZToKICAg IyBDb2RlIGZyb20gbW9kdWxlIGZhY2Nlc3NhdDoKICAgIyBDb2RlIGZyb20gbW9kdWxlIGZj bnRsLWg6CisgICMgQ29kZSBmcm9tIG1vZHVsZSBmZG9wZW5kaXI6CiAgICMgQ29kZSBmcm9t IG1vZHVsZSBmaWxlbW9kZToKICAgIyBDb2RlIGZyb20gbW9kdWxlIGZwZW5kaW5nOgorICAj IENvZGUgZnJvbSBtb2R1bGUgZnN0YXRhdDoKICAgIyBDb2RlIGZyb20gbW9kdWxlIGdldGdy b3VwczoKICAgIyBDb2RlIGZyb20gbW9kdWxlIGdldGxvYWRhdmc6CiAgICMgQ29kZSBmcm9t IG1vZHVsZSBnZXRvcHQtZ251OgpAQCAtODIsMTEgKzg2LDEzIEBACiAgICMgQ29kZSBmcm9t IG1vZHVsZSBta3RpbWU6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBtdWx0aWFyY2g6CiAgICMg Q29kZSBmcm9tIG1vZHVsZSBub2NyYXNoOgorICAjIENvZGUgZnJvbSBtb2R1bGUgb3BlbmF0 LWg6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBwYXRobWF4OgogICAjIENvZGUgZnJvbSBtb2R1 bGUgcHNlbGVjdDoKICAgIyBDb2RlIGZyb20gbW9kdWxlIHB0aHJlYWRfc2lnbWFzazoKICAg IyBDb2RlIGZyb20gbW9kdWxlIHB1dGVudjoKICAgIyBDb2RlIGZyb20gbW9kdWxlIHJlYWRs aW5rOgorICAjIENvZGUgZnJvbSBtb2R1bGUgcmVhZGxpbmthdDoKICAgIyBDb2RlIGZyb20g bW9kdWxlIHJvb3QtdWlkOgogICAjIENvZGUgZnJvbSBtb2R1bGUgc2lnMnN0cjoKICAgIyBD b2RlIGZyb20gbW9kdWxlIHNpZ25hbC1oOgpAQCAtMTU5LDYgKzE2NSw3IEBACiAgIGdsX1NI QTEKICAgZ2xfU0hBMjU2CiAgIGdsX1NIQTUxMgorICBnbF9ESVJFTlRfSAogICBBQ19SRVFV SVJFKFtnbF9DOTlfU1RSVE9MRF0pCiAgIGdsX0ZVTkNfRFVQMgogICBpZiB0ZXN0ICRIQVZF X0RVUDIgPSAwIHx8IHRlc3QgJFJFUExBQ0VfRFVQMiA9IDE7IHRoZW4KQEAgLTE3OCwxMiAr MTg1LDIzIEBACiAgIGdsX01PRFVMRV9JTkRJQ0FUT1IoW2ZhY2Nlc3NhdF0pCiAgIGdsX1VO SVNURF9NT0RVTEVfSU5ESUNBVE9SKFtmYWNjZXNzYXRdKQogICBnbF9GQ05UTF9ICisgIGds X0ZVTkNfRkRPUEVORElSCisgIGlmIHRlc3QgJEhBVkVfRkRPUEVORElSID0gMCB8fCB0ZXN0 ICRSRVBMQUNFX0ZET1BFTkRJUiA9IDE7IHRoZW4KKyAgICBBQ19MSUJPQkooW2Zkb3BlbmRp cl0pCisgIGZpCisgIGdsX0RJUkVOVF9NT0RVTEVfSU5ESUNBVE9SKFtmZG9wZW5kaXJdKQor ICBnbF9NT0RVTEVfSU5ESUNBVE9SKFtmZG9wZW5kaXJdKQogICBnbF9GSUxFTU9ERQogICBn bF9GVU5DX0ZQRU5ESU5HCiAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfX19mcGVuZGluZyA9IG5v OyB0aGVuCiAgICAgQUNfTElCT0JKKFtmcGVuZGluZ10pCiAgICAgZ2xfUFJFUkVRX0ZQRU5E SU5HCiAgIGZpCisgIGdsX0ZVTkNfRlNUQVRBVAorICBpZiB0ZXN0ICRIQVZFX0ZTVEFUQVQg PSAwIHx8IHRlc3QgJFJFUExBQ0VfRlNUQVRBVCA9IDE7IHRoZW4KKyAgICBBQ19MSUJPQkoo W2ZzdGF0YXRdKQorICBmaQorICBnbF9TWVNfU1RBVF9NT0RVTEVfSU5ESUNBVE9SKFtmc3Rh dGF0XSkKICAgZ2xfR0VUTE9BREFWRwogICBpZiB0ZXN0ICRIQVZFX0dFVExPQURBVkcgPSAw OyB0aGVuCiAgICAgQUNfTElCT0JKKFtnZXRsb2FkYXZnXSkKQEAgLTI1Myw2ICsyNzEsMTEg QEAKICAgICBnbF9QUkVSRVFfUkVBRExJTksKICAgZmkKICAgZ2xfVU5JU1REX01PRFVMRV9J TkRJQ0FUT1IoW3JlYWRsaW5rXSkKKyAgZ2xfRlVOQ19SRUFETElOS0FUCisgIGlmIHRlc3Qg JEhBVkVfUkVBRExJTktBVCA9IDA7IHRoZW4KKyAgICBBQ19MSUJPQkooW3JlYWRsaW5rYXRd KQorICBmaQorICBnbF9VTklTVERfTU9EVUxFX0lORElDQVRPUihbcmVhZGxpbmthdF0pCiAg IGdsX0ZVTkNfU0lHMlNUUgogICBpZiB0ZXN0ICRhY19jdl9mdW5jX3NpZzJzdHIgPSBubzsg dGhlbgogICAgIEFDX0xJQk9CSihbc2lnMnN0cl0pCkBAIC0zMTEsMTEgKzMzNCwxMyBAQAog ICBmaQogICBnbF9TVERMSUJfTU9EVUxFX0lORElDQVRPUihbdW5zZXRlbnZdKQogICBnbF9V VElNRU5TCisgIGdsX2dudWxpYl9lbmFibGVkXzI2MDk0MWMwZTVkYzY3ZWM5ZTg3ZDFmYjMy MWMzMDBiPWZhbHNlCiAgIGdsX2dudWxpYl9lbmFibGVkX2Rvc25hbWU9ZmFsc2UKICAgZ2xf Z251bGliX2VuYWJsZWRfZXVpZGFjY2Vzcz1mYWxzZQogICBnbF9nbnVsaWJfZW5hYmxlZF9n ZXRncm91cHM9ZmFsc2UKICAgZ2xfZ251bGliX2VuYWJsZWRfYmU0NTNjZWM1ZWVjZjU3MzFh Mjc0ZjJkZTdmMmRiMzY9ZmFsc2UKICAgZ2xfZ251bGliX2VuYWJsZWRfYTk3ODY4NTBlOTk5 YWU2NWE4MzZhNjA0MWU4ZTVlZDE9ZmFsc2UKKyAgZ2xfZ251bGliX2VuYWJsZWRfMDNlMGFh YWQ0Y2I4OWNhNzU3NjUzYmQzNjdhNmNjYjc9ZmFsc2UKICAgZ2xfZ251bGliX2VuYWJsZWRf cGF0aG1heD1mYWxzZQogICBnbF9nbnVsaWJfZW5hYmxlZF82MDk5ZTk3MzdmNzU3ZGIzNmM0 N2ZhOWQ5ZjAyZTg4Yz1mYWxzZQogICBnbF9nbnVsaWJfZW5hYmxlZF9zdGF0PWZhbHNlCkBA IC0zMjMsNiArMzQ4LDEzIEBACiAgIGdsX2dudWxpYl9lbmFibGVkX3N0cnRvdWxsPWZhbHNl CiAgIGdsX2dudWxpYl9lbmFibGVkX3ZlcmlmeT1mYWxzZQogICBnbF9nbnVsaWJfZW5hYmxl ZF82ODJlNjA5NjA0Y2NhYWM2YmUzODJlNGVlM2E0ZWFlYz1mYWxzZQorICBmdW5jX2dsX2du dWxpYl9tNGNvZGVfMjYwOTQxYzBlNWRjNjdlYzllODdkMWZiMzIxYzMwMGIgKCkKKyAgewor ICAgIGlmICEgJGdsX2dudWxpYl9lbmFibGVkXzI2MDk0MWMwZTVkYzY3ZWM5ZTg3ZDFmYjMy MWMzMDBiOyB0aGVuCisgICAgICBBQ19MSUJPQkooW29wZW5hdC1wcm9jXSkKKyAgICAgIGds X2dudWxpYl9lbmFibGVkXzI2MDk0MWMwZTVkYzY3ZWM5ZTg3ZDFmYjMyMWMzMDBiPXRydWUK KyAgICBmaQorICB9CiAgIGZ1bmNfZ2xfZ251bGliX200Y29kZV9kb3NuYW1lICgpCiAgIHsK ICAgICBpZiAhICRnbF9nbnVsaWJfZW5hYmxlZF9kb3NuYW1lOyB0aGVuCkBAIC0zODUsNiAr NDE3LDEyIEBACiAgICAgICBmaQogICAgIGZpCiAgIH0KKyAgZnVuY19nbF9nbnVsaWJfbTRj b2RlXzAzZTBhYWFkNGNiODljYTc1NzY1M2JkMzY3YTZjY2I3ICgpCisgIHsKKyAgICBpZiAh ICRnbF9nbnVsaWJfZW5hYmxlZF8wM2UwYWFhZDRjYjg5Y2E3NTc2NTNiZDM2N2E2Y2NiNzsg dGhlbgorICAgICAgZ2xfZ251bGliX2VuYWJsZWRfMDNlMGFhYWQ0Y2I4OWNhNzU3NjUzYmQz NjdhNmNjYjc9dHJ1ZQorICAgIGZpCisgIH0KICAgZnVuY19nbF9nbnVsaWJfbTRjb2RlX3Bh dGhtYXggKCkKICAgewogICAgIGlmICEgJGdsX2dudWxpYl9lbmFibGVkX3BhdGhtYXg7IHRo ZW4KQEAgLTQ1NiwxMSArNDk0LDI5IEBACiAgICAgZmkKICAgfQogICBpZiB0ZXN0ICRIQVZF X0ZBQ0NFU1NBVCA9IDA7IHRoZW4KKyAgICBmdW5jX2dsX2dudWxpYl9tNGNvZGVfMjYwOTQx YzBlNWRjNjdlYzllODdkMWZiMzIxYzMwMGIKKyAgZmkKKyAgaWYgdGVzdCAkSEFWRV9GQUND RVNTQVQgPSAwOyB0aGVuCiAgICAgZnVuY19nbF9nbnVsaWJfbTRjb2RlX2Rvc25hbWUKICAg ZmkKICAgaWYgdGVzdCAkSEFWRV9GQUNDRVNTQVQgPSAwOyB0aGVuCiAgICAgZnVuY19nbF9n bnVsaWJfbTRjb2RlX2V1aWRhY2Nlc3MKICAgZmkKKyAgaWYgdGVzdCAkSEFWRV9GQUNDRVNT QVQgPSAwOyB0aGVuCisgICAgZnVuY19nbF9nbnVsaWJfbTRjb2RlXzAzZTBhYWFkNGNiODlj YTc1NzY1M2JkMzY3YTZjY2I3CisgIGZpCisgIGlmIHRlc3QgJEhBVkVfRkRPUEVORElSID0g MDsgdGhlbgorICAgIGZ1bmNfZ2xfZ251bGliX200Y29kZV8yNjA5NDFjMGU1ZGM2N2VjOWU4 N2QxZmIzMjFjMzAwYgorICBmaQorICBpZiB0ZXN0ICRIQVZFX0ZTVEFUQVQgPSAwIHx8IHRl c3QgJFJFUExBQ0VfRlNUQVRBVCA9IDE7IHRoZW4KKyAgICBmdW5jX2dsX2dudWxpYl9tNGNv ZGVfMjYwOTQxYzBlNWRjNjdlYzllODdkMWZiMzIxYzMwMGIKKyAgZmkKKyAgaWYgdGVzdCAk SEFWRV9GU1RBVEFUID0gMCB8fCB0ZXN0ICRSRVBMQUNFX0ZTVEFUQVQgPSAxOyB0aGVuCisg ICAgZnVuY19nbF9nbnVsaWJfbTRjb2RlX2Rvc25hbWUKKyAgZmkKKyAgaWYgdGVzdCAkSEFW RV9GU1RBVEFUID0gMCB8fCB0ZXN0ICRSRVBMQUNFX0ZTVEFUQVQgPSAxOyB0aGVuCisgICAg ZnVuY19nbF9nbnVsaWJfbTRjb2RlXzAzZTBhYWFkNGNiODljYTc1NzY1M2JkMzY3YTZjY2I3 CisgIGZpCiAgIGlmIHRlc3QgJFJFUExBQ0VfR0VUT1BUID0gMTsgdGhlbgogICAgIGZ1bmNf Z2xfZ251bGliX200Y29kZV9iZTQ1M2NlYzVlZWNmNTczMWEyNzRmMmRlN2YyZGIzNgogICBm aQpAQCAtNDczLDYgKzUyOSwxNSBAQAogICBpZiB0ZXN0ICRIQVZFX1JFQURMSU5LID0gMCB8 fCB0ZXN0ICRSRVBMQUNFX1JFQURMSU5LID0gMTsgdGhlbgogICAgIGZ1bmNfZ2xfZ251bGli X200Y29kZV9zdGF0CiAgIGZpCisgIGlmIHRlc3QgJEhBVkVfUkVBRExJTktBVCA9IDA7IHRo ZW4KKyAgICBmdW5jX2dsX2dudWxpYl9tNGNvZGVfMjYwOTQxYzBlNWRjNjdlYzllODdkMWZi MzIxYzMwMGIKKyAgZmkKKyAgaWYgdGVzdCAkSEFWRV9SRUFETElOS0FUID0gMDsgdGhlbgor ICAgIGZ1bmNfZ2xfZ251bGliX200Y29kZV9kb3NuYW1lCisgIGZpCisgIGlmIHRlc3QgJEhB VkVfUkVBRExJTktBVCA9IDA7IHRoZW4KKyAgICBmdW5jX2dsX2dudWxpYl9tNGNvZGVfMDNl MGFhYWQ0Y2I4OWNhNzU3NjUzYmQzNjdhNmNjYjcKKyAgZmkKICAgaWYgeyB0ZXN0ICRIQVZF X1NUUlRPSU1BWCA9IDAgfHwgdGVzdCAkUkVQTEFDRV9TVFJUT0lNQVggPSAxOyB9ICYmIHRl c3QgJGFjX2N2X3R5cGVfbG9uZ19sb25nX2ludCA9IHllczsgdGhlbgogICAgIGZ1bmNfZ2xf Z251bGliX200Y29kZV9zdHJ0b2xsCiAgIGZpCkBAIC00ODYsMTEgKzU1MSwxMyBAQAogICAg IGZ1bmNfZ2xfZ251bGliX200Y29kZV92ZXJpZnkKICAgZmkKICAgbTRfcGF0dGVybl9hbGxv dyhbXmdsX0dOVUxJQl9FTkFCTEVEX10pCisgIEFNX0NPTkRJVElPTkFMKFtnbF9HTlVMSUJf RU5BQkxFRF8yNjA5NDFjMGU1ZGM2N2VjOWU4N2QxZmIzMjFjMzAwYl0sIFskZ2xfZ251bGli X2VuYWJsZWRfMjYwOTQxYzBlNWRjNjdlYzllODdkMWZiMzIxYzMwMGJdKQogICBBTV9DT05E SVRJT05BTChbZ2xfR05VTElCX0VOQUJMRURfZG9zbmFtZV0sIFskZ2xfZ251bGliX2VuYWJs ZWRfZG9zbmFtZV0pCiAgIEFNX0NPTkRJVElPTkFMKFtnbF9HTlVMSUJfRU5BQkxFRF9ldWlk YWNjZXNzXSwgWyRnbF9nbnVsaWJfZW5hYmxlZF9ldWlkYWNjZXNzXSkKICAgQU1fQ09ORElU SU9OQUwoW2dsX0dOVUxJQl9FTkFCTEVEX2dldGdyb3Vwc10sIFskZ2xfZ251bGliX2VuYWJs ZWRfZ2V0Z3JvdXBzXSkKICAgQU1fQ09ORElUSU9OQUwoW2dsX0dOVUxJQl9FTkFCTEVEX2Jl NDUzY2VjNWVlY2Y1NzMxYTI3NGYyZGU3ZjJkYjM2XSwgWyRnbF9nbnVsaWJfZW5hYmxlZF9i ZTQ1M2NlYzVlZWNmNTczMWEyNzRmMmRlN2YyZGIzNl0pCiAgIEFNX0NPTkRJVElPTkFMKFtn bF9HTlVMSUJfRU5BQkxFRF9hOTc4Njg1MGU5OTlhZTY1YTgzNmE2MDQxZThlNWVkMV0sIFsk Z2xfZ251bGliX2VuYWJsZWRfYTk3ODY4NTBlOTk5YWU2NWE4MzZhNjA0MWU4ZTVlZDFdKQor ICBBTV9DT05ESVRJT05BTChbZ2xfR05VTElCX0VOQUJMRURfMDNlMGFhYWQ0Y2I4OWNhNzU3 NjUzYmQzNjdhNmNjYjddLCBbJGdsX2dudWxpYl9lbmFibGVkXzAzZTBhYWFkNGNiODljYTc1 NzY1M2JkMzY3YTZjY2I3XSkKICAgQU1fQ09ORElUSU9OQUwoW2dsX0dOVUxJQl9FTkFCTEVE X3BhdGhtYXhdLCBbJGdsX2dudWxpYl9lbmFibGVkX3BhdGhtYXhdKQogICBBTV9DT05ESVRJ T05BTChbZ2xfR05VTElCX0VOQUJMRURfNjA5OWU5NzM3Zjc1N2RiMzZjNDdmYTlkOWYwMmU4 OGNdLCBbJGdsX2dudWxpYl9lbmFibGVkXzYwOTllOTczN2Y3NTdkYjM2YzQ3ZmE5ZDlmMDJl ODhjXSkKICAgQU1fQ09ORElUSU9OQUwoW2dsX0dOVUxJQl9FTkFCTEVEX3N0YXRdLCBbJGds X2dudWxpYl9lbmFibGVkX3N0YXRdKQpAQCAtNjU2LDYgKzcyMyw3IEBACiAgIGxpYi9jYXJl YWRsaW5rYXQuaAogICBsaWIvY2xvc2Utc3RyZWFtLmMKICAgbGliL2Nsb3NlLXN0cmVhbS5o CisgIGxpYi9kaXJlbnQuaW4uaAogICBsaWIvZG9zbmFtZS5oCiAgIGxpYi9kdG9hc3RyLmMK ICAgbGliL2R0b3RpbWVzcGVjLmMKQEAgLTY2NSwxMCArNzMzLDEyIEBACiAgIGxpYi9leGVj aW5mby5pbi5oCiAgIGxpYi9mYWNjZXNzYXQuYwogICBsaWIvZmNudGwuaW4uaAorICBsaWIv ZmRvcGVuZGlyLmMKICAgbGliL2ZpbGVtb2RlLmMKICAgbGliL2ZpbGVtb2RlLmgKICAgbGli L2ZwZW5kaW5nLmMKICAgbGliL2ZwZW5kaW5nLmgKKyAgbGliL2ZzdGF0YXQuYwogICBsaWIv ZnRvYXN0ci5jCiAgIGxpYi9mdG9hc3RyLmgKICAgbGliL2dldGdyb3Vwcy5jCkBAIC02ODks MTEgKzc1OSwxNSBAQAogICBsaWIvbWQ1LmgKICAgbGliL21rdGltZS1pbnRlcm5hbC5oCiAg IGxpYi9ta3RpbWUuYworICBsaWIvb3BlbmF0LXByaXYuaAorICBsaWIvb3BlbmF0LXByb2Mu YworICBsaWIvb3BlbmF0LmgKICAgbGliL3BhdGhtYXguaAogICBsaWIvcHNlbGVjdC5jCiAg IGxpYi9wdGhyZWFkX3NpZ21hc2suYwogICBsaWIvcHV0ZW52LmMKICAgbGliL3JlYWRsaW5r LmMKKyAgbGliL3JlYWRsaW5rYXQuYwogICBsaWIvcm9vdC11aWQuaAogICBsaWIvc2hhMS5j CiAgIGxpYi9zaGExLmgKQEAgLTc0Niw2ICs4MjAsNyBAQAogICBtNC9jLXN0cnRvZC5tNAog ICBtNC9jbG9ja190aW1lLm00CiAgIG00L2Nsb3NlLXN0cmVhbS5tNAorICBtNC9kaXJlbnRf aC5tNAogICBtNC9kdXAyLm00CiAgIG00L2Vudmlyb24ubTQKICAgbTQvZXVpZGFjY2Vzcy5t NApAQCAtNzU1LDggKzgzMCwxMCBAQAogICBtNC9mYWNjZXNzYXQubTQKICAgbTQvZmNudGwt by5tNAogICBtNC9mY250bF9oLm00CisgIG00L2Zkb3BlbmRpci5tNAogICBtNC9maWxlbW9k ZS5tNAogICBtNC9mcGVuZGluZy5tNAorICBtNC9mc3RhdGF0Lm00CiAgIG00L2dldGdyb3Vw cy5tNAogICBtNC9nZXRsb2FkYXZnLm00CiAgIG00L2dldG9wdC5tNApAQCAtNzgwLDYgKzg1 Nyw3IEBACiAgIG00L3B0aHJlYWRfc2lnbWFzay5tNAogICBtNC9wdXRlbnYubTQKICAgbTQv cmVhZGxpbmsubTQKKyAgbTQvcmVhZGxpbmthdC5tNAogICBtNC9zZXRlbnYubTQKICAgbTQv c2hhMS5tNAogICBtNC9zaGEyNTYubTQKCj09PSBhZGRlZCBmaWxlICdtNC9yZWFkbGlua2F0 Lm00JwotLS0gbTQvcmVhZGxpbmthdC5tNAkxOTcwLTAxLTAxIDAwOjAwOjAwICswMDAwCisr KyBtNC9yZWFkbGlua2F0Lm00CTIwMTMtMDEtMjQgMDg6MDI6MTYgKzAwMDAKQEAgLTAsMCAr MSwxOSBAQAorIyBzZXJpYWwgMworIyBTZWUgaWYgd2UgbmVlZCB0byBwcm92aWRlIHJlYWRs aW5rYXQgcmVwbGFjZW1lbnQuCisKK2RubCBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMyBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0 d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRl ZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBv ciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJl c2VydmVkLgorCisjIFdyaXR0ZW4gYnkgRXJpYyBCbGFrZS4KKworQUNfREVGVU4oW2dsX0ZV TkNfUkVBRExJTktBVF0sCitbCisgIEFDX1JFUVVJUkUoW2dsX1VOSVNURF9IX0RFRkFVTFRT XSkKKyAgQUNfUkVRVUlSRShbZ2xfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSkKKyAgQUNfQ0hF Q0tfRlVOQ1NfT05DRShbcmVhZGxpbmthdF0pCisgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfcmVh ZGxpbmthdCA9IG5vOyB0aGVuCisgICAgSEFWRV9SRUFETElOS0FUPTAKKyAgZmkKK10pCgo9 PT0gbW9kaWZpZWQgZmlsZSAnc3JjL0NoYW5nZUxvZycKLS0tIHNyYy9DaGFuZ2VMb2cJMjAx My0wMS0yNCAwNTo1NjozMSArMDAwMAorKysgc3JjL0NoYW5nZUxvZwkyMDEzLTAxLTI0IDA4 OjA3OjUyICswMDAwCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTMtMDEtMjQgIFBhdWwgRWdnZXJ0 ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJVXNlIGZkb3BlbmRpciwgZnN0YXRhdCBhbmQg cmVhZGxpbmthdCwgZm9yIGVmZmljaWVuY3kuCisJKiBjb25mX3Bvc3QuaCAoR05VTElCX1NV UFBPUlRfT05MWV9BVF9GRENXRCk6IFJlbW92ZS4KKwkqIGRpcmVkLmM6IEluY2x1ZGUgPGZj bnRsLmg+LgorCShvcGVuX2RpcmVjdG9yeSk6IE5ldyBmdW5jdGlvbiwgd2hpY2ggdXNlcyBv cGVuIGFuZCBmZG9wZW5kaXIKKwlyYXRoZXIgdGhhbiBvcGVuZGlyLgorCShkaXJlY3Rvcnlf ZmlsZXNfaW50ZXJuYWwsIGZpbGVfbmFtZV9jb21wbGV0aW9uKTogVXNlIGl0LgorCShmaWxl X2F0dHJpYnV0ZXMpOiBOZXcgZnVuY3Rpb24sIHdpdGggbW9zdCBvZiB0aGUgb2xkIEZmaWxl X2F0dHJpYnV0ZXMuCisJKGRpcmVjdG9yeV9maWxlc19pbnRlcm5hbCwgRmZpbGVfYXR0cmli dXRlcyk6IFVzZSBpdC4KKwkoZmlsZV9hdHRyaWJ1dGVzLCBmaWxlX25hbWVfY29tcGxldGlv bl9zdGF0KTogRmlyc3QgYXJnIGlzIG5vdyBmZCwKKwlub3QgZGlyIG5hbWUuICBBbGwgdXNl cyBjaGFuZ2VkLiAgVXNlIGZzdGF0YXQgcmF0aGVyIHRoYW4gbHN0YXQgKworCXN0YXQuCisJ KGZpbGVfYXR0cmlidXRlcyk6IFVzZSBlbWFjc19yZWFkbGlua2F0IHJhdGhlciB0aGFuIEZm aWxlX3N5bWxpbmtfcC4KKwkqIGZpbGVpby5jOiBJbmNsdWRlIDxhbGxvY2F0b3IuaD4sIDxj YXJlYWRsaW5rYXQuaD4uCisJKGVtYWNzX3JlYWRsaW5rYXQpOiBOZXcgZnVuY3Rpb24sIHdp dGggbXVjaCBvZiB0aGUgb2xkCisJRmZpbGVfc3ltbGlua19wLCBidXQgd2l0aCBhbiBmZCBh cmd1bWVudCBmb3Igc3BlZWQuCisJSXQgdXNlcyByZWFkbGlua2F0IHJhdGhlciB0aGFuIGNh cmVhZGxpbmthdGN3ZCwgc28gdGhhdCBpdAorCW5lZWQgbm90IGFzc3VtZSB0aGUgd29ya2lu ZyBkaXJlY3RvcnkuCisJKEZmaWxlX3N5bWxpbmtfcCk6IFVzZSBpdC4KKwkqIGZpbGVsb2Nr LmMgKGN1cnJlbnRfbG9ja19vd25lcik6IFVzZSBlbWFjc19yZWFkbGlua2F0CisJcmF0aGVy IHRoYW4gZW1hY3NfcmVhZGxpbmsuCisJKiBsaXNwLmggKGVtYWNzX3JlYWRsaW5rYXQpOiBO ZXcgZGVjbC4KKwkoUkVBRExJTktfQlVGU0laRSwgZW1hY3NfcmVhZGxpbmspOiBSZW1vdmUu CisJKiBzeXNkZXAuYzogRG8gbm90IGluY2x1ZGUgPGFsbG9jYXRvci5oPiwgPGNhcmVhZGxp bmthdC5oPi4KKwkoZW1hY3Nfbm9yZWFsbG9jX2FsbG9jYXRvciwgZW1hY3NfcmVhZGxpbmsp OiBSZW1vdmUuCisJVGhpcyBzdHVmZiBpcyBtb3ZlZCB0byBmaWxlaW8uYy4KKwogMjAxMy0w MS0yNCAgRG1pdHJ5IEFudGlwb3YgIDxkbWFudGlwb3ZAeWFuZGV4LnJ1PgogCiAJKiBuc2Zv bnQubSAobnNfZXNjYXBlX25hbWUsIG5zX3VuZXNjYXBlX25hbWUsIG5zX3JlZ2lzdHJ5X3Rv X3NjcmlwdCk6Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2NvbmZfcG9zdC5oJwotLS0gc3Jj L2NvbmZfcG9zdC5oCTIwMTMtMDEtMDIgMTY6MTM6MDQgKzAwMDAKKysrIHNyYy9jb25mX3Bv c3QuaAkyMDEzLTAxLTI0IDA2OjUxOjI1ICswMDAwCkBAIC0xODIsMTAgKzE4Miw2IEBACiAj ZW5kaWYKICNlbmRpZgogCi0vKiBUZWxsIGdudWxpYiB0byBvbWl0IHN1cHBvcnQgZm9yIG9w ZW5hdC1yZWxhdGVkIGZ1bmN0aW9ucyBoYXZpbmcgYQotICAgZmlyc3QgYXJndW1lbnQgb3Ro ZXIgdGhhbiBBVF9GRENXRC4gICovCi0jZGVmaW5lIEdOVUxJQl9TVVBQT1JUX09OTFlfQVRf RkRDV0QKLQogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogCgo9 PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2RpcmVkLmMnCi0tLSBzcmMvZGlyZWQuYwkyMDEzLTAx LTE3IDA2OjI5OjQwICswMDAwCisrKyBzcmMvZGlyZWQuYwkyMDEzLTAxLTI0IDA2OjUxOjI1 ICswMDAwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8Z3JwLmg+CiAKICNpbmNsdWRl IDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAK ICNpbmNsdWRlIDxkaXJlbnQuaD4KQEAgLTU0LDYgKzU1LDcgQEAKIHN0YXRpYyBMaXNwX09i amVjdCBRZmlsZV9hdHRyaWJ1dGVzX2xlc3NwOwogCiBzdGF0aWMgcHRyZGlmZl90IHNjbXAg KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBwdHJkaWZmX3QpOworc3RhdGljIExpc3Bf T2JqZWN0IGZpbGVfYXR0cmlidXRlcyAoaW50LCBjaGFyIGNvbnN0ICosIExpc3BfT2JqZWN0 KTsKIAwKIC8qIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIERQJ3MgbmFtZS4gICov CiBzdGF0aWMgcHRyZGlmZl90CkBAIC02Niw2ICs2OCwzNSBAQAogI2VuZGlmCiB9CiAKK3N0 YXRpYyBESVIgKgorb3Blbl9kaXJlY3RvcnkgKGNoYXIgY29uc3QgKm5hbWUsIGludCAqZmRw KQoreworICBESVIgKmQ7CisgIGludCBmZCwgb3BlbmRpcl9lcnJubzsKKworICBibG9ja19p bnB1dCAoKTsKKworICBmZCA9IGVtYWNzX29wZW4gKG5hbWUsIE9fUkRPTkxZIHwgT19ESVJF Q1RPUlksIDApOworICBpZiAoZmQgPCAwKQorICAgIHsKKyAgICAgIG9wZW5kaXJfZXJybm8g PSBlcnJubzsKKyAgICAgIGQgPSAwOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGQg PSBmZG9wZW5kaXIgKGZkKTsKKyAgICAgIG9wZW5kaXJfZXJybm8gPSBlcnJubzsKKyAgICAg IGlmICghIGQpCisJY2xvc2UgKGZkKTsKKyAgICB9CisKKyAgdW5ibG9ja19pbnB1dCAoKTsK KworICAqZmRwID0gZmQ7CisgIGVycm5vID0gb3BlbmRpcl9lcnJubzsKKyAgcmV0dXJuIGQ7 Cit9CisKICNpZmRlZiBXSU5ET1dTTlQKIExpc3BfT2JqZWN0CiBkaXJlY3RvcnlfZmlsZXNf aW50ZXJuYWxfdzMyX3Vud2luZCAoTGlzcF9PYmplY3QgYXJnKQpAQCAtOTYsNiArMTI3LDcg QEAKIAkJCSAgTGlzcF9PYmplY3QgaWRfZm9ybWF0KQogewogICBESVIgKmQ7CisgIGludCBm ZDsKICAgcHRyZGlmZl90IGRpcmVjdG9yeV9uYnl0ZXM7CiAgIExpc3BfT2JqZWN0IGxpc3Qs IGRpcmZpbGVuYW1lLCBlbmNvZGVkX2RpcmVjdG9yeTsKICAgc3RydWN0IHJlX3BhdHRlcm5f YnVmZmVyICpidWZwID0gTlVMTDsKQEAgLTE0Miw5ICsxNzQsNyBAQAogICAvKiBOb3cgKmJ1 ZnAgaXMgdGhlIGNvbXBpbGVkIGZvcm0gb2YgTUFUQ0g7IGRvbid0IGNhbGwgYW55dGhpbmcK ICAgICAgd2hpY2ggbWlnaHQgY29tcGlsZSBhIG5ldyByZWdleHAgdW50aWwgd2UncmUgZG9u ZSB3aXRoIHRoZSBsb29wISAgKi8KIAotICBibG9ja19pbnB1dCAoKTsKLSAgZCA9IG9wZW5k aXIgKFNTREFUQSAoZGlyZmlsZW5hbWUpKTsKLSAgdW5ibG9ja19pbnB1dCAoKTsKKyAgZCA9 IG9wZW5fZGlyZWN0b3J5IChTU0RBVEEgKGRpcmZpbGVuYW1lKSwgJmZkKTsKICAgaWYgKGQg PT0gTlVMTCkKICAgICByZXBvcnRfZmlsZV9lcnJvciAoIk9wZW5pbmcgZGlyZWN0b3J5Iiwg RmNvbnMgKGRpcmVjdG9yeSwgUW5pbCkpOwogCkBAIC0yNTksMjAgKzI4OSw5IEBACiAKIAkg IGlmIChhdHRycykKIAkgICAgewotCSAgICAgIC8qIENvbnN0cnVjdCBhbiBleHBhbmRlZCBm aWxlbmFtZSBmb3IgdGhlIGRpcmVjdG9yeSBlbnRyeS4KLQkJIFVzZSB0aGUgZGVjb2RlZCBu YW1lcyBmb3IgaW5wdXQgdG8gRmZpbGVfYXR0cmlidXRlcy4gICovCi0JICAgICAgTGlzcF9P YmplY3QgZGVjb2RlZF9mdWxsbmFtZSwgZmlsZWF0dHJzOwotCSAgICAgIHN0cnVjdCBnY3By byBnY3BybzEsIGdjcHJvMjsKLQotCSAgICAgIGRlY29kZWRfZnVsbG5hbWUgPSBmaWxlYXR0 cnMgPSBRbmlsOwotCSAgICAgIEdDUFJPMiAoZGVjb2RlZF9mdWxsbmFtZSwgZmlsZWF0dHJz KTsKLQotCSAgICAgIC8qIEJvdGggRmV4cGFuZF9maWxlX25hbWUgYW5kIEZmaWxlX2F0dHJp YnV0ZXMgY2FuIEdDLiAgKi8KLQkgICAgICBkZWNvZGVkX2Z1bGxuYW1lID0gRmV4cGFuZF9m aWxlX25hbWUgKG5hbWUsIGRpcmVjdG9yeSk7Ci0JICAgICAgZmlsZWF0dHJzID0gRmZpbGVf YXR0cmlidXRlcyAoZGVjb2RlZF9mdWxsbmFtZSwgaWRfZm9ybWF0KTsKLQorCSAgICAgIExp c3BfT2JqZWN0IGZpbGVhdHRycworCQk9IGZpbGVfYXR0cmlidXRlcyAoZmQsIGRwLT5kX25h bWUsIGlkX2Zvcm1hdCk7CiAJICAgICAgbGlzdCA9IEZjb25zIChGY29ucyAoZmluYWxuYW1l LCBmaWxlYXR0cnMpLCBsaXN0KTsKLQkgICAgICBVTkdDUFJPOwogCSAgICB9CiAJICBlbHNl CiAJICAgIGxpc3QgPSBGY29ucyAoZmluYWxuYW1lLCBsaXN0KTsKQEAgLTQxMyw4ICs0MzIs NyBAQAogICByZXR1cm4gZmlsZV9uYW1lX2NvbXBsZXRpb24gKGZpbGUsIGRpcmVjdG9yeSwg MSwgUW5pbCk7CiB9CiAKLXN0YXRpYyBpbnQgZmlsZV9uYW1lX2NvbXBsZXRpb25fc3RhdCAo TGlzcF9PYmplY3QgZGlybmFtZSwgc3RydWN0IGRpcmVudCAqZHAsCi0JCQkJICAgICAgc3Ry dWN0IHN0YXQgKnN0X2FkZHIpOworc3RhdGljIGludCBmaWxlX25hbWVfY29tcGxldGlvbl9z dGF0IChpbnQsIHN0cnVjdCBkaXJlbnQgKmRwLCBzdHJ1Y3Qgc3RhdCAqKTsKIHN0YXRpYyBM aXNwX09iamVjdCBRZGVmYXVsdF9kaXJlY3Rvcnk7CiAKIHN0YXRpYyBMaXNwX09iamVjdApA QCAtNDIyLDYgKzQ0MCw3IEBACiAJCSAgICAgIExpc3BfT2JqZWN0IHByZWRpY2F0ZSkKIHsK ICAgRElSICpkOworICBpbnQgZmQ7CiAgIHB0cmRpZmZfdCBiZXN0bWF0Y2hzaXplID0gMDsK ICAgaW50IG1hdGNoY291bnQgPSAwOwogICAvKiBJZiBBTExfRkxBRyBpcyAxLCBCRVNUTUFU Q0ggaXMgdGhlIGxpc3Qgb2YgYWxsIG1hdGNoZXMsIGRlY29kZWQuCkBAIC00NTgsOSArNDc3 LDcgQEAKIAogICBlbmNvZGVkX2RpciA9IEVOQ09ERV9GSUxFIChkaXJuYW1lKTsKIAotICBi bG9ja19pbnB1dCAoKTsKLSAgZCA9IG9wZW5kaXIgKFNTREFUQSAoRmRpcmVjdG9yeV9maWxl X25hbWUgKGVuY29kZWRfZGlyKSkpOwotICB1bmJsb2NrX2lucHV0ICgpOworICBkID0gb3Bl bl9kaXJlY3RvcnkgKFNTREFUQSAoRmRpcmVjdG9yeV9maWxlX25hbWUgKGVuY29kZWRfZGly KSksICZmZCk7CiAgIGlmICghZCkKICAgICByZXBvcnRfZmlsZV9lcnJvciAoIk9wZW5pbmcg ZGlyZWN0b3J5IiwgRmNvbnMgKGRpcm5hbWUsIFFuaWwpKTsKIApAQCAtNDk1LDcgKzUxMiw3 IEBACiAJCQlTQ0hBUlMgKGVuY29kZWRfZmlsZSkpKQogCWNvbnRpbnVlOwogCi0gICAgICBp ZiAoZmlsZV9uYW1lX2NvbXBsZXRpb25fc3RhdCAoZW5jb2RlZF9kaXIsIGRwLCAmc3QpIDwg MCkKKyAgICAgIGlmIChmaWxlX25hbWVfY29tcGxldGlvbl9zdGF0IChmZCwgZHAsICZzdCkg PCAwKQogCWNvbnRpbnVlOwogCiAgICAgICBkaXJlY3RvcnlwID0gU19JU0RJUiAoc3Quc3Rf bW9kZSkgIT0gMDsKQEAgLTc3MiwxNCArNzg5LDkgQEAKIH0KIAogc3RhdGljIGludAotZmls ZV9uYW1lX2NvbXBsZXRpb25fc3RhdCAoTGlzcF9PYmplY3QgZGlybmFtZSwgc3RydWN0IGRp cmVudCAqZHAsCi0JCQkgICBzdHJ1Y3Qgc3RhdCAqc3RfYWRkcikKK2ZpbGVfbmFtZV9jb21w bGV0aW9uX3N0YXQgKGludCBmZCwgc3RydWN0IGRpcmVudCAqZHAsIHN0cnVjdCBzdGF0ICpz dF9hZGRyKQogewotICBwdHJkaWZmX3QgbGVuID0gZGlyZW50X25hbWVsZW4gKGRwKTsKLSAg cHRyZGlmZl90IHBvcyA9IFNDSEFSUyAoZGlybmFtZSk7CiAgIGludCB2YWx1ZTsKLSAgVVNF X1NBRkVfQUxMT0NBOwotICBjaGFyICpmdWxsbmFtZSA9IFNBRkVfQUxMT0NBIChsZW4gKyBw b3MgKyAyKTsKIAogI2lmZGVmIE1TRE9TCiAgIC8qIFNvbWUgZmllbGRzIG9mIHN0cnVjdCBz dGF0IGFyZSAqdmVyeSogZXhwZW5zaXZlIHRvIGNvbXB1dGUgb24gTVMtRE9TLApAQCAtNzky LDIzICs4MDQsMTUgQEAKICAgX2Rqc3RhdF9mbGFncyA9IF9TVEFUX0lOT0RFIHwgX1NUQVRf RVhFQ19NQUdJQyB8IF9TVEFUX0RJUlNJWkU7CiAjZW5kaWYgLyogTVNET1MgKi8KIAotICBt ZW1jcHkgKGZ1bGxuYW1lLCBTREFUQSAoZGlybmFtZSksIHBvcyk7Ci0gIGlmICghSVNfRElS RUNUT1JZX1NFUCAoZnVsbG5hbWVbcG9zIC0gMV0pKQotICAgIGZ1bGxuYW1lW3BvcysrXSA9 IERJUkVDVE9SWV9TRVA7Ci0KLSAgbWVtY3B5IChmdWxsbmFtZSArIHBvcywgZHAtPmRfbmFt ZSwgbGVuKTsKLSAgZnVsbG5hbWVbcG9zICsgbGVuXSA9IDA7Ci0KICAgLyogV2Ugd2FudCB0 byByZXR1cm4gc3VjY2VzcyBpZiBhIGxpbmsgcG9pbnRzIHRvIGEgbm9uZXhpc3RlbnQgZmls ZSwKICAgICAgYnV0IHdlIHdhbnQgdG8gcmV0dXJuIHRoZSBzdGF0dXMgZm9yIHdoYXQgdGhl IGxpbmsgcG9pbnRzIHRvLAogICAgICBpbiBjYXNlIGl0IGlzIGEgZGlyZWN0b3J5LiAgKi8K LSAgdmFsdWUgPSBsc3RhdCAoZnVsbG5hbWUsIHN0X2FkZHIpOworICB2YWx1ZSA9IGZzdGF0 YXQgKGZkLCBkcC0+ZF9uYW1lLCBzdF9hZGRyLCBBVF9TWU1MSU5LX05PRk9MTE9XKTsKICAg aWYgKHZhbHVlID09IDAgJiYgU19JU0xOSyAoc3RfYWRkci0+c3RfbW9kZSkpCi0gICAgc3Rh dCAoZnVsbG5hbWUsIHN0X2FkZHIpOworICAgIGZzdGF0YXQgKGZkLCBkcC0+ZF9uYW1lLCBz dF9hZGRyLCAwKTsKICNpZmRlZiBNU0RPUwogICBfZGpzdGF0X2ZsYWdzID0gc2F2ZV9kanN0 YXRfZmxhZ3M7CiAjZW5kaWYgLyogTVNET1MgKi8KLSAgU0FGRV9GUkVFICgpOwogICByZXR1 cm4gdmFsdWU7CiB9CiAMCkBAIC04ODYsMTggKzg5MCw4IEBACiBzbyBsYXN0IGFjY2VzcyB0 aW1lIHdpbGwgYWx3YXlzIGJlIG1pZG5pZ2h0IG9mIHRoYXQgZGF5LiAgKi8pCiAgIChMaXNw X09iamVjdCBmaWxlbmFtZSwgTGlzcF9PYmplY3QgaWRfZm9ybWF0KQogewotICBMaXNwX09i amVjdCB2YWx1ZXNbMTJdOwogICBMaXNwX09iamVjdCBlbmNvZGVkOwotICBzdHJ1Y3Qgc3Rh dCBzOwotICBpbnQgbHN0YXRfcmVzdWx0OwotCi0gIC8qIEFuIGFycmF5IHRvIGhvbGQgdGhl IG1vZGUgc3RyaW5nIGdlbmVyYXRlZCBieSBmaWxlbW9kZXN0cmluZywKLSAgICAgaW5jbHVk aW5nIGl0cyB0ZXJtaW5hdGluZyBzcGFjZSBhbmQgbnVsbCBieXRlLiAgKi8KLSAgY2hhciBt b2Rlc1tzaXplb2YgIi1yd3hyLXhyLXggIl07Ci0KICAgTGlzcF9PYmplY3QgaGFuZGxlcjsK LSAgc3RydWN0IGdjcHJvIGdjcHJvMTsKLSAgY2hhciAqdW5hbWUgPSBOVUxMLCAqZ25hbWUg PSBOVUxMOwogCiAgIGZpbGVuYW1lID0gRmV4cGFuZF9maWxlX25hbWUgKGZpbGVuYW1lLCBR bmlsKTsKIApAQCAtOTEzLDkgKzkwNywyMiBAQAogCXJldHVybiBjYWxsMyAoaGFuZGxlciwg UWZpbGVfYXR0cmlidXRlcywgZmlsZW5hbWUsIGlkX2Zvcm1hdCk7CiAgICAgfQogCi0gIEdD UFJPMSAoZmlsZW5hbWUpOwogICBlbmNvZGVkID0gRU5DT0RFX0ZJTEUgKGZpbGVuYW1lKTsK LSAgVU5HQ1BSTzsKKyAgcmV0dXJuIGZpbGVfYXR0cmlidXRlcyAoQVRfRkRDV0QsIFNTREFU QSAoZW5jb2RlZCksIGlkX2Zvcm1hdCk7Cit9CisKK3N0YXRpYyBMaXNwX09iamVjdAorZmls ZV9hdHRyaWJ1dGVzIChpbnQgZmQsIGNoYXIgY29uc3QgKm5hbWUsIExpc3BfT2JqZWN0IGlk X2Zvcm1hdCkKK3sKKyAgTGlzcF9PYmplY3QgdmFsdWVzWzEyXTsKKyAgc3RydWN0IHN0YXQg czsKKyAgaW50IGxzdGF0X3Jlc3VsdDsKKworICAvKiBBbiBhcnJheSB0byBob2xkIHRoZSBt b2RlIHN0cmluZyBnZW5lcmF0ZWQgYnkgZmlsZW1vZGVzdHJpbmcsCisgICAgIGluY2x1ZGlu ZyBpdHMgdGVybWluYXRpbmcgc3BhY2UgYW5kIG51bGwgYnl0ZS4gICovCisgIGNoYXIgbW9k ZXNbc2l6ZW9mICItcnd4ci14ci14ICJdOworCisgIGNoYXIgKnVuYW1lID0gTlVMTCwgKmdu YW1lID0gTlVMTDsKIAogI2lmZGVmIFdJTkRPV1NOVAogICAvKiBXZSB1c3VhbGx5IGRvbid0 IHJlcXVlc3QgYWNjdXJhdGUgb3duZXIgYW5kIGdyb3VwIGluZm8sIGJlY2F1c2UKQEAgLTky NSw3ICs5MzIsNyBAQAogICB3MzJfc3RhdF9nZXRfb3duZXJfZ3JvdXAgPSAxOwogI2VuZGlm CiAKLSAgbHN0YXRfcmVzdWx0ID0gbHN0YXQgKFNTREFUQSAoZW5jb2RlZCksICZzKTsKKyAg bHN0YXRfcmVzdWx0ID0gZnN0YXRhdCAoZmQsIG5hbWUsICZzLCBBVF9TWU1MSU5LX05PRk9M TE9XKTsKIAogI2lmZGVmIFdJTkRPV1NOVAogICB3MzJfc3RhdF9nZXRfb3duZXJfZ3JvdXAg PSAwOwpAQCAtOTM0LDcgKzk0MSw3IEBACiAgIGlmIChsc3RhdF9yZXN1bHQgPCAwKQogICAg IHJldHVybiBRbmlsOwogCi0gIHZhbHVlc1swXSA9IChTX0lTTE5LIChzLnN0X21vZGUpID8g RmZpbGVfc3ltbGlua19wIChmaWxlbmFtZSkKKyAgdmFsdWVzWzBdID0gKFNfSVNMTksgKHMu c3RfbW9kZSkgPyBlbWFjc19yZWFkbGlua2F0IChmZCwgbmFtZSkKIAkgICAgICAgOiBTX0lT RElSIChzLnN0X21vZGUpID8gUXQgOiBRbmlsKTsKICAgdmFsdWVzWzFdID0gbWFrZV9udW1i ZXIgKHMuc3RfbmxpbmspOwogCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2ZpbGVpby5jJwot LS0gc3JjL2ZpbGVpby5jCTIwMTMtMDEtMjMgMjA6MDc6MjggKzAwMDAKKysrIHNyYy9maWxl aW8uYwkyMDEzLTAxLTI0IDA4OjAyOjE2ICswMDAwCkBAIC04Miw2ICs4Miw4IEBACiAjZW5k aWYKIAogI2luY2x1ZGUgInN5c3RpbWUuaCIKKyNpbmNsdWRlIDxhbGxvY2F0b3IuaD4KKyNp bmNsdWRlIDxjYXJlYWRsaW5rYXQuaD4KICNpbmNsdWRlIDxzdGF0LXRpbWUuaD4KIAogI2lm ZGVmIEhQVVgKQEAgLTI3NTgsNiArMjc2MCwyOSBAQAogICByZXR1cm4gUW5pbDsKIH0KIAwK Ky8qIFJlbGF0aXZlIHRvIGRpcmVjdG9yeSBGRCwgcmV0dXJuIHRoZSBzeW1ib2xpYyBsaW5r IHZhbHVlIG9mIEZJTEVOQU1FLgorICAgT24gZmFpbHVyZSwgcmV0dXJuIG5pbC4gICovCitM aXNwX09iamVjdAorZW1hY3NfcmVhZGxpbmthdCAoaW50IGZkLCBjaGFyIGNvbnN0ICpmaWxl bmFtZSkKK3sKKyAgc3RhdGljIHN0cnVjdCBhbGxvY2F0b3IgY29uc3QgZW1hY3Nfbm9yZWFs bG9jX2FsbG9jYXRvciA9CisgICAgeyB4bWFsbG9jLCBOVUxMLCB4ZnJlZSwgbWVtb3J5X2Z1 bGwgfTsKKyAgTGlzcF9PYmplY3QgdmFsOworICBjaGFyIHJlYWRsaW5rX2J1ZlsxMDI0XTsK KyAgY2hhciAqYnVmID0gY2FyZWFkbGlua2F0IChmZCwgZmlsZW5hbWUsIHJlYWRsaW5rX2J1 Ziwgc2l6ZW9mIHJlYWRsaW5rX2J1ZiwKKwkJCSAgICAmZW1hY3Nfbm9yZWFsbG9jX2FsbG9j YXRvciwgcmVhZGxpbmthdCk7CisgIGlmICghYnVmKQorICAgIHJldHVybiBRbmlsOworCisg IHZhbCA9IGJ1aWxkX3N0cmluZyAoYnVmKTsKKyAgaWYgKGJ1ZlswXSA9PSAnLycgJiYgc3Ry Y2hyIChidWYsICc6JykpCisgICAgdmFsID0gY29uY2F0MiAoYnVpbGRfc3RyaW5nICgiLzoi KSwgdmFsKTsKKyAgaWYgKGJ1ZiAhPSByZWFkbGlua19idWYpCisgICAgeGZyZWUgKGJ1Zik7 CisgIHZhbCA9IERFQ09ERV9GSUxFICh2YWwpOworICByZXR1cm4gdmFsOworfQorCiBERUZV TiAoImZpbGUtc3ltbGluay1wIiwgRmZpbGVfc3ltbGlua19wLCBTZmlsZV9zeW1saW5rX3As IDEsIDEsIDAsCiAgICAgICAgZG9jOiAvKiBSZXR1cm4gbm9uLW5pbCBpZiBmaWxlIEZJTEVO QU1FIGlzIHRoZSBuYW1lIG9mIGEgc3ltYm9saWMgbGluay4KIFRoZSB2YWx1ZSBpcyB0aGUg bGluayB0YXJnZXQsIGFzIGEgc3RyaW5nLgpAQCAtMjc2OCw5ICsyNzkzLDYgQEAKICAgKExp c3BfT2JqZWN0IGZpbGVuYW1lKQogewogICBMaXNwX09iamVjdCBoYW5kbGVyOwotICBjaGFy ICpidWY7Ci0gIExpc3BfT2JqZWN0IHZhbDsKLSAgY2hhciByZWFkbGlua19idWZbUkVBRExJ TktfQlVGU0laRV07CiAKICAgQ0hFQ0tfU1RSSU5HIChmaWxlbmFtZSk7CiAgIGZpbGVuYW1l ID0gRmV4cGFuZF9maWxlX25hbWUgKGZpbGVuYW1lLCBRbmlsKTsKQEAgLTI3ODMsMTcgKzI4 MDUsNyBAQAogCiAgIGZpbGVuYW1lID0gRU5DT0RFX0ZJTEUgKGZpbGVuYW1lKTsKIAotICBi dWYgPSBlbWFjc19yZWFkbGluayAoU1NEQVRBIChmaWxlbmFtZSksIHJlYWRsaW5rX2J1Zik7 Ci0gIGlmICghIGJ1ZikKLSAgICByZXR1cm4gUW5pbDsKLQotICB2YWwgPSBidWlsZF9zdHJp bmcgKGJ1Zik7Ci0gIGlmIChidWZbMF0gPT0gJy8nICYmIHN0cmNociAoYnVmLCAnOicpKQot ICAgIHZhbCA9IGNvbmNhdDIgKGJ1aWxkX3N0cmluZyAoIi86IiksIHZhbCk7Ci0gIGlmIChi dWYgIT0gcmVhZGxpbmtfYnVmKQotICAgIHhmcmVlIChidWYpOwotICB2YWwgPSBERUNPREVf RklMRSAodmFsKTsKLSAgcmV0dXJuIHZhbDsKKyAgcmV0dXJuIGVtYWNzX3JlYWRsaW5rYXQg KEFUX0ZEQ1dELCBTU0RBVEEgKGZpbGVuYW1lKSk7CiB9CiAKIERFRlVOICgiZmlsZS1kaXJl Y3RvcnktcCIsIEZmaWxlX2RpcmVjdG9yeV9wLCBTZmlsZV9kaXJlY3RvcnlfcCwgMSwgMSwg MCwKCj09PSBtb2RpZmllZCBmaWxlICdzcmMvZmlsZWxvY2suYycKLS0tIHNyYy9maWxlbG9j ay5jCTIwMTMtMDEtMDEgMDk6MTE6MDUgKzAwMDAKKysrIHNyYy9maWxlbG9jay5jCTIwMTMt MDEtMjQgMDY6NTE6MjUgKzAwMDAKQEAgLTM5MCwxMiArMzkwLDE0IEBACiAgIGxvY2tfaW5m b190eXBlIGxvY2FsX293bmVyOwogICBpbnRtYXhfdCBuOwogICBjaGFyICphdCwgKmRvdCwg KmNvbG9uOwotICBjaGFyIHJlYWRsaW5rX2J1ZltSRUFETElOS19CVUZTSVpFXTsKLSAgY2hh ciAqbGZpbmZvID0gZW1hY3NfcmVhZGxpbmsgKGxmbmFtZSwgcmVhZGxpbmtfYnVmKTsKKyAg TGlzcF9PYmplY3QgbGZpbmZvX29iamVjdCA9IGVtYWNzX3JlYWRsaW5rYXQgKEFUX0ZEQ1dE LCBsZm5hbWUpOworICBjaGFyICpsZmluZm87CisgIHN0cnVjdCBnY3BybyBnY3BybzE7CiAK ICAgLyogSWYgbm9uZXhpc3RlbnQgbG9jayBmaWxlLCBhbGwgaXMgd2VsbDsgb3RoZXJ3aXNl LCBnb3Qgc3RyYW5nZSBlcnJvci4gKi8KLSAgaWYgKCFsZmluZm8pCisgIGlmIChOSUxQIChs ZmluZm9fb2JqZWN0KSkKICAgICByZXR1cm4gZXJybm8gPT0gRU5PRU5UID8gMCA6IC0xOwor ICBsZmluZm8gPSBTU0RBVEEgKGxmaW5mb19vYmplY3QpOwogCiAgIC8qIEV2ZW4gaWYgdGhl IGNhbGxlciBkb2Vzbid0IHdhbnQgdGhlIG93bmVyIGluZm8sIHdlIHN0aWxsIGhhdmUgdG8K ICAgICAgcmVhZCBpdCB0byBkZXRlcm1pbmUgcmV0dXJuIHZhbHVlLiAgKi8KQEAgLTQwNywx MiArNDA5LDkgQEAKICAgYXQgPSBzdHJyY2hyIChsZmluZm8sICdAJyk7CiAgIGRvdCA9IHN0 cnJjaHIgKGxmaW5mbywgJy4nKTsKICAgaWYgKCFhdCB8fCAhZG90KQotICAgIHsKLSAgICAg IGlmIChsZmluZm8gIT0gcmVhZGxpbmtfYnVmKQotCXhmcmVlIChsZmluZm8pOwotICAgICAg cmV0dXJuIC0xOwotICAgIH0KKyAgICByZXR1cm4gLTE7CiAgIGxlbiA9IGF0IC0gbGZpbmZv OworICBHQ1BSTzEgKGxmaW5mb19vYmplY3QpOwogICBvd25lci0+dXNlciA9IHhtYWxsb2Mg KGxlbiArIDEpOwogICBtZW1jcHkgKG93bmVyLT51c2VyLCBsZmluZm8sIGxlbik7CiAgIG93 bmVyLT51c2VyW2xlbl0gPSAwOwpAQCAtNDQ1LDggKzQ0NCw3IEBACiAgIG93bmVyLT5ob3N0 W2xlbl0gPSAwOwogCiAgIC8qIFdlJ3JlIGRvbmUgbG9va2luZyBhdCB0aGUgbGluayBpbmZv LiAgKi8KLSAgaWYgKGxmaW5mbyAhPSByZWFkbGlua19idWYpCi0gICAgeGZyZWUgKGxmaW5m byk7CisgIFVOR0NQUk87CiAKICAgLyogT24gY3VycmVudCBob3N0PyAgKi8KICAgaWYgKFNU UklOR1AgKEZzeXN0ZW1fbmFtZSAoKSkKCj09PSBtb2RpZmllZCBmaWxlICdzcmMvbGlzcC5o JwotLS0gc3JjL2xpc3AuaAkyMDEzLTAxLTIzIDIwOjA3OjI4ICswMDAwCisrKyBzcmMvbGlz cC5oCTIwMTMtMDEtMjQgMDY6NTE6MjUgKzAwMDAKQEAgLTMyOTUsNiArMzI5NSw3IEBACiBl eHRlcm4gTGlzcF9PYmplY3QgcmVzdG9yZV9wb2ludF91bndpbmQgKExpc3BfT2JqZWN0KTsK IGV4dGVybiBfTm9yZXR1cm4gdm9pZCByZXBvcnRfZmlsZV9lcnJvciAoY29uc3QgY2hhciAq LCBMaXNwX09iamVjdCk7CiBleHRlcm4gYm9vbCBpbnRlcm5hbF9kZWxldGVfZmlsZSAoTGlz cF9PYmplY3QpOworZXh0ZXJuIExpc3BfT2JqZWN0IGVtYWNzX3JlYWRsaW5rYXQgKGludCwg Y29uc3QgY2hhciAqKTsKIGV4dGVybiBib29sIGZpbGVfZGlyZWN0b3J5X3AgKGNvbnN0IGNo YXIgKik7CiBleHRlcm4gYm9vbCBmaWxlX2FjY2Vzc2libGVfZGlyZWN0b3J5X3AgKGNvbnN0 IGNoYXIgKik7CiBleHRlcm4gdm9pZCBpbml0X2ZpbGVpbyAodm9pZCk7CkBAIC0zNTY3LDgg KzM1NjgsNiBAQAogZXh0ZXJuIGludCBlbWFjc19jbG9zZSAoaW50KTsKIGV4dGVybiBwdHJk aWZmX3QgZW1hY3NfcmVhZCAoaW50LCBjaGFyICosIHB0cmRpZmZfdCk7CiBleHRlcm4gcHRy ZGlmZl90IGVtYWNzX3dyaXRlIChpbnQsIGNvbnN0IGNoYXIgKiwgcHRyZGlmZl90KTsKLWVu dW0geyBSRUFETElOS19CVUZTSVpFID0gMTAyNCB9OwotZXh0ZXJuIGNoYXIgKmVtYWNzX3Jl YWRsaW5rIChjb25zdCBjaGFyICosIGNoYXIgW1JFQURMSU5LX0JVRlNJWkVdKTsKIAogZXh0 ZXJuIHZvaWQgdW5sb2NrX2FsbF9maWxlcyAodm9pZCk7CiBleHRlcm4gdm9pZCBsb2NrX2Zp bGUgKExpc3BfT2JqZWN0KTsKCj09PSBtb2RpZmllZCBmaWxlICdzcmMvc3lzZGVwLmMnCi0t LSBzcmMvc3lzZGVwLmMJMjAxMy0wMS0xMyAyMDowMzowMSArMDAwMAorKysgc3JjL3N5c2Rl cC5jCTIwMTMtMDEtMjQgMDY6NTE6MjUgKzAwMDAKQEAgLTMwLDkgKzMwLDcgQEAKICNpbmNs dWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KIAotI2luY2x1ZGUgPGFsbG9j YXRvci5oPgogI2luY2x1ZGUgPGMtY3R5cGUuaD4KLSNpbmNsdWRlIDxjYXJlYWRsaW5rYXQu aD4KICNpbmNsdWRlIDxpZ25vcmUtdmFsdWUuaD4KICNpbmNsdWRlIDx1dGltZW5zLmg+CiAK QEAgLTIyNDcsMjIgKzIyNDUsNiBAQAogCiAgIHJldHVybiAoYnl0ZXNfd3JpdHRlbik7CiB9 Ci0KLXN0YXRpYyBzdHJ1Y3QgYWxsb2NhdG9yIGNvbnN0IGVtYWNzX25vcmVhbGxvY19hbGxv Y2F0b3IgPQotICB7IHhtYWxsb2MsIE5VTEwsIHhmcmVlLCBtZW1vcnlfZnVsbCB9OwotCi0v KiBHZXQgdGhlIHN5bWJvbGljIGxpbmsgdmFsdWUgb2YgRklMRU5BTUUuICBSZXR1cm4gYSBw b2ludGVyIHRvIGEKLSAgIE5VTC10ZXJtaW5hdGVkIHN0cmluZy4gIElmIHJlYWRsaW5rIGZh aWxzLCByZXR1cm4gTlVMTCBhbmQgc2V0Ci0gICBlcnJuby4gIElmIHRoZSB2YWx1ZSBmaXRz IGluIElOSVRJQUxfQlVGLCByZXR1cm4gSU5JVElBTF9CVUYuCi0gICBPdGhlcndpc2UsIGFs bG9jYXRlIG1lbW9yeSBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byB0aGF0IG1lbW9yeS4gIElm Ci0gICBtZW1vcnkgYWxsb2NhdGlvbiBmYWlscywgZGlhZ25vc2UgYW5kIGZhaWwgd2l0aG91 dCByZXR1cm5pbmcuICBJZgotICAgc3VjY2Vzc2Z1bCwgc3RvcmUgdGhlIGxlbmd0aCBvZiB0 aGUgc3ltYm9saWMgbGluayBpbnRvICpMSU5LTEVOLiAgKi8KLWNoYXIgKgotZW1hY3NfcmVh ZGxpbmsgKGNoYXIgY29uc3QgKmZpbGVuYW1lLCBjaGFyIGluaXRpYWxfYnVmW1JFQURMSU5L X0JVRlNJWkVdKQotewotICByZXR1cm4gY2FyZWFkbGlua2F0IChBVF9GRENXRCwgZmlsZW5h bWUsIGluaXRpYWxfYnVmLCBSRUFETElOS19CVUZTSVpFLAotCQkgICAgICAgJmVtYWNzX25v cmVhbGxvY19hbGxvY2F0b3IsIGNhcmVhZGxpbmthdGN3ZCk7Ci19CiAMCiAvKiBSZXR1cm4g YSBzdHJ1Y3QgdGltZXZhbCB0aGF0IGlzIHJvdWdobHkgZXF1aXZhbGVudCB0byBULgogICAg VXNlIHRoZSBsZWFzdCB0aW1ldmFsIG5vdCBsZXNzIHRoYW4gVC4KCg== --------------070909000902080807010402--