From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: MON KEY Newsgroups: gmane.emacs.bugs Subject: bug#6601: help-make-xref doesn't buttonize `help-variable-def' and per `help-xref-symbol-regexp' Date: Fri, 9 Jul 2010 21:09:22 -0400 Message-ID: NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=000e0cd56fa67deea5048afe2b05 X-Trace: dough.gmane.org 1278725418 14070 80.91.229.12 (10 Jul 2010 01:30:18 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Sat, 10 Jul 2010 01:30:18 +0000 (UTC) To: 6601@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Sat Jul 10 03:30:17 2010 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1OXOtQ-0004AA-J3 for geb-bug-gnu-emacs@m.gmane.org; Sat, 10 Jul 2010 03:30:13 +0200 Original-Received: from localhost ([127.0.0.1]:60909 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OXOtP-0003dd-GF for geb-bug-gnu-emacs@m.gmane.org; Fri, 09 Jul 2010 21:30:11 -0400 Original-Received: from [140.186.70.92] (port=36269 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OXOtI-0003d9-Ia for bug-gnu-emacs@gnu.org; Fri, 09 Jul 2010 21:30:05 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OXOtH-0005xM-A0 for bug-gnu-emacs@gnu.org; Fri, 09 Jul 2010 21:30:04 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:36576) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OXOtH-0005xG-6j for bug-gnu-emacs@gnu.org; Fri, 09 Jul 2010 21:30:03 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.69) (envelope-from ) id 1OXOZv-0000jX-5J; Fri, 09 Jul 2010 21:10:03 -0400 X-Loop: help-debbugs@gnu.org Resent-From: MON KEY Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-To: owner@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 10 Jul 2010 01:10:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 6601 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.12787241762805 (code B ref -1); Sat, 10 Jul 2010 01:10:02 +0000 Original-Received: (at submit) by debbugs.gnu.org; 10 Jul 2010 01:09:36 +0000 Original-Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OXOZT-0000jC-NJ for submit@debbugs.gnu.org; Fri, 09 Jul 2010 21:09:36 -0400 Original-Received: from mx10.gnu.org ([199.232.76.166]) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OXOZR-0000j7-FQ for submit@debbugs.gnu.org; Fri, 09 Jul 2010 21:09:34 -0400 Original-Received: from lists.gnu.org ([199.232.76.165]:49417) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1OXOZN-0003lx-Tp for submit@debbugs.gnu.org; Fri, 09 Jul 2010 21:09:29 -0400 Original-Received: from [140.186.70.92] (port=44068 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OXOZL-0000cW-Vc for bug-gnu-emacs@gnu.org; Fri, 09 Jul 2010 21:09:29 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OXOZK-0003wX-BS for bug-gnu-emacs@gnu.org; Fri, 09 Jul 2010 21:09:27 -0400 Original-Received: from mail-gy0-f169.google.com ([209.85.160.169]:32790) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OXOZK-0003wQ-2a for bug-gnu-emacs@gnu.org; Fri, 09 Jul 2010 21:09:26 -0400 Original-Received: by gyf1 with SMTP id 1so2105417gyf.0 for ; Fri, 09 Jul 2010 18:09:24 -0700 (PDT) Original-Received: by 10.150.164.17 with SMTP id m17mr2603940ybe.272.1278724162841; Fri, 09 Jul 2010 18:09:22 -0700 (PDT) Original-Received: by 10.151.98.19 with HTTP; Fri, 9 Jul 2010 18:09:22 -0700 (PDT) X-Google-Sender-Auth: ZREyn_neig8U-rpCCthjgCYKrNE X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-detected-operating-system: by monty-python.gnu.org: GNU/Linux 2.6, seldom 2.4 (older, 4) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list Resent-Date: Fri, 09 Jul 2010 21:10:03 -0400 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) 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: , Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:38331 Archived-At: --000e0cd56fa67deea5048afe2b05 Content-Type: text/plain; charset=UTF-8 The button `help-variable-def' and constant `help-xref-symbol-regexp' do not find variables with symbol-names containing asterisks, e.g. `*some-var*'. Presumably this applies equally as well to any variable which contains a non-letter as the first character in the variables symbol name. It looks like `help-make-xrefs' inherits the `emacs-lisp-mode-syntax-table' and odd stuff is happening around the regexp and the syntax table though this seems odd as `*' is a symbol constituent. Following bit of code provides an example illustrating the problem: (defvar check-xref-var-no-star 'xrefd-in-docstrings "A test for xref'ing non-star prefixed variables in docstrings.\n Non-star prefixed variables have the form:\n \n These appear with xrefs in docstrings when preceded by either of the following two tokens:\n { variable | option }\n where the variables symbol-name is enclosed with a preceding grave char ` \(ASCII 96\), and followed by an apostrophe char ' (ASCII 39) e.g.:\n variable `' option `'\n This is as contrasted with star prefixed variables which have the form:\n **\n and do not appear with xrefs in docstrings.\n For example, this variable `*check-xref-var-w-star*' is not xref'd. Neither is it xref'd as an option `*check-xref-var-w-star*'. However, the current variable `check-xref-var-no-star' is xref'd. Likewise, it is also xref'd as the option `check-xref-var-no-star'.") (defvar *check-xref-var-w-star* 'not-xrefd-in-docstrings "A test for xref'ing star prefixed variables in docstrings.\n Star prefixed variables have the form:\n **\n these do not appear with xrefs in docstrings.\n This is as contrasted with non-star prefixed variables which have the form:\n \n and which do appear in xref'd in docstrings when preceded by either of the follwing two tokens:\n { variable | option }\n where the symbole-name of the variable is enclosed with a preceding grave char ` \(ASCII 96\) and followed by an apostrophe char ' (ASCII 39) e.g.:\n variable `' option `'\n For example, this variable `check-xref-var-no-star' is xref'd. Likewise, the option `check-xref-var-no-star' is also xref'd. Whereas, the variable `*check-xref-var-w-star*' is not xref'd. Neither is it xref'd as option `*check-xref-var-w-star*'.") (defun check-xref-test-function () "This is a docstring which tests xref'ing of two differently named variables.\n The current functions docstring illustrates the problem.\n This symbol-name will be xref'd as variable `check-xref-var-no-star'.\n It will also be xref'd as option `check-xref-var-no-star'.\n Whereas following symbol-name is not xref'd as variable `*check-xref-var-w-star*', nor is it xref'd as option `*check-xref-var-w-star*'.\n This behaviour constitutes a bug. For additional detailed illustration of the problem see return value of `check-xrefs-w-help-variable-def'." (describe-function 'check-xref-test-function)) (defun check-xrefs-w-help-variable-def (&optional w-test-fncn cnt-var-name) "Find help-variable-button text-property values in *Help* buffer.\n Return a list of text-properties and buffer locations when buffer has a `category` text-property with a prop value `help-variable-button`.\n List contains a count of the number of times the property `help-variable-button` appears along with the count of the number of times a variable name appears in the documentation.\n When W-TEST-FNCN is non-nil it is a symol naming a documented function. Default is `check-xref-test-function'.\n When CNT-VAR-NAME is non-nil count the number of times symbol-name matches the regexp \"`'\". Default is to count matches for the symbol `*check-xref-var-w-star*'.\n Before returning pops-to-buffer named \"*Help*\" and then to buffer named \"*CHECK-XREFS-W-HELP-VARIABLE-DEF*\".\n :EXAMPLE\n\n\(check-xrefs-w-help-variable-def\)\n \(check-xrefs-w-help-variable-def 'help-make-xrefs 'help-forward-label\)\n \(check-xrefs-w-help-variable-def 'help-make-xrefs 'help-xref-symbol-regexp\)\n" (let ((gthr-props) (gthrng t)) (if w-test-fncn (describe-function w-test-fncn) (check-xref-test-function)) (with-current-buffer (get-buffer "*Help*") (goto-char (buffer-end 0)) (while gthrng (when (eq (point) (buffer-end 0)) (goto-char (next-single-property-change (point) 'button))) (unless (null (text-properties-at (point))) (let* ((props-here (text-properties-at (point))) (chk-hvb (plist-get props-here 'category))) (when (equal (symbol-name chk-hvb) "help-variable-button") (push `(:button-found-at ,(point) :w-props ,props-here) gthr-props)) (if (eq (next-char-property-change (point)) (point)) (setq gthrng) (progn (goto-char (next-char-property-change (point))) (if (eq (next-char-property-change (point)) (point)) (setq gthrng) (let ((chk-nxt (next-single-property-change (point) 'button))) (if chk-nxt (goto-char (next-single-property-change (point) 'button)) (setq gthrng))))))))) (when gthr-props (setq gthr-props (nreverse gthr-props))) (let ((cnt-fnd 0)) (dolist (bfa gthr-props (when (> cnt-fnd 0) (setq gthr-props (nconc `(:help-var-btn-fnd-n-tms ,cnt-fnd) gthr-props)))) (when (equal (symbol-name (plist-get (plist-get bfa :w-props) 'category)) "help-variable-button") (incf cnt-fnd))) (goto-char (buffer-end 0)) (setq cnt-fnd 0) (let* ((chk-star-sym (or cnt-var-name '*check-xref-var-w-star*)) (chk-star-str (format "`\%s\'" chk-star-sym))) (while (search-forward-regexp chk-star-str nil t) (incf cnt-fnd)) (if (> cnt-fnd 0) (progn (setq gthrng 0) (dolist (bfa (if (eq (car gthr-props) :help-var-btn-fnd-n-tms) (cddr gthr-props) gthr-props) gthrng) (when (equal (symbol-name (car (plist-get (plist-get bfa :w-props) 'help-args))) (symbol-name chk-star-sym)) (incf gthrng))) (setq gthr-props (nconc `(:help-var-star-seen-n-tms ,cnt-fnd :help-var-star-seen-n-tms ,gthrng) gthr-props))) (setq gthr-props (nconc '(:help-var-star-seen-n-tms 0 :help-var-star-seen-n-tms 0) gthr-props)))))) (let ((pp-rtn-bfr "*CHECK-XREFS-W-HELP-VARIABLE-DEF*")) (with-current-buffer (get-buffer-create pp-rtn-bfr) (erase-buffer)) (pp-display-expression (identity gthr-props) pp-rtn-bfr) (pop-to-buffer "*Help*" t) (pop-to-buffer pp-rtn-bfr t)) gthr-props)) ;; :CLEANUP ;; (dolist (unint '(check-xref-var-no-star ;; *check-xref-var-w-star* ;; check-xref-test-function ;; check-xrefs-w-help-variable-def)) ;; (message "The check-xref fncns and vars were uninterned")) ;;; ============================== --000e0cd56fa67deea5048afe2b05 Content-Type: application/octet-stream; name="buttonize-help-make-xref.el" Content-Disposition: attachment; filename="buttonize-help-make-xref.el" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gbfrbl7p0 Ozs7ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKOzsgVGhlIGJ1dHRvbiBgaGVscC12 YXJpYWJsZS1kZWYnIGFuZCBjb25zdGFudCBgaGVscC14cmVmLXN5bWJvbC1yZWdleHAnCjs7IGRv IG5vdCBmaW5kIHZhcmlhYmxlcyB3aXRoIHN5bWJvbC1uYW1lcyBjb250YWluaW5nIGFzdGVyaXNr cywKOzsgZS5nLiBgKnNvbWUtdmFyKicuIFByZXN1bWFibHkgdGhpcyBhcHBsaWVzIGVxdWFsbHkg YXMgd2VsbCB0byBhbnkKOzsgdmFyaWFibGUgd2hpY2ggY29udGFpbnMgYSBub24tbGV0dGVyIGFz IHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gdGhlCjs7IHZhcmlhYmxlcyBzeW1ib2wgbmFtZS4KCjs7 IEl0IGxvb2tzIGxpa2UgYGhlbHAtbWFrZS14cmVmcycgaW5oZXJpdHMgdGhlCjs7IGBlbWFjcy1s aXNwLW1vZGUtc3ludGF4LXRhYmxlJyBhbmQgb2RkIHN0dWZmIGlzIGhhcHBlbmluZyBhcm91bmQg dGhlCjs7IHJlZ2V4cCBhbmQgdGhlIHN5bnRheCB0YWJsZSB0aG91Z2ggdGhpcyBzZWVtcyBvZGQg YXMgYConIGlzIGEgc3ltYm9sCjs7IGNvbnN0aXR1ZW50LgoKOzsgRm9sbG93aW5nIGJpdCBvZiBj b2RlIHByb3ZpZGVzIGFuIGV4YW1wbGUgaWxsdXN0cmF0aW5nIHRoZSBwcm9ibGVtOgoKOzs7ID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKGRlZnZhciBjaGVjay14cmVmLXZhci1uby1z dGFyICd4cmVmZC1pbi1kb2NzdHJpbmdzCiAgIkEgdGVzdCBmb3IgeHJlZidpbmcgbm9uLXN0YXIg cHJlZml4ZWQgdmFyaWFibGVzIGluIGRvY3N0cmluZ3MuXG4KTm9uLXN0YXIgcHJlZml4ZWQgdmFy aWFibGVzIGhhdmUgdGhlIGZvcm06XG4KIDxTT01FLVZBUi1OQU1FPlxuClRoZXNlIGFwcGVhciB3 aXRoIHhyZWZzIGluIGRvY3N0cmluZ3Mgd2hlbiBwcmVjZWRlZCBieSBlaXRoZXIgb2YgdGhlIGZv bGxvd2luZwp0d28gdG9rZW5zOlxuCiB7IHZhcmlhYmxlIHwgb3B0aW9uIH1cbgp3aGVyZSB0aGUg dmFyaWFibGVzIHN5bWJvbC1uYW1lIGlzIGVuY2xvc2VkIHdpdGggYSBwcmVjZWRpbmcgZ3JhdmUg Y2hhciBgClwoQVNDSUkgOTZcKSwgYW5kIGZvbGxvd2VkIGJ5IGFuIGFwb3N0cm9waGUgY2hhciAn IChBU0NJSSAzOSkgZS5nLjpcbgogdmFyaWFibGUgYDxTT01FLVZBUi1OQU1FPicKIG9wdGlvbiBg PFNPTUUtVkFSLU5BTUU+J1xuClRoaXMgaXMgYXMgY29udHJhc3RlZCB3aXRoIHN0YXIgcHJlZml4 ZWQgdmFyaWFibGVzIHdoaWNoIGhhdmUgdGhlIGZvcm06XG4KICo8U09NRS1WQVItTkFNRT4qXG4K YW5kIGRvIG5vdCBhcHBlYXIgd2l0aCB4cmVmcyBpbiBkb2NzdHJpbmdzLlxuCkZvciBleGFtcGxl LCB0aGlzIHZhcmlhYmxlIGAqY2hlY2steHJlZi12YXItdy1zdGFyKicgaXMgbm90IHhyZWYnZC4K TmVpdGhlciBpcyBpdCB4cmVmJ2QgYXMgYW4gb3B0aW9uIGAqY2hlY2steHJlZi12YXItdy1zdGFy KicuCkhvd2V2ZXIsIHRoZSBjdXJyZW50IHZhcmlhYmxlIGBjaGVjay14cmVmLXZhci1uby1zdGFy JyBpcyB4cmVmJ2QuCkxpa2V3aXNlLCBpdCBpcyBhbHNvIHhyZWYnZCBhcyB0aGUgb3B0aW9uIGBj aGVjay14cmVmLXZhci1uby1zdGFyJy4iKQoKKGRlZnZhciAqY2hlY2steHJlZi12YXItdy1zdGFy KiAnbm90LXhyZWZkLWluLWRvY3N0cmluZ3MKICAiQSB0ZXN0IGZvciB4cmVmJ2luZyBzdGFyIHBy ZWZpeGVkIHZhcmlhYmxlcyBpbiBkb2NzdHJpbmdzLlxuClN0YXIgcHJlZml4ZWQgdmFyaWFibGVz IGhhdmUgdGhlIGZvcm06XG4KICo8U09NRS1WQVItTkFNRT4qXG4KdGhlc2UgZG8gbm90IGFwcGVh ciB3aXRoIHhyZWZzIGluIGRvY3N0cmluZ3MuXG4KVGhpcyBpcyBhcyBjb250cmFzdGVkIHdpdGgg bm9uLXN0YXIgcHJlZml4ZWQgdmFyaWFibGVzIHdoaWNoIGhhdmUgdGhlIGZvcm06XG4KICA8U09N RS1WQVItTkFNRT5cbgphbmQgd2hpY2ggZG8gYXBwZWFyIGluIHhyZWYnZCBpbiBkb2NzdHJpbmdz IHdoZW4gcHJlY2VkZWQgYnkgZWl0aGVyIG9mIHRoZQpmb2xsd2luZyB0d28gdG9rZW5zOlxuCiB7 IHZhcmlhYmxlIHwgb3B0aW9uIH1cbgp3aGVyZSB0aGUgc3ltYm9sZS1uYW1lIG9mIHRoZSB2YXJp YWJsZSBpcyBlbmNsb3NlZCB3aXRoIGEgcHJlY2VkaW5nIGdyYXZlIGNoYXIgYApcKEFTQ0lJIDk2 XCkgYW5kIGZvbGxvd2VkIGJ5IGFuIGFwb3N0cm9waGUgY2hhciAnIChBU0NJSSAzOSkgZS5nLjpc bgogdmFyaWFibGUgYDxTT01FLVZBUi1OQU1FPicKIG9wdGlvbiBgPFNPTUUtVkFSLU5BTUU+J1xu CkZvciBleGFtcGxlLCB0aGlzIHZhcmlhYmxlIGBjaGVjay14cmVmLXZhci1uby1zdGFyJyBpcyB4 cmVmJ2QuCkxpa2V3aXNlLCB0aGUgb3B0aW9uIGBjaGVjay14cmVmLXZhci1uby1zdGFyJyBpcyBh bHNvIHhyZWYnZC4KV2hlcmVhcywgdGhlIHZhcmlhYmxlIGAqY2hlY2steHJlZi12YXItdy1zdGFy KicgaXMgbm90IHhyZWYnZC4KTmVpdGhlciBpcyBpdCB4cmVmJ2QgYXMgb3B0aW9uIGAqY2hlY2st eHJlZi12YXItdy1zdGFyKicuIikKCihkZWZ1biBjaGVjay14cmVmLXRlc3QtZnVuY3Rpb24gKCkK ICAiVGhpcyBpcyBhIGRvY3N0cmluZyB3aGljaCB0ZXN0cyB4cmVmJ2luZyBvZiB0d28gZGlmZmVy ZW50bHkgbmFtZWQgdmFyaWFibGVzLlxuClRoZSBjdXJyZW50IGZ1bmN0aW9ucyBkb2NzdHJpbmcg aWxsdXN0cmF0ZXMgdGhlIHByb2JsZW0uXG4KVGhpcyBzeW1ib2wtbmFtZSB3aWxsIGJlIHhyZWYn ZCBhcyB2YXJpYWJsZSBgY2hlY2steHJlZi12YXItbm8tc3RhcicuXG4KSXQgd2lsbCBhbHNvIGJl IHhyZWYnZCBhcyBvcHRpb24gYGNoZWNrLXhyZWYtdmFyLW5vLXN0YXInLlxuCldoZXJlYXMgZm9s bG93aW5nIHN5bWJvbC1uYW1lIGlzIG5vdCB4cmVmJ2QgYXMgdmFyaWFibGUgYCpjaGVjay14cmVm LXZhci13LXN0YXIqJywKbm9yIGlzIGl0IHhyZWYnZCBhcyBvcHRpb24gYCpjaGVjay14cmVmLXZh ci13LXN0YXIqJy5cbgpUaGlzIGJlaGF2aW91ciBjb25zdGl0dXRlcyBhIGJ1Zy4gRm9yIGFkZGl0 aW9uYWwgZGV0YWlsZWQgaWxsdXN0cmF0aW9uIG9mIHRoZQpwcm9ibGVtIHNlZSByZXR1cm4gdmFs dWUgb2YgYGNoZWNrLXhyZWZzLXctaGVscC12YXJpYWJsZS1kZWYnLiIKICAoZGVzY3JpYmUtZnVu Y3Rpb24gJ2NoZWNrLXhyZWYtdGVzdC1mdW5jdGlvbikpCgooZGVmdW4gY2hlY2steHJlZnMtdy1o ZWxwLXZhcmlhYmxlLWRlZiAoJm9wdGlvbmFsIHctdGVzdC1mbmNuIGNudC12YXItbmFtZSkKICAi RmluZCBoZWxwLXZhcmlhYmxlLWJ1dHRvbiB0ZXh0LXByb3BlcnR5IHZhbHVlcyBpbiAqSGVscCog YnVmZmVyLlxuClJldHVybiBhIGxpc3Qgb2YgdGV4dC1wcm9wZXJ0aWVzIGFuZCBidWZmZXIgbG9j YXRpb25zIHdoZW4gYnVmZmVyIGhhcwphIGBjYXRlZ29yeWAgdGV4dC1wcm9wZXJ0eSB3aXRoIGEg cHJvcCB2YWx1ZSBgaGVscC12YXJpYWJsZS1idXR0b25gLlxuCkxpc3QgY29udGFpbnMgYSBjb3Vu dCBvZiB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBwcm9wZXJ0eSBgaGVscC12YXJpYWJsZS1idXR0 b25gCmFwcGVhcnMgYWxvbmcgd2l0aCB0aGUgY291bnQgb2YgdGhlIG51bWJlciBvZiB0aW1lcyBh IHZhcmlhYmxlIG5hbWUgYXBwZWFycyBpbgp0aGUgZG9jdW1lbnRhdGlvbi5cbgpXaGVuIFctVEVT VC1GTkNOIGlzIG5vbi1uaWwgaXQgaXMgYSBzeW1vbCBuYW1pbmcgYSBkb2N1bWVudGVkIGZ1bmN0 aW9uLgpEZWZhdWx0IGlzIGBjaGVjay14cmVmLXRlc3QtZnVuY3Rpb24nLlxuCldoZW4gQ05ULVZB Ui1OQU1FIGlzIG5vbi1uaWwgY291bnQgdGhlIG51bWJlciBvZiB0aW1lcyBzeW1ib2wtbmFtZSBt YXRjaGVzIHRoZQpyZWdleHAgXCJgPENOVC1WQVItTkFNRT4nXCIuIApEZWZhdWx0IGlzIHRvIGNv dW50IG1hdGNoZXMgZm9yIHRoZSBzeW1ib2wgYCpjaGVjay14cmVmLXZhci13LXN0YXIqJy5cbgpC ZWZvcmUgcmV0dXJuaW5nIHBvcHMtdG8tYnVmZmVyIG5hbWVkIFwiKkhlbHAqXCIgYW5kIHRoZW4g dG8gYnVmZmVyIG5hbWVkClwiKkNIRUNLLVhSRUZTLVctSEVMUC1WQVJJQUJMRS1ERUYqXCIuXG4K OkVYQU1QTEVcblxuXChjaGVjay14cmVmcy13LWhlbHAtdmFyaWFibGUtZGVmXClcbgpcKGNoZWNr LXhyZWZzLXctaGVscC12YXJpYWJsZS1kZWYgJ2hlbHAtbWFrZS14cmVmcyAnaGVscC1mb3J3YXJk LWxhYmVsXClcbgpcKGNoZWNrLXhyZWZzLXctaGVscC12YXJpYWJsZS1kZWYgJ2hlbHAtbWFrZS14 cmVmcyAnaGVscC14cmVmLXN5bWJvbC1yZWdleHBcKVxuIgogIChsZXQgKChndGhyLXByb3BzKQog ICAgICAgIChndGhybmcgdCkpCiAgICAoaWYgdy10ZXN0LWZuY24gCiAgICAgICAgKGRlc2NyaWJl LWZ1bmN0aW9uIHctdGVzdC1mbmNuKQogICAgICAoY2hlY2steHJlZi10ZXN0LWZ1bmN0aW9uKSkK ICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyCiAgICAgICAgKGdldC1idWZmZXIgIipIZWxwKiIpCiAg ICAgIChnb3RvLWNoYXIgKGJ1ZmZlci1lbmQgMCkpCiAgICAgICh3aGlsZSBndGhybmcKICAgICAg ICAod2hlbiAoZXEgKHBvaW50KSAoYnVmZmVyLWVuZCAwKSkKICAgICAgICAgIChnb3RvLWNoYXIg KG5leHQtc2luZ2xlLXByb3BlcnR5LWNoYW5nZSAocG9pbnQpICdidXR0b24pKSkKICAgICAgICAo dW5sZXNzIChudWxsICh0ZXh0LXByb3BlcnRpZXMtYXQgKHBvaW50KSkpCiAgICAgICAgICAobGV0 KiAoKHByb3BzLWhlcmUgKHRleHQtcHJvcGVydGllcy1hdCAocG9pbnQpKSkKICAgICAgICAgICAg ICAgICAoY2hrLWh2YiAocGxpc3QtZ2V0IHByb3BzLWhlcmUgJ2NhdGVnb3J5KSkpCiAgICAgICAg ICAgICh3aGVuIChlcXVhbCAoc3ltYm9sLW5hbWUgY2hrLWh2YikgImhlbHAtdmFyaWFibGUtYnV0 dG9uIikKICAgICAgICAgICAgICAocHVzaCBgKDpidXR0b24tZm91bmQtYXQgLChwb2ludCkgOnct cHJvcHMgLHByb3BzLWhlcmUpIGd0aHItcHJvcHMpKQogICAgICAgICAgICAoaWYgKGVxIChuZXh0 LWNoYXItcHJvcGVydHktY2hhbmdlIChwb2ludCkpIChwb2ludCkpCiAgICAgICAgICAgICAgICAo c2V0cSBndGhybmcpCiAgICAgICAgICAgICAgKHByb2duIChnb3RvLWNoYXIgKG5leHQtY2hhci1w cm9wZXJ0eS1jaGFuZ2UgKHBvaW50KSkpCiAgICAgICAgICAgICAgICAgICAgIChpZiAoZXEgKG5l eHQtY2hhci1wcm9wZXJ0eS1jaGFuZ2UgKHBvaW50KSkgKHBvaW50KSkKICAgICAgICAgICAgICAg ICAgICAgICAgIChzZXRxIGd0aHJuZykKICAgICAgICAgICAgICAgICAgICAgICAobGV0ICgoY2hr LW54dCAobmV4dC1zaW5nbGUtcHJvcGVydHktY2hhbmdlIChwb2ludCkgJ2J1dHRvbikpKQogICAg ICAgICAgICAgICAgICAgICAgICAgKGlmIGNoay1ueHQKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoZ290by1jaGFyIChuZXh0LXNpbmdsZS1wcm9wZXJ0eS1jaGFuZ2UgKHBvaW50KSAnYnV0 dG9uKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNldHEgZ3Rocm5nKSkpKSkpKSkpCiAg ICAgICh3aGVuIGd0aHItcHJvcHMgKHNldHEgZ3Roci1wcm9wcyAobnJldmVyc2UgZ3Roci1wcm9w cykpKQogICAgICAobGV0ICgoY250LWZuZCAwKSkKICAgICAgICAoZG9saXN0IChiZmEgZ3Roci1w cm9wcwogICAgICAgICAgICAgICAgICAgICAod2hlbiAoPiBjbnQtZm5kIDApCiAgICAgICAgICAg ICAgICAgICAgICAgKHNldHEgZ3Roci1wcm9wcwogICAgICAgICAgICAgICAgICAgICAgICAgICAg IChuY29uYyBgKDpoZWxwLXZhci1idG4tZm5kLW4tdG1zICxjbnQtZm5kKSBndGhyLXByb3BzKSkp KQogICAgICAgICAgKHdoZW4gKGVxdWFsIChzeW1ib2wtbmFtZSAocGxpc3QtZ2V0IChwbGlzdC1n ZXQgYmZhIDp3LXByb3BzKSAnY2F0ZWdvcnkpKSAKICAgICAgICAgICAgICAgICAgICAgICAiaGVs cC12YXJpYWJsZS1idXR0b24iKQogICAgICAgICAgICAoaW5jZiBjbnQtZm5kKSkpCiAgICAgICAg KGdvdG8tY2hhciAoYnVmZmVyLWVuZCAwKSkKICAgICAgICAoc2V0cSBjbnQtZm5kIDApCiAgICAg ICAgKGxldCogKChjaGstc3Rhci1zeW0gKG9yIGNudC12YXItbmFtZSAnKmNoZWNrLXhyZWYtdmFy LXctc3RhciopKQogICAgICAgICAgICAgICAoY2hrLXN0YXItc3RyIChmb3JtYXQgImBcJXNcJyIg Y2hrLXN0YXItc3ltKSkpCiAgICAgICAgICAod2hpbGUgKHNlYXJjaC1mb3J3YXJkLXJlZ2V4cCBj aGstc3Rhci1zdHIgbmlsIHQpCiAgICAgICAgICAgIChpbmNmIGNudC1mbmQpKQogICAgICAgICAg KGlmICg+IGNudC1mbmQgMCkKICAgICAgICAgICAgICAocHJvZ24KICAgICAgICAgICAgICAgIChz ZXRxIGd0aHJuZyAwKQogICAgICAgICAgICAgICAgKGRvbGlzdCAoYmZhIChpZiAoZXEgKGNhciBn dGhyLXByb3BzKSA6aGVscC12YXItYnRuLWZuZC1uLXRtcykgCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChjZGRyIGd0aHItcHJvcHMpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBndGhyLXByb3BzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0aHJuZykKICAg ICAgICAgICAgICAgICAgKHdoZW4gKGVxdWFsIChzeW1ib2wtbmFtZSAoY2FyIChwbGlzdC1nZXQg KHBsaXN0LWdldCBiZmEgOnctcHJvcHMpICdoZWxwLWFyZ3MpKSkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChzeW1ib2wtbmFtZSBjaGstc3Rhci1zeW0pKQogICAgICAgICAgICAgICAg ICAgIChpbmNmIGd0aHJuZykpKQogICAgICAgICAgICAgICAgKHNldHEgZ3Roci1wcm9wcyAobmNv bmMgYCg6aGVscC12YXItc3Rhci1zZWVuLW4tdG1zICxjbnQtZm5kIAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA6aGVscC12YXItc3Rhci1zZWVuLW4tdG1zICxndGhy bmcpIGd0aHItcHJvcHMpKSkKICAgICAgICAgICAgKHNldHEgZ3Roci1wcm9wcyAobmNvbmMgJyg6 aGVscC12YXItc3Rhci1zZWVuLW4tdG1zIDAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOmhlbHAtdmFyLXN0YXItc2Vlbi1uLXRtcyAwKSBndGhyLXByb3BzKSkpKSkpCiAg ICAobGV0ICgocHAtcnRuLWJmciAiKkNIRUNLLVhSRUZTLVctSEVMUC1WQVJJQUJMRS1ERUYqIikp CiAgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIChnZXQtYnVmZmVyLWNyZWF0ZSBwcC1ydG4tYmZy KQogICAgICAgIChlcmFzZS1idWZmZXIpKQogICAgICAocHAtZGlzcGxheS1leHByZXNzaW9uIChp ZGVudGl0eSBndGhyLXByb3BzKSBwcC1ydG4tYmZyKQogICAgICAocG9wLXRvLWJ1ZmZlciAiKkhl bHAqIiB0KQogICAgICAocG9wLXRvLWJ1ZmZlciBwcC1ydG4tYmZyIHQpKQogICAgZ3Roci1wcm9w cykpCgo7OyA6Q0xFQU5VUAo7OyAoZG9saXN0ICh1bmludCAnKGNoZWNrLXhyZWYtdmFyLW5vLXN0 YXIKOzsgICAgICAgICAgICAgICAgICAqY2hlY2steHJlZi12YXItdy1zdGFyKgo7OyAgICAgICAg ICAgICAgICAgIGNoZWNrLXhyZWYtdGVzdC1mdW5jdGlvbgo7OyAgICAgICAgICAgICAgICAgIGNo ZWNrLXhyZWZzLXctaGVscC12YXJpYWJsZS1kZWYpKQo7OyAgIChtZXNzYWdlICJUaGUgY2hlY2st eHJlZiBmbmNucyBhbmQgdmFycyB3ZXJlIHVuaW50ZXJuZWQiKSkKOzs7ID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQo= --000e0cd56fa67deea5048afe2b05--