# les_rss2html 0.1 # TextPattern port for rss2html script by NotePage, Inc. # Luke Stevenson # http://blog.lucanos.com # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YTo5OntzOjQ6Im5hbWUiO3M6MTI6Imxlc19yc3MyaHRtbCI7czo2OiJhdXRob3IiO3M6MTQ6Ikx1a2UgU3RldmVuc29uIjtzOjEwOiJhdXRob3JfdXJpIjtzOjIzOiJodHRwOi8vYmxvZy5sdWNhbm9zLmNvbSI7czo3OiJ2ZXJzaW9uIjtzOjM6IjAuMSI7czoxMToiZGVzY3JpcHRpb24iO3M6NTQ6IlRleHRQYXR0ZXJuIHBvcnQgZm9yIHJzczJodG1sIHNjcmlwdCBieSBOb3RlUGFnZSwgSW5jLiI7czo0OiJoZWxwIjtzOjc5MTI6IjxzdHJvbmc+SW50cm9kdWN0aW9uPC9zdHJvbmc+DQo8cD5UaGlzIHBsdWdpbiBpcyBhIFRleHRQYXR0ZXJuIHBvcnQgZm9yIHRoZSBGcmVlIFBIUCBQcm9ncmFtIGNhbGxlZCAicnNzMmh0bWwucGhwIiwgcmVsZWFzZWQgYnkgPGEgaHJlZj0iaHR0cDovL3d3dy5mZWVkZm9yYWxsLmNvbSI+RmVlZEZvckFsbDwvYT4sIHdoaWNoIHByb2Nlc3NlcyBhbiBSU1MgZmVlZCBhbmQgYWxsb3dzIHRoZSBjb250YWluZWQgaW5mb3JtYXRpb24gdG8gYmUgaW5zZXJ0ZWQgaW50byBhbiBIVE1MIGZyYW1ld29yay48L3A+DQoNCjxzdHJvbmc+VXNhZ2U8L3N0cm9uZz4NCjxwPlRoaXMgVGV4dFBhdHRlcm4gcGx1Z2luIHdpbGwgcGFyc2UgYW4gUlNTIFhNTCBmZWVkLCBhbmQgdGhlbiBwcm9jZXNzIHRoZSBjb2RlIGVuY2xvc2VkIGJldHdlZW4gdGhlIG9wZW5pbmcgYW5kIGNsb3NpbmcgdGFncywgcmVwbGFjaW5nIHRoZSBiZWxvdyBwbGFjZWhvbGRlcnMgd2l0aCB0aGUgcmVsZXZhbnQgY29udGVudC48L3A+DQoNCjxwPlRoaXMgdGFnIHNob3VsZCBiZSBjYWxsZWQgYXMgZm9sbG93czoNCjxibG9ja3F1b3RlPiZsdDt0eHA6bGVzX3JzczJodG1sIHhtbHVybD0iW1VSTCBmb3IgUlNTIEZlZWRdIiB7PGVtPk9wdGlvbmFsIFBhcmFtZXRlcnM8L2VtPn0gJmd0Ow0KPGRpdiBzdHlsZT0icGFkZGluZy1sZWZ0OjJlbTsiPntQYWdlIENvbnRlbnQgd2l0aCBGZWVkIExldmVsIFBsYWNlaG9sZGVycyAmIFNwZWNpYWwgVGFnc30NCjxkaXYgc3R5bGU9InBhZGRpbmctbGVmdDoyZW07Ij4mIzEyNjsmIzEyNjsmIzEyNjtCZWdpbkl0ZW1zUmVjb3JkJiMxMjY7JiMxMjY7JiMxMjY7DQo8ZGl2IHN0eWxlPSJwYWRkaW5nLWxlZnQ6MmVtOyI+e1BhZ2UgQ29udGVudCB0byBiZSByZXBlYXRlZCBmb3IgZWFjaCBJdGVtIHdpdGggSXRlbSAmIEZlZWQgTGV2ZWwgUGxhY2Vob2xkZXJzfTwvZGl2Pg0KJiMxMjY7JiMxMjY7JiMxMjY7RW5kSXRlbXNSZWNvcmQmIzEyNjsmIzEyNjsmIzEyNjs8L2Rpdj4NCntQYWdlIENvbnRlbnQgd2l0aCBGZWVkIExldmVsIFBsYWNlaG9sZGVyc308L2Rpdj4NCiZsdDsvdHhwOmxlc19yc3MyaHRtbCZndDs8L2Jsb2NrcXVvdGU+DQo8c3Ryb25nPk9wdGlvbmFsIFBhcmFtZXRlcnM8L3N0cm9uZz4NCjx1bD4NCjxsaT48c3Ryb25nPml0ZW1MaW1pdDwvc3Ryb25nPjxiciAvPg0KVGhlIG51bWJlciBvZiBSU1MgSXRlbXMgdG8gcHJvY2Vzcy4gRGVmYXVsdHMgdG8gMTAsMDAwIChJdCdzIGEgbmljZSByb3VuZCBudW1iZXIsIGFuZCB0aGUgc2FtZSBhcyB0aGUgZGVmYXVsdCBmcm9tIHRoZSBvcmlnaW5hbCB2ZXJzaW9uKS48L2xpPg0KPGxpPjxzdHJvbmc+ZmVlZFRpdGxlTGVuTGltaXQ8L3N0cm9uZz48YnIgLz4NClRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBpbmNsdWRlIGZvciB0aGUgRmVlZFRpdGxlIHZhbHVlLiBEZWZhdWx0cyB0byAwLCB3aGljaCBtZWFucyAiSW5jbHVkZSBBbGwiLjwvbGk+DQo8bGk+PHN0cm9uZz5mZWVkRGVzY0xlbkxpbWl0PC9zdHJvbmc+PGJyIC8+DQpUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gaW5jbHVkZSBmb3IgdGhlIEZlZWQgRGVzY3JpcHRpb24gdmFsdWUuIERlZmF1bHRzIHRvIDAsIHdoaWNoIG1lYW5zICJJbmNsdWRlIEFsbCIuPC9saT4NCjxsaT48c3Ryb25nPml0ZW1UaXRsZUxlbkxpbWl0PC9zdHJvbmc+PGJyIC8+DQpUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gaW5jbHVkZSBmb3IgdGhlIEl0ZW0gVGl0bGUgdmFsdWUuIERlZmF1bHRzIHRvIDAsIHdoaWNoIG1lYW5zICJJbmNsdWRlIEFsbCIuPC9saT4NCjxsaT48c3Ryb25nPml0ZW1EZXNjTGVuTGltaXQ8L3N0cm9uZz48YnIgLz4NCkRlZmF1bHRzIHRvIDAsIHdoaWNoIG1lYW5zICJJbmNsdWRlIEFsbCIuPC9saT4NCjwvdWw+DQo8L3A+DQo8cD48c3Ryb25nPlJTUyBDb250ZW50IFBsYWNlaG9sZGVyczwvc3Ryb25nPjx1bD4NCjxsaT48c3Ryb25nPkZlZWQgTGV2ZWw8L3N0cm9uZz48dWw+DQo8bGk+PHN0cm9uZz4mIzEyNjsmIzEyNjsmIzEyNjtGZWVkVGl0bGUmIzEyNjsmIzEyNjsmIzEyNjs8L3N0cm9uZz48YnIgLz4NCihUaGUgZmVlZCB0aXRsZS48L2xpPg0KPGxpPjxzdHJvbmc+JiMxMjY7JiMxMjY7JiMxMjY7RmVlZERlc2NyaXB0aW9uJiMxMjY7JiMxMjY7JiMxMjY7PC9zdHJvbmc+PGJyIC8+DQpUaGUgZmVlZCBkZXNjcmlwdGlvbi48L2xpPg0KPGxpPjxzdHJvbmc+JiMxMjY7JiMxMjY7JiMxMjY7RmVlZExpbmsmIzEyNjsmIzEyNjsmIzEyNjs8L3N0cm9uZz48YnIgLz4NClRoZSBmZWVkIGxpbmsuPC9saT4NCjxsaT48c3Ryb25nPiYjMTI2OyYjMTI2OyYjMTI2O0ZlZWRQdWJEYXRlJiMxMjY7JiMxMjY7JiMxMjY7PC9zdHJvbmc+PGJyIC8+DQpUaGUgZmVlZCBwdWJsaXNoZWQgZGF0ZS90aW1lIGluIFJTUyBmb3JtYXQuPC9saT4NCjxsaT48c3Ryb25nPiYjMTI2OyYjMTI2OyYjMTI2O0ZlZWRQdWJMb25nRGF0ZSYjMTI2OyYjMTI2OyYjMTI2Ozwvc3Ryb25nPjxiciAvPg0KVGhlIGZlZWQgcHVibGlzaGVkIGRhdGUgaW4gbG9uZyBkYXRlIGZvcm1hdCAtIDIxc3QgSmFuLCAyMDA2LjwvbGk+DQo8bGk+PHN0cm9uZz4mIzEyNjsmIzEyNjsmIzEyNjtGZWVkUHViU2hvcnREYXRlJiMxMjY7JiMxMjY7JiMxMjY7PC9zdHJvbmc+PGJyIC8+VGhlIGZlZWQgcHVibGlzaGVkIGRhdGUgaW4gc2hvcnQgZGF0ZSBmb3JtYXQgLSAyMS8xLzIwMDYuPC9saT4NCjxsaT48c3Ryb25nPiYjMTI2OyYjMTI2OyYjMTI2O0ZlZWRQdWJMb25nVGltZSYjMTI2OyYjMTI2OyYjMTI2Ozwvc3Ryb25nPjxiciAvPlRoZSBmZWVkIHB1Ymxpc2hlZCB0aW1lIGluICBsb25nIHRpbWUgZm9ybWF0IC0gMTM6MjQ6MzAgRURUIC0wNDAwLjwvbGk+DQo8bGk+PHN0cm9uZz4mIzEyNjsmIzEyNjsmIzEyNjtGZWVkUHViU2hvcnRUaW1lJiMxMjY7JiMxMjY7JiMxMjY7PC9zdHJvbmc+PGJyIC8+DQpUaGUgZmVlZCBwdWJsaXNoZWQgdGltZSBpbiBzaG9ydCB0aW1lIGZvcm1hdCAtIDE6MjQgUE0uPC9saT4NCjxsaT48c3Ryb25nPiYjMTI2OyYjMTI2OyYjMTI2O0ZlZWRJbWFnZVVybCYjMTI2OyYjMTI2OyYjMTI2Ozwvc3Ryb25nPjxiciAvPg0KVGhlIFVSTCB0byB0aGUgZmVlZCBpbWFnZS48L2xpPg0KPGxpPjxzdHJvbmc+JiMxMjY7JiMxMjY7JiMxMjY7RmVlZEltYWdlVGl0bGUmIzEyNjsmIzEyNjsmIzEyNjs8L3N0cm9uZz48YnIgLz4NClRoZSB0aXRsZSBmb3IgdGhlIGZlZWQgaW1hZ2UuPC9saT4NCjxsaT48c3Ryb25nPiYjMTI2OyYjMTI2OyYjMTI2O0ZlZWRJbWFnZUxpbmsmIzEyNjsmIzEyNjsmIzEyNjs8L3N0cm9uZz48YnIgLz4NClRoZSBsaW5rIGFzc29jaWF0ZWQgd2l0aCB0aGUgZmVlZCdzIGltYWdlLjwvbGk+PC91bD48L2xpPg0KDQo8bGk+PHN0cm9uZz5TcGVjaWFsIFRhZ3M8L3N0cm9uZz48dWw+DQo8bGk+PHN0cm9uZz4mIzEyNjsmIzEyNjsmIzEyNjtOb0Z1dHVyZUl0ZW1zJiMxMjY7JiMxMjY7JiMxMjY7PC9zdHJvbmc+PGJyIC8+DQpJdGVtcyB3aXRoIFB1Ymxpc2hlZCBEYXRlcyAoUHViRGF0ZXMpIHRoYXQgYXJlIGluIHRoZSBmdXR1cmUgd2lsbCBub3QgYmUgZGlzcGxheWVkIHVudGlsIHRoYXQgZGF0ZS90aW1lLjwvbGk+DQo8bGk+PHN0cm9uZz4mIzEyNjsmIzEyNjsmIzEyNjtCZWdpbkl0ZW1zUmVjb3JkJiMxMjY7JiMxMjY7JiMxMjY7PC9zdHJvbmc+PGJyIC8+DQpVc2VkIHRvIG1hcmsgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2VjdGlvbiBpbiB0aGUgdGVtcGxhdGUsIHRoYXQgc2hvdWxkIGJlIHJlcGVhdGVkIGZvciBlYWNoIGl0ZW0gaW4gdGhlIFJTUyBmZWVkLjwvbGk+DQo8bGk+PHN0cm9uZz4mIzEyNjsmIzEyNjsmIzEyNjtFbmRJdGVtc1JlY29yZCYjMTI2OyYjMTI2OyYjMTI2Ozwvc3Ryb25nPjxiciAvPg0KVXNlZCB0byBtYXJrIHRoZSBlbmQgb2YgdGhlIHNlY3Rpb24gaW4gdGhlIHRlbXBsYXRlLCB0aGF0IHNob3VsZCBiZSByZXBlYXRlZCBmb3IgZWFjaCBpdGVtIGluIHRoZSBSU1MgZmVlZC48L2xpPg0KPGxpPjxzdHJvbmc+JiMxMjY7JiMxMjY7JiMxMjY7QmVnaW5BbHRlcm5hdGVJdGVtc1JlY29yZCYjMTI2OyYjMTI2OyYjMTI2Ozwvc3Ryb25nPjxiciAvPg0KQ2FuIGJlIHBsYWNlZCBiZXR3ZWVuIHRoZSB0d28gYWJvdmUgdGFncyAoIkJlZ2luSXRlbXNSZWNvcmQiIGFuZCAiRW5kSXRlbXNSZWNvcmQiKSBzbyB0aGF0IHRoZSBzb3VyY2UgYmV0d2VlbiB0aGUgIkJlZ2luLi4iIHRhZyBhbmQgdGhpcyB0YWcgYXJlIHJlcGVhdGVkIGZvciBvZGQgbnVtYmVyZWQgaXRlbXMsIGFuZCB0aGUgc291cmNlIGJldHdlZW4gdGhlICJFbmQuLiIgdGFnIGFuZCB0aGlzIHRhZyBhcmUgcmVwZWF0ZWQgZm9yIGV2ZW4gbnVtYmVyZWQgaXRlbXMuIEFsbG93cyBmb3IgYWx0ZXJuYXRpbmcgaXRlbSBjaGFyYWN0ZXJpc3RpY3MuPC9saT4NCjwvdWw+DQo8L2xpPg0KPGxpPjxzdHJvbmc+SXRlbSBMZXZlbDwvc3Ryb25nPjx1bD4NCjxsaT48c3Ryb25nPiYjMTI2OyYjMTI2OyYjMTI2O0l0ZW1UaXRsZSYjMTI2OyYjMTI2OyYjMTI2Ozwvc3Ryb25nPjxiciAvPg0KVGhlIGl0ZW0gdGl0bGUuPC9saT4NCjxsaT48c3Ryb25nPiYjMTI2OyYjMTI2OyYjMTI2O0l0ZW1EZXNjcmlwdGlvbiYjMTI2OyYjMTI2OyYjMTI2Ozwvc3Ryb25nPjxiciAvPg0KVGhlIGl0ZW0gZGVzY3JpcHRpb24uPC9saT4NCjxsaT48c3Ryb25nPiYjMTI2OyYjMTI2OyYjMTI2O0l0ZW1MaW5rJiMxMjY7JiMxMjY7JiMxMjY7PC9zdHJvbmc+PGJyIC8+DQpUaGUgaXRlbSBsaW5rLjwvbGk+DQo8bGk+PHN0cm9uZz4mIzEyNjsmIzEyNjsmIzEyNjtJdGVtUHViRGF0ZSYjMTI2OyYjMTI2OyYjMTI2Ozwvc3Ryb25nPjxiciAvPg0KVGhlIGl0ZW0ncyBwdWIgZGF0ZS90aW1lIGluIFJTUyBmb3JtYXQuPC9saT4NCjxsaT48c3Ryb25nPiYjMTI2OyYjMTI2OyYjMTI2O0l0ZW1QdWJMb25nRGF0ZSYjMTI2OyYjMTI2OyYjMTI2Ozwvc3Ryb25nPjxiciAvPg0KVGhlIGl0ZW1zIGRhdGUgaW4geW91ciBXaW5kb3dzIGxvbmcgZGF0ZSBmb3JtYXQgLSAyMXN0IEphbiwgMjAwNi48L2xpPg0KPGxpPjxzdHJvbmc+JiMxMjY7JiMxMjY7JiMxMjY7SXRlbVB1YlNob3J0RGF0ZSYjMTI2OyYjMTI2OyYjMTI2Ozwvc3Ryb25nPjxiciAvPg0KVGhlIGl0ZW0gZGF0ZSBpbiB5b3VyIFdpbmRvd3Mgc2hvcnQgZGF0ZSBmb3JtYXQgLSAyMS8xLzIwMDYuPC9saT4NCjxsaT48c3Ryb25nPiYjMTI2OyYjMTI2OyYjMTI2O0l0ZW1QdWJMb25nVGltZSYjMTI2OyYjMTI2OyYjMTI2Ozwvc3Ryb25nPjxiciAvPg0KVGhlIGl0ZW0gdGltZSBpbiB5b3VyIFdpbmRvd3MgbG9uZyB0aW1lIGZvcm1hdCAtIDEzOjI0OjMwIEVEVCAtMDQwMC48L2xpPg0KPGxpPjxzdHJvbmc+JiMxMjY7JiMxMjY7JiMxMjY7SXRlbVB1YlNob3J0VGltZSYjMTI2OyYjMTI2OyYjMTI2Ozwvc3Ryb25nPjxiciAvPg0KVGhlIGl0ZW0gdGltZSBpbiB5b3VyIFdpbmRvd3Mgc2hvcnQgdGltZSBmb3JtYXQgLSAxOjI0IFBNLjwvbGk+DQo8bGk+PHN0cm9uZz4mIzEyNjsmIzEyNjsmIzEyNjtJdGVtRW5jbG9zdXJlVXJsJiMxMjY7JiMxMjY7JiMxMjY7PC9zdHJvbmc+PGJyIC8+DQpUaGUgaXRlbSBlbmNsb3N1cmUgVVJMLjwvbGk+DQo8bGk+PHN0cm9uZz4mIzEyNjsmIzEyNjsmIzEyNjtJdGVtR3VpZCYjMTI2OyYjMTI2OyYjMTI2Ozwvc3Ryb25nPjxiciAvPg0KVGhlIGl0ZW0gR1VJRCBmaWVsZCB2YWx1ZS48L2xpPg0KPC91bD4NCjwvbGk+DQo8L3VsPg0KDQo8c3Ryb25nPkV4YW1wbGVzPC9zdHJvbmc+DQo8dWw+PGxpPjxzdHJvbmc+Q3JlYXRpbmcgYSBUYWJsZSwgd2l0aCBhIG5ldyBjZWxsIGZvciBlYWNoIEl0ZW0uPC9zdHJvbmc+DQo8ZGl2IHN0eWxlPSJwYWRkaW5nLWxlZnQ6MmVtOyI+Jmx0O1RBQkxFIFdJRFRIPSIxMDAlIiZndDsNCiAgICA8ZGl2IHN0eWxlPSJwYWRkaW5nLWxlZnQ6MmVtOyI+JiMxMjY7JiMxMjY7JiMxMjY7QmVnaW5JdGVtc1JlY29yZCYjMTI2OyYjMTI2OyYjMTI2Ow0KICAgICAgICA8ZGl2IHN0eWxlPSJwYWRkaW5nLWxlZnQ6MmVtOyI+Jmx0O1RSIFZBTElHTi0iVE9QIiZndDsNCiAgICAgICAgICAgICAgPGRpdiBzdHlsZT0icGFkZGluZy1sZWZ0OjJlbTsiPiZsdDtURCZndDsNCiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9InBhZGRpbmctbGVmdDoyZW07Ij4mbHQ7U01BTEwmZ3Q7JiMxMjY7JiMxMjY7JiMxMjY7SXRlbVB1YlNob3J0RGF0ZSYjMTI2OyYjMTI2OyYjMTI2OyZsdDsvU01BTEwmZ3Q7PGJyIC8+DQogICAgICAgICAgICAgICAgICAmbHQ7U1RST05HJmd0OyYjMTI2OyYjMTI2OyYjMTI2O0l0ZW1UaXRsZSYjMTI2OyYjMTI2OyYjMTI2OyZsdDsvU1RST05HJmd0OyZsdDtCUiAvJmd0OzxiciAvPg0KICAgICAgICAgICAgICAgICAgJiMxMjY7JiMxMjY7JiMxMjY7SXRlbURlc2NyaXB0aW9uJiMxMjY7JiMxMjY7JiMxMjY7Jmx0O0JSIC8mZ3Q7PGJyIC8+DQogICAgICAgICAgICAgICAgICAmbHQ7QSBIUkVGPSImIzEyNjsmIzEyNjsmIzEyNjtJdGVtTGluayYjMTI2OyYjMTI2OyYjMTI2OyImZ3Q7TW9yZSBJbmZvJmx0Oy9BJmd0OzwvZGl2Pg0KICAgICAgICAgICAgICAgICZsdDsvVEQmZ3Q7PC9kaXY+DQogICAgICAgICAgICAmbHQ7L1RSJmd0OzwvZGl2Pg0KICAgICAgICAmIzEyNjsmIzEyNjsmIzEyNjtFbmRJdGVtc1JlY29yZCYjMTI2OyYjMTI2OyYjMTI2OzwvZGl2Pg0KJmx0Oy9UQUJMRSZndDs8L2Rpdj48L2xpPjxsaT48c3Ryb25nPkNyZWF0aW5nIGFuIFVub3JkZXJlZCBMaXN0IG9mIEl0ZW1zLjwvc3Ryb25nPg0KPGRpdiBzdHlsZT0icGFkZGluZy1sZWZ0OjJlbTsiPiZsdDtTVFJPTkcmZ3Q7Jmx0O0EgSFJFRj0iJiMxMjY7JiMxMjY7JiMxMjY7RmVlZExpbmsmIzEyNjsmIzEyNjsmIzEyNjsiIFRJVExFPSImIzEyNjsmIzEyNjsmIzEyNjtGZWVkRGVzY3JpcHRpb24mIzEyNjsmIzEyNjsmIzEyNjsiPjxiciAvPg0KPGRpdiBzdHlsZT0icGFkZGluZy1sZWZ0OjJlbTsiPiYjMTI2OyYjMTI2OyYjMTI2O0ZlZWRUaXRsZSYjMTI2OyYjMTI2OyYjMTI2OyAmIzY0OyAmIzEyNjsmIzEyNjsmIzEyNjtGZWVkUHViU2hvcnRUaW1lJiMxMjY7JiMxMjY7JiMxMjY7ICYjMTI2OyYjMTI2OyYjMTI2O0ZlZWRQdWJMb25nRGF0ZSYjMTI2OyYjMTI2OyYjMTI2OzwvZGl2Pg0KJmx0Oy9BJmd0OyZsdDsvU1RST05HJmd0OzxiciAvPg0KJmx0O1VMIGlkPSImIzEyNjsmIzEyNjsmIzEyNjtGZWVkVGl0bGUmIzEyNjsmIzEyNjsmIzEyNjsiJmd0Ow0KICAgIDxkaXYgc3R5bGU9InBhZGRpbmctbGVmdDoyZW07Ij4mbHQ7TEkmZ3Q7DQoJCTxkaXYgc3R5bGU9InBhZGRpbmctbGVmdDoyZW07Ij4mIzEyNjsmIzEyNjsmIzEyNjtGZWVkUHViU2hvcnRUaW1lJiMxMjY7JiMxMjY7JiMxMjY7ICYjMTI2OyYjMTI2OyYjMTI2O0ZlZWRQdWJTaG9ydERhdGUmIzEyNjsmIzEyNjsmIzEyNjsmbHQ7QlIgLyZndDs8YnIgLz4NCgkJJmx0O0EgSFJFRj0iJiMxMjY7JiMxMjY7JiMxMjY7SXRlbUxpbmsmIzEyNjsmIzEyNjsmIzEyNjsiJmd0OyYjMTI2OyYjMTI2OyYjMTI2O0l0ZW1UaXRsZSYjMTI2OyYjMTI2OyYjMTI2OyZsdDsvQSZndDsmbHQ7QlIgLyZndDs8YnIgLz4NCgkJJiMxMjY7JiMxMjY7JiMxMjY7SXRlbURlc2NyaXB0aW9uJiMxMjY7JiMxMjY7JiMxMjY7PC9kaXY+DQogICAgJmx0Oy9MSSZndDs8L2Rpdj4NCiZsdDtVTCZndDs8L2Rpdj48L2xpPjwvdWw+PC9wPg0KPHA+PHN0cm9uZz5DUkVESVRTPC9zdHJvbmc+PGJyIC8+UGxlYXNlIGRvIGNoZWNrIG91dCB0aGUgc2l0ZSBmb3IgPGEgaHJlZj0iaHR0cDovL3d3dy5mZWVkZm9yYWxsLmNvbSI+RmVlZEZvckFsbC5jb208L2E+IGFuZCA8YSBocmVmPSJodHRwOi8vd3d3Lm5vdGVwYWdlLmNvbS8iPk5vdGVQYWdlLCBJbmMuPC9hPiAtIHRoZSBvcmlnaW5hbCBhdXRob3JzIG9mIHRoZSBGcmVlIFBIUCBzY3JpcHQgd2hpY2ggdGhpcyBwbHVnaW4gd2FzIGFkYXB0ZWQgZnJvbS4iO3M6NDoiY29kZSI7czozMDI4MjoiLy8gVGV4dFBhdHRlcm4gUGx1Z2luDQovLyBsZXNfcnNzMmh0bWwNCi8vIGJ5IEx1a2UgU3RldmVuc29uDQovLyBodHRwOi8vYmxvZy5sdWNhbm9zLmNvbQ0KLy8gVmVyc2lvbiAwLjEgICAtIDA3IEFwciAyMDA2DQovLw0KLy8gVGhpcyBpcyBhIFRleHRQYXR0ZXJuIHBvcnQgb2YgdGhlIHJzczJodG1sLnBocCBzY3JpcHQNCi8vICAgcHJvdmlkZWQgZnJlZSBvZiBjaGFyZ2UgYnkgTm90ZVBhZ2UsIEluYy4gdmlhIHRoZWlyDQovLyAgIHdlYnNpdGUgaHR0cDovL3d3dy5mZWVkZm9yYWxsLmNvbS4NCi8vDQovLyBDb3B5cmlnaHQgMjAwNC0yMDA2IE5vdGVQYWdlLCBJbmMuDQovLyBodHRwOi8vd3d3LmZlZWRmb3JhbGwuY29tDQovLyBUaGlzIHNjcmlwdCBtYXkgYmUgdXNlZCBmcmVlbHkgZm9yIGJ1c2luZXNzIG9yIHBlcnNvbmFsIHVzZQ0KLy8gVGhpcyBzY3JpcHQgbWF5IG5vdCBiZSByZXNvbGQgaW4gYW55IGZvcm0NCi8vDQoNCg0KZnVuY3Rpb24gbGVzX3JzczJodG1sKCAkYXR0cyAsICR0aGluZz0nJyApIHsNCg0KICBleHRyYWN0KCBsQXR0cyggYXJyYXkoDQogICAgJ3htbHVybCcgID0+IG51bGwsDQogICAgJ2l0ZW1saW1pdCcgPT4gMTAwMDAsDQogICAgJ2ZlZWR0aXRsZWxlbmxpbWl0JyA9PiAwLA0KICAgICdmZWVkZGVzY2xlbmxpbWl0JyA9PiAwLA0KICAgICdpdGVtdGl0bGVsZW5saW1pdCcgPT4gMCwNCiAgICAnaXRlbWRlc2NsZW5saW1pdCcgPT4gMA0KICApICwgJGF0dHMgKSApOw0KICANCiAgLy8NCiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiAgLy8gQ29uZmlndXJhdGlvbiBvcHRpb25zDQogIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQogIC8vDQogIC8vIFNldCB0aGUgZm9sbG93aW5nIHZhcmlhYmxlIHVzZUZvcGVuVVJMIHRvIG9uZSBpZiB5b3Ugd2FudC9uZWVkIHRvIHVzZSBmb3BlbigpIGluc3RlYWQgb2YgQ1VSTA0KICAgICR1c2VGb3BlblVSTCA9IDA7DQoNCiAgLy8NCiAgLy8gU2luY2Ugc29tZSBmZWVkcyBtYXkgaGF2ZSB0aXRsZXMgb3IgZGVzY3JpcHRpb25zIGluIHRoZSBmZWVkIG9yIGl0ZW1zIHRoYXQNCiAgLy8gYXJlIGxvbmdlciB0aGVuIHdhbnQgZml0cyBpbiB5b3VyIEhUTUwgcGFnZSBpdCBpcyBwb3NzaWJsZSB0byB0cmltIHRoZW0gDQogIC8vIHdpdGggdGhlIGZvbGxvd2luZyA0IHZhcmlhYmxlcy4gIEEgdmFsdWVzIG9mIDAgKFpFUk8pIGRpc3BsYXlzIHRoZSBmdWxsIA0KICAvLyBsZW5ndGguDQogIC8vIENBVVRJT046ICBEbyBub3QgbGltaXQgYSB0aXRsZSBvciBkZXNjcmlwdGlvbiB0aGF0IGhhcyBIVE1MIGluIGl0LCB0aGUgDQogIC8vICAgICAgICAgICB3aWxsIG5vdCBwcm9kdWNlIGEgdmFsaWQgSFRNTCBwYWdlLg0KICAgICRsaW1pdEZlZWRUaXRsZUxlbmd0aCA9ICRmZWVkdGl0bGVsZW5saW1pdDsgICAgICAgIC8vIE5vdCBsaW1pdGVkLCBpbiB0aGUgVVJMIGFzIEZlZWRUaXRsZUxlbmd0aD0NCiAgICAkbGltaXRGZWVkRGVzY3JpcHRpb25MZW5ndGggPSAkZmVlZGRlc2NsZW5saW1pdDsgIC8vIE5vdCBsaW1pdGVkLCBpbiB0aGUgVVJMIGFzIEZlZWREZXNjcmlwdGlvbkxlbmd0aD0NCiAgICAkbGltaXRJdGVtVGl0bGVMZW5ndGggPSAkaXRlbXRpdGxlbGVubGltaXQ7ICAgICAgICAvLyBOb3QgbGltaXRlZCwgaW4gdGhlIFVSTCBhcyBJdGVtVGl0bGVMZW5ndGg9DQogICAgJGxpbWl0SXRlbURlc2NyaXB0aW9uTGVuZ3RoID0gJGl0ZW1kZXNjbGVubGltaXQ7ICAvLyBOb3QgbGltaXRlZCwgaW4gdGhlIFVSTCBhcyBJdGVtRGVzY3JpcHRpb25MZW5ndGg9DQoNCiAgLy8NCiAgLy8gZGF0ZSgpIGZ1bmN0aW9uIGRvY3VtZW50ZWQgaHR0cDovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5kYXRlLnBocA0KICAgICRMb25nRGF0ZUZvcm1hdCAgPSAialMgRiBZIjsgICAgIC8vIGllLCAiMjFzdCBKYW4gMjAwNCINCiAgICAkU2hvcnREYXRlRm9ybWF0ID0gImQvbS9ZIjsgICAgICAvLyBpZSwgIjIxLzAxLzIwMDQiDQogICAgJExvbmdUaW1lRm9ybWF0ICA9ICJIOmk6cyBUIE8iOyAgLy8gaWUsICIxMzoyNDozMCBFRFQgLTA0MDAiDQogICAgJFNob3J0VGltZUZvcm1hdCA9ICJoOmkgQSI7ICAgICAgLy8gaWUsICIxOjI0IFBNIg0KDQogIC8vDQogIC8vIFJlZ2lzdGVyZWQgdXNlciBvZiBGZWVkRm9yQWxsIGFuZCBGZWVkRm9yQWxsIE1hYyBwcm9kdWN0KHMpIGhhdmUgYWNjZXNzDQogIC8vIHRvIGEgY2FjaGluZyBtb2R1bGUuICBUaGlzIGVuYWJsZXMgaXQncyB1c2UgaWYgaXQgaXMgaW5zdGFsbGVkLg0KICAgICRhbGxvd0NhY2hpbmdYTUxGaWxlcyA9IDA7DQoNCiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiAgLy8gQmVsb3cgdGhpcyBwb2ludCBvZiB0aGUgZmlsZSB0aGVyZSBhcmUgbm8gdXNlciBlZGl0YWJsZSBvcHRpb25zLiAgWW91cg0KICAvLyBhcmUgd2VsY29tZSB0byBtYWtlIGFueSBtb2RpZmljYXRpb25zIHRoYXQgeW91IHdpc2ggdG8gYW55IG9mIHRoZSBjb2RlDQogIC8vIGJlbG93LCBidXQgdGhhdCBpcyBub3QgbmVjZXNzYXJ5IGZvciBub3JtYWwgdXNlLg0KICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQoNCiAgaWYgKCR1c2VGb3BlblVSTCkgew0KICAgIGluaV9zZXQoImFsbG93X3VybF9mb3BlbiIsICIxIik7DQogICAgaW5pX3NldCgidXNlcl9hZ2VudCIsICdGZWVkRm9yQWxsIHJzczJodG1sLnBocCB2MicpOw0KICB9DQoNCiAgaWYgKGZ1bmN0aW9uX2V4aXN0cygiRmVlZEZvckFsbF9yc3MyaHRtbF9yZWFkRmlsZSIpID09PSBGQUxTRSkgew0KICAgIGZ1bmN0aW9uIEZlZWRGb3JBbGxfcnNzMmh0bWxfcmVhZEZpbGUoJGZpbGVuYW1lLCAkdXNlRm9wZW5VUkwsICR1c2VDYWNoaW5nID0gMCkgew0KICAgICAgaWYgKCR1c2VDYWNoaW5nKTsNCiAgICANCiAgICAgICRHTE9CQUxTWyJFUlJPUlNUUklORyJdID0gIiI7DQogICAgICAkcmVzdWx0ID0gIiI7DQogICAgICBpZiAoc3RyaXN0cigkZmlsZW5hbWUsICI6Ly8iKSkgew0KICAgICAgICBpZiAoJHVzZUZvcGVuVVJMKSB7DQogICAgICAgICAgaWYgKCgkZmQgPSBAZm9wZW4oJGZpbGVuYW1lLCAicmIiKSkgPT09IEZBTFNFKSB7DQogICAgICAgICAgICByZXR1cm4gRkFMU0U7DQogICAgICAgICAgfQ0KICAgICAgICAgIHdoaWxlICgoJGRhdGEgPSBmcmVhZCgkZmQsIDQwOTYpKSAhPSAiIikgew0KICAgICAgICAgICAgJHJlc3VsdCAuPSAkZGF0YTsNCiAgICAgICAgICB9DQogICAgICAgICAgZmNsb3NlKCRmZCk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgLy8gVGhpcyBpcyBhIFVSTCBzbyB1c2UgQ1VSTA0KICAgICAgICAgICRjdXJsSGFuZGxlID0gY3VybF9pbml0KCk7DQogICAgICAgICAgY3VybF9zZXRvcHQoJGN1cmxIYW5kbGUsIENVUkxPUFRfVVJMLCAkZmlsZW5hbWUpOw0KICAgICAgICAgIGN1cmxfc2V0b3B0KCRjdXJsSGFuZGxlLCBDVVJMT1BUX0hFQURFUiwgMCk7DQogICAgICAgICAgY3VybF9zZXRvcHQoJGN1cmxIYW5kbGUsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIDEpOw0KICAgICAgICAgIGN1cmxfc2V0b3B0KCRjdXJsSGFuZGxlLCBDVVJMT1BUX1VTRVJBR0VOVCwgIkZlZWRGb3JBbGwgcnNzMmh0bWwucGhwIHYyIik7DQogICAgICAgICAgLy8gICAgY3VybF9zZXRvcHQoJGN1cmxIYW5kbGUsIENVUkxPUFRfQVVUT1JFRkVSRVIsIDEpOw0KICAgICAgICAgIGN1cmxfc2V0b3B0KCRjdXJsSGFuZGxlLCBDVVJMT1BUX1JFRkVSRVIsICRmaWxlbmFtZSk7DQogICAgICAgICAgY3VybF9zZXRvcHQoJGN1cmxIYW5kbGUsIENVUkxPUFRfRk9MTE9XTE9DQVRJT04sIDEpOw0KICAgICAgICAgIGN1cmxfc2V0b3B0KCRjdXJsSGFuZGxlLCBDVVJMT1BUX01BWFJFRElSUywgMTApOw0KICAgICAgICAgICRyZXN1bHQgPSBjdXJsX2V4ZWMoJGN1cmxIYW5kbGUpOw0KICAgICAgICAgIGlmIChjdXJsX2Vycm5vKCRjdXJsSGFuZGxlKSkgew0KICAgICAgICAgICAgJEdMT0JBTFNbIkVSUk9SU1RSSU5HIl0gPSBjdXJsX2Vycm9yKCRjdXJsSGFuZGxlKTsNCiAgICAgICAgICAgIGN1cmxfY2xvc2UoJGN1cmxIYW5kbGUpOw0KICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KICAgICAgICAgIH0NCiAgICAgICAgICBjdXJsX2Nsb3NlKCRjdXJsSGFuZGxlKTsNCiAgICAgICAgfQ0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgLy8gVGhpcyBpcyBhIGxvY2FsIGZpbGUsIHNvIHVzZSBmb3Blbg0KICAgICAgICBpZiAoKCRmZCA9IEBmb3BlbigkZmlsZW5hbWUsICJyYiIpKSA9PT0gRkFMU0UpIHsNCiAgICAgICAgICByZXR1cm4gRkFMU0U7DQogICAgICAgIH0NCiAgICAgICAgd2hpbGUgKCgkZGF0YSA9IGZyZWFkKCRmZCwgNDA5NikpICE9ICIiKSB7DQogICAgICAgICAgJHJlc3VsdCAuPSAkZGF0YTsNCiAgICAgICAgfQ0KICAgICAgICBmY2xvc2UoJGZkKTsNCiAgICAgIH0NCiAgICAgIHJldHVybiAkcmVzdWx0Ow0KICAgIH0NCiAgfQ0KDQogIGlmIChmdW5jdGlvbl9leGlzdHMoIkZlZWRGb3JBbGxfcnNzMmh0bWxfY29udmVydEVuY29kaW5nIikgPT09IEZBTFNFKSB7DQogICAgZnVuY3Rpb24gRmVlZEZvckFsbF9yc3MyaHRtbF9jb252ZXJ0RW5jb2RpbmcoJFhNTHN0cmluZykgew0KICAgICAgJHJlc3VsdHMgPSBOVUxMOw0KICAgIA0KICAgICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygibWJfY29udmVydF9lbmNvZGluZyIpID09PSBGQUxTRSkgcmV0dXJuICRYTUxzdHJpbmc7DQogICAgDQogICAgICBpZiAocHJlZ19tYXRjaCgiLzxcP3htbCguKilcPz4vIiwgJFhNTHN0cmluZywgJHJlc3VsdHMpID09PSBGQUxTRSkgcmV0dXJuICRYTUxzdHJpbmc7DQoNCiAgICAgICRyZXN1bHRzID0gc3RyX3JlcGxhY2UoIiAiLCAiIiwgJHJlc3VsdHMpOw0KICAgICAgJHJlc3VsdHMgPSBzdHJfcmVwbGFjZSgiJyIsICJcIiIsICRyZXN1bHRzKTsNCg0KICAgICAgaWYgKCgkbG9jYXRpb24gPSBzdHJpc3RyKCRyZXN1bHRzWzBdLCAiZW5jb2Rpbmc9IikpID09PSBGQUxTRSkgcmV0dXJuICRYTUxzdHJpbmc7DQoNCiAgICAgICRwYXJ0cyA9IHNwbGl0KCJcIiIsICRsb2NhdGlvbik7DQoNCiAgICAgIGlmICgoJG5ld1Jlc3VsdCA9IG1iX2NvbnZlcnRfZW5jb2RpbmcoJFhNTHN0cmluZywgIlVURi04IiwgJHBhcnRzWzFdKSkgPT0gRkFMU0UpIHsNCiAgICAgICAgcmV0dXJuICRYTUxzdHJpbmc7DQogICAgICB9DQogICAgDQogICAgICByZXR1cm4gJG5ld1Jlc3VsdDsNCiAgICB9DQogIH0NCg0KICBpZiAoZnVuY3Rpb25fZXhpc3RzKCJGZWVkRm9yQWxsX3JzczJodG1sX2xpbWl0TGVuZ3RoIikgPT09IEZBTFNFKSB7DQogICAgZnVuY3Rpb24gRmVlZEZvckFsbF9yc3MyaHRtbF9saW1pdExlbmd0aCgkaW5pdGlhbFZhbHVlLCAkbGltaXQgPSAwKSB7DQogICAgICBpZiAoKCRsaW1pdCA9PSAwKSB8fCAoc3RybGVuKCRpbml0aWFsVmFsdWUpIDw9ICRsaW1pdCApKSB7DQogICAgICAgIC8vIFpFUk8gaXMgZm9yIG5vdCBsaW1pdGVkDQogICAgICAgIHJldHVybiAkaW5pdGlhbFZhbHVlOw0KICAgICAgfQ0KICAgIA0KICAgICAgLy8gQ3V0IHRoZSB0ZXh0IGF0IHRoZSBleGFjdCBwb2ludCwgaWdub3JpbmcgaWYgaXQgaXMgaW4gYSB3b3JkLg0KICAgICAgJHJlc3VsdCA9IHN1YnN0cigkaW5pdGlhbFZhbHVlLCAwLCAkbGltaXQpOw0KICAgIA0KICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BhY2Ugd2UgY2FuIHRyaW0gYXQgYW5kIGlmIGl0IGlzIG5vdCANCiAgICAgIC8vIHRvbyBmYXIgZnJvbSB3aGVyZSB3ZSBhcmUNCiAgICAgICRsYXN0U3BhY2UgPSBzdHJyY2hyKCRyZXN1bHQsJyAnKTsNCiAgICAgIGlmICgoJGxhc3RTcGFjZSAhPT0gRkFMU0UpICYmIChzdHJsZW4oJGxhc3RTcGFjZSkgPCAyMCkpIHsNCiAgICAgICAgLy8gbG9zZSBhbnkgaW5jb21wbGV0ZSB3b3JkIGF0IHRoZSBlbmQNCiAgICAgICAgJHJlc3VsdCA9IHN1YnN0cigkcmVzdWx0LCAwLCAtKHN0cmxlbigkbGFzdFNwYWNlKSkpOw0KICAgICAgICAvLyBBcHBlbmQgZWxpcHNlcywgLi4uICwgdG8gc2hvdyBpdCB3YXMgdHJ1bmNhdGVkDQogICAgICAgICRyZXN1bHQgLj0gIiAuLi4iOw0KICAgICAgfQ0KDQogICAgICByZXR1cm4gJHJlc3VsdDsNCiAgICB9DQogIH0NCg0KICAkTm9GdXR1cmVJdGVtcyA9IEZBTFNFOw0KDQogIC8vDQogIC8vIEFzIG11Y2ggYXMgSSBoYXRlIGdsb2JhbHMsIHRoZXkgYXJlIG5lZWRlZCBkdWUgdG8gdGhlDQogIC8vIHJlY3VzaXZlIG5hdHVyZSBvZiB0aGUgcGFyc2VyDQogICAgJGluc2lkZWNoYW5uZWwgICAgICA9IEZBTFNFOw0KICAgICRsZXZlbF9jaGFubmVsICAgICAgPSAwOw0KICAgICRpbnNpZGVjaGFubmVsaW1hZ2UgPSBGQUxTRTsNCiAgICAkbGV2ZWxfY2hhbm5lbGltYWdlID0gMDsNCiAgICAkaW5zaWRlaXRlbSAgICAgICAgID0gRkFMU0U7DQogICAgJGxldmVsX2l0ZW0gICAgICAgICA9IDA7DQoNCiAgaWYgKGZ1bmN0aW9uX2V4aXN0cygiRmVlZEZvckFsbF9yc3MyaHRtbF9nZXRSRkRkYXRlIikgPT09IEZBTFNFKSB7DQogICAgZnVuY3Rpb24gRmVlZEZvckFsbF9yc3MyaHRtbF9nZXRSRkRkYXRlKCRkYXRlc3RyaW5nKSB7DQogICAgICAkeWVhciAgID0gc3Vic3RyKCRkYXRlc3RyaW5nLCAgMCwgNCk7DQogICAgICAkbW9udGggID0gc3Vic3RyKCRkYXRlc3RyaW5nLCAgNSwgMik7DQogICAgICAkZGF5ICAgID0gc3Vic3RyKCRkYXRlc3RyaW5nLCAgOCwgMik7DQogICAgICAkaG91ciAgID0gc3Vic3RyKCRkYXRlc3RyaW5nLCAxMSwgMik7DQogICAgICAkbWludXRlID0gc3Vic3RyKCRkYXRlc3RyaW5nLCAxNCwgMik7DQogICAgICAkc2Vjb25kID0gc3Vic3RyKCRkYXRlc3RyaW5nLCAxNywgMik7DQogICAgICBpZiAoc3Vic3RyKCRkYXRlc3RyaW5nLCAxOSwgMSkgPT0gIloiKSB7DQogICAgICAgICRvZmZzZXRfaG91ciA9IDA7DQogICAgICAgICRvZmZzZXRfbWludXRlID0gMDsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIGlmIChzdWJzdHIoJGRhdGVzdHJpbmcsIDE5LCAxKSA9PSAiLSIpIHsNCiAgICAgICAgICAkb2Zmc2V0X2hvdXIgPSBzdWJzdHIoJGRhdGVzdHJpbmcsIDIwLCAyKTsNCiAgICAgICAgICAkb2Zmc2V0X21pbnV0ZSA9IHN1YnN0cigkZGF0ZXN0cmluZywgMjMsIDIpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICRvZmZzZXRfaG91ciA9IC0xKnN1YnN0cigkZGF0ZXN0cmluZywgMjAsIDIpOw0KICAgICAgICAgICRvZmZzZXRfbWludXRlID0gLTEqc3Vic3RyKCRkYXRlc3RyaW5nLCAyMywgMik7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIHJldHVybiBnbW1rdGltZSgkaG91ciskb2Zmc2V0X2hvdXIsICRtaW51dGUrJG9mZnNldF9taW51dGUsICRzZWNvbmQsICRtb250aCwgJGRheSwgJHllYXIpOw0KICAgIH0NCg0KICAgIGNsYXNzIEZlZWRGb3JBbGxfcnNzMmh0bWxfUlNTUGFyc2VyIHsNCiAgICAgIHZhciAkZ290Uk9PVCA9IDA7DQogICAgICB2YXIgJGZlZWRUWVBFID0gIlJTUyI7DQogICAgICB2YXIgJGxldmVsID0gMDsNCiAgICAgIHZhciAkdGFnID0gIiI7DQogICAgICB2YXIgJHRpdGxlID0gIiI7DQogICAgICB2YXIgJGRlc2NyaXB0aW9uID0gIiI7DQogICAgICB2YXIgJGNvbnRlbnRFbmNvZGVkID0gIiI7DQogICAgICB2YXIgJGxpbmsgPSAiIjsNCiAgICAgIHZhciAkZ3VpZCA9ICIiOw0KICAgICAgdmFyICRlbmNsb3N1cmVVUkwgPSAiIjsNCiAgICAgIHZhciAkcHViZGF0ZSA9ICIiOw0KICAgICAgdmFyICRwdWJkYXRlREMgPSAiIjsNCiAgICAgIHZhciAkZmltYWdlVVJMID0gIiI7DQogICAgICB2YXIgJGZpbWFnZVRpdGxlID0gIiI7DQogICAgICB2YXIgJGZpbWFnZUxpbmsgPSAiIjsNCiAgICAgIHZhciAkYXV0aG9yID0gIiI7DQogICAgICB2YXIgJERjQ3JlYXRvciA9ICIiOw0KDQogICAgICB2YXIgJEZlZWRUaXRsZSA9ICIiOw0KICAgICAgdmFyICRGZWVkRGVzY3JpcHRpb24gPSAiIjsNCiAgICAgIHZhciAkRmVlZENvbnRlbnRFbmNvZGVkID0gIiI7DQogICAgICB2YXIgJEZlZWRMaW5rID0gIiI7DQogICAgICB2YXIgJEZlZWRQdWJEYXRlID0gIiI7DQogICAgICB2YXIgJEZlZWRQdWJEYXRlREMgPSAiIjsNCiAgICAgIHZhciAkRmVlZFB1YkRhdGVfdCA9ICIiOw0KICAgICAgdmFyICRGZWVkTGFzdEJ1aWxkRGF0ZSA9ICIiOw0KICAgICAgdmFyICRGZWVkSW1hZ2VVUkwgPSAiIjsNCiAgICAgIHZhciAkRmVlZEltYWdlVGl0bGUgPSAiIjsNCiAgICAgIHZhciAkRmVlZEltYWdlTGluayA9ICIiOw0KDQogICAgICAvLyBXaGVuIGFkZGluZyBuZXcgSXRlbSBlbGVtZW50cywgYmUgc3VyZSB0byB1cGRhdGUgdGhlIHNvcnQgYmVsb3cNCiAgICAgIHZhciAkSXRlbVRpdGxlID0gQXJyYXkoKTsNCiAgICAgIHZhciAkSXRlbURlc2NyaXB0aW9uID0gQXJyYXkoKTsNCiAgICAgIHZhciAkSXRlbUNvbnRlbnRFbmNvZGVkID0gQXJyYXkoKTsNCiAgICAgIHZhciAkSXRlbUxpbmsgPSBBcnJheSgpOw0KICAgICAgdmFyICRJdGVtR3VpZCA9IEFycmF5KCk7DQogICAgICB2YXIgJEl0ZW1QdWJEYXRlID0gQXJyYXkoKTsNCiAgICAgIHZhciAkSXRlbVB1YkRhdGVfdCA9IEFycmF5KCk7DQogICAgICB2YXIgJEl0ZW1FbmNsb3N1cmVVUkwgPSBBcnJheSgpOw0KICAgICAgdmFyICRJdGVtQXV0aG9yID0gQXJyYXkoKTsNCg0KICAgICAgZnVuY3Rpb24gc3RhcnRFbGVtZW50KCRwYXJzZXIsICR0YWdOYW1lLCAkYXR0cnMpIHsNCiAgICAgICAgR0xPQkFMICRpbnNpZGVjaGFubmVsOw0KICAgICAgICBHTE9CQUwgJGxldmVsX2NoYW5uZWw7DQogICAgICAgIEdMT0JBTCAkaW5zaWRlY2hhbm5lbGltYWdlOw0KICAgICAgICBHTE9CQUwgJGxldmVsX2NoYW5uZWxpbWFnZTsNCiAgICAgICAgR0xPQkFMICRpbnNpZGVpdGVtOw0KICAgICAgICBHTE9CQUwgJGxldmVsX2l0ZW07DQoNCiAgICAgICAgJHRoaXMtPmxldmVsKys7DQogICAgICAgICR0aGlzLT50YWcgPSAkdGFnTmFtZTsNCiAgICAgICAgaWYgKCR0aGlzLT5nb3RST09UID09IDApIHsNCiAgICAgICAgICAkdGhpcy0+Z290Uk9PVCA9IDE7DQogICAgICAgICAgaWYgKHN0cnN0cigkdGFnTmFtZSwgIlJTUyIpKSB7DQogICAgICAgICAgICAkdGhpcy0+ZmVlZFRZUEUgPSAiUlNTIjsNCiAgICAgICAgICB9DQogICAgICAgICAgZWxzZWlmIChzdHJzdHIoJHRhZ05hbWUsICJSREYiKSkgew0KICAgICAgICAgICAgJHRoaXMtPmZlZWRUWVBFID0gIlJERiI7DQogICAgICAgICAgfQ0KICAgICAgICAgIGVsc2VpZiAoc3Ryc3RyKCR0YWdOYW1lLCAiRkVFIikpIHsNCiAgICAgICAgICAgICR0aGlzLT5mZWVkVFlQRSA9ICJGRUUiOw0KICAgICAgICAgICAgJGluc2lkZWNoYW5uZWwgPSBUUlVFOw0KICAgICAgICAgICAgJGxldmVsX2NoYW5uZWwgPSAxOw0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBlbHNlaWYgKCgoJHRhZ05hbWUgPT0gIklURU0iKSAmJiAoJHRoaXMtPmZlZWRUWVBFICE9ICJGRUUiKSkgfHwgKCgkdGFnTmFtZSA9PSAiRU5UUlkiKSAmJiAoJHRoaXMtPmZlZWRUWVBFID09ICJGRUUiKSkpIHsNCiAgICAgICAgICAkaW5zaWRlaXRlbSA9IFRSVUU7DQogICAgICAgICAgJGxldmVsX2l0ZW0gPSAkdGhpcy0+bGV2ZWw7DQogICAgICAgIH0NCiAgICAgICAgZWxzZWlmICgoJGluc2lkZWl0ZW0pICYmICgkdGFnTmFtZSA9PSAiRU5DTE9TVVJFIikpIHsNCiAgICAgICAgICAkdGhpcy0+ZW5jbG9zdXJlVVJMID0gJGF0dHJzWyJVUkwiXTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlaWYgKCgkdGFnTmFtZSA9PSAiTElOSyIpICYmICgkdGhpcy0+ZmVlZFRZUEUgPT0gIkZFRSIpKSB7DQogICAgICAgICAgJHRoaXMtPmxpbmsgPSAkYXR0cnNbIkhSRUYiXTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlaWYgKCR0YWdOYW1lID09ICJDSEFOTkVMIikgew0KICAgICAgICAgICRpbnNpZGVjaGFubmVsID0gVFJVRTsNCiAgICAgICAgICAkbGV2ZWxfY2hhbm5lbCA9ICR0aGlzLT5sZXZlbDsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlaWYgKCgkdGFnTmFtZSA9PSAiSU1BR0UiKSAmJiAoJGluc2lkZWNoYW5uZWwgPSBUUlVFKSkgew0KICAgICAgICAgICRpbnNpZGVjaGFubmVsaW1hZ2UgPSBUUlVFOw0KICAgICAgICAgICRsZXZlbF9jaGFubmVsaW1hZ2UgPSAkdGhpcy0+bGV2ZWw7DQogICAgICAgIH0NCiAgICAgICAgaWYgKCRwYXJzZXIpOw0KICAgICAgfQ0KDQogICAgICBmdW5jdGlvbiBlbmRFbGVtZW50KCRwYXJzZXIsICR0YWdOYW1lKSB7DQogICAgICAgIEdMT0JBTCAkaW5zaWRlY2hhbm5lbDsNCiAgICAgICAgR0xPQkFMICRsZXZlbF9jaGFubmVsOw0KICAgICAgICBHTE9CQUwgJGluc2lkZWNoYW5uZWxpbWFnZTsNCiAgICAgICAgR0xPQkFMICRsZXZlbF9jaGFubmVsaW1hZ2U7DQogICAgICAgIEdMT0JBTCAkaW5zaWRlaXRlbTsNCiAgICAgICAgR0xPQkFMICRsZXZlbF9pdGVtOw0KICAgICAgICBHTE9CQUwgJE5vRnV0dXJlSXRlbXM7DQoNCiAgICAgICAgJHRoaXMtPmxldmVsLS07DQogICAgICAgIGlmICgoKCR0YWdOYW1lID09ICJJVEVNIikgJiYgKCR0aGlzLT5mZWVkVFlQRSAhPSAiRkVFIikpIHx8ICgoJHRhZ05hbWUgPT0gIkVOVFJZIikgJiYgKCR0aGlzLT5mZWVkVFlQRSA9PSAiRkVFIikpKSB7DQogICAgICAgICAgJFVzZUl0ZW0gPSBUUlVFOw0KDQogICAgICAgICAgaWYgKCROb0Z1dHVyZUl0ZW1zKSB7DQogICAgICAgICAgICAkbm9vbiA9IHN0cnRvdGltZSgidG9kYXkgYXQgMTI6MDAiKTsNCiAgICAgICAgICAgIGlmICh0cmltKCR0aGlzLT5wdWJkYXRlKSAhPSAiIikgew0KICAgICAgICAgICAgICAkSXRlbVB1YkRhdGUgPSBzdHJ0b3RpbWUoJHRoaXMtPnB1YmRhdGUpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZSBpZiAodHJpbSgkdGhpcy0+cHViZGF0ZURDKSAhPSAiIikgew0KICAgICAgICAgICAgICAkSXRlbVB1YkRhdGUgPSBGZWVkRm9yQWxsX3JzczJodG1sX2dldFJGRGRhdGUoJHRoaXMtPnB1YmRhdGVEQyk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAkSXRlbVB1YkRhdGUgPSB0aW1lKCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoKCRJdGVtUHViRGF0ZSAtICRub29uKSA+IDQzMjAwKSB7DQogICAgICAgICAgICAgICRVc2VJdGVtID0gRkFMU0U7DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KDQogICAgICAgICAgaWYgKCRVc2VJdGVtKSB7DQogICAgICAgICAgICAkdGhpcy0+SXRlbVRpdGxlW10gPSB0cmltKCR0aGlzLT50aXRsZSk7DQogICAgICAgICAgICAkdGhpcy0+SXRlbURlc2NyaXB0aW9uW10gPSB0cmltKCR0aGlzLT5kZXNjcmlwdGlvbik7DQogICAgICAgICAgICAkdGhpcy0+SXRlbUNvbnRlbnRFbmNvZGVkW10gPSB0cmltKCR0aGlzLT5jb250ZW50RW5jb2RlZCk7DQogICAgICAgICAgICBpZiAodHJpbSgkdGhpcy0+Y29udGVudEVuY29kZWQpID09ICIiKSB7DQogICAgICAgICAgICAgICR0aGlzLT5JdGVtQ29udGVudEVuY29kZWRbXSA9ICR0aGlzLT5kZXNjcmlwdGlvbjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICR0aGlzLT5JdGVtTGlua1tdID0gdHJpbSgkdGhpcy0+bGluayk7DQogICAgICAgICAgICAvLw0KICAgICAgICAgICAgLy8gR2V0IHRoZSBwdWJEYXRlIGZyb20gcHViRGF0ZSBmaXJzdCBhbmQgdGhlbiBkYzpkYXRlDQogICAgICAgICAgICBpZiAodHJpbSgkdGhpcy0+cHViZGF0ZSkgIT0gIiIpIHsNCiAgICAgICAgICAgICAgJHRoaXMtPkl0ZW1QdWJEYXRlW10gPSB0cmltKCR0aGlzLT5wdWJkYXRlKTsNCiAgICAgICAgICAgICAgJHRoaXMtPkl0ZW1QdWJEYXRlX3RbXSA9IHN0cnRvdGltZSgkdGhpcy0+cHViZGF0ZSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlIGlmICh0cmltKCR0aGlzLT5wdWJkYXRlREMpICE9ICIiKSB7DQogICAgICAgICAgICAgICR0aGlzLT5JdGVtUHViRGF0ZVtdID0gdHJpbSgkdGhpcy0+cHViZGF0ZURDKTsNCiAgICAgICAgICAgICAgJHRoaXMtPkl0ZW1QdWJEYXRlX3RbXSA9IEZlZWRGb3JBbGxfcnNzMmh0bWxfZ2V0UkZEZGF0ZSgkdGhpcy0+cHViZGF0ZURDKTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICR0aGlzLT5JdGVtUHViRGF0ZVtdID0gZGF0ZSgiRCwgZCBNIFkgSDppOnMgKzAwMDAiKTsNCiAgICAgICAgICAgICAgJHRoaXMtPkl0ZW1QdWJEYXRlX3RbXSA9IHRpbWUoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICR0aGlzLT5JdGVtR3VpZFtdID0gdHJpbSgkdGhpcy0+Z3VpZCk7DQogICAgICAgICAgICAkdGhpcy0+SXRlbUVuY2xvc3VyZVVSTFtdID0gdHJpbSgkdGhpcy0+ZW5jbG9zdXJlVVJMKTsNCiAgICAgICAgICAgIGlmICgkdGhpcy0+YXV0aG9yID09ICIiKSB7DQogICAgICAgICAgICAgICR0aGlzLT5JdGVtQXV0aG9yW10gPSAkdGhpcy0+RGNDcmVhdG9yOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgJHRoaXMtPkl0ZW1BdXRob3JbXSA9ICR0aGlzLT5hdXRob3I7DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICAgICR0aGlzLT50aXRsZSA9ICIiOw0KICAgICAgICAgICR0aGlzLT5kZXNjcmlwdGlvbiA9ICIiOw0KICAgICAgICAgICR0aGlzLT5jb250ZW50RW5jb2RlZCA9ICIiOw0KICAgICAgICAgICR0aGlzLT5saW5rID0gIiI7DQogICAgICAgICAgJHRoaXMtPnB1YmRhdGUgPSAiIjsNCiAgICAgICAgICAkdGhpcy0+cHViZGF0ZURDID0gIiI7DQogICAgICAgICAgJHRoaXMtPmd1aWQgPSAiIjsNCiAgICAgICAgICAkdGhpcy0+ZW5jbG9zdXJlVVJMID0gIiI7DQogICAgICAgICAgJHRoaXMtPmF1dGhvciA9ICIiOw0KICAgICAgICAgICR0aGlzLT5EY0NyZWF0b3IgPSAiIjsNCiAgICAgICAgICAkaW5zaWRlaXRlbSA9IEZBTFNFOw0KICAgICAgICAgICRsZXZlbF9pdGVtID0gMDsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlaWYgKCgkdGFnTmFtZSA9PSAiSU1BR0UiKSAmJiAoJGluc2lkZWNoYW5uZWxpbWFnZSkpIHsNCiAgICAgICAgICAkdGhpcy0+RmVlZEltYWdlVVJMID0gdHJpbSgkdGhpcy0+ZmltYWdlVVJMKTsNCiAgICAgICAgICAkdGhpcy0+RmVlZEltYWdlVGl0bGUgPSB0cmltKCR0aGlzLT5maW1hZ2VUaXRsZSk7DQogICAgICAgICAgJHRoaXMtPkZlZWRJbWFnZUxpbmsgPSB0cmltKCR0aGlzLT5maW1hZ2VMaW5rKTsNCiAgICAgICAgICAkdGhpcy0+ZmltYWdlVVJMID0gIiI7DQogICAgICAgICAgJHRoaXMtPmZpbWFnZVRpdGxlID0gIiI7DQogICAgICAgICAgJHRoaXMtPmZpbWFnZUxpbmsgPSAiIjsNCiAgICAgICAgICAkaW5zaWRlY2hhbm5lbGltYWdlID0gRkFMU0U7DQogICAgICAgICAgJGxldmVsX2NoYW5uZWxpbWFnZSA9IDA7DQogICAgICAgIH0NCiAgICAgICAgZWxzZWlmICgkdGFnTmFtZSA9PSAiQ0hBTk5FTCIpIHsNCiAgICAgICAgICAvLw0KICAgICAgICAgIC8vIEdldCB0aGUgcHViRGF0ZSBmcm9tIHB1YkRhdGUgZmlyc3QgYW5kIHRoZW4gZGM6ZGF0ZQ0KICAgICAgICAgIGlmICh0cmltKCR0aGlzLT5GZWVkUHViRGF0ZSkgIT0gIiIpIHsNCiAgICAgICAgICAgICR0aGlzLT5GZWVkUHViRGF0ZV90ID0gc3RydG90aW1lKCR0aGlzLT5GZWVkUHViRGF0ZSk7DQogICAgICAgICAgfQ0KICAgICAgICAgIGVsc2UgaWYgKHRyaW0oJHRoaXMtPkZlZWRQdWJEYXRlREMpICE9ICIiKSB7DQogICAgICAgICAgICAkdGhpcy0+RmVlZFB1YkRhdGVfdCA9IEZlZWRGb3JBbGxfcnNzMmh0bWxfZ2V0UkZEZGF0ZSgkdGhpcy0+RmVlZFB1YkRhdGVEQyk7DQogICAgICAgICAgfQ0KICAgICAgICAgIGVsc2UgaWYgKHRyaW0oJHRoaXMtPkZlZWRMYXN0QnVpbGREYXRlKSAhPSAiIikgew0KICAgICAgICAgICAgJHRoaXMtPkZlZWRQdWJEYXRlX3QgPSBzdHJ0b3RpbWUoJHRoaXMtPkZlZWRMYXN0QnVpbGREYXRlKTsNCiAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgJHRoaXMtPkZlZWRQdWJEYXRlID0gZGF0ZSgiRCwgZCBNIFkgSDppOnMgKzAwMDAiKTsNCiAgICAgICAgICAgICR0aGlzLT5GZWVkUHViRGF0ZV90ID0gdGltZSgpOw0KICAgICAgICAgIH0NCiAgICAgICAgICAkaW5zaWRlY2hhbm5lbCA9IEZBTFNFOw0KICAgICAgICAgICRsZXZlbF9jaGFubmVsID0gMDsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlaWYgKCR0aGlzLT5sZXZlbCA9PSAkbGV2ZWxfY2hhbm5lbCkgew0KICAgICAgICAgIGlmICgkdGFnTmFtZSA9PSAiVElUTEUiKSB7DQogICAgICAgICAgICAkdGhpcy0+RmVlZFRpdGxlID0gdHJpbSgkdGhpcy0+dGl0bGUpOw0KICAgICAgICAgICAgJHRoaXMtPnRpdGxlID0gIiI7DQogICAgICAgICAgfQ0KICAgICAgICAgIGVsc2VpZiAoKCR0YWdOYW1lID09ICJERVNDUklQVElPTiIpIHx8ICgkdGFnTmFtZSA9PSAiVEFHTElORSIpKSB7DQogICAgICAgICAgICAkdGhpcy0+RmVlZERlc2NyaXB0aW9uID0gdHJpbSgkdGhpcy0+ZGVzY3JpcHRpb24pOw0KICAgICAgICAgICAgJHRoaXMtPmRlc2NyaXB0aW9uID0gIiI7DQogICAgICAgICAgfQ0KICAgICAgICAgIGVsc2VpZiAoJHRhZ05hbWUgPT0gIkNPTlRFTlQ6RU5DT0RFRCIpIHsNCiAgICAgICAgICAgICR0aGlzLT5GZWVkQ29udGVudEVuY29kZWQgPSB0cmltKCR0aGlzLT5jb250ZW50RW5jb2RlZCk7DQogICAgICAgICAgICAkdGhpcy0+Y29udGVudEVuY29kZWQgPSAiIjsNCiAgICAgICAgICB9DQogICAgICAgICAgZWxzZWlmICgkdGFnTmFtZSA9PSAiTElOSyIpIHsNCiAgICAgICAgICAgICR0aGlzLT5GZWVkTGluayA9IHRyaW0oJHRoaXMtPmxpbmspOw0KICAgICAgICAgICAgJHRoaXMtPmxpbmsgPSAiIjsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgaWYgKCRwYXJzZXIpOw0KICAgICAgfQ0KDQogICAgICBmdW5jdGlvbiBjaGFyYWN0ZXJEYXRhKCRwYXJzZXIsICRkYXRhKSB7DQogICAgICAgIEdMT0JBTCAkaW5zaWRlY2hhbm5lbDsNCiAgICAgICAgR0xPQkFMICRsZXZlbF9jaGFubmVsOw0KICAgICAgICBHTE9CQUwgJGluc2lkZWNoYW5uZWxpbWFnZTsNCiAgICAgICAgR0xPQkFMICRsZXZlbF9jaGFubmVsaW1hZ2U7DQogICAgICAgIEdMT0JBTCAkaW5zaWRlaXRlbTsNCiAgICAgICAgR0xPQkFMICRsZXZlbF9pdGVtOw0KDQogICAgICAgIGlmICgoJGRhdGEgPT0gIiIpIHx8ICgkZGF0YSA9PSBOVUxMKSkgew0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIGlmICgoJGluc2lkZWl0ZW0pICYmICgkdGhpcy0+bGV2ZWwgPT0gJGxldmVsX2l0ZW0rMSkpIHsNCiAgICAgICAgICAgIHN3aXRjaCAoJHRoaXMtPnRhZykgew0KICAgICAgICAgICAgICBjYXNlICJUSVRMRSI6DQogICAgICAgICAgICAgICAgJHRoaXMtPnRpdGxlIC49ICRkYXRhOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICBjYXNlICJERVNDUklQVElPTiI6DQogICAgICAgICAgICAgICAgJHRoaXMtPmRlc2NyaXB0aW9uIC49ICRkYXRhOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICBjYXNlICJDT05URU5UOkVOQ09ERUQiOg0KICAgICAgICAgICAgICAgICR0aGlzLT5jb250ZW50RW5jb2RlZCAuPSAkZGF0YTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgY2FzZSAiU1VNTUFSWSI6DQogICAgICAgICAgICAgICAgJHRoaXMtPmRlc2NyaXB0aW9uIC49ICRkYXRhOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICBjYXNlICJMSU5LIjoNCiAgICAgICAgICAgICAgICAkdGhpcy0+bGluayAuPSAkZGF0YTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgY2FzZSAiUFVCREFURSI6DQogICAgICAgICAgICAgICAgJHRoaXMtPnB1YmRhdGUgLj0gJGRhdGE7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgIGNhc2UgIkRDOkRBVEUiOg0KICAgICAgICAgICAgICAgICR0aGlzLT5wdWJkYXRlREMgLj0gJGRhdGE7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgIGNhc2UgIk1PRElGSUVEIjoNCiAgICAgICAgICAgICAgICAkdGhpcy0+cHViZGF0ZURDIC49ICRkYXRhOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICBjYXNlICJHVUlEIjoNCiAgICAgICAgICAgICAgICAkdGhpcy0+Z3VpZCAuPSAkZGF0YTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgY2FzZSAiQVVUSE9SIjoNCiAgICAgICAgICAgICAgICAkdGhpcy0+YXV0aG9yIC49ICRkYXRhOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICBjYXNlICJEQzpDUkVBVE9SIjoNCiAgICAgICAgICAgICAgICAkdGhpcy0+RGNDcmVhdG9yIC49ICRkYXRhOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgICBlbHNlaWYgKCRpbnNpZGVjaGFubmVsaW1hZ2UpIHsNCiAgICAgICAgICAgIHN3aXRjaCAoJHRoaXMtPnRhZykgew0KICAgICAgICAgICAgICBjYXNlICJUSVRMRSI6DQogICAgICAgICAgICAgICAgJHRoaXMtPmZpbWFnZVRpdGxlIC49ICRkYXRhOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICBjYXNlICJVUkwiOg0KICAgICAgICAgICAgICAgICR0aGlzLT5maW1hZ2VVUkwgLj0gJGRhdGE7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgIGNhc2UgIkxJTksiOg0KICAgICAgICAgICAgICAgICR0aGlzLT5maW1hZ2VMaW5rIC49ICRkYXRhOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgICBlbHNlaWYgKCgkaW5zaWRlY2hhbm5lbCkgJiYgKCR0aGlzLT5sZXZlbCA9PSAkbGV2ZWxfY2hhbm5lbCsxKSkgew0KICAgICAgICAgICAgc3dpdGNoICgkdGhpcy0+dGFnKSB7DQogICAgICAgICAgICAgIGNhc2UgIlRJVExFIjoNCiAgICAgICAgICAgICAgICAkdGhpcy0+dGl0bGUgLj0gJGRhdGE7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgIGNhc2UgIkRFU0NSSVBUSU9OIjoNCiAgICAgICAgICAgICAgICAkdGhpcy0+ZGVzY3JpcHRpb24gLj0gJGRhdGE7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgIGNhc2UgIkNPTlRFTlQ6RU5DT0RFRCI6DQogICAgICAgICAgICAgICAgJHRoaXMtPmNvbnRlbnRFbmNvZGVkIC49ICRkYXRhOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICBjYXNlICJUQUdMSU5FIjoNCiAgICAgICAgICAgICAgICAkdGhpcy0+ZGVzY3JpcHRpb24gLj0gJGRhdGE7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgIGNhc2UgIkxJTksiOg0KICAgICAgICAgICAgICAgICR0aGlzLT5saW5rIC49ICRkYXRhOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICBjYXNlICJQVUJEQVRFIjoNCiAgICAgICAgICAgICAgICAkdGhpcy0+RmVlZFB1YkRhdGUgLj0gJGRhdGE7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgIGNhc2UgIkRDOkRBVEUiOg0KICAgICAgICAgICAgICAgICR0aGlzLT5GZWVkUHViRGF0ZURDIC49ICRkYXRhOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICBjYXNlICJNT0RJRklFRCI6DQogICAgICAgICAgICAgICAgJHRoaXMtPkZlZWRQdWJEYXRlREMgLj0gJGRhdGE7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgIGNhc2UgIkxBU1RCVUlMRERBVEUiOg0KICAgICAgICAgICAgICAgICR0aGlzLT5GZWVkTGFzdEJ1aWxkRGF0ZSAuPSAkZGF0YTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgaWYgKCRwYXJzZXIpOw0KICAgICAgfQ0KICAgIH0NCiAgfQ0KDQogIGlmIChzdHJzdHIoJHRoaW5nLCAifn5+Tm9GdXR1cmVJdGVtc35+fiIpKSB7DQogICAgJE5vRnV0dXJlSXRlbXMgPSBUUlVFOw0KICB9DQoNCiAgJHhtbF9wYXJzZXIgPSB4bWxfcGFyc2VyX2NyZWF0ZSgiVVRGLTgiKTsNCiAgJHJzc19wYXJzZXIgPSBuZXcgRmVlZEZvckFsbF9yc3MyaHRtbF9SU1NQYXJzZXIoKTsNCiAgeG1sX3NldF9vYmplY3QoJHhtbF9wYXJzZXIsJHJzc19wYXJzZXIpOw0KICB4bWxfc2V0X2VsZW1lbnRfaGFuZGxlcigkeG1sX3BhcnNlciwgInN0YXJ0RWxlbWVudCIsICJlbmRFbGVtZW50Iik7DQogIHhtbF9zZXRfY2hhcmFjdGVyX2RhdGFfaGFuZGxlcigkeG1sX3BhcnNlciwgImNoYXJhY3RlckRhdGEiKTsNCiAgeG1sX3BhcnNlcl9zZXRfb3B0aW9uKCR4bWxfcGFyc2VyLFhNTF9PUFRJT05fQ0FTRV9GT0xESU5HLDEpOw0KICBpZiAoKCRYTUwgPSBGZWVkRm9yQWxsX3JzczJodG1sX3JlYWRGaWxlKCR4bWx1cmwsICR1c2VGb3BlblVSTCwgJGFsbG93Q2FjaGluZ1hNTEZpbGVzKSkgPT09IEZBTFNFKSB7DQogICAgcmV0dXJuICggIkVSUk9SICMxIDogbGVzX3JzczJodG1sIHdhcyB1bmFibGUgdG8gb3BlbiBSU1MgRmVlZCBhdCAnJHhtbHVybCciLg0KCSAgKCAkR0xPQkFMU1siRVJST1JTVFJJTkciXSAhPSAiIiA/ICIgd2l0aCBkZXRhaWwgJyRHTE9CQUxTW0VSUk9SU1RSSU5HXSciIDogIiIgKS4iXG4iICk7DQogICAgZXhpdCAtMTsNCiAgfQ0KICAkWE1MID0gRmVlZEZvckFsbF9yc3MyaHRtbF9jb252ZXJ0RW5jb2RpbmcoJFhNTCk7DQogIHhtbF9wYXJzZSgkeG1sX3BhcnNlciwgJFhNTCk7DQogIHhtbF9wYXJzZXJfZnJlZSgkeG1sX3BhcnNlcik7DQoNCiAgLy8gbWFrZSBzdXJlIHRoZSBjaGFubmVsIGNvbnRlbnRFbmNvZGVkIGlzIG5vdCBibGFuaw0KICBpZiAoJHJzc19wYXJzZXItPkZlZWRDb250ZW50RW5jb2RlZCA9PSAiIikgew0KICAgICRyc3NfcGFyc2VyLT5GZWVkQ29udGVudEVuY29kZWQgPSAkcnNzX3BhcnNlci0+RmVlZERlc2NyaXB0aW9uOw0KICB9DQogICR0aGluZyA9IHN0cl9yZXBsYWNlKCJ+fn5GZWVkWE1MRmlsZW5hbWV+fn4iLCAkeG1sdXJsLCAkdGhpbmcpOw0KICAkdGhpbmcgPSBzdHJfcmVwbGFjZSgifn5+RmVlZFRpdGxlfn5+IiwgRmVlZEZvckFsbF9yc3MyaHRtbF9saW1pdExlbmd0aCgkcnNzX3BhcnNlci0+RmVlZFRpdGxlLCAkbGltaXRGZWVkVGl0bGVMZW5ndGgpLCAkdGhpbmcpOw0KICAkdGhpbmcgPSBzdHJfcmVwbGFjZSgifn5+RmVlZERlc2NyaXB0aW9ufn5+IiwgRmVlZEZvckFsbF9yc3MyaHRtbF9saW1pdExlbmd0aCgkcnNzX3BhcnNlci0+RmVlZERlc2NyaXB0aW9uLCAkbGltaXRGZWVkRGVzY3JpcHRpb25MZW5ndGgpLCAkdGhpbmcpOw0KICAkdGhpbmcgPSBzdHJfcmVwbGFjZSgifn5+RmVlZENvbnRlbnRFbmNvZGVkfn5+IiwgJHJzc19wYXJzZXItPkZlZWRDb250ZW50RW5jb2RlZCwgJHRoaW5nKTsNCiAgJHRoaW5nID0gc3RyX3JlcGxhY2UoIn5+fkZlZWRMaW5rfn5+IiwgJHJzc19wYXJzZXItPkZlZWRMaW5rLCAkdGhpbmcpOw0KICAkdGhpbmcgPSBzdHJfcmVwbGFjZSgifn5+RmVlZFB1YkRhdGV+fn4iLCAkcnNzX3BhcnNlci0+RmVlZFB1YkRhdGUsICR0aGluZyk7DQogICR0aGluZyA9IHN0cl9yZXBsYWNlKCJ+fn5GZWVkUHViTG9uZ0RhdGV+fn4iLCBkYXRlKCRMb25nRGF0ZUZvcm1hdCwgJHJzc19wYXJzZXItPkZlZWRQdWJEYXRlX3QpLCAkdGhpbmcpOw0KICAkdGhpbmcgPSBzdHJfcmVwbGFjZSgifn5+RmVlZFB1YlNob3J0RGF0ZX5+fiIsIGRhdGUoJFNob3J0RGF0ZUZvcm1hdCwgJHJzc19wYXJzZXItPkZlZWRQdWJEYXRlX3QpLCAkdGhpbmcpOw0KICAkdGhpbmcgPSBzdHJfcmVwbGFjZSgifn5+RmVlZFB1YkxvbmdUaW1lfn5+IiwgZGF0ZSgkTG9uZ1RpbWVGb3JtYXQsICRyc3NfcGFyc2VyLT5GZWVkUHViRGF0ZV90KSwgJHRoaW5nKTsNCiAgJHRoaW5nID0gc3RyX3JlcGxhY2UoIn5+fkZlZWRQdWJTaG9ydFRpbWV+fn4iLCBkYXRlKCRTaG9ydFRpbWVGb3JtYXQsICRyc3NfcGFyc2VyLT5GZWVkUHViRGF0ZV90KSwgJHRoaW5nKTsNCiAgJHRoaW5nID0gc3RyX3JlcGxhY2UoIn5+fkZlZWRJbWFnZVVybH5+fiIsICRyc3NfcGFyc2VyLT5GZWVkSW1hZ2VVUkwsICR0aGluZyk7DQogICR0aGluZyA9IHN0cl9yZXBsYWNlKCJ+fn5GZWVkSW1hZ2VUaXRsZX5+fiIsICRyc3NfcGFyc2VyLT5GZWVkSW1hZ2VUaXRsZSwgJHRoaW5nKTsNCiAgJHRoaW5nID0gc3RyX3JlcGxhY2UoIn5+fkZlZWRJbWFnZUxpbmt+fn4iLCAkcnNzX3BhcnNlci0+RmVlZEltYWdlTGluaywgJHRoaW5nKTsNCiAgJG1hdGNoID0gTlVMTDsNCg0KICAkdGhpbmcgPSBzdHJfcmVwbGFjZSgifn5+Tm9GdXR1cmVJdGVtc35+fiIsICIiLCAkdGhpbmcpOw0KDQogIC8vIFNvcnQgYnkgUHViRGF0ZSBpZiByZXF1ZXN0ZWQNCiAgaWYgKHN0cnN0cigkdGhpbmcsICJ+fn5Tb3J0QnlQdWJEYXRlfn5+IikpIHsNCiAgICAkdGhpbmcgPSBzdHJfcmVwbGFjZSgifn5+U29ydEJ5UHViRGF0ZX5+fiIsICIiLCAkdGhpbmcpOw0KDQogICAgZm9yICgkeCA9IDA7ICR4IDwgY291bnQoJHJzc19wYXJzZXItPkl0ZW1UaXRsZSktMTsgJHgrKykNCiAgICB7DQogICAgICBmb3IgKCR5ID0gJHgrMTsgJHkgPCBjb3VudCgkcnNzX3BhcnNlci0+SXRlbVRpdGxlKTsgJHkrKykNCiAgICAgIHsNCiAgICAgICAgaWYgKCRyc3NfcGFyc2VyLT5JdGVtUHViRGF0ZV90WyR4XSA8ICRyc3NfcGFyc2VyLT5JdGVtUHViRGF0ZV90WyR5XSkNCiAgICAgICAgew0KICAgICAgICAgIC8vIFN3YXAgdGhlbQ0KICAgICAgICAgICRzd2FwVGVtcCA9ICRyc3NfcGFyc2VyLT5JdGVtVGl0bGVbJHhdOyAkcnNzX3BhcnNlci0+SXRlbVRpdGxlWyR4XSA9ICRyc3NfcGFyc2VyLT5JdGVtVGl0bGVbJHldOyAkcnNzX3BhcnNlci0+SXRlbVRpdGxlWyR5XSA9ICRzd2FwVGVtcDsNCiAgICAgICAgICAkc3dhcFRlbXAgPSAkcnNzX3BhcnNlci0+SXRlbURlc2NyaXB0aW9uWyR4XTsgJHJzc19wYXJzZXItPkl0ZW1EZXNjcmlwdGlvblskeF0gPSAkcnNzX3BhcnNlci0+SXRlbURlc2NyaXB0aW9uWyR5XTsgJHJzc19wYXJzZXItPkl0ZW1EZXNjcmlwdGlvblskeV0gPSAkc3dhcFRlbXA7DQogICAgICAgICAgJHN3YXBUZW1wID0gJHJzc19wYXJzZXItPkl0ZW1Db250ZW50RW5jb2RlZFskeF07ICRyc3NfcGFyc2VyLT5JdGVtQ29udGVudEVuY29kZWRbJHhdID0gJHJzc19wYXJzZXItPkl0ZW1Db250ZW50RW5jb2RlZFskeV07ICRyc3NfcGFyc2VyLT5JdGVtQ29udGVudEVuY29kZWRbJHldID0gJHN3YXBUZW1wOw0KICAgICAgICAgICRzd2FwVGVtcCA9ICRyc3NfcGFyc2VyLT5JdGVtTGlua1skeF07ICRyc3NfcGFyc2VyLT5JdGVtTGlua1skeF0gPSAkcnNzX3BhcnNlci0+SXRlbUxpbmtbJHldOyAkcnNzX3BhcnNlci0+SXRlbUxpbmtbJHldID0gJHN3YXBUZW1wOw0KICAgICAgICAgICRzd2FwVGVtcCA9ICRyc3NfcGFyc2VyLT5JdGVtR3VpZFskeF07ICRyc3NfcGFyc2VyLT5JdGVtR3VpZFskeF0gPSAkcnNzX3BhcnNlci0+SXRlbUd1aWRbJHldOyAkcnNzX3BhcnNlci0+SXRlbUd1aWRbJHldID0gJHN3YXBUZW1wOw0KICAgICAgICAgICRzd2FwVGVtcCA9ICRyc3NfcGFyc2VyLT5JdGVtUHViRGF0ZVskeF07ICRyc3NfcGFyc2VyLT5JdGVtUHViRGF0ZVskeF0gPSAkcnNzX3BhcnNlci0+SXRlbVB1YkRhdGVbJHldOyAkcnNzX3BhcnNlci0+SXRlbVB1YkRhdGVbJHldID0gJHN3YXBUZW1wOw0KICAgICAgICAgICRzd2FwVGVtcCA9ICRyc3NfcGFyc2VyLT5JdGVtUHViRGF0ZV90WyR4XTsgJHJzc19wYXJzZXItPkl0ZW1QdWJEYXRlX3RbJHhdID0gJHJzc19wYXJzZXItPkl0ZW1QdWJEYXRlX3RbJHldOyAkcnNzX3BhcnNlci0+SXRlbVB1YkRhdGVfdFskeV0gPSAkc3dhcFRlbXA7DQogICAgICAgICAgJHN3YXBUZW1wID0gJHJzc19wYXJzZXItPkl0ZW1FbmNsb3N1cmVVUkxbJHhdOyAkcnNzX3BhcnNlci0+SXRlbUVuY2xvc3VyZVVSTFskeF0gPSAkcnNzX3BhcnNlci0+SXRlbUVuY2xvc3VyZVVSTFskeV07ICRyc3NfcGFyc2VyLT5JdGVtRW5jbG9zdXJlVVJMWyR5XSA9ICRzd2FwVGVtcDsNCiAgICAgICAgICAkc3dhcFRlbXAgPSAkcnNzX3BhcnNlci0+SXRlbUF1dGhvclskeF07ICRyc3NfcGFyc2VyLT5JdGVtQXV0aG9yWyR4XSA9ICRyc3NfcGFyc2VyLT5JdGVtQXV0aG9yWyR5XTsgJHJzc19wYXJzZXItPkl0ZW1BdXRob3JbJHldID0gJHN3YXBUZW1wOw0KICAgICAgICB9DQogICAgICB9DQogICAgfQ0KICB9DQoNCiAgLy8NCiAgLy8gRmluZCB0aGUgc3RyaW5nLCBpZiBpdCBleGlzdHMsIGJldHdlZW4gdGhlIH5+fkVuZEl0ZW1zUmVjb3Jkfn5+IGFuZCB+fn5CZWdpbkl0ZW1zUmVjb3Jkfn5+DQogIC8vDQogIHdoaWxlICgoc3Ryc3RyKCR0aGluZywgIn5+fkJlZ2luSXRlbXNSZWNvcmR+fn4iKSkgIT09IEZBTFNFKSB7DQogICAgJG1hdGNoID0gTlVMTDsNCiAgICAkYWxsaXRlbXMgPSBOVUxMOw0KICAgICRsb29wX2xpbWl0ID0gbWluKGFicygkaXRlbWxpbWl0KSwgY291bnQoJHJzc19wYXJzZXItPkl0ZW1UaXRsZSkpOw0KICAgIGlmICgoJHBhcnRzID0gc3BsaXQoIn5+fkJlZ2luSXRlbXNSZWNvcmR+fn4iLCAkdGhpbmcpKSAhPT0gRkFMU0UpIHsNCiAgICAgIGlmICgoJHBhcnRzID0gc3BsaXQoIn5+fkVuZEl0ZW1zUmVjb3Jkfn5+IiwgJHBhcnRzWzFdKSkgIT09IEZBTFNFKSB7DQogICAgICAgICRXaG9sZUJsb2NrID0gJHBhcnRzWzBdOw0KICAgICAgICAvLw0KICAgICAgICAvLyBDaGVjayBmb3Igfn5+QmVnaW5BbHRlcm5hdGVJdGVtc1JlY29yZH5+fg0KICAgICAgICAvLw0KICAgICAgICBpZiAoc3Ryc3RyKCRXaG9sZUJsb2NrLCAifn5+QmVnaW5BbHRlcm5hdGVJdGVtc1JlY29yZH5+fiIpKSB7DQogICAgICAgICAgJHBhcnRzID0gc3BsaXQoIn5+fkJlZ2luQWx0ZXJuYXRlSXRlbXNSZWNvcmR+fn4iLCAkV2hvbGVCbG9jayk7DQogICAgICAgICAgJGJsb2NrMSA9ICRwYXJ0c1swXTsNCiAgICAgICAgICAkYmxvY2syID0gJHBhcnRzWzFdOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICRibG9jazEgPSAkV2hvbGVCbG9jazsNCiAgICAgICAgICAkYmxvY2syID0gJFdob2xlQmxvY2s7DQogICAgICAgIH0NCiAgICAgICAgaWYgKCRpdGVtbGltaXQgPCAwKSB7DQogICAgICAgICAgZm9yICgkeCA9IGNvdW50KCRyc3NfcGFyc2VyLT5JdGVtVGl0bGUpLTE7ICR4ID49IGNvdW50KCRyc3NfcGFyc2VyLT5JdGVtVGl0bGUpICsgJGl0ZW1saW1pdDsgJHgtLSkgew0KICAgICAgICAgICAgJGl0ZW0gPSBzdHJfcmVwbGFjZSgifn5+SXRlbVRpdGxlfn5+IiwgRmVlZEZvckFsbF9yc3MyaHRtbF9saW1pdExlbmd0aCgkcnNzX3BhcnNlci0+SXRlbVRpdGxlWyR4XSwgJGxpbWl0SXRlbVRpdGxlTGVuZ3RoKSwgJGJsb2NrMSk7DQogICAgICAgICAgICAkaXRlbSA9IHN0cl9yZXBsYWNlKCJ+fn5JdGVtRGVzY3JpcHRpb25+fn4iLCBGZWVkRm9yQWxsX3JzczJodG1sX2xpbWl0TGVuZ3RoKCRyc3NfcGFyc2VyLT5JdGVtRGVzY3JpcHRpb25bJHhdLCAkbGltaXRJdGVtRGVzY3JpcHRpb25MZW5ndGgpLCAkaXRlbSk7DQogICAgICAgICAgICAkaXRlbSA9IHN0cl9yZXBsYWNlKCJ+fn5JdGVtQ29udGVudEVuY29kZWR+fn4iLCAkcnNzX3BhcnNlci0+SXRlbUNvbnRlbnRFbmNvZGVkWyR4XSwgJGl0ZW0pOw0KICAgICAgICAgICAgJGl0ZW0gPSBzdHJfcmVwbGFjZSgifn5+SXRlbUxpbmt+fn4iLCAkcnNzX3BhcnNlci0+SXRlbUxpbmtbJHhdLCAkaXRlbSk7DQogICAgICAgICAgICAkaXRlbSA9IHN0cl9yZXBsYWNlKCJ+fn5JdGVtUHViRGF0ZX5+fiIsICRyc3NfcGFyc2VyLT5JdGVtUHViRGF0ZVskeF0sICRpdGVtKTsNCiAgICAgICAgICAgICRpdGVtID0gc3RyX3JlcGxhY2UoIn5+fkl0ZW1HdWlkfn5+IiwgJHJzc19wYXJzZXItPkl0ZW1HdWlkWyR4XSwgJGl0ZW0pOw0KICAgICAgICAgICAgJGl0ZW0gPSBzdHJfcmVwbGFjZSgifn5+SXRlbVB1YkxvbmdEYXRlfn5+IiwgZGF0ZSgkTG9uZ0RhdGVGb3JtYXQsICRyc3NfcGFyc2VyLT5JdGVtUHViRGF0ZV90WyR4XSksICRpdGVtKTsNCiAgICAgICAgICAgICRpdGVtID0gc3RyX3JlcGxhY2UoIn5+fkl0ZW1QdWJTaG9ydERhdGV+fn4iLCBkYXRlKCRTaG9ydERhdGVGb3JtYXQsICRyc3NfcGFyc2VyLT5JdGVtUHViRGF0ZV90WyR4XSksICRpdGVtKTsNCiAgICAgICAgICAgICRpdGVtID0gc3RyX3JlcGxhY2UoIn5+fkl0ZW1QdWJMb25nVGltZX5+fiIsIGRhdGUoJExvbmdUaW1lRm9ybWF0LCAkcnNzX3BhcnNlci0+SXRlbVB1YkRhdGVfdFskeF0pLCAkaXRlbSk7DQogICAgICAgICAgICAkaXRlbSA9IHN0cl9yZXBsYWNlKCJ+fn5JdGVtUHViU2hvcnRUaW1lfn5+IiwgZGF0ZSgkU2hvcnRUaW1lRm9ybWF0LCAkcnNzX3BhcnNlci0+SXRlbVB1YkRhdGVfdFskeF0pLCAkaXRlbSk7DQogICAgICAgICAgICAkaXRlbSA9IHN0cl9yZXBsYWNlKCJ+fn5JdGVtRW5jbG9zdXJlVXJsfn5+IiwgJHJzc19wYXJzZXItPkl0ZW1FbmNsb3N1cmVVUkxbJHhdLCAkaXRlbSk7DQogICAgICAgICAgICAkaXRlbSA9IHN0cl9yZXBsYWNlKCJ+fn5JdGVtQXV0aG9yfn5+IiwgJHJzc19wYXJzZXItPkl0ZW1BdXRob3JbJHhdLCAkaXRlbSk7DQogICAgICAgICAgICAkYWxsaXRlbXMgLj0gIjwhLS0gSFRNTCBnZW5lcmF0ZWQgZnJvbSBhbiBSU1MgRmVlZCBieSByc3MyaHRtbC5waHAsIGh0dHA6Ly93d3cuRmVlZEZvckFsbC5jb20vIGEgTm90ZVBhZ2UsIEluYy4gcHJvZHVjdCAoaHR0cDovL3d3dy5ub3RlcGFnZS5jb20vKSAtLT4iLiRpdGVtOw0KICAgICAgICAgICAgJHgtLTsNCiAgICAgICAgICAgIGlmICgkeCA+PSBjb3VudCgkcnNzX3BhcnNlci0+SXRlbVRpdGxlKSArICRpdGVtbGltaXQpIHsNCiAgICAgICAgICAgICAgLy8NCiAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhdCBsZWFzdCBvbmUgbW9yZSBpdGVtIHNvIHVzZSB0aGUgQWx0ZXJuYXRlIGRlZmluaXRpb24NCiAgICAgICAgICAgICAgLy8NCiAgICAgICAgICAgICAgJGl0ZW0gPSBzdHJfcmVwbGFjZSgifn5+SXRlbVRpdGxlfn5+IiwgRmVlZEZvckFsbF9yc3MyaHRtbF9saW1pdExlbmd0aCgkcnNzX3BhcnNlci0+SXRlbVRpdGxlWyR4XSwgJGxpbWl0SXRlbVRpdGxlTGVuZ3RoKSwgJGJsb2NrMik7DQogICAgICAgICAgICAgICRpdGVtID0gc3RyX3JlcGxhY2UoIn5+fkl0ZW1EZXNjcmlwdGlvbn5+fiIsIEZlZWRGb3JBbGxfcnNzMmh0bWxfbGltaXRMZW5ndGgoJHJzc19wYXJzZXItPkl0ZW1EZXNjcmlwdGlvblskeF0sICRsaW1pdEl0ZW1EZXNjcmlwdGlvbkxlbmd0aCksICRpdGVtKTsNCiAgICAgICAgICAgICAgJGl0ZW0gPSBzdHJfcmVwbGFjZSgifn5+SXRlbUNvbnRlbnRFbmNvZGVkfn5+IiwgJHJzc19wYXJzZXItPkl0ZW1Db250ZW50RW5jb2RlZFskeF0sICRpdGVtKTsNCiAgICAgICAgICAgICAgJGl0ZW0gPSBzdHJfcmVwbGFjZSgifn5+SXRlbUxpbmt+fn4iLCAkcnNzX3BhcnNlci0+SXRlbUxpbmtbJHhdLCAkaXRlbSk7DQogICAgICAgICAgICAgICRpdGVtID0gc3RyX3JlcGxhY2UoIn5+fkl0ZW1QdWJEYXRlfn5+IiwgJHJzc19wYXJzZXItPkl0ZW1QdWJEYXRlWyR4XSwgJGl0ZW0pOw0KICAgICAgICAgICAgICAkaXRlbSA9IHN0cl9yZXBsYWNlKCJ+fn5JdGVtR3VpZH5+fiIsICRyc3NfcGFyc2VyLT5JdGVtR3VpZFskeF0sICRpdGVtKTsNCiAgICAgICAgICAgICAgJGl0ZW0gPSBzdHJfcmVwbGFjZSgifn5+SXRlbVB1YkxvbmdEYXRlfn5+IiwgZGF0ZSgkTG9uZ0RhdGVGb3JtYXQsICRyc3NfcGFyc2VyLT5JdGVtUHViRGF0ZV90WyR4XSksICRpdGVtKTsNCiAgICAgICAgICAgICAgJGl0ZW0gPSBzdHJfcmVwbGFjZSgifn5+SXRlbVB1YlNob3J0RGF0ZX5+fiIsIGRhdGUoJFNob3J0RGF0ZUZvcm1hdCwgJHJzc19wYXJzZXItPkl0ZW1QdWJEYXRlX3RbJHhdKSwgJGl0ZW0pOw0KICAgICAgICAgICAgICAkaXRlbSA9IHN0cl9yZXBsYWNlKCJ+fn5JdGVtUHViTG9uZ1RpbWV+fn4iLCBkYXRlKCRMb25nVGltZUZvcm1hdCwgJHJzc19wYXJzZXItPkl0ZW1QdWJEYXRlX3RbJHhdKSwgJGl0ZW0pOw0KICAgICAgICAgICAgICAkaXRlbSA9IHN0cl9yZXBsYWNlKCJ+fn5JdGVtUHViU2hvcnRUaW1lfn5+IiwgZGF0ZSgkU2hvcnRUaW1lRm9ybWF0LCAkcnNzX3BhcnNlci0+SXRlbVB1YkRhdGVfdFskeF0pLCAkaXRlbSk7DQogICAgICAgICAgICAgICRpdGVtID0gc3RyX3JlcGxhY2UoIn5+fkl0ZW1FbmNsb3N1cmVVcmx+fn4iLCAkcnNzX3BhcnNlci0+SXRlbUVuY2xvc3VyZVVSTFskeF0sICRpdGVtKTsNCiAgICAgICAgICAgICAgJGl0ZW0gPSBzdHJfcmVwbGFjZSgifn5+SXRlbUF1dGhvcn5+fiIsICRyc3NfcGFyc2VyLT5JdGVtQXV0aG9yWyR4XSwgJGl0ZW0pOw0KICAgICAgICAgICAgICAkYWxsaXRlbXMgLj0gIjwhLS0gSFRNTCBnZW5lcmF0ZWQgZnJvbSBhbiBSU1MgRmVlZCBieSByc3MyaHRtbC5waHAsIGh0dHA6Ly93d3cuRmVlZEZvckFsbC5jb20vIGEgTm90ZVBhZ2UsIEluYy4gcHJvZHVjdCAoaHR0cDovL3d3dy5ub3RlcGFnZS5jb20vKSAtLT4iLiRpdGVtOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICBmb3IgKCR4ID0gMDsgJHggPCAkbG9vcF9saW1pdDsgJHgrKykgew0KICAgICAgICAgICAgJGl0ZW0gPSBzdHJfcmVwbGFjZSgifn5+SXRlbVRpdGxlfn5+IiwgRmVlZEZvckFsbF9yc3MyaHRtbF9saW1pdExlbmd0aCgkcnNzX3BhcnNlci0+SXRlbVRpdGxlWyR4XSwgJGxpbWl0SXRlbVRpdGxlTGVuZ3RoKSwgJGJsb2NrMSk7DQogICAgICAgICAgICAkaXRlbSA9IHN0cl9yZXBsYWNlKCJ+fn5JdGVtRGVzY3JpcHRpb25+fn4iLCBGZWVkRm9yQWxsX3JzczJodG1sX2xpbWl0TGVuZ3RoKCRyc3NfcGFyc2VyLT5JdGVtRGVzY3JpcHRpb25bJHhdLCAkbGltaXRJdGVtRGVzY3JpcHRpb25MZW5ndGgpLCAkaXRlbSk7DQogICAgICAgICAgICAkaXRlbSA9IHN0cl9yZXBsYWNlKCJ+fn5JdGVtQ29udGVudEVuY29kZWR+fn4iLCAkcnNzX3BhcnNlci0+SXRlbUNvbnRlbnRFbmNvZGVkWyR4XSwgJGl0ZW0pOw0KICAgICAgICAgICAgJGl0ZW0gPSBzdHJfcmVwbGFjZSgifn5+SXRlbUxpbmt+fn4iLCAkcnNzX3BhcnNlci0+SXRlbUxpbmtbJHhdLCAkaXRlbSk7DQogICAgICAgICAgICAkaXRlbSA9IHN0cl9yZXBsYWNlKCJ+fn5JdGVtUHViRGF0ZX5+fiIsICRyc3NfcGFyc2VyLT5JdGVtUHViRGF0ZVskeF0sICRpdGVtKTsNCiAgICAgICAgICAgICRpdGVtID0gc3RyX3JlcGxhY2UoIn5+fkl0ZW1HdWlkfn5+IiwgJHJzc19wYXJzZXItPkl0ZW1HdWlkWyR4XSwgJGl0ZW0pOw0KICAgICAgICAgICAgJGl0ZW0gPSBzdHJfcmVwbGFjZSgifn5+SXRlbVB1YkxvbmdEYXRlfn5+IiwgZGF0ZSgkTG9uZ0RhdGVGb3JtYXQsICRyc3NfcGFyc2VyLT5JdGVtUHViRGF0ZV90WyR4XSksICRpdGVtKTsNCiAgICAgICAgICAgICRpdGVtID0gc3RyX3JlcGxhY2UoIn5+fkl0ZW1QdWJTaG9ydERhdGV+fn4iLCBkYXRlKCRTaG9ydERhdGVGb3JtYXQsICRyc3NfcGFyc2VyLT5JdGVtUHViRGF0ZV90WyR4XSksICRpdGVtKTsNCiAgICAgICAgICAgICRpdGVtID0gc3RyX3JlcGxhY2UoIn5+fkl0ZW1QdWJMb25nVGltZX5+fiIsIGRhdGUoJExvbmdUaW1lRm9ybWF0LCAkcnNzX3BhcnNlci0+SXRlbVB1YkRhdGVfdFskeF0pLCAkaXRlbSk7DQogICAgICAgICAgICAkaXRlbSA9IHN0cl9yZXBsYWNlKCJ+fn5JdGVtUHViU2hvcnRUaW1lfn5+IiwgZGF0ZSgkU2hvcnRUaW1lRm9ybWF0LCAkcnNzX3BhcnNlci0+SXRlbVB1YkRhdGVfdFskeF0pLCAkaXRlbSk7DQogICAgICAgICAgICAkaXRlbSA9IHN0cl9yZXBsYWNlKCJ+fn5JdGVtRW5jbG9zdXJlVXJsfn5+IiwgJHJzc19wYXJzZXItPkl0ZW1FbmNsb3N1cmVVUkxbJHhdLCAkaXRlbSk7DQogICAgICAgICAgICAkaXRlbSA9IHN0cl9yZXBsYWNlKCJ+fn5JdGVtQXV0aG9yfn5+IiwgJHJzc19wYXJzZXItPkl0ZW1BdXRob3JbJHhdLCAkaXRlbSk7DQogICAgICAgICAgICAkYWxsaXRlbXMgLj0gIjwhLS0gSFRNTCBnZW5lcmF0ZWQgZnJvbSBhbiBSU1MgRmVlZCBieSByc3MyaHRtbC5waHAsIGh0dHA6Ly93d3cuRmVlZEZvckFsbC5jb20vIGEgTm90ZVBhZ2UsIEluYy4gcHJvZHVjdCAoaHR0cDovL3d3dy5ub3RlcGFnZS5jb20vKSAtLT4iLiRpdGVtOw0KICAgICAgICAgICAgJHgrKzsNCiAgICAgICAgICAgIGlmICgkeCA8ICRsb29wX2xpbWl0KSB7DQogICAgICAgICAgICAgIC8vDQogICAgICAgICAgICAgIC8vIFRoaXMgaXMgYXQgbGVhc3Qgb25lIG1vcmUgaXRlbSBzbyB1c2UgdGhlIEFsdGVybmF0ZSBkZWZpbml0aW9uDQogICAgICAgICAgICAgIC8vDQogICAgICAgICAgICAgICRpdGVtID0gc3RyX3JlcGxhY2UoIn5+fkl0ZW1UaXRsZX5+fiIsIEZlZWRGb3JBbGxfcnNzMmh0bWxfbGltaXRMZW5ndGgoJHJzc19wYXJzZXItPkl0ZW1UaXRsZVskeF0sICRsaW1pdEl0ZW1UaXRsZUxlbmd0aCksICRibG9jazIpOw0KICAgICAgICAgICAgICAkaXRlbSA9IHN0cl9yZXBsYWNlKCJ+fn5JdGVtRGVzY3JpcHRpb25+fn4iLCBGZWVkRm9yQWxsX3JzczJodG1sX2xpbWl0TGVuZ3RoKCRyc3NfcGFyc2VyLT5JdGVtRGVzY3JpcHRpb25bJHhdLCAkbGltaXRJdGVtRGVzY3JpcHRpb25MZW5ndGgpLCAkaXRlbSk7DQogICAgICAgICAgICAgICRpdGVtID0gc3RyX3JlcGxhY2UoIn5+fkl0ZW1Db250ZW50RW5jb2RlZH5+fiIsICRyc3NfcGFyc2VyLT5JdGVtQ29udGVudEVuY29kZWRbJHhdLCAkaXRlbSk7DQogICAgICAgICAgICAgICRpdGVtID0gc3RyX3JlcGxhY2UoIn5+fkl0ZW1MaW5rfn5+IiwgJHJzc19wYXJzZXItPkl0ZW1MaW5rWyR4XSwgJGl0ZW0pOw0KICAgICAgICAgICAgICAkaXRlbSA9IHN0cl9yZXBsYWNlKCJ+fn5JdGVtUHViRGF0ZX5+fiIsICRyc3NfcGFyc2VyLT5JdGVtUHViRGF0ZVskeF0sICRpdGVtKTsNCiAgICAgICAgICAgICAgJGl0ZW0gPSBzdHJfcmVwbGFjZSgifn5+SXRlbUd1aWR+fn4iLCAkcnNzX3BhcnNlci0+SXRlbUd1aWRbJHhdLCAkaXRlbSk7DQogICAgICAgICAgICAgICRpdGVtID0gc3RyX3JlcGxhY2UoIn5+fkl0ZW1QdWJMb25nRGF0ZX5+fiIsIGRhdGUoJExvbmdEYXRlRm9ybWF0LCAkcnNzX3BhcnNlci0+SXRlbVB1YkRhdGVfdFskeF0pLCAkaXRlbSk7DQogICAgICAgICAgICAgICRpdGVtID0gc3RyX3JlcGxhY2UoIn5+fkl0ZW1QdWJTaG9ydERhdGV+fn4iLCBkYXRlKCRTaG9ydERhdGVGb3JtYXQsICRyc3NfcGFyc2VyLT5JdGVtUHViRGF0ZV90WyR4XSksICRpdGVtKTsNCiAgICAgICAgICAgICAgJGl0ZW0gPSBzdHJfcmVwbGFjZSgifn5+SXRlbVB1YkxvbmdUaW1lfn5+IiwgZGF0ZSgkTG9uZ1RpbWVGb3JtYXQsICRyc3NfcGFyc2VyLT5JdGVtUHViRGF0ZV90WyR4XSksICRpdGVtKTsNCiAgICAgICAgICAgICAgJGl0ZW0gPSBzdHJfcmVwbGFjZSgifn5+SXRlbVB1YlNob3J0VGltZX5+fiIsIGRhdGUoJFNob3J0VGltZUZvcm1hdCwgJHJzc19wYXJzZXItPkl0ZW1QdWJEYXRlX3RbJHhdKSwgJGl0ZW0pOw0KICAgICAgICAgICAgICAkaXRlbSA9IHN0cl9yZXBsYWNlKCJ+fn5JdGVtRW5jbG9zdXJlVXJsfn5+IiwgJHJzc19wYXJzZXItPkl0ZW1FbmNsb3N1cmVVUkxbJHhdLCAkaXRlbSk7DQogICAgICAgICAgICAgICRpdGVtID0gc3RyX3JlcGxhY2UoIn5+fkl0ZW1BdXRob3J+fn4iLCAkcnNzX3BhcnNlci0+SXRlbUF1dGhvclskeF0sICRpdGVtKTsNCiAgICAgICAgICAgICAgJGFsbGl0ZW1zIC49ICI8IS0tIEhUTUwgZ2VuZXJhdGVkIGZyb20gYW4gUlNTIEZlZWQgYnkgcnNzMmh0bWwucGhwLCBodHRwOi8vd3d3LkZlZWRGb3JBbGwuY29tLyBhIE5vdGVQYWdlLCBJbmMuIHByb2R1Y3QgKGh0dHA6Ly93d3cubm90ZXBhZ2UuY29tLykgLS0+Ii4kaXRlbTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgJHRoaW5nID0gc3RyX3JlcGxhY2UoIn5+fkJlZ2luSXRlbXNSZWNvcmR+fn4iLiRXaG9sZUJsb2NrLiJ+fn5FbmRJdGVtc1JlY29yZH5+fiIsICRhbGxpdGVtcywgJHRoaW5nKTsNCiAgICAgIH0NCiAgICB9DQogIH0NCg0KICAvLyBTaW5jZSAmYXBvczsgaXMgbm90IEhUTUwsIGJ1dCBpcyBYTUwgY29udmVydC4NCiAgJHRoaW5nID0gc3RyX3JlcGxhY2UoIiZhcG9zOyIsICInIiwgJHRoaW5nKTsNCg0KICByZXR1cm4gJHRoaW5nOw0KDQp9IjtzOjQ6InR5cGUiO3M6MToiMCI7czozOiJtZDUiO3M6MzI6IjgyZDNlMTU4YzIyYjkxNDA5OGIyZWI4MjMxNWI0M2FmIjt9