Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Date: Fri, 30 Aug 2002 15:40:10 -0000 To: Subject: more robust tty_list::allocate_tty From: "Chris January" X-Client-IP: 193.60.222.2 Reply-To: chris AT atomice DOT net MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="--------part3d6f91dac118b" Message-Id: ----------part3d6f91dac118b Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit This was destined for the cygwin-patches AT cygwin DOT com, but I can't post to that list because I'm not subscribed from this address (and the webmail interface I'm using doesn't allow you to change the From: header address). Please treat as if posted to cygwin-patches. Thanks. > > This small patch makes tty_list::allocate_tty more robust. On Windows 2000 > > and Windows XP it calls the new API function GetConsoleWindow. On other > > platforms I've added a loop round FindWindow for cases where the system is > > heavily loaded and the console title doesn't change in time. (I've > submitted > > a patch for the latter change before). > > > > Chris > > > > --- > > > > 2002-08-30 Christopher January > > > > * tty.cc (tty_list::allocate_tty): Use GetConsoleWindow on Windows > > 2000 / XP. Call FindWindow in a loop. > > * wincap.cc: Set flag has_get_console_window appropriately. > > * wincap.h: Add flag has_get_console_window. > > > > 2002-08-30 Christopher January > > * wincon.h: Add declaration for GetConsoleWindow. > > > > --- > > > > Index: cygwin/tty.cc > > =================================================================== > > RCS file: /cvs/src/src/winsup/cygwin/tty.cc,v > > retrieving revision 1.40 > > diff -u -p -r1.40 tty.cc > > --- cygwin/tty.cc 2 Aug 2002 02:10:24 -0000 1.40 > > +++ cygwin/tty.cc 30 Aug 2002 15:26:21 -0000 > > @@ -196,6 +196,8 @@ tty_list::allocate_tty (int with_console > > > > if (!with_console) > > console = NULL; > > + else if (wincap.has_get_console_window()) > > + console = GetConsoleWindow (); > > else > > { > > char *oldtitle = new char [TITLESIZE]; > > @@ -218,8 +220,11 @@ tty_list::allocate_tty (int with_console > > > > __small_sprintf (buf, "cygwin.find.console.%d", myself->pid); > > SetConsoleTitle (buf); > > - Sleep (40); > > - console = FindWindow (NULL, buf); > > + for (int times = 0; times < 25 && console == NULL; times++) > > + { > > + Sleep (40); > > + console = FindWindow (NULL, buf); > > + } > > SetConsoleTitle (oldtitle); > > Sleep (40); > > ReleaseMutex (title_mutex); > > Index: cygwin/wincap.cc > > =================================================================== > > RCS file: /cvs/src/src/winsup/cygwin/wincap.cc,v > > retrieving revision 1.16 > > diff -u -p -r1.16 wincap.cc > > --- cygwin/wincap.cc 24 Jul 2002 11:01:37 -0000 1.16 > > +++ cygwin/wincap.cc 30 Aug 2002 15:26:23 -0000 > > @@ -47,6 +47,7 @@ static NO_COPY wincaps wincap_unknown = > > has_64bit_file_access:false, > > has_process_io_counters:false, > > supports_reading_modem_output_lines:false, > > + has_get_console_window:false, > > }; > > > > static NO_COPY wincaps wincap_95 = { > > @@ -85,6 +86,7 @@ static NO_COPY wincaps wincap_95 = { > > has_64bit_file_access:false, > > has_process_io_counters:false, > > supports_reading_modem_output_lines:false, > > + has_get_console_window:false, > > }; > > > > static NO_COPY wincaps wincap_95osr2 = { > > @@ -123,6 +125,7 @@ static NO_COPY wincaps wincap_95osr2 = { > > has_64bit_file_access:false, > > has_process_io_counters:false, > > supports_reading_modem_output_lines:false, > > + has_get_console_window:false, > > }; > > > > static NO_COPY wincaps wincap_98 = { > > @@ -161,6 +164,7 @@ static NO_COPY wincaps wincap_98 = { > > has_64bit_file_access:false, > > has_process_io_counters:false, > > supports_reading_modem_output_lines:false, > > + has_get_console_window:false, > > }; > > > > static NO_COPY wincaps wincap_98se = { > > @@ -199,6 +203,7 @@ static NO_COPY wincaps wincap_98se = { > > has_64bit_file_access:false, > > has_process_io_counters:false, > > supports_reading_modem_output_lines:false, > > + has_get_console_window:false, > > }; > > > > static NO_COPY wincaps wincap_me = { > > @@ -237,6 +242,7 @@ static NO_COPY wincaps wincap_me = { > > has_64bit_file_access:false, > > has_process_io_counters:false, > > supports_reading_modem_output_lines:false, > > + has_get_console_window:false, > > }; > > > > static NO_COPY wincaps wincap_nt3 = { > > @@ -275,6 +281,7 @@ static NO_COPY wincaps wincap_nt3 = { > > has_64bit_file_access:true, > > has_process_io_counters:false, > > supports_reading_modem_output_lines:true, > > + has_get_console_window:false, > > }; > > > > static NO_COPY wincaps wincap_nt4 = { > > @@ -313,6 +320,7 @@ static NO_COPY wincaps wincap_nt4 = { > > has_64bit_file_access:true, > > has_process_io_counters:false, > > supports_reading_modem_output_lines:true, > > + has_get_console_window:false, > > }; > > > > static NO_COPY wincaps wincap_nt4sp4 = { > > @@ -351,6 +359,7 @@ static NO_COPY wincaps wincap_nt4sp4 = { > > has_64bit_file_access:true, > > has_process_io_counters:false, > > supports_reading_modem_output_lines:true, > > + has_get_console_window:false, > > }; > > > > static NO_COPY wincaps wincap_2000 = { > > @@ -389,6 +398,7 @@ static NO_COPY wincaps wincap_2000 = { > > has_64bit_file_access:true, > > has_process_io_counters:true, > > supports_reading_modem_output_lines:true, > > + has_get_console_window:true, > > }; > > > > static NO_COPY wincaps wincap_xp = { > > @@ -427,6 +437,7 @@ static NO_COPY wincaps wincap_xp = { > > has_64bit_file_access:true, > > has_process_io_counters:true, > > supports_reading_modem_output_lines:true, > > + has_get_console_window:true, > > }; > > > > wincapc wincap; > > Index: cygwin/wincap.h > > =================================================================== > > RCS file: /cvs/src/src/winsup/cygwin/wincap.h,v > > retrieving revision 1.13 > > diff -u -p -r1.13 wincap.h > > --- cygwin/wincap.h 24 Jul 2002 11:01:37 -0000 1.13 > > +++ cygwin/wincap.h 30 Aug 2002 15:26:23 -0000 > > @@ -48,6 +48,7 @@ struct wincaps > > unsigned has_64bit_file_access : 1; > > unsigned has_process_io_counters : 1; > > unsigned supports_reading_modem_output_lines : 1; > > + unsigned has_get_console_window > > : 1; > > }; > > > > class wincapc > > @@ -100,6 +101,7 @@ public: > > bool IMPLEMENT (has_64bit_file_access) > > bool IMPLEMENT (has_process_io_counters) > > bool IMPLEMENT (supports_reading_modem_output_lines) > > + bool IMPLEMENT (has_get_console_window) > > > > #undef IMPLEMENT > > }; > > Index: w32api/include/wincon.h > > =================================================================== > > RCS file: /cvs/src/src/winsup/w32api/include/wincon.h,v > > retrieving revision 1.3 > > diff -u -p -r1.3 wincon.h > > --- w32api/include/wincon.h 19 Jun 2002 01:15:45 -0000 1.3 > > +++ w32api/include/wincon.h 30 Aug 2002 15:26:30 -0000 > > @@ -90,7 +90,7 @@ typedef struct _KEY_EVENT_RECORD { > > CHAR AsciiChar; > > } uChar; > > DWORD dwControlKeyState; > > -} > > +} > > #ifdef __GNUC__ > > /* gcc's alignment is not what win32 expects */ > > PACKED > > @@ -146,6 +146,7 @@ BOOL WINAPI ReadConsoleOutputCharacterA( > > BOOL WINAPI ReadConsoleOutputCharacterW (HANDLE,LPWSTR,DWORD,COORD,PDWORD); > > BOOL WINAPI ReadConsoleOutputA (HANDLE,PCHAR_INFO,COORD,COORD,PSMALL_RECT); > > BOOL WINAPI ReadConsoleOutputW (HANDLE,PCHAR_INFO,COORD,COORD,PSMALL_RECT); > > +HWND WINAPI GetConsoleWindow(void); > > BOOL WINAPI ScrollConsoleScreenBufferA(HANDLE,const SMALL_RECT*,const > > SMALL_RECT*,COORD,const CHAR_INFO*); > > BOOL WINAPI ScrollConsoleScreenBufferW(HANDLE,const SMALL_RECT*,const > > SMALL_RECT*,COORD,const CHAR_INFO*); > > BOOL WINAPI SetConsoleActiveScreenBuffer(HANDLE); > > > > > > -- ----------part3d6f91dac118b Content-Type: TEXT/PLAIN; name="tty.patch" Content-Transfer-Encoding: base64 SW5kZXg6IGN5Z3dpbi90dHkuY2MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL3dp bnN1cC9jeWd3aW4vdHR5LmNjLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQwCmRpZmYgLXUgLXAg LXIxLjQwIHR0eS5jYwotLS0gY3lnd2luL3R0eS5jYwkyIEF1ZyAyMDAyIDAyOjEwOjI0IC0wMDAw CTEuNDAKKysrIGN5Z3dpbi90dHkuY2MJMzAgQXVnIDIwMDIgMTU6MjY6MjEgLTAwMDAKQEAgLTE5 Niw2ICsxOTYsOCBAQCB0dHlfbGlzdDo6YWxsb2NhdGVfdHR5IChpbnQgd2l0aF9jb25zb2xlCiAK ICAgaWYgKCF3aXRoX2NvbnNvbGUpCiAgICAgY29uc29sZSA9IE5VTEw7CisgIGVsc2UgaWYgKHdp bmNhcC5oYXNfZ2V0X2NvbnNvbGVfd2luZG93KCkpCisgICAgY29uc29sZSA9IEdldENvbnNvbGVX aW5kb3cgKCk7CiAgIGVsc2UKICAgICB7CiAgICAgICBjaGFyICpvbGR0aXRsZSA9IG5ldyBjaGFy IFtUSVRMRVNJWkVdOwpAQCAtMjE4LDggKzIyMCwxMSBAQCB0dHlfbGlzdDo6YWxsb2NhdGVfdHR5 IChpbnQgd2l0aF9jb25zb2xlCiAKICAgICAgIF9fc21hbGxfc3ByaW50ZiAoYnVmLCAiY3lnd2lu LmZpbmQuY29uc29sZS4lZCIsIG15c2VsZi0+cGlkKTsKICAgICAgIFNldENvbnNvbGVUaXRsZSAo YnVmKTsKLSAgICAgIFNsZWVwICg0MCk7Ci0gICAgICBjb25zb2xlID0gRmluZFdpbmRvdyAoTlVM TCwgYnVmKTsKKyAgICAgIGZvciAoaW50IHRpbWVzID0gMDsgdGltZXMgPCAyNSAmJiBjb25zb2xl ID09IE5VTEw7IHRpbWVzKyspCisgICAgICAgIHsKKyAgICAgICAgICBTbGVlcCAoNDApOworICAg ICAgICAgIGNvbnNvbGUgPSBGaW5kV2luZG93IChOVUxMLCBidWYpOworICAgICAgICB9CiAgICAg ICBTZXRDb25zb2xlVGl0bGUgKG9sZHRpdGxlKTsKICAgICAgIFNsZWVwICg0MCk7CiAgICAgICBS ZWxlYXNlTXV0ZXggKHRpdGxlX211dGV4KTsKSW5kZXg6IGN5Z3dpbi93aW5jYXAuY2MKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL3dpbnN1cC9jeWd3aW4vd2luY2FwLmNjLHYKcmV0 cmlldmluZyByZXZpc2lvbiAxLjE2CmRpZmYgLXUgLXAgLXIxLjE2IHdpbmNhcC5jYwotLS0gY3ln d2luL3dpbmNhcC5jYwkyNCBKdWwgMjAwMiAxMTowMTozNyAtMDAwMAkxLjE2CisrKyBjeWd3aW4v d2luY2FwLmNjCTMwIEF1ZyAyMDAyIDE1OjI2OjIzIC0wMDAwCkBAIC00Nyw2ICs0Nyw3IEBAIHN0 YXRpYyBOT19DT1BZIHdpbmNhcHMgd2luY2FwX3Vua25vd24gPSAKICAgaGFzXzY0Yml0X2ZpbGVf YWNjZXNzOmZhbHNlLAogICBoYXNfcHJvY2Vzc19pb19jb3VudGVyczpmYWxzZSwKICAgc3VwcG9y dHNfcmVhZGluZ19tb2RlbV9vdXRwdXRfbGluZXM6ZmFsc2UsCisgIGhhc19nZXRfY29uc29sZV93 aW5kb3c6ZmFsc2UsCiB9OwogCiBzdGF0aWMgTk9fQ09QWSB3aW5jYXBzIHdpbmNhcF85NSA9IHsK QEAgLTg1LDYgKzg2LDcgQEAgc3RhdGljIE5PX0NPUFkgd2luY2FwcyB3aW5jYXBfOTUgPSB7CiAg IGhhc182NGJpdF9maWxlX2FjY2VzczpmYWxzZSwKICAgaGFzX3Byb2Nlc3NfaW9fY291bnRlcnM6 ZmFsc2UsCiAgIHN1cHBvcnRzX3JlYWRpbmdfbW9kZW1fb3V0cHV0X2xpbmVzOmZhbHNlLAorICBo YXNfZ2V0X2NvbnNvbGVfd2luZG93OmZhbHNlLAogfTsKIAogc3RhdGljIE5PX0NPUFkgd2luY2Fw cyB3aW5jYXBfOTVvc3IyID0gewpAQCAtMTIzLDYgKzEyNSw3IEBAIHN0YXRpYyBOT19DT1BZIHdp bmNhcHMgd2luY2FwXzk1b3NyMiA9IHsKICAgaGFzXzY0Yml0X2ZpbGVfYWNjZXNzOmZhbHNlLAog ICBoYXNfcHJvY2Vzc19pb19jb3VudGVyczpmYWxzZSwKICAgc3VwcG9ydHNfcmVhZGluZ19tb2Rl bV9vdXRwdXRfbGluZXM6ZmFsc2UsCisgIGhhc19nZXRfY29uc29sZV93aW5kb3c6ZmFsc2UsCiB9 OwogCiBzdGF0aWMgTk9fQ09QWSB3aW5jYXBzIHdpbmNhcF85OCA9IHsKQEAgLTE2MSw2ICsxNjQs NyBAQCBzdGF0aWMgTk9fQ09QWSB3aW5jYXBzIHdpbmNhcF85OCA9IHsKICAgaGFzXzY0Yml0X2Zp bGVfYWNjZXNzOmZhbHNlLAogICBoYXNfcHJvY2Vzc19pb19jb3VudGVyczpmYWxzZSwKICAgc3Vw cG9ydHNfcmVhZGluZ19tb2RlbV9vdXRwdXRfbGluZXM6ZmFsc2UsCisgIGhhc19nZXRfY29uc29s ZV93aW5kb3c6ZmFsc2UsCiB9OwogCiBzdGF0aWMgTk9fQ09QWSB3aW5jYXBzIHdpbmNhcF85OHNl ID0gewpAQCAtMTk5LDYgKzIwMyw3IEBAIHN0YXRpYyBOT19DT1BZIHdpbmNhcHMgd2luY2FwXzk4 c2UgPSB7CiAgIGhhc182NGJpdF9maWxlX2FjY2VzczpmYWxzZSwKICAgaGFzX3Byb2Nlc3NfaW9f Y291bnRlcnM6ZmFsc2UsCiAgIHN1cHBvcnRzX3JlYWRpbmdfbW9kZW1fb3V0cHV0X2xpbmVzOmZh bHNlLAorICBoYXNfZ2V0X2NvbnNvbGVfd2luZG93OmZhbHNlLAogfTsKIAogc3RhdGljIE5PX0NP UFkgd2luY2FwcyB3aW5jYXBfbWUgPSB7CkBAIC0yMzcsNiArMjQyLDcgQEAgc3RhdGljIE5PX0NP UFkgd2luY2FwcyB3aW5jYXBfbWUgPSB7CiAgIGhhc182NGJpdF9maWxlX2FjY2VzczpmYWxzZSwK ICAgaGFzX3Byb2Nlc3NfaW9fY291bnRlcnM6ZmFsc2UsCiAgIHN1cHBvcnRzX3JlYWRpbmdfbW9k ZW1fb3V0cHV0X2xpbmVzOmZhbHNlLAorICBoYXNfZ2V0X2NvbnNvbGVfd2luZG93OmZhbHNlLAog fTsKIAogc3RhdGljIE5PX0NPUFkgd2luY2FwcyB3aW5jYXBfbnQzID0gewpAQCAtMjc1LDYgKzI4 MSw3IEBAIHN0YXRpYyBOT19DT1BZIHdpbmNhcHMgd2luY2FwX250MyA9IHsKICAgaGFzXzY0Yml0 X2ZpbGVfYWNjZXNzOnRydWUsCiAgIGhhc19wcm9jZXNzX2lvX2NvdW50ZXJzOmZhbHNlLAogICBz dXBwb3J0c19yZWFkaW5nX21vZGVtX291dHB1dF9saW5lczp0cnVlLAorICBoYXNfZ2V0X2NvbnNv bGVfd2luZG93OmZhbHNlLAogfTsKIAogc3RhdGljIE5PX0NPUFkgd2luY2FwcyB3aW5jYXBfbnQ0 ID0gewpAQCAtMzEzLDYgKzMyMCw3IEBAIHN0YXRpYyBOT19DT1BZIHdpbmNhcHMgd2luY2FwX250 NCA9IHsKICAgaGFzXzY0Yml0X2ZpbGVfYWNjZXNzOnRydWUsCiAgIGhhc19wcm9jZXNzX2lvX2Nv dW50ZXJzOmZhbHNlLAogICBzdXBwb3J0c19yZWFkaW5nX21vZGVtX291dHB1dF9saW5lczp0cnVl LAorICBoYXNfZ2V0X2NvbnNvbGVfd2luZG93OmZhbHNlLAogfTsKIAogc3RhdGljIE5PX0NPUFkg d2luY2FwcyB3aW5jYXBfbnQ0c3A0ID0gewpAQCAtMzUxLDYgKzM1OSw3IEBAIHN0YXRpYyBOT19D T1BZIHdpbmNhcHMgd2luY2FwX250NHNwNCA9IHsKICAgaGFzXzY0Yml0X2ZpbGVfYWNjZXNzOnRy dWUsCiAgIGhhc19wcm9jZXNzX2lvX2NvdW50ZXJzOmZhbHNlLAogICBzdXBwb3J0c19yZWFkaW5n X21vZGVtX291dHB1dF9saW5lczp0cnVlLAorICBoYXNfZ2V0X2NvbnNvbGVfd2luZG93OmZhbHNl LAogfTsKIAogc3RhdGljIE5PX0NPUFkgd2luY2FwcyB3aW5jYXBfMjAwMCA9IHsKQEAgLTM4OSw2 ICszOTgsNyBAQCBzdGF0aWMgTk9fQ09QWSB3aW5jYXBzIHdpbmNhcF8yMDAwID0gewogICBoYXNf NjRiaXRfZmlsZV9hY2Nlc3M6dHJ1ZSwKICAgaGFzX3Byb2Nlc3NfaW9fY291bnRlcnM6dHJ1ZSwK ICAgc3VwcG9ydHNfcmVhZGluZ19tb2RlbV9vdXRwdXRfbGluZXM6dHJ1ZSwKKyAgaGFzX2dldF9j b25zb2xlX3dpbmRvdzp0cnVlLAogfTsKIAogc3RhdGljIE5PX0NPUFkgd2luY2FwcyB3aW5jYXBf eHAgPSB7CkBAIC00MjcsNiArNDM3LDcgQEAgc3RhdGljIE5PX0NPUFkgd2luY2FwcyB3aW5jYXBf eHAgPSB7CiAgIGhhc182NGJpdF9maWxlX2FjY2Vzczp0cnVlLAogICBoYXNfcHJvY2Vzc19pb19j b3VudGVyczp0cnVlLAogICBzdXBwb3J0c19yZWFkaW5nX21vZGVtX291dHB1dF9saW5lczp0cnVl LAorICBoYXNfZ2V0X2NvbnNvbGVfd2luZG93OnRydWUsCiB9OwogCiB3aW5jYXBjIHdpbmNhcDsK SW5kZXg6IGN5Z3dpbi93aW5jYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMv d2luc3VwL2N5Z3dpbi93aW5jYXAuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMwpkaWZmIC11 IC1wIC1yMS4xMyB3aW5jYXAuaAotLS0gY3lnd2luL3dpbmNhcC5oCTI0IEp1bCAyMDAyIDExOjAx OjM3IC0wMDAwCTEuMTMKKysrIGN5Z3dpbi93aW5jYXAuaAkzMCBBdWcgMjAwMiAxNToyNjoyMyAt MDAwMApAQCAtNDgsNiArNDgsNyBAQCBzdHJ1Y3Qgd2luY2FwcwogICB1bnNpZ25lZCBoYXNfNjRi aXRfZmlsZV9hY2Nlc3MJCQk6IDE7CiAgIHVuc2lnbmVkIGhhc19wcm9jZXNzX2lvX2NvdW50ZXJz ICAgICAgICAgICAgICAgICAgICAgIDogMTsKICAgdW5zaWduZWQgc3VwcG9ydHNfcmVhZGluZ19t b2RlbV9vdXRwdXRfbGluZXMgICAgICAgICAgOiAxOworICB1bnNpZ25lZCBoYXNfZ2V0X2NvbnNv bGVfd2luZG93CQkJCQkJOiAxOwogfTsKIAogY2xhc3Mgd2luY2FwYwpAQCAtMTAwLDYgKzEwMSw3 IEBAIHB1YmxpYzoKICAgYm9vbCAgSU1QTEVNRU5UIChoYXNfNjRiaXRfZmlsZV9hY2Nlc3MpCiAg IGJvb2wgIElNUExFTUVOVCAoaGFzX3Byb2Nlc3NfaW9fY291bnRlcnMpCiAgIGJvb2wgIElNUExF TUVOVCAoc3VwcG9ydHNfcmVhZGluZ19tb2RlbV9vdXRwdXRfbGluZXMpCisgIGJvb2wgIElNUExF TUVOVCAoaGFzX2dldF9jb25zb2xlX3dpbmRvdykKIAogI3VuZGVmIElNUExFTUVOVAogfTsKSW5k ZXg6IHczMmFwaS9pbmNsdWRlL3dpbmNvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3Jj L3NyYy93aW5zdXAvdzMyYXBpL2luY2x1ZGUvd2luY29uLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u IDEuMwpkaWZmIC11IC1wIC1yMS4zIHdpbmNvbi5oCi0tLSB3MzJhcGkvaW5jbHVkZS93aW5jb24u aAkxOSBKdW4gMjAwMiAwMToxNTo0NSAtMDAwMAkxLjMKKysrIHczMmFwaS9pbmNsdWRlL3dpbmNv bi5oCTMwIEF1ZyAyMDAyIDE1OjI2OjMwIC0wMDAwCkBAIC05MCw3ICs5MCw3IEBAIHR5cGVkZWYg c3RydWN0IF9LRVlfRVZFTlRfUkVDT1JEIHsKIAkJQ0hBUiBBc2NpaUNoYXI7CiAJfSB1Q2hhcjsK IAlEV09SRCBkd0NvbnRyb2xLZXlTdGF0ZTsKLX0gCit9CiAjaWZkZWYgX19HTlVDX18KIC8qIGdj YydzIGFsaWdubWVudCBpcyBub3Qgd2hhdCB3aW4zMiBleHBlY3RzICovCiAgUEFDS0VECkBAIC0x NDYsNiArMTQ2LDcgQEAgQk9PTCBXSU5BUEkgUmVhZENvbnNvbGVPdXRwdXRDaGFyYWN0ZXJBKAog Qk9PTCBXSU5BUEkgUmVhZENvbnNvbGVPdXRwdXRDaGFyYWN0ZXJXKEhBTkRMRSxMUFdTVFIsRFdP UkQsQ09PUkQsUERXT1JEKTsKIEJPT0wgV0lOQVBJIFJlYWRDb25zb2xlT3V0cHV0QShIQU5ETEUs UENIQVJfSU5GTyxDT09SRCxDT09SRCxQU01BTExfUkVDVCk7CiBCT09MIFdJTkFQSSBSZWFkQ29u c29sZU91dHB1dFcoSEFORExFLFBDSEFSX0lORk8sQ09PUkQsQ09PUkQsUFNNQUxMX1JFQ1QpOwor SFdORCBXSU5BUEkgR2V0Q29uc29sZVdpbmRvdyh2b2lkKTsKIEJPT0wgV0lOQVBJIFNjcm9sbENv bnNvbGVTY3JlZW5CdWZmZXJBKEhBTkRMRSxjb25zdCBTTUFMTF9SRUNUKixjb25zdCBTTUFMTF9S RUNUKixDT09SRCxjb25zdCBDSEFSX0lORk8qKTsKIEJPT0wgV0lOQVBJIFNjcm9sbENvbnNvbGVT Y3JlZW5CdWZmZXJXKEhBTkRMRSxjb25zdCBTTUFMTF9SRUNUKixjb25zdCBTTUFMTF9SRUNUKixD T09SRCxjb25zdCBDSEFSX0lORk8qKTsKIEJPT0wgV0lOQVBJIFNldENvbnNvbGVBY3RpdmVTY3Jl ZW5CdWZmZXIoSEFORExFKTsK