<?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.3.0</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+JiMxMjM7Y29udGVudF9mZXRjaH08L3N0cm9uZz4gLSBGZXRjaCBhbmQgcmV1c2UgQ01TTVMgY29udGVudDs8L2xpPgogIDxsaT48c3Ryb25nPiYjMTIzO2ZpbGVzX2xpc3R9PC9zdHJvbmc+IC0gTGlzdCBmaWxlcyBhbmQgZm9sZGVyczs8L2xpPgogIDxsaT48c3Ryb25nPiYjMTIzO2NvbnRlbnRfcHJvdGVjdH08L3N0cm9uZz4gLSBQcm90ZWN0IGNvbnRlbnQgd2l0aCBhIHBhc3N3b3JkOzwvbGk+CiAgPGxpPjxzdHJvbmc+JiMxMjM7dHJpZ2dlcl80MDR9PC9zdHJvbmc+IC0gVHJpZ2dlciBhIDQwNCBlcnJvciA8c3BhbiBzdHlsZT0iY29sb3I6Z3JlZW4iPjxzdHJvbmc+KG5ldyk8L3N0cm9uZz4gPC9zcGFuPjs8L2xpPgogIDxsaT48c3Ryb25nPiYjMTIzO3RyaWdnZXJfNDAzfTwvc3Ryb25nPiAtIFRyaWdnZXIgYSA0MDMgZXJyb3IgPHNwYW4gc3R5bGU9ImNvbG9yOmdyZWVuIj48c3Ryb25nPihuZXcpPC9zdHJvbmc+IDwvc3Bhbj47PC9saT4KPC91bD4KPHA+QWRkaXRpb25hbGx5LCB0aGUgbW9kdWxlIHJlZ2lzdGVycyBhIGNsYXNzLCA8c3Ryb25nPiYjMTIzO3NteH08L3N0cm9uZz4gd2l0aCB0aGUgZm9sbG93aW5nIG1ldGhvZHM6PC9wPgo8dWwgY2xhc3M9ImhpZ2hsaWdodC1saXN0Ij4KICA8bGk+PHN0cm9uZz4mIzEyMztzbXg6OnNlbGZfdXJsKCl9PC9zdHJvbmc+IC0gUmV0dXJuIHRoZSBjdXJyZW50IFVSTDs8L2xpPgogIDxsaT48c3Ryb25nPiYjMTIzO3NteDo6YW5jaG9yX3VybCguLi4pfTwvc3Ryb25nPiAtIFVSTCB0byBhbiBhbmNob3Igb24gdGhlIHNhbWUgcGFnZTs8L2xpPgogIDxsaT48c3Ryb25nPiYjMTIzO3NteDo6c214Ojptb2R1bGVfaW5zdGFsbGVkKC4uLil9PC9zdHJvbmc+IC0gVGVzdCBpZiBhIG1vZHVsZSBpcyBpbnN0YWxsZWQ7PC9saT4KICA8bGk+PHN0cm9uZz4mIzEyMztzbXg6Om1vZHVsZV92ZXJzaW9uKC4uLil9PC9zdHJvbmc+IC0gUmV0dXJuIHRoZSB2ZXJzaW9uIG9mIGEgbW9kdWxlOzwvbGk+CiAgPGxpPjxzdHJvbmc+JiMxMjM7c214OjpnZXRfcGFyZW50X2FsaWFzKC4uLil9PC9zdHJvbmc+IC0gUmV0dXJucyB0aGUgYWxpYXMgb2YgcGFnZSdzIHBhcmVudDs8L2xpPgogIDxsaT48c3Ryb25nPiYjMTIzO3NteDo6aXNfY2hpbGRfb2YoLi4uKX08L3N0cm9uZz4gLSBUZXN0cyB3aGV0aGVyIGlzIGEgY2hpbGQgb2YgdGhlIHNwZWNpZmllZCBwYXJlbnQgYWxpYXM7PC9saT4KICA8bGk+PHN0cm9uZz4mIzEyMztzbXg6OmdldF9yb290X2FsaWFzKC4uLil9PC9zdHJvbmc+IC0gUmV0dXJucyB0aGUgYWxpYXMgb2YgYSBwYWdlJ3Mgcm9vdCBwYXJlbnQ7PC9saT4KICA8bGk+PHN0cm9uZz4mIzEyMztzbXg6OmdldF9wYWdlX3RpdGxlKC4uLil9PC9zdHJvbmc+IC0gUmV0dXJucyB0aGUgdGl0bGUgb2YgYSBwYWdlOzwvbGk+CiAgPGxpPjxzdHJvbmc+JiMxMjM7c214OjpnZXRfcGFnZV9tZW51dGV4dCguLi4pfTwvc3Ryb25nPiAtIFJldHVybnMgdGhlIG1lbnUgdGV4dCBvZiBhIHBhZ2U7PC9saT4KICA8bGk+PHN0cm9uZz4mIzEyMztzbXg6OmdldF9wYWdlX3R5cGUoLi4uKX08L3N0cm9uZz4gLSBSZXR1cm5zIHRoZSBjb250ZW50IHR5cGUgYnkgYWxpYXM7PC9saT4KICA8bGk+PHN0cm9uZz4mIzEyMztzbXg6Omhhc19jaGlsZHJlbiguLi4pfTwvc3Ryb25nPiAtIFRlc3QgaWYgYSBwYWdlIGhhcyBjaGlsZHJlbjs8L2xpPgogIDxsaT48c3Ryb25nPiYjMTIzO3NteDo6Z2V0X2NoaWxkcmVuKC4uLil9PC9zdHJvbmc+IC0gR2V0IGluZm9ybWF0aW9uIGFib3V0IGEgcGFnZSdzIGNoaWxkcmVuOzwvbGk+CiAgPGxpPjxzdHJvbmc+JiMxMjM7c214OjpnZXRfcGFnZV9jb250ZW50KC4uLil9PC9zdHJvbmc+IC0gUmV0dXJucyB0aGUgdGV4dCBvZiBhIGNvbnRlbnQgYmxvY2sgb2YgYW5vdGhlciBwYWdlOzwvbGk+CiAgPGxpPjxzdHJvbmc+JiMxMjM7c214OjpnZXRfc2libGluZyguLi4pfTwvc3Ryb25nPiAtIFJldHVybnMgdGhlIGFsaWFzIG9mIHRoZSBuZXh0IG9yIHByZXZpb3VzIHNpYmxpbmc7PC9saT4KICA8bGk+PHN0cm9uZz4mIzEyMztzbXg6OmdldF9wYXJhbGxlbF9wYWdlKC4uLil9PC9zdHJvbmc+IC0gR2V0IHRoZSBhbGlhcyBvZiBhIHBhcmFsbGVsIHBhZ2UgaW4gdGhlIHBhZ2Ugc3RydWN0dXJlOzwvbGk+CiAgPGxpPjxzdHJvbmc+JiMxMjM7c214OjpnZXRfcGFyYWxsZWxfdXJsKC4uLil9PC9zdHJvbmc+IC0gR2V0IHRoZSBVUkwgb2YgYSBwYXJhbGxlbCBwYWdlIGluIHRoZSBwYWdlIHN0cnVjdHVyZTs8L2xpPgogIDxsaT48c3Ryb25nPiYjMTIzO3NteDo6Z2V0X2ZpbGVfbGlzdGluZyguLi4pfTwvc3Ryb25nPiAtIFJldHVybiBhIGxpc3Qgb2YgZmlsZXMgaW4gYSBkaXJlY3RvcnkgOzwvbGk+CjwvdWw+Cgo8cD5QbGVhc2UgcmVmZXIgdG8gdGhlIHRhYnMgZGVzY3JpYmluZyBlYWNoIHBsdWdpbiBhbmQgZnVuY3Rpb24gZm9yIGhlbHAgb24gaG93IHRvIHVzZSBpdC48L3A+ICA8L2Rpdj4KICA8ZGl2IGlkPSJwbHVnaW5zX2MiPgogICAgPGgyPlNtYXJ0eSBwbHVnaW5zPC9oMj4KPHA+VGhpcyBpcyBhIGxpc3Qgb2YgdGhlIHBsdWdpbnMgYXZhaWxhYmxlIGZyb20gdGhpcyBtb2R1bGUgd2l0aCBpbnN0cnVjdGlvbnMgYW5kIHNhbXBsZSB1c2VzLjwvcD4KCjx1bCBjbGFzcz0iYWNjb3JkaW9uLWxpc3QiPgogIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+CiAgICA8aDMgY2xhc3M9ImFsIj4mIzEyMzttb2RfYWN0aW9uX3VybH0gPHNwYW4gY2xhc3M9InNtYWxsIj5DcmVhdGUgYW4gdXJsIHRvIGEgbW9kdWxlIGFjdGlvbjwvc3Bhbj48L2gzPgogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4KICAgICAgPHA+QSBzbWFydHkgcGx1Z2luIHRoYXQgY2FuIGNyZWF0ZSBhbiB1cmwgdG8gYSBtb2R1bGUgYWN0aW9uLjwvcD4KICAgICAgPHA+UGFyYW1ldGVyczo8L3A+CiAgICAgIDx1bD4KICAgICAgICA8bGk+PHN0cm9uZz5tb2R1bGU8L3N0cm9uZz4gLSBUaGUgbW9kdWxlIHRvIGNyZWF0ZSBhIGxpbmsgdG8uIFRoaXMgYXJndW1lbnQgaXMgb3B0aW9uYWwsIHRoZSBzeXN0ZW0gd2lsbCBhdHRlbXB0IHRvIGRldGVjdCB0aGUgY3VycmVudCBtb2R1bGUgbmFtZSAoaWYgd2l0aGluIGEgbW9kdWxlIGFjdGlvbik8L2xpPgogICAgICAgIDxsaT48c3Ryb25nPmFjdGlvbjwvc3Ryb25nPiAoZGVmYXVsdCkgLSBUaGUgYWN0aW9uIHRvIGNhbGwgd2l0aGluIHRoZSBtb2R1bGU8L2xpPgogICAgICAgIDxsaT48c3Ryb25nPnBhZ2U8L3N0cm9uZz4gLSBTcGVjaWZ5IHRoZSBkZXN0aW5hdGlvbiBwYWdlPC9saT4KICAgICAgICA8bGk+PHN0cm9uZz5qc2ZyaWVuZGx5PC9zdHJvbmc+IHwgPHN0cm9uZz5mb3Jqczwvc3Ryb25nPiAtIFR1cm5zIG9uIHRoZSB1cmxvbmx5IHBhcmFtZXRlciwgYW5kIGluZGljYXRlcyB0aGF0IGphdmFzY3JpcHQgZnJpZW5kbHkgdXJscyBhcmUgb3V0cHV0LjwvbGk+CiAgICAgICAgPGxpPjxzdHJvbmc+Zm9yYWpheDwvc3Ryb25nPiAtIFR1cm5zIG9uIHRoZSBqc2ZyaWVuZGx5IHBhcmFtZXRlciAoYW5kIHRoZSB1cmxvbmx5IHBhcmFtZXRlciksIGFuZCBhbHNvIGFwcGVuZHMgc2hvd3RlbXBsYXRlPWZhbHNlIHRvIHRoZSBVUkwgb3V0cHV0IGZvciBBSkFYIHJlcXVlc3RzPC9saT4KICAgICAgICA8bGk+PHN0cm9uZz5hc3NpZ248L3N0cm9uZz4gLSBBc3NpZ24gdGhlIG91dHB1dCBvZiB0aGUgcGx1Z2luIHRvIHRoZSBuYW1lZCBzbWFydHkgdmFyaWFibGUuPC9saT4KICAgICAgPC91bD4KCiAgICAgIDxwPkFueSBvdGhlciBwYXJhbWV0ZXJzIHRvIHRoZSBzbWFydHkgcGx1Z2luIHdpbGwgYmUgYWRkZWQgdG8gdGhlIFVSTCBnZW5lcmF0ZWQuPC9wPgogICAgICA8cD5FeGFtcGxlOjwvcD4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mIzEyMzttb2RfYWN0aW9uX3VybCBtb2R1bGU9J05ld3MnIGFjdGlvbj0nZmVzdWJtaXQnIGFzc2lnbj0nZm9vJ308L3ByZT4KICAgIDwvZGl2PgogIDwvbGk+CiAgICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPgogICAgPGgzIGNsYXNzPSJhbCI+JiMxMjM7bW9kX2FjdGlvbl9saW5rfSA8c3BhbiBjbGFzcz0ic21hbGwiPkNyZWF0ZSBhIGxpbmsgdG8gYSBtb2R1bGUgYWN0aW9uPC9zcGFuPjwvaDM+CiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPgogICAgICA8cD5BIHNtYXJ0eSBwbHVnaW4gdGhhdCBjYW4gY3JlYXRlIGEgbGluayB0byBhIG1vZHVsZSBhY3Rpb24uPC9wPgogICAgICA8cD5QYXJhbWV0ZXJzOjwvcD4KICAgICAgPHVsPgogICAgICAgIDxsaT48c3Ryb25nPm1vZHVsZTwvc3Ryb25nPiAtIFRoZSBtb2R1bGUgdG8gY3JlYXRlIGEgbGluayB0by4gVGhpcyBhcmd1bWVudCBpcyBvcHRpb25hbCwgdGhlIHN5c3RlbSB3aWxsIGF0dGVtcHQgdG8gZGV0ZWN0IHRoZSBjdXJyZW50IG1vZHVsZSBuYW1lIChpZiB3aXRoaW4gYSBtb2R1bGUgYWN0aW9uKTwvbGk+CiAgICAgICAgPGxpPjxzdHJvbmc+YWN0aW9uPC9zdHJvbmc+IChkZWZhdWx0KSAtIFRoZSBhY3Rpb24gdG8gY2FsbCB3aXRoaW4gdGhlIG1vZHVsZTwvbGk+CiAgICAgICAgPGxpPjxzdHJvbmc+dGV4dDwvc3Ryb25nPiAtIFRoZSB0ZXh0IHRvIHB1dCBpbiB0aGUgbGluazwvbGk+CiAgICAgICAgPGxpPjxzdHJvbmc+cGFnZTwvc3Ryb25nPiAtIFNwZWNpZnkgdGhlIGRlc3RpbmF0aW9uIHBhZ2U8L2xpPgogICAgICAgIDxsaT48c3Ryb25nPnVybG9ubHk8L3N0cm9uZz4gLSBJbnN0ZWFkIG9mIGdlbmVyYXRpbmcgYSBsaW5rLCBnZW5lcmF0ZSBqdXN0IHRoZSB1cmw8L2xpPgogICAgICAgIDxsaT48c3Ryb25nPmpzZnJpZW5kbHk8L3N0cm9uZz4gfCA8c3Ryb25nPmZvcmpzPC9zdHJvbmc+IC0gVHVybnMgb24gdGhlIHVybG9ubHkgcGFyYW1ldGVyLCBhbmQgaW5kaWNhdGVzIHRoYXQgamF2YXNjcmlwdCBmcmllbmRseSB1cmxzIGFyZSBvdXRwdXQuPC9saT4KICAgICAgICA8bGk+PHN0cm9uZz5mb3JhamF4PC9zdHJvbmc+IC0gVHVybnMgb24gdGhlIGpzZnJpZW5kbHkgcGFyYW1ldGVyIChhbmQgdGhlIHVybG9ubHkgcGFyYW1ldGVyKSwgYW5kIGFsc28gYXBwZW5kcyBzaG93dGVtcGxhdGU9ZmFsc2UgdG8gdGhlIFVSTCBvdXRwdXQgZm9yIEFKQVggcmVxdWVzdHM8L2xpPgogICAgICAgIDxsaT48c3Ryb25nPmNvbmZtZXNzYWdlPC9zdHJvbmc+IC0gQSBjb25maXJtYXRpb24gbWVzc2FnZSB0byBkaXNwbGF5IHdoZW4gdGhlIGxpbmsgaXMgY2xpY2tlZC48L2xpPgogICAgICAgIDxsaT48c3Ryb25nPmltYWdlPC9zdHJvbmc+IC0gQW4gaW1hZ2UgdG8gdXNlIG9uIHRoZSBsaW5rPC9saT4KICAgICAgICA8bGk+PHN0cm9uZz5pbWFnZW9ubHk8L3N0cm9uZz4gLSBJZiBhbiBpbWFnZSBpcyBzcGVjaWZpZWQsIGNyZWF0ZSBhIGxpbmsgb25seSBjb25zaXN0aW5nIG9mIHRoZSBpbWFnZS4gVGhlIHRleHQgd2lsbCBiZSB1c2VkIGZvciB0aGUgdGl0bGUgYXR0cmlidXRlPC9saT4KICAgICAgICA8bGk+PHN0cm9uZz5hc3NpZ248L3N0cm9uZz4gLSBBc3NpZ24gdGhlIG91dHB1dCBvZiB0aGUgcGx1Z2luIHRvIHRoZSBuYW1lZCBzbWFydHkgdmFyaWFibGUuPC9saT4KICAgICAgPC91bD4KCiAgICAgIDxwPkFueSBvdGhlciBhcmd1bWVudHMgdG8gdGhlIHNtYXJ0eSBwbHVnaW4gd2lsbCBiZSBhZGRlZCB0byB0aGUgVVJMIGdlbmVyYXRlZC48L3A+CiAgICAgIDxwPkV4YW1wbGU6PC9wPgogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiYjMTIzO21vZF9hY3Rpb25fbGluayBtb2R1bGU9J05ld3MnIGFjdGlvbj0nZmVzdWJtaXQnIHRleHQ9J1N1Ym1pdCBhIE5ldyBOZXdzIEFydGljbGUnfTwvcHJlPgogICAgPC9kaXY+CiAgPC9saT4KICAgIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+CiAgICA8aDMgY2xhc3M9ImFsIj4mIzEyMzt4dF9hbmNob3JfbGlua30gPHNwYW4gY2xhc3M9InNtYWxsIj5HZW5lcmF0ZSBhIGxpbmsgdG8gYW4gYW5jaG9yIG9uIHRoZSBzYW1lIHBhZ2U8L3NwYW4+PC9oMz4KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+CiAgICAgIDxwPkEgc21hcnR5IHBsdWdpbiB0byBnZW5lcmF0ZSBhIGxpbmsgdG8gYW4gYW5jaG9yIHRoYXQgaXMgb24gdGhlIHNhbWUgcGFnZS48L3A+CiAgICAgIDxwPlBhcmFtZXRlcnM6PC9wPgogICAgICA8dWw+CiAgICAgICAgPGxpPjxzdHJvbmc+bjwvc3Ryb25nPiB8IDxzdHJvbmc+bmFtZTwvc3Ryb25nPiAtIDxlbT4oc3RyaW5nKTwvZW0+IFRoZSBuYW1lIG9mIHRoZSBhbmNob3IgdG8gbGluayB0by48L2xpPgogICAgICAgIDxsaT48c3Ryb25nPnRleHQ8L3N0cm9uZz4gLSA8ZW0+KHN0cmluZz48L2VtPiBUaGUgdGV4dCBwb3J0aW9uIG9mIHRoZSBsaW5rLiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgYW5jaG9yIG5hbWUgd2lsbCBiZSB1c2VkLjwvbGk+CiAgICAgICAgPGxpPjxzdHJvbmc+dXJsb25seTwvc3Ryb25nPiAtIDxlbT4oYm9vbCk8L2VtPiBPcHRpb25hbGx5IG9ubHkgZ2VuZXJhdGUgdGhlIFVSTCBwb3J0aW9uIG9mIHRoZSBsaW5rLiBzZWUgc214OjphbmNob3JfdXJsKCk8L2xpPgogICAgICAgIDxsaT48c3Ryb25nPmFzc2lnbjwvc3Ryb25nPiAtIDxlbT4oc3RyaW5nPjwvZW0+IE9wdGlvbmFsbHkgYXNzaWduIHRoZSBvdXRwdXQgb2YgdGhlIHBsdWdpbiB0byB0aGUgbmFtZWQgc21hcnR5IHZhcmlhYmxlLjwvbGk+CiAgICAgIDwvdWw+CgogICAgICA8cD5Bbnkgb3RoZXIgYXJndW1lbnRzIHRvIHRoZSBzbWFydHkgcGx1Z2luIHdpbGwgYmUgYWRkZWQgYXMgYXR0cmlidXRlcyB0byB0aGUgbGluayBnZW5lcmF0ZWQuPC9wPgogICAgICA8cD5FeGFtcGxlOjwvcD4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mIzEyMzt4dF9hbmNob3JfbGluayBuYW1lPWJvdHRvbSBjbGFzcz0iYW5jaG9yX2NsYXNzIiBpZD0iYW5jaG9yX2lkIn08L3ByZT4KICAgIDwvZGl2PgogIDwvbGk+CiAgICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPgogICAgPGgzIGNsYXNzPSJhbCI+JiMxMjM7c2Vzc19wdXR9IDxzcGFuIGNsYXNzPSJzbWFsbCI+U3RvcmUgZGF0YSBpbiB0aGUgdXNlciBzZXNzaW9uPC9zcGFuPjwvaDM+CiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPgogICAgICA8cD5BIHNtYXJ0eSBwbHVnaW4gdGhhdCBjYW4gc3RvcmUgZGF0YSBpbiB0aGUgdXNlciBzZXNzaW9uLiBUaGlzIGRhdGEgaXMgdGhlbiBhY2Nlc3NpYmxlIHZpYSB0aGUgJHNtYXJ0eS5zZXNzaW9uIGFycmF5IGluIHN1YnNlcXVlbnQgcGFnZXMuPC9wPgogICAgICA8cD5QYXJhbWV0ZXJzOjwvcD4KICAgICAgPHVsPgogICAgICAgIDxsaT48c3Ryb25nPnZhcjwvc3Ryb25nPiAtIFRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSB0byBjcmVhdGUgaW4gdGhlIHNlc3Npb24uPC9saT4KICAgICAgICA8bGk+PHN0cm9uZz52YWx1ZTwvc3Ryb25nPiAtIFRoZSBkZXNpcmVkIHZhbHVlIG9mIHRoZSB2YXJpYWJsZS48L2xpPgogICAgICA8L3VsPgogICAgICA8cD5FeGFtcGxlOjwvcD4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mIzEyMztzZXNzX3B1dCB2YXI9J3Rlc3QnIHZhbHVlPSdibGFoJ308L3ByZT4KICAgIDwvZGl2PgogIDwvbGk+CiAgICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPgogICAgPGgzIGNsYXNzPSJhbCI+JiMxMjM7c2Vzc19lcmFzZX0gPHNwYW4gY2xhc3M9InNtYWxsIj5FcmFzZSBkYXRhIGZyb20gdGhlIHVzZXIgc2Vzc2lvbjwvc3Bhbj48L2gzPgogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4KICAgICAgPHA+QSBzbWFydHkgcGx1Z2luIHRoYXQgY2FuIGVyYXNlIGRhdGEgZnJvbSB0aGUgdXNlciBzZXNzaW9uLjwvcD4KICAgICAgPHA+UGFyYW1ldGVyczo8L3A+CiAgICAgIDx1bD4KICAgICAgICA8bGk+PHN0cm9uZz52YXI8L3N0cm9uZz4gLSBUaGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgdG8gZXJhc2UgaW4gdGhlIHNlc3Npb24uPC9saT4KICAgICAgPC91bD4KICAgICAgPHA+RXhhbXBsZTo8L3A+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjM7c2Vzc19lcmFzZSB2YXI9J3Rlc3QnfTwvcHJlPgogICAgPC9kaXY+CiAgPC9saT4KICAgIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+CiAgICA8aDMgY2xhc3M9ImFsIj4mIzEyMzt4dF9yZXBlYXR9IDxzcGFuIGNsYXNzPSJzbWFsbCI+UmVwZWF0aW5nIHRleHQ8L3NwYW4+PC9oMz4KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+CiAgICAgIDxwPkFub3RoZXIgc21hcnR5IHBsdWdpbiB0aGF0IHdpbGwgYWxsb3cgcmVwZWF0aW5nIHRleHQ8L3A+CiAgICAgIDxwPlBhcmFtZXRlcnM6PC9wPgogICAgICA8dWw+CiAgICAgICAgPGxpPjxzdHJvbmc+dGV4dDwvc3Ryb25nPiAtIFRoZSB0ZXh0IHRvIGJlIHJlcGVhdGVkPC9saT4KICAgICAgICA8bGk+PHN0cm9uZz5jb3VudDwvc3Ryb25nPiAtIFRoZSBudW1iZXIgb2YgdGltZXMgaXQgc2hvdWxkIGJlIHJlcGVhdGVkPC9saT4KICAgICAgICA8bGk+PHN0cm9uZz5hc3NpZ248L3N0cm9uZz4gLSBBc3NpZ24gdGhlIG91dHB1dCB0byB0aGUgc3BlY2lmaWVkIHNtYXJ0eSB2YXJpYWJsZTwvbGk+CiAgICAgIDwvdWw+CgogICAgICA8cD5FeGFtcGxlOjwvcD4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mIzEyMzt4dF9yZXBlYXQgdGV4dD0ndGhpcycgY291bnQ9JzUnfTwvcHJlPgogICAgPC9kaXY+CiAgPC9saT4KICAgIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+CiAgICA8aDMgY2xhc3M9ImFsIj4mIzEyMztjb250ZW50X2ZldGNofSA8c3BhbiBjbGFzcz0ic21hbGwiPkZldGNoIGFuZCByZXVzZSBDTVNNUyBjb250ZW50PC9zcGFuPjwvaDM+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+CiAgICAgIDxoND48ZW0+VXNpbmcgbW9yZSBjb250ZW50LWJsb2NrcyBmcm9tIHRoZSBwYWdlczwvZW0+PC9oND4KICAgICAgPHA+PHN0cm9uZz5leHRlbnNpb25zPC9zdHJvbmc+IGlzIHlvdXIgY2hvaWNlIHRoZW4uIEl0IHRha2VzIGEgPGVtPmNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGNvbnRlbnRfYmxvY2tzPC9lbT4uIElmIGFueSBvZiB0aGVtIChmb3IgYW4gaXRlbSkgZmVhdHVyZXMgY29udGVudCwgJGR1bXBbbl0tPmV4dGVuc2lvbiB3aWxsIGJlICcxJywgb3RoZXIgd2lzZSBpdCB3aWxsIGJlICcwJyAoZGVmYXVsdCkuIFRoaXMgY2FuIGJlIHVzZWQgdG8gY2hlY2sgZm9yIGF2YWlsYWJpbGl0eSBvZiAnbW9yZScgZGF0YS4gRWFjaCBjb250ZW50X2Jsb2NrIHdpbGwgYmUgYWRkZWQgYXMgYSBjbGFzcyBiZWxvdyAkZHVtcFtuXS0+ZXh0ZW5zaW9ucy4gRS5nLiAmIzEyMyRjb250ZW50IGJsb2NrPSdtb3JlX3RleHQnfSB3aWxsIGJlIGF2YWlsYWJsZSBhcyAkZHVtcFtuXS0+ZXh0ZW5zaW9ucy0+bW9yZV90ZXh0LT5kYXRhIHRvZ2V0aGVyIHdpdGggJGR1bXBbbl0tPmV4dGVuc2lvbnMtPm1vcmVfdGV4dC0+bGVuZ3RoLiBJZGVhbGx5LCB5b3VyIGNvbnRlbnQgYmxvY2sgbmFtZXMgZG8gbm90IGZlYXR1cmUgc3BlY2lhbCBjaGFyYWN0ZXJzIGFuZCBub3QgJyAnIG9yICctJywgdXNlICdfJyBpbnN0ZWFkLjwvcD4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mIzEyMyRjb250ZW50X2ZldGNoIGV4dGVuc2lvbnM9J3N1bW1hcnksaW1hZ2Usb3RoZXJfYmxvY2tfbmFtZSd9PC9wcmU+CgogICAgICA8aDM+UHJvY2VzcyBkYXRhIGZyb20gaXRlbXM8L2gzPgoKICAgICAgPGg0PjxlbT5DaGFuZ2UgdGhlIGRhdGUvdGltZSBmb3JtYXQ8L2VtPjwvaDQ+CiAgICAgIDxwPjxzdHJvbmc+ZGF0ZWZvcm1hdDwvc3Ryb25nPiBjYW4gYmUgdXNlZCB0byBmb3JtYXQgdGhlIGRhdGUgb3V0cHV0IG9mIGNvbnRlbnRfZmV0Y2guIENoZWNrIDxhIGhyZWY9Imh0dHA6Ly9kZS5waHAubmV0L3N0cmZ0aW1lIiB0YXJnZXQ9ImJsYW5rIj5odHRwOi8vZGUucGhwLm5ldC9zdHJmdGltZTwvYT4gZm9yIG1vcmUgaWZvIG9uIHRoZSBkYXRlIGZvcm1hdCBfb3B0aW9ucy4gSXQgaXMgc2V0IHRvIDxlbT4nJUEsICVlICVCICVZJzwvZW0+IGJ5IGRlZmF1bHQgKGUuZy4gU2F0LCAyMCBTZXB0ZW1iZXIgMjAwOCkuIEl0IGlzIHVzZWQgZm9yIHRoZSB0d28gdGltZSBzdGFtcHMgJGR1bXBbbl0tPmNyZWF0ZWQtPmRhdGUgYW5kICRkdW1wW25dLT5tb2RpZmllZC0+ZGF0ZSB0aGF0IGFyZSBhbHdheXMgcmV0dXJuZWQgd2l0aCBlYWNoIGl0ZW0uPC9wPgogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiYjMTIzJGNvbnRlbnRfZmV0Y2ggZGF0ZWZvcm1hdD0nJUEsICVlICVCICVZJ308L3ByZT4KCiAgICAgIDxoND48ZW0+Q2hhbmdlIHRoZSBkYXRlL3RpbWUgbG9jYWxlPC9lbT48L2g0PgogICAgICA8cD48c3Ryb25nPmNkbG9jYWxlPC9zdHJvbmc+IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBzcGVjaWZpYyBsb2NhbGUgZm9yIHlvdXIgb3V0cHV0LiBFLmcuIHlvdXIgcGFnZSBpcyBkYW5pc2ggYW5kIHlvdXIgc2l0ZS9zZXJ2ZXIgaXMgc2V0IHRvIHRoaXMgbG9jYWxlIC0gYnV0IGZvciB0aGUgZ2VuZXJhdGlvbiBvZiB2YWxpZCBSU1MgeW91IG1pZ2h0IG5lZWQgdGhlIFVTIGRhdGUvdGltZSBsb2NhbGUuIDwvcD4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mIzEyMyRjb250ZW50X2ZldGNoIGNkbG9jYWxlPSdlbi11cyd9PC9wcmU+CgogICAgICA8aDQ+PGVtPkNoYW5nZSB0aGUgZGF0ZSBmb3JtYXQgbG9jYWxlPC9lbT48L2g0PgogICAgICA8cD48c3Ryb25nPmxvY2FsZTwvc3Ryb25nPiBjYW4gYmUgdXNlZCB0byBhbHRlciB0aGUgbG9jYWxlIHVzZWQgZm9yIHRoZSB0aW1lc3RhbXAgKGUuZy4gc3lzdGVtIGlzIERhbmlzaCwgYnV0IHlvdSBuZWVkIFVTIGRheSBuYW1lcyBmb3IgWE1MKS48L3A+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjMkY29udGVudF9mZXRjaCBsb2NhbGU9J2VuLVVTJ308L3ByZT4KCiAgICAgIDxoND48ZW0+Q29tcGlsZSBvciByZW1vdmUgU21hcnR5IHRhZ3MgZnJvbSBvdXRwdXQ8L2VtPjwvaDQ+CiAgICAgIDxwPjxzdHJvbmc+ZG9fc21hcnR5PC9zdHJvbmc+IGNvbnRyb2xzIGhvdyBzbWFydHkgZGF0YSB0aGF0IG1heSBiZSByZXRyaWV2ZWQgc2hvdWxkIGJlIGhhbmRsZWQuIFRoZXJlIGFyZSB0aHJlZSBvcHRpb25zIDxlbT4nY29tcGlsZSc8L2VtPiwgPGVtPiduZXV0cmFsJzwvZW0+IGFuZCA8ZW0+J3N0cmlwJzwvZW0+LiA8ZW0+J2NvbXBpbGUnPC9lbT4gY29tcGlsZXMgc21hcnR5IGRhdGEgaW4gdGhlIHBhZ2VzIGZvdW5kLiA8ZW0+J25ldXRyYWwnPC9lbT4gcHJpbnRzIG91dCB0aGUgc21hcnR5IGNvZGUgYXMgcmVndWxhciB0ZXh0IGFuZCBpcyB0aGUgZGVmYXVsdCBzZXR0aW5nLiA8ZW0+J3N0cmlwJzwvZW0+IGRlbGV0ZXMgYWxsIHNtYXJ0eSBjb2RlIGZyb20geW91ciBwYWdlICh3ZWxsLCBldmVyeXRoaW5nIGJldHdlZW4gJiMxMjMkIGFuZCB9KS48L3A+CiAgICAgIDxwPkhvd2V2ZXIsIGJlIGNhcmVmdWxseSBub3QgdG8gY29uc3RydWN0IGEgcXVlcnkgdGhhdCB3b3VsZCBoYXZlIHRvIGNvbXBpbGUgaXRzZWxmLCB0aGlzIHdpbGwgcmVzdWx0IGluIGFuIG91dCBvZiBtZW1vcnkgZXJyb3IgZHVlIHRvIGVuZGxlc3MgcmVjdXJzaW9uLklmIHlvdSB1c2UgdGhpcyB0YWcgb25seSBvbmNlIHdpdGggdGhlIGNvbXBpbGUgcGFyYW1ldGVyIGluIHlvdXIgc2l0ZSwgbm8gcHJvYmxlbSwgaXQgcHJldmVudHMgaXRzZWxmIGZyb20gYmVpbmcgcmVuZGVyZWQuIEJ1dCBpZiB5b3UgaGF2ZSBhbm90aGVyIG9jY3VycmVuY2Ugb2YgdGhpcyB0YWcgdGhhdCB3b3VsZCBpbmNsdWRlIHRoZSBwYWdlIHRoYXQgaXMgY2FsbGluZyB0aGUgY3VycmVudGx5IHByb2Nlc3NlZCB0YWcgd2l0aCBjb21waWxlPSd0cnVlJywgeW91IHNob3VsZCBleGNsdWRlIGFsbCBvZiB0aGVzZSBwYWdlcyAoY29udGVudF9mZXRjaCBkb2VzIG5vdCBjaGVjayBmb3IgdGhlIGNvbXBpbGUgcGFyYW1ldGVyIG9mIG90aGVyIG9jY3VycmVuY2VzIG9mIHRoZSB0YWcpLjwvcD4KICAgICAgPHA+SWYgdGhhdCBjYWxsZWQgdGFnIHdvdWxkIGZlYXR1cmUgb3RoZXIgY29udGVudCBibG9ja3MuLi4gdGhlbiwgYWdhaW4sIGFsbCB3b3VsZCB3b3JrIG5pY2UuIEp1c3QgZG8gbm90IGNvbnN0cnVjdCBzb21ldGhpbmcgd2l0aCBjb250ZW50X2ZldGNoIHRoYXQgaXMgc29tZXdoZXJlIGluIHRoZSBjaGFpbiBvZiBldmVudHMgY29tcGlsaW5nIGl0c2VsZi48L3A+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjMkY29udGVudF9mZXRjaCBkb19zbWFydHk9ImNvbXBpbGUifTwvcHJlPgoKICAgICAgPGg0PjxlbT5SZW1vdmUgSFRNTCBmcm9tIGNvbnRlbnQgZWxlbWVudHMgc28gdGhhdCBpdCBjYW4gc2FmZWx5IGJlIHRydW5jYXRlZDwvZW0+PC9oND4KICAgICAgPHA+PHN0cm9uZz5odG1sPC9zdHJvbmc+IGlzIGEgcGFyYW1ldGVyIHRoYXQgYWxsb3dzIHlvdSB0byByZW1vdmUgYW55IEhUTUwsIEphdmFTY3JpcHQgYW5kIENTUyBmcm9tIGEgY29udGVudC1ibG9jay4gPGVtPidzdHJpcCc8L2VtPiBhbmQgPGVtPiduZXV0cmFsJzwvZW0+IGFyZSB0aGUgYXZhaWxhYmxlIF9vcHRpb25zLiA8ZW0+J25ldXRyYWwnPC9lbT4gd2lsbCBkaXNwbGF5IHRoZSBjb250ZW50IGFzIGl0IGlzIChhZnRlciBwcm9jZXNzaW5nIGRvX3NtYXJ0eSBzZXR0aW5ncykgYW5kIGlzIHRoZSBkZWZhdWx0IHNldHRpbmcuIDxlbT4nc3RyaXAnPC9lbT4gd2lsbCByZW1vdmUgdGhlIG1lbnRpb25lZCBlbGVtZW50cy48L3A+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjMkY29udGVudF9mZXRjaCBodG1sPSduZXV0cmFsJ308L3ByZT4KCiAgICAgIDxoMz5Tb3J0IGl0ZW1zPC9oMz4KCiAgICAgIDxoND48ZW0+UHJpbWFyeSBzb3J0aW5nIG9mIGRhdGEgZWxlbWVudHM8L2VtPjwvaDQ+CiAgICAgIDxwPjxzdHJvbmc+Zmlyc3Rfc29ydDwvc3Ryb25nPiBzb3J0cyB0aGUgZm91bmQgY29udGVudCBieSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6IDxlbT5pZCwgdGl0bGUsIGNyZWF0ZWQsIG1vZGlmaWVkLCBvd25lciwgaGllcmFyY2h5IChkZWZhdWx0KSwgaWRfaGllcmFyY2h5LCBsYXN0ZWRpdG9yLCBhY3RpdmUsIHNob3cgKHNob3cgaW4gbWVudSk8L2VtPi4gRm9yIHRpbWUgYmFzZWQgKGxpa2UgbmV3ZXN0IGNvbnRlbnRzKSB1c2UgY3JlYXRlZCwgZm9yIGxhc3QgdXBkYXRlZCBsaXN0cyB1c2UgbW9kaWZpZWQgKGJvdGggbmVlZCB0byBiZSByZXZlcnNlZCB3aXRoIHNvcnRfb3JkZXIpLiBIaW50OiBTb3J0aW5nIGJ5IG93bmVyIG9yIGxhc3RlZGl0b3IgdGFrZXMgcGxhY2UgYnkgSUQsIG5vdCBuYW1lITwvcD4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mIzEyMyRjb250ZW50X2ZldGNoIGZpcnN0X3NvcnQ9J293bmVyJ308L3ByZT4KCiAgICAgIDxoND48ZW0+U2V0IHRoZSBkaXJlY3Rpb24gb2YgcHJpbWFyeSBzb3J0aW5nPC9lbT48L2g0PgogICAgICA8cD48c3Ryb25nPmZpcnN0X3NvcnRfb3JkZXI8L3N0cm9uZz4gY2FuIGJlIHVzZWQgdG8gcmV2ZXJzZSB0aGUgc29ydGluZyBmaWx0ZXIuIDxlbT4ndXAnPC9lbT4gYW5kIDxlbT4nZG93bic8L2VtPiBhcmUgdGhlIGF2YWlsYWJsZSBfb3B0aW9ucywgd2hlcmVhcyAidXAiIChBIGJlZm9yZSBCIG9yIHllc3RlcmRheSBiZWZvcmUgdG9kYXkpIGlzIHRoZSBkZWZhdWx0IGRpcmVjdGlvbi48L3A+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjMkY29udGVudF9mZXRjaCBmaXJzdF9zb3J0X29yZGVyPSd1cCd9PC9wcmU+CgogICAgICA8aDQ+PGVtPlNlY29uZGFyeSBzb3J0aW5nIG9mIGRhdGEgZWxlbWVudHM8L2VtPjwvaDQ+CiAgICAgIDxwPjxzdHJvbmc+c2Vjb25kX3NvcnQ8L3N0cm9uZz4gc29ydHMgdGhlIGZvdW5kIGNvbnRlbnQganVzdCBhcyA8c3Ryb25nPmZpcnN0X3NvcnRfb3JkZXI8L3N0cm9uZz4gZG9lcyBhbmQgYWRkcyBhbiBleHRyYSBmaWx0ZXIgdG8gdGhlIHJlc3VsdHM8L3A+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjMkY29udGVudF9mZXRjaCBzZWNvbmRfc29ydD0nb3duZXInfTwvcHJlPgoKICAgICAgPGg0PjxlbT5TZXQgdGhlIGRpcmVjdGlvbiBvZiBzZWNvbmRhcnkgc29ydGluZzwvZW0+PC9oND4KICAgICAgPHA+PHN0cm9uZz5zZWNvbmRfc29ydF9vcmRlcjwvc3Ryb25nPiBpcyB0aGUgc2FtZSBhcyA8c3Ryb25nPmZpcnN0X3NvcnRfb3JkZXI8L3N0cm9uZz4gIGJ1dCBmb3IgPHN0cm9uZz5zZWNvbmRfc29ydDwvc3Ryb25nPi48L3A+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjMkY29udGVudF9mZXRjaCBzZWNvbmRfc29ydF9vcmRlcj0ndXAnfTwvcHJlPgoKICAgICAgPGgzPk1heGltdW0gZGF0YSBzdHJ1Y3R1cmUgZm9yIGZldGNoIGl0ZW1zOjwvaDM+CgogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPgogICYjMTIzOyoKICAgICRjb250ZW50X2ZldGNoID0gYXJyYXkgb2YgY2xhc3NlcwogICAgbiA9IGludGVnZXIKCiAgICAkY29udGVudF9mZXRjaFtuXS0mZ3Q7aXRlbSAgPSAgQ291bnRlciBmb3IgaXRlbXMgaW4gY3VycmVudCBsaXN0IChpbnRlZ2VyKQogICp9CiAgJiMxMjMkY29udGVudF9mZXRjaFsxXS0mZ3Q7Y29udGVudC0mZ3Q7aWR9CiAgJiMxMjMkY29udGVudF9mZXRjaFsxXS0mZ3Q7Y29udGVudC0mZ3Q7YWxpYXN9CiAgJiMxMjMkY29udGVudF9mZXRjaFsxXS0mZ3Q7Y29udGVudC0mZ3Q7dGl0bGV9CiAgJiMxMjMkY29udGVudF9mZXRjaFsxXS0mZ3Q7Y29udGVudC0mZ3Q7bWVudX0KICAmIzEyMyRjb250ZW50X2ZldGNoWzFdLSZndDtjb250ZW50LSZndDtzaG93fQogICYjMTIzJGNvbnRlbnRfZmV0Y2hbMV0tJmd0O2NvbnRlbnQtJmd0O2FjdGl2ZX0KICAmIzEyMyRjb250ZW50X2ZldGNoWzFdLSZndDtjb250ZW50LSZndDtkYXRhfQoKICAmIzEyMyRjb250ZW50X2ZldGNoWzFdLSZndDtwYXJlbnRzLSZndDtpZH0KICAmIzEyMyRjb250ZW50X2ZldGNoWzFdLSZndDtwYXJlbnRzLSZndDthbGlhc30KICAmIzEyMyRjb250ZW50X2ZldGNoWzFdLSZndDtwYXJlbnRzLSZndDt0aXRsZX0KCiAgJiMxMjMkY29udGVudF9mZXRjaFsxXS0mZ3Q7Y3JlYXRlZC0mZ3Q7ZGF0ZX0KICAmIzEyMyRjb250ZW50X2ZldGNoWzFdLSZndDtjcmVhdGVkLSZndDtieS0mZ3Q7dXNlcm5hbWV9CiAgJiMxMjMkY29udGVudF9mZXRjaFsxXS0mZ3Q7Y3JlYXRlZC0mZ3Q7YnktJmd0O2xhc3RfbmFtZX0KICAmIzEyMyRjb250ZW50X2ZldGNoWzFdLSZndDtjcmVhdGVkLSZndDtieS0mZ3Q7Zmlyc3RfbmFtZX0KICAmIzEyMyRjb250ZW50X2ZldGNoWzFdLSZndDtjcmVhdGVkLSZndDtieS0mZ3Q7ZW1haWx9CgogICYjMTIzJGNvbnRlbnRfZmV0Y2hbMV0tJmd0O21vZGlmaWVkLSZndDtkYXRlfQogICYjMTIzJGNvbnRlbnRfZmV0Y2hbMV0tJmd0O21vZGlmaWVkLSZndDtieS0mZ3Q7dXNlcm5hbWV9CiAgJiMxMjMkY29udGVudF9mZXRjaFsxXS0mZ3Q7bW9kaWZpZWQtJmd0O2J5LSZndDtsYXN0X25hbWV9CiAgJiMxMjMkY29udGVudF9mZXRjaFsxXS0mZ3Q7bW9kaWZpZWQtJmd0O2J5LSZndDtmaXJzdF9uYW1lfQogICYjMTIzJGNvbnRlbnRfZmV0Y2hbMV0tJmd0O21vZGlmaWVkLSZndDtieS0mZ3Q7ZW1haWx9CgogICYjMTIzJGNvbnRlbnRfZmV0Y2hbMV0tJmd0O2V4dGVuc2lvbn0KICAmIzEyMyoKICAgIEFuZCBmb3IgZWFjaCBleHRlbnNpb24geW91IGhhdmUgbmFtZWQsIHlvdSB3aWxsIGdldCBhbiBlcXVhbGx5IG5hbWVkIGNsYXNzIGVsZW1lbnQgYmVsb3cgJiMxMjMkY29udGVudF9mZXRjaFtuXS0mZ3Q7ZXh0ZW5zaW9ucwoKICAgIGUuZy4KICAqfQogICYjMTIzJGNvbnRlbnRfZmV0Y2hbMV0tPmV4dGVuc2lvbnMtJmd0O3N1bW1hcnktJmd0O2RhdGF9CiAgJiMxMjMkY29udGVudF9mZXRjaFsxXS0mZ3Q7ZXh0ZW5zaW9ucy0mZ3Q7c3VtbWFyeS0mZ3Q7bGVuZ3RofQogICAgICA8L3ByZT4KCiAgICAgIDxoNT5EYXRlIHN0cnVjdHVyZSBvZiBwYWdlciBpbmZvcm1hdGlvbjwvaDU+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+CiAgJiMxMjMkcGFnZXJfaW5mby0mZ3Q7Y3VycmVudH0KICAmIzEyMyRwYWdlcl9pbmZvLSZndDttYXh9CiAgJiMxMjMkcGFnZXJfaW5mby0mZ3Q7c2l6ZX08L3ByZT4KCiAgICAgIDxoNT5Vc2VmdWxsIHNtYXJ0eSBzbmlwcGV0cyBmb3Igd29ya2luZyB3aXRoIGNvbnRlbnRfZmV0Y2g8L2g1PgogICAgICA8cD5CZWxvdyB5b3UgZmluZCBzb21lIGNvZGUgc25pcHBldHMgeW91IGNhbiB1c2UgaW4geW91ciB0ZW1wbGF0ZXMgaW4gY29uanVuY3Rpb24gd2l0aCBjb250ZW50X2ZldGNoPC9wPgoKICAgICAgPGg1PlByZXBhcmUgdGVtcGxhdGUgZm9yIHBhZ2luZzwvaDU+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+CiAgJiMxMjM7YXNzaWduIHZhcj1wYWdlX2NhbGwgdmFsdWU9JHNtYXJ0eS5nZXQuc2hvd19wYWdlfQogICYjMTIzO2lmICRwYWdlX2NhbGwgPT0gJyd9JiMxMjM7YXNzaWduIHZhcj1wYWdlX2NhbGwgdmFsdWU9MX0mIzEyMzsvaWZ9PC9wcmU+CgogICAgICA8cD5UaGlzIHdpbGwgbGlzdGVuIGZvciBVUkwgcGFyYW1ldGVyIGNhbGxlZCBzaG93X3BhZ2UgYW5kIGl0cyB2YWx1ZS4gSWYgbm8gcGFyYW1ldGVyIGZvdW5kLCBjcmVhdGUgaXMgYW5kIGFzc2lnbiB2YWx1ZSAxLiBVc2UgJHBhZ2VfY2FsbCBhcyB0aGUgdmFsdWUgb2YgdGhlIHBhZ2UgcGFyYW1ldGVyICYjMTIzOy4uLnBhZ2U9JHBhZ2VfY2FsbC4uLn08L3A+CiAgICAgIDxoND4nbmV3ZXInICdvbGRlcicgcGFnZXI8L2g0PgogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPgogICYjMTIzO2lmICRwYWdlX2NhbGwgPiAxIH0KICAgICZsdDthIGhyZWY9ImJsb2cuaHRtP3Nob3dfcGFnZT0mIzEyMzskcGFnZXJfaW5mby0+Y3VycmVudC0xfSI+bmV3ZXIgYXJ0aWNsZXMmbHQ7L2E+CiAgJiMxMjM7L2lmfQoKICAmIzEyMztpZiAkcGFnZXJfaW5mby0+bWF4ID4gJHBhZ2VfY2FsbH0KICAgICZsdDthIGhyZWY9ImJsb2cuaHRtP3Nob3dfcGFnZT0mIzEyMzskcGFnZXJfaW5mby0+Y3VycmVudCsxfSI+b2xkZXIgYXJ0aWNsZXMmbHQ7L2E+CiAgJiMxMjM7L2lmfTwvcHJlPgogICAgICA8aDQ+UGFnZSBudW1iZXIgbGlzdCBwYWdlcjwvaDQ+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+CiYjMTIzO3NlY3Rpb24gbmFtZT0naScgc3RhcnQ9MSBsb29wPSRwYWdlcl9pbmZvLT5tYXgrMSBzdGVwPTF9CiZsdDthIGhyZWY9ImJsb2cuaHRtP3Nob3dfcGFnZT0mIzEyMzskc21hcnR5LnNlY3Rpb24uaS5pbmRleH0iPiYjMTIzOyRzbWFydHkuc2VjdGlvbi5pLmluZGV4fSZsdDsvYT4KJiMxMjM7L3NlY3Rpb259PC9wcmU+CiAgICAgIDxoND5XYWxrIHRocm91Z2ggYWxsIGF2YWlsYWJsZSBlbGVtZW50czwvaDQ+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+CiAgJiMxMjM7Y29udGVudF9mZXRjaCAuLi4gfQogICYjMTIzO2ZvcmVhY2ggJGNvbnRlbnRfZmV0Y2ggYXMgJGZldGNoX2RhdGF9CiAgJiMxMjM7JGZldGNoX2RhdGEtPmNvbnRlbnQtPmRhdGF9CiAgJiMxMjM7L2ZvcmVhY2h9PC9wcmU+CiAgICAgIDxoND5EaXNwbGF5IHJlYWQgbW9yZSBsaW5rPC9oND4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4KICAmIzEyMztjb250ZW50X2ZldGNoIC4uLiB9CiAgJiMxMjM7Zm9yZWFjaCAkY29udGVudF9mZXRjaCBhcyAkZmV0Y2hfZGF0YX0KICAgICYjMTIzO2lmICRmZXRjaF9kYXRhLT5leHRlbnNpb24gPT0gMX0KICAgICAgJmx0O2EgaHJlZj0iJiMxMjM7JGZldGNoX2RhdGEtPmNvbnRlbnQtPmFsaWFzfS5odG0iPnJlYWQgbW9yZSZsdDsvYT4KICAgICYjMTIzOy9pZn0KICAmIzEyMzsvZm9yZWFjaH08L3ByZT4KICAgICAgPHA+T3JpZ2luYWwgQXV0aG9yIG9mIHRoZSBjb250ZW50X2R1bXAgcGx1Z2luOiBOaWxzIEhhYWNrICZsdDtoZWxsb0BvcHRpY2FsdmFsdmUuY29tJmd0OzwvcD4KICAgIDwvZGl2PgogIDwvbGk+CiAgICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPgogICAgPGgzIGNsYXNzPSJhbCI+JiMxMjM7ZmlsZXNfbGlzdH0gPHNwYW4gY2xhc3M9InNtYWxsIj5MaXN0IGZpbGVzIGFuZCBmb2xkZXJzPC9zcGFuPjwvaDM+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+CiAgPC9saT4KICAgIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+CiAgICA8aDMgY2xhc3M9ImFsIj4mIzEyMztjb250ZW50X3Byb3RlY3R9IDxzcGFuIGNsYXNzPSJzbWFsbCI+UHJvdGVjdCBjb250ZW50IHdpdGggYSBwYXNzd29yZDwvc3Bhbj48L2gzPgogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4KICAgICAgPHA+VGhpcyBpcyBhIGZvcmsgb2YgPHN0cm9uZz5wYWdlX3Byb3RlY3Q8L3N0cm9uZz4gYnkgSm8gTW9yZy4gU2FtZSBjb2RlIGJhc2UsIGEgZmV3IGRpZmZlcmVuY2VzIGVtZXJnZWQgIGZyb20gYmVpbmcgaW50ZWdyYXRlZCBpbiBhIG1vZHVsZSwgaW4gcGFydGljdWxhciB0aGUgbGFjayBvZiBuZWVkIHRvIGluaXRpYWxpemUgdGhlIHBsdWdpbiBhcyBpbiB0aGUgb3JpZ2luYWwgcGx1Z2luLjxicj4KICAgICAgICBUaGlzIHBsdWdpbiBhbGxvd3MgeW91IHRvIHByb3RlY3QgYSBudW1iZXIgb2YgcGFnZXMgd2l0aCBvbmUgb3IgbW9yZSBwYXNzd29yZHMgZWl0aGVyIGJ5IGJlaW5nIHNldCBvbmNlIHBlciBlYWNoIHBhZ2UgeW91IHdhbnQgdG8gcHJvdGVjdCwgb3IgYnkgYmVpbmcgc2V0IG9uIGEgcGFnZSB0ZW1wbGF0ZSwgYWxsb3dpbmcgeW91IHRvIHByb3RlY3QgYWxsIHBhZ2VzIGNvbm5lY3RlZCB0byB0aGF0IHRlbXBsYXRlLiBJdCBpcyBjb21wbGVtZW50ZWQgYnkgYSBibG9jayBwbHVnaW4gPGNvZGU+PHN0cm9uZz4mIzEyMztwcm90ZWN0fSA8ZW0+Li4uY29udGVudCB5b3Ugd2FudCB0byBwcm90ZWN0Li4uPC9lbT4gJiMxMjM7L3Byb3RlY3R9PC9zdHJvbmc+PC9jb2RlPiAgYW5kIGEgbW9kaWZpZXIgPGNvZGU+PHN0cm9uZz4mIzEyMzsncHJvdGVjdCB0aGlzJ3xwcm90ZWN0fTwvc3Ryb25nPjwvY29kZT48L3A+CgogICAgICAgIDxkaXYgY2xhc3M9Indhcm5pbmciIHN0eWxlPSJkaXNwbGF5OmJsb2NrOyI+CiAgICAgICAgICA8cD4KICAgICAgICAgICAgPHN0cm9uZz5Ob3RlOiA8L3N0cm9uZz4gdGhlcmUgaXMgYSBwYXJ0aWN1bGFyaXR5IGluIHRoZSB3YXkgQ01TTVMgcmVuZGVycyBjb250ZW50IHdoaWNoIG1heSBleHBvc2UgcHJvdGVjdGVkIGNvbnRlbnQgaW4gY2VydGFpbiBzaXR1YXRpb25zLiBUbyBwcmV2ZW50IHRoYXQgdGhlcmUgYXJlIGEgZmV3IHJ1bGVzIHlvdSBuZWVkIHRvIGZvbGxvdzoKICAgICAgICAgIDwvcD4KICAgICAgICAgIDx1bD4KICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgIFdoZW4gdGhlIGRlZmF1bHQgY29udGVudCBibG9jayBpcyB0aGUgb25seSBvbmUgd2l0aCB0aGUgY29udGVudCB0byBwcm90ZWN0OgogICAgICAgICAgICAgIDxvbCB0eXBlPSIxIj4KICAgICAgICAgICAgICAgIDxsaT51c2UgYWxsIHRoZSBsb2dpYyBpbnNpZGUgdGhlIGJsb2NrIGl0c2VsZiBldmVuIGlmIHRoZSBwYXNzd29yZHMgYXJlIHNldCBvbiB0aGUgdGVtcGxhdGU7PC9saT4KICAgICAgICAgICAgICAgIDxsaT5zZXQgdGhlIGxvZ2luIGZvcm0gYW5kIHBhc3N3b3JkcyBhcyBjbG9zZSB0byB0aGUgdG9wIG9mIHRoZSBjb250ZW50IGFzIHBvc3NpYmxlIHdoZW4gc2V0IGluc2lkZSB0aGUgY29udGVudCBibG9jazs8L2xpPgogICAgICAgICAgICAgICAgPGxpPnVzaW5nIGFueSBvdGhlciBjb250ZW50IHByb3BlcnR5IHRvIHNldCB0aGUgbG9naWMgKGFzIHRoZSA8c3Ryb25nPlNtYXJ0eSBkYXRhIG9yIGxvZ2ljIHRoYXQgaXMgc3BlY2lmaWMgdG8gdGhpcyBwYWdlPC9zdHJvbmc+KSBtYXkgd29yayBvbiBhIHR5cGljYWwgc2V0dGluZyBidXQgd2lsbCBsZWF2ZSB0aGUgcHJvdGVjdGVkIGNvbnRlbnQgdnVsbmVyYWJsZSBpbiBjZXJ0YWluIGNpcmN1bXN0YW5jZXM7PC9saT4KICAgICAgICAgICAgICAgIDxsaT5rZWVwIGluIG1pbmQgdGhhdCB0aGVyZSBpcyBhIGZlYXR1cmUgaW4gQ01TTVMgdGhhdCB3aWxsIHN0cmlwIGRvd24gdGhlIHdob2xlIHRlbXBsYXRlIGFuZCByZW5kZXIgb25seSB0aGUgZGVmYXVsdCBjb250ZW50LCBzbyBmb2xsb3dpbmcgdGhlIGFib3ZlIHJ1bGVzIHdpbGwgcHJldmVudCBleHBvc3VyZSBvZiB0aGUgcHJvdGVjdGVkIGNvbnRlbnQ7PC9saT4KICAgICAgICAgICAgICA8L29sPgogICAgICAgICAgICA8L2xpPgogICAgICAgICAgICA8bGk+aWYgeW91IGhhdmUgbW9yZSB0aGFuIHRoZSBkZWZhdWx0IGNvbnRlbnQgYmxvY2s6CiAgICAgICAgICAgICAgIDxvbCB0eXBlPSIxIj4KICAgICAgICAgICAgICAgIDxsaT5wcmVmZXJhYmx5IGRvbid0IHVzZSB0aGUgbWFpbiBibG9jayB0byBrZWVwIHRoZSBwcm90ZWN0ZWQgY29udGVudCwgdXNlIGEgZGlmZmVyZW50IGJsb2NrIGZvciBpdDs8L2xpPgogICAgICAgICAgICAgICAgPGxpPmNvbnRlbnQgYmxvY2tzIG90aGVyIHRoYW4gdGhlIG1haW4gYXJlIG5vdCB2dWxuZXJhYmxlIHRvIGJlaW5nIGV4cG9zZWQgYnkgdGhlIGFib3ZlIGRlc2NyaWJlZCBDTVNNUyBmZWF0dXJlOzwvbGk+CiAgICAgICAgICAgICAgICA8bGk+aWYgeW91IG11c3QgdXNlIGl0IHRoZW4gZm9sbG93IHRoZSBydWxlcyBmb3IgdGhlIGRlZmF1bHQgY29udGVudCBhcyBpbiB0aGUgcHJldmlvdXMgc3VnZ2VzdGlvbjs8L2xpPgogICAgICAgICAgICAgIDwvb2w+CiAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJ3YXJuaW5nIiBzdHlsZT0iZGlzcGxheTpibG9jazsiPgogICAgICAgICAgPHA+CiAgICAgICAgICAgIDxzdHJvbmc+Tm90ZTogPC9zdHJvbmc+IFRoaXMgaXMgYSBzaW1wbGUsIHJlbGF0aXZlbHkgc2FmZSB3YXkgb2YgcHJvdGVjdGluZyBjb250ZW50IHdpdGhvdXQgaGF2aW5nIHRvIGluc3RhbGwgYSBmdWxsLWZsZWRnZWQgdXNlcnMgbWFuYWdlbWVudCBtb2R1bGUuIElmIHlvdSBuZWVkIGEgbW9yZSBjb21wbGV4IGFuZCBjb21wbGV0ZSB1c2VycycgYWNjZXNzIG1hbmFnZW1lbnQgbW9kdWxlIHBsZWFzZSBjb25zaWRlciB1c2luZyA8c3Ryb25nPk1BTVM8L3N0cm9uZz4uCiAgICAgICAgICA8L3A+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9ImluZm9ybWF0aW9uIiBzdHlsZT0iZGlzcGxheTpibG9jazsiPgogICAgICAgICAgPHA+CiAgICAgICAgICAgIEJlY2F1c2Ugb2YgdGhpcyBwbHVnaW4gaXMgYSBmb3JrIG9mIHRoZSBkaXNjb250aW51ZWQgUGFnZSBQcm90ZWN0IChwYWdlX3Byb3RlY3QpIHRoZXJlIGFyZSBhIGZldyBwYXJhbWV0ZXJzIHRoYXQgd2VyZSBsZWZ0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBBcyB0aGlzIHBsdWdpbiBkb2Vzbid0IHJlcXVpcmUgaW5pdGlhbGl6YXRpb24sIHdoaWNoIGlzIGRvbmUgYXQgdGhlIG1vZHVsZSBsZXZlbCB3aGVuIGl0IGlzIGxvYWRlZCwgdGhlIGRlZmF1bHQgYW5kIHRoZSBzZXQgYWN0aW9ucyBhcmUgbm93IHRoZSBzYW1lIHRoaW5nLiBUaGF0IG1lYW5zIHRoYXQgYSB0eXBpY2FsIGluaXRpYWxpemF0aW9uIHRhZyBkb2VzIG5vdGhpbmcgb24gaXRzIG93biBhbmQgY2FuIGJlIHNhZmVseSByZW1vdmVkIChpZiByZXBsYWNlZCBmcm9tIGEgcGFnZV9wcm90ZWN0IG9yaWdpbmFsIHRhZyksIGJ1dCBsZWF2aW5nIGl0IGluIHBsYWNlIGRvZXNuJ3QgYWZmZWN0IGluIGFueSB3YXkgdGhlIHNpdGUncyBwZXJmb3JtYW5jZS4KICAgICAgICAgIDwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJpbmZvcm1hdGlvbiIgc3R5bGU9ImRpc3BsYXk6YmxvY2s7Ij4KICAgICAgICAgIDxwPgogICAgICAgICAgICBQYXJhbWV0ZXJzIG1hcmtlZCBhcyA8c3Ryb25nPjxlbT4ocGVyc2lzdGVudCkgPC9lbT48L3N0cm9uZz4gYXJlIHNldCBvbmNlIGZvciB0aGUgd2hvbGUgcGFnZSByZXF1ZXN0LiBUaGUgZGVmYXVsdCBhY3Rpb24gY2FuIHNldCBhbnkgYW5kIGFsbCBvZiB0aGVtIHdpdGhvdXQgdGhlIG5lZWQgdG8gcmVwZWF0IHRoZW0gb24gZXZlcnkgdGFnIGNhbGwuIEhvd2V2ZXIsIGEgbGF0ZXIgY2FsbCBjYW4gb3ZlcnJpZGUgYSBwcmV2aW91c2x5IHNldCBwYXJhbWV0ZXIuCiAgICAgICAgICA8L3A+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxwPlBhcmFtZXRlcnM6PC9wPgoKICAgICAgICA8dWw+CiAgICAgICAgICA8bGk+PHN0cm9uZz5hY3Rpb248L3N0cm9uZz4gPGVtPihvcHRpb25hbCk8L2VtPiAtIHBvc3NpYmxlIHZhbHVlczoKICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT48ZW0+PHN0cm9uZz5kZWZhdWx0PC9zdHJvbmc+PC9lbT4gPHN0cm9uZz4gPGVtPihkZWZhdWx0KTwvZW0+PC9zdHJvbmc+OiB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yIHRoZSBtb2R1bGUgYW5kIGNhbiBiZSBvbWl0dGVkLiBPbiBpdHMgb3duIGl0IGRvZXMgbm90aGluZywgYnV0IGNhbiBiZSB1c2VkIGFzIGEgc2V0IGFjdGlvbiBpbiBjb25qdW5jdGlvbiB3aXRoIG90aGVyIHBhcmFtZXRlcnM7PC9saT4KICAgICAgICAgICAgICA8bGk+PGVtPjxzdHJvbmc+c2V0PC9zdHJvbmc+IChsZWdhY3kpIChkZXByZWNhdGVkKTwvZW0+OiB1c2UgdGhpcyBhY3Rpb24gdG8gZGlzdHJpYnV0ZSBwZXJzaXN0ZW50IHBhcmFtZXRlcnMgdGhvdWdoIGRpZmZlcmVudCB0YWdzIG9uIHRoZSBzYW1lIHBhZ2UgKGhlbHBzIHdpdGggdGVtcGxhdGUgcmVhZGFiaWxpdHkpLCB0aGlzIGFjdGlvbiBub3cgYmVpbmcgcGFydCBvZiB0aGUgZGVmYXVsdCBhY3Rpb24gY2FuIGFsc28gYmUgb21pdHRlZDs8L2xpPgogICAgICAgICAgICAgIDxsaT48ZW0+PHN0cm9uZz5mb3JtPC9zdHJvbmc+PC9lbT46IHNob3cgZWl0aGVyIHRoZSA8c3Ryb25nPmxvZ2luPC9zdHJvbmc+IGZvcm0gb3IgdGhlIDxzdHJvbmc+bG9nb3V0PC9zdHJvbmc+IGZvcm0sIGRlcGVuZGluZyBvbiBjdXJyZW50IHVzZXIgc3RhdGU7PC9saT4KICAgICAgICAgICAgPC91bD4KICAgICAgICAgIDwvbGk+CiAgICAgICAgICA8bGk+PHN0cm9uZz5sb2dpbl9hbGlhczwvc3Ryb25nPiA8ZW0+KG9wdGlvbmFsKSAocGVyc2lzdGVudCkgPC9lbT4gLSBhbiBleGlzdGluZyBwYWdlIGFsaWFzIChkZWZhdWx0cyB0byBubyByZWRpcmVjdGlvbik6IHRoaXMgd2lsbCBiZSB1c2VkIHRvIHJlZGlyZWN0IGFmdGVyIGxvZ2luIGlmIG5lZWRlZDs8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+bG9nb3V0X2FsaWFzPC9zdHJvbmc+IDxlbT4ob3B0aW9uYWwpIChwZXJzaXN0ZW50KTwvZW0+IC0gYW4gZXhpc3RpbmcgcGFnZSBhbGlhcyAoZGVmYXVsdHMgdG8gY3VycmVudCBwYWdlIGkuZS4gdGhlIHBhZ2Ugd2hlcmUgdGhlIHBsdWdpbiBpcyBiZWluZyB1c2VkKTogdGhpcyB3aWxsIGJlIHVzZWQgdG8gcmVkaXJlY3QgYWZ0ZXIgbG9nb3V0OzwvbGk+CiAgICAgICAgICA8bGk+PHN0cm9uZz50aW1lb3V0PC9zdHJvbmc+IDxlbT4ob3B0aW9uYWwpIChwZXJzaXN0ZW50KTwvZW0+IC0gaWYgc2V0IHRvIGEgdmFsdWUgaGlnaGVyIHRoYW4gMCBpdCB3aWxsIHNldCBhIGNvb2tpZSBhbmQgdXNlIHRoaXMgdmFsdWUgYXMgbWludXRlcyBiZWZvcmUgbG9naW4gdGltZXMgb3V0OzwvbGk+CiAgICAgICAgICA8bGk+PHN0cm9uZz5jb29raWVfbmFtZTwvc3Ryb25nPiA8ZW0+KG9wdGlvbmFsKSAocGVyc2lzdGVudCk8L2VtPiAtIHRoZSBuYW1lIG9mIHRoZSBjb29raWUgKGRlZmF1bHRzIHRvIDxzdHJvbmc+Y3BfYXV0aDwvc3Ryb25nPik7PC9saT4KICAgICAgICAgIDxsaT48c3Ryb25nPndlbGNvbWVfbXNnPC9zdHJvbmc+IDxlbT4ob3B0aW9uYWwpIChwZXJzaXN0ZW50KTwvZW0+IC0gYSBtZXNzYWdlIHRvIGJlIHNob3duIGFzIGEgd2VsY29tZSB0ZXh0IG9uIHRoZSBsb2dpbiBmb3JtOzwvbGk+CiAgICAgICAgICA8bGk+PHN0cm9uZz5wcm90ZWN0ZWRfbXNnPC9zdHJvbmc+IDxlbT4ob3B0aW9uYWwpIChwZXJzaXN0ZW50KTwvZW0+IC0gYSBtZXNzYWdlIHRvIHJlcGxhY2UgdGhlIHByb3RlY3RlZCBjb250ZW50IChkZWZhdWx0cyB0byBubyBtZXNzYWdlIGF0IGFsbCk7PC9saT4KICAgICAgICAgIDxsaT48c3Ryb25nPmVycm9yX21zZzwvc3Ryb25nPiA8ZW0+KG9wdGlvbmFsKSAocGVyc2lzdGVudCk8L2VtPiAtIGFuIGVycm9yIG1lc3NhZ2UgdG8gYmUgc2hvd24gb24gcGFzc3dvcmQgZXJyb3JzOzwvbGk+CiAgICAgICAgPC91bD4KICAgICAgICA8cD5FeGNsdXNpdmUgdG8gZm9ybSBhY3Rpb246PC9wPgogICAgICAgIDx1bD4KICAgICAgICAgIDxsaT48c3Ryb25nPmxvZ2luX2J0bjwvc3Ryb25nPiA8ZW0+KG9wdGlvbmFsKTwvZW0+IC0gdGV4dCBvZiB0aGUgbG9naW4gYnV0dG9uIGNhcHRpb24gKGRlZmF1bHRzIHRvIExvZ2luKTs8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+bG9nb3V0X2J0bjwvc3Ryb25nPiA8ZW0+KG9wdGlvbmFsKTwvZW0+IC0gdGV4dCBvZiB0aGUgbG9nb3V0IGJ1dHRvbiBjYXB0aW9uKGRlZmF1bHRzIHRvIExvZ291dDs8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+Zm9ybV9pZDwvc3Ryb25nPiA8ZW0+KG9wdGlvbmFsKTwvZW0+IC0gbG9naW4gZm9ybSBpZDs8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+Zm9ybV9jbGFzczwvc3Ryb25nPiA8ZW0+KG9wdGlvbmFsKTwvZW0+IC0gbG9naW4gZm9ybSBjbGFzczs8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+aW5fcGFzc19pZDwvc3Ryb25nPiA8ZW0+KG9wdGlvbmFsKTwvZW0+IC0gcGFzc3dvcmQgaW5wdXQgaWQ7PC9saT4KICAgICAgICAgIDxsaT48c3Ryb25nPmluX3Bhc3NfY2xhc3M8L3N0cm9uZz4gPGVtPihvcHRpb25hbCk8L2VtPiAtIHBhc3N3b3JkIGlucHV0IGNsYXNzOzwvbGk+CiAgICAgICAgICA8bGk+PHN0cm9uZz5idXR0b25faWQ8L3N0cm9uZz4gPGVtPihvcHRpb25hbCk8L2VtPiAtIGJvdGggYnV0dG9ucyBpZDs8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+YnV0dG9uX2NsYXNzPC9zdHJvbmc+IDxlbT4ob3B0aW9uYWwpPC9lbT4gLSBib3RoIGJ1dHRvbnMgY2xhc3M7PC9saT4KICAgICAgICA8L3VsPgogICAgICAgIDxwPlRoZSBwcm90ZWN0IGJsb2NrIHRhZyBhY2NlcHRzIG9ubHkgb25lIHBhcmFtZXRlcjo8L3A+CiAgICAgICAgPHVsPgogICAgICAgICAgPGxpPjxzdHJvbmc+cHJvdGVjdGVkX21zZzwvc3Ryb25nPiA8ZW0+KG9wdGlvbmFsKTwvZW0+IC0gYSBtZXNzYWdlIHRvIHJlcGxhY2UgdGhlIHByb3RlY3RlZCBjb250ZW50IChkZWZhdWx0cyB0byB3aGF0ZXZlciB3YXMgc2V0IG9uIGEgcHJldmlvdXMgcGVyc2lzdGVudCB0YWcgY2FsbCk7PC9saT4KICAgICAgICA8L3VsPgogICAgICAgIDxwPlRoZSBwcm90ZWN0IG1vZGlmaWVyIGRvZXNuJ3QgdGFrZSBhbnkgcGFyYW1ldGVycy48L3A+CiAgICAgICAgPGhyPgogICAgICAgIDxwPkV4YW1wbGUgYXMgYSBjb250ZW50IGJsb2NrOjwvcD4KICAgICAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+ICAmIzEyMztwcm90ZWN0fSAuLi5jb250ZW50IHlvdSB3YW50IHRvIHByb3RlY3QuLi4gJiMxMjM7L3Byb3RlY3R9IGFuZCBhIG1vZGlmaWVyIDwvcHJlPgogICAgICAgIDxwPkV4YW1wbGUgYXMgYSBjb250ZW50IG1vZGlmaWVyOjwvcD4KICAgICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiAgJiMxMjM7J3Byb3RlY3QgdGhpcyd8cHJvdGVjdH08L3ByZT4KCiAgICAgICAgPGgzPlF1aWNrIFVzZTwvaDM+CiAgICAgICAgPHA+VGhlIHBsdWdpbiBhbGxvd3MgZm9yIGZhc3QgZGVwbG95bWVudCBvZiBhIHNlY3VyZSBwYWdlLiBDb250ZW50IFByb3RlY3Qgd2lsbCBhc3NpZ24gYSA8c3Ryb25nPlNtYXJ0eTwvc3Ryb25nPiB2YXJpYWJsZSwgPHN0cm9uZz4kY3BfbG9nZ2VkX2luPC9zdHJvbmc+IGJ5IGRlZmF1bHQsIHdpdGggYSBib29sZWFuIHZhbHVlIGZsYWdnaW5nIHdoZXRoZXIgdGhlIGN1cnJlbnQgdXNlciBpcyBsb2dnZWQgaW4gb3Igbm90LjwvcD4KICAgICAgICA8cD5FeGFtcGxlOjwvcD4KICAgICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiAgJiMxMjM7Y29udGVudF9wcm90ZWN0IGFjdGlvbj0nZm9ybScgcGFzc3dvcmRzPSdwYXNzMSd9PC9wcmU+CgogICAgICAgIDxwPlRoaXMgaXMgYSBzaW1wbGUgd2F5IHRvIGhpZGUgdGhlIGNvbnRlbnQgb2YgYSBwYWdlIGZyb20gbm9uLWF1dGhvcml6ZWQgdXNlcnM6PC9wPgogICAgICAgIDxkaXYgY2xhc3M9ImluZm9ybWF0aW9uIiBzdHlsZT0iZGlzcGxheTpibG9jazsiPgogICAgICAgICAgPHA+VXNlIHRoaXMgb24gdGhlIHBhZ2UgY29udGVudCE8L3A+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4gICYjMTIzO2NvbnRlbnRfcHJvdGVjdCBhY3Rpb249J2Zvcm0nIHBhc3N3b3Jkcz0ncGFzczEnfQogICYjMTIzO2lmICRjcF9sb2dnZWRfaW59CiAgICBUaGUgYWxsb3dlZCBjb250ZW50Li4uLgogICYjMTIzO2Vsc2V9CiAgICBOb3QgTG9nZ2VkIGluIQogICYjMTIzOy9pZn08L3ByZT4KICAgICAgICA8cD5UaGUgcHJldmlvdXMgc25pcHBldCB3aWxsIHNob3cgYSBmb3JtIGZvciBub24tbG9nZ2VkLWluIHVzZXJzLCBhbG9uZyB3aXRoIHRoZSB0ZXh0ICJOb3QgTG9nZ2VkIGluISI8L3A+CiAgICAgICAgPHA+Rm9yIHRoZSBsb2dnZWQtaW4gdXNlciB3aWxsIHByZXNlbnQgYSBsb2dvdXQgYnV0dG9uLCBhbmQgIlRoZSBhbGxvd2VkIGNvbnRlbnQuLi4uIi48L3A+CiAgICAgICAgPGhyPgogICAgICAgIDxwPlRoaXMgaXMgYSBzaW1wbGUgd2F5IHRvIGhpZGUgdGhlIGNvbnRlbnQgb2YgYWxsIHBhZ2VzIHdpdGggdGhpcyB0ZW1wbGF0ZSBmcm9tIG5vbi1hdXRob3JpemVkIHVzZXJzOjwvcD4KICAgICAgICA8ZGl2IGNsYXNzPSJpbmZvcm1hdGlvbiIgc3R5bGU9ImRpc3BsYXk6YmxvY2s7Ij4KICAgICAgICAgIDxwPlVzZSB0aGlzIG9uIHRoZSBtYWluIHRlbXBsYXRlITwvcD4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4gICYjMTIzO2NvbnRlbnQgbmFtZT1wcm90ZWN0ZWQgYXNzaWduPSdwcm90ZWN0ZWQnfQogICYjMTIzO2NvbnRlbnRfcHJvdGVjdCBhY3Rpb249J2Zvcm0nIHBhc3N3b3Jkcz0ncGFzczEnfQogICYjMTIzO2lmICRjcF9sb2dnZWRfaW59CiAgICAgICYjMTIzOyRwcm90ZWN0ZWR9CiAgJiMxMjM7ZWxzZX0KICAgIE5vdCBMb2dnZWQgaW4hCiAgJiMxMjM7L2lmfQogICYjMTIzOyogb3IgKn0KICAmIzEyMzskcHJvdGVjdGVkfHByb3RlY3R9CiAgJiMxMjM7KiBvciAqfQogICYjMTIzO3Byb3RlY3R9JiMxMjM7JHByb3RlY3RlZH0mIzEyMzsvcHJvdGVjdH08L3ByZT4KCiAgICAgIDxwPlRoZSBwcmV2aW91cyBzbmlwcGV0IHdpbGwgc2hvdyBhIGZvcm0gZm9yIG5vbi1sb2dnZWQtaW4gdXNlcnMsIGFsb25nIHdpdGggdGhlIHRleHQgIk5vdCBMb2dnZWQgaW4hIjwvcD4KICAgICAgPHA+Rm9yIHRoZSBsb2dnZWQtaW4gdXNlciB3aWxsIHByZXNlbnQgYSBsb2dvdXQgYnV0dG9uLCBhbmQgdGhlIGNvbnRlbnQgb2YgdGhlIHBhZ2UuPC9wPgogICAgICA8aHI+CiAgICAgIDxwPllvdSBjYW4gYWxzbyB1c2UgdGhpcyB0YWcgdG8gYWRkIGEgZmV3IHBhcmFtZXRlcnMgZXhjZXB0IGZvciBhY3Rpb249J3NldCcgYW5kIGFjdGlvbj0nZm9ybScgKDxlbT5hbmQgYWxsIGZvcm0gZXhjbHVzaXZlIHBhcmFtZXRlcnMgYXMgdGhleSBhcmUgb25seSBwZXJ0aW5lbnQgdG8gdGhlIGZvcm0gYWN0aW9uIGFuZCBub3QgcGVyc2lzdGVudDwvZW0+KS4gVXNlOjwvcD4KICAgICAgPHVsPgogICAgICAgIDxsaT48c3Ryb25nPiYjMTIzO2NvbnRlbnRfcHJvdGVjdCBwYXNzd29yZHM9Jzwvc3Ryb25nPnBhc3MxWyxwYXNzPGVtPjxzdHJvbmc+Mjwvc3Ryb25nPjwvZW0+XS4uLlsscGFzczxlbT48c3Ryb25nPm48L3N0cm9uZz48L2VtPl08c3Ryb25nPid9PC9zdHJvbmc+PC9saT4KICAgICAgICA8bGk+PHN0cm9uZz4mIzEyMztjb250ZW50X3Byb3RlY3QgYWN0aW9uPSc8L3N0cm9uZz5kZWZhdWx0PHN0cm9uZz4nIHBhc3N3b3Jkcz0nPC9zdHJvbmc+cGFzczFbLHBhc3M8ZW0+PHN0cm9uZz4yPC9zdHJvbmc+PC9lbT5dLi4uWyxwYXNzPGVtPjxzdHJvbmc+bjwvc3Ryb25nPjwvZW0+XTxzdHJvbmc+J308L3N0cm9uZz48L2xpPgogICAgICA8L3VsPgoKICAgICAgPHA+UHV0IHRoaXMgb24gdGhlIGZpZWxkIDxzdHJvbmc+U21hcnR5IGRhdGEgb3IgbG9naWMgdGhhdCBpcyBzcGVjaWZpYyB0byB0aGlzIHBhZ2U8L3N0cm9uZz4gZm91bmQgb24gdGhlIHBhZ2UgPGVtPjxzdHJvbmc+X29wdGlvbnMgdGFiPC9zdHJvbmc+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+CiAgICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPgogICAgPGgzIGNsYXNzPSJhbCI+JiMxMjM7dHJpZ2dlcl80MDR9IDxzcGFuIGNsYXNzPSJzbWFsbCI+VHJpZ2dlciBhIDQwNCBlcnJvciA8c3BhbiBzdHlsZT0iY29sb3I6Z3JlZW4iPjxzdHJvbmc+KG5ldyk8L3N0cm9uZz48L3NwYW4+PC9zcGFuPjwvaDM+CiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPgogICAgICA8cD5BIHNtYXJ0eSBwbHVnaW4gdGhhdCB3aWxsIHRyaWdnZXIgYSBzZXJ2ZXIgNDA0IGVycm9yLiBUaGUgd2F5IHRoZSBlcnJvciB3aWxsIGJlIGhhbmRsZWQgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZXJlIGlzIGEgY3VzdG9tIENNU01TIDQwNCBlcnJvciBwYWdlIHNldCBpbiBDb250ZW50IE1hbmFnZXIgb3Igbm90LjwvcD4KICAgICAgPHA+UGFyYW1ldGVyczo8L3A+CiAgICAgIDx1bD4KICAgICAgICA8bGk+PHN0cm9uZz5hY3RpdmU8L3N0cm9uZz4gLSBOZWVkcyB0byBiZSAxLCB0cnVlLCBvciBhIG5vbi1lbXB0eSBzdHJpbmcgdG8gdHJpZ2dlciB0aGUgZXJyb3I7PC9saT4KICAgICAgICA8bGk+PHN0cm9uZz5tc2c8L3N0cm9uZz4gLSBUaGUgbWVzc2FnZSB0byBkaXNwbGF5IHdoZW4gdGhlIGVycm9yIGlzIHRyaWdnZXJlZCAoZGVmYXVsdCA8c3Ryb25nPidUaGlzIGNvbnRlbnQgaXMgbm90IGF2YWlsYWJsZSc8L3N0cm9uZz47KTwvbGk+CiAgICAgIDwvdWw+CgogICAgICA8cD5FeGFtcGxlOjwvcD4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mIzEyMzt0cmlnZ2VyXzQwNCBtc2c9J3RoaXMnIGFjdGl2ZT0kZG9fdHJpZ2dlcn08L3ByZT4KICAgIDwvZGl2PgogIDwvbGk+CiAgICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPgogICAgPGgzIGNsYXNzPSJhbCI+JiMxMjM7dHJpZ2dlcl80MDN9IDxzcGFuIGNsYXNzPSJzbWFsbCI+VHJpZ2dlciBhIDQwMyBlcnJvciA8c3BhbiBzdHlsZT0iY29sb3I6Z3JlZW4iPjxzdHJvbmc+KG5ldyk8L3N0cm9uZz48L3NwYW4+PC9zcGFuPjwvaDM+CiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPgogICAgICA8cD5BIHNtYXJ0eSBwbHVnaW4gdGhhdCB3aWxsIHRyaWdnZXIgYSBzZXJ2ZXIgNDAzIGVycm9yLiBUaGUgd2F5IHRoZSBlcnJvciB3aWxsIGJlIGhhbmRsZWQgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZXJlIGlzIGEgY3VzdG9tIENNU01TIDQwMyBlcnJvciBwYWdlIHNldCBpbiBDb250ZW50IE1hbmFnZXIgb3Igbm90LjwvcD4KICAgICAgPHA+UGFyYW1ldGVyczo8L3A+CiAgICAgIDx1bD4KICAgICAgICA8bGk+PHN0cm9uZz5hY3RpdmU8L3N0cm9uZz4gLSBOZWVkcyB0byBiZSAxLCB0cnVlLCBvciBhIG5vbi1lbXB0eSBzdHJpbmcgdG8gdHJpZ2dlciB0aGUgZXJyb3I7PC9saT4KICAgICAgICA8bGk+PHN0cm9uZz5tc2c8L3N0cm9uZz4gLSBUaGUgbWVzc2FnZSB0byBkaXNwbGF5IHdoZW4gdGhlIGVycm9yIGlzIHRyaWdnZXJlZCAoZGVmYXVsdCA8c3Ryb25nPidQZXJtaXNzaW9uIGRlbmllZCEnPC9zdHJvbmc+KTs8L2xpPgogICAgICA8L3VsPgoKICAgICAgPHA+RXhhbXBsZTo8L3A+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjM7dHJpZ2dlcl80MDMgbXNnPSd0aGlzJyBhY3RpdmU9JGRvX3RyaWdnZXJ9PC9wcmU+CiAgICA8L2Rpdj4KICA8L2xpPgogIDwvdWw+CiAgPC9kaXY+CiAgPGRpdiBpZD0iY2xhc3NfYyI+CiAgICA8aDI+U21hcnR5IFVzYWJsZSBDbGFzczwvaDI+CjxwPldoZW4gdGhpcyBtb2R1bGUgaXMgaW5zdGFsbGVkLCBhIG5ldyBzbWFydHkgY2xhc3MgbmFtZWQgc214IGlzIGF1dG9tYXRpY2FsbHkgYXZhaWxhYmxlIHRvIHlvdXIgcGFnZSB0ZW1wbGF0ZXMgYW5kIHZhcmlvdXMgbW9kdWxlIHRlbXBsYXRlcy4gVGhpcyBzbWFydHkgY2xhc3MgaGFzIG51bWVyb3VzIGZ1bmN0aW9ucyB0aGF0IHlvdSBjYW4gY2FsbCBhdCBhbnkgdGltZS48L3A+CjxoMz5BdmFpbGFibGUgRnVuY3Rpb25zOjwvaDM+Cjx1bCBjbGFzcz0iYWNjb3JkaW9uLWxpc3QiPgogIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+CiAgICA8aDMgY2xhc3M9ImFsIj4mIzEyMztzbXg6OnNlbGZfdXJsKCl9IDxzcGFuIGNsYXNzPSJzbWFsbCI+UmV0dXJuIHRoZSBjdXJyZW50IFVSTDwvc3Bhbj4KICAgIDwvaDM+CiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPgogICAgICA8cD4KICAgICAgICA8c3Ryb25nPnNteDo6c2VsZl91cmw8L3N0cm9uZz4oKQogICAgICA8L3A+CiAgICAgIDxwPlJldHVybnMgdGhlIGN1cnJlbnQgVVJMPC9wPgogICAgPC9kaXY+CiAgPC9saT4KICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPgogICAgPGgzIGNsYXNzPSJhbCI+JiMxMjM7c214OjphbmNob3JfdXJsKC4uLil9IDxzcGFuIGNsYXNzPSJzbWFsbCI+VVJMIHRvIGFuIGFuY2hvciBvbiB0aGUgc2FtZSBwYWdlPC9zcGFuPgogICAgPC9oMz4KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+CiAgICAgIDxwPgogICAgICAgIDxzdHJvbmc+c214OjphbmNob3JfdXJsPC9zdHJvbmc+KCRuYW1lKQogICAgICA8L3A+CiAgICAgIDxwPkdlbmVyYXRlIHRoZSBhYnNvbHV0ZSBVUkwgdG8gYW4gYW5jaG9yIHRoYXQgaXMgb24gdGhlIHNhbWUgcGFnZS48L3A+CiAgICAgIDxwPkFyZ3VtZW50czo8L3A+CiAgICAgIDx1bD4KICAgICAgICA8bGk+JG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgYW5jaG9yIHRvIGxpbmsgdG8uPC9saT4KICAgICAgPC91bD4KICAgICAgPHA+RXhhbXBsZTo8L3A+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+Jmx0O2EgaHJlZj0iJiMxMjM7c214OjphbmNob3JfdXJsKCdib3R0b20nKX0iJmd0O0dvIHRvIHRoZSBib3R0b20mbHQ7L2EmZ3Q7Jmx0O2EgbmFtZT0iYm90dG9tIiZndDtUaGUgYm90dG9tJmx0O2EmZ3Q7PC9wcmU+CiAgICA8L2Rpdj4KICA8L2xpPgogIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+CiAgICA8aDMgY2xhc3M9ImFsIj4mIzEyMztzbXg6OnNteDo6bW9kdWxlX2luc3RhbGxlZCguLi4pfSA8c3BhbiBjbGFzcz0ic21hbGwiPlRlc3QgaWYgYSBtb2R1bGUgaXMgaW5zdGFsbGVkPC9zcGFuPgogICAgPC9oMz4KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+CiAgICAgIDxwPgogICAgICAgIDxzdHJvbmc+c214Ojptb2R1bGVfaW5zdGFsbGVkPC9zdHJvbmc+KCRtb2R1bGVuYW1lKQogICAgICA8L3A+CiAgICAgIDxwPlRlc3QgaWYgYSBwYXJ0aWN1bGFyIG1vZHVsZSBpcyBpbnN0YWxsZWQuPC9wPgogICAgICA8cD5Bcmd1bWVudHM6PC9wPgogICAgICA8dWw+CiAgICAgICAgPGxpPiRtb2R1bGVuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0byBjaGVjazwvbGk+CiAgICAgIDwvdWw+CiAgICAgIDxwPkV4YW1wbGU6PC9wPgogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiYjMTIzO2lmIHNteDo6bW9kdWxlX2luc3RhbGxlZCgnTUFNUycpfUZvdW5kIE1BTVMmIzEyMzsvaWZ9PC9wcmU+CiAgICA8L2Rpdj4KICA8L2xpPgogIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+CiAgICA8aDMgY2xhc3M9ImFsIj4mIzEyMztzbXg6Om1vZHVsZV92ZXJzaW9uKC4uLil9IDxzcGFuIGNsYXNzPSJzbWFsbCI+UmV0dXJuIHRoZSB2ZXJzaW9uIG9mIGEgbW9kdWxlPC9zcGFuPgogICAgPC9oMz4KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+CiAgICAgIDxwPgogICAgICAgIDxzdHJvbmc+c214Ojptb2R1bGVfdmVyc2lvbjwvc3Ryb25nPigkbW9kdWxlbmFtZSllCiAgICAgIDwvcD4KICAgICAgPHA+UmV0dXJuIHRoZSB2ZXJzaW9uIG51bWJlciBvZiBhIHNwZWNpZmljIGluc3RhbGxlZCBtb2R1bGUuPC9wPgogICAgICA8cD5Bcmd1bWVudHM6PC9wPgogICAgICA8dWw+CiAgICAgICAgPGxpPiRtb2R1bGVuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0byBjaGVjazwvbGk+CiAgICAgIDwvdWw+CiAgICAgIDxwPkV4YW1wbGU6PC9wPgogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiYjMTIzOyR2ZXJzaW9uPXNteDo6bW9kdWxlX3ZlcnNpb24oJ01BTVMnKX1XZSBoYXZlIFZlcnNpb24gJiMxMjM7JGZldV92ZXJzaW9ufSBvZiBNQU1TPC9wcmU+CiAgICA8L2Rpdj4KICA8L2xpPgogIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+CiAgICA8aDMgY2xhc3M9ImFsIj4mIzEyMztzbXg6OmdldF9wYXJlbnRfYWxpYXMoLi4uKX0gPHNwYW4gY2xhc3M9InNtYWxsIj5SZXR1cm5zIHRoZSBhbGlhcyBvZiBwYWdlJ3MgcGFyZW50PC9zcGFuPgogICAgPC9oMz4KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+CiAgICAgIDxwPgogICAgICAgIDxzdHJvbmc+c214OjpnZXRfcGFyZW50X2FsaWFzPC9zdHJvbmc+KFskYWxpYXNdKS4KICAgICAgPC9wPgogICAgICA8cD5SZXR1cm5zIHRoZSBhbGlhcyBvZiB0aGUgc3BlY2lmaWVkIHBhZ2UncyBwYXJlbnQuIFJldHVybnMgYW4gZW1wdHkgc3RyaW5nIGlmIHRoZXJlIGlzIG5vIHBhcmVudC48L3A+CiAgICAgIDxwPkFyZ3VtZW50czo8L3A+CiAgICAgIDx1bD4KICAgICAgICA8bGk+WyRhbGlhc10gLSAob3B0aW9uYWwpIFRoZSBwYWdlIGFsaWFzIHRvIGZpbmQgdGhlIHBhcmVudCBvZi4gSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgY3VycmVudCBwYWdlIGlzIHVzZWQuPC9saT4KICAgICAgPC91bD4KICAgICAgPHA+RXhhbXBsZTo8L3A+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+VGhlIHBhcmVudCBwYWdlIGFsaWFzIGlzICYjMTIzO3NteDo6Z2V0X3BhcmVudF9hbGlhcygpfTwvcHJlPgogICAgPC9kaXY+CiAgPC9saT4KICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPgogICAgPGgzIGNsYXNzPSJhbCI+JiMxMjM7c214Ojppc19jaGlsZF9vZiguLi4pfSA8c3BhbiBjbGFzcz0ic21hbGwiPlRlc3RzIHdoZXRoZXIgaXMgYSBjaGlsZCBvZiB0aGUgc3BlY2lmaWVkIHBhcmVudCBhbGlhczwvc3Bhbj4KICAgIDwvaDM+CiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPgogICAgICA8cD4KICAgICAgICA8c3Ryb25nPnNteDo6aXNfY2hpbGRfb2Y8L3N0cm9uZz4oJHRlc3RfcGFyZW50LCR0ZXN0X2NoaWxkKQogICAgICA8L3A+CiAgICAgIDxwPlRlc3RzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBjaGlsZCBhbGlhcyBvciBhbmNlc3RvciBpcyBhIGNoaWxkIG9mIHRoZSBzcGVjaWZpZWQgcGFyZW50IGFsaWFzLiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIHRlc3QgdGhlIHJvb3QgYWxpYXMgb3IgYW55IHBhcmVudCBwYWdlLiBJdCBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIG9uIHNpdGVzIHdpdGggbXVsdGlwbGUgbGV2ZWxzIG9mIG9yZ2FuaXphdGlvbi48L3A+CiAgICAgIDxwPkFyZ3VtZW50czo8L3A+CiAgICAgIDx1bD4KICAgICAgICA8bGk+JHRlc3RfcGFyZW50IC0gc3RyaW5nIFRoZSBwYXJlbnQgcGFnZSBhbGlhcyB0byB0ZXN0IGFnYWluc3QuPC9saT4KICAgICAgICA8bGk+JHRlc3RfY2hpbGQgLSBzdHJpbmcgVGhlIGNoaWxkIHBhZ2UgYWxpYXMgdG8gdGVzdCBhZ2FpbnN0LjwvbGk+CiAgICAgIDwvdWw+CiAgICAgIDxwPkV4YW1wbGU6PC9wPgogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiYjMTIzO2lmIHNteDo6aXNfY2hpbGRfb2YoJ2hvbWUnLCRwYWdlX2FsaWFzKX0gVGhpcyBpcyBhIGNoaWxkIG9mIHRoZSBob21lIHBhZ2UgJiMxMjM7L2lmfTwvcHJlPgogICAgPC9kaXY+CiAgPC9saT4KICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPgogICAgPGgzIGNsYXNzPSJhbCI+JiMxMjM7c214OjpnZXRfcm9vdF9hbGlhcyguLi4pfSA8c3BhbiBjbGFzcz0ic21hbGwiPlJldHVybnMgdGhlIGFsaWFzIG9mIGEgcGFnZSdzIHJvb3QgcGFyZW50PC9zcGFuPgogICAgPC9oMz4KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+CiAgICAgIDxzdHJvbmc+c214OjpnZXRfcm9vdF9hbGlhczwvc3Ryb25nPihbJGFsaWFzXSkgPHA+UmV0dXJucyB0aGUgYWxpYXMgb2YgdGhlIHNwZWNpZmllZCBwYWdlJ3Mgcm9vdCBwYXJlbnQuIFJldHVybnMgYW4gZW1wdHkgc3RyaW5nIGlmIHRoZXJlIGlzIG5vIHJvb3QgcGFyZW50LjwvcD4KICAgICAgPHA+QXJndW1lbnRzOjwvcD4KICAgICAgPHVsPgogICAgICAgIDxsaT5bJGFsaWFzXSAtIChvcHRpb25hbCkgVGhlIHBhZ2UgYWxpYXMgdG8gZmluZCB0aGUgcm9vdCBwYXJlbnQgb2YuIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIGN1cnJlbnQgcGFnZSBpcyB1c2VkLjwvbGk+CiAgICAgIDwvdWw+CiAgICAgIDxwPkV4YW1wbGU6PC9wPgogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPlRoZSByb290IHBhcmVudCBwYWdlIGFsaWFzIGlzICYjMTIzO3NteDo6Z2V0X3Jvb3RfYWxpYXMoKX08L3ByZT4KICAgIDwvZGl2PgogIDwvbGk+CiAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4KICAgIDxoMyBjbGFzcz0iYWwiPiYjMTIzO3NteDo6Z2V0X3BhZ2VfdGl0bGUoLi4uKX0gPHNwYW4gY2xhc3M9InNtYWxsIj5SZXR1cm5zIHRoZSB0aXRsZSBvZiBhIHBhZ2U8L3NwYW4+CiAgICA8L2gzPgogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4KICAgICAgPHA+CiAgICAgICAgPHN0cm9uZz5zbXg6OmdldF9wYWdlX3RpdGxlPC9zdHJvbmc+KFskYWxpYXNdKS4KICAgICAgPC9wPgogICAgICA8cD5SZXR1cm5zIHRoZSB0aXRsZSBvZiB0aGUgc3BlY2lmaWVkIHBhZ2UuPC9wPgogICAgICA8cD5Bcmd1bWVudHM6PC9wPgogICAgICA8dWw+CiAgICAgICAgPGxpPlskYWxpYXNdIC0gKG9wdGlvbmFsKSBUaGUgcGFnZSBhbGlhcyB0byBmaW5kIHRoZSB0aXRsZSBvZi4gSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgY3VycmVudCBwYWdlIGlzIHVzZWQuPC9saT4KICAgICAgPC91bD4KICAgICAgPHA+RXhhbXBsZTo8L3A+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+VGhlIHRpdGxlIG9mIHRoZSBjdXJyZW50IHBhZ2UgaXMgJiMxMjM7c214OjpnZXRfcGFnZV90aXRsZSgpfTwvcHJlPgogIDwvbGk+CiAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4KICAgIDxoMyBjbGFzcz0iYWwiPiYjMTIzO3NteDo6Z2V0X3BhZ2VfbWVudXRleHQoLi4uKX0gPHNwYW4gY2xhc3M9InNtYWxsIj5SZXR1cm5zIHRoZSBtZW51IHRleHQgb2YgYSBwYWdlPC9zcGFuPgogICAgPC9oMz4KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+CiAgICAgIDxwPgogICAgICAgIDxzdHJvbmc+c214OjpnZXRfcGFnZV9tZW51dGV4dDwvc3Ryb25nPihbJGFsaWFzXSkuCiAgICAgIDwvcD4KICAgICAgPHA+UmV0dXJucyB0aGUgbWVudXRleHQgb2YgdGhlIHNwZWNpZmllZCBwYWdlLjwvcD4KICAgICAgPHA+QXJndW1lbnRzOjwvcD4KICAgICAgPHVsPgogICAgICAgIDxsaT5bJGFsaWFzXSAtIChvcHRpb25hbCkgVGhlIHBhZ2UgYWxpYXMgdG8gZmluZCB0aGUgdGl0bGUgb2YuIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIGN1cnJlbnQgcGFnZSBpcyB1c2VkLjwvbGk+CiAgICAgIDwvdWw+CiAgICAgIDxwPkV4YW1wbGU6PC9wPgogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPlRoZSBtZW51dGV4dCBvZiB0aGUgY3VycmVudCBwYWdlIGlzICYjMTIzO3NteDo6Z2V0X3BhZ2VfbWVudXRleHQoKX08L3ByZT4KICAgIDwvZGl2PgogIDwvbGk+CiAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4KICAgIDxoMyBjbGFzcz0iYWwiPiYjMTIzO3NteDo6Z2V0X3BhZ2VfdHlwZSguLi4pfSA8c3BhbiBjbGFzcz0ic21hbGwiPlJldHVybnMgdGhlIGNvbnRlbnQgdHlwZSBieSBhbGlhczwvc3Bhbj4KICAgIDwvaDM+CiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPgogICAgICA8cD4KICAgICAgICA8c3Ryb25nPnNteDo6Z2V0X3BhZ2VfdHlwZTwvc3Ryb25nPihbJGFsaWFzXSkuCiAgICAgIDwvcD4KICAgICAgPHA+UmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgY29udGVudCB0eXBlIG9mIHRoZSBzcGVjaWZpZWQgY29udGVudCBvYmplY3QgYnkgYWxpYXM8L3A+CiAgICAgIDxwPkFyZ3VtZW50czo8L3A+CiAgICAgIDx1bD4KICAgICAgICA8bGk+WyRhbGlhc10gLSAob3B0aW9uYWwpIFRoZSBwYWdlIGFsaWFzIHRvIGZpbmQgdGhlIHR5cGUgb2YuIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIGN1cnJlbnQgcGFnZSBpcyB1c2VkLjwvbGk+CiAgICAgIDwvdWw+CiAgICAgIDxwPkV4YW1wbGU6PC9wPgogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPlRoZSB0eXBlIG9mIHRoZSBjdXJyZW50IHBhZ2UgaXMgJiMxMjM7c214OjpnZXRfcGFnZV90eXBlKCl9PC9wcmU+CiAgICA8L2Rpdj4KICA8L2xpPgogIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+CiAgICA8aDMgY2xhc3M9ImFsIj4mIzEyMztzbXg6Omhhc19jaGlsZHJlbiguLi4pfSA8c3BhbiBjbGFzcz0ic21hbGwiPlRlc3QgaWYgYSBwYWdlIGhhcyBjaGlsZHJlbjwvc3Bhbj4KICAgIDwvaDM+CiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPgogICAgICA8cD4KICAgICAgICA8c3Ryb25nPnNteDo6aGFzX2NoaWxkcmVuPC9zdHJvbmc+KFskYWxpYXNdKS4KICAgICAgPC9wPgogICAgICA8cD5UZXN0IGlmIHRoZSBzcGVjaWZpZWQgcGFnZSBoYXMgY2hpbGRyZW4uPC9wPgogICAgICA8cD5Bcmd1bWVudHM6PC9wPgogICAgICA8dWw+CiAgICAgICAgPGxpPlskYWxpYXNdIC0gKG9wdGlvbmFsKSBUaGUgcGFnZSBhbGlhcyB0byB0ZXN0LiBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSBjdXJyZW50IHBhZ2UgaXMgdXNlZC48L2xpPgogICAgICA8L3VsPgogICAgICA8cD5FeGFtcGxlOjwvcD4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mIzEyMzskaGFzX2NoaWxkcmVuPXNteDo6aGFzX2NoaWxkcmVuKCl9JiMxMjM7aWYgJGhhc19jaGlsZHJlbn1UaGUgY3VycmVudCBwYWdlIGhhcyBjaGlsZHJlbiYjMTIzO2Vsc2V9VGhlIGN1cnJlbnQgcGFnZSBoYXMgbm8gY2hpbGRyZW4mIzEyMzsvaWZ9PC9wcmU+CiAgICA8L2Rpdj4KICA8L2xpPgogIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+CiAgICA8aDMgY2xhc3M9ImFsIj4mIzEyMztzbXg6OmdldF9jaGlsZHJlbiguLi4pfSA8c3BhbiBjbGFzcz0ic21hbGwiPkdldCBpbmZvcm1hdGlvbiBhYm91dCBhIHBhZ2UncyBjaGlsZHJlbjwvc3Bhbj4KICAgIDwvaDM+CiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPgogICAgICA8cD4KICAgICAgICA8c3Ryb25nPnNteDo6Z2V0X2NoaWxkcmVuPC9zdHJvbmc+KFskYWxpYXNdWywgJHNob3dpbmFjdGl2ZV0pLgogICAgICA8L3A+CiAgICAgIDxwPlJldHVybiBhbiBhcnJheSBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IGEgcGFnZSdzIGNoaWxkcmVuIGlmIGFueSBleGlzdC48L3A+CiAgICAgIDxwPkFyZ3VtZW50czo8L3A+CiAgICAgIDx1bD4KICAgICAgICA8bGk+WyRhbGlhc10gLSAob3B0aW9uYWwpIFRoZSBwYWdlIGFsaWFzIHRvIHRlc3QuIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIGN1cnJlbnQgcGFnZSBpcyB1c2VkLjwvbGk+CiAgICAgICAgPGxpPlskc2hvd2luYWN0aXZlXSAtIChvcHRpb25hbCkgV2V0aGVyIGluYWN0aXZlIHBhZ2VzIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0IChkZWZhdWx0cyB0byBmYWxzZSkuPC9saT4KICAgICAgPC91bD4KICAgICAgPHA+RmllbGRzOjwvcD4KICAgICAgPHVsPgogICAgICAgIDxsaT5hbGlhcyAtIHRoZSBwYWdlIGFsaWFzIG9mIHRoZSBjaGlsZDwvbGk+CiAgICAgICAgPGxpPmlkIC0gdGhlIHBhZ2UgaWQgb2YgdGhlIGNoaWxkPC9saT4KICAgICAgICA8bGk+dGl0bGUgLSB0aGUgdGl0bGUgcGFnZSBvZiB0aGUgY2hpbGQgcGFnZS48L2xpPgogICAgICAgIDxsaT5tZW51dGV4dCAtIHRoZSBtZW51IHRleHQgb2YgdGhlIGNoaWxkPC9saT4KICAgICAgICA8bGk+c2hvd19pbl9tZW51IC0gd2hldGhlciB0aGlzIGNoaWxkIHBhZ2UgaXMgdmlzaWJsZSBpbiBtZW51cy48L2xpPgogICAgICAgIDxsaT50eXBlIC0gVGhlIHR5cGUgb2YgY2hpbGQgY29udGVudCBvYmplY3QuPC9saT4KICAgICAgPC91bD4KICAgICAgPHA+RXhhbXBsZTo8L3A+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+CiAgJiMxMjM7JGNoaWxkcmVuPXNteDo6Z2V0X2NoaWxkcmVuKCl9CiAgJiMxMjM7aWYgY291bnQoJGNoaWxkcmVuKX0KICAgICYjMTIzO2ZvcmVhY2ggZnJvbT0kY2hpbGRyZW4gaXRlbT0nY2hpbGQnfQogICAgICAmIzEyMztpZiAkY2hpbGQuc2hvd19pbl9tZW51fQogICAgICAgIENoaWxkOiAgaWQgPSAmIzEyMzskY2hpbGQuaWR9IGFsaWFzID0gJiMxMjM7JGNoaWxkLmFsaWFzfSZsdDtici8mZ3Q7CiAgICAgICYjMTIzOy9pZn0KICAgICYjMTIzOy9mb3JlYWNofQogICYjMTIzOy9pZn08L3ByZT4KICAgIDwvZGl2PgogIDwvbGk+CiAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4KICAgIDxoMyBjbGFzcz0iYWwiPiYjMTIzO3NteDo6Z2V0X3BhZ2VfY29udGVudCguLi4pfSA8c3BhbiBjbGFzcz0ic21hbGwiPlJldHVybnMgdGhlIHRleHQgb2YgYSBjb250ZW50IGJsb2NrIG9mIGFub3RoZXIgcGFnZTwvc3Bhbj4KICAgIDwvaDM+CiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPgogICAgICA8cD4KICAgICAgICA8c3Ryb25nPnNteDo6Z2V0X3BhZ2VfY29udGVudDwvc3Ryb25nPigkYWxpYXNbLCRibG9ja10pLgogICAgICA8L3A+CiAgICAgIDxwPlJldHVybnMgdGhlIHRleHQgb2YgYSBzcGVjaWZpYyBjb250ZW50IGJsb2NrIG9mIGFub3RoZXIgcGFnZS48L3A+CiAgICAgIDxwPkFyZ3VtZW50czo8L3A+CiAgICAgIDx1bD4KICAgICAgICA8bGk+JGFsaWFzIC0gVGhlIHBhZ2UgYWxpYXMgdG8gZXh0cmFjdCBjb250ZW50IGZyb20uPC9saT4KICAgICAgICA8bGk+WyRibG9ja10gLSAob3B0aW9uYWwpIFRoZSBuYW1lIG9mIHRoZSBjb250ZW50IGJsb2NrIGluIHRoZSBzcGVjaWZpZWQgcGFnZS4gSWYgdGhpcyB2YXJpYWJsZSBpcyBub3Qgc3BlY2lmaWVkIHRoZSB2YWx1ZSBvZiB0aGUgZGVmYXVsdCBjb250ZW50IGJsb2NrIDxlbT4oY29udGVudF9lbik8L2VtPiBpcyBhc3N1bWVkLiA8L2xpPgogICAgICA8L3VsPgogICAgICA8cD5FeGFtcGxlOjwvcD4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj5UaGUgJ3NlY29uZCcgYmxvY2sgb2YgdGhlICdhYm91dCcgcGFnZSBpcyAmIzEyMzskZm9vPXNteDo6Z2V0X3BhZ2VfY29udGVudCgnYWJvdXQnLCdzZWNvbmQnKX0mIzEyMztldmFsIHZhcj0kZm9vfTwvcHJlPgogICAgPC9kaXY+CiAgPC9saT4KICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPgogICAgPGgzIGNsYXNzPSJhbCI+JiMxMjM7c214OjpnZXRfc2libGluZyguLi4pfSA8c3BhbiBjbGFzcz0ic21hbGwiPlJldHVybnMgdGhlIGFsaWFzIG9mIHRoZSBuZXh0IG9yIHByZXZpb3VzIHNpYmxpbmc8L3NwYW4+CiAgICA8L2gzPgogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4KICAgICAgPHA+CiAgICAgICAgPHN0cm9uZz5zbXg6OmdldF9zaWJsaW5nPC9zdHJvbmc+KCRkaXJlY3Rpb24sJGFsaWFzKS4KICAgICAgPC9wPgogICAgICA8cD5SZXR1cm5zIHRoZSBhbGlhcyBvZiB0aGUgbmV4dCBvciBwcmV2aW91cyBzaWJsaW5nIHRvIHRoZSBzcGVjaWZpZWQgcGFnZS4gb3IgZmFsc2UuPC9wPgogICAgICA8cD5Bcmd1bWVudHM6PC9wPgogICAgICA8dWw+CiAgICAgICAgPGxpPiRkaXJlY3Rpb24gLSB0aGUgZGlyZWN0aW9uIHRvIGxvb2sgaW4uIHBvc3NpYmxlIHZhbHVlcyBhcmUgcHJldixwcmV2aW91cywtMSxuZXh0LDE8L2xpPgogICAgICA8L3VsPgogICAgICA8cD5FeGFtcGxlOjwvcD4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj5MaW5rIHRvIHByZXZpb3VzIHNpYmxpbmc6ICYjMTIzOyRwcmV2X3NpYmxpbmc9c214OjpnZXRfc2libGluZygmcXVvdDtwcmV2JnF1b3QpfSYjMTIzO2lmICFlbXB0eSgkcHJldl9zaWJsaW5nKX0mIzEyMztjbXNfc2VsZmxpbmsgcGFnZT0mcXVvdDskcHJldl9zaWJsaW5nJnF1b3Q7IHRleHQ9JnF1b3Q7UHJldmlvdXMmcXVvdDt9JiMxMjM7L2lmfTwvcHJlPgogICAgPC9kaXY+CiAgPC9saT4KICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPgogICAgPGgzIGNsYXNzPSJhbCI+JiMxMjM7c214OjpnZXRfcGFyYWxsZWxfcGFnZSguLi4pfSA8c3BhbiBjbGFzcz0ic21hbGwiPkdldCB0aGUgYWxpYXMgb2YgYSBwYXJhbGxlbCBwYWdlIGluIHRoZSBwYWdlIHN0cnVjdHVyZTwvc3Bhbj4KICAgIDwvaDM+CiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPgogICAgICA8cD4KICAgICAgICA8c3Ryb25nPnNteDo6Z2V0X3BhcmFsbGVsX3BhZ2U8L3N0cm9uZz4oJG5ld19yb290WywkY3VycmVudF9wYWdlID0gbnVsbF0pLgogICAgICA8L3A+CiAgICAgIDxwPkdldCB0aGUgYWxpYXMgb2YgYSBwYXJhbGxlbCBwYWdlIGluIHRoZSBwYWdlIHN0cnVjdHVyZSBnaXZlbiBhIGRpZmZlcmVudCByb290IGFsaWFzLjwvcD4KICAgICAgPHA+SW4gYSBtdWx0aWxhbmd1YWdlIHNpdGUgd2hlcmUgdGhlIHJvb3QgbGV2ZWxzIHJlcHJlc2VudCBkaWZmZXJlbnQgbGFuZ3VhZ2VzLCBpdCBtYXkgYmUgdXNlZnVsIHRvIHJldHJpZXZlIHRoZSBhbGlhcyB0byBhbiBlcXVpdmFsZW50IHBhZ2UgaW4gYSBkaWZmZXJlbnQgbGFuZ3VhZ2UuIGkuZS46IGlmIHRoZSB1c2VyIGlzIGN1cnJlbnRseSBicm93c2luZyB0aGUgZnJlbmNoIHBhZ2UgYW5kIHdpc2hlcyB0byBzZWUgdGhlIHNhbWUgcGFnZSBpbiBlbmdsaXNoIChpZiBpdCBleGlzdHMpLjwvcD4KICAgICAgPHA+VGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBhbGlhcyBvZiB0aGUgc3BlY2lmaWVkIHBhZ2UgdW5kZXIgdGhlIG5ldyByb290LiBJZiBpdCBleGlzdHMuIElmIG5vdGhpbmcgaXMgZm91bmQsIG51bGwgaXMgcmV0dXJuZWQuPC9wPgogICAgICA8cD5Bcmd1bWVudHM6PC9wPgogICAgICA8dWw+CiAgICAgICAgPGxpPm5ldyByb290IC0gVGhlIGFsaWFzIG9mIHRoZSBuZXcgcm9vdCBwYXJlbnQuIE5vdGUsIGlmIGEgdG9wIGxldmVsIHBhZ2UgaXMgbm90IHNwZWNpZmllZCwgdGhlIGFsaWFzIHByb3ZpZGVkIGlzIHVzZWQgdG8gZmluZCB0aGUgdG9wIGxldmVsIHBhZ2UgKHNlZSBnZXRfcm9vdF9hbGlhcykuPC9saT4KICAgICAgICA8bGk+Y3VycmVudF9wYWdlIC0gKG9wdGlvbmFsKSBUaGUgcGFnZSBhbGlhcyB0byBmaW5kIHRoZSBwZWVyIG9mLiBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSBjdXJyZW50IHBhZ2UgaXMgdXNlZC48L2xpPgogICAgICA8L3VsPgogICAgICA8cD5FeGFtcGxlOjwvcD4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj5GaW5kIHRoZSBlcXVpdmFsZW50IGZyZW5jaCBwYWdlIGZvciB0aGlzIHBhZ2U6ICYjMTIzOyR0bXA9c214OjpnZXRfcGFyYWxsZWxfcGFnZSgnRlInKX0mIzEyMztpZiAkdG1wICE9ICcnICYmICR0bXAgIT0gJHBhZ2VfYWxpYXN9JiMxMjM7Y21zX3NlbGZsaW5rIHBhZ2U9JHRtcH0mIzEyMzsvaWZ9PC9wcmU+CiAgICA8L2Rpdj4KICA8L2xpPgogIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+CiAgICA8aDMgY2xhc3M9ImFsIj4mIzEyMztzbXg6OmdldF9wYXJhbGxlbF91cmwoLi4uKX0gPHNwYW4gY2xhc3M9InNtYWxsIj5HZXQgdGhlIFVSTCBvZiBhIHBhcmFsbGVsIHBhZ2UgaW4gdGhlIHBhZ2Ugc3RydWN0dXJlPC9zcGFuPgogICAgPC9oMz4KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+CiAgICAgIDxwPgogICAgICAgIDxzdHJvbmc+c214OjpnZXRfcGFyYWxsZWxfdXJsPC9zdHJvbmc+KCRuZXdfcm9vdFssJGN1cnJlbnRfcGFnZSA9IG51bGxdKS4KICAgICAgPC9wPgogICAgICA8cD5HZXQgdGhlIFVSTCBvZiBhIHBhcmFsbGVsIHBhZ2UgaW4gdGhlIHBhZ2Ugc3RyaWN0dXJlIGdpdmVuIGEgZGlmZmVyZW50IHJvb3QgYWxpYXMuPC9wPgogICAgICA8cD5JbiBhIG11bHRpbGFuZ3VhZ2Ugc2l0ZSB3aGVyZSB0aGUgcm9vdCBsZXZlbHMgcmVwcmVzZW50IGRpZmZlcmVudCBsYW5ndWFnZXMsIGl0IG1heSBiZSB1c2VmdWwgdG8gcmV0cmlldmUgdGhlIFVSTCB0byBhbiBlcXVpdmFsZW50IHBhZ2UgaW4gYSBkaWZmZXJlbnQgbGFuZ3VhZ2UuIGkuZS46IGlmIHRoZSB1c2VyIGlzIGN1cnJlbnRseSBicm93c2luZyB0aGUgZnJlbmNoIHBhZ2UgYW5kIHdpc2hlcyB0byBzZWUgdGhlIHNhbWUgcGFnZSBpbiBlbmdsaXNoIChpZiBpdCBleGlzdHMpLjwvcD4KICAgICAgPHA+VGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBhbGlhcyBvZiB0aGUgc3BlY2lmaWVkIHBhZ2UgdW5kZXIgdGhlIG5ldyByb290LiBJZiBpdCBleGlzdHMuIElmIG5vdGhpbmcgaXMgZm91bmQsIG51bGwgaXMgcmV0dXJuZWQuPC9wPgogICAgICA8cD5Bcmd1bWVudHM6PC9wPgogICAgICA8dWw+CiAgICAgICAgPGxpPm5ldyByb290IC0gVGhlIGFsaWFzIG9mIHRoZSBuZXcgcm9vdCBwYXJlbnQuIE5vdGUsIGlmIGEgdG9wIGxldmVsIHBhZ2UgaXMgbm90IHNwZWNpZmllZCwgdGhlIGFsaWFzIHByb3ZpZGVkIGlzIHVzZWQgdG8gZmluZCB0aGUgdG9wIGxldmVsIHBhZ2UgKHNlZSBnZXRfcm9vdF9hbGlhcykuPC9saT4KICAgICAgICA8bGk+Y3VycmVudF9wYWdlIC0gKG9wdGlvbmFsKSBUaGUgcGFnZSBhbGlhcyB0byBmaW5kIHRoZSBwZWVyIG9mLiBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSBjdXJyZW50IHBhZ2UgaXMgdXNlZC48L2xpPgogICAgICA8L3VsPgogICAgICA8cD5FeGFtcGxlOjwvcD4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj5GaW5kIHRoZSBlcXVpdmFsZW50IGZyZW5jaCBwYWdlIGZvciB0aGlzIHBhZ2U6ICYjMTIzOyR1cmw9c214OjpnZXRfcGFyYWxsZWxfcGFnZSgnRlInKX0KICAgICYjMTIzO2lmICR1cmx9Jmx0O2EgaHJlZj0iJiMxMjM7JHVybH0iPkZSJmx0Oy9hPiYjMTIzOy9pZn08L3ByZT4KICAgIDwvZGl2PgogIDwvbGk+CiAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4KICAgIDxoMyBjbGFzcz0iYWwiPiYjMTIzO3NteDo6Z2V0X2ZpbGVfbGlzdGluZyguLi4pfSA8c3BhbiBjbGFzcz0ic21hbGwiPlJldHVybiBhIGxpc3Qgb2YgZmlsZXMgaW4gYSBkaXJlY3Rvcnk8L3NwYW4+CiAgICA8L2gzPgogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4KICAgICAgPHA+CiAgICAgICAgPHN0cm9uZz5zbXg6OmdldF9maWxlX2xpc3Rpbmc8L3N0cm9uZz4oJGRpclssJGV4Y2x1ZGVwcmVmaXhdKS4KICAgICAgPC9wPgogICAgICA8cD5SZXR1cm4gYSBsaXN0IG9mIGZpbGVzIGluIGEgZGlyZWN0b3J5LjwvcD4KICAgICAgPHA+QXJndW1lbnRzOjwvcD4KICAgICAgPHVsPgogICAgICAgIDxsaT4kZGlyIC0gVGhlIGRpcmVjdG9yeSB0byBzY2FuIChzaG91bGQgYmUgYW4gYWJzb2x1dGUgZGlyZWN0b3J5KTwvbGk+CiAgICAgICAgPGxpPlskZXhjbHVkZXByZWZpeF0gLSAob3B0aW9uYWwpIEV4Y2x1ZGUgZmlsZXMgc3RydGluZyB3aXRoIHRoZSBzcGVjaWZpZWQgcHJlZml4LjwvbGk+CiAgICAgIDwvdWw+CiAgICA8L2Rpdj4KICA8L2xpPgo8L3VsPiAgPC9kaXY+CiAgPGRpdiBpZD0ibmV3X2MiPgogICAgPGgyPldoYXQgaXMgTmV3PC9oMj4KCjxwPkhlcmUncyB3aGF0IHdlIGhhdmUgYmVlbiB3b3JraW5nIG9uOjwvcD4KPHVsPgogIDxsaT5OZXcgUGx1Z2luczoKICAgIDx1bD4KICAgICAgPGxpPjxzdHJvbmc+JiMxMjM7dHJpZ2dlcl80MDR9PC9zdHJvbmc+IC0gVHJpZ2dlciBhIDQwNCBlcnJvcjs8L2xpPgogICAgICA8bGk+PHN0cm9uZz4mIzEyMzt0cmlnZ2VyXzQwM308L3N0cm9uZz4gLSBUcmlnZ2VyIGEgNDAzIGVycm9yOzwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPkFsdGhvdWdoIHRoZSBtb2R1bGUgYWx3YXlzIGRlcGVuZGVkIG9uIENNU01TRXh0LCBpdCBkaWRuJ3QgZW5mb3JjZSB0aGUgZGVwZW5kZW5jeSB3aGljaCBwcm9iYWJseSBjcmVhdGVkIG9kZCBpc3N1ZXMgd2l0aCBzb21lIG9mIGl0cyBmdW5jdGlvbmFsaXR5IGlmIENNU01TRXh0IHdhcyBub3QgaW5zdGFsbGVkOiB0aGUgZGVwZW5kZW5jeSBpcyBub3cgb2ZmaWNpYWwgYW5kIGVuZm9yY2VkOzwvbGk+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+PGgzPkRlcGVuZGVuY2llczwvaDM+PHVsPjxsaT5DTVNNU0V4dCA9Jmd0OyAxLjQuMDwvbGk+PC91bD4=]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBKbyBNb3JnICZsdDtqb21vcmdAY21zbWFkZXNpbXBsZS5vcmcmZ3Q7PGJyIC8+PGJyIC8+VmVyc2lvbjogMS4zLjA8YnIgLz48YnIgLz5DaGFuZ2UgSGlzdG9yeTo8YnIgLz48dWw+CiAgPGxpPjEuMyAtIE5vdmVtYmVyLCAyMDIzCiAgICA8cD5BZGRlZCAyIG5ldyBwbHVnaW5zOjwvcD4KICAgIDx1bD4KICAgICAgPGxpPjxzdHJvbmc+JiMxMjM7dHJpZ2dlcl80MDR9PC9zdHJvbmc+IC0gVHJpZ2dlciBhIDQwNCBlcnJvcjs8L2xpPgogICAgICA8bGk+PHN0cm9uZz4mIzEyMzt0cmlnZ2VyXzQwM308L3N0cm9uZz4gLSBUcmlnZ2VyIGEgNDAzIGVycm9yOzwvbGk+CiAgICA8L3VsPgogICAgPHA+ZGVwZW5kZW5jeSBvbiBDTVNNU0V4dCBpcyBub3cgb2ZmaWNpYWwgYW5kIGVuZm9yY2VkOzwvcD4KCiAgPC9saT4KICA8bGk+MS4yIC0gRmVicnVhcnksIDIwMjMKICAgIDxwPkFkZGVkIDMgbmV3IHBsdWdpbnM7PC9wPgogICAgPHA+Q2xlYW5lZCBhbmQgcmVvcmdhbml6ZWQgdGhlIGhlbHAgZG9jdW1lbnRhdGlvbjs8L3A+CiAgICA8cD5OZXcgJ2NsaWNrIHRvIGNvcHknIGZ1bmN0aW9uYWxpdHkgb24gY29kZSBzbmlwcGV0czs8L3A+CiAgICA8cD5GaXhlcyBhbmQgYSBmZXcgbW9yZSBQSFAgOC4xIGNvbXBhdGliaWxpdHkgdXBkYXRlczs8L3A+CiAgPC9saT4KICA8bGk+MS4wLjEgLSBEZWNlbWJlciwgMjAyMgogICAgPHA+Rml4ZXMgYW5kIFBIUCA4LjEgY29tcGF0aWJpbGl0eSB1cGRhdGVzOzwvcD4KICA8L2xpPgogIDxsaT4xLjAgLSBGZWJydWFyeSwgMjAyMQogICAgPHA+SW5pdGlhbCByZWxlYXNlPC9wPgogIDwvbGk+CjwvdWw+PGJyIC8+]]></about>
	<description><![CDATA[CMSMS Smarty Tools]]></description>
	<requires>
	  <requiredname>CMSMSExt</requiredname>
	  <requiredversion>1.4.0</requiredversion>
	</requires>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<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+IGRpdicpDQogICAgICAuZWFjaChmdW5jdGlvbigpDQogICAgICB7DQogICAgICAgICQodGhpcykuY2xpY2soZnVuY3Rpb24oKQ0KICAgICAgICB7DQogICAgICAgICAgQ29va2llcy5zZXQoJ3NtYXJ0eV9leHRfdGFiX2FjdGl2ZScsIHRoaXMuaWQpOw0KICAgICAgICB9KTsNCiAgICAgIH0pOw0KICANCiAgICAvKiAgY29weSB0byBjbGlwYm9hcmQgc3R1ZmYgKi8NCiAgICAkKCIuY2xpY2stdG8tY29weSIpLmNsaWNrKGZ1bmN0aW9uIChlKQ0KICAgIHsNCiAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgIGhlbHBfZnVuY3Rpb25zLmRldGVjdERyYWdPckNsaWNrKHRoaXMpOw0KICAgIH0pOw0KICANCiAgICAvKiB0aGUgYWNjb3JkaW9uIHN0dWZmICovDQogICAgX3NldF9pbmNyZW1lbnRhbF9pZHMoJ2FjY29yZGlvbi1saXN0LWl0ZW0nKTsNCiAgICAkKCcuYWNjb3JkaW9uLWxpc3QgPiAuYWNjb3JkaW9uLWxpc3QtaXRlbSA+IC5hY2NvcmRpb24tbGlzdC1pdGVtLWJvZHknKS5oaWRlKCk7DQogICAgJCgnLmFjY29yZGlvbi1saXN0LWl0ZW0nKQ0KICANCiAgICBpZih0eXBlb2YgYWN0aXZlX2FjY29yZGlvbl9pdGVtICE9PSAidW5kZWZpbmVkIikNCiAgICB7DQogICAgICAkKCcjJyArIGFjdGl2ZV9hY2NvcmRpb25faXRlbSkNCiAgICAgICAgLmFkZENsYXNzKCJhY3RpdmUiKQ0KICAgICAgICAuZmluZCgiLmFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSIpDQogICAgICAgIC5zbGlkZURvd24oKTsNCiAgICB9DQogICAgDQogICAgJCgnLmFsJykuY2xpY2soZnVuY3Rpb24oKQ0KICAgIHsNCiAgICAgIHZhciBjdXJyZW50X2l0ZW0gPSAkKHRoaXMpLmNsb3Nlc3QoIi5hY2NvcmRpb24tbGlzdC1pdGVtIik7DQogICAgICANCiAgICAgIGlmKCQodGhpcykuY2xvc2VzdCgiLmFjY29yZGlvbi1saXN0LWl0ZW0iKS5oYXNDbGFzcygiYWN0aXZlIikpDQogICAgICB7DQogICAgICAgICQodGhpcykuY2xvc2VzdCgiLmFjY29yZGlvbi1saXN0LWl0ZW0iKS5yZW1vdmVDbGFzcygiYWN0aXZlIikuZmluZCgiLmFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSIpLnNsaWRlVXAoKTsNCiAgICAgICAgX3NldF9hY3RpdmVfYWNjb3JkaW9uX2l0ZW0oJ3VuZGVmaW5lZCcpOw0KICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgew0KICAgICAgICAkKCIuYWNjb3JkaW9uLWxpc3QgPiAuYWNjb3JkaW9uLWxpc3QtaXRlbS5hY3RpdmUgLmFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSIpLnNsaWRlVXAoKTsNCiAgICAgICAgJCgiLmFjY29yZGlvbi1saXN0ID4gLmFjY29yZGlvbi1saXN0LWl0ZW0uYWN0aXZlIikucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpOw0KICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoIi5hY2NvcmRpb24tbGlzdC1pdGVtIikuYWRkQ2xhc3MoImFjdGl2ZSIpLmZpbmQoIi5hY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiKS5zbGlkZURvd24oKTsNCiAgICAgICAgX3NldF9hY3RpdmVfYWNjb3JkaW9uX2l0ZW0oICQoY3VycmVudF9pdGVtKS5hdHRyKCdpZCcpICk7DQogICAgICB9DQogICAgICByZXR1cm4gZmFsc2U7DQogICAgfSk7DQogICAgDQogICAgDQogIH0pOw0KICANCiAgZnVuY3Rpb24gX3NldF9pbmNyZW1lbnRhbF9pZHMoYV9jbGFzcykNCiAgew0KICAgIHZhciBjb3VudCA9IDE7DQogICAgdmFyIHNlbCA9ICcuJyArIGFfY2xhc3M7DQogICAgJChzZWwpLmVhY2goZnVuY3Rpb24oKQ0KICAgIHsNCiAgICAgICQodGhpcykuYXR0cigiaWQiLCBhX2NsYXNzICsgIi0iICsgY291bnQpOw0KICAgICAgY291bnQrKzsNCiAgICB9KTsNCiAgfQ0KICANCiAgZnVuY3Rpb24gX3NldF9hY3RpdmVfYWNjb3JkaW9uX2l0ZW0oaWQpDQogIHsNCiAgICBDb29raWVzLnNldCgnc21hcnR5X2V4dF9hY2NfYWN0aXZlJywgaWQpOw0KICB9DQogIA0KICBmdW5jdGlvbiBfc2V0X2FjdGl2ZV90YWIodGFiX25hbWUpDQogIHsNCiAgICAkKCcjcGFnZV90YWJzID4gZGl2JykNCiAgICAgIC5lYWNoKGZ1bmN0aW9uKCkNCiAgICAgIHsNCiAgICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7DQogICAgICB9KTsNCiAgICANCiAgICAkKCcjcGFnZV9jb250ZW50ID4gZGl2JykNCiAgICAgIC5lYWNoKGZ1bmN0aW9uKCkNCiAgICAgIHsNCiAgICAgICAgJCh0aGlzKS5oaWRlKCk7DQogICAgICB9KTsNCiAgICANCiAgICAkKCcjJyArIHRhYl9uYW1lKS5hZGRDbGFzcygnYWN0aXZlJyk7DQogICAgJCgnIycgKyB0YWJfbmFtZSArICdfYycpLnNob3coKTsNCiAgICBDb29raWVzLnNldCgnc21hcnR5X2V4dF90YWJfYWN0aXZlJywgdGFiX25hbWUpOw0KICB9DQoNCiAgDQogIFN0cmluZy5wcm90b3R5cGUuZW5kc1dpdGggPSBmdW5jdGlvbiAoc3VmZml4KQ0KICB7DQogICAgcmV0dXJuICh0aGlzLnN1YnN0cih0aGlzLmxlbmd0aCAtIHN1ZmZpeC5sZW5ndGgpID09PSBzdWZmaXgpOw0KICB9DQogIA0KICBTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGggPSBmdW5jdGlvbihwcmVmaXgpDQogIHsNCiAgICByZXR1cm4gKHRoaXMuc3Vic3RyKDAsIHByZWZpeC5sZW5ndGgpID09PSBwcmVmaXgpOw0KICB9DQogIA0KICAvKioNCiAgICogVXNhZ2U6DQogICAqICdBZGRlZCB7MH0gYnkgezF9IHRvIHlvdXIgY29sbGVjdGlvbicuZih0aXRsZSwgYXJ0aXN0KQ0KICAgKiAnWW91ciBiYWxhbmNlIGlzIHswfSBVU0QnLmYoNzcuNykNCiAgICogQHR5cGUge2Z1bmN0aW9uKCk6IFN0cmluZ30NCiAgICovDQogIFN0cmluZy5wcm90b3R5cGUuZm9ybWF0ID0gU3RyaW5nLnByb3RvdHlwZS5mb3JtYXQgPSBmdW5jdGlvbigpIHsNCiAgICB2YXIgcyA9IHRoaXMsDQogICAgICAgIGkgPSBhcmd1bWVudHMubGVuZ3RoOw0KICAgIA0KICAgIHdoaWxlIChpLS0pIHsNCiAgICAgIHMgPSBzLnJlcGxhY2UobmV3IFJlZ0V4cCgnXFx7JyArIGkgKyAnXFx9JywgJ2dtJyksIGFyZ3VtZW50c1tpXSk7DQogICAgfQ0KICAgIHJldHVybiBzOw0KICB9Ow0KICANCiAgLyoqDQogICAqIHRhcHMgaW50byB0aGUgY29yZSBmdW5jdGlvbiB0byBzaG93IGFuIGVycm9yIHdoZW4gbmVlZGVkDQogICAqDQogICAqIEBwYXJhbSBtZXNzYWdlX3RleHQNCiAgICovDQogIGhlbHBfZnVuY3Rpb25zLmhlbHBfZXJyb3JfbWVzc2FnZSA9ICBmdW5jdGlvbiAobWVzc2FnZV90ZXh0KQ0KICB7DQogICAgbGV0IG91dHB1dCA9IGVycm9yc190ZW1wbGF0ZS5mb3JtYXQobWVzc2FnZV90ZXh0KTsNCiAgICAkKCcjaGVscGVyX2Vycm9yJykuZGV0YWNoKCk7DQogICAgJCgnI29lX21haW5hcmVhJykucHJlcGVuZChvdXRwdXQpOw0KICAgICQoJyNoZWxwZXJfZXJyb3InKS5oaWRlKCk7DQogICAgT0Uudmlldy5zaG93Tm90aWZpY2F0aW9ucygpOw0KICB9DQogIA0KICAvKioNCiAgICogdGFwcyBpbnRvIHRoZSBjb3JlIGZ1bmN0aW9uIHRvIHNob3cgYSBtZXNzYWdlIHdoZW4gbmVlZGVkDQogICAqDQogICAqIEBwYXJhbSBtZXNzYWdlX3RleHQNCiAgICovDQogIGhlbHBfZnVuY3Rpb25zLmhlbHBfbWVzc2FnZSA9ICBmdW5jdGlvbiAobWVzc2FnZV90ZXh0KQ0KICB7DQogICAgbGV0IG91dHB1dCA9IG1lc3NhZ2VzX3RlbXBsYXRlLmZvcm1hdChtZXNzYWdlX3RleHQpOw0KICAgICQoJyNoZWxwZXJfbWVzc2FnZScpLmRldGFjaCgpOw0KICAgICQoJyNvZV9tYWluYXJlYScpLnByZXBlbmQob3V0cHV0KTsNCiAgICAkKCcjaGVscGVyX21lc3NhZ2UnKS5oaWRlKCk7DQogICAgT0Uudmlldy5zaG93Tm90aWZpY2F0aW9ucygpOw0KICB9DQogIA0KICANCiAgaGVscF9mdW5jdGlvbnMuR2V0U2VsZWN0ZWRUZXh0ID0gZnVuY3Rpb24oKQ0KICB7DQogICAgaWYod2luZG93LmdldFNlbGVjdGlvbikNCiAgICB7DQogICAgICAvLyBhbGwgYnJvd3NlcnMsIGV4Y2VwdCBJRSBiZWZvcmUgdmVyc2lvbiA5DQogICAgICB2YXIgcmFuZ2UgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7DQogICAgICByZXR1cm4gcmFuZ2UudG9TdHJpbmcoKTsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgIGlmKGRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSkNCiAgICAgIHsNCiAgICAgICAgLy8gSW50ZXJuZXQgRXhwbG9yZXINCiAgICAgICAgdmFyIHJhbmdlID0gZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7DQogICAgICAgIHJldHVybiByYW5nZS50ZXh0Ow0KICAgICAgfQ0KICAgIH0NCiAgfQ0KICAvKioNCiAgICogd2hhdCBpcyBjb3BpZWQgZGVwZW5kcyBvbiAgd2hldGhlcg0KICAgKiB3ZSBjbGlja2VkIGFuZCBkcmFnZ2VkLCBvciBqdXN0IGNsaWNrZWQ6DQogICAqIGRyYWdnZWQ6IGNvcHkgdGhlIHNlbGVjdGVkIHRleHQgb24gbW91c2UgdXANCiAgICogY2xpY2tlZDogc2VsZWN0IGFsbCBhbmQgY29weSBvbiBtb3VzZSB1cA0KICAgKiBAcGFyYW0gZWxlbWVudA0KICAgKi8NCiAgaGVscF9mdW5jdGlvbnMuZGV0ZWN0RHJhZ09yQ2xpY2sgPSBmdW5jdGlvbihlbGVtZW50KQ0KICB7DQogICAgdmFyIGlzRHJhZ2dpbmcgPSBmYWxzZTsNCiAgICB2YXIgc3RhcnRpbmdQb3MgPSBbXTsNCg0KICAgICQoZWxlbWVudCkNCiAgICAgIC5tb3VzZWRvd24oZnVuY3Rpb24oZXZ0KQ0KICAgICAgew0KICAgICAgICBpc0RyYWdnaW5nICA9IGZhbHNlOw0KICAgICAgICBzdGFydGluZ1BvcyA9IFtldnQucGFnZVgsIGV2dC5wYWdlWV07DQogICAgICB9KQ0KICAgICAgLm1vdXNlbW92ZShmdW5jdGlvbihldnQpDQogICAgICB7DQogICAgICAgIGlmKCAhKCAgZXZ0LnBhZ2VYID09PSBzdGFydGluZ1Bvc1swXSAmJiBldnQucGFnZVkgPT09IHN0YXJ0aW5nUG9zWzFdICkgKQ0KICAgICAgICB7DQogICAgICAgICAgaXNEcmFnZ2luZyA9IHRydWU7DQogICAgICAgIH0NCiAgICAgIH0pDQogICAgICAubW91c2V1cChmdW5jdGlvbigpDQogICAgICB7DQogICAgICAgIGhlbHBfZnVuY3Rpb25zLmNvcHlUb0NsaXBib2FyZChlbGVtZW50LCBpc0RyYWdnaW5nKTsNCiAgICAgICAgaXNEcmFnZ2luZyAgPSBmYWxzZTsNCiAgICAgICAgc3RhcnRpbmdQb3MgPSBbXTsNCiAgICAgIH0pOw0KICB9DQogIA0KICANCiAgaGVscF9mdW5jdGlvbnMuY29weVRvQ2xpcGJvYXJkID0gZnVuY3Rpb24oZWxlbWVudCwgZHJhZ2dpbmcpDQogew0KICAgdmFyICR0ZW1wID0gJCgiPGlucHV0PiIpOw0KICAgJCgiYm9keSIpLmFwcGVuZCgkdGVtcCk7DQogICANCiAgIGlmKCFkcmFnZ2luZykNCiAgIHsNCiAgICAgLy9oZWxwX2Z1bmN0aW9ucy5HZXRTZWxlY3RlZFRleHQoKTsNCiAgICAgJHRlbXAudmFsKCQoZWxlbWVudCkudGV4dCgpKS5zZWxlY3QoKTsNCiAgIH0NCiAgIA0KICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoImNvcHkiKTsNCiAgICR0ZW1wLnJlbW92ZSgpOw0KICAgaGVscF9mdW5jdGlvbnMuaGVscF9tZXNzYWdlKCdDb3BpZWQgdG8gQ2xpcGJvYXJkIScpOw0KIH0NCn0odGhpcywgJCwgalF1ZXJ5LCBDb29raWVzLCBoZWxwX2Z1bmN0aW9ucyA9IHdpbmRvdy5oZWxwX2Z1bmN0aW9ucyB8fCB7fSkpOw==]]></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+cmVnaXN0ZXJfZnVuY3Rpb24oJ2NvbnRlbnRfZmV0Y2gnLCBbJHRoaXMsICdzbWFydHlfZnVuY3Rpb25fY29udGVudF9mZXRjaCddKTsNCiAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbignZmlsZXNfbGlzdCcsIFskdGhpcywgJ3NtYXJ0eV9mdW5jdGlvbl9maWxlc19saXN0J10pOw0KICAgICRzbWFydHktPnJlZ2lzdGVyX2Z1bmN0aW9uKCd0cmlnZ2VyXzQwNCcsIFskdGhpcywgJ3RyaWdnZXJfNDA0J10pOw0KICAgICRzbWFydHktPnJlZ2lzdGVyX2Z1bmN0aW9uKCd0cmlnZ2VyXzQwMycsIFskdGhpcywgJ3RyaWdnZXJfNDAzJ10pOw0KICB9DQogIA0KICAvKioNCiAgICogQ3JlYXRlIGEgbGluayB0byBhbiBhbmNob3IgZnVydGhlciBkb3duIHRoZSBwYWdlLg0KICAgKg0KICAgKiBAcGFyYW0gJHBhcmFtcw0KICAgKiBAcGFyYW0gJHNtYXJ0eQ0KICAgKg0KICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsDQogICAqLw0KICBmdW5jdGlvbiBwbHVnaW5fYW5jaG9ybGluaygkcGFyYW1zLCAmJHNtYXJ0eSkNCiAgew0KICAgICRuYW1lICAgID0gXGdldF9wYXJhbWV0ZXJfdmFsdWUoJHBhcmFtcywgJ24nKTsNCiAgICAkbmFtZSAgICA9IFxnZXRfcGFyYW1ldGVyX3ZhbHVlKCRwYXJhbXMsICduYW1lJywgJG5hbWUpOw0KICAgICRhc3NpZ24gID0gXHRyaW0oXGdldF9wYXJhbWV0ZXJfdmFsdWUoJHBhcmFtcywgJ2Fzc2lnbicpKTsNCiAgICAkdXJsb25seSA9IFxnZXRfcGFyYW1ldGVyX3ZhbHVlKCRwYXJhbXMsICd1Jyk7DQogICAgJHVybG9ubHkgPSBcY21zX3RvX2Jvb2woXGdldF9wYXJhbWV0ZXJfdmFsdWUoJHBhcmFtcywgJ3VybG9ubHknLCAkdXJsb25seSkpOw0KICAgICR0ZXh0ICAgID0gXGdldF9wYXJhbWV0ZXJfdmFsdWUoJHBhcmFtcywgJ3RleHQnLCAkbmFtZSk7DQogICAgDQogICAgdW5zZXQoJHBhcmFtc1snbmFtZSddLCAkcGFyYW1zWyduJ10sICRwYXJhbXNbJ2Fzc2lnbiddLCAkcGFyYW1zWyd1J10sICRwYXJhbXNbJ3VybG9ubHknXSwgJHBhcmFtc1sndGV4dCddKTsNCiAgICANCiAgICAvLyBzdGFydCB0aGUgd29yaw0KICAgICR1cmwgPSBOVUxMOw0KICAgICRvdXQgPSBOVUxMOw0KICAgIA0KICAgIGlmKCRuYW1lKQ0KICAgIHsNCiAgICAgICR1cmwgPSBcc214OjphbmNob3JfdXJsKCRuYW1lKTsNCiAgICB9DQogICAgDQogICAgaWYoJHVybG9ubHkpDQogICAgew0KICAgICAgJG91dCA9ICR1cmw7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAvLyBidWlsZCBhIGxpbmsgd2l0aCBhbGwgdGhlIGxlZnRvdmVyIHBhcmFtcyAoZG9uJ3QgZmlsdGVyIHRoZW0sIHRoZXJlIGFyZSBsb3RzIG9mIHZhbGlkIHBhcmFtcyBmb3IgYSBsaW5rKS4NCiAgICAgICR0cGwgPSAnICVzPSIlcyInOw0KICAgICAgJG91dCA9ICc8YSc7DQogICAgICAkb3V0IC49IFxzcHJpbnRmKCR0cGwsICdocmVmJywgJHVybCk7DQogICAgICANCiAgICAgIGZvcmVhY2goJHBhcmFtcyBhcyAka2V5ID0+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+YXNzaWduKCdwYWdlcl9pbmZvJywgJHBhZ2VyX2luZm8pOw0KICAgIH0NCiAgICANCiAgICBcc2V0bG9jYWxlKFxMQ19USU1FLCAnJyk7DQogICAgDQogICAgcmV0dXJuICcnOw0KICB9DQogIA0KICAvKioNCiAgICogQHBhcmFtICRwYXJhbXMNCiAgICogQHBhcmFtICR0ZW1wbGF0ZQ0KICAgKg0KICAgKiBAcmV0dXJuIHZvaWQNCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBzbWFydHlfZnVuY3Rpb25fZmlsZXNfbGlzdCgkcGFyYW1zLCAkdGVtcGxhdGUpDQogIHsNCiAgICAjIGluaXRpYWxpemF0aW9uICBhbmQgZGVmYXVsdHMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgJGZpbGVfZXh0ICAgICAgICAgICA9ICcnOw0KICAgICRkb3dubG9hZCAgICAgICAgICAgPSBGQUxTRTsNCiAgICAkcV92YXIgICAgICAgICAgICAgID0gJHBhcmFtc1sncXVlcnlfdmFyJ10gPz8gJ2ZsJzsgIyBzZXRzIHRoZSBxdWVyeSB2YXJpYWJsZQ0KICAgICRmb2xkZXIgICAgICAgICAgICAgPSBpc3NldCgkcGFyYW1zWydmb2xkZXInXSkgPyBccnRyaW0oJHBhcmFtc1snZm9sZGVyJ10sICcvJykgOiAndXBsb2Fkcyc7ICAjIGZvbGRlciB0byByZWFkIGZyb20NCiAgICAkZGVsaW1pdGVyICAgICAgICAgID0gJHBhcmFtc1snZGVsaW1pdGVyJ10gPz8gJ18nOw0KICAgICRkYXRlICAgICAgICAgICAgICAgPSAhaXNzZXQoJHBhcmFtc1snZGF0ZSddKSB8fCAoYm9vbCkkcGFyYW1zWydkYXRlJ107DQogICAgJHNob3dfaGlkZGVuICAgICAgICA9IGlzc2V0KCRwYXJhbXNbJ3Nob3dfaGlkZGVuJ10pIHx8IChib29sKSRwYXJhbXNbJ3Nob3dfaGlkZGVuJ107DQogICAgJGNvdW50X2Rvd25sb2FkcyAgICA9IGlzc2V0KCRwYXJhbXNbJ2NvdW50X2Rvd25sb2FkcyddKSB8fCAoYm9vbCkkcGFyYW1zWydjb3VudF9kb3dubG9hZHMnXTsNCiAgICAkc2hvd19zaXplICAgICAgICAgID0gIWlzc2V0KCRwYXJhbXNbJ3Nob3dfc2l6ZSddKSB8fCAoYm9vbCkkcGFyYW1zWydzaG93X3NpemUnXTsNCiAgICAkc3RyaXBfZXh0ZW5zaW9uICAgID0gaXNzZXQoJHBhcmFtc1snc3RyaXBfZXh0ZW5zaW9uJ10pICYmIChib29sKSRwYXJhbXNbJ3N0cmlwX2V4dGVuc2lvbiddOw0KICAgICRkbF9jb3VudGVyX2RiX2RpciAgPSAkcGFyYW1zWydjb3VudGVyX2RiX2RpciddID8/ICcnOw0KICAgICRkbF9jb3VudGVyX2RiX2ZuICAgPSAkcGFyYW1zWydkbF9jb3VudGVyX2RiX2ZuJ10gPz8gJy5jb3VudGVyX2RiJzsNCiAgICAkZmlsZV9leHRlbnNpb24gICAgID0gJHBhcmFtc1snZmlsZV9leHRlbnNpb24nXSA/PyAnJzsNCiAgICAvLyRzaXplICAgICAgICAgICAgICAgPSAkcGFyYW1zWydzaXplJ10gPz8gJ1NpemUnOw0KICAgICRkYXRlZm9ybWF0ICAgICAgICAgPSAkcGFyYW1zWydkYXRlZm9ybWF0J10gPz8gJ1ktbS1kIEg6aTpzJzsNCiAgICAkYnJvd3NlX3N1Yl9kaXJzICAgID0gIWlzc2V0KCRwYXJhbXNbJ2Jyb3dzZV9zdWJfZGlycyddKSB8fCAoYm9vbCkkcGFyYW1zWydicm93c2Vfc3ViX2RpcnMnXTsNCiAgICAkbWF4X2VudHJpZXMgICAgICAgID0gaXNzZXQoJHBhcmFtc1snbWF4X2VudHJpZXMnXSkgPyAoaW50KSRwYXJhbXNbJ21heF9lbnRyaWVzJ10gOiAwOyAjIDAgPSBhbGwNCiAgICAkbWF4X2VudHJpZXMgICAgICAgID0gJ2FsbCcgPT09ICRtYXhfZW50cmllcyA/IDAgOiAoaW50KSRwYXJhbXNbJ21heF9lbnRyaWVzJ107ICMgMCA9IGFsbA0KICAgICR0aHVtYnNfZm9sZGVyICAgICAgPSAkcGFyYW1zWyd0aHVtYnNfZm9sZGVyJ10gPz8gJ3RodW1icyc7DQogICAgJG9iZnVzY2F0ZV9kb3dubG9hZCA9ICFpc3NldCgkcGFyYW1zWydvYmZ1c2NhdGVfZG93bmxvYWQnXSkgfHwgKGJvb2wpJHBhcmFtc1snb2JmdXNjYXRlX2Rvd25sb2FkJ107ICMgZGVmYXVsdCA9IHRydWUNCiAgICAkc2VjdXJpdHlfdG9rZW4gICAgID0gIWlzc2V0KCRwYXJhbXNbJ3NlY3VyaXR5X3Rva2VuJ10pIHx8DQogICAgICAgICAgICAgICAgICAgICAgICAgIChib29sKSRwYXJhbXNbJ3NlY3VyaXR5X3Rva2VuJ107ICMgcmVxdWlyZSBhIHNlY3VyaXR5IHRva2VuIGRlZmF1bHQgPSB0cnVlDQogICAgJHNlY3VyaXR5X3Rva2VuX3F2ICA9ICRwYXJhbXNbJ3NlY3VyaXR5X3Rva2VuX3F2J10gPz8gJ19zdCc7DQogICAgJHJvb3QgICAgICAgICAgICAgICA9IGlzc2V0KCRwYXJhbXNbJ3Jvb3QnXSkgJiYgKGJvb2wpJHBhcmFtc1sncm9vdCddOw0KICAgICRzb3J0ICAgICAgICAgICAgICAgPSAkcGFyYW1zWydzb3J0J10gPz8gJyc7ICMgQ2hlY2sgaWYgdXNlciBoYXMgc3BlY2lmaWVkIHNvcnQgb3JkZXINCiAgICAkcmVjdXJzaXZlICAgICAgICAgID0gaXNzZXQoJHBhcmFtc1sncmVjdXJzaXZlJ10pICYmIChib29sKSRwYXJhbXNbJ3JlY3Vyc2l2ZSddOw0KICAgIA0KICAgICRzZXJ2ZV9mbiAgICAgICAgICAgPSAnJzsNCiAgICAkdG9rZW4gICAgICAgICAgICAgID0gJyc7DQogICAgJGZpbGVzX2RiICAgICAgICAgICA9IFtdOw0KICAgIA0KICAgICMgcm9vdCBwYXJhbSB0cnVlIG1ha2VzIG9iZnVzY2F0ZSB0cnVlDQogICAgJG9iZnVzY2F0ZV9kb3dubG9hZCA9ICRvYmZ1c2NhdGVfZG93bmxvYWQgfHwgJHJvb3Q7DQogICAgDQogICAgJGdldF9wYXJhbXMgPSAkX0dFVCA/PyBbXTsNCiAgICANCiAgICBpZigkc2VjdXJpdHlfdG9rZW4gJiYgJG9iZnVzY2F0ZV9kb3dubG9hZCkNCiAgICB7DQogICAgICANCiAgICAgICMgZG8gd2UgaGF2ZSBhIHNlc3Npb24gdG9rZW4/IHVzZSBpdCwgb3RoZXJ3aXNlIGNyZWF0ZSBvbmUgYnV0IGRpc2FsbG93IGRvd25sb2FkaW5nIG9uIHRoaXMgcGFzc2FnZQ0KICAgICAgaWYoICFpc3NldCgkX1NFU1NJT05bJ3V0aWxzOjpzdCddKSApDQogICAgICB7DQogICAgICAgICRzdCAgICAgICAgICAgICAgICAgICAgPSBcYmluMmhleChcb3BlbnNzbF9yYW5kb21fcHNldWRvX2J5dGVzKDE2KSk7DQogICAgICAgICRfU0VTU0lPTlsndXRpbHM6OnN0J10gPSAkc3Q7DQogICAgICB9DQogICAgICBlbHNlDQogICAgICB7DQogICAgICAgICRzdCAgICAgICA9ICRfU0VTU0lPTlsndXRpbHM6OnN0J107DQogICAgICAgICRkb3dubG9hZCA9IChpc3NldCgkZ2V0X3BhcmFtc1skc2VjdXJpdHlfdG9rZW5fcXZdKSAmJiAkc3QgPT09ICRnZXRfcGFyYW1zWyRzZWN1cml0eV90b2tlbl9xdl0pOw0KICAgICAgICAkdG9rZW4gICAgPSAkZG93bmxvYWQgPyAkZ2V0X3BhcmFtc1skc2VjdXJpdHlfdG9rZW5fcXZdIDogJHN0Ow0KICAgICAgfQ0KICAgIH0NCiAgDQogICAgIyBzZXQgc29tZSBwYXJhbWV0ZXJzIG5lZWRlZCBmb3IgdGhlIGNvdW50ZXINCiAgICAkcHJtcyA9IFsNCiAgICAgICdjb3VudF9kb3dubG9hZHMnICAgPT4gJGNvdW50X2Rvd25sb2FkcywNCiAgICAgICdkbF9jb3VudGVyX2RiX2RpcicgPT4gJGRsX2NvdW50ZXJfZGJfZGlyLA0KICAgICAgJ2RsX2NvdW50ZXJfZGJfZm4nICA9PiAkZGxfY291bnRlcl9kYl9mbiwNCiAgICAgICdmb2xkZXInICAgICAgICAgICAgPT4gJGZvbGRlcg0KICAgIF07DQogICAgDQogICAgDQogICAgaWYoIWVtcHR5KCRnZXRfcGFyYW1zWyRxX3Zhcl0pKQ0KICAgIHsNCiAgICAgIGlmKCRkb3dubG9hZCkNCiAgICAgIHsNCiAgICAgICAgJHNlcnZlX2ZuID0gXHVybGRlY29kZSgkZ2V0X3BhcmFtc1skcV92YXJdKTsNCiAgICAgICAgJHQgICAgICAgID0gXGV4cGxvZGUoJy8nLCAkc2VydmVfZm4pOw0KICAgICAgICAkc2VydmVfZm4gPSBcYXJyYXlfcG9wKCR0KTsNCiAgICAgICAgJHN1Yl9kaXIgID0gXGltcGxvZGUoJy8nLCAkdCk7DQogICAgICB9DQogICAgICBlbHNlDQogICAgICB7DQogICAgICAgICRzdWJfZGlyXzEgPSBcdXJsZGVjb2RlKCRnZXRfcGFyYW1zWyRxX3Zhcl0pOw0KICAgICAgICAkc3ViX2RpciAgPSBcc3RyX3JlcGxhY2UoJy4uJywgJycsICRzdWJfZGlyXzEpOw0KICAgICAgfQ0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgJHN1Yl9kaXIgPSAnJzsNCiAgICB9DQogICAgDQogICAgJGNvbmZpZyAgICA9IGNtc21zKCktPkdldENvbmZpZygpOw0KICAgICRyb290X3BhdGggPSAkcm9vdCA/ICcnIDogJGNvbmZpZ1sncm9vdF9wYXRoJ107DQogICAgDQovLyAgICAkZmlsZV9uYW1lcyA9IFtdOw0KLy8gICAgJGZpbGVfdHlwZXMgPSBbXTsNCi8vICAgICRmaWxlX2RhdGVzID0gW107DQovLyAgICAkZmlsZV9zaXplcyA9IFtdOw0KICANCiAgICAkZmlsZXNfaW5mbyA9IFsNCiAgICAgICdmaWxlX25hbWVzJyA9PiAnJywNCiAgICAgICdmaWxlX3R5cGVzJyA9PiAnJywNCiAgICAgICdmaWxlX2RhdGVzJyA9PiAnJywNCiAgICAgICdmaWxlX3NpemVzJyA9PiAnJywNCiAgICAgICdmX2NvdW50JyA9PiAwDQogICAgXTsNCiAgICANCiAgICAjIGRvbmUgaW5pdGlhbGl6YXRpb24gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgIA0KICAgICRkaXIgPSBjbXNfam9pbl9wYXRoKCRyb290X3BhdGgsIHV0aWxzOjp1cmlfMl9wYXRoKHV0aWxzOjpqb2luX3VyaSgkZm9sZGVyLCAkc3ViX2RpcikpKTsNCiAgICANCi8vICAgIGlmKCAhJGhhbmRsZSA9IFxvcGVuZGlyKCRkaXIpICkNCi8vICAgIHsNCi8vICAgICAgJG1lc3NhZ2VzWydlcnJvciddW10gPSAnY291bGQgbm90IHJlYWQgJyAuICRnZXRfcGFyYW1zWyRxX3Zhcl0gLiAnISc7DQovLyAgICAgICRoYW5kbGUgICAgICAgICAgICAgPSBcb3BlbmRpcigkZm9sZGVyKTsNCi8vICAgICAgJGdldF9wYXJhbXNbJHFfdmFyXSA9ICcnOw0KLy8gICAgICAkc3ViX2RpciAgICAgICAgICAgICA9ICcnOw0KLy8gICAgfQ0KICAgIA0KLy8gICAgJGZfY291bnQgICA9IDA7DQovLyAgICAkbWF4X2NvdW50ID0gMTsNCi8vDQovLyAgICB3aGlsZSggJGhhbmRsZSAmJiAoIEZBTFNFICE9PSAoJGVudHJ5ID0gXHJlYWRkaXIoJGhhbmRsZSkgKSApICkNCi8vICAgIHsNCi8vICAgICAgaWYoJy4nICE9PSAkZW50cnkgJiYgJy4uJyAhPT0gJGVudHJ5KQ0KLy8gICAgICB7DQovLyAgICAgICAgIyBwcmV2ZW50IHNob3dpbmcgaGlkZGVuIGZpbGVzIHVubGVzcyB3ZSB3YW50IHRvDQovLyAgICAgICAgaWYoICEkc2hvd19oaWRkZW4gJiYgXHN0YXJ0c3dpdGgoJGVudHJ5LCAnLicpICkgeyBjb250aW51ZTsgfQ0KLy8NCi8vICAgICAgICAkZl9jb3VudCsrOw0KLy8gICAgICAgICRmdWxsX25hbWUgPSBjbXNfam9pbl9wYXRoKCRyb290X3BhdGgsIHV0aWxzOjp1cmlfMl9wYXRoKHV0aWxzOjpqb2luX3VyaSgkZm9sZGVyLCAkc3ViX2RpciwgJGVudHJ5KSkpOw0KLy8NCi8vICAgICAgICBpZigkZG93bmxvYWQgJiYgJHNlcnZlX2ZuID09PSAkZW50cnkpDQovLyAgICAgICAgew0KLy8gICAgICAgICAgdXRpbHM6OmRvX2Rvd25sb2FkKCRmdWxsX25hbWUsIFx1cmxlbmNvZGUoJGVudHJ5KSwgJHBybXMpOw0KLy8gICAgICAgIH0NCi8vDQovLyAgICAgICAgI0luc2VydCBmaWxlbmFtZSwgZmlsZXR5cGUsIGZpbGV0aW1lIGFuZCBmaWxlc2l6ZSBpbnRvIGFycmF5cw0KLy8gICAgICAgICRmaWxlX25hbWVzW10gPSAkZW50cnk7DQovLyAgICAgICAgJGZpbGVfdHlwZXNbXSA9IFxmaWxldHlwZSgkZnVsbF9uYW1lKTsNCi8vICAgICAgICAkZmlsZV9kYXRlc1tdID0gXGZpbGVtdGltZSgkZnVsbF9uYW1lKTsNCi8vICAgICAgICAkZmlsZV9zaXplc1tdID0gXHNwcmludGYoICcldScsIFxmaWxlc2l6ZSgkZnVsbF9uYW1lKSApOw0KLy8gICAgICB9DQovLyAgICB9DQovLw0KLy8gICAgXGNsb3NlZGlyKCRoYW5kbGUpOw0KLy8gICAgJGZfY291bnQtLTsNCiAgDQogICAgLy8gR2V0IHRoZSBmaWxlcyBpbmZvcm1hdGlvbg0KICAgIHRyeQ0KICAgIHsNCiAgICAgICRmaWxlc19pbmZvID0gdXRpbHM6OmdldERpcmVjdG9yeUZpbGVzSW5mbygkZGlyLCAkcm9vdF9wYXRoLCAkZm9sZGVyLCAkc3ViX2RpciwgJHNob3dfaGlkZGVuLCAkZG93bmxvYWQsICRzZXJ2ZV9mbiwgJHBybXMsICRyZWN1cnNpdmUpOw0KICAgIH0NCiAgICBjYXRjaChcRXhjZXB0aW9uICRlKQ0KICAgIHsNCiAgICAgICRtZXNzYWdlc1snZXJyb3InXVtdID0gJGUtPmdldE1lc3NhZ2UoKTsNCiAgICAgICRnZXRfcGFyYW1zWyRxX3Zhcl0gPSAnJzsNCiAgICAgICRzdWJfZGlyICAgICAgICAgICAgID0gJyc7DQogICAgICANCiAgICAgIHRyeQ0KICAgICAgew0KICAgICAgICAkZmlsZXNfaW5mbyA9IHV0aWxzOjpnZXREaXJlY3RvcnlGaWxlc0luZm8oJGZvbGRlciwgJHJvb3RfcGF0aCwgJGZvbGRlciwgJHN1Yl9kaXIsICRzaG93X2hpZGRlbiwgJGRvd25sb2FkLCAkc2VydmVfZm4sICRwcm1zLCAkcmVjdXJzaXZlKTsNCiAgICAgIH0NCiAgICAgIGNhdGNoKFxFeGNlcHRpb24gJGUpDQogICAgICB7DQogICAgICAgICRtZXNzYWdlc1snZXJyb3InXVtdID0gJGUtPmdldE1lc3NhZ2UoKTsNCiAgICAgIH0NCg0KICAgIH0NCiAgICANCi8vICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLy8gICAgJGFiYzEyMzQ1NiA9IFxjb21wYWN0KCdmaWxlc19pbmZvJyk7DQovLyAgICBlY2hvKCc8YnIvPjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojxici8+Jyk7DQovLyAgICBkZWJ1Z19kaXNwbGF5KCRhYmMxMjM0NTYpOw0KLy8gICAgZWNobygnPGJyLz4nIC4gX19GSUxFX18gLiAnIDogKCcgLiBfX0NMQVNTX18gLiAnIDo6ICcgLiBfX0ZVTkNUSU9OX18gLiAnKSA6ICcgLiBfX0xJTkVfXyAuICc8YnIvPicpOw0KLy8gICAgZGllKCc8YnIvPlJJUCE8YnIvPicpOw0KLy8gICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogIA0KICAgIC8vIEFjY2VzcyB0aGUgZmlsZSBpbmZvcm1hdGlvbg0KICAgICRmaWxlX25hbWVzID0gJGZpbGVzX2luZm9bJ2ZpbGVfbmFtZXMnXTsNCiAgICAkZmlsZV90eXBlcyA9ICRmaWxlc19pbmZvWydmaWxlX3R5cGVzJ107DQogICAgJGZpbGVfZGF0ZXMgPSAkZmlsZXNfaW5mb1snZmlsZV9kYXRlcyddOw0KICAgICRmaWxlX3NpemVzID0gJGZpbGVzX2luZm9bJ2ZpbGVfc2l6ZXMnXTsNCiAgICAkZl9jb3VudCA9ICRmaWxlc19pbmZvWydmX2NvdW50J107DQogICAgDQogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgJGFiYzEyMzQ1NiA9IFxjb21wYWN0KCdmaWxlX25hbWVzJywgJ2ZpbGVzX2luZm8nKTsNCiAgICBlY2hvKCc8YnIvPjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojxici8+Jyk7DQogICAgZGVidWdfZGlzcGxheSgkYWJjMTIzNDU2KTsNCiAgICBlY2hvKCc8YnIvPicgLiBfX0ZJTEVfXyAuICcgOiAoJyAuIF9fQ0xBU1NfXyAuICcgOjogJyAuIF9fRlVOQ1RJT05fXyAuICcpIDogJyAuIF9fTElORV9fIC4gJzxici8+Jyk7DQogICAgZGllKCc8YnIvPlJJUCE8YnIvPicpOw0KICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgIA0KICAgICRmaWxlX3Nob3J0bmFtZXMgPSBcYXJyYXlfbWFwKCdcc3RydG9sb3dlcicsICRmaWxlX25hbWVzKTsNCiAgICANCiAgICAjIENoYW5nZSBmaWxlIHNvcnQgb3JkZXIgaWYgbmVlZGVkDQogICAgJHNvcnQgLj0gJyAgJzsNCiAgICANCiAgICBpZiggMCA9PT0gXHN0cmlwb3MoJHNvcnQsICdkJykgKQ0KICAgIHsNCiAgICAgIGlmKCAwID09PSBcc3RyaXBvcygkc29ydCwgJ2RkJykgKQ0KICAgICAgew0KICAgICAgICBcYXJyYXlfbXVsdGlzb3J0KCRmaWxlX2RhdGVzLCBcU09SVF9ERVNDLCAkZmlsZV90eXBlcywgJGZpbGVfc2hvcnRuYW1lcywgJGZpbGVfbmFtZXMpOw0KICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgew0KICAgICAgICBcYXJyYXlfbXVsdGlzb3J0KCRmaWxlX2RhdGVzLCBcU09SVF9BU0MsICRmaWxlX3R5cGVzLCAkZmlsZV9zaG9ydG5hbWVzLCAkZmlsZV9uYW1lcyk7DQogICAgICB9DQogICAgfQ0KICAgIGVsc2UgaWYoICdzJyA9PT0gXHN0cnRvbG93ZXIoJHNvcnRbMF0pICkNCiAgICB7DQogICAgICBpZiggMCA9PT0gXHN0cmlwb3MoJHNvcnQsICdzZCcpICkNCiAgICAgIHsNCiAgICAgICAgXGFycmF5X211bHRpc29ydCgkZmlsZV9zaXplcywgXFNPUlRfREVTQywgJGZpbGVfdHlwZXMsICRmaWxlX3Nob3J0bmFtZXMsICRmaWxlX25hbWVzKTsNCiAgICAgIH0NCiAgICAgIGVsc2UNCiAgICAgIHsNCiAgICAgICAgXGFycmF5X211bHRpc29ydCgkZmlsZV9zaXplcywgXFNPUlRfQVNDLCAkZmlsZV90eXBlcywgJGZpbGVfc2hvcnRuYW1lcywgJGZpbGVfbmFtZXMpOw0KICAgICAgfQ0KICAgIH0NCiAgICBlbHNlIGlmKDAgPT09IFxzdHJpcG9zKCRzb3J0LCAnbicpKQ0KICAgIHsNCiAgICAgIGlmKDAgPT09IFxzdHJpcG9zKCRzb3J0LCAnbmQnKSkNCiAgICAgIHsNCiAgICAgICAgXGFycmF5X211bHRpc29ydCgkZmlsZV9zaG9ydG5hbWVzLCBcU09SVF9ERVNDLCAkZmlsZV9uYW1lcywgJGZpbGVfdHlwZXMpOw0KICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgew0KICAgICAgICBcYXJyYXlfbXVsdGlzb3J0KCRmaWxlX3Nob3J0bmFtZXMsIFxTT1JUX0FTQywgJGZpbGVfbmFtZXMsICRmaWxlX3R5cGVzKTsNCiAgICAgIH0NCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgIFxhcnJheV9tdWx0aXNvcnQoJGZpbGVfdHlwZXMsICRmaWxlX3Nob3J0bmFtZXMsICRmaWxlX25hbWVzKTsNCiAgICB9DQogICAgDQogICAgIyBtZXNzYWdlcyB0byBkaXNwbGF5IG9uIHRoZSBmcm9udGVuZA0KICAgICRtZXNzYWdlcyAgID0gW107DQogICAgJGZpbGVzX2xpc3QgPSBbXTsNCiAgICANCiAgICBpZighJG1heF9lbnRyaWVzKQ0KICAgIHsNCiAgICAgICRtYXhfZW50cmllcyA9ICRmX2NvdW50ICsgMTsNCiAgICB9ICMgMCA9PSBhbGwNCiAgICANCiAgICBpZighZW1wdHkoJGdldF9wYXJhbXNbJHFfdmFyXSkgJiYgKCRtYXhfY291bnQgPD0gJG1heF9lbnRyaWVzKSkNCiAgICB7DQogICAgICAkZW50cnlbJ25hbWUnXSAgICAgPSAnLi4nOw0KICAgICAgJGVudHJ5Wyd0eXBlJ10gICAgID0gJ3BhcmVudF9kaXInOw0KICAgICAgJGVudHJ5Wyd1cmwnXSAgICAgID0gdXRpbHM6OnJlY3JlYXRlX1VybCggdXRpbHM6OmpvaW5fdXJpKCRzdWJfZGlyLCAnLi4nKSApOw0KICAgICAgJGVudHJ5WydmaWxlX2V4dCddID0gJGZpbGVfZXh0Ow0KICAgICAgJGZpbGVzX2xpc3RbXSAgICAgID0gJGVudHJ5Ow0KICAgIH0NCiAgICANCiAgICAkZGVmYXVsdGV4dGVuc2lvbiA9IFsNCiAgICAgICcucGRmJywNCiAgICAgICcuZG9jJywNCiAgICAgICcuZG9jeCcsDQogICAgICAnLnR4dCcsDQogICAgICAnLnJ0ZicsDQogICAgICAnLnhscycsDQogICAgICAnLnhsc3gnLA0KICAgICAgJy5hdmknLA0KICAgICAgJy5tb3YnLA0KICAgICAgJy5pc28nLA0KICAgICAgJy5mbHYnLA0KICAgICAgJy5zd2YnLA0KICAgICAgJy5leGUnDQogICAgXTsNCiAgICANCiAgICAkaW1hZ2VfZXh0X2xpc3QgPSBbDQogICAgICAnaWNvJywNCiAgICAgICdnaWYnLA0KICAgICAgJ2pwZycsDQogICAgICAncG5nJw0KICAgIF07DQogIA0KICAgICR0b3RhbCAgICAgID0gMDsNCiAgICAkZmlsZV9jb3VudCA9IDA7DQogICAgJGRpcl9jb3VudCAgPSAwOw0KICAgICRkbF9kYiAgICAgID0gW107DQogIA0KICAgIGlmKCRjb3VudF9kb3dubG9hZHMpDQogICAgew0KICAgICAgJGRsX2RiID0gdXRpbHM6OnJlYWRfZGxfZGIoJHBybXMpOw0KICAgIH0NCg0KICAgIGZvcigkaSA9IDA7ICRpIDw9ICRmX2NvdW50OyAkaSsrKQ0KICAgIHsNCiAgICAgIGlmKCRtYXhfY291bnQgPD0gJG1heF9lbnRyaWVzKQ0KICAgICAgew0KICAgICAgICAkZnVsbF9uYW1lICA9IFxjbXNfam9pbl9wYXRoKCRyb290X3BhdGgsIHV0aWxzOjp1cmlfMl9wYXRoKHV0aWxzOjpqb2luX3VyaSgkZm9sZGVyLCAkc3ViX2RpciwgJGZpbGVfbmFtZXNbJGldKSkpOw0KICAgICAgICAkZGlyZWN0b3J5ID0gXGlzX2RpcigkZnVsbF9uYW1lKTsNCiAgICAgICAgDQogICAgICAgIGlmKCEkZGlyZWN0b3J5KQ0KICAgICAgICB7DQogICAgICAgICAgJGFycmF5ICAgID0gXGV4cGxvZGUoJy4nLCAkZmlsZV9uYW1lc1skaV0pOw0KICAgICAgICAgICRmaWxlX2V4dCA9IFxlbmQoJGFycmF5KTsNCiAgICAgICAgICAkZmlsZV9jb3VudCsrOw0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICRmaWxlX2V4dCA9ICdEaXJlY3RvcnknOw0KICAgICAgICAgICRkaXJfY291bnQrKzsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgJGV4dGVuc2lvbl90bXAgICAgID0gXHRyaW0oJGZpbGVfZXh0ZW5zaW9uKTsNCiAgICAgICAgJHJlcGxhY2VfZXh0ZW5zaW9uID0gXGV4cGxvZGUoJywnLCAkZXh0ZW5zaW9uX3RtcCk7DQogICAgICAgICRjbGVhbl9uYW1lICAgICAgICA9IFxzdHJfcmVwbGFjZSgkZGVsaW1pdGVyLCAnICcsICRmaWxlX25hbWVzKTsNCiAgICAgICAgJHByZXR0eV9jbGVhbl9uYW1lICA9IFxzdHJfcmVwbGFjZSgkZGVmYXVsdGV4dGVuc2lvbiwgJyAnLCAkY2xlYW5fbmFtZSk7DQogICAgICAgICRzdXBlcl9jbGVhbl9uYW1lICAgPSBcc3RyX3JlcGxhY2UoJHJlcGxhY2VfZXh0ZW5zaW9uLCAnICcsICRwcmV0dHlfY2xlYW5fbmFtZSk7DQogICAgICAgIC8vJGNsZWFuaWNvbnVybCAgICAgPSBcc3RyX3JlcGxhY2UoJGRlbGltaXRlciwgJy0nLCAkZmlsZV9uYW1lcyk7DQogICAgICAgIC8vJHByZXR0eWNsZWFuaWNvbnVybCA9IHN0cl9yZXBsYWNlKCRkZWZhdWx0ZXh0ZW5zaW9uLCAkaWNvbmV4dGVuc2lvbiwgJGNsZWFuaWNvbnVybCk7DQogICAgICAgIC8vJGF1dG9pY29ucGF0aCA9ICd1cGxvYWRzL2ltYWdlcy9hcHBpY29ucy8nIC4gJGZpbGVfbmFtZXM7DQogICAgICAgIC8vJGljb25wYXRoID0gJ3VwbG9hZHMvaW1hZ2VzL2FwcGljb25zLycgLiAkcHJldHR5Y2xlYW5pY29udXJsWyRpXTsNCiAgICAgICAgLy8kYmFzZVBhdGggPSAndXBsb2Fkcy9pbWFnZXMvYXBwaWNvbnMvJzsNCiAgICAgICAgDQogICAgICAgIGlmKCRkaXJlY3RvcnkgJiYgJGJyb3dzZV9zdWJfZGlycykNCiAgICAgICAgew0KICAgICAgICAgICRocmVmID0gdXRpbHM6OnJlY3JlYXRlX1VybCgkZmlsZV9uYW1lc1skaV0sICRxX3Zhcik7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgJGhyZWYgICAgICAgID0gdXRpbHM6OmpvaW5fdXJpKCRmb2xkZXIsICRzdWJfZGlyLCAkZmlsZV9uYW1lc1skaV0pOw0KICAgICAgICAgICR0aHVtYnNfcGF0aCA9IHV0aWxzOjpqb2luX3VyaSgkZm9sZGVyLCAkc3ViX2RpciwgJHRodW1ic19mb2xkZXIsICRmaWxlX25hbWVzWyRpXSk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIGlmKCAkYnJvd3NlX3N1Yl9kaXJzIHx8ICFcaXNfZGlyKCRmdWxsX25hbWUpICkNCiAgICAgICAgew0KICAgICAgICAgIGlmKCRzdHJpcF9leHRlbnNpb24gJiYgISRkaXJlY3RvcnkpDQogICAgICAgICAgew0KICAgICAgICAgICAgJGVudHJ5WyduYW1lJ10gICAgICAgPSAkc3VwZXJfY2xlYW5fbmFtZVskaV07DQogICAgICAgICAgICAkZW50cnlbJ3R5cGUnXSAgICAgICA9ICdmaWxlJzsNCiAgICAgICAgICAgICRlbnRyeVsnc3ViX3R5cGUnXSAgICA9IChcaW5fYXJyYXkoJGZpbGVfZXh0LCAkaW1hZ2VfZXh0X2xpc3QpID8gJ2ltYWdlJyA6ICRmaWxlX2V4dCk7DQogICAgICAgICAgICAkZW50cnlbJ3RodW1ic191cmwnXSA9ICdpbWFnZScgPT09ICRlbnRyeVsnc3ViX3R5cGUnXSA/ICR0aHVtYnNfcGF0aCA6ICcnOw0KICAgICAgICAgICAgDQogICAgICAgICAgICBpZigkb2JmdXNjYXRlX2Rvd25sb2FkKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAkdXJpX3BhcmFtcyAgID0gWw0KICAgICAgICAgICAgICAgICRzZWN1cml0eV90b2tlbl9xdiA9PiAkdG9rZW4sDQogICAgICAgICAgICAgICAgJHFfdmFyICAgICAgICAgICAgID0+IHV0aWxzOjpqb2luX3VyaSgkc3ViX2RpciwgJGZpbGVfbmFtZXNbJGldKQ0KICAgICAgICAgICAgICBdOw0KICAgICAgICAgICAgICAkdXJsICAgICAgICAgID0gdXRpbHM6OmdldF9uYWtlZF91cmkoKSAuICc/JyAuIFxodHRwX2J1aWxkX3F1ZXJ5KCR1cmlfcGFyYW1zKTsNCiAgICAgICAgICAgICAgJGVudHJ5Wyd1cmwnXSA9ICR1cmw7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICRlbnRyeVsndXJsJ10gPSAkaHJlZjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJGVudHJ5WydmaWxlX2V4dCddID0gJGZpbGVfZXh0Ow0KICAgICAgICAgICAgJGVudHJ5Wyd0aXRsZSddICAgID0gJ0xpbmsgdG8gZG93bmxvYWQgdGhlICcgLiAkc3VwZXJfY2xlYW5fbmFtZVskaV0gLiAnIGRvY3VtZW50IGluICcgLiAkZmlsZV9leHQgLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBmb3JtYXQnOw0KICAgICAgICAgIH0NCiAgICAgICAgICBlbHNlIGlmKCEkZGlyZWN0b3J5KQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgICRlbnRyeVsnbmFtZSddICAgICAgID0gJHN1cGVyX2NsZWFuX25hbWVbJGldOw0KICAgICAgICAgICAgJGVudHJ5Wyd0eXBlJ10gICAgICAgPSAnZmlsZSc7DQogICAgICAgICAgICAkZW50cnlbJ3N1Yl90eXBlJ10gICAgPSAoXGluX2FycmF5KCRmaWxlX2V4dCwgJGltYWdlX2V4dF9saXN0KSA/ICdpbWFnZScgOiAkZmlsZV9leHQpOw0KICAgICAgICAgICAgJGVudHJ5Wyd0aHVtYnNfdXJsJ10gPSAnaW1hZ2UnID09PSAkZW50cnlbJ3N1Yl90eXBlJ10gPyAkdGh1bWJzX3BhdGggOiAnJzsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgaWYoJG9iZnVzY2F0ZV9kb3dubG9hZCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgJHVyaV9wYXJhbXMgICA9IFsNCiAgICAgICAgICAgICAgICAkc2VjdXJpdHlfdG9rZW5fcXYgPT4gJHRva2VuLA0KICAgICAgICAgICAgICAgICRxX3ZhciAgICAgICAgICAgICA9PiB1dGlsczo6am9pbl91cmkoJHN1Yl9kaXIsICRmaWxlX25hbWVzWyRpXSkNCiAgICAgICAgICAgICAgXTsNCiAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICR1cmwgICAgICAgICAgPSB1dGlsczo6Z2V0X25ha2VkX3VyaSgpIC4gJz8nIC4gXGh0dHBfYnVpbGRfcXVlcnkoJHVyaV9wYXJhbXMpOw0KICAgICAgICAgICAgICAkZW50cnlbJ3VybCddID0gJHVybDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgJGVudHJ5Wyd1cmwnXSA9ICRocmVmOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICAkZW50cnlbJ2ZpbGVfZXh0J10gPSAkZmlsZV9leHQ7DQogICAgICAgICAgICAkZW50cnlbJ3RpdGxlJ10gICAgPSAnTGluayB0byBkb3dubG9hZCB0aGUgJyAuICRzdXBlcl9jbGVhbl9uYW1lWyRpXSAuICcgZG9jdW1lbnQgaW4gJyAuICRmaWxlX2V4dCAuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIGZvcm1hdCc7DQogICAgICAgICAgfQ0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICB7DQogICAgICAgICAgICAkdG4gICAgICAgICAgICAgICAgPSBcaXNfYXJyYXkoJHN1cGVyX2NsZWFuX25hbWUpID8gJHN1cGVyX2NsZWFuX25hbWVbJGldIDogJyc7DQogICAgICAgICAgICAkZW50cnlbJ25hbWUnXSAgICAgPSAkdG47DQogICAgICAgICAgICAkZW50cnlbJ3R5cGUnXSAgICAgPSAnZGlyJzsNCiAgICAgICAgICAgICRlbnRyeVsndXJsJ10gICAgICA9ICRocmVmOw0KICAgICAgICAgICAgJGVudHJ5WydmaWxlX2V4dCddID0gJGZpbGVfZXh0Ow0KICAgICAgICAgICAgJGVudHJ5Wyd0aXRsZSddICAgID0gJ0xpbmsgdG8gdGhlICcgLiAkdG4gLiAnICcgLiAkZmlsZV9leHQ7DQogICAgICAgICAgfQ0KICANCiAgICAgICAgICBpZighJGRpcmVjdG9yeSAmJiAkY291bnRfZG93bmxvYWRzKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIGlmKGlzc2V0KCRkbF9kYlskZnVsbF9uYW1lXSkgKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAkZW50cnlbJ2Rvd25sb2FkX2NvdW50J10gPSAkZGxfZGJbJGZ1bGxfbmFtZV07DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICRlbnRyeVsnZG93bmxvYWRfY291bnQnXSA9IDA7DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICAgIA0KICAgICAgICAgIGlmKCRzaG93X3NpemUgJiYgISRkaXJlY3RvcnkpDQogICAgICAgICAgew0KICAgICAgICAgICAgaWYoXHNwcmludGYoJyV1JywgXGZpbGVzaXplKCRmdWxsX25hbWUpIDwgMTAyNCkpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICRlbnRyeVsnc2l6ZSddID0gXHNwcmludGYoJyV1JywgXGZpbGVzaXplKCRmdWxsX25hbWUpKSAuICcgQic7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlIGlmKFxzcHJpbnRmKCcldScsIFxmaWxlc2l6ZSgkZnVsbF9uYW1lKSA8IDEwMDAwMDApKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAkZW50cnlbJ3NpemUnXSA9IFxzcHJpbnRmKCcldScsIFxmaWxlc2l6ZSgkZnVsbF9uYW1lKSAvIDEwMjQpIC4gJyBLQic7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlIGlmKFxzcHJpbnRmKCcldScsIFxmaWxlc2l6ZSgkZnVsbF9uYW1lKSA8IDEwMDAwMDAwMDApKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAkZW50cnlbJ3NpemUnXSA9IFxzcHJpbnRmKCclMDEuMWYnLCBcZmlsZXNpemUoJGZ1bGxfbmFtZSkgLyAxMDQ4NTc2KSAuICcgTUInOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAkZW50cnlbJ3NpemUnXSA9XHNwcmludGYoJyUwMS4xZicsIFxmaWxlc2l6ZSgkZnVsbF9uYW1lKSAvIDEwNzM3NDE4MjQpIC4gJyBHQic7DQogICAgICAgICAgICB9DQogIA0KICAgICAgICAgICAgJHRvdGFsICs9IChpbnQpXHNwcmludGYoJyV1JywgXGZpbGVzaXplKCRmdWxsX25hbWUpKTsNCiAgICAgICAgICB9DQogICAgICAgICAgDQogICAgICAgICAgaWYoJGRhdGUgJiYgJGRpcmVjdG9yeSkNCiAgICAgICAgICB7DQogICAgICAgICAgICAkZW50cnlbJ2RhdGUnXSA9IFxkYXRlKCRkYXRlZm9ybWF0LCBcZmlsZW10aW1lKCRmdWxsX25hbWUpKTsNCiAgICAgICAgICB9DQogICAgICAgICAgZWxzZSBpZigkZGF0ZSkNCiAgICAgICAgICB7DQogICAgICAgICAgICAkZW50cnlbJ2RhdGUnXSA9IFxkYXRlKCRkYXRlZm9ybWF0LCBcZmlsZW10aW1lKCRmdWxsX25hbWUpKTsNCiAgICAgICAgICB9DQogICAgICAgICAgDQogICAgICAgICAgJG1heF9jb3VudCsrOw0KICAgICAgICAgIA0KICAgICAgICAgICRmaWxlc19saXN0W10gPSAkZW50cnk7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9DQogICAgDQogICAgaWYoIFxzcHJpbnRmKCcldScsIChpbnQpJHRvdGFsIDwgMTAyNCkgKQ0KICAgIHsNCiAgICAgICR0b3RhbF90ZXh0ID0gXHNwcmludGYoJyV1JywgKGludCkkdG90YWwpIC4gJyBCJzsNCiAgICB9DQogICAgZWxzZSBpZihcc3ByaW50ZignJXUnLCAoaW50KSR0b3RhbCA8IDEwMDAwMDApKQ0KICAgIHsNCiAgICAgICR0b3RhbF90ZXh0ID0gXHNwcmludGYoJyV1JywgKGludCkkdG90YWwgLyAxMDI0KSAuICcgS0InOw0KICAgIH0NCiAgICBlbHNlIGlmKFxzcHJpbnRmKCcldScsIChpbnQpJHRvdGFsIDwgMTAwMDAwMDAwMCkpDQogICAgew0KICAgICAgJHRvdGFsX3RleHQgPSBcc3ByaW50ZignJTAxLjFmJywgKGludCkkdG90YWwgLyAxMDQ4NTc2KSAuICcgTUInOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgJHRvdGFsX3RleHQgPVxzcHJpbnRmKCclMDEuMWYnLCAoaW50KSR0b3RhbCAvIDEwNzM3NDE4MjQpIC4gJyBHQic7DQogICAgfQ0KICANCiAgICAkZmlsZXNfbGlzdF9vYmogICAgICAgICAgICAgICAgICA9IG5ldyBcc3RkQ2xhc3MoKTsNCiAgICAkZmlsZXNfbGlzdF9vYmotPm1lc3NhZ2VzICAgICAgICA9ICRtZXNzYWdlczsgIyB0byBiZSBpbXBsZW1lbnRlZDsNCiAgICAkZmlsZXNfbGlzdF9vYmotPmZpbGVzICAgICAgICAgICA9ICRmaWxlc19saXN0Ow0KICAgICRmaWxlc19saXN0X29iai0+dG90YWxfc2l6ZV90ZXh0ID0gJHRvdGFsX3RleHQ7DQogICAgJGZpbGVzX2xpc3Rfb2JqLT50b3RhbF9zaXplICAgICAgPSAoaW50KSR0b3RhbDsNCiAgICAkZmlsZXNfbGlzdF9vYmotPmZpbGVfY291bnQgICAgICA9ICRmaWxlX2NvdW50Ow0KICAgICRmaWxlc19saXN0X29iai0+ZGlyX2NvdW50ICAgICAgID0gJGRpcl9jb3VudDsNCiAgICAkZmlsZXNfbGlzdF9vYmotPml0ZW1zX2NvdW50ICAgICA9ICRkaXJfY291bnQgKyAkZmlsZV9jb3VudDsNCiAgICANCiAgICAkc21hcnR5X3ZhciA9ICRwYXJhbXNbJ2Fzc2lnbiddID8/ICdmaWxlc19saXN0JzsNCiAgICAkdGVtcGxhdGUtPmFzc2lnbigkc21hcnR5X3ZhciwgJGZpbGVzX2xpc3Rfb2JqKTsNCiAgfQ0KICANCiAgLyoqDQogICAqIEB0aHJvd3MgXENtc0Vycm9yNDA0RXhjZXB0aW9uDQogICAqLw0KICBmdW5jdGlvbiB0cmlnZ2VyXzQwNCgkcGFyYW1zLCAkc21hcnR5KQ0KICB7DQogICAgJG1zZyA9ICRwYXJhbXNbJ21zZyddID8/ICdUaGlzIGNvbnRlbnQgaXMgbm90IGF2YWlsYWJsZSc7DQogICAgJGFjdGl2ZSA9ICFlbXB0eSgkcGFyYW1zWydtc2cnXSk7DQogICAgDQogICAgaWYoJGFjdGl2ZSkNCiAgICB7DQogICAgICB0aHJvdyBuZXcgXENtc0Vycm9yNDA0RXhjZXB0aW9uKCRtc2cpOw0KICAgIH0NCiAgfQ0KICANCiAgLyoqDQogICAqIEB0aHJvd3MgXENtc0Vycm9yNDAzRXhjZXB0aW9uDQogICAqLw0KICBmdW5jdGlvbiB0cmlnZ2VyXzQwMygkcGFyYW1zLCAkc21hcnR5KQ0KICB7DQogICAgJG1zZyA9ICRwYXJhbXNbJ21zZyddID8/ICdQZXJtaXNzaW9uIGRlbmllZCEnOw0KICAgICRhY3RpdmUgPSAhZW1wdHkoJHBhcmFtc1snbXNnJ10pOw0KICANCiAgICBpZigkYWN0aXZlKQ0KICAgIHsNCiAgICAgIHRocm93IG5ldyBcQ21zRXJyb3I0MDNFeGNlcHRpb24oJG1zZyk7DQogICAgfQ0KICB9DQp9DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/class.smx.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNtYXJ0eUV4dCAoYykgMjAyMC0yMDIxIGJ5IENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uCiMgIEFuIGFkZC1vbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBwcm92aWRlIHVzZWZ1bCBmdW5jdGlvbnMKIyAgYW5kIGNvbW1vbmx5IHVzZWQgZ3VpIGNhcGFiaWxpdGllcyB0byBvdGhlciBtb2R1bGVzLgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEEgZm9yayBvZjoKIwojIE1vZHVsZTogQ0dTaW1wbGVTbWFydHkgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpmaW5hbCBjbGFzcyBzbXgKewogIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7IH0KICAKICAvKioKICAgKiBHZXQgdGhlIGN1cnJlbnQgVVJMCiAgICoKICAgKiBAcmV0dXJuIHN0cmluZwogICAqLwogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2VsZl91cmwoKQogIHsKICAgICRzICAgICAgICA9ICggXHh0X3V0aWxzOjpzc2xfcmVxdWVzdCgpICkgPyAncycgOiAnJzsKICAgICRwICAgICAgICA9IHN0cnBvcygkX1NFUlZFUlsnU0VSVkVSX1BST1RPQ09MJ10sICcvJyk7CiAgICAkcHJvdG9jb2wgPSBzdHJ0b2xvd2VyKHN1YnN0cigkX1NFUlZFUlsnU0VSVkVSX1BST1RPQ09MJ10sIDAsICRwKSkgLiAkczsKICAgICRwb3J0ICAgICA9ICgnODAnID09PSAoc3RyaW5nKSRfU0VSVkVSWydTRVJWRVJfUE9SVCddIHx8ICc0NDMnID09PSAoc3RyaW5nKSRfU0VSVkVSWydTRVJWRVJfUE9SVCddKSA/ICcnCiAgICAgIDogKCc6JyAuICRfU0VSVkVSWydTRVJWRVJfUE9SVCddKTsKICAgICRzICAgICAgICA9ICRwcm90b2NvbCAuICc6Ly8nIC4gJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ10gLiAkcG9ydDsKICAgIAogICAgcmV0dXJuICRzIC4gJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ107CiAgfQogIAogIAogIC8qKgogICAqIFRlc3QgaWYgYSBtb2R1bGUgaXMgaW5zdGFsbGVkLCBhbmQgYWN0aXZlLgogICAqCiAgICogQHBhcmFtIHN0cmluZyAkbW9kdWxlIHRoZSBtb2R1bGUgbmFtZQogICAqCiAgICogQHJldHVybiBib29sCiAgICovCiAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBtb2R1bGVfaW5zdGFsbGVkKCRtb2R1bGUpCiAgewogICAgaWYoJycgPT09ICRtb2R1bGUpIHsgcmV0dXJuIDA7IH0KICAgIAogICAgJG1vZHVsZSA9IFxjbXNfdXRpbHM6OmdldF9tb2R1bGUoJG1vZHVsZSk7CiAgICAKICAgICRyZXN1bHQgPSAwOwogICAgCiAgICBpZiggaXNfb2JqZWN0KCRtb2R1bGUpICkgeyAkcmVzdWx0ID0gMTt9CiAgICAKICAgIHJldHVybiAoYm9vbCkgJHJlc3VsdDsKICB9CiAgCiAgCiAgLyoqCiAgICogR2V0IHRoZSBhbGlhcyBvZiB0aGUgc3BlY2lmaWVkIGFsaWFzJyBwYXJlbnQuIGlmIGFueQogICAqCiAgICogQHBhcmFtIHN0cmluZyAkYWxpYXMgVGhlIG9wdGlvbmFsIGFsaWFzLiAgSWYgbm90IHNwZWNpZmllZCwgdGhlIGN1cnJlbnQgcGFnZSBpcyB1c2VkLgogICAqCiAgICogQHJldHVybiBzdHJpbmcKICAgKi8KICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIGdldF9wYXJlbnRfYWxpYXMoJGFsaWFzID0gJycpCiAgewogICAgJGdDbXMgPSBcQ21zQXBwOjpnZXRfaW5zdGFuY2UoKTsKICAgICRobSAgID0gJGdDbXMtPkdldEhpZXJhcmNoeU1hbmFnZXIoKTsKICAgIAogICAgaWYoJycgPT09ICRhbGlhcykKICAgIHsKICAgICAgJGFsaWFzID0gXGNtc191dGlsczo6Z2V0X2N1cnJlbnRfYWxpYXMoKTsKICAgIH0KICAgIAogICAgJG5vZGUgPSAkaG0tPmZpbmRfYnlfdGFnKCdhbGlhcycsICRhbGlhcyk7CiAgICAKICAgIGlmKCEkbm9kZSkgeyByZXR1cm4gJyc7IH0KICAKICAgIHJldHVybiAkbm9kZS0+Z2V0UGFyZW50KCktPmdldF90YWcoJ2FsaWFzJyk7CiAgfQogIAogIAogIC8qKgogICAqIFRlc3QgaWYgYSBwYWdlIGFsaWFzIG9yIGlkLi4uIGlzIGEgY2hpbGQgb2YgYW5vdGhlciBwYWdlIGFsaWFzIG9yIGlkLgogICAqCiAgICogQHBhcmFtIHN0cmluZ3xpbnQgJHRlc3RfcGFyZW50IFRoZSBwYXJlbnQgYWxpYXMgb3IgaWQgdG8gdGVzdCBhZ2FpbnN0CiAgICogQHBhcmFtIHN0cmluZ3xpbnQgJHRlc3RfY2hpbGQgIFRoZSBjaGlsZCBhbGlhcyBvciBpZCB0byB0ZXN0IGFnYWluc3QKICAgKgogICAqIEByZXR1cm4gYm9vbAogICAqLwogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNfY2hpbGRfb2YoJHRlc3RfcGFyZW50LCAkdGVzdF9jaGlsZCkKICB7CiAgICAkZ0NtcyA9IFxDbXNBcHA6OmdldF9pbnN0YW5jZSgpOwogICAgJGhtICAgPSAkZ0Ntcy0+R2V0SGllcmFyY2h5TWFuYWdlcigpOwoKICAgIGlmKCEkdGVzdF9wYXJlbnQpIHsgcmV0dXJuIEZBTFNFOyB9CiAgICAKICAgIGlmKCEkdGVzdF9jaGlsZCkgeyByZXR1cm4gRkFMU0U7IH0KICAKICAgIC8vIGdldCB0aGUgY2hpbGQgbm9kZQogICAgaWYoIChpbnQpJHRlc3RfY2hpbGQgPiAwICYmIGlzX251bWVyaWMoJHRlc3RfY2hpbGQpICkKICAgIHsKICAgICAgJG5vZGVfY2hpbGQgPSAkaG0tPmZpbmRfYnlfdGFnKCdpZCcsICR0ZXN0X2NoaWxkKTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgJG5vZGVfY2hpbGQgPSAkaG0tPmZpbmRfYnlfdGFnKCdhbGlhcycsICR0ZXN0X2NoaWxkKTsKICAgIH0KICAgIAogICAgaWYoISRub2RlX2NoaWxkKSB7IHJldHVybiBGQUxTRTsgfQogICAgCiAgICAvLyBnZXQgdGhlIHBhcmVudCBub2RlLCBhbmQgaXQncyBpZC4KICAgIGlmKChpbnQpJHRlc3RfcGFyZW50ID4gMCAmJiBpc19udW1lcmljKCR0ZXN0X3BhcmVudCkpCiAgICB7CiAgICAgICRub2RlX3BhcmVudCA9ICRobS0+ZmluZF9ieV90YWcoJ2lkJywgJHRlc3RfcGFyZW50KTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgJG5vZGVfcGFyZW50ID0gJGhtLT5maW5kX2J5X3RhZygnYWxpYXMnLCAkdGVzdF9wYXJlbnQpOwogICAgfQogICAgCiAgICBpZighJG5vZGVfcGFyZW50KSB7IHJldHVybiBGQUxTRTsgfQogICAgCiAgICAkcGFyZW50X2lkID0gKGludCkkbm9kZV9wYXJlbnQtPmdldF90YWcoJ2lkJyk7CiAgICAKICAgIGlmKCRwYXJlbnRfaWQgPCAxKSB7IHJldHVybiBGQUxTRTsgfQogICAgCiAgICB3aGlsZSgkbm9kZV9jaGlsZCkKICAgIHsKICAgICAgaWYoJG5vZGVfY2hpbGQtPmdldF90YWcoJ2lkJykgPT0gJHBhcmVudF9pZCkgeyByZXR1cm4gVFJVRTsgfQogICAgICAKICAgICAgJG5vZGVfY2hpbGQgPSAkbm9kZV9jaGlsZC0+Z2V0X3BhcmVudCgpOwogICAgfQogICAgCiAgICByZXR1cm4gRkFMU0U7CiAgfQogIAogIC8qKgogICAqIEdldCB0aGUgYWxpYXMgb2YgdGhlIHJvb3QgcGFnZSBvZiB0aGUgc3BlY2lmaWVkIGFsaWFzLgogICAqCiAgICogQHBhcmFtIHN0cmluZyAkYWxpYXMgVGhlIGRlc2lyZWQgcGFnZSBhbGlhcy4gIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBjdXJyZW50IHBhZ2UgYWxpYXMgaXMgdXNlZC4KICAgKgogICAqIEByZXR1cm4gc3RyaW5nCiAgICovCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRfcm9vdF9hbGlhcygkYWxpYXMgPSAnJykKICB7CiAgICAkZ0NtcyA9IFxDbXNBcHA6OmdldF9pbnN0YW5jZSgpOwogICAgJGhtICAgPSAkZ0Ntcy0+R2V0SGllcmFyY2h5TWFuYWdlcigpOwogICAgCiAgICBpZignJyA9PT0gJGFsaWFzKQogICAgewogICAgICAkYWxpYXMgPSBcY21zX3V0aWxzOjpnZXRfY3VycmVudF9hbGlhcygpOwogICAgfQogICAgCiAgICAkc3RhY2sgPSBbXTsKICAgICRub2RlICA9ICRobS0+ZmluZF9ieV90YWcoJ2FsaWFzJywgJGFsaWFzKTsKICAgIAogICAgd2hpbGUoJG5vZGUgJiYgJG5vZGUtPmdldF90YWcoJ2lkJykgPiAwKQogICAgewogICAgICAkc3RhY2tbXSA9ICRub2RlOwogICAgICAkbm9kZSAgICA9ICRub2RlLT5nZXRQYXJlbnQoKTsKICAgIH0KICAgIAogICAgaWYoIDAgPT09IGNvdW50KCRzdGFjaykgKSB7IHJldHVybiAnJzsgfQogIAogICAgcmV0dXJuICRzdGFja1tjb3VudCgkc3RhY2spIC0gMV0tPmdldF90YWcoJ2FsaWFzJyk7CiAgfQogIAogIAogIC8qKgogICAqIEdldCB0aGUgdGl0bGUgb2YgdGhlIHNwZWNpZmllZCBwYWdlIChieSBhbGlhcykgb3IgdGhlIGN1cnJlbnQgcGFnZS4KICAgKgogICAqIEBwYXJhbSBzdHJpbmcgJGFsaWFzIE9wdGlvbmFsIGFsaWFzCiAgICoKICAgKiBAcmV0dXJuIHN0cmluZwogICAqLwogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0X3BhZ2VfdGl0bGUoJGFsaWFzID0gJycpCiAgewogICAgJGNvbnRlbnRvcHMgPSBcQ29udGVudE9wZXJhdGlvbnM6OmdldF9pbnN0YW5jZSgpOwogICAgCiAgICBpZignJyA9PT0gJGFsaWFzKQogICAgewogICAgICAkYWxpYXMgPSBcY21zX3V0aWxzOjpnZXRfY3VycmVudF9hbGlhcygpOwogICAgfQogICAgCiAgICAkY29udGVudCA9ICRjb250ZW50b3BzLT5Mb2FkQ29udGVudEZyb21BbGlhcygkYWxpYXMpOwogICAgCiAgICBpZighaXNfb2JqZWN0KCRjb250ZW50KSkgeyByZXR1cm4gJyc7IH0KICAgIAogICAgcmV0dXJuICRjb250ZW50LT5OYW1lKCk7CiAgfQogIAogIAogIC8qKgogICAqIEdldCB0aGUgbWVudSB0ZXh0IG9mIHRoZSBzcGVjaWZpZWQgcGFnZSAoYnkgYWxpYXMpIG9yIHRoZSBjdXJyZW50IHBhZ2UuCiAgICoKICAgKiBAcGFyYW0gc3RyaW5nICRhbGlhcyBPcHRpb25hbCBhbGlhcwogICAqCiAgICogQHJldHVybiBzdHJpbmcKICAgKi8KICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldF9wYWdlX21lbnV0ZXh0KCRhbGlhcyA9ICcnKQogIHsKICAgICRjb250ZW50b3BzID0gXENvbnRlbnRPcGVyYXRpb25zOjpnZXRfaW5zdGFuY2UoKTsKICAgIAogICAgaWYoJycgPT09ICRhbGlhcykKICAgIHsKICAgICAgJGFsaWFzID0gXGNtc191dGlsczo6Z2V0X2N1cnJlbnRfYWxpYXMoKTsKICAgIH0KICAgIAogICAgJGNvbnRlbnQgPSAkY29udGVudG9wcy0+TG9hZENvbnRlbnRGcm9tQWxpYXMoJGFsaWFzKTsKICAgIAogICAgaWYoICFpc19vYmplY3QoJGNvbnRlbnQpICkgeyByZXR1cm4gJyc7IH0KICAgIAogICAgcmV0dXJuICRjb250ZW50LT5NZW51VGV4dCgpOwogIH0KICAKICAKICAvKioKICAgKiBHZXQgdGhlIHR5cGUgb2YgdGhlIHNwZWNpZmllZCBwYWdlIChieSBhbGlhcykgb3IgdGhlIGN1cnJlbnQgcGFnZS4KICAgKgogICAqIEBwYXJhbSBzdHJpbmcgJGFsaWFzIE9wdGlvbmFsIGFsaWFzCiAgICoKICAgKiBAcmV0dXJuIHN0cmluZwogICAqLwogIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gZ2V0X3BhZ2VfdHlwZSgkYWxpYXMgPSAnJykKICB7CiAgICAkY29udGVudG9wcyA9IFxDb250ZW50T3BlcmF0aW9uczo6Z2V0X2luc3RhbmNlKCk7CiAgICAKICAgIGlmKCcnID09PSAkYWxpYXMpCiAgICB7CiAgICAgICRhbGlhcyA9IFxjbXNfdXRpbHM6OmdldF9jdXJyZW50X2FsaWFzKCk7CiAgICB9CiAgICAKICAgICRjb250ZW50ID0gJGNvbnRlbnRvcHMtPkxvYWRDb250ZW50RnJvbUFsaWFzKCRhbGlhcyk7CiAgICAKICAgIGlmKCAhaXNfb2JqZWN0KCRjb250ZW50KSApIHsgcmV0dXJuICcnOyB9CiAgICAKICAgIHJldHVybiAkY29udGVudC0+VHlwZSgpOwogIH0KICAKICAKICAvKioKICAgKiBUZXN0IGlmIHRoZSBjdXJyZW50IHBhZ2UgaGFzIGNoaWxkcmVuLgogICAqIERvZXMgbm90IHRlc3QgZm9yIGhpZGRlbiwgb3IgaW5hY3RpdmUgY2hpbGRyZW4uCiAgICoKICAgKiBAcGFyYW0gc3RyaW5nICRhbGlhcyBPcHRpb25hbCBhbGlhcwogICAqCiAgICogQHJldHVybiBib29sCiAgICovCiAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBoYXNfY2hpbGRyZW4oJGFsaWFzID0gJycpCiAgewogICAgJGdDbXMgPSBcQ21zQXBwOjpnZXRfaW5zdGFuY2UoKTsKICAgICRobSAgID0gJGdDbXMtPkdldEhpZXJhcmNoeU1hbmFnZXIoKTsKICAgIAogICAgaWYoJycgPT0gJGFsaWFzKQogICAgewogICAgICAkYWxpYXMgPSBcY21zX3V0aWxzOjpnZXRfY3VycmVudF9hbGlhcygpOwogICAgfQogICAgCiAgICAkbm9kZSA9ICRobS0+ZmluZF9ieV90YWcoJ2FsaWFzJywgJGFsaWFzKTsKICAgIAogICAgaWYoISRub2RlKSB7IHJldHVybiBGQUxTRTsgfQogICAgCiAgICByZXR1cm4gJG5vZGUtPmhhc19jaGlsZHJlbigpOwogIH0KICAKICAKICAvKioKICAgKiBSZXR1cm4gYW4gYXJyYXkgY29udGFpbmluZyB0aGUgcGFnZSBpZHMgb2YgYWxsIG9mIHRoZSBzcGVjaWZpZWQgcGFnZSdzIGNoaWxkcmVuLgogICAqCiAgICogQHBhcmFtIHN0cmluZyAkYWxpYXMgICBPcHRpb25hbCBhbGlhcwogICAqIEBwYXJhbSBib29sICAgJHNob3dhbGwgV2V0aGVyIHRvIHNob3cgaW5hY3RpdmUgY2hpbGRyZW4uCiAgICoKICAgKiBAcmV0dXJuIGFycmF5CiAgICovCiAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBnZXRfY2hpbGRyZW4oJGFsaWFzID0gJycsICRzaG93YWxsID0gRkFMU0UpCiAgewogICAgaWYoJycgPT0gJGFsaWFzKQogICAgewogICAgICAkYWxpYXMgPSBcY21zX3V0aWxzOjpnZXRfY3VycmVudF9hbGlhcygpOwogICAgfQogICAgCiAgICBpZignJyA9PSAkYWxpYXMpIHsgcmV0dXJuIFtdOyB9CiAgICAKICAgICRobSAgICAgPSBjbXNtcygpLT5HZXRIaWVyYXJjaHlNYW5hZ2VyKCk7CiAgICAkcGFyZW50ID0gJGhtLT5maW5kX2J5X3RhZygnYWxpYXMnLCAkYWxpYXMpOwogICAgCiAgICBpZighJHBhcmVudCkgeyByZXR1cm4gW107IH0KICAgIAogICAgJGNoaWxkX25vZGVzID0gJHBhcmVudC0+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/IFtdOw0KICAgICRuYWtlZF91cmkgID0gc2VsZjo6Z2V0X25ha2VkX3VyaSgpOw0KICAgIA0KICAgIGlmKGlzc2V0KCRnZXRfcGFyYW1zWyRxX3Zhcl0pKQ0KICAgIHsNCiAgICAgIGlmKCBGQUxTRSAhPT0gXHN0cnBvcygkc3ViX2RpciwgJy4uJykgKQ0KICAgICAgew0KICAgICAgICAjIHJldmlzaXQgdGhpcy4uLi4NCiAgICAgICAgJHN1Yl9kaXJfMSA9IFxwcmVnX3JlcGxhY2UoJy9cLnsyfShceDJGKSQvJywgJycsICRnZXRfcGFyYW1zWyRxX3Zhcl0pOyAjLi4NCiAgICAgICAgJHN1Yl9kaXIgPSBccHJlZ19yZXBsYWNlKCcvW15ceDJGXSsoXHgyRikkLycsICcnLCAkc3ViX2Rpcl8xKTsgICAgICAgICAjICoqKiovDQogICAgICAgICMgLi4uLi4uLi4uLi4uLi4uLi4uDQogICAgICAgIGlmKGVtcHR5KCRzdWJfZGlyKSkNCiAgICAgICAgew0KICAgICAgICAgIHVuc2V0KCRnZXRfcGFyYW1zWyRxX3Zhcl0pOw0KICAgICAgICB9DQogICAgICAgIGVsc2VpZigkc3ViX2RpciA9PT0gJHN1Yl9kaXJfMSkNCiAgICAgICAgew0KICAgICAgICAgICR0bXAgPSBcZXhwbG9kZSgnLycsICRzdWJfZGlyKTsNCiAgICAgICAgICB1bnNldCgkdG1wW1xjb3VudCgkdG1wKSAtIDFdKTsNCiAgICAgICAgICAkZ2V0X3BhcmFtc1skcV92YXJdID0gXGltcGxvZGUoJy8nLCAkdG1wKTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIGlmKCRzdWJfZGlyID09PSAkZ2V0X3BhcmFtc1skcV92YXJdKQ0KICAgICAgICB7DQogICAgICAgICAgJHRtcCA9IFxleHBsb2RlKCcvJywgJHN1Yl9kaXIpOw0KICAgICAgICAgIHVuc2V0KCR0bXBbXGNvdW50KCR0bXApIC0gMV0pOw0KICAgICAgICAgICRnZXRfcGFyYW1zWyRxX3Zhcl0gPSBcaW1wbG9kZSgnLycsICR0bXApOw0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICRnZXRfcGFyYW1zWyRxX3Zhcl0gPSAkc3ViX2RpcjsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgew0KICAgICAgICAkZ2V0X3BhcmFtc1skcV92YXJdID0gc2VsZjo6am9pbl91cmkoJGdldF9wYXJhbXNbJHFfdmFyXSwgJHN1Yl9kaXIpOw0KICAgICAgfQ0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgJGdldF9wYXJhbXNbJHFfdmFyXSA9ICRzdWJfZGlyOw0KICAgIH0NCiAgICANCiAgICAkdXJsID0gJG5ha2VkX3VyaTsNCiAgICANCiAgICBpZihlbXB0eSgkZ2V0X3BhcmFtc1skcV92YXJdKSkNCiAgICB7DQogICAgICB1bnNldCgkZ2V0X3BhcmFtc1skcV92YXJdKTsNCiAgICB9DQogICAgDQogICAgaWYoIWVtcHR5KCRnZXRfcGFyYW1zKSkNCiAgICB7DQogICAgICBpZihlbXB0eSgkZ2V0X3BhcmFtc1skcV92YXJdKSAmJiBOVUxMICE9PSAkZ2V0X3BhcmFtc1skcV92YXJdKQ0KICAgICAgew0KICAgICAgICB1bnNldCgkZ2V0X3BhcmFtc1skcV92YXJdKTsNCiAgICAgIH0NCiAgICAgICR1cmwgLj0gJz8nIC4gXGh0dHBfYnVpbGRfcXVlcnkoJGdldF9wYXJhbXMpOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJHVybDsNCiAgfQ0KICANCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1cmlfMl9wYXRoKCR1cmkpDQogIHsNCiAgICByZXR1cm4gXHN0cl9yZXBsYWNlKCcvJywgXERJUkVDVE9SWV9TRVBBUkFUT1IsIFx0cmltKCR1cmksICcvJykpOw0KICB9DQogIA0KICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGpvaW5fdXJpKCkNCiAgew0KICAgICRhcmdzID0gXGZ1bmNfZ2V0X2FyZ3MoKTsNCiAgICAkYXJncyA9IFxhcnJheV9tYXAoDQogICAgICBzdGF0aWMgZnVuY3Rpb24oJHNydCkgew0KICAgICAgICByZXR1cm4gXHRyaW0oJHNydCwgJy8nKTsNCiAgICAgIH0sDQogICAgICAkYXJncw0KICAgICk7DQogICAgDQogICAgJGFyZ3MgPSBcYXJyYXlfZmlsdGVyKCRhcmdzKTsNCiAgICANCiAgICByZXR1cm4gXGltcGxvZGUoJy8nLCAkYXJncyk7DQogIH0NCiAgDQogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVhZF9kbF9kYigkcGFyYW1zKQ0KICB7DQogICAgXGV4dHJhY3QoJHBhcmFtcywgXEVYVFJfT1ZFUldSSVRFKTsNCiAgICAvKiogQHZhciBzdHJpbmcgJGRsX2NvdW50ZXJfZGJfZGlyIGluIHNjb3BlIGZyb20gZXh0cmFjdCAqLw0KICAgIC8qKiBAdmFyIHN0cmluZyAkZGxfY291bnRlcl9kYl9mbiBpbiBzY29wZSBmcm9tIGV4dHJhY3QgKi8NCiAgICAkZGJfZG4gICAgICA9IGVtcHR5KCRkbF9jb3VudGVyX2RiX2RpcikgPyAkZm9sZGVyIDogJGRsX2NvdW50ZXJfZGJfZGlyOw0KICAgICRkYl9mbiAgICAgID0gZW1wdHkoJGRsX2NvdW50ZXJfZGJfZm4pID8gJy5jb3VudGVyX2RiJyA6ICRkbF9jb3VudGVyX2RiX2ZuOw0KICAgICRkYl9mdWxsX2ZuID0gXGNtc19qb2luX3BhdGgoJGRiX2RuLCAkZGJfZm4pOw0KICAgIA0KICAgIGlmKCBcZmlsZV9leGlzdHMoJGRiX2Z1bGxfZm4pICkNCiAgICB7DQogICAgICAkZm8gICAgID0gXGZvcGVuKCRkYl9mdWxsX2ZuLCAncmInKTsNCiAgICAgIA0KICAgICAgXGZsb2NrKCRmbywgXExPQ0tfU0gsICR3YWl0SWZMb2NrZWQpOw0KICAgICAgJHN0cmluZyA9IEBcZmlsZV9nZXRfY29udGVudHMoJGRiX2Z1bGxfZm4pOw0KICAgICAgXGZsb2NrKCRmbywgXExPQ0tfVU4pOw0KICAgICAgXGZjbG9zZSgkZm8pOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgJHN0cmluZyA9ICcnOw0KICAgIH0NCiAgDQogICAgJHRtcCA9IFxleHBsb2RlKFxQSFBfRU9MLCAkc3RyaW5nKTsNCiAgICAkZGIgPSBbXTsNCiAgDQogICAgZm9yZWFjaCgkdG1wIGFzICRsaW5lKQ0KICAgIHsNCiAgICAgIGlmKCAhZW1wdHkoJGxpbmUpICkNCiAgICAgIHsNCiAgICAgICAgJHQgPSBcZXhwbG9kZSgnOjonLCAkbGluZSk7DQogICAgICAgICRkYlskdFswXV0gPSAkdFsxXTsNCiAgICAgIH0NCiAgICB9DQogICAgDQogICAgcmV0dXJuICRkYjsNCiAgfQ0KICANCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkb19jb3VudF9kb3dubG9hZCgkZnVsbF9maWxlbmFtZSwgJGZpbGVuYW1lLCAkcGFyYW1zKQ0KICB7DQogICAgJGRiID0gc2VsZjo6cmVhZF9kbF9kYigkcGFyYW1zKTsNCiAgICBcZXh0cmFjdCgkcGFyYW1zLCBcRVhUUl9PVkVSV1JJVEUpOw0KICAgIC8qKiBAdmFyIHN0cmluZyAkZGxfY291bnRlcl9kYl9kaXIgaW4gc2NvcGUgZnJvbSBleHRyYWN0ICovDQogICAgLyoqIEB2YXIgc3RyaW5nICRkbF9jb3VudGVyX2RiX2ZuIGluIHNjb3BlIGZyb20gZXh0cmFjdCAqLw0KICAgICRkYl9kbiA9IGVtcHR5KCRkbF9jb3VudGVyX2RiX2RpcikgPyAkZm9sZGVyIDogJGRsX2NvdW50ZXJfZGJfZGlyOw0KICAgICRkYl9mbiA9IGVtcHR5KCRkbF9jb3VudGVyX2RiX2ZuKSA/ICcuY291bnRlcl9kYicgOiAkZGxfY291bnRlcl9kYl9mbjsNCiAgICAkZGJfZnVsbF9mbiA9IFxjbXNfam9pbl9wYXRoKCRkYl9kbiwgJGRiX2ZuKTsNCiAgDQogICAgJGtleSA9ICRmdWxsX2ZpbGVuYW1lOw0KICANCiAgICBpZiggaXNzZXQoJGRiWyRrZXldKSApDQogICAgew0KICAgICAgKGludCkkZGJbJGtleV0rKzsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICRkYlska2V5XSA9IDE7DQogICAgfQ0KICAgIA0KICAgICRzdHJpbmcgPSAnJzsNCiAgICANCiAgICBmb3JlYWNoKCRkYiBhcyAkayA9PiAkdikNCiAgICB7DQogICAgICAkc3RyaW5nIC49ICRrIC4gJzo6JyAuICR2IC4gXFBIUF9FT0w7DQogICAgfQ0KICANCiAgICBcZmlsZV9wdXRfY29udGVudHMoJGRiX2Z1bGxfZm4sICRzdHJpbmcsIFxMT0NLX0VYKTsNCiAgfQ0KICANCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkb19kb3dubG9hZCgkZnVsbF9maWxlbmFtZSwgJGZpbGVuYW1lLCAkcGFyYW1zKQ0KICB7DQogICAgJGhhbmRsZXJzID0gXG9iX2xpc3RfaGFuZGxlcnMoKTsNCiAgICBmb3IoJGNudCA9IDAsICRjbnRNYXggPSBcY291bnQoJGhhbmRsZXJzKTsgJGNudCA8ICRjbnRNYXg7ICRjbnQrKykgeyBcb2JfZW5kX2NsZWFuKCk7IH0NCiAgICAjIGdyYWIgdGhlIHBhcmFtcyBpZiB0aGV5IGV4aXN0DQogICAgXGV4dHJhY3QoJHBhcmFtcywgXEVYVFJfT1ZFUldSSVRFKTsNCiAgDQogICAgJGNvdW50X2Rvd25sb2FkcyAgID0gKGJvb2wpKCFlbXB0eSgkY291bnRfZG93bmxvYWRzKSA/PyAkY291bnRfZG93bmxvYWRzKTsNCiAgICANCiAgICAjc29tZSBtaW1lIHR5cGVzDQogICAgJG1pbWVfdHlwZXMgPSBbDQogICAgICAnLmF2aScgID0+ICd2aWRlby9hdmknLA0KICAgICAgJy5ibXAnICA9PiAnaW1hZ2UvYm1wJywNCiAgICAgICd3ZWJwJyAgPT4gJ2ltYWdlL3dlYnAnLA0KICAgICAgJy5jc3YnICA9PiAndGV4dC9jc3YnLA0KICAgICAgJy5kb2MnICA9PiAnYXBwbGljYXRpb24vbXN3b3JkJywNCiAgICAgICcuZXhlJyAgPT4gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsDQogICAgICAnLmdpZicgID0+ICdpbWFnZS9naWYnLA0KICAgICAgJy5odG1sJyA9PiAndGV4dC9odG1sJywNCiAgICAgICcuaWNvJyAgPT4gJ2ltYWdlL3gtaWNvbicsDQogICAgICAnLmpwZycgID0+ICdpbWFnZS9qcGVnJywNCiAgICAgICcubW92JyAgPT4gJ3ZpZGVvL3F1aWNrdGltZScsDQogICAgICAnLnBkZicgID0+ICdhcHBsaWNhdGlvbi9wZGYnLA0KICAgICAgJy5wbmcnICA9PiAnaW1hZ2UvcG5nJywNCiAgICAgICcudHh0JyAgPT4gJ3RleHQvcGxhaW4nLA0KICAgICAgJy5ydGYnICA9PiAndGV4dC9yaWNodGV4dCcsDQogICAgICAnLnN3ZicgID0+ICdhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCcsDQogICAgICAnLnhscycgID0+ICdhcHBsaWNhdGlvbi9leGNlbCcNCiAgICBdOw0KICAgIA0KICAgIGlmKFxmaWxlX2V4aXN0cygkZnVsbF9maWxlbmFtZSkpDQogICAgew0KICAgICAgaWYoJGNvdW50X2Rvd25sb2FkcykNCiAgICAgIHsNCiAgICAgICAgc2VsZjo6ZG9fY291bnRfZG93bmxvYWQoJGZ1bGxfZmlsZW5hbWUsICRmaWxlbmFtZSwgJHBhcmFtcyk7DQogICAgICB9DQogICAgICANCiAgICAgICRhcnJheSAgICAgPSBcZXhwbG9kZSgnLicsICRmdWxsX2ZpbGVuYW1lKTsNCiAgICAgICRmaWxlX2V4dCAgPSAnLicgLiBcZW5kKCRhcnJheSk7DQogICAgICAkbWltZV90eXBlID0gJG1pbWVfdHlwZXNbJGZpbGVfZXh0XSA/PyAnYXBwbGljYXRpb24veC1iaW5hcnknOw0KICAgICAgDQogICAgICAjIHNldCBoZWFkZXJzIGFjY29yZGluZ2x5DQogICAgICBcaGVhZGVyKCdDb250ZW50LXR5cGU6ICcgLiAkbWltZV90eXBlKTsNCiAgICAgIFxoZWFkZXIoJ0NvbnRlbnQtRGVzY3JpcHRpb246IEZpbGUgVHJhbnNmZXInKTsNCiAgICAgIFxoZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoOiAnIC4gXGZpbGVzaXplKCRmdWxsX2ZpbGVuYW1lKSk7DQogICAgICBcaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0nIC4gJGZpbGVuYW1lKTsNCiAgICAgIFxoZWFkZXIoJ1ByYWdtYTogbm8tY2FjaGUnKTsNCiAgICAgIFxoZWFkZXIoJ0V4cGlyZXM6IDAnKTsNCiAgICAgIFxyZWFkZmlsZSgkZnVsbF9maWxlbmFtZSk7DQogICAgICBleGl0Ow0KICAgIH0NCiAgfQ0KICANCiAgLyoqDQogICAqIGRvZXNuJ3Qgc2VlbSB0byB3b3JrIG9uIG1vc3QgcGRmIGZpbGVzLCBzby4uLg0KICAgKiB3ZSdsbCBsaWtlbHkgZGl0Y2ggaXQgc29vbg0KICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlDQogICAqIEByZXR1cm4gYXJyYXkNCiAgICovDQogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0X3BkZl9pbmZvKCRmaWxlKQ0KICB7DQoNCiAgICAkdGl0bGUgPSAnJzsNCiAgICAkYXV0aG9yID0gJyc7DQogICAgDQogICAgJGRlc2NyaXB0aW9uID0gJyc7DQogICAgaWYoXGlzX2ZpbGUoJGZpbGUpICkNCiAgICB7DQogICAgICAkaGFuZGxlID0gXGZvcGVuICgkZmlsZSwgJ3JiJyk7DQogICAgICB3aGlsZSAoIVxmZW9mKCRoYW5kbGUpKQ0KICAgICAgew0KICAgICAgICAkYnVmZmVyID0gXGZnZXRzKCRoYW5kbGUsIDEwMjQpOw0KICAgICAgICANCiAgICAgICAgaWYoIDAgPT09IFxzdHJwb3MoJGJ1ZmZlciwgJy9UaXRsZSAoJykgKQ0KICAgICAgICB7DQogICAgICAgICAgJHRpdGxlID0gXHN0cl9yZXBsYWNlKA0KICAgICAgICAgICAgJ1xcJywgJycsICdVVEYtOCcgPT09IFxtYl9kZXRlY3RfZW5jb2RpbmcoJGJ1ZmZlciwgJ2F1dG8nLCBUUlVFKQ0KICAgICAgICAgICAgPyBcc3Vic3RyKFx0cmltKCRidWZmZXIpLCA4LCAtMSkNCiAgICAgICAgICAgIDogXG1iX2NvbnZlcnRfZW5jb2RpbmcoDQogICAgICAgICAgICAgIFxzdWJzdHIoXHRyaW0oJGJ1ZmZlciksIDgsIC0xKSwgJ1VURi04Jw0KICAgICAgICAgICAgKQ0KICAgICAgICAgICk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIGlmKCAwID09PSBcc3RycG9zKCRidWZmZXIsICcvQXV0aG9yICgnKSApDQogICAgICAgIHsNCiAgICAgICAgICAkYXV0aG9yID0gXHN0cl9yZXBsYWNlKA0KICAgICAgICAgICAgJ1xcJywgJycsICdVVEYtOCcgPT09IFxtYl9kZXRlY3RfZW5jb2RpbmcoJGJ1ZmZlciwgJ2F1dG8nLCBUUlVFKQ0KICAgICAgICAgICAgPyBcc3Vic3RyKFx0cmltKCRidWZmZXIpLCA5LCAtMSkNCiAgICAgICAgICAgIDogXG1iX2NvbnZlcnRfZW5jb2RpbmcoDQogICAgICAgICAgICAgIFxzdWJzdHIoXHRyaW0oJGJ1ZmZlciksIDksIC0xKSwgJ1VURi04Jw0KICAgICAgICAgICAgKQ0KICAgICAgICAgICk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIGlmKCAwID09PSBcc3RycG9zKCRidWZmZXIsICcvU3ViamVjdCAoJykgKQ0KICAgICAgICB7DQogICAgICAgICAgJGRlc2NyaXB0aW9uID0gXHN0cl9yZXBsYWNlKA0KICAgICAgICAgICAgJ1xcJywgJycsICdVVEYtOCcgPT09IFxtYl9kZXRlY3RfZW5jb2RpbmcoDQogICAgICAgICAgICAgICAgICAgICAgICAkYnVmZmVyLCAnYXV0bycsIFRSVUUNCiAgICAgICAgICAgICAgICAgICAgICApID8gXHN1YnN0cigNCiAgICAgICAgICAgIFx0cmltKCRidWZmZXIpLCAxMCwgLTENCiAgICAgICAgICApIDogXG1iX2NvbnZlcnRfZW5jb2RpbmcoXHN1YnN0cihcdHJpbSgkYnVmZmVyKSwgMTAsIC0xKSwgJ1VURi04JykNCiAgICAgICAgICApOw0KICAgICAgICB9DQogIA0KICAgICAgICBpZigkdGl0bGUgJiYgJGF1dGhvciAmJiAkZGVzY3JpcHRpb24pDQogICAgICAgIHsNCiAgICAgICAgICBcZmNsb3NlKCRoYW5kbGUpOw0KICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9DQogICAgICB9DQogICAgICANCiAgICAgIGlmKCEkdGl0bGUgfHwgISRhdXRob3IgfHwgISRkZXNjcmlwdGlvbikNCiAgICAgIHsNCiAgICAgICAgXGZjbG9zZSgkaGFuZGxlKTsNCiAgICAgIH0NCiAgICB9DQogIA0KICAgIHJldHVybiBbDQogICAgICAndGl0bGUnICAgICAgID0+ICR0aXRsZSwNCiAgICAgICdhdXRob3InICAgICAgPT4gJGF1dGhvciwNCiAgICAgICdkZXNjcmlwdGlvbicgPT4gJGRlc2NyaXB0aW9uDQogICAgXTsNCiAgfQ0KICANCiAgLyoqDQogICAqIHJldHVybiBhIGxpc3Qgb2YgZmlsZXMgaW4gYSBkaXJlY3RvcnkgcmVjdXJzaXZlbHkgb3Igbm90DQogICAqIGFzIGFuIGFycmF5DQogICAqDQogICAqIEBwYXJhbSAgICAgICRkaXJlY3RvcnkNCiAgICogQHBhcmFtICAgICAgJHJvb3RfcGF0aA0KICAgKiBAcGFyYW0gICAgICAkZm9sZGVyDQogICAqIEBwYXJhbSAgICAgICRzdWJfZGlyDQogICAqIEBwYXJhbSBib29sICRzaG93X2hpZGRlbg0KICAgKiBAcGFyYW0gYm9vbCAkZG93bmxvYWQNCiAgICogQHBhcmFtIG51bGwgJHNlcnZlX2ZuDQogICAqIEBwYXJhbSBudWxsICRwcm1zDQogICAqIEBwYXJhbSBib29sICRyZWN1cnNpdmUNCiAgICoNCiAgICogQHJldHVybiBhcnJheQ0KICAgKi8NCiAgc3RhdGljIGZ1bmN0aW9uIGdldERpcmVjdG9yeUZpbGVzSW5mbygkZGlyZWN0b3J5LCAkcm9vdF9wYXRoLCAkZm9sZGVyLCAkc3ViX2RpciwgJHNob3dfaGlkZGVuID0gZmFsc2UsICRkb3dubG9hZCA9IGZhbHNlLCAkc2VydmVfZm4gPSBudWxsLCAkcHJtcyA9IG51bGwsICRyZWN1cnNpdmUgPSBmYWxzZSk6IGFycmF5DQogIHsNCiAgICAkZmlsZXMgPSBbXTsNCi8vICAgICRmaWxlX3R5cGVzID0gW107DQovLyAgICAkZmlsZV9kYXRlcyA9IFtdOw0KLy8gICAgJGZpbGVfc2l6ZXMgPSBbXTsNCiAgDQogICAgJGhhbmRsZSA9IFxvcGVuZGlyKCRkaXJlY3RvcnkpOw0KICANCiAgICBpZiAoZmFsc2UgPT09ICRoYW5kbGUpDQogICAgew0KICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCJVbmFibGUgdG8gb3BlbiBkaXJlY3Rvcnk6ICRkaXJlY3RvcnkiKTsNCiAgICB9DQogIA0KICAgIHdoaWxlICgkZW50cnkgPSByZWFkZGlyKCRoYW5kbGUpKQ0KICAgIHsNCiAgICAgIGlmICgkZW50cnkgIT09ICcuJyAmJiAkZW50cnkgIT09ICcuLicpDQogICAgICB7DQogICAgICAgIC8vIFByZXZlbnQgc2hvd2luZyBoaWRkZW4gZmlsZXMgdW5sZXNzIHNwZWNpZmllZA0KICAgICAgICBpZiAoISRzaG93X2hpZGRlbiAmJiBzdGFydHNXaXRoKCRlbnRyeSwgJy4nKSkNCiAgICAgICAgew0KICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICB9DQogICAgICANCiAgICAgICAgJGZ1bGxfbmFtZSA9IGNtc19qb2luX3BhdGgoJHJvb3RfcGF0aCwgdXRpbHM6OnVyaV8yX3BhdGgodXRpbHM6OmpvaW5fdXJpKCRmb2xkZXIsICRzdWJfZGlyLCAkZW50cnkpKSk7DQogICAgICANCiAgICAgICAgaWYgKCRkb3dubG9hZCAmJiAkc2VydmVfZm4gPT09ICRlbnRyeSkNCiAgICAgICAgew0KICAgICAgICAgIHV0aWxzOjpkb19kb3dubG9hZCgkZnVsbF9uYW1lLCBcdXJsZW5jb2RlKCRlbnRyeSksICRwcm1zKTsNCiAgICAgICAgfQ0KICANCiAgICAgICAgJGZpbGVfaW5mbyA9IFsNCiAgICAgICAgICAnbmFtZScgICAgICAgICAgID0+ICRlbnRyeSwNCiAgICAgICAgICAnZnVsbF9uYW1lJyAgICAgID0+ICRmdWxsX25hbWUsDQogICAgICAgICAgJ3R5cGUnICAgICAgICAgICA9PiBcZmlsZXR5cGUoJGZ1bGxfbmFtZSksDQogICAgICAgICAgJ2RhdGUnICAgICAgICAgICA9PiBcZmlsZW10aW1lKCRmdWxsX25hbWUpLA0KICAgICAgICAgICdzaXplJyAgICAgICAgICAgPT4gXHNwcmludGYoJyV1JywgXGZpbGVzaXplKCRmdWxsX25hbWUpKSwNCiAgICAgICAgICAnY2hpbGRyZW5fY291bnQnID0+IDANCiAgICAgICAgXTsNCiAgICAgIA0KICAgICAgICBpZiAoXGlzX2RpcigkZnVsbF9uYW1lKSAmJiAkcmVjdXJzaXZlKQ0KICAgICAgICB7DQogICAgICAgICAgJHN1Yl9kaXJfaW5mbyA9IHNlbGY6OmdldERpcmVjdG9yeUZpbGVzSW5mbygkZnVsbF9uYW1lLCAkcm9vdF9wYXRoLCAkZm9sZGVyLCB1dGlsczo6am9pbl91cmkoJHN1Yl9kaXIsICRlbnRyeSksICRzaG93X2hpZGRlbiwgJGRvd25sb2FkLCAkc2VydmVfZm4sICRwcm1zLCB0cnVlKTsNCiAgICAgICAgICAkZmlsZV9pbmZvWydjaGlsZHJlbiddID0gJHN1Yl9kaXJfaW5mb1snZmlsZV9uYW1lcyddOw0KICAgICAgICAgICRmaWxlX2luZm9bJ2NoaWxkcmVuX2NvdW50J10gPSBpc19hcnJheSgkc3ViX2Rpcl9pbmZvWydmaWxlX25hbWVzJ10pID8gY291bnQoJHN1Yl9kaXJfaW5mb1snZmlsZV9uYW1lcyddKSA6IDA7DQogICAgICAgIH0NCiAgICAgIA0KICAgICAgICAkZmlsZXNbXSA9ICRmaWxlX2luZm87DQogICAgICB9DQogICAgfQ0KICANCiAgICBjbG9zZWRpcigkaGFuZGxlKTsNCiAgDQogICAgcmV0dXJuICRmaWxlczsNCiAgfQ0KICANCiAgDQogIA0KICANCiAgDQp9DQoNCj8+]]></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[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNtYXJ0eUV4dCAoYykgMjAyMC0yMDIxIGJ5IENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uCiMgIEFuIGFkZC1vbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBwcm92aWRlIHVzZWZ1bCBmdW5jdGlvbnMKIyAgYW5kIGNvbW1vbmx5IHVzZWQgZ3VpIGNhcGFiaWxpdGllcyB0byBvdGhlciBtb2R1bGVzLgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEEgZm9yayBvZjoKIwojIE1vZHVsZTogQ0dTaW1wbGVTbWFydHkgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKaWYodmVyc2lvbl9jb21wYXJlKFBIUF9WRVJTSU9OLCAnNy40LjExJykgPCAwKQp7CiAgcmV0dXJuICdNaW5pbXVtIFBIUCB2ZXJzaW9uIG9mIDcuNC4xMSByZXF1aXJlZCc7Cn0KCj8+]]></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+R2V0TW9kdWxlUGF0aCgpLCAnbGliJywgJ2ludGVybmFsX3BsdWdpbnMnICk7CiAgICAKICAgICRzbWFydHktPmFkZFBsdWdpbnNEaXIoJHBsdWdpbnNfZGlyKTsKICAgIAogICAgcGFyZW50OjpfX2NvbnN0cnVjdCgpOwogIH0KICAKICBmdW5jdGlvbiBHZXROYW1lKCl7IHJldHVybiAnU21hcnR5RXh0JzsgfQogIAogIGZ1bmN0aW9uIEdldEZyaWVuZGx5TmFtZSgpeyByZXR1cm4gJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpOyB9CiAgCiAgZnVuY3Rpb24gR2V0VmVyc2lvbigpeyByZXR1cm4gJzEuMy4wJzsgfQogIAogIGZ1bmN0aW9uIE1pbmltdW1DTVNWZXJzaW9uKCl7IHJldHVybiAnMi4xLjQnOyB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIEdldEhlbHAoKQogIHsKICAgICRzbWFydHkgPSBjbXNtcygpLT5HZXRTbWFydHkoKTsKICAgICRzbWFydHktPmFzc2lnbignbW9kJywgJHRoaXMpOwogICAgJHNtYXJ0eS0+YXNzaWduKCdwYXJlbnRfbmFtZScsICR0aGlzLT5HZXROYW1lKCkpOwogICAgcmV0dXJuICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2hlbHAudHBsJyk7CiAgfQogIAogIGZ1bmN0aW9uIEdldEF1dGhvcigpeyByZXR1cm4gJ0pvIE1vcmcnOyB9CiAgCiAgZnVuY3Rpb24gR2V0QXV0aG9yRW1haWwoKXsgcmV0dXJuICdqb21vcmdAY21zbWFkZXNpbXBsZS5vcmcnOyB9CiAgCiAgZnVuY3Rpb24gR2V0Q2hhbmdlTG9nKCkKICB7CiAgICAkc21hcnR5ID0gY21zbXMoKS0+R2V0U21hcnR5KCk7CiAgICAkc21hcnR5LT5hc3NpZ24oJ21vZCcsICR0aGlzKTsKICAgIHJldHVybiAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdjaGFuZ2Vsb2cudHBsJyk7CiAgfQogIAogIGZ1bmN0aW9uIElzUGx1Z2luTW9kdWxlKCl7IHJldHVybiBGQUxTRTsgfQogIAogIGZ1bmN0aW9uIEdldERlcGVuZGVuY2llcygpIHsgcmV0dXJuIFsnQ01TTVNFeHQnID0+ICcxLjQuMCddOyB9CiAgCiAgZnVuY3Rpb24gR2V0QWRtaW5EZXNjcmlwdGlvbigpeyByZXR1cm4gJHRoaXMtPkxhbmcoJ21vZGRlc2NyaXB0aW9uJyk7IH0KICAKICBmdW5jdGlvbiBIYXNBZG1pbigpeyByZXR1cm4gRkFMU0U7IH0KICAKICBmdW5jdGlvbiBIYW5kbGVzRXZlbnRzKCl7IHJldHVybiBGQUxTRTsgfQogIAogIGZ1bmN0aW9uIEluc3RhbGxQb3N0TWVzc2FnZSgpeyByZXR1cm4gJHRoaXMtPkxhbmcoJ3Bvc3RpbnN0YWxsJyk7IH0KICAKICBmdW5jdGlvbiBVbmluc3RhbGxQb3N0TWVzc2FnZSgpeyByZXR1cm4gJHRoaXMtPkxhbmcoJ3Bvc3R1bmluc3RhbGwnKTsgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/templates</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/changelog.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHVsPg0KICA8bGk+MS4zIC0gTm92ZW1iZXIsIDIwMjMNCiAgICA8cD5BZGRlZCAyIG5ldyBwbHVnaW5zOjwvcD4NCiAgICA8dWw+DQogICAgICA8bGk+PHN0cm9uZz4mIzEyMzt0cmlnZ2VyXzQwNH08L3N0cm9uZz4gLSBUcmlnZ2VyIGEgNDA0IGVycm9yOzwvbGk+DQogICAgICA8bGk+PHN0cm9uZz4mIzEyMzt0cmlnZ2VyXzQwM308L3N0cm9uZz4gLSBUcmlnZ2VyIGEgNDAzIGVycm9yOzwvbGk+DQogICAgPC91bD4NCiAgICA8cD5kZXBlbmRlbmN5IG9uIENNU01TRXh0IGlzIG5vdyBvZmZpY2lhbCBhbmQgZW5mb3JjZWQ7PC9wPg0KDQogIDwvbGk+DQogIDxsaT4xLjIgLSBGZWJydWFyeSwgMjAyMw0KICAgIDxwPkFkZGVkIDMgbmV3IHBsdWdpbnM7PC9wPg0KICAgIDxwPkNsZWFuZWQgYW5kIHJlb3JnYW5pemVkIHRoZSBoZWxwIGRvY3VtZW50YXRpb247PC9wPg0KICAgIDxwPk5ldyAnY2xpY2sgdG8gY29weScgZnVuY3Rpb25hbGl0eSBvbiBjb2RlIHNuaXBwZXRzOzwvcD4NCiAgICA8cD5GaXhlcyBhbmQgYSBmZXcgbW9yZSBQSFAgOC4xIGNvbXBhdGliaWxpdHkgdXBkYXRlczs8L3A+DQogIDwvbGk+DQogIDxsaT4xLjAuMSAtIERlY2VtYmVyLCAyMDIyDQogICAgPHA+Rml4ZXMgYW5kIFBIUCA4LjEgY29tcGF0aWJpbGl0eSB1cGRhdGVzOzwvcD4NCiAgPC9saT4NCiAgPGxpPjEuMCAtIEZlYnJ1YXJ5LCAyMDIxDQogICAgPHA+SW5pdGlhbCByZWxlYXNlPC9wPg0KICA8L2xpPg0KPC91bD4=]]></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+IC0gRmV0Y2ggYW5kIHJldXNlIENNU01TIGNvbnRlbnQ7PC9saT4NCiAgPGxpPjxzdHJvbmc+JiMxMjM7ZmlsZXNfbGlzdH08L3N0cm9uZz4gLSBMaXN0IGZpbGVzIGFuZCBmb2xkZXJzOzwvbGk+DQogIDxsaT48c3Ryb25nPiYjMTIzO2NvbnRlbnRfcHJvdGVjdH08L3N0cm9uZz4gLSBQcm90ZWN0IGNvbnRlbnQgd2l0aCBhIHBhc3N3b3JkOzwvbGk+DQogIDxsaT48c3Ryb25nPiYjMTIzO3RyaWdnZXJfNDA0fTwvc3Ryb25nPiAtIFRyaWdnZXIgYSA0MDQgZXJyb3IgPHNwYW4gc3R5bGU9ImNvbG9yOmdyZWVuIj48c3Ryb25nPihuZXcpPC9zdHJvbmc+IDwvc3Bhbj47PC9saT4NCiAgPGxpPjxzdHJvbmc+JiMxMjM7dHJpZ2dlcl80MDN9PC9zdHJvbmc+IC0gVHJpZ2dlciBhIDQwMyBlcnJvciA8c3BhbiBzdHlsZT0iY29sb3I6Z3JlZW4iPjxzdHJvbmc+KG5ldyk8L3N0cm9uZz4gPC9zcGFuPjs8L2xpPg0KPC91bD4NCjxwPkFkZGl0aW9uYWxseSwgdGhlIG1vZHVsZSByZWdpc3RlcnMgYSBjbGFzcywgPHN0cm9uZz4mIzEyMztzbXh9PC9zdHJvbmc+IHdpdGggdGhlIGZvbGxvd2luZyBtZXRob2RzOjwvcD4NCjx1bCBjbGFzcz0iaGlnaGxpZ2h0LWxpc3QiPg0KICA8bGk+PHN0cm9uZz4mIzEyMztzbXg6OnNlbGZfdXJsKCl9PC9zdHJvbmc+IC0gUmV0dXJuIHRoZSBjdXJyZW50IFVSTDs8L2xpPg0KICA8bGk+PHN0cm9uZz4mIzEyMztzbXg6OmFuY2hvcl91cmwoLi4uKX08L3N0cm9uZz4gLSBVUkwgdG8gYW4gYW5jaG9yIG9uIHRoZSBzYW1lIHBhZ2U7PC9saT4NCiAgPGxpPjxzdHJvbmc+JiMxMjM7c214OjpzbXg6Om1vZHVsZV9pbnN0YWxsZWQoLi4uKX08L3N0cm9uZz4gLSBUZXN0IGlmIGEgbW9kdWxlIGlzIGluc3RhbGxlZDs8L2xpPg0KICA8bGk+PHN0cm9uZz4mIzEyMztzbXg6Om1vZHVsZV92ZXJzaW9uKC4uLil9PC9zdHJvbmc+IC0gUmV0dXJuIHRoZSB2ZXJzaW9uIG9mIGEgbW9kdWxlOzwvbGk+DQogIDxsaT48c3Ryb25nPiYjMTIzO3NteDo6Z2V0X3BhcmVudF9hbGlhcyguLi4pfTwvc3Ryb25nPiAtIFJldHVybnMgdGhlIGFsaWFzIG9mIHBhZ2UncyBwYXJlbnQ7PC9saT4NCiAgPGxpPjxzdHJvbmc+JiMxMjM7c214Ojppc19jaGlsZF9vZiguLi4pfTwvc3Ryb25nPiAtIFRlc3RzIHdoZXRoZXIgaXMgYSBjaGlsZCBvZiB0aGUgc3BlY2lmaWVkIHBhcmVudCBhbGlhczs8L2xpPg0KICA8bGk+PHN0cm9uZz4mIzEyMztzbXg6OmdldF9yb290X2FsaWFzKC4uLil9PC9zdHJvbmc+IC0gUmV0dXJucyB0aGUgYWxpYXMgb2YgYSBwYWdlJ3Mgcm9vdCBwYXJlbnQ7PC9saT4NCiAgPGxpPjxzdHJvbmc+JiMxMjM7c214OjpnZXRfcGFnZV90aXRsZSguLi4pfTwvc3Ryb25nPiAtIFJldHVybnMgdGhlIHRpdGxlIG9mIGEgcGFnZTs8L2xpPg0KICA8bGk+PHN0cm9uZz4mIzEyMztzbXg6OmdldF9wYWdlX21lbnV0ZXh0KC4uLil9PC9zdHJvbmc+IC0gUmV0dXJucyB0aGUgbWVudSB0ZXh0IG9mIGEgcGFnZTs8L2xpPg0KICA8bGk+PHN0cm9uZz4mIzEyMztzbXg6OmdldF9wYWdlX3R5cGUoLi4uKX08L3N0cm9uZz4gLSBSZXR1cm5zIHRoZSBjb250ZW50IHR5cGUgYnkgYWxpYXM7PC9saT4NCiAgPGxpPjxzdHJvbmc+JiMxMjM7c214OjpoYXNfY2hpbGRyZW4oLi4uKX08L3N0cm9uZz4gLSBUZXN0IGlmIGEgcGFnZSBoYXMgY2hpbGRyZW47PC9saT4NCiAgPGxpPjxzdHJvbmc+JiMxMjM7c214OjpnZXRfY2hpbGRyZW4oLi4uKX08L3N0cm9uZz4gLSBHZXQgaW5mb3JtYXRpb24gYWJvdXQgYSBwYWdlJ3MgY2hpbGRyZW47PC9saT4NCiAgPGxpPjxzdHJvbmc+JiMxMjM7c214OjpnZXRfcGFnZV9jb250ZW50KC4uLil9PC9zdHJvbmc+IC0gUmV0dXJucyB0aGUgdGV4dCBvZiBhIGNvbnRlbnQgYmxvY2sgb2YgYW5vdGhlciBwYWdlOzwvbGk+DQogIDxsaT48c3Ryb25nPiYjMTIzO3NteDo6Z2V0X3NpYmxpbmcoLi4uKX08L3N0cm9uZz4gLSBSZXR1cm5zIHRoZSBhbGlhcyBvZiB0aGUgbmV4dCBvciBwcmV2aW91cyBzaWJsaW5nOzwvbGk+DQogIDxsaT48c3Ryb25nPiYjMTIzO3NteDo6Z2V0X3BhcmFsbGVsX3BhZ2UoLi4uKX08L3N0cm9uZz4gLSBHZXQgdGhlIGFsaWFzIG9mIGEgcGFyYWxsZWwgcGFnZSBpbiB0aGUgcGFnZSBzdHJ1Y3R1cmU7PC9saT4NCiAgPGxpPjxzdHJvbmc+JiMxMjM7c214OjpnZXRfcGFyYWxsZWxfdXJsKC4uLil9PC9zdHJvbmc+IC0gR2V0IHRoZSBVUkwgb2YgYSBwYXJhbGxlbCBwYWdlIGluIHRoZSBwYWdlIHN0cnVjdHVyZTs8L2xpPg0KICA8bGk+PHN0cm9uZz4mIzEyMztzbXg6OmdldF9maWxlX2xpc3RpbmcoLi4uKX08L3N0cm9uZz4gLSBSZXR1cm4gYSBsaXN0IG9mIGZpbGVzIGluIGEgZGlyZWN0b3J5IDs8L2xpPg0KPC91bD4NCg0KPHA+UGxlYXNlIHJlZmVyIHRvIHRoZSB0YWJzIGRlc2NyaWJpbmcgZWFjaCBwbHVnaW4gYW5kIGZ1bmN0aW9uIGZvciBoZWxwIG9uIGhvdyB0byB1c2UgaXQuPC9wPg==]]></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+DQogIHsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfQ0KICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPg0KICAgIDxoMyBjbGFzcz0iYWwiPiYjMTIzO21vZF9hY3Rpb25fbGlua30gPHNwYW4gY2xhc3M9InNtYWxsIj5DcmVhdGUgYSBsaW5rIHRvIGEgbW9kdWxlIGFjdGlvbjwvc3Bhbj48L2gzPg0KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+DQogICAgICA8cD5BIHNtYXJ0eSBwbHVnaW4gdGhhdCBjYW4gY3JlYXRlIGEgbGluayB0byBhIG1vZHVsZSBhY3Rpb24uPC9wPg0KICAgICAgPHA+UGFyYW1ldGVyczo8L3A+DQogICAgICA8dWw+DQogICAgICAgIDxsaT48c3Ryb25nPm1vZHVsZTwvc3Ryb25nPiAtIFRoZSBtb2R1bGUgdG8gY3JlYXRlIGEgbGluayB0by4gVGhpcyBhcmd1bWVudCBpcyBvcHRpb25hbCwgdGhlIHN5c3RlbSB3aWxsIGF0dGVtcHQgdG8gZGV0ZWN0IHRoZSBjdXJyZW50IG1vZHVsZSBuYW1lIChpZiB3aXRoaW4gYSBtb2R1bGUgYWN0aW9uKTwvbGk+DQogICAgICAgIDxsaT48c3Ryb25nPmFjdGlvbjwvc3Ryb25nPiAoZGVmYXVsdCkgLSBUaGUgYWN0aW9uIHRvIGNhbGwgd2l0aGluIHRoZSBtb2R1bGU8L2xpPg0KICAgICAgICA8bGk+PHN0cm9uZz50ZXh0PC9zdHJvbmc+IC0gVGhlIHRleHQgdG8gcHV0IGluIHRoZSBsaW5rPC9saT4NCiAgICAgICAgPGxpPjxzdHJvbmc+cGFnZTwvc3Ryb25nPiAtIFNwZWNpZnkgdGhlIGRlc3RpbmF0aW9uIHBhZ2U8L2xpPg0KICAgICAgICA8bGk+PHN0cm9uZz51cmxvbmx5PC9zdHJvbmc+IC0gSW5zdGVhZCBvZiBnZW5lcmF0aW5nIGEgbGluaywgZ2VuZXJhdGUganVzdCB0aGUgdXJsPC9saT4NCiAgICAgICAgPGxpPjxzdHJvbmc+anNmcmllbmRseTwvc3Ryb25nPiB8IDxzdHJvbmc+Zm9yanM8L3N0cm9uZz4gLSBUdXJucyBvbiB0aGUgdXJsb25seSBwYXJhbWV0ZXIsIGFuZCBpbmRpY2F0ZXMgdGhhdCBqYXZhc2NyaXB0IGZyaWVuZGx5IHVybHMgYXJlIG91dHB1dC48L2xpPg0KICAgICAgICA8bGk+PHN0cm9uZz5mb3JhamF4PC9zdHJvbmc+IC0gVHVybnMgb24gdGhlIGpzZnJpZW5kbHkgcGFyYW1ldGVyIChhbmQgdGhlIHVybG9ubHkgcGFyYW1ldGVyKSwgYW5kIGFsc28gYXBwZW5kcyBzaG93dGVtcGxhdGU9ZmFsc2UgdG8gdGhlIFVSTCBvdXRwdXQgZm9yIEFKQVggcmVxdWVzdHM8L2xpPg0KICAgICAgICA8bGk+PHN0cm9uZz5jb25mbWVzc2FnZTwvc3Ryb25nPiAtIEEgY29uZmlybWF0aW9uIG1lc3NhZ2UgdG8gZGlzcGxheSB3aGVuIHRoZSBsaW5rIGlzIGNsaWNrZWQuPC9saT4NCiAgICAgICAgPGxpPjxzdHJvbmc+aW1hZ2U8L3N0cm9uZz4gLSBBbiBpbWFnZSB0byB1c2Ugb24gdGhlIGxpbms8L2xpPg0KICAgICAgICA8bGk+PHN0cm9uZz5pbWFnZW9ubHk8L3N0cm9uZz4gLSBJZiBhbiBpbWFnZSBpcyBzcGVjaWZpZWQsIGNyZWF0ZSBhIGxpbmsgb25seSBjb25zaXN0aW5nIG9mIHRoZSBpbWFnZS4gVGhlIHRleHQgd2lsbCBiZSB1c2VkIGZvciB0aGUgdGl0bGUgYXR0cmlidXRlPC9saT4NCiAgICAgICAgPGxpPjxzdHJvbmc+YXNzaWduPC9zdHJvbmc+IC0gQXNzaWduIHRoZSBvdXRwdXQgb2YgdGhlIHBsdWdpbiB0byB0aGUgbmFtZWQgc21hcnR5IHZhcmlhYmxlLjwvbGk+DQogICAgICA8L3VsPg0KDQogICAgICA8cD5Bbnkgb3RoZXIgYXJndW1lbnRzIHRvIHRoZSBzbWFydHkgcGx1Z2luIHdpbGwgYmUgYWRkZWQgdG8gdGhlIFVSTCBnZW5lcmF0ZWQuPC9wPg0KICAgICAgPHA+RXhhbXBsZTo8L3A+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiYjMTIzO21vZF9hY3Rpb25fbGluayBtb2R1bGU9J05ld3MnIGFjdGlvbj0nZmVzdWJtaXQnIHRleHQ9J1N1Ym1pdCBhIE5ldyBOZXdzIEFydGljbGUnfTwvcHJlPg0KICAgIDwvZGl2Pg0KICA8L2xpPg0KICB7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKn0NCiAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4NCiAgICA8aDMgY2xhc3M9ImFsIj4mIzEyMzt4dF9hbmNob3JfbGlua30gPHNwYW4gY2xhc3M9InNtYWxsIj5HZW5lcmF0ZSBhIGxpbmsgdG8gYW4gYW5jaG9yIG9uIHRoZSBzYW1lIHBhZ2U8L3NwYW4+PC9oMz4NCiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPg0KICAgICAgPHA+QSBzbWFydHkgcGx1Z2luIHRvIGdlbmVyYXRlIGEgbGluayB0byBhbiBhbmNob3IgdGhhdCBpcyBvbiB0aGUgc2FtZSBwYWdlLjwvcD4NCiAgICAgIDxwPlBhcmFtZXRlcnM6PC9wPg0KICAgICAgPHVsPg0KICAgICAgICA8bGk+PHN0cm9uZz5uPC9zdHJvbmc+IHwgPHN0cm9uZz5uYW1lPC9zdHJvbmc+IC0gPGVtPihzdHJpbmcpPC9lbT4gVGhlIG5hbWUgb2YgdGhlIGFuY2hvciB0byBsaW5rIHRvLjwvbGk+DQogICAgICAgIDxsaT48c3Ryb25nPnRleHQ8L3N0cm9uZz4gLSA8ZW0+KHN0cmluZz48L2VtPiBUaGUgdGV4dCBwb3J0aW9uIG9mIHRoZSBsaW5rLiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgYW5jaG9yIG5hbWUgd2lsbCBiZSB1c2VkLjwvbGk+DQogICAgICAgIDxsaT48c3Ryb25nPnVybG9ubHk8L3N0cm9uZz4gLSA8ZW0+KGJvb2wpPC9lbT4gT3B0aW9uYWxseSBvbmx5IGdlbmVyYXRlIHRoZSBVUkwgcG9ydGlvbiBvZiB0aGUgbGluay4gc2VlIHNteDo6YW5jaG9yX3VybCgpPC9saT4NCiAgICAgICAgPGxpPjxzdHJvbmc+YXNzaWduPC9zdHJvbmc+IC0gPGVtPihzdHJpbmc+PC9lbT4gT3B0aW9uYWxseSBhc3NpZ24gdGhlIG91dHB1dCBvZiB0aGUgcGx1Z2luIHRvIHRoZSBuYW1lZCBzbWFydHkgdmFyaWFibGUuPC9saT4NCiAgICAgIDwvdWw+DQoNCiAgICAgIDxwPkFueSBvdGhlciBhcmd1bWVudHMgdG8gdGhlIHNtYXJ0eSBwbHVnaW4gd2lsbCBiZSBhZGRlZCBhcyBhdHRyaWJ1dGVzIHRvIHRoZSBsaW5rIGdlbmVyYXRlZC48L3A+DQogICAgICA8cD5FeGFtcGxlOjwvcD4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjM7eHRfYW5jaG9yX2xpbmsgbmFtZT1ib3R0b20gY2xhc3M9ImFuY2hvcl9jbGFzcyIgaWQ9ImFuY2hvcl9pZCJ9PC9wcmU+DQogICAgPC9kaXY+DQogIDwvbGk+DQogIHsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfQ0KICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPg0KICAgIDxoMyBjbGFzcz0iYWwiPiYjMTIzO3Nlc3NfcHV0fSA8c3BhbiBjbGFzcz0ic21hbGwiPlN0b3JlIGRhdGEgaW4gdGhlIHVzZXIgc2Vzc2lvbjwvc3Bhbj48L2gzPg0KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+DQogICAgICA8cD5BIHNtYXJ0eSBwbHVnaW4gdGhhdCBjYW4gc3RvcmUgZGF0YSBpbiB0aGUgdXNlciBzZXNzaW9uLiBUaGlzIGRhdGEgaXMgdGhlbiBhY2Nlc3NpYmxlIHZpYSB0aGUgJHNtYXJ0eS5zZXNzaW9uIGFycmF5IGluIHN1YnNlcXVlbnQgcGFnZXMuPC9wPg0KICAgICAgPHA+UGFyYW1ldGVyczo8L3A+DQogICAgICA8dWw+DQogICAgICAgIDxsaT48c3Ryb25nPnZhcjwvc3Ryb25nPiAtIFRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSB0byBjcmVhdGUgaW4gdGhlIHNlc3Npb24uPC9saT4NCiAgICAgICAgPGxpPjxzdHJvbmc+dmFsdWU8L3N0cm9uZz4gLSBUaGUgZGVzaXJlZCB2YWx1ZSBvZiB0aGUgdmFyaWFibGUuPC9saT4NCiAgICAgIDwvdWw+DQogICAgICA8cD5FeGFtcGxlOjwvcD4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjM7c2Vzc19wdXQgdmFyPSd0ZXN0JyB2YWx1ZT0nYmxhaCd9PC9wcmU+DQogICAgPC9kaXY+DQogIDwvbGk+DQogIHsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfQ0KICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPg0KICAgIDxoMyBjbGFzcz0iYWwiPiYjMTIzO3Nlc3NfZXJhc2V9IDxzcGFuIGNsYXNzPSJzbWFsbCI+RXJhc2UgZGF0YSBmcm9tIHRoZSB1c2VyIHNlc3Npb248L3NwYW4+PC9oMz4NCiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPg0KICAgICAgPHA+QSBzbWFydHkgcGx1Z2luIHRoYXQgY2FuIGVyYXNlIGRhdGEgZnJvbSB0aGUgdXNlciBzZXNzaW9uLjwvcD4NCiAgICAgIDxwPlBhcmFtZXRlcnM6PC9wPg0KICAgICAgPHVsPg0KICAgICAgICA8bGk+PHN0cm9uZz52YXI8L3N0cm9uZz4gLSBUaGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgdG8gZXJhc2UgaW4gdGhlIHNlc3Npb24uPC9saT4NCiAgICAgIDwvdWw+DQogICAgICA8cD5FeGFtcGxlOjwvcD4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjM7c2Vzc19lcmFzZSB2YXI9J3Rlc3QnfTwvcHJlPg0KICAgIDwvZGl2Pg0KICA8L2xpPg0KICB7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKn0NCiAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4NCiAgICA8aDMgY2xhc3M9ImFsIj4mIzEyMzt4dF9yZXBlYXR9IDxzcGFuIGNsYXNzPSJzbWFsbCI+UmVwZWF0aW5nIHRleHQ8L3NwYW4+PC9oMz4NCiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPg0KICAgICAgPHA+QW5vdGhlciBzbWFydHkgcGx1Z2luIHRoYXQgd2lsbCBhbGxvdyByZXBlYXRpbmcgdGV4dDwvcD4NCiAgICAgIDxwPlBhcmFtZXRlcnM6PC9wPg0KICAgICAgPHVsPg0KICAgICAgICA8bGk+PHN0cm9uZz50ZXh0PC9zdHJvbmc+IC0gVGhlIHRleHQgdG8gYmUgcmVwZWF0ZWQ8L2xpPg0KICAgICAgICA8bGk+PHN0cm9uZz5jb3VudDwvc3Ryb25nPiAtIFRoZSBudW1iZXIgb2YgdGltZXMgaXQgc2hvdWxkIGJlIHJlcGVhdGVkPC9saT4NCiAgICAgICAgPGxpPjxzdHJvbmc+YXNzaWduPC9zdHJvbmc+IC0gQXNzaWduIHRoZSBvdXRwdXQgdG8gdGhlIHNwZWNpZmllZCBzbWFydHkgdmFyaWFibGU8L2xpPg0KICAgICAgPC91bD4NCg0KICAgICAgPHA+RXhhbXBsZTo8L3A+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiYjMTIzO3h0X3JlcGVhdCB0ZXh0PSd0aGlzJyBjb3VudD0nNSd9PC9wcmU+DQogICAgPC9kaXY+DQogIDwvbGk+DQogIHsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfQ0KICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPg0KICAgIDxoMyBjbGFzcz0iYWwiPiYjMTIzO2NvbnRlbnRfZmV0Y2h9IDxzcGFuIGNsYXNzPSJzbWFsbCI+RmV0Y2ggYW5kIHJldXNlIENNU01TIGNvbnRlbnQ8L3NwYW4+PC9oMz4NCiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPg0KICAgICAgPHA+QSBmb3JrIG9mIDxzdHJvbmc+PGVtPiYjMTIzO2NvbnRlbnRfZHVtcH08L2VtPjwvc3Ryb25nPiBmcm9tIE5pbHMgSGFhY2suIFN0aWxsIGEgd29yayBpbiBwcm9ncmVzcywgc28ga2VlcCBjaGVja2luZyB0aGVzZSBkb2NzIGZvciBjaGFuZ2VzIGluIHBhcmFtZXRlcnMgYW5kIGJlaGF2aW91ci48L3A+DQogICAgICA8cD5BIDxlbT4nU3dpc3MgQXJteSBLbmlmZSc8L2VtPiBmb3IgQ01TTVMgY29udGVudCBmZXRjaGluZywgZ2l2aW5nIHlvdSB0aGUgYWJpbGl0eSB0byBmZXRjaCBjb250ZW50IGFuZCBpbnNlcnQgaXQgaW50byBhIHNpbmdsZSBwYWdlLiBJdCBvZmZlcnMgYSB2YXJpZXR5IG9mIGluZGVwZW5kZW50IHBhcmFtZXRlcnMgdGhhbiBjYW4gYmUgY29tYmluZWQgdG8gY2F0ZXIgZm9yIGEgbG90IG9mIHlvdXIgc2l0ZSdzIGludGVybmFsIGNvbnRlbnQgZGlzdHJpYnV0aW9uIG5lZWRzLjwvcD4NCiAgICAgIDxwPkp1c3QgYXR0YWNoIHNvbWUgcGFyYW1ldGVycyBhbmQgbGltaXQvb3JnYW5pemUgdGhlIG91dHB1dCB0byB5b3VyIGRhdGEgcmVxdWlyZW1lbnRzLiBUaGUgU21hcnR5IG91dHB1dCBhbGxvd3MgeW91IHRvIGZyZWVseSBkZXNpZ24gdGhlIHJlc3VsdHMgaW4geW91ciB0ZW1wbGF0ZSBvciBjb250ZW50IGJsb2NrIChmcm9tIHRoZSByZWd1bGFyIGVkaXRvcnMgdmlldyAtIHRob3VnaCBpdCBpcyByZWNvbW1lbmRlZCB0byBkbyBpdCBpbiB0aGUgdGVtcGxhdGUpLiBXaXRoIFNtYXJ0eSwgeW91IGNhbiBldmVuIGNvbnRyb2wgdGhlIG91dHB1dCBieSBsaW1pdGluZyBpdCB0byBzcGVjaWZpYyB2YWx1ZXMgKGUuZy4gb25seSB1c2VyICdKb2huIERvZScpIG9yIHVzZSBtb2RpZmllcnMgdG8gZnVydGhlciBtYW5pcHVsYXRlIHRoZSBjb250ZW50LjwvcD4NCg0KICAgICAgPGg0PlBhcmFtZXRlcnM8L2g0Pg0KICAgICAgPHA+Rm9sbG93aW5nIGEgZGVzY3JpcHRpb24gb2YgdGhlIGF2YWlsYWJsZSBwYXJhbWV0ZXJzLjwvcD4NCg0KICAgICAgPHA+UGFyYW1ldGVyczo8L3A+DQogICAgICA8dWw+DQogICAgICAgIDxsaT48c3Ryb25nPmJsb2NrX25hbWU8L3N0cm9uZz4gLSBUaGUgbmFtZSBvZiB0aGUgY29udGVudCBibG9jayB0byBmZXRjaCBmcm9tIChkZWZhdWx0IDxzdHJvbmc+Y29udGVudF9lbjwvc3Ryb25nPik7PC9saT4NCiAgICAgICAgPGxpPjxzdHJvbmc+c3RhcnRfaWQ8L3N0cm9uZz4gLSBEZWZpbmVzIGEgc3RhcnRpbmcgcG9pbnQgZm9yIHRoZSBjb250ZW50IGZldGNoaW5nIChkZWZhdWx0IDxzdHJvbmc+LTE8L3N0cm9uZz4gbWVhbmluZyBhbGwgbWF0Y2hpbmcgY29udGVudCk7PC9saT4NCiAgICAgICAgPGxpPjxzdHJvbmc+bGltaXRfc3RhcnQ8L3N0cm9uZz4gLSBUaGUgZmlyc3QgbiBpdGVtcyB0byBza2lwIChkZWZhdWx0IDxzdHJvbmc+MDwvc3Ryb25nPik7PC9saT4NCiAgICAgICAgPGxpPjxzdHJvbmc+bGltaXRfY291bnQ8L3N0cm9uZz4gLSBNYXhpbXVtIG51bWJlciBvZiBwYWdlcyB0byBmZXRjaCAoZGVmYXVsdCA8c3Ryb25nPjEwMDA8L3N0cm9uZz4pOzwvbGk+DQogICAgICAgIDxsaT48c3Ryb25nPnBhZ2U8L3N0cm9uZz4gLSBHZW5lcmF0ZXMgYSBzaW5nbGUgcGFnZSB2aWV3IG91dCBvZiB0aGUgcmVzdWx0cyBvZiByZXN0IG9mIHRoZSBwYXJhbWV0ZXJzLCBhbGxvd2luZyBmb3Igc29tZSBmb3JtIG9mIHBhZ2luYXRpb24gKGRlZmF1bHQgPHN0cm9uZz4wPC9zdHJvbmc+KTs8L2xpPg0KICAgICAgICA8bGk+DQogICAgICAgICAgPHN0cm9uZz5hY3RpdmU8L3N0cm9uZz4gLSBmaWx0ZXIgYnkgcGFnZSBzdGF0ZXM7IGFjY2VwdGVkIHZhbHVlcyBhcmU6DQogICAgICAgICAgPHVsPg0KICAgICAgICAgICAgPGxpPjxzdHJvbmc+Zm9yY2U8L3N0cm9uZz4gLSBzaG93IGV2ZXJ5dGhpbmcgcmVnYXJkbGVzcyBvZiB0aGVpciBzdGF0ZTs8L2xpPg0KICAgICAgICAgICAgPGxpPjxzdHJvbmc+YWN0aXZlPC9zdHJvbmc+IC0gc2hvdyBvbmx5IGFjdGl2ZSBwYWdlcyAoZGVmYXVsdCk7PC9saT4NCiAgICAgICAgICAgIDxsaT48c3Ryb25nPmluYWN0aXZlPC9zdHJvbmc+IC0gc2hvdyBvbmx5IGluYWN0aXZlIHBhZ2VzOzwvbGk+DQogICAgICAgICAgPC91bD4NCiAgICAgICAgPC9saT4NCiAgICAgICAgPGxpPg0KICAgICAgICAgIDxzdHJvbmc+c2hvd19pbl9tZW51PC9zdHJvbmc+IHwgPHN0cm9uZz5zaG93bl9pbl9tZW51PC9zdHJvbmc+IC0gZmlsdGVyIGJ5IG1lbnUgdmlzaWJpbGl0eTsgYWNjZXB0ZWQgdmFsdWVzIGFyZToNCiAgICAgICAgICA8dWw+DQogICAgICAgICAgICA8bGk+PHN0cm9uZz5mb3JjZTwvc3Ryb25nPiAtIHNob3cgZXZlcnl0aGluZyByZWdhcmRsZXNzIG9mIHRoZWlyIHZpc2liaWxpdHkgaW4gYSBtZW51OzwvbGk+DQogICAgICAgICAgICA8bGk+PHN0cm9uZz5zaG93PC9zdHJvbmc+IC0gc2hvdyBvbmx5IHBhZ2VzIHNldCB0byBiZSB2aXNpYmxlIGluIGEgbWVudSAoZGVmYXVsdCk7PC9saT4NCiAgICAgICAgICAgIDxsaT48c3Ryb25nPmhpZGRlbjwvc3Ryb25nPiAtIHNob3cgb25seSBwYWdlcyBzZXQgbm90IHRvIGJlIHZpc2libGUgaW4gYSBtZW51OzwvbGk+DQogICAgICAgICAgPC91bD4NCiAgICAgICAgPC9saT4NCiAgICAgICAgPGxpPjxzdHJvbmc+ZmlsdGVyPC9zdHJvbmc+IC0gRmlsdGVyIHJlc3VsdHMgYnkgd29yZHMgb3IgcGhyYXNlcyAoc2VlIGV4dGVuZGVkIGhlbHAgYW5kIGV4YW1wbGVzIGJlbG93KTs8L2xpPg0KICAgICAgICA8bGk+PHN0cm9uZz5wcmVmaXg8L3N0cm9uZz4gLSBGaWx0ZXIgcmVzdWx0cyBieSBhbGlhcyBwcmVmaXgoZXMpIChzZWUgZXh0ZW5kZWQgaGVscCBhbmQgZXhhbXBsZXMgYmVsb3cpOzwvbGk+DQogICAgICAgIDxsaT4NCiAgICAgICAgICA8c3Ryb25nPnByZWZpeF9tb2RlPC9zdHJvbmc+IC0gQ2hhbmdlcyB0aGUgPHN0cm9uZz5wcmVmaXg8L3N0cm9uZz4gZmlsdGVyaW5nIGJlaGF2aW91cjsgYWNjZXB0ZWQgdmFsdWVzIGFyZToNCiAgICAgICAgICA8dWw+DQogICAgICAgICAgICA8bGk+PHN0cm9uZz5mb3JjZTwvc3Ryb25nPiAtIHNob3cgb25seSBwYWdlcyB3aXRoIHRoZSBwcmVmaXgoZXMpIGxpc3RlZDs8L2xpPg0KICAgICAgICAgICAgPGxpPjxzdHJvbmc+bmV1dHJhbDwvc3Ryb25nPiAtIGlnbm9yZXMgcHJlZml4KGVzKSAoZGVmYXVsdCk7PC9saT4geyogYWN0dWFsbHkgZG9lc250IG1ha2Ugc2Vuc2UuLi4gKEpNKSAqfQ0KICAgICAgICAgICAgPGxpPjxzdHJvbmc+aGlkZTwvc3Ryb25nPiAtIHNob3cgb25seSBwYWdlcyB3aXRob3V0IHRoZSBwcmVmaXgoZXMpIGxpc3RlZDs8L2xpPg0KICAgICAgICAgIDwvdWw+DQogICAgICAgIDwvbGk+DQogICAgICAgIDxsaT4NCiAgICAgICAgICA8c3Ryb25nPmRlcHRoPC9zdHJvbmc+IC0gRmlsdGVyIHJlc3VsdHMgYnkgaGllcmFyY2h5IHN0YXJ0IHBvaW50IGFuZCBudW1iZXIgb2YgbGV2ZWxzLiBJdCB0YWtlcyB0d28gaW50ZWdlciB2YWx1ZXMgc2VwZXJhdGVkIGJ5IGNvbW1hIHN1Y2ggYXMgJy0xLDMnLCAnLTEnIGJlaW5nIHRoZSBzdGFydGluZyBwb2ludCwgaW4gdGhpcyBjYXNlIHRoZSByb290IGFuZCAnMycgdGhlIG51bWJlciBvZiBsZXZlbHMgKG9yDQogICAgICAgICAgaG93IGRlZXApIHRvIGZldGNoIChzZWUgZXh0ZW5kZWQgaGVscCBhbmQgZXhhbXBsZXMgYmVsb3cpLiBJZiB1c2VkLCBib3RoIHZhbHVlcyBhcmUgbWFuZGF0b3J5Ow0KICAgICAgICA8L2xpPg0KICAgICAgICA8bGk+PHN0cm9uZz5leGNsdWRlPC9zdHJvbmc+IC0gRXhjbHVkZSBjb250ZW50IGJ5IGlkLCBhY2NlcHRpbmcgY29tbWEgc2VwZXJhdGVkIGxpc3RzIG9mIGludGVnZXJzIGlmIG5lZWRlZDs8L2xpPg0KICAgICAgICA8bGk+PHN0cm9uZz50aGlzX29ubHk8L3N0cm9uZz4gLSBGZXRjaCBhIHBhcnRpY3VsYXIgY29udGVudCBmcm9tIHBhZ2VzIGJ5IGlkOzwvbGk+DQogICAgICAgIDxsaT48c3Ryb25nPnRoZXNlX29ubHk8L3N0cm9uZz4gLSBGZXRjaCBhIHBhcnRpY3VsYXIgc2V0IG9mIGNvbnRlbnQgZnJvbSBwYWdlcyBieSBhIGNvbW1hIHNlcGVyYXRlZCBsaXN0cyBvZiBpbnRlZ2VycyBvZiBpZHM7PC9saT4NCiAgICAgICAgPGxpPjxzdHJvbmc+cGFyZW50czwvc3Ryb25nPiAtIEEgYm9vbGVhbiB0eXBlIHNldHRpbmcgZGVmaW5pbmcgd2hldGhlciB0byBpbmNsdWRlIGEgbGltaXRlZCBzZXQgb2YgcHJvcGVydGllcyBvZiB0aGUgcGFyZW50cyBvZiBlYWNoIHJlc3VsdCwgZGVmYXVsdHMgdG8gZmFsc2UgKHNlZSBleHRlbmRlZCBoZWxwIGFuZCBleGFtcGxlcyBiZWxvdyk7PC9saT4NCiAgICAgICAgPGxpPg0KICAgICAgICAgIDxzdHJvbmc+dXNlcnM8L3N0cm9uZz4gLSBBIGJvb2xlYW4gdHlwZSBzZXR0aW5nIGRlZmluaW5nIHdoZXRoZXIgdG8gZXhwYW5kIHVzZXIgZGF0YSByZWxhdGVkIHRvIHRoZSBjb250ZW50IHN1Y2ggYXMgPHN0cm9uZz5jcmVhdGVkIGJ5PC9zdHJvbmc+IGFuZCA8c3Ryb25nPm1vZGlmaWVkIGJ5PC9zdHJvbmc+IHdoaWNoIGlmIHRydWUgd2lsbCByZXR1cm4gPHN0cm9uZz51c2VybmFtZTwvc3Ryb25nPiwNCiAgICAgICAgICA8c3Ryb25nPmZpcnN0bmFtZTwvc3Ryb25nPiBhbmQgPHN0cm9uZz5sYXN0bmFtZTwvc3Ryb25nPiBpbiBhZGRpdGlvbiB0byB0aGUgZGVmYXVsdCAoaWYgZmFsc2UpIDxzdHJvbmc+dWlkPC9zdHJvbmc+IChzZWUgZXh0ZW5kZWQgaGVscCBhbmQgZXhhbXBsZXMgYmVsb3cpOw0KICAgICAgICA8L2xpPg0KICAgICAgICA8bGk+DQogICAgICAgICAgPHN0cm9uZz5leHRlbnNpb25zPC9zdHJvbmc+IC0gQSBjb21tYSBzZXBlcmF0ZWQgbGlzdCBvZiBjb250ZW50X2Jsb2NrcyB0byBkZXRlcm1pbmUgaWYgdGhleSBleGlzdCBhbmQgaGF2ZSBjb250ZW50OyBpdCB3aWxsIHNob3cgaW4gdGhlIHJlc3VsdHMgbGlzdCBhcyBhbiBhZGRpdGlvbmFsIHByb3BlcnR5IGZvciBlYWNoIHJlc3VsdCB3aXRoIGEgdmFsdWUgb2YgJzEnIG9yICcwJyBkZXBlbmRpbmcgb24NCiAgICAgICAgICB3aGV0aGVyIHRoZSBjb250ZW50IGJsb2NrIGhhcyBiZWVuIGZvdW5kIGFuZCBpcyBub3QgZW1wdHkgKGRlZmF1bHQgPHN0cm9uZz5mYWxzZTwvc3Ryb25nPikgKHNlZSBleHRlbmRlZCBoZWxwIGFuZCBleGFtcGxlcyBiZWxvdyk7DQogICAgICAgIDwvbGk+DQogICAgICAgIDxsaT48c3Ryb25nPmRhdGVmb3JtYXQ8L3N0cm9uZz4gLSBGb3JtYXQgdGhlIGRhdGUgb3V0cHV0IGluIGEgUEhQIHN0cmZ0aW1lIGZvcm1hdCAoZGVmYXVsdCA8c3Ryb25nPiclQSwgJWUgJUIgJVknPC9zdHJvbmc+KS4gTm90ZTogZGVwcmVjYXRlZCBwZW5kaW5nIHNvbWUgbW9yZSBjaGFuZ2VzIHRvIHRoZSBDTVNNUyBjb3JlIHRvIGJlIFBIUCA4LjArIGNvbXBhdGlibGU7PC9saT4NCiAgICAgICAgPGxpPjxzdHJvbmc+Y2Rsb2NhbGU8L3N0cm9uZz4gLSBTcGVjaWZ5IGEgc3BlY2lmaWMgbG9jYWxlIGZvciB0aGUgb3V0cHV0IG90aGVyd2lzZSBzeXN0ZW0gZGVmYXVsdCBpcyB1c2VkOzwvbGk+DQogICAgICAgIDxsaT48c3Ryb25nPmxvY2FsZTwvc3Ryb25nPiAtIFNwZWNpZnkgYSBzcGVjaWZpYyBsb2NhbGUgdXNlZCBmb3IgdGhlIHRpbWVzdGFtcCBvdGhlcndpc2Ugc3lzdGVtIGRlZmF1bHQgaXMgdXNlZDs8L2xpPg0KICAgICAgICA8bGk+DQogICAgICAgICAgPHN0cm9uZz5kb19zbWFydHk8L3N0cm9uZz4gLSBDaGFuZ2VzIHRoZSBTbWFydHkgcGFyc2luZyBiZWhhdmlvdXI7IGFjY2VwdGVkIHZhbHVlcyBhcmU6DQogICAgICAgICAgPHVsPg0KICAgICAgICAgICAgPGxpPjxzdHJvbmc+Y29tcGlsZTwvc3Ryb25nPiAtIHBhcnNlcyB0aGUgY29udGVudCB0aHJvdWdoIFNtYXJ0eSBiZWZvcmUgb3V0cHV0LiBOb3RlOiBjYW4gYmUgcmVjdXJzaXZlIGFuZCByZXN1bHQgaW4gZW5kbGVzcyBsb29wczs8L2xpPg0KICAgICAgICAgICAgPGxpPjxzdHJvbmc+bmV1dHJhbDwvc3Ryb25nPiAtIHBhc3NlcyB0aHJvdWdoIHdpdGhvdXQgcGFyc2luZyAoZGVmYXVsdCk7PC9saT4NCiAgICAgICAgICAgIDxsaT48c3Ryb25nPnN0cmlwPC9zdHJvbmc+IC0gYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIHJlbW92ZSBhbnl0aGluZyBiZXR3ZWVuICcmIzEyMzsnIGFuZCAnfScgKGFuZCB0aGF0IG1lYW5zIDxlbT5hbnl0aGluZzwvZW0+KTs8L2xpPg0KICAgICAgICAgIDwvdWw+DQogICAgICAgICAgPHA+Tm90ZXM6PC9wPg0KICAgICAgICAgIDx1bD4NCiAgICAgICAgICAgIDxsaT50aGVyZSBpcyBhIHJlYWwgY2hhbmNlIG9mLCBpbmFkdmVydGVudGx5LCBjcmVhdGUgYW4gZW5kbGVzcyBsb29wIHdpdGggdGhlIDxzdHJvbmc+Y29tcGlsZTwvc3Ryb25nPiBvcHRpb24gcmVzdWx0aW5nIGluIG91dCBvZiBtZW1vcnkgZXJyb3JzOzwvbGk+DQogICAgICAgICAgICA8bGk+dG8gdHJ5IHRvIHByZXZlbnQgdGhpcyB0aGUgcGx1Z2luIGNhbiByZWNvZ25pc2UgYSBzaW5nbGUgdXNlIG9mIHRoZSB0YWcgaW4gdGhlIGNvbnRlbnQgYW4gdGhhdCBzaG91bGQgYmUgc2FmZTs8L2xpPg0KICAgICAgICAgICAgPGxpPm11bHRpcGxlIG9jY3VycmVuY2VzIG9mIHRoZSB0YWcgb24gdGhlIHNhbWUgY29udGVudCBibG9jayB1c2luZyB0aGUgPHN0cm9uZz5jb21waWxlPC9zdHJvbmc+IG9wdGlvbiBjYW5ub3QgYmUgc2FmZWx5IGRldGVjdGVkIGFuZCBzaG91bGQgYmUgYXZvaWRlZDs8L2xpPg0KICAgICAgICAgICAgPGxpPg0KICAgICAgICAgICAgICA8c3Ryb25nPnN0cmlwPC9zdHJvbmc+IG1vZGUgdXNlcyBhIHJlZ2V4IHRvIHJlbW92ZSBhbnkgYW5kIGFsbCBvY2N1cnJlbmNlcyBvZiBwYXR0ZXJucyB3aXRoIGEgJyYjMTIzOycgLi4uICd9JyBjb25zdHJ1Y3QuIFRoYXQgbWVhbnMgb3RoZXIgbmF0dXJhbCBsYW5ndWFnZSBjb25zdHJ1Y3RzIHRoYXQgZml0IHRoYXQgcGF0dGVybiB3aWxsIGFsc28gYmUgcmVtb3ZlZC4gSmF2YVNjcmlwdCBjb25zdHJ1Y3RzDQogICAgICAgICAgICAgIGNhbiBlYXNpbHkgYmVjb21lIGNvcnJ1cHRlZCB0b287DQogICAgICAgICAgICA8L2xpPg0KICAgICAgICAgICAgPGxpPm9uZSB3YXkgdG8gYXZvaWQgdGhhdCBpc3N1ZSB3aXRoIG5hdHVyYWwgbGFuZ3VhZ2UgdGV4dCBjb25zdHJ1Y3RzIGlzIHRvIHJlcGxhY2UgJyYjMTIzOycgYW5kICd9JyB3aXRoIHRoZWlyIGh0bWwgY29kZXMsIHJlc3BlY3RpdmVseTogPHN0cm9uZz4nJmFtcDsjMTIzOyc8L3N0cm9uZz4gYW5kIDxzdHJvbmc+JyZhbXA7IzEyNTsnPC9zdHJvbmc+IG9yIGVxdWl2YWxlbnQ7PC9saT4NCiAgICAgICAgICAgIDxsaT5yZWdhcmRpbmcgSmF2YVNjcmlwdCwgdGhlIGJlc3QgYWx0ZXJuYXRpdmUgaXMgdG8gbW92ZSB0aGUgY29kZSBzbmlwcGV0cyB1c2VkIHRvIGEgZGlmZmVyZW50IGNvbnRlbnQgYmxvY2sgb3IgdG8gdGhlIG1haW4gdGVtcGxhdGUocykgaWYgYXQgYWxsIHBvc3NpYmxlOzwvbGk+DQogICAgICAgICAgPC91bD4NCiAgICAgICAgPC9saT4NCiAgICAgICAgPGxpPg0KICAgICAgICAgIDxzdHJvbmc+aHRtbDwvc3Ryb25nPiAtIFRyaWVzIHRvIHJlbW92ZSBhbnkgYW5kIGFsbCBIVE1MLCBKYXZhU2NyaXB0IGFuZCBDU1MgZnJvbSB0aGUgcmVzdWx0aW5nIGNvbnRlbnQgYmxvY2socykgc28gaXQgY2FuIGJlIHBvc3NpYmxlIHRvIHNhZmVseSB0cnVuY2F0ZSB0aGUgdGV4dDsgYWNjZXB0ZWQgdmFsdWVzIGFyZToNCiAgICAgICAgICA8dWw+DQogICAgICAgICAgICA8bGk+PHN0cm9uZz5zdHJpcDwvc3Ryb25nPiAtIHN0cmlwcyB0aGUgcmV0cmlldmVkIGJsb2Nrczs8L2xpPg0KICAgICAgICAgICAgPGxpPjxzdHJvbmc+bmV1dHJhbDwvc3Ryb25nPiAtIHBhc3NlcyB0aHJvdWdoIHRoZSByZXRyaWV2ZWQgYmxvY2tzIGFmdGVyIHByb2Nlc3NpbmcgPHN0cm9uZz5kb19zbWFydHk8L3N0cm9uZz47PC9saT4NCiAgICAgICAgICA8L3VsPg0KICAgICAgICA8L2xpPg0KICAgICAgICA8bGk+DQogICAgICAgICAgPHN0cm9uZz5maXJzdF9zb3J0PC9zdHJvbmc+IC0gc29ydHMgdGhlIGNvbnRlbnQgYnkgc3BlY2lmaWMgZWxlbWVudHM7IGFjY2VwdGVkIHZhbHVlcyBhcmU6DQogICAgICAgICAgPHVsPg0KICAgICAgICAgICAgPGxpPjxzdHJvbmc+aWQ8L3N0cm9uZz4gLSBzb3J0cyBieSBwYWdlIChjb250ZW50KSBpZDs8L2xpPg0KICAgICAgICAgICAgPGxpPjxzdHJvbmc+dGl0bGU8L3N0cm9uZz4gLSBzb3J0cyBieSBwYWdlIChjb250ZW50KSB0aXRsZTs8L2xpPg0KICAgICAgICAgICAgPGxpPjxzdHJvbmc+Y3JlYXRlZDwvc3Ryb25nPiAtIHNvcnRzIGJ5IHBhZ2UgKGNvbnRlbnQpIGNyZWF0ZWQgZGF0ZSAob3JkZXIgbWF5IG5lZWQgdG8gYmUgcmV2ZXJzZWQpOzwvbGk+DQogICAgICAgICAgICA8bGk+PHN0cm9uZz5tb2RpZmllZDwvc3Ryb25nPiAtIHNvcnRzIGJ5IHBhZ2UgKGNvbnRlbnQpIG1vZGlmaWVkIGRhdGUgKG9yZGVyIG1heSBuZWVkIHRvIGJlIHJldmVyc2VkKTs8L2xpPg0KICAgICAgICAgICAgPGxpPjxzdHJvbmc+b3duZXI8L3N0cm9uZz4gLSBzb3J0cyBieSBwYWdlIChjb250ZW50KSBvd25lciBpZDs8L2xpPg0KICAgICAgICAgICAgPGxpPjxzdHJvbmc+aGllcmFyY2h5PC9zdHJvbmc+IC0gc29ydHMgYnkgcGFnZSAoY29udGVudCkgaGllcmFyY2h5OzwvbGk+DQogICAgICAgICAgICA8bGk+PHN0cm9uZz5pZF9oaWVyYXJjaHk8L3N0cm9uZz4gLSBzb3J0cyBieSBwYWdlIChjb250ZW50KSBoaWVyYXJjaHkgaWQ7PC9saT4NCiAgICAgICAgICAgIDxsaT48c3Ryb25nPmxhc3RlZGl0b3I8L3N0cm9uZz4gLSBzb3J0cyBieSBwYWdlIChjb250ZW50KSBsYXN0IGVkaXRvciBpZDs8L2xpPg0KICAgICAgICAgICAgPGxpPjxzdHJvbmc+YWN0aXZlPC9zdHJvbmc+IC0gc29ydHMgYnkgcGFnZSAoY29udGVudCkgYWN0aXZlIHN0YXRlOzwvbGk+DQogICAgICAgICAgICA8bGk+PHN0cm9uZz5zaG93PC9zdHJvbmc+IC0gc29ydHMgYnkgcGFnZSAoY29udGVudCkgbWVudSB2aXNpYmlsaXR5OzwvbGk+DQogICAgICAgICAgPC91bD4NCiAgICAgICAgPC9saT4NCiAgICAgICAgPGxpPjxzdHJvbmc+Zmlyc3Rfc29ydF9vcmRlcjwvc3Ryb25nPiAtIGRldGVybWluZXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgc29ydGluZyBmaWx0ZXIsIHdoZXRoZXIgaXQgaXMgPGVtPid1cCc8L2VtPiBvciA8ZW0+J2Rvd24nPC9lbT4gKGRlZmF1bHQgPHN0cm9uZz4ndXAnPC9zdHJvbmc+IGFzIGluIGFscGhhYmV0aWNhbGx5IEEgdG8gQik7PC9saT4NCiAgICAgICAgPGxpPg0KICAgICAgICAgIDxzdHJvbmc+c2Vjb25kX3NvcnQ8L3N0cm9uZz4gLSBzb3J0cyB0aGUgY29udGVudCBieSBzcGVjaWZpYyBlbGVtZW50czsgYWNjZXB0ZWQgdmFsdWVzIGFyZToNCiAgICAgICAgICA8dWw+DQogICAgICAgICAgICA8bGk+PHN0cm9uZz5pZDwvc3Ryb25nPiAtIHNvcnRzIGJ5IHBhZ2UgKGNvbnRlbnQpIGlkOzwvbGk+DQogICAgICAgICAgICA8bGk+PHN0cm9uZz50aXRsZTwvc3Ryb25nPiAtIHNvcnRzIGJ5IHBhZ2UgKGNvbnRlbnQpIHRpdGxlOzwvbGk+DQogICAgICAgICAgICA8bGk+PHN0cm9uZz5jcmVhdGVkPC9zdHJvbmc+IC0gc29ydHMgYnkgcGFnZSAoY29udGVudCkgY3JlYXRlZCBkYXRlIChvcmRlciBtYXkgbmVlZCB0byBiZSByZXZlcnNlZCk7PC9saT4NCiAgICAgICAgICAgIDxsaT48c3Ryb25nPm1vZGlmaWVkPC9zdHJvbmc+IC0gc29ydHMgYnkgcGFnZSAoY29udGVudCkgbW9kaWZpZWQgZGF0ZSAob3JkZXIgbWF5IG5lZWQgdG8gYmUgcmV2ZXJzZWQpOzwvbGk+DQogICAgICAgICAgICA8bGk+PHN0cm9uZz5vd25lcjwvc3Ryb25nPiAtIHNvcnRzIGJ5IHBhZ2UgKGNvbnRlbnQpIG93bmVyIGlkOzwvbGk+DQogICAgICAgICAgICA8bGk+PHN0cm9uZz5oaWVyYXJjaHk8L3N0cm9uZz4gLSBzb3J0cyBieSBwYWdlIChjb250ZW50KSBoaWVyYXJjaHk7PC9saT4NCiAgICAgICAgICAgIDxsaT48c3Ryb25nPmlkX2hpZXJhcmNoeTwvc3Ryb25nPiAtIHNvcnRzIGJ5IHBhZ2UgKGNvbnRlbnQpIGhpZXJhcmNoeSBpZDs8L2xpPg0KICAgICAgICAgICAgPGxpPjxzdHJvbmc+bGFzdGVkaXRvcjwvc3Ryb25nPiAtIHNvcnRzIGJ5IHBhZ2UgKGNvbnRlbnQpIGxhc3QgZWRpdG9yIGlkOzwvbGk+DQogICAgICAgICAgICA8bGk+PHN0cm9uZz5hY3RpdmU8L3N0cm9uZz4gLSBzb3J0cyBieSBwYWdlIChjb250ZW50KSBhY3RpdmUgc3RhdGU7PC9saT4NCiAgICAgICAgICAgIDxsaT48c3Ryb25nPnNob3c8L3N0cm9uZz4gLSBzb3J0cyBieSBwYWdlIChjb250ZW50KSBtZW51IHZpc2liaWxpdHk7PC9saT4NCiAgICAgICAgICA8L3VsPg0KICAgICAgICA8L2xpPg0KICAgICAgICA8bGk+PHN0cm9uZz5zZWNvbmRfc29ydF9vcmRlcjwvc3Ryb25nPiAtIGRldGVybWluZXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgc29ydGluZyBmaWx0ZXIsIHdoZXRoZXIgaXQgaXMgPGVtPid1cCc8L2VtPiBvciA8ZW0+J2Rvd24nPC9lbT4gKGRlZmF1bHQgPHN0cm9uZz4ndXAnPC9zdHJvbmc+IGFzIGluIGFscGhhYmV0aWNhbGx5IEEgdG8gQik7PC9saT4NCiAgICAgICAgPGxpPjxzdHJvbmc+YXNzaWduPC9zdHJvbmc+IC0gQXNzaWduIHRoZSBvdXRwdXQgdG8gdGhlIHNwZWNpZmllZCBzbWFydHkgdmFyaWFibGUgKGRlZmF1bHQgPHN0cm9uZz5jb250ZW50X2ZldGNoPC9zdHJvbmc+IG1lYW5pbmcgdGhlIHJlc3VsdCB3aWxsIGJlIGF2YWlsYWJsZSB2aWEgJiMxMjM7JGNvbnRlbnRfZmV0Y2h9KTs8L2xpPg0KICAgICAgPC91bD4NCiAgICAgIDxocj4NCiAgICAgIDxoMj5FeHRlbmRlZCBIZWxwIGFuZCBFeGFtcGxlczwvaDI+DQogICAgICA8aDM+RGVidWdnaW5nPC9oMz4NCiAgICAgIDxwPllvdSBjYW4gZGVidWcgdGhlIHBsdWdpbiBvdXQgcHV0IGJ5IHNpbXBseSBzdXJyb3VuZGluZyB0aGUgYXNzaWduZWQgU21hcnR5IHZhcmlhYmxlIHRhZyB3aXRoIEhUTUwgJ3ByZScgdGFncyBhbmQgdXNpbmcgYSBwcmludF9yIG1vZGlmaWVyOjwvcD4NCiAgICAgIDxwPkV4YW1wbGU6PC9wPg0KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4NCiAgJiMxMjM7Y29udGVudF9mZXRjaCBhc3NpZ249J215X3Zhcl9uYW1lJ30NCiAgJmx0O3ByZT4mIzEyMyRteV92YXJfbmFtZXxwcmludF9yOjF9Jmx0Oy9wcmU+PC9wcmU+DQogICAgICA8cD5UaGF0IHNob3VsZCBvdXRwdXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBhc3NpZ25lZCB2YXIgYXMgYW4gYXJyYXkgb2YgcmVzdWx0cyB0aGUgc3RydWN0dXJlIG9mIHdoaWNoIHNob3VsZCB2YXJ5IGRlcGVuZGluZyBvbiB0aGUgcGFyYW1ldGVycyB1c2VkLjwvcD4NCg0KICAgICAgPGgzPlNlbGVjdGluZyBpdGVtczwvaDM+DQogICAgICA8aDQ+PGVtPkFzc2lnbmluZyB0byBhIFNtYXJ0eSB2YXJpYWJsZTwvZW0+PC9oND4NCiAgICAgIDxwPjxzdHJvbmc+YXNzaWduPC9zdHJvbmc+IGNhbiBiZSB1c2VkIHRvIGRlZmluZSB0aGUgb3V0cHV0IHZhcmlhYmxlIHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSBkZWZhdWx0IDxzdHJvbmc+JiMxMjM7JGNvbnRlbnRfZmV0Y2h9PC9zdHJvbmc+LjwvcD4NCiAgICAgIDxwPkV4YW1wbGU6PC9wPg0KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4NCiAgJiMxMjM7Y29udGVudF9mZXRjaCBhc3NpZ249J215X3Zhcl9uYW1lJ30NCiAgJiMxMjM7JG15X3Zhcl9uYW1lWzBdLT5jb250ZW50LT5hbGlhc308L3ByZT4NCg0KICAgICAgPGg0PjxlbT5TZWxlY3RpbmcgYSBjb250ZW50LWJsb2NrPC9lbT48L2g0Pg0KDQogICAgICA8cD48c3Ryb25nPmJsb2NrX25hbWU8L3N0cm9uZz4gY2FuIGJlIHVzZWQgdG8gZGVmaW5lIHRoZSBjb250ZW50IGJsb2NrIHlvdSB3YW50IHRvIHVzZSBhcyB0aGUgJiMxMjM7JiMxMjM7JGNvbnRlbnRfZmV0Y2hbbl0tPmNvbnRlbnQtPmRhdGF9IGVsZW1lbnQuIEFzIGEgZGVmYXVsdCwgaXQgd2lsbCBiZSA8ZW0+J2NvbnRlbnRfZW4nPC9lbT4sIHRoZSBwYWdlIHN0YW5kYXJkIGNvbnRlbnQgYmxvY2suIElmIHRoZSBibG9jayB5b3Ugd2FudCB0byBzaG93IGlzICYjMTIzO2NvbnRlbnQgYmxvY2s9J3N1bW1hcnknfSBpbiB5b3VyIHNvdXJjZSBwYWdlJ3MgdGVtcGxhdGUsIHlvdSB3b3VsZCBjYWxsIGl0IGxpa2UgaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlOjwvcD4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjM7Y29udGVudF9mZXRjaCBibG9ja19uYW1lPSdzdW1tYXJ5J308L3ByZT4NCg0KICAgICAgPGg0PjxlbT5XaGVyZSBzaG91bGQgdGhlIGZldGNoIGJlZ2luPzwvZW0+PC9oND4NCiAgICAgIDxwPjxzdHJvbmc+c3RhcnRfaWQ8L3N0cm9uZz4gY2FuIGJlIHVzZWQgdG8gZGVmaW5lIGEgc3RhcnRpbmcgcG9pbnQgZm9yIHlvdXIgY29udGVudCBjb2xsZWN0aW9uLiBJZiBub3Qgc3BlY2lmaWVkLCBpdCB3aWxsIGJlZ2luIHdpdGggaWQgPGVtPictMSc8L2VtPiBhbmQgdGh1cyBpbmNsdWRlIGFsbCBtYXRjaGluZyBwYWdlcyBmcm9tIGFsbCBwYWdlcy4gQSBuaWNlIHRyaWNrIHRvIHVzZSB0aGUgdGFnIGluIHNldmVyYWwgcGFnZXMgYmFzZWQgb24gdGhlIHNhbWUgdGVtcGxhdGUgYW5kIGxpbWl0IHRoZSB0YWcgdG8gdGhpcyBzaXRlIGFyZWEgaXMgdG8gc2V0IDxlbT5zdGFydF9pZD0kY29udGVudF9pZDwvZW0+LiBUaGlzIHdheSwgeW91IHVzZSB0aGUgdmlld2VkIHBhZ2UncyBpZCBhcyB0aGUgaW5pdGlhbCBwYWdlIGFuZCBpZ25vcmUgYWxsIG90aGVyIGNvbnRlbnQgZm9sZGVycy48L3A+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiYjMTIzO2NvbnRlbnRfZmV0Y2ggc3RhcnRfaWQ9MTZ9PC9wcmU+DQoNCiAgICAgIDxoND48ZW0+U2tpcCB0aGUgZmlyc3QgWCBpdGVtcyAob2Zmc2V0KS48L2VtPjwvaDQ+DQogICAgICA8cD48c3Ryb25nPmxpbWl0X3N0YXJ0PC9zdHJvbmc+IHdpbGwgYWxsb3cgeW91IHRvIGRvIHRoYXQuIFN0YXRlIHRoZSBudW1iZXIgb2YgdGhlIGl0ZW0geW91IHdvdWxkIGxpa2UgeW91ciBvdXRwdXQgdG8gYmVnaW4gd2l0aC4gPGVtPkRlZmF1bHQgaXMgMDwvZW0+PC9wPg0KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mIzEyMztjb250ZW50X2ZldGNoIGxpbWl0X3N0YXJ0PTV9PC9wcmU+DQoNCiAgICAgIDxoND48ZW0+TGltaXQgdGhlIG91dHB1dCB0byBhIHNwZWNpZmljIG51bWJlciBvZiBpdGVtcy48L2VtPjwvaDQ+DQogICAgICA8cD48c3Ryb25nPmxpbWl0X2NvdW50PC9zdHJvbmc+IGNhbiBiZSB1c2VkIHRvIGxpbWl0IHRoZSBvdXRwdXQgdG8gYSBzcGVjaWZpYyBudW1iZXIuIEluIGNvbWJpbmF0aW9uIHdpdGggcGFnZSwgaXQgd2lsbCBkZWZpbmUgdGhlIHNpemUgb2YgYSBwYWdlLjwvcD4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjM7Y29udGVudF9mZXRjaCBsaW1pdF9jb3VudD0xMH08L3ByZT4NCg0KICAgICAgPGg0PjxlbT5QYWdpbmF0aW9uPC9lbT48L2g0Pg0KICAgICAgPHA+PHN0cm9uZz5wYWdlPC9zdHJvbmc+IGNhbiBiZSB1c2VkIHRvIGdlbmVyYXRlIGEgcGFnZSBiYXNlZCB2aWV3LiBWYWx1ZSBpcyA8ZW0+cGFnZSBudW1iZXI8L2VtPi4gSXQgd2lsbCBiYXNpY2FsbHkgbW92ZSB0aGUgdmlldyB5b3UgaGF2ZSBvbiB0aGUgcmVzdWx0cyBieSB0aGUgbnVtYmVyIG9mIGl0ZW1zIHNwZWNpZmllZCBpbiBsaW1pdF9jb3VudC4gSXQgYWx0ZXJzIHRoZSBsaW1pdF9zdGFydCBieSBhZGRpbmcgbGltaXRfY291bnQgdG8gaXQsIGVhY2ggdGltZSBhbiBpbmNyZWFzaW5nIHBhZ2UgaXMgc2VsZWN0ZWQuIExldCdzIHNheSB5b3UgaGF2ZSBsaW1pdF9zdGFydD0wIGFuZCBsaW1pdF9jb3VudD01LCBwYWdlPTIgd2lsbCBhbHRlciBsaW1pdF9zdGFydCB0byBiZSA2LjwvcD4NCiAgICAgIDxwPlVzYWdlIG9mIHRoaXMgcGFyYW1ldGVyIHdpbGwgcHJvdmlkZSBzb21lIGV4dHJhIHNtYXJ0eSBkYXRhIGVsZW1lbnRzLiAkcGFnZXJfaW5mby0+Y3VycmVudCwgJHBhZ2VyX2luZm8tPm1heCBhbmQgJHBhZ2VyX2luZm8tPnNpemUuIFJlcHJlc2VudGluZyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHBhZ2UsIHRoZSBtYXhpbXVtIHBhZ2UgYXZhaWxhYmxlIGFuZCB0aGUgcGFnZSBzaXplLiBVc2Ugc21hcnR5IGFuZCB0aGlzIGRhdGEgdG8gYnVpbGQgZWFzeSBhbmQgY29tcGxleCBwYWdlcnMgYWxpa2UuPC9wPg0KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mIzEyMztjb250ZW50X2ZldGNoIGxpbWl0X2NvdW50PTUgcGFnZT0yfTwvcHJlPg0KDQogICAgICA8aDQ+PGVtPlNob3cgYWxzbyBpbmFjdGl2ZSBwYWdlcyBvciBvbmx5IGluYWN0aXZlIHBhZ2VzLjwvZW0+PC9oND4NCiAgICAgIDxwPjxzdHJvbmc+YWN0aXZlPC9zdHJvbmc+IGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgaG93IHRoZSA8c3Ryb25nPidhY3RpdmUnPC9zdHJvbmc+IGZsYWcgb2YgcGFnZXMgc2hvdWxkIGJlIGludGVycHJldGVkLiAnZm9yY2UnIHNob3dzIGFsbCBwYWdlcyByZWdhcmRsZXNzIG9mIHN0YXR1cy4gJ2FjdGl2ZScgc2hvdyBhY3RpdmUgcGFnZXMgb25seSAoZGVmYXVsdCkuICdpbmFjdGl2ZScgc2hvdyBpbmFjdGl2ZSBwYWdlcyBvbmx5LjwvcD4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjMkY29udGVudF9mZXRjaCBhY3RpdmU9J2ZvcmNlJ308L3ByZT4NCg0KICAgICAgPGg0PjxlbT5TaG93biBpbiBtZW51PzwvZW0+PC9oND4NCiAgICAgIDxwPjxzdHJvbmc+c2hvd25faW5fbWVudTwvc3Ryb25nPiBjYW4gYmUgdXNlZCB0byBjb250cm9sIGhvdyB0aGUgJ3Nob3dfaW5fbWVudScgZmxhZyBvZiBwYWdlcyBzaG91bGQgYmUgaW50ZXJwcmV0ZWQuICdmb3JjZScgc2hvd3MgYWxsIHBhZ2VzIHJlZ2FyZGxlc3Mgb2Ygc3RhdHVzLiAnc2hvdycgc2hvdyBwYWdlcyBzZXQgdG8gJ1Nob3cgaW4gTWVudScgb25seSAoZGVmYXVsdCkuICdoaWRkZW4nIHNob3cgcGFnZXMgdGhhdCBhcmUgc2V0IHRvICdEb24ndCBTaG93IGluIE1lbnUnIG9ubHkuPC9wPg0KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mIzEyMyRjb250ZW50X2ZldGNoIHNob3dfaW5fbWVudT0naGlkZGVuJ308L3ByZT4NCg0KICAgICAgPGgzPkZpbHRlciBpdGVtczwvaDM+DQoNCiAgICAgIDxoND48ZW0+RmlsdGVyIGZvciBzcGVjaWZpYyBjb250ZW50IChlLmcuIGNoZWNrIGlmIGRhdGEgZmllbGRzIGNvbnRhaW4gdGhlIHdvcmQgJ3dvcmxkJyk8L2VtPjwvaDQ+DQogICAgICA8cD48c3Ryb25nPmZpbHRlcjwvc3Ryb25nPiBjYW4gYmUgdXNlZCB0byBsaW1pdCB0aGUgcmVzdWx0cyB0byBlbnRyaWVzIHdoaWNoIGNvbnRhaW4gc3BlY2lmaWMgd29yZHMgb3IgcGhyYXNlcyBvciB0byBleGx1ZGUgc3VjaCBpdGVtcy4gVXNlIGJvb2xlYW4gbG9naWMuIGUuZy4gZmlsdGVyPSctaGVsbG8nIHRvIGV4Y2x1ZGUgaXRlbXMgdGhhdCBjb250YWluIHRoZSB3b3JkICdoZWxsbycgaW4gYW55IG9mIHRoZWlyIGNvbnRlbnQtPmRhdGEgb3IgZXh0ZW5zaW9uLT5pdGVtbmFtZS0+ZGF0YSBlbGVtZW50cyBvciBmaWx0ZXI9J3dvcmxkJyB0byBsaW1pdCB0aGUgcmVzdWx0cyB0byB0aG9zZSBpdGVtcyB0aGF0IGNvbnRhaW4gdGhlIHdvcmQgJ3dvcmxkJyBpbiBhbnkgb2YgdGhlaXIgZGF0YSBlbGVtZW50cy48L3A+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiYjMTIzJGNvbnRlbnRfZmV0Y2ggZmlsdGVyPSd3b3JsZCd9PC9wcmU+DQoNCiAgICAgIDxoND48ZW0+RXhjbHVkZSBvciBsaW1pdCAoZmlsdGVyKSB0aGUgb3V0cHV0IHRvIHBhZ2VzIHdpdGggbWF0Y2hpbmcgYWxpYXMgcHJlZml4PC9lbT48L2g0Pg0KICAgICAgPHA+PHN0cm9uZz5wcmVmaXg8L3N0cm9uZz4gY2FuIGJlIHVzZWQgdG8gc3RhdGUgdGhlIHByZWZpeCBvciBwcmVmaXhlcyB0aGF0IHNob3VsZCBiZSBjb25zaWRlcmVkIGZvciBleGNsdWRpbmcgZnJvbSB0aGUgY29sbGVjdGlvbiBvciB0aGF0IHNob3VsZCBiZSB0aGUgb25seSBwYWdlcyBpbiB0aGUgY29sbGVjdGlvbi4gU2V2ZXJhbCBwcmVmaXhlcyBjYW4gYmUgdXNlZCBidXQgbXVzdCBiZSBzZXBhcmF0ZWQgYnkgY29tbWEuIEUuZy4gJiMxMjMkY29udGVudF9mZXRjaCBwcmVmaXg9J3ByaXZhdGVfLHNwZWNpYWxfJ308L3A+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiYjMTIzJGNvbnRlbnRfZmV0Y2ggcHJlZml4PSdwcmVmaXhuYW1lJ308L3ByZT4NCg0KICAgICAgPGg0PjxlbT5Ib3cgc2hvdWxkIHRoZSBwcmVmaXggb3IgbGlzdCBvZiBwcmVmaXgoZXMpIGJlIGhhbmRsZWQ/PC9lbT48L2g0Pg0KICAgICAgPHA+PHN0cm9uZz5wcmVmaXhfbW9kZTwvc3Ryb25nPiBQcmVmaXgtbW9kZSBpcyB1c2VkIHRvIGNvbnRyb2wgdGhlIGhhbmRsaW5nIG9mIHRoZSBwcmVmaXgoZXMpLiAnZm9yY2UnLCAnbmV1dHJhbCIgYW5kICJoaWRlJyBhcmUgdGhlIGF2YWlsYWJsZSB2YWx1ZXMuIFN0YW5kYXJkIG1vZGUgaXMgbmV1dHJhbCB0aGF0IHdpbGwgZGlzcmVnYXJkIGFueSBhdmFpbGFibGUgcHJlZml4LiBGb3JjZWQgbW9kZSBvbmx5IHNob3dzIHBhZ2VzIHdpdGggb25lIG9mIHRoZSBzdGF0ZWQgcHJlZml4ZXMuIEhpZGUgd2lsbCBleGNsdWRlIHBhZ2VzIHdpdGggdGhlIHByZWZpeCBmcm9tIHRoZSBpdGVtcyByZXR1cm5lZC48L3A+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiYjMTIzJGNvbnRlbnRfZmV0Y2ggcHJlZml4X21vZGU9J2hpZGUnfTwvcHJlPg0KDQogICAgICA8aDQ+PGVtPkhvdyBjYW4gSSBsaW1pdCB0aGUgb3V0cHV0IHRvIHNwZWNpZmljIGhpZXJhcmNoeSBsZXZlbHMgKGUuZy4gZGVwdGgpID88L2VtPjwvaDQ+DQogICAgICA8cD48c3Ryb25nPmRlcHRoPC9zdHJvbmc+IGlzIHVzZWQgdG8gY29udHJvbCB3aGljaCBoaWVyYXJjaHkgbGV2ZWxzIHNob3VsZCBiZSBjb25zaWRlcmVkIGZvciBvdXRwdXQuIEl0IHRha2VzIHR3byBpbnRlZ2VyIHZhbHVlcyBzZXBhcmF0ZWQgYnkgY29tbWEgKGUuZy4gZGVwdGg9Jy0xLDMnfS4gVGhlIGZpcnN0IHZhbHVlIGRlZmluZXMgdGhlIHN0YXJ0aW5nIGhpZXJhcmNoeS4gLTEgPSBzdGFydCB3aXRoIGNvbnRlbnRfZmV0Y2gsIG4gPSBzdGFydCB3aXRoIHNwZWNpZmljIGhpZXJhcmNoeSBsZXZlbCBbMCBhbmQgMSBib3RoIHJldHVybiBmaXJzdCBsZXZlbF0uPC9wPg0KICAgICAgPHA+VGhlIHNlY29uZCB2YWx1ZSBkZWZpbmVzIHRoZSBudW1iZXIgb2YgYWRkaXRpb25hbCBsZXZlbHMgYWRkZWQgdG8gdGhlIGNvbGxlY3Rpb24uIDAgPSBubyBkZXB0aCwgc2libGluZ3Mgb2YgcGFnZSBzcGVjaWZpZWQgd2l0aCBmaXJzdCBkZXB0aCB2YWx1ZSBhcmUgcmV0dXJuZWQgKGlmIG5vdCBleGNsdWRlZCBvdGhlcndpc2UpLiBuID0gbnVtYmVyIG9mIGFkZGl0aW9uYWwgbGV2ZWwgcmVsYXRpdmUgdG8gdGhlIGxldmVsIHNwZWNpZmllZCB3aXRoIGZpcnN0IGRlcHRoIHZhbHVlLjwvcD4NCiAgICAgIDxwPjxzdHJvbmc+Qm90aCB2YWx1ZXMgbXVzdCBiZSB1c2VkITwvc3Ryb25nPjwvcD4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjMkY29udGVudF9mZXRjaCBkZXB0aD0nLTEsMyd9PC9wcmU+DQoNCiAgICAgIDxoMz5FeGNsdWRlIGl0ZW1zPC9oMz4NCg0KICAgICAgPHA+PGVtPkV4Y2x1ZGUgc2luZ2xlIGl0ZW1zIGZyb20gdGhlIGxpc3Q8L2VtPjwvcD4NCiAgICAgIDxwPjxzdHJvbmc+ZXhjbHVkZTwvc3Ryb25nPiBhbGxvd3MgeW91IHRvIHJlbW92ZSBzcGVjaWZpYyBwYWdlcyBmcm9tIHRoZSByZXN1bHRzLiBJdCB0YWtlcyBhbnkgbnVtYmVyIG9mIGNvbnRlbnQgPGVtPklEcyBzZXBhcmF0ZWQgYnkgY29tbWE8L2VtPi4gRXNwZWNpYWxseSB3aGVuIGZvcmNpbmcgY29udGVudF9mZXRjaCB0byBjb21waWxlIHNtYXJ0eSBpbiBmb3VuZCBjb250ZW50LWJsb2NrcywgeW91IGNhbiB1c2UgdGhpcyB0YWcgdG8gYnJlYWsgZW5kbGVzcyByZWN1cnNpb25zIG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIHdoZXJlIHlvdSB3YW50IHNwZWNpZmljIHBhZ2VzIG5vdCB0byBhcHBlYXIuPC9wPg0KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mIzEyMyRjb250ZW50X2ZldGNoIGV4Y2x1ZGU9JzEzLDIzLDUzLDEyLDMyJ308L3ByZT4NCg0KICAgICAgPHA+PGVtPkp1c3Qgc2hvdyB0aGUgZGF0YSBvZiBhIHNwZWNpZmljIGVsZW1lbnQ8L2VtPjwvcD4NCiAgICAgIDxwPjxzdHJvbmc+dGhpc19vbmx5PC9zdHJvbmc+IGlzIGEgcGFyYW1ldGVyIHRoYXQgd2lsbCBsaW1pdCB0aGUgcmVzdWx0IHRvIHRoaXMgc3BlY2lmaWMgSUQuPC9wPg0KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mIzEyMyRjb250ZW50X2ZldGNoIHRoaXNfb25seT01NX08L3ByZT4NCg0KICAgICAgPGgzPkFkZCBtb3JlIGRhdGEgdG8gdGhlIGl0ZW08L2gzPg0KICAgICAgPGg0PjxlbT5HZXQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwYXJlbnQgcGFnZXM8L2VtPjwvaDQ+DQogICAgICA8cD48c3Ryb25nPnBhcmVudHM8L3N0cm9uZz4gY2FuIGJlIHVzZWQgdG8gcmVxdWVzdCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwYXJlbnQgcGFnZXMgKGFsaWFzIGFuZCB0aXRsZSkuIFBvc3NpYmxlIHZhbHVlcyBhcmUgPGVtPnRydWU8L2VtPiBvciA8ZW0+ZmFsc2U8L2VtPi4gVXNpbmcgdGhlc2UgcGFyYW1ldGVycyBhbGxvd3MgeW91IHRvIHVzZSB0aGUgZGF0YSBlbGVtZW50ICRkdW1wW25dLT5wYXJlbnRzLT5hbGlhcyBvciAkZHVtcFtuXS0+cGFyZW50cy0+dGl0bGUuIFRoZSBkYXRhIGVsZW1lbnQgJGR1bXBbbl0tPnBhcmVudHMtPmlkIHdpbGwgYmUgcHJvdmlkZWQgaW4gYW55IGNhc2UuPC9wPg0KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mIzEyMyRjb250ZW50X2ZldGNoIHBhcmVudHM9dHJ1ZX08L3ByZT4NCg0KICAgICAgPGg0PjxlbT5HZXQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdXNlcnMgd2hvIHdyb3RlL2VkaXRlZCB0aGUgY29udGVudDwvZW0+PC9oND4NCiAgICAgIDxwPjxzdHJvbmc+dXNlcnM8L3N0cm9uZz4gY2FuIGJlIHVzZWQgdG8gcmVxdWVzdCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSB1c2VycyB3aG8gbGFzdCBlZGl0ZWQgYW5kIGNyZWF0ZWQgdGhlIGNvbnRlbnQuIFBvc3NpYmxlIHZhbHVlcyBhcmUgPGVtPnRydWU8L2VtPiBvciA8ZW0+ZmFsc2U8L2VtPi4gUGVyIGRlZmF1bHQgJGR1bXBbbl0tPmNyZWF0ZWQtPmJ5IGFuZCAkZHVtcFtuXS0+bW9kaWZpZWQtPmJ5IHdpbGwgb25seSByZXR1cm4gdGhlIHVzZXIgSUQuIElmIHNldCB0byB0cnVlLCB0aGUgbWVudGlvbmVkIGNsYXNzIGVsZW1lbnRzIHdpbGwgYmUgZXhwYW5kZWQgYnkgZGV0YWlsZWQgdXNlciBpbmZvIChmaXJzdC0sIGxhc3QtIGFuZCB1c2VyIG5hbWUpLjwvcD4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjMkY29udGVudF9mZXRjaCB1c2Vycz10cnVlfTwvcHJlPg0KICAgICAgPGg0PjxlbT5Vc2luZyBtb3JlIGNvbnRlbnQtYmxvY2tzIGZyb20gdGhlIHBhZ2VzPC9lbT48L2g0Pg0KICAgICAgPHA+PHN0cm9uZz5leHRlbnNpb25zPC9zdHJvbmc+IGlzIHlvdXIgY2hvaWNlIHRoZW4uIEl0IHRha2VzIGEgPGVtPmNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGNvbnRlbnRfYmxvY2tzPC9lbT4uIElmIGFueSBvZiB0aGVtIChmb3IgYW4gaXRlbSkgZmVhdHVyZXMgY29udGVudCwgJGR1bXBbbl0tPmV4dGVuc2lvbiB3aWxsIGJlICcxJywgb3RoZXIgd2lzZSBpdCB3aWxsIGJlICcwJyAoZGVmYXVsdCkuIFRoaXMgY2FuIGJlIHVzZWQgdG8gY2hlY2sgZm9yIGF2YWlsYWJpbGl0eSBvZiAnbW9yZScgZGF0YS4gRWFjaCBjb250ZW50X2Jsb2NrIHdpbGwgYmUgYWRkZWQgYXMgYSBjbGFzcyBiZWxvdyAkZHVtcFtuXS0+ZXh0ZW5zaW9ucy4gRS5nLiAmIzEyMyRjb250ZW50IGJsb2NrPSdtb3JlX3RleHQnfSB3aWxsIGJlIGF2YWlsYWJsZSBhcyAkZHVtcFtuXS0+ZXh0ZW5zaW9ucy0+bW9yZV90ZXh0LT5kYXRhIHRvZ2V0aGVyIHdpdGggJGR1bXBbbl0tPmV4dGVuc2lvbnMtPm1vcmVfdGV4dC0+bGVuZ3RoLiBJZGVhbGx5LCB5b3VyIGNvbnRlbnQgYmxvY2sgbmFtZXMgZG8gbm90IGZlYXR1cmUgc3BlY2lhbCBjaGFyYWN0ZXJzIGFuZCBub3QgJyAnIG9yICctJywgdXNlICdfJyBpbnN0ZWFkLjwvcD4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjMkY29udGVudF9mZXRjaCBleHRlbnNpb25zPSdzdW1tYXJ5LGltYWdlLG90aGVyX2Jsb2NrX25hbWUnfTwvcHJlPg0KDQogICAgICA8aDM+UHJvY2VzcyBkYXRhIGZyb20gaXRlbXM8L2gzPg0KDQogICAgICA8aDQ+PGVtPkNoYW5nZSB0aGUgZGF0ZS90aW1lIGZvcm1hdDwvZW0+PC9oND4NCiAgICAgIDxwPjxzdHJvbmc+ZGF0ZWZvcm1hdDwvc3Ryb25nPiBjYW4gYmUgdXNlZCB0byBmb3JtYXQgdGhlIGRhdGUgb3V0cHV0IG9mIGNvbnRlbnRfZmV0Y2guIENoZWNrIDxhIGhyZWY9Imh0dHA6Ly9kZS5waHAubmV0L3N0cmZ0aW1lIiB0YXJnZXQ9ImJsYW5rIj5odHRwOi8vZGUucGhwLm5ldC9zdHJmdGltZTwvYT4gZm9yIG1vcmUgaWZvIG9uIHRoZSBkYXRlIGZvcm1hdCBfb3B0aW9ucy4gSXQgaXMgc2V0IHRvIDxlbT4nJUEsICVlICVCICVZJzwvZW0+IGJ5IGRlZmF1bHQgKGUuZy4gU2F0LCAyMCBTZXB0ZW1iZXIgMjAwOCkuIEl0IGlzIHVzZWQgZm9yIHRoZSB0d28gdGltZSBzdGFtcHMgJGR1bXBbbl0tPmNyZWF0ZWQtPmRhdGUgYW5kICRkdW1wW25dLT5tb2RpZmllZC0+ZGF0ZSB0aGF0IGFyZSBhbHdheXMgcmV0dXJuZWQgd2l0aCBlYWNoIGl0ZW0uPC9wPg0KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mIzEyMyRjb250ZW50X2ZldGNoIGRhdGVmb3JtYXQ9JyVBLCAlZSAlQiAlWSd9PC9wcmU+DQoNCiAgICAgIDxoND48ZW0+Q2hhbmdlIHRoZSBkYXRlL3RpbWUgbG9jYWxlPC9lbT48L2g0Pg0KICAgICAgPHA+PHN0cm9uZz5jZGxvY2FsZTwvc3Ryb25nPiBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgc3BlY2lmaWMgbG9jYWxlIGZvciB5b3VyIG91dHB1dC4gRS5nLiB5b3VyIHBhZ2UgaXMgZGFuaXNoIGFuZCB5b3VyIHNpdGUvc2VydmVyIGlzIHNldCB0byB0aGlzIGxvY2FsZSAtIGJ1dCBmb3IgdGhlIGdlbmVyYXRpb24gb2YgdmFsaWQgUlNTIHlvdSBtaWdodCBuZWVkIHRoZSBVUyBkYXRlL3RpbWUgbG9jYWxlLiA8L3A+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiYjMTIzJGNvbnRlbnRfZmV0Y2ggY2Rsb2NhbGU9J2VuLXVzJ308L3ByZT4NCg0KICAgICAgPGg0PjxlbT5DaGFuZ2UgdGhlIGRhdGUgZm9ybWF0IGxvY2FsZTwvZW0+PC9oND4NCiAgICAgIDxwPjxzdHJvbmc+bG9jYWxlPC9zdHJvbmc+IGNhbiBiZSB1c2VkIHRvIGFsdGVyIHRoZSBsb2NhbGUgdXNlZCBmb3IgdGhlIHRpbWVzdGFtcCAoZS5nLiBzeXN0ZW0gaXMgRGFuaXNoLCBidXQgeW91IG5lZWQgVVMgZGF5IG5hbWVzIGZvciBYTUwpLjwvcD4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjMkY29udGVudF9mZXRjaCBsb2NhbGU9J2VuLVVTJ308L3ByZT4NCg0KICAgICAgPGg0PjxlbT5Db21waWxlIG9yIHJlbW92ZSBTbWFydHkgdGFncyBmcm9tIG91dHB1dDwvZW0+PC9oND4NCiAgICAgIDxwPjxzdHJvbmc+ZG9fc21hcnR5PC9zdHJvbmc+IGNvbnRyb2xzIGhvdyBzbWFydHkgZGF0YSB0aGF0IG1heSBiZSByZXRyaWV2ZWQgc2hvdWxkIGJlIGhhbmRsZWQuIFRoZXJlIGFyZSB0aHJlZSBvcHRpb25zIDxlbT4nY29tcGlsZSc8L2VtPiwgPGVtPiduZXV0cmFsJzwvZW0+IGFuZCA8ZW0+J3N0cmlwJzwvZW0+LiA8ZW0+J2NvbXBpbGUnPC9lbT4gY29tcGlsZXMgc21hcnR5IGRhdGEgaW4gdGhlIHBhZ2VzIGZvdW5kLiA8ZW0+J25ldXRyYWwnPC9lbT4gcHJpbnRzIG91dCB0aGUgc21hcnR5IGNvZGUgYXMgcmVndWxhciB0ZXh0IGFuZCBpcyB0aGUgZGVmYXVsdCBzZXR0aW5nLiA8ZW0+J3N0cmlwJzwvZW0+IGRlbGV0ZXMgYWxsIHNtYXJ0eSBjb2RlIGZyb20geW91ciBwYWdlICh3ZWxsLCBldmVyeXRoaW5nIGJldHdlZW4gJiMxMjMkIGFuZCB9KS48L3A+DQogICAgICA8cD5Ib3dldmVyLCBiZSBjYXJlZnVsbHkgbm90IHRvIGNvbnN0cnVjdCBhIHF1ZXJ5IHRoYXQgd291bGQgaGF2ZSB0byBjb21waWxlIGl0c2VsZiwgdGhpcyB3aWxsIHJlc3VsdCBpbiBhbiBvdXQgb2YgbWVtb3J5IGVycm9yIGR1ZSB0byBlbmRsZXNzIHJlY3Vyc2lvbi5JZiB5b3UgdXNlIHRoaXMgdGFnIG9ubHkgb25jZSB3aXRoIHRoZSBjb21waWxlIHBhcmFtZXRlciBpbiB5b3VyIHNpdGUsIG5vIHByb2JsZW0sIGl0IHByZXZlbnRzIGl0c2VsZiBmcm9tIGJlaW5nIHJlbmRlcmVkLiBCdXQgaWYgeW91IGhhdmUgYW5vdGhlciBvY2N1cnJlbmNlIG9mIHRoaXMgdGFnIHRoYXQgd291bGQgaW5jbHVkZSB0aGUgcGFnZSB0aGF0IGlzIGNhbGxpbmcgdGhlIGN1cnJlbnRseSBwcm9jZXNzZWQgdGFnIHdpdGggY29tcGlsZT0ndHJ1ZScsIHlvdSBzaG91bGQgZXhjbHVkZSBhbGwgb2YgdGhlc2UgcGFnZXMgKGNvbnRlbnRfZmV0Y2ggZG9lcyBub3QgY2hlY2sgZm9yIHRoZSBjb21waWxlIHBhcmFtZXRlciBvZiBvdGhlciBvY2N1cnJlbmNlcyBvZiB0aGUgdGFnKS48L3A+DQogICAgICA8cD5JZiB0aGF0IGNhbGxlZCB0YWcgd291bGQgZmVhdHVyZSBvdGhlciBjb250ZW50IGJsb2Nrcy4uLiB0aGVuLCBhZ2FpbiwgYWxsIHdvdWxkIHdvcmsgbmljZS4gSnVzdCBkbyBub3QgY29uc3RydWN0IHNvbWV0aGluZyB3aXRoIGNvbnRlbnRfZmV0Y2ggdGhhdCBpcyBzb21ld2hlcmUgaW4gdGhlIGNoYWluIG9mIGV2ZW50cyBjb21waWxpbmcgaXRzZWxmLjwvcD4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjMkY29udGVudF9mZXRjaCBkb19zbWFydHk9ImNvbXBpbGUifTwvcHJlPg0KDQogICAgICA8aDQ+PGVtPlJlbW92ZSBIVE1MIGZyb20gY29udGVudCBlbGVtZW50cyBzbyB0aGF0IGl0IGNhbiBzYWZlbHkgYmUgdHJ1bmNhdGVkPC9lbT48L2g0Pg0KICAgICAgPHA+PHN0cm9uZz5odG1sPC9zdHJvbmc+IGlzIGEgcGFyYW1ldGVyIHRoYXQgYWxsb3dzIHlvdSB0byByZW1vdmUgYW55IEhUTUwsIEphdmFTY3JpcHQgYW5kIENTUyBmcm9tIGEgY29udGVudC1ibG9jay4gPGVtPidzdHJpcCc8L2VtPiBhbmQgPGVtPiduZXV0cmFsJzwvZW0+IGFyZSB0aGUgYXZhaWxhYmxlIF9vcHRpb25zLiA8ZW0+J25ldXRyYWwnPC9lbT4gd2lsbCBkaXNwbGF5IHRoZSBjb250ZW50IGFzIGl0IGlzIChhZnRlciBwcm9jZXNzaW5nIGRvX3NtYXJ0eSBzZXR0aW5ncykgYW5kIGlzIHRoZSBkZWZhdWx0IHNldHRpbmcuIDxlbT4nc3RyaXAnPC9lbT4gd2lsbCByZW1vdmUgdGhlIG1lbnRpb25lZCBlbGVtZW50cy48L3A+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiYjMTIzJGNvbnRlbnRfZmV0Y2ggaHRtbD0nbmV1dHJhbCd9PC9wcmU+DQoNCiAgICAgIDxoMz5Tb3J0IGl0ZW1zPC9oMz4NCg0KICAgICAgPGg0PjxlbT5QcmltYXJ5IHNvcnRpbmcgb2YgZGF0YSBlbGVtZW50czwvZW0+PC9oND4NCiAgICAgIDxwPjxzdHJvbmc+Zmlyc3Rfc29ydDwvc3Ryb25nPiBzb3J0cyB0aGUgZm91bmQgY29udGVudCBieSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6IDxlbT5pZCwgdGl0bGUsIGNyZWF0ZWQsIG1vZGlmaWVkLCBvd25lciwgaGllcmFyY2h5IChkZWZhdWx0KSwgaWRfaGllcmFyY2h5LCBsYXN0ZWRpdG9yLCBhY3RpdmUsIHNob3cgKHNob3cgaW4gbWVudSk8L2VtPi4gRm9yIHRpbWUgYmFzZWQgKGxpa2UgbmV3ZXN0IGNvbnRlbnRzKSB1c2UgY3JlYXRlZCwgZm9yIGxhc3QgdXBkYXRlZCBsaXN0cyB1c2UgbW9kaWZpZWQgKGJvdGggbmVlZCB0byBiZSByZXZlcnNlZCB3aXRoIHNvcnRfb3JkZXIpLiBIaW50OiBTb3J0aW5nIGJ5IG93bmVyIG9yIGxhc3RlZGl0b3IgdGFrZXMgcGxhY2UgYnkgSUQsIG5vdCBuYW1lITwvcD4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjMkY29udGVudF9mZXRjaCBmaXJzdF9zb3J0PSdvd25lcid9PC9wcmU+DQoNCiAgICAgIDxoND48ZW0+U2V0IHRoZSBkaXJlY3Rpb24gb2YgcHJpbWFyeSBzb3J0aW5nPC9lbT48L2g0Pg0KICAgICAgPHA+PHN0cm9uZz5maXJzdF9zb3J0X29yZGVyPC9zdHJvbmc+IGNhbiBiZSB1c2VkIHRvIHJldmVyc2UgdGhlIHNvcnRpbmcgZmlsdGVyLiA8ZW0+J3VwJzwvZW0+IGFuZCA8ZW0+J2Rvd24nPC9lbT4gYXJlIHRoZSBhdmFpbGFibGUgX29wdGlvbnMsIHdoZXJlYXMgInVwIiAoQSBiZWZvcmUgQiBvciB5ZXN0ZXJkYXkgYmVmb3JlIHRvZGF5KSBpcyB0aGUgZGVmYXVsdCBkaXJlY3Rpb24uPC9wPg0KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mIzEyMyRjb250ZW50X2ZldGNoIGZpcnN0X3NvcnRfb3JkZXI9J3VwJ308L3ByZT4NCg0KICAgICAgPGg0PjxlbT5TZWNvbmRhcnkgc29ydGluZyBvZiBkYXRhIGVsZW1lbnRzPC9lbT48L2g0Pg0KICAgICAgPHA+PHN0cm9uZz5zZWNvbmRfc29ydDwvc3Ryb25nPiBzb3J0cyB0aGUgZm91bmQgY29udGVudCBqdXN0IGFzIDxzdHJvbmc+Zmlyc3Rfc29ydF9vcmRlcjwvc3Ryb25nPiBkb2VzIGFuZCBhZGRzIGFuIGV4dHJhIGZpbHRlciB0byB0aGUgcmVzdWx0czwvcD4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjMkY29udGVudF9mZXRjaCBzZWNvbmRfc29ydD0nb3duZXInfTwvcHJlPg0KDQogICAgICA8aDQ+PGVtPlNldCB0aGUgZGlyZWN0aW9uIG9mIHNlY29uZGFyeSBzb3J0aW5nPC9lbT48L2g0Pg0KICAgICAgPHA+PHN0cm9uZz5zZWNvbmRfc29ydF9vcmRlcjwvc3Ryb25nPiBpcyB0aGUgc2FtZSBhcyA8c3Ryb25nPmZpcnN0X3NvcnRfb3JkZXI8L3N0cm9uZz4gIGJ1dCBmb3IgPHN0cm9uZz5zZWNvbmRfc29ydDwvc3Ryb25nPi48L3A+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiYjMTIzJGNvbnRlbnRfZmV0Y2ggc2Vjb25kX3NvcnRfb3JkZXI9J3VwJ308L3ByZT4NCg0KICAgICAgPGgzPk1heGltdW0gZGF0YSBzdHJ1Y3R1cmUgZm9yIGZldGNoIGl0ZW1zOjwvaDM+DQoNCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+DQogICYjMTIzOyoNCiAgICAkY29udGVudF9mZXRjaCA9IGFycmF5IG9mIGNsYXNzZXMNCiAgICBuID0gaW50ZWdlcg0KDQogICAgJGNvbnRlbnRfZmV0Y2hbbl0tJmd0O2l0ZW0gID0gIENvdW50ZXIgZm9yIGl0ZW1zIGluIGN1cnJlbnQgbGlzdCAoaW50ZWdlcikNCiAgKn0NCiAgJiMxMjMkY29udGVudF9mZXRjaFsxXS0mZ3Q7Y29udGVudC0mZ3Q7aWR9DQogICYjMTIzJGNvbnRlbnRfZmV0Y2hbMV0tJmd0O2NvbnRlbnQtJmd0O2FsaWFzfQ0KICAmIzEyMyRjb250ZW50X2ZldGNoWzFdLSZndDtjb250ZW50LSZndDt0aXRsZX0NCiAgJiMxMjMkY29udGVudF9mZXRjaFsxXS0mZ3Q7Y29udGVudC0mZ3Q7bWVudX0NCiAgJiMxMjMkY29udGVudF9mZXRjaFsxXS0mZ3Q7Y29udGVudC0mZ3Q7c2hvd30NCiAgJiMxMjMkY29udGVudF9mZXRjaFsxXS0mZ3Q7Y29udGVudC0mZ3Q7YWN0aXZlfQ0KICAmIzEyMyRjb250ZW50X2ZldGNoWzFdLSZndDtjb250ZW50LSZndDtkYXRhfQ0KDQogICYjMTIzJGNvbnRlbnRfZmV0Y2hbMV0tJmd0O3BhcmVudHMtJmd0O2lkfQ0KICAmIzEyMyRjb250ZW50X2ZldGNoWzFdLSZndDtwYXJlbnRzLSZndDthbGlhc30NCiAgJiMxMjMkY29udGVudF9mZXRjaFsxXS0mZ3Q7cGFyZW50cy0mZ3Q7dGl0bGV9DQoNCiAgJiMxMjMkY29udGVudF9mZXRjaFsxXS0mZ3Q7Y3JlYXRlZC0mZ3Q7ZGF0ZX0NCiAgJiMxMjMkY29udGVudF9mZXRjaFsxXS0mZ3Q7Y3JlYXRlZC0mZ3Q7YnktJmd0O3VzZXJuYW1lfQ0KICAmIzEyMyRjb250ZW50X2ZldGNoWzFdLSZndDtjcmVhdGVkLSZndDtieS0mZ3Q7bGFzdF9uYW1lfQ0KICAmIzEyMyRjb250ZW50X2ZldGNoWzFdLSZndDtjcmVhdGVkLSZndDtieS0mZ3Q7Zmlyc3RfbmFtZX0NCiAgJiMxMjMkY29udGVudF9mZXRjaFsxXS0mZ3Q7Y3JlYXRlZC0mZ3Q7YnktJmd0O2VtYWlsfQ0KDQogICYjMTIzJGNvbnRlbnRfZmV0Y2hbMV0tJmd0O21vZGlmaWVkLSZndDtkYXRlfQ0KICAmIzEyMyRjb250ZW50X2ZldGNoWzFdLSZndDttb2RpZmllZC0mZ3Q7YnktJmd0O3VzZXJuYW1lfQ0KICAmIzEyMyRjb250ZW50X2ZldGNoWzFdLSZndDttb2RpZmllZC0mZ3Q7YnktJmd0O2xhc3RfbmFtZX0NCiAgJiMxMjMkY29udGVudF9mZXRjaFsxXS0mZ3Q7bW9kaWZpZWQtJmd0O2J5LSZndDtmaXJzdF9uYW1lfQ0KICAmIzEyMyRjb250ZW50X2ZldGNoWzFdLSZndDttb2RpZmllZC0mZ3Q7YnktJmd0O2VtYWlsfQ0KDQogICYjMTIzJGNvbnRlbnRfZmV0Y2hbMV0tJmd0O2V4dGVuc2lvbn0NCiAgJiMxMjMqDQogICAgQW5kIGZvciBlYWNoIGV4dGVuc2lvbiB5b3UgaGF2ZSBuYW1lZCwgeW91IHdpbGwgZ2V0IGFuIGVxdWFsbHkgbmFtZWQgY2xhc3MgZWxlbWVudCBiZWxvdyAmIzEyMyRjb250ZW50X2ZldGNoW25dLSZndDtleHRlbnNpb25zDQoNCiAgICBlLmcuDQogICp9DQogICYjMTIzJGNvbnRlbnRfZmV0Y2hbMV0tPmV4dGVuc2lvbnMtJmd0O3N1bW1hcnktJmd0O2RhdGF9DQogICYjMTIzJGNvbnRlbnRfZmV0Y2hbMV0tJmd0O2V4dGVuc2lvbnMtJmd0O3N1bW1hcnktJmd0O2xlbmd0aH0NCiAgICAgIDwvcHJlPg0KDQogICAgICA8aDU+RGF0ZSBzdHJ1Y3R1cmUgb2YgcGFnZXIgaW5mb3JtYXRpb248L2g1Pg0KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4NCiAgJiMxMjMkcGFnZXJfaW5mby0mZ3Q7Y3VycmVudH0NCiAgJiMxMjMkcGFnZXJfaW5mby0mZ3Q7bWF4fQ0KICAmIzEyMyRwYWdlcl9pbmZvLSZndDtzaXplfTwvcHJlPg0KDQogICAgICA8aDU+VXNlZnVsbCBzbWFydHkgc25pcHBldHMgZm9yIHdvcmtpbmcgd2l0aCBjb250ZW50X2ZldGNoPC9oNT4NCiAgICAgIDxwPkJlbG93IHlvdSBmaW5kIHNvbWUgY29kZSBzbmlwcGV0cyB5b3UgY2FuIHVzZSBpbiB5b3VyIHRlbXBsYXRlcyBpbiBjb25qdW5jdGlvbiB3aXRoIGNvbnRlbnRfZmV0Y2g8L3A+DQoNCiAgICAgIDxoNT5QcmVwYXJlIHRlbXBsYXRlIGZvciBwYWdpbmc8L2g1Pg0KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4NCiAgJiMxMjM7YXNzaWduIHZhcj1wYWdlX2NhbGwgdmFsdWU9JHNtYXJ0eS5nZXQuc2hvd19wYWdlfQ0KICAmIzEyMztpZiAkcGFnZV9jYWxsID09ICcnfSYjMTIzO2Fzc2lnbiB2YXI9cGFnZV9jYWxsIHZhbHVlPTF9JiMxMjM7L2lmfTwvcHJlPg0KDQogICAgICA8cD5UaGlzIHdpbGwgbGlzdGVuIGZvciBVUkwgcGFyYW1ldGVyIGNhbGxlZCBzaG93X3BhZ2UgYW5kIGl0cyB2YWx1ZS4gSWYgbm8gcGFyYW1ldGVyIGZvdW5kLCBjcmVhdGUgaXMgYW5kIGFzc2lnbiB2YWx1ZSAxLiBVc2UgJHBhZ2VfY2FsbCBhcyB0aGUgdmFsdWUgb2YgdGhlIHBhZ2UgcGFyYW1ldGVyICYjMTIzOy4uLnBhZ2U9JHBhZ2VfY2FsbC4uLn08L3A+DQogICAgICA8aDQ+J25ld2VyJyAnb2xkZXInIHBhZ2VyPC9oND4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+DQogICYjMTIzO2lmICRwYWdlX2NhbGwgPiAxIH0NCiAgICAmbHQ7YSBocmVmPSJibG9nLmh0bT9zaG93X3BhZ2U9JiMxMjM7JHBhZ2VyX2luZm8tPmN1cnJlbnQtMX0iPm5ld2VyIGFydGljbGVzJmx0Oy9hPg0KICAmIzEyMzsvaWZ9DQoNCiAgJiMxMjM7aWYgJHBhZ2VyX2luZm8tPm1heCA+ICRwYWdlX2NhbGx9DQogICAgJmx0O2EgaHJlZj0iYmxvZy5odG0/c2hvd19wYWdlPSYjMTIzOyRwYWdlcl9pbmZvLT5jdXJyZW50KzF9Ij5vbGRlciBhcnRpY2xlcyZsdDsvYT4NCiAgJiMxMjM7L2lmfTwvcHJlPg0KICAgICAgPGg0PlBhZ2UgbnVtYmVyIGxpc3QgcGFnZXI8L2g0Pg0KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4NCiYjMTIzO3NlY3Rpb24gbmFtZT0naScgc3RhcnQ9MSBsb29wPSRwYWdlcl9pbmZvLT5tYXgrMSBzdGVwPTF9DQombHQ7YSBocmVmPSJibG9nLmh0bT9zaG93X3BhZ2U9JiMxMjM7JHNtYXJ0eS5zZWN0aW9uLmkuaW5kZXh9Ij4mIzEyMzskc21hcnR5LnNlY3Rpb24uaS5pbmRleH0mbHQ7L2E+DQomIzEyMzsvc2VjdGlvbn08L3ByZT4NCiAgICAgIDxoND5XYWxrIHRocm91Z2ggYWxsIGF2YWlsYWJsZSBlbGVtZW50czwvaDQ+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPg0KICAmIzEyMztjb250ZW50X2ZldGNoIC4uLiB9DQogICYjMTIzO2ZvcmVhY2ggJGNvbnRlbnRfZmV0Y2ggYXMgJGZldGNoX2RhdGF9DQogICYjMTIzOyRmZXRjaF9kYXRhLT5jb250ZW50LT5kYXRhfQ0KICAmIzEyMzsvZm9yZWFjaH08L3ByZT4NCiAgICAgIDxoND5EaXNwbGF5IHJlYWQgbW9yZSBsaW5rPC9oND4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+DQogICYjMTIzO2NvbnRlbnRfZmV0Y2ggLi4uIH0NCiAgJiMxMjM7Zm9yZWFjaCAkY29udGVudF9mZXRjaCBhcyAkZmV0Y2hfZGF0YX0NCiAgICAmIzEyMztpZiAkZmV0Y2hfZGF0YS0+ZXh0ZW5zaW9uID09IDF9DQogICAgICAmbHQ7YSBocmVmPSImIzEyMzskZmV0Y2hfZGF0YS0+Y29udGVudC0+YWxpYXN9Lmh0bSI+cmVhZCBtb3JlJmx0Oy9hPg0KICAgICYjMTIzOy9pZn0NCiAgJiMxMjM7L2ZvcmVhY2h9PC9wcmU+DQogICAgICA8cD5PcmlnaW5hbCBBdXRob3Igb2YgdGhlIGNvbnRlbnRfZHVtcCBwbHVnaW46IE5pbHMgSGFhY2sgJmx0O2hlbGxvQG9wdGljYWx2YWx2ZS5jb20mZ3Q7PC9wPg0KICAgIDwvZGl2Pg0KICA8L2xpPg0KICB7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKn0NCiAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4NCiAgICA8aDMgY2xhc3M9ImFsIj4mIzEyMztmaWxlc19saXN0fSA8c3BhbiBjbGFzcz0ic21hbGwiPkxpc3QgZmlsZXMgYW5kIGZvbGRlcnM8L3NwYW4+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+VGhpcyBwbHVnaW4gaXMgc3RpbGwgYSB3b3JrIGluIHByb2dyZXNzLCBzbyB0aGVyZSBhcmUgc29tZSBidWdzIHlldCB0byBiZSBmaXhlZC4gRG8gc29tZSB0aG9yb3VnaCB0ZXN0cyB0byBzZWUgaWYgaXQgZml0cyB5b3VyIG5lZWRzLjwvcD4NCiAgICAgIDxwPllvdSBjYW4gdXNlIHRoZSB0ZW1wbGF0ZSBiZWxvdyBhcyBhIHN0YXJ0aW5nIHBvaW50IHRvIGJ1aWxkIHlvdXIgb3duIHRlbXBsYXRlOjwvcD4NCg0KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4NCiAgJmx0O3VsJmd0Ow0KICAgICYjMTIzO2ZvcmVhY2ggJGZpbGVzX2xpc3QtJmd0O2ZpbGVzIGFzICRvbmV9DQogICAgICAmbHQ7bGkmZ3Q7DQogICAgICAgICYjMTIzO2lmICRvbmUuc3ViX3R5cGU9PSdpbWFnZSd9DQogICAgICAgICAgICAmIzEyMzsqDQogICAgICAgICAgICAgIGlmIHlvdSB3aXNoIHRvIHVzZSB0aHVtYnMgYnkgZGVmYXVsdCB0aGUgZm9sZGVyIG5hbWUgaXMgdGh1bWJzDQogICAgICAgICAgICAgICZsdDthIGhyZWY9IiYjMTIzOyRvbmUudXJsfSImZ3Q7Jmx0O2ltZyBzcmM9IiYjMTIzOyRvbmUudGh1bWJzX3VybH0iIGFsdD0iJiMxMjM7JG9uZS5uYW1lfSImZ3Q7Jmx0Oy9hJmd0Ow0KICAgICAgICAgICAgICBidXQgdGhhdCBjYW4gYmUgb3ZlcnJpZGVuIGJ5IHVzaW5nIHRoZSB0aHVtYnNfZm9sZGVyPSdmb2xkZXJuYW1lJyBwYXJhbWV0ZXIgb24gdGhlIHRhZy4NCiAgICAgICAgICAgICp9DQogICAgICAgICAgJmx0O2EgaHJlZj0iJiMxMjM7JG9uZS51cmx9IiZndDsmbHQ7aW1nIHNyYz0iJiMxMjM7JG9uZS51cmx9IiBhbHQ9IiYjMTIzOyRvbmUubmFtZX0iJmd0OyZsdDsvYSZndDsNCiAgICAgICAgJiMxMjM7ZWxzZX0NCiAgICAgICAgICZsdDthIGhyZWY9IiYjMTIzOyRvbmUudXJsfSImZ3Q7JiMxMjM7JG9uZS5uYW1lfSZsdDsvYSZndDsNCiAgICAgICAgJiMxMjM7L2lmfQ0KICAgICAgICAmbHQ7dWwmZ3Q7DQogICAgICAgICAgJmx0O2xpJmd0O25hbWU6ICYjMTIzOyRvbmUubmFtZX0mbHQ7L2xpJmd0Ow0KICAgICAgICAgICZsdDtsaSZndDt0eXBlOiAmIzEyMzskb25lLnR5cGV9Jmx0Oy9saSZndDsNCiAgICAgICAgICAmbHQ7bGkmZ3Q7dXJsOiAmIzEyMzskb25lLnVybH0mbHQ7L2xpJmd0Ow0KICAgICAgICAmIzEyMztpZiAkb25lLnR5cGUgPT0gJ2ZpbGUnfQ0KICAgICAgICAgICZsdDtsaSZndDtmaWxlX2V4dDogJiMxMjM7JG9uZS5maWxlX2V4dH0mbHQ7L2xpJmd0Ow0KICAgICAgICAgICZsdDtsaSZndDtzdWJfdHlwZTogJiMxMjM7JG9uZS5zdWJfdHlwZX0mbHQ7L2xpJmd0Ow0KICAgICAgICAgICZsdDtsaSZndDt0aXRsZTogJiMxMjM7JG9uZS50aXRsZX0mbHQ7L2xpJmd0Ow0KICAgICAgICAgICZsdDtsaSZndDtzaXplOiAmIzEyMzskb25lLnNpemV9Jmx0Oy9saSZndDsNCiAgICAgICAgICAmbHQ7bGkmZ3Q7ZGF0ZTogJiMxMjM7JG9uZS5kYXRlfSZsdDsvbGkmZ3Q7DQogICAgICAgICAgJiMxMjM7aWYgaXNzZXQoJG9uZS5kb3dubG9hZF9jb3VudCl9Jmx0O2xpJmd0O2Rvd25sb2FkczogJiMxMjM7JG9uZS5kb3dubG9hZF9jb3VudH0mbHQ7L2xpJmd0OyYjMTIzOy9pZn0NCiAgICAgICAgJiMxMjM7ZWxzZWlmICRvbmUudHlwZSA9PSAnZGlyJ30NCiAgICAgICAgICAmbHQ7bGkmZ3Q7ZmlsZV9leHQ6ICYjMTIzOyRvbmUuZmlsZV9leHR9Jmx0Oy9saSZndDsNCiAgICAgICAgICAmbHQ7bGkmZ3Q7dGl0bGU6ICYjMTIzOyRvbmUudGl0bGV9Jmx0Oy9saSZndDsNCiAgICAgICAgICAmbHQ7bGkmZ3Q7ZGF0ZTogJiMxMjM7JG9uZS5kYXRlfSZsdDsvbGkmZ3Q7DQogICAgICAgICYjMTIzOy9pZn0NCiAgICAgICAgJmx0Oy91bCZndDsNCiAgICAgICZsdDsvbGkmZ3Q7DQogICAgJiMxMjM7L2ZvcmVhY2h9DQogICZsdDsvdWwmZ3Q7DQogICZsdDtociZndDsNCiAgVG90YWwgU2l6ZSBUZXh0OiAmIzEyMzskZmlsZXNfbGlzdC0mZ3Q7dG90YWxfc2l6ZV90ZXh0fQ0KICBUb3RhbCBTaXplOiAmIzEyMzskZmlsZXNfbGlzdC0mZ3Q7dG90YWxfc2l6ZX08L3ByZT4NCiAgICA8L2Rpdj4NCiAgPC9saT4NCiAgeyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip9DQogIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+DQogICAgPGgzIGNsYXNzPSJhbCI+JiMxMjM7Y29udGVudF9wcm90ZWN0fSA8c3BhbiBjbGFzcz0ic21hbGwiPlByb3RlY3QgY29udGVudCB3aXRoIGEgcGFzc3dvcmQ8L3NwYW4+PC9oMz4NCiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPg0KICAgICAgPHA+VGhpcyBpcyBhIGZvcmsgb2YgPHN0cm9uZz5wYWdlX3Byb3RlY3Q8L3N0cm9uZz4gYnkgSm8gTW9yZy4gU2FtZSBjb2RlIGJhc2UsIGEgZmV3IGRpZmZlcmVuY2VzIGVtZXJnZWQgIGZyb20gYmVpbmcgaW50ZWdyYXRlZCBpbiBhIG1vZHVsZSwgaW4gcGFydGljdWxhciB0aGUgbGFjayBvZiBuZWVkIHRvIGluaXRpYWxpemUgdGhlIHBsdWdpbiBhcyBpbiB0aGUgb3JpZ2luYWwgcGx1Z2luLjxicj4NCiAgICAgICAgVGhpcyBwbHVnaW4gYWxsb3dzIHlvdSB0byBwcm90ZWN0IGEgbnVtYmVyIG9mIHBhZ2VzIHdpdGggb25lIG9yIG1vcmUgcGFzc3dvcmRzIGVpdGhlciBieSBiZWluZyBzZXQgb25jZSBwZXIgZWFjaCBwYWdlIHlvdSB3YW50IHRvIHByb3RlY3QsIG9yIGJ5IGJlaW5nIHNldCBvbiBhIHBhZ2UgdGVtcGxhdGUsIGFsbG93aW5nIHlvdSB0byBwcm90ZWN0IGFsbCBwYWdlcyBjb25uZWN0ZWQgdG8gdGhhdCB0ZW1wbGF0ZS4gSXQgaXMgY29tcGxlbWVudGVkIGJ5IGEgYmxvY2sgcGx1Z2luIDxjb2RlPjxzdHJvbmc+JiMxMjM7cHJvdGVjdH0gPGVtPi4uLmNvbnRlbnQgeW91IHdhbnQgdG8gcHJvdGVjdC4uLjwvZW0+ICYjMTIzOy9wcm90ZWN0fTwvc3Ryb25nPjwvY29kZT4gIGFuZCBhIG1vZGlmaWVyIDxjb2RlPjxzdHJvbmc+JiMxMjM7J3Byb3RlY3QgdGhpcyd8cHJvdGVjdH08L3N0cm9uZz48L2NvZGU+PC9wPg0KDQogICAgICAgIDxkaXYgY2xhc3M9Indhcm5pbmciIHN0eWxlPSJkaXNwbGF5OmJsb2NrOyI+DQogICAgICAgICAgPHA+DQogICAgICAgICAgICA8c3Ryb25nPk5vdGU6IDwvc3Ryb25nPiB0aGVyZSBpcyBhIHBhcnRpY3VsYXJpdHkgaW4gdGhlIHdheSBDTVNNUyByZW5kZXJzIGNvbnRlbnQgd2hpY2ggbWF5IGV4cG9zZSBwcm90ZWN0ZWQgY29udGVudCBpbiBjZXJ0YWluIHNpdHVhdGlvbnMuIFRvIHByZXZlbnQgdGhhdCB0aGVyZSBhcmUgYSBmZXcgcnVsZXMgeW91IG5lZWQgdG8gZm9sbG93Og0KICAgICAgICAgIDwvcD4NCiAgICAgICAgICA8dWw+DQogICAgICAgICAgICA8bGk+DQogICAgICAgICAgICAgIFdoZW4gdGhlIGRlZmF1bHQgY29udGVudCBibG9jayBpcyB0aGUgb25seSBvbmUgd2l0aCB0aGUgY29udGVudCB0byBwcm90ZWN0Og0KICAgICAgICAgICAgICA8b2wgdHlwZT0iMSI+DQogICAgICAgICAgICAgICAgPGxpPnVzZSBhbGwgdGhlIGxvZ2ljIGluc2lkZSB0aGUgYmxvY2sgaXRzZWxmIGV2ZW4gaWYgdGhlIHBhc3N3b3JkcyBhcmUgc2V0IG9uIHRoZSB0ZW1wbGF0ZTs8L2xpPg0KICAgICAgICAgICAgICAgIDxsaT5zZXQgdGhlIGxvZ2luIGZvcm0gYW5kIHBhc3N3b3JkcyBhcyBjbG9zZSB0byB0aGUgdG9wIG9mIHRoZSBjb250ZW50IGFzIHBvc3NpYmxlIHdoZW4gc2V0IGluc2lkZSB0aGUgY29udGVudCBibG9jazs8L2xpPg0KICAgICAgICAgICAgICAgIDxsaT51c2luZyBhbnkgb3RoZXIgY29udGVudCBwcm9wZXJ0eSB0byBzZXQgdGhlIGxvZ2ljIChhcyB0aGUgPHN0cm9uZz5TbWFydHkgZGF0YSBvciBsb2dpYyB0aGF0IGlzIHNwZWNpZmljIHRvIHRoaXMgcGFnZTwvc3Ryb25nPikgbWF5IHdvcmsgb24gYSB0eXBpY2FsIHNldHRpbmcgYnV0IHdpbGwgbGVhdmUgdGhlIHByb3RlY3RlZCBjb250ZW50IHZ1bG5lcmFibGUgaW4gY2VydGFpbiBjaXJjdW1zdGFuY2VzOzwvbGk+DQogICAgICAgICAgICAgICAgPGxpPmtlZXAgaW4gbWluZCB0aGF0IHRoZXJlIGlzIGEgZmVhdHVyZSBpbiBDTVNNUyB0aGF0IHdpbGwgc3RyaXAgZG93biB0aGUgd2hvbGUgdGVtcGxhdGUgYW5kIHJlbmRlciBvbmx5IHRoZSBkZWZhdWx0IGNvbnRlbnQsIHNvIGZvbGxvd2luZyB0aGUgYWJvdmUgcnVsZXMgd2lsbCBwcmV2ZW50IGV4cG9zdXJlIG9mIHRoZSBwcm90ZWN0ZWQgY29udGVudDs8L2xpPg0KICAgICAgICAgICAgICA8L29sPg0KICAgICAgICAgICAgPC9saT4NCiAgICAgICAgICAgIDxsaT5pZiB5b3UgaGF2ZSBtb3JlIHRoYW4gdGhlIGRlZmF1bHQgY29udGVudCBibG9jazoNCiAgICAgICAgICAgICAgIDxvbCB0eXBlPSIxIj4NCiAgICAgICAgICAgICAgICA8bGk+cHJlZmVyYWJseSBkb24ndCB1c2UgdGhlIG1haW4gYmxvY2sgdG8ga2VlcCB0aGUgcHJvdGVjdGVkIGNvbnRlbnQsIHVzZSBhIGRpZmZlcmVudCBibG9jayBmb3IgaXQ7PC9saT4NCiAgICAgICAgICAgICAgICA8bGk+Y29udGVudCBibG9ja3Mgb3RoZXIgdGhhbiB0aGUgbWFpbiBhcmUgbm90IHZ1bG5lcmFibGUgdG8gYmVpbmcgZXhwb3NlZCBieSB0aGUgYWJvdmUgZGVzY3JpYmVkIENNU01TIGZlYXR1cmU7PC9saT4NCiAgICAgICAgICAgICAgICA8bGk+aWYgeW91IG11c3QgdXNlIGl0IHRoZW4gZm9sbG93IHRoZSBydWxlcyBmb3IgdGhlIGRlZmF1bHQgY29udGVudCBhcyBpbiB0aGUgcHJldmlvdXMgc3VnZ2VzdGlvbjs8L2xpPg0KICAgICAgICAgICAgICA8L29sPg0KICAgICAgICAgICAgPC9saT4NCiAgICAgICAgICA8L3VsPg0KICAgICAgICA8L2Rpdj4NCg0KICAgICAgICA8ZGl2IGNsYXNzPSJ3YXJuaW5nIiBzdHlsZT0iZGlzcGxheTpibG9jazsiPg0KICAgICAgICAgIDxwPg0KICAgICAgICAgICAgPHN0cm9uZz5Ob3RlOiA8L3N0cm9uZz4gVGhpcyBpcyBhIHNpbXBsZSwgcmVsYXRpdmVseSBzYWZlIHdheSBvZiBwcm90ZWN0aW5nIGNvbnRlbnQgd2l0aG91dCBoYXZpbmcgdG8gaW5zdGFsbCBhIGZ1bGwtZmxlZGdlZCB1c2VycyBtYW5hZ2VtZW50IG1vZHVsZS4gSWYgeW91IG5lZWQgYSBtb3JlIGNvbXBsZXggYW5kIGNvbXBsZXRlIHVzZXJzJyBhY2Nlc3MgbWFuYWdlbWVudCBtb2R1bGUgcGxlYXNlIGNvbnNpZGVyIHVzaW5nIDxzdHJvbmc+TUFNUzwvc3Ryb25nPi4NCiAgICAgICAgICA8L3A+DQogICAgICAgIDwvZGl2Pg0KDQogICAgICAgIDxkaXYgY2xhc3M9ImluZm9ybWF0aW9uIiBzdHlsZT0iZGlzcGxheTpibG9jazsiPg0KICAgICAgICAgIDxwPg0KICAgICAgICAgICAgQmVjYXVzZSBvZiB0aGlzIHBsdWdpbiBpcyBhIGZvcmsgb2YgdGhlIGRpc2NvbnRpbnVlZCBQYWdlIFByb3RlY3QgKHBhZ2VfcHJvdGVjdCkgdGhlcmUgYXJlIGEgZmV3IHBhcmFtZXRlcnMgdGhhdCB3ZXJlIGxlZnQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIEFzIHRoaXMgcGx1Z2luIGRvZXNuJ3QgcmVxdWlyZSBpbml0aWFsaXphdGlvbiwgd2hpY2ggaXMgZG9uZSBhdCB0aGUgbW9kdWxlIGxldmVsIHdoZW4gaXQgaXMgbG9hZGVkLCB0aGUgZGVmYXVsdCBhbmQgdGhlIHNldCBhY3Rpb25zIGFyZSBub3cgdGhlIHNhbWUgdGhpbmcuIFRoYXQgbWVhbnMgdGhhdCBhIHR5cGljYWwgaW5pdGlhbGl6YXRpb24gdGFnIGRvZXMgbm90aGluZyBvbiBpdHMgb3duIGFuZCBjYW4gYmUgc2FmZWx5IHJlbW92ZWQgKGlmIHJlcGxhY2VkIGZyb20gYSBwYWdlX3Byb3RlY3Qgb3JpZ2luYWwgdGFnKSwgYnV0IGxlYXZpbmcgaXQgaW4gcGxhY2UgZG9lc24ndCBhZmZlY3QgaW4gYW55IHdheSB0aGUgc2l0ZSdzIHBlcmZvcm1hbmNlLg0KICAgICAgICAgIDwvcD4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9ImluZm9ybWF0aW9uIiBzdHlsZT0iZGlzcGxheTpibG9jazsiPg0KICAgICAgICAgIDxwPg0KICAgICAgICAgICAgUGFyYW1ldGVycyBtYXJrZWQgYXMgPHN0cm9uZz48ZW0+KHBlcnNpc3RlbnQpIDwvZW0+PC9zdHJvbmc+IGFyZSBzZXQgb25jZSBmb3IgdGhlIHdob2xlIHBhZ2UgcmVxdWVzdC4gVGhlIGRlZmF1bHQgYWN0aW9uIGNhbiBzZXQgYW55IGFuZCBhbGwgb2YgdGhlbSB3aXRob3V0IHRoZSBuZWVkIHRvIHJlcGVhdCB0aGVtIG9uIGV2ZXJ5IHRhZyBjYWxsLiBIb3dldmVyLCBhIGxhdGVyIGNhbGwgY2FuIG92ZXJyaWRlIGEgcHJldmlvdXNseSBzZXQgcGFyYW1ldGVyLg0KICAgICAgICAgIDwvcD4NCiAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgPHA+UGFyYW1ldGVyczo8L3A+DQoNCiAgICAgICAgPHVsPg0KICAgICAgICAgIDxsaT48c3Ryb25nPmFjdGlvbjwvc3Ryb25nPiA8ZW0+KG9wdGlvbmFsKTwvZW0+IC0gcG9zc2libGUgdmFsdWVzOg0KICAgICAgICAgICAgPHVsPg0KICAgICAgICAgICAgICA8bGk+PGVtPjxzdHJvbmc+ZGVmYXVsdDwvc3Ryb25nPjwvZW0+IDxzdHJvbmc+IDxlbT4oZGVmYXVsdCk8L2VtPjwvc3Ryb25nPjogdGhlIGRlZmF1bHQgYWN0aW9uIGZvciB0aGUgbW9kdWxlIGFuZCBjYW4gYmUgb21pdHRlZC4gT24gaXRzIG93biBpdCBkb2VzIG5vdGhpbmcsIGJ1dCBjYW4gYmUgdXNlZCBhcyBhIHNldCBhY3Rpb24gaW4gY29uanVuY3Rpb24gd2l0aCBvdGhlciBwYXJhbWV0ZXJzOzwvbGk+DQogICAgICAgICAgICAgIDxsaT48ZW0+PHN0cm9uZz5zZXQ8L3N0cm9uZz4gKGxlZ2FjeSkgKGRlcHJlY2F0ZWQpPC9lbT46IHVzZSB0aGlzIGFjdGlvbiB0byBkaXN0cmlidXRlIHBlcnNpc3RlbnQgcGFyYW1ldGVycyB0aG91Z2ggZGlmZmVyZW50IHRhZ3Mgb24gdGhlIHNhbWUgcGFnZSAoaGVscHMgd2l0aCB0ZW1wbGF0ZSByZWFkYWJpbGl0eSksIHRoaXMgYWN0aW9uIG5vdyBiZWluZyBwYXJ0IG9mIHRoZSBkZWZhdWx0IGFjdGlvbiBjYW4gYWxzbyBiZSBvbWl0dGVkOzwvbGk+DQogICAgICAgICAgICAgIDxsaT48ZW0+PHN0cm9uZz5mb3JtPC9zdHJvbmc+PC9lbT46IHNob3cgZWl0aGVyIHRoZSA8c3Ryb25nPmxvZ2luPC9zdHJvbmc+IGZvcm0gb3IgdGhlIDxzdHJvbmc+bG9nb3V0PC9zdHJvbmc+IGZvcm0sIGRlcGVuZGluZyBvbiBjdXJyZW50IHVzZXIgc3RhdGU7PC9saT4NCiAgICAgICAgICAgIDwvdWw+DQogICAgICAgICAgPC9saT4NCiAgICAgICAgICA8bGk+PHN0cm9uZz5sb2dpbl9hbGlhczwvc3Ryb25nPiA8ZW0+KG9wdGlvbmFsKSAocGVyc2lzdGVudCkgPC9lbT4gLSBhbiBleGlzdGluZyBwYWdlIGFsaWFzIChkZWZhdWx0cyB0byBubyByZWRpcmVjdGlvbik6IHRoaXMgd2lsbCBiZSB1c2VkIHRvIHJlZGlyZWN0IGFmdGVyIGxvZ2luIGlmIG5lZWRlZDs8L2xpPg0KICAgICAgICAgIDxsaT48c3Ryb25nPmxvZ291dF9hbGlhczwvc3Ryb25nPiA8ZW0+KG9wdGlvbmFsKSAocGVyc2lzdGVudCk8L2VtPiAtIGFuIGV4aXN0aW5nIHBhZ2UgYWxpYXMgKGRlZmF1bHRzIHRvIGN1cnJlbnQgcGFnZSBpLmUuIHRoZSBwYWdlIHdoZXJlIHRoZSBwbHVnaW4gaXMgYmVpbmcgdXNlZCk6IHRoaXMgd2lsbCBiZSB1c2VkIHRvIHJlZGlyZWN0IGFmdGVyIGxvZ291dDs8L2xpPg0KICAgICAgICAgIDxsaT48c3Ryb25nPnRpbWVvdXQ8L3N0cm9uZz4gPGVtPihvcHRpb25hbCkgKHBlcnNpc3RlbnQpPC9lbT4gLSBpZiBzZXQgdG8gYSB2YWx1ZSBoaWdoZXIgdGhhbiAwIGl0IHdpbGwgc2V0IGEgY29va2llIGFuZCB1c2UgdGhpcyB2YWx1ZSBhcyBtaW51dGVzIGJlZm9yZSBsb2dpbiB0aW1lcyBvdXQ7PC9saT4NCiAgICAgICAgICA8bGk+PHN0cm9uZz5jb29raWVfbmFtZTwvc3Ryb25nPiA8ZW0+KG9wdGlvbmFsKSAocGVyc2lzdGVudCk8L2VtPiAtIHRoZSBuYW1lIG9mIHRoZSBjb29raWUgKGRlZmF1bHRzIHRvIDxzdHJvbmc+Y3BfYXV0aDwvc3Ryb25nPik7PC9saT4NCiAgICAgICAgICA8bGk+PHN0cm9uZz53ZWxjb21lX21zZzwvc3Ryb25nPiA8ZW0+KG9wdGlvbmFsKSAocGVyc2lzdGVudCk8L2VtPiAtIGEgbWVzc2FnZSB0byBiZSBzaG93biBhcyBhIHdlbGNvbWUgdGV4dCBvbiB0aGUgbG9naW4gZm9ybTs8L2xpPg0KICAgICAgICAgIDxsaT48c3Ryb25nPnByb3RlY3RlZF9tc2c8L3N0cm9uZz4gPGVtPihvcHRpb25hbCkgKHBlcnNpc3RlbnQpPC9lbT4gLSBhIG1lc3NhZ2UgdG8gcmVwbGFjZSB0aGUgcHJvdGVjdGVkIGNvbnRlbnQgKGRlZmF1bHRzIHRvIG5vIG1lc3NhZ2UgYXQgYWxsKTs8L2xpPg0KICAgICAgICAgIDxsaT48c3Ryb25nPmVycm9yX21zZzwvc3Ryb25nPiA8ZW0+KG9wdGlvbmFsKSAocGVyc2lzdGVudCk8L2VtPiAtIGFuIGVycm9yIG1lc3NhZ2UgdG8gYmUgc2hvd24gb24gcGFzc3dvcmQgZXJyb3JzOzwvbGk+DQogICAgICAgIDwvdWw+DQogICAgICAgIDxwPkV4Y2x1c2l2ZSB0byBmb3JtIGFjdGlvbjo8L3A+DQogICAgICAgIDx1bD4NCiAgICAgICAgICA8bGk+PHN0cm9uZz5sb2dpbl9idG48L3N0cm9uZz4gPGVtPihvcHRpb25hbCk8L2VtPiAtIHRleHQgb2YgdGhlIGxvZ2luIGJ1dHRvbiBjYXB0aW9uIChkZWZhdWx0cyB0byBMb2dpbik7PC9saT4NCiAgICAgICAgICA8bGk+PHN0cm9uZz5sb2dvdXRfYnRuPC9zdHJvbmc+IDxlbT4ob3B0aW9uYWwpPC9lbT4gLSB0ZXh0IG9mIHRoZSBsb2dvdXQgYnV0dG9uIGNhcHRpb24oZGVmYXVsdHMgdG8gTG9nb3V0OzwvbGk+DQogICAgICAgICAgPGxpPjxzdHJvbmc+Zm9ybV9pZDwvc3Ryb25nPiA8ZW0+KG9wdGlvbmFsKTwvZW0+IC0gbG9naW4gZm9ybSBpZDs8L2xpPg0KICAgICAgICAgIDxsaT48c3Ryb25nPmZvcm1fY2xhc3M8L3N0cm9uZz4gPGVtPihvcHRpb25hbCk8L2VtPiAtIGxvZ2luIGZvcm0gY2xhc3M7PC9saT4NCiAgICAgICAgICA8bGk+PHN0cm9uZz5pbl9wYXNzX2lkPC9zdHJvbmc+IDxlbT4ob3B0aW9uYWwpPC9lbT4gLSBwYXNzd29yZCBpbnB1dCBpZDs8L2xpPg0KICAgICAgICAgIDxsaT48c3Ryb25nPmluX3Bhc3NfY2xhc3M8L3N0cm9uZz4gPGVtPihvcHRpb25hbCk8L2VtPiAtIHBhc3N3b3JkIGlucHV0IGNsYXNzOzwvbGk+DQogICAgICAgICAgPGxpPjxzdHJvbmc+YnV0dG9uX2lkPC9zdHJvbmc+IDxlbT4ob3B0aW9uYWwpPC9lbT4gLSBib3RoIGJ1dHRvbnMgaWQ7PC9saT4NCiAgICAgICAgICA8bGk+PHN0cm9uZz5idXR0b25fY2xhc3M8L3N0cm9uZz4gPGVtPihvcHRpb25hbCk8L2VtPiAtIGJvdGggYnV0dG9ucyBjbGFzczs8L2xpPg0KICAgICAgICA8L3VsPg0KICAgICAgICA8cD5UaGUgcHJvdGVjdCBibG9jayB0YWcgYWNjZXB0cyBvbmx5IG9uZSBwYXJhbWV0ZXI6PC9wPg0KICAgICAgICA8dWw+DQogICAgICAgICAgPGxpPjxzdHJvbmc+cHJvdGVjdGVkX21zZzwvc3Ryb25nPiA8ZW0+KG9wdGlvbmFsKTwvZW0+IC0gYSBtZXNzYWdlIHRvIHJlcGxhY2UgdGhlIHByb3RlY3RlZCBjb250ZW50IChkZWZhdWx0cyB0byB3aGF0ZXZlciB3YXMgc2V0IG9uIGEgcHJldmlvdXMgcGVyc2lzdGVudCB0YWcgY2FsbCk7PC9saT4NCiAgICAgICAgPC91bD4NCiAgICAgICAgPHA+VGhlIHByb3RlY3QgbW9kaWZpZXIgZG9lc24ndCB0YWtlIGFueSBwYXJhbWV0ZXJzLjwvcD4NCiAgICAgICAgPGhyPg0KICAgICAgICA8cD5FeGFtcGxlIGFzIGEgY29udGVudCBibG9jazo8L3A+DQogICAgICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4gICYjMTIzO3Byb3RlY3R9IC4uLmNvbnRlbnQgeW91IHdhbnQgdG8gcHJvdGVjdC4uLiAmIzEyMzsvcHJvdGVjdH0gYW5kIGEgbW9kaWZpZXIgPC9wcmU+DQogICAgICAgIDxwPkV4YW1wbGUgYXMgYSBjb250ZW50IG1vZGlmaWVyOjwvcD4NCiAgICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4gICYjMTIzOydwcm90ZWN0IHRoaXMnfHByb3RlY3R9PC9wcmU+DQoNCiAgICAgICAgPGgzPlF1aWNrIFVzZTwvaDM+DQogICAgICAgIDxwPlRoZSBwbHVnaW4gYWxsb3dzIGZvciBmYXN0IGRlcGxveW1lbnQgb2YgYSBzZWN1cmUgcGFnZS4gQ29udGVudCBQcm90ZWN0IHdpbGwgYXNzaWduIGEgPHN0cm9uZz5TbWFydHk8L3N0cm9uZz4gdmFyaWFibGUsIDxzdHJvbmc+JGNwX2xvZ2dlZF9pbjwvc3Ryb25nPiBieSBkZWZhdWx0LCB3aXRoIGEgYm9vbGVhbiB2YWx1ZSBmbGFnZ2luZyB3aGV0aGVyIHRoZSBjdXJyZW50IHVzZXIgaXMgbG9nZ2VkIGluIG9yIG5vdC48L3A+DQogICAgICAgIDxwPkV4YW1wbGU6PC9wPg0KICAgICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiAgJiMxMjM7Y29udGVudF9wcm90ZWN0IGFjdGlvbj0nZm9ybScgcGFzc3dvcmRzPSdwYXNzMSd9PC9wcmU+DQoNCiAgICAgICAgPHA+VGhpcyBpcyBhIHNpbXBsZSB3YXkgdG8gaGlkZSB0aGUgY29udGVudCBvZiBhIHBhZ2UgZnJvbSBub24tYXV0aG9yaXplZCB1c2Vyczo8L3A+DQogICAgICAgIDxkaXYgY2xhc3M9ImluZm9ybWF0aW9uIiBzdHlsZT0iZGlzcGxheTpibG9jazsiPg0KICAgICAgICAgIDxwPlVzZSB0aGlzIG9uIHRoZSBwYWdlIGNvbnRlbnQhPC9wPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4gICYjMTIzO2NvbnRlbnRfcHJvdGVjdCBhY3Rpb249J2Zvcm0nIHBhc3N3b3Jkcz0ncGFzczEnfQ0KICAmIzEyMztpZiAkY3BfbG9nZ2VkX2lufQ0KICAgIFRoZSBhbGxvd2VkIGNvbnRlbnQuLi4uDQogICYjMTIzO2Vsc2V9DQogICAgTm90IExvZ2dlZCBpbiENCiAgJiMxMjM7L2lmfTwvcHJlPg0KICAgICAgICA8cD5UaGUgcHJldmlvdXMgc25pcHBldCB3aWxsIHNob3cgYSBmb3JtIGZvciBub24tbG9nZ2VkLWluIHVzZXJzLCBhbG9uZyB3aXRoIHRoZSB0ZXh0ICJOb3QgTG9nZ2VkIGluISI8L3A+DQogICAgICAgIDxwPkZvciB0aGUgbG9nZ2VkLWluIHVzZXIgd2lsbCBwcmVzZW50IGEgbG9nb3V0IGJ1dHRvbiwgYW5kICJUaGUgYWxsb3dlZCBjb250ZW50Li4uLiIuPC9wPg0KICAgICAgICA8aHI+DQogICAgICAgIDxwPlRoaXMgaXMgYSBzaW1wbGUgd2F5IHRvIGhpZGUgdGhlIGNvbnRlbnQgb2YgYWxsIHBhZ2VzIHdpdGggdGhpcyB0ZW1wbGF0ZSBmcm9tIG5vbi1hdXRob3JpemVkIHVzZXJzOjwvcD4NCiAgICAgICAgPGRpdiBjbGFzcz0iaW5mb3JtYXRpb24iIHN0eWxlPSJkaXNwbGF5OmJsb2NrOyI+DQogICAgICAgICAgPHA+VXNlIHRoaXMgb24gdGhlIG1haW4gdGVtcGxhdGUhPC9wPg0KICAgICAgICA8L2Rpdj4NCg0KICAgICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiAgJiMxMjM7Y29udGVudCBuYW1lPXByb3RlY3RlZCBhc3NpZ249J3Byb3RlY3RlZCd9DQogICYjMTIzO2NvbnRlbnRfcHJvdGVjdCBhY3Rpb249J2Zvcm0nIHBhc3N3b3Jkcz0ncGFzczEnfQ0KICAmIzEyMztpZiAkY3BfbG9nZ2VkX2lufQ0KICAgICAgJiMxMjM7JHByb3RlY3RlZH0NCiAgJiMxMjM7ZWxzZX0NCiAgICBOb3QgTG9nZ2VkIGluIQ0KICAmIzEyMzsvaWZ9DQogICYjMTIzOyogb3IgKn0NCiAgJiMxMjM7JHByb3RlY3RlZHxwcm90ZWN0fQ0KICAmIzEyMzsqIG9yICp9DQogICYjMTIzO3Byb3RlY3R9JiMxMjM7JHByb3RlY3RlZH0mIzEyMzsvcHJvdGVjdH08L3ByZT4NCg0KICAgICAgPHA+VGhlIHByZXZpb3VzIHNuaXBwZXQgd2lsbCBzaG93IGEgZm9ybSBmb3Igbm9uLWxvZ2dlZC1pbiB1c2VycywgYWxvbmcgd2l0aCB0aGUgdGV4dCAiTm90IExvZ2dlZCBpbiEiPC9wPg0KICAgICAgPHA+Rm9yIHRoZSBsb2dnZWQtaW4gdXNlciB3aWxsIHByZXNlbnQgYSBsb2dvdXQgYnV0dG9uLCBhbmQgdGhlIGNvbnRlbnQgb2YgdGhlIHBhZ2UuPC9wPg0KICAgICAgPGhyPg0KICAgICAgPHA+WW91IGNhbiBhbHNvIHVzZSB0aGlzIHRhZyB0byBhZGQgYSBmZXcgcGFyYW1ldGVycyBleGNlcHQgZm9yIGFjdGlvbj0nc2V0JyBhbmQgYWN0aW9uPSdmb3JtJyAoPGVtPmFuZCBhbGwgZm9ybSBleGNsdXNpdmUgcGFyYW1ldGVycyBhcyB0aGV5IGFyZSBvbmx5IHBlcnRpbmVudCB0byB0aGUgZm9ybSBhY3Rpb24gYW5kIG5vdCBwZXJzaXN0ZW50PC9lbT4pLiBVc2U6PC9wPg0KICAgICAgPHVsPg0KICAgICAgICA8bGk+PHN0cm9uZz4mIzEyMztjb250ZW50X3Byb3RlY3QgcGFzc3dvcmRzPSc8L3N0cm9uZz5wYXNzMVsscGFzczxlbT48c3Ryb25nPjI8L3N0cm9uZz48L2VtPl0uLi5bLHBhc3M8ZW0+PHN0cm9uZz5uPC9zdHJvbmc+PC9lbT5dPHN0cm9uZz4nfTwvc3Ryb25nPjwvbGk+DQogICAgICAgIDxsaT48c3Ryb25nPiYjMTIzO2NvbnRlbnRfcHJvdGVjdCBhY3Rpb249Jzwvc3Ryb25nPmRlZmF1bHQ8c3Ryb25nPicgcGFzc3dvcmRzPSc8L3N0cm9uZz5wYXNzMVsscGFzczxlbT48c3Ryb25nPjI8L3N0cm9uZz48L2VtPl0uLi5bLHBhc3M8ZW0+PHN0cm9uZz5uPC9zdHJvbmc+PC9lbT5dPHN0cm9uZz4nfTwvc3Ryb25nPjwvbGk+DQogICAgICA8L3VsPg0KDQogICAgICA8cD5QdXQgdGhpcyBvbiB0aGUgZmllbGQgPHN0cm9uZz5TbWFydHkgZGF0YSBvciBsb2dpYyB0aGF0IGlzIHNwZWNpZmljIHRvIHRoaXMgcGFnZTwvc3Ryb25nPiBmb3VuZCBvbiB0aGUgcGFnZSA8ZW0+PHN0cm9uZz5fb3B0aW9ucyB0YWI8L3N0cm9uZz48L2VtPjo8L3A+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+DQogIHsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfQ0KICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPg0KICAgIDxoMyBjbGFzcz0iYWwiPiYjMTIzO3RyaWdnZXJfNDA0fSA8c3BhbiBjbGFzcz0ic21hbGwiPlRyaWdnZXIgYSA0MDQgZXJyb3IgPHNwYW4gc3R5bGU9ImNvbG9yOmdyZWVuIj48c3Ryb25nPihuZXcpPC9zdHJvbmc+PC9zcGFuPjwvc3Bhbj48L2gzPg0KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+DQogICAgICA8cD5BIHNtYXJ0eSBwbHVnaW4gdGhhdCB3aWxsIHRyaWdnZXIgYSBzZXJ2ZXIgNDA0IGVycm9yLiBUaGUgd2F5IHRoZSBlcnJvciB3aWxsIGJlIGhhbmRsZWQgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZXJlIGlzIGEgY3VzdG9tIENNU01TIDQwNCBlcnJvciBwYWdlIHNldCBpbiBDb250ZW50IE1hbmFnZXIgb3Igbm90LjwvcD4NCiAgICAgIDxwPlBhcmFtZXRlcnM6PC9wPg0KICAgICAgPHVsPg0KICAgICAgICA8bGk+PHN0cm9uZz5hY3RpdmU8L3N0cm9uZz4gLSBOZWVkcyB0byBiZSAxLCB0cnVlLCBvciBhIG5vbi1lbXB0eSBzdHJpbmcgdG8gdHJpZ2dlciB0aGUgZXJyb3I7PC9saT4NCiAgICAgICAgPGxpPjxzdHJvbmc+bXNnPC9zdHJvbmc+IC0gVGhlIG1lc3NhZ2UgdG8gZGlzcGxheSB3aGVuIHRoZSBlcnJvciBpcyB0cmlnZ2VyZWQgKGRlZmF1bHQgPHN0cm9uZz4nVGhpcyBjb250ZW50IGlzIG5vdCBhdmFpbGFibGUnPC9zdHJvbmc+Oyk8L2xpPg0KICAgICAgPC91bD4NCg0KICAgICAgPHA+RXhhbXBsZTo8L3A+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiYjMTIzO3RyaWdnZXJfNDA0IG1zZz0ndGhpcycgYWN0aXZlPSRkb190cmlnZ2VyfTwvcHJlPg0KICAgIDwvZGl2Pg0KICA8L2xpPg0KICB7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKn0NCiAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4NCiAgICA8aDMgY2xhc3M9ImFsIj4mIzEyMzt0cmlnZ2VyXzQwM30gPHNwYW4gY2xhc3M9InNtYWxsIj5UcmlnZ2VyIGEgNDAzIGVycm9yIDxzcGFuIHN0eWxlPSJjb2xvcjpncmVlbiI+PHN0cm9uZz4obmV3KTwvc3Ryb25nPjwvc3Bhbj48L3NwYW4+PC9oMz4NCiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPg0KICAgICAgPHA+QSBzbWFydHkgcGx1Z2luIHRoYXQgd2lsbCB0cmlnZ2VyIGEgc2VydmVyIDQwMyBlcnJvci4gVGhlIHdheSB0aGUgZXJyb3Igd2lsbCBiZSBoYW5kbGVkIGRlcGVuZHMgb24gd2hldGhlciB0aGVyZSBpcyBhIGN1c3RvbSBDTVNNUyA0MDMgZXJyb3IgcGFnZSBzZXQgaW4gQ29udGVudCBNYW5hZ2VyIG9yIG5vdC48L3A+DQogICAgICA8cD5QYXJhbWV0ZXJzOjwvcD4NCiAgICAgIDx1bD4NCiAgICAgICAgPGxpPjxzdHJvbmc+YWN0aXZlPC9zdHJvbmc+IC0gTmVlZHMgdG8gYmUgMSwgdHJ1ZSwgb3IgYSBub24tZW1wdHkgc3RyaW5nIHRvIHRyaWdnZXIgdGhlIGVycm9yOzwvbGk+DQogICAgICAgIDxsaT48c3Ryb25nPm1zZzwvc3Ryb25nPiAtIFRoZSBtZXNzYWdlIHRvIGRpc3BsYXkgd2hlbiB0aGUgZXJyb3IgaXMgdHJpZ2dlcmVkIChkZWZhdWx0IDxzdHJvbmc+J1Blcm1pc3Npb24gZGVuaWVkISc8L3N0cm9uZz4pOzwvbGk+DQogICAgICA8L3VsPg0KDQogICAgICA8cD5FeGFtcGxlOjwvcD4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JiMxMjM7dHJpZ2dlcl80MDMgbXNnPSd0aGlzJyBhY3RpdmU9JGRvX3RyaWdnZXJ9PC9wcmU+DQogICAgPC9kaXY+DQogIDwvbGk+DQogIHsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfQ0KPC91bD4NCnsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfQ0KeyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip9]]></data>
	</file>
	<file>
	  <filename>/templates/help_what_is_new_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgyPldoYXQgaXMgTmV3PC9oMj4NCg0KPHA+SGVyZSdzIHdoYXQgd2UgaGF2ZSBiZWVuIHdvcmtpbmcgb246PC9wPg0KPHVsPg0KICA8bGk+TmV3IFBsdWdpbnM6DQogICAgPHVsPg0KICAgICAgPGxpPjxzdHJvbmc+JiMxMjM7dHJpZ2dlcl80MDR9PC9zdHJvbmc+IC0gVHJpZ2dlciBhIDQwNCBlcnJvcjs8L2xpPg0KICAgICAgPGxpPjxzdHJvbmc+JiMxMjM7dHJpZ2dlcl80MDN9PC9zdHJvbmc+IC0gVHJpZ2dlciBhIDQwMyBlcnJvcjs8L2xpPg0KICAgIDwvdWw+DQogIDwvbGk+DQogIDxsaT5BbHRob3VnaCB0aGUgbW9kdWxlIGFsd2F5cyBkZXBlbmRlZCBvbiBDTVNNU0V4dCwgaXQgZGlkbid0IGVuZm9yY2UgdGhlIGRlcGVuZGVuY3kgd2hpY2ggcHJvYmFibHkgY3JlYXRlZCBvZGQgaXNzdWVzIHdpdGggc29tZSBvZiBpdHMgZnVuY3Rpb25hbGl0eSBpZiBDTVNNU0V4dCB3YXMgbm90IGluc3RhbGxlZDogdGhlIGRlcGVuZGVuY3kgaXMgbm93IG9mZmljaWFsIGFuZCBlbmZvcmNlZDs8L2xpPg0KPC91bD4NCg==]]></data>
	</file>
</module>
