From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: David Fussner via "Bug reports for GNU Emacs, the Swiss army knife of text editors" Newsgroups: gmane.emacs.bugs Subject: bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers Date: Wed, 5 Jun 2024 10:46:10 +0100 Message-ID: References: <2c5c8afa-b57e-3156-d21c-5523cacb4d87@yandex.ru> <831qf1mgjl.fsf@gnu.org> <87cyyj9rpp.fsf@gnu.org> <65793.1694843596@localhost> <83ba27b7-4d28-4a3f-b803-4bc49f62986c@yandex.ru> <82993b86-0f34-4adb-a392-c74db5176d14@yandex.ru> <86v832z5lp.fsf@gnu.org> Reply-To: David Fussner Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="000000000000d8a2b5061a216eeb" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="12559"; mail-complaints-to="usenet@ciao.gmane.io" Cc: 53749@debbugs.gnu.org, ikumi@ikumi.que.jp, tsdh@gnu.org, arash@gnu.org, stefankangas@gmail.com, dgutov@yandex.ru, Stefan Monnier To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Wed Jun 05 11:48:18 2024 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1sEnFi-0002wp-5o for geb-bug-gnu-emacs@m.gmane-mx.org; Wed, 05 Jun 2024 11:48:18 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sEnFH-0005ev-4H; Wed, 05 Jun 2024 05:47:51 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sEnFE-0005eH-Lu for bug-gnu-emacs@gnu.org; Wed, 05 Jun 2024 05:47:48 -0400 Original-Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1sEnFE-0000Y1-AM for bug-gnu-emacs@gnu.org; Wed, 05 Jun 2024 05:47:48 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1sEnFS-0001jx-6O for bug-gnu-emacs@gnu.org; Wed, 05 Jun 2024 05:48:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: David Fussner Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 05 Jun 2024 09:48:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 53749 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: pending patch Original-Received: via spool by 53749-submit@debbugs.gnu.org id=B53749.17175808416593 (code B ref 53749); Wed, 05 Jun 2024 09:48:02 +0000 Original-Received: (at 53749) by debbugs.gnu.org; 5 Jun 2024 09:47:21 +0000 Original-Received: from localhost ([127.0.0.1]:47240 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1sEnEl-0001i9-36 for submit@debbugs.gnu.org; Wed, 05 Jun 2024 05:47:21 -0400 Original-Received: from mail-pj1-f44.google.com ([209.85.216.44]:52673) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1sEnEi-0001hl-4a for 53749@debbugs.gnu.org; Wed, 05 Jun 2024 05:47:18 -0400 Original-Received: by mail-pj1-f44.google.com with SMTP id 98e67ed59e1d1-2c1b9152848so4569378a91.1 for <53749@debbugs.gnu.org>; Wed, 05 Jun 2024 02:47:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=20230601; t=1717580756; x=1718185556; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=6xcB4dDywNWqrmS9WwCGbBnodSdryJgU1FXuZ1VjoVw=; b=jYS1sggxtwZ4iYRP04QFezIcng2kU17bR81dPf9Asd2uT9pW/pu+HWf1UATy7geXTE MQJ7qZNQpooaEiL+haOfs+ZGbQEZwi8wfUfzFRwyi1CPfg1Hf320Cpo6r8D1tiWo/fLy a4eyF5w4I0xMsuLRVcW3akhyl/mBRE3/Z4Sy7IVn4/DphOSCjxoGaXzVQ0w+A8m5VdTL yNjGNAlJKIpHbnSUfV3+7WedOSWL9ELthR+Wuo3Q1DATLVmwhzh329MRiMk+kGK4BjWd 6LT9EnKKMTp9DUl93YAs/VFsojVOyLyHCkHcV3rUTKQAvLgm8jnJJHfRMOv1CpUIezT6 GB2g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1717580756; x=1718185556; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=6xcB4dDywNWqrmS9WwCGbBnodSdryJgU1FXuZ1VjoVw=; b=jein2bfNyvalg2ijotgOklgqLYnktEz9kUHtd4v1CN7FQDBDNMhpZoiZ5N2cpiur6d 8qqKK1t3EIPZGShagUXN0cu0ptMc323ND6k4SHn+65OtW72o1r8qrmKh+yQjmPf/ZAi8 TNi/tH5DgnD6rqdfLxjWidhrxT2ECdhR0118IcXM+vh7KpdXKUslDOS8BtKgnf+BA3tM TcyqNzB3e/m1iyQNj4lMild+NEGTtyKfcysFNBSR/LTX0qY89CJjd7pPrw6spa5MY6LU /UUw8n+tpb5zgO5+F9HjLIwS7CxPwP53a7M0VsJ9945vVZDxUwpxCEScRK4u3YC3oU1C uCvA== X-Forwarded-Encrypted: i=1; AJvYcCUjZBWrmFUFjDuVUS/AnLT8z8bH50dbotH1Ab96z5u1TMV2raDfMK27dBG2cTQuI0KyHAE/UIYGvgsvYsfvouZmgkLKEXo= X-Gm-Message-State: AOJu0YxA+XVu6Icy8v88LMJaU2D4Fliv8hhGyrxfOoaeMe4EGrXgDvdg B1g2TpdCyqx+BhcqY1bgnOlIrUjpGKg5nrojNKquiYFd2hH43HqzBmvAkSF5iMdMpgbW3M3DptL PmU3QOZcffrL0R2ufSjB+LGqgk78= X-Google-Smtp-Source: AGHT+IFZceVh8OD+9IzXkXCctIiPolst2kEpfgubEiHhGScC/KO8tIaAVofFkvDybiCArA+sJDNSkiImfogFtaD32wk= X-Received: by 2002:a17:90b:1018:b0:2c1:a052:d6b4 with SMTP id 98e67ed59e1d1-2c27db1fc28mr1868853a91.27.1717580756180; Wed, 05 Jun 2024 02:45:56 -0700 (PDT) In-Reply-To: <86v832z5lp.fsf@gnu.org> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list 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-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:286586 Archived-At: --000000000000d8a2b5061a216eeb Content-Type: text/plain; charset="UTF-8" Hi Eli, Stefan, and Dmitry, In case the changeset might prove acceptable for version 30, I attach the latest patch, which clears out the code I was using to simplify testing of the AUCTeX modes. I can if requested send a patch for the manual etags tests, also, in case that might prove helpful down the line. Best, David. On Sat, 25 May 2024 at 12:01, Eli Zaretskii wrote: > > How should we proceed about this bug report? Is David's last > changeset acceptable or isn't it? > > > From: Stefan Monnier > > Cc: 53749@debbugs.gnu.org, Ikumi Keita , David Fussner > > , Arash Esbati , > > stefankangas@gmail.com, Tassilo Horn , Eli Zaretskii > > > > Date: Sun, 19 May 2024 22:38:45 -0400 > > > > >> Hmm... not sure it's worth the trouble, then. > > >> Also, it might be worth trying to see where those 4-10% are spent: this > > >> is done in a temp buffer where there should presumably be very little > > >> need for before/after-change-functions, so maybe we can get rid of the > > >> specific offenders rather than inhibit all modification hooks. > > > Given the relatively low percentages, it might be difficult to glance from > > > a profiler report. I was assuming the time was mostly spent in > > > syntax-ppss-flush-cache, but the function is pretty simple. > > > > Rather than a profiler report, maybe a better approach would be to > > remove things from the non-inhibited-modification-hooks paths and see > > how/if they change the performance. > > E.g. replace the `inhibit-modification-hooks` binding by one that binds > > `before/after-change-functions` to nil. > > > > >> I wonder what we do during those 20% of the time if the buffer is left > > >> in fundamental-mode. > > > Good question. > > > > It's probably the better case to investigate since it might be easier to > > see the effects. > > > > >>>> Also, what about the other two bindings of `inhibit-modification-hooks`? > > >>> The other two are used while the contents of the Xref buffer are printed (or > > >>> re-printed), so there's none of the syntax-ppss complications there. The > > >>> performance difference is 8.5% in my last measurement. > > >> Is this 8.5% of a function that's fast anyway of 8.5% of a function > > >> which takes a fair bit of time? > > > When there are a lot of matches, it can take some time. Note that 100% in > > > this case is the whole list-files-do-search-print-results pipeline, not just > > > the printing phase. So printing is sped up by more than 8% (my last test > > > says it's by 27%). > > > > I guess during printing if it's done in many small steps we may indeed > > run modification hooks many times, so that could explain the > > higher percentage. > > > > It still seems hard to justify 27% since those modification hooks should > > usually do nothing, AFAICT. Maybe there's something silly going on. > > > > > > Stefan > > > > --000000000000d8a2b5061a216eeb Content-Type: text/x-patch; charset="US-ASCII"; name="0004-Provide-a-modified-xref-backend-for-TeX-buffers.patch" Content-Disposition: attachment; filename="0004-Provide-a-modified-xref-backend-for-TeX-buffers.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lx1n84cf0 RnJvbSBkMjk2MTI2ZjM2YWFiY2FhMzBlNDMxNDBkMWM5YjdjMGUyOTEyMzUzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBGdXNzbmVyIDxkZnVzc25lckBnb29nbGVtYWlsLmNv bT4KRGF0ZTogV2VkLCA1IEp1biAyMDI0IDEwOjI2OjE4ICswMTAwClN1YmplY3Q6IFtQQVRDSF0g UHJvdmlkZSBhIG1vZGlmaWVkIHhyZWYgYmFja2VuZCBmb3IgVGVYIGJ1ZmZlcnMKCiogbGliLXNy Yy9ldGFncy5jIChUZVhfY29tbWFuZHMpOiBJbXByb3ZlIHBhcnNpbmcgb2YgY29tbWFuZHMgaW4g VGVYCmJ1ZmZlcnMuCihURVhfZGVmZW52KTogRXhwYW5kIGxpc3Qgb2YgY29tbWFuZHMgdG8gdGFn IGJ5IGRlZmF1bHQgaW4gVGVYCmJ1ZmZlcnMuCihUZVhfaGVscCk6CiogZG9jL2VtYWNzL21haW50 YWluaW5nLnRleGkgKFRhZyBTeW50YXgpOiBEb2N1bWVudCBuZXcgdGFnZ2VkCmNvbW1hbmRzLgoo SWRlbnRpZmllciBTZWFyY2gpOiBBZGQgbm90ZSBhYm91dCBzZW1hbnRpYy1zeW1yZWYtZmlsZXBh dHRlcm4tYWxpc3QsCmF1dG8tbW9kZS1hbGlzdCwgYW5kIHhyZWYtZmluZC1yZWZlcmVuY2VzLgoK KiBsaXNwL3RleHRtb2Rlcy90ZXgtbW9kZS5lbCAodGV4LWZvbnQtbG9jay1zdXNjcmlwdCk6IFRl c3QgZm9yCnVuZGVyc2NvcmUgaW4gZXhwbDMgZmlsZXMgYW5kIHJlZ2lvbnMsIGRpc2FibGUgc3Vi c2NyaXB0IGZhY2UgdGhlcmUuCih0ZXgtY29tbW9uLWluaXRpYWxpemF0aW9uKTogU2V0IHVwIHhy ZWYgYmFja2VuZCBmb3IgaW4tdHJlZSBUZVgKbW9kZXMuIERldGVjdCBleHBsMyBmaWxlcywgYW5k IGluIG90aGVycyBzZXQgdXAgYSBsaXN0IG9mIGV4cGwzCnJlZ2lvbnMuCih0ZXgtZXhwbC1idWZm ZXItcGFyc2UpOiBOZXcgZnVuY3Rpb24gY2FsbGVkIGluIHByZXZpb3VzLgoodGV4LWV4cGwtYnVm ZmVyLXApOiBOZXcgdmFyIHRvIGhvbGQgdGhlIHJlc3VsdCBvZiBwcmV2aW91cy4KKHRleC1leHBs LXJlZ2lvbi1zZXQpOiBOZXcgZnVuY3Rpb24gYWRkZWQgdG8KJ3N5bnRheC1wcm9wZXJ0aXplLWV4 dGVuZC1yZWdpb24tZnVuY3Rpb25zJyBob29rLgoodGV4LWV4cGwtcmVnaW9uLWxpc3QpOiBOZXcg dmFyIHRvIGhvbGQgdGhlIHJlc3VsdCBvZiBwcmV2aW91cy4KKHRleC0teHJlZi1iYWNrZW5kKTog TmV3IGZ1bmN0aW9uIHRvIGlkZW50aWZ5IHRoZSB4cmVmIGJhY2tlbmQuCih0ZXgtLXRoaW5nLWF0 LXBvaW50LCB0ZXgtdGhpbmdhdHB0LS1iZWdpbm5pbmctb2Ytc3ltYm9sKQoodGV4LXRoaW5nYXRw dC0tZW5kLW9mLXN5bWJvbCwgdGV4LS1ib3VuZHMtb2Ytc3ltYm9sLWF0LXBvaW50KToKTmV3IGZ1 bmN0aW9ucyB0byByZXR1cm4gJ3RoaW5nLWF0LXBvaW50JyBmb3IgeHJlZiBiYWNrZW5kLgoodGV4 LXRoaW5nYXRwdC1leGNsdWRlLWNoYXJzKTogTmV3IHZhciB0byBkbyB0aGUgc2FtZS4KKHhyZWYt YmFja2VuZC1pZGVudGlmaWVyLWF0LXBvaW50KTogTmV3IFRlWCBiYWNrZW5kIG1ldGhvZCB0byBw cm92aWRlCnN5bWJvbHMgZm9yIHByb2Nlc3NpbmcgYnkgeHJlZi4KKHhyZWYtYmFja2VuZC1pZGVu dGlmaWVyLWNvbXBsZXRpb24tdGFibGUpCih4cmVmLWJhY2tlbmQtaWRlbnRpZmllci1jb21wbGV0 aW9uLWlnbm9yZS1jYXNlKQooeHJlZi1iYWNrZW5kLWRlZmluaXRpb25zLCB4cmVmLWJhY2tlbmQt YXByb3Bvcyk6IFBsYWNlaG9sZGVycyB0bwpjYWxsIHRoZSBzdGFuZGFyZCAnZXRhZ3MnIHhyZWYg YmFja2VuZCBtZXRob2RzLgooeHJlZi1iYWNrZW5kLXJlZmVyZW5jZXMpOiBXcmFwcGVyIHRvIGNh bGwgdGhlIGRlZmF1bHQgeHJlZiBiYWNrZW5kCm1ldGhvZCwgZmluZGluZyBhcyBtYW55IHJlbGV2 YW50IGZpbGVzIGFzIHBvc3NpYmxlIGFuZCB1c2luZyBhIGJlc3Bva2UKc3ludGF4LXByb3BlcnRp emUtZnVuY3Rpb24gd2hlbiByZXF1aXJlZC4KKHRleC0tY29sbGVjdC1maWxlLWV4dGVuc2lvbnMs IHRleC14cmVmLXN5bnRheC1mdW5jdGlvbik6IEhlbHBlcgpmdW5jdGlvbnMgZm9yIHByZXZpb3Vz LgoodGV4LWZpbmQtcmVmZXJlbmNlcy1zeW50YXgtdGFibGUsIHRleC0tYnVmZmVycy1saXN0KQoo dGV4LS14cmVmLXN5bnRheC1mdW4sIHRleC0tb2xkLXN5bnRheC1mdW5jdGlvbik6IE5ldyB2YXJz IGZvciBzYW1lLgotLS0KIGRvYy9lbWFjcy9tYWludGFpbmluZy50ZXhpIHwgIDM5ICsrKy0KIGxp Yi1zcmMvZXRhZ3MuYyAgICAgICAgICAgIHwgMTkxICsrKysrKysrKysrKysrKysrKy0tCiBsaXNw L3RleHRtb2Rlcy90ZXgtbW9kZS5lbCB8IDM1OCArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKystCiAzIGZpbGVzIGNoYW5nZWQsIDU2NyBpbnNlcnRpb25zKCspLCAyMSBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9kb2MvZW1hY3MvbWFpbnRhaW5pbmcudGV4aSBiL2RvYy9lbWFj cy9tYWludGFpbmluZy50ZXhpCmluZGV4IDU3OTA5OGM4MWIxLi5hMDY0MTAzYWEyNSAxMDA2NDQK LS0tIGEvZG9jL2VtYWNzL21haW50YWluaW5nLnRleGkKKysrIGIvZG9jL2VtYWNzL21haW50YWlu aW5nLnRleGkKQEAgLTI1MjksNiArMjUyOSwxNSBAQCBJZGVudGlmaWVyIFNlYXJjaAogcmVmZXJl bmNlZC4gIFRoZSBYUkVGIG1vZGUgY29tbWFuZHMgYXJlIGF2YWlsYWJsZSBpbiB0aGlzIGJ1ZmZl ciwgc2VlCiBAcmVme1hyZWYgQ29tbWFuZHN9LgogCitXaGVuIGludm9rZWQgaW4gYSBidWZmZXIg d2hvc2UgbWFqb3IgbW9kZSB1c2VzIHRoZSBAY29kZXtldGFnc30gYmFja2VuZCwKK0BrYmR7TS0/ fSBzZWFyY2hlcyBmaWxlcyBhbmQgYnVmZmVycyB3aG9zZSBtYWpvciBtb2RlIG1hdGNoZXMgdGhh dCBvZgordGhlIG9yaWdpbmFsIGJ1ZmZlci4gIEl0IGd1ZXNzZXMgdGhhdCBtb2RlIGZyb20gZmls ZSBleHRlbnNpb25zLCBzbyBpZgorQGtiZHtNLT99IHNlZW1zIHRvIGJlIHNraXBwaW5nIHJlbGV2 YW50IGJ1ZmZlcnMgb3IgZmlsZXMsIHRyeQorY3VzdG9taXppbmcgZWl0aGVyIHRoZSB2YXJpYWJs ZSBAY29kZXtzZW1hbnRpYy1zeW1yZWYtZmlsZXBhdHRlcm4tYWxpc3R9CisoaWYgeW91ciBidWZm ZXIncyBtYWpvciBtb2RlIGFscmVhZHkgaGFzIGFuIGVudHJ5IGluIGl0KSwgb3IKK0Bjb2Rle2F1 dG8tbW9kZS1hbGlzdH0gKGlmIG5vdCksIHRoZXJlYnkgaW5mb3JtaW5nIEBjb2Rle3hyZWZ9IG9m IHRoZQorbWlzc2luZyBleHRlbnNpb25zIChAcHhyZWZ7Q2hvb3NpbmcgTW9kZXN9KS4KKwogQHZp bmRleCB4cmVmLWF1dG8tanVtcC10by1maXJzdC14cmVmCiAgIElmIHRoZSB2YWx1ZSBvZiB0aGUg dmFyaWFibGUgQGNvZGV7eHJlZi1hdXRvLWp1bXAtdG8tZmlyc3QteHJlZn0gaXMKIEBjb2Rle3R9 LCBAY29kZXt4cmVmLWZpbmQtcmVmZXJlbmNlc30gYXV0b21hdGljYWxseSBqdW1wcyB0byB0aGUg Zmlyc3QKQEAgLTI3NDcsMTAgKzI3NTYsMzIgQEAgVGFnIFN5bnRheAogQGl0ZW0KIEluIEBMYVRl WHt9IGRvY3VtZW50cywgdGhlIGFyZ3VtZW50cyBmb3IgQGNvZGV7XGNoYXB0ZXJ9LAogQGNvZGV7 XHNlY3Rpb259LCBAY29kZXtcc3Vic2VjdGlvbn0sIEBjb2Rle1xzdWJzdWJzZWN0aW9ufSwKLUBj b2Rle1xlcW5vfSwgQGNvZGV7XGxhYmVsfSwgQGNvZGV7XHJlZn0sIEBjb2Rle1xjaXRlfSwKLUBj b2Rle1xiaWJpdGVtfSwgQGNvZGV7XHBhcnR9LCBAY29kZXtcYXBwZW5kaXh9LCBAY29kZXtcZW50 cnl9LAotQGNvZGV7XGluZGV4fSwgQGNvZGV7XGRlZn0sIEBjb2Rle1xuZXdjb21tYW5kfSwgQGNv ZGV7XHJlbmV3Y29tbWFuZH0sCi1AY29kZXtcbmV3ZW52aXJvbm1lbnR9IGFuZCBAY29kZXtccmVu ZXdlbnZpcm9ubWVudH0gYXJlIHRhZ3MuCitAY29kZXtcZXFub30sIEBjb2Rle1xsYWJlbH0sIEBj b2Rle1xyZWZ9LCBAY29kZXtcUmVmfSwgQGNvZGV7XGZvb3RyZWZ9LAorQGNvZGV7XGNpdGV9LCBA Y29kZXtcYmliaXRlbX0sIEBjb2Rle1xwYXJ0fSwgQGNvZGV7XGFwcGVuZGl4fSwKK0Bjb2Rle1xl bnRyeX0sIEBjb2Rle1xpbmRleH0sIEBjb2Rle1xkZWZ9LCBAY29kZXtcZWRlZn0sIEBjb2Rle1xn ZGVmfSwKK0Bjb2Rle1x4ZGVmfSwgQGNvZGV7XG5ld2NvbW1hbmR9LCBAY29kZXtccmVuZXdjb21t YW5kfSwKK0Bjb2Rle1xuZXdlbnZpcm9ubWVudH0sIEBjb2Rle1xyZW5ld2Vudmlyb25tZW50fSwK K0Bjb2Rle1xEZWNsYXJlUm9idXN0Q29tbWFuZH0sIEBjb2Rle1xuZXdyb2J1c3RjbWR9LAorQGNv ZGV7XHJlbmV3cm9idXN0Y21kfSwgQGNvZGV7XHByb3ZpZGVjb21tYW5kfSwKK0Bjb2Rle1xwcm92 aWRlcm9idXN0Y21kfSwgQGNvZGV7XE5ld0RvY3VtZW50Q29tbWFuZH0sCitAY29kZXtcUmVuZXdE b2N1bWVudENvbW1hbmR9LCBAY29kZXtcUHJvdmlkZURvY3VtZW50Q29tbWFuZH0sCitAY29kZXtc RGVjbGFyZURvY3VtZW50Q29tbWFuZH0sIEBjb2Rle1xOZXdFeHBhbmRhYmxlRG9jdW1lbnRDb21t YW5kfSwKK0Bjb2Rle1xSZW5ld0V4cGFuZGFibGVEb2N1bWVudENvbW1hbmR9LAorQGNvZGV7XFBy b3ZpZGVFeHBhbmRhYmxlRG9jdW1lbnRDb21tYW5kfSwKK0Bjb2Rle1xEZWNsYXJlRXhwYW5kYWJs ZURvY3VtZW50Q29tbWFuZH0sCitAY29kZXtcTmV3RG9jdW1lbnRFbnZpcm9ubWVudH0sIEBjb2Rl e1xSZW5ld0RvY3VtZW50RW52aXJvbm1lbnR9LAorQGNvZGV7XFByb3ZpZGVEb2N1bWVudEVudmly b25tZW50fSwgQGNvZGV7XERlY2xhcmVEb2N1bWVudEVudmlyb25tZW50fSwKK0Bjb2Rle1xjc2Rl Zn0sIEBjb2Rle1xjc2VkZWZ9LCBAY29kZXtcY3NnZGVmfSwgQGNvZGV7XGNzeGRlZn0sCitAY29k ZXtcY3NsZXRjc30sIEBjb2Rle1xjc2xldH0sIEBjb2Rle1xsZXRjc30sIEBjb2Rle1xsZXR9LAor QGNvZGV7XGNzX25ld19wcm90ZWN0ZWRfbm9wYXJ9LCBAY29kZXtcY3NfbmV3X3Byb3RlY3RlZH0s CitAY29kZXtcY3NfbmV3X25vcGFyfSwgQGNvZGV7XGNzX25ld19lcX0sIEBjb2Rle1xjc19uZXd9 LAorQGNvZGV7XGNzX3NldF9wcm90ZWN0ZWRfbm9wYXJ9LCBAY29kZXtcY3Nfc2V0X3Byb3RlY3Rl ZH0sCitAY29kZXtcY3Nfc2V0X25vcGFyfSwgQGNvZGV7XGNzX3NldF9lcX0sIEBjb2Rle1xjc19z ZXR9LAorQGNvZGV7XGNzX2dzZXRfcHJvdGVjdGVkX25vcGFyfSwgQGNvZGV7XGNzX2dzZXRfcHJv dGVjdGVkfSwKK0Bjb2Rle1xjc19nc2V0X25vcGFyfSwgQGNvZGV7XGNzX2dzZXRfZXF9LCBAY29k ZXtcY3NfZ3NldH0sCitAY29kZXtcY3NfZ2VuZXJhdGVfZnJvbV9hcmdfY291bnR9LCBhbmQgQGNv ZGV7XGNzX2dlbmVyYXRlX3ZhcmlhbnR9IGFyZQordGFncy4gIFNvIHRvbyBhcmUgdGhlIGFyZ3Vt ZW50cyBvZiBhbnkgc3RhcnJlZCB2YXJpYW50cyBvZiB0aGVzZQorY29tbWFuZHMuCiAKIE90aGVy IGNvbW1hbmRzIGNhbiBtYWtlIHRhZ3MgYXMgd2VsbCwgaWYgeW91IHNwZWNpZnkgdGhlbSBpbiB0 aGUKIGVudmlyb25tZW50IHZhcmlhYmxlIEBlbnZ7VEVYVEFHU30gYmVmb3JlIGludm9raW5nIEBj b21tYW5ke2V0YWdzfS4gIFRoZQpkaWZmIC0tZ2l0IGEvbGliLXNyYy9ldGFncy5jIGIvbGliLXNy Yy9ldGFncy5jCmluZGV4IDAzYmM1NWRlMDNkLi42YmM3MzRlN2RmMCAxMDA2NDQKLS0tIGEvbGli LXNyYy9ldGFncy5jCisrKyBiL2xpYi1zcmMvZXRhZ3MuYwpAQCAtNzkzLDExICs3OTMsMjcgQEAg I2RlZmluZSBTVERJTiAweDEwMDEJCS8qIHJldHVybmVkIGJ5IGdldG9wdF9sb25nIG9uIC0tcGFy c2Utc3RkaW4gKi8KIHN0YXRpYyBjb25zdCBjaGFyICpUZVhfc3VmZml4ZXMgW10gPQogICB7ICJi aWIiLCAiY2xvIiwgImNscyIsICJsdHgiLCAic3R5IiwgIlRlWCIsICJ0ZXgiLCBOVUxMIH07CiBz dGF0aWMgY29uc3QgY2hhciBUZVhfaGVscCBbXSA9Ci0iSW4gTGFUZVggdGV4dCwgdGhlIGFyZ3Vt ZW50IG9mIGFueSBvZiB0aGUgY29tbWFuZHMgJ1xcY2hhcHRlcicsXG5cCi0nXFxzZWN0aW9uJywg J1xcc3Vic2VjdGlvbicsICdcXHN1YnN1YnNlY3Rpb24nLCAnXFxlcW5vJywgJ1xcbGFiZWwnLFxu XAotJ1xccmVmJywgJ1xcY2l0ZScsICdcXGJpYml0ZW0nLCAnXFxwYXJ0JywgJ1xcYXBwZW5kaXgn LCAnXFxlbnRyeScsXG5cCi0nXFxpbmRleCcsICdcXGRlZicsICdcXG5ld2NvbW1hbmQnLCAnXFxy ZW5ld2NvbW1hbmQnLFxuXAotJ1xcbmV3ZW52aXJvbm1lbnQnIG9yICdcXHJlbmV3ZW52aXJvbm1l bnQnIGlzIGEgdGFnLlxuXAorIkluIExhVGVYIHRleHQsIHRoZSBhcmd1bWVudCBvZiB0aGUgY29t bWFuZHMgJ1xcY2hhcHRlcicsICdcXHNlY3Rpb24nLFxuXAorJ1xcc3Vic2VjdGlvbicsICdcXHN1 YnN1YnNlY3Rpb24nLCAnXFxlcW5vJywgJ1xcbGFiZWwnLCAnXFxyZWYnLFxuXAorJ1xcUmVmJywg J1xcZm9vdHJlZicsICdcXGNpdGUnLCAnXFxiaWJpdGVtJywgJ1xccGFydCcsICdcXGFwcGVuZGl4 JyxcblwKKydcXGVudHJ5JywgJ1xcaW5kZXgnLCAnXFxkZWYnLCAnXFxlZGVmJywgJ1xcZ2RlZics ICdcXHhkZWYnLFxuXAorJ1xcbmV3Y29tbWFuZCcsICdcXHJlbmV3Y29tbWFuZCcsICdcXG5ld3Jv YnVzdGNtZCcsICdcXHJlbmV3cm9idXN0Y21kJyxcblwKKydcXG5ld2Vudmlyb25tZW50JywgJ1xc cmVuZXdlbnZpcm9ubWVudCcsICdcXERlY2xhcmVSb2J1c3RDb21tYW5kJyxcblwKKydcXHByb3Zp ZGVjb21tYW5kJywgJ1xccHJvdmlkZXJvYnVzdGNtZCcsICdcXE5ld0RvY3VtZW50Q29tbWFuZCcs XG5cCisnXFxSZW5ld0RvY3VtZW50Q29tbWFuZCcsICdcXFByb3ZpZGVEb2N1bWVudENvbW1hbmQn LFxuXAorJ1xcRGVjbGFyZURvY3VtZW50Q29tbWFuZCcsICdcXE5ld0V4cGFuZGFibGVEb2N1bWVu dENvbW1hbmQnLFxuXAorJ1xcUmVuZXdFeHBhbmRhYmxlRG9jdW1lbnRDb21tYW5kJywgJ1xcUHJv dmlkZUV4cGFuZGFibGVEb2N1bWVudENvbW1hbmQnLFxuXAorJ1xcRGVjbGFyZUV4cGFuZGFibGVE b2N1bWVudENvbW1hbmQnLCAnXFxOZXdEb2N1bWVudEVudmlyb25tZW50JyxcblwKKydcXFJlbmV3 RG9jdW1lbnRFbnZpcm9ubWVudCcsICdcXFByb3ZpZGVEb2N1bWVudEVudmlyb25tZW50JyxcblwK KydcXERlY2xhcmVEb2N1bWVudEVudmlyb25tZW50JywnXFxjc2RlZicsICdcXGNzZWRlZicsICdc XGNzZ2RlZicsXG5cCisnXFxjc3hkZWYnLCAnXFxjc2xldGNzJywgJ1xcY3NsZXQnLCAnXFxsZXRj cycsICdcXGxldCcsXG5cCisnXFxjc19uZXdfcHJvdGVjdGVkX25vcGFyJywgJ1xcY3NfbmV3X3By b3RlY3RlZCcsICdcXGNzX25ld19ub3BhcicsXG5cCisnXFxjc19uZXdfZXEnLCAnXFxjc19uZXcn LCAnXFxjc19zZXRfcHJvdGVjdGVkX25vcGFyJyxcblwKKydcXGNzX3NldF9wcm90ZWN0ZWQnLCAn XFxjc19zZXRfbm9wYXInLCAnXFxjc19zZXRfZXEnLCAnXFxjc19zZXQnLFxuXAorJ1xcY3NfZ3Nl dF9wcm90ZWN0ZWRfbm9wYXInLCAnXFxjc19nc2V0X3Byb3RlY3RlZCcsICdcXGNzX2dzZXRfbm9w YXInLFxuXAorJ1xcY3NfZ3NldF9lcScsICdcXGNzX2dzZXQnLCAnXFxjc19nZW5lcmF0ZV9mcm9t X2FyZ19jb3VudCcsIG9yXG5cCisnXFxjc19nZW5lcmF0ZV92YXJpYW50JyBpcyBhIHRhZy4gIFNv IGlzIHRoZSBhcmd1bWVudCBvZiBhbnkgc3RhcnJlZFxuXAordmFyaWFudCBvZiB0aGVzZSBjb21t YW5kcy5cblwKIFxuXAogT3RoZXIgY29tbWFuZHMgY2FuIGJlIHNwZWNpZmllZCBieSBzZXR0aW5n IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZVxuXAogJ1RFWFRBR1MnIHRvIGEgY29sb24tc2VwYXJh dGVkIGxpc3QgbGlrZSwgZm9yIGV4YW1wbGUsXG5cCkBAIC01NzQwLDExICs1NzU2LDI1IEBAIFNj aGVtZV9mdW5jdGlvbnMgKEZJTEUgKmluZikKIHN0YXRpYyBsaW5lYnVmZmVyICpURVhfdG9rdGFi ID0gTlVMTDsgLyogVGFibGUgd2l0aCB0YWcgdG9rZW5zICovCiAKIC8qIERlZmF1bHQgc2V0IG9m IGNvbnRyb2wgc2VxdWVuY2VzIHRvIHB1dCBpbnRvIFRFWF90b2t0YWIuCi0gICBUaGUgdmFsdWUg b2YgZW52aXJvbm1lbnQgdmFyIFRFWFRBR1MgaXMgcHJlcGVuZGVkIHRvIHRoaXMuICAqLworICAg VGhlIHZhbHVlIG9mIGVudmlyb25tZW50IHZhciBURVhUQUdTIGlzIHByZXBlbmRlZCB0byB0aGlz LgorICAgKDIwMjQpIEFkZCB2YXJpYW50cyBvZiAnXGRlZicsIHNvbWUgYWRkaXRpb25hbCBMYVRl WCAoYW5kCisgICBmb3JtZXIgeHBhcnNlKSBjb21tYW5kcywgY29tbW9uIHZhcmlhbnRzIGZyb20g dGhlCisgICAnZXRvb2xib3gnIHBhY2thZ2UsIGFuZCB0aGUgbWFpbiBleHBsMyBjb21tYW5kcy4g Ki8KIHN0YXRpYyBjb25zdCBjaGFyICpURVhfZGVmZW52ID0gIlwKLTpjaGFwdGVyOnNlY3Rpb246 c3Vic2VjdGlvbjpzdWJzdWJzZWN0aW9uOmVxbm86bGFiZWw6cmVmOmNpdGU6YmliaXRlbVwKLTpw YXJ0OmFwcGVuZGl4OmVudHJ5OmluZGV4OmRlZlwKLTpuZXdjb21tYW5kOnJlbmV3Y29tbWFuZDpu ZXdlbnZpcm9ubWVudDpyZW5ld2Vudmlyb25tZW50IjsKKzpsYWJlbDpyZWY6UmVmOmZvb3RyZWY6 Y2hhcHRlcjpzZWN0aW9uOnN1YnNlY3Rpb246c3Vic3Vic2VjdGlvbjplcW5vOmNpdGVcCis6Ymli aXRlbTpwYXJ0OmFwcGVuZGl4OmVudHJ5OmluZGV4OmRlZjplZGVmOmdkZWY6eGRlZjpuZXdjb21t YW5kOnJlbmV3Y29tbWFuZFwKKzpuZXdlbnZpcm9ubWVudDpyZW5ld2Vudmlyb25tZW50OkRlY2xh cmVSb2J1c3RDb21tYW5kOnJlbmV3cm9idXN0Y21kXAorOm5ld3JvYnVzdGNtZDpwcm92aWRlY29t bWFuZDpwcm92aWRlcm9idXN0Y21kOk5ld0RvY3VtZW50Q29tbWFuZFwKKzpSZW5ld0RvY3VtZW50 Q29tbWFuZDpQcm92aWRlRG9jdW1lbnRDb21tYW5kOkRlY2xhcmVEb2N1bWVudENvbW1hbmRcCis6 TmV3RXhwYW5kYWJsZURvY3VtZW50Q29tbWFuZDpSZW5ld0V4cGFuZGFibGVEb2N1bWVudENvbW1h bmRcCis6UHJvdmlkZUV4cGFuZGFibGVEb2N1bWVudENvbW1hbmQ6RGVjbGFyZUV4cGFuZGFibGVE b2N1bWVudENvbW1hbmRcCis6TmV3RG9jdW1lbnRFbnZpcm9ubWVudDpSZW5ld0RvY3VtZW50RW52 aXJvbm1lbnRcCis6UHJvdmlkZURvY3VtZW50RW52aXJvbm1lbnQ6RGVjbGFyZURvY3VtZW50RW52 aXJvbm1lbnQ6Y3NkZWZcCis6Y3NlZGVmOmNzZ2RlZjpjc3hkZWY6Y3NsZXRjczpjc2xldDpsZXRj czpsZXQ6Y3NfbmV3X3Byb3RlY3RlZF9ub3BhclwKKzpjc19uZXdfcHJvdGVjdGVkOmNzX25ld19u b3Bhcjpjc19uZXdfZXE6Y3NfbmV3OmNzX3NldF9wcm90ZWN0ZWRfbm9wYXJcCis6Y3Nfc2V0X3By b3RlY3RlZDpjc19zZXRfbm9wYXI6Y3Nfc2V0X2VxOmNzX3NldDpjc19nc2V0X3Byb3RlY3RlZF9u b3BhclwKKzpjc19nc2V0X3Byb3RlY3RlZDpjc19nc2V0X25vcGFyOmNzX2dzZXRfZXE6Y3NfZ3Nl dFwKKzpjc19nZW5lcmF0ZV9mcm9tX2FyZ19jb3VudDpjc19nZW5lcmF0ZV92YXJpYW50IjsKIAog c3RhdGljIHZvaWQgVEVYX2RlY29kZV9lbnYgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsK IApAQCAtNTgwMywxOSArNTgzMywxMzkgQEAgVGVYX2NvbW1hbmRzIChGSUxFICppbmYpCiAJICAg ICAgewogCQljaGFyICpwOwogCQlwdHJkaWZmX3QgbmFtZWxlbiwgbGluZWxlbjsKLQkJYm9vbCBv cGdycCA9IGZhbHNlOworCQlib29sIG9wZ3JwID0gZmFsc2UsIG9uZV9lc2MgPSBmYWxzZSwgaXNf ZXhwbHRocmVlID0gZmFsc2U7CiAKIAkJY3AgPSBza2lwX3NwYWNlcyAoY3AgKyBrZXktPmxlbik7 CisKKwkJLyogMS4gVGhlIGNhbm9uaWNhbCBleHBsMyBzeW50YXggbG9va3Mgc29tZXRoaW5nIGxp a2UgdGhpczoKKwkJICAgXGNzX25ldzpOcG4gXF9faG9va190bF9ncHV0Ok5uIHsgXEVSUk9SIH0u ICBGaXJzdCwgaWYgd2UKKwkJICAgd2FudCB0byB0YWcgYW55IHN1Y2ggY29tbWFuZHMsIHdlIGlu Y2x1ZGUgb25seSB0aGUgcGFydAorCQkgICBiZWZvcmUgdGhlIGNvbG9uIChjc19uZXcpIGluIFRF WF9kZWZlbnYgb3IgVEVYVEFHUy4gIFNlY29uZCwKKwkJICAgZXRhZ3Mgc2tpcHMgdGhlIGFyZ3Vt ZW50IHNwZWNpZmllciAoaW5jbHVkaW5nIHRoZSBjb2xvbikKKwkJICAgYWZ0ZXIgdGhlIHRhZyB0 b2tlbiwgc28gdGhhdCBpdCBkb2Vzbid0IGJlY29tZSB0aGUgdGFnIG5hbWUuCisJCSAgIFRoaXJk LCB3ZSBzZXQgdGhlIGJvb2xlYW4gJ2lzX2V4cGx0aHJlZScgdG8gdHJ1ZSBzbyB0aGF0IHdlCisJ CSAgIGNhbiByZW1vdmUgdGhlIGFyZ3VtZW50IHNwZWNpZmllciBmcm9tIHRoZSBhY3R1YWwgdGFn IG5hbWUKKwkJICAgKF9faG9va190bF9ncHV0KS4gIFRoaXMgYWxsIGFsbG93cyB1cyB0byBpbmNs dWRlIGV4cGwzCisJCSAgIGNvbnN0cnVjdHMgaW4gVEVYX2RlZmVudiBvciBpbiB0aGUgZW52aXJv bm1lbnQgdmFyaWFibGUKKwkJICAgVEVYVEFHUyB3aXRob3V0IHJlcXVpcmluZyBhIGNoYW5nZSBv ZiBzZXBhcmF0b3IsIGFuZCBpdCBhbHNvCisJCSAgIGFsbG93cyB1cyB0byBmaW5kIHRoZSBkZWZp bml0aW9uIG9mIHZhcmlhbnQgY29tbWFuZHMgKHdpdGgKKwkJICAgZGlmZmVyZW50IGFyZ3VtZW50 IHNwZWNpZmllcnMpIGRlZmluZWQgdXNpbmcsIGZvciBleGFtcGxlLAorCQkgICBcY3NfZ2VuZXJh dGVfdmFyaWFudDpObi4gIFBsZWFzZSBub3RlIHRoYXQgdGhlIGV4cGwzIHNwZWMKKwkJICAgcmVx dWlyZXMgZXRhZ3MgdG8gcGF5IG1vcmUgYXR0ZW50aW9uIHRvIHdoaXRlc3BhY2UgaW4gdGhlCisJ CSAgIGNvZGUuCisKKwkJICAgMi4gV2UgYWxzbyBhdXRvbWF0aWNhbGx5IHJlbW92ZSB0aGUgYXN0 ZXJpc2sgZnJvbSBzdGFycmVkCisJCSAgIHZhcmlhbnRzIG9mIGFsbCBjb21tYW5kcywgd2l0aG91 dCB0aGUgbmVlZCB0byBpbmNsdWRlIHRoZQorCQkgICBzdGFycmVkIGNvbW1hbmRzIGV4cGxpY2l0 bHkgaW4gVEVYX2RlZmVudiBvciBURVhUQUdTLiAqLworCQlpZiAoKmNwID09ICc6JykKKwkJICB7 CisJCSAgICB3aGlsZSAoIWNfaXNzcGFjZSAoKmNwKSAmJiAqY3AgIT0gVEVYX29wZ3JwKQorCQkg ICAgICBjcCsrOworCQkgICAgY3AgPSBza2lwX3NwYWNlcyAoY3ApOworCQkgICAgaXNfZXhwbHRo cmVlID0gdHJ1ZTsKKwkJICB9CisJCWVsc2UgaWYgKCpjcCA9PSAnKicpCisJCSAgY3ArKzsKKwor CQkvKiBTa2lwIHRoZSBvcHRpb25hbCBhcmd1bWVudHMgdG8gY29tbWFuZHMgaW4gdGhlIHRhZ3Mg bGlzdCBzbworCQkgICB0aGF0IHRoZXNlIGFyZ3VtZW50cyBkb24ndCBlbmQgdXAgYXMgdGhlIG5h bWUgb2YgdGhlIHRhZy4KKwkJICAgVGhlIG5hbWUgd2lsbCBpbnN0ZWFkIGNvbWUgZnJvbSB0aGUg YXJndW1lbnQgaW4gY3VybHkgYnJhY2VzCisJCSAgIHRoYXQgZm9sbG93cyB0aGUgb3B0aW9uYWwg b25lcy4gIFRoZSAnXGxldCcgY29tbWFuZCBnZXRzCisJCSAgIHNwZWNpYWwgdHJlYXRtZW50LiAq LworCQl3aGlsZSAoKmNwICE9ICdcMCcgJiYgKmNwICE9ICclJworCQkgICAgICAgJiYgIXN0cmVx IChrZXktPmJ1ZmZlciwgImxldCIpKQorCQkgIHsKKwkJICAgIGlmICgqY3AgPT0gJ1snKQorCQkg ICAgICB7CisJCQl3aGlsZSAoKmNwICE9ICddJyAmJiAqY3AgIT0gJ1wwJyAmJiAqY3AgIT0gJyUn KQorCQkJICBjcCsrOworCQkgICAgICB9CisJCSAgICBlbHNlIGlmICgqY3AgPT0gJygnKQorCQkg ICAgICB7CisJCQl3aGlsZSAoKmNwICE9ICcpJyAmJiAqY3AgIT0gJ1wwJyAmJiAqY3AgIT0gJyUn KQorCQkJICBjcCsrOworCQkgICAgICB9CisJCSAgICBlbHNlIGlmICgqY3AgPT0gJ10nIHx8ICpj cCA9PSAnKScpCisJCSAgICAgIGNwKys7CisJCSAgICBlbHNlCisJCSAgICAgIGJyZWFrOworCQkg IH0KIAkJaWYgKCpjcCA9PSBURVhfb3BncnApCiAJCSAgewogCQkgICAgb3BncnAgPSB0cnVlOwog CQkgICAgY3ArKzsKKwkJICAgIGNwID0gc2tpcF9zcGFjZXMgKGNwKTsgLyogRm9yIGV4cGwzIGNv ZGUuICovCiAJCSAgfQorCisJCS8qIFJlbW92aW5nIHRoZSBUZVggZXNjYXBlIGNoYXJhY3RlciBm cm9tIHRhZyBuYW1lcyBzaW1wbGlmaWVzCisJCSAgIHRoaW5ncyBmb3IgZWRpdG9ycyBmaW5kaW5n IHRhZ2dlZCBjb21tYW5kcyBpbiBUZVggYnVmZmVycy4KKwkJICAgVGhpcyBhcHBsaWVzIHRvIEVt YWNzIGJ1dCBhbHNvIHRvIHRoZSB0YWctZmluZGluZyBiZWhhdmlvcgorCQkgICBvZiBhdCBsZWFz dCBzb21lIG9mIHRoZSBlZGl0b3JzIHRoYXQgdXNlIGN0YWdzLCB0aG91Z2ggaW4KKwkJICAgdGhl IGxhdHRlciBjYXNlIHRoaXMgd2lsbCByZW1haW4gc3Vib3B0aW1hbC4gIFRoZQorCQkgICB1bmRv Y3VtZW50ZWQgY3RhZ3Mgb3B0aW9uICctLW5vLWR1cGxpY2F0ZXMnIG1heSBoZWxwLiAqLworCQlp ZiAoKmNwID09IFRFWF9lc2MpCisJCSAgeworCQkgICAgY3ArKzsKKwkJICAgIG9uZV9lc2MgPSB0 cnVlOworCQkgIH0KKworCQkvKiBUZXN0aW5nICFjX2lzc3BhY2UgJiYgIWNfaXNwdW5jdCBpcyBz aW1wbGVyLCBidXQgaGFsdHMKKwkJICAgcHJvY2Vzc2luZyBhdCB0b28gbWFueSBwbGFjZXMuICBU aGUgbGlzdCBhcyBpdCBzdGFuZHMgdHJpZXMKKwkJICAgYm90aCB0byBlbnN1cmUgdGhhdCB0YWcg bmFtZXMgd2lsbCBkZXJpdmUgZnJvbSBtYWNybyBuYW1lcworCQkgICByYXRoZXIgdGhhbiBmcm9t IG9wdGlvbmFsIHBhcmFtZXRlcnMgdG8gdGhvc2UgbWFjcm9zLCBhbmQKKwkJICAgYWxzbyB0byBy ZXR1cm4gZmluZGFibGUgbmFtZXMgd2hpbGUgc3RpbGwgYWxsb3dpbmcgZm9yCisJCSAgIHVub3J0 aG9kb3ggY29uc3RydWN0cy4gKi8KIAkJZm9yIChwID0gY3A7Ci0JCSAgICAgKCFjX2lzc3BhY2Ug KCpwKSAmJiAqcCAhPSAnIycgJiYKLQkJICAgICAgKnAgIT0gVEVYX29wZ3JwICYmICpwICE9IFRF WF9jbGdycCk7CisJCSAgICAgKCFjX2lzc3BhY2UgKCpwKSAmJiAqcCAhPSAnIycgJiYgKnAgIT0g Jz0nICYmCisJCSAgICAgICpwICE9ICdbJyAmJiAqcCAhPSAnKCcgJiYgKnAgIT0gVEVYX29wZ3Jw ICYmCisJCSAgICAgICpwICE9IFRFWF9jbGdycCAmJiAqcCAhPSAnIicgJiYgKnAgIT0gJ1wnJyAm JgorCQkgICAgICAqcCAhPSAnJScgJiYgKnAgIT0gJywnICYmICpwICE9ICd8JyAmJiAqcCAhPSAn JCcpOwogCQkgICAgIHArKykKLQkJICBjb250aW51ZTsKKwkJICAvKiBJbiBleHBsMyBjb2RlIHdl IHJlbW92ZSB0aGUgYXJndW1lbnQgc3BlY2lmaWNhdGlvbiBmcm9tCisJCSAgICAgdGhlIHRhZyBu YW1lLiAgTW9yZSBnZW5lcmFsbHkgd2UgYWxsb3cgb25seSBvbmUgKGRlbGV0ZWQpCisJCSAgICAg ZXNjYXBlIGNoYXIgaW4gYSB0YWcgbmFtZSwgd2hpY2ggKHByaW1hcmlseSkgZW5hYmxlcworCQkg ICAgIHRhZ2dpbmcgYSBUZVggY29tbWFuZCdzIGRpZmZlcmVudCwgcG9zc2libHkgdGVtcG9yYXJ5 LAorCQkgICAgICdcbGV0JyBiaW5kaW5ncy4gKi8KKwkJICBpZiAoaXNfZXhwbHRocmVlICYmICpw ID09ICc6JykKKwkJICAgIGJyZWFrOworCQkgIGVsc2UgaWYgKCpwID09IFRFWF9lc2MpCisJCSAg ICB7IC8qIFNlY29uZCBwYXJ0IG9mIHRlc3QgaXMgZm9yLCBlLmcuLCBcY3NsZXQuICovCisJCSAg ICAgIGlmICghb25lX2VzYyAmJiAhb3BncnApCisJCQl7CisJCQkgIG9uZV9lc2MgPSB0cnVlOwor CQkJICBjb250aW51ZTsKKwkJCX0KKwkJICAgICAgZWxzZQorCQkJYnJlYWs7CisJCSAgICB9CisJ CSAgZWxzZQorCQkgICAgY29udGludWU7CisJCS8qIEZvciBUZVggZmlsZXMsIHRhZ3Mgd2l0aG91 dCBhIG5hbWUgYXJlIGJhc2ljYWxseSBjcnVmdCwgYW5kCisJCSAgIGluIHNvbWUgc2l0dWF0aW9u cyB0aGV5IGNhbiBwcm9kdWNlIHNwdXJpb3VzIGFuZCBjb25mdXNpbmcKKwkJICAgbWF0Y2hlcy4g IFRyeSB0byBjYXRjaCBhcyBtYW55IGNhc2VzIGFzIHBvc3NpYmxlIHdoZXJlIGEKKwkJICAgY29t bWFuZCBuYW1lIGlzIG9mIHRoZSBmb3JtICdcKCcsIGJ1dCBhdm9pZCwgYXMgZmFyIGFzCisJCSAg IHBvc3NpYmxlLCB0aGUgc3B1cmlvdXMgbWF0Y2hlcy4gKi8KKwkJaWYgKHAgPT0gY3ApCisJCSAg eworCQkgICAgc3dpdGNoICgqcCkKKwkJICAgICAgeyAvKiBJbmNsdWRlID0/ICovCisJCSAgICAg IGNhc2UgJygnOiBjYXNlICdbJzogY2FzZSAnIic6IGNhc2UgJ1wnJzoKKwkJICAgICAgY2FzZSAn XFwnOiBjYXNlICchJzogY2FzZSAnPSc6IGNhc2UgJywnOgorCQkgICAgICBjYXNlICd8JzogY2Fz ZSAnJCc6CisJCQlwKys7CisJCQlicmVhazsKKwkJICAgICAgY2FzZSAneyc6IGNhc2UgJ30nOiBj YXNlICc8JzogY2FzZSAnPic6CisJCQlpZiAoIW9wZ3JwKQorCQkJICB7CisJCQkgICAgICBwKys7 CisJCQkgICAgICBpZiAoKnAgPT0gJ1wwJyB8fCAqcCA9PSAnJScpCisJCQkJZ290byB0ZXhfbmV4 dF9saW5lOworCQkJICB9CisJCQlicmVhazsKKwkJICAgICAgZGVmYXVsdDoKKwkJCWJyZWFrOwor CQkgICAgICB9CisJCSAgfQogCQluYW1lbGVuID0gcCAtIGNwOwogCQlsaW5lbGVuID0gbGIubGVu OwogCQlpZiAoIW9wZ3JwIHx8ICpwID09IFRFWF9jbGdycCkKQEAgLTU4MjQsOSArNTk3NCwxOCBA QCBUZVhfY29tbWFuZHMgKEZJTEUgKmluZikKIAkJICAgICAgcCsrOwogCQkgICAgbGluZWxlbiA9 IHAgLSBsYi5idWZmZXIgKyAxOwogCQkgIH0KLQkJbWFrZV90YWcgKGNwLCBuYW1lbGVuLCB0cnVl LAotCQkJICBsYi5idWZmZXIsIGxpbmVsZW4sIGxpbmVubywgbGluZWNoYXJubyk7Ci0JCWdvdG8g dGV4X25leHRfbGluZTsgLyogV2Ugb25seSB0YWcgYSBsaW5lIG9uY2UgKi8KKwkJaWYgKG5hbWVs ZW4pCisJCSAgbWFrZV90YWcgKGNwLCBuYW1lbGVuLCB0cnVlLAorCQkJICAgIGxiLmJ1ZmZlciwg bGluZWxlbiwgbGluZW5vLCBsaW5lY2hhcm5vKTsKKwkJLyogTGluZXMgd2l0aCBtb3JlIHRoYW4g b25lIFxkZWYgb3IgXGxldCBhcmUgc3VycHJpc2luZ2x5CisJCSAgIGNvbW1vbiBpbiBUZVggZmls ZXMsIGVzcGVjaWFsbHkgaW4gdGhlIHN5c3RlbSBmaWxlcyB0aGF0CisJCSAgIGZvcm0gdGhlIGJh c2lzIG9mIHRoZSB2YXJpb3VzIFRlWCBmb3JtYXRzLiAgVGhpcyB0YWdzIHRoZW0KKwkJICAgYWxs LiAqLworCQkvKiBnb3RvIHRleF9uZXh0X2xpbmU7IC9cKiBXZSBvbmx5IHRhZyBhIGxpbmUgb25j ZSAqXC8gKi8KKwkJd2hpbGUgKCpjcCAhPSAnXDAnICYmICpjcCAhPSAnJScgJiYgKmNwICE9IFRF WF9lc2MpCisJCSAgY3ArKzsKKwkJaWYgKCpjcCAhPSBURVhfZXNjKQorCQkgIGdvdG8gdGV4X25l eHRfbGluZTsKIAkgICAgICB9CiAJfQogICAgIHRleF9uZXh0X2xpbmU6CmRpZmYgLS1naXQgYS9s aXNwL3RleHRtb2Rlcy90ZXgtbW9kZS5lbCBiL2xpc3AvdGV4dG1vZGVzL3RleC1tb2RlLmVsCmlu ZGV4IDk3Yzk1MDI2N2M2Li5mYmYwODg0MDY5OSAxMDA2NDQKLS0tIGEvbGlzcC90ZXh0bW9kZXMv dGV4LW1vZGUuZWwKKysrIGIvbGlzcC90ZXh0bW9kZXMvdGV4LW1vZGUuZWwKQEAgLTYzNiw2ICs2 MzYsMTQgQEAgdGV4LWZvbnQtbG9jay1rZXl3b3Jkcy0yCiAJICAgICAgMyAnKHRleC1mb250LWxv Y2stYXBwZW5kLXByb3AgJ2JvbGQpICdhcHBlbmQpKSkpKQogICAgIkdhdWR5IGV4cHJlc3Npb25z IHRvIGhpZ2hsaWdodCBpbiBUZVggbW9kZXMuIikKIAorKGRlZnZhci1sb2NhbCB0ZXgtZXhwbC1y ZWdpb24tbGlzdCBuaWwKKyAgIkxpc3Qgb2YgcmVnaW9uIGJvdW5kYXJpZXMgd2hlcmUgZXhwbDMg c3ludGF4IGlzIGFjdGl2ZS4KK0l0IHdpbGwgYmUgbmlsIGluIGJ1ZmZlcnMgd2hlcmUgZXhwbDMg c3ludGF4IGlzIGFsd2F5cyBhY3RpdmUsIGUuZy4sCitleHBsMyBjbGFzc2VzIG9yIHBhY2thZ2Vz LiIpCisKKyhkZWZ2YXItbG9jYWwgdGV4LWV4cGwtYnVmZmVyLXAgbmlsCisgICJOb24tbmlsIGlu IGJ1ZmZlcnMgd2hlcmUgZXhwbDMgc3ludGF4IGlzIGFsd2F5cyBhY3RpdmUuIikKKwogKGRlZnVu IHRleC1mb250LWxvY2stc3VzY3JpcHQgKHBvcykKICAgKHVubGVzcyAob3IgKG1lbXEgKGdldC10 ZXh0LXByb3BlcnR5IHBvcyAnZmFjZSkKIAkJICAgICcoZm9udC1sb2NrLWNvbnN0YW50LWZhY2Ug Zm9udC1sb2NrLWJ1aWx0aW4tZmFjZQpAQCAtNjQ1LDcgKzY1MywxNyBAQCB0ZXgtZm9udC1sb2Nr LXN1c2NyaXB0CiAJCSAgICAocG9zIHBvcykpCiAJCSh3aGlsZSAoZXEgKGNoYXItYmVmb3JlIHBv cykgP1xcKQogCQkgIChzZXRxIHBvcyAoMS0gcG9zKSBvZGQgKG5vdCBvZGQpKSkKLQkJb2RkKSkK KwkJb2RkKQorICAgICAgICAgICAgICA7OyBDaGVjayBpZiBQT1MgaXMgaW4gYW4gZXhwbDMgc3lu dGF4IHJlZ2lvbiBvciBhbiBleHBsMyBidWZmZXIKKyAgICAgICAgICAgICAgKHdoZW4gKGVxIChj aGFyLWFmdGVyIHBvcykgP18pCisgICAgICAgICAgICAgICAgKG9yIHRleC1leHBsLWJ1ZmZlci1w CisgICAgICAgICAgICAgICAgICAgIChhbmQKKyAgICAgICAgICAgICAgICAgICAgIHRleC1leHBs LXJlZ2lvbi1saXN0CisgICAgICAgICAgICAgICAgICAgICAoY2F0Y2ggJ3Jlc3VsdAorCSAgICAg ICAgICAgICAgIChkb2xpc3QgKHJhbmdlIHRleC1leHBsLXJlZ2lvbi1saXN0KQorCSAgICAgICAg ICAgICAgICAgKGFuZCAoPiBwb3MgKGNhciByYW5nZSkpCisJICAgICAgICAgICAgICAgICAgICAg ICg8IHBvcyAoY2RyIHJhbmdlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aHJv dyAncmVzdWx0IHQpKSkpKSkpKQogICAgIChpZiAoZXEgKGNoYXItYWZ0ZXIgcG9zKSA/XykKIAlg KGZhY2Ugc3Vic2NyaXB0IGRpc3BsYXkgKHJhaXNlICwoY2FyIHRleC1mb250LXNjcmlwdC1kaXNw bGF5KSkpCiAgICAgICBgKGZhY2Ugc3VwZXJzY3JpcHQgZGlzcGxheSAocmFpc2UgLChjYWRyIHRl eC1mb250LXNjcmlwdC1kaXNwbGF5KSkpKSkpCkBAIC0xMjg5LDggKzEzMDcsMTYgQEAgdGV4LWNv bW1vbi1pbml0aWFsaXphdGlvbgogICAgICAgICAgICAgICAgICMndGV4LS1wcmV0dGlmeS1zeW1i b2xzLWNvbXBvc2UtcCkKICAgKHNldHEtbG9jYWwgc3ludGF4LXByb3BlcnRpemUtZnVuY3Rpb24K IAkgICAgICAoc3ludGF4LXByb3BlcnRpemUtcnVsZXMgbGF0ZXgtc3ludGF4LXByb3BlcnRpemUt cnVsZXMpKQorICA7OyBEb24ndCBhZGQgZXh0cmEgcHJvY2Vzc2luZyB0byBgc3ludGF4LXByb3Bl cnRpemUnIGluIGZpbGVzIHdoZXJlCisgIDs7IGV4cGwzIHN5bnRheCBpcyBhbHdheXMgYWN0aXZl LgorICA6YWZ0ZXItaG9vayAocHJvZ24gKHRleC1leHBsLWJ1ZmZlci1wYXJzZSkKKyAgICAgICAg ICAgICAgICAgICAgICh1bmxlc3MgdGV4LWV4cGwtYnVmZmVyLXAKKyAgICAgICAgICAgICAgICAg ICAgICAgKGFkZC1ob29rICdzeW50YXgtcHJvcGVydGl6ZS1leHRlbmQtcmVnaW9uLWZ1bmN0aW9u cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyd0ZXgtZXhwbC1yZWdpb24tc2V0 IG5pbCB0KSkpCiAgIDs7IFRBQnMgaW4gdmVyYmF0aW0gZW52aXJvbm1lbnRzIGRvbid0IGRvIHdo YXQgeW91IHRoaW5rLgogICAoc2V0cS1sb2NhbCBpbmRlbnQtdGFicy1tb2RlIG5pbCkKKyAgOzsg U2V0IHVwIHhyZWYgYmFja2VuZCBpbiBUZVggYnVmZmVycy4KKyAgKGFkZC1ob29rICd4cmVmLWJh Y2tlbmQtZnVuY3Rpb25zICMndGV4LS14cmVmLWJhY2tlbmQgbmlsIHQpCiAgIDs7IE90aGVyIHZh cnMgdGhhdCBzaG91bGQgYmUgYnVmZmVyLWxvY2FsLgogICAobWFrZS1sb2NhbC12YXJpYWJsZSAn dGV4LWNvbW1hbmQpCiAgIChtYWtlLWxvY2FsLXZhcmlhYmxlICd0ZXgtc3RhcnQtb2YtaGVhZGVy KQpAQCAtMTkzNiw2ICsxOTYyLDM2IEBAIHRleC1jb3VudC13b3JkcwogCQkoZm9yd2FyZC1zZXhw IDEpKSkpKSkKICAgICAgIChtZXNzYWdlICIlcyB3b3JkcyIgY291bnQpKSkpCiAKKyhkZWZ1biB0 ZXgtZXhwbC1idWZmZXItcGFyc2UgKCkKKyAgIklkZW50aWZ5IGJ1ZmZlcnMgd2hlcmUgZXhwbDMg c3ludGF4IGlzIGFsd2F5cyBhY3RpdmUuIgorICAoc2F2ZS1leGN1cnNpb24KKyAgICAoZ290by1j aGFyIChwb2ludC1taW4pKQorICAgICh3aGVuICh0ZXgtc2VhcmNoLW5vbmNvbW1lbnQKKwkgICAo cmUtc2VhcmNoLWZvcndhcmQKKwkgICAgIlxcXFxcXCg/OkV4cGxGaWxlXFx8UHJvdmlkZXNFeHBs XFx8X194cGFyc2VfZmlsZVxcKSIKKwkgICAgbmlsIHQpKQorICAgICAgKHNldHEgdGV4LWV4cGwt YnVmZmVyLXAgdCkpKSkKKworKGRlZnVuIHRleC1leHBsLXJlZ2lvbi1zZXQgKF9iZWcgX2VuZCkK KyAgIkNyZWF0ZSBhIGxpc3Qgb2YgcmVnaW9ucyB3aGVyZSBleHBsMyBzeW50YXggaXMgYWN0aXZl LgorVGhpcyBmdW5jdGlvbiB1cGRhdGVzIHRoZSBsaXN0IHdoZW5ldmVyIGBzeW50YXgtcHJvcGVy dGl6ZScgcnVucywgYW5kCitzdG9yZXMgaXQgaW4gdGhlIGJ1ZmZlci1sb2NhbCB2YXJpYWJsZSBg dGV4LWV4cGwtcmVnaW9uLWxpc3QnLiAgVGhlCitsaXN0IHdpbGwgYWx3YXlzIGJlIG5pbCB3aGVu IHRoZSBidWZmZXIgdmlzaXRzIGFuIGV4cGwzIGZpbGUsIGUuZy4sIGFuCitleHBsMyBjbGFzcyBv ciBwYWNrYWdlLCB3aGVyZSBleHBsMyBzeW50YXggaXMgYWx3YXlzIGFjdGl2ZS4iCisgICh1bmxl c3Mgc3ludGF4LXBwc3MtLXVwZGF0ZWQtY2FjaGU7OyBTdG9wIGZvcndhcmQgc2VhcmNoIHJ1bm5p bmcgdHdpY2UuCisgICAgKHNldHEgdGV4LWV4cGwtcmVnaW9uLWxpc3QgbmlsKQorICAgIDs7IExl YXZpbmcgdGhpcyB0ZXN0IGhlcmUgYWxsb3dzIHVzZXJzIHRvIHNldCBgdGV4LWV4cGwtYnVmZmVy LXAnCisgICAgOzsgaW5kZXBlbmRlbnRseSBvZiB0aGUgbW9kZSdzIGF1dG9tYXRpYyBkZXRlY3Rp b24gb2YgYW4gZXhwbDMgZmlsZS4KKyAgICAodW5sZXNzIHRleC1leHBsLWJ1ZmZlci1wCisgICAg ICAoZ290by1jaGFyIChwb2ludC1taW4pKQorICAgICAgKGxldCAoKGNhc2UtZm9sZC1zZWFyY2gg bmlsKSkKKyAgICAgICAgKHdoaWxlICh0ZXgtc2VhcmNoLW5vbmNvbW1lbnQKKyAgICAgICAgICAg ICAgICAoc2VhcmNoLWZvcndhcmQgIlxcRXhwbFN5bnRheE9uIiBuaWwgdCkpCisgICAgICAgICAg KGxldCAoKG5ldy1iZWcgKHBvaW50KSkKKyAgICAgICAgICAgICAgICAobmV3LWVuZCAob3IgKHRl eC1zZWFyY2gtbm9uY29tbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlYXJj aC1mb3J3YXJkICJcXEV4cGxTeW50YXhPZmYiIG5pbCB0KSkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKHBvaW50LW1heCkpKSkKKyAgICAgICAgICAgIChwdXNoIChjb25zIG5ldy1iZWcg bmV3LWVuZCkgdGV4LWV4cGwtcmVnaW9uLWxpc3QpKSkpKSkpCiAKIAwKIDs7OyBJbnZva2luZyBU ZVggaW4gYW4gaW5mZXJpb3Igc2hlbGwuCkBAIC0zNzQyLDYgKzM3OTgsMzA2IEBAIHRleC1jaGt0 ZXgKICAgICAgIChwcm9jZXNzLXNlbmQtcmVnaW9uIHRleC1jaGt0ZXgtLXByb2Nlc3MgKHBvaW50 LW1pbikgKHBvaW50LW1heCkpCiAgICAgICAocHJvY2Vzcy1zZW5kLWVvZiB0ZXgtY2hrdGV4LS1w cm9jZXNzKSkpKQogCisMCis7OzsgWHJlZiBiYWNrZW5kCisKKzs7IEhlcmUgd2UgbGlnaHRseSBh ZGFwdCB0aGUgZGVmYXVsdCBldGFncyBiYWNrZW5kIGZvciB4cmVmIHNvIHRoYXQKKzs7IHRoZSBt YWluIHhyZWYgdXNlciBjb21tYW5kcyAoaW5jbHVkaW5nIGB4cmVmLWZpbmQtZGVmaW5pdGlvbnMn LAorOzsgYHhyZWYtZmluZC1hcHJvcG9zJywgYW5kIGB4cmVmLWZpbmQtcmVmZXJlbmNlcycgW29u IE0tLiwgQy1NLS4sIGFuZAorOzsgTS0/LCByZXNwZWN0aXZlbHldKSB3b3JrIGluIFRlWCBidWZm ZXJzLiAgVGhlIG9ubHkgbWV0aG9kcyB3ZQorOzsgYWN0dWFsbHkgbW9kaWZ5IGFyZSBgeHJlZi1i YWNrZW5kLWlkZW50aWZpZXItYXQtcG9pbnQnIGFuZAorOzsgYHhyZWYtYmFja2VuZC1yZWZlcmVu Y2VzJy4gIE1hbnkgb2YgdGhlIGNvbXBsaWNhdGlvbnMgaGVyZSwgYW5kIGluCis7OyBgZXRhZ3Mn IGl0c2VsZiwgYXJlIGR1ZSB0byB0aGUgbmVjZXNzaXR5IG9mIHBhcnNpbmcgYm90aCB0aGUgb2xk Cis7OyBUZVggc3ludGF4IGFuZCB0aGUgbmV3IGV4cGwzIHN5bnRheCwgd2hpY2ggd2lsbCBjb250 aW51ZSB0byBhcHBlYXIKKzs7IHRvZ2V0aGVyIGluIGRvY3VtZW50cyBmb3IgdGhlIGZvcmVzZWVh YmxlIGZ1dHVyZS4gIFN5bmNocm9uaXppbmcKKzs7IEVtYWNzIGFuZCBgZXRhZ3MnIHRoaXMgd2F5 IGFpbXMgdG8gaW1wcm92ZSB0aGUgdXNlciBleHBlcmllbmNlICJvdXQKKzs7IG9mIHRoZSBib3gu IgorCisoZGVmdmFyIHRleC10aGluZ2F0cHQtZXhjbHVkZS1jaGFycyAnKD9cXCA/XHsgP1x9KQor ICAiRXhjbHVkZSB0aGVzZSBjaGFycyBieSBkZWZhdWx0IGZyb20gVGVYIHRoaW5nLWF0LXBvaW50 LgorCitUaGUgVGVYIGB4cmVmLWJhY2tlbmQtaWRlbnRpZmllci1hdC1wb2ludCcgbWV0aG9kIHVz ZXMgdGhlIGNoYXJhY3RlcnMKK2xpc3RlZCBpbiB0aGlzIHZhcmlhYmxlIHRvIGRlY2lkZSBvbiB0 aGUgZGVmYXVsdCBzZWFyY2ggc3RyaW5nIHRvCitwcmVzZW50IHRvIHRoZSB1c2VyIHdobyBjYWxs cyBhbiBgeHJlZicgY29tbWFuZC4gIFRoZXNlIGNoYXJhY3RlcnMKK2JlY29tZSBwYXJ0IG9mIGEg cmVnZXhwIHdoaWNoIGFsd2F5cyBleGNsdWRlcyB0aGVtIGZyb20gdGhhdCBkZWZhdWx0CitzdHJp bmcuICBGb3IgdGhlIGB4cmVmJyBjb21tYW5kcyB0byBmdW5jdGlvbiBwcm9wZXJseSBpbiBUZVgg YnVmZmVycywgYXQKK2xlYXN0IHRoZSBUZVggZXNjYXBlIGFuZCB0aGUgdHdvIFRlWCBncm91cGlu ZyBjaGFyYWN0ZXJzIHNob3VsZCBiZQorbGlzdGVkIGhlcmUuICBTaG91bGQgeW91ciBUZVggZG9j dW1lbnRzIGNvbnRhaW4gb3RoZXIgY2hhcmFjdGVycyB3aGljaAoreW91IHdhbnQgdG8gZXhjbHVk ZSBieSBkZWZhdWx0LCB0aGVuIHlvdSBjYW4gYWRkIHRoZW0gdG8gdGhlIGxpc3QsCit0aG91Z2gg eW91IG1heSB3aXNoIHRvIGNvbnN1bHQgdGhlIGZ1bmN0aW9ucworYHRleC10aGluZ2F0cHQtLWJl Z2lubmluZy1vZi1zeW1ib2wnIGFuZCBgdGV4LXRoaW5nYXRwdC0tZW5kLW9mLXN5bWJvbCcKK3Rv IHNlZSB3aGF0IHRoZSByZWdleHAgYWxyZWFkeSBjb250YWlucy4gIElmIHlvdXIgZG9jdW1lbnRz IGNvbnRhaW4KK25vbi1zdGFuZGFyZCBlc2NhcGUgYW5kIGdyb3VwaW5nIGNoYXJhY3RlcnMsIHRo ZW4geW91IGNhbiByZXBsYWNlIHRoZQordGhyZWUgbGlzdGVkIGhlcmUgd2l0aCB5b3VyIG93biwg dGhlcmVieSBhbGxvd2luZyB0aGUgdGhyZWUgc3RhbmRhcmQKK2NoYXJhY3RlcnMgdG8gYXBwZWFy IGJ5IGRlZmF1bHQgaW4gc2VhcmNoIHN0cmluZ3MuICBQbGVhc2UgYmUgYXdhcmUsCitob3dldmVy LCB0aGF0IHRoZSBgZXRhZ3MnIHByb2dyYW0gb25seSByZWNvZ25pemVzIGBcXCcgKDkyKSBhbmQg YCEnICgzMykKK2FzIGVzY2FwZSBjaGFyYWN0ZXJzIGluIFRlWCBkb2N1bWVudHMsIGFuZCBpZiBp dCBkZXRlY3RzIHRoZSBsYXR0ZXIgaXQKK2Fsc28gdXNlcyBgPD4nIGFzIHRoZSBUZVggZ3JvdXBp bmcgY29uc3RydWN0IHJhdGhlciB0aGFuIGB7fScuICBTZXR0aW5nCit0aGUgZXNjYXBlIGFuZCBn cm91cGluZyBjaGFycyB0byBhbnl0aGluZyBvdGhlciB0aGFuIGBcXD1cXHt9JyBvciBgITw+Jwor d2lsbCBub3QgYmUgdXNlZnVsIHdpdGhvdXQgY2hhbmdlcyB0byBgZXRhZ3MnLCBhdCBsZWFzdCBm b3IgY29tbWFuZHMKK3RoYXQgc2VhcmNoIHRhZ3MgdGFibGVzLCBzdWNoIGFzIFxcW3hyZWYtZmlu ZC1kZWZpbml0aW9uc10gYW5kIFwKK1xcW3hyZWYtZmluZC1hcHJvcG9zXS4KKworU2hvdWxkIHlv dSB3aXNoIHRvIGNoYW5nZSB0aGUgZGVmYXVsdHMsIHBsZWFzZSBhbHNvIGJlIGF3YXJlIHRoYXQs Cit3aXRob3V0IGZ1cnRoZXIgbW9kaWZpY2F0aW9ucyB0byB0ZXgtbW9kZS5lbCwgdGhlIHVzdWFs IHRleHQtcGFyc2luZworcm91dGluZXMgZm9yIGBmb250LWxvY2snIGFuZCB0aGUgbGlrZSB3b24n dCB3b3JrIGNvcnJlY3RseSwgYXMgdGhlCitkZWZhdWx0IGVzY2FwZSBhbmQgZ3JvdXBpbmcgY2hh cmFjdGVycyBhcmUgY3VycmVudGx5IGhhcmQgY29kZWQgaW4gbWFueQorcGxhY2VzLiIpCisKKzs7 IFBvcHVsYXRlIGBzZW1hbnRpYy1zeW1yZWYtZmlsZXBhdHRlcm4tYWxpc3QnIGZvciB0aGUgaW4t dHJlZSBtb2RlczsKKzs7IEFVQ1RlWCBpcyBkb2luZyB0aGUgc2FtZSBmb3IgaXRzIG1vZGVzLgor KHdpdGgtZXZhbC1hZnRlci1sb2FkICdzZW1hbnRpYy9zeW1yZWYvZ3JlcAorICAoZGVmdmFyIHNl bWFudGljLXN5bXJlZi1maWxlcGF0dGVybi1hbGlzdCkKKyAgKHB1c2ggJyhsYXRleC1tb2RlICIq Llt0VF1lW3hYXSIgIioubHR4IiAiKi5zdHkiICIqLmNsW3NvXSIKKyAgICAgICAgICAgICAgICAg ICAgICIqLmJibCIgIiouZHJ2IiAiKi5odmEiKQorICAgICAgICBzZW1hbnRpYy1zeW1yZWYtZmls ZXBhdHRlcm4tYWxpc3QpCisgIChwdXNoICcocGxhaW4tdGV4LW1vZGUgIiouW3RUXWVbeFhdIiAi Ki5pbnMiKQorICAgICAgICBzZW1hbnRpYy1zeW1yZWYtZmlsZXBhdHRlcm4tYWxpc3QpCisgIChw dXNoICcoZG9jdGV4LW1vZGUgIiouZHR4Iikgc2VtYW50aWMtc3ltcmVmLWZpbGVwYXR0ZXJuLWFs aXN0KSkKKworKGRlZnVuIHRleC0teHJlZi1iYWNrZW5kICgpICd0ZXgtZXRhZ3MpCisKKyhjbC1k ZWZtZXRob2QgeHJlZi1iYWNrZW5kLWlkZW50aWZpZXItYXQtcG9pbnQgKChfYmFja2VuZCAoZXFs ICd0ZXgtZXRhZ3MpKSkKKyAgKHJlcXVpcmUgJ2V0YWdzKQorICAodGV4LS10aGluZy1hdC1wb2lu dCkpCisKKzs7IFRoZSBkZXRlY3Rpb24gb2YgYF8nIGFuZCBgOicgaXMgYSBwcmltaXRpdmUgbWV0 aG9kIGZvciBkZXRlcm1pbmluZworOzsgd2hldGhlciBwb2ludCBpcyBvbiBhbiBleHBsMyBjb25z dHJ1Y3QuICBJdCBtYXkgZmFpbCBpbiBzb21lCis7OyBpbnN0YW5jZXMuCisoZGVmdW4gdGV4LS10 aGluZy1hdC1wb2ludCAoKQorICAiRGVtYXJjYXRlIGB0aGluZy1hdC1wb2ludCcgZm9yIHRoZSBU ZVggYHhyZWYnIGJhY2tlbmQuIgorICAobGV0ICgoYm91bmRzICh0ZXgtLWJvdW5kcy1vZi1zeW1i b2wtYXQtcG9pbnQpKSkKKyAgICAod2hlbiBib3VuZHMKKyAgICAgIChsZXQgKCh0ZXhzeW0gKGJ1 ZmZlci1zdWJzdHJpbmctbm8tcHJvcGVydGllcyAoY2FyIGJvdW5kcykgKGNkciBib3VuZHMpKSkp CisgICAgICAgIChpZiAoYW5kIChub3QgKHN0cmluZy1tYXRjaC1wICJyZWZlcmVuY2UiIChzeW1i b2wtbmFtZSB0aGlzLWNvbW1hbmQpKSkKKyAgICAgICAgICAgICAgICAgKHNlcS1jb250YWlucy1w IHRleHN5bSA/XykKKyAgICAgICAgICAgICAgICAgKHNlcS1jb250YWlucy1wIHRleHN5bSA/Oikp CisgICAgICAgICAgICAoc2VxLXRha2UgdGV4c3ltIChzZXEtcG9zaXRpb24gdGV4c3ltID86KSkK KyAgICAgICAgICB0ZXhzeW0pKSkpKQorCisoZGVmdW4gdGV4LXRoaW5nYXRwdC0tYmVnaW5uaW5n LW9mLXN5bWJvbCAoKQorICAoYW5kCisgICAocmUtc2VhcmNoLWJhY2t3YXJkIChjb25jYXQgIltd WyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWFwY29uY2F0ICMncmVnZXhwLXF1 b3RlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWFwY2FyICMn Y2hhci10by1zdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGV4LXRoaW5nYXRwdC1leGNsdWRlLWNoYXJzKSkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiXCIqYCcjPSYoKSUsfCRbOmNudHJsOl1bOmJsYW5rOl1dIikpCisgICAo Zm9yd2FyZC1jaGFyKSkpCisKKyhkZWZ1biB0ZXgtdGhpbmdhdHB0LS1lbmQtb2Ytc3ltYm9sICgp CisgIChhbmQKKyAgIChyZS1zZWFyY2gtZm9yd2FyZCAoY29uY2F0ICJbXVsiCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAobWFwY29uY2F0ICMncmVnZXhwLXF1b3RlCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWFwY2FyICMnY2hhci10by1zdHJpbmcK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4LXRo aW5nYXRwdC1leGNsdWRlLWNoYXJzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJc IipgJyM9JigpJSx8JFs6Y250cmw6XVs6Ymxhbms6XV0iKSkKKyAgIChiYWNrd2FyZC1jaGFyKSkp CisKKyhkZWZ1biB0ZXgtLWJvdW5kcy1vZi1zeW1ib2wtYXQtcG9pbnQgKCkKKyAgIlNpbXBsaWZ5 IGBib3VuZHMtb2YtdGhpbmctYXQtcG9pbnQnIGZvciBUZVggYHhyZWYnIGJhY2tlbmQuIgorICAo bGV0ICgob3JpZyAocG9pbnQpKSkKKyAgICAoaWdub3JlLWVycm9ycworICAgICAgKHNhdmUtZXhj dXJzaW9uCisJKHRleC10aGluZ2F0cHQtLWVuZC1vZi1zeW1ib2wpCisJKHRleC10aGluZ2F0cHQt LWJlZ2lubmluZy1vZi1zeW1ib2wpCisJKGxldCAoKGJlZyAocG9pbnQpKSkKKwkgIChpZiAoPD0g YmVnIG9yaWcpCisJICAgICAgKGxldCAoKHJlYWwtZW5kCisJCSAgICAgKHByb2duCisJCSAgICAg ICAodGV4LXRoaW5nYXRwdC0tZW5kLW9mLXN5bWJvbCkKKwkJICAgICAgIChwb2ludCkpKSkKKwkJ KGNvbmQgKChhbmQgKDw9IG9yaWcgcmVhbC1lbmQpICg8IGJlZyByZWFsLWVuZCkpCisJCSAgICAg ICAoY29ucyBiZWcgcmVhbC1lbmQpKQorICAgICAgICAgICAgICAgICAgICAgICgoYW5kICg9IG9y aWcgcmVhbC1lbmQpICg9IGJlZyByZWFsLWVuZCkpCisJCSAgICAgICAoY29ucyBiZWcgKDErIGJl ZykpKSkpKSkpKSkpOzsgRm9yIDEtY2hhciBUZVggY29tbWFuZHMuCisKKyhjbC1kZWZtZXRob2Qg eHJlZi1iYWNrZW5kLWlkZW50aWZpZXItY29tcGxldGlvbi10YWJsZSAoKF9iYWNrZW5kCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXFs ICd0ZXgtZXRhZ3MpKSkKKyAgKHhyZWYtYmFja2VuZC1pZGVudGlmaWVyLWNvbXBsZXRpb24tdGFi bGUgJ2V0YWdzKSkKKworKGNsLWRlZm1ldGhvZCB4cmVmLWJhY2tlbmQtaWRlbnRpZmllci1jb21w bGV0aW9uLWlnbm9yZS1jYXNlICgoX2JhY2tlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcWwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGV4LWV0 YWdzKSkpCisgICh4cmVmLWJhY2tlbmQtaWRlbnRpZmllci1jb21wbGV0aW9uLWlnbm9yZS1jYXNl ICdldGFncykpCisKKyhjbC1kZWZtZXRob2QgeHJlZi1iYWNrZW5kLWRlZmluaXRpb25zICgoX2Jh Y2tlbmQgKGVxbCAndGV4LWV0YWdzKSkgc3ltYm9sKQorICAoeHJlZi1iYWNrZW5kLWRlZmluaXRp b25zICdldGFncyBzeW1ib2wpKQorCisoY2wtZGVmbWV0aG9kIHhyZWYtYmFja2VuZC1hcHJvcG9z ICgoX2JhY2tlbmQgKGVxbCAndGV4LWV0YWdzKSkgcGF0dGVybikKKyAgKHhyZWYtYmFja2VuZC1h cHJvcG9zICdldGFncyBwYXR0ZXJuKSkKKworOzsgVGhlIGB4cmVmLWJhY2tlbmQtcmVmZXJlbmNl cycgbWV0aG9kIHJlcXVpcmVzIG1vcmUgY29kZSB0aGFuIHRoZQorOzsgb3RoZXJzIGZvciBhdCBs ZWFzdCB0d28gbWFpbiByZWFzb25zOiBUZVggYXV0aG9ycyBoYXZlIHR5cGljYWxseSBiZWVuCis7 OyBmcmVlIGluIHRoZWlyIGludmVudGlvbiBvZiBuZXcgZmlsZSB0eXBlcyB3aXRoIG5ldyBzdWZm aXhlcywgYW5kIHRoZXkKKzs7IGhhdmUgYWxzbyB0ZW5kZWQgc29tZXRpbWVzIHRvIGluY2x1ZGUg bm9uLXN5bWJvbCBjaGFyYWN0ZXJzIGluCis7OyBjb21tYW5kIG5hbWVzLiAgV2hlbiBjb21iaW5l ZCB3aXRoIHRoZSBkZWZhdWx0IFNlbWFudGljIFN5bWJvbAorOzsgUmVmZXJlbmNlIEFQSSwgdGhl c2UgdHdvIGNoYXJhY3RlcmlzdGljcyBvZiBUZVggY29kZSBtZWFuIHRoYXQgYQorOzsgY29tbWFu ZCBsaWtlIGB4cmVmLWZpbmQtcmVmZXJlbmNlcycgd291bGQgb2Z0ZW4gZmFpbCB0byBmaW5kIGFu eSBoaXRzCis7OyBmb3IgYSBzeW1ib2wgYXQgcG9pbnQsIGluY2x1ZGluZyB0aGUgb25lIHVuZGVy IHBvaW50IGluIHRoZSBjdXJyZW50Cis7OyBidWZmZXIsIG9yIGl0IHdvdWxkIGZpbmQgb25seSBz b21lIGluc3RhbmNlcyBhbmQgc2tpcCBvdGhlcnMuCisKKyhkZWZ1biB0ZXgtZmluZC1yZWZlcmVu Y2VzLXN5bnRheC10YWJsZSAoKQorICAobGV0ICgoc3QgKGlmIChib3VuZHAgJ1RlWC1tb2RlLXN5 bnRheC10YWJsZSkKKyAgICAgICAgICAgICAgICAgKG1ha2Utc3ludGF4LXRhYmxlIFRlWC1tb2Rl LXN5bnRheC10YWJsZSkKKyAgICAgICAgICAgICAgIChtYWtlLXN5bnRheC10YWJsZSB0ZXgtbW9k ZS1zeW50YXgtdGFibGUpKSkpCisgICAgc3QpKQorCisoZGVmdmFyIHRleC0teHJlZi1zeW50YXgt ZnVuIG5pbCkKKworKGRlZnVuIHRleC14cmVmLXN5bnRheC1mdW5jdGlvbiAoc3RyIGJlZyBlbmQp CisgICJQcm92aWRlIGEgYmVzcG9rZSBgc3ludGF4LXByb3BlcnRpemUtZnVuY3Rpb24nIGZvciBc XFt4cmVmLWZpbmQtcmVmZXJlbmNlc10uIgorICAobGV0KiAoZ3JwYiB0ZW1wc3RyCisgICAgICAg ICAgICAgIChzaHJ0c3RyIChpZiBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcm9n bgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2V0cSB0ZW1wc3RyIChzZXEtdGFrZSBz dHIgKDEtIChsZW5ndGggc3RyKSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYg YmVnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2V0cSB0ZW1wc3RyIChzZXEt ZHJvcCB0ZW1wc3RyIDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBzdHIp KQorICAgICAgICAgICAgICAgICAgICAgICAgIChzZXEtZHJvcCBzdHIgMSkpKQorICAgICAgICAg ICAgICAoZ3JwYSAoaWYgKGFuZCBiZWcgZW5kKQorICAgICAgICAgICAgICAgICAgICAgICAgKHBy b2cxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpc3QgMSAiXyIpCisgICAgICAgICAg ICAgICAgICAgICAgICAgIChzZXRxIGdycGIgKGxpc3QgMiAiXyIpKSkKKyAgICAgICAgICAgICAg ICAgICAgICAobGlzdCAxICJfIikpKQorICAgICAgICAgICAgICAocmUgKGNvbmNhdCBiZWcgKHJl Z2V4cC1xdW90ZSBzaHJ0c3RyKSBlbmQpKQorICAgICAgICAgICAgICAodGVtcC1ydWxlIChpZiBn cnBiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0IHJlIGdycGEgZ3JwYikKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0IHJlIGdycGEpKSkpCisgICAgOzsgU2ltcGxl IGJlbmNobWFya3Mgc3VnZ2VzdGVkIHRoYXQgdGhlIHNwZWVkLXVwIGZyb20gY29tcGlsaW5nIHRo aXMKKyAgICA7OyBmdW5jdGlvbiB3YXMgbmVhcmx5IG5pbCwgc28gYGV2YWwnIGFuZCBpdHMgbm9u LWJ5dGUtY29tcGlsZWQKKyAgICA7OyBmdW5jdGlvbiByZW1haW4uCisgICAgKHNldHEgdGV4LS14 cmVmLXN5bnRheC1mdW4gKGV2YWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYChz eW50YXgtcHJvcGVydGl6ZS1ydWxlcyAsdGVtcC1ydWxlKSkpKSkKKworKGRlZnVuIHRleC0tY29s bGVjdC1maWxlLWV4dGVuc2lvbnMgKCkKKyAgIkdhdGhlciBUZVggZmlsZSBleHRlbnNpb25zIGZy b20gYGF1dG8tbW9kZS1hbGlzdCcuIgorICAobGV0KiAoKG1saXN0ICh3aGVuIChyYXNzcSBtYWpv ci1tb2RlIGF1dG8tbW9kZS1hbGlzdCkKKwkJICAoc2VxLWZpbHRlcgorCQkgICAobGFtYmRhIChl bHQpCisJCSAgICAgKGVxIChjZHIgZWx0KSBtYWpvci1tb2RlKSkKKwkJICAgYXV0by1tb2RlLWFs aXN0KSkpCisJIChsY3N5bSAoaW50ZXJuLXNvZnQgKGRvd25jYXNlIChzeW1ib2wtbmFtZSBtYWpv ci1tb2RlKSkpKQorCSAobGNsaXN0IChhbmQgbGNzeW0KKwkJICAgICAgKG5vdCAoZXEgbGNzeW0g bWFqb3ItbW9kZSkpCisJCSAgICAgIChyYXNzcSBsY3N5bSBhdXRvLW1vZGUtYWxpc3QpCisJCSAg ICAgIChzZXEtZmlsdGVyCisJCSAgICAgICAobGFtYmRhIChlbHQpCisJCQkgKGVxIChjZHIgZWx0 KSBsY3N5bSkpCisJCSAgICAgICBhdXRvLW1vZGUtYWxpc3QpKSkKKwkgKHNob3J0c3ltICh3aGVu IChzdHJpbmdwIG1vZGUtbmFtZSkKKwkJICAgICAoaW50ZXJuLXNvZnQgKGNvbmNhdCAoc3RyaW5n LXRyaW0tcmlnaHQgbW9kZS1uYW1lICIvLioiKQorCQkJCQkgICItbW9kZSIpKSkpCisJIChsY3No b3J0c3ltICh3aGVuIChzdHJpbmdwIG1vZGUtbmFtZSkKKwkJICAgICAgIChpbnRlcm4tc29mdCAo ZG93bmNhc2UKKwkJCQkgICAgIChjb25jYXQKKwkJCQkgICAgICAoc3RyaW5nLXRyaW0tcmlnaHQg bW9kZS1uYW1lICIvLioiKQorCQkJCSAgICAgICItbW9kZSIpKSkpKQorCSAoc2hsaXN0IChhbmQg c2hvcnRzeW0KKwkJICAgICAgKG5vdCAoZXEgc2hvcnRzeW0gbWFqb3ItbW9kZSkpCisJCSAgICAg IChub3QgKGVxIHNob3J0c3ltIGxjc3ltKSkKKwkJICAgICAgKHJhc3NxIHNob3J0c3ltIGF1dG8t bW9kZS1hbGlzdCkKKwkJICAgICAgKHNlcS1maWx0ZXIKKwkJICAgICAgIChsYW1iZGEgKGVsdCkK KwkJCSAoZXEgKGNkciBlbHQpIHNob3J0c3ltKSkKKwkJICAgICAgIGF1dG8tbW9kZS1hbGlzdCkp KQorCSAobGNzaGxpc3QgKGFuZCBsY3Nob3J0c3ltCisJCQkobm90IChlcSBsY3Nob3J0c3ltIG1h am9yLW1vZGUpKQorCQkJKG5vdCAoZXEgbGNzaG9ydHN5bSBsY3N5bSkpCisJCQkocmFzc3EgbGNz aG9ydHN5bSBhdXRvLW1vZGUtYWxpc3QpCisJCQkoc2VxLWZpbHRlcgorCQkJIChsYW1iZGEgKGVs dCkKKwkJCSAgIChlcSAoY2RyIGVsdCkgbGNzaG9ydHN5bSkpCisJCQkgYXV0by1tb2RlLWFsaXN0 KSkpCisJIChleHRzICh3aGVuIChvciBtbGlzdCBsY2xpc3Qgc2hsaXN0IGxjc2hsaXN0KQorCQkg KHNlcS11bmlvbiAoc2VxLW1hcCAjJ2NhciBsY2xpc3QpCisJCQkgICAgKHNlcS11bmlvbiAoc2Vx LW1hcCAjJ2NhciBtbGlzdCkKKwkJCQkgICAgICAgKHNlcS11bmlvbiAoc2VxLW1hcCAjJ2NhciBs Y3NobGlzdCkKKwkJCQkJCSAgKHNlcS1tYXAgIydjYXIgc2hsaXN0KSkpKSkpCisJIChlZC1leHRz ICh3aGVuIGV4dHMKKwkJICAgIChzZXEtbWFwCisJCSAgICAgKGxhbWJkYSAoZWx0KQorCQkgICAg ICAgKGNvbmNhdCAiKiIgKHN0cmluZy10cmltICBlbHQgIlxcXFwiICJcXFxcJyIpKSkKKwkJICAg ICBleHRzKSkpKQorICAgIGVkLWV4dHMpKQorCisoZGVmdmFyIHRleC0tYnVmZmVycy1saXN0IG5p bCkKKyhkZWZ2YXItbG9jYWwgdGV4LS1vbGQtc3ludGF4LWZ1bmN0aW9uIG5pbCkKKworKGNsLWRl Zm1ldGhvZCB4cmVmLWJhY2tlbmQtcmVmZXJlbmNlcyAoKF9iYWNrZW5kIChlcWwgJ3RleC1ldGFn cykpIGlkZW50aWZpZXIpCisgICJGaW5kIHJlZmVyZW5jZXMgb2YgSURFTlRJRklFUiBpbiBUZVgg YnVmZmVycyBhbmQgZmlsZXMuIgorICAocmVxdWlyZSAnc2VtYW50aWMvc3ltcmVmL2dyZXApCisg IChkZWZ2YXIgc2VtYW50aWMtc3ltcmVmLWZpbGVwYXR0ZXJuLWFsaXN0KQorICAobGV0IChidWZz IHRleGJ1ZnMKKyAgICAgICAgICAgICAobW9kZSBtYWpvci1tb2RlKSkKKyAgICAoZG9saXN0IChi dWYgKGJ1ZmZlci1saXN0KSkKKyAgICAgIChpZiAoZXEgKGJ1ZmZlci1sb2NhbC12YWx1ZSAnbWFq b3ItbW9kZSBidWYpIG1vZGUpCisgICAgICAgICAgKHB1c2ggYnVmIGJ1ZnMpCisgICAgICAgICh3 aGVuIChzdHJpbmctbWF0Y2gtcCAiLipcXC5bdFRdZVt4WF0iIChidWZmZXItbmFtZSBidWYpKQor ICAgICAgICAgIChwdXNoIGJ1ZiB0ZXhidWZzKSkpKQorICAgICh1bmxlc3MgKHNlcS1zZXQtZXF1 YWwtcCB0ZXgtLWJ1ZmZlcnMtbGlzdCBidWZzKQorICAgICAgKGxldCogKChhbWFsaXN0ICh0ZXgt LWNvbGxlY3QtZmlsZS1leHRlbnNpb25zKSkKKwkgICAgIChleHRsaXN0IChhbGlzdC1nZXQgbW9k ZSBzZW1hbnRpYy1zeW1yZWYtZmlsZXBhdHRlcm4tYWxpc3QpKQorCSAgICAgKGV4dGxpc3QtbmV3 IChzZXEtdW5pcQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlcS11bmlvbiBhbWFsaXN0 IGV4dGxpc3QgIydzdHJpbmctbWF0Y2gtcCkpKSkKKwkoc2V0cSB0ZXgtLWJ1ZmZlcnMtbGlzdCBi dWZzKQorCShkb2xpc3QgKGJ1ZiBidWZzKQorCSAgKHdoZW4tbGV0ICgoZmJ1ZiAoYnVmZmVyLWZp bGUtbmFtZSBidWYpKQorCQkgICAgIChleHQgKGZpbGUtbmFtZS1leHRlbnNpb24gZmJ1ZikpCisJ CSAgICAgKGZpbmV4dCAoY29uY2F0ICIqLiIgZXh0KSkKKwkJICAgICAoKG5vdCAoc2VxLWZpbmQg KGxhbWJkYSAoZWx0KSAoc3RyaW5nLW1hdGNoLXAgZWx0IGZpbmV4dCkpCisJCQkJICAgICBleHRs aXN0LW5ldykpKQorCQkgICAgICgocHVzaCBmaW5leHQgZXh0bGlzdC1uZXcpKSkpKQorCSh1bmxl c3MgKHNlcS1zZXQtZXF1YWwtcCBleHRsaXN0LW5ldyBleHRsaXN0KQorCSAgKHNldGYgKGFsaXN0 LWdldCBtb2RlIHNlbWFudGljLXN5bXJlZi1maWxlcGF0dGVybi1hbGlzdCkKKyAgICAgICAgICAg ICAgICBleHRsaXN0LW5ldykpKSkKKyAgICAobGV0KiAoc2V0c3ludGF4CisgICAgICAgICAgIChw dW5jdCAod2l0aC1zeW50YXgtdGFibGUgKHRleC1maW5kLXJlZmVyZW5jZXMtc3ludGF4LXRhYmxl KQorICAgICAgICAgICAgICAgICAgICAoc2VxLXBvc2l0aW9ucyBpZGVudGlmaWVyIChsaXN0ID93 ID9fKQorCQkJICAgICAgICAgICAobGFtYmRhIChlbHQgc3ljb2RlKQorCQkJICAgICAgICAgICAg IChub3QgKG1lbXEgKGNoYXItc3ludGF4IGVsdCkgc3ljb2RlKSkpKSkpCisgICAgICAgICAgIChl bmQgKGFuZCBwdW5jdAorICAgICAgICAgICAgICAgICAgICAgKG1lbXEgKDEtIChsZW5ndGggaWRl bnRpZmllcikpIHB1bmN0KQorICAgICAgICAgICAgICAgICAgICAgKD4gKGxlbmd0aCBpZGVudGlm aWVyKSAxKQorICAgICAgICAgICAgICAgICAgICAgKGNvbmNhdCAiXFwoIgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAocmVnZXhwLXF1b3RlCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoc3RyaW5nIChlbHQgaWRlbnRpZmllcgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICgxLSAobGVuZ3RoIGlkZW50aWZpZXIpKSkpKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiXFwpIikpKQorICAgICAgICAgICAoYmVnIChhbmQgcHVuY3QKKyAg ICAgICAgICAgICAgICAgICAgIChtZW1xIDAgcHVuY3QpCisgICAgICAgICAgICAgICAgICAgICAo Y29uY2F0ICJcXCgiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZWdleHAtcXVvdGUg KHN0cmluZyAoZWx0IGlkZW50aWZpZXIgMCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiXFwpIikpKQorICAgICAgICAgICAodGV4dC1tb2RlLWhvb2sKKyAgICAgICAgICAgIChpZiAo b3IgZW5kIGJlZykKKyAgICAgICAgICAgICAgICAocHJvZ24KKyAgICAgICAgICAgICAgICAgICh0 ZXgteHJlZi1zeW50YXgtZnVuY3Rpb24gaWRlbnRpZmllciBiZWcgZW5kKQorICAgICAgICAgICAg ICAgICAgKHNldHEgc2V0c3ludGF4IChsYW1iZGEgKCkKKwkJICAgICAgICAgICAgICAgICAgICAo c2V0cS1sb2NhbCBzeW50YXgtcHJvcGVydGl6ZS1mdW5jdGlvbgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4LS14cmVmLXN5bnRheC1mdW4pCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2V0cS1sb2NhbCBUZVgtc3R5bGUtaG9v ay1hcHBsaWVkLXAgdCkpKQorICAgICAgICAgICAgICAgICAgKGNvbnMgc2V0c3ludGF4IHRleHQt bW9kZS1ob29rKSkKKyAgICAgICAgICAgICAgdGV4dC1tb2RlLWhvb2spKSkKKyAgICAgICh1bmxl c3MgKG1lbXEgJ2RvY3RleC1tb2RlIChkZXJpdmVkLW1vZGUtYWxsLXBhcmVudHMgbW9kZSkpCisg ICAgICAgIChzZXRxIGJ1ZnMgKGFwcGVuZCB0ZXhidWZzIGJ1ZnMpKSkKKyAgICAgICh3aGVuIChv ciBlbmQgYmVnKQorICAgICAgICAoZG9saXN0IChidWYgYnVmcykKKyAgICAgICAgICAod2l0aC1j dXJyZW50LWJ1ZmZlciBidWYKKyAgICAgICAgICAgICh1bmxlc3MgKGxvY2FsLXZhcmlhYmxlLXAg J3RleC0tb2xkLXN5bnRheC1mdW5jdGlvbikKKyAgICAgICAgICAgICAgKHNldHEgdGV4LS1vbGQt c3ludGF4LWZ1bmN0aW9uIHN5bnRheC1wcm9wZXJ0aXplLWZ1bmN0aW9uKSkKKyAgICAgICAgICAg IChzZXRxLWxvY2FsIHN5bnRheC1wcm9wZXJ0aXplLWZ1bmN0aW9uCisgICAgICAgICAgICAgICAg ICAgICAgICB0ZXgtLXhyZWYtc3ludGF4LWZ1bikKKyAgICAgICAgICAgIChzeW50YXgtcHBzcy1m bHVzaC1jYWNoZSAocG9pbnQtbWluKSkpKSkKKyAgICAgICh1bndpbmQtcHJvdGVjdAorICAgICAg ICAgICh4cmVmLWJhY2tlbmQtcmVmZXJlbmNlcyBuaWwgaWRlbnRpZmllcikKKyAgICAgICAgKHdo ZW4gKG9yIGVuZCBiZWcpCisgICAgICAgICAgKGRvbGlzdCAoYnVmIGJ1ZnMpCisgICAgICAgICAg ICAod2l0aC1jdXJyZW50LWJ1ZmZlciBidWYKKyAgICAgICAgICAgICAgKHdoZW4gYnVmZmVyLWZp bGUtdHJ1ZW5hbWUKKyAgICAgICAgICAgICAgICAoc2V0cS1sb2NhbCBzeW50YXgtcHJvcGVydGl6 ZS1mdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleC0tb2xkLXN5bnRheC1m dW5jdGlvbikKKyAgICAgICAgICAgICAgICAoc3ludGF4LXBwc3MtZmx1c2gtY2FjaGUgKHBvaW50 LW1pbikpKSkpKSkpKSkKKwogKG1ha2Utb2Jzb2xldGUtdmFyaWFibGUgJ3RleC1tb2RlLWxvYWQt aG9vawogICAgICAgICAgICAgICAgICAgICAgICAgInVzZSBgd2l0aC1ldmFsLWFmdGVyLWxvYWQn IGluc3RlYWQuIiAiMjguMSIpCiAocnVuLWhvb2tzICd0ZXgtbW9kZS1sb2FkLWhvb2spCi0tIAoy LjM5LjQKCg== --000000000000d8a2b5061a216eeb--