# vag_tumblr_import v0.9.8 # Pull in your tumblr posts to Textpattern. # Jacob Harvey # http://kolophon.net/ # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YTo5OntzOjc6InZlcnNpb24iO3M6NToiMC45LjgiO3M6NjoiYXV0aG9yIjtzOjEyOiJKYWNv YiBIYXJ2ZXkiO3M6MTA6ImF1dGhvcl91cmkiO3M6MjA6Imh0dHA6Ly9rb2xvcGhvbi5uZXQv IjtzOjExOiJkZXNjcmlwdGlvbiI7czo0MToiUHVsbCBpbiB5b3VyIHR1bWJsciBwb3N0cyB0 byBUZXh0cGF0dGVybi4iO3M6NDoidHlwZSI7aToxO3M6NDoibmFtZSI7czoxNzoidmFnX3R1 bWJscl9pbXBvcnQiO3M6NDoiaGVscCI7czo0NDYyOiIJPGgxPlR1bWJsciBJbXBvcnQgUGx1 Z2luPC9oMT4KCgk8aDI+V2hhdCBpcyB0aGlzPzwvaDI+CgoJPHA+QSBmcmllbmQgb2YgbWlu ZSBoYXMgYmVlbiBlbmpveWluZyB0aGUgc2ltcGxpY2l0eSBpbiBwb3N0aW5nIHRvIFR1bWJs ci4gVGhlIG9ubHkgcHJvYmxlbSBpcyBzaGUgbm93IGhhZCB0d28gcGxhY2VzIHNoZSB3YXMg cG9zdGluZy4gVHVtYmxyIGZvciBzaG9ydCwgc3RyZWFtIG9mIHRob3VnaHQgcG9zdHMuIEFu ZCBoZXIgVGV4dHBhdHRlcm4gd2VibG9nIGZvciBsb25nZXIsIG1vcmUgY29tcG9zZWQgcG9z dHMuIFNoZSB3YW50ZWQgdG8ga2VlcCBwb3N0aW5nIG9uIFR1bWJsciBidXQgcHVsbCBpbiB0 aGUgcG9zdHMgYXMgaWYgdGhleSB3ZXJlIGxvY2FsLiBTbyBJIGdvdCB0byB3b3JrJiM4MjMw OzwvcD4KCgk8aDI+UmVxdWlyZW1lbnRzPC9oMj4KCgk8dWw+CgkJPGxpPlBIUDUgJiM4MjEx OyBUaGlzIHBsdWdpbiB1c2VzIGZ1bmN0aW9ucyBvbmx5IGF2YWlsYWJsZSBpbiBQSFA1Ljwv bGk+Cgk8L3VsPgoJPHVsPgoJCTxsaT5jVVJMIG9yIHJlbW90ZSBjYXBhYmlsaXRpZXMgb2Yg ZmlsZV9nZXRfY29udGVudHMgJiM4MjExOyBUbyBhY3R1YWxseSBwb2xsIHRoZSBUdW1ibHIg PHNwYW4gY2xhc3M9ImNhcHMiPkFQSTwvc3Bhbj4uPC9saT4KCTwvdWw+CgoJPGgyPkluc3Rh bGw8L2gyPgoKCTxwPk9uY2UgdGhlIHBsdWdpbiBpcyBpbnN0YWxsZWQgb24gdGhlIHNlcnZl ciBhbmQgYWN0aXZhdGVkIGl0IHdpbGwgZ2VuZXJhdGUgdGhlIG5lZWRlZCB0YWJsZXMgYW5k IGFkZCBhIHRhYiB0byBFeHRlbnNpb25zLjwvcD4KCgk8cD5Nb3N0IG9mIHRoZSBvcHRpb25z IGFyZSBmaW5lIGluIHRoZWlyIGRlZmF1bHQgZm9ybS4gVGhlIG9ubHkgc2V0dGluZ3MgeW91 IG5lZWQgdG8gbW9kaWZ5IGFyZSBhZGRpbmcgdGhlIHVzZXJuYW1lIG9mIHlvdXIgVHVtYmxy IGFjY291bnQgKHdoYXQgaXMgc2VlbiBpbiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwv c3Bhbj4gYXMgaHR0cDovLzxpPnVzZXJuYW1lPC9pPi50dW1ibHIuY29tKSBhbmQgeW91IG5l ZWQgdG8gc2VsZWN0IHRoZSBkZWZhdWx0IHVzZXIgZm9yIHRoZSBwb3N0cyB0byBhcHBlYXIg dW5kZXIuIFRoZXJlIGlzIG9mIGNvdXJzZSBub3RoaW5nIHdyb25nIHdpdGggc2V0dGluZyBp dCBhcyB5b3Vyc2VsZi48L3A+CgoJPGgyPlNldHRpbmdzPC9oMj4KCgk8cD5UaGUgc2V0dGlu Z3Mgb2YgdGhlIHBsdWdpbiBhcmUmIzgyMzA7PC9wPgoKCTxoMz5HZW5lcmFsIFNldHRpbmdz PC9oMz4KCgk8dWw+CgkJPGxpPjxzdHJvbmc+VHVtYmxyIFVzZXJuYW1lPC9zdHJvbmc+ICYj ODIxMTsgWW91ciBUdW1ibHIgdXNlcm5hbWUgc28gaXQga25vd3Mgd2hlcmUgdG8gZ3JhYiBw b3N0cyBmcm9tLjwvbGk+CgkJPGxpPjxzdHJvbmc+RGVmYXVsdCBVc2VyPC9zdHJvbmc+ICYj ODIxMTsgVGhlIFRleHRwYXR0ZXJuIHVzZXIgcG9zdHMgd2lsbCBhcHBlYXIgdW5kZXIuPC9s aT4KCQk8bGk+PHN0cm9uZz5SZWZyZXNoIFR5cGU8L3N0cm9uZz4gJiM4MjExOyBUaGUgZGVm dWFsdCB0eXBlIHdpbGwgYXR0YWNoIGEgZnVuY3Rpb24gdG8gdGhlIGZyb250IGVuZCB0byBv Y2Nhc2lvbmFsbHkgcHVsbCBpbiBwb3N0cy4gPHNwYW4gY2xhc3M9ImNhcHMiPkNST048L3Nw YW4+IGlzIHRoZSBiZXR0ZXIgYWx0ZXJuYXRpdmUgYnV0IHJlcXVpcmVzIHlvdSB0byBzZXQg dXAgYSA8c3BhbiBjbGFzcz0iY2FwcyI+Q1JPTjwvc3Bhbj4gam9iIG9uIHlvdXIgc2VydmVy LiBUaGUgY29tbWFuZCB5b3UgZ2l2ZSB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPkNST048L3Nw YW4+IGpvYiBzaG91bGQgbG9vayBzb21ldGhpbmcgbGlrZSA8Y29kZT5waHAgLWYgL3BhdGgv dG8vc2l0ZS9yb290L2luZGV4LnBocCB2YWdfdHVtYmxyX3VwZGF0ZT0xPC9jb2RlPi48L2xp PgoJPC91bD4KCTx1bD4KCQk8bGk+PHN0cm9uZz5PcmlnaW5hbCBMaW5rIFRleHQ8L3N0cm9u Zz4gJiM4MjExOyBUaGlzIGlzIHRoZSB0ZXh0IHRoYXQgYXBwZWFycyBhdCB0aGUgZW5kIG9m IGVhY2ggcG9zdCBsaW5raW5nIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHBvc3Qgb24gVHVtYmxy LjwvbGk+Cgk8L3VsPgoKCTxoMz5UaXRsZXM8L2gzPgoKCTx1bD4KCQk8bGk+PHN0cm9uZz5S ZWd1bGFyIFBvc3Qgdy9vIFRpdGxlPC9zdHJvbmc+ICYjODIxMTsgVGl0bGUgZm9yIGEgcmVn dWxhciBwb3N0IHdoZW4gbm9uZSBoYXMgYmVlbiBzcGVjaWZpZWQgb24gVHVtYmxyLjwvbGk+ CgkJPGxpPjxzdHJvbmc+UmVndWxhciBUaXRsZXM8L3N0cm9uZz4gJiM4MjExOyBBICYjODIy MDtmb290bm90ZSYjODIyMTsgdG8gYWRkIHRvIHJlZ3VsYXIgcG9zdHMgdGhhdCBjb250YWlu IGEgdGl0bGUgKHRoaXMgaXMgYWxzbyB1c2VkIGZvciBDb252ZXJzYXRpb25zIHdpdGggYSB0 aXRsZSkuPC9saT4KCQk8bGk+PHN0cm9uZz5MaW5rIFRpdGxlczwvc3Ryb25nPiAmIzgyMTE7 IFRpdGxlIGFzc29jaWF0ZWQgd2l0aCBMaW5rIHBvc3RzLjwvbGk+CgkJPGxpPjxzdHJvbmc+ QXVkaW8gVGl0bGVzPC9zdHJvbmc+ICYjODIxMTsgVGl0bGUgYXNzb2NpYXRlZCB3aXRoIEF1 ZGlvIHBvc3RzLjwvbGk+CgkJPGxpPjxzdHJvbmc+VmlkZW8gVGl0bGVzPC9zdHJvbmc+ICYj ODIxMTsgVGl0bGUgYXNzb2NpYXRlZCB3aXRoIFZpZGVvIHBvc3RzLjwvbGk+CgkJPGxpPjxz dHJvbmc+UGhvdG8gVGl0bGVzPC9zdHJvbmc+ICYjODIxMTsgVGl0bGUgYXNzb2NpYXRlZCB3 aXRoIFBob3RvIHBvc3RzLjwvbGk+CgkJPGxpPjxzdHJvbmc+UXVvdGUgVGl0bGVzPC9zdHJv bmc+ICYjODIxMTsgVGl0bGUgYXNzb2NpYXRlZCB3aXRoIFF1b3RlIHBvc3RzLjwvbGk+Cgk8 L3VsPgoJPHVsPgoJCTxsaT48c3Ryb25nPkNvbnZlcnNhdGlvbiBUaXRsZXM8L3N0cm9uZz4g JiM4MjExOyBUaXRsZSBhc3NvY2lhdGVkIHdpdGggQ29udmVyc2F0aW9ucyBwb3N0cyB3aGVu IG5vbmUgaGFzIGJlZW4gc3BlY2lmaWVkIG9uIFR1bWJsci48L2xpPgoJPC91bD4KCgk8aDI+ UmVmcmVzaDwvaDI+CgoJPHA+VGhlcmUgYXJlIG1hbnkgbWV0aG9kcyBmb3IgcHVsbGluZyBp biBwb3N0cyBmcm9tIFR1bWJsci4gQ2xpY2tpbmcgdGhlIFJlZnJlc2ggbGluayBpbiB0aGUg YWRtaW4gc2VjdGlvbiBpcyBhIHNpbXBsZSB3YXkgdG8gbWFudWFsbHkgdXBkYXRlLiBBbHNv IHRoZXJlIGlzIHRoZSBodHRwOi8vPGk+d2Vic2l0ZXVybDwvaT4vP3ZhZ190dW1ibHJfdXBk YXRlPTEgd2hpY2ggcnVucyB0aGUgc2FtZSBmdW5jdGlvbiBvbiB0aGUgZnJvbnQgZW5kLiBV c2luZyA8c3BhbiBjbGFzcz0iY2FwcyI+Q1JPTjwvc3Bhbj4gaXQgaXMgcG9zc2libGUgdG8g YXV0b21hdGUgdGhhdCBjYWxsIGJ5IHVzaW5nIDxjb2RlPnBocCAtZiAvcGF0aC90by9zaXRl L3Jvb3QvaW5kZXgucGhwIHZhZ190dW1ibHJfdXBkYXRlPTE8L2NvZGU+IGFzIHRoZSBjb21t YW5kLjwvcD4KCgk8cD5BbmQgZmluYWxseSBpZiB5b3UgaGF2ZSBubyBpZGVhIGhvdyA8c3Bh biBjbGFzcz0iY2FwcyI+Q1JPTjwvc3Bhbj4gd29ya3MgYW5kIHlvdSBkb24mIzgyMTc7dCBt aW5kIGEgbGl0dGxlIGhpdCBpbiBwZXJmb3JtYW5jZSB5b3UgY2FuIGxlYXZlIHRoZSBSZWZy ZXNoIHNldHRpbmcgdG8gJiM4MjIwO1BhZ2UgTG9hZC4mIzgyMjE7IFdoZW4gdGhhdCBzZXR0 aW5nIGlzIGVuYWJsZWQgdGhlIGZ1bmN0aW9uIGlzIGF0dGFjaGVkIG9uIHRoZSBmcm9udCBl bmQuIEV2ZXJ5IHBhZ2UgbG9hZCB0aGUgZnVuY3Rpb24gd2lsbCBjaGVjayB0aGUgY2FjaGUg YW5kIGhpdCB0aGUgYXBpIGV2ZXJ5IDMwIG1pbnV0ZXMgdG8gdXBkYXRlIHRoZSBwb3N0cy48 L3A+CgoJPHA+PGVtPkhvcGVmdWxseSBpbiB0aGUgZnV0dXJlIFR1bWJsciB3aWxsIGVuYWJs ZSBhIG1hbnVhbCBwaW5nIHNlcnZpY2UuIFRoZW4gd2hlbmV2ZXIgVHVtYmxyIGlzIHVwZGF0 ZWQgaXQgY2FuIGxldCB0aGUgVGV4dHBhdHRlcm4gc2l0ZSBrbm93IGFuZCBhbGwgdGhlc2Ug cmVmcmVzaCBmZWF0dXJlcyBjYW4gYmUgZGVwcmVjYXRlZC48L2VtPjwvcD4KCgk8aDI+VGhh bmtzIFRvJiM4MjMwOzwvaDI+CgoJPHVsPgoJCTxsaT48YSBocmVmPSJodHRwOi8vd3d3LmFt aXR2YXJpYS5jb20vIj5BbWl0IFZhcmlhPC9hPiAmIzgyMTE7IEhpcyBUdW1ibHIgcGx1Z2lu IGdvdCBtZSBzdGFydGVkLjwvbGk+CgkJPGxpPjxhIGhyZWY9ImhhbmdhcjE4Lm5vLWlwLm9y ZyI+Q2hhbGl0bzwvYT4gJiM4MjExOyBGb3IgdGhlIGJhc2UgY29kZSB0byByZW1vdmUgb3Jw aGFucy48L2xpPgoJPC91bD4KCTx1bD4KCQk8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5pYm0u Y29tL2RldmVsb3BlcndvcmtzL2xpYnJhcnkveC14bWxwaHAzLmh0bWwiPkNsaWZmIE1vcmdh bjwvYT4gJiM4MjExOyBGb3IgdGhlIGJhc2UgY2FjaGluZyBjb2RlLjwvbGk+Cgk8L3VsPgoK CTxwPkFuZCBvZiBjb3Vyc2UgQnJpYW4gYW5kIEplc3MgZm9yIGdldHRpbmcgbWUgdG8gd3Jp dGUgdGhpcy48L3A+IjtzOjQ6ImNvZGUiO3M6MjA1ODY6IgoJLy8gQWRkIGEgbmV3IHRhYiB0 byB0aGUgQ29udGVudCBhcmVhLgoJaWYgKEB0eHBpbnRlcmZhY2UgPT0gJ2FkbWluJykgewoJ CSRteWV2ZW50ID0gJ3ZhZ190dW1ibHInOwoJCSRteXRhYiA9ICd0dW1ibHIgSW1wb3J0JzsK CgkJLy8gU2V0IHRoZSBwcml2aWxlZ2UgbGV2ZWxzIGZvciBvdXIgbmV3IGV2ZW50CgkJYWRk X3ByaXZzKCRteWV2ZW50LCAnMSwyJyk7CgoJCS8vIEFkZCBhIG5ldyB0YWIgdW5kZXIgJ2V4 dGVuc2lvbnMnIGFzc29jaWF0ZWQgd2l0aCBvdXIgZXZlbnQKCQlyZWdpc3Rlcl90YWIoImV4 dGVuc2lvbnMiLCAkbXlldmVudCwgJG15dGFiKTsKCgkJcmVnaXN0ZXJfY2FsbGJhY2soInZh Z190dW1ibHJfaW1wb3J0X2RhdGFiYXNlY2hlY2siLCAkbXlldmVudCk7CgkJcmVnaXN0ZXJf Y2FsbGJhY2soInZhZ190dW1ibHJfaW1wb3J0X2FkbWluIiwgJG15ZXZlbnQpOwoKCQl2YWdf dHVtYmxyX2xvc2Vfb3JwaGFucygpOwoJfQoKCS8vIElmIHdlJ3JlIHNpbXBseSBydW5uaW5n IGEgbWFudWFsIHVwZGF0ZS4KCWlmKGdwcygndmFnX3R1bWJscl91cGRhdGUnKT09MSkKCXsK CQlnbG9iYWwgJHR4cF91c2VyOwoKCQlzZXRfdGltZV9saW1pdCgxMjApOwoKCQl2YWdfcHVs bF90dWJscl9wb3N0cygnaGlkZGVuJyk7IC8vIFN3aXRjaCAnaGlkZGVuJyB0byAnc2ltcGxl JyBmb3Igc29tZSBiYXNpYyBjYWNoZSBmZWVkYmFjay4KCgkJZXhpdCgpOwoJfQoKCS8vIEdl dCBwcmVmZXJlbmNlcyB0byBjaGVjayBmb3IgcmVmcmVzaCB0eXBlLgoJZXh0cmFjdChnZXRf dmFnX3R1bWJscl9pbXBvcnRfcHJlZnMoKSk7CgoJaWYgKCR2YWdfdHVtYmxyX2ltcG9ydF9y ZWZyZXNoID09ICJyZWZyZXNoIikgewoJCXJlZ2lzdGVyX2NhbGxiYWNrKCd2YWdfdHVtYmxy X2hpZGRlbnB1bGwnLCAndGV4dHBhdHRlcm4nKTsKCX0KCi8vLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiB2 YWdfdHVtYmxyX2ltcG9ydF90aXRsZXMoJGFjdGl2ZSkKewoKCSR0aXRsZXMgPSBhcnJheSgn U2V0dGluZ3MnPT4nU2V0dGluZ3MnLCAnUmVmcmVzaCc9PidSZWZyZXNoJyk7IC8vLCAncGFn ZS1kZXNpZ24nPT4nUGFnZSBEZXNpZ24nLCAncGFnZS1zdHlsZSc9PidQYWdlIFN0eWxlJywg J0Rlc2lnbic9PidGb3JtIERlc2lnbicsICdib29rbWFya2xldCc9PidCb29rbWFya2xldCcK CSRuZXd0aXRsZXMgPSBhcnJheSgpOwoJZm9yZWFjaCgkdGl0bGVzIGFzICRrZXk9PiR0aXRs ZSkKCXsKCQlpZigkdGl0bGUhPSRhY3RpdmUpCgkJewoJCQkkdGl0bGU9JzxhIGhyZWY9Imlu ZGV4LnBocD9ldmVudD12YWdfdHVtYmxyJnN0ZXA9Jy4ka2V5LiciPicuJHRpdGxlLic8L2E+ JzsKCQl9CgkJYXJyYXlfcHVzaCgkbmV3dGl0bGVzLCAkdGl0bGUpOwoJfQoKCXJldHVybiB0 YWcoam9pbigkbmV3dGl0bGVzLCAiIHwgIiksICdoMScsICcgc3R5bGU9InRleHQtYWxpZ246 IGNlbnRlcjsiJyk7Cn0KCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBnZXRfdmFnX3R1bWJscl9pbXBv cnRfcHJlZnMoKQp7Cgkkb3V0ID0gYXJyYXkoKTsKCgkkciA9IHNhZmVfcm93c19zdGFydCgn bmFtZSwgdmFsJywgJ3R4cF9wcmVmcycsICJldmVudD0ndmFnX3R1bWJscicgQU5EIG5hbWUg TElLRSAndmFnX3R1bWJscl9pbXBvcnRfJSciKTsKCWlmICgkcikgewoJCXdoaWxlICgkYSA9 IG5leHRSb3coJHIpKSB7CgkJCSRvdXRbJGFbJ25hbWUnXV0gPSAkYVsndmFsJ107CgkJfQoK CQkkbmVlZGVkX3ByZWZzID0gYXJyYXkoCgkJCSd2YWdfdHVtYmxyX2ltcG9ydF9yZWFkJwkJ CT0+ICcnLAoJCQkndmFnX3R1bWJscl9pbXBvcnRfdXNlcicJCQk9PiAnJywKCQkJJ3ZhZ190 dW1ibHJfaW1wb3J0X3JlZnJlc2gnCQkJPT4gJ3JlZnJlc2gnLAoJCQkndmFnX3R1bWJscl9p bXBvcnRfb3JpZ2luYWwnCQk9PiAnVHVtYmxyIE9yaWdpbmFsJywKCQkJJ3ZhZ190dW1ibHJf aW1wb3J0X2F1ZGlvX3RpdGxlJwkJPT4gJ0FuIGF1ZGlvIGNsaXAgSSBwb3N0ZWQgb24gVHVt YmxyJywKCQkJJ3ZhZ190dW1ibHJfaW1wb3J0X3ZpZGVvX3RpdGxlJwkJPT4gJ0EgdmlkZW8g SSBwb3N0ZWQgb24gVHVtYmxyJywKCQkJJ3ZhZ190dW1ibHJfaW1wb3J0X3Bob3RvX3RpdGxl JwkJPT4gJ0EgcGljdHVyZSBJIHBvc3RlZCBvbiBUdW1ibHInLAoJCQkndmFnX3R1bWJscl9p bXBvcnRfbGlua190aXRsZScJCT0+ICdBIGxpbmsgSSBwb3N0ZWQgb24gVHVtYmxyJywKCQkJ J3ZhZ190dW1ibHJfaW1wb3J0X3JlZ3VsYXJfbm90aXRsZScJPT4gJ0EgcmFuZG9tIHRob3Vn aHQgSSBwb3N0ZWQgb24gVHVtYmxyJywKCQkJJ3ZhZ190dW1ibHJfaW1wb3J0X3JlZ3VsYXJf dGl0bGUnCT0+ICcgKHR1bWJsciknLAoJCQkndmFnX3R1bWJscl9pbXBvcnRfcXVvdGVfdGl0 bGUnCQk9PiAnQSBxdW90ZSBJIHBvc3RlZCBvbiBUdW1ibHInLAoJCQkndmFnX3R1bWJscl9p bXBvcnRfY29udl90aXRsZScJCT0+ICdBIGNvbnZlcnNhdGlvbiBJIHBvc3RlZCBvbiBUdW1i bHInCgkJCSk7CgoJCSRkaWZmID0gYXJyYXlfZGlmZihhcnJheV9rZXlzKCRuZWVkZWRfcHJl ZnMpLCBhcnJheV9rZXlzKCRvdXQpKTsKCgkJaWYoJGRpZmYpCgkJewoJCQlmb3JlYWNoKCRk aWZmIGFzICR2YWwpCgkJCXsKCQkJCXNldF9wcmVmKCR2YWwsICAkbmVlZGVkX3ByZWZzWyR2 YWxdLCAndmFnX3R1bWJscicsIDIpOwoJCQl9CgkJCXJldHVybiBnZXRfdmFnX3R1bWJscl9p bXBvcnRfcHJlZnMoKTsKCQl9CgkJZWxzZQoJCXsKCQkJcmV0dXJuICRvdXQ7CgkJfQoJfQp9 Ci8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KZnVuY3Rpb24gdmFnX3R1bWJscl9pbXBvcnRfdmVyaWZ5VGFibGUoKQp7 CglpZihzYWZlX3F1ZXJ5KCJTSE9XIFRBQkxFUyBMSUtFICciLnNhZmVfcGZ4KCd2YWdfdHVt YmxyX2ltcG9ydF9yZWwnKS4iJyIpKQoJewoJCSR2ZXJzaW9uID0gbXlzcWxfZ2V0X3NlcnZl cl9pbmZvKCk7CgkJLy9Vc2UgIkVOR0lORSIgaWYgdmVyc2lvbiBvZiBNeVNRTCA+ICg0LjAu MTggb3IgNC4xLjIpCgkJJHRhYmxldHlwZSA9ICggaW50dmFsKCR2ZXJzaW9uWzBdKSA+PSA1 IHx8IHByZWdfbWF0Y2goJyNeNFwuKDBcLlsyLTldfCgxWzg5XSkpfCgxXC5bMi05XSkjJywk dmVyc2lvbikpCgkJCQkJCT8gIiBFTkdJTkU9TXlJU0FNICIKCQkJCQkJOiAiIFRZUEU9TXlJ U0FNICI7CgkJJHJlc3VsdCA9IHNhZmVfcXVlcnkoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJ U1RTIGAiLlBGWC4idmFnX3R1bWJscl9pbXBvcnRfcmVsYCgKCQkJYElEYCBpbnQoMTEpIE5P VCBOVUxMIGF1dG9faW5jcmVtZW50IFBSSU1BUlkgS0VZLAoJCQlgdHVtYmxyX0lEYCBpbnQo MTEpIE5PVCBOVUxMLAoJCQlgVHhwX0lEYCBpbnQoMTEpIE5PVCBOVUxMLAoJCQlJTkRFWCAo YHR1bWJscl9JRGApCgkJCSApICR0YWJsZXR5cGUgUEFDS19LRVlTPTEgIik7CgoJCWlmKCRy cyA9IHNhZmVfc2hvdygnQ09MVU1OUycsICd2YWdfdHVtYmxyX2ltcG9ydF9yZWwnKSkKCQl7 CgkJCWlmKGNvdW50KCRycykhPTMpCgkJCXsKCQkJCSRkZXNpZ25fY29sID0gYXJyYXkoJ0lE JywgJ3R1bWJscl9JRCcsICdUeHBfSUQnKTsKCQkJCSRleGlzdF9jb2wgPSBhcnJheSgpOwoJ CQkJZm9yZWFjaCgkcnMgYXMgJGNvbCkKCQkJCXsKCQkJCQkkZXhpc3RfY29sW10gPSAkY29s WydGaWVsZCddOwoJCQkJfQoJCQkJJGRpZmYgPSBhcnJheV9kaWZmKCRkZXNpZ25fY29sLCAk ZXhpc3RfY29sKTsKCQkJCWZvcmVhY2goJGRpZmYgYXMgJGNvbCkKCQkJCXsKCQkJCQlzd2l0 Y2goJGNvbCkKCQkJCQl7CgkJCQkJCWNhc2UgJ0lEJzoKCQkJCQkJCXNhZmVfYWx0ZXIoJ3Zh Z190dW1ibHJfaW1wb3J0X3JlbCcsICdBREQgYElEYCBpbnQoMTEpIE5PVCBOVUxMIGF1dG9f aW5jcmVtZW50Jyk7CgkJCQkJCQlicmVhazsKCQkJCQkJY2FzZSAndHVtYmxyX0lEJzoKCQkJ CQkJCXNhZmVfYWx0ZXIoJ3ZhZ190dW1ibHJfaW1wb3J0X3JlbCcsICJBREQgYHR1bWJscl9J RGAgaW50KDExKSBOT1QgTlVMTCwgQUREIElOREVYKGB0dW1ibHJfSURgKSIpOwoJCQkJCQkJ YnJlYWs7CgkJCQkJCWNhc2UgJ1R4cF9JRCc6CgkJCQkJCQlzYWZlX2FsdGVyKCd2YWdfdHVt YmxyX2ltcG9ydF9yZWwnLCAiQUREIGBUeHBfSURgIGludCgxMSkgTk9UIE5VTEwiKTsKCQkJ CQkJCWJyZWFrOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCX0KfQovLy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rp b24gdmFnX3R1bWJscl9pbXBvcnRfYWRtaW4oJGV2ZW50LCAkc3RlcCkgewoJJHN0ZXAgPSAo JHN0ZXA9PScnKSA/ICdTZXR0aW5ncycgOiAkc3RlcDsKCglzd2l0Y2goJHN0ZXApCgl7CgkJ Y2FzZSAnU2V0dGluZ3MnOgoJCQl2YWdfdHVtYmxyX2ltcG9ydF9zZXR0aW5ncygkc3RlcCk7 CgkJCWJyZWFrOwoJCWNhc2UgJ1JlZnJlc2gnOgoJCQl2YWdfcHVsbF90dWJscl9wb3N0cygk c3RlcCk7CgkJCWJyZWFrOwoJfQp9Ci8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gdmFnX3B1bGxfdHVi bHJfcG9zdHMoJHN0ZXApIHsKCgkvL2dsb2JhbCAkcHJlZnM7CglnbG9iYWwgJHR4cF91c2Vy OwoKCSRtZXNzYWdlID0gJyc7CgoJZXh0cmFjdChnZXRfdmFnX3R1bWJscl9pbXBvcnRfcHJl ZnMoKSk7CgoJLy8gQ2hlY2sgdG8gbWFrZSBzdXJlIHdlIGtub3cgd2hlcmUgd2UncmUgc3Vw cG9zZWQgdG8gYmUgbG9va2luZy4KCWlmICghJHZhZ190dW1ibHJfaW1wb3J0X3JlYWQgfHwg dHJpbSgkdmFnX3R1bWJscl9pbXBvcnRfcmVhZCkgPT0gJycpIHsKCQlwYWdldG9wKCJ0dW1i bHIgSW1wb3J0IiAsICJUaGUgVHVtYmxyIHVzZXJuYW1lIG5lZWRzIHRvIGJlIHNldC4iKTsK CQllY2hvIHZhZ190dW1ibHJfaW1wb3J0X3RpdGxlcygkc3RlcCk7CgkJcmV0dXJuOwoJfQoK CS8vIENoZWNrIGRhdGFiYXNlIGludG8uCgl2YWdfdHVtYmxyX2ltcG9ydF9kYXRhYmFzZWNo ZWNrKCk7CgoJLy9UaGUgVVJMIHRvIGJlIGdyYWJiZWQuCgkkcXVlcnkgPSAnaHR0cDovLycu JHZhZ190dW1ibHJfaW1wb3J0X3JlYWQuJy50dW1ibHIuY29tL2FwaS9yZWFkJzsKCgkvL1Ro ZSBjYWNoZWQgbWF0ZXJpYWwgc2hvdWxkIG9ubHkgbGFzdCBmb3IgMzAgbWludXRlcywgc28g eW91IG5lZWQgdGhlIGN1cnJlbnQgdGltZS4KCSRjdXJyZW50VGltZSA9IG1pY3JvdGltZSh0 cnVlKTsKCgkvL1RoaXMgaXMgd2hlcmUgSSBwdXQgbXkgdGVtcGZpbGU7IHlvdSBjYW4gc3Rv cmUgeW91cnMgaW4gYSBtb3JlIGNvbnZlbmllbnQgbG9jYXRpb24uCgkkY2FjaGUgPSAkR0xP QkFMU1sncHJlZnMnXVsndGVtcGRpciddLicvdmFnXycubWQ1KCRxdWVyeSk7CgoJLy9GaXJz dCBjaGVjayBmb3IgYW4gZXhpc3RpbmcgdmVyc2lvbiBvZiB0aGUgdGltZSwgYW5kIHRoZW4g Y2hlY2sgdG8gc2VlIHdoZXRoZXIgb3Igbm90IGl0J3MgZXhwaXJlZC4KCWlmKGZpbGVfZXhp c3RzKCRjYWNoZSkgJiYgZmlsZW10aW1lKCRjYWNoZSkgPiAodGltZSgpLTE4MDApKSB7IC8v NzIwMCBPcmlnaW5hbGx5LCAyIGhvdXJzCgkJLy9JZiB0aGVyZSdzIGEgdmFsaWQgY2FjaGUg ZmlsZSwgbG9hZCBpdHMgZGF0YS4KCQkkbWVzc2FnZSA9ICJGcm9tIENhY2hlIjsKCQkkZGF0 YSA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRjYWNoZSk7Cgl9IGVsc2UgewoJCS8vSWYgdGhlcmUn cyBubyB2YWxpZCBjYWNoZSBmaWxlLCBncmFiIGEgbGl2ZSB2ZXJzaW9uIG9mIHRoZSBkYXRh IGFuZCBzYXZlIGl0IHRvIGEgdGVtcG9yYXJ5IGZpbGUuCgkJLy9PbmNlIHRoZSBmaWxlIGlz IGNvbXBsZXRlLCBjb3B5IGl0IHRvIGEgcGVybWFuZW50IGZpbGUuICAoVGhpcyBwcmV2ZW50 cyBjb25jdXJyZW5jeSBpc3N1ZXMuKQoKCQkvLyBSdW4gYSBoZWFkZXIgY2hlY2sgdG8gc2Vl IGlmIHRoZSBzZXJ2ZXIgc2hvdWxkIGV2ZW4gYmUgcXVlcmllZC4KCQkkaGVhZGVyX2FycmF5 ID0gZ2V0X2hlYWRlcnMoJHF1ZXJ5LCAxKTsKCQkkcmVzcG9uc2VfYXJyYXkgPSBAZXhwbG9k ZSgnICcsICRoZWFkZXJfYXJyYXlbMF0pOwoJCSRyZXR1cm5fY29kZSA9IChpbnQpJHJlc3Bv bnNlX2FycmF5WzFdOwoKCQkvLyBJZiB0aGUgc2VydmVyIGlzIHVwIGdvIG9uLgoJCWlmICgo aXNzZXQoJHJldHVybl9jb2RlKSAmJiAkcmV0dXJuX2NvZGUgPT0gMjAwKSkgewoKCQkJJGRh dGEgPSB2YWdfdHVtYmxyX2ltcG9ydF9ncmFiKCRxdWVyeSk7CgoJCQkkbWVzc2FnZSA9ICJD YWNoZSBVcGRhdGVkIjsKCQkJJHRlbXBOYW1lID0gdGVtcG5hbSgkR0xPQkFMU1sncHJlZnMn XVsndGVtcGRpciddLCdWQUcnKTsKCQkJZmlsZV9wdXRfY29udGVudHMoJHRlbXBOYW1lLCAk ZGF0YSk7CgkJCXJlbmFtZSgkdGVtcE5hbWUsICRjYWNoZSk7CgoJCS8vIE90aGVyd2lzZSB3 ZSBjYW4ganVzdCBza2lwIGFsbCB0aGF0IGNvZGUgcmlnaHQgbm93LgoJCX0gZWxzZSB7CgkJ CSRtZXNzYWdlID0gIlByb2JsZW0gd2l0aCBUdW1ibHIgJm5kYXNoOyBGcm9tIENhY2hlIjsK CQkJJGRhdGEgPSAnJzsKCQl9CgoJfQoKCS8vV2hlcmV2ZXIgdGhlIGRhdGEgY2FtZSBmcm9t LCBsb2FkIGl0IGludG8gYSBTaW1wbGVYTUwgb2JqZWN0LgoJJHR1bWJsciA9IHNpbXBsZXht bF9sb2FkX3N0cmluZygkZGF0YSk7CgoJaWYgKCR0dW1ibHIpIHsKCgkJZm9yZWFjaCgkdHVt YmxyLT5wb3N0cy0+cG9zdCBhcyAkaXRlbSkgewoJCQkvL0NoZWNrIHRvIHNlZSBpZiB0aGUg YXJ0aWNsZSBoYXMgYWxyZWFkeSBiZWVuIGltcG9ydGVkCgkJCSRleGlzdHMgPSBzYWZlX2Nv dW50KCd2YWdfdHVtYmxyX2ltcG9ydF9yZWwnLCAidHVtYmxyX0lEID0gIi4kaXRlbVsnaWQn XS4iIik7CgoJCQkvL0lmIGl0IGhhc24ndCB0aGVuIGxldCdzIGFkZCBpdAoJCQlpZigkZXhp c3RzPT0wKSB7CgkJCQlzd2l0Y2goJGl0ZW1bJ3R5cGUnXSkKCQkJCXsKCQkJCQljYXNlICdy ZWd1bGFyJzoKCQkJCQkJJHBvc3RfdGl0bGUgPSAoJGl0ZW0tPnsncmVndWxhci10aXRsZSd9 ID09ICcnKSA/ICR2YWdfdHVtYmxyX2ltcG9ydF9yZWd1bGFyX25vdGl0bGUgOiAkaXRlbS0+ eydyZWd1bGFyLXRpdGxlJ30uJHZhZ190dW1ibHJfaW1wb3J0X3JlZ3VsYXJfdGl0bGU7CgkJ CQkJCSRwb3N0X2RhdGUgPSBkYXRlKCJjIixzdHJ0b3RpbWUoJGl0ZW1bJ2RhdGUnXSkpOwoJ CQkJCQkkdHVtYmxyX2lkID0gJGl0ZW1bJ2lkJ107CgkJCQkJCSRwb3N0X2NhdGVnb3J5ID0g Jyc7CgkJCQkJCSRwb3N0X2JvZHkgPSAkaXRlbS0+eydyZWd1bGFyLWJvZHknfS4nCgkJCQkJ CTxwIGNsYXNzPSJ0dW1ibHItYmFjayI+PGEgaHJlZj0iJy4kaXRlbVsndXJsJ10uJyIgdGl0 bGU9IlRoZSBvcmlnaW5hbCBwb3N0IG9uIFR1bWJsciI+Jy4kdmFnX3R1bWJscl9pbXBvcnRf b3JpZ2luYWwuJzwvYT48L3A+JzsKCgkJCQkJCWJyZWFrOwoKCQkJCQljYXNlICdsaW5rJzoK CQkJCQkJJHBvc3RfdGl0bGUgPSAkdmFnX3R1bWJscl9pbXBvcnRfbGlua190aXRsZTsKCQkJ CQkJJHBvc3RfZGF0ZSA9IGRhdGUoImMiLHN0cnRvdGltZSgkaXRlbVsnZGF0ZSddKSk7CgkJ CQkJCSR0dW1ibHJfaWQgPSAkaXRlbVsnaWQnXTsKCQkJCQkJJHBvc3RfY2F0ZWdvcnkgPSAk aXRlbVsndHlwZSddOwoJCQkJCQkkcG9zdF9ib2R5ID0gJzxwPjxhIGhyZWY9IicuJGl0ZW0t PnsnbGluay11cmwnfS4nIj4nLiRpdGVtLT57J2xpbmstdGV4dCd9Lic8L2E+PC9wPicuCgkJ CQkJCSRpdGVtLT57J2xpbmstZGVzY3JpcHRpb24nfS4nCgkJCQkJCTxwIGNsYXNzPSJ0dW1i bHItYmFjayI+PGEgaHJlZj0iJy4kaXRlbVsndXJsJ10uJyIgdGl0bGU9IlRoZSBvcmlnaW5h bCBwb3N0IG9uIFR1bWJsciI+Jy4kdmFnX3R1bWJscl9pbXBvcnRfb3JpZ2luYWwuJzwvYT48 L3A+JzsKCgkJCQkJCWJyZWFrOwoKCQkJCQljYXNlICdhdWRpbyc6CgkJCQkJCSRwb3N0X3Rp dGxlID0gJHZhZ190dW1ibHJfaW1wb3J0X2F1ZGlvX3RpdGxlOwoJCQkJCQkkcG9zdF9kYXRl ID0gZGF0ZSgiYyIsc3RydG90aW1lKCRpdGVtWydkYXRlJ10pKTsKCQkJCQkJJHR1bWJscl9p ZCA9ICRpdGVtWydpZCddOwoJCQkJCQkkcG9zdF9jYXRlZ29yeSA9ICRpdGVtWyd0eXBlJ107 CgkJCQkJCSRwb3N0X2JvZHkgPSAkaXRlbS0+eydhdWRpby1wbGF5ZXInfS4KCQkJCQkJJGl0 ZW0tPnsnYXVkaW8tY2FwdGlvbid9LicKCQkJCQkJPHAgY2xhc3M9InR1bWJsci1iYWNrIj48 YSBocmVmPSInLiRpdGVtWyd1cmwnXS4nIiB0aXRsZT0iVGhlIG9yaWdpbmFsIHBvc3Qgb24g VHVtYmxyIj4nLiR2YWdfdHVtYmxyX2ltcG9ydF9vcmlnaW5hbC4nPC9hPjwvcD4nOwoKCQkJ CQkJYnJlYWs7CgoJCQkJCWNhc2UgJ3ZpZGVvJzoKCQkJCQkJJHBvc3RfdGl0bGUgPSAkdmFn X3R1bWJscl9pbXBvcnRfdmlkZW9fdGl0bGU7CgkJCQkJCSRwb3N0X2RhdGUgPSBkYXRlKCJj IixzdHJ0b3RpbWUoJGl0ZW1bJ2RhdGUnXSkpOwoJCQkJCQkkdHVtYmxyX2lkID0gJGl0ZW1b J2lkJ107CgkJCQkJCSRwb3N0X2NhdGVnb3J5ID0gJGl0ZW1bJ3R5cGUnXTsKCQkJCQkJJHBv c3RfYm9keSA9ICRpdGVtLT57J3ZpZGVvLXBsYXllcid9LgoJCQkJCQkkaXRlbS0+eyd2aWRl by1jYXB0aW9uJ30uJwoJCQkJCQk8cCBjbGFzcz0idHVtYmxyLWJhY2siPjxhIGhyZWY9Iicu JGl0ZW1bJ3VybCddLiciIHRpdGxlPSJUaGUgb3JpZ2luYWwgcG9zdCBvbiBUdW1ibHIiPicu JHZhZ190dW1ibHJfaW1wb3J0X29yaWdpbmFsLic8L2E+PC9wPic7CgoJCQkJCQlicmVhazsK CgkJCQkJY2FzZSAncGhvdG8nOgoJCQkJCQkkcG9zdF90aXRsZSA9ICR2YWdfdHVtYmxyX2lt cG9ydF9waG90b190aXRsZTsKCQkJCQkJJHBvc3RfZGF0ZSA9IGRhdGUoImMiLHN0cnRvdGlt ZSgkaXRlbVsnZGF0ZSddKSk7CgkJCQkJCSR0dW1ibHJfaWQgPSAkaXRlbVsnaWQnXTsKCQkJ CQkJJHBvc3RfY2F0ZWdvcnkgPSAkaXRlbVsndHlwZSddOwoJCQkJCQkkcG9zdF9pbWdfbWF4 ID0gJGl0ZW0tPnsncGhvdG8tdXJsJ31bMF07CgkJCQkJCSRwb3N0X2JvZHkgPSAnPGltZyBz cmM9IicuJHBvc3RfaW1nX21heC4nIiBhbHQ9IiIgLz4nLgoJCQkJCQkkaXRlbS0+eydwaG90 by1jYXB0aW9uJ30uJwoJCQkJCQk8cCBjbGFzcz0idHVtYmxyLWJhY2siPjxhIGhyZWY9Iicu JGl0ZW1bJ3VybCddLiciIHRpdGxlPSJUaGUgb3JpZ2luYWwgcG9zdCBvbiBUdW1ibHIiPicu JHZhZ190dW1ibHJfaW1wb3J0X29yaWdpbmFsLic8L2E+PC9wPic7CgoJCQkJCQlicmVhazsK CgkJCQkJY2FzZSAncXVvdGUnOgoJCQkJCQkkcG9zdF90aXRsZSA9ICR2YWdfdHVtYmxyX2lt cG9ydF9xdW90ZV90aXRsZTsKCQkJCQkJJHBvc3RfZGF0ZSA9IGRhdGUoImMiLHN0cnRvdGlt ZSgkaXRlbVsnZGF0ZSddKSk7CgkJCQkJCSR0dW1ibHJfaWQgPSAkaXRlbVsnaWQnXTsKCQkJ CQkJJHBvc3RfY2F0ZWdvcnkgPSAkaXRlbVsndHlwZSddOwoJCQkJCQlpZiAocHJlZ19tYXRj aCgiLzxcL2E+LyIsJGl0ZW0tPnsncXVvdGUtc291cmNlJ30sJG1hdGNoZXMpKSB7CgkJCQkJ CQkkcG9zdF9jaXRlID0gc3RyX3JlcGxhY2UoJG1hdGNoZXNbMF0sICc8Y2l0ZT4nLiRtYXRj aGVzWzBdLic8L2NpdGU+JywgJGl0ZW0tPnsncXVvdGUtc291cmNlJ30pOwoJCQkJCQl9IGVs c2UgewoJCQkJCQkJJHBvc3RfY2l0ZSA9ICgkaXRlbS0+eydxdW90ZS1zb3VyY2UnfSkgPyAn PHA+PGNpdGU+Jy4kaXRlbS0+eydxdW90ZS1zb3VyY2UnfS4nPC9jaXRlPjwvcD4nOiAnJzsK CQkJCQkJfQoJCQkJCQkkcG9zdF9xdW90ZSA9ICh2YWdfYmVnaW5zV2l0aCgkaXRlbS0+eydx dW90ZS10ZXh0J30sICI8cCIpKSA/ICRpdGVtLT57J3F1b3RlLXRleHQnfTonPHA+Jy4kaXRl bS0+eydxdW90ZS10ZXh0J30uJzwvcD4nOwoJCQkJCQkkcG9zdF9ib2R5ID0gJHBvc3RfY2l0 ZS4KCQkJCQkJJzxibG9ja3F1b3RlPgoJCQkJCQknLiRwb3N0X3F1b3RlLicKCQkJCQkJPC9i bG9ja3F1b3RlPgoKCQkJCQkJPHAgY2xhc3M9InR1bWJsci1iYWNrIj48YSBocmVmPSInLiRp dGVtWyd1cmwnXS4nIiB0aXRsZT0iVGhlIG9yaWdpbmFsIHBvc3Qgb24gVHVtYmxyIj4nLiR2 YWdfdHVtYmxyX2ltcG9ydF9vcmlnaW5hbC4nPC9hPjwvcD4nOwoKCQkJCQkJYnJlYWs7CgoJ CQkJCWNhc2UgJ2NvbnZlcnNhdGlvbic6CgkJCQkJCSRwb3N0X3RpdGxlID0gKCRpdGVtLT57 J2NvbnZlcnNhdGlvbi10aXRsZSd9ID09ICcnKSA/ICR2YWdfdHVtYmxyX2ltcG9ydF9jb252 ZXJzYXRpb25fdGl0bGUgOiAkaXRlbS0+eydjb252ZXJzYXRpb24tdGl0bGUnfS4kdmFnX3R1 bWJscl9pbXBvcnRfcmVndWxhcl90aXRsZTsKCQkJCQkJJHBvc3RfZGF0ZSA9IGRhdGUoImMi LHN0cnRvdGltZSgkaXRlbVsnZGF0ZSddKSk7CgkJCQkJCSR0dW1ibHJfaWQgPSAkaXRlbVsn aWQnXTsKCQkJCQkJJHBvc3RfY2F0ZWdvcnkgPSAkaXRlbVsndHlwZSddOwoJCQkJCQkkcG9z dF9ib2R5ID0gJzxvbCBjbGFzcz0idHVtYmxyLWNvbnZlcnNhdGlvbiI+JzsKCQkJCQkJZm9y ZWFjaCgkaXRlbS0+eydjb252ZXJzYXRpb24tbGluZSd9IGFzICRjb252X2xpbmUpIHsKCQkJ CQkJCSRwb3N0X2JvZHkgLj0gJzxsaT4nLgoJCQkJCQkJJzxjaXRlPicuJGNvbnZfbGluZVsn bmFtZSddLic8L2NpdGU+Jy4KCQkJCQkJCSc8YmxvY2txdW90ZT48cD4nLiRjb252X2xpbmUu JzwvcD48L2Jsb2NrcXVvdGU+Jy4KCQkJCQkJCSc8L2xpPic7CgkJCQkJCX0KCQkJCQkJJHBv c3RfYm9keSAuPSAnPC9vbD4KCQkJCQkJPHAgY2xhc3M9InR1bWJsci1iYWNrIj48YSBocmVm PSInLiRpdGVtWyd1cmwnXS4nIiB0aXRsZT0iVGhlIG9yaWdpbmFsIHBvc3Qgb24gVHVtYmxy Ij4nLiR2YWdfdHVtYmxyX2ltcG9ydF9vcmlnaW5hbC4nPC9hPjwvcD4nOwoKCQkJCQkJYnJl YWs7CgkJCQl9CgoKCQkJCWlmKCF2YWdfYmVnaW5zV2l0aCgkcG9zdF9ib2R5LCAiPHAiKSkK CQkJCXsKCQkJCQkkcG9zdF9ib2R5ID0gdGFnKGRvU2xhc2goJHBvc3RfYm9keSksICdwJyk7 CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJJHBvc3RfYm9keSA9IGRvU2xhc2goJHBvc3Rf Ym9keSk7CgkJCQl9CgoJCQkJLy8gVXNlIHRoZSBkZWZhdWx0IHVzZXJuYW1lIHVubGVzcyBu b25lIGlzIHNwZWNpZmllZCBhbmQgbG9nZ2VkIGludG8gYWRtaW4KCQkJCSR0eHBfdXNlciA9 ICh0cmltKCR2YWdfdHVtYmxyX2ltcG9ydF91c2VyKSAhPSAnJykgPyAkdmFnX3R1bWJscl9p bXBvcnRfdXNlciA6ICR0eHBfdXNlcjsKCgkJCQkkcmVzdWx0ID0gc2FmZV9pbnNlcnQoInRl eHRwYXR0ZXJuIiwKCQkJCQkiVGl0bGUgICAgICAgICAgID0gJyIuJHBvc3RfdGl0bGUuIics CgkJCQkJQm9keSAgICAgICAgICAgID0gJyIuJHBvc3RfYm9keS4iJywKCQkJCQlCb2R5X2h0 bWwgICAgICAgPSAnIi4kcG9zdF9ib2R5LiInLAoJCQkJCUV4Y2VycHQgICAgICAgICA9ICcn LAoJCQkJCUV4Y2VycHRfaHRtbCAgICA9ICcnLAoJCQkJCUltYWdlICAgICAgICAgICA9ICcn LAoJCQkJCUtleXdvcmRzICAgICAgICA9ICcnLAoJCQkJCVN0YXR1cyAgICAgICAgICA9ICA0 LAoJCQkJCVBvc3RlZCAgICAgICAgICA9ICAnJHBvc3RfZGF0ZScsCgkJCQkJTGFzdE1vZCAg ICAgICAgID0gIG5vdygpLAoJCQkJCUF1dGhvcklEICAgICAgICA9ICckdHhwX3VzZXInLAoJ CQkJCVNlY3Rpb24gICAgICAgICA9ICdhcnRpY2xlJywKCQkJCQlDYXRlZ29yeTEgICAgICAg PSAndHVtYmxyJywKCQkJCQlDYXRlZ29yeTIgICAgICAgPSAnIi4kcG9zdF9jYXRlZ29yeS4i JywKCQkJCQl0ZXh0aWxlX2JvZHkgICAgPSAgMCwKCQkJCQl0ZXh0aWxlX2V4Y2VycHQgPSAg MCwKCQkJCQlBbm5vdGF0ZSAgICAgICAgPSAgMSwKCQkJCQlvdmVycmlkZV9mb3JtICAgPSAn JywKCQkJCQl1cmxfdGl0bGUgICAgICAgPSAnIi5zdHJpcFNwYWNlKCRwb3N0X3RpdGxlKS4i JywKCQkJCQljdXN0b21fMSAJCT0gJycsCgkJCQkJQW5ub3RhdGVJbnZpdGUgID0gJ2NvbW1l bnRzJywKCQkJCQl1aWQgICAgICAgICAgICAgPSAnIi5tZDUodW5pcWlkKHJhbmQoKSx0cnVl KSkuIicsCgkJCQkJZmVlZF90aW1lICAgICAgID0gbm93KCkiCgkJCQkpOwoKCQkJCWlmKCRy ZXN1bHQpCgkJCQl7CgoJCQkJCXVwZGF0ZV9sYXN0bW9kKCk7CgkJCQkJLy8kbWVzc2FnZSA9 ICJBZGRlZCAtICIuJHBvc3RfdGl0bGU7CgoJCQkJCSRyZXMgPSBzYWZlX2luc2VydCgJUEZY Lid2YWdfdHVtYmxyX2ltcG9ydF9yZWwnLAoJCQkJCQkJCQkJCSd0dW1ibHJfSUQgPSAnLiR0 dW1ibHJfaWQuJywgVHhwX0lEID0gJy4kcmVzdWx0KTsKCQkJCX0gZWxzZSB7CgkJCQkJLy8k bWVzc2FnZSA9ICJVbmFibGUgdG8gc2F2ZSAtICIuJHBvc3RfdGl0bGU7CgkJCQl9CgkJCX0K CQl9CgoJfQoKCWlmICgkc3RlcCA9PSAnc2ltcGxlJykgewoJCWVjaG8gJG1lc3NhZ2U7Cgl9 IGVsc2UgaWYgKCRzdGVwID09ICdoaWRkZW4nKSB7CgkJcmV0dXJuIHRydWU7Cgl9IGVsc2Ug ewoJCXBhZ2V0b3AoJ3R1bWJsciBJbXBvcnQnLCAkbWVzc2FnZSk7CgoJCWVjaG8gdmFnX3R1 bWJscl9pbXBvcnRfdGl0bGVzKCRzdGVwKTsKCX0KCn0KCgoKLy8tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlv biB2YWdfdHVtYmxyX2ltcG9ydF9zZXR0aW5ncygkc3RlcCkKewoJZ2xvYmFsICRwcmVmczsK CgkkbWVzc2FnZSA9ICcnOwoKCWlmKGdwcygnc2F2ZV9zZXR0aW5ncycpKQoJewoJCWV4dHJh Y3QoZG9TbGFzaChncHNhKGFycmF5KCd2YWdfdHVtYmxyX2ltcG9ydF9yZWFkJywndmFnX3R1 bWJscl9pbXBvcnRfdXNlcicsJ3ZhZ190dW1ibHJfaW1wb3J0X3JlZnJlc2gnLCd2YWdfdHVt YmxyX2ltcG9ydF9vcmlnaW5hbCcsJ3ZhZ190dW1ibHJfaW1wb3J0X2xpbmtfdGl0bGUnLCd2 YWdfdHVtYmxyX2ltcG9ydF9yZWd1bGFyX25vdGl0bGUnLCd2YWdfdHVtYmxyX2ltcG9ydF9y ZWd1bGFyX3RpdGxlJywndmFnX3R1bWJscl9pbXBvcnRfcGhvdG9fdGl0bGUnLCd2YWdfdHVt YmxyX2ltcG9ydF9hdWRpb190aXRsZScsJ3ZhZ190dW1ibHJfaW1wb3J0X3ZpZGVvX3RpdGxl JywndmFnX3R1bWJscl9pbXBvcnRfY29udl90aXRsZScsJ3ZhZ190dW1ibHJfaW1wb3J0X3F1 b3RlX3RpdGxlJykpKSk7CgoJCSgkdmFnX3R1bWJscl9pbXBvcnRfcmVhZCk/IHNldF9wcmVm KCd2YWdfdHVtYmxyX2ltcG9ydF9yZWFkJywgJHZhZ190dW1ibHJfaW1wb3J0X3JlYWQsICd2 YWdfdHVtYmxyJywgMik6c2V0X3ByZWYoJ3ZhZ190dW1ibHJfaW1wb3J0X3JlYWQnLCAnJywg J3ZhZ190dW1ibHInLCAyKTsKCgkJKCR2YWdfdHVtYmxyX2ltcG9ydF91c2VyKT8gc2V0X3By ZWYoJ3ZhZ190dW1ibHJfaW1wb3J0X3VzZXInLCAkdmFnX3R1bWJscl9pbXBvcnRfdXNlciwg J3ZhZ190dW1ibHInLCAyKTonJzsKCgkJKCR2YWdfdHVtYmxyX2ltcG9ydF9yZWZyZXNoKT8g c2V0X3ByZWYoJ3ZhZ190dW1ibHJfaW1wb3J0X3JlZnJlc2gnLCAkdmFnX3R1bWJscl9pbXBv cnRfcmVmcmVzaCwgJ3ZhZ190dW1ibHInLCAyKTonJzsKCgkJKCR2YWdfdHVtYmxyX2ltcG9y dF9vcmlnaW5hbCk/IHNldF9wcmVmKCd2YWdfdHVtYmxyX2ltcG9ydF9vcmlnaW5hbCcsICR2 YWdfdHVtYmxyX2ltcG9ydF9vcmlnaW5hbCwgJ3ZhZ190dW1ibHInLCAyKTonJzsKCgkJKCR2 YWdfdHVtYmxyX2ltcG9ydF9saW5rX3RpdGxlKT8gc2V0X3ByZWYoJ3ZhZ190dW1ibHJfaW1w b3J0X2xpbmtfdGl0bGUnLCAkdmFnX3R1bWJscl9pbXBvcnRfbGlua190aXRsZSwgJ3ZhZ190 dW1ibHInLCAyKTogJyc7CgoJCSgkdmFnX3R1bWJscl9pbXBvcnRfcmVndWxhcl9ub3RpdGxl KT8gc2V0X3ByZWYoJ3ZhZ190dW1ibHJfaW1wb3J0X3JlZ3VsYXJfbm90aXRsZScsICR2YWdf dHVtYmxyX2ltcG9ydF9yZWd1bGFyX25vdGl0bGUsICd2YWdfdHVtYmxyJywgMik6ICcnOwoK CQkoJHZhZ190dW1ibHJfaW1wb3J0X3JlZ3VsYXJfdGl0bGUpPyBzZXRfcHJlZigndmFnX3R1 bWJscl9pbXBvcnRfcmVndWxhcl90aXRsZScsICR2YWdfdHVtYmxyX2ltcG9ydF9yZWd1bGFy X3RpdGxlLCAndmFnX3R1bWJscicsIDIpOiAnJzsKCgkJKCR2YWdfdHVtYmxyX2ltcG9ydF9w aG90b190aXRsZSk/IHNldF9wcmVmKCd2YWdfdHVtYmxyX2ltcG9ydF9waG90b190aXRsZScs ICR2YWdfdHVtYmxyX2ltcG9ydF9waG90b190aXRsZSwgJ3ZhZ190dW1ibHInLCAyKTogJyc7 CgoJCSgkdmFnX3R1bWJscl9pbXBvcnRfYXVkaW9fdGl0bGUpPyBzZXRfcHJlZigndmFnX3R1 bWJscl9pbXBvcnRfYXVkaW9fdGl0bGUnLCAkdmFnX3R1bWJscl9pbXBvcnRfYXVkaW9fdGl0 bGUsICd2YWdfdHVtYmxyJywgMik6ICcnOwoKCQkoJHZhZ190dW1ibHJfaW1wb3J0X3ZpZGVv X3RpdGxlKT8gc2V0X3ByZWYoJ3ZhZ190dW1ibHJfaW1wb3J0X3ZpZGVvX3RpdGxlJywgJHZh Z190dW1ibHJfaW1wb3J0X3ZpZGVvX3RpdGxlLCAndmFnX3R1bWJscicsIDIpOiAnJzsKCgkJ KCR2YWdfdHVtYmxyX2ltcG9ydF9xdW90ZV90aXRsZSk/IHNldF9wcmVmKCd2YWdfdHVtYmxy X2ltcG9ydF9xdW90ZV90aXRsZScsICR2YWdfdHVtYmxyX2ltcG9ydF9xdW90ZV90aXRsZSwg J3ZhZ190dW1ibHInLCAyKTogJyc7CgoJCSgkdmFnX3R1bWJscl9pbXBvcnRfY29udl90aXRs ZSk/IHNldF9wcmVmKCd2YWdfdHVtYmxyX2ltcG9ydF9jb252X3RpdGxlJywgJHZhZ190dW1i bHJfaW1wb3J0X2NvbnZfdGl0bGUsICd2YWdfdHVtYmxyJywgMik6ICcnOwoKCQkkbWVzc2Fn ZSAuPSAiU2V0dGluZ3Mgc2F2ZWQuIjsKCgl9CgoJcGFnZXRvcCgndHVtYmxyIEltcG9ydCcs ICRtZXNzYWdlKTsKCglleHRyYWN0KGdldF92YWdfdHVtYmxyX2ltcG9ydF9wcmVmcygpKTsK CgllY2hvIG4ubi4nPGZvcm0gbmFtZT0idHVtYmxlbG9nLWFkbWluIiBtZXRob2Q9InBvc3Qi IGFjdGlvbj0iaW5kZXgucGhwP2V2ZW50PXZhZ190dW1ibHIiPic7CgoJZWNobyB2YWdfdHVt YmxyX2ltcG9ydF90aXRsZXMoJHN0ZXApLgoKCQl0YWcoJ0dlbmVyYWwgU2V0dGluZ3MnICwn aDMnLCAnIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7IicpLgoKCQlzdGFydFRhYmxlKCds aXN0JykuCgoJCXRyKHRkKCd0dW1ibHIgVXNlcm5hbWUnKS50ZChmSW5wdXQoJ3RleHQnLCAn dmFnX3R1bWJscl9pbXBvcnRfcmVhZCcsICR2YWdfdHVtYmxyX2ltcG9ydF9yZWFkKSkpLgoK CQl0cih0ZCgnRGVmYXVsdCBVc2VyJykudGQodmFnX3VzZXJfcG9wdXAoJHZhZ190dW1ibHJf aW1wb3J0X3VzZXIsICd2YWdfdHVtYmxyX2ltcG9ydF91c2VyJykpKS4KCgkJdHIodGQoJ1Jl ZnJlc2ggVHlwZScpLnRkKHJhZGlvX2xpc3QoJ3ZhZ190dW1ibHJfaW1wb3J0X3JlZnJlc2gn LGFycmF5KCdyZWZyZXNoJz0+IlBhZ2UgTG9hZCIsJ2Nyb24nPT4iQ3JvbiBKb2IiKSwkdmFn X3R1bWJscl9pbXBvcnRfcmVmcmVzaCkpKS4KCgkJdHIodGQoJ09yaWdpbmFsIExpbmsgVGV4 dCcpLnRkKGZJbnB1dCgndGV4dCcsICd2YWdfdHVtYmxyX2ltcG9ydF9vcmlnaW5hbCcsICR2 YWdfdHVtYmxyX2ltcG9ydF9vcmlnaW5hbCkpKS4KCgkJZW5kVGFibGUoKS4KCgkJdGFnKCdU aXRsZXMnICwnaDMnLCAnIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7IG1hcmdpbi10b3A6 IDFlbTsiJykuCgoJCXN0YXJ0VGFibGUoJ2xpc3QnKS4KCgkJdHIodGQoJ1JlZ3VsYXIgUG9z dCB3L28gVGl0bGUnKS50ZChmSW5wdXQoJ3RleHQnLCAndmFnX3R1bWJscl9pbXBvcnRfcmVn dWxhcl9ub3RpdGxlJywgJHZhZ190dW1ibHJfaW1wb3J0X3JlZ3VsYXJfbm90aXRsZSkpKS4K CgkJdHIodGQoJ1JlZ3VsYXIgVGl0bGVzJykudGQoZklucHV0KCd0ZXh0JywgJ3ZhZ190dW1i bHJfaW1wb3J0X3JlZ3VsYXJfdGl0bGUnLCAkdmFnX3R1bWJscl9pbXBvcnRfcmVndWxhcl90 aXRsZSkpKS4KCgkJdHIodGQoJ0xpbmsgVGl0bGVzJykudGQoZklucHV0KCd0ZXh0JywgJ3Zh Z190dW1ibHJfaW1wb3J0X2xpbmtfdGl0bGUnLCAkdmFnX3R1bWJscl9pbXBvcnRfbGlua190 aXRsZSkpKS4KCgkJdHIodGQoJ0F1ZGlvIFRpdGxlcycpLnRkKGZJbnB1dCgndGV4dCcsICd2 YWdfdHVtYmxyX2ltcG9ydF9hdWRpb190aXRsZScsICR2YWdfdHVtYmxyX2ltcG9ydF9hdWRp b190aXRsZSkpKS4KCgkJdHIodGQoJ1ZpZGVvIFRpdGxlcycpLnRkKGZJbnB1dCgndGV4dCcs ICd2YWdfdHVtYmxyX2ltcG9ydF92aWRlb190aXRsZScsICR2YWdfdHVtYmxyX2ltcG9ydF92 aWRlb190aXRsZSkpKS4KCgkJdHIodGQoJ1Bob3RvIFRpdGxlcycpLnRkKGZJbnB1dCgndGV4 dCcsICd2YWdfdHVtYmxyX2ltcG9ydF9waG90b190aXRsZScsICR2YWdfdHVtYmxyX2ltcG9y dF9waG90b190aXRsZSkpKS4KCgkJdHIodGQoJ1F1b3RlIFRpdGxlcycpLnRkKGZJbnB1dCgn dGV4dCcsICd2YWdfdHVtYmxyX2ltcG9ydF9xdW90ZV90aXRsZScsICR2YWdfdHVtYmxyX2lt cG9ydF9xdW90ZV90aXRsZSkpKS4KCgkJdHIodGQoJ0NvbnZlcnNhdGlvbiBUaXRsZXMnKS50 ZChmSW5wdXQoJ3RleHQnLCAndmFnX3R1bWJscl9pbXBvcnRfY29udl90aXRsZScsICR2YWdf dHVtYmxyX2ltcG9ydF9jb252X3RpdGxlKSkpLgoKCQl0cih0ZGEoZklucHV0KCdzdWJtaXQn LCdzYXZlX3NldHRpbmdzJywnc2F2ZScsInB1Ymxpc2giLCAnJywgJycsICcnLCA0KSwgJyBj b2xzcGFuPTQnKSkuCgoJCWVuZFRhYmxlKCk7CgoJZWNobyBuLm4uJzwvZm9ybT4nOwp9Ci8v LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KZnVuY3Rpb24gdmFnX3R1bWJscl9jYXRfY2hlY2sgKCRjYXRlZ29yeSwgJHBh cmVudD0ncm9vdCcpCnsKCS8vQ2hlY2sgdG8gc2VlIGlmIGNhdGVnb3J5IGV4aXN0cwoJaWYo JGNhdGVnb3J5ICYmICFmZXRjaF9jYXRlZ29yeV90aXRsZSgkY2F0ZWdvcnkpKQoJewoJCS8v Q3JlYXRlIG5ldyBjYXRlZ29yeQoJCSRuYW1lID0gc2FuaXRpemVGb3JVcmwoJGNhdGVnb3J5 KTsKCQkkZXhpc3RzID0gc2FmZV9maWVsZCgnbmFtZScsICd0eHBfY2F0ZWdvcnknLCAibmFt ZSA9ICciLmRvU2xhc2goJG5hbWUpLiInIGFuZCB0eXBlID0gJ2FydGljbGUnIik7CgkJaWYg KCEkZXhpc3RzKQoJCXsKCQkJJHEgPSBzYWZlX2luc2VydCgndHhwX2NhdGVnb3J5JywgIm5h bWUgPSAnIi5kb1NsYXNoKCRuYW1lKS4iJywgdGl0bGUgPSAnIi5kb1NsYXNoKCRjYXRlZ29y eSkuIicsIHR5cGUgPSAnYXJ0aWNsZScsIHBhcmVudCA9ICciLmRvU2xhc2goJHBhcmVudCku IiciKTsKCQkJcmVidWlsZF90cmVlKCdyb290JywgMSwgJ2FydGljbGUnKTsKCQl9Cgl9Cn0K Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQpmdW5jdGlvbiB2YWdfdHVtYmxyX2xvc2Vfb3JwaGFucyAoKQp7CgkvL1J1 biBhIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9ycGhhbmVkIHJvd3MgaW4gdGhl IHJlbCB0YWJsZS4KCgkkdG1haW4gPSBzYWZlX3BmeCgndGV4dHBhdHRlcm4nKTsgLy8gbmFt ZSBvZiB0aGUgZGlzY3VzcyB0YWJsZQoJJHRyZWwgPSBzYWZlX3BmeCgndmFnX3R1bWJscl9p bXBvcnRfcmVsJyk7IC8vIG5hbWUgb2YgdGhlIHJlbGF0aW9ucyB0YWJsZQoKCS8vIEdldCBh bGwgb3JwaGFuZWQgY29tbWVudCByZWxhdGlvbnNoaXBzIHVzZSBDaGFsaXRvJ3MgKGhhbmdh cjE4Lm5vLWlwLm9yZykKCS8vIHN1cGVyIGNvb2wgcXVlcnkgdG8gZ2V0IG9ycGhhbmVkIGl0 ZW1zCglpZighc2FmZV9xdWVyeSgiU0hPVyBUQUJMRVMgTElLRSAnIi5zYWZlX3BmeCgndmFn X3R1bWJscl9pbXBvcnRfcmVsJykuIiciKSkKCXsKCQkkb3JwaGFucyA9IGdldFJvd3MoIihz ZWxlY3QgCWQuSUQgYXMgRGVsZXRlZCwgci5JRCBhcyBSZWxfSUQsIHIuVHhwX0lEIGFzIFR4 cF9JRAoJCQkJCQkJCQkJZnJvbSAiLiR0bWFpbi4iIGFzIGQKCQkJCQkJCQkJCXJpZ2h0IGpv aW4gIi4kdHJlbC4iIGFzIHIKCQkJCQkJCQkJCW9uIGQuSUQgPSByLlR4cF9JRAoJCQkJCQkJ CQkJd2hlcmUgZC5JRCBpcyBOVUxMKQoJCQkJCQkJVU5JT04gKAkJc2VsZWN0IAlkLklEIGFz IERlbGV0ZWQsIHIuSUQgYXMgUmVsX0lELCByLlR4cF9JRCBhcyBUeHBfSUQKCQkJCQkJCQkJ CWZyb20gIi4kdG1haW4uIiBhcyBkCgkJCQkJCQkJCQlyaWdodCBqb2luICIuJHRyZWwuIiBh cyByCgkJCQkJCQkJCQlvbiBkLklEID0gci5UeHBfSUQKCQkJCQkJCQkJCXdoZXJlIGQuSUQg aXMgTlVMTCkiKTsKCgkJLy9wcmludF9yKCRvcnBoYW5zKTsKCgkJaWYgKGlzX2FycmF5KCRv cnBoYW5zKSkgewoJCQkvLyBPcnBoYW5zIHRvIGRlbGV0ZSBoYXZlIGJlZW4gc2VsZWN0ZWQs IHByb2NlZWQgdG8gZGVsZXRlIHRoZW0KCgkJCSRvcnBoYW5zX3RvX2RlbGV0ZSA9IHBzKCdv cnBoYW5zX3RvX2RlbGV0ZScpOyAvLyBnZXQgb3JwaGFucyB0byBkZWxldGUgYXJyYXkgZnJv bSBQT1NUCgoJCQlpZiAoIWlzX2FycmF5KCRvcnBoYW5zKSl7CgkJCQlkaWUoJ0Vycm9yIGdl dHRpbmcgbGlzdCBvZiBJRHMgdG8gZGVsZXRlJyk7IC8vIG5vdCBhbiBhcnJheSwgd2Ugd2Vy ZSBzZW50IHNvbWV0aGluZyB3ZWlyZAoJCQl9IGVsc2UgewoJCQkJJHRyZWwgPSBzYWZlX3Bm eCgidmFnX3R1bWJscl9pbXBvcnRfcmVsIik7CgkJCQkkcXVlcnkgPSAiSUQgaW4gKCI7CgkJ CQlmb3IoJGkgPSAwOyAkaSA8IGNvdW50KCRvcnBoYW5zKTsgJGkrKykgewoJCQkJCSRxdWVy eSAuPSAkb3JwaGFuc1skaV1bJ1JlbF9JRCddOwoJCQkJCWlmKCRpIDwgKGNvdW50KCRvcnBo YW5zKSAtMSkpCgkJCQkJCSRxdWVyeSAuPSAnLCAnOwoJCQkJfQoJCQkJJHF1ZXJ5IC49ICIp IjsKCgkJCQkvL2VjaG8gJHF1ZXJ5OwoKCQkJCS8vIGRlbGV0ZSB0aGUgb3JwaGFuZWQgcmVs YXRpb25zaGlwcwoJCQkJc2FmZV9kZWxldGUoJ3ZhZ190dW1ibHJfaW1wb3J0X3JlbCcsICRx dWVyeSk7CgkJCX0KCQl9Cgl9Cn0KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiB2YWdfYmVnaW5zV2l0 aCgkc3RyLCAkc3ViKQp7CiAgICByZXR1cm4gKHN0cm5jbXAoJHN0ciwgJHN1Yiwgc3RybGVu KCRzdWIpKSA9PSAwKTsKfQovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIHZhZ191c2VyX3BvcHVwKCRD dXN0b20sICRpZCkKewoJJHJzID0gc2FmZV9jb2x1bW4oJ25hbWUnLCAndHhwX3VzZXJzJywn MT0xJyk7CgoJaWYgKCRycykKCXsKCQlyZXR1cm4gc2VsZWN0SW5wdXQoJGlkLCAkcnMsICRD dXN0b20sIHRydWUsICcnLCAkaWQpOwoJfQoKCXJldHVybiBmYWxzZTsKfQovLy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CmZ1bmN0aW9uIHZhZ190dW1ibHJfaGlkZGVucHVsbCgpCnsKCXNldF90aW1lX2xpbWl0KDEy MCk7CgoJdmFnX3B1bGxfdHVibHJfcG9zdHMoJ2hpZGRlbicpOwoKCS8vcmV0dXJuIGZhbHNl Owp9Ci8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gdmFnX3R1bWJscl9pbXBvcnRfZGF0YWJhc2VjaGVj aygpCnsKCXZhZ190dW1ibHJfaW1wb3J0X3ZlcmlmeVRhYmxlKCk7Cgl2YWdfdHVtYmxyX2Nh dF9jaGVjaygndHVtYmxyJyk7Cgl2YWdfdHVtYmxyX2NhdF9jaGVjaygnYXVkaW8nLCd0dW1i bHInKTsKCXZhZ190dW1ibHJfY2F0X2NoZWNrKCd2aWRlbycsJ3R1bWJscicpOwoJdmFnX3R1 bWJscl9jYXRfY2hlY2soJ2xpbmsnLCd0dW1ibHInKTsKCXZhZ190dW1ibHJfY2F0X2NoZWNr KCdwaG90bycsJ3R1bWJscicpOwoJdmFnX3R1bWJscl9jYXRfY2hlY2soJ2NvbnZlcnNhdGlv bicsJ3R1bWJscicpOwoJdmFnX3R1bWJscl9jYXRfY2hlY2soJ3F1b3RlJywndHVtYmxyJyk7 Cn0KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQpmdW5jdGlvbiB2YWdfdHVtYmxyX2ltcG9ydF9ncmFiKCRxdWVyeSkK ewoKCS8vIEZpcnN0IHRyeSB1c2luZyBjVVJMIHRvIGdyYWIgdGhlIGRhdGEuIFNob3VsZCB3 b3JrIGZvciBtb3N0LgoJaWYgKGZ1bmN0aW9uX2V4aXN0cygnY3VybF9pbml0JykpIHsKCgkJ JGNoID0gY3VybF9pbml0KCk7CgkJY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0hFQURFUiwg MCk7CgkJY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCAxKTsKCQlj dXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVJMLCAkcXVlcnkpOwoJCSRkYXRhID0gY3VybF9l eGVjKCRjaCk7CgoJCWN1cmxfY2xvc2UoJGNoKTsKCgkvLyBJZiB0aGF0IGlzbid0IGVuYWJs ZWQgbWF5YmUgZmlsZV9nZXRfY29udGVudHMgaXMgYXZhaWxhYmxlLgoJfSBlbHNlIGlmIChp bmlfZ2V0KCdhbGxvd191cmxfZm9wZW4nKSkgewoKCQkkZGF0YSA9IEBmaWxlX2dldF9jb250 ZW50cygkcXVlcnkpOwoKCS8vIFRoZXJlIGlzIGN1cnJlbnRseSBubyB0aGlyZCBvcHRpb24u Cgl9IGVsc2UgewoJCSRkYXRhID0gJyc7Cgl9CgoJcmV0dXJuICRkYXRhOwoKfSI7czozOiJt ZDUiO3M6MzI6IjA4NTYyOThjOTgwYzM1ZTk1MTYyYjNiZmUwMzU1NmU4Ijt9