From owner-freebsd-bugs@FreeBSD.ORG Mon Mar 12 22:00:36 2012 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 67A001065672 for ; Mon, 12 Mar 2012 22:00:36 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id 51FD08FC08 for ; Mon, 12 Mar 2012 22:00:36 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.5/8.14.5) with ESMTP id q2CM0aje082151 for ; Mon, 12 Mar 2012 22:00:36 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.5/8.14.5/Submit) id q2CM0awj082150; Mon, 12 Mar 2012 22:00:36 GMT (envelope-from gnats) Date: Mon, 12 Mar 2012 22:00:36 GMT Message-Id: <201203122200.q2CM0awj082150@freefall.freebsd.org> To: freebsd-bugs@FreeBSD.org From: Mark Johnston Cc: Subject: Re: bin/143017: watch(8): fatal: cannot attach to tty X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Mark Johnston List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 12 Mar 2012 22:00:36 -0000 The following reply was made to PR bin/143017; it has been noted by GNATS. From: Mark Johnston To: Ed Schouten Cc: bug-followup@freebsd.org, dummy@smtp.ru Subject: Re: bin/143017: watch(8): fatal: cannot attach to tty Date: Mon, 12 Mar 2012 17:54:01 -0400 --20cf307d0576be5e4204bb12c767 Content-Type: text/plain; charset=ISO-8859-1 On Mon, Mar 12, 2012 at 5:52 PM, Mark Johnston wrote: > On Mon, Mar 12, 2012 at 5:27 PM, Ed Schouten wrote: >> Sure, but in that case you can simply use isatty() to distinguish the >> special treatment. What I mean is that you can only call watch(8) by >> passing the TTY used on the command line. > > Ok, fair enough. I replaced opt_interactive with isatty(std_out) > checks. One check was unnecessary - the line with a FD_ISSET check. I > also added a check in unset_tty() so that the terminal doesn't break > if we bail with ^C. > > So the difference now is that in non-interactive mode, we're not > interested in stdin, and the tty has to be passed on the command line. > >> Also I see you've simplified the code that dynamically scales the input >> buffer size. Though I think that's a good idea, I do think we should >> increase BUF_SIZE to something higher. Setting it to 4 KB or something >> shouldn't harm, right? > > Yeah, good point. I've attached the regenerated patch. ... --20cf307d0576be5e4204bb12c767 Content-Type: text/plain; charset=US-ASCII; name="watch_cleanup.patch.txt" Content-Disposition: attachment; filename="watch_cleanup.patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gzq1uetj0 ZGlmZiAtLWdpdCBhL3Vzci5zYmluL3dhdGNoL3dhdGNoLjggYi91c3Iuc2Jpbi93YXRjaC93YXRj aC44CmluZGV4IDk5YzZiNmYuLjc0NzQzZTkgMTAwNjQ0Ci0tLSBhL3Vzci5zYmluL3dhdGNoL3dh dGNoLjgKKysrIGIvdXNyLnNiaW4vd2F0Y2gvd2F0Y2guOApAQCAtNTMsMTMgKzUzLDYgQEAgV2l0 aG91dCB0aGlzIG9wdGlvbiwKIHdpbGwgYXR0ZW1wdCB0byBmaW5kIHRoZSBuZXh0IGF2YWlsYWJs ZQogLlhyIHNucCA0CiBkZXZpY2UuCi0uSXQgRmwgaQotRm9yY2UgaW50ZXJhY3RpdmUgbW9kZS4K LUludGVyYWN0aXZlIG1vZGUgaXMgYSBkZWZhdWx0IGlmCi0uTm0KLWlzIHN0YXJ0ZWQgZnJvbSBh IHR0eS4KLUlmIG91dHB1dCBpcyByZWRpcmVjdGVkIHRvIGEgZmlsZSwgaW50ZXJhY3RpdmUgbW9k ZSBjYW4gc3RpbGwgYmUgcmVxdWVzdGVkCi1ieSBzcGVjaWZ5aW5nIHRoaXMgb3B0aW9uLgogLkl0 IEZsIG4KIERpc2FibGUgdGhlIGFiaWxpdHkgdG8gc3dpdGNoIHRoZSB3YXRjaGVkIHR0eSBpbnRl cmFjdGl2ZWx5LgogVGhpcyBkaXNhYmxlcwpkaWZmIC0tZ2l0IGEvdXNyLnNiaW4vd2F0Y2gvd2F0 Y2guYyBiL3Vzci5zYmluL3dhdGNoL3dhdGNoLmMKaW5kZXggZTY5NTM0ZC4uMDQ4ZTM3MiAxMDA2 NDQKLS0tIGEvdXNyLnNiaW4vd2F0Y2gvd2F0Y2guYworKysgYi91c3Iuc2Jpbi93YXRjaC93YXRj aC5jCkBAIC00NSw3ICs0NSw3IEBAIF9fRkJTRElEKCIkRnJlZUJTRCQiKTsKICNkZWZpbmUgTVNH X05PV1JJVEUJIlNub29wIGRldmljZSBjaGFuZ2UgZHVlIHRvIHdyaXRlIGZhaWx1cmUuIgogCiAj ZGVmaW5lIERFVl9OQU1FX0xFTgkxMDI0CS8qIGZvciAvZGV2L3R0eVhYKysgKi8KLSNkZWZpbmUg TUlOX1NJWkUJMjU2CisjZGVmaW5lIEJVRl9TSVpFCTQwOTYKIAogI2RlZmluZSBDSFJfU1dJVENI CTI0CS8qIEN0cmwrWAkgKi8KICNkZWZpbmUgQ0hSX0NMRUFSCTIzCS8qIEN0cmwrVgkgKi8KQEAg LTU1LDcgKzU1LDYgQEAgc3RhdGljIHZvaWQJdGltZXN0YW1wKGNvbnN0IGNoYXIgKik7CiBzdGF0 aWMgdm9pZAlzZXRfdHR5KHZvaWQpOwogc3RhdGljIHZvaWQJdW5zZXRfdHR5KHZvaWQpOwogc3Rh dGljIHZvaWQJZmF0YWwoaW50LCBjb25zdCBjaGFyICopOwotc3RhdGljIGludAlvcGVuX3NucCh2 b2lkKTsKIHN0YXRpYyB2b2lkCWNsZWFudXAoaW50KTsKIHN0YXRpYyB2b2lkCXVzYWdlKHZvaWQp IF9fZGVhZDI7CiBzdGF0aWMgdm9pZAlzZXR1cF9zY3Iodm9pZCk7CkBAIC02Niw3ICs2NSw2IEBA IHN0YXRpYyB2b2lkCWFza19kZXYoY2hhciAqLCBjb25zdCBjaGFyICopOwogCiBpbnQJCW9wdF9y ZWNvbm5fY2xvc2UgPSAwOwogaW50CQlvcHRfcmVjb25uX29mbG93ID0gMDsKLWludAkJb3B0X2lu dGVyYWN0aXZlID0gMTsKIGludAkJb3B0X3RpbWVzdGFtcCA9IDA7CiBpbnQJCW9wdF93cml0ZSA9 IDA7CiBpbnQJCW9wdF9ub19zd2l0Y2ggPSAwOwpAQCAtMTM0LDggKzEzMiw4IEBAIHNldF90dHko dm9pZCkKIHN0YXRpYyB2b2lkCiB1bnNldF90dHkodm9pZCkKIHsKLQotCXRjc2V0YXR0cihzdGRf aW4sIFRDU0FOT1csICZvdHR5KTsKKwlpZiAoaXNhdHR5KHN0ZF9vdXQpKQorCQl0Y3NldGF0dHIo c3RkX2luLCBUQ1NBTk9XLCAmb3R0eSk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xNDksMjYgKzE0 Nyw2IEBAIGZhdGFsKGludCBlcnJvciwgY29uc3QgY2hhciAqYnVmKQogCQlleGl0KGVycm9yKTsK IH0KIAotc3RhdGljIGludAotb3Blbl9zbnAodm9pZCkKLXsKLQlpbnQJCWYsIG1vZGU7Ci0KLQlp ZiAob3B0X3dyaXRlKQotCQltb2RlID0gT19SRFdSOwotCWVsc2UKLQkJbW9kZSA9IE9fUkRPTkxZ OwotCi0JaWYgKG9wdF9zbnBkZXYgPT0gTlVMTCkKLQkJZiA9IG9wZW4oX1BBVEhfREVWICJzbnAi LCBtb2RlKTsKLQllbHNlCi0JCWYgPSBvcGVuKG9wdF9zbnBkZXYsIG1vZGUpOwotCWlmIChmID09 IC0xKQotCQlmYXRhbChFWF9PU0ZJTEUsICJjYW5ub3Qgb3BlbiBzbm9vcCBkZXZpY2UiKTsKLQot CXJldHVybiAoZik7Ci19Ci0KIHN0YXRpYyB2b2lkCiBjbGVhbnVwKGludCBzaWdubyBfX3VudXNl ZCkKIHsKQEAgLTE5Myw3ICsxNzEsNyBAQCBzZXR1cF9zY3Iodm9pZCkKIHsKIAljaGFyCQkqY2J1 ZiA9IGdidWYsICp0ZXJtOwogCi0JaWYgKCFvcHRfaW50ZXJhY3RpdmUpCisJaWYgKCFpc2F0dHko c3RkX291dCkpCiAJCXJldHVybjsKIAlpZiAoKHRlcm0gPSBnZXRlbnYoIlRFUk0iKSkpCiAJCWlm ICh0Z2V0ZW50KHRidWYsIHRlcm0pID09IDEpCkBAIC0yMDYsMjUgKzE4NCwzMyBAQCBzZXR1cF9z Y3Iodm9pZCkKIHN0YXRpYyB2b2lkCiBkZXRhY2hfc25wKHZvaWQpCiB7Ci0JaW50CQlmZDsKIAot CWZkID0gLTE7Ci0JaW9jdGwoc25wX2lvLCBTTlBTVFRZLCAmZmQpOworCWNsb3NlKHNucF9pbyk7 CiB9CiAKIHN0YXRpYyB2b2lkCiBhdHRhY2hfc25wKHZvaWQpCiB7Ci0JaW50CQlzbnBfdHR5Owor CWludCBzbnBfdHR5LCBtb2RlOworCisJaWYgKG9wdF93cml0ZSkKKwkJbW9kZSA9IE9fUkRXUjsK KwllbHNlCisJCW1vZGUgPSBPX1JET05MWTsKKworCWlmIChvcHRfc25wZGV2ID09IE5VTEwpCisJ CXNucF9pbyA9IG9wZW4oX1BBVEhfREVWICJzbnAiLCBtb2RlKTsKKwllbHNlCisJCXNucF9pbyA9 IG9wZW4ob3B0X3NucGRldiwgbW9kZSk7CisJaWYgKHNucF9pbyA9PSAtMSkKKwkJZmF0YWwoRVhf T1NGSUxFLCAiY2Fubm90IG9wZW4gc25vb3AgZGV2aWNlIik7CiAKIAlzbnBfdHR5ID0gb3Blbihk ZXZfbmFtZSwgT19SRE9OTFkgfCBPX05PTkJMT0NLKTsKLQlpZiAoc25wX3R0eSA8IDApCisJaWYg KHNucF90dHkgPT0gLTEpCiAJCWZhdGFsKEVYX0RBVEFFUlIsICJjYW4ndCBvcGVuIGRldmljZSIp OwogCWlmIChpb2N0bChzbnBfaW8sIFNOUFNUVFksICZzbnBfdHR5KSAhPSAwKQogCQlmYXRhbChF WF9VTkFWQUlMQUJMRSwgImNhbm5vdCBhdHRhY2ggdG8gdHR5Iik7CiAJY2xvc2Uoc25wX3R0eSk7 Ci0JaWYgKG9wdF90aW1lc3RhbXApCi0JCXRpbWVzdGFtcCgiTG9nZ2luZyBTdGFydGVkLiIpOwog fQogCiBzdGF0aWMgdm9pZApAQCAtMjY5LDcgKzI1NSw3IEBAIGFza19kZXYoY2hhciAqZGJ1Ziwg Y29uc3QgY2hhciAqbXNnKQogCWVsc2UKIAkJcHJpbnRmKCJFbnRlciBkZXZpY2UgbmFtZToiKTsK IAotCWlmIChmZ2V0cyhidWYsIERFVl9OQU1FX0xFTiAtIDEsIHN0ZGluKSkgeworCWlmIChmZ2V0 cyhidWYsIERFVl9OQU1FX0xFTiwgc3RkaW4pKSB7CiAJCWxlbiA9IHN0cmxlbihidWYpOwogCQlp ZiAoYnVmW2xlbiAtIDFdID09ICdcbicpCiAJCQlidWZbbGVuIC0gMV0gPSAnXDAnOwpAQCAtMjg1 LDE4ICsyNzEsMTIgQEAgaW50CiBtYWluKGludCBhYywgY2hhciAqYXZbXSkKIHsKIAlpbnQJCWNo LCByZXMsIHJ2LCBucmVhZDsKLQlzaXplX3QJCWJfc2l6ZSA9IE1JTl9TSVpFOwotCWNoYXIJCSpi dWYsIGNoYltSRUFEQl9MRU5dOworCWNoYXIJCWJ1ZltCVUZfU0laRV0sIGNoYltSRUFEQl9MRU5d OwogCWZkX3NldAkJZmRfczsKIAogCSh2b2lkKSBzZXRsb2NhbGUoTENfVElNRSwgIiIpOwogCi0J aWYgKGlzYXR0eShzdGRfb3V0KSkKLQkJb3B0X2ludGVyYWN0aXZlID0gMTsKLQllbHNlCi0JCW9w dF9pbnRlcmFjdGl2ZSA9IDA7Ci0KLQl3aGlsZSAoKGNoID0gZ2V0b3B0KGFjLCBhdiwgIldjaW90 bmY6IikpICE9IC0xKQorCXdoaWxlICgoY2ggPSBnZXRvcHQoYWMsIGF2LCAiV2NvdG5mOiIpKSAh PSAtMSkKIAkJc3dpdGNoIChjaCkgewogCQljYXNlICdXJzoKIAkJCW9wdF93cml0ZSA9IDE7CkBA IC0zMDQsOSArMjg0LDYgQEAgbWFpbihpbnQgYWMsIGNoYXIgKmF2W10pCiAJCWNhc2UgJ2MnOgog CQkJb3B0X3JlY29ubl9jbG9zZSA9IDE7CiAJCQlicmVhazsKLQkJY2FzZSAnaSc6Ci0JCQlvcHRf aW50ZXJhY3RpdmUgPSAxOwotCQkJYnJlYWs7CiAJCWNhc2UgJ28nOgogCQkJb3B0X3JlY29ubl9v ZmxvdyA9IDE7CiAJCQlicmVhazsKQEAgLTMyNCw0MyArMzAxLDM5IEBAIG1haW4oaW50IGFjLCBj aGFyICphdltdKQogCQkJdXNhZ2UoKTsKIAkJfQogCisJaWYgKGFjIC0gb3B0aW5kID4gMSkKKwkJ dXNhZ2UoKTsKKwogCWlmIChtb2RmaW5kKCJzbnAiKSA9PSAtMSkKIAkJaWYgKGtsZGxvYWQoInNu cCIpID09IC0xIHx8IG1vZGZpbmQoInNucCIpID09IC0xKQogCQkJd2Fybigic25wIG1vZHVsZSBu b3QgYXZhaWxhYmxlIik7CiAKIAlzaWduYWwoU0lHSU5ULCBjbGVhbnVwKTsKIAotCXNucF9pbyA9 IG9wZW5fc25wKCk7CiAJc2V0dXBfc2NyKCk7CiAKIAlpZiAoKihhdiArPSBvcHRpbmQpID09IE5V TEwpIHsKLQkJaWYgKG9wdF9pbnRlcmFjdGl2ZSAmJiAhb3B0X25vX3N3aXRjaCkKKwkJaWYgKGlz YXR0eShzdGRfb3V0KSAmJiAhb3B0X25vX3N3aXRjaCkKIAkJCWFza19kZXYoZGV2X25hbWUsIE1T R19JTklUKTsKIAkJZWxzZQotCQkJZmF0YWwoRVhfREFUQUVSUiwgIm5vIGRldmljZSBuYW1lIGdp dmVuIik7CisJCQllcnJ4KEVYX0RBVEFFUlIsICJubyBkZXZpY2UgbmFtZSBnaXZlbiIpOwogCX0g ZWxzZQogCQlzdHJuY3B5KGRldl9uYW1lLCAqYXYsIERFVl9OQU1FX0xFTik7Ci0KIAlzZXRfZGV2 KGRldl9uYW1lKTsKIAotCWlmICghKGJ1ZiA9IChjaGFyICopIG1hbGxvYyhiX3NpemUpKSkKLQkJ ZmF0YWwoRVhfVU5BVkFJTEFCTEUsICJtYWxsb2MgZmFpbGVkIik7CisJaWYgKG9wdF90aW1lc3Rh bXApCisJCXRpbWVzdGFtcCgiTG9nZ2luZyBTdGFydGVkLiIpOwogCiAJRkRfWkVSTygmZmRfcyk7 CiAKIAlmb3IgKDs7KSB7Ci0JCWlmIChvcHRfaW50ZXJhY3RpdmUpCisJCWlmIChpc2F0dHkoc3Rk X291dCkpCiAJCQlGRF9TRVQoc3RkX2luLCAmZmRfcyk7CiAJCUZEX1NFVChzbnBfaW8sICZmZF9z KTsKIAkJcmVzID0gc2VsZWN0KHNucF9pbyArIDEsICZmZF9zLCBOVUxMLCBOVUxMLCBOVUxMKTsK LQkJaWYgKG9wdF9pbnRlcmFjdGl2ZSAmJiBGRF9JU1NFVChzdGRfaW4sICZmZF9zKSkgewotCi0J CQlpZiAoKHJlcyA9IGlvY3RsKHN0ZF9pbiwgRklPTlJFQUQsICZucmVhZCkpICE9IDApCi0JCQkJ ZmF0YWwoRVhfT1NFUlIsICJpb2N0bChGSU9OUkVBRCkiKTsKLQkJCWlmIChucmVhZCA+IFJFQURC X0xFTikKLQkJCQlucmVhZCA9IFJFQURCX0xFTjsKLQkJCXJ2ID0gcmVhZChzdGRfaW4sIGNoYiwg bnJlYWQpOwotCQkJaWYgKHJ2ID09IC0xIHx8IHJ2ICE9IG5yZWFkKQorCQlpZiAoRkRfSVNTRVQo c3RkX2luLCAmZmRfcykpIHsKKwkJCXJ2ID0gcmVhZChzdGRfaW4sIGNoYiwgUkVBREJfTEVOKTsK KwkJCWlmIChydiA9PSAtMSkKIAkJCQlmYXRhbChFWF9JT0VSUiwgInJlYWQgKHN0ZGluKSBmYWls ZWQiKTsKIAogCQkJc3dpdGNoIChjaGJbMF0pIHsKQEAgLTM3Niw4ICszNDksOCBAQCBtYWluKGlu dCBhYywgY2hhciAqYXZbXSkKIAkJCQl9CiAJCQlkZWZhdWx0OgogCQkJCWlmIChvcHRfd3JpdGUp IHsKLQkJCQkJcnYgPSB3cml0ZShzbnBfaW8sIGNoYiwgbnJlYWQpOwotCQkJCQlpZiAocnYgPT0g LTEgfHwgcnYgIT0gbnJlYWQpIHsKKwkJCQkJcnYgPSB3cml0ZShzbnBfaW8sIGNoYiwgcnYpOwor CQkJCQlpZiAocnYgPT0gLTEpIHsKIAkJCQkJCWRldGFjaF9zbnAoKTsKIAkJCQkJCWlmIChvcHRf bm9fc3dpdGNoKQogCQkJCQkJCWZhdGFsKEVYX0lPRVJSLApAQCAtMzkyLDE0ICszNjUsMTQgQEAg bWFpbihpbnQgYWMsIGNoYXIgKmF2W10pCiAJCWlmICghRkRfSVNTRVQoc25wX2lvLCAmZmRfcykp CiAJCQljb250aW51ZTsKIAotCQlpZiAoKHJlcyA9IGlvY3RsKHNucF9pbywgRklPTlJFQUQsICZu cmVhZCkpICE9IDApCisJCWlmIChpb2N0bChzbnBfaW8sIEZJT05SRUFELCAmbnJlYWQpICE9IDAp CiAJCQlmYXRhbChFWF9PU0VSUiwgImlvY3RsKEZJT05SRUFEKSIpOwogCiAJCXN3aXRjaCAobnJl YWQpIHsKIAkJY2FzZSBTTlBfT0ZMT1c6CiAJCQlpZiAob3B0X3JlY29ubl9vZmxvdykKIAkJCQlh dHRhY2hfc25wKCk7Ci0JCQllbHNlIGlmIChvcHRfaW50ZXJhY3RpdmUgJiYgIW9wdF9ub19zd2l0 Y2gpIHsKKwkJCWVsc2UgaWYgKGlzYXR0eShzdGRfb3V0KSAmJiAhb3B0X25vX3N3aXRjaCkgewog CQkJCWFza19kZXYoZGV2X25hbWUsIE1TR19PRkxPVyk7CiAJCQkJc2V0X2RldihkZXZfbmFtZSk7 CiAJCQl9IGVsc2UKQEAgLTQwOSwzMCArMzgyLDE4IEBAIG1haW4oaW50IGFjLCBjaGFyICphdltd KQogCQljYXNlIFNOUF9UVFlDTE9TRToKIAkJCWlmIChvcHRfcmVjb25uX2Nsb3NlKQogCQkJCWF0 dGFjaF9zbnAoKTsKLQkJCWVsc2UgaWYgKG9wdF9pbnRlcmFjdGl2ZSAmJiAhb3B0X25vX3N3aXRj aCkgeworCQkJZWxzZSBpZiAoaXNhdHR5KHN0ZF9vdXQpICYmICFvcHRfbm9fc3dpdGNoKSB7CiAJ CQkJYXNrX2RldihkZXZfbmFtZSwgTVNHX0NMT1NFRCk7CiAJCQkJc2V0X2RldihkZXZfbmFtZSk7 CiAJCQl9IGVsc2UKIAkJCQljbGVhbnVwKC0xKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJ aWYgKG5yZWFkIDwgKGJfc2l6ZSAvIDIpICYmIChiX3NpemUgLyAyKSA+IE1JTl9TSVpFKSB7Ci0J CQkJZnJlZShidWYpOwotCQkJCWlmICghKGJ1ZiA9IChjaGFyICopIG1hbGxvYyhiX3NpemUgLyAy KSkpCi0JCQkJCWZhdGFsKEVYX1VOQVZBSUxBQkxFLCAibWFsbG9jIGZhaWxlZCIpOwotCQkJCWJf c2l6ZSA9IGJfc2l6ZSAvIDI7Ci0JCQl9Ci0JCQlpZiAobnJlYWQgPiBiX3NpemUpIHsKLQkJCQli X3NpemUgPSAobnJlYWQgJSAyKSA/IChucmVhZCArIDEpIDogKG5yZWFkKTsKLQkJCQlmcmVlKGJ1 Zik7Ci0JCQkJaWYgKCEoYnVmID0gKGNoYXIgKikgbWFsbG9jKGJfc2l6ZSkpKQotCQkJCQlmYXRh bChFWF9VTkFWQUlMQUJMRSwgIm1hbGxvYyBmYWlsZWQiKTsKLQkJCX0KLQkJCXJ2ID0gcmVhZChz bnBfaW8sIGJ1ZiwgbnJlYWQpOwotCQkJaWYgKHJ2ID09IC0xIHx8IHJ2ICE9IG5yZWFkKQorCQkJ cnYgPSByZWFkKHNucF9pbywgYnVmLCBCVUZfU0laRSk7CisJCQlpZiAocnYgPT0gLTEpCiAJCQkJ ZmF0YWwoRVhfSU9FUlIsICJyZWFkIGZhaWxlZCIpOwotCQkJcnYgPSB3cml0ZShzdGRfb3V0LCBi dWYsIG5yZWFkKTsKLQkJCWlmIChydiA9PSAtMSB8fCBydiAhPSBucmVhZCkKKwkJCXJ2ID0gd3Jp dGUoc3RkX291dCwgYnVmLCBydik7CisJCQlpZiAocnYgPT0gLTEpCiAJCQkJZmF0YWwoRVhfSU9F UlIsICJ3cml0ZSBmYWlsZWQiKTsKIAkJfQogCX0JCQkvKiBXaGlsZSAqLwo= --20cf307d0576be5e4204bb12c767--