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#14295: Support copy-file ACLs for Solaris etc. Date: Sun, 28 Apr 2013 23:15:06 -0700 Organization: UCLA Computer Science Department Message-ID: <517E0FEA.2000500@cs.ucla.edu> References: <517C987F.6060902@cs.ucla.edu> <83ehdushhu.fsf@gnu.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------040804070600040302090506" X-Trace: ger.gmane.org 1367216169 24421 80.91.229.3 (29 Apr 2013 06:16:09 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Mon, 29 Apr 2013 06:16:09 +0000 (UTC) Cc: 14295@debbugs.gnu.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Mon Apr 29 08:16:12 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 1UWhNi-0001sh-LZ for geb-bug-gnu-emacs@m.gmane.org; Mon, 29 Apr 2013 08:16:11 +0200 Original-Received: from localhost ([::1]:38626 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UWhNi-0006NH-6y for geb-bug-gnu-emacs@m.gmane.org; Mon, 29 Apr 2013 02:16:10 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:46940) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UWhNU-0006Dg-7c for bug-gnu-emacs@gnu.org; Mon, 29 Apr 2013 02:16:06 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UWhNK-00046N-LE for bug-gnu-emacs@gnu.org; Mon, 29 Apr 2013 02:15:56 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:45272) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UWhNK-00046H-CC for bug-gnu-emacs@gnu.org; Mon, 29 Apr 2013 02:15:46 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.72) (envelope-from ) id 1UWhNa-0006Jd-2L for bug-gnu-emacs@gnu.org; Mon, 29 Apr 2013 02:16:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Paul Eggert Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 29 Apr 2013 06:16:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 14295 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch X-Debbugs-Original-Cc: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.136721616124268 (code B ref -1); Mon, 29 Apr 2013 06:16:01 +0000 Original-Received: (at submit) by debbugs.gnu.org; 29 Apr 2013 06:16:01 +0000 Original-Received: from localhost ([127.0.0.1]:49382 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1UWhNY-0006JL-VY for submit@debbugs.gnu.org; Mon, 29 Apr 2013 02:16:01 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:35543) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1UWhNW-0006JC-Fl for submit@debbugs.gnu.org; Mon, 29 Apr 2013 02:15:58 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UWhN8-000456-B4 for submit@debbugs.gnu.org; Mon, 29 Apr 2013 02:15:42 -0400 Original-Received: from lists.gnu.org ([208.118.235.17]:47915) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UWhN8-000452-64 for submit@debbugs.gnu.org; Mon, 29 Apr 2013 02:15:34 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:46865) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UWhMx-0006DJ-Ga for bug-gnu-emacs@gnu.org; Mon, 29 Apr 2013 02:15:34 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UWhMo-00043R-Ge for bug-gnu-emacs@gnu.org; Mon, 29 Apr 2013 02:15:23 -0400 Original-Received: from smtp.cs.ucla.edu ([131.179.128.62]:46258) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UWhMn-00043I-Ju; Mon, 29 Apr 2013 02:15:14 -0400 Original-Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id 8FE43A60002; Sun, 28 Apr 2013 23:15:12 -0700 (PDT) X-Virus-Scanned: amavisd-new at smtp.cs.ucla.edu 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 Q5dEsSAGPguk; Sun, 28 Apr 2013 23:15:07 -0700 (PDT) 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 1628D39E8008; Sun, 28 Apr 2013 23:15:07 -0700 (PDT) User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130404 Thunderbird/17.0.5 In-Reply-To: <83ehdushhu.fsf@gnu.org> 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:73812 Archived-At: This is a multi-part message in MIME format. --------------040804070600040302090506 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit > How hard would it to support both? I don't know, and I'd rather not support --without-acl. This should have been an --enable/--disable option in the first place, as it's enabling or disabling a feature, not building with or without a package. There's little point to Emacs departing from existing GNU practice here. > This uses EOPNOTSUPP without #ifdef guards; is that universally > available? Mostly, except for Windows, but to play it safe we can incorporate the Gnulib errno module, which defines EOPNOTSUPP if it's not already defined. > If I'm right, perhaps it is best to leave the WINDOWSNT parts alone: Sure, we can do that. > It sounds wrong to me to condition a call to acl_get_file with a macro > called HAVE_ACL_SET_FILE. In practice both are available if either is; in particular, there's no point calling acl_get_file if you can't invoke acl_set_file later. > For this to work, acl-errno-valid.c will have to be compiled on > MS-Windows. And for that, we will need to solve the EOPNOTSUPP issue > mentioned above, because Windows doesn't define it. OK. Revised patch attached, which tries to address the above. It relies on Gnulib for EOPNOTSUPP, except for WINDOWSNT where 'configure' isn't working yet, and there it adds a line to nt/config.nt to deal with this until we get 'configure' working. --------------040804070600040302090506 Content-Type: text/plain; charset=UTF-8; name="acl.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="acl.txt" PT09IG1vZGlmaWVkIGZpbGUgJ0NoYW5nZUxvZycKLS0tIENoYW5nZUxvZwkyMDEzLTA0LTI5 IDA0OjQ4OjMwICswMDAwCisrKyBDaGFuZ2VMb2cJMjAxMy0wNC0yOSAwNjowNzo0MiArMDAw MApAQCAtMSw1ICsxLDE5IEBACiAyMDEzLTA0LTI5ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBj cy51Y2xhLmVkdT4KIAorCVVzZSBHbnVsaWIgQUNMIGltcGxlbWVudGF0aW9uLCBmb3IgYmVu ZWZpdCBvZiBTb2xhcmlzIGV0Yy4gKEJ1ZyMxNDI5NSkKKwkqIGNvbmZpZ3VyZS5hYzogUmVt b3ZlIC13aXRoLWFjbCBvcHRpb24sIHNpbmNlIEdudWxpYiBkb2VzIHRoYXQgZm9yCisJdXMg bm93LgorCShMSUJBQ0xfTElCUyk6IFJlbW92ZTsgbm8gbG9uZ2VyIG5lZWRlZC4KKwkqIGxp Yi9NYWtlZmlsZS5hbSAoQ0xFQU5GSUxFUywgU1VGRklYRVMpOiBOZXcgKGVtcHR5KSBtYWNy b3MsCisJZm9yIHRoZSBiZW5lZml0IG9mIHRoZSBuZXcgQUNMIGltcGxlbWVudGF0aW9uLgor CSogbGliL21ha2VmaWxlLnczMi1pbiAoR05VTElCT0JKUyk6IEFkZCAkKEJMRCkvYWNsLWVy cm5vLXZhbGlkLiQoTykuCisJKCQoQkxEKS9hY2wtZXJybm8tdmFsaWQuJChPKSk6IE5ldyBy dWxlLgorCSogbGliL2FjbC1lcnJuby12YWxpZC5jLCBsaWIvYWNsLWludGVybmFsLmgsIGxp Yi9hY2wuaDoKKwkqIGxpYi9hY2xfZW50cmllcy5jLCBsaWIvZXJybm8uaW4uaCwgbGliL2Zp bGUtaGFzLWFjbC5jOgorCSogbGliL3Fjb3B5LWFjbC5jLCBsaWIvcXNldC1hY2wuYywgbTQv YWNsLm00LCBtNC9lcnJub19oLm00OgorCU5ldyBmaWxlcywgdGFrZW4gZnJvbSBnbnVsaWIu CisJKiBsaWIvZ251bGliLm1rLCBtNC9nbnVsaWItY29tcC5tNDogUmVnZW5lcmF0ZS4KKwog CU1lcmdlIGZyb20gZ251bGliLCBpbmNvcnBvcmF0aW5nOgogCTIwMTMtMDQtMjggZXh0ZXJu LWlubGluZTogd29yayBhcm91bmQgYnVnIGluIFN1biBjOTkKIAoKPT09IG1vZGlmaWVkIGZp bGUgJ2FkbWluL0NoYW5nZUxvZycKLS0tIGFkbWluL0NoYW5nZUxvZwkyMDEzLTA0LTAyIDAx OjE4OjQwICswMDAwCisrKyBhZG1pbi9DaGFuZ2VMb2cJMjAxMy0wNC0yOSAwNjowNzo0MiAr MDAwMApAQCAtMSwzICsxLDkgQEAKKzIwMTMtMDQtMjkgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0 QGNzLnVjbGEuZWR1PgorCisJVXNlIEdudWxpYiBBQ0wgaW1wbGVtZW50YXRpb24sIGZvciBi ZW5lZml0IG9mIFNvbGFyaXMgZXRjLiAoQnVnIzE0Mjk1KQorCSogbWVyZ2UtZ251bGliIChH TlVMSUJfTU9EVUxFUyk6IEFkZCBxYWNsLgorCShHTlVMSUJfVE9PTF9GTEFHUyk6IERvIG5v dCBhdm9pZCBlcnJuby4KKwogMjAxMy0wNC0wMSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3Mu dWNsYS5lZHU+CiAKIAlVc2UgVVRGLTggZm9yIG1vc3QgZmlsZXMgd2l0aCBub24tQVNDSUkg Y2hhcmFjdGVycyAoQnVnIzEzOTM2KS4KCj09PSBtb2RpZmllZCBmaWxlICdhZG1pbi9tZXJn ZS1nbnVsaWInCi0tLSBhZG1pbi9tZXJnZS1nbnVsaWIJMjAxMy0wMy0xMyAxODo0MjoyMiAr MDAwMAorKysgYWRtaW4vbWVyZ2UtZ251bGliCTIwMTMtMDQtMjkgMDY6MDc6NDIgKzAwMDAK QEAgLTMzLDcgKzMzLDcgQEAKICAgZ2V0bG9hZGF2ZyBnZXRvcHQtZ251IGdldHRpbWUgZ2V0 dGltZW9mZGF5CiAgIGlnbm9yZS12YWx1ZSBpbnRwcm9wcyBsYXJnZWZpbGUgbHN0YXQKICAg bWFueXdhcm5pbmdzIG1lbXJjaHIgbWt0aW1lCi0gIHBzZWxlY3QgcHRocmVhZF9zaWdtYXNr IHB1dGVudiByZWFkbGluayByZWFkbGlua2F0CisgIHBzZWxlY3QgcHRocmVhZF9zaWdtYXNr IHB1dGVudiBxYWNsIHJlYWRsaW5rIHJlYWRsaW5rYXQKICAgc2lnMnN0ciBzb2NrbGVuIHN0 YXQtdGltZSBzdGRhbGlnbiBzdGRhcmcgc3RkYm9vbCBzdGRpbwogICBzdHJmdGltZSBzdHJ0 b2ltYXggc3RydG91bWF4IHN5bWxpbmsgc3lzX3N0YXQKICAgc3lzX3RpbWUgdGltZSB0aW1l ci10aW1lIHRpbWVzcGVjLWFkZCB0aW1lc3BlYy1zdWIgdW5zZXRlbnYgdXRpbWVucwpAQCAt NDIsNyArNDIsNyBAQAogCiBHTlVMSUJfVE9PTF9GTEFHUz0nCiAgIC0tYXZvaWQ9ZHVwCi0g IC0tYXZvaWQ9ZXJybm8gLS1hdm9pZD1mY2hkaXIgLS1hdm9pZD1mY250bCAtLWF2b2lkPWZz dGF0CisgIC0tYXZvaWQ9ZmNoZGlyIC0tYXZvaWQ9ZmNudGwgLS1hdm9pZD1mc3RhdAogICAt LWF2b2lkPW1hbGxvYy1wb3NpeCAtLWF2b2lkPW1zdmMtaW52YWwgLS1hdm9pZD1tc3ZjLW5v dGhyb3cKICAgLS1hdm9pZD1vcGVuIC0tYXZvaWQ9b3BlbmF0LWRpZSAtLWF2b2lkPW9wZW5k aXIKICAgLS1hdm9pZD1yYWlzZQoKPT09IG1vZGlmaWVkIGZpbGUgJ2NvbmZpZ3VyZS5hYycK LS0tIGNvbmZpZ3VyZS5hYwkyMDEzLTA0LTI2IDE5OjMxOjA5ICswMDAwCisrKyBjb25maWd1 cmUuYWMJMjAxMy0wNC0yNyAxOTo0MDo0OSArMDAwMApAQCAtMTk5LDcgKzE5OSw2IEBACiBP UFRJT05fREVGQVVMVF9PTihbZ2NvbmZdLFtkb24ndCBjb21waWxlIHdpdGggR0NvbmYgc3Vw cG9ydF0pCiBPUFRJT05fREVGQVVMVF9PTihbZ3NldHRpbmdzXSxbZG9uJ3QgY29tcGlsZSB3 aXRoIEdTZXR0aW5ncyBzdXBwb3J0XSkKIE9QVElPTl9ERUZBVUxUX09OKFtzZWxpbnV4XSxb ZG9uJ3QgY29tcGlsZSB3aXRoIFNFTGludXggc3VwcG9ydF0pCi1PUFRJT05fREVGQVVMVF9P TihbYWNsXSxbZG9uJ3QgY29tcGlsZSB3aXRoIEFDTCBzdXBwb3J0XSkKIE9QVElPTl9ERUZB VUxUX09OKFtnbnV0bHNdLFtkb24ndCB1c2UgLWxnbnV0bHMgZm9yIFNTTC9UTFMgc3VwcG9y dF0pCiBPUFRJT05fREVGQVVMVF9PTihbaW5vdGlmeV0sW2Rvbid0IGNvbXBpbGUgd2l0aCBp bm90aWZ5IChmaWxlLXdhdGNoKSBzdXBwb3J0XSkKIApAQCAtMjE4NSwyMyArMjE4NCw2IEBA CiAgIEFDX0RFRklORShIQVZFX0lOT1RJRlksIDEsIFtEZWZpbmUgdG8gMSB0byB1c2UgaW5v dGlmeS5dKQogZmkKIAotZG5sIFBPU0lYIEFDTCBzdXBwb3J0OiBwcm92aWRlZCBieSBsaWJh Y2wgb24gR05VL0xpbnV4LCBieSBsaWJjIG9uIEZyZWVCU0QuCi1IQVZFX1BPU0lYX0FDTD1u bwotTElCQUNMX0xJQlM9Ci1pZiB0ZXN0ICIke3dpdGhfYWNsfSIgPSAieWVzIjsgdGhlbgot ICBBQ19DSEVDS19MSUIoW2FjbF0sIFthY2xfc2V0X2ZpbGVdLCBIQVZFX1BPU0lYX0FDTD15 ZXMsIEhBVkVfUE9TSVhfQUNMPW5vKQotICBpZiB0ZXN0ICIkSEFWRV9QT1NJWF9BQ0wiID0g eWVzOyB0aGVuCi0gICAgQUNfREVGSU5FKEhBVkVfUE9TSVhfQUNMLCAxLCBbRGVmaW5lIHRv IDEgaWYgdXNpbmcgUE9TSVggQUNMIHN1cHBvcnQuXSkKLSAgICBMSUJBQ0xfTElCUz0tbGFj bAotICBlbHNlCi0gICAgQUNfQ0hFQ0tfRlVOQyhhY2xfc2V0X2ZpbGUsIEhBVkVfUE9TSVhf QUNMPXllcywgSEFWRV9QT1NJWF9BQ0w9bm8pCi0gICAgaWYgdGVzdCAiJEhBVkVfUE9TSVhf QUNMIiA9IHllczsgdGhlbgotICAgICAgQUNfREVGSU5FKEhBVkVfUE9TSVhfQUNMLCAxLCBb RGVmaW5lIHRvIDEgaWYgdXNpbmcgUE9TSVggQUNMIHN1cHBvcnQuXSkKLSAgICBmaQotIGZp Ci1maQotQUNfU1VCU1QoTElCQUNMX0xJQlMpCi0KIGRubCBEbyBub3QgcHV0IHdoaXRlc3Bh Y2UgYmVmb3JlIHRoZSAjaW5jbHVkZSBzdGF0ZW1lbnRzIGJlbG93LgogZG5sIE9sZGVyIGNv bXBpbGVycyAoZWcgc3Vub3M0IGNjKSBjaG9rZSBvbiBpdC4KIEhBVkVfWEFXM0Q9bm8KCj09 PSBtb2RpZmllZCBmaWxlICdldGMvQ2hhbmdlTG9nJwotLS0gZXRjL0NoYW5nZUxvZwkyMDEz LTA0LTI0IDE2OjUwOjE0ICswMDAwCisrKyBldGMvQ2hhbmdlTG9nCTIwMTMtMDQtMjkgMDQ6 NTA6MjYgKzAwMDAKQEAgLTEsMyArMSw5IEBACisyMDEzLTA0LTI5ICBQYXVsIEVnZ2VydCAg PGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCVVzZSBHbnVsaWIgQUNMIGltcGxlbWVudGF0aW9u LCBmb3IgYmVuZWZpdCBvZiBTb2xhcmlzIGV0Yy4gKEJ1ZyMxNDI5NSkKKwkqIE5FV1M6IEVt YWNzIGlzIG5vIGxvbmdlciBsaW1pdGVkIHRvIFBPU0lYIEFDTHMuICAtLWRpc2FibGUtYWNs LAorCW5vdCAtLXdpdGhvdXQtYWNsLCBzaW5jZSB3ZSdyZSBub3cgdXNpbmcgR251bGliJ3Mg aW1wbGVtZW50YXRpb24uCisKIDIwMTMtMDQtMjQgIFRhc3NpbG8gSG9ybiAgPHRzZGhAZ251 Lm9yZz4KIAogCSogdGhlbWVzL3RzZGgtZGFyay10aGVtZS5lbCAodHNkaC1kYXJrKTogQWRk IGlkbyBmYWNlcyBhbmQgcmVtb3ZlCgo9PT0gbW9kaWZpZWQgZmlsZSAnZXRjL05FV1MnCi0t LSBldGMvTkVXUwkyMDEzLTA0LTI3IDIwOjU1OjAwICswMDAwCisrKyBldGMvTkVXUwkyMDEz LTA0LTI4IDAwOjAwOjE5ICswMDAwCkBAIC0yMywxMCArMjMsMTAgQEAKIAwKICogSW5zdGFs bGF0aW9uIENoYW5nZXMgaW4gRW1hY3MgMjQuNAogCi0qKiBFbWFjcyBjYW4gYmUgY29tcGls ZWQgd2l0aCBQT1NJWCBBQ0wgc3VwcG9ydC4KKyoqIEVtYWNzIGNhbiBiZSBjb21waWxlZCB3 aXRoIEFDTCBzdXBwb3J0LgogVGhpcyBoYXBwZW5zIGJ5IGRlZmF1bHQgaWYgYSBzdWl0YWJs ZSBzdXBwb3J0IGxpYnJhcnkgaXMgZm91bmQgYXQKIGJ1aWxkIHRpbWUsIGxpa2UgbGliYWNs IG9uIEdOVS9MaW51eC4gIFRvIHByZXZlbnQgdGhpcywgdXNlIHRoZQotY29uZmlndXJlIG9w dGlvbiBgLS13aXRob3V0LWFjbCcuCitjb25maWd1cmUgb3B0aW9uIGAtLWRpc2FibGUtYWNs Jy4KIAogKiogVGhlIGNvbmZpZ3VyZSBvcHRpb24gLS13aXRoLWNydC1kaXIgaGFzIGJlZW4g cmVtb3ZlZC4KIEl0IGlzIG5vIGxvbmdlciBuZWVkZWQsIGFzIHRoZSBjcnQqLm8gZmlsZXMg YXJlIG5vIGxvbmdlciBsaW5rZWQgc3BlY2lhbGx5LgoKPT09IG1vZGlmaWVkIGZpbGUgJ2xp Yi9NYWtlZmlsZS5hbScKLS0tIGxpYi9NYWtlZmlsZS5hbQkyMDEzLTA0LTA3IDA2OjIxOjQw ICswMDAwCisrKyBsaWIvTWFrZWZpbGUuYW0JMjAxMy0wNC0xNyAwNToyMTozMyArMDAwMApA QCAtMSw4ICsxLDEwIEBACiBCVUlMVF9TT1VSQ0VTID0KK0NMRUFORklMRVMgPQogRVhUUkFf RElTVCA9CiBNT1NUTFlDTEVBTkRJUlMgPQogTU9TVExZQ0xFQU5GSUxFUyA9CiBub2luc3Rf TElCUkFSSUVTID0KK1NVRkZJWEVTID0KIAogQU1fQ0ZMQUdTID0gJChQUk9GSUxJTkdfQ0ZM QUdTKSAkKEdOVUxJQl9XQVJOX0NGTEFHUykgJChXRVJST1JfQ0ZMQUdTKQogREVGQVVMVF9J TkNMVURFUyA9IC1JLiAtSSQodG9wX3NyY2RpcikvbGliIC1JLi4vc3JjIC1JJCh0b3Bfc3Jj ZGlyKS9zcmMKCj09PSBhZGRlZCBmaWxlICdsaWIvYWNsLWVycm5vLXZhbGlkLmMnCi0tLSBs aWIvYWNsLWVycm5vLXZhbGlkLmMJMTk3MC0wMS0wMSAwMDowMDowMCArMDAwMAorKysgbGli L2FjbC1lcnJuby12YWxpZC5jCTIwMTMtMDQtMTcgMDU6MjE6MzMgKzAwMDAKQEAgLTAsMCAr MSw0OCBAQAorLyogVGVzdCB3aGV0aGVyIEFDTHMgYXJlIHdlbGwgc3VwcG9ydGVkIG9uIHRo aXMgc3lzdGVtLgorCisgICBDb3B5cmlnaHQgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBM aWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor ICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAg IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LgorCisgICBXcml0dGVuIGJ5IFBhdWwgRWdnZXJ0LiAgKi8KKwor I2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSA8YWNsLmg+CisKKyNpbmNsdWRlIDxl cnJuby5oPgorCisvKiBSZXR1cm4gdHJ1ZSBpZiBlcnJubyB2YWx1ZSBFUlJOVU0gaW5kaWNh dGVzIHRoYXQgQUNMcyBhcmUgd2VsbAorICAgc3VwcG9ydGVkIG9uIHRoaXMgc3lzdGVtLiAg RVJSTlVNIHNob3VsZCBiZSBhbiBlcnJubyB2YWx1ZSBvYnRhaW5lZAorICAgYWZ0ZXIgYW4g QUNMLXJlbGF0ZWQgc3lzdGVtIGNhbGwgZmFpbHMuICAqLworYm9vbAorYWNsX2Vycm5vX3Zh bGlkIChpbnQgZXJybnVtKQoreworICAvKiBSZWNvZ25pemUgc29tZSBjb21tb24gZXJyb3Jz IHN1Y2ggYXMgZnJvbSBhbiBORlMgbW91bnQgdGhhdCBkb2VzCisgICAgIG5vdCBzdXBwb3J0 IEFDTHMsIGV2ZW4gd2hlbiBsb2NhbCBkcml2ZXMgZG8uICAqLworICBzd2l0Y2ggKGVycm51 bSkKKyAgICB7CisgICAgY2FzZSBFQlVTWTogcmV0dXJuIGZhbHNlOworICAgIGNhc2UgRUlO VkFMOiByZXR1cm4gZmFsc2U7CisjaWYgZGVmaW5lZCBfX0FQUExFX18gJiYgZGVmaW5lZCBf X01BQ0hfXworICAgIGNhc2UgRU5PRU5UOiByZXR1cm4gZmFsc2U7CisjZW5kaWYKKyAgICBj YXNlIEVOT1NZUzogcmV0dXJuIGZhbHNlOworI2lmIGRlZmluZWQgRU5PVFNVUCAmJiBFTk9U U1VQICE9IEVPUE5PVFNVUFAKKyAgICBjYXNlIEVOT1RTVVA6IHJldHVybiBmYWxzZTsKKyNl bmRpZgorICAgIGNhc2UgRU9QTk9UU1VQUDogcmV0dXJuIGZhbHNlOworICAgIGRlZmF1bHQ6 IHJldHVybiB0cnVlOworICAgIH0KK30KCj09PSBhZGRlZCBmaWxlICdsaWIvYWNsLWludGVy bmFsLmgnCi0tLSBsaWIvYWNsLWludGVybmFsLmgJMTk3MC0wMS0wMSAwMDowMDowMCArMDAw MAorKysgbGliL2FjbC1pbnRlcm5hbC5oCTIwMTMtMDQtMTcgMDU6MjE6MzMgKzAwMDAKQEAg LTAsMCArMSwyNTAgQEAKKy8qIEludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIGFjY2VzcyBj b250cm9sIGxpc3RzLgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMywgMjAwNS0yMDEz IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQor ICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBu b3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyAgIFdyaXR0ZW4g YnkgUGF1bCBFZ2dlcnQsIEFuZHJlYXMgR3LDvG5iYWNoZXIsIGFuZCBCcnVubyBIYWlibGUu ICAqLworCisjaW5jbHVkZSAiYWNsLmgiCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5j bHVkZSA8c3RkbGliLmg+CisKKy8qIEFsbCBzeXN0ZW1zIGRlZmluZSB0aGUgQUNMIHJlbGF0 ZWQgQVBJIGluIDxzeXMvYWNsLmg+LiAgKi8KKyNpZiBIQVZFX1NZU19BQ0xfSAorIyBpbmNs dWRlIDxzeXMvYWNsLmg+CisjZW5kaWYKKyNpZiBkZWZpbmVkIEhBVkVfRkFDTCAmJiAhIGRl ZmluZWQgR0VUQUNMQ05UICYmIGRlZmluZWQgQUNMX0NOVAorIyBkZWZpbmUgR0VUQUNMQ05U IEFDTF9DTlQKKyNlbmRpZgorCisvKiBPbiBMaW51eCwgYWRkaXRpb25hbCBBQ0wgcmVsYXRl ZCBBUEkgaXMgYXZhaWxhYmxlIGluIDxhY2wvbGliYWNsLmg+LiAgKi8KKyNpZmRlZiBIQVZF X0FDTF9MSUJBQ0xfSAorIyBpbmNsdWRlIDxhY2wvbGliYWNsLmg+CisjZW5kaWYKKworLyog T24gSFAtVVggPj0gMTEuMTEsIGFkZGl0aW9uYWwgQUNMIEFQSSBpcyBhdmFpbGFibGUgaW4g PGFjbHYuaD4uICAqLworI2lmIEhBVkVfQUNMVl9ICisjIGluY2x1ZGUgPHN5cy90eXBlcy5o PgorIyBpbmNsdWRlIDxhY2x2Lmg+CisvKiBIUC1VWCAxMS4xMSBsYWNrcyB0aGVzZSBkZWNs YXJhdGlvbnMuICAqLworZXh0ZXJuIGludCBhY2wgKGNoYXIgKiwgaW50LCBpbnQsIHN0cnVj dCBhY2wgKik7CitleHRlcm4gaW50IGFjbHNvcnQgKGludCwgaW50LCBzdHJ1Y3QgYWNsICop OworI2VuZGlmCisKKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSA8bGltaXRzLmg+ CisjaWZuZGVmIE1JTgorIyBkZWZpbmUgTUlOKGEsYikgKChhKSA8IChiKSA/IChhKSA6IChi KSkKKyNlbmRpZgorCisjaWZuZGVmIFNJWkVfTUFYCisjIGRlZmluZSBTSVpFX01BWCAoKHNp emVfdCkgLTEpCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX0ZDSE1PRAorIyBkZWZpbmUgSEFW RV9GQ0hNT0QgZmFsc2UKKyMgZGVmaW5lIGZjaG1vZChmZCwgbW9kZSkgKC0xKQorI2VuZGlm CisKK19HTF9JTkxJTkVfSEVBREVSX0JFR0lOCisjaWZuZGVmIEFDTF9JTlRFUk5BTF9JTkxJ TkUKKyMgZGVmaW5lIEFDTF9JTlRFUk5BTF9JTkxJTkUgX0dMX0lOTElORQorI2VuZGlmCisK KyNpZiBVU0VfQUNMCisKKyMgaWYgSEFWRV9BQ0xfR0VUX0ZJTEUKKy8qIFBPU0lYIDEwMDMu MWUgKGRyYWZ0IDE3IC0tIGFiYW5kb25lZCkgc3BlY2lmaWMgdmVyc2lvbi4gICovCisvKiBM aW51eCwgRnJlZUJTRCwgTWFjIE9TIFgsIElSSVgsIFRydTY0ICovCisKKyMgIGlmbmRlZiBN SU5fQUNMX0VOVFJJRVMKKyMgICBkZWZpbmUgTUlOX0FDTF9FTlRSSUVTIDQKKyMgIGVuZGlm CisKKy8qIFBPU0lYIDEwMDMuMWUgKGRyYWZ0IDE3KSAqLworIyAgaWZkZWYgSEFWRV9BQ0xf R0VUX0ZECisvKiBNb3N0IHBsYXRmb3JtcyBoYXZlIGEgMS1hcmd1bWVudCBhY2xfZ2V0X2Zk LCBvbmx5IE9TRi8xIGhhcyBhIDItYXJndW1lbnQKKyAgIG1hY3JvKCEpLiAgKi8KKyMgICBp ZiBIQVZFX0FDTF9GUkVFX1RFWFQgLyogT1NGLzEgKi8KK0FDTF9JTlRFUk5BTF9JTkxJTkUg YWNsX3QKK3JwbF9hY2xfZ2V0X2ZkIChpbnQgZmQpCit7CisgIHJldHVybiBhY2xfZ2V0X2Zk IChmZCwgQUNMX1RZUEVfQUNDRVNTKTsKK30KKyMgICAgdW5kZWYgYWNsX2dldF9mZAorIyAg ICBkZWZpbmUgYWNsX2dldF9mZCBycGxfYWNsX2dldF9mZAorIyAgIGVuZGlmCisjICBlbHNl CisjICAgZGVmaW5lIEhBVkVfQUNMX0dFVF9GRCBmYWxzZQorIyAgIHVuZGVmIGFjbF9nZXRf ZmQKKyMgICBkZWZpbmUgYWNsX2dldF9mZChmZCkgKE5VTEwpCisjICBlbmRpZgorCisvKiBQ T1NJWCAxMDAzLjFlIChkcmFmdCAxNykgKi8KKyMgIGlmZGVmIEhBVkVfQUNMX1NFVF9GRAor LyogTW9zdCBwbGF0Zm9ybXMgaGF2ZSBhIDItYXJndW1lbnQgYWNsX3NldF9mZCwgb25seSBP U0YvMSBoYXMgYSAzLWFyZ3VtZW50CisgICBtYWNybyghKS4gICovCisjICAgaWYgSEFWRV9B Q0xfRlJFRV9URVhUIC8qIE9TRi8xICovCitBQ0xfSU5URVJOQUxfSU5MSU5FIGludAorcnBs X2FjbF9zZXRfZmQgKGludCBmZCwgYWNsX3QgYWNsKQoreworICByZXR1cm4gYWNsX3NldF9m ZCAoZmQsIEFDTF9UWVBFX0FDQ0VTUywgYWNsKTsKK30KKyMgICAgdW5kZWYgYWNsX3NldF9m ZAorIyAgICBkZWZpbmUgYWNsX3NldF9mZCBycGxfYWNsX3NldF9mZAorIyAgIGVuZGlmCisj ICBlbHNlCisjICAgZGVmaW5lIEhBVkVfQUNMX1NFVF9GRCBmYWxzZQorIyAgIHVuZGVmIGFj bF9zZXRfZmQKKyMgICBkZWZpbmUgYWNsX3NldF9mZChmZCwgYWNsKSAoLTEpCisjICBlbmRp ZgorCisvKiBQT1NJWCAxMDAzLjFlIChkcmFmdCAxMykgKi8KKyMgIGlmICEgSEFWRV9BQ0xf RlJFRV9URVhUCisjICAgZGVmaW5lIGFjbF9mcmVlX3RleHQoYnVmKSBhY2xfZnJlZSAoYnVm KQorIyAgZW5kaWYKKworLyogTGludXgtc3BlY2lmaWMgKi8KKyMgIGlmbmRlZiBIQVZFX0FD TF9FWFRFTkRFRF9GSUxFCisjICAgZGVmaW5lIEhBVkVfQUNMX0VYVEVOREVEX0ZJTEUgZmFs c2UKKyMgICBkZWZpbmUgYWNsX2V4dGVuZGVkX2ZpbGUobmFtZSkgKC0xKQorIyAgZW5kaWYK KworLyogTGludXgtc3BlY2lmaWMgKi8KKyMgIGlmbmRlZiBIQVZFX0FDTF9GUk9NX01PREUK KyMgICBkZWZpbmUgSEFWRV9BQ0xfRlJPTV9NT0RFIGZhbHNlCisjICAgZGVmaW5lIGFjbF9m cm9tX21vZGUobW9kZSkgKE5VTEwpCisjICBlbmRpZgorCisvKiBTZXQgdG8gMSBpZiBhIGZp bGUncyBtb2RlIGlzIGltcGxpY2l0IGJ5IHRoZSBBQ0wuCisgICBTZXQgdG8gMCBpZiBhIGZp bGUncyBtb2RlIGlzIHN0b3JlZCBpbmRlcGVuZGVudGx5IGZyb20gdGhlIEFDTC4gICovCisj ICBpZiAoSEFWRV9BQ0xfQ09QWV9FWFRfTkFUSVZFICYmIEhBVkVfQUNMX0NSRUFURV9FTlRS WV9OUCkgfHwgZGVmaW5lZCBfX3NnaSAvKiBNYWMgT1MgWCwgSVJJWCAqLworIyAgIGRlZmlu ZSBNT0RFX0lOU0lERV9BQ0wgMAorIyAgZWxzZQorIyAgIGRlZmluZSBNT0RFX0lOU0lERV9B Q0wgMQorIyAgZW5kaWYKKworLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiBB Q0wuCisgICBSZXR1cm4gLTEgYW5kIHNldCBlcnJubyB1cG9uIGZhaWx1cmUgdG8gZGV0ZXJt aW5lIGl0LiAgKi8KKy8qIERlZmluZSBhIHJlcGxhY2VtZW50IGZvciBhY2xfZW50cmllcyBp ZiBuZWVkZWQuIChPbmx5IExpbnV4IGhhcyBpdC4pICAqLworIyAgaWYgIUhBVkVfQUNMX0VO VFJJRVMKKyMgICBkZWZpbmUgYWNsX2VudHJpZXMgcnBsX2FjbF9lbnRyaWVzCitleHRlcm4g aW50IGFjbF9lbnRyaWVzIChhY2xfdCk7CisjICBlbmRpZgorCisjICBpZiBIQVZFX0FDTF9U WVBFX0VYVEVOREVEIC8qIE1hYyBPUyBYICovCisvKiBBQ0wgaXMgYW4gQUNMLCBmcm9tIGEg ZmlsZSwgc3RvcmVkIGFzIHR5cGUgQUNMX1RZUEVfRVhURU5ERUQuCisgICBSZXR1cm4gMSBp ZiB0aGUgZ2l2ZW4gQUNMIGlzIG5vbi10cml2aWFsLgorICAgUmV0dXJuIDAgaWYgaXQgaXMg dHJpdmlhbC4gICovCitleHRlcm4gaW50IGFjbF9leHRlbmRlZF9ub250cml2aWFsIChhY2xf dCk7CisjICBlbHNlCisvKiBBQ0wgaXMgYW4gQUNMLCBmcm9tIGEgZmlsZSwgc3RvcmVkIGFz IHR5cGUgQUNMX1RZUEVfQUNDRVNTLgorICAgUmV0dXJuIDEgaWYgdGhlIGdpdmVuIEFDTCBp cyBub24tdHJpdmlhbC4KKyAgIFJldHVybiAwIGlmIGl0IGlzIHRyaXZpYWwsIGkuZS4gZXF1 aXZhbGVudCB0byBhIHNpbXBsZSBzdGF0KCkgbW9kZS4KKyAgIFJldHVybiAtMSBhbmQgc2V0 IGVycm5vIHVwb24gZmFpbHVyZSB0byBkZXRlcm1pbmUgaXQuICAqLworZXh0ZXJuIGludCBh Y2xfYWNjZXNzX25vbnRyaXZpYWwgKGFjbF90KTsKKyMgIGVuZGlmCisKKyMgZWxpZiBIQVZF X0ZBQ0wgJiYgZGVmaW5lZCBHRVRBQ0wgLyogU29sYXJpcywgQ3lnd2luLCBub3QgSFAtVVgg Ki8KKworLyogU2V0IHRvIDEgaWYgYSBmaWxlJ3MgbW9kZSBpcyBpbXBsaWNpdCBieSB0aGUg QUNMLgorICAgU2V0IHRvIDAgaWYgYSBmaWxlJ3MgbW9kZSBpcyBzdG9yZWQgaW5kZXBlbmRl bnRseSBmcm9tIHRoZSBBQ0wuICAqLworIyAgaWYgZGVmaW5lZCBfX0NZR1dJTl9fIC8qIEN5 Z3dpbiAqLworIyAgIGRlZmluZSBNT0RFX0lOU0lERV9BQ0wgMAorIyAgZWxzZSAvKiBTb2xh cmlzICovCisjICAgZGVmaW5lIE1PREVfSU5TSURFX0FDTCAxCisjICBlbmRpZgorCisvKiBS ZXR1cm4gMSBpZiB0aGUgZ2l2ZW4gQUNMIGlzIG5vbi10cml2aWFsLgorICAgUmV0dXJuIDAg aWYgaXQgaXMgdHJpdmlhbCwgaS5lLiBlcXVpdmFsZW50IHRvIGEgc2ltcGxlIHN0YXQoKSBt b2RlLiAgKi8KK2V4dGVybiBpbnQgYWNsX25vbnRyaXZpYWwgKGludCBjb3VudCwgYWNsZW50 X3QgKmVudHJpZXMpOworCisjICBpZmRlZiBBQ0VfR0VUQUNMIC8qIFNvbGFyaXMgMTAgKi8K KworLyogVGVzdCBhbiBBQ0wgcmV0cmlldmVkIHdpdGggQUNFX0dFVEFDTC4KKyAgIFJldHVy biAxIGlmIHRoZSBnaXZlbiBBQ0wsIGNvbnNpc3Rpbmcgb2YgQ09VTlQgZW50cmllcywgaXMg bm9uLXRyaXZpYWwuCisgICBSZXR1cm4gMCBpZiBpdCBpcyB0cml2aWFsLCBpLmUuIGVxdWl2 YWxlbnQgdG8gYSBzaW1wbGUgc3RhdCgpIG1vZGUuICAqLworZXh0ZXJuIGludCBhY2xfYWNl X25vbnRyaXZpYWwgKGludCBjb3VudCwgYWNlX3QgKmVudHJpZXMpOworCisvKiBEZWZpbml0 aW9ucyBmb3Igd2hlbiB0aGUgYnVpbHQgZXhlY3V0YWJsZSBpcyBleGVjdXRlZCBvbiBTb2xh cmlzIDEwCisgICAobmV3ZXIgdmVyc2lvbikgb3IgU29sYXJpcyAxMS4gICovCisvKiBGb3Ig YV90eXBlLiAgKi8KKyMgICBkZWZpbmUgT0xEX0FMTE9XIDAKKyMgICBkZWZpbmUgT0xEX0RF TlkgIDEKKyMgICBkZWZpbmUgTkVXX0FDRV9BQ0NFU1NfQUxMT1dFRF9BQ0VfVFlQRSAwIC8q IHJlcGxhY2VzIEFMTE9XICovCisjICAgZGVmaW5lIE5FV19BQ0VfQUNDRVNTX0RFTklFRF9B Q0VfVFlQRSAgMSAvKiByZXBsYWNlcyBERU5ZICovCisvKiBGb3IgYV9mbGFncy4gICovCisj ICAgZGVmaW5lIE9MRF9BQ0VfT1dORVIgICAgICAgICAgICAweDAxMDAKKyMgICBkZWZpbmUg T0xEX0FDRV9HUk9VUCAgICAgICAgICAgIDB4MDIwMAorIyAgIGRlZmluZSBPTERfQUNFX09U SEVSICAgICAgICAgICAgMHgwNDAwCisjICAgZGVmaW5lIE5FV19BQ0VfT1dORVIgICAgICAg ICAgICAweDEwMDAKKyMgICBkZWZpbmUgTkVXX0FDRV9HUk9VUCAgICAgICAgICAgIDB4MjAw MAorIyAgIGRlZmluZSBORVdfQUNFX0lERU5USUZJRVJfR1JPVVAgMHgwMDQwCisjICAgZGVm aW5lIE5FV19BQ0VfRVZFUllPTkUgICAgICAgICAweDQwMDAKKy8qIEZvciBhX2FjY2Vzc19t YXNrLiAgKi8KKyMgICBkZWZpbmUgTkVXX0FDRV9SRUFEX0RBVEEgICAgICAgICAweDAwMSAv KiBjb3JyZXNwb25kcyB0byAncicgKi8KKyMgICBkZWZpbmUgTkVXX0FDRV9XUklURV9EQVRB ICAgICAgICAweDAwMiAvKiBjb3JyZXNwb25kcyB0byAndycgKi8KKyMgICBkZWZpbmUgTkVX X0FDRV9BUFBFTkRfREFUQSAgICAgICAweDAwNAorIyAgIGRlZmluZSBORVdfQUNFX1JFQURf TkFNRURfQVRUUlMgIDB4MDA4CisjICAgZGVmaW5lIE5FV19BQ0VfV1JJVEVfTkFNRURfQVRU UlMgMHgwMTAKKyMgICBkZWZpbmUgTkVXX0FDRV9FWEVDVVRFICAgICAgICAgICAweDAyMAor IyAgIGRlZmluZSBORVdfQUNFX0RFTEVURV9DSElMRCAgICAgIDB4MDQwCisjICAgZGVmaW5l IE5FV19BQ0VfUkVBRF9BVFRSSUJVVEVTICAgMHgwODAKKyMgICBkZWZpbmUgTkVXX0FDRV9X UklURV9BVFRSSUJVVEVTICAweDEwMAorIyAgIGRlZmluZSBORVdfQUNFX0RFTEVURSAgICAg ICAgICAweDEwMDAwCisjICAgZGVmaW5lIE5FV19BQ0VfUkVBRF9BQ0wgICAgICAgIDB4MjAw MDAKKyMgICBkZWZpbmUgTkVXX0FDRV9XUklURV9BQ0wgICAgICAgMHg0MDAwMAorIyAgIGRl ZmluZSBORVdfQUNFX1dSSVRFX09XTkVSICAgICAweDgwMDAwCisjICAgZGVmaW5lIE5FV19B Q0VfU1lOQ0hST05JWkUgICAgMHgxMDAwMDAKKworIyAgZW5kaWYKKworIyBlbGlmIEhBVkVf R0VUQUNMIC8qIEhQLVVYICovCisKKy8qIFJldHVybiAxIGlmIHRoZSBnaXZlbiBBQ0wgaXMg bm9uLXRyaXZpYWwuCisgICBSZXR1cm4gMCBpZiBpdCBpcyB0cml2aWFsLCBpLmUuIGVxdWl2 YWxlbnQgdG8gYSBzaW1wbGUgc3RhdCgpIG1vZGUuICAqLworZXh0ZXJuIGludCBhY2xfbm9u dHJpdmlhbCAoaW50IGNvdW50LCBzdHJ1Y3QgYWNsX2VudHJ5ICplbnRyaWVzLCBzdHJ1Y3Qg c3RhdCAqc2IpOworCisjICBpZiBIQVZFX0FDTFZfSCAvKiBIUC1VWCA+PSAxMS4xMSAqLwor CisvKiBSZXR1cm4gMSBpZiB0aGUgZ2l2ZW4gQUNMIGlzIG5vbi10cml2aWFsLgorICAgUmV0 dXJuIDAgaWYgaXQgaXMgdHJpdmlhbCwgaS5lLiBlcXVpdmFsZW50IHRvIGEgc2ltcGxlIHN0 YXQoKSBtb2RlLiAgKi8KK2V4dGVybiBpbnQgYWNsdl9ub250cml2aWFsIChpbnQgY291bnQs IHN0cnVjdCBhY2wgKmVudHJpZXMpOworCisjICBlbmRpZgorCisjIGVsaWYgSEFWRV9BQ0xY X0dFVCAmJiAwIC8qIEFJWCAqLworCisvKiBUT0RPICovCisKKyMgZWxpZiBIQVZFX1NUQVRB Q0wgLyogb2xkZXIgQUlYICovCisKKy8qIFJldHVybiAxIGlmIHRoZSBnaXZlbiBBQ0wgaXMg bm9uLXRyaXZpYWwuCisgICBSZXR1cm4gMCBpZiBpdCBpcyB0cml2aWFsLCBpLmUuIGVxdWl2 YWxlbnQgdG8gYSBzaW1wbGUgc3RhdCgpIG1vZGUuICAqLworZXh0ZXJuIGludCBhY2xfbm9u dHJpdmlhbCAoc3RydWN0IGFjbCAqYSk7CisKKyMgZWxpZiBIQVZFX0FDTFNPUlQgLyogTm9u U3RvcCBLZXJuZWwgKi8KKworLyogUmV0dXJuIDEgaWYgdGhlIGdpdmVuIEFDTCBpcyBub24t dHJpdmlhbC4KKyAgIFJldHVybiAwIGlmIGl0IGlzIHRyaXZpYWwsIGkuZS4gZXF1aXZhbGVu dCB0byBhIHNpbXBsZSBzdGF0KCkgbW9kZS4gICovCitleHRlcm4gaW50IGFjbF9ub250cml2 aWFsIChpbnQgY291bnQsIHN0cnVjdCBhY2wgKmVudHJpZXMpOworCisjIGVuZGlmCisKKyNl bmRpZgorCitfR0xfSU5MSU5FX0hFQURFUl9FTkQKCj09PSBhZGRlZCBmaWxlICdsaWIvYWNs LmgnCi0tLSBsaWIvYWNsLmgJMTk3MC0wMS0wMSAwMDowMDowMCArMDAwMAorKysgbGliL2Fj bC5oCTIwMTMtMDQtMTcgMDU6MjE6MzMgKzAwMDAKQEAgLTAsMCArMSwzMCBAQAorLyogYWNs LmMgLSBhY2Nlc3MgY29udHJvbCBsaXN0cworCisgICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIw MDgtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFt LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisgICBX cml0dGVuIGJ5IFBhdWwgRWdnZXJ0LiAgKi8KKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNp bmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCitib29sIGFj bF9lcnJub192YWxpZCAoaW50KSBfR0xfQVRUUklCVVRFX0NPTlNUOworaW50IGZpbGVfaGFz X2FjbCAoY2hhciBjb25zdCAqLCBzdHJ1Y3Qgc3RhdCBjb25zdCAqKTsKK2ludCBxc2V0X2Fj bCAoY2hhciBjb25zdCAqLCBpbnQsIG1vZGVfdCk7CitpbnQgc2V0X2FjbCAoY2hhciBjb25z dCAqLCBpbnQsIG1vZGVfdCk7CitpbnQgcWNvcHlfYWNsIChjaGFyIGNvbnN0ICosIGludCwg Y2hhciBjb25zdCAqLCBpbnQsIG1vZGVfdCk7CitpbnQgY29weV9hY2wgKGNoYXIgY29uc3Qg KiwgaW50LCBjaGFyIGNvbnN0ICosIGludCwgbW9kZV90KTsKK2ludCBjaG1vZF9vcl9mY2ht b2QgKGNoYXIgY29uc3QgKiwgaW50LCBtb2RlX3QpOwoKPT09IGFkZGVkIGZpbGUgJ2xpYi9h Y2xfZW50cmllcy5jJwotLS0gbGliL2FjbF9lbnRyaWVzLmMJMTk3MC0wMS0wMSAwMDowMDow MCArMDAwMAorKysgbGliL2FjbF9lbnRyaWVzLmMJMjAxMy0wNC0xNyAwNToyMTozMyArMDAw MApAQCAtMCwwICsxLDc1IEBACisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBlbnRyaWVzIGlu IGFuIEFDTC4KKworICAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMsIDIwMDUtMjAxMyBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBz ZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisgICBXcml0dGVuIGJ5IFBh dWwgRWdnZXJ0IGFuZCBBbmRyZWFzIEdydWVuYmFjaGVyLiAgKi8KKworI2luY2x1ZGUgPGNv bmZpZy5oPgorCisjaW5jbHVkZSAiYWNsLWludGVybmFsLmgiCisKKy8qIFRoaXMgZmlsZSBh c3N1bWVzIFBPU0lYLWRyYWZ0IGxpa2UgQUNMcworICAgKExpbnV4LCBGcmVlQlNELCBNYWMg T1MgWCwgSVJJWCwgVHJ1NjQpLiAgKi8KKworLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgZW50 cmllcyBpbiBBQ0wuCisgICBSZXR1cm4gLTEgYW5kIHNldCBlcnJubyB1cG9uIGZhaWx1cmUg dG8gZGV0ZXJtaW5lIGl0LiAgKi8KKworaW50CithY2xfZW50cmllcyAoYWNsX3QgYWNsKQor eworICBpbnQgY291bnQgPSAwOworCisgIGlmIChhY2wgIT0gTlVMTCkKKyAgICB7CisjaWYg SEFWRV9BQ0xfRklSU1RfRU5UUlkgLyogTGludXgsIEZyZWVCU0QsIE1hYyBPUyBYICovCisj IGlmIEhBVkVfQUNMX1RZUEVfRVhURU5ERUQgLyogTWFjIE9TIFggKi8KKyAgICAgIC8qIGFj bF9nZXRfZW50cnkgcmV0dXJucyAwIHdoZW4gaXQgc3VjY2Vzc2Z1bGx5IGZldGNoZXMgYW4g ZW50cnksCisgICAgICAgICBhbmQgLTEvRUlOVkFMIGF0IHRoZSBlbmQuICAqLworICAgICAg YWNsX2VudHJ5X3QgYWNlOworICAgICAgaW50IGdvdF9vbmU7CisKKyAgICAgIGZvciAoZ290 X29uZSA9IGFjbF9nZXRfZW50cnkgKGFjbCwgQUNMX0ZJUlNUX0VOVFJZLCAmYWNlKTsKKyAg ICAgICAgICAgZ290X29uZSA+PSAwOworICAgICAgICAgICBnb3Rfb25lID0gYWNsX2dldF9l bnRyeSAoYWNsLCBBQ0xfTkVYVF9FTlRSWSwgJmFjZSkpCisgICAgICAgIGNvdW50Kys7Cisj IGVsc2UgLyogTGludXgsIEZyZWVCU0QgKi8KKyAgICAgIC8qIGFjbF9nZXRfZW50cnkgcmV0 dXJucyAxIHdoZW4gaXQgc3VjY2Vzc2Z1bGx5IGZldGNoZXMgYW4gZW50cnksCisgICAgICAg ICBhbmQgMCBhdCB0aGUgZW5kLiAgKi8KKyAgICAgIGFjbF9lbnRyeV90IGFjZTsKKyAgICAg IGludCBnb3Rfb25lOworCisgICAgICBmb3IgKGdvdF9vbmUgPSBhY2xfZ2V0X2VudHJ5IChh Y2wsIEFDTF9GSVJTVF9FTlRSWSwgJmFjZSk7CisgICAgICAgICAgIGdvdF9vbmUgPiAwOwor ICAgICAgICAgICBnb3Rfb25lID0gYWNsX2dldF9lbnRyeSAoYWNsLCBBQ0xfTkVYVF9FTlRS WSwgJmFjZSkpCisgICAgICAgIGNvdW50Kys7CisgICAgICBpZiAoZ290X29uZSA8IDApCisg ICAgICAgIHJldHVybiAtMTsKKyMgZW5kaWYKKyNlbHNlIC8qIElSSVgsIFRydTY0ICovCisj IGlmIEhBVkVfQUNMX1RPX1NIT1JUX1RFWFQgLyogSVJJWCAqLworICAgICAgLyogRG9uJ3Qg dXNlIGFjbF9nZXRfZW50cnk6IGl0IGlzIHVuZG9jdW1lbnRlZC4gICovCisgICAgICBjb3Vu dCA9IGFjbC0+YWNsX2NudDsKKyMgZW5kaWYKKyMgaWYgSEFWRV9BQ0xfRlJFRV9URVhUIC8q IFRydTY0ICovCisgICAgICAvKiBEb24ndCB1c2UgYWNsX2dldF9lbnRyeTogaXQgdGFrZXMg b25seSBvbmUgYXJndW1lbnQgYW5kIGRvZXMgbm90CisgICAgICAgICB3b3JrLiAgKi8KKyAg ICAgIGNvdW50ID0gYWNsLT5hY2xfbnVtOworIyBlbmRpZgorI2VuZGlmCisgICAgfQorCisg IHJldHVybiBjb3VudDsKK30KCj09PSBhZGRlZCBmaWxlICdsaWIvZXJybm8uaW4uaCcKLS0t IGxpYi9lcnJuby5pbi5oCTE5NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDAKKysrIGxpYi9lcnJu by5pbi5oCTIwMTMtMDQtMjkgMDY6MDc6NDIgKzAwMDAKQEAgLTAsMCArMSwyNzkgQEAKKy8q IEEgUE9TSVgtbGlrZSA8ZXJybm8uaD4uCisKKyAgIENvcHlyaWdodCAoQykgMjAwOC0yMDEz IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQor ICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJz aW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8v d3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgX0BHVUFSRF9QUkVGSVhA X0VSUk5PX0gKKworI2lmIF9fR05VQ19fID49IDMKK0BQUkFHTUFfU1lTVEVNX0hFQURFUkAK KyNlbmRpZgorQFBSQUdNQV9DT0xVTU5TQAorCisvKiBUaGUgaW5jbHVkZV9uZXh0IHJlcXVp cmVzIGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFyZC4gICovCisjQElOQ0xVREVfTkVY VEAgQE5FWFRfRVJSTk9fSEAKKworI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfRVJSTk9fSAor I2RlZmluZSBfQEdVQVJEX1BSRUZJWEBfRVJSTk9fSAorCisKKy8qIE9uIG5hdGl2ZSBXaW5k b3dzIHBsYXRmb3JtcywgbWFueSBtYWNyb3MgYXJlIG5vdCBkZWZpbmVkLiAgKi8KKyMgaWYg KGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhIGRlZmluZWQgX19D WUdXSU5fXworCisvKiBUaGVzZSBhcmUgdGhlIHNhbWUgdmFsdWVzIGFzIGRlZmluZWQgYnkg TVNWQyAxMCwgZm9yIGludGVyb3BlcmFiaWxpdHkuICAqLworCisjICBpZm5kZWYgRU5PTVNH CisjICAgZGVmaW5lIEVOT01TRyAgICAxMjIKKyMgICBkZWZpbmUgR05VTElCX2RlZmluZWRf RU5PTVNHIDEKKyMgIGVuZGlmCisKKyMgIGlmbmRlZiBFSURSTQorIyAgIGRlZmluZSBFSURS TSAgICAgMTExCisjICAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX0VJRFJNIDEKKyMgIGVuZGlm CisKKyMgIGlmbmRlZiBFTk9MSU5LCisjICAgZGVmaW5lIEVOT0xJTksgICAxMjEKKyMgICBk ZWZpbmUgR05VTElCX2RlZmluZWRfRU5PTElOSyAxCisjICBlbmRpZgorCisjICBpZm5kZWYg RVBST1RPCisjICAgZGVmaW5lIEVQUk9UTyAgICAxMzQKKyMgICBkZWZpbmUgR05VTElCX2Rl ZmluZWRfRVBST1RPIDEKKyMgIGVuZGlmCisKKyMgIGlmbmRlZiBFQkFETVNHCisjICAgZGVm aW5lIEVCQURNU0cgICAxMDQKKyMgICBkZWZpbmUgR05VTElCX2RlZmluZWRfRUJBRE1TRyAx CisjICBlbmRpZgorCisjICBpZm5kZWYgRU9WRVJGTE9XCisjICAgZGVmaW5lIEVPVkVSRkxP VyAxMzIKKyMgICBkZWZpbmUgR05VTElCX2RlZmluZWRfRU9WRVJGTE9XIDEKKyMgIGVuZGlm CisKKyMgIGlmbmRlZiBFTk9UU1VQCisjICAgZGVmaW5lIEVOT1RTVVAgICAxMjkKKyMgICBk ZWZpbmUgR05VTElCX2RlZmluZWRfRU5PVFNVUCAxCisjICBlbmRpZgorCisjICBpZm5kZWYg RU5FVFJFU0VUCisjICAgZGVmaW5lIEVORVRSRVNFVCAxMTcKKyMgICBkZWZpbmUgR05VTElC X2RlZmluZWRfRU5FVFJFU0VUIDEKKyMgIGVuZGlmCisKKyMgIGlmbmRlZiBFQ09OTkFCT1JU RUQKKyMgICBkZWZpbmUgRUNPTk5BQk9SVEVEIDEwNgorIyAgIGRlZmluZSBHTlVMSUJfZGVm aW5lZF9FQ09OTkFCT1JURUQgMQorIyAgZW5kaWYKKworIyAgaWZuZGVmIEVDQU5DRUxFRAor IyAgIGRlZmluZSBFQ0FOQ0VMRUQgMTA1CisjICAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX0VD QU5DRUxFRCAxCisjICBlbmRpZgorCisjICBpZm5kZWYgRU9XTkVSREVBRAorIyAgIGRlZmlu ZSBFT1dORVJERUFEIDEzMworIyAgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9FT1dORVJERUFE IDEKKyMgIGVuZGlmCisKKyMgIGlmbmRlZiBFTk9UUkVDT1ZFUkFCTEUKKyMgICBkZWZpbmUg RU5PVFJFQ09WRVJBQkxFIDEyNworIyAgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9FTk9UUkVD T1ZFUkFCTEUgMQorIyAgZW5kaWYKKworIyAgaWZuZGVmIEVJTlBST0dSRVNTCisjICAgZGVm aW5lIEVJTlBST0dSRVNTICAgICAxMTIKKyMgICBkZWZpbmUgRUFMUkVBRFkgICAgICAgIDEw MworIyAgIGRlZmluZSBFTk9UU09DSyAgICAgICAgMTI4CisjICAgZGVmaW5lIEVERVNUQURE UlJFUSAgICAxMDkKKyMgICBkZWZpbmUgRU1TR1NJWkUgICAgICAgIDExNQorIyAgIGRlZmlu ZSBFUFJPVE9UWVBFICAgICAgMTM2CisjICAgZGVmaW5lIEVOT1BST1RPT1BUICAgICAxMjMK KyMgICBkZWZpbmUgRVBST1RPTk9TVVBQT1JUIDEzNQorIyAgIGRlZmluZSBFT1BOT1RTVVBQ ICAgICAgMTMwCisjICAgZGVmaW5lIEVBRk5PU1VQUE9SVCAgICAxMDIKKyMgICBkZWZpbmUg RUFERFJJTlVTRSAgICAgIDEwMAorIyAgIGRlZmluZSBFQUREUk5PVEFWQUlMICAgMTAxCisj ICAgZGVmaW5lIEVORVRET1dOICAgICAgICAxMTYKKyMgICBkZWZpbmUgRU5FVFVOUkVBQ0gg ICAgIDExOAorIyAgIGRlZmluZSBFQ09OTlJFU0VUICAgICAgMTA4CisjICAgZGVmaW5lIEVO T0JVRlMgICAgICAgICAxMTkKKyMgICBkZWZpbmUgRUlTQ09OTiAgICAgICAgIDExMworIyAg IGRlZmluZSBFTk9UQ09OTiAgICAgICAgMTI2CisjICAgZGVmaW5lIEVUSU1FRE9VVCAgICAg ICAxMzgKKyMgICBkZWZpbmUgRUNPTk5SRUZVU0VEICAgIDEwNworIyAgIGRlZmluZSBFTE9P UCAgICAgICAgICAgMTE0CisjICAgZGVmaW5lIEVIT1NUVU5SRUFDSCAgICAxMTAKKyMgICBk ZWZpbmUgRVdPVUxEQkxPQ0sgICAgIDE0MAorIyAgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9F U09DSyAxCisjICBlbmRpZgorCisjICBpZm5kZWYgRVRYVEJTWQorIyAgIGRlZmluZSBFVFhU QlNZICAgICAgICAgMTM5CisjICAgZGVmaW5lIEVOT0RBVEEgICAgICAgICAxMjAgIC8qIG5v dCByZXF1aXJlZCBieSBQT1NJWCAqLworIyAgIGRlZmluZSBFTk9TUiAgICAgICAgICAgMTI0 ICAvKiBub3QgcmVxdWlyZWQgYnkgUE9TSVggKi8KKyMgICBkZWZpbmUgRU5PU1RSICAgICAg ICAgIDEyNSAgLyogbm90IHJlcXVpcmVkIGJ5IFBPU0lYICovCisjICAgZGVmaW5lIEVUSU1F ICAgICAgICAgICAxMzcgIC8qIG5vdCByZXF1aXJlZCBieSBQT1NJWCAqLworIyAgIGRlZmlu ZSBFT1RIRVIgICAgICAgICAgMTMxICAvKiBub3QgcmVxdWlyZWQgYnkgUE9TSVggKi8KKyMg ICBkZWZpbmUgR05VTElCX2RlZmluZWRfRVNUUkVBTVMgMQorIyAgZW5kaWYKKworLyogVGhl c2UgYXJlIGludGVudGlvbmFsbHkgdGhlIHNhbWUgdmFsdWVzIGFzIHRoZSBXU0EqIGVycm9y IG51bWJlcnMsIGRlZmluZWQKKyAgIGluIDx3aW5zb2NrMi5oPi4gICovCisjICBkZWZpbmUg RVNPQ0tUTk9TVVBQT1JUIDEwMDQ0ICAvKiBub3QgcmVxdWlyZWQgYnkgUE9TSVggKi8KKyMg IGRlZmluZSBFUEZOT1NVUFBPUlQgICAgMTAwNDYgIC8qIG5vdCByZXF1aXJlZCBieSBQT1NJ WCAqLworIyAgZGVmaW5lIEVTSFVURE9XTiAgICAgICAxMDA1OCAgLyogbm90IHJlcXVpcmVk IGJ5IFBPU0lYICovCisjICBkZWZpbmUgRVRPT01BTllSRUZTICAgIDEwMDU5ICAvKiBub3Qg cmVxdWlyZWQgYnkgUE9TSVggKi8KKyMgIGRlZmluZSBFSE9TVERPV04gICAgICAgMTAwNjQg IC8qIG5vdCByZXF1aXJlZCBieSBQT1NJWCAqLworIyAgZGVmaW5lIEVQUk9DTElNICAgICAg ICAxMDA2NyAgLyogbm90IHJlcXVpcmVkIGJ5IFBPU0lYICovCisjICBkZWZpbmUgRVVTRVJT ICAgICAgICAgIDEwMDY4ICAvKiBub3QgcmVxdWlyZWQgYnkgUE9TSVggKi8KKyMgIGRlZmlu ZSBFRFFVT1QgICAgICAgICAgMTAwNjkKKyMgIGRlZmluZSBFU1RBTEUgICAgICAgICAgMTAw NzAKKyMgIGRlZmluZSBFUkVNT1RFICAgICAgICAgMTAwNzEgIC8qIG5vdCByZXF1aXJlZCBi eSBQT1NJWCAqLworIyAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX0VXSU5TT0NLIDEKKworIyBl bmRpZgorCisKKy8qIE9uIE9TRi8xIDUuMSwgd2hlbiBfWE9QRU5fU09VUkNFX0VYVEVOREVE IGlzIG5vdCBkZWZpbmVkLCB0aGUgbWFjcm9zCisgICBFTVVMVElIT1AsIEVOT0xJTkssIEVP VkVSRkxPVyBhcmUgbm90IGRlZmluZWQuICAqLworIyBpZiBARU1VTFRJSE9QX0hJRERFTkAK KyMgIGRlZmluZSBFTVVMVElIT1AgQEVNVUxUSUhPUF9WQUxVRUAKKyMgIGRlZmluZSBHTlVM SUJfZGVmaW5lZF9FTVVMVElIT1AgMQorIyBlbmRpZgorIyBpZiBARU5PTElOS19ISURERU5A CisjICBkZWZpbmUgRU5PTElOSyAgIEBFTk9MSU5LX1ZBTFVFQAorIyAgZGVmaW5lIEdOVUxJ Ql9kZWZpbmVkX0VOT0xJTksgMQorIyBlbmRpZgorIyBpZiBARU9WRVJGTE9XX0hJRERFTkAK KyMgIGRlZmluZSBFT1ZFUkZMT1cgQEVPVkVSRkxPV19WQUxVRUAKKyMgIGRlZmluZSBHTlVM SUJfZGVmaW5lZF9FT1ZFUkZMT1cgMQorIyBlbmRpZgorCisKKy8qIE9uIE9wZW5CU0QgNC4w IGFuZCBvbiBuYXRpdmUgV2luZG93cywgdGhlIG1hY3JvcyBFTk9NU0csIEVJRFJNLCBFTk9M SU5LLAorICAgRVBST1RPLCBFTVVMVElIT1AsIEVCQURNU0csIEVPVkVSRkxPVywgRU5PVFNV UCwgRUNBTkNFTEVEIGFyZSBub3QgZGVmaW5lZC4KKyAgIExpa2V3aXNlLCBvbiBOb25TdG9w IEtlcm5lbCwgRURRVU9UIGlzIG5vdCBkZWZpbmVkLgorICAgRGVmaW5lIHRoZW0gaGVyZS4g IFZhbHVlcyA+PSAyMDAwIHNlZW0gc2FmZSB0byB1c2U6IFNvbGFyaXMgRVNUQUxFID0gMTUx LAorICAgSFAtVVggRVdPVUxEQkxPQ0sgPSAyNDYsIElSSVggRURRVU9UID0gMTEzMy4KKwor ICAgTm90ZTogV2hlbiBvbmUgb2YgdGhlc2Ugc3lzdGVtcyBkZWZpbmVzIHNvbWUgb2YgdGhl c2UgbWFjcm9zIHNvbWUgZGF5LAorICAgYmluYXJpZXMgd2lsbCBoYXZlIHRvIGJlIHJlY29t cGlsZWQgc28gdGhhdCB0aGV5IHJlY29nbml6ZXMgdGhlIG5ldworICAgZXJybm8gdmFsdWVz IGZyb20gdGhlIHN5c3RlbS4gICovCisKKyMgaWZuZGVmIEVOT01TRworIyAgZGVmaW5lIEVO T01TRyAgICAyMDAwCisjICBkZWZpbmUgR05VTElCX2RlZmluZWRfRU5PTVNHIDEKKyMgZW5k aWYKKworIyBpZm5kZWYgRUlEUk0KKyMgIGRlZmluZSBFSURSTSAgICAgMjAwMQorIyAgZGVm aW5lIEdOVUxJQl9kZWZpbmVkX0VJRFJNIDEKKyMgZW5kaWYKKworIyBpZm5kZWYgRU5PTElO SworIyAgZGVmaW5lIEVOT0xJTksgICAyMDAyCisjICBkZWZpbmUgR05VTElCX2RlZmluZWRf RU5PTElOSyAxCisjIGVuZGlmCisKKyMgaWZuZGVmIEVQUk9UTworIyAgZGVmaW5lIEVQUk9U TyAgICAyMDAzCisjICBkZWZpbmUgR05VTElCX2RlZmluZWRfRVBST1RPIDEKKyMgZW5kaWYK KworIyBpZm5kZWYgRU1VTFRJSE9QCisjICBkZWZpbmUgRU1VTFRJSE9QIDIwMDQKKyMgIGRl ZmluZSBHTlVMSUJfZGVmaW5lZF9FTVVMVElIT1AgMQorIyBlbmRpZgorCisjIGlmbmRlZiBF QkFETVNHCisjICBkZWZpbmUgRUJBRE1TRyAgIDIwMDUKKyMgIGRlZmluZSBHTlVMSUJfZGVm aW5lZF9FQkFETVNHIDEKKyMgZW5kaWYKKworIyBpZm5kZWYgRU9WRVJGTE9XCisjICBkZWZp bmUgRU9WRVJGTE9XIDIwMDYKKyMgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9FT1ZFUkZMT1cg MQorIyBlbmRpZgorCisjIGlmbmRlZiBFTk9UU1VQCisjICBkZWZpbmUgRU5PVFNVUCAgIDIw MDcKKyMgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9FTk9UU1VQIDEKKyMgZW5kaWYKKworIyBp Zm5kZWYgRU5FVFJFU0VUCisjICBkZWZpbmUgRU5FVFJFU0VUIDIwMTEKKyMgIGRlZmluZSBH TlVMSUJfZGVmaW5lZF9FTkVUUkVTRVQgMQorIyBlbmRpZgorCisjIGlmbmRlZiBFQ09OTkFC T1JURUQKKyMgIGRlZmluZSBFQ09OTkFCT1JURUQgMjAxMgorIyAgZGVmaW5lIEdOVUxJQl9k ZWZpbmVkX0VDT05OQUJPUlRFRCAxCisjIGVuZGlmCisKKyMgaWZuZGVmIEVTVEFMRQorIyAg ZGVmaW5lIEVTVEFMRSAgICAyMDA5CisjICBkZWZpbmUgR05VTElCX2RlZmluZWRfRVNUQUxF IDEKKyMgZW5kaWYKKworIyBpZm5kZWYgRURRVU9UCisjICBkZWZpbmUgRURRVU9UIDIwMTAK KyMgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9FRFFVT1QgMQorIyBlbmRpZgorCisjIGlmbmRl ZiBFQ0FOQ0VMRUQKKyMgIGRlZmluZSBFQ0FOQ0VMRUQgMjAwOAorIyAgZGVmaW5lIEdOVUxJ Ql9kZWZpbmVkX0VDQU5DRUxFRCAxCisjIGVuZGlmCisKKy8qIE9uIG1hbnkgcGxhdGZvcm1z LCB0aGUgbWFjcm9zIEVPV05FUkRFQUQgYW5kIEVOT1RSRUNPVkVSQUJMRSBhcmUgbm90Cisg ICBkZWZpbmVkLiAgKi8KKworIyBpZm5kZWYgRU9XTkVSREVBRAorIyAgaWYgZGVmaW5lZCBf X3N1bgorICAgIC8qIFVzZSB0aGUgc2FtZSB2YWx1ZXMgYXMgZGVmaW5lZCBmb3IgU29sYXJp cyA+PSA4LCBmb3IKKyAgICAgICBpbnRlcm9wZXJhYmlsaXR5LiAgKi8KKyMgICBkZWZpbmUg RU9XTkVSREVBRCAgICAgIDU4CisjICAgZGVmaW5lIEVOT1RSRUNPVkVSQUJMRSA1OQorIyAg ZWxpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVmaW5l ZCBfX0NZR1dJTl9fCisgICAgLyogV2UgaGF2ZSBhIGNvbmZsaWN0IGhlcmU6IHB0aHJlYWRz LXdpbjMyIGRlZmluZXMgdGhlc2UgdmFsdWVzCisgICAgICAgZGlmZmVyZW50bHkgdGhhbiBN U1ZDIDEwLiAgSXQncyBoYWlyeSB0byBkZWNpZGUgd2hpY2ggb25lIHRvIHVzZS4gICovCisj ICAgaWYgZGVmaW5lZCBfX01JTkdXMzJfXyAmJiAhZGVmaW5lZCBVU0VfV0lORE9XU19USFJF QURTCisgICAgIC8qIFVzZSB0aGUgc2FtZSB2YWx1ZXMgYXMgZGVmaW5lZCBieSBwdGhyZWFk cy13aW4zMiwgZm9yCisgICAgICAgIGludGVyb3BlcmFiaWxpdHkuICAqLworIyAgICBkZWZp bmUgRU9XTkVSREVBRCAgICAgIDQzCisjICAgIGRlZmluZSBFTk9UUkVDT1ZFUkFCTEUgNDQK KyMgICBlbHNlCisgICAgIC8qIFVzZSB0aGUgc2FtZSB2YWx1ZXMgYXMgZGVmaW5lZCBieSBN U1ZDIDEwLCBmb3IKKyAgICAgICAgaW50ZXJvcGVyYWJpbGl0eS4gICovCisjICAgIGRlZmlu ZSBFT1dORVJERUFEICAgICAgMTMzCisjICAgIGRlZmluZSBFTk9UUkVDT1ZFUkFCTEUgMTI3 CisjICAgZW5kaWYKKyMgIGVsc2UKKyMgICBkZWZpbmUgRU9XTkVSREVBRCAgICAgIDIwMTMK KyMgICBkZWZpbmUgRU5PVFJFQ09WRVJBQkxFIDIwMTQKKyMgIGVuZGlmCisjICBkZWZpbmUg R05VTElCX2RlZmluZWRfRU9XTkVSREVBRCAxCisjICBkZWZpbmUgR05VTElCX2RlZmluZWRf RU5PVFJFQ09WRVJBQkxFIDEKKyMgZW5kaWYKKworIyBpZm5kZWYgRUlMU0VRCisjICBkZWZp bmUgRUlMU0VRIDIwMTUKKyMgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9FSUxTRVEgMQorIyBl bmRpZgorCisjZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX0VSUk5PX0ggKi8KKyNlbmRpZiAv KiBfQEdVQVJEX1BSRUZJWEBfRVJSTk9fSCAqLwoKPT09IGFkZGVkIGZpbGUgJ2xpYi9maWxl LWhhcy1hY2wuYycKLS0tIGxpYi9maWxlLWhhcy1hY2wuYwkxOTcwLTAxLTAxIDAwOjAwOjAw ICswMDAwCisrKyBsaWIvZmlsZS1oYXMtYWNsLmMJMjAxMy0wNC0xOCAwMTozNTowOCArMDAw MApAQCAtMCwwICsxLDkxOCBAQAorLyogVGVzdCB3aGV0aGVyIGEgZmlsZSBoYXMgYSBub250 cml2aWFsIGFjY2VzcyBjb250cm9sIGxpc3QuCisKKyAgIENvcHlyaWdodCAoQykgMjAwMi0y MDAzLCAyMDA1LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMg cHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4K KworICAgV3JpdHRlbiBieSBQYXVsIEVnZ2VydCwgQW5kcmVhcyBHcsO8bmJhY2hlciwgYW5k IEJydW5vIEhhaWJsZS4gICovCisKKy8qIFdpdGhvdXQgdGhpcyBwcmFnbWEsIGdjYyA0Ljcu MCAyMDEyMDEyNiBtYXkgc3VnZ2VzdCB0aGF0IHRoZQorICAgZmlsZV9oYXNfYWNsIGZ1bmN0 aW9uIG1pZ2h0IGJlIGNhbmRpZGF0ZSBmb3IgYXR0cmlidXRlICdjb25zdCcgICovCisjaWYg KF9fR05VQ19fID09IDQgJiYgNiA8PSBfX0dOVUNfTUlOT1JfXykgfHwgNCA8IF9fR05VQ19f CisjIHByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3N1Z2dlc3QtYXR0cmlidXRl PWNvbnN0IgorI2VuZGlmCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2luY2x1ZGUgImFj bC5oIgorCisjaW5jbHVkZSAiYWNsLWludGVybmFsLmgiCisKKworI2lmIFVTRV9BQ0wgJiYg SEFWRV9BQ0xfR0VUX0ZJTEUKKworIyBpZiBIQVZFX0FDTF9UWVBFX0VYVEVOREVEIC8qIE1h YyBPUyBYICovCisKKy8qIEFDTCBpcyBhbiBBQ0wsIGZyb20gYSBmaWxlLCBzdG9yZWQgYXMg dHlwZSBBQ0xfVFlQRV9FWFRFTkRFRC4KKyAgIFJldHVybiAxIGlmIHRoZSBnaXZlbiBBQ0wg aXMgbm9uLXRyaXZpYWwuCisgICBSZXR1cm4gMCBpZiBpdCBpcyB0cml2aWFsLiAgKi8KK2lu dAorYWNsX2V4dGVuZGVkX25vbnRyaXZpYWwgKGFjbF90IGFjbCkKK3sKKyAgLyogYWNsIGlz IG5vbi10cml2aWFsIGlmIGl0IGlzIG5vbi1lbXB0eS4gICovCisgIHJldHVybiAoYWNsX2Vu dHJpZXMgKGFjbCkgPiAwKTsKK30KKworIyBlbHNlIC8qIExpbnV4LCBGcmVlQlNELCBJUklY LCBUcnU2NCAqLworCisvKiBBQ0wgaXMgYW4gQUNMLCBmcm9tIGEgZmlsZSwgc3RvcmVkIGFz IHR5cGUgQUNMX1RZUEVfQUNDRVNTLgorICAgUmV0dXJuIDEgaWYgdGhlIGdpdmVuIEFDTCBp cyBub24tdHJpdmlhbC4KKyAgIFJldHVybiAwIGlmIGl0IGlzIHRyaXZpYWwsIGkuZS4gZXF1 aXZhbGVudCB0byBhIHNpbXBsZSBzdGF0KCkgbW9kZS4KKyAgIFJldHVybiAtMSBhbmQgc2V0 IGVycm5vIHVwb24gZmFpbHVyZSB0byBkZXRlcm1pbmUgaXQuICAqLworaW50CithY2xfYWNj ZXNzX25vbnRyaXZpYWwgKGFjbF90IGFjbCkKK3sKKyAgLyogYWNsIGlzIG5vbi10cml2aWFs IGlmIGl0IGhhcyBzb21lIGVudHJpZXMgb3RoZXIgdGhhbiBmb3IgInVzZXI6OiIsCisgICAg ICJncm91cDo6IiwgYW5kICJvdGhlcjo6Ii4gIE5vcm1hbGx5IHRoZXNlIHRocmVlIHNob3Vs ZCBiZSBwcmVzZW50CisgICAgIGF0IGxlYXN0LCBhbGxvd2luZyB1cyB0byB3cml0ZQorICAg ICAgICByZXR1cm4gKDMgPCBhY2xfZW50cmllcyAoYWNsKSk7CisgICAgIGJ1dCB0aGUgZm9s bG93aW5nIGNvZGUgaXMgbW9yZSByb2J1c3QuICAqLworIyAgaWYgSEFWRV9BQ0xfRklSU1Rf RU5UUlkgLyogTGludXgsIEZyZWVCU0QgKi8KKworICBhY2xfZW50cnlfdCBhY2U7CisgIGlu dCBnb3Rfb25lOworCisgIGZvciAoZ290X29uZSA9IGFjbF9nZXRfZW50cnkgKGFjbCwgQUNM X0ZJUlNUX0VOVFJZLCAmYWNlKTsKKyAgICAgICBnb3Rfb25lID4gMDsKKyAgICAgICBnb3Rf b25lID0gYWNsX2dldF9lbnRyeSAoYWNsLCBBQ0xfTkVYVF9FTlRSWSwgJmFjZSkpCisgICAg eworICAgICAgYWNsX3RhZ190IHRhZzsKKyAgICAgIGlmIChhY2xfZ2V0X3RhZ190eXBlIChh Y2UsICZ0YWcpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgICAgaWYgKCEodGFnID09 IEFDTF9VU0VSX09CSiB8fCB0YWcgPT0gQUNMX0dST1VQX09CSiB8fCB0YWcgPT0gQUNMX09U SEVSKSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICByZXR1cm4gZ290X29uZTsKKwor IyAgZWxzZSAvKiBJUklYLCBUcnU2NCAqLworIyAgIGlmIEhBVkVfQUNMX1RPX1NIT1JUX1RF WFQgLyogSVJJWCAqLworICAvKiBEb24ndCB1c2UgYWNsX2dldF9lbnRyeTogaXQgaXMgdW5k b2N1bWVudGVkLiAgKi8KKworICBpbnQgY291bnQgPSBhY2wtPmFjbF9jbnQ7CisgIGludCBp OworCisgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgIGFjbF9l bnRyeV90IGFjZSA9ICZhY2wtPmFjbF9lbnRyeVtpXTsKKyAgICAgIGFjbF90YWdfdCB0YWcg PSBhY2UtPmFlX3RhZzsKKworICAgICAgaWYgKCEodGFnID09IEFDTF9VU0VSX09CSiB8fCB0 YWcgPT0gQUNMX0dST1VQX09CSgorICAgICAgICAgICAgfHwgdGFnID09IEFDTF9PVEhFUl9P QkopKQorICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgIHJldHVybiAwOworCisjICAgZW5k aWYKKyMgICBpZiBIQVZFX0FDTF9GUkVFX1RFWFQgLyogVHJ1NjQgKi8KKyAgLyogRG9uJ3Qg dXNlIGFjbF9nZXRfZW50cnk6IGl0IHRha2VzIG9ubHkgb25lIGFyZ3VtZW50IGFuZCBkb2Vz IG5vdCB3b3JrLiAgKi8KKworICBpbnQgY291bnQgPSBhY2wtPmFjbF9udW07CisgIGFjbF9l bnRyeV90IGFjZTsKKworICBmb3IgKGFjZSA9IGFjbC0+YWNsX2ZpcnN0OyBjb3VudCA+IDA7 IGFjZSA9IGFjZS0+bmV4dCwgY291bnQtLSkKKyAgICB7CisgICAgICBhY2xfdGFnX3QgdGFn OworICAgICAgYWNsX3Blcm1fdCBwZXJtOworCisgICAgICB0YWcgPSBhY2UtPmVudHJ5LT5h Y2xfdHlwZTsKKyAgICAgIGlmICghKHRhZyA9PSBBQ0xfVVNFUl9PQkogfHwgdGFnID09IEFD TF9HUk9VUF9PQkogfHwgdGFnID09IEFDTF9PVEhFUikpCisgICAgICAgIHJldHVybiAxOwor CisgICAgICBwZXJtID0gYWNlLT5lbnRyeS0+YWNsX3Blcm07CisgICAgICAvKiBPbiBUcnU2 NCwgcGVybSBjYW4gYWxzbyBjb250YWluIG5vbi1zdGFuZGFyZCBiaXRzIHN1Y2ggYXMKKyAg ICAgICAgIFBFUk1fSU5TRVJULCBQRVJNX0RFTEVURSwgUEVSTV9NT0RJRlksIFBFUk1fTE9P S1VQLCAuLi4gKi8KKyAgICAgIGlmICgocGVybSAmIH4oQUNMX1JFQUQgfCBBQ0xfV1JJVEUg fCBBQ0xfRVhFQ1VURSkpICE9IDApCisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgcmV0 dXJuIDA7CisKKyMgICBlbmRpZgorIyAgZW5kaWYKK30KKworIyBlbmRpZgorCisKKyNlbGlm IFVTRV9BQ0wgJiYgSEFWRV9GQUNMICYmIGRlZmluZWQgR0VUQUNMIC8qIFNvbGFyaXMsIEN5 Z3dpbiwgbm90IEhQLVVYICovCisKKy8qIFRlc3QgYW4gQUNMIHJldHJpZXZlZCB3aXRoIEdF VEFDTC4KKyAgIFJldHVybiAxIGlmIHRoZSBnaXZlbiBBQ0wsIGNvbnNpc3Rpbmcgb2YgQ09V TlQgZW50cmllcywgaXMgbm9uLXRyaXZpYWwuCisgICBSZXR1cm4gMCBpZiBpdCBpcyB0cml2 aWFsLCBpLmUuIGVxdWl2YWxlbnQgdG8gYSBzaW1wbGUgc3RhdCgpIG1vZGUuICAqLworaW50 CithY2xfbm9udHJpdmlhbCAoaW50IGNvdW50LCBhY2xlbnRfdCAqZW50cmllcykKK3sKKyAg aW50IGk7CisKKyAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAg YWNsZW50X3QgKmFjZSA9ICZlbnRyaWVzW2ldOworCisgICAgICAvKiBOb3RlOiBJZiBhY2Ut PmFfdHlwZSA9IFVTRVJfT0JKLCBhY2UtPmFfaWQgaXMgdGhlIHN0X3VpZCBmcm9tIHN0YXQo KS4KKyAgICAgICAgIElmIGFjZS0+YV90eXBlID0gR1JPVVBfT0JKLCBhY2UtPmFfaWQgaXMg dGhlIHN0X2dpZCBmcm9tIHN0YXQoKS4KKyAgICAgICAgIFdlIGRvbid0IG5lZWQgdG8gY2hl Y2sgYWNlLT5hX2lkIGluIHRoZXNlIGNhc2VzLiAgKi8KKyAgICAgIGlmICghKGFjZS0+YV90 eXBlID09IFVTRVJfT0JKCisgICAgICAgICAgICB8fCBhY2UtPmFfdHlwZSA9PSBHUk9VUF9P QkoKKyAgICAgICAgICAgIHx8IGFjZS0+YV90eXBlID09IE9USEVSX09CSgorICAgICAgICAg ICAgLyogTm90ZTogQ3lnd2luIGRvZXMgbm90IHJldHVybiBhIENMQVNTX09CSiAoIm1hc2s6 IikgZW50cnkKKyAgICAgICAgICAgICAgIHNvbWV0aW1lcy4gICovCisgICAgICAgICAgICB8 fCBhY2UtPmFfdHlwZSA9PSBDTEFTU19PQkopKQorICAgICAgICByZXR1cm4gMTsKKyAgICB9 CisgIHJldHVybiAwOworfQorCisjIGlmZGVmIEFDRV9HRVRBQ0wKKworLyogQSBzaG9ydGN1 dCBmb3IgYSBiaXRtYXNrLiAgKi8KKyMgIGRlZmluZSBORVdfQUNFX1dSSVRFQV9EQVRBIChO RVdfQUNFX1dSSVRFX0RBVEEgfCBORVdfQUNFX0FQUEVORF9EQVRBKQorCisvKiBUZXN0IGFu IEFDTCByZXRyaWV2ZWQgd2l0aCBBQ0VfR0VUQUNMLgorICAgUmV0dXJuIDEgaWYgdGhlIGdp dmVuIEFDTCwgY29uc2lzdGluZyBvZiBDT1VOVCBlbnRyaWVzLCBpcyBub24tdHJpdmlhbC4K KyAgIFJldHVybiAwIGlmIGl0IGlzIHRyaXZpYWwsIGkuZS4gZXF1aXZhbGVudCB0byBhIHNp bXBsZSBzdGF0KCkgbW9kZS4gICovCitpbnQKK2FjbF9hY2Vfbm9udHJpdmlhbCAoaW50IGNv dW50LCBhY2VfdCAqZW50cmllcykKK3sKKyAgaW50IGk7CisKKyAgLyogVGhlIGZsYWdzIGlu IHRoZSBhY2VfdCBzdHJ1Y3R1cmUgY2hhbmdlZCBpbiBhIGJpbmFyeSBpbmNvbXBhdGlibGUg d2F5CisgICAgIHdoZW4gQUNMX05PX1RSSVZJQUwgZXRjLiB3ZXJlIGludHJvZHVjZWQgaW4g PHN5cy9hY2wuaD4gdmVyc2lvbiAxLjE1LgorICAgICBIb3cgdG8gZGlzdGluZ3Vpc2ggdGhl IHR3byBjb252ZW50aW9ucyBhdCBydW50aW1lPworICAgICBJbiB0aGUgb2xkIGNvbnZlbnRp b24sIHVzdWFsbHkgdGhyZWUgQUNFcyBoYXZlIGFfZmxhZ3MgPSBBQ0VfT1dORVIgLworICAg ICBBQ0VfR1JPVVAgLyBBQ0VfT1RIRVIsIGluIHRoZSByYW5nZSAweDAxMDAuLjB4MDQwMC4g IEluIHRoZSBuZXcKKyAgICAgY29udmVudGlvbiwgdGhlc2UgdmFsdWVzIGFyZSBub3QgdXNl ZC4gICovCisgIGludCBvbGRfY29udmVudGlvbiA9IDA7CisKKyAgZm9yIChpID0gMDsgaSA8 IGNvdW50OyBpKyspCisgICAgaWYgKGVudHJpZXNbaV0uYV9mbGFncyAmIChPTERfQUNFX09X TkVSIHwgT0xEX0FDRV9HUk9VUCB8IE9MRF9BQ0VfT1RIRVIpKQorICAgICAgeworICAgICAg ICBvbGRfY29udmVudGlvbiA9IDE7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgIGlm IChvbGRfY29udmVudGlvbikKKyAgICAvKiBSdW5uaW5nIG9uIFNvbGFyaXMgMTAuICAqLwor ICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgeworICAgICAgICBhY2Vf dCAqYWNlID0gJmVudHJpZXNbaV07CisKKyAgICAgICAgLyogTm90ZToKKyAgICAgICAgICAg SWYgYWNlLT5hX2ZsYWdzID0gQUNFX09XTkVSLCBhY2UtPmFfd2hvIGlzIHRoZSBzdF91aWQg ZnJvbSBzdGF0KCkuCisgICAgICAgICAgIElmIGFjZS0+YV9mbGFncyA9IEFDRV9HUk9VUCwg YWNlLT5hX3dobyBpcyB0aGUgc3RfZ2lkIGZyb20gc3RhdCgpLgorICAgICAgICAgICBXZSBk b24ndCBuZWVkIHRvIGNoZWNrIGFjZS0+YV93aG8gaW4gdGhlc2UgY2FzZXMuICAqLworICAg ICAgICBpZiAoIShhY2UtPmFfdHlwZSA9PSBPTERfQUxMT1cKKyAgICAgICAgICAgICAgJiYg KGFjZS0+YV9mbGFncyA9PSBPTERfQUNFX09XTkVSCisgICAgICAgICAgICAgICAgICB8fCBh Y2UtPmFfZmxhZ3MgPT0gT0xEX0FDRV9HUk9VUAorICAgICAgICAgICAgICAgICAgfHwgYWNl LT5hX2ZsYWdzID09IE9MRF9BQ0VfT1RIRVIpKSkKKyAgICAgICAgICByZXR1cm4gMTsKKyAg ICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIFJ1bm5pbmcgb24gU29sYXJpcyAxMCAo bmV3ZXIgdmVyc2lvbikgb3IgU29sYXJpcyAxMS4gICovCisgICAgICB1bnNpZ25lZCBpbnQg YWNjZXNzX21hc2tzWzZdID0KKyAgICAgICAgeworICAgICAgICAgIDAsIC8qIG93bmVyQCBk ZW55ICovCisgICAgICAgICAgMCwgLyogb3duZXJAIGFsbG93ICovCisgICAgICAgICAgMCwg LyogZ3JvdXBAIGRlbnkgKi8KKyAgICAgICAgICAwLCAvKiBncm91cEAgYWxsb3cgKi8KKyAg ICAgICAgICAwLCAvKiBldmVyeW9uZUAgZGVueSAqLworICAgICAgICAgIDAgIC8qIGV2ZXJ5 b25lQCBhbGxvdyAqLworICAgICAgICB9OworCisgICAgICBmb3IgKGkgPSAwOyBpIDwgY291 bnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgIGFjZV90ICphY2UgPSAmZW50cmllc1tp XTsKKyAgICAgICAgICB1bnNpZ25lZCBpbnQgaW5kZXgxOworICAgICAgICAgIHVuc2lnbmVk IGludCBpbmRleDI7CisKKyAgICAgICAgICBpZiAoYWNlLT5hX3R5cGUgPT0gTkVXX0FDRV9B Q0NFU1NfQUxMT1dFRF9BQ0VfVFlQRSkKKyAgICAgICAgICAgIGluZGV4MSA9IDE7CisgICAg ICAgICAgZWxzZSBpZiAoYWNlLT5hX3R5cGUgPT0gTkVXX0FDRV9BQ0NFU1NfREVOSUVEX0FD RV9UWVBFKQorICAgICAgICAgICAgaW5kZXgxID0gMDsKKyAgICAgICAgICBlbHNlCisgICAg ICAgICAgICByZXR1cm4gMTsKKworICAgICAgICAgIGlmIChhY2UtPmFfZmxhZ3MgPT0gTkVX X0FDRV9PV05FUikKKyAgICAgICAgICAgIGluZGV4MiA9IDA7CisgICAgICAgICAgZWxzZSBp ZiAoYWNlLT5hX2ZsYWdzID09IChORVdfQUNFX0dST1VQIHwgTkVXX0FDRV9JREVOVElGSUVS X0dST1VQKSkKKyAgICAgICAgICAgIGluZGV4MiA9IDI7CisgICAgICAgICAgZWxzZSBpZiAo YWNlLT5hX2ZsYWdzID09IE5FV19BQ0VfRVZFUllPTkUpCisgICAgICAgICAgICBpbmRleDIg PSA0OworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAg ICAgYWNjZXNzX21hc2tzW2luZGV4MSArIGluZGV4Ml0gfD0gYWNlLT5hX2FjY2Vzc19tYXNr OworICAgICAgICB9CisKKyAgICAgIC8qIFRoZSBzYW1lIGJpdCBzaG91bGRuJ3QgYmUgYm90 aCBhbGxvd2VkIGFuZCBkZW5pZWQuICAqLworICAgICAgaWYgKGFjY2Vzc19tYXNrc1swXSAm IGFjY2Vzc19tYXNrc1sxXSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICBpZiAoYWNjZXNz X21hc2tzWzJdICYgYWNjZXNzX21hc2tzWzNdKQorICAgICAgICByZXR1cm4gMTsKKyAgICAg IGlmIChhY2Nlc3NfbWFza3NbNF0gJiBhY2Nlc3NfbWFza3NbNV0pCisgICAgICAgIHJldHVy biAxOworCisgICAgICAvKiBDaGVjayBtaW5pbXVtIG1hc2tzLiAgKi8KKyAgICAgIGlmICgo TkVXX0FDRV9XUklURV9OQU1FRF9BVFRSUworICAgICAgICAgICB8IE5FV19BQ0VfV1JJVEVf QVRUUklCVVRFUworICAgICAgICAgICB8IE5FV19BQ0VfV1JJVEVfQUNMCisgICAgICAgICAg IHwgTkVXX0FDRV9XUklURV9PV05FUikKKyAgICAgICAgICAmIH4gYWNjZXNzX21hc2tzWzFd KQorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGFjY2Vzc19tYXNrc1sxXSAmPSB+KE5FV19B Q0VfV1JJVEVfTkFNRURfQVRUUlMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTkVX X0FDRV9XUklURV9BVFRSSUJVVEVTCisgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5F V19BQ0VfV1JJVEVfQUNMCisgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5FV19BQ0Vf V1JJVEVfT1dORVIpOworICAgICAgaWYgKChORVdfQUNFX1JFQURfTkFNRURfQVRUUlMKKyAg ICAgICAgICAgfCBORVdfQUNFX1JFQURfQVRUUklCVVRFUworICAgICAgICAgICB8IE5FV19B Q0VfUkVBRF9BQ0wKKyAgICAgICAgICAgfCBORVdfQUNFX1NZTkNIUk9OSVpFKQorICAgICAg ICAgICYgfiBhY2Nlc3NfbWFza3NbNV0pCisgICAgICAgIHJldHVybiAxOworICAgICAgYWNj ZXNzX21hc2tzWzVdICY9IH4oTkVXX0FDRV9SRUFEX05BTUVEX0FUVFJTCisgICAgICAgICAg ICAgICAgICAgICAgICAgICB8IE5FV19BQ0VfUkVBRF9BVFRSSUJVVEVTCisgICAgICAgICAg ICAgICAgICAgICAgICAgICB8IE5FV19BQ0VfUkVBRF9BQ0wKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgTkVXX0FDRV9TWU5DSFJPTklaRSk7CisKKyAgICAgIC8qIENoZWNrIHRo ZSBhbGxvd2VkIG9yIGRlbmllZCBiaXRzLiAgKi8KKyAgICAgIHN3aXRjaCAoKGFjY2Vzc19t YXNrc1swXSB8IGFjY2Vzc19tYXNrc1sxXSkKKyAgICAgICAgICAgICAgJiB+KE5FV19BQ0Vf UkVBRF9OQU1FRF9BVFRSUworICAgICAgICAgICAgICAgICAgfCBORVdfQUNFX1JFQURfQVRU UklCVVRFUworICAgICAgICAgICAgICAgICAgfCBORVdfQUNFX1JFQURfQUNMCisgICAgICAg ICAgICAgICAgICB8IE5FV19BQ0VfU1lOQ0hST05JWkUpKQorICAgICAgICB7CisgICAgICAg IGNhc2UgMDoKKyAgICAgICAgY2FzZSBORVdfQUNFX1JFQURfREFUQToKKyAgICAgICAgY2Fz ZSAgICAgICAgICAgICAgICAgICAgIE5FV19BQ0VfV1JJVEVBX0RBVEE6CisgICAgICAgIGNh c2UgTkVXX0FDRV9SRUFEX0RBVEEgfCBORVdfQUNFX1dSSVRFQV9EQVRBOgorICAgICAgICBj YXNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FV19BQ0Vf RVhFQ1VURToKKyAgICAgICAgY2FzZSBORVdfQUNFX1JFQURfREFUQSB8ICAgICAgICAgICAg ICAgICAgICAgICBORVdfQUNFX0VYRUNVVEU6CisgICAgICAgIGNhc2UgICAgICAgICAgICAg ICAgICAgICBORVdfQUNFX1dSSVRFQV9EQVRBIHwgTkVXX0FDRV9FWEVDVVRFOgorICAgICAg ICBjYXNlIE5FV19BQ0VfUkVBRF9EQVRBIHwgTkVXX0FDRV9XUklURUFfREFUQSB8IE5FV19B Q0VfRVhFQ1VURToKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg ICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgc3dpdGNoICgoYWNjZXNzX21hc2tz WzJdIHwgYWNjZXNzX21hc2tzWzNdKQorICAgICAgICAgICAgICAmIH4oTkVXX0FDRV9SRUFE X05BTUVEX0FUVFJTCisgICAgICAgICAgICAgICAgICB8IE5FV19BQ0VfUkVBRF9BVFRSSUJV VEVTCisgICAgICAgICAgICAgICAgICB8IE5FV19BQ0VfUkVBRF9BQ0wKKyAgICAgICAgICAg ICAgICAgIHwgTkVXX0FDRV9TWU5DSFJPTklaRSkpCisgICAgICAgIHsKKyAgICAgICAgY2Fz ZSAwOgorICAgICAgICBjYXNlIE5FV19BQ0VfUkVBRF9EQVRBOgorICAgICAgICBjYXNlICAg ICAgICAgICAgICAgICAgICAgTkVXX0FDRV9XUklURUFfREFUQToKKyAgICAgICAgY2FzZSBO RVdfQUNFX1JFQURfREFUQSB8IE5FV19BQ0VfV1JJVEVBX0RBVEE6CisgICAgICAgIGNhc2Ug ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVXX0FDRV9FWEVD VVRFOgorICAgICAgICBjYXNlIE5FV19BQ0VfUkVBRF9EQVRBIHwgICAgICAgICAgICAgICAg ICAgICAgIE5FV19BQ0VfRVhFQ1VURToKKyAgICAgICAgY2FzZSAgICAgICAgICAgICAgICAg ICAgIE5FV19BQ0VfV1JJVEVBX0RBVEEgfCBORVdfQUNFX0VYRUNVVEU6CisgICAgICAgIGNh c2UgTkVXX0FDRV9SRUFEX0RBVEEgfCBORVdfQUNFX1dSSVRFQV9EQVRBIHwgTkVXX0FDRV9F WEVDVVRFOgorICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg IHJldHVybiAxOworICAgICAgICB9CisgICAgICBzd2l0Y2ggKChhY2Nlc3NfbWFza3NbNF0g fCBhY2Nlc3NfbWFza3NbNV0pCisgICAgICAgICAgICAgICYgfihORVdfQUNFX1dSSVRFX05B TUVEX0FUVFJTCisgICAgICAgICAgICAgICAgICB8IE5FV19BQ0VfV1JJVEVfQVRUUklCVVRF UworICAgICAgICAgICAgICAgICAgfCBORVdfQUNFX1dSSVRFX0FDTAorICAgICAgICAgICAg ICAgICAgfCBORVdfQUNFX1dSSVRFX09XTkVSKSkKKyAgICAgICAgeworICAgICAgICBjYXNl IDA6CisgICAgICAgIGNhc2UgTkVXX0FDRV9SRUFEX0RBVEE6CisgICAgICAgIGNhc2UgICAg ICAgICAgICAgICAgICAgICBORVdfQUNFX1dSSVRFQV9EQVRBOgorICAgICAgICBjYXNlIE5F V19BQ0VfUkVBRF9EQVRBIHwgTkVXX0FDRV9XUklURUFfREFUQToKKyAgICAgICAgY2FzZSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVdfQUNFX0VYRUNV VEU6CisgICAgICAgIGNhc2UgTkVXX0FDRV9SRUFEX0RBVEEgfCAgICAgICAgICAgICAgICAg ICAgICAgTkVXX0FDRV9FWEVDVVRFOgorICAgICAgICBjYXNlICAgICAgICAgICAgICAgICAg ICAgTkVXX0FDRV9XUklURUFfREFUQSB8IE5FV19BQ0VfRVhFQ1VURToKKyAgICAgICAgY2Fz ZSBORVdfQUNFX1JFQURfREFUQSB8IE5FV19BQ0VfV1JJVEVBX0RBVEEgfCBORVdfQUNFX0VY RUNVVEU6CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg cmV0dXJuIDE7CisgICAgICAgIH0KKworICAgICAgLyogQ2hlY2sgdGhhdCB0aGUgTkVXX0FD RV9XUklURV9EQVRBIGFuZCBORVdfQUNFX0FQUEVORF9EQVRBIGJpdHMgYXJlCisgICAgICAg ICBlaXRoZXIgYm90aCBhbGxvd2VkIG9yIGJvdGggZGVuaWVkLiAgKi8KKyAgICAgIGlmICgo KGFjY2Vzc19tYXNrc1swXSAmIE5FV19BQ0VfV1JJVEVfREFUQSkgIT0gMCkKKyAgICAgICAg ICAhPSAoKGFjY2Vzc19tYXNrc1swXSAmIE5FV19BQ0VfQVBQRU5EX0RBVEEpICE9IDApKQor ICAgICAgICByZXR1cm4gMTsKKyAgICAgIGlmICgoKGFjY2Vzc19tYXNrc1syXSAmIE5FV19B Q0VfV1JJVEVfREFUQSkgIT0gMCkKKyAgICAgICAgICAhPSAoKGFjY2Vzc19tYXNrc1syXSAm IE5FV19BQ0VfQVBQRU5EX0RBVEEpICE9IDApKQorICAgICAgICByZXR1cm4gMTsKKyAgICAg IGlmICgoKGFjY2Vzc19tYXNrc1s0XSAmIE5FV19BQ0VfV1JJVEVfREFUQSkgIT0gMCkKKyAg ICAgICAgICAhPSAoKGFjY2Vzc19tYXNrc1s0XSAmIE5FV19BQ0VfQVBQRU5EX0RBVEEpICE9 IDApKQorICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKyMg ZW5kaWYKKworI2VsaWYgVVNFX0FDTCAmJiBIQVZFX0dFVEFDTCAvKiBIUC1VWCAqLworCisv KiBSZXR1cm4gMSBpZiB0aGUgZ2l2ZW4gQUNMIGlzIG5vbi10cml2aWFsLgorICAgUmV0dXJu IDAgaWYgaXQgaXMgdHJpdmlhbCwgaS5lLiBlcXVpdmFsZW50IHRvIGEgc2ltcGxlIHN0YXQo KSBtb2RlLiAgKi8KK2ludAorYWNsX25vbnRyaXZpYWwgKGludCBjb3VudCwgc3RydWN0IGFj bF9lbnRyeSAqZW50cmllcywgc3RydWN0IHN0YXQgKnNiKQoreworICBpbnQgaTsKKworICBm b3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICBzdHJ1Y3QgYWNsX2Vu dHJ5ICphY2UgPSAmZW50cmllc1tpXTsKKworICAgICAgaWYgKCEoKGFjZS0+dWlkID09IHNi LT5zdF91aWQgJiYgYWNlLT5naWQgPT0gQUNMX05TR1JPVVApCisgICAgICAgICAgICB8fCAo YWNlLT51aWQgPT0gQUNMX05TVVNFUiAmJiBhY2UtPmdpZCA9PSBzYi0+c3RfZ2lkKQorICAg ICAgICAgICAgfHwgKGFjZS0+dWlkID09IEFDTF9OU1VTRVIgJiYgYWNlLT5naWQgPT0gQUNM X05TR1JPVVApKSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICByZXR1cm4gMDsKK30K KworIyBpZiBIQVZFX0FDTFZfSCAvKiBIUC1VWCA+PSAxMS4xMSAqLworCisvKiBSZXR1cm4g MSBpZiB0aGUgZ2l2ZW4gQUNMIGlzIG5vbi10cml2aWFsLgorICAgUmV0dXJuIDAgaWYgaXQg aXMgdHJpdmlhbCwgaS5lLiBlcXVpdmFsZW50IHRvIGEgc2ltcGxlIHN0YXQoKSBtb2RlLiAg Ki8KK2ludAorYWNsdl9ub250cml2aWFsIChpbnQgY291bnQsIHN0cnVjdCBhY2wgKmVudHJp ZXMpCit7CisgIGludCBpOworCisgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAg IHsKKyAgICAgIHN0cnVjdCBhY2wgKmFjZSA9ICZlbnRyaWVzW2ldOworCisgICAgICAvKiBO b3RlOiBJZiBhY2UtPmFfdHlwZSA9IFVTRVJfT0JKLCBhY2UtPmFfaWQgaXMgdGhlIHN0X3Vp ZCBmcm9tIHN0YXQoKS4KKyAgICAgICAgIElmIGFjZS0+YV90eXBlID0gR1JPVVBfT0JKLCBh Y2UtPmFfaWQgaXMgdGhlIHN0X2dpZCBmcm9tIHN0YXQoKS4KKyAgICAgICAgIFdlIGRvbid0 IG5lZWQgdG8gY2hlY2sgYWNlLT5hX2lkIGluIHRoZXNlIGNhc2VzLiAgKi8KKyAgICAgIGlm ICghKGFjZS0+YV90eXBlID09IFVTRVJfT0JKIC8qIG5vIG5lZWQgdG8gY2hlY2sgYWNlLT5h X2lkIGhlcmUgKi8KKyAgICAgICAgICAgIHx8IGFjZS0+YV90eXBlID09IEdST1VQX09CSiAv KiBubyBuZWVkIHRvIGNoZWNrIGFjZS0+YV9pZCBoZXJlICovCisgICAgICAgICAgICB8fCBh Y2UtPmFfdHlwZSA9PSBDTEFTU19PQkoKKyAgICAgICAgICAgIHx8IGFjZS0+YV90eXBlID09 IE9USEVSX09CSikpCisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgcmV0dXJuIDA7Cit9 CisKKyMgZW5kaWYKKworI2VsaWYgVVNFX0FDTCAmJiAoSEFWRV9BQ0xYX0dFVCB8fCBIQVZF X1NUQVRBQ0wpIC8qIEFJWCAqLworCisvKiBSZXR1cm4gMSBpZiB0aGUgZ2l2ZW4gQUNMIGlz IG5vbi10cml2aWFsLgorICAgUmV0dXJuIDAgaWYgaXQgaXMgdHJpdmlhbCwgaS5lLiBlcXVp dmFsZW50IHRvIGEgc2ltcGxlIHN0YXQoKSBtb2RlLiAgKi8KK2ludAorYWNsX25vbnRyaXZp YWwgKHN0cnVjdCBhY2wgKmEpCit7CisgIC8qIFRoZSBub3JtYWwgd2F5IHRvIGl0ZXJhdGUg dGhyb3VnaCBhbiBBQ0wgaXMgbGlrZSB0aGlzOgorICAgICAgIHN0cnVjdCBhY2xfZW50cnkg KmFjZTsKKyAgICAgICBmb3IgKGFjZSA9IGEtPmFjbF9leHQ7IGFjZSAhPSBhY2xfbGFzdCAo YSk7IGFjZSA9IGFjbF9ueHQgKGFjZSkpCisgICAgICAgICB7CisgICAgICAgICAgIHN0cnVj dCBhY2VfaWQgKmFlaTsKKyAgICAgICAgICAgc3dpdGNoIChhY2UtPmFjZV90eXBlKQorICAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICBjYXNlIEFDQ19QRVJNSVQ6CisgICAgICAgICAg ICAgY2FzZSBBQ0NfREVOWToKKyAgICAgICAgICAgICBjYXNlIEFDQ19TUEVDSUZZOgorICAg ICAgICAgICAgICAgLi4uOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgZm9yIChhZWkg PSBhY2UtPmFjZV9pZDsgYWVpICE9IGlkX2xhc3QgKGFjZSk7IGFlaSA9IGlkX254dCAoYWVp KSkKKyAgICAgICAgICAgICAuLi4KKyAgICAgICAgIH0KKyAgICovCisgIHJldHVybiAoYWNs X2xhc3QgKGEpICE9IGEtPmFjbF9leHQgPyAxIDogMCk7Cit9CisKKyMgaWYgSEFWRV9BQ0xY X0dFVCAmJiBkZWZpbmVkIEFDTF9BSVhfV0lQIC8qIG5ld2VyIEFJWCAqLworCisvKiBSZXR1 cm4gMSBpZiB0aGUgZ2l2ZW4gQUNMIGlzIG5vbi10cml2aWFsLgorICAgUmV0dXJuIDAgaWYg aXQgaXMgdHJpdmlhbCwgaS5lLiBlcXVpdmFsZW50IHRvIGEgc2ltcGxlIHN0YXQoKSBtb2Rl LiAgKi8KK2ludAorYWNsX25mczRfbm9udHJpdmlhbCAobmZzNF9hY2xfaW50X3QgKmEpCit7 CisjICBpZiAxIC8qIGxldCdzIHRyeSB0aGlzIGZpcnN0ICovCisgIHJldHVybiAoYS0+YWNs RW50cnlOID4gMCA/IDEgOiAwKTsKKyMgIGVsc2UKKyAgaW50IGNvdW50ID0gYS0+YWNsRW50 cnlOOworICBpbnQgaTsKKworICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7 CisgICAgICBuZnM0X2FjZV9pbnRfdCAqYWNlID0gJmEtPmFjbEVudHJ5W2ldOworCisgICAg ICBpZiAoISgoYWNlLT5mbGFncyAmIEFDRTRfSURfU1BFQ0lBTCkgIT0gMAorICAgICAgICAg ICAgJiYgKGFjZS0+YWNlV2hvLnNwZWNpYWxfd2hvaWQgPT0gQUNFNF9XSE9fT1dORVIKKyAg ICAgICAgICAgICAgICB8fCBhY2UtPmFjZVdoby5zcGVjaWFsX3dob2lkID09IEFDRTRfV0hP X0dST1VQCisgICAgICAgICAgICAgICAgfHwgYWNlLT5hY2VXaG8uc3BlY2lhbF93aG9pZCA9 PSBBQ0U0X1dIT19FVkVSWU9ORSkKKyAgICAgICAgICAgICYmIGFjZS0+YWNlVHlwZSA9PSBB Q0U0X0FDQ0VTU19BTExPV0VEX0FDRV9UWVBFCisgICAgICAgICAgICAmJiBhY2UtPmFjZUZs YWdzID09IDAKKyAgICAgICAgICAgICYmIChhY2UtPmFjZU1hc2sgJiB+KEFDRTRfUkVBRF9E QVRBIHwgQUNFNF9MSVNUX0RJUkVDVE9SWQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfCBBQ0U0X1dSSVRFX0RBVEEgfCBBQ0U0X0FERF9GSUxFCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8IEFDRTRfRVhFQ1VURSkpID09IDApKQorICAgICAgICBy ZXR1cm4gMTsKKyAgICB9CisgIHJldHVybiAwOworIyAgZW5kaWYKK30KKworIyBlbmRpZgor CisjZWxpZiBVU0VfQUNMICYmIEhBVkVfQUNMU09SVCAvKiBOb25TdG9wIEtlcm5lbCAqLwor CisvKiBUZXN0IGFuIEFDTCByZXRyaWV2ZWQgd2l0aCBBQ0xfR0VULgorICAgUmV0dXJuIDEg aWYgdGhlIGdpdmVuIEFDTCwgY29uc2lzdGluZyBvZiBDT1VOVCBlbnRyaWVzLCBpcyBub24t dHJpdmlhbC4KKyAgIFJldHVybiAwIGlmIGl0IGlzIHRyaXZpYWwsIGkuZS4gZXF1aXZhbGVu dCB0byBhIHNpbXBsZSBzdGF0KCkgbW9kZS4gICovCitpbnQKK2FjbF9ub250cml2aWFsIChp bnQgY291bnQsIHN0cnVjdCBhY2wgKmVudHJpZXMpCit7CisgIGludCBpOworCisgIGZvciAo aSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgIHN0cnVjdCBhY2wgKmFjZSA9 ICZlbnRyaWVzW2ldOworCisgICAgICAvKiBOb3RlOiBJZiBhY2UtPmFfdHlwZSA9IFVTRVJf T0JKLCBhY2UtPmFfaWQgaXMgdGhlIHN0X3VpZCBmcm9tIHN0YXQoKS4KKyAgICAgICAgIElm IGFjZS0+YV90eXBlID0gR1JPVVBfT0JKLCBhY2UtPmFfaWQgaXMgdGhlIHN0X2dpZCBmcm9t IHN0YXQoKS4KKyAgICAgICAgIFdlIGRvbid0IG5lZWQgdG8gY2hlY2sgYWNlLT5hX2lkIGlu IHRoZXNlIGNhc2VzLiAgKi8KKyAgICAgIGlmICghKGFjZS0+YV90eXBlID09IFVTRVJfT0JK IC8qIG5vIG5lZWQgdG8gY2hlY2sgYWNlLT5hX2lkIGhlcmUgKi8KKyAgICAgICAgICAgIHx8 IGFjZS0+YV90eXBlID09IEdST1VQX09CSiAvKiBubyBuZWVkIHRvIGNoZWNrIGFjZS0+YV9p ZCBoZXJlICovCisgICAgICAgICAgICB8fCBhY2UtPmFfdHlwZSA9PSBDTEFTU19PQkoKKyAg ICAgICAgICAgIHx8IGFjZS0+YV90eXBlID09IE9USEVSX09CSikpCisgICAgICAgIHJldHVy biAxOworICAgIH0KKyAgcmV0dXJuIDA7Cit9CisKKyNlbmRpZgorCisKKy8qIFJldHVybiAx IGlmIE5BTUUgaGFzIGEgbm9udHJpdmlhbCBhY2Nlc3MgY29udHJvbCBsaXN0LCAwIGlmIE5B TUUKKyAgIG9ubHkgaGFzIG5vIG9yIGEgYmFzZSBhY2Nlc3MgY29udHJvbCBsaXN0LCBhbmQg LTEgKHNldHRpbmcgZXJybm8pCisgICBvbiBlcnJvci4gIFNCIG11c3QgYmUgc2V0IHRvIHRo ZSBzdGF0IGJ1ZmZlciBvZiBOQU1FLCBvYnRhaW5lZAorICAgdGhyb3VnaCBzdGF0KCkgb3Ig bHN0YXQoKS4gICovCisKK2ludAorZmlsZV9oYXNfYWNsIChjaGFyIGNvbnN0ICpuYW1lLCBz dHJ1Y3Qgc3RhdCBjb25zdCAqc2IpCit7CisjaWYgVVNFX0FDTAorICBpZiAoISBTX0lTTE5L IChzYi0+c3RfbW9kZSkpCisgICAgeworIyBpZiBIQVZFX0FDTF9HRVRfRklMRQorCisgICAg ICAvKiBQT1NJWCAxMDAzLjFlIChkcmFmdCAxNyAtLSBhYmFuZG9uZWQpIHNwZWNpZmljIHZl cnNpb24uICAqLworICAgICAgLyogTGludXgsIEZyZWVCU0QsIE1hYyBPUyBYLCBJUklYLCBU cnU2NCAqLworICAgICAgaW50IHJldDsKKworICAgICAgaWYgKEhBVkVfQUNMX0VYVEVOREVE X0ZJTEUpIC8qIExpbnV4ICovCisgICAgICAgIHsKKyAgICAgICAgICAvKiBPbiBMaW51eCwg YWNsX2V4dGVuZGVkX2ZpbGUgaXMgYW4gb3B0aW1pemVkIGZ1bmN0aW9uOiBJdCBvbmx5Cisg ICAgICAgICAgICAgbWFrZXMgdHdvIGNhbGxzIHRvIGdldHhhdHRyKCksIG9uZSBmb3IgQUNM X1RZUEVfQUNDRVNTLCBvbmUgZm9yCisgICAgICAgICAgICAgQUNMX1RZUEVfREVGQVVMVC4g ICovCisgICAgICAgICAgcmV0ID0gYWNsX2V4dGVuZGVkX2ZpbGUgKG5hbWUpOworICAgICAg ICB9CisgICAgICBlbHNlIC8qIEZyZWVCU0QsIE1hYyBPUyBYLCBJUklYLCBUcnU2NCAqLwor ICAgICAgICB7CisjICBpZiBIQVZFX0FDTF9UWVBFX0VYVEVOREVEIC8qIE1hYyBPUyBYICov CisgICAgICAgICAgLyogT24gTWFjIE9TIFgsIGFjbF9nZXRfZmlsZSAobmFtZSwgQUNMX1RZ UEVfQUNDRVNTKQorICAgICAgICAgICAgIGFuZCBhY2xfZ2V0X2ZpbGUgKG5hbWUsIEFDTF9U WVBFX0RFRkFVTFQpCisgICAgICAgICAgICAgYWx3YXlzIHJldHVybiBOVUxMIC8gRUlOVkFM LiAgVGhlcmUgaXMgbm8gcG9pbnQgaW4gbWFraW5nCisgICAgICAgICAgICAgdGhlc2UgdHdv IHVzZWxlc3MgY2FsbHMuICBUaGUgcmVhbCBBQ0wgaXMgcmV0cmlldmVkIHRocm91Z2gKKyAg ICAgICAgICAgICBhY2xfZ2V0X2ZpbGUgKG5hbWUsIEFDTF9UWVBFX0VYVEVOREVEKS4gICov CisgICAgICAgICAgYWNsX3QgYWNsID0gYWNsX2dldF9maWxlIChuYW1lLCBBQ0xfVFlQRV9F WFRFTkRFRCk7CisgICAgICAgICAgaWYgKGFjbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg ICAgICAgcmV0ID0gYWNsX2V4dGVuZGVkX25vbnRyaXZpYWwgKGFjbCk7CisgICAgICAgICAg ICAgIGFjbF9mcmVlIChhY2wpOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAg ICAgICAgICAgIHJldCA9IC0xOworIyAgZWxzZSAvKiBGcmVlQlNELCBJUklYLCBUcnU2NCAq LworICAgICAgICAgIGFjbF90IGFjbCA9IGFjbF9nZXRfZmlsZSAobmFtZSwgQUNMX1RZUEVf QUNDRVNTKTsKKyAgICAgICAgICBpZiAoYWNsKQorICAgICAgICAgICAgeworICAgICAgICAg ICAgICBpbnQgc2F2ZWRfZXJybm87CisKKyAgICAgICAgICAgICAgcmV0ID0gYWNsX2FjY2Vz c19ub250cml2aWFsIChhY2wpOworICAgICAgICAgICAgICBzYXZlZF9lcnJubyA9IGVycm5v OworICAgICAgICAgICAgICBhY2xfZnJlZSAoYWNsKTsKKyAgICAgICAgICAgICAgZXJybm8g PSBzYXZlZF9lcnJubzsKKyMgICBpZiBIQVZFX0FDTF9GUkVFX1RFWFQgLyogVHJ1NjQgKi8K KyAgICAgICAgICAgICAgLyogT24gT1NGLzEsIGFjbF9nZXRfZmlsZSAobmFtZSwgQUNMX1RZ UEVfREVGQVVMVCkgYWx3YXlzCisgICAgICAgICAgICAgICAgIHJldHVybnMgTlVMTCB3aXRo IGVycm5vIG5vdCBzZXQuICBUaGVyZSBpcyBubyBwb2ludCBpbgorICAgICAgICAgICAgICAg ICBtYWtpbmcgdGhpcyBjYWxsLiAgKi8KKyMgICBlbHNlIC8qIEZyZWVCU0QsIElSSVggKi8K KyAgICAgICAgICAgICAgLyogT24gTGludXgsIEZyZWVCU0QsIElSSVgsIGFjbF9nZXRfZmls ZSAobmFtZSwgQUNMX1RZUEVfQUNDRVNTKQorICAgICAgICAgICAgICAgICBhbmQgYWNsX2dl dF9maWxlIChuYW1lLCBBQ0xfVFlQRV9ERUZBVUxUKSBvbiBhIGRpcmVjdG9yeQorICAgICAg ICAgICAgICAgICBlaXRoZXIgYm90aCBzdWNjZWVkIG9yIGJvdGggZmFpbDsgaXQgZGVwZW5k cyBvbiB0aGUKKyAgICAgICAgICAgICAgICAgZmlsZSBzeXN0ZW0uICBUaGVyZWZvcmUgdGhl cmUgaXMgbm8gcG9pbnQgaW4gbWFraW5nIHRoZSBzZWNvbmQKKyAgICAgICAgICAgICAgICAg Y2FsbCBpZiB0aGUgZmlyc3Qgb25lIGFscmVhZHkgZmFpbGVkLiAgKi8KKyAgICAgICAgICAg ICAgaWYgKHJldCA9PSAwICYmIFNfSVNESVIgKHNiLT5zdF9tb2RlKSkKKyAgICAgICAgICAg ICAgICB7CisgICAgICAgICAgICAgICAgICBhY2wgPSBhY2xfZ2V0X2ZpbGUgKG5hbWUsIEFD TF9UWVBFX0RFRkFVTFQpOworICAgICAgICAgICAgICAgICAgaWYgKGFjbCkKKyAgICAgICAg ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIHJldCA9ICgwIDwgYWNsX2Vu dHJpZXMgKGFjbCkpOworICAgICAgICAgICAgICAgICAgICAgIGFjbF9mcmVlIChhY2wpOwor ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg ICAgICAgICAgICAgIHJldCA9IC0xOworICAgICAgICAgICAgICAgIH0KKyMgICBlbmRpZgor ICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldCA9IC0xOwor IyAgZW5kaWYKKyAgICAgICAgfQorICAgICAgaWYgKHJldCA8IDApCisgICAgICAgIHJldHVy biAtIGFjbF9lcnJub192YWxpZCAoZXJybm8pOworICAgICAgcmV0dXJuIHJldDsKKworIyBl bGlmIEhBVkVfRkFDTCAmJiBkZWZpbmVkIEdFVEFDTCAvKiBTb2xhcmlzLCBDeWd3aW4sIG5v dCBIUC1VWCAqLworCisjICBpZiBkZWZpbmVkIEFDTF9OT19UUklWSUFMCisKKyAgICAgIC8q IFNvbGFyaXMgMTAgKG5ld2VyIHZlcnNpb24pLCB3aGljaCBoYXMgYWRkaXRpb25hbCBBUEkg ZGVjbGFyZWQgaW4KKyAgICAgICAgIDxzeXMvYWNsLmg+IChhY2xfdCkgYW5kIGltcGxlbWVu dGVkIGluIGxpYnNlYyAoYWNsX3NldCwgYWNsX3RyaXZpYWwsCisgICAgICAgICBhY2xfZnJv bXRleHQsIC4uLikuICAqLworICAgICAgcmV0dXJuIGFjbF90cml2aWFsIChuYW1lKTsKKwor IyAgZWxzZSAvKiBTb2xhcmlzLCBDeWd3aW4sIGdlbmVyYWwgY2FzZSAqLworCisgICAgICAv KiBTb2xhcmlzIDIuNSB0aHJvdWdoIFNvbGFyaXMgMTAsIEN5Z3dpbiwgYW5kIGNvbnRlbXBv cmFuZW91cyB2ZXJzaW9ucworICAgICAgICAgb2YgVW5peHdhcmUuICBUaGUgYWNsKCkgY2Fs bCByZXR1cm5zIHRoZSBhY2Nlc3MgYW5kIGRlZmF1bHQgQUNMIGJvdGgKKyAgICAgICAgIGF0 IG9uY2UuICAqLworICAgICAgeworICAgICAgICAvKiBJbml0aWFsbHksIHRyeSB0byByZWFk IHRoZSBlbnRyaWVzIGludG8gYSBzdGFjay1hbGxvY2F0ZWQgYnVmZmVyLgorICAgICAgICAg ICBVc2UgbWFsbG9jIGlmIGl0IGRvZXMgbm90IGZpdC4gICovCisgICAgICAgIGVudW0KKyAg ICAgICAgICB7CisgICAgICAgICAgICBhbGxvY19pbml0ID0gNDAwMCAvIHNpemVvZiAoYWNs ZW50X3QpLCAvKiA+PSAzICovCisgICAgICAgICAgICBhbGxvY19tYXggPSBNSU4gKElOVF9N QVgsIFNJWkVfTUFYIC8gc2l6ZW9mIChhY2xlbnRfdCkpCisgICAgICAgICAgfTsKKyAgICAg ICAgYWNsZW50X3QgYnVmW2FsbG9jX2luaXRdOworICAgICAgICBzaXplX3QgYWxsb2MgPSBh bGxvY19pbml0OworICAgICAgICBhY2xlbnRfdCAqZW50cmllcyA9IGJ1ZjsKKyAgICAgICAg YWNsZW50X3QgKm1hbGxvY2VkID0gTlVMTDsKKyAgICAgICAgaW50IGNvdW50OworCisgICAg ICAgIGZvciAoOzspCisgICAgICAgICAgeworICAgICAgICAgICAgY291bnQgPSBhY2wgKG5h bWUsIEdFVEFDTCwgYWxsb2MsIGVudHJpZXMpOworICAgICAgICAgICAgaWYgKGNvdW50IDwg MCAmJiBlcnJubyA9PSBFTk9TUEMpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICAvKiBJbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyLiAgKi8KKyAgICAgICAgICAg ICAgICBmcmVlIChtYWxsb2NlZCk7CisgICAgICAgICAgICAgICAgaWYgKGFsbG9jID4gYWxs b2NfbWF4IC8gMikKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg ZXJybm8gPSBFTk9NRU07CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhbGxvYyA9IDIgKiBhbGxvYzsgLyog PD0gYWxsb2NfbWF4ICovCisgICAgICAgICAgICAgICAgZW50cmllcyA9IG1hbGxvY2VkID0K KyAgICAgICAgICAgICAgICAgIChhY2xlbnRfdCAqKSBtYWxsb2MgKGFsbG9jICogc2l6ZW9m IChhY2xlbnRfdCkpOworICAgICAgICAgICAgICAgIGlmIChlbnRyaWVzID09IE5VTEwpCisg ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGVycm5vID0gRU5PTUVN OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAg ICAgICB7CisgICAgICAgICAgICBpZiAoZXJybm8gPT0gRU5PU1lTIHx8IGVycm5vID09IEVO T1RTVVApCisgICAgICAgICAgICAgIDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgIGludCBzYXZlZF9lcnJubyA9IGVycm5vOworICAgICAg ICAgICAgICAgIGZyZWUgKG1hbGxvY2VkKTsKKyAgICAgICAgICAgICAgICBlcnJubyA9IHNh dmVkX2Vycm5vOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAg fQorICAgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY291bnQgPT0gMCkKKyAgICAgICAg ICA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiBEb24ndCB1 c2UgTUlOX0FDTF9FTlRSSUVTOiAgSXQncyBzZXQgdG8gNCBvbiBDeWd3aW4sIGJ1dCBDeWd3 aW4KKyAgICAgICAgICAgICAgIHJldHVybnMgb25seSAzIGVudHJpZXMgZm9yIGZpbGVzIHdp dGggbm8gQUNMLiAgQnV0IHRoaXMgaXMgc2FmZToKKyAgICAgICAgICAgICAgIElmIHRoZXJl IGFyZSBtb3JlIHRoYW4gNCBlbnRyaWVzLCB0aGVyZSBjYW5ub3QgYmUgb25seSB0aGUKKyAg ICAgICAgICAgICAgICJ1c2VyOjoiLCAiZ3JvdXA6OiIsICJvdGhlcjoiLCBhbmQgIm1hc2s6 IiBlbnRyaWVzLiAgKi8KKyAgICAgICAgICAgIGlmIChjb3VudCA+IDQpCisgICAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgICBmcmVlIChtYWxsb2NlZCk7CisgICAgICAgICAgICAg ICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGFjbF9u b250cml2aWFsIChjb3VudCwgZW50cmllcykpCisgICAgICAgICAgICAgIHsKKyAgICAgICAg ICAgICAgICBmcmVlIChtYWxsb2NlZCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7Cisg ICAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIGZyZWUgKG1hbGxvY2VkKTsK KyAgICAgIH0KKworIyAgIGlmZGVmIEFDRV9HRVRBQ0wKKyAgICAgIC8qIFNvbGFyaXMgYWxz byBoYXMgYSBkaWZmZXJlbnQgdmFyaWFudCBvZiBBQ0xzLCB1c2VkIGluIFpGUyBhbmQgTkZT djQKKyAgICAgICAgIGZpbGUgc3lzdGVtcyAod2hlcmVhcyB0aGUgb3RoZXIgb25lcyBhcmUg dXNlZCBpbiBVRlMgZmlsZSBzeXN0ZW1zKS4gICovCisgICAgICB7CisgICAgICAgIC8qIElu aXRpYWxseSwgdHJ5IHRvIHJlYWQgdGhlIGVudHJpZXMgaW50byBhIHN0YWNrLWFsbG9jYXRl ZCBidWZmZXIuCisgICAgICAgICAgIFVzZSBtYWxsb2MgaWYgaXQgZG9lcyBub3QgZml0LiAg Ki8KKyAgICAgICAgZW51bQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGFsbG9jX2luaXQg PSA0MDAwIC8gc2l6ZW9mIChhY2VfdCksIC8qID49IDMgKi8KKyAgICAgICAgICAgIGFsbG9j X21heCA9IE1JTiAoSU5UX01BWCwgU0laRV9NQVggLyBzaXplb2YgKGFjZV90KSkKKyAgICAg ICAgICB9OworICAgICAgICBhY2VfdCBidWZbYWxsb2NfaW5pdF07CisgICAgICAgIHNpemVf dCBhbGxvYyA9IGFsbG9jX2luaXQ7CisgICAgICAgIGFjZV90ICplbnRyaWVzID0gYnVmOwor ICAgICAgICBhY2VfdCAqbWFsbG9jZWQgPSBOVUxMOworICAgICAgICBpbnQgY291bnQ7CisK KyAgICAgICAgZm9yICg7OykKKyAgICAgICAgICB7CisgICAgICAgICAgICBjb3VudCA9IGFj bCAobmFtZSwgQUNFX0dFVEFDTCwgYWxsb2MsIGVudHJpZXMpOworICAgICAgICAgICAgaWYg KGNvdW50IDwgMCAmJiBlcnJubyA9PSBFTk9TUEMpCisgICAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgICAvKiBJbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyLiAgKi8KKyAg ICAgICAgICAgICAgICBmcmVlIChtYWxsb2NlZCk7CisgICAgICAgICAgICAgICAgaWYgKGFs bG9jID4gYWxsb2NfbWF4IC8gMikKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAt MTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhbGxvYyA9IDIgKiBh bGxvYzsgLyogPD0gYWxsb2NfbWF4ICovCisgICAgICAgICAgICAgICAgZW50cmllcyA9IG1h bGxvY2VkID0gKGFjZV90ICopIG1hbGxvYyAoYWxsb2MgKiBzaXplb2YgKGFjZV90KSk7Cisg ICAgICAgICAgICAgICAgaWYgKGVudHJpZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgICAgICAgICAg ICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgfQorICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICAgIHsKKyAgICAgICAg ICAgIGlmIChlcnJubyA9PSBFTk9TWVMgfHwgZXJybm8gPT0gRUlOVkFMKQorICAgICAgICAg ICAgICA7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgICBpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKKyAgICAgICAgICAgICAgICBmcmVlICht YWxsb2NlZCk7CisgICAgICAgICAgICAgICAgZXJybm8gPSBzYXZlZF9lcnJubzsKKyAgICAg ICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9Cisg ICAgICAgIGVsc2UgaWYgKGNvdW50ID09IDApCisgICAgICAgICAgOworICAgICAgICBlbHNl CisgICAgICAgICAgeworICAgICAgICAgICAgLyogSW4gdGhlIG9sZCAob3JpZ2luYWwgU29s YXJpcyAxMCkgY29udmVudGlvbjoKKyAgICAgICAgICAgICAgIElmIHRoZXJlIGFyZSBtb3Jl IHRoYW4gMyBlbnRyaWVzLCB0aGVyZSBjYW5ub3QgYmUgb25seSB0aGUKKyAgICAgICAgICAg ICAgIEFDRV9PV05FUiwgQUNFX0dST1VQLCBBQ0VfT1RIRVIgZW50cmllcy4KKyAgICAgICAg ICAgICAgIEluIHRoZSBuZXdlciBTb2xhcmlzIDEwIGFuZCBTb2xhcmlzIDExIGNvbnZlbnRp b246CisgICAgICAgICAgICAgICBJZiB0aGVyZSBhcmUgbW9yZSB0aGFuIDYgZW50cmllcywg dGhlcmUgY2Fubm90IGJlIG9ubHkgdGhlCisgICAgICAgICAgICAgICBBQ0VfT1dORVIsIEFD RV9HUk9VUCwgQUNFX0VWRVJZT05FIGVudHJpZXMsIGVhY2ggb25jZSB3aXRoCisgICAgICAg ICAgICAgICBORVdfQUNFX0FDQ0VTU19BTExPV0VEX0FDRV9UWVBFIGFuZCBvbmNlIHdpdGgK KyAgICAgICAgICAgICAgIE5FV19BQ0VfQUNDRVNTX0RFTklFRF9BQ0VfVFlQRS4gICovCisg ICAgICAgICAgICBpZiAoY291bnQgPiA2KQorICAgICAgICAgICAgICB7CisgICAgICAgICAg ICAgICAgZnJlZSAobWFsbG9jZWQpOworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAg ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChhY2xfYWNlX25vbnRyaXZpYWwgKGNv dW50LCBlbnRyaWVzKSkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZyZWUg KG1hbGxvY2VkKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAg fQorICAgICAgICAgIH0KKyAgICAgICAgZnJlZSAobWFsbG9jZWQpOworICAgICAgfQorIyAg IGVuZGlmCisKKyAgICAgIHJldHVybiAwOworIyAgZW5kaWYKKworIyBlbGlmIEhBVkVfR0VU QUNMIC8qIEhQLVVYICovCisKKyAgICAgIHsKKyAgICAgICAgc3RydWN0IGFjbF9lbnRyeSBl bnRyaWVzW05BQ0xFTlRSSUVTXTsKKyAgICAgICAgaW50IGNvdW50OworCisgICAgICAgIGNv dW50ID0gZ2V0YWNsIChuYW1lLCBOQUNMRU5UUklFUywgZW50cmllcyk7CisKKyAgICAgICAg aWYgKGNvdW50IDwgMCkKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiBFTk9TWVMgaXMg c2VlbiBvbiBuZXdlciBIUC1VWCB2ZXJzaW9ucy4KKyAgICAgICAgICAgICAgIEVPUE5PVFNV UFAgaXMgdHlwaWNhbGx5IHNlZW4gb24gTkZTIG1vdW50cy4KKyAgICAgICAgICAgICAgIEVO T1RTVVAgd2FzIHNlZW4gb24gUXVhbnR1bSBTdG9yTmV4dCBmaWxlIHN5c3RlbXMgKGN2ZnMp LiAgKi8KKyAgICAgICAgICAgIGlmIChlcnJubyA9PSBFTk9TWVMgfHwgZXJybm8gPT0gRU9Q Tk9UU1VQUCB8fCBlcnJubyA9PSBFTk9UU1VQKQorICAgICAgICAgICAgICA7CisgICAgICAg ICAgICBlbHNlCisgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICB9CisgICAg ICAgIGVsc2UgaWYgKGNvdW50ID09IDApCisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg IGVsc2UgLyogY291bnQgPiAwICovCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKGNv dW50ID4gTkFDTEVOVFJJRVMpCisgICAgICAgICAgICAgIC8qIElmIE5BQ0xFTlRSSUVTIGNh bm5vdCBiZSB0cnVzdGVkLCB1c2UgZHluYW1pYyBtZW1vcnkKKyAgICAgICAgICAgICAgICAg YWxsb2NhdGlvbi4gICovCisgICAgICAgICAgICAgIGFib3J0ICgpOworCisgICAgICAgICAg ICAvKiBJZiB0aGVyZSBhcmUgbW9yZSB0aGFuIDMgZW50cmllcywgdGhlcmUgY2Fubm90IGJl IG9ubHkgdGhlCisgICAgICAgICAgICAgICAodWlkLCUpLCAoJSxnaWQpLCAoJSwlKSBlbnRy aWVzLiAgKi8KKyAgICAgICAgICAgIGlmIChjb3VudCA+IDMpCisgICAgICAgICAgICAgIHJl dHVybiAxOworCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHN0cnVjdCBzdGF0IHN0 YXRidWY7CisKKyAgICAgICAgICAgICAgaWYgKHN0YXQgKG5hbWUsICZzdGF0YnVmKSA8IDAp CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgICAgICAgIHJldHVybiBh Y2xfbm9udHJpdmlhbCAoY291bnQsIGVudHJpZXMsICZzdGF0YnVmKTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICB9CisgICAgICB9CisKKyMgIGlmIEhBVkVfQUNMVl9IIC8qIEhQLVVY ID49IDExLjExICovCisKKyAgICAgIHsKKyAgICAgICAgc3RydWN0IGFjbCBlbnRyaWVzW05B Q0xWRU5UUklFU107CisgICAgICAgIGludCBjb3VudDsKKworICAgICAgICBjb3VudCA9IGFj bCAoKGNoYXIgKikgbmFtZSwgQUNMX0dFVCwgTkFDTFZFTlRSSUVTLCBlbnRyaWVzKTsKKwor ICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEVP UE5PVFNVUFAgaXMgc2VlbiBvbiBORlMgaW4gSFAtVVggMTEuMTEsIDExLjIzLgorICAgICAg ICAgICAgICAgRUlOVkFMIGlzIHNlZW4gb24gTkZTIGluIEhQLVVYIDExLjMxLiAgKi8KKyAg ICAgICAgICAgIGlmIChlcnJubyA9PSBFTk9TWVMgfHwgZXJybm8gPT0gRU9QTk9UU1VQUCB8 fCBlcnJubyA9PSBFSU5WQUwpCisgICAgICAgICAgICAgIDsKKyAgICAgICAgICAgIGVsc2UK KyAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgIH0KKyAgICAgICAgZWxzZSBp ZiAoY291bnQgPT0gMCkKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZWxzZSAvKiBj b3VudCA+IDAgKi8KKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoY291bnQgPiBOQUNM VkVOVFJJRVMpCisgICAgICAgICAgICAgIC8qIElmIE5BQ0xWRU5UUklFUyBjYW5ub3QgYmUg dHJ1c3RlZCwgdXNlIGR5bmFtaWMgbWVtb3J5CisgICAgICAgICAgICAgICAgIGFsbG9jYXRp b24uICAqLworICAgICAgICAgICAgICBhYm9ydCAoKTsKKworICAgICAgICAgICAgLyogSWYg dGhlcmUgYXJlIG1vcmUgdGhhbiA0IGVudHJpZXMsIHRoZXJlIGNhbm5vdCBiZSBvbmx5IHRo ZQorICAgICAgICAgICAgICAgZm91ciBiYXNlIEFDTCBlbnRyaWVzLiAgKi8KKyAgICAgICAg ICAgIGlmIChjb3VudCA+IDQpCisgICAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAg ICAgICByZXR1cm4gYWNsdl9ub250cml2aWFsIChjb3VudCwgZW50cmllcyk7CisgICAgICAg ICAgfQorICAgICAgfQorCisjICBlbmRpZgorCisjIGVsaWYgSEFWRV9BQ0xYX0dFVCAmJiBk ZWZpbmVkIEFDTF9BSVhfV0lQIC8qIEFJWCAqLworCisgICAgICBhY2xfdHlwZV90IHR5cGU7 CisgICAgICBjaGFyIGFjbGJ1ZlsxMDI0XTsKKyAgICAgIHZvaWQgKmFjbCA9IGFjbGJ1ZjsK KyAgICAgIHNpemVfdCBhY2xzaXplID0gc2l6ZW9mIChhY2xidWYpOworICAgICAgbW9kZV90 IG1vZGU7CisKKyAgICAgIGZvciAoOzspCisgICAgICAgIHsKKyAgICAgICAgICAvKiBUaGUg ZG9jcyBzYXkgdGhhdCB0eXBlIGJlaW5nIDAgaXMgZXF1aXZhbGVudCB0byBBQ0xfQU5ZLCBi dXQgaXQKKyAgICAgICAgICAgICBpcyBub3QgdHJ1ZSwgaW4gQUlYIDUuMy4gICovCisgICAg ICAgICAgdHlwZS51NjQgPSBBQ0xfQU5ZOworICAgICAgICAgIGlmIChhY2x4X2dldCAobmFt ZSwgMCwgJnR5cGUsIGFjbGJ1ZiwgJmFjbHNpemUsICZtb2RlKSA+PSAwKQorICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgaWYgKGVycm5vID09IEVOT1NZUykKKyAgICAgICAgICAg IHJldHVybiAwOworICAgICAgICAgIGlmIChlcnJubyAhPSBFTk9TUEMpCisgICAgICAgICAg ICB7CisgICAgICAgICAgICAgIGlmIChhY2wgIT0gYWNsYnVmKQorICAgICAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgICAgIGludCBzYXZlZF9lcnJubyA9IGVycm5vOworICAgICAg ICAgICAgICAgICAgZnJlZSAoYWNsKTsKKyAgICAgICAgICAgICAgICAgIGVycm5vID0gc2F2 ZWRfZXJybm87CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICByZXR1cm4gLTE7 CisgICAgICAgICAgICB9CisgICAgICAgICAgYWNsc2l6ZSA9IDIgKiBhY2xzaXplOworICAg ICAgICAgIGlmIChhY2wgIT0gYWNsYnVmKQorICAgICAgICAgICAgZnJlZSAoYWNsKTsKKyAg ICAgICAgICBhY2wgPSBtYWxsb2MgKGFjbHNpemUpOworICAgICAgICAgIGlmIChhY2wgPT0g TlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZXJybm8gPSBFTk9NRU07Cisg ICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg ICAgICBpZiAodHlwZS51NjQgPT0gQUNMX0FJWEMpCisgICAgICAgIHsKKyAgICAgICAgICBp bnQgcmVzdWx0ID0gYWNsX25vbnRyaXZpYWwgKChzdHJ1Y3QgYWNsICopIGFjbCk7CisgICAg ICAgICAgaWYgKGFjbCAhPSBhY2xidWYpCisgICAgICAgICAgICBmcmVlIChhY2wpOworICAg ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKHR5cGUu dTY0ID09IEFDTF9ORlM0KQorICAgICAgICB7CisgICAgICAgICAgaW50IHJlc3VsdCA9IGFj bF9uZnM0X25vbnRyaXZpYWwgKChuZnM0X2FjbF9pbnRfdCAqKSBhY2wpOworICAgICAgICAg IGlmIChhY2wgIT0gYWNsYnVmKQorICAgICAgICAgICAgZnJlZSAoYWNsKTsKKyAgICAgICAg ICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAg ICAgICAgICAvKiBBIG5ld2VyIHR5cGUgb2YgQUNMIGhhcyBiZWVuIGludHJvZHVjZWQgaW4g dGhlIHN5c3RlbS4KKyAgICAgICAgICAgICBXZSBzaG91bGQgYmV0dGVyIHN1cHBvcnQgaXQu ICAqLworICAgICAgICAgIGlmIChhY2wgIT0gYWNsYnVmKQorICAgICAgICAgICAgZnJlZSAo YWNsKTsKKyAgICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgICByZXR1cm4gLTE7 CisgICAgICAgIH0KKworIyBlbGlmIEhBVkVfU1RBVEFDTCAvKiBvbGRlciBBSVggKi8KKwor ICAgICAgdW5pb24geyBzdHJ1Y3QgYWNsIGE7IGNoYXIgcm9vbVs0MDk2XTsgfSB1OworCisg ICAgICBpZiAoc3RhdGFjbCAobmFtZSwgU1RYX05PUk1BTCwgJnUuYSwgc2l6ZW9mICh1KSkg PCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgIHJldHVybiBhY2xfbm9udHJpdmlh bCAoJnUuYSk7CisKKyMgZWxpZiBIQVZFX0FDTFNPUlQgLyogTm9uU3RvcCBLZXJuZWwgKi8K KworICAgICAgeworICAgICAgICBzdHJ1Y3QgYWNsIGVudHJpZXNbTkFDTEVOVFJJRVNdOwor ICAgICAgICBpbnQgY291bnQ7CisKKyAgICAgICAgY291bnQgPSBhY2wgKChjaGFyICopIG5h bWUsIEFDTF9HRVQsIE5BQ0xFTlRSSUVTLCBlbnRyaWVzKTsKKworICAgICAgICBpZiAoY291 bnQgPCAwKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChlcnJubyA9PSBFTk9TWVMg fHwgZXJybm8gPT0gRU5PVFNVUCkKKyAgICAgICAgICAgICAgOworICAgICAgICAgICAgZWxz ZQorICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgfQorICAgICAgICBlbHNl IGlmIChjb3VudCA9PSAwKQorICAgICAgICAgIHJldHVybiAwOworICAgICAgICBlbHNlIC8q IGNvdW50ID4gMCAqLworICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb3VudCA+IE5B Q0xFTlRSSUVTKQorICAgICAgICAgICAgICAvKiBJZiBOQUNMRU5UUklFUyBjYW5ub3QgYmUg dHJ1c3RlZCwgdXNlIGR5bmFtaWMgbWVtb3J5CisgICAgICAgICAgICAgICAgIGFsbG9jYXRp b24uICAqLworICAgICAgICAgICAgICBhYm9ydCAoKTsKKworICAgICAgICAgICAgLyogSWYg dGhlcmUgYXJlIG1vcmUgdGhhbiA0IGVudHJpZXMsIHRoZXJlIGNhbm5vdCBiZSBvbmx5IHRo ZQorICAgICAgICAgICAgICAgZm91ciBiYXNlIEFDTCBlbnRyaWVzLiAgKi8KKyAgICAgICAg ICAgIGlmIChjb3VudCA+IDQpCisgICAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAg ICAgICByZXR1cm4gYWNsX25vbnRyaXZpYWwgKGNvdW50LCBlbnRyaWVzKTsKKyAgICAgICAg ICB9CisgICAgICB9CisKKyMgZW5kaWYKKyAgICB9CisjZW5kaWYKKworICByZXR1cm4gMDsK K30KCj09PSBtb2RpZmllZCBmaWxlICdsaWIvZ251bGliLm1rJwotLS0gbGliL2dudWxpYi5t awkyMDEzLTAzLTEzIDE4OjQyOjIyICswMDAwCisrKyBsaWIvZ251bGliLm1rCTIwMTMtMDQt MjkgMDY6MDc6NDIgKzAwMDAKQEAgLTIxLDcgKzIxLDcgQEAKICMgdGhlIHNhbWUgZGlzdHJp YnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KICMKICMgR2VuZXJh dGVkIGJ5IGdudWxpYi10b29sLgotIyBSZXByb2R1Y2UgYnk6IGdudWxpYi10b29sIC0taW1w b3J0IC0tZGlyPS4gLS1saWI9bGliZ251IC0tc291cmNlLWJhc2U9bGliIC0tbTQtYmFzZT1t NCAtLWRvYy1iYXNlPWRvYyAtLXRlc3RzLWJhc2U9dGVzdHMgLS1hdXgtZGlyPWJ1aWxkLWF1 eCAtLWF2b2lkPWR1cCAtLWF2b2lkPWVycm5vIC0tYXZvaWQ9ZmNoZGlyIC0tYXZvaWQ9ZmNu dGwgLS1hdm9pZD1mc3RhdCAtLWF2b2lkPW1hbGxvYy1wb3NpeCAtLWF2b2lkPW1zdmMtaW52 YWwgLS1hdm9pZD1tc3ZjLW5vdGhyb3cgLS1hdm9pZD1vcGVuIC0tYXZvaWQ9b3BlbmF0LWRp ZSAtLWF2b2lkPW9wZW5kaXIgLS1hdm9pZD1yYWlzZSAtLWF2b2lkPXNhdmUtY3dkIC0tYXZv aWQ9c2VsZWN0IC0tYXZvaWQ9c2lncHJvY21hc2sgLS1hdm9pZD1zeXNfdHlwZXMgLS1hdm9p ZD10aHJlYWRsaWIgLS1tYWtlZmlsZS1uYW1lPWdudWxpYi5tayAtLWNvbmRpdGlvbmFsLWRl cGVuZGVuY2llcyAtLW5vLWxpYnRvb2wgLS1tYWNyby1wcmVmaXg9Z2wgLS1uby12Yy1maWxl cyBhbGxvY2Etb3B0IGMtY3R5cGUgYy1zdHJjYXNlIGNhcmVhZGxpbmthdCBjbG9zZS1zdHJl YW0gY3J5cHRvL21kNSBjcnlwdG8vc2hhMSBjcnlwdG8vc2hhMjU2IGNyeXB0by9zaGE1MTIg ZHRvYXN0ciBkdG90aW1lc3BlYyBkdXAyIGVudmlyb24gZXhlY2luZm8gZmFjY2Vzc2F0IGZj bnRsLWggZmRhdGFzeW5jIGZkb3BlbmRpciBmaWxlbW9kZSBmc3RhdGF0IGZzeW5jIGdldGxv YWRhdmcgZ2V0b3B0LWdudSBnZXR0aW1lIGdldHRpbWVvZmRheSBpZ25vcmUtdmFsdWUgaW50 cHJvcHMgbGFyZ2VmaWxlIGxzdGF0IG1hbnl3YXJuaW5ncyBtZW1yY2hyIG1rdGltZSBwc2Vs ZWN0IHB0aHJlYWRfc2lnbWFzayBwdXRlbnYgcmVhZGxpbmsgcmVhZGxpbmthdCBzaWcyc3Ry IHNvY2tsZW4gc3RhdC10aW1lIHN0ZGFsaWduIHN0ZGFyZyBzdGRib29sIHN0ZGlvIHN0cmZ0 aW1lIHN0cnRvaW1heCBzdHJ0b3VtYXggc3ltbGluayBzeXNfc3RhdCBzeXNfdGltZSB0aW1l IHRpbWVyLXRpbWUgdGltZXNwZWMtYWRkIHRpbWVzcGVjLXN1YiB1bnNldGVudiB1dGltZW5z IHdhcm5pbmdzCisjIFJlcHJvZHVjZSBieTogZ251bGliLXRvb2wgLS1pbXBvcnQgLS1kaXI9 LiAtLWxpYj1saWJnbnUgLS1zb3VyY2UtYmFzZT1saWIgLS1tNC1iYXNlPW00IC0tZG9jLWJh c2U9ZG9jIC0tdGVzdHMtYmFzZT10ZXN0cyAtLWF1eC1kaXI9YnVpbGQtYXV4IC0tYXZvaWQ9 ZHVwIC0tYXZvaWQ9ZmNoZGlyIC0tYXZvaWQ9ZmNudGwgLS1hdm9pZD1mc3RhdCAtLWF2b2lk PW1hbGxvYy1wb3NpeCAtLWF2b2lkPW1zdmMtaW52YWwgLS1hdm9pZD1tc3ZjLW5vdGhyb3cg LS1hdm9pZD1vcGVuIC0tYXZvaWQ9b3BlbmF0LWRpZSAtLWF2b2lkPW9wZW5kaXIgLS1hdm9p ZD1yYWlzZSAtLWF2b2lkPXNhdmUtY3dkIC0tYXZvaWQ9c2VsZWN0IC0tYXZvaWQ9c2lncHJv Y21hc2sgLS1hdm9pZD1zeXNfdHlwZXMgLS1hdm9pZD10aHJlYWRsaWIgLS1tYWtlZmlsZS1u YW1lPWdudWxpYi5tayAtLWNvbmRpdGlvbmFsLWRlcGVuZGVuY2llcyAtLW5vLWxpYnRvb2wg LS1tYWNyby1wcmVmaXg9Z2wgLS1uby12Yy1maWxlcyBhbGxvY2Etb3B0IGMtY3R5cGUgYy1z dHJjYXNlIGNhcmVhZGxpbmthdCBjbG9zZS1zdHJlYW0gY3J5cHRvL21kNSBjcnlwdG8vc2hh MSBjcnlwdG8vc2hhMjU2IGNyeXB0by9zaGE1MTIgZHRvYXN0ciBkdG90aW1lc3BlYyBkdXAy IGVudmlyb24gZXhlY2luZm8gZmFjY2Vzc2F0IGZjbnRsLWggZmRhdGFzeW5jIGZkb3BlbmRp ciBmaWxlbW9kZSBmc3RhdGF0IGZzeW5jIGdldGxvYWRhdmcgZ2V0b3B0LWdudSBnZXR0aW1l IGdldHRpbWVvZmRheSBpZ25vcmUtdmFsdWUgaW50cHJvcHMgbGFyZ2VmaWxlIGxzdGF0IG1h bnl3YXJuaW5ncyBtZW1yY2hyIG1rdGltZSBwc2VsZWN0IHB0aHJlYWRfc2lnbWFzayBwdXRl bnYgcWFjbCByZWFkbGluayByZWFkbGlua2F0IHNpZzJzdHIgc29ja2xlbiBzdGF0LXRpbWUg c3RkYWxpZ24gc3RkYXJnIHN0ZGJvb2wgc3RkaW8gc3RyZnRpbWUgc3RydG9pbWF4IHN0cnRv dW1heCBzeW1saW5rIHN5c19zdGF0IHN5c190aW1lIHRpbWUgdGltZXItdGltZSB0aW1lc3Bl Yy1hZGQgdGltZXNwZWMtc3ViIHVuc2V0ZW52IHV0aW1lbnMgd2FybmluZ3MKIAogCiBNT1NU TFlDTEVBTkZJTEVTICs9IGNvcmUgKi5zdGFja2R1bXAKQEAgLTIxNyw2ICsyMTcsNDAgQEAK IAogIyMgZW5kICAgZ251bGliIG1vZHVsZSBkdXAyCiAKKyMjIGJlZ2luIGdudWxpYiBtb2R1 bGUgZXJybm8KKworQlVJTFRfU09VUkNFUyArPSAkKEVSUk5PX0gpCisKKyMgV2UgbmVlZCB0 aGUgZm9sbG93aW5nIGluIG9yZGVyIHRvIGNyZWF0ZSA8ZXJybm8uaD4gd2hlbiB0aGUgc3lz dGVtCisjIGRvZXNuJ3QgaGF2ZSBvbmUgdGhhdCBpcyBQT1NJWCBjb21wbGlhbnQuCitpZiBH TF9HRU5FUkFURV9FUlJOT19ICitlcnJuby5oOiBlcnJuby5pbi5oICQodG9wX2J1aWxkZGly KS9jb25maWcuc3RhdHVzCisJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKwl7IGVj aG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nICYmIFwK KwkgIHNlZCAtZSAnc3xAJydHVUFSRF9QUkVGSVgnJ0B8R0x8ZycgXAorCSAgICAgIC1lICdz fEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorCSAgICAgIC1lICdz fEAnJ1BSQUdNQV9TWVNURU1fSEVBREVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8Zycg XAorCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9DT0xVTU5TJydAfEBQUkFHTUFfQ09MVU1OU0B8 ZycgXAorCSAgICAgIC1lICdzfEAnJ05FWFRfRVJSTk9fSCcnQHwkKE5FWFRfRVJSTk9fSCl8 ZycgXAorCSAgICAgIC1lICdzfEAnJ0VNVUxUSUhPUF9ISURERU4nJ0B8JChFTVVMVElIT1Bf SElEREVOKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnRU1VTFRJSE9QX1ZBTFVFJydAfCQoRU1V TFRJSE9QX1ZBTFVFKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnRU5PTElOS19ISURERU4nJ0B8 JChFTk9MSU5LX0hJRERFTil8ZycgXAorCSAgICAgIC1lICdzfEAnJ0VOT0xJTktfVkFMVUUn J0B8JChFTk9MSU5LX1ZBTFVFKXxnJyBcCisJICAgICAgLWUgJ3N8QCcnRU9WRVJGTE9XX0hJ RERFTicnQHwkKEVPVkVSRkxPV19ISURERU4pfGcnIFwKKwkgICAgICAtZSAnc3xAJydFT1ZF UkZMT1dfVkFMVUUnJ0B8JChFT1ZFUkZMT1dfVkFMVUUpfGcnIFwKKwkgICAgICA8ICQoc3Jj ZGlyKS9lcnJuby5pbi5oOyBcCisJfSA+ICRALXQgJiYgXAorCW12ICRALXQgJEAKK2Vsc2UK K2Vycm5vLmg6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJcm0gLWYgJEAKK2Vu ZGlmCitNT1NUTFlDTEVBTkZJTEVTICs9IGVycm5vLmggZXJybm8uaC10CisKK0VYVFJBX0RJ U1QgKz0gZXJybm8uaW4uaAorCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGVycm5vCisKICMj IGJlZ2luIGdudWxpYiBtb2R1bGUgZXVpZGFjY2VzcwogCiBpZiBnbF9HTlVMSUJfRU5BQkxF RF9ldWlkYWNjZXNzCkBAIC01NjEsNiArNTk1LDE2IEBACiAKICMjIGVuZCAgIGdudWxpYiBt b2R1bGUgcHV0ZW52CiAKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgcWFjbAorCitsaWJnbnVf YV9TT1VSQ0VTICs9IGFjbC1lcnJuby12YWxpZC5jIGZpbGUtaGFzLWFjbC5jIHFjb3B5LWFj bC5jIHFzZXQtYWNsLmMKKworRVhUUkFfRElTVCArPSBhY2wtaW50ZXJuYWwuaCBhY2wuaCBh Y2xfZW50cmllcy5jCisKK0VYVFJBX2xpYmdudV9hX1NPVVJDRVMgKz0gYWNsX2VudHJpZXMu YworCisjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHFhY2wKKwogIyMgYmVnaW4gZ251bGliIG1v ZHVsZSByZWFkbGluawogCiAKCj09PSBtb2RpZmllZCBmaWxlICdsaWIvbWFrZWZpbGUudzMy LWluJwotLS0gbGliL21ha2VmaWxlLnczMi1pbgkyMDEzLTAyLTEyIDAzOjUyOjA0ICswMDAw CisrKyBsaWIvbWFrZWZpbGUudzMyLWluCTIwMTMtMDQtMjkgMDY6MDc6NDIgKzAwMDAKQEAg LTIzLDcgKzIzLDggQEAKIExPQ0FMX0ZMQUdTCT0gLUkuIC1JLi4vbnQvaW5jIC1JLi4vc3Jj CiBMSUJTIAkJPQogCi1HTlVMSUJPQkpTID0gJChCTEQpL2MtY3R5cGUuJChPKSBcCitHTlVM SUJPQkpTID0gJChCTEQpL2FjbC1lcnJuby12YWxpZC4kKE8pIFwKKwkgICAgICQoQkxEKS9j LWN0eXBlLiQoTykgXAogCSAgICAgJChCTEQpL2Mtc3RyY2FzZWNtcC4kKE8pIFwKIAkgICAg ICQoQkxEKS9jLXN0cm5jYXNlY21wLiQoTykgXAogCSAgICAgJChCTEQpL2Nsb3NlLXN0cmVh bS4kKE8pIFwKQEAgLTEwOSw2ICsxMTAsMTIgQEAKIFNUQVRfVElNRV9IICAgID0gJChHTlVf TElCKS9zdGF0LXRpbWUuaCBcCiAJCSAkKE5UX0lOQykvc3lzL3N0YXQuaAogCiskKEJMRCkv YWNsLWVycm5vLXZhbGlkLiQoTykgOiBcCisJJChHTlVfTElCKS9hY2wtZXJybm8tdmFsaWQu YyBcCisJJChDT05GSUdfSCkgXAorCSQoR05VX0xJQikvYWNsLmggXAorCSQoTlRfSU5DKS9z dGRib29sLmgKKwogJChCTEQpL2MtY3R5cGUuJChPKSA6IFwKIAkkKEdOVV9MSUIpL2MtY3R5 cGUuYyBcCiAJJChDT05GSUdfSCkgXAoKPT09IGFkZGVkIGZpbGUgJ2xpYi9xY29weS1hY2wu YycKLS0tIGxpYi9xY29weS1hY2wuYwkxOTcwLTAxLTAxIDAwOjAwOjAwICswMDAwCisrKyBs aWIvcWNvcHktYWNsLmMJMjAxMy0wNC0xNyAwNToyMTozMyArMDAwMApAQCAtMCwwICsxLDU4 MyBAQAorLyogY29weS1hY2wuYyAtIGNvcHkgYWNjZXNzIGNvbnRyb2wgbGlzdCBmcm9tIG9u ZSBmaWxlIHRvIGFub3RoZXIgZmlsZQorCisgICBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMywg MjAwNS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91 ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dy YW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyAg IFdyaXR0ZW4gYnkgUGF1bCBFZ2dlcnQsIEFuZHJlYXMgR3LDvG5iYWNoZXIsIGFuZCBCcnVu byBIYWlibGUuICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNsdWRlICJhY2wu aCIKKworI2luY2x1ZGUgImFjbC1pbnRlcm5hbC5oIgorCisKKy8qIENvcHkgYWNjZXNzIGNv bnRyb2wgbGlzdHMgZnJvbSBvbmUgZmlsZSB0byBhbm90aGVyLiBJZiBTT1VSQ0VfREVTQyBp cworICAgYSB2YWxpZCBmaWxlIGRlc2NyaXB0b3IsIHVzZSBmaWxlIGRlc2NyaXB0b3Igb3Bl cmF0aW9ucywgZWxzZSB1c2UKKyAgIGZpbGVuYW1lIGJhc2VkIG9wZXJhdGlvbnMgb24gU1JD X05BTUUuIExpa2V3aXNlIGZvciBERVNUX0RFU0MgYW5kCisgICBEU1RfTkFNRS4KKyAgIElm IGFjY2VzcyBjb250cm9sIGxpc3RzIGFyZSBub3QgYXZhaWxhYmxlLCBmY2htb2QgdGhlIHRh cmdldCBmaWxlIHRvCisgICBNT0RFLiAgQWxzbyBzZXRzIHRoZSBub24tcGVybWlzc2lvbiBi aXRzIG9mIHRoZSBkZXN0aW5hdGlvbiBmaWxlCisgICAoU19JU1VJRCwgU19JU0dJRCwgU19J U1ZUWCkgdG8gdGhvc2UgZnJvbSBNT0RFIGlmIGFueSBhcmUgc2V0LgorICAgUmV0dXJuIDAg aWYgc3VjY2Vzc2Z1bC4KKyAgIFJldHVybiAtMiBhbmQgc2V0IGVycm5vIGZvciBhbiBlcnJv ciByZWxhdGluZyB0byB0aGUgc291cmNlIGZpbGUuCisgICBSZXR1cm4gLTEgYW5kIHNldCBl cnJubyBmb3IgYW4gZXJyb3IgcmVsYXRpbmcgdG8gdGhlIGRlc3RpbmF0aW9uIGZpbGUuICAq LworCitpbnQKK3Fjb3B5X2FjbCAoY29uc3QgY2hhciAqc3JjX25hbWUsIGludCBzb3VyY2Vf ZGVzYywgY29uc3QgY2hhciAqZHN0X25hbWUsCisgICAgICAgICAgIGludCBkZXN0X2Rlc2Ms IG1vZGVfdCBtb2RlKQoreworI2lmIFVTRV9BQ0wgJiYgSEFWRV9BQ0xfR0VUX0ZJTEUKKyAg LyogUE9TSVggMTAwMy4xZSAoZHJhZnQgMTcgLS0gYWJhbmRvbmVkKSBzcGVjaWZpYyB2ZXJz aW9uLiAgKi8KKyAgLyogTGludXgsIEZyZWVCU0QsIE1hYyBPUyBYLCBJUklYLCBUcnU2NCAq LworIyBpZiAhSEFWRV9BQ0xfVFlQRV9FWFRFTkRFRAorICAvKiBMaW51eCwgRnJlZUJTRCwg SVJJWCwgVHJ1NjQgKi8KKworICBhY2xfdCBhY2w7CisgIGludCByZXQ7CisKKyAgaWYgKEhB VkVfQUNMX0dFVF9GRCAmJiBzb3VyY2VfZGVzYyAhPSAtMSkKKyAgICBhY2wgPSBhY2xfZ2V0 X2ZkIChzb3VyY2VfZGVzYyk7CisgIGVsc2UKKyAgICBhY2wgPSBhY2xfZ2V0X2ZpbGUgKHNy Y19uYW1lLCBBQ0xfVFlQRV9BQ0NFU1MpOworICBpZiAoYWNsID09IE5VTEwpCisgICAgewor ICAgICAgaWYgKCEgYWNsX2Vycm5vX3ZhbGlkIChlcnJubykpCisgICAgICAgIHJldHVybiBx c2V0X2FjbCAoZHN0X25hbWUsIGRlc3RfZGVzYywgbW9kZSk7CisgICAgICBlbHNlCisgICAg ICAgIHJldHVybiAtMjsKKyAgICB9CisKKyAgaWYgKEhBVkVfQUNMX1NFVF9GRCAmJiBkZXN0 X2Rlc2MgIT0gLTEpCisgICAgcmV0ID0gYWNsX3NldF9mZCAoZGVzdF9kZXNjLCBhY2wpOwor ICBlbHNlCisgICAgcmV0ID0gYWNsX3NldF9maWxlIChkc3RfbmFtZSwgQUNMX1RZUEVfQUND RVNTLCBhY2wpOworICBpZiAocmV0ICE9IDApCisgICAgeworICAgICAgaW50IHNhdmVkX2Vy cm5vID0gZXJybm87CisKKyAgICAgIGlmICghIGFjbF9lcnJub192YWxpZCAoZXJybm8pICYm ICFhY2xfYWNjZXNzX25vbnRyaXZpYWwgKGFjbCkpCisgICAgICAgIHsKKyAgICAgICAgICBh Y2xfZnJlZSAoYWNsKTsKKyAgICAgICAgICByZXR1cm4gY2htb2Rfb3JfZmNobW9kIChkc3Rf bmFtZSwgZGVzdF9kZXNjLCBtb2RlKTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAg ICB7CisgICAgICAgICAgYWNsX2ZyZWUgKGFjbCk7CisgICAgICAgICAgY2htb2Rfb3JfZmNo bW9kIChkc3RfbmFtZSwgZGVzdF9kZXNjLCBtb2RlKTsKKyAgICAgICAgICBlcnJubyA9IHNh dmVkX2Vycm5vOworICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKyAg ZWxzZQorICAgIGFjbF9mcmVlIChhY2wpOworCisgIGlmICghTU9ERV9JTlNJREVfQUNMIHx8 IChtb2RlICYgKFNfSVNVSUQgfCBTX0lTR0lEIHwgU19JU1ZUWCkpKQorICAgIHsKKyAgICAg IC8qIFdlIGRpZCBub3QgY2FsbCBjaG1vZCBzbyBmYXIsIGFuZCBlaXRoZXIgdGhlIG1vZGUg YW5kIHRoZSBBQ0wgYXJlCisgICAgICAgICBzZXBhcmF0ZSBvciBzcGVjaWFsIGJpdHMgYXJl IHRvIGJlIHNldCB3aGljaCBkb24ndCBmaXQgaW50byBBQ0xzLiAgKi8KKworICAgICAgaWYg KGNobW9kX29yX2ZjaG1vZCAoZHN0X25hbWUsIGRlc3RfZGVzYywgbW9kZSkgIT0gMCkKKyAg ICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICBpZiAoU19JU0RJUiAobW9kZSkpCisgICAg eworICAgICAgYWNsID0gYWNsX2dldF9maWxlIChzcmNfbmFtZSwgQUNMX1RZUEVfREVGQVVM VCk7CisgICAgICBpZiAoYWNsID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMjsKKworICAg ICAgaWYgKGFjbF9zZXRfZmlsZSAoZHN0X25hbWUsIEFDTF9UWVBFX0RFRkFVTFQsIGFjbCkp CisgICAgICAgIHsKKyAgICAgICAgICBpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKKworICAg ICAgICAgIGFjbF9mcmVlIChhY2wpOworICAgICAgICAgIGVycm5vID0gc2F2ZWRfZXJybm87 CisgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAg IGFjbF9mcmVlIChhY2wpOworICAgIH0KKyAgcmV0dXJuIDA7CisKKyMgZWxzZSAvKiBIQVZF X0FDTF9UWVBFX0VYVEVOREVEICovCisgIC8qIE1hYyBPUyBYICovCisKKyAgLyogT24gTWFj IE9TIFgsICBhY2xfZ2V0X2ZpbGUgKG5hbWUsIEFDTF9UWVBFX0FDQ0VTUykKKyAgICAgYW5k ICAgICAgICAgICBhY2xfZ2V0X2ZpbGUgKG5hbWUsIEFDTF9UWVBFX0RFRkFVTFQpCisgICAg IGFsd2F5cyByZXR1cm4gTlVMTCAvIEVJTlZBTC4gIFlvdSBoYXZlIHRvIHVzZQorICAgICAg ICAgICAgICAgICAgIGFjbF9nZXRfZmlsZSAobmFtZSwgQUNMX1RZUEVfRVhURU5ERUQpCisg ICAgIG9yICAgICAgICAgICAgYWNsX2dldF9mZCAob3BlbiAobmFtZSwgLi4uKSkKKyAgICAg dG8gcmV0cmlldmUgYW4gQUNMLgorICAgICBPbiB0aGUgb3RoZXIgaGFuZCwKKyAgICAgICAg ICAgICAgICAgICBhY2xfc2V0X2ZpbGUgKG5hbWUsIEFDTF9UWVBFX0FDQ0VTUywgYWNsKQor ICAgICBhbmQgICAgICAgICAgIGFjbF9zZXRfZmlsZSAobmFtZSwgQUNMX1RZUEVfREVGQVVM VCwgYWNsKQorICAgICBoYXZlIHRoZSBzYW1lIGVmZmVjdCBhcworICAgICAgICAgICAgICAg ICAgIGFjbF9zZXRfZmlsZSAobmFtZSwgQUNMX1RZUEVfRVhURU5ERUQsIGFjbCk6CisgICAg IEVhY2ggb2YgdGhlc2UgY2FsbHMgc2V0cyB0aGUgZmlsZSdzIEFDTC4gICovCisKKyAgYWNs X3QgYWNsOworICBpbnQgcmV0OworCisgIGlmIChIQVZFX0FDTF9HRVRfRkQgJiYgc291cmNl X2Rlc2MgIT0gLTEpCisgICAgYWNsID0gYWNsX2dldF9mZCAoc291cmNlX2Rlc2MpOworICBl bHNlCisgICAgYWNsID0gYWNsX2dldF9maWxlIChzcmNfbmFtZSwgQUNMX1RZUEVfRVhURU5E RUQpOworICBpZiAoYWNsID09IE5VTEwpCisgICAgeworICAgICAgaWYgKCFhY2xfZXJybm9f dmFsaWQgKGVycm5vKSkKKyAgICAgICAgcmV0dXJuIHFzZXRfYWNsIChkc3RfbmFtZSwgZGVz dF9kZXNjLCBtb2RlKTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIC0yOworICAgIH0K KworICBpZiAoSEFWRV9BQ0xfU0VUX0ZEICYmIGRlc3RfZGVzYyAhPSAtMSkKKyAgICByZXQg PSBhY2xfc2V0X2ZkIChkZXN0X2Rlc2MsIGFjbCk7CisgIGVsc2UKKyAgICByZXQgPSBhY2xf c2V0X2ZpbGUgKGRzdF9uYW1lLCBBQ0xfVFlQRV9FWFRFTkRFRCwgYWNsKTsKKyAgaWYgKHJl dCAhPSAwKQorICAgIHsKKyAgICAgIGludCBzYXZlZF9lcnJubyA9IGVycm5vOworCisgICAg ICBpZiAoIWFjbF9lcnJub192YWxpZCAoc2F2ZWRfZXJybm8pICYmICFhY2xfZXh0ZW5kZWRf bm9udHJpdmlhbCAoYWNsKSkKKyAgICAgICAgeworICAgICAgICAgIGFjbF9mcmVlIChhY2wp OworICAgICAgICAgIHJldHVybiBjaG1vZF9vcl9mY2htb2QgKGRzdF9uYW1lLCBkZXN0X2Rl c2MsIG1vZGUpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAg ICBhY2xfZnJlZSAoYWNsKTsKKyAgICAgICAgICBjaG1vZF9vcl9mY2htb2QgKGRzdF9uYW1l LCBkZXN0X2Rlc2MsIG1vZGUpOworICAgICAgICAgIGVycm5vID0gc2F2ZWRfZXJybm87Cisg ICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorICBlbHNlCisgICAgYWNs X2ZyZWUgKGFjbCk7CisKKyAgLyogU2luY2UgIU1PREVfSU5TSURFX0FDTCwgd2UgaGF2ZSB0 byBjYWxsIGNobW9kIGV4cGxpY2l0bHkuICAqLworICByZXR1cm4gY2htb2Rfb3JfZmNobW9k IChkc3RfbmFtZSwgZGVzdF9kZXNjLCBtb2RlKTsKKworIyBlbmRpZgorCisjZWxpZiBVU0Vf QUNMICYmIGRlZmluZWQgR0VUQUNMIC8qIFNvbGFyaXMsIEN5Z3dpbiwgbm90IEhQLVVYICov CisKKyAgLyogU29sYXJpcyAyLjUgdGhyb3VnaCBTb2xhcmlzIDEwLCBDeWd3aW4sIGFuZCBj b250ZW1wb3JhbmVvdXMgdmVyc2lvbnMKKyAgICAgb2YgVW5peHdhcmUuICBUaGUgYWNsKCkg Y2FsbCByZXR1cm5zIHRoZSBhY2Nlc3MgYW5kIGRlZmF1bHQgQUNMIGJvdGgKKyAgICAgYXQg b25jZS4gICovCisjIGlmZGVmIEFDRV9HRVRBQ0wKKyAgaW50IGFjZV9jb3VudDsKKyAgYWNl X3QgKmFjZV9lbnRyaWVzOworIyBlbmRpZgorICBpbnQgY291bnQ7CisgIGFjbGVudF90ICpl bnRyaWVzOworICBpbnQgZGlkX2NobW9kOworICBpbnQgc2F2ZWRfZXJybm87CisgIGludCBy ZXQ7CisKKyMgaWZkZWYgQUNFX0dFVEFDTAorICAvKiBTb2xhcmlzIGFsc28gaGFzIGEgZGlm ZmVyZW50IHZhcmlhbnQgb2YgQUNMcywgdXNlZCBpbiBaRlMgYW5kIE5GU3Y0CisgICAgIGZp bGUgc3lzdGVtcyAod2hlcmVhcyB0aGUgb3RoZXIgb25lcyBhcmUgdXNlZCBpbiBVRlMgZmls ZSBzeXN0ZW1zKS4KKyAgICAgVGhlcmUgaXMgYW4gQVBJCisgICAgICAgcGF0aGNvbmYgKG5h bWUsIF9QQ19BQ0xfRU5BQkxFRCkKKyAgICAgICBmcGF0aGNvbmYgKGRlc2MsIF9QQ19BQ0xf RU5BQkxFRCkKKyAgICAgdGhhdCBhbGxvd3MgdG8gZGV0ZXJtaW5lIHdoaWNoIG9mIHRoZSB0 d28ga2luZHMgb2YgQUNMcyBpcyBzdXBwb3J0ZWQKKyAgICAgZm9yIHRoZSBnaXZlbiBmaWxl LiAgQnV0IHNvbWUgZmlsZSBzeXN0ZW1zIG1heSBpbXBsZW1lbnQgdGhpcyBjYWxsCisgICAg IGluY29ycmVjdGx5LCBzbyBiZXR0ZXIgbm90IHVzZSBpdC4KKyAgICAgV2hlbiBmZXRjaGlu ZyB0aGUgc291cmNlIEFDTCwgd2Ugc2ltcGx5IGZldGNoIGJvdGggQUNMIHR5cGVzLgorICAg ICBXaGVuIHNldHRpbmcgdGhlIGRlc3RpbmF0aW9uIEFDTCwgd2UgdHJ5IGVpdGhlciBBQ0wg dHlwZXMsIGFzc3VtaW5nCisgICAgIHRoYXQgdGhlIGtlcm5lbCB3aWxsIHRyYW5zbGF0ZSB0 aGUgQUNMIGZyb20gb25lIGZvcm0gdG8gdGhlIG90aGVyLgorICAgICAoU2VlIGluIDxodHRw Oi8vZG9jcy5zdW4uY29tL2FwcC9kb2NzL2RvYy84MTktMjI0MS82bjRodWM3aWE/bD1lbiZh PXZpZXc+CisgICAgIHRoZSBkZXNjcmlwdGlvbiBvZiBFTk9UU1VQLikgICovCisgIGZvciAo OzspCisgICAgeworICAgICAgYWNlX2NvdW50ID0gKHNvdXJjZV9kZXNjICE9IC0xCisgICAg ICAgICAgICAgICAgICAgPyBmYWNsIChzb3VyY2VfZGVzYywgQUNFX0dFVEFDTENOVCwgMCwg TlVMTCkKKyAgICAgICAgICAgICAgICAgICA6IGFjbCAoc3JjX25hbWUsIEFDRV9HRVRBQ0xD TlQsIDAsIE5VTEwpKTsKKworICAgICAgaWYgKGFjZV9jb3VudCA8IDApCisgICAgICAgIHsK KyAgICAgICAgICBpZiAoZXJybm8gPT0gRU5PU1lTIHx8IGVycm5vID09IEVJTlZBTCkKKyAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgYWNlX2NvdW50ID0gMDsKKyAgICAgICAgICAg ICAgYWNlX2VudHJpZXMgPSBOVUxMOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gLTI7CisgICAgICAg IH0KKworICAgICAgaWYgKGFjZV9jb3VudCA9PSAwKQorICAgICAgICB7CisgICAgICAgICAg YWNlX2VudHJpZXMgPSBOVUxMOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg ICAgIGFjZV9lbnRyaWVzID0gKGFjZV90ICopIG1hbGxvYyAoYWNlX2NvdW50ICogc2l6ZW9m IChhY2VfdCkpOworICAgICAgaWYgKGFjZV9lbnRyaWVzID09IE5VTEwpCisgICAgICAgIHsK KyAgICAgICAgICBlcnJubyA9IEVOT01FTTsKKyAgICAgICAgICByZXR1cm4gLTI7CisgICAg ICAgIH0KKworICAgICAgcmV0ID0gKHNvdXJjZV9kZXNjICE9IC0xCisgICAgICAgICAgICAg PyBmYWNsIChzb3VyY2VfZGVzYywgQUNFX0dFVEFDTCwgYWNlX2NvdW50LCBhY2VfZW50cmll cykKKyAgICAgICAgICAgICA6IGFjbCAoc3JjX25hbWUsIEFDRV9HRVRBQ0wsIGFjZV9jb3Vu dCwgYWNlX2VudHJpZXMpKTsKKyAgICAgIGlmIChyZXQgPCAwKQorICAgICAgICB7CisgICAg ICAgICAgZnJlZSAoYWNlX2VudHJpZXMpOworICAgICAgICAgIGlmIChlcnJubyA9PSBFTk9T WVMgfHwgZXJybm8gPT0gRUlOVkFMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBh Y2VfY291bnQgPSAwOworICAgICAgICAgICAgICBhY2VfZW50cmllcyA9IE5VTEw7CisgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAg ICAgICAgIHJldHVybiAtMjsKKyAgICAgICAgfQorICAgICAgaWYgKHJldCA9PSBhY2VfY291 bnQpCisgICAgICAgIGJyZWFrOworICAgICAgLyogSHVoPyBUaGUgbnVtYmVyIG9mIEFDTCBl bnRyaWVzIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgY2FsbC4KKyAgICAgICAgIFJlcGVhdC4g ICovCisgICAgfQorIyBlbmRpZgorCisgIGZvciAoOzspCisgICAgeworICAgICAgY291bnQg PSAoc291cmNlX2Rlc2MgIT0gLTEKKyAgICAgICAgICAgICAgID8gZmFjbCAoc291cmNlX2Rl c2MsIEdFVEFDTENOVCwgMCwgTlVMTCkKKyAgICAgICAgICAgICAgIDogYWNsIChzcmNfbmFt ZSwgR0VUQUNMQ05ULCAwLCBOVUxMKSk7CisKKyAgICAgIGlmIChjb3VudCA8IDApCisgICAg ICAgIHsKKyAgICAgICAgICBpZiAoZXJybm8gPT0gRU5PU1lTIHx8IGVycm5vID09IEVOT1RT VVAgfHwgZXJybm8gPT0gRU9QTk9UU1VQUCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgY291bnQgPSAwOworICAgICAgICAgICAgICBlbnRyaWVzID0gTlVMTDsKKyAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAg ICAgcmV0dXJuIC0yOworICAgICAgICB9CisKKyAgICAgIGlmIChjb3VudCA9PSAwKQorICAg ICAgICB7CisgICAgICAgICAgZW50cmllcyA9IE5VTEw7CisgICAgICAgICAgYnJlYWs7Cisg ICAgICAgIH0KKworICAgICAgZW50cmllcyA9IChhY2xlbnRfdCAqKSBtYWxsb2MgKGNvdW50 ICogc2l6ZW9mIChhY2xlbnRfdCkpOworICAgICAgaWYgKGVudHJpZXMgPT0gTlVMTCkKKyAg ICAgICAgeworICAgICAgICAgIGVycm5vID0gRU5PTUVNOworICAgICAgICAgIHJldHVybiAt MjsKKyAgICAgICAgfQorCisgICAgICBpZiAoKHNvdXJjZV9kZXNjICE9IC0xCisgICAgICAg ICAgID8gZmFjbCAoc291cmNlX2Rlc2MsIEdFVEFDTCwgY291bnQsIGVudHJpZXMpCisgICAg ICAgICAgIDogYWNsIChzcmNfbmFtZSwgR0VUQUNMLCBjb3VudCwgZW50cmllcykpCisgICAg ICAgICAgPT0gY291bnQpCisgICAgICAgIGJyZWFrOworICAgICAgLyogSHVoPyBUaGUgbnVt YmVyIG9mIEFDTCBlbnRyaWVzIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgY2FsbC4KKyAgICAg ICAgIFJlcGVhdC4gICovCisgICAgfQorCisgIC8qIElzIHRoZXJlIGFuIEFDTCBvZiBlaXRo ZXIga2luZD8gICovCisjIGlmZGVmIEFDRV9HRVRBQ0wKKyAgaWYgKGFjZV9jb3VudCA9PSAw KQorIyBlbmRpZgorICAgIGlmIChjb3VudCA9PSAwKQorICAgICAgcmV0dXJuIHFzZXRfYWNs IChkc3RfbmFtZSwgZGVzdF9kZXNjLCBtb2RlKTsKKworICBkaWRfY2htb2QgPSAwOyAvKiBz ZXQgdG8gMSBvbmNlIHRoZSBtb2RlIGJpdHMgaW4gMDc3NyBoYXZlIGJlZW4gc2V0ICovCisg IHNhdmVkX2Vycm5vID0gMDsgLyogdGhlIGZpcnN0IG5vbi1pZ25vcmFibGUgZXJyb3IgY29k ZSAqLworCisgIGlmICghTU9ERV9JTlNJREVfQUNMKQorICAgIHsKKyAgICAgIC8qIE9uIEN5 Z3dpbiwgaXQgaXMgbmVjZXNzYXJ5IHRvIGNhbGwgY2htb2QgYmVmb3JlIGFjbCwgYmVjYXVz ZQorICAgICAgICAgY2htb2QgY2FuIGNoYW5nZSB0aGUgY29udGVudHMgb2YgdGhlIEFDTCAo aW4gd2F5cyB0aGF0IGRvbid0CisgICAgICAgICBjaGFuZ2UgdGhlIGFsbG93ZWQgYWNjZXNz ZXMsIGJ1dCBzdGlsbCB2aXNpYmxlKS4gICovCisgICAgICBpZiAoY2htb2Rfb3JfZmNobW9k IChkc3RfbmFtZSwgZGVzdF9kZXNjLCBtb2RlKSAhPSAwKQorICAgICAgICBzYXZlZF9lcnJu byA9IGVycm5vOworICAgICAgZGlkX2NobW9kID0gMTsKKyAgICB9CisKKyAgLyogSWYgYm90 aCBhY2VfZW50cmllcyBhbmQgZW50cmllcyBhcmUgYXZhaWxhYmxlLCB0cnkgU0VUQUNMIGJl Zm9yZQorICAgICBBQ0VfU0VUQUNMLCBiZWNhdXNlIFNFVEFDTCBjYW5ub3QgZmFpbCB3aXRo IEVOT1RTVVAgd2hlcmVhcyBBQ0VfU0VUQUNMCisgICAgIGNhbi4gICovCisKKyAgaWYgKGNv dW50ID4gMCkKKyAgICB7CisgICAgICByZXQgPSAoZGVzdF9kZXNjICE9IC0xCisgICAgICAg ICAgICAgPyBmYWNsIChkZXN0X2Rlc2MsIFNFVEFDTCwgY291bnQsIGVudHJpZXMpCisgICAg ICAgICAgICAgOiBhY2wgKGRzdF9uYW1lLCBTRVRBQ0wsIGNvdW50LCBlbnRyaWVzKSk7Cisg ICAgICBpZiAocmV0IDwgMCAmJiBzYXZlZF9lcnJubyA9PSAwKQorICAgICAgICB7CisgICAg ICAgICAgc2F2ZWRfZXJybm8gPSBlcnJubzsKKyAgICAgICAgICBpZiAoKGVycm5vID09IEVO T1NZUyB8fCBlcnJubyA9PSBFT1BOT1RTVVBQIHx8IGVycm5vID09IEVJTlZBTCkKKyAgICAg ICAgICAgICAgJiYgIWFjbF9ub250cml2aWFsIChjb3VudCwgZW50cmllcykpCisgICAgICAg ICAgICBzYXZlZF9lcnJubyA9IDA7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAg ZGlkX2NobW9kID0gMTsKKyAgICB9CisgIGZyZWUgKGVudHJpZXMpOworCisjIGlmZGVmIEFD RV9HRVRBQ0wKKyAgaWYgKGFjZV9jb3VudCA+IDApCisgICAgeworICAgICAgcmV0ID0gKGRl c3RfZGVzYyAhPSAtMQorICAgICAgICAgICAgID8gZmFjbCAoZGVzdF9kZXNjLCBBQ0VfU0VU QUNMLCBhY2VfY291bnQsIGFjZV9lbnRyaWVzKQorICAgICAgICAgICAgIDogYWNsIChkc3Rf bmFtZSwgQUNFX1NFVEFDTCwgYWNlX2NvdW50LCBhY2VfZW50cmllcykpOworICAgICAgaWYg KHJldCA8IDAgJiYgc2F2ZWRfZXJybm8gPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIHNh dmVkX2Vycm5vID0gZXJybm87CisgICAgICAgICAgaWYgKChlcnJubyA9PSBFTk9TWVMgfHwg ZXJybm8gPT0gRUlOVkFMIHx8IGVycm5vID09IEVOT1RTVVApCisgICAgICAgICAgICAgICYm ICFhY2xfYWNlX25vbnRyaXZpYWwgKGFjZV9jb3VudCwgYWNlX2VudHJpZXMpKQorICAgICAg ICAgICAgc2F2ZWRfZXJybm8gPSAwOworICAgICAgICB9CisgICAgfQorICBmcmVlIChhY2Vf ZW50cmllcyk7CisjIGVuZGlmCisKKyAgaWYgKE1PREVfSU5TSURFX0FDTAorICAgICAgJiYg ZGlkX2NobW9kIDw9ICgobW9kZSAmIChTX0lTVUlEIHwgU19JU0dJRCB8IFNfSVNWVFgpKSA/ IDEgOiAwKSkKKyAgICB7CisgICAgICAvKiBXZSBkaWQgbm90IGNhbGwgY2htb2Qgc28gZmFy LCBhbmQgZWl0aGVyIHRoZSBtb2RlIGFuZCB0aGUgQUNMIGFyZQorICAgICAgICAgc2VwYXJh dGUgb3Igc3BlY2lhbCBiaXRzIGFyZSB0byBiZSBzZXQgd2hpY2ggZG9uJ3QgZml0IGludG8g QUNMcy4gICovCisKKyAgICAgIGlmIChjaG1vZF9vcl9mY2htb2QgKGRzdF9uYW1lLCBkZXN0 X2Rlc2MsIG1vZGUpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoc2F2ZWRfZXJy bm8gPT0gMCkKKyAgICAgICAgICAgIHNhdmVkX2Vycm5vID0gZXJybm87CisgICAgICAgIH0K KyAgICB9CisKKyAgaWYgKHNhdmVkX2Vycm5vKQorICAgIHsKKyAgICAgIGVycm5vID0gc2F2 ZWRfZXJybm87CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICByZXR1cm4gMDsKKworI2Vs aWYgVVNFX0FDTCAmJiBIQVZFX0dFVEFDTCAvKiBIUC1VWCAqLworCisgIHN0cnVjdCBhY2xf ZW50cnkgZW50cmllc1tOQUNMRU5UUklFU107CisgIGludCBjb3VudDsKKyMgaWYgSEFWRV9B Q0xWX0gKKyAgc3RydWN0IGFjbCBhY2x2X2VudHJpZXNbTkFDTFZFTlRSSUVTXTsKKyAgaW50 IGFjbHZfY291bnQ7CisjIGVuZGlmCisgIGludCBkaWRfY2htb2Q7CisgIGludCBzYXZlZF9l cnJubzsKKyAgaW50IHJldDsKKworICBjb3VudCA9IChzb3VyY2VfZGVzYyAhPSAtMQorICAg ICAgICAgICA/IGZnZXRhY2wgKHNvdXJjZV9kZXNjLCBOQUNMRU5UUklFUywgZW50cmllcykK KyAgICAgICAgICAgOiBnZXRhY2wgKHNyY19uYW1lLCBOQUNMRU5UUklFUywgZW50cmllcykp OworCisgIGlmIChjb3VudCA8IDApCisgICAgeworICAgICAgaWYgKGVycm5vID09IEVOT1NZ UyB8fCBlcnJubyA9PSBFT1BOT1RTVVBQIHx8IGVycm5vID09IEVOT1RTVVApCisgICAgICAg IGNvdW50ID0gMDsKKyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIC0yOworICAgIH0KKyAg ZWxzZSBpZiAoY291bnQgPiAwKQorICAgIHsKKyAgICAgIGlmIChjb3VudCA+IE5BQ0xFTlRS SUVTKQorICAgICAgICAvKiBJZiBOQUNMRU5UUklFUyBjYW5ub3QgYmUgdHJ1c3RlZCwgdXNl IGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24uICAqLworICAgICAgICBhYm9ydCAoKTsKKyAg ICB9CisKKyMgaWYgSEFWRV9BQ0xWX0gKKyAgYWNsdl9jb3VudCA9IGFjbCAoKGNoYXIgKikg c3JjX25hbWUsIEFDTF9HRVQsIE5BQ0xWRU5UUklFUywgYWNsdl9lbnRyaWVzKTsKKworICBp ZiAoYWNsdl9jb3VudCA8IDApCisgICAgeworICAgICAgaWYgKGVycm5vID09IEVOT1NZUyB8 fCBlcnJubyA9PSBFT1BOT1RTVVBQIHx8IGVycm5vID09IEVJTlZBTCkKKyAgICAgICAgY291 bnQgPSAwOworICAgICAgZWxzZQorICAgICAgICByZXR1cm4gLTI7CisgICAgfQorICBlbHNl IGlmIChhY2x2X2NvdW50ID4gMCkKKyAgICB7CisgICAgICBpZiAoYWNsdl9jb3VudCA+IE5B Q0xWRU5UUklFUykKKyAgICAgICAgLyogSWYgTkFDTFZFTlRSSUVTIGNhbm5vdCBiZSB0cnVz dGVkLCB1c2UgZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbi4gICovCisgICAgICAgIGFib3J0 ICgpOworICAgIH0KKyMgZW5kaWYKKworICBpZiAoY291bnQgPT0gMCkKKyMgaWYgSEFWRV9B Q0xWX0gKKyAgICBpZiAoYWNsdl9jb3VudCA9PSAwKQorIyBlbmRpZgorICAgICAgcmV0dXJu IHFzZXRfYWNsIChkc3RfbmFtZSwgZGVzdF9kZXNjLCBtb2RlKTsKKworICBkaWRfY2htb2Qg PSAwOyAvKiBzZXQgdG8gMSBvbmNlIHRoZSBtb2RlIGJpdHMgaW4gMDc3NyBoYXZlIGJlZW4g c2V0ICovCisgIHNhdmVkX2Vycm5vID0gMDsgLyogdGhlIGZpcnN0IG5vbi1pZ25vcmFibGUg ZXJyb3IgY29kZSAqLworCisgIGlmIChjb3VudCA+IDApCisgICAgeworICAgICAgcmV0ID0g KGRlc3RfZGVzYyAhPSAtMQorICAgICAgICAgICAgID8gZnNldGFjbCAoZGVzdF9kZXNjLCBj b3VudCwgZW50cmllcykKKyAgICAgICAgICAgICA6IHNldGFjbCAoZHN0X25hbWUsIGNvdW50 LCBlbnRyaWVzKSk7CisgICAgICBpZiAocmV0IDwgMCAmJiBzYXZlZF9lcnJubyA9PSAwKQor ICAgICAgICB7CisgICAgICAgICAgc2F2ZWRfZXJybm8gPSBlcnJubzsKKyAgICAgICAgICBp ZiAoZXJybm8gPT0gRU5PU1lTIHx8IGVycm5vID09IEVPUE5PVFNVUFAgfHwgZXJybm8gPT0g RU5PVFNVUCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc3RydWN0IHN0YXQgc291 cmNlX3N0YXRidWY7CisKKyAgICAgICAgICAgICAgaWYgKChzb3VyY2VfZGVzYyAhPSAtMQor ICAgICAgICAgICAgICAgICAgID8gZnN0YXQgKHNvdXJjZV9kZXNjLCAmc291cmNlX3N0YXRi dWYpCisgICAgICAgICAgICAgICAgICAgOiBzdGF0IChzcmNfbmFtZSwgJnNvdXJjZV9zdGF0 YnVmKSkgPT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBpZiAo IWFjbF9ub250cml2aWFsIChjb3VudCwgZW50cmllcywgJnNvdXJjZV9zdGF0YnVmKSkKKyAg ICAgICAgICAgICAgICAgICAgc2F2ZWRfZXJybm8gPSAwOworICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNhdmVkX2Vycm5vID0gZXJy bm87CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgZGlk X2NobW9kID0gMTsKKyAgICB9CisKKyMgaWYgSEFWRV9BQ0xWX0gKKyAgaWYgKGFjbHZfY291 bnQgPiAwKQorICAgIHsKKyAgICAgIHJldCA9IGFjbCAoKGNoYXIgKikgZHN0X25hbWUsIEFD TF9TRVQsIGFjbHZfY291bnQsIGFjbHZfZW50cmllcyk7CisgICAgICBpZiAocmV0IDwgMCAm JiBzYXZlZF9lcnJubyA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgc2F2ZWRfZXJybm8g PSBlcnJubzsKKyAgICAgICAgICBpZiAoZXJybm8gPT0gRU5PU1lTIHx8IGVycm5vID09IEVP UE5PVFNVUFAgfHwgZXJybm8gPT0gRUlOVkFMKQorICAgICAgICAgICAgeworICAgICAgICAg ICAgICBpZiAoIWFjbHZfbm9udHJpdmlhbCAoYWNsdl9jb3VudCwgYWNsdl9lbnRyaWVzKSkK KyAgICAgICAgICAgICAgICBzYXZlZF9lcnJubyA9IDA7CisgICAgICAgICAgICB9CisgICAg ICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgZGlkX2NobW9kID0gMTsKKyAgICB9CisjIGVu ZGlmCisKKyAgaWYgKGRpZF9jaG1vZCA8PSAoKG1vZGUgJiAoU19JU1VJRCB8IFNfSVNHSUQg fCBTX0lTVlRYKSkgPyAxIDogMCkpCisgICAgeworICAgICAgLyogV2UgZGlkIG5vdCBjYWxs IGNobW9kIHNvIGZhciwgYW5kIHNwZWNpYWwgYml0cyBhcmUgdG8gYmUgc2V0IHdoaWNoCisg ICAgICAgICBkb24ndCBmaXQgaW50byBBQ0xzLiAgKi8KKworICAgICAgaWYgKGNobW9kX29y X2ZjaG1vZCAoZHN0X25hbWUsIGRlc3RfZGVzYywgbW9kZSkgIT0gMCkKKyAgICAgICAgewor ICAgICAgICAgIGlmIChzYXZlZF9lcnJubyA9PSAwKQorICAgICAgICAgICAgc2F2ZWRfZXJy bm8gPSBlcnJubzsKKyAgICAgICAgfQorICAgIH0KKworICBpZiAoc2F2ZWRfZXJybm8pCisg ICAgeworICAgICAgZXJybm8gPSBzYXZlZF9lcnJubzsKKyAgICAgIHJldHVybiAtMTsKKyAg ICB9CisgIHJldHVybiAwOworCisjZWxpZiBVU0VfQUNMICYmIEhBVkVfQUNMWF9HRVQgJiYg MCAvKiBBSVggKi8KKworICAvKiBUT0RPICovCisKKyNlbGlmIFVTRV9BQ0wgJiYgSEFWRV9T VEFUQUNMIC8qIG9sZGVyIEFJWCAqLworCisgIHVuaW9uIHsgc3RydWN0IGFjbCBhOyBjaGFy IHJvb21bNDA5Nl07IH0gdTsKKyAgaW50IHJldDsKKworICBpZiAoKHNvdXJjZV9kZXNjICE9 IC0xCisgICAgICAgPyBmc3RhdGFjbCAoc291cmNlX2Rlc2MsIFNUWF9OT1JNQUwsICZ1LmEs IHNpemVvZiAodSkpCisgICAgICAgOiBzdGF0YWNsIChzcmNfbmFtZSwgU1RYX05PUk1BTCwg JnUuYSwgc2l6ZW9mICh1KSkpCisgICAgICA8IDApCisgICAgcmV0dXJuIC0yOworCisgIHJl dCA9IChkZXN0X2Rlc2MgIT0gLTEKKyAgICAgICAgID8gZmNoYWNsIChkZXN0X2Rlc2MsICZ1 LmEsIHUuYS5hY2xfbGVuKQorICAgICAgICAgOiBjaGFjbCAoZHN0X25hbWUsICZ1LmEsIHUu YS5hY2xfbGVuKSk7CisgIGlmIChyZXQgPCAwKQorICAgIHsKKyAgICAgIGludCBzYXZlZF9l cnJubyA9IGVycm5vOworCisgICAgICBjaG1vZF9vcl9mY2htb2QgKGRzdF9uYW1lLCBkZXN0 X2Rlc2MsIG1vZGUpOworICAgICAgZXJybm8gPSBzYXZlZF9lcnJubzsKKyAgICAgIHJldHVy biAtMTsKKyAgICB9CisKKyAgLyogTm8gbmVlZCB0byBjYWxsIGNobW9kX29yX2ZjaG1vZCBh dCB0aGlzIHBvaW50LCBzaW5jZSB0aGUgbW9kZSBiaXRzCisgICAgIFNfSVNVSUQsIFNfSVNH SUQsIFNfSVNWVFggYXJlIGFsc28gc3RvcmVkIGluIHRoZSBBQ0wuICAqLworCisgIHJldHVy biAwOworCisjZWxpZiBVU0VfQUNMICYmIEhBVkVfQUNMU09SVCAvKiBOb25TdG9wIEtlcm5l bCAqLworCisgIHN0cnVjdCBhY2wgZW50cmllc1tOQUNMRU5UUklFU107CisgIGludCBjb3Vu dDsKKyAgaW50IHJldDsKKworICBjb3VudCA9IGFjbCAoKGNoYXIgKikgc3JjX25hbWUsIEFD TF9HRVQsIE5BQ0xFTlRSSUVTLCBlbnRyaWVzKTsKKworICBpZiAoY291bnQgPCAwKQorICAg IHsKKyAgICAgIGlmICgwKQorICAgICAgICBjb3VudCA9IDA7CisgICAgICBlbHNlCisgICAg ICAgIHJldHVybiAtMjsKKyAgICB9CisgIGVsc2UgaWYgKGNvdW50ID4gMCkKKyAgICB7Cisg ICAgICBpZiAoY291bnQgPiBOQUNMRU5UUklFUykKKyAgICAgICAgLyogSWYgTkFDTEVOVFJJ RVMgY2Fubm90IGJlIHRydXN0ZWQsIHVzZSBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uLiAg Ki8KKyAgICAgICAgYWJvcnQgKCk7CisgICAgfQorCisgIGlmIChjb3VudCA9PSAwKQorICAg IHJldHVybiBxc2V0X2FjbCAoZHN0X25hbWUsIGRlc3RfZGVzYywgbW9kZSk7CisKKyAgcmV0 ID0gYWNsICgoY2hhciAqKSBkc3RfbmFtZSwgQUNMX1NFVCwgY291bnQsIGVudHJpZXMpOwor ICBpZiAocmV0IDwgMCkKKyAgICB7CisgICAgICBpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsK KworICAgICAgaWYgKDApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIWFjbF9ub250cml2 aWFsIChjb3VudCwgZW50cmllcykpCisgICAgICAgICAgICByZXR1cm4gY2htb2Rfb3JfZmNo bW9kIChkc3RfbmFtZSwgZGVzdF9kZXNjLCBtb2RlKTsKKyAgICAgICAgfQorCisgICAgICBj aG1vZF9vcl9mY2htb2QgKGRzdF9uYW1lLCBkZXN0X2Rlc2MsIG1vZGUpOworICAgICAgZXJy bm8gPSBzYXZlZF9lcnJubzsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgaWYgKG1v ZGUgJiAoU19JU1VJRCB8IFNfSVNHSUQgfCBTX0lTVlRYKSkKKyAgICB7CisgICAgICAvKiBX ZSBkaWQgbm90IGNhbGwgY2htb2Qgc28gZmFyLCBhbmQgZWl0aGVyIHRoZSBtb2RlIGFuZCB0 aGUgQUNMIGFyZQorICAgICAgICAgc2VwYXJhdGUgb3Igc3BlY2lhbCBiaXRzIGFyZSB0byBi ZSBzZXQgd2hpY2ggZG9uJ3QgZml0IGludG8gQUNMcy4gICovCisKKyAgICAgIHJldHVybiBj aG1vZF9vcl9mY2htb2QgKGRzdF9uYW1lLCBkZXN0X2Rlc2MsIG1vZGUpOworICAgIH0KKyAg cmV0dXJuIDA7CisKKyNlbHNlCisKKyAgcmV0dXJuIHFzZXRfYWNsIChkc3RfbmFtZSwgZGVz dF9kZXNjLCBtb2RlKTsKKworI2VuZGlmCit9Cgo9PT0gYWRkZWQgZmlsZSAnbGliL3FzZXQt YWNsLmMnCi0tLSBsaWIvcXNldC1hY2wuYwkxOTcwLTAxLTAxIDAwOjAwOjAwICswMDAwCisr KyBsaWIvcXNldC1hY2wuYwkyMDEzLTA0LTI4IDAwOjQ2OjM2ICswMDAwCkBAIC0wLDAgKzEs Njc2IEBACisvKiBxc2V0LWFjbC5jIC0gc2V0IGFjY2VzcyBjb250cm9sIGxpc3QgZXF1aXZh bGVudCB0byBhIG1vZGUKKworICAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMsIDIwMDUtMjAx MyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK KyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl aXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYg bm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisgICBXcml0dGVu IGJ5IFBhdWwgRWdnZXJ0IGFuZCBBbmRyZWFzIEdydWVuYmFjaGVyLCBhbmQgQnJ1bm8gSGFp YmxlLiAgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjZGVmaW5lIEFDTF9JTlRFUk5B TF9JTkxJTkUgX0dMX0VYVEVSTl9JTkxJTkUKKworI2luY2x1ZGUgImFjbC5oIgorCisjaW5j bHVkZSAiYWNsLWludGVybmFsLmgiCisKKworLyogSWYgREVTQyBpcyBhIHZhbGlkIGZpbGUg ZGVzY3JpcHRvciB1c2UgZmNobW9kIHRvIGNoYW5nZSB0aGUKKyAgIGZpbGUncyBtb2RlIHRv IE1PREUgb24gc3lzdGVtcyB0aGF0IGhhdmUgZmNobW9kLiBPbiBzeXN0ZW1zCisgICB0aGF0 IGRvbid0IGhhdmUgZmNobW9kIGFuZCBpZiBERVNDIGlzIGludmFsaWQsIHVzZSBjaG1vZCBv bgorICAgTkFNRSBpbnN0ZWFkLgorICAgUmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bC4gIFJldHVy biAtMSBhbmQgc2V0IGVycm5vIHVwb24gZmFpbHVyZS4gICovCisKK2ludAorY2htb2Rfb3Jf ZmNobW9kIChjb25zdCBjaGFyICpuYW1lLCBpbnQgZGVzYywgbW9kZV90IG1vZGUpCit7Cisg IGlmIChIQVZFX0ZDSE1PRCAmJiBkZXNjICE9IC0xKQorICAgIHJldHVybiBmY2htb2QgKGRl c2MsIG1vZGUpOworICBlbHNlCisgICAgcmV0dXJuIGNobW9kIChuYW1lLCBtb2RlKTsKK30K KworLyogU2V0IHRoZSBhY2Nlc3MgY29udHJvbCBsaXN0cyBvZiBhIGZpbGUuIElmIERFU0Mg aXMgYSB2YWxpZCBmaWxlCisgICBkZXNjcmlwdG9yLCB1c2UgZmlsZSBkZXNjcmlwdG9yIG9w ZXJhdGlvbnMgd2hlcmUgYXZhaWxhYmxlLCBlbHNlIHVzZQorICAgZmlsZW5hbWUgYmFzZWQg b3BlcmF0aW9ucyBvbiBOQU1FLiAgSWYgYWNjZXNzIGNvbnRyb2wgbGlzdHMgYXJlIG5vdAor ICAgYXZhaWxhYmxlLCBmY2htb2QgdGhlIHRhcmdldCBmaWxlIHRvIE1PREUuICBBbHNvIHNl dHMgdGhlCisgICBub24tcGVybWlzc2lvbiBiaXRzIG9mIHRoZSBkZXN0aW5hdGlvbiBmaWxl IChTX0lTVUlELCBTX0lTR0lELCBTX0lTVlRYKQorICAgdG8gdGhvc2UgZnJvbSBNT0RFIGlm IGFueSBhcmUgc2V0LgorICAgUmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bC4gIFJldHVybiAtMSBh bmQgc2V0IGVycm5vIHVwb24gZmFpbHVyZS4gICovCisKK2ludAorcXNldF9hY2wgKGNoYXIg Y29uc3QgKm5hbWUsIGludCBkZXNjLCBtb2RlX3QgbW9kZSkKK3sKKyNpZiBVU0VfQUNMCisj IGlmIEhBVkVfQUNMX0dFVF9GSUxFCisgIC8qIFBPU0lYIDEwMDMuMWUgZHJhZnQgMTcgKGFi YW5kb25lZCkgc3BlY2lmaWMgdmVyc2lvbi4gICovCisgIC8qIExpbnV4LCBGcmVlQlNELCBN YWMgT1MgWCwgSVJJWCwgVHJ1NjQgKi8KKyMgIGlmICFIQVZFX0FDTF9UWVBFX0VYVEVOREVE CisgIC8qIExpbnV4LCBGcmVlQlNELCBJUklYLCBUcnU2NCAqLworCisgIC8qIFdlIG11c3Qg YWxzbyBoYXZlIGFjbF9mcm9tX3RleHQgYW5kIGFjbF9kZWxldGVfZGVmX2ZpbGUuCisgICAg IChhY2xfZGVsZXRlX2RlZl9maWxlIGNvdWxkIGJlIGVtdWxhdGVkIHdpdGggYWNsX2luaXQg Zm9sbG93ZWQKKyAgICAgIGJ5IGFjbF9zZXRfZmlsZSwgYnV0IGFjbF9zZXRfZmlsZSB3aXRo IGFuIGVtcHR5IGFjbCBpcworICAgICAgdW5zcGVjaWZpZWQuKSAgKi8KKworIyAgIGlmbmRl ZiBIQVZFX0FDTF9GUk9NX1RFWFQKKyMgICAgZXJyb3IgTXVzdCBoYXZlIGFjbF9mcm9tX3Rl eHQgKHNlZSBQT1NJWCAxMDAzLjFlIGRyYWZ0IDE3KS4KKyMgICBlbmRpZgorIyAgIGlmbmRl ZiBIQVZFX0FDTF9ERUxFVEVfREVGX0ZJTEUKKyMgICAgZXJyb3IgTXVzdCBoYXZlIGFjbF9k ZWxldGVfZGVmX2ZpbGUgKHNlZSBQT1NJWCAxMDAzLjFlIGRyYWZ0IDE3KS4KKyMgICBlbmRp ZgorCisgIGFjbF90IGFjbDsKKyAgaW50IHJldDsKKworICBpZiAoSEFWRV9BQ0xfRlJPTV9N T0RFKSAvKiBMaW51eCAqLworICAgIHsKKyAgICAgIGFjbCA9IGFjbF9mcm9tX21vZGUgKG1v ZGUpOworICAgICAgaWYgKCFhY2wpCisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIGVs c2UgLyogRnJlZUJTRCwgSVJJWCwgVHJ1NjQgKi8KKyAgICB7CisgICAgICAvKiBJZiB3ZSB3 ZXJlIHRvIGNyZWF0ZSB0aGUgQUNMIHVzaW5nIHRoZSBmdW5jdGlvbnMgYWNsX2luaXQoKSwK KyAgICAgICAgIGFjbF9jcmVhdGVfZW50cnkoKSwgYWNsX3NldF90YWdfdHlwZSgpLCBhY2xf c2V0X3F1YWxpZmllcigpLAorICAgICAgICAgYWNsX2dldF9wZXJtc2V0KCksIGFjbF9jbGVh cl9wZXJtW3NdKCksIGFjbF9hZGRfcGVybSgpLCB3ZQorICAgICAgICAgd291bGQgbmVlZCB0 byBjcmVhdGUgYSBxdWFsaWZpZXIuICBJIGRvbid0IGtub3cgaG93IHRvIGRvIHRoaXMuCisg ICAgICAgICBTbyBjcmVhdGUgaXQgdXNpbmcgYWNsX2Zyb21fdGV4dCgpLiAgKi8KKworIyAg IGlmIEhBVkVfQUNMX0ZSRUVfVEVYVCAvKiBUcnU2NCAqLworICAgICAgY2hhciBhY2xfdGV4 dFtdID0gInU6Oi0tLSxnOjotLS0sbzo6LS0tLCI7CisjICAgZWxzZSAvKiBGcmVlQlNELCBJ UklYICovCisgICAgICBjaGFyIGFjbF90ZXh0W10gPSAidTo6LS0tLGc6Oi0tLSxvOjotLS0i OworIyAgIGVuZGlmCisKKyAgICAgIGlmIChtb2RlICYgU19JUlVTUikgYWNsX3RleHRbIDNd ID0gJ3InOworICAgICAgaWYgKG1vZGUgJiBTX0lXVVNSKSBhY2xfdGV4dFsgNF0gPSAndyc7 CisgICAgICBpZiAobW9kZSAmIFNfSVhVU1IpIGFjbF90ZXh0WyA1XSA9ICd4JzsKKyAgICAg IGlmIChtb2RlICYgU19JUkdSUCkgYWNsX3RleHRbMTBdID0gJ3InOworICAgICAgaWYgKG1v ZGUgJiBTX0lXR1JQKSBhY2xfdGV4dFsxMV0gPSAndyc7CisgICAgICBpZiAobW9kZSAmIFNf SVhHUlApIGFjbF90ZXh0WzEyXSA9ICd4JzsKKyAgICAgIGlmIChtb2RlICYgU19JUk9USCkg YWNsX3RleHRbMTddID0gJ3InOworICAgICAgaWYgKG1vZGUgJiBTX0lXT1RIKSBhY2xfdGV4 dFsxOF0gPSAndyc7CisgICAgICBpZiAobW9kZSAmIFNfSVhPVEgpIGFjbF90ZXh0WzE5XSA9 ICd4JzsKKworICAgICAgYWNsID0gYWNsX2Zyb21fdGV4dCAoYWNsX3RleHQpOworICAgICAg aWYgKCFhY2wpCisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIGlmIChIQVZFX0FDTF9T RVRfRkQgJiYgZGVzYyAhPSAtMSkKKyAgICByZXQgPSBhY2xfc2V0X2ZkIChkZXNjLCBhY2wp OworICBlbHNlCisgICAgcmV0ID0gYWNsX3NldF9maWxlIChuYW1lLCBBQ0xfVFlQRV9BQ0NF U1MsIGFjbCk7CisgIGlmIChyZXQgIT0gMCkKKyAgICB7CisgICAgICBpbnQgc2F2ZWRfZXJy bm8gPSBlcnJubzsKKyAgICAgIGFjbF9mcmVlIChhY2wpOworICAgICAgaWYgKCEgYWNsX2Vy cm5vX3ZhbGlkIChlcnJubykpCisgICAgICAgIHJldHVybiBjaG1vZF9vcl9mY2htb2QgKG5h bWUsIGRlc2MsIG1vZGUpOworICAgICAgZXJybm8gPSBzYXZlZF9lcnJubzsKKyAgICAgIHJl dHVybiAtMTsKKyAgICB9CisgIGVsc2UKKyAgICBhY2xfZnJlZSAoYWNsKTsKKworICBpZiAo U19JU0RJUiAobW9kZSkgJiYgYWNsX2RlbGV0ZV9kZWZfZmlsZSAobmFtZSkpCisgICAgcmV0 dXJuIC0xOworCisgIGlmICghTU9ERV9JTlNJREVfQUNMIHx8IChtb2RlICYgKFNfSVNVSUQg fCBTX0lTR0lEIHwgU19JU1ZUWCkpKQorICAgIHsKKyAgICAgIC8qIFdlIGRpZCBub3QgY2Fs bCBjaG1vZCBzbyBmYXIsIGFuZCBlaXRoZXIgdGhlIG1vZGUgYW5kIHRoZSBBQ0wgYXJlCisg ICAgICAgICBzZXBhcmF0ZSBvciBzcGVjaWFsIGJpdHMgYXJlIHRvIGJlIHNldCB3aGljaCBk b24ndCBmaXQgaW50byBBQ0xzLiAgKi8KKyAgICAgIHJldHVybiBjaG1vZF9vcl9mY2htb2Qg KG5hbWUsIGRlc2MsIG1vZGUpOworICAgIH0KKyAgcmV0dXJuIDA7CisKKyMgIGVsc2UgLyog SEFWRV9BQ0xfVFlQRV9FWFRFTkRFRCAqLworICAvKiBNYWMgT1MgWCAqLworCisgIC8qIE9u IE1hYyBPUyBYLCAgYWNsX2dldF9maWxlIChuYW1lLCBBQ0xfVFlQRV9BQ0NFU1MpCisgICAg IGFuZCAgICAgICAgICAgYWNsX2dldF9maWxlIChuYW1lLCBBQ0xfVFlQRV9ERUZBVUxUKQor ICAgICBhbHdheXMgcmV0dXJuIE5VTEwgLyBFSU5WQUwuICBZb3UgaGF2ZSB0byB1c2UKKyAg ICAgICAgICAgICAgICAgICBhY2xfZ2V0X2ZpbGUgKG5hbWUsIEFDTF9UWVBFX0VYVEVOREVE KQorICAgICBvciAgICAgICAgICAgIGFjbF9nZXRfZmQgKG9wZW4gKG5hbWUsIC4uLikpCisg ICAgIHRvIHJldHJpZXZlIGFuIEFDTC4KKyAgICAgT24gdGhlIG90aGVyIGhhbmQsCisgICAg ICAgICAgICAgICAgICAgYWNsX3NldF9maWxlIChuYW1lLCBBQ0xfVFlQRV9BQ0NFU1MsIGFj bCkKKyAgICAgYW5kICAgICAgICAgICBhY2xfc2V0X2ZpbGUgKG5hbWUsIEFDTF9UWVBFX0RF RkFVTFQsIGFjbCkKKyAgICAgaGF2ZSB0aGUgc2FtZSBlZmZlY3QgYXMKKyAgICAgICAgICAg ICAgICAgICBhY2xfc2V0X2ZpbGUgKG5hbWUsIEFDTF9UWVBFX0VYVEVOREVELCBhY2wpOgor ICAgICBFYWNoIG9mIHRoZXNlIGNhbGxzIHNldHMgdGhlIGZpbGUncyBBQ0wuICAqLworCisg IGFjbF90IGFjbDsKKyAgaW50IHJldDsKKworICAvKiBSZW1vdmUgdGhlIEFDTCBpZiB0aGUg ZmlsZSBoYXMgQUNMcy4gICovCisgIGlmIChIQVZFX0FDTF9HRVRfRkQgJiYgZGVzYyAhPSAt MSkKKyAgICBhY2wgPSBhY2xfZ2V0X2ZkIChkZXNjKTsKKyAgZWxzZQorICAgIGFjbCA9IGFj bF9nZXRfZmlsZSAobmFtZSwgQUNMX1RZUEVfRVhURU5ERUQpOworICBpZiAoYWNsKQorICAg IHsKKyAgICAgIGFjbF9mcmVlIChhY2wpOworCisgICAgICBhY2wgPSBhY2xfaW5pdCAoMCk7 CisgICAgICBpZiAoYWNsKQorICAgICAgICB7CisgICAgICAgICAgaWYgKEhBVkVfQUNMX1NF VF9GRCAmJiBkZXNjICE9IC0xKQorICAgICAgICAgICAgcmV0ID0gYWNsX3NldF9mZCAoZGVz YywgYWNsKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICByZXQgPSBhY2xfc2V0X2Zp bGUgKG5hbWUsIEFDTF9UWVBFX0VYVEVOREVELCBhY2wpOworICAgICAgICAgIGlmIChyZXQg IT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaW50IHNhdmVkX2Vycm5vID0g ZXJybm87CisgICAgICAgICAgICAgIGFjbF9mcmVlIChhY2wpOworICAgICAgICAgICAgICBp ZiAoISBhY2xfZXJybm9fdmFsaWQgKHNhdmVkX2Vycm5vKSkKKyAgICAgICAgICAgICAgICBy ZXR1cm4gY2htb2Rfb3JfZmNobW9kIChuYW1lLCBkZXNjLCBtb2RlKTsKKyAgICAgICAgICAg ICAgZXJybm8gPSBzYXZlZF9lcnJubzsKKyAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAg ICAgICAgICAgfQorICAgICAgICAgIGFjbF9mcmVlIChhY2wpOworICAgICAgICB9CisgICAg fQorCisgIC8qIFNpbmNlICFNT0RFX0lOU0lERV9BQ0wsIHdlIGhhdmUgdG8gY2FsbCBjaG1v ZCBleHBsaWNpdGx5LiAgKi8KKyAgcmV0dXJuIGNobW9kX29yX2ZjaG1vZCAobmFtZSwgZGVz YywgbW9kZSk7CisjICBlbmRpZgorCisjIGVsaWYgSEFWRV9GQUNMICYmIGRlZmluZWQgR0VU QUNMIC8qIFNvbGFyaXMsIEN5Z3dpbiwgbm90IEhQLVVYICovCisKKyAgaW50IGRvbmVfc2V0 YWNsID0gMDsKKworIyAgaWZkZWYgQUNFX0dFVEFDTAorICAvKiBTb2xhcmlzIGFsc28gaGFz IGEgZGlmZmVyZW50IHZhcmlhbnQgb2YgQUNMcywgdXNlZCBpbiBaRlMgYW5kIE5GU3Y0Cisg ICAgIGZpbGUgc3lzdGVtcyAod2hlcmVhcyB0aGUgb3RoZXIgb25lcyBhcmUgdXNlZCBpbiBV RlMgZmlsZSBzeXN0ZW1zKS4gICovCisKKyAgLyogVGhlIGZsYWdzIGluIHRoZSBhY2VfdCBz dHJ1Y3R1cmUgY2hhbmdlZCBpbiBhIGJpbmFyeSBpbmNvbXBhdGlibGUgd2F5CisgICAgIHdo ZW4gQUNMX05PX1RSSVZJQUwgZXRjLiB3ZXJlIGludHJvZHVjZWQgaW4gPHN5cy9hY2wuaD4g dmVyc2lvbiAxLjE1LgorICAgICBIb3cgdG8gZGlzdGluZ3Vpc2ggdGhlIHR3byBjb252ZW50 aW9ucyBhdCBydW50aW1lPworICAgICBXZSBmZXRjaCB0aGUgZXhpc3RpbmcgQUNMLiAgSW4g dGhlIG9sZCBjb252ZW50aW9uLCB1c3VhbGx5IHRocmVlIEFDRXMgaGF2ZQorICAgICBhX2Zs YWdzID0gQUNFX09XTkVSIC8gQUNFX0dST1VQIC8gQUNFX09USEVSLCBpbiB0aGUgcmFuZ2Ug MHgwMTAwLi4weDA0MDAuCisgICAgIEluIHRoZSBuZXcgY29udmVudGlvbiwgdGhlc2UgdmFs dWVzIGFyZSBub3QgdXNlZC4gICovCisgIGludCBjb252ZW50aW9uOworCisgIHsKKyAgICAv KiBJbml0aWFsbHksIHRyeSB0byByZWFkIHRoZSBlbnRyaWVzIGludG8gYSBzdGFjay1hbGxv Y2F0ZWQgYnVmZmVyLgorICAgICAgIFVzZSBtYWxsb2MgaWYgaXQgZG9lcyBub3QgZml0LiAg Ki8KKyAgICBlbnVtCisgICAgICB7CisgICAgICAgIGFsbG9jX2luaXQgPSA0MDAwIC8gc2l6 ZW9mIChhY2VfdCksIC8qID49IDMgKi8KKyAgICAgICAgYWxsb2NfbWF4ID0gTUlOIChJTlRf TUFYLCBTSVpFX01BWCAvIHNpemVvZiAoYWNlX3QpKQorICAgICAgfTsKKyAgICBhY2VfdCBi dWZbYWxsb2NfaW5pdF07CisgICAgc2l6ZV90IGFsbG9jID0gYWxsb2NfaW5pdDsKKyAgICBh Y2VfdCAqZW50cmllcyA9IGJ1ZjsKKyAgICBhY2VfdCAqbWFsbG9jZWQgPSBOVUxMOworICAg IGludCBjb3VudDsKKworICAgIGZvciAoOzspCisgICAgICB7CisgICAgICAgIGNvdW50ID0g KGRlc2MgIT0gLTEKKyAgICAgICAgICAgICAgICAgPyBmYWNsIChkZXNjLCBBQ0VfR0VUQUNM LCBhbGxvYywgZW50cmllcykKKyAgICAgICAgICAgICAgICAgOiBhY2wgKG5hbWUsIEFDRV9H RVRBQ0wsIGFsbG9jLCBlbnRyaWVzKSk7CisgICAgICAgIGlmIChjb3VudCA8IDAgJiYgZXJy bm8gPT0gRU5PU1BDKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEluY3JlYXNlIHRo ZSBzaXplIG9mIHRoZSBidWZmZXIuICAqLworICAgICAgICAgICAgZnJlZSAobWFsbG9jZWQp OworICAgICAgICAgICAgaWYgKGFsbG9jID4gYWxsb2NfbWF4IC8gMikKKyAgICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgIGVycm5vID0gRU5PTUVNOworICAgICAgICAgICAgICAg IHJldHVybiAtMTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgYWxsb2MgPSAyICog YWxsb2M7IC8qIDw9IGFsbG9jX21heCAqLworICAgICAgICAgICAgZW50cmllcyA9IG1hbGxv Y2VkID0gKGFjZV90ICopIG1hbGxvYyAoYWxsb2MgKiBzaXplb2YgKGFjZV90KSk7CisgICAg ICAgICAgICBpZiAoZW50cmllcyA9PSBOVUxMKQorICAgICAgICAgICAgICB7CisgICAgICAg ICAgICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwor ICAgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICB9Cisg ICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgaWYgKGNvdW50IDw9IDApCisgICAgICBj b252ZW50aW9uID0gLTE7CisgICAgZWxzZQorICAgICAgeworICAgICAgICBpbnQgaTsKKwor ICAgICAgICBjb252ZW50aW9uID0gMDsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50 OyBpKyspCisgICAgICAgICAgaWYgKGVudHJpZXNbaV0uYV9mbGFncyAmIChPTERfQUNFX09X TkVSIHwgT0xEX0FDRV9HUk9VUCB8IE9MRF9BQ0VfT1RIRVIpKQorICAgICAgICAgICAgewor ICAgICAgICAgICAgICBjb252ZW50aW9uID0gMTsKKyAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICB9CisgICAgICB9CisgICAgZnJlZSAobWFsbG9jZWQpOworICB9CisKKyAg aWYgKGNvbnZlbnRpb24gPj0gMCkKKyAgICB7CisgICAgICBhY2VfdCBlbnRyaWVzWzZdOwor ICAgICAgaW50IGNvdW50OworICAgICAgaW50IHJldDsKKworICAgICAgaWYgKGNvbnZlbnRp b24pCisgICAgICAgIHsKKyAgICAgICAgICAvKiBSdW5uaW5nIG9uIFNvbGFyaXMgMTAuICAq LworICAgICAgICAgIGVudHJpZXNbMF0uYV90eXBlID0gT0xEX0FMTE9XOworICAgICAgICAg IGVudHJpZXNbMF0uYV9mbGFncyA9IE9MRF9BQ0VfT1dORVI7CisgICAgICAgICAgZW50cmll c1swXS5hX3dobyA9IDA7IC8qIGlycmVsZXZhbnQgKi8KKyAgICAgICAgICBlbnRyaWVzWzBd LmFfYWNjZXNzX21hc2sgPSAobW9kZSA+PiA2KSAmIDc7CisgICAgICAgICAgZW50cmllc1sx XS5hX3R5cGUgPSBPTERfQUxMT1c7CisgICAgICAgICAgZW50cmllc1sxXS5hX2ZsYWdzID0g T0xEX0FDRV9HUk9VUDsKKyAgICAgICAgICBlbnRyaWVzWzFdLmFfd2hvID0gMDsgLyogaXJy ZWxldmFudCAqLworICAgICAgICAgIGVudHJpZXNbMV0uYV9hY2Nlc3NfbWFzayA9IChtb2Rl ID4+IDMpICYgNzsKKyAgICAgICAgICBlbnRyaWVzWzJdLmFfdHlwZSA9IE9MRF9BTExPVzsK KyAgICAgICAgICBlbnRyaWVzWzJdLmFfZmxhZ3MgPSBPTERfQUNFX09USEVSOworICAgICAg ICAgIGVudHJpZXNbMl0uYV93aG8gPSAwOworICAgICAgICAgIGVudHJpZXNbMl0uYV9hY2Nl c3NfbWFzayA9IG1vZGUgJiA3OworICAgICAgICAgIGNvdW50ID0gMzsKKyAgICAgICAgfQor ICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgLyogUnVubmluZyBvbiBTb2xhcmlz IDEwIChuZXdlciB2ZXJzaW9uKSBvciBTb2xhcmlzIDExLgorICAgICAgICAgICAgIFRoZSBk ZXRhaWxzIGhlcmUgd2VyZSBmb3VuZCB0aHJvdWdoICIvYmluL2xzIC1sdmQgc29tZWZpbGVz Ii4gICovCisgICAgICAgICAgZW50cmllc1swXS5hX3R5cGUgPSBORVdfQUNFX0FDQ0VTU19E RU5JRURfQUNFX1RZUEU7CisgICAgICAgICAgZW50cmllc1swXS5hX2ZsYWdzID0gTkVXX0FD RV9PV05FUjsKKyAgICAgICAgICBlbnRyaWVzWzBdLmFfd2hvID0gMDsgLyogaXJyZWxldmFu dCAqLworICAgICAgICAgIGVudHJpZXNbMF0uYV9hY2Nlc3NfbWFzayA9IDA7CisgICAgICAg ICAgZW50cmllc1sxXS5hX3R5cGUgPSBORVdfQUNFX0FDQ0VTU19BTExPV0VEX0FDRV9UWVBF OworICAgICAgICAgIGVudHJpZXNbMV0uYV9mbGFncyA9IE5FV19BQ0VfT1dORVI7CisgICAg ICAgICAgZW50cmllc1sxXS5hX3dobyA9IDA7IC8qIGlycmVsZXZhbnQgKi8KKyAgICAgICAg ICBlbnRyaWVzWzFdLmFfYWNjZXNzX21hc2sgPSBORVdfQUNFX1dSSVRFX05BTUVEX0FUVFJT CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBORVdfQUNFX1dSSVRF X0FUVFJJQlVURVMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5F V19BQ0VfV1JJVEVfQUNMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCBORVdfQUNFX1dSSVRFX09XTkVSOworICAgICAgICAgIGlmIChtb2RlICYgMDQwMCkKKyAg ICAgICAgICAgIGVudHJpZXNbMV0uYV9hY2Nlc3NfbWFzayB8PSBORVdfQUNFX1JFQURfREFU QTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBlbnRyaWVzWzBdLmFfYWNjZXNzX21h c2sgfD0gTkVXX0FDRV9SRUFEX0RBVEE7CisgICAgICAgICAgaWYgKG1vZGUgJiAwMjAwKQor ICAgICAgICAgICAgZW50cmllc1sxXS5hX2FjY2Vzc19tYXNrIHw9IE5FV19BQ0VfV1JJVEVf REFUQSB8IE5FV19BQ0VfQVBQRU5EX0RBVEE7CisgICAgICAgICAgZWxzZQorICAgICAgICAg ICAgZW50cmllc1swXS5hX2FjY2Vzc19tYXNrIHw9IE5FV19BQ0VfV1JJVEVfREFUQSB8IE5F V19BQ0VfQVBQRU5EX0RBVEE7CisgICAgICAgICAgaWYgKG1vZGUgJiAwMTAwKQorICAgICAg ICAgICAgZW50cmllc1sxXS5hX2FjY2Vzc19tYXNrIHw9IE5FV19BQ0VfRVhFQ1VURTsKKyAg ICAgICAgICBlbHNlCisgICAgICAgICAgICBlbnRyaWVzWzBdLmFfYWNjZXNzX21hc2sgfD0g TkVXX0FDRV9FWEVDVVRFOworICAgICAgICAgIGVudHJpZXNbMl0uYV90eXBlID0gTkVXX0FD RV9BQ0NFU1NfREVOSUVEX0FDRV9UWVBFOworICAgICAgICAgIGVudHJpZXNbMl0uYV9mbGFn cyA9IE5FV19BQ0VfR1JPVVAgfCBORVdfQUNFX0lERU5USUZJRVJfR1JPVVA7CisgICAgICAg ICAgZW50cmllc1syXS5hX3dobyA9IDA7IC8qIGlycmVsZXZhbnQgKi8KKyAgICAgICAgICBl bnRyaWVzWzJdLmFfYWNjZXNzX21hc2sgPSAwOworICAgICAgICAgIGVudHJpZXNbM10uYV90 eXBlID0gTkVXX0FDRV9BQ0NFU1NfQUxMT1dFRF9BQ0VfVFlQRTsKKyAgICAgICAgICBlbnRy aWVzWzNdLmFfZmxhZ3MgPSBORVdfQUNFX0dST1VQIHwgTkVXX0FDRV9JREVOVElGSUVSX0dS T1VQOworICAgICAgICAgIGVudHJpZXNbM10uYV93aG8gPSAwOyAvKiBpcnJlbGV2YW50ICov CisgICAgICAgICAgZW50cmllc1szXS5hX2FjY2Vzc19tYXNrID0gMDsKKyAgICAgICAgICBp ZiAobW9kZSAmIDAwNDApCisgICAgICAgICAgICBlbnRyaWVzWzNdLmFfYWNjZXNzX21hc2sg fD0gTkVXX0FDRV9SRUFEX0RBVEE7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZW50 cmllc1syXS5hX2FjY2Vzc19tYXNrIHw9IE5FV19BQ0VfUkVBRF9EQVRBOworICAgICAgICAg IGlmIChtb2RlICYgMDAyMCkKKyAgICAgICAgICAgIGVudHJpZXNbM10uYV9hY2Nlc3NfbWFz ayB8PSBORVdfQUNFX1dSSVRFX0RBVEEgfCBORVdfQUNFX0FQUEVORF9EQVRBOworICAgICAg ICAgIGVsc2UKKyAgICAgICAgICAgIGVudHJpZXNbMl0uYV9hY2Nlc3NfbWFzayB8PSBORVdf QUNFX1dSSVRFX0RBVEEgfCBORVdfQUNFX0FQUEVORF9EQVRBOworICAgICAgICAgIGlmICht b2RlICYgMDAxMCkKKyAgICAgICAgICAgIGVudHJpZXNbM10uYV9hY2Nlc3NfbWFzayB8PSBO RVdfQUNFX0VYRUNVVEU7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZW50cmllc1sy XS5hX2FjY2Vzc19tYXNrIHw9IE5FV19BQ0VfRVhFQ1VURTsKKyAgICAgICAgICBlbnRyaWVz WzRdLmFfdHlwZSA9IE5FV19BQ0VfQUNDRVNTX0RFTklFRF9BQ0VfVFlQRTsKKyAgICAgICAg ICBlbnRyaWVzWzRdLmFfZmxhZ3MgPSBORVdfQUNFX0VWRVJZT05FOworICAgICAgICAgIGVu dHJpZXNbNF0uYV93aG8gPSAwOworICAgICAgICAgIGVudHJpZXNbNF0uYV9hY2Nlc3NfbWFz ayA9IE5FV19BQ0VfV1JJVEVfTkFNRURfQVRUUlMKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8IE5FV19BQ0VfV1JJVEVfQVRUUklCVVRFUworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgTkVXX0FDRV9XUklURV9BQ0wKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5FV19BQ0VfV1JJVEVfT1dORVI7Cisg ICAgICAgICAgZW50cmllc1s1XS5hX3R5cGUgPSBORVdfQUNFX0FDQ0VTU19BTExPV0VEX0FD RV9UWVBFOworICAgICAgICAgIGVudHJpZXNbNV0uYV9mbGFncyA9IE5FV19BQ0VfRVZFUllP TkU7CisgICAgICAgICAgZW50cmllc1s1XS5hX3dobyA9IDA7CisgICAgICAgICAgZW50cmll c1s1XS5hX2FjY2Vzc19tYXNrID0gTkVXX0FDRV9SRUFEX05BTUVEX0FUVFJTCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBORVdfQUNFX1JFQURfQVRUUklCVVRF UworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTkVXX0FDRV9SRUFE X0FDTAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTkVXX0FDRV9T WU5DSFJPTklaRTsKKyAgICAgICAgICBpZiAobW9kZSAmIDAwMDQpCisgICAgICAgICAgICBl bnRyaWVzWzVdLmFfYWNjZXNzX21hc2sgfD0gTkVXX0FDRV9SRUFEX0RBVEE7CisgICAgICAg ICAgZWxzZQorICAgICAgICAgICAgZW50cmllc1s0XS5hX2FjY2Vzc19tYXNrIHw9IE5FV19B Q0VfUkVBRF9EQVRBOworICAgICAgICAgIGlmIChtb2RlICYgMDAwMikKKyAgICAgICAgICAg IGVudHJpZXNbNV0uYV9hY2Nlc3NfbWFzayB8PSBORVdfQUNFX1dSSVRFX0RBVEEgfCBORVdf QUNFX0FQUEVORF9EQVRBOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVudHJpZXNb NF0uYV9hY2Nlc3NfbWFzayB8PSBORVdfQUNFX1dSSVRFX0RBVEEgfCBORVdfQUNFX0FQUEVO RF9EQVRBOworICAgICAgICAgIGlmIChtb2RlICYgMDAwMSkKKyAgICAgICAgICAgIGVudHJp ZXNbNV0uYV9hY2Nlc3NfbWFzayB8PSBORVdfQUNFX0VYRUNVVEU7CisgICAgICAgICAgZWxz ZQorICAgICAgICAgICAgZW50cmllc1s0XS5hX2FjY2Vzc19tYXNrIHw9IE5FV19BQ0VfRVhF Q1VURTsKKyAgICAgICAgICBjb3VudCA9IDY7CisgICAgICAgIH0KKyAgICAgIGlmIChkZXNj ICE9IC0xKQorICAgICAgICByZXQgPSBmYWNsIChkZXNjLCBBQ0VfU0VUQUNMLCBjb3VudCwg ZW50cmllcyk7CisgICAgICBlbHNlCisgICAgICAgIHJldCA9IGFjbCAobmFtZSwgQUNFX1NF VEFDTCwgY291bnQsIGVudHJpZXMpOworICAgICAgaWYgKHJldCA8IDAgJiYgZXJybm8gIT0g RUlOVkFMICYmIGVycm5vICE9IEVOT1RTVVApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAo ZXJybm8gPT0gRU5PU1lTKQorICAgICAgICAgICAgcmV0dXJuIGNobW9kX29yX2ZjaG1vZCAo bmFtZSwgZGVzYywgbW9kZSk7CisgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9Cisg ICAgICBpZiAocmV0ID09IDApCisgICAgICAgIGRvbmVfc2V0YWNsID0gMTsKKyAgICB9Cisj ICBlbmRpZgorCisgIGlmICghZG9uZV9zZXRhY2wpCisgICAgeworICAgICAgYWNsZW50X3Qg ZW50cmllc1szXTsKKyAgICAgIGludCByZXQ7CisKKyAgICAgIGVudHJpZXNbMF0uYV90eXBl ID0gVVNFUl9PQko7CisgICAgICBlbnRyaWVzWzBdLmFfaWQgPSAwOyAvKiBpcnJlbGV2YW50 ICovCisgICAgICBlbnRyaWVzWzBdLmFfcGVybSA9IChtb2RlID4+IDYpICYgNzsKKyAgICAg IGVudHJpZXNbMV0uYV90eXBlID0gR1JPVVBfT0JKOworICAgICAgZW50cmllc1sxXS5hX2lk ID0gMDsgLyogaXJyZWxldmFudCAqLworICAgICAgZW50cmllc1sxXS5hX3Blcm0gPSAobW9k ZSA+PiAzKSAmIDc7CisgICAgICBlbnRyaWVzWzJdLmFfdHlwZSA9IE9USEVSX09CSjsKKyAg ICAgIGVudHJpZXNbMl0uYV9pZCA9IDA7CisgICAgICBlbnRyaWVzWzJdLmFfcGVybSA9IG1v ZGUgJiA3OworCisgICAgICBpZiAoZGVzYyAhPSAtMSkKKyAgICAgICAgcmV0ID0gZmFjbCAo ZGVzYywgU0VUQUNMLAorICAgICAgICAgICAgICAgICAgICBzaXplb2YgKGVudHJpZXMpIC8g c2l6ZW9mIChhY2xlbnRfdCksIGVudHJpZXMpOworICAgICAgZWxzZQorICAgICAgICByZXQg PSBhY2wgKG5hbWUsIFNFVEFDTCwKKyAgICAgICAgICAgICAgICAgICBzaXplb2YgKGVudHJp ZXMpIC8gc2l6ZW9mIChhY2xlbnRfdCksIGVudHJpZXMpOworICAgICAgaWYgKHJldCA8IDAp CisgICAgICAgIHsKKyAgICAgICAgICBpZiAoZXJybm8gPT0gRU5PU1lTIHx8IGVycm5vID09 IEVPUE5PVFNVUFApCisgICAgICAgICAgICByZXR1cm4gY2htb2Rfb3JfZmNobW9kIChuYW1l LCBkZXNjLCBtb2RlKTsKKyAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9 CisKKyAgaWYgKCFNT0RFX0lOU0lERV9BQ0wgfHwgKG1vZGUgJiAoU19JU1VJRCB8IFNfSVNH SUQgfCBTX0lTVlRYKSkpCisgICAgeworICAgICAgLyogV2UgZGlkIG5vdCBjYWxsIGNobW9k IHNvIGZhciwgc28gdGhlIHNwZWNpYWwgYml0cyBoYXZlIG5vdCB5ZXQKKyAgICAgICAgIGJl ZW4gc2V0LiAgKi8KKyAgICAgIHJldHVybiBjaG1vZF9vcl9mY2htb2QgKG5hbWUsIGRlc2Ms IG1vZGUpOworICAgIH0KKyAgcmV0dXJuIDA7CisKKyMgZWxpZiBIQVZFX0dFVEFDTCAvKiBI UC1VWCAqLworCisgIHN0cnVjdCBzdGF0IHN0YXRidWY7CisgIGludCByZXQ7CisKKyAgaWYg KGRlc2MgIT0gLTEpCisgICAgcmV0ID0gZnN0YXQgKGRlc2MsICZzdGF0YnVmKTsKKyAgZWxz ZQorICAgIHJldCA9IHN0YXQgKG5hbWUsICZzdGF0YnVmKTsKKyAgaWYgKHJldCA8IDApCisg ICAgcmV0dXJuIC0xOworCisgIHsKKyAgICBzdHJ1Y3QgYWNsX2VudHJ5IGVudHJpZXNbM107 CisKKyAgICBlbnRyaWVzWzBdLnVpZCA9IHN0YXRidWYuc3RfdWlkOworICAgIGVudHJpZXNb MF0uZ2lkID0gQUNMX05TR1JPVVA7CisgICAgZW50cmllc1swXS5tb2RlID0gKG1vZGUgPj4g NikgJiA3OworICAgIGVudHJpZXNbMV0udWlkID0gQUNMX05TVVNFUjsKKyAgICBlbnRyaWVz WzFdLmdpZCA9IHN0YXRidWYuc3RfZ2lkOworICAgIGVudHJpZXNbMV0ubW9kZSA9IChtb2Rl ID4+IDMpICYgNzsKKyAgICBlbnRyaWVzWzJdLnVpZCA9IEFDTF9OU1VTRVI7CisgICAgZW50 cmllc1syXS5naWQgPSBBQ0xfTlNHUk9VUDsKKyAgICBlbnRyaWVzWzJdLm1vZGUgPSBtb2Rl ICYgNzsKKworICAgIGlmIChkZXNjICE9IC0xKQorICAgICAgcmV0ID0gZnNldGFjbCAoZGVz Yywgc2l6ZW9mIChlbnRyaWVzKSAvIHNpemVvZiAoc3RydWN0IGFjbF9lbnRyeSksIGVudHJp ZXMpOworICAgIGVsc2UKKyAgICAgIHJldCA9IHNldGFjbCAobmFtZSwgc2l6ZW9mIChlbnRy aWVzKSAvIHNpemVvZiAoc3RydWN0IGFjbF9lbnRyeSksIGVudHJpZXMpOworICB9CisgIGlm IChyZXQgPCAwKQorICAgIHsKKyAgICAgIGlmICghKGVycm5vID09IEVOT1NZUyB8fCBlcnJu byA9PSBFT1BOT1RTVVBQIHx8IGVycm5vID09IEVOT1RTVVApKQorICAgICAgICByZXR1cm4g LTE7CisKKyMgIGlmIEhBVkVfQUNMVl9IIC8qIEhQLVVYID49IDExLjExICovCisgICAgICB7 CisgICAgICAgIHN0cnVjdCBhY2wgZW50cmllc1s0XTsKKworICAgICAgICBlbnRyaWVzWzBd LmFfdHlwZSA9IFVTRVJfT0JKOworICAgICAgICBlbnRyaWVzWzBdLmFfaWQgPSAwOyAvKiBp cnJlbGV2YW50ICovCisgICAgICAgIGVudHJpZXNbMF0uYV9wZXJtID0gKG1vZGUgPj4gNikg JiA3OworICAgICAgICBlbnRyaWVzWzFdLmFfdHlwZSA9IEdST1VQX09CSjsKKyAgICAgICAg ZW50cmllc1sxXS5hX2lkID0gMDsgLyogaXJyZWxldmFudCAqLworICAgICAgICBlbnRyaWVz WzFdLmFfcGVybSA9IChtb2RlID4+IDMpICYgNzsKKyAgICAgICAgZW50cmllc1syXS5hX3R5 cGUgPSBDTEFTU19PQko7CisgICAgICAgIGVudHJpZXNbMl0uYV9pZCA9IDA7CisgICAgICAg IGVudHJpZXNbMl0uYV9wZXJtID0gKG1vZGUgPj4gMykgJiA3OworICAgICAgICBlbnRyaWVz WzNdLmFfdHlwZSA9IE9USEVSX09CSjsKKyAgICAgICAgZW50cmllc1szXS5hX2lkID0gMDsK KyAgICAgICAgZW50cmllc1szXS5hX3Blcm0gPSBtb2RlICYgNzsKKworICAgICAgICByZXQg PSBhY2xzb3J0IChzaXplb2YgKGVudHJpZXMpIC8gc2l6ZW9mIChzdHJ1Y3QgYWNsKSwgMSwg ZW50cmllcyk7CisgICAgICAgIGlmIChyZXQgPiAwKQorICAgICAgICAgIGFib3J0ICgpOwor ICAgICAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoMCkK KyAgICAgICAgICAgICAgcmV0dXJuIGNobW9kX29yX2ZjaG1vZCAobmFtZSwgZGVzYywgbW9k ZSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgfQorCisgICAgICAgIHJl dCA9IGFjbCAoKGNoYXIgKikgbmFtZSwgQUNMX1NFVCwKKyAgICAgICAgICAgICAgICAgICBz aXplb2YgKGVudHJpZXMpIC8gc2l6ZW9mIChzdHJ1Y3QgYWNsKSwgZW50cmllcyk7CisgICAg ICAgIGlmIChyZXQgPCAwKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChlcnJubyA9 PSBFTk9TWVMgfHwgZXJybm8gPT0gRU9QTk9UU1VQUCB8fCBlcnJubyA9PSBFSU5WQUwpCisg ICAgICAgICAgICAgIHJldHVybiBjaG1vZF9vcl9mY2htb2QgKG5hbWUsIGRlc2MsIG1vZGUp OworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgIH0KKyAgICAgIH0KKyMgIGVs c2UKKyAgICAgIHJldHVybiBjaG1vZF9vcl9mY2htb2QgKG5hbWUsIGRlc2MsIG1vZGUpOwor IyAgZW5kaWYKKyAgICB9CisKKyAgaWYgKG1vZGUgJiAoU19JU1VJRCB8IFNfSVNHSUQgfCBT X0lTVlRYKSkKKyAgICB7CisgICAgICAvKiBXZSBkaWQgbm90IGNhbGwgY2htb2Qgc28gZmFy LCBzbyB0aGUgc3BlY2lhbCBiaXRzIGhhdmUgbm90IHlldAorICAgICAgICAgYmVlbiBzZXQu ICAqLworICAgICAgcmV0dXJuIGNobW9kX29yX2ZjaG1vZCAobmFtZSwgZGVzYywgbW9kZSk7 CisgICAgfQorICByZXR1cm4gMDsKKworIyBlbGlmIEhBVkVfQUNMWF9HRVQgJiYgZGVmaW5l ZCBBQ0xfQUlYX1dJUCAvKiBBSVggKi8KKworICBhY2xfdHlwZV9saXN0X3QgdHlwZXM7Cisg IHNpemVfdCB0eXBlc19zaXplID0gc2l6ZW9mICh0eXBlcyk7CisgIGFjbF90eXBlX3QgdHlw ZTsKKworICBpZiAoYWNseF9nZXR0eXBlcyAobmFtZSwgJnR5cGVzLCAmdHlwZXNfc2l6ZSkg PCAwCisgICAgICB8fCB0eXBlcy5udW1fZW50cmllcyA9PSAwKQorICAgIHJldHVybiBjaG1v ZF9vcl9mY2htb2QgKG5hbWUsIGRlc2MsIG1vZGUpOworCisgIC8qIFhYWCBEbyB3ZSBuZWVk IHRvIGNsZWFyIGFsbCB0eXBlcyBvZiBBQ0xzIGZvciB0aGUgZ2l2ZW4gZmlsZSwgb3IgaXMg aXQKKyAgICAgc3VmZmljaWVudCB0byBjbGVhciB0aGUgZmlyc3Qgb25lPyAgKi8KKyAgdHlw ZSA9IHR5cGVzLmVudHJpZXNbMF07CisgIGlmICh0eXBlLnU2NCA9PSBBQ0xfQUlYQykKKyAg ICB7CisgICAgICB1bmlvbiB7IHN0cnVjdCBhY2wgYTsgY2hhciByb29tWzEyOF07IH0gdTsK KyAgICAgIGludCByZXQ7CisKKyAgICAgIHUuYS5hY2xfbGVuID0gKGNoYXIgKikgJnUuYS5h Y2xfZXh0WzBdIC0gKGNoYXIgKikgJnUuYTsgLyogbm8gZW50cmllcyAqLworICAgICAgdS5h LmFjbF9tb2RlID0gbW9kZSAmIH4oU19JWEFDTCB8IDA3NzcpOworICAgICAgdS5hLnVfYWNj ZXNzID0gKG1vZGUgPj4gNikgJiA3OworICAgICAgdS5hLmdfYWNjZXNzID0gKG1vZGUgPj4g MykgJiA3OworICAgICAgdS5hLm9fYWNjZXNzID0gbW9kZSAmIDc7CisKKyAgICAgIGlmIChk ZXNjICE9IC0xKQorICAgICAgICByZXQgPSBhY2x4X2ZwdXQgKGRlc2MsIFNFVF9BQ0wgfCBT RVRfTU9ERV9TX0JJVFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwgJnUuYSwg dS5hLmFjbF9sZW4sIG1vZGUpOworICAgICAgZWxzZQorICAgICAgICByZXQgPSBhY2x4X3B1 dCAobmFtZSwgU0VUX0FDTCB8IFNFVF9NT0RFX1NfQklUUywKKyAgICAgICAgICAgICAgICAg ICAgICAgIHR5cGUsICZ1LmEsIHUuYS5hY2xfbGVuLCBtb2RlKTsKKyAgICAgIGlmICghKHJl dCA8IDAgJiYgZXJybm8gPT0gRU5PU1lTKSkKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9 CisgIGVsc2UgaWYgKHR5cGUudTY0ID09IEFDTF9ORlM0KQorICAgIHsKKyAgICAgIHVuaW9u IHsgbmZzNF9hY2xfaW50X3QgYTsgY2hhciByb29tWzEyOF07IH0gdTsKKyAgICAgIG5mczRf YWNlX2ludF90ICphY2U7CisgICAgICBpbnQgcmV0OworCisgICAgICB1LmEuYWNsVmVyc2lv biA9IE5GUzRfQUNMX0lOVF9TVFJVQ1RfVkVSU0lPTjsKKyAgICAgIHUuYS5hY2xFbnRyeU4g PSAwOworICAgICAgYWNlID0gJnUuYS5hY2xFbnRyeVswXTsKKyAgICAgIHsKKyAgICAgICAg YWNlLT5mbGFncyA9IEFDRTRfSURfU1BFQ0lBTDsKKyAgICAgICAgYWNlLT5hY2VXaG8uc3Bl Y2lhbF93aG9pZCA9IEFDRTRfV0hPX09XTkVSOworICAgICAgICBhY2UtPmFjZVR5cGUgPSBB Q0U0X0FDQ0VTU19BTExPV0VEX0FDRV9UWVBFOworICAgICAgICBhY2UtPmFjZUZsYWdzID0g MDsKKyAgICAgICAgYWNlLT5hY2VNYXNrID0KKyAgICAgICAgICAobW9kZSAmIDA0MDAgPyBB Q0U0X1JFQURfREFUQSB8IEFDRTRfTElTVF9ESVJFQ1RPUlkgOiAwKQorICAgICAgICAgIHwg KG1vZGUgJiAwMjAwCisgICAgICAgICAgICAgPyBBQ0U0X1dSSVRFX0RBVEEgfCBBQ0U0X0FE RF9GSUxFIHwgQUNFNF9BUFBFTkRfREFUQQorICAgICAgICAgICAgICAgfCBBQ0U0X0FERF9T VUJESVJFQ1RPUlkKKyAgICAgICAgICAgICA6IDApCisgICAgICAgICAgfCAobW9kZSAmIDAx MDAgPyBBQ0U0X0VYRUNVVEUgOiAwKTsKKyAgICAgICAgYWNlLT5hY2VXaG9TdHJpbmdbMF0g PSAnXDAnOworICAgICAgICBhY2UtPmVudHJ5TGVuID0gKGNoYXIgKikgJmFjZS0+YWNlV2hv U3RyaW5nWzRdIC0gKGNoYXIgKikgYWNlOworICAgICAgICBhY2UgPSAobmZzNF9hY2VfaW50 X3QgKikgKGNoYXIgKikgJmFjZS0+YWNlV2hvU3RyaW5nWzRdOworICAgICAgICB1LmEuYWNs RW50cnlOKys7CisgICAgICB9CisgICAgICB7CisgICAgICAgIGFjZS0+ZmxhZ3MgPSBBQ0U0 X0lEX1NQRUNJQUw7CisgICAgICAgIGFjZS0+YWNlV2hvLnNwZWNpYWxfd2hvaWQgPSBBQ0U0 X1dIT19HUk9VUDsKKyAgICAgICAgYWNlLT5hY2VUeXBlID0gQUNFNF9BQ0NFU1NfQUxMT1dF RF9BQ0VfVFlQRTsKKyAgICAgICAgYWNlLT5hY2VGbGFncyA9IDA7CisgICAgICAgIGFjZS0+ YWNlTWFzayA9CisgICAgICAgICAgKG1vZGUgJiAwMDQwID8gQUNFNF9SRUFEX0RBVEEgfCBB Q0U0X0xJU1RfRElSRUNUT1JZIDogMCkKKyAgICAgICAgICB8IChtb2RlICYgMDAyMAorICAg ICAgICAgICAgID8gQUNFNF9XUklURV9EQVRBIHwgQUNFNF9BRERfRklMRSB8IEFDRTRfQVBQ RU5EX0RBVEEKKyAgICAgICAgICAgICAgIHwgQUNFNF9BRERfU1VCRElSRUNUT1JZCisgICAg ICAgICAgICAgOiAwKQorICAgICAgICAgIHwgKG1vZGUgJiAwMDEwID8gQUNFNF9FWEVDVVRF IDogMCk7CisgICAgICAgIGFjZS0+YWNlV2hvU3RyaW5nWzBdID0gJ1wwJzsKKyAgICAgICAg YWNlLT5lbnRyeUxlbiA9IChjaGFyICopICZhY2UtPmFjZVdob1N0cmluZ1s0XSAtIChjaGFy ICopIGFjZTsKKyAgICAgICAgYWNlID0gKG5mczRfYWNlX2ludF90ICopIChjaGFyICopICZh Y2UtPmFjZVdob1N0cmluZ1s0XTsKKyAgICAgICAgdS5hLmFjbEVudHJ5TisrOworICAgICAg fQorICAgICAgeworICAgICAgICBhY2UtPmZsYWdzID0gQUNFNF9JRF9TUEVDSUFMOworICAg ICAgICBhY2UtPmFjZVdoby5zcGVjaWFsX3dob2lkID0gQUNFNF9XSE9fRVZFUllPTkU7Cisg ICAgICAgIGFjZS0+YWNlVHlwZSA9IEFDRTRfQUNDRVNTX0FMTE9XRURfQUNFX1RZUEU7Cisg ICAgICAgIGFjZS0+YWNlRmxhZ3MgPSAwOworICAgICAgICBhY2UtPmFjZU1hc2sgPQorICAg ICAgICAgIChtb2RlICYgMDAwNCA/IEFDRTRfUkVBRF9EQVRBIHwgQUNFNF9MSVNUX0RJUkVD VE9SWSA6IDApCisgICAgICAgICAgfCAobW9kZSAmIDAwMDIKKyAgICAgICAgICAgICA/IEFD RTRfV1JJVEVfREFUQSB8IEFDRTRfQUREX0ZJTEUgfCBBQ0U0X0FQUEVORF9EQVRBCisgICAg ICAgICAgICAgICB8IEFDRTRfQUREX1NVQkRJUkVDVE9SWQorICAgICAgICAgICAgIDogMCkK KyAgICAgICAgICB8IChtb2RlICYgMDAwMSA/IEFDRTRfRVhFQ1VURSA6IDApOworICAgICAg ICBhY2UtPmFjZVdob1N0cmluZ1swXSA9ICdcMCc7CisgICAgICAgIGFjZS0+ZW50cnlMZW4g PSAoY2hhciAqKSAmYWNlLT5hY2VXaG9TdHJpbmdbNF0gLSAoY2hhciAqKSBhY2U7CisgICAg ICAgIGFjZSA9IChuZnM0X2FjZV9pbnRfdCAqKSAoY2hhciAqKSAmYWNlLT5hY2VXaG9TdHJp bmdbNF07CisgICAgICAgIHUuYS5hY2xFbnRyeU4rKzsKKyAgICAgIH0KKyAgICAgIHUuYS5h Y2xMZW5ndGggPSAoY2hhciAqKSBhY2UgLSAoY2hhciAqKSAmdS5hOworCisgICAgICBpZiAo ZGVzYyAhPSAtMSkKKyAgICAgICAgcmV0ID0gYWNseF9mcHV0IChkZXNjLCBTRVRfQUNMIHwg U0VUX01PREVfU19CSVRTLAorICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsICZ1LmEs IHUuYS5hY2xMZW5ndGgsIG1vZGUpOworICAgICAgZWxzZQorICAgICAgICByZXQgPSBhY2x4 X3B1dCAobmFtZSwgU0VUX0FDTCB8IFNFVF9NT0RFX1NfQklUUywKKyAgICAgICAgICAgICAg ICAgICAgICAgIHR5cGUsICZ1LmEsIHUuYS5hY2xMZW5ndGgsIG1vZGUpOworICAgICAgaWYg KCEocmV0IDwgMCAmJiBlcnJubyA9PSBFTk9TWVMpKQorICAgICAgICByZXR1cm4gcmV0Owor ICAgIH0KKworICByZXR1cm4gY2htb2Rfb3JfZmNobW9kIChuYW1lLCBkZXNjLCBtb2RlKTsK KworIyBlbGlmIEhBVkVfU1RBVEFDTCAvKiBvbGRlciBBSVggKi8KKworICB1bmlvbiB7IHN0 cnVjdCBhY2wgYTsgY2hhciByb29tWzEyOF07IH0gdTsKKyAgaW50IHJldDsKKworICB1LmEu YWNsX2xlbiA9IChjaGFyICopICZ1LmEuYWNsX2V4dFswXSAtIChjaGFyICopICZ1LmE7IC8q IG5vIGVudHJpZXMgKi8KKyAgdS5hLmFjbF9tb2RlID0gbW9kZSAmIH4oU19JWEFDTCB8IDA3 NzcpOworICB1LmEudV9hY2Nlc3MgPSAobW9kZSA+PiA2KSAmIDc7CisgIHUuYS5nX2FjY2Vz cyA9IChtb2RlID4+IDMpICYgNzsKKyAgdS5hLm9fYWNjZXNzID0gbW9kZSAmIDc7CisKKyAg aWYgKGRlc2MgIT0gLTEpCisgICAgcmV0ID0gZmNoYWNsIChkZXNjLCAmdS5hLCB1LmEuYWNs X2xlbik7CisgIGVsc2UKKyAgICByZXQgPSBjaGFjbCAobmFtZSwgJnUuYSwgdS5hLmFjbF9s ZW4pOworCisgIGlmIChyZXQgPCAwICYmIGVycm5vID09IEVOT1NZUykKKyAgICByZXR1cm4g Y2htb2Rfb3JfZmNobW9kIChuYW1lLCBkZXNjLCBtb2RlKTsKKworICByZXR1cm4gcmV0Owor CisjIGVsaWYgSEFWRV9BQ0xTT1JUIC8qIE5vblN0b3AgS2VybmVsICovCisKKyAgc3RydWN0 IGFjbCBlbnRyaWVzWzRdOworICBpbnQgcmV0OworCisgIGVudHJpZXNbMF0uYV90eXBlID0g VVNFUl9PQko7CisgIGVudHJpZXNbMF0uYV9pZCA9IDA7IC8qIGlycmVsZXZhbnQgKi8KKyAg ZW50cmllc1swXS5hX3Blcm0gPSAobW9kZSA+PiA2KSAmIDc7CisgIGVudHJpZXNbMV0uYV90 eXBlID0gR1JPVVBfT0JKOworICBlbnRyaWVzWzFdLmFfaWQgPSAwOyAvKiBpcnJlbGV2YW50 ICovCisgIGVudHJpZXNbMV0uYV9wZXJtID0gKG1vZGUgPj4gMykgJiA3OworICBlbnRyaWVz WzJdLmFfdHlwZSA9IENMQVNTX09CSjsKKyAgZW50cmllc1syXS5hX2lkID0gMDsKKyAgZW50 cmllc1syXS5hX3Blcm0gPSAobW9kZSA+PiAzKSAmIDc7CisgIGVudHJpZXNbM10uYV90eXBl ID0gT1RIRVJfT0JKOworICBlbnRyaWVzWzNdLmFfaWQgPSAwOworICBlbnRyaWVzWzNdLmFf cGVybSA9IG1vZGUgJiA3OworCisgIHJldCA9IGFjbHNvcnQgKHNpemVvZiAoZW50cmllcykg LyBzaXplb2YgKHN0cnVjdCBhY2wpLCAxLCBlbnRyaWVzKTsKKyAgaWYgKHJldCA+IDApCisg ICAgYWJvcnQgKCk7CisgIGlmIChyZXQgPCAwKQorICAgIHsKKyAgICAgIGlmICgwKQorICAg ICAgICByZXR1cm4gY2htb2Rfb3JfZmNobW9kIChuYW1lLCBkZXNjLCBtb2RlKTsKKyAgICAg IHJldHVybiAtMTsKKyAgICB9CisKKyAgcmV0ID0gYWNsICgoY2hhciAqKSBuYW1lLCBBQ0xf U0VULAorICAgICAgICAgICAgIHNpemVvZiAoZW50cmllcykgLyBzaXplb2YgKHN0cnVjdCBh Y2wpLCBlbnRyaWVzKTsKKyAgaWYgKHJldCA8IDApCisgICAgeworICAgICAgaWYgKDApCisg ICAgICAgIHJldHVybiBjaG1vZF9vcl9mY2htb2QgKG5hbWUsIGRlc2MsIG1vZGUpOworICAg ICAgcmV0dXJuIC0xOworICAgIH0KKworICBpZiAobW9kZSAmIChTX0lTVUlEIHwgU19JU0dJ RCB8IFNfSVNWVFgpKQorICAgIHsKKyAgICAgIC8qIFdlIGRpZCBub3QgY2FsbCBjaG1vZCBz byBmYXIsIHNvIHRoZSBzcGVjaWFsIGJpdHMgaGF2ZSBub3QgeWV0CisgICAgICAgICBiZWVu IHNldC4gICovCisgICAgICByZXR1cm4gY2htb2Rfb3JfZmNobW9kIChuYW1lLCBkZXNjLCBt b2RlKTsKKyAgICB9CisgIHJldHVybiAwOworCisjIGVsc2UgLyogVW5rbm93biBmbGF2b3Ig b2YgQUNMcyAqLworICByZXR1cm4gY2htb2Rfb3JfZmNobW9kIChuYW1lLCBkZXNjLCBtb2Rl KTsKKyMgZW5kaWYKKyNlbHNlIC8qICFVU0VfQUNMICovCisgIHJldHVybiBjaG1vZF9vcl9m Y2htb2QgKG5hbWUsIGRlc2MsIG1vZGUpOworI2VuZGlmCit9Cgo9PT0gYWRkZWQgZmlsZSAn bTQvYWNsLm00JwotLS0gbTQvYWNsLm00CTE5NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDAKKysr IG00L2FjbC5tNAkyMDEzLTA0LTE3IDA1OjIxOjMzICswMDAwCkBAIC0wLDAgKzEsMTY0IEBA CisjIGFjbC5tNCAtIGNoZWNrIGZvciBhY2Nlc3MgY29udHJvbCBsaXN0IChBQ0wpIHByaW1p dGl2ZXMKKyMgc2VyaWFsIDE1CisKKyMgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA0LTIwMTMg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNv ZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRl ZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Ig d2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNl cnZlZC4KKworIyBXcml0dGVuIGJ5IFBhdWwgRWdnZXJ0IGFuZCBKaW0gTWV5ZXJpbmcuCisK K0FDX0RFRlVOKFtnbF9GVU5DX0FDTF0sCitbCisgIEFDX0FSR19FTkFCTEUoW2FjbF0sCisg ICAgQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1hY2xdLCBbZG8gbm90IHN1cHBvcnQgQUNM c10pLAorICAgICwgW2VuYWJsZV9hY2w9YXV0b10pCisKKyAgTElCX0FDTD0KKyAgdXNlX2Fj bD0wCisgIGlmIHRlc3QgIngkZW5hYmxlX2FjbCIgIT0gInhubyI7IHRoZW4KKyAgICBkbmwg T24gYWxsIHBsYXRmb3JtcywgdGhlIEFDTCByZWxhdGVkIEFQSSBpcyBkZWNsYXJlZCBpbiA8 c3lzL2FjbC5oPi4KKyAgICBBQ19DSEVDS19IRUFERVJTKFtzeXMvYWNsLmhdKQorICAgIGlm IHRlc3QgJGFjX2N2X2hlYWRlcl9zeXNfYWNsX2ggPSB5ZXM7IHRoZW4KKyAgICAgIGFjX3Nh dmVfTElCUz0kTElCUworCisgICAgICBkbmwgVGVzdCBmb3IgUE9TSVgtZHJhZnQtbGlrZSBB UEkgKExpbnV4LCBGcmVlQlNELCBNYWMgT1MgWCwgSVJJWCwgVHJ1NjQpLgorICAgICAgZG5s IC1sYWNsIGlzIG5lZWRlZCBvbiBMaW51eCwgLWxwYWNsIGlzIG5lZWRlZCBvbiBPU0YvMS4K KyAgICAgIGlmIHRlc3QgJHVzZV9hY2wgPSAwOyB0aGVuCisgICAgICAgIEFDX1NFQVJDSF9M SUJTKFthY2xfZ2V0X2ZpbGVdLCBbYWNsIHBhY2xdLAorICAgICAgICAgIFtpZiB0ZXN0ICIk YWNfY3Zfc2VhcmNoX2FjbF9nZXRfZmlsZSIgIT0gIm5vbmUgcmVxdWlyZWQiOyB0aGVuCisg ICAgICAgICAgICAgTElCX0FDTD0kYWNfY3Zfc2VhcmNoX2FjbF9nZXRfZmlsZQorICAgICAg ICAgICBmaQorICAgICAgICAgICBBQ19DSEVDS19GVU5DUygKKyAgICAgICAgICAgICBbYWNs X2dldF9maWxlIGFjbF9nZXRfZmQgYWNsX3NldF9maWxlIGFjbF9zZXRfZmQgXAorICAgICAg ICAgICAgICBhY2xfZnJlZSBhY2xfZnJvbV9tb2RlIGFjbF9mcm9tX3RleHQgXAorICAgICAg ICAgICAgICBhY2xfZGVsZXRlX2RlZl9maWxlIGFjbF9leHRlbmRlZF9maWxlIFwKKyAgICAg ICAgICAgICAgYWNsX2RlbGV0ZV9mZF9ucCBhY2xfZGVsZXRlX2ZpbGVfbnAgXAorICAgICAg ICAgICAgICBhY2xfY29weV9leHRfbmF0aXZlIGFjbF9jcmVhdGVfZW50cnlfbnAgXAorICAg ICAgICAgICAgICBhY2xfdG9fc2hvcnRfdGV4dCBhY2xfZnJlZV90ZXh0XSkKKyAgICAgICAg ICAgIyBJZiB0aGUgYWNsX2dldF9maWxlIGJ1ZyBpcyBkZXRlY3RlZCwgZG9uJ3QgZW5hYmxl IHRoZSBBQ0wgc3VwcG9ydC4KKyAgICAgICAgICAgZ2xfQUNMX0dFVF9GSUxFKFt1c2VfYWNs PTFdLCBbXSkKKyAgICAgICAgICAgaWYgdGVzdCAkdXNlX2FjbCA9IDE7IHRoZW4KKyAgICAg ICAgICAgICBkbmwgT24gTGludXgsIGFkZGl0aW9uYWwgQVBJIGlzIGRlY2xhcmVkIGluIDxh Y2wvbGliYWNsLmg+LgorICAgICAgICAgICAgIEFDX0NIRUNLX0hFQURFUlMoW2FjbC9saWJh Y2wuaF0pCisgICAgICAgICAgICAgQUNfUkVQTEFDRV9GVU5DUyhbYWNsX2VudHJpZXNdKQor ICAgICAgICAgICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgQUNMX0ZJUlNUX0VOVFJZXSwKKyAg ICAgICAgICAgICAgIFtnbF9jdl9hY2xfQUNMX0ZJUlNUX0VOVFJZXSwKKyAgICAgICAgICAg ICAgIFtBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKAorW1sjaW5jbHVkZSA8 c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL2FjbC5oPgoraW50IHR5cGUgPSBBQ0xfRklS U1RfRU5UUlk7XV0pXSwKKyAgICAgICAgICAgICAgICAgIFtnbF9jdl9hY2xfQUNMX0ZJUlNU X0VOVFJZPXllc10sCisgICAgICAgICAgICAgICAgICBbZ2xfY3ZfYWNsX0FDTF9GSVJTVF9F TlRSWT1ub10pXSkKKyAgICAgICAgICAgICBpZiB0ZXN0ICRnbF9jdl9hY2xfQUNMX0ZJUlNU X0VOVFJZID0geWVzOyB0aGVuCisgICAgICAgICAgICAgICBBQ19ERUZJTkUoW0hBVkVfQUNM X0ZJUlNUX0VOVFJZXSwgWzFdLAorICAgICAgICAgICAgICAgICBbRGVmaW5lIHRvIDEgaWYg dGhlIGNvbnN0YW50IEFDTF9GSVJTVF9FTlRSWSBleGlzdHMuXSkKKyAgICAgICAgICAgICBm aQorICAgICAgICAgICAgIGRubCBPbiBNYWMgT1MgWCwgb3RoZXIgdHlwZXMgb2YgQUNMcyBh cmUgc3VwcG9ydGVkLgorICAgICAgICAgICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgQUNMX1RZ UEVfRVhURU5ERURdLAorICAgICAgICAgICAgICAgW2dsX2N2X2FjbF9BQ0xfVFlQRV9FWFRF TkRFRF0sCisgICAgICAgICAgICAgICBbQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJP R1JBTSgKK1tbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9hY2wuaD4K K2ludCB0eXBlID0gQUNMX1RZUEVfRVhURU5ERUQ7XV0pXSwKKyAgICAgICAgICAgICAgICAg IFtnbF9jdl9hY2xfQUNMX1RZUEVfRVhURU5ERUQ9eWVzXSwKKyAgICAgICAgICAgICAgICAg IFtnbF9jdl9hY2xfQUNMX1RZUEVfRVhURU5ERUQ9bm9dKV0pCisgICAgICAgICAgICAgaWYg dGVzdCAkZ2xfY3ZfYWNsX0FDTF9UWVBFX0VYVEVOREVEID0geWVzOyB0aGVuCisgICAgICAg ICAgICAgICBBQ19ERUZJTkUoW0hBVkVfQUNMX1RZUEVfRVhURU5ERURdLCBbMV0sCisgICAg ICAgICAgICAgICAgIFtEZWZpbmUgdG8gMSBpZiB0aGUgQUNMIHR5cGUgQUNMX1RZUEVfRVhU RU5ERUQgZXhpc3RzLl0pCisgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgZWxzZQorICAg ICAgICAgICAgIExJQl9BQ0w9CisgICAgICAgICAgIGZpCisgICAgICAgICAgXSkKKyAgICAg IGZpCisKKyAgICAgIGRubCBUZXN0IGZvciBTb2xhcmlzIEFQSSAoU29sYXJpcywgQ3lnd2lu KS4KKyAgICAgIGlmIHRlc3QgJHVzZV9hY2wgPSAwOyB0aGVuCisgICAgICAgIEFDX0NIRUNL X0ZVTkNTKFtmYWNsXSkKKyAgICAgICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19mYWNsID0geWVz OyB0aGVuCisgICAgICAgICAgQUNfU0VBUkNIX0xJQlMoW2FjbF90cml2aWFsXSwgW3NlY10s CisgICAgICAgICAgICBbaWYgdGVzdCAiJGFjX2N2X3NlYXJjaF9hY2xfdHJpdmlhbCIgIT0g Im5vbmUgcmVxdWlyZWQiOyB0aGVuCisgICAgICAgICAgICAgICBMSUJfQUNMPSRhY19jdl9z ZWFyY2hfYWNsX3RyaXZpYWwKKyAgICAgICAgICAgICBmaQorICAgICAgICAgICAgXSkKKyAg ICAgICAgICBBQ19DSEVDS19GVU5DUyhbYWNsX3RyaXZpYWxdKQorICAgICAgICAgIHVzZV9h Y2w9MQorICAgICAgICBmaQorICAgICAgZmkKKworICAgICAgZG5sIFRlc3QgZm9yIEhQLVVY IEFQSS4KKyAgICAgIGlmIHRlc3QgJHVzZV9hY2wgPSAwOyB0aGVuCisgICAgICAgIEFDX0NI RUNLX0ZVTkNTKFtnZXRhY2xdKQorICAgICAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX2dldGFj bCA9IHllczsgdGhlbgorICAgICAgICAgIHVzZV9hY2w9MQorICAgICAgICBmaQorICAgICAg ICBkbmwgVGVzdCBmb3IgSFAtVVggMTEuMTEgQVBJLgorICAgICAgICBBQ19DSEVDS19IRUFE RVJTKFthY2x2LmhdLCBbXSwgW10sIFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+XSkKKyAgICAg IGZpCisKKyAgICAgIGRubCBUZXN0IGZvciBBSVggQVBJIChBSVggNS4zIG9yIG5ld2VyKS4K KyAgICAgIGlmIHRlc3QgJHVzZV9hY2wgPSAwOyB0aGVuCisgICAgICAgIEFDX0NIRUNLX0ZV TkNTKFthY2x4X2dldF0pCisgICAgICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfYWNseF9nZXQg PSB5ZXM7IHRoZW4KKyAgICAgICAgICB1c2VfYWNsPTEKKyAgICAgICAgZmkKKyAgICAgIGZp CisKKyAgICAgIGRubCBUZXN0IGZvciBvbGRlciBBSVggQVBJLgorICAgICAgaWYgdGVzdCAk dXNlX2FjbCA9IDAgfHwgdGVzdCAiJGFjX2N2X2Z1bmNfYWNseF9nZXQiID0geWVzOyB0aGVu CisgICAgICAgIEFDX0NIRUNLX0ZVTkNTKFtzdGF0YWNsXSkKKyAgICAgICAgaWYgdGVzdCAk YWNfY3ZfZnVuY19zdGF0YWNsID0geWVzOyB0aGVuCisgICAgICAgICAgdXNlX2FjbD0xCisg ICAgICAgIGZpCisgICAgICBmaQorCisgICAgICBkbmwgVGVzdCBmb3IgTm9uU3RvcCBLZXJu ZWwgQVBJLgorICAgICAgaWYgdGVzdCAkdXNlX2FjbCA9IDA7IHRoZW4KKyAgICAgICAgQUNf Q0hFQ0tfRlVOQ1MoW2FjbHNvcnRdKQorICAgICAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX2Fj bHNvcnQgPSB5ZXM7IHRoZW4KKyAgICAgICAgICB1c2VfYWNsPTEKKyAgICAgICAgZmkKKyAg ICAgIGZpCisKKyAgICAgIExJQlM9JGFjX3NhdmVfTElCUworICAgIGZpCisgICAgaWYgdGVz dCAieCRlbmFibGVfYWNsJHVzZV9hY2wiID0gInh5ZXMwIjsgdGhlbgorICAgICAgQUNfTVNH X0VSUk9SKFtBQ0xzIGVuYWJsZWQgYnV0IHN1cHBvcnQgbm90IGRldGVjdGVkXSkKKyAgICBl bGlmIHRlc3QgIngkZW5hYmxlX2FjbCR1c2VfYWNsIiA9ICJ4YXV0bzAiOyB0aGVuCisgICAg ICBBQ19NU0dfV0FSTihbbGliYWNsIGRldmVsb3BtZW50IGxpYnJhcnkgd2FzIG5vdCBmb3Vu ZCBvciBub3QgdXNhYmxlLl0pCisgICAgICBBQ19NU0dfV0FSTihbQUNfUEFDS0FHRV9OQU1F IHdpbGwgYmUgYnVpbHQgd2l0aG91dCBBQ0wgc3VwcG9ydC5dKQorICAgIGZpCisgIGZpCisg IEFDX1NVQlNUKFtMSUJfQUNMXSkKKyAgQUNfREVGSU5FX1VOUVVPVEVEKFtVU0VfQUNMXSwg WyR1c2VfYWNsXSwKKyAgICBbRGVmaW5lIHRvIG5vbnplcm8gaWYgeW91IHdhbnQgYWNjZXNz IGNvbnRyb2wgbGlzdCBzdXBwb3J0Ll0pCisgIFVTRV9BQ0w9JHVzZV9hY2wKKyAgQUNfU1VC U1QoW1VTRV9BQ0xdKQorXSkKKworIyBnbF9BQ0xfR0VUX0ZJTEUoSUYtV09SS1MsIElGLU5P VCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJZiAnYWNs X2dldF9maWxlJyB3b3JrcyAoZG9lcyBub3QgaGF2ZSBhIHBhcnRpY3VsYXIgYnVnKSwKKyMg cnVuIElGLVdPUktTLCBvdGhlcndpc2UsIElGLU5PVC4KKyMgVGhpcyB0ZXN0cyBmb3IgYSBE YXJ3aW4gOC43LjAgYnVnLCB3aGVyZWJ5IGFjbF9nZXRfZmlsZSByZXR1cm5zIE5VTEwsCisj IGJ1dCBzZXRzIGVycm5vID0gRU5PRU5UIGZvciBhbiBleGlzdGluZyBmaWxlIG9yIGRpcmVj dG9yeS4KK0FDX0RFRlVOKFtnbF9BQ0xfR0VUX0ZJTEVdLAorWworICBBQ19DQUNIRV9DSEVD SyhbZm9yIHdvcmtpbmcgYWNsX2dldF9maWxlXSwgW2dsX2N2X2Z1bmNfd29ya2luZ19hY2xf Z2V0X2ZpbGVdLAorICAgIFtBQ19SVU5fSUZFTFNFKAorICAgICAgIFtBQ19MQU5HX1BST0dS QU0oCisgICAgICAgICAgW1sjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgICAgICAgICAgICNp bmNsdWRlIDxzeXMvYWNsLmg+CisgICAgICAgICAgICNpbmNsdWRlIDxlcnJuby5oPgorICAg ICAgICAgIF1dLAorICAgICAgICAgIFtbaWYgKCFhY2xfZ2V0X2ZpbGUgKCIuIiwgQUNMX1RZ UEVfQUNDRVNTKSAmJiBlcnJubyA9PSBFTk9FTlQpCisgICAgICAgICAgICAgIHJldHVybiAx OworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgXV0pXSwKKyAgICAgICBbZ2xf Y3ZfZnVuY193b3JraW5nX2FjbF9nZXRfZmlsZT15ZXNdLAorICAgICAgIFtnbF9jdl9mdW5j X3dvcmtpbmdfYWNsX2dldF9maWxlPW5vXSwKKyAgICAgICBbZ2xfY3ZfZnVuY193b3JraW5n X2FjbF9nZXRfZmlsZT1jcm9zcy1jb21waWxpbmddKV0pCisKKyAgQVNfSUYoW3Rlc3QgJGds X2N2X2Z1bmNfd29ya2luZ19hY2xfZ2V0X2ZpbGUgPSB5ZXNdLCBbJDFdLCBbJDJdKQorXSkK Cj09PSBhZGRlZCBmaWxlICdtNC9lcnJub19oLm00JwotLS0gbTQvZXJybm9faC5tNAkxOTcw LTAxLTAxIDAwOjAwOjAwICswMDAwCisrKyBtNC9lcnJub19oLm00CTIwMTMtMDQtMjkgMDY6 MDc6NDIgKzAwMDAKQEAgLTAsMCArMSwxMzcgQEAKKyMgZXJybm9faC5tNCBzZXJpYWwgMTIK K2RubCBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDgtMjAxMyBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24sIEluYy4KK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNz aW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitkbmwgd2l0aCBvciB3aXRob3V0 IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgor CitBQ19ERUZVTl9PTkNFKFtnbF9IRUFERVJfRVJSTk9fSF0sCitbCisgIEFDX1JFUVVJUkUo W0FDX1BST0dfQ0NdKQorICBBQ19DQUNIRV9DSEVDSyhbZm9yIGNvbXBsZXRlIGVycm5vLmhd LCBbZ2xfY3ZfaGVhZGVyX2Vycm5vX2hfY29tcGxldGVdLCBbCisgICAgQUNfRUdSRVBfQ1BQ KFtib29ib29dLFsKKyNpbmNsdWRlIDxlcnJuby5oPgorI2lmICFkZWZpbmVkIEVUWFRCU1kK K2Jvb2JvbworI2VuZGlmCisjaWYgIWRlZmluZWQgRU5PTVNHCitib29ib28KKyNlbmRpZgor I2lmICFkZWZpbmVkIEVJRFJNCitib29ib28KKyNlbmRpZgorI2lmICFkZWZpbmVkIEVOT0xJ TksKK2Jvb2JvbworI2VuZGlmCisjaWYgIWRlZmluZWQgRVBST1RPCitib29ib28KKyNlbmRp ZgorI2lmICFkZWZpbmVkIEVNVUxUSUhPUAorYm9vYm9vCisjZW5kaWYKKyNpZiAhZGVmaW5l ZCBFQkFETVNHCitib29ib28KKyNlbmRpZgorI2lmICFkZWZpbmVkIEVPVkVSRkxPVworYm9v Ym9vCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBFTk9UU1VQCitib29ib28KKyNlbmRpZgorI2lm ICFkZWZpbmVkIEVORVRSRVNFVAorYm9vYm9vCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBFQ09O TkFCT1JURUQKK2Jvb2JvbworI2VuZGlmCisjaWYgIWRlZmluZWQgRVNUQUxFCitib29ib28K KyNlbmRpZgorI2lmICFkZWZpbmVkIEVEUVVPVAorYm9vYm9vCisjZW5kaWYKKyNpZiAhZGVm aW5lZCBFQ0FOQ0VMRUQKK2Jvb2JvbworI2VuZGlmCisjaWYgIWRlZmluZWQgRU9XTkVSREVB RAorYm9vYm9vCisjZW5kaWYKKyNpZiAhZGVmaW5lZCBFTk9UUkVDT1ZFUkFCTEUKK2Jvb2Jv bworI2VuZGlmCisjaWYgIWRlZmluZWQgRUlMU0VRCitib29ib28KKyNlbmRpZgorICAgICAg XSwKKyAgICAgIFtnbF9jdl9oZWFkZXJfZXJybm9faF9jb21wbGV0ZT1ub10sCisgICAgICBb Z2xfY3ZfaGVhZGVyX2Vycm5vX2hfY29tcGxldGU9eWVzXSkKKyAgXSkKKyAgaWYgdGVzdCAk Z2xfY3ZfaGVhZGVyX2Vycm5vX2hfY29tcGxldGUgPSB5ZXM7IHRoZW4KKyAgICBFUlJOT19I PScnCisgIGVsc2UKKyAgICBnbF9ORVhUX0hFQURFUlMoW2Vycm5vLmhdKQorICAgIEVSUk5P X0g9J2Vycm5vLmgnCisgIGZpCisgIEFDX1NVQlNUKFtFUlJOT19IXSkKKyAgQU1fQ09ORElU SU9OQUwoW0dMX0dFTkVSQVRFX0VSUk5PX0hdLCBbdGVzdCAtbiAiJEVSUk5PX0giXSkKKyAg Z2xfUkVQTEFDRV9FUlJOT19WQUxVRShbRU1VTFRJSE9QXSkKKyAgZ2xfUkVQTEFDRV9FUlJO T19WQUxVRShbRU5PTElOS10pCisgIGdsX1JFUExBQ0VfRVJSTk9fVkFMVUUoW0VPVkVSRkxP V10pCitdKQorCisjIEFzc3VtaW5nICQxID0gRU9WRVJGTE9XLgorIyBUaGUgRU9WRVJGTE9X IGVycm5vIHZhbHVlIG91Z2h0IHRvIGJlIGRlZmluZWQgaW4gPGVycm5vLmg+LCBhY2NvcmRp bmcgdG8KKyMgUE9TSVguICBCdXQgc29tZSBzeXN0ZW1zIChsaWtlIE9wZW5CU0QgNC4wIG9y IEFJWCAzKSBkb24ndCBkZWZpbmUgaXQsIGFuZAorIyBzb21lIHN5c3RlbXMgKGxpa2UgT1NG LzEpIGRlZmluZSBpdCB3aGVuIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgaXMgZGVmaW5lZC4K KyMgQ2hlY2sgZm9yIHRoZSB2YWx1ZSBvZiBFT1ZFUkZMT1cuCisjIFNldCB0aGUgdmFyaWFi bGVzIEVPVkVSRkxPV19ISURERU4gYW5kIEVPVkVSRkxPV19WQUxVRS4KK0FDX0RFRlVOKFtn bF9SRVBMQUNFX0VSUk5PX1ZBTFVFXSwKK1sKKyAgaWYgdGVzdCAtbiAiJEVSUk5PX0giOyB0 aGVuCisgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBdJDFbIHZhbHVlXSwgW2dsX2N2X2hlYWRl cl9lcnJub19oX10kMSwgWworICAgICAgQUNfRUdSRVBfQ1BQKFt5ZXNdLFsKKyNpbmNsdWRl IDxlcnJuby5oPgorI2lmZGVmIF0kMVsKK3llcworI2VuZGlmCisgICAgICBdLAorICAgICAg W2dsX2N2X2hlYWRlcl9lcnJub19oX10kMVs9eWVzXSwKKyAgICAgIFtnbF9jdl9oZWFkZXJf ZXJybm9faF9dJDFbPW5vXSkKKyAgICAgIGlmIHRlc3QgJGdsX2N2X2hlYWRlcl9lcnJub19o X10kMVsgPSBubzsgdGhlbgorICAgICAgICBBQ19FR1JFUF9DUFAoW3llc10sWworI2RlZmlu ZSBfWE9QRU5fU09VUkNFX0VYVEVOREVEIDEKKyNpbmNsdWRlIDxlcnJuby5oPgorI2lmZGVm IF0kMVsKK3llcworI2VuZGlmCisgICAgICAgICAgXSwgW2dsX2N2X2hlYWRlcl9lcnJub19o X10kMVs9aGlkZGVuXSkKKyAgICAgICAgaWYgdGVzdCAkZ2xfY3ZfaGVhZGVyX2Vycm5vX2hf XSQxWyA9IGhpZGRlbjsgdGhlbgorICAgICAgICAgIGRubCBUaGUgbWFjcm8gZXhpc3RzIGJ1 dCBpcyBoaWRkZW4uCisgICAgICAgICAgZG5sIERlZmluZSBpdCB0byB0aGUgc2FtZSB2YWx1 ZS4KKyAgICAgICAgICBBQ19DT01QVVRFX0lOVChbZ2xfY3ZfaGVhZGVyX2Vycm5vX2hfXSQx LCAkMSwgWworI2RlZmluZSBfWE9QRU5fU09VUkNFX0VYVEVOREVEIDEKKyNpbmNsdWRlIDxl cnJuby5oPgorLyogVGhlIGZvbGxvd2luZyB0d28gbGluZXMgYXJlIGEgd29ya2Fyb3VuZCBh Z2FpbnN0IGFuIGF1dG9jb25mLTIuNTIgYnVnLiAgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgor I2luY2x1ZGUgPHN0ZGxpYi5oPgorXSkKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgXSkK KyAgICBjYXNlICRnbF9jdl9oZWFkZXJfZXJybm9faF9dJDFbIGluCisgICAgICB5ZXMgfCBu bykKKyAgICAgICAgXSQxW19ISURERU49MDsgXSQxW19WQUxVRT0KKyAgICAgICAgOzsKKyAg ICAgICopCisgICAgICAgIF0kMVtfSElEREVOPTE7IF0kMVtfVkFMVUU9IiRnbF9jdl9oZWFk ZXJfZXJybm9faF9dJDFbIgorICAgICAgICA7OworICAgIGVzYWMKKyAgICBBQ19TVUJTVCgk MVtfSElEREVOXSkKKyAgICBBQ19TVUJTVCgkMVtfVkFMVUVdKQorICBmaQorXSkKKworZG5s IEF1dG9jb25mID49IDIuNjEgaGFzIEFDX0NPTVBVVEVfSU5UIGJ1aWx0LWluLgorZG5sIFJl bW92ZSB0aGlzIHdoZW4gd2UgY2FuIGFzc3VtZSBhdXRvY29uZiA+PSAyLjYxLgorbTRfaWZk ZWYoW0FDX0NPTVBVVEVfSU5UXSwgW10sIFsKKyAgQUNfREVGVU4oW0FDX0NPTVBVVEVfSU5U XSwgW19BQ19DT01QVVRFX0lOVChbJDJdLFskMV0sWyQzXSxbJDRdKV0pCitdKQoKPT09IG1v ZGlmaWVkIGZpbGUgJ200L2dudWxpYi1jb21wLm00JwotLS0gbTQvZ251bGliLWNvbXAubTQJ MjAxMy0wMy0xMyAxODo0MjoyMiArMDAwMAorKysgbTQvZ251bGliLWNvbXAubTQJMjAxMy0w NC0yOSAwNjowNzo0MiArMDAwMApAQCAtNTYsNiArNTYsNyBAQAogICAjIENvZGUgZnJvbSBt b2R1bGUgZHRvdGltZXNwZWM6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBkdXAyOgogICAjIENv ZGUgZnJvbSBtb2R1bGUgZW52aXJvbjoKKyAgIyBDb2RlIGZyb20gbW9kdWxlIGVycm5vOgog ICAjIENvZGUgZnJvbSBtb2R1bGUgZXVpZGFjY2VzczoKICAgIyBDb2RlIGZyb20gbW9kdWxl IGV4ZWNpbmZvOgogICAjIENvZGUgZnJvbSBtb2R1bGUgZXh0ZW5zaW9uczoKQEAgLTk0LDYg Kzk1LDcgQEAKICAgIyBDb2RlIGZyb20gbW9kdWxlIHBzZWxlY3Q6CiAgICMgQ29kZSBmcm9t IG1vZHVsZSBwdGhyZWFkX3NpZ21hc2s6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBwdXRlbnY6 CisgICMgQ29kZSBmcm9tIG1vZHVsZSBxYWNsOgogICAjIENvZGUgZnJvbSBtb2R1bGUgcmVh ZGxpbms6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSByZWFkbGlua2F0OgogICAjIENvZGUgZnJv bSBtb2R1bGUgcm9vdC11aWQ6CkBAIC0xNzksNiArMTgxLDcgQEAKICAgZ2xfVU5JU1REX01P RFVMRV9JTkRJQ0FUT1IoW2R1cDJdKQogICBnbF9FTlZJUk9OCiAgIGdsX1VOSVNURF9NT0RV TEVfSU5ESUNBVE9SKFtlbnZpcm9uXSkKKyAgZ2xfSEVBREVSX0VSUk5PX0gKICAgZ2xfRVhF Q0lORk9fSAogICBBQ19SRVFVSVJFKFtnbF9FWFRFUk5fSU5MSU5FXSkKICAgZ2xfRlVOQ19G QUNDRVNTQVQKQEAgLTI4Nyw2ICsyOTAsNyBAQAogICAgIGdsX1BSRVJFUV9QVVRFTlYKICAg ZmkKICAgZ2xfU1RETElCX01PRFVMRV9JTkRJQ0FUT1IoW3B1dGVudl0pCisgIGdsX0ZVTkNf QUNMCiAgIGdsX0ZVTkNfUkVBRExJTksKICAgaWYgdGVzdCAkSEFWRV9SRUFETElOSyA9IDAg fHwgdGVzdCAkUkVQTEFDRV9SRUFETElOSyA9IDE7IHRoZW4KICAgICBBQ19MSUJPQkooW3Jl YWRsaW5rXSkKQEAgLTczMyw2ICs3MzcsMTAgQEAKICAgYnVpbGQtYXV4L3NuaXBwZXQvYXJn LW5vbm51bGwuaAogICBidWlsZC1hdXgvc25pcHBldC9jKytkZWZzLmgKICAgYnVpbGQtYXV4 L3NuaXBwZXQvd2Fybi1vbi11c2UuaAorICBsaWIvYWNsLWVycm5vLXZhbGlkLmMKKyAgbGli L2FjbC1pbnRlcm5hbC5oCisgIGxpYi9hY2wuaAorICBsaWIvYWNsX2VudHJpZXMuYwogICBs aWIvYWxsb2NhLmluLmgKICAgbGliL2FsbG9jYXRvci5jCiAgIGxpYi9hbGxvY2F0b3IuaApA QCAtNzUxLDYgKzc1OSw3IEBACiAgIGxpYi9kdG9hc3RyLmMKICAgbGliL2R0b3RpbWVzcGVj LmMKICAgbGliL2R1cDIuYworICBsaWIvZXJybm8uaW4uaAogICBsaWIvZXVpZGFjY2Vzcy5j CiAgIGxpYi9leGVjaW5mby5jCiAgIGxpYi9leGVjaW5mby5pbi5oCkBAIC03NTgsNiArNzY3 LDcgQEAKICAgbGliL2ZjbnRsLmluLmgKICAgbGliL2ZkYXRhc3luYy5jCiAgIGxpYi9mZG9w ZW5kaXIuYworICBsaWIvZmlsZS1oYXMtYWNsLmMKICAgbGliL2ZpbGVtb2RlLmMKICAgbGli L2ZpbGVtb2RlLmgKICAgbGliL2ZwZW5kaW5nLmMKQEAgLTc5Miw2ICs4MDIsOCBAQAogICBs aWIvcHNlbGVjdC5jCiAgIGxpYi9wdGhyZWFkX3NpZ21hc2suYwogICBsaWIvcHV0ZW52LmMK KyAgbGliL3Fjb3B5LWFjbC5jCisgIGxpYi9xc2V0LWFjbC5jCiAgIGxpYi9yZWFkbGluay5j CiAgIGxpYi9yZWFkbGlua2F0LmMKICAgbGliL3Jvb3QtdWlkLmgKQEAgLTg0Myw2ICs4NTUs NyBAQAogICBsaWIvdmVyaWZ5LmgKICAgbGliL3hhbGxvYy1vdmVyc2l6ZWQuaAogICBtNC8w MGdudWxpYi5tNAorICBtNC9hY2wubTQKICAgbTQvYWxsb2NhLm00CiAgIG00L2Mtc3RydG9k Lm00CiAgIG00L2Nsb2NrX3RpbWUubTQKQEAgLTg1MCw2ICs4NjMsNyBAQAogICBtNC9kaXJl bnRfaC5tNAogICBtNC9kdXAyLm00CiAgIG00L2Vudmlyb24ubTQKKyAgbTQvZXJybm9faC5t NAogICBtNC9ldWlkYWNjZXNzLm00CiAgIG00L2V4ZWNpbmZvLm00CiAgIG00L2V4dGVuc2lv bnMubTQKCj09PSBtb2RpZmllZCBmaWxlICdudC9DaGFuZ2VMb2cnCi0tLSBudC9DaGFuZ2VM b2cJMjAxMy0wNC0wOSAwMjozODo1NiArMDAwMAorKysgbnQvQ2hhbmdlTG9nCTIwMTMtMDQt MjkgMDY6MDc6NDIgKzAwMDAKQEAgLTEsMyArMSw5IEBACisyMDEzLTA0LTI5ICBQYXVsIEVn Z2VydCAgPGVnZ2VydEBjcy51Y2xhLmVkdT4KKworCVVzZSBHbnVsaWIgQUNMIGltcGxlbWVu dGF0aW9uLCBmb3IgYmVuZWZpdCBvZiBTb2xhcmlzIGV0Yy4gKEJ1ZyMxNDI5NSkKKwkqIGNv bmZpZy5udCAoSEFWRV9BQ0xfU0VUX0ZJTEUpOiBSZW5hbWUgZnJvbSBIQVZFX1BPU0lYX0FD TC4KKwkoRU9QTk9UU1VQKTogTmV3IG1hY3JvLgorCiAyMDEzLTA0LTA5ICBLZW4gQnJvd24g IDxrYnJvd25AY29ybmVsbC5lZHU+CiAKIAkqIGVtYWNzLnJjOiBVc2UgNjQtYml0IG1hbmlm ZXN0IGZvciA2NC1iaXQgQ3lnd2luIGJ1aWxkLgoKPT09IG1vZGlmaWVkIGZpbGUgJ250L2Nv bmZpZy5udCcKLS0tIG50L2NvbmZpZy5udAkyMDEzLTAzLTMwIDA3OjEwOjU4ICswMDAwCisr KyBudC9jb25maWcubnQJMjAxMy0wNC0yOSAwNjowNzo0MiArMDAwMApAQCAtNzU2LDcgKzc1 Niw3IEBACiAjdW5kZWYgSEFWRV9QTkdfSAogCiAvKiBEZWZpbmUgdG8gMSBpZiB1c2luZyBQ T1NJWCBBQ0wgc3VwcG9ydC4gKi8KLSNkZWZpbmUgSEFWRV9QT1NJWF9BQ0wgMQorI2RlZmlu ZSBIQVZFX0FDTF9TRVRfRklMRSAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo ZSBgcG9zaXhfbWVtYWxpZ24nIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfUE9TSVhfTUVN QUxJR04KQEAgLTE3MjMsNiArMTcyMywxMiBAQAogLyogRGVmaW5lIGFzIGBmb3JrJyBpZiBg dmZvcmsnIGRvZXMgbm90IHdvcmsuICovCiAjdW5kZWYgdmZvcmsKIAorLyogV0lORE9XU05U IDxlcnJuby5oPiBkb2Vzbid0IGRlZmluZSBFT1BOT1RTVVBQLCBhbmQgd2UgZG9uJ3QgaGF2 ZQorICAgJ2NvbmZpZ3VyZScgd29ya2luZyB5ZXQgc28gd2UgY2FuJ3QgcmVseSBvbiB0aGUg R251bGliIHJlcGxhY2VtZW50CisgICBlcnJuby5oIGRlZmluaW5nIEVPUE5PVFNVUFAuICBX b3JrIGFyb3VuZCB0aGUgcHJvYmxlbSBieSBkZWZpbmluZworICAgaXQgaGVyZS4gICovCisj ZGVmaW5lIEVPUE5PVFNVUFAgMTMwCisKICNpbmNsdWRlIDxjb25mX3Bvc3QuaD4KIAogI2Vu ZGlmIC8qIEVNQUNTX0NPTkZJR19IICovCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL0NoYW5n ZUxvZycKLS0tIHNyYy9DaGFuZ2VMb2cJMjAxMy0wNC0yOCAxODoyMTowMSArMDAwMAorKysg c3JjL0NoYW5nZUxvZwkyMDEzLTA0LTI5IDA2OjA3OjQyICswMDAwCkBAIC0xLDMgKzEsMTYg QEAKKzIwMTMtMDQtMjkgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJ VXNlIEdudWxpYiBBQ0wgaW1wbGVtZW50YXRpb24sIGZvciBiZW5lZml0IG9mIFNvbGFyaXMg ZXRjLiAoQnVnIzE0Mjk1KQorCSogTWFrZWZpbGUuaW4gKExJQl9BQ0wpOiBOZXcgbWFjcm8u CisJKExJQkFDTF9MSUJTKTogUmVtb3ZlLgorCShMSUJFUyk6IFVzZSBMSUJfQUNMLCBub3Qg TElCQUNMX0xJQlMuCisJKiBmaWxlaW8uYzogSW5jbHVkZSA8YWNsLmg+LgorCVVzZSBIQVZF X0FDTF9TRVRfRklMRSByYXRoZXIgdGhhbiBIQVZFX1BPU0lYX0FDTC4KKwkoQUNMX05PVF9X RUxMX1NVUFBPUlRFRCk6IFJlbW92ZS4gIEFsbCB1c2VzIHJlcGxhY2VkIGJ5CisJIWFjbF9l cnJub192YWxpZC4KKwkoRmNvcHlfZmlsZSkgWyFXSU5ET1dTTlRdOiBVc2UgcWNvcHlfYWNs IGluc3RlYWQgb2Ygcm9sbGluZworCWl0IG91cnNlbHZlcy4KKwogMjAxMy0wNC0yOCAgRWxp IFphcmV0c2tpaSAgPGVsaXpAZ251Lm9yZz4KIAogCSogY29kaW5nLmMgKGRlY29kZV9jb2Rp bmdfZ2FwKTogRG9uJ3QgcmVtb3ZlIHRoZSBjaGFyYWN0ZXIgYmVmb3JlCgo9PT0gbW9kaWZp ZWQgZmlsZSAnc3JjL01ha2VmaWxlLmluJwotLS0gc3JjL01ha2VmaWxlLmluCTIwMTMtMDQt MjIgMDU6MTg6MzAgKzAwMDAKKysrIHNyYy9NYWtlZmlsZS5pbgkyMDEzLTA0LTI3IDE5OjQw OjQ5ICswMDAwCkBAIC0xMzcsNiArMTM3LDcgQEAKIE0xN05fRkxUX0NGTEFHUyA9IEBNMTdO X0ZMVF9DRkxBR1NACiBNMTdOX0ZMVF9MSUJTID0gQE0xN05fRkxUX0xJQlNACiAKK0xJQl9B Q0w9QExJQl9BQ0xACiBMSUJfQ0xPQ0tfR0VUVElNRT1ATElCX0NMT0NLX0dFVFRJTUVACiBM SUJfRUFDQ0VTUz1ATElCX0VBQ0NFU1NACiBMSUJfRkRBVEFTWU5DPUBMSUJfRkRBVEFTWU5D QApAQCAtMjgyLDggKzI4Myw2IEBACiBMSUJHTlVUTFNfTElCUyA9IEBMSUJHTlVUTFNfTElC U0AKIExJQkdOVVRMU19DRkxBR1MgPSBATElCR05VVExTX0NGTEFHU0AKIAotTElCQUNMX0xJ QlMgPSBATElCQUNMX0xJQlNACi0KIExJQl9QVEhSRUFEX1NJR01BU0sgPSBATElCX1BUSFJF QURfU0lHTUFTS0AKIAogSU5URVJWQUxTX0ggPSBkaXNwZXh0ZXJuLmggaW50ZXJ2YWxzLmgg Y29tcG9zaXRlLmgKQEAgLTM5MSwxMyArMzkwLDEzIEBACiAjIyBDb25zdHJ1Y3QgZnVsbCBz ZXQgb2YgbGlicmFyaWVzIHRvIGJlIGxpbmtlZC4KIExJQkVTID0gJChMSUJTKSAkKFczMl9M SUJTKSAkKExJQlNfR05VU1RFUCkgJChMSUJYX0JBU0UpICQoTElCSU1BR0UpIFwKICAgICQo TElCWF9PVEhFUikgJChMSUJTT1VORCkgXAotICAgJChSU1ZHX0xJQlMpICQoSU1BR0VNQUdJ Q0tfTElCUykgJChMSUJfQ0xPQ0tfR0VUVElNRSkgXAorICAgJChSU1ZHX0xJQlMpICQoSU1B R0VNQUdJQ0tfTElCUykgJChMSUJfQUNMKSAkKExJQl9DTE9DS19HRVRUSU1FKSBcCiAgICAk KExJQl9FQUNDRVNTKSAkKExJQl9GREFUQVNZTkMpICQoTElCX1RJTUVSX1RJTUUpICQoREJV U19MSUJTKSBcCiAgICAkKExJQl9FWEVDSU5GTykgXAogICAgJChMSUJYTUwyX0xJQlMpICQo TElCR1BNKSAkKExJQlJFU09MVikgJChMSUJTX1NZU1RFTSkgXAogICAgJChMSUJTX1RFUk1D QVApICQoR0VUTE9BREFWR19MSUJTKSAkKFNFVFRJTkdTX0xJQlMpICQoTElCU0VMSU5VWF9M SUJTKSBcCiAgICAkKEZSRUVUWVBFX0xJQlMpICQoRk9OVENPTkZJR19MSUJTKSAkKExJQk9U Rl9MSUJTKSAkKE0xN05fRkxUX0xJQlMpIFwKLSAgICQoTElCQUNMX0xJQlMpICQoTElCR05V VExTX0xJQlMpICQoTElCX1BUSFJFQUQpICQoTElCX1BUSFJFQURfU0lHTUFTSykgXAorICAg JChMSUJHTlVUTFNfTElCUykgJChMSUJfUFRIUkVBRCkgJChMSUJfUFRIUkVBRF9TSUdNQVNL KSBcCiAgICAkKExJQl9NQVRIKQogCiBhbGw6IGVtYWNzJChFWEVFWFQpICQoT1RIRVJfRklM RVMpCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2ZpbGVpby5jJwotLS0gc3JjL2ZpbGVpby5j CTIwMTMtMDQtMDcgMTY6MTg6NDEgKzAwMDAKKysrIHNyYy9maWxlaW8uYwkyMDEzLTA0LTI5 IDA2OjA3OjQyICswMDAwCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSA8c2VsaW51eC9j b250ZXh0Lmg+CiAjZW5kaWYKIAotI2lmZGVmIEhBVkVfUE9TSVhfQUNMCisjaWZkZWYgSEFW RV9BQ0xfU0VUX0ZJTEUKICNpbmNsdWRlIDxzeXMvYWNsLmg+CiAjZW5kaWYKIApAQCAtODEs MjYgKzgxLDggQEAKICNkZWZpbmUgRFJJVkVfTEVUVEVSKHgpIGNfdG9sb3dlciAoeCkKICNl bmRpZgogCi0jaWZkZWYgSEFWRV9QT1NJWF9BQ0wKLS8qIEZJWE1FOiB0aGlzIG1hY3JvIHdh cyBjb3BpZWQgZnJvbSBnbnVsaWIncyBwcml2YXRlIGFjbC1pbnRlcm5hbC5oCi0gICBoZWFk ZXIgZmlsZS4gICovCi0vKiBSZWNvZ25pemUgc29tZSBjb21tb24gZXJyb3JzIHN1Y2ggYXMg ZnJvbSBhbiBORlMgbW91bnQgdGhhdCBkb2VzCi0gICBub3Qgc3VwcG9ydCBBQ0xzLCBldmVu IHdoZW4gbG9jYWwgZHJpdmVzIGRvLiAgKi8KLSNpZiBkZWZpbmVkIF9fQVBQTEVfXyAmJiBk ZWZpbmVkIF9fTUFDSF9fIC8qIE1hYyBPUyBYICovCi0jZGVmaW5lIEFDTF9OT1RfV0VMTF9T VVBQT1JURUQoRXJyKQkJCQkJXAotICAoKEVycikgPT0gRU5PVFNVUCB8fCAoRXJyKSA9PSBF Tk9TWVMgfHwgKEVycikgPT0gRUlOVkFMIHx8IChFcnIpID09IEVCVVNZIHx8IChFcnIpID09 IEVOT0VOVCkKLSNlbGlmIGRlZmluZWQgRU9QTk9UU1VQUCAvKiBUcnU2NCBORlMgKi8KLSNk ZWZpbmUgQUNMX05PVF9XRUxMX1NVUFBPUlRFRChFcnIpCQkJCQlcCi0gICgoRXJyKSA9PSBF Tk9UU1VQIHx8IChFcnIpID09IEVOT1NZUyB8fCAoRXJyKSA9PSBFSU5WQUwgfHwgKEVycikg PT0gRUJVU1kgfHwgKEVycikgPT0gRU9QTk9UU1VQUCkKLSNlbGlmIGRlZmluZWQgV0lORE9X U05UCi0jZGVmaW5lIEFDTF9OT1RfV0VMTF9TVVBQT1JURUQoRXJyKSAgKChFcnIpID09IEVO T1RTVVApCi0jZWxzZQotI2RlZmluZSBBQ0xfTk9UX1dFTExfU1VQUE9SVEVEKEVycikJCQkJ CVwKLSAgKChFcnIpID09IEVOT1RTVVAgfHwgKEVycikgPT0gRU5PU1lTIHx8IChFcnIpID09 IEVJTlZBTCB8fCAoRXJyKSA9PSBFQlVTWSkKLSNlbmRpZgotI2VuZGlmCS8qIEhBVkVfUE9T SVhfQUNMICovCi0KICNpbmNsdWRlICJzeXN0aW1lLmgiCisjaW5jbHVkZSA8YWNsLmg+CiAj aW5jbHVkZSA8YWxsb2NhdG9yLmg+CiAjaW5jbHVkZSA8Y2FyZWFkbGlua2F0Lmg+CiAjaW5j bHVkZSA8c3RhdC10aW1lLmg+CkBAIC0xOTg4LDcgKzE5NzAsNyBAQAogICBzZWN1cml0eV9j b250ZXh0X3QgY29uOwogICBpbnQgY29ubGVuZ3RoID0gMDsKICNlbmRpZgotI2lmZGVmIEhB VkVfUE9TSVhfQUNMCisjaWZkZWYgV0lORE9XU05UCiAgIGFjbF90IGFjbCA9IE5VTEw7CiAj ZW5kaWYKIApAQCAtMjAyOCwxMSArMjAxMCw5IEBACiAjaWZkZWYgV0lORE9XU05UCiAgIGlm ICghTklMUCAocHJlc2VydmVfZXh0ZW5kZWRfYXR0cmlidXRlcykpCiAgICAgewotI2lmZGVm IEhBVkVfUE9TSVhfQUNMCiAgICAgICBhY2wgPSBhY2xfZ2V0X2ZpbGUgKFNEQVRBIChlbmNv ZGVkX2ZpbGUpLCBBQ0xfVFlQRV9BQ0NFU1MpOwotICAgICAgaWYgKGFjbCA9PSBOVUxMICYm ICFBQ0xfTk9UX1dFTExfU1VQUE9SVEVEIChlcnJubykpCisgICAgICBpZiAoYWNsID09IE5V TEwgJiYgYWNsX2Vycm5vX3ZhbGlkIChlcnJubykpCiAJcmVwb3J0X2ZpbGVfZXJyb3IgKCJH ZXR0aW5nIEFDTCIsIEZjb25zIChmaWxlLCBRbmlsKSk7Ci0jZW5kaWYKICAgICB9CiAgIGlm ICghQ29weUZpbGUgKFNEQVRBIChlbmNvZGVkX2ZpbGUpLAogCQkgU0RBVEEgKGVuY29kZWRf bmV3bmFtZSksCkBAIC0yMDY5LDE3ICsyMDQ5LDE1IEBACiAgICAgICAvKiBSZXN0b3JlIG9y aWdpbmFsIGF0dHJpYnV0ZXMuICAqLwogICAgICAgU2V0RmlsZUF0dHJpYnV0ZXMgKGZpbGVu YW1lLCBhdHRyaWJ1dGVzKTsKICAgICB9Ci0jaWZkZWYgSEFWRV9QT1NJWF9BQ0wKICAgaWYg KGFjbCAhPSBOVUxMKQogICAgIHsKICAgICAgIGJvb2wgZmFpbCA9CiAJYWNsX3NldF9maWxl IChTREFUQSAoZW5jb2RlZF9uZXduYW1lKSwgQUNMX1RZUEVfQUNDRVNTLCBhY2wpICE9IDA7 Ci0gICAgICBpZiAoZmFpbCAmJiAhQUNMX05PVF9XRUxMX1NVUFBPUlRFRCAoZXJybm8pKQor ICAgICAgaWYgKGZhaWwgJiYgYWNsX2Vycm5vX3ZhbGlkIChlcnJubykpCiAJcmVwb3J0X2Zp bGVfZXJyb3IgKCJTZXR0aW5nIEFDTCIsIEZjb25zIChuZXduYW1lLCBRbmlsKSk7CiAKICAg ICAgIGFjbF9mcmVlIChhY2wpOwogICAgIH0KLSNlbmRpZgogI2Vsc2UgLyogbm90IFdJTkRP V1NOVCAqLwogICBpbW1lZGlhdGVfcXVpdCA9IDE7CiAgIGlmZCA9IGVtYWNzX29wZW4gKFNT REFUQSAoZW5jb2RlZF9maWxlKSwgT19SRE9OTFksIDApOwpAQCAtMjEwMywxMiArMjA4MSw2 IEBACiAJICAgIHJlcG9ydF9maWxlX2Vycm9yICgiRG9pbmcgZmdldGZpbGVjb24iLCBGY29u cyAoZmlsZSwgUW5pbCkpOwogCX0KICNlbmRpZgotCi0jaWZkZWYgSEFWRV9QT1NJWF9BQ0wK LSAgICAgIGFjbCA9IGFjbF9nZXRfZmQgKGlmZCk7Ci0gICAgICBpZiAoYWNsID09IE5VTEwg JiYgIUFDTF9OT1RfV0VMTF9TVVBQT1JURUQgKGVycm5vKSkKLQlyZXBvcnRfZmlsZV9lcnJv ciAoIkdldHRpbmcgQUNMIiwgRmNvbnMgKGZpbGUsIFFuaWwpKTsKLSNlbmRpZgogICAgIH0K IAogICBpZiAob3V0X3N0LnN0X21vZGUgIT0gMApAQCAtMjE1Niw3ICsyMTI4LDcgQEAKICAg aW1tZWRpYXRlX3F1aXQgPSAwOwogCiAjaWZuZGVmIE1TRE9TCi0gIC8qIFByZXNlcnZlIHRo ZSBvcmlnaW5hbCBmaWxlIG1vZGVzLCBhbmQgaWYgcmVxdWVzdGVkLCBhbHNvIGl0cworICAv KiBQcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgZmlsZSBwZXJtaXNzaW9ucywgYW5kIGlmIHJlcXVl c3RlZCwgYWxzbyBpdHMKICAgICAgb3duZXIgYW5kIGdyb3VwLiAgKi8KICAgewogICAgIG1v ZGVfdCBtb2RlX21hc2sgPSAwNzc3NzsKQEAgLTIxNzMsOCArMjE0NSwxNiBAQAogCSAgICAg IG1vZGVfbWFzayB8PSAwMjAwMDsKIAkgIH0KICAgICAgIH0KLSAgICBpZiAoZmNobW9kIChv ZmQsIHN0LnN0X21vZGUgJiBtb2RlX21hc2spICE9IDApCi0gICAgICByZXBvcnRfZmlsZV9l cnJvciAoIkRvaW5nIGNobW9kIiwgRmNvbnMgKG5ld25hbWUsIFFuaWwpKTsKKworICAgIHN3 aXRjaCAoIU5JTFAgKHByZXNlcnZlX2V4dGVuZGVkX2F0dHJpYnV0ZXMpCisJICAgID8gcWNv cHlfYWNsIChTU0RBVEEgKGVuY29kZWRfZmlsZSksIGlmZCwKKwkJCSBTU0RBVEEgKGVuY29k ZWRfbmV3bmFtZSksIG9mZCwKKwkJCSBzdC5zdF9tb2RlICYgbW9kZV9tYXNrKQorCSAgICA6 IGZjaG1vZCAob2ZkLCBzdC5zdF9tb2RlICYgbW9kZV9tYXNrKSkKKyAgICAgIHsKKyAgICAg IGNhc2UgLTI6IHJlcG9ydF9maWxlX2Vycm9yICgiQ29weWluZyBwZXJtaXNzaW9ucyBmcm9t IiwgbGlzdDEgKGZpbGUpKTsKKyAgICAgIGNhc2UgLTE6IHJlcG9ydF9maWxlX2Vycm9yICgi Q29weWluZyBwZXJtaXNzaW9ucyB0byIsIGxpc3QxIChuZXduYW1lKSk7CisgICAgICB9CiAg IH0KICNlbmRpZgkvKiBub3QgTVNET1MgKi8KIApAQCAtMjE5MSwxNyArMjE3MSw2IEBACiAg ICAgfQogI2VuZGlmCiAKLSNpZmRlZiBIQVZFX1BPU0lYX0FDTAotICBpZiAoYWNsICE9IE5V TEwpCi0gICAgewotICAgICAgYm9vbCBmYWlsID0gYWNsX3NldF9mZCAob2ZkLCBhY2wpICE9 IDA7Ci0gICAgICBpZiAoZmFpbCAmJiAhQUNMX05PVF9XRUxMX1NVUFBPUlRFRCAoZXJybm8p KQotCXJlcG9ydF9maWxlX2Vycm9yICgiU2V0dGluZyBBQ0wiLCBGY29ucyAobmV3bmFtZSwg UW5pbCkpOwotCi0gICAgICBhY2xfZnJlZSAoYWNsKTsKLSAgICB9Ci0jZW5kaWYKLQogICBp ZiAoIU5JTFAgKGtlZXBfdGltZSkpCiAgICAgewogICAgICAgRU1BQ1NfVElNRSBhdGltZSA9 IGdldF9zdGF0X2F0aW1lICgmc3QpOwpAQCAtMzExMSw3ICszMDgwLDcgQEAKIHsKICAgTGlz cF9PYmplY3QgYWJzbmFtZTsKICAgTGlzcF9PYmplY3QgaGFuZGxlcjsKLSNpZmRlZiBIQVZF X1BPU0lYX0FDTAorI2lmZGVmIEhBVkVfQUNMX1NFVF9GSUxFCiAgIGFjbF90IGFjbDsKICAg TGlzcF9PYmplY3QgYWNsX3N0cmluZzsKICAgY2hhciAqc3RyOwpAQCAtMzEyNiw3ICszMDk1 LDcgQEAKICAgaWYgKCFOSUxQIChoYW5kbGVyKSkKICAgICByZXR1cm4gY2FsbDIgKGhhbmRs ZXIsIFFmaWxlX2FjbCwgYWJzbmFtZSk7CiAKLSNpZmRlZiBIQVZFX1BPU0lYX0FDTAorI2lm ZGVmIEhBVkVfQUNMX1NFVF9GSUxFCiAgIGFic25hbWUgPSBFTkNPREVfRklMRSAoYWJzbmFt ZSk7CiAKICAgYWNsID0gYWNsX2dldF9maWxlIChTU0RBVEEgKGFic25hbWUpLCBBQ0xfVFlQ RV9BQ0NFU1MpOwpAQCAtMzE2NCw3ICszMTMzLDcgQEAKIHsKICAgTGlzcF9PYmplY3QgYWJz bmFtZTsKICAgTGlzcF9PYmplY3QgaGFuZGxlcjsKLSNpZmRlZiBIQVZFX1BPU0lYX0FDTAor I2lmZGVmIEhBVkVfQUNMX1NFVF9GSUxFCiAgIExpc3BfT2JqZWN0IGVuY29kZWRfYWJzbmFt ZTsKICAgYWNsX3QgYWNsOwogICBib29sIGZhaWw7CkBAIC0zMTc4LDcgKzMxNDcsNyBAQAog ICBpZiAoIU5JTFAgKGhhbmRsZXIpKQogICAgIHJldHVybiBjYWxsMyAoaGFuZGxlciwgUXNl dF9maWxlX2FjbCwgYWJzbmFtZSwgYWNsX3N0cmluZyk7CiAKLSNpZmRlZiBIQVZFX1BPU0lY X0FDTAorI2lmZGVmIEhBVkVfQUNMX1NFVF9GSUxFCiAgIGlmIChTVFJJTkdQIChhY2xfc3Ry aW5nKSkKICAgICB7CiAgICAgICBhY2wgPSBhY2xfZnJvbV90ZXh0IChTU0RBVEEgKGFjbF9z dHJpbmcpKTsKQEAgLTMxOTMsNyArMzE2Miw3IEBACiAgICAgICBmYWlsID0gKGFjbF9zZXRf ZmlsZSAoU1NEQVRBIChlbmNvZGVkX2Fic25hbWUpLCBBQ0xfVFlQRV9BQ0NFU1MsCiAJCQkg ICAgYWNsKQogCSAgICAgICE9IDApOwotICAgICAgaWYgKGZhaWwgJiYgIUFDTF9OT1RfV0VM TF9TVVBQT1JURUQgKGVycm5vKSkKKyAgICAgIGlmIChmYWlsICYmIGFjbF9lcnJub192YWxp ZCAoZXJybm8pKQogCXJlcG9ydF9maWxlX2Vycm9yICgiU2V0dGluZyBBQ0wiLCBGY29ucyAo YWJzbmFtZSwgUW5pbCkpOwogCiAgICAgICBhY2xfZnJlZSAoYWNsKTsKCg== --------------040804070600040302090506--