# Name: smd_pagicle v0.2 # Type: Client side plugin # Automatic client-side pagination of articles using jQuery # Author: Stef Dawson # URL: http://stefdawson.com/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjExOiJzbWRfcGFnaWNsZSI7czo2OiJhdXRob3IiO3M6MTE6 IlN0ZWYgRGF3c29uIjtzOjEwOiJhdXRob3JfdXJpIjtzOjIyOiJodHRwOi8vc3RlZmRhd3Nv bi5jb20vIjtzOjc6InZlcnNpb24iO3M6MzoiMC4yIjtzOjExOiJkZXNjcmlwdGlvbiI7czo1 NzoiQXV0b21hdGljIGNsaWVudC1zaWRlIHBhZ2luYXRpb24gb2YgYXJ0aWNsZXMgdXNpbmcg alF1ZXJ5IjtzOjQ6ImhlbHAiO3M6MTIwMDY6IjxkaXYgaWQ9InNtZF9oZWxwIj4KCgk8aDE+ c21kX3BhZ2ljbGU8L2gxPgoKCTxwPkF1dG9tYXRpY2FsbHkgc3BsaXQgbG9uZyBhcnRpY2xl cyBpbnRvIGJpdGUtc2l6ZSBodW5rcyB3aGljaCB2aXNpdG9ycyBjYW4gbmF2aWdhdGUgYmV0 d2VlbiB1c2luZyB0aGUgaGFuZHkgcGFnZXIuIFRoZSB3aG9sZSBhcnRpY2xlIGlzIGxvYWRl ZCBpbiBvbmUgZ287IHRoZSB2YXJpb3VzIHBhZ2VzIGFyZSBzaW1wbHkgc3dpdGNoZWQgaW50 byB2aWV3IHZpYSBqUXVlcnkuPC9wPgoKCTxoMiBpZD0iZmVhdHVyZXMiPkZlYXR1cmVzPC9o Mj4KCgk8dWw+CgkJPGxpPkNob29zZSB3aGVyZSB5b3Ugc3BsaXQgdGhlIHBhZ2U7IGVpdGhl ciB2aWEgc29tZSBmaXhlZCBjb2RlIHlvdXIgYXV0aG9ycyBjYW4gZW50ZXIgYXQgY2hvc2Vu IGJyZWFrIHBvaW50cywgb3IgYXQgcGFydGljdWxhciBlbGVtZW50cyBvbiB0aGUgcGFnZSAo ZS5nLiBhdCBlYWNoIDxjb2RlPiZsdDtoMiZndDs8L2NvZGU+KTwvbGk+CgkJPGxpPkNob29z ZSB0aGUgalF1ZXJ5IGFuaW1hdGlvbiBlZmZlY3QgeW91IHdpc2ggdG8gYXBwbHkgYmV0d2Vl biBwYWdlczwvbGk+CgkJPGxpPkF1dG8tZm9jdXMgKHNjcm9sbCkgYmFjayB0byB0aGUgdG9w IG9mIHRoZSBkb2N1bWVudCBhdCB0aGUgc3RhcnQgb2YgZWFjaCB2aXJ0dWFsIHBhZ2U8L2xp PgoJCTxsaT5NYWtlIGhlYWRlciBhbmQgZm9vdGVyIGVsZW1lbnRzICh3aGljaCBhcmUgdXN1 YWxseSBvbmx5IHNob3duIG9uIHRoZSB0b3AvYm90dG9tIG9mIHRoZSBhcnRpY2xlLCByZXNw ZWN0aXZlbHkpIGFwcGVhciBvbiBldmVyeSB2aXJ0dWFsIHBhZ2U8L2xpPgoJPC91bD4KCgk8 aDIgaWQ9ImF1dGhvciI+QXV0aG9yIC8gY3JlZGl0czwvaDI+CgoJPHA+PGEgaHJlZj0iaHR0 cDovL3N0ZWZkYXdzb24uY29tL2NvbnRhY3QiPlN0ZWYgRGF3c29uPC9hPi48L3A+CgoJPGgy IGlkPSJpbnN0YWxsIj5JbnN0YWxsYXRpb24gLyBVbmluc3RhbGxhdGlvbjwvaDI+CgoJPHA+ RG93bmxvYWQgdGhlIHBsdWdpbiBmcm9tIGVpdGhlciA8YSBocmVmPSJodHRwOi8vdGV4dHBh dHRlcm4ub3JnL3BsdWdpbnMvMTEwMS9zbWRfcGFnaWNsZSI+dGV4dHBhdHRlcm4ub3JnPC9h Piwgb3IgdGhlIDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9zdyI+c29mdHdhcmUg cGFnZTwvYT4sIHBhc3RlIHRoZSBjb2RlIGludG8gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5U WFA8L3NwYW4+IEFkbWluIC0mZ3Q7IFBsdWdpbnMgcGFuZSwgaW5zdGFsbCBhbmQgZW5hYmxl IHRoZSBwbHVnaW4uIFZpc2l0IHRoZSA8YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRl cm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9MzEwODQiPmZvcnVtIHRocmVhZDwvYT4gZm9yIG1v cmUgaW5mbyBvciB0byByZXBvcnQgb24gdGhlIHN1Y2Nlc3Mgb3Igb3RoZXJ3aXNlIG9mIHRo ZSBwbHVnaW4uPC9wPgoKCTxwPlRvIHVuaW5zdGFsbCwgc2ltcGx5IGRlbGV0ZSBmcm9tIHRo ZSBBZG1pbiAtJmd0OyBQbHVnaW5zIHBhZ2UuPC9wPgoKCTxoMiBpZD0idXNhZ2UiPlVzYWdl PC9oMj4KCgk8cD5Tb21ld2hlcmUgb24gYW4gaW5kaXZpZHVhbCBhcnRpY2xlIFBhZ2UgcHV0 IGEgY2FsbCB0byA8Y29kZT4mbHQ7dHhwOnNtZF9wYWdpY2xlIC8mZ3Q7PC9jb2RlPi4gQ29u ZmlndXJlIHRoZSBwbHVnaW4gdXNpbmcgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOyBpdGVt cyB3aXRoIGEgYm9yZGVyIHJvdW5kIHRoZW0gYXJlIG1hbmRhdG9yeSwgYWx0aG91Z2ggdGhl IGRlZmF1bHRzIHVzdWFsbHkgc3VmZmljZTo8L3A+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFz cz0iYXRubSBtYW5kIj5jb250YWluZXI8L3NwYW4+IDogSUQgb2YgdGhlIDxzcGFuIGNsYXNz PSJjYXBzIj5ET008L3NwYW4+IHdyYXBwZXIgZWxlbWVudCB0aGF0IGhvbGRzIHlvdXIgYXJ0 aWNsZSBjb250ZW50LiBEZWZhdWx0OiA8Y29kZT4jY29udGVudDwvY29kZT48L2xpPgoJCTxs aT48c3BhbiBjbGFzcz0iYXRubSI+c3BsaXRhdDwvc3Bhbj4gOiB3aGF0IHlvdSB3b3VsZCBs aWtlIHRvIHNlYXJjaCBmb3IgaW4geW91ciBhcnRpY2xlLiBFYWNoIHRpbWUgdGhlIHBsdWdp biBmaW5kcyBvbmUgb2YgdGhlc2UgaXRlbXMsIGEgbmV3IHBhZ2Ugd2lsbCBiZWdpbi4gSXQg Y2FuIGVpdGhlciBiZSBzb21lIHRleHQgdGhhdCB5b3UgZW1iZWQgd2l0aGluIHlvdXIgYXJ0 aWNsZSBib2R5IChlLmcuIDxjb2RlPntQYWdlSGVyZX08L2NvZGU+KSBvciBzb21lIG90aGVy IGNvbnRlbnQgdGhhdCBtaWdodCBhcHBlYXIgaW5zaWRlIGFuIDxzcGFuIGNsYXNzPSJjYXBz Ij5IVE1MPC9zcGFuPiB0YWcgcGFpci4gTm90ZSB0aGF0IGlmIHRoaXMgaXMgdXNlZCBpbiB0 YW5kZW0gd2l0aCA8Y29kZT5zcGxpdHdyYXB0YWc8L2NvZGU+IHRoZW4geW91IHNob3VsZCBl aXRoZXIgc3BlY2lmeSB0aGUgZW50aXJlIGNvbnRlbnQgaW5zaWRlIHRoZSB0YWcgT1IgdXNl IHJlZ3VsYXIgZXhwcmVzc2lvbiBub3RhdGlvbiB0byBtYXRjaCBwYXJ0IG9mIGl0LiBTZWUg ZXhhbXBsZXMgPGEgaHJlZj0iI2VnMyI+MzwvYT4gYW5kIDxhIGhyZWY9IiNlZzQiPjQ8L2E+ IGZvciBtb3JlLiBEZWZhdWx0OiB1bnNldDxzdXAgY2xhc3M9ImZvb3Rub3RlIj48YSBocmVm PSIjZm44NTUwMzk0Njk0YTQzM2Y3ZTg3YzRlIj4xPC9hPjwvc3VwPjwvbGk+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdG5tIj5zcGxpdHdyYXB0YWc8L3NwYW4+IDogYW4gKFgpSFRNTCB0YWcg d2l0aG91dCBicmFja2V0cyB0byBzZWFyY2ggZm9yLiBDYW4gd29yayB0b2dldGhlciB3aXRo IDxjb2RlPnNwbGl0YXQ8L2NvZGU+IG9yIG9uIGl0cyBvd24gdG8gc2VhcmNoIGZvciBhbnkg cGFydGljdWxhciBzZXQgb2YgZWxlbWVudHMgaW5zaWRlIHlvdXIgPGNvZGU+Y29udGFpbmVy PC9jb2RlPi4gRGVmYXVsdDogPGNvZGU+aDI8L2NvZGU+PHN1cCBjbGFzcz0iZm9vdG5vdGUi PjxhIGhyZWY9IiNmbjg1NTAzOTQ2OTRhNDMzZjdlODdjNGUiPjE8L2E+PC9zdXA+PC9saT4K CQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmRlbGV0ZTwvc3Bhbj4gOiB3aGV0aGVyIHlvdSB3 aXNoIHRvIHJlbW92ZSB0aGUgZWxlbWVudCBhdCB3aGljaCB5b3UgY2hvc2UgdG8gPGNvZGU+ c3BsaXRhdDwvY29kZT4gLyA8Y29kZT5zcGxpdHdyYXB0YWc8L2NvZGU+LiBUaGUgZGVmYXVs dCBpcyBhdXRvbWF0aWM6IGZvciA8Y29kZT5zcGxpdGF0PC9jb2RlPiAodXNlZCBvbiBpdHMg b3duKSBpdCBpcyBzZXQgdG8gMSwgYW5kIGZvciA8Y29kZT5zcGxpdHdyYXB0YWc8L2NvZGU+ IGl0IGlzIHNldCB0byAwIHRvIHByZXNlcnZlIHRoZSB0YWcgYW5kIGl0cyBjb250ZW50czwv bGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5oZWFkZXI8L3NwYW4+IDogYSByZWZlcmVu Y2UgdG8gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5ET008L3NwYW4+IGVsZW1lbnQgdGhhdCBj b250YWlucyB5b3VyIGFydGljbGUgdGl0bGUuIFRoaXMgaXMgc28gaXQgY2FuIGJlIHJlcGVh dGVkIGF0IHRoZSB0b3Agb2YgZWFjaCB2aXJ0dWFsIHBhZ2UuIERlZmF1bHQ6IDxjb2RlPmgx PC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5mb290ZXI8L3NwYW4+IDog YSByZWZlcmVuY2UgdG8gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5ET008L3NwYW4+IGVsZW1l bnQgdGhhdCBjb250YWlucyB5b3VyIGFydGljbGUgZm9vdGVyLiBOb3JtYWxseSB0aGlzIHdv dWxkIGNvbnRhaW4gdGhlIGFydGljbGUgY29tbWVudHMsIG9yIHNvbWUgcmVsYXRlZCBhcnRp Y2xlcyB0aGF0IHdvdWxkIG9ubHkgYmUgZGlzcGxheWVkIGF0IHRoZSB2ZXJ5IGVuZCBvZiB0 aGUgYXJ0aWNsZS4gSWYgeW91IHdpc2ggdG8gY29weSB0aGUgZm9vdGVyIGNvbnRlbnQgaW50 byB0aGUgYm90dG9tIG9mIGV2ZXJ5IHZpcnR1YWwgcGFnZSwgc3BlY2lmeSBpdHMgPHNwYW4g Y2xhc3M9ImNhcHMiPkRPTTwvc3Bhbj4gcmVmZXJlbmNlIGhlcmUuIERlZmF1bHQ6IHVuc2V0 PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmFuaW1hdGU8L3NwYW4+IDogbGlzdCBv ZiBqUXVlcnkgbmFtZTp2YWx1ZSBwYWlycyB0byBwYXNzIHRvIHRoZSA8YSBocmVmPSJodHRw Oi8vZG9jcy5qcXVlcnkuY29tL0VmZmVjdHMvYW5pbWF0ZSI+YW5pbWF0ZSgpPC9hPiBmdW5j dGlvbi4gRWFjaCB0aW1lIHlvdSBjbGljayBhIHBhZ2UgbnVtYmVyLCB0aGlzIGFuaW1hdGlv biBlZmZlY3QgaXMgcGxheWVkLiBEZWZhdWx0OiA8Y29kZT5vcGFjaXR5OnNob3c8L2NvZGU+ PHN1cCBjbGFzcz0iZm9vdG5vdGUiPjxhIGhyZWY9IiNmbjEyMTQ5NzEzMzA0YTQzM2Y3ZTg4 NDFlIj4yPC9hPjwvc3VwPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5mb2N1czwv c3Bhbj4gOiBhIDxzcGFuIGNsYXNzPSJjYXBzIj5ET008L3NwYW4+IGVsZW1lbnQgcmVmZXJl bmNlIHRvIHNjcm9sbCBiYWNrIHRvLCB3aGVuZXZlciBhIHBhZ2UgbnVtYmVyIGlzIGNsaWNr ZWQgZnJvbSB0aGUgbmF2LiBDYW4gdGFrZSBhbiBvcHRpb25hbCBzY3JvbGwgc3BlZWQgaW4g bWlsbGlzZWNvbmRzIGJ5IHNwZWNpZnlpbmcgdGhlIHNwZWVkIHZhbHVlIGFmdGVyIGEgY29s b24uIERlZmF1bHQ6IDxjb2RlPmJvZHk6NDAwPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNs YXNzPSJhdG5tIj5hZGRuYXZ0bzwvc3Bhbj4gOiA8c3BhbiBjbGFzcz0iY2FwcyI+RE9NPC9z cGFuPiBlbGVtZW50IHRvIHdoaWNoIHRvIGFkZCB0aGUgcGFnZSBudW1iZXJzIG5hdmlnYXRp b24gd2lkZ2V0LiBUaGUgZWxlbWVudCB5b3UgbmFtZSBoZXJlICYjODIxMjsgaXQgbWF5IGJl IGEgc2luZ2xlIGVsZW1lbnQgSUQgb3IgYSBjbGFzcyBzbyB5b3UgY2FuIGFkZCB0aGUgd2lk Z2V0IHRvIG1vcmUgdGhhbiBvbmUgZWxlbWVudCAmIzgyMTI7IG11c3QgYWxyZWFkeSBiZSBp bmNsdWRlZCBvbiB5b3VyIHBhZ2UuIERlZmF1bHQ6IDxjb2RlPiNzbWRfcGFnbmF2PC9jb2Rl PjxzdXAgY2xhc3M9ImZvb3Rub3RlIj48YSBocmVmPSIjZm4xMjE0OTcxMzMwNGE0MzNmN2U4 ODQxZSI+MjwvYT48L3N1cD48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+bmF2Y2xh c3M8L3NwYW4+IDogY2xhc3MgdG8gYXBwbHkgdG8gdGhlIG5hdmlnYXRpb24gY29udGFpbmVy LiBEZWZhdWx0OiA8Y29kZT5zbWRfcGFnZXM8L2NvZGU+PHN1cCBjbGFzcz0iZm9vdG5vdGUi PjxhIGhyZWY9IiNmbjEyMTQ5NzEzMzA0YTQzM2Y3ZTg4NDFlIj4yPC9hPjwvc3VwPjwvbGk+ CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5uYXZhY3RpdmU8L3NwYW4+IDogY2xhc3MgdG8g aW5kaWNhdGUgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBwYWdlLiBEZWZhdWx0OiA8Y29kZT5z bWRfY3VycnBhZ2U8L2NvZGU+PHN1cCBjbGFzcz0iZm9vdG5vdGUiPjxhIGhyZWY9IiNmbjEy MTQ5NzEzMzA0YTQzM2Y3ZTg4NDFlIj4yPC9hPjwvc3VwPjwvbGk+CgkJPGxpPjxzcGFuIGNs YXNzPSJhdG5tIj5uYXZkaXNhYmxlZDwvc3Bhbj4gOiBkdXJpbmcgdGhlIGNvdXJzZSBvZiBu YXZpZ2F0aW5nIHBhZ2VzLCB0aGUgbmV4dC9wcmV2IGxpbmtzIGFyZSBzb21ldGltZXMgbm90 IHJlcXVpcmVkLiBTaW5jZSBpdCBpcyBub3QgcG9zc2liZSBpbiA8c3BhbiBjbGFzcz0iY2Fw cyI+SFRNTDwvc3Bhbj4gdG8gJiM4MjE2O2Rpc2FibGUmIzgyMTc7IGFuIGFuY2hvciwgdGhp cyBjbGFzcyBpcyBhcHBsaWVkIHRvIHRoZSBhcnJvd3Mgc28geW91IG1heSBjaG9vc2UgdG8g c3R5bGUgdGhlbSBkaWZmZXJlbnRseS4gRGVmYXVsdDogPGNvZGU+c21kX2Rpc2FibGVkPC9j b2RlPjxzdXAgY2xhc3M9ImZvb3Rub3RlIj48YSBocmVmPSIjZm4xMjE0OTcxMzMwNGE0MzNm N2U4ODQxZSI+MjwvYT48L3N1cD48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+bmF2 ZGlzcGxheTwvc3Bhbj4gOiB3aGljaCBuYXZpZ2F0aW9uIGVsZW1lbnRzIHRvIHNob3cuIERl ZmF1bHQ6IDxjb2RlPmYgcCAjIG4gbCBhPC9jb2RlPiBDaG9vc2UgZnJvbToKCTx1bD4KCQk8 bGk+PHN0cm9uZz5mPC9zdHJvbmc+OiBmaXJzdCBwYWdlICg8Y29kZT4mYW1wO2xhcXVvOzwv Y29kZT4pPC9saT4KCQk8bGk+PHN0cm9uZz5wPC9zdHJvbmc+OiBwcmV2aW91cyBwYWdlICg8 Y29kZT4mYW1wO2x0OzwvY29kZT4pPC9saT4KCQk8bGk+PHN0cm9uZz4jPC9zdHJvbmc+OiB0 aGUgcGFnZSBudW1iZXJzPC9saT4KCQk8bGk+PHN0cm9uZz5uPC9zdHJvbmc+OiBuZXh0IHBh Z2UgKDxjb2RlPiZhbXA7Z3Q7PC9jb2RlPik8L2xpPgoJCTxsaT48c3Ryb25nPmw8L3N0cm9u Zz46IGxhc3QgcGFnZSAoPGNvZGU+JmFtcDtyYXF1bzs8L2NvZGU+KTwvbGk+CgkJPGxpPjxz dHJvbmc+YTwvc3Ryb25nPjogc2hvdyBlbnRpcmUgZG9jdW1lbnQsIGkuZS4gdHVybiBvZmYg cGFnaW5nICg8Y29kZT5BbGw8L2NvZGU+KTwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPjxzcGFu IGNsYXNzPSJhdG5tIj5uYXZ0ZXh0PC9zcGFuPiA6IGxpc3Qgb2YgdGV4dCB2YWx1ZXMgdG8g dXNlIGZvciBlYWNoIG9mIHRoZSBjaG9zZW4gaXRlbXMgaW4gPGNvZGU+bmF2ZGlzcGxheTwv Y29kZT4uIFNwZWNpZnkgdGhlIGl0ZW0gY29kZSAoZiwgcCwgbiwgbCBvciBhKSBmb2xsb3dl ZCBieSBhIGNvbG9uIGFuZCB0aGVuIHRoZSB0ZXh0IHlvdSB3YW50IHRvIGFwcGVhciBpbiB0 aGUgbmF2LCBlLmcuIDxjb2RlPm5hdnRleHQ9JnF1b3Q7ZjpGaXJzdCwgbDpMYXN0JnF1b3Q7 PC9jb2RlPi4gQW55IGl0ZW1zIHlvdSBkbyBub3Qgc3BlY2lmeSB3aWxsIHVzZSB0aGUgZGVm YXVsdHMgYXMgbGlzdGVkIGFib3ZlPC9saT4KCTwvdWw+CgoJPHAgaWQ9ImZuODU1MDM5NDY5 NGE0MzNmN2U4N2M0ZSIgY2xhc3M9ImZvb3Rub3RlIj48c3VwPjE8L3N1cD4gYXQgbGVhc3Qg b25lIG9mIGVpdGhlciA8Y29kZT5zcGxpdDwvY29kZT4gb3IgPGNvZGU+c3BsaXR3cmFwdGFn PC9jb2RlPiBhcmUgcmVxdWlyZWQuPC9wPgoKCTxwIGlkPSJmbjEyMTQ5NzEzMzA0YTQzM2Y3 ZTg4NDFlIiBjbGFzcz0iZm9vdG5vdGUiPjxzdXA+Mjwvc3VwPiBpZiBhbnkgb2YgdGhlc2Ug YXR0cmlidXRlcyBhcmUgdW5zZXQgKDxjb2RlPj0mcXVvdDsmcXVvdDs8L2NvZGU+KSBpbiB0 aGUgdGFnLCB0aGV5IHdpbGwgYmUgcmVzZXQgdG8gdGhlaXIgZGVmYXVsdHMgYWdhaW4uPC9w PgoKCTxoMiBpZD0iZXhhbXBsZXMiPkV4YW1wbGVzPC9oMj4KCgk8aDMgaWQ9ImVnMSI+RXhh bXBsZSAxPC9oMz4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZs dDtkaXYgaWQ9JnF1b3Q7c21kX3BhZ25hdiZxdW90OyZndDsmbHQ7L2RpdiZndDsKJmx0O3R4 cDpzbWRfcGFnaWNsZSBjb250YWluZXI9JnF1b3Q7I3BhZ2VtYWluJnF1b3Q7CiAgICAgZm9v dGVyPSZxdW90OyNuYXZsb2NhbCZxdW90OyAvJmd0Owo8L2NvZGU+PC9wcmU+CgoJPHA+VGhp cyBleGFtcGxlIHdpbGw6PC9wPgoKCTx1bD4KCQk8bGk+c3BsaXQgdGhlIGRvY3VtZW50IGF0 IDxjb2RlPiZsdDtoMiZndDs8L2NvZGU+IHRhZ3MgaW5zaWRlIHRoZSA8Y29kZT5wYWdlbWFp bjwvY29kZT4gY29udGFpbmVyIGRpdjwvbGk+CgkJPGxpPmFkZCB0aGUgcGFnZSBuYXZpZ2F0 aW9uIHRvIHRoZSA8Y29kZT5zbWRfcGFnbmF2PC9jb2RlPiBkaXY8L2xpPgoJCTxsaT5jb3B5 IHRoZSA8Y29kZT4jbmF2bG9jYWw8L2NvZGU+IGVsZW1lbnQgdG8gdGhlIGJvdHRvbSBvZiBl YWNoIHBhZ2U8L2xpPgoJPC91bD4KCgk8aDMgaWQ9ImVnMiI+RXhhbXBsZSAyPC9oMz4KCjxw cmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZsdDtkaXYgY2xhc3M9JnF1 b3Q7c21kX3BhZ2luYXRpb24mcXVvdDsmZ3Q7Jmx0Oy9kaXYmZ3Q7CiZsdDt0eHA6YXJ0aWNs ZSAvJmd0OwombHQ7ZGl2IGNsYXNzPSZxdW90O3NtZF9wYWdpbmF0aW9uJnF1b3Q7Jmd0OyZs dDsvZGl2Jmd0OwombHQ7dHhwOnNtZF9wYWdpY2xlIGNvbnRhaW5lcj0mcXVvdDsjcGFnZW1h aW4mcXVvdDsKICAgICBzcGxpdGF0PSZxdW90O3tuZXdwYWdlfSZxdW90OyBzcGxpdHdyYXB0 YWc9JnF1b3Q7JnF1b3Q7CiAgICAgYWRkbmF2dG89JnF1b3Q7LnNtZF9wYWdpbmF0aW9uJnF1 b3Q7IC8mZ3Q7CjwvY29kZT48L3ByZT4KCgk8cD5UaGlzIGV4YW1wbGU6PC9wPgoKCTx1bD4K CQk8bGk+c3RhcnRzIGEgbmV3IHBhZ2UgZXZlcnkgdGltZSB0aGUgYm9keSBoYXMgdGhlIHBo cmFzZSA8Y29kZT57bmV3cGFnZX08L2NvZGU+IGluIGl0PC9saT4KCQk8bGk+YWRkcyB0aGUg bmF2IGFib3ZlIGFuZCBiZWxvdyB0aGUgYXJ0aWNsZSBieSB1c2luZyBhIGNsYXNzIG5hbWUg KG5vdGUgdGhlIDxjb2RlPi48L2NvZGU+IGluIDxjb2RlPi5zbWRfcGFnaW5hdGlvbjwvY29k ZT4gdG8gaW5kaWNhdGUgaXQgaXMgYSBjbGFzcyBub3QgYW4gSUQgd2UgYXJlIHJlZmVycmlu ZyB0byk8L2xpPgoJPC91bD4KCgk8cD5BbHNvIG5vdGUgdGhhdCA8Y29kZT5zcGxpdHdyYXB0 YWc8L2NvZGU+IGhhcyBiZWVuIHVuc2V0LjwvcD4KCgk8aDMgaWQ9ImVnMyI+RXhhbXBsZSAz PC9oMz4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZsdDtkaXYg aWQ9JnF1b3Q7c21kX3BhZ25hdiZxdW90OyZndDsmbHQ7L2RpdiZndDsKJmx0O3R4cDpzbWRf cGFnaWNsZSBjb250YWluZXI9JnF1b3Q7I3dyYXBwZXImcXVvdDsKICAgICBzcGxpdGF0PSZx dW90O0NvbW1lbnRhcnkmcXVvdDsgc3BsaXR3cmFwdGFnPSZxdW90O2gzJnF1b3Q7CiAgICAg Zm9jdXM9JnF1b3Q7aDE6MTAwMCZxdW90OyAvJmd0Owo8L2NvZGU+PC9wcmU+CgoJPHA+VGhp cyBleGFtcGxlIHdpbGw6PC9wPgoKCTx1bD4KCQk8bGk+T25seSBzcGxpdCB0aGUgZG9jdW1l bnQgd2hlcmV2ZXIgaXQgZmluZHMgPGNvZGU+Jmx0O2gzJmd0O0NvbW1lbnRhcnkmbHQ7L2gz Jmd0OzwvY29kZT4gaW5zaWRlIHRoZSA8Y29kZT53cmFwcGVyPC9jb2RlPiBkaXY8L2xpPgoJ CTxsaT5TY3JvbGwgdXAgdG8gdGhlIDxjb2RlPiZsdDtoMSZndDs8L2NvZGU+IHRhZyBhbmQg dGFrZSBvbmUgc2Vjb25kICgxMDAwIG1pbGxpc2Vjb25kcykgdG8gZG8gc28gZWFjaCB0aW1l IGEgcGFnZSBudW1iZXIgaXMgY2xpY2tlZDwvbGk+Cgk8L3VsPgoKCTxoMyBpZD0iZWc0Ij5F eGFtcGxlIDQ8L2gzPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+ Jmx0O2RpdiBpZD0mcXVvdDtzbWRfcGFnbmF2JnF1b3Q7Jmd0OyZsdDsvZGl2Jmd0OwombHQ7 dHhwOnNtZF9wYWdpY2xlIGNvbnRhaW5lcj0mcXVvdDsjd3JhcHBlciZxdW90OwogICAgIHNw bGl0YXQ9JnF1b3Q7LipyZWQuKiZxdW90OyBzcGxpdHdyYXB0YWc9JnF1b3Q7aDMmcXVvdDsg LyZndDsKPC9jb2RlPjwvcHJlPgoKCTxwPlRoaXMgZXhhbXBsZSB3aWxsIHNwbGl0IHRoZSBk b2N1bWVudCB3aGVyZXZlciBpdCBmaW5kcyBhbiA8Y29kZT4mbHQ7aDMmZ3Q7PC9jb2RlPiB0 YWcgdGhhdCBoYXMgdGhlIGNoYXJhY3RlcnMgPGNvZGU+cmVkPC9jb2RlPiBpbnNpZGUgdGhl bS4gVGhlIDxjb2RlPi4qPC9jb2RlPiBpcyBhIDxhIGhyZWY9Imh0dHA6Ly93d3cucmVndWxh ci1leHByZXNzaW9ucy5pbmZvLyI+cmVndWxhciBleHByZXNzaW9uPC9hPiB3aWxkY2FyZCB0 aGF0IG1hdGNoZXMgYW55IGNoYXJhY3RlcnMgYmVmb3JlIGFuZCBhZnRlciAmIzgyMTY7cmVk JiM4MjE3Oy48L3A+CgoJPHA+Rm9yIGV4YW1wbGUsIDxjb2RlPiZsdDtoMyZndDtCbGlua2Vy ZWQgdmlzaW9uJmx0Oy9oMyZndDs8L2NvZGU+IGFuZCA8Y29kZT4mbHQ7aDMmZ3Q7RHJlZGVy aWNrIFRhdHVtJmx0Oy9oMyZndDs8L2NvZGU+IHdpbGwgbWF0Y2gsIGJ1dCA8Y29kZT4mbHQ7 aDMmZ3Q7SGVyZSBkb2dneSZsdDsvaDMmZ3Q7PC9jb2RlPiB3aWxsIG5vdC48L3A+CgoJPGgz IGlkPSJlZzUiPkV4YW1wbGUgNTwvaDM+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xh c3M9ImJsb2NrIj4mbHQ7ZGl2IGlkPSZxdW90O3NtZF9wYWduYXYmcXVvdDsmZ3Q7Jmx0Oy9k aXYmZ3Q7CiZsdDt0eHA6c21kX3BhZ2ljbGUgY29udGFpbmVyPSZxdW90OyN3cmFwcGVyJnF1 b3Q7CiAgICAgbmF2dGV4dD0mcXVvdDsmcXVvdDtmOiMjZmlyc3QjIywgbDojI2xhc3QjIyAv Jmd0Owo8L2NvZGU+PC9wcmU+CgoJPHA+VGhpcyBleGFtcGxlOjwvcD4KCgk8dWw+CgkJPGxp PlNwbGl0cyB0aGUgYXJ0aWNsZSBhdCA8Y29kZT4mbHQ7aDImZ3Q7PC9jb2RlPiB0YWdzPC9s aT4KCQk8bGk+QWRkcyB0aGUgbmF2aWdhdGlvbiB0byB0aGUgPGNvZGU+c21kX3BhZ25hdjwv Y29kZT4gZGl2PC9saT4KCQk8bGk+VXNlcyA8c3BhbiBjbGFzcz0iY2FwcyI+TUxQPC9zcGFu PiBzbmlwcGV0cyB0byByZW5kZXIgbGFuZ3VhZ2UtZGVwZW5kZW50IGVudHJpZXMgZm9yIHRo ZSAmIzgyMTY7ZiYjODIxNzsgYW5kICYjODIxNjtsJiM4MjE3OyBuYXYgaXRlbXM8L2xpPgoJ PC91bD4KCgk8aDMgaWQ9ImNoYW5nZXMiPkNoYW5nZWxvZzwvaDM+CgoJPHVsPgoJCTxsaT4y MyBKdW4gMDkgfCAwLjEgfCBJbml0aWFsIHJlbGVhc2U8L2xpPgoJCTxsaT4yNCBKdW4gMDkg fCAwLjIgfCBSZWZhY3RvcmVkIGNvZGUgYW5kIHJlbW92ZWQgbW9zdCBvZiB0aGUgPGNvZGU+ d3JhcDwvY29kZT4gYXR0cmlidXRlcyA7IGZpeGVkIHZhbGlkYXRpb24gaXNzdWVzIGFuZCB2 aXNpYmlsaXR5IG9mIHBhZ2VyIGluIG5vbi1wYWdlZCBhcnRpY2xlcywgYWRkZWQgJiM4MjE2 O2FsbCYjODIxNzsgYW5kIGFsbG93ZWQgPHNwYW4gY2xhc3M9ImNhcHMiPk1MUDwvc3Bhbj4g c25pcHBldCByZXBsYWNlbWVudCAoYWxsIHRoYW5rcyB1bHRyYW1lZ2EpPC9saT4KCTwvdWw+ Cgo8L2Rpdj4KPCEtLSAqKiogQkVHSU4gUExVR0lOIENTUyAqKiogLS0+CjxzdHlsZSB0eXBl PSJ0ZXh0L2NzcyI+CiNzbWRfaGVscCB7IGxpbmUtaGVpZ2h0OjEuNSA7fQojc21kX2hlbHAg Y29kZSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IGZvbnQ6IDEwNSUvMTMwJSAiQ291cmllciBOZXci LCBjb3VyaWVyLCBtb25vc3BhY2U7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGQ0M7fQojc21k X2hlbHAgY29kZS5ibG9jayB7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgYm9yZGVyOjFweCBkb3R0 ZWQgIzk5OTsgYmFja2dyb3VuZC1jb2xvcjogI2YwZTY4YzsgZGlzcGxheTpibG9jazsgbWFy Z2luOjEwcHggMTBweCAyMHB4OyBwYWRkaW5nOjEwcHg7IH0KI3NtZF9oZWxwIGgxIHsgY29s b3I6ICMzNjk7IGZvbnQ6IDIwcHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgbWFyZ2luOiAwOyB0 ZXh0LWFsaWduOiBjZW50ZXI7IH0KI3NtZF9oZWxwIGgyIHsgYm9yZGVyLWJvdHRvbTogMXB4 IHNvbGlkIGJsYWNrOyBwYWRkaW5nOjEwcHggMCAwOyBjb2xvcjogIzM2OTsgZm9udDogMTdw eCBHZW9yZ2lhLCBzYW5zLXNlcmlmOyB9CiNzbWRfaGVscCBoMyB7IGNvbG9yOiAjMjc1Njg1 OyBmb250OiBib2xkIDEycHggQXJpYWwsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAx cHg7IG1hcmdpbjogMTBweCAwIDA7dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgdGV4dC1k ZWNvcmF0aW9uOnVuZGVybGluZTt9CiNzbWRfaGVscCBoNCB7IGZvbnQ6IGJvbGQgMTFweCBB cmlhbCwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2luOiAxMHB4IDAg MCA7dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgfQojc21kX2hlbHAgLmF0bm0geyBmb250 LXdlaWdodDpib2xkOyBjb2xvcjojMzNkOyB9CiNzbWRfaGVscCAubWFuZCB7IGJhY2tncm91 bmQ6I2VlZTsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgfQojc21kX2hlbHAgdGFibGUge3dp ZHRoOjkwJTsgdGV4dC1hbGlnbjpjZW50ZXI7IHBhZGRpbmctYm90dG9tOjFlbTt9CiNzbWRf aGVscCB0ZCwgI3NtZF9oZWxwIHRoIHtib3JkZXI6MXB4IHNvbGlkICM5OTk7IHBhZGRpbmc6 LjVlbSAwO30KI3NtZF9oZWxwIHVsIHsgbGlzdC1zdHlsZS10eXBlOnNxdWFyZTsgfQojc21k X2hlbHAgLnJlcXVpcmVkIHtjb2xvcjpyZWQ7fQojc21kX2hlbHAgbGkgeyBtYXJnaW46NXB4 IDIwcHggNXB4IDMwcHg7IH0KI3NtZF9oZWxwIC5icmVhayB7IG1hcmdpbi10b3A6NXB4OyB9 Cjwvcwo8L3N0eWxlPgo8IS0tICoqKiBFTkQgUExVR0lOIENTUyAqKiogLS0+CiI7czo0OiJj b2RlIjtzOjcwODg6ImZ1bmN0aW9uIHNtZF9wYWdpY2xlKCRhdHRzLCAkdGhpbmc9JycpIHsN CgkvLyBQbHVnaW4gb3B0aW9ucw0KCWV4dHJhY3QobEF0dHMoYXJyYXkoDQoJCSdjb250YWlu ZXInID0+ICcjY29udGVudCcsDQoJCSdzcGxpdGF0JyA9PiAnJywNCgkJJ3NwbGl0d3JhcHRh ZycgPT4gJ2gyJywNCgkJJ2hlYWRlcicgPT4gJ2gxJywNCgkJJ2Zvb3RlcicgPT4gJycsDQoJ CSdkZWxldGUnID0+ICdTTURfQVVUTycsDQoJCSdmb2N1cycgPT4gJ2JvZHk6NDAwJywNCgkJ J2FuaW1hdGUnID0+ICdvcGFjaXR5OnNob3cnLA0KCQknYWRkbmF2dG8nID0+ICcjc21kX3Bh Z25hdicsDQoJCSduYXZjbGFzcycgPT4gJ3NtZF9wYWdlcycsDQoJCSduYXZhY3RpdmUnID0+ ICdzbWRfY3VycnBhZ2UnLA0KCQknbmF2ZGlzYWJsZWQnID0+ICdzbWRfZGlzYWJsZWQnLA0K CQknbmF2ZGlzcGxheScgPT4gJ2YgcCAjIG4gbCBhJywNCgkJJ25hdnRleHQnID0+ICcnLA0K CSksICRhdHRzKSk7DQoNCgkvLyBTYW5pdGl6ZSB0aGUgb3B0aW9ucyBzbyB3ZSBjYW4gZ3Vh cmFudGVlIHRoYXQgalF1ZXJ5IGF0IGxlYXN0IGhhcyBfc29tZXRoaW5nXyB0byBzd2luZyBv ZmYNCgkvLyBUaGlzIHBhcnQgc2ltcGx5IHJlYWZmaXJtcyB0aGUgZGVmYXVsdHMgYWJvdmUN CglpZiAoJHNwbGl0d3JhcHRhZyAmJiAkc3BsaXRhdCA9PSAiIikgew0KCQkkc3BsaXRhdCA9 ICIuKiI7DQoJfQ0KDQoJJG5hdnJlcHMgPSBhcnJheSgnZicgPT4gJyZsYXF1bzsnLCAncCcg PT4gJzwnLCAnbicgPT4gJz4nLCAnbCcgPT4gJyZyYXF1bzsnLCAnYScgPT4gJ0FsbCcpOw0K CSRhbmltYXRlID0gKCRhbmltYXRlKSA/ICRhbmltYXRlIDogJ29wYWNpdHk6c2hvdyc7DQoJ JGRlbGV0ZSA9ICgkZGVsZXRlKSA/ICRkZWxldGUgOiAnU01EX0FVVE8nOw0KCSRhZGRuYXZ0 byA9ICgkYWRkbmF2dG8pID8gJGFkZG5hdnRvIDogJyNzbWRfcGFnbmF2JzsNCgkkbmF2Y2xh c3MgPSAoJG5hdmNsYXNzKSA/ICRuYXZjbGFzcyA6ICdzbWRfcGFnZXMnOw0KCSRuYXZhY3Rp dmUgPSAoJG5hdmFjdGl2ZSkgPyAkbmF2YWN0aXZlIDogJ3NtZF9jdXJycGFnZSc7DQoJJG5h dmRpc2FibGVkID0gKCRuYXZkaXNhYmxlZCkgPyAkbmF2ZGlzYWJsZWQgOiAnc21kX2Rpc2Fi bGVkJzsNCgkkbmF2dGV4dCA9IGRvX2xpc3QoJG5hdnRleHQpOw0KCWZvcmVhY2ggKCRuYXZ0 ZXh0IGFzICRuYXZpdCkgew0KCQkkbmF2aXQgPSBleHBsb2RlKCI6IiwgJG5hdml0KTsNCgkJ aWYoYXJyYXlfa2V5X2V4aXN0cygkbmF2aXRbMF0sICRuYXZyZXBzKSAmJiBpc3NldCgkbmF2 aXRbMV0pKSB7DQoJCQkkbmF2cmVwc1skbmF2aXRbMF1dID0gJG5hdml0WzFdOw0KCQl9DQoJ fQ0KDQoJLy8gUmVtb3ZlIHNwYWNlcyBiZXR3ZWVuIGl0ZW1zIGluIGFkZG5hdnRvIGFuZCBt YWtlIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QNCgkkYWRkbmF2dG8gPSBpbXBsb2RlKCIsIiwg ZG9fbGlzdCgkYWRkbmF2dG8pKTsNCg0KCS8vIE9wdGlvbmFsIGl0ZW1zDQoJJHRoZWNsYXNz ID0gKCRuYXZjbGFzcykgPyAnIGNsYXNzPSInLiRuYXZjbGFzcy4nIicgOiAnIGNsYXNzPSJz bWRfcGFnZXMiJzsNCgkkdGhlYWN0aXZlID0gKCRuYXZjbGFzcyAmJiAkbmF2YWN0aXZlKSA/ ICcgY2xhc3M9IicuJG5hdmNsYXNzLicgJy4kbmF2YWN0aXZlLiciJyA6ICgoJG5hdmFjdGl2 ZSkgPyAnIGNsYXNzPSInLiRuYXZhY3RpdmUuJyInIDogJycpOw0KCSRzd3JhcF9iZWcgPSAo JHNwbGl0d3JhcHRhZykgPyAnPCcuJHNwbGl0d3JhcHRhZy4nPicgOiAnJzsNCgkkc3dyYXBf ZW5kID0gKCRzcGxpdHdyYXB0YWcpID8gJzwvJy4kc3BsaXR3cmFwdGFnLic+JyA6ICcnOw0K DQoJLy8gQXV0b21hdGljIGRlZmF1bHQNCglpZiAoJGRlbGV0ZSA9PSAiU01EX0FVVE8iKSB7 DQoJCSRkZWxldGUgPSAoJHNwbGl0d3JhcHRhZykgPyAwIDogMTsNCgl9DQoNCgkvLyBzcGxp dCB0aGUgbmF2ZGlzcGxheSBpbnRvIGl0cyBjaGFyYWN0ZXJzIGZvciBtYWtpbmcgYSBqcyBh cnJheQ0KCSRuYXZpdGVtcyA9IGltcGxvZGUoIiwiLCBkb0FycmF5KHByZWdfc3BsaXQoJy8v JywgJG5hdmRpc3BsYXksIC0xLCBQUkVHX1NQTElUX05PX0VNUFRZKSwgJ2RvUXVvdGUnKSk7 DQoNCgkvLyBIYW5kbGUgdGhlIGZvY3VzIGVsZW1lbnQNCgkkamZvY3VzID0gJyc7DQoJaWYg KCRmb2N1cykgew0KCQkkZm9jdXNJdGVtcyA9IGRvX2xpc3QoJGZvY3VzLCAnOicpOw0KCQkk amZvY3VzID0gKGlzc2V0KCRmb2N1c0l0ZW1zWzBdKSkgPyAkZm9jdXNJdGVtc1swXSA6ICdi b2R5JzsNCgkJJGpmb2N1c3RpbWUgPSAoaXNzZXQoJGZvY3VzSXRlbXNbMV0pKSA/ICRmb2N1 c0l0ZW1zWzFdIDogJzQwMCc7DQoJCWlmICgkamZvY3VzKSB7DQoJCQkkamZvY3VzID0gJ3Zh ciBwb3MgPSBqUXVlcnkoIicgLiRqZm9jdXMuICciKS5vZmZzZXQoKTsnOw0KCQkJJGpmb2N1 cyAuPSAnalF1ZXJ5KCJodG1sIikuYW5pbWF0ZSh7IHNjcm9sbFRvcDogcG9zLnRvcCArICJw eCIgfSwgeyBkdXJhdGlvbjogJyAuKCgkamZvY3VzdGltZSkgPyAkamZvY3VzdGltZSA6IDQw MCkuJyB9KTsnOw0KCQl9DQoJfQ0KDQoJLy8gSGFuZGxlIHRoZSBhbmltYXRpb24gZWxlbWVu dA0KCSRqYW5pbWF0ZSA9IGRvX2xpc3QoJGFuaW1hdGUpOw0KCSRlbGVtID0gYXJyYXkoKTsN Cglmb3JlYWNoICgkamFuaW1hdGUgYXMgJGFuaW1vcHQpIHsNCgkJaWYgKHRyaW0oJGFuaW1v cHQpID09ICcnKSBjb250aW51ZTsNCgkJbGlzdCgkam9iaiwgJGp2YWwpID0gZG9fbGlzdCgk YW5pbW9wdCwgIjoiKTsNCgkJJGVsZW1bXSA9IGRvQXJyYXkoJGpvYmosICdkb1F1b3RlJyku ICc6Jy4gZG9BcnJheSgkanZhbCwgJ2RvUXVvdGUnKTsNCgl9DQoJJGphbmltYXRlID0gKCRl bGVtKSA/ICJ7IiAuIGltcGxvZGUoIiwiLCAkZWxlbSkgLiAifSIgOiAnJzsNCg0KCS8vIFNp bmNlIHRoZSByZWdleCAnY2FwdHVyZXMnIHRoZSBkZWxpbWl0ZXIsIHRoZSBtYXRjaGVzIGFs dGVybmF0ZSBiZXR3ZWVuDQoJLy8gYSBibG9jayBvZiBjb250ZW50IChldmVucykgYW5kIHRo ZSBkZWxpbWl0ZXIgaXRzZWxmIChvZGRzKQ0KJG91dCA9IDw8PEVPSlMNCjxzY3JpcHQgdHlw ZT0idGV4dC9qYXZhc2NyaXB0Ij4NCiAvLzwhW0NEQVRBWw0KdmFyIHNtZF9wYWdfbnVtID0g MTsNCnZhciBzbWRfcGFnX21heCA9IDE7DQp2YXIgc21kX3BhZ2VzID0gbmV3IEFycmF5KCk7 DQp2YXIgc21kX3BhZ19oZHIgPSAnJzsNCnZhciBzbWRfcGFnX2Z0ciA9ICcnOw0KDQpmdW5j dGlvbiBzbWRfcGFnaWNsZSgpIHsNCgl2YXIgcGFnZWQgPSAnJzsNCgl2YXIgbmF2ID0gJyc7 DQoJdmFyIGlkeCA9IDA7DQoJdmFyIGN0ciA9IDE7DQoJdmFyIG5hdml0ZW1zID0gW3skbmF2 aXRlbXN9XTsNCg0KCWlmICgneyRoZWFkZXJ9JyAhPSAnJykgew0KCQlzbWRfcGFnX2hkciA9 IGpRdWVyeSgieyRoZWFkZXJ9Iik7DQoJfQ0KCWlmICgneyRmb290ZXJ9JyAhPSAnJykgew0K CQlzbWRfcGFnX2Z0ciA9IGpRdWVyeSgieyRmb290ZXJ9Iik7DQoJfQ0KDQoJLy8gU3Rhc2gg dGhlIGZ1bGwgcGFnZQ0KCXNtZF9wYWdlc1swXSA9IGpRdWVyeSgieyRjb250YWluZXJ9Iiku aHRtbCgpOw0KDQoJdmFyIHJlZyA9IG5ldyBSZWdFeHAoIih7JHN3cmFwX2JlZ317JHNwbGl0 YXR9eyRzd3JhcF9lbmR9KSIpOw0KCWpRdWVyeSgieyRjb250YWluZXJ9IikuZWFjaChmdW5j dGlvbihjb250ZW50KSB7DQoJCXNtZF9wYWdlcGFydHMgPSBqUXVlcnkodGhpcykuaHRtbCgp LnNwbGl0KHJlZyk7DQoJCXZhciBjYXB0dXJlID0gJyc7DQoJCWpRdWVyeShzbWRfcGFnZXBh cnRzKS5lYWNoKGZ1bmN0aW9uKHBhcnQpIHsNCgkJCWlmIChpZHglMiA9PSAxICYmIHskZGVs ZXRlfT09MCkgeyAvLyBGb3Igb2RkIHBhcnRzIHRoYXQgYXJlIG5vdCB0byBiZSByZW1vdmVk DQoJCQkJY2FwdHVyZSA9IHRoaXM7DQoJCQl9DQoJCQlpZiAoaWR4JTIgPT0gMCkgew0KCQkJ CS8vIFN0b3JlIHRoZSBpbmRpdmlkdWFsIHBhZ2VzDQoJCQkJc21kX3BhZ2VzW2N0cl0gPSBj YXB0dXJlICsgdGhpczsNCgkJCQljdHIrKzsNCgkJCX0NCgkJCWlkeCsrOw0KCQl9KTsNCgl9 KTsNCg0KCXNtZF9wYWdfbWF4ID0gY3RyLTE7DQoNCgkvLyBBZGQgdGhlIHBhZ2luZyBvcHRp b25zIGlmIHJlcXVpcmVkDQoJaWYgKHNtZF9wYWdfbWF4PjEpIHsNCgkJalF1ZXJ5LmVhY2go bmF2aXRlbXMsIGZ1bmN0aW9uKCkgew0KCQkJc3dpdGNoKHRoaXMudG9TdHJpbmcoKSkgew0K CQkJCWNhc2UgJ2EnOg0KCQkJCQluYXYgKz0gJzxhIGlkPSJzbWRfYWxsIiBocmVmPSIjInsk dGhlY2xhc3N9IG9uY2xpY2s9InNtZF9wYWdfc2hvdyhcJ2FsbFwnKTtyZXR1cm4oZmFsc2Up OyI+eyRuYXZyZXBzWydhJ119PC9hPic7DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ2YnOg0K CQkJCQluYXYgKz0gJzxhIGlkPSJzbWRfZnN0IiBocmVmPSIjInskdGhlY2xhc3N9IG9uY2xp Y2s9InNtZF9wYWdfc2hvdyhcJzFcJyk7cmV0dXJuKGZhbHNlKTsiPnskbmF2cmVwc1snZidd fTwvYT4nOw0KCQkJCQlicmVhazsNCgkJCQljYXNlICdsJzoNCgkJCQkJbmF2ICs9ICc8YSBp ZD0ic21kX2xzdCIgaHJlZj0iIyJ7JHRoZWNsYXNzfSBvbmNsaWNrPSJzbWRfcGFnX3Nob3co XCcnICtzbWRfcGFnX21heCsgJ1wnKTtyZXR1cm4oZmFsc2UpOyI+eyRuYXZyZXBzWydsJ119 PC9hPic7DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ3AnOg0KCQkJCQluYXYgKz0gJzxhIGlk PSJzbWRfcHJ2IiBocmVmPSIjInskdGhlY2xhc3N9IG9uY2xpY2s9InNtZF9wYWdfc2hvdyhc Jy0xXCcpO3JldHVybihmYWxzZSk7Ij57JG5hdnJlcHNbJ3AnXX08L2E+JzsNCgkJCQkJYnJl YWs7DQoJCQkJY2FzZSAnbic6DQoJCQkJCW5hdiArPSAnPGEgaWQ9InNtZF9ueHQiIGhyZWY9 IiMieyR0aGVjbGFzc30gb25jbGljaz0ic21kX3BhZ19zaG93KFwnKzFcJyk7cmV0dXJuKGZh bHNlKTsiPnskbmF2cmVwc1snbiddfTwvYT4nOw0KCQkJCQlicmVhazsNCgkJCQljYXNlICcj JzoNCgkJCQkJZm9yIChqZHggPSAxOyBqZHggPCBjdHI7IGpkeCsrKSB7DQoJCQkJCQluYXYg Kz0gJyA8YSBocmVmPSIjIicgKygoc21kX3BhZ19udW09PWpkeCkgPyAneyR0aGVhY3RpdmV9 JyA6ICd7JHRoZWNsYXNzfScpKyAnIiBvbmNsaWNrPSJzbWRfcGFnX3Nob3coXCcnICtqZHgr ICdcJyk7cmV0dXJuKGZhbHNlKTsiPicgK2pkeCsgJzwvYT4nOw0KCQkJCQl9DQoJCQkJCWJy ZWFrOw0KCQkJCWRlZmF1bHQ6DQoJCQkJCW5hdiArPSAnICc7DQoJCQkJCWJyZWFrOw0KCQkJ fQ0KCQl9KTsNCgkJalF1ZXJ5KCJ7JGFkZG5hdnRvfSIpLmVhY2goZnVuY3Rpb24oKSB7DQoJ CQlqUXVlcnkodGhpcykuYXBwZW5kKG5hdik7DQoJCX0pOw0KCX0NCn0NCg0KLy8gRGlzcGxh eSBhIHBhcnRpY3VhbHIgcGFnZQ0KZnVuY3Rpb24gc21kX3BhZ19zaG93KGRpcikgew0KCWlm IChkaXI9PSJhbGwiKSB7DQoJCWpRdWVyeSgiYS57JG5hdmNsYXNzfSIpLnJlcGxhY2VXaXRo KCcnKTsNCgkJc21kX3BhZ19udW0gPSAwOw0KCX0gZWxzZSB7DQoJCXJlID0gLyhcK3xcLSk/ KFxkKykvOw0KCQltYXRjaGVzID0gcmUuZXhlYyhkaXIpOw0KCQlpZiAobWF0Y2hlc1sxXSA9 PSAiKyIgJiYgc21kX3BhZ19udW0gPCBzbWRfcGFnX21heCkgew0KCQkJc21kX3BhZ19udW0r KzsNCgkJfQ0KCQlpZiAobWF0Y2hlc1sxXSA9PSAiLSIgJiYgc21kX3BhZ19udW0gPiAxKSB7 DQoJCQlzbWRfcGFnX251bS0tOw0KCQl9DQoJCWlmIChtYXRjaGVzWzFdID09IG51bGwpIHsN CgkJCXNtZF9wYWdfbnVtID0gbWF0Y2hlc1syXTsNCgkJfQ0KCX0NCg0KCS8vIFNob3cgdGhl IHBhZ2UNCglqUXVlcnkoInskY29udGFpbmVyfSIpLmhpZGUoKTsNCglqUXVlcnkoInskY29u dGFpbmVyfSIpLmVtcHR5KCk7DQoJaWYgKHNtZF9wYWdfaGRyICYmIChzbWRfcGFnX251bSA+ IDEpKSB7DQoJCWpRdWVyeSgieyRjb250YWluZXJ9IikucHJlcGVuZChzbWRfcGFnX2hkcik7 DQoJfQ0KCWpRdWVyeSgieyRjb250YWluZXJ9IikuYXBwZW5kKHNtZF9wYWdlc1tzbWRfcGFn X251bV0pOw0KCWlmIChzbWRfcGFnX2Z0ciAmJiAoc21kX3BhZ19udW0gPCBzbWRfcGFnX21h eC0xKSkgew0KCQlqUXVlcnkoInskY29udGFpbmVyfSIpLmFwcGVuZChzbWRfcGFnX2Z0cik7 DQoJfQ0KCWlmICgieyRqYW5pbWF0ZX0iICE9ICIiKSB7DQoJCWpRdWVyeSgieyRjb250YWlu ZXJ9IikuYW5pbWF0ZSh7JGphbmltYXRlfSk7DQoJfQ0KDQoJaWYgKHNtZF9wYWdfbnVtPT0x KSB7DQoJCWpRdWVyeSgiI3NtZF9mc3QiKS5hZGRDbGFzcygieyRuYXZkaXNhYmxlZH0iKTsN CgkJalF1ZXJ5KCIjc21kX3BydiIpLmFkZENsYXNzKCJ7JG5hdmRpc2FibGVkfSIpOw0KCX0g ZWxzZSB7DQoJCWpRdWVyeSgiI3NtZF9mc3QiKS5yZW1vdmVDbGFzcygieyRuYXZkaXNhYmxl ZH0iKTsNCgkJalF1ZXJ5KCIjc21kX3BydiIpLnJlbW92ZUNsYXNzKCJ7JG5hdmRpc2FibGVk fSIpOw0KCX0NCglpZiAoc21kX3BhZ19udW09PXNtZF9wYWdfbWF4KSB7DQoJCWpRdWVyeSgi I3NtZF9sc3QiKS5hZGRDbGFzcygieyRuYXZkaXNhYmxlZH0iKTsNCgkJalF1ZXJ5KCIjc21k X254dCIpLmFkZENsYXNzKCJ7JG5hdmRpc2FibGVkfSIpOw0KCX0gZWxzZSB7DQoJCWpRdWVy eSgiI3NtZF9sc3QiKS5yZW1vdmVDbGFzcygieyRuYXZkaXNhYmxlZH0iKTsNCgkJalF1ZXJ5 KCIjc21kX254dCIpLnJlbW92ZUNsYXNzKCJ7JG5hdmRpc2FibGVkfSIpOw0KCX0NCg0KCS8v IFNldCB0aGUgY3VycmVudCBjbGFzcw0KCWpRdWVyeSgiYS57JG5hdmNsYXNzfSIpLmVhY2go ZnVuY3Rpb24oKSB7DQoJCWpRdWVyeSh0aGlzKS5yZW1vdmVDbGFzcygieyRuYXZhY3RpdmV9 Iik7DQoJCWlmIChqUXVlcnkodGhpcykudGV4dCgpID09IHNtZF9wYWdfbnVtKSB7DQoJCQlq UXVlcnkodGhpcykuYWRkQ2xhc3MoInskbmF2YWN0aXZlfSIpOw0KCQl9DQoJfSk7DQoNCgkv LyBBbmQgc2Nyb2xsIHRvIHRoZSB0b3ANCgl7JGpmb2N1c30NCglyZXR1cm4gZmFsc2U7DQp9 DQoNCmpRdWVyeShmdW5jdGlvbigpIHsNCglzbWRfcGFnaWNsZSgpOw0KCWlmIChzbWRfcGFn X21heD4xKSB7DQoJCXNtZF9wYWdfc2hvdygxKQ0KCX0NCn0pOw0KIC8vXV0+DQo8L3Njcmlw dD4NCkVPSlM7DQoJcmV0dXJuICRvdXQ7DQp9IjtzOjQ6InR5cGUiO3M6MToiMCI7czo1OiJm bGFncyI7czoxOiIwIjtzOjU6Im9yZGVyIjtzOjE6IjUiO3M6MzoibWQ1IjtzOjMyOiIzYTRi MzQzNmFjYmI2MjMxNjNhOGEyMjMyODVjOTBhYiI7fQ==