<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE module [
          <!ELEMENT module (dtdversion,name,version,description*,help*,about*,requires*,file+)>
          <!ELEMENT dtdversion (#PCDATA)>
          <!ELEMENT name (#PCDATA)>
          <!ELEMENT version (#PCDATA)>
          <!ELEMENT mincmsversion (#PCDATA)>
          <!ELEMENT description (#PCDATA)>
          <!ELEMENT help (#PCDATA)>
          <!ELEMENT about (#PCDATA)>
          <!ELEMENT requires (requiredname,requiredversion)>
          <!ELEMENT requiredname (#PCDATA)>
          <!ELEMENT requiredversion (#PCDATA)>
          <!ELEMENT file (filename,isdir,data)>
          <!ELEMENT filename (#PCDATA)>
          <!ELEMENT isdir (#PCDATA)>
          <!ELEMENT data (#PCDATA)>
        ]>
<module>
	<dtdversion>1.3</dtdversion>
	<name>SmartyExt</name>
	<version>1.2</version>
    <mincmsversion>2.1.4</mincmsversion>
	<help><![CDATA[PHN0eWxlPgoqCnsKICBib3gtc2l6aW5nOiBib3JkZXItYm94Owp9CgouY2xpY2stdG8tY29weQp7CiAgY3Vyc29yOnBvaW50ZXI7Cn0KCi5zbWFsbAp7CiAgZm9udC1zaXplOiA4NSU7CiAgbWFyZ2luOiAwIDAgMCAxNXB4Owp9Cgp1bC5hY2NvcmRpb24tbGlzdAp7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIGRpc3BsYXk6IGJsb2NrOwogIHdpZHRoOiA5NiUgIWltcG9ydGFudDsKICBoZWlnaHQ6IGF1dG87CiAgcGFkZGluZzogMjBweDsKICBtYXJnaW46IDA7CiAgbGlzdC1zdHlsZTogbm9uZTsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjlmOWZBOwp9Cgp1bC5hY2NvcmRpb24tbGlzdCAuYWNjb3JkaW9uLWxpc3QtaXRlbQp7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIGRpc3BsYXk6IGJsb2NrOwogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogYXV0bzsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGOwogIHBhZGRpbmc6IDIwcHg7CiAgbWFyZ2luOiAwIGF1dG8gMTVweCBhdXRvOwogIGJvcmRlcjogMXB4IHNvbGlkICNlZWU7CiAgYm9yZGVyLXJhZGl1czogNXB4Owp9Cgp1bC5hY2NvcmRpb24tbGlzdCAuYWNjb3JkaW9uLWxpc3QtaXRlbS5hY3RpdmUgaDMuYWw6YWZ0ZXIKewogIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTsKfQoKdWwuYWNjb3JkaW9uLWxpc3QgLmFjY29yZGlvbi1saXN0LWl0ZW0gaDMuYWwKewogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgLyp0ZXh0LWRlY29yYXRpb24tbGluZTogdW5kZXJsaW5lOyovCiAgcG9zaXRpb246IHJlbGF0aXZlOwogIGRpc3BsYXk6IGJsb2NrOwogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogYXV0bzsKICBwYWRkaW5nOiAwIDAgMCAwOwogIG1hcmdpbjogMDsKICBmb250LXNpemU6IDE1cHg7CiAgbGV0dGVyLXNwYWNpbmc6IDAuMDFlbTsKICBjdXJzb3I6IHBvaW50ZXI7Cn0KCnVsLmFjY29yZGlvbi1saXN0IC5hY2NvcmRpb24tbGlzdC1pdGVtIGgzLmFsOmFmdGVyCnsKICBjb250ZW50OiAiKyI7Ci8gLyBmb250LWZhbWlseTogIm1hdGVyaWFsLWRlc2lnbi1pY29uaWMtZm9udCI7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHJpZ2h0OiAwOwogIHRvcDogMDsKICBjb2xvcjogIzE0N2ZkYjsKICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlLWluLW91dDsKICBmb250LXNpemU6IDE4cHg7Cn0KCnVsLmFjY29yZGlvbi1saXN0IC5hY2NvcmRpb24tbGlzdC1pdGVtIGRpdi5hY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkKewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICBkaXNwbGF5OiBibG9jazsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IGF1dG87CiAgbWFyZ2luOiAzNXB4IDAgMTVweCAwOwogIHBhZGRpbmc6IDA7Cn0KCnVsLmFjY29yZGlvbi1saXN0IC5hY2NvcmRpb24tbGlzdC1pdGVtIGRpdi5hY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkgcAp7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIGRpc3BsYXk6IGJsb2NrOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgcGFkZGluZzogMCAwIDAgMDsKICBsaW5lLWhlaWdodDogMTUwJTsKICBtYXJnaW46IDAgMCAwIDA7CiAgZm9udC1zaXplOiAxNHB4Owp9CnVsLmhpZ2hsaWdodC1saXN0CnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWVlOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICBkaXNwbGF5OiBibG9jazsKICB3aWR0aDogODAlOwogIGhlaWdodDogYXV0bzsKICBtYXJnaW46IDE1cHg7CiAgcGFkZGluZzogMjVweDsKfQo8L3N0eWxlPgoKPHNjcmlwdCBzcmM9Imh0dHA6Ly9sb2NhbGhvc3QvQ01TTVMtMi00LURFVi1NT0RTL21vZHVsZXMvU21hcnR5RXh0L2pzL2pzLmNvb2tpZS5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgc3JjPSJodHRwOi8vbG9jYWxob3N0L0NNU01TLTItNC1ERVYtTU9EUy9tb2R1bGVzL1NtYXJ0eUV4dC9qcy9qcy5mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgoKPGRpdiBpZD0icGFnZV90YWJzIj4KICA8ZGl2ICBpZD0iZ2VuZXJhbCI+CiAgICAgIEdlbmVyYWwKICA8L2Rpdj4KICA8ZGl2ICBpZD0icGx1Z2lucyI+CiAgICAgIFBsdWdpbnMKICA8L2Rpdj4KICA8ZGl2ICBpZD0iY2xhc3MiPgogICAgICBDbGFzcwogIDwvZGl2PgogIDxkaXYgaWQ9Im5ldyI+CiAgICAgV2hhdCdzIE5ldwogIDwvZGl2PgogIDxkaXYgaWQ9ImFib3V0Ij4KICAgICBBYm91dAogIDwvZGl2Pgo8L2Rpdj4KPGRpdiBpZD0icGFnZV9jb250ZW50Ij4KICA8ZGl2IGlkPSJnZW5lcmFsX2MiPgogICAgPGgyPldoYXQgRG9lcyBUaGlzIERvPzwvaDI+CjxwPlRoaXMgbW9kdWxlIHByb3ZpZGVzIHNvbWUgc2ltcGxlIHNtYXJ0eSB1dGlsaXRpZXMgZm9yIHVzZSBpbiBhcHBsaWNhdGlvbnMgb3IgZm9yIGN1c3RvbWl6aW5nIHRoZSBiZWhhdmlvdXIgb2YgeW91ciBDTVMgTWFkZSBTaW1wbGUgcGFnZXMuPC9wPgo8cD5UaGUgY3VycmVudCBwbHVnaW5zIGxpc3Q6LjwvcD4KPHVsIGNsYXNzPSJoaWdobGlnaHQtbGlzdCI+CiAgPGxpPjxzdHJvbmc+JiMxMjM7bW9kX2FjdGlvbl91cmx9PC9zdHJvbmc+IC0gQ3JlYXRlIGFuIHVybCB0byBhIG1vZHVsZSBhY3Rpb247PC9saT4KICA8bGk+PHN0cm9uZz4mIzEyMzttb2RfYWN0aW9uX2xpbmt9PC9zdHJvbmc+IC0gQ3JlYXRlIGEgbGluayB0byBhIG1vZHVsZSBhY3Rpb247PC9saT4KICA8bGk+PHN0cm9uZz4mIzEyMzt4dF9hbmNob3JfbGlua308L3N0cm9uZz4gLSBHZW5lcmF0ZSBhIGxpbmsgdG8gYW4gYW5jaG9yIG9uIHRoZSBzYW1lIHBhZ2U7PC9saT4KICA8bGk+PHN0cm9uZz4mIzEyMztzZXNzX3B1dH08L3N0cm9uZz4gLSBTdG9yZSBkYXRhIGluIHRoZSB1c2VyIHNlc3Npb247PC9saT4KICA8bGk+PHN0cm9uZz4mIzEyMztzZXNzX2VyYXNlfTwvc3Ryb25nPiAtIEVyYXNlIGRhdGEgZnJvbSB0aGUgdXNlciBzZXNzaW9uOzwvbGk+CiAgPGxpPjxzdHJvbmc+JiMxMjM7eHRfcmVwZWF0fTwvc3Ryb25nPiAtIFJlcGVhdGluZyB0ZXh0OzwvbGk+CiAgPGxpPjxzdHJvbmc+JiMxMjM7Y29udGVudF9mZXRjaH08L3N0cm9uZz4gLSBGZXRjaCBhbmQgcmV1c2UgQ01TTVMgY29udGVudCA8c3BhbiBzdHlsZT0iY29sb3I6Z3JlZW4iPjxzdHJvbmc+KG5ldyk8L3N0cm9uZz4gPC9zcGFuPjs8L2xpPgogIDxsaT48c3Ryb25nPiYjMTIzO2ZpbGVzX2xpc3R9PC9zdHJvbmc+IC0gTGlzdCBmaWxlcyBhbmQgZm9sZGVycyA8c3BhbiBzdHlsZT0iY29sb3I6Z3JlZW4iPjxzdHJvbmc+KG5ldyk8L3N0cm9uZz4gPC9zcGFuPjs8L2xpPgogIDxsaT48c3Ryb25nPiYjMTIzO2NvbnRlbnRfcHJvdGVjdH08L3N0cm9uZz4gLSBQcm90ZWN0IGNvbnRlbnQgd2l0aCBhIHBhc3N3b3JkIDxzcGFuIHN0eWxlPSJjb2xvcjpncmVlbiI+PHN0cm9uZz4obmV3KTwvc3Ryb25nPiA8L3NwYW4+OzwvbGk+CjwvdWw+CjxwPkFkZGl0aW9uYWxseSwgdGhlIG1vZHVsZSByZWdpc3RlcnMgYSBjbGFzcywgPHN0cm9uZz4mIzEyMztzbXh9PC9zdHJvbmc+IHdpdGggdGhlIGZvbGxvd2luZyBtZXRob2RzOjwvcD4KPHVsIGNsYXNzPSJoaWdobGlnaHQtbGlzdCI+CiAgPGxpPjxzdHJvbmc+JiMxMjM7c214OjpzZWxmX3VybCgpfTwvc3Ryb25nPiAtIFJldHVybiB0aGUgY3VycmVudCBVUkw7PC9saT4KICA8bGk+PHN0cm9uZz4mIzEyMztzbXg6OmFuY2hvcl91cmwoLi4uKX08L3N0cm9uZz4gLSBVUkwgdG8gYW4gYW5jaG9yIG9uIHRoZSBzYW1lIHBhZ2U7PC9saT4KICA8bGk+PHN0cm9uZz4mIzEyMztzbXg6OnNteDo6bW9kdWxlX2luc3RhbGxlZCguLi4pfTwvc3Ryb25nPiAtIFRlc3QgaWYgYSBtb2R1bGUgaXMgaW5zdGFsbGVkOzwvbGk+CiAgPGxpPjxzdHJvbmc+JiMxMjM7c214Ojptb2R1bGVfdmVyc2lvbiguLi4pfTwvc3Ryb25nPiAtIFJldHVybiB0aGUgdmVyc2lvbiBvZiBhIG1vZHVsZTs8L2xpPgogIDxsaT48c3Ryb25nPiYjMTIzO3NteDo6Z2V0X3BhcmVudF9hbGlhcyguLi4pfTwvc3Ryb25nPiAtIFJldHVybnMgdGhlIGFsaWFzIG9mIHBhZ2UncyBwYXJlbnQ7PC9saT4KICA8bGk+PHN0cm9uZz4mIzEyMztzbXg6OmlzX2NoaWxkX29mKC4uLil9PC9zdHJvbmc+IC0gVGVzdHMgd2hldGhlciBpcyBhIGNoaWxkIG9mIHRoZSBzcGVjaWZpZWQgcGFyZW50IGFsaWFzOzwvbGk+CiAgPGxpPjxzdHJvbmc+JiMxMjM7c214OjpnZXRfcm9vdF9hbGlhcyguLi4pfTwvc3Ryb25nPiAtIFJldHVybnMgdGhlIGFsaWFzIG9mIGEgcGFnZSdzIHJvb3QgcGFyZW50OzwvbGk+CiAgPGxpPjxzdHJvbmc+JiMxMjM7c214OjpnZXRfcGFnZV90aXRsZSguLi4pfTwvc3Ryb25nPiAtIFJldHVybnMgdGhlIHRpdGxlIG9mIGEgcGFnZTs8L2xpPgogIDxsaT48c3Ryb25nPiYjMTIzO3NteDo6Z2V0X3BhZ2VfbWVudXRleHQoLi4uKX08L3N0cm9uZz4gLSBSZXR1cm5zIHRoZSBtZW51IHRleHQgb2YgYSBwYWdlOzwvbGk+CiAgPGxpPjxzdHJvbmc+JiMxMjM7c214OjpnZXRfcGFnZV90eXBlKC4uLil9PC9zdHJvbmc+IC0gUmV0dXJucyB0aGUgY29udGVudCB0eXBlIGJ5IGFsaWFzOzwvbGk+CiAgPGxpPjxzdHJvbmc+JiMxMjM7c214OjpoYXNfY2hpbGRyZW4oLi4uKX08L3N0cm9uZz4gLSBUZXN0IGlmIGEgcGFnZSBoYXMgY2hpbGRyZW47PC9saT4KICA8bGk+PHN0cm9uZz4mIzEyMztzbXg6OmdldF9jaGlsZHJlbiguLi4pfTwvc3Ryb25nPiAtIEdldCBpbmZvcm1hdGlvbiBhYm91dCBhIHBhZ2UncyBjaGlsZHJlbjs8L2xpPgogIDxsaT48c3Ryb25nPiYjMTIzO3NteDo6Z2V0X3BhZ2VfY29udGVudCguLi4pfTwvc3Ryb25nPiAtIFJldHVybnMgdGhlIHRleHQgb2YgYSBjb250ZW50IGJsb2NrIG9mIGFub3RoZXIgcGFnZTs8L2xpPgogIDxsaT48c3Ryb25nPiYjMTIzO3NteDo6Z2V0X3NpYmxpbmcoLi4uKX08L3N0cm9uZz4gLSBSZXR1cm5zIHRoZSBhbGlhcyBvZiB0aGUgbmV4dCBvciBwcmV2aW91cyBzaWJsaW5nOzwvbGk+CiAgPGxpPjxzdHJvbmc+JiMxMjM7c214OjpnZXRfcGFyYWxsZWxfcGFnZSguLi4pfTwvc3Ryb25nPiAtIEdldCB0aGUgYWxpYXMgb2YgYSBwYXJhbGxlbCBwYWdlIGluIHRoZSBwYWdlIHN0cnVjdHVyZTs8L2xpPgogIDxsaT48c3Ryb25nPiYjMTIzO3NteDo6Z2V0X3BhcmFsbGVsX3VybCguLi4pfTwvc3Ryb25nPiAtIEdldCB0aGUgVVJMIG9mIGEgcGFyYWxsZWwgcGFnZSBpbiB0aGUgcGFnZSBzdHJ1Y3R1cmU7PC9saT4KICA8bGk+PHN0cm9uZz4mIzEyMztzbXg6OmdldF9maWxlX2xpc3RpbmcoLi4uKX08L3N0cm9uZz4gLSBSZXR1cm4gYSBsaXN0IG9mIGZpbGVzIGluIGEgZGlyZWN0b3J5IDs8L2xpPgo8L3VsPgoKPHA+UGxlYXNlIHJlZmVyIHRvIHRoZSB0YWJzIGRlc2NyaWJpbmcgZWFjaCBwbHVnaW4gYW5kIGZ1bmN0aW9uIGZvciBoZWxwIG9uIGhvdyB0byB1c2UgaXQuPC9wPiAgPC9kaXY+CiAgPGRpdiBpZD0icGx1Z2luc19jIj4KICAgIDxoMj5TbWFydHkgcGx1Z2luczwvaDI+CjxwPlRoaXMgaXMgYSBsaXN0IG9mIHRoZSBwbHVnaW5zIGF2YWlsYWJsZSBmcm9tIHRoaXMgbW9kdWxlIHdpdGggaW5zdHJ1Y3Rpb25zIGFuZCBzYW1wbGUgdXNlcy48L3A+Cgo8dWwgY2xhc3M9ImFjY29yZGlvbi1saXN0Ij4KICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPgogICAgPGgzIGNsYXNzPSJhbCI+JiMxMjM7bW9kX2FjdGlvbl91cmx9IDxzcGFuIGNsYXNzPSJzbWFsbCI+Q3JlYXRlIGFuIHVybCB0byBhIG1vZHVsZSBhY3Rpb248L3NwYW4+PC9oMz4KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+CiAgICAgIDxwPkEgc21hcnR5IHBsdWdpbiB0aGF0IGNhbiBjcmVhdGUgYW4gdXJsIHRvIGEgbW9kdWxlIGFjdGlvbi48L3A+CiAgICAgIDxwPlBhcmFtZXRlcnM6PC9wPgogICAgICA8dWw+CiAgICAgICAgPGxpPjxzdHJvbmc+bW9kdWxlPC9zdHJvbmc+IC0gVGhlIG1vZHVsZSB0byBjcmVhdGUgYSBsaW5rIHRvLiBUaGlzIGFyZ3VtZW50IGlzIG9wdGlvbmFsLCB0aGUgc3lzdGVtIHdpbGwgYXR0ZW1wdCB0byBkZXRlY3QgdGhlIGN1cnJlbnQgbW9kdWxlIG5hbWUgKGlmIHdpdGhpbiBhIG1vZHVsZSBhY3Rpb24pPC9saT4KICAgICAgICA8bGk+PHN0cm9uZz5hY3Rpb248L3N0cm9uZz4gKGRlZmF1bHQpIC0gVGhlIGFjdGlvbiB0byBjYWxsIHdpdGhpbiB0aGUgbW9kdWxlPC9saT4KICAgICAgICA8bGk+PHN0cm9uZz5wYWdlPC9zdHJvbmc+IC0gU3BlY2lmeSB0aGUgZGVzdGluYXRpb24gcGFnZTwvbGk+CiAgICAgICAgPGxpPjxzdHJvbmc+anNmcmllbmRseTwvc3Ryb25nPiB8IDxzdHJvbmc+Zm9yanM8L3N0cm9uZz4gLSBUdXJucyBvbiB0aGUgdXJsb25seSBwYXJhbWV0ZXIsIGFuZCBpbmRpY2F0ZXMgdGhhdCBqYXZhc2NyaXB0IGZyaWVuZGx5IHVybHMgYXJlIG91dHB1dC48L2xpPgogICAgICAgIDxsaT48c3Ryb25nPmZvcmFqYXg8L3N0cm9uZz4gLSBUdXJucyBvbiB0aGUganNmcmllbmRseSBwYXJhbWV0ZXIgKGFuZCB0aGUgdXJsb25seSBwYXJhbWV0ZXIpLCBhbmQgYWxzbyBhcHBlbmRzIHNob3d0ZW1wbGF0ZT1mYWxzZSB0byB0aGUgVVJMIG91dHB1dCBmb3IgQUpBWCByZXF1ZXN0czwvbGk+CiAgICAgICAgPGxpPjxzdHJvbmc+YXNzaWduPC9zdHJvbmc+IC0gQXNzaWduIHRoZSBvdXRwdXQgb2YgdGhlIHBsdWdpbiB0byB0aGUgbmFtZWQgc21hcnR5IHZhcmlhYmxlLjwvbGk+CiAgICAgIDwvdWw+CgogICAgICA8cD5Bbnkgb3RoZXIgcGFyYW1ldGVycyB0byB0aGUgc21hcnR5IHBsdWdpbiB3aWxsIGJlIGFkZGVkIHRvIHRoZSBVUkwgZ2VuZXJhdGVkLjwvcD4KICAgICAgPHA+RXhhbXBsZTo8L3A+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjM7bW9kX2FjdGlvbl91cmwgbW9kdWxlPSdOZXdzJyBhY3Rpb249J2Zlc3VibWl0JyBhc3NpZ249J2Zvbyd9PC9wcmU+CiAgICA8L2Rpdj4KICA8L2xpPgogICAgICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPgogICAgPGgzIGNsYXNzPSJhbCI+JiMxMjM7bW9kX2FjdGlvbl9saW5rfSA8c3BhbiBjbGFzcz0ic21hbGwiPkNyZWF0ZSBhIGxpbmsgdG8gYSBtb2R1bGUgYWN0aW9uPC9zcGFuPjwvaDM+CiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPgogICAgICA8cD5BIHNtYXJ0eSBwbHVnaW4gdGhhdCBjYW4gY3JlYXRlIGEgbGluayB0byBhIG1vZHVsZSBhY3Rpb24uPC9wPgogICAgICA8cD5QYXJhbWV0ZXJzOjwvcD4KICAgICAgPHVsPgogICAgICAgIDxsaT48c3Ryb25nPm1vZHVsZTwvc3Ryb25nPiAtIFRoZSBtb2R1bGUgdG8gY3JlYXRlIGEgbGluayB0by4gVGhpcyBhcmd1bWVudCBpcyBvcHRpb25hbCwgdGhlIHN5c3RlbSB3aWxsIGF0dGVtcHQgdG8gZGV0ZWN0IHRoZSBjdXJyZW50IG1vZHVsZSBuYW1lIChpZiB3aXRoaW4gYSBtb2R1bGUgYWN0aW9uKTwvbGk+CiAgICAgICAgPGxpPjxzdHJvbmc+YWN0aW9uPC9zdHJvbmc+IChkZWZhdWx0KSAtIFRoZSBhY3Rpb24gdG8gY2FsbCB3aXRoaW4gdGhlIG1vZHVsZTwvbGk+CiAgICAgICAgPGxpPjxzdHJvbmc+dGV4dDwvc3Ryb25nPiAtIFRoZSB0ZXh0IHRvIHB1dCBpbiB0aGUgbGluazwvbGk+CiAgICAgICAgPGxpPjxzdHJvbmc+cGFnZTwvc3Ryb25nPiAtIFNwZWNpZnkgdGhlIGRlc3RpbmF0aW9uIHBhZ2U8L2xpPgogICAgICAgIDxsaT48c3Ryb25nPnVybG9ubHk8L3N0cm9uZz4gLSBJbnN0ZWFkIG9mIGdlbmVyYXRpbmcgYSBsaW5rLCBnZW5lcmF0ZSBqdXN0IHRoZSB1cmw8L2xpPgogICAgICAgIDxsaT48c3Ryb25nPmpzZnJpZW5kbHk8L3N0cm9uZz4gfCA8c3Ryb25nPmZvcmpzPC9zdHJvbmc+IC0gVHVybnMgb24gdGhlIHVybG9ubHkgcGFyYW1ldGVyLCBhbmQgaW5kaWNhdGVzIHRoYXQgamF2YXNjcmlwdCBmcmllbmRseSB1cmxzIGFyZSBvdXRwdXQuPC9saT4KICAgICAgICA8bGk+PHN0cm9uZz5mb3JhamF4PC9zdHJvbmc+IC0gVHVybnMgb24gdGhlIGpzZnJpZW5kbHkgcGFyYW1ldGVyIChhbmQgdGhlIHVybG9ubHkgcGFyYW1ldGVyKSwgYW5kIGFsc28gYXBwZW5kcyBzaG93dGVtcGxhdGU9ZmFsc2UgdG8gdGhlIFVSTCBvdXRwdXQgZm9yIEFKQVggcmVxdWVzdHM8L2xpPgogICAgICAgIDxsaT48c3Ryb25nPmNvbmZtZXNzYWdlPC9zdHJvbmc+IC0gQSBjb25maXJtYXRpb24gbWVzc2FnZSB0byBkaXNwbGF5IHdoZW4gdGhlIGxpbmsgaXMgY2xpY2tlZC48L2xpPgogICAgICAgIDxsaT48c3Ryb25nPmltYWdlPC9zdHJvbmc+IC0gQW4gaW1hZ2UgdG8gdXNlIG9uIHRoZSBsaW5rPC9saT4KICAgICAgICA8bGk+PHN0cm9uZz5pbWFnZW9ubHk8L3N0cm9uZz4gLSBJZiBhbiBpbWFnZSBpcyBzcGVjaWZpZWQsIGNyZWF0ZSBhIGxpbmsgb25seSBjb25zaXN0aW5nIG9mIHRoZSBpbWFnZS4gVGhlIHRleHQgd2lsbCBiZSB1c2VkIGZvciB0aGUgdGl0bGUgYXR0cmlidXRlPC9saT4KICAgICAgICA8bGk+PHN0cm9uZz5hc3NpZ248L3N0cm9uZz4gLSBBc3NpZ24gdGhlIG91dHB1dCBvZiB0aGUgcGx1Z2luIHRvIHRoZSBuYW1lZCBzbWFydHkgdmFyaWFibGUuPC9saT4KICAgICAgPC91bD4KCiAgICAgIDxwPkFueSBvdGhlciBhcmd1bWVudHMgdG8gdGhlIHNtYXJ0eSBwbHVnaW4gd2lsbCBiZSBhZGRlZCB0byB0aGUgVVJMIGdlbmVyYXRlZC48L3A+CiAgICAgIDxwPkV4YW1wbGU6PC9wPgogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiYjMTIzO21vZF9hY3Rpb25fbGluayBtb2R1bGU9J05ld3MnIGFjdGlvbj0nZmVzdWJtaXQnIHRleHQ9J1N1Ym1pdCBhIE5ldyBOZXdzIEFydGljbGUnfTwvcHJlPgogICAgPC9kaXY+CiAgPC9saT4KICAgICAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4KICAgIDxoMyBjbGFzcz0iYWwiPiYjMTIzO3h0X2FuY2hvcl9saW5rfSA8c3BhbiBjbGFzcz0ic21hbGwiPkdlbmVyYXRlIGEgbGluayB0byBhbiBhbmNob3Igb24gdGhlIHNhbWUgcGFnZTwvc3Bhbj48L2gzPgogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4KICAgICAgPHA+QSBzbWFydHkgcGx1Z2luIHRvIGdlbmVyYXRlIGEgbGluayB0byBhbiBhbmNob3IgdGhhdCBpcyBvbiB0aGUgc2FtZSBwYWdlLjwvcD4KICAgICAgPHA+UGFyYW1ldGVyczo8L3A+CiAgICAgIDx1bD4KICAgICAgICA8bGk+PHN0cm9uZz5uPC9zdHJvbmc+IHwgPHN0cm9uZz5uYW1lPC9zdHJvbmc+IC0gPGVtPihzdHJpbmcpPC9lbT4gVGhlIG5hbWUgb2YgdGhlIGFuY2hvciB0byBsaW5rIHRvLjwvbGk+CiAgICAgICAgPGxpPjxzdHJvbmc+dGV4dDwvc3Ryb25nPiAtIDxlbT4oc3RyaW5nPjwvZW0+IFRoZSB0ZXh0IHBvcnRpb24gb2YgdGhlIGxpbmsuIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBhbmNob3IgbmFtZSB3aWxsIGJlIHVzZWQuPC9saT4KICAgICAgICA8bGk+PHN0cm9uZz51cmxvbmx5PC9zdHJvbmc+IC0gPGVtPihib29sKTwvZW0+IE9wdGlvbmFsbHkgb25seSBnZW5lcmF0ZSB0aGUgVVJMIHBvcnRpb24gb2YgdGhlIGxpbmsuIHNlZSBzbXg6OmFuY2hvcl91cmwoKTwvbGk+CiAgICAgICAgPGxpPjxzdHJvbmc+YXNzaWduPC9zdHJvbmc+IC0gPGVtPihzdHJpbmc+PC9lbT4gT3B0aW9uYWxseSBhc3NpZ24gdGhlIG91dHB1dCBvZiB0aGUgcGx1Z2luIHRvIHRoZSBuYW1lZCBzbWFydHkgdmFyaWFibGUuPC9saT4KICAgICAgPC91bD4KCiAgICAgIDxwPkFueSBvdGhlciBhcmd1bWVudHMgdG8gdGhlIHNtYXJ0eSBwbHVnaW4gd2lsbCBiZSBhZGRlZCBhcyBhdHRyaWJ1dGVzIHRvIHRoZSBsaW5rIGdlbmVyYXRlZC48L3A+CiAgICAgIDxwPkV4YW1wbGU6PC9wPgogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiYjMTIzO3h0X2FuY2hvcl9saW5rIG5hbWU9Ym90dG9tIGNsYXNzPSJhbmNob3JfY2xhc3MiIGlkPSJhbmNob3JfaWQifTwvcHJlPgogICAgPC9kaXY+CiAgPC9saT4KICAgICAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4KICAgIDxoMyBjbGFzcz0iYWwiPiYjMTIzO3Nlc3NfcHV0fSA8c3BhbiBjbGFzcz0ic21hbGwiPlN0b3JlIGRhdGEgaW4gdGhlIHVzZXIgc2Vzc2lvbjwvc3Bhbj48L2gzPgogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4KICAgICAgPHA+QSBzbWFydHkgcGx1Z2luIHRoYXQgY2FuIHN0b3JlIGRhdGEgaW4gdGhlIHVzZXIgc2Vzc2lvbi4gVGhpcyBkYXRhIGlzIHRoZW4gYWNjZXNzaWJsZSB2aWEgdGhlICRzbWFydHkuc2Vzc2lvbiBhcnJheSBpbiBzdWJzZXF1ZW50IHBhZ2VzLjwvcD4KICAgICAgPHA+UGFyYW1ldGVyczo8L3A+CiAgICAgIDx1bD4KICAgICAgICA8bGk+PHN0cm9uZz52YXI8L3N0cm9uZz4gLSBUaGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgdG8gY3JlYXRlIGluIHRoZSBzZXNzaW9uLjwvbGk+CiAgICAgICAgPGxpPjxzdHJvbmc+dmFsdWU8L3N0cm9uZz4gLSBUaGUgZGVzaXJlZCB2YWx1ZSBvZiB0aGUgdmFyaWFibGUuPC9saT4KICAgICAgPC91bD4KICAgICAgPHA+RXhhbXBsZTo8L3A+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjM7c2Vzc19wdXQgdmFyPSd0ZXN0JyB2YWx1ZT0nYmxhaCd9PC9wcmU+CiAgICA8L2Rpdj4KICA8L2xpPgogICAgICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPgogICAgPGgzIGNsYXNzPSJhbCI+JiMxMjM7c2Vzc19lcmFzZX0gPHNwYW4gY2xhc3M9InNtYWxsIj5FcmFzZSBkYXRhIGZyb20gdGhlIHVzZXIgc2Vzc2lvbjwvc3Bhbj48L2gzPgogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4KICAgICAgPHA+QSBzbWFydHkgcGx1Z2luIHRoYXQgY2FuIGVyYXNlIGRhdGEgZnJvbSB0aGUgdXNlciBzZXNzaW9uLjwvcD4KICAgICAgPHA+UGFyYW1ldGVyczo8L3A+CiAgICAgIDx1bD4KICAgICAgICA8bGk+PHN0cm9uZz52YXI8L3N0cm9uZz4gLSBUaGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgdG8gZXJhc2UgaW4gdGhlIHNlc3Npb24uPC9saT4KICAgICAgPC91bD4KICAgICAgPHA+RXhhbXBsZTo8L3A+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjM7c2Vzc19lcmFzZSB2YXI9J3Rlc3QnfTwvcHJlPgogICAgPC9kaXY+CiAgPC9saT4KICAgICAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4KICAgIDxoMyBjbGFzcz0iYWwiPiYjMTIzO3h0X3JlcGVhdH0gPHNwYW4gY2xhc3M9InNtYWxsIj5SZXBlYXRpbmcgdGV4dDwvc3Bhbj48L2gzPgogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4KICAgICAgPHA+QW5vdGhlciBzbWFydHkgcGx1Z2luIHRoYXQgd2lsbCBhbGxvdyByZXBlYXRpbmcgdGV4dDwvcD4KICAgICAgPHA+UGFyYW1ldGVyczo8L3A+CiAgICAgIDx1bD4KICAgICAgICA8bGk+PHN0cm9uZz50ZXh0PC9zdHJvbmc+IC0gVGhlIHRleHQgdG8gYmUgcmVwZWF0ZWQ8L2xpPgogICAgICAgIDxsaT48c3Ryb25nPmNvdW50PC9zdHJvbmc+IC0gVGhlIG51bWJlciBvZiB0aW1lcyBpdCBzaG91bGQgYmUgcmVwZWF0ZWQ8L2xpPgogICAgICAgIDxsaT48c3Ryb25nPmFzc2lnbjwvc3Ryb25nPiAtIEFzc2lnbiB0aGUgb3V0cHV0IHRvIHRoZSBzcGVjaWZpZWQgc21hcnR5IHZhcmlhYmxlPC9saT4KICAgICAgPC91bD4KCiAgICAgIDxwPkV4YW1wbGU6PC9wPgogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiYjMTIzO3h0X3JlcGVhdCB0ZXh0PSd0aGlzJyBjb3VudD0nNSd9PC9wcmU+CiAgICA8L2Rpdj4KICA8L2xpPgogICAgICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPgogICAgPGgzIGNsYXNzPSJhbCI+JiMxMjM7Y29udGVudF9mZXRjaH0gPHNwYW4gY2xhc3M9InNtYWxsIj5GZXRjaCBhbmQgcmV1c2UgQ01TTVMgY29udGVudCA8c3BhbiBzdHlsZT0iY29sb3I6Z3JlZW4iPjxzdHJvbmc+KG5ldyk8L3N0cm9uZz48L3NwYW4+PC9zcGFuPjwvaDM+CiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPgogICAgICA8cD5BIGZvcmsgb2YgPHN0cm9uZz48ZW0+JiMxMjM7Y29udGVudF9kdW1wfTwvZW0+PC9zdHJvbmc+IGZyb20gTmlscyBIYWFjay4gU3RpbGwgYSB3b3JrIGluIHByb2dyZXNzLCBzbyBrZWVwIGNoZWNraW5nIHRoZXNlIGRvY3MgZm9yIGNoYW5nZXMgaW4gcGFyYW1ldGVycyBhbmQgYmVoYXZpb3VyLjwvcD4KICAgICAgPHA+QSA8ZW0+J1N3aXNzIEFybXkgS25pZmUnPC9lbT4gZm9yIENNU01TIGNvbnRlbnQgZmV0Y2hpbmcsIGdpdmluZyB5b3UgdGhlIGFiaWxpdHkgdG8gZmV0Y2ggY29udGVudCBhbmQgaW5zZXJ0IGl0IGludG8gYSBzaW5nbGUgcGFnZS4gSXQgb2ZmZXJzIGEgdmFyaWV0eSBvZiBpbmRlcGVuZGVudCBwYXJhbWV0ZXJzIHRoYW4gY2FuIGJlIGNvbWJpbmVkIHRvIGNhdGVyIGZvciBhIGxvdCBvZiB5b3VyIHNpdGUncyBpbnRlcm5hbCBjb250ZW50IGRpc3RyaWJ1dGlvbiBuZWVkcy48L3A+CiAgICAgIDxwPkp1c3QgYXR0YWNoIHNvbWUgcGFyYW1ldGVycyBhbmQgbGltaXQvb3JnYW5pemUgdGhlIG91dHB1dCB0byB5b3VyIGRhdGEgcmVxdWlyZW1lbnRzLiBUaGUgU21hcnR5IG91dHB1dCBhbGxvd3MgeW91IHRvIGZyZWVseSBkZXNpZ24gdGhlIHJlc3VsdHMgaW4geW91ciB0ZW1wbGF0ZSBvciBjb250ZW50IGJsb2NrIChmcm9tIHRoZSByZWd1bGFyIGVkaXRvcnMgdmlldyAtIHRob3VnaCBpdCBpcyByZWNvbW1lbmRlZCB0byBkbyBpdCBpbiB0aGUgdGVtcGxhdGUpLiBXaXRoIFNtYXJ0eSwgeW91IGNhbiBldmVuIGNvbnRyb2wgdGhlIG91dHB1dCBieSBsaW1pdGluZyBpdCB0byBzcGVjaWZpYyB2YWx1ZXMgKGUuZy4gb25seSB1c2VyICdKb2huIERvZScpIG9yIHVzZSBtb2RpZmllcnMgdG8gZnVydGhlciBtYW5pcHVsYXRlIHRoZSBjb250ZW50LjwvcD4KCiAgICAgIDxoND5QYXJhbWV0ZXJzPC9oND4KICAgICAgPHA+Rm9sbG93aW5nIGEgZGVzY3JpcHRpb24gb2YgdGhlIGF2YWlsYWJsZSBwYXJhbWV0ZXJzLjwvcD4KCiAgICAgIDxwPlBhcmFtZXRlcnM6PC9wPgogICAgICA8dWw+CiAgICAgICAgPGxpPjxzdHJvbmc+YmxvY2tfbmFtZTwvc3Ryb25nPiAtIFRoZSBuYW1lIG9mIHRoZSBjb250ZW50IGJsb2NrIHRvIGZldGNoIGZyb20gKGRlZmF1bHQgPHN0cm9uZz5jb250ZW50X2VuPC9zdHJvbmc+KTs8L2xpPgogICAgICAgIDxsaT48c3Ryb25nPnN0YXJ0X2lkPC9zdHJvbmc+IC0gRGVmaW5lcyBhIHN0YXJ0aW5nIHBvaW50IGZvciB0aGUgY29udGVudCBmZXRjaGluZyAoZGVmYXVsdCA8c3Ryb25nPi0xPC9zdHJvbmc+IG1lYW5pbmcgYWxsIG1hdGNoaW5nIGNvbnRlbnQpOzwvbGk+CiAgICAgICAgPGxpPjxzdHJvbmc+bGltaXRfc3RhcnQ8L3N0cm9uZz4gLSBUaGUgZmlyc3QgbiBpdGVtcyB0byBza2lwIChkZWZhdWx0IDxzdHJvbmc+MDwvc3Ryb25nPik7PC9saT4KICAgICAgICA8bGk+PHN0cm9uZz5saW1pdF9jb3VudDwvc3Ryb25nPiAtIE1heGltdW0gbnVtYmVyIG9mIHBhZ2VzIHRvIGZldGNoIChkZWZhdWx0IDxzdHJvbmc+MTAwMDwvc3Ryb25nPik7PC9saT4KICAgICAgICA8bGk+PHN0cm9uZz5wYWdlPC9zdHJvbmc+IC0gR2VuZXJhdGVzIGEgc2luZ2xlIHBhZ2UgdmlldyBvdXQgb2YgdGhlIHJlc3VsdHMgb2YgcmVzdCBvZiB0aGUgcGFyYW1ldGVycywgYWxsb3dpbmcgZm9yIHNvbWUgZm9ybSBvZiBwYWdpbmF0aW9uIChkZWZhdWx0IDxzdHJvbmc+MDwvc3Ryb25nPik7PC9saT4KICAgICAgICA8bGk+CiAgICAgICAgICA8c3Ryb25nPmFjdGl2ZTwvc3Ryb25nPiAtIGZpbHRlciBieSBwYWdlIHN0YXRlczsgYWNjZXB0ZWQgdmFsdWVzIGFyZToKICAgICAgICAgIDx1bD4KICAgICAgICAgICAgPGxpPjxzdHJvbmc+Zm9yY2U8L3N0cm9uZz4gLSBzaG93IGV2ZXJ5dGhpbmcgcmVnYXJkbGVzcyBvZiB0aGVpciBzdGF0ZTs8L2xpPgogICAgICAgICAgICA8bGk+PHN0cm9uZz5hY3RpdmU8L3N0cm9uZz4gLSBzaG93IG9ubHkgYWN0aXZlIHBhZ2VzIChkZWZhdWx0KTs8L2xpPgogICAgICAgICAgICA8bGk+PHN0cm9uZz5pbmFjdGl2ZTwvc3Ryb25nPiAtIHNob3cgb25seSBpbmFjdGl2ZSBwYWdlczs8L2xpPgogICAgICAgICAgPC91bD4KICAgICAgICA8L2xpPgogICAgICAgIDxsaT4KICAgICAgICAgIDxzdHJvbmc+c2hvd19pbl9tZW51PC9zdHJvbmc+IHwgPHN0cm9uZz5zaG93bl9pbl9tZW51PC9zdHJvbmc+IC0gZmlsdGVyIGJ5IG1lbnUgdmlzaWJpbGl0eTsgYWNjZXB0ZWQgdmFsdWVzIGFyZToKICAgICAgICAgIDx1bD4KICAgICAgICAgICAgPGxpPjxzdHJvbmc+Zm9yY2U8L3N0cm9uZz4gLSBzaG93IGV2ZXJ5dGhpbmcgcmVnYXJkbGVzcyBvZiB0aGVpciB2aXNpYmlsaXR5IGluIGEgbWVudTs8L2xpPgogICAgICAgICAgICA8bGk+PHN0cm9uZz5zaG93PC9zdHJvbmc+IC0gc2hvdyBvbmx5IHBhZ2VzIHNldCB0byBiZSB2aXNpYmxlIGluIGEgbWVudSAoZGVmYXVsdCk7PC9saT4KICAgICAgICAgICAgPGxpPjxzdHJvbmc+aGlkZGVuPC9zdHJvbmc+IC0gc2hvdyBvbmx5IHBhZ2VzIHNldCBub3QgdG8gYmUgdmlzaWJsZSBpbiBhIG1lbnU7PC9saT4KICAgICAgICAgIDwvdWw+CiAgICAgICAgPC9saT4KICAgICAgICA8bGk+PHN0cm9uZz5maWx0ZXI8L3N0cm9uZz4gLSBGaWx0ZXIgcmVzdWx0cyBieSB3b3JkcyBvciBwaHJhc2VzIChzZWUgZXh0ZW5kZWQgaGVscCBhbmQgZXhhbXBsZXMgYmVsb3cpOzwvbGk+CiAgICAgICAgPGxpPjxzdHJvbmc+cHJlZml4PC9zdHJvbmc+IC0gRmlsdGVyIHJlc3VsdHMgYnkgYWxpYXMgcHJlZml4KGVzKSAoc2VlIGV4dGVuZGVkIGhlbHAgYW5kIGV4YW1wbGVzIGJlbG93KTs8L2xpPgogICAgICAgIDxsaT4KICAgICAgICAgIDxzdHJvbmc+cHJlZml4X21vZGU8L3N0cm9uZz4gLSBDaGFuZ2VzIHRoZSA8c3Ryb25nPnByZWZpeDwvc3Ryb25nPiBmaWx0ZXJpbmcgYmVoYXZpb3VyOyBhY2NlcHRlZCB2YWx1ZXMgYXJlOgogICAgICAgICAgPHVsPgogICAgICAgICAgICA8bGk+PHN0cm9uZz5mb3JjZTwvc3Ryb25nPiAtIHNob3cgb25seSBwYWdlcyB3aXRoIHRoZSBwcmVmaXgoZXMpIGxpc3RlZDs8L2xpPgogICAgICAgICAgICA8bGk+PHN0cm9uZz5uZXV0cmFsPC9zdHJvbmc+IC0gaWdub3JlcyBwcmVmaXgoZXMpIChkZWZhdWx0KTs8L2xpPiAgICAgICAgICAgICA8bGk+PHN0cm9uZz5oaWRlPC9zdHJvbmc+IC0gc2hvdyBvbmx5IHBhZ2VzIHdpdGhvdXQgdGhlIHByZWZpeChlcykgbGlzdGVkOzwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgIDwvbGk+CiAgICAgICAgPGxpPgogICAgICAgICAgPHN0cm9uZz5kZXB0aDwvc3Ryb25nPiAtIEZpbHRlciByZXN1bHRzIGJ5IGhpZXJhcmNoeSBzdGFydCBwb2ludCBhbmQgbnVtYmVyIG9mIGxldmVscy4gSXQgdGFrZXMgdHdvIGludGVnZXIgdmFsdWVzIHNlcGVyYXRlZCBieSBjb21tYSBzdWNoIGFzICctMSwzJywgJy0xJyBiZWluZyB0aGUgc3RhcnRpbmcgcG9pbnQsIGluIHRoaXMgY2FzZSB0aGUgcm9vdCBhbmQgJzMnIHRoZSBudW1iZXIgb2YgbGV2ZWxzIChvcgogICAgICAgICAgaG93IGRlZXApIHRvIGZldGNoIChzZWUgZXh0ZW5kZWQgaGVscCBhbmQgZXhhbXBsZXMgYmVsb3cpLiBJZiB1c2VkLCBib3RoIHZhbHVlcyBhcmUgbWFuZGF0b3J5OwogICAgICAgIDwvbGk+CiAgICAgICAgPGxpPjxzdHJvbmc+ZXhjbHVkZTwvc3Ryb25nPiAtIEV4Y2x1ZGUgY29udGVudCBieSBpZCwgYWNjZXB0aW5nIGNvbW1hIHNlcGVyYXRlZCBsaXN0cyBvZiBpbnRlZ2VycyBpZiBuZWVkZWQ7PC9saT4KICAgICAgICA8bGk+PHN0cm9uZz50aGlzX29ubHk8L3N0cm9uZz4gLSBGZXRjaCBhIHBhcnRpY3VsYXIgY29udGVudCBmcm9tIHBhZ2VzIGJ5IGlkOzwvbGk+CiAgICAgICAgPGxpPjxzdHJvbmc+dGhlc2Vfb25seTwvc3Ryb25nPiAtIEZldGNoIGEgcGFydGljdWxhciBzZXQgb2YgY29udGVudCBmcm9tIHBhZ2VzIGJ5IGEgY29tbWEgc2VwZXJhdGVkIGxpc3RzIG9mIGludGVnZXJzIG9mIGlkczs8L2xpPgogICAgICAgIDxsaT48c3Ryb25nPnBhcmVudHM8L3N0cm9uZz4gLSBBIGJvb2xlYW4gdHlwZSBzZXR0aW5nIGRlZmluaW5nIHdoZXRoZXIgdG8gaW5jbHVkZSBhIGxpbWl0ZWQgc2V0IG9mIHByb3BlcnRpZXMgb2YgdGhlIHBhcmVudHMgb2YgZWFjaCByZXN1bHQsIGRlZmF1bHRzIHRvIGZhbHNlIChzZWUgZXh0ZW5kZWQgaGVscCBhbmQgZXhhbXBsZXMgYmVsb3cpOzwvbGk+CiAgICAgICAgPGxpPgogICAgICAgICAgPHN0cm9uZz51c2Vyczwvc3Ryb25nPiAtIEEgYm9vbGVhbiB0eXBlIHNldHRpbmcgZGVmaW5pbmcgd2hldGhlciB0byBleHBhbmQgdXNlciBkYXRhIHJlbGF0ZWQgdG8gdGhlIGNvbnRlbnQgc3VjaCBhcyA8c3Ryb25nPmNyZWF0ZWQgYnk8L3N0cm9uZz4gYW5kIDxzdHJvbmc+bW9kaWZpZWQgYnk8L3N0cm9uZz4gd2hpY2ggaWYgdHJ1ZSB3aWxsIHJldHVybiA8c3Ryb25nPnVzZXJuYW1lPC9zdHJvbmc+LAogICAgICAgICAgPHN0cm9uZz5maXJzdG5hbWU8L3N0cm9uZz4gYW5kIDxzdHJvbmc+bGFzdG5hbWU8L3N0cm9uZz4gaW4gYWRkaXRpb24gdG8gdGhlIGRlZmF1bHQgKGlmIGZhbHNlKSA8c3Ryb25nPnVpZDwvc3Ryb25nPiAoc2VlIGV4dGVuZGVkIGhlbHAgYW5kIGV4YW1wbGVzIGJlbG93KTsKICAgICAgICA8L2xpPgogICAgICAgIDxsaT4KICAgICAgICAgIDxzdHJvbmc+ZXh0ZW5zaW9uczwvc3Ryb25nPiAtIEEgY29tbWEgc2VwZXJhdGVkIGxpc3Qgb2YgY29udGVudF9ibG9ja3MgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgZXhpc3QgYW5kIGhhdmUgY29udGVudDsgaXQgd2lsbCBzaG93IGluIHRoZSByZXN1bHRzIGxpc3QgYXMgYW4gYWRkaXRpb25hbCBwcm9wZXJ0eSBmb3IgZWFjaCByZXN1bHQgd2l0aCBhIHZhbHVlIG9mICcxJyBvciAnMCcgZGVwZW5kaW5nIG9uCiAgICAgICAgICB3aGV0aGVyIHRoZSBjb250ZW50IGJsb2NrIGhhcyBiZWVuIGZvdW5kIGFuZCBpcyBub3QgZW1wdHkgKGRlZmF1bHQgPHN0cm9uZz5mYWxzZTwvc3Ryb25nPikgKHNlZSBleHRlbmRlZCBoZWxwIGFuZCBleGFtcGxlcyBiZWxvdyk7CiAgICAgICAgPC9saT4KICAgICAgICA8bGk+PHN0cm9uZz5kYXRlZm9ybWF0PC9zdHJvbmc+IC0gRm9ybWF0IHRoZSBkYXRlIG91dHB1dCBpbiBhIFBIUCBzdHJmdGltZSBmb3JtYXQgKGRlZmF1bHQgPHN0cm9uZz4nJUEsICVlICVCICVZJzwvc3Ryb25nPikuIE5vdGU6IGRlcHJlY2F0ZWQgcGVuZGluZyBzb21lIG1vcmUgY2hhbmdlcyB0byB0aGUgQ01TTVMgY29yZSB0byBiZSBQSFAgOC4wKyBjb21wYXRpYmxlOzwvbGk+CiAgICAgICAgPGxpPjxzdHJvbmc+Y2Rsb2NhbGU8L3N0cm9uZz4gLSBTcGVjaWZ5IGEgc3BlY2lmaWMgbG9jYWxlIGZvciB0aGUgb3V0cHV0IG90aGVyd2lzZSBzeXN0ZW0gZGVmYXVsdCBpcyB1c2VkOzwvbGk+CiAgICAgICAgPGxpPjxzdHJvbmc+bG9jYWxlPC9zdHJvbmc+IC0gU3BlY2lmeSBhIHNwZWNpZmljIGxvY2FsZSB1c2VkIGZvciB0aGUgdGltZXN0YW1wIG90aGVyd2lzZSBzeXN0ZW0gZGVmYXVsdCBpcyB1c2VkOzwvbGk+CiAgICAgICAgPGxpPgogICAgICAgICAgPHN0cm9uZz5kb19zbWFydHk8L3N0cm9uZz4gLSBDaGFuZ2VzIHRoZSBTbWFydHkgcGFyc2luZyBiZWhhdmlvdXI7IGFjY2VwdGVkIHZhbHVlcyBhcmU6CiAgICAgICAgICA8dWw+CiAgICAgICAgICAgIDxsaT48c3Ryb25nPmNvbXBpbGU8L3N0cm9uZz4gLSBwYXJzZXMgdGhlIGNvbnRlbnQgdGhyb3VnaCBTbWFydHkgYmVmb3JlIG91dHB1dC4gTm90ZTogY2FuIGJlIHJlY3Vyc2l2ZSBhbmQgcmVzdWx0IGluIGVuZGxlc3MgbG9vcHM7PC9saT4KICAgICAgICAgICAgPGxpPjxzdHJvbmc+bmV1dHJhbDwvc3Ryb25nPiAtIHBhc3NlcyB0aHJvdWdoIHdpdGhvdXQgcGFyc2luZyAoZGVmYXVsdCk7PC9saT4KICAgICAgICAgICAgPGxpPjxzdHJvbmc+c3RyaXA8L3N0cm9uZz4gLSBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gcmVtb3ZlIGFueXRoaW5nIGJldHdlZW4gJyYjMTIzOycgYW5kICd9JyAoYW5kIHRoYXQgbWVhbnMgPGVtPmFueXRoaW5nPC9lbT4pOzwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgICAgPHA+Tm90ZXM6PC9wPgogICAgICAgICAgPHVsPgogICAgICAgICAgICA8bGk+dGhlcmUgaXMgYSByZWFsIGNoYW5jZSBvZiwgaW5hZHZlcnRlbnRseSwgY3JlYXRlIGFuIGVuZGxlc3MgbG9vcCB3aXRoIHRoZSA8c3Ryb25nPmNvbXBpbGU8L3N0cm9uZz4gb3B0aW9uIHJlc3VsdGluZyBpbiBvdXQgb2YgbWVtb3J5IGVycm9yczs8L2xpPgogICAgICAgICAgICA8bGk+dG8gdHJ5IHRvIHByZXZlbnQgdGhpcyB0aGUgcGx1Z2luIGNhbiByZWNvZ25pc2UgYSBzaW5nbGUgdXNlIG9mIHRoZSB0YWcgaW4gdGhlIGNvbnRlbnQgYW4gdGhhdCBzaG91bGQgYmUgc2FmZTs8L2xpPgogICAgICAgICAgICA8bGk+bXVsdGlwbGUgb2NjdXJyZW5jZXMgb2YgdGhlIHRhZyBvbiB0aGUgc2FtZSBjb250ZW50IGJsb2NrIHVzaW5nIHRoZSA8c3Ryb25nPmNvbXBpbGU8L3N0cm9uZz4gb3B0aW9uIGNhbm5vdCBiZSBzYWZlbHkgZGV0ZWN0ZWQgYW5kIHNob3VsZCBiZSBhdm9pZGVkOzwvbGk+CiAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICA8c3Ryb25nPnN0cmlwPC9zdHJvbmc+IG1vZGUgdXNlcyBhIHJlZ2V4IHRvIHJlbW92ZSBhbnkgYW5kIGFsbCBvY2N1cnJlbmNlcyBvZiBwYXR0ZXJucyB3aXRoIGEgJyYjMTIzOycgLi4uICd9JyBjb25zdHJ1Y3QuIFRoYXQgbWVhbnMgb3RoZXIgbmF0dXJhbCBsYW5ndWFnZSBjb25zdHJ1Y3RzIHRoYXQgZml0IHRoYXQgcGF0dGVybiB3aWxsIGFsc28gYmUgcmVtb3ZlZC4gSmF2YVNjcmlwdCBjb25zdHJ1Y3RzCiAgICAgICAgICAgICAgY2FuIGVhc2lseSBiZWNvbWUgY29ycnVwdGVkIHRvbzsKICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgPGxpPm9uZSB3YXkgdG8gYXZvaWQgdGhhdCBpc3N1ZSB3aXRoIG5hdHVyYWwgbGFuZ3VhZ2UgdGV4dCBjb25zdHJ1Y3RzIGlzIHRvIHJlcGxhY2UgJyYjMTIzOycgYW5kICd9JyB3aXRoIHRoZWlyIGh0bWwgY29kZXMsIHJlc3BlY3RpdmVseTogPHN0cm9uZz4nJmFtcDsjMTIzOyc8L3N0cm9uZz4gYW5kIDxzdHJvbmc+JyZhbXA7IzEyNTsnPC9zdHJvbmc+IG9yIGVxdWl2YWxlbnQ7PC9saT4KICAgICAgICAgICAgPGxpPnJlZ2FyZGluZyBKYXZhU2NyaXB0LCB0aGUgYmVzdCBhbHRlcm5hdGl2ZSBpcyB0byBtb3ZlIHRoZSBjb2RlIHNuaXBwZXRzIHVzZWQgdG8gYSBkaWZmZXJlbnQgY29udGVudCBibG9jayBvciB0byB0aGUgbWFpbiB0ZW1wbGF0ZShzKSBpZiBhdCBhbGwgcG9zc2libGU7PC9saT4KICAgICAgICAgIDwvdWw+CiAgICAgICAgPC9saT4KICAgICAgICA8bGk+CiAgICAgICAgICA8c3Ryb25nPmh0bWw8L3N0cm9uZz4gLSBUcmllcyB0byByZW1vdmUgYW55IGFuZCBhbGwgSFRNTCwgSmF2YVNjcmlwdCBhbmQgQ1NTIGZyb20gdGhlIHJlc3VsdGluZyBjb250ZW50IGJsb2NrKHMpIHNvIGl0IGNhbiBiZSBwb3NzaWJsZSB0byBzYWZlbHkgdHJ1bmNhdGUgdGhlIHRleHQ7IGFjY2VwdGVkIHZhbHVlcyBhcmU6CiAgICAgICAgICA8dWw+CiAgICAgICAgICAgIDxsaT48c3Ryb25nPnN0cmlwPC9zdHJvbmc+IC0gc3RyaXBzIHRoZSByZXRyaWV2ZWQgYmxvY2tzOzwvbGk+CiAgICAgICAgICAgIDxsaT48c3Ryb25nPm5ldXRyYWw8L3N0cm9uZz4gLSBwYXNzZXMgdGhyb3VnaCB0aGUgcmV0cmlldmVkIGJsb2NrcyBhZnRlciBwcm9jZXNzaW5nIDxzdHJvbmc+ZG9fc21hcnR5PC9zdHJvbmc+OzwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgIDwvbGk+CiAgICAgICAgPGxpPgogICAgICAgICAgPHN0cm9uZz5maXJzdF9zb3J0PC9zdHJvbmc+IC0gc29ydHMgdGhlIGNvbnRlbnQgYnkgc3BlY2lmaWMgZWxlbWVudHM7IGFjY2VwdGVkIHZhbHVlcyBhcmU6CiAgICAgICAgICA8dWw+CiAgICAgICAgICAgIDxsaT48c3Ryb25nPmlkPC9zdHJvbmc+IC0gc29ydHMgYnkgcGFnZSAoY29udGVudCkgaWQ7PC9saT4KICAgICAgICAgICAgPGxpPjxzdHJvbmc+dGl0bGU8L3N0cm9uZz4gLSBzb3J0cyBieSBwYWdlIChjb250ZW50KSB0aXRsZTs8L2xpPgogICAgICAgICAgICA8bGk+PHN0cm9uZz5jcmVhdGVkPC9zdHJvbmc+IC0gc29ydHMgYnkgcGFnZSAoY29udGVudCkgY3JlYXRlZCBkYXRlIChvcmRlciBtYXkgbmVlZCB0byBiZSByZXZlcnNlZCk7PC9saT4KICAgICAgICAgICAgPGxpPjxzdHJvbmc+bW9kaWZpZWQ8L3N0cm9uZz4gLSBzb3J0cyBieSBwYWdlIChjb250ZW50KSBtb2RpZmllZCBkYXRlIChvcmRlciBtYXkgbmVlZCB0byBiZSByZXZlcnNlZCk7PC9saT4KICAgICAgICAgICAgPGxpPjxzdHJvbmc+b3duZXI8L3N0cm9uZz4gLSBzb3J0cyBieSBwYWdlIChjb250ZW50KSBvd25lciBpZDs8L2xpPgogICAgICAgICAgICA8bGk+PHN0cm9uZz5oaWVyYXJjaHk8L3N0cm9uZz4gLSBzb3J0cyBieSBwYWdlIChjb250ZW50KSBoaWVyYXJjaHk7PC9saT4KICAgICAgICAgICAgPGxpPjxzdHJvbmc+aWRfaGllcmFyY2h5PC9zdHJvbmc+IC0gc29ydHMgYnkgcGFnZSAoY29udGVudCkgaGllcmFyY2h5IGlkOzwvbGk+CiAgICAgICAgICAgIDxsaT48c3Ryb25nPmxhc3RlZGl0b3I8L3N0cm9uZz4gLSBzb3J0cyBieSBwYWdlIChjb250ZW50KSBsYXN0IGVkaXRvciBpZDs8L2xpPgogICAgICAgICAgICA8bGk+PHN0cm9uZz5hY3RpdmU8L3N0cm9uZz4gLSBzb3J0cyBieSBwYWdlIChjb250ZW50KSBhY3RpdmUgc3RhdGU7PC9saT4KICAgICAgICAgICAgPGxpPjxzdHJvbmc+c2hvdzwvc3Ryb25nPiAtIHNvcnRzIGJ5IHBhZ2UgKGNvbnRlbnQpIG1lbnUgdmlzaWJpbGl0eTs8L2xpPgogICAgICAgICAgPC91bD4KICAgICAgICA8L2xpPgogICAgICAgIDxsaT48c3Ryb25nPmZpcnN0X3NvcnRfb3JkZXI8L3N0cm9uZz4gLSBkZXRlcm1pbmVzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIHNvcnRpbmcgZmlsdGVyLCB3aGV0aGVyIGl0IGlzIDxlbT4ndXAnPC9lbT4gb3IgPGVtPidkb3duJzwvZW0+IChkZWZhdWx0IDxzdHJvbmc+J3VwJzwvc3Ryb25nPiBhcyBpbiBhbHBoYWJldGljYWxseSBBIHRvIEIpOzwvbGk+CiAgICAgICAgPGxpPgogICAgICAgICAgPHN0cm9uZz5zZWNvbmRfc29ydDwvc3Ryb25nPiAtIHNvcnRzIHRoZSBjb250ZW50IGJ5IHNwZWNpZmljIGVsZW1lbnRzOyBhY2NlcHRlZCB2YWx1ZXMgYXJlOgogICAgICAgICAgPHVsPgogICAgICAgICAgICA8bGk+PHN0cm9uZz5pZDwvc3Ryb25nPiAtIHNvcnRzIGJ5IHBhZ2UgKGNvbnRlbnQpIGlkOzwvbGk+CiAgICAgICAgICAgIDxsaT48c3Ryb25nPnRpdGxlPC9zdHJvbmc+IC0gc29ydHMgYnkgcGFnZSAoY29udGVudCkgdGl0bGU7PC9saT4KICAgICAgICAgICAgPGxpPjxzdHJvbmc+Y3JlYXRlZDwvc3Ryb25nPiAtIHNvcnRzIGJ5IHBhZ2UgKGNvbnRlbnQpIGNyZWF0ZWQgZGF0ZSAob3JkZXIgbWF5IG5lZWQgdG8gYmUgcmV2ZXJzZWQpOzwvbGk+CiAgICAgICAgICAgIDxsaT48c3Ryb25nPm1vZGlmaWVkPC9zdHJvbmc+IC0gc29ydHMgYnkgcGFnZSAoY29udGVudCkgbW9kaWZpZWQgZGF0ZSAob3JkZXIgbWF5IG5lZWQgdG8gYmUgcmV2ZXJzZWQpOzwvbGk+CiAgICAgICAgICAgIDxsaT48c3Ryb25nPm93bmVyPC9zdHJvbmc+IC0gc29ydHMgYnkgcGFnZSAoY29udGVudCkgb3duZXIgaWQ7PC9saT4KICAgICAgICAgICAgPGxpPjxzdHJvbmc+aGllcmFyY2h5PC9zdHJvbmc+IC0gc29ydHMgYnkgcGFnZSAoY29udGVudCkgaGllcmFyY2h5OzwvbGk+CiAgICAgICAgICAgIDxsaT48c3Ryb25nPmlkX2hpZXJhcmNoeTwvc3Ryb25nPiAtIHNvcnRzIGJ5IHBhZ2UgKGNvbnRlbnQpIGhpZXJhcmNoeSBpZDs8L2xpPgogICAgICAgICAgICA8bGk+PHN0cm9uZz5sYXN0ZWRpdG9yPC9zdHJvbmc+IC0gc29ydHMgYnkgcGFnZSAoY29udGVudCkgbGFzdCBlZGl0b3IgaWQ7PC9saT4KICAgICAgICAgICAgPGxpPjxzdHJvbmc+YWN0aXZlPC9zdHJvbmc+IC0gc29ydHMgYnkgcGFnZSAoY29udGVudCkgYWN0aXZlIHN0YXRlOzwvbGk+CiAgICAgICAgICAgIDxsaT48c3Ryb25nPnNob3c8L3N0cm9uZz4gLSBzb3J0cyBieSBwYWdlIChjb250ZW50KSBtZW51IHZpc2liaWxpdHk7PC9saT4KICAgICAgICAgIDwvdWw+CiAgICAgICAgPC9saT4KICAgICAgICA8bGk+PHN0cm9uZz5zZWNvbmRfc29ydF9vcmRlcjwvc3Ryb25nPiAtIGRldGVybWluZXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgc29ydGluZyBmaWx0ZXIsIHdoZXRoZXIgaXQgaXMgPGVtPid1cCc8L2VtPiBvciA8ZW0+J2Rvd24nPC9lbT4gKGRlZmF1bHQgPHN0cm9uZz4ndXAnPC9zdHJvbmc+IGFzIGluIGFscGhhYmV0aWNhbGx5IEEgdG8gQik7PC9saT4KICAgICAgICA8bGk+PHN0cm9uZz5hc3NpZ248L3N0cm9uZz4gLSBBc3NpZ24gdGhlIG91dHB1dCB0byB0aGUgc3BlY2lmaWVkIHNtYXJ0eSB2YXJpYWJsZSAoZGVmYXVsdCA8c3Ryb25nPmNvbnRlbnRfZmV0Y2g8L3N0cm9uZz4gbWVhbmluZyB0aGUgcmVzdWx0IHdpbGwgYmUgYXZhaWxhYmxlIHZpYSAmIzEyMzskY29udGVudF9mZXRjaH0pOzwvbGk+CiAgICAgIDwvdWw+CiAgICAgIDxocj4KICAgICAgPGgyPkV4dGVuZGVkIEhlbHAgYW5kIEV4YW1wbGVzPC9oMj4KICAgICAgPGgzPkRlYnVnZ2luZzwvaDM+CiAgICAgIDxwPllvdSBjYW4gZGVidWcgdGhlIHBsdWdpbiBvdXQgcHV0IGJ5IHNpbXBseSBzdXJyb3VuZGluZyB0aGUgYXNzaWduZWQgU21hcnR5IHZhcmlhYmxlIHRhZyB3aXRoIEhUTUwgJ3ByZScgdGFncyBhbmQgdXNpbmcgYSBwcmludF9yIG1vZGlmaWVyOjwvcD4KICAgICAgPHA+RXhhbXBsZTo8L3A+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+CiAgJiMxMjM7Y29udGVudF9mZXRjaCBhc3NpZ249J215X3Zhcl9uYW1lJ30KICAmbHQ7cHJlPiYjMTIzJG15X3Zhcl9uYW1lfHByaW50X3I6MX0mbHQ7L3ByZT48L3ByZT4KICAgICAgPHA+VGhhdCBzaG91bGQgb3V0cHV0IHRoZSBjb250ZW50cyBvZiB0aGUgYXNzaWduZWQgdmFyIGFzIGFuIGFycmF5IG9mIHJlc3VsdHMgdGhlIHN0cnVjdHVyZSBvZiB3aGljaCBzaG91bGQgdmFyeSBkZXBlbmRpbmcgb24gdGhlIHBhcmFtZXRlcnMgdXNlZC48L3A+CgogICAgICA8aDM+U2VsZWN0aW5nIGl0ZW1zPC9oMz4KICAgICAgPGg0PjxlbT5Bc3NpZ25pbmcgdG8gYSBTbWFydHkgdmFyaWFibGU8L2VtPjwvaDQ+CiAgICAgIDxwPjxzdHJvbmc+YXNzaWduPC9zdHJvbmc+IGNhbiBiZSB1c2VkIHRvIGRlZmluZSB0aGUgb3V0cHV0IHZhcmlhYmxlIHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSBkZWZhdWx0IDxzdHJvbmc+JiMxMjM7JGNvbnRlbnRfZmV0Y2h9PC9zdHJvbmc+LjwvcD4KICAgICAgPHA+RXhhbXBsZTo8L3A+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+CiAgJiMxMjM7Y29udGVudF9mZXRjaCBhc3NpZ249J215X3Zhcl9uYW1lJ30KICAmIzEyMzskbXlfdmFyX25hbWVbMF0tPmNvbnRlbnQtPmFsaWFzfTwvcHJlPgoKICAgICAgPGg0PjxlbT5TZWxlY3RpbmcgYSBjb250ZW50LWJsb2NrPC9lbT48L2g0PgoKICAgICAgPHA+PHN0cm9uZz5ibG9ja19uYW1lPC9zdHJvbmc+IGNhbiBiZSB1c2VkIHRvIGRlZmluZSB0aGUgY29udGVudCBibG9jayB5b3Ugd2FudCB0byB1c2UgYXMgdGhlICYjMTIzOyYjMTIzOyRjb250ZW50X2ZldGNoW25dLT5jb250ZW50LT5kYXRhfSBlbGVtZW50LiBBcyBhIGRlZmF1bHQsIGl0IHdpbGwgYmUgPGVtPidjb250ZW50X2VuJzwvZW0+LCB0aGUgcGFnZSBzdGFuZGFyZCBjb250ZW50IGJsb2NrLiBJZiB0aGUgYmxvY2sgeW91IHdhbnQgdG8gc2hvdyBpcyAmIzEyMztjb250ZW50IGJsb2NrPSdzdW1tYXJ5J30gaW4geW91ciBzb3VyY2UgcGFnZSdzIHRlbXBsYXRlLCB5b3Ugd291bGQgY2FsbCBpdCBsaWtlIGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZTo8L3A+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjM7Y29udGVudF9mZXRjaCBibG9ja19uYW1lPSdzdW1tYXJ5J308L3ByZT4KCiAgICAgIDxoND48ZW0+V2hlcmUgc2hvdWxkIHRoZSBmZXRjaCBiZWdpbj88L2VtPjwvaDQ+CiAgICAgIDxwPjxzdHJvbmc+c3RhcnRfaWQ8L3N0cm9uZz4gY2FuIGJlIHVzZWQgdG8gZGVmaW5lIGEgc3RhcnRpbmcgcG9pbnQgZm9yIHlvdXIgY29udGVudCBjb2xsZWN0aW9uLiBJZiBub3Qgc3BlY2lmaWVkLCBpdCB3aWxsIGJlZ2luIHdpdGggaWQgPGVtPictMSc8L2VtPiBhbmQgdGh1cyBpbmNsdWRlIGFsbCBtYXRjaGluZyBwYWdlcyBmcm9tIGFsbCBwYWdlcy4gQSBuaWNlIHRyaWNrIHRvIHVzZSB0aGUgdGFnIGluIHNldmVyYWwgcGFnZXMgYmFzZWQgb24gdGhlIHNhbWUgdGVtcGxhdGUgYW5kIGxpbWl0IHRoZSB0YWcgdG8gdGhpcyBzaXRlIGFyZWEgaXMgdG8gc2V0IDxlbT5zdGFydF9pZD0kY29udGVudF9pZDwvZW0+LiBUaGlzIHdheSwgeW91IHVzZSB0aGUgdmlld2VkIHBhZ2UncyBpZCBhcyB0aGUgaW5pdGlhbCBwYWdlIGFuZCBpZ25vcmUgYWxsIG90aGVyIGNvbnRlbnQgZm9sZGVycy48L3A+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjM7Y29udGVudF9mZXRjaCBzdGFydF9pZD0xNn08L3ByZT4KCiAgICAgIDxoND48ZW0+U2tpcCB0aGUgZmlyc3QgWCBpdGVtcyAob2Zmc2V0KS48L2VtPjwvaDQ+CiAgICAgIDxwPjxzdHJvbmc+bGltaXRfc3RhcnQ8L3N0cm9uZz4gd2lsbCBhbGxvdyB5b3UgdG8gZG8gdGhhdC4gU3RhdGUgdGhlIG51bWJlciBvZiB0aGUgaXRlbSB5b3Ugd291bGQgbGlrZSB5b3VyIG91dHB1dCB0byBiZWdpbiB3aXRoLiA8ZW0+RGVmYXVsdCBpcyAwPC9lbT48L3A+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjM7Y29udGVudF9mZXRjaCBsaW1pdF9zdGFydD01fTwvcHJlPgoKICAgICAgPGg0PjxlbT5MaW1pdCB0aGUgb3V0cHV0IHRvIGEgc3BlY2lmaWMgbnVtYmVyIG9mIGl0ZW1zLjwvZW0+PC9oND4KICAgICAgPHA+PHN0cm9uZz5saW1pdF9jb3VudDwvc3Ryb25nPiBjYW4gYmUgdXNlZCB0byBsaW1pdCB0aGUgb3V0cHV0IHRvIGEgc3BlY2lmaWMgbnVtYmVyLiBJbiBjb21iaW5hdGlvbiB3aXRoIHBhZ2UsIGl0IHdpbGwgZGVmaW5lIHRoZSBzaXplIG9mIGEgcGFnZS48L3A+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjM7Y29udGVudF9mZXRjaCBsaW1pdF9jb3VudD0xMH08L3ByZT4KCiAgICAgIDxoND48ZW0+UGFnaW5hdGlvbjwvZW0+PC9oND4KICAgICAgPHA+PHN0cm9uZz5wYWdlPC9zdHJvbmc+IGNhbiBiZSB1c2VkIHRvIGdlbmVyYXRlIGEgcGFnZSBiYXNlZCB2aWV3LiBWYWx1ZSBpcyA8ZW0+cGFnZSBudW1iZXI8L2VtPi4gSXQgd2lsbCBiYXNpY2FsbHkgbW92ZSB0aGUgdmlldyB5b3UgaGF2ZSBvbiB0aGUgcmVzdWx0cyBieSB0aGUgbnVtYmVyIG9mIGl0ZW1zIHNwZWNpZmllZCBpbiBsaW1pdF9jb3VudC4gSXQgYWx0ZXJzIHRoZSBsaW1pdF9zdGFydCBieSBhZGRpbmcgbGltaXRfY291bnQgdG8gaXQsIGVhY2ggdGltZSBhbiBpbmNyZWFzaW5nIHBhZ2UgaXMgc2VsZWN0ZWQuIExldCdzIHNheSB5b3UgaGF2ZSBsaW1pdF9zdGFydD0wIGFuZCBsaW1pdF9jb3VudD01LCBwYWdlPTIgd2lsbCBhbHRlciBsaW1pdF9zdGFydCB0byBiZSA2LjwvcD4KICAgICAgPHA+VXNhZ2Ugb2YgdGhpcyBwYXJhbWV0ZXIgd2lsbCBwcm92aWRlIHNvbWUgZXh0cmEgc21hcnR5IGRhdGEgZWxlbWVudHMuICRwYWdlcl9pbmZvLT5jdXJyZW50LCAkcGFnZXJfaW5mby0+bWF4IGFuZCAkcGFnZXJfaW5mby0+c2l6ZS4gUmVwcmVzZW50aW5nIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgcGFnZSwgdGhlIG1heGltdW0gcGFnZSBhdmFpbGFibGUgYW5kIHRoZSBwYWdlIHNpemUuIFVzZSBzbWFydHkgYW5kIHRoaXMgZGF0YSB0byBidWlsZCBlYXN5IGFuZCBjb21wbGV4IHBhZ2VycyBhbGlrZS48L3A+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjM7Y29udGVudF9mZXRjaCBsaW1pdF9jb3VudD01IHBhZ2U9Mn08L3ByZT4KCiAgICAgIDxoND48ZW0+U2hvdyBhbHNvIGluYWN0aXZlIHBhZ2VzIG9yIG9ubHkgaW5hY3RpdmUgcGFnZXMuPC9lbT48L2g0PgogICAgICA8cD48c3Ryb25nPmFjdGl2ZTwvc3Ryb25nPiBjYW4gYmUgdXNlZCB0byBjb250cm9sIGhvdyB0aGUgPHN0cm9uZz4nYWN0aXZlJzwvc3Ryb25nPiBmbGFnIG9mIHBhZ2VzIHNob3VsZCBiZSBpbnRlcnByZXRlZC4gJ2ZvcmNlJyBzaG93cyBhbGwgcGFnZXMgcmVnYXJkbGVzcyBvZiBzdGF0dXMuICdhY3RpdmUnIHNob3cgYWN0aXZlIHBhZ2VzIG9ubHkgKGRlZmF1bHQpLiAnaW5hY3RpdmUnIHNob3cgaW5hY3RpdmUgcGFnZXMgb25seS48L3A+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjMkY29udGVudF9mZXRjaCBhY3RpdmU9J2ZvcmNlJ308L3ByZT4KCiAgICAgIDxoND48ZW0+U2hvd24gaW4gbWVudT88L2VtPjwvaDQ+CiAgICAgIDxwPjxzdHJvbmc+c2hvd25faW5fbWVudTwvc3Ryb25nPiBjYW4gYmUgdXNlZCB0byBjb250cm9sIGhvdyB0aGUgJ3Nob3dfaW5fbWVudScgZmxhZyBvZiBwYWdlcyBzaG91bGQgYmUgaW50ZXJwcmV0ZWQuICdmb3JjZScgc2hvd3MgYWxsIHBhZ2VzIHJlZ2FyZGxlc3Mgb2Ygc3RhdHVzLiAnc2hvdycgc2hvdyBwYWdlcyBzZXQgdG8gJ1Nob3cgaW4gTWVudScgb25seSAoZGVmYXVsdCkuICdoaWRkZW4nIHNob3cgcGFnZXMgdGhhdCBhcmUgc2V0IHRvICdEb24ndCBTaG93IGluIE1lbnUnIG9ubHkuPC9wPgogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiYjMTIzJGNvbnRlbnRfZmV0Y2ggc2hvd19pbl9tZW51PSdoaWRkZW4nfTwvcHJlPgoKICAgICAgPGgzPkZpbHRlciBpdGVtczwvaDM+CgogICAgICA8aDQ+PGVtPkZpbHRlciBmb3Igc3BlY2lmaWMgY29udGVudCAoZS5nLiBjaGVjayBpZiBkYXRhIGZpZWxkcyBjb250YWluIHRoZSB3b3JkICd3b3JsZCcpPC9lbT48L2g0PgogICAgICA8cD48c3Ryb25nPmZpbHRlcjwvc3Ryb25nPiBjYW4gYmUgdXNlZCB0byBsaW1pdCB0aGUgcmVzdWx0cyB0byBlbnRyaWVzIHdoaWNoIGNvbnRhaW4gc3BlY2lmaWMgd29yZHMgb3IgcGhyYXNlcyBvciB0byBleGx1ZGUgc3VjaCBpdGVtcy4gVXNlIGJvb2xlYW4gbG9naWMuIGUuZy4gZmlsdGVyPSctaGVsbG8nIHRvIGV4Y2x1ZGUgaXRlbXMgdGhhdCBjb250YWluIHRoZSB3b3JkICdoZWxsbycgaW4gYW55IG9mIHRoZWlyIGNvbnRlbnQtPmRhdGEgb3IgZXh0ZW5zaW9uLT5pdGVtbmFtZS0+ZGF0YSBlbGVtZW50cyBvciBmaWx0ZXI9J3dvcmxkJyB0byBsaW1pdCB0aGUgcmVzdWx0cyB0byB0aG9zZSBpdGVtcyB0aGF0IGNvbnRhaW4gdGhlIHdvcmQgJ3dvcmxkJyBpbiBhbnkgb2YgdGhlaXIgZGF0YSBlbGVtZW50cy48L3A+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjMkY29udGVudF9mZXRjaCBmaWx0ZXI9J3dvcmxkJ308L3ByZT4KCiAgICAgIDxoND48ZW0+RXhjbHVkZSBvciBsaW1pdCAoZmlsdGVyKSB0aGUgb3V0cHV0IHRvIHBhZ2VzIHdpdGggbWF0Y2hpbmcgYWxpYXMgcHJlZml4PC9lbT48L2g0PgogICAgICA8cD48c3Ryb25nPnByZWZpeDwvc3Ryb25nPiBjYW4gYmUgdXNlZCB0byBzdGF0ZSB0aGUgcHJlZml4IG9yIHByZWZpeGVzIHRoYXQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZm9yIGV4Y2x1ZGluZyBmcm9tIHRoZSBjb2xsZWN0aW9uIG9yIHRoYXQgc2hvdWxkIGJlIHRoZSBvbmx5IHBhZ2VzIGluIHRoZSBjb2xsZWN0aW9uLiBTZXZlcmFsIHByZWZpeGVzIGNhbiBiZSB1c2VkIGJ1dCBtdXN0IGJlIHNlcGFyYXRlZCBieSBjb21tYS4gRS5nLiAmIzEyMyRjb250ZW50X2ZldGNoIHByZWZpeD0ncHJpdmF0ZV8sc3BlY2lhbF8nfTwvcD4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mIzEyMyRjb250ZW50X2ZldGNoIHByZWZpeD0ncHJlZml4bmFtZSd9PC9wcmU+CgogICAgICA8aDQ+PGVtPkhvdyBzaG91bGQgdGhlIHByZWZpeCBvciBsaXN0IG9mIHByZWZpeChlcykgYmUgaGFuZGxlZD88L2VtPjwvaDQ+CiAgICAgIDxwPjxzdHJvbmc+cHJlZml4X21vZGU8L3N0cm9uZz4gUHJlZml4LW1vZGUgaXMgdXNlZCB0byBjb250cm9sIHRoZSBoYW5kbGluZyBvZiB0aGUgcHJlZml4KGVzKS4gJ2ZvcmNlJywgJ25ldXRyYWwiIGFuZCAiaGlkZScgYXJlIHRoZSBhdmFpbGFibGUgdmFsdWVzLiBTdGFuZGFyZCBtb2RlIGlzIG5ldXRyYWwgdGhhdCB3aWxsIGRpc3JlZ2FyZCBhbnkgYXZhaWxhYmxlIHByZWZpeC4gRm9yY2VkIG1vZGUgb25seSBzaG93cyBwYWdlcyB3aXRoIG9uZSBvZiB0aGUgc3RhdGVkIHByZWZpeGVzLiBIaWRlIHdpbGwgZXhjbHVkZSBwYWdlcyB3aXRoIHRoZSBwcmVmaXggZnJvbSB0aGUgaXRlbXMgcmV0dXJuZWQuPC9wPgogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiYjMTIzJGNvbnRlbnRfZmV0Y2ggcHJlZml4X21vZGU9J2hpZGUnfTwvcHJlPgoKICAgICAgPGg0PjxlbT5Ib3cgY2FuIEkgbGltaXQgdGhlIG91dHB1dCB0byBzcGVjaWZpYyBoaWVyYXJjaHkgbGV2ZWxzIChlLmcuIGRlcHRoKSA/PC9lbT48L2g0PgogICAgICA8cD48c3Ryb25nPmRlcHRoPC9zdHJvbmc+IGlzIHVzZWQgdG8gY29udHJvbCB3aGljaCBoaWVyYXJjaHkgbGV2ZWxzIHNob3VsZCBiZSBjb25zaWRlcmVkIGZvciBvdXRwdXQuIEl0IHRha2VzIHR3byBpbnRlZ2VyIHZhbHVlcyBzZXBhcmF0ZWQgYnkgY29tbWEgKGUuZy4gZGVwdGg9Jy0xLDMnfS4gVGhlIGZpcnN0IHZhbHVlIGRlZmluZXMgdGhlIHN0YXJ0aW5nIGhpZXJhcmNoeS4gLTEgPSBzdGFydCB3aXRoIGNvbnRlbnRfZmV0Y2gsIG4gPSBzdGFydCB3aXRoIHNwZWNpZmljIGhpZXJhcmNoeSBsZXZlbCBbMCBhbmQgMSBib3RoIHJldHVybiBmaXJzdCBsZXZlbF0uPC9wPgogICAgICA8cD5UaGUgc2Vjb25kIHZhbHVlIGRlZmluZXMgdGhlIG51bWJlciBvZiBhZGRpdGlvbmFsIGxldmVscyBhZGRlZCB0byB0aGUgY29sbGVjdGlvbi4gMCA9IG5vIGRlcHRoLCBzaWJsaW5ncyBvZiBwYWdlIHNwZWNpZmllZCB3aXRoIGZpcnN0IGRlcHRoIHZhbHVlIGFyZSByZXR1cm5lZCAoaWYgbm90IGV4Y2x1ZGVkIG90aGVyd2lzZSkuIG4gPSBudW1iZXIgb2YgYWRkaXRpb25hbCBsZXZlbCByZWxhdGl2ZSB0byB0aGUgbGV2ZWwgc3BlY2lmaWVkIHdpdGggZmlyc3QgZGVwdGggdmFsdWUuPC9wPgogICAgICA8cD48c3Ryb25nPkJvdGggdmFsdWVzIG11c3QgYmUgdXNlZCE8L3N0cm9uZz48L3A+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjMkY29udGVudF9mZXRjaCBkZXB0aD0nLTEsMyd9PC9wcmU+CgogICAgICA8aDM+RXhjbHVkZSBpdGVtczwvaDM+CgogICAgICA8cD48ZW0+RXhjbHVkZSBzaW5nbGUgaXRlbXMgZnJvbSB0aGUgbGlzdDwvZW0+PC9wPgogICAgICA8cD48c3Ryb25nPmV4Y2x1ZGU8L3N0cm9uZz4gYWxsb3dzIHlvdSB0byByZW1vdmUgc3BlY2lmaWMgcGFnZXMgZnJvbSB0aGUgcmVzdWx0cy4gSXQgdGFrZXMgYW55IG51bWJlciBvZiBjb250ZW50IDxlbT5JRHMgc2VwYXJhdGVkIGJ5IGNvbW1hPC9lbT4uIEVzcGVjaWFsbHkgd2hlbiBmb3JjaW5nIGNvbnRlbnRfZmV0Y2ggdG8gY29tcGlsZSBzbWFydHkgaW4gZm91bmQgY29udGVudC1ibG9ja3MsIHlvdSBjYW4gdXNlIHRoaXMgdGFnIHRvIGJyZWFrIGVuZGxlc3MgcmVjdXJzaW9ucyBvciBmb3IgYW55IG90aGVyIHJlYXNvbiB3aGVyZSB5b3Ugd2FudCBzcGVjaWZpYyBwYWdlcyBub3QgdG8gYXBwZWFyLjwvcD4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mIzEyMyRjb250ZW50X2ZldGNoIGV4Y2x1ZGU9JzEzLDIzLDUzLDEyLDMyJ308L3ByZT4KCiAgICAgIDxwPjxlbT5KdXN0IHNob3cgdGhlIGRhdGEgb2YgYSBzcGVjaWZpYyBlbGVtZW50PC9lbT48L3A+CiAgICAgIDxwPjxzdHJvbmc+dGhpc19vbmx5PC9zdHJvbmc+IGlzIGEgcGFyYW1ldGVyIHRoYXQgd2lsbCBsaW1pdCB0aGUgcmVzdWx0IHRvIHRoaXMgc3BlY2lmaWMgSUQuPC9wPgogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiYjMTIzJGNvbnRlbnRfZmV0Y2ggdGhpc19vbmx5PTU1fTwvcHJlPgoKICAgICAgPGgzPkFkZCBtb3JlIGRhdGEgdG8gdGhlIGl0ZW08L2gzPgogICAgICA8aDQ+PGVtPkdldCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHBhcmVudCBwYWdlczwvZW0+PC9oND4KICAgICAgPHA+PHN0cm9uZz5wYXJlbnRzPC9zdHJvbmc+IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGFyZW50IHBhZ2VzIChhbGlhcyBhbmQgdGl0bGUpLiBQb3NzaWJsZSB2YWx1ZXMgYXJlIDxlbT50cnVlPC9lbT4gb3IgPGVtPmZhbHNlPC9lbT4uIFVzaW5nIHRoZXNlIHBhcmFtZXRlcnMgYWxsb3dzIHlvdSB0byB1c2UgdGhlIGRhdGEgZWxlbWVudCAkZHVtcFtuXS0+cGFyZW50cy0+YWxpYXMgb3IgJGR1bXBbbl0tPnBhcmVudHMtPnRpdGxlLiBUaGUgZGF0YSBlbGVtZW50ICRkdW1wW25dLT5wYXJlbnRzLT5pZCB3aWxsIGJlIHByb3ZpZGVkIGluIGFueSBjYXNlLjwvcD4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mIzEyMyRjb250ZW50X2ZldGNoIHBhcmVudHM9dHJ1ZX08L3ByZT4KCiAgICAgIDxoND48ZW0+R2V0IG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHVzZXJzIHdobyB3cm90ZS9lZGl0ZWQgdGhlIGNvbnRlbnQ8L2VtPjwvaDQ+CiAgICAgIDxwPjxzdHJvbmc+dXNlcnM8L3N0cm9uZz4gY2FuIGJlIHVzZWQgdG8gcmVxdWVzdCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSB1c2VycyB3aG8gbGFzdCBlZGl0ZWQgYW5kIGNyZWF0ZWQgdGhlIGNvbnRlbnQuIFBvc3NpYmxlIHZhbHVlcyBhcmUgPGVtPnRydWU8L2VtPiBvciA8ZW0+ZmFsc2U8L2VtPi4gUGVyIGRlZmF1bHQgJGR1bXBbbl0tPmNyZWF0ZWQtPmJ5IGFuZCAkZHVtcFtuXS0+bW9kaWZpZWQtPmJ5IHdpbGwgb25seSByZXR1cm4gdGhlIHVzZXIgSUQuIElmIHNldCB0byB0cnVlLCB0aGUgbWVudGlvbmVkIGNsYXNzIGVsZW1lbnRzIHdpbGwgYmUgZXhwYW5kZWQgYnkgZGV0YWlsZWQgdXNlciBpbmZvIChmaXJzdC0sIGxhc3QtIGFuZCB1c2VyIG5hbWUpLjwvcD4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mIzEyMyRjb250ZW50X2ZldGNoIHVzZXJzPXRydWV9PC9wcmU+ClcKICAgICAgPGg0PjxlbT5Vc2luZyBtb3JlIGNvbnRlbnQtYmxvY2tzIGZyb20gdGhlIHBhZ2VzPC9lbT48L2g0PgogICAgICA8cD48c3Ryb25nPmV4dGVuc2lvbnM8L3N0cm9uZz4gaXMgeW91ciBjaG9pY2UgdGhlbi4gSXQgdGFrZXMgYSA8ZW0+Y29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgY29udGVudF9ibG9ja3M8L2VtPi4gSWYgYW55IG9mIHRoZW0gKGZvciBhbiBpdGVtKSBmZWF0dXJlcyBjb250ZW50LCAkZHVtcFtuXS0+ZXh0ZW5zaW9uIHdpbGwgYmUgJzEnLCBvdGhlciB3aXNlIGl0IHdpbGwgYmUgJzAnIChkZWZhdWx0KS4gVGhpcyBjYW4gYmUgdXNlZCB0byBjaGVjayBmb3IgYXZhaWxhYmlsaXR5IG9mICdtb3JlJyBkYXRhLiBFYWNoIGNvbnRlbnRfYmxvY2sgd2lsbCBiZSBhZGRlZCBhcyBhIGNsYXNzIGJlbG93ICRkdW1wW25dLT5leHRlbnNpb25zLiBFLmcuICYjMTIzJGNvbnRlbnQgYmxvY2s9J21vcmVfdGV4dCd9IHdpbGwgYmUgYXZhaWxhYmxlIGFzICRkdW1wW25dLT5leHRlbnNpb25zLT5tb3JlX3RleHQtPmRhdGEgdG9nZXRoZXIgd2l0aCAkZHVtcFtuXS0+ZXh0ZW5zaW9ucy0+bW9yZV90ZXh0LT5sZW5ndGguIElkZWFsbHksIHlvdXIgY29udGVudCBibG9jayBuYW1lcyBkbyBub3QgZmVhdHVyZSBzcGVjaWFsIGNoYXJhY3RlcnMgYW5kIG5vdCAnICcgb3IgJy0nLCB1c2UgJ18nIGluc3RlYWQuPC9wPgogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiYjMTIzJGNvbnRlbnRfZmV0Y2ggZXh0ZW5zaW9ucz0nc3VtbWFyeSxpbWFnZSxvdGhlcl9ibG9ja19uYW1lJ308L3ByZT4KCiAgICAgIDxoMz5Qcm9jZXNzIGRhdGEgZnJvbSBpdGVtczwvaDM+CgogICAgICA8aDQ+PGVtPkNoYW5nZSB0aGUgZGF0ZS90aW1lIGZvcm1hdDwvZW0+PC9oND4KICAgICAgPHA+PHN0cm9uZz5kYXRlZm9ybWF0PC9zdHJvbmc+IGNhbiBiZSB1c2VkIHRvIGZvcm1hdCB0aGUgZGF0ZSBvdXRwdXQgb2YgY29udGVudF9mZXRjaC4gQ2hlY2sgPGEgaHJlZj0iaHR0cDovL2RlLnBocC5uZXQvc3RyZnRpbWUiIHRhcmdldD0iYmxhbmsiPmh0dHA6Ly9kZS5waHAubmV0L3N0cmZ0aW1lPC9hPiBmb3IgbW9yZSBpZm8gb24gdGhlIGRhdGUgZm9ybWF0IG9wdGlvbnMuIEl0IGlzIHNldCB0byA8ZW0+JyVBLCAlZSAlQiAlWSc8L2VtPiBieSBkZWZhdWx0IChlLmcuIFNhdCwgMjAgU2VwdGVtYmVyIDIwMDgpLiBJdCBpcyB1c2VkIGZvciB0aGUgdHdvIHRpbWUgc3RhbXBzICRkdW1wW25dLT5jcmVhdGVkLT5kYXRlIGFuZCAkZHVtcFtuXS0+bW9kaWZpZWQtPmRhdGUgdGhhdCBhcmUgYWx3YXlzIHJldHVybmVkIHdpdGggZWFjaCBpdGVtLjwvcD4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mIzEyMyRjb250ZW50X2ZldGNoIGRhdGVmb3JtYXQ9JyVBLCAlZSAlQiAlWSd9PC9wcmU+CgogICAgICA8aDQ+PGVtPkNoYW5nZSB0aGUgZGF0ZS90aW1lIGxvY2FsZTwvZW0+PC9oND4KICAgICAgPHA+PHN0cm9uZz5jZGxvY2FsZTwvc3Ryb25nPiBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgc3BlY2lmaWMgbG9jYWxlIGZvciB5b3VyIG91dHB1dC4gRS5nLiB5b3VyIHBhZ2UgaXMgZGFuaXNoIGFuZCB5b3VyIHNpdGUvc2VydmVyIGlzIHNldCB0byB0aGlzIGxvY2FsZSAtIGJ1dCBmb3IgdGhlIGdlbmVyYXRpb24gb2YgdmFsaWQgUlNTIHlvdSBtaWdodCBuZWVkIHRoZSBVUyBkYXRlL3RpbWUgbG9jYWxlLiA8L3A+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjMkY29udGVudF9mZXRjaCBjZGxvY2FsZT0nZW4tdXMnfTwvcHJlPgoKICAgICAgPGg0PjxlbT5DaGFuZ2UgdGhlIGRhdGUgZm9ybWF0IGxvY2FsZTwvZW0+PC9oND4KICAgICAgPHA+PHN0cm9uZz5sb2NhbGU8L3N0cm9uZz4gY2FuIGJlIHVzZWQgdG8gYWx0ZXIgdGhlIGxvY2FsZSB1c2VkIGZvciB0aGUgdGltZXN0YW1wIChlLmcuIHN5c3RlbSBpcyBEYW5pc2gsIGJ1dCB5b3UgbmVlZCBVUyBkYXkgbmFtZXMgZm9yIFhNTCkuPC9wPgogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiYjMTIzJGNvbnRlbnRfZmV0Y2ggbG9jYWxlPSdlbi1VUyd9PC9wcmU+CgogICAgICA8aDQ+PGVtPkNvbXBpbGUgb3IgcmVtb3ZlIFNtYXJ0eSB0YWdzIGZyb20gb3V0cHV0PC9lbT48L2g0PgogICAgICA8cD48c3Ryb25nPmRvX3NtYXJ0eTwvc3Ryb25nPiBjb250cm9scyBob3cgc21hcnR5IGRhdGEgdGhhdCBtYXkgYmUgcmV0cmlldmVkIHNob3VsZCBiZSBoYW5kbGVkLiBUaGVyZSBhcmUgdGhyZWUgb3B0aW9ucyA8ZW0+J2NvbXBpbGUnPC9lbT4sIDxlbT4nbmV1dHJhbCc8L2VtPiBhbmQgPGVtPidzdHJpcCc8L2VtPi4gPGVtPidjb21waWxlJzwvZW0+IGNvbXBpbGVzIHNtYXJ0eSBkYXRhIGluIHRoZSBwYWdlcyBmb3VuZC4gPGVtPiduZXV0cmFsJzwvZW0+IHByaW50cyBvdXQgdGhlIHNtYXJ0eSBjb2RlIGFzIHJlZ3VsYXIgdGV4dCBhbmQgaXMgdGhlIGRlZmF1bHQgc2V0dGluZy4gPGVtPidzdHJpcCc8L2VtPiBkZWxldGVzIGFsbCBzbWFydHkgY29kZSBmcm9tIHlvdXIgcGFnZSAod2VsbCwgZXZlcnl0aGluZyBiZXR3ZWVuICYjMTIzJCBhbmQgfSkuPC9wPgogICAgICA8cD5Ib3dldmVyLCBiZSBjYXJlZnVsbHkgbm90IHRvIGNvbnN0cnVjdCBhIHF1ZXJ5IHRoYXQgd291bGQgaGF2ZSB0byBjb21waWxlIGl0c2VsZiwgdGhpcyB3aWxsIHJlc3VsdCBpbiBhbiBvdXQgb2YgbWVtb3J5IGVycm9yIGR1ZSB0byBlbmRsZXNzIHJlY3Vyc2lvbi5JZiB5b3UgdXNlIHRoaXMgdGFnIG9ubHkgb25jZSB3aXRoIHRoZSBjb21waWxlIHBhcmFtZXRlciBpbiB5b3VyIHNpdGUsIG5vIHByb2JsZW0sIGl0IHByZXZlbnRzIGl0c2VsZiBmcm9tIGJlaW5nIHJlbmRlcmVkLiBCdXQgaWYgeW91IGhhdmUgYW5vdGhlciBvY2N1cnJlbmNlIG9mIHRoaXMgdGFnIHRoYXQgd291bGQgaW5jbHVkZSB0aGUgcGFnZSB0aGF0IGlzIGNhbGxpbmcgdGhlIGN1cnJlbnRseSBwcm9jZXNzZWQgdGFnIHdpdGggY29tcGlsZT0ndHJ1ZScsIHlvdSBzaG91bGQgZXhjbHVkZSBhbGwgb2YgdGhlc2UgcGFnZXMgKGNvbnRlbnRfZmV0Y2ggZG9lcyBub3QgY2hlY2sgZm9yIHRoZSBjb21waWxlIHBhcmFtZXRlciBvZiBvdGhlciBvY2N1cnJlbmNlcyBvZiB0aGUgdGFnKS48L3A+CiAgICAgIDxwPklmIHRoYXQgY2FsbGVkIHRhZyB3b3VsZCBmZWF0dXJlIG90aGVyIGNvbnRlbnQgYmxvY2tzLi4uIHRoZW4sIGFnYWluLCBhbGwgd291bGQgd29yayBuaWNlLiBKdXN0IGRvIG5vdCBjb25zdHJ1Y3Qgc29tZXRoaW5nIHdpdGggY29udGVudF9mZXRjaCB0aGF0IGlzIHNvbWV3aGVyZSBpbiB0aGUgY2hhaW4gb2YgZXZlbnRzIGNvbXBpbGluZyBpdHNlbGYuPC9wPgogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiYjMTIzJGNvbnRlbnRfZmV0Y2ggZG9fc21hcnR5PSJjb21waWxlIn08L3ByZT4KCiAgICAgIDxoND48ZW0+UmVtb3ZlIEhUTUwgZnJvbSBjb250ZW50IGVsZW1lbnRzIHNvIHRoYXQgaXQgY2FuIHNhZmVseSBiZSB0cnVuY2F0ZWQ8L2VtPjwvaDQ+CiAgICAgIDxwPjxzdHJvbmc+aHRtbDwvc3Ryb25nPiBpcyBhIHBhcmFtZXRlciB0aGF0IGFsbG93cyB5b3UgdG8gcmVtb3ZlIGFueSBIVE1MLCBKYXZhU2NyaXB0IGFuZCBDU1MgZnJvbSBhIGNvbnRlbnQtYmxvY2suIDxlbT4nc3RyaXAnPC9lbT4gYW5kIDxlbT4nbmV1dHJhbCc8L2VtPiBhcmUgdGhlIGF2YWlsYWJsZSBvcHRpb25zLiA8ZW0+J25ldXRyYWwnPC9lbT4gd2lsbCBkaXNwbGF5IHRoZSBjb250ZW50IGFzIGl0IGlzIChhZnRlciBwcm9jZXNzaW5nIGRvX3NtYXJ0eSBzZXR0aW5ncykgYW5kIGlzIHRoZSBkZWZhdWx0IHNldHRpbmcuIDxlbT4nc3RyaXAnPC9lbT4gd2lsbCByZW1vdmUgdGhlIG1lbnRpb25lZCBlbGVtZW50cy48L3A+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjMkY29udGVudF9mZXRjaCBodG1sPSduZXV0cmFsJ308L3ByZT4KCiAgICAgIDxoMz5Tb3J0IGl0ZW1zPC9oMz4KCiAgICAgIDxoND48ZW0+UHJpbWFyeSBzb3J0aW5nIG9mIGRhdGEgZWxlbWVudHM8L2VtPjwvaDQ+CiAgICAgIDxwPjxzdHJvbmc+Zmlyc3Rfc29ydDwvc3Ryb25nPiBzb3J0cyB0aGUgZm91bmQgY29udGVudCBieSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6IDxlbT5pZCwgdGl0bGUsIGNyZWF0ZWQsIG1vZGlmaWVkLCBvd25lciwgaGllcmFyY2h5IChkZWZhdWx0KSwgaWRfaGllcmFyY2h5LCBsYXN0ZWRpdG9yLCBhY3RpdmUsIHNob3cgKHNob3cgaW4gbWVudSk8L2VtPi4gRm9yIHRpbWUgYmFzZWQgKGxpa2UgbmV3ZXN0IGNvbnRlbnRzKSB1c2UgY3JlYXRlZCwgZm9yIGxhc3QgdXBkYXRlZCBsaXN0cyB1c2UgbW9kaWZpZWQgKGJvdGggbmVlZCB0byBiZSByZXZlcnNlZCB3aXRoIHNvcnRfb3JkZXIpLiBIaW50OiBTb3J0aW5nIGJ5IG93bmVyIG9yIGxhc3RlZGl0b3IgdGFrZXMgcGxhY2UgYnkgSUQsIG5vdCBuYW1lITwvcD4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mIzEyMyRjb250ZW50X2ZldGNoIGZpcnN0X3NvcnQ9J293bmVyJ308L3ByZT4KCiAgICAgIDxoND48ZW0+U2V0IHRoZSBkaXJlY3Rpb24gb2YgcHJpbWFyeSBzb3J0aW5nPC9lbT48L2g0PgogICAgICA8cD48c3Ryb25nPmZpcnN0X3NvcnRfb3JkZXI8L3N0cm9uZz4gY2FuIGJlIHVzZWQgdG8gcmV2ZXJzZSB0aGUgc29ydGluZyBmaWx0ZXIuIDxlbT4ndXAnPC9lbT4gYW5kIDxlbT4nZG93bic8L2VtPiBhcmUgdGhlIGF2YWlsYWJsZSBvcHRpb25zLCB3aGVyZWFzICJ1cCIgKEEgYmVmb3JlIEIgb3IgeWVzdGVyZGF5IGJlZm9yZSB0b2RheSkgaXMgdGhlIGRlZmF1bHQgZGlyZWN0aW9uLjwvcD4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mIzEyMyRjb250ZW50X2ZldGNoIGZpcnN0X3NvcnRfb3JkZXI9J3VwJ308L3ByZT4KCiAgICAgIDxoND48ZW0+U2Vjb25kYXJ5IHNvcnRpbmcgb2YgZGF0YSBlbGVtZW50czwvZW0+PC9oND4KICAgICAgPHA+PHN0cm9uZz5zZWNvbmRfc29ydDwvc3Ryb25nPiBzb3J0cyB0aGUgZm91bmQgY29udGVudCBqdXN0IGFzIDxzdHJvbmc+Zmlyc3Rfc29ydF9vcmRlcjwvc3Ryb25nPiBkb2VzIGFuZCBhZGRzIGFuIGV4dHJhIGZpbHRlciB0byB0aGUgcmVzdWx0czwvcD4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mIzEyMyRjb250ZW50X2ZldGNoIHNlY29uZF9zb3J0PSdvd25lcid9PC9wcmU+CgogICAgICA8aDQ+PGVtPlNldCB0aGUgZGlyZWN0aW9uIG9mIHNlY29uZGFyeSBzb3J0aW5nPC9lbT48L2g0PgogICAgICA8cD48c3Ryb25nPnNlY29uZF9zb3J0X29yZGVyPC9zdHJvbmc+IGlzIHRoZSBzYW1lIGFzIDxzdHJvbmc+Zmlyc3Rfc29ydF9vcmRlcjwvc3Ryb25nPiAgYnV0IGZvciA8c3Ryb25nPnNlY29uZF9zb3J0PC9zdHJvbmc+LjwvcD4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mIzEyMyRjb250ZW50X2ZldGNoIHNlY29uZF9zb3J0X29yZGVyPSd1cCd9PC9wcmU+CgogICAgICA8aDM+TWF4aW11bSBkYXRhIHN0cnVjdHVyZSBmb3IgZmV0Y2ggaXRlbXM6PC9oMz4KCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+CiAgJiMxMjM7KgogICAgJGNvbnRlbnRfZmV0Y2ggPSBhcnJheSBvZiBjbGFzc2VzCiAgICBuID0gaW50ZWdlcgoKICAgICRjb250ZW50X2ZldGNoW25dLSZndDtpdGVtICA9ICBDb3VudGVyIGZvciBpdGVtcyBpbiBjdXJyZW50IGxpc3QgKGludGVnZXIpCiAgKn0KICAmIzEyMyRjb250ZW50X2ZldGNoWzFdLSZndDtjb250ZW50LSZndDtpZH0KICAmIzEyMyRjb250ZW50X2ZldGNoWzFdLSZndDtjb250ZW50LSZndDthbGlhc30KICAmIzEyMyRjb250ZW50X2ZldGNoWzFdLSZndDtjb250ZW50LSZndDt0aXRsZX0KICAmIzEyMyRjb250ZW50X2ZldGNoWzFdLSZndDtjb250ZW50LSZndDttZW51fQogICYjMTIzJGNvbnRlbnRfZmV0Y2hbMV0tJmd0O2NvbnRlbnQtJmd0O3Nob3d9CiAgJiMxMjMkY29udGVudF9mZXRjaFsxXS0mZ3Q7Y29udGVudC0mZ3Q7YWN0aXZlfQogICYjMTIzJGNvbnRlbnRfZmV0Y2hbMV0tJmd0O2NvbnRlbnQtJmd0O2RhdGF9CgogICYjMTIzJGNvbnRlbnRfZmV0Y2hbMV0tJmd0O3BhcmVudHMtJmd0O2lkfQogICYjMTIzJGNvbnRlbnRfZmV0Y2hbMV0tJmd0O3BhcmVudHMtJmd0O2FsaWFzfQogICYjMTIzJGNvbnRlbnRfZmV0Y2hbMV0tJmd0O3BhcmVudHMtJmd0O3RpdGxlfQoKICAmIzEyMyRjb250ZW50X2ZldGNoWzFdLSZndDtjcmVhdGVkLSZndDtkYXRlfQogICYjMTIzJGNvbnRlbnRfZmV0Y2hbMV0tJmd0O2NyZWF0ZWQtJmd0O2J5LSZndDt1c2VybmFtZX0KICAmIzEyMyRjb250ZW50X2ZldGNoWzFdLSZndDtjcmVhdGVkLSZndDtieS0mZ3Q7bGFzdF9uYW1lfQogICYjMTIzJGNvbnRlbnRfZmV0Y2hbMV0tJmd0O2NyZWF0ZWQtJmd0O2J5LSZndDtmaXJzdF9uYW1lfQogICYjMTIzJGNvbnRlbnRfZmV0Y2hbMV0tJmd0O2NyZWF0ZWQtJmd0O2J5LSZndDtlbWFpbH0KCiAgJiMxMjMkY29udGVudF9mZXRjaFsxXS0mZ3Q7bW9kaWZpZWQtJmd0O2RhdGV9CiAgJiMxMjMkY29udGVudF9mZXRjaFsxXS0mZ3Q7bW9kaWZpZWQtJmd0O2J5LSZndDt1c2VybmFtZX0KICAmIzEyMyRjb250ZW50X2ZldGNoWzFdLSZndDttb2RpZmllZC0mZ3Q7YnktJmd0O2xhc3RfbmFtZX0KICAmIzEyMyRjb250ZW50X2ZldGNoWzFdLSZndDttb2RpZmllZC0mZ3Q7YnktJmd0O2ZpcnN0X25hbWV9CiAgJiMxMjMkY29udGVudF9mZXRjaFsxXS0mZ3Q7bW9kaWZpZWQtJmd0O2J5LSZndDtlbWFpbH0KCiAgJiMxMjMkY29udGVudF9mZXRjaFsxXS0mZ3Q7ZXh0ZW5zaW9ufQogICYjMTIzKgogICAgQW5kIGZvciBlYWNoIGV4dGVuc2lvbiB5b3UgaGF2ZSBuYW1lZCwgeW91IHdpbGwgZ2V0IGFuIGVxdWFsbHkgbmFtZWQgY2xhc3MgZWxlbWVudCBiZWxvdyAmIzEyMyRjb250ZW50X2ZldGNoW25dLSZndDtleHRlbnNpb25zCgogICAgZS5nLgogICp9CiAgJiMxMjMkY29udGVudF9mZXRjaFsxXS0+ZXh0ZW5zaW9ucy0mZ3Q7c3VtbWFyeS0mZ3Q7ZGF0YX0KICAmIzEyMyRjb250ZW50X2ZldGNoWzFdLSZndDtleHRlbnNpb25zLSZndDtzdW1tYXJ5LSZndDtsZW5ndGh9CiAgICAgIDwvcHJlPgoKICAgICAgPGg1PkRhdGUgc3RydWN0dXJlIG9mIHBhZ2VyIGluZm9ybWF0aW9uPC9oNT4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4KICAmIzEyMyRwYWdlcl9pbmZvLSZndDtjdXJyZW50fQogICYjMTIzJHBhZ2VyX2luZm8tJmd0O21heH0KICAmIzEyMyRwYWdlcl9pbmZvLSZndDtzaXplfTwvcHJlPgoKICAgICAgPGg1PlVzZWZ1bGwgc21hcnR5IHNuaXBwZXRzIGZvciB3b3JraW5nIHdpdGggY29udGVudF9mZXRjaDwvaDU+CiAgICAgIDxwPkJlbG93IHlvdSBmaW5kIHNvbWUgY29kZSBzbmlwcGV0cyB5b3UgY2FuIHVzZSBpbiB5b3VyIHRlbXBsYXRlcyBpbiBjb25qdW5jdGlvbiB3aXRoIGNvbnRlbnRfZmV0Y2g8L3A+CgogICAgICA8aDU+UHJlcGFyZSB0ZW1wbGF0ZSBmb3IgcGFnaW5nPC9oNT4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4KICAmIzEyMzthc3NpZ24gdmFyPXBhZ2VfY2FsbCB2YWx1ZT0kc21hcnR5LmdldC5zaG93X3BhZ2V9CiAgJiMxMjM7aWYgJHBhZ2VfY2FsbCA9PSAnJ30mIzEyMzthc3NpZ24gdmFyPXBhZ2VfY2FsbCB2YWx1ZT0xfSYjMTIzOy9pZn08L3ByZT4KCiAgICAgIDxwPlRoaXMgd2lsbCBsaXN0ZW4gZm9yIFVSTCBwYXJhbWV0ZXIgY2FsbGVkIHNob3dfcGFnZSBhbmQgaXRzIHZhbHVlLiBJZiBubyBwYXJhbWV0ZXIgZm91bmQsIGNyZWF0ZSBpcyBhbmQgYXNzaWduIHZhbHVlIDEuIFVzZSAkcGFnZV9jYWxsIGFzIHRoZSB2YWx1ZSBvZiB0aGUgcGFnZSBwYXJhbWV0ZXIgJiMxMjM7Li4ucGFnZT0kcGFnZV9jYWxsLi4ufTwvcD4KICAgICAgPGg0PiduZXdlcicgJ29sZGVyJyBwYWdlcjwvaDQ+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+CiAgJiMxMjM7aWYgJHBhZ2VfY2FsbCA+IDEgfQogICAgJmx0O2EgaHJlZj0iYmxvZy5odG0/c2hvd19wYWdlPSYjMTIzOyRwYWdlcl9pbmZvLT5jdXJyZW50LTF9Ij5uZXdlciBhcnRpY2xlcyZsdDsvYT4KICAmIzEyMzsvaWZ9CgogICYjMTIzO2lmICRwYWdlcl9pbmZvLT5tYXggPiAkcGFnZV9jYWxsfQogICAgJmx0O2EgaHJlZj0iYmxvZy5odG0/c2hvd19wYWdlPSYjMTIzOyRwYWdlcl9pbmZvLT5jdXJyZW50KzF9Ij5vbGRlciBhcnRpY2xlcyZsdDsvYT4KICAmIzEyMzsvaWZ9PC9wcmU+CiAgICAgIDxoND5QYWdlIG51bWJlciBsaXN0IHBhZ2VyPC9oND4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4KJiMxMjM7c2VjdGlvbiBuYW1lPSdpJyBzdGFydD0xIGxvb3A9JHBhZ2VyX2luZm8tPm1heCsxIHN0ZXA9MX0KJmx0O2EgaHJlZj0iYmxvZy5odG0/c2hvd19wYWdlPSYjMTIzOyRzbWFydHkuc2VjdGlvbi5pLmluZGV4fSI+JiMxMjM7JHNtYXJ0eS5zZWN0aW9uLmkuaW5kZXh9Jmx0Oy9hPgomIzEyMzsvc2VjdGlvbn08L3ByZT4KICAgICAgPGg0PldhbGsgdGhyb3VnaCBhbGwgYXZhaWxhYmxlIGVsZW1lbnRzPC9oND4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4KICAmIzEyMztjb250ZW50X2ZldGNoIC4uLiB9CiAgJiMxMjM7Zm9yZWFjaCAkY29udGVudF9mZXRjaCBhcyAkZmV0Y2hfZGF0YX0KICAmIzEyMzskZmV0Y2hfZGF0YS0+Y29udGVudC0+ZGF0YX0KICAmIzEyMzsvZm9yZWFjaH08L3ByZT4KICAgICAgPGg0PkRpc3BsYXkgcmVhZCBtb3JlIGxpbms8L2g0PgogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPgogICYjMTIzO2NvbnRlbnRfZmV0Y2ggLi4uIH0KICAmIzEyMztmb3JlYWNoICRjb250ZW50X2ZldGNoIGFzICRmZXRjaF9kYXRhfQogICAgJiMxMjM7aWYgJGZldGNoX2RhdGEtPmV4dGVuc2lvbiA9PSAxfQogICAgICAmbHQ7YSBocmVmPSImIzEyMzskZmV0Y2hfZGF0YS0+Y29udGVudC0+YWxpYXN9Lmh0bSI+cmVhZCBtb3JlJmx0Oy9hPgogICAgJiMxMjM7L2lmfQogICYjMTIzOy9mb3JlYWNofTwvcHJlPgogICAgICA8cD5PcmlnaW5hbCBBdXRob3Igb2YgdGhlIGNvbnRlbnRfZHVtcCBwbHVnaW46IE5pbHMgSGFhY2sgJmx0O2hlbGxvQG9wdGljYWx2YWx2ZS5jb20mZ3Q7PC9wPgogICAgPC9kaXY+CiAgPC9saT4KICAgICAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4KICAgIDxoMyBjbGFzcz0iYWwiPiYjMTIzO2ZpbGVzX2xpc3R9IDxzcGFuIGNsYXNzPSJzbWFsbCI+TGlzdCBmaWxlcyBhbmQgZm9sZGVycyA8c3BhbiBzdHlsZT0iY29sb3I6Z3JlZW4iPjxzdHJvbmc+KG5ldyk8L3N0cm9uZz48L3NwYW4+PC9zcGFuPjwvaDM+CiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPgogICAgICA8cD5BIHNtYXJ0eSBwbHVnaW4gdGhhdCBsaXN0cyBmaWxlcyBhbmQgZm9sZGVycyBpbiBhIHNwZWNpZmljIGRpcmVjdG9yeSB3aXRoIGZpbGUgbmFtZSwgZmlsZSBzaXplLCBmaWxlIGRhdGUgYW5kIG90aGVyIG9wdGlvbmFsIGluZm8uIFNpbXBsZSBhcyBpdCBtYXkgbG9vaywgaXQgaXMgYSBzb3BoaXN0aWNhdGVkIHBsdWdpbiB3aXRoIG1hbnkgZmVhdHVyZXMgaW5jbHVkaW5nIGZpbGVzIGRvd25sb2FkIGFuZCBkb3dubG9hZCBsaW5rIG9iZnVzY2F0aW9uLCBzb3J0aW5nLCBsaW1pdHMsIGV0Yy48L3A+CiAgICAgIDxwPlRoZSBwbHVnaW4gaGFzIHRoZSBhYmlsaXR5IHRvIGxpc3QgZmlsZXMgdW5kZXIgdGhlIHJvb3Qgb2YgdGhlIENNUyBNYWRlIFNpbXBsZSBpbnN0YWxsYXRpb24gdGh1cyBtYWtpbmcgZWFzaWVyIHRvIHByZXZlbnQgZmlsZSBob3QgbGlua2luZy4gVG9nZXRoZXIgd2l0aCBhIG1vZHVsZSBvciBwbHVnaW4gdGhhdCBwcm90ZWN0cyBhY2Nlc3MgdG8gcGFnZXMgaXQgbWFrZXMgaXQgaW1wb3NzaWJsZSB0byBzaGFyZSBsaW5rcyB0byBmaWxlcy48L3A+CiAgICAgIDxwPlRoZSBwbHVnaW4gcmV0dXJucyBhIG9iamVjdCAod2hpY2ggY2FuIGVhc2lseSBiZSBjb252ZXJ0ZWQgdG8gYW4gYXJyYXkpIHdoaWNoIHByb3BlcnRpZXMgaG9sZCB0aGUgbmVlZGVkIGRhdGEgKG1vc3Qgb2YgaXQgaW4gdGhlIGZvcm0gb2YgYXJyYXlzKSB0byBiZSB1c2VkIGluIHRlbXBsYXRlcyBpbiBhbnkgd2F5IHlvdSB3aXNoLjwvcD4KICAgICAgPHA+UGFyYW1ldGVyczo8L3A+CiAgICAgIDx1bD4KICAgICAgICA8bGk+IDxzdHJvbmc+Zm9sZGVyPC9zdHJvbmc+IC0gZm9sZGVyIHRvIGxpc3QgZmlsZXMgZnJvbSAoZGVmYXVsdCBpcyA8c3Ryb25nPid1cGxvYWRzJzwvc3Ryb25nPikuIDxlbT4ob3B0aW9uYWwpPC9lbT48L2xpPgogICAgICAgIDxsaT4gPHN0cm9uZz5yb290PC9zdHJvbmc+IC0gYSBmdWxsIHBhdGggZnJvbSB0aGUgcm9vdCBvZiB0aGUgYWNjb3VudCBmaWxlIHN5c3RlbSwgcmVxdWlyZWQgaWYgdGhlIGZpbGVzIGFyZSBsb2NhdGVkIHVuZGVyIHRoZSBzaXRlIGluc3RhbGxhdGlvbiByb290LiAoZGVmYXVsdCBpcyA8c3Ryb25nPicnPC9zdHJvbmc+KSBpLmUuIGFuIGVtcHR5IHN0cmluZy4gV2hlbiBlbXB0eSwgdGhlIHBsdWdpbiB3aWxsIGRlcml2ZSB0aGUgYWJvdmUgPHN0cm9uZz5mb2xkZXI8L3N0cm9uZz4gcGFyYW1ldGVyIHN0YXJ0aW5nIGZyb20gdGhlIHJvb3Qgb2YgdGhlIHNpdGUuIEhhdmluZyBhIGZ1bGwgcGF0aCBmcm9tIHRoZSByb290LCBhbGxvd3MgdG8gbGlzdCBmaWxlcyBmcm9tIG5vbi1wdWJsaWMgZm9sZGVycyBiZWxvdyB0aGUgc2l0ZSByb290LiBUaG9zZSBmaWxlcyBjYW4gYmUgZG93bmxvYWRlZCBidXQgbm8gZmlsZXMgY2FuIGJlIGV4ZWN1dGVkLjxlbT4ob3B0aW9uYWwpPC9lbT48YnI+CiAgICAgICAgICBOb3RlOiBIYXZpbmcgcm9vdCBzZXQgdG8gYW55dGhpbmcgYnV0IGFuIGVtcHR5IHN0cmluZyBhdXRvbWF0aWNhbGx5IGFjdGl2YXRlcyBkb3dubG9hZCBvYmZ1c2NhdGlvbiBmb3Igc2VjdXJpdHkgcHVycG9zZXMuPC9saT4KICAgICAgICA8bGk+IDxzdHJvbmc+c2hvd19oaWRkZW48L3N0cm9uZz4gLSB3aGV0aGVyIHRvIHNob3cgaGlkZGVuIGZpbGVzLiBEZWZhdWx0IGlzIGZhbHNlLiBLZWVwIGluIG1pbmQgdGhhdCB0aGUgZG93bmxvYWRzIGNvdW50IGRhdGEgZmlsZSBpcyBhIGhpZGRlbiBmaWxlIGFuZCB0aGF0IGl0cyBkZWZhdWx0IGxvY2F0aW9uIGlzIHRoZSBzYW1lIGFzIDxzdHJvbmc+Zm9sZGVyPC9zdHJvbmc+LiA8ZW0+KG9wdGlvbmFsKTwvZW0+PC9saT4KICAgICAgICA8bGk+IDxzdHJvbmc+Y291bnRfZG93bmxvYWRzPC9zdHJvbmc+IC0gd2hldGhlciB0byBjb3VudCB0aGUgZG93bmxvYWRzLiBEZWZhdWx0IGlzIGZhbHNlLiBLZWVwIGluIG1pbmQgdGhhdCB0aGUgZG93bmxvYWRzIGNvdW50IGRhdGEgZmlsZSBpcyBhIGhpZGRlbiBmaWxlIGFuZCB0aGF0IGl0cyBkZWZhdWx0IGxvY2F0aW9uIGlzIHRoZSBzYW1lIGFzIDxzdHJvbmc+Zm9sZGVyPC9zdHJvbmc+LiA8ZW0+KG9wdGlvbmFsKTwvZW0+PC9saT4KICAgICAgICA8bGk+IDxzdHJvbmc+Y291bnRlcl9kYl9kaXI8L3N0cm9uZz4gLSB3aGVyZSB0aGUgZG93bmxvYWRzIGRhdGEgZmlsZSBzaG91bGQgYmUgbG9jYXRlZC4gIERlZmF1bHQgbG9jYXRpb24gaXMgdGhlIHNhbWUgYXMgPHN0cm9uZz5mb2xkZXI8L3N0cm9uZz4uIDxlbT4ob3B0aW9uYWwpPC9lbT48YnI+CiAgICAgICAgICBOb3RlOiBjaGFuZ2luZyB0aGlzIHNldHRpbmcgd2l0aG91dCBtb3ZpbmcgdGhlIGZpbGUgdG8gdGhlIHNldCBsb2NhdGlvbiB3aWxsIGNhdXNlIGRhdGEgYmVpbmcgbG9zdCBhcyBhIG5ldyBmaWxlIHdpbGwgYmUgY3JlYXRlZCBhcyBzb29uIGFzIGEgbmV3IGRvd25sb2FkIGlzIGF0dGVtcHRlZC48YnI+CiAgICAgICAgICBOb3RlOiB0byByZXNldCB0aGUgZG93bmxvYWRzIGNvdW50IHlvdSdsbCBuZWVkIHRvIGRlbGV0ZSBvciBlZGl0IHRoZSBkb3dubG9hZHMgZGF0YSBmaWxlLgogICAgICAgIDwvbGk+CiAgICAgICAgPGxpPgogICAgICAgICAgPHN0cm9uZz5kbF9jb3VudGVyX2RiX2ZuPC9zdHJvbmc+IC0gdGhlIG5hbWUgb2YgdGhlIGRvd25sb2FkcyBkYXRhIGZpbGUsIGRlZmF1bHQgaXMgPGVtPicuY291bnRlcl9kYic8L2VtPi48ZW0+KG9wdGlvbmFsKTwvZW0+PGJyPgogICAgICAgICAgTm90ZTogaW4gbW9zdCBub24gd2luZG93cyBPU3MgZmlsZSBzeXN0ZW1zIGEgZmlsZSBzdGFydGluZyB3aXRoIGEgZG90IGlzIGhpZGRlbiBieSBkZWZhdWx0LgogICAgICAgIDwvbGk+CiAgICAgICAgPGxpPgogICAgICAgICAgPHN0cm9uZz5zdHJpcF9leHRlbnNpb248L3N0cm9uZz4gLSB3aGV0aGVyIHRvIGhpZGUgdGhlIGZpbGUgZXh0ZW5zaW9uIGZyb20gdGhlIGxpc3QsIGRlZmF1bHQgaXMgPGVtPmZhbHNlPC9lbT4uPGVtPihvcHRpb25hbCk8L2VtPgogICAgICAgIDwvbGk+CiAgICAgICAgPGxpPgogICAgICAgICAgPHN0cm9uZz5vYmZ1c2NhdGVfZG93bmxvYWQ8L3N0cm9uZz4gLSB3aGV0aGVyIHRvIG9iZnVzY2F0ZSB0aGUgbG9jYXRpb24gb2YgdGhlIGZpbGVzLCBkZWZhdWx0IGlzIDxlbT50cnVlPC9lbT4uPGVtPihvcHRpb25hbCk8L2VtPgogICAgICAgIDwvbGk+CiAgICAgICAgPGxpPgogICAgICAgICAgPHN0cm9uZz5zZWN1cml0eV90b2tlbjwvc3Ryb25nPiAtIHdoZXRoZXIgdG8gcmVxdWlyZSBhIHNlY3VyaXR5IHRva2VuIHRvIGFsbG93IHRvIGRvd25sb2FkLCBkZWZhdWx0IGlzIDxlbT50cnVlPC9lbT4uPGVtPihvcHRpb25hbCk8L2VtPgogICAgICAgIDwvbGk+CiAgICAgICAgPGxpPgogICAgICAgICAgPHN0cm9uZz5zZWN1cml0eV90b2tlbl9xdjwvc3Ryb25nPiAtIHRoZSBuYW1lIG9mIHRoZSBxdWVyeSB2YXJpYWJsZSBmb3IgdGhlIHNlY3VyaXR5IHRva2VuLCBkZWZhdWx0IGlzIDxlbT5fc3Q8L2VtPi48ZW0+KG9wdGlvbmFsKTwvZW0+CiAgICAgICAgPC9saT4KICAgICAgICA8bGk+IDxzdHJvbmc+c29ydDwvc3Ryb25nPiAtIHNvcnQgb3JkZXI6CiAgICAgICAgICA8dWw+CiAgICAgICAgICAgIDxsaT48c3Ryb25nPmQ8L3N0cm9uZz4gLSBzb3J0IGJ5IGRhdGUgYXNjZW5kaW5nOzwvbGk+CiAgICAgICAgICAgIDxsaT48c3Ryb25nPmRkPC9zdHJvbmc+IC0gc29ydCBieSBkYXRlIGRlc2NlbmRpbmc7PC9saT4KICAgICAgICAgICAgPGxpPjxzdHJvbmc+czwvc3Ryb25nPiAtIHNvcnQgYnkgc2l6ZSBhc2NlbmRpbmc7PC9saT4KICAgICAgICAgICAgPGxpPjxzdHJvbmc+c2Q8L3N0cm9uZz4gLSBzb3J0IGJ5IHNpemUgZGVzY2VuZGluZzs8L2xpPgogICAgICAgICAgICA8bGk+PHN0cm9uZz5uczwvc3Ryb25nPiAtIHNvcnQgYnkgbmFtZSBhc2NlbmRpbmc7PC9saT4KICAgICAgICAgICAgPGxpPjxzdHJvbmc+bmQ8L3N0cm9uZz4gLSBzb3J0IGJ5IG5hbWUgZGVzY2VuZGluZzs8L2xpPgogICAgICAgICAgPC91bD4KICAgICAgICAgIChkZWZhdWx0IGlzIHNvcnQgYnkgZmlsZXR5cGUgdGhlbiBmaWxlIG5hbWUpLiA8ZW0+KG9wdGlvbmFsKTwvZW0+PC9saT4KICAgICAgICA8bGk+IDxzdHJvbmc+ZGVsaW1pdGVyPSd5b3VyIGRlbGltaXRlcic8L3N0cm9uZz4gLSBEZWZhdWx0IGlzIF8sIHRoaXMgaXMgdGhlIGVsZW1lbnQgdGhhdCB3aWxsIGJlIHN0cmlwcGVkIGFuZCByZXBsYWNlZCB3aXRoIHNwYWNlcywgdGhpcyBlbmFibGVzIHlvdSB0byBoYXZlIGFjY2Vzc2libGUgZmlsZSBuYW1lIGxpbmtzIHdoaWxlIGFsc28gaGF2aW5nIHByZXR0eSBsb29raW5nIGZpbGUgbmFtZXMgb24gdGhlIGZyb250IGVuZC48ZW0+KG9wdGlvbmFsKTwvZW0+PC9saT4KICAgICAgICA8bGk+IDxzdHJvbmc+c2hvd3NpemU9J2ZhbHNlJzwvc3Ryb25nPiAtIERlZmF1bHQgaXMgdHJ1ZSwgYnV0IHNldHRpbmcgdGhpcyB0byBmYWxzZSB3aWxsIGRpc2FibGUgZmlsZSBzaXplIGJlaW5nIHNob3duLjxlbT4ob3B0aW9uYWwpPC9lbT48L2xpPgogICAgICAgICAgICAgICAgICA8bGk+IDxzdHJvbmc+ZGF0ZT0nZmFsc2UnPC9zdHJvbmc+IC0gRGVmYXVsdCBpcyB0cnVlLCBidXQgc2V0dGluZyB0aGlzIHRvIGZhbHNlIHdpbGwgZGlzYWJsZSBkYXRlIGJlaW5nIHNob3duLjxlbT4ob3B0aW9uYWwpPC9lbT48L2xpPgogICAgICAgIDxsaT4gPHN0cm9uZz5kYXRlZm9ybWF0PSdZLW0tZCc8L3N0cm9uZz4gLSA8YSBocmVmPSJodHRwOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZGF0ZS5waHAiIHRhcmdldD0iX2JsYW5rIj5EYXRlIGZvcm1hdDwvYT4uPGVtPihvcHRpb25hbCk8L2VtPjwvbGk+CiAgICAgICAgPGxpPiA8c3Ryb25nPmJyb3dzZV9zdWJkaXJzPScxJzwvc3Ryb25nPiAtIEFsbG93IGJyb3dzZSBzdWJkaXJlY3Rvcmllcy4gRGVmYXVsdCBpcyAwLjxlbT4ob3B0aW9uYWwpPC9lbT48L2xpPgogICAgICAgICAgICAgICAgICA8bGk+IDxzdHJvbmc+bGlzdHR5cGU9J29sJzwvc3Ryb25nPiAtIERlZmF1bHQgaXMgdWwuIFRoaXMgcGFyYW1ldGVyIGFsbG93cyB5b3UgdG8gc3BlY2lmeSB3aGV0aGVyIHlvdXIgbGlzdCBzaG91bGQgYmUgYW4gT3JkZXJlZCBvciBVbm9yZGVyZWQgbGlzdC4gT25seSBvcHRpb25zIGF2YWlsYWJsZSBhcmUgdWwgYW5kIG9sLjxlbT4ob3B0aW9uYWwpPC9lbT48L2xpPgogICAgICAgIDxsaT4gPHN0cm9uZz5tYXhlbnRyaWVzPScxMCc8L3N0cm9uZz4gLSBEZWZhdWx0IGlzIGFsbC4gVGhpcyBwYXJhbWV0ZXIgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHRoZSBtYXhpbXVtIG51bWJlciBvZiBmaWxlcy9mb2xkZXJzIHRvIGRpc3BsYXkuPGVtPihvcHRpb25hbCk8L2VtPjwvbGk+CiAgICAgICAgPGxpPiA8c3Ryb25nPnRhcmdldD0nX2JsYW5rJzwvc3Ryb25nPiAtIERlZmF1bHQgaXMgbm9uZS4gUG9zc2libGUgb3B0aW9ucyBhcmUgX2JsYW5rLCBfc2VsZiwgX3BhcmVudCwgX3RvcC48ZW0+KG9wdGlvbmFsKTwvZW0+PC9saT4KICAgICAgICA8bGk+IDxzdHJvbmc+dHJhY2tpbmc9J29yaWdpbmFsJzwvc3Ryb25nPiAtIERlZmF1bHQgaXMgdW5pdmVyc2FsLiBTcGVjaWZ5IHdoYXQgdmVyc2lvbiBvZiB0aGUgYW5hbHl0aWNzIGV2ZW50IHRyYWNraW5nIGNvZGUgYXBwZWFycy4gUG9zc2libGUgb3B0aW9ucyBhcmUgdW5pdmVyc2FsIG9yIG9yaWdpbmFsLjxlbT4ob3B0aW9uYWwpPC9lbT48L2xpPgogICAgICA8L3VsPgogICAgICAgIDxwPkV4YW1wbGU6PC9wPgogICAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjM7ZmlsZXNfbGlzdCBmb2xkZXI9J215ZmlsZXMnfTwvcHJlPgogICAgICA8cD5UaGlzIHBsdWdpbiBpcyBzdGlsbCBhIHdvcmsgaW4gcHJvZ3Jlc3MsIHNvIHRoZXJlIGFyZSBzb21lIGJ1Z3MgeWV0IHRvIGJlIGZpeGVkLiBEbyBzb21lIHRob3JvdWdoIHRlc3RzIHRvIHNlZSBpZiBpdCBmaXRzIHlvdXIgbmVlZHMuPC9wPgogICAgICA8cD5Zb3UgY2FuIHVzZSB0aGUgdGVtcGxhdGUgYmVsb3cgYXMgYSBzdGFydGluZyBwb2ludCB0byBidWlsZCB5b3VyIG93biB0ZW1wbGF0ZTo8L3A+CgogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPgogICZsdDt1bCZndDsKICAgICYjMTIzO2ZvcmVhY2ggJGZpbGVzX2xpc3QtJmd0O2ZpbGVzIGFzICRvbmV9CiAgICAgICZsdDtsaSZndDsKICAgICAgICAmIzEyMztpZiAkb25lLnN1Yl90eXBlPT0naW1hZ2UnfQogICAgICAgICAgICAmIzEyMzsqCiAgICAgICAgICAgICAgaWYgeW91IHdpc2ggdG8gdXNlIHRodW1icyBieSBkZWZhdWx0IHRoZSBmb2xkZXIgbmFtZSBpcyB0aHVtYnMKICAgICAgICAgICAgICAmbHQ7YSBocmVmPSImIzEyMzskb25lLnVybH0iJmd0OyZsdDtpbWcgc3JjPSImIzEyMzskb25lLnRodW1ic191cmx9IiBhbHQ9IiYjMTIzOyRvbmUubmFtZX0iJmd0OyZsdDsvYSZndDsKICAgICAgICAgICAgICBidXQgdGhhdCBjYW4gYmUgb3ZlcnJpZGVuIGJ5IHVzaW5nIHRoZSB0aHVtYnNfZm9sZGVyPSdmb2xkZXJuYW1lJyBwYXJhbWV0ZXIgb24gdGhlIHRhZy4KICAgICAgICAgICAgKn0KICAgICAgICAgICZsdDthIGhyZWY9IiYjMTIzOyRvbmUudXJsfSImZ3Q7Jmx0O2ltZyBzcmM9IiYjMTIzOyRvbmUudXJsfSIgYWx0PSImIzEyMzskb25lLm5hbWV9IiZndDsmbHQ7L2EmZ3Q7CiAgICAgICAgJiMxMjM7ZWxzZX0KICAgICAgICAgJmx0O2EgaHJlZj0iJiMxMjM7JG9uZS51cmx9IiZndDsmIzEyMzskb25lLm5hbWV9Jmx0Oy9hJmd0OwogICAgICAgICYjMTIzOy9pZn0KICAgICAgICAmbHQ7dWwmZ3Q7CiAgICAgICAgICAmbHQ7bGkmZ3Q7bmFtZTogJiMxMjM7JG9uZS5uYW1lfSZsdDsvbGkmZ3Q7CiAgICAgICAgICAmbHQ7bGkmZ3Q7dHlwZTogJiMxMjM7JG9uZS50eXBlfSZsdDsvbGkmZ3Q7CiAgICAgICAgICAmbHQ7bGkmZ3Q7dXJsOiAmIzEyMzskb25lLnVybH0mbHQ7L2xpJmd0OwogICAgICAgICYjMTIzO2lmICRvbmUudHlwZSA9PSAnZmlsZSd9CiAgICAgICAgICAmbHQ7bGkmZ3Q7ZmlsZV9leHQ6ICYjMTIzOyRvbmUuZmlsZV9leHR9Jmx0Oy9saSZndDsKICAgICAgICAgICZsdDtsaSZndDtzdWJfdHlwZTogJiMxMjM7JG9uZS5zdWJfdHlwZX0mbHQ7L2xpJmd0OwogICAgICAgICAgJmx0O2xpJmd0O3RpdGxlOiAmIzEyMzskb25lLnRpdGxlfSZsdDsvbGkmZ3Q7CiAgICAgICAgICAmbHQ7bGkmZ3Q7c2l6ZTogJiMxMjM7JG9uZS5zaXplfSZsdDsvbGkmZ3Q7CiAgICAgICAgICAmbHQ7bGkmZ3Q7ZGF0ZTogJiMxMjM7JG9uZS5kYXRlfSZsdDsvbGkmZ3Q7CiAgICAgICAgICAmIzEyMztpZiBpc3NldCgkb25lLmRvd25sb2FkX2NvdW50KX0mbHQ7bGkmZ3Q7ZG93bmxvYWRzOiAmIzEyMzskb25lLmRvd25sb2FkX2NvdW50fSZsdDsvbGkmZ3Q7JiMxMjM7L2lmfQogICAgICAgICYjMTIzO2Vsc2VpZiAkb25lLnR5cGUgPT0gJ2Rpcid9CiAgICAgICAgICAmbHQ7bGkmZ3Q7ZmlsZV9leHQ6ICYjMTIzOyRvbmUuZmlsZV9leHR9Jmx0Oy9saSZndDsKICAgICAgICAgICZsdDtsaSZndDt0aXRsZTogJiMxMjM7JG9uZS50aXRsZX0mbHQ7L2xpJmd0OwogICAgICAgICAgJmx0O2xpJmd0O2RhdGU6ICYjMTIzOyRvbmUuZGF0ZX0mbHQ7L2xpJmd0OwogICAgICAgICYjMTIzOy9pZn0KICAgICAgICAmbHQ7L3VsJmd0OwogICAgICAmbHQ7L2xpJmd0OwogICAgJiMxMjM7L2ZvcmVhY2h9CiAgJmx0Oy91bCZndDsKICAmbHQ7aHImZ3Q7CiAgVG90YWwgU2l6ZSBUZXh0OiAmIzEyMzskZmlsZXNfbGlzdC0mZ3Q7dG90YWxfc2l6ZV90ZXh0fQogIFRvdGFsIFNpemU6ICYjMTIzOyRmaWxlc19saXN0LSZndDt0b3RhbF9zaXplfTwvcHJlPgogICAgPC9kaXY+CiAgPC9saT4KICAgICAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4KICAgIDxoMyBjbGFzcz0iYWwiPiYjMTIzO2NvbnRlbnRfcHJvdGVjdH0gPHNwYW4gY2xhc3M9InNtYWxsIj5Qcm90ZWN0IGNvbnRlbnQgd2l0aCBhIHBhc3N3b3JkIDxzcGFuIHN0eWxlPSJjb2xvcjpncmVlbiI+PHN0cm9uZz4obmV3KTwvc3Ryb25nPjwvc3Bhbj48L3NwYW4+PC9oMz4KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+CiAgICAgIDxwPlRoaXMgaXMgYSBmb3JrIG9mIDxzdHJvbmc+cGFnZV9wcm90ZWN0PC9zdHJvbmc+IGJ5IEpvIE1vcmcuIFNhbWUgY29kZSBiYXNlLCBhIGZldyBkaWZmZXJlbmNlcyBlbWVyZ2VkICBmcm9tIGJlaW5nIGludGVncmF0ZWQgaW4gYSBtb2R1bGUsIGluIHBhcnRpY3VsYXIgdGhlIGxhY2sgb2YgbmVlZCB0byBpbml0aWFsaXplIHRoZSBwbHVnaW4gYXMgaW4gdGhlIG9yaWdpbmFsIHBsdWdpbi48YnI+CiAgICAgICAgVGhpcyBwbHVnaW4gYWxsb3dzIHlvdSB0byBwcm90ZWN0IGEgbnVtYmVyIG9mIHBhZ2VzIHdpdGggb25lIG9yIG1vcmUgcGFzc3dvcmRzIGVpdGhlciBieSBiZWluZyBzZXQgb25jZSBwZXIgZWFjaCBwYWdlIHlvdSB3YW50IHRvIHByb3RlY3QsIG9yIGJ5IGJlaW5nIHNldCBvbiBhIHBhZ2UgdGVtcGxhdGUsIGFsbG93aW5nIHlvdSB0byBwcm90ZWN0IGFsbCBwYWdlcyBjb25uZWN0ZWQgdG8gdGhhdCB0ZW1wbGF0ZS4gSXQgaXMgY29tcGxlbWVudGVkIGJ5IGEgYmxvY2sgcGx1Z2luIDxjb2RlPjxzdHJvbmc+JiMxMjM7cHJvdGVjdH0gPGVtPi4uLmNvbnRlbnQgeW91IHdhbnQgdG8gcHJvdGVjdC4uLjwvZW0+ICYjMTIzOy9wcm90ZWN0fTwvc3Ryb25nPjwvY29kZT4gIGFuZCBhIG1vZGlmaWVyIDxjb2RlPjxzdHJvbmc+JiMxMjM7J3Byb3RlY3QgdGhpcyd8cHJvdGVjdH08L3N0cm9uZz48L2NvZGU+PC9wPgoKICAgICAgICA8ZGl2IGNsYXNzPSJ3YXJuaW5nIiBzdHlsZT0iZGlzcGxheTpibG9jazsiPgogICAgICAgICAgPHA+CiAgICAgICAgICAgIDxzdHJvbmc+Tm90ZTogPC9zdHJvbmc+IHRoZXJlIGlzIGEgcGFydGljdWxhcml0eSBpbiB0aGUgd2F5IENNU01TIHJlbmRlcnMgY29udGVudCB3aGljaCBtYXkgZXhwb3NlIHByb3RlY3RlZCBjb250ZW50IGluIGNlcnRhaW4gc2l0dWF0aW9ucy4gVG8gcHJldmVudCB0aGF0IHRoZXJlIGFyZSBhIGZldyBydWxlcyB5b3UgbmVlZCB0byBmb2xsb3c6CiAgICAgICAgICA8L3A+CiAgICAgICAgICA8dWw+CiAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICBXaGVuIHRoZSBkZWZhdWx0IGNvbnRlbnQgYmxvY2sgaXMgdGhlIG9ubHkgb25lIHdpdGggdGhlIGNvbnRlbnQgdG8gcHJvdGVjdDoKICAgICAgICAgICAgICA8b2wgdHlwZT0iMSI+CiAgICAgICAgICAgICAgICA8bGk+dXNlIGFsbCB0aGUgbG9naWMgaW5zaWRlIHRoZSBibG9jayBpdHNlbGYgZXZlbiBpZiB0aGUgcGFzc3dvcmRzIGFyZSBzZXQgb24gdGhlIHRlbXBsYXRlOzwvbGk+CiAgICAgICAgICAgICAgICA8bGk+c2V0IHRoZSBsb2dpbiBmb3JtIGFuZCBwYXNzd29yZHMgYXMgY2xvc2UgdG8gdGhlIHRvcCBvZiB0aGUgY29udGVudCBhcyBwb3NzaWJsZSB3aGVuIHNldCBpbnNpZGUgdGhlIGNvbnRlbnQgYmxvY2s7PC9saT4KICAgICAgICAgICAgICAgIDxsaT51c2luZyBhbnkgb3RoZXIgY29udGVudCBwcm9wZXJ0eSB0byBzZXQgdGhlIGxvZ2ljIChhcyB0aGUgPHN0cm9uZz5TbWFydHkgZGF0YSBvciBsb2dpYyB0aGF0IGlzIHNwZWNpZmljIHRvIHRoaXMgcGFnZTwvc3Ryb25nPikgbWF5IHdvcmsgb24gYSB0eXBpY2FsIHNldHRpbmcgYnV0IHdpbGwgbGVhdmUgdGhlIHByb3RlY3RlZCBjb250ZW50IHZ1bG5lcmFibGUgaW4gY2VydGFpbiBjaXJjdW1zdGFuY2VzOzwvbGk+CiAgICAgICAgICAgICAgICA8bGk+a2VlcCBpbiBtaW5kIHRoYXQgdGhlcmUgaXMgYSBmZWF0dXJlIGluIENNU01TIHRoYXQgd2lsbCBzdHJpcCBkb3duIHRoZSB3aG9sZSB0ZW1wbGF0ZSBhbmQgcmVuZGVyIG9ubHkgdGhlIGRlZmF1bHQgY29udGVudCwgc28gZm9sbG93aW5nIHRoZSBhYm92ZSBydWxlcyB3aWxsIHByZXZlbnQgZXhwb3N1cmUgb2YgdGhlIHByb3RlY3RlZCBjb250ZW50OzwvbGk+CiAgICAgICAgICAgICAgPC9vbD4KICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgPGxpPmlmIHlvdSBoYXZlIG1vcmUgdGhhbiB0aGUgZGVmYXVsdCBjb250ZW50IGJsb2NrOgogICAgICAgICAgICAgICA8b2wgdHlwZT0iMSI+CiAgICAgICAgICAgICAgICA8bGk+cHJlZmVyYWJseSBkb24ndCB1c2UgdGhlIG1haW4gYmxvY2sgdG8ga2VlcCB0aGUgcHJvdGVjdGVkIGNvbnRlbnQsIHVzZSBhIGRpZmZlcmVudCBibG9jayBmb3IgaXQ7PC9saT4KICAgICAgICAgICAgICAgIDxsaT5jb250ZW50IGJsb2NrcyBvdGhlciB0aGFuIHRoZSBtYWluIGFyZSBub3QgdnVsbmVyYWJsZSB0byBiZWluZyBleHBvc2VkIGJ5IHRoZSBhYm92ZSBkZXNjcmliZWQgQ01TTVMgZmVhdHVyZTs8L2xpPgogICAgICAgICAgICAgICAgPGxpPmlmIHlvdSBtdXN0IHVzZSBpdCB0aGVuIGZvbGxvdyB0aGUgcnVsZXMgZm9yIHRoZSBkZWZhdWx0IGNvbnRlbnQgYXMgaW4gdGhlIHByZXZpb3VzIHN1Z2dlc3Rpb247PC9saT4KICAgICAgICAgICAgICA8L29sPgogICAgICAgICAgICA8L2xpPgogICAgICAgICAgPC91bD4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0id2FybmluZyIgc3R5bGU9ImRpc3BsYXk6YmxvY2s7Ij4KICAgICAgICAgIDxwPgogICAgICAgICAgICA8c3Ryb25nPk5vdGU6IDwvc3Ryb25nPiBUaGlzIGlzIGEgc2ltcGxlLCByZWxhdGl2ZWx5IHNhZmUgd2F5IG9mIHByb3RlY3RpbmcgY29udGVudCB3aXRob3V0IGhhdmluZyB0byBpbnN0YWxsIGEgZnVsbC1mbGVkZ2VkIHVzZXJzIG1hbmFnZW1lbnQgbW9kdWxlLiBJZiB5b3UgbmVlZCBhIG1vcmUgY29tcGxleCBhbmQgY29tcGxldGUgdXNlcnMnIGFjY2VzcyBtYW5hZ2VtZW50IG1vZHVsZSBwbGVhc2UgY29uc2lkZXIgdXNpbmcgPHN0cm9uZz5NQU1TPC9zdHJvbmc+LgogICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJpbmZvcm1hdGlvbiIgc3R5bGU9ImRpc3BsYXk6YmxvY2s7Ij4KICAgICAgICAgIDxwPgogICAgICAgICAgICBCZWNhdXNlIG9mIHRoaXMgcGx1Z2luIGlzIGEgZm9yayBvZiB0aGUgZGlzY29udGludWVkIFBhZ2UgUHJvdGVjdCAocGFnZV9wcm90ZWN0KSB0aGVyZSBhcmUgYSBmZXcgcGFyYW1ldGVycyB0aGF0IHdlcmUgbGVmdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gQXMgdGhpcyBwbHVnaW4gZG9lc24ndCByZXF1aXJlIGluaXRpYWxpemF0aW9uLCB3aGljaCBpcyBkb25lIGF0IHRoZSBtb2R1bGUgbGV2ZWwgd2hlbiBpdCBpcyBsb2FkZWQsIHRoZSBkZWZhdWx0IGFuZCB0aGUgc2V0IGFjdGlvbnMgYXJlIG5vdyB0aGUgc2FtZSB0aGluZy4gVGhhdCBtZWFucyB0aGF0IGEgdHlwaWNhbCBpbml0aWFsaXphdGlvbiB0YWcgZG9lcyBub3RoaW5nIG9uIGl0cyBvd24gYW5kIGNhbiBiZSBzYWZlbHkgcmVtb3ZlZCAoaWYgcmVwbGFjZWQgZnJvbSBhIHBhZ2VfcHJvdGVjdCBvcmlnaW5hbCB0YWcpLCBidXQgbGVhdmluZyBpdCBpbiBwbGFjZSBkb2Vzbid0IGFmZmVjdCBpbiBhbnkgd2F5IHRoZSBzaXRlJ3MgcGVyZm9ybWFuY2UuCiAgICAgICAgICA8L3A+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iaW5mb3JtYXRpb24iIHN0eWxlPSJkaXNwbGF5OmJsb2NrOyI+CiAgICAgICAgICA8cD4KICAgICAgICAgICAgUGFyYW1ldGVycyBtYXJrZWQgYXMgPHN0cm9uZz48ZW0+KHBlcnNpc3RlbnQpIDwvZW0+PC9zdHJvbmc+IGFyZSBzZXQgb25jZSBmb3IgdGhlIHdob2xlIHBhZ2UgcmVxdWVzdC4gVGhlIGRlZmF1bHQgYWN0aW9uIGNhbiBzZXQgYW55IGFuZCBhbGwgb2YgdGhlbSB3aXRob3V0IHRoZSBuZWVkIHRvIHJlcGVhdCB0aGVtIG9uIGV2ZXJ5IHRhZyBjYWxsLiBIb3dldmVyLCBhIGxhdGVyIGNhbGwgY2FuIG92ZXJyaWRlIGEgcHJldmlvdXNseSBzZXQgcGFyYW1ldGVyLgogICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8cD5QYXJhbWV0ZXJzOjwvcD4KCiAgICAgICAgPHVsPgogICAgICAgICAgPGxpPjxzdHJvbmc+YWN0aW9uPC9zdHJvbmc+IDxlbT4ob3B0aW9uYWwpPC9lbT4gLSBwb3NzaWJsZSB2YWx1ZXM6CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+PGVtPjxzdHJvbmc+ZGVmYXVsdDwvc3Ryb25nPjwvZW0+IDxzdHJvbmc+IDxlbT4oZGVmYXVsdCk8L2VtPjwvc3Ryb25nPjogdGhlIGRlZmF1bHQgYWN0aW9uIGZvciB0aGUgbW9kdWxlIGFuZCBjYW4gYmUgb21pdHRlZC4gT24gaXRzIG93biBpdCBkb2VzIG5vdGhpbmcsIGJ1dCBjYW4gYmUgdXNlZCBhcyBhIHNldCBhY3Rpb24gaW4gY29uanVuY3Rpb24gd2l0aCBvdGhlciBwYXJhbWV0ZXJzOzwvbGk+CiAgICAgICAgICAgICAgPGxpPjxlbT48c3Ryb25nPnNldDwvc3Ryb25nPiAobGVnYWN5KSAoZGVwcmVjYXRlZCk8L2VtPjogdXNlIHRoaXMgYWN0aW9uIHRvIGRpc3RyaWJ1dGUgcGVyc2lzdGVudCBwYXJhbWV0ZXJzIHRob3VnaCBkaWZmZXJlbnQgdGFncyBvbiB0aGUgc2FtZSBwYWdlIChoZWxwcyB3aXRoIHRlbXBsYXRlIHJlYWRhYmlsaXR5KSwgdGhpcyBhY3Rpb24gbm93IGJlaW5nIHBhcnQgb2YgdGhlIGRlZmF1bHQgYWN0aW9uIGNhbiBhbHNvIGJlIG9taXR0ZWQ7PC9saT4KICAgICAgICAgICAgICA8bGk+PGVtPjxzdHJvbmc+Zm9ybTwvc3Ryb25nPjwvZW0+OiBzaG93IGVpdGhlciB0aGUgPHN0cm9uZz5sb2dpbjwvc3Ryb25nPiBmb3JtIG9yIHRoZSA8c3Ryb25nPmxvZ291dDwvc3Ryb25nPiBmb3JtLCBkZXBlbmRpbmcgb24gY3VycmVudCB1c2VyIHN0YXRlOzwvbGk+CiAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICA8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+bG9naW5fYWxpYXM8L3N0cm9uZz4gPGVtPihvcHRpb25hbCkgKHBlcnNpc3RlbnQpIDwvZW0+IC0gYW4gZXhpc3RpbmcgcGFnZSBhbGlhcyAoZGVmYXVsdHMgdG8gbm8gcmVkaXJlY3Rpb24pOiB0aGlzIHdpbGwgYmUgdXNlZCB0byByZWRpcmVjdCBhZnRlciBsb2dpbiBpZiBuZWVkZWQ7PC9saT4KICAgICAgICAgIDxsaT48c3Ryb25nPmxvZ291dF9hbGlhczwvc3Ryb25nPiA8ZW0+KG9wdGlvbmFsKSAocGVyc2lzdGVudCk8L2VtPiAtIGFuIGV4aXN0aW5nIHBhZ2UgYWxpYXMgKGRlZmF1bHRzIHRvIGN1cnJlbnQgcGFnZSBpLmUuIHRoZSBwYWdlIHdoZXJlIHRoZSBwbHVnaW4gaXMgYmVpbmcgdXNlZCk6IHRoaXMgd2lsbCBiZSB1c2VkIHRvIHJlZGlyZWN0IGFmdGVyIGxvZ291dDs8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+dGltZW91dDwvc3Ryb25nPiA8ZW0+KG9wdGlvbmFsKSAocGVyc2lzdGVudCk8L2VtPiAtIGlmIHNldCB0byBhIHZhbHVlIGhpZ2hlciB0aGFuIDAgaXQgd2lsbCBzZXQgYSBjb29raWUgYW5kIHVzZSB0aGlzIHZhbHVlIGFzIG1pbnV0ZXMgYmVmb3JlIGxvZ2luIHRpbWVzIG91dDs8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+Y29va2llX25hbWU8L3N0cm9uZz4gPGVtPihvcHRpb25hbCkgKHBlcnNpc3RlbnQpPC9lbT4gLSB0aGUgbmFtZSBvZiB0aGUgY29va2llIChkZWZhdWx0cyB0byA8c3Ryb25nPmNwX2F1dGg8L3N0cm9uZz4pOzwvbGk+CiAgICAgICAgICA8bGk+PHN0cm9uZz53ZWxjb21lX21zZzwvc3Ryb25nPiA8ZW0+KG9wdGlvbmFsKSAocGVyc2lzdGVudCk8L2VtPiAtIGEgbWVzc2FnZSB0byBiZSBzaG93biBhcyBhIHdlbGNvbWUgdGV4dCBvbiB0aGUgbG9naW4gZm9ybTs8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+cHJvdGVjdGVkX21zZzwvc3Ryb25nPiA8ZW0+KG9wdGlvbmFsKSAocGVyc2lzdGVudCk8L2VtPiAtIGEgbWVzc2FnZSB0byByZXBsYWNlIHRoZSBwcm90ZWN0ZWQgY29udGVudCAoZGVmYXVsdHMgdG8gbm8gbWVzc2FnZSBhdCBhbGwpOzwvbGk+CiAgICAgICAgICA8bGk+PHN0cm9uZz5lcnJvcl9tc2c8L3N0cm9uZz4gPGVtPihvcHRpb25hbCkgKHBlcnNpc3RlbnQpPC9lbT4gLSBhbiBlcnJvciBtZXNzYWdlIHRvIGJlIHNob3duIG9uIHBhc3N3b3JkIGVycm9yczs8L2xpPgogICAgICAgIDwvdWw+CiAgICAgICAgPHA+RXhjbHVzaXZlIHRvIGZvcm0gYWN0aW9uOjwvcD4KICAgICAgICA8dWw+CiAgICAgICAgICA8bGk+PHN0cm9uZz5sb2dpbl9idG48L3N0cm9uZz4gPGVtPihvcHRpb25hbCk8L2VtPiAtIHRleHQgb2YgdGhlIGxvZ2luIGJ1dHRvbiBjYXB0aW9uIChkZWZhdWx0cyB0byBMb2dpbik7PC9saT4KICAgICAgICAgIDxsaT48c3Ryb25nPmxvZ291dF9idG48L3N0cm9uZz4gPGVtPihvcHRpb25hbCk8L2VtPiAtIHRleHQgb2YgdGhlIGxvZ291dCBidXR0b24gY2FwdGlvbihkZWZhdWx0cyB0byBMb2dvdXQ7PC9saT4KICAgICAgICAgIDxsaT48c3Ryb25nPmZvcm1faWQ8L3N0cm9uZz4gPGVtPihvcHRpb25hbCk8L2VtPiAtIGxvZ2luIGZvcm0gaWQ7PC9saT4KICAgICAgICAgIDxsaT48c3Ryb25nPmZvcm1fY2xhc3M8L3N0cm9uZz4gPGVtPihvcHRpb25hbCk8L2VtPiAtIGxvZ2luIGZvcm0gY2xhc3M7PC9saT4KICAgICAgICAgIDxsaT48c3Ryb25nPmluX3Bhc3NfaWQ8L3N0cm9uZz4gPGVtPihvcHRpb25hbCk8L2VtPiAtIHBhc3N3b3JkIGlucHV0IGlkOzwvbGk+CiAgICAgICAgICA8bGk+PHN0cm9uZz5pbl9wYXNzX2NsYXNzPC9zdHJvbmc+IDxlbT4ob3B0aW9uYWwpPC9lbT4gLSBwYXNzd29yZCBpbnB1dCBjbGFzczs8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+YnV0dG9uX2lkPC9zdHJvbmc+IDxlbT4ob3B0aW9uYWwpPC9lbT4gLSBib3RoIGJ1dHRvbnMgaWQ7PC9saT4KICAgICAgICAgIDxsaT48c3Ryb25nPmJ1dHRvbl9jbGFzczwvc3Ryb25nPiA8ZW0+KG9wdGlvbmFsKTwvZW0+IC0gYm90aCBidXR0b25zIGNsYXNzOzwvbGk+CiAgICAgICAgPC91bD4KICAgICAgICA8cD5UaGUgcHJvdGVjdCBibG9jayB0YWcgYWNjZXB0cyBvbmx5IG9uZSBwYXJhbWV0ZXI6PC9wPgogICAgICAgIDx1bD4KICAgICAgICAgIDxsaT48c3Ryb25nPnByb3RlY3RlZF9tc2c8L3N0cm9uZz4gPGVtPihvcHRpb25hbCk8L2VtPiAtIGEgbWVzc2FnZSB0byByZXBsYWNlIHRoZSBwcm90ZWN0ZWQgY29udGVudCAoZGVmYXVsdHMgdG8gd2hhdGV2ZXIgd2FzIHNldCBvbiBhIHByZXZpb3VzIHBlcnNpc3RlbnQgdGFnIGNhbGwpOzwvbGk+CiAgICAgICAgPC91bD4KICAgICAgICA8cD5UaGUgcHJvdGVjdCBtb2RpZmllciBkb2Vzbid0IHRha2UgYW55IHBhcmFtZXRlcnMuPC9wPgogICAgICAgIDxocj4KICAgICAgICA8cD5FeGFtcGxlIGFzIGEgY29udGVudCBibG9jazo8L3A+CiAgICAgICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiAgJiMxMjM7cHJvdGVjdH0gLi4uY29udGVudCB5b3Ugd2FudCB0byBwcm90ZWN0Li4uICYjMTIzOy9wcm90ZWN0fSBhbmQgYSBtb2RpZmllciA8L3ByZT4KICAgICAgICA8cD5FeGFtcGxlIGFzIGEgY29udGVudCBtb2RpZmllcjo8L3A+CiAgICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4gICYjMTIzOydwcm90ZWN0IHRoaXMnfHByb3RlY3R9PC9wcmU+CgogICAgICAgIDxoMz5RdWljayBVc2U8L2gzPgogICAgICAgIDxwPlRoZSBwbHVnaW4gYWxsb3dzIGZvciBmYXN0IGRlcGxveW1lbnQgb2YgYSBzZWN1cmUgcGFnZS4gQ29udGVudCBQcm90ZWN0IHdpbGwgYXNzaWduIGEgPHN0cm9uZz5TbWFydHk8L3N0cm9uZz4gdmFyaWFibGUsIDxzdHJvbmc+JGNwX2xvZ2dlZF9pbjwvc3Ryb25nPiBieSBkZWZhdWx0LCB3aXRoIGEgYm9vbGVhbiB2YWx1ZSBmbGFnZ2luZyB3aGV0aGVyIHRoZSBjdXJyZW50IHVzZXIgaXMgbG9nZ2VkIGluIG9yIG5vdC48L3A+CiAgICAgICAgPHA+RXhhbXBsZTo8L3A+CiAgICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4gICYjMTIzO2NvbnRlbnRfcHJvdGVjdCBhY3Rpb249J2Zvcm0nIHBhc3N3b3Jkcz0ncGFzczEnfTwvcHJlPgoKICAgICAgICA8cD5UaGlzIGlzIGEgc2ltcGxlIHdheSB0byBoaWRlIHRoZSBjb250ZW50IG9mIGEgcGFnZSBmcm9tIG5vbi1hdXRob3JpemVkIHVzZXJzOjwvcD4KICAgICAgICA8ZGl2IGNsYXNzPSJpbmZvcm1hdGlvbiIgc3R5bGU9ImRpc3BsYXk6YmxvY2s7Ij4KICAgICAgICAgIDxwPlVzZSB0aGlzIG9uIHRoZSBwYWdlIGNvbnRlbnQhPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+ICAmIzEyMztjb250ZW50X3Byb3RlY3QgYWN0aW9uPSdmb3JtJyBwYXNzd29yZHM9J3Bhc3MxJ30KICAmIzEyMztpZiAkY3BfbG9nZ2VkX2lufQogICAgVGhlIGFsbG93ZWQgY29udGVudC4uLi4KICAmIzEyMztlbHNlfQogICAgTm90IExvZ2dlZCBpbiEKICAmIzEyMzsvaWZ9PC9wcmU+CiAgICAgICAgPHA+VGhlIHByZXZpb3VzIHNuaXBwZXQgd2lsbCBzaG93IGEgZm9ybSBmb3Igbm9uLWxvZ2dlZC1pbiB1c2VycywgYWxvbmcgd2l0aCB0aGUgdGV4dCAiTm90IExvZ2dlZCBpbiEiPC9wPgogICAgICAgIDxwPkZvciB0aGUgbG9nZ2VkLWluIHVzZXIgd2lsbCBwcmVzZW50IGEgbG9nb3V0IGJ1dHRvbiwgYW5kICJUaGUgYWxsb3dlZCBjb250ZW50Li4uLiIuPC9wPgogICAgICAgIDxocj4KICAgICAgICA8cD5UaGlzIGlzIGEgc2ltcGxlIHdheSB0byBoaWRlIHRoZSBjb250ZW50IG9mIGFsbCBwYWdlcyB3aXRoIHRoaXMgdGVtcGxhdGUgZnJvbSBub24tYXV0aG9yaXplZCB1c2Vyczo8L3A+CiAgICAgICAgPGRpdiBjbGFzcz0iaW5mb3JtYXRpb24iIHN0eWxlPSJkaXNwbGF5OmJsb2NrOyI+CiAgICAgICAgICA8cD5Vc2UgdGhpcyBvbiB0aGUgbWFpbiB0ZW1wbGF0ZSE8L3A+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+ICAmIzEyMztjb250ZW50IG5hbWU9cHJvdGVjdGVkIGFzc2lnbj0ncHJvdGVjdGVkJ30KICAmIzEyMztjb250ZW50X3Byb3RlY3QgYWN0aW9uPSdmb3JtJyBwYXNzd29yZHM9J3Bhc3MxJ30KICAmIzEyMztpZiAkY3BfbG9nZ2VkX2lufQogICAgICAmIzEyMzskcHJvdGVjdGVkfQogICYjMTIzO2Vsc2V9CiAgICBOb3QgTG9nZ2VkIGluIQogICYjMTIzOy9pZn0KICAmIzEyMzsqIG9yICp9CiAgJiMxMjM7JHByb3RlY3RlZHxwcm90ZWN0fQogICYjMTIzOyogb3IgKn0KICAmIzEyMztwcm90ZWN0fSYjMTIzOyRwcm90ZWN0ZWR9JiMxMjM7L3Byb3RlY3R9PC9wcmU+CgogICAgICA8cD5UaGUgcHJldmlvdXMgc25pcHBldCB3aWxsIHNob3cgYSBmb3JtIGZvciBub24tbG9nZ2VkLWluIHVzZXJzLCBhbG9uZyB3aXRoIHRoZSB0ZXh0ICJOb3QgTG9nZ2VkIGluISI8L3A+CiAgICAgIDxwPkZvciB0aGUgbG9nZ2VkLWluIHVzZXIgd2lsbCBwcmVzZW50IGEgbG9nb3V0IGJ1dHRvbiwgYW5kIHRoZSBjb250ZW50IG9mIHRoZSBwYWdlLjwvcD4KICAgICAgPGhyPgogICAgICA8cD5Zb3UgY2FuIGFsc28gdXNlIHRoaXMgdGFnIHRvIGFkZCBhIGZldyBwYXJhbWV0ZXJzIGV4Y2VwdCBmb3IgYWN0aW9uPSdzZXQnIGFuZCBhY3Rpb249J2Zvcm0nICg8ZW0+YW5kIGFsbCBmb3JtIGV4Y2x1c2l2ZSBwYXJhbWV0ZXJzIGFzIHRoZXkgYXJlIG9ubHkgcGVydGluZW50IHRvIHRoZSBmb3JtIGFjdGlvbiBhbmQgbm90IHBlcnNpc3RlbnQ8L2VtPikuIFVzZTo8L3A+CiAgICAgIDx1bD4KICAgICAgICA8bGk+PHN0cm9uZz4mIzEyMztjb250ZW50X3Byb3RlY3QgcGFzc3dvcmRzPSc8L3N0cm9uZz5wYXNzMVsscGFzczxlbT48c3Ryb25nPjI8L3N0cm9uZz48L2VtPl0uLi5bLHBhc3M8ZW0+PHN0cm9uZz5uPC9zdHJvbmc+PC9lbT5dPHN0cm9uZz4nfTwvc3Ryb25nPjwvbGk+CiAgICAgICAgPGxpPjxzdHJvbmc+JiMxMjM7Y29udGVudF9wcm90ZWN0IGFjdGlvbj0nPC9zdHJvbmc+ZGVmYXVsdDxzdHJvbmc+JyBwYXNzd29yZHM9Jzwvc3Ryb25nPnBhc3MxWyxwYXNzPGVtPjxzdHJvbmc+Mjwvc3Ryb25nPjwvZW0+XS4uLlsscGFzczxlbT48c3Ryb25nPm48L3N0cm9uZz48L2VtPl08c3Ryb25nPid9PC9zdHJvbmc+PC9saT4KICAgICAgPC91bD4KCiAgICAgIDxwPlB1dCB0aGlzIG9uIHRoZSBmaWVsZCA8c3Ryb25nPlNtYXJ0eSBkYXRhIG9yIGxvZ2ljIHRoYXQgaXMgc3BlY2lmaWMgdG8gdGhpcyBwYWdlPC9zdHJvbmc+IGZvdW5kIG9uIHRoZSBwYWdlIDxlbT48c3Ryb25nPm9wdGlvbnMgdGFiPC9zdHJvbmc+PC9lbT46PC9wPgogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiAgJiMxMjM7Y29udGVudF9wcm90ZWN0IHBhc3N3b3Jkcz0ncGFzc3dvcmQxLHBhc3N3b3IyLHBhc3N3b3JkMyxwYXNzd29yZG4nfTwvcHJlPgogICAgICA8cD5Zb3UgY2FuIHNldCB0aGUgcGFzc3dvcmRzLCBhbmQgYW55IG90aGVyIHBhcmFtZXRlcnMgb24gdGhlIGluaXRpYWxpemF0aW9uIHRhZyBhcyBtb3N0IG9mIHRoZSBwYXJhbWV0ZXJzIGFyZSBwZXJzaXN0ZW50IHRocm91Z2ggdGhlIHNhbWUgcmVxdWVzdC48L3A+CiAgICAgIDxwPlB1dCB0aGlzIG9uIHRoZSB0b3Agb2YgeW91ciB0ZW1wbGF0ZXM6PC9wPgogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiAgJiMxMjM7Y29udGVudF9wcm90ZWN0IHBhc3N3b3Jkcz0ncGFzc3dvcmQxLHBhc3N3b3IyLHBhc3N3b3JkMyxwYXNzd29yZG4nfTwvcHJlPgoKICAgICAgPGgzPlRoZSBGb3JtIEFjdGlvbjwvaDM+CgogICAgICA8cD5Zb3UgY2FuIHNldCBhbGwgb3B0aW9ucyBvbiB0aGUgdGFnIGNhbGwgd2l0aCB0aGlzIGFjdGlvbi4gSWYgeW91IGFyZSB1c2luZyB0aGUgcXVpY2sgd2F5LCB0aGlzIGlzIGFsbCB5b3UgbmVlZCB0byBzZXQgYSBTbWFydHkgdmFyaWFibGUgd2hpY2ggeW91IGNhbiBjaGVjayBhbnl3aGVyZSBvbiB0aGUgdGVtcGxhdGUgYWZ0ZXIgdGhpcyBjYWxsLjwvcD4KICAgICAgPHA+T3RoZXIgdGhhbiB0aGF0IGp1c3QgcGxhY2UgdGhlIHRhZyB3aGVyZSB5b3Ugd2FudCBhIGxvZ2luL2xvZ291dCBmb3JtLiBUaGUgZGVmYXVsdCA8c3Ryb25nPjxlbT5mb3JtPC9lbT4gYWN0aW9uPC9zdHJvbmc+IGhhcyBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsIGZvcm0gcGFyYW1ldGVycywgc28gdGhlIG1pbmltYWwgdGFnIGlzIDxzdHJvbmc+JiMxMjM7Y29udGVudF9wcm90ZWN0IGFjdGlvbj0nPC9zdHJvbmc+PGVtPmZvcm08L2VtPjxzdHJvbmc+J308L3N0cm9uZz4uPC9wPgogICAgICA8cD5FeGFtcGxlOjwvcD4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4gICYjMTIzO2NvbnRlbnRfcHJvdGVjdCBhY3Rpb249Zm9ybX08L3ByZT4KICAgICAgPHA+QW4gZXhhbXBsZSB3aXRoIGFsbCB0aGUgcGFyYW1ldGVycyB5b3UgY2FuIHVzZSB0byBjdXN0b21pemUgdGhlIGZvcm06PC9wPgogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiAgJiMxMjM7KiBEbyB3ZSByZWFsbHkgbmVlZCBhbGwgdGhpcz8hISEgQSBjb21wbGV0ZSBmb3JtIGNhbGwgKn0KICA8JiMxMjM7Y29udGVudF9wcm90ZWN0IGFjdGlvbj0nZm9ybScgbG9naW5fYnRuPSdMZXQgTWUgSW4hJyBsb2dvdXRfYnRuPSdCeWUgQnllIScgZm9ybV9jbGFzcz0nY3NzX2Zvcm0nIGZvcm1faWQ9J2Nzc19teV9mb3JtJyBpbl9wYXNzX2lkPSdjc3NfcGFzc3dyZGlkJyBpbl9wYXNzX2NsYXNzPSdjc3NfcGFzc3dyZF9jbGFzcycgYnV0dG9uX2lkPSdjc3NfYnRuX2lkJyBidXR0b25fY2xhc3M9J2Nzc19idG5fY2xhc3MnfTwvcHJlPgogICAgICA8cD5Zb3UgY2FuIHVzZSBhbnkgb2YgdGhlIHBlcnNpc3RlbnQgcGFyYW1ldGVycyB3aXRoIHRoZSBmb3JtIGFjdGlvbiBpZiBuZWVkZWQuIEhvd2V2ZXIsIHRoZSBmb3JtIHNwZWNpZmljIHBhcmFtZXRlcnMgPHN0cm9uZz5hcmUgbm90IHBlcnNpc3RlbnQ8L3N0cm9uZz4uPC9wPgoKICAgICAgPGgzPlRoZSBEZWZhdWx0IGFuZCBTZXQgQWN0aW9uczwvaDM+CiAgICAgIDxkaXYgY2xhc3M9ImluZm9ybWF0aW9uIiBzdHlsZT0iZGlzcGxheTpibG9jazsiPgogICAgICAgIDxwPgogICAgICAgICAgVGhlIDxzdHJvbmc+c2V0PC9zdHJvbmc+IGFjdGlvbiBpcyBhIGxlZ2FjeSBhY3Rpb24sIGRlcHJlY2F0ZWQgYnV0IHN0aWxsIGZ1bmN0aW9uYWwuIEl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgPHN0cm9uZz5kZWZhdWx0PC9zdHJvbmc+IHdoaWNoIGNhbiBiZSBvbWl0dGVkLgogICAgICAgIDwvcD4KICAgICAgPC9kaXY+CiAgICAgIDxwPlRoZXNlIGFyZSBzcGVjaWFsIGFjdGlvbnMgd2l0aCB0aGUgc29sZSBwdXJwb3NlIG9mIGFsbG93aW5nIHlvdSB0byBzZXQgcGVyc2lzdGVudCBwYXJhbWV0ZXJzIG9uIGRpZmZlcmVudCB0YWcgY2FsbHMsIGhlbHBpbmcgYSBiaXQgd2l0aCB0aGUgcmVhZGFiaWxpdHkgb2YgdGhlIHRhZ3M6IGFsb25nIHRoZSB0ZW1wbGF0ZS4gSnVzdCBrZWVwIGluIG1pbmQgdGhhdCBpZiB5b3UgY2FsbCBpdCBhZ2FpbiwgdXNpbmcgdGhlIHNhbWUgcGFyYW1ldGVycyB3aXRoIGRpZmZlcmVudCB2YWx1ZXMsIHRoZSBsYXN0IHZhbHVlIHdpbGwgb3ZlcnJpZGUgYWxsIHByZXZpb3VzLjwvcD4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4gICYjMTIzOyogVXNpbmcgdGhlICdzZXQnIGFjdGlvbiB0byBzcHJlYWQgcGFyYW1ldGVycyB0aHJvdWdoIG11bHRpcGxlIGNhbGxzICp9CiAgJiMxMjM7KiByZWRpcmVjdCBIb21lICp9CiAgJiMxMjM7Y29udGVudF9wcm90ZWN0IGFjdGlvbj0nc2V0JyBsb2dvdXRfYWxpYXM9J2hvbWUnfQogICYjMTIzOyogc2V0IHRoZSB0aW1lIGJlZm9yZSBhIGxvZ2luIGV4cGlyZXMgKn0KICAmIzEyMztjb250ZW50X3Byb3RlY3QgYWN0aW9uPSdzZXQnIHRpbWVvdXQ9MTB9CiAgJiMxMjM7KiBzZXQgdGhlIG1lc3NhZ2UgdG8gc2hvdyBpbiBjYXNlIHRoZSBhdXRoZW50aWNhdGlvbiBmYWlscyAqfQogICYjMTIzO2NvbnRlbnRfcHJvdGVjdCBhY3Rpb249J3NldCcgZXJyb3JfbXNnPSdPb3BzISBXcm9uZyBwYXNzLCBtYXRlISBDaGVjayB5b3VyIG5vdGVzLi4uJ30KICAmIzEyMzsqIHNldHRpbmcgYWxsIHRoZSBhYm92ZSBpbiBhIHNpbmdsZSB0YWcgY2FsbCBjb3VsZCBsZWFkIHRvIGVycm9ycyAqfTwvcHJlPgoKCiAgICAgIDxoMz5UaGUgUHJvdGVjdCBUYWdzPC9oMz4KICAgICAgPHA+VGhlc2UgdGFncyBhcmUgYmxvY2sgc21hcnR5IHRhZ3MsIGFuZCBjYW4gYmUgdXNlZCBzZXZlcmFsIHRpbWVzIG9uIHRoZSBwYWdlIGluIHBhaXJzLCBpLmU6IGFuIG9wZW5pbmcgdGFnIGFuZCBhIGNsb3NpbmcgdGFnLiBUaGUgb3BlbmluZyB0YWcgYWNjZXB0cyBvbmx5IG9uZSBwYXJhbWV0ZXIsIHRoZSA8c3Ryb25nPnByb3RlY3RlZF9tc2c8L3N0cm9uZz4gd2hpY2ggb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IG9uZSBpZiBzZXQuIFRoaXMgaXMgYSBwZXIgb2NjdXJyZW5jZSB0YWcsIG1lYW5pbmcgdGhhdCBpZiBpdCBpcyBzZXQgb24gdGhlIDxlbT48c3Ryb25nPmRlZmF1bHQ8L3N0cm9uZz48L2VtPiBvciAgPGVtPjxzdHJvbmc+c2V0PC9zdHJvbmc+PC9lbT4gYWN0aW9ucyBpdCBpcyBwZXJzaXN0ZW50LCBidXQgaWYgc2V0IG9uIGEgPHN0cm9uZz4mIzEyMztwcm90ZWN0fTwvc3Ryb25nPiB0YWcgaXQgYWZmZWN0cyBvbmx5IHRoZSB0YWcgd2hlcmUgaXQgaXMgdXNlZCBhbmQgZG9lc24ndCBwZXJzaXN0IHRvIHRoZSBuZXh0IG9jY3VycmVuY2UuPC9wPgoKICAgICAgPGg0PjxzdHJvbmc+Q29udGVudCB3cmFwcGluZyB0YWdzIGV4YW1wbGUuPC9zdHJvbmc+PC9oND4KICAgICAgPHA+VXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHRhZ3M6CiAgICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4gICYjMTIzO3Byb3RlY3R9d2hhdGV2ZXIgY29udGVudCB5b3Ugd2FudCBwcm90ZWN0ZWQuJiMxMjM7L3Byb3RlY3R9CiAgJiMxMjM7cHJvdGVjdCBwcm90ZWN0ZWRfbXNnPSd3ZWxsLCB5b3UgcmVhbGx5IHNob3VsZCBiZSBsb2dnZWQgaW4gaWYgeW91IHdoYXQgdG8gc2VlIHRoZSBjb250ZW50J313aGF0ZXZlciBjb250ZW50IHlvdSB3YW50IHByb3RlY3RlZC4mIzEyMzsvcHJvdGVjdH08L3N0cm9uZz4KICAgICAgICA8L3ByZT4KICAgICAgPC9wPgoKICAgICAgPGg1PlRoZSBwcm90ZWN0IGJsb2NrIHRhZyBhY2NlcHRzIG9ubHkgb25lIHBhcmFtZXRlcjo8L2g1PgogICAgICA8dWw+CiAgICAgICAgPGxpPjxlbT4ob3B0aW9uYWwpIDxzdHJvbmc+cHJvdGVjdGVkX21zZzwvc3Ryb25nPjwvZW0+IC0gYSBtZXNzYWdlIHRvIHJlcGxhY2UgdGhlIHByb3RlY3RlZCBjb250ZW50IChkZWZhdWx0cyB0byB3aGF0ZXZlciB3YXMgc2V0IG9uIGEgcHJldmlvdXMgcGVyc2lzdGVudCB0YWcgY2FsbCk7PC9saT4KICAgICAgPC91bD4KICAgICAgPGg1PlRoZSBwcm90ZWN0IG1vZGlmaWVyIHRhZyBkb2Vzbid0IGFjY2VwdCBwYXJhbWV0ZXJzPC9oNT4KICAgICAgPHA+Rm9yIHRoZSB0aW1lIGJlaW5nIHRoZSBtb2RpZmllciBkb2Vzbid0IHJlcXVpcmUgYW55IHBhcmFtZXRlciB0byB3b3JrLiBJdCB3aWxsIHVzZSB3aGF0ZXZlciBwYXJhbWV0ZXJzIGhhdmUgYmVlbiBzZXQgcHJldmlvdXNseS48L3A+CgogICAgICA8aDM+Q29kZSBTbmlwcGV0czwvaDM+CgogICAgICA8aDQ+VXNpbmcgVGhlIEZvcm0gQWN0aW9uPC9oND4KCiAgICAgIDxwPiBBbiBleGFtcGxlIHdpdGggYWxsIHRoZSBwYXJhbWV0ZXJzIHlvdSBjYW4gdXNlIHRvIGN1c3RvbWl6ZSB0aGUgZm9ybTo8L3A+CiAgICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4gICYjMTIzOyogRG8gd2UgcmVhbGx5IG5lZWQgYWxsIHRoaXM/ISEhIEEgY29tcGxldGUgZm9ybSBjYWxsIHdoaWNoIGRvZXNuJ3Qgb3V0cHV0IG5vdGhpbmcgYmVjYXVzZSB0aGUgYXNzaWduX291dHB1dCBwYXJhbWV0ZXIgaXMgYmVpbmcgdXNlZCAqfQogICYjMTIzO2NvbnRlbnRfcHJvdGVjdCBhY3Rpb249J2Zvcm0nIGxvZ2luX2J0bj0nTGV0IE1lIEluIScgbG9nb3V0X2J0bj0nQnllIEJ5ZSEnIGZvcm1fY2xhc3M9J2Nzc19mb3JtJyBmb3JtX2lkPSdjc3NfbXlfZm9ybScgaW5fcGFzc19pZD0nY3NzX3Bhc3N3cmRpZCcgaW5fcGFzc19jbGFzcz0nY3NzX3Bhc3N3cmRfY2xhc3MnIGJ1dHRvbl9pZD0nY3NzX2J0bl9pZCcgYnV0dG9uX2NsYXNzPSdjc3NfYnRuX2NsYXNzJyBhc3NpZ25fb3V0cHV0PSdsb2dpbl9mb3JtJ30KICAmIzEyMzsqIGJ5IHVzaW5nIGFzc2lnbl9vdXRwdXQ9J2xvZ2luX2Zvcm0nIHlvdSBjYW4gdXNlICYjMTIzOyRsb2dpbl9mb3JtfSBzZXZlcmFsIHRpbWVzIG9uIHRoZSB0ZW1wbGF0ZSAqfQogICYjMTIzOyRsb2dpbl9mb3JtfQogICAgPC9wcmU+CgogICAgICA8aDQ+VXNpbmcgVGhlIFByb3RlY3QgQmxvY2sgVGFnczwvaDQ+CgogICAgICA8cD5Vc2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgdGFnczo8L3A+CiAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiAgJiMxMjM7cHJvdGVjdH13aGF0ZXZlciBjb250ZW50IHlvdSB3YW50IHByb3RlY3RlZC4mIzEyMzsvcHJvdGVjdH0KICAgICYjMTIzO3Byb3RlY3QgcHJvdGVjdGVkX21zZz0nd2VsbCwgeW91IHJlYWxseSBzaG91bGQgYmUgbG9nZ2VkIGluIGlmIHlvdSB3aGF0IHRvIHNlZSB0aGUgY29udGVudCd9d2hhdGV2ZXIgY29udGVudCB5b3Ugd2FudCBwcm90ZWN0ZWQuJiMxMjM7L3Byb3RlY3R9CiAgICA8L3ByZT4KCiAgICA8aDQ+VXNpbmcgVGhlIFByb3RlY3QgTW9kaWZpZXI8L2g0PgogICAgPHA+VXNlIGFueSBvbmUgb2YgdGhlIGZvbGxvd2luZyBtZXRob2RzOjwvcD4KICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+ICAmIzEyMzskcHJvdGVjdF9tZSA9ICd3aGF0ZXZlciBjb250ZW50IHlvdSB3YW50IHByb3RlY3RlZC4nfQogICAgICAmIzEyMzskcHJvdGVjdF9tZXxwcm90ZWN0fQogICAgICAmIzEyMzsqIG9yICp9CiAgICAgICYjMTIzOydTb21lIHRleHQgSSB3YW50IHRvIGhhdmUgcHJvdGVjdGVkJ3xwcm90ZWN0fQogICAgJiMxMjM7cHJvdGVjdCBwcm90ZWN0ZWRfbXNnPSd3ZWxsLCB5b3UgcmVhbGx5IHNob3VsZCBiZSBsb2dnZWQgaW4gaWYgeW91IHdoYXQgdG8gc2VlIHRoZSBjb250ZW50J313aGF0ZXZlciBjb250ZW50IHlvdSB3YW50IHByb3RlY3RlZC4mIzEyMzsvcHJvdGVjdH0KICAgIDwvcHJlPgoKICA8aDQ+UGFzc3dvcmRzPC9oND4KICA8cD5UaGUgcGFzc3dvcmRzIHBhcmFtZXRlciBjYW4gYWNjZXB0IGEgcmFuZ2Ugb2YgdmFsdWVzLCBmcm9tIGEgc2luZ2xlIHBhc3N3b3JkLCBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHBhc3N3b3Jkcywgb3IgYW4gYXJyYXkgb2YgdmFsdWVzOjwvcD4KCiAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPgoKPHN0cm9uZz4mIzEyMztjb250ZW50X3Byb3RlY3QgcGFzc3dvcmRzPSdwYXNzMSd9PC9zdHJvbmc+CiAgICA8L3ByZT4KCgogICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4KCjxzdHJvbmc+JiMxMjM7Y29udGVudF9wcm90ZWN0IHBhc3N3b3Jkcz0ncGFzczEsJ3Bhc3MyJywncGFzczMnfTwvc3Ryb25nPgogICAgPC9wcmU+CgogICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4KCiYjMTIzOyogVXNlIHNtYXJ0eSBzeW50YXggdG8gY3JlYXRlIGFuIGFycmF5ICp9CjxzdHJvbmc+JiMxMjM7JHBhc3N3b3Jkcz1bJ3Bhc3MxJywncGFzczInLCdwYXNzMyddfTwvc3Ryb25nPgoKJiMxMjM7KiBvciAqfQo8c3Ryb25nPiYjMTIzOyRwYXNzd29yZHNbXT0ncGFzczEnfQomIzEyMzskcGFzc3dvcmRzW109J3Bhc3MyJ30KJiMxMjM7JHBhc3N3b3Jkc1tdPSdwYXNzMyd9PC9zdHJvbmc+CgomIzEyMzsqIGFuZCB1c2UgaXQgYXMgdGhlIHZhbHVlIGZvciB0aGUgcGFyYW1ldGVyIHBhc3N3b3JkcyAqfQo8c3Ryb25nPiYjMTIzO2NvbnRlbnRfcHJvdGVjdCBwYXNzd29yZHM9JHBhc3N3b3Jkc308L3N0cm9uZz4KCiYjMTIzOyogb3IgKn0KPHN0cm9uZz4mIzEyMztjb250ZW50X3Byb3RlY3QgYWN0aW9uPSdzZXQnIHBhc3N3b3Jkcz0kcGFzc3dvcmRzfTwvc3Ryb25nPgogICAgPC9wcmU+CgogICAgICA8aDM+Tm90ZXM8L2gzPgoKCgogICAgICA8aDQ+UGVyc2lzdGVudCBQYXJhbWV0ZXJzPC9oND4KICAgICAgPHA+U29tZSBvZiB0aGUgcGFyYW1ldGVycyB1c2VkIGJ5IHRoaXMgcGx1Z2luIGFyZSBwZXJzaXN0ZW50IGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHJlcXVlc3QsIHRoYXQgaXMgdG8gc2F5LCB0aHJvdWdoIGFsbCBvZiB0aGUgY3VycmVudCByZW5kZXJlZCBwYWdlLiBUaGlzIG1lYW5zIHRoYXQgeW91IGNhbiBzZXQgdGhlbSBvbmNlLCBrbm93aW5nIHRoZXkgd2lsbCBiZSB1c2VkIGxhdGVyIG9uIHRoZSBzYW1lIHJlcXVlc3Qgb24gc3Vic2VxdWVudCBjYWxscyB0byB0aGUgcGx1Z2luLiBUaGF0IGFsc28gbWVhbnMgdGhhdCB0aGV5IGNhbiBiZSBjaGFuZ2VkIG9uIHN1YnNlcXVlbnQgY2FsbHMsIGlmIG5lZWRlZC48L3A+CgogICAgICA8aDQ+UGFzc3dvcmRzPC9oND4KCiAgICAgIDxkaXYgY2xhc3M9Indhcm5pbmciIHN0eWxlPSJkaXNwbGF5OmJsb2NrOyI+CiAgICAgIDxwPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gVW5sZXNzIHlvdSB1c2UgYW4gYXJyYXkgdG8gc2V0IHRoZSBwYXNzd29yZHMsIGF2b2lkIHRoZSB1c2Ugb2YgY29tbWFzICg8c3Ryb25nPiw8L3N0cm9uZz4pIGFuZCBvZiB2ZXJ0aWNhbCBzbGFzaGVzICg8c3Ryb25nPnw8L3N0cm9uZz4pIGFzIHBhc3N3b3JkIHN5bWJvbHMgYXMgdGhlc2UgYXJlIHJlc2VydmVkIHRvIGludGVybmFsIHVzZSBhbmQgd2lsbCB1bmF2b2lkYWJseSBsZWFkIHRvIHBhc3N3b3JkcyBub3QgYmVpbmcgcmVjb2duaXplZCBieSB0aGUgcGx1Z2luLjwvcD4KICAgICAgPC9kaXY+CgogICAgICA8aDM+Q29va2llczwvaDM+CgogICAgICA8cD5JZiB0aGUgPHN0cm9uZz50aW1lb3V0PC9zdHJvbmc+IHBhcmFtZXRlciBpcyB1c2VkLCB0aGlzIHBsdWdpbiB3aWxsIGdlbmVyYXRlIGEgZnJvbnRlbmQgY29va2llLiBCeSB1c2luZyB0aGlzIHBhcmFtZXRlciB5b3UgbWF5IGJlIHZpb2xhdGluZyBzb21lIGNvdW50cmllcyBsYXdzIG9mIHVzZXIgcHJpdmFjeS4gUGxlYXNlIG1ha2Ugc3VyZSB5b3UgcHJvdmlkZSBhIGZhaXIgd2FybmluZyBvbiB0aGUgZnJvbnQgcGFnZXMgaWYgbmVlZGVkLCBvciBhdm9pZCB1c2luZyB0aGUgPHN0cm9uZz50aW1lb3V0PC9zdHJvbmc+IHBhcmFtZXRlciwgdGh1cyBkaXNhYmxpbmcgdGhlIHVzZSBvZiBjb29raWVzLiBUaGUgb25seSBkcmF3YmFjayBvZiBub3QgdXNpbmcgY29va2llcyBpcyB0aGF0IHRoZSBhdXRoZW50aWNhdGlvbiBvbmx5IGxhc3RzIGZvciBhIHNpbmdsZSBwYWdlIHJlcXVlc3QuPC9wPgoKICAgIDwvZGl2PgogIDwvbGk+CiAgPC91bD4KICA8L2Rpdj4KICA8ZGl2IGlkPSJjbGFzc19jIj4KICAgIDxoMj5TbWFydHkgVXNhYmxlIENsYXNzPC9oMj4KPHA+V2hlbiB0aGlzIG1vZHVsZSBpcyBpbnN0YWxsZWQsIGEgbmV3IHNtYXJ0eSBjbGFzcyBuYW1lZCBzbXggaXMgYXV0b21hdGljYWxseSBhdmFpbGFibGUgdG8geW91ciBwYWdlIHRlbXBsYXRlcyBhbmQgdmFyaW91cyBtb2R1bGUgdGVtcGxhdGVzLiBUaGlzIHNtYXJ0eSBjbGFzcyBoYXMgbnVtZXJvdXMgZnVuY3Rpb25zIHRoYXQgeW91IGNhbiBjYWxsIGF0IGFueSB0aW1lLjwvcD4KPGgzPkF2YWlsYWJsZSBGdW5jdGlvbnM6PC9oMz4KPHVsIGNsYXNzPSJhY2NvcmRpb24tbGlzdCI+CiAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4KICAgIDxoMyBjbGFzcz0iYWwiPiYjMTIzO3NteDo6c2VsZl91cmwoKX0gPHNwYW4gY2xhc3M9InNtYWxsIj5SZXR1cm4gdGhlIGN1cnJlbnQgVVJMPC9zcGFuPgogICAgPC9oMz4KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+CiAgICAgIDxwPgogICAgICAgIDxzdHJvbmc+c214OjpzZWxmX3VybDwvc3Ryb25nPigpCiAgICAgIDwvcD4KICAgICAgPHA+UmV0dXJucyB0aGUgY3VycmVudCBVUkw8L3A+CiAgICA8L2Rpdj4KICA8L2xpPgogIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+CiAgICA8aDMgY2xhc3M9ImFsIj4mIzEyMztzbXg6OmFuY2hvcl91cmwoLi4uKX0gPHNwYW4gY2xhc3M9InNtYWxsIj5VUkwgdG8gYW4gYW5jaG9yIG9uIHRoZSBzYW1lIHBhZ2U8L3NwYW4+CiAgICA8L2gzPgogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4KICAgICAgPHA+CiAgICAgICAgPHN0cm9uZz5zbXg6OmFuY2hvcl91cmw8L3N0cm9uZz4oJG5hbWUpCiAgICAgIDwvcD4KICAgICAgPHA+R2VuZXJhdGUgdGhlIGFic29sdXRlIFVSTCB0byBhbiBhbmNob3IgdGhhdCBpcyBvbiB0aGUgc2FtZSBwYWdlLjwvcD4KICAgICAgPHA+QXJndW1lbnRzOjwvcD4KICAgICAgPHVsPgogICAgICAgIDxsaT4kbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBhbmNob3IgdG8gbGluayB0by48L2xpPgogICAgICA8L3VsPgogICAgICA8cD5FeGFtcGxlOjwvcD4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mbHQ7YSBocmVmPSImIzEyMztzbXg6OmFuY2hvcl91cmwoJ2JvdHRvbScpfSImZ3Q7R28gdG8gdGhlIGJvdHRvbSZsdDsvYSZndDsmbHQ7YSBuYW1lPSJib3R0b20iJmd0O1RoZSBib3R0b20mbHQ7YSZndDs8L3ByZT4KICAgIDwvZGl2PgogIDwvbGk+CiAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4KICAgIDxoMyBjbGFzcz0iYWwiPiYjMTIzO3NteDo6c214Ojptb2R1bGVfaW5zdGFsbGVkKC4uLil9IDxzcGFuIGNsYXNzPSJzbWFsbCI+VGVzdCBpZiBhIG1vZHVsZSBpcyBpbnN0YWxsZWQ8L3NwYW4+CiAgICA8L2gzPgogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4KICAgICAgPHA+CiAgICAgICAgPHN0cm9uZz5zbXg6Om1vZHVsZV9pbnN0YWxsZWQ8L3N0cm9uZz4oJG1vZHVsZW5hbWUpCiAgICAgIDwvcD4KICAgICAgPHA+VGVzdCBpZiBhIHBhcnRpY3VsYXIgbW9kdWxlIGlzIGluc3RhbGxlZC48L3A+CiAgICAgIDxwPkFyZ3VtZW50czo8L3A+CiAgICAgIDx1bD4KICAgICAgICA8bGk+JG1vZHVsZW5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRvIGNoZWNrPC9saT4KICAgICAgPC91bD4KICAgICAgPHA+RXhhbXBsZTo8L3A+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjM7aWYgc214Ojptb2R1bGVfaW5zdGFsbGVkKCdNQU1TJyl9Rm91bmQgTUFNUyYjMTIzOy9pZn08L3ByZT4KICAgIDwvZGl2PgogIDwvbGk+CiAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4KICAgIDxoMyBjbGFzcz0iYWwiPiYjMTIzO3NteDo6bW9kdWxlX3ZlcnNpb24oLi4uKX0gPHNwYW4gY2xhc3M9InNtYWxsIj5SZXR1cm4gdGhlIHZlcnNpb24gb2YgYSBtb2R1bGU8L3NwYW4+CiAgICA8L2gzPgogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4KICAgICAgPHA+CiAgICAgICAgPHN0cm9uZz5zbXg6Om1vZHVsZV92ZXJzaW9uPC9zdHJvbmc+KCRtb2R1bGVuYW1lKWUKICAgICAgPC9wPgogICAgICA8cD5SZXR1cm4gdGhlIHZlcnNpb24gbnVtYmVyIG9mIGEgc3BlY2lmaWMgaW5zdGFsbGVkIG1vZHVsZS48L3A+CiAgICAgIDxwPkFyZ3VtZW50czo8L3A+CiAgICAgIDx1bD4KICAgICAgICA8bGk+JG1vZHVsZW5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRvIGNoZWNrPC9saT4KICAgICAgPC91bD4KICAgICAgPHA+RXhhbXBsZTo8L3A+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjM7JHZlcnNpb249c214Ojptb2R1bGVfdmVyc2lvbignTUFNUycpfVdlIGhhdmUgVmVyc2lvbiAmIzEyMzskZmV1X3ZlcnNpb259IG9mIE1BTVM8L3ByZT4KICAgIDwvZGl2PgogIDwvbGk+CiAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4KICAgIDxoMyBjbGFzcz0iYWwiPiYjMTIzO3NteDo6Z2V0X3BhcmVudF9hbGlhcyguLi4pfSA8c3BhbiBjbGFzcz0ic21hbGwiPlJldHVybnMgdGhlIGFsaWFzIG9mIHBhZ2UncyBwYXJlbnQ8L3NwYW4+CiAgICA8L2gzPgogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4KICAgICAgPHA+CiAgICAgICAgPHN0cm9uZz5zbXg6OmdldF9wYXJlbnRfYWxpYXM8L3N0cm9uZz4oWyRhbGlhc10pLgogICAgICA8L3A+CiAgICAgIDxwPlJldHVybnMgdGhlIGFsaWFzIG9mIHRoZSBzcGVjaWZpZWQgcGFnZSdzIHBhcmVudC4gUmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlcmUgaXMgbm8gcGFyZW50LjwvcD4KICAgICAgPHA+QXJndW1lbnRzOjwvcD4KICAgICAgPHVsPgogICAgICAgIDxsaT5bJGFsaWFzXSAtIChvcHRpb25hbCkgVGhlIHBhZ2UgYWxpYXMgdG8gZmluZCB0aGUgcGFyZW50IG9mLiBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSBjdXJyZW50IHBhZ2UgaXMgdXNlZC48L2xpPgogICAgICA8L3VsPgogICAgICA8cD5FeGFtcGxlOjwvcD4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj5UaGUgcGFyZW50IHBhZ2UgYWxpYXMgaXMgJiMxMjM7c214OjpnZXRfcGFyZW50X2FsaWFzKCl9PC9wcmU+CiAgICA8L2Rpdj4KICA8L2xpPgogIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+CiAgICA8aDMgY2xhc3M9ImFsIj4mIzEyMztzbXg6OmlzX2NoaWxkX29mKC4uLil9IDxzcGFuIGNsYXNzPSJzbWFsbCI+VGVzdHMgd2hldGhlciBpcyBhIGNoaWxkIG9mIHRoZSBzcGVjaWZpZWQgcGFyZW50IGFsaWFzPC9zcGFuPgogICAgPC9oMz4KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+CiAgICAgIDxwPgogICAgICAgIDxzdHJvbmc+c214Ojppc19jaGlsZF9vZjwvc3Ryb25nPigkdGVzdF9wYXJlbnQsJHRlc3RfY2hpbGQpCiAgICAgIDwvcD4KICAgICAgPHA+VGVzdHMgd2hldGhlciB0aGUgc3BlY2lmaWVkIGNoaWxkIGFsaWFzIG9yIGFuY2VzdG9yIGlzIGEgY2hpbGQgb2YgdGhlIHNwZWNpZmllZCBwYXJlbnQgYWxpYXMuIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gdGVzdCB0aGUgcm9vdCBhbGlhcyBvciBhbnkgcGFyZW50IHBhZ2UuIEl0IGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgb24gc2l0ZXMgd2l0aCBtdWx0aXBsZSBsZXZlbHMgb2Ygb3JnYW5pemF0aW9uLjwvcD4KICAgICAgPHA+QXJndW1lbnRzOjwvcD4KICAgICAgPHVsPgogICAgICAgIDxsaT4kdGVzdF9wYXJlbnQgLSBzdHJpbmcgVGhlIHBhcmVudCBwYWdlIGFsaWFzIHRvIHRlc3QgYWdhaW5zdC48L2xpPgogICAgICAgIDxsaT4kdGVzdF9jaGlsZCAtIHN0cmluZyBUaGUgY2hpbGQgcGFnZSBhbGlhcyB0byB0ZXN0IGFnYWluc3QuPC9saT4KICAgICAgPC91bD4KICAgICAgPHA+RXhhbXBsZTo8L3A+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjM7aWYgc214Ojppc19jaGlsZF9vZignaG9tZScsJHBhZ2VfYWxpYXMpfSBUaGlzIGlzIGEgY2hpbGQgb2YgdGhlIGhvbWUgcGFnZSAmIzEyMzsvaWZ9PC9wcmU+CiAgICA8L2Rpdj4KICA8L2xpPgogIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+CiAgICA8aDMgY2xhc3M9ImFsIj4mIzEyMztzbXg6OmdldF9yb290X2FsaWFzKC4uLil9IDxzcGFuIGNsYXNzPSJzbWFsbCI+UmV0dXJucyB0aGUgYWxpYXMgb2YgYSBwYWdlJ3Mgcm9vdCBwYXJlbnQ8L3NwYW4+CiAgICA8L2gzPgogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4KICAgICAgPHN0cm9uZz5zbXg6OmdldF9yb290X2FsaWFzPC9zdHJvbmc+KFskYWxpYXNdKSA8cD5SZXR1cm5zIHRoZSBhbGlhcyBvZiB0aGUgc3BlY2lmaWVkIHBhZ2UncyByb290IHBhcmVudC4gUmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlcmUgaXMgbm8gcm9vdCBwYXJlbnQuPC9wPgogICAgICA8cD5Bcmd1bWVudHM6PC9wPgogICAgICA8dWw+CiAgICAgICAgPGxpPlskYWxpYXNdIC0gKG9wdGlvbmFsKSBUaGUgcGFnZSBhbGlhcyB0byBmaW5kIHRoZSByb290IHBhcmVudCBvZi4gSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgY3VycmVudCBwYWdlIGlzIHVzZWQuPC9saT4KICAgICAgPC91bD4KICAgICAgPHA+RXhhbXBsZTo8L3A+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+VGhlIHJvb3QgcGFyZW50IHBhZ2UgYWxpYXMgaXMgJiMxMjM7c214OjpnZXRfcm9vdF9hbGlhcygpfTwvcHJlPgogICAgPC9kaXY+CiAgPC9saT4KICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPgogICAgPGgzIGNsYXNzPSJhbCI+JiMxMjM7c214OjpnZXRfcGFnZV90aXRsZSguLi4pfSA8c3BhbiBjbGFzcz0ic21hbGwiPlJldHVybnMgdGhlIHRpdGxlIG9mIGEgcGFnZTwvc3Bhbj4KICAgIDwvaDM+CiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPgogICAgICA8cD4KICAgICAgICA8c3Ryb25nPnNteDo6Z2V0X3BhZ2VfdGl0bGU8L3N0cm9uZz4oWyRhbGlhc10pLgogICAgICA8L3A+CiAgICAgIDxwPlJldHVybnMgdGhlIHRpdGxlIG9mIHRoZSBzcGVjaWZpZWQgcGFnZS48L3A+CiAgICAgIDxwPkFyZ3VtZW50czo8L3A+CiAgICAgIDx1bD4KICAgICAgICA8bGk+WyRhbGlhc10gLSAob3B0aW9uYWwpIFRoZSBwYWdlIGFsaWFzIHRvIGZpbmQgdGhlIHRpdGxlIG9mLiBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSBjdXJyZW50IHBhZ2UgaXMgdXNlZC48L2xpPgogICAgICA8L3VsPgogICAgICA8cD5FeGFtcGxlOjwvcD4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj5UaGUgdGl0bGUgb2YgdGhlIGN1cnJlbnQgcGFnZSBpcyAmIzEyMztzbXg6OmdldF9wYWdlX3RpdGxlKCl9PC9wcmU+CiAgPC9saT4KICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPgogICAgPGgzIGNsYXNzPSJhbCI+JiMxMjM7c214OjpnZXRfcGFnZV9tZW51dGV4dCguLi4pfSA8c3BhbiBjbGFzcz0ic21hbGwiPlJldHVybnMgdGhlIG1lbnUgdGV4dCBvZiBhIHBhZ2U8L3NwYW4+CiAgICA8L2gzPgogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4KICAgICAgPHA+CiAgICAgICAgPHN0cm9uZz5zbXg6OmdldF9wYWdlX21lbnV0ZXh0PC9zdHJvbmc+KFskYWxpYXNdKS4KICAgICAgPC9wPgogICAgICA8cD5SZXR1cm5zIHRoZSBtZW51dGV4dCBvZiB0aGUgc3BlY2lmaWVkIHBhZ2UuPC9wPgogICAgICA8cD5Bcmd1bWVudHM6PC9wPgogICAgICA8dWw+CiAgICAgICAgPGxpPlskYWxpYXNdIC0gKG9wdGlvbmFsKSBUaGUgcGFnZSBhbGlhcyB0byBmaW5kIHRoZSB0aXRsZSBvZi4gSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgY3VycmVudCBwYWdlIGlzIHVzZWQuPC9saT4KICAgICAgPC91bD4KICAgICAgPHA+RXhhbXBsZTo8L3A+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+VGhlIG1lbnV0ZXh0IG9mIHRoZSBjdXJyZW50IHBhZ2UgaXMgJiMxMjM7c214OjpnZXRfcGFnZV9tZW51dGV4dCgpfTwvcHJlPgogICAgPC9kaXY+CiAgPC9saT4KICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPgogICAgPGgzIGNsYXNzPSJhbCI+JiMxMjM7c214OjpnZXRfcGFnZV90eXBlKC4uLil9IDxzcGFuIGNsYXNzPSJzbWFsbCI+UmV0dXJucyB0aGUgY29udGVudCB0eXBlIGJ5IGFsaWFzPC9zcGFuPgogICAgPC9oMz4KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+CiAgICAgIDxwPgogICAgICAgIDxzdHJvbmc+c214OjpnZXRfcGFnZV90eXBlPC9zdHJvbmc+KFskYWxpYXNdKS4KICAgICAgPC9wPgogICAgICA8cD5SZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBjb250ZW50IHR5cGUgb2YgdGhlIHNwZWNpZmllZCBjb250ZW50IG9iamVjdCBieSBhbGlhczwvcD4KICAgICAgPHA+QXJndW1lbnRzOjwvcD4KICAgICAgPHVsPgogICAgICAgIDxsaT5bJGFsaWFzXSAtIChvcHRpb25hbCkgVGhlIHBhZ2UgYWxpYXMgdG8gZmluZCB0aGUgdHlwZSBvZi4gSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgY3VycmVudCBwYWdlIGlzIHVzZWQuPC9saT4KICAgICAgPC91bD4KICAgICAgPHA+RXhhbXBsZTo8L3A+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+VGhlIHR5cGUgb2YgdGhlIGN1cnJlbnQgcGFnZSBpcyAmIzEyMztzbXg6OmdldF9wYWdlX3R5cGUoKX08L3ByZT4KICAgIDwvZGl2PgogIDwvbGk+CiAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4KICAgIDxoMyBjbGFzcz0iYWwiPiYjMTIzO3NteDo6aGFzX2NoaWxkcmVuKC4uLil9IDxzcGFuIGNsYXNzPSJzbWFsbCI+VGVzdCBpZiBhIHBhZ2UgaGFzIGNoaWxkcmVuPC9zcGFuPgogICAgPC9oMz4KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+CiAgICAgIDxwPgogICAgICAgIDxzdHJvbmc+c214OjpoYXNfY2hpbGRyZW48L3N0cm9uZz4oWyRhbGlhc10pLgogICAgICA8L3A+CiAgICAgIDxwPlRlc3QgaWYgdGhlIHNwZWNpZmllZCBwYWdlIGhhcyBjaGlsZHJlbi48L3A+CiAgICAgIDxwPkFyZ3VtZW50czo8L3A+CiAgICAgIDx1bD4KICAgICAgICA8bGk+WyRhbGlhc10gLSAob3B0aW9uYWwpIFRoZSBwYWdlIGFsaWFzIHRvIHRlc3QuIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIGN1cnJlbnQgcGFnZSBpcyB1c2VkLjwvbGk+CiAgICAgIDwvdWw+CiAgICAgIDxwPkV4YW1wbGU6PC9wPgogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiYjMTIzOyRoYXNfY2hpbGRyZW49c214OjpoYXNfY2hpbGRyZW4oKX0mIzEyMztpZiAkaGFzX2NoaWxkcmVufVRoZSBjdXJyZW50IHBhZ2UgaGFzIGNoaWxkcmVuJiMxMjM7ZWxzZX1UaGUgY3VycmVudCBwYWdlIGhhcyBubyBjaGlsZHJlbiYjMTIzOy9pZn08L3ByZT4KICAgIDwvZGl2PgogIDwvbGk+CiAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4KICAgIDxoMyBjbGFzcz0iYWwiPiYjMTIzO3NteDo6Z2V0X2NoaWxkcmVuKC4uLil9IDxzcGFuIGNsYXNzPSJzbWFsbCI+R2V0IGluZm9ybWF0aW9uIGFib3V0IGEgcGFnZSdzIGNoaWxkcmVuPC9zcGFuPgogICAgPC9oMz4KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+CiAgICAgIDxwPgogICAgICAgIDxzdHJvbmc+c214OjpnZXRfY2hpbGRyZW48L3N0cm9uZz4oWyRhbGlhc11bLCAkc2hvd2luYWN0aXZlXSkuCiAgICAgIDwvcD4KICAgICAgPHA+UmV0dXJuIGFuIGFycmF5IGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgYSBwYWdlJ3MgY2hpbGRyZW4gaWYgYW55IGV4aXN0LjwvcD4KICAgICAgPHA+QXJndW1lbnRzOjwvcD4KICAgICAgPHVsPgogICAgICAgIDxsaT5bJGFsaWFzXSAtIChvcHRpb25hbCkgVGhlIHBhZ2UgYWxpYXMgdG8gdGVzdC4gSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgY3VycmVudCBwYWdlIGlzIHVzZWQuPC9saT4KICAgICAgICA8bGk+WyRzaG93aW5hY3RpdmVdIC0gKG9wdGlvbmFsKSBXZXRoZXIgaW5hY3RpdmUgcGFnZXMgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSByZXN1bHQgKGRlZmF1bHRzIHRvIGZhbHNlKS48L2xpPgogICAgICA8L3VsPgogICAgICA8cD5GaWVsZHM6PC9wPgogICAgICA8dWw+CiAgICAgICAgPGxpPmFsaWFzIC0gdGhlIHBhZ2UgYWxpYXMgb2YgdGhlIGNoaWxkPC9saT4KICAgICAgICA8bGk+aWQgLSB0aGUgcGFnZSBpZCBvZiB0aGUgY2hpbGQ8L2xpPgogICAgICAgIDxsaT50aXRsZSAtIHRoZSB0aXRsZSBwYWdlIG9mIHRoZSBjaGlsZCBwYWdlLjwvbGk+CiAgICAgICAgPGxpPm1lbnV0ZXh0IC0gdGhlIG1lbnUgdGV4dCBvZiB0aGUgY2hpbGQ8L2xpPgogICAgICAgIDxsaT5zaG93X2luX21lbnUgLSB3aGV0aGVyIHRoaXMgY2hpbGQgcGFnZSBpcyB2aXNpYmxlIGluIG1lbnVzLjwvbGk+CiAgICAgICAgPGxpPnR5cGUgLSBUaGUgdHlwZSBvZiBjaGlsZCBjb250ZW50IG9iamVjdC48L2xpPgogICAgICA8L3VsPgogICAgICA8cD5FeGFtcGxlOjwvcD4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4KICAmIzEyMzskY2hpbGRyZW49c214OjpnZXRfY2hpbGRyZW4oKX0KICAmIzEyMztpZiBjb3VudCgkY2hpbGRyZW4pfQogICAgJiMxMjM7Zm9yZWFjaCBmcm9tPSRjaGlsZHJlbiBpdGVtPSdjaGlsZCd9CiAgICAgICYjMTIzO2lmICRjaGlsZC5zaG93X2luX21lbnV9CiAgICAgICAgQ2hpbGQ6ICBpZCA9ICYjMTIzOyRjaGlsZC5pZH0gYWxpYXMgPSAmIzEyMzskY2hpbGQuYWxpYXN9Jmx0O2JyLyZndDsKICAgICAgJiMxMjM7L2lmfQogICAgJiMxMjM7L2ZvcmVhY2h9CiAgJiMxMjM7L2lmfTwvcHJlPgogICAgPC9kaXY+CiAgPC9saT4KICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPgogICAgPGgzIGNsYXNzPSJhbCI+JiMxMjM7c214OjpnZXRfcGFnZV9jb250ZW50KC4uLil9IDxzcGFuIGNsYXNzPSJzbWFsbCI+UmV0dXJucyB0aGUgdGV4dCBvZiBhIGNvbnRlbnQgYmxvY2sgb2YgYW5vdGhlciBwYWdlPC9zcGFuPgogICAgPC9oMz4KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+CiAgICAgIDxwPgogICAgICAgIDxzdHJvbmc+c214OjpnZXRfcGFnZV9jb250ZW50PC9zdHJvbmc+KCRhbGlhc1ssJGJsb2NrXSkuCiAgICAgIDwvcD4KICAgICAgPHA+UmV0dXJucyB0aGUgdGV4dCBvZiBhIHNwZWNpZmljIGNvbnRlbnQgYmxvY2sgb2YgYW5vdGhlciBwYWdlLjwvcD4KICAgICAgPHA+QXJndW1lbnRzOjwvcD4KICAgICAgPHVsPgogICAgICAgIDxsaT4kYWxpYXMgLSBUaGUgcGFnZSBhbGlhcyB0byBleHRyYWN0IGNvbnRlbnQgZnJvbS48L2xpPgogICAgICAgIDxsaT5bJGJsb2NrXSAtIChvcHRpb25hbCkgVGhlIG5hbWUgb2YgdGhlIGNvbnRlbnQgYmxvY2sgaW4gdGhlIHNwZWNpZmllZCBwYWdlLiBJZiB0aGlzIHZhcmlhYmxlIGlzIG5vdCBzcGVjaWZpZWQgdGhlIHZhbHVlIG9mIHRoZSBkZWZhdWx0IGNvbnRlbnQgYmxvY2sgPGVtPihjb250ZW50X2VuKTwvZW0+IGlzIGFzc3VtZWQuIDwvbGk+CiAgICAgIDwvdWw+CiAgICAgIDxwPkV4YW1wbGU6PC9wPgogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPlRoZSAnc2Vjb25kJyBibG9jayBvZiB0aGUgJ2Fib3V0JyBwYWdlIGlzICYjMTIzOyRmb289c214OjpnZXRfcGFnZV9jb250ZW50KCdhYm91dCcsJ3NlY29uZCcpfSYjMTIzO2V2YWwgdmFyPSRmb299PC9wcmU+CiAgICA8L2Rpdj4KICA8L2xpPgogIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+CiAgICA8aDMgY2xhc3M9ImFsIj4mIzEyMztzbXg6OmdldF9zaWJsaW5nKC4uLil9IDxzcGFuIGNsYXNzPSJzbWFsbCI+UmV0dXJucyB0aGUgYWxpYXMgb2YgdGhlIG5leHQgb3IgcHJldmlvdXMgc2libGluZzwvc3Bhbj4KICAgIDwvaDM+CiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPgogICAgICA8cD4KICAgICAgICA8c3Ryb25nPnNteDo6Z2V0X3NpYmxpbmc8L3N0cm9uZz4oJGRpcmVjdGlvbiwkYWxpYXMpLgogICAgICA8L3A+CiAgICAgIDxwPlJldHVybnMgdGhlIGFsaWFzIG9mIHRoZSBuZXh0IG9yIHByZXZpb3VzIHNpYmxpbmcgdG8gdGhlIHNwZWNpZmllZCBwYWdlLiBvciBmYWxzZS48L3A+CiAgICAgIDxwPkFyZ3VtZW50czo8L3A+CiAgICAgIDx1bD4KICAgICAgICA8bGk+JGRpcmVjdGlvbiAtIHRoZSBkaXJlY3Rpb24gdG8gbG9vayBpbi4gcG9zc2libGUgdmFsdWVzIGFyZSBwcmV2LHByZXZpb3VzLC0xLG5leHQsMTwvbGk+CiAgICAgIDwvdWw+CiAgICAgIDxwPkV4YW1wbGU6PC9wPgogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPkxpbmsgdG8gcHJldmlvdXMgc2libGluZzogJiMxMjM7JHByZXZfc2libGluZz1zbXg6OmdldF9zaWJsaW5nKCZxdW90O3ByZXYmcXVvdCl9JiMxMjM7aWYgIWVtcHR5KCRwcmV2X3NpYmxpbmcpfSYjMTIzO2Ntc19zZWxmbGluayBwYWdlPSZxdW90OyRwcmV2X3NpYmxpbmcmcXVvdDsgdGV4dD0mcXVvdDtQcmV2aW91cyZxdW90O30mIzEyMzsvaWZ9PC9wcmU+CiAgICA8L2Rpdj4KICA8L2xpPgogIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+CiAgICA8aDMgY2xhc3M9ImFsIj4mIzEyMztzbXg6OmdldF9wYXJhbGxlbF9wYWdlKC4uLil9IDxzcGFuIGNsYXNzPSJzbWFsbCI+R2V0IHRoZSBhbGlhcyBvZiBhIHBhcmFsbGVsIHBhZ2UgaW4gdGhlIHBhZ2Ugc3RydWN0dXJlPC9zcGFuPgogICAgPC9oMz4KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+CiAgICAgIDxwPgogICAgICAgIDxzdHJvbmc+c214OjpnZXRfcGFyYWxsZWxfcGFnZTwvc3Ryb25nPigkbmV3X3Jvb3RbLCRjdXJyZW50X3BhZ2UgPSBudWxsXSkuCiAgICAgIDwvcD4KICAgICAgPHA+R2V0IHRoZSBhbGlhcyBvZiBhIHBhcmFsbGVsIHBhZ2UgaW4gdGhlIHBhZ2Ugc3RydWN0dXJlIGdpdmVuIGEgZGlmZmVyZW50IHJvb3QgYWxpYXMuPC9wPgogICAgICA8cD5JbiBhIG11bHRpbGFuZ3VhZ2Ugc2l0ZSB3aGVyZSB0aGUgcm9vdCBsZXZlbHMgcmVwcmVzZW50IGRpZmZlcmVudCBsYW5ndWFnZXMsIGl0IG1heSBiZSB1c2VmdWwgdG8gcmV0cmlldmUgdGhlIGFsaWFzIHRvIGFuIGVxdWl2YWxlbnQgcGFnZSBpbiBhIGRpZmZlcmVudCBsYW5ndWFnZS4gaS5lLjogaWYgdGhlIHVzZXIgaXMgY3VycmVudGx5IGJyb3dzaW5nIHRoZSBmcmVuY2ggcGFnZSBhbmQgd2lzaGVzIHRvIHNlZSB0aGUgc2FtZSBwYWdlIGluIGVuZ2xpc2ggKGlmIGl0IGV4aXN0cykuPC9wPgogICAgICA8cD5UaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFsaWFzIG9mIHRoZSBzcGVjaWZpZWQgcGFnZSB1bmRlciB0aGUgbmV3IHJvb3QuIElmIGl0IGV4aXN0cy4gSWYgbm90aGluZyBpcyBmb3VuZCwgbnVsbCBpcyByZXR1cm5lZC48L3A+CiAgICAgIDxwPkFyZ3VtZW50czo8L3A+CiAgICAgIDx1bD4KICAgICAgICA8bGk+bmV3IHJvb3QgLSBUaGUgYWxpYXMgb2YgdGhlIG5ldyByb290IHBhcmVudC4gTm90ZSwgaWYgYSB0b3AgbGV2ZWwgcGFnZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgYWxpYXMgcHJvdmlkZWQgaXMgdXNlZCB0byBmaW5kIHRoZSB0b3AgbGV2ZWwgcGFnZSAoc2VlIGdldF9yb290X2FsaWFzKS48L2xpPgogICAgICAgIDxsaT5jdXJyZW50X3BhZ2UgLSAob3B0aW9uYWwpIFRoZSBwYWdlIGFsaWFzIHRvIGZpbmQgdGhlIHBlZXIgb2YuIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIGN1cnJlbnQgcGFnZSBpcyB1c2VkLjwvbGk+CiAgICAgIDwvdWw+CiAgICAgIDxwPkV4YW1wbGU6PC9wPgogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPkZpbmQgdGhlIGVxdWl2YWxlbnQgZnJlbmNoIHBhZ2UgZm9yIHRoaXMgcGFnZTogJiMxMjM7JHRtcD1zbXg6OmdldF9wYXJhbGxlbF9wYWdlKCdGUicpfSYjMTIzO2lmICR0bXAgIT0gJycgJiYgJHRtcCAhPSAkcGFnZV9hbGlhc30mIzEyMztjbXNfc2VsZmxpbmsgcGFnZT0kdG1wfSYjMTIzOy9pZn08L3ByZT4KICAgIDwvZGl2PgogIDwvbGk+CiAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4KICAgIDxoMyBjbGFzcz0iYWwiPiYjMTIzO3NteDo6Z2V0X3BhcmFsbGVsX3VybCguLi4pfSA8c3BhbiBjbGFzcz0ic21hbGwiPkdldCB0aGUgVVJMIG9mIGEgcGFyYWxsZWwgcGFnZSBpbiB0aGUgcGFnZSBzdHJ1Y3R1cmU8L3NwYW4+CiAgICA8L2gzPgogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4KICAgICAgPHA+CiAgICAgICAgPHN0cm9uZz5zbXg6OmdldF9wYXJhbGxlbF91cmw8L3N0cm9uZz4oJG5ld19yb290WywkY3VycmVudF9wYWdlID0gbnVsbF0pLgogICAgICA8L3A+CiAgICAgIDxwPkdldCB0aGUgVVJMIG9mIGEgcGFyYWxsZWwgcGFnZSBpbiB0aGUgcGFnZSBzdHJpY3R1cmUgZ2l2ZW4gYSBkaWZmZXJlbnQgcm9vdCBhbGlhcy48L3A+CiAgICAgIDxwPkluIGEgbXVsdGlsYW5ndWFnZSBzaXRlIHdoZXJlIHRoZSByb290IGxldmVscyByZXByZXNlbnQgZGlmZmVyZW50IGxhbmd1YWdlcywgaXQgbWF5IGJlIHVzZWZ1bCB0byByZXRyaWV2ZSB0aGUgVVJMIHRvIGFuIGVxdWl2YWxlbnQgcGFnZSBpbiBhIGRpZmZlcmVudCBsYW5ndWFnZS4gaS5lLjogaWYgdGhlIHVzZXIgaXMgY3VycmVudGx5IGJyb3dzaW5nIHRoZSBmcmVuY2ggcGFnZSBhbmQgd2lzaGVzIHRvIHNlZSB0aGUgc2FtZSBwYWdlIGluIGVuZ2xpc2ggKGlmIGl0IGV4aXN0cykuPC9wPgogICAgICA8cD5UaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFsaWFzIG9mIHRoZSBzcGVjaWZpZWQgcGFnZSB1bmRlciB0aGUgbmV3IHJvb3QuIElmIGl0IGV4aXN0cy4gSWYgbm90aGluZyBpcyBmb3VuZCwgbnVsbCBpcyByZXR1cm5lZC48L3A+CiAgICAgIDxwPkFyZ3VtZW50czo8L3A+CiAgICAgIDx1bD4KICAgICAgICA8bGk+bmV3IHJvb3QgLSBUaGUgYWxpYXMgb2YgdGhlIG5ldyByb290IHBhcmVudC4gTm90ZSwgaWYgYSB0b3AgbGV2ZWwgcGFnZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgYWxpYXMgcHJvdmlkZWQgaXMgdXNlZCB0byBmaW5kIHRoZSB0b3AgbGV2ZWwgcGFnZSAoc2VlIGdldF9yb290X2FsaWFzKS48L2xpPgogICAgICAgIDxsaT5jdXJyZW50X3BhZ2UgLSAob3B0aW9uYWwpIFRoZSBwYWdlIGFsaWFzIHRvIGZpbmQgdGhlIHBlZXIgb2YuIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIGN1cnJlbnQgcGFnZSBpcyB1c2VkLjwvbGk+CiAgICAgIDwvdWw+CiAgICAgIDxwPkV4YW1wbGU6PC9wPgogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPkZpbmQgdGhlIGVxdWl2YWxlbnQgZnJlbmNoIHBhZ2UgZm9yIHRoaXMgcGFnZTogJiMxMjM7JHVybD1zbXg6OmdldF9wYXJhbGxlbF9wYWdlKCdGUicpfQogICAgJiMxMjM7aWYgJHVybH0mbHQ7YSBocmVmPSImIzEyMzskdXJsfSI+RlImbHQ7L2E+JiMxMjM7L2lmfTwvcHJlPgogICAgPC9kaXY+CiAgPC9saT4KICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPgogICAgPGgzIGNsYXNzPSJhbCI+JiMxMjM7c214OjpnZXRfZmlsZV9saXN0aW5nKC4uLil9IDxzcGFuIGNsYXNzPSJzbWFsbCI+UmV0dXJuIGEgbGlzdCBvZiBmaWxlcyBpbiBhIGRpcmVjdG9yeTwvc3Bhbj4KICAgIDwvaDM+CiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPgogICAgICA8cD4KICAgICAgICA8c3Ryb25nPnNteDo6Z2V0X2ZpbGVfbGlzdGluZzwvc3Ryb25nPigkZGlyWywkZXhjbHVkZXByZWZpeF0pLgogICAgICA8L3A+CiAgICAgIDxwPlJldHVybiBhIGxpc3Qgb2YgZmlsZXMgaW4gYSBkaXJlY3RvcnkuPC9wPgogICAgICA8cD5Bcmd1bWVudHM6PC9wPgogICAgICA8dWw+CiAgICAgICAgPGxpPiRkaXIgLSBUaGUgZGlyZWN0b3J5IHRvIHNjYW4gKHNob3VsZCBiZSBhbiBhYnNvbHV0ZSBkaXJlY3RvcnkpPC9saT4KICAgICAgICA8bGk+WyRleGNsdWRlcHJlZml4XSAtIChvcHRpb25hbCkgRXhjbHVkZSBmaWxlcyBzdHJ0aW5nIHdpdGggdGhlIHNwZWNpZmllZCBwcmVmaXguPC9saT4KICAgICAgPC91bD4KICAgIDwvZGl2PgogIDwvbGk+CjwvdWw+ICA8L2Rpdj4KICA8ZGl2IGlkPSJuZXdfYyI+CiAgICA8aDI+V2hhdCBpcyBOZXc8L2gyPgoKPHA+SGVyZSdzIHdoYXQgd2UgaGF2ZSBiZWVuIHdvcmtpbmcgb246PC9wPgo8dWw+CiAgPGxpPk5ldyBQbHVnaW5zOgogICAgPHVsPgogICAgICA8bGk+PHN0cm9uZz4mIzEyMztjb250ZW50X2ZldGNofTwvc3Ryb25nPiAtIEZldGNoIGFuZCByZXVzZSBDTVNNUyBjb250ZW50IChhIGZvcmsgb2YgY29udGVudF9kdW1wKTs8L2xpPgogICAgICA8bGk+PHN0cm9uZz4mIzEyMztmaWxlc19saXN0fTwvc3Ryb25nPiAtIExpc3QgZmlsZXMgYW5kIGZvbGRlcnMgd2l0aCBvYmZ1c2NhdGVkIGRvd25sb2FkIGFiaWxpdHk7PC9saT4KICAgICAgPGxpPjxzdHJvbmc+JiMxMjM7Y29udGVudF9wcm90ZWN0fTwvc3Ryb25nPiAtIFByb3RlY3QgY29udGVudCB3aXRoIGEgcGFzc3dvcmQgKGEgZm9yayBvZiBwYWdlX3Byb3RlY3QpOzwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPkEgbmV3IGFuZCBtb3JlIG9yZ2FuaXplZCBoZWxwOzwvbGk+CiAgPGxpPk9sZCBsZWZ0b3ZlcnMgb2YgcGx1Z2lucyBvbiB0aGUgaGVscCBoYXZlIGJlZW4gcmVtb3ZlZDs8L2xpPgogIDxsaT5OZXcgPHN0cm9uZz5jbGljayB0byBjb3B5PC9zdHJvbmc+IGZlYXR1cmUgb24gY29kZSBzbmlwcGV0cyAocGF5IGF0dGVudGlvbiB0byB0aGUgY3Vyc29yIHdoaWxlIGhvdmVyaW5nIG92ZXIgdGhlIHNuaXBwZXRzKTs8L2xpPgogIDxsaT5UaGUgbW9kdWxlIHNob3VsZCBiZSBmdWxseSBQSFAgOC4xIGNvbXBhdGlibGUgYnkgbm93IHVubGVzcyB3ZSBtaXNzZWQgc29tZXRoaW5nOzwvbGk+CjwvdWw+Cgk8L2Rpdj4KICA8ZGl2IGlkPSJhYm91dF9jIj4KICAgIDxoMz5BYm91dCB0aGlzIG1vZHVsZTwvaDM+CgogIDxwPlRoaXMgbW9kdWxlIGlzIGEgZm9yayBvZiA8c3Ryb25nPkNHU2ltcGxlU21hcnR5PC9zdHJvbmc+IGRldmVsb3BlZCBieSA8c3Ryb25nPlJvYmVydCBDYW1wYmVsbCAmbHQ7Y2FsZ3V5MTAwMCZndDs8L3N0cm9uZz4uPGJyIC8+CiAgICAgIFRoaXMgaXMgYSAxc3QgZ2VuZXJhdGlvbiBmb3JrIG9mIHRoZSBtb2R1bGUuIENvbnNpZGVyIHRoaXMgYXMgYW5vdGhlciBmbGF2b3VyIG9mIHRoZSBvcmlnaW5hbCBtb2R1bGUuPGJyIC8+CgogIElmIHlvdSBmaW5kIGFueSBidWdzIHBsZWFzZSBmZWVsIGZyZWUgdG8gc3VibWl0IGEgYnVnIHJlcG9ydCA8YSBocmVmPSJodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL2J1Zy9saXN0LzE0NjMiIHRhcmdldD0iX2JsYW5rIj5oZXJlPC9hPiBvciBmb3IgYW55IGdvb2QgaWRlYXMgY29uc2lkZXIgc3VibWl0aW5nIGEgZmVhdHVyZSByZXF1ZXN0IDxhIGhyZWY9Imh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvZmVhdHVyZV9yZXF1ZXN0L2xpc3QvMTQ2MyIgdGFyZ2V0PSJfYmxhbmsiPmhlcmU8L2E+LjwvcD4KICA8cD5QbGVhc2Uga2VlcCBpbiBtaW5kIHRoYXQgZGV2ZWxvcGVycyBkbyBoYXZlIHRoZWlyIGRhaWx5IGpvYnMgd2hpY2ggbWVhbnMgdGhhdCBmZWF0dXJlIHJlcXVlc3RzIGFyZSBjb25zaWRlcmVkIGFuZCBkb25lIGFzIHRpbWUgYWxsb3dzLiBJZiB5b3UgbmVlZCBhIGZlYXR1cmUgcmVhbGx5IGJhZGx5IGNvbnNpZGVyIGNvbnRhY3Rpbmcgb25lIG9mIHRoZSBkZXZlbG9wZXJzIGZvciBhIHNwb25zb3JlZCBkZXZlbG9wbWVudC4KICA8L3A+Cgo8aDM+U3VwcG9ydDwvaDM+CjxwPlRoZSBtb2R1bGUgYXV0aG9yIC8gbWFpbnRhaW5lcnMgb3IgcHJvamVjdCBtYW5hZ2VycyBhcmUgaW4gbm8gd2F5IG9ibGlnYXRlZCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoaXMgY29kZSBpbiBhbnkgZmFzaGlvbi4gIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIG51bWJlciBvZiByZXNvdXJjZXMgYXZhaWxhYmxlIHRvIGhlbHAgeW91IHdpdGggaXQ6PC9wPgo8dWw+CjxsaT5BIGJ1ZyB0cmFja2luZyBhbmQgZmVhdHVyZSByZXF1ZXN0IHN5c3RlbSBoYXMgYmVlbiBjcmVhdGVkIGZvciB0aGlzIG1vZHVsZSA8YSBocmVmPSJodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3NtYXJ0eWV4dCI+aGVyZTwvYT4uIFBsZWFzZSBiZSB2ZXJib3NlIGFuZCBkZXNjcmlwdGl2ZSB3aGVuIHN1Ym1pdHRpbmcgYnVnIHJlcG9ydHMgYW5kIGZlYXR1cmUgcmVxdWVzdHMsIGFuZCBmb3IgYnVnIHJlcG9ydHMgZW5zdXJlIHRoYXQgeW91IGhhdmUgcHJvdmlkZWQgc3VmZmljaWVudCBpbmZvcm1hdGlvbiB0byByZWxpYWJseSByZXByb2R1Y2UgdGhlIGlzc3VlLjwvbGk+CjxsaT5BZGRpdGlvbmFsIGRpc2N1c3Npb24gb2YgdGhpcyBtb2R1bGUgbWF5IGFsc28gYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZyI+Q01TIE1hZGUgU2ltcGxlIEZvcnVtczwvYT4uICBXaGVuIGRlc2NyaWJpbmcgYW4gaXNzdWUgcGxlYXNlIG1ha2UgYW4gZWZmb3J0IHRvIHByb3ZpZGUgYWxsIHJlbGV2YW50IGluZm9ybWF0aW9uLCBhIHRob3JvdWdoIGRlc2NyaXB0aW9uIG9mIHlvdXIgaXNzdWUsIGFuZCBzdGVwcyB0byByZXByb2R1Y2UgaXQgb3IgeW91ciBkaXNjdXNzaW9uIG1heSBiZSBpZ25vcmVkLjwvbGk+CjwvdWw+CgoKPGgzPkNvcHlyaWdodCBhbmQgTGljZW5zZTwvaDM+CjxwPkNvcHlyaWdodCAmY29weTsgMjAyMCAtIDIwMjMsIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uIDxhIGhyZWY9Im1haWx0bzppbmZvQGNtc21hZGVzaW1wbGUub3JnIj4mbHQ7aW5mb0BjbXNtYWRlc2ltcGxlLm9yZyZndDs8L2E+LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+CjxwPkNvcHlyaWdodCAmY29weTsgMjAwOCwgUm9iZXJ0IENhbXBiZWxsICZsdDtjYWxndXkxMDAwJmd0Oy4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPgo8aHI+CjxwPjxzdHJvbmc+U21hcnR5RXh0PC9zdHJvbmc+IGlzIGZyZWUgc29mdHdhcmU7PGJyIC8+IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSA8c3Ryb25nPkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlPC9zdHJvbmc+IGFzIHB1Ymxpc2hlZCBieSB0aGUgPHN0cm9uZz5GcmVlIFNvZnR3YXJlIEZvdW5kYXRpb248L3N0cm9uZz47PGJyIC8+IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uPC9wPgo8cD48c3Ryb25nPlNtYXJ0eUV4dDwvc3Ryb25nPiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgPHN0cm9uZz5XSVRIT1VUIEFOWSBXQVJSQU5UWTwvc3Ryb25nPjs8YnIgLz4gd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIDxzdHJvbmc+TUVSQ0hBTlRBQklMSVRZPC9zdHJvbmc+IG9yIDxzdHJvbmc+RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0U8L3N0cm9uZz4uPC9wPgo8cD5TZWUgdGhlR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy48L3A+CiA8cD5Zb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSA8c3Ryb25nPkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlPC9zdHJvbmc+IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOzxiciAvPiBpZiBub3QsIHdyaXRlIHRvIHRoZSA8c3Ryb25nPkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0E8L3N0cm9uZz4gb3IgPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCI+cmVhZCBpdCBvbmxpbmU8L2E+LjwvcD4KPHA+PHN0cm9uZz5Zb3UgbXVzdCBhZ3JlZSB0byB0aGlzIGxpY2Vuc2UgYmVmb3JlIHVzaW5nIDxzdHJvbmc+U21hcnR5RXh0PC9zdHJvbmc+Ljwvc3Ryb25nPjwvcD4KPGhyPgo8aDQ+Q3VycmVudCBNYWludGFpbmVyczwvaDQ+Cjx1bD4KICA8bGkgY2xhc3M9InBfYm90dG9tXzE1Ij48c3Ryb25nPkZlcm5hbmRvIE1vcmdhZG8gKEpvIE1vcmcpPC9zdHJvbmc+PC9saT4KPC91bD4KCjxoND5QYXN0IE1haW50YWluZXJzPC9oND4KPHVsPgogIDxsaT48c3Ryb25nPlJvYmVydCBDYW1wYmVsbCAoY2FsZ3V5MTAwMCk8L3N0cm9uZz4gPGJyIC8+d3d3LmNhbGd1eTEwMDAuY29tPC9saT4KPC91bD4KCjxoND5Lbm93biBDb250cmlidXRvcnM8L2g0Pgo8dWw+CiAgPGxpPjxzdHJvbmc+Um9iZXJ0IENhbXBiZWxsIChjYWxndXkxMDAwKTwvc3Ryb25nPjxiciAvPnd3dy5jYWxndXkxMDAwLmNvbTwvbGk+CjwvdWw+CgoJPC9kaXY+CiAgPGRpdiBjbGFzcz0iY2xlYXJiIj48L2Rpdj4KPC9kaXY+]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBKbyBNb3JnICZsdDtqb21vcmdAY21zbWFkZXNpbXBsZS5vcmcmZ3Q7PGJyIC8+PGJyIC8+VmVyc2lvbjogMS4yPGJyIC8+PGJyIC8+Q2hhbmdlIEhpc3Rvcnk6PGJyIC8+PHVsPgogIDxsaT4xLjIgLSBGZWJydWFyeSwgMjAyMwogICAgPHA+QWRkZWQgMyBuZXcgcGx1Z2luczs8L3A+CiAgICA8cD5DbGVhbmVkIGFuZCByZW9yZ2FuaXplZCB0aGUgaGVscCBkb2N1bWVudGF0aW9uOzwvcD4KICAgIDxwPk5ldyAnY2xpY2sgdG8gY29weScgZnVuY3Rpb25hbGl0eSBvbiBjb2RlIHNuaXBwZXRzOzwvcD4KICAgIDxwPkZpeGVzIGFuZCBhIGZldyBtb3JlIFBIUCA4LjEgY29tcGF0aWJpbGl0eSB1cGRhdGVzOzwvcD4KICA8L2xpPgogIDxsaT4xLjAuMSAtIERlY2VtYmVyLCAyMDIyCiAgICA8cD5GaXhlcyBhbmQgUEhQIDguMSBjb21wYXRpYmlsaXR5IHVwZGF0ZXM7PC9wPgogIDwvbGk+CiAgPGxpPjEuMCAtIEZlYnJ1YXJ5LCAyMDIxCiAgICA8cD5Jbml0aWFsIHJlbGVhc2U8L3A+CiAgPC9saT4KPC91bD48YnIgLz4=]]></about>
	<description><![CDATA[CMSMS Smarty Tools]]></description>
	<file>
	  <filename>/docs</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/docs/COPYING</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ICAgICAgICAgICAgICAgICAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQogICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMywgMjkgSnVuZSAyMDA3CgogQ29weXJpZ2h0IChDKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiA8aHR0cDovL2ZzZi5vcmcvPgogRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCiBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVhbWJsZQoKICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgYSBmcmVlLCBjb3B5bGVmdCBsaWNlbnNlIGZvcgpzb2Z0d2FyZSBhbmQgb3RoZXIga2luZHMgb2Ygd29ya3MuCgogIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhbmQgb3RoZXIgcHJhY3RpY2FsIHdvcmtzIGFyZSBkZXNpZ25lZAp0byB0YWtlIGF3YXkgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgdGhlIHdvcmtzLiAgQnkgY29udHJhc3QsCnRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvCnNoYXJlIGFuZCBjaGFuZ2UgYWxsIHZlcnNpb25zIG9mIGEgcHJvZ3JhbS0tdG8gbWFrZSBzdXJlIGl0IHJlbWFpbnMgZnJlZQpzb2Z0d2FyZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFdlLCB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB1c2UgdGhlCkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3N0IG9mIG91ciBzb2Z0d2FyZTsgaXQgYXBwbGllcyBhbHNvIHRvCmFueSBvdGhlciB3b3JrIHJlbGVhc2VkIHRoaXMgd2F5IGJ5IGl0cyBhdXRob3JzLiAgWW91IGNhbiBhcHBseSBpdCB0bwp5b3VyIHByb2dyYW1zLCB0b28uCgogIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQpoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCnRoZW0gaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQgaWYgeW91CndhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3CmZyZWUgcHJvZ3JhbXMsIGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgoKICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIHByZXZlbnQgb3RoZXJzIGZyb20gZGVueWluZyB5b3UKdGhlc2UgcmlnaHRzIG9yIGFza2luZyB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuICBUaGVyZWZvcmUsIHlvdSBoYXZlCmNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZgp5b3UgbW9kaWZ5IGl0OiByZXNwb25zaWJpbGl0aWVzIHRvIHJlc3BlY3QgdGhlIGZyZWVkb20gb2Ygb3RoZXJzLgoKICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCmdyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IHBhc3Mgb24gdG8gdGhlIHJlY2lwaWVudHMgdGhlIHNhbWUKZnJlZWRvbXMgdGhhdCB5b3UgcmVjZWl2ZWQuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUKb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkKa25vdyB0aGVpciByaWdodHMuCgogIERldmVsb3BlcnMgdGhhdCB1c2UgdGhlIEdOVSBHUEwgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczoKKDEpIGFzc2VydCBjb3B5cmlnaHQgb24gdGhlIHNvZnR3YXJlLCBhbmQgKDIpIG9mZmVyIHlvdSB0aGlzIExpY2Vuc2UKZ2l2aW5nIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSBpdC4KCiAgRm9yIHRoZSBkZXZlbG9wZXJzJyBhbmQgYXV0aG9ycycgcHJvdGVjdGlvbiwgdGhlIEdQTCBjbGVhcmx5IGV4cGxhaW5zCnRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gIEZvciBib3RoIHVzZXJzJyBhbmQKYXV0aG9ycycgc2FrZSwgdGhlIEdQTCByZXF1aXJlcyB0aGF0IG1vZGlmaWVkIHZlcnNpb25zIGJlIG1hcmtlZCBhcwpjaGFuZ2VkLCBzbyB0aGF0IHRoZWlyIHByb2JsZW1zIHdpbGwgbm90IGJlIGF0dHJpYnV0ZWQgZXJyb25lb3VzbHkgdG8KYXV0aG9ycyBvZiBwcmV2aW91cyB2ZXJzaW9ucy4KCiAgU29tZSBkZXZpY2VzIGFyZSBkZXNpZ25lZCB0byBkZW55IHVzZXJzIGFjY2VzcyB0byBpbnN0YWxsIG9yIHJ1bgptb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgc29mdHdhcmUgaW5zaWRlIHRoZW0sIGFsdGhvdWdoIHRoZSBtYW51ZmFjdHVyZXIKY2FuIGRvIHNvLiAgVGhpcyBpcyBmdW5kYW1lbnRhbGx5IGluY29tcGF0aWJsZSB3aXRoIHRoZSBhaW0gb2YKcHJvdGVjdGluZyB1c2VycycgZnJlZWRvbSB0byBjaGFuZ2UgdGhlIHNvZnR3YXJlLiAgVGhlIHN5c3RlbWF0aWMKcGF0dGVybiBvZiBzdWNoIGFidXNlIG9jY3VycyBpbiB0aGUgYXJlYSBvZiBwcm9kdWN0cyBmb3IgaW5kaXZpZHVhbHMgdG8KdXNlLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hlcmUgaXQgaXMgbW9zdCB1bmFjY2VwdGFibGUuICBUaGVyZWZvcmUsIHdlCmhhdmUgZGVzaWduZWQgdGhpcyB2ZXJzaW9uIG9mIHRoZSBHUEwgdG8gcHJvaGliaXQgdGhlIHByYWN0aWNlIGZvciB0aG9zZQpwcm9kdWN0cy4gIElmIHN1Y2ggcHJvYmxlbXMgYXJpc2Ugc3Vic3RhbnRpYWxseSBpbiBvdGhlciBkb21haW5zLCB3ZQpzdGFuZCByZWFkeSB0byBleHRlbmQgdGhpcyBwcm92aXNpb24gdG8gdGhvc2UgZG9tYWlucyBpbiBmdXR1cmUgdmVyc2lvbnMKb2YgdGhlIEdQTCwgYXMgbmVlZGVkIHRvIHByb3RlY3QgdGhlIGZyZWVkb20gb2YgdXNlcnMuCgogIEZpbmFsbHksIGV2ZXJ5IHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlIHBhdGVudHMuClN0YXRlcyBzaG91bGQgbm90IGFsbG93IHBhdGVudHMgdG8gcmVzdHJpY3QgZGV2ZWxvcG1lbnQgYW5kIHVzZSBvZgpzb2Z0d2FyZSBvbiBnZW5lcmFsLXB1cnBvc2UgY29tcHV0ZXJzLCBidXQgaW4gdGhvc2UgdGhhdCBkbywgd2Ugd2lzaCB0bwphdm9pZCB0aGUgc3BlY2lhbCBkYW5nZXIgdGhhdCBwYXRlbnRzIGFwcGxpZWQgdG8gYSBmcmVlIHByb2dyYW0gY291bGQKbWFrZSBpdCBlZmZlY3RpdmVseSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgdGhlIEdQTCBhc3N1cmVzIHRoYXQKcGF0ZW50cyBjYW5ub3QgYmUgdXNlZCB0byByZW5kZXIgdGhlIHByb2dyYW0gbm9uLWZyZWUuCgogIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCm1vZGlmaWNhdGlvbiBmb2xsb3cuCgogICAgICAgICAgICAgICAgICAgICAgIFRFUk1TIEFORCBDT05ESVRJT05TCgogIDAuIERlZmluaXRpb25zLgoKICAiVGhpcyBMaWNlbnNlIiByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KCiAgIkNvcHlyaWdodCIgYWxzbyBtZWFucyBjb3B5cmlnaHQtbGlrZSBsYXdzIHRoYXQgYXBwbHkgdG8gb3RoZXIga2luZHMgb2YKd29ya3MsIHN1Y2ggYXMgc2VtaWNvbmR1Y3RvciBtYXNrcy4KCiAgIlRoZSBQcm9ncmFtIiByZWZlcnMgdG8gYW55IGNvcHlyaWdodGFibGUgd29yayBsaWNlbnNlZCB1bmRlciB0aGlzCkxpY2Vuc2UuICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4gICJMaWNlbnNlZXMiIGFuZAoicmVjaXBpZW50cyIgbWF5IGJlIGluZGl2aWR1YWxzIG9yIG9yZ2FuaXphdGlvbnMuCgogIFRvICJtb2RpZnkiIGEgd29yayBtZWFucyB0byBjb3B5IGZyb20gb3IgYWRhcHQgYWxsIG9yIHBhcnQgb2YgdGhlIHdvcmsKaW4gYSBmYXNoaW9uIHJlcXVpcmluZyBjb3B5cmlnaHQgcGVybWlzc2lvbiwgb3RoZXIgdGhhbiB0aGUgbWFraW5nIG9mIGFuCmV4YWN0IGNvcHkuICBUaGUgcmVzdWx0aW5nIHdvcmsgaXMgY2FsbGVkIGEgIm1vZGlmaWVkIHZlcnNpb24iIG9mIHRoZQplYXJsaWVyIHdvcmsgb3IgYSB3b3JrICJiYXNlZCBvbiIgdGhlIGVhcmxpZXIgd29yay4KCiAgQSAiY292ZXJlZCB3b3JrIiBtZWFucyBlaXRoZXIgdGhlIHVubW9kaWZpZWQgUHJvZ3JhbSBvciBhIHdvcmsgYmFzZWQKb24gdGhlIFByb2dyYW0uCgogIFRvICJwcm9wYWdhdGUiIGEgd29yayBtZWFucyB0byBkbyBhbnl0aGluZyB3aXRoIGl0IHRoYXQsIHdpdGhvdXQKcGVybWlzc2lvbiwgd291bGQgbWFrZSB5b3UgZGlyZWN0bHkgb3Igc2Vjb25kYXJpbHkgbGlhYmxlIGZvcgppbmZyaW5nZW1lbnQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3LCBleGNlcHQgZXhlY3V0aW5nIGl0IG9uIGEKY29tcHV0ZXIgb3IgbW9kaWZ5aW5nIGEgcHJpdmF0ZSBjb3B5LiAgUHJvcGFnYXRpb24gaW5jbHVkZXMgY29weWluZywKZGlzdHJpYnV0aW9uICh3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uKSwgbWFraW5nIGF2YWlsYWJsZSB0byB0aGUKcHVibGljLCBhbmQgaW4gc29tZSBjb3VudHJpZXMgb3RoZXIgYWN0aXZpdGllcyBhcyB3ZWxsLgoKICBUbyAiY29udmV5IiBhIHdvcmsgbWVhbnMgYW55IGtpbmQgb2YgcHJvcGFnYXRpb24gdGhhdCBlbmFibGVzIG90aGVyCnBhcnRpZXMgdG8gbWFrZSBvciByZWNlaXZlIGNvcGllcy4gIE1lcmUgaW50ZXJhY3Rpb24gd2l0aCBhIHVzZXIgdGhyb3VnaAphIGNvbXB1dGVyIG5ldHdvcmssIHdpdGggbm8gdHJhbnNmZXIgb2YgYSBjb3B5LCBpcyBub3QgY29udmV5aW5nLgoKICBBbiBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZSBkaXNwbGF5cyAiQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcyIKdG8gdGhlIGV4dGVudCB0aGF0IGl0IGluY2x1ZGVzIGEgY29udmVuaWVudCBhbmQgcHJvbWluZW50bHkgdmlzaWJsZQpmZWF0dXJlIHRoYXQgKDEpIGRpc3BsYXlzIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UsIGFuZCAoMikKdGVsbHMgdGhlIHVzZXIgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhlIHdvcmsgKGV4Y2VwdCB0byB0aGUKZXh0ZW50IHRoYXQgd2FycmFudGllcyBhcmUgcHJvdmlkZWQpLCB0aGF0IGxpY2Vuc2VlcyBtYXkgY29udmV5IHRoZQp3b3JrIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZgp0aGUgaW50ZXJmYWNlIHByZXNlbnRzIGEgbGlzdCBvZiB1c2VyIGNvbW1hbmRzIG9yIG9wdGlvbnMsIHN1Y2ggYXMgYQptZW51LCBhIHByb21pbmVudCBpdGVtIGluIHRoZSBsaXN0IG1lZXRzIHRoaXMgY3JpdGVyaW9uLgoKICAxLiBTb3VyY2UgQ29kZS4KCiAgVGhlICJzb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsKZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgIk9iamVjdCBjb2RlIiBtZWFucyBhbnkgbm9uLXNvdXJjZQpmb3JtIG9mIGEgd29yay4KCiAgQSAiU3RhbmRhcmQgSW50ZXJmYWNlIiBtZWFucyBhbiBpbnRlcmZhY2UgdGhhdCBlaXRoZXIgaXMgYW4gb2ZmaWNpYWwKc3RhbmRhcmQgZGVmaW5lZCBieSBhIHJlY29nbml6ZWQgc3RhbmRhcmRzIGJvZHksIG9yLCBpbiB0aGUgY2FzZSBvZgppbnRlcmZhY2VzIHNwZWNpZmllZCBmb3IgYSBwYXJ0aWN1bGFyIHByb2dyYW1taW5nIGxhbmd1YWdlLCBvbmUgdGhhdAppcyB3aWRlbHkgdXNlZCBhbW9uZyBkZXZlbG9wZXJzIHdvcmtpbmcgaW4gdGhhdCBsYW5ndWFnZS4KCiAgVGhlICJTeXN0ZW0gTGlicmFyaWVzIiBvZiBhbiBleGVjdXRhYmxlIHdvcmsgaW5jbHVkZSBhbnl0aGluZywgb3RoZXIKdGhhbiB0aGUgd29yayBhcyBhIHdob2xlLCB0aGF0IChhKSBpcyBpbmNsdWRlZCBpbiB0aGUgbm9ybWFsIGZvcm0gb2YKcGFja2FnaW5nIGEgTWFqb3IgQ29tcG9uZW50LCBidXQgd2hpY2ggaXMgbm90IHBhcnQgb2YgdGhhdCBNYWpvcgpDb21wb25lbnQsIGFuZCAoYikgc2VydmVzIG9ubHkgdG8gZW5hYmxlIHVzZSBvZiB0aGUgd29yayB3aXRoIHRoYXQKTWFqb3IgQ29tcG9uZW50LCBvciB0byBpbXBsZW1lbnQgYSBTdGFuZGFyZCBJbnRlcmZhY2UgZm9yIHdoaWNoIGFuCmltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluIHNvdXJjZSBjb2RlIGZvcm0uICBBCiJNYWpvciBDb21wb25lbnQiLCBpbiB0aGlzIGNvbnRleHQsIG1lYW5zIGEgbWFqb3IgZXNzZW50aWFsIGNvbXBvbmVudAooa2VybmVsLCB3aW5kb3cgc3lzdGVtLCBhbmQgc28gb24pIG9mIHRoZSBzcGVjaWZpYyBvcGVyYXRpbmcgc3lzdGVtCihpZiBhbnkpIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHdvcmsgcnVucywgb3IgYSBjb21waWxlciB1c2VkIHRvCnByb2R1Y2UgdGhlIHdvcmssIG9yIGFuIG9iamVjdCBjb2RlIGludGVycHJldGVyIHVzZWQgdG8gcnVuIGl0LgoKICBUaGUgIkNvcnJlc3BvbmRpbmcgU291cmNlIiBmb3IgYSB3b3JrIGluIG9iamVjdCBjb2RlIGZvcm0gbWVhbnMgYWxsCnRoZSBzb3VyY2UgY29kZSBuZWVkZWQgdG8gZ2VuZXJhdGUsIGluc3RhbGwsIGFuZCAoZm9yIGFuIGV4ZWN1dGFibGUKd29yaykgcnVuIHRoZSBvYmplY3QgY29kZSBhbmQgdG8gbW9kaWZ5IHRoZSB3b3JrLCBpbmNsdWRpbmcgc2NyaXB0cyB0bwpjb250cm9sIHRob3NlIGFjdGl2aXRpZXMuICBIb3dldmVyLCBpdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSB3b3JrJ3MKU3lzdGVtIExpYnJhcmllcywgb3IgZ2VuZXJhbC1wdXJwb3NlIHRvb2xzIG9yIGdlbmVyYWxseSBhdmFpbGFibGUgZnJlZQpwcm9ncmFtcyB3aGljaCBhcmUgdXNlZCB1bm1vZGlmaWVkIGluIHBlcmZvcm1pbmcgdGhvc2UgYWN0aXZpdGllcyBidXQKd2hpY2ggYXJlIG5vdCBwYXJ0IG9mIHRoZSB3b3JrLiAgRm9yIGV4YW1wbGUsIENvcnJlc3BvbmRpbmcgU291cmNlCmluY2x1ZGVzIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBzb3VyY2UgZmlsZXMgZm9yCnRoZSB3b3JrLCBhbmQgdGhlIHNvdXJjZSBjb2RlIGZvciBzaGFyZWQgbGlicmFyaWVzIGFuZCBkeW5hbWljYWxseQpsaW5rZWQgc3VicHJvZ3JhbXMgdGhhdCB0aGUgd29yayBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gcmVxdWlyZSwKc3VjaCBhcyBieSBpbnRpbWF0ZSBkYXRhIGNvbW11bmljYXRpb24gb3IgY29udHJvbCBmbG93IGJldHdlZW4gdGhvc2UKc3VicHJvZ3JhbXMgYW5kIG90aGVyIHBhcnRzIG9mIHRoZSB3b3JrLgoKICBUaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IHVzZXJzCmNhbiByZWdlbmVyYXRlIGF1dG9tYXRpY2FsbHkgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgQ29ycmVzcG9uZGluZwpTb3VyY2UuCgogIFRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYSB3b3JrIGluIHNvdXJjZSBjb2RlIGZvcm0gaXMgdGhhdApzYW1lIHdvcmsuCgogIDIuIEJhc2ljIFBlcm1pc3Npb25zLgoKICBBbGwgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFyZSBncmFudGVkIGZvciB0aGUgdGVybSBvZgpjb3B5cmlnaHQgb24gdGhlIFByb2dyYW0sIGFuZCBhcmUgaXJyZXZvY2FibGUgcHJvdmlkZWQgdGhlIHN0YXRlZApjb25kaXRpb25zIGFyZSBtZXQuICBUaGlzIExpY2Vuc2UgZXhwbGljaXRseSBhZmZpcm1zIHlvdXIgdW5saW1pdGVkCnBlcm1pc3Npb24gdG8gcnVuIHRoZSB1bm1vZGlmaWVkIFByb2dyYW0uICBUaGUgb3V0cHV0IGZyb20gcnVubmluZyBhCmNvdmVyZWQgd29yayBpcyBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSBvbmx5IGlmIHRoZSBvdXRwdXQsIGdpdmVuIGl0cwpjb250ZW50LCBjb25zdGl0dXRlcyBhIGNvdmVyZWQgd29yay4gIFRoaXMgTGljZW5zZSBhY2tub3dsZWRnZXMgeW91cgpyaWdodHMgb2YgZmFpciB1c2Ugb3Igb3RoZXIgZXF1aXZhbGVudCwgYXMgcHJvdmlkZWQgYnkgY29weXJpZ2h0IGxhdy4KCiAgWW91IG1heSBtYWtlLCBydW4gYW5kIHByb3BhZ2F0ZSBjb3ZlcmVkIHdvcmtzIHRoYXQgeW91IGRvIG5vdApjb252ZXksIHdpdGhvdXQgY29uZGl0aW9ucyBzbyBsb25nIGFzIHlvdXIgbGljZW5zZSBvdGhlcndpc2UgcmVtYWlucwppbiBmb3JjZS4gIFlvdSBtYXkgY29udmV5IGNvdmVyZWQgd29ya3MgdG8gb3RoZXJzIGZvciB0aGUgc29sZSBwdXJwb3NlCm9mIGhhdmluZyB0aGVtIG1ha2UgbW9kaWZpY2F0aW9ucyBleGNsdXNpdmVseSBmb3IgeW91LCBvciBwcm92aWRlIHlvdQp3aXRoIGZhY2lsaXRpZXMgZm9yIHJ1bm5pbmcgdGhvc2Ugd29ya3MsIHByb3ZpZGVkIHRoYXQgeW91IGNvbXBseSB3aXRoCnRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW4gY29udmV5aW5nIGFsbCBtYXRlcmlhbCBmb3Igd2hpY2ggeW91IGRvCm5vdCBjb250cm9sIGNvcHlyaWdodC4gIFRob3NlIHRodXMgbWFraW5nIG9yIHJ1bm5pbmcgdGhlIGNvdmVyZWQgd29ya3MKZm9yIHlvdSBtdXN0IGRvIHNvIGV4Y2x1c2l2ZWx5IG9uIHlvdXIgYmVoYWxmLCB1bmRlciB5b3VyIGRpcmVjdGlvbgphbmQgY29udHJvbCwgb24gdGVybXMgdGhhdCBwcm9oaWJpdCB0aGVtIGZyb20gbWFraW5nIGFueSBjb3BpZXMgb2YKeW91ciBjb3B5cmlnaHRlZCBtYXRlcmlhbCBvdXRzaWRlIHRoZWlyIHJlbGF0aW9uc2hpcCB3aXRoIHlvdS4KCiAgQ29udmV5aW5nIHVuZGVyIGFueSBvdGhlciBjaXJjdW1zdGFuY2VzIGlzIHBlcm1pdHRlZCBzb2xlbHkgdW5kZXIKdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGJlbG93LiAgU3VibGljZW5zaW5nIGlzIG5vdCBhbGxvd2VkOyBzZWN0aW9uIDEwCm1ha2VzIGl0IHVubmVjZXNzYXJ5LgoKICAzLiBQcm90ZWN0aW5nIFVzZXJzJyBMZWdhbCBSaWdodHMgRnJvbSBBbnRpLUNpcmN1bXZlbnRpb24gTGF3LgoKICBObyBjb3ZlcmVkIHdvcmsgc2hhbGwgYmUgZGVlbWVkIHBhcnQgb2YgYW4gZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwKbWVhc3VyZSB1bmRlciBhbnkgYXBwbGljYWJsZSBsYXcgZnVsZmlsbGluZyBvYmxpZ2F0aW9ucyB1bmRlciBhcnRpY2xlCjExIG9mIHRoZSBXSVBPIGNvcHlyaWdodCB0cmVhdHkgYWRvcHRlZCBvbiAyMCBEZWNlbWJlciAxOTk2LCBvcgpzaW1pbGFyIGxhd3MgcHJvaGliaXRpbmcgb3IgcmVzdHJpY3RpbmcgY2lyY3VtdmVudGlvbiBvZiBzdWNoCm1lYXN1cmVzLgoKICBXaGVuIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIHlvdSB3YWl2ZSBhbnkgbGVnYWwgcG93ZXIgdG8gZm9yYmlkCmNpcmN1bXZlbnRpb24gb2YgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0byB0aGUgZXh0ZW50IHN1Y2ggY2lyY3VtdmVudGlvbgppcyBlZmZlY3RlZCBieSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvCnRoZSBjb3ZlcmVkIHdvcmssIGFuZCB5b3UgZGlzY2xhaW0gYW55IGludGVudGlvbiB0byBsaW1pdCBvcGVyYXRpb24gb3IKbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGFzIGEgbWVhbnMgb2YgZW5mb3JjaW5nLCBhZ2FpbnN0IHRoZSB3b3JrJ3MKdXNlcnMsIHlvdXIgb3IgdGhpcmQgcGFydGllcycgbGVnYWwgcmlnaHRzIHRvIGZvcmJpZCBjaXJjdW12ZW50aW9uIG9mCnRlY2hub2xvZ2ljYWwgbWVhc3VyZXMuCgogIDQuIENvbnZleWluZyBWZXJiYXRpbSBDb3BpZXMuCgogIFlvdSBtYXkgY29udmV5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzIHNvdXJjZSBjb2RlIGFzIHlvdQpyZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZAphcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2U7CmtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHN0YXRpbmcgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFueQpub24tcGVybWlzc2l2ZSB0ZXJtcyBhZGRlZCBpbiBhY2NvcmQgd2l0aCBzZWN0aW9uIDcgYXBwbHkgdG8gdGhlIGNvZGU7CmtlZXAgaW50YWN0IGFsbCBub3RpY2VzIG9mIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGdpdmUgYWxsCnJlY2lwaWVudHMgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgoKICBZb3UgbWF5IGNoYXJnZSBhbnkgcHJpY2Ugb3Igbm8gcHJpY2UgZm9yIGVhY2ggY29weSB0aGF0IHlvdSBjb252ZXksCmFuZCB5b3UgbWF5IG9mZmVyIHN1cHBvcnQgb3Igd2FycmFudHkgcHJvdGVjdGlvbiBmb3IgYSBmZWUuCgogIDUuIENvbnZleWluZyBNb2RpZmllZCBTb3VyY2UgVmVyc2lvbnMuCgogIFlvdSBtYXkgY29udmV5IGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgb3IgdGhlIG1vZGlmaWNhdGlvbnMgdG8KcHJvZHVjZSBpdCBmcm9tIHRoZSBQcm9ncmFtLCBpbiB0aGUgZm9ybSBvZiBzb3VyY2UgY29kZSB1bmRlciB0aGUKdGVybXMgb2Ygc2VjdGlvbiA0LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CgogICAgYSkgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IG1vZGlmaWVkCiAgICBpdCwgYW5kIGdpdmluZyBhIHJlbGV2YW50IGRhdGUuCgogICAgYikgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgaXQgaXMKICAgIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IGNvbmRpdGlvbnMgYWRkZWQgdW5kZXIgc2VjdGlvbgogICAgNy4gIFRoaXMgcmVxdWlyZW1lbnQgbW9kaWZpZXMgdGhlIHJlcXVpcmVtZW50IGluIHNlY3Rpb24gNCB0bwogICAgImtlZXAgaW50YWN0IGFsbCBub3RpY2VzIi4KCiAgICBjKSBZb3UgbXVzdCBsaWNlbnNlIHRoZSBlbnRpcmUgd29yaywgYXMgYSB3aG9sZSwgdW5kZXIgdGhpcwogICAgTGljZW5zZSB0byBhbnlvbmUgd2hvIGNvbWVzIGludG8gcG9zc2Vzc2lvbiBvZiBhIGNvcHkuICBUaGlzCiAgICBMaWNlbnNlIHdpbGwgdGhlcmVmb3JlIGFwcGx5LCBhbG9uZyB3aXRoIGFueSBhcHBsaWNhYmxlIHNlY3Rpb24gNwogICAgYWRkaXRpb25hbCB0ZXJtcywgdG8gdGhlIHdob2xlIG9mIHRoZSB3b3JrLCBhbmQgYWxsIGl0cyBwYXJ0cywKICAgIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZXkgYXJlIHBhY2thZ2VkLiAgVGhpcyBMaWNlbnNlIGdpdmVzIG5vCiAgICBwZXJtaXNzaW9uIHRvIGxpY2Vuc2UgdGhlIHdvcmsgaW4gYW55IG90aGVyIHdheSwgYnV0IGl0IGRvZXMgbm90CiAgICBpbnZhbGlkYXRlIHN1Y2ggcGVybWlzc2lvbiBpZiB5b3UgaGF2ZSBzZXBhcmF0ZWx5IHJlY2VpdmVkIGl0LgoKICAgIGQpIElmIHRoZSB3b3JrIGhhcyBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZXMsIGVhY2ggbXVzdCBkaXNwbGF5CiAgICBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzOyBob3dldmVyLCBpZiB0aGUgUHJvZ3JhbSBoYXMgaW50ZXJhY3RpdmUKICAgIGludGVyZmFjZXMgdGhhdCBkbyBub3QgZGlzcGxheSBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzLCB5b3VyCiAgICB3b3JrIG5lZWQgbm90IG1ha2UgdGhlbSBkbyBzby4KCiAgQSBjb21waWxhdGlvbiBvZiBhIGNvdmVyZWQgd29yayB3aXRoIG90aGVyIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudAp3b3Jrcywgd2hpY2ggYXJlIG5vdCBieSB0aGVpciBuYXR1cmUgZXh0ZW5zaW9ucyBvZiB0aGUgY292ZXJlZCB3b3JrLAphbmQgd2hpY2ggYXJlIG5vdCBjb21iaW5lZCB3aXRoIGl0IHN1Y2ggYXMgdG8gZm9ybSBhIGxhcmdlciBwcm9ncmFtLAppbiBvciBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSwgaXMgY2FsbGVkIGFuCiJhZ2dyZWdhdGUiIGlmIHRoZSBjb21waWxhdGlvbiBhbmQgaXRzIHJlc3VsdGluZyBjb3B5cmlnaHQgYXJlIG5vdAp1c2VkIHRvIGxpbWl0IHRoZSBhY2Nlc3Mgb3IgbGVnYWwgcmlnaHRzIG9mIHRoZSBjb21waWxhdGlvbidzIHVzZXJzCmJleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4gIEluY2x1c2lvbiBvZiBhIGNvdmVyZWQgd29yawppbiBhbiBhZ2dyZWdhdGUgZG9lcyBub3QgY2F1c2UgdGhpcyBMaWNlbnNlIHRvIGFwcGx5IHRvIHRoZSBvdGhlcgpwYXJ0cyBvZiB0aGUgYWdncmVnYXRlLgoKICA2LiBDb252ZXlpbmcgTm9uLVNvdXJjZSBGb3Jtcy4KCiAgWW91IG1heSBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMKb2Ygc2VjdGlvbnMgNCBhbmQgNSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBjb252ZXkgdGhlCm1hY2hpbmUtcmVhZGFibGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwKaW4gb25lIG9mIHRoZXNlIHdheXM6CgogICAgYSkgQ29udmV5IHRoZSBvYmplY3QgY29kZSBpbiwgb3IgZW1ib2RpZWQgaW4sIGEgcGh5c2ljYWwgcHJvZHVjdAogICAgKGluY2x1ZGluZyBhIHBoeXNpY2FsIGRpc3RyaWJ1dGlvbiBtZWRpdW0pLCBhY2NvbXBhbmllZCBieSB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGZpeGVkIG9uIGEgZHVyYWJsZSBwaHlzaWNhbCBtZWRpdW0KICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgoKICAgIGIpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKICAgIChpbmNsdWRpbmcgYSBwaHlzaWNhbCBkaXN0cmlidXRpb24gbWVkaXVtKSwgYWNjb21wYW5pZWQgYnkgYQogICAgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzIGFuZCB2YWxpZCBmb3IgYXMKICAgIGxvbmcgYXMgeW91IG9mZmVyIHNwYXJlIHBhcnRzIG9yIGN1c3RvbWVyIHN1cHBvcnQgZm9yIHRoYXQgcHJvZHVjdAogICAgbW9kZWwsIHRvIGdpdmUgYW55b25lIHdobyBwb3NzZXNzZXMgdGhlIG9iamVjdCBjb2RlIGVpdGhlciAoMSkgYQogICAgY29weSBvZiB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGFsbCB0aGUgc29mdHdhcmUgaW4gdGhlCiAgICBwcm9kdWN0IHRoYXQgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIG9uIGEgZHVyYWJsZSBwaHlzaWNhbAogICAgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLCBmb3IgYSBwcmljZSBubwogICAgbW9yZSB0aGFuIHlvdXIgcmVhc29uYWJsZSBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyB0aGlzCiAgICBjb252ZXlpbmcgb2Ygc291cmNlLCBvciAoMikgYWNjZXNzIHRvIGNvcHkgdGhlCiAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBmcm9tIGEgbmV0d29yayBzZXJ2ZXIgYXQgbm8gY2hhcmdlLgoKICAgIGMpIENvbnZleSBpbmRpdmlkdWFsIGNvcGllcyBvZiB0aGUgb2JqZWN0IGNvZGUgd2l0aCBhIGNvcHkgb2YgdGhlCiAgICB3cml0dGVuIG9mZmVyIHRvIHByb3ZpZGUgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhpcwogICAgYWx0ZXJuYXRpdmUgaXMgYWxsb3dlZCBvbmx5IG9jY2FzaW9uYWxseSBhbmQgbm9uY29tbWVyY2lhbGx5LCBhbmQKICAgIG9ubHkgaWYgeW91IHJlY2VpdmVkIHRoZSBvYmplY3QgY29kZSB3aXRoIHN1Y2ggYW4gb2ZmZXIsIGluIGFjY29yZAogICAgd2l0aCBzdWJzZWN0aW9uIDZiLgoKICAgIGQpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIGZyb20gYSBkZXNpZ25hdGVkCiAgICBwbGFjZSAoZ3JhdGlzIG9yIGZvciBhIGNoYXJnZSksIGFuZCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGluIHRoZSBzYW1lIHdheSB0aHJvdWdoIHRoZSBzYW1lIHBsYWNlIGF0IG5vCiAgICBmdXJ0aGVyIGNoYXJnZS4gIFlvdSBuZWVkIG5vdCByZXF1aXJlIHJlY2lwaWVudHMgdG8gY29weSB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLiAgSWYgdGhlIHBsYWNlIHRvCiAgICBjb3B5IHRoZSBvYmplY3QgY29kZSBpcyBhIG5ldHdvcmsgc2VydmVyLCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UKICAgIG1heSBiZSBvbiBhIGRpZmZlcmVudCBzZXJ2ZXIgKG9wZXJhdGVkIGJ5IHlvdSBvciBhIHRoaXJkIHBhcnR5KQogICAgdGhhdCBzdXBwb3J0cyBlcXVpdmFsZW50IGNvcHlpbmcgZmFjaWxpdGllcywgcHJvdmlkZWQgeW91IG1haW50YWluCiAgICBjbGVhciBkaXJlY3Rpb25zIG5leHQgdG8gdGhlIG9iamVjdCBjb2RlIHNheWluZyB3aGVyZSB0byBmaW5kIHRoZQogICAgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBSZWdhcmRsZXNzIG9mIHdoYXQgc2VydmVyIGhvc3RzIHRoZQogICAgQ29ycmVzcG9uZGluZyBTb3VyY2UsIHlvdSByZW1haW4gb2JsaWdhdGVkIHRvIGVuc3VyZSB0aGF0IGl0IGlzCiAgICBhdmFpbGFibGUgZm9yIGFzIGxvbmcgYXMgbmVlZGVkIHRvIHNhdGlzZnkgdGhlc2UgcmVxdWlyZW1lbnRzLgoKICAgIGUpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgdXNpbmcgcGVlci10by1wZWVyIHRyYW5zbWlzc2lvbiwgcHJvdmlkZWQKICAgIHlvdSBpbmZvcm0gb3RoZXIgcGVlcnMgd2hlcmUgdGhlIG9iamVjdCBjb2RlIGFuZCBDb3JyZXNwb25kaW5nCiAgICBTb3VyY2Ugb2YgdGhlIHdvcmsgYXJlIGJlaW5nIG9mZmVyZWQgdG8gdGhlIGdlbmVyYWwgcHVibGljIGF0IG5vCiAgICBjaGFyZ2UgdW5kZXIgc3Vic2VjdGlvbiA2ZC4KCiAgQSBzZXBhcmFibGUgcG9ydGlvbiBvZiB0aGUgb2JqZWN0IGNvZGUsIHdob3NlIHNvdXJjZSBjb2RlIGlzIGV4Y2x1ZGVkCmZyb20gdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGFzIGEgU3lzdGVtIExpYnJhcnksIG5lZWQgbm90IGJlCmluY2x1ZGVkIGluIGNvbnZleWluZyB0aGUgb2JqZWN0IGNvZGUgd29yay4KCiAgQSAiVXNlciBQcm9kdWN0IiBpcyBlaXRoZXIgKDEpIGEgImNvbnN1bWVyIHByb2R1Y3QiLCB3aGljaCBtZWFucyBhbnkKdGFuZ2libGUgcGVyc29uYWwgcHJvcGVydHkgd2hpY2ggaXMgbm9ybWFsbHkgdXNlZCBmb3IgcGVyc29uYWwsIGZhbWlseSwKb3IgaG91c2Vob2xkIHB1cnBvc2VzLCBvciAoMikgYW55dGhpbmcgZGVzaWduZWQgb3Igc29sZCBmb3IgaW5jb3Jwb3JhdGlvbgppbnRvIGEgZHdlbGxpbmcuICBJbiBkZXRlcm1pbmluZyB3aGV0aGVyIGEgcHJvZHVjdCBpcyBhIGNvbnN1bWVyIHByb2R1Y3QsCmRvdWJ0ZnVsIGNhc2VzIHNoYWxsIGJlIHJlc29sdmVkIGluIGZhdm9yIG9mIGNvdmVyYWdlLiAgRm9yIGEgcGFydGljdWxhcgpwcm9kdWN0IHJlY2VpdmVkIGJ5IGEgcGFydGljdWxhciB1c2VyLCAibm9ybWFsbHkgdXNlZCIgcmVmZXJzIHRvIGEKdHlwaWNhbCBvciBjb21tb24gdXNlIG9mIHRoYXQgY2xhc3Mgb2YgcHJvZHVjdCwgcmVnYXJkbGVzcyBvZiB0aGUgc3RhdHVzCm9mIHRoZSBwYXJ0aWN1bGFyIHVzZXIgb3Igb2YgdGhlIHdheSBpbiB3aGljaCB0aGUgcGFydGljdWxhciB1c2VyCmFjdHVhbGx5IHVzZXMsIG9yIGV4cGVjdHMgb3IgaXMgZXhwZWN0ZWQgdG8gdXNlLCB0aGUgcHJvZHVjdC4gIEEgcHJvZHVjdAppcyBhIGNvbnN1bWVyIHByb2R1Y3QgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBwcm9kdWN0IGhhcyBzdWJzdGFudGlhbApjb21tZXJjaWFsLCBpbmR1c3RyaWFsIG9yIG5vbi1jb25zdW1lciB1c2VzLCB1bmxlc3Mgc3VjaCB1c2VzIHJlcHJlc2VudAp0aGUgb25seSBzaWduaWZpY2FudCBtb2RlIG9mIHVzZSBvZiB0aGUgcHJvZHVjdC4KCiAgIkluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiIgZm9yIGEgVXNlciBQcm9kdWN0IG1lYW5zIGFueSBtZXRob2RzLApwcm9jZWR1cmVzLCBhdXRob3JpemF0aW9uIGtleXMsIG9yIG90aGVyIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIGluc3RhbGwKYW5kIGV4ZWN1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgYSBjb3ZlcmVkIHdvcmsgaW4gdGhhdCBVc2VyIFByb2R1Y3QgZnJvbQphIG1vZGlmaWVkIHZlcnNpb24gb2YgaXRzIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhlIGluZm9ybWF0aW9uIG11c3QKc3VmZmljZSB0byBlbnN1cmUgdGhhdCB0aGUgY29udGludWVkIGZ1bmN0aW9uaW5nIG9mIHRoZSBtb2RpZmllZCBvYmplY3QKY29kZSBpcyBpbiBubyBjYXNlIHByZXZlbnRlZCBvciBpbnRlcmZlcmVkIHdpdGggc29sZWx5IGJlY2F1c2UKbW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUuCgogIElmIHlvdSBjb252ZXkgYW4gb2JqZWN0IGNvZGUgd29yayB1bmRlciB0aGlzIHNlY3Rpb24gaW4sIG9yIHdpdGgsIG9yCnNwZWNpZmljYWxseSBmb3IgdXNlIGluLCBhIFVzZXIgUHJvZHVjdCwgYW5kIHRoZSBjb252ZXlpbmcgb2NjdXJzIGFzCnBhcnQgb2YgYSB0cmFuc2FjdGlvbiBpbiB3aGljaCB0aGUgcmlnaHQgb2YgcG9zc2Vzc2lvbiBhbmQgdXNlIG9mIHRoZQpVc2VyIFByb2R1Y3QgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIHJlY2lwaWVudCBpbiBwZXJwZXR1aXR5IG9yIGZvciBhCmZpeGVkIHRlcm0gKHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSB0cmFuc2FjdGlvbiBpcyBjaGFyYWN0ZXJpemVkKSwgdGhlCkNvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkIHVuZGVyIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGFjY29tcGFuaWVkCmJ5IHRoZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24uICBCdXQgdGhpcyByZXF1aXJlbWVudCBkb2VzIG5vdCBhcHBseQppZiBuZWl0aGVyIHlvdSBub3IgYW55IHRoaXJkIHBhcnR5IHJldGFpbnMgdGhlIGFiaWxpdHkgdG8gaW5zdGFsbAptb2RpZmllZCBvYmplY3QgY29kZSBvbiB0aGUgVXNlciBQcm9kdWN0IChmb3IgZXhhbXBsZSwgdGhlIHdvcmsgaGFzCmJlZW4gaW5zdGFsbGVkIGluIFJPTSkuCgogIFRoZSByZXF1aXJlbWVudCB0byBwcm92aWRlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBkb2VzIG5vdCBpbmNsdWRlIGEKcmVxdWlyZW1lbnQgdG8gY29udGludWUgdG8gcHJvdmlkZSBzdXBwb3J0IHNlcnZpY2UsIHdhcnJhbnR5LCBvciB1cGRhdGVzCmZvciBhIHdvcmsgdGhhdCBoYXMgYmVlbiBtb2RpZmllZCBvciBpbnN0YWxsZWQgYnkgdGhlIHJlY2lwaWVudCwgb3IgZm9yCnRoZSBVc2VyIFByb2R1Y3QgaW4gd2hpY2ggaXQgaGFzIGJlZW4gbW9kaWZpZWQgb3IgaW5zdGFsbGVkLiAgQWNjZXNzIHRvIGEKbmV0d29yayBtYXkgYmUgZGVuaWVkIHdoZW4gdGhlIG1vZGlmaWNhdGlvbiBpdHNlbGYgbWF0ZXJpYWxseSBhbmQKYWR2ZXJzZWx5IGFmZmVjdHMgdGhlIG9wZXJhdGlvbiBvZiB0aGUgbmV0d29yayBvciB2aW9sYXRlcyB0aGUgcnVsZXMgYW5kCnByb3RvY29scyBmb3IgY29tbXVuaWNhdGlvbiBhY3Jvc3MgdGhlIG5ldHdvcmsuCgogIENvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkLCBhbmQgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIHByb3ZpZGVkLAppbiBhY2NvcmQgd2l0aCB0aGlzIHNlY3Rpb24gbXVzdCBiZSBpbiBhIGZvcm1hdCB0aGF0IGlzIHB1YmxpY2x5CmRvY3VtZW50ZWQgKGFuZCB3aXRoIGFuIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluCnNvdXJjZSBjb2RlIGZvcm0pLCBhbmQgbXVzdCByZXF1aXJlIG5vIHNwZWNpYWwgcGFzc3dvcmQgb3Iga2V5IGZvcgp1bnBhY2tpbmcsIHJlYWRpbmcgb3IgY29weWluZy4KCiAgNy4gQWRkaXRpb25hbCBUZXJtcy4KCiAgIkFkZGl0aW9uYWwgcGVybWlzc2lvbnMiIGFyZSB0ZXJtcyB0aGF0IHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMKTGljZW5zZSBieSBtYWtpbmcgZXhjZXB0aW9ucyBmcm9tIG9uZSBvciBtb3JlIG9mIGl0cyBjb25kaXRpb25zLgpBZGRpdGlvbmFsIHBlcm1pc3Npb25zIHRoYXQgYXJlIGFwcGxpY2FibGUgdG8gdGhlIGVudGlyZSBQcm9ncmFtIHNoYWxsCmJlIHRyZWF0ZWQgYXMgdGhvdWdoIHRoZXkgd2VyZSBpbmNsdWRlZCBpbiB0aGlzIExpY2Vuc2UsIHRvIHRoZSBleHRlbnQKdGhhdCB0aGV5IGFyZSB2YWxpZCB1bmRlciBhcHBsaWNhYmxlIGxhdy4gIElmIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMKYXBwbHkgb25seSB0byBwYXJ0IG9mIHRoZSBQcm9ncmFtLCB0aGF0IHBhcnQgbWF5IGJlIHVzZWQgc2VwYXJhdGVseQp1bmRlciB0aG9zZSBwZXJtaXNzaW9ucywgYnV0IHRoZSBlbnRpcmUgUHJvZ3JhbSByZW1haW5zIGdvdmVybmVkIGJ5CnRoaXMgTGljZW5zZSB3aXRob3V0IHJlZ2FyZCB0byB0aGUgYWRkaXRpb25hbCBwZXJtaXNzaW9ucy4KCiAgV2hlbiB5b3UgY29udmV5IGEgY29weSBvZiBhIGNvdmVyZWQgd29yaywgeW91IG1heSBhdCB5b3VyIG9wdGlvbgpyZW1vdmUgYW55IGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgZnJvbSB0aGF0IGNvcHksIG9yIGZyb20gYW55IHBhcnQgb2YKaXQuICAoQWRkaXRpb25hbCBwZXJtaXNzaW9ucyBtYXkgYmUgd3JpdHRlbiB0byByZXF1aXJlIHRoZWlyIG93bgpyZW1vdmFsIGluIGNlcnRhaW4gY2FzZXMgd2hlbiB5b3UgbW9kaWZ5IHRoZSB3b3JrLikgIFlvdSBtYXkgcGxhY2UKYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBvbiBtYXRlcmlhbCwgYWRkZWQgYnkgeW91IHRvIGEgY292ZXJlZCB3b3JrLApmb3Igd2hpY2ggeW91IGhhdmUgb3IgY2FuIGdpdmUgYXBwcm9wcmlhdGUgY29weXJpZ2h0IHBlcm1pc3Npb24uCgogIE5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgZm9yIG1hdGVyaWFsIHlvdQphZGQgdG8gYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgKGlmIGF1dGhvcml6ZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mCnRoYXQgbWF0ZXJpYWwpIHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRlcm1zOgoKICAgIGEpIERpc2NsYWltaW5nIHdhcnJhbnR5IG9yIGxpbWl0aW5nIGxpYWJpbGl0eSBkaWZmZXJlbnRseSBmcm9tIHRoZQogICAgdGVybXMgb2Ygc2VjdGlvbnMgMTUgYW5kIDE2IG9mIHRoaXMgTGljZW5zZTsgb3IKCiAgICBiKSBSZXF1aXJpbmcgcHJlc2VydmF0aW9uIG9mIHNwZWNpZmllZCByZWFzb25hYmxlIGxlZ2FsIG5vdGljZXMgb3IKICAgIGF1dGhvciBhdHRyaWJ1dGlvbnMgaW4gdGhhdCBtYXRlcmlhbCBvciBpbiB0aGUgQXBwcm9wcmlhdGUgTGVnYWwKICAgIE5vdGljZXMgZGlzcGxheWVkIGJ5IHdvcmtzIGNvbnRhaW5pbmcgaXQ7IG9yCgogICAgYykgUHJvaGliaXRpbmcgbWlzcmVwcmVzZW50YXRpb24gb2YgdGhlIG9yaWdpbiBvZiB0aGF0IG1hdGVyaWFsLCBvcgogICAgcmVxdWlyaW5nIHRoYXQgbW9kaWZpZWQgdmVyc2lvbnMgb2Ygc3VjaCBtYXRlcmlhbCBiZSBtYXJrZWQgaW4KICAgIHJlYXNvbmFibGUgd2F5cyBhcyBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgdmVyc2lvbjsgb3IKCiAgICBkKSBMaW1pdGluZyB0aGUgdXNlIGZvciBwdWJsaWNpdHkgcHVycG9zZXMgb2YgbmFtZXMgb2YgbGljZW5zb3JzIG9yCiAgICBhdXRob3JzIG9mIHRoZSBtYXRlcmlhbDsgb3IKCiAgICBlKSBEZWNsaW5pbmcgdG8gZ3JhbnQgcmlnaHRzIHVuZGVyIHRyYWRlbWFyayBsYXcgZm9yIHVzZSBvZiBzb21lCiAgICB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgb3Igc2VydmljZSBtYXJrczsgb3IKCiAgICBmKSBSZXF1aXJpbmcgaW5kZW1uaWZpY2F0aW9uIG9mIGxpY2Vuc29ycyBhbmQgYXV0aG9ycyBvZiB0aGF0CiAgICBtYXRlcmlhbCBieSBhbnlvbmUgd2hvIGNvbnZleXMgdGhlIG1hdGVyaWFsIChvciBtb2RpZmllZCB2ZXJzaW9ucyBvZgogICAgaXQpIHdpdGggY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgb2YgbGlhYmlsaXR5IHRvIHRoZSByZWNpcGllbnQsIGZvcgogICAgYW55IGxpYWJpbGl0eSB0aGF0IHRoZXNlIGNvbnRyYWN0dWFsIGFzc3VtcHRpb25zIGRpcmVjdGx5IGltcG9zZSBvbgogICAgdGhvc2UgbGljZW5zb3JzIGFuZCBhdXRob3JzLgoKICBBbGwgb3RoZXIgbm9uLXBlcm1pc3NpdmUgYWRkaXRpb25hbCB0ZXJtcyBhcmUgY29uc2lkZXJlZCAiZnVydGhlcgpyZXN0cmljdGlvbnMiIHdpdGhpbiB0aGUgbWVhbmluZyBvZiBzZWN0aW9uIDEwLiAgSWYgdGhlIFByb2dyYW0gYXMgeW91CnJlY2VpdmVkIGl0LCBvciBhbnkgcGFydCBvZiBpdCwgY29udGFpbnMgYSBub3RpY2Ugc3RhdGluZyB0aGF0IGl0IGlzCmdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIGEgdGVybSB0aGF0IGlzIGEgZnVydGhlcgpyZXN0cmljdGlvbiwgeW91IG1heSByZW1vdmUgdGhhdCB0ZXJtLiAgSWYgYSBsaWNlbnNlIGRvY3VtZW50IGNvbnRhaW5zCmEgZnVydGhlciByZXN0cmljdGlvbiBidXQgcGVybWl0cyByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcgdW5kZXIgdGhpcwpMaWNlbnNlLCB5b3UgbWF5IGFkZCB0byBhIGNvdmVyZWQgd29yayBtYXRlcmlhbCBnb3Zlcm5lZCBieSB0aGUgdGVybXMKb2YgdGhhdCBsaWNlbnNlIGRvY3VtZW50LCBwcm92aWRlZCB0aGF0IHRoZSBmdXJ0aGVyIHJlc3RyaWN0aW9uIGRvZXMKbm90IHN1cnZpdmUgc3VjaCByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcuCgogIElmIHlvdSBhZGQgdGVybXMgdG8gYSBjb3ZlcmVkIHdvcmsgaW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uLCB5b3UKbXVzdCBwbGFjZSwgaW4gdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcywgYSBzdGF0ZW1lbnQgb2YgdGhlCmFkZGl0aW9uYWwgdGVybXMgdGhhdCBhcHBseSB0byB0aG9zZSBmaWxlcywgb3IgYSBub3RpY2UgaW5kaWNhdGluZwp3aGVyZSB0byBmaW5kIHRoZSBhcHBsaWNhYmxlIHRlcm1zLgoKICBBZGRpdGlvbmFsIHRlcm1zLCBwZXJtaXNzaXZlIG9yIG5vbi1wZXJtaXNzaXZlLCBtYXkgYmUgc3RhdGVkIGluIHRoZQpmb3JtIG9mIGEgc2VwYXJhdGVseSB3cml0dGVuIGxpY2Vuc2UsIG9yIHN0YXRlZCBhcyBleGNlcHRpb25zOwp0aGUgYWJvdmUgcmVxdWlyZW1lbnRzIGFwcGx5IGVpdGhlciB3YXkuCgogIDguIFRlcm1pbmF0aW9uLgoKICBZb3UgbWF5IG5vdCBwcm9wYWdhdGUgb3IgbW9kaWZ5IGEgY292ZXJlZCB3b3JrIGV4Y2VwdCBhcyBleHByZXNzbHkKcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIHByb3BhZ2F0ZSBvcgptb2RpZnkgaXQgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIKdGhpcyBMaWNlbnNlIChpbmNsdWRpbmcgYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoZSB0aGlyZApwYXJhZ3JhcGggb2Ygc2VjdGlvbiAxMSkuCgogIEhvd2V2ZXIsIGlmIHlvdSBjZWFzZSBhbGwgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgdGhlbiB5b3VyCmxpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcyByZWluc3RhdGVkIChhKQpwcm92aXNpb25hbGx5LCB1bmxlc3MgYW5kIHVudGlsIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGV4cGxpY2l0bHkgYW5kCmZpbmFsbHkgdGVybWluYXRlcyB5b3VyIGxpY2Vuc2UsIGFuZCAoYikgcGVybWFuZW50bHksIGlmIHRoZSBjb3B5cmlnaHQKaG9sZGVyIGZhaWxzIHRvIG5vdGlmeSB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMKcHJpb3IgdG8gNjAgZGF5cyBhZnRlciB0aGUgY2Vzc2F0aW9uLgoKICBNb3Jlb3ZlciwgeW91ciBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMKcmVpbnN0YXRlZCBwZXJtYW5lbnRseSBpZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3RpZmllcyB5b3Ugb2YgdGhlCnZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMsIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgeW91IGhhdmUKcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgKGZvciBhbnkgd29yaykgZnJvbSB0aGF0CmNvcHlyaWdodCBob2xkZXIsIGFuZCB5b3UgY3VyZSB0aGUgdmlvbGF0aW9uIHByaW9yIHRvIDMwIGRheXMgYWZ0ZXIKeW91ciByZWNlaXB0IG9mIHRoZSBub3RpY2UuCgogIFRlcm1pbmF0aW9uIG9mIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgc2VjdGlvbiBkb2VzIG5vdCB0ZXJtaW5hdGUgdGhlCmxpY2Vuc2VzIG9mIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9yIHJpZ2h0cyBmcm9tIHlvdSB1bmRlcgp0aGlzIExpY2Vuc2UuICBJZiB5b3VyIHJpZ2h0cyBoYXZlIGJlZW4gdGVybWluYXRlZCBhbmQgbm90IHBlcm1hbmVudGx5CnJlaW5zdGF0ZWQsIHlvdSBkbyBub3QgcXVhbGlmeSB0byByZWNlaXZlIG5ldyBsaWNlbnNlcyBmb3IgdGhlIHNhbWUKbWF0ZXJpYWwgdW5kZXIgc2VjdGlvbiAxMC4KCiAgOS4gQWNjZXB0YW5jZSBOb3QgUmVxdWlyZWQgZm9yIEhhdmluZyBDb3BpZXMuCgogIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gcmVjZWl2ZSBvcgpydW4gYSBjb3B5IG9mIHRoZSBQcm9ncmFtLiAgQW5jaWxsYXJ5IHByb3BhZ2F0aW9uIG9mIGEgY292ZXJlZCB3b3JrCm9jY3VycmluZyBzb2xlbHkgYXMgYSBjb25zZXF1ZW5jZSBvZiB1c2luZyBwZWVyLXRvLXBlZXIgdHJhbnNtaXNzaW9uCnRvIHJlY2VpdmUgYSBjb3B5IGxpa2V3aXNlIGRvZXMgbm90IHJlcXVpcmUgYWNjZXB0YW5jZS4gIEhvd2V2ZXIsCm5vdGhpbmcgb3RoZXIgdGhhbiB0aGlzIExpY2Vuc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIHByb3BhZ2F0ZSBvcgptb2RpZnkgYW55IGNvdmVyZWQgd29yay4gIFRoZXNlIGFjdGlvbnMgaW5mcmluZ2UgY29weXJpZ2h0IGlmIHlvdSBkbwpub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIHByb3BhZ2F0aW5nIGEKY292ZXJlZCB3b3JrLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzby4KCiAgMTAuIEF1dG9tYXRpYyBMaWNlbnNpbmcgb2YgRG93bnN0cmVhbSBSZWNpcGllbnRzLgoKICBFYWNoIHRpbWUgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5CnJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvcnMsIHRvIHJ1biwgbW9kaWZ5IGFuZApwcm9wYWdhdGUgdGhhdCB3b3JrLCBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlCmZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHdpdGggdGhpcyBMaWNlbnNlLgoKICBBbiAiZW50aXR5IHRyYW5zYWN0aW9uIiBpcyBhIHRyYW5zYWN0aW9uIHRyYW5zZmVycmluZyBjb250cm9sIG9mIGFuCm9yZ2FuaXphdGlvbiwgb3Igc3Vic3RhbnRpYWxseSBhbGwgYXNzZXRzIG9mIG9uZSwgb3Igc3ViZGl2aWRpbmcgYW4Kb3JnYW5pemF0aW9uLCBvciBtZXJnaW5nIG9yZ2FuaXphdGlvbnMuICBJZiBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQKd29yayByZXN1bHRzIGZyb20gYW4gZW50aXR5IHRyYW5zYWN0aW9uLCBlYWNoIHBhcnR5IHRvIHRoYXQKdHJhbnNhY3Rpb24gd2hvIHJlY2VpdmVzIGEgY29weSBvZiB0aGUgd29yayBhbHNvIHJlY2VpdmVzIHdoYXRldmVyCmxpY2Vuc2VzIHRvIHRoZSB3b3JrIHRoZSBwYXJ0eSdzIHByZWRlY2Vzc29yIGluIGludGVyZXN0IGhhZCBvciBjb3VsZApnaXZlIHVuZGVyIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGgsIHBsdXMgYSByaWdodCB0byBwb3NzZXNzaW9uIG9mIHRoZQpDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBmcm9tIHRoZSBwcmVkZWNlc3NvciBpbiBpbnRlcmVzdCwgaWYKdGhlIHByZWRlY2Vzc29yIGhhcyBpdCBvciBjYW4gZ2V0IGl0IHdpdGggcmVhc29uYWJsZSBlZmZvcnRzLgoKICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSBleGVyY2lzZSBvZiB0aGUKcmlnaHRzIGdyYW50ZWQgb3IgYWZmaXJtZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgRm9yIGV4YW1wbGUsIHlvdSBtYXkKbm90IGltcG9zZSBhIGxpY2Vuc2UgZmVlLCByb3lhbHR5LCBvciBvdGhlciBjaGFyZ2UgZm9yIGV4ZXJjaXNlIG9mCnJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHlvdSBtYXkgbm90IGluaXRpYXRlIGxpdGlnYXRpb24KKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQKYW55IHBhdGVudCBjbGFpbSBpcyBpbmZyaW5nZWQgYnkgbWFraW5nLCB1c2luZywgc2VsbGluZywgb2ZmZXJpbmcgZm9yCnNhbGUsIG9yIGltcG9ydGluZyB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbiBvZiBpdC4KCiAgMTEuIFBhdGVudHMuCgogIEEgImNvbnRyaWJ1dG9yIiBpcyBhIGNvcHlyaWdodCBob2xkZXIgd2hvIGF1dGhvcml6ZXMgdXNlIHVuZGVyIHRoaXMKTGljZW5zZSBvZiB0aGUgUHJvZ3JhbSBvciBhIHdvcmsgb24gd2hpY2ggdGhlIFByb2dyYW0gaXMgYmFzZWQuICBUaGUKd29yayB0aHVzIGxpY2Vuc2VkIGlzIGNhbGxlZCB0aGUgY29udHJpYnV0b3IncyAiY29udHJpYnV0b3IgdmVyc2lvbiIuCgogIEEgY29udHJpYnV0b3IncyAiZXNzZW50aWFsIHBhdGVudCBjbGFpbXMiIGFyZSBhbGwgcGF0ZW50IGNsYWltcwpvd25lZCBvciBjb250cm9sbGVkIGJ5IHRoZSBjb250cmlidXRvciwgd2hldGhlciBhbHJlYWR5IGFjcXVpcmVkIG9yCmhlcmVhZnRlciBhY3F1aXJlZCwgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgYnkgc29tZSBtYW5uZXIsIHBlcm1pdHRlZApieSB0aGlzIExpY2Vuc2UsIG9mIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24sCmJ1dCBkbyBub3QgaW5jbHVkZSBjbGFpbXMgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgb25seSBhcyBhCmNvbnNlcXVlbmNlIG9mIGZ1cnRoZXIgbW9kaWZpY2F0aW9uIG9mIHRoZSBjb250cmlidXRvciB2ZXJzaW9uLiAgRm9yCnB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIGluY2x1ZGVzIHRoZSByaWdodCB0byBncmFudApwYXRlbnQgc3VibGljZW5zZXMgaW4gYSBtYW5uZXIgY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YKdGhpcyBMaWNlbnNlLgoKICBFYWNoIGNvbnRyaWJ1dG9yIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZQpwYXRlbnQgbGljZW5zZSB1bmRlciB0aGUgY29udHJpYnV0b3IncyBlc3NlbnRpYWwgcGF0ZW50IGNsYWltcywgdG8KbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0IGFuZCBvdGhlcndpc2UgcnVuLCBtb2RpZnkgYW5kCnByb3BhZ2F0ZSB0aGUgY29udGVudHMgb2YgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24uCgogIEluIHRoZSBmb2xsb3dpbmcgdGhyZWUgcGFyYWdyYXBocywgYSAicGF0ZW50IGxpY2Vuc2UiIGlzIGFueSBleHByZXNzCmFncmVlbWVudCBvciBjb21taXRtZW50LCBob3dldmVyIGRlbm9taW5hdGVkLCBub3QgdG8gZW5mb3JjZSBhIHBhdGVudAooc3VjaCBhcyBhbiBleHByZXNzIHBlcm1pc3Npb24gdG8gcHJhY3RpY2UgYSBwYXRlbnQgb3IgY292ZW5hbnQgbm90IHRvCnN1ZSBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCkuICBUbyAiZ3JhbnQiIHN1Y2ggYSBwYXRlbnQgbGljZW5zZSB0byBhCnBhcnR5IG1lYW5zIHRvIG1ha2Ugc3VjaCBhbiBhZ3JlZW1lbnQgb3IgY29tbWl0bWVudCBub3QgdG8gZW5mb3JjZSBhCnBhdGVudCBhZ2FpbnN0IHRoZSBwYXJ0eS4KCiAgSWYgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywga25vd2luZ2x5IHJlbHlpbmcgb24gYSBwYXRlbnQgbGljZW5zZSwKYW5kIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBpcyBub3QgYXZhaWxhYmxlIGZvciBhbnlvbmUKdG8gY29weSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHRocm91Z2ggYQpwdWJsaWNseSBhdmFpbGFibGUgbmV0d29yayBzZXJ2ZXIgb3Igb3RoZXIgcmVhZGlseSBhY2Nlc3NpYmxlIG1lYW5zLAp0aGVuIHlvdSBtdXN0IGVpdGhlciAoMSkgY2F1c2UgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIHRvIGJlIHNvCmF2YWlsYWJsZSwgb3IgKDIpIGFycmFuZ2UgdG8gZGVwcml2ZSB5b3Vyc2VsZiBvZiB0aGUgYmVuZWZpdCBvZiB0aGUKcGF0ZW50IGxpY2Vuc2UgZm9yIHRoaXMgcGFydGljdWxhciB3b3JrLCBvciAoMykgYXJyYW5nZSwgaW4gYSBtYW5uZXIKY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlLCB0byBleHRlbmQgdGhlIHBhdGVudApsaWNlbnNlIHRvIGRvd25zdHJlYW0gcmVjaXBpZW50cy4gICJLbm93aW5nbHkgcmVseWluZyIgbWVhbnMgeW91IGhhdmUKYWN0dWFsIGtub3dsZWRnZSB0aGF0LCBidXQgZm9yIHRoZSBwYXRlbnQgbGljZW5zZSwgeW91ciBjb252ZXlpbmcgdGhlCmNvdmVyZWQgd29yayBpbiBhIGNvdW50cnksIG9yIHlvdXIgcmVjaXBpZW50J3MgdXNlIG9mIHRoZSBjb3ZlcmVkIHdvcmsKaW4gYSBjb3VudHJ5LCB3b3VsZCBpbmZyaW5nZSBvbmUgb3IgbW9yZSBpZGVudGlmaWFibGUgcGF0ZW50cyBpbiB0aGF0CmNvdW50cnkgdGhhdCB5b3UgaGF2ZSByZWFzb24gdG8gYmVsaWV2ZSBhcmUgdmFsaWQuCgogIElmLCBwdXJzdWFudCB0byBvciBpbiBjb25uZWN0aW9uIHdpdGggYSBzaW5nbGUgdHJhbnNhY3Rpb24gb3IKYXJyYW5nZW1lbnQsIHlvdSBjb252ZXksIG9yIHByb3BhZ2F0ZSBieSBwcm9jdXJpbmcgY29udmV5YW5jZSBvZiwgYQpjb3ZlcmVkIHdvcmssIGFuZCBncmFudCBhIHBhdGVudCBsaWNlbnNlIHRvIHNvbWUgb2YgdGhlIHBhcnRpZXMKcmVjZWl2aW5nIHRoZSBjb3ZlcmVkIHdvcmsgYXV0aG9yaXppbmcgdGhlbSB0byB1c2UsIHByb3BhZ2F0ZSwgbW9kaWZ5Cm9yIGNvbnZleSBhIHNwZWNpZmljIGNvcHkgb2YgdGhlIGNvdmVyZWQgd29yaywgdGhlbiB0aGUgcGF0ZW50IGxpY2Vuc2UKeW91IGdyYW50IGlzIGF1dG9tYXRpY2FsbHkgZXh0ZW5kZWQgdG8gYWxsIHJlY2lwaWVudHMgb2YgdGhlIGNvdmVyZWQKd29yayBhbmQgd29ya3MgYmFzZWQgb24gaXQuCgogIEEgcGF0ZW50IGxpY2Vuc2UgaXMgImRpc2NyaW1pbmF0b3J5IiBpZiBpdCBkb2VzIG5vdCBpbmNsdWRlIHdpdGhpbgp0aGUgc2NvcGUgb2YgaXRzIGNvdmVyYWdlLCBwcm9oaWJpdHMgdGhlIGV4ZXJjaXNlIG9mLCBvciBpcwpjb25kaXRpb25lZCBvbiB0aGUgbm9uLWV4ZXJjaXNlIG9mIG9uZSBvciBtb3JlIG9mIHRoZSByaWdodHMgdGhhdCBhcmUKc3BlY2lmaWNhbGx5IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgWW91IG1heSBub3QgY29udmV5IGEgY292ZXJlZAp3b3JrIGlmIHlvdSBhcmUgYSBwYXJ0eSB0byBhbiBhcnJhbmdlbWVudCB3aXRoIGEgdGhpcmQgcGFydHkgdGhhdCBpcwppbiB0aGUgYnVzaW5lc3Mgb2YgZGlzdHJpYnV0aW5nIHNvZnR3YXJlLCB1bmRlciB3aGljaCB5b3UgbWFrZSBwYXltZW50CnRvIHRoZSB0aGlyZCBwYXJ0eSBiYXNlZCBvbiB0aGUgZXh0ZW50IG9mIHlvdXIgYWN0aXZpdHkgb2YgY29udmV5aW5nCnRoZSB3b3JrLCBhbmQgdW5kZXIgd2hpY2ggdGhlIHRoaXJkIHBhcnR5IGdyYW50cywgdG8gYW55IG9mIHRoZQpwYXJ0aWVzIHdobyB3b3VsZCByZWNlaXZlIHRoZSBjb3ZlcmVkIHdvcmsgZnJvbSB5b3UsIGEgZGlzY3JpbWluYXRvcnkKcGF0ZW50IGxpY2Vuc2UgKGEpIGluIGNvbm5lY3Rpb24gd2l0aCBjb3BpZXMgb2YgdGhlIGNvdmVyZWQgd29yawpjb252ZXllZCBieSB5b3UgKG9yIGNvcGllcyBtYWRlIGZyb20gdGhvc2UgY29waWVzKSwgb3IgKGIpIHByaW1hcmlseQpmb3IgYW5kIGluIGNvbm5lY3Rpb24gd2l0aCBzcGVjaWZpYyBwcm9kdWN0cyBvciBjb21waWxhdGlvbnMgdGhhdApjb250YWluIHRoZSBjb3ZlcmVkIHdvcmssIHVubGVzcyB5b3UgZW50ZXJlZCBpbnRvIHRoYXQgYXJyYW5nZW1lbnQsCm9yIHRoYXQgcGF0ZW50IGxpY2Vuc2Ugd2FzIGdyYW50ZWQsIHByaW9yIHRvIDI4IE1hcmNoIDIwMDcuCgogIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGNvbnN0cnVlZCBhcyBleGNsdWRpbmcgb3IgbGltaXRpbmcKYW55IGltcGxpZWQgbGljZW5zZSBvciBvdGhlciBkZWZlbnNlcyB0byBpbmZyaW5nZW1lbnQgdGhhdCBtYXkKb3RoZXJ3aXNlIGJlIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYXBwbGljYWJsZSBwYXRlbnQgbGF3LgoKICAxMi4gTm8gU3VycmVuZGVyIG9mIE90aGVycycgRnJlZWRvbS4KCiAgSWYgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgpvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CmV4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90IGNvbnZleSBhCmNvdmVyZWQgd29yayBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcwpMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91IG1heQpub3QgY29udmV5IGl0IGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiB5b3UgYWdyZWUgdG8gdGVybXMgdGhhdCBvYmxpZ2F0ZSB5b3UKdG8gY29sbGVjdCBhIHJveWFsdHkgZm9yIGZ1cnRoZXIgY29udmV5aW5nIGZyb20gdGhvc2UgdG8gd2hvbSB5b3UgY29udmV5CnRoZSBQcm9ncmFtLCB0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCB0aG9zZSB0ZXJtcyBhbmQgdGhpcwpMaWNlbnNlIHdvdWxkIGJlIHRvIHJlZnJhaW4gZW50aXJlbHkgZnJvbSBjb252ZXlpbmcgdGhlIFByb2dyYW0uCgogIDEzLiBVc2Ugd2l0aCB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgoKICBOb3R3aXRoc3RhbmRpbmcgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIHlvdSBoYXZlCnBlcm1pc3Npb24gdG8gbGluayBvciBjb21iaW5lIGFueSBjb3ZlcmVkIHdvcmsgd2l0aCBhIHdvcmsgbGljZW5zZWQKdW5kZXIgdmVyc2lvbiAzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW50byBhIHNpbmdsZQpjb21iaW5lZCB3b3JrLCBhbmQgdG8gY29udmV5IHRoZSByZXN1bHRpbmcgd29yay4gIFRoZSB0ZXJtcyBvZiB0aGlzCkxpY2Vuc2Ugd2lsbCBjb250aW51ZSB0byBhcHBseSB0byB0aGUgcGFydCB3aGljaCBpcyB0aGUgY292ZXJlZCB3b3JrLApidXQgdGhlIHNwZWNpYWwgcmVxdWlyZW1lbnRzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCnNlY3Rpb24gMTMsIGNvbmNlcm5pbmcgaW50ZXJhY3Rpb24gdGhyb3VnaCBhIG5ldHdvcmsgd2lsbCBhcHBseSB0byB0aGUKY29tYmluYXRpb24gYXMgc3VjaC4KCiAgMTQuIFJldmlzZWQgVmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlLgoKICBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZgp0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCmJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bwphZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KCiAgRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUKUHJvZ3JhbSBzcGVjaWZpZXMgdGhhdCBhIGNlcnRhaW4gbnVtYmVyZWQgdmVyc2lvbiBvZiB0aGUgR05VIEdlbmVyYWwKUHVibGljIExpY2Vuc2UgIm9yIGFueSBsYXRlciB2ZXJzaW9uIiBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUKb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgbnVtYmVyZWQKdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGUKR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkCmJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCgogIElmIHRoZSBQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZSB3aGljaCBmdXR1cmUKdmVyc2lvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGNhbiBiZSB1c2VkLCB0aGF0IHByb3h5J3MKcHVibGljIHN0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGEgdmVyc2lvbiBwZXJtYW5lbnRseSBhdXRob3JpemVzIHlvdQp0byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUgUHJvZ3JhbS4KCiAgTGF0ZXIgbGljZW5zZSB2ZXJzaW9ucyBtYXkgZ2l2ZSB5b3UgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQKcGVybWlzc2lvbnMuICBIb3dldmVyLCBubyBhZGRpdGlvbmFsIG9ibGlnYXRpb25zIGFyZSBpbXBvc2VkIG9uIGFueQphdXRob3Igb3IgY29weXJpZ2h0IGhvbGRlciBhcyBhIHJlc3VsdCBvZiB5b3VyIGNob29zaW5nIHRvIGZvbGxvdyBhCmxhdGVyIHZlcnNpb24uCgogIDE1LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LgoKICBUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZCkFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQKSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWQpPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgpQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTQpJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YKQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgoKICAxNi4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuCgogIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORwpXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1PRElGSUVTIEFORC9PUiBDT05WRVlTClRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWQpHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUKVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRgpEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRApQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSwKRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgpTVUNIIERBTUFHRVMuCgogIDE3LiBJbnRlcnByZXRhdGlvbiBvZiBTZWN0aW9ucyAxNSBhbmQgMTYuCgogIElmIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGFuZCBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBwcm92aWRlZAphYm92ZSBjYW5ub3QgYmUgZ2l2ZW4gbG9jYWwgbGVnYWwgZWZmZWN0IGFjY29yZGluZyB0byB0aGVpciB0ZXJtcywKcmV2aWV3aW5nIGNvdXJ0cyBzaGFsbCBhcHBseSBsb2NhbCBsYXcgdGhhdCBtb3N0IGNsb3NlbHkgYXBwcm94aW1hdGVzCmFuIGFic29sdXRlIHdhaXZlciBvZiBhbGwgY2l2aWwgbGlhYmlsaXR5IGluIGNvbm5lY3Rpb24gd2l0aCB0aGUKUHJvZ3JhbSwgdW5sZXNzIGEgd2FycmFudHkgb3IgYXNzdW1wdGlvbiBvZiBsaWFiaWxpdHkgYWNjb21wYW5pZXMgYQpjb3B5IG9mIHRoZSBQcm9ncmFtIGluIHJldHVybiBmb3IgYSBmZWUuCgogICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKCiAgICAgICAgICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcwoKICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0CnBvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCgogIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0CnRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKc3RhdGUgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAp0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KCiAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgogICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KCiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCgogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCgogIElmIHRoZSBwcm9ncmFtIGRvZXMgdGVybWluYWwgaW50ZXJhY3Rpb24sIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQKbm90aWNlIGxpa2UgdGhpcyB3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgoKICAgIDxwcm9ncmFtPiAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KICAgIFRoaXMgcHJvZ3JhbSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCiAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CiAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCgpUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHlvdXIgcHJvZ3JhbSdzIGNvbW1hbmRzCm1pZ2h0IGJlIGRpZmZlcmVudDsgZm9yIGEgR1VJIGludGVyZmFjZSwgeW91IHdvdWxkIHVzZSBhbiAiYWJvdXQgYm94Ii4KCiAgWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHNjaG9vbCwKaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmIG5lY2Vzc2FyeS4KRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcywgYW5kIGhvdyB0byBhcHBseSBhbmQgZm9sbG93IHRoZSBHTlUgR1BMLCBzZWUKPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtCmludG8gcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdQptYXkgY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGgKdGhlIGxpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsClB1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLiAgQnV0IGZpcnN0LCBwbGVhc2UgcmVhZAo8aHR0cDovL3d3dy5nbnUub3JnL3BoaWxvc29waHkvd2h5LW5vdC1sZ3BsLmh0bWw+Lgo=]]></data>
	</file>
	<file>
	  <filename>/js</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/js.cookie.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohCiAqIEphdmFTY3JpcHQgQ29va2llIHYyLjIuMQogKiBodHRwczovL2dpdGh1Yi5jb20vanMtY29va2llL2pzLWNvb2tpZQogKgogKiBDb3B5cmlnaHQgMjAwNiwgMjAxNSBLbGF1cyBIYXJ0bCAmIEZhZ25lciBCcmFjawogKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UKICovCjsoZnVuY3Rpb24gKGZhY3RvcnkpIHsKCXZhciByZWdpc3RlcmVkSW5Nb2R1bGVMb2FkZXI7CglpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7CgkJZGVmaW5lKGZhY3RvcnkpOwoJCXJlZ2lzdGVyZWRJbk1vZHVsZUxvYWRlciA9IHRydWU7Cgl9CglpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7CgkJbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7CgkJcmVnaXN0ZXJlZEluTW9kdWxlTG9hZGVyID0gdHJ1ZTsKCX0KCWlmICghcmVnaXN0ZXJlZEluTW9kdWxlTG9hZGVyKSB7CgkJdmFyIE9sZENvb2tpZXMgPSB3aW5kb3cuQ29va2llczsKCQl2YXIgYXBpID0gd2luZG93LkNvb2tpZXMgPSBmYWN0b3J5KCk7CgkJYXBpLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7CgkJCXdpbmRvdy5Db29raWVzID0gT2xkQ29va2llczsKCQkJcmV0dXJuIGFwaTsKCQl9OwoJfQp9KGZ1bmN0aW9uICgpIHsKCWZ1bmN0aW9uIGV4dGVuZCAoKSB7CgkJdmFyIGkgPSAwOwoJCXZhciByZXN1bHQgPSB7fTsKCQlmb3IgKDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgewoJCQl2YXIgYXR0cmlidXRlcyA9IGFyZ3VtZW50c1sgaSBdOwoJCQlmb3IgKHZhciBrZXkgaW4gYXR0cmlidXRlcykgewoJCQkJcmVzdWx0W2tleV0gPSBhdHRyaWJ1dGVzW2tleV07CgkJCX0KCQl9CgkJcmV0dXJuIHJlc3VsdDsKCX0KCglmdW5jdGlvbiBkZWNvZGUgKHMpIHsKCQlyZXR1cm4gcy5yZXBsYWNlKC8oJVswLTlBLVpdezJ9KSsvZywgZGVjb2RlVVJJQ29tcG9uZW50KTsKCX0KCglmdW5jdGlvbiBpbml0IChjb252ZXJ0ZXIpIHsKCQlmdW5jdGlvbiBhcGkoKSB7fQoKCQlmdW5jdGlvbiBzZXQgKGtleSwgdmFsdWUsIGF0dHJpYnV0ZXMpIHsKCQkJaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHsKCQkJCXJldHVybjsKCQkJfQoKCQkJYXR0cmlidXRlcyA9IGV4dGVuZCh7CgkJCQlwYXRoOiAnLycKCQkJfSwgYXBpLmRlZmF1bHRzLCBhdHRyaWJ1dGVzKTsKCgkJCWlmICh0eXBlb2YgYXR0cmlidXRlcy5leHBpcmVzID09PSAnbnVtYmVyJykgewoJCQkJYXR0cmlidXRlcy5leHBpcmVzID0gbmV3IERhdGUobmV3IERhdGUoKSAqIDEgKyBhdHRyaWJ1dGVzLmV4cGlyZXMgKiA4NjRlKzUpOwoJCQl9CgoJCQkvLyBXZSdyZSB1c2luZyAiZXhwaXJlcyIgYmVjYXVzZSAibWF4LWFnZSIgaXMgbm90IHN1cHBvcnRlZCBieSBJRQoJCQlhdHRyaWJ1dGVzLmV4cGlyZXMgPSBhdHRyaWJ1dGVzLmV4cGlyZXMgPyBhdHRyaWJ1dGVzLmV4cGlyZXMudG9VVENTdHJpbmcoKSA6ICcnOwoKCQkJdHJ5IHsKCQkJCXZhciByZXN1bHQgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7CgkJCQlpZiAoL15bXHtcW10vLnRlc3QocmVzdWx0KSkgewoJCQkJCXZhbHVlID0gcmVzdWx0OwoJCQkJfQoJCQl9IGNhdGNoIChlKSB7fQoKCQkJdmFsdWUgPSBjb252ZXJ0ZXIud3JpdGUgPwoJCQkJY29udmVydGVyLndyaXRlKHZhbHVlLCBrZXkpIDoKCQkJCWVuY29kZVVSSUNvbXBvbmVudChTdHJpbmcodmFsdWUpKQoJCQkJCS5yZXBsYWNlKC8lKDIzfDI0fDI2fDJCfDNBfDNDfDNFfDNEfDJGfDNGfDQwfDVCfDVEfDVFfDYwfDdCfDdEfDdDKS9nLCBkZWNvZGVVUklDb21wb25lbnQpOwoKCQkJa2V5ID0gZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyhrZXkpKQoJCQkJLnJlcGxhY2UoLyUoMjN8MjR8MjZ8MkJ8NUV8NjB8N0MpL2csIGRlY29kZVVSSUNvbXBvbmVudCkKCQkJCS5yZXBsYWNlKC9bXChcKV0vZywgZXNjYXBlKTsKCgkJCXZhciBzdHJpbmdpZmllZEF0dHJpYnV0ZXMgPSAnJzsKCQkJZm9yICh2YXIgYXR0cmlidXRlTmFtZSBpbiBhdHRyaWJ1dGVzKSB7CgkJCQlpZiAoIWF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0pIHsKCQkJCQljb250aW51ZTsKCQkJCX0KCQkJCXN0cmluZ2lmaWVkQXR0cmlidXRlcyArPSAnOyAnICsgYXR0cmlidXRlTmFtZTsKCQkJCWlmIChhdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdID09PSB0cnVlKSB7CgkJCQkJY29udGludWU7CgkJCQl9CgoJCQkJLy8gQ29uc2lkZXJzIFJGQyA2MjY1IHNlY3Rpb24gNS4yOgoJCQkJLy8gLi4uCgkJCQkvLyAzLiAgSWYgdGhlIHJlbWFpbmluZyB1bnBhcnNlZC1hdHRyaWJ1dGVzIGNvbnRhaW5zIGEgJXgzQiAoIjsiKQoJCQkJLy8gICAgIGNoYXJhY3RlcjoKCQkJCS8vIENvbnN1bWUgdGhlIGNoYXJhY3RlcnMgb2YgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMgdXAgdG8sCgkJCQkvLyBub3QgaW5jbHVkaW5nLCB0aGUgZmlyc3QgJXgzQiAoIjsiKSBjaGFyYWN0ZXIuCgkJCQkvLyAuLi4KCQkJCXN0cmluZ2lmaWVkQXR0cmlidXRlcyArPSAnPScgKyBhdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdLnNwbGl0KCc7JylbMF07CgkJCX0KCgkJCXJldHVybiAoZG9jdW1lbnQuY29va2llID0ga2V5ICsgJz0nICsgdmFsdWUgKyBzdHJpbmdpZmllZEF0dHJpYnV0ZXMpOwoJCX0KCgkJZnVuY3Rpb24gZ2V0IChrZXksIGpzb24pIHsKCQkJaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHsKCQkJCXJldHVybjsKCQkJfQoKCQkJdmFyIGphciA9IHt9OwoJCQkvLyBUbyBwcmV2ZW50IHRoZSBmb3IgbG9vcCBpbiB0aGUgZmlyc3QgcGxhY2UgYXNzaWduIGFuIGVtcHR5IGFycmF5CgkJCS8vIGluIGNhc2UgdGhlcmUgYXJlIG5vIGNvb2tpZXMgYXQgYWxsLgoJCQl2YXIgY29va2llcyA9IGRvY3VtZW50LmNvb2tpZSA/IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOyAnKSA6IFtdOwoJCQl2YXIgaSA9IDA7CgoJCQlmb3IgKDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBpKyspIHsKCQkJCXZhciBwYXJ0cyA9IGNvb2tpZXNbaV0uc3BsaXQoJz0nKTsKCQkJCXZhciBjb29raWUgPSBwYXJ0cy5zbGljZSgxKS5qb2luKCc9Jyk7CgoJCQkJaWYgKCFqc29uICYmIGNvb2tpZS5jaGFyQXQoMCkgPT09ICciJykgewoJCQkJCWNvb2tpZSA9IGNvb2tpZS5zbGljZSgxLCAtMSk7CgkJCQl9CgoJCQkJdHJ5IHsKCQkJCQl2YXIgbmFtZSA9IGRlY29kZShwYXJ0c1swXSk7CgkJCQkJY29va2llID0gKGNvbnZlcnRlci5yZWFkIHx8IGNvbnZlcnRlcikoY29va2llLCBuYW1lKSB8fAoJCQkJCQlkZWNvZGUoY29va2llKTsKCgkJCQkJaWYgKGpzb24pIHsKCQkJCQkJdHJ5IHsKCQkJCQkJCWNvb2tpZSA9IEpTT04ucGFyc2UoY29va2llKTsKCQkJCQkJfSBjYXRjaCAoZSkge30KCQkJCQl9CgoJCQkJCWphcltuYW1lXSA9IGNvb2tpZTsKCgkJCQkJaWYgKGtleSA9PT0gbmFtZSkgewoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQl9IGNhdGNoIChlKSB7fQoJCQl9CgoJCQlyZXR1cm4ga2V5ID8gamFyW2tleV0gOiBqYXI7CgkJfQoKCQlhcGkuc2V0ID0gc2V0OwoJCWFwaS5nZXQgPSBmdW5jdGlvbiAoa2V5KSB7CgkJCXJldHVybiBnZXQoa2V5LCBmYWxzZSAvKiByZWFkIGFzIHJhdyAqLyk7CgkJfTsKCQlhcGkuZ2V0SlNPTiA9IGZ1bmN0aW9uIChrZXkpIHsKCQkJcmV0dXJuIGdldChrZXksIHRydWUgLyogcmVhZCBhcyBqc29uICovKTsKCQl9OwoJCWFwaS5yZW1vdmUgPSBmdW5jdGlvbiAoa2V5LCBhdHRyaWJ1dGVzKSB7CgkJCXNldChrZXksICcnLCBleHRlbmQoYXR0cmlidXRlcywgewoJCQkJZXhwaXJlczogLTEKCQkJfSkpOwoJCX07CgoJCWFwaS5kZWZhdWx0cyA9IHt9OwoKCQlhcGkud2l0aENvbnZlcnRlciA9IGluaXQ7CgoJCXJldHVybiBhcGk7Cgl9CgoJcmV0dXJuIGluaXQoZnVuY3Rpb24gKCkge30pOwp9KSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/js/js.functions.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[DQooZnVuY3Rpb24oZ2xvYmFsLCAkLCBqUXVlcnksIENvb2tpZXMsIGhlbHBfZnVuY3Rpb25zKQ0Kew0KICBsZXQgT0UgPSBnbG9iYWwuT0U7DQogIGxldCBtZXNzYWdlc190ZW1wbGF0ZSA9ICc8YXNpZGUgaWQ9ImhlbHBlcl9tZXNzYWdlIiBjbGFzcz0ibWVzc2FnZSBwYWdlbWNvbnRhaW5lciIgcm9sZT0ic3RhdHVzIj48cD57MH08L3A+PC9hc2lkZT4nOw0KICBsZXQgZXJyb3JzX3RlbXBsYXRlID0gJzxhc2lkZSBpZD0iaGVscGVyX2Vycm9yIiBjbGFzcz0ibWVzc2FnZSBwYWdlZXJyb3Jjb250YWluZXIiIHJvbGU9ImFsZXJ0Ij48cD57MH08L3A+PC9hc2lkZT4nOw0KICANCiAgalF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpDQogIHsNCiAgICB2YXIgYWN0aXZlX3RhYiA9IENvb2tpZXMuZ2V0KCdzbWFydHlfZXh0X3RhYl9hY3RpdmUnKTsNCiAgICB2YXIgYWN0aXZlX2FjY29yZGlvbl9pdGVtID0gQ29va2llcy5nZXQoJ3NtYXJ0eV9leHRfYWNjX2FjdGl2ZScpOw0KICAgIA0KICAgIC8qIGFjdGl2ZSB0YWJzIGxvZ2ljICovDQogICAgaWYodHlwZW9mIGFjdGl2ZV90YWIgPT09ICJ1bmRlZmluZWQiKQ0KICAgIHsNCiAgICAgIF9zZXRfYWN0aXZlX3RhYignZ2VuZXJhbCcpOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgX3NldF9hY3RpdmVfdGFiKGFjdGl2ZV90YWIpOw0KICAgIH0NCiAgDQogICAgJCgnI3BhZ2VfdGFicyA+IGRpdicpDQogICAgICAuZWFjaChmdW5jdGlvbigpDQogICAgICB7DQogICAgICAgICQodGhpcykuY2xpY2soZnVuY3Rpb24oKQ0KICAgICAgICB7DQogICAgICAgICAgQ29va2llcy5zZXQoJ3NtYXJ0eV9leHRfdGFiX2FjdGl2ZScsIHRoaXMuaWQpOw0KICAgICAgICB9KTsNCiAgICAgIH0pOw0KICANCiAgICAvKiAgY29weSB0byBjbGlwYm9hcmQgc3R1ZmYgKi8NCiAgICAkKCIuY2xpY2stdG8tY29weSIpLmNsaWNrKGZ1bmN0aW9uIChlKQ0KICAgIHsNCiAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgIGhlbHBfZnVuY3Rpb25zLmNvcHlUb0NsaXBib2FyZCh0aGlzKTsNCiAgICB9KTsNCiAgDQogICAgLyogdGhlIGFjY29yZGlvbiBzdHVmZiAqLw0KICAgIF9zZXRfaW5jcmVtZW50YWxfaWRzKCdhY2NvcmRpb24tbGlzdC1pdGVtJyk7DQogICAgJCgnLmFjY29yZGlvbi1saXN0ID4gLmFjY29yZGlvbi1saXN0LWl0ZW0gPiAuYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5JykuaGlkZSgpOw0KICAgICQoJy5hY2NvcmRpb24tbGlzdC1pdGVtJykNCiAgDQogICAgaWYodHlwZW9mIGFjdGl2ZV9hY2NvcmRpb25faXRlbSAhPT0gInVuZGVmaW5lZCIpDQogICAgew0KICAgICAgJCgnIycgKyBhY3RpdmVfYWNjb3JkaW9uX2l0ZW0pDQogICAgICAgIC5hZGRDbGFzcygiYWN0aXZlIikNCiAgICAgICAgLmZpbmQoIi5hY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiKQ0KICAgICAgICAuc2xpZGVEb3duKCk7DQogICAgfQ0KICAgIA0KICAgICQoJy5hbCcpLmNsaWNrKGZ1bmN0aW9uKCkNCiAgICB7DQogICAgICB2YXIgY3VycmVudF9pdGVtID0gJCh0aGlzKS5jbG9zZXN0KCIuYWNjb3JkaW9uLWxpc3QtaXRlbSIpOw0KICAgICAgDQogICAgICBpZigkKHRoaXMpLmNsb3Nlc3QoIi5hY2NvcmRpb24tbGlzdC1pdGVtIikuaGFzQ2xhc3MoImFjdGl2ZSIpKQ0KICAgICAgew0KICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoIi5hY2NvcmRpb24tbGlzdC1pdGVtIikucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpLmZpbmQoIi5hY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiKS5zbGlkZVVwKCk7DQogICAgICAgIF9zZXRfYWN0aXZlX2FjY29yZGlvbl9pdGVtKCd1bmRlZmluZWQnKTsNCiAgICAgIH0NCiAgICAgIGVsc2UNCiAgICAgIHsNCiAgICAgICAgJCgiLmFjY29yZGlvbi1saXN0ID4gLmFjY29yZGlvbi1saXN0LWl0ZW0uYWN0aXZlIC5hY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiKS5zbGlkZVVwKCk7DQogICAgICAgICQoIi5hY2NvcmRpb24tbGlzdCA+IC5hY2NvcmRpb24tbGlzdC1pdGVtLmFjdGl2ZSIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKTsNCiAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCIuYWNjb3JkaW9uLWxpc3QtaXRlbSIpLmFkZENsYXNzKCJhY3RpdmUiKS5maW5kKCIuYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Iikuc2xpZGVEb3duKCk7DQogICAgICAgIF9zZXRfYWN0aXZlX2FjY29yZGlvbl9pdGVtKCAkKGN1cnJlbnRfaXRlbSkuYXR0cignaWQnKSApOw0KICAgICAgfQ0KICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0pOw0KICAgIA0KICAgIA0KICB9KTsNCiAgDQogIGZ1bmN0aW9uIF9zZXRfaW5jcmVtZW50YWxfaWRzKGFfY2xhc3MpDQogIHsNCiAgICB2YXIgY291bnQgPSAxOw0KICAgIHZhciBzZWwgPSAnLicgKyBhX2NsYXNzOw0KICAgICQoc2VsKS5lYWNoKGZ1bmN0aW9uKCkNCiAgICB7DQogICAgICAkKHRoaXMpLmF0dHIoImlkIiwgYV9jbGFzcyArICItIiArIGNvdW50KTsNCiAgICAgIGNvdW50Kys7DQogICAgfSk7DQogIH0NCiAgDQogIGZ1bmN0aW9uIF9zZXRfYWN0aXZlX2FjY29yZGlvbl9pdGVtKGlkKQ0KICB7DQogICAgQ29va2llcy5zZXQoJ3NtYXJ0eV9leHRfYWNjX2FjdGl2ZScsIGlkKTsNCiAgfQ0KICANCiAgZnVuY3Rpb24gX3NldF9hY3RpdmVfdGFiKHRhYl9uYW1lKQ0KICB7DQogICAgJCgnI3BhZ2VfdGFicyA+IGRpdicpDQogICAgICAuZWFjaChmdW5jdGlvbigpDQogICAgICB7DQogICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpOw0KICAgICAgfSk7DQogICAgDQogICAgJCgnI3BhZ2VfY29udGVudCA+IGRpdicpDQogICAgICAuZWFjaChmdW5jdGlvbigpDQogICAgICB7DQogICAgICAgICQodGhpcykuaGlkZSgpOw0KICAgICAgfSk7DQogICAgDQogICAgJCgnIycgKyB0YWJfbmFtZSkuYWRkQ2xhc3MoJ2FjdGl2ZScpOw0KICAgICQoJyMnICsgdGFiX25hbWUgKyAnX2MnKS5zaG93KCk7DQogICAgQ29va2llcy5zZXQoJ3NtYXJ0eV9leHRfdGFiX2FjdGl2ZScsIHRhYl9uYW1lKTsNCiAgfQ0KDQogIA0KICBTdHJpbmcucHJvdG90eXBlLmVuZHNXaXRoID0gZnVuY3Rpb24gKHN1ZmZpeCkNCiAgew0KICAgIHJldHVybiAodGhpcy5zdWJzdHIodGhpcy5sZW5ndGggLSBzdWZmaXgubGVuZ3RoKSA9PT0gc3VmZml4KTsNCiAgfQ0KICANCiAgU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoID0gZnVuY3Rpb24ocHJlZml4KQ0KICB7DQogICAgcmV0dXJuICh0aGlzLnN1YnN0cigwLCBwcmVmaXgubGVuZ3RoKSA9PT0gcHJlZml4KTsNCiAgfQ0KICANCiAgLyoqDQogICAqIFVzYWdlOg0KICAgKiAnQWRkZWQgezB9IGJ5IHsxfSB0byB5b3VyIGNvbGxlY3Rpb24nLmYodGl0bGUsIGFydGlzdCkNCiAgICogJ1lvdXIgYmFsYW5jZSBpcyB7MH0gVVNEJy5mKDc3LjcpDQogICAqIEB0eXBlIHtmdW5jdGlvbigpOiBTdHJpbmd9DQogICAqLw0KICBTdHJpbmcucHJvdG90eXBlLmZvcm1hdCA9IFN0cmluZy5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24oKSB7DQogICAgdmFyIHMgPSB0aGlzLA0KICAgICAgICBpID0gYXJndW1lbnRzLmxlbmd0aDsNCiAgICANCiAgICB3aGlsZSAoaS0tKSB7DQogICAgICBzID0gcy5yZXBsYWNlKG5ldyBSZWdFeHAoJ1xceycgKyBpICsgJ1xcfScsICdnbScpLCBhcmd1bWVudHNbaV0pOw0KICAgIH0NCiAgICByZXR1cm4gczsNCiAgfTsNCiAgDQogIC8qKg0KICAgKiB0YXBzIGludG8gdGhlIGNvcmUgZnVuY3Rpb24gdG8gc2hvdyBhbiBlcnJvciB3aGVuIG5lZWRlZA0KICAgKg0KICAgKiBAcGFyYW0gbWVzc2FnZV90ZXh0DQogICAqLw0KICBoZWxwX2Z1bmN0aW9ucy5oZWxwX2Vycm9yX21lc3NhZ2UgPSAgZnVuY3Rpb24gKG1lc3NhZ2VfdGV4dCkNCiAgew0KICAgIGxldCBvdXRwdXQgPSBlcnJvcnNfdGVtcGxhdGUuZm9ybWF0KG1lc3NhZ2VfdGV4dCk7DQogICAgJCgnI2hlbHBlcl9lcnJvcicpLmRldGFjaCgpOw0KICAgICQoJyNvZV9tYWluYXJlYScpLnByZXBlbmQob3V0cHV0KTsNCiAgICAkKCcjaGVscGVyX2Vycm9yJykuaGlkZSgpOw0KICAgIE9FLnZpZXcuc2hvd05vdGlmaWNhdGlvbnMoKTsNCiAgfQ0KICANCiAgLyoqDQogICAqIHRhcHMgaW50byB0aGUgY29yZSBmdW5jdGlvbiB0byBzaG93IGEgbWVzc2FnZSB3aGVuIG5lZWRlZA0KICAgKg0KICAgKiBAcGFyYW0gbWVzc2FnZV90ZXh0DQogICAqLw0KICBoZWxwX2Z1bmN0aW9ucy5oZWxwX21lc3NhZ2UgPSAgZnVuY3Rpb24gKG1lc3NhZ2VfdGV4dCkNCiAgew0KICAgIGxldCBvdXRwdXQgPSBtZXNzYWdlc190ZW1wbGF0ZS5mb3JtYXQobWVzc2FnZV90ZXh0KTsNCiAgICAkKCcjaGVscGVyX21lc3NhZ2UnKS5kZXRhY2goKTsNCiAgICAkKCcjb2VfbWFpbmFyZWEnKS5wcmVwZW5kKG91dHB1dCk7DQogICAgJCgnI2hlbHBlcl9tZXNzYWdlJykuaGlkZSgpOw0KICAgIE9FLnZpZXcuc2hvd05vdGlmaWNhdGlvbnMoKTsNCiAgfQ0KICANCiAgaGVscF9mdW5jdGlvbnMuY29weVRvQ2xpcGJvYXJkID0gZnVuY3Rpb24oZWxlbWVudCkNCiB7DQogICB2YXIgJHRlbXAgPSAkKCI8aW5wdXQ+Iik7JCgiYm9keSIpLmFwcGVuZCgkdGVtcCk7DQogICAkdGVtcC52YWwoJChlbGVtZW50KS50ZXh0KCkpLnNlbGVjdCgpOw0KICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoImNvcHkiKTsNCiAgICR0ZW1wLnJlbW92ZSgpOw0KICAgaGVscF9mdW5jdGlvbnMuaGVscF9tZXNzYWdlKCdDb3BpZWQgdG8gQ2xpcGJvYXJkIScpOw0KIH0NCn0odGhpcywgJCwgalF1ZXJ5LCBDb29raWVzLCBoZWxwX2Z1bmN0aW9ucyA9IHdpbmRvdy5oZWxwX2Z1bmN0aW9ucyB8fCB7fSkpOw==]]></data>
	</file>
	<file>
	  <filename>/lang</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiMgQwoKIyBGCiRsYW5nWydmcmllbmRseW5hbWUnXSA9ICdTbWFydHkgRXh0ZW5zaW9ucyc7CgojIEgKCiMgTQokbGFuZ1snbW9kZGVzY3JpcHRpb24nXSA9ICdDTVNNUyBTbWFydHkgVG9vbHMnOwoKIyBQCiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ1NtYXJ0eSBFeHRlbnNpb25zIGlzIG5vdyBpbnN0YWxsZWQnOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ1NtYXJ0eSBFeHRlbnNpb25zIGhhcyBiZWVuIHJlbW92ZWQnOwoKIyBTCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/lang/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/lib</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/class.smarty_functions.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KbmFtZXNwYWNlIFNtYXJ0eUV4dDsNCg0KDQpjbGFzcyBzbWFydHlfZnVuY3Rpb25zDQp7DQogIHB1YmxpYyBjb25zdCBDX1VOU0VUID0gJ191bnNldF8nOw0KICANCiAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkNCiAgew0KICAgICRzbWFydHkgPSBcY21zbXMoKS0+R2V0U21hcnR5KCk7DQogICAgDQogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfZnVuY3Rpb24oJ21vZF9hY3Rpb25fbGluaycsIFskdGhpcywgJ21vZF9hY3Rpb25fbGluayddKTsNCiAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbignbW9kX2FjdGlvbl91cmwnLCBbJHRoaXMsICdtb2R1bGVfYWN0aW9uX3VybCddKTsNCiAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbigneHRfcmVwZWF0JywgWyR0aGlzLCAnc21hcnR5X2Z1bmN0aW9uX3JlcGVhdCddKTsNCiAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbignc2Vzc19wdXQnLCBbJHRoaXMsICdzbWFydHlfZnVuY3Rpb25fc2Vzc2lvbl9wdXQnXSk7DQogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfZnVuY3Rpb24oJ3Nlc3NfZXJhc2UnLCBbJHRoaXMsICdzbWFydHlfZnVuY3Rpb25fc2Vzc2lvbl9lcmFzZSddKTsNCiAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbigneHRfYW5jaG9yX2xpbmsnLCBbJHRoaXMsICdwbHVnaW5fYW5jaG9ybGluayddKTsNCiAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbigneHRfc2V0dmFyJywgWyR0aGlzLCAncGx1Z2luX3NldHZhciddKTsNCiAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbigneHRfdW5zZXR2YXInLCBbJHRoaXMsICdwbHVnaW5fdW5zZXR2YXInXSk7DQogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfZnVuY3Rpb24oJ3h0X2dldHZhcicsIFskdGhpcywgJ3BsdWdpbl9nZXR2YXInXSk7DQogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfZnVuY3Rpb24oJ2NvbnRlbnRfZmV0Y2gnLCBbJHRoaXMsICdzbWFydHlfZnVuY3Rpb25fY29udGVudF9mZXRjaCddKTsNCiAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbignZmlsZXNfbGlzdCcsIFskdGhpcywgJ3NtYXJ0eV9mdW5jdGlvbl9maWxlc19saXN0J10pOw0KICB9DQogIA0KICAvKioNCiAgICogQ3JlYXRlIGEgbGluayB0byBhbiBhbmNob3IgZnVydGhlciBkb3duIHRoZSBwYWdlLg0KICAgKg0KICAgKiBAcGFyYW0gJHBhcmFtcw0KICAgKiBAcGFyYW0gJHNtYXJ0eQ0KICAgKg0KICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsDQogICAqLw0KICBmdW5jdGlvbiBwbHVnaW5fYW5jaG9ybGluaygkcGFyYW1zLCAmJHNtYXJ0eSkNCiAgew0KICAgICRuYW1lICAgID0gXGdldF9wYXJhbWV0ZXJfdmFsdWUoJHBhcmFtcywgJ24nKTsNCiAgICAkbmFtZSAgICA9IFxnZXRfcGFyYW1ldGVyX3ZhbHVlKCRwYXJhbXMsICduYW1lJywgJG5hbWUpOw0KICAgICRhc3NpZ24gID0gXHRyaW0oXGdldF9wYXJhbWV0ZXJfdmFsdWUoJHBhcmFtcywgJ2Fzc2lnbicpKTsNCiAgICAkdXJsb25seSA9IFxnZXRfcGFyYW1ldGVyX3ZhbHVlKCRwYXJhbXMsICd1Jyk7DQogICAgJHVybG9ubHkgPSBcY21zX3RvX2Jvb2woXGdldF9wYXJhbWV0ZXJfdmFsdWUoJHBhcmFtcywgJ3VybG9ubHknLCAkdXJsb25seSkpOw0KICAgICR0ZXh0ICAgID0gXGdldF9wYXJhbWV0ZXJfdmFsdWUoJHBhcmFtcywgJ3RleHQnLCAkbmFtZSk7DQogICAgDQogICAgdW5zZXQoJHBhcmFtc1snbmFtZSddLCAkcGFyYW1zWyduJ10sICRwYXJhbXNbJ2Fzc2lnbiddLCAkcGFyYW1zWyd1J10sICRwYXJhbXNbJ3VybG9ubHknXSwgJHBhcmFtc1sndGV4dCddKTsNCiAgICANCiAgICAvLyBzdGFydCB0aGUgd29yaw0KICAgICR1cmwgPSBOVUxMOw0KICAgICRvdXQgPSBOVUxMOw0KICAgIA0KICAgIGlmKCRuYW1lKQ0KICAgIHsNCiAgICAgICR1cmwgPSBcc214OjphbmNob3JfdXJsKCRuYW1lKTsNCiAgICB9DQogICAgDQogICAgaWYoJHVybG9ubHkpDQogICAgew0KICAgICAgJG91dCA9ICR1cmw7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAvLyBidWlsZCBhIGxpbmsgd2l0aCBhbGwgdGhlIGxlZnRvdmVyIHBhcmFtcyAoZG9uJ3QgZmlsdGVyIHRoZW0sIHRoZXJlIGFyZSBsb3RzIG9mIHZhbGlkIHBhcmFtcyBmb3IgYSBsaW5rKS4NCiAgICAgICR0cGwgPSAnICVzPSIlcyInOw0KICAgICAgJG91dCA9ICc8YSc7DQogICAgICAkb3V0IC49IFxzcHJpbnRmKCR0cGwsICdocmVmJywgJHVybCk7DQogICAgICANCiAgICAgIGZvcmVhY2goJHBhcmFtcyBhcyAka2V5ID0+ICR2YWwpDQogICAgICB7DQogICAgICAgICRvdXQgLj0gIiAka2V5PVwiJHZhbFwiIjsNCiAgICAgIH0NCiAgICAgIA0KICAgICAgJG91dCAuPSAnPicgLiAkdGV4dCAuICc8L2E+JzsNCiAgICB9DQogICAgDQogICAgaWYoJGFzc2lnbikNCiAgICB7DQogICAgICAkc21hcnR5LT5hc3NpZ24oJGFzc2lnbiwgJG91dCk7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICByZXR1cm4gJG91dDsNCiAgICB9DQogICAgDQogICAgcmV0dXJuICcnOw0KICB9DQogIA0KICBmdW5jdGlvbiBwbHVnaW5fc2V0dmFyKCRwYXJhbXMsICYkc2FtcnR5KQ0KICB7DQogICAgZm9yZWFjaCgkcGFyYW1zIGFzICRrZXkgPT4gJHZhbCkNCiAgICB7DQogICAgICAka2V5ID0gXHRyaW0oJGtleSk7DQogICAgICBpZighJGtleSkNCiAgICAgIHsNCiAgICAgICAgY29udGludWU7DQogICAgICB9DQogICAgICANCiAgICAgIGlmKHNlbGY6OkNfVU5TRVQgPT09ICR2YWwpDQogICAgICB7DQogICAgICAgIFx4dF90bXBkYXRhOjplcmFzZSgka2V5KTsNCiAgICAgIH0NCiAgICAgIGVsc2UNCiAgICAgIHsNCiAgICAgICAgXHh0X3RtcGRhdGE6OnNldCgka2V5LCAkdmFsKTsNCiAgICAgIH0NCiAgICB9DQogIH0NCiAgDQogIGZ1bmN0aW9uIHBsdWdpbl91bnNldHZhcigkcGFyYW1zLCAmJHNtYXJ0eSkNCiAgew0KICAgIGZvcmVhY2goJHBhcmFtcyBhcyAka2V5ID0+ICR2YWwpDQogICAgew0KICAgICAgJGtleSA9IFx0cmltKCRrZXkpOw0KICAgICAgaWYoISRrZXkpDQogICAgICB7DQogICAgICAgIGNvbnRpbnVlOw0KICAgICAgfQ0KICAgICAgDQogICAgICBpZigndW5zZXQnID09PSAka2V5KQ0KICAgICAgew0KICAgICAgICBpZigkdmFsKQ0KICAgICAgICB7DQogICAgICAgICAgJGxpc3QgPSBcZXhwbG9kZSgnLCcsICR2YWwpOw0KICAgICAgICAgIA0KICAgICAgICAgIGZvcmVhY2goJGxpc3QgYXMgJG9uZSkNCiAgICAgICAgICB7DQogICAgICAgICAgICAkb25lID0gXHRyaW0oJG9uZSk7DQogICAgICAgICAgICBpZighJG9uZSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgY29udGludWU7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBceHRfdG1wZGF0YTo6ZXJhc2UoJG9uZSk7DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICB9DQogICAgICBlbHNlDQogICAgICB7DQogICAgICAgIFx4dF90bXBkYXRhOjplcmFzZSgka2V5KTsNCiAgICAgIH0NCiAgICB9DQogIH0NCiAgDQogIGZ1bmN0aW9uIHBsdWdpbl9nZXR2YXIoJHBhcmFtcywgJiRzbWFydHkpDQogIHsNCiAgICAka2V5ICA9IFx4dF9wYXJhbTo6Z2V0X3N0cmluZygkcGFyYW1zLCAndicpOw0KICAgICRrZXkgID0gXHh0X3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsICd2YXInLCAka2V5KTsNCiAgICAkZGZsdCA9ICRwYXJhbXNbJ2RmbHQnXSA/PyBOVUxMOw0KICAgIA0KICAgICR2YWwgPSBOVUxMOw0KICAgIA0KICAgIGlmKCRrZXkpDQogICAgew0KICAgICAgJHZhbCA9IFx4dF90bXBkYXRhOjpnZXQoJGtleSwgJGRmbHQpOw0KICAgIH0NCiAgICANCiAgICAkYXNzaWduID0gXHh0X3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsICdhc3NpZ24nKTsNCiAgICAkc2NvcGUgID0gXHN0cnRvbG93ZXIoXHh0X3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsICdzY29wZScsICdsb2NhbCcpKTsNCiAgICANCiAgICBpZigkYXNzaWduKQ0KICAgIHsNCiAgICAgICRzbWFydHktPmFzc2lnbigkYXNzaWduLCAkdmFsKTsNCiAgICAgIGlmKCdnbG9iYWwnID09PSAkc2NvcGUpDQogICAgICB7DQogICAgICAgICRzbWFydHktPmFzc2lnbkdsb2JhbCgkYXNzaWduLCAkdmFsKTsNCiAgICAgIH0NCiAgICB9DQogICAgDQogICAgcmV0dXJuICR2YWw7DQogIH0NCiAgDQogIC8qKg0KICAgKiBBIHNpbXBsZSBmdW5jdGlvbiB0byBnZW5lcmF0ZSBhIHVybCB0byBhIG1vZHVsZSBhY3Rpb24NCiAgICoNCiAgICogQHBhcmFtICRwYXJhbXMNCiAgICogQHBhcmFtICR0cGwNCiAgICoNCiAgICogQHJldHVybiBhcnJheXxzdHJpbmd8c3RyaW5nW10NCiAgICovDQogIGZ1bmN0aW9uIG1vZHVsZV9hY3Rpb25fdXJsKCRwYXJhbXMsICR0cGwpDQogIHsNCiAgICAkcGFyYW1zWyd1cmxvbmx5J10gPSAxOw0KICAgICRhc3NpZ24gICAgICAgICAgICA9IGlzc2V0KCRwYXJhbXNbJ2Fzc2lnbiddKSA/IFx0cmltKCRwYXJhbXNbJ2Fzc2lnbiddKSA6ICcnOw0KICAgIHVuc2V0KCRwYXJhbXNbJ2ltYWdlb25seSddLCAkcGFyYW1zWyd0ZXh0J10sICRwYXJhbXNbJ3RpdGxlJ10sICRwYXJhbXNbJ2ltYWdlJ10sICRwYXJhbXNbJ2NsYXNzJ10sICRwYXJhbXNbJ2Fzc2lnbiddKTsNCiAgICAkb3V0ID0gJHRoaXMtPm1vZF9hY3Rpb25fbGluaygkcGFyYW1zLCAkdHBsKTsNCiAgICANCiAgICBpZigkYXNzaWduKQ0KICAgIHsNCiAgICAgICR0cGwtPmFzc2lnbigkYXNzaWduLCAkb3V0KTsNCiAgICAgIA0KICAgICAgcmV0dXJuICcnOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJG91dDsNCiAgfQ0KICANCiAgLyoqDQogICAqIEEgc2ltcGxlIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGEgbGluayB0byBhIG1vZHVsZSBhY3Rpb24NCiAgICoNCiAgICogQHBhcmFtICRwYXJhbXMNCiAgICogQHBhcmFtICRzbWFydHkNCiAgICoNCiAgICogQHJldHVybiBhcnJheXxzdHJpbmd8c3RyaW5nW10NCiAgICovDQogIGZ1bmN0aW9uIG1vZF9hY3Rpb25fbGluaygkcGFyYW1zLCAkc21hcnR5KQ0KICB7DQogICAgJGdDbXMgICA9IGNtc21zKCk7DQogICAgJGlubGluZSA9IEZBTFNFOw0KICAgIA0KICAgICRtb2R1bGUgPSAkc21hcnR5LT5nZXRfdGVtcGxhdGVfdmFycygnbW9kdWxlJyk7DQogICAgDQogICAgaWYoISRtb2R1bGUpDQogICAgew0KICAgICAgJG1vZHVsZSA9ICRzbWFydHktPmdldF90ZW1wbGF0ZV92YXJzKCdhY3Rpb25tb2R1bGUnKTsNCiAgICB9DQogICAgDQogICAgJG1vZHVsZSA9IGdldF9wYXJhbWV0ZXJfdmFsdWUoJHBhcmFtcywgJ21vZHVsZScsICRtb2R1bGUpOw0KICAgIA0KICAgIGlmKCEkbW9kdWxlKQ0KICAgIHsNCiAgICAgICRtb2R1bGUgPSAkc21hcnR5LT5nZXRUZW1wbGF0ZVZhcnMoJ21vZHVsZScpOw0KICAgIH0NCiAgICBpZighJG1vZHVsZSkNCiAgICB7DQogICAgICAkbW9kdWxlID0gJHNtYXJ0eS0+Z2V0VGVtcGxhdGVWYXJzKCdhY3Rpb25tb2R1bGUnKTsNCiAgICB9DQogICAgaWYoISRtb2R1bGUpDQogICAgew0KICAgICAgJG1vZHVsZSA9ICRzbWFydHktPmdldFRlbXBsYXRlVmFycygnX21vZHVsZScpOw0KICAgIH0NCiAgICANCiAgICAkbWlkID0gJHNtYXJ0eS0+Z2V0VGVtcGxhdGVWYXJzKCdhY3Rpb25pZCcpOw0KICAgIA0KICAgIGlmKCEkbWlkKQ0KICAgIHsNCiAgICAgICRtaWQgPSAnbTFfJzsNCiAgICAgIA0KICAgICAgaWYoJGdDbXMtPmlzX2Zyb250ZW5kX3JlcXVlc3QoKSkNCiAgICAgIHsNCiAgICAgICAgJG1pZCA9ICdjbnRudDAxJzsNCiAgICAgIH0NCiAgICB9DQogICAgDQogICAgaWYoISRtb2R1bGUpDQogICAgew0KICAgICAgcmV0dXJuICcnOw0KICAgIH0NCiAgICANCiAgICB1bnNldCgkcGFyYW1zWydtb2R1bGUnXSk7DQogICAgDQogICAgJG9iaiA9IFxjbXNfdXRpbHM6OmdldF9tb2R1bGUoJG1vZHVsZSk7DQogICAgDQogICAgaWYoIVxpc19vYmplY3QoJG9iaikpDQogICAgew0KICAgICAgcmV0dXJuICcnOw0KICAgIH0NCiAgICANCiAgICAkdGV4dCA9ICRtb2R1bGU7DQogICAgaWYoaXNzZXQoJHBhcmFtc1sndGV4dCddKSkNCiAgICB7DQogICAgICAkdGV4dCA9IFx0cmltKCRwYXJhbXNbJ3RleHQnXSk7DQogICAgICB1bnNldCgkcGFyYW1zWyd0ZXh0J10pOw0KICAgIH0NCiAgICANCiAgICAkdGl0bGUgPSAnJzsNCiAgICBpZihpc3NldCgkcGFyYW1zWyd0aXRsZSddKSkNCiAgICB7DQogICAgICAkdGl0bGUgPSBcdHJpbSgkcGFyYW1zWyd0aXRsZSddKTsNCiAgICAgIHVuc2V0KCRwYXJhbXNbJ3RpdGxlJ10pOw0KICAgIH0NCiAgICANCiAgICAkY29uZm1lc3NhZ2UgPSAnJzsNCiAgICBpZihpc3NldCgkcGFyYW1zWydjb25mbWVzc2FnZSddKSkNCiAgICB7DQogICAgICAkY29uZm1lc3NhZ2UgPSBcdHJpbSgkcGFyYW1zWydjb25mbWVzc2FnZSddKTsNCiAgICAgIHVuc2V0KCRwYXJhbXNbJ2NvbmZtZXNzYWdlJ10pOw0KICAgIH0NCiAgICANCiAgICAkaW1hZ2UgPSAnJzsNCiAgICBpZihpc3NldCgkcGFyYW1zWydpbWFnZSddKSkNCiAgICB7DQogICAgICAkaW1hZ2UgPSBcdHJpbSgkcGFyYW1zWydpbWFnZSddKTsNCiAgICAgIHVuc2V0KCRwYXJhbXNbJ2ltYWdlJ10pOw0KICAgIH0NCiAgICANCiAgICAkY2xhc3MgPSAnc3lzdGVtaWNvbic7DQogICAgaWYoaXNzZXQoJHBhcmFtc1snY2xhc3MnXSkpDQogICAgew0KICAgICAgJGNsYXNzID0gXHRyaW0oJHBhcmFtc1snY2xhc3MnXSk7DQogICAgICB1bnNldCgkcGFyYW1zWydjbGFzcyddKTsNCiAgICB9DQogICAgDQogICAgJGFjdGlvbiA9ICdkZWZhdWx0JzsNCiAgICBpZihpc3NldCgkcGFyYW1zWydhY3Rpb24nXSkpDQogICAgew0KICAgICAgJGFjdGlvbiA9ICRwYXJhbXNbJ2FjdGlvbiddOw0KICAgICAgdW5zZXQoJHBhcmFtc1snYWN0aW9uJ10pOw0KICAgIH0NCiAgICANCiAgICBpZihpc3NldCgkcGFyYW1zWydpZCddKSkNCiAgICB7DQogICAgICAkbWlkICAgID0gJHBhcmFtc1snaWQnXTsNCiAgICAgICRpbmxpbmUgPSBUUlVFOw0KICAgICAgdW5zZXQoJHBhcmFtc1snaWQnXSk7DQogICAgfQ0KICAgIA0KICAgICRpbWFnZW9ubHkgPSBGQUxTRTsNCiAgICBpZihpc3NldCgkcGFyYW1zWydpbWFnZW9ubHknXSkpDQogICAgew0KICAgICAgJGltYWdlb25seSA9IFRSVUU7DQogICAgICB1bnNldCgkcGFyYW1zWydpbWFnZW9ubHknXSk7DQogICAgfQ0KICAgIA0KICAgICRwYWdlaWQgPSBcY21zX3V0aWxzOjpnZXRfY3VycmVudF9wYWdlaWQoKTsNCiAgICBpZihpc3NldCgkcGFyYW1zWydwYWdlJ10pKQ0KICAgIHsNCiAgICAgIC8vIGNvbnZlcnQgdGhlIHBhZ2UgYWxpYXMgdG8gYW4gaWQNCiAgICAgICRtYW5hZ2VyID0gJGdDbXMtPkdldEhpZXJhcmNoeU1hbmFnZXIoKTsNCiAgICAgICRub2RlICAgID0gJG1hbmFnZXItPnN1cmVHZXROb2RlQnlBbGlhcygkcGFyYW1zWydwYWdlJ10pOw0KICAgICAgaWYoaXNzZXQoJG5vZGUpKQ0KICAgICAgew0KICAgICAgICAkY29udGVudCA9ICRub2RlLT5HZXRDb250ZW50KCk7DQogICAgICAgIGlmKGlzc2V0KCRjb250ZW50KSkNCiAgICAgICAgew0KICAgICAgICAgICRwYWdlaWQgPSAkY29udGVudC0+SWQoKTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgew0KICAgICAgICAkbm9kZSA9ICRtYW5hZ2VyLT5zdXJlR2V0Tm9kZUJ5SWQoJHBhcmFtc1sncGFnZSddKTsNCiAgICAgICAgaWYoaXNzZXQoJG5vZGUpKQ0KICAgICAgICB7DQogICAgICAgICAgJHBhZ2VpZCA9ICRwYXJhbXNbJ3BhZ2UnXTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgdW5zZXQoJHBhcmFtc1sncGFnZSddKTsNCiAgICB9DQogICAgDQogICAgJHVybG9ubHkgPSAhZW1wdHkoJHBhcmFtc1sndXJsb25seSddKTsNCiAgICBpZigkdXJsb25seSkNCiAgICB7DQogICAgICAkdXJsb25seSA9IFRSVUU7DQogICAgICB1bnNldCgkcGFyYW1zWyd1cmxvbmx5J10pOw0KICAgIH0NCiAgICANCiAgICAkanNmcmllbmRseSA9ICFlbXB0eSgkcGFyYW1zWydqc2ZyaWVuZGx5J10pOw0KICAgIGlmKCRqc2ZyaWVuZGx5KQ0KICAgIHsNCiAgICAgICRqc2ZyaWVuZGx5ID0gVFJVRTsNCiAgICAgICR1cmxvbmx5ICAgID0gVFJVRTsNCiAgICAgIHVuc2V0KCRwYXJhbXNbJ2pzZnJpZW5kbHknXSk7DQogICAgfQ0KICAgIA0KICAgICRmb3JqcyA9ICFlbXB0eSgkcGFyYW1zWydmb3JqcyddKTsNCiAgICBpZigkZm9yanMpDQogICAgew0KICAgICAgJGpzZnJpZW5kbHkgPSBUUlVFOw0KICAgICAgJHVybG9ubHkgICAgPSBUUlVFOw0KICAgICAgdW5zZXQoJHBhcmFtc1snZm9yanMnXSk7DQogICAgfQ0KICAgIA0KICAgICRmb3JhamF4ID0gIWVtcHR5KCRwYXJhbXNbJ2ZvcmFqYXgnXSk7DQogICAgDQogICAgaWYoJGZvcmFqYXgpDQogICAgew0KICAgICAgJGpzZnJpZW5kbHkgPSBUUlVFOw0KICAgICAgJHVybG9ubHkgICAgPSBUUlVFOw0KICAgICAgJGZvcmFqYXggICAgPSBUUlVFOw0KICAgICAgdW5zZXQoJHBhcmFtc1snZm9yYWpheCddLCAkcGFyYW1zWydmb3JfYWpheCddKTsNCiAgICB9DQogICAgDQogICAgJGFzc2lnbiA9ICcnOw0KICAgIGlmKGlzc2V0KCRwYXJhbXNbJ2Fzc2lnbiddKSkNCiAgICB7DQogICAgICAkYXNzaWduID0gXHRyaW0oJHBhcmFtc1snYXNzaWduJ10pOw0KICAgICAgdW5zZXQoJHBhcmFtc1snYXNzaWduJ10pOw0KICAgIH0NCiAgICANCiAgICAkYWRkdGV4dCA9ICcnOw0KICAgIGlmKCR0aXRsZSkNCiAgICB7DQogICAgICAkYWRkdGV4dCA9ICd0aXRsZT0iJyAuICR0aXRsZSAuICciJzsNCiAgICB9DQogICAgDQogICAgaWYoIWVtcHR5KCRpbWFnZSkgJiYgXG1ldGhvZF9leGlzdHMoJG9iaiwgJ0NyZWF0ZUltYWdlTGluaycpICYmIEZBTFNFID09ICR1cmxvbmx5KQ0KICAgIHsNCiAgICAgICRvdXRwdXQgPSAkb2JqLT5DcmVhdGVJbWFnZUxpbmsoDQogICAgICAgICRtaWQsICRhY3Rpb24sICRwYWdlaWQsICR0ZXh0LCAkaW1hZ2UsICRwYXJhbXMsICRjbGFzcywgJGNvbmZtZXNzYWdlLCAkaW1hZ2Vvbmx5LCBGQUxTRSwgJGFkZHRleHQNCiAgICAgICk7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAkb3V0cHV0ID0gJG9iai0+Q3JlYXRlTGluaygkbWlkLCAkYWN0aW9uLCAkcGFnZWlkLCAkdGV4dCwgJHBhcmFtcywgJGNvbmZtZXNzYWdlLCAkdXJsb25seSwgJGlubGluZSwgJGFkZHRleHQpOw0KICAgICAgaWYoJHVybG9ubHkgJiYgJGpzZnJpZW5kbHkpDQogICAgICB7DQogICAgICAgICRvdXRwdXQgPSBcc3RyX3JlcGxhY2UoJ2FtcDsnLCAnJywgJG91dHB1dCk7DQogICAgICB9DQogICAgICBpZigkZm9yYWpheCkNCiAgICAgIHsNCiAgICAgICAgaWYoRkFMU0UgIT09IFxzdHJwb3MoJG91dHB1dCwgJz8nKSkNCiAgICAgICAgew0KICAgICAgICAgICRvdXRwdXQgLj0gJz9zaG93dGVtcGxhdGU9ZmFsc2UnOw0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICRvdXRwdXQgLj0gJyZzaG93dGVtcGxhdGU9ZmFsc2UnOw0KICAgICAgICB9DQogICAgICB9DQogICAgfQ0KICAgIA0KICAgIC8vIGFsbCBkb25lDQogICAgaWYoIWVtcHR5KCRhc3NpZ24pKQ0KICAgIHsNCiAgICAgICRzbWFydHktPmFzc2lnbigkYXNzaWduLCAkb3V0cHV0KTsNCiAgICAgIA0KICAgICAgcmV0dXJuICcnOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJG91dHB1dDsNCiAgfQ0KICANCiAgLyoqDQogICAqIEEgc2ltcGxlIGZ1bmN0aW9uIHRvIHJlcGVhdCBhIHN0cmluZyBOIHRpbWVzDQogICAqDQogICAqIEBwYXJhbSAkcGFyYW1zDQogICAqIEBwYXJhbSAkc21hcnR5DQogICAqDQogICAqIEByZXR1cm4gc3RyaW5nDQogICAqLw0KICBmdW5jdGlvbiBzbWFydHlfZnVuY3Rpb25fcmVwZWF0KCRwYXJhbXMsICRzbWFydHkpDQogIHsNCiAgICAkbnVtID0gMTsNCiAgICBpZighaXNzZXQoJHBhcmFtc1sndGV4dCddKSkNCiAgICB7DQogICAgICByZXR1cm4gJyc7DQogICAgfQ0KICAgIA0KICAgICR0ZXh0ID0gJHBhcmFtc1sndGV4dCddOw0KICAgIGlmKGlzc2V0KCRwYXJhbXNbJ2NvdW50J10pKQ0KICAgIHsNCiAgICAgICRudW0gPSAoaW50KSRwYXJhbXNbJ2NvdW50J107DQogICAgfQ0KICAgIA0KICAgICRvdXQgPSAnJzsNCiAgICBmb3IoJGkgPSAwOyAkaSA8ICRudW07ICRpKyspDQogICAgew0KICAgICAgJG91dCAuPSAkdGV4dDsNCiAgICB9DQogICAgDQogICAgaWYoaXNzZXQoJHBhcmFtc1snYXNzaWduJ10pKQ0KICAgIHsNCiAgICAgICRnQ21zICAgPSBjbXNtcygpOw0KICAgICAgJHNtYXJ0eSA9ICRnQ21zLT5HZXRTbWFydHkoKTsNCiAgICAgICRzbWFydHktPmFzc2lnbihcdHJpbSgkcGFyYW1zWydhc3NpZ24nXSksICRvdXQpOw0KICAgICAgDQogICAgICByZXR1cm4gJyc7DQogICAgfQ0KICAgIA0KICAgIHJldHVybiAkb3V0Ow0KICB9DQogIA0KICBmdW5jdGlvbiBzbWFydHlfZnVuY3Rpb25fc2Vzc2lvbl9wdXQoJHBhcmFtcywgJHNtYXJ0eSkNCiAgew0KICAgIGlmKGlzc2V0KCRwYXJhbXNbJ3ZhciddKSAmJiBpc3NldCgkcGFyYW1zWyd2YWx1ZSddKSkNCiAgICB7DQogICAgICAkdmFyID0gXHRyaW0oJHBhcmFtc1sndmFyJ10pOw0KICAgICAgaWYoXGlzX3N0cmluZygkdmFyKSkNCiAgICAgIHsNCiAgICAgICAgJF9TRVNTSU9OWyR2YXJdID0gJHBhcmFtc1sndmFsdWUnXTsNCiAgICAgIH0NCiAgICB9DQogIH0NCiAgDQogIGZ1bmN0aW9uIHNtYXJ0eV9mdW5jdGlvbl9zZXNzaW9uX2VyYXNlKCRwYXJhbXMsICRzbWFydHkpDQogIHsNCiAgICBpZihpc3NldCgkcGFyYW1zWyd2YXInXSkpDQogICAgew0KICAgICAgJHZhciA9IFx0cmltKCRwYXJhbXNbJ3ZhciddKTsNCiAgICAgIGlmKCR2YXIgJiYgaXNzZXQoJF9TRVNTSU9OWyR2YXJdKSkNCiAgICAgIHsNCiAgICAgICAgdW5zZXQoJF9TRVNTSU9OWyR2YXJdKTsNCiAgICAgIH0NCiAgICB9DQogIH0NCiAgDQogIC8qKg0KICAgKiBAcGFyYW0gJHBhcmFtcw0KICAgKiBAcGFyYW0gJHNtYXJ0eQ0KICAgKg0KICAgKiBAcmV0dXJuIHN0cmluZw0KICAgKiBAdGhyb3dzIFxFeGNlcHRpb24NCiAgICovDQogIGZ1bmN0aW9uIHNtYXJ0eV9mdW5jdGlvbl9jb250ZW50X2ZldGNoKCRwYXJhbXMsICRzbWFydHkpDQogIHsNCiAgICAjICBDaGVjayBpZiBvdXRwdXQgc2hvdWxkIGJlIGFzc2lnbmVkIHRvIGEgc3BlY2lmaWMgdmFyaWFibGUgbmFtZQ0KICAgIGlmKGlzc2V0KCRwYXJhbXNbJ2Fzc2lnbiddKSkNCiAgICB7DQogICAgICAkYXNzaWduID0gXHRyaW0oJHBhcmFtc1snYXNzaWduJ10pOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgJGFzc2lnbiA9ICdjb250ZW50X2ZldGNoJzsNCiAgICB9DQogICAgDQogICAgDQogICAgIyBDaGVjayBpZiBwYXJlbnQgcGFnZSBkYXRhIHNob3VsZCBiZSBpbmNsdWRlZCBpbiAgcmVzdWx0cyBlbnRyaWVzDQogICAgJHBhcmVudHMgPSBpc3NldCgkcGFyYW1zWydwYXJlbnRzJ10pICYmICRwYXJhbXNbJ3BhcmVudHMnXTsNCiAgICANCiAgICAjIENoZWNrIGlmIHVzZXIgZGF0YSBzaG91bGQgYmUgbG9va2VkIHVwIGZvciBlYWNoIGVudHJ5DQogICAgJHVzZXJzID0gaXNzZXQoJHBhcmFtc1sndXNlcnMnXSkgJiYgJHBhcmFtc1sndXNlcnMnXTsNCiAgICANCiAgICAjICBTZXQgbG9jYWxlIGlmIHJlcXVpcmVkIChlLmcuIGRhdGVzL3RpbWVzKS4gTG9jYWxlIGlzIHJlc2V0IHRvIGRlZmF1bHQgYWZ0ZXIgc2NyaXB0IGNvbXBsZXRlZA0KICAgIGlmKGlzc2V0KCRwYXJhbXNbJ2NkbG9jYWxlJ10pICYmICRwYXJhbXNbJ2NkbG9jYWxlJ10pDQogICAgew0KICAgICAgXHNldGxvY2FsZShcTENfVElNRSwgJHBhcmFtc1snY2Rsb2NhbGUnXSk7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICBcc2V0bG9jYWxlKFxMQ19USU1FLCAnJyk7DQogICAgfQ0KICAgIA0KICAgICMgQ2hlY2sgZm9yIHdoaWNoIGNvbnRlbnQgYmxvY2sgdG8gcGljaywNCiAgICAjIGlmIG5vdCBzZXQsIHBpY2sgZGVmYXVsdCAiY29udGVudF9lbiINCiAgICAkYmxvY2sgPSAkcGFyYW1zWydibG9ja19uYW1lJ10gPz8gJ2NvbnRlbnRfZW4nOw0KICAgIA0KICAgICRzcWxfY29udGVudF9xdWVyeV9oYXZpbmcgPSAiIEhBVklORyBwcm9wX25hbWU9JyIgLiAkYmxvY2sgLiAiJyAiOw0KICAgIA0KICAgICMgU2V0IGEgZGF0ZSBmb3JtYXQgZm9yIHlvdXIgQ29udGVudCBlbnRyaWVzDQogICAgJGRhdGVmb3JtYXQgPSAkcGFyYW1zWydkYXRlZm9ybWF0J10gPz8gJyVBLCAlZSAlQiAlWSc7DQogICAgDQogICAgIyAgQ2hlY2sgaWYgc3RhcnQgaWQgaXMgc2V0LA0KICAgICMgaWYgc28sIHRhZyB3aWxsIG9ueSByZXR1cm4gcGFnZXMNCiAgICAjIHRoYXQgaGF2ZSB0aGlzIGlkIG9yIGFyZSBsb2NhdGVkIGJlbG93DQogICAgaWYoaXNzZXQoJHBhcmFtc1snc3RhcnRfaWQnXSkpDQogICAgew0KICAgICAgJHN0ID0gJHBhcmFtc1snc3RhcnRfaWQnXTsNCiAgICAgIA0KICAgICAgJHNxbF9jb250ZW50X3F1ZXJ5X2xpbWl0X3NpdGVhcmVhID0gIiBBTkQgKA0KCQkJCShpZF9oaWVyYXJjaHkgTElLRSAoJyRzdCcpKSBPUg0KCQkJCShpZF9oaWVyYXJjaHkgTElLRSAoJyRzdC4lJykpIE9SDQoJCQkJKGlkX2hpZXJhcmNoeSBMSUtFICgnJS4kc3QuJScpKSBPUg0KCQkJCShpZF9oaWVyYXJjaHkgTElLRSAoJyUuJHN0JykpDQoJCQkpIjsNCiAgICAgIA0KICAgICAgJHN0YXJ0X2lkID0gKGludGVnZXIpJHBhcmFtc1snc3RhcnRfaWQnXTsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICRzcWxfY29udGVudF9xdWVyeV9saW1pdF9zaXRlYXJlYSA9ICcnOw0KICAgICAgJHN0YXJ0X2lkICAgICAgICAgICAgICAgICAgICAgICAgID0gLTE7DQogICAgfQ0KICAgIA0KICAgICMgQ2hlY2sgaWYgcGFyZW50IHBhZ2UgZGF0YQ0KICAgICMgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHJlc3VsdHMgZW50cmllcw0KICAgIGlmKGlzc2V0KCRwYXJhbXNbJ2RlcHRoJ10pKQ0KICAgIHsNCiAgICAgICRkZXB0aCA9IFxleHBsb2RlKCcsJywgJHBhcmFtc1snZGVwdGgnXSk7DQogICAgICANCiAgICAgIC8qIERlZmluZSB0aGUgc3RhcnRpbmcgaGllcmFyY2h5ICovDQogICAgICBpZigtMSA9PT0gJGRlcHRoWzBdKQ0KICAgICAgew0KICAgICAgICAkc3RhcnRfZGVwdGggPSB1dGlsczo6Z2V0X2N1cnJlbnRfbGV2ZWwoJHN0YXJ0X2lkKTsNCiAgICAgIH0NCiAgICAgIGVsc2UgaWYoMCA9PT0gKGludGVnZXIpJGRlcHRoWzBdKQ0KICAgICAgew0KICAgICAgICAkc3RhcnRfZGVwdGggPSAxOw0KICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgew0KICAgICAgICAkc3RhcnRfZGVwdGggPSAoaW50ZWdlcikkZGVwdGhbMF07DQogICAgICB9DQogICAgICANCiAgICAgICMgdGhlIFJFR0VYUCBzbmlwcGV0cyB1c2VkDQogICAgICAkc25pcDEgPSAiJ15bMC05XXsxLDEwfSI7DQogICAgICAkc25pcDIgPSAiXC5bMC05XXsxLDEwfSI7DQogICAgICANCiAgICAgICMgQ3JlYXRlIFF1ZXJ5IFN0cmluZyBmb3IgZmlyc3QgaGllcmFyY2h5IGxldmVsDQogICAgICBpZigkc3RhcnRfZGVwdGggPj0gMSkNCiAgICAgIHsNCiAgICAgICAgJGJ1ZmZlcjEgPSAkc25pcDE7DQogICAgICAgIGZvcigkaSA9IDE7ICRpIDw9ICRzdGFydF9kZXB0aCAtIDE7ICRpKyspDQogICAgICAgIHsNCiAgICAgICAgICAkYnVmZmVyMSAuPSAnJyAuICRzbmlwMjsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgDQogICAgICAkc3FsX2NvbnRlbnRfcXVlcnlfbGltaXRfaGllcmFyY2h5ID0gJyBBTkQgKGlkX2hpZXJhcmNoeSBSRUdFWFAgJyAuICRidWZmZXIxIC4gIiQnICI7DQogICAgICANCiAgICAgICMgQ3JlYXRlIFF1ZXJ5IFN0cmluZyBmb3IgcmVtYWluaW5nIGhpZXJhcmNoeSBsZXZlbHMNCiAgICAgICRtYXhfZGVwdGggPSAkc3RhcnRfZGVwdGggKyAoaW50ZWdlcikkZGVwdGhbMV07DQogICAgICANCiAgICAgIGZvcigkaSA9ICRzdGFydF9kZXB0aDsgJGkgPD0gJG1heF9kZXB0aCAtIDE7ICRpKyspDQogICAgICB7DQogICAgICAgICRidWZmZXIyICA9ICRidWZmZXIxOw0KICAgICAgICAkZGlzdGFuY2UgPSAkaSAtICRzdGFydF9kZXB0aDsNCiAgICAgICAgDQogICAgICAgICRidWZmZXIyIC49IFxzdHJfcmVwZWF0KCcnIC4gJHNuaXAyLCAkZGlzdGFuY2UgKyAxKTsNCiAgICAgICAgDQogICAgICAgICRzcWxfY29udGVudF9xdWVyeV9saW1pdF9oaWVyYXJjaHkgLj0gJyBPUiBpZF9oaWVyYXJjaHkgUkVHRVhQICcgLiAkYnVmZmVyMiAuICIkJyAiOw0KICAgICAgfQ0KICAgICAgJHNxbF9jb250ZW50X3F1ZXJ5X2xpbWl0X2hpZXJhcmNoeSAuPSAnKSc7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAkc3FsX2NvbnRlbnRfcXVlcnlfbGltaXRfaGllcmFyY2h5ID0gJyc7DQogICAgfQ0KICAgIA0KICAgICMgQ2hlY2sgaWYgZmlyc3Qgc29ydGluZyBpdGVtLXNvcnQtb3JkZXIgaXMgc2V0DQogICAgIyBvdGhlcndpc2Ugc2V0IHRvIGRlZmF1bHQgLCB3aGljaCBpcyB1cHdhcmRzDQogICAgJGZpcnN0X3NvcnRfb3JkZXIgPSAkcGFyYW1zWydmaXJzdF9zb3J0X29yZGVyJ10gPz8gJ3VwJzsNCiAgICANCiAgICAjIENoZWNrIGlmIHNlY29uZCBzb3J0aW5nIGl0ZW0tc29ydC1vcmRlciBpcyBzZXQNCiAgICAjIG90aGVyd2lzZSBzZXQgdG8gZGVmYXVsdCAsIHdoaWNoIGlzIHVwDQogICAgJHNlY29uZF9zb3J0X29yZGVyID0gJHBhcmFtc1snc2Vjb25kX3NvcnRfb3JkZXInXSA/PyAndXAnOw0KICAgIA0KICAgICMgIENoZWNrIGZvciBmaXJzdCBzb3J0IHBhcmFtZXRlciwNCiAgICAjIGlmIG5vdCBzZXQsIGZpcnN0IHNvcnQgcGFyYW1ldGVyIHdpbGwgYmUgdGhlIGhpZXJhcmNoeSBkYXRlIG9mIHRoZSBwYWdlDQogICAgaWYoaXNzZXQoJHBhcmFtc1snZmlyc3Rfc29ydCddKSkNCiAgICB7DQogICAgICAkc3FsX2NvbnRlbnRfcXVlcnlfZmlyc3Rfc29ydCA9IHV0aWxzOjpzcWxfc29ydF9wYXJhbSgkcGFyYW1zWydmaXJzdF9zb3J0J10sIDAsICRmaXJzdF9zb3J0X29yZGVyKTsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICRzcWxfY29udGVudF9xdWVyeV9maXJzdF9zb3J0ID0gdXRpbHM6OnNxbF9zb3J0X3BhcmFtKCdoaWVyYXJjaHknLCAwLCAndXAnKTsNCiAgICB9DQogICAgDQogICAgIyBDaGVjayBmb3Igc2Vjb25kIHNvcnQgcGFyYW1ldGVyLA0KICAgICMgaWYgbm90IHNldCwgc2Vjb25kIHNvcnQgcGFyYW1ldGVyIHdpbGwgYmUgdGhlIGNyZWF0aW9uIGRhdGUgb2YgdGhlIHBhZ2UNCiAgICBpZihpc3NldCgkcGFyYW1zWydzZWNvbmRfc29ydCddKSkNCiAgICB7DQogICAgICAkc3FsX2NvbnRlbnRfcXVlcnlfc2Vjb25kX3NvcnQgPSB1dGlsczo6c3FsX3NvcnRfcGFyYW0oJHBhcmFtc1snc2Vjb25kX3NvcnQnXSwgMiwgJHNlY29uZF9zb3J0X29yZGVyKTsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICRzcWxfY29udGVudF9xdWVyeV9zZWNvbmRfc29ydCA9ICcnOw0KICAgIH0NCiAgICANCiAgICAjIENoZWNrIGZvciBwYXJhbWV0ZXIgZXhjbHVkZSwNCiAgICAjIGlmIGl0IGNvbnRhaW5zIElEKHMpIHNlcGVyYXRlZCBieSBjb21tYSwNCiAgICAjIGl0IHdpbGwgY3JlYXRlIGFuIGFycmF5IG9mIElEcyB3ZSBjYW4gZXhjbHVkZSBsYXRlciBvbg0KICAgICRzcWxfY29udGVudF9xdWVyeV9leGNsdWRlcyA9ICcnOw0KICAgIA0KICAgIGlmKGlzc2V0KCRwYXJhbXNbJ2V4Y2x1ZGUnXSkpDQogICAgew0KICAgICAgJGV4Y2x1ZGVfaWRzID0gXGV4cGxvZGUoJywnLCAkcGFyYW1zWydleGNsdWRlJ10pOw0KICAgICAgZm9yKCRpID0gMDsgJGkgPD0gXGNvdW50KCRleGNsdWRlX2lkcykgLSAxOyAkaSsrKQ0KICAgICAgew0KICAgICAgICAkc3FsX2NvbnRlbnRfcXVlcnlfZXhjbHVkZXMgLj0gJ0FORCAnIC4gY21zX2RiX3ByZWZpeCgpIC4gJ2NvbnRlbnQuY29udGVudF9pZCAhPSAnIC4gJGV4Y2x1ZGVfaWRzWyRpXSAuICcgJzsNCiAgICAgIH0NCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICRleGNsdWRlX2lkc1swXSA9IC0xOw0KICAgIH0NCiAgICANCiAgICAjIExpbWl0IHRoZSBxdWVyeSByZXN1bHRzIHRvIGEgc2luZ2UgY29udGVudF9pZA0KICAgICMgYnkgYWRkaW5nIGEgY29uZGl0aW9uIHRvIHRoZSBxdWVyeSBzdGF0ZW1lbnQNCiAgICAjIGlmIG5vdCBzZXQsIGRvIG5vdCBhZGQgYW55dGhpbmcgdG8gdGhlIHF1ZXJ5IHN0cmluZw0KICAgIGlmKGlzc2V0KCRwYXJhbXNbJ3RoaXNfb25seSddKSkNCiAgICB7DQogICAgICAkc3FsX2NvbnRlbnRfcXVlcnlfdGhpc19vbmx5ID0gJ0FORCAnIC4gY21zX2RiX3ByZWZpeCgpIC4gJ2NvbnRlbnQuY29udGVudF9pZCA9ICcgLiAkcGFyYW1zWyd0aGlzX29ubHknXTsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICRzcWxfY29udGVudF9xdWVyeV90aGlzX29ubHkgPSAnJzsNCiAgICB9DQogICAgDQogICAgIyBDaGVjayBmb3IgcGFyYW1ldGVyIHRoZXNlX29ubHksIGlmIGl0IGNvbnRhaW5zIElEKHMpIHNlcGVyYXRlZCBieSBjb21tYSwNCiAgICAjIGl0IHdpbGwgY3JlYXRlIGFuIGFycmF5IG9mIElEcyB3ZSBjYW4gaW5jbHVkZSBleGNsdXNpdmVseQ0KICAgICRzcWxfY29udGVudF9maWx0ZXIgPSAnJzsNCiAgICBpZihpc3NldCgkcGFyYW1zWyd0aGVzZV9vbmx5J10pKQ0KICAgIHsNCiAgICAgICRpbmNsdWRlX2lkcyAgICAgICAgICAgICAgICA9IFxleHBsb2RlKCcsJywgJHBhcmFtc1sndGhlc2Vfb25seSddKTsNCiAgICAgICRzcWxfY29udGVudF9xdWVyeV9pbmNsdWRlcyA9ICcoJzsNCiAgICAgIGZvcigkaSA9IDA7ICRpIDw9IFxjb3VudCgkaW5jbHVkZV9pZHMpIC0gMTsgJGkrKykNCiAgICAgIHsNCiAgICAgICAgJHNxbF9jb250ZW50X2ZpbHRlciAuPSAnT1IgJyAuIGNtc19kYl9wcmVmaXgoKSAuICdjb250ZW50LmNvbnRlbnRfaWQgIT0gJyAuICRpbmNsdWRlX2lkc1skaV0gLiAnICAnOw0KICAgICAgfQ0KICAgICAgJHNxbF9jb250ZW50X2ZpbHRlciAuPSAnKSc7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAkaW5jbHVkZV9pZHNbMF0gPSAtMTsNCiAgICB9DQogICAgDQogICAgIyBJZiBzZXQgdG8gY29tcGlsZSwgc21hcnR5IHRhZ3MgaW4gdGhlIGNvbnRlbnQgd2lsbCBiZSBjb21waWxlZA0KICAgICNzZXQgdG8gZmFsc2UgcGVyIGRlZmF1bHQNCiAgICAjICFXQVJOSU5HISBNQVkgQ0FVU0UgUkVDVVJTSU9OIEFORCBVTFRJTUFURUxZIE9VVCBPRiBNRU1PUlkgRVJST1INCiAgICAkY19zbWFydHlfbW9kZXNfbGlzdCA9IFsnbmV1dHJhbCcsICdjb21waWxlJywgJ3N0cmlwJ107DQogICAgJGNfc21hcnR5ICAgICAgICAgICAgPSAkcGFyYW1zWydkb19zbWFydHknXSA/PyAnbmV1dHJhbCc7DQogICAgaWYoIVxpbl9hcnJheSgkY19zbWFydHksICRjX3NtYXJ0eV9tb2Rlc19saXN0KSkNCiAgICB7DQogICAgICAkY19zbWFydHkgPSAnbmV1dHJhbCc7DQogICAgfQ0KICAgIA0KICAgICMgSWYgc2V0IHRvIHN0cmlwLCBIVE1MIHRhZ3MgaW4gdGhlIGNvbnRlbnQgd2lsbCBiZSByZW1vdmVkIChpbmx1ZGluZyBKUywgQ1NTIGFuZCBIVE1MKQ0KICAgIA0KICAgIGlmKGlzc2V0KCRwYXJhbXNbJ2h0bWwnXSkgJiYgKCdzdHJpcCcgPT09ICRwYXJhbXNbJ2h0bWwnXSkpDQogICAgew0KICAgICAgJGNfaHRtbCA9ICdzdHJpcCc7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAkY19odG1sID0gJ25ldXRyYWwnOw0KICAgIH0NCiAgICANCiAgICAjIENoZWNrIGFuZCBzZXQgaG93IHRoZSAiYWN0aXZlIiBwYWdlIGZsYWcgaXMgaGFuZGxlZA0KICAgICRmX2FjdGl2ZSA9ICRwYXJhbXNbJ2FjdGl2ZSddID8/ICdhY3RpdmUnOw0KICAgIA0KICAgIHN3aXRjaCgkZl9hY3RpdmUpDQogICAgew0KICAgICAgY2FzZSAnZm9yY2UnOg0KICAgICAgICAkc3FsX2NvbnRlbnRfcXVlcnlfYWN0aXZlID0gJyAnOw0KICAgICAgYnJlYWs7DQogICAgICBjYXNlICdpbmFjdGl2ZSc6DQogICAgICAgICRzcWxfY29udGVudF9xdWVyeV9hY3RpdmUgPSAnIEFORCBhY3RpdmUgPSAwICcgLiAnICc7DQogICAgICBicmVhazsNCiAgICAgIGRlZmF1bHQ6DQogICAgICAgICRzcWxfY29udGVudF9xdWVyeV9hY3RpdmUgPSAnIEFORCBhY3RpdmUgPSAxICcgLiAnICc7DQogICAgICBicmVhazsNCiAgICB9DQogICAgDQogICAgIyBDaGVjayBhbmQgc2V0IGhvdyB0aGUgInNob3duX2luX21lbnUiIG9yICJzaG93X2luX21lbnUiIHBhZ2UgZmxhZyBpcyBoYW5kbGVkDQogICAgIyAic2hvd19pbl9tZW51IiBpcyBkZXByZWNhdGVkLCBzbyB3ZSBvbmx5IHVzZSBvbmUgb2YgdGhlIHBhcmFtcywNCiAgICAjIHByaW9yaXR5IHRvIG5ldyAic2hvd25faW5fbWVudSINCiAgICAkZl9zaG93bl9pbl9tZW51ID0gJHBhcmFtc1snc2hvd19pbl9tZW51J10gPz8gJ3Nob3cnOw0KICAgICRmX3Nob3duX2luX21lbnUgPSAkcGFyYW1zWydzaG93bl9pbl9tZW51J10gPz8gJGZfc2hvd25faW5fbWVudTsNCiAgICANCiAgICBzd2l0Y2goJGZfc2hvd25faW5fbWVudSkNCiAgICB7DQogICAgICBjYXNlICdmb3JjZSc6DQogICAgICAgICRzcWxfY29udGVudF9xdWVyeV9zaG93ID0gJyAnOw0KICAgICAgYnJlYWs7DQogICAgICBjYXNlICdoaWRkZW4nOg0KICAgICAgICAkc3FsX2NvbnRlbnRfcXVlcnlfc2hvdyA9ICdBTkQgc2hvd19pbl9tZW51ID0gMCAnIC4gJyAnOw0KICAgICAgYnJlYWs7DQogICAgICBkZWZhdWx0Og0KICAgICAgICAkc3FsX2NvbnRlbnRfcXVlcnlfc2hvdyA9ICcgQU5EIHNob3dfaW5fbWVudSA9IDEgJyAuICcgJzsNCiAgICAgIGJyZWFrOw0KICAgIH0NCiAgICANCiAgICAjIFNldCB0aGUgZmlyc3QgaXRlbSB0byBzaG93LA0KICAgICMgaWYgbm90IHNldCwgaXQgd2lsbCBiZWdpbiB3aXRoIHRoZSBmaXJzdCBpdGVtIHNob3duDQogICAgaWYoaXNzZXQoJHBhcmFtc1snbGltaXRfc3RhcnQnXSkpDQogICAgew0KICAgICAgJGxpbWl0X3N0YXJ0ICAgICAgPSAkcGFyYW1zWydsaW1pdF9zdGFydCddOw0KICAgICAgJGxpbWl0X3N0YXJ0X29yaWcgPSAkcGFyYW1zWydsaW1pdF9zdGFydCddOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgJGxpbWl0X3N0YXJ0ICAgICAgPSAwOw0KICAgICAgJGxpbWl0X3N0YXJ0X29yaWcgPSAwOw0KICAgIH0NCiAgICANCiAgICAjIFNldCB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRvIHNob3csDQogICAgIyBpZiBubyBwYXJhbWV0ZXIgaXMgc2V0LCBsaW1pdCB0byAxMDAwIHJlc3VsdHMNCiAgICBpZihpc3NldCgkcGFyYW1zWydsaW1pdF9jb3VudCddKSkNCiAgICB7DQogICAgICAkbGltaXRfY291bnQgICAgICA9ICRwYXJhbXNbJ2xpbWl0X2NvdW50J107DQogICAgICAkbGltaXRfY291bnRfb3JpZyA9ICRwYXJhbXNbJ2xpbWl0X2NvdW50J107DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAkbGltaXRfY291bnQgICAgICA9IDEwMDA7DQogICAgICAkbGltaXRfY291bnRfb3JpZyA9IDEwMDA7DQogICAgfQ0KICAgIA0KICAgICMgaWYgcGFyYW1ldGVyIGV4dGVuc2lvbiBpcyB1c2VkLA0KICAgICMgZXhwbG9kZSBwcm9wX25hbWVzIGFuZCBzdG9yZSB0aGVtIGluIGFuIGFycmF5DQogICAgaWYoaXNzZXQoJHBhcmFtc1snZXh0ZW5zaW9ucyddKSkNCiAgICB7DQogICAgICAkZXh0ZW5zaW9ucyAgICAgICAgICAgICAgPSBcZXhwbG9kZSgnLCcsICRwYXJhbXNbJ2V4dGVuc2lvbnMnXSk7DQogICAgICAkY291bnRfZXh0ZW5zaW9ucyAgICAgICAgPSBcY291bnQoJGV4dGVuc2lvbnMpOw0KICAgICAgJHNxbF9jb250ZW50X3F1ZXJ5X3Byb3BzID0gJyc7DQogICAgICANCiAgICAgIGZvcigkaSA9IDA7ICRpIDw9ICRjb3VudF9leHRlbnNpb25zIC0gMTsgJGkrKykNCiAgICAgIHsNCiAgICAgICAgJHNxbF9jb250ZW50X3F1ZXJ5X3Byb3BzIC49ICIgT1IgcHJvcF9uYW1lPSciIC4gJGV4dGVuc2lvbnNbJGldIC4gIicgIiAuICcgJzsNCiAgICAgIH0NCiAgICAgIA0KICAgICAgJGxpbWl0X2NvdW50ICo9ICgkY291bnRfZXh0ZW5zaW9ucyArIDEpOw0KICAgICAgDQogICAgICBpZigkbGltaXRfc3RhcnQgPj0gMSkNCiAgICAgIHsNCiAgICAgICAgJGxpbWl0X3N0YXJ0ID0gKCRsaW1pdF9zdGFydCAqICgkY291bnRfZXh0ZW5zaW9ucyArIDEpKSAtIDE7DQogICAgICB9DQogICAgICANCiAgICAgICRleHRlbnNpb24gPSBUUlVFOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgJHNxbF9jb250ZW50X3F1ZXJ5X3Byb3BzID0gJyc7DQogICAgICAkZXh0ZW5zaW9uICAgICAgICAgICAgICAgPSBGQUxTRTsNCiAgICB9DQogICAgDQogICAgIyBDaGVjayBob3cgYSBzdGF0ZWQgcHJlZml4IHNob3VsZCBiZSBoYW5kbGVkDQogICAgJHNxbF9wcmVmaXhfZmlsdGVyID0gJyc7DQogICAgJHByZWZpeF9tb2RlICAgICAgID0gJHBhcmFtc1sncHJlZml4X21vZGUnXSA/PyAnbmV1dHJhbCc7DQogICAgDQogICAgIyBDaGVjayB3aGF0IHByZWZpeGVzIHNob3VsZCBiZSBoYW5kbGVkDQogICAgaWYoaXNzZXQoJHBhcmFtc1sncHJlZml4J10pKQ0KICAgIHsNCiAgICAgICRwcmVmaXhlcyA9IFxleHBsb2RlKCcsJywgJHBhcmFtc1sncHJlZml4J10pOw0KICAgICAgJGNvdW50ICAgID0gXGNvdW50KCRwcmVmaXhlcyk7DQogICAgICBpZignZm9yY2UnID09PSAkcHJlZml4X21vZGUpDQogICAgICB7DQogICAgICAgICRzcWxfcHJlZml4X2ZpbHRlciA9ICIgQU5EIGNvbnRlbnRfYWxpYXMgUkVHRVhQICdeIjsNCiAgICAgIH0NCiAgICAgIGlmKCdoaWRlJyA9PT0gJHByZWZpeF9tb2RlKQ0KICAgICAgew0KICAgICAgICAkc3FsX3ByZWZpeF9maWx0ZXIgPSAiIEFORCBjb250ZW50X2FsaWFzIE5PVCBSRUdFWFAgJ14iOw0KICAgICAgfQ0KICAgICAgaWYoJ25ldXRyYWwnICE9PSAkcHJlZml4X21vZGUpDQogICAgICB7DQogICAgICAgIGlmKCRjb3VudCA+IDEpDQogICAgICAgIHsNCiAgICAgICAgICAkc3FsX3ByZWZpeF9maWx0ZXIgLj0gJygnOw0KICAgICAgICB9DQogICAgICAgIGZvcigkaSA9IDA7ICRpIDw9ICRjb3VudCAtIDE7ICRpKyspDQogICAgICAgIHsNCiAgICAgICAgICAkc3FsX3ByZWZpeF9maWx0ZXIgLj0gJycgLiAkcHJlZml4ZXNbJGldOw0KICAgICAgICAgIA0KICAgICAgICAgIGlmKCRpIDwgJGNvdW50IC0gMSkNCiAgICAgICAgICB7DQogICAgICAgICAgICAkc3FsX3ByZWZpeF9maWx0ZXIgLj0gJ3wnOw0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgaWYoJGNvdW50ID4gMSkNCiAgICAgICAgew0KICAgICAgICAgICRzcWxfcHJlZml4X2ZpbHRlciAuPSAiKScgIjsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAkc3FsX3ByZWZpeF9maWx0ZXIgLj0gIicgIjsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0NCiAgICANCiAgICAjIENoZWNrIGlmIHBhcmFtZXRlciAncGFnZScgc3BlY2lmaWVzIGEgcGFnZSB0byBkaXNwbGF5LA0KICAgICMgKG9ubHkgbWFrZXMgc2Vuc2Ugd2hlbiB1c2VkIHdpdGggbGltaXRfY291bnQsIHdoaWNoIGlzIHRoZSBwYWdlIHNpemUpDQogICAgaWYoaXNzZXQoJHBhcmFtc1sncGFnZSddKSAmJiAoJycgIT09ICRwYXJhbXNbJ3BhZ2UnXSkpDQogICAgew0KICAgICAgJHBhZ2VfbnVtYmVyID0gJHBhcmFtc1sncGFnZSddOw0KICAgICAgIyBUaGVyZSBpcyBubyBuZWdhdGl2ZSBwYWdlIG9yIGEgcGFnZSBudW1iZXJlZCB6ZXJvDQogICAgICBpZigkcGFnZV9udW1iZXIgPD0gMCkNCiAgICAgIHsNCiAgICAgICAgJHBhZ2VfbnVtYmVyID0gMTsNCiAgICAgIH0NCiAgICAgIA0KICAgICAgaWYoMSA9PT0gJHBhZ2VfbnVtYmVyKQ0KICAgICAgew0KICAgICAgICAjIFBhZ2UgaXMgb25lLCB3ZSBkbyBub3QgbmVlZCB0byBjaGFuZ2UgYW55dGhpbmcNCiAgICAgIH0NCiAgICAgIGVsc2UgaWYoMiA9PT0gJHBhZ2VfbnVtYmVyKQ0KICAgICAgew0KICAgICAgICAvLyB0aGlzIGlzIHRoZSBzZWNvbmQgcGFnZSwNCiAgICAgICAgaWYoMCA9PT0gJGxpbWl0X3N0YXJ0KQ0KICAgICAgICB7DQogICAgICAgICAgJGxpbWl0X3N0YXJ0ID0gJGxpbWl0X2NvdW50Ow0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICRsaW1pdF9zdGFydCA9ICRsaW1pdF9zdGFydCArICRsaW1pdF9jb3VudCAtIDE7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIGVsc2UgaWYoJHBhZ2VfbnVtYmVyID49IDMpDQogICAgICB7DQogICAgICAgIC8vIGFuZCB0aGlzIGFueSBmb2xsb3dpbmcgcGFnZQ0KICAgICAgICBpZigwID09PSAkbGltaXRfc3RhcnQpDQogICAgICAgIHsNCiAgICAgICAgICAkbGltaXRfc3RhcnQgPSAkbGltaXRfY291bnQgKiAoJHBhZ2VfbnVtYmVyIC0gMSk7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgJGxpbWl0X3N0YXJ0ID0gJGxpbWl0X3N0YXJ0ICsgKCRsaW1pdF9jb3VudCAqICgkcGFnZV9udW1iZXIgLSAxKSkgLSAxOw0KICAgICAgICB9DQogICAgICB9DQogICAgICANCiAgICAgICRwYWdlcl9pbmZvICAgICAgICAgID0gbmV3IFxzdGRDbGFzczsNCiAgICAgICRwYWdlcl9pbmZvLT5jdXJyZW50ID0gJHBhZ2VfbnVtYmVyOw0KICAgICAgJHBhZ2VyX2luZm8tPm1heCAgICAgPSB1dGlsczo6Z2V0X21heF9wYWdlKA0KICAgICAgICAkYmxvY2ssDQogICAgICAgICRzcWxfY29udGVudF9xdWVyeV9saW1pdF9oaWVyYXJjaHksDQogICAgICAgICRzcWxfcHJlZml4X2ZpbHRlciwNCiAgICAgICAgJHNxbF9jb250ZW50X2ZpbHRlciwNCiAgICAgICAgJGxpbWl0X2NvdW50X29yaWcsDQogICAgICAgICRsaW1pdF9zdGFydF9vcmlnLA0KICAgICAgICAkZXhjbHVkZV9pZHMsDQogICAgICAgICRzcWxfY29udGVudF9xdWVyeV9saW1pdF9zaXRlYXJlYSwNCiAgICAgICAgJHNxbF9jb250ZW50X3F1ZXJ5X2FjdGl2ZSwNCiAgICAgICAgJHNxbF9jb250ZW50X3F1ZXJ5X3Nob3cNCiAgICAgICk7DQogICAgICANCiAgICAgICRwYWdlcl9pbmZvLT5zaXplID0gJGxpbWl0X2NvdW50X29yaWc7DQogICAgfQ0KICAgIA0KICAgICMgSWYgc3RhcnQgYW5kIGNvdW50IGFyZSBub3Qgc2V0LA0KICAgICMgaWdub3JlIHRoZSBvdXRwdXQgbGltaXQgYW5kIGdpdmUgYmFjayBldmVyeXRoaW5nLA0KICAgICMgZWxzZTogYXNzZW1ibGUgbXlzcWwgbGltaXQgc3RhdGVtZW50DQogICAgaWYoaXNzZXQoJHBhcmFtc1snbGltaXRfc3RhcnQnXSkgfHwgaXNzZXQoJHBhcmFtc1snbGltaXRfY291bnQnXSkpDQogICAgew0KICAgICAgJHNxbF9jb250ZW50X3F1ZXJ5X2xpbWl0ID0gJyBMSU1JVCAnIC4gJGxpbWl0X3N0YXJ0IC4gJyAsICcgLiAkbGltaXRfY291bnQ7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAkc3FsX2NvbnRlbnRfcXVlcnlfbGltaXQgPSAnJzsNCiAgICB9DQogICAgDQogICAgIyBDcmVhdGUgRlVMTFRFWFQgU2VhcmNoIGV4cHJlc3Npb24NCiAgICBpZigoaXNzZXQoJHBhcmFtc1snZmlsdGVyJ10pKSAmJiAoJycgIT09ICRwYXJhbXNbJ2ZpbHRlciddKSkNCiAgICB7DQogICAgICAkdGhlc2VfaWRzX2FycmF5ID0gdXRpbHM6OmdldF9tYXRjaGluZ19wYWdlcygNCiAgICAgICAgJGJsb2NrLA0KICAgICAgICAkc3FsX2NvbnRlbnRfcXVlcnlfbGltaXRfaGllcmFyY2h5LA0KICAgICAgICAkc3FsX3ByZWZpeF9maWx0ZXIsDQogICAgICAgICRwYXJhbXNbJ2ZpbHRlciddLA0KICAgICAgICAkbGltaXRfY291bnRfb3JpZywNCiAgICAgICAgJGxpbWl0X3N0YXJ0X29yaWcsDQogICAgICAgICRleGNsdWRlX2lkcywNCiAgICAgICAgJHNxbF9jb250ZW50X3F1ZXJ5X2xpbWl0X3NpdGVhcmVhDQogICAgICApOw0KICAgICAgDQogICAgICAkZmlsdGVyX2NvdW50ID0gXGNvdW50KCR0aGVzZV9pZHNfYXJyYXkpOw0KICAgICAgDQogICAgICBpZigkZmlsdGVyX2NvdW50ID4gMCkNCiAgICAgIHsNCiAgICAgICAgJHNxbF9jb250ZW50X2ZpbHRlciA9ICdBTkQgKCc7DQogICAgICB9DQogICAgICANCiAgICAgIGZvcigkaSA9IDA7ICRpIDw9ICRmaWx0ZXJfY291bnQgLSAxOyAkaSsrKQ0KICAgICAgew0KICAgICAgICBpZigkaSA+IDApDQogICAgICAgIHsNCiAgICAgICAgICAkc3FsX2NvbnRlbnRfZmlsdGVyIC49ICdPUiAnOw0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICRzcWxfY29udGVudF9maWx0ZXIgLj0gJyAnOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAkc3FsX2NvbnRlbnRfZmlsdGVyIC49ICcnIC4gXGNtc19kYl9wcmVmaXgoKSAuICJjb250ZW50X3Byb3BzLmNvbnRlbnRfaWQgPSAnIiAuICR0aGVzZV9pZHNfYXJyYXlbJGldIC4gIicgIjsNCiAgICAgIH0NCiAgICAgIA0KICAgICAgaWYoJGZpbHRlcl9jb3VudCA+IDApDQogICAgICB7DQogICAgICAgICRzcWxfY29udGVudF9maWx0ZXIgLj0gJykgICc7DQogICAgICB9DQogICAgICANCiAgICAgIGlmKDAgPT09ICRmaWx0ZXJfY291bnQpDQogICAgICB7DQogICAgICAgICRzcWxfY29udGVudF9maWx0ZXIgPSAnIEFORCAnIC4gXGNtc19kYl9wcmVmaXgoKSAuICdjb250ZW50X3Byb3BzLmNvbnRlbnRfaWQgPSAtMSAgJzsNCiAgICAgIH0NCiAgICAgIA0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgJHNxbF9jb250ZW50X2ZpbHRlciA9ICcnOw0KICAgIH0NCiAgICANCiAgICAkZGIgPSBcY21zbXMoKS0+R2V0RGIoKTsNCiAgICANCiAgICAjIFN0YXJ0IHF1ZXJ5IGVsZW1lbnQgZm9yIGZpbmFsIGNvbnRlbnQgcXVlcnkNCiAgICAkc3FsX2NvbnRlbnRfcXVlcnlfc3RhcnQgPSAnDQoJCVNFTEVDVA0KCQkJJyAuIFxjbXNfZGJfcHJlZml4KCkgLiAnY29udGVudC5jb250ZW50X2lkIGFzIGNvbnRlbnRfaWQsDQoJCQljb250ZW50X25hbWUsDQoJCQltZW51X3RleHQsDQoJCQlzaG93X2luX21lbnUsDQoJCQknIC4gXGNtc19kYl9wcmVmaXgoKSAuICdjb250ZW50LmNyZWF0ZV9kYXRlLA0KCQkJJyAuIFxjbXNfZGJfcHJlZml4KCkgLiAnY29udGVudC5tb2RpZmllZF9kYXRlLA0KCQkJb3duZXJfaWQsDQoJCQlpZF9oaWVyYXJjaHksDQoJCQlwYXJlbnRfaWQsDQoJCQlsYXN0X21vZGlmaWVkX2J5LA0KCQkJYWN0aXZlLA0KCQkJcHJvcF9uYW1lLA0KCQkJY29udGVudCwNCgkJCWNvbnRlbnRfYWxpYXMNCg0KCQlGUk9NDQoJCQknIC4gXGNtc19kYl9wcmVmaXgoKSAuICdjb250ZW50LCAnIC4gXGNtc19kYl9wcmVmaXgoKSAuICdjb250ZW50X3Byb3BzDQoNCgkJV0hFUkUNCgkJCScgLiBcY21zX2RiX3ByZWZpeCgpIC4gJ2NvbnRlbnQuY29udGVudF9pZCA9ICcgLiBcY21zX2RiX3ByZWZpeCgpIC4gJ2NvbnRlbnRfcHJvcHMuY29udGVudF9pZA0KDQoJCSc7DQogICAgDQogICAgIyBQdXQgYWxsIG15c3FsIHF1ZXJ5IGVsZW1lbnRzIGludG8gb25lIHN0cmluZw0KICAgIA0KICAgICRzcWxfdGhlX2Z1bGxfcXVlcnkgPQ0KICAgICAgJHNxbF9jb250ZW50X3F1ZXJ5X3N0YXJ0IC4gJw0KCQknIC4gJHNxbF9jb250ZW50X2ZpbHRlciAuICcNCgkJJyAuICRzcWxfcHJlZml4X2ZpbHRlciAuICcNCgkJJyAuICRzcWxfY29udGVudF9xdWVyeV9saW1pdF9zaXRlYXJlYSAuICcNCgkJJyAuICRzcWxfY29udGVudF9xdWVyeV9saW1pdF9oaWVyYXJjaHkgLiAnDQoJCScgLiAkc3FsX2NvbnRlbnRfcXVlcnlfZXhjbHVkZXMgLiAnDQoJCScgLiAkc3FsX2NvbnRlbnRfcXVlcnlfYWN0aXZlIC4gJw0KCQknIC4gJHNxbF9jb250ZW50X3F1ZXJ5X3Nob3cgLiAnDQoJCScgLiAkc3FsX2NvbnRlbnRfcXVlcnlfdGhpc19vbmx5IC4gJw0KCQknIC4gJHNxbF9jb250ZW50X3F1ZXJ5X2hhdmluZyAuICcNCgkJJyAuICRzcWxfY29udGVudF9xdWVyeV9wcm9wcyAuICcNCgkJJyAuICRzcWxfY29udGVudF9xdWVyeV9maXJzdF9zb3J0IC4gJw0KCQknIC4gJHNxbF9jb250ZW50X3F1ZXJ5X3NlY29uZF9zb3J0IC4gJw0KCQknIC4gJHNxbF9jb250ZW50X3F1ZXJ5X2xpbWl0Ow0KICAgIA0KICAgICMgRXhlY3V0ZSBteXNxbCBDb21tYW5kDQogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRzcWxfdGhlX2Z1bGxfcXVlcnkpOw0KICAgIA0KICAgIGlmKCRkYi0+RXJyb3JObygpKQ0KICAgIHsNCiAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignREIgZXJyb3I6ICcgLiAkZGItPkVycm9yTXNnKCkpOw0KICAgIH0NCiAgICANCiAgICAvLyAgICBpZighJGRicmVzdWx0KQ0KICAgIC8vICAgIHsNCiAgICAvLyAgICAgIGVjaG8gJ0RCIGVycm9yOiAnIC4gJGRiLT5FcnJvck1zZygpIC4gIjxici8+IjsNCiAgICAvLyAgICB9DQogICAgDQogICAgDQogICAgIyBTdG9yZSBEYXRhYmFzZSBSZXN1bHRzIGluIEFycmF5IG9mIENsYXNzZXMNCiAgICANCiAgICAjIGlmIHdlIHVzZSBleHRlbnNpb24gY2hlY2tpbmcuLi4gd2UgbmVlZCBhbiBleHRyYSBhcnJheQ0KICAgIGlmKCRleHRlbnNpb24pDQogICAgew0KICAgICAgJGNvbnRlbnRfcHJvcHMgPSBbXTsNCiAgICAgICRjb3VudGVyICAgICAgID0gMDsNCiAgICB9DQogICAgDQogICAgJGNvbnRlbnRfZHVtcCA9IFtdOw0KICAgICRwYXJlbnRfaWRzICAgPSBbXTsNCiAgICAkdXNlcl9pZHMgICAgID0gW107DQogICAgJGR1bXBfY291bnQgICA9IDA7DQogICAgDQogICAgd2hpbGUoJGRicmVzdWx0ICYmICRkYnF1ZXJ5cmVzdWx0cm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKQ0KICAgIHsNCiAgICAgICMgU3RvcmUgdGhlIGRhdGEgb2YgaXRlbXMgd2l0aCBwcm9wX25hbWUgKD1ibG9jay1uYW1lKSBvZiBwYXJhbWV0ZXIgImJsb2NrIiBpbnRvIGFuIGFycmF5DQogICAgICAjIHRoaXMgaXMgb3VyIG1haW4gY29udGVudF9kdW1wIGl0ZW0gZGF0YQ0KICAgICAgaWYoJGRicXVlcnlyZXN1bHRyb3dbJ3Byb3BfbmFtZSddID09ICRibG9jaykNCiAgICAgIHsNCiAgICAgICAgJGR1bXBfaXRlbSAgICAgICAgICAgPSBuZXcgXHN0ZENsYXNzOw0KICAgICAgICAkZHVtcF9pdGVtLT5jb250ZW50ICA9IG5ldyBcc3RkQ2xhc3M7DQogICAgICAgICRkdW1wX2l0ZW0tPnBhcmVudHMgID0gbmV3IFxzdGRDbGFzczsNCiAgICAgICAgJGR1bXBfaXRlbS0+Y3JlYXRlZCAgPSBuZXcgXHN0ZENsYXNzOw0KICAgICAgICAkZHVtcF9pdGVtLT5tb2RpZmllZCA9IG5ldyBcc3RkQ2xhc3M7DQogICAgICAgICRkdW1wX2l0ZW0tPml0ZW0gICAgID0gJGR1bXBfY291bnQ7DQogICAgICAgIA0KICAgICAgICAkZHVtcF9pdGVtLT5jb250ZW50LT5pZCAgICAgPSAkZGJxdWVyeXJlc3VsdHJvd1snY29udGVudF9pZCddOw0KICAgICAgICAkZHVtcF9pdGVtLT5jb250ZW50LT5hbGlhcyAgPSAkZGJxdWVyeXJlc3VsdHJvd1snY29udGVudF9hbGlhcyddOw0KICAgICAgICAkZHVtcF9pdGVtLT5jb250ZW50LT50aXRsZSAgPSAkZGJxdWVyeXJlc3VsdHJvd1snY29udGVudF9uYW1lJ107DQogICAgICAgICRkdW1wX2l0ZW0tPmNvbnRlbnQtPm1lbnUgICA9ICRkYnF1ZXJ5cmVzdWx0cm93WydtZW51X3RleHQnXTsNCiAgICAgICAgJGR1bXBfaXRlbS0+Y29udGVudC0+c2hvdyAgID0gJGRicXVlcnlyZXN1bHRyb3dbJ3Nob3dfaW5fbWVudSddOw0KICAgICAgICAkZHVtcF9pdGVtLT5jb250ZW50LT5hY3RpdmUgPSAkZGJxdWVyeXJlc3VsdHJvd1snYWN0aXZlJ107DQogICAgICAgICRkdW1wX2l0ZW0tPmNvbnRlbnQtPmRhdGEgICA9ICRkYnF1ZXJ5cmVzdWx0cm93Wydjb250ZW50J107DQogICAgICAgIA0KICAgICAgICAjIFNlZSBpZiB0aGUgSUQgb2YgdGhpcyBwYWdlcyBwYXJlbnQgaXMgYWxyZWFkeSBrbm93bg0KICAgICAgICAjIGFzIGEgcGFnZSBmb3Igd2hpY2ggd2UgbmVlZCB0byBsb29rdXAgbmFtZSBhbmQgYWxpYXMgbGF0ZXIgb24NCiAgICAgICAgaWYoJHBhcmVudHMpDQogICAgICAgIHsNCiAgICAgICAgICAkcGFyZW50X2lkcyA9IHV0aWxzOjppZF90b19hcnJheSgkcGFyZW50X2lkcywgJGRicXVlcnlyZXN1bHRyb3dbJ3BhcmVudF9pZCddKTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgJGR1bXBfaXRlbS0+cGFyZW50cy0+aWQgICAgPSAkZGJxdWVyeXJlc3VsdHJvd1sncGFyZW50X2lkJ107DQogICAgICAgICRkdW1wX2l0ZW0tPnBhcmVudHMtPmFsaWFzID0gJyc7DQogICAgICAgICRkdW1wX2l0ZW0tPnBhcmVudHMtPnRpdGxlID0gJyc7DQogICAgICAgICRkdW1wX2l0ZW0tPnBhcmVudHMtPm1lbnUgID0gJyc7DQogICAgICAgIA0KICAgICAgICBpZigkdXNlcnMpDQogICAgICAgIHsNCiAgICAgICAgICAkdXNlcl9pZHMgPSB1dGlsczo6aWRfdG9fYXJyYXkoJHVzZXJfaWRzLCAkZGJxdWVyeXJlc3VsdHJvd1snb3duZXJfaWQnXSk7DQogICAgICAgICAgJHVzZXJfaWRzID0gdXRpbHM6OmlkX3RvX2FycmF5KCR1c2VyX2lkcywgJGRicXVlcnlyZXN1bHRyb3dbJ2xhc3RfbW9kaWZpZWRfYnknXSk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgICMgVE9ETyAtIHJlcGxhY2Ugc3RyZnRpbWUgYXNhcA0KICAgICAgICAkZHVtcF9pdGVtLT5jcmVhdGVkLT5ieSAgICA9ICRkYnF1ZXJ5cmVzdWx0cm93Wydvd25lcl9pZCddOw0KICAgICAgICAkZHVtcF9pdGVtLT5jcmVhdGVkLT5kYXRlICA9IEBcc3RyZnRpbWUoJGRhdGVmb3JtYXQsIEBcc3RydG90aW1lKCRkYnF1ZXJ5cmVzdWx0cm93WydjcmVhdGVfZGF0ZSddKSk7DQogICAgICAgICRkdW1wX2l0ZW0tPm1vZGlmaWVkLT5ieSAgID0gJGRicXVlcnlyZXN1bHRyb3dbJ2xhc3RfbW9kaWZpZWRfYnknXTsNCiAgICAgICAgJGR1bXBfaXRlbS0+bW9kaWZpZWQtPmRhdGUgPSBAXHN0cmZ0aW1lKCRkYXRlZm9ybWF0LCBAXHN0cnRvdGltZSgkZGJxdWVyeXJlc3VsdHJvd1snbW9kaWZpZWRfZGF0ZSddKSk7DQogICAgICAgICRkdW1wX2l0ZW0tPmV4dGVuc2lvbiAgICAgID0gMDsNCiAgICAgICAgJGNvbnRlbnRfZHVtcFtdICAgICAgICAgICAgPSAkZHVtcF9pdGVtOw0KICAgICAgICArKyRkdW1wX2NvdW50Ow0KICAgICAgICANCiAgICAgIH0NCiAgICAgIGVsc2UgaWYoJGV4dGVuc2lvbiAmJiAoJycgIT0gJGRicXVlcnlyZXN1bHRyb3dbJ2NvbnRlbnQnXSkpDQogICAgICB7DQogICAgICAgIC8vIElmIHRoZSBjb250ZW50IGJsb2NrIGlzIG5vdCBvdXIgcHJpbWFyeSBjb250ZW50IGJsb2NrLCBsZXQncyBjaGVjayBpZiB3ZSBzaG91bGQgYXNzaWduIGl0IHRvIG91ciBidWZmZXIgYXJyYXksIHRoYXQgc3RvcmVzIGFsbCB0aGUgb3RoZXIgcHJvcHMNCiAgICAgICAgJGNvbnRlbnRfcHJvcHNbJGNvdW50ZXJdWydjb250ZW50X2lkJ10gPSAkZGJxdWVyeXJlc3VsdHJvd1snY29udGVudF9pZCddOw0KICAgICAgICAkY29udGVudF9wcm9wc1skY291bnRlcl1bJ2NvbnRlbnQnXSAgICA9ICRkYnF1ZXJ5cmVzdWx0cm93Wydjb250ZW50J107DQogICAgICAgICRjb250ZW50X3Byb3BzWyRjb3VudGVyXVsncHJvcF9uYW1lJ10gID0gJGRicXVlcnlyZXN1bHRyb3dbJ3Byb3BfbmFtZSddOw0KICAgICAgICArKyRjb3VudGVyOw0KICAgICAgfQ0KICAgIH0NCiAgICANCiAgICAjIEdldCB0aGUgZXh0cmEgZGF0YSBpbnRvIHRoZSByZXN1bHRzIChpZiBuZWVkZWQpDQogICAgIyBUT0RPIGxvb2sgYXQgZWFjaCByZXN1bHQgZW50cnkgYW5kIGNvbXBhcmUgaXQgdG8gdGhlIHNpbmdsZSBkYXRhIG9wdGlvbnMgKHBhcmVudHMsIGV4dGVuc2lvbnMsIHVzZXJzIGFzIHdlbGwgYXMgc3RyaXAgb3B0aW9ucykNCiAgICANCiAgICAkY291bnRfY29udGVudF9kdW1wID0gXGNvdW50KCRjb250ZW50X2R1bXApOw0KICAgIA0KICAgIGlmKCRwYXJlbnRzKQ0KICAgIHsNCiAgICAgICR0aGVwYXJlbnRzICAgICAgID0gdXRpbHM6OmdldF9wYXJlbnRfZGF0YSgkcGFyZW50X2lkcyk7DQogICAgICAkY291bnRfdGhlcGFyZW50cyA9IFxjb3VudCgkdGhlcGFyZW50cyk7DQogICAgfQ0KICAgIA0KICAgIGlmKCR1c2VycykNCiAgICB7DQogICAgICAkdGhldXNlcnMgICAgICAgPSB1dGlsczo6Z2V0X3VzZXJfZGF0YSgkdXNlcl9pZHMpOw0KICAgICAgJGNvdW50X3RoZXVzZXJzID0gXGNvdW50KCR0aGV1c2Vycyk7DQogICAgfQ0KICAgIA0KICAgIGlmKCRleHRlbnNpb24pDQogICAgew0KICAgICAgJGNvdW50X2NvbnRlbnRfcHJvcHMgPSBcY291bnQoJGNvbnRlbnRfcHJvcHMpOw0KICAgIH0NCiAgICANCiAgICBmb3IoJGkgPSAwOyAkaSA8PSAkY291bnRfY29udGVudF9kdW1wIC0gMTsgJGkrKykNCiAgICB7DQogICAgICBpZigkcGFyZW50cykNCiAgICAgIHsNCiAgICAgICAgIyBDb21wYXJlIGFnYWluc3QgcGFyZW50IElEcyB0byBleHBhbmQgcGFyZW50cyBkYXRhDQogICAgICAgIGZvcigkazEgPSAwOyAkazEgPD0gJGNvdW50X3RoZXBhcmVudHMgLSAxOyAkazErKykNCiAgICAgICAgew0KICAgICAgICAgIGlmKCRjb250ZW50X2R1bXBbJGldLT5wYXJlbnRzLT5pZCA9PT0gJHRoZXBhcmVudHNbJGsxXS0+aWQpDQogICAgICAgICAgew0KICAgICAgICAgICAgIyB3ZSBmb3VuZCB0aGUgcGFyZW50IHBhZ2Ugb2Ygb3VyIGNvbnRlbnRfZHVtcCBpdGVtLi4uDQogICAgICAgICAgICAkY29udGVudF9kdW1wWyRpXS0+cGFyZW50cy0+YWxpYXMgPSAkdGhlcGFyZW50c1skazFdLT5hbGlhczsNCiAgICAgICAgICAgICRjb250ZW50X2R1bXBbJGldLT5wYXJlbnRzLT50aXRsZSA9ICR0aGVwYXJlbnRzWyRrMV0tPnRpdGxlOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICB9DQogICAgICANCiAgICAgIGlmKCR1c2VycykNCiAgICAgIHsNCiAgICAgICAgIyBDb21wYXJlIGFnYWluc3QgdXNlcl9pZHMgSURzIHRvIGV4cGFuZCB1c2VyIGRhdGEgKGV4dGVuc2lvbnMpDQogICAgICAgIGZvcigkazMgPSAwOyAkazMgPD0gJGNvdW50X3RoZXVzZXJzIC0gMTsgJGszKyspDQogICAgICAgIHsNCiAgICAgICAgICBpZigkY29udGVudF9kdW1wWyRpXS0+Y3JlYXRlZC0+YnkgPT09ICR0aGV1c2Vyc1skazNdLT5pZCkNCiAgICAgICAgICB7DQogICAgICAgICAgICAjIHdlIGZvdW5kIHRoZSB1c2VyIHdobyBjcmVhdGVkIHRoZSBwYWdlDQogICAgICAgICAgICAkY29udGVudF9kdW1wWyRpXS0+Y3JlYXRlZC0+YnkgPSAkdGhldXNlcnNbJGszXTsNCiAgICAgICAgICB9DQogICAgICAgICAgDQogICAgICAgICAgaWYoJGNvbnRlbnRfZHVtcFskaV0tPm1vZGlmaWVkLT5ieSA9PT0gJHRoZXVzZXJzWyRrM10tPmlkKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgICMgd2UgZm91bmQgdGhlIHVzZXIgd2hvIG1hZGUgdGhlIGxhc3QgbW9kaWZpY2F0aW9uDQogICAgICAgICAgICAkY29udGVudF9kdW1wWyRpXS0+bW9kaWZpZWQtPmJ5ID0gJHRoZXVzZXJzWyRrM107DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICB9DQogICAgICANCiAgICAgIGlmKCRleHRlbnNpb24pDQogICAgICB7DQogICAgICAgICMgQ29tcGFyZSBhZ2FpbnN0IGNvbnRlbnRfcHJvcCBJRHMgdG8gZXhwYW5kIGVudHJ5IGRhdGEgKGV4dGVuc2lvbnMpDQogICAgICAgIGZvcigkazIgPSAwOyAkazIgPD0gJGNvdW50X2NvbnRlbnRfcHJvcHMgLSAxOyAkazIrKykNCiAgICAgICAgew0KICAgICAgICAgIGlmKCRjb250ZW50X2R1bXBbJGldLT5jb250ZW50LT5pZCA9PT0gJGNvbnRlbnRfcHJvcHNbJGsyXVsnY29udGVudF9pZCddKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgICMgV2UgZm91bmQgb3V0IHRoYXQgdGhlcmUgaXMgc29tZSBleHRyYSBjb250ZW50IGZvciB0aGlzIHBhZ2UsIHNvIGxldCdzIGZsYWcgdGhlIGl0ZW0NCiAgICAgICAgICAgICRjb250ZW50X2R1bXBbJGldLT5leHRlbnNpb24gPSAxOw0KICAgICAgICAgICAgIyBOb3cgbGV0J3MgYXNzaWduIHRoZSBkYXRhIChyZW1lbWJlcjogb25seSB3aGVuIGF2YWlsYWJsZSkNCiAgICAgICAgICAgICMgdG8gY2xhc3MgbmFtZXMgKHdlIHVzZSB0aGUgcHJvcF9uYW1lcyBhcyBjbGFzcy1uYW1lcykNCiAgICAgICAgICAgICRjb250ZW50X2R1bXBbJGldLT5leHRlbnNpb25zLT4kY29udGVudF9wcm9wc1skazJdWydwcm9wX25hbWUnXS0+ZGF0YSA9ICRjb250ZW50X3Byb3BzWyRrMl1bJ2NvbnRlbnQnXTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgaWYoJ2NvbXBpbGUnID09PSAkY19zbWFydHkpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICRfY29tcGlsZWQgPSAnJzsNCiAgICAgICAgICAgICAgIyBFeHRlbnNpb24gZGF0YSBmaWVsZHMgc2hvdWxkIGJlIGNvbXBpbGVkDQogICAgICAgICAgICAgICRzbWFydHktPl9jb21waWxlX3NvdXJjZSgndGVtcG9yYXJ5IHRlbXBsYXRlJywgJGNvbnRlbnRfZHVtcFskaV0tPmNvbnRlbnQtPmRhdGEsICRfY29tcGlsZWQpOw0KICAgICAgICAgICAgICBAXG9iX3N0YXJ0KCk7DQogICAgICAgICAgICAgICRzbWFydHktPl9ldmFsKCc/PicgLiAkX2NvbXBpbGVkKTsNCiAgICAgICAgICAgICAgJGNvbnRlbnRfZHVtcFskaV0tPmNvbnRlbnQtPmRhdGEgPSBAXG9iX2dldF9jb250ZW50cygpOw0KICAgICAgICAgICAgICBAXG9iX2VuZF9jbGVhbigpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZSBpZignc3RyaXAnID09PSAkY19zbWFydHkpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICMgRXh0ZW5zaW9uIGRhdGEgZmllbGQgc2hvdWxkIGJlIHN0cmlwcGVkDQogICAgICAgICAgICAgICRjb250ZW50X2R1bXBbJGldLT5jb250ZW50LT5kYXRhID0gdXRpbHM6OnN0cmlwX291dCgkY29udGVudF9kdW1wWyRpXS0+Y29udGVudC0+ZGF0YSwgJ3NtYXJ0eScpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgLy8gICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAvLyAgICAgICAgICAgIHsNCiAgICAgICAgICAgIC8vICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICBpZignc3RyaXAnID09PSAkY19odG1sKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAjIEhUTUwsIEpTIGFuZCBpbmxpbmUgc3R5bGVzIHNob3VsZCBiZSBzdHJpcHBlZA0KICAgICAgICAgICAgICAkY29udGVudF9kdW1wWyRpXS0+ZXh0ZW5zaW9ucy0+JGNvbnRlbnRfcHJvcHNbJGsyXVsncHJvcF9uYW1lJ10tPmRhdGEgPSB1dGlsczo6c3RyaXBfb3V0KA0KICAgICAgICAgICAgICAgICRjb250ZW50X2R1bXBbJGldLT5leHRlbnNpb25zLT4kY29udGVudF9wcm9wc1skazJdWydwcm9wX25hbWUnXS0+ZGF0YSwgJ2h0bWwnDQogICAgICAgICAgICAgICk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgICRjb250ZW50X2R1bXBbJGldLT5leHRlbnNpb25zLT4kY29udGVudF9wcm9wc1skazJdWydwcm9wX25hbWUnXS0+bGVuZ3RoID0gXHN0cmxlbigNCiAgICAgICAgICAgICAgJGNvbnRlbnRfZHVtcFskaV0tPmV4dGVuc2lvbnMtPiRjb250ZW50X3Byb3BzWyRrMl1bJ3Byb3BfbmFtZSddLT5kYXRhDQogICAgICAgICAgICApOw0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgDQogICAgICBpZignY29tcGlsZScgPT09ICRjX3NtYXJ0eSkNCiAgICAgIHsNCiAgICAgICAgIyBwcmV2ZW50IGNhbGxpbmcgcGFnZSB0byBiZSBwcm9jZXNzZWQgaW4gc21hcnR5DQogICAgICAgIGlmKCRjb250ZW50X2R1bXBbJGldLT5jb250ZW50LT5pZCAhPT0gXGNtc191dGlsczo6Z2V0X2N1cnJlbnRfcGFnZWlkKCkpDQogICAgICAgIHsNCiAgICAgICAgICAkc21hcnR5LT5fY29tcGlsZV9zb3VyY2UoJ3RlbXBvcmFyeSB0ZW1wbGF0ZScsICRjb250ZW50X2R1bXBbJGldLT5jb250ZW50LT5kYXRhLCAkX2NvbXBpbGVkKTsNCiAgICAgICAgICBAXG9iX3N0YXJ0KCk7DQogICAgICAgICAgJHNtYXJ0eS0+X2V2YWwoJz8+JyAuICRfY29tcGlsZWQpOw0KICAgICAgICAgICRjb250ZW50X2R1bXBbJGldLT5jb250ZW50LT5kYXRhID0gQFxvYl9nZXRfY29udGVudHMoKTsNCiAgICAgICAgICBAXG9iX2VuZF9jbGVhbigpOw0KICAgICAgICB9DQogICAgICB9DQogICAgICBlbHNlIGlmKCdzdHJpcCcgPT09ICRjX3NtYXJ0eSkNCiAgICAgIHsNCiAgICAgICAgJGNvbnRlbnRfZHVtcFskaV0tPmNvbnRlbnQtPmRhdGEgPSB1dGlsczo6c3RyaXBfb3V0KCRjb250ZW50X2R1bXBbJGldLT5jb250ZW50LT5kYXRhLCAnc21hcnR5Jyk7DQogICAgICB9DQogICAgICANCiAgICAgIGlmKCdzdHJpcCcgPT09ICRjX2h0bWwpDQogICAgICB7DQogICAgICAgICRjb250ZW50X2R1bXBbJGldLT5jb250ZW50LT5kYXRhID0gdXRpbHM6OnN0cmlwX291dCgkY29udGVudF9kdW1wWyRpXS0+Y29udGVudC0+ZGF0YSwgJ2h0bWwnKTsNCiAgICAgIH0NCiAgICB9DQogICAgDQogICAgIyBSZXR1cm4gUmVzdWx0cw0KICAgIA0KICAgICRzbWFydHktPmFzc2lnbigkYXNzaWduLCAkY29udGVudF9kdW1wKTsNCiAgICANCiAgICBpZihpc3NldCgkcGFnZXJfaW5mbykpDQogICAgew0KICAgICAgJHNtYXJ0eS0+YXNzaWduKCdwYWdlcl9pbmZvJywgJHBhZ2VyX2luZm8pOw0KICAgIH0NCiAgICANCiAgICBcc2V0bG9jYWxlKFxMQ19USU1FLCAnJyk7DQogICAgDQogICAgcmV0dXJuICcnOw0KICB9DQogIA0KICANCiAgcHVibGljIGZ1bmN0aW9uIHNtYXJ0eV9mdW5jdGlvbl9maWxlc19saXN0KCRwYXJhbXMsICR0ZW1wbGF0ZSkNCiAgew0KICAgICMgaW5pdGlhbGl6YXRpb24gIGFuZCBkZWZhdWx0cyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAkZmlsZV9leHQgICAgICAgICAgID0gJyc7DQogICAgJGRvd25sb2FkICAgICAgICAgICA9IEZBTFNFOw0KICAgICRxX3ZhciAgICAgICAgICAgICAgPSAkcGFyYW1zWydxdWVyeV92YXInXSA/PyAnZmwnOyAjIHNldHMgdGhlIHF1ZXJ5IHZhcmlhYmxlDQogICAgJGZvbGRlciAgICAgICAgICAgICA9IGlzc2V0KCRwYXJhbXNbJ2ZvbGRlciddKSA/IFxydHJpbSgkcGFyYW1zWydmb2xkZXInXSwgJy8nKQ0KICAgICAgOiAndXBsb2Fkcyc7ICAjIGZvbGRlciB0byByZWFkIGZyb20NCiAgICAkZGVsaW1pdGVyICAgICAgICAgID0gJHBhcmFtc1snZGVsaW1pdGVyJ10gPz8gJ18nOw0KICAgICRkYXRlICAgICAgICAgICAgICAgPSAhaXNzZXQoJHBhcmFtc1snZGF0ZSddKSB8fCAoYm9vbCkkcGFyYW1zWydkYXRlJ107DQogICAgJHNob3dfaGlkZGVuICAgICAgICA9IGlzc2V0KCRwYXJhbXNbJ3Nob3dfaGlkZGVuJ10pIHx8IChib29sKSRwYXJhbXNbJ3Nob3dfaGlkZGVuJ107DQogICAgJGNvdW50X2Rvd25sb2FkcyAgICA9IGlzc2V0KCRwYXJhbXNbJ2NvdW50X2Rvd25sb2FkcyddKSB8fCAoYm9vbCkkcGFyYW1zWydjb3VudF9kb3dubG9hZHMnXTsNCiAgICAkc2hvd19zaXplICAgICAgICAgID0gIWlzc2V0KCRwYXJhbXNbJ3Nob3dfc2l6ZSddKSB8fCAoYm9vbCkkcGFyYW1zWydzaG93X3NpemUnXTsNCiAgICAkc3RyaXBfZXh0ZW5zaW9uICAgID0gaXNzZXQoJHBhcmFtc1snc3RyaXBfZXh0ZW5zaW9uJ10pICYmIChib29sKSRwYXJhbXNbJ3N0cmlwX2V4dGVuc2lvbiddOw0KICAgICRkbF9jb3VudGVyX2RiX2RpciAgPSAkcGFyYW1zWydjb3VudGVyX2RiX2RpciddID8/ICcnOw0KICAgICRkbF9jb3VudGVyX2RiX2ZuICAgPSAkcGFyYW1zWydkbF9jb3VudGVyX2RiX2ZuJ10gPz8gJy5jb3VudGVyX2RiJzsNCiAgICAkZmlsZV9leHRlbnNpb24gICAgID0gJHBhcmFtc1snZmlsZV9leHRlbnNpb24nXSA/PyAnJzsNCiAgICAvLyRzaXplICAgICAgICAgICAgICAgPSAkcGFyYW1zWydzaXplJ10gPz8gJ1NpemUnOw0KICAgICRkYXRlZm9ybWF0ICAgICAgICAgPSAkcGFyYW1zWydkYXRlZm9ybWF0J10gPz8gJ1ktbS1kIEg6aTpzJzsNCiAgICAkYnJvd3NlX3N1Yl9kaXJzICAgID0gIWlzc2V0KCRwYXJhbXNbJ2Jyb3dzZV9zdWJfZGlycyddKSB8fCAoYm9vbCkkcGFyYW1zWydicm93c2Vfc3ViX2RpcnMnXTsNCiAgICAkbWF4X2VudHJpZXMgICAgICAgID0gaXNzZXQoJHBhcmFtc1snbWF4X2VudHJpZXMnXSkgPyAoaW50KSRwYXJhbXNbJ21heF9lbnRyaWVzJ10gOiAwOyAjIDAgPSBhbGwNCiAgICAkbWF4X2VudHJpZXMgICAgICAgID0gJ2FsbCcgPT0gJG1heF9lbnRyaWVzID8gMCA6IChpbnQpJHBhcmFtc1snbWF4X2VudHJpZXMnXTsgIyAwID0gYWxsDQogICAgJHRodW1ic19mb2xkZXIgICAgICA9ICRwYXJhbXNbJ3RodW1ic19mb2xkZXInXSA/PyAndGh1bWJzJzsNCiAgICAkb2JmdXNjYXRlX2Rvd25sb2FkID0gIWlzc2V0KCRwYXJhbXNbJ29iZnVzY2F0ZV9kb3dubG9hZCddKSB8fCAoYm9vbCkkcGFyYW1zWydvYmZ1c2NhdGVfZG93bmxvYWQnXTsgIyBkZWZhdWx0ID0gdHJ1ZQ0KICAgICRzZWN1cml0eV90b2tlbiAgICAgPSAhaXNzZXQoJHBhcmFtc1snc2VjdXJpdHlfdG9rZW4nXSkgfHwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgKGJvb2wpJHBhcmFtc1snc2VjdXJpdHlfdG9rZW4nXTsgIyByZXF1aXJlIGEgc2VjdXJpdHkgdG9rZW4gZGVmYXVsdCA9IHRydWUNCiAgICAkc2VjdXJpdHlfdG9rZW5fcXYgID0gJHBhcmFtc1snc2VjdXJpdHlfdG9rZW5fcXYnXSA/PyAnX3N0JzsNCiAgICAkcm9vdCAgICAgICAgICAgICAgID0gaXNzZXQoJHBhcmFtc1sncm9vdCddKSAmJiAoYm9vbCkkcGFyYW1zWydyb290J107DQogICAgJHNvcnQgICAgICAgICAgICAgICA9ICRwYXJhbXNbJ3NvcnQnXSA/PyAnJzsgIyBDaGVjayBpZiB1c2VyIGhhcyBzcGVjaWZpZWQgc29ydCBvcmRlcg0KICAgIA0KICAgICRzZXJ2ZV9mbiAgICAgICAgICAgPSAnJzsNCiAgICAkdG9rZW4gICAgICAgICAgICAgID0gJyc7DQogICAgJGZpbGVzX2RiICAgICAgICAgICA9IFtdOw0KICAgIA0KICAgICMgcm9vdCBwYXJhbSB0cnVlIG1ha2VzIG9iZnVzY2F0ZSB0cnVlDQogICAgJG9iZnVzY2F0ZV9kb3dubG9hZCA9ICRvYmZ1c2NhdGVfZG93bmxvYWQgfHwgJHJvb3Q7DQogICAgDQogICAgJGdldF9wYXJhbXMgPSAkX0dFVCA/PyBbXTsNCiAgICANCiAgICBpZigkc2VjdXJpdHlfdG9rZW4gJiYgJG9iZnVzY2F0ZV9kb3dubG9hZCkNCiAgICB7DQogICAgICANCiAgICAgICMgZG8gd2UgaGF2ZSBhIHNlc3Npb24gdG9rZW4/IHVzZSBpdCwgb3RoZXJ3aXNlIGNyZWF0ZSBvbmUgYnV0IGRpc2FsbG93IGRvd25sb2FkaW5nIG9uIHRoaXMgcGFzc2FnZQ0KICAgICAgaWYoICFpc3NldCgkX1NFU1NJT05bJ3V0aWxzOjpzdCddKSApDQogICAgICB7DQogICAgICAgICRzdCAgICAgICAgICAgICAgICAgICAgPSBcYmluMmhleChcb3BlbnNzbF9yYW5kb21fcHNldWRvX2J5dGVzKDE2KSk7DQogICAgICAgICRfU0VTU0lPTlsndXRpbHM6OnN0J10gPSAkc3Q7DQogICAgICB9DQogICAgICBlbHNlDQogICAgICB7DQogICAgICAgICRzdCAgICAgICA9ICRfU0VTU0lPTlsndXRpbHM6OnN0J107DQogICAgICAgICRkb3dubG9hZCA9IChpc3NldCgkZ2V0X3BhcmFtc1skc2VjdXJpdHlfdG9rZW5fcXZdKSAmJiAkc3QgPT09ICRnZXRfcGFyYW1zWyRzZWN1cml0eV90b2tlbl9xdl0pOw0KICAgICAgICAkdG9rZW4gICAgPSAkZG93bmxvYWQgPyAkZ2V0X3BhcmFtc1skc2VjdXJpdHlfdG9rZW5fcXZdIDogJHN0Ow0KICAgICAgfQ0KICAgIH0NCiAgDQogICAgIyBzZXQgc29tZSBwYXJhbWV0ZXJzIG5lZWRlZCBmb3IgdGhlIGNvdW50ZXINCiAgICAkcHJtcyA9IFsNCiAgICAgICdjb3VudF9kb3dubG9hZHMnICAgPT4gJGNvdW50X2Rvd25sb2FkcywNCiAgICAgICdkbF9jb3VudGVyX2RiX2RpcicgPT4gJGRsX2NvdW50ZXJfZGJfZGlyLA0KICAgICAgJ2RsX2NvdW50ZXJfZGJfZm4nICA9PiAkZGxfY291bnRlcl9kYl9mbiwNCiAgICAgICdmb2xkZXInICAgICAgICAgICAgPT4gJGZvbGRlcg0KICAgIF07DQogICAgDQogICAgDQogICAgaWYoIWVtcHR5KCRnZXRfcGFyYW1zWyRxX3Zhcl0pKQ0KICAgIHsNCiAgICAgIGlmKCRkb3dubG9hZCkNCiAgICAgIHsNCiAgICAgICAgJHNlcnZlX2ZuID0gXHVybGRlY29kZSgkZ2V0X3BhcmFtc1skcV92YXJdKTsNCiAgICAgICAgJHQgICAgICAgID0gXGV4cGxvZGUoJy8nLCAkc2VydmVfZm4pOw0KICAgICAgICAkc2VydmVfZm4gPSBcYXJyYXlfcG9wKCR0KTsNCiAgICAgICAgJHN1Yl9kaXIgID0gXGltcGxvZGUoJy8nLCAkdCk7DQogICAgICB9DQogICAgICBlbHNlDQogICAgICB7DQogICAgICAgICRzdWJfZGlyXzEgPSBcdXJsZGVjb2RlKCRnZXRfcGFyYW1zWyRxX3Zhcl0pOw0KICAgICAgICAkc3ViX2RpciAgPSBcc3RyX3JlcGxhY2UoJy4uJywgJycsICRzdWJfZGlyXzEpOw0KICAgICAgfQ0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgJHN1Yl9kaXIgPSAnJzsNCiAgICB9DQogICAgDQogICAgJGNvbmZpZyAgICA9IGNtc21zKCktPkdldENvbmZpZygpOw0KICAgICRyb290X3BhdGggPSAkcm9vdCA/ICcnIDogJGNvbmZpZ1sncm9vdF9wYXRoJ107DQogICAgDQogICAgJGZpbGVfbmFtZXMgPSBbXTsNCiAgICAkZmlsZV90eXBlcyA9IFtdOw0KICAgICRmaWxlX2RhdGVzID0gW107DQogICAgJGZpbGVfc2l6ZXMgPSBbXTsNCiAgICAjIGRvbmUgaW5pdGlhbGl6YXRpb24gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgIA0KICAgICRkaXIgPSBjbXNfam9pbl9wYXRoKCRyb290X3BhdGgsIHV0aWxzOjp1cmlfMl9wYXRoKHV0aWxzOjpqb2luX3VyaSgkZm9sZGVyLCAkc3ViX2RpcikpKTsNCiAgICANCiAgICBpZiggISRoYW5kbGUgPSBcb3BlbmRpcigkZGlyKSApDQogICAgew0KICAgICAgJG1lc3NhZ2VzWydlcnJvciddW10gPSAnY291bGQgbm90IHJlYWQgJyAuICRnZXRfcGFyYW1zWyRxX3Zhcl0gLiAnISc7DQogICAgICAkaGFuZGxlICAgICAgICAgICAgID0gXG9wZW5kaXIoJGZvbGRlcik7DQogICAgICAkZ2V0X3BhcmFtc1skcV92YXJdID0gJyc7DQogICAgICAkc3ViX2RpciAgICAgICAgICAgICA9ICcnOw0KICAgIH0NCiAgICANCiAgICAkZl9jb3VudCAgID0gMDsNCiAgICAkbWF4X2NvdW50ID0gMTsNCiAgICANCiAgICB3aGlsZSggJGhhbmRsZSAmJiAoIEZBTFNFICE9PSAoJGVudHJ5ID0gXHJlYWRkaXIoJGhhbmRsZSkgKSApICkNCiAgICB7DQogICAgICBpZignLicgIT09ICRlbnRyeSAmJiAnLi4nICE9PSAkZW50cnkpDQogICAgICB7DQogICAgICAgICMgcHJldmVudCBzaG93aW5nIGhpZGRlbiBmaWxlcyB1bmxlc3Mgd2Ugd2FudCB0bw0KICAgICAgICBpZiggISRzaG93X2hpZGRlbiAmJiBcc3RhcnRzd2l0aCgkZW50cnksICcuJykgKSB7IGNvbnRpbnVlOyB9DQogICAgICAgIA0KICAgICAgICAkZl9jb3VudCsrOw0KICAgICAgICAkZnVsbF9uYW1lID0gY21zX2pvaW5fcGF0aCgkcm9vdF9wYXRoLCB1dGlsczo6dXJpXzJfcGF0aCh1dGlsczo6am9pbl91cmkoJGZvbGRlciwgJHN1Yl9kaXIsICRlbnRyeSkpKTsNCiAgICAgICAgDQogICAgICAgIGlmKCRkb3dubG9hZCAmJiAkc2VydmVfZm4gPT09ICRlbnRyeSkNCiAgICAgICAgew0KICAgICAgICAgIHV0aWxzOjpkb19kb3dubG9hZCgkZnVsbF9uYW1lLCBcdXJsZW5jb2RlKCRlbnRyeSksICRwcm1zKTsNCiAgICAgICAgfQ0KICANCiAgICAgICAgI0luc2VydCBmaWxlbmFtZSwgZmlsZXR5cGUsIGZpbGV0aW1lIGFuZCBmaWxlc2l6ZSBpbnRvIGFycmF5cw0KICAgICAgICAkZmlsZV9uYW1lc1tdID0gJGVudHJ5Ow0KICAgICAgICAkZmlsZV90eXBlc1tdID0gXGZpbGV0eXBlKCRmdWxsX25hbWUpOw0KICAgICAgICAkZmlsZV9kYXRlc1tdID0gXGZpbGVtdGltZSgkZnVsbF9uYW1lKTsNCiAgICAgICAgJGZpbGVfc2l6ZXNbXSA9IFxzcHJpbnRmKCAnJXUnLCBcZmlsZXNpemUoJGZ1bGxfbmFtZSkgKTsNCiAgICAgIH0NCiAgICB9DQogICAgDQogICAgXGNsb3NlZGlyKCRoYW5kbGUpOw0KICAgICRmX2NvdW50LS07DQogICAgDQogICAgJGZpbGVfc2hvcnRuYW1lcyA9IFxhcnJheV9tYXAoJ1xzdHJ0b2xvd2VyJywgJGZpbGVfbmFtZXMpOw0KICAgIA0KICAgICMgQ2hhbmdlIGZpbGUgc29ydCBvcmRlciBpZiBuZWVkZWQNCiAgICAkc29ydCAuPSAnICAnOw0KICAgIA0KICAgIGlmKCAwID09PSBcc3RyaXBvcygkc29ydCwgJ2QnKSApDQogICAgew0KICAgICAgaWYoIDAgPT09IFxzdHJpcG9zKCRzb3J0LCAnZGQnKSApDQogICAgICB7DQogICAgICAgIFxhcnJheV9tdWx0aXNvcnQoJGZpbGVfZGF0ZXMsIFxTT1JUX0RFU0MsICRmaWxlX3R5cGVzLCAkZmlsZV9zaG9ydG5hbWVzLCAkZmlsZV9uYW1lcyk7DQogICAgICB9DQogICAgICBlbHNlDQogICAgICB7DQogICAgICAgIFxhcnJheV9tdWx0aXNvcnQoJGZpbGVfZGF0ZXMsIFxTT1JUX0FTQywgJGZpbGVfdHlwZXMsICRmaWxlX3Nob3J0bmFtZXMsICRmaWxlX25hbWVzKTsNCiAgICAgIH0NCiAgICB9DQogICAgZWxzZSBpZiggJ3MnID09PSBcc3RydG9sb3dlcigkc29ydFswXSkgKQ0KICAgIHsNCiAgICAgIGlmKCAwID09PSBcc3RyaXBvcygkc29ydCwgJ3NkJykgKQ0KICAgICAgew0KICAgICAgICBcYXJyYXlfbXVsdGlzb3J0KCRmaWxlX3NpemVzLCBcU09SVF9ERVNDLCAkZmlsZV90eXBlcywgJGZpbGVfc2hvcnRuYW1lcywgJGZpbGVfbmFtZXMpOw0KICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgew0KICAgICAgICBcYXJyYXlfbXVsdGlzb3J0KCRmaWxlX3NpemVzLCBcU09SVF9BU0MsICRmaWxlX3R5cGVzLCAkZmlsZV9zaG9ydG5hbWVzLCAkZmlsZV9uYW1lcyk7DQogICAgICB9DQogICAgfQ0KICAgIGVsc2UgaWYoMCA9PT0gXHN0cmlwb3MoJHNvcnQsICduJykpDQogICAgew0KICAgICAgaWYoMCA9PT0gXHN0cmlwb3MoJHNvcnQsICduZCcpKQ0KICAgICAgew0KICAgICAgICBcYXJyYXlfbXVsdGlzb3J0KCRmaWxlX3Nob3J0bmFtZXMsIFxTT1JUX0RFU0MsICRmaWxlX25hbWVzLCAkZmlsZV90eXBlcyk7DQogICAgICB9DQogICAgICBlbHNlDQogICAgICB7DQogICAgICAgIFxhcnJheV9tdWx0aXNvcnQoJGZpbGVfc2hvcnRuYW1lcywgXFNPUlRfQVNDLCAkZmlsZV9uYW1lcywgJGZpbGVfdHlwZXMpOw0KICAgICAgfQ0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgXGFycmF5X211bHRpc29ydCgkZmlsZV90eXBlcywgJGZpbGVfc2hvcnRuYW1lcywgJGZpbGVfbmFtZXMpOw0KICAgIH0NCiAgICANCiAgICAjIG1lc3NhZ2VzIHRvIGRpc3BsYXkgb24gdGhlIGZyb250ZW5kDQogICAgJG1lc3NhZ2VzICAgPSBbXTsNCiAgICAkZmlsZXNfbGlzdCA9IFtdOw0KICAgIA0KICAgIGlmKCEkbWF4X2VudHJpZXMpDQogICAgew0KICAgICAgJG1heF9lbnRyaWVzID0gJGZfY291bnQgKyAxOw0KICAgIH0gIyAwID09IGFsbA0KICAgIA0KICAgIGlmKCFlbXB0eSgkZ2V0X3BhcmFtc1skcV92YXJdKSAmJiAoJG1heF9jb3VudCA8PSAkbWF4X2VudHJpZXMpKQ0KICAgIHsNCiAgICAgICRlbnRyeVsnbmFtZSddICAgICA9ICcuLic7DQogICAgICAkZW50cnlbJ3R5cGUnXSAgICAgPSAncGFyZW50X2Rpcic7DQogICAgICAkZW50cnlbJ3VybCddICAgICAgPSB1dGlsczo6cmVjcmVhdGVfVXJsKCB1dGlsczo6am9pbl91cmkoJHN1Yl9kaXIsICcuLicpICk7DQogICAgICAkZW50cnlbJ2ZpbGVfZXh0J10gPSAkZmlsZV9leHQ7DQogICAgICAkZmlsZXNfbGlzdFtdICAgICAgPSAkZW50cnk7DQogICAgfQ0KICAgIA0KICAgICRkZWZhdWx0ZXh0ZW5zaW9uID0gWw0KICAgICAgJy5wZGYnLA0KICAgICAgJy5kb2MnLA0KICAgICAgJy5kb2N4JywNCiAgICAgICcudHh0JywNCiAgICAgICcucnRmJywNCiAgICAgICcueGxzJywNCiAgICAgICcueGxzeCcsDQogICAgICAnLmF2aScsDQogICAgICAnLm1vdicsDQogICAgICAnLmlzbycsDQogICAgICAnLmZsdicsDQogICAgICAnLnN3ZicsDQogICAgICAnLmV4ZScNCiAgICBdOw0KICAgIA0KICAgICRpbWFnZV9leHRfbGlzdCA9IFsNCiAgICAgICdpY28nLA0KICAgICAgJ2dpZicsDQogICAgICAnanBnJywNCiAgICAgICdwbmcnDQogICAgXTsNCiAgDQogICAgJHRvdGFsICAgICAgPSAwOw0KICAgICRmaWxlX2NvdW50ID0gMDsNCiAgICAkZGlyX2NvdW50ICA9IDA7DQogICAgJGRsX2RiICAgICAgPSBbXTsNCiAgDQogICAgaWYoJGNvdW50X2Rvd25sb2FkcykNCiAgICB7DQogICAgICAkZGxfZGIgPSB1dGlsczo6cmVhZF9kbF9kYigkcHJtcyk7DQogICAgfQ0KDQogICAgZm9yKCRpID0gMDsgJGkgPD0gJGZfY291bnQ7ICRpKyspDQogICAgew0KICAgICAgaWYoJG1heF9jb3VudCA8PSAkbWF4X2VudHJpZXMpDQogICAgICB7DQogICAgICAgICRmdWxsX25hbWUgID0gXGNtc19qb2luX3BhdGgoJHJvb3RfcGF0aCwgdXRpbHM6OnVyaV8yX3BhdGgodXRpbHM6OmpvaW5fdXJpKCRmb2xkZXIsICRzdWJfZGlyLCAkZmlsZV9uYW1lc1skaV0pKSk7DQogICAgICAgICRkaXJlY3RvcnkgPSBcaXNfZGlyKCRmdWxsX25hbWUpOw0KICAgICAgICANCiAgICAgICAgaWYoISRkaXJlY3RvcnkpDQogICAgICAgIHsNCiAgICAgICAgICAkYXJyYXkgICAgPSBcZXhwbG9kZSgnLicsICRmaWxlX25hbWVzWyRpXSk7DQogICAgICAgICAgJGZpbGVfZXh0ID0gXGVuZCgkYXJyYXkpOw0KICAgICAgICAgICRmaWxlX2NvdW50Kys7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgJGZpbGVfZXh0ID0gJ0RpcmVjdG9yeSc7DQogICAgICAgICAgJGRpcl9jb3VudCsrOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAkZXh0ZW5zaW9uX3RtcCAgICAgPSBcdHJpbSgkZmlsZV9leHRlbnNpb24pOw0KICAgICAgICAkcmVwbGFjZV9leHRlbnNpb24gPSBcZXhwbG9kZSgnLCcsICRleHRlbnNpb25fdG1wKTsNCiAgICAgICAgJGNsZWFuX25hbWUgICAgICAgID0gXHN0cl9yZXBsYWNlKCRkZWxpbWl0ZXIsICcgJywgJGZpbGVfbmFtZXMpOw0KICAgICAgICAkcHJldHR5X2NsZWFuX25hbWUgID0gXHN0cl9yZXBsYWNlKCRkZWZhdWx0ZXh0ZW5zaW9uLCAnICcsICRjbGVhbl9uYW1lKTsNCiAgICAgICAgJHN1cGVyX2NsZWFuX25hbWUgICA9IFxzdHJfcmVwbGFjZSgkcmVwbGFjZV9leHRlbnNpb24sICcgJywgJHByZXR0eV9jbGVhbl9uYW1lKTsNCiAgICAgICAgLy8kY2xlYW5pY29udXJsICAgICA9IFxzdHJfcmVwbGFjZSgkZGVsaW1pdGVyLCAnLScsICRmaWxlX25hbWVzKTsNCiAgICAgICAgLy8kcHJldHR5Y2xlYW5pY29udXJsID0gc3RyX3JlcGxhY2UoJGRlZmF1bHRleHRlbnNpb24sICRpY29uZXh0ZW5zaW9uLCAkY2xlYW5pY29udXJsKTsNCiAgICAgICAgLy8kYXV0b2ljb25wYXRoID0gJ3VwbG9hZHMvaW1hZ2VzL2FwcGljb25zLycgLiAkZmlsZV9uYW1lczsNCiAgICAgICAgLy8kaWNvbnBhdGggPSAndXBsb2Fkcy9pbWFnZXMvYXBwaWNvbnMvJyAuICRwcmV0dHljbGVhbmljb251cmxbJGldOw0KICAgICAgICAvLyRiYXNlUGF0aCA9ICd1cGxvYWRzL2ltYWdlcy9hcHBpY29ucy8nOw0KICAgICAgICANCiAgICAgICAgaWYoJGRpcmVjdG9yeSAmJiAkYnJvd3NlX3N1Yl9kaXJzKQ0KICAgICAgICB7DQogICAgICAgICAgJGhyZWYgPSB1dGlsczo6cmVjcmVhdGVfVXJsKCRmaWxlX25hbWVzWyRpXSwgJHFfdmFyKTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAkaHJlZiAgICAgICAgPSB1dGlsczo6am9pbl91cmkoJGZvbGRlciwgJHN1Yl9kaXIsICRmaWxlX25hbWVzWyRpXSk7DQogICAgICAgICAgJHRodW1ic19wYXRoID0gdXRpbHM6OmpvaW5fdXJpKCRmb2xkZXIsICRzdWJfZGlyLCAkdGh1bWJzX2ZvbGRlciwgJGZpbGVfbmFtZXNbJGldKTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgaWYoICRicm93c2Vfc3ViX2RpcnMgfHwgIVxpc19kaXIoJGZ1bGxfbmFtZSkgKQ0KICAgICAgICB7DQogICAgICAgICAgaWYoJHN0cmlwX2V4dGVuc2lvbiAmJiAhJGRpcmVjdG9yeSkNCiAgICAgICAgICB7DQogICAgICAgICAgICAkZW50cnlbJ25hbWUnXSAgICAgICA9ICRzdXBlcl9jbGVhbl9uYW1lWyRpXTsNCiAgICAgICAgICAgICRlbnRyeVsndHlwZSddICAgICAgID0gJ2ZpbGUnOw0KICAgICAgICAgICAgJGVudHJ5WydzdWJfdHlwZSddICAgID0gKFxpbl9hcnJheSgkZmlsZV9leHQsICRpbWFnZV9leHRfbGlzdCkgPyAnaW1hZ2UnIDogJGZpbGVfZXh0KTsNCiAgICAgICAgICAgICRlbnRyeVsndGh1bWJzX3VybCddID0gJ2ltYWdlJyA9PT0gJGVudHJ5WydzdWJfdHlwZSddID8gJHRodW1ic19wYXRoIDogJyc7DQogICAgICAgICAgICANCiAgICAgICAgICAgIGlmKCRvYmZ1c2NhdGVfZG93bmxvYWQpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICR1cmlfcGFyYW1zICAgPSBbDQogICAgICAgICAgICAgICAgJHNlY3VyaXR5X3Rva2VuX3F2ID0+ICR0b2tlbiwNCiAgICAgICAgICAgICAgICAkcV92YXIgICAgICAgICAgICAgPT4gdXRpbHM6OmpvaW5fdXJpKCRzdWJfZGlyLCAkZmlsZV9uYW1lc1skaV0pDQogICAgICAgICAgICAgIF07DQogICAgICAgICAgICAgICR1cmwgICAgICAgICAgPSB1dGlsczo6Z2V0X25ha2VkX3VyaSgpIC4gJz8nIC4gXGh0dHBfYnVpbGRfcXVlcnkoJHVyaV9wYXJhbXMpOw0KICAgICAgICAgICAgICAkZW50cnlbJ3VybCddID0gJHVybDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgJGVudHJ5Wyd1cmwnXSA9ICRocmVmOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICAkZW50cnlbJ2ZpbGVfZXh0J10gPSAkZmlsZV9leHQ7DQogICAgICAgICAgICAkZW50cnlbJ3RpdGxlJ10gICAgPSAnTGluayB0byBkb3dubG9hZCB0aGUgJyAuICRzdXBlcl9jbGVhbl9uYW1lWyRpXSAuICcgZG9jdW1lbnQgaW4gJyAuICRmaWxlX2V4dCAuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIGZvcm1hdCc7DQogICAgICAgICAgfQ0KICAgICAgICAgIGVsc2UgaWYoISRkaXJlY3RvcnkpDQogICAgICAgICAgew0KICAgICAgICAgICAgJGVudHJ5WyduYW1lJ10gICAgICAgPSAkc3VwZXJfY2xlYW5fbmFtZVskaV07DQogICAgICAgICAgICAkZW50cnlbJ3R5cGUnXSAgICAgICA9ICdmaWxlJzsNCiAgICAgICAgICAgICRlbnRyeVsnc3ViX3R5cGUnXSAgICA9IChcaW5fYXJyYXkoJGZpbGVfZXh0LCAkaW1hZ2VfZXh0X2xpc3QpID8gJ2ltYWdlJyA6ICRmaWxlX2V4dCk7DQogICAgICAgICAgICAkZW50cnlbJ3RodW1ic191cmwnXSA9ICdpbWFnZScgPT09ICRlbnRyeVsnc3ViX3R5cGUnXSA/ICR0aHVtYnNfcGF0aCA6ICcnOw0KICAgICAgICAgICAgDQogICAgICAgICAgICBpZigkb2JmdXNjYXRlX2Rvd25sb2FkKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAkdXJpX3BhcmFtcyAgID0gWw0KICAgICAgICAgICAgICAgICRzZWN1cml0eV90b2tlbl9xdiA9PiAkdG9rZW4sDQogICAgICAgICAgICAgICAgJHFfdmFyICAgICAgICAgICAgID0+IHV0aWxzOjpqb2luX3VyaSgkc3ViX2RpciwgJGZpbGVfbmFtZXNbJGldKQ0KICAgICAgICAgICAgICBdOw0KICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgJHVybCAgICAgICAgICA9IHV0aWxzOjpnZXRfbmFrZWRfdXJpKCkgLiAnPycgLiBcaHR0cF9idWlsZF9xdWVyeSgkdXJpX3BhcmFtcyk7DQogICAgICAgICAgICAgICRlbnRyeVsndXJsJ10gPSAkdXJsOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAkZW50cnlbJ3VybCddID0gJGhyZWY7DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgICRlbnRyeVsnZmlsZV9leHQnXSA9ICRmaWxlX2V4dDsNCiAgICAgICAgICAgICRlbnRyeVsndGl0bGUnXSAgICA9ICdMaW5rIHRvIGRvd25sb2FkIHRoZSAnIC4gJHN1cGVyX2NsZWFuX25hbWVbJGldIC4gJyBkb2N1bWVudCBpbiAnIC4gJGZpbGVfZXh0IC4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgZm9ybWF0JzsNCiAgICAgICAgICB9DQogICAgICAgICAgZWxzZQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgICR0biAgICAgICAgICAgICAgICA9IFxpc19hcnJheSgkc3VwZXJfY2xlYW5fbmFtZSkgPyAkc3VwZXJfY2xlYW5fbmFtZVskaV0gOiAnJzsNCiAgICAgICAgICAgICRlbnRyeVsnbmFtZSddICAgICA9ICR0bjsNCiAgICAgICAgICAgICRlbnRyeVsndHlwZSddICAgICA9ICdkaXInOw0KICAgICAgICAgICAgJGVudHJ5Wyd1cmwnXSAgICAgID0gJGhyZWY7DQogICAgICAgICAgICAkZW50cnlbJ2ZpbGVfZXh0J10gPSAkZmlsZV9leHQ7DQogICAgICAgICAgICAkZW50cnlbJ3RpdGxlJ10gICAgPSAnTGluayB0byB0aGUgJyAuICR0biAuICcgJyAuICRmaWxlX2V4dDsNCiAgICAgICAgICB9DQogIA0KICAgICAgICAgIGlmKCEkZGlyZWN0b3J5ICYmICRjb3VudF9kb3dubG9hZHMpDQogICAgICAgICAgew0KICAgICAgICAgICAgaWYoaXNzZXQoJGRsX2RiWyRmdWxsX25hbWVdKSApDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICRlbnRyeVsnZG93bmxvYWRfY291bnQnXSA9ICRkbF9kYlskZnVsbF9uYW1lXTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgJGVudHJ5Wydkb3dubG9hZF9jb3VudCddID0gMDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgICAgDQogICAgICAgICAgaWYoJHNob3dfc2l6ZSAmJiAhJGRpcmVjdG9yeSkNCiAgICAgICAgICB7DQogICAgICAgICAgICBpZihcc3ByaW50ZignJXUnLCBcZmlsZXNpemUoJGZ1bGxfbmFtZSkgPCAxMDI0KSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgJGVudHJ5WydzaXplJ10gPSBcc3ByaW50ZignJXUnLCBcZmlsZXNpemUoJGZ1bGxfbmFtZSkpIC4gJyBCJzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UgaWYoXHNwcmludGYoJyV1JywgXGZpbGVzaXplKCRmdWxsX25hbWUpIDwgMTAwMDAwMCkpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICRlbnRyeVsnc2l6ZSddID0gXHNwcmludGYoJyV1JywgXGZpbGVzaXplKCRmdWxsX25hbWUpIC8gMTAyNCkgLiAnIEtCJzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UgaWYoXHNwcmludGYoJyV1JywgXGZpbGVzaXplKCRmdWxsX25hbWUpIDwgMTAwMDAwMDAwMCkpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICRlbnRyeVsnc2l6ZSddID0gXHNwcmludGYoJyUwMS4xZicsIFxmaWxlc2l6ZSgkZnVsbF9uYW1lKSAvIDEwNDg1NzYpIC4gJyBNQic7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICRlbnRyeVsnc2l6ZSddID1cc3ByaW50ZignJTAxLjFmJywgXGZpbGVzaXplKCRmdWxsX25hbWUpIC8gMTA3Mzc0MTgyNCkgLiAnIEdCJzsNCiAgICAgICAgICAgIH0NCiAgDQogICAgICAgICAgICAkdG90YWwgKz0gKGludClcc3ByaW50ZignJXUnLCBcZmlsZXNpemUoJGZ1bGxfbmFtZSkpOw0KICAgICAgICAgIH0NCiAgICAgICAgICANCiAgICAgICAgICBpZigkZGF0ZSAmJiAkZGlyZWN0b3J5KQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgICRlbnRyeVsnZGF0ZSddID0gXGRhdGUoJGRhdGVmb3JtYXQsIFxmaWxlbXRpbWUoJGZ1bGxfbmFtZSkpOw0KICAgICAgICAgIH0NCiAgICAgICAgICBlbHNlIGlmKCRkYXRlKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgICRlbnRyeVsnZGF0ZSddID0gXGRhdGUoJGRhdGVmb3JtYXQsIFxmaWxlbXRpbWUoJGZ1bGxfbmFtZSkpOw0KICAgICAgICAgIH0NCiAgICAgICAgICANCiAgICAgICAgICAkbWF4X2NvdW50Kys7DQogICAgICAgICAgDQogICAgICAgICAgJGZpbGVzX2xpc3RbXSA9ICRlbnRyeTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0NCiAgICANCiAgICBpZiggXHNwcmludGYoJyV1JywgKGludCkkdG90YWwgPCAxMDI0KSApDQogICAgew0KICAgICAgJHRvdGFsX3RleHQgPSBcc3ByaW50ZignJXUnLCAoaW50KSR0b3RhbCkgLiAnIEInOw0KICAgIH0NCiAgICBlbHNlIGlmKFxzcHJpbnRmKCcldScsIChpbnQpJHRvdGFsIDwgMTAwMDAwMCkpDQogICAgew0KICAgICAgJHRvdGFsX3RleHQgPSBcc3ByaW50ZignJXUnLCAoaW50KSR0b3RhbCAvIDEwMjQpIC4gJyBLQic7DQogICAgfQ0KICAgIGVsc2UgaWYoXHNwcmludGYoJyV1JywgKGludCkkdG90YWwgPCAxMDAwMDAwMDAwKSkNCiAgICB7DQogICAgICAkdG90YWxfdGV4dCA9IFxzcHJpbnRmKCclMDEuMWYnLCAoaW50KSR0b3RhbCAvIDEwNDg1NzYpIC4gJyBNQic7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAkdG90YWxfdGV4dCA9XHNwcmludGYoJyUwMS4xZicsIChpbnQpJHRvdGFsIC8gMTA3Mzc0MTgyNCkgLiAnIEdCJzsNCiAgICB9DQogIA0KICAgICRmaWxlc19saXN0X29iaiAgICAgICAgICAgICAgICAgID0gbmV3IFxzdGRDbGFzcygpOw0KICAgICRmaWxlc19saXN0X29iai0+bWVzc2FnZXMgICAgICAgID0gJG1lc3NhZ2VzOyAjIHRvIGJlIGltcGxlbWVudGVkOw0KICAgICRmaWxlc19saXN0X29iai0+ZmlsZXMgICAgICAgICAgID0gJGZpbGVzX2xpc3Q7DQogICAgJGZpbGVzX2xpc3Rfb2JqLT50b3RhbF9zaXplX3RleHQgPSAkdG90YWxfdGV4dDsNCiAgICAkZmlsZXNfbGlzdF9vYmotPnRvdGFsX3NpemUgICAgICA9IChpbnQpJHRvdGFsOw0KICAgICRmaWxlc19saXN0X29iai0+ZmlsZV9jb3VudCAgICAgID0gJGZpbGVfY291bnQ7DQogICAgJGZpbGVzX2xpc3Rfb2JqLT5kaXJfY291bnQgICAgICAgPSAkZGlyX2NvdW50Ow0KICAgICRmaWxlc19saXN0X29iai0+aXRlbXNfY291bnQgICAgID0gJGRpcl9jb3VudCArICRmaWxlX2NvdW50Ow0KICAgIA0KICAgICRzbWFydHlfdmFyID0gJHBhcmFtc1snYXNzaWduJ10gPz8gJ2ZpbGVzX2xpc3QnOw0KICAgICR0ZW1wbGF0ZS0+YXNzaWduKCRzbWFydHlfdmFyLCAkZmlsZXNfbGlzdF9vYmopOw0KICB9DQp9DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/class.smx.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNtYXJ0eUV4dCAoYykgMjAyMC0yMDIxIGJ5IENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uCiMgIEFuIGFkZC1vbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBwcm92aWRlIHVzZWZ1bCBmdW5jdGlvbnMKIyAgYW5kIGNvbW1vbmx5IHVzZWQgZ3VpIGNhcGFiaWxpdGllcyB0byBvdGhlciBtb2R1bGVzLgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEEgZm9yayBvZjoKIwojIE1vZHVsZTogQ0dTaW1wbGVTbWFydHkgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpmaW5hbCBjbGFzcyBzbXgKewogIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7IH0KICAKICAvKioKICAgKiBHZXQgdGhlIGN1cnJlbnQgVVJMCiAgICoKICAgKiBAcmV0dXJuIHN0cmluZwogICAqLwogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2VsZl91cmwoKQogIHsKICAgICRzICAgICAgICA9ICggXHh0X3V0aWxzOjpzc2xfcmVxdWVzdCgpICkgPyAncycgOiAnJzsKICAgICRwICAgICAgICA9IHN0cnBvcygkX1NFUlZFUlsnU0VSVkVSX1BST1RPQ09MJ10sICcvJyk7CiAgICAkcHJvdG9jb2wgPSBzdHJ0b2xvd2VyKHN1YnN0cigkX1NFUlZFUlsnU0VSVkVSX1BST1RPQ09MJ10sIDAsICRwKSkgLiAkczsKICAgICRwb3J0ICAgICA9ICgnODAnID09PSAoc3RyaW5nKSRfU0VSVkVSWydTRVJWRVJfUE9SVCddIHx8ICc0NDMnID09PSAoc3RyaW5nKSRfU0VSVkVSWydTRVJWRVJfUE9SVCddKSA/ICcnCiAgICAgIDogKCc6JyAuICRfU0VSVkVSWydTRVJWRVJfUE9SVCddKTsKICAgICRzICAgICAgICA9ICRwcm90b2NvbCAuICc6Ly8nIC4gJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ10gLiAkcG9ydDsKICAgIAogICAgcmV0dXJuICRzIC4gJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ107CiAgfQogIAogIAogIC8qKgogICAqIFRlc3QgaWYgYSBtb2R1bGUgaXMgaW5zdGFsbGVkLCBhbmQgYWN0aXZlLgogICAqCiAgICogQHBhcmFtIHN0cmluZyAkbW9kdWxlIHRoZSBtb2R1bGUgbmFtZQogICAqCiAgICogQHJldHVybiBib29sCiAgICovCiAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBtb2R1bGVfaW5zdGFsbGVkKCRtb2R1bGUpCiAgewogICAgaWYoJycgPT09ICRtb2R1bGUpIHsgcmV0dXJuIDA7IH0KICAgIAogICAgJG1vZHVsZSA9IFxjbXNfdXRpbHM6OmdldF9tb2R1bGUoJG1vZHVsZSk7CiAgICAKICAgICRyZXN1bHQgPSAwOwogICAgCiAgICBpZiggaXNfb2JqZWN0KCRtb2R1bGUpICkgeyAkcmVzdWx0ID0gMTt9CiAgICAKICAgIHJldHVybiAoYm9vbCkgJHJlc3VsdDsKICB9CiAgCiAgCiAgLyoqCiAgICogR2V0IHRoZSBhbGlhcyBvZiB0aGUgc3BlY2lmaWVkIGFsaWFzJyBwYXJlbnQuIGlmIGFueQogICAqCiAgICogQHBhcmFtIHN0cmluZyAkYWxpYXMgVGhlIG9wdGlvbmFsIGFsaWFzLiAgSWYgbm90IHNwZWNpZmllZCwgdGhlIGN1cnJlbnQgcGFnZSBpcyB1c2VkLgogICAqCiAgICogQHJldHVybiBzdHJpbmcKICAgKi8KICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIGdldF9wYXJlbnRfYWxpYXMoJGFsaWFzID0gJycpCiAgewogICAgJGdDbXMgPSBcQ21zQXBwOjpnZXRfaW5zdGFuY2UoKTsKICAgICRobSAgID0gJGdDbXMtPkdldEhpZXJhcmNoeU1hbmFnZXIoKTsKICAgIAogICAgaWYoJycgPT09ICRhbGlhcykKICAgIHsKICAgICAgJGFsaWFzID0gXGNtc191dGlsczo6Z2V0X2N1cnJlbnRfYWxpYXMoKTsKICAgIH0KICAgIAogICAgJG5vZGUgPSAkaG0tPmZpbmRfYnlfdGFnKCdhbGlhcycsICRhbGlhcyk7CiAgICAKICAgIGlmKCEkbm9kZSkgeyByZXR1cm4gJyc7IH0KICAKICAgIHJldHVybiAkbm9kZS0+Z2V0UGFyZW50KCktPmdldF90YWcoJ2FsaWFzJyk7CiAgfQogIAogIAogIC8qKgogICAqIFRlc3QgaWYgYSBwYWdlIGFsaWFzIG9yIGlkLi4uIGlzIGEgY2hpbGQgb2YgYW5vdGhlciBwYWdlIGFsaWFzIG9yIGlkLgogICAqCiAgICogQHBhcmFtIHN0cmluZ3xpbnQgJHRlc3RfcGFyZW50IFRoZSBwYXJlbnQgYWxpYXMgb3IgaWQgdG8gdGVzdCBhZ2FpbnN0CiAgICogQHBhcmFtIHN0cmluZ3xpbnQgJHRlc3RfY2hpbGQgIFRoZSBjaGlsZCBhbGlhcyBvciBpZCB0byB0ZXN0IGFnYWluc3QKICAgKgogICAqIEByZXR1cm4gYm9vbAogICAqLwogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNfY2hpbGRfb2YoJHRlc3RfcGFyZW50LCAkdGVzdF9jaGlsZCkKICB7CiAgICAkZ0NtcyA9IFxDbXNBcHA6OmdldF9pbnN0YW5jZSgpOwogICAgJGhtICAgPSAkZ0Ntcy0+R2V0SGllcmFyY2h5TWFuYWdlcigpOwogICAgCiAgICBpZighJHRlc3RfcGFyZW50KSB7IHJldHVybiBGQUxTRTsgfQogICAgCiAgICBpZighJHRlc3RfY2hpbGQpIHsgcmV0dXJuIEZBTFNFOyB9CiAgCiAgICAkcGFyZW50X2lkICAgPSBOVUxMOwogICAgJG5vZGVfY2hpbGQgID0gTlVMTDsKICAgICRub2RlX3BhcmVudCA9IE5VTEw7CiAgCiAgICAvLyBnZXQgdGhlIGNoaWxkIG5vZGUKICAgIGlmKChpbnQpJHRlc3RfY2hpbGQgPiAwICYmIGlzX251bWVyaWMoJHRlc3RfY2hpbGQpKQogICAgewogICAgICAkbm9kZV9jaGlsZCA9ICRobS0+ZmluZF9ieV90YWcoJ2lkJywgJHRlc3RfY2hpbGQpOwogICAgfQogICAgZWxzZQogICAgewogICAgICAkbm9kZV9jaGlsZCA9ICRobS0+ZmluZF9ieV90YWcoJ2FsaWFzJywgJHRlc3RfY2hpbGQpOwogICAgfQogICAgCiAgICBpZighJG5vZGVfY2hpbGQpIHsgcmV0dXJuIEZBTFNFOyB9CiAgICAKICAgIC8vIGdldCB0aGUgcGFyZW50IG5vZGUsIGFuZCBpdCdzIGlkLgogICAgaWYoKGludCkkdGVzdF9wYXJlbnQgPiAwICYmIGlzX251bWVyaWMoJHRlc3RfcGFyZW50KSkKICAgIHsKICAgICAgJG5vZGVfcGFyZW50ID0gJGhtLT5maW5kX2J5X3RhZygnaWQnLCAkdGVzdF9wYXJlbnQpOwogICAgfQogICAgZWxzZQogICAgewogICAgICAkbm9kZV9wYXJlbnQgPSAkaG0tPmZpbmRfYnlfdGFnKCdhbGlhcycsICR0ZXN0X3BhcmVudCk7CiAgICB9CiAgICAKICAgIGlmKCEkbm9kZV9wYXJlbnQpIHsgcmV0dXJuIEZBTFNFOyB9CiAgICAKICAgICRwYXJlbnRfaWQgPSAoaW50KSRub2RlX3BhcmVudC0+Z2V0X3RhZygnaWQnKTsKICAgIAogICAgaWYoJHBhcmVudF9pZCA8IDEpIHsgcmV0dXJuIEZBTFNFOyB9CiAgICAKICAgIHdoaWxlKCRub2RlX2NoaWxkKQogICAgewogICAgICBpZigkbm9kZV9jaGlsZC0+Z2V0X3RhZygnaWQnKSA9PT0gJHBhcmVudF9pZCkKICAgICAgewogICAgICAgIHJldHVybiBUUlVFOwogICAgICB9CiAgICAgIAogICAgICAkbm9kZV9jaGlsZCA9ICRub2RlX2NoaWxkLT5nZXRfcGFyZW50KCk7CiAgICB9CiAgICAKICAgIHJldHVybiBGQUxTRTsKICB9CiAgCiAgLyoqCiAgICogR2V0IHRoZSBhbGlhcyBvZiB0aGUgcm9vdCBwYWdlIG9mIHRoZSBzcGVjaWZpZWQgYWxpYXMuCiAgICoKICAgKiBAcGFyYW0gc3RyaW5nICRhbGlhcyBUaGUgZGVzaXJlZCBwYWdlIGFsaWFzLiAgSWYgbm90IHNwZWNpZmllZCwgdGhlIGN1cnJlbnQgcGFnZSBhbGlhcyBpcyB1c2VkLgogICAqCiAgICogQHJldHVybiBzdHJpbmcKICAgKi8KICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldF9yb290X2FsaWFzKCRhbGlhcyA9ICcnKQogIHsKICAgICRnQ21zID0gXENtc0FwcDo6Z2V0X2luc3RhbmNlKCk7CiAgICAkaG0gICA9ICRnQ21zLT5HZXRIaWVyYXJjaHlNYW5hZ2VyKCk7CiAgICAKICAgIGlmKCcnID09PSAkYWxpYXMpCiAgICB7CiAgICAgICRhbGlhcyA9IFxjbXNfdXRpbHM6OmdldF9jdXJyZW50X2FsaWFzKCk7CiAgICB9CiAgICAKICAgICRzdGFjayA9IFtdOwogICAgJG5vZGUgID0gJGhtLT5maW5kX2J5X3RhZygnYWxpYXMnLCAkYWxpYXMpOwogICAgCiAgICB3aGlsZSgkbm9kZSAmJiAkbm9kZS0+Z2V0X3RhZygnaWQnKSA+IDApCiAgICB7CiAgICAgICRzdGFja1tdID0gJG5vZGU7CiAgICAgICRub2RlICAgID0gJG5vZGUtPmdldFBhcmVudCgpOwogICAgfQogICAgCiAgICBpZiggMCA9PT0gY291bnQoJHN0YWNrKSApIHsgcmV0dXJuICcnOyB9CiAgCiAgICByZXR1cm4gJHN0YWNrW2NvdW50KCRzdGFjaykgLSAxXS0+Z2V0X3RhZygnYWxpYXMnKTsKICB9CiAgCiAgCiAgLyoqCiAgICogR2V0IHRoZSB0aXRsZSBvZiB0aGUgc3BlY2lmaWVkIHBhZ2UgKGJ5IGFsaWFzKSBvciB0aGUgY3VycmVudCBwYWdlLgogICAqCiAgICogQHBhcmFtIHN0cmluZyAkYWxpYXMgT3B0aW9uYWwgYWxpYXMKICAgKgogICAqIEByZXR1cm4gc3RyaW5nCiAgICovCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRfcGFnZV90aXRsZSgkYWxpYXMgPSAnJykKICB7CiAgICAkY29udGVudG9wcyA9IFxDb250ZW50T3BlcmF0aW9uczo6Z2V0X2luc3RhbmNlKCk7CiAgICAKICAgIGlmKCcnID09PSAkYWxpYXMpCiAgICB7CiAgICAgICRhbGlhcyA9IFxjbXNfdXRpbHM6OmdldF9jdXJyZW50X2FsaWFzKCk7CiAgICB9CiAgICAKICAgICRjb250ZW50ID0gJGNvbnRlbnRvcHMtPkxvYWRDb250ZW50RnJvbUFsaWFzKCRhbGlhcyk7CiAgICAKICAgIGlmKCFpc19vYmplY3QoJGNvbnRlbnQpKSB7IHJldHVybiAnJzsgfQogICAgCiAgICByZXR1cm4gJGNvbnRlbnQtPk5hbWUoKTsKICB9CiAgCiAgCiAgLyoqCiAgICogR2V0IHRoZSBtZW51IHRleHQgb2YgdGhlIHNwZWNpZmllZCBwYWdlIChieSBhbGlhcykgb3IgdGhlIGN1cnJlbnQgcGFnZS4KICAgKgogICAqIEBwYXJhbSBzdHJpbmcgJGFsaWFzIE9wdGlvbmFsIGFsaWFzCiAgICoKICAgKiBAcmV0dXJuIHN0cmluZwogICAqLwogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0X3BhZ2VfbWVudXRleHQoJGFsaWFzID0gJycpCiAgewogICAgJGNvbnRlbnRvcHMgPSBcQ29udGVudE9wZXJhdGlvbnM6OmdldF9pbnN0YW5jZSgpOwogICAgCiAgICBpZignJyA9PT0gJGFsaWFzKQogICAgewogICAgICAkYWxpYXMgPSBcY21zX3V0aWxzOjpnZXRfY3VycmVudF9hbGlhcygpOwogICAgfQogICAgCiAgICAkY29udGVudCA9ICRjb250ZW50b3BzLT5Mb2FkQ29udGVudEZyb21BbGlhcygkYWxpYXMpOwogICAgCiAgICBpZiggIWlzX29iamVjdCgkY29udGVudCkgKSB7IHJldHVybiAnJzsgfQogICAgCiAgICByZXR1cm4gJGNvbnRlbnQtPk1lbnVUZXh0KCk7CiAgfQogIAogIAogIC8qKgogICAqIEdldCB0aGUgdHlwZSBvZiB0aGUgc3BlY2lmaWVkIHBhZ2UgKGJ5IGFsaWFzKSBvciB0aGUgY3VycmVudCBwYWdlLgogICAqCiAgICogQHBhcmFtIHN0cmluZyAkYWxpYXMgT3B0aW9uYWwgYWxpYXMKICAgKgogICAqIEByZXR1cm4gc3RyaW5nCiAgICovCiAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBnZXRfcGFnZV90eXBlKCRhbGlhcyA9ICcnKQogIHsKICAgICRjb250ZW50b3BzID0gXENvbnRlbnRPcGVyYXRpb25zOjpnZXRfaW5zdGFuY2UoKTsKICAgIAogICAgaWYoJycgPT09ICRhbGlhcykKICAgIHsKICAgICAgJGFsaWFzID0gXGNtc191dGlsczo6Z2V0X2N1cnJlbnRfYWxpYXMoKTsKICAgIH0KICAgIAogICAgJGNvbnRlbnQgPSAkY29udGVudG9wcy0+TG9hZENvbnRlbnRGcm9tQWxpYXMoJGFsaWFzKTsKICAgIAogICAgaWYoICFpc19vYmplY3QoJGNvbnRlbnQpICkgeyByZXR1cm4gJyc7IH0KICAgIAogICAgcmV0dXJuICRjb250ZW50LT5UeXBlKCk7CiAgfQogIAogIAogIC8qKgogICAqIFRlc3QgaWYgdGhlIGN1cnJlbnQgcGFnZSBoYXMgY2hpbGRyZW4uCiAgICogRG9lcyBub3QgdGVzdCBmb3IgaGlkZGVuLCBvciBpbmFjdGl2ZSBjaGlsZHJlbi4KICAgKgogICAqIEBwYXJhbSBzdHJpbmcgJGFsaWFzIE9wdGlvbmFsIGFsaWFzCiAgICoKICAgKiBAcmV0dXJuIGJvb2wKICAgKi8KICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIGhhc19jaGlsZHJlbigkYWxpYXMgPSAnJykKICB7CiAgICAkZ0NtcyA9IFxDbXNBcHA6OmdldF9pbnN0YW5jZSgpOwogICAgJGhtICAgPSAkZ0Ntcy0+R2V0SGllcmFyY2h5TWFuYWdlcigpOwogICAgaWYoJycgPT09ICRhbGlhcykKICAgIHsKICAgICAgJGFsaWFzID0gXGNtc191dGlsczo6Z2V0X2N1cnJlbnRfYWxpYXMoKTsKICAgIH0KICAgIAogICAgJG5vZGUgPSAkaG0tPmZpbmRfYnlfdGFnKCdhbGlhcycsICRhbGlhcyk7CiAgICAKICAgIGlmKCEkbm9kZSkgeyByZXR1cm4gRkFMU0U7IH0KICAgIAogICAgcmV0dXJuICRub2RlLT5oYXNfY2hpbGRyZW4oKTsKICB9CiAgCiAgCiAgLyoqCiAgICogUmV0dXJuIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIHBhZ2UgaWRzIG9mIGFsbCBvZiB0aGUgc3BlY2lmaWVkIHBhZ2UncyBjaGlsZHJlbi4KICAgKgogICAqIEBwYXJhbSBzdHJpbmcgJGFsaWFzICAgT3B0aW9uYWwgYWxpYXMKICAgKiBAcGFyYW0gYm9vbCAgICRzaG93YWxsIFdldGhlciB0byBzaG93IGluYWN0aXZlIGNoaWxkcmVuLgogICAqCiAgICogQHJldHVybiBhcnJheQogICAqLwogIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gZ2V0X2NoaWxkcmVuKCRhbGlhcyA9ICcnLCAkc2hvd2FsbCA9IEZBTFNFKQogIHsKICAgIGlmKCcnID09PSAkYWxpYXMpCiAgICB7CiAgICAgICRhbGlhcyA9IFxjbXNfdXRpbHM6OmdldF9jdXJyZW50X2FsaWFzKCk7CiAgICB9CiAgICAKICAgIGlmKCcnID09PSAkYWxpYXMpIHsgcmV0dXJuIFtdOyB9CiAgICAKICAgICRobSAgICAgPSBjbXNtcygpLT5HZXRIaWVyYXJjaHlNYW5hZ2VyKCk7CiAgICAkcGFyZW50ID0gJGhtLT5maW5kX2J5X3RhZygnYWxpYXMnLCAkYWxpYXMpOwogICAgCiAgICBpZighJHBhcmVudCkgeyByZXR1cm4gW107IH0KICAgIAogICAgJGNoaWxkX25vZGVzID0gJHBhcmVudC0+Z2V0Q2hpbGRyZW4oRkFMU0UsIFRSVUUpOwogICAgCiAgICBpZighaXNfYXJyYXkoJGNoaWxkX25vZGVzKSB8fCAwID09PSBjb3VudCgkY2hpbGRfbm9kZXMpICkgeyByZXR1cm4gW107IH0KICAgIAogICAgJHJlc3VsdHMgPSBbXTsKICAgIAogICAgZm9yZWFjaCgkY2hpbGRfbm9kZXMgYXMgJG5vZGUpCiAgICB7CiAgICAgICRjb250ZW50ID0gJG5vZGUtPmdldENvbnRlbnQoKTsKICAgICAgCiAgICAgIGlmKCFpc19vYmplY3QoJGNvbnRlbnQpKSB7IGNvbnRpbnVlOyB9CiAgICAgIGlmKCEkY29udGVudC0+QWN0aXZlKCkgJiYgISRzaG93YWxsKSB7IGNvbnRpbnVlOyB9CiAgICAgIAogICAgICAkcm93ICAgICAgID0gWwogICAgICAgICdhbGlhcycgICAgPT4gJGNvbnRlbnQtPkFsaWFzKCksICdpZCcgPT4gJGNvbnRlbnQtPklkKCksICd0aXRsZScgPT4gJGNvbnRlbnQtPk5hbWUoKSwKICAgICAgICAnbWVudXRleHQnID0+ICRjb250ZW50LT5NZW51VGV4dCgpLAogICAgICAgICdhY3RpdmUnICAgPT4gJGNvbnRlbnQtPkFjdGl2ZSgpLCAnc2hvd19pbl9tZW51JyA9PiAkY29udGVudC0+U2hvd0luTWVudSgpLCAndHlwZScgPT4gJGNvbnRlbnQtPlR5cGUoKQogICAgICBdOwogICAgICAkcmVzdWx0c1tdID0gJHJvdzsKICAgIH0KICAgIAogICAgaWYoIGNvdW50KCRyZXN1bHRzKSApIHsgcmV0dXJuICRyZXN1bHRzOyB9CiAgICAKICAgIHJldHVybiBbXTsKICB9CiAgCiAgLyoqCiAgICogUmV0dXJuIGEgbW9kdWxlJ3MgdmVyc2lvbgogICAqCiAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgbW9kdWxlIG5hbWUKICAgKgogICAqIEByZXR1cm4gc3RyaW5nCiAgICovCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtb2R1bGVfdmVyc2lvbigkbmFtZSkKICB7CiAgICBpZighZW1wdHkoJG5hbWUpKQogICAgewogICAgICAkb2JqID0gXGNtc191dGlsczo6Z2V0X21vZHVsZSgkbmFtZSk7CiAgICAgIGlmKGlzX29iamVjdCgkb2JqKSkKICAgICAgewogICAgICAgIHJldHVybiAkb2JqLT5HZXRWZXJzaW9uKCk7CiAgICAgIH0KICAgIH0KICAgIAogICAgcmV0dXJuICcnOwogIH0KICAKICAKICAvKioKICAgKiBHZXQgcGFnZSBjb250ZW50IChvciBhbnkgcHJvcGVydHkgdmFsdWUpIGZvciB0aGUgY3VycmVudCBwYWdlIG9yIGFub3RoZXIgcGFnZSAoYnkgYWxpYXMpCiAgICoKICAgKiBAcGFyYW0gc3RyaW5nICRhbGlhcyBPcHRpb25hbCBhbGlhcwogICAqIEBwYXJhbSBzdHJpbmcgJGJsb2NrIFRoZSBwcm9wZXJ0eSBuYW1lLiAgSWYgbm90IHNwZWNpZmllZCwgJ2NvbnRlbnRfZW4nIGlzIGFzc3VtZWQuCiAgICoKICAgKiBAcmV0dXJuIHN0cmluZwogICAqLwogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0X3BhZ2VfY29udGVudCgkYWxpYXMgPSBOVUxMLCAkYmxvY2sgPSBOVUxMKQogIHsKICAgICRjb250ZW50ID0gTlVMTDsKICAgICRibG9jayAgID0gdHJpbSgkYmxvY2spOwogICAgCiAgICBpZighJGJsb2NrKSB7ICRibG9jayA9ICdjb250ZW50X2VuJzsgfQogICAgCiAgICBpZighJGFsaWFzKQogICAgewogICAgICAkY29udGVudCA9IENtc0FwcDo6Z2V0X2luc3RhbmNlKCktPmdldF9jb250ZW50X29iamVjdCgpOwogICAgfQogICAgZWxzZQogICAgewogICAgICAkY29udGVudG9wcyA9IFxDb250ZW50T3BlcmF0aW9uczo6Z2V0X2luc3RhbmNlKCk7CiAgICAgICRjb250ZW50ICAgID0gJGNvbnRlbnRvcHMtPkxvYWRDb250ZW50RnJvbUFsaWFzKCRhbGlhcyk7CiAgICB9CiAgICAKICAgIGlmKGlzX29iamVjdCgkY29udGVudCkpCiAgICB7CiAgICAgIHJldHVybiAkY29udGVudC0+R2V0UHJvcGVydHlWYWx1ZSgkYmxvY2spOwogICAgfQogICAgCiAgICByZXR1cm4gJyc7CiAgfQogIAogIAogIC8qKgogICAqIEdldCBhIHNpYmxpbmcgdG8gdGhlIGN1cnJlbnQgcGFnZSAoaWYgYW55KQogICAqCiAgICogQHBhcmFtIG1peGVkICRkaXIgVGhlIGRpcmVjdGlvbiAocG9zc2libGUgdmFsdWVzIGFyZSAtMSxwcmV2LDEsbmV4dCkKICAgKgogICAqIEByZXR1cm4gc3RyaW5nIFRoZSBhbGlhcyBvZiB0aGUgc3BlY2lmaWVkIHBhZ2UuCiAgICovCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRfc2libGluZygkZGlyLCAkYWxpYXMpCiAgewogICAgJGNvbnRlbnRvcHMgPSBcQ29udGVudE9wZXJhdGlvbnM6OmdldF9pbnN0YW5jZSgpOwogICAgCiAgICBpZihlbXB0eSgkYWxpYXMpKQogICAgewogICAgICAkYWxpYXMgPSBcY21zX3V0aWxzOjpnZXRfY3VycmVudF9hbGlhcygpOwogICAgfQogICAgCiAgICAvLyBAdG9kbzogY291bGQgdXNlIHRoZSB0cmVlIGhlcmUgKGZpbmQgdGhlIG5vZGUsIGdldCBpdCdzIHBhcmVudCwgdGhlIHBhcmVudCdzIGNoaWxkcmVuIGFyZSB0aGUgc2libGluZykKICAgICRjb250ZW50ID0gJGNvbnRlbnRvcHMtPkxvYWRDb250ZW50RnJvbUFsaWFzKCRhbGlhcyk7CiAgICAKICAgIGlmKCAhaXNfb2JqZWN0KCRjb250ZW50KSApIHsgcmV0dXJuIEZBTFNFOyB9CiAgICAKICAgIC8vIGdldCB0aGUgbGFzdCBpdGVtIG91dCBvZiB0aGUgaGllcmFyY2h5CiAgICAvLyBhbmQgcmVidWlsZAogICAgJHF1ZXJ5ID0gJ1NFTEVDVCBjb250ZW50X2FsaWFzIEZST00gJyAuIGNtc19kYl9wcmVmaXgoKSAuICdjb250ZW50CiAgICAgICAgICAgICAgV0hFUkUgcGFyZW50X2lkID0gPyBBTkQgaXRlbV9vcmRlciAlcyA/IEFORCBhY3RpdmUgPSAxIE9SREVSIEJZIGl0ZW1fb3JkZXIgJXMgTElNSVQgMSc7CiAgICAKICAgIHN3aXRjaChzdHJ0b2xvd2VyKCRkaXIpKQogICAgewogICAgICBjYXNlICctMSc6CiAgICAgIGNhc2UgJ3ByZXYnOgogICAgICAgICR0aGVjaGFyID0gJzwnOwogICAgICAgICRvcmRlciAgID0gJ0RFU0MnOwogICAgICBicmVhazsKICAgICAgCiAgICAgIGRlZmF1bHQ6CiAgICAgICAgJHRoZWNoYXIgPSAnPic7CiAgICAgICAgJG9yZGVyICAgPSAnQVNDJzsKICAgICAgYnJlYWs7CiAgICB9CiAgCiAgICByZXR1cm4gXENtc0FwcDo6Z2V0X2luc3RhbmNlKCktPkdldERiKCktPkdldE9uZShzcHJpbnRmKCRxdWVyeSwgJHRoZWNoYXIsICRvcmRlciksIFskY29udGVudC0+UGFyZW50SWQoKSwgJGNvbnRlbnQtPkl0ZW1PcmRlcigpXSk7CiAgfQogIAogIC8qKgogICAqIEdldCBhIGZpbGUgbGlzdGluZyBmb3IgYSBzcGVjaWZpZWQgZGlyZWN0b3J5LgogICAqCiAgICogQHBhcmFtIHN0cmluZyAkZGlyICAgICAgICAgICBUaGUgYWJzb2x1dGUgZGlyZWN0b3J5LgogICAqIEBwYXJhbSBzdHJpbmcgJGV4Y2x1ZGVwcmVmaXggT3B0aW9uYWxseSBleGNsdWRlIGZpbGVzIHdpdGggdGhpcyBwcmVmaXguCiAgICoKICAgKiBAcmV0dXJuIHN0cmluZwogICAqLwogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0X2ZpbGVfbGlzdGluZygkZGlyLCAkZXhjbHVkZXByZWZpeCA9ICcnKQogIHsKICAgICRjb25maWcgPSBjbXNfY29uZmlnOjpnZXRfaW5zdGFuY2UoKTsKICAgIAogICAgJGZpbGVwcmVmaXggPSAnJzsKICAgIAogICAgaWYoIWVtcHR5KCRleGNsdWRlcHJlZml4KSkKICAgIHsKICAgICAgJGZpbGVwcmVmaXggPSAkZXhjbHVkZXByZWZpeDsKICAgIH0KICAgIAogICAgaWYoc3RhcnRzd2l0aCgkZGlyLCAnLycpKSB7IHJldHVybiAnJzsgfQogICAgCiAgICAkZGlyICA9IGNtc19qb2luX3BhdGgoJGNvbmZpZ1sndXBsb2Fkc19wYXRoJ10sICRkaXIpOwogIAogICAgcmV0dXJuIGdldF9tYXRjaGluZ19maWxlcygkZGlyLCAnJywgVFJVRSwgVFJVRSwgJGZpbGVwcmVmaXgsIDEpOwogIH0KICAKICAvKioKICAgKiBHZXQgYSBwYXJhbGxlbCBjb250ZW50IG9iamVjdCBnaXZlbiBhIGRpZmZlcmVudCByb290IGFsaWFzCiAgICogaS5lOiBpZiB0aGUgY3VycmVudCAob3Igc3BlY2lmaWVkIHBhZ2UgYWxpYXMpIGlzIGF0IGhpZXJhcmNoeSBsZXZlbCA0LjEuMQogICAqIGFuZCB0aGUgJ25ldyBwYXJlbnQnIGFsaWFzIGlzIGF0IGhpZXJhcmNoeSBsZXZlbCA1CiAgICogdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgcGFnZSBhbGlhcyBmb3IgaGllcmFyY2h5IGxldmVsIDUuMS4xIChpZiBpdCBleGlzdHMpLgogICAqIHVzZWZ1bCBmb3IgbXVsdGktbGFuZyBzaXRlcy4KICAgKgogICAqIEBwYXJhbSBzdHJpbmcgJG5ld19yb290ICAgICBUaGUgYWxpYXMgb2YgdGhlIG5ldyByb290IHBhZ2UgKGkuZTogZnIpCiAgICogQHBhcmFtIHN0cmluZyAkY3VycmVudF9wYWdlIEFuIG9wdGlvbmFsIHBhZ2UgYWxpYXMuICBJZiBub3Qgc3BlY2lmaWVkIHRoZSBjdXJyZW50IHBhZ2UgaXMgdXNlZC4KICAgKgogICAqIEByZXR1cm4gQ29udGVudEJhc2UgdGhlIHBhcmFsbGVsIGNvbnRlbnQgb2JqZWN0LgogICAqLwogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0X3BhcmFsbGVsX2NvbnRlbnQoJG5ld19yb290LCAkY3VycmVudF9wYWdlID0gTlVMTCkKICB7CiAgICBpZihlbXB0eSgkbmV3X3Jvb3QpKSB7IHJldHVybjsgfQogICAgCiAgICAkY29udGVudG9wcyA9IFxDb250ZW50T3BlcmF0aW9uczo6Z2V0X2luc3RhbmNlKCk7CiAgICAKICAgIGlmKGVtcHR5KCRjdXJyZW50X3BhZ2UpKQogICAgewogICAgICAkY3VycmVudF9wYWdlID0gXGNtc191dGlsczo6Z2V0X2N1cnJlbnRfYWxpYXMoKTsKICAgIH0KICAgIAogICAgJGN1cl9jb250ZW50ID0gJGNvbnRlbnRvcHMtPkxvYWRDb250ZW50RnJvbUFsaWFzKCRjdXJyZW50X3BhZ2UpOwogICAgCiAgICBpZighaXNfb2JqZWN0KCRjdXJfY29udGVudCkpIHsgcmV0dXJuOyB9CiAgICAKICAgICR0bXAgPSBzZWxmOjpnZXRfcm9vdF9hbGlhcygkbmV3X3Jvb3QpOyAvLyBtYWtlIHN1cmUgd2UgZ28gdG8gdGhlIHJvb3QKICAgIGlmKCR0bXApIHsgJG5ld19yb290ID0gJHRtcDsgfQogICAgCiAgICAkbmV3X3Jvb3RfY29udGVudCA9ICRjb250ZW50b3BzLT5Mb2FkQ29udGVudEZyb21BbGlhcygkbmV3X3Jvb3QpOwogICAgaWYoIWlzX29iamVjdCgkbmV3X3Jvb3RfY29udGVudCkpIHsgcmV0dXJuOyB9CiAgICAKICAgICRoaWVyMSA9ICRjdXJfY29udGVudC0+SGllcmFyY2h5KCk7CiAgICAkaGllcjIgPSAkbmV3X3Jvb3RfY29udGVudC0+SGllcmFyY2h5KCk7CiAgICBpZighJGhpZXIxIHx8ICEkaGllcjIpIHsgcmV0dXJuOyB9CiAgICAKICAgICRhX2hpZXIxICAgID0gZXhwbG9kZSgnLicsICRoaWVyMSk7CiAgICAkYV9oaWVyMiAgICA9IGV4cGxvZGUoJy4nLCAkaGllcjIpOwogICAgJGFfaGllcjFbMF0gPSAkYV9oaWVyMlswXTsKICAgICRoaWVyMyAgICAgID0gaW1wbG9kZSgnLicsICRhX2hpZXIxKTsKICAgIAogICAgLy8gd2UgaGF2ZSB0aGUgbmV3IGhpZXJhcmNoeS4uLiBqdXN0IGdvdHRhIGZpbmQgdGhlIHJpZ2h0IHBhZ2UgZm9yIGl0LgogICAgJG5ld19wYWdlaWQgPSAkY29udGVudG9wcy0+R2V0UGFnZUlERnJvbUhpZXJhcmNoeSgkaGllcjMpOwogICAgaWYoISRuZXdfcGFnZWlkKSB7IHJldHVybjsgfQogIAogICAgcmV0dXJuICRjb250ZW50b3BzLT5Mb2FkQ29udGVudEZyb21BbGlhcygkbmV3X3BhZ2VpZCk7CiAgfQogIAogIC8qKgogICAqIEdlbmVyYXRlIGEgVVJMIHRvIGFuIGFuY2hvciBvbiB0aGUgc2FtZSBwYWdlCiAgICoKICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIFRoZSBuYW1lIG9mIHRoZSBhbmNob3IKICAgKgogICAqIEByZXR1cm4gc3RyaW5nCiAgICovCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBhbmNob3JfdXJsKCRuYW1lKQogIHsKICAgIGlmKCEkbmFtZSkgeyByZXR1cm4gJyc7IH0KICAgIAogICAgJG5hbWUgPSB0cmltKCRuYW1lKTsKICAgIGlmKCEkbmFtZSkgeyByZXR1cm4gJyc7IH0KICAgIAogICAgJGNvbnRlbnRfb2JqID0gXGNtc191dGlsczo6Z2V0X2N1cnJlbnRfY29udGVudCgpOwogICAgCiAgICBpZighaXNfb2JqZWN0KCRjb250ZW50X29iaikpIHsgcmV0dXJuICcnOyB9CiAgICAKICAgIHJldHVybiAkY29udGVudF9vYmotPkdldFVSTCgpIC4gJyMnIC4gJG5hbWU7CiAgfQogIAogIC8qKgogICAqIEdldCBhIHBhcmFsbGVsIHBhZ2UgYWxpYXMgZ2l2ZW4gYSBkaWZmZXJlbnQgcm9vdCBhbGlhcwogICAqIGkuZTogaWYgdGhlIGN1cnJlbnQgKG9yIHNwZWNpZmllZCBwYWdlIGFsaWFzKSBpcyBhdCBoaWVyYXJjaHkgbGV2ZWwgNC4xLjEKICAgKiBhbmQgdGhlICduZXcgcGFyZW50JyBhbGlhcyBpcyBhdCBoaWVyYXJjaHkgbGV2ZWwgNQogICAqIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlIHBhZ2UgYWxpYXMgZm9yIGhpZXJhcmNoeSBsZXZlbCA1LjEuMSAoaWYgaXQgZXhpc3RzKS4KICAgKiB1c2VmdWwgZm9yIG11bHRpLWxhbmcgc2l0ZXMuCiAgICoKICAgKiBAcGFyYW0gc3RyaW5nICRuZXdfcm9vdCAgICAgVGhlIGFsaWFzIG9mIHRoZSBuZXcgcm9vdCBwYWdlIChpLmU6IGZyKQogICAqIEBwYXJhbSBzdHJpbmcgJGN1cnJlbnRfcGFnZSBBbiBvcHRpb25hbCBwYWdlIGFsaWFzLiAgSWYgbm90IHNwZWNpZmllZCB0aGUgY3VycmVudCBwYWdlIGlzIHVzZWQuCiAgICoKICAgKiBAcmV0dXJuIHN0cmluZyB0aGUgYWxpYXMgb2YgdGhlIHBhcmFsbGVsIHBhZ2UuCiAgICovCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRfcGFyYWxsZWxfcGFnZSgkbmV3X3Jvb3QsICRjdXJyZW50X3BhZ2UgPSBOVUxMKQogIHsKICAgICRjb250ZW50ID0gc2VsZjo6Z2V0X3BhcmFsbGVsX2NvbnRlbnQoJG5ld19yb290LCAkY3VycmVudF9wYWdlKTsKICAgIGlmKCRjb250ZW50KSB7IHJldHVybiAkY29udGVudC0+QWxpYXMoKTsgfQogICAgCiAgICByZXR1cm4gJyc7CiAgfQogIAogIC8qKgogICAqIEdldCB0aGUgVVJMIG9mIGEgcGFyYWxsZWwgcGFnZSBnaXZlbiBhIGRpZmZlcmVudCByb290IGFsaWFzCiAgICogaS5lOiBpZiB0aGUgY3VycmVudCAob3Igc3BlY2lmaWVkIHBhZ2UgYWxpYXMpIGlzIGF0IGhpZXJhcmNoeSBsZXZlbCA0LjEuMQogICAqIGFuZCB0aGUgJ25ldyBwYXJlbnQnIGFsaWFzIGlzIGF0IGhpZXJhcmNoeSBsZXZlbCA1CiAgICogdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgcGFnZSBhbGlhcyBmb3IgaGllcmFyY2h5IGxldmVsIDUuMS4xIChpZiBpdCBleGlzdHMpLgogICAqIHVzZWZ1bCBmb3IgbXVsdGktbGFuZyBzaXRlcy4KICAgKgogICAqIEBwYXJhbSBzdHJpbmcgJG5ld19yb290ICAgICBUaGUgYWxpYXMgb2YgdGhlIG5ldyByb290IHBhZ2UgKGkuZTogZnIpCiAgICogQHBhcmFtIHN0cmluZyAkY3VycmVudF9wYWdlIEFuIG9wdGlvbmFsIHBhZ2UgYWxpYXMuICBJZiBub3Qgc3BlY2lmaWVkIHRoZSBjdXJyZW50IHBhZ2UgaXMgdXNlZC4KICAgKgogICAqIEByZXR1cm4gc3RyaW5nIHRoZSBhbGlhcyBvZiB0aGUgcGFyYWxsZWwgcGFnZS4KICAgKi8KICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIGdldF9wYXJhbGxlbF91cmwoJG5ld19yb290LCAkY3VycmVudF9wYWdlID0gTlVMTCkKICB7CiAgICAkY29udGVudCA9IHNlbGY6OmdldF9wYXJhbGxlbF9jb250ZW50KCRuZXdfcm9vdCwgJGN1cnJlbnRfcGFnZSk7CiAgICBpZigkY29udGVudCkgeyByZXR1cm4gJGNvbnRlbnQtPkdldFVSTCgpOyB9CiAgICAKICAgIHJldHVybiAnJzsKICB9CiAgCn0KCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/class.utils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgU21hcnR5RXh0Ow0KDQpjbGFzcyB1dGlscw0Kew0KICAvKioNCiAgICogcmVsYXRlZCB3aXRoIGNvbnRlbnRfZmV0Y2gNCiAgICovDQogIA0KICAvKioNCiAgICogaWRfdG9fYXJyYXkNCiAgICoNCiAgICogYWRkcyBJRCBvZiBhbiBpdGVtIHRvIGEgbGlzdCAoYXJyYXkpIG9mIElEcy4NCiAgICogSWYgdGhlIElEIGFscmVhZHkgaXMgcGFydCBvZiB0aGUgYXJyYXksIGRvbid0IGFkZCBpdC4NCiAgICoNCiAgICogQHBhcmFtIGFycmF5fG51bGwgJGFycmF5DQogICAqIEBwYXJhbSBudWxsICAgICAgICRpdGVtDQogICAqDQogICAqIEByZXR1cm4gbWl4ZWQNCiAgICovDQogIHN0YXRpYyBmdW5jdGlvbiBpZF90b19hcnJheShhcnJheSAkYXJyYXkgPSBudWxsLCAkaXRlbSA9IG51bGwpDQogIHsNCiAgICANCiAgICBpZiggZW1wdHkoJGl0ZW0pICkgeyByZXR1cm4gICRhcnJheTsgfQ0KICAgIA0KICAgIGlmKCAhXGlzX2FycmF5KCRhcnJheSkgKQ0KICAgIHsNCiAgICAgIGlmKCAhZW1wdHkoJGFycmF5KSApIHsgJGFycmF5ID0gWyRhcnJheV07IH0NCiAgICAgIGVsc2UgeyAkYXJyYXkgPSBbXTsgfQ0KICAgIH0NCiAgICANCiAgICAkc2l6ZSAgPSBcY291bnQoJGFycmF5KTsNCiAgICANCiAgICBmb3IoJHEgPSAwOyAkcSA8PSAkc2l6ZSAtIDE7ICRxKyspDQogICAgew0KICAgICAgaWYoJGFycmF5WyRxXSA9PT0gJGl0ZW0pIHsgcmV0dXJuICRhcnJheTsgfQ0KICAgIH0NCiAgDQogICAgJGFycmF5WyRzaXplXSA9ICRpdGVtOw0KICAgIA0KICAgIHJldHVybiAkYXJyYXk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBnZXRfcGFyZW50X2RhdGENCiAgICoNCiAgICogTG9va3MgZm9yIGFsaWFzIGFuZCBjb250ZW50LW5hbWUgKD10aXRsZSkNCiAgICogb2YgdGhlIHBhZ2VzIHdlIHJlcXVpcmUgdGhpcyBkYXRhDQogICAqIGZvciAob3VyIHByZXZpb3VzbHkgYnVpbGQgYXJyYXkNCiAgICogb2YgcGFyZW50IHBhZ2VzKS4NCiAgICogQWZ0ZXJ3YXJkcywgcHJvdmlkZSBhbiBhcnJheSBvZiBjbGFzc2VzIHRvIGJlIHVzZWQNCiAgICogZm9yIGFkZGluZyB0aGUgZGF0YSB0byB0aGUgaXRlbXMgaW4gb3VyIGNvbnRlbnRfZHVtcC4NCiAgICoNCiAgICogQHBhcmFtIGFycmF5ICRhcnJheWRhdGENCiAgICoNCiAgICogQHJldHVybiBhcnJheQ0KICAgKiBAdGhyb3dzIFxFeGNlcHRpb24NCiAgICovDQogIHN0YXRpYyBmdW5jdGlvbiBnZXRfcGFyZW50X2RhdGEoYXJyYXkgJGFycmF5ZGF0YSkNCiAgew0KICAgICRkYiAgICAgICAgICAgICAgICAgICAgICA9IFxjbXNtcygpLT5HZXREYigpOw0KICAgICRzcWxfcGFyZW50c19xdWVyeV9zdGFydCA9ICdTRUxFQ1QgY29udGVudF9pZCwgY29udGVudF9hbGlhcywgY29udGVudF9uYW1lLCBtZW51X3RleHQNCgkJCUZST00gJyAuIGNtc19kYl9wcmVmaXgoKSAuICdjb250ZW50JzsNCiAgICANCiAgICAkc2l6ZSAgICAgICAgICAgICAgICAgICAgPSBcY291bnQoJGFycmF5ZGF0YSk7DQogICAgJHNxbF9wYXJlbnRfcXVlcnlfd2hhdCAgID0gJyc7DQogICAgDQogICAgZm9yKCRpID0gMDsgJGkgPD0gJHNpemUgLSAxOyAkaSsrKQ0KICAgIHsNCiAgICAgIGlmKDAgPT09ICRpKQ0KICAgICAgew0KICAgICAgICAkc3FsX3BhcmVudF9xdWVyeV93aGF0IC49ICcgV0hFUkUgIGNvbnRlbnRfaWQgPSAnIC4gJGFycmF5ZGF0YVskaV0gLiAnICc7DQogICAgICB9DQogICAgICANCiAgICAgIGlmKCRpID4gMCkNCiAgICAgIHsNCiAgICAgICAgJHNxbF9wYXJlbnRfcXVlcnlfd2hhdCAuPSAnIE9SIGNvbnRlbnRfaWQgPSAnIC4gJGFycmF5ZGF0YVskaV0gLiAnICc7DQogICAgICB9DQogICAgfQ0KICAgIA0KICAgICRzcWxfcGFyZW50c19xdWVyeSA9ICRzcWxfcGFyZW50c19xdWVyeV9zdGFydCAuICcJCScgLiAkc3FsX3BhcmVudF9xdWVyeV93aGF0Ow0KICAgIA0KICAgICRkYnBhcmVudHMgPSAkZGItPkV4ZWN1dGUoJHNxbF9wYXJlbnRzX3F1ZXJ5KTsNCiAgICANCiAgICBpZiggJGRiLT5FcnJvck5vKCkgKQ0KICAgIHsNCiAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignREIgZXJyb3I6ICcgLiAkZGItPkVycm9yTXNnKCkgKTsNCiAgICB9DQogICAgDQogICAgJHBhcmVudHNfZHVtcCA9IFtdOw0KICAgIA0KICAgIHdoaWxlKCRkYnBhcmVudHMgJiYgJGRicGFyZW50c3JvdyA9ICRkYnBhcmVudHMtPkZldGNoUm93KCkpDQogICAgew0KICAgICAgJHBhcmVudCAgICAgICAgID0gbmV3IFxzdGRDbGFzczsNCiAgICAgICRwYXJlbnQtPmlkICAgICA9ICRkYnBhcmVudHNyb3dbJ2NvbnRlbnRfaWQnXTsNCiAgICAgICRwYXJlbnQtPmFsaWFzICA9ICRkYnBhcmVudHNyb3dbJ2NvbnRlbnRfYWxpYXMnXTsNCiAgICAgICRwYXJlbnQtPnRpdGxlICA9ICRkYnBhcmVudHNyb3dbJ2NvbnRlbnRfbmFtZSddOw0KICAgICAgJHBhcmVudC0+bWVudSAgID0gJGRicGFyZW50c3Jvd1snY29udGVudF9uYW1lJ107DQogICAgICAkcGFyZW50c19kdW1wW10gPSAkcGFyZW50Ow0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJHBhcmVudHNfZHVtcDsNCiAgfQ0KICANCiAgLyoqDQogICAqIGdldF91c2VyX2RhdGENCiAgICoNCiAgICogTG9va3MgdXAgYWxsIHVzZXJzJyBpbmZvcm1hdGlvbg0KICAgKiAoSUQsIHVzZXJuYW1lLCBmaXJzdCAmIGxhc3QgbmFtZSBhcyB3ZWxsIGFzIGVtYWlsKQ0KICAgKiBhbmQgcmV0dXJuIHRoZW0gYXMgYW4gYXJyYXkgb2YgY2xhc3Nlcy4NCiAgICoNCiAgICogQHBhcmFtICRhcnJheWRhdGENCiAgICoNCiAgICogQHJldHVybiBhcnJheQ0KICAgKiBAdGhyb3dzIFxFeGNlcHRpb24NCiAgICovDQogIHN0YXRpYyBmdW5jdGlvbiBnZXRfdXNlcl9kYXRhKGFycmF5ICRhcnJheWRhdGEpDQogIHsNCiAgICAkZGIgPSBjbXNtcygpLT5HZXREYigpOw0KICAgIA0KICAgICRzcWxfdXNlcnNfcXVlcnlfc3RhcnQgPSAnU0VMRUNUIHVzZXJfaWQsIHVzZXJuYW1lLCBmaXJzdF9uYW1lLCBsYXN0X25hbWUsIGVtYWlsDQoJCQlGUk9NICcgLiBjbXNfZGJfcHJlZml4KCkgLiAndXNlcnMgJzsNCiAgICANCiAgICAkc2l6ZSA9IFxjb3VudCgkYXJyYXlkYXRhKTsNCiAgICANCiAgICBmb3IoJGkgPSAwOyAkaSA8PSAkc2l6ZSAtIDE7ICRpKyspDQogICAgew0KICAgICAgaWYoMCA9PT0gJGkpDQogICAgICB7DQogICAgICAgICRzcWxfdXNlcl9xdWVyeV93aGF0ID0gJyBXSEVSRSAgdXNlcl9pZCA9ICcgLiAkYXJyYXlkYXRhWyRpXSAuICcgJzsNCiAgICAgIH0NCiAgICAgIGlmKCRpID4gMCkNCiAgICAgIHsNCiAgICAgICAgJHNxbF91c2VyX3F1ZXJ5X3doYXQgLj0gJyAgT1IgdXNlcl9pZCA9ICcgLiAkYXJyYXlkYXRhWyRpXSAuICcgJzsNCiAgICAgIH0NCiAgICAgIA0KICAgIH0NCiAgICANCiAgICAkc3FsX3VzZXJzX3F1ZXJ5ID0gJHNxbF91c2Vyc19xdWVyeV9zdGFydCAuICcJJyAuICRzcWxfdXNlcl9xdWVyeV93aGF0Ow0KICAgIA0KICAgICRkYnVzZXIgPSAkZGItPkV4ZWN1dGUoJHNxbF91c2Vyc19xdWVyeSk7DQogIA0KICAgIGlmKCAkZGItPkVycm9yTm8oKSApDQogICAgew0KICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdEQiBlcnJvcjogJyAuICRkYi0+RXJyb3JNc2coKSApOw0KICAgIH0NCiAgDQogICAgJGdldF91c2VyX2RhdGEgPSBbXTsNCiAgICANCiAgICB3aGlsZSgkZGJ1c2VyICYmICRkYnVzZXJyb3cgPSAkZGJ1c2VyLT5GZXRjaFJvdygpKQ0KICAgIHsNCiAgICAgICR1c2VyICAgICAgICAgICAgID0gbmV3IFxzdGRDbGFzczsNCiAgICAgICR1c2VyLT5pZCAgICAgICAgID0gJGRidXNlcnJvd1sndXNlcl9pZCddOw0KICAgICAgJHVzZXItPnVzZXJuYW1lICAgPSAkZGJ1c2Vycm93Wyd1c2VybmFtZSddOw0KICAgICAgJHVzZXItPmZpcnN0X25hbWUgPSAkZGJ1c2Vycm93WydmaXJzdF9uYW1lJ107DQogICAgICAkdXNlci0+bGFzdF9uYW1lICA9ICRkYnVzZXJyb3dbJ2xhc3RfbmFtZSddOw0KICAgICAgJHVzZXItPmVtYWlsICAgICAgPSAkZGJ1c2Vycm93WydlbWFpbCddOw0KICAgICAgJGdldF91c2VyX2RhdGFbXSAgPSAkdXNlcjsNCiAgICB9DQogICAgDQogICAgcmV0dXJuICRnZXRfdXNlcl9kYXRhOw0KICB9DQogIA0KICANCiAgLyoqDQogICAqIGdldF9tYXhfcGFnZQ0KICAgKg0KICAgKiBnZXQgdGhlIG51bWJlciBvZiB0aGUgaGlnaGVzdCBwYWdlIGF2YWlsYWJsZS4NCiAgICoNCiAgICogQHBhcmFtICRjb250ZW50DQogICAqIEBwYXJhbSAkc3FsX2xpbWl0X2hpZXJhcmNoeQ0KICAgKiBAcGFyYW0gJHNxbF9wcmVmaXhfZmlsdGVyDQogICAqIEBwYXJhbSAkc3FsX2NvbnRlbnRfZmlsdGVyDQogICAqIEBwYXJhbSAkY291bnQNCiAgICogQHBhcmFtICRvZmZzZXQNCiAgICogQHBhcmFtICRzcWxfZXhjbHVkZXMNCiAgICogQHBhcmFtICRzcWxfaGllcmFyY2h5DQogICAqIEBwYXJhbSAkYWN0aXZlX21vZGUNCiAgICogQHBhcmFtICRzaG93bWVudV9tb2RlDQogICAqDQogICAqIEByZXR1cm4gZmxvYXR8aW50DQogICAqIEB0aHJvd3MgXEV4Y2VwdGlvbg0KICAgKi8NCiAgc3RhdGljIGZ1bmN0aW9uIGdldF9tYXhfcGFnZSgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICRzcWxfbGltaXRfaGllcmFyY2h5LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAkc3FsX3ByZWZpeF9maWx0ZXIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICRzcWxfY29udGVudF9maWx0ZXIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICRjb3VudCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgJG9mZnNldCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgJHNxbF9leGNsdWRlcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgJHNxbF9oaWVyYXJjaHksDQogICAgICAgICAgICAgICAgICAgICAgICAgICRhY3RpdmVfbW9kZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgJHNob3dtZW51X21vZGUNCiAgICAgICAgICAgICAgICAgICAgICAgICkNCiAgew0KICAgIA0KICAgICMgTm8gZXh0ZW5zaW9uIHJlcXVpcmVkDQogICAgIyB3ZSBvbmx5IGNoZWNrIGZvciB0aGUgc2luZ2xlIHNwZWNpZmllZCBibG9jaw0KICAgIA0KICAgICRzcWxfcXVlcnlfd2hlcmUgICAgPSAiQU5EIHByb3BfbmFtZT0nIiAuICRjb250ZW50IC4gIiciOw0KICAgICRzcWxfcXVlcnlfZXhjbHVkZXMgPSAnJzsNCiAgICBmb3IoJGkgPSAwOyAkaSA8PSBcY291bnQoJHNxbF9leGNsdWRlcykgLSAxOyAkaSsrKQ0KICAgIHsNCiAgICAgICRzcWxfcXVlcnlfZXhjbHVkZXMgLj0gJ0FORCAnIC4gY21zX2RiX3ByZWZpeCgpIC4gJ2NvbnRlbnRfcHJvcHMuY29udGVudF9pZCAhPSAnIC4gJHNxbF9leGNsdWRlc1skaV0gLiAnICc7DQogICAgfQ0KICAgIA0KICAgICRkYiA9IGNtc21zKCktPkdldERiKCk7DQogICAgDQogICAgJHNxbF91c2VyX3F1ZXJ5ID0gJ1NFTEVDVCAnDQogICAgICAgICAgICAgICAgICAgICAgLiBjbXNfZGJfcHJlZml4KCkNCiAgICAgICAgICAgICAgICAgICAgICAuICdjb250ZW50LmNvbnRlbnRfaWQsIHByb3BfbmFtZSwgaWRfaGllcmFyY2h5IEZST00gJw0KICAgICAgICAgICAgICAgICAgICAgIC4gY21zX2RiX3ByZWZpeCgpDQogICAgICAgICAgICAgICAgICAgICAgLiAnY29udGVudCwgJw0KICAgICAgICAgICAgICAgICAgICAgIC4gY21zX2RiX3ByZWZpeCgpDQogICAgICAgICAgICAgICAgICAgICAgLiAnY29udGVudF9wcm9wcyBXSEVSRSAnDQogICAgICAgICAgICAgICAgICAgICAgLiBjbXNfZGJfcHJlZml4KCkNCiAgICAgICAgICAgICAgICAgICAgICAuICdjb250ZW50LmNvbnRlbnRfaWQgPSAnDQogICAgICAgICAgICAgICAgICAgICAgLiBjbXNfZGJfcHJlZml4KCkNCiAgICAgICAgICAgICAgICAgICAgICAuICdjb250ZW50X3Byb3BzLmNvbnRlbnRfaWQgJw0KICAgICAgICAgICAgICAgICAgICAgIC4gJHNxbF9xdWVyeV93aGVyZSAuICcgJw0KICAgICAgICAgICAgICAgICAgICAgIC4gJHNxbF9jb250ZW50X2ZpbHRlciAuICcgJw0KICAgICAgICAgICAgICAgICAgICAgIC4gJHNxbF9wcmVmaXhfZmlsdGVyIC4gJyAnDQogICAgICAgICAgICAgICAgICAgICAgLiAkc3FsX2xpbWl0X2hpZXJhcmNoeSAuICcgJw0KICAgICAgICAgICAgICAgICAgICAgIC4gJHNxbF9xdWVyeV9leGNsdWRlcyAuICcgJw0KICAgICAgICAgICAgICAgICAgICAgIC4gJHNxbF9oaWVyYXJjaHkgLiAnICcNCiAgICAgICAgICAgICAgICAgICAgICAuICRhY3RpdmVfbW9kZSAuICcgJw0KICAgICAgICAgICAgICAgICAgICAgIC4gJHNob3dtZW51X21vZGU7DQogICAgDQogICAgJGRiY29udGVudCAgICAgID0gJGRiLT5FeGVjdXRlKCRzcWxfdXNlcl9xdWVyeSk7DQogIA0KICAgIGlmKCAkZGItPkVycm9yTm8oKSApDQogICAgew0KICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdEQiBlcnJvcjogJyAuICRkYi0+RXJyb3JNc2coKSApOw0KICAgIH0NCiAgICANCiAgICBpZigkZGJjb250ZW50LT5SZWNvcmRDb3VudCgpID49IDEpDQogICAgew0KICAgICAgcmV0dXJuIFxjZWlsKCgkZGJjb250ZW50LT5SZWNvcmRDb3VudCgpIC0gJG9mZnNldCkgLyAkY291bnQpOw0KICAgIH0NCiAgDQogICAgcmV0dXJuIDA7DQogIH0NCiAgDQogIC8qKg0KICAgKiBnZXRfY3VycmVudF9sZXZlbA0KICAgKg0KICAgKiBQcm92aWRlIHRoZSBoaWVyYXJjaHkgbGV2ZWwgb2YgYSBzcGVjaWZpYyBwYWdlIChieSBjb250ZW50X2lkKQ0KICAgKg0KICAgKiBAcGFyYW0gJGlkDQogICAqDQogICAqIEByZXR1cm4gaW50DQogICAqIEB0aHJvd3MgXEV4Y2VwdGlvbg0KICAgKi8NCiAgc3RhdGljIGZ1bmN0aW9uIGdldF9jdXJyZW50X2xldmVsKCRpZCkNCiAgew0KICAgICRjdXJyZW50X2xldmVsID0gMDsNCiAgICAkZGIgICAgICAgICAgICAgICAgICA9IGNtc21zKCktPkdldERiKCk7DQogICAgJHEgICAgICAgICAgICAgICAgICAgPSAnU0VMRUNUIGlkX2hpZXJhcmNoeSwgY29udGVudF9pZCBGUk9NICcgLiBjbXNfZGJfcHJlZml4KCkgLiAnY29udGVudCBXSEVSRSBjb250ZW50X2lkID0gJyAuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAkaWQgLiAnICc7DQogICAgDQogICAgJGRiaGllcmFyY2h5ID0gJGRiLT5FeGVjdXRlKCRxKTsNCiAgDQogICAgaWYoICRkYi0+RXJyb3JObygpICkNCiAgICB7DQogICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0RCIGVycm9yOiAnIC4gJGRiLT5FcnJvck1zZygpICk7DQogICAgfQ0KICAgIA0KICAgIHdoaWxlKCRkYmhpZXJhcmNoeSAmJiAkZGJoaWVyYXJjaHlyb3cgPSAkZGJoaWVyYXJjaHktPkZldGNoUm93KCkpDQogICAgew0KICAgICAgJGN1cnJlbnRfbGV2ZWwgPSBcc3Vic3RyX2NvdW50KCRkYmhpZXJhcmNoeXJvd1snaWRfaGllcmFyY2h5J10sICcuJyk7DQogICAgfQ0KICAgIA0KICAgICsrJGN1cnJlbnRfbGV2ZWw7DQogICAgDQogICAgcmV0dXJuICRjdXJyZW50X2xldmVsOw0KICB9DQogIA0KICANCiAgLyoqDQogICAqIEBwYXJhbSAkY29udGVudA0KICAgKiBAcGFyYW0gJHNxbF9saW1pdF9oaWVyYXJjaHkNCiAgICogQHBhcmFtICRzcWxfcHJlZml4X2ZpbHRlcg0KICAgKiBAcGFyYW0gJGNvbnRlbnRfZmlsdGVyDQogICAqIEBwYXJhbSAkY291bnQNCiAgICogQHBhcmFtICRvZmZzZXQNCiAgICogQHBhcmFtICRzcWxfZXhjbHVkZXMNCiAgICogQHBhcmFtICRzcWxfaGllcmFyY2h5DQogICAqDQogICAqIEByZXR1cm4gYXJyYXl8bWl4ZWQNCiAgICogQHRocm93cyBcRXhjZXB0aW9uDQogICAqLw0KICBzdGF0aWMgZnVuY3Rpb24gZ2V0X21hdGNoaW5nX3BhZ2VzKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNxbF9saW1pdF9oaWVyYXJjaHksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzcWxfcHJlZml4X2ZpbHRlciwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnRfZmlsdGVyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY291bnQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvZmZzZXQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzcWxfZXhjbHVkZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzcWxfaGllcmFyY2h5DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQogIHsNCiAgDQogICAgJHNxbF9jb250ZW50X2ZpbHRlciA9ICcnOw0KICAgIA0KICAgIGlmKCcnICE9PSAkY29udGVudF9maWx0ZXIpDQogICAgew0KICAgICAgJHNxbF9jb250ZW50X2ZpbHRlciA9ICJBTkQgbWF0Y2goY29udGVudCkgYWdhaW5zdCgnKyIgLiAkY29udGVudF9maWx0ZXIgLiAiJyBpbiBib29sZWFuIG1vZGUpIjsNCiAgICB9DQogICAgDQogICAgJHNxbF9xdWVyeV93aGVyZSAgICA9ICJBTkQgcHJvcF9uYW1lPSciIC4gJGNvbnRlbnQgLiAiJyAiOw0KICAgICRzcWxfcXVlcnlfZXhjbHVkZXMgPSAnJzsNCiAgICBmb3IoJGkgPSAwOyAkaSA8PSBjb3VudCgkc3FsX2V4Y2x1ZGVzKSAtIDE7ICRpKyspDQogICAgew0KICAgICAgJHNxbF9xdWVyeV9leGNsdWRlcyAuPSAnQU5EICcgLiBjbXNfZGJfcHJlZml4KCkgLiAnY29udGVudF9wcm9wcy5jb250ZW50X2lkICE9ICcgLiAkc3FsX2V4Y2x1ZGVzWyRpXSAuICcgXG4nOw0KICAgIH0NCiAgICANCiAgICAkZGIgPSBjbXNtcygpLT5HZXREYigpOw0KICAgIA0KICAgICRzcWxfZmlsdGVyX3F1ZXJ5ID0gJ1NFTEVDVCAnDQogICAgICAgICAgICAgICAgICAgICAgICAuIGNtc19kYl9wcmVmaXgoKQ0KICAgICAgICAgICAgICAgICAgICAgICAgLiAnY29udGVudC5jb250ZW50X2lkLCBwcm9wX25hbWUsIGlkX2hpZXJhcmNoeSBGUk9NICcNCiAgICAgICAgICAgICAgICAgICAgICAgIC4gY21zX2RiX3ByZWZpeCgpDQogICAgICAgICAgICAgICAgICAgICAgICAuICdjb250ZW50LCAnDQogICAgICAgICAgICAgICAgICAgICAgICAuIGNtc19kYl9wcmVmaXgoKQ0KICAgICAgICAgICAgICAgICAgICAgICAgLiAnY29udGVudF9wcm9wcyBXSEVSRSAnDQogICAgICAgICAgICAgICAgICAgICAgICAuIGNtc19kYl9wcmVmaXgoKQ0KICAgICAgICAgICAgICAgICAgICAgICAgLiAnY29udGVudC5jb250ZW50X2lkID0gJw0KICAgICAgICAgICAgICAgICAgICAgICAgLiBjbXNfZGJfcHJlZml4KCkNCiAgICAgICAgICAgICAgICAgICAgICAgIC4gJ2NvbnRlbnRfcHJvcHMuY29udGVudF9pZCAnDQogICAgICAgICAgICAgICAgICAgICAgICAuICRzcWxfcXVlcnlfd2hlcmUgLiAnICcNCiAgICAgICAgICAgICAgICAgICAgICAgIC4gJHNxbF9jb250ZW50X2ZpbHRlciAuICcgJw0KICAgICAgICAgICAgICAgICAgICAgICAgLiAkc3FsX3ByZWZpeF9maWx0ZXIgLiAnICcNCiAgICAgICAgICAgICAgICAgICAgICAgIC4gJHNxbF9saW1pdF9oaWVyYXJjaHkgLiAnICcNCiAgICAgICAgICAgICAgICAgICAgICAgIC4gJHNxbF9xdWVyeV9leGNsdWRlcyAuICcgJw0KICAgICAgICAgICAgICAgICAgICAgICAgLiAkc3FsX2hpZXJhcmNoeTsNCiAgICANCiAgICAkZGJmaWx0ZXIgICAgICAgICA9ICRkYi0+RXhlY3V0ZSgkc3FsX2ZpbHRlcl9xdWVyeSk7DQogIA0KICAgIGlmKCAkZGItPkVycm9yTm8oKSApDQogICAgew0KICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdEQiBlcnJvcjogJyAuICRkYi0+RXJyb3JNc2coKSApOw0KICAgIH0NCiAgICANCiAgICAkZmlsdGVyX2lkcyA9IFtdOw0KICAgIHdoaWxlKCRkYmZpbHRlciAmJiAkZGJmaWx0ZXJyb3cgPSAkZGJmaWx0ZXItPkZldGNoUm93KCkpDQogICAgew0KICAgICAgJGZpbHRlcl9pZHMgPSBzZWxmOjppZF90b19hcnJheSgkZmlsdGVyX2lkcywgJGRiZmlsdGVycm93Wydjb250ZW50X2lkJ10pOw0KICAgIH0NCiAgDQogICAgcmV0dXJuICRmaWx0ZXJfaWRzOw0KICAgIA0KICB9DQogIA0KICAvKioNCiAgICogc3FsX3NvcnRfcGFyYW0NCiAgICoNCiAgICogYSBmdW5jdGlvbiB0aGF0IGFsbG93cyB0aGUgdXNlcg0KICAgKiB0byB1c2Ugc2ltcGxlIHdvcmRzIGluc3RlYWQgb2YgdGhlIHRhYmxlIGNvbHVtbiBuYW1lcw0KICAgKiB0byBzb3J0IGRhdGEuDQogICAqDQogICAqIEFkZGl0aW9uYWxseSwgaXQgbWFrZXMgaXQgZWFzeSB0byBleHBhbmQgdGhlIHNxbCBxdWVyeSBzdHJpbmcNCiAgICoNCiAgICogQHBhcmFtICRzb3J0X2J5DQogICAqIEBwYXJhbSAkZmxhZzogSWYgZXF1YWwgMCB0aGUgcGFyYW1ldGVyIGlzIHRoZSBmaXJzdCBhbmQgdGh1cyB0aGUgbXlTUUwgY29tbWFuZCBPUkRFUiBCWSB3aWxsIGJlIGFkZGVkIHRvIHRoZSBzdHJpbmcNCiAgICogQHBhcmFtICRvcmRlcg0KICAgKg0KICAgKiBAcmV0dXJuIHN0cmluZw0KICAgKi8NCiAgc3RhdGljIGZ1bmN0aW9uIHNxbF9zb3J0X3BhcmFtKCRzb3J0X2J5LCAkZmxhZywgJG9yZGVyKQ0KICB7DQogICAgJHNxbF9zb3J0X3BhcmFtID0gJyc7DQogICAgDQogICAgaWYoMCA9PT0gJGZsYWcpDQogICAgew0KICAgICAgJHNxbF9zb3J0X3BhcmFtID0gJyBPUkRFUiBCWSAnOw0KICAgIH0NCiAgICANCiAgICAjIFVzZXItZnJpZW5kbHkgc2VsZWN0aW9uIG9mIHRhYmxlIGNvbHVtbnMgZm9yIHNvcnRpbmcNCiAgICBzd2l0Y2goJHNvcnRfYnkpDQogICAgew0KICAgICAgY2FzZSAnaWQnOg0KICAgICAgICAkc3FsX3NvcnRfcGFyYW0gLj0gJ2NvbnRlbnRfaWQnOw0KICAgICAgYnJlYWs7DQogICAgICBjYXNlICdhbGlhcyc6DQogICAgICAgICRzcWxfc29ydF9wYXJhbSAuPSAnY29udGVudF9hbGlhcyc7DQogICAgICBicmVhazsNCiAgICAgIGNhc2UgJ3RpdGxlJzoNCiAgICAgICAgJHNxbF9zb3J0X3BhcmFtIC49ICdjb250ZW50X25hbWUnOw0KICAgICAgYnJlYWs7DQogICAgICBjYXNlICdzaG93JzoNCiAgICAgICAgJHNxbF9zb3J0X3BhcmFtIC49ICdzaG93X2luX21lbnUnOw0KICAgICAgYnJlYWs7DQogICAgICBjYXNlICdjcmVhdGVkJzoNCiAgICAgICAgJHNxbF9zb3J0X3BhcmFtIC49ICdjcmVhdGVfZGF0ZSc7DQogICAgICBicmVhazsNCiAgICAgIGNhc2UgJ21vZGlmaWVkJzoNCiAgICAgICAgJHNxbF9zb3J0X3BhcmFtIC49ICdtb2RpZmllZF9kYXRlJzsNCiAgICAgIGJyZWFrOw0KICAgICAgY2FzZSAnb3duZXInOg0KICAgICAgICAkc3FsX3NvcnRfcGFyYW0gLj0gJ293bmVyX2lkJzsNCiAgICAgIGJyZWFrOw0KICAgICAgY2FzZSAnaWRfaGllcmFyY2h5JzoNCiAgICAgICAgJHNxbF9zb3J0X3BhcmFtIC49ICdpZF9oaWVyYXJjaHknOw0KICAgICAgYnJlYWs7DQogICAgICBjYXNlICdsYXN0ZWRpdG9yJzoNCiAgICAgICAgJHNxbF9zb3J0X3BhcmFtIC49ICdsYXN0X21vZGlmaWVkX2J5JzsNCiAgICAgIGJyZWFrOw0KICAgICAgY2FzZSAnYWN0aXZlJzoNCiAgICAgICAgJHNxbF9zb3J0X3BhcmFtIC49ICdhY3RpdmUnOw0KICAgICAgYnJlYWs7DQogICAgICBkZWZhdWx0Og0KICAgICAgICAkc3FsX3NvcnRfcGFyYW0gLj0gJ2hpZXJhcmNoeSc7DQogICAgICBicmVhazsNCiAgICB9DQogICAgDQogICAgIyBjaGVja3MgaWYgdGhlIHNvcnRpbmcgb3JkZXIgaXMgc2V0IHRvIGZyb20gYm90dG9tIHRvIHRvcCwNCiAgICAjIGlmIG5vdCwgaXQgd2lsbCBzZXQgaXQgdG8gdGhlIHJldmVyc2UNCiAgICBpZigndXAnID09PSAkb3JkZXIpDQogICAgew0KICAgICAgJHNxbF9zb3J0X3BhcmFtIC49ICcgQVNDICc7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAkc3FsX3NvcnRfcGFyYW0gLj0gJyBERVNDICc7DQogICAgfQ0KICAgIA0KICAgICMgSWYgc21hbGxlci9lcXVhbCAxIHRoZSBwYXJhbWV0ZXIgaXMgbm90IHRoZSBsYXN0DQogICAgIyBhbmQgd2lsbCBiZSBzZXBlcmF0ZWQgd2l0aCBhIGNvbW1hIGZyb20gdGhlIG5leHQgb25lDQogICAgaWYoJGZsYWcgPj0gMSkNCiAgICB7DQogICAgICAkc3FsX3NvcnRfcGFyYW0gPSAnLCAnIC4gJHNxbF9zb3J0X3BhcmFtOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJHNxbF9zb3J0X3BhcmFtOw0KICB9DQogIA0KICAvKioNCiAgICogc3RyaXBfb3V0DQogICAqDQogICAqICBzdHJpcHMgb3V0IHNtYXJ0eSBvciBIVE1MIChpbmNsIEpTIGFuZCBDU1MpDQogICAqDQogICAqIEBwYXJhbSAkY29udGVudA0KICAgKiBAcGFyYW0gJG1vZGUNCiAgICoNCiAgICogQHJldHVybiBzdHJpbmcNCiAgICovDQogIHN0YXRpYyBmdW5jdGlvbiBzdHJpcF9vdXQoJGNvbnRlbnQsICRtb2RlKQ0KICB7DQogICAgJHJldCA9ICRjb250ZW50Ow0KICAgIA0KICAgICRodG1sZXhwcmVzc2lvbnMgPSBbDQogICAgICAnQDxzY3JpcHRbXj5dKj8+Lio/PC9zY3JpcHQ+QHNpJywgIC8vIFN0cmlwIG91dCBqYXZhc2NyaXB0DQogICAgICAnQDxzdHlsZVtePl0qPz4uKj88L3N0eWxlPkBzaVUnLCAgIC8vIFN0cmlwIHN0eWxlIHRhZ3MgcHJvcGVybHkNCiAgICAgICdAPFtcL1whXSo/W148Pl0qPz5Ac2knLCAgICAgICAgICAgLy8gU3RyaXAgb3V0IEhUTUwgdGFncw0KICAgICAgJ0A8IVtcc1xTXSo/LS1bIFx0XG5ccl0qPkAnICAgICAgICAvLyBTdHJpcCBtdWx0aS1saW5lIGNvbW1lbnRzIGluY2x1ZGluZyBDREFUQQ0KICAgIF07DQogICAgDQogICAgaWYoJ2h0bWwnID09PSAkbW9kZSkNCiAgICB7DQogICAgICAkcmV0ID0gXHByZWdfcmVwbGFjZSgkaHRtbGV4cHJlc3Npb25zLCAnJywgJGNvbnRlbnQpOw0KICAgIH0NCiAgICBlbHNlIGlmKCdzbWFydHknID09PSAkbW9kZSkNCiAgICB7DQogICAgICAjIG5vdGUgdG8gc2VsZjogaW4gXH0gdGhlIGVzY2FwaW5nIFwgbWF5IGJlIHJlZHVuZGFudC4uLiByZXZpc2l0DQogICAgICAkcmV0ID0gXHByZWdfcmVwbGFjZSgnL1x7Lio/XH0vJywgJycsICRjb250ZW50KTsNCiAgICB9DQogICAgDQogICAgcmV0dXJuICRyZXQ7DQogIH0NCiAgDQogIC8qKg0KICAgKiByZWxhdGVkIHdpdGggZmlsZXNfbGlzdA0KICAgKi8NCiAgDQogIHN0YXRpYyBmdW5jdGlvbiByZWNyZWF0ZV9VcmxTbWFydCgkc3ViZGlyLCAkcV92YXIgPSAnZmwnKQ0KICB7DQogICAgJHN1YmRpciAgICAgPSBccnRyaW0oJHN1YmRpciwgJy8nKTsNCiAgICAkZ2V0X3BhcmFtcyA9IGlzc2V0KCRfR0VUKSA/ICRfR0VUIDogW107DQogICAgJG5ha2VkX3VyaSAgPSBzZWxmOjpnZXRfbmFrZWRfdXJpKCk7DQogICAgDQogICAgaWYoIGlzc2V0KCRnZXRfcGFyYW1zWyRxX3Zhcl0pICYmIDAgIT09IFxzdHJwb3MoJHN1YmRpciwgJy4uJykgKQ0KICAgIHsNCiAgICAgICRzdWJkaXIxID0gXHByZWdfcmVwbGFjZSgnL1wuezJ9KFx4MkYpJC8nLCAnJywgXHVybGRlY29kZSgkZ2V0X3BhcmFtc1skcV92YXJdKSk7DQogICAgICAkc3ViZGlyICA9IFxwcmVnX3JlcGxhY2UoJy9bXlx4MkZdKyhceDJGKSQvJywgJycsICRzdWJkaXIxKTsNCiAgICAgIA0KICAgICAgDQogICAgICBpZihlbXB0eSgkc3ViZGlyKSB8fCAkc3ViZGlyID09ICRnZXRfcGFyYW1zWyRxX3Zhcl0pDQogICAgICB7DQogICAgICAgIHVuc2V0KCRnZXRfcGFyYW1zWyRxX3Zhcl0pOw0KICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgew0KICAgICAgICAkZ2V0X3BhcmFtc1skcV92YXJdID0gJHN1YmRpcjsNCiAgICAgIH0NCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICRnZXRfcGFyYW1zWyRxX3Zhcl0gPSAkc3ViZGlyOw0KICAgIH0NCiAgICANCiAgICAkc21hcnR1cmwgPSAkbmFrZWRfdXJpOw0KICAgIA0KICAgIGlmKCFlbXB0eSgkZ2V0X3BhcmFtcykpDQogICAgew0KICAgICAgJHNtYXJ0dXJsIC49ICc/JyAuIFxodHRwX2J1aWxkX3F1ZXJ5KCRnZXRfcGFyYW1zKTsNCiAgICB9DQogICAgDQogICAgcmV0dXJuICRzbWFydHVybDsNCiAgICANCiAgfQ0KICANCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRfbmFrZWRfdXJpKCkNCiAgew0KICAgICR1cmlfcGFydHMgPSBcZXhwbG9kZSgnPycsICRfU0VSVkVSWydSRVFVRVNUX1VSSSddLCAyKTsNCiAgICANCiAgICByZXR1cm4gJHVyaV9wYXJ0c1swXTsNCiAgfQ0KICANCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZWNyZWF0ZV9VcmwoJHN1Yl9kaXIsICRxX3ZhciA9ICdmbCcpDQogIHsNCiAgICAkc3ViX2RpciAgICA9IFxydHJpbSgkc3ViX2RpciwgJy8nKTsNCiAgICAkZ2V0X3BhcmFtcyA9ICRfR0VUID8/IFtdOw0KICAgICRuYWtlZF91cmkgID0gc2VsZjo6Z2V0X25ha2VkX3VyaSgpOw0KICAgIA0KICAgIGlmKGlzc2V0KCRnZXRfcGFyYW1zWyRxX3Zhcl0pKQ0KICAgIHsNCiAgICAgIGlmKCBGQUxTRSAhPT0gXHN0cnBvcygkc3ViX2RpciwgJy4uJykgKQ0KICAgICAgew0KICAgICAgICAjIHJldmlzaXQgdGhpcy4uLi4NCiAgICAgICAgJHN1Yl9kaXJfMSA9IFxwcmVnX3JlcGxhY2UoJy9cLnsyfShceDJGKSQvJywgJycsICRnZXRfcGFyYW1zWyRxX3Zhcl0pOyAjLi4NCiAgICAgICAgJHN1Yl9kaXIgPSBccHJlZ19yZXBsYWNlKCcvW15ceDJGXSsoXHgyRikkLycsICcnLCAkc3ViX2Rpcl8xKTsgICAgICAgICAjICoqKiovDQogICAgICAgICMgLi4uLi4uLi4uLi4uLi4uLi4uDQogICAgICAgIGlmKGVtcHR5KCRzdWJfZGlyKSkNCiAgICAgICAgew0KICAgICAgICAgIHVuc2V0KCRnZXRfcGFyYW1zWyRxX3Zhcl0pOw0KICAgICAgICB9DQogICAgICAgIGVsc2VpZigkc3ViX2RpciA9PT0gJHN1Yl9kaXJfMSkNCiAgICAgICAgew0KICAgICAgICAgICR0bXAgPSBcZXhwbG9kZSgnLycsICRzdWJfZGlyKTsNCiAgICAgICAgICB1bnNldCgkdG1wW1xjb3VudCgkdG1wKSAtIDFdKTsNCiAgICAgICAgICAkZ2V0X3BhcmFtc1skcV92YXJdID0gXGltcGxvZGUoJy8nLCAkdG1wKTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIGlmKCRzdWJfZGlyID09PSAkZ2V0X3BhcmFtc1skcV92YXJdKQ0KICAgICAgICB7DQogICAgICAgICAgJHRtcCA9IFxleHBsb2RlKCcvJywgJHN1Yl9kaXIpOw0KICAgICAgICAgIHVuc2V0KCR0bXBbXGNvdW50KCR0bXApIC0gMV0pOw0KICAgICAgICAgICRnZXRfcGFyYW1zWyRxX3Zhcl0gPSBcaW1wbG9kZSgnLycsICR0bXApOw0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICRnZXRfcGFyYW1zWyRxX3Zhcl0gPSAkc3ViX2RpcjsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgew0KICAgICAgICAkZ2V0X3BhcmFtc1skcV92YXJdID0gc2VsZjo6am9pbl91cmkoJGdldF9wYXJhbXNbJHFfdmFyXSwgJHN1Yl9kaXIpOw0KICAgICAgfQ0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgJGdldF9wYXJhbXNbJHFfdmFyXSA9ICRzdWJfZGlyOw0KICAgIH0NCiAgICANCiAgICAkdXJsID0gJG5ha2VkX3VyaTsNCiAgICANCiAgICBpZihlbXB0eSgkZ2V0X3BhcmFtc1skcV92YXJdKSkNCiAgICB7DQogICAgICB1bnNldCgkZ2V0X3BhcmFtc1skcV92YXJdKTsNCiAgICB9DQogICAgDQogICAgaWYoIWVtcHR5KCRnZXRfcGFyYW1zKSkNCiAgICB7DQogICAgICBpZihlbXB0eSgkZ2V0X3BhcmFtc1skcV92YXJdKSAmJiBOVUxMICE9PSAkZ2V0X3BhcmFtc1skcV92YXJdKQ0KICAgICAgew0KICAgICAgICB1bnNldCgkZ2V0X3BhcmFtc1skcV92YXJdKTsNCiAgICAgIH0NCiAgICAgICR1cmwgLj0gJz8nIC4gXGh0dHBfYnVpbGRfcXVlcnkoJGdldF9wYXJhbXMpOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJHVybDsNCiAgfQ0KICANCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1cmlfMl9wYXRoKCR1cmkpDQogIHsNCiAgICByZXR1cm4gXHN0cl9yZXBsYWNlKCcvJywgXERJUkVDVE9SWV9TRVBBUkFUT1IsIFx0cmltKCR1cmksICcvJykpOw0KICB9DQogIA0KICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGpvaW5fdXJpKCkNCiAgew0KICAgICRhcmdzID0gXGZ1bmNfZ2V0X2FyZ3MoKTsNCiAgICAkYXJncyA9IFxhcnJheV9tYXAoDQogICAgICBzdGF0aWMgZnVuY3Rpb24oJHNydCkgew0KICAgICAgICByZXR1cm4gXHRyaW0oJHNydCwgJy8nKTsNCiAgICAgIH0sDQogICAgICAkYXJncw0KICAgICk7DQogICAgDQogICAgJGFyZ3MgPSBcYXJyYXlfZmlsdGVyKCRhcmdzKTsNCiAgICANCiAgICByZXR1cm4gXGltcGxvZGUoJy8nLCAkYXJncyk7DQogIH0NCiAgDQogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVhZF9kbF9kYigkcGFyYW1zKQ0KICB7DQogICAgXGV4dHJhY3QoJHBhcmFtcywgXEVYVFJfT1ZFUldSSVRFKTsNCiAgICAkZGJfZG4gPSBlbXB0eSgkZGxfY291bnRlcl9kYl9kaXIpID8gJGZvbGRlciA6ICRkbF9jb3VudGVyX2RiX2RpcjsNCiAgICAkZGJfZm4gPSBlbXB0eSgkZGxfY291bnRlcl9kYl9mbikgPyAnLmNvdW50ZXJfZGInIDogJGRsX2NvdW50ZXJfZGJfZm47DQogICAgJGRiX2Z1bGxfZm4gPSBcY21zX2pvaW5fcGF0aCgkZGJfZG4sICRkYl9mbik7DQogICAgDQogIA0KICAgIGlmKCBcZmlsZV9leGlzdHMoJGRiX2Z1bGxfZm4pICkNCiAgICB7DQogICAgICAkZm8gICAgID0gXGZvcGVuKCRkYl9mdWxsX2ZuLCAncmInKTsNCiAgICAgIA0KICAgICAgXGZsb2NrKCRmbywgXExPQ0tfU0gsICR3YWl0SWZMb2NrZWQpOw0KICAgICAgJHN0cmluZyA9IEBcZmlsZV9nZXRfY29udGVudHMoJGRiX2Z1bGxfZm4pOw0KICAgICAgXGZsb2NrKCRmbywgXExPQ0tfVU4pOw0KICAgICAgXGZjbG9zZSgkZm8pOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgJHN0cmluZyA9ICcnOw0KICAgIH0NCiAgDQogICAgJHRtcCA9IFxleHBsb2RlKFxQSFBfRU9MLCAkc3RyaW5nKTsNCiAgICAkZGIgPSBbXTsNCiAgDQogICAgZm9yZWFjaCgkdG1wIGFzICRsaW5lKQ0KICAgIHsNCiAgICAgIGlmKCAhZW1wdHkoJGxpbmUpICkNCiAgICAgIHsNCiAgICAgICAgJHQgPSBcZXhwbG9kZSgnOjonLCAkbGluZSk7DQogICAgICAgICRkYlskdFswXV0gPSAkdFsxXTsNCiAgICAgIH0NCiAgICB9DQogICAgDQogICAgcmV0dXJuICRkYjsNCiAgfQ0KICANCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkb19jb3VudF9kb3dubG9hZCgkZnVsbF9maWxlbmFtZSwgJGZpbGVuYW1lLCAkcGFyYW1zKQ0KICB7DQogICAgJGRiID0gc2VsZjo6cmVhZF9kbF9kYigkcGFyYW1zKTsNCiAgICBcZXh0cmFjdCgkcGFyYW1zLCBcRVhUUl9PVkVSV1JJVEUpOw0KICAgICRkYl9kbiA9IGVtcHR5KCRkbF9jb3VudGVyX2RiX2RpcikgPyAkZm9sZGVyIDogJGRsX2NvdW50ZXJfZGJfZGlyOw0KICAgICRkYl9mbiA9IGVtcHR5KCRkbF9jb3VudGVyX2RiX2ZuKSA/ICcuY291bnRlcl9kYicgOiAkZGxfY291bnRlcl9kYl9mbjsNCiAgICAkZGJfZnVsbF9mbiA9IFxjbXNfam9pbl9wYXRoKCRkYl9kbiwgJGRiX2ZuKTsNCiAgDQogICAgJGtleSA9ICRmdWxsX2ZpbGVuYW1lOw0KICANCiAgICBpZiggaXNzZXQoJGRiWyRrZXldKSApDQogICAgew0KICAgICAgKGludCkkZGJbJGtleV0rKzsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICRkYlska2V5XSA9IDE7DQogICAgfQ0KICAgIA0KICAgICRzdHJpbmcgPSAnJzsNCiAgICANCiAgICBmb3JlYWNoKCRkYiBhcyAkayA9PiAkdikNCiAgICB7DQogICAgICAkc3RyaW5nIC49ICRrIC4gJzo6JyAuICR2IC4gXFBIUF9FT0w7DQogICAgfQ0KICANCiAgICBcZmlsZV9wdXRfY29udGVudHMoJGRiX2Z1bGxfZm4sICRzdHJpbmcsIFxMT0NLX0VYKTsNCiAgfQ0KICANCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkb19kb3dubG9hZCgkZnVsbF9maWxlbmFtZSwgJGZpbGVuYW1lLCAkcGFyYW1zKQ0KICB7DQogICAgJGhhbmRsZXJzID0gXG9iX2xpc3RfaGFuZGxlcnMoKTsNCiAgICBmb3IoJGNudCA9IDAsICRjbnRNYXggPSBcY291bnQoJGhhbmRsZXJzKTsgJGNudCA8ICRjbnRNYXg7ICRjbnQrKykgeyBcb2JfZW5kX2NsZWFuKCk7IH0NCiAgICAjIGdyYWIgdGhlIHBhcmFtcyBpZiB0aGV5IGV4aXN0DQogICAgXGV4dHJhY3QoJHBhcmFtcywgXEVYVFJfT1ZFUldSSVRFKTsNCiAgDQogICAgJGNvdW50X2Rvd25sb2FkcyAgID0gKGJvb2wpKCFlbXB0eSgkY291bnRfZG93bmxvYWRzKSA/PyAkY291bnRfZG93bmxvYWRzKTsNCiAgICANCiAgICAjc29tZSBtaW1lIHR5cGVzDQogICAgJG1pbWVfdHlwZXMgPSBbDQogICAgICAnLmF2aScgID0+ICd2aWRlby9hdmknLA0KICAgICAgJy5ibXAnICA9PiAnaW1hZ2UvYm1wJywNCiAgICAgICd3ZWJwJyAgPT4gJ2ltYWdlL3dlYnAnLA0KICAgICAgJy5jc3YnICA9PiAndGV4dC9jc3YnLA0KICAgICAgJy5kb2MnICA9PiAnYXBwbGljYXRpb24vbXN3b3JkJywNCiAgICAgICcuZXhlJyAgPT4gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsDQogICAgICAnLmdpZicgID0+ICdpbWFnZS9naWYnLA0KICAgICAgJy5odG1sJyA9PiAndGV4dC9odG1sJywNCiAgICAgICcuaWNvJyAgPT4gJ2ltYWdlL3gtaWNvbicsDQogICAgICAnLmpwZycgID0+ICdpbWFnZS9qcGVnJywNCiAgICAgICcubW92JyAgPT4gJ3ZpZGVvL3F1aWNrdGltZScsDQogICAgICAnLnBkZicgID0+ICdhcHBsaWNhdGlvbi9wZGYnLA0KICAgICAgJy5wbmcnICA9PiAnaW1hZ2UvcG5nJywNCiAgICAgICcudHh0JyAgPT4gJ3RleHQvcGxhaW4nLA0KICAgICAgJy5ydGYnICA9PiAndGV4dC9yaWNodGV4dCcsDQogICAgICAnLnN3ZicgID0+ICdhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCcsDQogICAgICAnLnhscycgID0+ICdhcHBsaWNhdGlvbi9leGNlbCcNCiAgICBdOw0KICAgIA0KICAgIGlmKFxmaWxlX2V4aXN0cygkZnVsbF9maWxlbmFtZSkpDQogICAgew0KICAgICAgaWYoJGNvdW50X2Rvd25sb2FkcykNCiAgICAgIHsNCiAgICAgICAgc2VsZjo6ZG9fY291bnRfZG93bmxvYWQoJGZ1bGxfZmlsZW5hbWUsICRmaWxlbmFtZSwgJHBhcmFtcyk7DQogICAgICB9DQogICAgICANCiAgICAgICRhcnJheSAgICAgPSBcZXhwbG9kZSgnLicsICRmdWxsX2ZpbGVuYW1lKTsNCiAgICAgICRmaWxlX2V4dCAgPSAnLicgLiBcZW5kKCRhcnJheSk7DQogICAgICAkbWltZV90eXBlID0gJG1pbWVfdHlwZXNbJGZpbGVfZXh0XSA/PyAnYXBwbGljYXRpb24veC1iaW5hcnknOw0KICAgICAgDQogICAgICAjIHNldCBoZWFkZXJzIGFjY29yZGluZ2x5DQogICAgICBcaGVhZGVyKCdDb250ZW50LXR5cGU6ICcgLiAkbWltZV90eXBlKTsNCiAgICAgIFxoZWFkZXIoJ0NvbnRlbnQtRGVzY3JpcHRpb246IEZpbGUgVHJhbnNmZXInKTsNCiAgICAgIFxoZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoOiAnIC4gXGZpbGVzaXplKCRmdWxsX2ZpbGVuYW1lKSk7DQogICAgICBcaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0nIC4gJGZpbGVuYW1lKTsNCiAgICAgIFxoZWFkZXIoJ1ByYWdtYTogbm8tY2FjaGUnKTsNCiAgICAgIFxoZWFkZXIoJ0V4cGlyZXM6IDAnKTsNCiAgICAgIFxyZWFkZmlsZSgkZnVsbF9maWxlbmFtZSk7DQogICAgICBleGl0Ow0KICAgIH0NCiAgfQ0KICANCiAgLyoqDQogICAqIGRvZXNuJ3Qgc2VlbSB0byB3b3JrIG9uIG1vc3QgcGRmIGZpbGVzLCBzby4uLg0KICAgKiB3ZSdsbCBsaWtlbHkgZGl0Y2ggaXQgc29vbg0KICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlDQogICAqIEByZXR1cm4gYXJyYXkNCiAgICovDQogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0X3BkZl9pbmZvKCRmaWxlKQ0KICB7DQoNCiAgICAkdGl0bGUgPSAnJzsNCiAgICAkYXV0aG9yID0gJyc7DQogICAgDQogICAgJGRlc2NyaXB0aW9uID0gJyc7DQogICAgaWYoXGlzX2ZpbGUoJGZpbGUpICkNCiAgICB7DQogICAgICAkaGFuZGxlID0gXGZvcGVuICgkZmlsZSwgJ3JiJyk7DQogICAgICB3aGlsZSAoIVxmZW9mKCRoYW5kbGUpKQ0KICAgICAgew0KICAgICAgICAkYnVmZmVyID0gXGZnZXRzKCRoYW5kbGUsIDEwMjQpOw0KICAgICAgICANCiAgICAgICAgaWYoIDAgPT09IFxzdHJwb3MoJGJ1ZmZlciwgJy9UaXRsZSAoJykgKQ0KICAgICAgICB7DQogICAgICAgICAgJHRpdGxlID0gXHN0cl9yZXBsYWNlKA0KICAgICAgICAgICAgJ1xcJywgJycsICdVVEYtOCcgPT09IFxtYl9kZXRlY3RfZW5jb2RpbmcoJGJ1ZmZlciwgJ2F1dG8nLCBUUlVFKQ0KICAgICAgICAgICAgPyBcc3Vic3RyKFx0cmltKCRidWZmZXIpLCA4LCAtMSkNCiAgICAgICAgICAgIDogXG1iX2NvbnZlcnRfZW5jb2RpbmcoDQogICAgICAgICAgICAgIFxzdWJzdHIoXHRyaW0oJGJ1ZmZlciksIDgsIC0xKSwgJ1VURi04Jw0KICAgICAgICAgICAgKQ0KICAgICAgICAgICk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIGlmKCAwID09PSBcc3RycG9zKCRidWZmZXIsICcvQXV0aG9yICgnKSApDQogICAgICAgIHsNCiAgICAgICAgICAkYXV0aG9yID0gXHN0cl9yZXBsYWNlKA0KICAgICAgICAgICAgJ1xcJywgJycsICdVVEYtOCcgPT09IFxtYl9kZXRlY3RfZW5jb2RpbmcoJGJ1ZmZlciwgJ2F1dG8nLCBUUlVFKQ0KICAgICAgICAgICAgPyBcc3Vic3RyKFx0cmltKCRidWZmZXIpLCA5LCAtMSkNCiAgICAgICAgICAgIDogXG1iX2NvbnZlcnRfZW5jb2RpbmcoDQogICAgICAgICAgICAgIFxzdWJzdHIoXHRyaW0oJGJ1ZmZlciksIDksIC0xKSwgJ1VURi04Jw0KICAgICAgICAgICAgKQ0KICAgICAgICAgICk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIGlmKCAwID09PSBcc3RycG9zKCRidWZmZXIsICcvU3ViamVjdCAoJykgKQ0KICAgICAgICB7DQogICAgICAgICAgJGRlc2NyaXB0aW9uID0gXHN0cl9yZXBsYWNlKA0KICAgICAgICAgICAgJ1xcJywgJycsICdVVEYtOCcgPT09IFxtYl9kZXRlY3RfZW5jb2RpbmcoDQogICAgICAgICAgICAgICAgICAgICAgICAkYnVmZmVyLCAnYXV0bycsIFRSVUUNCiAgICAgICAgICAgICAgICAgICAgICApID8gXHN1YnN0cigNCiAgICAgICAgICAgIFx0cmltKCRidWZmZXIpLCAxMCwgLTENCiAgICAgICAgICApIDogXG1iX2NvbnZlcnRfZW5jb2RpbmcoXHN1YnN0cihcdHJpbSgkYnVmZmVyKSwgMTAsIC0xKSwgJ1VURi04JykNCiAgICAgICAgICApOw0KICAgICAgICB9DQogIA0KICAgICAgICBpZigkdGl0bGUgJiYgJGF1dGhvciAmJiAkZGVzY3JpcHRpb24pDQogICAgICAgIHsNCiAgICAgICAgICBcZmNsb3NlKCRoYW5kbGUpOw0KICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9DQogICAgICB9DQogICAgICANCiAgICAgIGlmKCEkdGl0bGUgfHwgISRhdXRob3IgfHwgISRkZXNjcmlwdGlvbikNCiAgICAgIHsNCiAgICAgICAgXGZjbG9zZSgkaGFuZGxlKTsNCiAgICAgIH0NCiAgICB9DQogIA0KICAgIHJldHVybiBbDQogICAgICAndGl0bGUnICAgICAgID0+ICR0aXRsZSwNCiAgICAgICdhdXRob3InICAgICAgPT4gJGF1dGhvciwNCiAgICAgICdkZXNjcmlwdGlvbicgPT4gJGRlc2NyaXB0aW9uDQogICAgXTsNCiAgfQ0KICANCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/internal_plugins</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/internal_plugins/block.protect.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qDQogKiBTbWFydHkgcGx1Z2luDQogKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogKiBGaWxlOiAgICAgYmxvY2suY29udGVudF9wcm90ZWN0LnBocA0KICogVHlwZTogICAgIGJsb2NrDQogKiBOYW1lOiAgICAgY29udGVudF9wcm90ZWN0DQogKiBQdXJwb3NlOiAgcHJvdGVjdCBhIGJsb2NrIG9mIHRleHQNCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAqLw0KZnVuY3Rpb24gc21hcnR5X2Jsb2NrX3Byb3RlY3QoJHBhcmFtcywgJGNvbnRlbnQsIFNtYXJ0eV9JbnRlcm5hbF9UZW1wbGF0ZSAkdGVtcGxhdGUsICYkcmVwZWF0KQ0Kew0KICAvLyRjdXJyZW50X3BhZ2VfYWxpYXMgPSBjbXNfdXRpbHM6OmdldF9jdXJyZW50X2FsaWFzKCk7DQogICRhbGxvdyA9IGNtc191dGlsczo6Z2V0X2FwcF9kYXRhKCdfQ1BfQWxsb3cnKTsNCiAgDQogIC8vIG9ubHkgb3V0cHV0IG9uIHRoZSBjbG9zaW5nIHRhZw0KICBpZighJHJlcGVhdCAmJiBpc3NldCgkY29udGVudCkpDQogIHsNCiAgICBpZigkYWxsb3cpDQogICAgew0KICAgICAgcmV0dXJuIGlzc2V0KCRwYXJhbXNbJ2Fzc2lnbiddKQ0KICAgICAgICA/ICR0ZW1wbGF0ZS0+YXNzaWduKCRwYXJhbXNbJ2Fzc2lnbiddLCAkY29udGVudCkNCiAgICAgICAgOiAkY29udGVudDsNCiAgICB9DQogIA0KICAgICRwcm90ZWN0ZWRfbXNnID0gKCAgIyB3ZSBhZGQgYWJpbGl0eSB0byBvdmVycmlkZSBwcm90ZWN0ZWRfbXNnIGZyb20ge3Byb3RlY3QgcHJvdGVjdGVkX21zZz0nc29tZSBtZXNzYWdlJ30NCiAgICAgICRwYXJhbXNbJ3Byb3RlY3RlZF9tc2cnXSA/PyBjbXNfdXRpbHM6OmdldF9hcHBfZGF0YSgnX0NQX1Byb3RfTXNnJykNCiAgICApOw0KICANCiAgICBpZihpc3NldCgkcHJvdGVjdGVkX21zZykpDQogICAgew0KICAgICAgcmV0dXJuIGlzc2V0KCRwYXJhbXNbJ2Fzc2lnbiddKQ0KICAgICAgICA/ICR0ZW1wbGF0ZS0+YXNzaWduKCRwYXJhbXNbJ2Fzc2lnbiddLCAkcHJvdGVjdGVkX21zZykNCiAgICAgICAgOiAkcHJvdGVjdGVkX21zZzsNCiAgICB9DQogIH0NCn0NCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/internal_plugins/function.content_protect.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQbHVnaW46IHBhZ2VfcHJvdGVjdCAtIFNpbmdsZSBQYWdlIFNpbXBsZSBQYXNzd29yZCBQcm90ZWN0aW9uCiMgVmVyc2lvbiAxLjIuMAojIChjKSAyMDEyIC0yMDE0IEZlcm5hbmRvIE1vcmdhZG8gKEpvTW9yZykgam9tb3JnLm1vcmdAZ21haWwuY29tCiMgCiMgU2ltcGxlIHBsdWdpbiB0byBhbGxvdyB0byBwcm90ZWN0IGEgcGFnZSB3aXRoIGEgcGFzc3dvcmQKIyAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlCiMgaW4gYW55IE5vbiBHUEwgdmVyc2lvbiBvZiBDTVMgTWFkZSBzaW1wbGUsIG9yIGluIGFueSB2ZXJzaW9uIG9mIENNUwojIE1hZGUgc2ltcGxlIHRoYXQgZG9lcyBub3QgaW5kaWNhdGUgY2xlYXJseSBhbmQgb2J2aW91c2x5IGluIGl0cyBhZG1pbiAKIyBzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmZ1bmN0aW9uIHNtYXJ0eV9mdW5jdGlvbl9jb250ZW50X3Byb3RlY3QoJHBhcmFtcywgJHNtYXJ0eSkKewogICMgaW5pdGlhbGl6ZSBhIGZldyB2YXJzCiAgJGN1cnJlbnRfcGFnZV9hbGlhcyA9IGNtc191dGlsczo6Z2V0X2N1cnJlbnRfYWxpYXMoKTsKICAkbG9nb3V0X2FsaWFzICAgICAgID0gJHBhcmFtc1snbG9nb3V0X2FsaWFzJ10gPz8gJGN1cnJlbnRfcGFnZV9hbGlhczsKICAkbG9naW5fYWxpYXMgICAgICAgID0gJHBhcmFtc1snbG9naW5fYWxpYXMnXSA/PyBOVUxMOwogICRhc3NpZ25fdmFyICAgICAgICAgPSAkcGFyYW1zWydhc3NpZ24nXSA/PyAnY3BfbG9nZ2VkX2luJzsKICAKICAjIHNvbWUgb2YgdGhlIHBhcmFtcyBoYXZlIHRvIGJlIHBlcnNpc3RlbnQgdGhyb3VnaCBhbGwgdGhlIHBhZ2UgcmVxdWVzdCwKICAjIHNvIHdlIHVzZSB0aGUgc2FtZSBtZXRob2QgYXMgTW9kdWxlSGludCBpLmUuIGNtc191dGlscyBEYXRhIFN0b3JhZ2UKICAKICAjIGZsYWcgdG8gY2hlY2sgaWYgY3VycmVudCB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQKICAkYWxsb3cgID0gY21zX3V0aWxzOjpnZXRfYXBwX2RhdGEoJ19DUF9BbGxvdycpOwogIAogIGlmKCAhaXNzZXQoJGFsbG93KSApIHsgJGFsbG93ID0gZmFsc2U7IH0KICAKICAjIHRpbWVvdXQgaW4gbWludXRlcyAoY29va2llIGxpZmVjeWNsZSkuIE51bGwgb3IgMCAoemVybykgbWVhbnMgb2ZmCiAgJHRpbWVvdXQgICAgID0gY21zX3V0aWxzOjpnZXRfYXBwX2RhdGEoJ19DUF9UT3V0Jyk7CiAgJHVzZV90aW1lb3V0ID0gY21zX3V0aWxzOjpnZXRfYXBwX2RhdGEoJ19DUF91c2VUT3V0Jyk7CiAgCiAgaWYoISR0aW1lb3V0KQogIHsKICAgIGlmKGlzc2V0KCRwYXJhbXNbJ3RpbWVvdXQnXSkpCiAgICB7CiAgICAgICRpbnRlcnZhbCA9ICRwYXJhbXNbJ3RpbWVvdXQnXSAqIDYwOwogICAgfQogICAgCiAgICAkdGltZW91dCA9ICggaXNzZXQoJGludGVydmFsKSA/IHRpbWUoKSArICRpbnRlcnZhbCA6IDAgKTsgICAgICAgICAgIAogICAgJHVzZV90aW1lb3V0ID0gKCAkdGltZW91dCA+IDAgKTsKICAgIGNtc191dGlsczo6c2V0X2FwcF9kYXRhKCdfQ1BfVE91dCcsICR0aW1lb3V0KTsKICAgIGNtc191dGlsczo6c2V0X2FwcF9kYXRhKCdfQ1BfdXNlVE91dCcsICR1c2VfdGltZW91dCk7CiAgfQogIAogICRjb29raWVfbmFtZSAgPSBjbXNfdXRpbHM6OmdldF9hcHBfZGF0YSgnX0NQX0Nvb2tpZU4nKTsKICAKICBpZiggIWlzc2V0KCRjb29raWVfbmFtZSkgKQogIHsKICAgICRjb29raWVfbmFtZSA9ICRwYXJhbXNbJ2Nvb2tpZV9uYW1lJ10gPz8gJ2NwX2F1dGgnOwogICAgICAgICAgICAgICAgICAgCiAgICBjbXNfdXRpbHM6OnNldF9hcHBfZGF0YSgnX0NQX0Nvb2tpZU4nLCAkY29va2llX25hbWUgKTsKICB9IAogIAogICMjIyMjIG1lc3NhZ2VzICMjIyMjICAKICAkcHJvdGVjdGVkX21zZyA9IGNtc191dGlsczo6Z2V0X2FwcF9kYXRhKCdfQ1BfUHJvdF9Nc2cnKTsKICAKICBpZighaXNzZXQoJHByb3RlY3RlZF9tc2cpKQogIHsKICAgICRwcm90ZWN0ZWRfbXNnID0gaXNzZXQoJHBhcmFtc1sncHJvdGVjdGVkX21zZyddKSAKICAgICAgICAgICAgICAgICAgICAgPyAkcGFyYW1zWyckcHJvdGVjdGVkX21zZyddIAogICAgICAgICAgICAgICAgICAgICA6ICRwcm90ZWN0ZWRfbXNnOwogICAgICAgICAgICAgICAgICAgICAKICAgIGNtc191dGlsczo6c2V0X2FwcF9kYXRhKCdfQ1BfUHJvdF9Nc2cnLCAkcHJvdGVjdGVkX21zZyApOwogIH0gCiAgICAKICAkZXJyb3JfbXNnID0gY21zX3V0aWxzOjpnZXRfYXBwX2RhdGEoJ19DUF9FcnJvcl9Nc2cnKTsKICAKICBpZighaXNzZXQoJGVycm9yX21zZykpCiAgewogICAgJGVycm9yX21zZyA9ICRwYXJhbXNbJ2Vycm9yX21zZyddID8/ICdUaGUgcGFzc3dvcmQgaXMgbm90IGNvcnJlY3QuJzsKICAgICAgICAgICAgICAgICAKICAgIGNtc191dGlsczo6c2V0X2FwcF9kYXRhKCdfQ1BfRXJyb3JfTXNnJywgJGVycm9yX21zZyApOwogIH0gCiAgCiAgJHdlbGNvbWVfbXNnID0gY21zX3V0aWxzOjpnZXRfYXBwX2RhdGEoJ19DUF9XZWxjb21lX01zZycpOwogIAogICAgCiAgaWYoIWlzc2V0KCR3ZWxjb21lX21zZykpCiAgewogICAgJHdlbGNvbWVfbXNnID0gJHBhcmFtc1snd2VsY29tZV9tc2cnXSA/PyAnUGxlYXNlIGVudGVyIHRoZSBwYXNzd29yZCB0byBhY2Nlc3MgdGhpcyBwYWdlLic7CiAgICAgICAgICAgICAgICAgICAKICAgIGNtc191dGlsczo6c2V0X2FwcF9kYXRhKCdfQ1BfV2VsY29tZV9Nc2cnLCAkd2VsY29tZV9tc2cgKTsKICB9IAogICMjIyMjIG1lc3NhZ2VzIGVuZCAjIyMjIwogIAogIGlmKCFpc3NldCgkcGFyYW1zWydwYXNzd29yZHMnXSkpCiAgewogICAgJHBhc3N3b3JkcyA9IGNtc191dGlsczo6Z2V0X2FwcF9kYXRhKCdfQ1BfUGFzcycpOwogIH0KICBlbHNlCiAgewogICAgJHBhc3N3b3JkcyA9ICYkcGFyYW1zWydwYXNzd29yZHMnXTsKICB9CgogIGlmKCFpc19hcnJheSgkcGFzc3dvcmRzKSkKICB7CiAgICBpZihmYWxzZSA9PT0gc3RycG9zKCRwYXNzd29yZHMsICcsJykpCiAgICB7CiAgICAgICRwYXNzd29yZHMgPSBbJHBhc3N3b3Jkc107CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICRwYXNzd29yZHMgPSBleHBsb2RlKCcsJywgJHBhc3N3b3Jkcyk7CiAgICB9CiAgfQogICAKICBjbXNfdXRpbHM6OnNldF9hcHBfZGF0YSgnX0NQX1Bhc3MnLCAkcGFzc3dvcmRzKTsKCiAgIyMjIyMgcHJvY2VzcyByZXF1ZXN0cyBhbmQgQ29va2llcyAjIyMjIwogICRjb29raWVfZm91bmQgPSBmYWxzZTsKICAKICAjIGxvZ291dAogIGlmKGlzc2V0KCRfUE9TVFsnY3BfbG9nb3V0J10pKQogIHsKICAgICMgY2xlYXIgcGFzcyBmcm9tIGNvb2tpZSBhbmQgcmVkaXJlY3QKICAgIHNldGNvb2tpZSgkY29va2llX25hbWUsICcnLCAwLCAnLycpOyAKICAgICRhbGxvdyA9IGZhbHNlOwogICAgcmVkaXJlY3RfdG9fYWxpYXMoJGxvZ291dF9hbGlhcyk7CiAgfQogIAogICMgcHJvY2VzcyBwYXNzCiAgaWYoaXNzZXQoJF9QT1NUWydjcF9wYXNzd29yZCddKSkKICB7CiAgICAkcGFzcyA9ICRfUE9TVFsnY3BfcGFzc3dvcmQnXTsKICAgIAogICAgaWYoICFpbl9hcnJheSgkcGFzcywgJHBhc3N3b3JkcywgVFJVRSkpCiAgICB7CiAgICAgICRtc2cgPSAkZXJyb3JfbXNnOwogICAgICAkYWxsb3cgPSBmYWxzZTsKICAgIH0KICAgIGVsc2UgCiAgICB7CiAgICAgIGlmKCR1c2VfdGltZW91dCkKICAgICAgewogICAgICAgICMgd2Ugc2V0IGNvb2tpZSBoZXJlCiAgICAgICAgI3NldGNvb2tpZSgkY29va2llX25hbWUsIG1kNSgkdXNlcm5hbWUgLiAnJWNwJScgLiAkcGFzcyksICR0aW1lb3V0LCAnLycpOyAjIHRvZG8KICAgICAgICBzZXRjb29raWUoJGNvb2tpZV9uYW1lLCBtZDUoJHBhc3MpLCAkdGltZW91dCwgJy8nKTsKICAgICAgfQogICAgICAKICAgICAgJGFsbG93ID0gdHJ1ZTsKICAgICAgCiAgICAgICMgQHNpbmNlIDEuMQogICAgICBpZiggIWlzc2V0KCRsb2dpbl9hbGlhcykgKQogICAgICB7CiAgICAgICAgcmVkaXJlY3RfdG9fYWxpYXMoJGxvZ2luX2FsaWFzKTsKICAgICAgfQogICAgfQoKICB9CiAgZWxzZSBpZigkdXNlX3RpbWVvdXQpCiAgewogICAgIyBjaGVjayBpZiBjb29raWUgZXhpc3RzIGFuZCBpcyBzZXQKICAgIGlmKCFpc3NldCgkX0NPT0tJRVskY29va2llX25hbWVdKSkKICAgIHsKICAgICAgJG1zZyAgID0gJyc7CiAgICAgICRhbGxvdyA9IEZBTFNFOwogICAgfQogICAgCiAgICBmb3JlYWNoKCRwYXNzd29yZHMgYXMgJG9uZSkKICAgIHsKICAgICAgaWYoIGlzc2V0KCRfQ09PS0lFWyRjb29raWVfbmFtZV0pICYmICRfQ09PS0lFWyRjb29raWVfbmFtZV0gPT09IG1kNSgkb25lKSApCiAgICAgIHsKICAgICAgICAkY29va2llX2ZvdW5kID0gVFJVRTsKICAgICAgICAkYWxsb3cgICAgICAgID0gVFJVRTsKICAgICAgICAKICAgICAgICAjIHNvIHdlIGhhdmUgYSB2YWxpZCByZXF1ZXN0OiBleHRlbmQgdGltZW91dAogICAgICAgIHNldGNvb2tpZSgkY29va2llX25hbWUsIG1kNSgkb25lKSwgJHRpbWVvdXQsICcvJyk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIAogICAgaWYoISRjb29raWVfZm91bmQpCiAgICB7CiAgICAgICRhbGxvdyA9IGZhbHNlOwogICAgICAjIG1heSB2ZXJ5IHdlbGwgYmUgcmVkdW5kYW50IGJ1dCBoZXkhISEgd2UgY2xlYXIgYW55IHBlbmRpbmcgbWVzc2FnZXMgYW55d2F5CiAgICAgICRtc2cgPSAnJzsKICAgIH0KICB9CiAgIyMjIyMgZW5kIHByb2Nlc3MgcmVxdWVzdHMgYW5kIENvb2tpZXMgIyMjIyMKICAKICBjbXNfdXRpbHM6OnNldF9hcHBfZGF0YSgnX0NQX0FsbG93JywgJGFsbG93KTsKICAKICAjIyMjIyBhY3Rpb25zICMjIyMjIAogICMgQHNpbmNlIDEuMgogICRhY3Rpb24gPSAkcGFyYW1zWydhY3Rpb24nXSA/PyAnZGVmYXVsdCc7CgogIHN3aXRjaCAoJGFjdGlvbikgCiAgewogICAgY2FzZSAnZm9ybSc6CiAgICB7CiAgICAgICMgY29tbW9uIHRvIGJvdGggYnV0dG9ucwogICAgICAkYnV0dG9uX2lkID0gaXNzZXQoJHBhcmFtc1snYnV0dG9uX2lkJ10pIAogICAgICAgICAgICAgICAgICAgPyAnaWQ9IicgLiAkcGFyYW1zWydidXR0b25faWQnXSAuICciICcKICAgICAgICAgICAgICAgICAgIDogJyc7ICAgICAgICAKICAgICAgCiAgICAgICRidXR0b25fY2xhc3MgPSBpc3NldCgkcGFyYW1zWydidXR0b25fY2xhc3MnXSkgCiAgICAgICAgICAgICAgICAgICAgICA/ICdjbGFzcz0iJyAuICRwYXJhbXNbJ2J1dHRvbl9jbGFzcyddIC4gJyIgJwogICAgICAgICAgICAgICAgICAgICAgOiAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgaWYoISRhbGxvdykKICAgICAgewogICAgICAgICRsb2dpbl9idG4gPSAkcGFyYW1zWydsb2dpbl9idG4nXSA/PyAnTG9naW4nOwogICAgICAgIAogICAgICAgICRmb3JtX2lkID0gaXNzZXQoJHBhcmFtc1snZm9ybV9pZCddKSAKICAgICAgICAgICAgICAgICAgID8gJ2lkPSInIC4gJHBhcmFtc1snZm9ybV9pZCddIC4gJyIgJwogICAgICAgICAgICAgICAgICAgOiAnJzsgICAgICAgIAogICAgICAgIAogICAgICAgICRmb3JtX2NsYXNzID0gaXNzZXQoJHBhcmFtc1snZm9ybV9jbGFzcyddKSAKICAgICAgICAgICAgICAgICAgICAgID8gJ2NsYXNzPSInIC4gJHBhcmFtc1snZm9ybV9jbGFzcyddIC4gJyIgJwogICAgICAgICAgICAgICAgICAgICAgOiAnJzsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICRpbl9wYXNzX2lkID0gaXNzZXQoJHBhcmFtc1snaW5fcGFzc19pZCddKSAKICAgICAgICAgICAgICAgICAgICAgID8gJ2lkPSInIC4gJHBhcmFtc1snaW5fcGFzc19pZCddIC4gJyIgJwogICAgICAgICAgICAgICAgICAgICAgOiAnJzsgICAgICAgIAogICAgICAgIAogICAgICAgICRpbl9wYXNzX2NsYXNzID0gaXNzZXQoJHBhcmFtc1snaW5fcGFzc19jbGFzcyddKSAKICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2NsYXNzPSInIC4gJHBhcmFtc1snaW5fcGFzc19jbGFzcyddIC4gJyIgJwogICAgICAgICAgICAgICAgICAgICAgICAgOiAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICMgQHNpbmNlIDEuMiAtPiBhdm9pZCB3YXJuaW5ncwogICAgICAgICRtc2cgPSAkbXNnID8/ICcnOwogIAogICAgICAgICRodG1sID0gJzxmb3JtICcgLiAkZm9ybV9pZCAuICRmb3JtX2NsYXNzIC4gJyBtZXRob2Q9InBvc3QiPic7CiAgICAgICAgJGh0bWwgLj0gJzxoMz4nLiAkd2VsY29tZV9tc2cgLiAnPC9oMz4nOwogICAgICAgICRodG1sIC49ICc8cCBzdHlsZT0iY29sb3I6IHJlZCAiPicgLiAkbXNnIC4gJzwvcD4nOwogICAgICAgICRodG1sIC49ICc8aW5wdXQgJyAuICRpbl9wYXNzX2lkIC4gJGluX3Bhc3NfY2xhc3MgLiAndHlwZT0icGFzc3dvcmQiIG5hbWU9ImNwX3Bhc3N3b3JkIiBhdXRvY29tcGxldGU9Im9mZiIgLz4nOwogICAgICAgICRodG1sIC49ICc8aW5wdXQgJyAuICRidXR0b25faWQgLiAkYnV0dG9uX2NsYXNzIC4gJ3R5cGU9InN1Ym1pdCIgbmFtZT0iU3VibWl0IiB2YWx1ZT0iJyAuICRsb2dpbl9idG4gLiAnIiAvPic7CiAgCiAgICAgIH0KICAgICAgZWxzZQogICAgICB7CiAgICAgICAgJGxvZ291dF9idG4gPSAkcGFyYW1zWydsb2dvdXRfYnRuJ10gPz8gJ0xvZ291dCc7CiAgCiAgICAgICAgJGh0bWwgPSAnPGZvcm0gbWV0aG9kPSJwb3N0Ij4nOwogICAgICAgICRodG1sIC49ICc8aW5wdXQnIC4gJGJ1dHRvbl9pZCAuICRidXR0b25fY2xhc3MgLiAnIHR5cGU9InN1Ym1pdCIgbmFtZT0iY3BfbG9nb3V0IiB2YWx1ZT0iJyAuICRsb2dvdXRfYnRuIC4gJyIgLz4nOwogICAgICB9CiAgICAgIAogICAgICAkaHRtbCAuPSAnPC9mb3JtPic7CiAgCiAgICAgICMgQHNpbmNlIDEuMgogICAgICAgIGlmKGlzc2V0KCRwYXJhbXNbJ2Fzc2lnbl9vdXRwdXQnXSkpCiAgICAgICAgewogICAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCRwYXJhbXNbJ2Fzc2lnbl9vdXRwdXQnXSwgJGh0bWwpOyAKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICRyZXQgPSAkaHRtbDsKICAgICAgICB9ICAgCiAgICAKICAgIH0KICAgIGJyZWFrOwogICAgCiAgICAjIGRlZmF1bHQgYWN0aW9uczoKICAgIGNhc2UgJ3NldCc6CiAgICBjYXNlICdkZWZhdWx0JzoKICAgIGRlZmF1bHQ6CiAgICB7CiAgICAgICMgZHVtbXkgYWN0aW9uczogc28gb25lIGNhbiBzZXQgcGVyc2lzdGVudCBwYXJhbWV0ZXJzIHdpdGhvdXQgdHJpZ2dlcmluZyBvdGhlciBhY3Rpb25zCiAgICB9CgogIH0KICAKICAjIHNlbmQgYSB2YXIgdG8gdGhlIGNhbGxpbmcgdGVtcGxhdGUsIGVpdGhlciBhc3NpZ25lZCBuYW1lIG9yIGRlZmF1bHRzIHRvIHskY3BfbG9nZ2VkX2lufQogICRzbWFydHktPmFzc2lnbigkYXNzaWduX3ZhciwgJGFsbG93KTsKICAKICByZXR1cm4gJHJldCA/PyBOVUxMOyAjIEBzaW5jZSAxLjIgLT4gaWYgd2UgY29tZSBmcm9tIGZvcm1zIGFjdGlvbiB3ZSBtYXkgaGF2ZSAkcmV0IHNldAp9CgojIyMjIyBEb2NzICMjIyMjCmZ1bmN0aW9uIHNtYXJ0eV9jbXNfaGVscF9mdW5jdGlvbl9jb250ZW50X3Byb3RlY3QoKQp7CiAgJHR4dCA9IDw8PCdFT1QnCjwhLS0vdGFiIGhlYWRlcjogR2VuZXJhbC8tLT4KCjxkaXYgaWQ9InBhZ2VfdGFicyI+CiAgPGRpdiBpZD0iZ2VuZXJhbCI+CiAgICBHZW5lcmFsCiAgPC9kaXY+CiAgIAogPCEtLS90YWIgaGVhZGVyOiBUaGUgUXVpY2sgV2F5Ly0tPgogICAgIAogIDxkaXYgaWQ9InF1aWNrIj4KICAgIFRoZSBRdWljayBXYXkKICA8L2Rpdj4KICAKICA8IS0tL3RhYiBoZWFkZXI6IEluaXRpYWxpemluZy8tLT4KICAKICA8ZGl2IGlkPSJpbml0Ij4KICAgIEluaXRpYWxpemluZwogIDwvZGl2PiAgCiAgCiAgPCEtLS90YWIgaGVhZGVyOiBGb3JtIEFjdGlvbi8tLT4KICAKICA8ZGl2IGlkPSJmb3JtIj4KICAgIFRoZSBGb3JtIEFjdGlvbgogIDwvZGl2PgogICAKICA8IS0tL3RhYiBoZWFkZXI6IFNldCBBY3Rpb24vLS0+CiAgCiAgPGRpdiBpZD0ic2V0Ij4KICAgIFRoZSBTZXQgQWN0aW9uCiAgPC9kaXY+CiAgIAogIDwhLS0vdGFiIGhlYWRlcjogUHJvdGVjdCBUYWdzLy0tPgogIAogIDxkaXYgaWQ9InByb3RlY3QiPgogICAgVGhlIFByb3RlY3QgVGFncwogIDwvZGl2PgogIAogIDwhLS0vdGFiIGhlYWRlcjogU25pcHBldHMvLS0+CiAgICAgICAgIAogIDxkaXYgaWQ9InNuaXBwZXRzIj4KICAgIFNuaXBwZXRzCiAgPC9kaXY+CiAgICAKICA8IS0tL3RhYiBoZWFkZXI6IEZpbmFsIE5vdGVzLy0tPgogICAgICAgICAKICA8ZGl2IGlkPSJub3RlcyI+CiAgICBGaW5hbCBOb3RlcwogIDwvZGl2PgogIAo8L2Rpdj4KCjxkaXYgY2xhc3M9ImNsZWFyYiI+PC9kaXY+Cgo8IS0tL3RhYjogR2VuZXJhbC8tLT4KCjxkaXYgaWQ9ImdlbmVyYWxfYyI+CgogIDxoMz5XaGF0IGRvZXMgdGhpcyBkbz88L2gzPgogIDxwPlRoaXMgcGx1Z2luIGFsbG93cyB5b3UgdG8gcHJvdGVjdCBhIG51bWJlciBwYWdlcyB3aXRoIG9uZSBvciBtb3JlIHBhc3N3b3Jkcy48L3A+CiAgPHA+VGhpcyBwbHVnaW4gY2FuIGJlIHVzZWQgb24gYW55IG51bWJlciBvZiBwYWdlcywgZWl0aGVyIGJ5IGJlaW5nIHNldCBvbmNlIHBlciBlYWNoIHBhZ2UgeW91IHdhbnQgdG8gcHJvdGVjdCwgb3IgYnkgYmVpbmcgc2V0IG9uIGEgcGFnZSB0ZW1wbGF0ZSwgYWxsb3dpbmcgeW91IHRvIHByb3RlY3QgYWxsIHBhZ2VzIGNvbm5lY3RlZCB0byB0aGF0IHRlbXBsYXRlPC9wPgogIDxoMz5Ib3cgdG8gdXNlIGl0PzwvaDM+CiAgPHA+QXMgb2YgdmVyc2lvbiAxLjIsIHRoaXMgcGx1Z2luIGNhbiB3b3JrIGluIHR3byBkaWZmZXJlbnQgd2F5czo8L3A+CiAgPHVsPgogICAgPGxpPnRoZSB0eXBpY2FsIHdheSB3aGVyZSB5b3UgaW5pdGlhbGl6ZSB0aGUgcGx1Z2luIGVpdGhlciBvbiB0aGUgdGVtcGxhdGUsIHVzaW5nIHRoZSBmb2xsb3dpbmcgdGFnIDxzdHJvbmc+e3BhZ2VfcHJvdGVjdH08L3N0cm9uZz4gb24gdGhlIHZlcnkgYmVnaW5uaW5nIG9mIHRoZSB0ZW1wbGF0ZSwgYW5kIHJpZ2h0IGJlZm9yZSB0aGU8c3Ryb25nPntwcm9jZXNzX3BhZ2VkYXRhfTwvc3Ryb25nPiBpZiBpdCBleGlzdHMsIG9yIG9uIHRoZSBmaWVsZCA8c3Ryb25nPlNtYXJ0eSBkYXRhIG9yIGxvZ2ljIHRoYXQgaXMgc3BlY2lmaWMgdG8gdGhpcyBwYWdlPC9zdHJvbmc+KiBmb3VuZCBvbiBlYWNoIHBhZ2UgPGVtPjxzdHJvbmc+b3B0aW9ucyB0YWI8L3N0cm9uZz48L2VtPjs8L2xpPgogICAgPGxpPmEgZGlmZmVyZW50IGZhc3RlciB3YXkgd2hlcmUgeW91IGRvbid0IGhhdmUgdG8gaW5pdGlhbGl6ZSB0aGUgcGx1Z2luLCBidXQgd2l0aCB3aGljaCB5b3UgbG9zZSBmbGV4aWJpbGl0eTogdXNlIGEgbWluaW1hbCB0YWcgY2FsbCB3aXRoIHRoZSBmb3JtIGFuZCBjaGVjayBmb3IgYSA8c3Ryb25nPlNtYXJ0eTwvc3Ryb25nPiB2YXJpYWJsZSwgPHN0cm9uZz4kcHBfbG9nZ2VkX2luPC9zdHJvbmc+IGJ5IGRlZmF1bHQsIHdpdGggc29tZSA8c3Ryb25nPlNtYXJ0eTwvc3Ryb25nPiBsb2dpYzs8L2xpPgogIDwvdWw+CiAgPHA+Tm90ZSB0aGF0IHRoZXNlIHR3byBtZXRob2RzIGFyZSBub3QgbXV0dWFsbHkgZXhjbHVzaXZlOiBvbmUgYWRkcyB0byB0aGUgb3RoZXIuPC9wPgogIAogIDxkaXYgY2xhc3M9Indhcm5pbmciIHN0eWxlPSJkaXNwbGF5OmJsb2NrOyI+CiAgPHA+PHN0cm9uZz4qIE5vdGU6IDwvc3Ryb25nPnRoaXMgb25seSB3b3JrcyBpZiB0aGUgdGFnIDxzdHJvbmc+e3Byb2Nlc3NfcGFnZWRhdGF9PC9zdHJvbmc+IGlzIHByZXNlbnQgb24gdGhlIHRlbXBsYXRlIGFuZCBpcyBjYWxsZWQgYmVmb3JlIGFueSBvdGhlciBjb250ZW50IGJsb2NrLjwvcD4KICA8L2Rpdj4KICAKICA8aDM+V2hhdCBwYXJhbWV0ZXJzIGRvZXMgaXQgdGFrZT88L2gzPgogIDx1bD4KICAgIDxsaT48ZW0+KG9wdGlvbmFsKSA8c3Ryb25nPmFjdGlvbjwvc3Ryb25nPjwvZW0+IC0gcG9zc2libGUgdmFsdWVzOgogICAgICA8dWw+CiAgICAgICAgPGxpPjxlbT48c3Ryb25nPidkZWZhdWx0PC9zdHJvbmc+PC9lbT48c3Ryb25nPic8L3N0cm9uZz46IHRoZSBkZWZhdWx0IGFjdGlvbiBvZiB0aGUgcGx1Z2luIHdoaWNoIGlzIHRvIGluaXRpYWxpemUgaXRzZWxmOzwvbGk+CiAgICAgICAgPGxpPjxlbT48c3Ryb25nPidmb3JtPC9zdHJvbmc+PC9lbT48c3Ryb25nPic8L3N0cm9uZz46IHNob3cgZWl0aGVyIHRoZSA8c3Ryb25nPmxvZ2luPC9zdHJvbmc+IGZvcm0gb3IgdGhlIDxzdHJvbmc+bG9nb3V0PC9zdHJvbmc+IGZvcm0sIGRlcGVuZGluZyBvbiBjdXJyZW50IHVzZXIgc3RhdGU7PC9saT4KICAgICAgICA8bGk+PGVtPjxzdHJvbmc+J3NldDwvc3Ryb25nPjwvZW0+PHN0cm9uZz4nPC9zdHJvbmc+OiB1c2UgdGhpcyBhY3Rpb24gdG8gZGlzdHJpYnV0ZSBwZXJzaXN0ZW50IHBhcmFtZXRlcnMgdGhvdWdoIGRpZmZlcmVudCB0YWdzIG9uIHRoZSBzYW1lIHBhZ2UgKGhlbHBzIHJlYWRhYmlsaXR5KTs8L2xpPgogICAgICA8L3VsPgogICAgPC9saT4KICAgIDxsaT48ZW0+KG9wdGlvbmFsKSAocGVyc2lzdGVudCkgPHN0cm9uZz5sb2dpbl9hbGlhczwvc3Ryb25nPjwvZW0+IC0gYW4gZXhpc3RpbmcgcGFnZSBhbGlhcyAoZGVmYXVsdHMgdG8gbm8gcmVkaXJlY3Rpb24pOiB0aGlzIHdpbGwgYmUgdXNlZCB0byByZWRpcmVjdCBhZnRlciBsb2dpbiBpZiBuZWVkZWQ7PC9saT4gIAogICAgPGxpPjxlbT4ob3B0aW9uYWwpIChwZXJzaXN0ZW50KSA8c3Ryb25nPmxvZ291dF9hbGlhczwvc3Ryb25nPjwvZW0+IC0gYW4gZXhpc3RpbmcgcGFnZSBhbGlhcyAoZGVmYXVsdHMgdG8gY3VycmVudCBwYWdlIGkuZS4gdGhlIHBhZ2Ugd2hlcmUgdGhlIHBsdWdpbiBpcyBiZWluZyB1c2VkKTogdGhpcyB3aWxsIGJlIHVzZWQgdG8gcmVkaXJlY3QgYWZ0ZXIgbG9nb3V0OzwvbGk+CiAgICA8bGk+PGVtPihvcHRpb25hbCkgKHBlcnNpc3RlbnQpIDxzdHJvbmc+dGltZW91dDwvc3Ryb25nPjwvZW0+IC0gaWYgc2V0IHRvIGEgdmFsdWUgaGlnaGVyIHRoZW4gMCBpdCB3aWxsIHNldCBhIGNvb2tpZSBhbmQgdXNlIHRoaXMgdmFsdWUgYXMgbWludXRlcyBiZWZvcmUgbG9naW4gdGltZXMgb3V0OzwvbGk+CiAgICA8bGk+PGVtPihvcHRpb25hbCkgKHBlcnNpc3RlbnQpIDxzdHJvbmc+Y29va2llX25hbWU8L3N0cm9uZz48L2VtPiAtIHRoZSBuYW1lIG9mIHRoZSBjb29raWUgKGRlZmF1bHRzIHRvIDxzdHJvbmc+cHBfYXV0aDwvc3Ryb25nPik7PC9saT4KICAgIDxsaT48ZW0+KG9wdGlvbmFsKSAocGVyc2lzdGVudCkgPHN0cm9uZz53ZWxjb21lX21zZzwvc3Ryb25nPjwvZW0+IC0gYSBtZXNzYWdlIHRvIGJlIHNob3duIGFzIGEgd2VsY29tZSB0ZXh0IG9uIHRoZSBsb2dpbiBmb3JtOzwvbGk+CiAgICA8bGk+PGVtPihvcHRpb25hbCkgKHBlcnNpc3RlbnQpIDxzdHJvbmc+cHJvdGVjdGVkX21zZzwvc3Ryb25nPjwvZW0+IC0gYSBtZXNzYWdlIHRvIHJlcGxhY2UgdGhlIHByb3RlY3RlZCBjb250ZW50IChkZWZhdWx0cyB0byBubyBtZXNzYWdlIGF0IGFsbCk7PC9saT4KICAgIDxsaT48ZW0+KG9wdGlvbmFsKSAocGVyc2lzdGVudCkgPHN0cm9uZz5lcnJvcl9tc2c8L3N0cm9uZz48L2VtPiAtIGFuIGVycm9yIG1lc3NhZ2UgdG8gYmUgc2hvd24gb24gcGFzc3dvcmQgZXJyb3JzOzwvbGk+CiAgPC91bD4KICA8aDU+RXhjbHVzaXZlIHRvIGZvcm0gYWN0aW9uOjwvaDU+CiAgPHVsPgogICAgPGxpPjxlbT4ob3B0aW9uYWwpIDxzdHJvbmc+bG9naW5fYnRuPC9zdHJvbmc+PC9lbT4gLSB0ZXh0IG9mIHRoZSBsb2dpbiBidXR0b24gY2FwdGlvbiAoZGVmYXVsdHMgdG8gTG9naW4pOzwvbGk+CiAgICA8bGk+PGVtPihvcHRpb25hbCkgPHN0cm9uZz5sb2dvdXRfYnRuPC9zdHJvbmc+PC9lbT4gLSB0ZXh0IG9mIHRoZSBsb2dvdXQgYnV0dG9uIGNhcHRpb24oZGVmYXVsdHMgdG8gTG9nb3V0OzwvbGk+ICAgICAgCiAgICA8bGk+PGVtPihvcHRpb25hbCkgPHN0cm9uZz5mb3JtX2lkPC9zdHJvbmc+PC9lbT4gLSBsb2dpbiBmb3JtIGlkOzwvbGk+CiAgICA8bGk+PGVtPihvcHRpb25hbCkgPHN0cm9uZz5mb3JtX2NsYXNzPC9zdHJvbmc+PC9lbT4gLSBsb2dpbiBmb3JtIGNsYXNzOzwvbGk+CiAgICA8bGk+PGVtPihvcHRpb25hbCkgPHN0cm9uZz5pbl9wYXNzX2lkPC9zdHJvbmc+PC9lbT4gLSBwYXNzd29yZCBpbnB1dCBpZDs8L2xpPgogICAgPGxpPjxlbT4ob3B0aW9uYWwpIDxzdHJvbmc+aW5fcGFzc19jbGFzczwvc3Ryb25nPjwvZW0+IC0gcGFzc3dvcmQgaW5wdXQgY2xhc3M7PC9saT4KICAgIDxsaT48ZW0+KG9wdGlvbmFsKSA8c3Ryb25nPmJ1dHRvbl9pZDwvc3Ryb25nPjwvZW0+IC0gYm90aCBidXR0b25zIGlkOzwvbGk+CiAgICA8bGk+PGVtPihvcHRpb25hbCkgPHN0cm9uZz5idXR0b25fY2xhc3M8L3N0cm9uZz48L2VtPiAtIGJvdGggYnV0dG9ucyBjbGFzczs8L2xpPgogIDwvdWw+CiAgICA8aDU+UHJvdGVjdCB0YWcgYWNjZXB0cyBvbmx5IG9uZSBwYXJhbWV0ZXI6PC9oNT4KICA8dWw+CiAgICA8bGk+PGVtPihvcHRpb25hbCkgPHN0cm9uZz5wcm90ZWN0ZWRfbXNnPC9zdHJvbmc+PC9lbT4gLSBhIG1lc3NhZ2UgdG8gcmVwbGFjZSB0aGUgcHJvdGVjdGVkIGNvbnRlbnQgKGRlZmF1bHRzIHRvIHdoYXRldmVyIHdhcyBzZXQgb24gYSBwcmV2aW91cyBwZXJzaXN0ZW50IHRhZyBjYWxsLCB0eXBpY2FsbHkgb24gdGhlIDxlbT48c3Ryb25nPmRlZmF1bHQ8L3N0cm9uZz48L2VtPiBhY3Rpb24pOzwvbGk+CiAgPC91bD4KICA8ZGl2IGNsYXNzPSJ3YXJuaW5nIiBzdHlsZT0iZGlzcGxheTpibG9jazsiPgogICAgPHA+PHN0cm9uZz5Ob3RlOiA8L3N0cm9uZz5XaXRoIHRoZSA8c3Ryb25nPkNNU01TIDIueCBicmFuY2g8L3N0cm9uZz4gdGhlIGJsb2NrIHBsdWdpbiBkb2Vzbid0IGN1cnJlbnRseSB3b3JrLCBzbyA8c3Ryb25nPntwcm90ZWN0fXsvcHJvdGVjdH08L3N0cm9uZz4gd2lsbCBicmVhay48L3A+CiAgPC9kaXY+ICAgICAKICA8ZGl2IGNsYXNzPSJ3YXJuaW5nIiBzdHlsZT0iZGlzcGxheTpibG9jazsiPgogICAgPHA+PHN0cm9uZz5Ob3RlOiA8L3N0cm9uZz5CZWNhdXNlIG9mIHRoZSB3YXkgQ01TTVMgcHJvY2Vzc2VzIHNvbWUgcmVxdWVzdHMsIHRoZSA8c3Ryb25nPk9OTFkgU0VDVVJFPC9zdHJvbmc+IHVzZSBvZiB0aGlzIHBsdWdpbiBpcyB0aGUgb25lIG9uIHRoZSBmaXJzdCBleGFtcGxlIG9mIHRoZSA8c3Ryb25nPlRoZSBRdWljayBVc2U8L3N0cm9uZz4gZXhhbXBsZSwgdGhhdCBpcyB0aGUgb25lIHdpdGggYWxsIHRoZSBsb2dpYyBpbnNpZGUgdGhlIGNvbnRlbnQgYmxvY2socykuPC9wPgogIDwvZGl2PiAgICAgICAKICA8ZGl2IGNsYXNzPSJ3YXJuaW5nIiBzdHlsZT0iZGlzcGxheTpibG9jazsiPgogICAgPHA+PHN0cm9uZz5Ob3RlOiA8L3N0cm9uZz5UaGlzIHNob3VsZCBiZSB0aGUgbGFzdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIHBsdWdpbi4gSXQncyBmdW5jdGlvbmFsaXR5IHdpbGwgYmUgaW1wbGVtZW50ZWQgaW4gYSBtb2R1bGUsIGFib3V0IHRvIGJlIHJlbGVhc2VkLiBUaGFua3MuPC9wPgogIDwvZGl2PiAgIAo8L2Rpdj4KCjwhLS0vdGFiOiBUaGUgUXVpY2sgV2F5Ly0tPgoKPGRpdiBpZD0icXVpY2tfYyI+CgogIDxoMz5UaGUgUXVpY2sgVXNlPC9oMz4KICA8cD5BcyBvZiB2ZXJzaW9uIDEuMiB0aGUgcGx1Z2luIGhhcyBhIG5ldyBmdW5jdGlvbmFsaXR5IHdoaWNoIGFsbG93cyBmb3IgYSBmYXN0ZXIgZGVwbG95bWVudCBvZiBhIHNlY3VyZSBwYWdlLiBQYWdlIFByb3RlY3Qgd2lsbCBhc3NpZ24gYSA8c3Ryb25nPlNtYXJ0eTwvc3Ryb25nPiB2YXJpYWJsZSwgPHN0cm9uZz4kcHBfbG9nZ2VkX2luPC9zdHJvbmc+IGJ5IGRlZmF1bHQsIHdpdGggYSBib29sZWFuIHZhbHVlIGZsYWdnaW5nIHdoZXRoZXIgdGhlIGN1cnJlbnQgdXNlciBpcyBsb2dnZWQgaW4gb3Igbm90LjwvcD4KIDxkaXYgY2xhc3M9ImluZm9ybWF0aW9uIiBzdHlsZT0iZGlzcGxheTpibG9jazsiPgogPHA+QXMgYW4gZXhhbXBsZTo8L3A+IAogPHA+PHN0cm9uZz57cGFnZV9wcm90ZWN0IGFjdGlvbj0nZm9ybScgcGFzc3dvcmRzPSdwYXNzMSd9PC9zdHJvbmc+PC9wPiAKIDwvZGl2PgogPGhyIC8+CiAgPHA+VGhpcyBpcyBhIHNpbXBsZSB3YXkgdG8gaGlkZSB0aGUgY29udGVudCBvZiBhIHBhZ2UgZnJvbSBub24gYXV0aG9yaXplZCB1c2Vyczo8L3A+CiAgPGRpdiBjbGFzcz0iaW5mb3JtYXRpb24iIHN0eWxlPSJkaXNwbGF5OmJsb2NrOyI+CiAgPHA+VXNlIHRoaXMgb24gdGhlIHBhZ2UgY29udGVudCE8L3A+CiAgPC9kaXY+CiAgPHA+CiAgICA8cHJlPgogICAgCntwYWdlX3Byb3RlY3QgYWN0aW9uPSdmb3JtJyBwYXNzd29yZHM9J3Bhc3MxJ30Ke2lmICRwcF9sb2dnZWRfaW59CiAgVGhlIGFsbG93ZWQgY29udGVudC4uLi4Ke2Vsc2V9CiAgTm90IExvZ2dlZCBpbiEKey9pZn0KICAgIDwvcHJlPgogIDwvcD4KICA8cD5UaGUgcHJldmlvdXMgc25pcHBldCB3aWxsIHNob3cgYSBmb3JtIGZvciBub24gbG9nZ2VkIGluIHVzZXJzLCBhbG9uZyB3aXRoIHRoZSB0ZXh0ICJOb3QgTG9nZ2VkIGluISI8L3A+CiAgPHA+Rm9yIHRoZSBsb2dnZWQgaW4gdXNlciB3aWxsIHByZXNlbnQgYSBsb2dvdXQgYnV0dG9uLCBhbmQgIlRoZSBhbGxvd2VkIGNvbnRlbnQuLi4uIi48L3A+CiAgPGhyIC8+CiAgPHA+VGhpcyBpcyBhIHNpbXBsZSB3YXkgdG8gaGlkZSB0aGUgY29udGVudCBvZiBhbGwgcGFnZXMgd2l0aCB0aGlzIHRlbXBsYXRlIGZyb20gbm9uIGF1dGhvcml6ZWQgdXNlcnM6PC9wPgogIDxkaXYgY2xhc3M9ImluZm9ybWF0aW9uIiBzdHlsZT0iZGlzcGxheTpibG9jazsiPgogIDxwPlVzZSB0aGlzIG9uIHRoZSBtYWluIHRlbXBsYXRlITwvcD4KICA8L2Rpdj4KICA8cD4KICAgIDxwcmU+Cgp7Y29udGVudCBhc3NpZ249J2NvbnRlbnQnfQp7cGFnZV9wcm90ZWN0IGFjdGlvbj0nZm9ybScgcGFzc3dvcmRzPSdwYXNzMSd9CntpZiAkcHBfbG9nZ2VkX2lufQogIHskY29udGVudH0Ke2Vsc2V9CiAgTm90IExvZ2dlZCBpbiEKey9pZn0KICAgIDwvcHJlPgogIDwvcD4KICA8cD5UaGUgcHJldmlvdXMgc25pcHBldCB3aWxsIHNob3cgYSBmb3JtIGZvciBub24gbG9nZ2VkIGluIHVzZXJzLCBhbG9uZyB3aXRoIHRoZSB0ZXh0ICJOb3QgTG9nZ2VkIGluISI8L3A+CiAgPHA+Rm9yIHRoZSBsb2dnZWQgaW4gdXNlciB3aWxsIHByZXNlbnQgYSBsb2dvdXQgYnV0dG9uLCBhbmQgdGhlIGNvbnRlbnQgb2YgdGhlIHBhZ2UuPC9wPgogIDxkaXYgY2xhc3M9Indhcm5pbmciIHN0eWxlPSJkaXNwbGF5OmJsb2NrOyI+CiAgPHA+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBieSB1c2luZyBvbmx5IHRoaXMgbWV0aG9kLCB3aXRob3V0IGluaXRpYWxpemluZyB0aGUgcGx1Z2luLCB5b3UgPHN0cm9uZz5jYW5ub3Q8L3N0cm9uZz4gdXNlIHRoZSA8c3Ryb25nPntwcm90ZWN0fXsvcHJvdGVjdH08L3N0cm9uZz4gdGFncy4gVG8gdXNlIHRoZW0geW91IG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGUgcGx1Z2luITwvcD4KICA8L2Rpdj4KICAKPC9kaXY+Cgo8IS0tL3RhYjogSW5pdGlhbGl6aW5nLy0tPgoKPGRpdiBpZD0iaW5pdF9jIj4KICAKICA8aDM+SW5pdGlhbGl6aW5nPC9oMz4KICA8cD5JbiBwcmV2aW91cyB2ZXJzaW9ucywgdGhlIHBsdWdpbiBuZWVkZWQgdG8gYmUgaW5pdGlhbGl6ZWQgdG8gd29yayBhdCBhbGwuIEFzIG9mIHZlcnNpb24gMS4yIHRoZSBpbml0aWFsaXphdGlvbiBpcyBvcHRpb25hbC4gSG93ZXZlciBpZiB0aGUgcGx1Z2luIGlzIG5vdCBpbml0aWFsaXplZCBpdCB3aWxsIGxvc2UgdmVyc2F0aWxpdHkuIFRoYXQgZG9lc24ndCBtZWFuIHRoYXQgdGhlIHF1aWNrIHNldHVwLCB3aXRob3V0IHRoZSBpbml0aWFsaXphdGlvbiwgaXMgbm90IGEgdmFsaWQgc2V0dXAuIEl0IGlzIGhvd2V2ZXIgYSBzZXR1cCB3aXRoIGxlc3MgZnVuY3Rpb25hbGl0eSwgdGh1cyBoYXZpbmcgaXRzIGRyYXdiYWNrcy48L3A+CiAgPGg0PldoeSBJbml0aWFsaXplIEF0IEFsbDwvaDQ+CiAgPHA+QnkgaW5pdGlhbGl6aW5nIHRoZSBwbHVnaW4geW91IHdpbGwgaGF2ZSByZWdpc3RlcmVkIHdpdGggdGhlIDxzdHJvbmc+U21hcnR5IGVuZ2luZTwvc3Ryb25nPiBhIGJsb2NrIHRhZywgPHN0cm9uZz57cHJvdGVjdH17L3Byb3RlY3R9PC9zdHJvbmc+LCB3aGljaCBhbGxvdyAKICB5b3UgdG8gcHJvdGVjdCBsYXJnZSBibG9ja3Mgb2YgdGV4dCBlYXNpbHkuPC9wPgogIDxoND5Ib3cgVG8gSW5pdGlhbGl6ZTwvaDQ+CiAgPHA+VGhlIGluaXRpYWxpemF0aW9uIGNhbiBiZSBtYWRlIHRocm91Z2ggb25lIG9mIHR3byBtZXRob2RzLCBkZXBlbmRpbmcgb24gd2hhdCB5b3Ugd2FudCB0byBwcm90ZWN0LiBUaGUgbW9zdCBjb21tb24gc2NlbmFyaW9zIGFyZSB0aGUgZm9sbG93aW5nOjwvcD4KICA8dWw+CiAgICA8bGk+cHJvdGVjdGluZyBhIHNpbmdsZSBwYWdlIHdpdGggYSBzZXQgb2YgcGFzc3dvcmRzOzwvbGk+CiAgICA8bGk+cHJvdGVjdGluZyBhIG51bWJlciBvZiBwYWdlcyB3aXRoIHNwZWNpZmljIHBhc3N3b3JkcyAob25lIG9yIG1vcmUgYnV0IGRpZmZlcmVudCBzZXRzKSBwZXIgcGFnZTs8L2xpPgogICAgPGxpPnByb3RlY3RpbmcgYSBudW1iZXIgb2YgcGFnZXMgd2l0aCB0aGUgc2FtZSBzZXQgb2YgcGFzc3dvcmRzOzwvbGk+CiAgICA8bGk+cHJvdGVjdGluZyBkaWZmZXJlbnQgZ3JvdXBzIG9mIHBhZ2VzIHdpdGggdGhlIHNhbWUgc2V0IG9mIHBhc3N3b3JkcyBwZXIgZ3JvdXAsIGJ1dCBkaWZmZXJlbnQgZnJvbSBncm91cCB0byBncm91cDs8L2xpPgogIDwvdWw+CiAgPHA+SW4gdGhlIGZpcnN0IHR3byBjYXNlcywgdGhlIGluaXRpYWxpemF0aW9uIHNob3VsZCBiZSBtYWRlIG9uIGVhY2ggcGFnZSwgcHJlZmVyYWJseSBvbiB0aGUgZmllbGQgPHN0cm9uZz5TbWFydHkgZGF0YSBvciBsb2dpYyB0aGF0IGlzIHNwZWNpZmljIHRvIHRoaXMgcGFnZTwvc3Ryb25nPiogZm91bmQgb24gdGhlIHBhZ2UgPGVtPjxzdHJvbmc+b3B0aW9ucyB0YWI8L3N0cm9uZz48L2VtPi48L3A+CiAgCiAgPGRpdiBjbGFzcz0iaW5mb3JtYXRpb24iIHN0eWxlPSJkaXNwbGF5OmJsb2NrOyI+CiAgICA8cD5Vc2Ugb25lIG9mIHRoZXNlIHRhZ3M6PC9wPgogICAgPHVsPgogICAgICA8bGk+PHN0cm9uZz57cGFnZV9wcm90ZWN0fTwvc3Ryb25nPjwvbGk+CiAgICAgIDxsaT48c3Ryb25nPntwYWdlX3Byb3RlY3QgYWN0aW9uPSc8L3N0cm9uZz5kZWZhdWx0PHN0cm9uZz4nfTwvc3Ryb25nPjwvbGk+CiAgICA8L3VsPiAKICAgIDxwPndpY2ggYXJlIGVxdWl2YWxlbnQuPC9wPiAgICAKICAgIDxwPllvdSBjYW4gYWxzbyB1c2UgdGhpcyB0YWcgdG8gYWRkIGEgZmV3IHBhcmFtZXRlcnMgZXhjZXB0IGZvciBhY3Rpb249J3NldCcgYW5kIGFjdGlvbj0nZm9ybScgKDxlbT5hbmQgYWxsIGZvcm0gZXhjbHVzaXZlIHBhcmFtZXRlcnMgYXMgdGhleSBhcmUgb25seSBwZXJ0aW5lbnQgdG8gdGhlIGZvcm0gYWN0aW9uIGFuZCBub3QgcGVyc2lzdGVudDwvZW0+KS4gVXNlOjwvcD4gICAgCiAgICA8dWw+CiAgICAgIDxsaT48c3Ryb25nPntwYWdlX3Byb3RlY3QgcGFzc3dvcmRzPSc8L3N0cm9uZz5wYXNzMVsscGFzczxlbT48c3Ryb25nPjI8L3N0cm9uZz48L2VtPl0uLi5bLHBhc3M8ZW0+PHN0cm9uZz5uPC9zdHJvbmc+PC9lbT5dPHN0cm9uZz4nfTwvc3Ryb25nPjwvbGk+CiAgICAgIDxsaT48c3Ryb25nPntwYWdlX3Byb3RlY3QgYWN0aW9uPSc8L3N0cm9uZz5kZWZhdWx0PHN0cm9uZz4nIHBhc3N3b3Jkcz0nPC9zdHJvbmc+cGFzczFbLHBhc3M8ZW0+PHN0cm9uZz4yPC9zdHJvbmc+PC9lbT5dLi4uWyxwYXNzPGVtPjxzdHJvbmc+bjwvc3Ryb25nPjwvZW0+XTxzdHJvbmc+J308L3N0cm9uZz48L2xpPgogICAgPC91bD4KICA8L2Rpdj4KICAKICA8ZGl2IGNsYXNzPSJ3YXJuaW5nIiBzdHlsZT0iZGlzcGxheTpibG9jazsiPgogIDxwPjxzdHJvbmc+KiBOb3RlOiA8L3N0cm9uZz50aGlzIG9ubHkgd29ya3MgaWYgdGhlIHRhZyA8c3Ryb25nPntwcm9jZXNzX3BhZ2VkYXRhfTwvc3Ryb25nPiBpcyBwcmVzZW50IG9uIHRoZSB0ZW1wbGF0ZSBhbmQgaXMgY2FsbGVkIGJlZm9yZSBhbnkgb3RoZXIgY29udGVudCBibG9jay48L3A+CiAgPC9kaXY+CiAgCiAgPHA+UHV0IHRoaXMgb24gdGhlIGZpZWxkIDxzdHJvbmc+U21hcnR5IGRhdGEgb3IgbG9naWMgdGhhdCBpcyBzcGVjaWZpYyB0byB0aGlzIHBhZ2U8L3N0cm9uZz4gZm91bmQgb24gdGhlIHBhZ2UgPGVtPjxzdHJvbmc+b3B0aW9ucyB0YWI8L3N0cm9uZz48L2VtPjoKICAgIDxwcmU+CiAgICAKPHN0cm9uZz57cGFnZV9wcm90ZWN0IHBhc3N3b3Jkcz0ncGFzc3dvcmQxLHBhc3N3b3IyLHBhc3N3b3JkMyxwYXNzd29yZG4nfTwvc3Ryb25nPgogICAgPC9wcmU+CiAgPC9wPgogIAogIDxwPkFsdGVybmF0aXZlbHksIGlmIHlvdSBhcmUgbm90IHVzaW5nIHRoZSA8c3Ryb25nPntwcm9jZXNzX3BhZ2VkYXRhfTwvc3Ryb25nPiBvbiB5b3VyIHRlbXBsYXRlcywgeW91IGNhbiBzdGlsbCBpbml0aWFsaXplIHRoZSBwbHVnaW4sIGZvciBhIGdpdmVuIHBhZ2UsIGJ5IHVzaW5nIHRoZSBpbml0aWFsaXphdGlvbiB0YWcgb24gYW4gZXh0cmEgY29udGVudCBibG9jayB3aGljaCBzaG91bGQgYmUgcGxhY2VkIGF0IHRoZSB0b3Agb2YgdGhlIHRlbXBsYXRlIGFzIHRoZSB2ZXJ5IGZpcnN0IGNhbGwuICAgCiAgPHA+QWxzbyBhbHRlcm5hdGl2ZWx5LCBpZiB5b3UgYXJlIG5vdCB1c2luZyB0aGUgPHN0cm9uZz57cHJvY2Vzc19wYWdlZGF0YX08L3N0cm9uZz4gb24geW91ciB0ZW1wbGF0ZXMsIHlvdSBjYW4gc3RpbGwgaW5pdGlhbGl6ZSB0aGUgcGx1Z2luLCBmb3IgYSBnaXZlbiB0ZW1wbGF0ZSwgYnkgdXNpbmcgdGhlIGluaXRpYWxpemF0aW9uIHRhZyBvbiB0aGUgdG9wIG9mIHRoZSB0ZW1wbGF0ZSBhcyB0aGUgdmVyeSBmaXJzdC4gS2VlcCBpbiBtaW5kIHRoYXQgYWxsIHBhZ2VzIHVzaW5nIHRoYXQgdGVtcGxhdGUgd2lsbCByZWNvZ25pemUgdGhlIDxzdHJvbmc+e3Byb3RlY3R9ey9wcm90ZWN0fTwvc3Ryb25nPiB0YWdzLiBBbHNvIG5vdGUgdGhhdCB0aGlzIG1ldGhvZCBpcyBhbHNvIHVzZWQgZm9yIHRoZSAzcmQgYW5kIDR0aCBzY2VuYXJpb3MsIGFzIGl0IHdpbGwgYmUgZXhwbGFpbmVkIGxhdGVyLjwvcD4gIAogIAogIDxwPkFsdGhvdWdoIHlvdSBjYW4sIHlvdSBkb24ndCBuZWVkIHRvIHNldCB0aGUgcGFzc3dvcmRzLCBub3IgYW55IG90aGVyIHBhcmFtZXRlcnMgb24gdGhlIGluaXRpYWxpemF0aW9uIHRhZzogYXMgbW9zdCBvZiB0aGUgcGFyYW1ldGVycyBhcmUgcGVyc2lzdGVudCB0aHJvdWdoIHRoZSBzYW1lIHJlcXVlc3QsIHRoZXJlIGlzIGEgc3BlY2lhbCBhY3Rpb24sIDxzdHJvbmc+c2V0PC9zdHJvbmc+LCB0aGF0IGNhbiBiZSB1c2VkIHNwZWNpZmljYWxseSB0byBzZXQgcGVyc2lzdGVudCBwYXJhbWV0ZXJzIGFueXdoZXJlIG9uIGEgdGVtcGxhdGUgb3IgY29udGVudCBibG9jayAoPGVtPnNlZSBtb3JlIG9uIHRoZSBzZXQgYWN0aW9uIGhlbHAgdGFiPC9lbT4pLjwvcD4KICAKICA8ZGl2IGNsYXNzPSJ3YXJuaW5nIiBzdHlsZT0iZGlzcGxheTpibG9jazsiPgogICAgPHA+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiB5b3UgPHN0cm9uZz5jYW5ub3Q8L3N0cm9uZz4gdXNlIDxzdHJvbmc+e3Byb3RlY3R9ey9wcm90ZWN0fTwvc3Ryb25nPiBvbiB0aGUgc2FtZSBjb250ZW50IGJsb2NrIHdoZXJlIHlvdSBpbml0aWFsaXplZCB0aGUgcGx1Z2luLiBUaGUgaW5pdGlhbGl6YXRpb24gd29uJ3QgYmUgaW4gZWZmZWN0IHlldCBhbmQgU21hcnR5IHdpbGwgbm90IHJlY29nbml6ZSB0aGUgbmV3IHRhZ3MgYXQgdGhhdCBwb2ludC48L3A+CiAgPC9kaXY+ICAKICA8ZGl2IGNsYXNzPSJ3YXJuaW5nIiBzdHlsZT0iZGlzcGxheTpibG9jazsiPgogICAgICA8cD48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IHlvdSA8c3Ryb25nPmNhbjwvc3Ryb25nPiB1c2UgPHN0cm9uZz57cHJvdGVjdH17L3Byb3RlY3R9PC9zdHJvbmc+IG9uIHRoZSBzYW1lIHRlbXBsYXRlIHdoZXJlIHlvdSBpbml0aWFsaXplZCB0aGUgcGx1Z2luLiBIb3dldmVyIHRoZSA8c3Ryb25nPntwcm90ZWN0fXsvcHJvdGVjdH08L3N0cm9uZz4gdGFncyB3aWxsIGhhdmUgdG8gYmUgcGxhY2VkIGluc2lkZSB0aGUgPHN0cm9uZz4mbHQ7Qk9EWSZndDsuLi4mbHQ7L0JPRFkmZ3Q7PC9zdHJvbmc+IHRhZ3Mgb3IgdGhlIDxzdHJvbmc+Jmx0O0JPRFkmZ3Q7Li4uJmx0Oy9CT0RZJmd0Ozwvc3Ryb25nPiB0YWdzLCB3aGlsZSB0aGUgPHN0cm9uZz57cGFnZV9wcm90ZWN0fTwvc3Ryb25nPiBuZWVkcyB0byBiZSBvdXRzaWRlIHRoZSA8c3Ryb25nPiZsdDtIVE1MJmd0Oy4uLiZsdDsvSFRNTCZndDs8L3N0cm9uZz4gdGFncywgb3IgcHJvY2Vzc2VkIHRocm91Z2ggPHN0cm9uZz57cHJvY2Vzc19wYWdlZGF0YX08L3N0cm9uZz4uPC9wPgogICAgPHA+SXQgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIHNlcXVlbmNlIGJ5IHdoaWNoIENNU01TIHBhcnNlcyB0ZW1wbGF0ZXM6PC9wPgogICAgPHVsPgogICAgICA8bGk+PHN0cm9uZz4xc3Q6PC9zdHJvbmc+IGV2ZXJ5dGhpbmcgb3V0c2lkZSB0aGUgPHN0cm9uZz4mbHQ7SFRNTCZndDsuLi4mbHQ7L0hUTUwmZ3Q7PC9zdHJvbmc+IHRhZ3M7PC9saT4KICAgICAgPGxpPjxzdHJvbmc+Mm5kOjwvc3Ryb25nPiBldmVyeXRoaW5nIGluc2lkZSB0aGUgPHN0cm9uZz4mbHQ7Qk9EWSZndDsuLi4mbHQ7L0JPRFkmZ3Q7PC9zdHJvbmc+IHRhZ3M7PC9saT4KICAgICAgPGxpPjxzdHJvbmc+M3JkOjwvc3Ryb25nPiBldmVyeXRoaW5nIGluc2lkZSB0aGUgPHN0cm9uZz4mbHQ7SEVBRCZndDsuLi4mbHQ7L0hFQUQmZ3Q7PC9zdHJvbmc+IHRhZ3M7PC9saT4KICAgIDwvdWw+IAogICAgPHA+VGhpcyBtZWFucyB0aGF0IGVhY2ggb2YgdGhlc2UgdGVtcGxhdGUgYXJlYXMgaXMgY29uc2lkZXJlZCBieSBDTVNNUyBhcyBhIGRpZmZlcmVudCBibG9jaywgYW5kIHBhcnNlZCB0YWdzIGFuZCB2YXJpYWJsZXMgd2lsbCBiZSBjYXJyaWVkIGZvcndhcmQgdG8gdGhlIG5leHQgaW4gdGhhdCBzZXF1ZW5jZS4gSXQgYWxzbyBndWFyYW50ZWVzIHRoYXQgdGhlIHRhZ3MgPHN0cm9uZz57cHJvdGVjdH17L3Byb3RlY3R9PC9zdHJvbmc+IHdpbGwgYmUgdXNhYmxlIGluc2lkZSB0aGUgPHN0cm9uZz4mbHQ7Qk9EWSZndDsuLi4mbHQ7L0JPRFkmZ3Q7PC9zdHJvbmc+IHRhZ3MgYW5kIHRoZSA8c3Ryb25nPiZsdDtCT0RZJmd0Oy4uLiZsdDsvQk9EWSZndDs8L3N0cm9uZz4gdGFncywgaWYgcHJvcGVybHkgaW5pdGlhbGl6ZWQgb3V0c2lkZSB0aGUgPHN0cm9uZz4mbHQ7SFRNTCZndDsuLi4mbHQ7L0hUTUwmZ3Q7PC9zdHJvbmc+IHRhZ3MsIHBhcnRpY3VsYXJseSBhdCB0aGUgdG9wIG9mIHRoZSB0ZW1wbGF0ZS48L3A+CiAgPC9kaXY+CiAgCiAgPHA+RmluYWxseSBpbiB0aGUgbGFzdCB0d28gc2NlbmFyaW9zLCB0aGUgaW5pdGlhbGl6YXRpb24gc2hvdWxkIGJlIG1hZGUgb24gdGhlIHRlbXBsYXRlLCBwcmVmZXJhYmx5IG9uIHRoZSB0b3Agb2YgdGhlIHRlbXBsYXRlIGFuZCBvdXRzaWRlIHRoZSA8c3Ryb25nPiZsdDtIVE1MJmd0Oy4uLiZsdDsvSFRNTCZndDs8L3N0cm9uZz4gdGFncy48L3A+ICAKICA8cD5JZiB5b3Ugb25seSBuZWVkIHRvIHByb3RlY3QgYSBudW1iZXIgb2YgcGFnZXMgd2l0aCB0aGUgc2FtZSBzZXQgb2YgcGFzc3dvcmRzLCB0aGUgM3JkIGNhc2UsIHlvdSdsbCBuZWVkIG9ubHkgb25lIGV4dHJhIHRlbXBsYXRlIHdpdGggdGhlIGluaXRpYWxpemF0aW9uIHRhZy4gSW4gdGhlIDR0aCBjYXNlLCB3aGVyZSB5b3UgbmVlZCB0byBwcm90ZWN0IGRpZmZlcmVudCBncm91cHMgb2YgcGFnZXMgd2l0aCB0aGUgc2FtZSBzZXQgb2YgcGFzc3dvcmRzIHBlciBncm91cCwgYnV0IGRpZmZlcmVudCBwYXNzd29yZHMgZnJvbSBncm91cCB0byBncm91cCwgeW91IG1heSBzdGlsbCB1c2Ugb25lIHRlbXBsYXRlIGFuZCBzZXQgdGhlIHBhc3N3b3JkcyB3aXRoIHNvbWUgU21hcnR5IGxvZ2ljLCBidXQgaWYgeW91IGFyZSBub3QgZXhwZXJpZW5jZWQgd2l0aCBTbWFydHksIHRoZW4ganVzdCBjcmVhdGUgYSB0ZW1wbGF0ZSBmb3IgZWFjaCBzZXQgb2YgcGFzc3dvcmRzLCBhbmQgYXNzaWduIHRoZSB0ZW1wbGF0ZXMgdG8gdGhlIHBhZ2VzIGFjY29yZGluZ2x5LjwvcD4KICAgIDxwPlB1dCB0aGlzIG9uIHRoZSB0b3Agb2YgeW91ciB0ZW1wbGF0ZXM6CiAgICA8cHJlPgogICAgCjxzdHJvbmc+e3BhZ2VfcHJvdGVjdCBwYXNzd29yZHM9J3Bhc3N3b3JkMSxwYXNzd29yMixwYXNzd29yZDMscGFzc3dvcmRuJ308L3N0cm9uZz4KICAgIDwvcHJlPgogIDwvcD4KICAgPGRpdiBjbGFzcz0iaW5mb3JtYXRpb24iIHN0eWxlPSJkaXNwbGF5OmJsb2NrOyI+CiAgICA8cD5Gb3Igc3BlY2lmaWMgaGVscCBvbiB0aGUgb3RoZXIgPHN0cm9uZz5hY3Rpb25zPC9zdHJvbmc+LCBhbmQgdGhlIDxzdHJvbmc+cHJvdGVjdDwvc3Ryb25nPiBibG9jayB0YWdzLCBjaGVjayB0aGUgcmVzcGVjdGl2ZSA8ZW0+PHN0cm9uZz5hY3Rpb24gaGVscCB0YWJzPC9zdHJvbmc+PC9lbT4uPC9wPiAgCiAgPC9kaXY+Cgo8L2Rpdj4KCjwhLS0vdGFiOiBGb3JtIEFjdGlvbi8tLT4KCgo8ZGl2IGlkPSJmb3JtX2MiPgoKICA8aDM+VGhlIEZvcm0gQWN0aW9uPC9oMz4KICAKICA8cD5BcyBvZiB2ZXJzaW9uIDEuMiwgeW91IGNhbiBzZXQgYWxsIG9wdGlvbnMgb24gdGhlIHRhZyBjYWxsIHdpdGggdGhpcyBhY3Rpb24uIElmIHlvdSBhcmUgdXNpbmcgdGhlIHF1aWNrIHdheSwgdGhpcyBpcyBhbGwgeW91IG5lZWQgdG8gc2V0IGEgU21hcnR5IHZhcmlhYmxlIHdoaWNoIHlvdSBjYW4gY2hlY2sgYW55d2hlcmUgb24gdGhlIHRlbXBsYXRlIGFmdGVyIHRoaXMgY2FsbC48L3A+CiAgPHA+T3RoZXIgdGhhbiB0aGF0IGp1c3QgcGxhY2UgdGhlIHRhZyB3aGVyZSB5b3Ugd2FudCBhIGxvZ2luL2xvZ291dCBmb3JtLiBUaGUgZGVmYXVsdCA8c3Ryb25nPjxlbT5mb3JtPC9lbT4gYWN0aW9uPC9zdHJvbmc+IGhhcyBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsIGZvcm0gcGFyYW1ldGVycywgc28gdGhlIG1pbmltYWwgdGFnIGlzIDxzdHJvbmc+e3BhZ2VfcHJvdGVjdCBhY3Rpb249Jzwvc3Ryb25nPjxlbT5mb3JtPC9lbT48c3Ryb25nPid9PC9zdHJvbmc+LjwvcD4KICAKICA8ZGl2IGNsYXNzPSJpbmZvcm1hdGlvbiIgc3R5bGU9ImRpc3BsYXk6YmxvY2s7Ij4KICAgIDxwPnVzZSA8c3Ryb25nPntwYWdlX3Byb3RlY3QgYWN0aW9uPSc8L3N0cm9uZz48ZW0+Zm9ybTwvZW0+PHN0cm9uZz4nfTwvc3Ryb25nPiB0byBkaXNwbGF5IHRoZSBkZWZhdWx0IGxvZ2luL2xvZ291dCBmb3JtLjwvcD4gIAogIDwvZGl2PgoKICA8cD4gQW4gZXhhbXBsZSB3aXRoIGFsbCB0aGUgcGFyYW1ldGVycyB5b3UgY2FuIHVzZSB0byBjdXN0b21pemUgdGhlIGZvcm06CiAgICA8cHJlPgogICAgCnsqIERvIHlvdSByZWFsbHkgbmVlZCBhbGwgdGhpcz8hISEgQSBjb21wbGV0ZSBmb3JtIGNhbGwgKn0Ke3BhZ2VfcHJvdGVjdCBhY3Rpb249J2Zvcm0nIGxvZ2luX2J0bj0nTGV0IE1lIEluIScgbG9nb3V0X2J0bj0nQnllIEJ5ZSEnIGZvcm1fY2xhc3M9J2Nzc19mb3JtJyBmb3JtX2lkPSdjc3NfbXlfZm9ybScgaW5fcGFzc19pZD0nY3NzX3Bhc3N3cmRpZCcgaW5fcGFzc19jbGFzcz0nY3NzX3Bhc3N3cmRfY2xhc3MnIGJ1dHRvbl9pZD0nY3NzX2J0bl9pZCcgYnV0dG9uX2NsYXNzPSdjc3NfYnRuX2NsYXNzJ30KICAgIDwvcHJlPgogIDwvcD4KICAgPGRpdiBjbGFzcz0iaW5mb3JtYXRpb24iIHN0eWxlPSJkaXNwbGF5OmJsb2NrOyI+CiAgICA8cD5BcyBvZiA8c3Ryb25nPnZlcnNpb24gMS4yPC9zdHJvbmc+IGFueSBjYWxsIHRvIHtwYWdlX3Byb3RlY3QgYWN0aW9uPSc8ZW0+Li4uPC9lbT4nfTwvc3Ryb25nPiwgd2l0aCBhbnkgYWN0aW9uLCBpbmNsdWRpbmcgdGhlIGRlZmF1bHQsIHdpbGwgc2V0IGEgU21hcnR5IHZhcmlhYmxlLCB3aGljaCBjYW4gYmUgY3VzdG9taXplZCBieSB0aGUgPGVtPmFzc2lnbjwvZW0+IHBhcmFtZXRlciwgYnV0IHdoaWNoIHdpbGwgZGVmYXVsdCB0byA8c3Ryb25nPiRwcF9sb2dnZWRfaW48L3N0cm9uZz4gYnkgb21pc3Npb24uIFRoaXMgd2lsbCBiZSBzZXQgdG8gYm9vbGVhbiA8c3Ryb25nPlRSVUU8L3N0cm9uZz4gd2hlbmV2ZXIgdGhlIGN1cnJlbnQgdmlzaXRvciBpcyBsb2dnZWQgaW4gYW5kIDxzdHJvbmc+RkFMU0U8L3N0cm9uZz4gb3RoZXJ3aXNlLjwvcD4KICA8L2Rpdj4KICAKICA8ZGl2IGNsYXNzPSJpbmZvcm1hdGlvbiIgc3R5bGU9ImRpc3BsYXk6YmxvY2s7Ij4KICAgIDxwPkZvciBzcGVjaWZpYyBoZWxwIG9uIHRoZSA8c3Ryb25nPlRoZSBRdWljayBXYXk8L3N0cm9uZz4gY2hlY2sgdGhlIHJlc3BlY3RpdmUgPGVtPjxzdHJvbmc+YWN0aW9uIGhlbHAgdGFiPC9zdHJvbmc+PC9lbT4uPC9wPiAgCiAgPC9kaXY+CgogIDxwPllvdSBjYW4gdXNlIGFueSBvZiB0aGUgcGVyc2lzdGVudCBwYXJhbWV0ZXJzIHdpdGggdGhlIGZvcm0gYWN0aW9uIGlmIG5lZWRlZC4gSG93ZXZlciB0aGUgZm9ybSBzcGVjaWZpYyBwYXJhbWV0ZXJzIDxzdHJvbmc+YXJlIG5vdCBwZXJzaXN0ZW50PC9zdHJvbmc+LjwvcD4KICAKICA8aDU+UGFyYW1ldGVycyBleGNsdXNpdmUgdG8gZm9ybSBhY3Rpb246PC9oNT4KICA8dWw+CiAgICA8bGk+PGVtPihvcHRpb25hbCkgPHN0cm9uZz5sb2dpbl9idG48L3N0cm9uZz48L2VtPiAtIHRleHQgb2YgdGhlIGxvZ2luIGJ1dHRvbiBjYXB0aW9uIChkZWZhdWx0cyB0byBMb2dpbik7PC9saT4KICAgIDxsaT48ZW0+KG9wdGlvbmFsKSA8c3Ryb25nPmxvZ291dF9idG48L3N0cm9uZz48L2VtPiAtIHRleHQgb2YgdGhlIGxvZ291dCBidXR0b24gY2FwdGlvbihkZWZhdWx0cyB0byBMb2dvdXQ7PC9saT4gICAgICAKICAgIDxsaT48ZW0+KG9wdGlvbmFsKSA8c3Ryb25nPmZvcm1faWQ8L3N0cm9uZz48L2VtPiAtIGxvZ2luIGZvcm0gaWQ7PC9saT4KICAgIDxsaT48ZW0+KG9wdGlvbmFsKSA8c3Ryb25nPmZvcm1fY2xhc3M8L3N0cm9uZz48L2VtPiAtIGxvZ2luIGZvcm0gY2xhc3M7PC9saT4KICAgIDxsaT48ZW0+KG9wdGlvbmFsKSA8c3Ryb25nPmluX3Bhc3NfaWQ8L3N0cm9uZz48L2VtPiAtIHBhc3N3b3JkIGlucHV0IGlkOzwvbGk+CiAgICA8bGk+PGVtPihvcHRpb25hbCkgPHN0cm9uZz5pbl9wYXNzX2NsYXNzPC9zdHJvbmc+PC9lbT4gLSBwYXNzd29yZCBpbnB1dCBjbGFzczs8L2xpPgogICAgPGxpPjxlbT4ob3B0aW9uYWwpIDxzdHJvbmc+YnV0dG9uX2lkPC9zdHJvbmc+PC9lbT4gLSBib3RoIGJ1dHRvbnMgaWQ7PC9saT4KICAgIDxsaT48ZW0+KG9wdGlvbmFsKSA8c3Ryb25nPmJ1dHRvbl9jbGFzczwvc3Ryb25nPjwvZW0+IC0gYm90aCBidXR0b25zIGNsYXNzOzwvbGk+CiAgPC91bD4KCiAgICAgICAgCjwvZGl2PiAKCjwhLS0vdGFiOiBTZXQgQWN0aW9uLy0tPgoKPGRpdiBpZD0ic2V0X2MiPgoKICA8aDM+VGhlIFNldCBBY3Rpb248L2gzPgoKICA8cD5UaGlzIGlzIGEgc3BlY2lhbCBhY3Rpb24gd2l0aCB0aGUgc29sZSBwdXJwb3NlIG9mIGFsbG93aW5nIHlvdSB0byBzZXQgcGVyc2lzdGVudCBwYXJhbWV0ZXJzIG9uIGRpZmZlcmVudCB0YWcgY2FsbHMsIGhlbHBpbmcgYSBiaXQgd2l0aCB0aGUgcmVhZGFiaWxpdHkgb2YgdGhlIHRhZ3M6IGp1c3Qga2VlcCBpbiBtaW5kIHRoYXQgaWYgeW91IGNhbGwgaXQgdXNpbmcgdGhlIHNhbWUgcGFyYW1ldGVyIHdpdGggZGlmZmVyZW50IHZhbHVlcywgdGhlIGxhc3QgdmFsdWUgd2lsbCBvdmVycmlkZSBhbGwgcHJldmlvdXMuPC9wPgogIDxwPgogICAgPHByZT4KeyogVXNpbmcgdGhlICdzZXQnIGFjdGlvbiB0byBzcHJlYWQgcGFyYW1ldGVycyB0aHJvdWdoIG11bHRpcGxlIGNhbGxzICp9CnsqIHJlZGlyZWN0IEhvbWUgKn0Ke3BhZ2VfcHJvdGVjdCBhY3Rpb249J3NldCcgbG9nb3V0X2FsaWFzPSdob21lJ30Keyogc2V0IHRoZSB0aW1lIGJlZm9yZSBhIGxvZ2luIGV4cGlyZXMgKn0gCntwYWdlX3Byb3RlY3QgYWN0aW9uPSdzZXQnIHRpbWVvdXQ9MTB9CnsqIHNldCB0aGUgbWVzc2FnZSB0byBzaG93IGluIGNhc2UgdGhlIGF1dGhlbnRpY2F0aW9uIGZhaWxzICp9CntwYWdlX3Byb3RlY3QgYWN0aW9uPSdzZXQnIGVycm9yX21zZz0nT29wcyEgV3JvbmcgcGFzcywgbWF0ZSEgQ2hlY2sgeW91ciBub3Rlcy4uLid9CnsqIHNldHRpbmcgYWxsIHRoZSBhYm92ZSBpbiBhIHNpbmdsZSB0YWcgY2FsbCBjb3VsZCBsZWFkIHRvIGVycm9ycyAqfQogICAgPC9wcmU+CiAgPC9wPgogIAogIDxoND5XaGF0IHBhcmFtZXRlcnMgZG9lcyBpdCB0YWtlPzwvaDQ+CiAgPHVsPgogICAgPGxpPjxlbT4ob3B0aW9uYWwpIChwZXJzaXN0ZW50KSA8c3Ryb25nPmxvZ2luX2FsaWFzPC9zdHJvbmc+PC9lbT4gLSBhbiBleGlzdGluZyBwYWdlIGFsaWFzIChkZWZhdWx0cyB0byBubyByZWRpcmVjdGlvbik6IHRoaXMgd2lsbCBiZSB1c2VkIHRvIHJlZGlyZWN0IGFmdGVyIGxvZ2luIGlmIG5lZWRlZDs8L2xpPiAgCiAgICA8bGk+PGVtPihvcHRpb25hbCkgKHBlcnNpc3RlbnQpIDxzdHJvbmc+bG9nb3V0X2FsaWFzPC9zdHJvbmc+PC9lbT4gLSBhbiBleGlzdGluZyBwYWdlIGFsaWFzIChkZWZhdWx0cyB0byBjdXJyZW50IHBhZ2UgaS5lLiB0aGUgcGFnZSB3aGVyZSB0aGUgcGx1Z2luIGlzIGJlaW5nIHVzZWQpOiB0aGlzIHdpbGwgYmUgdXNlZCB0byByZWRpcmVjdCBhZnRlciBsb2dvdXQ7PC9saT4KICAgIDxsaT48ZW0+KG9wdGlvbmFsKSAocGVyc2lzdGVudCkgPHN0cm9uZz50aW1lb3V0PC9zdHJvbmc+PC9lbT4gLSBpZiBzZXQgdG8gYSB2YWx1ZSBoaWdoZXIgdGhlbiAwIGl0IHdpbGwgc2V0IGEgY29va2llIGFuZCB1c2UgdGhpcyB2YWx1ZSBhcyBtaW51dGVzIGJlZm9yZSBsb2dpbiB0aW1lcyBvdXQ7PC9saT4KICAgIDxsaT48ZW0+KG9wdGlvbmFsKSAocGVyc2lzdGVudCkgPHN0cm9uZz5jb29raWVfbmFtZTwvc3Ryb25nPjwvZW0+IC0gdGhlIG5hbWUgb2YgdGhlIGNvb2tpZSAoZGVmYXVsdHMgdG8gPHN0cm9uZz5wcF9hdXRoPC9zdHJvbmc+KTs8L2xpPgogICAgPGxpPjxlbT4ob3B0aW9uYWwpIChwZXJzaXN0ZW50KSA8c3Ryb25nPndlbGNvbWVfbXNnPC9zdHJvbmc+PC9lbT4gLSBhIG1lc3NhZ2UgdG8gYmUgc2hvd24gYXMgYSB3ZWxjb21lIHRleHQgb24gdGhlIGxvZ2luIGZvcm07PC9saT4KICAgIDxsaT48ZW0+KG9wdGlvbmFsKSAocGVyc2lzdGVudCkgPHN0cm9uZz5wcm90ZWN0ZWRfbXNnPC9zdHJvbmc+PC9lbT4gLSBhIG1lc3NhZ2UgdG8gcmVwbGFjZSB0aGUgcHJvdGVjdGVkIGNvbnRlbnQgKGRlZmF1bHRzIHRvIG5vIG1lc3NhZ2UgYXQgYWxsKTs8L2xpPgogICAgPGxpPjxlbT4ob3B0aW9uYWwpIChwZXJzaXN0ZW50KSA8c3Ryb25nPmVycm9yX21zZzwvc3Ryb25nPjwvZW0+IC0gYW4gZXJyb3IgbWVzc2FnZSB0byBiZSBzaG93biBvbiBwYXNzd29yZCBlcnJvcnM7PC9saT4KICA8L3VsPgogICAgICAgCjwvZGl2PiAKCjwhLS0vdGFiOiBQcm90ZWN0IFRhZ3MvLS0+Cgo8ZGl2IGlkPSJwcm90ZWN0X2MiPgoKICA8aDM+VGhlIFByb3RlY3QgVGFnczwvaDM+CiAgPHA+VGhlc2UgdGFncyBhcmUgYmxvY2sgc21hcnR5IHRhZ3MsIGFuZCBjYW4gYmUgdXNlZCBzZXZlcmFsIHRpbWVzIG9uIHRoZSBwYWdlIGluIHBhaXJzLCBpLmU6IGFuIG9wZW5pbmcgdGFnIGFuZCBhIGNsb3NpbmcgdGFnLiBUaGUgb3BlbmluZyB0YWcgYWNjZXB0cyBvbmx5IG9uZSBwYXJhbWV0ZXIsIHRoZSA8c3Ryb25nPnByb3RlY3RlZF9tc2c8L3N0cm9uZz4gd2hpY2ggb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IG9uZSBpZiBzZXQuIFRoaXMgaXMgYSBwZXIgb2NjdXJyZW5jZSB0YWcsIG1lYW5pbmcgdGhhdCBpZiBpdCBpcyBzZXQgb24gdGhlIDxlbT48c3Ryb25nPmRlZmF1bHQ8L3N0cm9uZz48L2VtPiBvciAgPGVtPjxzdHJvbmc+c2V0PC9zdHJvbmc+PC9lbT4gYWN0aW9ucyBpdCBpcyBwZXJzaXN0ZW50LCBidXQgaWYgc2V0IG9uIGEgPHN0cm9uZz57cHJvdGVjdH08L3N0cm9uZz4gdGFnIGl0IGFmZmVjdHMgb25seSB0aGUgdGFnIHdoZXJlIGl0IGlzIHVzZWQgYW5kIGRvZXNuJ3QgcGVyc2lzdCB0byB0aGUgbmV4dCBvY2N1cnJlbmNlLjwvcD4KCiAgPGg0PjxzdHJvbmc+Q29udGVudCB3cmFwcGluZyB0YWdzIGV4YW1wbGUuPC9zdHJvbmc+PC9oND4KICA8cD5Vc2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgdGFnczoKICAgIDxwcmU+CiAgICAKPHN0cm9uZz57cHJvdGVjdH08L3N0cm9uZz48ZW0+d2hhdGV2ZXIgY29udGVudCB5b3Ugd2FudCBwcm90ZWN0ZWQuPC9lbT48c3Ryb25nPnsvcHJvdGVjdH08L3N0cm9uZz4gCjxzdHJvbmc+e3Byb3RlY3QgcHJvdGVjdGVkX21zZz0nPC9zdHJvbmc+PGVtPndlbGwsIHlvdSByZWFsbHkgc2hvdWxkIGJlIGxvZ2dlZCBpbiBpZiB5b3Ugd2hhdCB0byBzZWUgdGhlIGNvbnRlbnQ8L2VtPjxzdHJvbmc+J308L3N0cm9uZz48ZW0+d2hhdGV2ZXIgY29udGVudCB5b3Ugd2FudCBwcm90ZWN0ZWQuPC9lbT48c3Ryb25nPnsvcHJvdGVjdH08L3N0cm9uZz4KICAgIDwvcHJlPgogIDwvcD4KICA8ZGl2IGNsYXNzPSJ3YXJuaW5nIiBzdHlsZT0iZGlzcGxheTpibG9jazsiPgogICAgICA8cD48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IHdpdGhvdXQgaW5pdGlhbGl6aW5nIHRoZSBwbHVnaW4sIHlvdSA8c3Ryb25nPmNhbm5vdDwvc3Ryb25nPiB1c2UgdGhlIDxzdHJvbmc+e3Byb3RlY3R9ey9wcm90ZWN0fTwvc3Ryb25nPiB0YWdzLjwvcD4KICA8L2Rpdj4gCiAgPGRpdiBjbGFzcz0id2FybmluZyIgc3R5bGU9ImRpc3BsYXk6YmxvY2s7Ij4KICAgIDxwPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4geW91IDxzdHJvbmc+Y2Fubm90PC9zdHJvbmc+IHVzZSA8c3Ryb25nPntwcm90ZWN0fXsvcHJvdGVjdH08L3N0cm9uZz4gb24gdGhlIHNhbWUgY29udGVudCBibG9jayB3aGVyZSB5b3UgaW5pdGlhbGl6ZWQgdGhlIHBsdWdpbi4gVGhlIGluaXRpYWxpemF0aW9uIHdvbid0IGJlIGluIGVmZmVjdCB5ZXQgYW5kIFNtYXJ0eSB3aWxsIG5vdCByZWNvZ25pemUgdGhlIG5ldyB0YWdzIGF0IHRoYXQgcG9pbnQuPC9wPgo8L2Rpdj4gIAogIDxoNT5Qcm90ZWN0IHRhZyBhY2NlcHRzIG9ubHkgb25lIHBhcmFtZXRlcjo8L2g1PgogIDx1bD4KICAgIDxsaT48ZW0+KG9wdGlvbmFsKSA8c3Ryb25nPnByb3RlY3RlZF9tc2c8L3N0cm9uZz48L2VtPiAtIGEgbWVzc2FnZSB0byByZXBsYWNlIHRoZSBwcm90ZWN0ZWQgY29udGVudCAoZGVmYXVsdHMgdG8gd2hhdGV2ZXIgd2FzIHNldCBvbiBhIHByZXZpb3VzIHBlcnNpc3RlbnQgdGFnIGNhbGwpOzwvbGk+CiAgPC91bD4KICAgICAgIAo8L2Rpdj4gCgoKPCEtLS90YWI6IFNuaXBwZXRzLy0tPgoKPGRpdiBpZD0ic25pcHBldHNfYyI+CgogIDxoMz5Db2RlIFNuaXBwZXRzPC9oMz4KICA8aDQ+VGhlIFF1aWNrIFdheTwvaDQ+IAogIAogIDxwPlVzZSB0aGlzIGFueXdoZXJlIG9uIGEgdGVtcGxhdGUgb3IgYSBwYWdlIGNvbnRlbnQgYmxvY2s6CiAgICA8cHJlPgogICAgCnsqIFRoaXMgc25pcHBldCBvZiBjb2RlIGNhbiBiZSB1c2VkIHN0YW5kYWxvbmU7IG5vIG5lZWQgZm9yIGFuIGluaXRpYWxpemF0aW9uIHRhZyAqfSAgICAKPHN0cm9uZz57cGFnZV9wcm90ZWN0IGFjdGlvbj0nZm9ybScgcGFzc3dvcmRzPSdwYXNzMSd9CntpZiAkcHBfbG9nZ2VkX2lufTwvc3Ryb25nPgogIFRoZSBhbGxvd2VkIGNvbnRlbnQuLi4uCjxzdHJvbmc+e2Vsc2V9PC9zdHJvbmc+CiAgTm90IExvZ2dlZCBpbiEKPHN0cm9uZz57L2lmfTwvc3Ryb25nPgogICAgPC9wcmU+CiAgPC9wPgogIAogIDxoND5Jbml0aWFsaXphdGlvbjwvaDQ+CiAgCiAgPHA+VXNlIHRoaXMgYW55d2hlcmUgb24gdGhlIHRvcCBvZiBhIHRlbXBsYXRlIG9yIG9uIGEgcGFnZSBjb250ZW50IGJsb2NrLCBwcmVmZXJhYmx5IG9uIHRoZSBmaWVsZCA8c3Ryb25nPlNtYXJ0eSBkYXRhIG9yIGxvZ2ljIHRoYXQgaXMgc3BlY2lmaWMgdG8gdGhpcyBwYWdlPC9zdHJvbmc+OgogICAgPHByZT4KICAgIAp7KiBUaGlzIHRhZyBpbml0aWFsaXplcyB0aGUgcGx1Z2luIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhlIHtwcm90ZWN0fXsvcHJvdGVjdH0gdGFncyAqfSAgICAKPHN0cm9uZz57cGFnZV9wcm90ZWN0fTwvc3Ryb25nPgogICAgPC9wcmU+CiAgPC9wPiAgCiAgPHA+QSBtb3JlIGNvbXBsZXggZXhhbXBsZS4gVXNlIHRoaXMgYW55d2hlcmUgb24gdGhlIHRvcCBvZiBhIHRlbXBsYXRlIG9yIG9uIGEgcGFnZSBjb250ZW50IGJsb2NrLCBwcmVmZXJhYmx5IG9uIHRoZSBmaWVsZCA8c3Ryb25nPlNtYXJ0eSBkYXRhIG9yIGxvZ2ljIHRoYXQgaXMgc3BlY2lmaWMgdG8gdGhpcyBwYWdlPC9zdHJvbmc+OgogICAgPHByZT4KCnsqIFVzZSBzbWFydHkgc3ludGF4IHRvIGNyZWF0ZSBhbiBhcnJheSAqfQo8c3Ryb25nPnskcGFzc3dvcmRzPVsncGFzczEnLCdwYXNzMicsJ3Bhc3MzJ119PC9zdHJvbmc+Cgp7KiBVc2Ugc21hcnR5IHN5bnRheCB0byBzZXQgYSBmZXcgbWVzc2FnZXMgaW50byB2YXJpYWJsZXMgd2UgY2FuIHVzZSB0byBmaWxsIGluIHRoZSBwYXJhbWV0ZXJzICp9CjxzdHJvbmc+eyR3ZWxjb21lX21zZz0nUGxlYXNlIGVudGVyIHlvdXIgcGFzc3dvcmQnfQp7JHByb3RlY3RlZF9tc2c9J1lvdSByZWFsbHkgbmVlZCB0byBsb2dpbiB0byBoYXZlIGFjY2VzcyB0byB0aGlzIHBhZ2UuJ30KeyRlcnJvcl9tc2c9J1RoZSBwYXNzd29yZCB5b3UgZW50ZXJlZCBpcyBub3QgY29ycmVjdC4gUGxlYXNlIGNoZWNrIGNhcmVmdWxseSBpZiB0aGUgcGFzc3dvcmQgaXMgY29ycmVjdCBhbmQgdHJ5IGFnYWluLid9PC9zdHJvbmc+CiAgCnsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogClRoaXMgdGFnIGluaXRpYWxpemVzIHRoZSBwbHVnaW4gc28gdGhhdCB5b3UgY2FuIHVzZSB0aGUge3Byb3RlY3R9ey9wcm90ZWN0fSB0YWdzLgpOb3RlIHRoZSB1c2Ugb2YgYWxyZWFkeSBzZXQgU21hcnR5IHZhcnMgdG8gcGFzcyB2YWx1ZXMgdG8gc29tZSBwYXJhbWV0ZXJzLiAKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKn0gICAgCjxzdHJvbmc+e3BhZ2VfcHJvdGVjdCBwYXNzd29yZHM9JHBhc3N3b3JkcyBsb2dpbl9hbGlhcz0naG9tZScgbG9nb3V0X2FsaWFzPSdieWUtYnllLXBhZ2UtYWxpYXMnIHRpbWVvdXQ9MTAgY29va2llX25hbWU9J2FfY29va2llX25hbWUnIHdlbGNvbWVfbXNnPSR3ZWxjb21lX21zZyBwcm90ZWN0ZWRfbXNnPSRwcm90ZWN0ZWRfbXNnIGVycm9yX21zZz0kZXJyb3JfbXNnfTwvc3Ryb25nPgogICAgPC9wcmU+CiAgPC9wPgo8aDQ+VXNpbmcgVGhlIFNldCBBY3Rpb248L2g0PgogIDxwPgogICAgPHByZT4KICAgIAp7KiBVc2luZyB0aGUgJ3NldCcgYWN0aW9uIHRvIHNwcmVhZCBwYXJhbWV0ZXJzIHRocm91Z2ggbXVsdGlwbGUgY2FsbHMgKn0KeyogcmVkaXJlY3QgSG9tZSBvbiBsb2dvdXQgKn0KPHN0cm9uZz57cGFnZV9wcm90ZWN0IGFjdGlvbj0nc2V0JyBsb2dvdXRfYWxpYXM9J2hvbWUnfTwvc3Ryb25nPgp7KiBzZXQgdGhlIHRpbWUgYmVmb3JlIGEgbG9naW4gZXhwaXJlcyAqfSAKPHN0cm9uZz57cGFnZV9wcm90ZWN0IGFjdGlvbj0nc2V0JyB0aW1lb3V0PTEwfTwvc3Ryb25nPgp7KiBzZXQgdGhlIG1lc3NhZ2UgdG8gc2hvdyBpbiBjYXNlIHRoZSBhdXRoZW50aWNhdGlvbiBmYWlscyAqfQo8c3Ryb25nPntwYWdlX3Byb3RlY3QgYWN0aW9uPSdzZXQnIGVycm9yX21zZz0nT29wcyEgV3JvbmcgcGFzcywgbWF0ZSEgQ2hlY2sgeW91ciBub3Rlcy4uLid9PC9zdHJvbmc+CnsqIHNldCB0aGUgbmFtZSBvZiB0aGUgbG9naW4gdGhlIGNoZWNrIHZhcmlhYmxlICp9CjxzdHJvbmc+e3BhZ2VfcHJvdGVjdCBhY3Rpb249J3NldCcgYXNzaWduPSdsb2dnZWRfaW4nfTwvc3Ryb25nPgp7KiBzZXR0aW5nIGFsbCB0aGUgYWJvdmUgaW4gYSBzaW5nbGUgdGFnIGNhbGwgY291bGQgbGVhZCB0byBlcnJvcnMgKn0KCnsqIG5vdyB3ZSBjYW4gY2hlY2sgZm9yIG91ciBvd24gbmFtZWQgdmFyaWFibGUgKn0KPHN0cm9uZz57aWYgJGxvZ2dlZF9pbn08L3N0cm9uZz4KICBUaGUgYWxsb3dlZCBjb250ZW50Li4uCjxzdHJvbmc+e2Vsc2V9PC9zdHJvbmc+CiAgTm90IExvZ2dlZCBpbiEKPHN0cm9uZz57L2lmfTwvc3Ryb25nPgoKICAgIDwvcHJlPgogIDwvcD4KICAKPGg0PlVzaW5nIFRoZSBGb3JtIEFjdGlvbjwvaDQ+CgogIDxwPiBBbiBleGFtcGxlIHdpdGggYWxsIHRoZSBwYXJhbWV0ZXJzIHlvdSBjYW4gdXNlIHRvIGN1c3RvbWl6ZSB0aGUgZm9ybToKICAgIDxwcmU+CiAgICAKeyogRG8geW91IHJlYWxseSBuZWVkIGFsbCB0aGlzPyEhISBBIGNvbXBsZXRlIGZvcm0gY2FsbCB3aGljaCBkb2Vzbid0IG91dHB1dCBub3RoaW5nIGJlY2F1c2UgdGhlIGFzc2lnbl9vdXRwdXQgcGFyYW1ldGVyIGlzIGJlaW5nIHVzZWQgKn0KPHN0cm9uZz57cGFnZV9wcm90ZWN0IGFjdGlvbj0nZm9ybScgbG9naW5fYnRuPSdMZXQgTWUgSW4hJyBsb2dvdXRfYnRuPSdCeWUgQnllIScgZm9ybV9jbGFzcz0nY3NzX2Zvcm0nIGZvcm1faWQ9J2Nzc19teV9mb3JtJyBpbl9wYXNzX2lkPSdjc3NfcGFzc3dyZGlkJyBpbl9wYXNzX2NsYXNzPSdjc3NfcGFzc3dyZF9jbGFzcycgYnV0dG9uX2lkPSdjc3NfYnRuX2lkJyBidXR0b25fY2xhc3M9J2Nzc19idG5fY2xhc3MnIGFzc2lnbl9vdXRwdXQ9J2xvZ2luX2Zvcm0nfTwvc3Ryb25nPgp7KiBieSB1c2luZyBhc3NpZ25fb3V0cHV0PSdsb2dpbl9mb3JtJyB5b3UgY2FuIHVzZSB7JGxvZ2luX2Zvcm19IHNldmVyYWwgdGltZXMgb24gdGhlIHRlbXBsYXRlICp9CjxzdHJvbmc+eyRsb2dpbl9mb3JtfTwvc3Ryb25nPgogICAgPC9wcmU+CiAgPC9wPgogIAo8aDQ+VXNpbmcgVGhlIFByb3RlY3QgQmxvY2sgVGFnczwvaDQ+CgogIDxwPlVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB0YWdzOgogICAgPHByZT4KICAgIAo8c3Ryb25nPntwcm90ZWN0fTwvc3Ryb25nPjxlbT53aGF0ZXZlciBjb250ZW50IHlvdSB3YW50IHByb3RlY3RlZC48L2VtPjxzdHJvbmc+ey9wcm90ZWN0fTwvc3Ryb25nPiAKPHN0cm9uZz57cHJvdGVjdCBwcm90ZWN0ZWRfbXNnPSc8L3N0cm9uZz48ZW0+d2VsbCwgeW91IHJlYWxseSBzaG91bGQgYmUgbG9nZ2VkIGluIGlmIHlvdSB3aGF0IHRvIHNlZSB0aGUgY29udGVudDwvZW0+PHN0cm9uZz4nfTwvc3Ryb25nPjxlbT53aGF0ZXZlciBjb250ZW50IHlvdSB3YW50IHByb3RlY3RlZC48L2VtPjxzdHJvbmc+ey9wcm90ZWN0fTwvc3Ryb25nPgogICAgPC9wcmU+CiAgPC9wPgogIAogIDxoND5QYXNzd29yZHM8L2g0PgogIDxwPlRoZSBwYXNzd29yZHMgcGFyYW1ldGVyIGNhbiBhY2NlcHQgYSByYW5nZSBvZiB2YWx1ZXMsIGZyb20gYSBzaW5nbGUgcGFzc3dvcmQsIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgcGFzc3dvcmRzLCBvciBhbiBhcnJheSBvZiB2YWx1ZXM6PC9wPgoKICA8cD4KICAgIDxwcmU+CiAgICAgIAo8c3Ryb25nPntwYWdlX3Byb3RlY3QgcGFzc3dvcmRzPSdwYXNzMSd9PC9zdHJvbmc+CiAgICA8L3ByZT4KICA8L3A+CiAgCiAgPHA+CiAgICA8cHJlPgogICAgCjxzdHJvbmc+e3BhZ2VfcHJvdGVjdCBwYXNzd29yZHM9J3Bhc3MxLCdwYXNzMicsJ3Bhc3MzJ308L3N0cm9uZz4KICAgIDwvcHJlPgogIDwvcD4KICA8cD4KICAgIDxwcmU+CiAgICAKeyogVXNlIHNtYXJ0eSBzeW50YXggdG8gY3JlYXRlIGFuIGFycmF5ICp9CjxzdHJvbmc+eyRwYXNzd29yZHM9WydwYXNzMScsJ3Bhc3MyJywncGFzczMnXX08L3N0cm9uZz4KCnsqIG9yICp9CjxzdHJvbmc+eyRwYXNzd29yZHNbXT0ncGFzczEnfQp7JHBhc3N3b3Jkc1tdPSdwYXNzMid9CnskcGFzc3dvcmRzW109J3Bhc3MzJ308L3N0cm9uZz4KCnsqIGFuZCB1c2UgaXQgYXMgdGhlIHZhbHVlIGZvciB0aGUgcGFyYW1ldGVyIHBhc3N3b3JkcyAqfQo8c3Ryb25nPntwYWdlX3Byb3RlY3QgcGFzc3dvcmRzPSRwYXNzd29yZHN9PC9zdHJvbmc+Cgp7KiBvciAqfQo8c3Ryb25nPntwYWdlX3Byb3RlY3QgYWN0aW9uPSdzZXQnIHBhc3N3b3Jkcz0kcGFzc3dvcmRzfTwvc3Ryb25nPgogICAgPC9wcmU+CiAgPC9wPgogICAgICAgCjwvZGl2PiAKCgo8IS0tL3RhYjogTm90ZXMvLS0+Cgo8ZGl2IGlkPSJub3Rlc19jIj4KCiAgPGgzPk5vdGVzPC9oMz4KICAKICA8aDQ+VGFncyBPcmRlcjwvaDQ+ICAKCiAgPHA+VGhlIG9yZGVyIGJ5IHdoaWNoIHRoZSB0YWdzIGFyZSBjYWxsZWQgaXMgZXh0cmVtZWx5IGltcG9ydGFudDogdGhlIGRlZmF1bHQgYWN0aW9uIChwYXJhbWV0ZXIgPHN0cm9uZz5hY3Rpb249J2RlZmF1bHQnPC9zdHJvbmc+IHdoaWNoIGNhbiBiZSBvbWl0dGVkKSAsIHdoZW4gdXNlZCwgPHN0cm9uZz5jYW5ub3Q8L3N0cm9uZz4gYmUgc2V0IG9uIHRoZSBzYW1lIGNvbnRlbnQgYmxvY2sgYXMgdGhlIDxzdHJvbmc+e3Byb3RlY3R9ey9wcm90ZWN0fTwvc3Ryb25nPiB0YWdzLCBhbmQgc2hvdWxkIGJlIGNhbGxlZCBvbiB0aGUgdG9wbW9zdCBibG9jayBvZiB0aGUgdGVtcGxhdGUuIFRoaXMgdGFnIHJlZ2lzdGVycyBhIHNtYXJ0eSBibG9jayBwbHVnaW4gPHN0cm9uZz57cHJvdGVjdH08L3N0cm9uZz4gd2hpY2ggd29uJ3QgYmUgcmVjb2duaXplZCBiZWZvcmUgYmVpbmcgcGFyc2VkIG9uY2UgKGFuZCByZWdpc3RlcmVkKSBieSB0aGUgU21hcnR5IGVuZ2luZS4gQWZ0ZXIgdGhpcyBmaXJzdCBjYWxsLCBhbGwgb3RoZXIgY2FsbHMgZG9uJ3QgaGF2ZSBhIHNwZWNpZmljIG9yZGVyIG90aGVyIHRoYW4sIG9mIGNvdXJzZSwgdGhlIG9wZW5pbmcgYW5kIGNsb3NpbmcgPHN0cm9uZz57cHJvdGVjdH17L3Byb3RlY3R9PC9zdHJvbmc+IHRhZ3MuPC9wPgogIAogIDxoND5QZXJzaXN0ZW50IFBhcmFtZXRlcnM8L2g0PiAgCiAgPHA+U29tZSBvZiB0aGUgcGFyYW1ldGVycyB1c2VkIGJ5IHRoaXMgcGx1Z2luIGFyZSBwZXJzaXN0ZW50IGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHJlcXVlc3QsIHRoYXQgaXMgdG8gc2F5LCB0aHJvdWdoIGFsbCBvZiB0aGUgY3VycmVudCByZW5kZXJlZCBwYWdlLiBUaGlzIG1lYW5zIHRoYXQgeW91IGNhbiBzZXQgdGhlbSBvbmNlLCBrbm93aW5nIHRoZXkgd2lsbCBiZSB1c2VkIGxhdGVyIG9uIHRoZSBzYW1lIHJlcXVlc3Qgb24gc3Vic2VxdWVudCBjYWxscyB0byB0aGUgcGx1Z2luLiBUaGF0IGFsc28gbWVhbnMgdGhhdCB0aGV5IGNhbiBiZSBjaGFuZ2VkIG9uIHN1YnNlcXVlbnQgY2FsbHMsIGlmIG5lZWRlZC48L3A+CiAgCiAgPGg0PlBhc3N3b3JkczwvaDQ+ICAgIAoKICA8ZGl2IGNsYXNzPSJ3YXJuaW5nIiBzdHlsZT0iZGlzcGxheTpibG9jazsiPgogIDxwPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gVW5sZXNzIHlvdSB1c2UgYW4gYXJyYXkgdG8gc2V0IHRoZSBwYXNzd29yZHMsIGF2b2lkIHRoZSB1c2Ugb2YgY29tbWFzICg8c3Ryb25nPiw8L3N0cm9uZz4pIGFuZCBvZiB2ZXJ0aWNhbCBzbGFzaGVzICg8c3Ryb25nPnw8L3N0cm9uZz4pIGFzIHBhc3N3b3JkIHN5bWJvbHMgYXMgdGhlc2UgYXJlIHJlc2VydmVkIHRvIGludGVybmFsIHVzZSBhbmQgd2lsbCB1bmF2b2lkYWJseSBsZWFkIHRvIHBhc3N3b3JkcyBub3QgYmVpbmcgcmVjb2duaXplZCBieSB0aGUgcGx1Z2luLjwvcD4KICA8L2Rpdj4KCiAgPGgzPkFkZGl0aW9uYWwgTm90ZXM8L2gzPgoKICA8cD5JZiB0aGUgPHN0cm9uZz50aW1lb3V0PC9zdHJvbmc+IHBhcmFtZXRlciBpcyB1c2VkLCB0aGlzIHBsdWdpbiB3aWxsIGdlbmVyYXRlIGEgZnJvbnRlbmQgY29va2llLiBCeSB1c2luZyB0aGlzIHBhcmFtZXRlciB5b3UgbWF5IGJlIHZpb2xhdGluZyBzb21lIGNvdW50cmllcyBsYXdzIG9mIHVzZXIgcHJpdmFjeS4gUGxlYXNlIG1ha2Ugc3VyZSB5b3UgcHJvdmlkZSBhIGZhaXIgd2FybmluZyBvbiB0aGUgZnJvbnQgcGFnZXMgaWYgbmVlZGVkLCBvciBhdm9pZCB1c2luZyB0aGUgPHN0cm9uZz50aW1lb3V0PC9zdHJvbmc+IHBhcmFtZXRlciwgdGh1cyBkaXNhYmxpbmcgdGhlIHVzZSBvZiBjb29raWVzLiBUaGUgb25seSBkcmF3YmFjayBvZiBub3QgdXNpbmcgY29va2llcyBpcyB0aGF0IHRoZSBhdXRoZW50aWNhdGlvbiBvbmx5IGxhc3RzIGZvciBhIHNpbmdsZSBwYWdlIHJlcXVlc3QuPC9wPgogIDxwPlRoaXMgcGx1Z2luIG5lZWRzIFBIUCB2ZXJzaW9uIDUuMy48L3A+CiAKPC9kaXY+IApFT1Q7CgogIGVjaG8gJHR4dDsKfQoKZnVuY3Rpb24gc21hcnR5X2Ntc19hYm91dF9mdW5jdGlvbl9jb250ZW50X3Byb3RlY3QoKQp7CiAgJHR4dCA9IDw8PCdFT1QnCjxoMz5BYm91dDwvaDM+CjxwPjxzdHJvbmc+VmVyc2lvbjogMS4yPC9zdHJvbmc+PC9wPgo8cD5BdXRob3I6IEpvIE1vcmcgKEZlcm5hbmRvIE1vcmdhZG8pPC9wPgo8cD5Bbm90aGVyIHBsdWdpbiBtYWRlIG91dCBvZiBuZWVkLiBFbmpveSE8L3A+CjxoMz5IaXN0b3J5PC9oMz4KPHVsPgogICAgPGxpPjxzdHJvbmc+VmVyc2lvbiAxLjIuMTwvc3Ryb25nPjoKICAgICAgPHVsPiAgICAgICAgCiAgICAgICAgPGxpPk1pbm9yIGZpeCB0byBhbGxvdyBpdCB0byB3b3JrIHdpdGggQ01TTVMgMi54PC9saT4KICAgICAgPC91bD4KICAgIDwvbGk+CiAgICA8bGk+PHN0cm9uZz5WZXJzaW9uIDEuMjwvc3Ryb25nPjoKICAgICAgPHVsPiAgICAgICAgCiAgICAgICAgPGxpPkFkZGVkIGEgPHN0cm9uZz5RdWljayBTZXR1cDwvc3Ryb25nPjs8L2xpPgogICAgICAgIDxsaT5BZGRlZCBhbiBhc3NpZ25hYmxlIDxzdHJvbmc+U21hcnR5PC9zdHJvbmc+IHZhcmlhYmxlLCBieSBkZWZhdWx0IDxzdHJvbmc+JHBwX2xvZ2dlZF9pbjwvc3Ryb25nPjoKICAgICAgICAgIDx1bD4KICAgICAgICAgICAgPGxpPmFsbG93cyB0byB1c2UgPHN0cm9uZz5TbWFydHk8L3N0cm9uZz4gbG9naWMgdG8gY2hlY2sgaWYgY3VycmVudCB2aXNpdG9yIGlzIGxvZ2dlZCBpbjs8L2xpPgogICAgICAgICAgICA8bGk+bWFrZXMgdGhlIGluaXRpYWxpemF0aW9uIG9wdGlvbmFsOzwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgIDwvbGk+CiAgICAgICAgPGxpPlVwZGF0ZWQgaGVscCBhbmQgY29ycmVjdGVkIGEgZmV3IHR5cG9zOzwvbGk+CiAgICAgIDwvdWw+CiAgICA8L2xpPgogICAgPGxpPjxzdHJvbmc+VmVyc2lvbiAxLjE8L3N0cm9uZz46CiAgICAgIDx1bD4KICAgICAgICA8bGk+QWRkZWQgbG9naW5fYWxpYXMgcGFyYW1ldGVyIGFuZCBhYmlsaXR5IHRvIHJlZGlyZWN0IG9uIGF1dGhlbnRpY2F0ZWQgbG9naW47PC9saT4KICAgICAgICA8bGk+VXBkYXRlZCBoZWxwIGFuZCBjb3JyZWN0ZWQgYSBmZXcgdHlwb3M7PC9saT4KICAgICAgPC91bD4KICAgIDwvbGk+CiAgICA8bGk+PHN0cm9uZz5WZXJzaW9uIDEuMDwvc3Ryb25nPjoKICAgICAgPHVsPgogICAgICAgIDxsaT5NaW5vciBmaXhlczs8L2xpPgogICAgICA8L3VsPgogICAgPC9saT4KICAgIDxsaT48c3Ryb25nPlZlcnNpb24gMS4wLlJDLjI8L3N0cm9uZz46CiAgICAgIDx1bD4KICAgICAgICA8bGk+Q2xlYW5lZCBhIGZldyByZWR1bmRhbnQgbGluZXMgb2YgY29kZTs8L2xpPgogICAgICAgIDxsaT5BZGRlZCB0aGUgPGVtPjxzdHJvbmc+c2V0PC9zdHJvbmc+PC9lbT4gYWN0aW9uIHRvIGFsbG93IHRvIGRpc3RyaWJ1dGUgdGhlIG51bWVyb3VzIHBhcmFtZXRlcnMgdGhyb3VnaCBkaWZmZXJlbnQgdGFncyAoYXMgbG9uZyBhcyB0aGV5IGFyZSBvbiB0aGUgc2FtZSBwYWdlKTs8L2xpPgogICAgICAgIDxsaT5NYWRlIGEgZmV3IGFkZGl0aW9ucyB0byB0aGUgcGx1Z2luJ3MgaGVscDs8L2xpPgogICAgICA8L3VsPgogICAgPC9saT4KICAgIDxsaT4gPHN0cm9uZz5WZXJzaW9uIDEuMC5SQy4xPC9zdHJvbmc+OgogICAgICA8dWw+CiAgICAgICAgICA8bGk+QWRkZWQgYSBmZXcgcGFyYW1ldGVycyB0byBmdXJ0aGVyIHN0eWxlIHRoZSBmb3JtOzwvbGk+CiAgICAgIDwvdWw+CiAgICA8L2xpPgogICAgPGxpPiA8c3Ryb25nPlZlcnNpb24gMS4wLlJDPC9zdHJvbmc+OiAKICAgICAgPHVsPgogICAgICAgICAgPGxpPkluaXRpYWwgdmVyc2lvbiAoZm9yIENNU01TIDEuMTEueCkuIEEgcmVsZWFzZSBjYW5kaWRhdGU7PC9saT4KICAgICAgPC91bD4KICAgIDwvbGk+CjwvdWw+CjxoMz5UbyBEbyBMaXN0PC9oMz4KPHVsPgogIDxsaT5BbGxvdyBJUCBiYXNlZCBibGFja2xpc3RzIG9yIHdoaXRlbGlzdHM7PC9saT4KICAgIDxsaT5BbGxvdyBwYWlycyBvZiB1c2VybmFtZSBhbmQgcGFzc3dvcmQ7PC9saT4KICAgIDxsaT48c3RyaWtlPiBBZGQgYSBmZXcgcGFyYW1ldGVycyB0byBmdXJ0aGVyIHN0eWxlIHRoZSBmb3JtPC9zdHJpa2U+OyAmIzEwMDA0OzwvbGk+CjwvdWw+CkVPVDsKCiAgZWNobyAkdHh0Owp9Cj8+]]></data>
	</file>
	<file>
	  <filename>/lib/internal_plugins/modifier.content_protect.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[DQo8P3BocA0KLyoNCiAqIFNtYXJ0eSBwbHVnaW4NCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAqIEZpbGU6ICAgICBtb2RpZmllci5jb250ZW50X3Byb3RlY3QucGhwDQogKiBUeXBlOiAgICAgbW9kaWZpZXINCiAqIE5hbWU6ICAgICBjb250ZW50X3Byb3RlY3QNCiAqIFB1cnBvc2U6ICBwcm90ZWN0IGNvbnRlbnRzDQogKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogKi8NCmZ1bmN0aW9uIHNtYXJ0eV9tb2RpZmllcl9jb250ZW50X3Byb3RlY3QoJHN0cmluZykNCnsNCiAgJGFsbG93ID0gY21zX3V0aWxzOjpnZXRfYXBwX2RhdGEoJ19DUF9BbGxvdycpOw0KICANCiAgaWYoIGlzc2V0KCRzdHJpbmcpICkNCiAgew0KICAgICRzbWFydHkgPSBjbXNfdXRpbHM6OmdldF9zbWFydHkoKTsNCiAgICANCiAgICBpZigkYWxsb3cpIHsgcmV0dXJuICRzdHJpbmc7IH0NCiAgICAjIHdlIGFkZCBhYmlsaXR5IHRvIG92ZXJyaWRlIHByb3RlY3RlZF9tc2cNCiAgICAjIGZyb20geydmb28nOmNvbnRlbnRfcHJvdGVjdCBwcm90ZWN0ZWRfbXNnPSdzb21lIG1lc3NhZ2UnfQ0KICAgICRwcm90ZWN0ZWRfbXNnID0gKA0KICAgICAgJHBhcmFtc1sncHJvdGVjdGVkX21zZyddID8/IGNtc191dGlsczo6Z2V0X2FwcF9kYXRhKCdfQ1BfUHJvdF9Nc2cnKQ0KICAgICk7DQogICAgDQogICAgaWYoaXNzZXQoJHByb3RlY3RlZF9tc2cpKSB7IHJldHVybiAkcHJvdGVjdGVkX21zZzsgfQ0KICB9DQp9DQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/internal_plugins/modifier.protect.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[DQo8P3BocA0KLyoNCiAqIFNtYXJ0eSBwbHVnaW4NCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAqIEZpbGU6ICAgICBtb2RpZmllci5jb250ZW50X3Byb3RlY3QucGhwDQogKiBUeXBlOiAgICAgbW9kaWZpZXINCiAqIE5hbWU6ICAgICBjb250ZW50X3Byb3RlY3QNCiAqIFB1cnBvc2U6ICBwcm90ZWN0IGNvbnRlbnRzDQogKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogKi8NCmZ1bmN0aW9uIHNtYXJ0eV9tb2RpZmllcl9wcm90ZWN0KCRzdHJpbmcpDQp7DQogICRhbGxvdyA9IGNtc191dGlsczo6Z2V0X2FwcF9kYXRhKCdfQ1BfQWxsb3cnKTsNCiAgDQogIGlmKGlzc2V0KCRzdHJpbmcpKQ0KICB7DQogICAgaWYoJGFsbG93KSB7IHJldHVybiAkc3RyaW5nOyB9DQogICAgIyB3ZSBhZGQgYWJpbGl0eSB0byBvdmVycmlkZSBwcm90ZWN0ZWRfbXNnDQogICAgIyBmcm9tIHsnZm9vJzpwcm90ZWN0IHByb3RlY3RlZF9tc2c9J3NvbWUgbWVzc2FnZSd9DQogICAgJHByb3RlY3RlZF9tc2cgPSAoDQogICAgICAkcGFyYW1zWydwcm90ZWN0ZWRfbXNnJ10gPz8gY21zX3V0aWxzOjpnZXRfYXBwX2RhdGEoJ19DUF9Qcm90X01zZycpDQogICAgKTsNCiAgICANCiAgICBpZihpc3NldCgkcHJvdGVjdGVkX21zZykpIHsgcmV0dXJuICRwcm90ZWN0ZWRfbXNnOyB9DQogIH0NCn0NCj8+]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNtYXJ0eUV4dCAoYykgMjAyMC0yMDIxIGJ5IENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uCiMgIEFuIGFkZC1vbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBwcm92aWRlIHVzZWZ1bCBmdW5jdGlvbnMKIyAgYW5kIGNvbW1vbmx5IHVzZWQgZ3VpIGNhcGFiaWxpdGllcyB0byBvdGhlciBtb2R1bGVzLgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEEgZm9yayBvZjoKIwojIE1vZHVsZTogQ0dTaW1wbGVTbWFydHkgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKaWYodmVyc2lvbl9jb21wYXJlKFBIUF9WRVJTSU9OLCAnNy40LjExJykgPCAwKQp7CiAgcmV0dXJuICdNaW5pbXVtIFBIUCB2ZXJzaW9uIG9mIDUuNC4xMSByZXF1aXJlZCc7Cn0KCj8+]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNtYXJ0eUV4dCAoYykgMjAyMC0yMDIxIGJ5IENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uCiMgIEFuIGFkZC1vbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBwcm92aWRlIHVzZWZ1bCBmdW5jdGlvbnMKIyAgYW5kIGNvbW1vbmx5IHVzZWQgZ3VpIGNhcGFiaWxpdGllcyB0byBvdGhlciBtb2R1bGVzLgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEEgZm9yayBvZjoKIwojIE1vZHVsZTogQ0dTaW1wbGVTbWFydHkgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKaWYodmVyc2lvbl9jb21wYXJlKFBIUF9WRVJTSU9OLCAnNy40LjExJykgPCAwKQp7CiAgcmV0dXJuICdNaW5pbXVtIFBIUCB2ZXJzaW9uIG9mIDUuNC4xMSByZXF1aXJlZCc7Cn0KCj8+]]></data>
	</file>
	<file>
	  <filename>/SmartyExt.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNtYXJ0eUV4dCAoYykgMjAyMC0yMDIxIGJ5IENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uCiMgIEFuIGFkZC1vbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBwcm92aWRlIHVzZWZ1bCBmdW5jdGlvbnMKIyAgYW5kIGNvbW1vbmx5IHVzZWQgZ3VpIGNhcGFiaWxpdGllcyB0byBvdGhlciBtb2R1bGVzLgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEEgZm9yayBvZjoKIwojIE1vZHVsZTogQ0dTaW1wbGVTbWFydHkgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQp1c2UgXFNtYXJ0eUV4dFx1dGlsczsKCmNsYXNzIFNtYXJ0eUV4dCBleHRlbmRzIENNU01vZHVsZQp7CiAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICMgSW50ZXJuYWwgYXV0b2xvYWRlcgogICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAKICBwcml2YXRlIGZ1bmN0aW9uIF9hdXRvbG9hZGVyKCRjbGFzc25hbWUpCiAgewogICAgJHBhcnRzID0gZXhwbG9kZSgnXFwnLCAkY2xhc3NuYW1lKTsKICAgICRjbGFzc25hbWUgPSBlbmQoJHBhcnRzKTsKICAgIAogICAgJGZuID0gY21zX2pvaW5fcGF0aCgKICAgICAgJHRoaXMtPkdldE1vZHVsZVBhdGgoKSwKICAgICAgJ2xpYicsCiAgICAgICdjbGFzcy4nIC4gJGNsYXNzbmFtZSAuICcucGhwJwogICAgKTsKICAgIAogICAgaWYoZmlsZV9leGlzdHMoJGZuKSkgeyByZXF1aXJlX29uY2UoJGZuKTsgfQogIH0KICAKICBwcml2YXRlIGZ1bmN0aW9uIF9pbmNsdWRlcygpCiAgewogICAgJHBhdCA9IGNtc19qb2luX3BhdGgoCiAgICAgICR0aGlzLT5HZXRNb2R1bGVQYXRoKCksCiAgICAgICdsaWInLAogICAgICAnZnVuY3Rpb24uKi5waHAnCiAgICApOwogIAogICAgZm9yZWFjaChnbG9iKCRwYXQpIGFzICRmaWxlbmFtZSkKICAgIHsKICAgICAgaW5jbHVkZV9vbmNlICRmaWxlbmFtZTsKICAgIH0KICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKICB7CiAgICBnbG9iYWwgJENNU19JTlNUQUxMX1BBR0UsICRDTVNfUEhBUl9JTlNUQUxMOwogICAgCiAgICBpZiggaXNzZXQoJENNU19JTlNUQUxMX1BBR0UpIHx8IGlzc2V0KCRDTVNfUEhBUl9JTlNUQUxMKSApe3JldHVybjt9CiAgCiAgICBzdGF0aWMgJF9zZXR1cDsKICAKICAgIGlmKCRfc2V0dXApe3JldHVybjt9CiAgCiAgICAkX3NldHVwID0gMTsKICAKICAgICR0aGlzLT5faW5jbHVkZXMoKTsKICAgIHNwbF9hdXRvbG9hZF9yZWdpc3RlcihbJHRoaXMsICdfYXV0b2xvYWRlciddKTsKICAgIAogICAgIyBjcmVhdGUgbmV3IHNtYXJ0eSBmdW5jdGlvbnMgdG8gcmVnaXN0ZXIgdGhlIHBsdWdpbnMKICAgICRzbWFydHlfZnVuY3Rpb25zID0gbmV3IFxTbWFydHlFeHRcc21hcnR5X2Z1bmN0aW9ucygpOwogICAgJHNtYXJ0eSA9IGNtc21zKCktPkdldFNtYXJ0eSgpOwogICAgIyByZWdpc3RlciB0aGUgc214IGNsYXNzCiAgICAkc21hcnR5LT5yZWdpc3RlckNsYXNzKCdzbXgnLCAnc214Jyk7CiAgICAjIGFkZCBvdXIgb3duIHBsdWdpbiBkaXIgZm9yIHNvbWUgbW9yZSBjb21wbGV4IHN0dWZmCiAgICAkcGx1Z2luc19kaXIgPSBjbXNfam9pbl9wYXRoKCAkdGhpcy0+R2V0TW9kdWxlUGF0aCgpLCAnbGliJywgJ2ludGVybmFsX3BsdWdpbnMnICk7CiAgICAKICAgICRzbWFydHktPmFkZFBsdWdpbnNEaXIoJHBsdWdpbnNfZGlyKTsKICAgIAogICAgcGFyZW50OjpfX2NvbnN0cnVjdCgpOwogIH0KICAKICBmdW5jdGlvbiBHZXROYW1lKCl7IHJldHVybiAnU21hcnR5RXh0JzsgfQogIAogIGZ1bmN0aW9uIEdldEZyaWVuZGx5TmFtZSgpeyByZXR1cm4gJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpOyB9CiAgCiAgZnVuY3Rpb24gR2V0VmVyc2lvbigpeyByZXR1cm4gJzEuMic7IH0KICAKICBmdW5jdGlvbiBNaW5pbXVtQ01TVmVyc2lvbigpeyByZXR1cm4gJzIuMS40JzsgfQogIAogIHB1YmxpYyBmdW5jdGlvbiBHZXRIZWxwKCkKICB7CiAgICAkc21hcnR5ID0gY21zbXMoKS0+R2V0U21hcnR5KCk7CiAgICAkc21hcnR5LT5hc3NpZ24oJ21vZCcsICR0aGlzKTsKICAgICRzbWFydHktPmFzc2lnbigncGFyZW50X25hbWUnLCAkdGhpcy0+R2V0TmFtZSgpKTsKICAgIHJldHVybiAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdoZWxwLnRwbCcpOwogIH0KICAKICBmdW5jdGlvbiBHZXRBdXRob3IoKXsgcmV0dXJuICdKbyBNb3JnJzsgfQogIAogIGZ1bmN0aW9uIEdldEF1dGhvckVtYWlsKCl7IHJldHVybiAnam9tb3JnQGNtc21hZGVzaW1wbGUub3JnJzsgfQogIAogIGZ1bmN0aW9uIEdldENoYW5nZUxvZygpCiAgewogICAgJHNtYXJ0eSA9IGNtc21zKCktPkdldFNtYXJ0eSgpOwogICAgJHNtYXJ0eS0+YXNzaWduKCdtb2QnLCAkdGhpcyk7CiAgICByZXR1cm4gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnY2hhbmdlbG9nLnRwbCcpOwogIH0KICAKICBmdW5jdGlvbiBJc1BsdWdpbk1vZHVsZSgpeyByZXR1cm4gRkFMU0U7IH0KICAKICBmdW5jdGlvbiBHZXRBZG1pbkRlc2NyaXB0aW9uKCl7IHJldHVybiAkdGhpcy0+TGFuZygnbW9kZGVzY3JpcHRpb24nKTsgfQogIAogIGZ1bmN0aW9uIEhhc0FkbWluKCl7IHJldHVybiBGQUxTRTsgfQogIAogIGZ1bmN0aW9uIEhhbmRsZXNFdmVudHMoKXsgcmV0dXJuIEZBTFNFOyB9CiAgCiAgZnVuY3Rpb24gSW5zdGFsbFBvc3RNZXNzYWdlKCl7IHJldHVybiAkdGhpcy0+TGFuZygncG9zdGluc3RhbGwnKTsgfQogIAogIGZ1bmN0aW9uIFVuaW5zdGFsbFBvc3RNZXNzYWdlKCl7IHJldHVybiAkdGhpcy0+TGFuZygncG9zdHVuaW5zdGFsbCcpOyB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/templates</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/changelog.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHVsPg0KICA8bGk+MS4yIC0gRmVicnVhcnksIDIwMjMNCiAgICA8cD5BZGRlZCAzIG5ldyBwbHVnaW5zOzwvcD4NCiAgICA8cD5DbGVhbmVkIGFuZCByZW9yZ2FuaXplZCB0aGUgaGVscCBkb2N1bWVudGF0aW9uOzwvcD4NCiAgICA8cD5OZXcgJ2NsaWNrIHRvIGNvcHknIGZ1bmN0aW9uYWxpdHkgb24gY29kZSBzbmlwcGV0czs8L3A+DQogICAgPHA+Rml4ZXMgYW5kIGEgZmV3IG1vcmUgUEhQIDguMSBjb21wYXRpYmlsaXR5IHVwZGF0ZXM7PC9wPg0KICA8L2xpPg0KICA8bGk+MS4wLjEgLSBEZWNlbWJlciwgMjAyMg0KICAgIDxwPkZpeGVzIGFuZCBQSFAgOC4xIGNvbXBhdGliaWxpdHkgdXBkYXRlczs8L3A+DQogIDwvbGk+DQogIDxsaT4xLjAgLSBGZWJydWFyeSwgMjAyMQ0KICAgIDxwPkluaXRpYWwgcmVsZWFzZTwvcD4NCiAgPC9saT4NCjwvdWw+]]></data>
	</file>
	<file>
	  <filename>/templates/help.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHN0eWxlPg0KKg0Kew0KICBib3gtc2l6aW5nOiBib3JkZXItYm94Ow0KfQ0KDQouY2xpY2stdG8tY29weQ0Kew0KICBjdXJzb3I6cG9pbnRlcjsNCn0NCg0KLnNtYWxsDQp7DQogIGZvbnQtc2l6ZTogODUlOw0KICBtYXJnaW46IDAgMCAwIDE1cHg7DQp9DQoNCnVsLmFjY29yZGlvbi1saXN0DQp7DQogIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgZGlzcGxheTogYmxvY2s7DQogIHdpZHRoOiA5NiUgIWltcG9ydGFudDsNCiAgaGVpZ2h0OiBhdXRvOw0KICBwYWRkaW5nOiAyMHB4Ow0KICBtYXJnaW46IDA7DQogIGxpc3Qtc3R5bGU6IG5vbmU7DQogIGJhY2tncm91bmQtY29sb3I6ICNmOWY5ZkE7DQp9DQoNCnVsLmFjY29yZGlvbi1saXN0IC5hY2NvcmRpb24tbGlzdC1pdGVtDQp7DQogIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgZGlzcGxheTogYmxvY2s7DQogIHdpZHRoOiAxMDAlOw0KICBoZWlnaHQ6IGF1dG87DQogIGJhY2tncm91bmQtY29sb3I6ICNGRkY7DQogIHBhZGRpbmc6IDIwcHg7DQogIG1hcmdpbjogMCBhdXRvIDE1cHggYXV0bzsNCiAgYm9yZGVyOiAxcHggc29saWQgI2VlZTsNCiAgYm9yZGVyLXJhZGl1czogNXB4Ow0KfQ0KDQp1bC5hY2NvcmRpb24tbGlzdCAuYWNjb3JkaW9uLWxpc3QtaXRlbS5hY3RpdmUgaDMuYWw6YWZ0ZXINCnsNCiAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpOw0KfQ0KDQp1bC5hY2NvcmRpb24tbGlzdCAuYWNjb3JkaW9uLWxpc3QtaXRlbSBoMy5hbA0Kew0KICBmb250LXdlaWdodDogNzAwOw0KICAvKnRleHQtZGVjb3JhdGlvbi1saW5lOiB1bmRlcmxpbmU7Ki8NCiAgcG9zaXRpb246IHJlbGF0aXZlOw0KICBkaXNwbGF5OiBibG9jazsNCiAgd2lkdGg6IDEwMCU7DQogIGhlaWdodDogYXV0bzsNCiAgcGFkZGluZzogMCAwIDAgMDsNCiAgbWFyZ2luOiAwOw0KICBmb250LXNpemU6IDE1cHg7DQogIGxldHRlci1zcGFjaW5nOiAwLjAxZW07DQogIGN1cnNvcjogcG9pbnRlcjsNCn0NCg0KdWwuYWNjb3JkaW9uLWxpc3QgLmFjY29yZGlvbi1saXN0LWl0ZW0gaDMuYWw6YWZ0ZXINCnsNCiAgY29udGVudDogIisiOw0KLyAvIGZvbnQtZmFtaWx5OiAibWF0ZXJpYWwtZGVzaWduLWljb25pYy1mb250IjsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICByaWdodDogMDsNCiAgdG9wOiAwOw0KICBjb2xvcjogIzE0N2ZkYjsNCiAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZS1pbi1vdXQ7DQogIGZvbnQtc2l6ZTogMThweDsNCn0NCg0KdWwuYWNjb3JkaW9uLWxpc3QgLmFjY29yZGlvbi1saXN0LWl0ZW0gZGl2LmFjY29yZGlvbi1saXN0LWl0ZW0tYm9keQ0Kew0KICBwb3NpdGlvbjogcmVsYXRpdmU7DQogIGRpc3BsYXk6IGJsb2NrOw0KICB3aWR0aDogMTAwJTsNCiAgaGVpZ2h0OiBhdXRvOw0KICBtYXJnaW46IDM1cHggMCAxNXB4IDA7DQogIHBhZGRpbmc6IDA7DQp9DQoNCnVsLmFjY29yZGlvbi1saXN0IC5hY2NvcmRpb24tbGlzdC1pdGVtIGRpdi5hY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkgcA0Kew0KICBwb3NpdGlvbjogcmVsYXRpdmU7DQogIGRpc3BsYXk6IGJsb2NrOw0KICBmb250LXdlaWdodDogMzAwOw0KICBwYWRkaW5nOiAwIDAgMCAwOw0KICBsaW5lLWhlaWdodDogMTUwJTsNCiAgbWFyZ2luOiAwIDAgMCAwOw0KICBmb250LXNpemU6IDE0cHg7DQp9DQp1bC5oaWdobGlnaHQtbGlzdA0Kew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWVlOw0KICBwb3NpdGlvbjogcmVsYXRpdmU7DQogIGRpc3BsYXk6IGJsb2NrOw0KICB3aWR0aDogODAlOw0KICBoZWlnaHQ6IGF1dG87DQogIG1hcmdpbjogMTVweDsNCiAgcGFkZGluZzogMjVweDsNCn0NCjwvc3R5bGU+DQoNCjxzY3JpcHQgc3JjPSJ7JG1vZC0+R2V0TW9kdWxlVVJMUGF0aCgpfS9qcy9qcy5jb29raWUuanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9InskbW9kLT5HZXRNb2R1bGVVUkxQYXRoKCl9L2pzL2pzLmZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+DQoNCjxkaXYgaWQ9InBhZ2VfdGFicyI+DQogIDxkaXYgIGlkPSJnZW5lcmFsIj4NCiAgICAgIEdlbmVyYWwNCiAgPC9kaXY+DQogIDxkaXYgIGlkPSJwbHVnaW5zIj4NCiAgICAgIFBsdWdpbnMNCiAgPC9kaXY+DQogIDxkaXYgIGlkPSJjbGFzcyI+DQogICAgICBDbGFzcw0KICA8L2Rpdj4NCiAgPGRpdiBpZD0ibmV3Ij4NCiAgICAgV2hhdCdzIE5ldw0KICA8L2Rpdj4NCiAgPGRpdiBpZD0iYWJvdXQiPg0KICAgICBBYm91dA0KICA8L2Rpdj4NCjwvZGl2Pg0KPGRpdiBpZD0icGFnZV9jb250ZW50Ij4NCiAgPGRpdiBpZD0iZ2VuZXJhbF9jIj4NCiAgICB7aW5jbHVkZSBmaWxlPSdtb2R1bGVfZmlsZV90cGw6U21hcnR5RXh0O2hlbHBfZ2VuZXJhbF90YWIudHBsJ30NCiAgPC9kaXY+DQogIDxkaXYgaWQ9InBsdWdpbnNfYyI+DQogICAge2luY2x1ZGUgZmlsZT0nbW9kdWxlX2ZpbGVfdHBsOlNtYXJ0eUV4dDtoZWxwX3BsdWdpbnNfdGFiLnRwbCd9DQogIDwvZGl2Pg0KICA8ZGl2IGlkPSJjbGFzc19jIj4NCiAgICB7aW5jbHVkZSBmaWxlPSdtb2R1bGVfZmlsZV90cGw6U21hcnR5RXh0O2hlbHBfY2xhc3NfdGFiLnRwbCd9DQogIDwvZGl2Pg0KICA8ZGl2IGlkPSJuZXdfYyI+DQogICAge2luY2x1ZGUgZmlsZT0nbW9kdWxlX2ZpbGVfdHBsOlNtYXJ0eUV4dDtoZWxwX3doYXRfaXNfbmV3X3RhYi50cGwnfQ0KCTwvZGl2Pg0KICA8ZGl2IGlkPSJhYm91dF9jIj4NCiAgICB7aW5jbHVkZSBmaWxlPSdtb2R1bGVfZmlsZV90cGw6U21hcnR5RXh0O2hlbHBfYWJvdXRfdGFiLnRwbCd9DQoJPC9kaXY+DQogIDxkaXYgY2xhc3M9ImNsZWFyYiI+PC9kaXY+DQo8L2Rpdj4=]]></data>
	</file>
	<file>
	  <filename>/templates/help_about_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPkFib3V0IHRoaXMgbW9kdWxlPC9oMz4NCg0KICA8cD5UaGlzIG1vZHVsZSBpcyBhIGZvcmsgb2YgPHN0cm9uZz5DR1NpbXBsZVNtYXJ0eTwvc3Ryb25nPiBkZXZlbG9wZWQgYnkgPHN0cm9uZz5Sb2JlcnQgQ2FtcGJlbGwgJmx0O2NhbGd1eTEwMDAmZ3Q7PC9zdHJvbmc+LjxiciAvPg0KICAgICAgVGhpcyBpcyBhIDFzdCBnZW5lcmF0aW9uIGZvcmsgb2YgdGhlIG1vZHVsZS4gQ29uc2lkZXIgdGhpcyBhcyBhbm90aGVyIGZsYXZvdXIgb2YgdGhlIG9yaWdpbmFsIG1vZHVsZS48YnIgLz4NCg0KICBJZiB5b3UgZmluZCBhbnkgYnVncyBwbGVhc2UgZmVlbCBmcmVlIHRvIHN1Ym1pdCBhIGJ1ZyByZXBvcnQgPGEgaHJlZj0iaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9idWcvbGlzdC8xNDYzIiB0YXJnZXQ9Il9ibGFuayI+aGVyZTwvYT4gb3IgZm9yIGFueSBnb29kIGlkZWFzIGNvbnNpZGVyIHN1Ym1pdGluZyBhIGZlYXR1cmUgcmVxdWVzdCA8YSBocmVmPSJodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL2ZlYXR1cmVfcmVxdWVzdC9saXN0LzE0NjMiIHRhcmdldD0iX2JsYW5rIj5oZXJlPC9hPi48L3A+DQogIDxwPlBsZWFzZSBrZWVwIGluIG1pbmQgdGhhdCBkZXZlbG9wZXJzIGRvIGhhdmUgdGhlaXIgZGFpbHkgam9icyB3aGljaCBtZWFucyB0aGF0IGZlYXR1cmUgcmVxdWVzdHMgYXJlIGNvbnNpZGVyZWQgYW5kIGRvbmUgYXMgdGltZSBhbGxvd3MuIElmIHlvdSBuZWVkIGEgZmVhdHVyZSByZWFsbHkgYmFkbHkgY29uc2lkZXIgY29udGFjdGluZyBvbmUgb2YgdGhlIGRldmVsb3BlcnMgZm9yIGEgc3BvbnNvcmVkIGRldmVsb3BtZW50Lg0KICA8L3A+DQoNCjxoMz5TdXBwb3J0PC9oMz4NCjxwPlRoZSBtb2R1bGUgYXV0aG9yIC8gbWFpbnRhaW5lcnMgb3IgcHJvamVjdCBtYW5hZ2VycyBhcmUgaW4gbm8gd2F5IG9ibGlnYXRlZCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoaXMgY29kZSBpbiBhbnkgZmFzaGlvbi4gIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIG51bWJlciBvZiByZXNvdXJjZXMgYXZhaWxhYmxlIHRvIGhlbHAgeW91IHdpdGggaXQ6PC9wPg0KPHVsPg0KPGxpPkEgYnVnIHRyYWNraW5nIGFuZCBmZWF0dXJlIHJlcXVlc3Qgc3lzdGVtIGhhcyBiZWVuIGNyZWF0ZWQgZm9yIHRoaXMgbW9kdWxlIDxhIGhyZWY9Imh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvc21hcnR5ZXh0Ij5oZXJlPC9hPi4gUGxlYXNlIGJlIHZlcmJvc2UgYW5kIGRlc2NyaXB0aXZlIHdoZW4gc3VibWl0dGluZyBidWcgcmVwb3J0cyBhbmQgZmVhdHVyZSByZXF1ZXN0cywgYW5kIGZvciBidWcgcmVwb3J0cyBlbnN1cmUgdGhhdCB5b3UgaGF2ZSBwcm92aWRlZCBzdWZmaWNpZW50IGluZm9ybWF0aW9uIHRvIHJlbGlhYmx5IHJlcHJvZHVjZSB0aGUgaXNzdWUuPC9saT4NCjxsaT5BZGRpdGlvbmFsIGRpc2N1c3Npb24gb2YgdGhpcyBtb2R1bGUgbWF5IGFsc28gYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZyI+Q01TIE1hZGUgU2ltcGxlIEZvcnVtczwvYT4uICBXaGVuIGRlc2NyaWJpbmcgYW4gaXNzdWUgcGxlYXNlIG1ha2UgYW4gZWZmb3J0IHRvIHByb3ZpZGUgYWxsIHJlbGV2YW50IGluZm9ybWF0aW9uLCBhIHRob3JvdWdoIGRlc2NyaXB0aW9uIG9mIHlvdXIgaXNzdWUsIGFuZCBzdGVwcyB0byByZXByb2R1Y2UgaXQgb3IgeW91ciBkaXNjdXNzaW9uIG1heSBiZSBpZ25vcmVkLjwvbGk+DQo8L3VsPg0KDQoNCjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPg0Ke2lmICRzbWFydHkubm93fGRhdGVfZm9ybWF0OiIlWSIgPT0gJzIwMjAnfXskY3IgPSAnMjAyMCd9e2Vsc2V9eyRjciA9ICIyMDIwIC0geyRzbWFydHkubm93fGRhdGVfZm9ybWF0OiclWSd9In17L2lmfQ0KPHA+Q29weXJpZ2h0ICZjb3B5OyB7JGNyfSwgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24gPGEgaHJlZj0ibWFpbHRvOmluZm9AY21zbWFkZXNpbXBsZS5vcmciPiZsdDtpbmZvQGNtc21hZGVzaW1wbGUub3JnJmd0OzwvYT4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4NCjxwPkNvcHlyaWdodCAmY29weTsgMjAwOCwgUm9iZXJ0IENhbXBiZWxsICZsdDtjYWxndXkxMDAwJmd0Oy4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPg0KPGhyPg0KPHA+PHN0cm9uZz5TbWFydHlFeHQ8L3N0cm9uZz4gaXMgZnJlZSBzb2Z0d2FyZTs8YnIgLz4geW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIDxzdHJvbmc+R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2U8L3N0cm9uZz4gYXMgcHVibGlzaGVkIGJ5IHRoZSA8c3Ryb25nPkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjwvc3Ryb25nPjs8YnIgLz4gZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi48L3A+DQo8cD48c3Ryb25nPlNtYXJ0eUV4dDwvc3Ryb25nPiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgPHN0cm9uZz5XSVRIT1VUIEFOWSBXQVJSQU5UWTwvc3Ryb25nPjs8YnIgLz4gd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIDxzdHJvbmc+TUVSQ0hBTlRBQklMSVRZPC9zdHJvbmc+IG9yIDxzdHJvbmc+RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0U8L3N0cm9uZz4uPC9wPg0KPHA+U2VlIHRoZUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuPC9wPg0KIDxwPllvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIDxzdHJvbmc+R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2U8L3N0cm9uZz4gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07PGJyIC8+IGlmIG5vdCwgd3JpdGUgdG8gdGhlIDxzdHJvbmc+RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQTwvc3Ryb25nPiBvciA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5yZWFkIGl0IG9ubGluZTwvYT4uPC9wPg0KPHA+PHN0cm9uZz5Zb3UgbXVzdCBhZ3JlZSB0byB0aGlzIGxpY2Vuc2UgYmVmb3JlIHVzaW5nIDxzdHJvbmc+U21hcnR5RXh0PC9zdHJvbmc+Ljwvc3Ryb25nPjwvcD4NCjxocj4NCjxoND5DdXJyZW50IE1haW50YWluZXJzPC9oND4NCjx1bD4NCiAgPGxpIGNsYXNzPSJwX2JvdHRvbV8xNSI+PHN0cm9uZz5GZXJuYW5kbyBNb3JnYWRvIChKbyBNb3JnKTwvc3Ryb25nPjwvbGk+DQo8L3VsPg0KDQo8aDQ+UGFzdCBNYWludGFpbmVyczwvaDQ+DQo8dWw+DQogIDxsaT48c3Ryb25nPlJvYmVydCBDYW1wYmVsbCAoY2FsZ3V5MTAwMCk8L3N0cm9uZz4gPGJyIC8+d3d3LmNhbGd1eTEwMDAuY29tPC9saT4NCjwvdWw+DQoNCjxoND5Lbm93biBDb250cmlidXRvcnM8L2g0Pg0KPHVsPg0KICA8bGk+PHN0cm9uZz5Sb2JlcnQgQ2FtcGJlbGwgKGNhbGd1eTEwMDApPC9zdHJvbmc+PGJyIC8+d3d3LmNhbGd1eTEwMDAuY29tPC9saT4NCjwvdWw+DQoNCnsqDQpUT0RPOiBuZWVkIGFuIHVwZGF0ZWQgbGlzdCBvZiBzcG9uc29ycyA6fCAoSk0pDQo8aDQ+S25vd24gU3BvbnNvcnM8L2g0Pg0KPHVsPg0KICA8bGk+PHN0cm9uZz5NYXR0IEhvcm5zYnkgKERJR0kzKTwvc3Ryb25nPjxiciAvPnd3dy5tYXR0aG9ybnNieS5jYTwvbGk+DQogIDxsaT48c3Ryb25nPkdyZWdvcnkgUHJvc3NlciAoZ2VlcGVycyk8L3N0cm9uZz48YnIgLz53d3cuc3RpY2t5d2lja2V0ZGVzaWducy5jb208L2xpPg0KPC91bD4NCip9]]></data>
	</file>
	<file>
	  <filename>/templates/help_class_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgyPlNtYXJ0eSBVc2FibGUgQ2xhc3M8L2gyPg0KPHA+V2hlbiB0aGlzIG1vZHVsZSBpcyBpbnN0YWxsZWQsIGEgbmV3IHNtYXJ0eSBjbGFzcyBuYW1lZCBzbXggaXMgYXV0b21hdGljYWxseSBhdmFpbGFibGUgdG8geW91ciBwYWdlIHRlbXBsYXRlcyBhbmQgdmFyaW91cyBtb2R1bGUgdGVtcGxhdGVzLiBUaGlzIHNtYXJ0eSBjbGFzcyBoYXMgbnVtZXJvdXMgZnVuY3Rpb25zIHRoYXQgeW91IGNhbiBjYWxsIGF0IGFueSB0aW1lLjwvcD4NCjxoMz5BdmFpbGFibGUgRnVuY3Rpb25zOjwvaDM+DQo8dWwgY2xhc3M9ImFjY29yZGlvbi1saXN0Ij4NCiAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4NCiAgICA8aDMgY2xhc3M9ImFsIj4mIzEyMztzbXg6OnNlbGZfdXJsKCl9IDxzcGFuIGNsYXNzPSJzbWFsbCI+UmV0dXJuIHRoZSBjdXJyZW50IFVSTDwvc3Bhbj4NCiAgICA8L2gzPg0KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+DQogICAgICA8cD4NCiAgICAgICAgPHN0cm9uZz5zbXg6OnNlbGZfdXJsPC9zdHJvbmc+KCkNCiAgICAgIDwvcD4NCiAgICAgIDxwPlJldHVybnMgdGhlIGN1cnJlbnQgVVJMPC9wPg0KICAgIDwvZGl2Pg0KICA8L2xpPg0KICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPg0KICAgIDxoMyBjbGFzcz0iYWwiPiYjMTIzO3NteDo6YW5jaG9yX3VybCguLi4pfSA8c3BhbiBjbGFzcz0ic21hbGwiPlVSTCB0byBhbiBhbmNob3Igb24gdGhlIHNhbWUgcGFnZTwvc3Bhbj4NCiAgICA8L2gzPg0KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+DQogICAgICA8cD4NCiAgICAgICAgPHN0cm9uZz5zbXg6OmFuY2hvcl91cmw8L3N0cm9uZz4oJG5hbWUpDQogICAgICA8L3A+DQogICAgICA8cD5HZW5lcmF0ZSB0aGUgYWJzb2x1dGUgVVJMIHRvIGFuIGFuY2hvciB0aGF0IGlzIG9uIHRoZSBzYW1lIHBhZ2UuPC9wPg0KICAgICAgPHA+QXJndW1lbnRzOjwvcD4NCiAgICAgIDx1bD4NCiAgICAgICAgPGxpPiRuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGFuY2hvciB0byBsaW5rIHRvLjwvbGk+DQogICAgICA8L3VsPg0KICAgICAgPHA+RXhhbXBsZTo8L3A+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiZsdDthIGhyZWY9IiYjMTIzO3NteDo6YW5jaG9yX3VybCgnYm90dG9tJyl9IiZndDtHbyB0byB0aGUgYm90dG9tJmx0Oy9hJmd0OyZsdDthIG5hbWU9ImJvdHRvbSImZ3Q7VGhlIGJvdHRvbSZsdDthJmd0OzwvcHJlPg0KICAgIDwvZGl2Pg0KICA8L2xpPg0KICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPg0KICAgIDxoMyBjbGFzcz0iYWwiPiYjMTIzO3NteDo6c214Ojptb2R1bGVfaW5zdGFsbGVkKC4uLil9IDxzcGFuIGNsYXNzPSJzbWFsbCI+VGVzdCBpZiBhIG1vZHVsZSBpcyBpbnN0YWxsZWQ8L3NwYW4+DQogICAgPC9oMz4NCiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPg0KICAgICAgPHA+DQogICAgICAgIDxzdHJvbmc+c214Ojptb2R1bGVfaW5zdGFsbGVkPC9zdHJvbmc+KCRtb2R1bGVuYW1lKQ0KICAgICAgPC9wPg0KICAgICAgPHA+VGVzdCBpZiBhIHBhcnRpY3VsYXIgbW9kdWxlIGlzIGluc3RhbGxlZC48L3A+DQogICAgICA8cD5Bcmd1bWVudHM6PC9wPg0KICAgICAgPHVsPg0KICAgICAgICA8bGk+JG1vZHVsZW5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRvIGNoZWNrPC9saT4NCiAgICAgIDwvdWw+DQogICAgICA8cD5FeGFtcGxlOjwvcD4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjM7aWYgc214Ojptb2R1bGVfaW5zdGFsbGVkKCdNQU1TJyl9Rm91bmQgTUFNUyYjMTIzOy9pZn08L3ByZT4NCiAgICA8L2Rpdj4NCiAgPC9saT4NCiAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4NCiAgICA8aDMgY2xhc3M9ImFsIj4mIzEyMztzbXg6Om1vZHVsZV92ZXJzaW9uKC4uLil9IDxzcGFuIGNsYXNzPSJzbWFsbCI+UmV0dXJuIHRoZSB2ZXJzaW9uIG9mIGEgbW9kdWxlPC9zcGFuPg0KICAgIDwvaDM+DQogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4NCiAgICAgIDxwPg0KICAgICAgICA8c3Ryb25nPnNteDo6bW9kdWxlX3ZlcnNpb248L3N0cm9uZz4oJG1vZHVsZW5hbWUpZQ0KICAgICAgPC9wPg0KICAgICAgPHA+UmV0dXJuIHRoZSB2ZXJzaW9uIG51bWJlciBvZiBhIHNwZWNpZmljIGluc3RhbGxlZCBtb2R1bGUuPC9wPg0KICAgICAgPHA+QXJndW1lbnRzOjwvcD4NCiAgICAgIDx1bD4NCiAgICAgICAgPGxpPiRtb2R1bGVuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0byBjaGVjazwvbGk+DQogICAgICA8L3VsPg0KICAgICAgPHA+RXhhbXBsZTo8L3A+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiYjMTIzOyR2ZXJzaW9uPXNteDo6bW9kdWxlX3ZlcnNpb24oJ01BTVMnKX1XZSBoYXZlIFZlcnNpb24gJiMxMjM7JGZldV92ZXJzaW9ufSBvZiBNQU1TPC9wcmU+DQogICAgPC9kaXY+DQogIDwvbGk+DQogIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+DQogICAgPGgzIGNsYXNzPSJhbCI+JiMxMjM7c214OjpnZXRfcGFyZW50X2FsaWFzKC4uLil9IDxzcGFuIGNsYXNzPSJzbWFsbCI+UmV0dXJucyB0aGUgYWxpYXMgb2YgcGFnZSdzIHBhcmVudDwvc3Bhbj4NCiAgICA8L2gzPg0KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+DQogICAgICA8cD4NCiAgICAgICAgPHN0cm9uZz5zbXg6OmdldF9wYXJlbnRfYWxpYXM8L3N0cm9uZz4oWyRhbGlhc10pLg0KICAgICAgPC9wPg0KICAgICAgPHA+UmV0dXJucyB0aGUgYWxpYXMgb2YgdGhlIHNwZWNpZmllZCBwYWdlJ3MgcGFyZW50LiBSZXR1cm5zIGFuIGVtcHR5IHN0cmluZyBpZiB0aGVyZSBpcyBubyBwYXJlbnQuPC9wPg0KICAgICAgPHA+QXJndW1lbnRzOjwvcD4NCiAgICAgIDx1bD4NCiAgICAgICAgPGxpPlskYWxpYXNdIC0gKG9wdGlvbmFsKSBUaGUgcGFnZSBhbGlhcyB0byBmaW5kIHRoZSBwYXJlbnQgb2YuIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIGN1cnJlbnQgcGFnZSBpcyB1c2VkLjwvbGk+DQogICAgICA8L3VsPg0KICAgICAgPHA+RXhhbXBsZTo8L3A+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPlRoZSBwYXJlbnQgcGFnZSBhbGlhcyBpcyAmIzEyMztzbXg6OmdldF9wYXJlbnRfYWxpYXMoKX08L3ByZT4NCiAgICA8L2Rpdj4NCiAgPC9saT4NCiAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4NCiAgICA8aDMgY2xhc3M9ImFsIj4mIzEyMztzbXg6OmlzX2NoaWxkX29mKC4uLil9IDxzcGFuIGNsYXNzPSJzbWFsbCI+VGVzdHMgd2hldGhlciBpcyBhIGNoaWxkIG9mIHRoZSBzcGVjaWZpZWQgcGFyZW50IGFsaWFzPC9zcGFuPg0KICAgIDwvaDM+DQogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4NCiAgICAgIDxwPg0KICAgICAgICA8c3Ryb25nPnNteDo6aXNfY2hpbGRfb2Y8L3N0cm9uZz4oJHRlc3RfcGFyZW50LCR0ZXN0X2NoaWxkKQ0KICAgICAgPC9wPg0KICAgICAgPHA+VGVzdHMgd2hldGhlciB0aGUgc3BlY2lmaWVkIGNoaWxkIGFsaWFzIG9yIGFuY2VzdG9yIGlzIGEgY2hpbGQgb2YgdGhlIHNwZWNpZmllZCBwYXJlbnQgYWxpYXMuIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gdGVzdCB0aGUgcm9vdCBhbGlhcyBvciBhbnkgcGFyZW50IHBhZ2UuIEl0IGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgb24gc2l0ZXMgd2l0aCBtdWx0aXBsZSBsZXZlbHMgb2Ygb3JnYW5pemF0aW9uLjwvcD4NCiAgICAgIDxwPkFyZ3VtZW50czo8L3A+DQogICAgICA8dWw+DQogICAgICAgIDxsaT4kdGVzdF9wYXJlbnQgLSBzdHJpbmcgVGhlIHBhcmVudCBwYWdlIGFsaWFzIHRvIHRlc3QgYWdhaW5zdC48L2xpPg0KICAgICAgICA8bGk+JHRlc3RfY2hpbGQgLSBzdHJpbmcgVGhlIGNoaWxkIHBhZ2UgYWxpYXMgdG8gdGVzdCBhZ2FpbnN0LjwvbGk+DQogICAgICA8L3VsPg0KICAgICAgPHA+RXhhbXBsZTo8L3A+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiYjMTIzO2lmIHNteDo6aXNfY2hpbGRfb2YoJ2hvbWUnLCRwYWdlX2FsaWFzKX0gVGhpcyBpcyBhIGNoaWxkIG9mIHRoZSBob21lIHBhZ2UgJiMxMjM7L2lmfTwvcHJlPg0KICAgIDwvZGl2Pg0KICA8L2xpPg0KICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPg0KICAgIDxoMyBjbGFzcz0iYWwiPiYjMTIzO3NteDo6Z2V0X3Jvb3RfYWxpYXMoLi4uKX0gPHNwYW4gY2xhc3M9InNtYWxsIj5SZXR1cm5zIHRoZSBhbGlhcyBvZiBhIHBhZ2UncyByb290IHBhcmVudDwvc3Bhbj4NCiAgICA8L2gzPg0KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+DQogICAgICA8c3Ryb25nPnNteDo6Z2V0X3Jvb3RfYWxpYXM8L3N0cm9uZz4oWyRhbGlhc10pIDxwPlJldHVybnMgdGhlIGFsaWFzIG9mIHRoZSBzcGVjaWZpZWQgcGFnZSdzIHJvb3QgcGFyZW50LiBSZXR1cm5zIGFuIGVtcHR5IHN0cmluZyBpZiB0aGVyZSBpcyBubyByb290IHBhcmVudC48L3A+DQogICAgICA8cD5Bcmd1bWVudHM6PC9wPg0KICAgICAgPHVsPg0KICAgICAgICA8bGk+WyRhbGlhc10gLSAob3B0aW9uYWwpIFRoZSBwYWdlIGFsaWFzIHRvIGZpbmQgdGhlIHJvb3QgcGFyZW50IG9mLiBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSBjdXJyZW50IHBhZ2UgaXMgdXNlZC48L2xpPg0KICAgICAgPC91bD4NCiAgICAgIDxwPkV4YW1wbGU6PC9wPg0KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj5UaGUgcm9vdCBwYXJlbnQgcGFnZSBhbGlhcyBpcyAmIzEyMztzbXg6OmdldF9yb290X2FsaWFzKCl9PC9wcmU+DQogICAgPC9kaXY+DQogIDwvbGk+DQogIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+DQogICAgPGgzIGNsYXNzPSJhbCI+JiMxMjM7c214OjpnZXRfcGFnZV90aXRsZSguLi4pfSA8c3BhbiBjbGFzcz0ic21hbGwiPlJldHVybnMgdGhlIHRpdGxlIG9mIGEgcGFnZTwvc3Bhbj4NCiAgICA8L2gzPg0KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+DQogICAgICA8cD4NCiAgICAgICAgPHN0cm9uZz5zbXg6OmdldF9wYWdlX3RpdGxlPC9zdHJvbmc+KFskYWxpYXNdKS4NCiAgICAgIDwvcD4NCiAgICAgIDxwPlJldHVybnMgdGhlIHRpdGxlIG9mIHRoZSBzcGVjaWZpZWQgcGFnZS48L3A+DQogICAgICA8cD5Bcmd1bWVudHM6PC9wPg0KICAgICAgPHVsPg0KICAgICAgICA8bGk+WyRhbGlhc10gLSAob3B0aW9uYWwpIFRoZSBwYWdlIGFsaWFzIHRvIGZpbmQgdGhlIHRpdGxlIG9mLiBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSBjdXJyZW50IHBhZ2UgaXMgdXNlZC48L2xpPg0KICAgICAgPC91bD4NCiAgICAgIDxwPkV4YW1wbGU6PC9wPg0KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj5UaGUgdGl0bGUgb2YgdGhlIGN1cnJlbnQgcGFnZSBpcyAmIzEyMztzbXg6OmdldF9wYWdlX3RpdGxlKCl9PC9wcmU+DQogIDwvbGk+DQogIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+DQogICAgPGgzIGNsYXNzPSJhbCI+JiMxMjM7c214OjpnZXRfcGFnZV9tZW51dGV4dCguLi4pfSA8c3BhbiBjbGFzcz0ic21hbGwiPlJldHVybnMgdGhlIG1lbnUgdGV4dCBvZiBhIHBhZ2U8L3NwYW4+DQogICAgPC9oMz4NCiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPg0KICAgICAgPHA+DQogICAgICAgIDxzdHJvbmc+c214OjpnZXRfcGFnZV9tZW51dGV4dDwvc3Ryb25nPihbJGFsaWFzXSkuDQogICAgICA8L3A+DQogICAgICA8cD5SZXR1cm5zIHRoZSBtZW51dGV4dCBvZiB0aGUgc3BlY2lmaWVkIHBhZ2UuPC9wPg0KICAgICAgPHA+QXJndW1lbnRzOjwvcD4NCiAgICAgIDx1bD4NCiAgICAgICAgPGxpPlskYWxpYXNdIC0gKG9wdGlvbmFsKSBUaGUgcGFnZSBhbGlhcyB0byBmaW5kIHRoZSB0aXRsZSBvZi4gSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgY3VycmVudCBwYWdlIGlzIHVzZWQuPC9saT4NCiAgICAgIDwvdWw+DQogICAgICA8cD5FeGFtcGxlOjwvcD4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+VGhlIG1lbnV0ZXh0IG9mIHRoZSBjdXJyZW50IHBhZ2UgaXMgJiMxMjM7c214OjpnZXRfcGFnZV9tZW51dGV4dCgpfTwvcHJlPg0KICAgIDwvZGl2Pg0KICA8L2xpPg0KICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPg0KICAgIDxoMyBjbGFzcz0iYWwiPiYjMTIzO3NteDo6Z2V0X3BhZ2VfdHlwZSguLi4pfSA8c3BhbiBjbGFzcz0ic21hbGwiPlJldHVybnMgdGhlIGNvbnRlbnQgdHlwZSBieSBhbGlhczwvc3Bhbj4NCiAgICA8L2gzPg0KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+DQogICAgICA8cD4NCiAgICAgICAgPHN0cm9uZz5zbXg6OmdldF9wYWdlX3R5cGU8L3N0cm9uZz4oWyRhbGlhc10pLg0KICAgICAgPC9wPg0KICAgICAgPHA+UmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgY29udGVudCB0eXBlIG9mIHRoZSBzcGVjaWZpZWQgY29udGVudCBvYmplY3QgYnkgYWxpYXM8L3A+DQogICAgICA8cD5Bcmd1bWVudHM6PC9wPg0KICAgICAgPHVsPg0KICAgICAgICA8bGk+WyRhbGlhc10gLSAob3B0aW9uYWwpIFRoZSBwYWdlIGFsaWFzIHRvIGZpbmQgdGhlIHR5cGUgb2YuIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIGN1cnJlbnQgcGFnZSBpcyB1c2VkLjwvbGk+DQogICAgICA8L3VsPg0KICAgICAgPHA+RXhhbXBsZTo8L3A+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPlRoZSB0eXBlIG9mIHRoZSBjdXJyZW50IHBhZ2UgaXMgJiMxMjM7c214OjpnZXRfcGFnZV90eXBlKCl9PC9wcmU+DQogICAgPC9kaXY+DQogIDwvbGk+DQogIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+DQogICAgPGgzIGNsYXNzPSJhbCI+JiMxMjM7c214OjpoYXNfY2hpbGRyZW4oLi4uKX0gPHNwYW4gY2xhc3M9InNtYWxsIj5UZXN0IGlmIGEgcGFnZSBoYXMgY2hpbGRyZW48L3NwYW4+DQogICAgPC9oMz4NCiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPg0KICAgICAgPHA+DQogICAgICAgIDxzdHJvbmc+c214OjpoYXNfY2hpbGRyZW48L3N0cm9uZz4oWyRhbGlhc10pLg0KICAgICAgPC9wPg0KICAgICAgPHA+VGVzdCBpZiB0aGUgc3BlY2lmaWVkIHBhZ2UgaGFzIGNoaWxkcmVuLjwvcD4NCiAgICAgIDxwPkFyZ3VtZW50czo8L3A+DQogICAgICA8dWw+DQogICAgICAgIDxsaT5bJGFsaWFzXSAtIChvcHRpb25hbCkgVGhlIHBhZ2UgYWxpYXMgdG8gdGVzdC4gSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgY3VycmVudCBwYWdlIGlzIHVzZWQuPC9saT4NCiAgICAgIDwvdWw+DQogICAgICA8cD5FeGFtcGxlOjwvcD4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjM7JGhhc19jaGlsZHJlbj1zbXg6Omhhc19jaGlsZHJlbigpfSYjMTIzO2lmICRoYXNfY2hpbGRyZW59VGhlIGN1cnJlbnQgcGFnZSBoYXMgY2hpbGRyZW4mIzEyMztlbHNlfVRoZSBjdXJyZW50IHBhZ2UgaGFzIG5vIGNoaWxkcmVuJiMxMjM7L2lmfTwvcHJlPg0KICAgIDwvZGl2Pg0KICA8L2xpPg0KICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPg0KICAgIDxoMyBjbGFzcz0iYWwiPiYjMTIzO3NteDo6Z2V0X2NoaWxkcmVuKC4uLil9IDxzcGFuIGNsYXNzPSJzbWFsbCI+R2V0IGluZm9ybWF0aW9uIGFib3V0IGEgcGFnZSdzIGNoaWxkcmVuPC9zcGFuPg0KICAgIDwvaDM+DQogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4NCiAgICAgIDxwPg0KICAgICAgICA8c3Ryb25nPnNteDo6Z2V0X2NoaWxkcmVuPC9zdHJvbmc+KFskYWxpYXNdWywgJHNob3dpbmFjdGl2ZV0pLg0KICAgICAgPC9wPg0KICAgICAgPHA+UmV0dXJuIGFuIGFycmF5IGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgYSBwYWdlJ3MgY2hpbGRyZW4gaWYgYW55IGV4aXN0LjwvcD4NCiAgICAgIDxwPkFyZ3VtZW50czo8L3A+DQogICAgICA8dWw+DQogICAgICAgIDxsaT5bJGFsaWFzXSAtIChvcHRpb25hbCkgVGhlIHBhZ2UgYWxpYXMgdG8gdGVzdC4gSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgY3VycmVudCBwYWdlIGlzIHVzZWQuPC9saT4NCiAgICAgICAgPGxpPlskc2hvd2luYWN0aXZlXSAtIChvcHRpb25hbCkgV2V0aGVyIGluYWN0aXZlIHBhZ2VzIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0IChkZWZhdWx0cyB0byBmYWxzZSkuPC9saT4NCiAgICAgIDwvdWw+DQogICAgICA8cD5GaWVsZHM6PC9wPg0KICAgICAgPHVsPg0KICAgICAgICA8bGk+YWxpYXMgLSB0aGUgcGFnZSBhbGlhcyBvZiB0aGUgY2hpbGQ8L2xpPg0KICAgICAgICA8bGk+aWQgLSB0aGUgcGFnZSBpZCBvZiB0aGUgY2hpbGQ8L2xpPg0KICAgICAgICA8bGk+dGl0bGUgLSB0aGUgdGl0bGUgcGFnZSBvZiB0aGUgY2hpbGQgcGFnZS48L2xpPg0KICAgICAgICA8bGk+bWVudXRleHQgLSB0aGUgbWVudSB0ZXh0IG9mIHRoZSBjaGlsZDwvbGk+DQogICAgICAgIDxsaT5zaG93X2luX21lbnUgLSB3aGV0aGVyIHRoaXMgY2hpbGQgcGFnZSBpcyB2aXNpYmxlIGluIG1lbnVzLjwvbGk+DQogICAgICAgIDxsaT50eXBlIC0gVGhlIHR5cGUgb2YgY2hpbGQgY29udGVudCBvYmplY3QuPC9saT4NCiAgICAgIDwvdWw+DQogICAgICA8cD5FeGFtcGxlOjwvcD4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+DQogICYjMTIzOyRjaGlsZHJlbj1zbXg6OmdldF9jaGlsZHJlbigpfQ0KICAmIzEyMztpZiBjb3VudCgkY2hpbGRyZW4pfQ0KICAgICYjMTIzO2ZvcmVhY2ggZnJvbT0kY2hpbGRyZW4gaXRlbT0nY2hpbGQnfQ0KICAgICAgJiMxMjM7aWYgJGNoaWxkLnNob3dfaW5fbWVudX0NCiAgICAgICAgQ2hpbGQ6ICBpZCA9ICYjMTIzOyRjaGlsZC5pZH0gYWxpYXMgPSAmIzEyMzskY2hpbGQuYWxpYXN9Jmx0O2JyLyZndDsNCiAgICAgICYjMTIzOy9pZn0NCiAgICAmIzEyMzsvZm9yZWFjaH0NCiAgJiMxMjM7L2lmfTwvcHJlPg0KICAgIDwvZGl2Pg0KICA8L2xpPg0KICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPg0KICAgIDxoMyBjbGFzcz0iYWwiPiYjMTIzO3NteDo6Z2V0X3BhZ2VfY29udGVudCguLi4pfSA8c3BhbiBjbGFzcz0ic21hbGwiPlJldHVybnMgdGhlIHRleHQgb2YgYSBjb250ZW50IGJsb2NrIG9mIGFub3RoZXIgcGFnZTwvc3Bhbj4NCiAgICA8L2gzPg0KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+DQogICAgICA8cD4NCiAgICAgICAgPHN0cm9uZz5zbXg6OmdldF9wYWdlX2NvbnRlbnQ8L3N0cm9uZz4oJGFsaWFzWywkYmxvY2tdKS4NCiAgICAgIDwvcD4NCiAgICAgIDxwPlJldHVybnMgdGhlIHRleHQgb2YgYSBzcGVjaWZpYyBjb250ZW50IGJsb2NrIG9mIGFub3RoZXIgcGFnZS48L3A+DQogICAgICA8cD5Bcmd1bWVudHM6PC9wPg0KICAgICAgPHVsPg0KICAgICAgICA8bGk+JGFsaWFzIC0gVGhlIHBhZ2UgYWxpYXMgdG8gZXh0cmFjdCBjb250ZW50IGZyb20uPC9saT4NCiAgICAgICAgPGxpPlskYmxvY2tdIC0gKG9wdGlvbmFsKSBUaGUgbmFtZSBvZiB0aGUgY29udGVudCBibG9jayBpbiB0aGUgc3BlY2lmaWVkIHBhZ2UuIElmIHRoaXMgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCB0aGUgdmFsdWUgb2YgdGhlIGRlZmF1bHQgY29udGVudCBibG9jayA8ZW0+KGNvbnRlbnRfZW4pPC9lbT4gaXMgYXNzdW1lZC4gPC9saT4NCiAgICAgIDwvdWw+DQogICAgICA8cD5FeGFtcGxlOjwvcD4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+VGhlICdzZWNvbmQnIGJsb2NrIG9mIHRoZSAnYWJvdXQnIHBhZ2UgaXMgJiMxMjM7JGZvbz1zbXg6OmdldF9wYWdlX2NvbnRlbnQoJ2Fib3V0Jywnc2Vjb25kJyl9JiMxMjM7ZXZhbCB2YXI9JGZvb308L3ByZT4NCiAgICA8L2Rpdj4NCiAgPC9saT4NCiAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4NCiAgICA8aDMgY2xhc3M9ImFsIj4mIzEyMztzbXg6OmdldF9zaWJsaW5nKC4uLil9IDxzcGFuIGNsYXNzPSJzbWFsbCI+UmV0dXJucyB0aGUgYWxpYXMgb2YgdGhlIG5leHQgb3IgcHJldmlvdXMgc2libGluZzwvc3Bhbj4NCiAgICA8L2gzPg0KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+DQogICAgICA8cD4NCiAgICAgICAgPHN0cm9uZz5zbXg6OmdldF9zaWJsaW5nPC9zdHJvbmc+KCRkaXJlY3Rpb24sJGFsaWFzKS4NCiAgICAgIDwvcD4NCiAgICAgIDxwPlJldHVybnMgdGhlIGFsaWFzIG9mIHRoZSBuZXh0IG9yIHByZXZpb3VzIHNpYmxpbmcgdG8gdGhlIHNwZWNpZmllZCBwYWdlLiBvciBmYWxzZS48L3A+DQogICAgICA8cD5Bcmd1bWVudHM6PC9wPg0KICAgICAgPHVsPg0KICAgICAgICA8bGk+JGRpcmVjdGlvbiAtIHRoZSBkaXJlY3Rpb24gdG8gbG9vayBpbi4gcG9zc2libGUgdmFsdWVzIGFyZSBwcmV2LHByZXZpb3VzLC0xLG5leHQsMTwvbGk+DQogICAgICA8L3VsPg0KICAgICAgPHA+RXhhbXBsZTo8L3A+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPkxpbmsgdG8gcHJldmlvdXMgc2libGluZzogJiMxMjM7JHByZXZfc2libGluZz1zbXg6OmdldF9zaWJsaW5nKCZxdW90O3ByZXYmcXVvdCl9JiMxMjM7aWYgIWVtcHR5KCRwcmV2X3NpYmxpbmcpfSYjMTIzO2Ntc19zZWxmbGluayBwYWdlPSZxdW90OyRwcmV2X3NpYmxpbmcmcXVvdDsgdGV4dD0mcXVvdDtQcmV2aW91cyZxdW90O30mIzEyMzsvaWZ9PC9wcmU+DQogICAgPC9kaXY+DQogIDwvbGk+DQogIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+DQogICAgPGgzIGNsYXNzPSJhbCI+JiMxMjM7c214OjpnZXRfcGFyYWxsZWxfcGFnZSguLi4pfSA8c3BhbiBjbGFzcz0ic21hbGwiPkdldCB0aGUgYWxpYXMgb2YgYSBwYXJhbGxlbCBwYWdlIGluIHRoZSBwYWdlIHN0cnVjdHVyZTwvc3Bhbj4NCiAgICA8L2gzPg0KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+DQogICAgICA8cD4NCiAgICAgICAgPHN0cm9uZz5zbXg6OmdldF9wYXJhbGxlbF9wYWdlPC9zdHJvbmc+KCRuZXdfcm9vdFssJGN1cnJlbnRfcGFnZSA9IG51bGxdKS4NCiAgICAgIDwvcD4NCiAgICAgIDxwPkdldCB0aGUgYWxpYXMgb2YgYSBwYXJhbGxlbCBwYWdlIGluIHRoZSBwYWdlIHN0cnVjdHVyZSBnaXZlbiBhIGRpZmZlcmVudCByb290IGFsaWFzLjwvcD4NCiAgICAgIDxwPkluIGEgbXVsdGlsYW5ndWFnZSBzaXRlIHdoZXJlIHRoZSByb290IGxldmVscyByZXByZXNlbnQgZGlmZmVyZW50IGxhbmd1YWdlcywgaXQgbWF5IGJlIHVzZWZ1bCB0byByZXRyaWV2ZSB0aGUgYWxpYXMgdG8gYW4gZXF1aXZhbGVudCBwYWdlIGluIGEgZGlmZmVyZW50IGxhbmd1YWdlLiBpLmUuOiBpZiB0aGUgdXNlciBpcyBjdXJyZW50bHkgYnJvd3NpbmcgdGhlIGZyZW5jaCBwYWdlIGFuZCB3aXNoZXMgdG8gc2VlIHRoZSBzYW1lIHBhZ2UgaW4gZW5nbGlzaCAoaWYgaXQgZXhpc3RzKS48L3A+DQogICAgICA8cD5UaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFsaWFzIG9mIHRoZSBzcGVjaWZpZWQgcGFnZSB1bmRlciB0aGUgbmV3IHJvb3QuIElmIGl0IGV4aXN0cy4gSWYgbm90aGluZyBpcyBmb3VuZCwgbnVsbCBpcyByZXR1cm5lZC48L3A+DQogICAgICA8cD5Bcmd1bWVudHM6PC9wPg0KICAgICAgPHVsPg0KICAgICAgICA8bGk+bmV3IHJvb3QgLSBUaGUgYWxpYXMgb2YgdGhlIG5ldyByb290IHBhcmVudC4gTm90ZSwgaWYgYSB0b3AgbGV2ZWwgcGFnZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgYWxpYXMgcHJvdmlkZWQgaXMgdXNlZCB0byBmaW5kIHRoZSB0b3AgbGV2ZWwgcGFnZSAoc2VlIGdldF9yb290X2FsaWFzKS48L2xpPg0KICAgICAgICA8bGk+Y3VycmVudF9wYWdlIC0gKG9wdGlvbmFsKSBUaGUgcGFnZSBhbGlhcyB0byBmaW5kIHRoZSBwZWVyIG9mLiBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSBjdXJyZW50IHBhZ2UgaXMgdXNlZC48L2xpPg0KICAgICAgPC91bD4NCiAgICAgIDxwPkV4YW1wbGU6PC9wPg0KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj5GaW5kIHRoZSBlcXVpdmFsZW50IGZyZW5jaCBwYWdlIGZvciB0aGlzIHBhZ2U6ICYjMTIzOyR0bXA9c214OjpnZXRfcGFyYWxsZWxfcGFnZSgnRlInKX0mIzEyMztpZiAkdG1wICE9ICcnICYmICR0bXAgIT0gJHBhZ2VfYWxpYXN9JiMxMjM7Y21zX3NlbGZsaW5rIHBhZ2U9JHRtcH0mIzEyMzsvaWZ9PC9wcmU+DQogICAgPC9kaXY+DQogIDwvbGk+DQogIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+DQogICAgPGgzIGNsYXNzPSJhbCI+JiMxMjM7c214OjpnZXRfcGFyYWxsZWxfdXJsKC4uLil9IDxzcGFuIGNsYXNzPSJzbWFsbCI+R2V0IHRoZSBVUkwgb2YgYSBwYXJhbGxlbCBwYWdlIGluIHRoZSBwYWdlIHN0cnVjdHVyZTwvc3Bhbj4NCiAgICA8L2gzPg0KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+DQogICAgICA8cD4NCiAgICAgICAgPHN0cm9uZz5zbXg6OmdldF9wYXJhbGxlbF91cmw8L3N0cm9uZz4oJG5ld19yb290WywkY3VycmVudF9wYWdlID0gbnVsbF0pLg0KICAgICAgPC9wPg0KICAgICAgPHA+R2V0IHRoZSBVUkwgb2YgYSBwYXJhbGxlbCBwYWdlIGluIHRoZSBwYWdlIHN0cmljdHVyZSBnaXZlbiBhIGRpZmZlcmVudCByb290IGFsaWFzLjwvcD4NCiAgICAgIDxwPkluIGEgbXVsdGlsYW5ndWFnZSBzaXRlIHdoZXJlIHRoZSByb290IGxldmVscyByZXByZXNlbnQgZGlmZmVyZW50IGxhbmd1YWdlcywgaXQgbWF5IGJlIHVzZWZ1bCB0byByZXRyaWV2ZSB0aGUgVVJMIHRvIGFuIGVxdWl2YWxlbnQgcGFnZSBpbiBhIGRpZmZlcmVudCBsYW5ndWFnZS4gaS5lLjogaWYgdGhlIHVzZXIgaXMgY3VycmVudGx5IGJyb3dzaW5nIHRoZSBmcmVuY2ggcGFnZSBhbmQgd2lzaGVzIHRvIHNlZSB0aGUgc2FtZSBwYWdlIGluIGVuZ2xpc2ggKGlmIGl0IGV4aXN0cykuPC9wPg0KICAgICAgPHA+VGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBhbGlhcyBvZiB0aGUgc3BlY2lmaWVkIHBhZ2UgdW5kZXIgdGhlIG5ldyByb290LiBJZiBpdCBleGlzdHMuIElmIG5vdGhpbmcgaXMgZm91bmQsIG51bGwgaXMgcmV0dXJuZWQuPC9wPg0KICAgICAgPHA+QXJndW1lbnRzOjwvcD4NCiAgICAgIDx1bD4NCiAgICAgICAgPGxpPm5ldyByb290IC0gVGhlIGFsaWFzIG9mIHRoZSBuZXcgcm9vdCBwYXJlbnQuIE5vdGUsIGlmIGEgdG9wIGxldmVsIHBhZ2UgaXMgbm90IHNwZWNpZmllZCwgdGhlIGFsaWFzIHByb3ZpZGVkIGlzIHVzZWQgdG8gZmluZCB0aGUgdG9wIGxldmVsIHBhZ2UgKHNlZSBnZXRfcm9vdF9hbGlhcykuPC9saT4NCiAgICAgICAgPGxpPmN1cnJlbnRfcGFnZSAtIChvcHRpb25hbCkgVGhlIHBhZ2UgYWxpYXMgdG8gZmluZCB0aGUgcGVlciBvZi4gSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgY3VycmVudCBwYWdlIGlzIHVzZWQuPC9saT4NCiAgICAgIDwvdWw+DQogICAgICA8cD5FeGFtcGxlOjwvcD4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+RmluZCB0aGUgZXF1aXZhbGVudCBmcmVuY2ggcGFnZSBmb3IgdGhpcyBwYWdlOiAmIzEyMzskdXJsPXNteDo6Z2V0X3BhcmFsbGVsX3BhZ2UoJ0ZSJyl9DQogICAgJiMxMjM7aWYgJHVybH0mbHQ7YSBocmVmPSImIzEyMzskdXJsfSI+RlImbHQ7L2E+JiMxMjM7L2lmfTwvcHJlPg0KICAgIDwvZGl2Pg0KICA8L2xpPg0KICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPg0KICAgIDxoMyBjbGFzcz0iYWwiPiYjMTIzO3NteDo6Z2V0X2ZpbGVfbGlzdGluZyguLi4pfSA8c3BhbiBjbGFzcz0ic21hbGwiPlJldHVybiBhIGxpc3Qgb2YgZmlsZXMgaW4gYSBkaXJlY3Rvcnk8L3NwYW4+DQogICAgPC9oMz4NCiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPg0KICAgICAgPHA+DQogICAgICAgIDxzdHJvbmc+c214OjpnZXRfZmlsZV9saXN0aW5nPC9zdHJvbmc+KCRkaXJbLCRleGNsdWRlcHJlZml4XSkuDQogICAgICA8L3A+DQogICAgICA8cD5SZXR1cm4gYSBsaXN0IG9mIGZpbGVzIGluIGEgZGlyZWN0b3J5LjwvcD4NCiAgICAgIDxwPkFyZ3VtZW50czo8L3A+DQogICAgICA8dWw+DQogICAgICAgIDxsaT4kZGlyIC0gVGhlIGRpcmVjdG9yeSB0byBzY2FuIChzaG91bGQgYmUgYW4gYWJzb2x1dGUgZGlyZWN0b3J5KTwvbGk+DQogICAgICAgIDxsaT5bJGV4Y2x1ZGVwcmVmaXhdIC0gKG9wdGlvbmFsKSBFeGNsdWRlIGZpbGVzIHN0cnRpbmcgd2l0aCB0aGUgc3BlY2lmaWVkIHByZWZpeC48L2xpPg0KICAgICAgPC91bD4NCiAgICA8L2Rpdj4NCiAgPC9saT4NCjwvdWw+]]></data>
	</file>
	<file>
	  <filename>/templates/help_general_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgyPldoYXQgRG9lcyBUaGlzIERvPzwvaDI+DQo8cD5UaGlzIG1vZHVsZSBwcm92aWRlcyBzb21lIHNpbXBsZSBzbWFydHkgdXRpbGl0aWVzIGZvciB1c2UgaW4gYXBwbGljYXRpb25zIG9yIGZvciBjdXN0b21pemluZyB0aGUgYmVoYXZpb3VyIG9mIHlvdXIgQ01TIE1hZGUgU2ltcGxlIHBhZ2VzLjwvcD4NCjxwPlRoZSBjdXJyZW50IHBsdWdpbnMgbGlzdDouPC9wPg0KPHVsIGNsYXNzPSJoaWdobGlnaHQtbGlzdCI+DQogIDxsaT48c3Ryb25nPiYjMTIzO21vZF9hY3Rpb25fdXJsfTwvc3Ryb25nPiAtIENyZWF0ZSBhbiB1cmwgdG8gYSBtb2R1bGUgYWN0aW9uOzwvbGk+DQogIDxsaT48c3Ryb25nPiYjMTIzO21vZF9hY3Rpb25fbGlua308L3N0cm9uZz4gLSBDcmVhdGUgYSBsaW5rIHRvIGEgbW9kdWxlIGFjdGlvbjs8L2xpPg0KICA8bGk+PHN0cm9uZz4mIzEyMzt4dF9hbmNob3JfbGlua308L3N0cm9uZz4gLSBHZW5lcmF0ZSBhIGxpbmsgdG8gYW4gYW5jaG9yIG9uIHRoZSBzYW1lIHBhZ2U7PC9saT4NCiAgPGxpPjxzdHJvbmc+JiMxMjM7c2Vzc19wdXR9PC9zdHJvbmc+IC0gU3RvcmUgZGF0YSBpbiB0aGUgdXNlciBzZXNzaW9uOzwvbGk+DQogIDxsaT48c3Ryb25nPiYjMTIzO3Nlc3NfZXJhc2V9PC9zdHJvbmc+IC0gRXJhc2UgZGF0YSBmcm9tIHRoZSB1c2VyIHNlc3Npb247PC9saT4NCiAgPGxpPjxzdHJvbmc+JiMxMjM7eHRfcmVwZWF0fTwvc3Ryb25nPiAtIFJlcGVhdGluZyB0ZXh0OzwvbGk+DQogIDxsaT48c3Ryb25nPiYjMTIzO2NvbnRlbnRfZmV0Y2h9PC9zdHJvbmc+IC0gRmV0Y2ggYW5kIHJldXNlIENNU01TIGNvbnRlbnQgPHNwYW4gc3R5bGU9ImNvbG9yOmdyZWVuIj48c3Ryb25nPihuZXcpPC9zdHJvbmc+IDwvc3Bhbj47PC9saT4NCiAgPGxpPjxzdHJvbmc+JiMxMjM7ZmlsZXNfbGlzdH08L3N0cm9uZz4gLSBMaXN0IGZpbGVzIGFuZCBmb2xkZXJzIDxzcGFuIHN0eWxlPSJjb2xvcjpncmVlbiI+PHN0cm9uZz4obmV3KTwvc3Ryb25nPiA8L3NwYW4+OzwvbGk+DQogIDxsaT48c3Ryb25nPiYjMTIzO2NvbnRlbnRfcHJvdGVjdH08L3N0cm9uZz4gLSBQcm90ZWN0IGNvbnRlbnQgd2l0aCBhIHBhc3N3b3JkIDxzcGFuIHN0eWxlPSJjb2xvcjpncmVlbiI+PHN0cm9uZz4obmV3KTwvc3Ryb25nPiA8L3NwYW4+OzwvbGk+DQo8L3VsPg0KPHA+QWRkaXRpb25hbGx5LCB0aGUgbW9kdWxlIHJlZ2lzdGVycyBhIGNsYXNzLCA8c3Ryb25nPiYjMTIzO3NteH08L3N0cm9uZz4gd2l0aCB0aGUgZm9sbG93aW5nIG1ldGhvZHM6PC9wPg0KPHVsIGNsYXNzPSJoaWdobGlnaHQtbGlzdCI+DQogIDxsaT48c3Ryb25nPiYjMTIzO3NteDo6c2VsZl91cmwoKX08L3N0cm9uZz4gLSBSZXR1cm4gdGhlIGN1cnJlbnQgVVJMOzwvbGk+DQogIDxsaT48c3Ryb25nPiYjMTIzO3NteDo6YW5jaG9yX3VybCguLi4pfTwvc3Ryb25nPiAtIFVSTCB0byBhbiBhbmNob3Igb24gdGhlIHNhbWUgcGFnZTs8L2xpPg0KICA8bGk+PHN0cm9uZz4mIzEyMztzbXg6OnNteDo6bW9kdWxlX2luc3RhbGxlZCguLi4pfTwvc3Ryb25nPiAtIFRlc3QgaWYgYSBtb2R1bGUgaXMgaW5zdGFsbGVkOzwvbGk+DQogIDxsaT48c3Ryb25nPiYjMTIzO3NteDo6bW9kdWxlX3ZlcnNpb24oLi4uKX08L3N0cm9uZz4gLSBSZXR1cm4gdGhlIHZlcnNpb24gb2YgYSBtb2R1bGU7PC9saT4NCiAgPGxpPjxzdHJvbmc+JiMxMjM7c214OjpnZXRfcGFyZW50X2FsaWFzKC4uLil9PC9zdHJvbmc+IC0gUmV0dXJucyB0aGUgYWxpYXMgb2YgcGFnZSdzIHBhcmVudDs8L2xpPg0KICA8bGk+PHN0cm9uZz4mIzEyMztzbXg6OmlzX2NoaWxkX29mKC4uLil9PC9zdHJvbmc+IC0gVGVzdHMgd2hldGhlciBpcyBhIGNoaWxkIG9mIHRoZSBzcGVjaWZpZWQgcGFyZW50IGFsaWFzOzwvbGk+DQogIDxsaT48c3Ryb25nPiYjMTIzO3NteDo6Z2V0X3Jvb3RfYWxpYXMoLi4uKX08L3N0cm9uZz4gLSBSZXR1cm5zIHRoZSBhbGlhcyBvZiBhIHBhZ2UncyByb290IHBhcmVudDs8L2xpPg0KICA8bGk+PHN0cm9uZz4mIzEyMztzbXg6OmdldF9wYWdlX3RpdGxlKC4uLil9PC9zdHJvbmc+IC0gUmV0dXJucyB0aGUgdGl0bGUgb2YgYSBwYWdlOzwvbGk+DQogIDxsaT48c3Ryb25nPiYjMTIzO3NteDo6Z2V0X3BhZ2VfbWVudXRleHQoLi4uKX08L3N0cm9uZz4gLSBSZXR1cm5zIHRoZSBtZW51IHRleHQgb2YgYSBwYWdlOzwvbGk+DQogIDxsaT48c3Ryb25nPiYjMTIzO3NteDo6Z2V0X3BhZ2VfdHlwZSguLi4pfTwvc3Ryb25nPiAtIFJldHVybnMgdGhlIGNvbnRlbnQgdHlwZSBieSBhbGlhczs8L2xpPg0KICA8bGk+PHN0cm9uZz4mIzEyMztzbXg6Omhhc19jaGlsZHJlbiguLi4pfTwvc3Ryb25nPiAtIFRlc3QgaWYgYSBwYWdlIGhhcyBjaGlsZHJlbjs8L2xpPg0KICA8bGk+PHN0cm9uZz4mIzEyMztzbXg6OmdldF9jaGlsZHJlbiguLi4pfTwvc3Ryb25nPiAtIEdldCBpbmZvcm1hdGlvbiBhYm91dCBhIHBhZ2UncyBjaGlsZHJlbjs8L2xpPg0KICA8bGk+PHN0cm9uZz4mIzEyMztzbXg6OmdldF9wYWdlX2NvbnRlbnQoLi4uKX08L3N0cm9uZz4gLSBSZXR1cm5zIHRoZSB0ZXh0IG9mIGEgY29udGVudCBibG9jayBvZiBhbm90aGVyIHBhZ2U7PC9saT4NCiAgPGxpPjxzdHJvbmc+JiMxMjM7c214OjpnZXRfc2libGluZyguLi4pfTwvc3Ryb25nPiAtIFJldHVybnMgdGhlIGFsaWFzIG9mIHRoZSBuZXh0IG9yIHByZXZpb3VzIHNpYmxpbmc7PC9saT4NCiAgPGxpPjxzdHJvbmc+JiMxMjM7c214OjpnZXRfcGFyYWxsZWxfcGFnZSguLi4pfTwvc3Ryb25nPiAtIEdldCB0aGUgYWxpYXMgb2YgYSBwYXJhbGxlbCBwYWdlIGluIHRoZSBwYWdlIHN0cnVjdHVyZTs8L2xpPg0KICA8bGk+PHN0cm9uZz4mIzEyMztzbXg6OmdldF9wYXJhbGxlbF91cmwoLi4uKX08L3N0cm9uZz4gLSBHZXQgdGhlIFVSTCBvZiBhIHBhcmFsbGVsIHBhZ2UgaW4gdGhlIHBhZ2Ugc3RydWN0dXJlOzwvbGk+DQogIDxsaT48c3Ryb25nPiYjMTIzO3NteDo6Z2V0X2ZpbGVfbGlzdGluZyguLi4pfTwvc3Ryb25nPiAtIFJldHVybiBhIGxpc3Qgb2YgZmlsZXMgaW4gYSBkaXJlY3RvcnkgOzwvbGk+DQo8L3VsPg0KDQo8cD5QbGVhc2UgcmVmZXIgdG8gdGhlIHRhYnMgZGVzY3JpYmluZyBlYWNoIHBsdWdpbiBhbmQgZnVuY3Rpb24gZm9yIGhlbHAgb24gaG93IHRvIHVzZSBpdC48L3A+]]></data>
	</file>
	<file>
	  <filename>/templates/help_plugins_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgyPlNtYXJ0eSBwbHVnaW5zPC9oMj4NCjxwPlRoaXMgaXMgYSBsaXN0IG9mIHRoZSBwbHVnaW5zIGF2YWlsYWJsZSBmcm9tIHRoaXMgbW9kdWxlIHdpdGggaW5zdHJ1Y3Rpb25zIGFuZCBzYW1wbGUgdXNlcy48L3A+DQoNCnsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfQ0KPHVsIGNsYXNzPSJhY2NvcmRpb24tbGlzdCI+DQogIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+DQogICAgPGgzIGNsYXNzPSJhbCI+JiMxMjM7bW9kX2FjdGlvbl91cmx9IDxzcGFuIGNsYXNzPSJzbWFsbCI+Q3JlYXRlIGFuIHVybCB0byBhIG1vZHVsZSBhY3Rpb248L3NwYW4+PC9oMz4NCiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPg0KICAgICAgPHA+QSBzbWFydHkgcGx1Z2luIHRoYXQgY2FuIGNyZWF0ZSBhbiB1cmwgdG8gYSBtb2R1bGUgYWN0aW9uLjwvcD4NCiAgICAgIDxwPlBhcmFtZXRlcnM6PC9wPg0KICAgICAgPHVsPg0KICAgICAgICA8bGk+PHN0cm9uZz5tb2R1bGU8L3N0cm9uZz4gLSBUaGUgbW9kdWxlIHRvIGNyZWF0ZSBhIGxpbmsgdG8uIFRoaXMgYXJndW1lbnQgaXMgb3B0aW9uYWwsIHRoZSBzeXN0ZW0gd2lsbCBhdHRlbXB0IHRvIGRldGVjdCB0aGUgY3VycmVudCBtb2R1bGUgbmFtZSAoaWYgd2l0aGluIGEgbW9kdWxlIGFjdGlvbik8L2xpPg0KICAgICAgICA8bGk+PHN0cm9uZz5hY3Rpb248L3N0cm9uZz4gKGRlZmF1bHQpIC0gVGhlIGFjdGlvbiB0byBjYWxsIHdpdGhpbiB0aGUgbW9kdWxlPC9saT4NCiAgICAgICAgPGxpPjxzdHJvbmc+cGFnZTwvc3Ryb25nPiAtIFNwZWNpZnkgdGhlIGRlc3RpbmF0aW9uIHBhZ2U8L2xpPg0KICAgICAgICA8bGk+PHN0cm9uZz5qc2ZyaWVuZGx5PC9zdHJvbmc+IHwgPHN0cm9uZz5mb3Jqczwvc3Ryb25nPiAtIFR1cm5zIG9uIHRoZSB1cmxvbmx5IHBhcmFtZXRlciwgYW5kIGluZGljYXRlcyB0aGF0IGphdmFzY3JpcHQgZnJpZW5kbHkgdXJscyBhcmUgb3V0cHV0LjwvbGk+DQogICAgICAgIDxsaT48c3Ryb25nPmZvcmFqYXg8L3N0cm9uZz4gLSBUdXJucyBvbiB0aGUganNmcmllbmRseSBwYXJhbWV0ZXIgKGFuZCB0aGUgdXJsb25seSBwYXJhbWV0ZXIpLCBhbmQgYWxzbyBhcHBlbmRzIHNob3d0ZW1wbGF0ZT1mYWxzZSB0byB0aGUgVVJMIG91dHB1dCBmb3IgQUpBWCByZXF1ZXN0czwvbGk+DQogICAgICAgIDxsaT48c3Ryb25nPmFzc2lnbjwvc3Ryb25nPiAtIEFzc2lnbiB0aGUgb3V0cHV0IG9mIHRoZSBwbHVnaW4gdG8gdGhlIG5hbWVkIHNtYXJ0eSB2YXJpYWJsZS48L2xpPg0KICAgICAgPC91bD4NCg0KICAgICAgPHA+QW55IG90aGVyIHBhcmFtZXRlcnMgdG8gdGhlIHNtYXJ0eSBwbHVnaW4gd2lsbCBiZSBhZGRlZCB0byB0aGUgVVJMIGdlbmVyYXRlZC48L3A+DQogICAgICA8cD5FeGFtcGxlOjwvcD4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjM7bW9kX2FjdGlvbl91cmwgbW9kdWxlPSdOZXdzJyBhY3Rpb249J2Zlc3VibWl0JyBhc3NpZ249J2Zvbyd9PC9wcmU+DQogICAgPC9kaXY+DQogIDwvbGk+DQogICAgeyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip9DQogIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+DQogICAgPGgzIGNsYXNzPSJhbCI+JiMxMjM7bW9kX2FjdGlvbl9saW5rfSA8c3BhbiBjbGFzcz0ic21hbGwiPkNyZWF0ZSBhIGxpbmsgdG8gYSBtb2R1bGUgYWN0aW9uPC9zcGFuPjwvaDM+DQogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4NCiAgICAgIDxwPkEgc21hcnR5IHBsdWdpbiB0aGF0IGNhbiBjcmVhdGUgYSBsaW5rIHRvIGEgbW9kdWxlIGFjdGlvbi48L3A+DQogICAgICA8cD5QYXJhbWV0ZXJzOjwvcD4NCiAgICAgIDx1bD4NCiAgICAgICAgPGxpPjxzdHJvbmc+bW9kdWxlPC9zdHJvbmc+IC0gVGhlIG1vZHVsZSB0byBjcmVhdGUgYSBsaW5rIHRvLiBUaGlzIGFyZ3VtZW50IGlzIG9wdGlvbmFsLCB0aGUgc3lzdGVtIHdpbGwgYXR0ZW1wdCB0byBkZXRlY3QgdGhlIGN1cnJlbnQgbW9kdWxlIG5hbWUgKGlmIHdpdGhpbiBhIG1vZHVsZSBhY3Rpb24pPC9saT4NCiAgICAgICAgPGxpPjxzdHJvbmc+YWN0aW9uPC9zdHJvbmc+IChkZWZhdWx0KSAtIFRoZSBhY3Rpb24gdG8gY2FsbCB3aXRoaW4gdGhlIG1vZHVsZTwvbGk+DQogICAgICAgIDxsaT48c3Ryb25nPnRleHQ8L3N0cm9uZz4gLSBUaGUgdGV4dCB0byBwdXQgaW4gdGhlIGxpbms8L2xpPg0KICAgICAgICA8bGk+PHN0cm9uZz5wYWdlPC9zdHJvbmc+IC0gU3BlY2lmeSB0aGUgZGVzdGluYXRpb24gcGFnZTwvbGk+DQogICAgICAgIDxsaT48c3Ryb25nPnVybG9ubHk8L3N0cm9uZz4gLSBJbnN0ZWFkIG9mIGdlbmVyYXRpbmcgYSBsaW5rLCBnZW5lcmF0ZSBqdXN0IHRoZSB1cmw8L2xpPg0KICAgICAgICA8bGk+PHN0cm9uZz5qc2ZyaWVuZGx5PC9zdHJvbmc+IHwgPHN0cm9uZz5mb3Jqczwvc3Ryb25nPiAtIFR1cm5zIG9uIHRoZSB1cmxvbmx5IHBhcmFtZXRlciwgYW5kIGluZGljYXRlcyB0aGF0IGphdmFzY3JpcHQgZnJpZW5kbHkgdXJscyBhcmUgb3V0cHV0LjwvbGk+DQogICAgICAgIDxsaT48c3Ryb25nPmZvcmFqYXg8L3N0cm9uZz4gLSBUdXJucyBvbiB0aGUganNmcmllbmRseSBwYXJhbWV0ZXIgKGFuZCB0aGUgdXJsb25seSBwYXJhbWV0ZXIpLCBhbmQgYWxzbyBhcHBlbmRzIHNob3d0ZW1wbGF0ZT1mYWxzZSB0byB0aGUgVVJMIG91dHB1dCBmb3IgQUpBWCByZXF1ZXN0czwvbGk+DQogICAgICAgIDxsaT48c3Ryb25nPmNvbmZtZXNzYWdlPC9zdHJvbmc+IC0gQSBjb25maXJtYXRpb24gbWVzc2FnZSB0byBkaXNwbGF5IHdoZW4gdGhlIGxpbmsgaXMgY2xpY2tlZC48L2xpPg0KICAgICAgICA8bGk+PHN0cm9uZz5pbWFnZTwvc3Ryb25nPiAtIEFuIGltYWdlIHRvIHVzZSBvbiB0aGUgbGluazwvbGk+DQogICAgICAgIDxsaT48c3Ryb25nPmltYWdlb25seTwvc3Ryb25nPiAtIElmIGFuIGltYWdlIGlzIHNwZWNpZmllZCwgY3JlYXRlIGEgbGluayBvbmx5IGNvbnNpc3Rpbmcgb2YgdGhlIGltYWdlLiBUaGUgdGV4dCB3aWxsIGJlIHVzZWQgZm9yIHRoZSB0aXRsZSBhdHRyaWJ1dGU8L2xpPg0KICAgICAgICA8bGk+PHN0cm9uZz5hc3NpZ248L3N0cm9uZz4gLSBBc3NpZ24gdGhlIG91dHB1dCBvZiB0aGUgcGx1Z2luIHRvIHRoZSBuYW1lZCBzbWFydHkgdmFyaWFibGUuPC9saT4NCiAgICAgIDwvdWw+DQoNCiAgICAgIDxwPkFueSBvdGhlciBhcmd1bWVudHMgdG8gdGhlIHNtYXJ0eSBwbHVnaW4gd2lsbCBiZSBhZGRlZCB0byB0aGUgVVJMIGdlbmVyYXRlZC48L3A+DQogICAgICA8cD5FeGFtcGxlOjwvcD4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjM7bW9kX2FjdGlvbl9saW5rIG1vZHVsZT0nTmV3cycgYWN0aW9uPSdmZXN1Ym1pdCcgdGV4dD0nU3VibWl0IGEgTmV3IE5ld3MgQXJ0aWNsZSd9PC9wcmU+DQogICAgPC9kaXY+DQogIDwvbGk+DQogICAgeyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip9DQogIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+DQogICAgPGgzIGNsYXNzPSJhbCI+JiMxMjM7eHRfYW5jaG9yX2xpbmt9IDxzcGFuIGNsYXNzPSJzbWFsbCI+R2VuZXJhdGUgYSBsaW5rIHRvIGFuIGFuY2hvciBvbiB0aGUgc2FtZSBwYWdlPC9zcGFuPjwvaDM+DQogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4NCiAgICAgIDxwPkEgc21hcnR5IHBsdWdpbiB0byBnZW5lcmF0ZSBhIGxpbmsgdG8gYW4gYW5jaG9yIHRoYXQgaXMgb24gdGhlIHNhbWUgcGFnZS48L3A+DQogICAgICA8cD5QYXJhbWV0ZXJzOjwvcD4NCiAgICAgIDx1bD4NCiAgICAgICAgPGxpPjxzdHJvbmc+bjwvc3Ryb25nPiB8IDxzdHJvbmc+bmFtZTwvc3Ryb25nPiAtIDxlbT4oc3RyaW5nKTwvZW0+IFRoZSBuYW1lIG9mIHRoZSBhbmNob3IgdG8gbGluayB0by48L2xpPg0KICAgICAgICA8bGk+PHN0cm9uZz50ZXh0PC9zdHJvbmc+IC0gPGVtPihzdHJpbmc+PC9lbT4gVGhlIHRleHQgcG9ydGlvbiBvZiB0aGUgbGluay4gSWYgbm90IHNwZWNpZmllZCwgdGhlIGFuY2hvciBuYW1lIHdpbGwgYmUgdXNlZC48L2xpPg0KICAgICAgICA8bGk+PHN0cm9uZz51cmxvbmx5PC9zdHJvbmc+IC0gPGVtPihib29sKTwvZW0+IE9wdGlvbmFsbHkgb25seSBnZW5lcmF0ZSB0aGUgVVJMIHBvcnRpb24gb2YgdGhlIGxpbmsuIHNlZSBzbXg6OmFuY2hvcl91cmwoKTwvbGk+DQogICAgICAgIDxsaT48c3Ryb25nPmFzc2lnbjwvc3Ryb25nPiAtIDxlbT4oc3RyaW5nPjwvZW0+IE9wdGlvbmFsbHkgYXNzaWduIHRoZSBvdXRwdXQgb2YgdGhlIHBsdWdpbiB0byB0aGUgbmFtZWQgc21hcnR5IHZhcmlhYmxlLjwvbGk+DQogICAgICA8L3VsPg0KDQogICAgICA8cD5Bbnkgb3RoZXIgYXJndW1lbnRzIHRvIHRoZSBzbWFydHkgcGx1Z2luIHdpbGwgYmUgYWRkZWQgYXMgYXR0cmlidXRlcyB0byB0aGUgbGluayBnZW5lcmF0ZWQuPC9wPg0KICAgICAgPHA+RXhhbXBsZTo8L3A+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiYjMTIzO3h0X2FuY2hvcl9saW5rIG5hbWU9Ym90dG9tIGNsYXNzPSJhbmNob3JfY2xhc3MiIGlkPSJhbmNob3JfaWQifTwvcHJlPg0KICAgIDwvZGl2Pg0KICA8L2xpPg0KICAgIHsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfQ0KICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPg0KICAgIDxoMyBjbGFzcz0iYWwiPiYjMTIzO3Nlc3NfcHV0fSA8c3BhbiBjbGFzcz0ic21hbGwiPlN0b3JlIGRhdGEgaW4gdGhlIHVzZXIgc2Vzc2lvbjwvc3Bhbj48L2gzPg0KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+DQogICAgICA8cD5BIHNtYXJ0eSBwbHVnaW4gdGhhdCBjYW4gc3RvcmUgZGF0YSBpbiB0aGUgdXNlciBzZXNzaW9uLiBUaGlzIGRhdGEgaXMgdGhlbiBhY2Nlc3NpYmxlIHZpYSB0aGUgJHNtYXJ0eS5zZXNzaW9uIGFycmF5IGluIHN1YnNlcXVlbnQgcGFnZXMuPC9wPg0KICAgICAgPHA+UGFyYW1ldGVyczo8L3A+DQogICAgICA8dWw+DQogICAgICAgIDxsaT48c3Ryb25nPnZhcjwvc3Ryb25nPiAtIFRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSB0byBjcmVhdGUgaW4gdGhlIHNlc3Npb24uPC9saT4NCiAgICAgICAgPGxpPjxzdHJvbmc+dmFsdWU8L3N0cm9uZz4gLSBUaGUgZGVzaXJlZCB2YWx1ZSBvZiB0aGUgdmFyaWFibGUuPC9saT4NCiAgICAgIDwvdWw+DQogICAgICA8cD5FeGFtcGxlOjwvcD4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjM7c2Vzc19wdXQgdmFyPSd0ZXN0JyB2YWx1ZT0nYmxhaCd9PC9wcmU+DQogICAgPC9kaXY+DQogIDwvbGk+DQogICAgeyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip9DQogIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+DQogICAgPGgzIGNsYXNzPSJhbCI+JiMxMjM7c2Vzc19lcmFzZX0gPHNwYW4gY2xhc3M9InNtYWxsIj5FcmFzZSBkYXRhIGZyb20gdGhlIHVzZXIgc2Vzc2lvbjwvc3Bhbj48L2gzPg0KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+DQogICAgICA8cD5BIHNtYXJ0eSBwbHVnaW4gdGhhdCBjYW4gZXJhc2UgZGF0YSBmcm9tIHRoZSB1c2VyIHNlc3Npb24uPC9wPg0KICAgICAgPHA+UGFyYW1ldGVyczo8L3A+DQogICAgICA8dWw+DQogICAgICAgIDxsaT48c3Ryb25nPnZhcjwvc3Ryb25nPiAtIFRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSB0byBlcmFzZSBpbiB0aGUgc2Vzc2lvbi48L2xpPg0KICAgICAgPC91bD4NCiAgICAgIDxwPkV4YW1wbGU6PC9wPg0KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mIzEyMztzZXNzX2VyYXNlIHZhcj0ndGVzdCd9PC9wcmU+DQogICAgPC9kaXY+DQogIDwvbGk+DQogICAgeyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip9DQogIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+DQogICAgPGgzIGNsYXNzPSJhbCI+JiMxMjM7eHRfcmVwZWF0fSA8c3BhbiBjbGFzcz0ic21hbGwiPlJlcGVhdGluZyB0ZXh0PC9zcGFuPjwvaDM+DQogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4NCiAgICAgIDxwPkFub3RoZXIgc21hcnR5IHBsdWdpbiB0aGF0IHdpbGwgYWxsb3cgcmVwZWF0aW5nIHRleHQ8L3A+DQogICAgICA8cD5QYXJhbWV0ZXJzOjwvcD4NCiAgICAgIDx1bD4NCiAgICAgICAgPGxpPjxzdHJvbmc+dGV4dDwvc3Ryb25nPiAtIFRoZSB0ZXh0IHRvIGJlIHJlcGVhdGVkPC9saT4NCiAgICAgICAgPGxpPjxzdHJvbmc+Y291bnQ8L3N0cm9uZz4gLSBUaGUgbnVtYmVyIG9mIHRpbWVzIGl0IHNob3VsZCBiZSByZXBlYXRlZDwvbGk+DQogICAgICAgIDxsaT48c3Ryb25nPmFzc2lnbjwvc3Ryb25nPiAtIEFzc2lnbiB0aGUgb3V0cHV0IHRvIHRoZSBzcGVjaWZpZWQgc21hcnR5IHZhcmlhYmxlPC9saT4NCiAgICAgIDwvdWw+DQoNCiAgICAgIDxwPkV4YW1wbGU6PC9wPg0KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mIzEyMzt4dF9yZXBlYXQgdGV4dD0ndGhpcycgY291bnQ9JzUnfTwvcHJlPg0KICAgIDwvZGl2Pg0KICA8L2xpPg0KICAgIHsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfQ0KICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPg0KICAgIDxoMyBjbGFzcz0iYWwiPiYjMTIzO2NvbnRlbnRfZmV0Y2h9IDxzcGFuIGNsYXNzPSJzbWFsbCI+RmV0Y2ggYW5kIHJldXNlIENNU01TIGNvbnRlbnQgPHNwYW4gc3R5bGU9ImNvbG9yOmdyZWVuIj48c3Ryb25nPihuZXcpPC9zdHJvbmc+PC9zcGFuPjwvc3Bhbj48L2gzPg0KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+DQogICAgICA8cD5BIGZvcmsgb2YgPHN0cm9uZz48ZW0+JiMxMjM7Y29udGVudF9kdW1wfTwvZW0+PC9zdHJvbmc+IGZyb20gTmlscyBIYWFjay4gU3RpbGwgYSB3b3JrIGluIHByb2dyZXNzLCBzbyBrZWVwIGNoZWNraW5nIHRoZXNlIGRvY3MgZm9yIGNoYW5nZXMgaW4gcGFyYW1ldGVycyBhbmQgYmVoYXZpb3VyLjwvcD4NCiAgICAgIDxwPkEgPGVtPidTd2lzcyBBcm15IEtuaWZlJzwvZW0+IGZvciBDTVNNUyBjb250ZW50IGZldGNoaW5nLCBnaXZpbmcgeW91IHRoZSBhYmlsaXR5IHRvIGZldGNoIGNvbnRlbnQgYW5kIGluc2VydCBpdCBpbnRvIGEgc2luZ2xlIHBhZ2UuIEl0IG9mZmVycyBhIHZhcmlldHkgb2YgaW5kZXBlbmRlbnQgcGFyYW1ldGVycyB0aGFuIGNhbiBiZSBjb21iaW5lZCB0byBjYXRlciBmb3IgYSBsb3Qgb2YgeW91ciBzaXRlJ3MgaW50ZXJuYWwgY29udGVudCBkaXN0cmlidXRpb24gbmVlZHMuPC9wPg0KICAgICAgPHA+SnVzdCBhdHRhY2ggc29tZSBwYXJhbWV0ZXJzIGFuZCBsaW1pdC9vcmdhbml6ZSB0aGUgb3V0cHV0IHRvIHlvdXIgZGF0YSByZXF1aXJlbWVudHMuIFRoZSBTbWFydHkgb3V0cHV0IGFsbG93cyB5b3UgdG8gZnJlZWx5IGRlc2lnbiB0aGUgcmVzdWx0cyBpbiB5b3VyIHRlbXBsYXRlIG9yIGNvbnRlbnQgYmxvY2sgKGZyb20gdGhlIHJlZ3VsYXIgZWRpdG9ycyB2aWV3IC0gdGhvdWdoIGl0IGlzIHJlY29tbWVuZGVkIHRvIGRvIGl0IGluIHRoZSB0ZW1wbGF0ZSkuIFdpdGggU21hcnR5LCB5b3UgY2FuIGV2ZW4gY29udHJvbCB0aGUgb3V0cHV0IGJ5IGxpbWl0aW5nIGl0IHRvIHNwZWNpZmljIHZhbHVlcyAoZS5nLiBvbmx5IHVzZXIgJ0pvaG4gRG9lJykgb3IgdXNlIG1vZGlmaWVycyB0byBmdXJ0aGVyIG1hbmlwdWxhdGUgdGhlIGNvbnRlbnQuPC9wPg0KDQogICAgICA8aDQ+UGFyYW1ldGVyczwvaDQ+DQogICAgICA8cD5Gb2xsb3dpbmcgYSBkZXNjcmlwdGlvbiBvZiB0aGUgYXZhaWxhYmxlIHBhcmFtZXRlcnMuPC9wPg0KDQogICAgICA8cD5QYXJhbWV0ZXJzOjwvcD4NCiAgICAgIDx1bD4NCiAgICAgICAgPGxpPjxzdHJvbmc+YmxvY2tfbmFtZTwvc3Ryb25nPiAtIFRoZSBuYW1lIG9mIHRoZSBjb250ZW50IGJsb2NrIHRvIGZldGNoIGZyb20gKGRlZmF1bHQgPHN0cm9uZz5jb250ZW50X2VuPC9zdHJvbmc+KTs8L2xpPg0KICAgICAgICA8bGk+PHN0cm9uZz5zdGFydF9pZDwvc3Ryb25nPiAtIERlZmluZXMgYSBzdGFydGluZyBwb2ludCBmb3IgdGhlIGNvbnRlbnQgZmV0Y2hpbmcgKGRlZmF1bHQgPHN0cm9uZz4tMTwvc3Ryb25nPiBtZWFuaW5nIGFsbCBtYXRjaGluZyBjb250ZW50KTs8L2xpPg0KICAgICAgICA8bGk+PHN0cm9uZz5saW1pdF9zdGFydDwvc3Ryb25nPiAtIFRoZSBmaXJzdCBuIGl0ZW1zIHRvIHNraXAgKGRlZmF1bHQgPHN0cm9uZz4wPC9zdHJvbmc+KTs8L2xpPg0KICAgICAgICA8bGk+PHN0cm9uZz5saW1pdF9jb3VudDwvc3Ryb25nPiAtIE1heGltdW0gbnVtYmVyIG9mIHBhZ2VzIHRvIGZldGNoIChkZWZhdWx0IDxzdHJvbmc+MTAwMDwvc3Ryb25nPik7PC9saT4NCiAgICAgICAgPGxpPjxzdHJvbmc+cGFnZTwvc3Ryb25nPiAtIEdlbmVyYXRlcyBhIHNpbmdsZSBwYWdlIHZpZXcgb3V0IG9mIHRoZSByZXN1bHRzIG9mIHJlc3Qgb2YgdGhlIHBhcmFtZXRlcnMsIGFsbG93aW5nIGZvciBzb21lIGZvcm0gb2YgcGFnaW5hdGlvbiAoZGVmYXVsdCA8c3Ryb25nPjA8L3N0cm9uZz4pOzwvbGk+DQogICAgICAgIDxsaT4NCiAgICAgICAgICA8c3Ryb25nPmFjdGl2ZTwvc3Ryb25nPiAtIGZpbHRlciBieSBwYWdlIHN0YXRlczsgYWNjZXB0ZWQgdmFsdWVzIGFyZToNCiAgICAgICAgICA8dWw+DQogICAgICAgICAgICA8bGk+PHN0cm9uZz5mb3JjZTwvc3Ryb25nPiAtIHNob3cgZXZlcnl0aGluZyByZWdhcmRsZXNzIG9mIHRoZWlyIHN0YXRlOzwvbGk+DQogICAgICAgICAgICA8bGk+PHN0cm9uZz5hY3RpdmU8L3N0cm9uZz4gLSBzaG93IG9ubHkgYWN0aXZlIHBhZ2VzIChkZWZhdWx0KTs8L2xpPg0KICAgICAgICAgICAgPGxpPjxzdHJvbmc+aW5hY3RpdmU8L3N0cm9uZz4gLSBzaG93IG9ubHkgaW5hY3RpdmUgcGFnZXM7PC9saT4NCiAgICAgICAgICA8L3VsPg0KICAgICAgICA8L2xpPg0KICAgICAgICA8bGk+DQogICAgICAgICAgPHN0cm9uZz5zaG93X2luX21lbnU8L3N0cm9uZz4gfCA8c3Ryb25nPnNob3duX2luX21lbnU8L3N0cm9uZz4gLSBmaWx0ZXIgYnkgbWVudSB2aXNpYmlsaXR5OyBhY2NlcHRlZCB2YWx1ZXMgYXJlOg0KICAgICAgICAgIDx1bD4NCiAgICAgICAgICAgIDxsaT48c3Ryb25nPmZvcmNlPC9zdHJvbmc+IC0gc2hvdyBldmVyeXRoaW5nIHJlZ2FyZGxlc3Mgb2YgdGhlaXIgdmlzaWJpbGl0eSBpbiBhIG1lbnU7PC9saT4NCiAgICAgICAgICAgIDxsaT48c3Ryb25nPnNob3c8L3N0cm9uZz4gLSBzaG93IG9ubHkgcGFnZXMgc2V0IHRvIGJlIHZpc2libGUgaW4gYSBtZW51IChkZWZhdWx0KTs8L2xpPg0KICAgICAgICAgICAgPGxpPjxzdHJvbmc+aGlkZGVuPC9zdHJvbmc+IC0gc2hvdyBvbmx5IHBhZ2VzIHNldCBub3QgdG8gYmUgdmlzaWJsZSBpbiBhIG1lbnU7PC9saT4NCiAgICAgICAgICA8L3VsPg0KICAgICAgICA8L2xpPg0KICAgICAgICA8bGk+PHN0cm9uZz5maWx0ZXI8L3N0cm9uZz4gLSBGaWx0ZXIgcmVzdWx0cyBieSB3b3JkcyBvciBwaHJhc2VzIChzZWUgZXh0ZW5kZWQgaGVscCBhbmQgZXhhbXBsZXMgYmVsb3cpOzwvbGk+DQogICAgICAgIDxsaT48c3Ryb25nPnByZWZpeDwvc3Ryb25nPiAtIEZpbHRlciByZXN1bHRzIGJ5IGFsaWFzIHByZWZpeChlcykgKHNlZSBleHRlbmRlZCBoZWxwIGFuZCBleGFtcGxlcyBiZWxvdyk7PC9saT4NCiAgICAgICAgPGxpPg0KICAgICAgICAgIDxzdHJvbmc+cHJlZml4X21vZGU8L3N0cm9uZz4gLSBDaGFuZ2VzIHRoZSA8c3Ryb25nPnByZWZpeDwvc3Ryb25nPiBmaWx0ZXJpbmcgYmVoYXZpb3VyOyBhY2NlcHRlZCB2YWx1ZXMgYXJlOg0KICAgICAgICAgIDx1bD4NCiAgICAgICAgICAgIDxsaT48c3Ryb25nPmZvcmNlPC9zdHJvbmc+IC0gc2hvdyBvbmx5IHBhZ2VzIHdpdGggdGhlIHByZWZpeChlcykgbGlzdGVkOzwvbGk+DQogICAgICAgICAgICA8bGk+PHN0cm9uZz5uZXV0cmFsPC9zdHJvbmc+IC0gaWdub3JlcyBwcmVmaXgoZXMpIChkZWZhdWx0KTs8L2xpPiB7KiBhY3R1YWxseSBkb2VzbnQgbWFrZSBzZW5zZS4uLiAoSk0pICp9DQogICAgICAgICAgICA8bGk+PHN0cm9uZz5oaWRlPC9zdHJvbmc+IC0gc2hvdyBvbmx5IHBhZ2VzIHdpdGhvdXQgdGhlIHByZWZpeChlcykgbGlzdGVkOzwvbGk+DQogICAgICAgICAgPC91bD4NCiAgICAgICAgPC9saT4NCiAgICAgICAgPGxpPg0KICAgICAgICAgIDxzdHJvbmc+ZGVwdGg8L3N0cm9uZz4gLSBGaWx0ZXIgcmVzdWx0cyBieSBoaWVyYXJjaHkgc3RhcnQgcG9pbnQgYW5kIG51bWJlciBvZiBsZXZlbHMuIEl0IHRha2VzIHR3byBpbnRlZ2VyIHZhbHVlcyBzZXBlcmF0ZWQgYnkgY29tbWEgc3VjaCBhcyAnLTEsMycsICctMScgYmVpbmcgdGhlIHN0YXJ0aW5nIHBvaW50LCBpbiB0aGlzIGNhc2UgdGhlIHJvb3QgYW5kICczJyB0aGUgbnVtYmVyIG9mIGxldmVscyAob3INCiAgICAgICAgICBob3cgZGVlcCkgdG8gZmV0Y2ggKHNlZSBleHRlbmRlZCBoZWxwIGFuZCBleGFtcGxlcyBiZWxvdykuIElmIHVzZWQsIGJvdGggdmFsdWVzIGFyZSBtYW5kYXRvcnk7DQogICAgICAgIDwvbGk+DQogICAgICAgIDxsaT48c3Ryb25nPmV4Y2x1ZGU8L3N0cm9uZz4gLSBFeGNsdWRlIGNvbnRlbnQgYnkgaWQsIGFjY2VwdGluZyBjb21tYSBzZXBlcmF0ZWQgbGlzdHMgb2YgaW50ZWdlcnMgaWYgbmVlZGVkOzwvbGk+DQogICAgICAgIDxsaT48c3Ryb25nPnRoaXNfb25seTwvc3Ryb25nPiAtIEZldGNoIGEgcGFydGljdWxhciBjb250ZW50IGZyb20gcGFnZXMgYnkgaWQ7PC9saT4NCiAgICAgICAgPGxpPjxzdHJvbmc+dGhlc2Vfb25seTwvc3Ryb25nPiAtIEZldGNoIGEgcGFydGljdWxhciBzZXQgb2YgY29udGVudCBmcm9tIHBhZ2VzIGJ5IGEgY29tbWEgc2VwZXJhdGVkIGxpc3RzIG9mIGludGVnZXJzIG9mIGlkczs8L2xpPg0KICAgICAgICA8bGk+PHN0cm9uZz5wYXJlbnRzPC9zdHJvbmc+IC0gQSBib29sZWFuIHR5cGUgc2V0dGluZyBkZWZpbmluZyB3aGV0aGVyIHRvIGluY2x1ZGUgYSBsaW1pdGVkIHNldCBvZiBwcm9wZXJ0aWVzIG9mIHRoZSBwYXJlbnRzIG9mIGVhY2ggcmVzdWx0LCBkZWZhdWx0cyB0byBmYWxzZSAoc2VlIGV4dGVuZGVkIGhlbHAgYW5kIGV4YW1wbGVzIGJlbG93KTs8L2xpPg0KICAgICAgICA8bGk+DQogICAgICAgICAgPHN0cm9uZz51c2Vyczwvc3Ryb25nPiAtIEEgYm9vbGVhbiB0eXBlIHNldHRpbmcgZGVmaW5pbmcgd2hldGhlciB0byBleHBhbmQgdXNlciBkYXRhIHJlbGF0ZWQgdG8gdGhlIGNvbnRlbnQgc3VjaCBhcyA8c3Ryb25nPmNyZWF0ZWQgYnk8L3N0cm9uZz4gYW5kIDxzdHJvbmc+bW9kaWZpZWQgYnk8L3N0cm9uZz4gd2hpY2ggaWYgdHJ1ZSB3aWxsIHJldHVybiA8c3Ryb25nPnVzZXJuYW1lPC9zdHJvbmc+LA0KICAgICAgICAgIDxzdHJvbmc+Zmlyc3RuYW1lPC9zdHJvbmc+IGFuZCA8c3Ryb25nPmxhc3RuYW1lPC9zdHJvbmc+IGluIGFkZGl0aW9uIHRvIHRoZSBkZWZhdWx0IChpZiBmYWxzZSkgPHN0cm9uZz51aWQ8L3N0cm9uZz4gKHNlZSBleHRlbmRlZCBoZWxwIGFuZCBleGFtcGxlcyBiZWxvdyk7DQogICAgICAgIDwvbGk+DQogICAgICAgIDxsaT4NCiAgICAgICAgICA8c3Ryb25nPmV4dGVuc2lvbnM8L3N0cm9uZz4gLSBBIGNvbW1hIHNlcGVyYXRlZCBsaXN0IG9mIGNvbnRlbnRfYmxvY2tzIHRvIGRldGVybWluZSBpZiB0aGV5IGV4aXN0IGFuZCBoYXZlIGNvbnRlbnQ7IGl0IHdpbGwgc2hvdyBpbiB0aGUgcmVzdWx0cyBsaXN0IGFzIGFuIGFkZGl0aW9uYWwgcHJvcGVydHkgZm9yIGVhY2ggcmVzdWx0IHdpdGggYSB2YWx1ZSBvZiAnMScgb3IgJzAnIGRlcGVuZGluZyBvbg0KICAgICAgICAgIHdoZXRoZXIgdGhlIGNvbnRlbnQgYmxvY2sgaGFzIGJlZW4gZm91bmQgYW5kIGlzIG5vdCBlbXB0eSAoZGVmYXVsdCA8c3Ryb25nPmZhbHNlPC9zdHJvbmc+KSAoc2VlIGV4dGVuZGVkIGhlbHAgYW5kIGV4YW1wbGVzIGJlbG93KTsNCiAgICAgICAgPC9saT4NCiAgICAgICAgPGxpPjxzdHJvbmc+ZGF0ZWZvcm1hdDwvc3Ryb25nPiAtIEZvcm1hdCB0aGUgZGF0ZSBvdXRwdXQgaW4gYSBQSFAgc3RyZnRpbWUgZm9ybWF0IChkZWZhdWx0IDxzdHJvbmc+JyVBLCAlZSAlQiAlWSc8L3N0cm9uZz4pLiBOb3RlOiBkZXByZWNhdGVkIHBlbmRpbmcgc29tZSBtb3JlIGNoYW5nZXMgdG8gdGhlIENNU01TIGNvcmUgdG8gYmUgUEhQIDguMCsgY29tcGF0aWJsZTs8L2xpPg0KICAgICAgICA8bGk+PHN0cm9uZz5jZGxvY2FsZTwvc3Ryb25nPiAtIFNwZWNpZnkgYSBzcGVjaWZpYyBsb2NhbGUgZm9yIHRoZSBvdXRwdXQgb3RoZXJ3aXNlIHN5c3RlbSBkZWZhdWx0IGlzIHVzZWQ7PC9saT4NCiAgICAgICAgPGxpPjxzdHJvbmc+bG9jYWxlPC9zdHJvbmc+IC0gU3BlY2lmeSBhIHNwZWNpZmljIGxvY2FsZSB1c2VkIGZvciB0aGUgdGltZXN0YW1wIG90aGVyd2lzZSBzeXN0ZW0gZGVmYXVsdCBpcyB1c2VkOzwvbGk+DQogICAgICAgIDxsaT4NCiAgICAgICAgICA8c3Ryb25nPmRvX3NtYXJ0eTwvc3Ryb25nPiAtIENoYW5nZXMgdGhlIFNtYXJ0eSBwYXJzaW5nIGJlaGF2aW91cjsgYWNjZXB0ZWQgdmFsdWVzIGFyZToNCiAgICAgICAgICA8dWw+DQogICAgICAgICAgICA8bGk+PHN0cm9uZz5jb21waWxlPC9zdHJvbmc+IC0gcGFyc2VzIHRoZSBjb250ZW50IHRocm91Z2ggU21hcnR5IGJlZm9yZSBvdXRwdXQuIE5vdGU6IGNhbiBiZSByZWN1cnNpdmUgYW5kIHJlc3VsdCBpbiBlbmRsZXNzIGxvb3BzOzwvbGk+DQogICAgICAgICAgICA8bGk+PHN0cm9uZz5uZXV0cmFsPC9zdHJvbmc+IC0gcGFzc2VzIHRocm91Z2ggd2l0aG91dCBwYXJzaW5nIChkZWZhdWx0KTs8L2xpPg0KICAgICAgICAgICAgPGxpPjxzdHJvbmc+c3RyaXA8L3N0cm9uZz4gLSBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gcmVtb3ZlIGFueXRoaW5nIGJldHdlZW4gJyYjMTIzOycgYW5kICd9JyAoYW5kIHRoYXQgbWVhbnMgPGVtPmFueXRoaW5nPC9lbT4pOzwvbGk+DQogICAgICAgICAgPC91bD4NCiAgICAgICAgICA8cD5Ob3Rlczo8L3A+DQogICAgICAgICAgPHVsPg0KICAgICAgICAgICAgPGxpPnRoZXJlIGlzIGEgcmVhbCBjaGFuY2Ugb2YsIGluYWR2ZXJ0ZW50bHksIGNyZWF0ZSBhbiBlbmRsZXNzIGxvb3Agd2l0aCB0aGUgPHN0cm9uZz5jb21waWxlPC9zdHJvbmc+IG9wdGlvbiByZXN1bHRpbmcgaW4gb3V0IG9mIG1lbW9yeSBlcnJvcnM7PC9saT4NCiAgICAgICAgICAgIDxsaT50byB0cnkgdG8gcHJldmVudCB0aGlzIHRoZSBwbHVnaW4gY2FuIHJlY29nbmlzZSBhIHNpbmdsZSB1c2Ugb2YgdGhlIHRhZyBpbiB0aGUgY29udGVudCBhbiB0aGF0IHNob3VsZCBiZSBzYWZlOzwvbGk+DQogICAgICAgICAgICA8bGk+bXVsdGlwbGUgb2NjdXJyZW5jZXMgb2YgdGhlIHRhZyBvbiB0aGUgc2FtZSBjb250ZW50IGJsb2NrIHVzaW5nIHRoZSA8c3Ryb25nPmNvbXBpbGU8L3N0cm9uZz4gb3B0aW9uIGNhbm5vdCBiZSBzYWZlbHkgZGV0ZWN0ZWQgYW5kIHNob3VsZCBiZSBhdm9pZGVkOzwvbGk+DQogICAgICAgICAgICA8bGk+DQogICAgICAgICAgICAgIDxzdHJvbmc+c3RyaXA8L3N0cm9uZz4gbW9kZSB1c2VzIGEgcmVnZXggdG8gcmVtb3ZlIGFueSBhbmQgYWxsIG9jY3VycmVuY2VzIG9mIHBhdHRlcm5zIHdpdGggYSAnJiMxMjM7JyAuLi4gJ30nIGNvbnN0cnVjdC4gVGhhdCBtZWFucyBvdGhlciBuYXR1cmFsIGxhbmd1YWdlIGNvbnN0cnVjdHMgdGhhdCBmaXQgdGhhdCBwYXR0ZXJuIHdpbGwgYWxzbyBiZSByZW1vdmVkLiBKYXZhU2NyaXB0IGNvbnN0cnVjdHMNCiAgICAgICAgICAgICAgY2FuIGVhc2lseSBiZWNvbWUgY29ycnVwdGVkIHRvbzsNCiAgICAgICAgICAgIDwvbGk+DQogICAgICAgICAgICA8bGk+b25lIHdheSB0byBhdm9pZCB0aGF0IGlzc3VlIHdpdGggbmF0dXJhbCBsYW5ndWFnZSB0ZXh0IGNvbnN0cnVjdHMgaXMgdG8gcmVwbGFjZSAnJiMxMjM7JyBhbmQgJ30nIHdpdGggdGhlaXIgaHRtbCBjb2RlcywgcmVzcGVjdGl2ZWx5OiA8c3Ryb25nPicmYW1wOyMxMjM7Jzwvc3Ryb25nPiBhbmQgPHN0cm9uZz4nJmFtcDsjMTI1Oyc8L3N0cm9uZz4gb3IgZXF1aXZhbGVudDs8L2xpPg0KICAgICAgICAgICAgPGxpPnJlZ2FyZGluZyBKYXZhU2NyaXB0LCB0aGUgYmVzdCBhbHRlcm5hdGl2ZSBpcyB0byBtb3ZlIHRoZSBjb2RlIHNuaXBwZXRzIHVzZWQgdG8gYSBkaWZmZXJlbnQgY29udGVudCBibG9jayBvciB0byB0aGUgbWFpbiB0ZW1wbGF0ZShzKSBpZiBhdCBhbGwgcG9zc2libGU7PC9saT4NCiAgICAgICAgICA8L3VsPg0KICAgICAgICA8L2xpPg0KICAgICAgICA8bGk+DQogICAgICAgICAgPHN0cm9uZz5odG1sPC9zdHJvbmc+IC0gVHJpZXMgdG8gcmVtb3ZlIGFueSBhbmQgYWxsIEhUTUwsIEphdmFTY3JpcHQgYW5kIENTUyBmcm9tIHRoZSByZXN1bHRpbmcgY29udGVudCBibG9jayhzKSBzbyBpdCBjYW4gYmUgcG9zc2libGUgdG8gc2FmZWx5IHRydW5jYXRlIHRoZSB0ZXh0OyBhY2NlcHRlZCB2YWx1ZXMgYXJlOg0KICAgICAgICAgIDx1bD4NCiAgICAgICAgICAgIDxsaT48c3Ryb25nPnN0cmlwPC9zdHJvbmc+IC0gc3RyaXBzIHRoZSByZXRyaWV2ZWQgYmxvY2tzOzwvbGk+DQogICAgICAgICAgICA8bGk+PHN0cm9uZz5uZXV0cmFsPC9zdHJvbmc+IC0gcGFzc2VzIHRocm91Z2ggdGhlIHJldHJpZXZlZCBibG9ja3MgYWZ0ZXIgcHJvY2Vzc2luZyA8c3Ryb25nPmRvX3NtYXJ0eTwvc3Ryb25nPjs8L2xpPg0KICAgICAgICAgIDwvdWw+DQogICAgICAgIDwvbGk+DQogICAgICAgIDxsaT4NCiAgICAgICAgICA8c3Ryb25nPmZpcnN0X3NvcnQ8L3N0cm9uZz4gLSBzb3J0cyB0aGUgY29udGVudCBieSBzcGVjaWZpYyBlbGVtZW50czsgYWNjZXB0ZWQgdmFsdWVzIGFyZToNCiAgICAgICAgICA8dWw+DQogICAgICAgICAgICA8bGk+PHN0cm9uZz5pZDwvc3Ryb25nPiAtIHNvcnRzIGJ5IHBhZ2UgKGNvbnRlbnQpIGlkOzwvbGk+DQogICAgICAgICAgICA8bGk+PHN0cm9uZz50aXRsZTwvc3Ryb25nPiAtIHNvcnRzIGJ5IHBhZ2UgKGNvbnRlbnQpIHRpdGxlOzwvbGk+DQogICAgICAgICAgICA8bGk+PHN0cm9uZz5jcmVhdGVkPC9zdHJvbmc+IC0gc29ydHMgYnkgcGFnZSAoY29udGVudCkgY3JlYXRlZCBkYXRlIChvcmRlciBtYXkgbmVlZCB0byBiZSByZXZlcnNlZCk7PC9saT4NCiAgICAgICAgICAgIDxsaT48c3Ryb25nPm1vZGlmaWVkPC9zdHJvbmc+IC0gc29ydHMgYnkgcGFnZSAoY29udGVudCkgbW9kaWZpZWQgZGF0ZSAob3JkZXIgbWF5IG5lZWQgdG8gYmUgcmV2ZXJzZWQpOzwvbGk+DQogICAgICAgICAgICA8bGk+PHN0cm9uZz5vd25lcjwvc3Ryb25nPiAtIHNvcnRzIGJ5IHBhZ2UgKGNvbnRlbnQpIG93bmVyIGlkOzwvbGk+DQogICAgICAgICAgICA8bGk+PHN0cm9uZz5oaWVyYXJjaHk8L3N0cm9uZz4gLSBzb3J0cyBieSBwYWdlIChjb250ZW50KSBoaWVyYXJjaHk7PC9saT4NCiAgICAgICAgICAgIDxsaT48c3Ryb25nPmlkX2hpZXJhcmNoeTwvc3Ryb25nPiAtIHNvcnRzIGJ5IHBhZ2UgKGNvbnRlbnQpIGhpZXJhcmNoeSBpZDs8L2xpPg0KICAgICAgICAgICAgPGxpPjxzdHJvbmc+bGFzdGVkaXRvcjwvc3Ryb25nPiAtIHNvcnRzIGJ5IHBhZ2UgKGNvbnRlbnQpIGxhc3QgZWRpdG9yIGlkOzwvbGk+DQogICAgICAgICAgICA8bGk+PHN0cm9uZz5hY3RpdmU8L3N0cm9uZz4gLSBzb3J0cyBieSBwYWdlIChjb250ZW50KSBhY3RpdmUgc3RhdGU7PC9saT4NCiAgICAgICAgICAgIDxsaT48c3Ryb25nPnNob3c8L3N0cm9uZz4gLSBzb3J0cyBieSBwYWdlIChjb250ZW50KSBtZW51IHZpc2liaWxpdHk7PC9saT4NCiAgICAgICAgICA8L3VsPg0KICAgICAgICA8L2xpPg0KICAgICAgICA8bGk+PHN0cm9uZz5maXJzdF9zb3J0X29yZGVyPC9zdHJvbmc+IC0gZGV0ZXJtaW5lcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBzb3J0aW5nIGZpbHRlciwgd2hldGhlciBpdCBpcyA8ZW0+J3VwJzwvZW0+IG9yIDxlbT4nZG93bic8L2VtPiAoZGVmYXVsdCA8c3Ryb25nPid1cCc8L3N0cm9uZz4gYXMgaW4gYWxwaGFiZXRpY2FsbHkgQSB0byBCKTs8L2xpPg0KICAgICAgICA8bGk+DQogICAgICAgICAgPHN0cm9uZz5zZWNvbmRfc29ydDwvc3Ryb25nPiAtIHNvcnRzIHRoZSBjb250ZW50IGJ5IHNwZWNpZmljIGVsZW1lbnRzOyBhY2NlcHRlZCB2YWx1ZXMgYXJlOg0KICAgICAgICAgIDx1bD4NCiAgICAgICAgICAgIDxsaT48c3Ryb25nPmlkPC9zdHJvbmc+IC0gc29ydHMgYnkgcGFnZSAoY29udGVudCkgaWQ7PC9saT4NCiAgICAgICAgICAgIDxsaT48c3Ryb25nPnRpdGxlPC9zdHJvbmc+IC0gc29ydHMgYnkgcGFnZSAoY29udGVudCkgdGl0bGU7PC9saT4NCiAgICAgICAgICAgIDxsaT48c3Ryb25nPmNyZWF0ZWQ8L3N0cm9uZz4gLSBzb3J0cyBieSBwYWdlIChjb250ZW50KSBjcmVhdGVkIGRhdGUgKG9yZGVyIG1heSBuZWVkIHRvIGJlIHJldmVyc2VkKTs8L2xpPg0KICAgICAgICAgICAgPGxpPjxzdHJvbmc+bW9kaWZpZWQ8L3N0cm9uZz4gLSBzb3J0cyBieSBwYWdlIChjb250ZW50KSBtb2RpZmllZCBkYXRlIChvcmRlciBtYXkgbmVlZCB0byBiZSByZXZlcnNlZCk7PC9saT4NCiAgICAgICAgICAgIDxsaT48c3Ryb25nPm93bmVyPC9zdHJvbmc+IC0gc29ydHMgYnkgcGFnZSAoY29udGVudCkgb3duZXIgaWQ7PC9saT4NCiAgICAgICAgICAgIDxsaT48c3Ryb25nPmhpZXJhcmNoeTwvc3Ryb25nPiAtIHNvcnRzIGJ5IHBhZ2UgKGNvbnRlbnQpIGhpZXJhcmNoeTs8L2xpPg0KICAgICAgICAgICAgPGxpPjxzdHJvbmc+aWRfaGllcmFyY2h5PC9zdHJvbmc+IC0gc29ydHMgYnkgcGFnZSAoY29udGVudCkgaGllcmFyY2h5IGlkOzwvbGk+DQogICAgICAgICAgICA8bGk+PHN0cm9uZz5sYXN0ZWRpdG9yPC9zdHJvbmc+IC0gc29ydHMgYnkgcGFnZSAoY29udGVudCkgbGFzdCBlZGl0b3IgaWQ7PC9saT4NCiAgICAgICAgICAgIDxsaT48c3Ryb25nPmFjdGl2ZTwvc3Ryb25nPiAtIHNvcnRzIGJ5IHBhZ2UgKGNvbnRlbnQpIGFjdGl2ZSBzdGF0ZTs8L2xpPg0KICAgICAgICAgICAgPGxpPjxzdHJvbmc+c2hvdzwvc3Ryb25nPiAtIHNvcnRzIGJ5IHBhZ2UgKGNvbnRlbnQpIG1lbnUgdmlzaWJpbGl0eTs8L2xpPg0KICAgICAgICAgIDwvdWw+DQogICAgICAgIDwvbGk+DQogICAgICAgIDxsaT48c3Ryb25nPnNlY29uZF9zb3J0X29yZGVyPC9zdHJvbmc+IC0gZGV0ZXJtaW5lcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBzb3J0aW5nIGZpbHRlciwgd2hldGhlciBpdCBpcyA8ZW0+J3VwJzwvZW0+IG9yIDxlbT4nZG93bic8L2VtPiAoZGVmYXVsdCA8c3Ryb25nPid1cCc8L3N0cm9uZz4gYXMgaW4gYWxwaGFiZXRpY2FsbHkgQSB0byBCKTs8L2xpPg0KICAgICAgICA8bGk+PHN0cm9uZz5hc3NpZ248L3N0cm9uZz4gLSBBc3NpZ24gdGhlIG91dHB1dCB0byB0aGUgc3BlY2lmaWVkIHNtYXJ0eSB2YXJpYWJsZSAoZGVmYXVsdCA8c3Ryb25nPmNvbnRlbnRfZmV0Y2g8L3N0cm9uZz4gbWVhbmluZyB0aGUgcmVzdWx0IHdpbGwgYmUgYXZhaWxhYmxlIHZpYSAmIzEyMzskY29udGVudF9mZXRjaH0pOzwvbGk+DQogICAgICA8L3VsPg0KICAgICAgPGhyPg0KICAgICAgPGgyPkV4dGVuZGVkIEhlbHAgYW5kIEV4YW1wbGVzPC9oMj4NCiAgICAgIDxoMz5EZWJ1Z2dpbmc8L2gzPg0KICAgICAgPHA+WW91IGNhbiBkZWJ1ZyB0aGUgcGx1Z2luIG91dCBwdXQgYnkgc2ltcGx5IHN1cnJvdW5kaW5nIHRoZSBhc3NpZ25lZCBTbWFydHkgdmFyaWFibGUgdGFnIHdpdGggSFRNTCAncHJlJyB0YWdzIGFuZCB1c2luZyBhIHByaW50X3IgbW9kaWZpZXI6PC9wPg0KICAgICAgPHA+RXhhbXBsZTo8L3A+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPg0KICAmIzEyMztjb250ZW50X2ZldGNoIGFzc2lnbj0nbXlfdmFyX25hbWUnfQ0KICAmbHQ7cHJlPiYjMTIzJG15X3Zhcl9uYW1lfHByaW50X3I6MX0mbHQ7L3ByZT48L3ByZT4NCiAgICAgIDxwPlRoYXQgc2hvdWxkIG91dHB1dCB0aGUgY29udGVudHMgb2YgdGhlIGFzc2lnbmVkIHZhciBhcyBhbiBhcnJheSBvZiByZXN1bHRzIHRoZSBzdHJ1Y3R1cmUgb2Ygd2hpY2ggc2hvdWxkIHZhcnkgZGVwZW5kaW5nIG9uIHRoZSBwYXJhbWV0ZXJzIHVzZWQuPC9wPg0KDQogICAgICA8aDM+U2VsZWN0aW5nIGl0ZW1zPC9oMz4NCiAgICAgIDxoND48ZW0+QXNzaWduaW5nIHRvIGEgU21hcnR5IHZhcmlhYmxlPC9lbT48L2g0Pg0KICAgICAgPHA+PHN0cm9uZz5hc3NpZ248L3N0cm9uZz4gY2FuIGJlIHVzZWQgdG8gZGVmaW5lIHRoZSBvdXRwdXQgdmFyaWFibGUgdG8gc29tZXRoaW5nIG90aGVyIHRoYW4gdGhlIGRlZmF1bHQgPHN0cm9uZz4mIzEyMzskY29udGVudF9mZXRjaH08L3N0cm9uZz4uPC9wPg0KICAgICAgPHA+RXhhbXBsZTo8L3A+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPg0KICAmIzEyMztjb250ZW50X2ZldGNoIGFzc2lnbj0nbXlfdmFyX25hbWUnfQ0KICAmIzEyMzskbXlfdmFyX25hbWVbMF0tPmNvbnRlbnQtPmFsaWFzfTwvcHJlPg0KDQogICAgICA8aDQ+PGVtPlNlbGVjdGluZyBhIGNvbnRlbnQtYmxvY2s8L2VtPjwvaDQ+DQoNCiAgICAgIDxwPjxzdHJvbmc+YmxvY2tfbmFtZTwvc3Ryb25nPiBjYW4gYmUgdXNlZCB0byBkZWZpbmUgdGhlIGNvbnRlbnQgYmxvY2sgeW91IHdhbnQgdG8gdXNlIGFzIHRoZSAmIzEyMzsmIzEyMzskY29udGVudF9mZXRjaFtuXS0+Y29udGVudC0+ZGF0YX0gZWxlbWVudC4gQXMgYSBkZWZhdWx0LCBpdCB3aWxsIGJlIDxlbT4nY29udGVudF9lbic8L2VtPiwgdGhlIHBhZ2Ugc3RhbmRhcmQgY29udGVudCBibG9jay4gSWYgdGhlIGJsb2NrIHlvdSB3YW50IHRvIHNob3cgaXMgJiMxMjM7Y29udGVudCBibG9jaz0nc3VtbWFyeSd9IGluIHlvdXIgc291cmNlIHBhZ2UncyB0ZW1wbGF0ZSwgeW91IHdvdWxkIGNhbGwgaXQgbGlrZSBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGU6PC9wPg0KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mIzEyMztjb250ZW50X2ZldGNoIGJsb2NrX25hbWU9J3N1bW1hcnknfTwvcHJlPg0KDQogICAgICA8aDQ+PGVtPldoZXJlIHNob3VsZCB0aGUgZmV0Y2ggYmVnaW4/PC9lbT48L2g0Pg0KICAgICAgPHA+PHN0cm9uZz5zdGFydF9pZDwvc3Ryb25nPiBjYW4gYmUgdXNlZCB0byBkZWZpbmUgYSBzdGFydGluZyBwb2ludCBmb3IgeW91ciBjb250ZW50IGNvbGxlY3Rpb24uIElmIG5vdCBzcGVjaWZpZWQsIGl0IHdpbGwgYmVnaW4gd2l0aCBpZCA8ZW0+Jy0xJzwvZW0+IGFuZCB0aHVzIGluY2x1ZGUgYWxsIG1hdGNoaW5nIHBhZ2VzIGZyb20gYWxsIHBhZ2VzLiBBIG5pY2UgdHJpY2sgdG8gdXNlIHRoZSB0YWcgaW4gc2V2ZXJhbCBwYWdlcyBiYXNlZCBvbiB0aGUgc2FtZSB0ZW1wbGF0ZSBhbmQgbGltaXQgdGhlIHRhZyB0byB0aGlzIHNpdGUgYXJlYSBpcyB0byBzZXQgPGVtPnN0YXJ0X2lkPSRjb250ZW50X2lkPC9lbT4uIFRoaXMgd2F5LCB5b3UgdXNlIHRoZSB2aWV3ZWQgcGFnZSdzIGlkIGFzIHRoZSBpbml0aWFsIHBhZ2UgYW5kIGlnbm9yZSBhbGwgb3RoZXIgY29udGVudCBmb2xkZXJzLjwvcD4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjM7Y29udGVudF9mZXRjaCBzdGFydF9pZD0xNn08L3ByZT4NCg0KICAgICAgPGg0PjxlbT5Ta2lwIHRoZSBmaXJzdCBYIGl0ZW1zIChvZmZzZXQpLjwvZW0+PC9oND4NCiAgICAgIDxwPjxzdHJvbmc+bGltaXRfc3RhcnQ8L3N0cm9uZz4gd2lsbCBhbGxvdyB5b3UgdG8gZG8gdGhhdC4gU3RhdGUgdGhlIG51bWJlciBvZiB0aGUgaXRlbSB5b3Ugd291bGQgbGlrZSB5b3VyIG91dHB1dCB0byBiZWdpbiB3aXRoLiA8ZW0+RGVmYXVsdCBpcyAwPC9lbT48L3A+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiYjMTIzO2NvbnRlbnRfZmV0Y2ggbGltaXRfc3RhcnQ9NX08L3ByZT4NCg0KICAgICAgPGg0PjxlbT5MaW1pdCB0aGUgb3V0cHV0IHRvIGEgc3BlY2lmaWMgbnVtYmVyIG9mIGl0ZW1zLjwvZW0+PC9oND4NCiAgICAgIDxwPjxzdHJvbmc+bGltaXRfY291bnQ8L3N0cm9uZz4gY2FuIGJlIHVzZWQgdG8gbGltaXQgdGhlIG91dHB1dCB0byBhIHNwZWNpZmljIG51bWJlci4gSW4gY29tYmluYXRpb24gd2l0aCBwYWdlLCBpdCB3aWxsIGRlZmluZSB0aGUgc2l6ZSBvZiBhIHBhZ2UuPC9wPg0KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mIzEyMztjb250ZW50X2ZldGNoIGxpbWl0X2NvdW50PTEwfTwvcHJlPg0KDQogICAgICA8aDQ+PGVtPlBhZ2luYXRpb248L2VtPjwvaDQ+DQogICAgICA8cD48c3Ryb25nPnBhZ2U8L3N0cm9uZz4gY2FuIGJlIHVzZWQgdG8gZ2VuZXJhdGUgYSBwYWdlIGJhc2VkIHZpZXcuIFZhbHVlIGlzIDxlbT5wYWdlIG51bWJlcjwvZW0+LiBJdCB3aWxsIGJhc2ljYWxseSBtb3ZlIHRoZSB2aWV3IHlvdSBoYXZlIG9uIHRoZSByZXN1bHRzIGJ5IHRoZSBudW1iZXIgb2YgaXRlbXMgc3BlY2lmaWVkIGluIGxpbWl0X2NvdW50LiBJdCBhbHRlcnMgdGhlIGxpbWl0X3N0YXJ0IGJ5IGFkZGluZyBsaW1pdF9jb3VudCB0byBpdCwgZWFjaCB0aW1lIGFuIGluY3JlYXNpbmcgcGFnZSBpcyBzZWxlY3RlZC4gTGV0J3Mgc2F5IHlvdSBoYXZlIGxpbWl0X3N0YXJ0PTAgYW5kIGxpbWl0X2NvdW50PTUsIHBhZ2U9MiB3aWxsIGFsdGVyIGxpbWl0X3N0YXJ0IHRvIGJlIDYuPC9wPg0KICAgICAgPHA+VXNhZ2Ugb2YgdGhpcyBwYXJhbWV0ZXIgd2lsbCBwcm92aWRlIHNvbWUgZXh0cmEgc21hcnR5IGRhdGEgZWxlbWVudHMuICRwYWdlcl9pbmZvLT5jdXJyZW50LCAkcGFnZXJfaW5mby0+bWF4IGFuZCAkcGFnZXJfaW5mby0+c2l6ZS4gUmVwcmVzZW50aW5nIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgcGFnZSwgdGhlIG1heGltdW0gcGFnZSBhdmFpbGFibGUgYW5kIHRoZSBwYWdlIHNpemUuIFVzZSBzbWFydHkgYW5kIHRoaXMgZGF0YSB0byBidWlsZCBlYXN5IGFuZCBjb21wbGV4IHBhZ2VycyBhbGlrZS48L3A+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiYjMTIzO2NvbnRlbnRfZmV0Y2ggbGltaXRfY291bnQ9NSBwYWdlPTJ9PC9wcmU+DQoNCiAgICAgIDxoND48ZW0+U2hvdyBhbHNvIGluYWN0aXZlIHBhZ2VzIG9yIG9ubHkgaW5hY3RpdmUgcGFnZXMuPC9lbT48L2g0Pg0KICAgICAgPHA+PHN0cm9uZz5hY3RpdmU8L3N0cm9uZz4gY2FuIGJlIHVzZWQgdG8gY29udHJvbCBob3cgdGhlIDxzdHJvbmc+J2FjdGl2ZSc8L3N0cm9uZz4gZmxhZyBvZiBwYWdlcyBzaG91bGQgYmUgaW50ZXJwcmV0ZWQuICdmb3JjZScgc2hvd3MgYWxsIHBhZ2VzIHJlZ2FyZGxlc3Mgb2Ygc3RhdHVzLiAnYWN0aXZlJyBzaG93IGFjdGl2ZSBwYWdlcyBvbmx5IChkZWZhdWx0KS4gJ2luYWN0aXZlJyBzaG93IGluYWN0aXZlIHBhZ2VzIG9ubHkuPC9wPg0KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mIzEyMyRjb250ZW50X2ZldGNoIGFjdGl2ZT0nZm9yY2UnfTwvcHJlPg0KDQogICAgICA8aDQ+PGVtPlNob3duIGluIG1lbnU/PC9lbT48L2g0Pg0KICAgICAgPHA+PHN0cm9uZz5zaG93bl9pbl9tZW51PC9zdHJvbmc+IGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgaG93IHRoZSAnc2hvd19pbl9tZW51JyBmbGFnIG9mIHBhZ2VzIHNob3VsZCBiZSBpbnRlcnByZXRlZC4gJ2ZvcmNlJyBzaG93cyBhbGwgcGFnZXMgcmVnYXJkbGVzcyBvZiBzdGF0dXMuICdzaG93JyBzaG93IHBhZ2VzIHNldCB0byAnU2hvdyBpbiBNZW51JyBvbmx5IChkZWZhdWx0KS4gJ2hpZGRlbicgc2hvdyBwYWdlcyB0aGF0IGFyZSBzZXQgdG8gJ0Rvbid0IFNob3cgaW4gTWVudScgb25seS48L3A+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiYjMTIzJGNvbnRlbnRfZmV0Y2ggc2hvd19pbl9tZW51PSdoaWRkZW4nfTwvcHJlPg0KDQogICAgICA8aDM+RmlsdGVyIGl0ZW1zPC9oMz4NCg0KICAgICAgPGg0PjxlbT5GaWx0ZXIgZm9yIHNwZWNpZmljIGNvbnRlbnQgKGUuZy4gY2hlY2sgaWYgZGF0YSBmaWVsZHMgY29udGFpbiB0aGUgd29yZCAnd29ybGQnKTwvZW0+PC9oND4NCiAgICAgIDxwPjxzdHJvbmc+ZmlsdGVyPC9zdHJvbmc+IGNhbiBiZSB1c2VkIHRvIGxpbWl0IHRoZSByZXN1bHRzIHRvIGVudHJpZXMgd2hpY2ggY29udGFpbiBzcGVjaWZpYyB3b3JkcyBvciBwaHJhc2VzIG9yIHRvIGV4bHVkZSBzdWNoIGl0ZW1zLiBVc2UgYm9vbGVhbiBsb2dpYy4gZS5nLiBmaWx0ZXI9Jy1oZWxsbycgdG8gZXhjbHVkZSBpdGVtcyB0aGF0IGNvbnRhaW4gdGhlIHdvcmQgJ2hlbGxvJyBpbiBhbnkgb2YgdGhlaXIgY29udGVudC0+ZGF0YSBvciBleHRlbnNpb24tPml0ZW1uYW1lLT5kYXRhIGVsZW1lbnRzIG9yIGZpbHRlcj0nd29ybGQnIHRvIGxpbWl0IHRoZSByZXN1bHRzIHRvIHRob3NlIGl0ZW1zIHRoYXQgY29udGFpbiB0aGUgd29yZCAnd29ybGQnIGluIGFueSBvZiB0aGVpciBkYXRhIGVsZW1lbnRzLjwvcD4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjMkY29udGVudF9mZXRjaCBmaWx0ZXI9J3dvcmxkJ308L3ByZT4NCg0KICAgICAgPGg0PjxlbT5FeGNsdWRlIG9yIGxpbWl0IChmaWx0ZXIpIHRoZSBvdXRwdXQgdG8gcGFnZXMgd2l0aCBtYXRjaGluZyBhbGlhcyBwcmVmaXg8L2VtPjwvaDQ+DQogICAgICA8cD48c3Ryb25nPnByZWZpeDwvc3Ryb25nPiBjYW4gYmUgdXNlZCB0byBzdGF0ZSB0aGUgcHJlZml4IG9yIHByZWZpeGVzIHRoYXQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZm9yIGV4Y2x1ZGluZyBmcm9tIHRoZSBjb2xsZWN0aW9uIG9yIHRoYXQgc2hvdWxkIGJlIHRoZSBvbmx5IHBhZ2VzIGluIHRoZSBjb2xsZWN0aW9uLiBTZXZlcmFsIHByZWZpeGVzIGNhbiBiZSB1c2VkIGJ1dCBtdXN0IGJlIHNlcGFyYXRlZCBieSBjb21tYS4gRS5nLiAmIzEyMyRjb250ZW50X2ZldGNoIHByZWZpeD0ncHJpdmF0ZV8sc3BlY2lhbF8nfTwvcD4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjMkY29udGVudF9mZXRjaCBwcmVmaXg9J3ByZWZpeG5hbWUnfTwvcHJlPg0KDQogICAgICA8aDQ+PGVtPkhvdyBzaG91bGQgdGhlIHByZWZpeCBvciBsaXN0IG9mIHByZWZpeChlcykgYmUgaGFuZGxlZD88L2VtPjwvaDQ+DQogICAgICA8cD48c3Ryb25nPnByZWZpeF9tb2RlPC9zdHJvbmc+IFByZWZpeC1tb2RlIGlzIHVzZWQgdG8gY29udHJvbCB0aGUgaGFuZGxpbmcgb2YgdGhlIHByZWZpeChlcykuICdmb3JjZScsICduZXV0cmFsIiBhbmQgImhpZGUnIGFyZSB0aGUgYXZhaWxhYmxlIHZhbHVlcy4gU3RhbmRhcmQgbW9kZSBpcyBuZXV0cmFsIHRoYXQgd2lsbCBkaXNyZWdhcmQgYW55IGF2YWlsYWJsZSBwcmVmaXguIEZvcmNlZCBtb2RlIG9ubHkgc2hvd3MgcGFnZXMgd2l0aCBvbmUgb2YgdGhlIHN0YXRlZCBwcmVmaXhlcy4gSGlkZSB3aWxsIGV4Y2x1ZGUgcGFnZXMgd2l0aCB0aGUgcHJlZml4IGZyb20gdGhlIGl0ZW1zIHJldHVybmVkLjwvcD4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjMkY29udGVudF9mZXRjaCBwcmVmaXhfbW9kZT0naGlkZSd9PC9wcmU+DQoNCiAgICAgIDxoND48ZW0+SG93IGNhbiBJIGxpbWl0IHRoZSBvdXRwdXQgdG8gc3BlY2lmaWMgaGllcmFyY2h5IGxldmVscyAoZS5nLiBkZXB0aCkgPzwvZW0+PC9oND4NCiAgICAgIDxwPjxzdHJvbmc+ZGVwdGg8L3N0cm9uZz4gaXMgdXNlZCB0byBjb250cm9sIHdoaWNoIGhpZXJhcmNoeSBsZXZlbHMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZm9yIG91dHB1dC4gSXQgdGFrZXMgdHdvIGludGVnZXIgdmFsdWVzIHNlcGFyYXRlZCBieSBjb21tYSAoZS5nLiBkZXB0aD0nLTEsMyd9LiBUaGUgZmlyc3QgdmFsdWUgZGVmaW5lcyB0aGUgc3RhcnRpbmcgaGllcmFyY2h5LiAtMSA9IHN0YXJ0IHdpdGggY29udGVudF9mZXRjaCwgbiA9IHN0YXJ0IHdpdGggc3BlY2lmaWMgaGllcmFyY2h5IGxldmVsIFswIGFuZCAxIGJvdGggcmV0dXJuIGZpcnN0IGxldmVsXS48L3A+DQogICAgICA8cD5UaGUgc2Vjb25kIHZhbHVlIGRlZmluZXMgdGhlIG51bWJlciBvZiBhZGRpdGlvbmFsIGxldmVscyBhZGRlZCB0byB0aGUgY29sbGVjdGlvbi4gMCA9IG5vIGRlcHRoLCBzaWJsaW5ncyBvZiBwYWdlIHNwZWNpZmllZCB3aXRoIGZpcnN0IGRlcHRoIHZhbHVlIGFyZSByZXR1cm5lZCAoaWYgbm90IGV4Y2x1ZGVkIG90aGVyd2lzZSkuIG4gPSBudW1iZXIgb2YgYWRkaXRpb25hbCBsZXZlbCByZWxhdGl2ZSB0byB0aGUgbGV2ZWwgc3BlY2lmaWVkIHdpdGggZmlyc3QgZGVwdGggdmFsdWUuPC9wPg0KICAgICAgPHA+PHN0cm9uZz5Cb3RoIHZhbHVlcyBtdXN0IGJlIHVzZWQhPC9zdHJvbmc+PC9wPg0KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mIzEyMyRjb250ZW50X2ZldGNoIGRlcHRoPSctMSwzJ308L3ByZT4NCg0KICAgICAgPGgzPkV4Y2x1ZGUgaXRlbXM8L2gzPg0KDQogICAgICA8cD48ZW0+RXhjbHVkZSBzaW5nbGUgaXRlbXMgZnJvbSB0aGUgbGlzdDwvZW0+PC9wPg0KICAgICAgPHA+PHN0cm9uZz5leGNsdWRlPC9zdHJvbmc+IGFsbG93cyB5b3UgdG8gcmVtb3ZlIHNwZWNpZmljIHBhZ2VzIGZyb20gdGhlIHJlc3VsdHMuIEl0IHRha2VzIGFueSBudW1iZXIgb2YgY29udGVudCA8ZW0+SURzIHNlcGFyYXRlZCBieSBjb21tYTwvZW0+LiBFc3BlY2lhbGx5IHdoZW4gZm9yY2luZyBjb250ZW50X2ZldGNoIHRvIGNvbXBpbGUgc21hcnR5IGluIGZvdW5kIGNvbnRlbnQtYmxvY2tzLCB5b3UgY2FuIHVzZSB0aGlzIHRhZyB0byBicmVhayBlbmRsZXNzIHJlY3Vyc2lvbnMgb3IgZm9yIGFueSBvdGhlciByZWFzb24gd2hlcmUgeW91IHdhbnQgc3BlY2lmaWMgcGFnZXMgbm90IHRvIGFwcGVhci48L3A+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiYjMTIzJGNvbnRlbnRfZmV0Y2ggZXhjbHVkZT0nMTMsMjMsNTMsMTIsMzInfTwvcHJlPg0KDQogICAgICA8cD48ZW0+SnVzdCBzaG93IHRoZSBkYXRhIG9mIGEgc3BlY2lmaWMgZWxlbWVudDwvZW0+PC9wPg0KICAgICAgPHA+PHN0cm9uZz50aGlzX29ubHk8L3N0cm9uZz4gaXMgYSBwYXJhbWV0ZXIgdGhhdCB3aWxsIGxpbWl0IHRoZSByZXN1bHQgdG8gdGhpcyBzcGVjaWZpYyBJRC48L3A+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiYjMTIzJGNvbnRlbnRfZmV0Y2ggdGhpc19vbmx5PTU1fTwvcHJlPg0KDQogICAgICA8aDM+QWRkIG1vcmUgZGF0YSB0byB0aGUgaXRlbTwvaDM+DQogICAgICA8aDQ+PGVtPkdldCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHBhcmVudCBwYWdlczwvZW0+PC9oND4NCiAgICAgIDxwPjxzdHJvbmc+cGFyZW50czwvc3Ryb25nPiBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBhcmVudCBwYWdlcyAoYWxpYXMgYW5kIHRpdGxlKS4gUG9zc2libGUgdmFsdWVzIGFyZSA8ZW0+dHJ1ZTwvZW0+IG9yIDxlbT5mYWxzZTwvZW0+LiBVc2luZyB0aGVzZSBwYXJhbWV0ZXJzIGFsbG93cyB5b3UgdG8gdXNlIHRoZSBkYXRhIGVsZW1lbnQgJGR1bXBbbl0tPnBhcmVudHMtPmFsaWFzIG9yICRkdW1wW25dLT5wYXJlbnRzLT50aXRsZS4gVGhlIGRhdGEgZWxlbWVudCAkZHVtcFtuXS0+cGFyZW50cy0+aWQgd2lsbCBiZSBwcm92aWRlZCBpbiBhbnkgY2FzZS48L3A+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiYjMTIzJGNvbnRlbnRfZmV0Y2ggcGFyZW50cz10cnVlfTwvcHJlPg0KDQogICAgICA8aDQ+PGVtPkdldCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSB1c2VycyB3aG8gd3JvdGUvZWRpdGVkIHRoZSBjb250ZW50PC9lbT48L2g0Pg0KICAgICAgPHA+PHN0cm9uZz51c2Vyczwvc3Ryb25nPiBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHVzZXJzIHdobyBsYXN0IGVkaXRlZCBhbmQgY3JlYXRlZCB0aGUgY29udGVudC4gUG9zc2libGUgdmFsdWVzIGFyZSA8ZW0+dHJ1ZTwvZW0+IG9yIDxlbT5mYWxzZTwvZW0+LiBQZXIgZGVmYXVsdCAkZHVtcFtuXS0+Y3JlYXRlZC0+YnkgYW5kICRkdW1wW25dLT5tb2RpZmllZC0+Ynkgd2lsbCBvbmx5IHJldHVybiB0aGUgdXNlciBJRC4gSWYgc2V0IHRvIHRydWUsIHRoZSBtZW50aW9uZWQgY2xhc3MgZWxlbWVudHMgd2lsbCBiZSBleHBhbmRlZCBieSBkZXRhaWxlZCB1c2VyIGluZm8gKGZpcnN0LSwgbGFzdC0gYW5kIHVzZXIgbmFtZSkuPC9wPg0KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mIzEyMyRjb250ZW50X2ZldGNoIHVzZXJzPXRydWV9PC9wcmU+DQpXDQogICAgICA8aDQ+PGVtPlVzaW5nIG1vcmUgY29udGVudC1ibG9ja3MgZnJvbSB0aGUgcGFnZXM8L2VtPjwvaDQ+DQogICAgICA8cD48c3Ryb25nPmV4dGVuc2lvbnM8L3N0cm9uZz4gaXMgeW91ciBjaG9pY2UgdGhlbi4gSXQgdGFrZXMgYSA8ZW0+Y29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgY29udGVudF9ibG9ja3M8L2VtPi4gSWYgYW55IG9mIHRoZW0gKGZvciBhbiBpdGVtKSBmZWF0dXJlcyBjb250ZW50LCAkZHVtcFtuXS0+ZXh0ZW5zaW9uIHdpbGwgYmUgJzEnLCBvdGhlciB3aXNlIGl0IHdpbGwgYmUgJzAnIChkZWZhdWx0KS4gVGhpcyBjYW4gYmUgdXNlZCB0byBjaGVjayBmb3IgYXZhaWxhYmlsaXR5IG9mICdtb3JlJyBkYXRhLiBFYWNoIGNvbnRlbnRfYmxvY2sgd2lsbCBiZSBhZGRlZCBhcyBhIGNsYXNzIGJlbG93ICRkdW1wW25dLT5leHRlbnNpb25zLiBFLmcuICYjMTIzJGNvbnRlbnQgYmxvY2s9J21vcmVfdGV4dCd9IHdpbGwgYmUgYXZhaWxhYmxlIGFzICRkdW1wW25dLT5leHRlbnNpb25zLT5tb3JlX3RleHQtPmRhdGEgdG9nZXRoZXIgd2l0aCAkZHVtcFtuXS0+ZXh0ZW5zaW9ucy0+bW9yZV90ZXh0LT5sZW5ndGguIElkZWFsbHksIHlvdXIgY29udGVudCBibG9jayBuYW1lcyBkbyBub3QgZmVhdHVyZSBzcGVjaWFsIGNoYXJhY3RlcnMgYW5kIG5vdCAnICcgb3IgJy0nLCB1c2UgJ18nIGluc3RlYWQuPC9wPg0KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mIzEyMyRjb250ZW50X2ZldGNoIGV4dGVuc2lvbnM9J3N1bW1hcnksaW1hZ2Usb3RoZXJfYmxvY2tfbmFtZSd9PC9wcmU+DQoNCiAgICAgIDxoMz5Qcm9jZXNzIGRhdGEgZnJvbSBpdGVtczwvaDM+DQoNCiAgICAgIDxoND48ZW0+Q2hhbmdlIHRoZSBkYXRlL3RpbWUgZm9ybWF0PC9lbT48L2g0Pg0KICAgICAgPHA+PHN0cm9uZz5kYXRlZm9ybWF0PC9zdHJvbmc+IGNhbiBiZSB1c2VkIHRvIGZvcm1hdCB0aGUgZGF0ZSBvdXRwdXQgb2YgY29udGVudF9mZXRjaC4gQ2hlY2sgPGEgaHJlZj0iaHR0cDovL2RlLnBocC5uZXQvc3RyZnRpbWUiIHRhcmdldD0iYmxhbmsiPmh0dHA6Ly9kZS5waHAubmV0L3N0cmZ0aW1lPC9hPiBmb3IgbW9yZSBpZm8gb24gdGhlIGRhdGUgZm9ybWF0IG9wdGlvbnMuIEl0IGlzIHNldCB0byA8ZW0+JyVBLCAlZSAlQiAlWSc8L2VtPiBieSBkZWZhdWx0IChlLmcuIFNhdCwgMjAgU2VwdGVtYmVyIDIwMDgpLiBJdCBpcyB1c2VkIGZvciB0aGUgdHdvIHRpbWUgc3RhbXBzICRkdW1wW25dLT5jcmVhdGVkLT5kYXRlIGFuZCAkZHVtcFtuXS0+bW9kaWZpZWQtPmRhdGUgdGhhdCBhcmUgYWx3YXlzIHJldHVybmVkIHdpdGggZWFjaCBpdGVtLjwvcD4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjMkY29udGVudF9mZXRjaCBkYXRlZm9ybWF0PSclQSwgJWUgJUIgJVknfTwvcHJlPg0KDQogICAgICA8aDQ+PGVtPkNoYW5nZSB0aGUgZGF0ZS90aW1lIGxvY2FsZTwvZW0+PC9oND4NCiAgICAgIDxwPjxzdHJvbmc+Y2Rsb2NhbGU8L3N0cm9uZz4gY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIHNwZWNpZmljIGxvY2FsZSBmb3IgeW91ciBvdXRwdXQuIEUuZy4geW91ciBwYWdlIGlzIGRhbmlzaCBhbmQgeW91ciBzaXRlL3NlcnZlciBpcyBzZXQgdG8gdGhpcyBsb2NhbGUgLSBidXQgZm9yIHRoZSBnZW5lcmF0aW9uIG9mIHZhbGlkIFJTUyB5b3UgbWlnaHQgbmVlZCB0aGUgVVMgZGF0ZS90aW1lIGxvY2FsZS4gPC9wPg0KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mIzEyMyRjb250ZW50X2ZldGNoIGNkbG9jYWxlPSdlbi11cyd9PC9wcmU+DQoNCiAgICAgIDxoND48ZW0+Q2hhbmdlIHRoZSBkYXRlIGZvcm1hdCBsb2NhbGU8L2VtPjwvaDQ+DQogICAgICA8cD48c3Ryb25nPmxvY2FsZTwvc3Ryb25nPiBjYW4gYmUgdXNlZCB0byBhbHRlciB0aGUgbG9jYWxlIHVzZWQgZm9yIHRoZSB0aW1lc3RhbXAgKGUuZy4gc3lzdGVtIGlzIERhbmlzaCwgYnV0IHlvdSBuZWVkIFVTIGRheSBuYW1lcyBmb3IgWE1MKS48L3A+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiYjMTIzJGNvbnRlbnRfZmV0Y2ggbG9jYWxlPSdlbi1VUyd9PC9wcmU+DQoNCiAgICAgIDxoND48ZW0+Q29tcGlsZSBvciByZW1vdmUgU21hcnR5IHRhZ3MgZnJvbSBvdXRwdXQ8L2VtPjwvaDQ+DQogICAgICA8cD48c3Ryb25nPmRvX3NtYXJ0eTwvc3Ryb25nPiBjb250cm9scyBob3cgc21hcnR5IGRhdGEgdGhhdCBtYXkgYmUgcmV0cmlldmVkIHNob3VsZCBiZSBoYW5kbGVkLiBUaGVyZSBhcmUgdGhyZWUgb3B0aW9ucyA8ZW0+J2NvbXBpbGUnPC9lbT4sIDxlbT4nbmV1dHJhbCc8L2VtPiBhbmQgPGVtPidzdHJpcCc8L2VtPi4gPGVtPidjb21waWxlJzwvZW0+IGNvbXBpbGVzIHNtYXJ0eSBkYXRhIGluIHRoZSBwYWdlcyBmb3VuZC4gPGVtPiduZXV0cmFsJzwvZW0+IHByaW50cyBvdXQgdGhlIHNtYXJ0eSBjb2RlIGFzIHJlZ3VsYXIgdGV4dCBhbmQgaXMgdGhlIGRlZmF1bHQgc2V0dGluZy4gPGVtPidzdHJpcCc8L2VtPiBkZWxldGVzIGFsbCBzbWFydHkgY29kZSBmcm9tIHlvdXIgcGFnZSAod2VsbCwgZXZlcnl0aGluZyBiZXR3ZWVuICYjMTIzJCBhbmQgfSkuPC9wPg0KICAgICAgPHA+SG93ZXZlciwgYmUgY2FyZWZ1bGx5IG5vdCB0byBjb25zdHJ1Y3QgYSBxdWVyeSB0aGF0IHdvdWxkIGhhdmUgdG8gY29tcGlsZSBpdHNlbGYsIHRoaXMgd2lsbCByZXN1bHQgaW4gYW4gb3V0IG9mIG1lbW9yeSBlcnJvciBkdWUgdG8gZW5kbGVzcyByZWN1cnNpb24uSWYgeW91IHVzZSB0aGlzIHRhZyBvbmx5IG9uY2Ugd2l0aCB0aGUgY29tcGlsZSBwYXJhbWV0ZXIgaW4geW91ciBzaXRlLCBubyBwcm9ibGVtLCBpdCBwcmV2ZW50cyBpdHNlbGYgZnJvbSBiZWluZyByZW5kZXJlZC4gQnV0IGlmIHlvdSBoYXZlIGFub3RoZXIgb2NjdXJyZW5jZSBvZiB0aGlzIHRhZyB0aGF0IHdvdWxkIGluY2x1ZGUgdGhlIHBhZ2UgdGhhdCBpcyBjYWxsaW5nIHRoZSBjdXJyZW50bHkgcHJvY2Vzc2VkIHRhZyB3aXRoIGNvbXBpbGU9J3RydWUnLCB5b3Ugc2hvdWxkIGV4Y2x1ZGUgYWxsIG9mIHRoZXNlIHBhZ2VzIChjb250ZW50X2ZldGNoIGRvZXMgbm90IGNoZWNrIGZvciB0aGUgY29tcGlsZSBwYXJhbWV0ZXIgb2Ygb3RoZXIgb2NjdXJyZW5jZXMgb2YgdGhlIHRhZykuPC9wPg0KICAgICAgPHA+SWYgdGhhdCBjYWxsZWQgdGFnIHdvdWxkIGZlYXR1cmUgb3RoZXIgY29udGVudCBibG9ja3MuLi4gdGhlbiwgYWdhaW4sIGFsbCB3b3VsZCB3b3JrIG5pY2UuIEp1c3QgZG8gbm90IGNvbnN0cnVjdCBzb21ldGhpbmcgd2l0aCBjb250ZW50X2ZldGNoIHRoYXQgaXMgc29tZXdoZXJlIGluIHRoZSBjaGFpbiBvZiBldmVudHMgY29tcGlsaW5nIGl0c2VsZi48L3A+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiYjMTIzJGNvbnRlbnRfZmV0Y2ggZG9fc21hcnR5PSJjb21waWxlIn08L3ByZT4NCg0KICAgICAgPGg0PjxlbT5SZW1vdmUgSFRNTCBmcm9tIGNvbnRlbnQgZWxlbWVudHMgc28gdGhhdCBpdCBjYW4gc2FmZWx5IGJlIHRydW5jYXRlZDwvZW0+PC9oND4NCiAgICAgIDxwPjxzdHJvbmc+aHRtbDwvc3Ryb25nPiBpcyBhIHBhcmFtZXRlciB0aGF0IGFsbG93cyB5b3UgdG8gcmVtb3ZlIGFueSBIVE1MLCBKYXZhU2NyaXB0IGFuZCBDU1MgZnJvbSBhIGNvbnRlbnQtYmxvY2suIDxlbT4nc3RyaXAnPC9lbT4gYW5kIDxlbT4nbmV1dHJhbCc8L2VtPiBhcmUgdGhlIGF2YWlsYWJsZSBvcHRpb25zLiA8ZW0+J25ldXRyYWwnPC9lbT4gd2lsbCBkaXNwbGF5IHRoZSBjb250ZW50IGFzIGl0IGlzIChhZnRlciBwcm9jZXNzaW5nIGRvX3NtYXJ0eSBzZXR0aW5ncykgYW5kIGlzIHRoZSBkZWZhdWx0IHNldHRpbmcuIDxlbT4nc3RyaXAnPC9lbT4gd2lsbCByZW1vdmUgdGhlIG1lbnRpb25lZCBlbGVtZW50cy48L3A+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiYjMTIzJGNvbnRlbnRfZmV0Y2ggaHRtbD0nbmV1dHJhbCd9PC9wcmU+DQoNCiAgICAgIDxoMz5Tb3J0IGl0ZW1zPC9oMz4NCg0KICAgICAgPGg0PjxlbT5QcmltYXJ5IHNvcnRpbmcgb2YgZGF0YSBlbGVtZW50czwvZW0+PC9oND4NCiAgICAgIDxwPjxzdHJvbmc+Zmlyc3Rfc29ydDwvc3Ryb25nPiBzb3J0cyB0aGUgZm91bmQgY29udGVudCBieSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6IDxlbT5pZCwgdGl0bGUsIGNyZWF0ZWQsIG1vZGlmaWVkLCBvd25lciwgaGllcmFyY2h5IChkZWZhdWx0KSwgaWRfaGllcmFyY2h5LCBsYXN0ZWRpdG9yLCBhY3RpdmUsIHNob3cgKHNob3cgaW4gbWVudSk8L2VtPi4gRm9yIHRpbWUgYmFzZWQgKGxpa2UgbmV3ZXN0IGNvbnRlbnRzKSB1c2UgY3JlYXRlZCwgZm9yIGxhc3QgdXBkYXRlZCBsaXN0cyB1c2UgbW9kaWZpZWQgKGJvdGggbmVlZCB0byBiZSByZXZlcnNlZCB3aXRoIHNvcnRfb3JkZXIpLiBIaW50OiBTb3J0aW5nIGJ5IG93bmVyIG9yIGxhc3RlZGl0b3IgdGFrZXMgcGxhY2UgYnkgSUQsIG5vdCBuYW1lITwvcD4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjMkY29udGVudF9mZXRjaCBmaXJzdF9zb3J0PSdvd25lcid9PC9wcmU+DQoNCiAgICAgIDxoND48ZW0+U2V0IHRoZSBkaXJlY3Rpb24gb2YgcHJpbWFyeSBzb3J0aW5nPC9lbT48L2g0Pg0KICAgICAgPHA+PHN0cm9uZz5maXJzdF9zb3J0X29yZGVyPC9zdHJvbmc+IGNhbiBiZSB1c2VkIHRvIHJldmVyc2UgdGhlIHNvcnRpbmcgZmlsdGVyLiA8ZW0+J3VwJzwvZW0+IGFuZCA8ZW0+J2Rvd24nPC9lbT4gYXJlIHRoZSBhdmFpbGFibGUgb3B0aW9ucywgd2hlcmVhcyAidXAiIChBIGJlZm9yZSBCIG9yIHllc3RlcmRheSBiZWZvcmUgdG9kYXkpIGlzIHRoZSBkZWZhdWx0IGRpcmVjdGlvbi48L3A+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiYjMTIzJGNvbnRlbnRfZmV0Y2ggZmlyc3Rfc29ydF9vcmRlcj0ndXAnfTwvcHJlPg0KDQogICAgICA8aDQ+PGVtPlNlY29uZGFyeSBzb3J0aW5nIG9mIGRhdGEgZWxlbWVudHM8L2VtPjwvaDQ+DQogICAgICA8cD48c3Ryb25nPnNlY29uZF9zb3J0PC9zdHJvbmc+IHNvcnRzIHRoZSBmb3VuZCBjb250ZW50IGp1c3QgYXMgPHN0cm9uZz5maXJzdF9zb3J0X29yZGVyPC9zdHJvbmc+IGRvZXMgYW5kIGFkZHMgYW4gZXh0cmEgZmlsdGVyIHRvIHRoZSByZXN1bHRzPC9wPg0KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mIzEyMyRjb250ZW50X2ZldGNoIHNlY29uZF9zb3J0PSdvd25lcid9PC9wcmU+DQoNCiAgICAgIDxoND48ZW0+U2V0IHRoZSBkaXJlY3Rpb24gb2Ygc2Vjb25kYXJ5IHNvcnRpbmc8L2VtPjwvaDQ+DQogICAgICA8cD48c3Ryb25nPnNlY29uZF9zb3J0X29yZGVyPC9zdHJvbmc+IGlzIHRoZSBzYW1lIGFzIDxzdHJvbmc+Zmlyc3Rfc29ydF9vcmRlcjwvc3Ryb25nPiAgYnV0IGZvciA8c3Ryb25nPnNlY29uZF9zb3J0PC9zdHJvbmc+LjwvcD4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjMkY29udGVudF9mZXRjaCBzZWNvbmRfc29ydF9vcmRlcj0ndXAnfTwvcHJlPg0KDQogICAgICA8aDM+TWF4aW11bSBkYXRhIHN0cnVjdHVyZSBmb3IgZmV0Y2ggaXRlbXM6PC9oMz4NCg0KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4NCiAgJiMxMjM7Kg0KICAgICRjb250ZW50X2ZldGNoID0gYXJyYXkgb2YgY2xhc3Nlcw0KICAgIG4gPSBpbnRlZ2VyDQoNCiAgICAkY29udGVudF9mZXRjaFtuXS0mZ3Q7aXRlbSAgPSAgQ291bnRlciBmb3IgaXRlbXMgaW4gY3VycmVudCBsaXN0IChpbnRlZ2VyKQ0KICAqfQ0KICAmIzEyMyRjb250ZW50X2ZldGNoWzFdLSZndDtjb250ZW50LSZndDtpZH0NCiAgJiMxMjMkY29udGVudF9mZXRjaFsxXS0mZ3Q7Y29udGVudC0mZ3Q7YWxpYXN9DQogICYjMTIzJGNvbnRlbnRfZmV0Y2hbMV0tJmd0O2NvbnRlbnQtJmd0O3RpdGxlfQ0KICAmIzEyMyRjb250ZW50X2ZldGNoWzFdLSZndDtjb250ZW50LSZndDttZW51fQ0KICAmIzEyMyRjb250ZW50X2ZldGNoWzFdLSZndDtjb250ZW50LSZndDtzaG93fQ0KICAmIzEyMyRjb250ZW50X2ZldGNoWzFdLSZndDtjb250ZW50LSZndDthY3RpdmV9DQogICYjMTIzJGNvbnRlbnRfZmV0Y2hbMV0tJmd0O2NvbnRlbnQtJmd0O2RhdGF9DQoNCiAgJiMxMjMkY29udGVudF9mZXRjaFsxXS0mZ3Q7cGFyZW50cy0mZ3Q7aWR9DQogICYjMTIzJGNvbnRlbnRfZmV0Y2hbMV0tJmd0O3BhcmVudHMtJmd0O2FsaWFzfQ0KICAmIzEyMyRjb250ZW50X2ZldGNoWzFdLSZndDtwYXJlbnRzLSZndDt0aXRsZX0NCg0KICAmIzEyMyRjb250ZW50X2ZldGNoWzFdLSZndDtjcmVhdGVkLSZndDtkYXRlfQ0KICAmIzEyMyRjb250ZW50X2ZldGNoWzFdLSZndDtjcmVhdGVkLSZndDtieS0mZ3Q7dXNlcm5hbWV9DQogICYjMTIzJGNvbnRlbnRfZmV0Y2hbMV0tJmd0O2NyZWF0ZWQtJmd0O2J5LSZndDtsYXN0X25hbWV9DQogICYjMTIzJGNvbnRlbnRfZmV0Y2hbMV0tJmd0O2NyZWF0ZWQtJmd0O2J5LSZndDtmaXJzdF9uYW1lfQ0KICAmIzEyMyRjb250ZW50X2ZldGNoWzFdLSZndDtjcmVhdGVkLSZndDtieS0mZ3Q7ZW1haWx9DQoNCiAgJiMxMjMkY29udGVudF9mZXRjaFsxXS0mZ3Q7bW9kaWZpZWQtJmd0O2RhdGV9DQogICYjMTIzJGNvbnRlbnRfZmV0Y2hbMV0tJmd0O21vZGlmaWVkLSZndDtieS0mZ3Q7dXNlcm5hbWV9DQogICYjMTIzJGNvbnRlbnRfZmV0Y2hbMV0tJmd0O21vZGlmaWVkLSZndDtieS0mZ3Q7bGFzdF9uYW1lfQ0KICAmIzEyMyRjb250ZW50X2ZldGNoWzFdLSZndDttb2RpZmllZC0mZ3Q7YnktJmd0O2ZpcnN0X25hbWV9DQogICYjMTIzJGNvbnRlbnRfZmV0Y2hbMV0tJmd0O21vZGlmaWVkLSZndDtieS0mZ3Q7ZW1haWx9DQoNCiAgJiMxMjMkY29udGVudF9mZXRjaFsxXS0mZ3Q7ZXh0ZW5zaW9ufQ0KICAmIzEyMyoNCiAgICBBbmQgZm9yIGVhY2ggZXh0ZW5zaW9uIHlvdSBoYXZlIG5hbWVkLCB5b3Ugd2lsbCBnZXQgYW4gZXF1YWxseSBuYW1lZCBjbGFzcyBlbGVtZW50IGJlbG93ICYjMTIzJGNvbnRlbnRfZmV0Y2hbbl0tJmd0O2V4dGVuc2lvbnMNCg0KICAgIGUuZy4NCiAgKn0NCiAgJiMxMjMkY29udGVudF9mZXRjaFsxXS0+ZXh0ZW5zaW9ucy0mZ3Q7c3VtbWFyeS0mZ3Q7ZGF0YX0NCiAgJiMxMjMkY29udGVudF9mZXRjaFsxXS0mZ3Q7ZXh0ZW5zaW9ucy0mZ3Q7c3VtbWFyeS0mZ3Q7bGVuZ3RofQ0KICAgICAgPC9wcmU+DQoNCiAgICAgIDxoNT5EYXRlIHN0cnVjdHVyZSBvZiBwYWdlciBpbmZvcm1hdGlvbjwvaDU+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPg0KICAmIzEyMyRwYWdlcl9pbmZvLSZndDtjdXJyZW50fQ0KICAmIzEyMyRwYWdlcl9pbmZvLSZndDttYXh9DQogICYjMTIzJHBhZ2VyX2luZm8tJmd0O3NpemV9PC9wcmU+DQoNCiAgICAgIDxoNT5Vc2VmdWxsIHNtYXJ0eSBzbmlwcGV0cyBmb3Igd29ya2luZyB3aXRoIGNvbnRlbnRfZmV0Y2g8L2g1Pg0KICAgICAgPHA+QmVsb3cgeW91IGZpbmQgc29tZSBjb2RlIHNuaXBwZXRzIHlvdSBjYW4gdXNlIGluIHlvdXIgdGVtcGxhdGVzIGluIGNvbmp1bmN0aW9uIHdpdGggY29udGVudF9mZXRjaDwvcD4NCg0KICAgICAgPGg1PlByZXBhcmUgdGVtcGxhdGUgZm9yIHBhZ2luZzwvaDU+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPg0KICAmIzEyMzthc3NpZ24gdmFyPXBhZ2VfY2FsbCB2YWx1ZT0kc21hcnR5LmdldC5zaG93X3BhZ2V9DQogICYjMTIzO2lmICRwYWdlX2NhbGwgPT0gJyd9JiMxMjM7YXNzaWduIHZhcj1wYWdlX2NhbGwgdmFsdWU9MX0mIzEyMzsvaWZ9PC9wcmU+DQoNCiAgICAgIDxwPlRoaXMgd2lsbCBsaXN0ZW4gZm9yIFVSTCBwYXJhbWV0ZXIgY2FsbGVkIHNob3dfcGFnZSBhbmQgaXRzIHZhbHVlLiBJZiBubyBwYXJhbWV0ZXIgZm91bmQsIGNyZWF0ZSBpcyBhbmQgYXNzaWduIHZhbHVlIDEuIFVzZSAkcGFnZV9jYWxsIGFzIHRoZSB2YWx1ZSBvZiB0aGUgcGFnZSBwYXJhbWV0ZXIgJiMxMjM7Li4ucGFnZT0kcGFnZV9jYWxsLi4ufTwvcD4NCiAgICAgIDxoND4nbmV3ZXInICdvbGRlcicgcGFnZXI8L2g0Pg0KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4NCiAgJiMxMjM7aWYgJHBhZ2VfY2FsbCA+IDEgfQ0KICAgICZsdDthIGhyZWY9ImJsb2cuaHRtP3Nob3dfcGFnZT0mIzEyMzskcGFnZXJfaW5mby0+Y3VycmVudC0xfSI+bmV3ZXIgYXJ0aWNsZXMmbHQ7L2E+DQogICYjMTIzOy9pZn0NCg0KICAmIzEyMztpZiAkcGFnZXJfaW5mby0+bWF4ID4gJHBhZ2VfY2FsbH0NCiAgICAmbHQ7YSBocmVmPSJibG9nLmh0bT9zaG93X3BhZ2U9JiMxMjM7JHBhZ2VyX2luZm8tPmN1cnJlbnQrMX0iPm9sZGVyIGFydGljbGVzJmx0Oy9hPg0KICAmIzEyMzsvaWZ9PC9wcmU+DQogICAgICA8aDQ+UGFnZSBudW1iZXIgbGlzdCBwYWdlcjwvaDQ+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPg0KJiMxMjM7c2VjdGlvbiBuYW1lPSdpJyBzdGFydD0xIGxvb3A9JHBhZ2VyX2luZm8tPm1heCsxIHN0ZXA9MX0NCiZsdDthIGhyZWY9ImJsb2cuaHRtP3Nob3dfcGFnZT0mIzEyMzskc21hcnR5LnNlY3Rpb24uaS5pbmRleH0iPiYjMTIzOyRzbWFydHkuc2VjdGlvbi5pLmluZGV4fSZsdDsvYT4NCiYjMTIzOy9zZWN0aW9ufTwvcHJlPg0KICAgICAgPGg0PldhbGsgdGhyb3VnaCBhbGwgYXZhaWxhYmxlIGVsZW1lbnRzPC9oND4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+DQogICYjMTIzO2NvbnRlbnRfZmV0Y2ggLi4uIH0NCiAgJiMxMjM7Zm9yZWFjaCAkY29udGVudF9mZXRjaCBhcyAkZmV0Y2hfZGF0YX0NCiAgJiMxMjM7JGZldGNoX2RhdGEtPmNvbnRlbnQtPmRhdGF9DQogICYjMTIzOy9mb3JlYWNofTwvcHJlPg0KICAgICAgPGg0PkRpc3BsYXkgcmVhZCBtb3JlIGxpbms8L2g0Pg0KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4NCiAgJiMxMjM7Y29udGVudF9mZXRjaCAuLi4gfQ0KICAmIzEyMztmb3JlYWNoICRjb250ZW50X2ZldGNoIGFzICRmZXRjaF9kYXRhfQ0KICAgICYjMTIzO2lmICRmZXRjaF9kYXRhLT5leHRlbnNpb24gPT0gMX0NCiAgICAgICZsdDthIGhyZWY9IiYjMTIzOyRmZXRjaF9kYXRhLT5jb250ZW50LT5hbGlhc30uaHRtIj5yZWFkIG1vcmUmbHQ7L2E+DQogICAgJiMxMjM7L2lmfQ0KICAmIzEyMzsvZm9yZWFjaH08L3ByZT4NCiAgICAgIDxwPk9yaWdpbmFsIEF1dGhvciBvZiB0aGUgY29udGVudF9kdW1wIHBsdWdpbjogTmlscyBIYWFjayAmbHQ7aGVsbG9Ab3B0aWNhbHZhbHZlLmNvbSZndDs8L3A+DQogICAgPC9kaXY+DQogIDwvbGk+DQogICAgeyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip9DQogIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+DQogICAgPGgzIGNsYXNzPSJhbCI+JiMxMjM7ZmlsZXNfbGlzdH0gPHNwYW4gY2xhc3M9InNtYWxsIj5MaXN0IGZpbGVzIGFuZCBmb2xkZXJzIDxzcGFuIHN0eWxlPSJjb2xvcjpncmVlbiI+PHN0cm9uZz4obmV3KTwvc3Ryb25nPjwvc3Bhbj48L3NwYW4+PC9oMz4NCiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPg0KICAgICAgPHA+QSBzbWFydHkgcGx1Z2luIHRoYXQgbGlzdHMgZmlsZXMgYW5kIGZvbGRlcnMgaW4gYSBzcGVjaWZpYyBkaXJlY3Rvcnkgd2l0aCBmaWxlIG5hbWUsIGZpbGUgc2l6ZSwgZmlsZSBkYXRlIGFuZCBvdGhlciBvcHRpb25hbCBpbmZvLiBTaW1wbGUgYXMgaXQgbWF5IGxvb2ssIGl0IGlzIGEgc29waGlzdGljYXRlZCBwbHVnaW4gd2l0aCBtYW55IGZlYXR1cmVzIGluY2x1ZGluZyBmaWxlcyBkb3dubG9hZCBhbmQgZG93bmxvYWQgbGluayBvYmZ1c2NhdGlvbiwgc29ydGluZywgbGltaXRzLCBldGMuPC9wPg0KICAgICAgPHA+VGhlIHBsdWdpbiBoYXMgdGhlIGFiaWxpdHkgdG8gbGlzdCBmaWxlcyB1bmRlciB0aGUgcm9vdCBvZiB0aGUgQ01TIE1hZGUgU2ltcGxlIGluc3RhbGxhdGlvbiB0aHVzIG1ha2luZyBlYXNpZXIgdG8gcHJldmVudCBmaWxlIGhvdCBsaW5raW5nLiBUb2dldGhlciB3aXRoIGEgbW9kdWxlIG9yIHBsdWdpbiB0aGF0IHByb3RlY3RzIGFjY2VzcyB0byBwYWdlcyBpdCBtYWtlcyBpdCBpbXBvc3NpYmxlIHRvIHNoYXJlIGxpbmtzIHRvIGZpbGVzLjwvcD4NCiAgICAgIDxwPlRoZSBwbHVnaW4gcmV0dXJucyBhIG9iamVjdCAod2hpY2ggY2FuIGVhc2lseSBiZSBjb252ZXJ0ZWQgdG8gYW4gYXJyYXkpIHdoaWNoIHByb3BlcnRpZXMgaG9sZCB0aGUgbmVlZGVkIGRhdGEgKG1vc3Qgb2YgaXQgaW4gdGhlIGZvcm0gb2YgYXJyYXlzKSB0byBiZSB1c2VkIGluIHRlbXBsYXRlcyBpbiBhbnkgd2F5IHlvdSB3aXNoLjwvcD4NCiAgICAgIDxwPlBhcmFtZXRlcnM6PC9wPg0KICAgICAgPHVsPg0KICAgICAgICA8bGk+IDxzdHJvbmc+Zm9sZGVyPC9zdHJvbmc+IC0gZm9sZGVyIHRvIGxpc3QgZmlsZXMgZnJvbSAoZGVmYXVsdCBpcyA8c3Ryb25nPid1cGxvYWRzJzwvc3Ryb25nPikuIDxlbT4ob3B0aW9uYWwpPC9lbT48L2xpPg0KICAgICAgICA8bGk+IDxzdHJvbmc+cm9vdDwvc3Ryb25nPiAtIGEgZnVsbCBwYXRoIGZyb20gdGhlIHJvb3Qgb2YgdGhlIGFjY291bnQgZmlsZSBzeXN0ZW0sIHJlcXVpcmVkIGlmIHRoZSBmaWxlcyBhcmUgbG9jYXRlZCB1bmRlciB0aGUgc2l0ZSBpbnN0YWxsYXRpb24gcm9vdC4gKGRlZmF1bHQgaXMgPHN0cm9uZz4nJzwvc3Ryb25nPikgaS5lLiBhbiBlbXB0eSBzdHJpbmcuIFdoZW4gZW1wdHksIHRoZSBwbHVnaW4gd2lsbCBkZXJpdmUgdGhlIGFib3ZlIDxzdHJvbmc+Zm9sZGVyPC9zdHJvbmc+IHBhcmFtZXRlciBzdGFydGluZyBmcm9tIHRoZSByb290IG9mIHRoZSBzaXRlLiBIYXZpbmcgYSBmdWxsIHBhdGggZnJvbSB0aGUgcm9vdCwgYWxsb3dzIHRvIGxpc3QgZmlsZXMgZnJvbSBub24tcHVibGljIGZvbGRlcnMgYmVsb3cgdGhlIHNpdGUgcm9vdC4gVGhvc2UgZmlsZXMgY2FuIGJlIGRvd25sb2FkZWQgYnV0IG5vIGZpbGVzIGNhbiBiZSBleGVjdXRlZC48ZW0+KG9wdGlvbmFsKTwvZW0+PGJyPg0KICAgICAgICAgIE5vdGU6IEhhdmluZyByb290IHNldCB0byBhbnl0aGluZyBidXQgYW4gZW1wdHkgc3RyaW5nIGF1dG9tYXRpY2FsbHkgYWN0aXZhdGVzIGRvd25sb2FkIG9iZnVzY2F0aW9uIGZvciBzZWN1cml0eSBwdXJwb3Nlcy48L2xpPg0KICAgICAgICA8bGk+IDxzdHJvbmc+c2hvd19oaWRkZW48L3N0cm9uZz4gLSB3aGV0aGVyIHRvIHNob3cgaGlkZGVuIGZpbGVzLiBEZWZhdWx0IGlzIGZhbHNlLiBLZWVwIGluIG1pbmQgdGhhdCB0aGUgZG93bmxvYWRzIGNvdW50IGRhdGEgZmlsZSBpcyBhIGhpZGRlbiBmaWxlIGFuZCB0aGF0IGl0cyBkZWZhdWx0IGxvY2F0aW9uIGlzIHRoZSBzYW1lIGFzIDxzdHJvbmc+Zm9sZGVyPC9zdHJvbmc+LiA8ZW0+KG9wdGlvbmFsKTwvZW0+PC9saT4NCiAgICAgICAgPGxpPiA8c3Ryb25nPmNvdW50X2Rvd25sb2Fkczwvc3Ryb25nPiAtIHdoZXRoZXIgdG8gY291bnQgdGhlIGRvd25sb2Fkcy4gRGVmYXVsdCBpcyBmYWxzZS4gS2VlcCBpbiBtaW5kIHRoYXQgdGhlIGRvd25sb2FkcyBjb3VudCBkYXRhIGZpbGUgaXMgYSBoaWRkZW4gZmlsZSBhbmQgdGhhdCBpdHMgZGVmYXVsdCBsb2NhdGlvbiBpcyB0aGUgc2FtZSBhcyA8c3Ryb25nPmZvbGRlcjwvc3Ryb25nPi4gPGVtPihvcHRpb25hbCk8L2VtPjwvbGk+DQogICAgICAgIDxsaT4gPHN0cm9uZz5jb3VudGVyX2RiX2Rpcjwvc3Ryb25nPiAtIHdoZXJlIHRoZSBkb3dubG9hZHMgZGF0YSBmaWxlIHNob3VsZCBiZSBsb2NhdGVkLiAgRGVmYXVsdCBsb2NhdGlvbiBpcyB0aGUgc2FtZSBhcyA8c3Ryb25nPmZvbGRlcjwvc3Ryb25nPi4gPGVtPihvcHRpb25hbCk8L2VtPjxicj4NCiAgICAgICAgICBOb3RlOiBjaGFuZ2luZyB0aGlzIHNldHRpbmcgd2l0aG91dCBtb3ZpbmcgdGhlIGZpbGUgdG8gdGhlIHNldCBsb2NhdGlvbiB3aWxsIGNhdXNlIGRhdGEgYmVpbmcgbG9zdCBhcyBhIG5ldyBmaWxlIHdpbGwgYmUgY3JlYXRlZCBhcyBzb29uIGFzIGEgbmV3IGRvd25sb2FkIGlzIGF0dGVtcHRlZC48YnI+DQogICAgICAgICAgTm90ZTogdG8gcmVzZXQgdGhlIGRvd25sb2FkcyBjb3VudCB5b3UnbGwgbmVlZCB0byBkZWxldGUgb3IgZWRpdCB0aGUgZG93bmxvYWRzIGRhdGEgZmlsZS4NCiAgICAgICAgPC9saT4NCiAgICAgICAgPGxpPg0KICAgICAgICAgIDxzdHJvbmc+ZGxfY291bnRlcl9kYl9mbjwvc3Ryb25nPiAtIHRoZSBuYW1lIG9mIHRoZSBkb3dubG9hZHMgZGF0YSBmaWxlLCBkZWZhdWx0IGlzIDxlbT4nLmNvdW50ZXJfZGInPC9lbT4uPGVtPihvcHRpb25hbCk8L2VtPjxicj4NCiAgICAgICAgICBOb3RlOiBpbiBtb3N0IG5vbiB3aW5kb3dzIE9TcyBmaWxlIHN5c3RlbXMgYSBmaWxlIHN0YXJ0aW5nIHdpdGggYSBkb3QgaXMgaGlkZGVuIGJ5IGRlZmF1bHQuDQogICAgICAgIDwvbGk+DQogICAgICAgIDxsaT4NCiAgICAgICAgICA8c3Ryb25nPnN0cmlwX2V4dGVuc2lvbjwvc3Ryb25nPiAtIHdoZXRoZXIgdG8gaGlkZSB0aGUgZmlsZSBleHRlbnNpb24gZnJvbSB0aGUgbGlzdCwgZGVmYXVsdCBpcyA8ZW0+ZmFsc2U8L2VtPi48ZW0+KG9wdGlvbmFsKTwvZW0+DQogICAgICAgIDwvbGk+DQogICAgICAgIDxsaT4NCiAgICAgICAgICA8c3Ryb25nPm9iZnVzY2F0ZV9kb3dubG9hZDwvc3Ryb25nPiAtIHdoZXRoZXIgdG8gb2JmdXNjYXRlIHRoZSBsb2NhdGlvbiBvZiB0aGUgZmlsZXMsIGRlZmF1bHQgaXMgPGVtPnRydWU8L2VtPi48ZW0+KG9wdGlvbmFsKTwvZW0+DQogICAgICAgIDwvbGk+DQogICAgICAgIDxsaT4NCiAgICAgICAgICA8c3Ryb25nPnNlY3VyaXR5X3Rva2VuPC9zdHJvbmc+IC0gd2hldGhlciB0byByZXF1aXJlIGEgc2VjdXJpdHkgdG9rZW4gdG8gYWxsb3cgdG8gZG93bmxvYWQsIGRlZmF1bHQgaXMgPGVtPnRydWU8L2VtPi48ZW0+KG9wdGlvbmFsKTwvZW0+DQogICAgICAgIDwvbGk+DQogICAgICAgIDxsaT4NCiAgICAgICAgICA8c3Ryb25nPnNlY3VyaXR5X3Rva2VuX3F2PC9zdHJvbmc+IC0gdGhlIG5hbWUgb2YgdGhlIHF1ZXJ5IHZhcmlhYmxlIGZvciB0aGUgc2VjdXJpdHkgdG9rZW4sIGRlZmF1bHQgaXMgPGVtPl9zdDwvZW0+LjxlbT4ob3B0aW9uYWwpPC9lbT4NCiAgICAgICAgPC9saT4NCiAgICAgICAgPGxpPiA8c3Ryb25nPnNvcnQ8L3N0cm9uZz4gLSBzb3J0IG9yZGVyOg0KICAgICAgICAgIDx1bD4NCiAgICAgICAgICAgIDxsaT48c3Ryb25nPmQ8L3N0cm9uZz4gLSBzb3J0IGJ5IGRhdGUgYXNjZW5kaW5nOzwvbGk+DQogICAgICAgICAgICA8bGk+PHN0cm9uZz5kZDwvc3Ryb25nPiAtIHNvcnQgYnkgZGF0ZSBkZXNjZW5kaW5nOzwvbGk+DQogICAgICAgICAgICA8bGk+PHN0cm9uZz5zPC9zdHJvbmc+IC0gc29ydCBieSBzaXplIGFzY2VuZGluZzs8L2xpPg0KICAgICAgICAgICAgPGxpPjxzdHJvbmc+c2Q8L3N0cm9uZz4gLSBzb3J0IGJ5IHNpemUgZGVzY2VuZGluZzs8L2xpPg0KICAgICAgICAgICAgPGxpPjxzdHJvbmc+bnM8L3N0cm9uZz4gLSBzb3J0IGJ5IG5hbWUgYXNjZW5kaW5nOzwvbGk+DQogICAgICAgICAgICA8bGk+PHN0cm9uZz5uZDwvc3Ryb25nPiAtIHNvcnQgYnkgbmFtZSBkZXNjZW5kaW5nOzwvbGk+DQogICAgICAgICAgPC91bD4NCiAgICAgICAgICAoZGVmYXVsdCBpcyBzb3J0IGJ5IGZpbGV0eXBlIHRoZW4gZmlsZSBuYW1lKS4gPGVtPihvcHRpb25hbCk8L2VtPjwvbGk+DQogICAgICAgIDxsaT4gPHN0cm9uZz5kZWxpbWl0ZXI9J3lvdXIgZGVsaW1pdGVyJzwvc3Ryb25nPiAtIERlZmF1bHQgaXMgXywgdGhpcyBpcyB0aGUgZWxlbWVudCB0aGF0IHdpbGwgYmUgc3RyaXBwZWQgYW5kIHJlcGxhY2VkIHdpdGggc3BhY2VzLCB0aGlzIGVuYWJsZXMgeW91IHRvIGhhdmUgYWNjZXNzaWJsZSBmaWxlIG5hbWUgbGlua3Mgd2hpbGUgYWxzbyBoYXZpbmcgcHJldHR5IGxvb2tpbmcgZmlsZSBuYW1lcyBvbiB0aGUgZnJvbnQgZW5kLjxlbT4ob3B0aW9uYWwpPC9lbT48L2xpPg0KICAgICAgICA8bGk+IDxzdHJvbmc+c2hvd3NpemU9J2ZhbHNlJzwvc3Ryb25nPiAtIERlZmF1bHQgaXMgdHJ1ZSwgYnV0IHNldHRpbmcgdGhpcyB0byBmYWxzZSB3aWxsIGRpc2FibGUgZmlsZSBzaXplIGJlaW5nIHNob3duLjxlbT4ob3B0aW9uYWwpPC9lbT48L2xpPg0KICAgICAgICAgIHsqIDxsaT4gPHN0cm9uZz5maWxlZXh0ZW5zaW9uPSdleHRlbnNpb24nPC9zdHJvbmc+IC0gQWRkIGFueSBleHRlbnNpb25zIHRhZ3MgeW91IHdhbnQgaW5jbHVkZWQgaW4gdGhlIHJlbW92YWwgbGlzdCBpbmNsdWRpbmcgdGhlIGRvdC4gRGVmYXVsdHMgYXJlIC5wZGYsIC5kb2MsIC5kb2N4LCAudHh0LCAucnRmLCAuYXZpLCAubW92LCAuZXhlLjxlbT4ob3B0aW9uYWwpPC9lbT48L2xpPiAqfQ0KICAgICAgICA8bGk+IDxzdHJvbmc+ZGF0ZT0nZmFsc2UnPC9zdHJvbmc+IC0gRGVmYXVsdCBpcyB0cnVlLCBidXQgc2V0dGluZyB0aGlzIHRvIGZhbHNlIHdpbGwgZGlzYWJsZSBkYXRlIGJlaW5nIHNob3duLjxlbT4ob3B0aW9uYWwpPC9lbT48L2xpPg0KICAgICAgICA8bGk+IDxzdHJvbmc+ZGF0ZWZvcm1hdD0nWS1tLWQnPC9zdHJvbmc+IC0gPGEgaHJlZj0iaHR0cDovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmRhdGUucGhwIiB0YXJnZXQ9Il9ibGFuayI+RGF0ZSBmb3JtYXQ8L2E+LjxlbT4ob3B0aW9uYWwpPC9lbT48L2xpPg0KICAgICAgICA8bGk+IDxzdHJvbmc+YnJvd3NlX3N1YmRpcnM9JzEnPC9zdHJvbmc+IC0gQWxsb3cgYnJvd3NlIHN1YmRpcmVjdG9yaWVzLiBEZWZhdWx0IGlzIDAuPGVtPihvcHRpb25hbCk8L2VtPjwvbGk+DQogICAgICAgICAgeyogPGxpPiA8c3Ryb25nPnByZXR0eXVybHM9J3RydWUnPC9zdHJvbmc+IC0gRGVmYXVsdCBpcyBmYWxzZS4gVGhpcyBvbmx5IGJlY29tZXMgYW4gaXNzdWUgd2hlbiB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIGJyb3dzZXN1YmRpcnMgcGFyYW1ldGVyLjxlbT4ob3B0aW9uYWwpPC9lbT48L2xpPiAqfQ0KICAgICAgICA8bGk+IDxzdHJvbmc+bGlzdHR5cGU9J29sJzwvc3Ryb25nPiAtIERlZmF1bHQgaXMgdWwuIFRoaXMgcGFyYW1ldGVyIGFsbG93cyB5b3UgdG8gc3BlY2lmeSB3aGV0aGVyIHlvdXIgbGlzdCBzaG91bGQgYmUgYW4gT3JkZXJlZCBvciBVbm9yZGVyZWQgbGlzdC4gT25seSBvcHRpb25zIGF2YWlsYWJsZSBhcmUgdWwgYW5kIG9sLjxlbT4ob3B0aW9uYWwpPC9lbT48L2xpPg0KICAgICAgICA8bGk+IDxzdHJvbmc+bWF4ZW50cmllcz0nMTAnPC9zdHJvbmc+IC0gRGVmYXVsdCBpcyBhbGwuIFRoaXMgcGFyYW1ldGVyIGFsbG93cyB5b3UgdG8gc3BlY2lmeSB0aGUgbWF4aW11bSBudW1iZXIgb2YgZmlsZXMvZm9sZGVycyB0byBkaXNwbGF5LjxlbT4ob3B0aW9uYWwpPC9lbT48L2xpPg0KICAgICAgICA8bGk+IDxzdHJvbmc+dGFyZ2V0PSdfYmxhbmsnPC9zdHJvbmc+IC0gRGVmYXVsdCBpcyBub25lLiBQb3NzaWJsZSBvcHRpb25zIGFyZSBfYmxhbmssIF9zZWxmLCBfcGFyZW50LCBfdG9wLjxlbT4ob3B0aW9uYWwpPC9lbT48L2xpPg0KICAgICAgICA8bGk+IDxzdHJvbmc+dHJhY2tpbmc9J29yaWdpbmFsJzwvc3Ryb25nPiAtIERlZmF1bHQgaXMgdW5pdmVyc2FsLiBTcGVjaWZ5IHdoYXQgdmVyc2lvbiBvZiB0aGUgYW5hbHl0aWNzIGV2ZW50IHRyYWNraW5nIGNvZGUgYXBwZWFycy4gUG9zc2libGUgb3B0aW9ucyBhcmUgdW5pdmVyc2FsIG9yIG9yaWdpbmFsLjxlbT4ob3B0aW9uYWwpPC9lbT48L2xpPg0KICAgICAgPC91bD4NCiAgICAgICAgPHA+RXhhbXBsZTo8L3A+DQogICAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjM7ZmlsZXNfbGlzdCBmb2xkZXI9J215ZmlsZXMnfTwvcHJlPg0KICAgICAgPHA+VGhpcyBwbHVnaW4gaXMgc3RpbGwgYSB3b3JrIGluIHByb2dyZXNzLCBzbyB0aGVyZSBhcmUgc29tZSBidWdzIHlldCB0byBiZSBmaXhlZC4gRG8gc29tZSB0aG9yb3VnaCB0ZXN0cyB0byBzZWUgaWYgaXQgZml0cyB5b3VyIG5lZWRzLjwvcD4NCiAgICAgIDxwPllvdSBjYW4gdXNlIHRoZSB0ZW1wbGF0ZSBiZWxvdyBhcyBhIHN0YXJ0aW5nIHBvaW50IHRvIGJ1aWxkIHlvdXIgb3duIHRlbXBsYXRlOjwvcD4NCg0KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4NCiAgJmx0O3VsJmd0Ow0KICAgICYjMTIzO2ZvcmVhY2ggJGZpbGVzX2xpc3QtJmd0O2ZpbGVzIGFzICRvbmV9DQogICAgICAmbHQ7bGkmZ3Q7DQogICAgICAgICYjMTIzO2lmICRvbmUuc3ViX3R5cGU9PSdpbWFnZSd9DQogICAgICAgICAgICAmIzEyMzsqDQogICAgICAgICAgICAgIGlmIHlvdSB3aXNoIHRvIHVzZSB0aHVtYnMgYnkgZGVmYXVsdCB0aGUgZm9sZGVyIG5hbWUgaXMgdGh1bWJzDQogICAgICAgICAgICAgICZsdDthIGhyZWY9IiYjMTIzOyRvbmUudXJsfSImZ3Q7Jmx0O2ltZyBzcmM9IiYjMTIzOyRvbmUudGh1bWJzX3VybH0iIGFsdD0iJiMxMjM7JG9uZS5uYW1lfSImZ3Q7Jmx0Oy9hJmd0Ow0KICAgICAgICAgICAgICBidXQgdGhhdCBjYW4gYmUgb3ZlcnJpZGVuIGJ5IHVzaW5nIHRoZSB0aHVtYnNfZm9sZGVyPSdmb2xkZXJuYW1lJyBwYXJhbWV0ZXIgb24gdGhlIHRhZy4NCiAgICAgICAgICAgICp9DQogICAgICAgICAgJmx0O2EgaHJlZj0iJiMxMjM7JG9uZS51cmx9IiZndDsmbHQ7aW1nIHNyYz0iJiMxMjM7JG9uZS51cmx9IiBhbHQ9IiYjMTIzOyRvbmUubmFtZX0iJmd0OyZsdDsvYSZndDsNCiAgICAgICAgJiMxMjM7ZWxzZX0NCiAgICAgICAgICZsdDthIGhyZWY9IiYjMTIzOyRvbmUudXJsfSImZ3Q7JiMxMjM7JG9uZS5uYW1lfSZsdDsvYSZndDsNCiAgICAgICAgJiMxMjM7L2lmfQ0KICAgICAgICAmbHQ7dWwmZ3Q7DQogICAgICAgICAgJmx0O2xpJmd0O25hbWU6ICYjMTIzOyRvbmUubmFtZX0mbHQ7L2xpJmd0Ow0KICAgICAgICAgICZsdDtsaSZndDt0eXBlOiAmIzEyMzskb25lLnR5cGV9Jmx0Oy9saSZndDsNCiAgICAgICAgICAmbHQ7bGkmZ3Q7dXJsOiAmIzEyMzskb25lLnVybH0mbHQ7L2xpJmd0Ow0KICAgICAgICAmIzEyMztpZiAkb25lLnR5cGUgPT0gJ2ZpbGUnfQ0KICAgICAgICAgICZsdDtsaSZndDtmaWxlX2V4dDogJiMxMjM7JG9uZS5maWxlX2V4dH0mbHQ7L2xpJmd0Ow0KICAgICAgICAgICZsdDtsaSZndDtzdWJfdHlwZTogJiMxMjM7JG9uZS5zdWJfdHlwZX0mbHQ7L2xpJmd0Ow0KICAgICAgICAgICZsdDtsaSZndDt0aXRsZTogJiMxMjM7JG9uZS50aXRsZX0mbHQ7L2xpJmd0Ow0KICAgICAgICAgICZsdDtsaSZndDtzaXplOiAmIzEyMzskb25lLnNpemV9Jmx0Oy9saSZndDsNCiAgICAgICAgICAmbHQ7bGkmZ3Q7ZGF0ZTogJiMxMjM7JG9uZS5kYXRlfSZsdDsvbGkmZ3Q7DQogICAgICAgICAgJiMxMjM7aWYgaXNzZXQoJG9uZS5kb3dubG9hZF9jb3VudCl9Jmx0O2xpJmd0O2Rvd25sb2FkczogJiMxMjM7JG9uZS5kb3dubG9hZF9jb3VudH0mbHQ7L2xpJmd0OyYjMTIzOy9pZn0NCiAgICAgICAgJiMxMjM7ZWxzZWlmICRvbmUudHlwZSA9PSAnZGlyJ30NCiAgICAgICAgICAmbHQ7bGkmZ3Q7ZmlsZV9leHQ6ICYjMTIzOyRvbmUuZmlsZV9leHR9Jmx0Oy9saSZndDsNCiAgICAgICAgICAmbHQ7bGkmZ3Q7dGl0bGU6ICYjMTIzOyRvbmUudGl0bGV9Jmx0Oy9saSZndDsNCiAgICAgICAgICAmbHQ7bGkmZ3Q7ZGF0ZTogJiMxMjM7JG9uZS5kYXRlfSZsdDsvbGkmZ3Q7DQogICAgICAgICYjMTIzOy9pZn0NCiAgICAgICAgJmx0Oy91bCZndDsNCiAgICAgICZsdDsvbGkmZ3Q7DQogICAgJiMxMjM7L2ZvcmVhY2h9DQogICZsdDsvdWwmZ3Q7DQogICZsdDtociZndDsNCiAgVG90YWwgU2l6ZSBUZXh0OiAmIzEyMzskZmlsZXNfbGlzdC0mZ3Q7dG90YWxfc2l6ZV90ZXh0fQ0KICBUb3RhbCBTaXplOiAmIzEyMzskZmlsZXNfbGlzdC0mZ3Q7dG90YWxfc2l6ZX08L3ByZT4NCiAgICA8L2Rpdj4NCiAgPC9saT4NCiAgICB7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKn0NCiAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4NCiAgICA8aDMgY2xhc3M9ImFsIj4mIzEyMztjb250ZW50X3Byb3RlY3R9IDxzcGFuIGNsYXNzPSJzbWFsbCI+UHJvdGVjdCBjb250ZW50IHdpdGggYSBwYXNzd29yZCA8c3BhbiBzdHlsZT0iY29sb3I6Z3JlZW4iPjxzdHJvbmc+KG5ldyk8L3N0cm9uZz48L3NwYW4+PC9zcGFuPjwvaDM+DQogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4NCiAgICAgIDxwPlRoaXMgaXMgYSBmb3JrIG9mIDxzdHJvbmc+cGFnZV9wcm90ZWN0PC9zdHJvbmc+IGJ5IEpvIE1vcmcuIFNhbWUgY29kZSBiYXNlLCBhIGZldyBkaWZmZXJlbmNlcyBlbWVyZ2VkICBmcm9tIGJlaW5nIGludGVncmF0ZWQgaW4gYSBtb2R1bGUsIGluIHBhcnRpY3VsYXIgdGhlIGxhY2sgb2YgbmVlZCB0byBpbml0aWFsaXplIHRoZSBwbHVnaW4gYXMgaW4gdGhlIG9yaWdpbmFsIHBsdWdpbi48YnI+DQogICAgICAgIFRoaXMgcGx1Z2luIGFsbG93cyB5b3UgdG8gcHJvdGVjdCBhIG51bWJlciBvZiBwYWdlcyB3aXRoIG9uZSBvciBtb3JlIHBhc3N3b3JkcyBlaXRoZXIgYnkgYmVpbmcgc2V0IG9uY2UgcGVyIGVhY2ggcGFnZSB5b3Ugd2FudCB0byBwcm90ZWN0LCBvciBieSBiZWluZyBzZXQgb24gYSBwYWdlIHRlbXBsYXRlLCBhbGxvd2luZyB5b3UgdG8gcHJvdGVjdCBhbGwgcGFnZXMgY29ubmVjdGVkIHRvIHRoYXQgdGVtcGxhdGUuIEl0IGlzIGNvbXBsZW1lbnRlZCBieSBhIGJsb2NrIHBsdWdpbiA8Y29kZT48c3Ryb25nPiYjMTIzO3Byb3RlY3R9IDxlbT4uLi5jb250ZW50IHlvdSB3YW50IHRvIHByb3RlY3QuLi48L2VtPiAmIzEyMzsvcHJvdGVjdH08L3N0cm9uZz48L2NvZGU+ICBhbmQgYSBtb2RpZmllciA8Y29kZT48c3Ryb25nPiYjMTIzOydwcm90ZWN0IHRoaXMnfHByb3RlY3R9PC9zdHJvbmc+PC9jb2RlPjwvcD4NCg0KICAgICAgICA8ZGl2IGNsYXNzPSJ3YXJuaW5nIiBzdHlsZT0iZGlzcGxheTpibG9jazsiPg0KICAgICAgICAgIDxwPg0KICAgICAgICAgICAgPHN0cm9uZz5Ob3RlOiA8L3N0cm9uZz4gdGhlcmUgaXMgYSBwYXJ0aWN1bGFyaXR5IGluIHRoZSB3YXkgQ01TTVMgcmVuZGVycyBjb250ZW50IHdoaWNoIG1heSBleHBvc2UgcHJvdGVjdGVkIGNvbnRlbnQgaW4gY2VydGFpbiBzaXR1YXRpb25zLiBUbyBwcmV2ZW50IHRoYXQgdGhlcmUgYXJlIGEgZmV3IHJ1bGVzIHlvdSBuZWVkIHRvIGZvbGxvdzoNCiAgICAgICAgICA8L3A+DQogICAgICAgICAgPHVsPg0KICAgICAgICAgICAgPGxpPg0KICAgICAgICAgICAgICBXaGVuIHRoZSBkZWZhdWx0IGNvbnRlbnQgYmxvY2sgaXMgdGhlIG9ubHkgb25lIHdpdGggdGhlIGNvbnRlbnQgdG8gcHJvdGVjdDoNCiAgICAgICAgICAgICAgPG9sIHR5cGU9IjEiPg0KICAgICAgICAgICAgICAgIDxsaT51c2UgYWxsIHRoZSBsb2dpYyBpbnNpZGUgdGhlIGJsb2NrIGl0c2VsZiBldmVuIGlmIHRoZSBwYXNzd29yZHMgYXJlIHNldCBvbiB0aGUgdGVtcGxhdGU7PC9saT4NCiAgICAgICAgICAgICAgICA8bGk+c2V0IHRoZSBsb2dpbiBmb3JtIGFuZCBwYXNzd29yZHMgYXMgY2xvc2UgdG8gdGhlIHRvcCBvZiB0aGUgY29udGVudCBhcyBwb3NzaWJsZSB3aGVuIHNldCBpbnNpZGUgdGhlIGNvbnRlbnQgYmxvY2s7PC9saT4NCiAgICAgICAgICAgICAgICA8bGk+dXNpbmcgYW55IG90aGVyIGNvbnRlbnQgcHJvcGVydHkgdG8gc2V0IHRoZSBsb2dpYyAoYXMgdGhlIDxzdHJvbmc+U21hcnR5IGRhdGEgb3IgbG9naWMgdGhhdCBpcyBzcGVjaWZpYyB0byB0aGlzIHBhZ2U8L3N0cm9uZz4pIG1heSB3b3JrIG9uIGEgdHlwaWNhbCBzZXR0aW5nIGJ1dCB3aWxsIGxlYXZlIHRoZSBwcm90ZWN0ZWQgY29udGVudCB2dWxuZXJhYmxlIGluIGNlcnRhaW4gY2lyY3Vtc3RhbmNlczs8L2xpPg0KICAgICAgICAgICAgICAgIDxsaT5rZWVwIGluIG1pbmQgdGhhdCB0aGVyZSBpcyBhIGZlYXR1cmUgaW4gQ01TTVMgdGhhdCB3aWxsIHN0cmlwIGRvd24gdGhlIHdob2xlIHRlbXBsYXRlIGFuZCByZW5kZXIgb25seSB0aGUgZGVmYXVsdCBjb250ZW50LCBzbyBmb2xsb3dpbmcgdGhlIGFib3ZlIHJ1bGVzIHdpbGwgcHJldmVudCBleHBvc3VyZSBvZiB0aGUgcHJvdGVjdGVkIGNvbnRlbnQ7PC9saT4NCiAgICAgICAgICAgICAgPC9vbD4NCiAgICAgICAgICAgIDwvbGk+DQogICAgICAgICAgICA8bGk+aWYgeW91IGhhdmUgbW9yZSB0aGFuIHRoZSBkZWZhdWx0IGNvbnRlbnQgYmxvY2s6DQogICAgICAgICAgICAgICA8b2wgdHlwZT0iMSI+DQogICAgICAgICAgICAgICAgPGxpPnByZWZlcmFibHkgZG9uJ3QgdXNlIHRoZSBtYWluIGJsb2NrIHRvIGtlZXAgdGhlIHByb3RlY3RlZCBjb250ZW50LCB1c2UgYSBkaWZmZXJlbnQgYmxvY2sgZm9yIGl0OzwvbGk+DQogICAgICAgICAgICAgICAgPGxpPmNvbnRlbnQgYmxvY2tzIG90aGVyIHRoYW4gdGhlIG1haW4gYXJlIG5vdCB2dWxuZXJhYmxlIHRvIGJlaW5nIGV4cG9zZWQgYnkgdGhlIGFib3ZlIGRlc2NyaWJlZCBDTVNNUyBmZWF0dXJlOzwvbGk+DQogICAgICAgICAgICAgICAgPGxpPmlmIHlvdSBtdXN0IHVzZSBpdCB0aGVuIGZvbGxvdyB0aGUgcnVsZXMgZm9yIHRoZSBkZWZhdWx0IGNvbnRlbnQgYXMgaW4gdGhlIHByZXZpb3VzIHN1Z2dlc3Rpb247PC9saT4NCiAgICAgICAgICAgICAgPC9vbD4NCiAgICAgICAgICAgIDwvbGk+DQogICAgICAgICAgPC91bD4NCiAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgPGRpdiBjbGFzcz0id2FybmluZyIgc3R5bGU9ImRpc3BsYXk6YmxvY2s7Ij4NCiAgICAgICAgICA8cD4NCiAgICAgICAgICAgIDxzdHJvbmc+Tm90ZTogPC9zdHJvbmc+IFRoaXMgaXMgYSBzaW1wbGUsIHJlbGF0aXZlbHkgc2FmZSB3YXkgb2YgcHJvdGVjdGluZyBjb250ZW50IHdpdGhvdXQgaGF2aW5nIHRvIGluc3RhbGwgYSBmdWxsLWZsZWRnZWQgdXNlcnMgbWFuYWdlbWVudCBtb2R1bGUuIElmIHlvdSBuZWVkIGEgbW9yZSBjb21wbGV4IGFuZCBjb21wbGV0ZSB1c2VycycgYWNjZXNzIG1hbmFnZW1lbnQgbW9kdWxlIHBsZWFzZSBjb25zaWRlciB1c2luZyA8c3Ryb25nPk1BTVM8L3N0cm9uZz4uDQogICAgICAgICAgPC9wPg0KICAgICAgICA8L2Rpdj4NCg0KICAgICAgICA8ZGl2IGNsYXNzPSJpbmZvcm1hdGlvbiIgc3R5bGU9ImRpc3BsYXk6YmxvY2s7Ij4NCiAgICAgICAgICA8cD4NCiAgICAgICAgICAgIEJlY2F1c2Ugb2YgdGhpcyBwbHVnaW4gaXMgYSBmb3JrIG9mIHRoZSBkaXNjb250aW51ZWQgUGFnZSBQcm90ZWN0IChwYWdlX3Byb3RlY3QpIHRoZXJlIGFyZSBhIGZldyBwYXJhbWV0ZXJzIHRoYXQgd2VyZSBsZWZ0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBBcyB0aGlzIHBsdWdpbiBkb2Vzbid0IHJlcXVpcmUgaW5pdGlhbGl6YXRpb24sIHdoaWNoIGlzIGRvbmUgYXQgdGhlIG1vZHVsZSBsZXZlbCB3aGVuIGl0IGlzIGxvYWRlZCwgdGhlIGRlZmF1bHQgYW5kIHRoZSBzZXQgYWN0aW9ucyBhcmUgbm93IHRoZSBzYW1lIHRoaW5nLiBUaGF0IG1lYW5zIHRoYXQgYSB0eXBpY2FsIGluaXRpYWxpemF0aW9uIHRhZyBkb2VzIG5vdGhpbmcgb24gaXRzIG93biBhbmQgY2FuIGJlIHNhZmVseSByZW1vdmVkIChpZiByZXBsYWNlZCBmcm9tIGEgcGFnZV9wcm90ZWN0IG9yaWdpbmFsIHRhZyksIGJ1dCBsZWF2aW5nIGl0IGluIHBsYWNlIGRvZXNuJ3QgYWZmZWN0IGluIGFueSB3YXkgdGhlIHNpdGUncyBwZXJmb3JtYW5jZS4NCiAgICAgICAgICA8L3A+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJpbmZvcm1hdGlvbiIgc3R5bGU9ImRpc3BsYXk6YmxvY2s7Ij4NCiAgICAgICAgICA8cD4NCiAgICAgICAgICAgIFBhcmFtZXRlcnMgbWFya2VkIGFzIDxzdHJvbmc+PGVtPihwZXJzaXN0ZW50KSA8L2VtPjwvc3Ryb25nPiBhcmUgc2V0IG9uY2UgZm9yIHRoZSB3aG9sZSBwYWdlIHJlcXVlc3QuIFRoZSBkZWZhdWx0IGFjdGlvbiBjYW4gc2V0IGFueSBhbmQgYWxsIG9mIHRoZW0gd2l0aG91dCB0aGUgbmVlZCB0byByZXBlYXQgdGhlbSBvbiBldmVyeSB0YWcgY2FsbC4gSG93ZXZlciwgYSBsYXRlciBjYWxsIGNhbiBvdmVycmlkZSBhIHByZXZpb3VzbHkgc2V0IHBhcmFtZXRlci4NCiAgICAgICAgICA8L3A+DQogICAgICAgIDwvZGl2Pg0KDQogICAgICAgIDxwPlBhcmFtZXRlcnM6PC9wPg0KDQogICAgICAgIDx1bD4NCiAgICAgICAgICA8bGk+PHN0cm9uZz5hY3Rpb248L3N0cm9uZz4gPGVtPihvcHRpb25hbCk8L2VtPiAtIHBvc3NpYmxlIHZhbHVlczoNCiAgICAgICAgICAgIDx1bD4NCiAgICAgICAgICAgICAgPGxpPjxlbT48c3Ryb25nPmRlZmF1bHQ8L3N0cm9uZz48L2VtPiA8c3Ryb25nPiA8ZW0+KGRlZmF1bHQpPC9lbT48L3N0cm9uZz46IHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgdGhlIG1vZHVsZSBhbmQgY2FuIGJlIG9taXR0ZWQuIE9uIGl0cyBvd24gaXQgZG9lcyBub3RoaW5nLCBidXQgY2FuIGJlIHVzZWQgYXMgYSBzZXQgYWN0aW9uIGluIGNvbmp1bmN0aW9uIHdpdGggb3RoZXIgcGFyYW1ldGVyczs8L2xpPg0KICAgICAgICAgICAgICA8bGk+PGVtPjxzdHJvbmc+c2V0PC9zdHJvbmc+IChsZWdhY3kpIChkZXByZWNhdGVkKTwvZW0+OiB1c2UgdGhpcyBhY3Rpb24gdG8gZGlzdHJpYnV0ZSBwZXJzaXN0ZW50IHBhcmFtZXRlcnMgdGhvdWdoIGRpZmZlcmVudCB0YWdzIG9uIHRoZSBzYW1lIHBhZ2UgKGhlbHBzIHdpdGggdGVtcGxhdGUgcmVhZGFiaWxpdHkpLCB0aGlzIGFjdGlvbiBub3cgYmVpbmcgcGFydCBvZiB0aGUgZGVmYXVsdCBhY3Rpb24gY2FuIGFsc28gYmUgb21pdHRlZDs8L2xpPg0KICAgICAgICAgICAgICA8bGk+PGVtPjxzdHJvbmc+Zm9ybTwvc3Ryb25nPjwvZW0+OiBzaG93IGVpdGhlciB0aGUgPHN0cm9uZz5sb2dpbjwvc3Ryb25nPiBmb3JtIG9yIHRoZSA8c3Ryb25nPmxvZ291dDwvc3Ryb25nPiBmb3JtLCBkZXBlbmRpbmcgb24gY3VycmVudCB1c2VyIHN0YXRlOzwvbGk+DQogICAgICAgICAgICA8L3VsPg0KICAgICAgICAgIDwvbGk+DQogICAgICAgICAgPGxpPjxzdHJvbmc+bG9naW5fYWxpYXM8L3N0cm9uZz4gPGVtPihvcHRpb25hbCkgKHBlcnNpc3RlbnQpIDwvZW0+IC0gYW4gZXhpc3RpbmcgcGFnZSBhbGlhcyAoZGVmYXVsdHMgdG8gbm8gcmVkaXJlY3Rpb24pOiB0aGlzIHdpbGwgYmUgdXNlZCB0byByZWRpcmVjdCBhZnRlciBsb2dpbiBpZiBuZWVkZWQ7PC9saT4NCiAgICAgICAgICA8bGk+PHN0cm9uZz5sb2dvdXRfYWxpYXM8L3N0cm9uZz4gPGVtPihvcHRpb25hbCkgKHBlcnNpc3RlbnQpPC9lbT4gLSBhbiBleGlzdGluZyBwYWdlIGFsaWFzIChkZWZhdWx0cyB0byBjdXJyZW50IHBhZ2UgaS5lLiB0aGUgcGFnZSB3aGVyZSB0aGUgcGx1Z2luIGlzIGJlaW5nIHVzZWQpOiB0aGlzIHdpbGwgYmUgdXNlZCB0byByZWRpcmVjdCBhZnRlciBsb2dvdXQ7PC9saT4NCiAgICAgICAgICA8bGk+PHN0cm9uZz50aW1lb3V0PC9zdHJvbmc+IDxlbT4ob3B0aW9uYWwpIChwZXJzaXN0ZW50KTwvZW0+IC0gaWYgc2V0IHRvIGEgdmFsdWUgaGlnaGVyIHRoYW4gMCBpdCB3aWxsIHNldCBhIGNvb2tpZSBhbmQgdXNlIHRoaXMgdmFsdWUgYXMgbWludXRlcyBiZWZvcmUgbG9naW4gdGltZXMgb3V0OzwvbGk+DQogICAgICAgICAgPGxpPjxzdHJvbmc+Y29va2llX25hbWU8L3N0cm9uZz4gPGVtPihvcHRpb25hbCkgKHBlcnNpc3RlbnQpPC9lbT4gLSB0aGUgbmFtZSBvZiB0aGUgY29va2llIChkZWZhdWx0cyB0byA8c3Ryb25nPmNwX2F1dGg8L3N0cm9uZz4pOzwvbGk+DQogICAgICAgICAgPGxpPjxzdHJvbmc+d2VsY29tZV9tc2c8L3N0cm9uZz4gPGVtPihvcHRpb25hbCkgKHBlcnNpc3RlbnQpPC9lbT4gLSBhIG1lc3NhZ2UgdG8gYmUgc2hvd24gYXMgYSB3ZWxjb21lIHRleHQgb24gdGhlIGxvZ2luIGZvcm07PC9saT4NCiAgICAgICAgICA8bGk+PHN0cm9uZz5wcm90ZWN0ZWRfbXNnPC9zdHJvbmc+IDxlbT4ob3B0aW9uYWwpIChwZXJzaXN0ZW50KTwvZW0+IC0gYSBtZXNzYWdlIHRvIHJlcGxhY2UgdGhlIHByb3RlY3RlZCBjb250ZW50IChkZWZhdWx0cyB0byBubyBtZXNzYWdlIGF0IGFsbCk7PC9saT4NCiAgICAgICAgICA8bGk+PHN0cm9uZz5lcnJvcl9tc2c8L3N0cm9uZz4gPGVtPihvcHRpb25hbCkgKHBlcnNpc3RlbnQpPC9lbT4gLSBhbiBlcnJvciBtZXNzYWdlIHRvIGJlIHNob3duIG9uIHBhc3N3b3JkIGVycm9yczs8L2xpPg0KICAgICAgICA8L3VsPg0KICAgICAgICA8cD5FeGNsdXNpdmUgdG8gZm9ybSBhY3Rpb246PC9wPg0KICAgICAgICA8dWw+DQogICAgICAgICAgPGxpPjxzdHJvbmc+bG9naW5fYnRuPC9zdHJvbmc+IDxlbT4ob3B0aW9uYWwpPC9lbT4gLSB0ZXh0IG9mIHRoZSBsb2dpbiBidXR0b24gY2FwdGlvbiAoZGVmYXVsdHMgdG8gTG9naW4pOzwvbGk+DQogICAgICAgICAgPGxpPjxzdHJvbmc+bG9nb3V0X2J0bjwvc3Ryb25nPiA8ZW0+KG9wdGlvbmFsKTwvZW0+IC0gdGV4dCBvZiB0aGUgbG9nb3V0IGJ1dHRvbiBjYXB0aW9uKGRlZmF1bHRzIHRvIExvZ291dDs8L2xpPg0KICAgICAgICAgIDxsaT48c3Ryb25nPmZvcm1faWQ8L3N0cm9uZz4gPGVtPihvcHRpb25hbCk8L2VtPiAtIGxvZ2luIGZvcm0gaWQ7PC9saT4NCiAgICAgICAgICA8bGk+PHN0cm9uZz5mb3JtX2NsYXNzPC9zdHJvbmc+IDxlbT4ob3B0aW9uYWwpPC9lbT4gLSBsb2dpbiBmb3JtIGNsYXNzOzwvbGk+DQogICAgICAgICAgPGxpPjxzdHJvbmc+aW5fcGFzc19pZDwvc3Ryb25nPiA8ZW0+KG9wdGlvbmFsKTwvZW0+IC0gcGFzc3dvcmQgaW5wdXQgaWQ7PC9saT4NCiAgICAgICAgICA8bGk+PHN0cm9uZz5pbl9wYXNzX2NsYXNzPC9zdHJvbmc+IDxlbT4ob3B0aW9uYWwpPC9lbT4gLSBwYXNzd29yZCBpbnB1dCBjbGFzczs8L2xpPg0KICAgICAgICAgIDxsaT48c3Ryb25nPmJ1dHRvbl9pZDwvc3Ryb25nPiA8ZW0+KG9wdGlvbmFsKTwvZW0+IC0gYm90aCBidXR0b25zIGlkOzwvbGk+DQogICAgICAgICAgPGxpPjxzdHJvbmc+YnV0dG9uX2NsYXNzPC9zdHJvbmc+IDxlbT4ob3B0aW9uYWwpPC9lbT4gLSBib3RoIGJ1dHRvbnMgY2xhc3M7PC9saT4NCiAgICAgICAgPC91bD4NCiAgICAgICAgPHA+VGhlIHByb3RlY3QgYmxvY2sgdGFnIGFjY2VwdHMgb25seSBvbmUgcGFyYW1ldGVyOjwvcD4NCiAgICAgICAgPHVsPg0KICAgICAgICAgIDxsaT48c3Ryb25nPnByb3RlY3RlZF9tc2c8L3N0cm9uZz4gPGVtPihvcHRpb25hbCk8L2VtPiAtIGEgbWVzc2FnZSB0byByZXBsYWNlIHRoZSBwcm90ZWN0ZWQgY29udGVudCAoZGVmYXVsdHMgdG8gd2hhdGV2ZXIgd2FzIHNldCBvbiBhIHByZXZpb3VzIHBlcnNpc3RlbnQgdGFnIGNhbGwpOzwvbGk+DQogICAgICAgIDwvdWw+DQogICAgICAgIDxwPlRoZSBwcm90ZWN0IG1vZGlmaWVyIGRvZXNuJ3QgdGFrZSBhbnkgcGFyYW1ldGVycy48L3A+DQogICAgICAgIDxocj4NCiAgICAgICAgPHA+RXhhbXBsZSBhcyBhIGNvbnRlbnQgYmxvY2s6PC9wPg0KICAgICAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+ICAmIzEyMztwcm90ZWN0fSAuLi5jb250ZW50IHlvdSB3YW50IHRvIHByb3RlY3QuLi4gJiMxMjM7L3Byb3RlY3R9IGFuZCBhIG1vZGlmaWVyIDwvcHJlPg0KICAgICAgICA8cD5FeGFtcGxlIGFzIGEgY29udGVudCBtb2RpZmllcjo8L3A+DQogICAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+ICAmIzEyMzsncHJvdGVjdCB0aGlzJ3xwcm90ZWN0fTwvcHJlPg0KDQogICAgICAgIDxoMz5RdWljayBVc2U8L2gzPg0KICAgICAgICA8cD5UaGUgcGx1Z2luIGFsbG93cyBmb3IgZmFzdCBkZXBsb3ltZW50IG9mIGEgc2VjdXJlIHBhZ2UuIENvbnRlbnQgUHJvdGVjdCB3aWxsIGFzc2lnbiBhIDxzdHJvbmc+U21hcnR5PC9zdHJvbmc+IHZhcmlhYmxlLCA8c3Ryb25nPiRjcF9sb2dnZWRfaW48L3N0cm9uZz4gYnkgZGVmYXVsdCwgd2l0aCBhIGJvb2xlYW4gdmFsdWUgZmxhZ2dpbmcgd2hldGhlciB0aGUgY3VycmVudCB1c2VyIGlzIGxvZ2dlZCBpbiBvciBub3QuPC9wPg0KICAgICAgICA8cD5FeGFtcGxlOjwvcD4NCiAgICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4gICYjMTIzO2NvbnRlbnRfcHJvdGVjdCBhY3Rpb249J2Zvcm0nIHBhc3N3b3Jkcz0ncGFzczEnfTwvcHJlPg0KDQogICAgICAgIDxwPlRoaXMgaXMgYSBzaW1wbGUgd2F5IHRvIGhpZGUgdGhlIGNvbnRlbnQgb2YgYSBwYWdlIGZyb20gbm9uLWF1dGhvcml6ZWQgdXNlcnM6PC9wPg0KICAgICAgICA8ZGl2IGNsYXNzPSJpbmZvcm1hdGlvbiIgc3R5bGU9ImRpc3BsYXk6YmxvY2s7Ij4NCiAgICAgICAgICA8cD5Vc2UgdGhpcyBvbiB0aGUgcGFnZSBjb250ZW50ITwvcD4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+ICAmIzEyMztjb250ZW50X3Byb3RlY3QgYWN0aW9uPSdmb3JtJyBwYXNzd29yZHM9J3Bhc3MxJ30NCiAgJiMxMjM7aWYgJGNwX2xvZ2dlZF9pbn0NCiAgICBUaGUgYWxsb3dlZCBjb250ZW50Li4uLg0KICAmIzEyMztlbHNlfQ0KICAgIE5vdCBMb2dnZWQgaW4hDQogICYjMTIzOy9pZn08L3ByZT4NCiAgICAgICAgPHA+VGhlIHByZXZpb3VzIHNuaXBwZXQgd2lsbCBzaG93IGEgZm9ybSBmb3Igbm9uLWxvZ2dlZC1pbiB1c2VycywgYWxvbmcgd2l0aCB0aGUgdGV4dCAiTm90IExvZ2dlZCBpbiEiPC9wPg0KICAgICAgICA8cD5Gb3IgdGhlIGxvZ2dlZC1pbiB1c2VyIHdpbGwgcHJlc2VudCBhIGxvZ291dCBidXR0b24sIGFuZCAiVGhlIGFsbG93ZWQgY29udGVudC4uLi4iLjwvcD4NCiAgICAgICAgPGhyPg0KICAgICAgICA8cD5UaGlzIGlzIGEgc2ltcGxlIHdheSB0byBoaWRlIHRoZSBjb250ZW50IG9mIGFsbCBwYWdlcyB3aXRoIHRoaXMgdGVtcGxhdGUgZnJvbSBub24tYXV0aG9yaXplZCB1c2Vyczo8L3A+DQogICAgICAgIDxkaXYgY2xhc3M9ImluZm9ybWF0aW9uIiBzdHlsZT0iZGlzcGxheTpibG9jazsiPg0KICAgICAgICAgIDxwPlVzZSB0aGlzIG9uIHRoZSBtYWluIHRlbXBsYXRlITwvcD4NCiAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4gICYjMTIzO2NvbnRlbnQgbmFtZT1wcm90ZWN0ZWQgYXNzaWduPSdwcm90ZWN0ZWQnfQ0KICAmIzEyMztjb250ZW50X3Byb3RlY3QgYWN0aW9uPSdmb3JtJyBwYXNzd29yZHM9J3Bhc3MxJ30NCiAgJiMxMjM7aWYgJGNwX2xvZ2dlZF9pbn0NCiAgICAgICYjMTIzOyRwcm90ZWN0ZWR9DQogICYjMTIzO2Vsc2V9DQogICAgTm90IExvZ2dlZCBpbiENCiAgJiMxMjM7L2lmfQ0KICAmIzEyMzsqIG9yICp9DQogICYjMTIzOyRwcm90ZWN0ZWR8cHJvdGVjdH0NCiAgJiMxMjM7KiBvciAqfQ0KICAmIzEyMztwcm90ZWN0fSYjMTIzOyRwcm90ZWN0ZWR9JiMxMjM7L3Byb3RlY3R9PC9wcmU+DQoNCiAgICAgIDxwPlRoZSBwcmV2aW91cyBzbmlwcGV0IHdpbGwgc2hvdyBhIGZvcm0gZm9yIG5vbi1sb2dnZWQtaW4gdXNlcnMsIGFsb25nIHdpdGggdGhlIHRleHQgIk5vdCBMb2dnZWQgaW4hIjwvcD4NCiAgICAgIDxwPkZvciB0aGUgbG9nZ2VkLWluIHVzZXIgd2lsbCBwcmVzZW50IGEgbG9nb3V0IGJ1dHRvbiwgYW5kIHRoZSBjb250ZW50IG9mIHRoZSBwYWdlLjwvcD4NCiAgICAgIDxocj4NCiAgICAgIDxwPllvdSBjYW4gYWxzbyB1c2UgdGhpcyB0YWcgdG8gYWRkIGEgZmV3IHBhcmFtZXRlcnMgZXhjZXB0IGZvciBhY3Rpb249J3NldCcgYW5kIGFjdGlvbj0nZm9ybScgKDxlbT5hbmQgYWxsIGZvcm0gZXhjbHVzaXZlIHBhcmFtZXRlcnMgYXMgdGhleSBhcmUgb25seSBwZXJ0aW5lbnQgdG8gdGhlIGZvcm0gYWN0aW9uIGFuZCBub3QgcGVyc2lzdGVudDwvZW0+KS4gVXNlOjwvcD4NCiAgICAgIDx1bD4NCiAgICAgICAgPGxpPjxzdHJvbmc+JiMxMjM7Y29udGVudF9wcm90ZWN0IHBhc3N3b3Jkcz0nPC9zdHJvbmc+cGFzczFbLHBhc3M8ZW0+PHN0cm9uZz4yPC9zdHJvbmc+PC9lbT5dLi4uWyxwYXNzPGVtPjxzdHJvbmc+bjwvc3Ryb25nPjwvZW0+XTxzdHJvbmc+J308L3N0cm9uZz48L2xpPg0KICAgICAgICA8bGk+PHN0cm9uZz4mIzEyMztjb250ZW50X3Byb3RlY3QgYWN0aW9uPSc8L3N0cm9uZz5kZWZhdWx0PHN0cm9uZz4nIHBhc3N3b3Jkcz0nPC9zdHJvbmc+cGFzczFbLHBhc3M8ZW0+PHN0cm9uZz4yPC9zdHJvbmc+PC9lbT5dLi4uWyxwYXNzPGVtPjxzdHJvbmc+bjwvc3Ryb25nPjwvZW0+XTxzdHJvbmc+J308L3N0cm9uZz48L2xpPg0KICAgICAgPC91bD4NCg0KICAgICAgPHA+UHV0IHRoaXMgb24gdGhlIGZpZWxkIDxzdHJvbmc+U21hcnR5IGRhdGEgb3IgbG9naWMgdGhhdCBpcyBzcGVjaWZpYyB0byB0aGlzIHBhZ2U8L3N0cm9uZz4gZm91bmQgb24gdGhlIHBhZ2UgPGVtPjxzdHJvbmc+b3B0aW9ucyB0YWI8L3N0cm9uZz48L2VtPjo8L3A+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiAgJiMxMjM7Y29udGVudF9wcm90ZWN0IHBhc3N3b3Jkcz0ncGFzc3dvcmQxLHBhc3N3b3IyLHBhc3N3b3JkMyxwYXNzd29yZG4nfTwvcHJlPg0KICAgICAgPHA+WW91IGNhbiBzZXQgdGhlIHBhc3N3b3JkcywgYW5kIGFueSBvdGhlciBwYXJhbWV0ZXJzIG9uIHRoZSBpbml0aWFsaXphdGlvbiB0YWcgYXMgbW9zdCBvZiB0aGUgcGFyYW1ldGVycyBhcmUgcGVyc2lzdGVudCB0aHJvdWdoIHRoZSBzYW1lIHJlcXVlc3QuPC9wPg0KICAgICAgPHA+UHV0IHRoaXMgb24gdGhlIHRvcCBvZiB5b3VyIHRlbXBsYXRlczo8L3A+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiAgJiMxMjM7Y29udGVudF9wcm90ZWN0IHBhc3N3b3Jkcz0ncGFzc3dvcmQxLHBhc3N3b3IyLHBhc3N3b3JkMyxwYXNzd29yZG4nfTwvcHJlPg0KDQogICAgICA8aDM+VGhlIEZvcm0gQWN0aW9uPC9oMz4NCg0KICAgICAgPHA+WW91IGNhbiBzZXQgYWxsIG9wdGlvbnMgb24gdGhlIHRhZyBjYWxsIHdpdGggdGhpcyBhY3Rpb24uIElmIHlvdSBhcmUgdXNpbmcgdGhlIHF1aWNrIHdheSwgdGhpcyBpcyBhbGwgeW91IG5lZWQgdG8gc2V0IGEgU21hcnR5IHZhcmlhYmxlIHdoaWNoIHlvdSBjYW4gY2hlY2sgYW55d2hlcmUgb24gdGhlIHRlbXBsYXRlIGFmdGVyIHRoaXMgY2FsbC48L3A+DQogICAgICA8cD5PdGhlciB0aGFuIHRoYXQganVzdCBwbGFjZSB0aGUgdGFnIHdoZXJlIHlvdSB3YW50IGEgbG9naW4vbG9nb3V0IGZvcm0uIFRoZSBkZWZhdWx0IDxzdHJvbmc+PGVtPmZvcm08L2VtPiBhY3Rpb248L3N0cm9uZz4gaGFzIGRlZmF1bHQgdmFsdWVzIGZvciBhbGwgZm9ybSBwYXJhbWV0ZXJzLCBzbyB0aGUgbWluaW1hbCB0YWcgaXMgPHN0cm9uZz4mIzEyMztjb250ZW50X3Byb3RlY3QgYWN0aW9uPSc8L3N0cm9uZz48ZW0+Zm9ybTwvZW0+PHN0cm9uZz4nfTwvc3Ryb25nPi48L3A+DQogICAgICA8cD5FeGFtcGxlOjwvcD4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+ICAmIzEyMztjb250ZW50X3Byb3RlY3QgYWN0aW9uPWZvcm19PC9wcmU+DQogICAgICA8cD5BbiBleGFtcGxlIHdpdGggYWxsIHRoZSBwYXJhbWV0ZXJzIHlvdSBjYW4gdXNlIHRvIGN1c3RvbWl6ZSB0aGUgZm9ybTo8L3A+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiAgJiMxMjM7KiBEbyB3ZSByZWFsbHkgbmVlZCBhbGwgdGhpcz8hISEgQSBjb21wbGV0ZSBmb3JtIGNhbGwgKn0NCiAgPCYjMTIzO2NvbnRlbnRfcHJvdGVjdCBhY3Rpb249J2Zvcm0nIGxvZ2luX2J0bj0nTGV0IE1lIEluIScgbG9nb3V0X2J0bj0nQnllIEJ5ZSEnIGZvcm1fY2xhc3M9J2Nzc19mb3JtJyBmb3JtX2lkPSdjc3NfbXlfZm9ybScgaW5fcGFzc19pZD0nY3NzX3Bhc3N3cmRpZCcgaW5fcGFzc19jbGFzcz0nY3NzX3Bhc3N3cmRfY2xhc3MnIGJ1dHRvbl9pZD0nY3NzX2J0bl9pZCcgYnV0dG9uX2NsYXNzPSdjc3NfYnRuX2NsYXNzJ308L3ByZT4NCiAgICAgIDxwPllvdSBjYW4gdXNlIGFueSBvZiB0aGUgcGVyc2lzdGVudCBwYXJhbWV0ZXJzIHdpdGggdGhlIGZvcm0gYWN0aW9uIGlmIG5lZWRlZC4gSG93ZXZlciwgdGhlIGZvcm0gc3BlY2lmaWMgcGFyYW1ldGVycyA8c3Ryb25nPmFyZSBub3QgcGVyc2lzdGVudDwvc3Ryb25nPi48L3A+DQoNCiAgICAgIDxoMz5UaGUgRGVmYXVsdCBhbmQgU2V0IEFjdGlvbnM8L2gzPg0KICAgICAgPGRpdiBjbGFzcz0iaW5mb3JtYXRpb24iIHN0eWxlPSJkaXNwbGF5OmJsb2NrOyI+DQogICAgICAgIDxwPg0KICAgICAgICAgIFRoZSA8c3Ryb25nPnNldDwvc3Ryb25nPiBhY3Rpb24gaXMgYSBsZWdhY3kgYWN0aW9uLCBkZXByZWNhdGVkIGJ1dCBzdGlsbCBmdW5jdGlvbmFsLiBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIDxzdHJvbmc+ZGVmYXVsdDwvc3Ryb25nPiB3aGljaCBjYW4gYmUgb21pdHRlZC4NCiAgICAgICAgPC9wPg0KICAgICAgPC9kaXY+DQogICAgICA8cD5UaGVzZSBhcmUgc3BlY2lhbCBhY3Rpb25zIHdpdGggdGhlIHNvbGUgcHVycG9zZSBvZiBhbGxvd2luZyB5b3UgdG8gc2V0IHBlcnNpc3RlbnQgcGFyYW1ldGVycyBvbiBkaWZmZXJlbnQgdGFnIGNhbGxzLCBoZWxwaW5nIGEgYml0IHdpdGggdGhlIHJlYWRhYmlsaXR5IG9mIHRoZSB0YWdzOiBhbG9uZyB0aGUgdGVtcGxhdGUuIEp1c3Qga2VlcCBpbiBtaW5kIHRoYXQgaWYgeW91IGNhbGwgaXQgYWdhaW4sIHVzaW5nIHRoZSBzYW1lIHBhcmFtZXRlcnMgd2l0aCBkaWZmZXJlbnQgdmFsdWVzLCB0aGUgbGFzdCB2YWx1ZSB3aWxsIG92ZXJyaWRlIGFsbCBwcmV2aW91cy48L3A+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiAgJiMxMjM7KiBVc2luZyB0aGUgJ3NldCcgYWN0aW9uIHRvIHNwcmVhZCBwYXJhbWV0ZXJzIHRocm91Z2ggbXVsdGlwbGUgY2FsbHMgKn0NCiAgJiMxMjM7KiByZWRpcmVjdCBIb21lICp9DQogICYjMTIzO2NvbnRlbnRfcHJvdGVjdCBhY3Rpb249J3NldCcgbG9nb3V0X2FsaWFzPSdob21lJ30NCiAgJiMxMjM7KiBzZXQgdGhlIHRpbWUgYmVmb3JlIGEgbG9naW4gZXhwaXJlcyAqfQ0KICAmIzEyMztjb250ZW50X3Byb3RlY3QgYWN0aW9uPSdzZXQnIHRpbWVvdXQ9MTB9DQogICYjMTIzOyogc2V0IHRoZSBtZXNzYWdlIHRvIHNob3cgaW4gY2FzZSB0aGUgYXV0aGVudGljYXRpb24gZmFpbHMgKn0NCiAgJiMxMjM7Y29udGVudF9wcm90ZWN0IGFjdGlvbj0nc2V0JyBlcnJvcl9tc2c9J09vcHMhIFdyb25nIHBhc3MsIG1hdGUhIENoZWNrIHlvdXIgbm90ZXMuLi4nfQ0KICAmIzEyMzsqIHNldHRpbmcgYWxsIHRoZSBhYm92ZSBpbiBhIHNpbmdsZSB0YWcgY2FsbCBjb3VsZCBsZWFkIHRvIGVycm9ycyAqfTwvcHJlPg0KDQoNCiAgICAgIDxoMz5UaGUgUHJvdGVjdCBUYWdzPC9oMz4NCiAgICAgIDxwPlRoZXNlIHRhZ3MgYXJlIGJsb2NrIHNtYXJ0eSB0YWdzLCBhbmQgY2FuIGJlIHVzZWQgc2V2ZXJhbCB0aW1lcyBvbiB0aGUgcGFnZSBpbiBwYWlycywgaS5lOiBhbiBvcGVuaW5nIHRhZyBhbmQgYSBjbG9zaW5nIHRhZy4gVGhlIG9wZW5pbmcgdGFnIGFjY2VwdHMgb25seSBvbmUgcGFyYW1ldGVyLCB0aGUgPHN0cm9uZz5wcm90ZWN0ZWRfbXNnPC9zdHJvbmc+IHdoaWNoIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBvbmUgaWYgc2V0LiBUaGlzIGlzIGEgcGVyIG9jY3VycmVuY2UgdGFnLCBtZWFuaW5nIHRoYXQgaWYgaXQgaXMgc2V0IG9uIHRoZSA8ZW0+PHN0cm9uZz5kZWZhdWx0PC9zdHJvbmc+PC9lbT4gb3IgIDxlbT48c3Ryb25nPnNldDwvc3Ryb25nPjwvZW0+IGFjdGlvbnMgaXQgaXMgcGVyc2lzdGVudCwgYnV0IGlmIHNldCBvbiBhIDxzdHJvbmc+JiMxMjM7cHJvdGVjdH08L3N0cm9uZz4gdGFnIGl0IGFmZmVjdHMgb25seSB0aGUgdGFnIHdoZXJlIGl0IGlzIHVzZWQgYW5kIGRvZXNuJ3QgcGVyc2lzdCB0byB0aGUgbmV4dCBvY2N1cnJlbmNlLjwvcD4NCg0KICAgICAgPGg0PjxzdHJvbmc+Q29udGVudCB3cmFwcGluZyB0YWdzIGV4YW1wbGUuPC9zdHJvbmc+PC9oND4NCiAgICAgIDxwPlVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB0YWdzOg0KICAgICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiAgJiMxMjM7cHJvdGVjdH13aGF0ZXZlciBjb250ZW50IHlvdSB3YW50IHByb3RlY3RlZC4mIzEyMzsvcHJvdGVjdH0NCiAgJiMxMjM7cHJvdGVjdCBwcm90ZWN0ZWRfbXNnPSd3ZWxsLCB5b3UgcmVhbGx5IHNob3VsZCBiZSBsb2dnZWQgaW4gaWYgeW91IHdoYXQgdG8gc2VlIHRoZSBjb250ZW50J313aGF0ZXZlciBjb250ZW50IHlvdSB3YW50IHByb3RlY3RlZC4mIzEyMzsvcHJvdGVjdH08L3N0cm9uZz4NCiAgICAgICAgPC9wcmU+DQogICAgICA8L3A+DQoNCiAgICAgIDxoNT5UaGUgcHJvdGVjdCBibG9jayB0YWcgYWNjZXB0cyBvbmx5IG9uZSBwYXJhbWV0ZXI6PC9oNT4NCiAgICAgIDx1bD4NCiAgICAgICAgPGxpPjxlbT4ob3B0aW9uYWwpIDxzdHJvbmc+cHJvdGVjdGVkX21zZzwvc3Ryb25nPjwvZW0+IC0gYSBtZXNzYWdlIHRvIHJlcGxhY2UgdGhlIHByb3RlY3RlZCBjb250ZW50IChkZWZhdWx0cyB0byB3aGF0ZXZlciB3YXMgc2V0IG9uIGEgcHJldmlvdXMgcGVyc2lzdGVudCB0YWcgY2FsbCk7PC9saT4NCiAgICAgIDwvdWw+DQogICAgICA8aDU+VGhlIHByb3RlY3QgbW9kaWZpZXIgdGFnIGRvZXNuJ3QgYWNjZXB0IHBhcmFtZXRlcnM8L2g1Pg0KICAgICAgPHA+Rm9yIHRoZSB0aW1lIGJlaW5nIHRoZSBtb2RpZmllciBkb2Vzbid0IHJlcXVpcmUgYW55IHBhcmFtZXRlciB0byB3b3JrLiBJdCB3aWxsIHVzZSB3aGF0ZXZlciBwYXJhbWV0ZXJzIGhhdmUgYmVlbiBzZXQgcHJldmlvdXNseS48L3A+DQoNCiAgICAgIDxoMz5Db2RlIFNuaXBwZXRzPC9oMz4NCg0KICAgICAgPGg0PlVzaW5nIFRoZSBGb3JtIEFjdGlvbjwvaDQ+DQoNCiAgICAgIDxwPiBBbiBleGFtcGxlIHdpdGggYWxsIHRoZSBwYXJhbWV0ZXJzIHlvdSBjYW4gdXNlIHRvIGN1c3RvbWl6ZSB0aGUgZm9ybTo8L3A+DQogICAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+ICAmIzEyMzsqIERvIHdlIHJlYWxseSBuZWVkIGFsbCB0aGlzPyEhISBBIGNvbXBsZXRlIGZvcm0gY2FsbCB3aGljaCBkb2Vzbid0IG91dHB1dCBub3RoaW5nIGJlY2F1c2UgdGhlIGFzc2lnbl9vdXRwdXQgcGFyYW1ldGVyIGlzIGJlaW5nIHVzZWQgKn0NCiAgJiMxMjM7Y29udGVudF9wcm90ZWN0IGFjdGlvbj0nZm9ybScgbG9naW5fYnRuPSdMZXQgTWUgSW4hJyBsb2dvdXRfYnRuPSdCeWUgQnllIScgZm9ybV9jbGFzcz0nY3NzX2Zvcm0nIGZvcm1faWQ9J2Nzc19teV9mb3JtJyBpbl9wYXNzX2lkPSdjc3NfcGFzc3dyZGlkJyBpbl9wYXNzX2NsYXNzPSdjc3NfcGFzc3dyZF9jbGFzcycgYnV0dG9uX2lkPSdjc3NfYnRuX2lkJyBidXR0b25fY2xhc3M9J2Nzc19idG5fY2xhc3MnIGFzc2lnbl9vdXRwdXQ9J2xvZ2luX2Zvcm0nfQ0KICAmIzEyMzsqIGJ5IHVzaW5nIGFzc2lnbl9vdXRwdXQ9J2xvZ2luX2Zvcm0nIHlvdSBjYW4gdXNlICYjMTIzOyRsb2dpbl9mb3JtfSBzZXZlcmFsIHRpbWVzIG9uIHRoZSB0ZW1wbGF0ZSAqfQ0KICAmIzEyMzskbG9naW5fZm9ybX0NCiAgICA8L3ByZT4NCg0KICAgICAgPGg0PlVzaW5nIFRoZSBQcm90ZWN0IEJsb2NrIFRhZ3M8L2g0Pg0KDQogICAgICA8cD5Vc2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgdGFnczo8L3A+DQogICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4gICYjMTIzO3Byb3RlY3R9d2hhdGV2ZXIgY29udGVudCB5b3Ugd2FudCBwcm90ZWN0ZWQuJiMxMjM7L3Byb3RlY3R9DQogICAgJiMxMjM7cHJvdGVjdCBwcm90ZWN0ZWRfbXNnPSd3ZWxsLCB5b3UgcmVhbGx5IHNob3VsZCBiZSBsb2dnZWQgaW4gaWYgeW91IHdoYXQgdG8gc2VlIHRoZSBjb250ZW50J313aGF0ZXZlciBjb250ZW50IHlvdSB3YW50IHByb3RlY3RlZC4mIzEyMzsvcHJvdGVjdH0NCiAgICA8L3ByZT4NCg0KICAgIDxoND5Vc2luZyBUaGUgUHJvdGVjdCBNb2RpZmllcjwvaDQ+DQogICAgPHA+VXNlIGFueSBvbmUgb2YgdGhlIGZvbGxvd2luZyBtZXRob2RzOjwvcD4NCiAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiAgJiMxMjM7JHByb3RlY3RfbWUgPSAnd2hhdGV2ZXIgY29udGVudCB5b3Ugd2FudCBwcm90ZWN0ZWQuJ30NCiAgICAgICYjMTIzOyRwcm90ZWN0X21lfHByb3RlY3R9DQogICAgICAmIzEyMzsqIG9yICp9DQogICAgICAmIzEyMzsnU29tZSB0ZXh0IEkgd2FudCB0byBoYXZlIHByb3RlY3RlZCd8cHJvdGVjdH0NCiAgICAmIzEyMztwcm90ZWN0IHByb3RlY3RlZF9tc2c9J3dlbGwsIHlvdSByZWFsbHkgc2hvdWxkIGJlIGxvZ2dlZCBpbiBpZiB5b3Ugd2hhdCB0byBzZWUgdGhlIGNvbnRlbnQnfXdoYXRldmVyIGNvbnRlbnQgeW91IHdhbnQgcHJvdGVjdGVkLiYjMTIzOy9wcm90ZWN0fQ0KICAgIDwvcHJlPg0KDQogIDxoND5QYXNzd29yZHM8L2g0Pg0KICA8cD5UaGUgcGFzc3dvcmRzIHBhcmFtZXRlciBjYW4gYWNjZXB0IGEgcmFuZ2Ugb2YgdmFsdWVzLCBmcm9tIGEgc2luZ2xlIHBhc3N3b3JkLCBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHBhc3N3b3Jkcywgb3IgYW4gYXJyYXkgb2YgdmFsdWVzOjwvcD4NCg0KICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+DQoNCjxzdHJvbmc+JiMxMjM7Y29udGVudF9wcm90ZWN0IHBhc3N3b3Jkcz0ncGFzczEnfTwvc3Ryb25nPg0KICAgIDwvcHJlPg0KDQoNCiAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPg0KDQo8c3Ryb25nPiYjMTIzO2NvbnRlbnRfcHJvdGVjdCBwYXNzd29yZHM9J3Bhc3MxLCdwYXNzMicsJ3Bhc3MzJ308L3N0cm9uZz4NCiAgICA8L3ByZT4NCg0KICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+DQoNCiYjMTIzOyogVXNlIHNtYXJ0eSBzeW50YXggdG8gY3JlYXRlIGFuIGFycmF5ICp9DQo8c3Ryb25nPiYjMTIzOyRwYXNzd29yZHM9WydwYXNzMScsJ3Bhc3MyJywncGFzczMnXX08L3N0cm9uZz4NCg0KJiMxMjM7KiBvciAqfQ0KPHN0cm9uZz4mIzEyMzskcGFzc3dvcmRzW109J3Bhc3MxJ30NCiYjMTIzOyRwYXNzd29yZHNbXT0ncGFzczInfQ0KJiMxMjM7JHBhc3N3b3Jkc1tdPSdwYXNzMyd9PC9zdHJvbmc+DQoNCiYjMTIzOyogYW5kIHVzZSBpdCBhcyB0aGUgdmFsdWUgZm9yIHRoZSBwYXJhbWV0ZXIgcGFzc3dvcmRzICp9DQo8c3Ryb25nPiYjMTIzO2NvbnRlbnRfcHJvdGVjdCBwYXNzd29yZHM9JHBhc3N3b3Jkc308L3N0cm9uZz4NCg0KJiMxMjM7KiBvciAqfQ0KPHN0cm9uZz4mIzEyMztjb250ZW50X3Byb3RlY3QgYWN0aW9uPSdzZXQnIHBhc3N3b3Jkcz0kcGFzc3dvcmRzfTwvc3Ryb25nPg0KICAgIDwvcHJlPg0KDQogICAgICA8aDM+Tm90ZXM8L2gzPg0KDQoNCg0KICAgICAgPGg0PlBlcnNpc3RlbnQgUGFyYW1ldGVyczwvaDQ+DQogICAgICA8cD5Tb21lIG9mIHRoZSBwYXJhbWV0ZXJzIHVzZWQgYnkgdGhpcyBwbHVnaW4gYXJlIHBlcnNpc3RlbnQgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgcmVxdWVzdCwgdGhhdCBpcyB0byBzYXksIHRocm91Z2ggYWxsIG9mIHRoZSBjdXJyZW50IHJlbmRlcmVkIHBhZ2UuIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIHNldCB0aGVtIG9uY2UsIGtub3dpbmcgdGhleSB3aWxsIGJlIHVzZWQgbGF0ZXIgb24gdGhlIHNhbWUgcmVxdWVzdCBvbiBzdWJzZXF1ZW50IGNhbGxzIHRvIHRoZSBwbHVnaW4uIFRoYXQgYWxzbyBtZWFucyB0aGF0IHRoZXkgY2FuIGJlIGNoYW5nZWQgb24gc3Vic2VxdWVudCBjYWxscywgaWYgbmVlZGVkLjwvcD4NCg0KICAgICAgPGg0PlBhc3N3b3JkczwvaDQ+DQoNCiAgICAgIDxkaXYgY2xhc3M9Indhcm5pbmciIHN0eWxlPSJkaXNwbGF5OmJsb2NrOyI+DQogICAgICA8cD48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IFVubGVzcyB5b3UgdXNlIGFuIGFycmF5IHRvIHNldCB0aGUgcGFzc3dvcmRzLCBhdm9pZCB0aGUgdXNlIG9mIGNvbW1hcyAoPHN0cm9uZz4sPC9zdHJvbmc+KSBhbmQgb2YgdmVydGljYWwgc2xhc2hlcyAoPHN0cm9uZz58PC9zdHJvbmc+KSBhcyBwYXNzd29yZCBzeW1ib2xzIGFzIHRoZXNlIGFyZSByZXNlcnZlZCB0byBpbnRlcm5hbCB1c2UgYW5kIHdpbGwgdW5hdm9pZGFibHkgbGVhZCB0byBwYXNzd29yZHMgbm90IGJlaW5nIHJlY29nbml6ZWQgYnkgdGhlIHBsdWdpbi48L3A+DQogICAgICA8L2Rpdj4NCg0KICAgICAgPGgzPkNvb2tpZXM8L2gzPg0KDQogICAgICA8cD5JZiB0aGUgPHN0cm9uZz50aW1lb3V0PC9zdHJvbmc+IHBhcmFtZXRlciBpcyB1c2VkLCB0aGlzIHBsdWdpbiB3aWxsIGdlbmVyYXRlIGEgZnJvbnRlbmQgY29va2llLiBCeSB1c2luZyB0aGlzIHBhcmFtZXRlciB5b3UgbWF5IGJlIHZpb2xhdGluZyBzb21lIGNvdW50cmllcyBsYXdzIG9mIHVzZXIgcHJpdmFjeS4gUGxlYXNlIG1ha2Ugc3VyZSB5b3UgcHJvdmlkZSBhIGZhaXIgd2FybmluZyBvbiB0aGUgZnJvbnQgcGFnZXMgaWYgbmVlZGVkLCBvciBhdm9pZCB1c2luZyB0aGUgPHN0cm9uZz50aW1lb3V0PC9zdHJvbmc+IHBhcmFtZXRlciwgdGh1cyBkaXNhYmxpbmcgdGhlIHVzZSBvZiBjb29raWVzLiBUaGUgb25seSBkcmF3YmFjayBvZiBub3QgdXNpbmcgY29va2llcyBpcyB0aGF0IHRoZSBhdXRoZW50aWNhdGlvbiBvbmx5IGxhc3RzIGZvciBhIHNpbmdsZSBwYWdlIHJlcXVlc3QuPC9wPg0KDQogICAgPC9kaXY+DQogIDwvbGk+DQogIHsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfQ0KPC91bD4NCnsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfQ0KeyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip9]]></data>
	</file>
	<file>
	  <filename>/templates/help_what_is_new_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgyPldoYXQgaXMgTmV3PC9oMj4NCg0KPHA+SGVyZSdzIHdoYXQgd2UgaGF2ZSBiZWVuIHdvcmtpbmcgb246PC9wPg0KPHVsPg0KICA8bGk+TmV3IFBsdWdpbnM6DQogICAgPHVsPg0KICAgICAgPGxpPjxzdHJvbmc+JiMxMjM7Y29udGVudF9mZXRjaH08L3N0cm9uZz4gLSBGZXRjaCBhbmQgcmV1c2UgQ01TTVMgY29udGVudCAoYSBmb3JrIG9mIGNvbnRlbnRfZHVtcCk7PC9saT4NCiAgICAgIDxsaT48c3Ryb25nPiYjMTIzO2ZpbGVzX2xpc3R9PC9zdHJvbmc+IC0gTGlzdCBmaWxlcyBhbmQgZm9sZGVycyB3aXRoIG9iZnVzY2F0ZWQgZG93bmxvYWQgYWJpbGl0eTs8L2xpPg0KICAgICAgPGxpPjxzdHJvbmc+JiMxMjM7Y29udGVudF9wcm90ZWN0fTwvc3Ryb25nPiAtIFByb3RlY3QgY29udGVudCB3aXRoIGEgcGFzc3dvcmQgKGEgZm9yayBvZiBwYWdlX3Byb3RlY3QpOzwvbGk+DQogICAgPC91bD4NCiAgPC9saT4NCiAgPGxpPkEgbmV3IGFuZCBtb3JlIG9yZ2FuaXplZCBoZWxwOzwvbGk+DQogIDxsaT5PbGQgbGVmdG92ZXJzIG9mIHBsdWdpbnMgb24gdGhlIGhlbHAgaGF2ZSBiZWVuIHJlbW92ZWQ7PC9saT4NCiAgPGxpPk5ldyA8c3Ryb25nPmNsaWNrIHRvIGNvcHk8L3N0cm9uZz4gZmVhdHVyZSBvbiBjb2RlIHNuaXBwZXRzIChwYXkgYXR0ZW50aW9uIHRvIHRoZSBjdXJzb3Igd2hpbGUgaG92ZXJpbmcgb3ZlciB0aGUgc25pcHBldHMpOzwvbGk+DQogIDxsaT5UaGUgbW9kdWxlIHNob3VsZCBiZSBmdWxseSBQSFAgOC4xIGNvbXBhdGlibGUgYnkgbm93IHVubGVzcyB3ZSBtaXNzZWQgc29tZXRoaW5nOzwvbGk+DQo8L3VsPg0K]]></data>
	</file>
</module>
