From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Matthias Dahl Newsgroups: gmane.emacs.devel Subject: Re: wait_reading_process_ouput hangs in certain cases (w/ patches) Date: Thu, 26 Oct 2017 20:56:03 +0200 Message-ID: References: <83lgjz8eiy.fsf@gnu.org> <831slp98ut.fsf@gnu.org> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------E3029D40E5E85D184EB982DA" X-Trace: blaine.gmane.org 1509044244 9690 195.159.176.226 (26 Oct 2017 18:57:24 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Thu, 26 Oct 2017 18:57:24 +0000 (UTC) User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 Cc: emacs-devel@gnu.org To: Eli Zaretskii Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Thu Oct 26 20:57:19 2017 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1e7nKz-0000Ta-1r for ged-emacs-devel@m.gmane.org; Thu, 26 Oct 2017 20:57:05 +0200 Original-Received: from localhost ([::1]:54217 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1e7nL6-0002lM-As for ged-emacs-devel@m.gmane.org; Thu, 26 Oct 2017 14:57:12 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:49600) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1e7nK7-0002l6-RC for emacs-devel@gnu.org; Thu, 26 Oct 2017 14:56:13 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1e7nK3-00040G-S2 for emacs-devel@gnu.org; Thu, 26 Oct 2017 14:56:11 -0400 Original-Received: from ud19.udmedia.de ([194.117.254.59]:50962 helo=mail.ud19.udmedia.de) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1e7nK3-0003z0-CG for emacs-devel@gnu.org; Thu, 26 Oct 2017 14:56:07 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple; d=binary-island.eu; h= subject:to:cc:references:from:message-id:date:mime-version :in-reply-to:content-type; s=k1; bh=me+sEpQhlD7FMbA4uV02GMjhpFDk 89xu2gIPzepz6/c=; b=jWShIIBRQdZa7gOqKpI+JZG9ggQTOZfvuS4FNaMKyWbF fXxv5cII/LbAneK6VkNvGytMWOAqEE/A4kiSlI9gMNPKdxV374ume3D42Ba1HWBL WVkS/XVwnIRVoUz3tv7k8ZMgmTUinm/ihFH3ewG89V3OblONrjvUeHBqeBJbIEA= Original-Received: (qmail 5715 invoked from network); 26 Oct 2017 20:56:04 +0200 Original-Received: from unknown (HELO ?IPv6:2a02:810b:c540:234:36aa:25b9:ca8f:d05f?) (ud19?126p1@2a02:810b:c540:234:36aa:25b9:ca8f:d05f) by mail.ud19.udmedia.de with ESMTPSA (ECDHE-RSA-AES128-GCM-SHA256 encrypted, authenticated); 26 Oct 2017 20:56:04 +0200 Openpgp: id=1E87ADA02EFE759EFC20B2D1042F47D273AA780C In-Reply-To: <831slp98ut.fsf@gnu.org> Content-Language: en-US X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 194.117.254.59 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:219787 Archived-At: This is a multi-part message in MIME format. --------------E3029D40E5E85D184EB982DA Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Hello Eli... On 26/10/17 18:23, Eli Zaretskii wrote: > AFAIK, post-command-hooks cannot be run while we are in sit-for, but I > guess this is not relevant to the rest of the description? This probably comes from server.el (server-visit-files) because Magit uses emacsclient for some of its magic. I have attached a backtrace, taken during the hang. Unfortunately it is from a optimized build (would have needed to recompile just now, and I am a bit in a hurry) but it at least shows the callstack (more or less) nicely. > I understand that this timer calls accept-process-output with its > argument nil, is that correct? If so, isn't that a bug for a timer to > do that? Doing that runs the risk of eating up output from some > subprocess for which the foreground Lisp program is waiting. I haven't actually checked which timer it is, to be quite honest since I didn't think of it as a bug at all. Correct me if I am wrong, calling accept-process-output w/o arguments is expected to be quite harmless and can be useful. If you specify a specific process, you will most definitely wait at least as long as it takes for that process to produce any output. Nevertheless: If am not completely mistaken, there is no data lost at all. It is read and passed to the filter function which was registered by the interested party -- otherwise the default filter will simply append it to the buffer it belongs to. The only thing that is lost is that it was ever read at all and thus an endless wait begins. > So please point out the timer that does this, because I think that > timer needs to be fixed. If you still need that, I will do some digging and try to find it. > We already record the file descriptors on which we wait for process > output, see compute_non_keyboard_wait_mask. Once > wait_reading_process_output exits, it clears these records. So it > should be possible for us to prevent accept-process-output calls > issued by such runaway timers from waiting on the descriptors that are > already "taken": if, when we set the bits in the pselect mask, we find > that some of the descriptors are already watched by the same thread as > the current thread, we could exclude them from the pselect mask we are > setting up. Wouldn't that be a better solution? Because AFAIU, your > solution just avoids an infinite wait, but doesn't avoid losing the > process output, because it was read by the wrong Lisp code. Right? Hm... at the moment I don't see where data is lost with my solution. Maybe I am being totally blind and making a fool out of myself but I honestly don't see it. What you suggest could be dangerous as well, depending on how it is implemented and the circumstances. What fds get excluded in recursive calls? Only wait_proc ones? Or every one that is watched somewhere up in the callstack? Depending on what we do, we could end up with an almost empty list that doesn't get "ready" as easily as one would have expected by a naked accept-process-output call... and it could thus potentially stall as well... worst-case, I know. Just thinking out loud here. I would really need to check this, those are just my initial thoughts. > Well, I'd like to eyeball the timer which commits this crime. If you still do, let me know and I will try to track it down... So long, Matthias -- Dipl.-Inf. (FH) Matthias Dahl | Software Engineer | binary-island.eu --------------E3029D40E5E85D184EB982DA Content-Type: text/plain; charset=UTF-8; name="emacs-bt.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="emacs-bt.txt" IzAgIDB4MDAwMDdmZmZmMmQ0OWVlMyBpbiBfX3BzZWxlY3QgKG5mZHM9PG9wdGltaXplZCBv dXQ+LCByZWFkZmRzPTB4N2ZmZmZmZmY4NDEwLCB3cml0ZWZkcz0weDdmZmZmZmZmODQ5MCwg ZXhjZXB0ZmRzPTB4MCwgdGltZW91dD08b3B0aW1pemVkIG91dD4sIHNpZ21hc2s9PG9wdGlt aXplZCBvdXQ+KQogICAgYXQgLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXgvcHNlbGVjdC5j OjY5CiMxICAweDAwMDAwMDAwMDA1YzhjNmMgaW4gcmVhbGx5X2NhbGxfc2VsZWN0IChhcmc9 MHg3ZmZmZmZmZjgzMzApIGF0IHRocmVhZC5jOjU3MgojMiAgMHgwMDAwMDAwMDAwNWM5ODE5 IGluIHRocmVhZF9zZWxlY3QgKGZ1bmM9PG9wdGltaXplZCBvdXQ+LCBtYXhfZmRzPW1heF9m ZHNAZW50cnk9MjEsIHJmZHM9cmZkc0BlbnRyeT0weDdmZmZmZmZmODQxMCwgd2Zkcz08b3B0 aW1pemVkIG91dD4sIGVmZHM9ZWZkc0BlbnRyeT0weDAsIAogICAgdGltZW91dD10aW1lb3V0 QGVudHJ5PTB4N2ZmZmZmZmY4YTQwLCBzaWdtYXNrPTB4MCkgYXQgdGhyZWFkLmM6NTk1CiMz ICAweDAwMDAwMDAwMDA1ZTJjM2IgaW4geGdfc2VsZWN0IChmZHNfbGltPTIxLCByZmRzPXJm ZHNAZW50cnk9MHg3ZmZmZmZmZjhiNDAsIHdmZHM9d2Zkc0BlbnRyeT0weDdmZmZmZmZmOGJj MCwgZWZkcz1lZmRzQGVudHJ5PTB4MCwgdGltZW91dD10aW1lb3V0QGVudHJ5PTB4N2ZmZmZm ZmY4YTQwLCAKICAgIHNpZ21hc2s9c2lnbWFza0BlbnRyeT0weDApIGF0IHhnc2VsZWN0LmM6 MTE3CiM0ICAweDAwMDAwMDAwMDA1YWEzNWQgaW4gd2FpdF9yZWFkaW5nX3Byb2Nlc3Nfb3V0 cHV0ICh0aW1lX2xpbWl0PTxvcHRpbWl6ZWQgb3V0PiwgbnNlY3M9PG9wdGltaXplZCBvdXQ+ LCByZWFkX2tiZD1yZWFkX2tiZEBlbnRyeT0wLCBkb19kaXNwbGF5PWRvX2Rpc3BsYXlAZW50 cnk9ZmFsc2UsIAogICAgd2FpdF9mb3JfY2VsbD0uLi4sIHdhaXRfZm9yX2NlbGxAZW50cnk9 Li4uLCB3YWl0X3Byb2M9MHg1ODc0ZDUwLCBqdXN0X3dhaXRfcHJvYz0wKSBhdCBwcm9jZXNz LmM6NTM3NQojNSAgMHgwMDAwMDAwMDAwNWFjMmZiIGluIEZhY2NlcHRfcHJvY2Vzc19vdXRw dXQgKHByb2Nlc3M9Li4uLCBzZWNvbmRzPS4uLiwgbWlsbGlzZWM9Li4uLCBqdXN0X3RoaXNf b25lPS4uLikgYXQgcHJvY2Vzcy5jOjQ2NTUKIzYgIDB4MDAwMDAwMDAwMDU2YWVkNSBpbiBl dmFsX3N1YiAoZm9ybT0uLi4pIGF0IGV2YWwuYzoyMjQxCiM3ICAweDAwMDAwMDAwMDA1NmIx YmQgaW4gRnByb2duIChib2R5PS4uLikgYXQgZXZhbC5jOjQ1NQojOCAgMHgwMDAwMDAwMDAw NTZhZTE0IGluIGV2YWxfc3ViIChmb3JtPS4uLiwgZm9ybUBlbnRyeT0uLi4pIGF0IGV2YWwu YzoyMTgzCiM5ICAweDAwMDAwMDAwMDA1NmJkMDUgaW4gRndoaWxlIChhcmdzPS4uLikgYXQg ZXZhbC5jOjk4NQojMTAgMHgwMDAwMDAwMDAwNTZhZTE0IGluIGV2YWxfc3ViIChmb3JtPS4u LikgYXQgZXZhbC5jOjIxODMKIzExIDB4MDAwMDAwMDAwMDU2YjFiZCBpbiBGcHJvZ24gKGJv ZHk9Li4uKSBhdCBldmFsLmM6NDU1CiMxMiAweDAwMDAwMDAwMDA1NmFlMTQgaW4gZXZhbF9z dWIgKGZvcm09Li4uKSBhdCBldmFsLmM6MjE4MwojMTMgMHgwMDAwMDAwMDAwNTZhZTE0IGlu IGV2YWxfc3ViIChmb3JtPS4uLikgYXQgZXZhbC5jOjIxODMKIzE0IDB4MDAwMDAwMDAwMDU2 YjFiZCBpbiBGcHJvZ24gKGJvZHk9Li4uKSBhdCBldmFsLmM6NDU1CiMxNSAweDAwMDAwMDAw MDA1NmI4MmQgaW4gRmNvbmQgKGFyZ3M9Li4uKSBhdCBldmFsLmM6NDM1CiMxNiAweDAwMDAw MDAwMDA1NmFlMTQgaW4gZXZhbF9zdWIgKGZvcm09Li4uKSBhdCBldmFsLmM6MjE4MwojMTcg MHgwMDAwMDAwMDAwNTZiMWJkIGluIEZwcm9nbiAoYm9keT0uLi4pIGF0IGV2YWwuYzo0NTUK IzE4IDB4MDAwMDAwMDAwMDU2YWUxNCBpbiBldmFsX3N1YiAoZm9ybT0uLi4pIGF0IGV2YWwu YzoyMTgzCiMxOSAweDAwMDAwMDAwMDA1NmIxYmQgaW4gRnByb2duIChib2R5PS4uLikgYXQg ZXZhbC5jOjQ1NQojMjAgMHgwMDAwMDAwMDAwNTZhZTE0IGluIGV2YWxfc3ViIChmb3JtPS4u LikgYXQgZXZhbC5jOjIxODMKIzIxIDB4MDAwMDAwMDAwMDU2YjFiZCBpbiBGcHJvZ24gKGJv ZHk9Li4uKSBhdCBldmFsLmM6NDU1CiMyMiAweDAwMDAwMDAwMDA1NmMzOGMgaW4gRmxldFgg KGFyZ3M9Li4uKSBhdCBldmFsLmM6OTAwCiMyMyAweDAwMDAwMDAwMDA1NmFlMTQgaW4gZXZh bF9zdWIgKGZvcm09Li4uKSBhdCBldmFsLmM6MjE4MwojMjQgMHgwMDAwMDAwMDAwNTZiMWJk IGluIEZwcm9nbiAoYm9keT0uLi4sIGJvZHlAZW50cnk9Li4uKSBhdCBldmFsLmM6NDU1CiMy NSAweDAwMDAwMDAwMDA1NjI1ZTYgaW4gRnNhdmVfZXhjdXJzaW9uIChhcmdzPS4uLikgYXQg ZWRpdGZucy5jOjEwNTAKIzI2IDB4MDAwMDAwMDAwMDU2YWUxNCBpbiBldmFsX3N1YiAoZm9y bT0uLi4pIGF0IGV2YWwuYzoyMTgzCiMyNyAweDAwMDAwMDAwMDA1NmIxYmQgaW4gRnByb2du IChib2R5PS4uLikgYXQgZXZhbC5jOjQ1NQojMjggMHgwMDAwMDAwMDAwNTZiNTEyIGluIGZ1 bmNhbGxfbGFtYmRhIChmdW49Li4uLCBmdW5AZW50cnk9Li4uLCBuYXJncz1uYXJnc0BlbnRy eT0wLCBhcmdfdmVjdG9yPWFyZ192ZWN0b3JAZW50cnk9MHg3ZmZmZmZmZjk3YzApIGF0IGV2 YWwuYzozMDQyCiMyOSAweDAwMDAwMDAwMDA1NmI2YTMgaW4gYXBwbHlfbGFtYmRhIChmdW49 Li4uLCBhcmdzPS4uLiwgY291bnQ9Y291bnRAZW50cnk9MzMpIGF0IGV2YWwuYzoyOTAzCiMz MCAweDAwMDAwMDAwMDA1NmFjMWEgaW4gZXZhbF9zdWIgKGZvcm09Li4uKSBhdCBldmFsLmM6 MjMwNgojMzEgMHgwMDAwMDAwMDAwNTZiMWJkIGluIEZwcm9nbiAoYm9keT0uLi4pIGF0IGV2 YWwuYzo0NTUKIzMyIDB4MDAwMDAwMDAwMDU2YWUxNCBpbiBldmFsX3N1YiAoZm9ybT0uLi4p IGF0IGV2YWwuYzoyMTgzCiMzMyAweDAwMDAwMDAwMDA1NmFlMTQgaW4gZXZhbF9zdWIgKGZv cm09Li4uKSBhdCBldmFsLmM6MjE4MwojMzQgMHgwMDAwMDAwMDAwNTZiMWJkIGluIEZwcm9n biAoYm9keT0uLi4pIGF0IGV2YWwuYzo0NTUKIzM1IDB4MDAwMDAwMDAwMDU2YzYwYiBpbiBG bGV0IChhcmdzPS4uLikgYXQgZXZhbC5jOjk2OQojMzYgMHgwMDAwMDAwMDAwNTZhZTE0IGlu IGV2YWxfc3ViIChmb3JtPS4uLikgYXQgZXZhbC5jOjIxODMKIzM3IDB4MDAwMDAwMDAwMDU2 YjFiZCBpbiBGcHJvZ24gKGJvZHk9Li4uKSBhdCBldmFsLmM6NDU1CiMzOCAweDAwMDAwMDAw MDA1NmM2MGIgaW4gRmxldCAoYXJncz0uLi4pIGF0IGV2YWwuYzo5NjkKIzM5IDB4MDAwMDAw MDAwMDU2YWUxNCBpbiBldmFsX3N1YiAoZm9ybT0uLi4sIGZvcm1AZW50cnk9Li4uKSBhdCBl dmFsLmM6MjE4MwojNDAgMHgwMDAwMDAwMDAwNTZjOWI5IGluIGludGVybmFsX2xpc3BfY29u ZGl0aW9uX2Nhc2UgKHZhcj0uLi4sIGJvZHlmb3JtPS4uLiwgaGFuZGxlcnM9Li4uKSBhdCBl dmFsLmM6MTMwMwojNDEgMHgwMDAwMDAwMDAwNTZhZTE0IGluIGV2YWxfc3ViIChmb3JtPS4u LikgYXQgZXZhbC5jOjIxODMKIzQyIDB4MDAwMDAwMDAwMDU2YjFiZCBpbiBGcHJvZ24gKGJv ZHk9Li4uKSBhdCBldmFsLmM6NDU1CiM0MyAweDAwMDAwMDAwMDA1NmFlMTQgaW4gZXZhbF9z dWIgKGZvcm09Li4uKSBhdCBldmFsLmM6MjE4MwojNDQgMHgwMDAwMDAwMDAwNTZhZTE0IGlu IGV2YWxfc3ViIChmb3JtPS4uLikgYXQgZXZhbC5jOjIxODMKIzQ1IDB4MDAwMDAwMDAwMDU2 YjFiZCBpbiBGcHJvZ24gKGJvZHk9Li4uKSBhdCBldmFsLmM6NDU1CiM0NiAweDAwMDAwMDAw MDA1NmI1MTIgaW4gZnVuY2FsbF9sYW1iZGEgKGZ1bj0uLi4sIG5hcmdzPW5hcmdzQGVudHJ5 PTAsIGFyZ192ZWN0b3I9YXJnX3ZlY3RvckBlbnRyeT0weDdmZmZmZmZmYTIyOCkgYXQgZXZh bC5jOjMwNDIKIzQ3IDB4MDAwMDAwMDAwMDU2OGJiZCBpbiBGZnVuY2FsbCAobmFyZ3M9MSwg YXJncz0weDdmZmZmZmZmYTIyMCkgYXQgZXZhbC5jOjI3ODAKIzQ4IDB4MDAwMDAwMDAwMDU2 OGM2OSBpbiBmdW5jYWxsX25pbCAobmFyZ3M9PG9wdGltaXplZCBvdXQ+LCBhcmdzPTxvcHRp bWl6ZWQgb3V0PikgYXQgZXZhbC5jOjIzOTcKIzQ5IDB4MDAwMDAwMDAwMDU2ODIzZCBpbiBy dW5faG9va193aXRoX2FyZ3MgKG5hcmdzPTEsIGFyZ3M9MHg3ZmZmZmZmZmEyMjAsIGZ1bmNh bGw9MHg1NjhjNjAgPGZ1bmNhbGxfbmlsPikgYXQgZXZhbC5jOjI1NzQKIzUwIDB4MDAwMDAw MDAwMDU2ODNkNyBpbiBydW5faG9va193aXRoX2FyZ3MgKGZ1bmNhbGw9MHg1NjhjNjAgPGZ1 bmNhbGxfbmlsPiwgYXJncz0weDdmZmZmZmZmYTIyMCwgbmFyZ3M9MSkgYXQgZXZhbC5jOjI1 MjQKIzUxIEZydW5faG9va193aXRoX2FyZ3MgKGFyZ3M9MHg3ZmZmZmZmZmEyMjAsIG5hcmdz PTEpIGF0IGV2YWwuYzoyNDM5CiM1MiBydW5faG9vayAoaG9vaz0uLi4pIGF0IGV2YWwuYzoy NTg3CiM1MyBGcnVuX2hvb2tzIChuYXJncz08b3B0aW1pemVkIG91dD4sIGFyZ3M9PG9wdGlt aXplZCBvdXQ+KSBhdCBldmFsLmM6MjQyMQojNTQgMHgwMDAwMDAwMDAwNTY4YzQyIGluIEZm dW5jYWxsIChuYXJncz0yLCBhcmdzPWFyZ3NAZW50cnk9MHg3ZmZmZmZmZmEzMTApIGF0IGV2 YWwuYzoyNzY2CiM1NSAweDAwMDAwMDAwMDA1OWZhODggaW4gZXhlY19ieXRlX2NvZGUgKGJ5 dGVzdHI9Li4uLCB2ZWN0b3I9Li4uLCBtYXhkZXB0aD0uLi4sIGFyZ3NfdGVtcGxhdGU9Li4u LCBuYXJncz1uYXJnc0BlbnRyeT0xNDA3Mzc0ODgzMzE1NjgsIGFyZ3M9PG9wdGltaXplZCBv dXQ+LCAKICAgIGFyZ3NAZW50cnk9MHgxZmZmZmZmYTVjOCkgYXQgYnl0ZWNvZGUuYzo2MjkK IzU2IDB4MDAwMDAwMDAwMDU2YjJhZSBpbiBmdW5jYWxsX2xhbWJkYSAoZnVuPS4uLiwgbmFy Z3M9MTQwNzM3NDg4MzMxNTY4LCBuYXJnc0BlbnRyeT0zLCBhcmdfdmVjdG9yPTB4MWZmZmZm ZmE1YzgsIGFyZ192ZWN0b3JAZW50cnk9MHg3ZmZmZmZmZmE1YzgpIGF0IGV2YWwuYzoyOTY3 CiM1NyAweDAwMDAwMDAwMDA1NjhiYmQgaW4gRmZ1bmNhbGwgKG5hcmdzPW5hcmdzQGVudHJ5 PTQsIGFyZ3M9MHg3ZmZmZmZmZmE1YzApIGF0IGV2YWwuYzoyNzgwCiM1OCAweDAwMDAwMDAw MDA1NmE2NzAgaW4gRmFwcGx5IChuYXJncz0yLCBhcmdzPTB4N2ZmZmZmZmZhNmQ4KSBhdCBl dmFsLmM6MjM4NgojNTkgMHgwMDAwMDAwMDAwNTY4YzQyIGluIEZmdW5jYWxsIChuYXJncz0z LCBhcmdzPWFyZ3NAZW50cnk9MHg3ZmZmZmZmZmE2ZDApIGF0IGV2YWwuYzoyNzY2CiM2MCAw eDAwMDAwMDAwMDA1OWZhODggaW4gZXhlY19ieXRlX2NvZGUgKGJ5dGVzdHI9Li4uLCB2ZWN0 b3I9Li4uLCBtYXhkZXB0aD0uLi4sIGFyZ3NfdGVtcGxhdGU9Li4uLCBuYXJncz1uYXJnc0Bl bnRyeT0xNDA3Mzc0ODgzMzI1MjgsIGFyZ3M9PG9wdGltaXplZCBvdXQ+LCAKICAgIGFyZ3NA ZW50cnk9MHgxZmZmZmZmYTk0OCkgYXQgYnl0ZWNvZGUuYzo2MjkKIzYxIDB4MDAwMDAwMDAw MDU2YjJhZSBpbiBmdW5jYWxsX2xhbWJkYSAoZnVuPS4uLiwgbmFyZ3M9MTQwNzM3NDg4MzMy NTI4LCBuYXJnc0BlbnRyeT0zLCBhcmdfdmVjdG9yPTB4MWZmZmZmZmE5NDgsIGFyZ192ZWN0 b3JAZW50cnk9MHg3ZmZmZmZmZmE5NDgpIGF0IGV2YWwuYzoyOTY3CiM2MiAweDAwMDAwMDAw MDA1NjhiYmQgaW4gRmZ1bmNhbGwgKG5hcmdzPTQsIGFyZ3M9YXJnc0BlbnRyeT0weDdmZmZm ZmZmYTk0MCkgYXQgZXZhbC5jOjI3ODAKIzYzIDB4MDAwMDAwMDAwMDU5ZmE4OCBpbiBleGVj X2J5dGVfY29kZSAoYnl0ZXN0cj0uLi4sIHZlY3Rvcj0uLi4sIG1heGRlcHRoPS4uLiwgYXJn c190ZW1wbGF0ZT0uLi4sIG5hcmdzPW5hcmdzQGVudHJ5PTE0MDczNzQ4ODMzMzE2MCwgYXJn cz08b3B0aW1pemVkIG91dD4sIAogICAgYXJnc0BlbnRyeT0weDFmZmZmZmZhYzMwKSBhdCBi eXRlY29kZS5jOjYyOQojNjQgMHgwMDAwMDAwMDAwNTZiMmFlIGluIGZ1bmNhbGxfbGFtYmRh IChmdW49Li4uLCBuYXJncz0xNDA3Mzc0ODgzMzMxNjAsIG5hcmdzQGVudHJ5PTcsIGFyZ192 ZWN0b3I9MHgxZmZmZmZmYWMzMCwgYXJnX3ZlY3RvckBlbnRyeT0weDdmZmZmZmZmYWMzMCkg YXQgZXZhbC5jOjI5NjcKIzY1IDB4MDAwMDAwMDAwMDU2OGJiZCBpbiBGZnVuY2FsbCAobmFy Z3M9OCwgYXJncz1hcmdzQGVudHJ5PTB4N2ZmZmZmZmZhYzI4KSBhdCBldmFsLmM6Mjc4MAoj NjYgMHgwMDAwMDAwMDAwNTlmYTg4IGluIGV4ZWNfYnl0ZV9jb2RlIChieXRlc3RyPS4uLiwg dmVjdG9yPS4uLiwgbWF4ZGVwdGg9Li4uLCBhcmdzX3RlbXBsYXRlPS4uLiwgbmFyZ3M9bmFy Z3NAZW50cnk9MTQwNzM3NDg4MzMzOTI4LCBhcmdzPTxvcHRpbWl6ZWQgb3V0PiwgCiAgICBh cmdzQGVudHJ5PTB4MWZmZmZmZmFlYzApIGF0IGJ5dGVjb2RlLmM6NjI5CiM2NyAweDAwMDAw MDAwMDA1NmIyYWUgaW4gZnVuY2FsbF9sYW1iZGEgKGZ1bj0uLi4sIG5hcmdzPTE0MDczNzQ4 ODMzMzkyOCwgbmFyZ3NAZW50cnk9MCwgYXJnX3ZlY3Rvcj0weDFmZmZmZmZhZWMwLCBhcmdf dmVjdG9yQGVudHJ5PTB4N2ZmZmZmZmZhZWMwKSBhdCBldmFsLmM6Mjk2NwojNjggMHgwMDAw MDAwMDAwNTY4YmJkIGluIEZmdW5jYWxsIChuYXJncz0xLCBhcmdzPWFyZ3NAZW50cnk9MHg3 ZmZmZmZmZmFlYjgpIGF0IGV2YWwuYzoyNzgwCiM2OSAweDAwMDAwMDAwMDA1OWZhODggaW4g ZXhlY19ieXRlX2NvZGUgKGJ5dGVzdHI9Li4uLCB2ZWN0b3I9Li4uLCBtYXhkZXB0aD0uLi4s IGFyZ3NfdGVtcGxhdGU9Li4uLCBuYXJncz1uYXJnc0BlbnRyeT0xNDA3Mzc0ODgzMzQ1NTIs IGFyZ3M9PG9wdGltaXplZCBvdXQ+LAogICAgYXJnc0BlbnRyeT0weDFmZmZmZmZiMTgwKSBh dCBieXRlY29kZS5jOjYyOQojNzAgMHgwMDAwMDAwMDAwNTZiMmFlIGluIGZ1bmNhbGxfbGFt YmRhIChmdW49Li4uLCBuYXJncz0xNDA3Mzc0ODgzMzQ1NTIsIG5hcmdzQGVudHJ5PTEsIGFy Z192ZWN0b3I9MHgxZmZmZmZmYjE4MCwgYXJnX3ZlY3RvckBlbnRyeT0weDdmZmZmZmZmYjE4 MCkgYXQgZXZhbC5jOjI5NjcKIzcxIDB4MDAwMDAwMDAwMDU2OGJiZCBpbiBGZnVuY2FsbCAo bmFyZ3M9MiwgYXJncz1hcmdzQGVudHJ5PTB4N2ZmZmZmZmZiMTc4KSBhdCBldmFsLmM6Mjc4 MAojNzIgMHgwMDAwMDAwMDAwNTlmYTg4IGluIGV4ZWNfYnl0ZV9jb2RlIChieXRlc3RyPS4u LiwgdmVjdG9yPS4uLiwgbWF4ZGVwdGg9Li4uLCBhcmdzX3RlbXBsYXRlPS4uLiwgbmFyZ3M9 bmFyZ3NAZW50cnk9MTQwNzM3NDg4MzM1MzUyLCBhcmdzPTxvcHRpbWl6ZWQgb3V0PiwKICAg IGFyZ3NAZW50cnk9MHg1ZmZmZmZmYjdlOCkgYXQgYnl0ZWNvZGUuYzo2MjkKIzczIDB4MDAw MDAwMDAwMDU2YjJhZSBpbiBmdW5jYWxsX2xhbWJkYSAoZnVuPS4uLiwgbmFyZ3M9MTQwNzM3 NDg4MzM1MzUyLCBuYXJnc0BlbnRyeT0yLCBhcmdfdmVjdG9yPTB4NWZmZmZmZmI3ZTgsIGFy Z192ZWN0b3JAZW50cnk9MHg3ZmZmZmZmZmI3ZTgpIGF0IGV2YWwuYzoyOTY3CiM3NCAweDAw MDAwMDAwMDA1NjhiYmQgaW4gRmZ1bmNhbGwgKG5hcmdzPW5hcmdzQGVudHJ5PTMsIGFyZ3M9 MHg3ZmZmZmZmZmI3ZTApIGF0IGV2YWwuYzoyNzgwCiM3NSAweDAwMDAwMDAwMDA1NmE2NzAg aW4gRmFwcGx5IChuYXJncz1uYXJnc0BlbnRyeT0yLCBhcmdzPWFyZ3NAZW50cnk9MHg3ZmZm ZmZmZmI4YTApIGF0IGV2YWwuYzoyMzg2CiM3NiAweDAwMDAwMDAwMDA1NmE5NWMgaW4gYXBw bHkxIChmbj0uLi4sIGFyZz0uLi4pIGF0IGV2YWwuYzoyNjAyCiM3NyAweDAwMDAwMDAwMDA1 NjdlNDYgaW4gaW50ZXJuYWxfY29uZGl0aW9uX2Nhc2VfMSAoYmZ1bj1iZnVuQGVudHJ5PTB4 NWEyNjEwIDxyZWFkX3Byb2Nlc3Nfb3V0cHV0X2NhbGw+LCBhcmc9Li4uLCBoYW5kbGVycz0u Li4sIGhhbmRsZXJzQGVudHJ5PS4uLiwKICAgIGhmdW49aGZ1bkBlbnRyeT0weDVhMjU4MCA8 cmVhZF9wcm9jZXNzX291dHB1dF9lcnJvcl9oYW5kbGVyPikgYXQgZXZhbC5jOjEzNTYKIzc4 IDB4MDAwMDAwMDAwMDVhMjhiOCBpbiByZWFkX2FuZF9kaXNwb3NlX29mX3Byb2Nlc3Nfb3V0 cHV0IChjb2Rpbmc9PG9wdGltaXplZCBvdXQ+LCBuYnl0ZXM9MjM5LAogICAgY2hhcnM9MHg3 ZmZmZmZmZmI5NDAgIi1kaXIgL2hvbWUvbWF0dGhldy93b3Jrc3BhY2Uvc3RvcmFnZS9vcGVu c291cmNlL2xsdm0tcHJvamVjdC11bm9mZmljaWFsLWdpdGh1Yi1taXJyb3IuZ2l0LyAtY3Vy cmVudC1mcmFtZSAtdHR5IC9kZXYvcHRzLzUgZHVtYiAtZmlsZSAvaG9tZS9tYXR0aGV3L3dv cmtzcGFjZS9zdG9yYWdlL29wZW5zb3VyY2UvbGx2bS1wcm9qZWN0LXVub2ZmaWNpYWwtIi4u LiwgcD0weGJiNDY4ZjApIGF0IHByb2Nlc3MuYzo1OTk4CiM3OSByZWFkX3Byb2Nlc3Nfb3V0 cHV0IChwcm9jPS4uLiwgcHJvY0BlbnRyeT0uLi4sIGNoYW5uZWw9Y2hhbm5lbEBlbnRyeT0y MCkgYXQgcHJvY2Vzcy5jOjU5MDkKIzgwIDB4MDAwMDAwMDAwMDVhYTVkNyBpbiB3YWl0X3Jl YWRpbmdfcHJvY2Vzc19vdXRwdXQgKHRpbWVfbGltaXQ9dGltZV9saW1pdEBlbnRyeT0zMCwg bnNlY3M9bnNlY3NAZW50cnk9MCwgcmVhZF9rYmQ9cmVhZF9rYmRAZW50cnk9LTEsIGRvX2Rp c3BsYXk9ZG9fZGlzcGxheUBlbnRyeT10cnVlLAogICAgd2FpdF9mb3JfY2VsbD0uLi4sIHdh aXRfZm9yX2NlbGxAZW50cnk9Li4uLCB3YWl0X3Byb2M9d2FpdF9wcm9jQGVudHJ5PTB4MCwg anVzdF93YWl0X3Byb2M9MCkgYXQgcHJvY2Vzcy5jOjU2MDgKIzgxIDB4MDAwMDAwMDAwMDQy MjZkMCBpbiBzaXRfZm9yICh0aW1lb3V0PS4uLiwgcmVhZGluZz1yZWFkaW5nQGVudHJ5PXRy dWUsIGRpc3BsYXlfb3B0aW9uPWRpc3BsYXlfb3B0aW9uQGVudHJ5PTEpIGF0IGRpc3BuZXcu Yzo1NzcwCi0tLVR5cGUgPHJldHVybj4gdG8gY29udGludWUsIG9yIHEgPHJldHVybj4gdG8g cXVpdC0tLQojODIgMHgwMDAwMDAwMDAwNGZmNTBjIGluIHJlYWRfY2hhciAoY29tbWFuZGZs YWc9Y29tbWFuZGZsYWdAZW50cnk9MSwgbWFwPS4uLiwgbWFwQGVudHJ5PS4uLiwgcHJldl9l dmVudD0uLi4sIHVzZWRfbW91c2VfbWVudT11c2VkX21vdXNlX21lbnVAZW50cnk9MHg3ZmZm ZmZmZmQ0YmIsCiAgICBlbmRfdGltZT1lbmRfdGltZUBlbnRyeT0weDApIGF0IGtleWJvYXJk LmM6MjcxNwojODMgMHgwMDAwMDAwMDAwNTAwMjVjIGluIHJlYWRfa2V5X3NlcXVlbmNlIChr ZXlidWY9a2V5YnVmQGVudHJ5PTB4N2ZmZmZmZmZkNWMwLCBwcm9tcHQ9Li4uLCBwcm9tcHRA ZW50cnk9Li4uLCBkb250X2Rvd25jYXNlX2xhc3Q9ZG9udF9kb3duY2FzZV9sYXN0QGVudHJ5 PWZhbHNlLAogICAgY2FuX3JldHVybl9zd2l0Y2hfZnJhbWU9Y2FuX3JldHVybl9zd2l0Y2hf ZnJhbWVAZW50cnk9dHJ1ZSwgZml4X2N1cnJlbnRfYnVmZmVyPWZpeF9jdXJyZW50X2J1ZmZl ckBlbnRyeT10cnVlLCBwcmV2ZW50X3JlZGlzcGxheT1wcmV2ZW50X3JlZGlzcGxheUBlbnRy eT1mYWxzZSwKICAgIGJ1ZnNpemU9MzApIGF0IGtleWJvYXJkLmM6OTE0NwojODQgMHgwMDAw MDAwMDAwNTAxZDFlIGluIGNvbW1hbmRfbG9vcF8xICgpIGF0IGtleWJvYXJkLmM6MTM2OAoj ODUgMHgwMDAwMDAwMDAwNTY3ZGFlIGluIGludGVybmFsX2NvbmRpdGlvbl9jYXNlIChiZnVu PWJmdW5AZW50cnk9MHg1MDFhZTAgPGNvbW1hbmRfbG9vcF8xPiwgaGFuZGxlcnM9Li4uLCBo YW5kbGVyc0BlbnRyeT0uLi4sIGhmdW49aGZ1bkBlbnRyeT0weDRmODM4MCA8Y21kX2Vycm9y PikKICAgIGF0IGV2YWwuYzoxMzMyCiM4NiAweDAwMDAwMDAwMDA0ZjM1NTQgaW4gY29tbWFu ZF9sb29wXzIgKGlnbm9yZT0uLi4sIGlnbm9yZUBlbnRyeT0uLi4pIGF0IGtleWJvYXJkLmM6 MTExMAojODcgMHgwMDAwMDAwMDAwNTY3ZDFkIGluIGludGVybmFsX2NhdGNoICh0YWc9Li4u LCB0YWdAZW50cnk9Li4uLCBmdW5jPWZ1bmNAZW50cnk9MHg0ZjM1MzAgPGNvbW1hbmRfbG9v cF8yPiwgYXJnPS4uLiwgYXJnQGVudHJ5PS4uLikgYXQgZXZhbC5jOjEwOTcKIzg4IDB4MDAw MDAwMDAwMDRmMzRlYiBpbiBjb21tYW5kX2xvb3AgKCkgYXQga2V5Ym9hcmQuYzoxMDg5CiM4 OSAweDAwMDAwMDAwMDA0ZjdmOTMgaW4gcmVjdXJzaXZlX2VkaXRfMSAoKSBhdCBrZXlib2Fy ZC5jOjY5NQojOTAgMHgwMDAwMDAwMDAwNGY4MmIzIGluIEZyZWN1cnNpdmVfZWRpdCAoKSBh dCBrZXlib2FyZC5jOjc2NgojOTEgMHgwMDAwMDAwMDAwNDE4YTcyIGluIG1haW4gKGFyZ2M9 PG9wdGltaXplZCBvdXQ+LCBhcmd2PTB4N2ZmZmZmZmZkOTc4KSBhdCBlbWFjcy5jOjE3MTMK --------------E3029D40E5E85D184EB982DA--