# adi_contact v0.2 # Form field validation & spam prevention # Adi Gilbert # http://www.greatoceanmedia.com.au/ # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YToxMDp7czo0OiJuYW1lIjtzOjExOiJhZGlfY29udGFjdCI7czo3OiJ2ZXJzaW9uIjtzOjM6 IjAuMiI7czo2OiJhdXRob3IiO3M6MTE6IkFkaSBHaWxiZXJ0IjtzOjEwOiJhdXRob3JfdXJp IjtzOjM0OiJodHRwOi8vd3d3LmdyZWF0b2NlYW5tZWRpYS5jb20uYXUvIjtzOjExOiJkZXNj cmlwdGlvbiI7czozOToiRm9ybSBmaWVsZCB2YWxpZGF0aW9uICYgc3BhbSBwcmV2ZW50aW9u IjtzOjQ6InR5cGUiO2k6MDtzOjQ6ImhlbHAiO3M6MTM2NzU6Igk8aDE+PHN0cm9uZz5hZGlf Y29udGFjdDwvc3Ryb25nPiAmIzgyMTE7IEZvcm0gZmllbGQgdmFsaWRhdGlvbiAmYW1wOyBz cGFtIHByZXZlbnRpb248L2gxPgoKCTxwPlRoaXMgcGx1Z2luIGlzIHVzZWQgaW4gY29uanVu Y3Rpb24gd2l0aCA8YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0 b3BpYy5waHA/aWQ9MjM3MjgiPnplbV9jb250YWN0X3JlYm9ybjwvYT4gdG8gcHJvdmlkZSB0 aGUgZm9sbG93aW5nIGZ1bmN0aW9uYWxpdHk6PC9wPgoKCTx1bD4KCQk8bGk+c3VibWl0dGVk IGZpZWxkIGNvbWJpbmF0aW9uIGNoZWNrPC9saT4KCQk8bGk+c3VibWl0dGVkIGZpZWxkIGNv bnRlbnQgdmFsaWRhdGlvbjwvbGk+CgkJPGxpPmFudGktc3BhbSBtZWFzdXJlczwvbGk+Cgk8 L3VsPgoKCTxwPk9uY2UgaW5zdGFsbGVkLCBhIGNvbGxlY3Rpb24gb2YgbmV3IHRhZ3MgYXJl IGF2YWlsYWJsZTo8L3A+CgoJPHVsPgoJCTxsaT48YSBocmVmPSIjYWRpX2NvbnRhY3RfY29t Ym8iPmFkaV9jb250YWN0X2NvbWJvPC9hPiAmIzgyMTE7IGRlZmluZSB2YWxpZCBjb21iaW5h dGlvbnMgb2Ygc3VibWl0dGVkIGZvcm0gZmllbGRzPC9saT4KCQk8bGk+PGEgaHJlZj0iI2Fk aV9jb250YWN0X3ZhbGlkYXRlIj5hZGlfY29udGFjdF92YWxpZGF0ZTwvYT4gJiM4MjExOyB2 YWxpZGF0ZSB0aGUgY29udGVudCBvZiBzdWJtaXR0ZWQgZm9ybSBmaWVsZHM8L2xpPgoJCTxs aT48YSBocmVmPSIjYWRpX2NvbnRhY3Rfc3BhbSI+YWRpX2NvbnRhY3Rfc3BhbTwvYT4gJiM4 MjExOyBibG9jayBzcGFtIGluIHN1Ym1pdHRlZCBmb3JtIGZpZWxkczwvbGk+CgkJPGxpPjxh IGhyZWY9IiNhZGlfY29udGFjdF9sYWJlbHMiPmFkaV9jb250YWN0X2xhYmVsczwvYT4gJiM4 MjExOyBzcGVjaWZ5IGxhYmVscyB0byBiZSB1c2VkIGluIGVycm9yIG1lc3NhZ2VzPC9saT4K CTwvdWw+CgoJPHA+VXNlIHRoZSBhYm92ZSB0YWdzIHdpdGhpbiBhIDxjb2RlPiZsdDt0eHA6 emVtX2NvbnRhY3QmZ3Q7IC4uLiAmbHQ7L3R4cDp6ZW1fY29udGFjdCZndDs8L2NvZGU+IGNv bnRhaW5lci4gQSA8YSBocmVmPSIjYWRpX2NvbnRhY3RfZXhhbXBsZSI+ZnVsbCBleGFtcGxl PC9hPiBvZiB1c2FnZSBpcyBwcm92aWRlZCBhdCB0aGUgZW5kLjwvcD4KCjxociAvPgoKCTxo MiBpZD0iYWRpX2NvbnRhY3RfY29tYm8iPjxzdHJvbmc+Rm9ybSBmaWVsZCBjb21iaW5hdGlv bnMgKGFkaV9jb250YWN0X2NvbWJvKTwvc3Ryb25nPjwvaDI+CgoJPHA+U29tZXRpbWVzIGNl cnRhaW4gY29tYmluYXRpb25zIG9mIGZvcm0gZmllbGRzIGFyZSByZXF1aXJlZCBmcm9tIHVz ZXJzLCBmb3IgZXhhbXBsZTo8L3A+CgoJPHVsPgoJCTxsaT5maWxsIGluIGF0IGxlYXN0IG9u ZSBvZiAmIzgyMjA7TGlrZXMmIzgyMjE7LCAmIzgyMjA7RGlzbGlrZXMmIzgyMjE7LCAmIzgy MjA7T3RoZXIgY29tbWVudHMmIzgyMjE7PC9saT4KCQk8bGk+aWYgJiM4MjIwO1Bob25lIG51 bWJlciYjODIyMTsgaXMgZmlsbGVkIGluIHRoZW4gJiM4MjIwO0Jlc3QgdGltZSB0byBjYWxs JiM4MjIxOyBpcyBhbHNvIHJlcXVpcmVkPC9saT4KCTwvdWw+CgoJPHA+Rm9yIGV4YW1wbGUg dG8gbWFrZSBzdXJlIHRoZSB1c2VyIGZpbGxzIGluIGF0IGxlYXN0IG9uZSBmaWVsZCBpbiBh IHNwZWNpZmllZCBsaXN0OjwvcD4KCjxwcmU+PGNvZGU+Jmx0O3R4cDp6ZW1fY29udGFjdCZn dDsKICAuLi4KICAmbHQ7dHhwOnplbV9jb250YWN0X3RleHRhcmVhIG5hbWU9JnF1b3Q7bGlr ZXMmcXVvdDsgbGFiZWw9JnF1b3Q7TGlrZXMmcXVvdDsgcmVxdWlyZWQ9JnF1b3Q7MCZxdW90 OyAvJmd0OwogICZsdDt0eHA6emVtX2NvbnRhY3RfdGV4dGFyZWEgbmFtZT0mcXVvdDtkaXNs aWtlcyZxdW90OyBsYWJlbD0mcXVvdDtEaXNsaWtlcyZxdW90OyByZXF1aXJlZD0mcXVvdDsw JnF1b3Q7IC8mZ3Q7CiAgJmx0O3R4cDp6ZW1fY29udGFjdF90ZXh0YXJlYSBuYW1lPSZxdW90 O2NvbW1lbnRzJnF1b3Q7IGxhYmVsPSZxdW90O090aGVyIGNvbW1lbnRzJnF1b3Q7IHJlcXVp cmVkPSZxdW90OzAmcXVvdDsgLyZndDsKICAmbHQ7dHhwOmFkaV9jb250YWN0X2NvbWJvIG5h bWVzPSZxdW90O2xpa2VzLGRpc2xpa2VzLGNvbW1lbnRzJnF1b3Q7CiAgICByZXN0cmljdD0m cXVvdDttaW4mcXVvdDsgbnVtYmVyPSZxdW90OzEmcXVvdDsgLyZndDsKJmx0Oy90eHA6emVt X2NvbnRhY3QmZ3Q7CjwvY29kZT48L3ByZT4KCgk8cD5PciBpZiBhbiBleHRyYSBmaWVsZCBo YXMgdG8gYmUgZmlsbGVkIGluOjwvcD4KCjxwcmU+PGNvZGU+Jmx0O3R4cDp6ZW1fY29udGFj dCZndDsKICAuLi4KICAmbHQ7dHhwOnplbV9jb250YWN0X3RleHQgbmFtZT0mcXVvdDtwaG9u ZSZxdW90OyBsYWJlbD0mcXVvdDtZb3VyIHBob25lIG51bWJlciZxdW90OwogICAgcmVxdWly ZWQ9JnF1b3Q7MCZxdW90OyAvJmd0OwogICZsdDt0eHA6emVtX2NvbnRhY3RfdGV4dCBuYW1l PSZxdW90O3doZW4mcXVvdDsgbGFiZWw9JnF1b3Q7V2hlbiBzaG91bGQgd2UgY2FsbCB5b3U/ JnF1b3Q7CiAgICByZXF1aXJlZD0mcXVvdDswJnF1b3Q7IC8mZ3Q7CiAgJmx0O3R4cDphZGlf Y29udGFjdF9jb21ibyBuYW1lcz0mcXVvdDtwaG9uZSZxdW90OyByZXF1aXJlPSZxdW90O3do ZW4mcXVvdDsgLyZndDsKJmx0Oy90eHA6emVtX2NvbnRhY3QmZ3Q7CjwvY29kZT48L3ByZT4K Cgk8cD5Zb3UgY2FuIGFsc28gZ2VuZXJhdGUgY3VzdG9tIGVycm9yIG1lc3NhZ2VzIGJ5IHVz aW5nIDxjb2RlPnJlcXVpcmVkPSZxdW90OzAmcXVvdDs8L2NvZGU+IGluIHRoZSBzdGFuZGFy ZCA8c3BhbiBjbGFzcz0iY2FwcyI+WkNSPC9zcGFuPiB0YWdzIGFuZCA8Y29kZT5yZXF1aXJl ZD0mcXVvdDsxJnF1b3Q7PC9jb2RlPiBpbiA8c3Ryb25nPmFkaV9jb250YWN0X2NvbWJvPC9z dHJvbmc+LiAgRm9yIGV4YW1wbGU6PC9wPgoKPHByZT48Y29kZT4mbHQ7dHhwOnplbV9jb250 YWN0Jmd0OwogIC4uLgogICZsdDt0eHA6emVtX2NvbnRhY3RfdGV4dCBuYW1lPSZxdW90O25h bWUmcXVvdDsgbGFiZWw9JnF1b3Q7TmFtZSZxdW90OyByZXF1aXJlZD0mcXVvdDswJnF1b3Q7 IC8mZ3Q7CiAgJmx0O3R4cDphZGlfY29udGFjdF9jb21ibyBuYW1lcz0mcXVvdDtuYW1lJnF1 b3Q7IHJlcXVpcmVkPSZxdW90OzEmcXVvdDsgbWVzc2FnZT0mcXVvdDtEb24mIzM5O3QgYmUg c2h5ISZxdW90Oy8mZ3Q7CiZsdDsvdHhwOnplbV9jb250YWN0Jmd0Owo8L2NvZGU+PC9wcmU+ CgoJPHA+Tm8gcmVhbCBtYWdpYyBoZXJlICYjODIxMTsgPGNvZGU+cmVxdWlyZWQ9JnF1b3Q7 MSZxdW90OzwvY29kZT4gaXMgYWN0dWFsbHkgdGhlIGVxdWl2YWxlbnQgb2YgPGNvZGU+cmVz dHJpY3Q9JnF1b3Q7ZXF1YWwmcXVvdDsgbnVtYmVyPSZxdW90OzEmcXVvdDs8L2NvZGU+Ljwv cD4KCgk8aDM+PHN0cm9uZz5hZGlfY29udGFjdF9jb21ibzwvc3Ryb25nPiAmIzgyMTE7IGF0 dHJpYnV0ZXM8L2gzPgoKCTxwPjxjb2RlPm5hbWVzPSZxdW90O25hbWUgbGlzdCZxdW90Ozwv Y29kZT48L3A+CgoJPHA+LSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBmaWVsZCBuYW1lcyB0 aGF0IGFyZSBvZiBpbnRlcmVzdC4gRGVmYXVsdCA9ICYjODIyMDsmIzgyMjE7IChub25lKS48 L3A+CgoJPHA+PGNvZGU+cmVzdHJpY3Q9JnF1b3Q7cmVzdHJpY3Rpb24mcXVvdDs8L2NvZGU+ PC9wPgoKCTxwPi0gZGVmaW5lcyBhIG1pbmltdW0gKDxjb2RlPm1pbjwvY29kZT4pLCBhIG1h eGltdW0gKDxjb2RlPm1heDwvY29kZT4pLCBvciBhbiBleGFjdCBudW1iZXIgKDxjb2RlPmVx dWFsPC9jb2RlPiksPC9wPgoKCTxwPjxjb2RlPm51bWJlcj0mcXVvdDtpbnRlZ2VyJnF1b3Q7 PC9jb2RlPjwvcD4KCgk8cD4tIG51bWJlciBvZiBmaWVsZHMsIHVzZWQgaW4gY29uanVuY3Rp b24gd2l0aCA8Y29kZT5yZXN0cmljdDwvY29kZT4uPC9wPgoKCTxwPjxjb2RlPnJlcXVpcmU9 JnF1b3Q7bmFtZSBsaXN0JnF1b3Q7PC9jb2RlPjwvcD4KCgk8cD4tIGNvbW1hIHNlcGFyYXRl ZCBsaXN0IG9mIGZpZWxkIG5hbWVzIHRoYXQgYXJlIHJlcXVpcmVkLCBkZXBlbmRpbmcgb24g dGhlIHByZXNlbmNlIG9mIGZpZWxkcyBpbiA8Y29kZT5uYW1lczwvY29kZT4gbGlzdC48L3A+ CgoJPHA+PGNvZGU+cmVxdWlyZWQ9JnF1b3Q7Ym9vbGVhbjwvY29kZT4mIzgyMjE7PC9wPgoK CTxwPi0gdGhlIHNwZWNpZmllZCBmaWVsZCBpcyByZXF1aXJlZCAodXNlZnVsIGZvciBjcmVh dGluZyBjdXN0b20gZXJyb3IgbWVzc2FnZXMpLiAgRGVmYXVsdCA9ICYjODIyMDswJiM4MjIx OyAobm90IHJlcXVpcmVkKS48L3A+CgoJPHA+PGNvZGU+Y2hlY2tib3g9JnF1b3Q7Ym9vbGVh bjwvY29kZT4mIzgyMjE7PC9wPgoKCTxwPi0gdGhlIHNwZWNpZmllZCBmaWVsZHMgYXJlIGNo ZWNrYm94ZXMsIHNvIHRlc3QgZm9yIFllcy9Oby4gIERlZmF1bHQgPSAmIzgyMjA7MCYjODIy MTsgKG5vdCBjaGVja2JveGVzKS48L3A+CgoJPHA+PGNvZGU+bWVzc2FnZT0mcXVvdDt0ZXh0 JnF1b3Q7PC9jb2RlPjwvcD4KCgk8cD4tIGFsdGVybmF0aXZlIGVycm9yIG1lc3NhZ2UgKHNl ZSBiZWxvdyBmb3IgbGlzdCBvZiBwbGFjZWhvbGRlcnMpLjwvcD4KCjxociAvPgoKCTxoMiBp ZD0iYWRpX2NvbnRhY3RfdmFsaWRhdGUiPjxzdHJvbmc+Rm9ybSBmaWVsZCB2YWxpZGF0aW9u IChhZGlfY29udGFjdF92YWxpZGF0ZSk8L3N0cm9uZz48L2gyPgoKCTxwPlRoaXMgZW5hYmxl cyB0aGUgY29udGVudHMgb2YgZmllbGRzIHRvIGJlIHZhbGlkYXRlZCwgZm9yIGV4YW1wbGUg dG8gY2hlY2sgdGhhdCBhIHBob25lIG51bWJlciBmaWVsZCBoYXMgYmVlbiBmaWxsZWQgaW4g cHJvcGVybHk6PC9wPgoKPHByZT48Y29kZT4mbHQ7dHhwOmFkaV9jb250YWN0X3ZhbGlkYXRl IG5hbWVzPSZxdW90O2hvbWVfcGhvbmUmcXVvdDsgdHlwZT0mcXVvdDtwaG9uZSZxdW90OyAv Jmd0Owo8L2NvZGU+PC9wcmU+CgoJPGgzPjxzdHJvbmc+YWRpX2NvbnRhY3RfdmFsaWRhdGU8 L3N0cm9uZz4gJiM4MjExOyBhdHRyaWJ1dGVzPC9oMz4KCgk8cD48Y29kZT5uYW1lcz0mcXVv dDtuYW1lIGxpc3QmcXVvdDs8L2NvZGU+PC9wPgoKCTxwPi0gY29tbWEgc2VwYXJhdGVkIGxp c3Qgb2YgZmllbGQgbmFtZXMgdGhhdCBzaG91bGQgYmUgdmFsaWRhdGVkLiBEZWZhdWx0ID0g JiM4MjIwOyYjODIyMTsgKG5vbmUpLjwvcD4KCgk8cD48Y29kZT50eXBlPSZxdW90O3ZhbGlk YXRpb24mcXVvdDs8L2NvZGU+PC9wPgoKCTxwPi0gdGhlIHR5cGUgb2YgdmFsaWRhdGlvbiB0 aGF0IGlzIHJlcXVpcmVkOjwvcD4KCgk8dWw+CgkJPGxpPjxjb2RlPmFscGhhPC9jb2RlPiAm IzgyMTE7IGFscGhhYmV0aWMgY2hhcmFjdGVyczwvbGk+CgkJPGxpPjxjb2RlPmFscGhhbnVt PC9jb2RlPiAmIzgyMTE7IGFscGhhLW51bWVyaWMgY2hhcmFjdGVyczwvbGk+CgkJPGxpPjxj b2RlPmludGVnZXI8L2NvZGU+ICYjODIxMTsgZGlnaXRzIG9ubHk8L2xpPgoJCTxsaT48Y29k ZT5udW1lcmljPC9jb2RlPiAmIzgyMTE7IGEgbnVtYmVyIChlLmcuICswMTIzLjQ1ZTYgaXMg YSBudW1iZXIpPC9saT4KCQk8bGk+PGNvZGU+cGhvbmU8L2NvZGU+ICYjODIxMTsgcGhvbmUg bnVtYmVyIChpLmUuIDAtOSArICYjODIxMTsgLiAsICgpIHhYIHNwYWNlKTwvbGk+CgkJPGxp Pjxjb2RlPnVybDwvY29kZT4gJiM4MjExOyBhIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3Nw YW4+ICh3aXRoIG9yIHdpdGhvdXQgJiM4MjIwO2h0dHA6Ly8mIzgyMjE7KTwvbGk+CgkJPGxp Pjxjb2RlPmN1c3RvbTwvY29kZT4gJiM4MjExOyB1c2UgaW4gY29uanVuY3Rpb24gd2l0aCA8 Y29kZT5wYXR0ZXJuPC9jb2RlPjwvbGk+Cgk8L3VsPgoKCTxwPjxjb2RlPmFsbG93X3doaXRl c3BhY2U9JnF1b3Q7Ym9vbGVhbiZxdW90OzwvY29kZT48L3A+CgoJPHA+LSBhbGxvdyB3aGl0 ZXNwYWNlIChpLmUuIHNwYWNlLCB0YWIsIG5ld2xpbmVzIGV0YykgaW4gYWRkaXRpb24gdG8g dGhhdCBzcGVjaWZpZWQgaW4gPGNvZGU+dHlwZTwvY29kZT4uIERlZmF1bHQgPSAmIzgyMjA7 MCYjODIyMTsgKE5vKS48L3A+CgoJPHA+PGNvZGU+cGF0dGVybj0mcXVvdDtwYXR0ZXJuIHN0 cmluZyZxdW90OzwvY29kZT48L3A+CgoJPHA+LSBhIHBhdHRlcm4gdGhhdCB3aWxsIGJlIGRy b3BwZWQgc3RyYWlnaHQgaW50byA8Y29kZT5wcmVnX21hdGNoPC9jb2RlPi4gIFVzZWQgaW4g Y29uanVuY3Rpb24gd2l0aCA8Y29kZT50eXBlPSZxdW90O2N1c3RvbSZxdW90OzwvY29kZT4u ICBEZWZhdWx0ID0gJiM4MjIwOyYjODIyMTsgKG5vbmUpLjwvcD4KCgk8cD48Y29kZT5tZXNz YWdlPSZxdW90O3RleHQmcXVvdDs8L2NvZGU+PC9wPgoKCTxwPi0gYWx0ZXJuYXRpdmUgZXJy b3IgbWVzc2FnZS48L3A+Cgo8aHIgLz4KCgk8aDIgaWQ9ImFkaV9jb250YWN0X3NwYW0iPjxz dHJvbmc+U3BhbSBwcmV2ZW50aW9uIChhZGlfY29udGFjdF9zcGFtKTwvc3Ryb25nPjwvaDI+ CgoJPHA+VGhpcyB3aWxsIHByZXZlbnQgZW1haWwgaGVhZGVyIGluamVjdGlvbiBhbmQgc3Rv cCBlbWFpbHMgdGhhdCBjb250YWluIGxpbmtzICh3aGljaCBpcywgYWZ0ZXIgYWxsLCB3aGF0 IHNwYW1tZXJzIHdhbnQgdG8gc2VuZCB5b3UpLjwvcD4KCgk8cD5CeSBkZWZhdWx0IDxzdHJv bmc+YWRpX2NvbnRhY3Rfc3BhbTwvc3Ryb25nPiB3aWxsIGNoZWNrIGFsbCBmaWVsZHMsIHNv IGlmIHlvdSB3YW50IHVzZXJzIHRvIHNlbmQgeW91IGxpbmtzIHRoZW4gdXNlIHRoZSA8Y29k ZT5leGNsdWRlPC9jb2RlPiBhdHRyaWJ1dGU6PC9wPgoKPHByZT48Y29kZT4mbHQ7dHhwOnpl bV9jb250YWN0Jmd0OwogIC4uLgogICZsdDt0eHA6emVtX2NvbnRhY3RfdGV4dCBuYW1lPSZx dW90O3dlYnNpdGUmcXVvdDsgbGFiZWw9JnF1b3Q7WW91ciB3ZWJzaXRlIFVSTCZxdW90OyAv Jmd0OwogICZsdDt0eHA6YWRpX2NvbnRhY3Rfc3BhbSBleGNsdWRlPSZxdW90O3dlYnNpdGUm cXVvdDsgLyZndDsKJmx0Oy90eHA6emVtX2NvbnRhY3QmZ3Q7CjwvY29kZT48L3ByZT4KCgk8 aDM+PHN0cm9uZz5hZGlfY29udGFjdF9zcGFtPC9zdHJvbmc+ICYjODIxMTsgYXR0cmlidXRl czwvaDM+CgoJPHA+PGNvZGU+bmFtZXM9JnF1b3Q7bmFtZSBsaXN0JnF1b3Q7PC9jb2RlPjwv cD4KCgk8cD4tIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGZpZWxkIG5hbWVzIHRoYXQgc2hv dWxkIGJlIGNoZWNrZWQuIERlZmF1bHQgPSAmIzgyMjA7JiM4MjIxOyAoYWxsIHN1Ym1pdHRl ZCBmaWVsZHMpLjwvcD4KCgk8cD48Y29kZT5leGNsdWRlPSZxdW90O25hbWUgbGlzdCZxdW90 OzwvY29kZT48L3A+CgoJPHA+LSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBmaWVsZCBuYW1l cyB0aGF0IHNob3VsZCA8ZW0+PHNwYW4gY2xhc3M9ImNhcHMiPk5PVDwvc3Bhbj48L2VtPiBi ZSBjaGVja2VkLiBEZWZhdWx0ID0gJiM4MjIwOyYjODIyMTsgKG5vbmUpLjwvcD4KCgk8cD48 Y29kZT5kZXRlY3RfbWFpbF9oZWFkZXJzPSZxdW90O2Jvb2xlYW4mcXVvdDs8L2NvZGU+PC9w PgoKCTxwPi0gZGV0ZWN0IHRoZSBwcmVzZW5jZSBvZiA8Y29kZT50bzo8L2NvZGU+LCA8Y29k ZT5mcm9tOjwvY29kZT4sIDxjb2RlPmJjYzo8L2NvZGU+LCA8Y29kZT5tdWx0aXBhcnQ8L2Nv ZGU+LCA8Y29kZT5jYzo8L2NvZGU+LCA8Y29kZT5Db250ZW50LVRyYW5zZmVyLUVuY29kaW5n OjwvY29kZT4sIDxjb2RlPkNvbnRlbnQtVHlwZTo8L2NvZGU+LCA8Y29kZT5NaW1lLVZlcnNp b246PC9jb2RlPiBhbmQgZmxhZyBhcyBzcGFtIGlmIGZvdW5kLiBEZWZhdWx0ID0gJiM4MjIw OzEmIzgyMjE7IChZZXMpLjwvcD4KCgk8cD48Y29kZT5kZXRlY3RfbGlua190YWdzPSZxdW90 O2Jvb2xlYW4mcXVvdDs8L2NvZGU+PC9wPgoKCTxwPi0gZGV0ZWN0IHRoZSBwcmVzZW5jZSBv ZiA8Y29kZT5bdXJsPC9jb2RlPiwgPGNvZGU+aHR0cDwvY29kZT4sIDxjb2RlPnd3dzwvY29k ZT4sIDxjb2RlPmhyZWY8L2NvZGU+IGFuZCBmbGFnIGFzIHNwYW0gaWYgZm91bmQuIERlZmF1 bHQgPSAmIzgyMjA7MSYjODIyMTsgKFllcykuPC9wPgoKCTxwPjxjb2RlPmFsbG93X3d3dz0m cXVvdDtib29sZWFuJnF1b3Q7PC9jb2RlPjwvcD4KCgk8cD4tIGFsbG93IHRoZSBwcmVzZW5j ZSBvZiA8Y29kZT53d3c8L2NvZGU+IGFuZCBkbyBub3QgZmxhZyBhcyBzcGFtLiBEZWZhdWx0 ID0gJiM4MjIwOzAmIzgyMjE7IChObykuPC9wPgoKCTxwPjxjb2RlPm1lc3NhZ2U9JnF1b3Q7 dGV4dCZxdW90OzwvY29kZT48L3A+CgoJPHA+LSBhbHRlcm5hdGl2ZSBlcnJvciBtZXNzYWdl LjwvcD4KCjxociAvPgoKCTxoMiBpZD0iYWRpX2NvbnRhY3RfbGFiZWxzIj48c3Ryb25nPkVy cm9yIG1lc3NhZ2VzLCBsYWJlbHMgYW5kIHN0eWxpbmcgKGFkaV9jb250YWN0X2xhYmVscyAm YW1wOyB0aGUgJiM4MjE2O21lc3NhZ2UmIzgyMTc7IGF0dHJpYnV0ZSk8L3N0cm9uZz48L2gy PgoKCTxoMz48c3Ryb25nPlRoZSAmIzgyMTY7bWVzc2FnZSYjODIxNzsgYXR0cmlidXRlPC9z dHJvbmc+PC9oMz4KCgk8cD5UaGUgPHN0cm9uZz5hZGlfY29udGFjdDwvc3Ryb25nPiB0YWdz IHdpbGwgZ2VuZXJhdGUgc3RhbmRhcmQgbWVzc2FnZXMgaW4gRW5nbGlzaC4gVGhlIG1lc3Nh Z2VzIGNhbiBiZSBjdXN0b21pc2VkIGJ5IHVzaW5nIHRoZSA8Y29kZT5tZXNzYWdlPSZxdW90 OyZxdW90OzwvY29kZT4gYXR0cmlidXRlOjwvcD4KCgk8dWw+CgkJPGxpPmFsdGVyIHRoZSBz dGFuZGFyZCBtZXNzYWdlPC9saT4KCQk8bGk+dHJhbnNsYXRlIHRoZSBzdGFuZGFyZCBtZXNz YWdlIGludG8gb3RoZXIgbGFuZ3VhZ2VzPC9saT4KCQk8bGk+dXNlIFtOQU1FU10gKCYjODIx NjtuYW1lcyYjODIxNzsgYXR0cmlidXRlKSwgW1JFUVVJUkVdICgmIzgyMTY7cmVxdWlyZSYj ODIxNzsgYXR0cmlidXRlKSAmYW1wOyBbTlVNQkVSXSAoJiM4MjE2O251bWJlciYjODIxNzsg YXR0cmlidXRlKSBwbGFjZWhvbGRlcnM8L2xpPgoJPC91bD4KCgk8cD5UaGUgPHN0cm9uZz5h ZGlfY29udGFjdDwvc3Ryb25nPiBlcnJvciBtZXNzYWdlcyBhcmUgcGxhY2VkIGluIHRoZSBz YW1lIGxpc3QgYXMgdGhlIHN0YW5kYXJkIDxzdHJvbmc+emVtX2NvbnRhY3Q8L3N0cm9uZz4g ZXJyb3IgbWVzc2FnZXMuPC9wPgoKCTxoMz48c3Ryb25nPmFkaV9jb250YWN0X2xhYmVsczwv c3Ryb25nPiAmIzgyMTE7IGF0dHJpYnV0ZXM8L2gzPgoKCTxwPjxjb2RlPm5hbWUxPSZxdW90 O2xhYmVsIHN0cmluZyAxJnF1b3Q7IG5hbWUyPSZxdW90O2xhYmVsIHN0cmluZyAyJnF1b3Q7 PC9jb2RlPjwvcD4KCgk8cD4tIHRoZSBsYWJlbHMgdG8gdXNlIGluIDxzdHJvbmc+YWRpX2Nv bnRhY3Q8L3N0cm9uZz4gZXJyb3IgbWVzc2FnZXMuPC9wPgoKCTxwPjxzdHJvbmc+SW1wb3J0 YW50Ojwvc3Ryb25nPiBUaGUgYWRpX2NvbnRhY3RfbGFiZWxzIHRhZyA8ZW0+PHNwYW4gY2xh c3M9ImNhcHMiPk1VU1Q8L3NwYW4+PC9lbT4gYmUgcGxhY2VkIGluIHRoZSBwYWdlL2Zvcm0g PGVtPmJlZm9yZTwvZW0+IG90aGVyIDxzdHJvbmc+YWRpX2NvbnRhY3Q8L3N0cm9uZz4gdGFn cyAmIzgyMTE7IG90aGVyd2lzZSB5b3VyIGxhYmVsIHN0cmluZ3Mgd29uJiM4MjE3O3QgYmUg cGlja2VkIHVwLjwvcD4KCgk8cD5FeGFtcGxlOjwvcD4KCjxwcmU+PGNvZGU+Jmx0O3R4cDph ZGlfY29udGFjdF9sYWJlbHMgcGhvbmU9JnF1b3Q7UGhvbmUgbnVtYmVyJnF1b3Q7IHdoZW49 JnF1b3Q7V2hlbiB0byBjYWxsJnF1b3Q7CiAgbGlrZXM9JnF1b3Q7TGlrZXMmcXVvdDsgZGlz bGlrZXM9JnF1b3Q7RGlzbGlrZXMmcXVvdDsgY29tbWVudHM9JnF1b3Q7Q29tbWVudHMmcXVv dDsgLyZndDsKPC9jb2RlPjwvcHJlPgoKCTxwPk5vdGVzOjwvcD4KCgk8dWw+CgkJPGxpPmEg bGFiZWwgc3BlY2lmaWVkIHdpdGggPHN0cm9uZz5hZGlfY29udGFjdF9sYWJlbHM8L3N0cm9u Zz4gZG9lcyBub3QgaGF2ZSB0byBtYXRjaCB0aGUgYWN0dWFsIGxhYmVsIHVzZWQgaW4gdGhl IGZvcm08L2xpPgoJCTxsaT5sYWJlbHMgc3BlY2lmaWVkIHdpdGggPHN0cm9uZz5hZGlfY29u dGFjdF9sYWJlbHM8L3N0cm9uZz4gYXJlIG9ubHkgdXNlZCBpbiA8c3Ryb25nPmFkaV9jb250 YWN0PC9zdHJvbmc+IGVycm9yIG1lc3NhZ2VzPC9saT4KCQk8bGk+dGhlIGVycm9yIG1lc3Nh Z2VzIHdpbGwgdXNlIGxhYmVscyBpbiB0aGUgZm9sbG93aW5nIG9yZGVyIG9mIHByZWZlcmVu Y2U6Cgk8dWw+CgkJPGxpPmxhYmVsIHNwZWNpZmllZCBpbiA8c3Ryb25nPmFkaV9jb250YWN0 X2xhYmVsczwvc3Ryb25nPjwvbGk+CgkJPGxpPmZvcm0gbGFiZWwgcmV0cmlldmVkIGZyb20g PHN0cm9uZz56ZW1fY29udGFjdDwvc3Ryb25nPiAoYnV0IG9ubHkgaWYgYSBmaWVsZCBoYXMg YmVlbiBmaWxsZWQgaW4gJmFtcDsgc3VibWl0dGVkKTwvbGk+CgkJPGxpPnRoZSBmaWVsZCBu YW1lICh3aXRoIGZpcnN0IGxldHRlciBpbiB1cHBlciBjYXNlKTwvbGk+Cgk8L3VsPjwvbGk+ Cgk8L3VsPgoKCTxoMz48c3Ryb25nPlN0eWxpbmc8L3N0cm9uZz48L2gzPgoKCTxwPlRoZSBz dGFuZGFyZCA8c3Ryb25nPnplbV9jb250YWN0PC9zdHJvbmc+IGNsYXNzIG9mIDxjb2RlPnpl bVJlcXVpcmVkZXJyb3JFbGVtZW50PC9jb2RlPiBpcyBhdXRvbWF0aWNhbGx5IGFkZGVkIHRv IGxhYmVsIGFuZCBpbnB1dCBlbGVtZW50cyB3aGVuIGVycm9ycyBhcmUgZm91bmQuPC9wPgoK CTxwPkFuIGV4dHJhIGNsYXNzIG9mIDxjb2RlPmFkaV9jb250YWN0X2Vycm9yPC9jb2RlPiBp cyBhbHNvIGFkZGVkIHRvIGZhY2lsaXRhdGUgYWRkaXRpb25hbCBzdHlsaW5nIG9wdGlvbnMu PC9wPgoKPGhyIC8+CgoJPGgyIGlkPSJhZGlfY29udGFjdF9leGFtcGxlIj48c3Ryb25nPlRo ZSBGdWxsIE1vbnR5IEV4YW1wbGU8L3N0cm9uZz48L2gyPgoKCTxwPlRoZSBmb2xsb3dpbmcg aXMgYW4gZXhhbXBsZSBvZiBhIHVzZXIgZmVlZGJhY2sgZm9ybTo8L3A+Cgo8cHJlPjxjb2Rl PiZsdDt0eHA6emVtX2NvbnRhY3QgdG89JiMzOTttZUBleGFtcGxlLmNvbSYjMzk7IHN1Ympl Y3Q9JiMzOTtGZWVkYmFjayBmb3JtIGV4YW1wbGUmIzM5OyZndDsKPC9jb2RlPgo8Y29kZT4g ICZsdDtwJmd0O1BsZWFzZSBmaWxsIGluIHRoZSBmb3JtOiZsdDsvcCZndDsKPC9jb2RlPgo8 Y29kZT4gICZsdDstLSB0aGUgZmVlZGJhY2sgZm9ybSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIg LS0mZ3Q7CiAgJmx0O3R4cDp6ZW1fY29udGFjdF90ZXh0IG5hbWU9JnF1b3Q7bmFtZSZxdW90 OyBsYWJlbD0mcXVvdDtOYW1lJnF1b3Q7IC8mZ3Q7CiAgJmx0O3R4cDp6ZW1fY29udGFjdF9l bWFpbCBuYW1lPSZxdW90O2VtYWlsJnF1b3Q7IC8mZ3Q7CiAgJmx0O3R4cDp6ZW1fY29udGFj dF90ZXh0IG5hbWU9JnF1b3Q7cGhvbmUmcXVvdDsgbGFiZWw9JnF1b3Q7WW91ciBwaG9uZSBu dW1iZXImcXVvdDsgcmVxdWlyZWQ9JnF1b3Q7MCZxdW90OyAvJmd0OwogICZsdDt0eHA6emVt X2NvbnRhY3RfdGV4dCBuYW1lPSZxdW90O3doZW4mcXVvdDsgbGFiZWw9JnF1b3Q7V2hlbiBz aG91bGQgd2UgY2FsbCB5b3U/JnF1b3Q7IHJlcXVpcmVkPSZxdW90OzAmcXVvdDsgLyZndDsK ICAmbHQ7dHhwOnplbV9jb250YWN0X3RleHRhcmVhIG5hbWU9JnF1b3Q7bGlrZXMmcXVvdDsg bGFiZWw9JnF1b3Q7TGlrZXMmcXVvdDsgcmVxdWlyZWQ9JnF1b3Q7MCZxdW90OyAvJmd0Owog ICZsdDt0eHA6emVtX2NvbnRhY3RfdGV4dGFyZWEgbmFtZT0mcXVvdDtkaXNsaWtlcyZxdW90 OyBsYWJlbD0mcXVvdDtEaXNsaWtlcyZxdW90OyByZXF1aXJlZD0mcXVvdDswJnF1b3Q7IC8m Z3Q7CiAgJmx0O3R4cDp6ZW1fY29udGFjdF90ZXh0YXJlYSBuYW1lPSZxdW90O2NvbW1lbnRz JnF1b3Q7IGxhYmVsPSZxdW90O090aGVyIGNvbW1lbnRzJnF1b3Q7IHJlcXVpcmVkPSZxdW90 OzAmcXVvdDsgLyZndDsKICAmbHQ7dHhwOnplbV9jb250YWN0X3N1Ym1pdCBsYWJlbD0mcXVv dDtTZW5kIGZlZWRiYWNrJnF1b3Q7IC8mZ3Q7CjwvY29kZT4KPGNvZGU+ICAmbHQ7LS0gc3Bl Y2lmeSBsYWJlbHMgdG8gYmUgdXNlZCBpbiBlcnJvciBtZXNzYWdlcyAtLSZndDsKICAmbHQ7 dHhwOmFkaV9jb250YWN0X2xhYmVscyBwaG9uZT0mcXVvdDtQaG9uZSBudW1iZXImcXVvdDsg d2hlbj0mcXVvdDtXaGVuIHRvIGNhbGwmcXVvdDsgY29tbWVudHM9JnF1b3Q7Q29tbWVudHMm cXVvdDsgLyZndDsKPC9jb2RlPgo8Y29kZT4gICZsdDstLSBhdCBsZWFzdCBvbmUgb2YgJnF1 b3Q7bGlrZXMsZGlzbGlrZXMsY29tbWVudHMmcXVvdDsgcmVxdWlyZWQgLS0mZ3Q7CiAgJmx0 O3R4cDphZGlfY29udGFjdF9jb21ibyBuYW1lcz0mcXVvdDtsaWtlcyxkaXNsaWtlcyxjb21t ZW50cyZxdW90OyByZXN0cmljdD0mcXVvdDttaW4mcXVvdDsgbnVtYmVyPSZxdW90OzEmcXVv dDsgLyZndDsKPC9jb2RlPgo8Y29kZT4gICZsdDstLSBpZiAmcXVvdDtwaG9uZSZxdW90OyBz dXBwbGllZCB0aGVuICZxdW90O3doZW4mcXVvdDsgcmVxdWlyZWQgYXMgd2VsbDsgaW5jbHVk ZSBjdXN0b20gZXJyb3IgbWVzc2FnZSAtLSZndDsKICAmbHQ7dHhwOmFkaV9jb250YWN0X2Nv bWJvIG5hbWVzPSZxdW90O3Bob25lJnF1b3Q7IHJlcXVpcmU9JnF1b3Q7d2hlbiZxdW90Owog ICAgbWVzc2FnZT0mcXVvdDtZb3UmIzM5O3ZlIG9ubHkgZ2l2ZW4gbWUgW05BTUVTXSBidXQg SSBuZWVkIHRvIGtub3cgW1JFUVVJUkVdIHRvbyZxdW90OyAvJmd0Owo8L2NvZGU+Cjxjb2Rl PiAgJmx0Oy0tIHZhbGlkYXRlIHRoZSBwaG9uZSBudW1iZXIgLS0mZ3Q7CiAgJmx0O3R4cDph ZGlfY29udGFjdF92YWxpZGF0ZSBuYW1lcz0mcXVvdDtwaG9uZSZxdW90OyB0eXBlPSZxdW90 O3Bob25lJnF1b3Q7IC8mZ3Q7CjwvY29kZT4KPGNvZGU+ICAmbHQ7LS0gY2hlY2sgZm9yIHNw YW0gYnV0IGFsbG93IHVzZXIgdG8gc2VuZCBzaW1wbGUgJnF1b3Q7d3d3LiZxdW90OyBVUkxz IC0tJmd0OwogICZsdDt0eHA6YWRpX2NvbnRhY3Rfc3BhbSBhbGxvd193d3c9JnF1b3Q7MSZx dW90OyAvJmd0Owo8L2NvZGU+Cjxjb2RlPiZsdDsvdHhwOnplbV9jb250YWN0Jmd0Owo8L2Nv ZGU+PC9wcmU+CgoJPGgzPjxzdHJvbmc+Tm90ZXM6PC9zdHJvbmc+PC9oMz4KCgk8dWw+CgkJ PGxpPnRoZSA8Y29kZT4mbHQ7dHhwOmFkaV9jb250YWN0X2xhYmVscyAvJmd0OzwvY29kZT4g dGFnIGlzIHBsYWNlZCBiZWZvcmUgdGhlIG90aGVyIDxzdHJvbmc+YWRpX2NvbnRhY3Q8L3N0 cm9uZz4gdGFnczwvbGk+CgkJPGxpPm9ubHkgdGhlIGxhYmVscyBmb3IgPGNvZGU+cGhvbmU8 L2NvZGU+LCA8Y29kZT53aGVuPC9jb2RlPiAmYW1wOyA8Y29kZT5jb21tZW50czwvY29kZT4g YXJlIHNwZWNpZmllZCBiZWNhdXNlIHRoZXkgYXJlIGRpZmZlcmVudCBmcm9tIHRoZSBhY3R1 YWwgZm9ybSBsYWJlbHM8L2xpPgoJPC91bD4KCgk8aDIgY2xhc3M9ImFkaV9leHRyYXMiPjxz dHJvbmc+QWRkaXRpb25hbCBpbmZvcm1hdGlvbjwvc3Ryb25nPjwvaDI+CgoJPHAgY2xhc3M9 ImFkaV9leHRyYXMiPlN1cHBvcnQgYW5kIGZ1cnRoZXIgaW5mb3JtYXRpb24gY2FuIGJlIG9i dGFpbmVkIGZyb20gdGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20v dmlld3RvcGljLnBocD9pZD0zMDEzMCI+VGV4dHBhdHRlcm4gc3VwcG9ydCBmb3J1bTwvYT4u IEEgY29weSBvZiB0aGlzIGhlbHAgaXMgYWxzbyBhdmFpbGFibGUgPGEgaHJlZj0iaHR0cDov L3d3dy5ncmVhdG9jZWFubWVkaWEuY29tLmF1L3R4cC8/cGx1Z2luPWFkaV9jb250YWN0Ij5v bmxpbmU8L2E+LiAgTW9yZSBhZGlfcGx1Z2lucyBjYW4gYmUgZm91bmQgPGEgaHJlZj0iaHR0 cDovL3d3dy5ncmVhdG9jZWFubWVkaWEuY29tLmF1L3R4cC8iPmhlcmU8L2E+LjwvcD4iO3M6 NDoiY29kZSI7czoxNjQ1MzoiCi8qCglhZGlfY29udGFjdCAtIEZvcm0gZmllbGQgdmFsaWRh dGlvbiAmIHNwYW0gcHJldmVudGlvbgoKCVdyaXR0ZW4gYnkgQWRpIEdpbGJlcnQKCglSZWxl YXNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKCglWZXJzaW9uIGhp c3Rvcnk6CgkwLjIJCS0gZW5oYW5jZW1lbnQ6IG5ldyBhZGlfY29udGFjdF9jb21ibyBhdHRy aWJ1dGUgJ3JlcXVpcmVkJzsgZXF1aXZhbGVudCB0byByZXN0cmljdD0iZXF1YWwiIG51bWJl cj0iMSIsIGVuYWJsZXMgY3VzdG9tIGVycm9yIG1lc3NhZ2VzIChpbnNwaXJlZCBieSBCbG9r ZSkKCQkJLSBlbmhhbmNlbWVudDogbmV3IGFkaV9jb250YWN0X3ZhbGlkYXRlIGF0dHJpYnV0 ZSAmIG9wdGlvbiB0eXBlPSJjdXN0b20iIHBhdHRlcm49InBhdHRlcm4iIChmb3IgQmxva2Up CgkJCS0gZW5oYW5jZW1lbnQ6IG5ldyBhZGlfY29udGFjdF92YWxpZGF0ZSBhdHRyaWJ1dGUg JiBvcHRpb24gdHlwZT0idXJsIiAoaW5zcGlyZWQgYnkgQmxva2UpCgkJCS0gZW5oYW5jZW1l bnQ6IG5ldyBhZGlfY29udGFjdF9zcGFtIGF0dHJpYnV0ZSAnZXhjbHVkZScgKGUuZy4gdXNl IGluIGNvbmp1bmN0aW9uIHdpdGggYWRpX2NvbnRhY3RfdmFsaWRhdGUgdHlwZT0idXJsIikK CQkJLSBmaXg6IGFkaV9jb250YWN0X2NvbWJvIGZhaWxzIHRvIGNvcGUgd2l0aCBjaGVja2Jv eGVzIChuZXcgYXR0cmlidXRlICdjaGVja2JveCcpICh0aGFua3MgdmFscGMpCgkwLjEuMQkt IGZpeDogYWRpX2NvbnRhY3Rfc3BhbSBlcnJvciBtZXNzYWdlIGZpZWxkIGxpc3RzIGluY29y cmVjdGx5IGdlbmVyYXRlZCAoYm90aCBzdGFuZGFyZCAmIGN1c3RvbSkKCTAuMQkJLSBpbml0 aWFsIHJlbGVhc2UKCiovCgpnbG9iYWwgJHplbV9jb250YWN0X2Zvcm0sJHplbV9jb250YWN0 X3N1Ym1pdCwkemVtX2NvbnRhY3RfZXJyb3IsJHplbV9jb250YWN0X2xhYmVscywgJHplbV9j b250YWN0X3ZhbHVlczsKCmZ1bmN0aW9uIGFkaV9jb250YWN0X2phdmFzY3JpcHQoKQovLyBj cmVhdGUgSmF2YXNjcmlwdCBmdW5jdGlvbiBmb3IgaW5qZWN0aW5nIHplbV9jb250YWN0ICdy ZXF1aXJlZCcgZXJyb3IgY2xhc3MKewoJJGphdmFzY3JpcHQgPSA8PDxFTkRfU0NSSVBUCjxz Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KZnVuY3Rpb24gYWRkRXJyb3JDbGFzcyhs aXN0KSB7Cgl2YXIgemVtQ2xhc3MgPSAnemVtUmVxdWlyZWRlcnJvckVsZW1lbnQnLCBhZGlD bGFzcyA9ICdhZGlfY29udGFjdF9lcnJvcic7Cgl2YXIgbGFiZWwsIGxhYmVscyA9IGRvY3Vt ZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdsYWJlbCcpOwoJZm9yICh2YXIgaSA9IDA7IChs YWJlbCA9IGxhYmVsc1tpXSk7IGkrKykgewoJCWlmIChsaXN0W2xhYmVsLmh0bWxGb3JdKSB7 CgkJCWxhYmVsLmNsYXNzTmFtZSArPSAnICcgKyB6ZW1DbGFzcyArICcgJyArIGFkaUNsYXNz OyAvLyBhZGQgY2xhc3MgdG8gbGFiZWwKCQl9Cgl9Cglmb3IgKHZhciBuYW1lIGluIGxpc3Qp IHsKCQl2YXIgZmllbGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChuYW1lKTsKCQlmaWVs ZC5jbGFzc05hbWUgKz0gJyAnICsgemVtQ2xhc3MgKyAnICcgKyBhZGlDbGFzczsgLy8gYWRk IGNsYXNzIHRvIGlucHV0L3RleHRhcmVhIGV0YwoJfQp9Cjwvc2NyaXB0PgpFTkRfU0NSSVBU OwoJcmV0dXJuICRqYXZhc2NyaXB0Owp9CgpmdW5jdGlvbiBhZGlfY29udGFjdF9saXRlcmFs KCRsaXN0KQovLyBjcmVhdGUgc3RyaW5nIGluIGZvcm0gb2YgYW4gb2JqZWN0IGxpdGVyYWwg eyJmaWVsZDEiOjEsImZpZWxkMiI6MSAuLi4gfQp7CgkkbGlzdCA9IGV4cGxvZGUoJywnLCRs aXN0KTsgLy8gY29udmVydCBjb21tYSBzZXBhcmF0ZWQgbGlzdCB0byBhcnJheQoJZm9yZWFj aCAoJGxpc3QgYXMgJGluZGV4ID0+ICR2YWx1ZSkgLy8gY3JlYXRlIGxpdGVyYWwgYXMgYXJy YXkKCXsKCQkkbGl0ZXJhbFtdID0gJyInLiR2YWx1ZS4nIjoxJzsKCX0KCXJldHVybiAneycu am9pbignLCcsJGxpdGVyYWwpLid9JzsgLy8gcmV0dXJuIGFzIHtjb21tYSBzZXBhcmF0ZWQg bGlzdH0KfQoKZnVuY3Rpb24gYWRpX2NvbnRhY3RfbWVzc2FnZSgkZGVmYXVsdF9tc2csJHVz ZXJfbXNnKQovLyBnZW5lcmF0ZSB6ZW1fY29udGFjdCBlcnJvciBtZXNzYWdlCi8vIFpDUiB3 aWxsIHN0cmlwIG91dCBkdXBsaWNhdGUgZXJyb3IgbWVzc2FnZXMgaW4gJHplbV9jb250YWN0 X2Vycm9yCnsKCWdsb2JhbCAkemVtX2NvbnRhY3RfZXJyb3IsJGxhYmVsX2xpc3QsJG51bWJl ciwkcmVxdWlyZV9sYWJlbF9saXN0OwoKCWlmICgkdXNlcl9tc2cpCgl7CgkJJHVzZXJfbXNn ID0gc3RyX3JlcGxhY2UoJ1tOQU1FU10nLCRsYWJlbF9saXN0LCR1c2VyX21zZyk7CgkJJHVz ZXJfbXNnID0gc3RyX3JlcGxhY2UoJ1tSRVFVSVJFXScsJHJlcXVpcmVfbGFiZWxfbGlzdCwk dXNlcl9tc2cpOwoJCSR1c2VyX21zZyA9IHN0cl9yZXBsYWNlKCdbTlVNQkVSXScsJG51bWJl ciwkdXNlcl9tc2cpOwoJCSR6ZW1fY29udGFjdF9lcnJvcltdID0gJHVzZXJfbXNnOwoJfQoJ ZWxzZQoJCSR6ZW1fY29udGFjdF9lcnJvcltdID0gJGRlZmF1bHRfbXNnOwp9CgpmdW5jdGlv biBhZGlfY29udGFjdF9nZXRfbGFiZWxzKCRuYW1lX2xpc3QpCi8vIHRyYW5zbGF0ZSBsaXN0 IG9mIG5hbWVzIGludG8gbGlzdCBvZiBsYWJlbHMKewoJZ2xvYmFsICRhZGlfY29udGFjdF9s YWJlbHMsJHplbV9jb250YWN0X2xhYmVsczsKCgkkbGFiZWxfbGlzdCA9IGFycmF5KCk7Cglp ZiAoIWlzc2V0KCRhZGlfY29udGFjdF9sYWJlbHMpKSAvLyBpbml0aWFsaXNlIHRvIGVtcHR5 IGFycmF5ICg8dHhwOmFkaV9jb250YWN0X2xhYmVscyBub3QgdXNlZCBvciBub3QgcGxhY2Vk IGJlZm9yZSA8dHhwOmFkaV9jb250YWN0X2NvbWJvIC8+IGV0Yy4KCQkkYWRpX2NvbnRhY3Rf bGFiZWxzID0gYXJyYXkoKTsKCWZvcmVhY2ggKCRuYW1lX2xpc3QgYXMgJGluZGV4ID0+ICR2 YWx1ZSkgLy8gdHJ5IHRocmVlIG9wdGlvbnMKCQlpZiAoYXJyYXlfa2V5X2V4aXN0cygkdmFs dWUsJGFkaV9jb250YWN0X2xhYmVscykpIC8vIDEuIHVzZXIgc3VwcGxpZWQgbGFiZWwgdmlh IGFkaV9jb250YWN0X2xhYmVscyB0YWcKCQkJJGxhYmVsX2xpc3RbXSA9ICRhZGlfY29udGFj dF9sYWJlbHNbJHZhbHVlXTsKCQllbHNlIGlmIChpc3NldCgkemVtX2NvbnRhY3RfbGFiZWxz KSkgLy8gY2hlY2sgZm9yIHByZXNlbmNlIG9mIGxhYmVsIHN1cHBsaWVkIGJ5IHN1Ym1pdHRl ZCBmb3JtCgkJCWlmIChhcnJheV9rZXlfZXhpc3RzKCR2YWx1ZSwkemVtX2NvbnRhY3RfbGFi ZWxzKSkgLy8gMi4gdXNlIGxhYmVsIHN1cHBsaWVkIGJ5IHN1Ym1pdHRlZCBmb3JtCgkJCQkk bGFiZWxfbGlzdFtdID0gJHplbV9jb250YWN0X2xhYmVsc1skdmFsdWVdOwoJCQllbHNlIC8v IDMuIHVzZSB0aGUgbmFtZSBpdHNlbGYsIGJ1dCBwcmV0dHkgaXQgdXAKCQkJCSRsYWJlbF9s aXN0W10gPSB1Y2ZpcnN0KHN0cnRvbG93ZXIoJHZhbHVlKSk7CgkJZWxzZSAvLyAzLiB1c2Ug dGhlIG5hbWUgaXRzZWxmLCBidXQgcHJldHR5IGl0IHVwCgkJCSRsYWJlbF9saXN0W10gPSB1 Y2ZpcnN0KHN0cnRvbG93ZXIoJHZhbHVlKSk7OwoJcmV0dXJuIGpvaW4oJywgJywkbGFiZWxf bGlzdCk7Cn0KCmZ1bmN0aW9uIGFkaV9jb250YWN0X3NwYW0oJGF0dHMpCi8vIHRhZyB0byBj aGVjayBmb3JtIGZpZWxkcyBmb3IgbWFpbCBoZWFkZXJzIGFuZCBsaW5rIHRhZ3MKewoJZ2xv YmFsICR6ZW1fY29udGFjdF9mb3JtLCR6ZW1fY29udGFjdF9sYWJlbHMsJHplbV9jb250YWN0 X3ZhbHVlcywkemVtX2NvbnRhY3RfZXJyb3IsJGFkaV9jb250YWN0X2xhYmVscywkbGFiZWxf bGlzdDsKCglleHRyYWN0KGxBdHRzKGFycmF5KAoJCSduYW1lcycJCQkJCT0+ICcnLAkvLyBs aXN0IG9mIGZvcm0gZmllbGRzIHdlJ3JlIGludGVyZXN0ZWQgaW4gKGRlZmF1bHQgPSBhbGwg c3VibWl0dGVkIGZpZWxkcykKCQknZXhjbHVkZScJCQkJPT4gJycsCS8vIGxpc3Qgb2YgZm9y bSBmaWVsZHMgdG8gYmUgaWdub3JlZCAoZGVmYXVsdCA9IG5vbmUpCgkJJ21lc3NhZ2UnCQkJ CT0+ICcnLAkvLyBhbHRlcm5hdGl2ZSBlcnJvciBtZXNzYWdlICh3aXRoIFtOQU1FU10gJiBb TlVNQkVSXSkKCQknZGV0ZWN0X21haWxfaGVhZGVycycJPT4gJzEnLAoJCSdkZXRlY3RfbGlu a190YWdzJwkJPT4gJzEnLAoJCSdhbGxvd193d3cnCQkJCT0+ICcwJywJLy8gYWxsb3cgcHJl c2VuY2Ugb2Ygc2ltcGxlIHd3dy4uLi4gbGlua3MKCQknZGVidWcnCQkJCQk9PiAnMCcKCSks ICRhdHRzKSk7CgoJaWYgKCRuYW1lcykKCXsKCQkkbmFtZV9saXN0ID0gZXhwbG9kZSgnLCcs JG5hbWVzKTsgLy8gY29udmVydCBjb21tYSBzZXBhcmF0ZWQgbGlzdCB0byBhcnJheQoJCWZv cmVhY2ggKCRuYW1lX2xpc3QgYXMgJGluZGV4ID0+ICRmaWVsZCkgLy8gcmVtb3ZlIGV4dHJh bmVvdXMgc3BhY2VzCgkJCSRuYW1lX2xpc3RbJGluZGV4XSA9IHRyaW0oJGZpZWxkKTsKCX0K CWVsc2UgLy8gZ2V0IGxpc3Qgb2YgYWxsIHN1Ym1pdHRlZCBmaWVsZHMKCQlpc3NldCgkemVt X2NvbnRhY3RfdmFsdWVzKSA/CgkJCSRuYW1lX2xpc3QgPSBhcnJheV9rZXlzKCR6ZW1fY29u dGFjdF92YWx1ZXMpIDoKCQkJJG5hbWVfbGlzdCA9IGFycmF5KCk7CglpZiAoJGV4Y2x1ZGUp Cgl7CgkJJGV4Y2x1ZGVfbGlzdCA9IGV4cGxvZGUoJywnLCRleGNsdWRlKTsgLy8gY29udmVy dCBjb21tYSBzZXBhcmF0ZWQgbGlzdCB0byBhcnJheQoJCWZvcmVhY2ggKCRleGNsdWRlX2xp c3QgYXMgJGluZGV4ID0+ICRmaWVsZCkgLy8gcmVtb3ZlIGV4dHJhbmVvdXMgc3BhY2VzCgkJ CSRleGNsdWRlX2xpc3RbJGluZGV4XSA9IHRyaW0oJGZpZWxkKTsKCX0KCWVsc2UKCQkkZXhj bHVkZV9saXN0ID0gYXJyYXkoKTsKCSRvcmlnaW5hbF9uYW1lX2xpc3QgPSAkbmFtZV9saXN0 OyAvLyByZW1lbWJlciBvcmlnaW5hbCBsaXN0IG9mIGZpZWxkcwoJJG5hbWVfbGlzdCA9IGFy cmF5X2RpZmYoJG5hbWVfbGlzdCwkZXhjbHVkZV9saXN0KTsgLy8gaW5jbHVkZSBtaW51cyBl eGNsdWRlCglpZiAoJG5hbWVfbGlzdCkgLy8gdGhlcmUncyB3b3JrIHRvIGRvCgl7CgkJLy8g bGluayB0YWdzCgkJJGFsbG93X3d3dyA/CgkJCSRsaW5rX3RhZ3MgPSAnLyhcW3VybHxodHRw fGhyZWYpL2knIDoKCQkJJGxpbmtfdGFncyA9ICcvKFxbdXJsfGh0dHB8d3d3fGhyZWYpL2kn OwoJCSRsaW5rX3RhZ19saXN0ID0gc3RyX3JlcGxhY2UoJy8oXFwnLCcnLCRsaW5rX3RhZ3Mp OwoJCSRsaW5rX3RhZ19saXN0ID0gc3RyX3JlcGxhY2UoJykvaScsJycsJGxpbmtfdGFnX2xp c3QpOwoJCSRsaW5rX3RhZ19saXN0ID0gc3RyX3JlcGxhY2UoJ3wnLCcsICcsJGxpbmtfdGFn X2xpc3QpOwoJCS8vIG1haWwgaGVhZGVycwoJCSRtYWlsX2hlYWRlcnMgPSAnLyh0b1w6fGZy b21cOnxiY2NcOnxtdWx0aXBhcnR8Y2NcOnxDb250ZW50XC1UcmFuc2ZlclwtRW5jb2Rpbmdc OnxDb250ZW50XC1UeXBlXDp8TWltZVwtVmVyc2lvblw6KS9pJzsKCQkkbWFpbF9oZWFkZXJz X2xpc3QgPSBzdHJfcmVwbGFjZSgnLygnLCcnLCRtYWlsX2hlYWRlcnMpOwoJCSRtYWlsX2hl YWRlcnNfbGlzdCA9IHN0cl9yZXBsYWNlKCcpL2knLCcnLCRtYWlsX2hlYWRlcnNfbGlzdCk7 CgkJJG1haWxfaGVhZGVyc19saXN0ID0gc3RyX3JlcGxhY2UoJ1xcJywnJywkbWFpbF9oZWFk ZXJzX2xpc3QpOwoJCSRtYWlsX2hlYWRlcnNfbGlzdCA9IHN0cl9yZXBsYWNlKCd8JywnLCAn LCRtYWlsX2hlYWRlcnNfbGlzdCk7CgkJJG1haWxfaGVhZGVyX2Vycm9yID0gRkFMU0U7CgkJ JGxpbmtfdGFnX2Vycm9yID0gRkFMU0U7CgkJJGVycm9yX2xpc3QgPSBhcnJheSgpOwoJCWZv cmVhY2ggKCRuYW1lX2xpc3QgYXMgJGZpZWxkID0+ICR2YWx1ZSkgLy8gc2NhbiBmaWVsZHMg Zm9yIHNwYW0KCQl7CgkJCWlmICgkZGV0ZWN0X21haWxfaGVhZGVycykKCQkJCWlmIChwcmVn X21hdGNoKCRtYWlsX2hlYWRlcnMsJHplbV9jb250YWN0X3ZhbHVlc1skdmFsdWVdKSkKCQkJ CXsKCQkJCQkkbWFpbF9oZWFkZXJfZXJyb3IgPSBUUlVFOwoJCQkJCSRlcnJvcl9saXN0W10g PSAkdmFsdWU7IC8vIGFkZCBmaWVsZCBuYW1lIHRvIGxpc3QKCQkJCX0KCQkJaWYgKCRkZXRl Y3RfbGlua190YWdzKQoJCQkJaWYgKHByZWdfbWF0Y2goJGxpbmtfdGFncywkemVtX2NvbnRh Y3RfdmFsdWVzWyR2YWx1ZV0pKQoJCQkJewoJCQkJCSRsaW5rX3RhZ19lcnJvciA9IFRSVUU7 CgkJCQkJJGVycm9yX2xpc3RbXSA9ICR2YWx1ZTsgLy8gYWRkIGZpZWxkIG5hbWUgdG8gbGlz dAoJCQkJfQoJCX0KCQkkbGFiZWxfbGlzdCA9IGFkaV9jb250YWN0X2dldF9sYWJlbHMoJGVy cm9yX2xpc3QpOyAvLyBjcmVhdGUgbGlzdCBvZiBsYWJlbHMgZm9yIHNwYW0gZmllbGRzCgkJ aWYgKCRtYWlsX2hlYWRlcl9lcnJvcikKCQkJYWRpX2NvbnRhY3RfbWVzc2FnZSgiTWFpbCBo ZWFkZXIgaW5qZWN0aW9uIGRldGVjdGVkIGluICYjODIyMDs8c3Ryb25nPiRsYWJlbF9saXN0 PC9zdHJvbmc+JiM4MjIxOyAoJG1haWxfaGVhZGVyc19saXN0IG5vdCBhbGxvd2VkKS4iLCRt ZXNzYWdlKTsKCQlpZiAoJGxpbmtfdGFnX2Vycm9yKQoJCQlhZGlfY29udGFjdF9tZXNzYWdl KCJMaW5rIGRldGVjdGVkIGluICYjODIyMDs8c3Ryb25nPiRsYWJlbF9saXN0PC9zdHJvbmc+ JiM4MjIxOyAoJGxpbmtfdGFnX2xpc3Qgbm90IGFsbG93ZWQpLiIsJG1lc3NhZ2UpOwoJfQoJ aWYgKCRkZWJ1ZykKCXsKCQllY2hvICdERUJVRyBmb3IgJy5fX0ZVTkNUSU9OX18uJzxici8+ PGJyLz4nOwoJCWVjaG8gJ1NVQk1JVFRFRCBGT1JNIExBQkVML1ZBTFVFICgkemVtX2NvbnRh Y3RfZm9ybSk6PGJyLz4nOwoJCWRtcCgkemVtX2NvbnRhY3RfZm9ybSk7IC8vIGFycmF5IGtl eWVkIGJ5IGxhYmVscyAobnVsbCBpZiBubyBmaWVsZHMgZmlsbGVkIGluIG9yIG5vdCBzdWJt aXR0ZWQpCgkJZWNobyAnU1VCTUlUVEVEIEZPUk0gTkFNRS9MQUJFTCAoJHplbV9jb250YWN0 X2xhYmVscyk6PGJyLz4nOwoJCWRtcCgkemVtX2NvbnRhY3RfbGFiZWxzKTsgLy8gYXJyYXkg a2V5ZWQgYnkgbmFtZXMgKG51bGwgaWYgbm8gZmllbGRzIGZpbGxlZCBpbiBvciBub3Qgc3Vi bWl0dGVkKQoJCWVjaG8gJ1NVQk1JVFRFRCBGT1JNIE5BTUUvVkFMVUUgKCR6ZW1fY29udGFj dF92YWx1ZXMpOjxici8+JzsKCQlkbXAoJHplbV9jb250YWN0X3ZhbHVlcyk7IC8vIGFycmF5 IGtleWVkIGJ5IG5hbWVzIChudWxsIGlmIG5vIGZpZWxkcyBmaWxsZWQgaW4gb3Igbm90IHN1 Ym1pdHRlZCkKCQlpZiAoaXNzZXQoJHplbV9jb250YWN0X2Vycm9yKSkKCQl7CgkJCWVjaG8g J0VSUk9SIExJU1QgKCR6ZW1fY29udGFjdF9lcnJvcik6PGJyLz4nOwoJCQlkbXAoJHplbV9j b250YWN0X2Vycm9yKTsKCQl9CgkJZWNobyAiU1VQUExJRUQgQVRUUklCVVRFUzo8YnIvPiI7 CgkJZG1wKCRhdHRzKTsKCQllY2hvICJGSUVMRCBMSVNUOjxici8+IjsKCQlkbXAoJG9yaWdp bmFsX25hbWVfbGlzdCk7CgkJZWNobyAiRVhDTFVERSBMSVNUOjxici8+IjsKCQlkbXAoJGV4 Y2x1ZGVfbGlzdCk7CgkJZWNobyAiRklFTERTIE9GIElOVEVSRVNUOjxici8+IjsKCQlkbXAo JG5hbWVfbGlzdCk7CgkJaWYgKGlzc2V0KCRhZGlfY29udGFjdF9sYWJlbHMpKQoJCXsKCQkJ ZWNobyAiU1VQUExJRUQgTEFCRUxTIEZST00gYWRpX2NvbnRhY3RfbGFiZWxzOjxici8+IjsK CQkJZG1wKCRhZGlfY29udGFjdF9sYWJlbHMpOwoJCX0KCQlpZiAoaXNzZXQoJGVycm9yX2xp c3QpKQoJCXsKCQkJZWNobyAiRklFTEQgTkFNRVMgV0lUSCBTUEFNIEVSUk9SUzo8YnIvPiI7 CgkJCWRtcCgkZXJyb3JfbGlzdCk7CgkJCWVjaG8gIlNQQU0gRklFTEQgTEFCRUxTOjxici8+ IjsKCQkJZG1wKCRsYWJlbF9saXN0KTsKCQl9Cgl9Cn0KCmZ1bmN0aW9uIGFkaV9jb250YWN0 X2xhYmVscygkYXR0cykKLy8gdGFnIHRvIHJlY29yZCBuYW1lL2xhYmVsIG1hcHBpbmdzCnsK CWdsb2JhbCAkYWRpX2NvbnRhY3RfbGFiZWxzOwoJJGFkaV9jb250YWN0X2xhYmVscyA9ICRh dHRzOwp9CgpmdW5jdGlvbiBhZGlfY29udGFjdF92YWxpZGF0ZSgkYXR0cykKLy8gdGFnIHRv IHZhbGlkYXRlIGZvcm0gZmllbGQgY29udGVudHMKewoJZ2xvYmFsICR6ZW1fY29udGFjdF9m b3JtLCR6ZW1fY29udGFjdF9zdWJtaXQsJHplbV9jb250YWN0X2Vycm9yLCR6ZW1fY29udGFj dF92YWx1ZXM7CgoJZXh0cmFjdChsQXR0cyhhcnJheSgKCQknbmFtZXMnCQkJCT0+ICcnLAkJ Ly8gbGlzdCBvZiBmb3JtIGZpZWxkcyB3ZSdyZSBpbnRlcmVzdGVkIGluCgkJJ3R5cGUnCQkJ CT0+ICcnLAkJLy8gJ2FscGhhJywgJ2FscGhhbnVtJywgJ2ludGVnZXInLCAnbnVtZXJpYycK CQknYWxsb3dfd2hpdGVzcGFjZScJPT4gJzAnLAkJLy8gYWxsb3cgc3BhY2VzIGFzIHdlbGwg YXMgJ3R5cGUnCgkJJ3BhdHRlcm4nCQkJPT4gJycsCQkvLyBjdXN0b20gcGF0dGVybiB1c2Vk IHdpdGggdHlwZT0iY3VzdG9tJwoJCSdtZXNzYWdlJwkJCT0+ICcnCQkvLyBhbHRlcm5hdGl2 ZSBlcnJvciBtZXNzYWdlICh3aXRoIFtOQU1FU10pCgkpLCAkYXR0cykpOwoKCS8vIHRpZHkg dXAgc3VwcGxpZWQgYXR0cmlidXRlcwoJJG5hbWVfbGlzdCA9IGV4cGxvZGUoJywnLCRuYW1l cyk7IC8vIGNvbnZlcnQgY29tbWEgc2VwYXJhdGVkIGxpc3QgdG8gYXJyYXkKCWZvcmVhY2gg KCRuYW1lX2xpc3QgYXMgJGluZGV4ID0+ICRmaWVsZCkgLy8gcmVtb3ZlIGV4dHJhbmVvdXMg c3BhY2VzCgkJJG5hbWVfbGlzdFskaW5kZXhdID0gdHJpbSgkZmllbGQpOwoJJGxhYmVsX2xp c3QgPSBhZGlfY29udGFjdF9nZXRfbGFiZWxzKCRuYW1lX2xpc3QpOyAvLyBjcmVhdGUgbGlz dCBvZiBsYWJlbHMKCglpZiAoJHplbV9jb250YWN0X3N1Ym1pdCkgLy8gZm9ybSBoYXMgYmVl biBzdWJtaXR0ZWQKCXsKCQkkb2sgPSBUUlVFOyAvLyBiZW5lZml0IG9mIHRoZSBkb3VidAoJ CWlmIChpc3NldCgkemVtX2NvbnRhY3RfZm9ybSkpCgkJCWZvcmVhY2ggKCRuYW1lX2xpc3Qg YXMgJGluZGV4ID0+ICRmaWVsZCkKCQkJCWlmIChhcnJheV9rZXlfZXhpc3RzKCRmaWVsZCwg JHplbV9jb250YWN0X3ZhbHVlcykpCgkJCQl7CgkJCQkJJGZpZWxkX3ZhbHVlID0gJHplbV9j b250YWN0X3ZhbHVlc1skZmllbGRdOwoJCQkJCWlmICgkYWxsb3dfd2hpdGVzcGFjZSkKCQkJ CQkJJGZpZWxkX3ZhbHVlID0gcHJlZ19yZXBsYWNlKCcvW1xzXS8nLCcnLCAkZmllbGRfdmFs dWUpOwoJCQkJCXN3aXRjaCAoJHR5cGUpCgkJCQkJewoJCQkJCQljYXNlICdhbHBoYSc6CgkJ CQkJCQkkb2sgJj0gY3R5cGVfYWxwaGEoJGZpZWxkX3ZhbHVlKTsKCQkJCQkJCWJyZWFrOwoJ CQkJCQljYXNlICdhbHBoYW51bSc6CgkJCQkJCQkkb2sgJj0gY3R5cGVfYWxudW0oJGZpZWxk X3ZhbHVlKTsKCQkJCQkJCWJyZWFrOwoJCQkJCQljYXNlICdpbnRlZ2VyJzoKCQkJCQkJCSRv ayAmPSBjdHlwZV9kaWdpdCgkZmllbGRfdmFsdWUpOwoJCQkJCQkJYnJlYWs7CgkJCQkJCWNh c2UgJ251bWVyaWMnOgoJCQkJCQkJJG9rICY9IGlzX251bWVyaWMoJGZpZWxkX3ZhbHVlKTsK CQkJCQkJCWJyZWFrOwoJCQkJCQljYXNlICdwaG9uZSc6CgkJCQkJCQkkb2sgJj0gcHJlZ19t YXRjaCgiL15bMC05eFwgXCtcLVwoXClcLixdKiQvaSIsJGZpZWxkX3ZhbHVlKTsKCQkJCQkJ Y2FzZSAndXJsJzoKCQkJCQkJCSRvayAmPSBwcmVnX21hdGNoKCIvXig/Omh0dHA6XC9cLyk/ KD86W1x3LV0rXC4pK1thLXpdezIsNn0kL2kiLCRmaWVsZF92YWx1ZSk7CgkJCQkJCWNhc2Ug J2N1c3RvbSc6CgkJCQkJCQlpZiAoJHBhdHRlcm4pCgkJCQkJCQkJJG9rICY9IHByZWdfbWF0 Y2goJHBhdHRlcm4sJGZpZWxkX3ZhbHVlKTsKCQkJCQkJZGVmYXVsdDoKCQkJCQkJCWJyZWFr OwoJCQkJCX0KCQkJCX0KCQlpZiAoISRvaykKCQkJc3dpdGNoICgkdHlwZSkKCQkJewoJCQkJ Y2FzZSAnYWxwaGEnOgoJCQkJCWFkaV9jb250YWN0X21lc3NhZ2UoIk5vbi1hbHBoYWJldGlj YWwgY2hhcmFjdGVycyBmb3VuZCBpbiAmIzgyMjA7PHN0cm9uZz4kbGFiZWxfbGlzdDwvc3Ry b25nPiYjODIyMTsiLCRtZXNzYWdlKTsKCQkJCQlicmVhazsKCQkJCWNhc2UgJ2FscGhhbnVt JzoKCQkJCQlhZGlfY29udGFjdF9tZXNzYWdlKCJOb24tYWxwaGFudW1lcmljIGNoYXJhY3Rl cnMgZm91bmQgaW4gJiM4MjIwOzxzdHJvbmc+JGxhYmVsX2xpc3Q8L3N0cm9uZz4mIzgyMjE7 IiwkbWVzc2FnZSk7CgkJCQkJYnJlYWs7CgkJCQljYXNlICdpbnRlZ2VyJzoKCQkJCQlhZGlf Y29udGFjdF9tZXNzYWdlKCJOb24tZGlnaXRzIGZvdW5kIGluICYjODIyMDs8c3Ryb25nPiRs YWJlbF9saXN0PC9zdHJvbmc+JiM4MjIxOyIsJG1lc3NhZ2UpOwoJCQkJCWJyZWFrOwoJCQkJ Y2FzZSAnbnVtZXJpYyc6CgkJCQkJYWRpX2NvbnRhY3RfbWVzc2FnZSgiTm9uLW51bWVyaWMg Y2hhcmFjdGVycyBmb3VuZCBpbiAmIzgyMjA7PHN0cm9uZz4kbGFiZWxfbGlzdDwvc3Ryb25n PiYjODIyMTsiLCRtZXNzYWdlKTsKCQkJCQlicmVhazsKCQkJCWNhc2UgJ3Bob25lJzoKCQkJ CQlhZGlfY29udGFjdF9tZXNzYWdlKCJPbmx5IDAtOSArIC0gLiAsICgpIHhYIGFsbG93ZWQg aW4gJiM4MjIwOzxzdHJvbmc+JGxhYmVsX2xpc3Q8L3N0cm9uZz4mIzgyMjE7IiwkbWVzc2Fn ZSk7CgkJCQkJYnJlYWs7CgkJCQljYXNlICd1cmwnOgoJCQkJCWFkaV9jb250YWN0X21lc3Nh Z2UoIkludmFsaWQgVVJMIGluICYjODIyMDs8c3Ryb25nPiRsYWJlbF9saXN0PC9zdHJvbmc+ JiM4MjIxOyIsJG1lc3NhZ2UpOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSAnY3VzdG9tJzoKCQkJ CQlhZGlfY29udGFjdF9tZXNzYWdlKCJJbnZhbGlkIGRhdGEgaW4gJiM4MjIwOzxzdHJvbmc+ JGxhYmVsX2xpc3Q8L3N0cm9uZz4mIzgyMjE7IiwkbWVzc2FnZSk7CgkJCQkJYnJlYWs7CgkJ CQlkZWZhdWx0OgoJCQkJCWJyZWFrOwoJCQl9Cgl9Cn0KCmZ1bmN0aW9uIGFkaV9jb250YWN0 X2NvbWJvKCRhdHRzKQovLyB0YWcgdG8gY2hlY2sgZm9yIHNwZWNpZmllZCBmaWVsZCBjb21i aW5hdGlvbnMKewoJZ2xvYmFsICR6ZW1fY29udGFjdF9mb3JtLCR6ZW1fY29udGFjdF9zdWJt aXQsJHplbV9jb250YWN0X2xhYmVscywkemVtX2NvbnRhY3RfdmFsdWVzLCR6ZW1fY29udGFj dF9lcnJvciwkbGFiZWxfbGlzdCwkbnVtYmVyLCRyZXF1aXJlX2xhYmVsX2xpc3QsJGFkaV9j b250YWN0X2xhYmVsczsKCglleHRyYWN0KGxBdHRzKGFycmF5KAoJCSduYW1lcycJCQk9PiAn JywJCS8vIGxpc3Qgb2YgZm9ybSBmaWVsZHMgd2UncmUgaW50ZXJlc3RlZCBpbgoJCSdyZXF1 aXJlJwkJPT4gJycsCQkvLyBsaXN0IG9mIGZvcm0gZmllbGRzIHJlcXVpcmVkCgkJJ3Jlc3Ry aWN0JwkJPT4gJycsCQkvLyAnbWluJywgJ21heCcgb3IgJ2VxdWFsJwoJCSdudW1iZXInCQk9 PiAnMCcsCQkvLyBudW1iZXIgb2YgZmllbGRzIHJlcXVpcmVkCgkJJ21lc3NhZ2UnCQk9PiAn JywJCS8vIGFsdGVybmF0aXZlIGVycm9yIG1lc3NhZ2UgKHdpdGggW05BTUVTXSxbTlVNQkVS XSxbUkVRVUlSRV0pCgkJJ3JlcXVpcmVkJwkJPT4gJzAnLAkJLy8gZm9yY2VzIHJlc3RyaWN0 PSJlcXVhbCIgbnVtYmVyPSIxIiwgZm9yIGN1c3RvbSBlcnJvciBtZXNzYWdlcwoJCSdjaGVj a2JveCcJCT0+ICcwJywJCS8vIGluZGljYXRlcyB0aGF0IGZpZWxkcyBhcmUgY2hlY2tib3hl cyAoaS5lLiBjaGVjayBmb3IgJ1llcycgb3IgJ05vJykKCQknZGVidWcnCQkJPT4gJzAnCgkp LCAkYXR0cykpOwoKCS8vIHRpZHkgdXAgc3VwcGxpZWQgYXR0cmlidXRlcwoJJG5hbWVfbGlz dCA9IGV4cGxvZGUoJywnLCRuYW1lcyk7IC8vIGNvbnZlcnQgY29tbWEgc2VwYXJhdGVkIGxp c3QgdG8gYXJyYXkKCWZvcmVhY2ggKCRuYW1lX2xpc3QgYXMgJGluZGV4ID0+ICRmaWVsZCkg Ly8gcmVtb3ZlIGV4dHJhbmVvdXMgc3BhY2VzCgkJJG5hbWVfbGlzdFskaW5kZXhdID0gdHJp bSgkZmllbGQpOwoJJGxhYmVsX2xpc3QgPSBhZGlfY29udGFjdF9nZXRfbGFiZWxzKCRuYW1l X2xpc3QpOyAvLyBwdXQgZmllbGQgbGlzdCBiYWNrIHRvZ2V0aGVyIHRpZGlseSBzcGFjZWQg b3V0OiBmaWVsZDEsIGZpZWxkMiwgZmllbGQzCgkkcmVxdWlyZV9saXN0ID0gZXhwbG9kZSgn LCcsJHJlcXVpcmUpOyAvLyBjb252ZXJ0IGNvbW1hIHNlcGFyYXRlZCBsaXN0IHRvIGFycmF5 Cglmb3JlYWNoICgkcmVxdWlyZV9saXN0IGFzICRpbmRleCA9PiAkZmllbGQpIC8vIHJlbW92 ZSBleHRyYW5lb3VzIHNwYWNlcwoJCSRyZXF1aXJlX2xpc3RbJGluZGV4XSA9IHRyaW0oJGZp ZWxkKTsKCSRyZXF1aXJlX2xhYmVsX2xpc3QgPSBhZGlfY29udGFjdF9nZXRfbGFiZWxzKCRy ZXF1aXJlX2xpc3QpOyAvLyBwdXQgZmllbGQgbGlzdCBiYWNrIHRvZ2V0aGVyIHRpZGlseSBz cGFjZWQgb3V0OiBmaWVsZDEsIGZpZWxkMiwgZmllbGQzCgkkcmVzdHJpY3QgPSBzdHJ0b2xv d2VyKCRyZXN0cmljdCk7CglpZiAoJHJlcXVpcmVkKSAvLyBmb3JjZSBjZXJ0YWluIGF0dHJp YnV0ZSB2YWx1ZXMKCXsKCQkkcmVzdHJpY3QgPSAnZXF1YWwnOwoJCSRudW1iZXIgPSAnMSc7 Cgl9CgoJLy8gaW5pdGlhbCBzZXR0aW5ncwoJJGZpZWxkX2NvdW50ID0gMDsKCSRyZXN0cmlj dF9lcnJvciA9IEZBTFNFOwoJJHJlcXVpcmVfZXJyb3IgPSBGQUxTRTsKCglpZiAoJHplbV9j b250YWN0X3N1Ym1pdCkgLy8gZm9ybSBoYXMgYmVlbiBzdWJtaXR0ZWQKCXsKCQlpZiAoaXNz ZXQoJHplbV9jb250YWN0X2Zvcm0pKSAvLyBOVUxMIGlmIGFsbCBmaWVsZHMgZW1wdHkgb24g c3VibWl0CgkJCWlmICgkcmVzdHJpY3QpCgkJCXsKCQkJCWZvcmVhY2ggKCRuYW1lX2xpc3Qg YXMgJGluZGV4ID0+ICRmaWVsZCkKCQkJCQlpZiAoYXJyYXlfa2V5X2V4aXN0cygkZmllbGQs ICR6ZW1fY29udGFjdF92YWx1ZXMpKSAvLyBrZXkgb25seSBleGlzdHMgaWYgZmllbGQgZmls bGVkIGluCgkJCQkJewoJCQkJCQlpZiAoJGNoZWNrYm94KSAvLyBjaGVjayBmb3IgJ1llcycg b3IgJ05vJwoJCQkJCQl7CgkJCQkJCQlpZiAoc3RyY2FzZWNtcCgkemVtX2NvbnRhY3RfdmFs dWVzWyRmaWVsZF0sJ1llcycpID09IDApIC8vIGlmICdZZXMnIHRoZW4gY291bnQgYXMgImZp bGxlZCBpbiIKCQkJCQkJCQkkZmllbGRfY291bnQgKz0gMTsKCQkJCQkJfQoJCQkJCQllbHNl IC8vIGZpbGxlZCBpbiBpcyBnb29kIGVub3VnaAoJCQkJCQkJJGZpZWxkX2NvdW50ICs9IDE7 CgkJCQkJfQoJCQl9CgkJCWVsc2UgaWYgKCRyZXF1aXJlKQoJCQl7CgkJCQkkbWlzc2luZ19y ZXF1aXJlZCA9IGFycmF5KCk7CgkJCQlmb3JlYWNoICgkbmFtZV9saXN0IGFzICRpbmRleCA9 PiAkbmFtZSkKCQkJCQlpZiAoYXJyYXlfa2V5X2V4aXN0cygkbmFtZSwgJHplbV9jb250YWN0 X3ZhbHVlcykpIC8vIGtleSBvbmx5IGV4aXN0cyBpZiBmaWVsZCBmaWxsZWQgaW4KCQkJCQl7 CgkJCQkJCS8vIGNoZWNrIHRoYXQgcmVxdWlyZWQgZmllbGRzIGV4aXN0IGluIHN1Ym1pdHRl ZCBmb3JtCgkJCQkJCWZvcmVhY2ggKCRyZXF1aXJlX2xpc3QgYXMgJGluZGV4ID0+ICRyZXF1 aXJlZF9maWVsZCkKCQkJCQkJCWlmICghYXJyYXlfa2V5X2V4aXN0cygkcmVxdWlyZWRfZmll bGQsICR6ZW1fY29udGFjdF92YWx1ZXMpKQoJCQkJCQkJewoJCQkJCQkJCSRyZXF1aXJlX2Vy cm9yID0gVFJVRTsKCQkJCQkJCQkkbWlzc2luZ19yZXF1aXJlZFtdID0gJHJlcXVpcmVkX2Zp ZWxkOyAvLyBsaXN0IHRoZSBtaXNzaW5nCgkJCQkJCQl9CgkJCQkJfQoJCQl9CgkJLy8gJ3Jl c3RyaWN0JyBtb2RlIGVycm9yIG1lc3NhZ2VzCgkJc3dpdGNoICgkcmVzdHJpY3QpCgkJewoJ CQljYXNlICdtaW4nOgoJCQkJaWYgKCRmaWVsZF9jb3VudCA8ICRudW1iZXIpCgkJCQl7CgkJ CQkJJHJlc3RyaWN0X2Vycm9yID0gVFJVRTsKCQkJCQlhZGlfY29udGFjdF9tZXNzYWdlKCJB dCBsZWFzdCAkbnVtYmVyIG9mICYjODIyMDs8c3Ryb25nPiRsYWJlbF9saXN0PC9zdHJvbmc+ JiM4MjIxOyByZXF1aXJlZC4iLCRtZXNzYWdlKTsKCQkJCX0KCQkJCWJyZWFrOwoJCQljYXNl ICdtYXgnOgoJCQkJaWYgKCRmaWVsZF9jb3VudCA+ICRudW1iZXIpCgkJCQl7CgkJCQkJJHJl c3RyaWN0X2Vycm9yID0gVFJVRTsKCQkJCQlhZGlfY29udGFjdF9tZXNzYWdlKCJNYXhpbXVt ICRudW1iZXIgb2YgJiM4MjIwOzxzdHJvbmc+JGxhYmVsX2xpc3Q8L3N0cm9uZz4mIzgyMjE7 IHJlcXVpcmVkLiIsJG1lc3NhZ2UpOwoJCQkJfQoJCQkJYnJlYWs7CgkJCWNhc2UgJ2VxdWFs JzoKCQkJCWlmICgkZmllbGRfY291bnQgIT0gJG51bWJlcikKCQkJCXsKCQkJCQkkcmVzdHJp Y3RfZXJyb3IgPSBUUlVFOwoJCQkJCWFkaV9jb250YWN0X21lc3NhZ2UoIkV4YWN0bHkgJG51 bWJlciBvZiAmIzgyMjA7PHN0cm9uZz4kbGFiZWxfbGlzdDwvc3Ryb25nPiYjODIyMTsgcmVx dWlyZWQuIiwkbWVzc2FnZSk7CgkJCQl9CgkJCQlicmVhazsKCQkJZGVmYXVsdDoKCQkJCWJy ZWFrOwoJCX0KCgkJaWYgKCRkZWJ1ZykKCQl7CgkJCWVjaG8gJ0RFQlVHIGZvciAnLl9fRlVO Q1RJT05fXy4nPGJyLz48YnIvPic7CgkJCWVjaG8gJ1NVQk1JVFRFRCBGT1JNIExBQkVML1ZB TFVFICgkemVtX2NvbnRhY3RfZm9ybSk6PGJyLz4nOwoJCQlkbXAoJHplbV9jb250YWN0X2Zv cm0pOyAvLyBhcnJheSBrZXllZCBieSBsYWJlbHMgKG51bGwgaWYgbm8gZmllbGRzIGZpbGxl ZCBpbiBvciBub3Qgc3VibWl0dGVkKQoJCQllY2hvICdTVUJNSVRURUQgRk9STSBOQU1FL0xB QkVMICgkemVtX2NvbnRhY3RfbGFiZWxzKTo8YnIvPic7CgkJCWRtcCgkemVtX2NvbnRhY3Rf bGFiZWxzKTsgLy8gYXJyYXkga2V5ZWQgYnkgbmFtZXMgKG51bGwgaWYgbm8gZmllbGRzIGZp bGxlZCBpbiBvciBub3Qgc3VibWl0dGVkKQoJCQllY2hvICdTVUJNSVRURUQgRk9STSBOQU1F L1ZBTFVFICgkemVtX2NvbnRhY3RfdmFsdWVzKTo8YnIvPic7CgkJCWRtcCgkemVtX2NvbnRh Y3RfdmFsdWVzKTsgLy8gYXJyYXkga2V5ZWQgYnkgbmFtZXMgKG51bGwgaWYgbm8gZmllbGRz IGZpbGxlZCBpbiBvciBub3Qgc3VibWl0dGVkKQoJCQlpZiAoaXNzZXQoJHplbV9jb250YWN0 X2Vycm9yKSkKCQkJewoJCQkJZWNobyAnRVJST1IgTElTVCAoJHplbV9jb250YWN0X2Vycm9y KTo8YnIvPic7CgkJCQlkbXAoJHplbV9jb250YWN0X2Vycm9yKTsKCQkJfQoJCQllY2hvICJT VVBQTElFRCBBVFRSSUJVVEVTOjxici8+IjsKCQkJZG1wKCRhdHRzKTsKCQkJZWNobyAiRklF TERTIE9GIElOVEVSRVNUOjxici8+IjsKCQkJZG1wKCRuYW1lX2xpc3QpOwoJCQllY2hvICJM QUJFTFMgT0YgSU5URVJFU1Q6PGJyLz4iOwoJCQlkbXAoJGxhYmVsX2xpc3QpOwoJCQlpZiAo JHJlc3RyaWN0KQoJCQl7CgkJCQlpZiAoJG51bWJlcikKCQkJCXsKCQkJCQllY2hvICJWQUxJ RCBGSUVMRCBDT1VOVDo8YnIvPiI7CgkJCQkJZWNobyAnPHByZT4nLiRmaWVsZF9jb3VudC4n PC9wcmU+JzsKCQkJCX0KCQkJfQoJCQlpZiAoJHJlcXVpcmUpCgkJCXsKCQkJCWVjaG8gIlJF UVVJUkVEIEZJRUxEUzo8YnIvPiI7CgkJCQlkbXAoJHJlcXVpcmVfbGlzdCk7CgkJCQlpZiAo aXNzZXQoJG1pc3NpbmdfcmVxdWlyZWQpKQoJCQkJewoJCQkJCWVjaG8gIk1JU1NJTkcgUkVR VUlSRUQgRklFTERTOjxici8+IjsKCQkJCQlkbXAoJG1pc3NpbmdfcmVxdWlyZWQpOwoJCQkJ fQoJCQl9CgkJCWlmIChpc3NldCgkYWRpX2NvbnRhY3RfbGFiZWxzKSkKCQkJewoJCQkJZWNo byAiU1VQUExJRUQgTEFCRUxTIEZST00gYWRpX2NvbnRhY3RfbGFiZWxzOjxici8+IjsKCQkJ CWRtcCgkYWRpX2NvbnRhY3RfbGFiZWxzKTsKCQkJfQoJCX0KCgkJLy8gZmluYWxseSBzb21l IGphdmFzY3JpcHQgYWN0aW9uCgkJaWYgKCRyZXN0cmljdF9lcnJvcikKCQl7CgkJCSRtaXNz aW5nX2xpc3QgPSBhZGlfY29udGFjdF9saXRlcmFsKGpvaW4oJywnLCRuYW1lX2xpc3QpKTsg Ly8gZG9uJ3Qgd2FudCBzcGFjZXMgaW4gbGlzdAoJCQlpZiAoJGRlYnVnKQoJCQkJZWNobyAi TUlTU0lORyBMSVNUOjxici8+PHByZT4kbWlzc2luZ19saXN0PC9wcmU+IjsKCQkJcmV0dXJu IGFkaV9jb250YWN0X2phdmFzY3JpcHQoKS4nPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp cHQiPmFkZEVycm9yQ2xhc3MoJy4kbWlzc2luZ19saXN0LicpPC9zY3JpcHQ+JzsKCQl9CgkJ ZWxzZSBpZiAoJHJlcXVpcmVfZXJyb3IpIC8vICdyZXF1aXJlJyBlcnJvciBtZXNzYWdlcwoJ CXsKCQkJYWRpX2NvbnRhY3RfbWVzc2FnZSgiSWYgJiM4MjIwOzxzdHJvbmc+JGxhYmVsX2xp c3Q8L3N0cm9uZz4mIzgyMjE7IHN1cHBsaWVkIHRoZW4gJiM4MjIwOzxzdHJvbmc+JHJlcXVp cmVfbGFiZWxfbGlzdDwvc3Ryb25nPiYjODIyMTsgcmVxdWlyZWQuIiwkbWVzc2FnZSk7CgkJ CSRtaXNzaW5nX2xpc3QgPSBhZGlfY29udGFjdF9saXRlcmFsKGpvaW4oJywnLCRtaXNzaW5n X3JlcXVpcmVkKSk7IC8vIGRvbid0IHdhbnQgc3BhY2VzIGluIGxpc3QKCQkJcmV0dXJuIGFk aV9jb250YWN0X2phdmFzY3JpcHQoKS4nPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQi PmFkZEVycm9yQ2xhc3MoJy4kbWlzc2luZ19saXN0LicpPC9zY3JpcHQ+JzsKCQl9CgoJfQp9 CiI7czo4OiJoZWxwX3JhdyI7czo5NDc2OiJoMS4gKmFkaV9jb250YWN0KiAtIEZvcm0gZmll bGQgdmFsaWRhdGlvbiAmIHNwYW0gcHJldmVudGlvbgoKVGhpcyBwbHVnaW4gaXMgdXNlZCBp biBjb25qdW5jdGlvbiB3aXRoICJ6ZW1fY29udGFjdF9yZWJvcm4iOmh0dHA6Ly9mb3J1bS50 ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0yMzcyOCB0byBwcm92aWRlIHRoZSBm b2xsb3dpbmcgZnVuY3Rpb25hbGl0eToKCiogc3VibWl0dGVkIGZpZWxkIGNvbWJpbmF0aW9u IGNoZWNrCiogc3VibWl0dGVkIGZpZWxkIGNvbnRlbnQgdmFsaWRhdGlvbgoqIGFudGktc3Bh bSBtZWFzdXJlcwoKT25jZSBpbnN0YWxsZWQsIGEgY29sbGVjdGlvbiBvZiBuZXcgdGFncyBh cmUgYXZhaWxhYmxlOgoKKiAiYWRpX2NvbnRhY3RfY29tYm8iOiNhZGlfY29udGFjdF9jb21i byAtIGRlZmluZSB2YWxpZCBjb21iaW5hdGlvbnMgb2Ygc3VibWl0dGVkIGZvcm0gZmllbGRz CiogImFkaV9jb250YWN0X3ZhbGlkYXRlIjojYWRpX2NvbnRhY3RfdmFsaWRhdGUgLSB2YWxp ZGF0ZSB0aGUgY29udGVudCBvZiBzdWJtaXR0ZWQgZm9ybSBmaWVsZHMKKiAiYWRpX2NvbnRh Y3Rfc3BhbSI6I2FkaV9jb250YWN0X3NwYW0gLSBibG9jayBzcGFtIGluIHN1Ym1pdHRlZCBm b3JtIGZpZWxkcwoqICJhZGlfY29udGFjdF9sYWJlbHMiOiNhZGlfY29udGFjdF9sYWJlbHMg LSBzcGVjaWZ5IGxhYmVscyB0byBiZSB1c2VkIGluIGVycm9yIG1lc3NhZ2VzCgpVc2UgdGhl IGFib3ZlIHRhZ3Mgd2l0aGluIGEgQDx0eHA6emVtX2NvbnRhY3Q+IC4uLiA8L3R4cDp6ZW1f Y29udGFjdD5AIGNvbnRhaW5lci4gQSAiZnVsbCBleGFtcGxlIjojYWRpX2NvbnRhY3RfZXhh bXBsZSBvZiB1c2FnZSBpcyBwcm92aWRlZCBhdCB0aGUgZW5kLgoKPGhyIC8+CgpoMigjYWRp X2NvbnRhY3RfY29tYm8pLiAqRm9ybSBmaWVsZCBjb21iaW5hdGlvbnMgKGFkaV9jb250YWN0 X2NvbWJvKSoKClNvbWV0aW1lcyBjZXJ0YWluIGNvbWJpbmF0aW9ucyBvZiBmb3JtIGZpZWxk cyBhcmUgcmVxdWlyZWQgZnJvbSB1c2VycywgZm9yIGV4YW1wbGU6CgoqIGZpbGwgaW4gYXQg bGVhc3Qgb25lIG9mICJMaWtlcyIsICJEaXNsaWtlcyIsICJPdGhlciBjb21tZW50cyIKKiBp ZiAiUGhvbmUgbnVtYmVyIiBpcyBmaWxsZWQgaW4gdGhlbiAiQmVzdCB0aW1lIHRvIGNhbGwi IGlzIGFsc28gcmVxdWlyZWQKCkZvciBleGFtcGxlIHRvIG1ha2Ugc3VyZSB0aGUgdXNlciBm aWxscyBpbiBhdCBsZWFzdCBvbmUgZmllbGQgaW4gYSBzcGVjaWZpZWQgbGlzdDoKCmJjLiA8 dHhwOnplbV9jb250YWN0PgogIC4uLgogIDx0eHA6emVtX2NvbnRhY3RfdGV4dGFyZWEgbmFt ZT0ibGlrZXMiIGxhYmVsPSJMaWtlcyIgcmVxdWlyZWQ9IjAiIC8+CiAgPHR4cDp6ZW1fY29u dGFjdF90ZXh0YXJlYSBuYW1lPSJkaXNsaWtlcyIgbGFiZWw9IkRpc2xpa2VzIiByZXF1aXJl ZD0iMCIgLz4KICA8dHhwOnplbV9jb250YWN0X3RleHRhcmVhIG5hbWU9ImNvbW1lbnRzIiBs YWJlbD0iT3RoZXIgY29tbWVudHMiIHJlcXVpcmVkPSIwIiAvPgogIDx0eHA6YWRpX2NvbnRh Y3RfY29tYm8gbmFtZXM9Imxpa2VzLGRpc2xpa2VzLGNvbW1lbnRzIgogICAgcmVzdHJpY3Q9 Im1pbiIgbnVtYmVyPSIxIiAvPgo8L3R4cDp6ZW1fY29udGFjdD4KCk9yIGlmIGFuIGV4dHJh IGZpZWxkIGhhcyB0byBiZSBmaWxsZWQgaW46CgpiYy4gPHR4cDp6ZW1fY29udGFjdD4KICAu Li4KICA8dHhwOnplbV9jb250YWN0X3RleHQgbmFtZT0icGhvbmUiIGxhYmVsPSJZb3VyIHBo b25lIG51bWJlciIKICAgIHJlcXVpcmVkPSIwIiAvPgogIDx0eHA6emVtX2NvbnRhY3RfdGV4 dCBuYW1lPSJ3aGVuIiBsYWJlbD0iV2hlbiBzaG91bGQgd2UgY2FsbCB5b3U/IgogICAgcmVx dWlyZWQ9IjAiIC8+CiAgPHR4cDphZGlfY29udGFjdF9jb21ibyBuYW1lcz0icGhvbmUiIHJl cXVpcmU9IndoZW4iIC8+CjwvdHhwOnplbV9jb250YWN0PgoKWW91IGNhbiBhbHNvIGdlbmVy YXRlIGN1c3RvbSBlcnJvciBtZXNzYWdlcyBieSB1c2luZyBAcmVxdWlyZWQ9IjAiQCBpbiB0 aGUgc3RhbmRhcmQgWkNSIHRhZ3MgYW5kIEByZXF1aXJlZD0iMSJAIGluICphZGlfY29udGFj dF9jb21ibyouICBGb3IgZXhhbXBsZToKCmJjLiA8dHhwOnplbV9jb250YWN0PgogIC4uLgog IDx0eHA6emVtX2NvbnRhY3RfdGV4dCBuYW1lPSJuYW1lIiBsYWJlbD0iTmFtZSIgcmVxdWly ZWQ9IjAiIC8+CiAgPHR4cDphZGlfY29udGFjdF9jb21ibyBuYW1lcz0ibmFtZSIgcmVxdWly ZWQ9IjEiIG1lc3NhZ2U9IkRvbid0IGJlIHNoeSEiLz4KPC90eHA6emVtX2NvbnRhY3Q+CgpO byByZWFsIG1hZ2ljIGhlcmUgLSBAcmVxdWlyZWQ9IjEiQCBpcyBhY3R1YWxseSB0aGUgZXF1 aXZhbGVudCBvZiBAcmVzdHJpY3Q9ImVxdWFsIiBudW1iZXI9IjEiQC4KCmgzLiAqYWRpX2Nv bnRhY3RfY29tYm8qIC0gYXR0cmlidXRlcwoKQG5hbWVzPSJuYW1lIGxpc3QiQAoKLSBjb21t YSBzZXBhcmF0ZWQgbGlzdCBvZiBmaWVsZCBuYW1lcyB0aGF0IGFyZSBvZiBpbnRlcmVzdC4g RGVmYXVsdCA9ICIiIChub25lKS4KCkByZXN0cmljdD0icmVzdHJpY3Rpb24iQAoKLSBkZWZp bmVzIGEgbWluaW11bSAoQG1pbkApLCBhIG1heGltdW0gKEBtYXhAKSwgb3IgYW4gZXhhY3Qg bnVtYmVyIChAZXF1YWxAKSwKCkBudW1iZXI9ImludGVnZXIiQAoKLSBudW1iZXIgb2YgZmll bGRzLCB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggQHJlc3RyaWN0QC4KCkByZXF1aXJlPSJu YW1lIGxpc3QiQAoKLSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBmaWVsZCBuYW1lcyB0aGF0 IGFyZSByZXF1aXJlZCwgZGVwZW5kaW5nIG9uIHRoZSBwcmVzZW5jZSBvZiBmaWVsZHMgaW4g QG5hbWVzQCBsaXN0LgoKQHJlcXVpcmVkPSJib29sZWFuQCIKCi0gdGhlIHNwZWNpZmllZCBm aWVsZCBpcyByZXF1aXJlZCAodXNlZnVsIGZvciBjcmVhdGluZyBjdXN0b20gZXJyb3IgbWVz c2FnZXMpLiAgRGVmYXVsdCA9ICIwIiAobm90IHJlcXVpcmVkKS4KCkBjaGVja2JveD0iYm9v bGVhbkAiCgotIHRoZSBzcGVjaWZpZWQgZmllbGRzIGFyZSBjaGVja2JveGVzLCBzbyB0ZXN0 IGZvciBZZXMvTm8uICBEZWZhdWx0ID0gIjAiIChub3QgY2hlY2tib3hlcykuCgpAbWVzc2Fn ZT0idGV4dCJACgotIGFsdGVybmF0aXZlIGVycm9yIG1lc3NhZ2UgKHNlZSBiZWxvdyBmb3Ig bGlzdCBvZiBwbGFjZWhvbGRlcnMpLgoKPGhyIC8+CgpoMigjYWRpX2NvbnRhY3RfdmFsaWRh dGUpLiAqRm9ybSBmaWVsZCB2YWxpZGF0aW9uIChhZGlfY29udGFjdF92YWxpZGF0ZSkqCgpU aGlzIGVuYWJsZXMgdGhlIGNvbnRlbnRzIG9mIGZpZWxkcyB0byBiZSB2YWxpZGF0ZWQsIGZv ciBleGFtcGxlIHRvIGNoZWNrIHRoYXQgYSBwaG9uZSBudW1iZXIgZmllbGQgaGFzIGJlZW4g ZmlsbGVkIGluIHByb3Blcmx5OgoKYmMuIDx0eHA6YWRpX2NvbnRhY3RfdmFsaWRhdGUgbmFt ZXM9ImhvbWVfcGhvbmUiIHR5cGU9InBob25lIiAvPgoKaDMuICphZGlfY29udGFjdF92YWxp ZGF0ZSogLSBhdHRyaWJ1dGVzCgpAbmFtZXM9Im5hbWUgbGlzdCJACgotIGNvbW1hIHNlcGFy YXRlZCBsaXN0IG9mIGZpZWxkIG5hbWVzIHRoYXQgc2hvdWxkIGJlIHZhbGlkYXRlZC4gRGVm YXVsdCA9ICIiIChub25lKS4KCkB0eXBlPSJ2YWxpZGF0aW9uIkAKCi0gdGhlIHR5cGUgb2Yg dmFsaWRhdGlvbiB0aGF0IGlzIHJlcXVpcmVkOgoKKiBAYWxwaGFAIC0gYWxwaGFiZXRpYyBj aGFyYWN0ZXJzCiogQGFscGhhbnVtQCAtIGFscGhhLW51bWVyaWMgY2hhcmFjdGVycwoqIEBp bnRlZ2VyQCAtIGRpZ2l0cyBvbmx5CiogQG51bWVyaWNAIC0gYSBudW1iZXIgKGUuZy4gKzAx MjMuNDVlNiBpcyBhIG51bWJlcikKKiBAcGhvbmVAIC0gcGhvbmUgbnVtYmVyIChpLmUuIDAt OSArIC0gLiAsICgpIHhYIHNwYWNlKQoqIEB1cmxAIC0gYSBVUkwgKHdpdGggb3Igd2l0aG91 dCAiaHR0cDovLyIpCiogQGN1c3RvbUAgLSB1c2UgaW4gY29uanVuY3Rpb24gd2l0aCBAcGF0 dGVybkAKCkBhbGxvd193aGl0ZXNwYWNlPSJib29sZWFuIkAKCi0gYWxsb3cgd2hpdGVzcGFj ZSAoaS5lLiBzcGFjZSwgdGFiLCBuZXdsaW5lcyBldGMpIGluIGFkZGl0aW9uIHRvIHRoYXQg c3BlY2lmaWVkIGluIEB0eXBlQC4gRGVmYXVsdCA9ICIwIiAoTm8pLgoKQHBhdHRlcm49InBh dHRlcm4gc3RyaW5nIkAKCi0gYSBwYXR0ZXJuIHRoYXQgd2lsbCBiZSBkcm9wcGVkIHN0cmFp Z2h0IGludG8gQHByZWdfbWF0Y2hALiAgVXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIEB0eXBl PSJjdXN0b20iQC4gIERlZmF1bHQgPSAiIiAobm9uZSkuCgpAbWVzc2FnZT0idGV4dCJACgot IGFsdGVybmF0aXZlIGVycm9yIG1lc3NhZ2UuCgo8aHIgLz4KCmgyKCNhZGlfY29udGFjdF9z cGFtKS4gKlNwYW0gcHJldmVudGlvbiAoYWRpX2NvbnRhY3Rfc3BhbSkqCgpUaGlzIHdpbGwg cHJldmVudCBlbWFpbCBoZWFkZXIgaW5qZWN0aW9uIGFuZCBzdG9wIGVtYWlscyB0aGF0IGNv bnRhaW4gbGlua3MgKHdoaWNoIGlzLCBhZnRlciBhbGwsIHdoYXQgc3BhbW1lcnMgd2FudCB0 byBzZW5kIHlvdSkuCgpCeSBkZWZhdWx0ICphZGlfY29udGFjdF9zcGFtKiB3aWxsIGNoZWNr IGFsbCBmaWVsZHMsIHNvIGlmIHlvdSB3YW50IHVzZXJzIHRvIHNlbmQgeW91IGxpbmtzIHRo ZW4gdXNlIHRoZSBAZXhjbHVkZUAgYXR0cmlidXRlOgoKYmMuIDx0eHA6emVtX2NvbnRhY3Q+ CiAgLi4uCiAgPHR4cDp6ZW1fY29udGFjdF90ZXh0IG5hbWU9IndlYnNpdGUiIGxhYmVsPSJZ b3VyIHdlYnNpdGUgVVJMIiAvPgogIDx0eHA6YWRpX2NvbnRhY3Rfc3BhbSBleGNsdWRlPSJ3 ZWJzaXRlIiAvPgo8L3R4cDp6ZW1fY29udGFjdD4KCmgzLiAqYWRpX2NvbnRhY3Rfc3BhbSog LSBhdHRyaWJ1dGVzCgpAbmFtZXM9Im5hbWUgbGlzdCJACgotIGNvbW1hIHNlcGFyYXRlZCBs aXN0IG9mIGZpZWxkIG5hbWVzIHRoYXQgc2hvdWxkIGJlIGNoZWNrZWQuIERlZmF1bHQgPSAi IiAoYWxsIHN1Ym1pdHRlZCBmaWVsZHMpLgoKQGV4Y2x1ZGU9Im5hbWUgbGlzdCJACgotIGNv bW1hIHNlcGFyYXRlZCBsaXN0IG9mIGZpZWxkIG5hbWVzIHRoYXQgc2hvdWxkIF9OT1RfIGJl IGNoZWNrZWQuIERlZmF1bHQgPSAiIiAobm9uZSkuCgpAZGV0ZWN0X21haWxfaGVhZGVycz0i Ym9vbGVhbiJACgotIGRldGVjdCB0aGUgcHJlc2VuY2Ugb2YgQHRvOkAsIEBmcm9tOkAsIEBi Y2M6QCwgQG11bHRpcGFydEAsIEBjYzpALCBAQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzpA LCBAQ29udGVudC1UeXBlOkAsIEBNaW1lLVZlcnNpb246QCBhbmQgZmxhZyBhcyBzcGFtIGlm IGZvdW5kLiBEZWZhdWx0ID0gIjEiIChZZXMpLgoKQGRldGVjdF9saW5rX3RhZ3M9ImJvb2xl YW4iQAoKLSBkZXRlY3QgdGhlIHByZXNlbmNlIG9mIEBbdXJsQCwgQGh0dHBALCBAd3d3QCwg QGhyZWZAIGFuZCBmbGFnIGFzIHNwYW0gaWYgZm91bmQuIERlZmF1bHQgPSAiMSIgKFllcyku CgpAYWxsb3dfd3d3PSJib29sZWFuIkAKCi0gYWxsb3cgdGhlIHByZXNlbmNlIG9mIEB3d3dA IGFuZCBkbyBub3QgZmxhZyBhcyBzcGFtLiBEZWZhdWx0ID0gIjAiIChObykuCgpAbWVzc2Fn ZT0idGV4dCJACgotIGFsdGVybmF0aXZlIGVycm9yIG1lc3NhZ2UuCgo8aHIgLz4KCmgyKCNh ZGlfY29udGFjdF9sYWJlbHMpLiAqRXJyb3IgbWVzc2FnZXMsIGxhYmVscyBhbmQgc3R5bGlu ZyAoYWRpX2NvbnRhY3RfbGFiZWxzICYgdGhlICdtZXNzYWdlJyBhdHRyaWJ1dGUpKgoKaDMu ICpUaGUgJ21lc3NhZ2UnIGF0dHJpYnV0ZSoKClRoZSAqYWRpX2NvbnRhY3QqIHRhZ3Mgd2ls bCBnZW5lcmF0ZSBzdGFuZGFyZCBtZXNzYWdlcyBpbiBFbmdsaXNoLiBUaGUgbWVzc2FnZXMg Y2FuIGJlIGN1c3RvbWlzZWQgYnkgdXNpbmcgdGhlIEBtZXNzYWdlPSIiQCBhdHRyaWJ1dGU6 CgoqIGFsdGVyIHRoZSBzdGFuZGFyZCBtZXNzYWdlCiogdHJhbnNsYXRlIHRoZSBzdGFuZGFy ZCBtZXNzYWdlIGludG8gb3RoZXIgbGFuZ3VhZ2VzCiogdXNlIFtOQU1FU10gKCduYW1lcycg YXR0cmlidXRlKSwgW1JFUVVJUkVdICgncmVxdWlyZScgYXR0cmlidXRlKSAmIFtOVU1CRVJd ICgnbnVtYmVyJyBhdHRyaWJ1dGUpIHBsYWNlaG9sZGVycwoKVGhlICphZGlfY29udGFjdCog ZXJyb3IgbWVzc2FnZXMgYXJlIHBsYWNlZCBpbiB0aGUgc2FtZSBsaXN0IGFzIHRoZSBzdGFu ZGFyZCAqemVtX2NvbnRhY3QqIGVycm9yIG1lc3NhZ2VzLgoKaDMuICphZGlfY29udGFjdF9s YWJlbHMqIC0gYXR0cmlidXRlcwoKQG5hbWUxPSJsYWJlbCBzdHJpbmcgMSIgbmFtZTI9Imxh YmVsIHN0cmluZyAyIkAKCi0gdGhlIGxhYmVscyB0byB1c2UgaW4gKmFkaV9jb250YWN0KiBl cnJvciBtZXNzYWdlcy4KCipJbXBvcnRhbnQ6KiBUaGUgYWRpX2NvbnRhY3RfbGFiZWxzIHRh ZyBfTVVTVF8gYmUgcGxhY2VkIGluIHRoZSBwYWdlL2Zvcm0gX2JlZm9yZV8gb3RoZXIgKmFk aV9jb250YWN0KiB0YWdzIC0gb3RoZXJ3aXNlIHlvdXIgbGFiZWwgc3RyaW5ncyB3b24ndCBi ZSBwaWNrZWQgdXAuCgpFeGFtcGxlOgoKYmMuIDx0eHA6YWRpX2NvbnRhY3RfbGFiZWxzIHBo b25lPSJQaG9uZSBudW1iZXIiIHdoZW49IldoZW4gdG8gY2FsbCIKICBsaWtlcz0iTGlrZXMi IGRpc2xpa2VzPSJEaXNsaWtlcyIgY29tbWVudHM9IkNvbW1lbnRzIiAvPgoKTm90ZXM6Cgoq IGEgbGFiZWwgc3BlY2lmaWVkIHdpdGggKmFkaV9jb250YWN0X2xhYmVscyogZG9lcyBub3Qg aGF2ZSB0byBtYXRjaCB0aGUgYWN0dWFsIGxhYmVsIHVzZWQgaW4gdGhlIGZvcm0KKiBsYWJl bHMgc3BlY2lmaWVkIHdpdGggKmFkaV9jb250YWN0X2xhYmVscyogYXJlIG9ubHkgdXNlZCBp biAqYWRpX2NvbnRhY3QqIGVycm9yIG1lc3NhZ2VzCiogdGhlIGVycm9yIG1lc3NhZ2VzIHdp bGwgdXNlIGxhYmVscyBpbiB0aGUgZm9sbG93aW5nIG9yZGVyIG9mIHByZWZlcmVuY2U6Cioq IGxhYmVsIHNwZWNpZmllZCBpbiAqYWRpX2NvbnRhY3RfbGFiZWxzKgoqKiBmb3JtIGxhYmVs IHJldHJpZXZlZCBmcm9tICp6ZW1fY29udGFjdCogKGJ1dCBvbmx5IGlmIGEgZmllbGQgaGFz IGJlZW4gZmlsbGVkIGluICYgc3VibWl0dGVkKQoqKiB0aGUgZmllbGQgbmFtZSAod2l0aCBm aXJzdCBsZXR0ZXIgaW4gdXBwZXIgY2FzZSkKCmgzLiAqU3R5bGluZyoKClRoZSBzdGFuZGFy ZCAqemVtX2NvbnRhY3QqIGNsYXNzIG9mIEB6ZW1SZXF1aXJlZGVycm9yRWxlbWVudEAgaXMg YXV0b21hdGljYWxseSBhZGRlZCB0byBsYWJlbCBhbmQgaW5wdXQgZWxlbWVudHMgd2hlbiBl cnJvcnMgYXJlIGZvdW5kLgoKQW4gZXh0cmEgY2xhc3Mgb2YgQGFkaV9jb250YWN0X2Vycm9y QCBpcyBhbHNvIGFkZGVkIHRvIGZhY2lsaXRhdGUgYWRkaXRpb25hbCBzdHlsaW5nIG9wdGlv bnMuCgo8aHIgLz4KCmgyKCNhZGlfY29udGFjdF9leGFtcGxlKS4gKlRoZSBGdWxsIE1vbnR5 IEV4YW1wbGUqCgpUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgb2YgYSB1c2VyIGZlZWRi YWNrIGZvcm06CgpiYy4uIDx0eHA6emVtX2NvbnRhY3QgdG89J21lQGV4YW1wbGUuY29tJyBz dWJqZWN0PSdGZWVkYmFjayBmb3JtIGV4YW1wbGUnPgoKICA8cD5QbGVhc2UgZmlsbCBpbiB0 aGUgZm9ybTo8L3A+CgogIDwtLSB0aGUgZmVlZGJhY2sgZm9ybSBwcmVzZW50ZWQgdG8gdGhl IHVzZXIgLS0+CiAgPHR4cDp6ZW1fY29udGFjdF90ZXh0IG5hbWU9Im5hbWUiIGxhYmVsPSJO YW1lIiAvPgogIDx0eHA6emVtX2NvbnRhY3RfZW1haWwgbmFtZT0iZW1haWwiIC8+CiAgPHR4 cDp6ZW1fY29udGFjdF90ZXh0IG5hbWU9InBob25lIiBsYWJlbD0iWW91ciBwaG9uZSBudW1i ZXIiIHJlcXVpcmVkPSIwIiAvPgogIDx0eHA6emVtX2NvbnRhY3RfdGV4dCBuYW1lPSJ3aGVu IiBsYWJlbD0iV2hlbiBzaG91bGQgd2UgY2FsbCB5b3U/IiByZXF1aXJlZD0iMCIgLz4KICA8 dHhwOnplbV9jb250YWN0X3RleHRhcmVhIG5hbWU9Imxpa2VzIiBsYWJlbD0iTGlrZXMiIHJl cXVpcmVkPSIwIiAvPgogIDx0eHA6emVtX2NvbnRhY3RfdGV4dGFyZWEgbmFtZT0iZGlzbGlr ZXMiIGxhYmVsPSJEaXNsaWtlcyIgcmVxdWlyZWQ9IjAiIC8+CiAgPHR4cDp6ZW1fY29udGFj dF90ZXh0YXJlYSBuYW1lPSJjb21tZW50cyIgbGFiZWw9Ik90aGVyIGNvbW1lbnRzIiByZXF1 aXJlZD0iMCIgLz4KICA8dHhwOnplbV9jb250YWN0X3N1Ym1pdCBsYWJlbD0iU2VuZCBmZWVk YmFjayIgLz4KCiAgPC0tIHNwZWNpZnkgbGFiZWxzIHRvIGJlIHVzZWQgaW4gZXJyb3IgbWVz c2FnZXMgLS0+CiAgPHR4cDphZGlfY29udGFjdF9sYWJlbHMgcGhvbmU9IlBob25lIG51bWJl ciIgd2hlbj0iV2hlbiB0byBjYWxsIiBjb21tZW50cz0iQ29tbWVudHMiIC8+CgogIDwtLSBh dCBsZWFzdCBvbmUgb2YgImxpa2VzLGRpc2xpa2VzLGNvbW1lbnRzIiByZXF1aXJlZCAtLT4K ICA8dHhwOmFkaV9jb250YWN0X2NvbWJvIG5hbWVzPSJsaWtlcyxkaXNsaWtlcyxjb21tZW50 cyIgcmVzdHJpY3Q9Im1pbiIgbnVtYmVyPSIxIiAvPgoKICA8LS0gaWYgInBob25lIiBzdXBw bGllZCB0aGVuICJ3aGVuIiByZXF1aXJlZCBhcyB3ZWxsOyBpbmNsdWRlIGN1c3RvbSBlcnJv ciBtZXNzYWdlIC0tPgogIDx0eHA6YWRpX2NvbnRhY3RfY29tYm8gbmFtZXM9InBob25lIiBy ZXF1aXJlPSJ3aGVuIgogICAgbWVzc2FnZT0iWW91J3ZlIG9ubHkgZ2l2ZW4gbWUgW05BTUVT XSBidXQgSSBuZWVkIHRvIGtub3cgW1JFUVVJUkVdIHRvbyIgLz4KCiAgPC0tIHZhbGlkYXRl IHRoZSBwaG9uZSBudW1iZXIgLS0+CiAgPHR4cDphZGlfY29udGFjdF92YWxpZGF0ZSBuYW1l cz0icGhvbmUiIHR5cGU9InBob25lIiAvPgoKICA8LS0gY2hlY2sgZm9yIHNwYW0gYnV0IGFs bG93IHVzZXIgdG8gc2VuZCBzaW1wbGUgInd3dy4iIFVSTHMgLS0+CiAgPHR4cDphZGlfY29u dGFjdF9zcGFtIGFsbG93X3d3dz0iMSIgLz4KCjwvdHhwOnplbV9jb250YWN0PgoKaDMuICpO b3RlczoqCgoqIHRoZSBAPHR4cDphZGlfY29udGFjdF9sYWJlbHMgLz5AIHRhZyBpcyBwbGFj ZWQgYmVmb3JlIHRoZSBvdGhlciAqYWRpX2NvbnRhY3QqIHRhZ3MKKiBvbmx5IHRoZSBsYWJl bHMgZm9yIEBwaG9uZUAsIEB3aGVuQCAmIEBjb21tZW50c0AgYXJlIHNwZWNpZmllZCBiZWNh dXNlIHRoZXkgYXJlIGRpZmZlcmVudCBmcm9tIHRoZSBhY3R1YWwgZm9ybSBsYWJlbHMKCmgy KGFkaV9leHRyYXMpLiAqQWRkaXRpb25hbCBpbmZvcm1hdGlvbioKCnAoYWRpX2V4dHJhcyku IFN1cHBvcnQgYW5kIGZ1cnRoZXIgaW5mb3JtYXRpb24gY2FuIGJlIG9idGFpbmVkIGZyb20g dGhlICJUZXh0cGF0dGVybiBzdXBwb3J0IGZvcnVtIjpodHRwOi8vZm9ydW0udGV4dHBhdHRl cm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9MzAxMzAuIEEgY29weSBvZiB0aGlzIGhlbHAgaXMg YWxzbyBhdmFpbGFibGUgIm9ubGluZSI6aHR0cDovL3d3dy5ncmVhdG9jZWFubWVkaWEuY29t LmF1L3R4cC8/cGx1Z2luPWFkaV9jb250YWN0LiAgTW9yZSBhZGlfcGx1Z2lucyBjYW4gYmUg Zm91bmQgImhlcmUiOmh0dHA6Ly93d3cuZ3JlYXRvY2Vhbm1lZGlhLmNvbS5hdS90eHAvLiI7 czozOiJtZDUiO3M6MzI6IjI4YjA1MzlkMWI4Mzg0MDg5ZWY3NTkzNThkZjQxYmEwIjt9