From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Luke Lee Newsgroups: gmane.emacs.devel Subject: Update earlier posted hideif.el enhancements Date: Fri, 8 Nov 2013 09:59:18 +0800 Message-ID: NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=001a11332dfc54384104eaa0bd72 X-Trace: ger.gmane.org 1383876007 17393 80.91.229.3 (8 Nov 2013 02:00:07 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Fri, 8 Nov 2013 02:00:07 +0000 (UTC) To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Fri Nov 08 03:00:12 2013 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1VebMo-0001I9-Q2 for ged-emacs-devel@m.gmane.org; Fri, 08 Nov 2013 03:00:11 +0100 Original-Received: from localhost ([::1]:43499 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VebMo-0001XP-1y for ged-emacs-devel@m.gmane.org; Thu, 07 Nov 2013 21:00:10 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:49534) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VebMh-0001Vm-BB for emacs-devel@gnu.org; Thu, 07 Nov 2013 21:00:04 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VebMf-0005Vw-A5 for emacs-devel@gnu.org; Thu, 07 Nov 2013 21:00:03 -0500 Original-Received: from mail-pd0-x230.google.com ([2607:f8b0:400e:c02::230]:44209) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VebMe-0005V9-HF for emacs-devel@gnu.org; Thu, 07 Nov 2013 21:00:01 -0500 Original-Received: by mail-pd0-f176.google.com with SMTP id g10so1448628pdj.21 for ; Thu, 07 Nov 2013 17:59:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:from:date:message-id:subject:to:content-type; bh=hF57FXfAOyXopVOjz0YXjC8r5g2GwCuLYDKUWgsoGL4=; b=o3FLfE2B7iyTcniPRKIKPdFFFeCCAWjFyGbNMVm/qvCgRerse/2grySEfECTH4Zo+a NgiuhNAkH9S5WeunhvuWeznn4wZk/8DzKnf4u8dKUw4QLDi/ZcyywSEmqhfqxknFZ0YG eY/lgqh0vemPsBBLwFMPZOzOR/tF7zYCPdW3KPcxygimb5a1Pa4r6bxjDEbGjj3Qf9Os ZkvQmvMydaFfhzdcMtl8HdBaH5BWjmLO2JBRryM1O638dUWmisPLHH57O4v9DxzVkC9F yRM0UiPrrTN/u78E0+rax/Pji84icJTnfqYf9QupDsBXa3Of5aY7jBsOcdPNU4a1zIFH 4zNA== X-Received: by 10.66.136.71 with SMTP id py7mr12988238pab.2.1383875998913; Thu, 07 Nov 2013 17:59:58 -0800 (PST) Original-Received: by 10.70.17.226 with HTTP; Thu, 7 Nov 2013 17:59:18 -0800 (PST) X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2607:f8b0:400e:c02::230 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:165057 Archived-At: --001a11332dfc54384104eaa0bd72 Content-Type: multipart/alternative; boundary=001a11332dfc54383c04eaa0bd70 --001a11332dfc54383c04eaa0bd70 Content-Type: text/plain; charset=ISO-8859-1 Hi, A few days ago I posted my enhanced hideif.el. Here is a updated version that fix a problem that stop it from finding more #defines if an empty define is found (i.e. #define EMPTY_MACRO ). If you found any other bug, please also notify me. Thanks! -- Best regards, Luke Lee --001a11332dfc54383c04eaa0bd70 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
Hi,

A few days ago I posted my enhanced= hideif.el. Here is a updated version that fix a problem that stop it from = finding more #defines if an empty define is found (i.e.=A0
#defin= e EMPTY_MACRO
).

If you found any other bug, please also no= tify me. Thanks!

--
Best regards,
Luke Lee=

--001a11332dfc54383c04eaa0bd70-- --001a11332dfc54384104eaa0bd72 Content-Type: application/octet-stream; name="hideif.el" Content-Disposition: attachment; filename="hideif.el" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hnqrvicq0 Ozs7IGhpZGVpZi5lbCAtLS0gaGlkZXMgc2VsZWN0ZWQgY29kZSB3aXRoaW4gaWZkZWYKCjs7IENv cHlyaWdodCAoQykgMTk4OCwgMTk5NCwgMjAwMS0yMDEyLCAyMDEzICBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24sIEluYy4KCjs7IEF1dGhvcjogQnJpYW4gTWFyaWNrCjs7ICAgICAgRGFuaWVsIExh TGliZXJ0ZSA8bGliZXJ0ZUBob2xvbmV4dXMub3JnPgo7OyBNYWludGFpbmVyOiBGU0YKOzsgS2V5 d29yZHM6IGMsIG91dGxpbmVzCgo7OyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgRW1hY3MuCgo7 OyBHTlUgRW1hY3MgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQo7OyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo7OyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgo7OyAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgoKOzsgR05VIEVtYWNzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCjs7IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCjs7IE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKOzsgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KCjs7IFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCjs7IGFsb25n IHdpdGggR05VIEVtYWNzLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNl cy8+LgoKOzs7IENvbW1lbnRhcnk6Cgo7OyBUbyBpbml0aWFsaXplLCB0b2dnbGUgdGhlIGhpZGUt aWZkZWYgbWlub3IgbW9kZSB3aXRoCjs7Cjs7IE0teCBoaWRlLWlmZGVmLW1vZGUKOzsKOzsgVGhp cyB3aWxsIHNldCB1cCBrZXkgYmluZGluZ3MgYW5kIGNhbGwgaGlkZS1pZmRlZi1tb2RlLWhvb2sg aWYgaXQKOzsgaGFzIGEgdmFsdWUuICBUbyBleHBsaWNpdGx5IGhpZGUgaWZkZWZzIHVzaW5nIGEg YnVmZmVyLWxvY2FsCjs7IGRlZmluZSBsaXN0IChkZWZhdWx0IGVtcHR5KSwgdHlwZQo7Owo7OyBN LXggaGlkZS1pZmRlZnMgIG9yIEMtYyBAIGgKOzsKOzsgSGlkZS1pZmRlZiBzdXBwcmVzc2VzIHRo ZSBkaXNwbGF5IG9mIGNvZGUgdGhhdCB0aGUgcHJlcHJvY2Vzc29yIHdvdWxkbid0Cjs7IHBhc3Mg dGhyb3VnaC4gIFRoZSBzdXBwb3J0IG9mIGNvbnN0YW50IGV4cHJlc3Npb25zIGluICNpZiBsaW5l cyBpcwo7OyBsaW1pdGVkIHRvIGlkZW50aWZpZXJzLCBwYXJlbnMsIGFuZCB0aGUgb3BlcmF0b3Jz OiAmJiwgfHwsICEsIGFuZAo7OyAiZGVmaW5lZCIuICBQbGVhc2UgZXh0ZW5kIHRoaXMuCjs7Cjs7 IFRoZSBoaWRkZW4gY29kZSBpcyBtYXJrZWQgYnkgZWxsaXBzZXMgKC4uLikuICBCZQo7OyBjYXV0 aW91cyB3aGVuIGVkaXRpbmcgbmVhciBlbGxpcHNlcywgc2luY2UgdGhlIGhpZGRlbiB0ZXh0IGlz Cjs7IHN0aWxsIGluIHRoZSBidWZmZXIsIGFuZCB5b3UgY2FuIG1vdmUgdGhlIHBvaW50IGludG8g aXQgYW5kIG1vZGlmeQo7OyB0ZXh0IHVuYXdhcmVzLgo7OyBZb3UgY2FuIG1ha2UgeW91ciBidWZm ZXIgcmVhZC1vbmx5IHdoaWxlIGhpZGUtaWZkZWYtaGlkaW5nIGJ5IHNldHRpbmcKOzsgaGlkZS1p ZmRlZi1yZWFkLW9ubHkgdG8gYSBub24tbmlsIHZhbHVlLiAgWW91IGNhbiB0b2dnbGUgdGhpcwo7 OyB2YXJpYWJsZSB3aXRoIGhpZGUtaWZkZWYtdG9nZ2xlLXJlYWQtb25seSAoQy1jIEAgQy1xKS4K OzsKOzsgWW91IGNhbiB1bmRvIHRoZSBlZmZlY3Qgb2YgaGlkZS1pZmRlZnMgYnkgdHlwaW5nCjs7 Cjs7IE0teCBzaG93LWlmZGVmcyAgb3IgQy1jIEAgcwo7Owo7OyBVc2UgTS14IGhpZGUtaWZkZWYt ZGVmaW5lIChDLWMgQCBkKSB0byBkZWZpbmUgYSBzeW1ib2wuCjs7IFVzZSBNLXggaGlkZS1pZmRl Zi11bmRlZiAoQy1jIEAgdSkgdG8gdW5kZWZpbmUgYSBzeW1ib2wuCjs7Cjs7IElmIHlvdSBkZWZp bmUgb3IgdW5kZWZpbmUgYSBzeW1ib2wgd2hpbGUgaGlkZS1pZmRlZi1tb2RlIGlzIGluIGVmZmVj dCwKOzsgdGhlIGRpc3BsYXkgd2lsbCBiZSB1cGRhdGVkLiAgT25seSB0aGUgZGVmaW5lIGxpc3Qg Zm9yIHRoZSBjdXJyZW50Cjs7IGJ1ZmZlciB3aWxsIGJlIGFmZmVjdGVkLiAgWW91IGNhbiBzYXZl IGNoYW5nZXMgdG8gdGhlIGxvY2FsIGRlZmluZQo7OyBsaXN0IHdpdGggaGlkZS1pZmRlZi1zZXQt ZGVmaW5lLWFsaXN0LiAgVGhpcyBhZGRzIGVudHJpZXMKOzsgdG8gaGlkZS1pZmRlZi1kZWZpbmUt YWxpc3QuCjs7Cjs7IElmIHlvdSBoYXZlIGRlZmluZWQgYSBoaWRlLWlmZGVmLW1vZGUtaG9vaywg eW91IGNhbiBzZXQKOzsgdXAgYSBsaXN0IG9mIHN5bWJvbHMgdGhhdCBtYXkgYmUgdXNlZCBieSBo aWRlLWlmZGVmcyBhcyBpbiB0aGUKOzsgZm9sbG93aW5nIGV4YW1wbGU6Cjs7Cjs7IChhZGQtaG9v ayAnaGlkZS1pZmRlZi1tb2RlLWhvb2sKOzsgICAgICAobGFtYmRhICgpCjs7ICAgICAgICh1bmxl c3MgaGlkZS1pZmRlZi1kZWZpbmUtYWxpc3QKOzsgICAgICAgICAoc2V0cSBoaWRlLWlmZGVmLWRl ZmluZS1hbGlzdAo7OyAgICAgICAgICAgICAgJygobGlzdDEgT05FIFRXTykKOzsgICAgICAgICAg ICAgICAgKGxpc3QyIFRXTyBUSFJFRSkpKSkKOzsgICAgICAgKGhpZGUtaWZkZWYtdXNlLWRlZmlu ZS1hbGlzdCAnbGlzdDIpKSkgOyB1c2UgbGlzdDIgYnkgZGVmYXVsdAo7Owo7OyBZb3UgY2FuIGNh bGwgaGlkZS1pZmRlZi11c2UtZGVmaW5lLWFsaXN0IChDLWMgQCBVKSBhdCBhbnkgdGltZSB0byBz cGVjaWZ5Cjs7IGFub3RoZXIgbGlzdCB0byB1c2UuCjs7Cjs7IFRvIGNhdXNlIGlmZGVmcyB0byBi ZSBoaWRkZW4gYXMgc29vbiBhcyBoaWRlLWlmZGVmLW1vZGUgaXMgY2FsbGVkLAo7OyBzZXQgaGlk ZS1pZmRlZi1pbml0aWFsbHkgdG8gbm9uLW5pbC4KOzsKOzsgSWYgeW91IHNldCBoaWRlLWlmZGVm LWxpbmVzIHRvIHQsIGhpZGUtaWZkZWZzIGhpZGVzIGFsbCB0aGUgI2lmZGVmIGxpbmVzLgo7OyBJ biB0aGUgYWJzZW5jZSBvZiBoaWdobGlnaHRpbmcsIHRoYXQgbWlnaHQgYmUgYSBiYWQgaWRlYS4g IElmIHlvdSBzZXQKOzsgaGlkZS1pZmRlZi1saW5lcyB0byBuaWwgKHRoZSBkZWZhdWx0KSwgdGhl IHN1cnJvdW5kaW5nIHByZXByb2Nlc3Nvcgo7OyBsaW5lcyB3aWxsIGJlIGRpc3BsYXllZC4gIFRo YXQgY2FuIGJlIGNvbmZ1c2luZyBpbiBpdHMgb3duCjs7IHJpZ2h0LiAgT3RoZXIgdmFyaWF0aW9u cyBvbiBkaXNwbGF5IGFyZSBwb3NzaWJsZSwgYnV0IG5vdCBtdWNoCjs7IGJldHRlci4KOzsKOzsg WW91IGNhbiBleHBsaWNpdGx5IGhpZGUgb3Igc2hvdyBpbmRpdmlkdWFsIGlmZGVmIGJsb2NrcyBp cnJlc3BlY3RpdmUKOzsgb2YgdGhlIGRlZmluZSBsaXN0IGJ5IHVzaW5nIGhpZGUtaWZkZWYtYmxv Y2sgYW5kIHNob3ctaWZkZWYtYmxvY2suCjs7Cjs7IFlvdSBjYW4gbW92ZSB0aGUgcG9pbnQgYmV0 d2VlbiBpZmRlZnMgd2l0aCBmb3J3YXJkLWlmZGVmLCBiYWNrd2FyZC1pZmRlZiwKOzsgdXAtaWZk ZWYsIGRvd24taWZkZWYsIG5leHQtaWZkZWYsIGFuZCBwcmV2aW91cy1pZmRlZi4KOzsKOzsgSWYg eW91IGhhdmUgbWlub3ItbW9kZS1hbGlzdCBpbiB5b3VyIG1vZGUgbGluZSAodGhlIGRlZmF1bHQp IHR3byBsYWJlbHMKOzsgbWF5IGFwcGVhci4gICJJZmRlZiIgd2lsbCBhcHBlYXIgd2hlbiBoaWRl LWlmZGVmLW1vZGUgaXMgYWN0aXZlLiAgIkhpZGluZyIKOzsgd2lsbCBhcHBlYXIgd2hlbiB0ZXh0 IG1heSBiZSBoaWRkZW4gKCJoaWRlLWlmZGVmLWhpZGluZyIgaXMgbm9uLW5pbCkuCjs7Cjs7IFdy aXR0ZW4gYnkgQnJpYW4gTWFyaWNrLCBhdCBHb3VsZCwgQ29tcHV0ZXIgU3lzdGVtcyBEaXZpc2lv biwgVXJiYW5hIElMLgo7OyBFeHRlbnNpdmVseSBtb2RpZmllZCBieSBEYW5pZWwgTGFMaWJlcnRl ICh3aGlsZSBhdCBHb3VsZCkuCjs7Cjs7IEV4dGVuc2l2ZWx5IG1vZGlmaWVkIGJ5IEx1a2UgTGVl IGluIDIwMTMuCgo7OzsgQ29kZToKCihldmFsLXdoZW4tY29tcGlsZSAocmVxdWlyZSAnY2wpKQoK KGRlZmdyb3VwIGhpZGUtaWZkZWYgbmlsCiAgIkhpZGUgc2VsZWN0ZWQgY29kZSB3aXRoaW4gYGlm ZGVmJy4iCiAgOmdyb3VwICdjKQoKKGRlZmN1c3RvbSBoaWRlLWlmZGVmLWluaXRpYWxseSBuaWwK ICAiTm9uLW5pbCBtZWFucyBjYWxsIGBoaWRlLWlmZGVmcycgd2hlbiBIaWRlLUlmZGVmIG1vZGUg aXMgZmlyc3QgYWN0aXZhdGVkLiIKICA6dHlwZSAnYm9vbGVhbgogIDpncm91cCAnaGlkZS1pZmRl ZikKCihkZWZjdXN0b20gaGlkZS1pZmRlZi1yZWFkLW9ubHkgbmlsCiAgIlNldCB0byBub24tbmls IGlmIHlvdSB3YW50IGJ1ZmZlciB0byBiZSByZWFkLW9ubHkgd2hpbGUgaGlkaW5nIHRleHQuIgog IDp0eXBlICdib29sZWFuCiAgOmdyb3VwICdoaWRlLWlmZGVmKQoKKGRlZmN1c3RvbSBoaWRlLWlm ZGVmLWxpbmVzIG5pbAogICJOb24tbmlsIG1lYW5zIGhpZGUgdGhlICNpZlgsICNlbHNlLCBhbmQg I2VuZGlmIGxpbmVzLiIKICA6dHlwZSAnYm9vbGVhbgogIDpncm91cCAnaGlkZS1pZmRlZikKCihk ZWZjdXN0b20gaGlkZS1pZmRlZi1zaGFkb3cgbmlsCiAgIk5vbi1uaWwgbWVhbnMgc2hhZG93IHRl eHQgaW5zdGVhZCBvZiBoaWRpbmcgaXQuIgogIDp0eXBlICdib29sZWFuCiAgOmdyb3VwICdoaWRl LWlmZGVmCiAgOnZlcnNpb24gIjIzLjEiKQoKKGRlZmN1c3RvbSBoaWRlLWlmZGVmLWV4Y2x1ZGUt ZGVmaW5lLXJlZ2V4cC1wYXR0ZXJuIG5pbAogICJJZ25vcmUgI2RlZmluZSBuYW1lIGlmIHRoYXQg bmFtZSBtYXRjaCB0aGlzIGV4Y2x1c2lvbiBwYXR0ZXJuLiIKICA6Z3JvdXAgJ2hpZGUtaWZkZWYp CgooZGVmZmFjZSBoaWRlLWlmZGVmLXNoYWRvdyAnKCh0ICg6aW5oZXJpdCBzaGFkb3cpKSkKICAi RmFjZSBmb3Igc2hhZG93aW5nIGlmZGVmIGJsb2Nrcy4iCiAgOmdyb3VwICdoaWRlLWlmZGVmCiAg OnZlcnNpb24gIjIzLjEiKQoKCihkZWZ2YXIgaGlkZS1pZmRlZi1tb2RlLXN1Ym1hcAogIDs7IFNl dCB1cCB0aGUgc3VibWFwIHRoYXQgZ29lcyBhZnRlciB0aGUgcHJlZml4IGtleS4KICAobGV0ICgo bWFwIChtYWtlLXNwYXJzZS1rZXltYXApKSkKICAgIChkZWZpbmUta2V5IG1hcCAiZCIgJ2hpZGUt aWZkZWYtZGVmaW5lKQogICAgKGRlZmluZS1rZXkgbWFwICJ1IiAnaGlkZS1pZmRlZi11bmRlZikK ICAgIChkZWZpbmUta2V5IG1hcCAiRCIgJ2hpZGUtaWZkZWYtc2V0LWRlZmluZS1hbGlzdCkKICAg IChkZWZpbmUta2V5IG1hcCAiVSIgJ2hpZGUtaWZkZWYtdXNlLWRlZmluZS1hbGlzdCkKCiAgICAo ZGVmaW5lLWtleSBtYXAgImgiICdoaWRlLWlmZGVmcykKICAgIChkZWZpbmUta2V5IG1hcCAicyIg J3Nob3ctaWZkZWZzKQogICAgKGRlZmluZS1rZXkgbWFwICJcQy1kIiAnaGlkZS1pZmRlZi1ibG9j aykKICAgIChkZWZpbmUta2V5IG1hcCAiXEMtcyIgJ3Nob3ctaWZkZWYtYmxvY2spCgogICAgKGRl ZmluZS1rZXkgbWFwICJlIiAnaGlmLWV2YWx1YXRlLW1hY3JvKQoKICAgIChkZWZpbmUta2V5IG1h cCAiXEMtcSIgJ2hpZGUtaWZkZWYtdG9nZ2xlLXJlYWQtb25seSkKICAgIChkZWZpbmUta2V5IG1h cCAiXEMtdyIgJ2hpZGUtaWZkZWYtdG9nZ2xlLXNoYWRvd2luZykKICAgIChzdWJzdGl0dXRlLWtl eS1kZWZpbml0aW9uCiAgICAgJ3RvZ2dsZS1yZWFkLW9ubHkgJ2hpZGUtaWZkZWYtdG9nZ2xlLW91 dHNpZGUtcmVhZC1vbmx5IG1hcCkKICAgIG1hcCkKICAiS2V5bWFwIHVzZWQgYnkgYGhpZGUtaWZk ZWYtbW9kZScgdW5kZXIgYGhpZGUtaWZkZWYtbW9kZS1wcmVmaXgta2V5Jy4iKQoKKGRlZmNvbnN0 IGhpZGUtaWZkZWYtbW9kZS1wcmVmaXgta2V5ICJcQy1jQCIKICAiUHJlZml4IGtleSBmb3IgYWxs IEhpZGUtSWZkZWYgbW9kZSBjb21tYW5kcy4iKQoKKGRlZnZhciBoaWRlLWlmZGVmLW1vZGUtbWFw CiAgOzsgU2V0IHVwIHRoZSBtb2RlJ3MgbWFpbiBtYXAsIHdoaWNoIGxlYWRzIHZpYSB0aGUgcHJl Zml4IGtleSB0byB0aGUgc3VibWFwLgogIChsZXQgKChtYXAgKG1ha2Utc3BhcnNlLWtleW1hcCkp KQogICAgKGRlZmluZS1rZXkgbWFwIGhpZGUtaWZkZWYtbW9kZS1wcmVmaXgta2V5IGhpZGUtaWZk ZWYtbW9kZS1zdWJtYXApCiAgICBtYXApCiAgIktleW1hcCB1c2VkIHdpdGggYGhpZGUtaWZkZWYt bW9kZScuIikKCihlYXN5LW1lbnUtZGVmaW5lIGhpZGUtaWZkZWYtbW9kZS1tZW51IGhpZGUtaWZk ZWYtbW9kZS1tYXAKICAiTWVudSBmb3IgYGhpZGUtaWZkZWYtbW9kZScuIgogICcoIkhpZGUtSWZk ZWYiCiAgICBbIkhpZGUgc29tZSBpZmRlZnMiIGhpZGUtaWZkZWZzCiAgICAgOmhlbHAgIkhpZGUg dGhlIGNvbnRlbnRzIG9mIHNvbWUgI2lmZGVmcyJdCiAgICBbIlNob3cgYWxsIGlmZGVmcyIgc2hv dy1pZmRlZnMKICAgICA6aGVscCAiQ2FuY2VsIHRoZSBlZmZlY3RzIG9mIGBoaWRlLWlmZGVmJzog c2hvdyB0aGUgY29udGVudHMgb2YgYWxsICNpZmRlZnMiXQogICAgWyJIaWRlIGlmZGVmIGJsb2Nr IiBoaWRlLWlmZGVmLWJsb2NrCiAgICAgOmhlbHAgIkhpZGUgdGhlIGlmZGVmIGJsb2NrICh0cnVl IG9yIGZhbHNlIHBhcnQpIGVuY2xvc2luZyBvciBiZWZvcmUgdGhlIGN1cnNvciJdCiAgICBbIlNo b3cgaWZkZWYgYmxvY2siIHNob3ctaWZkZWYtYmxvY2sKICAgICA6aGVscCAiU2hvdyB0aGUgaWZk ZWYgYmxvY2sgKHRydWUgb3IgZmFsc2UgcGFydCkgZW5jbG9zaW5nIG9yIGJlZm9yZSB0aGUgY3Vy c29yIl0KICAgIFsiRGVmaW5lIGEgdmFyaWFibGUuLi4iIGhpZGUtaWZkZWYtZGVmaW5lCiAgICAg OmhlbHAgIkRlZmluZSBhIFZBUiBzbyB0aGF0ICNpZmRlZiBWQVIgd291bGQgYmUgaW5jbHVkZWQi XQogICAgWyJVbmRlZmluZSBhIHZhcmlhYmxlLi4uIiBoaWRlLWlmZGVmLXVuZGVmCiAgICAgOmhl bHAgIlVuZGVmaW5lIGEgVkFSIHNvIHRoYXQgI2lmZGVmIFZBUiB3b3VsZCBub3QgYmUgaW5jbHVk ZWQiXQogICAgWyJEZWZpbmUgYW4gYWxpc3QuLi4iIGhpZGUtaWZkZWYtc2V0LWRlZmluZS1hbGlz dAogICAgIDpoZWxwICJTZXQgdGhlIGFzc29jaWF0aW9uIGZvciBOQU1FIHRvIGBoaWRlLWlmZGVm LWVudiciXQogICAgWyJVc2UgYW4gYWxpc3QuLi4iIGhpZGUtaWZkZWYtdXNlLWRlZmluZS1hbGlz dAogICAgIDpoZWxwICJTZXQgYGhpZGUtaWZkZWYtZW52JyB0byB0aGUgZGVmaW5lIGxpc3Qgc3Bl Y2lmaWVkIGJ5IE5BTUUiXQogICAgWyJUb2dnbGUgcmVhZCBvbmx5IiBoaWRlLWlmZGVmLXRvZ2ds ZS1yZWFkLW9ubHkKICAgICA6c3R5bGUgdG9nZ2xlIDpzZWxlY3RlZCBoaWRlLWlmZGVmLXJlYWQt b25seQogICAgIDpoZWxwICJCdWZmZXIgc2hvdWxkIGJlIHJlYWQtb25seSB3aGlsZSBoaWRpbmcg dGV4dCJdCiAgICBbIlRvZ2dsZSBzaGFkb3dpbmciIGhpZGUtaWZkZWYtdG9nZ2xlLXNoYWRvd2lu ZwogICAgIDpzdHlsZSB0b2dnbGUgOnNlbGVjdGVkIGhpZGUtaWZkZWYtc2hhZG93CiAgICAgOmhl bHAgIlRleHQgc2hvdWxkIGJlIHNoYWRvd2VkIGluc3RlYWQgb2YgaGlkZGVuIl0pKQoKKGRlZnZh ciBoaWRlLWlmZGVmLWhpZGluZyBuaWwKICAiTm9uLW5pbCB3aGVuIHRleHQgbWF5IGJlIGhpZGRl bi4iKQoKKG9yIChhc3NxICdoaWRlLWlmZGVmLWhpZGluZyBtaW5vci1tb2RlLWFsaXN0KQogICAg KHNldHEgbWlub3ItbW9kZS1hbGlzdAogICAgICAgICAgKGNvbnMgJyhoaWRlLWlmZGVmLWhpZGlu ZyAiIEhpZGluZyIpCiAgICAgICAgICAgICAgICBtaW5vci1tb2RlLWFsaXN0KSkpCgo7OyBmaXgg Yy1tb2RlIHN5bnRheCB0YWJsZSBzbyB3ZSBjYW4gcmVjb2duaXplIHdob2xlIHN5bWJvbHMuCihk ZWZ2YXIgaGlkZS1pZmRlZi1zeW50YXgtdGFibGUKICAobGV0ICgoc3QgKGNvcHktc3ludGF4LXRh YmxlIGMtbW9kZS1zeW50YXgtdGFibGUpKSkKICAgIChtb2RpZnktc3ludGF4LWVudHJ5ID9fICJ3 IiBzdCkKICAgIChtb2RpZnktc3ludGF4LWVudHJ5ID8mICIuIiBzdCkKICAgIChtb2RpZnktc3lu dGF4LWVudHJ5ID9cfCAiLiIgc3QpCiAgICBzdCkKICAiU3ludGF4IHRhYmxlIHVzZWQgZm9yIHRv a2VuaXppbmcgI2lmIGV4cHJlc3Npb25zLiIpCgooZGVmdmFyIGhpZGUtaWZkZWYtZW52IG5pbAog ICJBbiBhbGlzdCBvZiBkZWZpbmVkIHN5bWJvbHMgYW5kIHRoZWlyIHZhbHVlcy4iKQoKKGRlZnZh ciBoaWYtb3V0c2lkZS1yZWFkLW9ubHkgbmlsCiAgIkludGVybmFsIHZhcmlhYmxlLiAgU2F2ZXMg dGhlIHZhbHVlIG9mIGBidWZmZXItcmVhZC1vbmx5JyB3aGlsZSBoaWRpbmcuIikKCjs7OyMjI2F1 dG9sb2FkCihkZWZpbmUtbWlub3ItbW9kZSBoaWRlLWlmZGVmLW1vZGUKICAiVG9nZ2xlIGZlYXR1 cmVzIHRvIGhpZGUvc2hvdyAjaWZkZWYgYmxvY2tzIChIaWRlLUlmZGVmIG1vZGUpLgpXaXRoIGEg cHJlZml4IGFyZ3VtZW50IEFSRywgZW5hYmxlIEhpZGUtSWZkZWYgbW9kZSBpZiBBUkcgaXMKcG9z aXRpdmUsIGFuZCBkaXNhYmxlIGl0IG90aGVyd2lzZS4gIElmIGNhbGxlZCBmcm9tIExpc3AsIGVu YWJsZQp0aGUgbW9kZSBpZiBBUkcgaXMgb21pdHRlZCBvciBuaWwuCgpIaWRlLUlmZGVmIG1vZGUg aXMgYSBidWZmZXItbG9jYWwgbWlub3IgbW9kZSBmb3IgdXNlIHdpdGggQyBhbmQKQy1saWtlIG1h am9yIG1vZGVzLiAgV2hlbiBlbmFibGVkLCBjb2RlIHdpdGhpbiAjaWZkZWYgY29uc3RydWN0cwp0 aGF0IHRoZSBDIHByZXByb2Nlc3NvciB3b3VsZCBlbGltaW5hdGUgbWF5IGJlIGhpZGRlbiBmcm9t IHZpZXcuClNldmVyYWwgdmFyaWFibGVzIGFmZmVjdCBob3cgdGhlIGhpZGluZyBpcyBkb25lOgoK YGhpZGUtaWZkZWYtZW52JwogICAgICAgIEFuIGFzc29jaWF0aW9uIGxpc3Qgb2YgZGVmaW5lZCBh bmQgdW5kZWZpbmVkIHN5bWJvbHMgZm9yIHRoZQogICAgICAgIGN1cnJlbnQgYnVmZmVyLiAgSW5p dGlhbGx5LCB0aGUgZ2xvYmFsIHZhbHVlIG9mIGBoaWRlLWlmZGVmLWVudicKICAgICAgICBpcyB1 c2VkLgoKYGhpZGUtaWZkZWYtZGVmaW5lLWFsaXN0JwogICAgICAgIEFuIGFzc29jaWF0aW9uIGxp c3Qgb2YgZGVmaW5lZCBzeW1ib2wgbGlzdHMuCiAgICAgICAgVXNlIGBoaWRlLWlmZGVmLXNldC1k ZWZpbmUtYWxpc3QnIHRvIHNhdmUgdGhlIGN1cnJlbnQgYGhpZGUtaWZkZWYtZW52JwogICAgICAg IGFuZCBgaGlkZS1pZmRlZi11c2UtZGVmaW5lLWFsaXN0JyB0byBzZXQgdGhlIGN1cnJlbnQgYGhp ZGUtaWZkZWYtZW52JwogICAgICAgIGZyb20gb25lIG9mIHRoZSBsaXN0cyBpbiBgaGlkZS1pZmRl Zi1kZWZpbmUtYWxpc3QnLgoKYGhpZGUtaWZkZWYtbGluZXMnCiAgICAgICAgU2V0IHRvIG5vbi1u aWwgdG8gbm90IHNob3cgI2lmLCAjaWZkZWYsICNpZm5kZWYsICNlbHNlLCBhbmQKICAgICAgICAj ZW5kaWYgbGluZXMgd2hlbiBoaWRpbmcuCgpgaGlkZS1pZmRlZi1pbml0aWFsbHknCiAgICAgICAg SW5kaWNhdGVzIHdoZXRoZXIgYGhpZGUtaWZkZWZzJyBzaG91bGQgYmUgY2FsbGVkIHdoZW4gSGlk ZS1JZmRlZiBtb2RlCiAgICAgICAgaXMgYWN0aXZhdGVkLgoKYGhpZGUtaWZkZWYtcmVhZC1vbmx5 JwogICAgICAgIFNldCB0byBub24tbmlsIGlmIHlvdSB3YW50IHRvIG1ha2UgYnVmZmVycyByZWFk IG9ubHkgd2hpbGUgaGlkaW5nLgogICAgICAgIEFmdGVyIGBzaG93LWlmZGVmcycsIHJlYWQtb25s eSBzdGF0dXMgaXMgcmVzdG9yZWQgdG8gcHJldmlvdXMgdmFsdWUuCgpcXHtoaWRlLWlmZGVmLW1v ZGUtbWFwfSIKICA6Z3JvdXAgJ2hpZGUtaWZkZWYgOmxpZ2h0ZXIgIiBJZmRlZiIKICAoaWYgaGlk ZS1pZmRlZi1tb2RlCiAgICAgIChwcm9nbgoJOzsgaW5oZXJpdCBnbG9iYWwgdmFsdWVzCjs7CShz ZXQgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2hpZGUtaWZkZWYtZW52KSA7OyBbMjAxMi0wOS0yNyAx MTowNToyNiArMDgwMF0gTHVrZSByZW0gMiBpbnMgMgo7OwkgICAgIChkZWZhdWx0LXZhbHVlICdo aWRlLWlmZGVmLWVudikpCgkoc2V0ICdoaWRlLWlmZGVmLWVudiAoZGVmYXVsdC12YWx1ZSAnaGlk ZS1pZmRlZi1lbnYpKQoJKHNldCAobWFrZS1sb2NhbC12YXJpYWJsZSAnaGlkZS1pZmRlZi1oaWRp bmcpCgkgICAgIChkZWZhdWx0LXZhbHVlICdoaWRlLWlmZGVmLWhpZGluZykpCgkoc2V0IChtYWtl LWxvY2FsLXZhcmlhYmxlICdoaWYtb3V0c2lkZS1yZWFkLW9ubHkpIGJ1ZmZlci1yZWFkLW9ubHkp Cgkoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlICdsaW5lLW1vdmUtaWdub3JlLWludmlzaWJsZSkg dCkKCShhZGQtaG9vayAnY2hhbmdlLW1ham9yLW1vZGUtaG9vawoJCSAgKGxhbWJkYSAoKSAoaGlk ZS1pZmRlZi1tb2RlIC0xKSkgbmlsIHQpCgoJKGFkZC10by1pbnZpc2liaWxpdHktc3BlYyAnKGhp ZGUtaWZkZWYgLiB0KSkKCgkoaWYgaGlkZS1pZmRlZi1pbml0aWFsbHkKCSAgICAoaGlkZS1pZmRl ZnMpCgkgIChzaG93LWlmZGVmcykpKQogICAgOzsgZWxzZSBlbmQgaGlkZS1pZmRlZi1tb2RlCiAg ICAoa2lsbC1sb2NhbC12YXJpYWJsZSAnbGluZS1tb3ZlLWlnbm9yZS1pbnZpc2libGUpCiAgICAo cmVtb3ZlLWZyb20taW52aXNpYmlsaXR5LXNwZWMgJyhoaWRlLWlmZGVmIC4gdCkpCiAgICAod2hl biBoaWRlLWlmZGVmLWhpZGluZwogICAgICAoc2hvdy1pZmRlZnMpKSkpCgoKKGRlZnVuIGhpZi1z aG93LWFsbCAoKQogICJTaG93IGFsbCBvZiB0aGUgdGV4dCBpbiB0aGUgY3VycmVudCBidWZmZXIu IgogIChpbnRlcmFjdGl2ZSkKICAoaGlmLXNob3ctaWZkZWYtcmVnaW9uIChwb2ludC1taW4pIChw b2ludC1tYXgpKSkKCjs7IEJ5IHB1dHRpbmcgdGhpcyBvbiBhZnRlci1yZXZlcnQtaG9vaywgd2Ug YXJyYW5nZSB0aGF0IGl0IG9ubHkKOzsgZG9lcyBhbnl0aGluZyB3aGVuIHJldmVydC1idWZmZXIg YXZvaWRzIHR1cm5pbmcgb2ZmIHRoZSBtb2RlLgo7OyAoVGhhdCBjYW4gaGFwcGVuIGluIFZDLikK KGRlZnVuIGhpZi1hZnRlci1yZXZlcnQtZnVuY3Rpb24gKCkKICAoYW5kIGhpZGUtaWZkZWYtbW9k ZSBoaWRlLWlmZGVmLWhpZGluZwogICAgICAgKGhpZGUtaWZkZWZzIHQpKSkKKGFkZC1ob29rICdh ZnRlci1yZXZlcnQtaG9vayAnaGlmLWFmdGVyLXJldmVydC1mdW5jdGlvbikKCihkZWZ1biBoaWYt ZW5kLW9mLWxpbmUgKCkKICAoZW5kLW9mLWxpbmUpCiAgKHdoaWxlICg9IChsb2dhbmQgMSAoc2tp cC1jaGFycy1iYWNrd2FyZCAiXFxcXCIpKSAxKQogICAgKGVuZC1vZi1saW5lIDIpKSkKCihkZWZ1 biBtZXJnZS1pZmRlZi1yZWdpb24gKHN0YXJ0IGVuZCkKICA7OyBHZW5lcm5hbGx5IHRoZXJlIGlz IG5vIG5lZWQgdG8gY2FsbCBpdHNlbGYgcmVjdXJzaXZlbHkgc2luY2UgdGhlcmUgc2hvdWxkIG9y aWdpbmFsbHkKICA7OyBleGlzdHMgbm8gdW4tbWVyZ2VkIHJlZ2lvbnM7IGhvd2V2ZXIsIGlmIGEg cGFydCBvZiB0aGUgZmlsZSBpcyBoaWRkZW4gd2l0aCAnaGlkZS1pZmRlZi1saW5lcycKICA7OyBh cyBuaWwgd2hpbGUgYW5vdGhlciBwYXJ0IHdpdGggJ3QsIHRoaXMgY2FzZSBoYXBwZW5zLgogIDs7 IFRPRE86IHNob3VsZCB3ZSBtZXJnZT8gb3IganVzdCBjcmVhdGUgYSBjb250YWluZXIgb3Zlcmxh eT8gLS0gdGhpcyBjYW4gcHJldmVudCBoaWRlaWYtc2hvdy1pZmRlZgogIDs7IGV4cGFuZCB0b28g bWFueSBzaW5jZSB0aGVyZSBpcyBvbmx5IGEgYmlnIG92ZXJsYXkgZXhpc3RzIHRoZXJlIHdpdGhv dXQgYW55IHNtYWxsZXIgb3ZlcmxheXMuCiAgIk1lcmdlIG5lYXJieSBpZmRlZiByZWdpb25zIHRv IGZvcm0gYSBiaWdnZXIgb3ZlcmxheS4gVGhpcyB3aWxsIGRlY3JlYXNlIHRoZQp0b3RhbCBudW1i ZXIgb2Ygb3ZlcmxheXMgY3JlYXRlZC4iCiAgKHNhdmUtcmVzdHJpY3Rpb24KICAgICh3aWRlbikg Ozsgb3RoZXJ3aXNlIChwb2ludC1taW4pIGFuZCAocG9pbnQtbWF4KSB3aWxsIGJlCiAgICAgICAg ICAgIDs7IHJlc3RyaWN0ZWQgYW5kIHRodXMgZmFpbCB0byBmaW5kIG5laWdoYm9yIG92ZXJsYXlz CiAgICAobGV0ICgoYmVnb3ZycyAob3ZlcmxheXMtaW4KICAgICAgICAgICAgICAgICAgICAobWF4 ICgtIHN0YXJ0IDIpIChwb2ludC1taW4pKQogICAgICAgICAgICAgICAgICAgIChtYXggKC0gc3Rh cnQgMSkgKHBvaW50LW1pbikpKSkKICAgICAgICAgIChlbmRvdnJzIChvdmVybGF5cy1pbgogICAg ICAgICAgICAgICAgICAgIChtaW4gKCsgZW5kIDEpIChwb2ludC1tYXgpKQogICAgICAgICAgICAg ICAgICAgIChtaW4gKCsgZW5kIDIpIChwb2ludC1tYXgpKSkpCiAgICAgICAgICAob2IgbmlsKQog ICAgICAgICAgKG9lIG5pbCkKICAgICAgICAgIGIgZSkKICAgICAgOzsgbWVyZ2Ugb3ZlcmxheXMg YmVmb3JlICdzdGFydCcKICAgICAgKGRvbGlzdCAobyBiZWdvdnJzKQogICAgICAgICh3aGVuIChv dmVybGF5LWdldCBvICdoaWRlLWlmZGVmKQogICAgICAgICAgKHNldHEgYiAobWluIHN0YXJ0IChv dmVybGF5LXN0YXJ0IG8pKQogICAgICAgICAgICAgICAgZSAobWF4IGVuZCAob3ZlcmxheS1lbmQg bykpKQogICAgICAgICAgKG1vdmUtb3ZlcmxheSBvIGIgZSkKICAgICAgICAgIChtZXJnZS1pZmRl Zi1yZWdpb24gYiBlKQogICAgICAgICAgKHNldHEgb2IgbykpKQogICAgICA7OyBtZXJnZSBvdmVy bGF5cyBhZnRlciAnZW5kJwogICAgICAoZG9saXN0IChvIGVuZG92cnMpCiAgICAgICAgKHdoZW4g KG92ZXJsYXktZ2V0IG8gJ2hpZGUtaWZkZWYpCiAgICAgICAgICAoc2V0cSBiIChtaW4gc3RhcnQg KG92ZXJsYXktc3RhcnQgbykpCiAgICAgICAgICAgICAgICBlIChtYXggZW5kIChvdmVybGF5LWVu ZCBvKSkpCiAgICAgICAgICAobW92ZS1vdmVybGF5IG8gYiBlKQogICAgICAgICAgKG1lcmdlLWlm ZGVmLXJlZ2lvbiBiIGUpCiAgICAgICAgICAoc2V0ZiBvZSBvKSkpCiAgICAgIDs7IGlmIGJvdGgg J3N0YXJ0JyAnZW5kJyBtZXJnaW5nIGhhcHBlbnMsIG1lcmdlIGludG8gYmlnZ2VyIG9uZQogICAg ICAod2hlbiAoYW5kIG9iIG9lKQogICAgICAgIChsZXQgKChiIChtaW4gKG92ZXJsYXktc3RhcnQg b2IpIChvdmVybGF5LXN0YXJ0IG9lKSkpCiAgICAgICAgICAgICAgKGUgKG1heCAob3ZlcmxheS1l bmQgb2IpIChvdmVybGF5LWVuZCBvZSkpKSkKICAgICAgICAgIChkZWxldGUtb3ZlcmxheSBvZSkK ICAgICAgICAgIChtb3ZlLW92ZXJsYXkgb2IgYiBlKQogICAgICAgICAgKG1lcmdlLWlmZGVmLXJl Z2lvbiBiIGUpKSkKICAgICAgKG9yIG9iIG9lKSkpKQoKKGRlZnVuIGhpZGUtaWZkZWYtcmVnaW9u LWludGVybmFsIChzdGFydCBlbmQpCiAgKHVubGVzcyAobWVyZ2UtaWZkZWYtcmVnaW9uIHN0YXJ0 IGVuZCkKICAgIChsZXQgKChvIChtYWtlLW92ZXJsYXkgc3RhcnQgZW5kKSkpCiAgICAgIChvdmVy bGF5LXB1dCBvICdoaWRlLWlmZGVmIHQpCiAgICAgIChpZiBoaWRlLWlmZGVmLXNoYWRvdwogICAg ICAgICAgKG92ZXJsYXktcHV0IG8gJ2ZhY2UgJ2hpZGUtaWZkZWYtc2hhZG93KQogICAgICAgIChv dmVybGF5LXB1dCBvICdpbnZpc2libGUgJ2hpZGUtaWZkZWYpKSkpKQoKKGRlZnVuIGhpZGUtaWZk ZWYtcmVnaW9uIChzdGFydCBlbmQpCiAgIlNUQVJUIGlzIHRoZSBzdGFydCBvZiBhICNpZiwgI2Vs aWYsIG9yICNlbHNlIGZvcm0uICBFTkQgaXMgdGhlIGVuZGluZyBwYXJ0LgpFdmVyeXRoaW5nIGlu Y2x1ZGluZyB0aGVzZSBsaW5lcyBpcyBtYWRlIGludmlzaWJsZS4iCiAgKHNhdmUtZXhjdXJzaW9u CiAgICAoZ290by1jaGFyIHN0YXJ0KSAoaGlmLWVuZC1vZi1saW5lKSAoc2V0cSBzdGFydCAocG9p bnQpKQogICAgKGdvdG8tY2hhciBlbmQpIChoaWYtZW5kLW9mLWxpbmUpIChzZXRxIGVuZCAocG9p bnQpKQogICAgKGhpZGUtaWZkZWYtcmVnaW9uLWludGVybmFsIHN0YXJ0IGVuZCkpKQoKKGRlZnVu IGhpZi1zaG93LWlmZGVmLXJlZ2lvbiAoc3RhcnQgZW5kKQogICJFdmVyeXRoaW5nIGJldHdlZW4g U1RBUlQgYW5kIEVORCBpcyBtYWRlIHZpc2libGUuIgogIChsZXQgKChvbnVtIChsZW5ndGggKG92 ZXJsYXlzLWluIHN0YXJ0IGVuZCkpKSkKICAgIChyZW1vdmUtb3ZlcmxheXMgc3RhcnQgZW5kICdo aWRlLWlmZGVmIHQpCiAgICAoLz0gb251bSAobGVuZ3RoIChvdmVybGF5cy1pbiBzdGFydCBlbmQp KSkpKQoKOzs9PT0lJVNGJSUgZXZhbHVhdGlvbiAoU3RhcnQpICA9PT0KCjs7IEl0IGlzIG5vdCB1 c2VmdWwgdG8gc2V0IHRoaXMgdG8gYW55dGhpbmcgYnV0IGBldmFsJy4KOzsgSW4gZmFjdCwgdGhl IHZhcmlhYmxlIG1pZ2h0IGFzIHdlbGwgYmUgZWxpbWluYXRlZC4KKGRlZnZhciBoaWRlLWlmZGVm LWV2YWx1YXRvciAnZXZhbAogICJUaGUgZnVuY3Rpb24gdG8gdXNlIHRvIGV2YWx1YXRlIGEgZm9y bS4KVGhlIGV2YWx1YXRvciBpcyBnaXZlbiBhIGNhbm9uaWNhbCBmb3JtIGFuZCByZXR1cm5zIHQg aWYgdGV4dCB1bmRlcgp0aGF0IGZvcm0gc2hvdWxkIGJlIGRpc3BsYXllZC4iKQoKKGRlZnZhciBo aWYtdW5kZWZpbmVkLXN5bWJvbCBuaWwKICAiLi4uaXMgYnkgZGVmYXVsdCBjb25zaWRlcmVkIHRv IGJlIGZhbHNlLiIpCgoKKGRlZnVuIGhpZi1zZXQtdmFyICh2YXIgdmFsdWUpCiAgIlByZXBlbmQg KHZhciB2YWx1ZSkgcGFpciB0byBoaWRlLWlmZGVmLWVudi4iCiAgKHNldHEgaGlkZS1pZmRlZi1l bnYgKGNvbnMgKGNvbnMgdmFyIHZhbHVlKSBoaWRlLWlmZGVmLWVudikpKQoKKGRlZnVuIGhpZi10 YWJsZS1sb29rdXAgKHZhciB0YWJsZSkKICAobGV0KiAoKHNhIChhc3NvYyB2YXIgdGFibGUpKQog ICAgICAgICAodmFsIChjZHIgc2EpKSkKICAgIChpZiAobnVsbCBzYSkKICAgICAgICBoaWYtdW5k ZWZpbmVkLXN5bWJvbAogICAgICB2YWwpKSkKCihkZWZ1biBoaWYtbG9va3VwICh2YXIpCiAgOzsg KG1lc3NhZ2UgImhpZi1sb29rdXAgJXMiIHZhcikKICAoaGlmLXRhYmxlLWxvb2t1cCB2YXIgaGlk ZS1pZmRlZi1lbnYpKQoKKGRlZnVuIGhpZi1kZWZpbmVkICh2YXIpCiAgIChpZiAoYXNzb2MgdmFy IGhpZGUtaWZkZWYtZW52KSAxIDApKQoKOzs9PT0lJVNGJSUgZXZhbHVhdGlvbiAoRW5kKSAgPT09 CgoKCjs7PT09JSVTRiUlIHBhcnNpbmcgKFN0YXJ0KSAgPT09Cjs7OyAgVGhlIGNvZGUgdGhhdCB1 bmRlcnN0YW5kcyB3aGF0IGlmcyBhbmQgaWZkZWYgaW4gZmlsZXMgbG9vayBsaWtlLgoKKGRlZmNv bnN0IGhpZi1jcHAtcHJlZml4ICJcXCheXFx8XHJcXClbIFx0XSojWyBcdF0qIikKKGRlZmNvbnN0 IGhpZi1pZnhkZWYtcmVnZXhwIChjb25jYXQgaGlmLWNwcC1wcmVmaXggImlmXFwoblxcKT9kZWYi KSkKKGRlZmNvbnN0IGhpZi1pZm5kZWYtcmVnZXhwIChjb25jYXQgaGlmLWNwcC1wcmVmaXggImlm bmRlZiIpKQooZGVmY29uc3QgaGlmLWlmeC1yZWdleHAgKGNvbmNhdCBoaWYtY3BwLXByZWZpeCAi aWZcXChuP2RlZlxcKT9bIFx0XSsiKSkKKGRlZmNvbnN0IGhpZi1lbGlmLXJlZ2V4cCAoY29uY2F0 IGhpZi1jcHAtcHJlZml4ICJlbGlmIikpCihkZWZjb25zdCBoaWYtZWxzZS1yZWdleHAgKGNvbmNh dCBoaWYtY3BwLXByZWZpeCAiZWxzZSIpKQooZGVmY29uc3QgaGlmLWVuZGlmLXJlZ2V4cCAoY29u Y2F0IGhpZi1jcHAtcHJlZml4ICJlbmRpZiIpKQooZGVmY29uc3QgaGlmLWlmeC1lbHNlLWVuZGlm LXJlZ2V4cAogIChjb25jYXQgaGlmLWlmeC1yZWdleHAgIlxcfCIgaGlmLWVsaWYtcmVnZXhwICJc XHwiIGhpZi1lbHNlLXJlZ2V4cCAiXFx8IiBoaWYtZW5kaWYtcmVnZXhwKSkKKGRlZmNvbnN0IGhp Zi1tYWNyby1leHByLXByZWZpeC1yZWdleHAgKGNvbmNhdCBoaWYtY3BwLXByZWZpeCAiXFwoaWZc XChuP2RlZlxcKT9cXHxlbGlmXFx8ZGVmaW5lXFwpWyBcdF0rIikpCgooZGVmY29uc3QgaGlmLXdo aXRlICAgICAiWyBcdF0qIikKKGRlZmNvbnN0IGhpZi1kZWZpbmUgICAgKGNvbmNhdCBoaWYtY3Bw LXByZWZpeCAiXFwoZGVmaW5lXFx8dW5kZWZcXCkiKSkKKGRlZmNvbnN0IGhpZi1pZCAgICAgICAg KGNvbmNhdCAiW0EtWmEtel9dWzAtOUEtWmEtel9dKiIpKQooZGVmY29uc3QgaGlmLW1hY3JvbmFt ZSAoY29uY2F0IGhpZi13aGl0ZSAiXFwoIiBoaWYtaWQgIlxcKSIgaGlmLXdoaXRlCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIlxcKCIKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiKCIgaGlmLXdoaXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXFwo IiBoaWYtaWQgIlxcKT8iIGhpZi13aGl0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIlxcKCIgIiwiIGhpZi13aGl0ZSBoaWYtaWQgaGlmLXdoaXRlICJcXCkqIgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIlxcKFxcLlxcLlxcLlxcKT8iIGhpZi13aGl0ZQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICIpIgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJcXCk/IiApKQoKOzsgVXNlZCB0byBzdG9yZSB0aGUgY3VycmVudCB0b2tlbiBhbmQg dGhlIHdob2xlIHRva2VuIGxpc3QgZHVyaW5nIHBhcnNpbmcuCjs7IE9ubHkgYm91bmQgZHluYW1p Y2FsbHkuCihkZWZ2YXIgaGlmLXRva2VuKQooZGVmdmFyIGhpZi10b2tlbi1saXN0KQoKKGRlZmNv bnN0IGhpZi10b2tlbi1hbGlzdAogICcoKCJ8fCIgIC4gaGlmLW9yKQogICAgKCImJiIgIC4gaGlm LWFuZCkKICAgICgifCIgICAuIGhpZi1sb2dpb3IpCiAgICAoIl4iICAgLiBoaWYtbG9neG9yKQog ICAgKCImIiAgIC4gaGlmLWxvZ2FuZCkKICAgICgiPDwiICAuIGhpZi1zaGlmdGxlZnQpCiAgICAo Ij4+IiAgLiBoaWYtc2hpZnRyaWdodCkKICAgICgiPT0iICAuIGhpZi1lcXVhbCkKICAgICgiPSIg ICAuIGhpZi1hc3NpZ24pCiAgICAoIiE9IiAgLiBoaWYtbm90ZXF1YWwpCiAgICAoIiMjIiAgLiBo aWYtdG9rZW4tY29uY2F0KQogICAgKCIhIiAgIC4gaGlmLW5vdCkKICAgICgifiIgICAuIGhpZi1s b2dub3QpCiAgICAoIigiICAgLiBoaWYtbHBhcmVuKQogICAgKCIpIiAgIC4gaGlmLXJwYXJlbikK ICAgICgiPiIgICAuIGhpZi1ncmVhdGVyKQogICAgKCI8IiAgIC4gaGlmLWxlc3MpCiAgICAoIj49 IiAgLiBoaWYtZ3JlYXRlci1lcXVhbCkKICAgICgiPD0iICAuIGhpZi1sZXNzLWVxdWFsKQogICAg KCIrIiAgIC4gaGlmLXBsdXMpCiAgICAoIi0iICAgLiBoaWYtbWludXMpCiAgICAoIioiICAgLiBo aWYtbXVsdGlwbHkpCiAgICAoIi8iICAgLiBoaWYtZGl2aWRlKQogICAgKCIlIiAgIC4gaGlmLW1v ZHVsbykKICAgICgiPyIgICAuIGhpZi1jb25kaXRpb25hbCkKICAgICgiOiIgICAuIGhpZi1jb2xv bikKICAgICgiLCIgICAuIGhpZi1jb21tYSkKICAgICgiIyIgICAuIGhpZi1zdHJpbmdpZnkpCiAg ICAoIi4uLiIgLiBoaWYtZXRjKSkpCgooZGVmY29uc3QgaGlmLXZhbGlkLXRva2VuLWxpc3QgKG1h cGNhciAnY2RyIGhpZi10b2tlbi1hbGlzdCkpCgooZGVmY29uc3QgaGlmLXRva2VuLXJlZ2V4cAog IChjb25jYXQgKHJlZ2V4cC1vcHQgKG1hcGNhciAnY2FyIGhpZi10b2tlbi1hbGlzdCkpCiAgICAg ICAgICAiXFx8MHhbMC05YS1mQS1GXStcXC4/WzAtOWEtZkEtRl0qIiA7OyBMdWtlIGFkZGVkCiAg ICAgICAgICAiXFx8WzAtOV0rXFwuP1swLTldKiIgIDs7IEx1a2UgYWRkZWQsIGRlY2ltYWwvb2N0 YWwKICAgICAgICAgICJcXHxcXHcrIikpCgooZGVmY29uc3QgaGlmLXN0cmluZy1saXRlcmFsLXJl Z2V4cAogIChjb25jYXQgaGlmLXdoaXRlICJcXChcIlteXCJdKlwiXFwpIikpCgooZGVmdmFyIGhp Zi1zaW1wbGUtdG9rZW4tb25seSBuaWwpCgooZGVmdW4gaGlmLXRva2VuaXplIChzdGFydCBlbmQp CiAgIlNlcGFyYXRlIHN0cmluZyBiZXR3ZWVuIFNUQVJUIGFuZCBFTkQgaW50byBhIGxpc3Qgb2Yg dG9rZW5zLiIKICAobGV0ICgodG9rZW4tbGlzdCBuaWwpKQogICAgKHNldHEgaGlmLXNpbXBsZS10 b2tlbi1vbmx5IHQpCiAgICAod2l0aC1zeW50YXgtdGFibGUgaGlkZS1pZmRlZi1zeW50YXgtdGFi bGUKICAgICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgICAgKGdvdG8tY2hhciBzdGFydCkKICAgICAg ICAod2hpbGUgKHByb2duIChmb3J3YXJkLWNvbW1lbnQgKHBvaW50LW1heCkpICg8IChwb2ludCkg ZW5kKSkKICAgICAgICAgIDs7IChtZXNzYWdlICJleHByLXN0YXJ0ID0gJWQiIGV4cHItc3RhcnQp IChzaXQtZm9yIDEpCiAgICAgICAgICAoY29uZAogICAgICAgICAgICgobG9va2luZy1hdCAiXFxc XFxuIikKICAgICAgICAgICAgKGZvcndhcmQtY2hhciAyKSkKCiAgICAgICAgICAgKChsb29raW5n LWF0IGhpZi1zdHJpbmctbGl0ZXJhbC1yZWdleHApCiAgICAgICAgICAgIChwdXNoIChzdWJzdHJp bmctbm8tcHJvcGVydGllcyAobWF0Y2gtc3RyaW5nIDEpKSB0b2tlbi1saXN0KQogICAgICAgICAg ICAoZ290by1jaGFyIChtYXRjaC1lbmQgMCkpKQoKICAgICAgICAgICAoKGxvb2tpbmctYXQgaGlm LXRva2VuLXJlZ2V4cCkKICAgICAgICAgICAgKGxldCAoKHRva2VuIChidWZmZXItc3Vic3RyaW5n LW5vLXByb3BlcnRpZXMgKHBvaW50KSAobWF0Y2gtZW5kIDApKSkpCiAgICAgICAgICAgICAgKGdv dG8tY2hhciAobWF0Y2gtZW5kIDApKQogICAgICAgICAgICAgIDs7IChtZXNzYWdlICJ0b2tlbjog JXMiIHRva2VuKSAoc2l0LWZvciAxKQogICAgICAgICAgICAgIChwdXNoIChvciAoY2RyIChhc3Nv YyB0b2tlbiBoaWYtdG9rZW4tYWxpc3QpKQogICAgICAgICAgICAgICAgICAgICAgICAoaWYgKHN0 cmluZy1lcXVhbCB0b2tlbiAiZGVmaW5lZCIpICdoaWYtZGVmaW5lZCkKICAgICAgICAgICAgICAg ICAgICAgICAgKGlmIChzdHJpbmctbWF0Y2ggIjB4XFwoW2EtZkEtRjAtOV0rXFwpIiB0b2tlbikK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctdG8tbnVtYmVyIChtYXRjaC1zdHJp bmcgMSB0b2tlbikgMTYpKSA7OyBoZXhhZGVjaW1hbAogICAgICAgICAgICAgICAgICAgICAgICAo aWYgKHN0cmluZy1tYXRjaCAiXFxgMFswLTldKlxcKFxcLlswLTldK1xcKT9cXCciIHRva2VuKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy10by1udW1iZXIgdG9rZW4gOCkpIDs7 IG9jdGFsCiAgICAgICAgICAgICAgICAgICAgICAgIChpZiAoc3RyaW5nLW1hdGNoICJcXGBbMS05 XVswLTldKlxcKFxcLlswLTldK1xcKT9cXCciIHRva2VuKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgKHN0cmluZy10by1udW1iZXIgdG9rZW4pKSA7OyBkZWNpbWFsCiAgICAgICAgICAgICAg ICAgICAgICAgIChwcm9nMSAoaW50ZXJuIHRva2VuKQogICAgICAgICAgICAgICAgICAgICAgICAg IChzZXRxIGhpZi1zaW1wbGUtdG9rZW4tb25seSBuaWwpKSkKICAgICAgICAgICAgICAgICAgICB0 b2tlbi1saXN0KSkpCgogICAgICAgICAgICgobG9va2luZy1hdCAiXHIiKQogICAgICAgICAgICAo Zm9yd2FyZC1jaGFyIDEpKQoKICAgICAgICAgICAodCAoZXJyb3IgIkJhZCAjaWYgZXhwcmVzc2lv bjogJXMiIChidWZmZXItc3RyaW5nKSkpKSkpKQogICAgKG5yZXZlcnNlIHRva2VuLWxpc3QpKSkK Cjs7Oy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCjs7OyBUcmFuc2xhdGUgQyBwcmVwcm9jZXNzb3IgI2lmIGV4cHJlc3Npb25z IHVzaW5nIHJlY3Vyc2l2ZSBkZXNjZW50Lgo7OzsgVGhpcyBwYXJzZXIgaXMgbGltaXRlZCB0byB0 aGUgb3BlcmF0b3JzICYmLCB8fCwgISwgYW5kICJkZWZpbmVkIi4KOzs7IEFkZGVkID09LCAhPSwg KywgYW5kIC0uICBHYXJ5IE9iZXJicnVubmVyLCBnYXJ5b0BhdnMuY29tLCA4LzkvOTQKOzs7Cjs7 OyBJbXBsZW1lbnQgdGhlIEMgbGFuZ3VhZ2Ugb3BlcmF0b3IgcHJlY2VkZW5jZSB0YWJsZS4gQWRk IGFsbCB0aG9zZQo7OzsgbWlzc2luZyBvcGVyYXRvcnMgdGhhdCBjb3VsZCBiZSB1c2VkIGluIG1h Y3Jvcy4gTHVrZSBMZWUgMjAxMy0wOS0wNAoKOzs7ICB8IE9wZXJhdG9yIFR5cGUgICAgICAgIHwg T3BlcmF0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFzc29jaWF0aXZp dHkgfAo7OzsgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCjs7OyAgfCBQcmltYXJ5IEV4 cHJlc3Npb24gICB8ICgpIFtdIC4gLT4gZXhwcisrIGV4cHItLSAgICAgICAgICAgICAgICAgICAg fCBsZWZ0LXRvLXJpZ2h0IHwKOzs7ICB8IFVuYXJ5IE9wZXJhdG9ycyAgICAgIHwgKiAmICsgLSAh IH4gKytleHByIC0tZXhwciAodHlwZWNhc3QpIHNpemVvZiB8IHJpZ2h0LXRvLWxlZnQgfAo7Ozsg IHwgQmluYXJ5IE9wZXJhdG9ycyAgICAgfCAqIC8gJSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwgbGVmdC10by1yaWdodCB8Cjs7OyAgfCAgICAgICAgICAgICAgICAgICAg ICB8ICsgLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAg ICAgICAgIHwKOzs7ICB8ICAgICAgICAgICAgICAgICAgICAgIHwgPj4gPDwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfAo7OzsgIHwgICAgICAg ICAgICAgICAgICAgICAgfCA8ID4gPD0gPj0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgICAgICAgICAgICAgICB8Cjs7OyAgfCAgICAgICAgICAgICAgICAgICAgICB8ID09ICE9 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwK Ozs7ICB8ICAgICAgICAgICAgICAgICAgICAgIHwgJiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfAo7OzsgIHwgICAgICAgICAgICAgICAg ICAgICAgfCBeICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAg ICAgICAgICAgICB8Cjs7OyAgfCAgICAgICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwKOzs7ICB8ICAg ICAgICAgICAgICAgICAgICAgIHwgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8ICAgICAgICAgICAgICAgfAo7OzsgIHwgICAgICAgICAgICAgICAgICAgICAgfCB8 fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAg ICB8Cjs7OyAgfCBUZXJuYXJ5IE9wZXJhdG9yICAgICB8ID86ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCByaWdodC10by1sZWZ0IHwKOzs7IHh8IEFzc2lnbm1lbnQg T3BlcmF0b3JzIHwgPSArPSAtPSAqPSAvPSAlPSA+Pj0gPDw9ICY9IF49ID0gICAgICAgICAgICB8 IHJpZ2h0LXRvLWxlZnQgfAo7OzsgIHwgQ29tbWEgICAgICAgICAgICAgICAgfCAsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbGVmdC10by1yaWdodCB8CgooZGVm c3Vic3QgaGlmLW5leHR0b2tlbiAoKQogICJQb3AgdGhlIG5leHQgdG9rZW4gZnJvbSB0b2tlbi1s aXN0IGludG8gdGhlIGxldCB2YXJpYWJsZSBcImhpZi10b2tlblwiLiIKICAoc2V0cSBoaWYtdG9r ZW4gKHBvcCBoaWYtdG9rZW4tbGlzdCkpKQoKKGRlZnN1YnN0IGlmLXZhbGlkLWlkZW50aWZpZXIg KGlkKQogIChub3QgKG9yIChudW1iZXJwIGlkKQogICAgICAgICAgIChzdHJpbmdwIGlkKSkpKQoK KGRlZnVuIGhpZi1kZWZpbmUtb3BlcmF0b3IgKHRva2VucykKICAiYFVwZ3JhZGUnIGhpZi1kZWZp bmUgeHh4IHRvICcoaGlmLWRlZmluZSB4eHgpJyBzbyB0aGF0IGl0IHdvbid0IGJlIHN1YnNpdGl0 dXRlZCIKICAobGV0ICgocmVzdWx0IG5pbCkKICAgICAgICAodG9rIG5pbCkpCiAgICAod2hpbGUg dG9rZW5zCiAgICAgIChzZXRxIHRvayAoY2FyIHRva2VucykKICAgICAgICAgICAgdG9rZW5zIChj ZHIgdG9rZW5zKSkKICAgICAgKHNldHEgcmVzdWx0CiAgICAgICAgICAgIChhcHBlbmQKICAgICAg ICAgICAgIHJlc3VsdAogICAgICAgICAgICAgKGxpc3QKICAgICAgICAgICAgICAoaWYgKGVxIHRv ayAnaGlmLWRlZmluZWQpCiAgICAgICAgICAgICAgICAgIChwcm9nbgogICAgICAgICAgICAgICAg ICAgIChzZXRxIHRvayAoY2FkciB0b2tlbnMpKQogICAgICAgICAgICAgICAgICAgIChpZiAoZXEg KGNhciB0b2tlbnMpICdoaWYtbHBhcmVuKQogICAgICAgICAgICAgICAgICAgICAgICAoaWYgKGFu ZCAoaWYtdmFsaWQtaWRlbnRpZmllciB0b2spCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChlcSAoY2FkZHIgdG9rZW5zKSAnaGlmLXJwYXJlbikpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoc2V0cSB0b2tlbnMgKGNkZGRyIHRva2VucykpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgKGVycm9yICJvcGVyYXRvciBcImRlZmluZWRcIiByZXF1aXJlcyBhbiBpZGVudGlmaWVy IikpCiAgICAgICAgICAgICAgICAgICAgICAoc2V0cSB0b2sgKGNhciB0b2tlbnMpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0b2tlbnMgKGNkciB0b2tlbnMpKQogICAgICAgICAgICAgICAg ICAgICAgKHVubGVzcyAoaWYtdmFsaWQtaWRlbnRpZmllciB0b2spCiAgICAgICAgICAgICAgICAg ICAgICAgIChlcnJvciAib3BlcmF0b3IgXCJkZWZpbmVkXCIgcmVxdWlyZXMgYW4gaWRlbnRpZmll ciIpKSkKICAgICAgICAgICAgICAgICAgICAobGlzdCAnaGlmLWRlZmluZWQgJ2hpZi1scGFyZW4g dG9rICdoaWYtcnBhcmVuKSkKICAgICAgICAgICAgICAgIHRvaykpKSkpCiAgICByZXN1bHQpKQoK KGRlZnVuIGhpZi1leHBhbmQtdG9rZW4tbGlzdCAodG9rZW5zICZvcHRpb25hbCBtYWNyb25hbWUg cmVmbGlzdCkgOzsgcmVmZXJlbmNlIGxpc3QgdG8gcHJldmVudCBzZWxmLXJlZmVyZW5jaW5nCiAg IlBlcmZvcm0gZXhwYW5zaW9uIHRpbGwgZXZlcnl0aGluZyBleHBhbmRlZC4gTm8gc2VsZi1yZWZl cmVuY2UgZXhwYW5zaW9uLiIKICAoY2F0Y2ggJ3NlbGYtcmVmZXJlbmNpbmcKICAgIChsZXQgKChl eHBhbmRlZCBuaWwpCiAgICAgICAgICAocmVtYWlucyAoaGlmLWRlZmluZS1vcGVyYXRvcgogICAg ICAgICAgICAgICAgICAgIChoaWYtdG9rZW4tY29uY2F0ZW5hdGlvbiAoaGlmLXRva2VuLXN0cmlu Z2lmaWNhdGlvbiB0b2tlbnMpKSkpCiAgICAgICAgICB0b2sgcmVwKQogICAgICAoaWYgbWFjcm9u YW1lCiAgICAgICAgICAoc2V0cSByZWZsaXN0IChjb25zIG1hY3JvbmFtZSByZWZsaXN0KSkpCiAg ICAgIDs7IEV4cGFuZGluZyBhbGwgdG9rZW5zIHRpbGwgbGlzdCBleGhhdXN0ZWQKICAgICAgKHdo aWxlIHJlbWFpbnMKICAgICAgICAoc2V0cSB0b2sgKGNhciByZW1haW5zKQogICAgICAgICAgICAg IHJlbWFpbnMgKGNkciByZW1haW5zKSkKICAgICAgICAoaWYgKG1lbXEgdG9rIHJlZmxpc3QpIDs7 IGZvciBzZWxmLXJlZmVyZW5jaW5nIHRva2VucywgZG9uJ3QgZXhwYW5kIGl0CiAgICAgICAgICAg ICh0aHJvdyAnc2VsZi1yZWZlcmVuY2luZyB0b2tlbnMpKQogICAgICAgIChzZXRxIGV4cGFuZGVk CiAgICAgICAgICAgICAgKGFwcGVuZAogICAgICAgICAgICAgICBleHBhbmRlZAogICAgICAgICAg ICAgICAoY29uZAogICAgICAgICAgICAgICAgKChvciAobWVtcSB0b2sgaGlmLXZhbGlkLXRva2Vu LWxpc3QpCiAgICAgICAgICAgICAgICAgICAgIChudW1iZXJwIHRvaykKICAgICAgICAgICAgICAg ICAgICAgKHN0cmluZ3AgdG9rKSkKICAgICAgICAgICAgICAgICAobGlzdCB0b2spKQoKICAgICAg ICAgICAgICAgICgoc2V0cSByZXAgKGhpZi1sb29rdXAgdG9rKSkKICAgICAgICAgICAgICAgICAo aWYgKGFuZCAobGlzdHAgcmVwKQogICAgICAgICAgICAgICAgICAgICAgICAgIChlcSAoY2FyIHJl cCkgJ2hpZi1kZWZpbmUtbWFjcm8pKSA7OyBhIGRlZmluZWQgbWFjcm8KICAgICAgICAgICAgICAg ICAgICAgOzsgcmVjdXJzaXZlbHkgZXhwYW5kIGl0CiAgICAgICAgICAgICAgICAgICAgIChpZiAo Y2FkciByZXApIDs7IGFyZ2xpc3QgaXMgbm90IG5pbAogICAgICAgICAgICAgICAgICAgICAgICAg KGlmIChlcSAoY2FyIHJlbWFpbnMpICdoaWYtbHBhcmVuKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDs7IEFyZ3VtZW50ZWQgbWFjcm8sIGdldCBhcmd1bWVudHMgYW5kIGludm9rZSBpdAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsZXQqICgoaGlmLXRva2VuLWxpc3QgKGNkciBy ZW1haW5zKSkgOzsgZHluYW1pYyBiaW5kaW5nIGZvciBoaWYtbWFjcm8tc3VwcGx5LWFyZ3VtZW50 cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGlmLXRva2VuIG5pbCkgICAg ICAgICAgICAgICAgOzsgZHluYW1pYyBiaW5kaW5nIGZvciBoaWYtbWFjcm8tc3VwcGx5LWFyZ3Vt ZW50cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFybWxpc3QgKG1hcGNh ciAnaGlmLWV4cGFuZC10b2tlbi1saXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChoaWYtZ2V0LWFyZ3VtZW50LWxpc3QgdG9rKSkpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZXN1bHQgKGhpZi1leHBhbmQtdG9rZW4t bGlzdCAoaGlmLW1hY3JvLXN1cHBseS1hcmd1bWVudHMgdG9rIHBhcm1saXN0KQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dG9rIHJlZmxpc3QpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZXRxIHJlbWFp bnMgKGNvbnMgaGlmLXRva2VuIGhpZi10b2tlbi1saXN0KSkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJlc3VsdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsgbm8gYXJndW1l bnQgc3VwcGxpZWQsIG5vIGludm9jYXRpb24gZm9yIHRoaXMgbWFjcm8KICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGxpc3QgdG9rKSkKICAgICAgICAgICAgICAgICAgICAgICA7OyBhcmdsaXN0 IGlzIG5pbCwgZGlyZWN0IGV4cGFuc2lvbgogICAgICAgICAgICAgICAgICAgICAgIChzZXRxIHJl cCAoaGlmLWV4cGFuZC10b2tlbi1saXN0IChjYWRkciByZXApIDs7IG1hY3JvJ3MgdG9rZW4gbGlz dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRvayByZWZsaXN0KSkKICAgICAgICAgICAgICAgICAgICAgICAoc2V0cSByZW1haW5zIChzdWJz dGl0dXRlIHRvayByZXAgcmVtYWlucykpIDs7IHJlcGxhY2UgYWxsIHJlbWFpbmluZyByZWZlcmVu Y2VzIGltbWVkaWF0ZWx5CiAgICAgICAgICAgICAgICAgICAgICAgKGxpc3QgcmVwKSkKICAgICAg ICAgICAgICAgICAgIDs7IGxvb2t1cCB0b2sgcmV0dXJucyBhbiBhdG9tCiAgICAgICAgICAgICAg ICAgICAobGlzdCByZXApKSkKCiAgICAgICAgICAgICAgICA7O1syMDEzLTEwLTIyIDE2OjA2OjEy ICswODAwXSBNdXN0IGtlZXAgdGhlIHRva2VuLCByZW1vdmVpbmcgdGhpcyB0b2tlbiBtaWdodCBy ZXN1bHRzIGluIGEgaW5jb21wbGV0ZSBleHByZXNzaW9uIHdoaWNoIGNhbm5vdCBiZSBwYXJzZWQu CiAgICAgICAgICAgICAgICA7OygoPSAxIChoaWYtZGVmaW5lZCB0b2spKSA7OyBkZWZpbmVkICho aWYtZGVmaW5lZCB0b2spPTEsIGJ1dCBlbXB0eSAoaGlmLWxvb2t1cCB0b2spPW5pbCwgdGh1cyBy ZW1vdmUgdGhpcyB0b2tlbgogICAgICAgICAgICAgICAgOzsgKHNldHEgcmVtYWlucyAoZGVsZXRl IHRvayByZW1haW5zKSkKICAgICAgICAgICAgICAgIDs7IG5pbCkKCiAgICAgICAgICAgICAgICAo dCA7OyB1c3VhbCBJRHMKICAgICAgICAgICAgICAgICAobGlzdCB0b2spKSkpKSkKICAgICAgKGZs YXR0ZW4gZXhwYW5kZWQpKSkpCgooZGVmdW4gaGlmLXBhcnNlLWlmLWV4cCAodG9rZW4tbGlzdCAm b3B0aW9uYWwgbWFjcm9uYW1lKQogICJQYXJzZSB0aGUgVE9LRU4tTElTVC4gIFJldHVybiB0cmFu c2xhdGVkIGxpc3QgaW4gcHJlZml4IGZvcm0uIgogIChsZXQgKChoaWYtdG9rZW4tbGlzdCAoaGlm LWV4cGFuZC10b2tlbi1saXN0IHRva2VuLWxpc3QgbWFjcm9uYW1lKSkpCiAgICAoaGlmLW5leHR0 b2tlbikKICAgIChwcm9nMQogICAgICAgIChhbmQgaGlmLXRva2VuCiAgICAgICAgICAgICAoaGlm LWV4cHJsaXN0KSkKICAgICAgKGlmIGhpZi10b2tlbiA7IGlzIHRoZXJlIHN0aWxsIGEgdG9rZW4/ CiAgICAgICAgICAoZXJyb3IgIkVycm9yOiB1bmV4cGVjdGVkIHRva2VuOiAlcyIgaGlmLXRva2Vu KSkpKSkKCjs7Owo7OztUbyBtYW51YWxseSB0ZXN0IHRoZXNlIGZ1bmN0aW9ucywgdHJ5IHRoZSBm b2xsb3dpbmcgaW4gc2NyYXRjaCBidWZmZXI6Cjs7Owo7OzsoaGlmLWZpbmQtZGVmaW5lIChwb2lu dCkpIDs7IGZpbmQgb25seSBvbmUgI2RlZmluZQo7OzsoaGlmLWFkZC1uZXctZGVmaW5lcykgOzsg ZmluZCBhbGwgI2RlZmluZXMKOzs7Cjs7OyNkZWZpbmUgbWFjcm8gKCBhcmcxICwgYXJnMiAsIGFy ZzMgLi4uICkgYXJnMSArIGFyZzIgKiBhcmczCjs7Owo7OzsoYXNzb2MgJ21hY3JvIGhpZGUtaWZk ZWYtZW52KQo7OzsKOzs7KGhpZi1jYW5vbmljYWxpemUtdG9rZW5zIGhpZi1pZngtcmVnZXhwKQo7 OzsoaGlmLWV4cGFuZC10b2tlbi1saXN0IChoaWYtY2Fub25pY2FsaXplLXRva2VucyBoaWYtaWZ4 LXJlZ2V4cCkpCjs7OyhoaWYtY2Fub25pY2FsaXplIGhpZi1pZngtcmVnZXhwKQo7OzsKOzs7I2lm IG1hY3JvKCAoYSwyLDMpLCBiPDwxLCAoYyY3LGQpICkKOzs7CgooZGVmdW4gaGlmLWV4cHJsaXN0 ICgpCiAgIlBhcnNlIGFuIGV4cHJsaXN0OiBleHByIHsgJywnIGV4cHJ9IgogIChsZXQgKChyZXN1 bHQgKGhpZi1leHByKSkKICAgICAgICBjb21tYSkKICAgICh3aGlsZSAoZXEgaGlmLXRva2VuICdo aWYtY29tbWEpCiAgICAgICh1bmxlc3MgY29tbWEKICAgICAgICAoc2V0cSByZXN1bHQgKGxpc3Qg cmVzdWx0KSkpCiAgICAgIChzZXRxIGNvbW1hIHQpCiAgICAgIChoaWYtbmV4dHRva2VuKQogICAg ICAoc2V0cSByZXN1bHQgKGFwcGVuZCByZXN1bHQgKGxpc3QgKGhpZi1leHByKSkpKSkKICAgIChp ZiBjb21tYQogICAgICAgIChhcHBlbmQgKGxpc3QgJ2hpZi1jb21tYSkgcmVzdWx0KQogICAgICBy ZXN1bHQpKSkKCihkZWZ1biBoaWYtZXhwciAoKQogICJQYXJzZSBhbiBleHByZXNzaW9uIGFzIGZv dW5kIGluICNpZi4KICAgICAgIGV4cHIgOiBvci1leHByIHwgb3ItZXhwciAnPycgZXhwciAnOicg ZXhwci4iCiAgKGxldCAoKHJlc3VsdCAoaGlmLW9yLWV4cHIpKQogICAgICAgIG1pZGRsZSkKICAg ICh3aGlsZSAoZXEgaGlmLXRva2VuICdoaWYtY29uZGl0aW9uYWwpCiAgICAgIChoaWYtbmV4dHRv a2VuKQogICAgICAoc2V0cSBtaWRkbGUgKGhpZi1leHByKSkKICAgICAgKGlmIChlcSBoaWYtdG9r ZW4gJ2hpZi1jb2xvbikKICAgICAgICAgIChwcm9nbgogICAgICAgICAgICAoaGlmLW5leHR0b2tl bikKICAgICAgICAgICAgKHNldHEgcmVzdWx0IChsaXN0ICdoaWYtY29uZGl0aW9uYWwgcmVzdWx0 IG1pZGRsZSAoaGlmLWV4cHIpKSkpCiAgICAgICAgKGVycm9yICJFcnJvcjogdW5leHBlY3RlZCB0 b2tlbjogJXMiIGhpZi10b2tlbikpKQogICAgcmVzdWx0KSkKCihkZWZ1biBoaWYtb3ItZXhwciAo KQogICJQYXJzZSBhbiBvci1leHByIDogYW5kLWV4cHIgfCBvci1leHByICd8fCcgYW5kLWV4cHIu IgogIChsZXQgKChyZXN1bHQgKGhpZi1hbmQtZXhwcikpKQogICAgKHdoaWxlIChlcSBoaWYtdG9r ZW4gJ2hpZi1vcikKICAgICAgKGhpZi1uZXh0dG9rZW4pCiAgICAgIChzZXRxIHJlc3VsdCAobGlz dCAnaGlmLW9yIHJlc3VsdCAoaGlmLWFuZC1leHByKSkpKQogIHJlc3VsdCkpCgooZGVmdW4gaGlm LWFuZC1leHByICgpCiAgIlBhcnNlIGFuIGFuZC1leHByIDogbG9naW9yLWV4cHIgfCBhbmQtZXhw ciAnJiYnIGxvZ2lvci1leHByLiIKICAobGV0ICgocmVzdWx0IChoaWYtbG9naW9yLWV4cHIpKSkK ICAgICh3aGlsZSAoZXEgaGlmLXRva2VuICdoaWYtYW5kKQogICAgICAoaGlmLW5leHR0b2tlbikK ICAgICAgKHNldHEgcmVzdWx0IChsaXN0ICdoaWYtYW5kIHJlc3VsdCAoaGlmLWxvZ2lvci1leHBy KSkpKQogICAgcmVzdWx0KSkKCihkZWZ1biBoaWYtbG9naW9yLWV4cHIgKCkKICAiUGFyc2UgYSBs b2dvci1leHByIDogbG9neG9yLWV4cHIgfCBsb2dvci1leHByICd8JyBsb2d4b3ItZXhwci4iCiAg KGxldCAoKHJlc3VsdCAoaGlmLWxvZ3hvci1leHByKSkpCiAgICAod2hpbGUgKGVxIGhpZi10b2tl biAnaGlmLWxvZ2lvcikKICAgICAgKGhpZi1uZXh0dG9rZW4pCiAgICAgIChzZXRxIHJlc3VsdCAo bGlzdCAnaGlmLWxvZ2lvciByZXN1bHQgKGhpZi1sb2d4b3ItZXhwcikpKSkKICAgIHJlc3VsdCkp CgooZGVmdW4gaGlmLWxvZ3hvci1leHByICgpCiAgIlBhcnNlIGEgbG9neG9yLWV4cHIgOiBsb2dh bmQtZXhwciB8IGxvZ3hvci1leHByICdeJyBsb2dhbmQtZXhwci4iCiAgKGxldCAoKHJlc3VsdCAo aGlmLWxvZ2FuZC1leHByKSkpCiAgICAod2hpbGUgKGVxIGhpZi10b2tlbiAnaGlmLWxvZ3hvcikK ICAgICAgKGhpZi1uZXh0dG9rZW4pCiAgICAgIChzZXRxIHJlc3VsdCAobGlzdCAnaGlmLWxvZ3hv ciByZXN1bHQgKGhpZi1sb2dhbmQtZXhwcikpKSkKICAgIHJlc3VsdCkpCgooZGVmdW4gaGlmLWxv Z2FuZC1leHByICgpCiAgIlBhcnNlIGEgbG9nYW5kLWV4cHIgOiBlcS1leHByIHwgbG9nYW5kLWV4 cHIgJyYnIGVxLWV4cHIuIgogIChsZXQgKChyZXN1bHQgKGhpZi1lcS1leHByKSkpCiAgICAod2hp bGUgKGVxIGhpZi10b2tlbiAnaGlmLWxvZ2FuZCkKICAgICAgKGhpZi1uZXh0dG9rZW4pCiAgICAg IChzZXRxIHJlc3VsdCAobGlzdCAnaGlmLWxvZ2FuZCByZXN1bHQgKGhpZi1lcS1leHByKSkpKQog ICAgcmVzdWx0KSkKCihkZWZ1biBoaWYtZXEtZXhwciAoKQogICJQYXJzZSBhbiBlcS1leHByIDog Y29tcCB8IGVxLWV4cHIgYD09J3xgIT0nIGNvbXAuIgogIChsZXQgKChyZXN1bHQgKGhpZi1jb21w LWV4cHIpKQogICAgICAgIChlcS10b2tlbiBuaWwpKQogICAgKHdoaWxlIChtZW1xIGhpZi10b2tl biAnKGhpZi1lcXVhbCBoaWYtbm90ZXF1YWwpKQogICAgICAoc2V0cSBlcS10b2tlbiBoaWYtdG9r ZW4pCiAgICAgIChoaWYtbmV4dHRva2VuKQogICAgICAoc2V0cSByZXN1bHQgKGxpc3QgZXEtdG9r ZW4gcmVzdWx0IChoaWYtY29tcC1leHByKSkpKQogICAgcmVzdWx0KSkKCihkZWZ1biBoaWYtY29t cC1leHByICgpCiAgIlBhcnNlIGEgY29tcC1leHByIDogbG9nc2hpZnQgfCBjb21wLWV4cHIgYDwn fGA+J3xgPj0nfGA8PScgbG9nc2hpZnQuIgogIChsZXQgKChyZXN1bHQgKGhpZi1sb2dzaGlmdC1l eHByKSkKICAgICAgICAoY29tcC10b2tlbiBuaWwpKQogICAgKHdoaWxlIChtZW1xIGhpZi10b2tl biAnKGhpZi1ncmVhdGVyIGhpZi1sZXNzIGhpZi1ncmVhdGVyLWVxdWFsIGhpZi1sZXNzLWVxdWFs KSkKICAgICAgKHNldHEgY29tcC10b2tlbiBoaWYtdG9rZW4pCiAgICAgIChoaWYtbmV4dHRva2Vu KQogICAgICAoc2V0cSByZXN1bHQgKGxpc3QgY29tcC10b2tlbiByZXN1bHQgKGhpZi1sb2dzaGlm dC1leHByKSkpKQogICAgcmVzdWx0KSkKCihkZWZ1biBoaWYtbG9nc2hpZnQtZXhwciAoKQogICJQ YXJzZSBhIGxvZ3NoaWZ0IDogbWF0aCB8IGxvZ3NoaWZ0IGA8PCd8YD4+JyBtYXRoLiIKICAobGV0 ICgocmVzdWx0IChoaWYtbWF0aCkpCiAgICAgICAgKHNoaWZ0LXRva2VuIG5pbCkpCiAgICAod2hp bGUgKG1lbXEgaGlmLXRva2VuICcoaGlmLXNoaWZ0bGVmdCBoaWYtc2hpZnRyaWdodCkpCiAgICAg IChzZXRxIHNoaWZ0LXRva2VuIGhpZi10b2tlbikKICAgICAgKGhpZi1uZXh0dG9rZW4pCiAgICAg IChzZXRxIHJlc3VsdCAobGlzdCBzaGlmdC10b2tlbiByZXN1bHQgKGhpZi1tYXRoKSkpKQogICAg cmVzdWx0KSkKCihkZWZ1biBoaWYtbWF0aCAoKQogICJQYXJzZSBhbiBleHByZXNzaW9uIHdpdGgg KyBvciAtLgogICAgICAgbWF0aCA6IG11bGRpdiB8IG1hdGggJyt8LScgbXVsZGl2LiIKICAobGV0 ICgocmVzdWx0IChoaWYtbXVsZGl2LWV4cHIpKQogICAgICAgIChtYXRoLW9wIG5pbCkpCiAgICAo d2hpbGUgKG1lbXEgaGlmLXRva2VuICcoaGlmLXBsdXMgaGlmLW1pbnVzKSkKICAgICAgKHNldHEg bWF0aC1vcCBoaWYtdG9rZW4pCiAgICAgIChoaWYtbmV4dHRva2VuKQogICAgICAoc2V0cSByZXN1 bHQgKGxpc3QgbWF0aC1vcCByZXN1bHQgKGhpZi1tdWxkaXYtZXhwcikpKSkKICAgIHJlc3VsdCkp CgooZGVmdW4gaGlmLW11bGRpdi1leHByICgpCiAgIlBhcnNlIGFuIGV4cHJlc3Npb24gd2l0aCAq LC8sJS4KICAgICAgIG11bGRpdiA6IGZhY3RvciB8IG11bGRpdiAnKnwvfCUnIGZhY3Rvci4iCiAg KGxldCAoKHJlc3VsdCAoaGlmLWZhY3RvcikpCiAgICAgICAgKG1hdGgtb3AgbmlsKSkKICAgICh3 aGlsZSAobWVtcSBoaWYtdG9rZW4gJyhoaWYtbXVsdGlwbHkgaGlmLWRpdmlkZSBoaWYtbW9kdWxv KSkKICAgICAgKHNldHEgbWF0aC1vcCBoaWYtdG9rZW4pCiAgICAgIChoaWYtbmV4dHRva2VuKQog ICAgICAoc2V0cSByZXN1bHQgKGxpc3QgbWF0aC1vcCByZXN1bHQgKGhpZi1mYWN0b3IpKSkpCiAg ICByZXN1bHQpKQoKKGRlZnVuIGhpZi1mYWN0b3IgKCkKICAiUGFyc2UgYSBmYWN0b3I6ICchJyBm YWN0b3IgfCAnficgZmFjdG9yIHwgJygnIGV4cHIgJyknIHwgJ2RlZmluZWQoJyBpZCAnKScgfCAn aWQocGFybWxpc3QpJyB8IHN0cmluZ3MgfCBpZC4iCiAgKGNvbmQKICAgKChlcSBoaWYtdG9rZW4g J2hpZi1ub3QpCiAgICAoaGlmLW5leHR0b2tlbikKICAgIChsaXN0ICdoaWYtbm90IChoaWYtZmFj dG9yKSkpCgogICAoKGVxIGhpZi10b2tlbiAnaGlmLWxvZ25vdCkKICAgIChoaWYtbmV4dHRva2Vu KQogICAgKGxpc3QgJ2hpZi1sb2dub3QgKGhpZi1mYWN0b3IpKSkKCiAgICgoZXEgaGlmLXRva2Vu ICdoaWYtbHBhcmVuKQogICAgKGhpZi1uZXh0dG9rZW4pCiAgICAobGV0ICgocmVzdWx0IChoaWYt ZXhwcmxpc3QpKSkKICAgICAgKGlmIChub3QgKGVxIGhpZi10b2tlbiAnaGlmLXJwYXJlbikpCiAg ICAgICAgICAoZXJyb3IgIkJhZCB0b2tlbiBpbiBwYXJlbnRoZXNpemVkIGV4cHJlc3Npb246ICVz IiBoaWYtdG9rZW4pCiAgICAgICAgKGhpZi1uZXh0dG9rZW4pCiAgICAgICAgcmVzdWx0KSkpCgog ICAoKGVxIGhpZi10b2tlbiAnaGlmLWRlZmluZWQpCiAgICAoaGlmLW5leHR0b2tlbikKICAgIChs ZXQgKChwYXJlbiAod2hlbiAoZXEgaGlmLXRva2VuICdoaWYtbHBhcmVuKSAoaGlmLW5leHR0b2tl bikgdCkpCiAgICAgICAgICAoaWRlbnQgaGlmLXRva2VuKSkKICAgICAgKGlmIChtZW1xIGhpZi10 b2tlbiAnKG9yIGFuZCBub3QgaGlmLWRlZmluZWQgaGlmLWxwYXJlbiBoaWYtcnBhcmVuKSkKICAg ICAgICAgIChlcnJvciAiRXJyb3I6IHVuZXhwZWN0ZWQgdG9rZW46ICVzIiBoaWYtdG9rZW4pKQog ICAgICAod2hlbiBwYXJlbgogICAgICAgIChoaWYtbmV4dHRva2VuKQogICAgICAgICh1bmxlc3Mg KGVxIGhpZi10b2tlbiAnaGlmLXJwYXJlbikKICAgICAgICAgIChlcnJvciAiRXJyb3I6IGV4cGVj dGVkIFwiKVwiIGFmdGVyIGlkZW50aWZpZXIiKSkpCiAgICAgIChoaWYtbmV4dHRva2VuKQogICAg ICBgKGhpZi1kZWZpbmVkIChxdW90ZSAsaWRlbnQpKSkpCgogICAoKG51bWJlcnAgaGlmLXRva2Vu KQogICAgKHByb2cxIGhpZi10b2tlbiAoaGlmLW5leHR0b2tlbikpKQoKICAgKChzdHJpbmdwIGhp Zi10b2tlbikKICAgIChoaWYtc3RyaW5nLWNvbmNhdGVuYXRpb24pKQoKICAgOzsgVW5hcnkgcGx1 cy9taW51cy4KICAgKChtZW1xIGhpZi10b2tlbiAnKGhpZi1taW51cyBoaWYtcGx1cykpCiAgICAo bGlzdCAocHJvZzEgaGlmLXRva2VuIChoaWYtbmV4dHRva2VuKSkgMCAoaGlmLWZhY3RvcikpKQoK ICAgKHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgaWRlbnRpZmllcgogICAg KGxldCAoKGlkZW50IGhpZi10b2tlbikpCiAgICAgIChoaWYtbmV4dHRva2VuKQogICAgICAoaWYg KGVxIGhpZi10b2tlbiAnaGlmLWxwYXJlbikKICAgICAgICAgIChoaWYtcGxhY2UtbWFjcm8taW52 b2NhdGlvbiBpZGVudCkKICAgICAgICBgKGhpZi1sb29rdXAgKHF1b3RlICxpZGVudCkpKSkpKSkK CihkZWZ1biBoaWYtZ2V0LWFyZ3VtZW50LWxpc3QgKGlkZW50KQogIChsZXQgKChuZXN0IDApCiAg ICAgICAgKHBhcm1saXN0IG5pbCkgOzsgYSAidG9rZW4iIGxpc3Qgb2YgcGFyYW1ldGVycywgd2ls bCBsYXRlciBiZSBwYXJzZWQKICAgICAgICAocGFybSBuaWwpKQogICAgKHdoaWxlIChvciAobm90 IChlcSAoaGlmLW5leHR0b2tlbikgJ2hpZi1ycGFyZW4pKQogICAgICAgICAgICAgICAoLz0gbmVz dCAwKSkKICAgICAgKGlmIChlcSAoY2FyIHBhcm0pICdoaWYtY29tbWEpCiAgICAgICAgICAoc2V0 cSBwYXJtIG5pbCkpCiAgICAgIChjb25kCiAgICAgICAoKGVxIGhpZi10b2tlbiAnaGlmLWxwYXJl bikKICAgICAgICAoc2V0cSBuZXN0ICgxKyBuZXN0KSkpCiAgICAgICAoKGVxIGhpZi10b2tlbiAn aGlmLXJwYXJlbikKICAgICAgICAoc2V0cSBuZXN0ICgxLSBuZXN0KSkKICAgICAgICAoaWYgKDwg bmVzdCAwKQogICAgICAgICAgICAoZXJyb3IgIlVuYmFsYW5jZWQgcGFyZW50aGVzaXMgd2hlbiBp bnZva2luZyBtYWNybyAlUyIgaWRlbnQpKSkKICAgICAgICgoYW5kIChlcSBoaWYtdG9rZW4gJ2hp Zi1jb21tYSkKICAgICAgICAgICAgICg9IG5lc3QgMCkpCiAgICAgICAgKHNldHEgcGFybWxpc3Qg KGFwcGVuZCBwYXJtbGlzdCAobGlzdCBwYXJtKSkKICAgICAgICAgICAgICBwYXJtIG5pbCkpKQog ICAgICAoc2V0cSBwYXJtIChhcHBlbmQgcGFybSAobGlzdCBoaWYtdG9rZW4pKSkpCiAgICAoc2V0 cSBwYXJtbGlzdCAoYXBwZW5kIHBhcm1saXN0IChsaXN0IHBhcm0pKSkgOyBva2F5IGV2ZW4gaWYg cGFybSBpcyBuaWwKICAgIChoaWYtbmV4dHRva2VuKSA7IGRyb3AgdGhlIGhpZi1ycGFyZW4sIGdl dCBuZXh0IHRva2VuCiAgICBwYXJtbGlzdCkpCgooZGVmdW4gaGlmLXBsYWNlLW1hY3JvLWludm9j YXRpb24gKGlkZW50KQogIChsZXQgKChwYXJtbGlzdCAoaGlmLWdldC1hcmd1bWVudC1saXN0IGlk ZW50KSkpCiAgICBgKGhpZi1pbnZva2UgKHF1b3RlICxpZGVudCkgKHF1b3RlICxwYXJtbGlzdCkp KSkKCihkZWZ1biBoaWYtc3RyaW5nLWNvbmNhdGVuYXRpb24gKCkKICAiUGFyc2UgY29uY2F0ZW5h dGVkIHN0cmluZ3M6IHN0cmluZyB8IHN0cmluZ3Mgc3RyaW5nIgogIChsZXQgKChyZXN1bHQgKHN1 YnN0cmluZy1uby1wcm9wZXJ0aWVzIGhpZi10b2tlbikpKQogICAgKHdoaWxlIChzdHJpbmdwICho aWYtbmV4dHRva2VuKSkKICAgICAgKHNldHEgcmVzdWx0IChjb25jYXQKICAgICAgICAgICAgICAg ICAgICAoc3Vic3RyaW5nIHJlc3VsdCAwIC0xKSAgICA7IHJlbW92ZSB0cmFpbGluZyAnIicKICAg ICAgICAgICAgICAgICAgICAoc3Vic3RyaW5nIGhpZi10b2tlbiAxKSkpKSA7IHJlbW92ZSBsZWFk aW5nICAnIicKICAgIHJlc3VsdCkpCgooZGVmdW4gaGlmLWRlZmluZS1tYWNybyAocGFybWxpc3Qg dG9rZW4tYm9keSkKICAiQSBtYXJrZXIgZm9yIGRlZmluZWQgbWFjcm8gd2l0aCBhcmd1bWVudHMs IGNhbm5vdCBiZSBldmFsdWF0ZWQgYWxvbmUgd2l0aCBubyBwYXJhbWV0ZXJzIGlucHV0ZWQuIgog IDs7IFRPRE86IGlucHV0IHBhcmFtZXRlcnMgYXQgcnVuIHRpbWUsIHVzZSBtaW5pYnVmZmVyIHRv IHF1ZXJ5IGFsbCBwYXJhbWV0ZXJzCiAgKGVycm9yICJBcmd1bWVudGVkIG1hY3JvIGNhbm5vdCBi ZSBldmFsdWF0ZWQgd2l0aG91dCBwYXNzaW5nIGFueSBwYXJhbWV0ZXIuIikpCgooZGVmdW4gaGlm LXN0cmluZ2lmeSAoYSkKICAiU3RyaW5naWZ5IGEgbnVtYmVyLCBzdHJpbmcgb3Igc3ltYm9sIgog IChjb25kCiAgICgobnVtYmVycCBhKQogICAgKG51bWJlci10by1zdHJpbmcgYSkpCiAgICgoYXRv bSBhKQogICAgKHN5bWJvbC1uYW1lIGEpKQogICAoKHN0cmluZ3AgYSkKICAgIChjb25jYXQgIlwi IiBhICJcIiIpKQogICAodAogICAgKGVycm9yICJJbnZhbGlkIHRva2VuIHRvIHN0cmluZ2lmeSIp KSkpCgooZGVmdW4gaW50ZXJuLXNhZmUgKHN0cikKICAoaWYgKHN0cmluZ3Agc3RyKQogICAgICAo aW50ZXJuIHN0cikpKQoKKGRlZnVuIGhpZi1tZXJnZS1vcGVyYXRvci10b2tlbiAoYSBiKQogICJT dXBwb3J0IHdlaXJkIChidXQgdmFsaWQpIHVzZSBvZiB0b2tlbiBjb25jYXRlbmF0aW9uLiBIZXJl IHdlIHRha2UgY2FyZSBvbmx5IHRob3NlIHRoYXQgY2FuIGJlIGV2YWx1YXRlZCBkdXJpbmcKcHJl cHJvY2Vzc2luZyB0aW1lLiBGb3IgdGhvc2UgY29tcHV0YWJsZSBzeW50YXggdGhhdCBjYW4gb25s eSBiZSBldmFsdWF0ZWQgZHVyaW5nIEMgcnVudGltZSAobGlrZSAnKysnLCctLScsJys9Jy4uLiks CndlIGlnbm9yZSB0aGVtIGFsbCBoZXJlLiIKICAoY29uZAogICAoKGFuZCAoZXEgYSAnaGlmLWxv Z2lvcikgKGVxIGIgJ2hpZi1sb2dpb3IpKSA7OyAnfCcnfCcgLT4gJ3x8JwogICAgJ2hpZi1vcikK ICAgKChhbmQgKGVxIGEgJ2hpZi1sb2dhbmQpIChlcSBiICdoaWYtbG9nYW5kKSkgOzsgJyYnJyYn IC0+ICcmJicKICAgICdoaWYtYW5kKQogICAoKGFuZCAoZXEgYSAnaGlmLWFzc2lnbikgKGVxIGIg J2hpZi1hc3NpZ24pKSA7OyAnPScnPScgLT4gJz09JwogICAgJ2hpZi1lcXVhbCkKICAgKChhbmQg KGVxIGEgJ2hpZi1ub3QpIChlcSBiICdoaWYtYXNzaWduKSkgOzsgJyEnJz0nIC0+ICchPScKICAg ICdoaWYtbm90ZXF1YWwpCiAgICgoZXEgYSAnaGlmLWxlc3MpCiAgICAoaWYgKGVxIGIgJ2hpZi1s ZXNzKSA7OyAnPCcnPCcgLT4gJzw8JwogICAgICAgICdoaWYtc2hpZnRsZWZ0CiAgICAgIChpZiAo ZXEgYiAnaGlmLWFzc2lnbikgOzsgJzwnJz0nIC0+ICc8PScKICAgICAgICAgICdoaWYtbGVzcy1l cXVhbCkpKQogICAoKGVxIGEgJ2hpZi1ncmVhdGVyKQogICAgKGlmIChlcSBiICdoaWYtZ3JlYXRl cikgOzsgJz4nJz4nIC0+ICc+PicKICAgICAgICAnaGlmLXNoaWZ0bGVmdAogICAgICAoaWYgKGVx IGIgJ2hpZi1hc3NpZ24pIDs7ICc+Jyc9JyAtPiAnPj0nCiAgICAgICAgICAnaGlmLWdyZWF0ZXIt ZXF1YWwpKSkpKQoKKGRlZnVuIGhpZi10b2tlbi1jb25jYXQgKGEgYikKICAiQ29uY2F0ZW5hdGlv biB0d28gc3ltYm9sIG5hbWUgaW50byBhIGxvbmdlciBzeW1ib2wsIGN1cnJlbnRseSBzdXBwb3J0 IG9ubHkgc2ltcGxlIHN5bWJvbCBjb25jYXRlbmF0aW9uLiIKICAoaWYgKG9yIChtZW1xIGEgaGlm LXZhbGlkLXRva2VuLWxpc3QpCiAgICAgICAgICAobWVtcSBiIGhpZi12YWxpZC10b2tlbi1saXN0 KSkKICAgICAgKGxldCAoKHJlc3VsdCAoaGlmLW1lcmdlLW9wZXJhdG9yLXRva2VuIGEgYikpKQog ICAgICAgIChvciByZXN1bHQKICAgICAgICAgICAgOzsoZXJyb3IgIkludmFsaWQgdG9rZW4gdG8g Y29uY2F0ZW5hdGUiKQogICAgICAgICAgICAoZXJyb3IgInBhc3RpbmcgXCIlc1wiIGFuZCBcIiVz XCIgZG9lcyBub3QgZ2l2ZSBhIHZhbGlkIHByZXByb2Nlc3NpbmcgdG9rZW4iCiAgICAgICAgICAg ICAgICAgICAoaWYgKG1lbXEgYSBoaWYtdmFsaWQtdG9rZW4tbGlzdCkgKGNhciAocmFzc29jIGEg aGlmLXRva2VuLWFsaXN0KSkgKHN5bWJvbC1uYW1lIGEpKQogICAgICAgICAgICAgICAgICAgKGlm IChtZW1xIGIgaGlmLXZhbGlkLXRva2VuLWxpc3QpIChjYXIgKHJhc3NvYyBiIGhpZi10b2tlbi1h bGlzdCkpIChzeW1ib2wtbmFtZSBiKSkpKSkKICAgIChpbnRlcm4tc2FmZSAoY29uY2F0IChoaWYt c3RyaW5naWZ5IGEpCiAgICAgICAgICAgICAgICAgICAgICAgICAoaGlmLXN0cmluZ2lmeSBiKSkp KSkKCihkZWZ1biBoaWYtbWF0aGlmeSAodmFsKQogICJUcmVhdCBWQUwgYXMgYSBudW1iZXI6IGlm IGl0J3MgdCBvciBuaWwsIHVzZSAxIG9yIDAuIgogIChjb25kICgoZXEgdmFsIHQpIDEpCiAgICAg ICAgKChudWxsIHZhbCkgMCkKICAgICAgICAodCB2YWwpKSkKCihkZWZ1biBoaWYtY29uZGl0aW9u YWwgKGEgYiBjKQogIChpZiAobm90ICh6ZXJvcCAoaGlmLW1hdGhpZnkgYSkpKSAoaGlmLW1hdGhp ZnkgYikgKGhpZi1tYXRoaWZ5IGMpKSkKCihkZWZ1biBoaWYtYW5kIChhIGIpCiAgKGFuZCAobm90 ICh6ZXJvcCAoaGlmLW1hdGhpZnkgYSkpKSAobm90ICh6ZXJvcCAoaGlmLW1hdGhpZnkgYikpKSkp CihkZWZ1biBoaWYtb3IgKGEgYikKICAob3IgKG5vdCAoemVyb3AgKGhpZi1tYXRoaWZ5IGEpKSkg KG5vdCAoemVyb3AgKGhpZi1tYXRoaWZ5IGIpKSkpKQooZGVmdW4gaGlmLW5vdCAoYSkKICAoemVy b3AgKGhpZi1tYXRoaWZ5IGEpKSkKKGRlZnVuIGhpZi1sb2dub3QgKGEpCiAgKGxvZ25vdCBhKSkK CihkZWZtYWNybyBoaWYtbWF0aGlmeS1iaW5vcCAoZnVuKQogIGAobGFtYmRhIChhIGIpCiAgICAg LChmb3JtYXQgIkxpa2UgYCVzJyBidXQgdHJlYXQgdCBhbmQgbmlsIGFzIDEgYW5kIDAuIiBmdW4p CiAgICAgKCxmdW4gKGhpZi1tYXRoaWZ5IGEpIChoaWYtbWF0aGlmeSBiKSkpKQoKKGRlZnVuIHNo aWZ0bGVmdCAoYSBiKQogIChpZiAoPCBhIDApCiAgICAgIChhc2ggYSBiKQogICAgKGxzaCBhIGIp KSkKCihkZWZ1biBzaGlmdHJpZ2h0IChhIGIpCiAgKGlmICg8IGEgMCkKICAgICAgKGFzaCBhICgt IDAgYikpCiAgICAobHNoIGEgKC0gMCBiKSkpKQoKCihkZWZhbGlhcyAnaGlmLW11bHRpcGx5ICAg ICAgKGhpZi1tYXRoaWZ5LWJpbm9wICopKQooZGVmYWxpYXMgJ2hpZi1kaXZpZGUgICAgICAgICho aWYtbWF0aGlmeS1iaW5vcCAvKSkKKGRlZmFsaWFzICdoaWYtbW9kdWxvICAgICAgICAoaGlmLW1h dGhpZnktYmlub3AgJSkpCihkZWZhbGlhcyAnaGlmLXBsdXMgICAgICAgICAgKGhpZi1tYXRoaWZ5 LWJpbm9wICspKQooZGVmYWxpYXMgJ2hpZi1taW51cyAgICAgICAgIChoaWYtbWF0aGlmeS1iaW5v cCAtKSkKKGRlZmFsaWFzICdoaWYtZXF1YWwgICAgICAgICAoaGlmLW1hdGhpZnktYmlub3AgPSkp CihkZWZhbGlhcyAnaGlmLW5vdGVxdWFsICAgICAgKGhpZi1tYXRoaWZ5LWJpbm9wIC89KSkKKGRl ZmFsaWFzICdoaWYtZ3JlYXRlciAgICAgICAoaGlmLW1hdGhpZnktYmlub3AgPikpCihkZWZhbGlh cyAnaGlmLWxlc3MgICAgICAgICAgKGhpZi1tYXRoaWZ5LWJpbm9wIDwpKQooZGVmYWxpYXMgJ2hp Zi1ncmVhdGVyLWVxdWFsIChoaWYtbWF0aGlmeS1iaW5vcCA+PSkpCihkZWZhbGlhcyAnaGlmLWxl c3MtZXF1YWwgICAgKGhpZi1tYXRoaWZ5LWJpbm9wIDw9KSkKKGRlZmFsaWFzICdoaWYtbG9naW9y ICAgICAgICAoaGlmLW1hdGhpZnktYmlub3AgbG9naW9yKSkKKGRlZmFsaWFzICdoaWYtbG9neG9y ICAgICAgICAoaGlmLW1hdGhpZnktYmlub3AgbG9neG9yKSkKKGRlZmFsaWFzICdoaWYtbG9nYW5k ICAgICAgICAoaGlmLW1hdGhpZnktYmlub3AgbG9nYW5kKSkKKGRlZmFsaWFzICdoaWYtc2hpZnRs ZWZ0ICAgICAoaGlmLW1hdGhpZnktYmlub3Agc2hpZnRsZWZ0KSkKKGRlZmFsaWFzICdoaWYtc2hp ZnRyaWdodCAgICAoaGlmLW1hdGhpZnktYmlub3Agc2hpZnRyaWdodCkpCgoKKGRlZnVuIGhpZi1j b21tYSAoJnJlc3QgZXhwcikKICAiRXZhbHVhdGUgYSBsaXN0IG9mIGV4cHIsIHJldHVybiB0aGUg cmVzdWx0IG9mIHRoZSBsYXN0IGl0ZW0iCiAgKGxldCAoKHJlc3VsdCBuaWwpKQogICAgKGRvbGlz dCAoZSBleHByKQogICAgICAoaWdub3JlLWVycm9ycwogICAgICAgIChzZXRxIHJlc3VsdCAoZnVu Y2FsbCBoaWRlLWlmZGVmLWV2YWx1YXRvciBlKSkpKQogICAgcmVzdWx0KSkKCihkZWZ1biBoaWYt dG9rZW4tc3RyaW5naWZpY2F0aW9uIChsKQogICJTY2FuIHRva2VuIGxpc3QgZm9yICdoaWYtc3Ry aW5naWZ5JyAoJyMnKSB0b2tlbiBhbmQgc3RyaW5naWZ5IHRoZSBuZXh0IHRva2VuIgogIChsZXQg KHJlc3VsdCkKICAgICh3aGlsZSBsCiAgICAgIChzZXRxIHJlc3VsdAogICAgICAgICAgICAoYXBw ZW5kIHJlc3VsdAogICAgICAgICAgICAgICAgICAgIChsaXN0CiAgICAgICAgICAgICAgICAgICAg IChpZiAoZXEgKGNhciBsKSAnaGlmLXN0cmluZ2lmeSkKICAgICAgICAgICAgICAgICAgICAgICAg IChwcm9nMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpZiAoY2FkciBsKQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoaGlmLXN0cmluZ2lmeSAoY2FkciBsKSkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvciAiTm8gdG9rZW4gdG8gc3RyaW5naWZ5Iikp CiAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZXRxIGwgKGNkciBsKSkpCiAgICAgICAgICAg ICAgICAgICAgICAgKGNhciBsKSkpKSkKICAgICAgKHNldHEgbCAoY2RyIGwpKSkKICAgIHJlc3Vs dCkpCgooZGVmdW4gaGlmLXRva2VuLWNvbmNhdGVuYXRpb24gKGwpCiAgIlNjYW4gdG9rZW4gbGlz dCBmb3IgJ2hpZi10b2tlbi1jb25jYXQnICgnIyMnKSB0b2tlbiBhbmQgY29uY2F0ZW5hdGUgdHdv IHRva2VucyIKICAobGV0ICgocHJldiBuaWwpCiAgICAgICAgcmVzdWx0KQogICAgKHdoaWxlIGwK ICAgICAgKHdoaWxlIChlcSAoY2FyIGwpICdoaWYtdG9rZW4tY29uY2F0KQogICAgICAgICh1bmxl c3MgcHJldgogICAgICAgICAgKGVycm9yICJObyB0b2tlbiBiZWZvcmUgIyMgdG8gY29uY2F0ZW5h dGUiKSkKICAgICAgICAodW5sZXNzIChjZHIgbCkKICAgICAgICAgIChlcnJvciAiTm8gdG9rZW4g YWZ0ZXIgIyMgdG8gY29uY2F0ZW5hdGUiKSkKICAgICAgICAoc2V0cSBwcmV2IChoaWYtdG9rZW4t Y29uY2F0IHByZXYgKGNhZHIgbCkpKQogICAgICAgIChzZXRxIGwgKGNkZHIgbCkpKQogICAgICAo aWYgcHJldgogICAgICAgIChzZXRxIHJlc3VsdCAoYXBwZW5kIHJlc3VsdCAobGlzdCBwcmV2KSkp KQogICAgICAoc2V0cSBwcmV2IChjYXIgbCkKICAgICAgICAgICAgbCAoY2RyIGwpKSkKICAgIChp ZiBwcmV2CiAgICAgICAgKGFwcGVuZCByZXN1bHQgKGxpc3QgcHJldikpCiAgICAgIHJlc3VsdCkp KQoKKGRlZnVuIGZsYXR0ZW4gKGwpCiAgIkZsYXR0ZW4gYSB0cmVlIgogIChpZiAoYW5kIGwgKGF0 b20gbCkpCiAgICAgIChsaXN0IGwpCiAgICAoaWYgKGNvbnNwIGwpCiAgICAgICAgKG5jb25jIChm bGF0dGVuIChjYXIgbCkpIChmbGF0dGVuIChjZHIgbCkpKSkpKQoKKGRlZnVuIGRlbGltaXQgKGwg YSkKICAiRGVsbWl0IGEgbGlzdCAnbCcgd2l0aCBkZWxpbWl0ZXIgYXRvbSAnZCciCiAgKG5jb25j IChtYXBjYW4gKGxhbWJkYSAobCkKICAgICAgICAgICAgICAgICAgIChsaXN0IGwgYSkpICAoYnV0 bGFzdCBsKSkKICAgICAgICAgKGxhc3QgbCkpKQoKOzsgUGVyZm9ybSB0b2tlbiByZXBsYWNlbWVu dDoKKGRlZnVuIGhpZi1tYWNyby1zdXBwbHktYXJndW1lbnRzIChtYWNyby1uYW1lIGFjdHVhbC1w YXJtcykKICAiRXhwYW5kIGEgbWFjcm8gZnVuY3Rpb24sIHJlcGxhY2UgJ2FjdHVhbC1wYXJtcycg dG8gdGhlIGZ1bmN0aW9uIGJvZHkuIgogIChsZXQqICgoU0EgICAgICAgICAgICAgICAgICAgKGFz c29jIG1hY3JvLW5hbWUgaGlkZS1pZmRlZi1lbnYpKQogICAgICAgICAobWFjcm8gICAgICAgICAg ICAgICAgKGFuZCBTQQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2RyIFNB KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXEgKGNhZHIgU0EpICdoaWYt ZGVmaW5lLW1hY3JvKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2RkciBT QSkpKQogICAgICAgICAoZm9ybWFsLXBhcm1zICAgICAgICAgKGFuZCBtYWNybyAoY2FyIG1hY3Jv KSkpCiAgICAgICAgIChtYWNyby1ib2R5ICAgICAgICAgICAoYW5kIG1hY3JvIChjYWRyIG1hY3Jv KSkpCiAgICAgICAgIChoaWRlLWlmZGVmLWxvY2FsLWVudiBuaWwpIDs7IGR5bmFtaWMgYmluZGlu ZyBsb2NhbCB0YWJsZQogICAgICAgICBhY3R1YWwtY291bnQKICAgICAgICAgZm9ybWFsLWNvdW50 CiAgICAgICAgIGFjdHVhbAogICAgICAgICBmb3JtYWwKICAgICAgICAgZXRjKQoKICAgICh3aGVu IChhbmQgYWN0dWFsLXBhcm1zIGZvcm1hbC1wYXJtcyBtYWNyby1ib2R5KQogICAgICA7OyBGb3Ig ZWFjaCBhY3R1YWwgcGFyYW1ldGVyLCBldmFsdWF0ZSBlYWNoIG9uZSBhbmQgYXNzb2NpYXRlIGl0 CiAgICAgIDs7IHdpdGggdGhlIGFzc29jaWF0ZWQgYWN0dWFsIHBhcmFtZXRlciwgcHV0IGl0IGlu dG8gbG9jYWwgdGFibGUgYW5kIGZpbmFsbHkKICAgICAgOzsgZXZhbHVhdGUgdGhlIG1hY3JvIGJv ZHkuCiAgICAgIChpZiAoc2V0cSBldGMgKGVxIChjYXIgZm9ybWFsLXBhcm1zKSAnaGlmLWV0Yykp IDs7IFRha2UgY2FyZSBvZiAnaGlmLWV0YyBmaXJzdC4gUHJlZml4ICdoaWYtY29tbWEgYmFjayBp ZiBuZWVkZWQuCiAgICAgICAgICAoc2V0cSBmb3JtYWwtcGFybXMgKGNkciBmb3JtYWwtcGFybXMp KSkKICAgICAgKHNldHEgZm9ybWFsLWNvdW50IChsZW5ndGggZm9ybWFsLXBhcm1zKQogICAgICAg ICAgICBhY3R1YWwtY291bnQgKGxlbmd0aCBhY3R1YWwtcGFybXMpKQoKICAgICAgKGlmICg+IGZv cm1hbC1jb3VudCBhY3R1YWwtY291bnQpCiAgICAgICAgICAoZXJyb3IgIlRvbyBmZXcgcGFybWFt ZXRlciBmb3IgbWFjcm8gJVMiIG1hY3JvLW5hbWUpCiAgICAgICAgKGlmICg8IGZvcm1hbC1jb3Vu dCBhY3R1YWwtY291bnQpCiAgICAgICAgICAgIChvciBldGMKICAgICAgICAgICAgICAgIChlcnJv ciAiVG9vIG1hbnkgcGFyYW1ldGVycyBmb3IgbWFjcm8gJVMiIG1hY3JvLW5hbWUpKSkpCgogICAg ICA7OyBQZXJmb3JtIHRva2VuIHJlcGxhY2VtZW50IG9uIHRoZSBtYWNyby1ib2R5IG9uIHRoZSBw YXJhbWV0ZXJzCiAgICAgICh3aGlsZSAoc2V0cSBmb3JtYWwgKGNhciBmb3JtYWwtcGFybXMpKQog ICAgICAgIChzZXRxIGZvcm1hbC1wYXJtcyAoY2RyIGZvcm1hbC1wYXJtcykpCiAgICAgICAgOzsg UHJldmVudCByZXBldHRhdGl2ZSBzdWJzdGl0dXRhdGlvbiwgdGh1cyBjYW5ub3QgdXNlICdzdWJz dCcKICAgICAgICA7OyBmb3IgZXhhbXBsZToKICAgICAgICA7OyAjZGVmaW5lIG1hYyhhLGIpIChh K2IpCiAgICAgICAgOzsgI2RlZmluZSB0ZXN0bWFjIG1hYyhiLHkpCiAgICAgICAgOzsgdGVzdG1h YyBzaG91bGQgZXhwYW5kIHRvIChiK3kpOiByZXBsYWNlIG9mIGFyZ3VtZW50IGEgYW5kIGIgb2Nj dXJzIHNpbXVsdGFuZW91c2x5CiAgICAgICAgOzsgbm90IHNlcXVlbnRpYWxseS4gSWYgdGhpcyBv Y2N1cnMgc2VxdWVudGlhbGx5IGFjY29yZGluZyB0byB0aGUgYXJndW1lbnQgb3JkZXIsCiAgICAg ICAgOzsgIGl0IHdpbGwgYmVjb21lOiAxLiBmb3JtYWwgcGFybSAjMSAnYScgcmVwbGFjZWQgYnkg YWN0dWFsIHBhcm0gJ2InLCB0aHVzIChhK2IpIGJlY29tZXMgKGIrYikKICAgICAgICA7OyAgMi4g Zm9ybWFsIHBhcm0gIzIgJ2InIHJlcGxhY2VkIGJ5IGFjdHVhbCBwYXJtICd5JywgdGh1cyAoYiti KSBiZWNvbWVzICh5K3kpLgogICAgICAgIChzZXRxIG1hY3JvLWJvZHkKICAgICAgICAgICAgICA7 OyBVbmxpa2UgJ3N1YnN0JywgJ3N1YnN0aXR1dGUnIHJlcGxhY2Ugb25seSB0aGUgdG9wIGxldmVs IGluc3RlYWQgb2YgdGhlIHdob2xlIHRyZWUsCiAgICAgICAgICAgICAgOzsgbW9yZSBpbXBvcnRh bnRseSwgaXQncyBub3QgZGVzdHJ1Y3RpdmUuCiAgICAgICAgICAgICAgKGlmIChhbmQgZXRjIChu dWxsIGZvcm1hbC1wYXJtcykpCiAgICAgICAgICAgICAgICAgIChzdWJzdGl0dXRlIChkZWxpbWl0 IGFjdHVhbC1wYXJtcyAnaGlmLWNvbW1hKSBmb3JtYWwgbWFjcm8tYm9keSkKICAgICAgICAgICAg ICAgIChzdWJzdGl0dXRlIChjYXIgYWN0dWFsLXBhcm1zKSBmb3JtYWwgbWFjcm8tYm9keSkpKQog ICAgICAgIChzZXRxIGFjdHVhbC1wYXJtcyAoY2RyIGFjdHVhbC1wYXJtcykpKQoKICAgICAgOzsg UmVwbGFjZW1lbnQgY29tcGxldGVkLCBmbGF0dGVybiB0aGUgd2hvbGUgdG9rZW4gbGlzdCwKICAg ICAgKHNldHEgbWFjcm8tYm9keSAoZmxhdHRlbiBtYWNyby1ib2R5KSkKCiAgICAgIDs7IFN0cmlu Z2lmaWNhdGlvbiBhbmQgdG9rZW4gY29uY2F0ZW5hdGlvbiBoYXBwZW5zIGhlcmUKICAgICAgKGhp Zi10b2tlbi1jb25jYXRlbmF0aW9uIChoaWYtdG9rZW4tc3RyaW5naWZpY2F0aW9uIG1hY3JvLWJv ZHkpKSkpKQoKKGRlZnVuIGhpZi1pbnZva2UgKG1hY3JvLW5hbWUgYWN0dWFsLXBhcm1zKQogICJJ bnZva2UgYSBtYWNybyBieSBmaXJzdCBleHBhbmRpbmcgaXQsIHRoZW4gcmVwYXJzZSB0aGUgbWFj cm8tYm9keSwgZmluYWxseSBpbnZva2UgdGhlIG1hY3JvLiIKICAgIDs7IFJlcGFyc2UgdGhlIG1h Y3JvIGJvZHkgYW5kIGV2YWx1YXRlIGl0CiAgICAoZnVuY2FsbCBoaWRlLWlmZGVmLWV2YWx1YXRv cgogICAgICAgICAgICAgKGhpZi1wYXJzZS1pZi1leHAKICAgICAgICAgICAgICAoaGlmLW1hY3Jv LXN1cHBseS1hcmd1bWVudHMgbWFjcm8tbmFtZSBhY3R1YWwtcGFybXMpCiAgICAgICAgICAgICAg bWFjcm8tbmFtZSkpKQoKOzs7LS0tLS0tLS0tLS0gZW5kIG9mIHBhcnNlciAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQoKKGRlZnVuIGhpZi1jYW5vbmljYWxpemUtdG9rZW5zIChyZWdleHApIDs7IGZv ciBkZWJ1Z2dpbmcKICAiUmV0dXJuIHRoZSBleHBhbmRlZCByZXN1bHQgb2YgdGhlIHNjYW5uZWQg dG9rZW5zLiIKICAoc2F2ZS1leGN1cnNpb24KICAgIChyZS1zZWFyY2gtZm9yd2FyZCByZWdleHAp CiAgICAobGV0KiAoKGN1cnItcmVnZXhwIChtYXRjaC1zdHJpbmcgMCkpCiAgICAgICAgICAgKGRl ZmluZWQgKHN0cmluZy1tYXRjaCBoaWYtaWZ4ZGVmLXJlZ2V4cCBjdXJyLXJlZ2V4cCkpCiAgICAg ICAgICAgKG5lZ2F0ZSAoYW5kIGRlZmluZWQKICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmlu Zz0gKG1hdGNoLXN0cmluZyAyIGN1cnItcmVnZXhwKSAibiIpKSkpCiAgICAgIChsZXQqICgodG9r ZW5zIChoaWYtdG9rZW5pemUgKHBvaW50KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChwcm9nbiAoaGlmLWVuZC1vZi1saW5lKSAocG9pbnQpKSkpKQogICAgICAgIChpZiBkZWZp bmVkCiAgICAgICAgICAgIChzZXRxIHRva2VucyAobGlzdCAnaGlmLWRlZmluZWQgdG9rZW5zKSkp CiAgICAgICAgKGlmIG5lZ2F0ZQogICAgICAgICAgICAoc2V0cSB0b2tlbnMgKGxpc3QgJ2hpZi1u b3QgdG9rZW5zKSkpCiAgICAgICAgdG9rZW5zKSkpKQoKKGRlZnVuIGhpZi1jYW5vbmljYWxpemUg KHJlZ2V4cCkKICAiV2hlbiBhdCBiZWdpbm5pbmcgb2YgYHJlZ2V4cCcgKGkuZS4gI2lmWCksIHJl dHVybiBhIExpc3AgZXhwcmVzc2lvbiBmb3IgaXRzIGNvbmRpdGlvbi4iCiAgKGxldCAoKGNhc2Ut Zm9sZC1zZWFyY2ggbmlsKSkKICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAocmUtc2VhcmNoLWZv cndhcmQgcmVnZXhwKQogICAgICAobGV0KiAoKGN1cnItcmVnZXhwIChtYXRjaC1zdHJpbmcgMCkp CiAgICAgICAgICAgICAoZGVmaW5lZCAoc3RyaW5nLW1hdGNoIGhpZi1pZnhkZWYtcmVnZXhwIGN1 cnItcmVnZXhwKSkKICAgICAgICAgICAgIChuZWdhdGUgKGFuZCBkZWZpbmVkCiAgICAgICAgICAg ICAgICAgICAgICAgICAgKHN0cmluZz0gKG1hdGNoLXN0cmluZyAyIGN1cnItcmVnZXhwKSAibiIp KSkKICAgICAgICAgICAgICh0b2tlbnMgKGhpZi10b2tlbml6ZSAocG9pbnQpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKHByb2duIChoaWYtZW5kLW9mLWxpbmUpIChwb2ludCkp KSkpCiAgICAgICAgKGlmIGRlZmluZWQKICAgICAgICAgICAgKHNldHEgdG9rZW5zIChsaXN0ICdo aWYtZGVmaW5lZCB0b2tlbnMpKSkKICAgICAgICAoaWYgbmVnYXRlCiAgICAgICAgICAgIChzZXRx IHRva2VucyAobGlzdCAnaGlmLW5vdCB0b2tlbnMpKSkKICAgICAgICAoaGlmLXBhcnNlLWlmLWV4 cCB0b2tlbnMpKSkpKQoKKGRlZnVuIGhpZi1maW5kLWFueS1pZlggKCkKICAiTW92ZSB0byBuZXh0 ICNpZi4uLiwgb3IgI2lmbmRlZiwgYXQgcG9pbnQgb3IgYWZ0ZXIuIgogIDs7IChtZXNzYWdlICJm aW5kIGlmWCBhdCAlZCIgKHBvaW50KSkKICAocHJvZzEKICAgICAgKHJlLXNlYXJjaC1mb3J3YXJk IGhpZi1pZngtcmVnZXhwIChwb2ludC1tYXgpIHQpCiAgICAoYmVnaW5uaW5nLW9mLWxpbmUpKSkK CihkZWZ1biBoaWYtZmluZC1uZXh0LXJlbGV2YW50ICgpCiAgIk1vdmUgdG8gbmV4dCAjaWYuLi4s ICNlbGlmLi4uLCAjZWxzZSwgb3IgI2VuZGlmLCBhZnRlciB0aGUgY3VycmVudCBsaW5lLiIKICA7 OyAobWVzc2FnZSAiaGlmLWZpbmQtbmV4dC1yZWxldmFudCBhdCAlZCIgKHBvaW50KSkKICAoZW5k LW9mLWxpbmUpCiAgOzsgYXZvaWQgaW5maW5pdGUgcmVjdXJzaW9uIGJ5IG9ubHkgZ29pbmcgdG8g YmVnaW5uaW5nIG9mIGxpbmUgaWYgbWF0Y2ggZm91bmQKICAoaWYgKHJlLXNlYXJjaC1mb3J3YXJk IGhpZi1pZngtZWxzZS1lbmRpZi1yZWdleHAgKHBvaW50LW1heCkgdCkKICAgICAgKGJlZ2lubmlu Zy1vZi1saW5lKSkpCgooZGVmdW4gaGlmLWZpbmQtcHJldmlvdXMtcmVsZXZhbnQgKCkKICAiTW92 ZSB0byBwcmV2aW91cyAjaWYuLi4sICNlbHNlLCBvciAjZW5kaWYsIGJlZm9yZSB0aGUgY3VycmVu dCBsaW5lLiIKICA7OyAobWVzc2FnZSAiaGlmLWZpbmQtcHJldmlvdXMtcmVsZXZhbnQgYXQgJWQi IChwb2ludCkpCiAgKGJlZ2lubmluZy1vZi1saW5lKQogIDs7IGF2b2lkIGluZmluaXRlIHJlY3Vy c2lvbiBieSBvbmx5IGdvaW5nIHRvIGJlZ2lubmluZyBvZiBsaW5lIGlmIG1hdGNoIGZvdW5kCiAg KGlmIChyZS1zZWFyY2gtYmFja3dhcmQgaGlmLWlmeC1lbHNlLWVuZGlmLXJlZ2V4cCAocG9pbnQt bWluKSB0KQogICAgIChiZWdpbm5pbmctb2YtbGluZSkpKQoKCihkZWZ1biBoaWYtbG9va2luZy1h dC1pZlggKCkgICAgICAgICAgICA7OyBTaG91bGQgZXZlbnR1YWxseSBzZWUgI2lmCiAgKGxvb2tp bmctYXQgaGlmLWlmeC1yZWdleHApKQooZGVmdW4gaGlmLWxvb2tpbmctYXQtZW5kaWYgKCkKICAo bG9va2luZy1hdCBoaWYtZW5kaWYtcmVnZXhwKSkKKGRlZnVuIGhpZi1sb29raW5nLWF0LWVsc2Ug KCkKICAobG9va2luZy1hdCBoaWYtZWxzZS1yZWdleHApKQooZGVmdW4gaGlmLWxvb2tpbmctYXQt ZWxpZiAoKQogIChsb29raW5nLWF0IGhpZi1lbGlmLXJlZ2V4cCkpCgoKKGRlZnVuIGhpZi1pZmRl Zi10by1lbmRpZiAoKQogICJJZiBwb3NpdGlvbmVkIGF0ICNpZlgsICNlbGlmLCBvciAjZWxzZSBm b3JtLCBza2lwIHRvIGNvcnJlc3BvbmRpbmcgI2VuZGlmLiIKICA7OyAobWVzc2FnZSAiaGlmLWlm ZGVmLXRvLWVuZGlmIGF0ICVkIiAocG9pbnQpKSAoc2l0LWZvciAxKQogIChoaWYtZmluZC1uZXh0 LXJlbGV2YW50KQogIChjb25kICgoaGlmLWxvb2tpbmctYXQtaWZYKQogICAgICAgICAoaGlmLWlm ZGVmLXRvLWVuZGlmKSA7IGZpbmQgZW5kaWYgb2YgbmVzdGVkIGlmCiAgICAgICAgIChoaWYtaWZk ZWYtdG8tZW5kaWYpKSA7IGZpbmQgb3V0ZXIgZW5kaWYgb3IgZWxzZQogICAgICAgICgoaGlmLWxv b2tpbmctYXQtZWxpZikKICAgICAgICAgKGhpZi1pZmRlZi10by1lbmRpZikpCiAgICAgICAgKCho aWYtbG9va2luZy1hdC1lbHNlKQogICAgICAgICAoaGlmLWlmZGVmLXRvLWVuZGlmKSkgOyBmaW5k IGVuZGlmIGZvbGxvd2luZyBlbHNlCiAgICAgICAgKChoaWYtbG9va2luZy1hdC1lbmRpZikKICAg ICAgICAgJ2RvbmUpCiAgICAgICAgKHQKICAgICAgICAgKGVycm9yICJNaXNtYXRjaGVkICNpZmRl ZiAjZW5kaWYgcGFpciIpKSkpCgoKKGRlZnVuIGhpZi1lbmRpZi10by1pZmRlZiAoKQogICJJZiBw b3NpdGlvbmVkIGF0ICNlbmRpZiBmb3JtLCBza2lwIGJhY2t3YXJkIHRvIGNvcnJlc3BvbmRpbmcg I2lmWC4iCiAgOzsgKG1lc3NhZ2UgImhpZi1lbmRpZi10by1pZmRlZiBhdCAlZCIgKHBvaW50KSkK ICAobGV0ICgoc3RhcnQgKHBvaW50KSkpCiAgICAoaGlmLWZpbmQtcHJldmlvdXMtcmVsZXZhbnQp CiAgICAoaWYgKD0gc3RhcnQgKHBvaW50KSkKICAgICAgICAoZXJyb3IgIk1pc21hdGNoZWQgI2lm ZGVmICNlbmRpZiBwYWlyIikpKQogIChjb25kICgoaGlmLWxvb2tpbmctYXQtZW5kaWYpCiAgICAg ICAgIChoaWYtZW5kaWYtdG8taWZkZWYpIDsgZmluZCBiZWdpbm5pbmcgb2YgbmVzdGVkIGlmCiAg ICAgICAgIChoaWYtZW5kaWYtdG8taWZkZWYpKSA7IGZpbmQgYmVnaW5uaW5nIG9mIG91dGVyIGlm IG9yIGVsc2UKICAgICAgICAoKGhpZi1sb29raW5nLWF0LWVsaWYpCiAgICAgICAgIChoaWYtZW5k aWYtdG8taWZkZWYpKQogICAgICAgICgoaGlmLWxvb2tpbmctYXQtZWxzZSkKICAgICAgICAgKGhp Zi1lbmRpZi10by1pZmRlZikpCiAgICAgICAgKChoaWYtbG9va2luZy1hdC1pZlgpCiAgICAgICAg ICdkb25lKQogICAgICAgICh0CiAgICAgICAgIChlcnJvciAiTWlzbWF0Y2hlZCAjZW5kaWYiKSkp KSAgICAgICAgICAgICAgICAgOyBuZXZlciBnZXRzIGhlcmUKCgooZGVmdW4gZm9yd2FyZC1pZmRl ZiAoJm9wdGlvbmFsIGFyZykKICAiTW92ZSBwb2ludCB0byBiZWdpbm5pbmcgb2YgbGluZSBvZiB0 aGUgbmV4dCBpZmRlZi1lbmRpZi4KV2l0aCBhcmd1bWVudCwgZG8gdGhpcyB0aGF0IG1hbnkgdGlt ZXMuIgogIChpbnRlcmFjdGl2ZSAicCIpCiAgKG9yIGFyZyAoc2V0cSBhcmcgMSkpCiAgKGlmICg8 IGFyZyAwKSAoYmFja3dhcmQtaWZkZWYgKC0gYXJnKSkKICAgICh3aGlsZSAoPCAwIGFyZykKICAg ICAgKHNldHEgYXJnICgtIGFyZykpCiAgICAgIChsZXQgKChzdGFydCAocG9pbnQpKSkKICAgICAg ICAodW5sZXNzIChoaWYtbG9va2luZy1hdC1pZlgpCiAgICAgICAgICAoaGlmLWZpbmQtbmV4dC1y ZWxldmFudCkpCiAgICAgICAgKGlmIChoaWYtbG9va2luZy1hdC1pZlgpCiAgICAgICAgICAgICho aWYtaWZkZWYtdG8tZW5kaWYpCiAgICAgICAgICAoZ290by1jaGFyIHN0YXJ0KQogICAgICAgICAg KGVycm9yICJObyBmb2xsb3dpbmcgI2lmZGVmIikpKSkpKQoKCihkZWZ1biBiYWNrd2FyZC1pZmRl ZiAoJm9wdGlvbmFsIGFyZykKICAiTW92ZSBwb2ludCB0byBiZWdpbm5pbmcgb2YgdGhlIHByZXZp b3VzIGlmZGVmLWVuZGlmLgpXaXRoIGFyZ3VtZW50LCBkbyB0aGlzIHRoYXQgbWFueSB0aW1lcy4i CiAgKGludGVyYWN0aXZlICJwIikKICAob3IgYXJnIChzZXRxIGFyZyAxKSkKICAoaWYgKDwgYXJn IDApIChmb3J3YXJkLWlmZGVmICgtIGFyZykpCiAgICAod2hpbGUgKDwgMCBhcmcpCiAgICAgIChz ZXRxIGFyZyAoMS0gYXJnKSkKICAgICAgKGJlZ2lubmluZy1vZi1saW5lKQogICAgICAobGV0ICgo c3RhcnQgKHBvaW50KSkpCiAgICAgICAgKHVubGVzcyAoaGlmLWxvb2tpbmctYXQtZW5kaWYpCiAg ICAgICAgICAoaGlmLWZpbmQtcHJldmlvdXMtcmVsZXZhbnQpKQogICAgICAgIChpZiAoaGlmLWxv b2tpbmctYXQtZW5kaWYpCiAgICAgICAgICAgIChoaWYtZW5kaWYtdG8taWZkZWYpCiAgICAgICAg ICAoZ290by1jaGFyIHN0YXJ0KQogICAgICAgICAgKGVycm9yICJObyBwcmV2aW91cyAjaWZkZWYi KSkpKSkpCgoKKGRlZnVuIGRvd24taWZkZWYgKCkKICAiTW92ZSBwb2ludCB0byBiZWdpbm5pbmcg b2YgbmVzdGVkIGlmZGVmIG9yIGVsc2UtcGFydC4iCiAgICAoaW50ZXJhY3RpdmUpCiAgICAobGV0 ICgoc3RhcnQgKHBvaW50KSkpCiAgICAgIChoaWYtZmluZC1uZXh0LXJlbGV2YW50KQogICAgICAo aWYgKG9yIChoaWYtbG9va2luZy1hdC1pZlgpIChoaWYtbG9va2luZy1hdC1lbHNlKSkKICAgICAg ICAgICgpCiAgICAgICAgKGdvdG8tY2hhciBzdGFydCkKICAgICAgICAoZXJyb3IgIk5vIGZvbGxv d2luZyAjaWZkZWYiKSkpKQoKCihkZWZ1biB1cC1pZmRlZiAoKQogICJNb3ZlIHBvaW50IHRvIGJl Z2lubmluZyBvZiBlbmNsb3NpbmcgaWZkZWYgb3IgZWxzZS1wYXJ0LiIKICAoaW50ZXJhY3RpdmUp CiAgKGJlZ2lubmluZy1vZi1saW5lKQogIChsZXQgKChzdGFydCAocG9pbnQpKSkKICAgICh1bmxl c3MgKGhpZi1sb29raW5nLWF0LWVuZGlmKQogICAgICAoaGlmLWZpbmQtcHJldmlvdXMtcmVsZXZh bnQpKQogICAgKGlmIChoaWYtbG9va2luZy1hdC1lbmRpZikKICAgICAgICAoaGlmLWVuZGlmLXRv LWlmZGVmKSkKICAgICAgKGlmICg9IHN0YXJ0IChwb2ludCkpCiAgICAgICAgICAoZXJyb3IgIk5v IHByZXZpb3VzICNpZmRlZiIpKSkpCgooZGVmdW4gbmV4dC1pZmRlZiAoJm9wdGlvbmFsIGFyZykK ICAiTW92ZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0ICNpZlgsICNlbHNlLCBvciAjZW5k aWYuCldpdGggYXJndW1lbnQsIGRvIHRoaXMgdGhhdCBtYW55IHRpbWVzLiIKICAoaW50ZXJhY3Rp dmUgInAiKQogIChvciBhcmcgKHNldHEgYXJnIDEpKQogIChpZiAoPCBhcmcgMCkgKHByZXZpb3Vz LWlmZGVmICgtIGFyZykpCiAgICAod2hpbGUgKDwgMCBhcmcpCiAgICAgIChzZXRxIGFyZyAoMS0g YXJnKSkKICAgICAgKGhpZi1maW5kLW5leHQtcmVsZXZhbnQpCiAgICAgICh3aGVuIChlb2xwKQog ICAgICAgIChiZWdpbm5pbmctb2YtbGluZSkKICAgICAgICAoZXJyb3IgIk5vIGZvbGxvd2luZyAj aWZkZWZzLCAjZWxzZXMsIG9yICNlbmRpZnMiKSkpKSkKCihkZWZ1biBwcmV2aW91cy1pZmRlZiAo Jm9wdGlvbmFsIGFyZykKICAiTW92ZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwcmV2aW91cyAj aWZYLCAjZWxzZSwgb3IgI2VuZGlmLgpXaXRoIGFyZ3VtZW50LCBkbyB0aGlzIHRoYXQgbWFueSB0 aW1lcy4iCiAgKGludGVyYWN0aXZlICJwIikKICAob3IgYXJnIChzZXRxIGFyZyAxKSkKICAoaWYg KDwgYXJnIDApIChuZXh0LWlmZGVmICgtIGFyZykpCiAgICAod2hpbGUgKDwgMCBhcmcpCiAgICAg IChzZXRxIGFyZyAoMS0gYXJnKSkKICAgICAgKGxldCAoKHN0YXJ0IChwb2ludCkpKQogICAgICAg IChoaWYtZmluZC1wcmV2aW91cy1yZWxldmFudCkKICAgICAgICAoaWYgKD0gc3RhcnQgKHBvaW50 KSkKICAgICAgICAgICAgKGVycm9yICJObyBwcmV2aW91cyAjaWZkZWZzLCAjZWxzZXMsIG9yICNl bmRpZnMiKSkpKSkpCgoKOzs9PT0lJVNGJSUgcGFyc2luZyAoRW5kKSAgPT09CgoKOzs9PT0lJVNG JSUgaGlkZS1pZmRlZi1oaWRpbmcgKFN0YXJ0KSAgPT09CgoKOzs7IEEgcmFuZ2UgaXMgYSBzdHJ1 Y3R1cmUgd2l0aCBmb3VyIGNvbXBvbmVudHM6Cjs7OyBTVEFSVCAgICAgICBUaGUgc3RhcnQgb2Yg dGhlIHJhbmdlLiAoYmVnaW5uaW5nIG9mIGxpbmUpCjs7OyBFTFNFICAgICAgICBUaGUgZWxzZSBt YXJrZXIgKGJlZ2lubmluZyBvZiBsaW5lKQo7OzsgRU5EICAgICAgICAgVGhlIGVuZCBvZiB0aGUg cmFuZ2UuICAoYmVnaW5uaW5nIG9mIGxpbmUpCjs7OyBFTElGICAgICAgICBBIHNlcXVlbmNlIG9m ICNlbGlmIG1hcmtlcnMgKGJlZ2lubmluZyBvZiBsaW5lKQoKKGRlZnN1YnN0IGhpZi1tYWtlLXJh bmdlIChzdGFydCBlbmQgJm9wdGlvbmFsIGVsc2UgZWxpZikKICAobGlzdCBzdGFydCBlbHNlIGVu ZCBlbGlmKSkKCihkZWZzdWJzdCBoaWYtcmFuZ2Utc3RhcnQgKHJhbmdlKSAoZWx0IHJhbmdlIDAp KQooZGVmc3Vic3QgaGlmLXJhbmdlLWVsc2UgKHJhbmdlKSAoZWx0IHJhbmdlIDEpKQooZGVmc3Vi c3QgaGlmLXJhbmdlLWVuZCAocmFuZ2UpIChlbHQgcmFuZ2UgMikpCihkZWZzdWJzdCBoaWYtcmFu Z2UtZWxpZiAocmFuZ2UpIChlbHQgcmFuZ2UgMykpCgoKOzs7IEZpbmQtUmFuZ2UKOzs7IFRoZSB3 b3JraG9yc2UsIGl0IGRlbGltaXRzIHRoZSAjaWYgcmVnaW9uLiAgUmVhc29uYWJseSBzaW1wbGU6 Cjs7OyBTa2lwIHVudGlsIGFuICNlbHNlIG9yICNlbmRpZiBpcyBmb3VuZCwgcmVtZW1iZXJpbmcg cG9zaXRpb25zLiAgSWYKOzs7IGFuICNlbHNlIHdhcyBmb3VuZCwgc2tpcCBzb21lIG1vcmUsIGxv b2tpbmcgZm9yIHRoZSB0cnVlICNlbmRpZi4KCihkZWZ1biBoaWYtZmluZC1yYW5nZSAoKQogICJS ZXR1cm4gYSBSYW5nZSBzdHJ1Y3R1cmUgZGVzY3JpYmluZyB0aGUgY3VycmVudCAjaWYgcmVnaW9u LgpQb2ludCBpcyBsZWZ0IHVuY2hhbmdlZC4iCiAgOzsgKG1lc3NhZ2UgImhpZi1maW5kLXJhbmdl IGF0ICVkIiAocG9pbnQpKQogIChzYXZlLWV4Y3Vyc2lvbgogICAgKGJlZ2lubmluZy1vZi1saW5l KQogICAgKGxldCAoKHN0YXJ0IChwb2ludCkpCiAgICAgICAgICAoZWxpZiBuaWwpCiAgICAgICAg ICAoZWxzZSBuaWwpCiAgICAgICAgICAoZW5kIG5pbCkpCiAgICAgIDs7IFBhcnQgb25lLiAgTG9v ayBmb3IgZWl0aGVyICNlbGlmLCAjZWxzZSBvciAjZW5kaWYuCiAgICAgIDs7IFRoaXMgbG9vcC1h bmQtYS1oYWxmIGRlZGljYXRlZCB0byBFLiBEaWprc3RyYS4KICAgICAgKHdoaWxlIChhbmQgKG5v dCBlbHNlKSAobm90IGVuZCkpCiAgICAgICAgKHdoaWxlIChwcm9nbgogICAgICAgICAgICAgICAg IChoaWYtZmluZC1uZXh0LXJlbGV2YW50KQogICAgICAgICAgICAgICAgIChoaWYtbG9va2luZy1h dC1pZlgpKSAgICAgICAgICA7IFNraXAgbmVzdGVkIGlmZGVmCiAgICAgICAgICAoaGlmLWlmZGVm LXRvLWVuZGlmKSkKICAgICAgICA7OyBGb3VuZCBlaXRoZXIgYSAjZWxzZSwgI2VsaWYsIG9yIGFu ICNlbmRpZi4KICAgICAgICAoY29uZCAoKGhpZi1sb29raW5nLWF0LWVsaWYpCiAgICAgICAgICAg ICAgIChzZXRxIGVsaWYgKG5jb25jIGVsaWYgKGxpc3QgKHBvaW50KSkpKSkKICAgICAgICAgICAg ICAoKGhpZi1sb29raW5nLWF0LWVsc2UpCiAgICAgICAgICAgICAgIChzZXRxIGVsc2UgKHBvaW50 KSkpCiAgICAgICAgICAgICAgKHQKICAgICAgICAgICAgICAgKHNldHEgZW5kIChwb2ludCkpKSkp CiAgICAgIDs7IElmIGZvdW5kICNlbHNlLCBsb29rIGZvciAjZW5kaWYuCiAgICAgICh3aGVuIGVs c2UKICAgICAgICAod2hpbGUgKHByb2duCiAgICAgICAgICAgICAgICAgKGhpZi1maW5kLW5leHQt cmVsZXZhbnQpCiAgICAgICAgICAgICAgICAgKGhpZi1sb29raW5nLWF0LWlmWCkpICA7IFNraXAg bmVzdGVkIGlmZGVmCiAgICAgICAgICAoaGlmLWlmZGVmLXRvLWVuZGlmKSkKICAgICAgICAoaWYg KGhpZi1sb29raW5nLWF0LWVsc2UpCiAgICAgICAgICAgIChlcnJvciAiRm91bmQgdHdvIGVsc2Vz IGluIGEgcm93PyAgQnJva2VuISIpKQogICAgICAgIChzZXRxIGVuZCAocG9pbnQpKSkgICAgICAg ICAgICA7IChsaW5lLWVuZC1wb3NpdGlvbikKICAgICAgKGhpZi1tYWtlLXJhbmdlIHN0YXJ0IGVu ZCBlbHNlIGVsaWYpKSkpCgoKOzs7IEEgYml0IHNsaW15LgoKKGRlZnVuIGhpZi1oaWRlLWxpbmUg KHBvaW50KQogICJIaWRlIHRoZSBsaW5lIGNvbnRhaW5pbmcgcG9pbnQuICBEb2VzIG5vdGhpbmcg aWYgYGhpZGUtaWZkZWYtbGluZXMnIGlzIG5pbC4iCiAgKHdoZW4gaGlkZS1pZmRlZi1saW5lcwog ICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgIChnb3RvLWNoYXIgcG9pbnQpCiAgICAgIChoaWRlLWlm ZGVmLXJlZ2lvbi1pbnRlcm5hbAogICAgICAgKGxpbmUtYmVnaW5uaW5nLXBvc2l0aW9uKSAocHJv Z24gKGhpZi1lbmQtb2YtbGluZSkgKHBvaW50KSkpKSkpCgoKOzs7ICBIaWYtUG9zc2libHktSGlk ZQo7OzsgIFRoZXJlIGFyZSBmb3VyIGNhc2VzLiAgVGhlICNpZlggZXhwcmVzc2lvbiBpcyAidGFr ZW4iIGlmIGl0Cjs7OyAgdGhlIGhpZGUtaWZkZWYtZXZhbHVhdG9yIHJldHVybnMgVC4gIFByZXN1 bWFibHksIHRoaXMgbWVhbnMgdGhlIGNvZGUKOzs7ICBpbnNpZGUgdGhlICNpZmRlZiB3b3VsZCBi ZSBpbmNsdWRlZCB3aGVuIHRoZSBwcm9ncmFtIHdhcwo7OzsgIGNvbXBpbGVkLgo7OzsKOzs7ICBD YXNlIDE6ICAjaWZYIHRha2VuLCBhbmQgdGhlcmUncyBhbiAjZWxzZS4KOzs7ICAgICBUaGUgI2Vs c2UgcGFydCBtdXN0IGJlIGhpZGRlbi4gIFRoZSAjaWYgKHRoZW4pIHBhcnQgbXVzdCBiZQo7Ozsg ICAgIHByb2Nlc3NlZCBmb3IgbmVzdGVkICNpZlgncy4KOzs7ICBDYXNlIDI6ICAjaWZYIHRha2Vu LCBhbmQgdGhlcmUncyBubyAjZWxzZS4KOzs7ICAgICBUaGUgI2lmIHBhcnQgbXVzdCBiZSBwcm9j ZXNzZWQgZm9yIG5lc3RlZCAjaWZYJ3MuCjs7OyAgQ2FzZSAzOiAgI2lmWCBub3QgdGFrZW4sIGFu ZCB0aGVyZSdzIGFuICNlbGlmCjs7OyAgICAgVGhlICNpZiBwYXJ0IG11c3QgYmUgaGlkZGVuLCBh bmQgdGhlbiBldmFsdWF0ZQo7OzsgICAgIHRoZSAjZWxpZiBjb25kaXRpb24gbGlrZSBhIG5ldyAj aWZYLgo7OzsgIENhc2UgNDogICNpZlggbm90IHRha2VuLCBhbmQgdGhlcmUncyBqdXN0IGFuICNl bHNlLgo7OzsgICAgIFRoZSAjaWYgcGFydCBtdXN0IGJlIGhpZGRlbi4gIFRoZSAjZWxzZSBwYXJ0 IG11c3QgYmUgcHJvY2Vzc2VkCjs7OyAgICAgZm9yIG5lc3RlZCAjaWZzLgo7OzsgIENhc2UgNTog ICNpZlggbm90IHRha2VuLCBhbmQgdGhlcmUncyBubyAjZWxzZS4KOzs7ICAgICBUaGUgI2lmWCBw YXJ0IG11c3QgYmUgaGlkZGVuLgo7OzsKOzs7ICBGdXJ0aGVyIHByb2Nlc3NpbmcgaXMgZG9uZSBi eSBuYXJyb3dpbmcgdG8gdGhlIHJlbGV2YW50IHJlZ2lvbgo7OzsgIGFuZCBqdXN0IHJlY3Vyc2l2 ZWx5IGNhbGxpbmcgaGlkZS1pZmRlZi1ndXRzLgo7OzsKOzs7ICBXaGVuIGhpZi1wb3NzaWJseS1o aWRlIHJldHVybnMsIHBvaW50IGlzIGF0IHRoZSBlbmQgb2YgdGhlCjs7OyAgcG9zc2libHktaGlk ZGVuIHJhbmdlLgoKKGRlZnVuIGhpZi1yZWN1cnNlLW9uIChzdGFydCBlbmQgJm9wdGlvbmFsIGRv bnQtZ28tZW9sKQogICJDYWxsIGBoaWRlLWlmZGVmLWd1dHMnIGFmdGVyIG5hcnJvd2luZyB0byBl bmQgb2YgU1RBUlQgbGluZSBhbmQgRU5EIGxpbmUuIgogIChzYXZlLWV4Y3Vyc2lvbgogICAgKHNh dmUtcmVzdHJpY3Rpb24KICAgICAgKGdvdG8tY2hhciBzdGFydCkKICAgICAgKHVubGVzcyBkb250 LWdvLWVvbAogICAgICAgIChlbmQtb2YtbGluZSkpCiAgICAgIChuYXJyb3ctdG8tcmVnaW9uIChw b2ludCkgZW5kKQogICAgICAoaGlkZS1pZmRlZi1ndXRzKSkpKQoKKGRlZnVuIGhpZi1wb3NzaWJs eS1oaWRlICgpCiAgIkNhbGxlZCBhdCAjaWZYIGV4cHJlc3Npb24sIHRoaXMgaGlkZXMgdGhvc2Ug cGFydHMgdGhhdCBzaG91bGQgYmUgaGlkZGVuLgpJdCB1c2VzIHRoZSBqdWRnbWVudCBvZiBgaGlk ZS1pZmRlZi1ldmFsdWF0b3InLiIKICA7OyAobWVzc2FnZSAiaGlmLXBvc3NpYmx5LWhpZGUiKSAo c2l0LWZvciAxKQogIChsZXQqICgoY2FzZS1mb2xkLXNlYXJjaCBuaWwpCiAgICAgICAgICh0ZXN0 IChoaWYtY2Fub25pY2FsaXplIGhpZi1pZngtcmVnZXhwKSkKICAgICAgICAgKHJhbmdlIChoaWYt ZmluZC1yYW5nZSkpCiAgICAgICAgIChlbGlmcyAoaGlmLXJhbmdlLWVsaWYgcmFuZ2UpKQogICAg ICAgICAoY29tcGxldGUgbmlsKSkKICAgIDs7IChtZXNzYWdlICJ0ZXN0ID0gJXMiIHRlc3QpIChz aXQtZm9yIDEpCgogICAgKGhpZi1oaWRlLWxpbmUgKGhpZi1yYW5nZS1lbmQgcmFuZ2UpKQogICAg KHdoaWxlIChub3QgY29tcGxldGUpCiAgICAgIChpZiAoaGlmLW5vdCAoZnVuY2FsbCBoaWRlLWlm ZGVmLWV2YWx1YXRvciB0ZXN0KSkKICAgICAgICAgIDs7IGlmWC9lbGlmIGlzIEZBTFNFCiAgICAg ICAgICAoaWYgZWxpZnMKICAgICAgICAgICAgICA7OyBDYXNlIDMgLSBIaWRlIHRoZSAjaWZYIGFu ZCBldmFsICNlbGlmCiAgICAgICAgICAgICAgKGxldCAoKG5ld3N0YXJ0IChjYXIgZWxpZnMpKSkK ICAgICAgICAgICAgICAgIChoaWYtaGlkZS1saW5lIChoaWYtcmFuZ2Utc3RhcnQgcmFuZ2UpKQog ICAgICAgICAgICAgICAgKGhpZGUtaWZkZWYtcmVnaW9uIChoaWYtcmFuZ2Utc3RhcnQgcmFuZ2Up CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEtIG5ld3N0YXJ0KSkKICAgICAg ICAgICAgICAgIChzZXRjYXIgcmFuZ2UgbmV3c3RhcnQpCiAgICAgICAgICAgICAgICAoZ290by1j aGFyIG5ld3N0YXJ0KQogICAgICAgICAgICAgICAgKHNldHEgZWxpZnMgKGNkciBlbGlmcykpCiAg ICAgICAgICAgICAgICAoc2V0cSB0ZXN0IChoaWYtY2Fub25pY2FsaXplIGhpZi1lbGlmLXJlZ2V4 cCkpKQoKICAgICAgICAgICAgOzsgQ2hlY2sgZm9yICNlbHNlCiAgICAgICAgICAgIChjb25kICgo aGlmLXJhbmdlLWVsc2UgcmFuZ2UpCiAgICAgICAgICAgICAgICAgICA7OyBDYXNlIDQgLSAjZWxz ZSBibG9jayB2aXNpYmxlCiAgICAgICAgICAgICAgICAgICAoaGlmLWhpZGUtbGluZSAoaGlmLXJh bmdlLWVsc2UgcmFuZ2UpKQogICAgICAgICAgICAgICAgICAgKGhpZGUtaWZkZWYtcmVnaW9uICho aWYtcmFuZ2Utc3RhcnQgcmFuZ2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKDEtIChoaWYtcmFuZ2UtZWxzZSByYW5nZSkpKQogICAgICAgICAgICAgICAgICAgKGhpZi1y ZWN1cnNlLW9uIChoaWYtcmFuZ2UtZWxzZSByYW5nZSkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoaGlmLXJhbmdlLWVuZCByYW5nZSkpKQogICAgICAgICAgICAgICAgICAodAog ICAgICAgICAgICAgICAgICAgOzsgQ2FzZSA1IC0gTm8gI2Vsc2UgYmxvY2ssIGhpZGUgI2lmWAog ICAgICAgICAgICAgICAgICAgKGhpZGUtaWZkZWYtcmVnaW9uIChwb2ludCkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoMS0gKGhpZi1yYW5nZS1lbmQgcmFuZ2UpKSkpKQog ICAgICAgICAgICAoc2V0cSBjb21wbGV0ZSB0KSkKCiAgICAgICAgOzsgaWZYL2VsaWYgaXMgVFJV RQogICAgICAgIChjb25kIChlbGlmcwogICAgICAgICAgICAgICA7OyBMdWtlIGZpeDogZGlzdGlu Z3Vpc2ggZnJvbSAjZWxpZi4uI2VsaWYgdG8gI2VsaWYuLiNlbHNlIFsyMDEzLTA4LTMwIDE0OjEw OjQwICswODAwXQogICAgICAgICAgICAgICAobGV0ICgoZWxpZiAoY2FyIGVsaWZzKSkpCiAgICAg ICAgICAgICAgICAgICA7OyBoaWRlIGFsbCBlbGlmcwogICAgICAgICAgICAgICAgICAgKGhpZi1o aWRlLWxpbmUgZWxpZikKICAgICAgICAgICAgICAgICAgIChoaWRlLWlmZGVmLXJlZ2lvbiBlbGlm ICgxLSAoaGlmLXJhbmdlLWVuZCByYW5nZSkpKQogICAgICAgICAgICAgICAgICAgKGhpZi1yZWN1 cnNlLW9uIChoaWYtcmFuZ2Utc3RhcnQgcmFuZ2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZWxpZikpKQogICAgICAgICAgICAgICgoaGlmLXJhbmdlLWVsc2UgcmFuZ2UpCiAg ICAgICAgICAgICAgIDs7IENhc2UgMSAtIEhpZGUgI2VsaWYgYW5kICNlbHNlIGJsb2NrcywgcmVj dXJzZSAjaWZYCiAgICAgICAgICAgICAgIChoaWYtaGlkZS1saW5lIChoaWYtcmFuZ2UtZWxzZSBy YW5nZSkpCiAgICAgICAgICAgICAgIChoaWRlLWlmZGVmLXJlZ2lvbiAoaGlmLXJhbmdlLWVsc2Ug cmFuZ2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMS0gKGhpZi1yYW5nZS1l bmQgcmFuZ2UpKSkKICAgICAgICAgICAgICAgKGhpZi1yZWN1cnNlLW9uIChoaWYtcmFuZ2Utc3Rh cnQgcmFuZ2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGlmLXJhbmdlLWVsc2Ug cmFuZ2UpKSkKCiAgICAgICAgICAgICAgKHQKICAgICAgICAgICAgICAgOzsgQ2FzZSAyIC0gTm8g I2Vsc2UsIGp1c3QgcmVjdXJzZSAjaWZYCiAgICAgICAgICAgICAgIChoaWYtcmVjdXJzZS1vbiAo aGlmLXJhbmdlLXN0YXJ0IHJhbmdlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhp Zi1yYW5nZS1lbmQgcmFuZ2UpKSkpCiAgICAgICAgKHNldHEgY29tcGxldGUgdCkpKQoKICAgIDs7 IGNvbXBsZXRlID0gdAogICAgKGhpZi1oaWRlLWxpbmUgKGhpZi1yYW5nZS1zdGFydCByYW5nZSkp IDsgQWx3YXlzIGhpZGUgc3RhcnQuCiAgICAoZ290by1jaGFyIChoaWYtcmFuZ2UtZW5kIHJhbmdl KSkKICAgIChlbmQtb2YtbGluZSkpKQoKCihkZWZ1biBoaWYtZXZhbHVhdGUtcmVnaW9uIChzdGFy dCBlbmQpCiAgKGxldCogKCh0b2tlbnMgKGlnbm9yZS1lcnJvcnMgOzsgcHJldmVudCBDIHN0YXRl bWVudCB0aGluZ3MgbGlrZSAnZG8geyAuLi4gfSB3aGlsZSAoMCknCiAgICAgICAgICAgICAgICAg ICAoaGlmLXRva2VuaXplIHN0YXJ0IGVuZCkpKQogICAgICAgICAoZXhwciAoYW5kIHRva2Vucwog ICAgICAgICAgICAgICAgICAgIChjb25kaXRpb24tY2FzZSBuaWwKICAgICAgICAgICAgICAgICAg ICAgICAgKGhpZi1wYXJzZS1pZi1leHAgdG9rZW5zKQogICAgICAgICAgICAgICAgICAgICAgKGVy cm9yCiAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zKSkpKQogICAgICAgICAocmVzdWx0IChm dW5jYWxsIGhpZGUtaWZkZWYtZXZhbHVhdG9yIGV4cHIpKSkKICAgIHJlc3VsdCkpCgooZGVmdW4g aGlmLWV2YWx1YXRlLW1hY3JvIChyc3RhcnQgcmVuZCkKICAiRXZhbHVhdGUgdGhlIG1hY3JvIGV4 cGFuc2lvbiByZXN1bHQgZm9yIGEgcmVnaW9uLiBJZiBubyByZWdpb24gYWN0aXZlLApmaW5kIHRo ZSBjdXJyZW50ICNpZmRlZnMgYW5kIGV2YWx1YXRlIHRoZSByZXN1bHQuIEN1cnJlbnRseSBpdCBz dXBwb3J0IG9ubHkKbWF0aCBjYWxjdWxhdGlvbiwgbm8gc3RyaW5nIG9yIGFyZ3VtZW50ZWQgbWFj cm9zIGNhbiBiZSBleHBhbmRlZC4iCiAgKGludGVyYWN0aXZlICJyIikKICAobGV0ICgoY2FzZS1m b2xkLXNlYXJjaCBuaWwpKQogICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgICh1bmxlc3MgbWFyay1h Y3RpdmUKICAgICAgICAoc2V0cSByc3RhcnQgbmlsIHJlbmQgbmlsKQogICAgICAgIChiZWdpbm5p bmctb2YtbGluZSkKICAgICAgICAod2hlbiAoYW5kIChyZS1zZWFyY2gtZm9yd2FyZCBoaWYtbWFj cm8tZXhwci1wcmVmaXgtcmVnZXhwIG5pbCB0KQogICAgICAgICAgICAgICAgICAgKHN0cmluZz0g ImRlZmluZSIgKG1hdGNoLXN0cmluZyAyKSkpCiAgICAgICAgICAocmUtc2VhcmNoLWZvcndhcmQg aGlmLW1hY3JvbmFtZSBuaWwgdCkpKQogICAgICAobGV0KiAoKHN0YXJ0IChvciByc3RhcnQgKHBv aW50KSkpCiAgICAgICAgICAgICAoZW5kICAgKG9yIHJlbmQgKHByb2duIChoaWYtZW5kLW9mLWxp bmUpIChwb2ludCkpKSkKICAgICAgICAgICAgIChkZWZpbmVkIG5pbCkKICAgICAgICAgICAgIChz aW1wbGUgJ3QpCiAgICAgICAgICAgICAodG9rZW5zIChpZ25vcmUtZXJyb3JzIDs7IHByZXZlbnQg QyBzdGF0ZW1lbnQgdGhpbmdzIGxpa2UgJ2RvIHsgLi4uIH0gd2hpbGUgKDApJwogICAgICAgICAg ICAgICAgICAgICAgIChoaWYtdG9rZW5pemUgc3RhcnQgZW5kKSkpCiAgICAgICAgICAgICAoZXhw ciAob3IgKGFuZCAoPD0gKGxlbmd0aCB0b2tlbnMpIDEpIDs7IHNpbXBsZSB0b2tlbgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgKHNldHEgZGVmaW5lZCAoYXNzb2MgKGNhciB0b2tlbnMpIGhp ZGUtaWZkZWYtZW52KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZXRxIHNpbXBsZSAo YXRvbSAoaGlmLWxvb2t1cCAoY2FyIHRva2VucykpKSkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChoaWYtbG9va3VwIChjYXIgdG9rZW5zKSkpCiAgICAgICAgICAgICAgICAgICAgICAgKGFu ZCB0b2tlbnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25kaXRpb24tY2FzZSBuaWwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGlmLXBhcnNlLWlmLWV4cCB0b2tlbnMp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbmlsKSkpKSkKICAgICAgICAgICAgIChyZXN1bHQgKGZ1bmNhbGwgaGlkZS1p ZmRlZi1ldmFsdWF0b3IgZXhwcikpCiAgICAgICAgICAgICAoZXhwcnN0cmluZyAocmVwbGFjZS1y ZWdleHAtaW4tc3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIl5bIFx0XSpcXChbXiBc dF0rXFwpWyBcdF0qIiAiXFwxIiAgOzsgdHJpbSBvZmYgbGVhZGluZy90cmFpbGluZyB3aGl0ZXMK ICAgICAgICAgICAgICAgICAgICAgICAgICAocmVwbGFjZS1yZWdleHAtaW4tc3RyaW5nCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICJcXCgvLy4qXFwpIiAiIiA7OyB0cmltIG9mZiBlbmQtb2Yt bGluZSBjb21tZW50cwogICAgICAgICAgICAgICAgICAgICAgICAgICAoYnVmZmVyLXN1YnN0cmlu Zy1uby1wcm9wZXJ0aWVzIHN0YXJ0IGVuZCkpKSkpCiAgICAgICAgKGNvbmQKICAgICAgICAgKChh bmQgKDw9IChsZW5ndGggdG9rZW5zKSAxKSBzaW1wbGUpIDs7IHNpbXBsZSB0b2tlbgogICAgICAg ICAgKGlmIGRlZmluZWQKICAgICAgICAgICAgICAobWVzc2FnZSAiJVMgPD0gYCVzJyIgcmVzdWx0 IGV4cHJzdHJpbmcpCiAgICAgICAgICAgIChtZXNzYWdlICJgJXMnIGlzIG5vdCBkZWZpbmVkIiBl eHByc3RyaW5nKSkpCiAgICAgICAgICgoaW50ZWdlcnAgcmVzdWx0KQogICAgICAgICAgKGlmIChv ciAoPSAwIHJlc3VsdCkgKD0gMSByZXN1bHQpKQogICAgICAgICAgICAgIChtZXNzYWdlICIlUyA8 PSBgJXMnIiByZXN1bHQgZXhwcnN0cmluZykKICAgICAgICAgICAgKG1lc3NhZ2UgIiVTICgweCV4 KSA8PSBgJXMnIiByZXN1bHQgcmVzdWx0IGV4cHJzdHJpbmcpKSkKICAgICAgICAgKChudWxsIHJl c3VsdCkgKG1lc3NhZ2UgIiVTIDw9IGAlcyciICdmYWxzZSBleHByc3RyaW5nKSkKICAgICAgICAg KChlcSB0IHJlc3VsdCkgKG1lc3NhZ2UgIiVTIDw9IGAlcyciICd0cnVlIGV4cHJzdHJpbmcpKQog ICAgICAgICAodCAobWVzc2FnZSAiJVMgPD0gYCVzJyIgcmVzdWx0IGV4cHJzdHJpbmcpKSkKICAg ICAgICByZXN1bHQpKSkpCgooZGVmdW4gaGlmLXBhcnNlLW1hY3JvLWFyZ2xpc3QgKHN0cikKICAi UGFyc2UgYXJndW1lbnQgbGlzdCBmb3JtYXR0ZWQgYXMgJyggYXJnMSBbICwgYXJnbl0gWy4uLl0g KScsIGluY2x1ZGVpbmcgdGhlICcuLi4nClJldHVybiBhIGxpc3Qgb2YgdGhlIGFyZ3VtZW50cywg aWYgJy4uLicgZXhpc3RzIHRoZSBmaXJzdCBhcmcgd2lsbCBiZSBoaWYtZXRjLiIKICAobGV0ICgo dG9rZW5saXN0IChjZHIgKGhpZi10b2tlbml6ZSAoLSAocG9pbnQpIChsZW5ndGggc3RyKSkgKHBv aW50KSkpKSA7IHJlbW92ZSBoaWYtbHBhcmVuCiAgICAgICAgcmVzdWx0IHRva2VuKQogICAgKHdo aWxlIChub3QgKGVxIChzZXRxIHRva2VuIChjYXIgdG9rZW5saXN0KSkgJ2hpZi1ycGFyZW4pKQog ICAgICAoc2V0cSB0b2tlbmxpc3QgKGNkciB0b2tlbmxpc3QpKQogICAgICAoY29uZAogICAgICAg KChlcSB0b2tlbiAnaGlmLWV0YykKICAgICAgICAoc2V0cSByZXN1bHQgKGNvbnMgJ2hpZi1ldGMg cmVzdWx0KSkpCiAgICAgICAoKGVxIHRva2VuICdoaWYtY29tbWEpCiAgICAgICAgdCkKICAgICAg ICh0CiAgICAgICAgKHNldHEgcmVzdWx0IChhcHBlbmQgcmVzdWx0IChjb25zIHRva2VuIG5pbCkp KSkpKQogICAgcmVzdWx0KSkKCihkZWZ1biBoaWYtZmluZC1kZWZpbmUgKCZvcHRpb25hbCBtaW4g bWF4KQogIChpbnRlcmFjdGl2ZSkKICAoYW5kIG1pbiAoZ290by1jaGFyIG1pbikpCiAgKGFuZCAo cmUtc2VhcmNoLWZvcndhcmQgaGlmLWRlZmluZSBtYXggdCkKICAgICAgIChvcgogICAgICAgIChs ZXQqICgoZGVmaW5pbmcgKHN0cmluZz0gImRlZmluZSIgKG1hdGNoLXN0cmluZyAyKSkpCiAgICAg ICAgICAgICAgIChuYW1lIChhbmQgKHJlLXNlYXJjaC1mb3J3YXJkIGhpZi1tYWNyb25hbWUgbWF4 IHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoLXN0cmluZyAxKSkpCiAgICAgICAg ICAgICAgIChwYXJzZWQgbmlsKQogICAgICAgICAgICAgICAocGFybWxpc3QgKGFuZCAobWF0Y2gt c3RyaW5nIDMpIDs7IGZpcnN0IGFyZyBpZCBmb3VuZAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoaGlmLXBhcnNlLW1hY3JvLWFyZ2xpc3QgKG1hdGNoLXN0cmluZyAyKSkpKSkKICAgICAg ICAgIChpZiBkZWZpbmluZwogICAgICAgICAgICAgIDs7IGlnbm9yZSBuYW1lIChzdGlsbCBuZWVk IHRvIHJldHVybiAndCksIG9yIGRlZmluZSB0aGUgbmFtZQogICAgICAgICAgICAgIChvciAoYW5k IGhpZGUtaWZkZWYtZXhjbHVkZS1kZWZpbmUtcmVnZXhwLXBhdHRlcm4KICAgICAgICAgICAgICAg ICAgICAgICAoc3RyaW5nLW1hdGNoIGhpZGUtaWZkZWYtZXhjbHVkZS1kZWZpbmUtcmVnZXhwLXBh dHRlcm4gbmFtZSkpCgogICAgICAgICAgICAgICAgICAobGV0KiAoKHN0YXJ0IChwb2ludCkpCiAg ICAgICAgICAgICAgICAgICAgICAgICAoZW5kICAgKHByb2duIChoaWYtZW5kLW9mLWxpbmUpIChw b2ludCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgKHRva2VucyAoYW5kIG5hbWUKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uZGl0aW9uLWNhc2UgbmlsIDs7IHBy ZXZlbnQgQyBzdGF0ZW1lbnQgdGhpbmdzIGxpa2UgJ2RvIHsgLi4uIH0gd2hpbGUgKDApJwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGlmLXRva2VuaXplIHN0YXJ0 IGVuZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvciA7OyB3 ZSBjYW4ndCBqdXN0IHJldHVybiBuaWwgc2luY2UgdGhpcyB3aWxsIHN0b3Agc2VhcmNoaW5nIGZv ciB0aGUgcmVtYWluaW5nICNkZWZpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChzZXRxIGhpZi1zaW1wbGUtdG9rZW4tb25seSB0KQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChidWZmZXItc3Vic3RyaW5nLW5vLXByb3BlcnRpZXMg c3RhcnQgZW5kKSkpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIDs7IEZvciBzaW1wbGUgdG9r ZW4gd2Ugc2F2ZSBvbmx5IHRoZSBwYXJzZWQgcmVzdWx0OwogICAgICAgICAgICAgICAgICAgICAg ICAgOzsgb3Igd2Ugc2F2ZSB0aGUgdG9rZW5zLCBwYXJzZSBpdCBhZnRlciBwYXJhbWV0ZXIgcmVw bGFjZW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgIChleHByIChhbmQgdG9rZW5zCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvciAoYW5kIGhpZi1zaW1wbGUtdG9rZW4t b25seQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGlzdHAg dG9rZW5zKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPSAo bGVuZ3RoIHRva2VucykgMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGhpZi1wYXJzZS1pZi1leHAgdG9rZW5zKSkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGAoaGlmLWRlZmluZS1tYWNybyAscGFybWxpc3QgLHRva2VucykpKSkK ICAgICAgICAgICAgICAgICAgICAgICAgIChTQSAoYW5kIG5hbWUKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChhc3NvYyAoaW50ZXJuIG5hbWUpIGhpZGUtaWZkZWYtZW52KSkpKQog ICAgICAgICAgICAgICAgICAgIChhbmQgbmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgKGlm IFNBCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9yIChzZXRjZHIgU0EgZXhwcikgdCkg OzsgTGF6eSBldmFsdWF0aW9uLCBldmFsIG9ubHkgaWYgaGlmLWxvb2t1cCBmaW5kIGl0CiAgICAg ICAgICAgICAgICAgICAgICAgICAgIDs7IGRlZmluZSBpdCBhbnl3YXksIGV2ZW4gaWYgbmlsIGl0 J3Mgc3RpbGwgaW4gbGlzdCBhbmQgdGhlcmVmb3JlIGNvbnNpZGVycmVkIGRlZmluZWQKICAgICAg ICAgICAgICAgICAgICAgICAgICAgKHB1c2ggKGNvbnMgKGludGVybiBuYW1lKSBleHByKSBoaWRl LWlmZGVmLWVudikpKSkpCiAgICAgICAgICAgIDs7ICN1bmRlZgogICAgICAgICAgICAoYW5kIG5h bWUKICAgICAgICAgICAgICAgICAoaGlmLXVuZGVmaW5lLXN5bWJvbCAoaW50ZXJuIG5hbWUpKSkp KSkKICAgICAgIHQpKQoKKGRlZnVuIGhpZi1hZGQtbmV3LWRlZmluZXMgKCZvcHRpb25hbCBtaW4g bWF4KQogICJTY2FuIGFuZCBhZGQgYWxsICNkZWZpbmUgbWFjcm9zIGJldHdlZW4gbWluIC4uIG1h eCIKICAoaW50ZXJhY3RpdmUpCiAgKHdoaWxlIChoaWYtZmluZC1kZWZpbmUgbWluIG1heCkKICAg IChzZXRmIG1pbiAocG9pbnQpKSkKICAoaWYgbWF4IChnb3RvLWNoYXIgbWF4KQogICAgKGdvdG8t Y2hhciAocG9pbnQtbWF4KSkpKQoKOzsoZGVmdW4gbWFyay1yZWdpb24gKG1pbiBtYXgpCjs7ICAo c2V0LW1hcmsgKG9yIG1heCAocG9pbnQtbWF4KSkpCjs7ICAoZ290by1jaGFyIG1pbikpCgooZGVm dW4gaGlkZS1pZmRlZi1ndXRzICgpCiAgIkRvZXMgbW9zdCBvZiB0aGUgd29yayBvZiBgaGlkZS1p ZmRlZnMnLgpJdCBkb2VzIG5vdCBkbyB0aGUgd29yayB0aGF0J3MgcG9pbnRsZXNzIHRvIHJlZG8g b24gYSByZWN1cnNpdmUgZW50cnkuIgogIDs7IChtZXNzYWdlICJoaWRlLWlmZGVmLWd1dHMiKQog IChzYXZlLWV4Y3Vyc2lvbgogICAgKGxldCAoKGNhc2UtZm9sZC1zZWFyY2ggbmlsKQogICAgICAg ICAgbWluIG1heCkKICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKICAgICAgKHNldGYgbWlu IChwb2ludCkpCiAgICAgIChsb29wIGRvCiAgICAgICAgICAgIChzZXRmIG1heCAoaGlmLWZpbmQt YW55LWlmWCkpCiAgICAgICAgICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAgICAgICAgIChzYXZl LXJlc3RyaWN0aW9uCiAgICAgICAgICAgICAgICA7OyAobWFyay1yZWdpb24gbWluIG1heCkgOzsg Zm9yIGRlYnVnZ2luZwogICAgICAgICAgICAgICAgKGhpZi1hZGQtbmV3LWRlZmluZXMgbWluIG1h eCkpKQogICAgICAgICAgICAoaWYgbWF4CiAgICAgICAgICAgICAgICAoaGlmLXBvc3NpYmx5LWhp ZGUpKQogICAgICAgICAgICAoc2V0ZiBtaW4gKHBvaW50KSkKICAgICAgICAgICAgd2hpbGUgbWF4 KSkpKQoKOzs9PT0lJVNGJSUgaGlkZS1pZmRlZi1oaWRpbmcgKEVuZCkgID09PQoKOzs9PT0lJVNG JSUgZXhwb3J0cyAoU3RhcnQpICA9PT0KCihkZWZ1biBoaWRlLWlmZGVmLXRvZ2dsZS1yZWFkLW9u bHkgKCkKICAiVG9nZ2xlIGBoaWRlLWlmZGVmLXJlYWQtb25seScuIgogIChpbnRlcmFjdGl2ZSkK ICAoc2V0cSBoaWRlLWlmZGVmLXJlYWQtb25seSAobm90IGhpZGUtaWZkZWYtcmVhZC1vbmx5KSkK ICAobWVzc2FnZSAiSGlkZS1SZWFkLU9ubHkgJXMiCiAgICAgICAgICAgKGlmIGhpZGUtaWZkZWYt cmVhZC1vbmx5ICJPTiIgIk9GRiIpKQogIChpZiBoaWRlLWlmZGVmLWhpZGluZwogICAgICAoc2V0 cSBidWZmZXItcmVhZC1vbmx5IChvciBoaWRlLWlmZGVmLXJlYWQtb25seSBoaWYtb3V0c2lkZS1y ZWFkLW9ubHkpKSkKICAoZm9yY2UtbW9kZS1saW5lLXVwZGF0ZSkpCgooZGVmdW4gaGlkZS1pZmRl Zi10b2dnbGUtb3V0c2lkZS1yZWFkLW9ubHkgKCkKICAiUmVwbGFjZW1lbnQgZm9yIGB0b2dnbGUt cmVhZC1vbmx5JyB3aXRoaW4gSGlkZS1JZmRlZiBtb2RlLiIKICAoaW50ZXJhY3RpdmUpCiAgKHNl dHEgaGlmLW91dHNpZGUtcmVhZC1vbmx5IChub3QgaGlmLW91dHNpZGUtcmVhZC1vbmx5KSkKICAo bWVzc2FnZSAiUmVhZCBvbmx5ICVzIgogICAgICAgICAgIChpZiBoaWYtb3V0c2lkZS1yZWFkLW9u bHkgIk9OIiAiT0ZGIikpCiAgKHNldHEgYnVmZmVyLXJlYWQtb25seQogICAgICAgIChvciAoYW5k IGhpZGUtaWZkZWYtaGlkaW5nIGhpZGUtaWZkZWYtcmVhZC1vbmx5KQogICAgICAgICAgICBoaWYt b3V0c2lkZS1yZWFkLW9ubHkpKQogIChmb3JjZS1tb2RlLWxpbmUtdXBkYXRlKSkKCihkZWZ1biBo aWRlLWlmZGVmLXRvZ2dsZS1zaGFkb3dpbmcgKCkKICAiVG9nZ2xlIHNoYWRvd2luZy4iCiAgKGlu dGVyYWN0aXZlKQogIChzZXQgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2hpZGUtaWZkZWYtc2hhZG93 KSAobm90IGhpZGUtaWZkZWYtc2hhZG93KSkKICAobWVzc2FnZSAiU2hhZG93aW5nICVzIiAoaWYg aGlkZS1pZmRlZi1zaGFkb3cgIk9OIiAiT0ZGIikpCiAgKHNhdmUtcmVzdHJpY3Rpb24KICAgICh3 aWRlbikKICAgIChkb2xpc3QgKG92ZXJsYXkgKG92ZXJsYXlzLWluIChwb2ludC1taW4pIChwb2lu dC1tYXgpKSkKICAgICAgKHdoZW4gKG92ZXJsYXktZ2V0IG92ZXJsYXkgJ2hpZGUtaWZkZWYpCiAg ICAgICAgKGlmIGhpZGUtaWZkZWYtc2hhZG93CiAgICAgICAgICAgIChwcm9nbgogICAgICAgICAg ICAgIChvdmVybGF5LXB1dCBvdmVybGF5ICdpbnZpc2libGUgbmlsKQogICAgICAgICAgICAgIChv dmVybGF5LXB1dCBvdmVybGF5ICdmYWNlICdoaWRlLWlmZGVmLXNoYWRvdykpCiAgICAgICAgICAo b3ZlcmxheS1wdXQgb3ZlcmxheSAnZmFjZSBuaWwpCiAgICAgICAgICAob3ZlcmxheS1wdXQgb3Zl cmxheSAnaW52aXNpYmxlICdoaWRlLWlmZGVmKSkpKSkpCgooZGVmdW4gaGlkZS1pZmRlZi1kZWZp bmUgKHZhciB2YWwpCiAgIkRlZmluZSBhIFZBUiwgb3B0aW9uYWxseSB0byBhIHNwZWNpZmljIHZh bHVlLCBzbyB0aGF0ICNpZmRlZiBWQVIKd291bGQgYmUgaW5jbHVkZWQuIgogIChpbnRlcmFjdGl2 ZQogICAobGV0KiAoKGRlZmF1bHQgKHNhdmUtZXhjdXJzaW9uCiAgICAgICAgICAgICAgICAgICAg IChiZWdpbm5pbmctb2YtbGluZSkKICAgICAgICAgICAgICAgICAgICAgKGNvbmQgKChsb29raW5n LWF0IGhpZi1pZngtZWxzZS1lbmRpZi1yZWdleHApCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoZm9yd2FyZC13b3JkIDIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3VycmVudC13 b3JkICdzdHJpY3QpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAodAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgbmlsKSkpKQogICAgICAgICAodmFyIChyZWFkLW1pbmlidWZmZXIgIkRl ZmluZSB3aGF0PyAiIGRlZmF1bHQpKQogICAgICAgICAodmFsIChyZWFkLWZyb20tbWluaWJ1ZmZl ciAoZm9ybWF0ICJTZXQgJXMgdG8/IChkZWZhdWx0IDEpOiAiIHZhcikKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbmlsIG5pbCB0IG5pbCAiMSIpKSkKICAgICAobGlzdCB2YXIg dmFsKSkpCiAgIChoaWYtc2V0LXZhciB2YXIgKG9yIHZhbCAxKSkKICAgKG1lc3NhZ2UgIiVzIHNl dCB0byAlcyIgdmFyIChvciB2YWwgMSkpCiAgIChzbGVlcC1mb3IgMSkKICAgKGlmIGhpZGUtaWZk ZWYtaGlkaW5nIChoaWRlLWlmZGVmcykpKQoKKGRlZnVuIGhpZi11bmRlZmluZS1zeW1ib2wgKHZh cikKICAoc2V0cSBoaWRlLWlmZGVmLWVudgogICAgICAgIChkZWxldGUgKGFzc29jIHZhciBoaWRl LWlmZGVmLWVudikgaGlkZS1pZmRlZi1lbnYpKSkKCjs7KGRlZnVuIGhpZGUtaWZkZWYtdW5kZWYg KHZhcikKOzsgICJVbmRlZmluZSBhIFZBUiBzbyB0aGF0ICNpZmRlZiBWQVIgd291bGQgbm90IGJl IGluY2x1ZGVkLiIKOzsgIChpbnRlcmFjdGl2ZSAiU1VuZGVmaW5lIHdoYXQ/ICIpCjs7ICA7Oyho aWYtc2V0LXZhciB2YXIgbmlsKTs7THVrZSBmaXhlZDogc2V0IGl0IG5pbCBpcyBzdGlsbCBjb25z aWRlcmVkIGRlZmluZWQgc28gI2lmZGVmIFZBUiBpcyBzdGlsbCB0cnVlLgo7OyAgKGhpZi11bmRl ZmluZS1zeW1ib2wgdmFyKQo7OyAgKGlmIGhpZGUtaWZkZWYtaGlkaW5nIChoaWRlLWlmZGVmcykp KQoKKGRlZnVuIGhpZGUtaWZkZWYtdW5kZWYgKHN0YXJ0IGVuZCkKICAiVW5kZWZpbmUgYSBWQVIg c28gdGhhdCAjaWZkZWYgVkFSIHdvdWxkIG5vdCBiZSBpbmNsdWRlZC4iCiAgKGludGVyYWN0aXZl ICJyIikKICAobGV0KiAoKHN5bXN0cgogICAgICAgICAgKG9yIChhbmQgbWFyay1hY3RpdmUKICAg ICAgICAgICAgICAgICAgIChidWZmZXItc3Vic3RyaW5nLW5vLXByb3BlcnRpZXMgc3RhcnQgZW5k KSkKICAgICAgICAgICAgICAocmVhZC1zdHJpbmcgIlVuZGVmaW5lIHdoYXQ/ICIgKGN1cnJlbnQt d29yZCkpKSkKICAgICAgICAgKHN5bSAoYW5kIHN5bXN0cgogICAgICAgICAgICAgICAgICAgKGlu dGVybiBzeW1zdHIpKSkpCiAgICAoaWYgKHplcm9wIChoaWYtZGVmaW5lZCBzeW0pKQogICAgICAg IChtZXNzYWdlICJgJXMnIG5vdCBkZWZpbmVkLCBubyBuZWVkIHRvIHVuZGVmaW5lIGl0IiBzeW1z dHIpCiAgICAgIChoaWYtdW5kZWZpbmUtc3ltYm9sIHN5bSkKICAgICAgKGlmIGhpZGUtaWZkZWYt aGlkaW5nIChoaWRlLWlmZGVmcykpCiAgICAgIChtZXNzYWdlICJgJVMnIHVuZGVmaW5lZCIgc3lt KSkpKQoKKGRlZnVuIGhpZGUtaWZkZWZzICgmb3B0aW9uYWwgbm9tc2cpCiAgIkhpZGUgdGhlIGNv bnRlbnRzIG9mIHNvbWUgI2lmZGVmcy4KQXNzdW1lIHRoYXQgZGVmaW5lZCBzeW1ib2xzIGhhdmUg YmVlbiBhZGRlZCB0byBgaGlkZS1pZmRlZi1lbnYnLgpUaGUgdGV4dCBoaWRkZW4gaXMgdGhlIHRl eHQgdGhhdCB3b3VsZCBub3QgYmUgaW5jbHVkZWQgYnkgdGhlIEMKcHJlcHJvY2Vzc29yIGlmIGl0 IHdlcmUgZ2l2ZW4gdGhlIGZpbGUgd2l0aCB0aG9zZSBzeW1ib2xzIGRlZmluZWQuCklmIHRoaXMg Y29tbWFuZCBpcyBwcmVmaXhlZCwgaGlkZSBhbHNvIHRoZSAjaWZkZWZzIHRoZW1zZWx2ZXMuCgpU dXJuIG9mZiBoaWRpbmcgYnkgY2FsbGluZyBgc2hvdy1pZmRlZnMnLiIKCiAgKGludGVyYWN0aXZl KQogIChsZXQgKChoaWRlLWlmZGVmLWxpbmVzIGN1cnJlbnQtcHJlZml4LWFyZykpCiAgICAob3Ig bm9tc2cKICAgICAgICAobWVzc2FnZSAiSGlkaW5nLi4uIikpCiAgICAoc2V0cSBoaWYtb3V0c2lk ZS1yZWFkLW9ubHkgYnVmZmVyLXJlYWQtb25seSkKICAgICh1bmxlc3MgaGlkZS1pZmRlZi1tb2Rl IChoaWRlLWlmZGVmLW1vZGUgMSkpIDsgdHVybiBvbiBoaWRlLWlmZGVmLW1vZGUKICAgIChpZiBo aWRlLWlmZGVmLWhpZGluZwogICAgICAgIChzaG93LWlmZGVmcykpICAgICAgICAgICAgICAgICAg ICA7IE90aGVyd2lzZSwgZGVlcCBjb25mdXNpb24uCiAgICAoc2V0cSBoaWRlLWlmZGVmLWhpZGlu ZyB0KQogICAgKGhpZGUtaWZkZWYtZ3V0cykKICAgIChzZXRxIGJ1ZmZlci1yZWFkLW9ubHkgKG9y IGhpZGUtaWZkZWYtcmVhZC1vbmx5IGhpZi1vdXRzaWRlLXJlYWQtb25seSkpCiAgICAob3Igbm9t c2cKICAgICAgICAobWVzc2FnZSAiSGlkaW5nIGRvbmUiKSkpKQoKCihkZWZ1biBzaG93LWlmZGVm cyAoKQogICJDYW5jZWwgdGhlIGVmZmVjdHMgb2YgYGhpZGUtaWZkZWYnOiBzaG93IHRoZSBjb250 ZW50cyBvZiBhbGwgI2lmZGVmcy4iCiAgKGludGVyYWN0aXZlKQogIChzZXRxIGJ1ZmZlci1yZWFk LW9ubHkgaGlmLW91dHNpZGUtcmVhZC1vbmx5KQogIChoaWYtc2hvdy1hbGwpCiAgKHNldHEgaGlk ZS1pZmRlZi1oaWRpbmcgbmlsKSkKCgooZGVmdW4gaGlmLWZpbmQtaWZkZWYtYmxvY2sgKCkKICAi VXRpbGl0eSBmb3IgaGlkZSBhbmQgc2hvdyBgaWZkZWYtYmxvY2snLgpSZXR1cm4gYXMgKFRPUCAu IEJPVFRPTSkgdGhlIGV4dGVudCBvZiBpZmRlZiBibG9jay4iCiAgKGlmIChhbmQgKGZib3VuZHAg J2MtYmFja3dhcmQtY29uZGl0aW9uYWwtd2l0aC1lbHNlKQogICAgICAgICAgIChmYm91bmRwICdj LWZvcndhcmQtY29uZGl0aW9uYWwtd2l0aC1lbHNlKSkKICAgICAgOztVc2UgbXkgbW9kaWZpZWQg ZnVuY3Rpb25zIGluIGNjLW1vZGUuCiAgICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAgIChjb25z CiAgICAgICAgIChwcm9nbgogICAgICAgICAgIChpZiAoPSAobGluZS1udW1iZXItYXQtcG9zKQog ICAgICAgICAgICAgICAgICAoc2F2ZS1leGN1cnNpb24KICAgICAgICAgICAgICAgICAgICAoYmVn aW5uaW5nLW9mLWxpbmUpCiAgICAgICAgICAgICAgICAgICAgKHJlLXNlYXJjaC1mb3J3YXJkIGhp Zi1pZngtZWxzZS1lbmRpZi1yZWdleHApCiAgICAgICAgICAgICAgICAgICAgKGxpbmUtbnVtYmVy LWF0LXBvcykpKQogICAgICAgICAgICAgICAoYmVnaW5uaW5nLW9mLWxpbmUpCiAgICAgICAgICAg ICAoYy1iYWNrd2FyZC1jb25kaXRpb25hbC13aXRoLWVsc2UgMSkpCiAgICAgICAgICAgKHBvaW50 KSkKICAgICAgICAgKHByb2duIChjLWZvcndhcmQtY29uZGl0aW9uYWwtd2l0aC1lbHNlIDEpICgx LSAocG9pbnQpKSkpKQogICAgOzsgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24gaW4gaGlkZWlmLmVs CiAgICAobGV0IChtYXgtYm90dG9tKQogICAgICAoY29ucyAoc2F2ZS1leGN1cnNpb24KICAgICAg ICAgICAgICAoYmVnaW5uaW5nLW9mLWxpbmUpCiAgICAgICAgICAgICAgKHVubGVzcyAob3IgKGhp Zi1sb29raW5nLWF0LWVsc2UpIChoaWYtbG9va2luZy1hdC1pZlgpKQogICAgICAgICAgICAgICAg KHVwLWlmZGVmKSkKICAgICAgICAgICAgICAocHJvZzEgKHBvaW50KQogICAgICAgICAgICAgICAg KGhpZi1pZmRlZi10by1lbmRpZikKICAgICAgICAgICAgICAgIChzZXRxIG1heC1ib3R0b20gKDEt IChwb2ludCkpKSkpCiAgICAgICAgICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAgICAgICAgIChi ZWdpbm5pbmctb2YtbGluZSkKICAgICAgICAgICAgICAodW5sZXNzIChoaWYtbG9va2luZy1hdC1l bmRpZikKICAgICAgICAgICAgICAgIChoaWYtZmluZC1uZXh0LXJlbGV2YW50KSkKICAgICAgICAg ICAgICAod2hpbGUgKGhpZi1sb29raW5nLWF0LWlmWCkKICAgICAgICAgICAgICAgIChoaWYtaWZk ZWYtdG8tZW5kaWYpCiAgICAgICAgICAgICAgICAoaGlmLWZpbmQtbmV4dC1yZWxldmFudCkpCiAg ICAgICAgICAgICAgKG1pbiBtYXgtYm90dG9tICgxLSAocG9pbnQpKSkpKSkpKQoKKGRlZnVuIGhp ZGUtaWZkZWYtYmxvY2sgKCZvcHRpb25hbCBzdGFydCBlbmQpCiAgIkhpZGUgdGhlIGlmZGVmIGJs b2NrICh0cnVlIG9yIGZhbHNlIHBhcnQpIGVuY2xvc2luZyBvciBiZWZvcmUgdGhlIGN1cnNvci4K SWYgcHJlZml4ZWQsIGl0IHdpbGwgYWxzbyBoaWRlICNpZmRlZnMgdGhlbXNlbHZlcy4iCiAgKGlu dGVyYWN0aXZlICJyIikKICAobGV0ICgoaGlkZS1pZmRlZi1saW5lcyBjdXJyZW50LXByZWZpeC1h cmcpKQogICAgKGlmIG1hcmstYWN0aXZlCiAgICAgICAgKHByb2duCiAgICAgICAgICAoaGlmLXJl Y3Vyc2Utb24gc3RhcnQgZW5kIHQpCiAgICAgICAgICAoc2V0cSBtYXJrLWFjdGl2ZSBuaWwpKQog ICAgICAodW5sZXNzIGhpZGUtaWZkZWYtbW9kZSAoaGlkZS1pZmRlZi1tb2RlIDEpKQogICAgICAo bGV0ICgodG9wLWJvdHRvbSAoaGlmLWZpbmQtaWZkZWYtYmxvY2spKSkKICAgICAgICAoaGlkZS1p ZmRlZi1yZWdpb24gKGNhciB0b3AtYm90dG9tKSAoY2RyIHRvcC1ib3R0b20pKQogICAgICAgICh3 aGVuIGhpZGUtaWZkZWYtbGluZXMKICAgICAgICAgIChoaWYtaGlkZS1saW5lIChjYXIgdG9wLWJv dHRvbSkpCiAgICAgICAgICAoaGlmLWhpZGUtbGluZSAoMSsgKGNkciB0b3AtYm90dG9tKSkpKQog ICAgICAgIChzZXRxIGhpZGUtaWZkZWYtaGlkaW5nIHQpKQogICAgICAoc2V0cSBidWZmZXItcmVh ZC1vbmx5IChvciBoaWRlLWlmZGVmLXJlYWQtb25seSBoaWYtb3V0c2lkZS1yZWFkLW9ubHkpKSkp KQoKKGRlZnVuIHNob3ctaWZkZWYtYmxvY2sgKCZvcHRpb25hbCBzdGFydCBlbmQpCiAgIlNob3cg dGhlIGlmZGVmIGJsb2NrICh0cnVlIG9yIGZhbHNlIHBhcnQpIGVuY2xvc2luZyBvciBiZWZvcmUg dGhlIGN1cnNvci4iCiAgKGludGVyYWN0aXZlICJyIikKICAoaWYgbWFyay1hY3RpdmUKICAgICAg KHByb2duCiAgICAgICAgKGRvbGlzdCAobyAob3ZlcmxheXMtaW4gc3RhcnQgZW5kKSkKICAgICAg ICAgIChpZiAob3ZlcmxheS1nZXQgbyAnaGlkZS1pZmRlZikKICAgICAgICAgICAgICAoZGVsZXRl LW92ZXJsYXkgbykpKQogICAgICAgIChzZXRxIG1hcmstYWN0aXZlIG5pbCkpCiAgICAobGV0ICgo dG9wLWJvdHRvbSAoY29uZGl0aW9uLWNhc2UgbmlsCiAgICAgICAgICAgICAgICAgICAgICAgICAg KGhpZi1maW5kLWlmZGVmLWJsb2NrKQogICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IKICAg ICAgICAgICAgICAgICAgICAgICAgIG5pbCkpKQogICAgICAgICAgKG92cnMgKG92ZXJsYXlzLWlu IChtYXggKHBvaW50LW1pbikgKDEtIChwb2ludCkpKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChtaW4gKHBvaW50LW1heCkgKDErIChwb2ludCkpKSkpCiAgICAgICAgICAoZGVsIG5pbCkp CiAgICAgIChpZiB0b3AtYm90dG9tCiAgICAgICAgICAoaWYgaGlkZS1pZmRlZi1saW5lcwogICAg ICAgICAgICAgIChoaWYtc2hvdy1pZmRlZi1yZWdpb24KICAgICAgICAgICAgICAgKHNhdmUtZXhj dXJzaW9uCiAgICAgICAgICAgICAgICAgKGdvdG8tY2hhciAoY2FyIHRvcC1ib3R0b20pKSAobGlu ZS1iZWdpbm5pbmctcG9zaXRpb24pKQogICAgICAgICAgICAgICAoc2F2ZS1leGN1cnNpb24KICAg ICAgICAgICAgICAgICAoZ290by1jaGFyICgxKyAoY2RyIHRvcC1ib3R0b20pKSkKICAgICAgICAg ICAgICAgICAoaGlmLWVuZC1vZi1saW5lKSAocG9pbnQpKSkKICAgICAgICAgICAgKHNldGYgZGVs IChoaWYtc2hvdy1pZmRlZi1yZWdpb24gKDEtIChjYXIgdG9wLWJvdHRvbSkpIChjZHIgdG9wLWJv dHRvbSkpKSkpCiAgICAgIChpZiAobm90IChhbmQgdG9wLWJvdHRvbQogICAgICAgICAgICAgICAg ICAgIGRlbCkpCiAgICAgICAgICAoZG9saXN0IChvIG92cnMpCiAgICAgICAgICAgIDs7KGRvbGlz dCAobyAob3ZlcmxheXMtaW4gKDEtIChwb2ludCkpICgxKyAocG9pbnQpKSkpCiAgICAgICAgICAg IDs7ICAgKGlmIChvdmVybGF5LWdldCBvICdoaWRlLWlmZGVmKSAobWVzc2FnZSAiJVMiIG8pKSkK ICAgICAgICAgICAgKGlmIChvdmVybGF5LWdldCBvICdoaWRlLWlmZGVmKQogICAgICAgICAgICAg ICAgKGRlbGV0ZS1vdmVybGF5IG8pKSkpKSkpCgo7OzsgIGRlZmluaXRpb24gYWxpc3Qgc3VwcG9y dAoKKGRlZnZhciBoaWRlLWlmZGVmLWRlZmluZS1hbGlzdCBuaWwKICAiQSBnbG9iYWwgYXNzb2Mg bGlzdCBvZiBwcmUtZGVmaW5lZCBzeW1ib2wgbGlzdHMuIikKCihkZWZ1biBoaWYtY29tcHJlc3Mt ZGVmaW5lLWxpc3QgKGVudikKICAiQ29tcHJlc3MgdGhlIGRlZmluZSBsaXN0IEVOViBpbnRvIGEg bGlzdCBvZiBkZWZpbmVkIHN5bWJvbHMgb25seS4iCiAgKGxldCAoKG5ldy1kZWZzIG5pbCkpCiAg ICAoZG9saXN0IChkZWYgZW52IG5ldy1kZWZzKQogICAgICAoaWYgKGhpZi1sb29rdXAgKGNhciBk ZWYpKSAocHVzaCAoY2FyIGRlZikgbmV3LWRlZnMpKSkpKQoKKGRlZnVuIGhpZGUtaWZkZWYtc2V0 LWRlZmluZS1hbGlzdCAobmFtZSkKICAiU2V0IHRoZSBhc3NvY2lhdGlvbiBmb3IgTkFNRSB0byBg aGlkZS1pZmRlZi1lbnYnLiIKICAoaW50ZXJhY3RpdmUgIlNTZXQgZGVmaW5lIGxpc3Q6ICIpCiAg KHB1c2ggKGNvbnMgbmFtZSAoaGlmLWNvbXByZXNzLWRlZmluZS1saXN0IGhpZGUtaWZkZWYtZW52 KSkKICAgICAgICBoaWRlLWlmZGVmLWRlZmluZS1hbGlzdCkpCgooZGVmdW4gaGlkZS1pZmRlZi11 c2UtZGVmaW5lLWFsaXN0IChuYW1lKQogICJTZXQgYGhpZGUtaWZkZWYtZW52JyB0byB0aGUgZGVm aW5lIGxpc3Qgc3BlY2lmaWVkIGJ5IE5BTUUuIgogIChpbnRlcmFjdGl2ZQogICAobGlzdCAoY29t cGxldGluZy1yZWFkICJVc2UgZGVmaW5lIGxpc3Q6ICIKICAgICAgICAgICAgICAgICAgICAgICAg ICAobWFwY2FyIChsYW1iZGEgKHgpIChzeW1ib2wtbmFtZSAoY2FyIHgpKSkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGhpZGUtaWZkZWYtZGVmaW5lLWFsaXN0KQogICAgICAgICAg ICAgICAgICAgICAgICAgIG5pbCB0KSkpCiAgKGlmIChzdHJpbmdwIG5hbWUpIChzZXRxIG5hbWUg KGludGVybiBuYW1lKSkpCiAgKGxldCAoKGRlZmluZS1saXN0IChhc3NvYyBuYW1lIGhpZGUtaWZk ZWYtZGVmaW5lLWFsaXN0KSkpCiAgICAoaWYgZGVmaW5lLWxpc3QKICAgICAgICAoc2V0cSBoaWRl LWlmZGVmLWVudgogICAgICAgICAgICAgIChtYXBjYXIgKGxhbWJkYSAoYXJnKSAoY29ucyBhcmcg dCkpCiAgICAgICAgICAgICAgICAgICAgICAoY2RyIGRlZmluZS1saXN0KSkpCiAgICAgIChlcnJv ciAiTm8gZGVmaW5lIGxpc3QgZm9yICVzIiBuYW1lKSkKICAgIChpZiBoaWRlLWlmZGVmLWhpZGlu ZyAoaGlkZS1pZmRlZnMpKSkpCgoocHJvdmlkZSAnaGlkZWlmKQoKOzsgTG9jYWwgdmFyaWFibGVz Ogo7OyBieXRlLWNvbXBpbGUtd2FybmluZ3M6IChub3QgY2wtZnVuY3Rpb25zKQo7OyBFbmQ6Cgo7 OzsgaGlkZWlmLmVsIGVuZHMgaGVyZQo= --001a11332dfc54384104eaa0bd72--