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#13807: updated version to avoid MS-Windows vs non-MS-Windows clashes Date: Mon, 04 Mar 2013 18:25:32 -0800 Organization: UCLA Computer Science Department Message-ID: <5135579C.400@cs.ucla.edu> References: <512A98D5.7080000@cs.ucla.edu> <512D3508.1000906@cs.ucla.edu> <83txoxwq0p.fsf@gnu.org> <51326459.4030001@cs.ucla.edu> <83vc99tsbm.fsf@gnu.org> <51327F29.5000600@cs.ucla.edu> <83ppzgtp2c.fsf@gnu.org> <5133E313.5040701@cs.ucla.edu> <83ip57t8h3.fsf@gnu.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------040908020407060001050605" X-Trace: ger.gmane.org 1362450902 7330 80.91.229.3 (5 Mar 2013 02:35:02 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Tue, 5 Mar 2013 02:35:02 +0000 (UTC) Cc: 13807@debbugs.gnu.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Tue Mar 05 03:35:26 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 1UChiu-0003QR-9J for geb-bug-gnu-emacs@m.gmane.org; Tue, 05 Mar 2013 03:35:24 +0100 Original-Received: from localhost ([::1]:53848 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UChiY-0006sZ-Gz for geb-bug-gnu-emacs@m.gmane.org; Mon, 04 Mar 2013 21:35:02 -0500 Original-Received: from eggs.gnu.org ([208.118.235.92]:45330) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UChiQ-0006rv-5u for bug-gnu-emacs@gnu.org; Mon, 04 Mar 2013 21:34:58 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UChiM-0004em-Dy for bug-gnu-emacs@gnu.org; Mon, 04 Mar 2013 21:34:54 -0500 Original-Received: from debbugs.gnu.org ([140.186.70.43]:55355) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UChaW-0002ZE-SF for bug-gnu-emacs@gnu.org; Mon, 04 Mar 2013 21:26:44 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.72) (envelope-from ) id 1UChao-0007xF-BZ for bug-gnu-emacs@gnu.org; Mon, 04 Mar 2013 21:27:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Paul Eggert Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 05 Mar 2013 02:27:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 13807 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 13807-submit@debbugs.gnu.org id=B13807.136245036730451 (code B ref 13807); Tue, 05 Mar 2013 02:27:02 +0000 Original-Received: (at 13807) by debbugs.gnu.org; 5 Mar 2013 02:26:07 +0000 Original-Received: from localhost ([127.0.0.1]:59464 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1UChZt-0007v1-A3 for submit@debbugs.gnu.org; Mon, 04 Mar 2013 21:26:07 -0500 Original-Received: from smtp.cs.ucla.edu ([131.179.128.62]:57993) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1UChZn-0007uI-TP for 13807@debbugs.gnu.org; Mon, 04 Mar 2013 21:26:03 -0500 Original-Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id 31C54A60071; Mon, 4 Mar 2013 18:25:36 -0800 (PST) X-Virus-Scanned: amavisd-new at smtp.cs.ucla.edu Original-Received: from smtp.cs.ucla.edu ([127.0.0.1]) by localhost (smtp.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id s7hGDO0Te0X8; Mon, 4 Mar 2013 18:25:32 -0800 (PST) Original-Received: from [192.168.1.9] (pool-71-189-154-249.lsanca.fios.verizon.net [71.189.154.249]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id B9254A60065; Mon, 4 Mar 2013 18:25:32 -0800 (PST) User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130221 Thunderbird/17.0.3 In-Reply-To: <83ip57t8h3.fsf@gnu.org> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.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:72099 Archived-At: This is a multi-part message in MIME format. --------------040908020407060001050605 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 03/04/13 08:50, Eli Zaretskii wrote: > it's out there, and others might bump into it. OK. Luckily, with the latest proposed patch, Emacs users will be less likely to bump into the NFS problem, since Emacs won't attempt to create lock files that exploit the issue. > These issues are unrelated to whether Emacs on Windows does or doesn't > lock files. They existed before, as did the issue with FAT32 volumes > being used from Posix hosts. Yes, quite right. Sorry I misunderstood you. > I think you exaggerate the probability of having Emacs running on > Windows to access via NFS files shared with Posix systems. Possibly. It depends on local practice. Many locations don't use NFS at all. Around here we use NFS heavily. > This will need a no-op emulation of fchmod for Windows (since a file > created here will be world-writable anyway). OK, thanks. Also, older POSIXish hosts that lack mkstemp won't need the fchmod either. I added the following to try to address these two points. Revised complete patch attached, relative to trunk bzr 111938. === modified file 'src/filelock.c' --- src/filelock.c 2013-03-04 19:27:39 +0000 +++ src/filelock.c 2013-03-04 19:36:45 +0000 @@ -407,15 +407,21 @@ USE_SAFE_ALLOCA; char *nonce = SAFE_ALLOCA (lfdirlen + sizeof nonce_base); int fd; + bool need_fchmod; + mode_t world_readable = S_IRUSR | S_IRGRP | S_IROTH; memcpy (nonce, lfname, lfdirlen); strcpy (nonce + lfdirlen, nonce_base); #if HAVE_MKSTEMP + /* Prefer mkstemp if available, as it avoids a race between + mktemp and emacs_open. */ fd = mkstemp (nonce); + need_fchmod = 1; #else mktemp (nonce); fd = emacs_open (nonce, O_WRONLY | O_CREAT | O_EXCL | O_BINARY, - S_IRUSR | S_IWUSR); + world_readable); + need_fchmod = 0; #endif if (fd < 0) @@ -425,7 +431,7 @@ ptrdiff_t lock_info_len = strlen (lock_info_str); err = 0; if (emacs_write (fd, lock_info_str, lock_info_len) != lock_info_len - || fchmod (fd, S_IRUSR | S_IRGRP | S_IROTH) != 0) + || (need_fchmod && fchmod (fd, world_readable) != 0)) err = errno; if (emacs_close (fd) != 0) err = errno; === modified file 'src/w32.c' --- src/w32.c 2013-03-03 23:12:54 +0000 +++ src/w32.c 2013-03-05 01:42:12 +0000 @@ -3416,6 +3416,12 @@ } int +fchmod (int fd, mode_t mode) +{ + return 0; +} + +int sys_rename_replace (const char *oldname, const char *newname, BOOL force) { BOOL result; === modified file 'src/w32.h' --- src/w32.h 2013-03-03 23:12:54 +0000 +++ src/w32.h 2013-03-05 01:42:12 +0000 @@ -186,6 +186,7 @@ extern void srandom (int); extern int random (void); +extern int fchmod (int, mode_t); extern int sys_rename_replace (char const *, char const *, BOOL); extern int sys_pipe (int *); --------------040908020407060001050605 Content-Type: text/plain; charset=UTF-8; name="filelock2.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="filelock2.txt" PT09IG1vZGlmaWVkIGZpbGUgJ2V0Yy9DaGFuZ2VMb2cnCi0tLSBldGMvQ2hhbmdlTG9nCTIw MTMtMDMtMDMgMDA6MDI6MTkgKzAwMDAKKysrIGV0Yy9DaGFuZ2VMb2cJMjAxMy0wMy0wNCAx Nzo0OToyMyArMDAwMApAQCAtMSwzICsxLDggQEAKKzIwMTMtMDMtMDQgIFBhdWwgRWdnZXJ0 ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCisJRklMRSdzIGxvY2sgaXMgbm93IGFsd2F5cyAu I0ZJTEUgYW5kIG1heSBiZSBhIHJlZ3VsYXIgZmlsZSAoQnVnIzEzODA3KS4KKwkqIE5FV1M6 IERvY3VtZW50IHRoaXMuCisKIDIwMTMtMDMtMDIgIEJpbGwgV29obGVyICA8d29obGVyQG5l d3QuY29tPgogCiAJUmVsZWFzZSBNSC1FIHZlcnNpb24gOC41LgoKPT09IG1vZGlmaWVkIGZp bGUgJ2V0Yy9ORVdTJwotLS0gZXRjL05FV1MJMjAxMy0wMy0wMyAwMDowMjoxOSArMDAwMAor KysgZXRjL05FV1MJMjAxMy0wMy0wMyAwMDoxODoxMyArMDAwMApAQCAtMzIwLDcgKzMyMCw3 IEBACiAqKiBUaGUgYGRlZmFsaWFzLWZzZXQtZnVuY3Rpb24nIHByb3BlcnR5IGxldHMgeW91 IGNhdGNoIGNhbGxzIHRvIGRlZmFsaWFzCiBhbmQgcmVkaXJlY3QgdGhlbSB0byB5b3VyIG93 biBmdW5jdGlvbiBpbnN0ZWFkIG9mIGBmc2V0Jy4KIAotKiogVGhlIGxvY2sgZm9yICdESVIv RklMRScgaXMgbm93ICdESVIvLiNGSUxFJyBvciAnRElSLy4jLUZJTEUnLgorKiogVGhlIGxv Y2sgZm9yICdESVIvRklMRScgaXMgbm93ICdESVIvLiNGSUxFJyBhbmQgbWF5IGJlIGEgcmVn dWxhciBmaWxlLgogV2hlbiB5b3UgZWRpdCBESVIvRklMRSwgRW1hY3Mgbm9ybWFsbHkgY3Jl YXRlcyBhIHN5bWJvbGljIGxpbmsKIERJUi8uI0ZJTEUgYXMgYSBsb2NrIHRoYXQgd2FybnMg b3RoZXIgaW5zdGFuY2VzIG9mIEVtYWNzIHRoYXQgRElSL0ZJTEUKIGlzIGJlaW5nIGVkaXRl ZC4gIEZvcm1lcmx5LCBpZiB0aGVyZSB3YXMgYWxyZWFkeSBhIG5vbi1zeW1saW5rIGZpbGUK QEAgLTMyOCw5ICszMjgsOCBAQAogdGhyb3VnaCBESVIvLiNGSUxFLjkuICBUaGVzZSBmYWxs YmFja3MgaGF2ZSBiZWVuIHJlbW92ZWQsIHNvIHRoYXQKIEVtYWNzIG5vdyBubyBsb25nZXIg bG9ja3MgRElSL0ZJTEUgaW4gdGhhdCBjYXNlLgogCi1PbiBNUy1XaW5kb3dzIHRoZSBsb2Nr IGlzIGEgcmVndWxhciBmaWxlIERJUi8uIy1GSUxFLCBub3QgYSBzeW1saW5rLgotTVMtV2lu ZG93cyBhbmQgbm9uLU1TLVdpbmRvd3MgaW1wbGVtZW50YXRpb25zIG9mIEVtYWNzIGlnbm9y ZSBlYWNoCi1vdGhlcidzIGxvY2tzLgorT24gZmlsZSBzeXN0ZW1zIHRoYXQgZG8gbm90IHN1 cHBvcnQgc3ltYm9saWMgbGlua3MsIHRoZSBsb2NrIGlzIG5vdyBhCityZWd1bGFyIGZpbGUg d2l0aCBjb250ZW50cyBiZWluZyB3aGF0IHdvdWxkIGhhdmUgYmVlbiBpbiB0aGUgc3ltbGlu ay4KIAogKiogVGhlIDl0aCBlbGVtZW50IHJldHVybmVkIGJ5IGBmaWxlLWF0dHJpYnV0ZXMn IGlzIG5vdyB1bnNwZWNpZmllZC4KIEZvcm1lcmx5LCBpdCB3YXMgdCBpZiB0aGUgZmlsZSdz IGdpZCB3b3VsZCBjaGFuZ2UgaWYgZmlsZSB3ZXJlIGRlbGV0ZWQKCj09PSBtb2RpZmllZCBm aWxlICdzcmMvQ2hhbmdlTG9nJwotLS0gc3JjL0NoYW5nZUxvZwkyMDEzLTAzLTA0IDE3OjM1 OjI5ICswMDAwCisrKyBzcmMvQ2hhbmdlTG9nCTIwMTMtMDMtMDUgMDE6NDI6MTIgKzAwMDAK QEAgLTEsNSArMSw1NiBAQAogMjAxMy0wMy0wNCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAY3Mu dWNsYS5lZHU+CiAKKwlGSUxFJ3MgbG9jayBpcyBub3cgYWx3YXlzIC4jRklMRSBhbmQgbWF5 IGJlIGEgcmVndWxhciBmaWxlIChCdWcjMTM4MDcpLgorCSogZmlsZWxvY2suYzogSW5jbHVk ZSA8Yy1jdHlwZS5oPi4KKwkoTUFYX0xGSU5GTyk6IE5ldyB0b3AtbGV2ZWwgY29uc3RhbnQu CisJKGxvY2tfaW5mb190eXBlKTogUmVtb3ZlIG1lbWJlcnMgcGlkLCBib290X3RpbWUuICBB ZGQgbWVtYmVycyBhdCwKKwlkb3QsIGNvbG9uLiAgQ2hhbmdlIHVzZXIgbWVtYmVyIHRvIGJl IHRoZSBlbnRpcmUgYnVmZmVyLCBub3QgYQorCXBvaW50ZXIuICBUaGlzIGFsbG93cyB1cyB0 byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYSBmb3JlaWduCisJcGlkIG9yIGJvb3QgdGltZSBl eGNlZWRzIHRoZSBsb2NhbCByYW5nZS4gIEFsbCB1c2VzIGNoYW5nZWQuCisJKExJTktTX01J R0hUX05PVF9XT1JLKTogTmV3IGNvbnN0YW50LgorCShGUkVFX0xPQ0tfSU5GTyk6IFJlbW92 ZSwgYXMgdGhlIHBpZWNlcyBubyBsb25nZXIgbmVlZCBmcmVlaW5nLgorCShkZWZpbmVkX1dJ TkRPV1NOVCk6IFJlbW92ZS4KKwkoTUFLRV9MT0NLX05BTUUsIGZpbGVfaW5fbG9ja19maWxl X25hbWUpOgorCUFsd2F5cyB1c2UgLiNGSUxFIChub3QgLiMtRklMRSkgZm9yIHRoZSBmaWxl IGxvY2ssCisJZXZlbiBpZiBpdCBpcyBhIHJlZ3VsYXIgZmlsZS4KKwkocmVuYW1lX2xvY2tf ZmlsZSk6IE5ldyBmdW5jdGlvbi4KKwkoY3JlYXRlX2xvY2tfZmlsZSk6IFVzZSBpdC4KKwko Y3JlYXRlX2xvY2tfZmlsZSwgcmVhZF9sb2NrX2RhdGEpOgorCVByZWZlciBhIHN5bWJvbGlj IGxpbmsgZm9yIHRoZSBsb2NrIGZpbGUsIGZhbGxpbmcgYmFjayBvbiBhCisJcmVndWxhciBm aWxlIGlmIHN5bWxpbmtzIGRvbid0IHdvcmsuICBEbyBub3QgdHJ5IHRvIGNyZWF0ZQorCXN5 bWxpbmtzIG9uIE1TLVdpbmRvd3MsIGR1ZSB0byBzZWN1cml0eSBoYXNzbGVzLiAgU3RpY2sg d2l0aAorCVBPU0lYaXNoIGZ1bmN0aW9ucyAob3BlbiwgcmVhZCwgd3JpdGUsIGNsb3NlLCBm Y2htb2QsIHJlYWRsaW5rLCBzeW1saW5rLAorCWxpbmssIHJlbmFtZSwgdW5saW5rLCBta3N0 ZW1wKSB3aGVuIGNyZWF0aW5nIGxvY2tzLCBhcyBhIEdOVWlzaAorCWhvc3QgbWF5IGJlIHVz aW5nIGEgV2luZG93c2lzaCBmaWxlIHN5c3RlbSwgYW5kIGNhbm5vdCB1c2UKKwlNUy1XaW5k b3dzLW9ubHkgc3lzdGVtIGNhbGxzLiAgRmFsbCBiYWNrIG9uIG1rdGVtcCBpZiBta3N0ZW1w CisJZG9lc24ndCB3b3JrLiAgRG9uJ3QgZmFpbCBtZXJlbHkgYmVjYXVzZSBvZiBhIHN5bWxp bmstY29udGVudHMKKwlsZW5ndGggbGltaXQgaW4gdGhlIGN1cnJlbnQgZmlsZSBzeXN0ZW07 IGZhbGwgYmFjayBvbiByZWd1bGFyCisJZmlsZXMuICBJbmNyZWFzZSB0aGUgc3ltbGluayBj b250ZW50cyBsZW5ndGggbGltaXQgdG8gOCBLaUIsIHRoaXMKKwlzaG91bGQgYmUgYmlnIGVu b3VnaCBmb3IgYW55IHJlYWwgdXNlIGFuZCBkb2Vzbid0IGNydW5jaCB0aGUKKwlzdGFjay4K KwkoY3JlYXRlX2xvY2tfZmlsZSwgbG9ja19maWxlXzEsIHJlYWRfbG9ja19kYXRhKToKKwlT aW1wbGlmeSBhbGxvY2F0aW9uIG9mIGxvY2sgZmlsZSBidWZmZXJzIG5vdyB0aGF0IHRoZXkg Zml0IGluIDggS2lCLgorCShsb2NrX2ZpbGVfMSk6IFJldHVybiBlcnJvciBudW1iZXIsIG5v dCBib29sLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KKwkocmVhZF9sb2NrX2RhdGEpOiBSZXR1 cm4gc2l6ZSBvZiBsb2NrIGZpbGUgY29udGVudHMsIG5vdCBMaXNwIG9iamVjdC4KKwlBbGwg Y2FsbGVycyBjaGFuZ2VkLiAgSGFuZGxlIGEgcmFjZSBjb25kaXRpb24gaWYgc29tZSBvdGhl ciBwcm9jZXNzCisJcmVwbGFjZXMgYSByZWd1bGFyLWZpbGUgbG9jayB3aXRoIGEgc3ltbGlu ayBsb2NrIG9yIHZpY2UgdmVyc2EsCisJd2hpbGUgd2UncmUgdHJ5aW5nIHRvIHJlYWQgdGhl IGxvY2suCisJKGN1cnJlbnRfbG9ja19vd25lcik6IFBhcnNlIGNvbnRlbnRzIG1vcmUgY2Fy ZWZ1bGx5LCB0byBoZWxwIGF2b2lkCisJY29uZnVzaW5nIGEgcmVndWxhci1maWxlIGxvY2sg d2l0aCBzb21lIG90aGVyIGFwcGxpY2F0aW9uJ3MgdXNlCisJb2YgdGhlIGZpbGUuICBDaGVj ayBmb3IgbG9jayBmaWxlIGNvbnRlbnRzIGJlaW5nIHRvbyBsb25nLCBvcgorCW5vdCBwYXJz aW5nIGNvcnJlY3RseS4KKwkoY3VycmVudF9sb2NrX293bmVyLCBsb2NrX2ZpbGUpOgorCUFs bG93IGZvcmVpZ24gcGlkIGFuZCBib290IHRpbWVzIHRoYXQgZXhjZWVkIHRoZSBsb2NhbCBy YW5nZS4KKwkoY3VycmVudF9sb2NrX293bmVyLCBsb2NrX2lmX2ZyZWUsIGxvY2tfZmlsZSk6 CisJU2ltcGxpZnkgYWxsb2NhdGlvbiBvZiBsb2NrIGZpbGUgY29udGVudHMuCisJKiB3MzIu YyAoc3lzX3JlbmFtZV9yZXBsYWNlKTogTmV3IGZ1bmN0aW9uLCBjb250YWluaW5nIG1vc3Qg b2YKKwl0aGUgY29udGVudHMgb2YgdGhlIG9sZCBzeXNfcmVuYW1lLgorCShzeXNfcmVuYW1l KTogVXNlIGl0LgorCShmY2htb2QpOiBOZXcgZHVtbXkgZnVuY3Rpb24uCisJKiB3MzIuaCAo c3lzX3JlbmFtZV9yZXBsYWNlLCBmY2htb2QpOiBOZXcgZGVjbHMuCisKKzIwMTMtMDMtMDQg IFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorCiAJRml4IG1pc3VzZSBvZiBJ bWFnZU1hZ2ljayB0aGF0IGNhdXNlZCBjb3JlIGR1bXAgKEJ1ZyMxMzg0NikuCiAJKiBpbWFn ZS5jIChpbWFnZW1hZ2lja19sb2FkX2ltYWdlKTogQ2FsY3VsYXRlIGhlaWdodCBhbmQgd2lk dGgKIAlhZnRlciBmbGF0dGVuaW5nIHRoZSBpbWFnZSwgbm90IGJlZm9yZS4KCj09PSBtb2Rp ZmllZCBmaWxlICdzcmMvZmlsZWxvY2suYycKLS0tIHNyYy9maWxlbG9jay5jCTIwMTMtMDMt MDIgMjE6MDU6NTIgKzAwMDAKKysrIHNyYy9maWxlbG9jay5jCTIwMTMtMDMtMDQgMTk6MzY6 NDUgKzAwMDAKQEAgLTM4LDYgKzM4LDggQEAKIAogI2luY2x1ZGUgPGVycm5vLmg+CiAKKyNp bmNsdWRlIDxjLWN0eXBlLmg+CisKICNpbmNsdWRlICJsaXNwLmgiCiAjaW5jbHVkZSAiY2hh cmFjdGVyLmgiCiAjaW5jbHVkZSAiYnVmZmVyLmgiCkBAIC02NCw3ICs2Niw3IEBACiAjZGVm aW5lIFdUTVBfRklMRSAiL3Zhci9sb2cvd3RtcCIKICNlbmRpZgogCi0vKiBPbiBub24tTVMt V2luZG93cyBzeXN0ZW1zLCB1c2UgYSBzeW1ib2xpYyBsaW5rIHRvIHJlcHJlc2VudCBhIGxv Y2suCisvKiBOb3JtYWxseSB1c2UgYSBzeW1ib2xpYyBsaW5rIHRvIHJlcHJlc2VudCBhIGxv Y2suCiAgICBUaGUgc3RyYXRlZ3k6IHRvIGxvY2sgYSBmaWxlIEZOLCBjcmVhdGUgYSBzeW1s aW5rIC4jRk4gaW4gRk4ncwogICAgZGlyZWN0b3J5LCB3aXRoIGxpbmsgZGF0YSBgdXNlckBo b3N0LnBpZCcuICBUaGlzIGF2b2lkcyBhIHNpbmdsZQogICAgbW91bnQgKD09IGZhaWx1cmUp IHBvaW50IGZvciBsb2NrIGZpbGVzLgpAQCAtMTAwLDEwICsxMDIsMjEgQEAKIAogICAgLS1r YXJsQGNzLnVtYi5lZHUva2FybEBocS5pbGVhZi5jb20uCiAKLSAgIE9uIE1TLVdpbmRvd3Ms IHN5bWJvbGljIGxpbmtzIGRvIG5vdCB3b3JrIHdlbGwsIHNvIGluc3RlYWQgb2YgYQotICAg c3ltbGluayAuI0ZOIC0+ICd1c2VyQGhvc3QucGlkJywgdGhlIGxvY2sgaXMgYSByZWd1bGFy IGZpbGUgLiMtRk4KLSAgIHdpdGggY29udGVudHMgJ3VzZXJAaG9zdC5waWQnLiAgTVMtV2lu ZG93cyBhbmQgbm9uLU1TLVdpbmRvd3MKLSAgIHZlcnNpb25zIG9mIEVtYWNzIGlnbm9yZSBl YWNoIG90aGVyJ3MgbG9ja3MuICAqLworICAgT24gc29tZSBmaWxlIHN5c3RlbXMsIG5vdGFi bHkgdGhvc2Ugb2YgTVMtV2luZG93cywgc3ltYm9saWMgbGlua3MKKyAgIGRvIG5vdCB3b3Jr IHdlbGwsIHNvIGluc3RlYWQgb2YgYSBzeW1saW5rIC4jRk4gLT4gJ3VzZXJAaG9zdC5waWQn LAorICAgdGhlIGxvY2sgaXMgYSByZWd1bGFyIGZpbGUgLiNGTiB3aXRoIGNvbnRlbnRzICd1 c2VyQGhvc3QucGlkJy4gIFRvCisgICBlc3RhYmxpc2ggYSBsb2NrLCBhIG5vbmNlIGZpbGUg aXMgY3JlYXRlZCBhbmQgdGhlbiByZW5hbWVkIHRvIC4jRk4uCisgICBPbiBNUy1XaW5kb3dz IHRoaXMgcmVuYW1pbmcgaXMgYXRvbWljIHVubGVzcyB0aGUgbG9jayBpcyBmb3JjaWJseQor ICAgYWNxdWlyZWQuICBPbiBvdGhlciBzeXN0ZW1zIHRoZSByZW5hbWluZyBpcyBhdG9taWMg aWYgdGhlIGxvY2sgaXMKKyAgIGZvcmNpYmx5IGFjcXVpcmVkOyBpZiBub3QsIHRoZSByZW5h bWluZyBpcyBkb25lIHZpYSBoYXJkIGxpbmtzLAorICAgd2hpY2ggaXMgZ29vZCBlbm91Z2gg Zm9yIGxvY2stZmlsZSBwdXJwb3Nlcy4KKworICAgVG8gc3VtbWFyaXplLCByYWNlIGNvbmRp dGlvbnMgY2FuIG9jY3VyIHdpdGggZWl0aGVyOgorCisgICAqIEZvcmNlZCBsb2NrcyBvbiBN Uy1XaW5kb3dzIHN5c3RlbXMuCisKKyAgICogTm9uLWZvcmNlZCBsb2NrcyBvbiBub24tTVMt V2luZG93cyBzeXN0ZW1zIHRoYXQgc3VwcG9ydCBuZWl0aGVyCisgICAgIGhhcmQgbm9yIHN5 bWJvbGljIGxpbmtzLiAgKi8KIAogDAogLyogUmV0dXJuIHRoZSB0aW1lIG9mIHRoZSBsYXN0 IHN5c3RlbSBib290LiAgKi8KQEAgLTI4NCwzMCArMjk3LDMxIEBACiB9CiAjZW5kaWYgLyog Qk9PVF9USU1FICovCiAMCisvKiBBbiBhcmJpdHJhcnkgbGltaXQgb24gbG9jayBjb250ZW50 cyBsZW5ndGguICA4IEsgc2hvdWxkIGJlIHBsZW50eQorICAgYmlnIGVub3VnaCBpbiBwcmFj dGljZS4gICovCitlbnVtIHsgTUFYX0xGSU5GTyA9IDggKiAxMDI0IH07CisKIC8qIEhlcmUg aXMgdGhlIHN0cnVjdHVyZSB0aGF0IHN0b3JlcyBpbmZvcm1hdGlvbiBhYm91dCBhIGxvY2su ICAqLwogCiB0eXBlZGVmIHN0cnVjdAogewotICBjaGFyICp1c2VyOwotICBjaGFyICpob3N0 OwotICBwaWRfdCBwaWQ7Ci0gIHRpbWVfdCBib290X3RpbWU7CisgIC8qIExvY2F0aW9uIG9m ICdAJywgJy4nLCAnOicgaW4gVVNFUi4gIElmIHRoZXJlJ3Mgbm8gY29sb24sIENPTE9OCisg ICAgIHBvaW50cyB0byB0aGUgZW5kIG9mIFVTRVIuICAqLworICBjaGFyICphdCwgKmRvdCwg KmNvbG9uOworCisgIC8qIExvY2sgZmlsZSBjb250ZW50cyBVU0VSQEhPU1QuUElEIHdpdGgg YW4gb3B0aW9uYWwgOkJPT1RfVElNRQorICAgICBhcHBlbmRlZC4gIFRoaXMgbWVtb3J5IGlz IHVzZWQgYXMgYSBsb2NrIGZpbGUgY29udGVudHMgYnVmZmVyLCBzbworICAgICBpdCBuZWVk cyByb29tIGZvciBNQVhfTEZJTkZPICsgMSBieXRlcy4gIEEgc3RyaW5nICIgKHBpZCBOTk5O KSIKKyAgICAgbWF5IGJlIGFwcGVuZGVkIHRvIHRoZSBVU0VSQEhPU1Qgd2hpbGUgZ2VuZXJh dGluZyBhIGRpYWdub3N0aWMsCisgICAgIHNvIG1ha2Ugcm9vbSBmb3IgaXRzIGV4dHJhIGJ5 dGVzIChhcyBvcHBvc2VkIHRvICIuTk5OTiIpIHRvby4gICovCisgIGNoYXIgdXNlcltNQVhf TEZJTkZPICsgMSArIHNpemVvZiAiIChwaWQgKSIgLSBzaXplb2YgIi4iXTsKIH0gbG9ja19p bmZvX3R5cGU7CiAKLS8qIEZyZWUgdGhlIHR3byBkeW5hbWljYWxseS1hbGxvY2F0ZWQgcGll Y2VzIGluIFBUUi4gICovCi0jZGVmaW5lIEZSRUVfTE9DS19JTkZPKGkpIGRvIHsgeGZyZWUg KChpKS51c2VyKTsgeGZyZWUgKChpKS5ob3N0KTsgfSB3aGlsZSAoMCkKLQotI2lmZGVmIFdJ TkRPV1NOVAotZW51bSB7IGRlZmluZWRfV0lORE9XU05UID0gMSB9OwotI2Vsc2UKLWVudW0g eyBkZWZpbmVkX1dJTkRPV1NOVCA9IDAgfTsKLSNlbmRpZgotCiAvKiBXcml0ZSB0aGUgbmFt ZSBvZiB0aGUgbG9jayBmaWxlIGZvciBGTkFNRSBpbnRvIExPQ0tOQU1FLiAgTGVuZ3RoCi0g ICB3aWxsIGJlIHRoYXQgb2YgRk5BTUUgcGx1cyB0d28gbW9yZSBmb3IgdGhlIGxlYWRpbmcg Ii4jIiwKLSAgIHBsdXMgb25lIGZvciAiLSIgaWYgTVMtV2luZG93cywgcGx1cyBvbmUgZm9y IHRoZSBudWxsLiAgKi8KKyAgIHdpbGwgYmUgdGhhdCBvZiBGTkFNRSBwbHVzIHR3byBtb3Jl IGZvciB0aGUgbGVhZGluZyAiLiMiLCBwbHVzIG9uZQorICAgZm9yIHRoZSBudWxsLiAgKi8K ICNkZWZpbmUgTUFLRV9MT0NLX05BTUUobG9ja25hbWUsIGZuYW1lKSBcCi0gIChsb2NrbmFt ZSA9IFNBRkVfQUxMT0NBIChTQllURVMgKGZuYW1lKSArIDIgKyBkZWZpbmVkX1dJTkRPV1NO VCArIDEpLCBcCisgIChsb2NrbmFtZSA9IFNBRkVfQUxMT0NBIChTQllURVMgKGZuYW1lKSAr IDIgKyAxKSwgXAogICAgZmlsbF9pbl9sb2NrX2ZpbGVfbmFtZSAobG9ja25hbWUsIGZuYW1l KSkKIAogc3RhdGljIHZvaWQKQEAgLTMxOSw3MCArMzMzLDEyNyBAQAogICBtZW1jcHkgKGxv Y2tmaWxlLCBTU0RBVEEgKGZuKSwgZGlybGVuKTsKICAgbG9ja2ZpbGVbZGlybGVuXSA9ICcu JzsKICAgbG9ja2ZpbGVbZGlybGVuICsgMV0gPSAnIyc7Ci0gIGlmIChkZWZpbmVkX1dJTkRP V1NOVCkKLSAgICBsb2NrZmlsZVtkaXJsZW4gKyAyXSA9ICctJzsKLSAgc3RyY3B5IChsb2Nr ZmlsZSArIGRpcmxlbiArIDIgKyBkZWZpbmVkX1dJTkRPV1NOVCwgYmFzZSk7Ci19CisgIHN0 cmNweSAobG9ja2ZpbGUgKyBkaXJsZW4gKyAyLCBiYXNlKTsKK30KKworLyogRm9yIHNvbWUg cmVhc29uIExpbnV4IGtlcm5lbHMgcmV0dXJuIEVQRVJNIG9uIGZpbGUgc3lzdGVtcyB0aGF0 IGRvCisgICBub3Qgc3VwcG9ydCBoYXJkIG9yIHN5bWJvbGljIGxpbmtzLiAgVGhpcyBzeW1i b2wgZG9jdW1lbnRzIHRoZSBxdWlyay4KKyAgIFRoZXJlIGlzIG5vIHdheSB0byB0ZWxsIHdo ZXRoZXIgYSBzeW1saW5rIGNhbGwgZmFpbHMgZHVlIHRvCisgICBwZXJtaXNzaW9ucyBpc3N1 ZXMgb3IgYmVjYXVzZSBsaW5rcyBhcmUgbm90IHN1cHBvcnRlZCwgYnV0IGx1Y2tpbHkKKyAg IHRoZSBsb2NrIGZpbGUgY29kZSBzaG91bGQgd29yayBlaXRoZXIgd2F5LiAgKi8KK2VudW0g eyBMSU5LU19NSUdIVF9OT1RfV09SSyA9IEVQRVJNIH07CisKKy8qIFJlbmFtZSBPTEQgdG8g TkVXLiAgSWYgRk9SQ0UsIHJlcGxhY2UgYW55IGV4aXN0aW5nIE5FVy4KKyAgIEl0IGlzIE9L IGlmIHRoZXJlIGFyZSB0ZW1wb3JhcmlseSB0d28gaGFyZCBsaW5rcyB0byBPTEQuCisgICBS ZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCAtMSAoc2V0dGluZyBlcnJubykgb3RoZXJ3aXNlLiAg Ki8KK3N0YXRpYyBpbnQKK3JlbmFtZV9sb2NrX2ZpbGUgKGNoYXIgY29uc3QgKm9sZCwgY2hh ciBjb25zdCAqbmV3LCBib29sIGZvcmNlKQoreworI2lmZGVmIFdJTkRPV1NOVAorICByZXR1 cm4gc3lzX3JlbmFtZV9yZXBsYWNlIChvbGQsIG5ldywgZm9yY2UpOworI2Vsc2UKKyAgaWYg KCEgZm9yY2UpCisgICAgeworICAgICAgaWYgKGxpbmsgKG9sZCwgbmV3KSA9PSAwKQorCXJl dHVybiB1bmxpbmsgKG9sZCkgPT0gMCB8fCBlcnJubyA9PSBFTk9FTlQgPyAwIDogLTE7Cisg ICAgICBpZiAoZXJybm8gIT0gRU5PU1lTICYmIGVycm5vICE9IExJTktTX01JR0hUX05PVF9X T1JLKQorCXJldHVybiAtMTsKKworICAgICAgLyogJ2xpbmsnIGRvZXMgbm90IHdvcmsgb24g dGhpcyBmaWxlIHN5c3RlbS4gIFRoaXMgY2FuIG9jY3VyIG9uCisJIGEgR05VL0xpbnV4IGhv c3QgbW91bnRpbmcgYSBGQVQzMiBmaWxlIHN5c3RlbS4gIEZhbGwgYmFjayBvbgorCSAncmVu YW1lJyBhZnRlciBjaGVja2luZyB0aGF0IE5FVyBkb2VzIG5vdCBleGlzdC4gIFRoZXJlIGlz IGEKKwkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIHNpbmNlIHNvbWUgb3RoZXIgcHJvY2Vz cyBtYXkgY3JlYXRlCisJIE5FVyBpbW1lZGlhdGVseSBhZnRlciB0aGUgZXhpc3RlbmNlIGNo ZWNrLCBidXQgaXQncyB0aGUgYmVzdAorCSB3ZSBjYW4gcG9ydGFibHkgZG8gaGVyZS4gICov CisgICAgICBpZiAoY2hlY2tfZXhpc3RpbmcgKG5ldykpCisJeworCSAgZXJybm8gPSBFRVhJ U1Q7CisJICByZXR1cm4gLTE7CisJfQorICAgIH0KKworICByZXR1cm4gcmVuYW1lIChvbGQs IG5ldyk7CisjZW5kaWYKK30KKworLyogQ3JlYXRlIHRoZSBsb2NrIGZpbGUgRklMRSB3aXRo IGNvbnRlbnRzIENPTlRFTlRTLiAgUmV0dXJuIDAgaWYKKyAgIHN1Y2Nlc3NmdWwsIGFuIGVy cm5vIHZhbHVlIG9uIGZhaWx1cmUuICBJZiBGT1JDRSwgcmVtb3ZlIGFueQorICAgZXhpc3Rp bmcgRklMRSBpZiBuZWNlc3NhcnkuICAqLwogCiBzdGF0aWMgaW50CiBjcmVhdGVfbG9ja19m aWxlIChjaGFyICpsZm5hbWUsIGNoYXIgKmxvY2tfaW5mb19zdHIsIGJvb2wgZm9yY2UpCiB7 Ci0gIGludCBlcnI7Ci0KICNpZmRlZiBXSU5ET1dTTlQKLSAgLyogU3ltbGlua3MgYXJlIHN1 cHBvcnRlZCBvbmx5IGJ5IGxhdGVzdCB2ZXJzaW9ucyBvZiBXaW5kb3dzLCBhbmQKLSAgICAg Y3JlYXRpbmcgdGhlbSBpcyBhIHByaXZpbGVnZWQgb3BlcmF0aW9uIHRoYXQgb2Z0ZW4gdHJp Z2dlcnMgVUFDCi0gICAgIGVsZXZhdGlvbiBwcm9tcHRzLiAgVGhlcmVmb3JlLCBpbnN0ZWFk IG9mIHVzaW5nIHN5bWxpbmtzLCB3ZQotICAgICBjcmVhdGUgYSByZWd1bGFyIGZpbGUgd2l0 aCB0aGUgbG9jayBpbmZvIHdyaXR0ZW4gYXMgaXRzCi0gICAgIGNvbnRlbnRzLiAgKi8KLSAg ewotICAgIC8qIERlbnkgZXZlcnlib2R5IGVsc2UgYW55IGtpbmQgb2YgYWNjZXNzIHRvIHRo ZSBmaWxlIHVudGlsIHdlIGFyZQotICAgICAgIGRvbmUgd3JpdGluZyBpdCBhbmQgY2xvc2Ug dGhlIGhhbmRsZS4gIFRoaXMgbWFrZXMgdGhlIGVudGlyZQotICAgICAgIG9wZW4vd3JpdGUv Y2xvc2Ugb3BlcmF0aW9uIGF0b21pYywgYXMgZmFyIGFzIG90aGVyIFdJTkRPV1NOVAotICAg ICAgIHByb2Nlc3NlcyBhcmUgY29uY2VybmVkLiAgKi8KLSAgICBpbnQgZmQgPSBfc29wZW4g KGxmbmFtZSwKLQkJICAgICBfT19XUk9OTFkgfCBfT19CSU5BUlkgfCBfT19DUkVBVCB8IF9P X0VYQ0wgfCBfT19OT0lOSEVSSVQsCi0JCSAgICAgX1NIX0RFTllSVywgU19JUkVBRCB8IFNf SVdSSVRFKTsKLQotICAgIGlmIChmZCA8IDAgJiYgZXJybm8gPT0gRUVYSVNUICYmIGZvcmNl KQotICAgICAgZmQgPSBfc29wZW4gKGxmbmFtZSwgX09fV1JPTkxZIHwgX09fQklOQVJZIHwg X09fVFJVTkMgfF9PX05PSU5IRVJJVCwKLQkJICAgX1NIX0RFTllSVywgU19JUkVBRCB8IFNf SVdSSVRFKTsKLSAgICBpZiAoZmQgPj0gMCkKLSAgICAgIHsKLQlzc2l6ZV90IGxvY2tfaW5m b19sZW4gPSBzdHJsZW4gKGxvY2tfaW5mb19zdHIpOwotCi0JZXJyID0gMDsKLQlpZiAoZW1h Y3Nfd3JpdGUgKGZkLCBsb2NrX2luZm9fc3RyLCBsb2NrX2luZm9fbGVuKSAhPSBsb2NrX2lu Zm9fbGVuKQotCSAgZXJyID0gLTE7Ci0JaWYgKGVtYWNzX2Nsb3NlIChmZCkpCi0JICBlcnIg PSAtMTsKLSAgICAgIH0KLSAgICBlbHNlCi0gICAgICBlcnIgPSAtMTsKLSAgfQorICAvKiBT eW1saW5rcyBhcmUgc3VwcG9ydGVkIG9ubHkgYnkgbGF0ZXIgdmVyc2lvbnMgb2YgV2luZG93 cywgYW5kCisgICAgIGNyZWF0aW5nIHRoZW0gaXMgYSBwcml2aWxlZ2VkIG9wZXJhdGlvbiB0 aGF0IG9mdGVuIHRyaWdnZXJzCisgICAgIFVzZXIgQWNjb3VudCBDb250cm9sIGVsZXZhdGlv biBwcm9tcHRzLiAgQXZvaWQgdGhlIHByb2JsZW0gYnkKKyAgICAgcHJldGVuZGluZyB0aGF0 ICdzeW1saW5rJyBkb2VzIG5vdCB3b3JrLiAgKi8KKyAgaW50IGVyciA9IEVOT1NZUzsKICNl bHNlCi0gIGVyciA9IHN5bWxpbmsgKGxvY2tfaW5mb19zdHIsIGxmbmFtZSk7Ci0gIGlmIChl cnIgIT0gMCAmJiBlcnJubyA9PSBFRVhJU1QgJiYgZm9yY2UpCisgIGludCBlcnIgPSBzeW1s aW5rIChsb2NrX2luZm9fc3RyLCBsZm5hbWUpID09IDAgPyAwIDogZXJybm87CisjZW5kaWYK KworICBpZiAoZXJyID09IEVFWElTVCAmJiBmb3JjZSkKICAgICB7CiAgICAgICB1bmxpbmsg KGxmbmFtZSk7Ci0gICAgICBlcnIgPSBzeW1saW5rIChsb2NrX2luZm9fc3RyLCBsZm5hbWUp OworICAgICAgZXJyID0gc3ltbGluayAobG9ja19pbmZvX3N0ciwgbGZuYW1lKSA9PSAwID8g MCA6IGVycm5vOwogICAgIH0KKworICBpZiAoZXJyID09IEVOT1NZUyB8fCBlcnIgPT0gTElO S1NfTUlHSFRfTk9UX1dPUksgfHwgZXJyID09IEVOQU1FVE9PTE9ORykKKyAgICB7CisgICAg ICBzdGF0aWMgY2hhciBjb25zdCBub25jZV9iYXNlW10gPSAiLiMtZW1hY3NYWFhYWFgiOwor ICAgICAgY2hhciAqbGFzdF9zbGFzaCA9IHN0cnJjaHIgKGxmbmFtZSwgJy8nKTsKKyAgICAg IHB0cmRpZmZfdCBsZmRpcmxlbiA9IGxhc3Rfc2xhc2ggKyAxIC0gbGZuYW1lOworICAgICAg VVNFX1NBRkVfQUxMT0NBOworICAgICAgY2hhciAqbm9uY2UgPSBTQUZFX0FMTE9DQSAobGZk aXJsZW4gKyBzaXplb2Ygbm9uY2VfYmFzZSk7CisgICAgICBpbnQgZmQ7CisgICAgICBib29s IG5lZWRfZmNobW9kOworICAgICAgbW9kZV90IHdvcmxkX3JlYWRhYmxlID0gU19JUlVTUiB8 IFNfSVJHUlAgfCBTX0lST1RIOworICAgICAgbWVtY3B5IChub25jZSwgbGZuYW1lLCBsZmRp cmxlbik7CisgICAgICBzdHJjcHkgKG5vbmNlICsgbGZkaXJsZW4sIG5vbmNlX2Jhc2UpOwor CisjaWYgSEFWRV9NS1NURU1QCisgICAgICAvKiBQcmVmZXIgbWtzdGVtcCBpZiBhdmFpbGFi bGUsIGFzIGl0IGF2b2lkcyBhIHJhY2UgYmV0d2VlbgorCSBta3RlbXAgYW5kIGVtYWNzX29w ZW4uICAqLworICAgICAgZmQgPSBta3N0ZW1wIChub25jZSk7CisgICAgICBuZWVkX2ZjaG1v ZCA9IDE7CisjZWxzZQorICAgICAgbWt0ZW1wIChub25jZSk7CisgICAgICBmZCA9IGVtYWNz X29wZW4gKG5vbmNlLCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VYQ0wgfCBPX0JJTkFSWSwK KwkJICAgICAgIHdvcmxkX3JlYWRhYmxlKTsKKyAgICAgIG5lZWRfZmNobW9kID0gMDsKICNl bmRpZgogCisgICAgICBpZiAoZmQgPCAwKQorCWVyciA9IGVycm5vOworICAgICAgZWxzZQor CXsKKwkgIHB0cmRpZmZfdCBsb2NrX2luZm9fbGVuID0gc3RybGVuIChsb2NrX2luZm9fc3Ry KTsKKwkgIGVyciA9IDA7CisJICBpZiAoZW1hY3Nfd3JpdGUgKGZkLCBsb2NrX2luZm9fc3Ry LCBsb2NrX2luZm9fbGVuKSAhPSBsb2NrX2luZm9fbGVuCisJICAgICAgfHwgKG5lZWRfZmNo bW9kICYmIGZjaG1vZCAoZmQsIHdvcmxkX3JlYWRhYmxlKSAhPSAwKSkKKwkgICAgZXJyID0g ZXJybm87CisJICBpZiAoZW1hY3NfY2xvc2UgKGZkKSAhPSAwKQorCSAgICBlcnIgPSBlcnJu bzsKKwkgIGlmICghZXJyICYmIHJlbmFtZV9sb2NrX2ZpbGUgKG5vbmNlLCBsZm5hbWUsIGZv cmNlKSAhPSAwKQorCSAgICBlcnIgPSBlcnJubzsKKwkgIGlmIChlcnIpCisJICAgIHVubGlu ayAobm9uY2UpOworCX0KKworICAgICAgU0FGRV9GUkVFICgpOworICAgIH0KKwogICByZXR1 cm4gZXJyOwogfQogCiAvKiBMb2NrIHRoZSBsb2NrIGZpbGUgbmFtZWQgTEZOQU1FLgogICAg SWYgRk9SQ0UsIGRvIHNvIGV2ZW4gaWYgaXQgaXMgYWxyZWFkeSBsb2NrZWQuCi0gICBSZXR1 cm4gdHJ1ZSBpZiBzdWNjZXNzZnVsLiAgKi8KKyAgIFJldHVybiAwIGlmIHN1Y2Nlc3NmdWws IGFuIGVycm9yIG51bWJlciBvbiBmYWlsdXJlLiAgKi8KIAotc3RhdGljIGJvb2wKK3N0YXRp YyBpbnQKIGxvY2tfZmlsZV8xIChjaGFyICpsZm5hbWUsIGJvb2wgZm9yY2UpCiB7Ci0gIGlu dCBlcnI7Ci0gIGludCBzeW1saW5rX2Vycm5vOwotICBVU0VfU0FGRV9BTExPQ0E7Ci0KICAg LyogQ2FsbCB0aGlzIGZpcnN0IGJlY2F1c2UgaXQgY2FuIEdDLiAgKi8KICAgcHJpbnRtYXhf dCBib290ID0gZ2V0X2Jvb3RfdGltZSAoKTsKIApAQCAtMzkwLDIwICs0NjEsMTYgQEAKICAg Y2hhciBjb25zdCAqdXNlcl9uYW1lID0gU1RSSU5HUCAobHVzZXJfbmFtZSkgPyBTU0RBVEEg KGx1c2VyX25hbWUpIDogIiI7CiAgIExpc3BfT2JqZWN0IGxob3N0X25hbWUgPSBGc3lzdGVt X25hbWUgKCk7CiAgIGNoYXIgY29uc3QgKmhvc3RfbmFtZSA9IFNUUklOR1AgKGxob3N0X25h bWUpID8gU1NEQVRBIChsaG9zdF9uYW1lKSA6ICIiOwotICBwdHJkaWZmX3QgbG9ja19pbmZv X3NpemUgPSAoc3RybGVuICh1c2VyX25hbWUpICsgc3RybGVuIChob3N0X25hbWUpCi0JCQkg ICAgICArIDIgKiBJTlRfU1RSTEVOX0JPVU5EIChwcmludG1heF90KQotCQkJICAgICAgKyBz aXplb2YgIkAuOiIpOwotICBjaGFyICpsb2NrX2luZm9fc3RyID0gU0FGRV9BTExPQ0EgKGxv Y2tfaW5mb19zaXplKTsKKyAgY2hhciBsb2NrX2luZm9fc3RyW01BWF9MRklORk8gKyAxXTsK ICAgcHJpbnRtYXhfdCBwaWQgPSBnZXRwaWQgKCk7CiAKLSAgZXNwcmludGYgKGxvY2tfaW5m b19zdHIsIGJvb3QgPyAiJXNAJXMuJSJwTWQiOiUicE1kIDogIiVzQCVzLiUicE1kLAotCSAg ICB1c2VyX25hbWUsIGhvc3RfbmFtZSwgcGlkLCBib290KTsKLSAgZXJyID0gY3JlYXRlX2xv Y2tfZmlsZSAobGZuYW1lLCBsb2NrX2luZm9fc3RyLCBmb3JjZSk7CisgIGlmIChzaXplb2Yg bG9ja19pbmZvX3N0cgorICAgICAgPD0gc25wcmludGYgKGxvY2tfaW5mb19zdHIsIHNpemVv ZiBsb2NrX2luZm9fc3RyLAorCQkgICBib290ID8gIiVzQCVzLiUicE1kIjolInBNZCA6ICIl c0Alcy4lInBNZCwKKwkJICAgdXNlcl9uYW1lLCBob3N0X25hbWUsIHBpZCwgYm9vdCkpCisg ICAgcmV0dXJuIEVOQU1FVE9PTE9ORzsKIAotICBzeW1saW5rX2Vycm5vID0gZXJybm87Ci0g IFNBRkVfRlJFRSAoKTsKLSAgZXJybm8gPSBzeW1saW5rX2Vycm5vOwotICByZXR1cm4gZXJy ID09IDA7CisgIHJldHVybiBjcmVhdGVfbG9ja19maWxlIChsZm5hbWUsIGxvY2tfaW5mb19z dHIsIGZvcmNlKTsKIH0KIAogLyogUmV0dXJuIHRydWUgaWYgdGltZXMgQSBhbmQgQiBhcmUg bm8gbW9yZSB0aGFuIG9uZSBzZWNvbmQgYXBhcnQuICAqLwpAQCAtNDE0LDMyICs0ODEsMzkg QEAKICAgcmV0dXJuIChhIC0gYiA+PSAtMSAmJiBhIC0gYiA8PSAxKTsKIH0KIAwKLXN0YXRp YyBMaXNwX09iamVjdAotcmVhZF9sb2NrX2RhdGEgKGNoYXIgKmxmbmFtZSkKKy8qIFJlYWQg dGhlIGRhdGEgZm9yIHRoZSBsb2NrIGZpbGUgTEZOQU1FIGludG8gTEZJTkZPLiAgUmVhZCBh dCBtb3N0CisgICBNQVhfTEZJTkZPICsgMSBieXRlcy4gIFJldHVybiB0aGUgbnVtYmVyIG9m IGJ5dGVzIHJlYWQsIG9yIC0xCisgICAoc2V0dGluZyBlcnJubykgb24gZXJyb3IuICAqLwor CitzdGF0aWMgcHRyZGlmZl90CityZWFkX2xvY2tfZGF0YSAoY2hhciAqbGZuYW1lLCBjaGFy IGxmaW5mb1tNQVhfTEZJTkZPICsgMV0pCiB7Ci0jaWZuZGVmIFdJTkRPV1NOVAotICByZXR1 cm4gZW1hY3NfcmVhZGxpbmthdCAoQVRfRkRDV0QsIGxmbmFtZSk7Ci0jZWxzZQotICBpbnQg ZmQgPSBlbWFjc19vcGVuIChsZm5hbWUsIE9fUkRPTkxZIHwgT19CSU5BUlksIFNfSVJFQUQp OwotICBzc2l6ZV90IG5ieXRlczsKLSAgLyogMjU2IGNoYXJzIGZvciB1c2VyLCAxMDI0IGNo YXJzIGZvciBob3N0LCAxMCBkaWdpdHMgZm9yIGVhY2ggb2YgMiBpbnQncy4gICovCi0gIGVu dW0geyBNQVhfTEZJTkZPID0gMjU2ICsgMTAyNCArIDEwICsgMTAgKyAyIH07Ci0gIGNoYXIg bGZpbmZvW01BWF9MRklORk8gKyAxXTsKLQotICBpZiAoZmQgPCAwKQotICAgIHJldHVybiBR bmlsOwotCi0gIG5ieXRlcyA9IGVtYWNzX3JlYWQgKGZkLCBsZmluZm8sIE1BWF9MRklORk8p OwotICBlbWFjc19jbG9zZSAoZmQpOwotCi0gIGlmIChuYnl0ZXMgPiAwKQorICBwdHJkaWZm X3QgbmJ5dGVzOworCisgIHdoaWxlICgobmJ5dGVzID0gcmVhZGxpbmthdCAoQVRfRkRDV0Qs IGxmbmFtZSwgbGZpbmZvLCBNQVhfTEZJTkZPICsgMSkpIDwgMAorCSAmJiBlcnJubyA9PSBF SU5WQUwpCiAgICAgewotICAgICAgbGZpbmZvW25ieXRlc10gPSAnXDAnOwotICAgICAgcmV0 dXJuIGJ1aWxkX3N0cmluZyAobGZpbmZvKTsKKyAgICAgIGludCBmZCA9IGVtYWNzX29wZW4g KGxmbmFtZSwgT19SRE9OTFkgfCBPX0JJTkFSWSB8IE9fTk9GT0xMT1csIDApOworICAgICAg aWYgKDAgPD0gZmQpCisJeworCSAgcHRyZGlmZl90IHJlYWRfYnl0ZXMgPSBlbWFjc19yZWFk IChmZCwgbGZpbmZvLCBNQVhfTEZJTkZPICsgMSk7CisJICBpbnQgcmVhZF9lcnJubyA9IGVy cm5vOworCSAgaWYgKGVtYWNzX2Nsb3NlIChmZCkgIT0gMCkKKwkgICAgcmV0dXJuIC0xOwor CSAgZXJybm8gPSByZWFkX2Vycm5vOworCSAgcmV0dXJuIHJlYWRfYnl0ZXM7CisJfQorCisg ICAgICBpZiAoZXJybm8gIT0gRUxPT1ApCisJcmV0dXJuIC0xOworCisgICAgICAvKiByZWFk bGlua2F0IHNhdyBhIG5vbi1zeW1saW5rLCBidXQgZW1hY3Nfb3BlbiBzYXcgYSBzeW1saW5r LgorCSBUaGUgZm9ybWVyIG11c3QgaGF2ZSBiZWVuIHJlbW92ZWQgYW5kIHJlcGxhY2VkIGJ5 IHRoZSBsYXR0ZXIuCisJIFRyeSBhZ2Fpbi4gICovCisgICAgICBRVUlUOwogICAgIH0KLSAg ZWxzZQotICAgIHJldHVybiBRbmlsOwotI2VuZGlmCisKKyAgcmV0dXJuIG5ieXRlczsKIH0K IAogLyogUmV0dXJuIDAgaWYgbm9ib2R5IG93bnMgdGhlIGxvY2sgZmlsZSBMRk5BTUUgb3Ig dGhlIGxvY2sgaXMgb2Jzb2xldGUsCkBAIC00NTEsODMgKzUyNSw3OCBAQAogY3VycmVudF9s b2NrX293bmVyIChsb2NrX2luZm9fdHlwZSAqb3duZXIsIGNoYXIgKmxmbmFtZSkKIHsKICAg aW50IHJldDsKLSAgcHRyZGlmZl90IGxlbjsKICAgbG9ja19pbmZvX3R5cGUgbG9jYWxfb3du ZXI7Ci0gIGludG1heF90IG47Ci0gIGNoYXIgKmF0LCAqZG90LCAqY29sb247Ci0gIExpc3Bf T2JqZWN0IGxmaW5mb19vYmplY3QgPSByZWFkX2xvY2tfZGF0YSAobGZuYW1lKTsKLSAgY2hh ciAqbGZpbmZvOwotICBzdHJ1Y3QgZ2Nwcm8gZ2Nwcm8xOwotCi0gIC8qIElmIG5vbmV4aXN0 ZW50IGxvY2sgZmlsZSwgYWxsIGlzIHdlbGw7IG90aGVyd2lzZSwgZ290IHN0cmFuZ2UgZXJy b3IuICovCi0gIGlmIChOSUxQIChsZmluZm9fb2JqZWN0KSkKLSAgICByZXR1cm4gZXJybm8g PT0gRU5PRU5UID8gMCA6IC0xOwotICBsZmluZm8gPSBTU0RBVEEgKGxmaW5mb19vYmplY3Qp OworICBwdHJkaWZmX3QgbGZpbmZvbGVuOworICBpbnRtYXhfdCBwaWQsIGJvb3RfdGltZTsK KyAgY2hhciAqYXQsICpkb3QsICpjb2xvbiwgKmxmaW5mb19lbmQ7CiAKICAgLyogRXZlbiBp ZiB0aGUgY2FsbGVyIGRvZXNuJ3Qgd2FudCB0aGUgb3duZXIgaW5mbywgd2Ugc3RpbGwgaGF2 ZSB0bwogICAgICByZWFkIGl0IHRvIGRldGVybWluZSByZXR1cm4gdmFsdWUuICAqLwogICBp ZiAoIW93bmVyKQogICAgIG93bmVyID0gJmxvY2FsX293bmVyOwogCisgIC8qIElmIG5vbmV4 aXN0ZW50IGxvY2sgZmlsZSwgYWxsIGlzIHdlbGw7IG90aGVyd2lzZSwgZ290IHN0cmFuZ2Ug ZXJyb3IuICovCisgIGxmaW5mb2xlbiA9IHJlYWRfbG9ja19kYXRhIChsZm5hbWUsIG93bmVy LT51c2VyKTsKKyAgaWYgKGxmaW5mb2xlbiA8IDApCisgICAgcmV0dXJuIGVycm5vID09IEVO T0VOVCA/IDAgOiAtMTsKKyAgaWYgKE1BWF9MRklORk8gPCBsZmluZm9sZW4pCisgICAgcmV0 dXJuIC0xOworICBvd25lci0+dXNlcltsZmluZm9sZW5dID0gMDsKKwogICAvKiBQYXJzZSBV U0VSQEhPU1QuUElEOkJPT1RfVElNRS4gIElmIGNhbid0IHBhcnNlLCByZXR1cm4gLTEuICAq LwogICAvKiBUaGUgVVNFUiBpcyBldmVyeXRoaW5nIGJlZm9yZSB0aGUgbGFzdCBALiAgKi8K LSAgYXQgPSBzdHJyY2hyIChsZmluZm8sICdAJyk7Ci0gIGRvdCA9IHN0cnJjaHIgKGxmaW5m bywgJy4nKTsKLSAgaWYgKCFhdCB8fCAhZG90KQotICAgIHJldHVybiAtMTsKLSAgbGVuID0g YXQgLSBsZmluZm87Ci0gIEdDUFJPMSAobGZpbmZvX29iamVjdCk7Ci0gIG93bmVyLT51c2Vy ID0geG1hbGxvYyAobGVuICsgMSk7Ci0gIG1lbWNweSAob3duZXItPnVzZXIsIGxmaW5mbywg bGVuKTsKLSAgb3duZXItPnVzZXJbbGVuXSA9IDA7CisgIG93bmVyLT5hdCA9IGF0ID0gbWVt cmNociAob3duZXItPnVzZXIsICdAJywgbGZpbmZvbGVuKTsKKyAgaWYgKCFhdCkKKyAgICBy ZXR1cm4gLTE7CisgIG93bmVyLT5kb3QgPSBkb3QgPSBzdHJyY2hyIChhdCwgJy4nKTsKKyAg aWYgKCFkb3QpCisgICAgcmV0dXJuIC0xOwogCiAgIC8qIFRoZSBQSUQgaXMgZXZlcnl0aGlu ZyBmcm9tIHRoZSBsYXN0IGAuJyB0byB0aGUgYDonLiAgKi8KKyAgaWYgKCEgY19pc2RpZ2l0 IChkb3RbMV0pKQorICAgIHJldHVybiAtMTsKICAgZXJybm8gPSAwOwotICBuID0gc3RydG9p bWF4IChkb3QgKyAxLCBOVUxMLCAxMCk7Ci0gIG93bmVyLT5waWQgPQotICAgICgoMCA8PSBu ICYmIG4gPD0gVFlQRV9NQVhJTVVNIChwaWRfdCkKLSAgICAgICYmIChUWVBFX01BWElNVU0g KHBpZF90KSA8IElOVE1BWF9NQVggfHwgZXJybm8gIT0gRVJBTkdFKSkKLSAgICAgPyBuIDog MCk7CisgIHBpZCA9IHN0cnRvaW1heCAoZG90ICsgMSwgJm93bmVyLT5jb2xvbiwgMTApOwor ICBpZiAoZXJybm8gPT0gRVJBTkdFKQorICAgIHBpZCA9IC0xOwogCi0gIGNvbG9uID0gc3Ry Y2hyIChkb3QgKyAxLCAnOicpOwogICAvKiBBZnRlciB0aGUgYDonLCBpZiB0aGVyZSBpcyBv bmUsIGNvbWVzIHRoZSBib290IHRpbWUuICAqLwotICBuID0gMDsKLSAgaWYgKGNvbG9uKQor ICBzd2l0Y2ggKG93bmVyLT5jb2xvblswXSkKICAgICB7Ci0gICAgICBlcnJubyA9IDA7Ci0g ICAgICBuID0gc3RydG9pbWF4IChjb2xvbiArIDEsIE5VTEwsIDEwKTsKKyAgICBjYXNlIDA6 CisgICAgICBib290X3RpbWUgPSAwOworICAgICAgbGZpbmZvX2VuZCA9IG93bmVyLT5jb2xv bjsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAnOic6CisgICAgICBpZiAoISBjX2lzZGln aXQgKG93bmVyLT5jb2xvblsxXSkpCisJcmV0dXJuIC0xOworICAgICAgYm9vdF90aW1lID0g c3RydG9pbWF4IChvd25lci0+Y29sb24gKyAxLCAmbGZpbmZvX2VuZCwgMTApOworICAgICAg YnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgb3du ZXItPmJvb3RfdGltZSA9Ci0gICAgKCgwIDw9IG4gJiYgbiA8PSBUWVBFX01BWElNVU0gKHRp bWVfdCkKLSAgICAgICYmIChUWVBFX01BWElNVU0gKHRpbWVfdCkgPCBJTlRNQVhfTUFYIHx8 IGVycm5vICE9IEVSQU5HRSkpCi0gICAgID8gbiA6IDApOwotCi0gIC8qIFRoZSBob3N0IGlz IGV2ZXJ5dGhpbmcgaW4gYmV0d2Vlbi4gICovCi0gIGxlbiA9IGRvdCAtIGF0IC0gMTsKLSAg b3duZXItPmhvc3QgPSB4bWFsbG9jIChsZW4gKyAxKTsKLSAgbWVtY3B5IChvd25lci0+aG9z dCwgYXQgKyAxLCBsZW4pOwotICBvd25lci0+aG9zdFtsZW5dID0gMDsKLQotICAvKiBXZSdy ZSBkb25lIGxvb2tpbmcgYXQgdGhlIGxpbmsgaW5mby4gICovCi0gIFVOR0NQUk87CisgIGlm IChsZmluZm9fZW5kICE9IG93bmVyLT51c2VyICsgbGZpbmZvbGVuKQorICAgIHJldHVybiAt MTsKIAogICAvKiBPbiBjdXJyZW50IGhvc3Q/ICAqLwotICBpZiAoU1RSSU5HUCAoRnN5c3Rl bV9uYW1lICgpKQotICAgICAgJiYgc3RyY21wIChvd25lci0+aG9zdCwgU1NEQVRBIChGc3lz dGVtX25hbWUgKCkpKSA9PSAwKQorICBpZiAoU1RSSU5HUCAoVnN5c3RlbV9uYW1lKQorICAg ICAgJiYgZG90IC0gKGF0ICsgMSkgPT0gU0JZVEVTIChWc3lzdGVtX25hbWUpCisgICAgICAm JiBtZW1jbXAgKGF0ICsgMSwgU1NEQVRBIChWc3lzdGVtX25hbWUpLCBTQllURVMgKFZzeXN0 ZW1fbmFtZSkpID09IDApCiAgICAgewotICAgICAgaWYgKG93bmVyLT5waWQgPT0gZ2V0cGlk ICgpKQorICAgICAgaWYgKHBpZCA9PSBnZXRwaWQgKCkpCiAgICAgICAgIHJldCA9IDI7IC8q IFdlIG93biBpdC4gICovCi0gICAgICBlbHNlIGlmIChvd25lci0+cGlkID4gMAotICAgICAg ICAgICAgICAgJiYgKGtpbGwgKG93bmVyLT5waWQsIDApID49IDAgfHwgZXJybm8gPT0gRVBF Uk0pCi0JICAgICAgICYmIChvd25lci0+Ym9vdF90aW1lID09IDAKLQkJICAgfHwgd2l0aGlu X29uZV9zZWNvbmQgKG93bmVyLT5ib290X3RpbWUsIGdldF9ib290X3RpbWUgKCkpKSkKKyAg ICAgIGVsc2UgaWYgKDAgPCBwaWQgJiYgcGlkIDw9IFRZUEVfTUFYSU1VTSAocGlkX3QpCisg ICAgICAgICAgICAgICAmJiAoa2lsbCAocGlkLCAwKSA+PSAwIHx8IGVycm5vID09IEVQRVJN KQorCSAgICAgICAmJiAoYm9vdF90aW1lID09IDAKKwkJICAgfHwgKGJvb3RfdGltZSA8PSBU WVBFX01BWElNVU0gKHRpbWVfdCkKKwkJICAgICAgICYmIHdpdGhpbl9vbmVfc2Vjb25kIChi b290X3RpbWUsIGdldF9ib290X3RpbWUgKCkpKSkpCiAgICAgICAgIHJldCA9IDE7IC8qIEFu IGV4aXN0aW5nIHByb2Nlc3Mgb24gdGhpcyBtYWNoaW5lIG93bnMgaXQuICAqLwotICAgICAg LyogVGhlIG93bmVyIHByb2Nlc3MgaXMgZGVhZCBvciBoYXMgYSBzdHJhbmdlIHBpZCAoPD0w KSwgc28gdHJ5IHRvCisgICAgICAvKiBUaGUgb3duZXIgcHJvY2VzcyBpcyBkZWFkIG9yIGhh cyBhIHN0cmFuZ2UgcGlkLCBzbyB0cnkgdG8KICAgICAgICAgIHphcCB0aGUgbG9ja2ZpbGUu ICAqLwotICAgICAgZWxzZSBpZiAodW5saW5rIChsZm5hbWUpIDwgMCkKLSAgICAgICAgcmV0 ID0gLTE7CiAgICAgICBlbHNlCi0JcmV0ID0gMDsKKyAgICAgICAgcmV0dXJuIHVubGluayAo bGZuYW1lKTsKICAgICB9CiAgIGVsc2UKICAgICB7IC8qIElmIHdlIHdhbnRlZCB0byBzdXBw b3J0IHRoZSBjaGVjayBmb3Igc3RhbGUgbG9ja3Mgb24gcmVtb3RlIG1hY2hpbmVzLApAQCAt NTM1LDExICs2MDQsNiBAQAogICAgICAgcmV0ID0gMTsKICAgICB9CiAKLSAgLyogQXZvaWQg Z2FyYmFnZS4gICovCi0gIGlmIChvd25lciA9PSAmbG9jYWxfb3duZXIgfHwgcmV0IDw9IDAp Ci0gICAgewotICAgICAgRlJFRV9MT0NLX0lORk8gKCpvd25lcik7Ci0gICAgfQogICByZXR1 cm4gcmV0OwogfQogCkBAIC01NTEsMjkgKzYxNSwyNSBAQAogICAgUmV0dXJuIC0xIGlmIGNh bm5vdCBsb2NrIGZvciBhbnkgb3RoZXIgcmVhc29uLiAgKi8KIAogc3RhdGljIGludAotbG9j a19pZl9mcmVlIChsb2NrX2luZm9fdHlwZSAqY2xhc2hlciwgcmVnaXN0ZXIgY2hhciAqbGZu YW1lKQorbG9ja19pZl9mcmVlIChsb2NrX2luZm9fdHlwZSAqY2xhc2hlciwgY2hhciAqbGZu YW1lKQogewotICB3aGlsZSAoISBsb2NrX2ZpbGVfMSAobGZuYW1lLCAwKSkKKyAgaW50IGVy cjsKKyAgd2hpbGUgKChlcnIgPSBsb2NrX2ZpbGVfMSAobGZuYW1lLCAwKSkgPT0gRUVYSVNU KQogICAgIHsKLSAgICAgIGludCBsb2NrZXI7Ci0KLSAgICAgIGlmIChlcnJubyAhPSBFRVhJ U1QpCi0JcmV0dXJuIC0xOwotCi0gICAgICBsb2NrZXIgPSBjdXJyZW50X2xvY2tfb3duZXIg KGNsYXNoZXIsIGxmbmFtZSk7Ci0gICAgICBpZiAobG9ja2VyID09IDIpCi0gICAgICAgIHsK LSAgICAgICAgICBGUkVFX0xPQ0tfSU5GTyAoKmNsYXNoZXIpOwotICAgICAgICAgIHJldHVy biAwOyAgIC8qIFdlIG91cnNlbHZlcyBsb2NrZWQgaXQuICAqLwotICAgICAgICB9Ci0gICAg ICBlbHNlIGlmIChsb2NrZXIgPT0gMSkKLSAgICAgICAgcmV0dXJuIDE7ICAvKiBTb21lb25l IGVsc2UgaGFzIGl0LiAgKi8KLSAgICAgIGVsc2UgaWYgKGxvY2tlciA9PSAtMSkKLQlyZXR1 cm4gLTE7ICAgLyogY3VycmVudF9sb2NrX293bmVyIHJldHVybmVkIHN0cmFuZ2UgZXJyb3Iu ICAqLworICAgICAgc3dpdGNoIChjdXJyZW50X2xvY2tfb3duZXIgKGNsYXNoZXIsIGxmbmFt ZSkpCisJeworCWNhc2UgMjoKKwkgIHJldHVybiAwOyAgIC8qIFdlIG91cnNlbHZlcyBsb2Nr ZWQgaXQuICAqLworCWNhc2UgMToKKwkgIHJldHVybiAxOyAgIC8qIFNvbWVvbmUgZWxzZSBo YXMgaXQuICAqLworCWNhc2UgLTE6CisJICByZXR1cm4gLTE7ICAvKiBjdXJyZW50X2xvY2tf b3duZXIgcmV0dXJuZWQgc3RyYW5nZSBlcnJvci4gICovCisJfQogCiAgICAgICAvKiBXZSBk ZWxldGVkIGEgc3RhbGUgbG9jazsgdHJ5IGFnYWluIHRvIGxvY2sgdGhlIGZpbGUuICAqLwog ICAgIH0KLSAgcmV0dXJuIDA7CisKKyAgcmV0dXJuIGVyciA/IC0xIDogMDsKIH0KIAogLyog bG9ja19maWxlIGxvY2tzIGZpbGUgRk4sCkBAIC02NDUsMTcgKzcwNSwxNiBAQAogICBpZiAo MCA8IGxvY2tfaWZfZnJlZSAoJmxvY2tfaW5mbywgbGZuYW1lKSkKICAgICB7CiAgICAgICAv KiBTb21lb25lIGVsc2UgaGFzIHRoZSBsb2NrLiAgQ29uc2lkZXIgYnJlYWtpbmcgaXQuICAq LwotICAgICAgcHRyZGlmZl90IGxvY2tlcl9zaXplID0gKHN0cmxlbiAobG9ja19pbmZvLnVz ZXIpICsgc3RybGVuIChsb2NrX2luZm8uaG9zdCkKLQkJCSAgICAgICArIElOVF9TVFJMRU5f Qk9VTkQgKHByaW50bWF4X3QpCi0JCQkgICAgICAgKyBzaXplb2YgIkAgKHBpZCApIik7Ci0g ICAgICBjaGFyICpsb2NrZXIgPSBTQUZFX0FMTE9DQSAobG9ja2VyX3NpemUpOwotICAgICAg cHJpbnRtYXhfdCBwaWQgPSBsb2NrX2luZm8ucGlkOwogICAgICAgTGlzcF9PYmplY3QgYXR0 YWNrOwotICAgICAgZXNwcmludGYgKGxvY2tlciwgIiVzQCVzIChwaWQgJSJwTWQiKSIsCi0J CWxvY2tfaW5mby51c2VyLCBsb2NrX2luZm8uaG9zdCwgcGlkKTsKLSAgICAgIEZSRUVfTE9D S19JTkZPIChsb2NrX2luZm8pOwotCi0gICAgICBhdHRhY2sgPSBjYWxsMiAoaW50ZXJuICgi YXNrLXVzZXItYWJvdXQtbG9jayIpLCBmbiwgYnVpbGRfc3RyaW5nIChsb2NrZXIpKTsKKyAg ICAgIGNoYXIgKmRvdCA9IGxvY2tfaW5mby5kb3Q7CisgICAgICBwdHJkaWZmX3QgcGlkbGVu ID0gbG9ja19pbmZvLmNvbG9uIC0gKGRvdCArIDEpOworICAgICAgc3RhdGljIGNoYXIgY29u c3QgcmVwbGFjZW1lbnRbXSA9ICIgKHBpZCAiOworICAgICAgaW50IHJlcGxhY2VtZW50bGVu ID0gc2l6ZW9mIHJlcGxhY2VtZW50IC0gMTsKKyAgICAgIG1lbW1vdmUgKGRvdCArIHJlcGxh Y2VtZW50bGVuLCBkb3QgKyAxLCBwaWRsZW4pOworICAgICAgc3RyY3B5IChkb3QgKyByZXBs YWNlbWVudGxlbiArIHBpZGxlbiwgIikiKTsKKyAgICAgIG1lbWNweSAoZG90LCByZXBsYWNl bWVudCwgcmVwbGFjZW1lbnRsZW4pOworICAgICAgYXR0YWNrID0gY2FsbDIgKGludGVybiAo ImFzay11c2VyLWFib3V0LWxvY2siKSwgZm4sCisJCSAgICAgIGJ1aWxkX3N0cmluZyAobG9j a19pbmZvLnVzZXIpKTsKICAgICAgIC8qIFRha2UgdGhlIGxvY2sgaWYgdGhlIHVzZXIgc2Fp ZCBzby4gICovCiAgICAgICBpZiAoIU5JTFAgKGF0dGFjaykpCiAJbG9ja19maWxlXzEgKGxm bmFtZSwgMSk7CkBAIC03NjAsMTAgKzgxOSw3IEBACiAgIGVsc2UgaWYgKG93bmVyID09IDIp CiAgICAgcmV0ID0gUXQ7CiAgIGVsc2UKLSAgICByZXQgPSBidWlsZF9zdHJpbmcgKGxvY2tl ci51c2VyKTsKLQotICBpZiAob3duZXIgPiAwKQotICAgIEZSRUVfTE9DS19JTkZPIChsb2Nr ZXIpOworICAgIHJldCA9IG1ha2Vfc3RyaW5nIChsb2NrZXIudXNlciwgbG9ja2VyLmF0IC0g bG9ja2VyLnVzZXIpOwogCiAgIFNBRkVfRlJFRSAoKTsKICAgcmV0dXJuIHJldDsKCj09PSBt b2RpZmllZCBmaWxlICdzcmMvdzMyLmMnCi0tLSBzcmMvdzMyLmMJMjAxMy0wMi0yOCAwNjoz MDo0OCArMDAwMAorKysgc3JjL3czMi5jCTIwMTMtMDMtMDUgMDE6NDI6MTIgKzAwMDAKQEAg LTM0MTYsNyArMzQxNiwxMyBAQAogfQogCiBpbnQKLXN5c19yZW5hbWUgKGNvbnN0IGNoYXIg KiBvbGRuYW1lLCBjb25zdCBjaGFyICogbmV3bmFtZSkKK2ZjaG1vZCAoaW50IGZkLCBtb2Rl X3QgbW9kZSkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK2ludAorc3lzX3JlbmFtZV9yZXBsYWNl IChjb25zdCBjaGFyICpvbGRuYW1lLCBjb25zdCBjaGFyICpuZXduYW1lLCBCT09MIGZvcmNl KQogewogICBCT09MIHJlc3VsdDsKICAgY2hhciB0ZW1wW01BWF9QQVRIXTsKQEAgLTM0NzIs NyArMzQ3OCw3IEBACiAJcmV0dXJuIC0xOwogICAgIH0KIAotICAvKiBFbXVsYXRlIFVuaXgg YmVoYXZpb3IgLSBuZXduYW1lIGlzIGRlbGV0ZWQgaWYgaXQgYWxyZWFkeSBleGlzdHMKKyAg LyogSWYgRk9SQ0UsIGVtdWxhdGUgVW5peCBiZWhhdmlvciAtIG5ld25hbWUgaXMgZGVsZXRl ZCBpZiBpdCBhbHJlYWR5IGV4aXN0cwogICAgICAoYXQgbGVhc3QgaWYgaXQgaXMgYSBmaWxl OyBkb24ndCBkbyB0aGlzIGZvciBkaXJlY3RvcmllcykuCiAKICAgICAgU2luY2Ugd2UgbXVz dG4ndCBkbyB0aGlzIGlmIHdlIGFyZSBqdXN0IGNoYW5naW5nIHRoZSBjYXNlIG9mIHRoZQpA QCAtMzQ5MCw3ICszNDk2LDcgQEAKIAogICByZXN1bHQgPSByZW5hbWUgKHRlbXAsIG5ld25h bWUpOwogCi0gIGlmIChyZXN1bHQgPCAwKQorICBpZiAocmVzdWx0IDwgMCAmJiBmb3JjZSkK ICAgICB7CiAgICAgICBEV09SRCB3MzJlcnIgPSBHZXRMYXN0RXJyb3IgKCk7CiAKQEAgLTM1 MzAsNiArMzUzNiwxMiBAQAogfQogCiBpbnQKK3N5c19yZW5hbWUgKGNoYXIgY29uc3QgKm9s ZCwgY2hhciBjb25zdCAqbmV3KQoreworICByZXR1cm4gc3lzX3JlbmFtZV9yZXBsYWNlIChv bGQsIG5ldywgVFJVRSk7Cit9CisKK2ludAogc3lzX3JtZGlyIChjb25zdCBjaGFyICogcGF0 aCkKIHsKICAgcmV0dXJuIF9ybWRpciAobWFwX3czMl9maWxlbmFtZSAocGF0aCwgTlVMTCkp OwoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy93MzIuaCcKLS0tIHNyYy93MzIuaAkyMDEzLTAy LTAyIDE3OjE0OjI0ICswMDAwCisrKyBzcmMvdzMyLmgJMjAxMy0wMy0wNSAwMTo0MjoxMiAr MDAwMApAQCAtMTg2LDYgKzE4Niw4IEBACiBleHRlcm4gdm9pZCBzcmFuZG9tIChpbnQpOwog ZXh0ZXJuIGludCByYW5kb20gKHZvaWQpOwogCitleHRlcm4gaW50IGZjaG1vZCAoaW50LCBt b2RlX3QpOworZXh0ZXJuIGludCBzeXNfcmVuYW1lX3JlcGxhY2UgKGNoYXIgY29uc3QgKiwg Y2hhciBjb25zdCAqLCBCT09MKTsKIGV4dGVybiBpbnQgc3lzX3BpcGUgKGludCAqKTsKIAog ZXh0ZXJuIHZvaWQgc2V0X3Byb2Nlc3NfZGlyIChjaGFyICopOwoK --------------040908020407060001050605--