Tm90ZQo9PT09CgpUaGlzIGZpbGUgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgcGVvcGxlIHdobyBhcmUgcGVybWl0dGVkIHRvIG1ha2UKY2hhbmdlcyB0byB2YXJpb3VzIHBhcnRzIG9mIHRoZSBjb21waWxlciBhbmQgYXNzb2NpYXRlZCBsaWJyYXJpZXMuCgpQbGVhc2UgZG8gbm90IGNvbnRhY3QgdGhlIHBlb3BsZSBpbiB0aGlzIGZpbGUgZGlyZWN0bHkgdG8gcmVwb3J0CnByb2JsZW1zIGluIEdDQy4KCkZvciBnZW5lcmFsIGluZm9ybWF0aW9uIGFib3V0IEdDQywgcGxlYXNlIHZpc2l0OgoKICBodHRwOi8vZ2NjLmdudS5vcmcKClRvIHJlcG9ydCBwcm9ibGVtcyBpbiBHQ0MsIHBsZWFzZSB2aXNpdDoKCiAgaHR0cDovL2djYy5nbnUub3JnL2J1Z3MuaHRtbAoKTWFpbnRhaW5lcnMKPT09PT09PT09PT0KCgkJCUJsYW5rZXQgV3JpdGUgUHJpdnMuCgpSaWNoYXJkIEVhcm5zaGF3CQkJCXJpY2hhcmQuZWFybnNoYXdAYXJtLmNvbQpSaWNoYXJkIEhlbmRlcnNvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydGhAcmVkaGF0LmNvbQpHZW9mZnJleSBLZWF0aW5nCQkJCWdlb2Zma0BnZW9mZmsub3JnClJpY2hhcmQgS2VubmVyCQkJCQlrZW5uZXJAbnl1LmVkdQpKZWZmIExhdwkJCQkJbGF3QHJlZGhhdC5jb20KTWljaGFlbCBNZWlzc25lcgkJCQlnbnVAdGhlLW1laXNzbmVycy5vcmcKSmFzb24gTWVycmlsbAkJCQkJamFzb25AcmVkaGF0LmNvbQpEYXZpZCBTLiBNaWxsZXIJCQkJCWRhdmVtQHJlZGhhdC5jb20KTWFyayBNaXRjaGVsbAkJCQkJbWFya0Bjb2Rlc291cmNlcnkuY29tCkJlcm5kIFNjaG1pZHQJCQkJCWJlcm5kLnNjaG1pZHRAYW5hbG9nLmNvbQpKaW0gV2lsc29uCQkJCQl3aWxzb25Ac3BlY2lmaXhpbmMuY29tCgoKCQkJQ1BVIFBvcnQgTWFpbnRhaW5lcnMJKENQVSBhbHBoYWJldGljYWwgb3JkZXIpCgphbHBoYSBwb3J0CQlSaWNoYXJkIEhlbmRlcnNvbglydGhAcmVkaGF0LmNvbQphcm0gcG9ydAkJTmljayBDbGlmdG9uCQluaWNrY0ByZWRoYXQuY29tCmFybSBwb3J0CQlSaWNoYXJkIEVhcm5zaGF3CXJpY2hhcmQuZWFybnNoYXdAYXJtLmNvbQphcm0gcG9ydAkJUGF1bCBCcm9vawkJcGF1bEBjb2Rlc291cmNlcnkuY29tCmF2ciBwb3J0CQlEZW5pcyBDaGVydHlrb3YJCWRlbmlzY0BvdmVydGEucnUKYXZyIHBvcnQJCU1hcmVrIE1pY2hhbGtpZXdpY3oJbWFyZWttQGFtZWxlay5nZGEucGwKYmZpbiBwb3J0CQlCZXJuZCBTY2htaWR0CQliZXJuZC5zY2htaWR0QGFuYWxvZy5jb20KYzR4IHBvcnQJCU1pY2hhZWwgSGF5ZXMJCW0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56CmNyaXMgcG9ydAkJSGFucy1QZXRlciBOaWxzc29uCWhwQGF4aXMuY29tCmNyeCBwb3J0CQlQYXVsIFdvZWdlcmVyCQlwYXVsLndvZWdlcmVyQG5zYy5jb20KZnIzMCBwb3J0CQlOaWNrIENsaWZ0b24JCW5pY2tjQHJlZGhhdC5jb20KZnJ2IHBvcnQJCUFsZHkgSGVybmFuZGV6CQlhbGR5aEByZWRoYXQuY29tCmZydiBwb3J0CQlBbGV4YW5kcmUgT2xpdmEJCWFvbGl2YUByZWRoYXQuY29tCmg4IHBvcnQJCQlKZWZmIExhdwkJbGF3QHJlZGhhdC5jb20KaDggcG9ydAkJCUthenUgSGlyYXRhCQlrYXp1QGNvZGVzb3VyY2VyeS5jb20KaHBwYSBwb3J0CQlKZWZmIExhdwkJbGF3QHJlZGhhdC5jb20KaHBwYSBwb3J0CQlEYXZlIEFuZ2xpbgkJZGF2ZS5hbmdsaW5AbnJjLmNhCmkzODYgcG9ydAkJUmljaGFyZCBIZW5kZXJzb24JcnRoQHJlZGhhdC5jb20KaWE2NCBwb3J0CQlKaW0gV2lsc29uCQl3aWxzb25Ac3BlY2lmaXhpbmMuY29tCmlxMjAwMCBwb3J0CQlOaWNrIENsaWZ0b24JCW5pY2tjQHJlZGhhdC5jb20KbTMyYyBwb3J0CQlESiBEZWxvcmllCQlkakByZWRoYXQuY29tCm0zMnIgcG9ydAkJTmljayBDbGlmdG9uCQluaWNrY0ByZWRoYXQuY29tCm02OGhjMTEgcG9ydAkJU3RlcGhhbmUgQ2FycmV6CQlzdGNhcnJlekBuZXJpbS5mcgptNjhrIHBvcnQgKD8pCQlKZWZmIExhdwkJbGF3QHJlZGhhdC5jb20KbTY4ayBwb3J0CQlBbmRyZWFzIFNjaHdhYgkJc2Nod2FiQHN1c2UuZGUKbTY4ay1tb3Rvcm9sYS1zeXN2IHBvcnQJUGhpbGlwcGUgRGUgTXV5dGVyCXBoZG1AbWFjcWVsLmJlCm1jb3JlIHBvcnQJCU5pY2sgQ2xpZnRvbgkJbmlja2NAcmVkaGF0LmNvbQptaXBzIHBvcnQgICAgICAgICAgICAgICBFcmljIENocmlzdG9waGVyICAgICAgICBlY2hyaXN0b0BhcHBsZS5jb20KbWlwcyBwb3J0CQlSaWNoYXJkIFNhbmRpZm9yZAlyaWNoYXJkQGNvZGVzb3VyY2VyeS5jb20KbW1peCBwb3J0CQlIYW5zLVBldGVyIE5pbHNzb24JaHBAYml0cmFuZ2UuY29tCm1uMTAzMDAgcG9ydAkJSmVmZiBMYXcJCWxhd0ByZWRoYXQuY29tCm1uMTAzMDAgcG9ydAkJQWxleGFuZHJlIE9saXZhCQlhb2xpdmFAcmVkaGF0LmNvbQptczEgcG9ydAkJQWxkeSBIZXJuYW5kZXoJCWFsZHloQHJlZGhhdC5jb20KcGRwMTEgcG9ydAkJUGF1bCBLb25pbmcJCW5pMWRAYXJybC5uZXQKcnM2MDAwIHBvcnQJCUdlb2ZmIEtlYXRpbmcJCWdlb2Zma0BnZW9mZmsub3JnCnJzNjAwMCBwb3J0CQlEYXZpZCBFZGVsc29obgkJZGplQHdhdHNvbi5pYm0uY29tCnJzNjAwMCB2ZWN0b3IgZXh0bnMJQWxkeSBIZXJuYW5kZXoJCWFsZHloQHJlZGhhdC5jb20KczM5MCBwb3J0CQlIYXJ0bXV0IFBlbm5lcgkJaHBlbm5lckBkZS5pYm0uY29tCnMzOTAgcG9ydAkJVWxyaWNoIFdlaWdhbmQJCXV3ZWlnYW5kQGRlLmlibS5jb20Kc2ggcG9ydAkJCUpvZXJuIFJlbm5lY2tlCQlqb2Vybi5yZW5uZWNrZUBzdC5jb20Kc2ggcG9ydAkJCUFsZXhhbmRyZSBPbGl2YQkJYW9saXZhQHJlZGhhdC5jb20Kc2ggbGlicmFyaWVzL2NvbmZpZ3VyeQlLYXogS29qaW1hCQlra29qaW1hQGdjYy5nbnUub3JnCnNwYXJjIHBvcnQJCVJpY2hhcmQgSGVuZGVyc29uCXJ0aEByZWRoYXQuY29tCnNwYXJjIHBvcnQJCURhdmlkIFMuIE1pbGxlcgkJZGF2ZW1AcmVkaGF0LmNvbQpzcGFyYyBwb3J0CQlKYWt1YiBKZWxpbmVrCQlqYWt1YkByZWRoYXQuY29tCnNwYXJjIHBvcnQJCUVyaWMgQm90Y2F6b3UJCWVib3RjYXpvdUBsaWJlcnR5c3VyZi5mcgp2ODUwIHBvcnQJCU5pY2sgQ2xpZnRvbgkJbmlja2NAcmVkaGF0LmNvbQp2YXggcG9ydAkJRGF2ZSBBbmdsaW4JCWRhdmUuYW5nbGluQG5yYy5jYQp2YXggcG9ydAkJTWF0dCBUaG9tYXMJCW1hdHRAM2FtLXNvZnR3YXJlLmNvbQp4ODYtNjQgcG9ydAkJSmFuIEh1Ymlja2EJCWpoQHN1c2UuY3oKeHN0b3JteTE2IHBvcnQJCUdlb2ZmcmV5IEtlYXRpbmcJZ2VvZmZrQGdlb2Zmay5vcmcKeHRlbnNhIHBvcnQJCUJvYiBXaWxzb24JCWJvYi53aWxzb25AYWNtLm9yZwoKCQkJT1MgUG9ydCBNYWludGFpbmVycwkoT1MgYWxwaGFiZXRpY2FsIG9yZGVyKQoKZGFyd2luIHBvcnQJCURhbGUgSm9oYW5uZXNlbgkJZGFsZWpAYXBwbGUuY29tCmRhcndpbiBwb3J0CQlNaWtlIFN0dW1wCQltcnNAYXBwbGUuY29tCmRhcndpbiBwb3J0CQlTdGFuIFNoZWJzCQlzaGVic0BhcHBsZS5jb20KREpHUFAJCQlESiBEZWxvcmllCQlkakBkZWxvcmllLmNvbQpmcmVlYnNkCQkJTG9yZW4gSi4gUml0dGxlCQlsanJpdHRsZUBhY20ub3JnCm5ldGJzZAkJCUphc29uIFRob3JwZQkJdGhvcnBlakBuZXRic2Qub3JnCnNjbzUsIHVuaXh3YXJlLCBzY28gdWRrCUtlYW4gSm9obnN0b24JCWprakBzY28uY29tCnNoLWxpbnV4LWdudQkJS2F6IEtvamltYQkJa2tvamltYUBnY2MuZ251Lm9yZwpSVEVNUyBQb3J0cwkJSm9lbCBTaGVycmlsbAkJam9lbEBvYXJjb3JwLmNvbQpSVEVNUyBQb3J0cwkJUmFsZiBDb3JzZXBpdXMJCXJhbGYuY29yc2VwaXVzQHJ0ZW1zLm9yZwpWeFdvcmtzIHBvcnRzCQlOYXRoYW4gU2lkd2VsbAkJbmF0aGFuQGNvZGVzb3VyY2VyeS5jb20Kd2luZG93cywgY3lnd2luLCBtaW5ndwlDaHJpc3RvcGhlciBGYXlsb3IJY2dmQGdjYy5nbnUub3JnCndpbmRvd3MsIGN5Z3dpbiwgbWluZ3cJRGFubnkgU21pdGgJCWRhbm55c21pdGhAdXNlcnMuc291cmNlZm9yZ2UubmV0CgoJCQlMYW5ndWFnZSBGcm9udCBFbmRzIE1haW50YWluZXJzCgpDIGZyb250IGVuZC9JU08gQzk5CUpvc2VwaCBNeWVycwkJanNtQHBvbHlvbWluby5vcmcudWsKQyBmcm9udCBlbmQvSVNPIEM5OQlSaWNoYXJkIEhlbmRlcnNvbglydGhAcmVkaGF0LmNvbQpBZGEgZnJvbnQgZW5kCQlHZWVydCBCb3NjaAkJYm9zY2hAZ25hdC5jb20KQWRhIGZyb250IGVuZAkJUm9iZXJ0IERld2FyCQlkZXdhckBnbmF0LmNvbQpBZGEgZnJvbnQgZW5kCQlBcm5hdWQgQ2hhcmxldAkJY2hhcmxldEBhY3QtZXVyb3BlLmZyCmZvcnRyYW4gOTUJCVBhdWwgQnJvb2sJCXBhdWxAY29kZXNvdXJjZXJ5LmNvbQpmb3J0cmFuIDk1CQlTdGV2ZW4gQm9zc2NoZXIJCXN0ZXZlbmJAc3VzZS5kZQpmb3J0cmFuIDk1CQlUb29uIE1vZW5lCQl0b29uQG1vZW5lLmluZGl2Lm5sdXVnLm5sCmMrKwkJCUphc29uIE1lcnJpbGwJCWphc29uQHJlZGhhdC5jb20KYysrICAgICAgICAgICAgICAgICAgICAgTWFyayBNaXRjaGVsbAkJbWFya0Bjb2Rlc291cmNlcnkuY29tCmMrKwkJCU5hdGhhbiBTaWR3ZWxsCQluYXRoYW5AY29kZXNvdXJjZXJ5LmNvbQpqYXZhCQkJUGVyIEJvdGhuZXIJCXBlckBib3RobmVyLmNvbQpqYXZhCQkJQW5kcmV3IEhhbGV5CQlhcGhAcmVkaGF0LmNvbQpqYXZhCQkJVG9tIFRyb21leQkJdHJvbWV5QHJlZGhhdC5jb20KbWVyY3VyeQkJCUZlcmd1cyBIZW5kZXJzb24JZmpoQGNzLm11Lm96LmF1Cm9iamVjdGl2ZS1jCQlTdGFuIFNoZWJzCQlzaGVic0BhcHBsZS5jb20Kb2JqZWN0aXZlLWMJCU92aWRpdSBQcmVkZXNjdQkJb3ZpZGl1QGN1cC5ocC5jb20Kb2JqZWN0aXZlLWMvYysrCQlaaWVtb3dpdCBMYXNraQkJemxhc2tpQGFwcGxlLmNvbQpvYmplY3RpdmUtYy9jKysJCU1pa2UgU3R1bXAJCW1yc0BhcHBsZS5jb20KdHJlZWxhbmcgICAgICAgICAgICAgICAgVGltIEpvc2xpbmcgICAgICAgICAgICAgdGVqQG1lbGJwYy5vcmcuYXUKdHJlZWxhbmcgICAgICAgICAgICAgICAgSmFtZXMgQS4gTW9ycmlzb24JcGh5dGhvbkBnY2MuZ251Lm9yZwoKCQkJVmFyaW91cyBNYWludGFpbmVycwoKY3BwbGliCQkJUGVyIEJvdGhuZXIJCXBlckBib3RobmVyLmNvbQpsaWJnY2oJCQlUb20gVHJvbWV5CQl0cm9tZXlAcmVkaGF0LmNvbQpsaWJnY2oJCQlCcnljZSBNY0tpbmxheQkJYnJ5Y2VAZ2NjLmdudS5vcmcKbGlib2JqYwkJCU5pY29sYSBQZXJvCQluLnBlcm9AbWkuZmxhc2huZXQuaXQKbGlib2JqYwkJCUFuZHJldyBQaW5za2kJCXBpbnNraWFAcGh5c2ljcy51Yy5lZHUKbG9vcCBkaXNjb3ZlcnkJCU1pY2hhZWwgSGF5ZXMJCW0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56CnNjaGVkdWxlciAoKyBoYWlmYSkJSmltIFdpbHNvbgkJd2lsc29uQHNwZWNpZml4aW5jLmNvbQpzY2hlZHVsZXIgKCsgaGFpZmEpCU1pY2hhZWwgTWVpc3NuZXIJZ251QHRoZS1tZWlzc25lcnMub3JnCnNjaGVkdWxlciAoKyBoYWlmYSkJSmVmZiBMYXcJCWxhd0ByZWRoYXQuY29tCnNjaGVkdWxlciAoKyBoYWlmYSkJVmxhZGltaXIgTWFrYXJvdgl2bWFrYXJvdkByZWRoYXQuY29tCnJlb3JnCQkJSmVmZiBMYXcJCWxhd0ByZWRoYXQuY29tCmNhbGxlci1zYXZlLmMJCUplZmYgTGF3CQlsYXdAcmVkaGF0LmNvbQpjYWxsZ3JhcGgJCUphbiBIdWJpY2thCQlqaEBzdXNlLmN6CmRlYnVnZ2luZyBjb2RlCQlKaW0gV2lsc29uCQl3aWxzb25Ac3BlY2lmaXhpbmMuY29tCmR3YXJmIGRlYnVnZ2luZyBjb2RlCUphc29uIE1lcnJpbGwJCWphc29uQHJlZGhhdC5jb20KYysrIHJ1bnRpbWUgbGlicwlQYW9sbyBDYXJsaW5pCQlwY2FybGluaUBzdXNlLmRlCmMrKyBydW50aW1lIGxpYnMgICAgICAgIEdhYnJpZWwgRG9zIFJlaXMgICAgICAgIGdkckBpbnRlZ3JhYmxlLXNvbHV0aW9ucy5uZXQKYysrIHJ1bnRpbWUgbGlicwlVbHJpY2ggRHJlcHBlcgkJZHJlcHBlckByZWRoYXQuY29tCmMrKyBydW50aW1lIGxpYnMJUGhpbCBFZHdhcmRzCQlwbWVAZ2NjLmdudS5vcmcKYysrIHJ1bnRpbWUgbGlicwlCZW5qYW1pbiBLb3NuaWsJCWJrb3pAcmVkaGF0LmNvbQpjKysgcnVudGltZSBsaWJzCUxvcmVuIEouIFJpdHRsZQkJbGpyaXR0bGVAYWNtLm9yZwoqc3ludGhldGljIG11bHRpcGx5CVRvcmJqb3JuIEdyYW5sdW5kCXRlZ2VAc3dveC5jb20KKmMtdG9ydHVyZQkJVG9yYmpvcm4gR3Jhbmx1bmQJdGVnZUBzd294LmNvbQpmaXhpbmNsdWRlcwkJQnJ1Y2UgS29yYgkJYmtvcmJAZ251Lm9yZwpnY3NlLmMgCQkJSmVmZiBMYXcJCWxhd0ByZWRoYXQuY29tCmdsb2JhbCBvcHQgZnJhbWV3b3JrCUplZmYgTGF3CQlsYXdAcmVkaGF0LmNvbQpqdW1wLmMJCQlEYXZpZCBTLiBNaWxsZXIJCWRhdmVtQHJlZGhhdC5jb20Kd2ViIHBhZ2VzCQlHZXJhbGQgUGZlaWZlcgkJZ2VyYWxkQHBmZWlmZXIuY29tCmJ1aWxkIHN0YXR1cyBsaXN0cwlKYW5pcyBKb2huc29uCQlqYW5pczE4N0B1cy5pYm0uY29tCmNvbmZpZy5zdWIvY29uZmlnLmd1ZXNzCUJlbiBFbGxpc3RvbgkJY29uZmlnLXBhdGNoZXNAZ251Lm9yZwpiYXNpYyBibG9jayByZW9yZGVyaW5nCUphc29uIEVja2hhcmR0CQlqbGVAcmljZS5lZHUKaTE4bgkJCVBoaWxpcHAgVGhvbWFzCQlwdGhvbWFzQHN1c2UuZGUKaTE4bgkJCUpvc2VwaCBNeWVycwkJanNtQHBvbHlvbWluby5vcmcudWsKZGlhZ25vc3RpYyBtZXNzYWdlcwlHYWJyaWVsIERvcyBSZWlzCWdkckBpbnRlZ3JhYmxlLXNvbHV0aW9ucy5uZXQKbGliaWJlcnR5CQlESiBEZWxvcmllCQlkakByZWRoYXQuY29tCmxpYmliZXJ0eQkJSWFuIExhbmNlIFRheWxvcglpYW5AYWlycy5jb20KYnVpbGQgbWFjaGluZXJ5ICgqLmluKQlESiBEZWxvcmllCQlkakByZWRoYXQuY29tCmJ1aWxkIG1hY2hpbmVyeSAoKi5pbikJTmF0aGFuYWVsIE5lcm9kZQluZXJvZGVuQGdjYy5nbnUub3JnCmJ1aWxkIG1hY2hpbmVyeSAoKi5pbikJQWxleGFuZHJlIE9saXZhCQlhb2xpdmFAcmVkaGF0LmNvbQpkb2NzIGNvLW1haW50YWluZXIJR2VyYWxkIFBmZWlmZXIJCWdlcmFsZEBwZmVpZmVyLmNvbQpkb2NzIGNvLW1haW50YWluZXIJSm9zZXBoIE15ZXJzCQlqc21AcG9seW9taW5vLm9yZy51awpwcmVkaWN0LmRlZgkJSmFuIEh1Ymlja2EJCWpoQHN1c2UuY3oKY29udHJpYi9yZWdyZXNzaW9uCUdlb2ZmIEtlYXRpbmcJCWdlb2Zma0BnZW9mZmsub3JnCmdjb3YJCQlKYW4gSHViaWNrYQkJamhAc3VzZS5jegpnY292CQkJTmF0aGFuIFNpZHdlbGwJCW5hdGhhbkBjb2Rlc291cmNlcnkuY29tCm9wdGlvbiBoYW5kbGluZwkJTmVpbCBCb290aAkJbmVpbEBkYWlrb2t1eWEuY28udWsKbGliZmZpIHRlc3RzdWl0ZQlBbmRyZWFzIFRvYmxlcgkJYW5kcmVhc3RAZ2NjLmdudS5vcmcKdGVzdHN1aXRlCQlKYW5pcyBKb2huc29uCQlqYW5pczE4N0B1cy5pYm0uY29tCm1pZGRsZS1lbmQJCVJvZ2VyIFNheWxlCQlyb2dlckBleWVzb3Blbi5jb20KbWlkZGxlLWVuZAkJSWFuIExhbmNlIFRheWxvcglpYW5AYWlycy5jb20KdHJlZS1zc2EJCURpZWdvIE5vdmlsbG8JCWRub3ZpbGxvQHJlZGhhdC5jb20KdHJlZS1zc2EJCUFuZHJldyBNYWNMZW9kCQlhbWFjbGVvZEByZWRoYXQuY29tClBSRQkJCURhbmllbCBCZXJsaW4JCWRiZXJsaW5AZGJlcmxpbi5vcmcKY29kZSBzaW5raW5nCQlEYW5pZWwgQmVybGluCQlkYmVybGluQGRiZXJsaW4ub3JnCm11ZGZsYXAJCQlGcmFuayBDaC4gRWlnbGVyCWZjaGVAcmVkaGF0LmNvbQp0cmVlIGJyb3dzZXIvdW5wYXJzZXIJU2ViYXN0aWFuIFBvcAkJcG9wQGNyaS5lbnNtcC5mcgpzY2V2LCBkYXRhIGRlcGVuZGVuY2UgICBEYW5pZWwgQmVybGluCQlkYmVybGluQGRiZXJsaW4ub3JnCnNjZXYsIGRhdGEgZGVwZW5kZW5jZQlTZWJhc3RpYW4gUG9wCQlwb3BAY3JpLmVuc21wLmZyCmxpbmVhciBsb29wIHRyYW5zZm9ybXMJRGFuaWVsIEJlcmxpbgkJZGJlcmxpbkBkYmVybGluLm9yZwpwcm9maWxlIGZlZWRiYWNrCUphbiBIdWJpY2thCQlqaEBzdXNlLmN6CnR5cGUtc2FmZSB2ZWN0b3JzCU5hdGhhbiBTaWR3ZWxsCQluYXRoYW5AY29kZXNvdXJjZXJ5LmNvbQphbGlhcyBhbmFseXNpcwkJRGFuaWVsIEJlcmxpbgkJZGJlcmxpbkBkYmVybGluLm9yZwphbGlhcyBhbmFseXNpcwkJRGllZ28gTm92aWxsbwkJZG5vdmlsbG9AcmVkaGF0LmNvbQoKTm90ZSBpbmRpdmlkdWFscyB3aG8gbWFpbnRhaW4gcGFydHMgb2YgdGhlIGNvbXBpbGVyIG5lZWQgYXBwcm92YWwgdG8gY2hlY2sKaW4gY2hhbmdlcyBvdXRzaWRlIG9mIHRoZSBwYXJ0cyBvZiB0aGUgY29tcGlsZXIgdGhleSBtYWludGFpbi4KCgoJCQlXcml0ZSBBZnRlciBBcHByb3ZhbAkobGFzdCBuYW1lIGFscGhhYmV0aWNhbCBvcmRlcikKCk1hcmsgRy4gQWRhbXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmsuZy5hZGFtc0BzeW1wYXRpY28uY2EKTWF0dCBBdXN0ZXJuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVzdGVybkBhcHBsZS5jb20KRGF2aWQgQXllcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5heWVyc0Bpbm9kZS5hdApHaW92YW5uaSBCYWpvCQkJCQlnaW92YW5uaWJham9AZ2NjLmdudS5vcmcKU2NvdHQgQmFtYnJvdWdoCQkJCQlzY290dGJAbmV0d2luZGVyLm9yZwpXb2xmZ2FuZyBCYW5nZXJ0aAkJCQliYW5nZXJ0aEBkZWFsaWkub3JnCkRhdmlkIEJpbGxpbmdodXJzdAkJCQlEYXZpZC5CaWxsaW5naHVyc3RAcmlvdGludG8uY29tCkxhdXJ5bmFzIEJpdmVpbmlzCQkJICAgICAgICBsYXVyeW5hcy5iaXZlaW5pc0BtaWYudnUubHQKVXJvcyBCaXpqYWsJCQkJCXVyb3NAa3NzLWxva2Euc2kKRXJpYyBCbGFrZQkJCQkJZXJpY2JAZ2NjLmdudS5vcmcKSmltIEJsYW5keQkJCQkJamltYkByZWRoYXQuY29tClBoaWwgQmx1bmRlbGwJCQkJCXBiQGZ1dHVyZXR2LmNvbQpIYW5zIEJvZWhtCQkJCQloYm9laG1AZ2NjLmdudS5vcmcKU2VnaGVyIEJvZXNzZW5rb29sCQkJCXNlZ2hlckBrZXJuZWwuY3Jhc2hpbmcub3JnClBhb2xvIEJvbnppbmkJCQkJCWJvbnppbmlAZ251Lm9yZwpOZWlsIEJvb3RoCQkJCQluZWlsQGRhaWtva3V5YS5jby51awpSb2JlcnQgQm93ZGlkZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3dkaWRnZUBhcHBsZS5jb20KSm9lbCBCcm9iZWNrZXIJCQkJCWJyb2JlY2tlckBnbmF0LmNvbQpEYXZlIEJyb2xsZXkJCQkJCWJyb2xsZXlAcmVkaGF0LmNvbQpLZXZpbiBCdWV0dG5lcgkJCQkJa2V2aW5iQHJlZGhhdC5jb20KQW5kcmV3IENhZ25leQkJCQkJY2FnbmV5QHJlZGhhdC5jb20KSm9obiBDYXJyCQkJCQlqZmNAbWl0LmVkdQpTdGV2ZSBDaGFtYmVybGFpbgkJCQlzYWNAdHJhbnNtZXRhLmNvbQpNaWNoYWVsIENoYXN0YWluCQkJCW1lYy5nbnVAbWluZHNwcmluZy5jb20KQ2hhbmRyYSBDaGF2dmEJCQkJCWNjaGF2dmFAcmVkaGF0LmNvbQpXaWxsaWFtIENvaGVuCQkJCQl3Y29oZW5AcmVkaGF0LmNvbQpKb3NoIENvbm5lcgkJCQkJamNvbm5lckBhcHBsZS5jb20KUi4gS2VsbGV5IENvb2sJCQkJCWtjb29rQGdjYy5nbnUub3JnCkNocmlzdGlhbiBDb3JuZWxzc2VuCQkJCWNjb3JuQGNzLnR1LWJlcmxpbi5kZQpGcmFu529pcy1YYXZpZXIgQ291ZGVydAkJCQljb3VkZXJ0QGNsaXBwZXIuZW5zLmZyCklhbiBEYWxsCQkJCQlpYW5AYmV3YXJlLmRyb3BiZWFyLmlkLmF1CkRhdmlkIERhbmV5CQkJCQlkZGFuZXlAYXZ0cmV4LmNvbQpCdWQgRGF2aXMJCQkJCWJkYXZpczk2NTlAY29tY2FzdC5uZXQKSmVycnkgRGVMaXNsZQkJCQkJanZkZWxpc2xlQHZlcml6b24ubmV0ClpkZW5layBEdm9yYWsJCQkJCWR2b3Jha3pAc3VzZS5jegpTdGV2ZSBFbGxjZXkJCQkJCXNqZUBjdXAuaHAuY29tCk1vaGFuIEVtYmFyCQkJCQlnbnVzdHVmZkB0aGlzaXNjb29sLmNvbQpNYXJjIEVzcGllCQkJCQllc3BpZUBjdnMub3BlbmJzZC5vcmcKQW5zZ2FyIEVzenRlcm1hbm4JCQkJYW5zZ2FyQHRocGh5LnVuaS1kdWVzc2VsZG9yZi5kZQpEb3VnIEV2YW5zCQkJCQlkamVAdHJhbnNtZXRhLmNvbQpUaG9tYXMgRml0enNpbW1vbnMJCQkJZml0enNpbUByZWRoYXQuY29tCkJyaWFuIEZvcmQJCQkJCWZvcmRAdnNzLmZzaS5jb20KS2F2ZWggR2hhemkJCQkJCWdoYXppQGNhaXAucnV0Z2Vycy5lZHUKTWF0dGhldyBHaW5nZWxsCQkJCQlnaW5nZWxsQGduYXQuY29tCkFudGhvbnkgR3JlZW4JCQkJCWdyZWVuQHJlZGhhdC5jb20KRG91ZyBHcmVnb3IJCQkJCWRvdWcuZ3JlZ29yQGdtYWlsLmNvbQpKb24gR3JpbW0JCQkJCWpncmltbTJAdXMuaWJtLmNvbQpSaWNoYXJkIEd1ZW50aGVyCQkJCXJndWVudGhlckBzdXNlLmRlCkxhdXJlbnQgR3VlcmJ5CQkJCQlsYXVyZW50QGd1ZXJieS5uZXQKTW9zdGFmYSBIYWdvZwkJCQkJaGFnb2dAZ2NjLmdudS5vcmcKT2xpdmllciBIYWlucXVlCQkJCQloYWlucXVlQGFjdC1ldXJvcGUuZnIKU3R1YXJ0IEhhc3RpbmdzCQkJCQlzdHVhcnRAYXBwbGUuY29tCk1hdHRoZXcgSGlsbGVyCQkJCQloaWxsZXJAcmVkaGF0LmNvbQpNYW5mcmVkIEhvbGxzdGVpbgkJCQltaEBzdXNlLmNvbQpGYWxrIEh1ZWZmbmVyCQkJCQlmYWxrQGRlYmlhbi5vcmcKQmVybmFyZG8gSW5ub2NlbnRpCQkJCWJlcm5pZUBkZXZlbGVyLmNvbQpEYW5pZWwgSmFjb2Jvd2l0egkJCQlkYW5AZGViaWFuLm9yZwpBbmRyZWFzIEphZWdlcgkJCQkJYWpAc3VzZS5kZQpGYXJpYm9yeiBKYWhhbmlhbgkJCQlmamFoYW5pYW5AYXBwbGUuY29tCktsYXVzIEthZW1wZgkJCQkJa2thZW1wZkBwcm9naXMuZGUKU3RldmUgS2FyZ2wJCQkJCXNna0B0cm91dG1hc2suYXBsLndhc2hpbmd0b24uZWR1CkJyZW5kYW4gS2Vob2UJCQkJCWJyZW5kYW5AemVuLm9yZwpNdW1pdCBLaGFuCQkJCQlraGFuQHhyYXlsaXRoLndpc2MuZWR1Ck1hdHRoaWFzIEtsb3NlCQkJCQlkb2tvQGRlYmlhbi5vcmcKSmVmZiBLbmFnZ3MJCQkJCWprbmFnZ3NAcmVkaGF0LmNvbQpNaWNoYWVsIEtvY2gJCQkJCWtvbnF1ZXJvckBnbXguZGUKVGhvbWFzIEtvZW5pZwkJCQkJVGhvbWFzLktvZW5pZ0BvbmxpbmUuZGUKTWF0dCBLcmFhaQkJCQkJa3JhYWlAZnRiZnMub3JnCkFuZHJlYXMgS3JlYmJlbAkJCQkJa3JlYmJlbDFAZGUuaWJtLmNvbQpTY290dCBSb2JlcnQgTGFkZAkJCQlzY290dC5sYWRkQGNveW90ZWd1bGNoLmNvbQpSYXp5YSBMYWRlbHNreQkJCQkJcmF6eWFAZ2NjLmdudS5vcmcKQWFyb24gVy4gTGFGcmFtYm9pc2UJCQkJYWFyb25hdmF5NjJAYWFyb253bC5jb20KTWFyYyBMZWhtYW5uCQkJCQlwY2dAZ29vZi5jb20KQWxhbiBMZWhvdHNreQkJCQkJYXBsQGFsdW0ubWl0LmVkdQpKYW1lcyBMZW1rZQkJCQkJamltQHdhc2FiaXN5c3RlbXMuY29tCktyaWFuZyBMZXJkc3V3YW5ha2lqCQkJCWxlcmRzdXdhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldApXYXJyZW4gTGV2eQkJCQkJd2FycmVubEBjcnV6aW8uY29tCkRvbiBMaW5kc2F5CQkJCQlkbGluZHNheUByZWRoYXQuY29tClJhbHBoIExvYWRlcgkJCQkJcmNsQGlodWcuY28ubnoKR2Fib3IgTG9raQkJCQkJbG9raUBpbmYudS1zemVnZWQuaHUKRGF2ZSBMb3ZlCQkJCQlkLmxvdmVAZGwuYWMudWsKTWFydGluIHYuIEz2d2lzCQkJCQlsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGUKSEogTHUJCQkJCQloamxAbHVjb24ub3JnClppZ2EgTWFoa292ZWMJCQkJCXppZ2EubWFoa292ZWNAa2xpa2Euc2kKUmFuaml0IE1hdGhldwkJCQkJcm1hdGhld0Bob3RtYWlsLmNvbQpNaWNoYWVsIE1hdHoJCQkJCW1hdHpAc3VzZS5kZQpHcmVnIE1jR2FyeQkJCQkJZ2ttQGdudS5vcmcKQWRhbSBNZWdhY3oJCQkJCWFkYW1AeHd0Lm9yZwpBbGFuIE1vZHJhCQkJCQlhbW9kcmFAYmlncG9uZC5uZXQuYXUKQ2F0aGVyaW5lIE1vb3JlCQkJCQljbG1AcmVkaGF0LmNvbQpEb3JpdCBOYWlzaGxvcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3JpdEBpbC5pYm0uY29tCkFkYW0gTmVtZXQJCQkJCWFuZW1ldEBsbnh3LmNvbQpEYW4gTmljb2xhZXNjdQkJCQkJZGFubkBpY3MudWNpLmVkdQpEYXZpZCBPJ0JyaWVuCQkJCQlvYnJpZW5ARnJlZUJTRC5vcmcKVHVybHkgTydDb25ub3IJCQkJCXR1cmx5QGFwcGxlLmNvbQpKZWZmcmV5IEQuIE9sZGhhbQkJCQlvbGRoYW1AY29kZXNvdXJjZXJ5LmNvbQpSYWluZXIgT3J0aAkJCQkJcm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFCkRldmFuZyBQYXRlbAkJCQkJZHBhdGVsQGFwcGxlLmNvbQpHcmFlbWUgUGV0ZXJzb24JCQkJCWdwQHFueC5jb20KQWxleGFuZHJlIFBldGl0LUJpYW5jbwkJCQlhcGJpYW5jb0ByZWRoYXQuY29tCk5pY29sYXMgUGl0cmUJCQkJCW5pY29AY2FtLm9yZwpDbGludG9uIFBvcGV0egkJCQkJY3BvcGV0ekBjcG9wZXR6LmNvbQpKZXJyeSBRdWlubgkJCQkJamxxdWlubkBvcHRvbmxpbmUubmV0ClJvbGYgUmFzbXVzc2VuCQkJCQlyb2xmd3JAZ2NjLmdudS5vcmcKVm9sa2VyIFJlaWNoZWx0CQkJCQlyZWljaGVsdEBpZ3BtLnJ3dGgtYWFjaGVuLmRlClRvbSBSaXgJCQkJCQl0cml4QHJlZGhhdC5jb20KQ3JhaWcgUm9kcmlndWVzCQkJCQlyb2RyaWdjQGdjYy5nbnUub3JnCkdhdmluIFJvbWlnLUtvY2gJCQkJZ2F2aW5AcmVkaGF0LmNvbQpJcmEgUm9zZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcmFyQGlsLmlibS5jb20KTWFjaWVqIFcuIFJvenlja2kJCQkJbWFjcm9AbGludXgtbWlwcy5vcmcKSXJhIFJ1YmVuCQkJCQlpcmFAYXBwbGUuY29tCkRvdWdsYXMgUnVwcAkJCQkJcnVwcEBnbmF0LmNvbQpNYXR0aGV3IFNhY2hzCQkJCQltc2FjaHNAYXBwbGUuY29tCkFsZXggU2FtdWVsCQkJCQlzYW11ZWxAY29kZXNvdXJjZXJ5LmNvbQpUb2JpYXMgU2NobPx0ZXIJCQkJCXRvYmlhcy5zY2hsdWV0ZXJAcGh5c2lrLnVuaS1tdWVuY2hlbi5kZQpTdmVpbiBTZWxkYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdmVpbkBkZXYuc2VsZGFsLmNvbQpGcmFueiBTaXJsCQkJCQlmcmFuei5zaXJsLWtlcm5lbEBsYXV0ZXJiYWNoLmNvbQpNaWNoYWVsIFNva29sb3YJCQkJCW1zb2tvbG92QGl2YW4uSGFyaGFuLk9SRwpSaWNoYXJkIFN0YWxsbWFuCQkJCXJtc0BnbnUub3JnCkdyYWhhbSBTdG90dAkJCQkJZ3JhaGFtLnN0b3R0QGJ0aW50ZXJuZXQuY29tCk1pa2UgU3R1bXAJCQkJCW1yc0BhcHBsZS5jb20KSmVmZiBTdHVybQkJCQkJanN0dXJtQGdjYy5nbnUub3JnCktyZXN0ZW4gS3JhYiBUaG9ydXAJCQkJa3JhYkBnY2MuZ251Lm9yZwpDYXJvbGluZSBUaWNlCQkJCQljdGljZUBhcHBsZS5jb20KTWljaGFlbCBUaWVtYW5uCQkJCQl0aWVtYW5uQHJlZGhhdC5jb20KRGF2aWQgVW5nCQkJCQlkYXZpZHVAbWlwcy5jb20KSm9uYXRoYW4gV2FrZWx5CQkJCQlyZWRpQGdjYy5nbnUub3JnCktyaXN0ZXIgV2FsZnJpZHNzb24JCQkJY2F0b0BkZi5sdGguc2UKRmVuZyBXYW5nCQkJCQlmZW5nd2FuZ0BudWR0LmVkdS5jbgpKb2huIFdlaGxlCQkJCQlqb2huQGZlaXRoLmNvbQpGbG9yaWFuIFdlaW1lcgkJCQkJZndAZGVuZWIuZW55by5kZQpaYWNrIFdlaW5iZXJnCQkJCQl6YWNrd0BwYW5peC5jb20KTWFyayBXaWVsYWFyZAkJCQkJbWFya0BnY2MuZ251Lm9yZwpDYXJsbyBXb29kCQkJCQljYXJsb0BhbGlub2UuY29tCkNhbnF1biBZYW5nCQkJCQljYW5xdW5AbnVkdC5lZHUuY24KSmllIFpoYW5nCQkJCQlqaWUuemhhbmdAYW5hbG9nLmNvbQpKb24gWmllZ2xlcgkJCQkJam9uekBhcHBsZS5jb20KSm9zZWYgWmxvbWVrCQkJCQlqb3NlZi56bG9tZWtAZW1haWwuY3oKCkJ1ZyBkYXRhYmFzZSBvbmx5IGFjY291bnRzCgpKYW1lcyBEZW5uZXR0CQkJCQlqZGVubmV0dEBhY20ub3JnCkNocmlzdGlhbiBFaHJoYXJkdAkJCQllaHJoYXJkdEBtYXRoZW1hdGlrLnVuaS11bG0uZGUKRGFyYSBIYXplZ2hpCQkJCQlkaGF6ZWdoaUB5YWhvby5jb20K