From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Keith David Bershatsky Newsgroups: gmane.emacs.bugs Subject: bug#30226: Fixing it->pixel_width / it->current_x when tabs and line numbers. Date: Mon, 22 Jan 2018 23:32:14 -0800 Message-ID: NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart_Mon_Jan_22_23:32:14_2018-1" X-Trace: blaine.gmane.org 1516692681 4520 195.159.176.226 (23 Jan 2018 07:31:21 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Tue, 23 Jan 2018 07:31:21 +0000 (UTC) To: 30226@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Tue Jan 23 08:31:17 2018 Return-path: Envelope-to: geb-bug-gnu-emacs@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 1edt2y-0000PS-FA for geb-bug-gnu-emacs@m.gmane.org; Tue, 23 Jan 2018 08:31:09 +0100 Original-Received: from localhost ([::1]:42261 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1edt4y-0005e6-Ru for geb-bug-gnu-emacs@m.gmane.org; Tue, 23 Jan 2018 02:33:12 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:48628) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1edt4r-0005dc-VM for bug-gnu-emacs@gnu.org; Tue, 23 Jan 2018 02:33:07 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1edt4o-0007tT-PI for bug-gnu-emacs@gnu.org; Tue, 23 Jan 2018 02:33:05 -0500 Original-Received: from debbugs.gnu.org ([208.118.235.43]:59283) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1edt4o-0007sx-Jx for bug-gnu-emacs@gnu.org; Tue, 23 Jan 2018 02:33:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1edt4o-0002lC-7w for bug-gnu-emacs@gnu.org; Tue, 23 Jan 2018 02:33:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Keith David Bershatsky Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 23 Jan 2018 07:33:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 30226 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: X-Debbugs-Original-To: Emacs Bug Reports Original-Received: via spool by submit@debbugs.gnu.org id=B.151669276110579 (code B ref -1); Tue, 23 Jan 2018 07:33:02 +0000 Original-Received: (at submit) by debbugs.gnu.org; 23 Jan 2018 07:32:41 +0000 Original-Received: from localhost ([127.0.0.1]:38947 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1edt4S-0002kZ-UY for submit@debbugs.gnu.org; Tue, 23 Jan 2018 02:32:41 -0500 Original-Received: from eggs.gnu.org ([208.118.235.92]:57611) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1edt4R-0002kM-BM for submit@debbugs.gnu.org; Tue, 23 Jan 2018 02:32:39 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1edt4K-000631-Vp for submit@debbugs.gnu.org; Tue, 23 Jan 2018 02:32:34 -0500 Original-Received: from lists.gnu.org ([2001:4830:134:3::11]:49977) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1edt4K-00062N-PE for submit@debbugs.gnu.org; Tue, 23 Jan 2018 02:32:32 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:48579) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1edt4J-0005Wx-Fw for bug-gnu-emacs@gnu.org; Tue, 23 Jan 2018 02:32:32 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1edt4G-0005qQ-Ar for bug-gnu-emacs@gnu.org; Tue, 23 Jan 2018 02:32:31 -0500 Original-Received: from gateway20.websitewelcome.com ([192.185.4.169]:32910) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1edt4G-0005EL-08 for bug-gnu-emacs@gnu.org; Tue, 23 Jan 2018 02:32:28 -0500 Original-Received: from cm10.websitewelcome.com (cm10.websitewelcome.com [100.42.49.4]) by gateway20.websitewelcome.com (Postfix) with ESMTP id E5AFC400DB7DC for ; Tue, 23 Jan 2018 01:32:15 -0600 (CST) Original-Received: from gator3053.hostgator.com ([50.87.144.69]) by cmsmtp with SMTP id dt43ea7vOcGlpdt43eeESz; Tue, 23 Jan 2018 01:32:15 -0600 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lawlist.com ; s=default; h=Content-Type:MIME-Version:Subject:To:From:Message-ID:Date: Sender:Reply-To:Cc:Content-Transfer-Encoding:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: In-Reply-To:References:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=Ez8Drlniy+5+LBI3uzF+Z2oQjC/kEQQQfUT7QAlgS9o=; b=DgUZnK2mQ8LBXG6hxNBo2FWmiW fBEgoR157pJ+G2IdRvRjQMCrPbf2JrHxk6mJzxL4Y+Qo+2ZvAcmSep7xz+nVNZtKJC6C/FY+pxrmM 4hB4oRa8UFaZq0nRK42wX4tFNYFG2N1BHJIZ98E9pTOmFPvr8Ovtga5OjJeohk0GQZoUZ8clM9+Vj kNguUmEjvGNScJKnECu1Zdi2vyFu/XUNtDJUx0eZNI1rfie676q9NnE6UgCKQFV5y216YhHdInWu2 p+oPmVYP9fzVIU9PMkCOWO+IyD74/ipKp069hHCw+/mulm1E756JpsLS6QdNXBJdR2CuTXWuuX0Qc KSgaGfJQ==; Original-Received: from cpe-45-48-239-195.socal.res.rr.com ([45.48.239.195]:54424 helo=server.private) by gator3053.hostgator.com with esmtpsa (TLSv1:DHE-RSA-AES256-SHA:256) (Exim 4.89_1) (envelope-from ) id 1edt43-003KRd-0u for bug-gnu-emacs@gnu.org; Tue, 23 Jan 2018 01:32:15 -0600 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - gator3053.hostgator.com X-AntiAbuse: Original Domain - gnu.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - lawlist.com X-BWhitelist: no X-Source-IP: 45.48.239.195 X-Source-L: No X-Exim-ID: 1edt43-003KRd-0u X-Source: X-Source-Args: X-Source-Dir: X-Source-Sender: cpe-45-48-239-195.socal.res.rr.com (server.private) [45.48.239.195]:54424 X-Source-Auth: lawlist X-Email-Count: 1 X-Source-Cap: bGF3bGlzdDtsYXdsaXN0O2dhdG9yMzA1My5ob3N0Z2F0b3IuY29t X-Local-Domain: yes X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 208.118.235.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" Xref: news.gmane.org gmane.emacs.bugs:142420 Archived-At: --Multipart_Mon_Jan_22_23:32:14_2018-1 Content-Type: text/plain; charset=US-ASCII The following snippet contains the ingredients that can be used to ultimately fix the problem described on the emacs-devel mailing list beginning at: https://lists.gnu.org/archive/html/emacs-devel/2018-01/msg00466.html In a nutshell, it->pixel_width and it->current_x are both incorrect in that situation. Because the X is wrong, all subsequent references to it->current_x on the same line are also wrong. In this snippet, we create a new gizmo in dispextern.h called my_pixel_width so as not to break anything while working on this issue. Someone more knowledgeable than myself (e.g., Eli) will need to figure out what other adjustments in x_produce_glyphs are necessary so that it->pixel_width == it->my_pixel_width in this particular situation. It is a little confusing, but here is what happens in this snippet: it->pixel_width "should be" equal to it->my_pixel_width. If we do that, however, then it->current_x will be wrong. it->current_x "should be" equal to it->current_x less one (1) font->space_width. Setting it->pixel_width to be one (1) font->space_width less than what it was fixes the value of it->current_x and does not break anything else in the process (as far as I can see). dispextern.h:2590 int my_pixel_width; xdisp.c:28298 if (it->char_to_display == '\t' && !NILP (Vdisplay_line_numbers) && it->w->hscroll > 0 && it->current_x < it->lnum_pixel_width) { int my_tab_width = it->tab_width * font->space_width; int my_x = it->current_x + it->continuation_lines_width; int my_next_tab_x = ((1 + my_x + my_tab_width - 1) / my_tab_width) * my_tab_width; if (my_next_tab_x - my_x < font->space_width) my_next_tab_x += my_tab_width; if (!NILP (Vdisplay_line_numbers)) my_next_tab_x += it->lnum_pixel_width - ((it->w->hscroll * font->space_width) % my_tab_width); it->my_pixel_width = my_next_tab_x - it->lnum_pixel_width - font->space_width; it->pixel_width -= font->space_width; } else it->my_pixel_width = 0; --Multipart_Mon_Jan_22_23:32:14_2018-1 Content-Type: application/diff; type=patch Content-Disposition: attachment; filename="patch.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9kaXNwZXh0ZXJuLmggYi9zcmMvZGlzcGV4dGVybi5oCmluZGV4IDI1 YmQ2YjIuLjQ4ZTI2MDYgMTAwNjQ0Ci0tLSBhL3NyYy9kaXNwZXh0ZXJuLmgKKysrIGIvc3JjL2Rp c3BleHRlcm4uaApAQCAtMjU4Nyw2ICsyNTg3LDE2IEBAIHN0cnVjdCBpdAogICAgICBwcm9kdWNl X2dseXBocy4gICovCiAgIGludCBwaXhlbF93aWR0aDsKIAorCisvKiAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiogKi8KKy8qIERlYnVnIHRoZSBwaXhlbC13aWR0aCBvZiBhIHN0cmV0Y2ggdGFiLiAqLworCisg IC8qIFdpZHRoIG9mIHRoZSBkaXNwbGF5IGVsZW1lbnQgaW4gcGl4ZWxzLiAgUmVzdWx0IG9mIHBy b2R1Y2VfZ2x5cGhzLiAgKi8KKyAgaW50IG15X3BpeGVsX3dpZHRoOworCisvKiAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiogKi8KKworCiAgIC8qIEN1cnJlbnQsIG1heGltdW0gbG9naWNhbCwgYW5kIG1heGlt dW0gcGh5c2ljYWwgbGluZSBoZWlnaHQKICAgICAgaW5mb3JtYXRpb24uICBSZXN1bHQgb2YgcHJv ZHVjZV9nbHlwaHMuICAqLwogICBpbnQgYXNjZW50LCBkZXNjZW50LCBtYXhfYXNjZW50LCBtYXhf ZGVzY2VudDsKZGlmZiAtLWdpdCBhL3NyYy94ZGlzcC5jIGIvc3JjL3hkaXNwLmMKaW5kZXggOTAz ODE1Yy4uOWYzOTZjNCAxMDA2NDQKLS0tIGEvc3JjL3hkaXNwLmMKKysrIGIvc3JjL3hkaXNwLmMK QEAgLTI4Mjk1LDYgKzI4Mjk1LDM0IEBAIHhfcHJvZHVjZV9nbHlwaHMgKHN0cnVjdCBpdCAqaXQp CiAJICAgIH0KIAl9CiAKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBEZWJ1ZyB0aGUg cGl4ZWwtd2lkdGggb2YgYSBzdHJldGNoIHRhYi4gKi8KKworICBpZiAoaXQtPmNoYXJfdG9fZGlz cGxheSA9PSAnXHQnCisgICAgICAmJiAhTklMUCAoVmRpc3BsYXlfbGluZV9udW1iZXJzKQorICAg ICAgJiYgaXQtPnctPmhzY3JvbGwgPiAwCisgICAgICAmJiBpdC0+Y3VycmVudF94IDwgaXQtPmxu dW1fcGl4ZWxfd2lkdGgpCisgICAgeworICAgICAgaW50IG15X3RhYl93aWR0aCA9IGl0LT50YWJf d2lkdGggKiBmb250LT5zcGFjZV93aWR0aDsKKyAgICAgIGludCBteV94ID0gaXQtPmN1cnJlbnRf eCArIGl0LT5jb250aW51YXRpb25fbGluZXNfd2lkdGg7CisgICAgICBpbnQgbXlfbmV4dF90YWJf eCA9ICgoMSArIG15X3ggKyBteV90YWJfd2lkdGggLSAxKSAvIG15X3RhYl93aWR0aCkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgKiBteV90YWJfd2lkdGg7CisgICAgICBpZiAobXlfbmV4dF90 YWJfeCAtIG15X3ggPCBmb250LT5zcGFjZV93aWR0aCkKKyAgICAgICAgbXlfbmV4dF90YWJfeCAr PSBteV90YWJfd2lkdGg7CisgICAgICBpZiAoIU5JTFAgKFZkaXNwbGF5X2xpbmVfbnVtYmVycykp CisgICAgICAgIG15X25leHRfdGFiX3ggKz0gaXQtPmxudW1fcGl4ZWxfd2lkdGgKKyAgICAgICAg ICAgICAgICAgICAgICAgICAtICgoaXQtPnctPmhzY3JvbGwgKiBmb250LT5zcGFjZV93aWR0aCkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIG15X3RhYl93aWR0aCk7CisgICAgICBpdC0+ bXlfcGl4ZWxfd2lkdGggPSBteV9uZXh0X3RhYl94IC0gaXQtPmxudW1fcGl4ZWxfd2lkdGggLSBm b250LT5zcGFjZV93aWR0aDsKKyAgICAgIGl0LT5waXhlbF93aWR0aCAtPSBmb250LT5zcGFjZV93 aWR0aDsKKyAgICB9CisgICAgZWxzZQorICAgICAgaXQtPm15X3BpeGVsX3dpZHRoID0gMDsKKwor LyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqICovCisKKwogICAgICAgaWYgKEZPTlRfVE9PX0hJR0ggKGZv bnQpKQogCXsKIAkgIGludCBmb250X2FzY2VudCwgZm9udF9kZXNjZW50OwpAQCAtMjg2OTAsNiAr Mjg3MTgsMTYgQEAgeF9wcm9kdWNlX2dseXBocyAoc3RydWN0IGl0ICppdCkKICAgaWYgKGl0LT5h cmVhID09IFRFWFRfQVJFQSkKICAgICBpdC0+Y3VycmVudF94ICs9IGl0LT5waXhlbF93aWR0aDsK IAorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIERlYnVnIHRoZSBwaXhlbC13aWR0aCBv ZiBhIHN0cmV0Y2ggdGFiLiAqLworCisgIGlmIChpdC0+bXlfcGl4ZWxfd2lkdGggPiAwKQorICAg IGl0LT5jdXJyZW50X3ggKz0gaXQtPm15X3BpeGVsX3dpZHRoOworCisvKiAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiogKi8KKworCiAgIGlmIChleHRyYV9saW5lX3NwYWNpbmcgPiAwKQogICAgIHsKICAgICAg IGl0LT5kZXNjZW50ICs9IGV4dHJhX2xpbmVfc3BhY2luZzsKQEAgLTMyMjUxLDkgKzMyMjg5LDE3 NiBAQCB4X2ludGVyc2VjdF9yZWN0YW5nbGVzIChYUmVjdGFuZ2xlICpyMSwgWFJlY3RhbmdsZSAq cjIsIFhSZWN0YW5nbGUgKnJlc3VsdCkKIAkJCSAgICBJbml0aWFsaXphdGlvbgogICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLwogCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogRGVidWcgdGhlIHBpeGVs LXdpZHRoIG9mIGEgc3RyZXRjaCB0YWIuICovCisKK0RFRlVOICgiZGVidWctdGFiLXBpeGVsLXdp ZHRoIiwgRmRlYnVnX3RhYl9waXhlbF93aWR0aCwgU2RlYnVnX3RhYl9waXhlbF93aWR0aCwgMCwg MCwgMCwKKyAgICAgICBkb2M6IC8qIERlYnVnIHRoZSBwaXhlbC13aWR0aCBvZiBhIHN0cmV0Y2gg dGFiLiAqLykKKyAgKHZvaWQpCit7CisgIEZzY3JvbGxfbGVmdCAobWFrZV9udW1iZXIgKDEpLCBR bmlsKTsKKyAgc3RydWN0IHdpbmRvdyAqdyA9IGRlY29kZV9saXZlX3dpbmRvdyAoc2VsZWN0ZWRf d2luZG93KTsKKyAgc3RydWN0IGZyYW1lICpmID0gWEZSQU1FICh3LT5mcmFtZSk7CisgIExpc3Bf T2JqZWN0IGJ1ZiA9IHctPmNvbnRlbnRzOworICBDSEVDS19CVUZGRVIgKGJ1Zik7CisgIHN0cnVj dCBidWZmZXIgKmIgPSBYQlVGRkVSIChidWYpOworICBzdHJ1Y3QgaXQgaXQ7CisgIHZvaWQgKml0 ZGF0YSA9IGJpZGlfc2hlbHZlX2NhY2hlICgpOworICBzdHJ1Y3QgaXQgc2F2ZWRfaXRfZm9yX3dp bmRvd19zdGFydDsKKyAgdm9pZCAqc2F2ZWRfaXRkYXRhX2Zvcl93aW5kb3dfc3RhcnQgPSBOVUxM OworICBlbnVtIG1vdmVfaXRfcmVzdWx0IHJjID0gTU9WRV9YX1JFQUNIRUQ7CisgIHN0cnVjdCB0 ZXh0X3BvcyBzdGFydF90ZXh0X3Bvc2l0aW9uOworICBwdHJkaWZmX3QgaXRfc3RhcnQ7CisgIGlu dCBmaXJzdF94LCBsYXN0X3g7CisgIGludCBsbnVtX3dpZHRoID0gMDsKKyAgaW50IGxudW1fcGl4 ZWxfd2lkdGggPSAwOworICBpbnQgZnJhbWVfY2hhcl93aWR0aCA9IEZSQU1FX0NPTFVNTl9XSURU SCAoZik7CisgIGJvb2wgaHNjbCA9ICghdy0+c3VzcGVuZF9hdXRvX2hzY3JvbGwKKyAgICAgICAg ICAgICAgICYmIEVRIChGYnVmZmVyX2xvY2FsX3ZhbHVlIChRYXV0b19oc2Nyb2xsX21vZGUsIGJ1 ZiksIFFjdXJyZW50X2xpbmUpCisgICAgICAgICAgICAgICAmJiB3LT5oc2Nyb2xsID4gMCk7Cisg IGludCB3X2hzY3JvbGwgPSB3LT5oc2Nyb2xsOworICBpbnQgaHNjbF9maXJzdF9ocG9zID0gd2lu ZG93X2hzY3JvbGxfbGltaXRlZCAodywgZik7CisgIGludCBoc2NsX2ZpcnN0X3ggPSBoc2NsX2Zp cnN0X2hwb3MgKiBmcmFtZV9jaGFyX3dpZHRoOworICBpbnQgdGV4dF9hcmVhX3dpZHRoID0gd2lu ZG93X2JveF93aWR0aCAodywgVEVYVF9BUkVBKTsKKyAgaW50IGhlYWRlcl9saW5lX2hlaWdodCA9 IFdJTkRPV19IRUFERVJfTElORV9IRUlHSFQgKHcpOworICBpbnQgcmVsYXRpdmVfeCwgaHBvcywg dnBvczsKKyAgaW50IG9wb2ludF94ID0gdy0+b3V0cHV0X2N1cnNvci54OworICBpbnQgb3BvaW50 X3kgPSB3LT5vdXRwdXRfY3Vyc29yLnk7CisgIGludCBvcG9pbnRfaHBvcyA9IHctPm91dHB1dF9j dXJzb3IuaHBvczsKKyAgaW50IG9wb2ludF92cG9zID0gdy0+b3V0cHV0X2N1cnNvci52cG9zOwor ICBpbnQgY291bnQgPSAxOworICBpbnQgbXlfc2F2ZWRfcGl4ZWxfd2lkdGggPSAwOworLyogKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqCisgICAgICAgICAgICAgICAgICAgICAgU1RBUlQgRElTUExBWSBB TkQgUFJJTUUgSVQKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworICAvKiBCZWdpbiB0aGUgam91 cm5leSBhdCB3LT5zdGFydC4gKi8KKyAgU0VUX1RFWFRfUE9TX0ZST01fTUFSS0VSIChzdGFydF90 ZXh0X3Bvc2l0aW9uLCB3LT5zdGFydCk7CisgIHN0YXJ0X2Rpc3BsYXkgKCZpdCwgdywgc3RhcnRf dGV4dF9wb3NpdGlvbik7CisgIGZpcnN0X3ggPSBpdC5maXJzdF92aXNpYmxlX3g7CisgIGxhc3Rf eCA9IGl0Lmxhc3RfdmlzaWJsZV94OworICBpdF9zdGFydCA9IElUX0NIQVJQT1MgKGl0KTsKKyAg U0FWRV9JVCAoc2F2ZWRfaXRfZm9yX3dpbmRvd19zdGFydCwgaXQsIHNhdmVkX2l0ZGF0YV9mb3Jf d2luZG93X3N0YXJ0KTsKKyAgLyogRmluaXNoIHByaW1pbmcgdGhlIElUIGZvciBwb3RlbnRpYWwg bGluZSBudW1iZXJzLiAqLworICBpZiAoIU5JTFAgKFZkaXNwbGF5X2xpbmVfbnVtYmVycykKKyAg ICAgICYmICFFUSAoVmRpc3BsYXlfbGluZV9udW1iZXJzLCBRdmlzdWFsKSkKKyAgICB7CisgICAg ICBpdC5maXJzdF92aXNpYmxlX3ggPSAwOworICAgICAgbW92ZV9pdF9ieV9saW5lcyAoJml0LCAx KTsKKyAgICAgIGxudW1fd2lkdGggPSBpdC5sbnVtX3dpZHRoOworICAgICAgbG51bV9waXhlbF93 aWR0aCA9IGl0LmxudW1fcGl4ZWxfd2lkdGg7CisgICAgICBSRVNUT1JFX0lUICgmaXQsICZzYXZl ZF9pdF9mb3Jfd2luZG93X3N0YXJ0LCBzYXZlZF9pdGRhdGFfZm9yX3dpbmRvd19zdGFydCk7Cisg ICAgICBpdC5maXJzdF92aXNpYmxlX3ggPSBmaXJzdF94OworICAgICAgaXQubGFzdF92aXNpYmxl X3ggPSBsYXN0X3g7CisgICAgICBpdC5sbnVtX3dpZHRoID0gbG51bV93aWR0aDsKKyAgICAgIGl0 LmxudW1fcGl4ZWxfd2lkdGggPSBsbnVtX3BpeGVsX3dpZHRoOworICAgICAgU0FWRV9JVCAoc2F2 ZWRfaXRfZm9yX3dpbmRvd19zdGFydCwgaXQsIHNhdmVkX2l0ZGF0YV9mb3Jfd2luZG93X3N0YXJ0 KTsKKyAgICB9CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBHT1RPIExJTkUgQkVHSU4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworICAvKiBQ bGFjZSB0aGUgSVQgb24gdGhlIGN1cnJlbnQgbGluZSBjb250YWluaW5nIFBULiAqLworICBpbnQg dm9mZnNldCA9IChoZWFkZXJfbGluZV9oZWlnaHQgPiAwCisgICAgICAgICAgICAgICAgICYmIG9w b2ludF92cG9zID4gMCkKKyAgICAgICAgICAgICAgICAgID8gb3BvaW50X3Zwb3MgLSAxCisgICAg ICAgICAgICAgICAgICA6IG9wb2ludF92cG9zOworICBpZiAodm9mZnNldCA+IDApCisgICAgbW92 ZV9pdF9ieV9saW5lcyAoJml0LCB2b2Zmc2V0KTsKKy8qICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgor ICAgICAgICAgICAgICAgICAgICAgICAgRklSU1QgWCA9PiBQRU5VTFRJTUFURSBFT0wKKyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiAqLworICB3aGlsZSAodHJ1ZSkKKyAgICB7CisgICAgICBpZiAoaHNj bCkKKyAgICAgICAgeworICAgICAgICAgIHJlbGF0aXZlX3ggPSBpdC5jdXJyZW50X3ggLSAoaHNj bF9maXJzdF9ocG9zICogZnJhbWVfY2hhcl93aWR0aCk7CisgICAgICAgICAgaHBvcyA9IGl0Lmhw b3MgLSBoc2NsX2ZpcnN0X2hwb3M7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAg IHsKKyAgICAgICAgICAgIHJlbGF0aXZlX3ggPSBpdC5jdXJyZW50X3ggLSBmaXJzdF94OworICAg ICAgICAgICAgaHBvcyA9IGl0Lmhwb3M7CisgICAgICAgICAgfQorICAgICAgaWYgKGhlYWRlcl9s aW5lX2hlaWdodCA+IDApCisgICAgICAgIHZwb3MgPSBpdC52cG9zICsgMTsKKyAgICAgICAgZWxz ZQorICAgICAgICAgIHZwb3MgPSBpdC52cG9zOworICAgICAgYm9vbCBmaW5hbF9sb29wX3AgPSAo SVRFUkFUT1JfQVRfRU5EX09GX0xJTkVfUCAoJml0KQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgfHwgRkVUQ0hfQllURSAoSVRfQllURVBPUyAoaXQpKSA9PSAnXG4nCisgICAgICAgICAgICAg ICAgICAgICAgICAgICB8fCByYyA9PSBNT1ZFX1BPU19NQVRDSF9PUl9aVik7CisgICAgICBpZiAo ZmluYWxfbG9vcF9wKQorICAgICAgICBicmVhazsKKyAgICAgIGJvb2wgbm90aGluZ19wID0gKGl0 LmMgPT0gMCk7CisgICAgICBib29sIHRhYl92aXNpYmxlX3AgPSAoaXQuYyA9PSAxODcpOworICAg ICAgYm9vbCB0YWJfaW52aXNpYmxlX3AgPSAoaXQuYyA9PSAnXHQnKTsKKyAgICAgIGlmICh3LT5o c2Nyb2xsID4gMCkKKyAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG4lZC4gICVzXG5cCisgICAg aXQuYyAoJWQpXG5cCisgICAgdy0+aHNjcm9sbCAoJWQpXG5cCisgICAgaXQuY3VycmVudF94ICgl ZClcblwKKyAgICBpdC5waXhlbF93aWR0aCAoJWQpXG5cCisgICAgaXQubXlfcGl4ZWxfd2lkdGgg KCVkKVxuXAorICAgICVzICglZClcbiIsCisgICAgICAgICAgICAgICAgIGNvdW50LAorICAgICAg ICAgICAgICAgICAobm90aGluZ19wCisgICAgICAgICAgICAgICAgICAgPyAiTk9USElORyIKKyAg ICAgICAgICAgICAgICAgICA6IHRhYl92aXNpYmxlX3AKKyAgICAgICAgICAgICAgICAgICAgID8g IlRBQiBDSEFSQUNURVIiCisgICAgICAgICAgICAgICAgICAgOiB0YWJfaW52aXNpYmxlX3AKKyAg ICAgICAgICAgICAgICAgICAgID8gIlRBQiBTVFJFVENIIgorICAgICAgICAgICAgICAgICAgIDog IlRFWFQiKSwKKyAgICAgICAgICAgICAgICAgaXQuYywKKyAgICAgICAgICAgICAgICAgd19oc2Ny b2xsLAorICAgICAgICAgICAgICAgICBpdC5jdXJyZW50X3gsCisgICAgICAgICAgICAgICAgIGl0 LnBpeGVsX3dpZHRoLAorICAgICAgICAgICAgICAgICBpdC5teV9waXhlbF93aWR0aCwKKyAgICAg ICAgICAgICAgICAgKCghbm90aGluZ19wCisgICAgICAgICAgICAgICAgICAgJiYgIXRhYl92aXNp YmxlX3AKKyAgICAgICAgICAgICAgICAgICAmJiAhdGFiX2ludmlzaWJsZV9wKQorICAgICAgICAg ICAgICAgICAgPyAiZmlyc3RfeCArIGxudW1fcGl4ZWxfd2lkdGggKyBteV9zYXZlZF9waXhlbF93 aWR0aCIKKyAgICAgICAgICAgICAgICAgIDogIk4vQSIpLAorICAgICAgICAgICAgICAgICAoKCFu b3RoaW5nX3AKKyAgICAgICAgICAgICAgICAgICAmJiAhdGFiX3Zpc2libGVfcAorICAgICAgICAg ICAgICAgICAgICYmICF0YWJfaW52aXNpYmxlX3ApCisgICAgICAgICAgICAgICAgICA/IGZpcnN0 X3ggKyBsbnVtX3BpeGVsX3dpZHRoICsgbXlfc2F2ZWRfcGl4ZWxfd2lkdGgKKyAgICAgICAgICAg ICAgICAgIDogMCkpOworICAgICAgcmMgPSBtb3ZlX2l0X2luX2Rpc3BsYXlfbGluZV90byAoJml0 LCBaViwgaXQuY3VycmVudF94ICsgaXQucGl4ZWxfd2lkdGgsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBNT1ZFX1RPX1BPUyB8IE1PVkVfVE9fWCk7CisgICAgICBjb3Vu dCA9IGNvdW50ICsgMTsKKyAgICAgIGlmIChpdC5teV9waXhlbF93aWR0aCA+IDApCisgICAgICAg IG15X3NhdmVkX3BpeGVsX3dpZHRoID0gaXQubXlfcGl4ZWxfd2lkdGg7CisgICAgICBpZiAocmMg PT0gTU9WRV9MSU5FX0NPTlRJTlVFRCkKKyAgICAgICAgYnJlYWs7CisgICAgICByZWxhdGl2ZV94 ID0gKGhzY2wpCisgICAgICAgICAgICAgICAgICAgPyBpdC5jdXJyZW50X3ggLSAoaHNjbF9maXJz dF9ocG9zICogZnJhbWVfY2hhcl93aWR0aCkKKyAgICAgICAgICAgICAgICAgICA6IGl0LmN1cnJl bnRfeCAtIGZpcnN0X3g7CisgICAgICBpZiAocmVsYXRpdmVfeCArIGZyYW1lX2NoYXJfd2lkdGgg Pj0gdGV4dF9hcmVhX3dpZHRoKQorICAgICAgICBicmVhazsKKyAgICB9CisgIHJlZGlzcGxheV9p bnRlcm5hbCAoKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKKyAgc3RydWN0IGdseXBoX3Jv dyAqZ2x5cGhfcm93ID0gTUFUUklYX1JPVyAody0+Y3VycmVudF9tYXRyaXgsIGl0LnZwb3MpOwor ICBkdW1wX2dseXBoX3JvdyAoZ2x5cGhfcm93LCBpdC52cG9zLCAyKTsKKyAgYmlkaV91bnNoZWx2 ZV9jYWNoZSAoaXRkYXRhLCBmYWxzZSk7CisgIHJldHVybiBRbmlsOworfQorCisvKiAqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiogKi8KKworCiB2b2lkCiBzeW1zX29mX3hkaXNwICh2b2lkKQogeworCisKKy8q ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiAqLworLyogRGVidWcgdGhlIHBpeGVsLXdpZHRoIG9mIGEgc3Ry ZXRjaCB0YWIuICovCisKKyAgZGVmc3ViciAoJlNkZWJ1Z190YWJfcGl4ZWxfd2lkdGgpOworCisv KiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiogKi8KKworCiAgIFZ3aXRoX2VjaG9fYXJlYV9zYXZlX3ZlY3Rv ciA9IFFuaWw7CiAgIHN0YXRpY3BybyAoJlZ3aXRoX2VjaG9fYXJlYV9zYXZlX3ZlY3Rvcik7CiAK --Multipart_Mon_Jan_22_23:32:14_2018-1--