# md_versions v0.8 # Plugin for storing versions of articles # Martin Dostal # http://martanek.net/ # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YTo5OntzOjQ6Im5hbWUiO3M6MTE6Im1kX3ZlcnNpb25zIjtzOjc6InZlcnNpb24iO3M6Mzoi MC44IjtzOjY6ImF1dGhvciI7czoxMzoiTWFydGluIERvc3RhbCI7czoxMDoiYXV0aG9yX3Vy aSI7czoyMDoiaHR0cDovL21hcnRhbmVrLm5ldC8iO3M6MTE6ImRlc2NyaXB0aW9uIjtzOjM5 OiJQbHVnaW4gZm9yIHN0b3JpbmcgdmVyc2lvbnMgb2YgYXJ0aWNsZXMiO3M6NDoidHlwZSI7 aToxO3M6NDoiaGVscCI7czoxMDI4OiIKCjxoMT5NRCB2ZXJzaW9ucyBvZiB0aGUgYXJ0aWNs ZXM8L2gxPgoKPHA+Cjxici8+CjxhIGhyZWY9Imh0dHA6Ly93d3cubWFydGFuZWsubmV0Ij5I b21lIHNpdGUgZm9yIHRoaXMgcGx1Z2luIC0gbWFydGFuZWsubmV0PC9hPgo8YnIvPgo8L3A+ Cgo8aDI+Q3plY2g8L2gyPgo8cD5UZW50byBwbHVnaW4gdW1vxb7FiHVqZSB2ZXJ6b3bDoW7D rSDEjWzDoW5rxa8gYSBqZWppY2ggZWZla3Rpdm7DrSBzcHLDoXZ1LjwvcD4KCgoKCjxoMj5F bmdsaXNoPC9oMj4KCjxwPlRoaXMgcGx1Z2luIHdpbGwgaGVscCB5b3Ugd2l0aCB2ZXJzaW9u cyBvZiB0aGUgYXJ0aWNsZXMuIFlvdSBjYW4gdXNlIG5ldyB0YWIgaW4gZXh0ZW5zaW9ucyB0 YWIgLSBNRCB2ZXJzaW9ucy4KVGhpcyBpcyBnb29kIGZvciBmaW5kaW5nIHRoZSBhcnRpY2xl cyB3aXRoIHNvbWUgdmVyc2lvbnMuIFlvdSBjYW4gc2VlIG5ldyBmaWVsZHNldCBpbiB0aGUg d3JpdGUgdGFiLiBUaGVyZSBpcyBhIGxpc3Qgb2YgZXhpc3RpbmcKdmVyc2lvbnMgZm9yIHRo ZSBjdXJyZW50IGFydGljbGUgYW5kIHRoZXJlIGlzIGEgYnV0dG9uIHdoaWNoIHdpbGwgY3Jl YXRlIGEgbmV3IHZlcnNpb24gb2YgdGhlIGFydGljbGUuIFRoZSBjdXJyZW50IGFydGljbGUg d2lsbCBub3QgYmUgY2hhbmdlLgpJZiB5b3Ugd2FudCB0byByZXBsYWNlIHRoZSBjdXJyZW50 IGFydGljbGUgd2l0aCBzb21lIHZlcnNpb24sIHlvdSBoYXZlIHRvIGdvIHRvIHRoZSBsaXN0 IG9mIHRoZSB2ZXJzaW9ucyBmb3IgdGhlIGFydGljbGUgYW5kIHVzZSBsaW5rICJyZXBsYWNl IGFydGljbGUgd2l0aAp0aGlzIHZlcnNpb24iLiBUaGUgYm9keSwgYm9keV9odG1sIGFuZCB0 aXRsZSBvZiB0aGUgYXJ0aWNsZSB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZSBpbmZvcm1hdGlv biBmcm9tIHRoZSB2ZXJzaW9uLjxici8+CjxiPlRJUDo8L2I+IGlmIHlvdSB3YW50IHRvIHN0 b3JlIGN1cnJlbnQgY29udGVudCBvZiB0aGUgYXJ0aWNsZSwgeW91IGhhdmUgdG8gc2F2ZSBp dCBhcyBuZXcgdmVyc2lvbi48L3A+CgoKCiI7czo0OiJjb2RlIjtzOjU3NTMyOiIKLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCS8v KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioKCS8vKioqKioqKioqKioqKioqICAgSU5TVEFMTCAgKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioKCS8vKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCglmdW5jdGlvbiBt ZF92ZXJzaW9uc19jcmVhdGVfdGFibGUoKQoJewoKCS8vIHZ5dHZvcml0IHRhYnVsa3UsIHBv a3VkIG5lZXhpc3R1amUKJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCJDUkVBVEUgVEFCTEUgSUYg Tk9UIEVYSVNUUyAiLlBGWC4ibWRfdmVyc2lvbnMgKAogaWQgaW50IHVuc2lnbmVkIE5PVCBO VUxMIGF1dG9faW5jcmVtZW50LAogYXJ0aWNsZV9pZCBpbnQgTk9UIE5VTEwsCiB2ZXJzaW9u IGZsb2F0LAogY29tbWVudCB0ZXh0LAogVGl0bGUgIHRleHQsCiBCb2R5CXRleHQsCiBCb2R5 X2h0bWwgdGV4dCwKIGFjdGl2ZSBpbnQgZGVmYXVsdCAwLAogY3JlYXRlZF9kYXRlIGRhdGV0 aW1lLAogcHJpbWFyeSBrZXkoaWQpCikgVFlQRT1NeUlTQU0gREVGQVVMVCBDSEFSU0VUPXV0 ZjggUEFDS19LRVlTPTEiKTsKCS8vIGtvbmVjIHZ5dHZvcmVuaSB0YWJ1bGt5IHBybyB1bG96 ZW5pIHZlcnppCgoJLy8gZGVmaW5pY2UgamF6eWt1CgoJLy9FTkdMSVNIIGxhbmd1YWdlIC0g ZGF0YQoJJGxbJ2VuJ11bJ3RhYl9tZF92ZXJzaW9ucyddPSJNRCB2ZXJzaW9ucyI7CgoJLy9o ZWFkZXJzCgkkbFsnZW4nXVsnbWRfdmVyc2lvbl9uZXdfdmVyc2lvbl9mb3JfYXJ0aWNsZSdd PSJBZGQgbmV3IHZlcnNpb24gZm9yIHRoZSBhcnRpY2xlIjsKCSRsWydlbiddWydtZF92ZXJz aW9uX3ZpZXdfYWxsX2FydGljbGVzJ109IkFsbCBzYXZlZCBhcnRpY2xlcyI7CgkkbFsnZW4n XVsnbWRfdmVyc2lvbl9zYXZlZF92ZXJzaW9ucyddPSJTYXZlZCB2ZXJzaW9ucyI7CgkkbFsn ZW4nXVsnbWRfdmVyc2lvbl9kZWxldGVfdmVyc2lvbiddPSJEZWxldGUgdmVyc2lvbiI7Cgkk bFsnZW4nXVsnbWRfdmVyc2lvbl92aWV3X2RldGFpbF92ZXJzaW9uJ109IkRldGFpbCBvZiB0 aGUgdmVyc2lvbiI7CgkkbFsnZW4nXVsnbWRfdmVyc2lvbl92aWV3X2ZvdW5kZWRfYXJ0aWNs ZXMnXT0iUmVzdWx0IG9mIHNlYXJjaGluZyI7CgkkbFsnZW4nXVsnbWRfdmVyc2lvbl90aXRs ZV92ZXJzaW9uX2FjdGl2YXRpb24nXT0iQWN0aXZhdGlvbiB2ZXJzaW9uIG9mIHRoZSBhcnRp Y2xlOiAiOwoKCS8vZmluZGluZyBjaGVjayBib3gKCSRsWydlbiddWydtZF92ZXJzaW9uc19h cnRpY2xlX3dpdGhfdmVycyddPSJ3aXRoIHZlcnNpb25zIG9ubHkiOwoKCS8vZm9ybSBmb3Ig bmV3IHZlcnNpb24KCSRsWydlbiddWydtZF92ZXJzaW9uX3ZlcnNpb24nXT0iVmVyc2lvbiI7 CgkkbFsnZW4nXVsnbWRfdmVyc2lvbl9sYXN0X3ZlcnNpb24nXT0iTGFzdCBmb3VuZCB2ZXJz aW9uIjsKCSRsWydlbiddWydtZF92ZXJzaW9uX25vX3ByZXZpb3VzX3ZlcnNpb24nXT0ibm8g cHJldmlvdXMgdmVyc2lvbiI7CgoJJGxbJ2VuJ11bJ21kX3ZlcnNpb25fY29tbWVudCddPSJD b21tZW50IjsKCSRsWydlbiddWydtZF92ZXJzaW9uX2JvZHknXT0iQm9keSI7CgkkbFsnZW4n XVsnbWRfdmVyc2lvbl9ib2R5X2h0bWwnXT0iQm9keSAoaHRtbCkiOwoJJGxbJ2VuJ11bJ21k X3ZlcnNpb25fYnV0dG9uX2FkZCddPSJTYXZlIjsKCSRsWydlbiddWydtZF92ZXJzaW9uX2J1 dHRvbl9maW5kJ109IkZpbmQiOwoJLy9lbmQgb2YgZm9ybQoKCgkkbFsnZW4nXVsnbWRfdmVy c2lvbl9hZGRfdmVyc2lvbl9nbyddPSJJIGFtIHRyeWluZyB0byBhZGQgbmV3IHZlcnNpb24g Li4uIjsKCSRsWydlbiddWydtZF92ZXJzaW9uX3N1Y2Nlc3MnXT0iT0siOwoJJGxbJ2VuJ11b J21kX3ZlcnNpb25fZmFpbGVkJ109IkVycm9yIjsKCgkvL25hdmlnYXRpb24KCSRsWydlbidd WydtZF92ZXJzaW9uX2ZpbmRfYXJ0aWNsZSddPSJGaW5kIGFydGljbGUiOwoJJGxbJ2VuJ11b J21kX3ZlcnNpb25fdmlldyddPSJTaG93IHZlcnNpb25zIGZvciBhcnRpY2xlIjsKCSRsWydl biddWydtZF92aWV3X2FydGljbGVzJ109IlNob3cgYWxsIGFydGljbGVzIjsKCS8vZW5kIG5h dmlnYXRpb24KCgkkbFsnZW4nXVsnbWRfdmVyc2lvbl9hZGQnXT0iYWRkIHZlcnNpb24iOwoJ JGxbJ2VuJ11bJ21kX3ZlcnNpb25fdmlld192ZXJzaW9ucyddPSJzaG93IHZlcnNpb25zIjsK CgoJLy9uYXZpZ2F0aW9uIGluIHRoZSBsaXN0CgkkbFsnZW4nXVsnbWRfdmVyc2lvbl9uYXZp X3ZpZXcnXT0iZWRpdCI7CgkkbFsnZW4nXVsnbWRfdmVyc2lvbl9uYXZpX2RlbGV0ZSddPSJk ZWxldGUiOwoJJGxbJ2VuJ11bJ21kX3ZlcnNpb25fbmF2aV9hdGl2YXRlJ109InJlcGxhY2Ug dGhlIGFydGljbGUgd2l0aCB0aGlzIHZlcnNpb24iOwoJJGxbJ2VuJ11bJ21kX3ZlcnNpb25f bmF2aV9zaG93X2RpZmYnXT0ic2hvdyBkaWZmZXJlbmNlcyI7CgoJLy9uYXZpZ2FjZSB1IHNl em5hbXUgLSBuZW5pIG9ka2F6CgkkbFsnZW4nXVsnbWRfdmVyc2lvbl9hdGl2YXRlZCddPSJh Y3RpdmF0ZWQiOwoJJGxbJ2VuJ11bJ21kX3ZlcnNpb25fZGVhdGl2YXRlZCddPSJkZWFjdGl2 YXRlZCI7CgoJLy9mb3Igd3JpdGUgdGFiCgkkbFsnZW4nXVsnbWRfdmVyc2lvbnNfZm9yX2Fy dGljbGUnXT0iVmVyc2lvbnMgb2YgdGhlIGFydGljbGUiOwoJJGxbJ2VuJ11bJ21kX3ZlcnNp b25zX3NhdmVfYXNfbmV3J109IlNhdmUgYXMgbmV3IHZlcnNpb24iOwoJJGxbJ2VuJ11bJ21k X3ZlcnNpb25zX25vX2NvbW1lbnQnXT0ibm8gY29tbWVudCI7CgkkbFsnZW4nXVsnbWRfdmVy c2lvbl9zYXZlZF92ZXJzaW9ucyddPSJTYXZlZCB2ZXJzaW9uczoiOwoKCgkvL0NaRUNIIGxh bmd1YWdlIC0gZGF0YQoJJGxbJ2N6J11bJ3RhYl9tZF92ZXJzaW9ucyddPSJNRCB2ZXJzaW9u cyI7CgoJLy9uYWRwaXN5CgkkbFsnY3onXVsnbWRfdmVyc2lvbl9uZXdfdmVyc2lvbl9mb3Jf YXJ0aWNsZSddPSJQxZlpZGF0IG5vdm91IHZlcnppIHBybyDEjWzDoW5layI7CgkkbFsnY3on XVsnbWRfdmVyc2lvbl92aWV3X2FsbF9hcnRpY2xlcyddPSJab2JyYXp1amkgdsWhZWNobnkg xI1sw6Fua3kiOwoJJGxbJ2N6J11bJ21kX3ZlcnNpb25fc2F2ZWRfdmVyc2lvbnMnXT0iVWxv xb5lbsOpIHZlcnplIMSNbMOhbmvFryI7CgkkbFsnY3onXVsnbWRfdmVyc2lvbl9kZWxldGVf dmVyc2lvbiddPSJTbWF6w6Fuw60gdWxvxb5lbsOpIHZlcnplIjsKCSRsWydjeiddWydtZF92 ZXJzaW9uX3ZpZXdfZGV0YWlsX3ZlcnNpb24nXT0iWm9icmF6dWppIGRldGFpbCB2ZXJ6ZSI7 CgkkbFsnY3onXVsnbWRfdmVyc2lvbl92aWV3X2ZvdW5kZWRfYXJ0aWNsZXMnXT0iWm9icmF6 dWppIHbFoWVjaG55IG5hbGV6ZW7DqSDEjWzDoW5reSI7CgkkbFsnY3onXVsnbWRfdmVyc2lv bl90aXRsZV92ZXJzaW9uX2FjdGl2YXRpb24nXT0iQWt0aXZhY2UgdmVyemUgxI1sw6Fua3U6 ICI7CgoJLy9obGVkYW5pIGNoZWNrIGJveAoJJGxbJ2N6J11bJ21kX3ZlcnNpb25zX2FydGlj bGVfd2l0aF92ZXJzJ109InBvdXplIHZlcnpvdmFuw6kiOwoKCS8vb2JzYWggZm9ybXUgcHJv IHByaWRhbmkgdmVyemUKCSRsWydjeiddWydtZF92ZXJzaW9uX3ZlcnNpb24nXT0iVmVyemUi OwoJJGxbJ2N6J11bJ21kX3ZlcnNpb25fbGFzdF92ZXJzaW9uJ109IlBvc2xlZG7DrSBuYWxl emVuw6EgdmVyemUiOwoJJGxbJ2N6J11bJ21kX3ZlcnNpb25fbm9fcHJldmlvdXNfdmVyc2lv biddPSLFvsOhZG7DoSBwxZllZGNob3rDrSB2ZXJ6ZSI7CgoJJGxbJ2N6J11bJ21kX3ZlcnNp b25fY29tbWVudCddPSJLb21lbnTDocWZIjsKCSRsWydjeiddWydtZF92ZXJzaW9uX2JvZHkn XT0iVGV4dCI7CgkkbFsnY3onXVsnbWRfdmVyc2lvbl9ib2R5X2h0bWwnXT0iVGV4dCAodiBo dG1sKSI7CgkkbFsnY3onXVsnbWRfdmVyc2lvbl9idXR0b25fYWRkJ109IlVsb8W+aXQiOwoJ JGxbJ2N6J11bJ21kX3ZlcnNpb25fYnV0dG9uX2ZpbmQnXT0iTmFqw610IjsKCS8va29uZWMg Zm9ybXUKCgoJJGxbJ2N6J11bJ21kX3ZlcnNpb25fYWRkX3ZlcnNpb25fZ28nXT0iUMWZaWTD oXbDoW0gbm92b3UgdmVyemkgLi4uIjsKCSRsWydjeiddWydtZF92ZXJzaW9uX3N1Y2Nlc3Mn XT0iT0siOwoJJGxbJ2N6J11bJ21kX3ZlcnNpb25fZmFpbGVkJ109IkNoeWJhIjsKCgkvL25h dmlnYWNlCgkkbFsnY3onXVsnbWRfdmVyc2lvbl9maW5kX2FydGljbGUnXT0iTmFqw610IMSN bMOhbmVrIjsKCSRsWydjeiddWydtZF92ZXJzaW9uX3ZpZXcnXT0iWm9icmF6aXQgYXJjaGl2 b3ZhbsOpIHZlcnplIMSNbMOhbmvFryI7CgkkbFsnY3onXVsnbWRfdmlld19hcnRpY2xlcydd PSJab2JyYXppdCB2xaFlY2hueSDEjWzDoW5reSI7CgkvL2tvbmVjIG5hdmlnYWNlCgoJJGxb J2N6J11bJ21kX3ZlcnNpb25fYWRkJ109InDFmWlkYXQgdmVyemkiOwoJJGxbJ2N6J11bJ21k X3ZlcnNpb25fdmlld192ZXJzaW9ucyddPSJ6b2JyYXppdCB2ZXJ6ZSI7CgoKCS8vbmF2aWdh Y2UgdSBzZXpuYW11CgkkbFsnY3onXVsnbWRfdmVyc2lvbl9uYXZpX3ZpZXcnXT0iem9icmF6 aXQiOwoJJGxbJ2N6J11bJ21kX3ZlcnNpb25fbmF2aV9kZWxldGUnXT0ic21hemF0IjsKCSRs WydjeiddWydtZF92ZXJzaW9uX25hdmlfYXRpdmF0ZSddPSJuYWhyYWRpdCDEjWzDoW5layB0 b3V0byB2ZXJ6w60iOwoJJGxbJ2N6J11bJ21kX3ZlcnNpb25fbmF2aV9zaG93X2RpZmYnXT0i em9icmF6aXQgcm96ZMOtbHkiOwoKCS8vbmF2aWdhY2UgdSBzZXpuYW11IC0gbmVuaSBvZGth egoJJGxbJ2N6J11bJ21kX3ZlcnNpb25fYXRpdmF0ZWQnXT0iYWt0aXZuw60iOwoJJGxbJ2N6 J11bJ21kX3ZlcnNpb25fZGVhdGl2YXRlZCddPSJuZWFrdGl2bsOtIjsKCgkvL2ZvciB3cml0 ZSB0YWIKCSRsWydjeiddWydtZF92ZXJzaW9uc19mb3JfYXJ0aWNsZSddPSJWZXJ6b3bDoW7D rSDEjWzDoW5rdSI7CgkkbFsnY3onXVsnbWRfdmVyc2lvbnNfc2F2ZV9hc19uZXcnXT0iVWxv xb5pdCBqYWtvIG5vdm91IHZlcnppIjsKCSRsWydjeiddWydtZF92ZXJzaW9uc19ub19jb21t ZW50J109IsW+w6FkbsO9IGtvbWVudMOhxZkiOwoJJGxbJ2N6J11bJ21kX3ZlcnNpb25fc2F2 ZWRfdmVyc2lvbnMnXT0iVWxvxb5lbsOpIHZlcnplIjsKCgkvLyBrb25lYyBkZWZpbmljZSBq YXp5a3UKCgoKCS8vIG5haW5zdGFsb3ZhdCBqYXp5a292ZSBtdXRhY2UKCWZvcmVhY2ggKCRs IGFzICRsYW5nX25hbWU9PiRsYW5nX2luZm8pCgl7CgkJLy8gY3plY2gKCQlpZiAoJGxhbmdf bmFtZSA9PSAiY3oiKQoJCXsKCQkJLy8gbWFtIGNlc3RpbnUsIHRhayBtdXNpbSBuYXN0YXZp dCBjZXNrZSBrb2RvdmFuaQoJCQkkcmVzdWx0ID0gbXlzcWxfcXVlcnkoIlNFVCBOQU1FUyAn dXRmOCciKTsKCQkJJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCJTRVQgQ0hBUkFDVEVSIFNFVCB1 Y3MyX2N6ZWNoX2NpIik7CgoJCQkvLyBwcm9qaXQgcG9sZSBhIHByb3Zlc3QgcHJpZGFuaQoJ CQlmb3JlYWNoICgkbGFuZ19pbmZvIGFzICRjb25zdGFudCA9PiAkdmFsdWUpCgkJCXsKCQkJ CS8vIHByaWRhdAoJCQkJJHF1ZXJ5ID0gIklOU0VSVCBJTlRPIGAiLlBGWC4idHhwX2xhbmdg ICggYGlkYCAsIGBsYW5nYCAsIGBuYW1lYCAsIGBldmVudGAgLCBgZGF0YWAgLCBgbGFzdG1v ZGAgKSBWQUxVRVMgKCcnLCAnY3MtY3onLCAnJGNvbnN0YW50JywgJ21kX3ZlcnNpb25zJywg JyR2YWx1ZScsIE5PVyggKSk7IjsKCQkJCSRyZXN1bHQgPSBteXNxbF9xdWVyeSgkcXVlcnkp OwoJCQl9CgkJfQoJCS8vIGVuZ2xpc2gKCQllbHNlIGlmICgkbGFuZ19uYW1lID09ICJlbiIp CgkJewoJCQkvLyBtYW0gYW5nbGljdGludSwgdGFrIG5hc3Rhdml0IG9iZWNuZSBrb2RvdmFu aQoJCQkkcmVzdWx0ID0gbXlzcWxfcXVlcnkoIlNFVCBOQU1FUyAndXRmOCciKTsKCQkJJHJl c3VsdCA9IG15c3FsX3F1ZXJ5KCJTRVQgQ0hBUkFDVEVSIFNFVCB1dGY4X2dlbmVyYWxfY2ki KTsKCgkJCS8vIHByb2ppdCBwb2xlIGEgcHJvdmVzdCBwcmlkYW5pCgkJCWZvcmVhY2ggKCRs YW5nX2luZm8gYXMgJGNvbnN0YW50ID0+ICR2YWx1ZSkKCQkJewoJCQkJLy8gcG9rdWQgamUg amF6eWsgZW4sIHRhayB0byBuYXN0YXZpdCBuYSBlbi11cyAgaSBlbi1nYgoJCQkJLy8gRU4t VVMKCQkJCSRxdWVyeSA9ICJJTlNFUlQgSU5UTyBgIi5QRlguInR4cF9sYW5nYCAoIGBpZGAg LCBgbGFuZ2AgLCBgbmFtZWAgLCBgZXZlbnRgICwgYGRhdGFgICwgYGxhc3Rtb2RgICkgVkFM VUVTICgnJywgJ2VuLXVzJywgJyRjb25zdGFudCcsICdtZF92ZXJzaW9ucycsICckdmFsdWUn LCBOT1coICkpOyI7CgkJCQkkcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5KTsKCgkJCQkv LyBFTi1HQgoJCQkJJHF1ZXJ5ID0gIklOU0VSVCBJTlRPIGAiLlBGWC4idHhwX2xhbmdgICgg YGlkYCAsIGBsYW5nYCAsIGBuYW1lYCAsIGBldmVudGAgLCBgZGF0YWAgLCBgbGFzdG1vZGAg KSBWQUxVRVMgKCcnLCAnZW4tZ2InLCAnJGNvbnN0YW50JywgJ21kX3ZlcnNpb25zJywgJyR2 YWx1ZScsIE5PVyggKSk7IjsKCQkJCSRyZXN1bHQgPSBteXNxbF9xdWVyeSgkcXVlcnkpOwoJ CQl9CgkJfQoKCX0KCS8vIGtvbmVjIGluc3RhbGFjZSBqYXp5a3UKCgl9IC8vIGVuZCBmdW5j dGlvbiBtZF92ZXJzaW9uc19jcmVhdGVfdGFibGUKCgkvLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgkvLyoqKioq KioqKioqKioqKiAgIEVORCBJTlNUQUxMICAqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqCgkvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqCgoKCS8vKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCS8vKioqKioqKioqKioq KioqKiogRU5EIERFRiBDTEFTU2VzICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioK CS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioKCgoJLy90ZW50byBvYmpla3QgemFqaXN0dWplIG5hcG9qZW5pIG5h IGRhdGFiYXppLCBwcm92YWRlbmkgc3FsIGRvdGF6dSBhIHByZWR6cHJhY292YW5pIGRhdAoJ Ly9FTjogdGhpcyBvYmplY3Qgd2lsbCBwcmVwYXJlIGRhdGEgZnJvbSBEQiBmb3IgbWRfdmVy c2lvbnNfdmlldy5jbGFzcy5waHAgb3IgZm9yIG1haW4gcGx1Z2luIHRvIHdyaXRlIHRhYgoK Y2xhc3MgbWRfdmVyc2lvbnMKewoJLy9rb25zdHJ1a3RvcgoJZnVuY3Rpb24gbWRfdmVyc2lv bnMoKQoJewoJCSRyZXN1bHQgPSBteXNxbF9xdWVyeSgiU0VUIE5BTUVTICd1dGY4JyIpOwoJ CSRyZXN1bHQgPSBteXNxbF9xdWVyeSgiU0VUIENIQVJBQ1RFUiBTRVQgdWNzMl9jemVjaF9j aSIpOwoJfQoKCS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKgoJLy8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiBBRE1JTiBTSVRFICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgkvLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioKCgkvL0VOOmxvYWQgYWxsIHZlcnNpb25zIGZvciB0aGlzIGFydGlj bGUKCWZ1bmN0aW9uIExvYWRWZXJzaW9uc0ZvclRoaXNBcnRpY2xlKCRhcnRpY2xlX2lkKQoJ ewoJCSRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICIgLiBQRlggLiAibWRfdmVyc2lvbnMgd2hl cmUgYXJ0aWNsZV9pZD0kYXJ0aWNsZV9pZCBPUkRFUiBCWSB2ZXJzaW9uLGlkIERFU0MiOwoJ CS8vZWNobyAkcXVlcnk7CgkJJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCRxdWVyeSk7CgoJCS8v cHJpcHJhdml0IHBvbW9jbmUgcG9sZQoJCSRwb20gPSBhcnJheSgpOwoKCQlpZiAoKCRyZXN1 bHQpICYmIChteXNxbF9OdW1fUm93cygkcmVzdWx0KT49MSkpCgkJewoJCQl3aGlsZSAoJHJv dyA9IG15c3FsX2ZldGNoX2Fzc29jICgkcmVzdWx0KSkKCQkJewoJCQkJJHBvbVtjb3VudCgk cG9tKV09JHJvdzsKCQkJfQoJCQlyZXR1cm4gJHBvbTsKCQl9Cgl9CgoJLy9kbGUgSUQgempp c3RpLCBrdGVyYSB2ZXJ6ZSBieWxhIHZsb3plbmEgamFrbyBwb3NsZWRuaQoJLy9wcmkgdWxv emVuaSBub3ZlIHZlcnplIHogd3JpdGUgdGFidSBqZSB0cmViYSB0dXRvIHBvc2xlZG5pIHZl cnppIHpvYnJheml0CgkvL0VOOiBzaG93IGxhc3QgaW5zZXJ0ZWQgdmVyc2lvbiAtIHdoZW4g eW91IHNlbmQgdGhlIGZvcm0gZnJvbSB3cml0ZSB0YWIKCWZ1bmN0aW9uIEdldExhc3RJbnNl cnRlZFZlcnNpb25Gb3JBcnRpY2xlKCRhcnRpY2xlX2lkKQoJewoJCSRxdWVyeSA9ICJTRUxF Q1QgKiBGUk9NICIgLiBQRlggLiAibWRfdmVyc2lvbnMgd2hlcmUgYXJ0aWNsZV9pZD0kYXJ0 aWNsZV9pZCBvcmRlciBieSBJRCBkZXNjIGxpbWl0IDEiOwoJCS8vZWNobyAkcXVlcnk7CgkJ JHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCRxdWVyeSk7CgoJCS8vcHJpcHJhdml0IHBvbW9jbmUg cG9sZQoJCSRwb20gPSBhcnJheSgpOwoKCQlpZiAoKCRyZXN1bHQpICYmIChteXNxbF9OdW1f Um93cygkcmVzdWx0KT49MSkpCgkJewoJCQkkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MgKCRy ZXN1bHQpOwoJCQlyZXR1cm4gJHJvd1snaWQnXTsKCQl9Cgl9CgoJZnVuY3Rpb24gTG9hZFZl cnNpb25EZXRhaWxGb3JBcnRpY2xlKCR2ZXJzaW9uX2lkKQoJewoJCSRxdWVyeSA9ICJTRUxF Q1QgKiBGUk9NICIgLiBQRlggLiAibWRfdmVyc2lvbnMgd2hlcmUgaWQ9JHZlcnNpb25faWQg bGltaXQgMSI7CgkJLy9lY2hvICRxdWVyeTsKCQkkcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHF1 ZXJ5KTsKCgkJLy9wcmlwcmF2aXQgcG9tb2NuZSBwb2xlCgkJJHBvbSA9IGFycmF5KCk7CgoJ CWlmICgoJHJlc3VsdCkgJiYgKG15c3FsX051bV9Sb3dzKCRyZXN1bHQpPj0xKSkKCQl7CgkJ CSRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYyAoJHJlc3VsdCk7CgkJCXJldHVybiAkcm93OwoJ CX0KCX0KCgoJZnVuY3Rpb24gRmluZExhc3RWZXJzaW9uRm9yVGhpc0FydGljbGUoJGFydGlj bGVfaWQpCgl7CgkJJHF1ZXJ5ID0gIlNFTEVDVCBNQVgodmVyc2lvbikgRlJPTSAiIC4gUEZY IC4gIm1kX3ZlcnNpb25zIHdoZXJlIGFydGljbGVfaWQ9JGFydGljbGVfaWQiOwoJCS8vZWNo byAkcXVlcnk7CgkJJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCRxdWVyeSk7CgoJCSR2ZXJzaW9u ID0gMDsKCQlAJHZlcnNpb24gPSBteXNxbF9SZXN1bHQoJHJlc3VsdCwgMCwgIk1BWCh2ZXJz aW9uKSIpOwoKCQkvLyBmaXhhY2UKCQlpZiAodHJpbSgkdmVyc2lvbikgPT0gIiIpICR2ZXJz aW9uID0gMDsKCgkJcmV0dXJuICR2ZXJzaW9uOwoJfQoKCgkvL3ZyYXRpIG5hc2xlZHVqaWNp IHZvbG5vdSB2ZXJ6aSBwcm8gY2xhbmVrIC0gcHJvIHdyaXRlIHRhYgoJLy9FTjogZ2V0IHRo ZSBuZXcgdmVyc2lvbiBudW1iZXIgZm9yIHRoaXMgYXJ0aWNsZQoJZnVuY3Rpb24gR2V0TmV3 VmVyc2lvbk51bWJlckZvclRoaXNBcnRpY2xlKCRhcnRpY2xlX2lkKQoJewoJCSRjaXNsbyA9 ICR0aGlzLT5GaW5kTGFzdFZlcnNpb25Gb3JUaGlzQXJ0aWNsZSgkYXJ0aWNsZV9pZCk7CgkJ JGNpc2xvID0gJGNpc2xvICsgMTsKCgkJcmV0dXJuICRjaXNsbzsKCX0KCglmdW5jdGlvbiBM b2FkQ3VycmVudEFydGljbGUoJGFydGljbGVfaWQpCgl7CgkJJHF1ZXJ5ID0gIlNFTEVDVCAq IEZST00gIiAuIFBGWCAuICJ0ZXh0cGF0dGVybiB3aGVyZSBJRD0kYXJ0aWNsZV9pZCBsaW1p dCAxIjsKCQkvL2VjaG8gJHF1ZXJ5OwoJCSRyZXN1bHQgPSBteXNxbF9xdWVyeSgkcXVlcnkp OwoKCQkvL3ByaXByYXZpdCBwb21vY25lIHBvbGUKCQkkcG9tID0gYXJyYXkoKTsKCgkJaWYg KCgkcmVzdWx0KSAmJiAobXlzcWxfTnVtX1Jvd3MoJHJlc3VsdCk+PTEpKQoJCXsKCQkJJHJv dyA9IG15c3FsX2ZldGNoX2Fzc29jICgkcmVzdWx0KTsKCQkJcmV0dXJuICRyb3c7CgkJfQoJ fQoKCWZ1bmN0aW9uIEdldE51bWJlck9mQXJ0aWNsZXMoKQoJewoJCSRxdWVyeSA9ICJTRUxF Q1QgY291bnQoSWQpIEZST00gIiAuIFBGWCAuICJ0ZXh0cGF0dGVybiI7CgkJLy9lY2hvICRx dWVyeTsKCQkkcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5KTsKCgkJaWYgKCgkcmVzdWx0 KSAmJiAobXlzcWxfTnVtX1Jvd3MoJHJlc3VsdCk+PTEpKQoJCXsKCQkJJHJvdyA9IG15c3Fs X2ZldGNoX2Fzc29jICgkcmVzdWx0KTsKCQkJaWYgKCRyb3dbImNvdW50KElkKSJdID09ICIi KSAkcm93WyJjb3VudChJZCkiXT0wOwoKCQkJcmV0dXJuICRyb3dbImNvdW50KElkKSJdOwoJ CX0KCX0KCglmdW5jdGlvbiBMb2FkQWxsQXJ0aWNsZXMoJHBhZ2U9MSwgJGNvdW50PTUwLCAk c29ydD0iSWQiLCAkZGlyPSJERVNDIikKCXsKCQkvL0VOOiBwYWdlIC0gbnVtYmVyIG9mIHBh Z2UsIGNvdW50IC0gbnVtYmVyIG9mIHJlY29yZHMgb24gdGhlIHBhZ2UsIHNvcnQgLSBuYW1l IG9mIGNvbHVtbiwgZGlyIC0gbm9uZSBvciBERVNDCgkJaWYgKCRkaXIgPT0gImRzYyIpICRk aXIgPSAiREVTQyI7CgkJZWxzZSAkZGlyID0gIiI7CgoJCWlmICgkc29ydCA9PSAiIikgJG9y ZGVyX3BvbSA9ICIiOwoJCWVsc2UgJG9yZGVyX3BvbSA9ICJPUkRFUiBCWSI7CgoJCSRmcm9t ID0gKCRwYWdlIC0gMSkgKiAkY291bnQ7CgoJCSRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICIg LiBQRlggLiAidGV4dHBhdHRlcm4gJG9yZGVyX3BvbSAkc29ydCAkZGlyIGxpbWl0ICRmcm9t LCAkY291bnQgIjsKCQkvL2VjaG8gJHF1ZXJ5OwoJCSRyZXN1bHQgPSBteXNxbF9xdWVyeSgk cXVlcnkpOwoKCQkvL3ByaXByYXZpdCBwb21vY25lIHBvbGUKCQkvL0VOOiBhcnJheSBmb3Ig cmVzdWx0CgkJJHBvbSA9IGFycmF5KCk7CgoJCWlmICgoJHJlc3VsdCkgJiYgKG15c3FsX051 bV9Sb3dzKCRyZXN1bHQpPj0xKSkKCQl7CgkJCXdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hf YXNzb2MgKCRyZXN1bHQpKQoJCQl7CgkJCQkkcm93WyJ2ZXJzaW9uc19udW1iZXIiXT0kdGhp cy0+Q291bnRWZXJzaW9uc0ZvckFydGljbGUoJHJvd1siSUQiXSk7CgkJCQkkcG9tW2NvdW50 KCRwb20pXT0kcm93OwoJCQl9CgkJCXJldHVybiAkcG9tOwoJCX0KCX0KCgkvL3RvdG8gbmFj dGUgc2V6bmFtIHNla2NpIHogdGFidWxreSBjbGFua3UsIG5hY3RlIHRvIGplbiB0eSBzZWtj ZSwga3RlcmUganNvdSBwb3V6aXR5CgkvL0VOOiB0aGlzIHdpbGwgbG9hZCBhbGwgc2VjdGlv biBmcm9tIGFydGljbGUgdGFibGUgLSBvbmx5IHNlY3Rpb24gd2l0aCBzb21lIGFydGljbGVz IDotKQoJZnVuY3Rpb24gTG9hZEFsbFNlY3Rpb25zRnJvbUFydGljbGVzKCkKCXsKCQkkcXVl cnkgPSAiU0VMRUNUIFNlY3Rpb24gRlJPTSAiIC4gUEZYIC4gInRleHRwYXR0ZXJuIGdyb3Vw IGJ5IFNlY3Rpb24iOwoJCS8vZWNobyAkcXVlcnk7CgkJJHJlc3VsdCA9IG15c3FsX3F1ZXJ5 KCRxdWVyeSk7CgoJCS8vcHJpcHJhdml0IHBvbW9jbmUgcG9sZQoJCSRwb20gPSBhcnJheSgp OwoKCQlpZiAoKCRyZXN1bHQpICYmIChteXNxbF9OdW1fUm93cygkcmVzdWx0KT49MSkpCgkJ ewoJCQl3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jICgkcmVzdWx0KSkKCQkJewoJ CQkJJHBvbVtjb3VudCgkcG9tKV09JHJvd1snU2VjdGlvbiddOwoJCQl9CgkJCXJldHVybiAk cG9tOwoJCX0KCX0KCgkvL3N0ZWpuZSBqYWtvIG5hY2lzdCBzZWtjZSB6IGNsYW5rdQoJLy9F Tjogc2FtZSBhcyBzZWN0aW9ucyBmcm9tIGFydGljbGVzCglmdW5jdGlvbiBMb2FkQWxsQ2F0 ZWdvcmllczFGcm9tQXJ0aWNsZXMoKQoJewoJCSRxdWVyeSA9ICJTRUxFQ1QgQ2F0ZWdvcnkx IEZST00gIiAuIFBGWCAuICJ0ZXh0cGF0dGVybiBncm91cCBieSBDYXRlZ29yeTEiOwoJCS8v ZWNobyAkcXVlcnk7CgkJJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCRxdWVyeSk7CgoJCS8vcHJp cHJhdml0IHBvbW9jbmUgcG9sZQoJCSRwb20gPSBhcnJheSgpOwoKCQlpZiAoKCRyZXN1bHQp ICYmIChteXNxbF9OdW1fUm93cygkcmVzdWx0KT49MSkpCgkJewoJCQl3aGlsZSAoJHJvdyA9 IG15c3FsX2ZldGNoX2Fzc29jICgkcmVzdWx0KSkKCQkJewoJCQkJJHBvbVtjb3VudCgkcG9t KV09JHJvd1snQ2F0ZWdvcnkxJ107CgkJCX0KCQkJcmV0dXJuICRwb207CgkJfQoJfQoKCWZ1 bmN0aW9uIExvYWRBbGxDYXRlZ29yaWVzMkZyb21BcnRpY2xlcygpCgl7CgkJJHF1ZXJ5ID0g IlNFTEVDVCBDYXRlZ29yeTIgRlJPTSAiIC4gUEZYIC4gInRleHRwYXR0ZXJuIGdyb3VwIGJ5 IENhdGVnb3J5MiI7CgkJLy9lY2hvICRxdWVyeTsKCQkkcmVzdWx0ID0gbXlzcWxfcXVlcnko JHF1ZXJ5KTsKCgkJLy9wcmlwcmF2aXQgcG9tb2NuZSBwb2xlCgkJJHBvbSA9IGFycmF5KCk7 CgoJCWlmICgoJHJlc3VsdCkgJiYgKG15c3FsX051bV9Sb3dzKCRyZXN1bHQpPj0xKSkKCQl7 CgkJCXdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MgKCRyZXN1bHQpKQoJCQl7CgkJ CQkkcG9tW2NvdW50KCRwb20pXT0kcm93WydDYXRlZ29yeTInXTsKCQkJfQoJCQlyZXR1cm4g JHBvbTsKCQl9Cgl9CgoJLy9FTjogZmluZCBzb21lIGFydGljbGVzCglmdW5jdGlvbiBGaW5k QXJ0aWNsZXMoJHdpdGhfdmVyc2lvbnNfb25seSwkc2VjdGlvbiwgJGNhdGVnb3J5MSwgJGNh dGVnb3J5MiwgJHRpdGxlLCAkYm9keSkKCXsKCQkkd2hlcmUgPSAnJzsKCQlpZiAoJHNlY3Rp b24gIT0gJycpICR3aGVyZSA9ICJ3aGVyZSBzZWN0aW9uID0gJyRzZWN0aW9uJyAiOwoJCWlm ICgkY2F0ZWdvcnkxICE9ICcnKQoJCXsKCQkJaWYgKCR3aGVyZSAhPSAnJykgJHdoZXJlLj0i QU5EIGNhdGVnb3J5MT0nJGNhdGVnb3J5MScgIjsKCQkJZWxzZSAkd2hlcmUgPSAid2hlcmUg Y2F0ZWdvcnkxID0gJyRjYXRlZ29yeTEnIjsKCQl9CgkJaWYgKCRjYXRlZ29yeTIgIT0gJycp CgkJewoJCQlpZiAoJHdoZXJlICE9ICcnKSAkd2hlcmUuPSJBTkQgY2F0ZWdvcnkyPSckY2F0 ZWdvcnkyJyAiOwoJCQllbHNlICR3aGVyZSA9ICJ3aGVyZSBjYXRlZ29yeTIgPSAnJGNhdGVn b3J5MiciOwoJCX0KCQlpZiAoJHRpdGxlICE9ICcnKQoJCXsKCQkJaWYgKCR3aGVyZSAhPSAn JykgJHdoZXJlLj0iQU5EIHRpdGxlIGxpa2UgJyR0aXRsZScgIjsKCQkJZWxzZSAkd2hlcmUg PSAid2hlcmUgdGl0bGUgbGlrZSAnJSR0aXRsZSUnIjsKCQl9CgkJaWYgKCRib2R5ICE9ICcn KQoJCXsKCQkJaWYgKCR3aGVyZSAhPSAnJykgJHdoZXJlLj0iQU5EIGJvZHkgbGlrZSAnJGJv ZHknICI7CgkJCWVsc2UgJHdoZXJlID0gIndoZXJlIGJvZHkgbGlrZSAnJSRib2R5JSciOwoJ CX0KCgkJJHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gIiAuIFBGWCAuICJ0ZXh0cGF0dGVybiAk d2hlcmUgT1JERVIgQlkgSWQgREVTQyI7CgkJLy9lY2hvICRxdWVyeTsKCQkkcmVzdWx0ID0g bXlzcWxfcXVlcnkoJHF1ZXJ5KTsKCgkJLy9wcmlwcmF2aXQgcG9tb2NuZSBwb2xlCgkJJHBv bSA9IGFycmF5KCk7CgoJCWlmICgoJHJlc3VsdCkgJiYgKG15c3FsX051bV9Sb3dzKCRyZXN1 bHQpPj0xKSkKCQl7CgkJCXdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MgKCRyZXN1 bHQpKQoJCQl7CgkJCQkkcm93WyJ2ZXJzaW9uc19udW1iZXIiXT0kdGhpcy0+Q291bnRWZXJz aW9uc0ZvckFydGljbGUoJHJvd1siSUQiXSk7CgoJCQkJaWYgKCR3aXRoX3ZlcnNpb25zX29u bHkgPT0gInllcyIpCgkJCQl7CgkJCQkJLy9wcmlkYW0gamVuIHBva3VkIG1hIGRhbnkgY2xh bmVrIHZlcnppCgkJCQkJLy9FTjogSSB3aWxsIGFkZCBpdCBvbmx5IGluIHRoZSBjYXNlLCB0 aGF0IHRoaXMgYXJ0aWNsZSBoYXMgc29tZSB2ZXJzaW9ucwoJCQkJCWlmICgkcm93WyJ2ZXJz aW9uc19udW1iZXIiXSA+IDApCgkJCQkJCSRwb21bY291bnQoJHBvbSldPSRyb3c7CgkJCQl9 CgkJCQllbHNlCgkJCQkJJHBvbVtjb3VudCgkcG9tKV09JHJvdzsKCQkJfQoJCQlyZXR1cm4g JHBvbTsKCQl9Cgl9CgoJLy9FTjogZ2V0IG51bWJlciBvZiB2ZXJzaW9ucyBmb3IgdGhlIGFy dGljbGUKCWZ1bmN0aW9uIENvdW50VmVyc2lvbnNGb3JBcnRpY2xlKCRhcnRpY2xlX2lkKQoJ ewoJCSRxdWVyeSA9ICJTRUxFQ1QgY291bnQoaWQpIEZST00gIiAuIFBGWCAuICJtZF92ZXJz aW9ucyB3aGVyZSBhcnRpY2xlX2lkPSRhcnRpY2xlX2lkIjsKCQkvL2VjaG8gJHF1ZXJ5OwoJ CSRyZXN1bHQgPSBteXNxbF9xdWVyeSgkcXVlcnkpOwoJCWlmICgoJHJlc3VsdCkgJiYgKG15 c3FsX051bV9Sb3dzKCRyZXN1bHQpPj0xKSkKCQl7CgkJCSRyb3cgPSBteXNxbF9mZXRjaF9h c3NvYygkcmVzdWx0KTsKCQkJaWYgKCRyb3dbJ2NvdW50KGlkKSddID09ICIiKSAkcm93Wydj b3VudChpZCknXT0wOwoJCQlyZXR1cm4gJHJvd1snY291bnQoaWQpJ107CgkJfQoJfQoKCS8v RU46IGFkZCB2ZXJzaW9uIGZvciB0aGUgYXJ0aWNsZQoJZnVuY3Rpb24gQWRkVmVyc2lvbkdv KCRhcnRpY2xlX2lkLCAkdmVyc2lvbiwgJGNvbW1lbnQsICR0aXRsZSwgJGJvZHksICRib2R5 X2h0bWwpCgl7CgkJJGFydGljbGVfaWQrPTA7CgkJJHZlcnNpb24gKz0gMDsKCgkJLy8gbmFj aXN0IG9yaWdpbmFsLCB2eml0IGplaG8gZGF0dW0gTGFzdG1vZCBhIHVsb3ppdCB0byBkbyBj cmVhdGVkX2RhdGUKCQkvLyR0eHBfYXJ0aWNsZSA9ICR0aGlzLT5Mb2FkQ3VycmVudEFydGlj bGUoJGFydGljbGVfaWQpOwoJCS8vJGNyZWF0ZWRfZGF0ZSA9ICR0eHBfYXJ0aWNsZVsiTGFz dE1vZCJdOwoKCQkkcXVlcnkgPSAiaW5zZXJ0IGludG8gIiAuIFBGWCAuICJtZF92ZXJzaW9u cyAoYGFydGljbGVfaWRgICwgYHZlcnNpb25gICwgYGNvbW1lbnRgICxgVGl0bGVgLCBgQm9k eWAgLCBgQm9keV9odG1sYCAsIGBjcmVhdGVkX2RhdGVgKSB2YWx1ZXMgKCRhcnRpY2xlX2lk LCAkdmVyc2lvbiwnJGNvbW1lbnQnLCckdGl0bGUnLCckYm9keScsJyRib2R5X2h0bWwnLCBu b3coKSk7IjsKCQkvL2VjaG8gJHF1ZXJ5OwoJCSRyZXN1bHQgPSBteXNxbF9xdWVyeSgkcXVl cnkpOwoJCWlmICgkcmVzdWx0KSByZXR1cm4gdHJ1ZTsKCQllbHNlIHJldHVybiBmYWxzZTsK CX0KCgkvKgoJZnVuY3Rpb24gVXBkYXRlVmVyc2lvbkdvT2xkKCR2ZXJzaW9uX2lkLCAkdmVy c2lvbiwgJGNvbW1lbnQsICR0aXRsZSwgJGJvZHksICRib2R5X2h0bWwpCgl7CgkJJHF1ZXJ5 ID0gInVwZGF0ZSAiIC4gUEZYIC4gIm1kX3ZlcnNpb25zIHNldCBgdmVyc2lvbmA9JyR2ZXJz aW9uJyAsIGBjb21tZW50YD0nJGNvbW1lbnQnICxgVGl0bGVgPSckdGl0bGUnLCBgQm9keWA9 JyRib2R5JyAsIGBCb2R5X2h0bWxgPSckYm9keV9odG1sJyB3aGVyZSBpZD0kdmVyc2lvbl9p ZCBsaW1pdCAxIjsKCQkvL2VjaG8gJHF1ZXJ5OwoJCSRyZXN1bHQgPSBteXNxbF9xdWVyeSgk cXVlcnkpOwoJCWlmICgkcmVzdWx0KSByZXR1cm4gdHJ1ZTsKCQllbHNlIHJldHVybiBmYWxz ZTsKCX0qLwoKCWZ1bmN0aW9uIFVwZGF0ZVZlcnNpb25HbygkdmVyc2lvbl9pZCwgJHZlcnNp b24sICRjb21tZW50KQoJewoJCSRxdWVyeSA9ICJ1cGRhdGUgIiAuIFBGWCAuICJtZF92ZXJz aW9ucyBzZXQgYHZlcnNpb25gPSckdmVyc2lvbicgLCBgY29tbWVudGA9JyRjb21tZW50JyB3 aGVyZSBpZD0kdmVyc2lvbl9pZCBsaW1pdCAxIjsKCQkvL2VjaG8gJHF1ZXJ5OwoJCSRyZXN1 bHQgPSBteXNxbF9xdWVyeSgkcXVlcnkpOwoJCWlmICgkcmVzdWx0KSByZXR1cm4gdHJ1ZTsK CQllbHNlIHJldHVybiBmYWxzZTsKCX0KCgkvL25haHJhZGl0IG9ic2FoIGNsYW5rdSwgZGF0 eSB6IGRhbmUgdmVyemUKCS8vRU46IHJlcGxhY2UgdGhlIGNvbnRlbnQgb2YgdGhlIGFydGlj bGUgd2l0aCB0aGUgY29udGVudCBmcm9tIHRoZSB2ZXJzaW9uCglmdW5jdGlvbiBBY3RpdmF0 ZVZlcnNpb25HbygkYXJ0aWNsZV9pZCwgJHZlcnNpb25faWQpCgl7CgkJLy8xLiBkZWFrdGl2 b3ZhdCB2c2VjaG55IGFrdGl2bmkgdmVyemUgcHJvIHRlbnRvIGNsYW5lawoJCS8vRU46IGRl YWN0aXZhY2UgYWxsIGFjdGl2ZSB2ZXJzaW9ucyBmb3IgdGhpcyBhcnRpY2xlCgkJJHF1ZXJ5 ID0gInVwZGF0ZSAiIC4gUEZYIC4gIm1kX3ZlcnNpb25zIHNldCBgYWN0aXZlYD0wIHdoZXJl IGFydGljbGVfaWQ9JGFydGljbGVfaWQiOwoJCS8vZWNobyAkcXVlcnk7CgkJJHJlc3VsdCA9 IG15c3FsX3F1ZXJ5KCRxdWVyeSk7CgoJCS8vIDIuIG5hY2lzdCBUWFAgY2xhbmVrIGEgcHJv dmVzdCBCQUNLVVAgbWV6aSB2ZXJ6ZQoJCSR0eHBfYXJ0aWNsZSA9ICR0aGlzLT5Mb2FkQ3Vy cmVudEFydGljbGUoJGFydGljbGVfaWQpOwoJCSR2ZXJzaW9uX251bWJlciA9ICR0aGlzLT5H ZXROZXdWZXJzaW9uTnVtYmVyRm9yVGhpc0FydGljbGUoJGFydGljbGVfaWQpOwoJCSRjb21t ZW50ID0gIjwgQkFDS1VQID4iOwoJCSR0aXRsZSA9ICR0eHBfYXJ0aWNsZVsiVGl0bGUiXTsK CQkkYm9keSA9ICR0eHBfYXJ0aWNsZVsiQm9keSJdOwoJCSRib2R5X2h0bWwgPSAkdHhwX2Fy dGljbGVbIkJvZHlfaHRtbCJdOwoKCQkvLyBwcm92ZXN0IGJhY2t1cAoJCSRxdWVyeSA9ICJp bnNlcnQgaW50byAiIC4gUEZYIC4gIm1kX3ZlcnNpb25zIChgYXJ0aWNsZV9pZGAgLCBgdmVy c2lvbmAgLCBgY29tbWVudGAgLGBUaXRsZWAsIGBCb2R5YCAsIGBCb2R5X2h0bWxgICwgYGNy ZWF0ZWRfZGF0ZWApIHZhbHVlcyAoJGFydGljbGVfaWQsICR2ZXJzaW9uX251bWJlciwnJGNv bW1lbnQnLCckdGl0bGUnLCckYm9keScsJyRib2R5X2h0bWwnLCBub3coKSk7IjsKCQkvL2Vj aG8gJHF1ZXJ5OwoJCSRyZXN1bHQgPSBteXNxbF9xdWVyeSgkcXVlcnkpOwoKCgkJLy8zLiBu YWhyYWRpdCBha3R1YWxuaSBjbGFuZWsgcyB0aW10byBpZAoJCS8vRU46IGxvYWQgdGhpcyB2 ZXJzaW9uCgkJLy9uYWNpc3QgdHV0byB2ZXJ6aQoJCSRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9N ICIgLiBQRlggLiAibWRfdmVyc2lvbnMgd2hlcmUgaWQ9JHZlcnNpb25faWQgbGltaXQgMSI7 CgkJLy9lY2hvICRxdWVyeTsKCQkkcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5KTsKCgkJ Ly9wcmlwcmF2aXQgcG9tb2NuZSBwb2xlCgkJJHBvbSA9IGFycmF5KCk7CgoJCWlmICgoJHJl c3VsdCkgJiYgKG15c3FsX051bV9Sb3dzKCRyZXN1bHQpPj0xKSkKCQl7CgkJCSRyb3cgPSBt eXNxbF9mZXRjaF9hc3NvYyAoJHJlc3VsdCk7CgoJCQkvLyBkYXRhIHogdmVyemUKCQkJJHRp dGxlPSRyb3dbJ1RpdGxlJ107CgkJCSRib2R5ID0gJHJvd1snQm9keSddOwoJCQkkYm9keV9o dG1sID0gJHJvd1snQm9keV9odG1sJ107CgkJCSRsYXN0X21vZCA9ICRyb3dbJ2NyZWF0ZWRf ZGF0ZSddOwoKCQkJLy91eiBtYW0gcG96YWRvdmFub3UgdmVyemksIHRhayB0byBqZXN0ZSB1 cGRhdG92YXQgZG8gdG9obyBjbGFua3UKCQkJLy9FTjogdXBkYXRlIHRoZSBhcnRpY2xlCgkJ CSRxdWVyeSA9ICJ1cGRhdGUgIiAuIFBGWCAuICJ0ZXh0cGF0dGVybiBzZXQgYFRpdGxlYD0n JHRpdGxlJywgYEJvZHlgPSckYm9keScgLCBgQm9keV9odG1sYD0nJGJvZHlfaHRtbCcsIGBM YXN0bW9kYD0nJGxhc3RfbW9kJyB3aGVyZSBpZD0kYXJ0aWNsZV9pZCBsaW1pdCAxIjsKCQkJ Ly9lY2hvICRxdWVyeTsKCQkJJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCRxdWVyeSk7CgkJfQoK CgkJLy80LiBvem5hY2l0IHR1dG8gdmVyemkgamFrbyBha3Rpdm5pCgkJLy9FTjogc2V0IHRo aXMgdmVyc2lvbiBhcyBhY3RpdmUKCQkkcXVlcnkgPSAidXBkYXRlICIgLiBQRlggLiAibWRf dmVyc2lvbnMgc2V0IGBhY3RpdmVgPTEgd2hlcmUgaWQ9JHZlcnNpb25faWQgbGltaXQgMSI7 CgkJLy9lY2hvICRxdWVyeTsKCQkkcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5KTsKCgkJ aWYgKCRyZXN1bHQpIHJldHVybiB0cnVlOwoJCWVsc2UgcmV0dXJuIGZhbHNlOwoJfQoKCWZ1 bmN0aW9uIERlbGV0ZVZlcnNpb25Gb3JBcnRpY2xlKCR2ZXJzaW9uX2lkLCAkYXJ0aWNsZV9p ZCkKCXsKCQkkcXVlcnkgPSAiREVMRVRFIEZST00gIiAuIFBGWCAuICJtZF92ZXJzaW9ucyB3 aGVyZSBpZD0kdmVyc2lvbl9pZCBhbmQgYXJ0aWNsZV9pZD0kYXJ0aWNsZV9pZCBsaW1pdCAx OyI7CgkJLy9lY2hvICRxdWVyeTsKCQkkcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5KTsK CQlpZiAoJHJlc3VsdCkgcmV0dXJuIHRydWU7CgkJZWxzZSByZXR1cm4gZmFsc2U7Cgl9CgoJ Ly8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqCgkvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq ICBFTkQgQURNSU4gU0lURSAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCS8vKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKgoKfSAvLyBlbmQgY2xhc3MgbWRfdmVyc2lvbnMKCgoKLy90b3RvIGplIG9iamVrdCBw cm8gem9icmF6b3ZhbmkgZGF0CgkvL0VOOiB0aGlzIG9iamVjdCB3aWxsIHNob3cgdGhlIGRh dGEKCmNsYXNzIG1kX3ZlcnNpb25zX3ZpZXcKewoJLy9vYmpla3QgcHJvIG5hY3RlbmkgZGF0 Cgl2YXIgJG1kX3ZlcnNpb25zOwoKCS8va29uc3RydWt0b3IKCWZ1bmN0aW9uIG1kX3ZlcnNp b25zX3ZpZXcoKQoJewoJCS8vcG90cmVidWppIG9iamVrdCBwcm8gbmFjaXRhbmkgZGF0CgkJ Ly9FTjogSSBuZWVkIHRoZSBvYmplY3QgZm9yIGxvYWRpbmcgZGF0YSBmcm9tIERCCgkJJHRo aXMtPm1kX3ZlcnNpb25zID0gbmV3IG1kX3ZlcnNpb25zKCk7CgkJLy8kdGhpcy0+cHJpbnRy KCRfUkVRVUVTVCk7Cgl9CgoJLy9wb21vY25hIGZjZSBwcm8gdnlwaXMgZGF0IG5hIG1vbml0 b3IgLSBwcm8gdGVzdG92YW5pCglmdW5jdGlvbiBwcmludHIoJHZhbCkKCXsKICAJCWVjaG8g Ijxocj48cHJlPiI7CiAgCQlwcmludF9yKCR2YWwpOwogCSAJZWNobyAiPC9wcmU+PGhyPiI7 Cgl9CgoKCgkvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioKCS8vKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiogIEFETUlOIFNJVEUgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoJLy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqCgoJLy9FTjogbmF2aWdhdGlvbiBmb3IgbXkgdGFiCglmdW5jdGlvbiBW aWV3TmF2aWdhdGlvbigpCgl7CgkJLy8kbGlua19uZXcgID0gIjxhIGhyZWY9XCI/ZXZlbnQ9 bWRfdmVyc2lvbnMmc3RlcD1hZGRfdmVyc2lvblwiPiIuZ1R4dCgnbWRfdmVyc2lvbl9uZXcn KS4iPC9hPiI7CgkJLy96b2JyYXppdCB1bG96ZW5lIHZlcnplCgkJJGxpbmtfdmlld192ZXJz aW9ucyAgPSAiPGEgaHJlZj1cIj9ldmVudD1tZF92ZXJzaW9uc1wiPiIuZ1R4dCgnbWRfdmVy c2lvbl92aWV3JykuIjwvYT4iOwoJCS8vbmFqaXQgY2xhbmVrCgkJLy8kbGlua19maW5kX2Fy dGljbGUgID0gIjxhIGhyZWY9XCI/ZXZlbnQ9bWRfdmVyc2lvbnMmc3RlcD1maW5kX2FydGlj bGVcIj4iLmdUeHQoJ21kX3ZlcnNpb25fZmluZF9hcnRpY2xlJykuIjwvYT4iOwoJCS8vem9i cmF6aXQgIHZzZWNobnkgY2xhbmt5CgkJLy8kbGlua192aWV3X2FydGljbGVzICA9ICI8YSBo cmVmPVwiP2V2ZW50PW1kX3ZlcnNpb25zJnN0ZXA9dmlld19hbGxfYXJ0aWNsZXNcIj4iLmdU eHQoJ21kX3ZpZXdfYXJ0aWNsZXMnKS4iPC9hPiI7CgoJCS8vc2ljZSB0byBuZW5pIHBvbW9j aSB0YWJ1bGt5IG1vYyBjaXN0ZSwgYWxlIG5lY2hjZSBzZSBtaSBrdWxpIHRvbXUgcHJpcHJh dm92YXQgZGl2CgkJZWNobyAiPHRhYmxlIHdpZHRoPVwiNzAwcHhcIiBib3JkZXI9XCIwXCIg Y2VsbHNwYWNpbmc9XCIwXCIgY2VsbHBhZGRpbmc9XCIyXCI+IjsKCQkvL25hdmlnYWNlCgkJ ZWNobyAiPHRyIGlkPVwibGlzdFwiPiI7CgkJCS8vZWNobyAiPHRkIHdpZHRoPVwiMjAwcHhc IiBoZWlnaHQ9XCIyNVwiPiRsaW5rX25ldzwvdGQ+IjsKCQkJICBlY2hvICI8dGQgIHdpZHRo PVwiMzAwcHhcIj4kbGlua192aWV3X3ZlcnNpb25zPC90ZD4iOwoJCQkvL2VjaG8gIjx0ZCB3 aWR0aD1cIjIwMHB4XCI+JGxpbmtfZmluZF9hcnRpY2xlPC90ZD4iOwoJCQkvL2VjaG8gIjx0 ZCB3aWR0aD1cIjMwMHB4XCI+JGxpbmtfdmlld19hcnRpY2xlczwvdGQ+IjsKCQllY2hvICI8 L3RyPiI7CgkJZWNobyAiPHRyPjx0ZD4mbmJzcDs8L3RkPjwvdHI+IjsKCgkJZWNobyAiPC90 YWJsZT4iOwoJfQoKCgoJLy9wcmlkYXQgdmVyemksIHpvYnJheml0IGZvcm0gcHJvIHByaWRh bmkgbm92ZSB2ZXJ6ZQoJLy9FTjogYWRkIHZlcnNpb24gLSBmb3JtLCBhZGRfdmVyc2lvbl9n byAtIGFkZCBuZXcgdmVyc2lvbgoJZnVuY3Rpb24gTmV3VmVyc2lvbkZvckFydGljbGUoKQoJ ewoJCS8vRU46ICRwcmVmcyAtIHByZWZlcmVuY2VzIGZvciB0ZXh0cGF0dGVybiwgJHR4cGNm ZyAtIGNvbnN0YW50cwoJCWdsb2JhbCAkdHhwY2ZnLCAkcHJlZnM7CgoJCSRhY3Rpb24gPSBA JF9SRVFVRVNUWydhY3Rpb24nXTsKCQkvL2VjaG8gJGFjdGlvbjsKCQkkYXJ0aWNsZV9pZCA9 IEAkX1JFUVVFU1RbJ2FydGljbGVfaWQnXTsKCgkJZWNobyAiPGgxPiIuZ1R4dCgnbWRfdmVy c2lvbl9uZXdfdmVyc2lvbl9mb3JfYXJ0aWNsZScpLiI8L2gxPiI7CgoJCWlmIChpc3NldCgk X1JFUVVFU1RbJ0lEJ10pKQoJCXsKCQkJaWYgKCRhcnRpY2xlX2lkID09ICIiKQoJCQl7CgkJ CQkkYXJ0aWNsZV9pZCA9ICRfUkVRVUVTVFsnSUQnXTsKCQkJfQoJCX0KCgkJaWYgKCRhcnRp Y2xlX2lkID09ICIiKQoJCXsKCQkJZWNobyAiVGhlcmUgaXMgbm8gYXJ0aWNsZSBJRC4iOwoJ CQlleGl0OwoJCX0KCgkJLy8xLiBwb2t1ZCBuZW1hbSBkYXRhLCB0YWsgem9icmF6aXQgZm9y bQoJCS8vRU46IHNob3cgdGhlIGZvcm0KCQlpZiAoJGFjdGlvbiA9PSAiIikKCQl7CgkJCS8v RU46IHlvdSBjYW4gYWRkIG5ldyB2ZXJzaW9uIEZST00gV1JJVEUgVEFCIE9OTFkKCQkJLy9u YWNpc3QgZGF0YSBjbGFua3UgcyB0aW10byBJRCBhIHpvYnJheml0IGplICsgc3BvY2l0YXQg Y2lzbG8gYWt0dWFsbmkgdmVyemUgYSB6b2JyYXppdCBobywgemFyb3ZlbiBwb2QgZm9ybXVs YXJlbSB6b2JyYXppdCBpIHNlem5hbQoJCQkvL2V4aXN0dWppY2ggdmVyemkgdG9ob3RvIGNs YW5rdSBzIGtvbWVudGFyaQoKCQkJJGN1cnJlbnRfYXJ0aWNsZSA9ICR0aGlzLT5tZF92ZXJz aW9ucy0+TG9hZEN1cnJlbnRBcnRpY2xlKCRhcnRpY2xlX2lkKTsKCQkJLy8kdGhpcy0+cHJp bnRyKCRjdXJyZW50X2FydGljbGUpOwoKCQkJJGxhc3RfdmVyc2lvbiA9ICR0aGlzLT5tZF92 ZXJzaW9ucy0+RmluZExhc3RWZXJzaW9uRm9yVGhpc0FydGljbGUoJGFydGljbGVfaWQpOwoJ CQlpZiAoJGxhc3RfdmVyc2lvbiA9PSAiIikgJGxhc3RfdmVyc2lvbiA9IGdUeHQoJ21kX3Zl cnNpb25fbm9fcHJldmlvdXNfdmVyc2lvbicpOwoKCQkJJG5ld192ZXJzaW9uID0gKGZsb2F0 KSAkbGFzdF92ZXJzaW9uICsgMTsgLy9wdXZvZG5lIDAuMSwgYWxlIG5lcHJvc2xvIHRvIHBy aSBwcm92ZWRlbmkgc3FsIGRvdGF6dQoKCQkJZWNobyAiPHRhYmxlPiI7CgkJCWVjaG8gIjxm b3JtIGFjdGlvbj1cIj9ldmVudD1tZF92ZXJzaW9ucyZzdGVwPXVwZGF0ZV92ZXJzaW9uXCIg bWV0aG9kPVwicG9zdFwiIG5hbWU9XCJmb3JtX25ld192ZXJzaW9uXCI+IjsKCQkJZWNobyAi PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiYWN0aW9uXCIgdmFsdWU9XCJ1cGRhdGVf dmVyc2lvbl9nb1wiPiI7CgkJCWVjaG8gIjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1c ImFydGljbGVfaWRcIiB2YWx1ZT1cIiRhcnRpY2xlX2lkXCI+IjsKCQkJZWNobyAiPHRyPjx0 ZD4iLmdUeHQoJ21kX3ZlcnNpb25fbGFzdF92ZXJzaW9uJykuIiZuYnNwOzo8L3RkPjx0ZD4k bGFzdF92ZXJzaW9uPC90ZD48L3RyPiI7CgkJCWVjaG8gIjx0cj48dGQ+Ii5nVHh0KCdtZF92 ZXJzaW9uX3ZlcnNpb24nKS4iJm5ic3A7OjwvdGQ+PHRkPjxpbnB1dCBuYW1lPVwidmVyc2lv blwiIHZhbHVlPVwiJG5ld192ZXJzaW9uXCIvPjwvdGQ+PC90cj4iOwoJCQllY2hvICI8dHI+ PHRkPiIuZ1R4dCgnbWRfdmVyc2lvbl9jb21tZW50JykuIiZuYnNwOzo8L3RkPjx0ZD48dGV4 dGFyZWEgbmFtZT1cImNvbW1lbnRcIiBjb2xzPVwiODBcIiByb3dzPVwiNVwiPjwvdGV4dGFy ZWE+PC90ZD48L3RyPiI7CgoJCQllY2hvICI8dHI+PHRkPiZuYnNwOzwvdGQ+PHRkPjxpbnB1 dCB0eXBlPVwic3VibWl0XCIgdmFsdWU9XCJPS1wiPjwvdGQ+PC90cj4iOwoJCQllY2hvICI8 L2Zvcm0+IjsKCgoJCQllY2hvICI8L3RhYmxlPiI7CgoJCQkvL0VOOiBvbGQsIGluIHZlcnNp b24gMC41CgkJCS8vZWNobyAiPHRyPjx0ZD4iLmdUeHQoJ1RpdGxlJykuIiZuYnNwOzo8L3Rk Pjx0ZD48aW5wdXQgbmFtZT1cIlRpdGxlXCIgdmFsdWU9XCIkY3VycmVudF9hcnRpY2xlW1Rp dGxlXVwiIHNpemU9XCI5NlwiLz48L3RkPjwvdHI+IjsKCQkJLy9lY2hvICI8dHI+PHRkPiIu Z1R4dCgnbWRfdmVyc2lvbl9ib2R5JykuIiZuYnNwOzo8L3RkPjx0ZD48dGV4dGFyZWEgbmFt ZT1cIkJvZHlcIiBjb2xzPVwiODBcIiByb3dzPVwiMjBcIj4kY3VycmVudF9hcnRpY2xlW0Jv ZHldPC90ZXh0YXJlYT48L3RkPjwvdHI+IjsKCQkJLy9lY2hvICI8dHI+PHRkPiIuZ1R4dCgn bWRfdmVyc2lvbl9ib2R5X2h0bWwnKS4iJm5ic3A7OjwvdGQ+PHRkPjx0ZXh0YXJlYSBuYW1l PVwiQm9keV9odG1sXCJjb2xzPVwiODBcIiByb3dzPVwiMjBcIj4kY3VycmVudF9hcnRpY2xl W0JvZHlfaHRtbF08L3RleHRhcmVhPjwvdGQ+PC90cj4iOwoKCQkJLy9qZW4gem9icmF6aXQK CQkJLy9FTjogZGlzcGxheSB0aGUgY29udGVudCBvbmx5OgoJCQllY2hvICIkY3VycmVudF9h cnRpY2xlW1RpdGxlXTxici8+PGJyLz4iOwoKCQkJLy9jb250ZW50IGJvZHlfaHRtbAoJCQll Y2hvICIkY3VycmVudF9hcnRpY2xlW0JvZHlfaHRtbF0iOwoKCQkJJHRoaXMtPlZpZXdWZXJz aW9uc0ZvckFydGljbGUoKTsKCQl9CgkJZWxzZQoJCXsKCQkJaWYgKCRhY3Rpb24gPT0gImFk ZF92ZXJzaW9uX2dvIikKCQkJewoJCQkJLy8yLiBwb2t1ZCBtYW0gZGF0YSwgdGFrIHByaWRh dAoJCQkJLy9FTjogYWRkIHRoaXMgdmVyc2lvbgoKCQkJCWVjaG8gZ1R4dCgnbWRfdmVyc2lv bl9hZGRfdmVyc2lvbl9nbycpOwoKCQkJCS8vJHRoaXMtPnByaW50cigkcHJlZnMpOwoJCQkJ Ly9FTjogcHJlZmVyZW5jZXMgZm9yIHRleHRwYXR0ZXJuCgkJCQlleHRyYWN0KCRwcmVmcyk7 CgoJCQkJLy9FTjpjcmVhdGUgQm9keV9odG1sOgoJCQkJJEJvZHlfaHRtbCA9ICcnOwoKCQkJ CS8vRU46IG9iamVjdCBmb3IgdXNpbmcgdGV4dGlsZQoJCQkJaW5jbHVkZV9vbmNlICdsaWIv Y2xhc3NUZXh0aWxlLnBocCc7CgkJCQkkdGV4dGlsZSA9IG5ldyBUZXh0aWxlKCk7CgoJCQkJ aWYgKEAkX1JFUVVFU1RbJ3RleHRpbGVfYm9keSddID09IExFQVZFX1RFWFRfVU5UT1VDSEVE KQoJCQkJewoJCQkJCSRCb2R5X2h0bWwgPSB0cmltKEAkX1JFUVVFU1RbJ0JvZHknXSk7CgoJ CQkJfWVsc2VpZiAoQCRfUkVRVUVTVFsndGV4dGlsZV9ib2R5J10gPT0gVVNFX1RFWFRJTEUp CgkJCQl7CgkJCQkJJEJvZHlfaHRtbCA9ICR0ZXh0aWxlLT5UZXh0aWxlVGhpcyhAJF9SRVFV RVNUWydCb2R5J10pOwoJCQkJCSRCb2R5X2h0bWwgPSB0cmltKCRCb2R5X2h0bWwpOwoKCQkJ CX1lbHNlaWYgKEAkX1JFUVVFU1RbJ3RleHRpbGVfYm9keSddID09IENPTlZFUlRfTElORUJS RUFLUykKCQkJCXsKCQkJCQkkQm9keV9odG1sID0gbmwyYnIodHJpbShAJF9SRVFVRVNUWydC b2R5J10pKTsKCQkJCX0KCQkJCS8vRU46IGVuZCBjcmVhdGUgQm9keV9odG1sCgoJCQkJJG9r ID0gJHRoaXMtPm1kX3ZlcnNpb25zLT5BZGRWZXJzaW9uR28oJGFydGljbGVfaWQsICRfUkVR VUVTVFsndmVyc2lvbiddLCBAJF9SRVFVRVNUWydjb21tZW50J10sQCRfUkVRVUVTVFsnVGl0 bGUnXSwgQCRfUkVRVUVTVFsnQm9keSddLCAkQm9keV9odG1sKTsKCQkJCWlmICgkb2spIGVj aG8gZ1R4dCgnbWRfdmVyc2lvbl9zdWNjZXNzJyk7CgkJCQllbHNlIGVjaG8gZ1R4dCgnbWRf dmVyc2lvbl9mYWlsZWQnKTsKCgkJCQllY2hvICI8YnIvPjxici8+IjsKCgkJCQkvL3pvYnJh eml0IHBvc2xlZG5pIHZsb3plbm91IHZlcnppCgkJCQkvL0VOOiBmaW5kIGxhc3QgaW5zZXJ0 ZWQgdmVyc2lvbiBmb3IgdGhpcyBhcnRpY2xlCgkJCQkkdmVyc2lvbl9pZCA9ICR0aGlzLT5t ZF92ZXJzaW9ucy0+R2V0TGFzdEluc2VydGVkVmVyc2lvbkZvckFydGljbGUoJGFydGljbGVf aWQpOwoKCQkJCS8vZWNobyAibGFzdCB2ZXJzaW9uIGlzOiAkdmVyc2lvbl9pZCI7CgoJCQkJ JHRoaXMtPlZpZXdWZXJzaW9uRGV0YWlsRm9yQXJ0aWNsZSgkdmVyc2lvbl9pZCwgJGFydGlj bGVfaWQpOwoJCQl9CgkJCWVsc2UgZWNobyAiVW5rbm93biBhY3Rpb24iOwoJCX0KCX0KCgkv LyB6b2JyYXppdCByb3pkw61seSBtZXppIHZlcnppIGEgY2xhbmtlbQoJLy8gRU46IHNob3cg ZGlmZmVyZW5jZXMgYmV0d2VlbiB2ZXJzaW9uIGFuZCBvcmlnaW5hbCBhcnRpY2xlCglmdW5j dGlvbiBTaG93RGlmZlZlcnNpb25Gb3JBcnRpY2xlKCkKCXsKCQkkYXJ0aWNsZV9pZCA9IEAk X1JFUVVFU1RbJ2FydGljbGVfaWQnXTsKCQkkdmVyc2lvbl9pZCA9IEAkX1JFUVVFU1RbJ3Zl cnNpb25faWQnXTsKCQkvLyR0aGlzLT5wcmludHIoJF9SRVFVRVNUKTsKCgkJaWYgKCRhcnRp Y2xlX2lkID09ICIiIGFuZCBAJF9SRVFVRVNUWydJRCddICE9ICIiKQoJCXsKCQkJJGFydGlj bGVfaWQgPSBAJF9SRVFVRVNUWydJRCddOwoJCX0KCgkJZWNobyAiPGgxPiIuZ1R4dCgnbWRf dmVyc2lvbl9uYXZpX3Nob3dfZGlmZicpLiI8L2gxPiI7CgoJCS8vIG5hY2lzdCBpbmZvIG8g cHV2b2RuaW0gY2xhbmt1IHogdHhwIHRhYnVsa3kKCQkkdHhwX2FydGljbGUgPSAkdGhpcy0+ bWRfdmVyc2lvbnMtPkxvYWRDdXJyZW50QXJ0aWNsZSgkYXJ0aWNsZV9pZCk7CgkJLy8kdGhp cy0+cHJpbnRyKCR0eHBfYXJ0aWNsZSk7CgoJCS8vIHZlcnNpb24KCQkkdmVyc2lvbiA9ICR0 aGlzLT5tZF92ZXJzaW9ucy0+TG9hZFZlcnNpb25EZXRhaWxGb3JBcnRpY2xlKCR2ZXJzaW9u X2lkKTsKCgoJCS8vIHJvemRpbHkKCQkvL2VjaG8gIjxoMj5EaWZmZXJlbmNlczwvaDI+IjsK CQkkbWRfdmVyc2lvbl9kaWZmID0gbmV3IG1kX3ZlcnNpb25fZGlmZigpOwoKICAgICAgICAv LyBQT1pPUjogdnN0dXB5IG11c2kgYnl0IHYgcG9saSBwbyByYWRjaWNoCiAgICAgICAgLy8g ZGlmZmVyZW5jZXMgaW4gdGl0bGVzCiAgICAgICAgJHR4cF90aXRsZSA9IGFycmF5KCk7CiAg ICAgICAgJHR4cF90aXRsZVswXSA9ICR0eHBfYXJ0aWNsZVsiVGl0bGUiXTsKICAgICAgICAk dmVyc2lvbl90aXRsZSA9IGFycmF5KCk7CiAgICAgICAgJHZlcnNpb25fdGl0bGVbMF0gPSAk dmVyc2lvblsiVGl0bGUiXTsKICAgICAgICAkZGlmZl90aXRsZSA9ICRtZF92ZXJzaW9uX2Rp ZmYtPmFycl9kaWZmKCR2ZXJzaW9uX3RpdGxlLCAkdHhwX3RpdGxlKTsKCiAgICAgICAgLy8g ZGlmZmVyZW5jZXMgaW4gYm9keQogICAgICAgICR0eHBfYm9keSA9IG5sMmJyKCR0eHBfYXJ0 aWNsZVsiQm9keSJdKTsKICAgICAgICAkdHhwX2JvZHkgPSBzcGxpdCgiPGJyIC8+IiwkdHhw X2JvZHkpOwoKICAgICAgICAkdmVyc2lvbl9ib2R5ID0gbmwyYnIoJHZlcnNpb25bIkJvZHki XSk7CiAgICAgICAgJHZlcnNpb25fYm9keSA9IHNwbGl0KCI8YnIgLz4iLCR2ZXJzaW9uX2Jv ZHkpOwogICAgICAgIC8vICR2ZXJzaW9uX2JvZHkgPSBzcGxpdCgiW258cl0iLCR2ZXJzaW9u WyJCb2R5Il0pOwoKICAgICAgICAkZGlmZl9ib2R5ID0gJG1kX3ZlcnNpb25fZGlmZi0+YXJy X2RpZmYoJHZlcnNpb25fYm9keSwgJHR4cF9ib2R5KTsKCgoJCWVjaG8gIjx0YWJsZT4iOwoJ CS8vPHRkPiIuZ1R4dCgnQXJ0aWNsZScpLiIgSWQ8L3RkPgoJCWVjaG8gIjx0ciBpZD1cImxp c3RcIj48dGQ+Jm5ic3A7PC90ZD48dGQ+YXJ0aWNsZSBpbiBUeHA8L3RkPjx0ZD4mbmJzcDsm bmJzcDsmbmJzcDs8L3RkPjx0ZD52ZXJzaW9uPC90ZD48dGQ+Jm5ic3A7Jm5ic3A7Jm5ic3A7 PC90ZD48dGQ+ZGlmZmVyZW5jZXM8L3RkPjwvdHI+IjsKCgkJZWNobyAiPHRyIGlkPVwibGlz dFwiPjx0ZD5UaXRsZTogPC90ZD48dGQ+JHR4cF9hcnRpY2xlW1RpdGxlXTwvdGQ+IjsKCQll Y2hvICI8dGQ+Jm5ic3A7Jm5ic3A7Jm5ic3A7PC90ZD4iOwoJCWVjaG8gIjx0ZD4kdmVyc2lv bltUaXRsZV08L3RkPiI7CgkJZWNobyAiPHRkPiZuYnNwOyZuYnNwOyZuYnNwOzwvdGQ+IjsK CQllY2hvICI8dGQ+JGRpZmZfdGl0bGU8L3RkPjwvdHI+IjsKCgkJZWNobyAiPHRyIGlkPVwi bGlzdFwiPjx0ZD4mbmJzcDs8L3RkPjwvdHI+IjsKCgkJZWNobyAiPHRyIGlkPVwibGlzdFwi Pjx0ZD5Cb2R5OiA8L3RkPjx0ZD4iLm5sMmJyKCR0eHBfYXJ0aWNsZVsiQm9keSJdKS4iPC90 ZD4iOwoJCWVjaG8gIjx0ZD4mbmJzcDsmbmJzcDsmbmJzcDs8L3RkPiI7CgkJZWNobyAiPHRk PiIubmwyYnIoJHZlcnNpb25bIkJvZHkiXSkuIjwvdGQ+IjsKCQllY2hvICI8dGQ+Jm5ic3A7 Jm5ic3A7Jm5ic3A7PC90ZD4iOwoJCWVjaG8gIjx0ZD4kZGlmZl9ib2R5PC90ZD48L3RyPiI7 CgoJCWVjaG8gIjwvdGFibGU+IjsKCX0KCgkvL3Z5cHNhdCBleGlzdHVqaWNpIHZlcnplIHBy byB0ZW50byBjbGFuZWsKCS8vRU46IHNob3cgdmVyc2lvbnMgZm9yIGN1cnJlbnQgYXJ0aWNs ZQoJZnVuY3Rpb24gVmlld1ZlcnNpb25zRm9yQXJ0aWNsZSgpCgl7CgkJJGFydGljbGVfaWQg PSBAJF9SRVFVRVNUWydhcnRpY2xlX2lkJ107CgkJLy8kdGhpcy0+cHJpbnRyKCRfUkVRVUVT VCk7CgoJCWlmICgkYXJ0aWNsZV9pZCA9PSAiIiBhbmQgQCRfUkVRVUVTVFsnSUQnXSAhPSAi IikKCQl7CgkJCSRhcnRpY2xlX2lkID0gQCRfUkVRVUVTVFsnSUQnXTsKCQl9CgoJCWVjaG8g IjxoMT4iLmdUeHQoJ21kX3ZlcnNpb25fc2F2ZWRfdmVyc2lvbnMnKS4iPC9oMT4iOwoKCQkv LyBuYWNpc3QgaW5mbyBvIHB1dm9kbmltIGNsYW5rdSB6IHR4cCB0YWJ1bGt5CgkJJHR4cF9h cnRpY2xlID0gJHRoaXMtPm1kX3ZlcnNpb25zLT5Mb2FkQ3VycmVudEFydGljbGUoJGFydGlj bGVfaWQpOwoJCS8vJHRoaXMtPnByaW50cigkdHhwX2FydGljbGUpOwoKCQkvLyB0aXR1bGVr IGFrdHVhbG5paG8gY2xhbmt1CgkJZWNobyAiPGgyPjxhIGhyZWY9XCJpbmRleC5waHA/ZXZl bnQ9YXJ0aWNsZSZzdGVwPWVkaXQmSUQ9JGFydGljbGVfaWRcIj48Yj4kdHhwX2FydGljbGVb VGl0bGVdPC9iPjwvYT4gKGFydGljbGVfaWQ6ICRhcnRpY2xlX2lkKTwvaDI+IjsKCQllY2hv ICI8cD5zZWN0aW9uOiAkdHhwX2FydGljbGVbU2VjdGlvbl08YnIvPiBjYXQxOiAkdHhwX2Fy dGljbGVbQ2F0ZWdvcnkxXTxici8+IGNhdDI6ICR0eHBfYXJ0aWNsZVtDYXRlZ29yeTJdIDxi ci8+PC9wPiI7CgoJCSR2ZXJzaW9ucyA9ICR0aGlzLT5tZF92ZXJzaW9ucy0+TG9hZFZlcnNp b25zRm9yVGhpc0FydGljbGUoJGFydGljbGVfaWQpOwoJCS8vJHRoaXMtPnByaW50cigkdmVy c2lvbnMpOwoKCQllY2hvICI8dGFibGU+IjsKCQkvLzx0ZD4iLmdUeHQoJ0FydGljbGUnKS4i IElkPC90ZD4KCQllY2hvICI8dHIgaWQ9XCJsaXN0XCI+PHRkPiIuZ1R4dCgnbWRfdmVyc2lv bl92ZXJzaW9uJykuIjwvdGQ+PHRkPiIuZ1R4dCgnbWRfdmVyc2lvbl9jb21tZW50JykuIjwv dGQ+PHRkPiIuZ1R4dCgnVGl0bGUnKS4iPC90ZD48dGQ+Ii5nVHh0KCdTYXZlZCcpLiI8L3Rk Pjx0ZD4mbmJzcDs8L3RkPjx0ZD4mbmJzcDs8L3RkPjwvdHI+IjsKCgkJaWYgKCR2ZXJzaW9u cyAhPSBudWxsKQoJCWZvcmVhY2ggKCR2ZXJzaW9ucyBhcyAkdmVyc2lvbikKCQl7CgkJCSRs aW5rX2FjdGl2YXRlX3ZlcnNpb24gPSAiPGEgaHJlZj1cIj9ldmVudD1tZF92ZXJzaW9ucyZz dGVwPWFjdGl2YXRlX3ZlcnNpb24mYXJ0aWNsZV9pZD0kdmVyc2lvblthcnRpY2xlX2lkXSZ2 ZXJzaW9uX2lkPSR2ZXJzaW9uW2lkXVwiPiIuZ1R4dCgnbWRfdmVyc2lvbl9uYXZpX2F0aXZh dGUnKS4iPC9hPiI7CgkJCSRsaW5rX2RlbGV0ZV92ZXJzaW9uID0gIjxhIGhyZWY9XCI/ZXZl bnQ9bWRfdmVyc2lvbnMmc3RlcD1kZWxldGVfdmVyc2lvbiZhcnRpY2xlX2lkPSRhcnRpY2xl X2lkJnZlcnNpb25faWQ9JHZlcnNpb25baWRdXCI+Ii5nVHh0KCdtZF92ZXJzaW9uX25hdmlf ZGVsZXRlJykuIjwvYT4iOwoJCQkkbGlua192aWV3X3ZlcnNpb24gPSAiPGEgaHJlZj1cIj9l dmVudD1tZF92ZXJzaW9ucyZzdGVwPXZpZXdfdmVyc2lvbiZhcnRpY2xlX2lkPSRhcnRpY2xl X2lkJnZlcnNpb25faWQ9JHZlcnNpb25baWRdXCI+Ii5nVHh0KCdtZF92ZXJzaW9uX25hdmlf dmlldycpLiI8L2E+IjsKCQkJJGxpbmtfc2hvd19kaWZmID0gIjxhIGhyZWY9XCI/ZXZlbnQ9 bWRfdmVyc2lvbnMmc3RlcD1zaG93X2RpZmYmYXJ0aWNsZV9pZD0kYXJ0aWNsZV9pZCZ2ZXJz aW9uX2lkPSR2ZXJzaW9uW2lkXVwiPiIuZ1R4dCgnbWRfdmVyc2lvbl9uYXZpX3Nob3dfZGlm ZicpLiI8L2E+IjsKCgoJCQlpZiAoJHZlcnNpb25bJ2FjdGl2ZSddID09IDEpICRhY3RpdmUg PSAiPHRkIHN0eWxlPVwiY29sb3I6IzI4QTYyODtcIj48Yj4iLmdUeHQoJ21kX3ZlcnNpb25f YXRpdmF0ZWQnKS4iPC9iPjwvdGQ+IjsKCQkJZWxzZSAkYWN0aXZlID0gIjx0ZD4iLmdUeHQo J21kX3ZlcnNpb25fZGVhdGl2YXRlZCcpLiI8L3RkPiI7CgoJCQkvLzx0ZD4kdmVyc2lvblth cnRpY2xlX2lkXTwvdGQ+CgkJCWVjaG8gIjx0ciBpZD1cImxpc3RcIj48dGQ+JHZlcnNpb25b dmVyc2lvbl08L3RkPjx0ZD4kdmVyc2lvbltjb21tZW50XTwvdGQ+PHRkPiR2ZXJzaW9uW1Rp dGxlXTwvdGQ+PHRkPiR2ZXJzaW9uW2NyZWF0ZWRfZGF0ZV08L3RkPjx0ZD4kbGlua19hY3Rp dmF0ZV92ZXJzaW9uPC90ZD4kYWN0aXZlPHRkPiRsaW5rX3ZpZXdfdmVyc2lvbjwvdGQ+PHRk PiRsaW5rX2RlbGV0ZV92ZXJzaW9uPC90ZD48dGQ+JGxpbmtfc2hvd19kaWZmPC90ZD48L3Ry PiI7CgkJfQoKCQllY2hvICI8L3RhYmxlPiI7Cgl9CgoKCS8vRU46IGFjdGl2YXRlIHZlcnNp b24sIHB1dCB0aGUgZGF0YSBmcm9tIHRoaXMgdmVyc2lvbiB0byB0aGUgdGFibGUgd2l0aCBj b250ZW50IG9mIHRoZSBhcnRpY2xlCglmdW5jdGlvbiBBY3RpdmF0ZVZlcnNpb24oKQoJewoJ CSRhcnRpY2xlX2lkID0gQCRfUkVRVUVTVFsnYXJ0aWNsZV9pZCddOwoJCSR2ZXJzaW9uX2lk ID0gQCRfUkVRVUVTVFsndmVyc2lvbl9pZCddOwoKCQllY2hvIGdUeHQoJ21kX3ZlcnNpb25f dGl0bGVfdmVyc2lvbl9hY3RpdmF0aW9uJyk7CgoJCSRvayA9ICR0aGlzLT5tZF92ZXJzaW9u cy0+QWN0aXZhdGVWZXJzaW9uR28oJGFydGljbGVfaWQsICR2ZXJzaW9uX2lkKTsKCQlpZiAo JG9rKSBlY2hvIGdUeHQoJ21kX3ZlcnNpb25fc3VjY2VzcycpOwoJCWVsc2UgZWNobyBnVHh0 KCdtZF92ZXJzaW9uX2ZhaWxlZCcpOwoKCQllY2hvICI8YnIvPjxici8+IjsKCgkJJHRoaXMt PlZpZXdWZXJzaW9uc0ZvckFydGljbGUoKTsKCX0KCgkvL0VOOiBmaW5kIHRoZSBhcnRpY2xl CglmdW5jdGlvbiBGaW5kQXJ0aWNsZSgpCgl7CgkJZ2xvYmFsICRjbGFua3k7CgkJJGFjdGlv biA9IEAkX1JFUVVFU1RbJ2FjdGlvbiddOwoKCQkJLy96b2JyYXppdCBmb3JtIC0gdnpkeQoJ CQkvL0VOOiBzaG93IHRoZSBmb3JtIGZvciBmaW5kaW5nCgkJCS8vJF9SRVFVRVNUWydzZWN0 aW9uJ10sICRfUkVRVUVTVFsnY2F0ZWdvcnkxJ10sICRfUkVRVUVTVFsnY2F0ZWdvcnkyJ10s ICRfUkVRVUVTVFsndGl0bGUnXSwgJF9SRVFVRVNUWydib2R5J10KCgkJCQllY2hvICI8YnIv Pjxici8+PHRhYmxlIGNlbGxwYWRkaW5nPVwiMFwiIGNlbGxzcGFjaW5nPVwiMFwiIGJvcmRl cj1cIjBcIiBhbGlnbj1cImNlbnRlclwiPiBcbiI7CgkJCQllY2hvICI8Zm9ybSBhY3Rpb249 XCI/ZXZlbnQ9bWRfdmVyc2lvbnNcIiBtZXRob2Q9XCJwb3N0XCIgbmFtZT1cImZvcm1fZmlu ZF9hcnRpY2xlc1wiPiBcbiI7CgkJCQllY2hvICI8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5h bWU9XCJhY3Rpb25cIiB2YWx1ZT1cImZpbmRfZ29cIj4gXG4iOwoKCQkJCWlmIChAJF9SRVFV RVNUWyd3aXRoX3ZlcnNpb25zX29ubHknXSA9PSAieWVzIikgJGNoZWNrX3BvbSA9ICJDSEVD S0VEPWNoZWNrZWQiOwoJCQkJZWxzZSAkY2hlY2tfcG9tID0iIjsKCgkJCQllY2hvICI8dHI+ PHRkPiZuYnNwOzwvdGQ+PHRkPiZuYnNwOzwvdGQ+PHRkPiZuYnNwOzwvdGQ+PHRkPiZuYnNw OzwvdGQ+PHRkPiZuYnNwOyIuZ1R4dCgnVGl0bGUnKS4iPC90ZD48dGQ+Jm5ic3A7Ii5nVHh0 KCdCb2R5JykuIjwvdGQ+PC90cj4gXG4iOwoJCQkJZWNobyAiPHRyPjx0ZD48aW5wdXQgdHlw ZT1cImNoZWNrYm94XCIgbmFtZT1cIndpdGhfdmVyc2lvbnNfb25seVwiIHZhbHVlPVwieWVz XCIgJGNoZWNrX3BvbT4iLmdUeHQoJ21kX3ZlcnNpb25zX2FydGljbGVfd2l0aF92ZXJzJyku IjwvdGQ+PHRkPiZuYnNwOzxzZWxlY3QgbmFtZT1cInNlY3Rpb25cIj4gXG4iOwoJCQkJCQkJ CQkJCQkJCQkkc2VjdGlvbnMgPSAkdGhpcy0+bWRfdmVyc2lvbnMtPkxvYWRBbGxTZWN0aW9u c0Zyb21BcnRpY2xlcygpOwoJCQkJCQkJCQkJCQkJCQkvLyR0aGlzLT5wcmludHIoJHNlY3Rp b25zKTsKCQkJCQkJCQkJCQkJCQkJZWNobyAiPG9wdGlvbiB2YWx1ZT1cIlwiPiIuZ1R4dCgn U2VjdGlvbicpLiI8L29wdGlvbj4gXG4iOwoJCQkJCQkJCQkJCQkJCQlpZiAoJHNlY3Rpb25z ICE9IG51bGwpCgkJCQkJCQkJCQkJCQkJCWZvcmVhY2goJHNlY3Rpb25zIGFzICRzZWN0aW9u KQoJCQkJCQkJCQkJCQkJCQl7CgkJCQkJCQkJCQkJCQkJCQllY2hvICI8b3B0aW9uIHZhbHVl PVwiJHNlY3Rpb25cIj4kc2VjdGlvbjwvb3B0aW9uPiBcbiI7CgkJCQkJCQkJCQkJCQkJCX0K CQkJCQkJCQkJCQkJCQkJZWNobyAiPC9zZWxlY3Q+PC90ZD4gXG4iOwoKCQkJCWVjaG8gIjx0 ZD4mbmJzcDs8c2VsZWN0IG5hbWU9XCJjYXRlZ29yeTFcIj4iOwoJCQkJCQkJCQkJCQkJCQkk Y2F0ZWdvcmllczEgPSAkdGhpcy0+bWRfdmVyc2lvbnMtPkxvYWRBbGxDYXRlZ29yaWVzMUZy b21BcnRpY2xlcygpOwoJCQkJCQkJCQkJCQkJCQkvLyR0aGlzLT5wcmludHIoJHNlY3Rpb25z KTsKCQkJCQkJCQkJCQkJCQkJZWNobyAiPG9wdGlvbiB2YWx1ZT1cIlwiPiIuZ1R4dCgnQ2F0 ZWdvcnkxJykuIjwvb3B0aW9uPiI7CgkJCQkJCQkJCQkJCQkJCWlmICgkY2F0ZWdvcmllczEg IT0gbnVsbCkKCQkJCQkJCQkJCQkJCQkJZm9yZWFjaCgkY2F0ZWdvcmllczEgYXMgJGNhdGVn b3J5KQoJCQkJCQkJCQkJCQkJCQl7CgkJCQkJCQkJCQkJCQkJCQllY2hvICI8b3B0aW9uIHZh bHVlPVwiJGNhdGVnb3J5XCI+JGNhdGVnb3J5PC9vcHRpb24+IjsKCQkJCQkJCQkJCQkJCQkJ fQoJCQkJCQkJCQkJCQkJCQllY2hvICI8L3NlbGVjdD48L3RkPiBcbiI7CgoJCQkJZWNobyAi PHRkPiZuYnNwOzxzZWxlY3QgbmFtZT1cImNhdGVnb3J5MlwiPiI7CgkJCQkJCQkJCQkJCQkJ CSRjYXRlZ29yaWVzMiA9ICR0aGlzLT5tZF92ZXJzaW9ucy0+TG9hZEFsbENhdGVnb3JpZXMy RnJvbUFydGljbGVzKCk7CgkJCQkJCQkJCQkJCQkJCS8vJHRoaXMtPnByaW50cigkc2VjdGlv bnMpOwoJCQkJCQkJCQkJCQkJCQllY2hvICI8b3B0aW9uIHZhbHVlPVwiXCI+Ii5nVHh0KCdD YXRlZ29yeTInKS4iPC9vcHRpb24+IjsKCQkJCQkJCQkJCQkJCQkJaWYgKCRjYXRlZ29yaWVz MiAhPSBudWxsKQoJCQkJCQkJCQkJCQkJCQlmb3JlYWNoKCRjYXRlZ29yaWVzMiBhcyAkY2F0 ZWdvcnkpCgkJCQkJCQkJCQkJCQkJCXsKCQkJCQkJCQkJCQkJCQkJCWVjaG8gIjxvcHRpb24g dmFsdWU9XCIkY2F0ZWdvcnlcIj4kY2F0ZWdvcnk8L29wdGlvbj4iOwoJCQkJCQkJCQkJCQkJ CQl9CgkJCQkJCQkJCQkJCQkJCWVjaG8gIjwvc2VsZWN0PjwvdGQ+IFxuIjsKCgkJCQllY2hv ICI8dGQ+Jm5ic3A7PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInRpdGxlXCIgLz48L3Rk PiI7CgkJCQllY2hvICI8dGQ+Jm5ic3A7PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImJv ZHlcIiAvPjwvdGQ+IjsKCQkJCWVjaG8gIjx0ZD4mbmJzcDs8aW5wdXQgdHlwZT1cInN1Ym1p dFwiIHZhbHVlPVwiIi5nVHh0KCdtZF92ZXJzaW9uX2J1dHRvbl9maW5kJykuIlwiPjwvdGQ+ PC90cj4gXG4iOwoJCQkJZWNobyAiPC9mb3JtPiBcbiI7CgkJCQllY2hvICI8L3RhYmxlPiBc biI7CgkJLy9rb25lYyBmb3JtdQoKCQkvL0VOOiBzaG93IHRoZSByZXN1bHQgb2YgZmluZGlu ZwoJCWlmICgkYWN0aW9uICE9ICIiKSAvL3pvYnJheml0IHZ5c2xlZGVrIGhsZWRhbmkKCQl7 CgkJCQllY2hvICI8YnIvPjxoMT4iLmdUeHQoJ21kX3ZlcnNpb25fdmlld19mb3VuZGVkX2Fy dGljbGVzJykuIjwvaDE+PGJyLz4gXG4iOwoKCQkJCSRjbGFua3kgPSAkdGhpcy0+bWRfdmVy c2lvbnMtPkZpbmRBcnRpY2xlcyhAJF9SRVFVRVNUWyd3aXRoX3ZlcnNpb25zX29ubHknXSwk X1JFUVVFU1RbJ3NlY3Rpb24nXSwgJF9SRVFVRVNUWydjYXRlZ29yeTEnXSwgJF9SRVFVRVNU WydjYXRlZ29yeTInXSwgJF9SRVFVRVNUWyd0aXRsZSddLCAkX1JFUVVFU1RbJ2JvZHknXSk7 CgkJCQkvLyR0aGlzLT5wcmludHIoJF9SRVFVRVNUKTsKCQl9Cgl9CgoKCgkvL3pvYnJhesOt IHbFoWVjaG55IMSNbMOhbmt5CgkvL0VOOiBzaG93IGFsbCBhcnRpY2xlcwoJZnVuY3Rpb24g Vmlld0FsbEFydGljbGVzKCkKCXsKCQlnbG9iYWwgJGNsYW5reTsKCgkJJGFjdGlvbiA9IEAk X1JFUVVFU1RbJ2FjdGlvbiddOwoKCQkvL3JhemVuaQoJCSRkaXIgPSBAJF9SRVFVRVNUWydk aXInXTsKCQkkc29ydCA9IEAkX1JFUVVFU1RbJ3NvcnQnXTsKCgkJJHBhZ2UgPSBAJF9SRVFV RVNUWydwYWdlJ107CgkJaWYgKCRwYWdlID09ICIiKSAkcGFnZSA9IDE7CgoJCS8vem9icmF6 aXQgZm9ybSBwcm8gaGxlZGFuaSBhIHByaXBhZG5lIG5hY2lzdCB2eXNsZWRlayBobGVkYW5p CgkJLy9FTjogc2hvdyB0aGUgZm9ybSBmb3IgZmluZGluZwoJCSR0aGlzLT5GaW5kQXJ0aWNs ZSgpOwoJCS8va29uZWMgem9icmF6ZW5pIGZvcm11IHBybyBobGVkYW5pCgoJCS8vbmFzdGF2 aXQgc2kgc3RyYW5rb3ZhbmkKCQkkY291bnQgPSA1MDsKCgkJLy9wb2t1ZCBuZWJ5bCBvZGVz bGFuIGZvcm0gcHJvIGhsZWRhbmksIHRhayB6b2JyYXppbSB2c2VjaG55IGNsYW5reQoJCWlm ICgkYWN0aW9uID09ICIiKQoJCXsKCQkJZWNobyAiPGJyLz48aDE+Ii5nVHh0KCdtZF92ZXJz aW9uX3ZpZXdfYWxsX2FydGljbGVzJykuIjwvaDE+PGJyLz4iOwoKCQkJJGNsYW5reSA9ICR0 aGlzLT5tZF92ZXJzaW9ucy0+TG9hZEFsbEFydGljbGVzKCRwYWdlLCAkY291bnQsICRzb3J0 LCAkZGlyKTsKCQkJJGFydGljbGVzX251bWJlciA9ICR0aGlzLT5tZF92ZXJzaW9ucy0+R2V0 TnVtYmVyT2ZBcnRpY2xlcygpOwoJCX0KCQllbHNlICRhcnRpY2xlc19udW1iZXIgPSAxOwoK CQkvLyR0aGlzLT5wcmludHIoJGNsYW5reSk7CgoJCS8vc3RyYW5rb3ZhbmkKCQkvL0VOOiBw YWdpbmF0aW9uCgkJZWNobyAiPGRpdiBhbGlnbj1cImNlbnRlclwiPiI7CgkJaWYgKCRwYWdl ID4gMSkKCQl7CgkJCSRwb20gPSAkcGFnZSAtMTsKCQkJJHByZXYgPSAiPHN0cm9uZz48YSBo cmVmPVwiaW5kZXgucGhwP2V2ZW50PW1kX3ZlcnNpb25zJiMzODtzb3J0PSRzb3J0JiMzODtk aXI9JGRpciYjMzg7cGFnZT0kcG9tXCI+Jm5ic3A7PHN0cm9uZz48PDwvc3Ryb25nPiZuYnNw OzwvYT48L3N0cm9uZz4iOwoJCX0KCQllbHNlICRwcmV2ID0gIiZuYnNwOzxzdHJvbmc+PDw8 L3N0cm9uZz4mbmJzcDsiOwoKCgkJaWYgKCRwYWdlIDwgKCRhcnRpY2xlc19udW1iZXIvJGNv dW50KSkKCQl7CgkJCSRwb20gPSAkcGFnZSArMTsKCQkJJG5leHQgPSAiPHN0cm9uZz48YSBo cmVmPVwiaW5kZXgucGhwP2V2ZW50PW1kX3ZlcnNpb25zJiMzODtzb3J0PSRzb3J0JiMzODtk aXI9JGRpciYjMzg7cGFnZT0kcG9tXCI+Jm5ic3A7PHN0cm9uZz4+Pjwvc3Ryb25nPiZuYnNw OzwvYT48L3N0cm9uZz4iOwoJCX0KCQllbHNlICRuZXh0ID0gIiZuYnNwOzxzdHJvbmc+Pj48 L3N0cm9uZz4mbmJzcDsiOwoKCQkvL3ZsYXN0bmkgdnlwaXMKCQllY2hvICRwcmV2OwoJCWZv ciAoJGk9MDsgJGkgPCAoJGFydGljbGVzX251bWJlci8kY291bnQpIDskaSsrKQoJCXsKCQkJ JHZ5cGlzID0gJGkrMTsKCQkJJHBhZ2VfbnVtYmVyID0gIiZuYnNwOzxzdHJvbmc+PGEgaHJl Zj1cImluZGV4LnBocD9ldmVudD1tZF92ZXJzaW9ucyYjMzg7c29ydD0kc29ydCYjMzg7ZGly PSRkaXImIzM4O3BhZ2U9JHZ5cGlzXCI+JHZ5cGlzPC9hPjwvc3Ryb25nPiZuYnNwOyI7CgkJ CWlmICgkaSA9PSAoJHBhZ2UtMSkpCgkJCXsKCQkJCSRwYWdlX251bWJlciA9ICI8c3Ryb25n PiR2eXBpczwvc3Ryb25nPiI7CgkJCX0KCgkJCWlmICgkaSsyID09ICgkcGFnZSAtIDEpKSAi Jm5ic3A7Ii4kcGFnZV9udW1iZXIgPSAiLi4uIi4iJm5ic3A7IjsKCgkJCWlmICgkdnlwaXMg LTEgIT0gJHBhZ2UgJiAkdnlwaXMgKzEgIT0gJHBhZ2UgJiAkaS0xICE9ICRwYWdlICYgJGkr MSAhPSAkcGFnZSkKCQkJewoJCQkJaWYgKCRpKzIgPiAoJHBhZ2UgLSAxKSkgJHBhZ2VfbnVt YmVyID0gIiI7CgkJCQlpZiAoJGkrMiA8ICgkcGFnZSAtIDEpKSAkcGFnZV9udW1iZXIgPSAi IjsKCQkJfQoKCQkJaWYgKCRpLTIgPT0gKCRwYWdlIC0gMSkpICImbmJzcDsiLiRwYWdlX251 bWJlciA9ICIuLi4iLiImbmJzcDsiOwoKCQkJLy9wcnZuaSBhIHBvc2xlZG5pIHpvYnJheml0 IHZ6ZHkKCQkJaWYgKCRpID09IDApICRwYWdlX251bWJlciA9IiZuYnNwOzxzdHJvbmc+PGEg aHJlZj1cImluZGV4LnBocD9ldmVudD1tZF92ZXJzaW9ucyYjMzg7c29ydD0kc29ydCYjMzg7 ZGlyPSRkaXImIzM4O3BhZ2U9JHZ5cGlzXCI+JHZ5cGlzPC9hPjwvc3Ryb25nPiZuYnNwOyI7 CgkJCWlmICgkaSsxID09ICgkYXJ0aWNsZXNfbnVtYmVyLyRjb3VudCkpICRwYWdlX251bWJl ciA9IiZuYnNwOzxzdHJvbmc+PGEgaHJlZj1cImluZGV4LnBocD9ldmVudD1tZF92ZXJzaW9u cyYjMzg7c29ydD0kc29ydCYjMzg7ZGlyPSRkaXImIzM4O3BhZ2U9JHZ5cGlzXCI+JHZ5cGlz PC9hPjwvc3Ryb25nPiZuYnNwOyI7CgoJCQllY2hvICRwYWdlX251bWJlcjsKCQl9CgkJZWNo byAkbmV4dDsKCQkvL2tvbmVjIHZsYXN0bmkgdnlwaXMKCgkJZWNobyAiPC9kaXY+PGJyLz4i OwoJCS8vc3RyYW5rb3Zhbmkga29uZWMKCQkvL0VOOiBlbmQgb2YgcGFnaW5hdGlvbgoKCQll Y2hvICI8dGFibGUgY2VsbHBhZGRpbmc9XCIwXCIgY2VsbHNwYWNpbmc9XCIwXCIgYm9yZGVy PVwiMFwiIGlkPVwibGlzdFwiIGFsaWduPVwiY2VudGVyXCI+IjsKCQkvL1Z5ZMOhbm8JTsOh emV2CVJ1YnJpa2EJS2F0ZWdvcmllIDEJS2F0ZWdvcmllIDIJQXV0b3IJU3RhdgoKCQlpZiAo JGRpciA9PSAiYXNjIikgJGRpciA9ICJkc2MiOwoJCWVsc2UgJGRpciA9ICJhc2MiOwoKCQkk YXJ0aWNsZV9pZF9wb20gPSAiPHN0cm9uZz48YSBocmVmPVwiaW5kZXgucGhwP2V2ZW50PW1k X3ZlcnNpb25zJiMzODtzb3J0PUlEJiMzODtkaXI9JGRpciYjMzg7cGFnZT0kcGFnZVwiPiIu Z1R4dCgnQXJ0aWNsZScpLiIgSWQ8L2E+PC9zdHJvbmc+IjsKCQkkcG9zdGVkX3BvbSA9ICI8 c3Ryb25nPjxhIGhyZWY9XCJpbmRleC5waHA/ZXZlbnQ9bWRfdmVyc2lvbnMmIzM4O3NvcnQ9 UG9zdGVkJiMzODtkaXI9JGRpciYjMzg7cGFnZT0kcGFnZVwiPiIuZ1R4dCgnUG9zdGVkJyku IjwvYT48L3N0cm9uZz4iOwoJCSR0aXRsZV9wb20gPSAiPHN0cm9uZz48YSBocmVmPVwiaW5k ZXgucGhwP2V2ZW50PW1kX3ZlcnNpb25zJiMzODtzb3J0PVRpdGxlJiMzODtkaXI9JGRpciYj Mzg7cGFnZT0kcGFnZVwiPiIuZ1R4dCgnVGl0bGUnKS4iPC9hPjwvc3Ryb25nPiI7CgkJJHNl Y3Rpb25fcG9tID0gIjxzdHJvbmc+PGEgaHJlZj1cImluZGV4LnBocD9ldmVudD1tZF92ZXJz aW9ucyYjMzg7c29ydD1TZWN0aW9uJiMzODtkaXI9JGRpciYjMzg7cGFnZT0kcGFnZVwiPiIu Z1R4dCgnU2VjdGlvbicpLiI8L2E+PC9zdHJvbmc+IjsKCQkkY2F0ZWdvcnkxX3BvbSA9ICI8 c3Ryb25nPjxhIGhyZWY9XCJpbmRleC5waHA/ZXZlbnQ9bWRfdmVyc2lvbnMmIzM4O3NvcnQ9 Q2F0ZWdvcnkxJiMzODtkaXI9JGRpciYjMzg7cGFnZT0kcGFnZVwiPiIuZ1R4dCgnQ2F0ZWdv cnkxJykuIjwvYT48L3N0cm9uZz4iOwoJCSRjYXRlZ29yeTJfcG9tID0gIjxzdHJvbmc+PGEg aHJlZj1cImluZGV4LnBocD9ldmVudD1tZF92ZXJzaW9ucyYjMzg7c29ydD1DYXRlZ29yeTIm IzM4O2Rpcj0kZGlyJiMzODtwYWdlPSRwYWdlXCI+Ii5nVHh0KCdDYXRlZ29yeTInKS4iPC9h Pjwvc3Ryb25nPiI7CgoJCWVjaG8gIjx0ciBpZD1cImxpc3RcIj48dGQ+JGFydGljbGVfaWRf cG9tPC90ZD48dGQ+JHBvc3RlZF9wb208L3RkPjx0ZD4kdGl0bGVfcG9tPC90ZD48dGQ+JHNl Y3Rpb25fcG9tPC90ZD48dGQ+JGNhdGVnb3J5MV9wb208L3RkPjx0ZD4kY2F0ZWdvcnkyX3Bv bTwvdGQ+PHRkPiIuZ1R4dCgnQXV0aG9yJykuIjwvdGQ+PHRkPiZuYnNwOzwvdGQ+PHRkPiZu YnNwOzwvdGQ+PC90cj4iOwoKCQlpZiAoJGNsYW5reSAhPSBudWxsKQoJCWZvcmVhY2ggKCRj bGFua3kgYXMgJGNsYW5laykKCQl7CgkJCS8vRU46IHVwZGF0ZWQgaW4gdmVyc2lvbiAwLjYs IHlvdSBjYW4gYWRkIG5ldyB2ZXJzaW9uIGZyb20gd3JpdGUgdGFiIG9ubHkKCQkJLy8kbGlu a19hZGRfdmVyc2lvbiA9ICI8YSBocmVmPVwiP2V2ZW50PW1kX3ZlcnNpb25zJnN0ZXA9YWRk X3ZlcnNpb24mYXJ0aWNsZV9pZD0kY2xhbmVrW0lEXVwiPiIuZ1R4dCgnbWRfdmVyc2lvbl9h ZGQnKS4iPC9hPiI7CgkJCSRsaW5rX2FkZF92ZXJzaW9uID0gIiI7CgoJCQlpZiAoJGNsYW5l a1sidmVyc2lvbnNfbnVtYmVyIl0gPiAwKQoJCQl7CgkJCQkkbGlua192aWV3X3ZlcnNpb25z ID0gIjxhIGhyZWY9XCI/ZXZlbnQ9bWRfdmVyc2lvbnMmc3RlcD12aWV3X3ZlcnNpb25zX2Zv cl9hcnRpY2xlJmFydGljbGVfaWQ9JGNsYW5la1tJRF1cIj4iLmdUeHQoJ21kX3ZlcnNpb25f dmlld192ZXJzaW9ucycpLiI8L2E+IjsKCQkJfWVsc2UgJGxpbmtfdmlld192ZXJzaW9ucyA9 ICIiOwoKCQkJZWNobyAiPHRyIGlkPVwibGlzdFwiPjx0ZD4kY2xhbmVrW0lEXTwvdGQ+PHRk PiRjbGFuZWtbUG9zdGVkXTwvdGQ+PHRkPiRjbGFuZWtbVGl0bGVdPC90ZD48dGQ+Jm5ic3A7 JGNsYW5la1tTZWN0aW9uXTwvdGQ+PHRkPiZuYnNwOyRjbGFuZWtbQ2F0ZWdvcnkxXTwvdGQ+ PHRkPiZuYnNwOyRjbGFuZWtbQ2F0ZWdvcnkyXTwvdGQ+PHRkPiZuYnNwOyRjbGFuZWtbQXV0 aG9ySURdPC90ZD48dGQ+Jm5ic3A7JGxpbmtfYWRkX3ZlcnNpb248L3RkPjx0ZD4mbmJzcDsk bGlua192aWV3X3ZlcnNpb25zPC90ZD48L3RyPiI7CgkJfQoKCQllY2hvICI8L3RhYmxlPiI7 Cgl9CgoJLy96b2JyYXppIGtvbmtyZXRuaSB2ZXJ6aSBhIHphcm92ZW4gaSBtb3pub3N0IGVk aXRhY2UgLSBlZGl0IHByZXBhcmUKCS8vRU46IHNob3cgdGhlIHZlcnNpb24gZm9yIHRoZSBh cnRpY2xlIGluIHRoZSBmb3JtCglmdW5jdGlvbiBWaWV3VmVyc2lvbkRldGFpbEZvckFydGlj bGUoJHZlcnNfaWQ9IiIsICRhcnRfaWQ9IiIpCgl7CgkJCSRhcnRpY2xlX2lkID0gJGFydF9p ZDsKCQkJJHZlcnNpb25faWQgPSAkdmVyc19pZDsKCgkJCWlmICgkYXJ0aWNsZV9pZCA9PSAi IikKCQkJewoJCQkJJGFydGljbGVfaWQgPSBAJF9SRVFVRVNUWydhcnRpY2xlX2lkJ107CgkJ CX0KCgoJCQlpZiAoJHZlcnNpb25faWQgPT0gIiIpCgkJCXsKCQkJCSR2ZXJzaW9uX2lkID0g QCRfUkVRVUVTVFsndmVyc2lvbl9pZCddOwoJCQl9CgoJCQllY2hvICI8aDE+Ii5nVHh0KCdt ZF92ZXJzaW9uX3ZpZXdfZGV0YWlsX3ZlcnNpb24nKS4iPC9oMT4iOwoKCQkJJHZlcnNpb24g PSAkdGhpcy0+bWRfdmVyc2lvbnMtPkxvYWRWZXJzaW9uRGV0YWlsRm9yQXJ0aWNsZSgkdmVy c2lvbl9pZCk7CgoJCQllY2hvICI8dGFibGU+IjsKCQkJZWNobyAiPGZvcm0gYWN0aW9uPVwi P2V2ZW50PW1kX3ZlcnNpb25zJnN0ZXA9dXBkYXRlX3ZlcnNpb25cIiBtZXRob2Q9XCJwb3N0 XCIgbmFtZT1cImZvcm1fdXBkYXRlX3ZlcnNpb25cIj4iOwoJCQllY2hvICI8aW5wdXQgdHlw ZT1cImhpZGRlblwiIG5hbWU9XCJhY3Rpb25cIiB2YWx1ZT1cInVwZGF0ZV92ZXJzaW9uX2dv XCI+IjsKCQkJZWNobyAiPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiYXJ0aWNsZV9p ZFwiIHZhbHVlPVwiJGFydGljbGVfaWRcIj4iOwoJCQllY2hvICI8aW5wdXQgdHlwZT1cImhp ZGRlblwiIG5hbWU9XCJ2ZXJzaW9uX2lkXCIgdmFsdWU9XCIkdmVyc2lvbl9pZFwiPiI7CgkJ CWVjaG8gIjx0cj48dGQ+Ii5nVHh0KCdtZF92ZXJzaW9uX3ZlcnNpb24nKS4iJm5ic3A7Ojwv dGQ+PHRkPjxpbnB1dCBuYW1lPVwidmVyc2lvblwiIHZhbHVlPVwiJHZlcnNpb25bdmVyc2lv bl1cIi8+PC90ZD48L3RyPiI7CgkJCWVjaG8gIjx0cj48dGQ+Ii5nVHh0KCdtZF92ZXJzaW9u X2NvbW1lbnQnKS4iJm5ic3A7OjwvdGQ+PHRkPjx0ZXh0YXJlYSBuYW1lPVwiY29tbWVudFwi IGNvbHM9XCI4MFwiIHJvd3M9XCI1XCI+JHZlcnNpb25bY29tbWVudF08L3RleHRhcmVhPjwv dGQ+PC90cj4iOwoKCQkJZWNobyAiPHRyPjx0ZD4mbmJzcDs8L3RkPjx0ZD48aW5wdXQgdHlw ZT1cInN1Ym1pdFwiIHZhbHVlPVwiT0tcIj48L3RkPjwvdHI+IjsKCQkJZWNobyAiPC9mb3Jt PiI7CgkJCWVjaG8gIjwvdGFibGU+IjsKCgkJCS8qCgkJCWVjaG8gIjx0cj48dGQ+Ii5nVHh0 KCdUaXRsZScpLiImbmJzcDs6PC90ZD48dGQ+PGlucHV0IG5hbWU9XCJUaXRsZVwiIHZhbHVl PVwiJHZlcnNpb25bVGl0bGVdXCIgc2l6ZT1cIjk2XCIvPjwvdGQ+PC90cj4iOwoJCQllY2hv ICI8dHI+PHRkPiIuZ1R4dCgnbWRfdmVyc2lvbl9ib2R5JykuIiZuYnNwOzo8L3RkPjx0ZD48 dGV4dGFyZWEgbmFtZT1cIkJvZHlcIiBjb2xzPVwiODBcIiByb3dzPVwiMjBcIj4kdmVyc2lv bltCb2R5XTwvdGV4dGFyZWE+PC90ZD48L3RyPiI7CgkJCWVjaG8gIjx0cj48dGQ+Ii5nVHh0 KCdtZF92ZXJzaW9uX2JvZHlfaHRtbCcpLiImbmJzcDs6PC90ZD48dGQ+PHRleHRhcmVhIG5h bWU9XCJCb2R5X2h0bWxcImNvbHM9XCI4MFwiIHJvd3M9XCIyMFwiPiR2ZXJzaW9uW0JvZHlf aHRtbF08L3RleHRhcmVhPjwvdGQ+PC90cj4iOwoJCQkqLwoKCgkJCWVjaG8gIjxociB3aWR0 aD1cIjkwJVwiIC8+Ii5oZWQoZ1R4dCgncHJldmlldycpLCAyKS5ncmFmKCR2ZXJzaW9uWyJU aXRsZSJdKTsKCgkJCS8vZGVmYXVsdCB3aXRoIFRleHkKCQkJLy9pbmNsdWRlIHRleHkKCQkJ Ly9FTjogSSBhbSBpbiByb290XHRleHRwYXR0ZXJuXHBsdWdpbiBkaXJlY3RvcnkKCQkJaW5j bHVkZV9vbmNlKCdsaWJcY2xhc3NUZXh0aWxlLnBocCcpOwoJCQkkdGV4dGlsZV9wb20gPSBu ZXcgVGV4dGlsZSgpOwoKCQkJZWNobyAkdGV4dGlsZV9wb20tPlRleHRpbGVUaGlzKCR2ZXJz aW9uWyJCb2R5X2h0bWwiXSkuIjxociB3aWR0aD1cIjkwJVwiIC8+PGJyLz4iOwoKCQkJLy93 aXRoIG91dCBUZXh5CgkJCS8vZWNobyBubDJicigkdmVyc2lvblsiQm9keV9odG1sIl0pLiI8 aHIvPjxici8+IjsKCgoJCQkkdGhpcy0+Vmlld1ZlcnNpb25zRm9yQXJ0aWNsZSgpOwoJfQoK CS8vZWRpdGFjZSBHTwoJZnVuY3Rpb24gVXBkYXRlVmVyc2lvbkZvckFydGljbGUoKQoJewoK CQkvLyRvayA9ICR0aGlzLT5tZF92ZXJzaW9ucy0+VXBkYXRlVmVyc2lvbkdvT2xkKCRfUkVR VUVTVFsndmVyc2lvbl9pZCddLCAkX1JFUVVFU1RbJ3ZlcnNpb24nXSwgJF9SRVFVRVNUWydj b21tZW50J10sJF9SRVFVRVNUWydUaXRsZSddLCAkX1JFUVVFU1RbJ0JvZHknXSwgJF9SRVFV RVNUWydCb2R5X2h0bWwnXSk7CgkJJG9rID0gJHRoaXMtPm1kX3ZlcnNpb25zLT5VcGRhdGVW ZXJzaW9uR28oJF9SRVFVRVNUWyd2ZXJzaW9uX2lkJ10sICRfUkVRVUVTVFsndmVyc2lvbidd LCAkX1JFUVVFU1RbJ2NvbW1lbnQnXSk7CgkJaWYgKCRvaykgZWNobyBnVHh0KCdtZF92ZXJz aW9uX3N1Y2Nlc3MnKTsKCQllbHNlIGVjaG8gZ1R4dCgnbWRfdmVyc2lvbl9mYWlsZWQnKTsK CgkJZWNobyAiPGJyLz48YnIvPiI7CgoJCSR0aGlzLT5WaWV3VmVyc2lvbkRldGFpbEZvckFy dGljbGUoKTsKCX0KCgoJLy9zbWF6ZSBrb25rcmV0bmkgdmVyemkKCWZ1bmN0aW9uIERlbGV0 ZVZlcnNpb25Gb3JBcnRpY2xlKCkKCXsKCQkkdmVyc2lvbl9pZCA9IEAkX1JFUVVFU1RbJ3Zl cnNpb25faWQnXTsKCQkkYXJ0aWNsZV9pZCA9IEAkX1JFUVVFU1RbJ2FydGljbGVfaWQnXTsK CgkJZWNobyAiPGgxPiIuZ1R4dCgnbWRfdmVyc2lvbl9kZWxldGVfdmVyc2lvbicpLiI8L2gx PiI7CgoJCSRvayA9ICR0aGlzLT5tZF92ZXJzaW9ucy0+RGVsZXRlVmVyc2lvbkZvckFydGlj bGUoJHZlcnNpb25faWQsICRhcnRpY2xlX2lkKTsKCQlpZiAoJG9rKSBlY2hvIGdUeHQoJ21k X3ZlcnNpb25fc3VjY2VzcycpOwoJCWVsc2UgZWNobyBnVHh0KCdtZF92ZXJzaW9uX2ZhaWxl ZCcpOwoKCQllY2hvICI8YnIvPjxici8+PGJyLz48YnIvPiI7CgoJCS8vem9icmF6aXQgb3N0 YXRuaSB1bG96ZW5lIHZlcnplIHBybyB0ZW50byBjbGFuZWsKCQkgJHRoaXMtPlZpZXdWZXJz aW9uc0ZvckFydGljbGUoKTsKCX0KCgoJLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgkvLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqICBFTkQgIEFETUlOIFNJVEUgICAgICAgICoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKCS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKfSAvLyBlbmQgY2xhc3MgbWRfdmVyc2lv bnNfdmlldwoKCgoKCgkvLyBzaG93IGRpZmZlcmVuY2VzIGJldHdlZW4gdmVyc2lvbnMKY2xh c3MgbWRfdmVyc2lvbl9kaWZmCnsKCWZ1bmN0aW9uIG1kX3ZlcnNpb25fZGlmZigpCgl7Cgl9 CgoKICAgIGZ1bmN0aW9uIGFycl9kaWZmKCAkZjEgLCAkZjIgLCAkc2hvd19lcXVhbCA9IDAg KQogICAgewoKICAgICAgICAkYzEgICAgICAgICA9IDAgOyAgICAgICAgICAgICAgICAgICAj IGN1cnJlbnQgbGluZSBvZiBsZWZ0CiAgICAgICAgJGMyICAgICAgICAgPSAwIDsgICAgICAg ICAgICAgICAgICAgIyBjdXJyZW50IGxpbmUgb2YgcmlnaHQKICAgICAgICAkbWF4MSAgICAg ICA9IGNvdW50KCAkZjEgKSA7ICAgICAgICAjIG1heGltYWwgbGluZXMgb2YgbGVmdAogICAg ICAgICRtYXgyICAgICAgID0gY291bnQoICRmMiApIDsgICAgICAgICMgbWF4aW1hbCBsaW5l cyBvZiByaWdodAogICAgICAgICRvdXRjb3VudCAgID0gMDsgICAgICAgICAgICAgICAgICAg ICMgb3V0cHV0IGNvdW50ZXIKICAgICAgICAkaGl0MSAgICAgICA9ICIiIDsgICAgICAgICAg ICAgICAgICAjIGhpdCBpbiBsZWZ0CiAgICAgICAgJGhpdDIgICAgICAgPSAiIiA7ICAgICAg ICAgICAgICAgICAgIyBoaXQgaW4gcmlnaHQKCiAgICAgICAgLy8gbm92ZQogICAgICAgICRz dG9wID0gMDsKICAgICAgICAkb3V0ID0gIiI7CgoKICAgICAgICB3aGlsZSAoCiAgICAgICAg ICAgICAgICAkYzEgPCAkbWF4MSAgICAgICAgICAgICAgICAgIyBoYXZlIG5leHQgbGluZSBp biBsZWZ0CiAgICAgICAgICAgICAgICBhbmQKICAgICAgICAgICAgICAgICRjMiA8ICRtYXgy ICAgICAgICAgICAgICAgICAjIGhhdmUgbmV4dCBsaW5lIGluIHJpZ2h0CiAgICAgICAgICAg ICAgICBhbmQKICAgICAgICAgICAgICAgICgkc3RvcCsrKSA8IDEwMDAgICAgICAgICAgICAj IGRvbi10IGhhdmUgbW9yZSB0aGVuIDEwMDAgKCBsb29wLXN0b3BwZXIgKQogICAgICAgICAg ICAgICAgYW5kCiAgICAgICAgICAgICAgICAkb3V0Y291bnQgPCAyMCAgICAgICAgICAgICAg IyBvdXRwdXQgY291bnQgaXMgbGVzcyB0aGVuIDIwCiAgICAgICAgICAgICAgKQogICAgICAg IHsKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICogICBpcyB0aGUgdHJpbW1lZCBsaW5l IG9mIHRoZSBjdXJyZW50IGxlZnQgYW5kIGN1cnJlbnQgcmlnaHQgbGluZQogICAgICAgICAg ICAqICAgdGhlIHNhbWUgPyB0aGVuIHRoaXMgaXMgYSBoaXQgKG5vIGRpZmZlcmVuY2UpCiAg ICAgICAgICAgICovCgogICAgICAgICAgICBpZiAoIHRyaW0oICRmMVskYzFdICkgPT0gdHJp bSAoICRmMlskYzJdKSAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAvKioKICAg ICAgICAgICAgICAgICogICBhZGQgdG8gb3V0cHV0LXN0cmluZywgaWYgInNob3dfZXF1YWwi IGlzIGVuYWJsZWQKICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAkb3V0ICAg IC49ICgkc2hvd19lcXVhbD09MSkKICAgICAgICAgICAgICAgICAgICAgICAgID8gICR0aGlz LT5mb3JtYXRsaW5lICggKCRjMSkgLCAoJGMyKSwgIj0iLCAkZjFbICRjMSBdICkKICAgICAg ICAgICAgICAgICAgICAgICAgIDogIiIgOwogICAgICAgICAgICAgICAgLyoqCiAgICAgICAg ICAgICAgICAqICAgaW5jcmVhc2UgdGhlIG91dC1wdXRjb3VudGVyLCBpZiAic2hvd19lcXVh bCIgaXMgZW5hYmxlZAogICAgICAgICAgICAgICAgKiAgIHRoaXMgaXN0IG1vcmUgZm9yIGRl bW9uc3RyYXRpb24gcHVycG9zZQogICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAg IGlmICggJHNob3dfZXF1YWwgPT0gMSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAgICAgJG91dGNvdW50KysgOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg ICAgIC8qKgogICAgICAgICAgICAgICAgKiAgIG1vdmUgdGhlIGN1cnJlbnQtcG9pbnRlciBp biB0aGUgbGVmdCBhbmQgcmlnaHQgc2lkZQogICAgICAgICAgICAgICAgKi8KICAgICAgICAg ICAgICAgICRjMSArKzsKICAgICAgICAgICAgICAgICRjMiArKzsKICAgICAgICAgICAgfQoK ICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICogICB0aGUgY3VycmVudCBsaW5lcyBhcmUg ZGlmZmVyZW50IHNvIHdlIHNlYXJjaCBpbiBwYXJhbGxlbAogICAgICAgICAgICAqICAgb24g ZWFjaCBzaWRlIGZvciB0aGUgbmV4dCBtYXRjaGluZyBwYWlyLCB3ZSB3YWxrIG9uIGJvdGgK ICAgICAgICAgICAgKiAgIHNpZGVkIGF0IHRoZSBzYW1lIHRpbWUgY29tcGFyaW5nIHdpdGgg dGhlIGN1cnJlbnQtbGluZXMKICAgICAgICAgICAgKiAgIHRoaXMgc2hvdWxkIGJlIG1vc3Qg cHJvYmFibGUgdG8gZmluZCB0aGUgbmV4dCBtYXRjaGluZyBwYWlyCiAgICAgICAgICAgICog ICB3ZSBvbmx5IHNlYXJjaCBpbiBhIGRpc3RhbmNlIG9mIDEwIGxpbmVzLCBiZWNhdXNlIHRo ZW4gaXQKICAgICAgICAgICAgKiAgIGlzIG5vdCB0aGUgc2FtZSBmdW5jdGlvbiBtb3N0IG9m IHRoZSB0aW1lLiBvdGhlciBhbGdvcwogICAgICAgICAgICAqICAgd291bGQgYmUgdmVyeSBj b21wbGljYXRlZCwgdG8gZGV0ZWN0ICdyZWFsJyBibG9jayBtb3ZlbWVudHMuCiAgICAgICAg ICAgICovCiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAg ICRiICAgICAgPSAiIiA7CiAgICAgICAgICAgICAgICAkczEgICAgID0gMCAgOyAgICAgICMg c2VhcmNoIG9uIGxlZnQKICAgICAgICAgICAgICAgICRzMiAgICAgPSAwICA7ICAgICAgIyBz ZWFyY2ggb24gcmlnaHQKICAgICAgICAgICAgICAgICRmb3VuZCAgPSAwICA7ICAgICAgIyBm bGFnLCBmb3VuZCBhIG1hdGNoaW5nIHBhaXIKICAgICAgICAgICAgICAgICRiMSAgICAgPSAi IiA7CiAgICAgICAgICAgICAgICAkYjIgICAgID0gIiIgOwogICAgICAgICAgICAgICAgJGZz dG9wICA9IDAgIDsgICAgICAjIGRpc3RhbmNlIG9mIG1heGltdW0gc2VhcmNoCgogICAgICAg ICAgICAgICAgI2Zhc3Qgc2VhcmNoIGluIG9uIGJvdGggc2lkZXMgZm9yIG5leHQgbWF0Y2gu CiAgICAgICAgICAgICAgICB3aGlsZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICRmb3Vu ZCA9PSAwICAgICAgICAgICAgICMgc2VhcmNoIHVudGlsIHdlIGZpbmQgYSBwYWlyCiAgICAg ICAgICAgICAgICAgICAgICAgIGFuZAogICAgICAgICAgICAgICAgICAgICAgICAoICRjMSAr ICRzMSA8PSAkbWF4MSApICAjIGFuZCB3ZSBhcmUgaW5zaWRlIG9mIHRoZSBsZWZ0IGxpbmVz CiAgICAgICAgICAgICAgICAgICAgICAgIGFuZAogICAgICAgICAgICAgICAgICAgICAgICAo ICRjMiArICRzMiA8PSAkbWF4MiApICAjIGFuZCB3ZSBhcmUgaW5zaWRlIG9mIHRoZSByaWdo dCBsaW5lcwogICAgICAgICAgICAgICAgICAgICAgICBhbmQKICAgICAgICAgICAgICAgICAg ICAgICAgJGZzdG9wKysgIDwgMTAgICAgICAgICAgIyBhbmQgdGhlIGRpc3RhbmNlIGlzIGxv d2VyIHRoYW4gMTAgbGluZXMKICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAg ICAgIHsKCiAgICAgICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgICAgKiAg IHRlc3QgdGhlIGxlZnQgc2lkZSBmb3IgYSBoaXQKICAgICAgICAgICAgICAgICAgICAqCiAg ICAgICAgICAgICAgICAgICAgKiAgIGNvbXBhcmluZyBjdXJyZW50IGxpbmUgd2l0aCB0aGUg c2VhcmNoaW5nIGxpbmUgb24gdGhlIGxlZnQKICAgICAgICAgICAgICAgICAgICAqICAgYjEg aXMgYSBidWZmZXIsIHdoaWNoIGNvbGxlY3RzIHRoZSBsaW5lIHdoaWNoIG5vdCBtYXRjaCwg dG8KICAgICAgICAgICAgICAgICAgICAqICAgc2hvdyB0aGUgZGlmZmVyZW5jZXMgbGF0ZXIs IGlmIG9uZSBsaW5lIGhpdHMsIHRoaXMgYnVmZmVyIHdpbGwKICAgICAgICAgICAgICAgICAg ICAqICAgYmUgdXNlZCwgZWxzZSBpdCB3aWxsIGJlIGRpc2NhcmRlZCBsYXRlcgogICAgICAg ICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgI2hpdAogICAgICAgICAgICAg ICAgICAgIGlmICggdHJpbSggQCRmMVskYzErJHMxXSApID09IHRyaW0oIEAkZjJbJGMyXSAp ICApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkZm91 bmQgID0gMSAgIDsgICAgICMgc2V0IGZsYWcgdG8gc3RvcCBmdXJ0aGVyIHNlYXJjaAogICAg ICAgICAgICAgICAgICAgICAgICAkczIgICAgID0gMCAgIDsgICAgICMgcmVzZXQgcmlnaHQg c2lkZSBzZWFyY2gtcG9pbnRlcgogICAgICAgICAgICAgICAgICAgICAgICAkYzItLSAgICAg ICAgIDsgICAgICMgbW92ZSBiYWNrIHRoZSBjdXJyZW50IHJpZ2h0LCBzbyBuZXh0IGxvb3Ag aGl0cwogICAgICAgICAgICAgICAgICAgICAgICAkYiAgICAgID0gJGIxIDsgICAgICMgc2V0 IGI9b3V0cHV0IChiKXVmZmVyCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgICAgICNubyBoaXQ6IG1vdmUgb24KICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAg ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAg ICAgICAgICAgICAgICAgKiAgIHByZXZlbnQgZmluZGluZyBhIGxpbmUgYWdhaW4sIHdoaWNo IHdvdWxkIHNob3cgd3JvbmcgcmVzdWx0cwogICAgICAgICAgICAgICAgICAgICAgICAqCiAg ICAgICAgICAgICAgICAgICAgICAgICogICBhZGQgdGhlIGN1cnJlbnQgbGluZSB0byBsZWZ0 YnVmZmVyLCBpZiB0aGlzIHdpbGwgYmUgdGhlIGhpdAogICAgICAgICAgICAgICAgICAgICAg ICAqLwogICAgICAgICAgICAgICAgICAgICAgICAvLyBOT1ZFCiAgICAgICAgICAgICAgICAg ICAgICAgIGlmICgkaGl0MSA9PSBudWxsKSAkaGl0MSA9IGFycmF5KCk7CgogICAgICAgICAg ICAgICAgICAgICAgICBpZiAoIEAkaGl0MVsgKCRjMSArICRzMSkgLiAiXyIgLiAoJGMyKSBd ICE9IDEgKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICBhZGQgY3VycmVu dCBzZWFyY2gtbGluZSB0byBkaWZmZW5jZS1idWZmZXIKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYjEgIC49ICR0aGlzLT5m b3JtYXRsaW5lKCAoJGMxICsgJHMxKSAsICgkYzIpLCAiLSIsICRmMVsgJGMxKyRzMSBdICk7 CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqICAgbWFyayB0aGlzIGxpbmUgYXMgJ3NlYXJjaGVkJyB0byBwcmV2ZW50IGRv dWJsZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgJGhpdDFbICgkYzEgKyAkczEpIC4gIl8iIC4gJGMyIF0gPSAxIDsKICAg ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCgoKICAgICAg ICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAqICAgdGVzdCB0aGUgcmln aHQgc2lkZSBmb3IgYSBoaXQKICAgICAgICAgICAgICAgICAgICAqCiAgICAgICAgICAgICAg ICAgICAgKiAgIGNvbXBhcmluZyBjdXJyZW50IGxpbmUgd2l0aCB0aGUgc2VhcmNoaW5nIGxp bmUgb24gdGhlIHJpZ2h0CiAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAg ICAgICBpZiAoIHRyaW0gKCAkZjFbJGMxXSApID09IHRyaW0gKCBAJGYyWyRjMiskczJdKSAg KQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGZvdW5k ICA9IDEgICA7ICAgICAjIGZsYWcgdG8gc3RvcCBzZWFyY2gKICAgICAgICAgICAgICAgICAg ICAgICAgJHMxICAgICA9IDAgICA7ICAgICAjIHJlc2V0IHBvaW50ZXIgZm9yIHNlYXJjaAog ICAgICAgICAgICAgICAgICAgICAgICAkYzEtLSAgICAgICAgIDsgICAgICMgbW92ZSBjdXJy ZW50IGxpbmUgYmFjaywgc28gd2UgaGl0IG5leHQgbG9vcAogICAgICAgICAgICAgICAgICAg ICAgICAkYiAgICAgID0gJGIyIDsgICAgICMgZ2V0IHRoZSBidWZmZXJlZCBkaWZmZXJlbmNl CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAg ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8qKgogICAgICAgICAg ICAgICAgICAgICAgICAqICAgcHJldmVudCB0byBmaW5kIGxpbmUgYWdhaW4KICAgICAgICAg ICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICAgICAgLy8gTk9WRSBNRAog ICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGhpdDIgPT0gbnVsbCkgJGhpdDIgPSBhcnJh eSgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBAJGhpdDJbICgkYzEpIC4gIl8i IC4gKCAkYzIgKyAkczIpIF0gIT0gMSApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgKiAgIGFkZCBjdXJyZW50IHNlYXJjaGxpbmUgdG8gYnVmZmVyCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGIyICAgLj0g JHRoaXMtPmZvcm1hdGxpbmUgKCAoJGMxKSAsICgkYzIgKyAkczIpLCAiKyIsICRmMlsgJGMy KyRzMiBdICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqICAgbWFyayBjdXJyZW50IGxpbmUgdG8gcHJldmVudCBkb3Vi bGUtaGl0cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICRoaXQyWyAoJGMxKSAuICJfIiAuICgkYzIgKyAkczIpIF0gPSAxOwog ICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICB9CgogICAg ICAgICAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgICAgICAgICogICBzZWFyY2ggaW4g YmlnZ2VyIGRpc3RhbmNlCiAgICAgICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAg ICAgICogICBpbmNyZWFzZSB0aGUgc2VhcmNoLXBvaW50ZXJzIChzYXRlbGl0ZXMpIGFuZCB0 cnkgYWdhaW4KICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgICRz MSsrIDsgICAgICMgaW5jcmVhc2UgbGVmdCAgc2VhcmNoLXBvaW50ZXIKICAgICAgICAgICAg ICAgICAgICAkczIrKyA7ICAgICAjIGluY3JlYXNlIHJpZ2h0IHNlYXJjaC1wb2ludGVyCiAg ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAq ICAgYWRkIGxpbmUgYXMgZGlmZmVyZW50IG9uIGJvdGggYXJyYXlzIChubyBtYXRjaCBmb3Vu ZCkKICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICBpZiAoICRmb3VuZCA9PSAw ICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkYiAgLj0gJHRoaXMt PmZvcm1hdGxpbmUgKCAoJGMxKSAsICgkYzIpLCAiLSIsICRmMVsgJGMxIF0gKTsKICAgICAg ICAgICAgICAgICAgICAkYiAgLj0gJHRoaXMtPmZvcm1hdGxpbmUgKCAoJGMxKSAsICgkYzIp LCAiKyIsICRmMlsgJGMyIF0gKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg ICAvKioKICAgICAgICAgICAgICAgICogICBhZGQgY3VycmVudCBidWZmZXIgdG8gb3V0cHV0 c3RyaW5nCiAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgJG91dCAgICAgICAg Lj0gJGI7CiAgICAgICAgICAgICAgICAkb3V0Y291bnQrKyA7ICAgICAgICNpbmNyZWFzZSBv dXRjb3VudGVyCgogICAgICAgICAgICAgICAgJGMxKysgIDsgICAgI21vdmUgY3VycmVudGxp bmUgZm9yd2FyZAogICAgICAgICAgICAgICAgJGMyKysgIDsgICAgI21vdmUgY3VycmVudGxp bmUgZm9yd2FyZAoKICAgICAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgICAgKiAgIGNv bW1lbnQgdGhlIGxpbmVzIGFyZSB0ZXN0ZWQgcXVpdGUgZmFzdCwgYmVjYXVzZQogICAgICAg ICAgICAgICAgKiAgIHRoZSBjdXJyZW50IGxpbmUgYWx3YXlzIG1vdmVzIGZvcndhcmQKICAg ICAgICAgICAgICAgICovCgogICAgICAgICAgICB9IC8qZW5kaWYqLwoKICAgICAgICB9Lypl bmR3aGlsZSovCgogICAgICAgIHJldHVybiAkb3V0OwoKICAgIH0vKmVuZCBmdW5jKi8KCiAg ICAvKioKICAgICogICBjYWxsYmFjayBmdW5jdGlvbiB0byBmb3JtYXQgdGhlIGRpZmZlbmNl LWxpbmVzIHdpdGggeW91ciAnc3R5bGUnCiAgICAqLwogICAgZnVuY3Rpb24gZm9ybWF0bGlu ZSggJG5yMSwgJG5yMiwgJHN0YXQsICYkdmFsdWUgKSAgI2NoYW5nZSB0byAkdmFsdWUgaWYg cHJvYmxlbXMKICAgIHsKICAgICAgICBpZiAoIHRyaW0oICR2YWx1ZSApID09ICIiICkKICAg ICAgICB7CiAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CgogICAgICAgIHN3aXRj aCAoICRzdGF0ICkKICAgICAgICB7CiAgICAgICAgICAgIGNhc2UgIj0iOgogICAgICAgICAg ICAgICAgcmV0dXJuICRucjEuICIgOiAkbnIyIDogPSAiLmh0bWxlbnRpdGllcyggJHZhbHVl LCBFTlRfUVVPVEVTLCAiVVRGLTgiICkgIC4iPGJyPiI7CiAgICAgICAgICAgIGJyZWFrOwoK ICAgICAgICAgICAgY2FzZSAiKyI6CiAgICAgICAgICAgICAgICByZXR1cm4gJG5yMS4gIiA6 ICRucjIgOiArIDxmb250IGNvbG9yPSdibHVlJyA+Ii5odG1sZW50aXRpZXMoICR2YWx1ZSwg RU5UX1FVT1RFUywgIlVURi04IiApICAuIjwvZm9udD48YnI+IjsKICAgICAgICAgICAgYnJl YWs7CgogICAgICAgICAgICBjYXNlICItIjoKICAgICAgICAgICAgICAgIHJldHVybiAkbnIx LiAiIDogJG5yMiA6IC0gPGZvbnQgY29sb3I9J3JlZCcgPiIuaHRtbGVudGl0aWVzKCAkdmFs dWUsICBFTlRfUVVPVEVTLCAiVVRGLTgiICkgIC4iPC9mb250Pjxicj4iOwogICAgICAgICAg ICBicmVhazsKICAgICAgICB9CgogICAgfQp9CgkvLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgkvLyoqKioqKioq KioqKioqKioqIEVORCBERUYgQ0xBU1NlcyAgICAqKioqKioqKioqKioqKioqKioqKioqKioq KioqCgkvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqCgoKCgkvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgkvLyoqKioqKioqKioqKioq KioqIEFETUlOICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgkv LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqCgoJLy9wb2t1ZCBqc2VtIHYgYWRtaW51LCB0YWsgemFyZWdpc3RydWp1 IHBsdWdpbiBhIHpvYnJhemltIGZvcm0gcHJvIGFkbWluaXN0cmFjaQoJaWYgKEB0eHBpbnRl cmZhY2UgPT0gJ2FkbWluJykKCXsKCQltZF92ZXJzaW9uc19jcmVhdGVfdGFibGUoKTsKCgkJ Ly8gdXogdG8gbmVuaSB0cmViYSwgamUgdG8gcm92bm91IG5hY3Bhbm8gdiB0b210byBwbHVn aW51CgkJLy9pbmNsdWRlX29uY2UoJ3BsdWdpbnMvbWRfdmVyc2lvbnMuY2xhc3MucGhwJyk7 CgkJLy9pbmNsdWRlX29uY2UoJ3BsdWdpbnMvbWRfdmVyc2lvbnNfdmlldy5jbGFzcy5waHAn KTsKCgkJcmVnaXN0ZXJfdGFiKCJleHRlbnNpb25zIiwgIm1kX3ZlcnNpb25zIiwgZ1R4dCgn dGFiX21kX3ZlcnNpb25zJykpOwoJCXJlZ2lzdGVyX2NhbGxiYWNrKCJtZF92ZXJzaW9uc19h ZG1pbiIsICJtZF92ZXJzaW9ucyIpOwoKCQkvL3dyaXRlIHRhYiAtIGVkaXRhY2UgY2xhbmt1 IC0gcHJpZGFuaSBmaWVsZHNldHUKCQkvL0VOOiBhZGQgZmllbGRzZXQgdG8gd3JpdGUgdGFi CgkJcmVnaXN0ZXJfY2FsbGJhY2soJ21kX3ZlcnNpb25zX3RvX3dyaXRldGFiX2xvYWQnLCAn YXJ0aWNsZScsICdlZGl0JywgMSk7CgoJCS8vVE9UTyBORUZVTkdVSkU6IG5la2R5IHNlIGNh bGxiYWNrIG5lcHJvdmVkZSwgdGVudG8gSlMgemFqaXN0aSBvZGVzbGFuaSBmb3JtdWxhcmUg bmEgbXVqIHNrcmlwdAoJCS8vRU46IGl0IGRvZXMgbm90IHdvcmsgc29tZXRpbWVzLCB0aGlz IEpTIHdpbGwgc2VuZCB0aGUgZm9ybSB0byBteSBzY3JpcHQKCQkvL3JlZ2lzdGVyX2NhbGxi YWNrKCdtZF92ZXJzaW9uc190b193cml0ZXRhYl9qcycsICdhcnRpY2xlJywgJ2VkaXQnKTsK CX0KCgoJLy8qKioqKgoJLy9FTjogY2FsbCB0aGUgZnVuY3Rpb24gZm9yIHVwZGF0ZSBodG1s CglmdW5jdGlvbiBtZF92ZXJzaW9uc190b193cml0ZXRhYl9sb2FkKCkKCXsKCQlvYl9zdGFy dCgnbWRfdmVyc2lvbnNfdG9fd3JpdGV0YWJfYXJ0aWNsZScpOwoJfQoKCgoJLy9UT1RPIEJP SFVaRUwgTkVGVU5HVUpFOiB0ZW50byBKUyBzZSBwb3V6aXZhIGtlIHptZW5lIGhvZG5vdCBz dGVwIGEgZXZlbnQgdGFrLCBhYnkgc2UgZm9ybXVsYXIgb2Rlc2xhbAoJLy9uYSBtdWogc2ty aXB0CgkvL0VOOiBpdCBkb2VzIG5vdCB3b3JrLHRoaXMgSlMgd2lsbCBzZW5kIHRoZSBmb3Jt IHRvIG15IHNjcmlwdAoJLyoKCWZ1bmN0aW9uIG1kX3ZlcnNpb25zX3RvX3dyaXRldGFiX2pz KCkKCXsKJGpzID0gPDw8IEVPRgpmdW5jdGlvbiBDaGFuZ2VFdmVudFRvQ3JlYXRlTmV3VmVy c2lvbigpCnsKdmFyIGlucHV0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdp bnB1dCcpOwpmb3IgKHZhciBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykKewp2YXIg aW5wdXQgPSBpbnB1dHNbaV07CnZhciB0eXBlID0gaW5wdXQuZ2V0QXR0cmlidXRlKCd0eXBl Jyk7CnZhciBuYW1lID0gaW5wdXQuZ2V0QXR0cmlidXRlKCduYW1lJyk7CnZhciB2YWx1ZSA9 IGlucHV0LmdldEF0dHJpYnV0ZSgndmFsdWUnKTsKCmlmIChuYW1lID09ICdldmVudCcgJiYg dHlwZSA9PSAnaGlkZGVuJykKewppbnB1dC5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgJ21kX3Zl cnNpb25zJyk7Cn0KCmlmIChuYW1lID09ICdzdGVwJyAmJiB0eXBlID09ICdoaWRkZW4nKQp7 CmlucHV0LnNldEF0dHJpYnV0ZSgndmFsdWUnLCAnYWRkX3ZlcnNpb24nKTsKfQp9Cn0KRU9G OwoJCWVjaG8oc2NyaXB0X2pzKCRqcykpOwoJfSovCgoKCS8vcHJpZGF0IGZpZWxkc2V0IHMg dmVyem92YW5pbSBkbyB3cml0ZSB0YWJ1CgkvL0VOOiBhZGQgZm9ybSB3aXRoIHZlcnNpb25z IHRvIHdyaXRlIHRhYgoJZnVuY3Rpb24gbWRfdmVyc2lvbnNfdG9fd3JpdGV0YWJfYXJ0aWNs ZSgkYnVmZmVyKQoJewoJCS8vb2JqZWN0CgkJJG1kX3ZlcnNpb25zID0gbmV3IG1kX3ZlcnNp b25zKCk7CgoJCS8vdG90byBqZSBJRCBha3R1YWxuaWhvIGNsYW5rdQoJCSRhcnRpY2xlX2lk ID0gJF9SRVFVRVNUWydJRCddOwoJCSRhcnRpY2xlX2lkICs9IDA7CgoJCS8vY28gdGFtIHBy aWRhdmFtCgkJLy9FTjogYWRkIGxpc3Qgb2YgdmVyc2lvbnMKCQkkbmV3ID0gJzxmaWVsZHNl dCBpZD0id3JpdGUtdmVyc2lvbnMiPic7CgkgICAgJG5ldyAuPSAiPGxlZ2VuZD4iLmdUeHQo J21kX3ZlcnNpb25zX2Zvcl9hcnRpY2xlJykuIiYjMTYwOzwvbGVnZW5kPiI7CgoJICAgIC8v cG9kaXZhdCBzZSwgamFrYSBqZSBwb3NsZWRuaSB2ZXJ6ZSBwcm8gdGVudG8gY2xhbmVrCgkg ICAgLy9FTjogZ2V0IG5ldyBwb3NzaWJsZSB2ZXJzaW9uIGZvciB0aGlzIGFydGljbGUKCSAg ICAkYWRkX3ZlcnNpb24gPSAkbWRfdmVyc2lvbnMtPkdldE5ld1ZlcnNpb25OdW1iZXJGb3JU aGlzQXJ0aWNsZSgkYXJ0aWNsZV9pZCk7CgoJICAgIC8vIHB1dm9kbmkgLSB1eiB0byBuZXBv dHJlYnVqaQoJCS8vJG5ldyAuPSAnPHA+Jy5nVHh0KCdtZF92ZXJzaW9uX25ld192ZXJzaW9u X2Zvcl9hcnRpY2xlJyk7CgoJCSRuZXcgLj0gJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9 ImFjdGlvbiIgdmFsdWU9ImFkZF92ZXJzaW9uX2dvIj4nOwoJCS8vIHB1dm9kbmkKCSAgICAv LyRuZXcgLj0gJzxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ2ZXJzaW9uIiB2YWx1ZT0iJy4k YWRkX3ZlcnNpb24uJyIgc2l6ZT0iNCIgbWF4bGVuZ3RoPSI0IiBjbGFzcz0iZWRpdCIgdGFi aW5kZXg9IiIgdGl0bGU9IicuZ1R4dCgnbWRfdmVyc2lvbl92ZXJzaW9uJykuJyIgLz48L3A+ JzsKCgkgICAgLy8gbm92ZSB0byBza3J5anUKCSAgICAkbmV3IC49ICc8aW5wdXQgdHlwZT0i aGlkZGVuIiBuYW1lPSJ2ZXJzaW9uIiB2YWx1ZT0iJy4kYWRkX3ZlcnNpb24uJyIgLz4nOwoK CSAgICAvL3ZyYXRpdCBzZXpuYW0gZG9zdHVwbnljaCB2ZXJ6aQoJICAgIC8vRU46IGdldCBs aXN0IG9mIGV4aXN0aW5nIHZlcnNpb25zCgkgICAgJHZlcnNpb25zID0gJG1kX3ZlcnNpb25z LT5Mb2FkVmVyc2lvbnNGb3JUaGlzQXJ0aWNsZSgkYXJ0aWNsZV9pZCk7CgoJICAgIC8vIE5P VkUKCSAgICAvLyBuYWNpc3QgaW5mb3JtYWNlIG8gYWt0dWFsbmltIGNsYW5rdSAtIGFieWNo IG1vaGwgcG9yb3ZuYXQgZGF0dW15IHZ5dHZvcmVuaSBhIHVwZGF0dSAtIHZlcnplIGEgVFhQ IGNsYW5rdQoJICAgICR0eHBfYXJ0aWNsZSA9ICRtZF92ZXJzaW9ucy0+TG9hZEN1cnJlbnRB cnRpY2xlKCRhcnRpY2xlX2lkKTsKCQkvLyR0aGlzLT5wcmludHIoJHR4cF9hcnRpY2xlKTsK CgkgICAgaWYgKCR2ZXJzaW9ucyAhPSBudWxsKQoJICAgIHsKCQkgICAgJG5ldyAuPSAnPHA+ Jy5nVHh0KCdtZF92ZXJzaW9uX3NhdmVkX3ZlcnNpb25zJykuJzxici8+JzsKCQkgICAgZm9y ZWFjaCgkdmVyc2lvbnMgYXMgJHZlcnNpb24pCgkJICAgIHsKCQkJICAgICRjb21tZW50ID0g c3Vic3RyKCR2ZXJzaW9uWydjb21tZW50J10sIDAsIDE1KTsKCQkJICAgIGlmIChzdHJsZW4o JHZlcnNpb25bJ2NvbW1lbnQnXSkgPiAxNSkgJGNvbW1lbnQuPScuLi4nOwoKCQkJICAgIGlm ICgkY29tbWVudCA9PSAiIikgJGNvbW1lbnQgPSAiPCAiLmdUeHQoJ21kX3ZlcnNpb25zX25v X2NvbW1lbnQnKS4iID4iOwoKCQkJICAgIC8vIGplIGFrdGl2bmkgbmVibyBuZSA/CgkJCSAg ICBpZiAoJHZlcnNpb25bJ2FjdGl2ZSddID09IDEpCgkJCSAgICB7CgkJCQkgICAgLy8gamUg YWt0aXZuaQoJCQkJCSRuZXcgLj0gJzxiPjxhIGhyZWY9ImluZGV4LnBocD9ldmVudD1tZF92 ZXJzaW9ucyZzdGVwPXZpZXdfdmVyc2lvbiZhcnRpY2xlX2lkPScuJGFydGljbGVfaWQuJyZ2 ZXJzaW9uX2lkPScuJHZlcnNpb25bJ2lkJ10uJyI+Jy4kdmVyc2lvblsndmVyc2lvbiddLicg Jy4kY29tbWVudC4nPC9hPjwvYj4nOwoKCQkJCQlpZiAoJHR4cF9hcnRpY2xlWyJMYXN0TW9k Il0gIT0gJHZlcnNpb25bImNyZWF0ZWRfZGF0ZSJdKQoJCQkJCXsKCQkJCQkJLy8gYnlsYSBq aXogem1lbmVuYQoJCQkJCQkkbmV3IC49ICcqJzsKCQkJCQl9CgoJCQkJCSRuZXcgLj0gJzxi ci8+JzsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQkvLyBuZW5pIGFrdGl2bmkKCQkJCQkk bmV3IC49ICc8YSBocmVmPSJpbmRleC5waHA/ZXZlbnQ9bWRfdmVyc2lvbnMmc3RlcD12aWV3 X3ZlcnNpb24mYXJ0aWNsZV9pZD0nLiRhcnRpY2xlX2lkLicmdmVyc2lvbl9pZD0nLiR2ZXJz aW9uWydpZCddLiciPicuJHZlcnNpb25bJ3ZlcnNpb24nXS4nICcuJGNvbW1lbnQuJzwvYT48 YnIvPic7CgkJCQl9CgoJCQl9CgkJCSRuZXcgLj0gJzwvcD4nOwoJCX0KCgoJCSRuZXcgLj0g JzxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InB1Ymxpc2giIHZhbHVlPSInLmdUeHQoJ21k X3ZlcnNpb25zX3NhdmVfYXNfbmV3JykuJyIgb25jbGljaz0iQ2hhbmdlRXZlbnRUb0NyZWF0 ZU5ld1ZlcnNpb24oKSIgY2xhc3M9InB1Ymxpc2giIC8+PGJyLz4nOwoJCSRuZXcgLj0gJzwv ZmllbGRzZXQ+JzsKCgkJLy90ZXN0b3ZhY2kKCQkkanMgPSA8PDwgRU9GCmZ1bmN0aW9uIENo YW5nZUV2ZW50VG9DcmVhdGVOZXdWZXJzaW9uKCkKewp2YXIgaW5wdXRzID0gZG9jdW1lbnQu Z2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0Jyk7CmZvciAodmFyIGkgPSAwOyBpIDwgaW5w dXRzLmxlbmd0aDsgaSsrKQp7CnZhciBpbnB1dCA9IGlucHV0c1tpXTsKdmFyIHR5cGUgPSBp bnB1dC5nZXRBdHRyaWJ1dGUoJ3R5cGUnKTsKdmFyIG5hbWUgPSBpbnB1dC5nZXRBdHRyaWJ1 dGUoJ25hbWUnKTsKdmFyIHZhbHVlID0gaW5wdXQuZ2V0QXR0cmlidXRlKCd2YWx1ZScpOwoK aWYgKG5hbWUgPT0gJ2V2ZW50JyAmJiB0eXBlID09ICdoaWRkZW4nKQp7CmlucHV0LnNldEF0 dHJpYnV0ZSgndmFsdWUnLCAnbWRfdmVyc2lvbnMnKTsKfQoKaWYgKG5hbWUgPT0gJ3N0ZXAn ICYmIHR5cGUgPT0gJ2hpZGRlbicpCnsKaW5wdXQuc2V0QXR0cmlidXRlKCd2YWx1ZScsICdh ZGRfdmVyc2lvbicpOwp9Cn0KfQpFT0Y7CgkJJG5ldyAuPSBzY3JpcHRfanMoJGpzKTsKCgkJ Ly9jbyBzZSBtYSBobGVkYXQKCQkkZmluZCA9ICc8ZmllbGRzZXQgaWQ9IndyaXRlLXRpbWVz dGFtcCI+JzsKCgkJLy9wcmVkIHRvIHRsYWNpdGtvIHVsb3ppdCB2bG96aW0gbXVqIGtvZAoJ CXJldHVybiBzdHJfcmVwbGFjZSgkZmluZCwgJG5ldy4kZmluZCwgJGJ1ZmZlcik7Cgl9CgoK CS8vdG90byBzZSB2b2xhIGpha28gZGVmYXVsdG5pIGZjZSBwbyBwcmVjaG9kdSBuYSBtb2pp IHphbG96a3UKCS8vRU46IG15IHRhYgoJZnVuY3Rpb24gbWRfdmVyc2lvbnNfYWRtaW4oJGV2 ZW50LCAkc3RlcCkKCXsKCQkvL25lamRlIHRvIHByZXMgZ2xvYmFsbmkgcHJvbWVubm91LCBt dXNpbSBzaSB0ZW4gb2JqZWt0IHZ5dHZvcml0IHRhZHkKCQkkbWRfdmVyc2lvbnNfdmlldyA9 IG5ldyBtZF92ZXJzaW9uc192aWV3KCk7CgkJcGFnZXRvcChnVHh0KCd0YWJfbWR2ZXJzaW9u cycpKTsKCgoJCWVjaG8gIjxkaXYgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6NSU7IG1hcmdpbi1s ZWZ0OjUlOyBtYXJnaW4tdG9wOjFlbTsgd2lkdGg6OTAlO1wiPiI7CgkJLy96b2JyYXppdCBt ZW51CgkJJG1kX3ZlcnNpb25zX3ZpZXctPlZpZXdOYXZpZ2F0aW9uKCk7CgoJCS8vem9icmF6 aXQgIGtvbmtyZXRuaSBvYnNhaAoJCS8vRU46IHNob3cgY29udGVudAoJCXN3aXRjaChzdHJ0 b2xvd2VyKCRzdGVwKSkKCQl7CgkJCS8vZGVmYXVsdG5lIHRhbSBidWRlIGhsZWRhbmkgY2xh bmt1IGEgem9icmF6ZW5pIHVsb3plbnljaCB2ZXJ6aQoJCQljYXNlICIiOgkgJG1kX3ZlcnNp b25zX3ZpZXctPlZpZXdBbGxBcnRpY2xlcygpOyBicmVhazsKCgkJCS8vc2VtIHNlIGRvc3Rh bnUgemUgc2V6bmFtdSBjbGFua3U6CgkJCS8vcHJpZGF0IG5vdm91IHZlcnppCgkJCWNhc2Ug ImFkZF92ZXJzaW9uIjogJG1kX3ZlcnNpb25zX3ZpZXctPk5ld1ZlcnNpb25Gb3JBcnRpY2xl KCk7IGJyZWFrOwoJCQkvL3pvYnJheml0IHZlcnplCgkJCWNhc2UgInZpZXdfdmVyc2lvbnNf Zm9yX2FydGljbGUiOiAkbWRfdmVyc2lvbnNfdmlldy0+Vmlld1ZlcnNpb25zRm9yQXJ0aWNs ZSgpOyBicmVhazsKCgkJCS8vRU46IHZlcnNpb25zCgkJCWNhc2UgImFjdGl2YXRlX3ZlcnNp b24iOiAkbWRfdmVyc2lvbnNfdmlldy0+QWN0aXZhdGVWZXJzaW9uKCk7IGJyZWFrOwoJCQlj YXNlICJ2aWV3X3ZlcnNpb24iOiAkbWRfdmVyc2lvbnNfdmlldy0+Vmlld1ZlcnNpb25EZXRh aWxGb3JBcnRpY2xlKCk7IGJyZWFrOwoJCQljYXNlICJ1cGRhdGVfdmVyc2lvbiI6ICRtZF92 ZXJzaW9uc192aWV3LT5VcGRhdGVWZXJzaW9uRm9yQXJ0aWNsZSgpOyBicmVhazsKCQkJY2Fz ZSAiZGVsZXRlX3ZlcnNpb24iOiAkbWRfdmVyc2lvbnNfdmlldy0+RGVsZXRlVmVyc2lvbkZv ckFydGljbGUoKTsgYnJlYWs7CgkJCWNhc2UgInNob3dfZGlmZiI6ICRtZF92ZXJzaW9uc192 aWV3LT5TaG93RGlmZlZlcnNpb25Gb3JBcnRpY2xlKCk7IGJyZWFrOwoKCQl9CgoKCQllY2hv ICI8L2Rpdj4iOwoKCQkkbWRfdmVyc2lvbnNfdmlldyA9IG51bGw7Cgl9CgkvL2tvbmVjIGRl ZmF1bHRuaSBmY2UgcG8gcHJlY2hvZHUgbmEgYWRtaW5pc3RyYWNpCgoKCgkvLyoqKioqCgkv L2tvbmVjIGFkbWluaXN0cmFjZQoJLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoJLy8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoJLy8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKgoKCgoKIjtzOjM6Im1kNSI7czozMjoiNjk0NGVjNGIxNmU0MGM5MGQ0YjNm Zjc3MTVkMTE2MTUiO30=