# Name: soo_page_numbers v0.4.1 # Type: Admin/Client side plugin # Article list nav and page count widgets # Author: Jeff Soo # URL: http://ipsedixit.net/txp/ # 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: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjE2OiJzb29fcGFnZV9udW1iZXJzIjtzOjY6ImF1dGhvciI7 czo4OiJKZWZmIFNvbyI7czoxMDoiYXV0aG9yX3VyaSI7czoyNToiaHR0cDovL2lwc2VkaXhp dC5uZXQvdHhwLyI7czo3OiJ2ZXJzaW9uIjtzOjU6IjAuNC4xIjtzOjExOiJkZXNjcmlwdGlv biI7czozOToiQXJ0aWNsZSBsaXN0IG5hdiBhbmQgcGFnZSBjb3VudCB3aWRnZXRzIjtzOjQ6 ImhlbHAiO3M6OTI0MDoiPGgxPnNvb19wYWdlX251bWJlcnM8L2gxPgoKPHA+VGhpcyBpcyBh IHBsdWdpbiBmb3IgPGEgaHJlZj0iaHR0cDovL3RleHRwYXR0ZXJuLmNvbSI+VGV4dHBhdHRl cm48L2E+LiBJdCBkaXNwbGF5cyBjdXN0b21pc2FibGUgbmF2aWdhdGlvbiB3aWRnZXRzIGZv ciBhcnRpY2xlIGxpc3QgcGFnZXMuPC9wPgoKPHVsPgoJPGxpPjxhIGhyZWY9Imh0dHBzOi8v Zm9ydW0udGV4dHBhdHRlcm4uaW8vdmlld3RvcGljLnBocD9pZD0zMTIxNyI+U3VwcG9ydCBm b3J1bSB0b3BpYzwvYT48L2xpPgoJPGxpPjxhIGhyZWY9Imh0dHA6Ly9pcHNlZGl4aXQubmV0 L3R4cC84Ni9zb29fcGFnZV9udW1iZXJzIj5BdXRob3Igc2l0ZTwvYT48L2xpPgoJPGxpPjxh IGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9qc29vL3Nvb19wYWdlX251bWJlcnMiPkdpdEh1 YjwvYT48L2xpPgo8L3VsPgoKPGRpdiBpZD0idG9jIj4KCjxoMj5Db250ZW50czwvaDI+Cgo8 dWw+Cgk8bGk+PGEgaHJlZj0iI292ZXJ2aWV3Ij5PdmVydmlldzwvYT48L2xpPgoJPGxpPjxh IGhyZWY9IiN0YWdzIj5UYWdzPC9hPgoJPHVsPgoJCTxsaT48YSBocmVmPSIjc29vX3BhZ2Vf bGlua3MiPnNvb19wYWdlX2xpbmtzPC9hPjwvbGk+CgkJPGxpPjxhIGhyZWY9IiNzb29fcGFn ZV9jb3VudCI+c29vX3BhZ2VfY291bnQ8L2E+PC9saT4KCQk8bGk+PGEgaHJlZj0iI3Nvb19w cmV2X3BhZ2UiPnNvb19wcmV2X3BhZ2U8L2E+PC9saT4KCTwvdWw+PC9saT4KCTxsaT48YSBo cmVmPSIjaGlzdG9yeSI+SGlzdG9yeTwvYT48L2xpPgo8L3VsPgoKPC9kaXY+Cgo8aDIgaWQ9 Im92ZXJ2aWV3Ij5PdmVydmlldzwvaDI+Cgo8cD5EaXNwbGF5IHBhZ2UgbmF2aWdhdGlvbiB3 aWRnZXRzIGFuZCBpbmZvcm1hdGlvbiBmb3IgYXJ0aWNsZSBsaXN0IHBhZ2VzLiAoSW5zcGly ZWQgYnkgPGNvZGU+cnN4X3BhZ2VfbnVtYmVyPC9jb2RlPiwgYW4gb2xkIHBsdWdpbiBmcm9t IFR4cCYjODIxNztzIGVhcmx5IGRheXMuKTwvcD4KCjxwPlZlcnNpb24gMC4zLjAgaW5jbHVk ZXMgYSBUZXh0cGFjayB0byBsb2NhbGl6ZSBwcmUtZm9ybWF0dGVkIHRleHQgb3V0cHV0IHN1 Y2ggYXMgJiM4MjIwO1BhZ2Uge2N1cnJlbnR9IG9mIHt0b3RhbH0mIzgyMjE7LiBDdXJyZW50 bHkgaW5jbHVkZXMgMjEgbGFuZ3VhZ2VzLjwvcD4KCjxwPk5COiBWZXJzaW9uIDAuNC4wIGRp ZCBhd2F5IHdpdGggdGhlIHJlcXVpcmVtZW50IGZvciBhbiBleHRlcm5hbCBsaWJyYXJ5IHBs dWdpbiwgYnV0IGJ5IG1vdmluZyB0byBuYXRpdmUgVHhwIDxzcGFuIGNsYXNzPSJjYXBzIj5V Ukk8L3NwYW4+IGhhbmRsaW5nIHRoaXMgY2hhbmdlZCBiZWhhdmlvciBvbiBzaXRlcyB3aXRo IGN1c3RvbSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJJPC9zcGFuPiBzY2hlbWVzLiAwLjQuMSBy ZXN0b3JlcyB0aGF0IGJlaGF2aW9yLiBOb3RlIHRoYXQgdGhlIDxjb2RlPnA8L2NvZGU+IChp bWFnZSBJRCkgcXVlcnkgcGFyYW1ldGVyIGlzIG5vdCBwcmVzZXJ2ZWQ7IHRoaXMgaXMgaW50 ZW50aW9uYWwuPC9wPgoKPHA+PHNwYW4gY2xhc3M9Indhcm5pbmciPk5vdGU6PC9zcGFuPiBJ ZiB5b3UgaGF2ZSBtb3JlIHRoYW4gb25lIHBhZ2luYXRpb24tY2FwYWJsZSB0YWcgb24gdGhl IHBhZ2UgKDxjb2RlPmFydGljbGU8L2NvZGU+IGlmIG5vdCA8Y29kZT5zdGF0dXM9JnF1b3Q7 c3RpY2t5JnF1b3Q7PC9jb2RlPiwgb3IgYW55IG9mIDxjb2RlPmltYWdlczwvY29kZT4sIDxj b2RlPmZpbGVfZG93bmxvYWRfbGlzdDwvY29kZT4sIG9yIDxjb2RlPmxpbmtsaXN0PC9jb2Rl PiBpZiBib3RoIDxjb2RlPmxpbWl0PC9jb2RlPiBhbmQgPGNvZGU+cGFnZWJ5PC9jb2RlPiBh cmUgc2V0KSA8c3Ryb25nPnNvb19wYWdlX251bWJlcnM8L3N0cm9uZz4gd2lsbCB0YWtlIGl0 cyB2YWx1ZXMgZnJvbSB0aGUgZmlyc3Qgc3VjaCB0YWcuIFRoaXMgaXMgdHJ1ZSBubyBtYXR0 ZXIgd2hlcmUgeW91IHB1dCBhbnkgPHN0cm9uZz5zb29fcGFnZV9udW1iZXJzPC9zdHJvbmc+ IHRhZ3MuPC9wPgoKPGgyIGlkPSJ0YWdzIj5UYWdzPC9oMj4KCjxoMyBpZD0ic29vX3BhZ2Vf bGlua3MiPnNvb19wYWdlX2xpbmtzPC9oMz4KCjxwPkRpc3BsYXkgYSAmIzgyMjA7R29vZ2xl LXN0eWxlJiM4MjIxOyBwYWdlIG5hdmlnYXRpb24gd2lkZ2V0LCBpLmUuLCBhIGdyb3VwIG9m IG51bWJlcmVkIGxpbmtzIHJlcHJlc2VudGluZyBwYWdlcy48L3A+Cgo8cHJlPiZsdDt0eHA6 c29vX3BhZ2VfbGlua3MgLyZndDs8L3ByZT4KCjxoND5BdHRyaWJ1dGVzPC9oND4KCjx1bD4K CTxsaT48Y29kZT5wbGFjZWhvbGRlcjwvY29kZT4gPGVtPih0ZXh0KTwvZW0+IDxzcGFuIGNs YXNzPSJkZWZhdWx0Ij5kZWZhdWx0PC9zcGFuPiA8Y29kZT4mYW1wO2hlbGxpcDs8L2NvZGU+ PGJyIC8+ClRleHQgdG8gcGxhY2Ugb24gZWl0aGVyIGVuZCBvZiB0aGUgY2VudHJhbCBwYWdl IHJhbmdlICh3aGVuIHRoZXJlIGFyZSBtYW55IHBhZ2VzKTwvbGk+Cgk8bGk+PGNvZGU+d2lu ZG93X3NpemU8L2NvZGU+IDxlbT4oaW50ZWdlcik8L2VtPiA8c3BhbiBjbGFzcz0iZGVmYXVs dCI+ZGVmYXVsdDwvc3Bhbj4gPGNvZGU+NTwvY29kZT48YnIgLz4KU2l6ZSBvZiBjZW50cmFs IHBhZ2UgcmFuZ2U8L2xpPgoJPGxpPjxjb2RlPnNob3dhbHdheXM8L2NvZGU+IDxlbT4oYm9v bGVhbik8L2VtPiA8c3BhbiBjbGFzcz0iZGVmYXVsdCI+ZGVmYXVsdDwvc3Bhbj4gPGNvZGU+ MDwvY29kZT48YnIgLz4KV2hldGhlciBvciBub3QgdG8gc2hvdyBhbnl0aGluZyB3aGVuIHRo ZSBsaXN0IGlzIGEgc2luZ2xlIHBhZ2U8L2xpPgoJPGxpPjxjb2RlPmFjdGl2ZV9jbGFzczwv Y29kZT4gPGVtPig8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gY2xhc3MpPC9lbT4g PHNwYW4gY2xhc3M9ImRlZmF1bHQiPmRlZmF1bHQ8L3NwYW4+IDxjb2RlPmhlcmU8L2NvZGU+ PGJyIC8+CkNsYXNzIGZvciB0aGUgY3VycmVudCBwYWdlIG51bWJlciYjODIxNztzIHRhZyAo dGhlIDxjb2RlPmJyZWFrPC9jb2RlPiB0YWcsIGlmIGFueSwgb3RoZXJ3aXNlIDxjb2RlPnNw YW48L2NvZGU+KTwvbGk+Cgk8bGk+PGNvZGU+d3JhcHRhZzwvY29kZT4gPGVtPih0ZXh0KTwv ZW0+IDxzcGFuIGNsYXNzPSJkZWZhdWx0Ij5kZWZhdWx0PC9zcGFuPiBlbXB0eTxiciAvPgo8 c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gdGFnIG5hbWUgKG5vIGJyYWNrZXRzKSB0 byB3cmFwIHRoZSBvdXRwdXQ8L2xpPgoJPGxpPjxjb2RlPmNsYXNzPC9jb2RlPiA8ZW0+KHRl eHQpPC9lbT4gPHNwYW4gY2xhc3M9ImRlZmF1bHQiPmRlZmF1bHQ8L3NwYW4+IGVtcHR5PGJy IC8+CjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0MDEvc3RydWN0L2dsb2Jh bC5odG1sI2FkZWYtY2xhc3MiIHRpdGxlPSJzIj48c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwv c3Bhbj4gY2xhc3MgbmFtZTwvYT4gZm9yIHRoZSA8Y29kZT53cmFwdGFnPC9jb2RlPi48L2xp PgoJPGxpPjxjb2RlPmh0bWxfaWQ8L2NvZGU+IDxlbT4odGV4dCk8L2VtPiA8c3BhbiBjbGFz cz0iZGVmYXVsdCI+ZGVmYXVsdDwvc3Bhbj4gZW1wdHk8YnIgLz4KPGEgaHJlZj0iaHR0cDov L3d3dy53My5vcmcvVFIvaHRtbDQwMS9zdHJ1Y3QvZ2xvYmFsLmh0bWwjYWRlZi1pZCI+PHNw YW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IGlkPC9hPiBmb3IgdGhlIDxjb2RlPndyYXB0 YWc8L2NvZGU+LjwvbGk+Cgk8bGk+PGNvZGU+YnJlYWs8L2NvZGU+IDxlbT4obWl4ZWQpPC9l bT4gPHNwYW4gY2xhc3M9ImRlZmF1bHQiPmRlZmF1bHQ8L3NwYW4+IGVtcHR5PGJyIC8+Cjxz cGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiB0YWcgbmFtZSAobm8gYnJhY2tldHMpIHRv IHdyYXAgb3IgdGV4dCB0byBwbGFjZSBiZXR3ZWVuIGFkamFjZW50IHBhZ2UgbnVtYmVycy4g SWYgPGNvZGU+d3JhcHRhZzwvY29kZT4gYW5kIDxjb2RlPmJyZWFrPC9jb2RlPiBhcmUgc2V0 LCA8Y29kZT5icmVhazwvY29kZT4gaXMgYXNzdW1lZCB0byBiZSBhIHRhZyBuYW1lLiBPdGhl cndpc2UgaXQgaXMgdHJlYXRlZCBhcyB0ZXh0IChzbyBkb24mIzgyMTc7dCB1c2UgPGNvZGU+ YnJlYWs9JnF1b3Q7YnImcXVvdDs8L2NvZGU+KS48L2xpPgo8L3VsPgoKPGgzIGlkPSJzb29f cGFnZV9jb3VudCI+c29vX3BhZ2VfY291bnQ8L2gzPgoKPHByZT4mbHQ7dHhwOnNvb19wYWdl X2NvdW50IC8mZ3Q7PC9wcmU+Cgo8aDQ+QXR0cmlidXRlczwvaDQ+Cgo8dWw+Cgk8bGk+PGNv ZGU+Zm9ybWF0PC9jb2RlPiA8ZW0+KGZvcm1hdCBzdHJpbmcpPC9lbT4gPHNwYW4gY2xhc3M9 ImRlZmF1bHQiPmRlZmF1bHQ8L3NwYW4+IDxjb2RlPiAmcXVvdDt7cHJldn0gUGFnZSB7Y3Vy cmVudH0gb2Yge3RvdGFsfSB7bmV4dH0mcXVvdDsgPC9jb2RlPjxiciAvPgpUYWcgd2lsbCBv dXRwdXQgdGhpcyBzdHJpbmcgKGluIHlvdXIgbGFuZ3VhZ2UsIGlmIGFtb25nIHRoZSAyMSBp bmNsdWRlZCkgYWZ0ZXIgcmVwbGFjaW5nIDxjb2RlPntwcmV2fTwvY29kZT4sIDxjb2RlPntu ZXh0fTwvY29kZT4sIDxjb2RlPntmaXJzdH08L2NvZGU+LCBhbmQgPGNvZGU+e2xhc3R9PC9j b2RlPiB3aXRoIGxpbmtzLCBhbmQgPGNvZGU+e2N1cnJlbnR9PC9jb2RlPiBhbmQgPGNvZGU+ e3RvdGFsfTwvY29kZT4gd2l0aCBwYWdlIG51bWJlcnM8L2xpPgoJPGxpPjxjb2RlPnByZXY8 L2NvZGU+IDxlbT4odGV4dCk8L2VtPiA8c3BhbiBjbGFzcz0iZGVmYXVsdCI+ZGVmYXVsdDwv c3Bhbj4gPGNvZGU+JmFtcDtsYXF1bzs8L2NvZGU+ICgmbGFxdW87KTxiciAvPgpMaW5rIHRl eHQgZm9yIHRoZSA8Y29kZT57cHJldn08L2NvZGU+IGxpbms8L2xpPgoJPGxpPjxjb2RlPm5l eHQ8L2NvZGU+IDxlbT4odGV4dCk8L2VtPiA8c3BhbiBjbGFzcz0iZGVmYXVsdCI+ZGVmYXVs dDwvc3Bhbj4gPGNvZGU+JmFtcDtyYXF1bzs8L2NvZGU+ICgmcmFxdW87KTxiciAvPgpMaW5r IHRleHQgZm9yIHRoZSA8Y29kZT57bmV4dH08L2NvZGU+IGxpbms8L2xpPgoJPGxpPjxjb2Rl PmZpcnN0PC9jb2RlPiA8ZW0+KHRleHQpPC9lbT4gPHNwYW4gY2xhc3M9ImRlZmF1bHQiPmRl ZmF1bHQ8L3NwYW4+IDxjb2RlPnwmYW1wO2xhcXVvOzwvY29kZT4gKHwmbGFxdW87KTxiciAv PgpMaW5rIHRleHQgZm9yIHRoZSA8Y29kZT57Zmlyc3R9PC9jb2RlPiBsaW5rPC9saT4KCTxs aT48Y29kZT5sYXN0PC9jb2RlPiA8ZW0+KHRleHQpPC9lbT4gPHNwYW4gY2xhc3M9ImRlZmF1 bHQiPmRlZmF1bHQ8L3NwYW4+IDxjb2RlPiZhbXA7cmFxdW87fDwvY29kZT4gKCZyYXF1bzt8 KTxiciAvPgpMaW5rIHRleHQgZm9yIHRoZSA8Y29kZT57bGFzdH08L2NvZGU+IGxpbms8L2xp PgoJPGxpPjxjb2RlPnNob3dhbHdheXM8L2NvZGU+IDxlbT4oYm9vbGVhbik8L2VtPiA8c3Bh biBjbGFzcz0iZGVmYXVsdCI+ZGVmYXVsdDwvc3Bhbj4gPGNvZGU+MDwvY29kZT48YnIgLz4K V2hldGhlciBvciBub3QgdG8gc2hvdyA8Y29kZT57cHJldn08L2NvZGU+IGFuZCA8Y29kZT57 bmV4dH08L2NvZGU+IG9uIHRoZSBmaXJzdCBhbmQgbGFzdCBwYWdlcywgcmVzcGVjdGl2ZWx5 LCBvciBhbnl0aGluZyBhdCBhbGwgd2hlbiB0aGUgbGlzdCBpcyBhIHNpbmdsZSBwYWdlPC9s aT4KCTxsaT48Y29kZT53cmFwdGFnPC9jb2RlPiA8ZW0+KDxzcGFuIGNsYXNzPSJjYXBzIj5Y SFRNTDwvc3Bhbj4gdGFnIG5hbWUsIG5vIGJyYWNrZXRzKTwvZW0+IG9wdGlvbmFsIHRhZyB0 byB3cmFwIHRoZSBvdXRwdXQ8L2xpPgo8L3VsPgoKPGgzIGlkPSJzb29fcHJldl9wYWdlIj5z b29fcHJldl9wYWdlLCBzb29fbmV4dF9wYWdlPC9oMz4KCjxwPlNob3J0Y3V0cyBmb3IgPGNv ZGU+c29vX3BhZ2VfY291bnQ8L2NvZGU+IHdoZW4gYWxsIHlvdSB3YW50IGlzIGEgc2luZ2xl IGxpbmsuIEZvciBleGFtcGxlLCA8Y29kZT5zb29fcHJldl9wYWdlPC9jb2RlPiBpcyBhIHNo b3J0Y3V0IGZvciA8Y29kZT4mbHQ7dHhwOnNvb19wYWdlX2NvdW50IGZvcm1hdD0mcXVvdDt7 cHJldn0mcXVvdDsgLyZndDs8L2NvZGU+LjwvcD4KCjxoND5BdHRyaWJ1dGVzPC9oND4KCjxw PkluIGFkZGl0aW9uIHRvIDxjb2RlPnNvb19wYWdlX2NvdW50PC9jb2RlPiBhdHRyaWJ1dGVz LCBlYWNoIG9mIHRoZXNlIHRhZ3MgYWxzbyBhY2NlcHRzIGEgPGNvZGU+dGV4dDwvY29kZT4g YXR0cmlidXRlIGZvciBzZXR0aW5nIHRoZSBsaW5rIHRleHQuIFRoZSBmb2xsb3dpbmcgdGFn cyBhcmUgZXF1aXZhbGVudDo8L3A+Cgo8cHJlPiZsdDt0eHA6c29vX25leHRfcGFnZSB0ZXh0 PSZxdW90O05leHQmcXVvdDsgLyZndDsKJmx0O3R4cDpzb29fcGFnZV9jb3VudCBmb3JtYXQ9 JnF1b3Q7e25leHR9JnF1b3Q7IG5leHQ9JnF1b3Q7TmV4dCZxdW90OyAvJmd0OzwvcHJlPgoK PGgyIGlkPSJoaXN0b3J5Ij5WZXJzaW9uIEhpc3Rvcnk8L2gyPgoKPGgzPjAuNC4xICgyMDE3 LTAzLTEwKTwvaDM+Cgo8dWw+Cgk8bGk+TmV3IDxzcGFuIGNsYXNzPSJjYXBzIj5VUkk8L3Nw YW4+IGhhbmRsaW5nIGFsZ29yaXRobSwgcmV2ZXJ0aW5nIHRvIHZlcnNpb24gMC4zIGJlaGF2 aW9yLCBidXQgYXMgYSBmcmVlc3RhbmRpbmcgcGx1Z2luPC9saT4KPC91bD4KCjxoMz4wLjQu MCAoMjAxNy0wMy0wNCk8L2gzPgoKPHVsPgoJPGxpPlJlZmFjdG9yZWQgdG8gZWxpbWluYXRl IHRoZSByZXF1aXJlbWVudCBmb3IgYW4gZXh0ZXJuYWwgbGlicmFyeSBwbHVnaW4uIChOQjog dGhpcyBtZWFucywgaW50ZXIgYWxpYSwgdGhhdCB0aGUgPGNvZGU+cDwvY29kZT4gKGltYWdl IElEKSBxdWVyeSBwYXJhbWV0ZXIgaXMgbm8gbG9uZ2VyIHByZXNlcnZlZCBpbiBwYWdlIGxp bmtzLik8L2xpPgo8L3VsPgoKPGgzPjAuMy4yICgyMDE3LTAyLTE1KTwvaDM+Cgo8dWw+Cgk8 bGk+VGV4dHBhdHRlcm4gNC42IGNvbXBhdGliaWxpdHkgdXBkYXRlPC9saT4KPC91bD4KCjxo Mz4wLjMuMSAoMjAxMi0wMS0yNyk8L2gzPgoKPHVsPgoJPGxpPjxjb2RlPnNvb19wYWdlX2Nv dW50PC9jb2RlPiAoaGVuY2UgYWxzbyA8Y29kZT5zb29fcHJldl9wYWdlPC9jb2RlPiBhbmQg PGNvZGU+c29vX25leHRfcGFnZTwvY29kZT4pIG5vdyBwcmVzZXJ2ZSBub24tVHhwIHF1ZXJ5 IHBhcmFtcyBmb3IgJiM4MjIwO25leHQmIzgyMjE7IGFuZCAmIzgyMjA7cHJldiYjODIyMTsg bGlua3MuPC9saT4KPC91bD4KCjxoMz4wLjMuMCAoMjAxMS0wMS0xOCk8L2gzPgoKPHVsPgoJ PGxpPlBsdWdpbiBub3cgaW5jbHVkZXMgYSBUZXh0cGFjayB0byBsb2NhbGl6ZSBwcmUtZm9y bWF0dGVkIHRleHQgb3V0cHV0IHN1Y2ggYXMgJiM4MjIwO1BhZ2Uge2N1cnJlbnR9IG9mIHt0 b3RhbH0mIzgyMjE7LiBDdXJyZW50bHkgaW5jbHVkZXMgMjEgbGFuZ3VhZ2VzLjwvbGk+Cjwv dWw+Cgo8aDM+MC4yLjcgKDIwMTAtMDItMTEpPC9oMz4KCjx1bD4KCTxsaT5GaXhlZCBUZXh0 cGF0dGVybiBub3RpY2UgYWJvdXQgbm9uLWV4aXN0ZW50IGF0dHJpYnV0ZSB3aGVuIHVzaW5n IDxjb2RlPnNvb19wcmV2X3BhZ2U8L2NvZGU+IG9yIDxjb2RlPnNvb19uZXh0X3BhZ2U8L2Nv ZGU+IChmdW5jdGlvbmFsaXR5IG5vdCBhZmZlY3RlZCk8L2xpPgo8L3VsPgoKPGgzPjAuMi42 ICgyMDA5LTExLTIzKTwvaDM+Cgo8dWw+Cgk8bGk+PGNvZGU+c29vX3BhZ2VfbGlua3M8L2Nv ZGU+IG5vdyByZXN0b3JlcyB0aGUgPGNvZGU+JiMzOTtwZyYjMzk7PC9jb2RlPiBxdWVyeSBw YXJhbWV0ZXIgdG8gaXRzIGluaXRpYWwgc3RhdGUsIHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRo IG90aGVyIGNvbnRleHQtZGVwZW5kZW50IHBsdWdpbnM8L2xpPgo8L3VsPgoKPGgzPjAuMi41 ICgyMDA5LTEwLTIxKTwvaDM+Cgo8dWw+Cgk8bGk+TmV3IGF0dHJpYnV0ZXMgYW5kIHNob3J0 Y3V0IHRhZ3MgZm9yIDxjb2RlPnNvb19wYWdlX2NvdW50PC9jb2RlPjwvbGk+CjwvdWw+Cgo8 aDM+MC4yLjQgKDIwMDktMDctMTYpPC9oMz4KCjx1bD4KCTxsaT5GaXhlZCA8Y29kZT5zaG93 YWx3YXlzPC9jb2RlPiBidWcgd2hlbiBhbiBhcnRpY2xlIGxpc3QgcmV0dXJucyAwIHBhZ2Vz IChlLmcuIGVtcHR5IGNhdGVnb3J5KTwvbGk+CjwvdWw+Cgo8aDM+MC4yLjMgKDIwMDktMDct MDkpPC9oMz4KCjx1bD4KCTxsaT5JbXByb3ZlZCBjb250ZXh0IGNoZWNrIHRvIHByZXZlbnQg cmF3IHRhZyBvdXRwdXQ8L2xpPgo8L3VsPgoKPGgzPjAuMi4yICgyMDA5LTA3LTA5KTwvaDM+ Cgo8dWw+Cgk8bGk+V2hlbiBib3RoIDxjb2RlPndyYXB0YWc8L2NvZGU+IGFuZCA8Y29kZT5i cmVhazwvY29kZT4gYXJlIHNldCwgbm9uLWxpbmtlZCB0ZXh0IGl0ZW1zIChpLmUuLCBjdXJy ZW50IHBhZ2UgbnVtYmVyIG9yIHBsYWNlaG9sZGVyIHRleHQpIGFyZSBubyBsb25nZXIgd3Jh cHBlZCBpbiA8Y29kZT5zcGFuPC9jb2RlPiB0YWdzLCBhbmQgPGNvZGU+YWN0aXZlX2NsYXNz PC9jb2RlPiBpcyBhcHBsaWVkIHRvIHRoZSA8Y29kZT5icmVhazwvY29kZT4gZWxlbWVudCBj b250YWluaW5nIHRoZSBjdXJyZW50IHBhZ2UgbnVtYmVyLjwvbGk+Cgk8bGk+Qm90aCB0YWdz IG5vdyBkbyBhIGNvbnRleHQgY2hlY2sgYW5kIHNob3cgbm90aGluZyBpZiB0aGUgcGFnZSBp cyBub3QgYW4gYXJ0aWNsZSBsaXN0PC9saT4KPC91bD4KCjxoMz4wLjIuMSAoMjAwOS0wNy0w Nyk8L2gzPgoKPHVsPgoJPGxpPkNoYW5nZWQgZmlsZSBuYW1lIGFuZCBvbmUgdGFnIG5hbWU8 L2xpPgoJPGxpPlRoZSA8Y29kZT5zaG93YWx3YXlzPC9jb2RlPiBhdHRyaWJ1dGUgb2YgPGNv ZGU+c29vX3BhZ2VfY291bnQ8L2NvZGU+IG5vdyBhbHNvIGFmZmVjdHMgb3V0cHV0IHdoZW4g dGhlIGFydGljbGUgbGlzdCBpcyBvbmx5IG9uZSBwYWdlPC9saT4KCTxsaT48Y29kZT5zb29f cGFnZV9saW5rczwvY29kZT4gaGFzIGFsc28gYmVlbiBnaXZlbiB0aGUgPGNvZGU+c2hvd2Fs d2F5czwvY29kZT4gYXR0cmlidXRlPC9saT4KCTxsaT5TY3JhcHBlZCA8Y29kZT5zb29fYXJ0 aWNsZV9jb3VudDwvY29kZT4sIHdoaWNoIHdhcyBpbmhlcmVudGx5IGJ1Z2d5IChhcyBpcyB0 aGUgPGNvZGU+cnN4X3RvX29mPC9jb2RlPiBpdCB3YXMgYmFzZWQgb24pPC9saT4KPC91bD4K CjxoMz4wLjIgKDIwMDktMDUtMjIpPC9oMz4KCjxwPk5vdCBwdWJsaWNseSByZWxlYXNlZC4g Q29kZSBvdmVyaGF1bCwgZml4ZWQgdG8gd29yayB3aXRoIGFueSBxdWVyeSBzdHJpbmc8L3A+ Cgo8aDM+MC4xIChhZ2VzIGFnbyk8L2gzPgoKPHA+Tm90IHB1YmxpY2x5IHJlbGVhc2VkLCBu b3QgdmVyeSBnb29kIGVpdGhlciwganVzdCBhIHNvcnJ5IGhhY2sgb2Ygd2hhdCB3YXMgcHJv YmFibHkgYSBxdWljayBvbmUtb2ZmIHBsdWdpbiB0byBiZWdpbiB3aXRoIChpdCB3YXMgZWFy bHkgZGF5cyBmb3IgVHhwKS48L3A+IjtzOjQ6ImNvZGUiO3M6NTUyOToiCmlmKGNsYXNzX2V4 aXN0cygnXFRleHRwYXR0ZXJuXFRhZ1xSZWdpc3RyeScpKSB7CiAgICBUeHA6OmdldCgnXFRl eHRwYXR0ZXJuXFRhZ1xSZWdpc3RyeScpCiAgICAgICAgLT5yZWdpc3Rlcignc29vX3BhZ2Vf bGlua3MnKQogICAgICAgIC0+cmVnaXN0ZXIoJ3Nvb19wYWdlX2NvdW50JykKICAgICAgICAt PnJlZ2lzdGVyKCdzb29fcHJldl9wYWdlJykKICAgICAgICAtPnJlZ2lzdGVyKCdzb29fbmV4 dF9wYWdlJykKICAgICAgICA7Cn0KCmlmICggQHR4cGludGVyZmFjZSA9PSAnYWRtaW4nICkg ewogICAgYWRkX3ByaXZzKCdwbHVnaW5fbGlmZWN5Y2xlLnNvb19wYWdlX251bWJlcnMnLCcx LDInKTsKICAgIHJlZ2lzdGVyX2NhbGxiYWNrKCdzb29fcGFnZV9udW1iZXJzX2xpZmVjeWNs ZScsICdwbHVnaW5fbGlmZWN5Y2xlLnNvb19wYWdlX251bWJlcnMnKTsKfQoKLy8gZGVsZXRl IHRoZSBUZXh0cGFjawovLyBOb3RlOiBjYWxsYmFja19ldmVudCgpIGRvZXMgbm90IGRpc3Bs YXkgbWVzc2FnZSBmcm9tIGxpZmVjeWNsZSBjYWxsYmFja3MKZnVuY3Rpb24gc29vX3BhZ2Vf bnVtYmVyc19saWZlY3ljbGUgKCRldmVudCwgJHN0ZXApCnsKICAgIGlmIChzdWJzdHIoJGV2 ZW50LCBzdHJsZW4oJ3BsdWdpbl9saWZlY3ljbGUuJykpID09PSAnc29vX3BhZ2VfbnVtYmVy cycgJiYgJHN0ZXAgPT09ICdkZWxldGVkJykgewogICAgICAgIHNhZmVfZGVsZXRlKCd0eHBf bGFuZycsICJldmVudCA9ICdzb29fcGFnZV9udW1iZXJzJyIpOwogICAgfQp9CgovLyBsb2Fk IHRoZSBUZXh0cGFjawppZiAoQHR4cGludGVyZmFjZSA9PSAncHVibGljJykgewogICAgaWYg KCRzb29fcGFnZV9udW1iZXJzX3RleHRwYWNrID0gbG9hZF9sYW5nX2V2ZW50KCdzb29fcGFn ZV9udW1iZXJzJykpIHsKICAgICAgICBnbG9iYWwgJHRleHRhcnJheTsKICAgICAgICAkdGV4 dGFycmF5ICs9ICRzb29fcGFnZV9udW1iZXJzX3RleHRwYWNrOwogICAgICAgIHVuc2V0KCRz b29fcGFnZV9udW1iZXJzX3RleHRwYWNrKTsKICAgIH0KfQoKZnVuY3Rpb24gc29vX3BhZ2Vf bGlua3MgKCRhdHRzKQp7CiAgICBleHRyYWN0KGxBdHRzKGFycmF5KAogICAgICAgICdwbGFj ZWhvbGRlcicgICA9PiAgJyZoZWxsaXA7JywKICAgICAgICAnd2luZG93X3NpemUnICAgPT4g IDUsCiAgICAgICAgJ2FjdGl2ZV9jbGFzcycgID0+ICAnaGVyZScsCiAgICAgICAgJ3dyYXB0 YWcnICAgICAgID0+ICAnJywKICAgICAgICAnY2xhc3MnICAgICAgICAgPT4gICcnLAogICAg ICAgICdodG1sX2lkJyAgICAgICA9PiAgJycsCiAgICAgICAgJ2JyZWFrJyAgICAgICAgID0+ ICAnJywKICAgICAgICAnc2hvd2Fsd2F5cycgICAgPT4gIGZhbHNlLAogICAgKSwgJGF0dHMp KTsKCiAgICBnbG9iYWwgJHRoaXNwYWdlOwoKICAgIGlmICghIGlzX2FycmF5KCR0aGlzcGFn ZSkpIHsKICAgICAgICByZXR1cm4gX3Nvb19wYWdlX251bWJlcnNfc2Vjb25kcGFzcyhfX0ZV TkNUSU9OX18sICRhdHRzKTsKICAgIH0KCiAgICBpZiAoISAkc2hvd2Fsd2F5cyBhbmQgJHRo aXNwYWdlWydudW1QYWdlcyddIDw9IDEpIHJldHVybjsKCiAgICAkbnVtUGFnZXMgPSAkdGhp c3BhZ2VbJ251bVBhZ2VzJ107CiAgICAkcGcgPSAkdGhpc3BhZ2VbJ3BnJ107CgogICAgJHdf c3RhcnQgPSBtYXgoMSwKICAgICAgICBtaW4oJHBnIC0gZmxvb3IoJHdpbmRvd19zaXplIC8g MiksICRudW1QYWdlcyAtICR3aW5kb3dfc2l6ZSArIDEpKTsKICAgICR3X2VuZCA9IG1pbigk d19zdGFydCArICR3aW5kb3dfc2l6ZSAtIDEsICRudW1QYWdlcyk7CgogICAgJHBncyA9IGFy cmF5X3VuaXF1ZShhcnJheV9tZXJnZSgKICAgICAgICBhcnJheSgxKSwgcmFuZ2UoJHdfc3Rh cnQsICR3X2VuZCksIGFycmF5KCRudW1QYWdlcykKICAgICkpOwoKICAgICRicmVha190ZXh0 ID0gJHdyYXB0YWcgPyAnJyA6ICRicmVhazsKICAgICR0ZXh0X3RhZyA9ICggJGJyZWFrIGFu ZCAkd3JhcHRhZyApID8gJycgOiAnc3Bhbic7CiAgICAkYWN0aXZlX2NsYXNzID0gJGFjdGl2 ZV9jbGFzcyA/ICIgY2xhc3M9XCIkYWN0aXZlX2NsYXNzXCIiIDogJyc7CgogICAgd2hpbGUg KCRwZ3MpIHsKICAgICAgICAkbiA9IGFycmF5X3NoaWZ0KCRwZ3MpOwogICAgICAgICRmaWxs ID0gJHBncyA/ICggJHBnc1swXSA+ICRuICsgMSA/ICRwbGFjZWhvbGRlciA6ICRicmVha190 ZXh0ICkgOiAnJzsKICAgICAgICBpZiAoICRuID09ICRwZyApIHsKICAgICAgICAgICAgJGl0 ZW1zW10gPSAkdGV4dF90YWcgPyB0YWcoJG4sICR0ZXh0X3RhZywgJGFjdGl2ZV9jbGFzcykg OiAkbjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdXJpID0gX3Nvb19wYWdlX251 bWJlcnNfdXJpKCRuKTsKICAgICAgICAgICAgJGl0ZW1zW10gPSBocmVmKCRuLCAkdXJpLCAn IHRpdGxlPSInLmdUeHQoJ3BhZ2UnKS5zcC4kbi4nIicpOwogICAgICAgIH0KICAgICAgICBp ZiAoJG4gPCAkbnVtUGFnZXMgYW5kICRmaWxsKSB7CiAgICAgICAgICAgICRpdGVtc1tdID0g JHRleHRfdGFnID8gdGFnKCRmaWxsLCAkdGV4dF90YWcpIDogJGZpbGw7CiAgICAgICAgfQog ICAgfQogICAgaWYgKGlzc2V0KCRpdGVtcykpIHsKICAgICAgICByZXR1cm4gJHdyYXB0YWcg PyBzdHJfcmVwbGFjZSgiPCRicmVhaz4kcGc8IiwKICAgICAgICAgICAgIjwkYnJlYWskYWN0 aXZlX2NsYXNzPiRwZzwiLAogICAgICAgICAgICBkb1dyYXAoJGl0ZW1zLCAkd3JhcHRhZywg JGJyZWFrLCAkY2xhc3MsICcnLCAnJywgJycsICRodG1sX2lkKSkKICAgICAgICAgICAgOiBp bXBsb2RlKCRicmVha190ZXh0ID8gJycgOiBuLCAkaXRlbXMpOwogICAgfQp9CgpmdW5jdGlv biBzb29fcGFnZV9jb3VudCAoJGF0dHMpCnsKICAgIGV4dHJhY3QobEF0dHMoYXJyYXkoCiAg ICAgICAgJ2Zvcm1hdCcgICAgICAgID0+ICBnVHh0KCdzb29fcGFnZV9jb3VudCcpLAogICAg ICAgICdwcmV2JyAgICAgICAgICA9PiAgJyZsYXF1bzsnLAogICAgICAgICduZXh0JyAgICAg ICAgICA9PiAgJyZyYXF1bzsnLAogICAgICAgICdmaXJzdCcgICAgICAgICA9PiAgJ3wmbGFx dW87JywKICAgICAgICAnbGFzdCcgICAgICAgICAgPT4gICcmcmFxdW87fCcsCiAgICAgICAg J3Nob3dhbHdheXMnICAgID0+ICBmYWxzZSwKICAgICAgICAnd3JhcHRhZycgICAgICAgPT4g ICcnLAogICAgKSwgJGF0dHMpKTsKCiAgICBnbG9iYWwgJHRoaXNwYWdlOwoKICAgIGlmICgh IGlzX2FycmF5KCR0aGlzcGFnZSkpIHsKICAgICAgICByZXR1cm4gX3Nvb19wYWdlX251bWJl cnNfc2Vjb25kcGFzcyhfX0ZVTkNUSU9OX18sICRhdHRzKTsKICAgIH0KCiAgICBpZiAoISAk c2hvd2Fsd2F5cyAmJiAkdGhpc3BhZ2VbJ251bVBhZ2VzJ10gPD0gMSkgcmV0dXJuOwoKICAg ICRudW1QYWdlcyA9ICR0aGlzcGFnZVsnbnVtUGFnZXMnXTsKICAgICRwZyA9ICR0aGlzcGFn ZVsncGcnXTsKCiAgICBpZiAoJHBnID4gMSkgewogICAgICAgICRmaXJzdCA9IGhyZWYoJGZp cnN0LCBfc29vX3BhZ2VfbnVtYmVyc191cmkoMSksICcgdGl0bGU9IicuZ1R4dCgncGFnZScp LicgMSInKTsKICAgICAgICAkcHJldiA9IGhyZWYoJHByZXYsIF9zb29fcGFnZV9udW1iZXJz X3VyaSgkcGcgLSAxKSwgJyB0aXRsZT0iJy5nVHh0KCdwcmV2JykuJyInICk7CiAgICB9IGVs c2VpZiAoISAkc2hvd2Fsd2F5cykgJGZpcnN0ID0gJHByZXYgPSAnJzsKCiAgICBpZiAoICRw ZyA8ICRudW1QYWdlcyApIHsKICAgICAgICAkbGFzdCA9IGhyZWYoJGxhc3QsIF9zb29fcGFn ZV9udW1iZXJzX3VyaSgkbnVtUGFnZXMpLCAnIHRpdGxlPSInLmdUeHQoJ3BhZ2UnKS5zcC4k bnVtUGFnZXMuJyInKTsKICAgICAgICAkbmV4dCA9IGhyZWYoJG5leHQsIF9zb29fcGFnZV9u dW1iZXJzX3VyaSgkcGcgKyAxKSwgJyB0aXRsZT0iJy5nVHh0KCduZXh0JykuJyInICk7CiAg ICB9CiAgICBlbHNlaWYgKCEgJHNob3dhbHdheXMpICRsYXN0ID0gJG5leHQgPSAnJzsKCiAg ICAkb3V0ID0gc3RyX3JlcGxhY2UoCiAgICAgICAgYXJyYXkoJ3twcmV2fScsICd7bmV4dH0n LCAne2ZpcnN0fScsICd7bGFzdH0nLCAne2N1cnJlbnR9JywgJ3t0b3RhbH0nKSwKICAgICAg ICBhcnJheSgkcHJldiwgJG5leHQsICRmaXJzdCwgJGxhc3QsICRwZywgJG51bVBhZ2VzKSwg JGZvcm1hdCk7CiAgICByZXR1cm4gJHdyYXB0YWcgPyB0YWcoJG91dCwgJHdyYXB0YWcpIDog JG91dDsKfQoKZnVuY3Rpb24gc29vX3ByZXZfcGFnZSAoJGF0dHMpCnsKICAgIGlmIChpc3Nl dCgkYXR0c1sndGV4dCddKSkgewogICAgICAgICRhdHRzWydwcmV2J10gPSAkYXR0c1sndGV4 dCddOwogICAgICAgIHVuc2V0KCRhdHRzWyd0ZXh0J10pOwogICAgfQogICAgJGF0dHNbJ2Zv cm1hdCddID0gJ3twcmV2fSc7CiAgICByZXR1cm4gc29vX3BhZ2VfY291bnQoJGF0dHMpOwp9 CgpmdW5jdGlvbiBzb29fbmV4dF9wYWdlICgkYXR0cykKewogICAgaWYgKGlzc2V0KCRhdHRz Wyd0ZXh0J10pKSB7CiAgICAgICAgJGF0dHNbJ25leHQnXSA9ICRhdHRzWyd0ZXh0J107CiAg ICAgICAgdW5zZXQoJGF0dHNbJ3RleHQnXSk7CiAgICB9CiAgICAkYXR0c1snZm9ybWF0J10g PSAne25leHR9JzsKICAgIHJldHVybiBzb29fcGFnZV9jb3VudCgkYXR0cyk7Cn0KCmZ1bmN0 aW9uIF9zb29fcGFnZV9udW1iZXJzX3NlY29uZHBhc3MgKCRmdW5jLCAkYXR0cykKewovLyBp biBjYXNlICRmdW5jJ3MgYXNzb2NpYXRlZCB0YWcgY29tZXMgYmVmb3JlIGFuIGFydGljbGUg dGFnLAovLyB0aGlzIHJ1bnMgdGhlIHRhZyBhZ2FpbiBkdXJpbmcgdGV4dHBhdHRlcm4oKSdz IHNlY29uZCBwYXJzZSgpIHBhc3MKICAgIGdsb2JhbCAkcHJldGV4dDsKICAgIGlmICgkcHJl dGV4dFsnc2Vjb25kcGFzcyddKSByZXR1cm47IC8vIHlvdSBvbmx5IGxpdmUgdHdpY2UKICAg IGZvcmVhY2ggKCRhdHRzIGFzICRrID0+ICR2KQogICAgICAgICRhW10gPSAkayAuICc9Iicg LiAkdiAuICciICc7CiAgICByZXR1cm4gIjx0eHA6JGZ1bmMgIi4oaXNzZXQoJGEpID8gaW1w bG9kZSgnJywgJGEpIDogJycgKS4nLz4nOwp9CgpmdW5jdGlvbiBfc29vX3BhZ2VfbnVtYmVy c191cmkoJHBnKQp7CiAgICBzdGF0aWMgJGJhc2VVcmksICRxUGFyYW1zOwoKICAgIGlmIChl bXB0eSgkYmFzZVVyaSkpIHsKICAgICAgICAkYmFzZVVyaSA9IHByZWdfcmVwbGFjZSAoJyUo LispXD8uKyUnLCAnJDEnLCAkX1NFUlZFUlsnUkVRVUVTVF9VUkknXSk7CiAgICAgICAgJHFQ YXJhbXMgPSBhcnJheSgpOwogICAgICAgIHBhcnNlX3N0cigkX1NFUlZFUlsnUVVFUllfU1RS SU5HJ10sICRxUGFyYW1zKTsKICAgICAgICB1bnNldCgkcVBhcmFtc1sncCddKTsKICAgIH0K CiAgICBpZiAoJHBnID4gMSkgewogICAgICAgICRxUGFyYW1zWydwZyddID0gJHBnOwogICAg fSBlbHNlIHsKICAgICAgICB1bnNldCgkcVBhcmFtc1sncGcnXSk7CiAgICB9CiAgICBpZiAo ZW1wdHkoJHFQYXJhbXMpKSB7CiAgICAgICAgcmV0dXJuICRiYXNlVXJpOwogICAgfQogICAg cmV0dXJuICRiYXNlVXJpLic/Jy5odHRwX2J1aWxkX3F1ZXJ5KCRxUGFyYW1zLCAnJywgJyZh bXA7Jyk7Cn0KIjtzOjQ6InR5cGUiO3M6MToiMSI7czo1OiJmbGFncyI7czoxOiIyIjtzOjU6 Im9yZGVyIjtzOjE6IjUiO3M6MzoibWQ1IjtzOjMyOiJjOGEzYmIxM2E0ODQ1ODRmNzAyM2I2 ZGMxNWE0MDAxNiI7fQ==