PCEtLQogICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKCiAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKCiAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tPgo8aHRtbD4KCjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LUxhbmd1YWdlIiBjb250ZW50PSJlbi11cyI+CjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sO2NoYXJzZXQ9SVNPLTg4NTktMSI+Cjx0aXRsZT5BcGFjaGUgQW50IFVzZXIgTWFudWFsIC0gQ3JlZGl0czwvdGl0bGU+CjwvaGVhZD4KCjxib2R5PgoKPGRpdiBhbGlnbj0iY2VudGVyIj4KPGgxPkFwYWNoZSBBbnQgVXNlciBNYW51YWw8L2gxPgo8cD5ieTwvcD4KPC9kaXY+CjwhLS0gTmFtZXMgYXJlIGluIGFscGhhYmV0aWNhbCBvcmRlciwgb24gbGFzdCBuYW1lIC0tPgo8dWw+CiAgPGxpPlN0ZXBoYW5lIEJhaWxsaWV6ICg8YSBocmVmPSJtYWlsdG86c2JhaWxsaWV6QGltZWRpYXRpb24uY29tIj5zYmFpbGxpZXpAaW1lZGlhdGlvbi5jb208L2E+KTwvbGk+CiAgPGxpPk5pY29sYSBLZW4gQmFyb3p6aSAoPGEgaHJlZj0ibWFpbHRvOm5pY29sYWtlbkBhcGFjaGUub3JnIj5uaWNvbGFrZW5AYXBhY2hlLm9yZzwvYT4pPC9saT4KICA8bGk+SmFjcXVlcyBCZXJnZXJvbiAoPGEgaHJlZj0ibWFpbHRvOmphY3F1ZXMuYmVyZ2Vyb25AZG9naWNvLmNvbSI+amFjcXVlcy5iZXJnZXJvbkBkb2dpY28uY29tPC9hPik8L2xpPgogIDxsaT5TdGVmYW4gQm9kZXdpZyAoPGEgaHJlZj0ibWFpbHRvOnN0ZWZhbi5ib2Rld2lnQGZyZWVuZXQuZGUiPnN0ZWZhbi5ib2Rld2lnQGZyZWVuZXQuZGU8L2E+KTwvbGk+CiAgPGxpPlBhdHJpY2sgQ2hhbmV6b24gKDxhIGhyZWY9Im1haWx0bzpjaGFuZXpvbkBuZXRzY2FwZS5jb20iPmNoYW5lem9uQG5ldHNjYXBlLmNvbTwvYT4pPC9saT4KICA8bGk+SmFtZXMgRHVuY2FuIERhdmlkc29uICg8YSBocmVmPSJtYWlsdG86ZHVuY2FuQHgxODAuY29tIj5kdW5jYW5AeDE4MC5jb208L2E+KTwvbGk+CiAgPGxpPlRvbSBEaW1vY2sgKDxhIGhyZWY9Im1haWx0bzp0YWQxQGNvcm5lbGwuZWR1Ij50YWQxQGNvcm5lbGwuZWR1PC9hPik8L2xpPgogIDxsaT5QZXRlciBEb25hbGQgKDxhIGhyZWY9Im1haWx0bzpkb25hbGRwQGFwYWNoZS5vcmciPmRvbmFsZHBAYXBhY2hlLm9yZzwvYT4pPC9saT4KICA8bGk+ZElvbiBHaWxsYXJkICg8YSBocmVmPSJtYWlsdG86ZGlvbkBhcGFjaGUub3JnIj5kaW9uQGFwYWNoZS5vcmc8L2E+KTwvbGk+CiAgPGxpPkVyaWsgSGF0Y2hlciAoPGEgaHJlZj0ibWFpbHRvOmVoYXRjaGVyQGFwYWNoZS5vcmciPmVoYXRjaGVyQGFwYWNoZS5vcmc8L2E+KTwvbGk+CiAgPGxpPkRpYW5lIEhvbHQgKDxhIGhyZWY9Im1haWx0bzpob2x0ZGxAeWFob28uY29tIj5ob2x0ZGxAeWFob28uY29tPC9hPik8L2xpPgogIDxsaT5CaWxsIEtlbGx5ICg8YSBocmVmPSJtYWlsdG86YmlsbC5rZWxseUBzb2Z0d2lyZWQtaW5jLmNvbSI+YmlsbC5rZWxseUBzb2Z0d2lyZWQtaW5jLmNvbTwvYT4pPC9saT4KICA8bGk+TWFydGlqbiBLcnVpdGhvZjwvbGk+CiAgPGxpPkFybm91dCBKLiBLdWlwZXIgKDxhIGhyZWY9Im1haWx0bzphamt1aXBlckB3eHMubmwiPmFqa3VpcGVyQHd4cy5ubDwvYT4pPC9saT4KICA8bGk+QW50b2luZSBM6XZ5LUxhbWJlcnQ8L2xpPgogIDxsaT5Db25vciBNYWNOZWlsbDwvbGk+CiAgPGxpPkphbiBNYXTocm5lPC9saT4KICA8bGk+U3RlZmFubyBNYXp6b2NjaGkgKDxhIGhyZWY9Im1haWx0bzpzdGVmYW5vQGFwYWNoZS5vcmciPnN0ZWZhbm9AYXBhY2hlLm9yZzwvYT4pPC9saT4KICA8bGk+RXJpayBNZWFkZSAoPGEgaHJlZj0ibWFpbHRvOmVtZWFkZUBnZWVrZmFybS5vcmciPmVtZWFkZUBnZWVrZmFybS5vcmc8L2E+KTwvbGk+CiAgPGxpPlNhbSBSdWJ5ICg8YSBocmVmPSJtYWlsdG86cnVieXNAdXMuaWJtLmNvbSI+cnVieXNAdXMuaWJtLmNvbTwvYT4pPC9saT4KICA8bGk+TmljbyBTZWVzc2xlICg8YSBocmVmPSJtYWlsdG86bmljb0BzZWVzc2xlLmRlIj5uaWNvQHNlZXNzbGUuZGU8L2E+KTwvbGk+CiAgPGxpPkpvbiBTLiBTdGV2ZW5zICg8YSBocmVmPSJtYWlsdG86am9uQGxhdGNoa2V5LmNvbSI+am9uQGxhdGNoa2V5LmNvbTwvYT4pPC9saT4KICA8bGk+V29sZiBTaWJlcnNraTwvbGk+CiAgPGxpPk1hZ2VzaCBVbWFzYW5rYXI8L2xpPgogIDxsaT5Sb2dlciBWYXVnaG4gKDxhIGhyZWY9Im1haWx0bzpydmF1Z2huQHNlYWNvbmluYy5jb20iPnJ2YXVnaG5Ac2VhY29uaW5jLmNvbTwvYT4pPC9saT4KICA8bGk+RGF2ZSBXYWxlbmQgKDxhIGhyZWY9Im1haWx0bzpkd2FsZW5kQGNzLnR1ZnRzLmVkdSI+ZHdhbGVuZEBjcy50dWZ0cy5lZHU8L2E+KTwvbGk+CiAgPGxpPlBoaWxsaXAgV2VsbHMgKDxhIGhyZWY9Im1haWx0bzpwaGlsd2VsbHNAcm9ja2V0bWFpbC5jb20iPnBoaWx3ZWxsc0Byb2NrZXRtYWlsLmNvbTwvYT4pPC9saT4KICA8bGk+Q2hyaXN0b3BoIFdpbGhlbG1zPC9saT4KICA8bGk+Q3JhZWcgU3Ryb25nICg8YSBocmVmPSJtYWlsdG86Y3N0cm9uZ0BhcmllbHBhcnRuZXJzLmNvbSI+Y3N0cm9uZ0BhcmllbHBhcnRuZXJzLmNvbTwvYT4pPC9saT4KPC91bD4KCjxjZW50ZXI+CjxwPlZlcnNpb246IDEuOS42PC9wPgo8L2NlbnRlcj4KCgo8L2JvZHk+CjwvaHRtbD4K