# glg_subscribe_comments v1.01 # Add a checkbox to the comment form that allow comment's author to be notified when a new comment is posted. # Grégory Le Garec # http://www.gregocentrique.net/local-technique/glg_subscribe_comments # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YToxMTp7czo0OiJuYW1lIjtzOjIyOiJnbGdfc3Vic2NyaWJlX2NvbW1lbnRzIjtzOjc6InZl cnNpb24iO3M6NDoiMS4wMSI7czo2OiJhdXRob3IiO3M6MTc6Ikdyw6lnb3J5IExlIEdhcmVj IjtzOjEwOiJhdXRob3JfdXJpIjtzOjY4OiJodHRwOi8vd3d3LmdyZWdvY2VudHJpcXVlLm5l dC9sb2NhbC10ZWNobmlxdWUvZ2xnX3N1YnNjcmliZV9jb21tZW50cyI7czoxMToiZGVzY3Jp cHRpb24iO3M6MTA3OiJBZGQgYSBjaGVja2JveCB0byB0aGUgY29tbWVudCBmb3JtIHRoYXQg YWxsb3cgY29tbWVudCdzIGF1dGhvciB0byBiZSBub3RpZmllZCB3aGVuIGEgbmV3IGNvbW1l bnQgaXMgcG9zdGVkLiI7czo0OiJ0eXBlIjtpOjE7czo1OiJvcmRlciI7aTo2O3M6NToiZmxh Z3MiO2k6MztzOjQ6ImhlbHAiO3M6NDgzNDoiCTxoMSBjbGFzcz0idGl0bGUiPmdsZ19zdWJz Y3JpYmVfY29tbWVudHMgSGVscDwvaDE+CgoJPGgyIGNsYXNzPSJzZWN0aW9uIj5NYW51YWw8 L2gyPgoKCTxwPk9uY2UgaW5zdGFsbGVkLCBUaGUgcGx1Z2luIHdvcmtzIGJ5IGl0c2VsZi4g QWN0aXZhdGUgaXQgYW5kIHlvdSB3aWxsIHNlZSBhIG5ldyBjaGVja2JveCBiZWxvdyB5b3Vy IGNvbW1lbnQmIzgyMTc7cyBtZXNzYWdlIGlucHV0cy48L3A+CgoJPHA+WW91ciB2aXNpdG9y cyBjYW4gdGhlbiBzdWJzY3JpYmUgdG8geW91ciBhcnRpY2xlcyBjb21tZW50cy4gVGhleSB3 aWxsIGJlIG5vdGlmaWVkIHkgZW1haWwgd2hlbiBhIG5ldyBjb21tZW50IGlzIHBvc3RlZCAo ZXhjZXB0IGJ5IHRoZWlyc2VsZikuIFRoZSBub3RpZmljYXRpb24gd2lsbCBjb250YWluIGEg bGluayB0byB1bnN1YnNjcmliZS48L3A+CgoJPGgyIGNsYXNzPSJzZWN0aW9uIj5QcmVmZXJl bmNlczwvaDI+CgoJPHA+WW91IGNhbiBzZXQgdGhlIGZvbGxvd2luZyBwcmVmZXJlbmNlcyA6 Cgk8dWw+CgkJPGxpPjxzdHJvbmc+QXV0b21hdGljYWxseSBhZGQgdGhlIGNoZWNrYm94PC9z dHJvbmc+ICg8ZW0+WWVzPC9lbT4gYnkgZGVmYXVsdCkgOiBZb3UgY2FuIGNob29zZSB0byBo aWRlIHRoZSBjaGVja2JveCBhbmQgY29uZmlndXJlIHlvdXIgb3duIGRpc3BsYXkgb24gdGhl IDxlbT5jb21tZW50X2Zvcm08L2VtPiBmb3JtLiBVc2UgdGhlIHBsdWdpbnMgdGFncyBwcmVz ZW50ZWQgaW4gdGhlICYjODIyMDtUYWdzJiM4MjIxOyBzZWN0aW9uLjwvbGk+CgkJPGxpPjxz dHJvbmc+Q2hlY2sgYnkgZGVmYXVsdDwvc3Ryb25nPiAoPGVtPk5vPC9lbT4gYnkgZGVmYXVs dCkgOiBTd2l0Y2ggdG8gPGVtPlllczwvZW0+IGlmIHlvdSBwcmVmZXIgdGhlIGNoZWNrYm94 IHRvIGJlIGNoZWNrZWQgYnkgZGVmYXVsdCB0aGUgZmlyc3QgdGltZSBhIHZpc2l0b3IgcG9z dCBhIGNvbW1lbnQuIFRoZSBmb2xsb3dpbmcgdGltZXMsIHRoZSBwbHVnaW4gd2lsbCByZW1l bWJlciB1c2VyJiM4MjE3O3MgY2hvaWNlLCBleGNlcHQgaWYgaGUgY2hvb3NlPGJyIC8+CnRv IGZvcmdldCB0aGUgaW5mb3JtYXRpb25zLjwvbGk+CgkJPGxpPjxzdHJvbmc+PGVtPkZyb208 L2VtPiBuYW1lPC9zdHJvbmc+IDogVGhlIGlkZW50aXR5IG9mIHRoZSBtYWlsZXIgaW4gdGhl IHNlbnQgbWFpbHMuIExlYXZlIGl0IGJsYW5rIHRvIHVzZSBkZWZhdWx0IHZhbHVlIChzaXRl IG5hbWUpLjwvbGk+CgkJPGxpPjxzdHJvbmc+PGVtPkZyb208L2VtPiBuYW1lPC9zdHJvbmc+ IDogVGhlIG1haWwgb2YgdGhlIG1haWxlciBpbiB0aGUgc2VudCBtYWlscy4gTGVhdmUgaXQg YmxhbmsgdG8gdXNlIGRlZmF1bHQgdmFsdWUgKDxlbT5zbXRwX2Zyb208L2VtPiBwYXJhbWV0 ZXIgaW4gPGVtPnBocC5pbmk8L2VtPikuPC9saT4KCQk8bGk+PHN0cm9uZz5NYWlsIHN1Ympl Y3QgcGF0dGVybjwvc3Ryb25nPiA6IFlvdSBjYW4gd3JpdGUgeW91ciBvd24gc3ViamVjdCwg dXNpbmcgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXIgOgoJPHVsPgoJCTxsaT57c2l0ZX0gOiBT aXRlIG5hbWUuPC9saT4KCQk8bGk+e2F1dGhvcn0gOiBBdXRob3Igb2YgdGhlIGNvbW1lbnQm IzgyMTc7cyBuYW1lLjwvbGk+CgkJPGxpPnt0aXRsZX0gOiBUaXRsZSBvZiB0aGUgYXJ0aWNs ZS4gTGVhdmUgaXQgYmxhbmsgdG8gdXNlIHRoZSBkZWZhdWx0IHZhbHVlIChlcXVhbCB0byB0 aGUgb3JpZ2luYWwgb25lKS48L2xpPgoJPC91bD48L2xpPgoJPC91bD48L3A+CgoJPGgyIGNs YXNzPSJzZWN0aW9uIj5UYWdzPC9oMj4KCgk8cD5JZiB5b3UgY2hvb3NlIHRvIG5vdCBhdXRv bWF0aWNhbGx5IGFkZCB0aGUgY2hlY2tib3ggdG8geW91ciBjb21tZW50IGZvcm1zLCB5b3Ug bWF5IHVzZSB0aGUgZm9sbG93aW5nIHRhZ3MgZm9yIGRpc3BsYXkuPC9wPgoKCTxoMyBjbGFz cz0idGFnIj48c3Bhbj5nbGdfc3Vic2NyaXB0aW9uX2NoZWNrYm94PC9zcGFuPjwvaDM+CgoJ PHAgY2xhc3M9InRhZy1zdW1tYXJ5Ij5EaXNwbGF5IHRoZSBzdWJzY3JpYmUgb3B0aW9uIGNo ZWNrYm94LiBUaGUgY2hlY2tib3ggZ2V0IHRoZSBpZCA8c3Bhbj5nbGdfc3Vic2NyaWJlX2No ZWNrYm94PC9zcGFuPi4gSGlkZGVuIHdoZW4gYSB2aXNpdG9yIHVuc3Vic2NyaWJlLjwvcD4K Cgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHRzLW5hbWUiPmRlZmF1bHQ8L3NwYW4+IDxz cGFuIGNsYXNzPSJhdHRzLXR5cGUiPjAgb3IgMTwvc3Bhbj4gU3BlY2lmeSBpZiB0aGUgY2hl Y2tib3ggaXMgY2hlY2tlZCBieSBkZWZhdWx0LiBCeXBhc3MgdGhlIHByZWZlcmVuY2UuPC9s aT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dHMtbmFtZSI+aWQ8L3NwYW4+IDxzcGFuIGNsYXNz PSJhdHRzLXR5cGUiPnN0cmluZzwvc3Bhbj4gU3BlY2lmeSBhbiBpZCBmb3IgdGhlIGNoZWNr Ym94IChkZWZhdXQgPHNwYW4+Z2xnX3N1YnNjcmlwdGlvbl9jaGVja2JveDwvc3Bhbj4pLjwv bGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHRzLW5hbWUiPmNsYXNzPC9zcGFuPiA8c3BhbiBj bGFzcz0iYXR0cy10eXBlIj5zdHJpbmc8L3NwYW4+IFNwZWNpZnkgYSBjbGFzcyBuYW1lIGZv ciB0aGUgY2hlY2tib3guPC9saT4KCTwvdWw+CgoJPGgzIGNsYXNzPSJ0YWciPjxzcGFuPmds Z19zdWJzY3JpYmVfY2hlY2tib3hfbGFiZWw8L3NwYW4+PC9oMz4KCgk8cCBjbGFzcz0idGFn LXN1bW1hcnkiPkRpc3BsYXkgdGhlIGxhYmVsIGZvciB0aGUgY2hlY2tib3guIFRoaXMgbGFi ZWwgY2hhbmdlIGlmIHRoZSB2aXNpdG9yIGhhcyBhbHJlYWR5IHN1YnNjcmliZWQgdG8gdGhl IGFydGljbGUmIzgyMTc7cyBjb21tZW50cy4gV29ya3Mgd2l0aCBhIGNvb2tpZS48L3A+CgoJ PHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0cy1uYW1lIj53cmFwdGFnPC9zcGFuPiA8c3Bh biBjbGFzcz0iYXR0LXR5cGUiPnN0cmluZzwvc3Bhbj4gVGhlIHdyYXBwaW5nIDxzcGFuIGNs YXNzPSJjYXBzIj5IVE1MPC9zcGFuPiB0YWcuIFRoZSBtZXNzYWdlIGlzIHdyYXBwZWQgaW4g YSBsYWJlbC4gU3BlY2lmeSBhIHdyYXB0YWcgaWYgeW91IHdpc2ggdG8gYWRkIGFuIGV4dHJh IHRhZyBpbnNpZGUgdGhlIGxhYmVsLiBLZWVwIGNvbXBsaWFudCB3aXRoIDxzcGFuIGNsYXNz PSJjYXBzIj5YSFRNTDwvc3Bhbj4uPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dHMtbmFt ZSI+Zm9yPC9zcGFuPiA8c3BhbiBjbGFzcz0iYXR0LXR5cGUiPnN0cmluZzwvc3Bhbj4gVmFs dWUgZm9yIHRoZSA8ZW0+Zm9yPC9lbT4gYXR0cmlidXRlIG9mIHRoZSBsYWJlbCB0YWcgKGRl ZmF1bHQgOiA8c3Bhbj5nbGdfc3Vic2NyaXB0aW9uX2NoZWNrYm94PC9zcGFuPikuPC9saT4K CTwvdWw+CgoJPGgzIGNsYXNzPSJ0YWciPjxzcGFuPmdsZ19zdWJzY3JpcHRpb25fbWVzc2Fn ZTwvc3Bhbj48L2gzPgoKCTxwIGNsYXNzPSJ0YWctc3VtbWFyeSI+RGlzcGxheSBhIGNvbmZp cm1hdGlvbiBtZXNzYWdlIHdoZW4gYSB2aXNpdG9yIHVuc3Vic2NyaWJlLjwvcD4KCgk8dWw+ CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHRzLW5hbWUiPndyYXB0YWc8L3NwYW4+IDxzcGFuIGNs YXNzPSJhdHQtdHlwZSI+c3RyaW5nPC9zcGFuPiBUaGUgd3JhcHBpbmcgPHNwYW4gY2xhc3M9 ImNhcHMiPkhUTUw8L3NwYW4+IHRhZy4gRGVmYXVsdCA6IDxzcGFuPnA8L3NwYW4+LjwvbGk+ Cgk8L3VsPgoKCTxoMyBjbGFzcz0idGFnIj48c3Bhbj5nbGdfaWZfc3Vic2NyaWJlZDwvc3Bh bj48L2gzPgoKCTxwIGNsYXNzPSJ0YWctc3VtbWFyeSI+Q29uZGl0aW9uYWwgdGFnIHRoYXQg b2ZmZXJzIHRoZSBwb3NzaWJpbGl0eSB0byBkaXNwbGF5IGNvbnRlbnQgb3Igbm90IGRlcGVu ZGluZyBvbiB0aGUgZmFjdCB0aGF0IHRoZSB2aXNpdG9yIGhhcyBhbHJlYWR5IHN1YnNjcmli ZWQuPC9wPgoKCTxwPllvdSBjYW4gYWxzbyBjdXN0b21pemUgdGhlIGNvbnRlbnQgb2YgdGhl IG5vdGlmaWNhdGlvbiBtYWlsLiBUaGUgcGx1Z2luIHVzZSB0aGUgZm9ybSA8c3Bhbj5nbGdf Y29tbWVudF9ub3RpZmljYXRpb248L3NwYW4+IHRvIGdlbmVyYXRlIHRoZSBjb250ZW50IG9m IHRoZSBtYWlsLiBJbiB0aGlzIGZvcm0sIHlvdSBjYW4gdXNlIHRleHRwYXR0ZXJuIG1haW4g dGFncyB1c2VkIHRvIGdldCBhcnRpY2xlIG9yIGNvbW1lbnQgcHJvcGVydGllcy4gVGhlIGZv bGxvd2luZ3MgdGFncyBhcmUgYXZhaWxhYmxlIHRvby48L3A+CgoJPGgzIGNsYXNzPSJ0YWci PjxzcGFuPmdsZ19jb21tZW50X2xpbms8L3NwYW4+PC9oMz4KCgk8cCBjbGFzcz0idGFnLXN1 bW1hcnkiPkRpc3BsYXkgdGhlIGxpbmsgdG8gdGhlIGNvbW1lbnQuPC9wPgoKCTx1bD4KCQk8 bGk+PHNwYW4gY2xhc3M9ImF0dHMtbmFtZSI+aHRtbDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImF0 dHMtdHlwZSI+MCBvciAxPC9zcGFuPiBJZiAwLCBnZW5lcmF0ZSB0aGUgdXJsIG9mIHRoZSBj b21tZW50LiBJZiAxLCBnZW5lcmF0ZSBhbiA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bh bj4gYW5jaG9yLiBEZWZhdWx0IDAuPC9saT4KCTwvdWw+CgoJPGgzIGNsYXNzPSJ0YWciPjxz cGFuPmdsZ191bnN1YnNjcmliZV9saW5rPC9zcGFuPjwvaDM+CgoJPHAgY2xhc3M9InRhZy1z dW1tYXJ5Ij5EaXNwbGF5IHRoZSBsaW5rIHRvIHRoZSBub3RpZmljYXRpb25zIHVuc3Vic2Ny aXB0aW9uLjwvcD4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHRzLW5hbWUiPmh0bWw8 L3NwYW4+IDxzcGFuIGNsYXNzPSJhdHRzLXR5cGUiPjAgb3IgMTwvc3Bhbj4gSWYgMCwgZ2Vu ZXJhdGUgdGhlIHVuc3Vic2NyaXB0aW9uIHVybC4gSWYgMSwgZ2VuZXJhdGUgYW4gPHNwYW4g Y2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IGFuY2hvci4gRGVmYXVsdCAwLjwvbGk+Cgk8L3Vs PiI7czo0OiJjb2RlIjtzOjI4NTM1OiIKLy8gQ0hBTkdFTE9HCgovLyB2MS4wMQovLyAtIFJl bW92ZWQgYSBkZWJ1ZyBmdW5jdGlvbiB0aGF0IHdhcyBqdXN0IGEgZGV2ZWxvcG1lbnQgdG9v bC4gWW91IG1heSBkZWxldGUKLy8gbG9nLnR4dCBvbiB5b3VyIHdlYnNpdGUgcm9vdC4KLy8g LSBXaGVuIHJlaW5zdGFsbGluZyB0aGUgcGx1Z2luIG9yIHVwZ3JhZGluZywgdGhlIHBsdWdp biBwcmVmZXJlbmNlcyBhcmUgbm8KLy8gbW9yZSBvdmVyd3JpdGVkLgoKLy8gdjEuMAovLyAt IEFkZGVkIHRoZSBlbWFpbCBmb3JtYXQgdmFsaWRhdGlvbi4KLy8gLSBjaGFuZ2VkIGdsZ19l dmVudCBTUUwgZmllbGQgdG8gSU5ULCBhbmQgJ2NvbW1lbnQuc2F2ZScgdmFsdWUgdG8gJzEn Ci8vIC0gQWRkZWQgdGhlIE5FV19DT01NRU5UX0VWRU5UIGNvbnN0YW50ICh2YWx1ZSAxKS4K Ly8gLSBUZXN0ZWQuCgovLyB2MC43Ci8vIC0gVGhlIHBsdWdpbiB3b3JrcyBub3cgd2hlbiBj b21tZW50c19tb2RlcmF0ZSBpcyBhY3RpdmUuCi8vIC0gZ2xnX2NvbW1lbnRfdXJsIGJlY29t ZXMgZ2xnX2NvbW1lbnRfbGluawovLyAtIEhUTUwgb3B0aW9uIGFkZGVkIHRvIGdsZ19jb21t ZW50X2xpbmsgYW5kIGdsZ191bnN1YnNjcmliZV9saW5rCgovLyB2MC42Ci8vIC0gQmFjayB0 byBub3RpZmljYXRpb25zIGhhcHBlbmluZyB3aGVuIGNvbW1lbnQuc2F2ZSBvY2N1cnMuIHYw LjUgd2F5IHdlcmUgdG9vIGhhemFyZG91cyBhbmQgYnVnZ3kgKD8pLgovLyAgIFRvIGdldCB0 aGUgaWQgb2YgdGhlIHBvc3RlZCBjb21tZW50LCB0aGUgcGx1Z2luIG5vdyBoYW5kbGVzIGFs bCB0aGUgY29tbWVudCBzYXZpbmcgcGFydCwgYW5kIGluc2VydAovLyAgIG5vdGlmeSBhY3Rp b24gYXQgZW5kIG9mIHNhdmluZyBwcm9jZXNzLiBUaGVuIGl0IHJlZGlyZWN0cyBzbyB0aGVy ZSBpcyBubyBnbyBiYWNrIHRvIG9yaWdpbmFsIHNhdmVDb21tZW50KCkgZnVuY3Rpb24uCi8v ICAgRm9yIHRoaXMgcmVhc29uIGdsZ19zdWJjcmliZV9jb21tZW50cyBoYXMgdG8gYmUgdGhl IGxhc3QgcGx1Z2luIHRvIGJlIGNhbGxlZC4gUGx1Z2luIG9yZGVyIGNoYW5nZWQgdG8gNy4K Ci8vIHYwLjUKLy8gLSBBZGRlZCBhbiBlcnJvciBtZXNzYWdlIGlmIHRoZSBzdWJzY3JpcHRp b24gY2hlY2tib3ggaXMgY2hlY2tlZCBhbmQgZW1haWwgaXMgZW1wdHkgKFdoZW4gY29tbWVu dCBkb2VzIG5vdCByZXF1aXJlIGVtYWlsKS4KLy8gLSBOb3RpZmljYXRpb25zIGFyZSBub3cg c2VudCB3aGVuIHRleHBhdHRlcm4gZXZlbnQgb2NjdXJzIGluIHRoZSBwYWdlIGFmdGVyIHJl Y29yZGluZyB0aGUgY29tbWVudCAoaS5lLiB0aGUgY29tbWVudGVkPTEgcGFnZSkuCi8vICAg SXQgcGVybWl0IHRvIGdldCB0aGUgaWQgb2YgdGhlIGxhc3QgY29tbWVudCBwb3N0ZWQgYnkg dGhlIGlwLgoKLy8gdjAuNAovLyAtIENoZWNrIGV4aXN0ZW5jZSBvZiB0aGUgdGFibGUgd2hl biBpbnN0YWxsaW5nCi8vIC0gQ2hlY2sgZXhpc3RlbmNlIG9mIGdsZ19ub3RpZmljYXRpb25f Zm9ybSBpbiB0eHBfZm9ybSBiZWZvcmUgaW5zdGFsbGluZwovLyAtIFRoZSB1bnN1YnNjcmli ZSBwYXJhbWV0ZXIgaXMgbm93IG1hbmFnZWQgY29ycmVjdGx5ICg/IG9yICYpCi8vIC0gQWRk ZWQgdGhlIGdsZ19zdWJzY3JpcHRpb25fbWVzc2FnZSB0YWcuCi8vIC0gQWRkZWQgdGhlICdm b3InIGF0dHJpYnV0ZSB0byB0aGUgZ2xnX3N1YnNjcmliZV9jaGVja2JveF9sYWJlbCB0YWcK Ly8gLSBEdXJpbmcgYSBwcmV2aWV3LCB0aGUgcGx1Z2luIG5vdyBjaGVjayBpbiBEQiBpdCB0 aGUgdmlzaXRvciBoYXMgcmVhbGx5IHN1YnNjcmliZWQuCgpnbG9iYWwgJHRleHRhcnJheSwg JGdsZ19zdWJzY3JpYmUsICRnbGdfYWxyZWFkeV9zdWJzY3JpYmVkLCAkZ2xnX3Vuc3Vic2Ny aWJlLAogICAgICAgICRnbGdfc3Vic2NyaXB0aW9uX3RhYmxlLCAkZ2xnX25ld19jb21tZW50 X3VybCwgJGdsZ191bnN1YnNjcmliZV91cmw7CgovLyBTcWwgdGFibGUgbmFtZQokZ2xnX3N1 YnNjcmlwdGlvbl90YWJsZSA9ICdnbGdfc3Vic2NyaXB0aW9uJzsKCi8vIGxhbmd1YWdlCiR0 ZXh0YXJyYXlbJ2dsZ19zdWJzY3JpYmVfbGFiZWwnXSA9ICdNYWlsIG1lIHdoZW4gYSBuZXcg Y29tbWVudCBpcyBwb3N0ZWQuJzsKJHRleHRhcnJheVsnZ2xnX2NvbnRpbnVlX3N1YnNjcmli aW5nX2xhYmVsJ10gPSAnS2VlcCBtYWlsaW5nIG1lIHdoZW4gYSBuZXcgY29tbWVudCBpcyBw b3N0ZWQuJzsKJHRleHRhcnJheVsnZ2xnX2NvbW1lbnRfbm90aWZpY2F0aW9uX3N1YmplY3Qn XSA9ICdbe3NpdGV9XSBOZXcgY29tbWVudCBmb3Ige3RpdGxlfSc7CiR0ZXh0YXJyYXlbJ2ds Z191bnN1YnNjcmliZV9tZXNzYWdlJ10gPSAnWW91IHdpbGwgbm90IHJlY2VpdmUgbWFpbCBm b3IgbmV3IGNvbW1lbnQgYW55bW9yZS4nOwokdGV4dGFycmF5WydnbGdfY29tbWVudF9lbWFp bF9yZXF1aXJlZCddID0gJ0lmIHlvdSB3YW50IHRvIHN1YnNjcmliZSwgcGxlYXNlIGVudGVy IGEgdmFsaWQgZS1tYWlsIGFkZHJlc3MuJzsKCmRlZmluZSgnTkVXX0NPTU1FTlRfRVZFTlQn LCAxKTsKCi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKgovLyBnbGdfbm90aWZ5IHBhcnQKLy8gZHJhZnQgZm9yIGFuICJh cGkgcGx1Z2luIiB1c2VkIGZvciBub3RpZnkgdXNlcnMuCi8vICoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKLy8tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ci8vIENyZWF0ZSB0aGUgdGFibGUgaW4gZGF0YWJhc2UKZnVuY3Rpb24gZ2xnX25vdGlmeV9p bnN0YWxsKCkKewogIGdsb2JhbCAkZ2xnX3N1YnNjcmlwdGlvbl90YWJsZTsKCiAgJHEgPSAn Q1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgJzsKICAkcS49IHNhZmVfcGZ4KCRnbGdfc3Vi c2NyaXB0aW9uX3RhYmxlKTsKICAkcS49ICcgKGdsZ19zdWJzY3JpcHRpb25faWQgQklHSU5U IEFVVE9fSU5DUkVNRU5UIFBSSU1BUlkgS0VZLCc7CiAgJHEuPSAgJyBnbGdfZXZlbnQgSU5U LCc7CiAgJHEuPSAgJyBnbGdfZW1haWwgVkFSQ0hBUig2NCksJzsKICAkcS49ICAnIGdsZ19h cnRpY2xlX2lkIElOVCknOwoKICBzYWZlX3F1ZXJ5KCRxKTsKfQoKLy8tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0 aW9uIGdsZ19ub3RpZnlfdW5pbnN0YWxsKCkKewogIGdsb2JhbCAkZ2xnX3N1YnNjcmlwdGlv bl90YWJsZTsKCiAgJHEgPSAnRFJPUCBUQUJMRSAnIC4gc2FmZV9wZngoJGdsZ19zdWJzY3Jp cHRpb25fdGFibGUpOwoKICBzYWZlX3F1ZXJ5KCRxKTsKfQoKLy8tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9u IGdsZ19pbnNlcnRfc3Vic2NyaXB0aW9uKCRlbWFpbCwgJGV2ZW50LCAkYXJ0aWNsZV9pZD0n JykKewogIGdsb2JhbCAkZ2xnX3N1YnNjcmlwdGlvbl90YWJsZTsKCiAgJHNldCA9ICcgYGds Z19ldmVudGA9XCcnIC4gJGV2ZW50IC4gJ1wnLCc7CiAgJHNldC49ICcgYGdsZ19lbWFpbGA9 XCcnIC4gJGVtYWlsIC4gJ1wnLCc7CiAgJHNldC49ICcgYGdsZ19hcnRpY2xlX2lkYD1cJycg LiAkYXJ0aWNsZV9pZCAuICdcJyc7CgogIHNhZmVfaW5zZXJ0KCRnbGdfc3Vic2NyaXB0aW9u X3RhYmxlLCAkc2V0KTsKfQoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGdsZ19yZW1vdmVfc3Vic2Ny aXB0aW9uKCRlbWFpbCwgJGV2ZW50LCAkYXJ0aWNsZV9pZD0nJykKewogIGdsb2JhbCAkZ2xn X3N1YnNjcmlwdGlvbl90YWJsZTsKCiAgJHdoZXJlID0gJyBgZ2xnX2VtYWlsYD1cJycgLiAk ZW1haWwgLiAnXCcnOwogICR3aGVyZS49ICcgQU5EIGBnbGdfZXZlbnRgPVwnJyAuICRldmVu dCAuICdcJyc7CiAgJHdoZXJlLj0gJGFydGljbGVfaWQhPScnPyAnIEFORCBgZ2xnX2FydGlj bGVfaWRgPVwnJyAuICRhcnRpY2xlX2lkIC4gJ1wnJzonJzsKCiAgc2FmZV9kZWxldGUoJGds Z19zdWJzY3JpcHRpb25fdGFibGUsICR3aGVyZSk7Cn0KCi8vLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBn bGdfZ2V0X3N1YnNjcmlwdGlvbnMoJGV2ZW50LCAkYXJ0aWNsZV9pZD0nJykKewogIGdsb2Jh bCAkZ2xnX3N1YnNjcmlwdGlvbl90YWJsZTsKCiAgJHRoaW5ncyA9ICdgZ2xnX2VtYWlsYCc7 CgogICR3aGVyZSA9ICdgZ2xnX2V2ZW50YD1cJycgLiAkZXZlbnQgLiAnXCcnOwogICR3aGVy ZS49ICRhcnRpY2xlX2lkIT0nJz8gJyBBTkQgYGdsZ19hcnRpY2xlX2lkYD1cJycgLiAkYXJ0 aWNsZV9pZCAuICdcJyc6Jyc7CgogIHJldHVybiBzYWZlX3Jvd3MoJHRoaW5ncywgJGdsZ19z dWJzY3JpcHRpb25fdGFibGUsICR3aGVyZSk7Cn0KCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBTZW5kIG5vdGlm aWNhdGlvbnMgdG8gYWxsIGVtYWlsIGFkZHJlc3Mgd2ljaCBoYXZlIHN1YnNjcmliZWQgdG8g JGV2ZW50LCBleGNlcHQKLy8gdGhvc2Ugb25lcyBpbiBpZ25vcmVfbGlzdC4KZnVuY3Rpb24g Z2xnX25vdGlmeSgkZXZlbnQsICRzdWJqZWN0LCAkZm9ybSwgJGlnbm9yZV9saXN0PWFycmF5 KCksICRhcnRpY2xlX2lkPScnKQp7CiAgZ2xvYmFsICRwcmVmcywgJGdsZ19mcm9tX25hbWUs ICRnbGdfZnJvbV9lbWFpbCwKICAgICAgICAgICRnbGdfZW1haWw7IC8vIGZvciBnbG9iYWwg YWNjZXNzIGR1cmluZyBmb3JtIHBhcnNpbmcKCiAgLy8gQ2FuY2VsIG5vX3dpZG93IGR1cmlu ZyB0aGlzIGZ1bmN0aW9uLCBmb3IKICAvLyBwYXJzaW5nIG9mIGZvcm0gKG5vICYjMTYwOyBp biB0aXRsZSBvZiBhcnRpY2xlKQogICRvbGRfdGl0bGVfbm9fd2lkb3cgPSAkcHJlZnNbJ3Rp dGxlX25vX3dpZG93J107CiAgJHByZWZzWyd0aXRsZV9ub193aWRvdyddID0gMDsKCiAgJHN1 YnNjcmlwdGlvbnMgPSBnbGdfZ2V0X3N1YnNjcmlwdGlvbnMoJGV2ZW50LCAkYXJ0aWNsZV9p ZCk7CgogIGlmKGNvdW50KCRzdWJzY3JpcHRpb25zKSA+IDApCiAgewogICAgJGZyb21fbmFt ZSA9ICgkZ2xnX2Zyb21fbmFtZSA9PSAnJykKICAgICAgPyAoJHByZWZzWydzaXRlbmFtZSdd ID09ICcnKSA/IGluaV9nZXQoJ3NlbmRtYWlsX2Zyb20nKSA6ICRwcmVmc1snc2l0ZW5hbWUn XQogICAgICAgIDogJGdsZ19mcm9tX25hbWU7CgogICAgJGZyb21fZW1haWwgPSAoJGdsZ19m cm9tX2VtYWlsID09ICcnKQogICAgICA/ICgkcHJlZnNbJ3NtdHBfZnJvbSddID09ICcnKSA/ IGluaV9nZXQoJ3NlbmRtYWlsX2Zyb20nKSA6ICRwcmVmc1snc210cF9mcm9tJ10KICAgICAg ICA6ICRnbGdfZnJvbV9lbWFpbDsKCiAgICAkcGFyYW1zID0gJyc7CgogICAgaWYgKGlzX3Zh bGlkX2VtYWlsKCRmcm9tX2VtYWlsKSkKCSAgewoJCSAgaWYgKGlzX3dpbmRvd3MoKSkKCQkg IHsKCQkJICAgaW5pX3NldCgnc2VuZG1haWxfZnJvbScsICRmcm9tX2VtYWlsKTsKCQkgIH0K CQkgIGVsc2VpZiAoIWluaV9nZXQoJ3NhZmVfbW9kZScpKQoJCSAgewogICAgICAgICAkcGFy YW1zID0gJy1mICcuJGZyb21fZW1haWw7CgkJICB9CgkgIH0KCiAgICAkc2VwID0gIWlzX3dp bmRvd3MoKSA/ICJcbiIgOiAiXHJcbiI7CgogICAgLy8gbWFpbCBnZW5lcmF0aW9uIChmcm9t IHR4cE1haWwoKSkKICAgIGlmICgkcHJlZnNbJ292ZXJyaWRlX2VtYWlsY2hhcnNldCddIGFu ZCBpc19jYWxsYWJsZSgndXRmOF9kZWNvZGUnKSkKICAJewogICAgICAkY2hhcnNldCA9ICdJ U08tODg1OS0xJzsKICAgICAgJHN1YmplY3QgPSB1dGY4X2RlY29kZSgkc3ViamVjdCk7CiAg ICAgICRib2R5ID0gdXRmOF9kZWNvZGUoJGJvZHkpOwogIAl9CiAgCWVsc2UKICAJewogIAkJ JGNoYXJzZXQgPSAnVVRGLTgnOwogIAl9CgoJCSRmcm9tX25hbWUgPSBlbmNvZGVfbWFpbGhl YWRlcihzdHJpcF9ybigkZnJvbV9uYW1lKSwgJ3BocmFzZScpOwoJCSRzdWJqZWN0ID0gZW5j b2RlX21haWxoZWFkZXIoc3RyaXBfcm4oJHN1YmplY3QpLCAndGV4dCcpOwoJCSRmcm9tX2Vt YWlsID0gc3RyaXBfcm4oJGZyb21fZW1haWwpOwoKICAJLy9UT0RPIDogQ2hhbmdlciBsZXMg dmFsZXVycyBzdGF0aXF1ZXMgcGFyIGRlcyB2YXJpYWJsZXMKICAgICRoZWFkZXJzID0gJ0Zy b206ICcuJGZyb21fbmFtZS4oJGZyb21fZW1haWwgPT0gJyc/ICcnIDogJyA8Jy4kZnJvbV9l bWFpbC4nPicpLgogIAkkc2VwLidSZXBseS1UbzogJy4kZnJvbV9uYW1lLigkZnJvbV9lbWFp bCA9PSAnJz8gJycgOiAnIDwnLiRmcm9tX2VtYWlsLic+JykuCiAgCSRzZXAuJ1gtTWFpbGVy OiBUZXh0cGF0dGVybicuCiAgCSRzZXAuJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhi aXQnLgogIAkkc2VwLidDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9IicuJGNo YXJzZXQuJyInLiRzZXA7CgogICAgZm9yZWFjaCgkc3Vic2NyaXB0aW9ucyBhcyAkcykKICAg IHsKICAgICAgJGdsZ19lbWFpbCA9ICRzWydnbGdfZW1haWwnXTsKICAgICAgJGdsZ19lbWFp bCA9IHN0cmlwX3JuKCRnbGdfZW1haWwpOwoKICAgICAgaWYoIWluX2FycmF5KCRnbGdfZW1h aWwsICRpZ25vcmVfbGlzdCkpCiAgICAgIHsKICAgICAgICAvLyBib2R5IGhhdmUgdG8gYmUg Y29udGV4dHVhbGl6ZWQgYmVjYXVzZSBvZiB1bnN1YnNjcmlwdGlvbiBsaW5rCiAgICAgICAg Ly8gYW5kIG1heWJlIHN1YnNjcmliZXIgbmFtZSBsYXRlciAoVE9ETykuCiAgICAgICAgJGJv ZHkgPSBAcGFyc2VfZm9ybSgkZm9ybSk7IC8vIENhdGNoIGVycm9ycyBmb3IgYWRtaW4gc2lk ZS4KCiAgICAgICAgJGJvZHkgPSBzdHJfcmVwbGFjZSgiXHJcbiIsICJcbiIsICRib2R5KTsK ICAgICAgICAkYm9keSA9IHN0cl9yZXBsYWNlKCJcciIsICJcbiIsICRib2R5KTsKICAgICAg ICAkYm9keSA9IHN0cl9yZXBsYWNlKCJcbiIsICRzZXAsICRib2R5KTsKCiAgICAgICAgbWFp bCgkZ2xnX2VtYWlsLCAkc3ViamVjdCwgJGJvZHksICRoZWFkZXJzLCAkcGFyYW1zKTsKICAg IAl9CiAgICB9CiAgfQoKICAvLyBSZXN0b3JlIHByZWYgZm9yIHRpdGxlX25vX3dpZG93CiAg JHByZWZzWyd0aXRsZV9ub193aWRvdyddID0gJG9sZF90aXRsZV9ub193aWRvdzsKfQoKLy8g KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqCi8vIGdsZ19zdWJzY3JpYmVfY29tbWVudHMgcGFydAovLyAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCi8vLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQovLyBJbml0aWFsaXplIHRoZSBwbHVnaW4gYnkgc2V0dGluZyBwcmVmZXJlbmNlcy4K ZnVuY3Rpb24gZ2xnX3N1YnNjcmliZV9jb21tZW50c19pbnN0YWxsKCkKewogIGdsb2JhbCAk cHJlZnM7CgogIC8vIERpc3BsYXkgcHJlZnMKICBpZiAoIWlzc2V0KCRwcmVmc1snZ2xnX3N1 YnNjcmliZV9jb21tZW50c19hdXRvJ10pKQogICAgc2V0X3ByZWYoJ2dsZ19zdWJzY3JpYmVf Y29tbWVudHNfYXV0bycsIDEsICcnLCAgMiwgJ3llc25vcmFkaW8nLCAyMDApOwogIGlmICgh aXNzZXQoJHByZWZzWydnbGdfc3Vic2NyaWJlX2NvbW1lbnRzX2NoZWNrZWRfYnlfZGVmYXVs dCddKSkKICAgIHNldF9wcmVmKCdnbGdfc3Vic2NyaWJlX2NvbW1lbnRzX2NoZWNrZWRfYnlf ZGVmYXVsdCcsIDAsICcnLCAyLCAneWVzbm9yYWRpbycsIDIwMCk7CgogIC8vIE1haWxpbmcg cHJlZnMKICBpZiAoIWlzc2V0KCRwcmVmc1snZ2xnX2Zyb21fbmFtZSddKSkKICAgIHNldF9w cmVmKCdnbGdfZnJvbV9uYW1lJywgJycsICcnLCAgMiwgJ3RleHRfaW5wdXQnLCAyMDApOwog IGlmICghaXNzZXQoJHByZWZzWydnbGdfZnJvbV9lbWFpbCddKSkKICAgIHNldF9wcmVmKCdn bGdfZnJvbV9lbWFpbCcsICcnLCAnJywgIDIsICd0ZXh0X2lucHV0JywgMjAwKTsKICBpZiAo IWlzc2V0KCRwcmVmc1snZ2xnX2NvbW1lbnRfbm90aWZpY2F0aW9uX3N1YmplY3QnXSkpCiAg ICBzZXRfcHJlZignZ2xnX2NvbW1lbnRfbm90aWZpY2F0aW9uX3N1YmplY3QnLCAnW3tzaXRl fV0gTmV3IGNvbW1lbnQgZm9yIHt0aXRsZX0gYnkge2F1dGhvcn0nLCAnJywgIDIsICd0ZXh0 X2lucHV0JywgMjAwKTsKCiAgaWYoc2FmZV9jb3VudCgndHhwX2Zvcm0nLCAnYG5hbWVgPVwn Z2xnX2NvbW1lbnRfbm90aWZpY2F0aW9uXCcnKSA9PSAwKQogIHsKCiAgICAvLyBOb3RpZmlj YXRpb24gZm9ybQogICAgJG5vdGlmaWNhdGlvbl9mb3JtID0gICdIZWxsbyxcblxuJy4KICAg ICAgICAgICAgICAgICAgICAgICAgICAnPHR4cDpjb21tZW50X25hbWUgbGluaz0iMCIgLz4n LgogICAgICAgICAgICAgICAgICAgICAgICAgICcganVzdCBwb3N0ZWQgYSBuZXcgY29tbWVu dCBhYm91dCA8dHhwOnRpdGxlIC8+LlxuXG4nLgogICAgICAgICAgICAgICAgICAgICAgICAg ICdGb2xsb3cgdGhpcyB1cmwgdG8gcmVhZCB0aGUgY29tbWVudCA6XG4nLgogICAgICAgICAg ICAgICAgICAgICAgICAgICc8dHhwOmdsZ19jb21tZW50X2xpbmsgLz5cblxuJy4KICAgICAg ICAgICAgICAgICAgICAgICAgICAnVGhlIGNvbnRlbnQgb2YgdGhlIGNvbW1lbnQgaXMgOlxu Jy4KICAgICAgICAgICAgICAgICAgICAgICAgICAnPHR4cDpjb21tZW50X21lc3NhZ2UgLz5c blxuJy4KICAgICAgICAgICAgICAgICAgICAgICAgICAnWW91IGNhbiB1bnN1YnNjcmliZSB0 byBjb21tZW50cyBub3RpZmljYXRpb24gZm9yICcuCiAgICAgICAgICAgICAgICAgICAgICAg ICAgJ3RoaXMgYXJ0aWNsZSBieSBjbGlja2luZyBvbiB0aGUgZm9sbG93aW5nIGxpbmsgOlxu Jy4KICAgICAgICAgICAgICAgICAgICAgICAgICAnPHR4cDpnbGdfdW5zdWJzY3JpYmVfbGlu ayAvPlxuJzsKCiAgICAkc2V0ID0gJyBgbmFtZWA9XCdnbGdfY29tbWVudF9ub3RpZmljYXRp b25cJywnOwogICAgJHNldC49ICcgYHR5cGVgPVwnbWlzY1wnLCc7CiAgICAkc2V0Lj0gJyBg Rm9ybWA9XCcnIC4gJG5vdGlmaWNhdGlvbl9mb3JtIC4gJ1wnJzsKCiAgICBzYWZlX2luc2Vy dCgndHhwX2Zvcm0nLCAkc2V0KTsKICAgfQoKICAgQHNhZmVfYWx0ZXIoJ3R4cF9kaXNjdXNz JywgICdBREQgYGdsZ19ub3RpZmllZGAgVElOWUlOVCggMSApIE5PVCBOVUxMIERFRkFVTFQg MScpOwp9CgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KLy8gUmVtb3ZlIHByZWZlcmVuY2VzCmZ1bmN0aW9uIGdsZ19z dWJzY3JpYmVfY29tbWVudHNfdW5pbnN0YWxsKCkKewogIC8vIHJlbW92ZSBwcmVmcwogIHNh ZmVfZGVsZXRlKCd0eHBfcHJlZnMnLCAnYG5hbWVgPVwnZ2xnX3N1YnNjcmliZV9jb21tZW50 c19hdXRvXCcnKTsKICBzYWZlX2RlbGV0ZSgndHhwX3ByZWZzJywgJ2BuYW1lYD1cJ2dsZ19z dWJzY3JpYmVfY29tbWVudHNfY2hlY2tlZF9ieV9kZWZhdWx0XCcnKTsKCiAgc2FmZV9kZWxl dGUoJ3R4cF9wcmVmcycsICdgbmFtZWA9XCdnbGdfZnJvbV9uYW1lXCcnKTsKICBzYWZlX2Rl bGV0ZSgndHhwX3ByZWZzJywgJ2BuYW1lYD1cJ2dsZ19mcm9tX2VtYWlsXCcnKTsKICBzYWZl X2RlbGV0ZSgndHhwX3ByZWZzJywgJ2BuYW1lYD1cJ2dsZ19jb21tZW50X25vdGlmaWNhdGlv bl9zdWJqZWN0XCcnKTsKCiAgLy8gcmVtb3ZlIGNvbW1lbnQgbm90aWZpY2F0aW9uIGZvcm0K ICBzYWZlX2RlbGV0ZSgndHhwX2Zvcm0nLCAnYG5hbWVgPVwnZ2xnX2NvbW1lbnRfbm90aWZp Y2F0aW9uXCcnKTsKCiAgc2FmZV9hbHRlcigndHhwX2Rpc2N1c3MnLCAnRFJPUCBgZ2xnX25v dGlmaWVkYCcpOwp9CgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gQWRkIHN1YnNjcmlwdGlvbiB0byBhcnRpY2xl IGNvbW1lbnRzIGZvciB0aGUgZ2l2ZW4gZW1haWwKLy8gYWRkcmVzcy4KZnVuY3Rpb24gZ2xn X3N1YnNjcmliZV9jb21tZW50cygkY29tbWVudF9lbWFpbCwgJGlkKQp7CiAgZ2xnX2luc2Vy dF9zdWJzY3JpcHRpb24oJGNvbW1lbnRfZW1haWwsIE5FV19DT01NRU5UX0VWRU5ULCAkaWQp Owp9CgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KLy8gUmVtb3ZlIHN1YnNjcmlwdGlvbiB0byBhcnRpY2xlIGNvbW1l bnRzIGZvciB0aGUgZ2l2ZW4KLy8gZW1haWwgYWRkcmVzcy4KZnVuY3Rpb24gZ2xnX3Vuc3Vi c2NyaWJlX2NvbW1lbnRzKCRjb21tZW50X2VtYWlsLCAkaWQpCnsKICBnbGdfcmVtb3ZlX3N1 YnNjcmlwdGlvbigkY29tbWVudF9lbWFpbCwgTkVXX0NPTU1FTlRfRVZFTlQsICRpZCk7Cn0K Ci8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQovLyBDb3VudCB0aGUgbnVtYmVyIG9mIHN1YnNjcmlwdGlvbiB0byBhbiBh cnRpY2xlIGZvciB0aGUgZ2l2ZW4KLy8gZW1haWwgYWRkcmVzcy4KZnVuY3Rpb24gZ2xnX2Nv dW50X2NvbW1lbnRzX3N1YnNjcmlwdGlvbnMoJGVtYWlsLCAkYXJ0aWNsZV9pZCkKewogIGds b2JhbCAkZ2xnX3N1YnNjcmlwdGlvbl90YWJsZTsKCiAgJHdoZXJlID0gJ2BnbGdfZXZlbnRg PVwnJy5ORVdfQ09NTUVOVF9FVkVOVC4nXCcnOwogICR3aGVyZS49ICcgQU5EIGBnbGdfZW1h aWxgPVwnJy4kZW1haWwuJ1wnJzsKICAkd2hlcmUuPSAnIEFORCBgZ2xnX2FydGljbGVfaWRg PVwnJy4kYXJ0aWNsZV9pZC4nXCcnOwoKICByZXR1cm4gc2FmZV9jb3VudCgkZ2xnX3N1YnNj cmlwdGlvbl90YWJsZSwgJHdoZXJlKTsKfQoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIENoZWNrIGlmIHRoZSB1 c2VyIHdhbnQgdG8gc3Vic2NyaWJlIGFuZAovLyBtYW5hZ2Ugc3Vic2NyaXB0aW9uIHdoZW4g dGhlIHVzZXIgcG9zdCBhIGNvbW1lbnQuCmZ1bmN0aW9uIGdsZ19jb21tZW50c19zdWJzY3Jp cHRpb24oKQp7CiAgZ2xvYmFsICRnbGdfc3Vic2NyaWJlLCAkaWQ7CgogICRnbGdfc3Vic2Ny aWJlID0gcHMoJ2dsZ19zdWJzY3JpYmUnKTsKCiAgLy8gSWYgdGhlcmUgaXMgYW4gZW1haWws IHRleHRwYXR0ZXJuIGhhcyBhbHJlYWR5IHZhbGlkYXRlZCBpdC4KICAkY29tbWVudF9lbWFp bCA9IGNsZWFuX3VybChwcygnZW1haWwnKSk7CgogIGlmKCRnbGdfc3Vic2NyaWJlID09IDEp CiAgewogICAgaWYoJGNvbW1lbnRfZW1haWwgPT0gJycgfHwgIWlzX3ZhbGlkX2VtYWlsKCRj b21tZW50X2VtYWlsKSApCiAgICB7CiAgICAgICRldmFsdWF0b3IgPSYgZ2V0X2NvbW1lbnRf ZXZhbHVhdG9yKCk7CiAgICAgICRldmFsdWF0b3IgLT4gYWRkX2VzdGltYXRlKFJFTE9BRCwx LGdUeHQoJ2dsZ19jb21tZW50X2VtYWlsX3JlcXVpcmVkJykpOwogICAgfQogICAgZWxzZQog ICAgewogICAgICBpZihnbGdfY291bnRfY29tbWVudHNfc3Vic2NyaXB0aW9ucygkY29tbWVu dF9lbWFpbCwgJGlkKSA9PSAwKQogICAgICB7CiAgICAgICAgICBnbGdfc3Vic2NyaWJlX2Nv bW1lbnRzKCRjb21tZW50X2VtYWlsLCAkaWQpOwogICAgICB9CiAgICAgIC8vIChlbHNlIGVt YWlsIGFscmVhZHkgcmVjZWl2ZSBub3RpZmljYXRpb24sIGRvbid0IHN1YnNjcmliZSkKICAg IH0KICB9CiAgZWxzZSAvLyAkZ2xnX3N1YnNjcmliZSA9PSAwCiAgewogICAgLy8gaWYgdGhl cmUgaXMgYW4gZW1haWwsIHVuc3Vic2NyaWJlCiAgICBpZigkY29tbWVudF9lbWFpbCAhPSAn JykKICAgIHsKICAgICAgaWYoZ2xnX2NvdW50X2NvbW1lbnRzX3N1YnNjcmlwdGlvbnMoJGNv bW1lbnRfZW1haWwsICRpZCkgPiAwKQogICAgICB7CiAgICAgICAgICBnbGdfdW5zdWJzY3Jp YmVfY29tbWVudHMoJGNvbW1lbnRfZW1haWwsICRpZCk7CiAgICAgIH0KICAgIH0KICB9Cgog IC8vIHNldCBjb29raWUgb25seSBpZiB0aGUgdXNlciB3YW50IHRvIHJlbWVtYmVyLgogIGlm KHBzKCdyZW1lbWJlcicpID09IDEgfHwgKGNzKCd0eHBfcmVtZW1iZXInKSA9PSAxICYmIHBz KCdmb3JnZXQnKSA9PSAnJyApKQogIHsKICAgIGdsZ19zZXRDb29raWUoKTsKICB9CiAgZWxz ZQogIHsKICAgIGdsZ19kZXN0cm95Q29va2llKCk7CiAgfQoKICBnbGdfc2F2ZUNvbW1lbnRf YW5kX25vdGlmeSgpOwp9CgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gc2V0IGNvb2tpZSBmb3Igc3Vic2NyaXB0 aW9uCmZ1bmN0aW9uIGdsZ19zZXRDb29raWUoKQp7CiAgZ2xvYmFsICRpZCwgJGdsZ19zdWJz Y3JpYmU7CgogIHNldENvb2tpZSgnZ2xnX3N1YnNjcmliZV8nLiRpZCwgKCRnbGdfc3Vic2Ny aWJlPT0nJz8wOjEpLCB0aW1lKCkrMzYwMCoyNCozNjUpOwp9CgovLy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gZGVz dHJveSBjb29raWUgZm9yIHN1YnNjcmlwdGlvbgpmdW5jdGlvbiBnbGdfZGVzdHJveUNvb2tp ZSgpCnsKICBnbG9iYWwgJGlkOwogIHNldENvb2tpZSgnZ2xnX3N1YnNjcmliZV8nLiRpZCwg JycsIHRpbWUoKS0zNjAwKTsKfQoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIENoZWNrIGlmIHVuc3Vic2NyaWJl IHBhcmFtZXRlciBpcyBwYXNzZWQuIEFuZCB1bnN1YnNjcmliZSB0aGUKLy8gZ2l2ZW4gZW1h aWwgYWRkcmVzcy4KLy8gVE9ETyA6IE9mZmVyIHRoZSBwb3NzaWJpbGl0eSB0byB1bnN1YnNj cmliZSBvbiBhIGRpZmZlcmVudCBwYWdlLgpmdW5jdGlvbiBnbGdfY29tbWVudHNfdW5zdWJz Y3JpcHRpb24oKQp7CiAgZ2xvYmFsICRnbGdfdW5zdWJzY3JpYmUsICRpZDsKCiAgJGdsZ191 bnN1YnNjcmliZSA9IGdwcygnZ2xnX3Vuc3Vic2NyaWJlJyk7CgogIGlmKCRnbGdfdW5zdWJz Y3JpYmUgIT0gJycpCiAgewogICAgJGdsZ19lbWFpbCA9IGJhc2U2NF9kZWNvZGUodXJsZGVj b2RlKCRnbGdfdW5zdWJzY3JpYmUpKTsKCiAgICBnbGdfdW5zdWJzY3JpYmVfY29tbWVudHMo JGdsZ19lbWFpbCwgJGlkKTsKCiAgICBnbGdfZGVzdHJveUNvb2tpZSgpOwogIH0KfQoKLy8t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCi8vIFJldHJpZXZlIGFuZCBnbG9iYWxpemUgdmFycyBhYm91dCBzdWJjcmlidGlv bi4KZnVuY3Rpb24gZ2xnX2xvYWRfc3Vic2NyaWJlX3ZhcnMoKQp7CiAgZ2xvYmFsICRpZCwg JGdsZ19zdWJzY3JpYmUsICRnbGdfYWxyZWFkeV9zdWJzY3JpYmVkLCAkZ2xnX3Vuc3Vic2Ny aWJlLCAkZ2xnX3N1YnNjcmlwdGlvbl90YWJsZTsKCiAgaWYoIWlzc2V0KCRnbGdfc3Vic2Ny aWJlKSkKICAgICRnbGdfc3Vic2NyaWJlID0gcHMoJ2dsZ19zdWJzY3JpYmUnKTsgLy8gZ2V0 IGZyb20gcG9zdC4KCiAgaWYoIWlzc2V0KCRnbGdfYWxyZWFkeV9zdWJzY3JpYmVkKSkKICAg IGlmKHBzKCdwcmV2aWV3JykgIT0gJycpCiAgICAvLyBJbiBjYXNlIG9mIHByZXZpZXcsIHdl IGNhbiBjaGVjayBpbiBEQiBpZiB2aXNpdG9yIHJlYWxseSBoYXMgc3Vic2NyaWJlZAogICAg ewogICAgICAkZ2xnX2FscmVhZHlfc3Vic2NyaWJlZCA9IHNhZmVfY291bnQoICRnbGdfc3Vi c2NyaXB0aW9uX3RhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICdnbGdfZW1haWw9XCcnLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNsZWFuX3VybChwcygnZW1haWwnKSkuCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1wnIEFORCBnbGdfYXJ0aWNsZV9pZD0nLiRp ZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDEgOiAwOwogICAgfQogICAg ZWxzZQogICAgewogICAgICAkZ2xnX2FscmVhZHlfc3Vic2NyaWJlZCA9IGNzKCdnbGdfc3Vi c2NyaWJlXycuJGlkKTsgLy8gZ2V0IGZyb20gY29va2llLgogICAgfQoKICBpZighaXNzZXQo JGdsZ191bnN1YnNjcmliZSkpCiAgICAkZ2xnX3Vuc3Vic2NyaWJlID0gZ3BzKCdnbGdfdW5z dWJzY3JpYmUnKTsgLy8gZ2V0IGZyb20gZ2V0LiBZZXMsIHJlYWxseS4KfQoKCi8vLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQovLyBHZW5lcmF0ZSB0aGUgc3Vic2NyaXB0aW9uIGNoZWNrYm94IHVuZGVyIHRoZSBjb21t ZW50IGZvcm0uCi8vIFdoZW4gdW5zdWJzY3JpYmluZywgY2hlY2tib3ggaXMgaGlkZGVuIGJl Y2F1c2Ugb2YgY29va2llIHBlcnNpc3RlbmNlLgpmdW5jdGlvbiBnbGdfc3Vic2NyaXB0aW9u X2NoZWNrYm94KCRhdHRzKQp7CiAgZ2xvYmFsICAkZ2xnX3N1YnNjcmliZSwgJGdsZ19hbHJl YWR5X3N1YnNjcmliZWQsICRnbGdfdW5zdWJzY3JpYmUsCiAgICAgICAgICAkZ2xnX3N1YnNj cmliZV9jb21tZW50c19jaGVja2VkX2J5X2RlZmF1bHQ7CgogIGFzc2VydF9hcnRpY2xlKCk7 CgogIGdsZ19sb2FkX3N1YnNjcmliZV92YXJzKCk7CgogIGV4dHJhY3QobEF0dHMoYXJyYXko CgkJCSdkZWZhdWx0JyA9PiAkZ2xnX3N1YnNjcmliZV9jb21tZW50c19jaGVja2VkX2J5X2Rl ZmF1bHQsCgkJCSdpZCcgPT4gJ2dsZ19zdWJzY3JpcHRpb25fY2hlY2tib3gnLAogICAgICAn Y2xhc3MnID0+ICcnCgkpLCAkYXR0cykpOwoKICAkcHJldmlldyA9IHBzKCdwcmV2aWV3Jyk7 CgogICRjaGVja2VkID0gJGdsZ19zdWJzY3JpYmUgPT0gMQogICAgfHwgKCRnbGdfYWxyZWFk eV9zdWJzY3JpYmVkID09IDEgJiYgJHByZXZpZXcgPT0gJycpCiAgICAgIHx8ICgkZ2xnX2Fs cmVhZHlfc3Vic2NyaWJlZCA9PSAnJyAmJiAkZGVmYXVsdCA9PSAxICYmICRwcmV2aWV3ID09 ICcnKTsKCiAgJG91dCA9ICc8aW5wdXQgaWQ9IicuJGlkLiciIHR5cGU9ImNoZWNrYm94IiBu YW1lPSJnbGdfc3Vic2NyaWJlIiB2YWx1ZT0iMSIgJzsKICAkb3V0Lj0gJGNoZWNrZWQgPyAn Y2hlY2tlZD0iY2hlY2tlZCInIDogJyc7CiAgJG91dC49ICRjbGFzcyAhPSAnJyA/ICcgY2xh c3M9IicuJGNsYXNzLiciJyA6ICcnOwogICRvdXQuPSAnIC8+JzsKCiAgcmV0dXJuICRnbGdf dW5zdWJzY3JpYmUgPT0gJycgPyAkb3V0IDogJyc7Cn0KCi8vLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBHZW5lcmF0 ZSB0aGUgc3Vic2NyaXB0aW9uIGNoZWNrYm94J3MgbGFiZWwuCi8vIE9mZmVyIHR3byBkaWZm ZXJlbnRzIG1lc3NhZ2VzIGRlcGVuZGluZyBvbiBpZiB0aGUgdXNlcgovLyBoYXMgYWxyZWFk eSBzdWJzY3JpYmVkIHRvIHRoZSBhcnRpY2xlLgovLyBXaGVuIHVuc3Vic2NyaWJpbmcsIGxh YmVsIGlzIGhpZGRlbiBiZWNhdXNlIG9mIGNvb2tpZSBwZXJzaXN0ZW5jZS4KZnVuY3Rpb24g Z2xnX3N1YnNjcmlwdGlvbl9jaGVja2JveF9sYWJlbCgkYXR0cykKewogIGdsb2JhbCAkZ2xn X3N1YnNjcmliZSwgJGdsZ19hbHJlYWR5X3N1YnNjcmliZWQsICRnbGdfdW5zdWJzY3JpYmU7 CgogIGFzc2VydF9hcnRpY2xlKCk7CgogIGV4dHJhY3QobEF0dHMoYXJyYXkoCiAgICAgICd3 cmFwdGFnJyA9PiAnJywKCQkJJ2ZvcicgPT4gJ2dsZ19zdWJzY3JpcHRpb25fY2hlY2tib3gn CgkpLCAkYXR0cykpOwoKICBnbGdfbG9hZF9zdWJzY3JpYmVfdmFycygpOwoKICAvLyBDaGFu Z2UgdGhlIGxhYmVsIG9mIHRoZSBjaGVja2JveAogIGlmKCRnbGdfYWxyZWFkeV9zdWJzY3Jp YmVkID09IDApCiAgewogICAgICAkb3V0ID0gZ1R4dCgnZ2xnX3N1YnNjcmliZV9sYWJlbCcp OwogIH0KICBlbHNlCiAgewogICAgICAkb3V0ID0gZ1R4dCgnZ2xnX2NvbnRpbnVlX3N1YnNj cmliaW5nX2xhYmVsJyk7CiAgfQoKICAkb3V0ID0gKCR3cmFwdGFnIT0nJykgPyAnPCcuJHdy YXB0YWcuJz4nLiRvdXQuJzwvJy4kd3JhcHRhZy4nPicgOiAkb3V0OwogICRvdXQgPSAnPGxh YmVsIGZvcj0iJy4kZm9yLiciPicuJG91dC4nPC9sYWJlbD4nOwoKICByZXR1cm4gJGdsZ191 bnN1YnNjcmliZSA9PSAnJyA/ICRvdXQgOiAnJzsKfQoKLy8tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIEFsbG93IHRvIGRpc3BsYXkgZGlmZmVyZW50IGNv bnRlbnQgaWYgdXNlciBoYXMgYWxyZWFkeSBzdWJzY3JpYmVkCi8vIChpLmUuIGlmIHRoZXJl IGlzIGEgY29va2llKQpmdW5jdGlvbiBnbGdfaWZfc3Vic2NyaWJlZCgkYXR0cyA9IE5VTEws ICR0aGluZykKewogIGdsb2JhbCAkZ2xnX3N1YnNjcmliZSwgJGdsZ19hbHJlYWR5X3N1YnNj cmliZWQ7CgogIGFzc2VydF9hcnRpY2xlKCk7CgogIGdsZ19sb2FkX3N1YnNjcmliZV92YXJz KCk7CgogIHJldHVybiBwYXJzZShFdmFsRWxzZSgkdGhpbmcsICRnbGdfYWxyZWFkeV9zdWJz Y3JpYmVkKSk7Cn0KCgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KLy8gUmV0dXJuIGEgbWVzc2FnZSB0byB0aGUgdXNlciBpZiBuZWVkZWQKLy8gKGluIGNh c2Ugb2YgdW5zdWJzY3JpcHRpb24pCmZ1bmN0aW9uIGdsZ19zdWJzY3JpcHRpb25fbWVzc2Fn ZSgkYXR0cykKewogIGdsb2JhbCAkZ2xnX3Vuc3Vic2NyaWJlOwoKICBleHRyYWN0KCBsQXR0 cyhhcnJheSgKICAgICd3cmFwdGFnJyA9PiAncCcKICApLCAkYXR0cykpOwoKICBpZigkZ2xn X3Vuc3Vic2NyaWJlICE9ICcnKQogIHsKICAgICRvdXQgPSAnPCcuJHdyYXB0YWcuJyBpZD0i Z2xnX21lc3NhZ2UiPic7CiAgICAkb3V0Lj0gZ1R4dCgnZ2xnX3Vuc3Vic2NyaWJlX21lc3Nh Z2UnKTsKICAgICRvdXQuPSAnPC8nLiR3cmFwdGFnLic+JzsKICB9CiAgZWxzZQogIHsKICAg ICRvdXQgPSAnJzsgLy8gbm90aGluZwogIH0KCiAgcmV0dXJuICRvdXQgPyAkb3V0IDogJyc7 Cn0KCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQovLyBEaXNwbGF5IHRoZSBzdWJzY3JpYmUgY2hlY2tib3ggYW5kIG1l c3NhZ2UKLy8gaWYgbmVlZGVkLgpmdW5jdGlvbiBnbGdfY29tbWVudF9mb3JtX2luamVjdCgp CnsKICBnbG9iYWwgJGdsZ19zdWJzY3JpYmVfY29tbWVudHNfYXV0bzsKCiAgaWYoJGdsZ19z dWJzY3JpYmVfY29tbWVudHNfYXV0byA9PSAxKSAvLyBkZWZpbmVkIGluIHByZWZzCiAgewog ICAgJG91dCA9IGdsZ19zdWJzY3JpcHRpb25fbWVzc2FnZShhcnJheSgpKTsKCiAgICAkb3V0 IC49IGdsZ19zdWJzY3JpcHRpb25fY2hlY2tib3goYXJyYXkoKSkuCiAgICAgICAgICAnICcu CiAgICAgICAgICBnbGdfc3Vic2NyaXB0aW9uX2NoZWNrYm94X2xhYmVsKGFycmF5KCkpOwog IH0KICBlbHNlCiAgewogICAgICAkb3V0ID0gJyc7CiAgfQoKICByZXR1cm4gJG91dDsKfQoK Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCi8vIEhhbmRsZXIgZm9yIHNhdmVDb21tZW50KCkuCi8vIFNhbWUgY29kZSB0 aGF0IHRoaXMgZnVuY3Rpb24gYnV0IG5vdGlmeS4KLy8gV2UgaGF2ZSB0byBzYXZlIHRoZSBj b21tZW50IGZyb20gb3Vyc2VsdmVzIHRvIGdldCB0aGUgZGlzY3Vzc2lkLgovLyBBbHNvLCB0 aGUgZGlzY3Vzc2lkIGNvdWxkIGJlIHVzZSBpbiBnbGdfY29tbWVudF91cmwuCi8vIFRoaXMg ZnVuY3Rpb24gcmVkaXJlY3RzIHNvIGl0IG5vdCBnb2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFs IHNhdmVDb21tZW50KCkKLy8gZnVuY3Rpb24uCmZ1bmN0aW9uIGdsZ19zYXZlQ29tbWVudF9h bmRfbm90aWZ5KCkKewoJZ2xvYmFsICRwcmVmcywgJGdsZ19uZXdfY29tbWVudF91cmw7CgoJ Ly8gVmFycyBmb3Igc2F2ZUNvbW1lbnQgY29kZQoJJHJlZiA9IHNlcnZlcnNldCgnSFRUUF9S RUZFUlJFUicpOwoJJGluID0gZ2V0Q29tbWVudCgpOwoJJGV2YWx1YXRvciA9JiBnZXRfY29t bWVudF9ldmFsdWF0b3IoKTsKCglleHRyYWN0KCRpbik7CgoJJG5hbWUgPSBkb1NsYXNoKHN0 cmlwX3RhZ3MoZGVFbnRCcmFja2V0cygkbmFtZSkpKTsKCSR3ZWIgPSBkb1NsYXNoKHN0cmlw X3RhZ3MoZGVFbnRCcmFja2V0cygkd2ViKSkpOwoJJGVtYWlsID0gZG9TbGFzaChzdHJpcF90 YWdzKGRlRW50QnJhY2tldHMoJGVtYWlsKSkpOwoKCSRtZXNzYWdlID0gc3Vic3RyKHRyaW0o JG1lc3NhZ2UpLCAwLCA2NTUzNSk7CgkkbWVzc2FnZTJkYiA9IGRvU2xhc2gobWFya3VwX2Nv bW1lbnQoJG1lc3NhZ2UpKTsKCgkkaXAgPSBzZXJ2ZXJzZXQoJ1JFTU9URV9BRERSJyk7Cgog IC8vIFNBTUUgQ09ERSBUSEFUIHNhdmVDb21tZW50KCkgYWZ0ZXIgY2FsbGJhY2tfZXZlbnQo J2NvbW1lbnQuc2F2ZScpCiAgJHZpc2libGUgPSAkZXZhbHVhdG9yLT5nZXRfcmVzdWx0KCk7 CglpZiAoJHZpc2libGUgIT0gUkVMT0FEKSB7CgkJJHBhcmVudGlkID0gYXNzZXJ0X2ludCgk cGFyZW50aWQpOwoJCSRycyA9IHNhZmVfaW5zZXJ0KAoJCQkidHhwX2Rpc2N1c3MiLAoJCQki cGFyZW50aWQgID0gJHBhcmVudGlkLAoJCQkgbmFtZQkJICA9ICckbmFtZScsCgkJCSBlbWFp bAkgID0gJyRlbWFpbCcsCgkJCSB3ZWIJCSAgPSAnJHdlYicsCgkJCSBpcAkJICA9ICciLmRv U2xhc2goJGlwKS4iJywKCQkJIG1lc3NhZ2UgICA9ICckbWVzc2FnZTJkYicsCgkJCSB2aXNp YmxlICAgPSAiLmludHZhbCgkdmlzaWJsZSkuIiwKCQkJIHBvc3RlZAkgID0gbm93KCksIi4K ICAgICAgIC8vIEFEREVECiAgICAgICAiZ2xnX25vdGlmaWVkID0gMCIKCQkpOwoKCQlpZiAo JHJzKSB7CgkJCXNhZmVfdXBkYXRlKCJ0eHBfZGlzY3Vzc19ub25jZSIsICJ1c2VkID0gMSIs ICJub25jZT0nIi5kb1NsYXNoKCRub25jZSkuIiciKTsKCQkJaWYgKCRwcmVmc1snY29tbWVu dF9tZWFuc19zaXRlX3VwZGF0ZWQnXSkgewoJCQkJdXBkYXRlX2xhc3Rtb2QoKTsKCQkJfQoJ CQltYWlsX2NvbW1lbnQoJG1lc3NhZ2UsICRuYW1lLCAkZW1haWwsICR3ZWIsICRwYXJlbnRp ZCwgJHJzKTsKCgkJCSR1cGRhdGVkID0gdXBkYXRlX2NvbW1lbnRzX2NvdW50KCRwYXJlbnRp ZCk7CgoJCQkkYmFja3BhZ2UgPSBzdWJzdHIoJGJhY2twYWdlLCAwLCAkcHJlZnNbJ21heF91 cmxfbGVuJ10pOwoJCQkkYmFja3BhZ2UgPSBwcmVnX3JlcGxhY2UoIi9bXHgwYVx4MGQjXS4q JC9zIiwnJywkYmFja3BhZ2UpOwoJCQkkYmFja3BhZ2UgPSBwcmVnX3JlcGxhY2UoIiMoaHR0 cHM/Oi8vW14vXSspLy4qJCMiLCIkMSIsaHUpLiRiYWNrcGFnZTsKCQkJaWYgKGRlZmluZWQo J1BBUlRMWV9NRVNTWScpIGFuZCAoUEFSVExZX01FU1NZKSkKCQkJewoJCQkJJGJhY2twYWdl ID0gcGVybWxpbmt1cmxfaWQoJHBhcmVudGlkKTsKCQkJfQoJCQkkYmFja3BhZ2UgLj0gKChz dHJzdHIoJGJhY2twYWdlLCc/JykpID8gJyYnIDogJz8nKSAuICdjb21tZW50ZWQ9Jy4oKCR2 aXNpYmxlPT1WSVNJQkxFKSA/ICcxJyA6ICcwJyk7CgogICAgICAvLyBOT1RJRklDQVRJT04K ICAgICAgaWYoJHByZWZzWydjb21tZW50c19tb2RlcmF0ZSddID09IDApIC8vIE5vdGlmeSBu b3cgaWYgdGhlcmUgaXMgbm8gY29tbWVudHMgbW9kZXJhdGlvbgogICAgICB7CiAgICAgICAg JGluWydkaXNjdXNzaWQnXSA9ICRyczsKICAgICAgICBnbGdfbm90aWZ5X2NvbW1lbnQoJGlu KTsvLyBjb21tZW50IFVSTCB1c2VkIGluIGdsZ19jb21tZW50X3VybCgpCiAgICAgIH0KICAg ICAgLy8gRU5EIE5PVElGSUNBVElPTiwgQkFDSyBUTyBzYXZlQ29tbWVudCgpIGNvZGUuCgoJ CQl0eHBfc3RhdHVzX2hlYWRlcignMzAyIEZvdW5kJyk7CgkJCWlmKCRjb21tZW50c19tb2Rl cmF0ZSl7CgkJCQloZWFkZXIoJ0xvY2F0aW9uOiAnLiRiYWNrcGFnZS4nI3R4cENvbW1lbnRJ bnB1dEZvcm0nKTsKCQkJfWVsc2V7CgkJCQloZWFkZXIoJ0xvY2F0aW9uOiAnLiRiYWNrcGFn ZS4nI2MnLnNwcmludGYoIiUwNnMiLCRycykpOwoJCQl9CgkJCWxvZ19oaXQoJzMwMicpOwoJ CQkkZXZhbHVhdG9yLT53cml0ZV90cmFjZSgpOwoJCQlleGl0OwoJCX0KCX0KCgkvLyBGb3Jj ZSBhbm90aGVyIFByZXZpZXcKCSRfUE9TVFsncHJldmlldyddID0gUkVMT0FEOwoJLy8kZXZh bHVhdG9yLT53cml0ZV90cmFjZSgpOwp9CgoKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBTZW5kIG5vdGlmaWNh dGlvbiBmb3IgYSBjb21tZW50Ci8vICRjb21tZW50IG5lZWQgdG8gZ2V0IGF0IGxlYXN0IGRp c2N1c3NpZCwgcGFyZW50aWQgYW5kIGVtYWlsIHZhbHVlcwpmdW5jdGlvbiBnbGdfbm90aWZ5 X2NvbW1lbnQoJGNvbW1lbnQpCnsKICBnbG9iYWwgICRpZCwgJHByZWZzLCAkdGhpc2NvbW1l bnQsICRzaXRlbmFtZSwgJGdsZ19jb21tZW50X25vdGlmaWNhdGlvbl9zdWJqZWN0LAogICAg ICAgICAgJGdsZ19uZXdfY29tbWVudF91cmwsICRnbGdfdW5zdWJzY3JpYmVfdXJsOwoKICAk dGhpc2NvbW1lbnQgPSAkY29tbWVudDsKICAkaWQgPSAkY29tbWVudFsncGFyZW50aWQnXTsK CiAgLy8gdGl0bGUgb2YgdGhlIGFydGljbGUKICBleHRyYWN0KHNhZmVfcm93KCdUaXRsZScs ICd0ZXh0cGF0dGVybicsICdJRCA9Jy4kY29tbWVudFsncGFyZW50aWQnXSkpOwoKICAvLyBp ZiBubyBwcmVmLCBnZXQgdGhlIGRlZmF1bHQgdGV4dAogIGlmKCRnbGdfY29tbWVudF9ub3Rp ZmljYXRpb25fc3ViamVjdCA9PSAnJykKICAgICRnbGdfY29tbWVudF9ub3RpZmljYXRpb25f c3ViamVjdCA9IGdUeHQoJ2dsZ19jb21tZW50X25vdGlmaWNhdGlvbl9zdWJqZWN0Jyk7Cgog IC8vIHN1YmplY3Qgb2YgbWFsaQogICRzdWJqZWN0ID0gc3RydHIoICRnbGdfY29tbWVudF9u b3RpZmljYXRpb25fc3ViamVjdCwKICAgICAgICAgICAgICAgICAgICBhcnJheSgKICAgICAg ICAgICAgICAgICAgICAgICd7c2l0ZX0nID0+ICRzaXRlbmFtZSwKICAgICAgICAgICAgICAg ICAgICAgICd7dGl0bGV9JyA9PiAkVGl0bGUsCiAgICAgICAgICAgICAgICAgICAgICAne2F1 dGhvcn0nID0+ICRjb21tZW50WyduYW1lJ10KICAgICAgICAgICAgICAgICAgKSk7CgogIC8v IGdsb2JhbCBjb21tZW50X3VybCAoIEAgY2F1c2UgZXJyb3Igbm90aWNlIGluIGFkbWluIG1v ZGUpCiAgJGdsZ19uZXdfY29tbWVudF91cmwgPSAgQHBlcm1saW5rdXJsX2lkKCRjb21tZW50 WydwYXJlbnRpZCddKS4KICAgICAgICAgICAgICAgICAgICAgICAgICAnI2MnLnNwcmludGYo IiUwNnMiLCAkY29tbWVudFsnZGlzY3Vzc2lkJ10pOwogIC8vIGdsb2JhbCB1bnN1YnNjcmli ZV91cmwKICAkc2VwID0gJHByZWZzWyd1cmxfbW9kZSddID09IDEgPyAnJicgOiAnPyc7CiAg JGdsZ191bnN1YnNjcmliZV91cmwgPSAgQHBlcm1saW5rdXJsX2lkKCRpZCkuJHNlcC4nZ2xn X3Vuc3Vic2NyaWJlPScuCiAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsZW5jb2RlKGJh c2U2NF9lbmNvZGUoJGNvbW1lbnRbJ2VtYWlsJ10pKS4KICAgICAgICAgICAgICAgICAgICAg ICAgICAnI2dsZ19tZXNzYWdlJzsKCiAgZ2xnX25vdGlmeSggTkVXX0NPTU1FTlRfRVZFTlQs CiAgICAgICAgICAgICAgJHN1YmplY3QsCiAgICAgICAgICAgICAgJ2dsZ19jb21tZW50X25v dGlmaWNhdGlvbicsCiAgICAgICAgICAgICAgYXJyYXkoJGNvbW1lbnRbJ2VtYWlsJ10pLCAk Y29tbWVudFsncGFyZW50aWQnXSk7CgogIHNhZmVfdXBkYXRlKCd0eHBfZGlzY3VzcycsICdn bGdfbm90aWZpZWQ9MScsICdkaXNjdXNzaWQ9Jy4kY29tbWVudFsnZGlzY3Vzc2lkJ10pOwp9 CgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KLy8gZ2VuZXJhdGUgdGhlIHVybCBvZiB0aGUgY29tbWVudCBpbiB0aGUg bm90aWZpY2F0aW9uIGZvcm0gKHNlbnQgYnkgbWFpbCkKLy8gZGVmYXVsdCBpbiBwbGFpbiB0 ZXh0LgpmdW5jdGlvbiBnbGdfY29tbWVudF9saW5rKCRhdHRzID0gTlVMTCwgJHRoaW5nID0g JycpCnsKICBnbG9iYWwgJGdsZ19uZXdfY29tbWVudF91cmw7CgogIGV4dHJhY3QobEF0dHMo YXJyYXkoCiAgICAnaHRtbCcgPT4gJzAnCiAgKSwgJGF0dHMpKTsKCiAgaWYoJGh0bWwgPT0g MSkKICB7CiAgICAkb3V0ID0gJzxhIGhyZWY9IicuJGdsZ19uZXdfY29tbWVudF91cmwuJyI+ JzsKICAgIGlmKCR0aGluZyA9PSAnJykKICAgIHsKICAgICAgJG91dC49ICRnbGdfbmV3X2Nv bW1lbnRfdXJsOwogICAgfQogICAgZWxzZQogICAgewogICAgICAkb3V0Lj0gcGFyc2UoJHRo aW5nKTsKICAgIH0KICAgICRvdXQuPSc8L2E+JzsKCiAgICByZXR1cm4gJG91dDsKICB9Cgog IHJldHVybiAkZ2xnX25ld19jb21tZW50X3VybDsKfQoKLy8tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIGdlbmVyYXRl IHRoZSB1bnN1YmNyaWJlIGxpbmsgaW4gdGhlIG5vdGlmaWNhdGlvbiBmb3JtIChzZW50IGJ5 IG1haWwpCi8vIGRlZmF1bHQgaW4gcGxhaW4gdGV4dC4KZnVuY3Rpb24gZ2xnX3Vuc3Vic2Ny aWJlX2xpbmsoJGF0dHMgPSBOVUxMLCAkdGhpbmc9JycpCnsKICBnbG9iYWwgJGdsZ191bnN1 YnNjcmliZV91cmw7CgogIGV4dHJhY3QobEF0dHMoYXJyYXkoCiAgICAnaHRtbCcgPT4gJzAn CiAgKSwgJGF0dHMpKTsKCiAgaWYoJGh0bWwgPT0gMSkKICB7CiAgICAkb3V0ID0gJzxhIGhy ZWY9IicuJGdsZ191bnN1YnNjcmliZV91cmwuJyI+JzsKICAgIGlmKCR0aGluZyA9PSAnJykK ICAgIHsKICAgICAgJG91dC49ICRnbGdfdW5zdWJzY3JpYmVfdXJsOwogICAgfQogICAgZWxz ZQogICAgewogICAgICAkb3V0Lj0gcGFyc2UoJHRoaW5nKTsKICAgIH0KICAgICRvdXQuPSc8 L2E+JzsKCiAgICByZXR1cm4gJG91dDsKICB9CgogIHJldHVybiAkZ2xnX3Vuc3Vic2NyaWJl X3VybDsKfQoKCi8vIEluc3RhbGwgLyBVbmluc3RhbGwKcmVnaXN0ZXJfY2FsbGJhY2soJ2ds Z19ub3RpZnlfaW5zdGFsbCcsICdwbHVnaW5fbGlmZWN5Y2xlLmdsZ19zdWJzY3JpYmVfY29t bWVudHMnLCAnaW5zdGFsbGVkJyk7CnJlZ2lzdGVyX2NhbGxiYWNrKCdnbGdfc3Vic2NyaWJl X2NvbW1lbnRzX2luc3RhbGwnLCAncGx1Z2luX2xpZmVjeWNsZS5nbGdfc3Vic2NyaWJlX2Nv bW1lbnRzJywgJ2luc3RhbGxlZCcpOwpyZWdpc3Rlcl9jYWxsYmFjaygnZ2xnX25vdGlmeV91 bmluc3RhbGwnLCAncGx1Z2luX2xpZmVjeWNsZS5nbGdfc3Vic2NyaWJlX2NvbW1lbnRzJywg J2RlbGV0ZWQnKTsKcmVnaXN0ZXJfY2FsbGJhY2soJ2dsZ19zdWJzY3JpYmVfY29tbWVudHNf dW5pbnN0YWxsJywgJ3BsdWdpbl9saWZlY3ljbGUuZ2xnX3N1YnNjcmliZV9jb21tZW50cycs ICdkZWxldGVkJyk7CgovL3JlZ2lzdGVyX2NhbGxiYWNrKCdnbGdfbG9hZF9zdWJzY3JpYmVf dmFycycsICd0ZXh0cGF0dGVybicpOwoKLy8gRm9ybSBpbmplY3Rpb24KcmVnaXN0ZXJfY2Fs bGJhY2soJ2dsZ19jb21tZW50X2Zvcm1faW5qZWN0JywgJ2NvbW1lbnQuZm9ybScpOwoKLy8g c3Vic2NyaXB0aW9uIC8gdW5zdWJzY3JpcHRpb24KcmVnaXN0ZXJfY2FsbGJhY2soJ2dsZ19j b21tZW50c191bnN1YnNjcmlwdGlvbicsICdjb21tZW50LmZvcm0nKTsKcmVnaXN0ZXJfY2Fs bGJhY2soJ2dsZ19jb21tZW50c19zdWJzY3JpcHRpb24nLCAnY29tbWVudC5zYXZlJyk7Cgov LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKLy8gQWRtaW4KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqCgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gRGlzcGxheSBwcmVm ZXJlbmNlcyBmb3JtIGZvciB0aGUgcGx1Z2luIGluIHRoZSBhZG1pbiBzaWRlLgpmdW5jdGlv biBnbGdfc3Vic2NyaWJlX2NvbW1lbnRzX29wdGlvbnMoJGV2ZW50LCAkc3RlcCkgewoKICBn bG9iYWwgJGdsZ19zdWJzY3JpYmVfY29tbWVudHNfYXV0bywgJGdsZ19zdWJzY3JpYmVfY29t bWVudHNfY2hlY2tlZF9ieV9kZWZhdWx0LAogICAgICAgICAgJGdsZ19jb21tZW50X25vdGlm aWNhdGlvbl9zdWJqZWN0LCAkZ2xnX2Zyb21fbmFtZSwgJGdsZ19mcm9tX2VtYWlsOwogIGds b2JhbCAkYWRtaW5fdXNlciwgJHByZWZzOwoKICBpbmNsdWRlX29uY2UodHhwYXRoIC4gJy9p bmNsdWRlL3R4cF9wcmVmcy5waHAnKTsKCiAgcGFnZXRvcChnVHh0KCdnbGdfc3Vic2NyaWJl X2NvbW1lbnRzX2FkbWluX3RpdGxlJykpOwoKICAkYWRtaW5fdXNlciA9IGhhc19wcml2cygn dGFiLmV4dGVuc2lvbnMnKTsKCglpZiAoJGFkbWluX3VzZXIpIC8vIGZvciBBRE1JTiB1c2Vy cyBvbmx5Cgl7CiAgICBpZiAocHMoJ3NhdmUnKSkgewogIAkgcHJlZnNfc2F2ZSgpOwoJICAg aGVhZGVyKCdMb2NhdGlvbjogaW5kZXgucGhwP2V2ZW50PWdsZ19zdWJzY3JpYmVfY29tbWVu dHNfYWRtaW4nKTsKICAgIH0KCiAgICAkaDJfYXR0cyA9ICcgY2xhc3M9InByZWYtaGVhZGlu ZyInOwogICAgJHRkX2xlZnRfYXR0cyA9ICcgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0OyB2 ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyInOwogICAgJGlucHV0X2NsYXNzID0gJ2VkaXQnOwoK ICAgIGVjaG8KCQkgIGZvcm0oCiAgCQkgIG4ubi5zdGFydFRhYmxlKCdsaXN0JykuCiAgICAg ICAgICBuLm4udHIodGRjcyh0YWcoZ1R4dCgnZ2xnX3N1YnNjcmliZV9jb21tZW50c19hZG1p bl90aXRsZScpLCdoMScpLCAyKSkuCgogICAgICAgICAgbi5uLnRyKHRkY3ModGFnKGdUeHQo J2dsZ19zdWJzY3JpYmVfY29tbWVudHNfYWRtaW5fZGlzcGxheScpLCdoMicsICRoMl9hdHRz KSwgMikpLgogICAgICAgICAgbi5uLnRyKHRkYSh0YWcoZ1R4dCgnZ2xnX3N1YnNjcmliZV9j b21tZW50c19hdXRvX2xhYmVsJyksICdzcGFuJyksICR0ZF9sZWZ0X2F0dHMpLgogICAgICAg ICAgICAgICAgIHRkYSh5ZXNub1JhZGlvKCdnbGdfc3Vic2NyaWJlX2NvbW1lbnRzX2F1dG8n LCAkZ2xnX3N1YnNjcmliZV9jb21tZW50c19hdXRvLCAxKSkpLgogICAgICAgICAgbi5uLnRy KHRkYSh0YWcoZ1R4dCgnZ2xnX3N1YnNjcmliZV9jb21tZW50c19jaGVja2VkX2J5X2RlZmF1 bHRfbGFiZWwnKSwgJ3NwYW4nKSwgJHRkX2xlZnRfYXR0cykuCiAgICAgICAgICAgICAgICAg dGRhKHllc25vUmFkaW8oJ2dsZ19zdWJzY3JpYmVfY29tbWVudHNfY2hlY2tlZF9ieV9kZWZh dWx0JywgJGdsZ19zdWJzY3JpYmVfY29tbWVudHNfY2hlY2tlZF9ieV9kZWZhdWx0LCAwKSkp LgoKICAgICAgICAgIG4ubi50cih0ZGNzKHRhZyhnVHh0KCdnbGdfc3Vic2NyaWJlX2NvbW1l bnRzX2FkbWluX21haWxpbmcnKSwnaDInLCAkaDJfYXR0cyksIDIpKS4KICAgICAgICAgIG4u bi50cih0ZGEodGFnKGdUeHQoJ2dsZ19mcm9tX25hbWVfbGFiZWwnKSwgJ3NwYW4nKSwgJHRk X2xlZnRfYXR0cykuCiAgICAgICAgICAgICAgICAgdGRhKGZJbnB1dCgndGV4dCcsICdnbGdf ZnJvbV9uYW1lJywgJGdsZ19mcm9tX25hbWUsICRpbnB1dF9jbGFzcykpKS4KICAgICAgICAg IG4ubi50cih0ZGEodGFnKGdUeHQoJ2dsZ19mcm9tX2VtYWlsX2xhYmVsJyksICdzcGFuJyks ICR0ZF9sZWZ0X2F0dHMpLgogICAgICAgICAgICAgICAgIHRkYShmSW5wdXQoJ3RleHQnLCAn Z2xnX2Zyb21fZW1haWwnLCAkZ2xnX2Zyb21fZW1haWwsICRpbnB1dF9jbGFzcykpKS4KICAg ICAgICAgIG4ubi50cih0ZGEodGFnKGdUeHQoJ2dsZ19jb21tZW50X25vdGlmaWNhdGlvbl9z dWJqZWN0X2xhYmVsJyksICdzcGFuJyksICR0ZF9sZWZ0X2F0dHMpLgogICAgICAgICAgICAg ICAgIHRkYShmSW5wdXQoJ3RleHQnLCAnZ2xnX2NvbW1lbnRfbm90aWZpY2F0aW9uX3N1Ympl Y3QnLCAkZ2xnX2NvbW1lbnRfbm90aWZpY2F0aW9uX3N1YmplY3QsICRpbnB1dF9jbGFzcykp KS4KCiAgCSAgICAgIG4ubi50cih0ZGEoZklucHV0KCJzdWJtaXQiLCJzYXZlIixnVHh0KCJz YXZlX2J1dHRvbiIpLCJwdWJsaXNoIikuZUlucHV0KCJnbGdfc3Vic2NyaWJlX2NvbW1lbnRz X2FkbWluIikuc0lucHV0KCdzYXZlcHJlZnMnKSwgIiBjb2xzcGFuPVwiMlwiIGNsYXNzPVwi bm9saW5lXCIiKSkuCiAgICAgIGVuZFRhYmxlKCkKICAgICk7CiAgfQp9CgovLy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K Ly8gSGFuZGxlIHRoZSBub3RpZmljYXRpb24gd2hlbiBhbiBhZG1pbiBzaG93IGNvbW1lbnRz CmZ1bmN0aW9uIGdsZ19ub3RpZnlfY29tbWVudHNfbW9kZXJhdGlvbigpCnsKICBnbG9iYWwg ICRtZXNzYWdlLCAkdGV4dGFycmF5LAogICAgICAgICAgJGdsZ19jb21tZW50c19tYXJrZWRf dmlzaWJsZTsKCiAgJGV2ZW50ID0gcHMoJ2V2ZW50Jyk7CiAgJG1ldGhvZCA9IHBzKCdlZGl0 X21ldGhvZCcpOwogICRzZWxlY3RlZCA9IHBzKCdzZWxlY3RlZCcpOwoKCiAgaWYoJGV2ZW50 ID09ICdkaXNjdXNzJyAmJiAkbWV0aG9kID09ICd2aXNpYmxlJykKICB7CiAgICBAcmVxdWly ZV9vbmNlKHR4cGF0aC4nL3B1Ymxpc2gucGhwJyk7CiAgICBAcmVxdWlyZV9vbmNlKHR4cGF0 aC4nL3B1Ymxpc2gvdGFnaGFuZGxlcnMucGhwJyk7CgogICAgJHRvX25vdGlmeSA9IHNhZmVf cm93cyggJ2Rpc2N1c3NpZCwgcGFyZW50aWQsIGVtYWlsLCBuYW1lLCBtZXNzYWdlJywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICd0eHBfZGlzY3VzcycsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAnZGlzY3Vzc2lkIGluICgnLmltcGxvZGUoJywgJywgJHNlbGVjdGVk KS4nKSBhbmQgZ2xnX25vdGlmaWVkPTAnKTsKCiAgICBpZihjb3VudCgkdG9fbm90aWZ5KSA+ IDApCiAgICAgICR0ZXh0YXJyYXlbJ2NvbW1lbnRzX21hcmtlZF92aXNpYmxlJ10gPSAkZ2xn X2NvbW1lbnRzX21hcmtlZF92aXNpYmxlOwoKICAgIGZvcmVhY2goJHRvX25vdGlmeSBhcyAk Y29tbWVudCkKICAgIHsKICAgICAgLy9zdHJpcCBIVE1MIGZyb20gREIKICAgICAgJGNvbW1l bnRbJ21lc3NhZ2UnXSA9IHN0cmlwX3RhZ3MoJGNvbW1lbnRbJ21lc3NhZ2UnXSk7CiAgICAg IGdsZ19ub3RpZnlfY29tbWVudCgkY29tbWVudCk7CiAgICB9CiAgfQp9CgppZiAoQHR4cGlu dGVyZmFjZSA9PSAnYWRtaW4nKSB7CgogIGdsb2JhbCAkZ2xnX2NvbW1lbnRzX21hcmtlZF92 aXNpYmxlOwoKICAkdGV4dGFycmF5WydnbGdfc3Vic2NyaWJlX2NvbW1lbnRzX2FkbWluX3Rp dGxlJ10gPSAnU3Vic2NyaXB0aW9ucyc7CiAgJHRleHRhcnJheVsnZ2xnX3N1YnNjcmliZV9j b21tZW50c19hZG1pbl9kaXNwbGF5J10gPSAnRGlzcGxheSBvcHRpb25zJzsKICAkdGV4dGFy cmF5WydnbGdfc3Vic2NyaWJlX2NvbW1lbnRzX2FkbWluX21haWxpbmcnXSA9ICdNYWlsaW5n IG9wdGlvbnMnOwoKICAkdGV4dGFycmF5WydnbGdfc3Vic2NyaWJlX2NvbW1lbnRzX2F1dG9f bGFiZWwnXSA9ICdBdXRvbWF0aWNhbGx5IGFkZCB0aGUgc3Vic2NyaWJlIGNoZWNrYm94IHRv IHRoZSBjb21tZW50IGZvcm0/JzsKICAkdGV4dGFycmF5WydnbGdfc3Vic2NyaWJlX2NvbW1l bnRzX2NoZWNrZWRfYnlfZGVmYXVsdF9sYWJlbCddID0gJ1N1YnNjcmliZSBjaGVja2JveCBp cyBjaGVja2VkIGJ5IGRlZmF1bHQ/JzsKCgkkdGV4dGFycmF5WydnbGdfZnJvbV9uYW1lX2xh YmVsJ10gPSAnTmFtZSBmb3IgIkZyb20iIGFuZCAicmVwbHktdG8iIGZpZWxkcyc7CgkkdGV4 dGFycmF5WydnbGdfZnJvbV9lbWFpbF9sYWJlbCddID0gJ0VtYWlsIGZvciAiRnJvbSIgYW5k ICJyZXBseS10byIgZmllbGRzJzsKCSR0ZXh0YXJyYXlbJ2dsZ19jb21tZW50X25vdGlmaWNh dGlvbl9zdWJqZWN0X2xhYmVsJ10gPSAnTm90aWZpY2F0aW9uIHN1YmplY3QgcGF0dGVybic7 CgoJJGdsZ19jb21tZW50c19tYXJrZWRfdmlzaWJsZSA9ICdDb21tZW50cyBtYWRlIHZpc2li bGU6IDxzdHJvbmc+e2xpc3R9PC9zdHJvbmc+LjxiciAvPk5vdGlmaWNhdGlvbnMgaGF2ZSBi ZWVuIHNlbnQuJzsKCiAgLy8gcmVnaXN0ZXIgcGx1Z2luIHRvIEFkbWluIHRhYgoJYWRkX3By aXZzKCdnbGdfc3Vic2NyaWJlX2NvbW1lbnRzX2FkbWluJywnMSwyLDYnKTsKCWFkZF9wcml2 cygncGx1Z2luX3ByZWZzLmdsZ19zdWJzY3JpYmVfY29tbWVudHMnLCcxLDIsNicpOwoJcmVn aXN0ZXJfY2FsbGJhY2soJ2dsZ19zdWJzY3JpYmVfY29tbWVudHNfb3B0aW9ucycsICdwbHVn aW5fcHJlZnMuZ2xnX3N1YnNjcmliZV9jb21tZW50cycpOwoKICByZWdpc3Rlcl90YWIoImV4 dGVuc2lvbnMiLCJnbGdfc3Vic2NyaWJlX2NvbW1lbnRzX2FkbWluIiwgZ1R4dCgnZ2xnX3N1 YnNjcmliZV9jb21tZW50c19hZG1pbl90aXRsZScpKTsKICByZWdpc3Rlcl9jYWxsYmFjaygn Z2xnX3N1YnNjcmliZV9jb21tZW50c19vcHRpb25zJywgJ2dsZ19zdWJzY3JpYmVfY29tbWVu dHNfYWRtaW4nKTsKCiAgaWYoJHByZWZzWydjb21tZW50c19tb2RlcmF0ZSddID09IDEpCiAg ewogICAgZ2xnX25vdGlmeV9jb21tZW50c19tb2RlcmF0aW9uKCk7CiAgfQp9CiI7czozOiJt ZDUiO3M6MzI6IjJhMWFjZjg2NDRmZGI1NzE0YTVmOGUxY2EzMDZkYmZlIjt9