From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Jimmy Yuen Ho Wong Newsgroups: gmane.emacs.bugs Subject: bug#31946: 27.0.50; The NSM should warn about more TLS problems Date: Sat, 30 Jun 2018 18:28:41 +0100 Message-ID: References: <87fu1apchn.fsf@gmail.com> <83in65r4n9.fsf@gnu.org> <87y3f1njku.fsf@gmail.com> <87tvpnojgt.fsf@gmail.com> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="000000000000e99d26056fdf4c89" X-Trace: blaine.gmane.org 1530379700 12773 195.159.176.226 (30 Jun 2018 17:28:20 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Sat, 30 Jun 2018 17:28:20 +0000 (UTC) Cc: 31946@debbugs.gnu.org, Noam Postavsky To: Lars Ingebrigtsen Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Sat Jun 30 19:28:15 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 1fZJfS-00039o-64 for geb-bug-gnu-emacs@m.gmane.org; Sat, 30 Jun 2018 19:28:14 +0200 Original-Received: from localhost ([::1]:47513 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZJhX-0001nn-K8 for geb-bug-gnu-emacs@m.gmane.org; Sat, 30 Jun 2018 13:30:23 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:34586) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZJhI-0001nZ-99 for bug-gnu-emacs@gnu.org; Sat, 30 Jun 2018 13:30:11 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fZJhE-0000g8-LR for bug-gnu-emacs@gnu.org; Sat, 30 Jun 2018 13:30:08 -0400 Original-Received: from debbugs.gnu.org ([208.118.235.43]:33529) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fZJhE-0000fc-Cj for bug-gnu-emacs@gnu.org; Sat, 30 Jun 2018 13:30:04 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1fZJhC-0007dp-LF for bug-gnu-emacs@gnu.org; Sat, 30 Jun 2018 13:30:03 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Jimmy Yuen Ho Wong Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 30 Jun 2018 17:30:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 31946 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: security Original-Received: via spool by 31946-submit@debbugs.gnu.org id=B31946.153037975729298 (code B ref 31946); Sat, 30 Jun 2018 17:30:02 +0000 Original-Received: (at 31946) by debbugs.gnu.org; 30 Jun 2018 17:29:17 +0000 Original-Received: from localhost ([127.0.0.1]:41426 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fZJgP-0007cR-W2 for submit@debbugs.gnu.org; Sat, 30 Jun 2018 13:29:17 -0400 Original-Received: from mail-it0-f51.google.com ([209.85.214.51]:40720) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fZJgJ-0007c7-W2 for 31946@debbugs.gnu.org; Sat, 30 Jun 2018 13:29:11 -0400 Original-Received: by mail-it0-f51.google.com with SMTP id 188-v6so7016167ita.5 for <31946@debbugs.gnu.org>; Sat, 30 Jun 2018 10:29:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=rRUymylXaGxqPP8VGIamWBPJHOklnPdw7mQuGYq5Puk=; b=fmJDzOtBTf4ZRdxCzRcA+sdeUtBxqTt5kzzOlbyt0nbbbTQtdsLGSpOHD1LIkO3yCY JH3vUeePcquTYllf2yEgZpxAqUcE6sZ+fXZB1r4pgbTaZBsdSv6A9fJneZ49kHEvuN22 XKN9Aqq8eakwRAr80CQ/Z2E9vywsPfCm0eFm7ZXuY3gRA3AbJ3AsNfbZQ/jURIstLCBx WfHZgDmn3UNpNQBJDwAkrEdx+edX5PuxKreM39pQqadnZeqmvWrFSdBtRYn9s/WxhyyO xVvYh82xON5KdA7UKbMBPCUeEAA95Z8dIas7VO74NT7aKmDiaNI8oeb8rB7oEq0m13JI MlJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=rRUymylXaGxqPP8VGIamWBPJHOklnPdw7mQuGYq5Puk=; b=Fdlmwt5hjFHFWyHkQNmOijy751feUUnxN9KxEz5Mx7eT+QYYoLO3J5CpB/SBz8kWAi L9bv0mt/OoOzxPV32hDRdyshj/+FZHwr6Nr2DXwHs2H7v10aSRkcaUXdurV0OnVC9KWC JGfLD7+kzTmvAnFFcyLDpWT/gau6C+3U3d8eI5ADCJFku/qHY6kaKLmnwa5TukOba3ey 3oTxI0DxzwwnKMkStKLatXwe0jkROlne89/oi7ul5XBqyk09TFy2tJgKedrX4nrkD4VM VdWL4UTWLFe123/LnzzPQCbiYUIh9KJtx/clO8uJvCFzn5gbIEaxWVkbAIH5asSILKYE M4CA== X-Gm-Message-State: APt69E2A4hpKZmGhmi4wz8SltnIlYiYu1KWolvusqzW81LPe1vW2EFw7 ojLRmTTUfW2hLsX+4wLvmTr08wzRqk/kVQqtYM4= X-Google-Smtp-Source: AAOMgpcKnDdzzIsdmFbwEpqR2F0k29IFx1tuFXLfKA7S7OiHJgTX+UjKvP7qzJ1ZVdPEgqbJL2he25C193G27KuHDCs= X-Received: by 2002:a02:1e08:: with SMTP id m8-v6mr16610101jad.8.1530379742311; Sat, 30 Jun 2018 10:29:02 -0700 (PDT) Original-Received: by 2002:a02:985d:0:0:0:0:0 with HTTP; Sat, 30 Jun 2018 10:28:41 -0700 (PDT) In-Reply-To: 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:148024 Archived-At: --000000000000e99d26056fdf4c89 Content-Type: text/plain; charset="UTF-8" Here's the patch promised. Summary of changes: * 9 new checks added, some for securing Emacs builts with older GnuTLS versions, some for bringing NSM checks to 2018. * Individual checks are now suffixe'd by their cipher suite part. E.g. dhe-kx for DHE key exchange, des-cipher for DES cipher, sha1-sig for SHA1 signature. * Protocal checks now return an error message instead of querying the user directly. * All protocol checks under the same network-security-level are performed. All of the messages are then merged if any, and the user is only prompt once after the protocol check for all problems found. * nsm-query and nsm-query-user no longer takes extra args to format messages. Formatted messages are now provided directly by the individual checks. * Fix RC4 check where it was previously checking for non-existent RC4 cipher from GnuTLS. GnuTLS actually calls RC4 ARCFOUR. * Removed sha1 check as it is already covered by the intermediate SHA1 checks. * DHE check now checks for < 1024 bit prime for 'medium and usage of DHE for 'high and above, in addition to prime bit length. Possible improvements: * Check for TLS compression. I haven't looked into how to do this with GnuTLS' API yet, but we should probably do this because CRIME and BREACH. * Check for TLS 1.0 usage and protocol downgrades? Today happens to be the deadline to migrate to TLS 1.1+ for PCI DSS compliance, but the reason seems to be POODLE, BEAST, CRIME, BREACH and Heartbleed and downgrade to SSL. Mitigations for some of these are already in existing checks, others may be covered by a compression check. Maybe we should be paranoid about this? Also, I'm not sure how to check for protocol downgrades with GnuTLS' API. * Write some unit tests.... I've manually tested this patch a bit, but please give this patch a look and see if I've missed anything. I need all the feedbacks I can get for this. Jimmy On Fri, Jun 29, 2018 at 6:25 AM, Jimmy Yuen Ho Wong wrote: > Correction: > > This is the actualy cipher string I used > "DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA384:DHE-RSA-AES256-SHA256". > > All 3 browsers fail to connect. > > On Fri, Jun 29, 2018 at 6:21 AM, Jimmy Yuen Ho Wong wrote: >> Update: >> >> I just tried with this node.js script: >> >> #! /usr/bin/env node >> >> const https = require('https'); >> const fs = require('fs'); >> >> const options = { >> key: fs.readFileSync('ryans-key.pem'), >> cert: fs.readFileSync('ryans-cert.pem'), >> ciphers: "DHE-RSA-AES128-GCM-SHA256" >> }; >> >> https.createServer(options, (req, res) => { >> res.writeHead(200); >> res.end('hello world\n'); >> }).listen(8000); >> >> Chrome gave me a ERR_SSL_VERSION_OR_CIPHER_MISMATCH, Firefox gave me a >> SSL_ERROR_NO_CYPHER_OVERLAP, Safari just told me it can't establish a >> connection. >> >> Conversely, changing DHE to ECDHE will at least show me the warning >> screen for a self-signed cert, so I'm fairly certain now that these 3 >> browsers have removed DHE KX. >> >> >> Heads up: >> >> I'm adding about 10 new checks into NSM ATM. Will send a early preview >> patch here later today for feedback. >> >> >> On Thu, Jun 28, 2018 at 7:15 PM, Jimmy Yuen Ho Wong wrote: >>> The Telemetry data[1] from Mozilla in bug report 1227519[2] suggests >>> DHE usage is very low for HTTP. No data for any other protocol. >>> >>> I just used Wireshark on Chrome and Firefox on macOS, they all seem to >>> advertise DH and DHE cipher suites in Client Hello for TLS 1.2, they >>> even advertise CBC mode ciphers too. While I'm not sure about Firefox, >>> surely Chrome has removed DHE_SHA KX and CBC modes according to >>> ChromeStatus[3]? >>> >>> >>> [1]: https://tlscanary.mozilla.org/runs/2018-01-25-01-21-44/ >>> [2]: https://bugzilla.mozilla.org/show_bug.cgi?id=1227519 >>> [3]: https://www.chromestatus.com/features#tls >>> >>> On Thu, Jun 28, 2018 at 6:01 PM, Lars Ingebrigtsen wrote: >>>> Jimmy Yuen Ho Wong writes: >>>> >>>>>> I can't see that that web page mentions Diffie-Hellman at all? >>>>>> >>>>> >>>>> Click on the individual browsers. >>>> >>>> I see. >>>> >>>>> SSLLabs only reports that Firefox 59 / Win 7 has dropped support for >>>>> DHE_RSA in the UA capabilities page[1], but client test[2] still shows >>>>> it is supported, so does Chrome and Safari. I don't understand what's >>>>> going on there. Could that list in in client test be static? Or that >>>>> browsers still advertise their support for DHE_RSA when in fact they >>>>> don't? Might have to get on a server and log out the TLS handshake to >>>>> see what's actually going on... >>>>> >>>>> [1]: https://www.ssllabs.com/ssltest/clients.html >>>>> [2]: https://www.ssllabs.com/ssltest/viewMyClient.html >>>> >>>> My >>>> >>>> Chromium 66.0.3359.117 (Developer Build) built on Debian 9.4, >>>> running on Debian 9.4 (64-bit) >>>> >>>> on the viewMyClient reports not supporting DHE-RSA. >>>> >>>> Confusing. :-) >>>> >>>> I tried finding a web site that says how many sites do not support ECDHE >>>> as key exchange, and only found something from 2014 that says that was >>>> 60%... >>>> >>>> -- >>>> (domestic pets only, the antidote for overdose, milk.) >>>> bloggy blog: http://lars.ingebrigtsen.no --000000000000e99d26056fdf4c89 Content-Type: application/octet-stream; name="0001-Modern-protocol-checks-for-NSM.patch" Content-Disposition: attachment; filename="0001-Modern-protocol-checks-for-NSM.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_jj1ncbuz0 RnJvbSAwOWRkYjQ4OTI4NzllOTMwMjViMGQ2ZjkyOTc5YjlmOGJlMzUwYzYyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKaW1teSBZdWVuIEhvIFdvbmcgPHd5dWVuaG9AZ21haWwuY29t PgpEYXRlOiBTYXQsIDMwIEp1biAyMDE4IDE3OjI4OjQ3ICswMTAwClN1YmplY3Q6IFtQQVRDSF0g TW9kZXJuIHByb3RvY29sIGNoZWNrcyBmb3IgTlNNCgoqIGxpc3AvbmV0L25zbS5lbAoobnNtLWNo ZWNrLWNlcnRpZmljYXRlLCBuc20tZmluZ2VycHJpbnQtb2stcCwKbnNtLWNoZWNrLXBsYWluLWNv bm5lY3Rpb24pOiBQcmUtZm9ybWF0IHF1ZXJ5IG1lc3NhZ2VzIGJlZm9yZSBwYXNzaW5nCnRvIG5z bS1xdWVyeS4KKG5zbS1xdWVyeSk6IE5vIGxvbmdlciB0YWtlcyBleHRyYSBhcmd1bWVudHMgZm9y IGZvcm1hdHRpbmcKbWVzc2FnZXMuCihuc20tcXVlcnktdXNlcik6IE5vIGxvbmdlciB0YWtlIGV4 dHJhIGFyZ3VtZW50cyBmb3IgZm9ybWF0dGluZwptZXNzYWdlcy4gJ3doYXQnIHBhcmFtZXRlciBj YW4gbm93IGJlIGEgbGlzdCBvZiBjb25kaXRpb25zLgoobnNtLWNoZWNrLXByb3RvY29sKTogUHJv bXB0cyB1c2VyIGZvciBhbGwgcHJvYmxlbXMKZm91bmQgaW5zdGVhZCBvZiBqdXN0IHRoZSBmaXJz dCBvbmUuCihuZXR3b3JrLXNlY3VyaXR5LXByb3RvY29sLWNoZWNrcyk6IEFkZCByc3gta3gsIGFu b24ta3gsCmV4cG9ydC1reCwgY2JjLWNpcGhlciwgZWNkc2EtY2JjLWNpcGhlciwgZGVzLWNpcGhl ciwgcmMyLWNpcGhlciwKbnVsbC1jaXBoZXIsIG1kNS1zaWcgY2hlY2tzLgoobnNtLXByb3RvY29s LWNoZWNrLS1kaWZmaWUtaGVsbG1hbi1wcmltZS1iaXRzKTogUmVuYW1lIHRvCm5zbS1wcm90b2Nv bC1jaGVjay0tZGhlLWt4LiBDaGVja3MgZm9yIHByaW1lIGJpdHMgPCAxMDI0IGZvciAnbWVkaXVt Cm5ldHdvcmstc2VjdXJpdHktbGV2ZWwgYW5kIHVzYWdlIG9mIERIRSBLWCBmb3IgJ2hpZ2ggaW4g YWRkaXRpb24gdG8KcHJpbWUgYml0cy4gU2hvcnRlbiBlcnJvciBtZXNzYWdlcy4KKG5zbS1wcm90 b2NvbC1jaGVjay0tcmM0KTogUmVuYW1lIHRvCm5zbS1wcm90b2NvbC1jaGVjay0tcmM0LWNpcGhl ci4gRml4IGJ1ZyB3aGVyZSBpdCB3YXMgcHJldmlvdXNseQpjaGVja2luZyBmb3Igbm9uLWV4aXN0 ZW50IGNpcGhlciBuYW1lIFJDNCBpbiBHbnVUTFMgaW5zdGVhZCBvZgpBUkNGT1VSLiBTaG9ydGVu IGVycm9yIG1lc3NhZ2UuCihuc20tcHJvdG9jb2wtY2hlY2stLXNpZ25hdHVyZS1zaGExKTogUmVt b3ZlZC4KKG5zbS1wcm90b2NvbC1jaGVjay0taW50ZXJtZWRpYXRlLXNoYTEpOiBSZW5hbWUgdG8K bnNtLXByb3RvY29sLWNoZWNrLS1zaGExLXNpZy4gU2hvcnRlbiBlcnJvciBtZXNzYWdlLgoKKEJ1 ZyMzMTk0NikKLS0tCiBsaXNwL25ldC9uc20uZWwgfCA1MTEgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKystLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgNDA0IGluc2VydGlv bnMoKyksIDEwNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9saXNwL25ldC9uc20uZWwgYi9s aXNwL25ldC9uc20uZWwKaW5kZXggMDY1M2NmYmIxYS4uZGY2N2ZlOWNmNiAxMDA2NDQKLS0tIGEv bGlzcC9uZXQvbnNtLmVsCisrKyBiL2xpc3AvbmV0L25zbS5lbApAQCAtMTY5LDI0ICsxNjksMzMg QEAgbnNtLWNoZWNrLWNlcnRpZmljYXRlCiAJKGlmIChhbmQgKG5vdCAobnNtLXdhcm5pbmdzLW9r LXAgc3RhdHVzIHNldHRpbmdzKSkKIAkJIChub3QgKG5zbS1xdWVyeQogCQkgICAgICAgaG9zdCBw b3J0IHN0YXR1cyAnY29uZGl0aW9ucwotCQkgICAgICAgIlRoZSBUTFMgY29ubmVjdGlvbiB0byAl czolcyBpcyBpbnNlY3VyZSBmb3IgdGhlIGZvbGxvd2luZyByZWFzb24lczpcblxuJXMiCi0JCSAg ICAgICBob3N0IHBvcnQKLQkJICAgICAgIChpZiAoPiAobGVuZ3RoIHdhcm5pbmdzKSAxKQotCQkJ ICAgInMiICIiKQotCQkgICAgICAgKG1hcGNvbmNhdCAjJ2dudXRscy1wZWVyLXN0YXR1cy13YXJu aW5nLWRlc2NyaWJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ3MK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4iKSkpKQorICAgICAgICAgICAg ICAgICAgICAgICAoZm9ybWF0LW1lc3NhZ2UKKwkJICAgICAgICAiVGhlIFRMUyBjb25uZWN0aW9u IHRvICVzOiVzIGlzIGluc2VjdXJlIGZvciB0aGUgZm9sbG93aW5nIHJlYXNvbiVzOlxuXG4lcyIK KwkJICAgICAgICBob3N0IHBvcnQKKwkJICAgICAgICAoaWYgKD4gKGxlbmd0aCB3YXJuaW5ncykg MSkKKwkJCSAgICAicyIgIiIpCisJCSAgICAgICAgKG1hcGNvbmNhdCAjJ2dudXRscy1wZWVyLXN0 YXR1cy13YXJuaW5nLWRlc2NyaWJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHdhcm5pbmdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbiIpKSkpKQog CSAgICAocHJvZ24KIAkgICAgICAoZGVsZXRlLXByb2Nlc3MgcHJvY2VzcykKIAkgICAgICBuaWwp CiAJICBwcm9jZXNzKSkpKSkpCiAKIChkZWZ2YXIgbmV0d29yay1zZWN1cml0eS1wcm90b2NvbC1j aGVja3MKLSAgJygoZGlmZmllLWhlbGxtYW4tcHJpbWUtYml0cyBtZWRpdW0gMTAyNCkKLSAgICAo cmM0IG1lZGl1bSkKLSAgICAoc2lnbmF0dXJlLXNoYTEgbWVkaXVtKQotICAgIChpbnRlcm1lZGlh dGUtc2hhMSBtZWRpdW0pCi0gICAgKDNkZXMgaGlnaCkKKyAgJygocnNhLWt4IGhpZ2gpCisgICAg KGRoZS1reCBtZWRpdW0pCisgICAgKGFub24ta3ggbWVkaXVtKQorICAgIChleHBvcnQta3ggbWVk aXVtKQorICAgIChjYmMtY2lwaGVyIGhpZ2gpCisgICAgKGVjZHNhLWNiYy1jaXBoZXIgbWVkaXVt KQorICAgICgzZGVzLWNpcGhlciBtZWRpdW0pCisgICAgKGRlcy1jaXBoZXIgbWVkaXVtKQorICAg IChyYzQtY2lwaGVyIG1lZGl1bSkKKyAgICAocmMyLWNpcGhlciBtZWRpdW0pCisgICAgKG51bGwt Y2lwaGVyIG1lZGl1bSkKKyAgICAoc2hhMS1zaWcgbWVkaXVtKQorICAgIChtZDUtc2lnIG1lZGl1 bSkKICAgICAoc3NsIG1lZGl1bSkpCiAgICJUaGlzIHZhcmlhYmxlIHNwZWNpZmllcyB3aGF0IFRM UyBjb25uZWN0aW9uIGNoZWNrcyB0byBwZXJmb3JtLgogSXQncyBhbiBhbGlzdCB3aGVyZSB0aGUg Zmlyc3QgZWxlbWVudCBpcyB0aGUgbmFtZSBvZiB0aGUgY2hlY2ssCkBAIC0xOTgsODcgKzIwNywz NzAgQEAgbmV0d29yay1zZWN1cml0eS1wcm90b2NvbC1jaGVja3MKIEhPU1QgUE9SVCBTVEFUVVMg T1BUSU9OQUwtUEFSQU1FVEVSLiIpCiAKIChkZWZ1biBuc20tY2hlY2stcHJvdG9jb2wgKHByb2Nl c3MgaG9zdCBwb3J0IHN0YXR1cyBzZXR0aW5ncykKLSAgKGNsLWxvb3AgZm9yIGNoZWNrIGluIG5l dHdvcmstc2VjdXJpdHktcHJvdG9jb2wtY2hlY2tzCi0gICAgICAgICAgIGZvciB0eXBlID0gKGlu dGVybiAoZm9ybWF0ICI6JXMiIChjYXIgY2hlY2spKSBvYmFycmF5KQotICAgICAgICAgICB3aGls ZSBwcm9jZXNzCi0gICAgICAgICAgIDs7IFNraXAgdGhlIGNoZWNrIGlmIHRoZSB1c2VyIGhhcyBh bHJlYWR5IHNhaWQgdGhhdCB0aGlzCi0gICAgICAgICAgIDs7IGhvc3QgaXMgT0sgZm9yIHRoaXMg dHlwZSBvZiAiZXJyb3IiLgotICAgICAgICAgICB3aGVuIChhbmQgKG5vdCAobWVtcSB0eXBlIChw bGlzdC1nZXQgc2V0dGluZ3MgOmNvbmRpdGlvbnMpKSkKLSAgICAgICAgICAgICAgICAgICAgICg+ PSAobnNtLWxldmVsIG5ldHdvcmstc2VjdXJpdHktbGV2ZWwpCi0gICAgICAgICAgICAgICAgICAg ICAgICAgKG5zbS1sZXZlbCAoY2FkciBjaGVjaykpKSkKLSAgICAgICAgICAgZG8gKGxldCAoKHJl c3VsdAotICAgICAgICAgICAgICAgICAgICAgKGZ1bmNhbGwgKGludGVybiAoZm9ybWF0ICJuc20t cHJvdG9jb2wtY2hlY2stLSVzIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChjYXIgY2hlY2spKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBvYmFycmF5KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdCBwb3J0IHN0 YXR1cyAobnRoIDIgY2hlY2spKSkpCi0gICAgICAgICAgICAgICAgKHVubGVzcyByZXN1bHQKLSAg ICAgICAgICAgICAgICAgIChkZWxldGUtcHJvY2VzcyBwcm9jZXNzKQotICAgICAgICAgICAgICAg ICAgKHNldHEgcHJvY2VzcyBuaWwpKSkpCisgIChsZXQgKChyZXN1bHRzCisgICAgICAgICAoY2wt cmVtb3ZlLWlmLW5vdAorICAgICAgICAgICMnY2RyCisgICAgICAgICAgKGNsLWxvb3AgZm9yIGNo ZWNrIGluIG5ldHdvcmstc2VjdXJpdHktcHJvdG9jb2wtY2hlY2tzCisgICAgICAgICAgICAgICAg ICAgZm9yIHR5cGUgPSAoaW50ZXJuIChmb3JtYXQgIjolcyIgKGNhciBjaGVjaykpIG9iYXJyYXkp CisgICAgICAgICAgICAgICAgICAgOzsgU2tpcCB0aGUgY2hlY2sgaWYgdGhlIHVzZXIgaGFzIGFs cmVhZHkgc2FpZCB0aGF0IHRoaXMKKyAgICAgICAgICAgICAgICAgICA7OyBob3N0IGlzIE9LIGZv ciB0aGlzIHR5cGUgb2YgImVycm9yIi4KKyAgICAgICAgICAgICAgICAgICB3aGVuIChhbmQgKG5v dCAobWVtcSB0eXBlIChwbGlzdC1nZXQgc2V0dGluZ3MgOmNvbmRpdGlvbnMpKSkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKD49IChuc20tbGV2ZWwgbmV0d29yay1zZWN1cml0eS1sZXZl bCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuc20tbGV2ZWwgKGNhZHIgY2hl Y2spKSkpCisgICAgICAgICAgICAgICAgICAgY29sbGVjdCAoY29ucworICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnVuY2FsbCAo aW50ZXJuIChmb3JtYXQgIm5zbS1wcm90b2NvbC1jaGVjay0tJXMiCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYXIgY2hlY2spKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JhcnJheSkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0IHBvcnQgc3RhdHVzKSkpKSkpCisgICAg KHdoZW4gKGFuZCByZXN1bHRzCisgICAgICAgICAgICAgICAobm90IChuc20tcXVlcnkgaG9zdCBw b3J0IHN0YXR1cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzb3J0IChtYXAta2V5 cyByZXN1bHRzKSAjJ3N0cmluZzwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZv cm1hdC1tZXNzYWdlCisJCSAgICAgICAgICAgICAgICAiVGhlIFRMUyBjb25uZWN0aW9uIHRvICVz OiVzIGlzIGluc2VjdXJlIGZvciB0aGUgZm9sbG93aW5nIHJlYXNvbiVzOlxuXG4lcyIKKwkJICAg ICAgICAgICAgICAgIGhvc3QgcG9ydAorCQkgICAgICAgICAgICAgICAgKGlmICg+IChsZW5ndGgg cmVzdWx0cykgMSkKKwkJCSAgICAgICAgICAgICJzIiAiIikKKwkJICAgICAgICAgICAgICAgIChz dHJpbmctam9pbiAobWFwLXZhbHVlcyByZXN1bHRzKSAiXG4iKSkpKSkKKyAgICAgIChkZWxldGUt cHJvY2VzcyBwcm9jZXNzKQorICAgICAgKHNldHEgcHJvY2VzcyBuaWwpKSkKICAgOzsgSWYgYSB0 ZXN0IGZhaWxlZCB3ZSByZXR1cm4gbmlsLCBvdGhlcndpc2UgdGhlIHByb2Nlc3Mgb2JqZWN0Lgog ICBwcm9jZXNzKQogCi0oZGVmdW4gbnNtLS1lbmNyeXB0aW9uIChzdGF0dXMpCi0gIChmb3JtYXQg IiVzLSVzLSVzIgotICAgICAgICAgIChwbGlzdC1nZXQgc3RhdHVzIDprZXktZXhjaGFuZ2UpCi0J ICAocGxpc3QtZ2V0IHN0YXR1cyA6Y2lwaGVyKQotCSAgKHBsaXN0LWdldCBzdGF0dXMgOm1hYykp KQotCi0oZGVmdW4gbnNtLXByb3RvY29sLWNoZWNrLS1kaWZmaWUtaGVsbG1hbi1wcmltZS1iaXRz IChob3N0IHBvcnQgc3RhdHVzIGJpdHMpCi0gIChsZXQgKChwcmltZS1iaXRzIChwbGlzdC1nZXQg c3RhdHVzIDpkaWZmaWUtaGVsbG1hbi1wcmltZS1iaXRzKSkpCi0gICAgKG9yIChub3QgcHJpbWUt Yml0cykKLSAgICAgICAgKD49IHByaW1lLWJpdHMgYml0cykKLQkobnNtLXF1ZXJ5Ci0JIGhvc3Qg cG9ydCBzdGF0dXMgOmRpZmZpZS1oZWxsbWFuLXByaW1lLWJpdHMKLQkgIlRoZSBEaWZmaWUtSGVs bG1hbiBwcmltZSBiaXRzICglcykgdXNlZCBmb3IgdGhpcyBjb25uZWN0aW9uIHRvICVzOiVzIGlz IGxlc3MgdGhhbiB3aGF0IGlzIGNvbnNpZGVyZWQgc2FmZSAoJXMpLiIKLQkgcHJpbWUtYml0cyBo b3N0IHBvcnQgYml0cykpKSkKLQotKGRlZnVuIG5zbS1wcm90b2NvbC1jaGVjay0tM2RlcyAoaG9z dCBwb3J0IHN0YXR1cyBfKQotICAob3IgKG5vdCAoc3RyaW5nLW1hdGNoICJcXGIzREVTXFxiIiAo cGxpc3QtZ2V0IHN0YXR1cyA6Y2lwaGVyKSkpCi0gICAgICAobnNtLXF1ZXJ5Ci0gICAgICAgaG9z dCBwb3J0IHN0YXR1cyA6cmM0Ci0gICAgICAgIlRoZSBjb25uZWN0aW9uIHRvICVzOiVzIHVzZXMg dGhlIDNERVMgY2lwaGVyICglcyksIHdoaWNoIGlzIGJlbGlldmVkIHRvIGJlIHVuc2FmZS4iCi0g ICAgICAgaG9zdCBwb3J0IChwbGlzdC1nZXQgc3RhdHVzIDpjaXBoZXIpKSkpCi0KLShkZWZ1biBu c20tcHJvdG9jb2wtY2hlY2stLXJjNCAoaG9zdCBwb3J0IHN0YXR1cyBfKQotICAob3IgKG5vdCAo c3RyaW5nLW1hdGNoICJcXGJSQzRcXGIiIChuc20tLWVuY3J5cHRpb24gc3RhdHVzKSkpCi0gICAg ICAobnNtLXF1ZXJ5Ci0gICAgICAgaG9zdCBwb3J0IHN0YXR1cyA6cmM0Ci0gICAgICAgIlRoZSBj b25uZWN0aW9uIHRvICVzOiVzIHVzZXMgdGhlIFJDNCBhbGdvcml0aG0gKCVzKSwgd2hpY2ggaXMg YmVsaWV2ZWQgdG8gYmUgdW5zYWZlLiIKLSAgICAgICBob3N0IHBvcnQgKG5zbS0tZW5jcnlwdGlv biBzdGF0dXMpKSkpCi0KLShkZWZ1biBuc20tcHJvdG9jb2wtY2hlY2stLXNpZ25hdHVyZS1zaGEx IChob3N0IHBvcnQgc3RhdHVzIF8pCi0gIChsZXQgKChzaWduYXR1cmUtYWxnb3JpdGhtCi0gICAg ICAgICAocGxpc3QtZ2V0IChwbGlzdC1nZXQgc3RhdHVzIDpjZXJ0aWZpY2F0ZSkgOnNpZ25hdHVy ZS1hbGdvcml0aG0pKSkKLSAgICAob3IgKG5vdCAoc3RyaW5nLW1hdGNoICJcXGJTSEExXFxiIiBz aWduYXR1cmUtYWxnb3JpdGhtKSkKLSAgICAgICAgKG5zbS1xdWVyeQotICAgICAgICAgaG9zdCBw b3J0IHN0YXR1cyA6c2lnbmF0dXJlLXNoYTEKLSAgICAgICAgICJUaGUgY2VydGlmaWNhdGUgdXNl ZCB0byB2ZXJpZnkgdGhlIGNvbm5lY3Rpb24gdG8gJXM6JXMgdXNlcyB0aGUgU0hBMSBhbGdvcml0 aG0gKCVzKSwgd2hpY2ggaXMgYmVsaWV2ZWQgdG8gYmUgdW5zYWZlLiIKLSAgICAgICAgIGhvc3Qg cG9ydCBzaWduYXR1cmUtYWxnb3JpdGhtKSkpKQotCi0oZGVmdW4gbnNtLXByb3RvY29sLWNoZWNr LS1pbnRlcm1lZGlhdGUtc2hhMSAoaG9zdCBwb3J0IHN0YXR1cyBfKQotICA7OyBTa2lwIHRoZSBm aXJzdCBjZXJ0aWZpY2F0ZSwgYmVjYXVzZSB0aGF0J3MgdGhlIGhvc3QgY2VydGlmaWNhdGUuCi0g IChjbC1sb29wIGZvciBjZXJ0aWZpY2F0ZSBpbiAoY2RyIChwbGlzdC1nZXQgc3RhdHVzIDpjZXJ0 aWZpY2F0ZXMpKQorDAorCis7OyBLZXkgZXhjaGFuZ2UgY2hlY2tzCisKKyhkZWZ1biBuc20tcHJv dG9jb2wtY2hlY2stLXJzYS1reCAoaG9zdCBwb3J0IHN0YXR1cykKKyAgIkNoZWNrIGZvciBzdGF0 aWMgUlNBIGtleSBleGNoYW5nZS4KKworU3RhdGljIFJTQSBrZXkgZXhjaGFuZ2UgbWV0aG9kcyBk byBub3Qgb2ZmZXIgcGVyZmVjdCBmb3J3YXJkCitzZWNyZWN5LgorCitSZWZlcmVuY2U6CisKK0lF VEYgVExTV0cgKDIwMTQpLiBcIltUTFNdIENvbmZpcm1pbmcgQ29uc2Vuc3VzIG9uIHJlbW92aW5n IFJTQSBrZXkKK1RyYW5zcG9ydCBmcm9tIFRMUyAxLjNcIiwKK2BodHRwczovL3d3dy5pZXRmLm9y Zy9tYWlsLWFyY2hpdmUvd2ViL3Rscy9jdXJyZW50L21zZzExNjIxLmh0bWwnIgorICAobGV0ICgo a3ggKHBsaXN0LWdldCBzdGF0dXMgOmtleS1leGNoYW5nZSkpKQorICAgIChhbmQgKHN0cmluZy1t YXRjaCAiXlxcYlJTQVxcYiIga3gpCisgICAgICAgICAoZm9ybWF0LW1lc3NhZ2UKKyAgICAgICAg ICAiUlNBIGtleSBleGNoYW5nZSBtZXRob2QgKCVzKSB0aGF0IGRvZXMgbm90IG9mZmVyIHBlcmZl Y3QgZm9yd2FyZCBzZWNyZWN5IgorICAgICAgICAgIGt4KSkpKQorCisoZGVmdW4gbnNtLXByb3Rv Y29sLWNoZWNrLS1kaGUta3ggKGhvc3QgcG9ydCBzdGF0dXMpCisgICJDaGVjayBmb3IgZmluaXRl IGZpZWxkIGVwaGVtZXJhbCBEaWZmaWUtSGVsbG1hbiBrZXkgZXhjaGFuZ2UuCisKK0lmIGBuZXR3 b3JrLXNlY3VyaXR5LWxldmVsJyBpcyAnbWVkaXVtLCBhbmQgYSBESEUga2V5IGV4Y2hhbmdlCitt ZXRob2Qgd2FzIHVzZWQsIHRoaXMgZnVuY3Rpb24gcXVlcmllcyB0aGUgdXNlciBpZiB0aGUgcHJp bWUgYml0CitsZW5ndGggaXMgPCAxMDI0LgorCitJZiBgbmV0d29yay1zZWN1cml0eS1sZXZlbCcg aXMgJ2hpZ2ggb3IgYWJvdmUsIGFuZCBhIERIRSBrZXkKK2V4Y2hhbmdlIG1ldGhvZCB3YXMgdXNl ZCwgdGhpcyBmdW5jdGlvbiBxdWVyaWVzIHRoZSB1c2VyIGV2ZW4gaWYKK3RoZSBwcmltZSBiaXQg bGVuZ3RoIGlzID49IDEwMjQuCisKK0luIDIwMTQsIHRoZSBkaXNjb3Zlcnkgb2YgTG9namFtWzFd IGhhZCBwcm92ZW4gbm9uLWVsbGlwdGljLWN1cnZlCitEaWZmaWUtSGVsbG1hbiBrZXkgZXhjaGFu Z2Ugd2l0aCA8IDEwMjQgcHJpbWUgYml0IGxlbmd0aCB0byBiZQordW5zYWZlLiBJbiBzdWJzZXF1 ZW50IHllYXJzLCBpdCB3YXMgZGlzY292ZXJlZCB0aGF0IHRoZXJlIHdlcmUKK3JhbXBhbnQgdXNl IG9mIHNtYWxsIHN1Ymdyb3VwIHByaW1lIG9yIGNvbXBvc2l0ZSBudW1iZXIgZm9yIERIRQorYnkg bWFueSBzZXJ2ZXJzLCBhbmQgdGh1cyBhbGxvd2VkIHRoZW1zZWx2ZXMgdG8gYmUgdnVsbmVyYWJs ZSB0bworYmFja2Rvb3JzWzJdLiBHaXZlbiB0aGUgZGlmZmljdWx0eSBpbiB2YWxpZGF0aW5nIERI RSBwYXJhbWV0ZXJzLAorbWFqb3IgYnJvd3NlciB2ZW5kb3JzIGhhZCBzdGFydGVkIHRvIHJlbW92 ZSBESEUgc2luY2UKKzIwMTZbM10uIEVtYWNzIHN0b3BzIHNob3J0IG9mIGJhbm5pbmcgREhFIGFu ZCB0ZXJtaW5hdGluZworY29ubmVjdGlvbiwgYnV0IHByb21wdHMgdGhlIHVzZXIgaW5zdGVhZC4K KworUmVmZXJlbmNlczoKKworWzFdOiBBZHJpYW4gZXQgYWwgKDIwMTQpLiBcIkltcGVyZmVjdCBG b3J3YXJkIFNlY3JlY3k6IEhvdworRGlmZmllLUhlbGxtYW4gRmFpbHMgaW4gUHJhY3RpY2VcIiwg YGh0dHBzOi8vd2Vha2RoLm9yZy8nCisKK1syXTogRG9yZXksIEZvbmcsIGFuZCBFc3NleCAoMjAx NikuIFwiSW5kaXNjcmVldCBMb2dzOiBQZXJzaXN0ZW50CitEaWZmaWUtSGVsbG1hbiBCYWNrZG9v cnMgaW4gVExTLlwiLAorYGh0dHBzOi8vZXByaW50LmlhY3Iub3JnLzIwMTYvOTk5LnBkZicKKwor WzNdOiBDaHJvbWUgUGxhdGZvcm0gU3RhdHVzICgyMDE3KS4gXCJSZW1vdmUgREhFLWJhc2VkIGNp cGhlcnNcIiwKK2BodHRwczovL3d3dy5jaHJvbWVzdGF0dXMuY29tL2ZlYXR1cmUvNTEyODkwODc5 ODE2NDk5MiciCisgIChsZXQqICgoa3ggKHBsaXN0LWdldCBzdGF0dXMgOmtleS1leGNoYW5nZSkp CisgICAgICAgICAoZGhlLXAgKHN0cmluZy1tYXRjaCAiXlxcYkRIRVxcYiIga3gpKQorICAgICAg ICAgKHByaW1lLWJpdHMgKHBsaXN0LWdldCBzdGF0dXMgOmRpZmZpZS1oZWxsbWFuLXByaW1lLWJp dHMpKQorICAgICAgICAgbXNnKQorICAgICh3aGVuIGRoZS1wCisgICAgICAoaWYgKGFuZCAoPj0g KG5zbS1sZXZlbCBuZXR3b3JrLXNlY3VyaXR5LWxldmVsKSAobnNtLWxldmVsICdtZWRpdW0pKQor ICAgICAgICAgICAgICAgKDwgcHJpbWUtYml0cyAxMDI0KSkKKyAgICAgICAgICAoc2V0cSBtc2cg KGZvcm1hdC1tZXNzYWdlCisgICAgICAgICAgICAgICAgICAgICAiRGlmZmllLUhlbGxtYW4gcHJp bWUgYml0cyAoJXMpIHRvbyBsb3cgKCVzKSIKKyAgICAgICAgICAgICAgICAgICAgIHByaW1lLWJp dHMgZ251dGxzLW1pbi1wcmltZS1iaXRzKSkpCisgICAgICAoaWYgKD49IChuc20tbGV2ZWwgbmV0 d29yay1zZWN1cml0eS1sZXZlbCkgKG5zbS1sZXZlbCAnaGlnaCkpCisgICAgICAgICAgKHNldHEg bXNnIChjb25jYXQKKyAgICAgICAgICAgICAgICAgICAgIG1zZworICAgICAgICAgICAgICAgICAg ICAgKGZvcm1hdC1tZXNzYWdlCisgICAgICAgICAgICAgICAgICAgICAgIm5vbi1lbGxpcHRpYy1j dXJ2ZSBlcGhlbWVyYWwgRGlmZmllLUhlbGxtYW4ga2V5IGV4Y2hhbmdlIG1ldGhvZCAoJXMpIG1h eWJlIHVzaW5nIGFuIHVuc2FmZSBwcmltZSIKKyAgICAgICAgICAgICAgICAgICAgICBreCkpKSkK KyAgICAgIG1zZykpKQorCisoZGVmdW4gbnNtLXByb3RvY29sLWNoZWNrLS1hbm9uLWt4IChob3N0 IHBvcnQgc3RhdHVzKQorICAiQ2hlY2sgZm9yIGFub255bW91cyBrZXkgZXhjaGFuZ2UuCisKK0Fu b255bW91c2Uga2V5IGV4Y2hhbmdlIGV4cG9zZXMgdGhlIGNvbm5lY3Rpb24gdG8gTUlUTSBhdHRh Y2tzLgorCitSZWZlcmVuY2U6CisKK0dudVRMUyBhdXRob3JzICgyMDE4KS4gXCJHbnVUTFMgTWFu dWFsIDQuMy4zIEFub255bW91cworYXV0aGVudGljYXRpb25cIiwKK2BodHRwczovL3d3dy5nbnV0 bHMub3JnL21hbnVhbC9nbnV0bHMuaHRtbFwjQW5vbnltb3VzLWF1dGhlbnRpY2F0aW9uJyIKKyAg KGxldCAoKGt4IChwbGlzdC1nZXQgc3RhdHVzIDprZXktZXhjaGFuZ2UpKSkKKyAgICAoYW5kIChz dHJpbmctbWF0Y2ggIlxcYkFOT05cXGIiIGt4KQorICAgICAgICAgKGZvcm1hdC1tZXNzYWdlCisg ICAgICAgICAgImFub255bW91cyBrZXkgZXhjaGFuZ2UgbWV0aG9kICglcykgY2FuIGJlIHVuc2Fm ZSIKKyAgICAgICAgICBreCkpKSkKKworKGRlZnVuIG5zbS1wcm90b2NvbC1jaGVjay0tZXhwb3J0 LWt4IChob3N0IHBvcnQgc3RhdHVzKQorICAiQ2hlY2sgZm9yIEVYUE9SVCBrZXkgZXhjaGFuZ2Uu CisKK0VYUE9SVCBjaXBoZXIgc3VpdGVzIGFyZSBhIGZhbWlseSBvZiA0MC1iaXQgZWZmZWN0aXZl IHNlY3VyaXR5CithbGdvcml0aG1zIGxlZ2FsbHkgZXhwb3J0YWJsZSBieSB0aGUgVW5pdGVkIFN0 YXRlcyBpbiB0aGUgZWFybHkgOTBzLgorVGhleSBjYW4gYmUgYnJva2VuIGluIHNlY29uZHMgb24g MjAxOCBoYXJkd2FyZS4KKworUmVjZW50IHZlcnNpb24gb2YgR251VExTIGRvZXMgbm90IGVuYWJs ZSB0aGlzIGtleSBleGNoYW5nZSBieSBkZWZhdWx0LAorYnV0IGNhbiBiZSBlbmFibGVkIGlmIHJl cXVlc3RlZC4gIFRoaXMgY2hlY2sgaXMgbWFpbmx5IHByb3ZpZGVkIHRvCitzZWN1cmUgRW1hY3Mg YnVpbHQgd2l0aCBvbGRlciB2ZXJzaW9uIG9mIEdudVRMUy4KKworUmVmZXJlbmNlOgorCitTY2hu ZWllciwgQnJ1Y2UgKDE5OTYpLiBBcHBsaWVkIENyeXB0b2dyYXBoeSAoU2Vjb25kIGVkLikuIEpv aG4gV2lsZXkKKyYgU29ucy4gSVNCTiAwLTQ3MS0xMTcwOS05LiIKKyAgKGxldCAoKGt4IChwbGlz dC1nZXQgc3RhdHVzIDprZXktZXhjaGFuZ2UpKSkKKyAgICAoYW5kIChzdHJpbmctbWF0Y2ggIlxc YkVYUE9SVFxcYiIga3gpCisgICAgICAgICAoZm9ybWF0LW1lc3NhZ2UKKyAgICAgICAgICAiRVhQ T1JUIGxldmVsIGtleSBleGNoYW5nZSBtZXRob2QgKCVzKSBpcyBpbnNlY3VyZSIKKyAgICAgICAg ICBreCkpKSkKKworOzsgQ2lwaGVyIGNoZWNrcworCisoZGVmdW4gbnNtLXByb3RvY29sLWNoZWNr LS1jYmMtY2lwaGVyIChob3N0IHBvcnQgc3RhdHVzKQorICAiQ2hlY2sgZm9yIENCQyBtb2RlIGNp cGhlcnMuCisKK0NCQyBtb2RlIGNpcGhlciBpbiBUTFMgdmVyc2lvbnMgZWFybGllciB0aGFuIDEu MyBhcmUgcHJvYmxlbWF0aWMKK2JlY2F1c2Ugb2YgTUFDLXRoZW4tZW5jcnlwdC4gVGhpcyBjb25z dHJ1Y3Rpb24gaXMgdnVsbmVyYWJsZSB0bworcGFkZGluZyBvcmFjbGUgYXR0YWNrc1sxXS4KKwor UmVmZXJlbmNlOgorCitTdWxsaXZhbiAoRmViIDIwMTYpLiBcIlBhZGRpbmcgb3JhY2xlcyBhbmQg dGhlIGRlY2xpbmUgb2YgQ0JDLW1vZGUKK2NpcGhlciBzdWl0ZXNcIiwKK2BodHRwczovL2Jsb2cu Y2xvdWRmbGFyZS5jb20vcGFkZGluZy1vcmFjbGVzLWFuZC10aGUtZGVjbGluZS1vZi1jYmMtbW9k ZS1jaXBoZXJzdWl0ZXMvJyIKKyAgKGxldCAoKGNpcGhlciAocGxpc3QtZ2V0IHN0YXR1cyA6Y2lw aGVyKSkpCisgICAgKGFuZCAoc3RyaW5nLW1hdGNoICJcXGJDQkNcXGIiIGNpcGhlcikKKyAgICAg ICAgIChmb3JtYXQtbWVzc2FnZQorICAgICAgICAgICJDQkMgbW9kZSBjaXBoZXIgKCVzKSBjYW4g YmUgaW5zZWN1cmUiCisgICAgICAgICAgY2lwaGVyKSkpKQorCisoZGVmdW4gbnNtLXByb3RvY29s LWNoZWNrLS1lY2RzYS1jYmMtY2lwaGVyIChob3N0IHBvcnQgc3RhdHVzKQorICAiQ2hlY2sgZm9y IENCQyBtb2RlIGNpcGhlciB1c2FnZSB1bmRlciBFQ0RTQSBrZXkgZXhjaGFuZ2UuCisKK0NCQyBt b2RlIGNpcGhlciBpbiBUTFMgdmVyc2lvbnMgZWFybGllciB0aGFuIDEuMyBhcmUgcHJvYmxlbWF0 aWMKK2JlY2F1c2Ugb2YgTUFDLXRoZW4tZW5jcnlwdC4gVGhpcyBjb25zdHJ1Y3Rpb24gaXMgdnVs bmVyYWJsZSB0bworcGFkZGluZyBvcmFjbGUgYXR0YWNrc1sxXS4KKworRHVlIHRvIHN0aWxsIHdp ZGVzcHJlYWQgdXNlIG9mIENCQyBtb2RlIGNpcGhlcnMgYnkgc2VydmVycywgdGhpcworZnVuY3Rp b24gb25seSBjaGVja3MgZm9yIENCQyBtb2RlIGNpcGhlciB1c2FnZSBpbiBjb21iaW5hdGlvbiB3 aXRoCitFQ0RTQSBrZXkgZXhjaGFuZ2UsIHdoaWNoIGlzIHZpcnR1YWxseSBub24tZXhpc3RlbnRb Ml0uCisKK1JlZmVyZW5jZXM6CisKK1sxXTogU3VsbGl2YW4gKEZlYiAyMDE2KS4gXCJQYWRkaW5n IG9yYWNsZXMgYW5kIHRoZSBkZWNsaW5lIG9mCitDQkMtbW9kZSBjaXBoZXIgc3VpdGVzXCIsCitg aHR0cHM6Ly9ibG9nLmNsb3VkZmxhcmUuY29tL3BhZGRpbmctb3JhY2xlcy1hbmQtdGhlLWRlY2xp bmUtb2YtY2JjLW1vZGUtY2lwaGVyc3VpdGVzLycKKworWzJdOiBDaHJvbWUgUGxhdGZvcm0gU3Rh dHVzICgyMDE3KS4gXCJSZW1vdmUgQ0JDLW1vZGUgRUNEU0EgY2lwaGVycyBpbgorVExTXCIsIGBo dHRwczovL3d3dy5jaHJvbWVzdGF0dXMuY29tL2ZlYXR1cmUvNTc0MDk3ODEwMzEyMzk2OCciCisg IChsZXQgKChreCAocGxpc3QtZ2V0IHN0YXR1cyA6a2V5LWV4Y2hhbmdlKSkKKyAgICAgICAgKGNp cGhlciAocGxpc3QtZ2V0IHN0YXR1cyA6Y2lwaGVyKSkpCisgICAgKGFuZCAoc3RyaW5nLW1hdGNo ICJcXGJFQ0RTQVxcYiIga3gpCisgICAgICAgICAoc3RyaW5nLW1hdGNoICJcXGJDQkNcXGIiIGNp cGhlcikKKyAgICAgICAgIChmb3JtYXQtbWVzc2FnZQorICAgICAgICAgICJDQkMgbW9kZSBjaXBo ZXIgKCVzKSBjYW4gYmUgaW5zZWN1cmUiCisgICAgICAgICAgY2lwaGVyKSkpKQorCisoZGVmdW4g bnNtLXByb3RvY29sLWNoZWNrLS0zZGVzLWNpcGhlciAoaG9zdCBwb3J0IHN0YXR1cykKKyAgIkNo ZWNrIGZvciAzREVTIGNpcGhlcnMuCisKKzNERVMgaXMgY29uc2lkZXJlZCBhIHdlYWsgY2lwaGVy IGJ5IE5JU1QgYXMgaXQgb25seSBoYXMgODAgYml0cworb2Ygc2VjdXJpdHkuCisKK1JlZmVyZW5j ZToKKworQmFya2VyLCBFbGFpbmUgKEphbiAyMDE2KS4gXCJOSVNUIFNwZWNpYWwgUHVibGljYXRp b24gODAwLTU3OgorUmVjb21tZW5kYXRpb24gZm9yIEtleSBNYW5hZ2VtZW50IFBhcnQgMTogR2Vu ZXJhbFwiICg0IGVkLiksCitgaHR0cHM6Ly9udmxwdWJzLm5pc3QuZ292L25pc3RwdWJzL1NwZWNp YWxQdWJsaWNhdGlvbnMvTklTVC5TUC44MDAtNTdwdDFyNC5wZGYnCisiCisgIChsZXQgKChjaXBo ZXIgKHBsaXN0LWdldCBzdGF0dXMgOmNpcGhlcikpKQorICAgIChhbmQgKHN0cmluZy1tYXRjaCAi XFxiM0RFU1xcYiIgY2lwaGVyKQorICAgICAgICAgKGZvcm1hdC1tZXNzYWdlCisgICAgICAgICAg IjNERVMgY2lwaGVyICglcykgaXMgaW5zZWN1cmUiCisgICAgICAgICAgY2lwaGVyKSkpKQorCiso ZGVmdW4gbnNtLXByb3RvY29sLWNoZWNrLS1kZXMtY2lwaGVyIChob3N0IHBvcnQgc3RhdHVzKQor ICAiQ2hlY2sgZm9yIERFUyBjaXBoZXJzLgorCitVc2luZyBkZWRpY2F0ZWQgaGFyZHdhcmUgY29z dGluZyBsZXNzIHRoYW4gJDEwaywgYSBERVMga2V5IHVzZWQgdG8KK2VuY3J5cHQgYSBtZXNzYWdl IGNhbiBiZSBicnV0ZS1mb3JjZWQgaW4gYSBtYXR0ZXIgb2YgZGF5cy4gIFJGQworNTQ2OVsxXSBz dWdnZXN0cyBUTFMgbGlicmFyaWVzIHNob3VsZCBub3QgZW5hYmxlIHRoaXMgYWxnb3JpdGhtLgor CitSZWNlbnQgdmVyc2lvbiBvZiBHbnVUTFMgZG9lcyBub3QgZW5hYmxlIHRoaXMgY2lwaGVyIGJ5 IGRlZmF1bHQsIGJ1dAorY2FuIGJlIGVuYWJsZWQgaWYgcmVxdWVzdGVkLiAgVGhpcyBjaGVjayBp cyBtYWlubHkgcHJvdmlkZWQgdG8gc2VjdXJlCitFbWFjcyBidWlsdCB3aXRoIG9sZGVyIHZlcnNp b24gb2YgR251VExTLgorCitSZWZlcmVuY2U6CisKK1sxXTogUC4gRXJvbmVuLCBFZCAoMjAwOSku IFwiREVTIGFuZCBJREVBIENpcGhlciBTdWl0ZXMgZm9yIFRyYW5zcG9ydAorTGF5ZXIgU2VjdXJp dHkgKFRMUylcIiwgYGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM1NDY5JyIKKyAgKGxl dCAoKGNpcGhlciAocGxpc3QtZ2V0IHN0YXR1cyA6Y2lwaGVyKSkpCisgICAgKGFuZCAoc3RyaW5n LW1hdGNoICJcXGJERVNcXGIiIGNpcGhlcikKKyAgICAgICAgIChmb3JtYXQtbWVzc2FnZQorICAg ICAgICAgICJERVMgY2lwaGVyICglcykgaXMgaW5zZWN1cmUiCisgICAgICAgICAgY2lwaGVyKSkp KQorCisoZGVmdW4gbnNtLXByb3RvY29sLWNoZWNrLS1yYzQtY2lwaGVyIChob3N0IHBvcnQgc3Rh dHVzKQorICAiQ2hlY2sgZm9yIFJDNCBjaXBoZXJzLgorCitSQzQgY2lwaGVyIGhhcyBiZWVuIHBy b2hpYml0ZWQgYnkgUkZDIDc0NjUuCisKK1JlY2VudCB2ZXJzaW9uIG9mIEdudVRMUyBkb2VzIG5v dCBlbmFibGUgdGhpcyBjaXBoZXIgYnkgZGVmYXVsdCwgYnV0CitjYW4gYmUgZW5hYmxlZCBpZiBy ZXF1ZXN0ZWQuICBUaGlzIGNoZWNrIGlzIG1haW5seSBwcm92aWRlZCB0byBzZWN1cmUKK0VtYWNz IGJ1aWx0IHdpdGggb2xkZXIgdmVyc2lvbiBvZiBHbnVUTFMuCisKK1JlZmVyZW5jZToKKworUG9w b3YgQSAoRmViIDIwMTUpLiBcIlByb2hpYml0aW5nIFJDNCBDaXBoZXIgU3VpdGVzXCIsCitgaHR0 cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc0NjUnIgorICAobGV0ICgoY2lwaGVyIChwbGlz dC1nZXQgc3RhdHVzIDpjaXBoZXIpKSkKKyAgICAoYW5kIChzdHJpbmctbWF0Y2ggIlxcYkFSQ0ZP VVJcXGIiIGNpcGhlcikKKyAgICAgICAgIChmb3JtYXQtbWVzc2FnZQorICAgICAgICAgICJSQzQg Y2lwaGVyICglcykgaXMgaW5zZWN1cmUiCisgICAgICAgICAgY2lwaGVyKSkpKQorCisoZGVmdW4g bnNtLXByb3RvY29sLWNoZWNrLS1yYzItY2lwaGVyIChob3N0IHBvcnQgc3RhdHVzKQorICAiQ2hl Y2sgZm9yIFJDMiBjaXBoZXJzLgorCitcIlJDMiBjYW4gYmUgYnJva2VuIHdpdGggb25lIHJlbGF0 ZWQta2V5IHF1ZXJ5IGFuZCBhYm91dCAyXjM0IGNob3NlbgorcGxhaW50ZXh0c1wiLCB3aGljaCBp cyBhIG1hdHRlciBvZiBzZWNvbmRzIG9uIDIwMTggaGFyZHdhcmUuCisKK1JlY2VudCB2ZXJzaW9u IG9mIEdudVRMUyBkb2VzIG5vdCBlbmFibGUgdGhpcyBjaXBoZXIgYnkgZGVmYXVsdCwgYnV0Citj YW4gYmUgZW5hYmxlZCBpZiByZXF1ZXN0ZWQuICBUaGlzIGNoZWNrIGlzIG1haW5seSBwcm92aWRl ZCB0byBzZWN1cmUKK0VtYWNzIGJ1aWx0IHdpdGggb2xkZXIgdmVyc2lvbiBvZiBHbnVUTFMuCisK K1JlZmVyZW5jZToKKworS2Vsc2V5LCBTY2huZWllciwgV2FnbmVyICgxOTk3KS4gXCJSZWxhdGVk LUtleSBDcnlwdGFuYWx5c2lzIG9mIDMtV0FZLAorQmloYW0tREVTLENBU1QsIERFUy1YLCBOZXdE RVMsIFJDMiwgYW5kIFRFQVwiLAorYGh0dHBzOi8vd3d3LnNjaG5laWVyLmNvbS9hY2FkZW1pYy9w YXBlcmZpbGVzL3BhcGVyLXJlbGF0ZWRrZXkucGRmJyIKKyAgKGxldCAoKGNpcGhlciAocGxpc3Qt Z2V0IHN0YXR1cyA6Y2lwaGVyKSkpCisgICAgKGFuZCAoc3RyaW5nLW1hdGNoICJcXGJSQzJcXGIi IGNpcGhlcikKKyAgICAgICAgIChmb3JtYXQtbWVzc2FnZQorICAgICAgICAgICJSQzIgY2lwaGVy ICglcykgaXMgaW5zZWN1cmUiCisgICAgICAgICAgY2lwaGVyKSkpKQorCisoZGVmdW4gbnNtLXBy b3RvY29sLWNoZWNrLS1udWxsLWNpcGhlciAoaG9zdCBwb3J0IHN0YXR1cykKKyAgIkNoZWNrIGZv ciBOVUxMIGNpcGhlciBzdWl0ZXMuCisKK1RoaXMgZnVuY3Rpb24gY2hlY2tzIGZvciBOVUxMIGtl eSBleGNoYW5nZSwgY2lwaGVyIGFuZCBtZXNzYWdlCithdXRoZW50aWNhdGlvbiBjb2RlIGtleSBk ZXJpdmF0aW9uIGZ1bmN0aW9uLiAgQXMgdGhlIG5hbWUgc3VnZ2VzdHMsIGEKK05VTEwgYXNzaWdu ZWQgZm9yIGFueSBvZiB0aGUgYWJvdmUgZGlzYWJsZXMgYW4gaW50ZWdyYWwgcGFydCBvZiB0aGUK K3NlY3VyaXR5IHByb3BlcnRpZXMgdGhhdCBtYWtlIHVwIHRoZSBUTFMgcHJvdG9jb2wuIgorICAo bGV0ICgoc3VpdGUgKGZvcm1hdCAiJXMtJXMtJXMiCisgICAgICAgICAgICAgICAgICAgICAgIChw bGlzdC1nZXQgc3RhdHVzIDprZXktZXhjaGFuZ2UpCisJICAgICAgICAgICAgICAgKHBsaXN0LWdl dCBzdGF0dXMgOmNpcGhlcikKKwkgICAgICAgICAgICAgICAocGxpc3QtZ2V0IHN0YXR1cyA6bWFj KSkpKQorICAgIChhbmQgKHN0cmluZy1tYXRjaCAiXFxiTlVMTFxcYiIgc3VpdGUpCisgICAgICAg ICAoZm9ybWF0LW1lc3NhZ2UKKyAgICAgICAgICAiTlVMTCBjaXBoZXIgc3VpdGUgKCVzKSB2aW9s YXRlcyBhdXRoZW50aWNpdHksIGludGVncml0eSwgb3IgY29uZmlkZW50aWFsaXR5IGd1YXJhbnRl ZXMiCisgICAgICAgICAgc3VpdGUpKSkpCisKKzs7IFNpZ25hdHVyZSBjaGVja3MKKworKGRlZnVu IG5zbS1wcm90b2NvbC1jaGVjay0tc2hhMS1zaWcgKGhvc3QgcG9ydCBzdGF0dXMpCisgICJDaGVj ayBmb3IgU0hBMSBzaWduYXR1cmVzIG9uIGNlcnRpZmljYXRlcy4KKworVGhlIGZpcnN0IFNIQTEg Y29sbGlzaW9uIHdhcyBmb3VuZCBpbiAyMDE3WzFdLCBhcyBhIHByZWNhdXRpb24gYWdhaW5zdAor ZXZlbnRzIGZvbGxvd2VkIHRoZSBkaXNjb3Zlcnkgb2YgY2hlYXAgY29sbGlzaW9ucyBpbiBNRDUs IG1ham9yCiticm93c2Vyc1syXVszXVs0XSBoYXZlIHN1bnNldHRlZCB0aGUgdXNlIG9mIFNIQTEg c2lnbmF0dXJlcyBpbgorY2VydGlmaWNhdGVzLgorCitSZWZlcmVuY2VzOgorCitbMV06IFN0ZXZl bnMgTSwgS2FycG1hbiBQIGV0IGFsICgyMDE3KS4gXCJUaGUgZmlyc3QgY29sbGlzaW9uIGZvciBm dWxsCitTSEEtMVwiLCBgaHR0cHM6Ly9zaGF0dGVyZWQuaW8vc3RhdGljL3NoYXR0ZXJlZC5wZGYn CitbMl06IENocm9taXVtIFNlY3VyaXR5IEVkdWNhdGlvbiBUTFMvU1NMLiBcIkRlcHJlY2F0ZWQg YW5kIFJlbW92ZWQKK0ZlYXR1cmVzIChTSEEtMSBDZXJ0aWZpY2F0ZSBTaWduYXR1cmVzKVwiLAor YGh0dHBzOi8vd3d3LmNocm9taXVtLm9yZy9Ib21lL2Nocm9taXVtLXNlY3VyaXR5L2VkdWNhdGlv bi90bHNcI1RPQy1TSEEtMS1DZXJ0aWZpY2F0ZS1TaWduYXR1cmVzJworWzNdOiBKb25lcyBKLkMg KDIwMTcpLiBcIlRoZSBlbmQgb2YgU0hBLTEgb24gdGhlIFB1YmxpYyBXZWJcIiwKK2BodHRwczov L2Jsb2cubW96aWxsYS5vcmcvc2VjdXJpdHkvMjAxNy8wMi8yMy90aGUtZW5kLW9mLXNoYS0xLW9u LXRoZS1wdWJsaWMtd2ViLycKK1s0XTogQXBwbGUgU3VwcG9ydCAoMjAxNykuIFwiTW92ZSB0byBT SEEtMjU2IHNpZ25lZCBjZXJ0aWZpY2F0ZXMgdG8KK2F2b2lkIGNvbm5lY3Rpb24gZmFpbHVyZXNc IiwKK2BodHRwczovL3N1cHBvcnQuYXBwbGUuY29tL2VuLWdiL0hUMjA3NDU5JworWzVdOiBNaWNy b3NvZnQgU2VjdXJpdHkgQWR2aXNvcnkgNDAxMDMyMyAoMjAxNykuIFwiRGVwcmVjYXRpb24gb2YK K1NIQS0xIGZvciBTU0wvVExTIENlcnRpZmljYXRlcyBpbiBNaWNyb3NvZnQgRWRnZSBhbmQgSW50 ZXJuZXQgRXhwbG9yZXIKKzExXCIsCitgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMv c2VjdXJpdHktdXBkYXRlcy9zZWN1cml0eWFkdmlzb3JpZXMvMjAxNy80MDEwMzIzJyIKKyAgKGNs LWxvb3AgZm9yIGNlcnRpZmljYXRlIGluIChwbGlzdC1nZXQgc3RhdHVzIDpjZXJ0aWZpY2F0ZXMp CiAgICAgICAgICAgIGZvciBhbGdvID0gKHBsaXN0LWdldCBjZXJ0aWZpY2F0ZSA6c2lnbmF0dXJl LWFsZ29yaXRobSkKLSAgICAgICAgICAgOzsgRG9uJ3QgY2hlY2sgcm9vdCBjZXJ0aWZpY2F0ZXMg LS0gU0hBMSBpc24ndCBkYW5nZXJvdXMKLSAgICAgICAgICAgOzsgdGhlcmUuCi0gICAgICAgICAg IHdoZW4gKGFuZCAobm90IChlcXVhbCAocGxpc3QtZ2V0IGNlcnRpZmljYXRlIDppc3N1ZXIpCisg ICAgICAgICAgIDs7IERvbid0IGNoZWNrIHJvb3QgY2VydGlmaWNhdGVzIC0tIHJvb3QgaXMgYWx3 YXlzIHRydXN0ZWQuCisgICAgICAgICAgIGlmIChhbmQgKG5vdCAoZXF1YWwgKHBsaXN0LWdldCBj ZXJ0aWZpY2F0ZSA6aXNzdWVyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBs aXN0LWdldCBjZXJ0aWZpY2F0ZSA6c3ViamVjdCkpKQotICAgICAgICAgICAgICAgICAgICAgKHN0 cmluZy1tYXRjaCAiXFxiU0hBMVxcYiIgYWxnbykKLSAgICAgICAgICAgICAgICAgICAgIChub3Qg KG5zbS1xdWVyeQotICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdCBwb3J0IHN0YXR1cyA6 c2lnbmF0dXJlLXNoYTEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbiBpbnRlcm1lZGlh dGUgY2VydGlmaWNhdGUgdXNlZCB0byB2ZXJpZnkgdGhlIGNvbm5lY3Rpb24gdG8gJXM6JXMgdXNl cyB0aGUgU0hBMSBhbGdvcml0aG0gKCVzKSwgd2hpY2ggaXMgYmVsaWV2ZWQgdG8gYmUgdW5zYWZl LiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3QgcG9ydCBhbGdvKSkpCi0gICAgICAg ICAgIGRvIChjbC1yZXR1cm4gbmlsKQotICAgICAgICAgICBmaW5hbGx5IChjbC1yZXR1cm4gdCkp KQotCi0oZGVmdW4gbnNtLXByb3RvY29sLWNoZWNrLS1zc2wgKGhvc3QgcG9ydCBzdGF0dXMgXykK KyAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctbWF0Y2ggIlxcYlNIQTFcXGIiIGFsZ28pKQor ICAgICAgICAgICByZXR1cm4gKGZvcm1hdC1tZXNzYWdlCisgICAgICAgICAgICAgICAgICAgIlNI QTEgc2lnbmF0dXJlICglcykgaXMgcHJvbmUgdG8gY29sbGlzaW9ucyIKKyAgICAgICAgICAgICAg ICAgICBhbGdvKQorICAgICAgICAgICBlbmQpKQorCisoZGVmdW4gbnNtLXByb3RvY29sLWNoZWNr LS1tZDUtc2lnIChob3N0IHBvcnQgc3RhdHVzKQorICAiQ2hlY2sgZm9yIE1ENSBzaWduYXR1cmVz IG9uIGNlcnRpZmljYXRlcy4KKworSW4gMjAwOCwgYSBncm91cCBvZiByZXNlYXJjaGVycyB3ZXJl IGFibGUgdG8gZm9yZ2UgYW4gaW50ZXJtZWRpYXRlIENBCitjZXJ0aWZpY2F0ZSB0aGF0IGFwcGVh cmVkIHRvIGJlIGxlZ2l0aW1hdGUgd2hlbiBjaGVja2VkIGJ5IE1ENVsxXS4KK1JGQyA2MTUxIGhh cyByZWNvbW1lbmRlZCBhZ2FpbnN0IHRoZSB1c2FnZSBvZiBNRDUgZm9yIGRpZ2l0YWwKK3NpZ25h dHVyZXMsIHdoaWNoIGluY2x1ZGVzIFRMUyBjZXJ0aWZpY2F0ZSBzaWduYXR1cmVzLgorCitSZWZl cmVuY2VzOgorCitbMV06IFNvdGlyb3YgQSwgU3RldmVucyBNIGV0IGFsICgyMDA4KS4gXCJNRDUg Y29uc2lkZXJlZCBoYXJtZnVsIHRvZGF5CistIENyZWF0aW5nIGEgcm9ndWUgQ0EgY2VydGlmaWNh dGVcIiwKK2BodHRwOi8vd3d3Lndpbi50dWUubmwvaGFzaGNsYXNoL3JvZ3VlLWNhLycKK1syXTog VHVybmVyIFMsIENoZW4gTCAoMjAxMSkuIFwiVXBkYXRlZCBTZWN1cml0eSBDb25zaWRlcmF0aW9u cyBmb3IKK3RoZSBNRDUgTWVzc2FnZS1EaWdlc3QgYW5kIHRoZSBITUFDLU1ENSBBbGdvcml0aG1z XCIsCitgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzYxNTEnIgorICAoY2wtbG9vcCBm b3IgY2VydGlmaWNhdGUgaW4gKHBsaXN0LWdldCBzdGF0dXMgOmNlcnRpZmljYXRlcykKKyAgICAg ICAgICAgZm9yIGFsZ28gPSAocGxpc3QtZ2V0IGNlcnRpZmljYXRlIDpzaWduYXR1cmUtYWxnb3Jp dGhtKQorICAgICAgICAgICA7OyBEb24ndCBjaGVjayByb290IGNlcnRpZmljYXRlcyAtLSByb290 IGlzIGFsd2F5cyB0cnVzdGVkLgorICAgICAgICAgICBpZiAoYW5kIChub3QgKGVxdWFsIChwbGlz dC1nZXQgY2VydGlmaWNhdGUgOmlzc3VlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAocGxpc3QtZ2V0IGNlcnRpZmljYXRlIDpzdWJqZWN0KSkpCisgICAgICAgICAgICAgICAgICAg KHN0cmluZy1tYXRjaCAiXFxiTUQ1MVxcYiIgYWxnbykpCisgICAgICAgICAgIHJldHVybiAoZm9y bWF0LW1lc3NhZ2UKKyAgICAgICAgICAgICAgICAgICAiTUQ1IHNpZ25hdHVyZSAoJXMpIGlzIHZl cnkgcHJvbmUgdG8gY29sbGlzaW9ucyIKKyAgICAgICAgICAgICAgICAgICBhbGdvKQorICAgICAg ICAgICBlbmQpKQorCis7OyBQcm90b2NvbCBsZXZlbCBjaGVja3MKKworKGRlZnVuIG5zbS1wcm90 b2NvbC1jaGVjay0tc3NsIChob3N0IHBvcnQgc3RhdHVzKQorICAiQ2hlY2sgZm9yIFNTTCBwcm90 b2NvbCB2ZXJzaW9uLgorCitUaGlzIGZ1bmN0aW9uIGd1YXJkIGFnYWluc3QgdXNhZ2Ugb2YgU1NM My4wLCB3aGljaCBoYXMgYmVlbiBkZXByZWNhdGVkCitieSBSRkM3NTY4LgorCitSZWZlcmVuY2U6 CisKK0lFVEYgKDIwMTUpLiBcIkRlcHJlY2F0aW5nIFNlY3VyZSBTb2NrZXRzIExheWVyIFZlcnNp b24gMy4wXCIsCitgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1NjgnIgogICAobGV0 ICgocHJvdG9jb2wgKHBsaXN0LWdldCBzdGF0dXMgOnByb3RvY29sKSkpCi0gICAgKG9yIChub3Qg cHJvdG9jb2wpCi0JKG5vdCAoc3RyaW5nLW1hdGNoICJTU0wiIHByb3RvY29sKSkKLQkobnNtLXF1 ZXJ5Ci0JIGhvc3QgcG9ydCBzdGF0dXMgOnNzbAotCSAiVGhlIGNvbm5lY3Rpb24gdG8gJXM6JXMg dXNlcyB0aGUgJXMgcHJvdG9jb2wsIHdoaWNoIGlzIGJlbGlldmVkIHRvIGJlIHVuc2FmZS4iCi0J IGhvc3QgcG9ydCBwcm90b2NvbCkpKSkKKyAgICAoYW5kIHByb3RvY29sCisgICAgICAgICAoc3Ry aW5nLW1hdGNoICJTU0wiIHByb3RvY29sKQorICAgICAgICAgKGZvcm1hdC1tZXNzYWdlCisJICAi ICVzIHByb3RvY29sIGlzIGRlcHJlY2F0ZWQiCisJICBwcm90b2NvbCkpKSkKKworDAogCiAoZGVm dW4gbnNtLWZpbmdlcnByaW50IChzdGF0dXMpCiAgIChwbGlzdC1nZXQgKHBsaXN0LWdldCBzdGF0 dXMgOmNlcnRpZmljYXRlKSA6cHVibGljLWtleS1pZCkpCkBAIC0yOTMsMTAgKzU4NSwxMSBAQCBu c20tZmluZ2VycHJpbnQtb2stcAogCSAgICAgIChzZXRxIGRpZC1xdWVyeQogCQkgICAgKG5zbS1x dWVyeQogCQkgICAgIGhvc3QgcG9ydCBzdGF0dXMgJ2ZpbmdlcnByaW50Ci0JCSAgICAgIlRoZSBm aW5nZXJwcmludCBmb3IgdGhlIGNvbm5lY3Rpb24gdG8gJXM6JXMgaGFzIGNoYW5nZWQgZnJvbSAl cyB0byAlcyIKLQkJICAgICBob3N0IHBvcnQKLQkJICAgICAocGxpc3QtZ2V0IHNldHRpbmdzIDpm aW5nZXJwcmludCkKLQkJICAgICAobnNtLWZpbmdlcnByaW50IHN0YXR1cykpKSkpCisgICAgICAg ICAgICAgICAgICAgICAoZm9ybWF0LW1lc3NhZ2UKKwkJICAgICAgIlRoZSBmaW5nZXJwcmludCBm b3IgdGhlIGNvbm5lY3Rpb24gdG8gJXM6JXMgaGFzIGNoYW5nZWQgZnJvbSAlcyB0byAlcyIKKwkJ ICAgICAgaG9zdCBwb3J0CisJCSAgICAgIChwbGlzdC1nZXQgc2V0dGluZ3MgOmZpbmdlcnByaW50 KQorCQkgICAgICAobnNtLWZpbmdlcnByaW50IHN0YXR1cykpKSkpKQogCTs7IE5vdCBPSy4KIAlu aWwKICAgICAgICh3aGVuIGRpZC1xdWVyeQpAQCAtMzA4LDkgKzYwMSwxMCBAQCBuc20tZmluZ2Vy cHJpbnQtb2stcAogKGRlZnVuIG5zbS1uZXctZmluZ2VycHJpbnQtb2stcCAoaG9zdCBwb3J0IHN0 YXR1cykKICAgKG5zbS1xdWVyeQogICAgaG9zdCBwb3J0IHN0YXR1cyAnZmluZ2VycHJpbnQKLSAg ICJUaGUgZmluZ2VycHJpbnQgZm9yIHRoZSBjb25uZWN0aW9uIHRvICVzOiVzIGlzIG5ldzogJXMi Ci0gICBob3N0IHBvcnQKLSAgIChuc20tZmluZ2VycHJpbnQgc3RhdHVzKSkpCisgICAoZm9ybWF0 LW1lc3NhZ2UKKyAgICAiVGhlIGZpbmdlcnByaW50IGZvciB0aGUgY29ubmVjdGlvbiB0byAlczol cyBpcyBuZXc6ICVzIgorICAgIGhvc3QgcG9ydAorICAgIChuc20tZmluZ2VycHJpbnQgc3RhdHVz KSkpKQogCiAoZGVmdW4gbnNtLWNoZWNrLXBsYWluLWNvbm5lY3Rpb24gKHByb2Nlc3MgaG9zdCBw b3J0IHNldHRpbmdzIHdhcm4tdW5lbmNyeXB0ZWQpCiAgIDs7IElmIHRoaXMgY29ubmVjdGlvbiB1 c2VkIHRvIGJlIFRMUywgYnV0IGlzIG5vdyBwbGFpbiwgdGhlbiBpdCdzCkBAIC0zMjIsMjIgKzYx NiwyNCBAQCBuc20tY2hlY2stcGxhaW4tY29ubmVjdGlvbgogCSAobm90CiAJICAobnNtLXF1ZXJ5 CiAJICAgaG9zdCBwb3J0IG5pbCAnY29uZGl0aW9ucwotCSAgICJUaGUgY29ubmVjdGlvbiB0byAl czolcyB1c2VkIHRvIGJlIGFuIGVuY3J5cHRlZCBjb25uZWN0aW9uLCBidXQgaXMgbm93IHVuZW5j cnlwdGVkLiAgVGhpcyBtaWdodCBtZWFuIHRoYXQgdGhlcmUncyBhIG1hbi1pbi10aGUtbWlkZGxl IHRhcHBpbmcgdGhpcyBjb25uZWN0aW9uLiIKLQkgICBob3N0IHBvcnQpKSkKKyAgICAgICAgICAg KGZvcm1hdC1tZXNzYWdlCisJICAgICJUaGUgY29ubmVjdGlvbiB0byAlczolcyB1c2VkIHRvIGJl IGFuIGVuY3J5cHRlZCBjb25uZWN0aW9uLCBidXQgaXMgbm93IHVuZW5jcnlwdGVkLiAgVGhpcyBt aWdodCBtZWFuIHRoYXQgdGhlcmUncyBhIG1hbi1pbi10aGUtbWlkZGxlIHRhcHBpbmcgdGhpcyBj b25uZWN0aW9uLiIKKwkgICAgaG9zdCBwb3J0KSkpKQogICAgIChkZWxldGUtcHJvY2VzcyBwcm9j ZXNzKQogICAgIG5pbCkKICAgICgoYW5kIHdhcm4tdW5lbmNyeXB0ZWQKIAkgKG5vdCAobWVtcSA6 dW5lbmNyeXB0ZWQgKHBsaXN0LWdldCBzZXR0aW5ncyA6Y29uZGl0aW9ucykpKQogCSAobm90IChu c20tcXVlcnkKIAkgICAgICAgaG9zdCBwb3J0IG5pbCAnY29uZGl0aW9ucwotCSAgICAgICAiVGhl IGNvbm5lY3Rpb24gdG8gJXM6JXMgaXMgdW5lbmNyeXB0ZWQuIgotCSAgICAgICBob3N0IHBvcnQp KSkKKyAgICAgICAgICAgICAgIChmb3JtYXQtbWVzc2FnZQorCSAgICAgICAgIlRoZSBjb25uZWN0 aW9uIHRvICVzOiVzIGlzIHVuZW5jcnlwdGVkLiIKKwkgICAgICAgIGhvc3QgcG9ydCkpKSkKICAg ICAoZGVsZXRlLXByb2Nlc3MgcHJvY2VzcykKICAgICBuaWwpCiAgICAodAogICAgIHByb2Nlc3Mp KSkKIAotKGRlZnVuIG5zbS1xdWVyeSAoaG9zdCBwb3J0IHN0YXR1cyB3aGF0IG1lc3NhZ2UgJnJl c3QgYXJncykKKyhkZWZ1biBuc20tcXVlcnkgKGhvc3QgcG9ydCBzdGF0dXMgd2hhdCBtZXNzYWdl KQogICA7OyBJZiB0aGVyZSBpcyBubyB1c2VyIHRvIGFuc3dlciBxdWVyaWVzLCB0aGVuIHNheSBg bm8nIHRvIGV2ZXJ5dGhpbmcuCiAgIChpZiAob3Igbm9uaW50ZXJhY3RpdmUKIAkgIG5zbS1ub25p bnRlcmFjdGl2ZSkKQEAgLTM0Niw3ICs2NDIsNyBAQCBuc20tcXVlcnkKIAkgICAoY29uZGl0aW9u LWNhc2UgbmlsCiAgICAgICAgICAgICAgICAoaW50ZXJuCiAgICAgICAgICAgICAgICAgKGNhciAo c3BsaXQtc3RyaW5nCi0gICAgICAgICAgICAgICAgICAgICAgKG5zbS1xdWVyeS11c2VyIG1lc3Nh Z2UgYXJncworICAgICAgICAgICAgICAgICAgICAgIChuc20tcXVlcnktdXNlciBtZXNzYWdlCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuc20tZm9ybWF0LWNlcnRpZmlj YXRlIHN0YXR1cykpKSkKICAgICAgICAgICAgICAgICBvYmFycmF5KQogCSAgICAgOzsgTWFrZSBz dXJlIHdlIG1hbmFnZSB0byBjbG9zZSB0aGUgcHJvY2VzcyBpZiB0aGUgdXNlciBoaXRzCkBAIC0z NjQsNyArNjYwLDcgQEAgbnNtLXF1ZXJ5CiAJKG5zbS1zYXZlLWhvc3QgaG9zdCBwb3J0IHN0YXR1 cyB3aGF0IHJlc3BvbnNlKQogCXQpKSkpCiAKLShkZWZ1biBuc20tcXVlcnktdXNlciAobWVzc2Fn ZSBhcmdzIGNlcnQpCisoZGVmdW4gbnNtLXF1ZXJ5LXVzZXIgKG1lc3NhZ2UgY2VydCkKICAgKGxl dCAoKGJ1ZmZlciAoZ2V0LWJ1ZmZlci1jcmVhdGUgIipOZXR3b3JrIFNlY3VyaXR5IE1hbmFnZXIq IikpKQogICAgIChzYXZlLXdpbmRvdy1leGN1cnNpb24KICAgICAgIDs7IEZpcnN0IGZvcm1hdCB0 aGUgY2VydGlmaWNhdGUgYW5kIHdhcm5pbmdzLgpAQCAtMzc0LDcgKzY3MCw3IEBAIG5zbS1xdWVy eS11c2VyCiAgICAgICAgICAgKHdoZW4gKD4gKGxlbmd0aCBjZXJ0KSAwKQogICAgICAgICAgICAg KGluc2VydCBjZXJ0ICJcbiIpKQogICAgICAgICAgIChsZXQgKChzdGFydCAocG9pbnQpKSkKLSAg ICAgICAgICAgIChpbnNlcnQgKGFwcGx5ICMnZm9ybWF0LW1lc3NhZ2UgbWVzc2FnZSBhcmdzKSkK KyAgICAgICAgICAgIChpbnNlcnQgbWVzc2FnZSkKICAgICAgICAgICAgIChnb3RvLWNoYXIgc3Rh cnQpCiAgICAgICAgICAgICA7OyBGaWxsIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBtZXNzYWdlLCB3 aGljaCB1c3VhbGx5CiAgICAgICAgICAgICA7OyBjb250YWlucyBsb3RzIG9mIGV4cGxhbmF0b3J5 IHRleHQuCkBAIC0zOTEsMzIgKzY4NywzMyBAQCBuc20tcXVlcnktdXNlcgogCiAoZGVmdW4gbnNt LXNhdmUtaG9zdCAoaG9zdCBwb3J0IHN0YXR1cyB3aGF0IHBlcm1hbmVuY3kpCiAgIChsZXQqICgo aWQgKG5zbS1pZCBob3N0IHBvcnQpKQorICAgICAgICAgKHdoYXQgKGlmIChsaXN0cCB3aGF0KSB3 aGF0IChsaXN0IHdoYXQpKSkKIAkgKHNhdmVkCiAJICAobGlzdCA6aWQgaWQKIAkJOmZpbmdlcnBy aW50IChvciAobnNtLWZpbmdlcnByaW50IHN0YXR1cykKIAkJCQkgOzsgUGxhaW4gY29ubmVjdGlv bi4KIAkJCQkgOm5vbmUpKSkpCi0gICAgKHdoZW4gKG9yIChlcSB3aGF0ICdjb25kaXRpb25zKQor ICAgICh3aGVuIChvciAobWVtcSAnY29uZGl0aW9ucyB3aGF0KQogCSAgICAgIG5zbS1zYXZlLWhv c3QtbmFtZXMpCiAgICAgICAobmNvbmMgc2F2ZWQgKGxpc3QgOmhvc3QgKGZvcm1hdCAiJXM6JXMi IGhvc3QgcG9ydCkpKSkKICAgICA7OyBXZSBlaXRoZXIgd2FudCB0byBzYXZlL3VwZGF0ZSB0aGUg ZmluZ2VycHJpbnQgb3IgdGhlIGNvbmRpdGlvbnMKICAgICA7OyBvZiB0aGUgY2VydGlmaWNhdGUv dW5lbmNyeXB0ZWQgY29ubmVjdGlvbi4KICAgICAoY29uZAotICAgICAoKGVxIHdoYXQgJ2NvbmRp dGlvbnMpCisgICAgICgobWVtcSAnY29uZGl0aW9ucyB3aGF0KQogICAgICAgKGNvbmQKICAgICAg ICAoKG5vdCBzdGF0dXMpCiAJKG5jb25jIHNhdmVkICcoOmNvbmRpdGlvbnMgKDp1bmVuY3J5cHRl ZCkpKSkKICAgICAgICAoKHBsaXN0LWdldCBzdGF0dXMgOndhcm5pbmdzKQogCShuY29uYyBzYXZl ZAogCSAgICAgICAobGlzdCA6Y29uZGl0aW9ucyAocGxpc3QtZ2V0IHN0YXR1cyA6d2FybmluZ3Mp KSkpKSkKLSAgICAgKChub3QgKGVxIHdoYXQgJ2ZpbmdlcnByaW50KSkKKyAgICAgKChub3QgKG1l bXEgJ2ZpbmdlcnByaW50IHdoYXQpKQogICAgICAgOzsgU3RvcmUgYWRkaXRpb25hbCBwcm90b2Nv bCBzZXR0aW5ncy4KICAgICAgIChsZXQgKChzZXR0aW5ncyAobnNtLWhvc3Qtc2V0dGluZ3MgaWQp KSkKIAkod2hlbiBzZXR0aW5ncwogCSAgKHNldHEgc2F2ZWQgc2V0dGluZ3MpKQogCShpZiAocGxp c3QtZ2V0IHNhdmVkIDpjb25kaXRpb25zKQotCSAgICAobmNvbmMgKHBsaXN0LWdldCBzYXZlZCA6 Y29uZGl0aW9ucykgKGxpc3Qgd2hhdCkpCi0JICAobmNvbmMgc2F2ZWQgKGxpc3QgOmNvbmRpdGlv bnMgKGxpc3Qgd2hhdCkpKSkpKSkKKwkgICAgKG5jb25jIChwbGlzdC1nZXQgc2F2ZWQgOmNvbmRp dGlvbnMpIHdoYXQpCisJICAobmNvbmMgc2F2ZWQgKGxpc3QgOmNvbmRpdGlvbnMgd2hhdCkpKSkp KQogICAgIChpZiAoZXEgcGVybWFuZW5jeSAnYWx3YXlzKQogCShwcm9nbgogCSAgKG5zbS1yZW1v dmUtdGVtcG9yYXJ5LXNldHRpbmcgaWQpCi0tIAoyLjE4LjAKCg== --000000000000e99d26056fdf4c89--