delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2015/04/15/20:26:57

X-Recipient: archive-cygwin AT delorie DOT com
DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id
:list-unsubscribe:list-subscribe:list-archive:list-post
:list-help:sender:date:from:to:subject:message-id:in-reply-to
:references:mime-version:content-type; q=dns; s=default; b=Pt3Fz
Cco54x3IGxL83X7hkoWuEH44EzKDprcetriv4ovMwFlDTIRZqtjMeuICY/ALgjN4
UZoKlfbkziMFSUlUHslQWvpOJKfJDKu345NH1o+ANUGuGRZTQS8T0FMnUzLNnxCZ
wDiQ5NmPnkkFaRav89GfTQzj1VO0bm2Fqt/8nI=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id
:list-unsubscribe:list-subscribe:list-archive:list-post
:list-help:sender:date:from:to:subject:message-id:in-reply-to
:references:mime-version:content-type; s=default; bh=V7hjYb6vlCv
ehImI5qTerCurvcQ=; b=x6FHPtpWkVVFFhCgSpfxuV8oshRr2rflgJ978UKO3OX
Q+2pwSbhBvMlVfeGkP8Y/H5LoNB5QEiLRzeIDwCp+I8h7ahBhs550uWvNWV58JOF
usufzS3kSO45IXR0Zrffm8y8WR9yznvk/ryAnYXcTqX5goyyp9qvtI6L8d3hG2sg
=
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Id: <cygwin.cygwin.com>
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com
Authentication-Results: sourceware.org; auth=none
X-Virus-Found: No
X-Spam-SWARE-Status: No, score=-0.3 required=5.0 tests=AWL,BAYES_50,RCVD_IN_SORBS_DUL,SPF_PASS autolearn=ham version=3.3.2
X-HELO: conuserg004-v.nifty.com
X-Nifty-SrcIP: [121.93.68.199]
Date: Thu, 16 Apr 2015 09:26:18 +0900
From: Takashi Yano <takashi DOT yano AT nifty DOT ne DOT jp>
To: cygwin AT cygwin DOT com
Subject: Re: Cygwin hangs up if several keys are typed during outputting a lot of texts.
Message-Id: <20150416092618.9975c0e29b8703dbd8d4aa6a@nifty.ne.jp>
In-Reply-To: <20150414073456.GY7343@calimero.vinschen.de>
References: <20150304181857 DOT GM3213 AT calimero DOT vinschen DOT de> <20150305202456 DOT 9ac4815a9d590145e15f7ae2 AT nifty DOT ne DOT jp> <20150305125901 DOT GX3213 AT calimero DOT vinschen DOT de> <20150403130735 DOT d04e41875f7defd0e6c2d8d0 AT nifty DOT ne DOT jp> <20150403113226 DOT GP13285 AT calimero DOT vinschen DOT de> <20150404155520 DOT 8564347f1d42b3c709718aad AT nifty DOT ne DOT jp> <20150404084354 DOT GX13285 AT calimero DOT vinschen DOT de> <20150405205504 DOT cda3df2cc76f7bca7c3d21fb AT nifty DOT ne DOT jp> <20150407091113 DOT GB2819 AT calimero DOT vinschen DOT de> <20150413193100 DOT a393612bde79a4ae57b8c7d9 AT nifty DOT ne DOT jp> <20150414073456 DOT GY7343 AT calimero DOT vinschen DOT de>
Mime-Version: 1.0
X-IsSubscribed: yes

--Multipart=_Thu__16_Apr_2015_09_26_18_+0900_LJ0y_Htek3ik1KQI
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit

Hi Corinna,

On Tue, 14 Apr 2015 09:34:56 +0200
Corinna Vinschen <corinna-cygwin AT cygwin DOT com> wrote:

> And the native client, not knowing what he's talking to, recognizes the
> output stream as a normal named pipe, if it's looking for that info at
> all.  Being native, it will use native Windows MSVCRT stdio calls.
> Worse, as you can see in the behaviour of some native applications, the
> MSVCRT isatty() call returns 0 for named pipes.
> 
> If we have a Cygwin client, we can do all kinds of stuff on the slave
> side, but as soon as we have a native client, only the master side of
> the pty has any chance to do the right thing.  That's why I wrote that
> we don't have the slave side under control.
> 
> Therefore we should really move the OPOST code back to the master side.
> I'm reluctant to just revert your patch, though, because I think you
> know better how to fix the OPOST code to make it work correctly on the
> master side.

So OPOST processing should be in master side for native windows program.
However, to solve the second problem I had pointed out in
http://cygwin.com/ml/cygwin/2015-02/msg00929.html ,
OPOST processing should be done on a timing when slave calls write().

To solve this antinomy, I have made a patch attached.

With this patch, new pipe is introduced to handle OPSOT-process separately
between native windows program and cygwin program.

Data from cygwin program is passed through the pipe newly introduced.
In this case, process_opost_output() is called in fhandler_pty_slave::write().
Master reads data, which is already applied OPOST process, from the
new pipe.

On the other hands, for native windows program, data is written into
conventional pipe. Master forwarding thread, which is also newly
introduced, reads conventional pipe and forward the data to the pipe
newly introduced by calling process_opost_output(). This makes OPOST
processing be done in master side.

I have confirmed that the both problem is fixed with this patch.

By the way,
I know that the names for the new pipe such as io_handle2, to_master2
and output_handle2 are ugly enough. Are there more appropriate names?


ChangeLog is as follows.


2015-04-16  Takashi Yano  <takashi DOT yano AT nifty DOT ne DOT jp>

	* fhandler.h (class fhandler_base): Add virtual function get_io_handle2
	to get handle from which OPOST-processed output is read on PTY master.
	(class fhandler_pty_slave): Add variable output_handle2 to store handle
	for OPOST-processed output. Add two functions set_output_handle2() and
	get_output_handle2() regarding variable output_handle2. Now,
	output_handle (not 2) is used only by native windows program for
	OPOST-processing in master side. For cygwin process, output_handle2 is
	used for handling OPOST-processing in slave side.
	(class fhandler_pty_master): Add variables io_handle2 and to_master2 to
	store handles for OPOST-processed output. Add pty_master_fwd_thread and
	function pty_master_fwd_thread() for a thread which forwards data from
	io_handle to to_master2 applying OPOST-processing. Add function
	get_io_handle2() regarding variable io_handle2. Now, io_handle and
	to_master are used only by native windows program for OPOST-processing
	in master side. For cygwin process, io_handle2 and to_master2 are used
	for handling OPOST-processing in slave side.
	* fhandler_tty.cc (struct pipe_reply): Add member to_master2.
	(fhandler_pty_master::process_slave_output): Read slave output from
	io_handle2 rather than io_handle.
	(fhandler_pty_slave::fhandler_pty_salve): Initialize output_handle2.
	(fhandler_pty_slave::open): Set output_handle2 by duplicating handle
	to_master2 on PTY master.
	(fhandler_pty_slave::close): Close handle output_handle2.
	(fhandler_pty_slave::write): Write data to output_handle2 rather than
	output_handle.
	(fhandler_pty_slave::fch_close_handles): Close handle output_handle2.
	(fhandler_pty_master::fhandler_pty_master): Initialize io_handle2,
	to_master2 and master_fwd_thread.
	(fhandler_pty_master::cleanup): Clean up to_master2 as well.
	(fhandler_pty_master::close): Print to_master2 as well in debug
	message. Terminate master forwarding thread. Close handles to_master2
	and io_handle2.
	(fhandler_pty_master::ioctl): Use io_handle2 rather than to_master.
	(fhandler_pty_master::pty_master_thread): Add code for duplicating
	handle to_master2.
	(fhandler_pty_master::pty_master_fwd_thread): New function for
	a thread to forward OPOST-processed data from io_handle to to_master2.
	This thread applies OPOST-processing to the output of native windows
	program.
	(::pty_master_fwd_thread): Ditto.
	(fhandler_pty_master::setup): Create new pipe for OPOST-processed
	output. Create new thread to forward data from io_handle to to_master2.
	Set handle to_master2 to tty. Print io_handle2 as well in debug message.
	Close handles io_handle2 and to_master2 in case of error.
	(fhandler_pty_master::fixup_after_fork): Set handle to_master2 to tty.
	Copy handle to_master2 from arch->to_master2.
	(fhandler_pty_master::fixup_after_exec): Clean up to_master2.
	* select.cc: Check handle returned by get_io_handle2() rather than
	get_handle().
	* tty.h(class tty): Add variable _to_master2 to store handle to which
	OPOST-processed data is written. Add two functions to_master2() and
	set_to_master2() regarding _to_master2.


-- 
Takashi Yano <takashi DOT yano AT nifty DOT ne DOT jp>

--Multipart=_Thu__16_Apr_2015_09_26_18_+0900_LJ0y_Htek3ik1KQI
Content-Type: application/octet-stream;
 name="cygwin.patch.20150416-2"
Content-Disposition: attachment;
 filename="cygwin.patch.20150416-2"
Content-Transfer-Encoding: base64

ZGlmZiAtLWdpdCBhL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXIuaCBiL3dpbnN1
cC9jeWd3aW4vZmhhbmRsZXIuaAppbmRleCA2OTRjMjNiLi42OTExMjc3IDEw
MDY0NAotLS0gYS93aW5zdXAvY3lnd2luL2ZoYW5kbGVyLmgKKysrIGIvd2lu
c3VwL2N5Z3dpbi9maGFuZGxlci5oCkBAIC00MTIsNiArNDEyLDcgQEAgcHVi
bGljOgogICAgICB0aGF0IHNvbWUgZmQncyBoYXZlIHR3byBoYW5kbGVzLiAq
LwogICB2aXJ0dWFsIEhBTkRMRSYgZ2V0X2hhbmRsZSAoKSB7IHJldHVybiBp
b19oYW5kbGU7IH0KICAgdmlydHVhbCBIQU5ETEUmIGdldF9pb19oYW5kbGUg
KCkgeyByZXR1cm4gaW9faGFuZGxlOyB9CisgIHZpcnR1YWwgSEFORExFJiBn
ZXRfaW9faGFuZGxlMiAoKSB7IHJldHVybiBpb19oYW5kbGU7IH0KICAgdmly
dHVhbCBIQU5ETEUmIGdldF9vdXRwdXRfaGFuZGxlICgpIHsgcmV0dXJuIGlv
X2hhbmRsZTsgfQogICB2aXJ0dWFsIEhBTkRMRSBnZXRfc3RhdF9oYW5kbGUg
KCkgeyByZXR1cm4gcGMuaGFuZGxlICgpID86IGlvX2hhbmRsZTsgfQogICB2
aXJ0dWFsIEhBTkRMRSBnZXRfZWNob19oYW5kbGUgKCkgY29uc3QgeyByZXR1
cm4gTlVMTDsgfQpAQCAtMTUxNiw2ICsxNTE3LDcgQEAgY2xhc3MgZmhhbmRs
ZXJfcHR5X2NvbW1vbjogcHVibGljIGZoYW5kbGVyX3Rlcm1pb3MKIGNsYXNz
IGZoYW5kbGVyX3B0eV9zbGF2ZTogcHVibGljIGZoYW5kbGVyX3B0eV9jb21t
b24KIHsKICAgSEFORExFIGludXNlOwkJCS8vIHVzZWQgdG8gaW5kaWNhdGUg
dGhhdCBhIHR0eSBpcyBpbiB1c2UKKyAgSEFORExFIG91dHB1dF9oYW5kbGUy
OwogCiAgIC8qIEhlbHBlciBmdW5jdGlvbnMgZm9yIGZjaG1vZCBhbmQgZmNo
b3duLiAqLwogICBib29sIGZjaF9vcGVuX2hhbmRsZXMgKGJvb2wgY2hvd24p
OwpAQCAtMTUyNiw2ICsxNTI4LDkgQEAgY2xhc3MgZmhhbmRsZXJfcHR5X3Ns
YXZlOiBwdWJsaWMgZmhhbmRsZXJfcHR5X2NvbW1vbgogICAvKiBDb25zdHJ1
Y3RvciAqLwogICBmaGFuZGxlcl9wdHlfc2xhdmUgKGludCk7CiAKKyAgdm9p
ZCBzZXRfb3V0cHV0X2hhbmRsZTIgKEhBTkRMRSBoKSB7IG91dHB1dF9oYW5k
bGUyID0gaDsgfQorICBIQU5ETEUmIGdldF9vdXRwdXRfaGFuZGxlMiAoKSB7
IHJldHVybiBvdXRwdXRfaGFuZGxlMjsgfQorCiAgIGludCBvcGVuIChpbnQg
ZmxhZ3MsIG1vZGVfdCBtb2RlID0gMCk7CiAgIHZvaWQgb3Blbl9zZXR1cCAo
aW50IGZsYWdzKTsKICAgc3NpemVfdCBfX3N0ZGNhbGwgd3JpdGUgKGNvbnN0
IHZvaWQgKnB0ciwgc2l6ZV90IGxlbik7CkBAIC0xNTc1LDEzICsxNTgwLDE3
IEBAIGNsYXNzIGZoYW5kbGVyX3B0eV9tYXN0ZXI6IHB1YmxpYyBmaGFuZGxl
cl9wdHlfY29tbW9uCiAgIEhBTkRMRSBmcm9tX21hc3RlciwgdG9fbWFzdGVy
OwogICBIQU5ETEUgZWNob19yLCBlY2hvX3c7CiAgIERXT1JEIGR3UHJvY2Vz
c0lkOwkJLy8gT3duZXIgb2YgbWFzdGVyIGhhbmRsZXMKKyAgSEFORExFIGlv
X2hhbmRsZTIsIHRvX21hc3RlcjI7CisgIGN5Z3RocmVhZCAqbWFzdGVyX2Z3
ZF90aHJlYWQ7CS8vIE1hc3RlciBmb3J3YXJkaW5nIHRocmVhZAogCiBwdWJs
aWM6CiAgIEhBTkRMRSBnZXRfZWNob19oYW5kbGUgKCkgY29uc3QgeyByZXR1
cm4gZWNob19yOyB9CisgIEhBTkRMRSYgZ2V0X2lvX2hhbmRsZTIgKCkgeyBy
ZXR1cm4gaW9faGFuZGxlMjsgfQogICAvKiBDb25zdHJ1Y3RvciAqLwogICBm
aGFuZGxlcl9wdHlfbWFzdGVyIChpbnQpOwogCiAgIERXT1JEIHB0eV9tYXN0
ZXJfdGhyZWFkICgpOworICBEV09SRCBwdHlfbWFzdGVyX2Z3ZF90aHJlYWQg
KCk7CiAgIGludCBwcm9jZXNzX3NsYXZlX291dHB1dCAoY2hhciAqYnVmLCBz
aXplX3QgbGVuLCBpbnQgcGt0bW9kZV9vbik7CiAgIHZvaWQgZG9lY2hvIChj
b25zdCB2b2lkICpzdHIsIERXT1JEIGxlbik7CiAgIGludCBhY2NlcHRfaW5w
dXQgKCk7CmRpZmYgLS1naXQgYS93aW5zdXAvY3lnd2luL2ZoYW5kbGVyX3R0
eS5jYyBiL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXJfdHR5LmNjCmluZGV4IGNj
Yjc2ZDkuLmYzMTk0OTUgMTAwNjQ0Ci0tLSBhL3dpbnN1cC9jeWd3aW4vZmhh
bmRsZXJfdHR5LmNjCisrKyBiL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXJfdHR5
LmNjCkBAIC00Miw2ICs0Miw3IEBAIHN0cnVjdCBwaXBlX3JlcXVlc3Qgewog
c3RydWN0IHBpcGVfcmVwbHkgewogICBIQU5ETEUgZnJvbV9tYXN0ZXI7CiAg
IEhBTkRMRSB0b19tYXN0ZXI7CisgIEhBTkRMRSB0b19tYXN0ZXIyOwogICBE
V09SRCBlcnJvcjsKIH07CiAKQEAgLTIzNiw3ICsyMzcsNyBAQCBmaGFuZGxl
cl9wdHlfbWFzdGVyOjpwcm9jZXNzX3NsYXZlX291dHB1dCAoY2hhciAqYnVm
LCBzaXplX3QgbGVuLCBpbnQgcGt0bW9kZV9vbgogCSAgLyogQ2hlY2sgZWNo
byBwaXBlIGZpcnN0LiAqLwogCSAgaWYgKDo6Ynl0ZXNfYXZhaWxhYmxlIChl
Y2hvX2NudCwgZWNob19yKSAmJiBlY2hvX2NudCA+IDApCiAJICAgIGJyZWFr
OwotCSAgaWYgKCFieXRlc19hdmFpbGFibGUgKG4pKQorCSAgaWYgKCE6OmJ5
dGVzX2F2YWlsYWJsZSAobiwgZ2V0X2lvX2hhbmRsZTIgKCkpKQogCSAgICBn
b3RvIGVycjsKIAkgIGlmIChuKQogCSAgICBicmVhazsKQEAgLTI5Nyw3ICsy
OTgsNyBAQCBmaGFuZGxlcl9wdHlfbWFzdGVyOjpwcm9jZXNzX3NsYXZlX291
dHB1dCAoY2hhciAqYnVmLCBzaXplX3QgbGVuLCBpbnQgcGt0bW9kZV9vbgog
CSAgICAgIGdvdG8gZXJyOwogCSAgICB9CiAJfQotICAgICAgZWxzZSBpZiAo
IVJlYWRGaWxlIChnZXRfaGFuZGxlICgpLCBvdXRidWYsIHJsZW4sICZuLCBO
VUxMKSkKKyAgICAgIGVsc2UgaWYgKCFSZWFkRmlsZSAoZ2V0X2lvX2hhbmRs
ZTIgKCksIG91dGJ1ZiwgcmxlbiwgJm4sIE5VTEwpKQogCXsKIAkgIHRlcm1p
b3NfcHJpbnRmICgiUmVhZEZpbGUgZmFpbGVkLCAlRSIpOwogCSAgZ290byBl
cnI7CkBAIC0zMzIsNyArMzMzLDcgQEAgb3V0OgogLyogcHR5IHNsYXZlIHN0
dWZmICovCiAKIGZoYW5kbGVyX3B0eV9zbGF2ZTo6ZmhhbmRsZXJfcHR5X3Ns
YXZlIChpbnQgdW5pdCkKLSAgOiBmaGFuZGxlcl9wdHlfY29tbW9uICgpLCBp
bnVzZSAoTlVMTCkKKyAgOiBmaGFuZGxlcl9wdHlfY29tbW9uICgpLCBpbnVz
ZSAoTlVMTCksIG91dHB1dF9oYW5kbGUyIChOVUxMKQogewogICBpZiAodW5p
dCA+PSAwKQogICAgIGRldiAoKS5wYXJzZSAoREVWX1BUWVNfTUFKT1IsIHVu
aXQpOwpAQCAtMzQxLDExICszNDIsMTEgQEAgZmhhbmRsZXJfcHR5X3NsYXZl
OjpmaGFuZGxlcl9wdHlfc2xhdmUgKGludCB1bml0KQogaW50CiBmaGFuZGxl
cl9wdHlfc2xhdmU6Om9wZW4gKGludCBmbGFncywgbW9kZV90KQogewotICBI
QU5ETEUgcHR5X293bmVyLCBmcm9tX21hc3Rlcl9sb2NhbCwgdG9fbWFzdGVy
X2xvY2FsOworICBIQU5ETEUgcHR5X293bmVyLCBmcm9tX21hc3Rlcl9sb2Nh
bCwgdG9fbWFzdGVyX2xvY2FsLCB0b19tYXN0ZXIyX2xvY2FsOwogICBIQU5E
TEUgKmhhbmRsZXNbXSA9CiAgIHsKICAgICAmZnJvbV9tYXN0ZXJfbG9jYWws
ICZpbnB1dF9hdmFpbGFibGVfZXZlbnQsICZpbnB1dF9tdXRleCwgJmludXNl
LAotICAgICZvdXRwdXRfbXV0ZXgsICZ0b19tYXN0ZXJfbG9jYWwsICZwdHlf
b3duZXIsCisgICAgJm91dHB1dF9tdXRleCwgJnRvX21hc3Rlcl9sb2NhbCwg
JnB0eV9vd25lciwgJnRvX21hc3RlcjJfbG9jYWwsCiAgICAgTlVMTAogICB9
OwogCkBAIC0zOTYsNyArMzk3LDggQEAgZmhhbmRsZXJfcHR5X3NsYXZlOjpv
cGVuIChpbnQgZmxhZ3MsIG1vZGVfdCkKICAgICByZWxlYXNlX291dHB1dF9t
dXRleCAoKTsKICAgfQogCi0gIGlmICghZ2V0X3R0eXAgKCktPmZyb21fbWFz
dGVyICgpIHx8ICFnZXRfdHR5cCAoKS0+dG9fbWFzdGVyICgpKQorICBpZiAo
IWdldF90dHlwICgpLT5mcm9tX21hc3RlciAoKSB8fAorICAgICAgIWdldF90
dHlwICgpLT50b19tYXN0ZXIgKCkgfHwgIWdldF90dHlwICgpLT50b19tYXN0
ZXIyICgpKQogICAgIHsKICAgICAgIGVycm1zZyA9ICJwdHkgaGFuZGxlcyBo
YXZlIGJlZW4gY2xvc2VkIjsKICAgICAgIHNldF9lcnJubyAoRUFDQ0VTKTsK
QEAgLTQ0Nyw2ICs0NDksMTMgQEAgZmhhbmRsZXJfcHR5X3NsYXZlOjpvcGVu
IChpbnQgZmxhZ3MsIG1vZGVfdCkKIAkgIGVycm1zZyA9ICJjYW4ndCBkdXBs
aWNhdGUgb3V0cHV0LCAlRSI7CiAJICBnb3RvIGVycjsKIAl9CisgICAgICBp
ZiAoIUR1cGxpY2F0ZUhhbmRsZSAocHR5X293bmVyLCBnZXRfdHR5cCAoKS0+
dG9fbWFzdGVyMiAoKSwKKwkJCSAgR2V0Q3VycmVudFByb2Nlc3MgKCksICZ0
b19tYXN0ZXIyX2xvY2FsLCAwLCBUUlVFLAorCQkJICBEVVBMSUNBVEVfU0FN
RV9BQ0NFU1MpKQorCXsKKwkgIGVycm1zZyA9ICJjYW4ndCBkdXBsaWNhdGUg
b3V0cHV0MiwgJUUiOworCSAgZ290byBlcnI7CisJfQogICAgICAgaWYgKHB0
eV9vd25lciAhPSBHZXRDdXJyZW50UHJvY2VzcyAoKSkKIAlDbG9zZUhhbmRs
ZSAocHR5X293bmVyKTsKICAgICB9CkBAIC00NjcsNyArNDc2LDggQEAgZmhh
bmRsZXJfcHR5X3NsYXZlOjpvcGVuIChpbnQgZmxhZ3MsIG1vZGVfdCkKIAl9
CiAgICAgICBmcm9tX21hc3Rlcl9sb2NhbCA9IHJlcGwuZnJvbV9tYXN0ZXI7
CiAgICAgICB0b19tYXN0ZXJfbG9jYWwgPSByZXBsLnRvX21hc3RlcjsKLSAg
ICAgIGlmICghZnJvbV9tYXN0ZXJfbG9jYWwgfHwgIXRvX21hc3Rlcl9sb2Nh
bCkKKyAgICAgIHRvX21hc3RlcjJfbG9jYWwgPSByZXBsLnRvX21hc3RlcjI7
CisgICAgICBpZiAoIWZyb21fbWFzdGVyX2xvY2FsIHx8ICF0b19tYXN0ZXJf
bG9jYWwgfHwgIXRvX21hc3RlcjJfbG9jYWwpCiAJewogCSAgU2V0TGFzdEVy
cm9yIChyZXBsLmVycm9yKTsKIAkgIGVycm1zZyA9ICJlcnJvciBkdXBsaWNh
dGluZyBwaXBlcywgJUUiOwpAQCAtNDc2LDE0ICs0ODYsMTggQEAgZmhhbmRs
ZXJfcHR5X3NsYXZlOjpvcGVuIChpbnQgZmxhZ3MsIG1vZGVfdCkKICAgICB9
CiAgIFZlcmlmeUhhbmRsZSAoZnJvbV9tYXN0ZXJfbG9jYWwpOwogICBWZXJp
ZnlIYW5kbGUgKHRvX21hc3Rlcl9sb2NhbCk7CisgIFZlcmlmeUhhbmRsZSAo
dG9fbWFzdGVyMl9sb2NhbCk7CiAKICAgdGVybWlvc19wcmludGYgKCJkdXBs
aWNhdGVkIGZyb21fbWFzdGVyICVwLT4lcCBmcm9tIHB0eV9vd25lciIsCiAJ
CSAgZ2V0X3R0eXAgKCktPmZyb21fbWFzdGVyICgpLCBmcm9tX21hc3Rlcl9s
b2NhbCk7CiAgIHRlcm1pb3NfcHJpbnRmICgiZHVwbGljYXRlZCB0b19tYXN0
ZXIgJXAtPiVwIGZyb20gcHR5X293bmVyIiwKIAkJICBnZXRfdHR5cCAoKS0+
dG9fbWFzdGVyICgpLCB0b19tYXN0ZXJfbG9jYWwpOworICB0ZXJtaW9zX3By
aW50ZiAoImR1cGxpY2F0ZWQgdG9fbWFzdGVyMiAlcC0+JXAgZnJvbSBwdHlf
b3duZXIiLAorCQkgIGdldF90dHlwICgpLT50b19tYXN0ZXIyICgpLCB0b19t
YXN0ZXIyX2xvY2FsKTsKIAogICBzZXRfaW9faGFuZGxlIChmcm9tX21hc3Rl
cl9sb2NhbCk7CiAgIHNldF9vdXRwdXRfaGFuZGxlICh0b19tYXN0ZXJfbG9j
YWwpOworICBzZXRfb3V0cHV0X2hhbmRsZTIgKHRvX21hc3RlcjJfbG9jYWwp
OwogCiAgIGZoYW5kbGVyX2NvbnNvbGU6Om5lZWRfaW52aXNpYmxlICgpOwog
ICBzZXRfb3Blbl9zdGF0dXMgKCk7CkBAIC01MzIsNiArNTQ2LDkgQEAgZmhh
bmRsZXJfcHR5X3NsYXZlOjpjbG9zZSAoKQogICAgIHRlcm1pb3NfcHJpbnRm
ICgiQ2xvc2VIYW5kbGUgKGludXNlKSwgJUUiKTsKICAgaWYgKCFGb3JjZUNs
b3NlSGFuZGxlIChpbnB1dF9hdmFpbGFibGVfZXZlbnQpKQogICAgIHRlcm1p
b3NfcHJpbnRmICgiQ2xvc2VIYW5kbGUgKGlucHV0X2F2YWlsYWJsZV9ldmVu
dDwlcD4pLCAlRSIsIGlucHV0X2F2YWlsYWJsZV9ldmVudCk7CisgIGlmICgh
Rm9yY2VDbG9zZUhhbmRsZSAoZ2V0X291dHB1dF9oYW5kbGUyICgpKSkKKyAg
ICB0ZXJtaW9zX3ByaW50ZiAoIkNsb3NlSGFuZGxlIChnZXRfb3V0cHV0X2hh
bmRsZSAoKTwlcD4pLCAlRSIsCisJZ2V0X291dHB1dF9oYW5kbGUyICgpKTsK
ICAgaWYgKCh1bnNpZ25lZCkgbXlzZWxmLT5jdHR5ID09IEZIREVWIChERVZf
UFRZU19NQUpPUiwgZ2V0X21pbm9yICgpKSkKICAgICBmaGFuZGxlcl9jb25z
b2xlOjpmcmVlX2NvbnNvbGUgKCk7CS8qIGFzc3VtZXMgdGhhdCB3ZSBhcmUg
dGhlIGxhc3QgcHR5IGNsb3NlciAqLwogICByZXR1cm4gZmhhbmRsZXJfcHR5
X2NvbW1vbjo6Y2xvc2UgKCk7CkBAIC01OTAsNyArNjA3LDcgQEAgZmhhbmRs
ZXJfcHR5X3NsYXZlOjp3cml0ZSAoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qg
bGVuKQogCiAgIHB1c2hfcHJvY2Vzc19zdGF0ZSBwcm9jZXNzX3N0YXRlIChQ
SURfVFRZT1UpOwogCi0gIGlmICghcHJvY2Vzc19vcG9zdF9vdXRwdXQgKGdl
dF9vdXRwdXRfaGFuZGxlICgpLCBwdHIsIHRvd3JpdGUsIGZhbHNlKSkKKyAg
aWYgKCFwcm9jZXNzX29wb3N0X291dHB1dCAoZ2V0X291dHB1dF9oYW5kbGUy
ICgpLCBwdHIsIHRvd3JpdGUsIGZhbHNlKSkKICAgICB7CiAgICAgICBEV09S
RCBlcnIgPSBHZXRMYXN0RXJyb3IgKCk7CiAgICAgICB0ZXJtaW9zX3ByaW50
ZiAoIldyaXRlRmlsZSBmYWlsZWQsICVFIik7CkBAIC0xMDY4LDYgKzEwODUs
NyBAQCBmaGFuZGxlcl9wdHlfc2xhdmU6OmZjaF9jbG9zZV9oYW5kbGVzICgp
CiB7CiAgIGNsb3NlX21heWJlIChnZXRfaW9faGFuZGxlICgpKTsKICAgY2xv
c2VfbWF5YmUgKGdldF9vdXRwdXRfaGFuZGxlICgpKTsKKyAgY2xvc2VfbWF5
YmUgKGdldF9vdXRwdXRfaGFuZGxlMiAoKSk7CiAgIGNsb3NlX21heWJlIChp
bnB1dF9hdmFpbGFibGVfZXZlbnQpOwogICBjbG9zZV9tYXliZSAob3V0cHV0
X211dGV4KTsKICAgY2xvc2VfbWF5YmUgKGlucHV0X211dGV4KTsKQEAgLTEx
NDAsNyArMTE1OCw4IEBAIGVycm91dDoKIGZoYW5kbGVyX3B0eV9tYXN0ZXI6
OmZoYW5kbGVyX3B0eV9tYXN0ZXIgKGludCB1bml0KQogICA6IGZoYW5kbGVy
X3B0eV9jb21tb24gKCksIHBrdG1vZGUgKDApLCBtYXN0ZXJfY3RsIChOVUxM
KSwKICAgICBtYXN0ZXJfdGhyZWFkIChOVUxMKSwgZnJvbV9tYXN0ZXIgKE5V
TEwpLCB0b19tYXN0ZXIgKE5VTEwpLAotICAgIGVjaG9fciAoTlVMTCksIGVj
aG9fdyAoTlVMTCksIGR3UHJvY2Vzc0lkICgwKQorICAgIGVjaG9fciAoTlVM
TCksIGVjaG9fdyAoTlVMTCksIGR3UHJvY2Vzc0lkICgwKSwKKyAgICBpb19o
YW5kbGUyIChOVUxMKSwgdG9fbWFzdGVyMiAoTlVMTCksIG1hc3Rlcl9md2Rf
dGhyZWFkIChOVUxMKQogewogICBpZiAodW5pdCA+PSAwKQogICAgIGRldiAo
KS5wYXJzZSAoREVWX1BUWU1fTUFKT1IsIHVuaXQpOwpAQCAtMTE5OCwxNSAr
MTIxNywxNSBAQCBmaGFuZGxlcl9wdHlfbWFzdGVyOjpjbGVhbnVwICgpCiB7
CiAgIHJlcG9ydF90dHlfY291bnRzICh0aGlzLCAiY2xvc2luZyBtYXN0ZXIi
LCAiIik7CiAgIGlmIChhcmNoZXR5cGUpCi0gICAgZnJvbV9tYXN0ZXIgPSB0
b19tYXN0ZXIgPSBOVUxMOworICAgIGZyb21fbWFzdGVyID0gdG9fbWFzdGVy
ID0gdG9fbWFzdGVyMiA9IE5VTEw7CiAgIGZoYW5kbGVyX2Jhc2U6OmNsZWFu
dXAgKCk7CiB9CiAKIGludAogZmhhbmRsZXJfcHR5X21hc3Rlcjo6Y2xvc2Ug
KCkKIHsKLSAgdGVybWlvc19wcmludGYgKCJjbG9zaW5nIGZyb21fbWFzdGVy
KCVwKS90b19tYXN0ZXIoJXApIHNpbmNlIHdlIG93biB0aGVtKCV1KSIsCi0J
CSAgZnJvbV9tYXN0ZXIsIHRvX21hc3RlciwgZHdQcm9jZXNzSWQpOworICB0
ZXJtaW9zX3ByaW50ZiAoImNsb3NpbmcgZnJvbV9tYXN0ZXIoJXApL3RvX21h
c3RlciglcCkvdG9fbWFzdGVyMiglcCkgc2luY2Ugd2Ugb3duIHRoZW0oJXUp
IiwKKwkJICBmcm9tX21hc3RlciwgdG9fbWFzdGVyLCB0b19tYXN0ZXIyLCBk
d1Byb2Nlc3NJZCk7CiAgIGlmIChjeWd3aW5fZmluaXNoZWRfaW5pdGlhbGl6
aW5nKQogICAgIHsKICAgICAgIGlmIChtYXN0ZXJfY3RsICYmIGdldF90dHlw
ICgpLT5tYXN0ZXJfcGlkID09IG15c2VsZi0+cGlkKQpAQCAtMTIyOSw2ICsx
MjQ4LDcgQEAgZmhhbmRsZXJfcHR5X21hc3Rlcjo6Y2xvc2UgKCkKIAkgICAg
ICBtYXN0ZXJfY3RsID0gTlVMTDsKIAkgICAgfQogCSAgcmVsZWFzZV9vdXRw
dXRfbXV0ZXggKCk7CisJICBtYXN0ZXJfZndkX3RocmVhZC0+dGVybWluYXRl
X3RocmVhZCAoKTsKIAl9CiAgICAgfQogCkBAIC0xMjQ1LDYgKzEyNjUsMTEg
QEAgZmhhbmRsZXJfcHR5X21hc3Rlcjo6Y2xvc2UgKCkKICAgaWYgKCFGb3Jj
ZUNsb3NlSGFuZGxlICh0b19tYXN0ZXIpKQogICAgIHRlcm1pb3NfcHJpbnRm
ICgiZXJyb3IgY2xvc2luZyB0b19tYXN0ZXIgJXAsICVFIiwgdG9fbWFzdGVy
KTsKICAgZnJvbV9tYXN0ZXIgPSB0b19tYXN0ZXIgPSBOVUxMOworICBpZiAo
IUZvcmNlQ2xvc2VIYW5kbGUgKGdldF9pb19oYW5kbGUyICgpKSkKKyAgICB0
ZXJtaW9zX3ByaW50ZiAoImVycm9yIGNsb3NpbmcgaW9faGFuZGxlMiAlcCwg
JUUiLCBnZXRfaW9faGFuZGxlMiAoKSk7CisgIGlmICghRm9yY2VDbG9zZUhh
bmRsZSAodG9fbWFzdGVyMikpCisgICAgdGVybWlvc19wcmludGYgKCJlcnJv
ciBjbG9zaW5nIHRvX21hc3RlcjIgJXAsICVFIiwgdG9fbWFzdGVyMik7Cisg
IGdldF9pb19oYW5kbGUyICgpID0gdG9fbWFzdGVyMiA9IE5VTEw7CiAgIEZv
cmNlQ2xvc2VIYW5kbGUgKGVjaG9fcik7CiAgIEZvcmNlQ2xvc2VIYW5kbGUg
KGVjaG9fdyk7CiAgIGVjaG9fciA9IGVjaG9fdyA9IE5VTEw7CkBAIC0xMzUx
LDcgKzEzNzYsNyBAQCBmaGFuZGxlcl9wdHlfbWFzdGVyOjppb2N0bCAodW5z
aWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQogICAgIGNhc2UgRklPTlJFQUQ6
CiAgICAgICB7CiAJRFdPUkQgbjsKLQlpZiAoITo6Ynl0ZXNfYXZhaWxhYmxl
IChuLCB0b19tYXN0ZXIpKQorCWlmICghOjpieXRlc19hdmFpbGFibGUgKG4s
IGdldF9pb19oYW5kbGUyICgpKSkKIAkgIHsKIAkgICAgc2V0X2Vycm5vIChF
SU5WQUwpOwogCSAgICByZXR1cm4gLTE7CkBAIC0xNTIxLDYgKzE1NDYsMTMg
QEAgZmhhbmRsZXJfcHR5X21hc3Rlcjo6cHR5X21hc3Rlcl90aHJlYWQgKCkK
IAkgICAgICB0ZXJtaW9zX3ByaW50ZiAoIkR1cGxpY2F0ZUhhbmRsZSAodG9f
bWFzdGVyKSwgJUUiKTsKIAkgICAgICBnb3RvIHJlcGx5OwogCSAgICB9CisJ
ICBpZiAoIUR1cGxpY2F0ZUhhbmRsZSAoR2V0Q3VycmVudFByb2Nlc3MgKCks
IHRvX21hc3RlcjIsCisJCQkJY2xpZW50LCAmcmVwbC50b19tYXN0ZXIyLAor
CQkJCTAsIFRSVUUsIERVUExJQ0FURV9TQU1FX0FDQ0VTUykpCisJICAgIHsK
KwkgICAgICB0ZXJtaW9zX3ByaW50ZiAoIkR1cGxpY2F0ZUhhbmRsZSAodG9f
bWFzdGVyMiksICVFIik7CisJICAgICAgZ290byByZXBseTsKKwkgICAgfQog
CX0KIHJlcGx5OgogICAgICAgcmVwbC5lcnJvciA9IEdldExhc3RFcnJvciAo
KTsKQEAgLTE1NDYsNiArMTU3OCw0MCBAQCBwdHlfbWFzdGVyX3RocmVhZCAo
Vk9JRCAqYXJnKQogICByZXR1cm4gKChmaGFuZGxlcl9wdHlfbWFzdGVyICop
IGFyZyktPnB0eV9tYXN0ZXJfdGhyZWFkICgpOwogfQogCitEV09SRAorZmhh
bmRsZXJfcHR5X21hc3Rlcjo6cHR5X21hc3Rlcl9md2RfdGhyZWFkICgpCit7
CisgIERXT1JEIHJsZW47CisgIGNoYXIgb3V0YnVmW09VVF9CVUZGRVJfU0la
RV07CisKKyAgdGVybWlvc19wcmludGYoIlN0YXJ0ZWQuIik7CisgIGZvciAo
OzspCisgICAgeworICAgICAgaWYgKCFSZWFkRmlsZSAoZ2V0X2lvX2hhbmRs
ZSAoKSwgb3V0YnVmLCBzaXplb2Ygb3V0YnVmLCAmcmxlbiwgTlVMTCkpCisJ
eworCSAgdGVybWlvc19wcmludGYgKCJSZWFkRmlsZSBmb3IgZm9yd2FyZGlu
ZyBmYWlsZWQsICVFIik7CisJICBicmVhazsKKwl9CisgICAgICBzc2l6ZV90
IHdsZW4gPSBybGVuOworICAgICAgd2hpbGUgKHJsZW4+MCkKKwl7CisJICBp
ZiAoIXByb2Nlc3Nfb3Bvc3Rfb3V0cHV0ICh0b19tYXN0ZXIyLCBvdXRidWYs
IHdsZW4sIGZhbHNlKSkKKwkgICAgeworCSAgICAgIHRlcm1pb3NfcHJpbnRm
ICgiV3JpdGVGaWxlIGZvciBmb3J3YXJkaW5nIGZhaWxlZCwgJUUiKTsKKwkg
ICAgICBicmVhazsKKwkgICAgfQorCSAgcmxlbiAtPSB3bGVuOworCX0KKyAg
ICB9CisgIHJldHVybiAwOworfQorCitzdGF0aWMgRFdPUkQgV0lOQVBJCitw
dHlfbWFzdGVyX2Z3ZF90aHJlYWQgKFZPSUQgKmFyZykKK3sKKyAgcmV0dXJu
ICgoZmhhbmRsZXJfcHR5X21hc3RlciAqKSBhcmcpLT5wdHlfbWFzdGVyX2Z3
ZF90aHJlYWQgKCk7Cit9CisKIGJvb2wKIGZoYW5kbGVyX3B0eV9tYXN0ZXI6
OnNldHVwICgpCiB7CkBAIC0xNTgyLDYgKzE2NDgsMTUgQEAgZmhhbmRsZXJf
cHR5X21hc3Rlcjo6c2V0dXAgKCkKICAgICAgIGdvdG8gZXJyOwogICAgIH0K
IAorICBfX3NtYWxsX3NwcmludGYgKHBpcGVuYW1lLCAicHR5JWQtdG8tbWFz
dGVyMiIsIHVuaXQpOworICByZXMgPSBmaGFuZGxlcl9waXBlOjpjcmVhdGUg
KCZzZWNfbm9uZSwgJmdldF9pb19oYW5kbGUyICgpLCAmdG9fbWFzdGVyMiwK
KwkJCSAgICAgICBmaGFuZGxlcl9wdHlfY29tbW9uOjpwaXBlc2l6ZSwgcGlw
ZW5hbWUsIDApOworICBpZiAocmVzKQorICAgIHsKKyAgICAgIGVycnN0ciA9
ICJvdXRwdXQgcGlwZSAyIjsKKyAgICAgIGdvdG8gZXJyOworICAgIH0KKwog
ICBQcm90ZWN0SGFuZGxlMSAoZ2V0X2lvX2hhbmRsZSAoKSwgZnJvbV9wdHkp
OwogCiAgIF9fc21hbGxfc3ByaW50ZiAocGlwZW5hbWUsICJwdHklZC1lY2hv
bG9vcCIsIHVuaXQpOwpAQCAtMTY0MCwyOCArMTcxNSwzNyBAQCBmaGFuZGxl
cl9wdHlfbWFzdGVyOjpzZXR1cCAoKQogICAgICAgZXJyc3RyID0gInB0eSBt
YXN0ZXIgY29udHJvbCB0aHJlYWQiOwogICAgICAgZ290byBlcnI7CiAgICAg
fQorICBtYXN0ZXJfZndkX3RocmVhZCA9IG5ldyBjeWd0aHJlYWQgKDo6cHR5
X21hc3Rlcl9md2RfdGhyZWFkLCB0aGlzLCAicHR5bSIpOworICBpZiAoIW1h
c3Rlcl9md2RfdGhyZWFkKQorICAgIHsKKyAgICAgIGVycnN0ciA9ICJwdHkg
bWFzdGVyIGZvcndhcmRpbmcgdGhyZWFkIjsKKyAgICAgIGdvdG8gZXJyOwor
ICAgIH0KIAogICB0LnNldF9mcm9tX21hc3RlciAoZnJvbV9tYXN0ZXIpOwog
ICB0LnNldF90b19tYXN0ZXIgKHRvX21hc3Rlcik7CisgIHQuc2V0X3RvX21h
c3RlcjIgKHRvX21hc3RlcjIpOwogICB0LndpbnNpemUud3NfY29sID0gODA7
CiAgIHQud2luc2l6ZS53c19yb3cgPSAyNTsKICAgdC5tYXN0ZXJfcGlkID0g
bXlzZWxmLT5waWQ7CiAKICAgZGV2ICgpLnBhcnNlIChERVZfUFRZTV9NQUpP
UiwgdW5pdCk7CiAKLSAgdGVybWlvc19wcmludGYgKCJ0aGlzICVwLCBwdHkl
ZCBvcGVuZWQgLSBmcm9tX3B0eSAlcCwgdG9fcHR5ICVwIiwgdGhpcywgdW5p
dCwKLQkJICBnZXRfaW9faGFuZGxlICgpLCBnZXRfb3V0cHV0X2hhbmRsZSAo
KSk7CisgIHRlcm1pb3NfcHJpbnRmICgidGhpcyAlcCwgcHR5JWQgb3BlbmVk
IC0gZnJvbV9wdHkgPCVwLCVwPiwgdG9fcHR5ICVwIiwKKwl0aGlzLCB1bml0
LCBnZXRfaW9faGFuZGxlICgpLCBnZXRfaW9faGFuZGxlMiAoKSwgZ2V0X291
dHB1dF9oYW5kbGUgKCkpOwogICByZXR1cm4gdHJ1ZTsKIAogZXJyOgogICBf
X3NldGVycm5vICgpOwogICBjbG9zZV9tYXliZSAoZ2V0X2lvX2hhbmRsZSAo
KSk7CisgIGNsb3NlX21heWJlIChnZXRfaW9faGFuZGxlMiAoKSk7CiAgIGNs
b3NlX21heWJlIChnZXRfb3V0cHV0X2hhbmRsZSAoKSk7CiAgIGNsb3NlX21h
eWJlIChpbnB1dF9hdmFpbGFibGVfZXZlbnQpOwogICBjbG9zZV9tYXliZSAo
b3V0cHV0X211dGV4KTsKICAgY2xvc2VfbWF5YmUgKGlucHV0X211dGV4KTsK
ICAgY2xvc2VfbWF5YmUgKGZyb21fbWFzdGVyKTsKICAgY2xvc2VfbWF5YmUg
KHRvX21hc3Rlcik7CisgIGNsb3NlX21heWJlICh0b19tYXN0ZXIyKTsKICAg
Y2xvc2VfbWF5YmUgKGVjaG9fcik7CiAgIGNsb3NlX21heWJlIChlY2hvX3cp
OwogICBjbG9zZV9tYXliZSAobWFzdGVyX2N0bCk7CkBAIC0xNjgxLDExICsx
NzY1LDEzIEBAIGZoYW5kbGVyX3B0eV9tYXN0ZXI6OmZpeHVwX2FmdGVyX2Zv
cmsgKEhBTkRMRSBwYXJlbnQpCiAJewogCSAgdC5zZXRfZnJvbV9tYXN0ZXIg
KGFyY2gtPmZyb21fbWFzdGVyKTsKIAkgIHQuc2V0X3RvX21hc3RlciAoYXJj
aC0+dG9fbWFzdGVyKTsKKwkgIHQuc2V0X3RvX21hc3RlcjIgKGFyY2gtPnRv
X21hc3RlcjIpOwogCX0KICAgICAgIGFyY2gtPmR3UHJvY2Vzc0lkID0gd3Bp
ZDsKICAgICB9CiAgIGZyb21fbWFzdGVyID0gYXJjaC0+ZnJvbV9tYXN0ZXI7
CiAgIHRvX21hc3RlciA9IGFyY2gtPnRvX21hc3RlcjsKKyAgdG9fbWFzdGVy
MiA9IGFyY2gtPnRvX21hc3RlcjI7CiAgIHJlcG9ydF90dHlfY291bnRzICh0
aGlzLCAiaW5oZXJpdGVkIG1hc3RlciIsICIiKTsKIH0KIApAQCAtMTY5NSw3
ICsxNzgxLDcgQEAgZmhhbmRsZXJfcHR5X21hc3Rlcjo6Zml4dXBfYWZ0ZXJf
ZXhlYyAoKQogICBpZiAoIWNsb3NlX29uX2V4ZWMgKCkpCiAgICAgZml4dXBf
YWZ0ZXJfZm9yayAoc3Bhd25faW5mby0+cGFyZW50KTsKICAgZWxzZQotICAg
IGZyb21fbWFzdGVyID0gdG9fbWFzdGVyID0gTlVMTDsKKyAgICBmcm9tX21h
c3RlciA9IHRvX21hc3RlciA9IHRvX21hc3RlcjIgPSBOVUxMOwogfQogCiBC
T09MCmRpZmYgLS1naXQgYS93aW5zdXAvY3lnd2luL3NlbGVjdC5jYyBiL3dp
bnN1cC9jeWd3aW4vc2VsZWN0LmNjCmluZGV4IDE3MDZjODcuLjFiNjUyODAg
MTAwNjQ0Ci0tLSBhL3dpbnN1cC9jeWd3aW4vc2VsZWN0LmNjCisrKyBiL3dp
bnN1cC9jeWd3aW4vc2VsZWN0LmNjCkBAIC04MCw3ICs4MCw3IEBAIGRldGFp
bHMuICovCiAjZGVmaW5lIGNvcHlmZF9zZXQodG8sIGZyb20sIG4pIG1lbWNw
eSAodG8sIGZyb20sIHNpemVvZl9mZF9zZXQgKG4pKTsKIAogI2RlZmluZSBz
ZXRfaGFuZGxlX29yX3JldHVybl9pZl9ub3Rfb3BlbihoLCBzKSBcCi0gIGgg
PSAocyktPmZoLT5nZXRfaGFuZGxlICgpOyBcCisgIGggPSAocyktPmZoLT5n
ZXRfaW9faGFuZGxlMiAoKTsgXAogICBpZiAoY3lnaGVhcC0+ZmR0YWIubm90
X29wZW4gKChzKS0+ZmQpKSBcCiAgICAgeyBcCiAgICAgICAocyktPnRocmVh
ZF9lcnJubyA9ICBFQkFERjsgXApAQCAtMTI2NCw3ICsxMjY0LDcgQEAgZmhh
bmRsZXJfYmFzZTo6c2VsZWN0X3JlYWQgKHNlbGVjdF9zdHVmZiAqc3MpCiAg
ICAgICBzLT5zdGFydHVwID0gbm9fc3RhcnR1cDsKICAgICAgIHMtPnZlcmlm
eSA9IHZlcmlmeV9vazsKICAgICB9Ci0gIHMtPmggPSBnZXRfaGFuZGxlICgp
OworICBzLT5oID0gZ2V0X2lvX2hhbmRsZTIgKCk7CiAgIHMtPnJlYWRfc2Vs
ZWN0ZWQgPSB0cnVlOwogICBzLT5yZWFkX3JlYWR5ID0gdHJ1ZTsKICAgcmV0
dXJuIHM7CmRpZmYgLS1naXQgYS93aW5zdXAvY3lnd2luL3R0eS5oIGIvd2lu
c3VwL2N5Z3dpbi90dHkuaAppbmRleCAyN2Q0M2Y3Li5jZjM1MDhhIDEwMDY0
NAotLS0gYS93aW5zdXAvY3lnd2luL3R0eS5oCisrKyBiL3dpbnN1cC9jeWd3
aW4vdHR5LmgKQEAgLTkyLDEyICs5MiwxNSBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICBIQU5ETEUgX2Zyb21fbWFzdGVyOwogICBIQU5ETEUgX3RvX21hc3Rl
cjsKKyAgSEFORExFIF90b19tYXN0ZXIyOwogCiBwdWJsaWM6CiAgIEhBTkRM
RSBmcm9tX21hc3RlcigpIGNvbnN0IHsgcmV0dXJuIF9mcm9tX21hc3Rlcjsg
fQogICBIQU5ETEUgdG9fbWFzdGVyKCkgY29uc3QgeyByZXR1cm4gX3RvX21h
c3RlcjsgfQorICBIQU5ETEUgdG9fbWFzdGVyMigpIGNvbnN0IHsgcmV0dXJu
IF90b19tYXN0ZXIyOyB9CiAgIHZvaWQgc2V0X2Zyb21fbWFzdGVyIChIQU5E
TEUgaCkgeyBfZnJvbV9tYXN0ZXIgPSBoOyB9CiAgIHZvaWQgc2V0X3RvX21h
c3RlciAoSEFORExFIGgpIHsgX3RvX21hc3RlciA9IGg7IH0KKyAgdm9pZCBz
ZXRfdG9fbWFzdGVyMiAoSEFORExFIGgpIHsgX3RvX21hc3RlcjIgPSBoOyB9
CiAKICAgaW50IHJlYWRfcmV0dmFsOwogICBib29sIHdhc19vcGVuZWQ7CS8q
IFRydWUgaWYgb3BlbmVkIGF0IGxlYXN0IG9uY2UuICovCg==


--Multipart=_Thu__16_Apr_2015_09_26_18_+0900_LJ0y_Htek3ik1KQI
Content-Type: text/plain; charset=us-ascii

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
--Multipart=_Thu__16_Apr_2015_09_26_18_+0900_LJ0y_Htek3ik1KQI--

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019